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)
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)
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
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')
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'))
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
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" }, }
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()