rDrama/files/classes/badges.py

94 lines
1.7 KiB
Python
Raw Normal View History

2021-07-21 01:12:26 +00:00
from sqlalchemy import *
from sqlalchemy.orm import relationship
2021-08-04 15:35:10 +00:00
from files.__main__ import Base, app
2021-08-30 21:19:10 +00:00
from os import environ
2021-07-21 01:12:26 +00:00
2021-08-30 21:19:10 +00:00
site_name = environ.get("SITE_NAME").strip()
2021-07-21 01:12:26 +00:00
class BadgeDef(Base):
__tablename__ = "badge_defs"
id = Column(BigInteger, primary_key=True)
name = Column(String(64))
description = Column(String(64))
icon = Column(String(64))
kind = Column(Integer, default=1)
2021-07-25 23:49:53 +00:00
qualification_expr = Column(String(128))
2021-07-21 01:12:26 +00:00
def __repr__(self):
return f"<BadgeDef(badge_id={self.id})>"
@property
2021-09-19 18:25:40 +00:00
@lazy
2021-07-21 01:12:26 +00:00
def path(self):
2021-08-30 21:19:10 +00:00
return f"/assets/images/{site_name}/badges/{self.icon}"
2021-07-21 01:12:26 +00:00
@property
2021-09-19 18:25:40 +00:00
@lazy
2021-07-21 01:12:26 +00:00
def json_core(self):
2021-08-30 21:19:10 +00:00
return {
2021-07-21 01:12:26 +00:00
"name": self.name,
"description": self.description,
"icon": self.icon
}
class Badge(Base):
__tablename__ = "badges"
id = Column(Integer, primary_key=True)
user_id = Column(Integer, ForeignKey('users.id'))
badge_id = Column(Integer, ForeignKey("badge_defs.id"))
description = Column(String(64))
url = Column(String(256))
2021-09-17 12:36:39 +00:00
badge = relationship("BadgeDef", lazy="joined", innerjoin=True, viewonly=True)
2021-07-21 01:12:26 +00:00
def __repr__(self):
return f"<Badge(user_id={self.user_id}, badge_id={self.badge_id})>"
@property
2021-09-19 18:25:40 +00:00
@lazy
2021-07-21 01:12:26 +00:00
def text(self):
if self.description:
return self.description
else:
return self.badge.description
@property
2021-09-19 18:25:40 +00:00
@lazy
2021-07-21 01:12:26 +00:00
def type(self):
return self.badge.id
@property
2021-09-19 18:25:40 +00:00
@lazy
2021-07-21 01:12:26 +00:00
def name(self):
return self.badge.name
@property
2021-09-19 18:25:40 +00:00
@lazy
2021-07-21 01:12:26 +00:00
def path(self):
return self.badge.path
@property
2021-09-19 18:25:40 +00:00
@lazy
2021-07-21 01:12:26 +00:00
def json_core(self):
return {'text': self.text,
'name': self.name,
'created_utc': self.created_utc,
'url': self.url,
'icon_url':f"https://{app.config['SERVER_NAME']}{self.path}"
}
property
def json(self):
return self.json_core