first commit

This commit is contained in:
rnsrk 2024-02-07 15:33:41 +01:00
commit 52145ecabf
10 changed files with 538 additions and 0 deletions

59
initSchemas.py Normal file
View file

@ -0,0 +1,59 @@
import json
import os
from sqlalchemy import Column, Integer, String, Table
from sqlalchemy.ext.declarative import declarative_base
Base = declarative_base()
def createClass(name, columns):
"""Create a SQLAlchemy class from a JSON schema.
Args:
name (str): The name of the class.
columns (list): The columns of the class.
Returns:
SQLAlchemy.Class: The SQLAlchemy class.
"""
# Transform name and add prefix
className = name.lower().replace('-', '_').replace('.', '_').replace(' ', '_').replace('(', '_').replace(')', '_').replace('ä', 'ae').replace('ö', 'oe').replace('ü', 'ue').replace('ß', 'ss').replace('?', '_')
tableName = name.lower().replace('-', '_').replace('.', '_').replace(' ', '_').replace('(', '_').replace(')', '_').replace('ä', 'ae').replace('ö', 'oe').replace('ü', 'ue').replace('ß', 'ss').replace('?', '_')
# Transform columns and add prefix
attrs = {'__tablename__': tableName}
attrs.update({prop.lower().replace('-', '_').replace('.', '_').replace(' ', '_').replace('(', '_').replace(')','_').replace('ä', 'ae').replace('ö', 'oe').replace('ü', 'ue').replace('ß', 'ss').replace('?', '_'): (Column(String, primary_key=True) if prop.lower() == 'uuid' else Column(String)) for prop in columns})
# If 'uuid' is not in columns, add 'id' as primary key
if 'uuid' not in [prop.lower() for prop in columns]:
attrs['id'] = Column(Integer, primary_key=True)
# Create SQLAlchemy class
cls = type(className, (Base,), attrs)
# Define the table with extend_existing=True
Table(tableName, Base.metadata, extend_existing=True)
return cls
def initClassesFromSchemas(schemaDir):
"""Initialize the classes from the schemas.
"""
if not os.path.exists(schemaDir):
print('Schema directory does not exist.')
return False
schemaList = os.listdir(schemaDir)
if not schemaList:
print('No schemas JSON\'s found.')
return False
for fileName in schemaList:
if fileName.endswith('.json'):
with open(os.path.join(schemaDir, fileName), 'r') as f:
data = json.load(f)
cls = createClass(data['name'], data['columns'])
globals()[cls.__name__] = cls # Add the class to the global namespace
print('Classes initialized from schemas.')
return True