75 lines
1.8 KiB
Python
75 lines
1.8 KiB
Python
from peewee import *
|
|
from playhouse.migrate import *
|
|
from playhouse.sqlite_ext import SqliteExtDatabase
|
|
|
|
db = SqliteExtDatabase(None)
|
|
migrator = SqliteMigrator(db)
|
|
|
|
db_schema = "2"
|
|
|
|
class BaseModel(Model):
|
|
class Meta:
|
|
database = db
|
|
|
|
class System(BaseModel):
|
|
key = CharField(unique=True)
|
|
value = CharField()
|
|
|
|
class Mailbox(BaseModel):
|
|
user = CharField()
|
|
imap_host = CharField()
|
|
imap_user = CharField()
|
|
imap_pass = CharField()
|
|
last_check = DateTimeField(null=True)
|
|
read_only = BooleanField(default=True)
|
|
|
|
class Events(BaseModel):
|
|
user = CharField()
|
|
mailbox = CharField()
|
|
event_id = CharField()
|
|
|
|
class Notifier(BaseModel):
|
|
service = CharField()
|
|
client_id = CharField(null=True)
|
|
secret = CharField(null=True)
|
|
url = CharField(null=True)
|
|
|
|
class Services(BaseModel):
|
|
user = CharField()
|
|
service = CharField()
|
|
target = CharField()
|
|
enabled = BooleanField(default=True)
|
|
|
|
def create_tables():
|
|
tables = [System, Mailbox, Events, Notifier, Services]
|
|
with db:
|
|
if not db.table_exists(System._meta.table_name):
|
|
db.create_tables(tables)
|
|
System.replace(key="schema", value=db_schema).execute()
|
|
|
|
else:
|
|
schema_ver = System.get_or_none(key="schema")
|
|
migrate_tables(schema_ver)
|
|
|
|
def migrate_tables(schema_ver):
|
|
if schema_ver is None or schema_ver.value == "1":
|
|
schema_ver = migrate_v2()
|
|
|
|
# if schema_ver == "2":
|
|
# schema_ver = migrate_v3()
|
|
|
|
System.replace(key="schema", value=db_schema).execute()
|
|
|
|
def migrate_v2():
|
|
# migration to schema version 2
|
|
read_only = BooleanField(default=True)
|
|
migrate(
|
|
migrator.add_column(
|
|
Mailbox._meta.table_name, 'read_only', read_only),
|
|
)
|
|
return "2"
|
|
|
|
# def migrate_v3():
|
|
# # migration to schema version 3
|
|
# return "3"
|