tabletop-frog/ttfrog/db/base.py

43 lines
1007 B
Python
Raw Normal View History

2024-02-02 15:40:45 -08:00
import nanoid
from nanoid_dictionary import human_alphabet
2024-01-31 22:39:54 -08:00
from pyramid_sqlalchemy import BaseObject
from wtforms import validators
2024-02-02 15:40:45 -08:00
from slugify import slugify
from sqlalchemy import Column
from sqlalchemy import String
2024-02-04 11:40:30 -08:00
2024-02-02 15:40:45 -08:00
def genslug():
return nanoid.generate(human_alphabet[2:], 5)
class SlugMixin:
slug = Column(String, index=True, unique=True, default=genslug)
@property
def uri(self):
return '-'.join([
self.slug,
slugify(self.name.title().replace(' ', ''), ok='', only_ascii=True, lower=False)
])
2024-01-31 22:39:54 -08:00
class IterableMixin:
"""
Allows for iterating over Model objects' column names and values
"""
def __iter__(self):
values = vars(self)
for attr in self.__mapper__.columns.keys():
if attr in values:
yield attr, values[attr]
def __repr__(self):
return f"{self.__class__.__name__}: {str(dict(self))}"
# class Table(*Bases):
2024-02-04 11:40:30 -08:00
Bases = [BaseObject, IterableMixin, SlugMixin]