Example #1
0
def main():
    config = ConfigManager()
    config.set_many(DEFAULT_CONFIG)
    _config = ConfigManager(schema=schema, defaults=defaults)
    config.set_many(_config.as_dict())
    config.set_many(
        ConfigManager(schema=schema,
                      path=_config.get('config.file')).as_dict())
    config.set_many(_config.as_dict())
    config.commit()

    if config.get('dump_configuration'):
        conf = config.as_dict()
        conf.pop('config42')
        print(yaml.dump(conf))
        exit(0)
    if config.get('show_version'):
        print("Installed version {}".format(instabot_py.__version__))
        exit(0)

    if not config.get('ignore_updates'):
        last_version = get_last_version()
        if last_version and last_version != instabot_py.__version__:
            print(
                "Newer version available: {}, The current version: {}".format(
                    last_version, instabot_py.__version__))
            print(
                "To update, please type \n python3 -m pip install instabot-py --upgrade --no-cache-dir "
            )
            print("")
            print(
                "  > You can ignore warning, run the instabot with --ignore-updates flag"
            )
            exit(0)

    if config.get('verbosity'):
        verbosity = int(config.get('verbosity'))
        if verbosity == 1:
            level = logging.INFO
        elif verbosity > 1:
            level = logging.DEBUG
        config.set("logging.root.level", level)

    logging.config.dictConfig(config.get("logging"))
    try:
        bot = InstaBot(config=config)
    except CredsMissing:
        print(
            "You didn't provide your Instagram login & password or you didn't specify the configuration file"
        )
        print("Try again :")
        print("")
        print("   instabot-py --login YOUR_LOGIN --password YOUR_PASSWORD")
        print("   instabot-py -c your-config.yml")
        print(
            "You can export and modify the default configuration by typing the command below"
        )
        print("    instabot-py --dump")
        exit(1)
    bot.mainloop()
Example #2
0
def main():
    config = ConfigManager()
    config.set_many(DEFAULT_CONFIG)
    _config = ConfigManager(schema=schema, defaults=defaults)
    config.set_many(_config.as_dict())
    config.set_many(ConfigManager(path=_config.get('config.file')).as_dict())
    config.set_many(_config.as_dict())
    config.commit()

    if config.get('dump_configuration'):
        conf = config.as_dict()
        conf.pop('config42')
        print(yaml.dump(conf))
        exit(0)
    if config.get('show_version'):
        print(instabot_py.__version__)
        exit(0)

    if config.get('verbosity'):
        verbosity = int(config.get('verbosity'))
        if verbosity == 1:
            level = logging.INFO
        elif verbosity > 1:
            level = logging.DEBUG
        config.set("logging.root.level", level)

    logging.config.dictConfig(config.get("logging"))
    bot = InstaBot(config=config)
    bot.mainloop()
def test_configuration_update_default_value(default_config):
    config_manager = ConfigManager(defaults=default_config)
    assert config_manager.get('absentkey3.absentkey3.absentkey3') is None
    config_manager.set('absentkey3.absentkey3.absentkey3', "value", default=True)
    config_manager.set('absentkey4', "value", default=True)

    assert config_manager.as_dict().get('absentkey3') is None
Example #4
0
def main():
    parser = ArgumentParser(description='Instabot', add_help=False)
    parser.add_argument('--version', action='version', version=__version__)
    choices = [
        func for func in dir(Instabot)
        if callable(getattr(Instabot, func)) and not func.startswith('_')
    ]
    parser.add_argument('action', metavar='|'.join(choices), choices=choices)

    defaults = {
        'config42':
        OrderedDict([
            ('argv', dict(handler=ArgParse, schema=schema, parents=[parser])),
            ('env', {
                'prefix': 'INSTABOT'
            }),
            ('file', {
                'path': 'config.yml'
            }),
        ])
    }

    config = ConfigManager(schema=schema, defaults=defaults)
    config_file = config.get('config.file')
    _config = ConfigManager(schema=schema, path=config_file)
    config.set_many(_config.as_dict())
    config.commit()

    logging.config.dictConfig(config.get("logging"))

    instabot = Instabot(config)
    getattr(instabot, config.get('action'))()
