def script_logging_context(syslog=_has_syslog_handler, syslog_facility=logbook.SyslogHandler.LOG_LOCAL1, syslog_buffer_size=1024, syslog_message_size=32768, syslog_address=("127.0.0.1", 514), syslog_level=logbook.DEBUG, logfile=True, logfile_path="logfile", logfile_mode='a', logfile_encoding='utf-8', logfile_level=logbook.DEBUG, logfile_delay=False, logfile_max_size=1024 * 1024, logfile_backup_count=32, stderr=True, stderr_level=logbook.INFO): """ Context manager that creates a setup of logbook handlers based on the parameters received and sensible defaults. """ from logbook.concurrency import enable_gevent enable_gevent() redirect_python_logging_to_logbook() processor = create_processor() flags = logbook.Flags(errors='silent') handlers = [logbook.NullHandler()] if syslog: handlers.append(create_syslog_handler(facility=syslog_facility, buffer_size=syslog_buffer_size, message_size=syslog_message_size, address=syslog_address, level=syslog_level)) if logfile: handlers.append(create_rotating_file_handler(path=logfile_path, mode=logfile_mode, encoding=logfile_encoding, level=logfile_level, delay=logfile_delay, max_size=logfile_max_size, backup_count=logfile_backup_count)) if stderr: handlers.append(create_stderr_handler(level=stderr_level)) with logbook.NestedSetup([processor, flags] + handlers).applicationbound(): yield
def _enable_logbook_gevent(self): try: from logbook.concurrency import enable_gevent except ImportError: pass else: enable_gevent()
def gevent(request): module_name = getattr(request.module, '__name__', '') if not any(s in module_name for s in ('queues', 'processors')) and request.param: from logbook.concurrency import enable_gevent, _disable_gevent enable_gevent() @request.addfinalizer def fin(): _disable_gevent()
def decorator(*args, **kwargs): from infi.logging.wrappers import script_logging_context from logbook.concurrency import enable_gevent from infi.traceback import traceback_context from os import getpid, getuid from datetime import datetime from docopt import DocoptExit from sys import stderr import logbook if _bypass_console_script_logging: return f(*args, **kwargs) enable_gevent() filename = '/tmp/{}.log'.format(name if name else f.__name__) with script_logging_context(logfile_path=filename, logfile_max_size=20 * 1024 * 1024), traceback_context(), exception_handling_context(): logbook.set_datetime_format("local") logger.info("Calling {}".format(f.__name__)) result = f(*args, **kwargs) logger.info("Call to {} returned {}".format(f.__name__, result)) return result
from infi import unittest from infi.pyutils.contexts import contextmanager from infi.app_repo.utils import path, fopen from infi.app_repo.config import Configuration from mock import patch from logging import getLogger from logbook.concurrency import enable_gevent logger = getLogger(__name__) enable_gevent() class TestCase(unittest.TestCase): @contextmanager def temporary_base_directory_context(self): from infi.app_repo.utils import temporary_directory_context with patch("infi.app_repo.config.get_base_directory") as get_base_directory: with temporary_directory_context() as tempdir: from infi.app_repo.config import Configuration get_base_directory.return_value = tempdir previous_base_directory = Configuration.base_directory.default Configuration.base_directory._default = tempdir try: yield tempdir finally: Configuration.base_directory._default = previous_base_directory @contextmanager def ftp_client_context(self, config, login_with_credentials_in_config=False): from ftplib import FTP from infi.app_repo.ftpserver import make_ftplib_gevent_friendly make_ftplib_gevent_friendly()
from infi import unittest from infi.pyutils.contexts import contextmanager from infi.app_repo.utils import path, fopen from infi.app_repo.config import Configuration from mock import patch from logging import getLogger from logbook.concurrency import enable_gevent logger = getLogger(__name__) enable_gevent() class TestCase(unittest.TestCase): @contextmanager def temporary_base_directory_context(self): from infi.app_repo.utils import temporary_directory_context with patch("infi.app_repo.config.get_base_directory" ) as get_base_directory: with temporary_directory_context() as tempdir: from infi.app_repo.config import Configuration get_base_directory.return_value = tempdir previous_base_directory = Configuration.base_directory.default Configuration.base_directory._default = tempdir try: yield tempdir finally: Configuration.base_directory._default = previous_base_directory @contextmanager def ftp_client_context(self, config, login_with_credentials_in_config=False):