Exemple #1
0
def arg_parser():
    parser = argparse.ArgumentParser()
    parser.description = 'Talkative - Server Messager for study'
    parser.add_argument('--config', nargs='?')
    parser.add_argument('-e', '--encoding', nargs='?', help=f'Encoding (default "{settings.get("ENCODING")}")')
    parser.add_argument('-a', '--host', nargs='?', help=f'IP (default "{settings.get("HOST")}")')
    parser.add_argument('-p', '--port', nargs='?', help=f'Port (default "{settings.get("PORT")}")')
    parser.add_argument('--no-async', dest='no_async', action='store_true', help='Start do not async server')
    parser.set_defaults(no_async=False)
    parser.add_argument(
        '-v',
        '--verbose',
        action='count',
        default=settings.get('LOGGING_LEVEL'),
        help=f'Increase verbosity of log output (default "{settings.get("LOGGING_LEVEL")}")',
    )
    log_group = parser.add_mutually_exclusive_group()
    log_group.add_argument('-g', '--gui', dest='gui', action='store_true', help='Start GUI Configuration')
    log_group.set_defaults(gui=settings.get('GUI'))
    log_group.add_argument('-c', '--console', dest='console', action='store_true', help='Start cli')
    log_group.set_defaults(console=settings.get('console'))
    namespace = parser.parse_args()

    if namespace.config:
        settings.load_file(path=namespace.config)

    for k, v in vars(namespace).items():
        if not v:
            continue
        settings.set(k, v)

    _configure_logger(namespace.verbose)
Exemple #2
0
    def connect(self):
        app = App.get_running_app()
        settings.set('user_name', self.ids.field_username.text)
        settings.set('password', self.ids.field_password.text)
        screen = 'info'
        info = app.main_widget.ids.scr_mngr.get_screen(screen)
        info.update_info(
            f'Attempt to join {settings.HOST}:{settings.PORT} as {settings.USER_NAME}'
        )

        Clock.schedule_once(lambda *_: app.show_screen(screen), 0.1)

        Logger.debug(
            f'Connect to server {settings.get("host")}:{settings.get("port")} with name "{settings.USER_NAME}"'
        )
        self.process_key()

        app.client = ClientTransport()
        app.client.daemon = True
        app.register_event()
        app.client.start()
        time.sleep(1)
Exemple #3
0
    def __init__(self):
        arguments = docopt(__doc__, version=self.VERSION)
        self.id = arguments.get('--id')
        self.name = self.NAME
        self.version = self.VERSION
        self.description = self.DESCRIPTION
        self.debug = arguments.get('--debug')
        self.verbose = arguments.get('--verbose')
        self.logger = verboselogs.VerboseLogger(__name__)

        settings.set('service.id', self.id)
        settings.set('service.version', self.VERSION)
        settings.set('service.description', self.DESCRIPTION)
        settings.set('debug.active', self.debug)
        settings.set('debug.verbose', self.verbose)

        signal.signal(signal.SIGINT, self.stop)
        signal.signal(signal.SIGTERM, self.stop)

        self.logger.level = logging.INFO
        self.logger.level = verboselogs.VERBOSE if self.verbose else self.logger.level
        self.logger.level = logging.DEBUG if self.debug else self.logger.level
Exemple #4
0
    def process_key(self, *_):
        """Загружаем ключи с файла, если же файла нет, то генерируем новую пару."""
        secret = f'.secret.{settings.USER_NAME}.yaml'
        settings.INCLUDES_FOR_DYNACONF.append(secret)
        key_file = Path.cwd().joinpath(Path(f'{secret}'))

        user_name = settings.get('USER_NAME')
        passwd = settings.get('PASSWORD')

        settings.load_file(path=str(key_file))
        settings.set('USER_NAME', user_name)
        settings.set('PASSWORD', passwd)
        key = settings.get('USER_KEY')
        if not key:
            keys = RSA.generate(2048, os.urandom)
            key = keys.export_key().decode('ascii')
            loader.write(key_file, {
                'DEFAULT': {
                    'USER_KEY': key,
                    'PASSWORD': settings.PASSWORD,
                }
            })
            settings.load_file(path=str(key_file))
            key = settings.get('USER_KEY')
Exemple #5
0
print(settings.VALUE)
print(type(settings.VALUE))

print("\nThe debug is:")
print(settings.DEBUG)
print(type(settings.DEBUG))

print("\nThe list is:")
print(settings.ALIST)
print(len(settings.ALIST))
print(type(settings.ALIST))

print("\nThe dict is:")
print(settings.ADICT)
print(settings.ADICT.keys())
print(type(settings.ADICT))

print("\nThe value that may not exist can have a default :")
print(settings.get('FOO', default='bar'))

print("\nThe host for default :")
print(settings.HOSTNAME)

print("\nDotted path lookup value :")
print(settings('ADICT.KEY'))

print(settings.WORKS)

