from dataclasses import dataclass
CONFIG_FILE: str = 'db.yaml'
class Table:
def __init__(
self,
name,
columns
):
self.name = name
self.columns = columns
@classmethod
def from_dict(cls, dict):
columns: list[str] = []
try:
for column in dict['columns']:
columns.append(column)
cls = Table(
name=dict['name'],
columns=columns
)
return cls
except Exception as e:
print(f"Unable to construct Table object: {e}")
return None
def to_sql_create(self) -> str:
column_str = ""
if len(self.columns) >= 1:
column_str = self.columns[0]
for column in self.columns[1:]:
column_str += (', ' + column)
return f"CREATE TABLE {self.name} ({column_str});"
@dataclass
class User:
username: str
password: str
role: str
@classmethod
def from_dict(cls, dict):
try:
cls = User(
username=dict['username'],
password=dict['password'],
role=dict['role']
)
return cls
except Exception as e:
print(f"Unable to construct User object: {e}")
return None
@dataclass
class Database:
admin_user: str
admin_password: str
host: str
name: str
port: int
tables: list[Table]
users: list[User]
enums: list[str]
domains: list[str]
types: list[dict]
def __init__(
self,
admin_user,
admin_password,
host,
name,
port
):
self.admin_user = admin_user
self.admin_password = admin_password
self.host = host
self.name = name
self.port = port
self.tables: list[Table] = []
self.users: list[User] = []
self.enums: list[str] = []
self.domains: list[str] = []
self.types: list[dict] = []
@classmethod
def from_dict(cls, dict):
cls: Database = Database(
admin_user=dict['admin_user'],
admin_password=dict['admin_password'],
host=dict['host'],
name=dict['name'],
port=dict['port']
)
if 'tables' in dict:
for table in dict['tables']:
cls.tables.append(Table.from_dict(table))
if 'users' in dict:
for user in dict['users']:
cls.users.append(User.from_dict(user))
if 'enums' in dict:
cls.enums = dict['enums']
if 'domains' in dict:
cls.domains = dict['domains']
if 'types' in dict:
cls.types = dict['types']
return cls