def test_debug_setup(capsys): from metrique.utils import debug_setup, remove_file import logging #logging.basicConfig(level=logging.DEBUG) log_file = '__test_log.log' # by default, logging -> file, not stdout _l = debug_setup() assert _l assert _l.level == logging.INFO assert _l.name == 'metrique' assert len(_l.handlers) == 1 assert isinstance(_l.handlers[0], logging.FileHandler) logger_test = logging.getLogger('test') log_format = '%(message)s' _l = debug_setup(logger=logger_test, log_format=log_format) assert _l is logger_test assert _l.name == 'test' _l = debug_setup(logger=logger_test, log_format=log_format, log2file=False, log2stdout=True) _l.info('*') out, err = [x.strip() for x in capsys.readouterr()] #assert out == '' assert err == '*' # no output should seen for info(), since we set level # to warn, but issue an info call _l = debug_setup(logger=logger_test, log_format=log_format, log2file=False, log2stdout=True, level=logging.WARN) _l.info('*') out, err = [x.strip() for x in capsys.readouterr()] #assert out == '' assert err == '' _l.warn('*') out, err = [x.strip() for x in capsys.readouterr()] #assert out == '' assert err == '*' try: # output should be redirected to disk # reduce output to only include the message _l = debug_setup(logger=logger_test, truncate=True, log_dir=log_dir, log_file=log_file, log_format='%(message)s') _l.info('*') _lf = os.path.join(log_dir, log_file) lf = open(_lf).readlines() text = ''.join(lf).strip() assert text == '*' finally: remove_file(_lf)
def _debug_setup_sqlalchemy_logging(self): level = self.config.get('debug') log_format = self.config.get('log_format') log2stdout = self.config.get('log2stdout') log2file = self.config.get('log2file') log_dir = self.config.get('log_dir') log_file = self.config.get('log_file') debug_setup(logger='sqlalchemy', level=level, log2stdout=log2stdout, log_format=log_format, log2file=log2file, log_dir=log_dir, log_file=log_file)
def _setup_inconsistency_log(self): _log_file = self.lconfig.get('log_file').split('.log')[0] basename = _log_file + '.inconsistencies' log_file = basename + '.log' log_dir = self.lconfig.get('log_dir') log_file = os.path.join(log_dir, log_file) log_format = "%(message)s" level = logging.ERROR logger = debug_setup(logger='incon', level=level, log2stdout=False, log_format=log_format, log2file=True, log_dir=log_dir, log_file=log_file) self.log_inconsistency = logger.error
#!/usr/bin/env python # -*- coding: utf-8 -*- # vim: tabstop=4 expandtab shiftwidth=4 softtabstop=4 # Author: "Chris Ward" <*****@*****.**> from __future__ import unicode_literals, absolute_import from copy import deepcopy import os from .utils import set_env from metrique.utils import debug_setup logger = debug_setup('metrique', level=10, log2stdout=True, log2file=False) env = set_env() exists = os.path.exists testroot = os.path.dirname(os.path.abspath(__file__)) cubes = os.path.join(testroot, 'cubes') fixtures = os.path.join(testroot, 'fixtures') cache_dir = env['METRIQUE_CACHE'] def test_datatypes(): from metrique import MetriqueContainer from metrique.utils import utcnow, remove_file o = { "_oid": 1, "date": utcnow(),
#!/usr/bin/env python # -*- coding: utf-8 -*- # vim: tabstop=4 expandtab shiftwidth=4 softtabstop=4 # Author: "Chris Ward" <*****@*****.**> from datetime import datetime import os from utils import set_env from metrique.utils import debug_setup logger = debug_setup('metrique', level=10, log2stdout=True, log2file=False) env = set_env() exists = os.path.exists testroot = os.path.dirname(os.path.abspath(__file__)) cubes = os.path.join(testroot, 'cubes') fixtures = os.path.join(testroot, 'fixtures') cache_dir = env['METRIQUE_CACHE'] etc_dir = os.environ.get('METRIQUE_ETC') default_config = os.path.join(etc_dir, 'metrique.json') def db_tester(proxy): from metrique.utils import ts2dt from metrique import metrique_object as O
def __init__(self, name=None, db=None, config_file=None, config=None, config_key=None, cube_pkgs=None, cube_paths=None, debug=None, log_file=None, log2file=None, log2stdout=None, log_format=None, workers=None, log_dir=None, cache_dir=None, etc_dir=None, tmp_dir=None, container=None, container_config=None, container_config_key=None, proxy=None, proxy_config=None, proxy_config_key=None, version=None, schema=None): super(Metrique, self).__init__() self.name = name or self.name or Metrique.name # cube class defined name # FIXME: this is ugly... and not obvious... # only used currently in sqldata.Generic self._cube = type(self).name options = dict(cache_dir=cache_dir, cube_pkgs=cube_pkgs, cube_paths=cube_paths, db=db, debug=debug, etc_dir=etc_dir, log_dir=log_dir, log_file=log_file, log_format=log_format, log2file=log2file, log2stdout=log2stdout, name=self.name, schema=schema, tmp_dir=tmp_dir, version=version, workers=workers) defaults = dict(cache_dir=CACHE_DIR, cube_pkgs=['cubes'], cube_paths=[], db=getuser(), debug=None, etc_dir=ETC_DIR, log_file='metrique.log', log_dir=LOG_DIR, log_format=None, log2file=True, log2stdout=False, name=None, schema={}, tmp_dir=TMP_DIR, version=0, workers=2) if not self.config: self.config = {} if not self.config.get(self.config_key): self.config[self.config_key] = {} # FIXME: update os.environ LOG_DIR, ETC_DIR, etc to config'd value # if config is passed in, set it, otherwise start # with class assigned default or empty dict self.config.update(copy(config or Metrique.config or {})) self.config_file = config_file or Metrique.config_file self.config_key = config_key or Metrique.config_key # load defaults + set args passed in self.config = configure(options, defaults, config_file=self.config_file, section_key=self.config_key, update=self.config) level = self.lconfig.get('debug') log2stdout = self.lconfig.get('log2stdout') log_format = self.lconfig.get('log_format') log2file = self.lconfig.get('log2file') log_dir = self.lconfig.get('log_dir') log_file = self.lconfig.get('log_file') if self.name: log_file = filename_append(log_file, '.%s' % self.name) self.lconfig['log_file'] = log_file debug_setup(logger='metrique', level=level, log2stdout=log2stdout, log_format=log_format, log2file=log2file, log_dir=log_dir, log_file=log_file) if not schema: # schema (and more) might be defined within self.fields attr schema = getattr(self, 'fields') or {} # filter out invalid schema keys (eg, if derived from .fields) schema = self._schema_filter(schema) self.container_config_key = (container_config_key or Metrique.container_config_key) container_config = dict(container_config or {}) container_config.setdefault('name', self.name) container_config.setdefault('config_file', self.config_file) container_config.setdefault('schema', schema) self.config[self.container_config_key].update(container_config) self.proxy_config_key = proxy_config_key or Metrique.proxy_config_key proxy_config = dict(proxy_config or {}) proxy_config.setdefault('table', self.name) proxy_config.setdefault('config_file', self.config_file) self.config.setdefault(self.proxy_config_key, {}).update(proxy_config) self._proxy = proxy self._container = container if self._container_cls is None: from metrique.core_api import MetriqueContainer self._container_cls = MetriqueContainer if self._proxy_cls is None: from metrique.sqlalchemy import SQLAlchemyProxy self._proxy_cls = SQLAlchemyProxy
import time import virtualenv # find metrique.utils; default is relative to # this calling file; fallback: global import try: import imp utils_tup = imp.find_module('metrique.utils') utils = imp.load_module(*utils_tup) except ImportError: import metrique.utils as utils log_format = "%(message)s" logger = utils.debug_setup('metrique', level=logging.INFO, log_format=log_format, log2file=False, log2stdout=True) pjoin = os.path.join env = os.environ USER = getpass.getuser() VIRTUAL_ENV = utils.active_virtualenv() NOW = datetime.datetime.utcnow().strftime('%FT%H%M%S') HOSTNAME = socket.gethostname() try: # try to get one of the local inet device ip addresses LOCAL_IP = socket.gethostbyname(HOSTNAME) except Exception:
import time import virtualenv # find metrique.utils; default is relative to # this calling file; fallback: global import try: import imp utils_tup = imp.find_module('metrique.utils') utils = imp.load_module(*utils_tup) except ImportError: import metrique.utils as utils log_format = "%(message)s" logger = utils.debug_setup( 'metrique', level=logging.INFO, log_format=log_format, log2file=False, log2stdout=True) pjoin = os.path.join env = os.environ USER = getpass.getuser() VIRTUAL_ENV = utils.active_virtualenv() NOW = datetime.datetime.utcnow().strftime('%FT%H%M%S') HOSTNAME = socket.gethostname() try: # try to get one of the local inet device ip addresses LOCAL_IP = socket.gethostbyname(HOSTNAME) except Exception: LOCAL_IP = '127.0.0.1'