print("\nDotted path set value :")
print(settings.set('ONE.TWO', 'value'))
Exemple #6
0
def test_load_dunder(clean_env):
    """Test load and merge with dunder settings"""
    clean_environ("DYNACONF_DATABASES")
    settings.set(
        "DATABASES",
        {
            "default": {
                "NAME": "db",
                "ENGINE": "module.foo.engine",
                "ARGS": {
                    "timeout": 30
                },
                "PORTS": [123, 456],
            }
        },
    )
    # change engine
    clean_environ("DYNACONF_DATABASES")
    environ["DYNACONF_DATABASES__default__ENGINE"] = "other.module"
    load_from_env(
        identifier="env_global",
        key=None,
        env="dynaconf",
        obj=settings,
        silent=True,
    )
    assert settings.DATABASES.default.ENGINE == "other.module"

    # change timeout directly
    clean_environ("DYNACONF_DATABASES")
    environ["DYNACONF_DATABASES__default__ARGS__timeout"] = "99"
    load_from_env(
        identifier="env_global",
        key=None,
        env="dynaconf",
        obj=settings,
        silent=True,
    )
    assert settings.DATABASES.default.ARGS.timeout == 99

    # add to ARGS
    clean_environ("DYNACONF_DATABASES")
    environ["DYNACONF_DATABASES__default__ARGS"] = "{retries=10}"
    load_from_env(
        identifier="env_global",
        key=None,
        env="dynaconf",
        obj=settings,
        silent=True,
    )
    assert settings.DATABASES.default.ARGS.retries == 10
    assert settings.DATABASES.default.ARGS.timeout == 99

    # Ensure dictionary keeps its format
    assert settings.DATABASES == {
        "default": {
            "NAME": "db",
            "ENGINE": "other.module",
            "ARGS": {
                "timeout": 99,
                "retries": 10
            },
            "PORTS": [123, 456],
        }
    }
    assert "default" in settings["DATABASES"].keys()
    assert "DEFAULT" not in settings["DATABASES"].keys()
    assert "NAME" in settings["DATABASES"]["default"].keys()
    assert "name" not in settings["DATABASES"]["default"].keys()

    # Clean args
    clean_environ("DYNACONF_DATABASES")
    environ["DYNACONF_DATABASES__default__ARGS"] = "@reset {timeout=8}"
    load_from_env(
        identifier="env_global",
        key=None,
        env="dynaconf",
        obj=settings,
        silent=True,
    )
    assert settings.DATABASES.default.ARGS == {"timeout": 8}

    # Make args empty
    clean_environ("DYNACONF_DATABASES")
    environ["DYNACONF_DATABASES__default__ARGS"] = "@reset {}"
    load_from_env(
        identifier="env_global",
        key=None,
        env="dynaconf",
        obj=settings,
        silent=True,
    )
    assert settings.DATABASES.default.ARGS == {}

    # Remove ARGS key
    clean_environ("DYNACONF_DATABASES")
    environ["DYNACONF_DATABASES__default__ARGS"] = "@del"
    load_from_env(
        identifier="env_global",
        key=None,
        env="dynaconf",
        obj=settings,
        silent=True,
    )
    assert "ARGS" not in settings.DATABASES.default.keys()

    # add to existing PORTS
    clean_environ("DYNACONF_DATABASES")
    environ["DYNACONF_DATABASES__default__PORTS"] = "[789, 101112]"
    load_from_env(
        identifier="env_global",
        key=None,
        env="dynaconf",
        obj=settings,
        silent=True,
    )
    assert "ARGS" not in settings.DATABASES.default.keys()
    assert settings.DATABASES.default.PORTS == [123, 456, 789, 101112]

    # reset PORTS
    clean_environ("DYNACONF_DATABASES")
    environ["DYNACONF_DATABASES__default__PORTS"] = "@reset [789, 101112]"
    load_from_env(
        identifier="env_global",
        key=None,
        env="dynaconf",
        obj=settings,
        silent=True,
    )
    assert "ARGS" not in settings.DATABASES.default.keys()
    assert settings.DATABASES.default.PORTS == [789, 101112]

    # delete PORTS
    clean_environ("DYNACONF_DATABASES")
    environ["DYNACONF_DATABASES__default__PORTS"] = "@del"
    load_from_env(
        identifier="env_global",
        key=None,
        env="dynaconf",
        obj=settings,
        silent=True,
    )
    assert "ARGS" not in settings.DATABASES.default.keys()
    assert "PORTS" not in settings.DATABASES.default.keys()

    # reset default key
    clean_environ("DYNACONF_DATABASES")
    environ["DYNACONF_DATABASES__default"] = "@reset {}"
    load_from_env(
        identifier="env_global",
        key=None,
        env="dynaconf",
        obj=settings,
        silent=True,
    )
    assert settings.DATABASES.default == {}

    # remove default
    clean_environ("DYNACONF_DATABASES")
    environ["DYNACONF_DATABASES__default"] = "@del"
    load_from_env(
        identifier="env_global",
        key=None,
        env="dynaconf",
        obj=settings,
        silent=True,
    )
    assert settings.DATABASES == {}

    # set value to databases
    clean_environ("DYNACONF_DATABASES")
    environ["DYNACONF_DATABASES__foo"] = "bar"
    load_from_env(
        identifier="env_global",
        key=None,
        env="dynaconf",
        obj=settings,
        silent=True,
    )
    assert settings.DATABASES == {"foo": "bar"}

    # reset databases
    clean_environ("DYNACONF_DATABASES")
    environ["DYNACONF_DATABASES"] = "{hello='world'}"
    load_from_env(
        identifier="env_global",
        key=None,
        env="dynaconf",
        obj=settings,
        silent=True,
    )
    assert settings.DATABASES == {"hello": "world"}

    # also reset databases
    clean_environ("DYNACONF_DATABASES")
    environ["DYNACONF_DATABASES"] = "@reset {yes='no'}"
    load_from_env(
        identifier="env_global",
        key=None,
        env="dynaconf",
        obj=settings,
        silent=True,
    )
    assert settings.DATABASES == {"yes": "no"}

    # remove databases
    clean_environ("DYNACONF_DATABASES")
    environ["DYNACONF_DATABASES"] = "@del"
    load_from_env(
        identifier="env_global",
        key=None,
        env="dynaconf",
        obj=settings,
        silent=True,
    )
    assert "DATABASES" not in settings
