Mobilizon-Reshare-condividi.../mobilizon_bots/storage/db.py

52 lines
1.6 KiB
Python
Raw Normal View History

2021-05-31 01:19:24 +02:00
import asyncio
import atexit
import logging
2021-05-02 16:51:54 +02:00
from pathlib import Path
2021-05-05 14:29:13 +02:00
2021-05-02 16:51:54 +02:00
from tortoise import Tortoise
from mobilizon_bots.config.publishers import publisher_names
from mobilizon_bots.storage.query import create_publisher
logger = logging.getLogger(__name__)
2021-05-02 16:51:54 +02:00
2021-05-13 13:32:44 +02:00
class MobilizonBotsDB:
2021-05-31 01:11:50 +02:00
def __init__(self, path: Path):
2021-05-02 16:51:54 +02:00
self.path = path
2021-05-31 01:11:50 +02:00
# TODO: Check if DB is openable/"queriable"
self.is_init = self.path.exists() and (not self.path.is_dir())
if not self.is_init:
self.path.parent.mkdir(parents=True, exist_ok=True)
2021-05-02 16:51:54 +02:00
async def setup(self):
await Tortoise.init(
db_url=f"sqlite:///{self.path}",
2021-05-31 01:11:50 +02:00
modules={
"models": [
"mobilizon_bots.models.event",
"mobilizon_bots.models.notification",
"mobilizon_bots.models.publication",
"mobilizon_bots.models.publisher",
]
},
# always store UTC time in database
use_tz=True,
2021-05-02 16:51:54 +02:00
)
2021-05-31 01:11:50 +02:00
if not self.is_init:
2021-05-02 16:51:54 +02:00
await Tortoise.generate_schemas()
for name in publisher_names:
logging.info(f"Creating {name} publisher")
# TODO: Deal with account_ref
await create_publisher(name)
2021-05-31 01:11:50 +02:00
self.is_init = True
logger.info(f"Succesfully initialized database at {self.path}")
2021-05-31 01:19:24 +02:00
@atexit.register
def gracefully_tear_down():
logger.info("Shutting down DB")
2021-07-05 21:58:29 +02:00
loop = asyncio.new_event_loop()
asyncio.set_event_loop(loop)
asyncio.run(Tortoise.close_connections())