예제 #1
0
def get_config(config_filename):
    """parse test config file

    Args:
        config_filename (str): path to config file

    Returns:
        (:obj:`configparser.ConfigParser`)

    """
    config = p_config.ProsperConfig(config_filename)
    #config = configparser.ConfigParser(
    #    interpolation=configparser.ExtendedInterpolation(),
    #    allow_no_value=True,
    #    delimiters=('='),
    #    inline_comment_prefixes=('#')
    #)
    #
    #local_filename = config_filename.replace('.cfg', '_local.cfg')
    #if path.isfile(local_filename):
    #    config_filename = local_filename
    #
    #with open(config_filename, 'r') as file:
    #    config.read_file(file)

    return config
예제 #2
0
def test_priority_order():
    """Makes sure desired priority order is followed

        1. override_value
        2. local_config option
        3. global_config option
        4. default_value

    """
    TestConfigObj = prosper_config.ProsperConfig(
        TEST_GLOBAL_CONFIG_PATH,
        local_filepath_override=TEST_LOCAL_CONFIG_PATH)

    ## Test #1 priority:
    assert TestConfigObj.get_option('TEST', 'key2', 999, None) == 999

    ## Test #2 priority
    assert TestConfigObj.get_option('TEST', 'key2', None, None) == str(100)

    ## Test #3 priority
    assert TestConfigObj.get_option('TEST', 'key3', None, None) == 'stuff'

    ## Test #4 priority
    assert TestConfigObj.get_option('TEST', 'nokey', 111, 111) == 111

    assert TestConfigObj.get_option('TEST', 'dummy_val', None,
                                    None) == ENV_TEST_1
예제 #3
0
def app():
    my_app = create_app(
        local_configs=p_config.ProsperConfig(
            path.join(ROOT, 'scripts', 'app.cfg')
        )
    )
    return my_app
예제 #4
0
def build_logger_pythonanywhere(config_path,
                                log_name=_version.PROGNAME,
                                debug=False):
    """build a logger outside the CLI FlaskLauncher

    Args:
        config_path (str): path to config file
        log_name (str): name of log
        debug (bool): enable stdout loggers and disable webhook loggers

    """
    config = p_config.ProsperConfig(config_path)
    builder = p_logging.ProsperLogger(log_name,
                                      config.get('LOGGING', 'log_path'),
                                      config_obj=config)

    if debug:
        builder.configure_debug_logger()
    else:
        if config.get('LOGGING', 'discord_webhook'):
            builder.configure_discord_logger()
        if config.get('LOGGING', 'slack_webhook'):
            builder.configure_slack_logger()
        if config.get('LOGGING', 'hipchat_webhook'):
            builder.configure_hipchat_logger()
예제 #5
0
def test_fail_get():
    """tries to fetch a key in neither local/global"""
    TestConfigObj = prosper_config.ProsperConfig(
        TEST_GLOBAL_CONFIG_PATH,
        local_filepath_override=TEST_LOCAL_CONFIG_PATH)

    with pytest.raises(KeyError):
        TestConfigObj.get('TEST', 'key4')  #no key 4 = exception
예제 #6
0
def test_global_get():
    """tries to fetch key from global config"""
    TestConfigObj = prosper_config.ProsperConfig(
        TEST_GLOBAL_CONFIG_PATH,
        local_filepath_override=TEST_LOCAL_CONFIG_PATH)

    global_val = TestConfigObj.get('FAILS', 'shared_key')
    assert global_val == '7'
예제 #7
0
def test_local_get():
    """tries to fetch key from local config"""
    TestConfigObj = prosper_config.ProsperConfig(
        TEST_GLOBAL_CONFIG_PATH,
        local_filepath_override=TEST_LOCAL_CONFIG_PATH)

    good_val = TestConfigObj.get('TEST', 'key2')
    assert good_val == '100'
예제 #8
0
def config(request):
    """yield a raw config.  No secrets

    Returns
        prosper.config.ProsperConfig: configuration object without secrets

    """
    return p_config.ProsperConfig(
        request.config.getini('config_path'),
    )
예제 #9
0
def get_config(config_filename):
    """parse test config file

    Args:
        config_filename (str): path to config file

    Returns:
        (:obj:`configparser.ConfigParser`)

    """
    config = p_config.ProsperConfig(config_filename)

    return config
예제 #10
0
def test_log_format_name():
    """test log_format_name overrides in logging handler builders"""
    test_format = 'STDOUT'
    format_actual = prosper_logging.ReportingFormats[test_format].value
    test_file = path.join(HERE, 'test_alt_format.cfg')

    test_logname = 'test_logger'
    logger_builder = prosper_logging.ProsperLogger(
        test_logname,
        LOG_PATH,
        config_obj=prosper_config.ProsperConfig(test_file))

    logger_builder.configure_default_logger()
    logger = logger_builder.get_logger()

    result = False
    for fmt in [h.formatter._fmt for h in logger.handlers
                ]:  #check if we have a handler with the requested format
        result = result or fmt == format_actual

    assert result
