86 lines
1.8 KiB
Python
86 lines
1.8 KiB
Python
# (C) 2020-2021 Sakuragasaki46.
|
|
# See LICENSE for copying info.
|
|
|
|
'''
|
|
Circles (people) extension for Salvi.
|
|
'''
|
|
|
|
from peewee import *
|
|
from ..app import _getconf
|
|
|
|
#### HELPERS ####
|
|
|
|
def _getmbt(s):
|
|
s = s.upper()
|
|
try:
|
|
return 16 + (
|
|
dict(I=0, E=8)[s[0]] |
|
|
dict(N=0, S=4)[s[1]] |
|
|
dict(T=0, F=2)[s[2]] |
|
|
dict(J=0, P=1)[s[3]]
|
|
)
|
|
except Exception:
|
|
return 2
|
|
|
|
|
|
def _putmbt(s):
|
|
if s & 16 == 0:
|
|
return "1x38b"
|
|
return ''.join((
|
|
'IE'[(s & 8) >> 3],
|
|
'NS'[(s & 4) >> 2],
|
|
'TF'[(s & 2) >> 1],
|
|
'JP'[s & 1]
|
|
))
|
|
|
|
|
|
#### DATABASE SCHEMA ####
|
|
|
|
database = SqliteDatabase(_getconf("config", "database_dir") + '/circles.sqlite')
|
|
|
|
class BaseModel(Model):
|
|
class Meta:
|
|
database = database
|
|
|
|
class MbTypeField(Field):
|
|
field_type = 'integer'
|
|
|
|
def db_value(self, value):
|
|
return _getmbt(value)
|
|
def python_value(self, value):
|
|
return _putmbt(value)
|
|
|
|
ST_ORANGE = 0
|
|
ST_YELLOW = 1
|
|
ST_GREEN = 2
|
|
ST_RED = -1
|
|
|
|
class Person(BaseModel):
|
|
code = IntegerField(primary_key=True)
|
|
display_name = CharField(256)
|
|
first_name = CharField(128, null=True)
|
|
last_name = CharField(128, null=True)
|
|
circle = IntegerField(default=7, index=True)
|
|
status = IntegerField(default=ST_ORANGE, index=True)
|
|
type = MbTypeField(default=0, index=True)
|
|
class Meta:
|
|
indexes = (
|
|
(('last_name', 'first_name'), False),
|
|
)
|
|
|
|
def init_db():
|
|
database.create_tables([Person])
|
|
|
|
#### ROUTING ####
|
|
|
|
bp = Blueprint('circles', __name__,
|
|
url_prefix='/circles')
|
|
|
|
@bp.route('/init-config')
|
|
def _init_config():
|
|
init_db()
|
|
return redirect('/circles')
|
|
|
|
@bp.route('/')
|
|
def homepage():
|
|
return render_template("base.html")
|