class Index(ffd.ValueObject): name: str = ffd.optional() table: str = ffd.optional() columns: List[str] = ffd.list_() unique: bool = ffd.optional(default=False) def __post_init__(self): if self.name is None: self.name = f'idx_{self.table}_{"_".join(self.columns)}' def __eq__(self, other): return self.name == other.name
class ConcreteEntity(Entity): id: str = ffd.id_() strings: str = ffd.list_() now: datetime = ffd.now() today: date = ffd.today() required_field: str = ffd.required() dictionary: dict = ffd.dict_() list_of_ints: List[int] = ffd.list_() widget: Widget = ffd.optional()
class Column(ffd.ValueObject): name: str = ffd.required() type: str = ffd.required() length: int = ffd.optional() is_id: bool = ffd.optional(default=False) is_indexed: bool = ffd.optional(default=False) is_required: bool = ffd.optional(default=False) default: any = ffd.optional() @property def string_type(self): return str(self.type.__name__) def index(self): return self.is_id or (self.is_indexed and self.type is str) def __eq__(self, other): return self.name == other.name
def __new__(mcs, name, bases, dct, **kwargs): # __pragma__('skip') my_dict = dct.copy() # __pragma__('noskip') # __pragma__('ecom') """? my_dict = dct ?""" # __pragma__('noecom') if 'fields_' in kwargs and 'annotations_' in kwargs: for k, v in kwargs['fields_'].items(): my_dict[k] = ffd.optional(default=v) if '__annotations__' in my_dict: my_dict['__annotations__'].update(kwargs['annotations_']) else: my_dict['__annotations__'] = kwargs['annotations_'] ret = type.__new__(mcs, name, bases, my_dict) return dataclass(ret, eq=False, repr=False)
class ThisCommand(ffd.Command): x: str = ffd.required() y: int = ffd.optional(default=0)