mirror of
https://gitlab.archlinux.org/archlinux/aurweb.git
synced 2025-02-03 10:43:03 +01:00
We don't want to depend on the database to load up data about the models we define. We now leverage the existing `aurweb.schema` module for table definitions and set __table_args__["autoload"] to False. Signed-off-by: Kevin Morris <kevr@0cost.org>
36 lines
738 B
Python
36 lines
738 B
Python
import json
|
|
|
|
from sqlalchemy.ext.declarative import declarative_base
|
|
|
|
from aurweb import util
|
|
|
|
|
|
def to_dict(model):
|
|
return {
|
|
c.name: getattr(model, c.name)
|
|
for c in model.__table__.columns
|
|
}
|
|
|
|
|
|
def to_json(model, indent: int = None):
|
|
return json.dumps({
|
|
k: util.jsonify(v)
|
|
for k, v in to_dict(model).items()
|
|
}, indent=indent)
|
|
|
|
|
|
Base = declarative_base()
|
|
|
|
# Setup __table_args__ applicable to every table.
|
|
Base.__table_args__ = {
|
|
"autoload": False,
|
|
"extend_existing": True
|
|
}
|
|
|
|
# Setup Base.as_dict and Base.json.
|
|
#
|
|
# With this, declarative models can use .as_dict() or .json()
|
|
# at any time to produce a dict and json out of table columns.
|
|
#
|
|
Base.as_dict = to_dict
|
|
Base.json = to_json
|