bedrock.generators.code_generators.model.helpers
1from typing import Optional 2 3 4def resolve_model_attributes(model_attributes: list[str]) -> list[tuple[str, str]]: 5 if not model_attributes: 6 return [("name", "String(255), nullable=False")] 7 return [_duo(attr) for attr in model_attributes if attr != ""] 8 9 10COLUMN_CLASSES = { 11 "String": "sqlalchemy.String", 12 "Numeric": "sqlalchemy.Numeric", 13 "Boolean": "sqlalchemy.Boolean", 14 "UUID": "sqlalchemy.UUID", 15 "DateTime": "sqlalchemy.DateTime", 16 "Enum": "sqlalchemy.Enum", 17 "JSONB": "sqlalchemy.dialects.postgresql.JSONB", 18} 19 20 21def resolve_attribute_columns_to_classes(model_attributes: list[tuple[str, str]]) -> list[str]: 22 classes = [] 23 for _, column_class in model_attributes: 24 for class_ in COLUMN_CLASSES.keys(): 25 if class_ in column_class and class_ not in classes: 26 classes.append(class_) 27 return classes 28 29 30def resolve_attribute_columns_to_imports(model_attributes: list[tuple[str, str]]) -> list[str]: 31 classes = resolve_attribute_columns_to_classes(model_attributes) 32 return [COLUMN_CLASSES[c] for c in classes] 33 34 35def _duo(attr) -> tuple[str, str]: 36 split_attr = attr.split(":")[0:2] 37 if len(split_attr) <= 1: 38 raise Exception(f"attr '{attr}' does not include ':' separator") 39 column_type_options = [opt.strip() for opt in split_attr[1].split(",")] 40 return split_attr[0], ", ".join(column_type_options) 41 42 43def resolve_model_name_from_path_hint(path_hint: str) -> Optional[str]: 44 if not path_hint or "->" not in path_hint: 45 return None 46 return path_hint.split("->")[1].split(".")[0]
def
resolve_model_attributes(model_attributes: list[str]) -> list[tuple[str, str]]:
COLUMN_CLASSES =
{'String': 'sqlalchemy.String', 'Numeric': 'sqlalchemy.Numeric', 'Boolean': 'sqlalchemy.Boolean', 'UUID': 'sqlalchemy.UUID', 'DateTime': 'sqlalchemy.DateTime', 'Enum': 'sqlalchemy.Enum', 'JSONB': 'sqlalchemy.dialects.postgresql.JSONB'}
def
resolve_attribute_columns_to_classes(model_attributes: list[tuple[str, str]]) -> list[str]:
def
resolve_attribute_columns_to_imports(model_attributes: list[tuple[str, str]]) -> list[str]:
def
resolve_model_name_from_path_hint(path_hint: str) -> Optional[str]: