FastAPI-App: Enum dynamisch erstellen und in SQLAlchemy-Modellen ohne zirkuläre Abhängigkeiten verwenden?
Posted: 03 Jan 2025, 15:50
Meine App ist wie unten gezeigt aufgebaut.
instanziiert ein Konfigurationsdikt, das das Schlüsselpräfix enthält, aus einer Yaml-Datei, die in enums.py benötigt wird, um Schemanamen zur Laufzeit zu generieren.
utils/enums.py:
Ich möchte SchemaNames in meinen SQLAlchemy-Modellen in my_model.py verwenden, um das Schema für jedes Modell anzugeben: __table_args__ = {"schema": SchemaNames.RAW .value.
Problem:
Importieren von SchemaNames in my_model.py< /code> führt zu einem Rundschreiben Abhängigkeiten, da die Konfiguration in main.py definiert ist.
Ich möchte die Verwendung globaler Variablen vermeiden, indem ich SchemaNames global exportiere.
Wie kann ich dynamisch die SchemaNames-Enumeration basierend auf der Laufzeitkonfiguration erstellen und in SQLAlchemy-Modellen verwenden, ohne zirkuläre Abhängigkeiten zu verursachen oder sich auf globale Exporte zu verlassen? Welchen Best-Practice-Ansatz gibt es dafür?
Code: Select all
app/
├── backend/
│ └── main.py
├── models/
│ └── my_model.py
└── utils/
└── enums.py
Code: Select all
main.py
utils/enums.py:
Code: Select all
def create_schema_names(prefix: str) -> Type[Enum]:
class SchemaNames(str, Enum):
RAW = prefix + "_RAW"
STAGING = prefix + "_STAGING"
TRANSFORMED = prefix + "_TRANSFORMED"
return SchemaNames
Problem:
Importieren von SchemaNames in my_model.py< /code> führt zu einem Rundschreiben Abhängigkeiten, da die Konfiguration in main.py definiert ist.
Ich möchte die Verwendung globaler Variablen vermeiden, indem ich SchemaNames global exportiere.
Wie kann ich dynamisch die SchemaNames-Enumeration basierend auf der Laufzeitkonfiguration erstellen und in SQLAlchemy-Modellen verwenden, ohne zirkuläre Abhängigkeiten zu verursachen oder sich auf globale Exporte zu verlassen? Welchen Best-Practice-Ansatz gibt es dafür?