You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
{{ message }}
This repository has been archived by the owner on Aug 19, 2023. It is now read-only.
Hi, I wanted to create a new type of field, similar setup to UUID, but for version numbers. This was my attempt:
import uuid
from dataclasses import dataclass,field
from dataclasses_jsonschema import JsonSchemaMixin,SchemaType,FieldEncoder
from pkg_resources.extern.packaging.version import Version
from pkg_resources import parse_version
from uuid import UUID
class VersionField(FieldEncoder[Version, str]):
def to_wire(self, value:Version) -> str:
return value.public
def to_python(self, value: str) -> Version:
return value if isinstance(value, Version) else parse_version(value)
@property
def json_schema(self):
return {"type": "string"}
JsonSchemaMixin.register_field_encoders({Version: VersionField()})
@dataclass
class Schema(JsonSchemaMixin):
Version: Version = field(init=False,default=parse_version('0.0.0'))
Guid: UUID = field(init=False,default_factory=uuid.uuid4)
JsonSchemaMixin.all_json_schemas(schema_type=SchemaType.SWAGGER_V3)
However when creating the schemas, I get this response:
Traceback (most recent call last):
File "C:\Users\Elvin Lemmens\virutalenvs\notebooks\lib\site-packages\dataclasses_jsonschema\__init__.py", line 277, in _encode_field
encoder = cls.__encode_cache[field_type] # type: ignore
KeyError: <unprintable KeyError object>
During handling of the above exception, another exception occurred:
Traceback (most recent call last):
File "C:\Users\Elvin Lemmens\virutalenvs\notebooks\lib\site-packages\dataclasses_jsonschema\__init__.py", line 826, in _get_field_type_name
return field_type.__name__
AttributeError: 'Field' object has no attribute '__name__'
During handling of the above exception, another exception occurred:
Traceback (most recent call last):
File "C:\Users\Elvin Lemmens\virutalenvs\notebooks\lib\site-packages\IPython\core\interactiveshell.py", line 3296, in run_code
exec(code_obj, self.user_global_ns, self.user_ns)
File "<ipython-input-11-1236ba329d3a>", line 27, in <module>
JsonSchemaMixin.all_json_schemas(schema_type=SchemaType.SWAGGER_V3)
File "C:\Users\Elvin Lemmens\virutalenvs\notebooks\lib\site-packages\dataclasses_jsonschema\__init__.py", line 714, in all_json_schemas
subclass.json_schema(embeddable=True, schema_type=schema_type, validate_enums=validate_enums)
File "C:\Users\Elvin Lemmens\virutalenvs\notebooks\lib\site-packages\dataclasses_jsonschema\__init__.py", line 761, in json_schema
properties[f.mapped_name], is_required = cls._get_field_schema(f.field, schema_options)
File "C:\Users\Elvin Lemmens\virutalenvs\notebooks\lib\site-packages\dataclasses_jsonschema\__init__.py", line 600, in _get_field_schema
field_meta, required = cls._get_field_meta(field, schema_options.schema_type)
File "C:\Users\Elvin Lemmens\virutalenvs\notebooks\lib\site-packages\dataclasses_jsonschema\__init__.py", line 573, in _get_field_meta
field_meta.default = cls._encode_field(field.type, default_value, omit_none=False)
File "C:\Users\Elvin Lemmens\virutalenvs\notebooks\lib\site-packages\dataclasses_jsonschema\__init__.py", line 281, in _encode_field
field_type_name = cls._get_field_type_name(field_type)
File "C:\Users\Elvin Lemmens\virutalenvs\notebooks\lib\site-packages\dataclasses_jsonschema\__init__.py", line 829, in _get_field_type_name
match = re.match(r'typing\.([A-Za-z]+)', str(field_type))
File "C:\Users\Elvin Lemmens\AppData\Local\Programs\Python\Python37\lib\dataclasses.py", line 245, in __repr__
return ('Field('
File "C:\Users\Elvin Lemmens\AppData\Local\Programs\Python\Python37\lib\dataclasses.py", line 245, in __repr__
return ('Field('
File "C:\Users\Elvin Lemmens\AppData\Local\Programs\Python\Python37\lib\dataclasses.py", line 245, in __repr__
return ('Field('
[Previous line repeated 1485 more times]
RecursionError: maximum recursion depth exceeded while getting the repr of an object
Any idea? I'm able to bypass it by creating a custom method custom_field instead of field that creates a new CustomField instead of Field from the dataclasses module, which is just a subclass with a fixed repr instead of it being varially built.
I'm wondering if this is a bug in the dataclasses library (maybe updating the python version will help, will check), a bug in the dataclasses-json library (incorrect usage of the repr on dataclasses Field's, or just a bug in myself (likely)
Regards,
Elvin
The text was updated successfully, but these errors were encountered:
Sign up for freeto subscribe to this conversation on GitHub.
Already have an account?
Sign in.
Hi, I wanted to create a new type of field, similar setup to UUID, but for version numbers. This was my attempt:
However when creating the schemas, I get this response:
Any idea? I'm able to bypass it by creating a custom method
custom_field
instead offield
that creates a newCustomField
instead ofField
from the dataclasses module, which is just a subclass with a fixed repr instead of it being varially built.I'm wondering if this is a bug in the dataclasses library (maybe updating the python version will help, will check), a bug in the dataclasses-json library (incorrect usage of the repr on dataclasses Field's, or just a bug in myself (likely)
Regards,
Elvin
The text was updated successfully, but these errors were encountered: