aboutsummaryrefslogtreecommitdiffstats
path: root/python/report_ops/base.py
blob: 7517591b8bbce58cbd79d76185f09f33058d0790 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
from typing import ClassVar

from serenitas.utils.db2 import dbconn


class Report:
    _sql_insert: ClassVar[str]
    _conn: ClassVar = dbconn("dawndb")
    _registry: ClassVar[dict] = {}

    def __init_subclass__(cls, table_name: str, columns: tuple[str], **kwargs):
        super().__init_subclass__(**kwargs)
        place_holders = ",".join(["%s"] * len(columns))
        cls._sql_insert = f"INSERT INTO {table_name}({','.join(columns)}) VALUES({place_holders}) ON CONFLICT DO NOTHING RETURNING *"

    def __class_getitem__(cls, key):
        return cls._registry[key]

    def commit(self):
        with self._conn.cursor() as c:
            c.executemany(self._sql_insert, self)
        self._conn.commit()