This repository has been archived on 2025-09-03. You can view files and clone it. You cannot open issues or pull requests or push a commit.
Files
Alicja Cięciwa cb8886666c login page
2020-10-27 12:57:58 +01:00

46 lines
1.4 KiB
Python

import six
from .base import DataView
class Package(DataView):
"""A package requirement specified in a Pipfile.
This is the base class of variants appearing in either `[packages]` or
`[dev-packages]` sections of a Pipfile.
"""
# The extra layer is intentional. Cerberus does not allow top-level keys
# to have oneof_schema (at least I can't do it), so we wrap this in a
# top-level key. The Requirement model class implements extra hacks to
# make this work.
__SCHEMA__ = {
"__package__": {
"oneof_type": ["string", "dict"],
},
}
@classmethod
def validate(cls, data):
# HACK: Make this validatable for Cerberus. See comments in validation
# side for more information.
return super(Package, cls).validate({"__package__": data})
def __getattr__(self, key):
if isinstance(self._data, six.string_types):
if key == "version":
return self._data
raise AttributeError(key)
try:
return self._data[key]
except KeyError:
pass
raise AttributeError(key)
def __setattr__(self, key, value):
if key == "_data":
super(Package, self).__setattr__(key, value)
elif key == "version" and isinstance(self._data, six.string_types):
self._data = value
else:
self._data[key] = value