Skip to content

Commit 90a90f5

Browse files
committed
adding more metadata information
1 parent 71e4eff commit 90a90f5

File tree

3 files changed

+34
-10
lines changed

3 files changed

+34
-10
lines changed

datamodel/base.py

Lines changed: 32 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -562,21 +562,24 @@ def schema(cls, as_dict=False, locale: Any = None):
562562
else:
563563
ref_info = {}
564564

565-
minimum = field.metadata.get('min', None)
566-
maximum = field.metadata.get('max', None)
567-
secret = field.metadata.get('secret', None)
565+
_metadata = field.metadata.copy()
566+
567+
minimum = _metadata.pop('min', None)
568+
maximum = _metadata.pop('max', None)
569+
secret = _metadata.pop('secret', None)
570+
568571
# custom endpoint for every field:
569-
custom_endpoint = field.metadata.get('endpoint', None)
572+
custom_endpoint = _metadata.pop('endpoint', None)
570573

571574
if field.metadata.get('required', False) or field.metadata.get('primary', False):
572575
required.append(name)
573576

574577
# UI objects:
575578
ui_objects = {
576-
k.replace('_', ':'): v for k, v in field.metadata.items() if k.startswith('ui_')
579+
k.replace('_', ':'): v for k, v in _metadata.items() if k.startswith('ui_')
577580
}
578581
# schema_extra:
579-
schema_extra = field.metadata.get('schema_extra', {})
582+
schema_extra = _metadata.pop('schema_extra', {})
580583
meta_description = cls._get_metadata(
581584
cls,
582585
field,
@@ -602,14 +605,35 @@ def schema(cls, as_dict=False, locale: Any = None):
602605
fields[name]["endpoint"] = custom_endpoint
603606

604607
if 'write_only' in field.metadata:
605-
fields[name]["writeOnly"] = field.metadata.get('write_only', False)
608+
fields[name]["writeOnly"] = _metadata.pop('write_only', False)
606609

607610
if 'pattern' in field.metadata:
608-
fields[name]["attrs"]["pattern"] = field.metadata['pattern']
611+
fields[name]["attrs"]["pattern"] = _metadata.pop('pattern')
609612

610613
if field.repr is False:
611614
fields[name]["attrs"]["visible"] = False
612615

616+
_meta = {}
617+
_rejected = [
618+
'required',
619+
'nullable',
620+
'primary',
621+
'readonly',
622+
'label',
623+
'validator',
624+
'encoder',
625+
'decoder'
626+
]
627+
for key, val in _metadata.items():
628+
if key not in _rejected:
629+
_meta[key] = val
630+
631+
if _meta:
632+
fields[name]["attrs"] = {
633+
**fields[name]["attrs"],
634+
**_meta
635+
}
636+
613637
if field.default:
614638
d = field.default
615639
if is_callable(d):

datamodel/version.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,7 @@
44
__title__ = 'python-datamodel'
55
__description__ = ('simple library based on python +3.8 to use Dataclass-syntax'
66
'for interacting with Data')
7-
__version__ = '0.7.1'
7+
__version__ = '0.7.2'
88
__author__ = 'Jesus Lara'
99
__author_email__ = '[email protected]'
1010
__license__ = 'BSD'

examples/json_schema.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -22,7 +22,7 @@ class Airport(BaseModel):
2222
required=True, label="airport"
2323
)
2424
city: str = Column(
25-
required=False, label="city"
25+
required=False, label="city", multiple=True
2626
)
2727
country: str = Column(
2828
required=False, label="country"

0 commit comments

Comments
 (0)