Blasta/blasta/__main__.py
2024-11-20 18:42:52 +02:00

95 lines
3.1 KiB
Python

#!/usr/bin/env python3
# -*- coding: utf-8 -*-
"""
TODO
* Delete cookie if session does not match
* Delete entry/tag/jid combination row upon removal of a tag.
"""
import argparse
from blasta.config import Cache, Settings, Share
from blasta.http.instance import HttpInstance
from blasta.database.sqlite import DatabaseSQLite
import json
import logging
import os
from os.path import getsize, exists
import shutil
import sys
import time
from typing import Optional
import uvicorn
import webbrowser
try:
import tomllib
except:
import tomli as tomllib
def main():
directory_config = Settings.get_directory()
sql_filename = os.path.join(directory_config, 'blasta.sql')
directory_data = Share.get_directory()
dbs_filename = os.path.join(directory_data, 'main.sqlite')
if not exists(dbs_filename) or not getsize(dbs_filename):
DatabaseSQLite.create_tables(sql_filename, dbs_filename)
accounts = {}
sessions = {}
http_instance = HttpInstance(accounts, sessions)
return http_instance.app
if __name__ == 'blasta.__main__':
directory = os.path.dirname(__file__)
# Copy data files
directory_data = Share.get_directory()
if not os.path.exists(directory_data):
directory_assets = os.path.join(directory, 'assets')
directory_assets_new = shutil.copytree(directory_assets, directory_data)
print(f'Data directory {directory_assets_new} has been created and populated.')
# Copy settings files
directory_settings = Settings.get_directory()
if not os.path.exists(directory_settings):
directory_configs = os.path.join(directory, 'configs')
directory_settings_new = shutil.copytree(directory_configs, directory_settings)
print(f'Settings directory {directory_settings_new} has been created and populated.')
# Create cache directories
directory_cache = Cache.get_directory()
if not os.path.exists(directory_cache):
print(f'Creating a cache directory at {directory_cache}.')
os.mkdir(directory_cache)
for subdirectory in ('data', 'export', 'items'):
subdirectory_cache = os.path.join(directory_cache, subdirectory)
if not os.path.exists(subdirectory_cache):
print(f'Creating a cache subdirectory at {subdirectory_cache}.')
os.mkdir(subdirectory_cache)
parser = argparse.ArgumentParser(
prog='blasta',
description='Blasta - A collaborative annotation system.',
usage='%(prog)s [OPTION]...')
parser.add_argument('-v', '--version', help='print version',
action='version', version='0.1')
parser.add_argument('-p', '--port', help='port number', dest='port')
parser.add_argument('-o', '--open', help='open an html browser', action='store_const', const=True, dest='open')
args = parser.parse_args()
port = int(args.port or 8000)
app = main()
uvicorn.run(app, host='localhost', port=port)
if args.open:
# TODO Check first time
webbrowser.open('http://localhost:{}/help/about'.format(port))
webbrowser.open_new_tab('http://localhost:{}'.format(port))