Exemplo n.º 1
0
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)
Exemplo n.º 2
0
 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)
Exemplo n.º 3
0
 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)
Exemplo n.º 4
0
    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
Exemplo n.º 5
0
    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
Exemplo n.º 6
0
#!/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(),
Exemplo n.º 7
0
#!/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
Exemplo n.º 8
0
    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
Exemplo n.º 9
0
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)
Exemplo n.º 10
0
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:
Exemplo n.º 11
0
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'