Spaces:
Running
Running
# coding: utf-8 | |
from __future__ import absolute_import | |
import datetime | |
import pprint | |
import sys | |
import typing | |
from datetime import datetime # noqa: F401 | |
from typing import Dict, List # noqa: F401 | |
import six | |
import warnings | |
import dill | |
def load(filepath: str): | |
""" | |
Load a pickled object with Python downwards compatibility | |
Args: | |
filepath (str): path to the file. | |
""" | |
warnings.warn( | |
"Loading languages will use a text files in the future", FutureWarning | |
) | |
try: | |
with open(filepath, 'rb') as f: | |
obj = dill.load(f) | |
except TypeError: | |
# Necessary to load python3.7 pickled objects with >=3.8: | |
# For details see: https://github.com/uqfoundation/dill/pull/406 | |
storage = dill._dill._reverse_typemap['CodeType'] | |
dill._dill._reverse_typemap['CodeType'] = dill._dill._create_code | |
with open(filepath, 'rb') as f: | |
obj = dill.load(f) | |
dill._dill._reverse_typemap['CodeType'] = storage | |
return obj | |
if sys.version_info < (3, 7): | |
import typing | |
def is_generic(klass): | |
"""Determine whether klass is a generic class""" | |
return type(klass) == typing.GenericMeta | |
def is_dict(klass): | |
"""Determine whether klass is a Dict""" | |
return klass.__extra__ == dict | |
def is_list(klass): | |
"""Determine whether klass is a List""" | |
return klass.__extra__ == list | |
else: | |
def is_generic(klass): | |
"""Determine whether klass is a generic class""" | |
return hasattr(klass, "__origin__") | |
def is_dict(klass): | |
"""Determine whether klass is a Dict""" | |
return klass.__origin__ == dict | |
def is_list(klass): | |
"""Determine whether klass is a List""" | |
return klass.__origin__ == list | |
def _deserialize(data, klass): | |
"""Deserializes dict, list, str into an object. | |
:param data: dict, list or str. | |
:param klass: class literal, or string of class name. | |
:return: object. | |
""" | |
if data is None: | |
return None | |
if klass in six.integer_types or klass in (float, str, bool, bytearray): | |
return _deserialize_primitive(data, klass) | |
elif klass == object: | |
return _deserialize_object(data) | |
elif klass == datetime.date: | |
return deserialize_date(data) | |
elif klass == datetime.datetime: | |
return deserialize_datetime(data) | |
elif typing_utils.is_generic(klass): | |
if typing_utils.is_list(klass): | |
return _deserialize_list(data, klass.__args__[0]) | |
if typing_utils.is_dict(klass): | |
return _deserialize_dict(data, klass.__args__[1]) | |
else: | |
return deserialize_model(data, klass) | |
def _deserialize_primitive(data, klass): | |
"""Deserializes to primitive type. | |
:param data: data to deserialize. | |
:param klass: class literal. | |
:return: int, long, float, str, bool. | |
:rtype: int | long | float | str | bool | |
""" | |
try: | |
value = klass(data) | |
except UnicodeEncodeError: | |
value = six.u(data) | |
except TypeError: | |
value = data | |
return value | |
def _deserialize_object(value): | |
"""Return an original value. | |
:return: object. | |
""" | |
return value | |
def deserialize_date(string): | |
"""Deserializes string to date. | |
:param string: str. | |
:type string: str | |
:return: date. | |
:rtype: date | |
""" | |
try: | |
from dateutil.parser import parse | |
return parse(string).date() | |
except ImportError: | |
return string | |
def deserialize_datetime(string): | |
"""Deserializes string to datetime. | |
The string should be in iso8601 datetime format. | |
:param string: str. | |
:type string: str | |
:return: datetime. | |
:rtype: datetime | |
""" | |
try: | |
from dateutil.parser import parse | |
return parse(string) | |
except ImportError: | |
return string | |
def deserialize_model(data, klass): | |
"""Deserializes list or dict to model. | |
:param data: dict, list. | |
:type data: dict | list | |
:param klass: class literal. | |
:return: model object. | |
""" | |
instance = klass() | |
if not instance.openapi_types: | |
return data | |
for attr, attr_type in six.iteritems(instance.openapi_types): | |
if ( | |
data is not None | |
and instance.attribute_map[attr] in data | |
and isinstance(data, (list, dict)) | |
): | |
value = data[instance.attribute_map[attr]] | |
setattr(instance, attr, _deserialize(value, attr_type)) | |
return instance | |
def _deserialize_list(data, boxed_type): | |
"""Deserializes a list and its elements. | |
:param data: list to deserialize. | |
:type data: list | |
:param boxed_type: class literal. | |
:return: deserialized list. | |
:rtype: list | |
""" | |
return [_deserialize(sub_data, boxed_type) for sub_data in data] | |
def _deserialize_dict(data, boxed_type): | |
"""Deserializes a dict and its elements. | |
:param data: dict to deserialize. | |
:type data: dict | |
:param boxed_type: class literal. | |
:return: deserialized dict. | |
:rtype: dict | |
""" | |
return {k: _deserialize(v, boxed_type) for k, v in six.iteritems(data)} | |
T = typing.TypeVar("T") | |
class Model(object): | |
# openapiTypes: The key is attribute name and the | |
# value is attribute type. | |
openapi_types = {} | |
# attributeMap: The key is attribute name and the | |
# value is json key in definition. | |
attribute_map = {} | |
def from_dict(cls: typing.Type[T], dikt) -> T: | |
"""Returns the dict as a model""" | |
return util.deserialize_model(dikt, cls) | |
def to_dict(self): | |
"""Returns the model properties as a dict | |
:rtype: dict | |
""" | |
result = {} | |
for attr, _ in six.iteritems(self.openapi_types): | |
value = getattr(self, attr) | |
if isinstance(value, list): | |
result[attr] = list( | |
map(lambda x: x.to_dict() if hasattr(x, "to_dict") else x, value) | |
) | |
elif hasattr(value, "to_dict"): | |
result[attr] = value.to_dict() | |
elif isinstance(value, dict): | |
result[attr] = dict( | |
map( | |
lambda item: (item[0], item[1].to_dict()) | |
if hasattr(item[1], "to_dict") | |
else item, | |
value.items(), | |
) | |
) | |
else: | |
result[attr] = value | |
return result | |
def to_str(self): | |
"""Returns the string representation of the model | |
:rtype: str | |
""" | |
return pprint.pformat(self.to_dict()) | |
def __repr__(self): | |
"""For `print` and `pprint`""" | |
return self.to_str() | |
def __eq__(self, other): | |
"""Returns true if both objects are equal""" | |
return self.__dict__ == other.__dict__ | |
def __ne__(self, other): | |
"""Returns true if both objects are not equal""" | |
return not self == other | |
class Drug(Model): | |
"""NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech). | |
Do not edit the class manually. | |
""" | |
def __init__(self, smiles=None, name=None): # noqa: E501 | |
"""Drug - a model defined in OpenAPI | |
:param smiles: The smiles of this Drug. # noqa: E501 | |
:type smiles: str | |
:param name: The name of this Drug. # noqa: E501 | |
:type name: str | |
""" | |
self.openapi_types = {"smiles": str, "name": str} | |
self.attribute_map = {"smiles": "smiles", "name": "name"} | |
self._smiles = smiles | |
self._name = name | |
def from_dict(cls, dikt) -> "Drug": | |
"""Returns the dict as a model | |
:param dikt: A dict. | |
:type: dict | |
:return: The Drug of this Drug. # noqa: E501 | |
:rtype: Drug | |
""" | |
return util.deserialize_model(dikt, cls) | |
def smiles(self): | |
"""Gets the smiles of this Drug. | |
:return: The smiles of this Drug. | |
:rtype: str | |
""" | |
return self._smiles | |
def smiles(self, smiles): | |
"""Sets the smiles of this Drug. | |
:param smiles: The smiles of this Drug. | |
:type smiles: str | |
""" | |
if smiles is None: | |
raise ValueError( | |
"Invalid value for `smiles`, must not be `None`" | |
) # noqa: E501 | |
self._smiles = smiles | |
def name(self): | |
"""Gets the name of this Drug. | |
:return: The name of this Drug. | |
:rtype: str | |
""" | |
return self._name | |
def name(self, name): | |
"""Sets the name of this Drug. | |
:param name: The name of this Drug. | |
:type name: str | |
""" | |
self._name = name | |