예제 #11
0
from warnings import warn

import pytest
from mock import patch, Mock
from testfixtures import LogCapture

import prosper.common.prosper_logging as prosper_logging
import prosper.common.prosper_config as prosper_config

HERE = path.abspath(path.dirname(__file__))
ROOT = path.dirname(HERE)
ME = __file__.replace(HERE, 'test')
LOCAL_CONFIG_PATH = path.join(ROOT, 'prosper', 'common',
                              'common_config.cfg')  #use root config

TEST_CONFIG = prosper_config.ProsperConfig(LOCAL_CONFIG_PATH)


def helper_log_messages(logger, log_capture_override=None, config=TEST_CONFIG):
    """Helper for executing logging same way for every test

    Args:
        logger (:obj:`logging.logger`) logger to commit messages to
        log_capture_override (str): override/filter for testfixtures.LogCapture
        config (:obj: `configparser.ConfigParser`): config override for function values

    Returns:
        (:obj:`testfixtures.LogCapture`) https://pythonhosted.org/testfixtures/logging.html

    """
    with LogCapture(log_capture_override) as log_tracker:
예제 #12
0
import requests

import prosper.common.prosper_logging as p_logging
import prosper.common.prosper_config as p_config

## TODO: need more path than expected?
from prosper_bots._version import __version__
import prosper_bots.config as api_config
import prosper_bots.utils as utils
import prosper_bots.connections as connections
import prosper_bots.platform_utils as platform_utils
import prosper_bots.commands as commands
import prosper_bots.exceptions as exceptions

HERE = path.abspath(path.dirname(__file__))
CONFIG = p_config.ProsperConfig(path.join(HERE, 'bot_config.cfg'))
PROGNAME = 'ProsperSlackBot'
CONN = connections.build_connection('slackbot')
PP = pprint.PrettyPrinter(indent=2)


@slackbot.bot.respond_to('version', re.IGNORECASE)
def which_prosperbot(message):
    """echo deployment info"""
    message_info = platform_utils.parse_slack_message_object(message)
    api_config.LOGGER.info('#%s @%s -- Version Info',
                           message_info['channel_name'],
                           message_info['user_name'])
    try:
        version_str = commands.version_info(PROGNAME)
    except Exception:  # pragma: no cover
예제 #13
0
"""helpers.py: tests global scratch space"""
# TODO: move root/paths to pytest official global spaces
from os import path

import prosper.common.prosper_config as p_config

HERE = path.abspath(path.dirname(__file__))
ROOT = path.dirname(HERE)

APP_CONFIG = p_config.ProsperConfig(
    path.join(ROOT, '{{cookiecutter.library_name}}', 'app.cfg'))
def config(request):
    """render a ProsperConfig object for testing"""
    return p_config.ProsperConfig(request.config.getini('app_cfg'))
예제 #15
0
import requests
import ujson
from plumbum import cli
from tinydb import TinyDB, Query
import dataset

requests.models.json = ujson

import prosper.common.prosper_logging as p_logging
import prosper.common.prosper_config as p_config
#import prosper.esi.eve_esi as esi

HERE = path.abspath(path.dirname(__file__))
ME = __file__.replace('.py', '')
CONFIG_ABSPATH = path.join(HERE, 'cron_config.cfg')
config = p_config.ProsperConfig(CONFIG_ABSPATH)
LOGBUILDER = p_logging.ProsperLogger(ME, 'logs', config)
logger = LOGBUILDER.get_logger()


#TODO: sql credentials or table info
def get_killmails_from_db(start_datetime, end_datetime):
    """check existing records for kms we don't need to pull

    Args:
        start_datetime (`obj`:`datetime`): start datetime range (not None)
        end_datetime (`obj`:`datetime`): end datetime range (default: today())

    Returns:
        (`obj`:`list` `list`:int) returns list of existing kill_id's between datetimes
예제 #16
0
"""helpers.py: tests global scratch space"""
# TODO: move root/paths to pytest official global spaces
from os import path

import prosper.common.prosper_config as p_config

HERE = path.abspath(path.dirname(__file__))
ROOT = path.dirname(HERE)

APP_CONFIG = p_config.ProsperConfig(path.join(ROOT, 'summary', 'app.cfg'))
예제 #17
0
using https://github.com/yabb85/ueki as prototype
"""
from os import path

from flask_script import Manager, Server

from publicAPI import create_app

