first commit
This commit is contained in:
commit
52145ecabf
10 changed files with 538 additions and 0 deletions
59
initSchemas.py
Normal file
59
initSchemas.py
Normal 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
|
||||
Loading…
Add table
Add a link
Reference in a new issue