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
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
def app(): my_app = create_app( local_configs=p_config.ProsperConfig( path.join(ROOT, 'scripts', 'app.cfg') ) ) return my_app
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()
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
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'
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'
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'), )
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
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
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:
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
"""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'))
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
"""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'))
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()
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'
"""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)
"""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': [],
"""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)
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