Example #5
0
def main():
    config = ConfigManager()
    config.set_many(DEFAULT_CONFIG)
    _config = ConfigManager(schema=schema, defaults=defaults)
    config.set_many(_config.as_dict())
    config_file = _config.get('config.file')
    config.set_many(ConfigManager(schema=schema, path=config_file).as_dict())
    config.set_many(_config.as_dict())
    config.commit()

    configure_logging(config)
    if config.get('dump_configuration'):
        conf = config.as_dict()
        conf.pop('config42')
        conf.pop('dump_configuration')
        print(yaml.dump(conf))
        exit(0)
    if config.get('show_version'):
        print("Installed version {}".format(src.__version__))
        exit(0)

    if not config.get('ignore_updates'):
        last_version = get_last_version()
        if last_version and last_version != src.__version__:
            print("Newer version available: {}, The current version: {}".format(last_version, src.__version__))
            print("To update, please type \n python3 -m pip install instabot-py --upgrade --no-cache-dir ")
            print("")
            print("  > You can ignore warning, run the instabot with --ignore-updates flag")
            exit(0)

    try:
        bot = InstaBot(config=config)
        if config_file:
            bot.logger.info(f"Reading configuration ({len(_config.as_dict())} settings) from {config_file}")
        else:
            bot.logger.info(f"Use the default configuration, add '-c your-config.yml' to specify your config")

    except CredsMissing:
        print("You didn't provide your Instagram login & password or you didn't specify the configuration file")
        print("Try again :")
        print("")
        print("   instabot-py --login YOUR_LOGIN --password YOUR_PASSWORD")
        print("   instabot-py -c your-config.yml")
        print("You can export and modify the default configuration by typing the command below")
        print("    instabot-py --dump")
        exit(1)
    bot.mainloop()
Example #6
0
def test_apply_literals(script_runner):
    keyspace = '/' + str(uuid4())
    _ = script_runner.run(
        'config42',
        *args('-l key=value key2=value -c etcd --etcd-keyspace ' + keyspace))
    ret = script_runner.run(
        'config42',
        *args('-a apply -l key=value2 -c etcd --etcd-keyspace ' + keyspace))
    assert ret.success
    config_manager = ConfigManager(keyspace=keyspace)
    assert config_manager.get('key') == 'value2'
    assert config_manager.get('key2') is None
    assert len(config_manager.as_dict()) == 1
Example #7
0
def test_apply_raw(script_runner, tmp_path):
    tmp_dir = tmp_path / 'raw'
    tmp_dir.mkdir()
    path = str(tmp_dir)
    _ = script_runner.run(
        'config42', *args('-l key=value key2=value -c raw --raw-path ' + path))
    ret = script_runner.run(
        'config42', *args('-a apply -l key=value2 -c raw --raw-path ' + path))
    assert ret.success
    config_manager = ConfigManager(path=path)
    assert config_manager.get('key') == 'value2'
    assert config_manager.get('key') == 'value2'
    assert config_manager.get('key2') is None
    assert len(config_manager.as_dict()) == 1
Example #8
0
def bot(tmp_path, cwd):
    from instabot_py import InstaBot
    import logging.config
    _config = ConfigManager(defaults={'config42': OrderedDict(
        [
            ('env', {'prefix': 'INSTABOT'}),
            ('file', {'path': cwd + '/files/instabot.config.yml'}),
        ]
    )})
    logging.basicConfig(level=logging.DEBUG)
    return InstaBot(**_config.as_dict(),
                    session_file=str(tmp_path / "requests.session"),
                    database={
                        "type": "sql",
                        "connection_string": "sqlite:///" + str(tmp_path / "sqlite.db")})
Example #9
0
    def __init__(self, prefix, **kwargs):
        """
            Initialize the handler data store.
            :param prefix: environment prefix for configuration map
            :type key: string
        """
        super().__init__()
        configmanager = ConfigManager()
        for key, value in os.environ.items():
            if key.startswith(prefix + "_"):
                configmanager.set(
                    key.replace(prefix + "_", "").replace("_", ".").lower(),
                    value)

        self.in_memory_config = configmanager.as_dict()
        self.config = self.in_memory_config
Example #10
0
def main():
    config = ConfigManager()
    config.set_many(DEFAULT_CONFIG)
    _config = ConfigManager(schema=schema, defaults=defaults)
    config.set_many(_config.as_dict())
    config_file = _config.get('config.file')
    config.set_many(ConfigManager(schema=schema, path=config_file).as_dict())
    config.set_many(_config.as_dict())
    config.commit()

    configure_logging(config)
    if config.get('dump_configuration'):
        conf = config.as_dict()
        conf.pop('config42')
        conf.pop('dump_configuration')
        print(yaml.dump(conf))
        exit(0)

    if config.get('create_configuration'):
        create_configuration()
        exit(0)

    if config.get('show_version'):
        print("Installed version {}".format(instabot_py.__version__))
        exit(0)

    if not config.get('ignore_updates'):
        last_version = get_last_version()
        current_version = instabot_py.__version__
        if last_version and last_version != current_version:
            print(f"""Newer version is available: {last_version}. The current \
version is: {current_version}.
To update instabot-py, please perform: 
    python3 -m pip install instabot-py --upgrade --no-cache-dir
                
    > You can also ignore this warning and upgrade instabot-py later. In this \
case, please run the instabot with '--ignore-updates' flag.""")
            exit(0)

    if config_file:
        print(f"Reading configuration ({len(_config.as_dict())} settings) from"
              f" {config_file}")
    elif os.path.isfile('instabot.config.yml'):
        print("Using 'instabot.config.yml' as a configuration, add "
              "'-c your-config.yml' if you want to use your config file")
    else:
        print("Configuration file has not been found. Please run the instabot "
              "with '--create-config' flag.")
        exit(0)

    try:
        bot = InstaBot(config=config)
    except CredsMissing:
        print(
            """We could not find your Instagram login and/or password. Maybe \
you did not change the default ones in the config file.
You can specify them either directly, correct them in the default config file \
or use your own config file:

    instabot-py --login YOUR_LOGIN --password YOUR_PASSWORD    
or
    instabot-py -c your-config.yml
""")
        exit(1)

    bot.mainloop()
