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

from serenitas.utils.db2 import dbconn


class Report:
    _sql_insert: ClassVar[str]
    _conn: ClassVar = dbconn("dawndb")

    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()