whos_your_daddy_common 0.2.0

Common source code for the Who's Your Daddy projects, like the Enumerator and Presenter.
Documentation

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:
        """
        This method constructs an SQL statement that would create a TABLE object
        using this class data.
        
        Returns
        -------
        str
            The constructed SQL statement.
        """
        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