Source code for ferrosoft.ops.models

import datetime

from attrs import define, field, Factory

from ferrosoft.ops import sql


[docs] @define class Tenant: id: str name: str db_name: str db_hostname: str db_port: str db_username: str db_password: str
[docs] @define class JournalEntry: filename: str pg_dump_args: str db_name: str | None tenant: Tenant | None filename_decompressed: str | None = None
[docs] @define class Journal: backup_date: datetime.datetime entries: list[JournalEntry] = field(default=Factory(list))
[docs] def master_entry(self) -> JournalEntry | None: for entry in self.entries: if entry.tenant is None: return entry return None
[docs] def tenant_entry(self, tenant_id: str) -> JournalEntry | None: for entry in self.entries: if entry.tenant is not None and entry.tenant.id == tenant_id: return entry return None
# noinspection SqlResolve
[docs] def get_tenants(psql_executable: str): for row in sql.sql_select( "SELECT id, name, database_name, database_hostname, database_port, " "database_username,database_password FROM ferrobase_tenant", psql_executable, ): yield Tenant( id=row[0], name=row[1], db_name=row[2], db_hostname=row[3], db_port=row[4], db_username=row[5], db_password=row[6], )
[docs] def get_roles(psql_executable: str) -> list[str]: return [row[0] for row in sql.sql_select("\\dg", psql_executable)]
[docs] def get_session_user(psql_executable: str) -> str: return list(sql.sql_select("SELECT session_user", psql_executable))[0][0]
# noinspection SqlResolve
[docs] def get_databases(psql_executable) -> list[str]: return [ row[0] for row in sql.sql_select("SELECT datname FROM pg_database", psql_executable) ]