import prosper.common.prosper_logging as p_logging
import prosper.common.prosper_config as p_config

HERE = path.abspath(path.dirname(__file__))
ROOT = path.dirname(HERE)

CONFIG_FILEPATH = path.join(HERE, 'app.cfg')

CONFIG = p_config.ProsperConfig(CONFIG_FILEPATH)

SETTINGS = {'PORT': 8001}
APP = create_app(SETTINGS, CONFIG)

MANAGER = Manager(APP)
MANAGER.add_command('runserver',
                    Server(host='0.0.0.0', port=CONFIG.get('PROD', 'PORT')))
MANAGER.add_command(
    'debug', Server(use_debugger=True, port=CONFIG.get('DEBUG', 'PORT')))

if __name__ == '__main__':
    MANAGER.run()
예제 #18
0
import warnings
from enum import Enum
import re

import requests

#import prosper.common as common
import prosper.common.prosper_config as p_config
import prosper.common.prosper_utilities as p_utils

HERE = path.abspath(path.dirname(__file__))
ME = __file__.replace('.py', '')
CONFIG_ABSPATH = path.join(HERE, 'common_config.cfg')

#COMMON_CONFIG = get_config(CONFIG_ABSPATH)
COMMON_CONFIG = p_config.ProsperConfig(CONFIG_ABSPATH)

DISCORD_MESSAGE_LIMIT = 2000
DISCORD_PAD_SIZE = 100

DEFAULT_LOGGER = logging.getLogger('NULL')
DEFAULT_LOGGER.addHandler(logging.NullHandler())

SILENCE_OVERRIDE = False  #deactivate webhook loggers for testmode


class ReportingFormats(Enum):
    """Enum for storing handy log formats"""
    DEFAULT = '[%(asctime)s;%(levelname)s;%(filename)s;%(funcName)s;%(lineno)s] %(message)s'
    PRETTY_PRINT = '[%(levelname)s:%(filename)s--%(funcName)s:%(lineno)s]\n%(message).1000s'
    STDOUT = '[%(levelname)s:%(filename)s--%(funcName)s:%(lineno)s] %(message)s'
예제 #19
0
"""helpers.py: tests global scratch space"""
# TODO: move root/paths to pytest official global spaces
from os import path
import shutil

import prosper.common.prosper_config as p_config

HERE = path.abspath(path.dirname(__file__))
ROOT = path.dirname(HERE)

APP_CONFIG = p_config.ProsperConfig(path.join(ROOT, 'testhelpers', 'app.cfg'))

VENV_NAME = '_dummy_venv'

if path.isdir(VENV_NAME):
    print('cleaning up test venv')
    shutil.rmtree(VENV_NAME)
예제 #20
0
"""helpers.py: tests global scratch space"""
from os import path
import uuid
from collections import OrderedDict

import shortuuid

import prosper.common.prosper_config as p_config


HERE = path.abspath(path.dirname(__file__))
ROOT = path.dirname(HERE)

APP_CONFIG = p_config.ProsperConfig(path.join(ROOT, 'slash_coins', 'app.cfg'))

SAMPLE_HIPCHAT_JSON = {
    'event': 'room_message',
    'item': {
        'message': {
            'date': '2017-12-20T23:35:22.234819+00:00',
            'from': {
                'id': 999,
                'links': {
                    'self': 'https://fake.hipchat.com/v2/user/500'
                },
                'mention_name': 'TestUser',
                'name': 'Test User',
                'version': 'N0TUSED',
            },
            'id': str(uuid.uuid1()),
            'mentions': [],
예제 #21
0
"""helpers.py: common utilities for tests"""
from os import path

import prosper.common.prosper_config as p_config

HERE = path.abspath(path.dirname(__file__))
CONFIG_PATH = path.join(HERE, 'test_config.cfg')

CONFIG = p_config.ProsperConfig(CONFIG_PATH)
예제 #22
0
import datetime
import json
import os
import platform
import warnings

import pymongo
import genson

import prosper.common.prosper_config as p_config
from prosper.test_utils.schema_utils import generate_first_run_metadata, generate_schema_from_data

HERE = os.path.abspath(os.path.dirname(__file__))
ROOT = os.path.join(os.path.dirname(HERE), 'prosper', 'test_utils')

TEST_CONFIG = p_config.ProsperConfig(os.path.join(HERE, 'test.cfg'))
ROOT_CONFIG = p_config.ProsperConfig(os.path.join(ROOT, 'app.cfg'))


def init_schema_database(
    context,
    group_tag,
    name_tag,
    data,
    version,
):
    """generates simple database for test process

    Args:
        context (:obj:`pymongo.collection`): mongo handle for writing to
        group_tag (str): group name of entry