Exemple #7
0
print(settings.ADICT.keys())
print(type(settings.ADICT))

print("\nThe value that may not exist can have a default :")
print(settings.get("FOO", default="bar"))

print("\nThe host for default :")
print(settings.HOSTNAME)

print("\nDotted path lookup value :")
print(settings("ADICT.KEY"))

print(settings.WORKS)

print("\nDotted path set value :")
print(settings.set("ONE.TWO", "value"))

assertions = {
    "WORKS": "full_example",
    "HOSTNAME": "host.com",
    "PORT": 5000,
    "VALUE": 42.1,
    "ALIST": ["item1", "item2", "item3"],
    "ADICT": {
        "key": "value"
    },
    "ONE": {
        "TWO": "value"
    },
}
Exemple #8
0
def arg_parser():
    global auth
    parser = argparse.ArgumentParser()
    parser.description = 'Talkative - Client Messager for study'
    parser.add_argument('--config', nargs='?')
    parser.add_argument(
        '-e',
        '--encoding',
        nargs='?',
        help=f'Encoding (default "{settings.get("ENCODING")}")')
    parser.add_argument('-a',
                        '--host',
                        nargs='?',
                        help=f'IP (default "{settings.get("HOST")}")')
    parser.add_argument('-p',
                        '--port',
                        nargs='?',
                        help=f'Port (default "{settings.get("PORT")}")')
    parser.add_argument('--no-async',
                        dest='no_async',
                        action='store_true',
                        help='Start do not async client')
    parser.set_defaults(no_async=False)
    parser.add_argument(
        '-v',
        '--verbose',
        action='count',
        default=settings.get('LOGGING_LEVEL'),
        help=
        f'Increase verbosity of log output (default "{settings.get("LOGGING_LEVEL")}")',
    )
    log_group = parser.add_mutually_exclusive_group()
    log_group.add_argument('-g',
                           '--gui',
                           dest='gui',
                           action='store_true',
                           help='Start GUI Configuration')
    log_group.set_defaults(gui=settings.get('GUI'))
    log_group.add_argument('-c',
                           '--console',
                           dest='console',
                           action='store_true',
                           help='Start cli')
    log_group.set_defaults(console=settings.get('console'))

    parser.add_argument('-n',
                        '--name',
                        nargs='?',
                        help='Name user for connect')
    parser.add_argument('--password', nargs='?', help='User password')

    namespace = parser.parse_args()

    if namespace.config:
        settings.load_file(path=namespace.config)

    for k, v in vars(namespace).items():
        if not v:
            continue
        settings.set(k, v)

    if namespace.name and namespace.password:
        settings.set('USER_NAME', namespace.name)
        passwd = namespace.password
    else:
        if settings.GUI:
            client_app.exec_()
            if auth.accepted:
                user_name, passwd = auth.get_auth()
                if not user_name or not passwd:
                    message.critical(auth, 'Ошибка',
                                     'Логин или пароль не заданны')
                    sys.exit(0)
        else:
            user_name = settings.USER_NAME
            try:
                while not user_name or not passwd:
                    user_name = input('Введите имя пользователя\n:')
                    passwd = input('Введите пароль\n:')
            except KeyboardInterrupt:
                sys.exit(0)
    del auth
    settings.set('USER_NAME', user_name)
    settings.set('PASSWORD', passwd)

    _configure_logger(namespace.verbose)
    _process_key()