diff --git a/openprocurement/bridge/basic/databridge.py b/openprocurement/bridge/basic/databridge.py index 0a8bcc4..c36d7e3 100644 --- a/openprocurement/bridge/basic/databridge.py +++ b/openprocurement/bridge/basic/databridge.py @@ -1,6 +1,9 @@ # -*- coding: utf-8 -*- from gevent import monkey monkey.patch_all() +from openprocurement.bridge.basic.monkey import patch_traceback +patch_traceback() +# import argparse import logging @@ -19,7 +22,7 @@ from openprocurement_client.resources.sync import ResourceFeeder from openprocurement_client.resources.tenders import TendersClient as APIClient from pkg_resources import iter_entry_points -from yaml import load +from yaml import safe_load from openprocurement.bridge.basic.constants import DEFAULTS, PROCUREMENT_METHOD_TYPE_HANDLERS from openprocurement.bridge.basic.utils import DataBridgeConfigError @@ -110,7 +113,7 @@ def __init__(self, config): for entry_point in iter_entry_points('openprocurement.bridge.basic.worker_plugins', self.worker_type): self.worker_greenlet = entry_point.load() - self.feeder = ResourceFeeder(host=self.api_host, + self.feeder = ResourceFeeder(host=self.config.get('public_resources_api_server', self.api_host), version=self.api_version, key='', resource=self.config['resource'], extra_params=self.extra_params, @@ -363,7 +366,7 @@ def main(): params = parser.parse_args() if os.path.isfile(params.config): with open(params.config) as config_file_obj: - config = load(config_file_obj.read()) + config = safe_load(config_file_obj.read()) logging.config.dictConfig(config) BasicDataBridge(config).run() diff --git a/openprocurement/bridge/basic/monkey.py b/openprocurement/bridge/basic/monkey.py new file mode 100644 index 0000000..2c6c062 --- /dev/null +++ b/openprocurement/bridge/basic/monkey.py @@ -0,0 +1,21 @@ +import traceback +import logging + +exception_logger = logging.getLogger('exception_logger') + + +def print_exception(etype, value, tb, **kwargs): + ''' + Monkey patching for handle Greenlets exception (gevent.hub.Hub#handle_error) + ''' + try: + exception_logger.error(''.join(traceback.format_exception(etype, value, tb))) + except Exception as e: + exception_logger.error('Exception logging error: {}'.format(repr(e))) + return traceback.original_print_exception(etype, value, tb, **kwargs) + + +def patch_traceback(): + traceback.original_print_exception = traceback.print_exception + traceback.print_exception = print_exception + diff --git a/setup.py b/setup.py index 51a4806..b9eaf5a 100644 --- a/setup.py +++ b/setup.py @@ -1,7 +1,7 @@ from setuptools import setup, find_packages import os -version = '0.1.1' +version = '0.1.4dp' here = os.path.abspath(os.path.dirname(__file__)) @@ -72,7 +72,7 @@ url="https://github.com/openprocurement/", license='Apache License 2.0', packages=find_packages(exclude=['ez_setup']), - namespace_packages=['openprocurement'], + namespace_packages=['openprocurement', 'openprocurement.bridge'], include_package_data=True, zip_safe=False, install_requires=requires,