Example #11
0
def test_loop_as_dict(sample_config):
    config_manager = ConfigManager()
    config_manager.set_many(sample_config)
    assert len(config_manager.as_dict()) > 0
    assert config_manager.as_dict() == config_manager.handler.config
Example #12
0
from pprint import pprint

from config42 import ConfigManager
from config42.handlers.argparse import ArgParse

schema = [
    dict(name="first name", key="user.firstname"),
    dict(name="last name", key="user.lastname"),
    dict(name="email",
         source=dict(argv=["-e", "--email"]),
         key="user.email",
         description="A valid email address"),
    dict(name="Action",
         key="action",
         choices=["create", "delete"],
         default="create"),
    dict(name="logging level",
         key="logging.level",
         description="Logging verbosity level",
         choices=["critical", "error", "warning", "info", "debug"],
         type="string")
]

try:
    config = ConfigManager(handler=ArgParse, schema=schema)
    pprint(config.as_dict())
except Exception as exc:
    pprint(exc)
Example #13
0
import logging.config
import os

from config42 import ConfigManager

from log_analyzer.default_config import DEFAULT_CONFIG

LOGGER = logging.getLogger(__name__)

env_config = ConfigManager(prefix="LOGANALYZER")
logging.basicConfig(
    level=logging.DEBUG if env_config.get("debug") else logging.INFO)
config = ConfigManager(defaults=DEFAULT_CONFIG)
config.set_many(env_config.as_dict())
config_file = config.get("config.file")
config_etcd = config.get("config.etcd")
if config_file:
    if config_file.startswith("/"):
        config_path = config_file
    else:
        cwd = os.getcwd()
        config_path = cwd + "/" + config_file
    config.set_many(
        ConfigManager(path=config_path.replace('//', '/')).as_dict())
    LOGGER.info("Setting configuration from {} : OK".format(config_file))

if config_etcd:
    if not config_etcd.get("keyspace"):
        raise Exception("etcd Keyspace is mandatory")
    try:
        config.set_many(ConfigManager(**config_etcd).as_dict())
Example #14
0
    def create(*, project_name, encoding='utf-8', environment=None, defaults=None):
        if defaults is None:
            defaults = {}
        # load defaults from home directory
        config_file = Config._get_config_file_path(project_name, "default")
        found_config_file = False
        if os.path.exists(config_file):
            logging.getLogger(__name__).info("loading default configurations from %s", config_file)
            config = ConfigManager(path=config_file, encoding=encoding, defaults=defaults)
            found_config_file = True
        # load environment configurations from environment variables
        # fix prefix to be SC
        prefix = "SC"
        env_config = ConfigManager(prefix=prefix)

        key_env = "environment"
        if environment is None:
            environment = env_config.get(key_env)
            if environment is None:
                # use production configuration if not specified environment
                environment = "production"
                logging.getLogger(__name__).info("did not specify environment, using %s", environment)
        else:
            logging.getLogger(__name__).info("using environment: %s", environment)

        # load environment configurations from /var/opt/sc directory
        env_config_file = Config._get_config_file_path(project_name, environment)
        if os.path.exists(env_config_file):
            logging.getLogger(__name__).info("loading environmental configurations from %s", env_config_file)
            if not found_config_file:
                config = ConfigManager(path=env_config_file, encoding=encoding, defaults=defaults)
                found_config_file = True
            else:
                config.set_many(ConfigManager(path=env_config_file, encoding=encoding).as_dict())

        # load environment configurations from user directory
        user_config_file = Config._get_user_dir_config_file_path(project_name, environment)
        if os.path.exists(user_config_file):
            logging.getLogger(__name__).info("loading user directory configurations from %s", user_config_file)
            if not found_config_file:
                config = ConfigManager(path=user_config_file, encoding=encoding, defaults=defaults)
                found_config_file = True
            else:
                config.set_many(ConfigManager(path=user_config_file, encoding=encoding).as_dict())

        # load environment configurations from current directory
        current_dir_config_file = Config._get_cur_dir_config_file_path(environment)
        if os.path.exists(current_dir_config_file):
            logging.getLogger(__name__).info("loading current directory configurations from %s", current_dir_config_file)
            logging.getLogger(__name__).info(f"found_config_file: {found_config_file}")
            if not found_config_file:
                config = ConfigManager(path=current_dir_config_file, encoding=encoding, defaults=defaults)
                found_config_file = True
            else:
                config.set_many(ConfigManager(path=current_dir_config_file, encoding=encoding).as_dict())
        
        if not found_config_file:
            config = ConfigManager(defaults=defaults)
        config.set_many(env_config.as_dict())
        config.set(key_env, environment)
        return config