base.py 661 Б
Newer Older
semen603089's avatar
semen603089 включено в состав коммита
1
import re
Dyakov Roman's avatar
Dyakov Roman включено в состав коммита
2

semen603089's avatar
semen603089 включено в состав коммита
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
from sqlalchemy.ext.declarative import as_declarative, declared_attr


@as_declarative()
class Base:
    """Base class for all database entities"""

    @classmethod
    @declared_attr
    def __tablename__(cls) -> str:
        """Generate database table name automatically.
        Convert CamelCase class name to snake_case db table name.
        """
        return re.sub(r"(?<!^)(?=[A-Z])", "_", cls.__name__).lower()

    def __repr__(self) -> str:
        attrs = []
        for c in self.__table__.columns:
            attrs.append(f"{c.name}={getattr(self, c.name)}")
Dyakov Roman's avatar
Dyakov Roman включено в состав коммита
22
        return "{}({})".format(self.__class__.__name__, ', '.join(attrs))