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]]:
5def resolve_model_attributes(model_attributes: list[str]) -> list[tuple[str, str]]:
6    if not model_attributes:
7        return [("name", "String(255), nullable=False")]
8    return [_duo(attr) for attr in model_attributes if attr != ""]
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]:
22def resolve_attribute_columns_to_classes(model_attributes: list[tuple[str, str]]) -> list[str]:
23    classes = []
24    for _, column_class in model_attributes:
25        for class_ in COLUMN_CLASSES.keys():
26            if class_ in column_class and class_ not in classes:
27                classes.append(class_)
28    return classes
def resolve_attribute_columns_to_imports(model_attributes: list[tuple[str, str]]) -> list[str]:
31def resolve_attribute_columns_to_imports(model_attributes: list[tuple[str, str]]) -> list[str]:
32    classes = resolve_attribute_columns_to_classes(model_attributes)
33    return [COLUMN_CLASSES[c] for c in classes]
def resolve_model_name_from_path_hint(path_hint: str) -> Optional[str]:
44def resolve_model_name_from_path_hint(path_hint: str) -> Optional[str]:
45    if not path_hint or "->" not in path_hint:
46        return None
47    return path_hint.split("->")[1].split(".")[0]