Files
croccybot/bot/data/adapted.py
Conatum 56f66ec7d4 rewrite (data): Increase Column flexibility.
New Column field types.
Allow Column to be an attribute of a non-rowmodel.
Add `references` field to Column.
Add logging for registry attach.
Add support for alternative join types.
2022-11-18 08:41:11 +02:00

33 lines
1.2 KiB
Python

# from enum import Enum
from typing import Optional
from psycopg.types.enum import register_enum, EnumInfo
from .registry import Attachable, Registry
class RegisterEnum(Attachable):
def __init__(self, enum, name: Optional[str] = None, mapper=None):
super().__init__()
self.enum = enum
self.name = name or enum.__name__
self.mapping = mapper(enum) if mapper is not None else self._mapper()
def _mapper(self):
return {m: m.value[0] for m in self.enum}
def attach_to(self, registry: Registry):
self._registry = registry
registry.init_task(self.on_init)
return self
async def on_init(self, registry: Registry):
connector = registry._conn
if connector is None:
raise ValueError("Cannot initialise without connector!")
connection = await connector.get_connection()
if connection is None:
raise ValueError("Cannot Init without connection.")
info = await EnumInfo.fetch(connection, self.name)
if info is None:
raise ValueError(f"Enum {self.name} not found in database.")
register_enum(info, connection, self.enum, mapping=list(self.mapping.items()))