3
3
from enum import Enum , EnumMeta
4
4
# Dataclass
5
5
import inspect
6
- from dataclasses import asdict as as_dict , dataclass , make_dataclass
6
+ from dataclasses import asdict as as_dict , dataclass , make_dataclass , _MISSING_TYPE
7
7
from operator import attrgetter
8
8
from orjson import OPT_INDENT_2
9
9
from datamodel .fields import fields
@@ -427,9 +427,8 @@ def _apply_extra_metadata(cls, field_schema: dict, _metadata: dict):
427
427
'label' , 'validator' , 'encoder' , 'decoder' ,
428
428
'default_factory' , 'type'
429
429
]
430
- _meta = {k : v for k , v in _metadata .items () if k not in _rejected }
431
430
432
- if _meta :
431
+ if _meta := { k : v for k , v in _metadata . items () if k not in _rejected } :
433
432
field_schema ["attrs" ] = {
434
433
** field_schema ["attrs" ],
435
434
** _meta
@@ -447,11 +446,9 @@ def _apply_defaults_and_constraints(
447
446
):
448
447
"""Handle default values, secret fields, and min/max constraints."""
449
448
if field .default :
450
- d = field .default
451
- if is_callable (d ):
452
- field_schema ['default' ] = f"fn:{ d !r} "
453
- else :
454
- field_schema ['default' ] = f"{ d !s} "
449
+ if not isinstance (field .default , _MISSING_TYPE ) and not callable (field .default ):
450
+ d = field .default
451
+ field_schema ['default' ] = f"fn:{ d !r} " if is_callable (d ) else f"{ d !s} "
455
452
456
453
if secret is not None :
457
454
field_schema ['secret' ] = secret
@@ -565,8 +562,8 @@ def schema(cls, as_dict=False, locale: Any = None):
565
562
Args:
566
563
as_dict (bool, optional): If True,
567
564
returns the schema as a Python dictionary.
568
- If False,
569
- returns the schema as a JSON-encoded string. Defaults to False.
565
+ If False, returns the schema as a JSON-encoded string.
566
+ Defaults to False.
570
567
locale (Any, optional):
571
568
The locale to use for internationalization of schema
572
569
elements like descriptions and labels. Defaults to None.
@@ -616,9 +613,7 @@ def schema(cls, as_dict=False, locale: Any = None):
616
613
# Cache the computed schema for subsequent calls
617
614
cls .__computed_schema__ = base_schema
618
615
619
- if as_dict :
620
- return base_schema
621
- return json_encoder (base_schema )
616
+ return base_schema if as_dict else json_encoder (base_schema )
622
617
623
618
def as_schema (self , top_level : bool = True ) -> dict :
624
619
"""as_schema.
@@ -693,7 +688,7 @@ def model(cls, dialect: str = "json", **kwargs) -> Any:
693
688
result = None
694
689
clsname = cls .__name__
695
690
schema = cls .Meta .schema
696
- table = cls .Meta .name if cls . Meta . name else clsname .lower ()
691
+ table = cls .Meta .name or clsname .lower ()
697
692
columns = cls .columns (cls ).items ()
698
693
if dialect == 'json' :
699
694
cols = {}
0 commit comments