Blasta/blasta/__main__.py

125 lines
4.4 KiB
Python
Raw Normal View History

#!/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
2025-03-10 10:35:21 +02:00
from blasta.utilities.logger import UtilitiesLogger
import json
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')
2025-03-10 10:35:21 +02:00
# Setup the command line arguments.
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')
2025-03-10 10:35:21 +02:00
parser.add_argument('--no-log', '--nolog', help='Do not create a log file',
action='store_const', dest='nolog',
const=True, default=False)
# Output verbosity options.
parser.add_argument('-d', '--debug', help='set logging to DEBUG',
action='store_const', dest='loglevel',
const='debug', default='info')
parser.add_argument('-q', '--quiet', help='set logging to ERROR',
action='store_const', dest='loglevel',
const='error', default='info')
parser.add_argument('-w', '--warning', help='set logging to WARNING',
action='store_const', dest='loglevel',
const='warn', default='info')
args = parser.parse_args()
2025-03-10 10:35:21 +02:00
filename_log = os.path.join(directory_cache, 'blasta_log.csv')
filename_log_old = os.path.join(directory_cache, 'blasta_log.csv.old')
if os.path.exists(filename_log): os.rename(filename_log, filename_log_old)
loglevel = args.loglevel
logger = UtilitiesLogger('blasta')
if not args.nolog:
logger.set_filename(filename_log)
with open(filename_log, 'a') as file:
file.write('Time,,Level,Module,Function,JID/Path,Message\n')
logger.set_level(loglevel)
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))