diff --git a/src/risotto/config.py b/src/risotto/config.py index e6b8b8e..93bc3a5 100644 --- a/src/risotto/config.py +++ b/src/risotto/config.py @@ -8,3 +8,19 @@ CONFIGURATION_DIR = 'configurations' TEMPLATE_DIR = 'templates' TMP_DIR = 'tmp' ROUGAIL_DTD_PATH = '../rougail/data/creole.dtd' +POSTGRESQL_ADDRESS = 'localhost' +POSTGRESQL_PORT = 5432 + +def get_config(): + return {'database': {'host': 'localhost', + 'port': 5432, + 'dbname': 'risotto', + 'user': 'risotto', + 'password': 'risotto', + }, + 'http_server': {'port': 8080}, + 'global': {'message_root_path': 'messages', + 'debug': False, + 'internal_user': 'internal', + 'rougail_dtd_path': '../rougail/data/creole.dtd'} + } diff --git a/src/risotto/database.py b/src/risotto/database.py new file mode 100644 index 0000000..1159e4a --- /dev/null +++ b/src/risotto/database.py @@ -0,0 +1,21 @@ +import psycopg2 + +KEY_DATABASE_NAME = 'dbname' +KEY_DATABASE_USER = 'user' +KEY_DATABASE_PASSWORD = 'password' +KEY_DATABASE_HOST = 'host' + + +def connect(conf, database_options=None): + if database_options is None: + option = conf.option['database'] + database_options = { + 'host': option[KEY_DATABASE_HOST], + 'dbname': option[KEY_DATABASE_NAME], + 'user': option[KEY_DATABASE_USER], + 'password': option[KEY_DATABASE_PASSWORD] + + } + if not database_options['host']: + raise Exception('cannot find postgresql') + return psycopg2.connect(**database_options) diff --git a/src/risotto/dispatcher.py b/src/risotto/dispatcher.py index 112a343..6d2cf1f 100644 --- a/src/risotto/dispatcher.py +++ b/src/risotto/dispatcher.py @@ -7,9 +7,12 @@ from .utils import _ from .error import CallError, NotAllowedError from .logger import log from .config import DEBUG +from .config import get_config from .context import Context from . import register +def connect(db_conf): + return psycopg2.connect(**db_conf) class CallDispatcher: def valid_public_function(self, @@ -94,11 +97,14 @@ class CallDispatcher: risotto_context.function = obj['function'] if obj['risotto_context']: kw['risotto_context'] = risotto_context + if obj['database']: + db_conf = get_config.get('database') + risotto_context.db_cursor = await connect(db_conf).cursor() returns = await risotto_context.function(self.injected_self[obj['module']], **kw) except CallError as err: raise err except Exception as err: - if DEBUG: + if get_config().get('global').get('debug'): print_exc() log.error_msg(risotto_context, kwargs,