Compare commits

...

9 Commits

12 changed files with 79 additions and 57 deletions

View File

@ -36,12 +36,19 @@ Chacun de ces services documente la structure de la table mais ne se charge pas
La création de la table, selon le schéma fournit dans la documentation, est à la charge de ladministrateur du système.
# Empty database:
su - postgres
psql -U postgres risotto
drop table log; drop table userrole; drop table release; drop table source; drop table server; drop table servermodel; drop table applicationservice; drop table roleuri; drop table risottouser; drop table uri;
````
psql -U postgres
drop database risotto;
drop user risotto;
\q
reconfigure
```
```
psql -U postgres tiramisu
drop table value; drop table property; drop table permissive; drop table information; drop table session;
```
# Import EOLE
./script/cucchiaiata source.create -n eole -u http://localhost

10
debian/control vendored
View File

@ -2,13 +2,19 @@ Source: risotto
Section: admin
Priority: extra
Maintainer: Cadoles <contact@cadoles.com>
Build-depends: debhelper (>=11), python3-all, python3-setuptools
Build-depends: debhelper (>=11), python3-all, python3-setuptools, dh-python
Standards-Version: 3.9.4
Homepage: https://forge.cadoles.com/Infra/risotto
Package: python3-risotto
Architecture: any
Pre-Depends: dpkg, python3, ${misc:Pre-Depends}
Depends: ${python:Depends}, ${misc:Depends}, python3-asyncpg
Description: configuration manager libraries
Package: risotto
Architecture: any
Pre-Depends: dpkg, python3, ${misc:Pre-Depends}
Depends: ${python:Depends}, ${misc:Depends}
Depends: ${python:Depends}, ${misc:Depends}, python3-asyncpg
Description: configuration manager

1
debian/risotto.install vendored Normal file
View File

@ -0,0 +1 @@
script/risotto-server usr/bin/

0
script/risotto-server Normal file → Executable file
View File

View File

@ -4,6 +4,5 @@ setup(
name='risotto',
version='0.1',
packages=['risotto' ],
scripts=['script/risotto-server'],
package_dir={"": "src"},
)

View File

@ -3,7 +3,7 @@ from os import environ
CONFIGURATION_DIR = environ.get('CONFIGURATION_DIR', '/srv/risotto/configurations')
PROVIDER_FACTORY_CONFIG_DIR = environ.get('PROVIDER_FACTORY_CONFIG_DIR', '/srv/factory')
TMP_DIR = 'tmp'
TMP_DIR = '/tmp'
DEFAULT_USER = environ.get('DEFAULT_USER', 'Anonymous')
RISOTTO_DB_NAME = environ.get('RISOTTO_DB_NAME', 'risotto')
RISOTTO_DB_PASSWORD = environ.get('RISOTTO_DB_PASSWORD', 'risotto')
@ -15,11 +15,10 @@ DB_ADDRESS = environ.get('DB_ADDRESS', 'localhost')
MESSAGE_PATH = environ.get('MESSAGE_PATH', '/root/risotto-message/messages')
SQL_DIR = environ.get('SQL_DIR', './sql')
CACHE_ROOT_PATH = environ.get('CACHE_ROOT_PATH', '/var/cache/risotto')
SRV_SEED_PATH = environ.get('SRV_SEED_PATH', '/srv/seed')
def dsn_factory(database, user, password, address=DB_ADDRESS):
mangled_address = '/var/run/postgresql' if address == 'localhost' else address
mangled_address = '/var/run/postgresql' if address == 'localhost' else address
return f'postgres:///{database}?host={mangled_address}/&user={user}&password={password}'
@ -36,7 +35,6 @@ def get_config():
'check_role': True,
'admin_user': DEFAULT_USER,
'sql_dir': SQL_DIR},
'source': {'root_path': SRV_SEED_PATH},
'cache': {'root_path': CACHE_ROOT_PATH},
'servermodel': {'internal_source': 'internal',
'internal_distribution': 'last',

View File

@ -24,7 +24,7 @@ class Controller:
if args:
raise ValueError(_(f'the URI "{uri}" can only be called with keyword arguments'))
if module not in self.risotto_modules:
return await remote.remove_call(module,
return await remote.remote_call(module,
version,
message,
kwargs)
@ -44,7 +44,7 @@ class Controller:
if args:
raise ValueError(_(f'the URI "{uri}" can only be published with keyword arguments'))
if module not in self.risotto_modules:
await remote.remove_call(module,
await remote.remote_call(module,
version,
submessage,
kwargs)

View File

@ -1,4 +1,7 @@
from tiramisu import Config
try:
from tiramisu3 import Config
except:
from tiramisu import Config
from traceback import print_exc
from copy import copy
from typing import Dict, Callable, List, Optional
@ -10,7 +13,7 @@ from .logger import log
from .config import get_config
from .context import Context
from . import register
from .remote import Remote
#from .remote import Remote
import asyncpg
@ -147,44 +150,43 @@ class PublishDispatcher:
check_role,
kwargs,
function_objs)
else:
try:
async with self.pool.acquire() as connection:
await connection.set_type_codec(
'json',
encoder=dumps,
decoder=loads,
schema='pg_catalog'
)
risotto_context.connection = connection
async with connection.transaction():
return await self.launch(version,
message,
risotto_context,
check_role,
kwargs,
function_objs)
except CallError as err:
raise err
except Exception as err:
# if there is a problem with arguments, just send an error and do nothing
if get_config()['global']['debug']:
print_exc()
async with self.pool.acquire() as connection:
await connection.set_type_codec(
'json',
encoder=dumps,
decoder=loads,
schema='pg_catalog'
)
risotto_context.connection = connection
async with connection.transaction():
await log.error_msg(risotto_context, kwargs, err)
raise err
try:
async with self.pool.acquire() as connection:
await connection.set_type_codec(
'json',
encoder=dumps,
decoder=loads,
schema='pg_catalog'
)
risotto_context.connection = connection
async with connection.transaction():
return await self.launch(version,
message,
risotto_context,
check_role,
kwargs,
function_objs)
except CallError as err:
raise err
except Exception as err:
# if there is a problem with arguments, just send an error and do nothing
if get_config()['global']['debug']:
print_exc()
async with self.pool.acquire() as connection:
await connection.set_type_codec(
'json',
encoder=dumps,
decoder=loads,
schema='pg_catalog'
)
risotto_context.connection = connection
async with connection.transaction():
await log.error_msg(risotto_context, kwargs, err)
raise err
class Dispatcher(register.RegisterDispatcher,
Remote,
# Remote,
CallDispatcher,
PublishDispatcher):
""" Manage message (call or publish)
@ -329,8 +331,6 @@ class Dispatcher(register.RegisterDispatcher,
if key in function_obj['arguments']:
kw[key] = value
kw['risotto_context'] = risotto_context
returns = await function(self.injected_self[function_obj['module']], **kw)
if risotto_context.type == 'rpc':

View File

@ -1,7 +1,10 @@
from aiohttp.web import Application, Response, get, post, HTTPBadRequest, HTTPInternalServerError, HTTPNotFound
from json import dumps
from traceback import print_exc
from tiramisu import Config, default_storage
try:
from tiramisu3 import Config, default_storage
except:
from tiramisu import Config, default_storage
from .dispatcher import dispatcher

View File

@ -2,9 +2,14 @@ from os import listdir
from os.path import join, basename, dirname, isfile
from glob import glob
from gettext import translation
from tiramisu import StrOption, IntOption, BoolOption, ChoiceOption, OptionDescription, SymLinkOption, FloatOption, \
Calculation, Params, ParamOption, ParamValue, calc_value, calc_value_property_help, \
groups, Option
try:
from tiramisu3 import StrOption, IntOption, BoolOption, ChoiceOption, OptionDescription, \
SymLinkOption, FloatOption, Calculation, Params, ParamOption, \
ParamValue, calc_value, calc_value_property_help, groups, Option
except:
from tiramisu import StrOption, IntOption, BoolOption, ChoiceOption, OptionDescription, \
SymLinkOption, FloatOption, Calculation, Params, ParamOption, \
ParamValue, calc_value, calc_value_property_help, groups, Option
from yaml import load, SafeLoader

View File

@ -1,4 +1,7 @@
from tiramisu import Config
try:
from tiramisu3 import Config
except:
from tiramisu import Config
from inspect import signature
from typing import Callable, Optional
import asyncpg

View File

@ -31,7 +31,7 @@ class Remote:
self.submodules[module] = json
return Config(self.submodules[module])
async def remove_call(self,
async def remote_call(self,
module: str,
version: str,
submessage: str,