def from_dict(klass, dikt) -> Any: if is_dataclass(klass): fields = datafields(klass) args = {f.name: from_dict(f.type, dikt[f.name]) for f in fields} return klass(**args) else: return dikt
def __str__(self): """ Returns the dataclass fields as a URL query string. """ result = '?' for field in datafields(self): name = field.name if value := getattr(self, name): value = str(value) if field.type is bool: value = value.lower() name = self.fix(name) if self.validate(name, value): result += f'{name}={value}&' else: e_msg = f'Error: "{value}" is not a valid value for {name}' raise ValueError(e_msg)
def dataclass_from_dict(klass, dikt): """Load any dataclass from a dict""" fieldtypes = {f.name: f.type for f in datafields(klass)} return klass( **{f: dataclass_from_dict(fieldtypes[f], dikt[f]) for f in dikt})
def dataclass_from_dict(klass, dikt): try: fieldtypes = {f.name:f.type for f in datafields(klass)} return klass(**{f:dataclass_from_dict(fieldtypes[f], dikt[f]) for f in dikt}) except: return dikt