Rivista/rivista/__main__.py
Schimon Jehudah, Adv. 5fd6a6c710 Automate installation process;
Add command line prompt to set configurations;
Update document README.
2024-11-20 17:21:26 +02:00

114 lines
4.7 KiB
Python

#!/usr/bin/python
# -*- coding: utf-8 -*-
#import importlib.resources
import os
from rivista.config import Cache, Data, Settings
from rivista.utilities import Toml
from rivista.http.instance import HttpInstance
import shutil
import uvicorn
def main():
http_instance = HttpInstance()
return http_instance.app
if __name__ == 'rivista.__main__':
directory = os.path.dirname(__file__)
# Copy data files
# FIXME File settins.toml is copied too.
directory_data = Data.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)
# TODO Add more cache directories (see JabberCard).
# TODO Remove json (indices is the new name)
for subdirectory in ('json', 'indices', 'pubsub'):
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)
# Configure settings file
file_settings = os.path.join(directory_settings, 'settings.toml')
if not os.path.exists(file_settings):
directory_configs = os.path.join(directory, 'configs')
file_settings_empty = os.path.join(directory_configs, 'settings.toml')
shutil.copyfile(file_settings_empty, file_settings)
data_settings = Toml.open_file_toml(file_settings)
# Configure account
data_settings_account = data_settings['account']
settings_account = {
'xmpp': 'Set a Jabber ID',
'pass': 'Input Password'
}
for key in settings_account:
data_settings_account_value = data_settings_account[key]
if not data_settings_account_value:
settings_account_message = settings_account[key]
while not data_settings_account_value:
data_settings_account_value = input(f'{settings_account_message}: ')
data_settings_account[key] = data_settings_account_value
# Configure default PubSub Service and Node Name
data_settings_default = data_settings['default']
settings_default_default = {
'pubsub': 'pubsub.woodpeckersnest.space',
'nodeid': 'PlanetJabber'
}
for key in settings_default_default:
data_settings_default_value = data_settings_default[key]
if not data_settings_default_value:
settings_default_default_value = settings_default_default[key]
data_settings_default_value = input(f'Set brand {key} (default: "{settings_default_default_value}"): ')
if not data_settings_default_value: data_settings_default_value = settings_default_default_value
data_settings_default[key] = data_settings_default_value
# Configure Settings
data_settings_settings = data_settings['settings']
data_settings_settings_service = data_settings_settings['service']
if data_settings_settings_service is '':
while data_settings_settings_service not in ('n', 'N', 'no', 'No', 'y', 'Y', 'yes', 'Yes'):
data_settings_settings_service = input(f'Run as service? [Y/n] ')
if data_settings_settings_service in ('y', 'Y', 'yes', 'Yes'):
data_settings_settings['service'] = 1
else:
data_settings_settings['service'] = 0
data_settings_settings_include = data_settings_settings['include']
if data_settings_settings_include is '':
data_settings_settings_include = input(f'Limit service to included domains? (comma separated. remain empty for no limit) ')
data_settings_settings['include'] = data_settings_settings_include if data_settings_settings_include else 0
data_settings_settings_operator = data_settings_settings['operator']
if data_settings_settings_operator is '':
data_settings_settings['operator'] = input(f'Set a Jabber ID of an operator to contact with: ')
Toml.save_to_toml(file_settings, data_settings)
# Start JabberCard
app = main()
uvicorn.run(app, host='localhost', port=8000, reload=False)