arpakitlib 1.8.336__tar.gz → 1.9.6__tar.gz
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- {arpakitlib-1.8.336 → arpakitlib-1.9.6}/LICENSE +1 -1
- {arpakitlib-1.8.336 → arpakitlib-1.9.6}/PKG-INFO +7 -25
- arpakitlib-1.9.6/README.md +31 -0
- arpakitlib-1.9.6/arpakitlib/ar_aiogram_as_tg_command_2_util.py +192 -0
- {arpakitlib-1.8.336 → arpakitlib-1.9.6}/arpakitlib/ar_aiogram_as_tg_command_util.py +4 -0
- {arpakitlib-1.8.336 → arpakitlib-1.9.6}/arpakitlib/ar_arpakit_lib_module_util.py +1 -7
- {arpakitlib-1.8.336 → arpakitlib-1.9.6}/arpakitlib/ar_base64_util.py +1 -3
- arpakitlib-1.9.6/arpakitlib/ar_base_http_api_client_util.py +47 -0
- {arpakitlib-1.8.336 → arpakitlib-1.9.6}/arpakitlib/ar_base_worker_util.py +1 -1
- {arpakitlib-1.8.336 → arpakitlib-1.9.6}/arpakitlib/ar_clone_pydantic_model_fields_util.py +4 -4
- arpakitlib-1.9.6/arpakitlib/ar_dict_util.py +59 -0
- arpakitlib-1.9.6/arpakitlib/ar_exception_util.py +18 -0
- {arpakitlib-1.8.336 → arpakitlib-1.9.6}/arpakitlib/ar_generate_connection_url_util.py +1 -15
- arpakitlib-1.9.6/arpakitlib/ar_generate_difficult_password_util.py +41 -0
- {arpakitlib-1.8.336 → arpakitlib-1.9.6}/arpakitlib/ar_generate_simple_code_util.py +1 -1
- {arpakitlib-1.8.336 → arpakitlib-1.9.6}/arpakitlib/ar_list_util.py +23 -5
- {arpakitlib-1.8.336 → arpakitlib-1.9.6}/arpakitlib/ar_need_type_util.py +1 -11
- {arpakitlib-1.8.336 → arpakitlib-1.9.6}/arpakitlib/ar_pydantic_schema_from_sqlalchemy_model_util.py +9 -4
- {arpakitlib-1.8.336 → arpakitlib-1.9.6}/arpakitlib/ar_rat_func_util.py +1 -8
- {arpakitlib-1.8.336 → arpakitlib-1.9.6}/arpakitlib/ar_really_validate_email_util.py +1 -1
- {arpakitlib-1.8.336 → arpakitlib-1.9.6}/arpakitlib/ar_retry_func_util.py +1 -10
- {arpakitlib-1.8.336 → arpakitlib-1.9.6}/arpakitlib/ar_safe_func_util.py +2 -10
- arpakitlib-1.8.336/arpakitlib/ar_sqlalchemy_util.py → arpakitlib-1.9.6/arpakitlib/ar_sqlalchemy_base_dbm_util.py +71 -25
- arpakitlib-1.9.6/arpakitlib/ar_ssh_keys_util.py +45 -0
- {arpakitlib-1.8.336 → arpakitlib-1.9.6}/arpakitlib/ar_ssh_runner_util.py +98 -27
- {arpakitlib-1.8.336 → arpakitlib-1.9.6}/arpakitlib/ar_type_util.py +1 -52
- {arpakitlib-1.8.336 → arpakitlib-1.9.6}/arpakitlib/ar_yookassa_api_client_util.py +11 -4
- {arpakitlib-1.8.336 → arpakitlib-1.9.6}/pyproject.toml +5 -5
- arpakitlib-1.8.336/README.md +0 -49
- arpakitlib-1.8.336/arpakitlib/_arpakit_project_template_v_5/.gitignore +0 -81
- arpakitlib-1.8.336/arpakitlib/_arpakit_project_template_v_5/.python-version +0 -1
- arpakitlib-1.8.336/arpakitlib/_arpakit_project_template_v_5/LICENSE +0 -201
- arpakitlib-1.8.336/arpakitlib/_arpakit_project_template_v_5/README.md +0 -5
- arpakitlib-1.8.336/arpakitlib/_arpakit_project_template_v_5/alembic/README +0 -1
- arpakitlib-1.8.336/arpakitlib/_arpakit_project_template_v_5/alembic/env.py +0 -85
- arpakitlib-1.8.336/arpakitlib/_arpakit_project_template_v_5/alembic/script.py.mako +0 -26
- arpakitlib-1.8.336/arpakitlib/_arpakit_project_template_v_5/alembic/versions/__init__.py +0 -0
- arpakitlib-1.8.336/arpakitlib/_arpakit_project_template_v_5/alembic.ini +0 -119
- arpakitlib-1.8.336/arpakitlib/_arpakit_project_template_v_5/arpakitlib_project_template_info.json +0 -4
- arpakitlib-1.8.336/arpakitlib/_arpakit_project_template_v_5/command/__init__.py +0 -0
- arpakitlib-1.8.336/arpakitlib/_arpakit_project_template_v_5/command/alembic_heads.sh +0 -2
- arpakitlib-1.8.336/arpakitlib/_arpakit_project_template_v_5/command/alembic_history.sh +0 -2
- arpakitlib-1.8.336/arpakitlib/_arpakit_project_template_v_5/command/alembic_history_verbose.sh +0 -2
- arpakitlib-1.8.336/arpakitlib/_arpakit_project_template_v_5/command/alembic_revision_autogenerate.sh +0 -2
- arpakitlib-1.8.336/arpakitlib/_arpakit_project_template_v_5/command/alembic_upgrade_head.sh +0 -2
- arpakitlib-1.8.336/arpakitlib/_arpakit_project_template_v_5/command/beautify_json.py +0 -10
- arpakitlib-1.8.336/arpakitlib/_arpakit_project_template_v_5/command/check_logging.py +0 -14
- arpakitlib-1.8.336/arpakitlib/_arpakit_project_template_v_5/command/check_sqlalchemy_db.py +0 -11
- arpakitlib-1.8.336/arpakitlib/_arpakit_project_template_v_5/command/demojize.py +0 -9
- arpakitlib-1.8.336/arpakitlib/_arpakit_project_template_v_5/command/docker_ps_a.sh +0 -2
- arpakitlib-1.8.336/arpakitlib/_arpakit_project_template_v_5/command/docker_rm_postgres.sh +0 -3
- arpakitlib-1.8.336/arpakitlib/_arpakit_project_template_v_5/command/docker_run_postgres.sh +0 -5
- arpakitlib-1.8.336/arpakitlib/_arpakit_project_template_v_5/command/docker_start_postgres.sh +0 -3
- arpakitlib-1.8.336/arpakitlib/_arpakit_project_template_v_5/command/docker_stop_postgres.sh +0 -3
- arpakitlib-1.8.336/arpakitlib/_arpakit_project_template_v_5/command/drop_json_db.py +0 -13
- arpakitlib-1.8.336/arpakitlib/_arpakit_project_template_v_5/command/drop_sqlalchemy_db.py +0 -15
- arpakitlib-1.8.336/arpakitlib/_arpakit_project_template_v_5/command/emojize.py +0 -9
- arpakitlib-1.8.336/arpakitlib/_arpakit_project_template_v_5/command/ensure_sqlalchemy_check_constraints.py +0 -11
- arpakitlib-1.8.336/arpakitlib/_arpakit_project_template_v_5/command/generate_settings_env_example.py +0 -14
- arpakitlib-1.8.336/arpakitlib/_arpakit_project_template_v_5/command/git_commit.sh +0 -3
- arpakitlib-1.8.336/arpakitlib/_arpakit_project_template_v_5/command/git_push_arpakit_company_github_1.sh +0 -4
- arpakitlib-1.8.336/arpakitlib/_arpakit_project_template_v_5/command/git_push_arpakit_company_gitlab_1.sh +0 -4
- arpakitlib-1.8.336/arpakitlib/_arpakit_project_template_v_5/command/git_push_arpakit_github_1.sh +0 -4
- arpakitlib-1.8.336/arpakitlib/_arpakit_project_template_v_5/command/git_push_arpakit_gitlab_1.sh +0 -4
- arpakitlib-1.8.336/arpakitlib/_arpakit_project_template_v_5/command/git_remote_v.sh +0 -2
- arpakitlib-1.8.336/arpakitlib/_arpakit_project_template_v_5/command/git_set_arpakit_company_origin.sh +0 -11
- arpakitlib-1.8.336/arpakitlib/_arpakit_project_template_v_5/command/git_set_arpakit_origin.sh +0 -11
- arpakitlib-1.8.336/arpakitlib/_arpakit_project_template_v_5/command/git_set_divarteam_origin.sh +0 -8
- arpakitlib-1.8.336/arpakitlib/_arpakit_project_template_v_5/command/git_status.sh +0 -2
- arpakitlib-1.8.336/arpakitlib/_arpakit_project_template_v_5/command/hello_world.py +0 -6
- arpakitlib-1.8.336/arpakitlib/_arpakit_project_template_v_5/command/init_json_db.py +0 -11
- arpakitlib-1.8.336/arpakitlib/_arpakit_project_template_v_5/command/init_sqlalchemy_db.py +0 -11
- arpakitlib-1.8.336/arpakitlib/_arpakit_project_template_v_5/command/poetry_check.sh +0 -2
- arpakitlib-1.8.336/arpakitlib/_arpakit_project_template_v_5/command/poetry_clear_cache.sh +0 -4
- arpakitlib-1.8.336/arpakitlib/_arpakit_project_template_v_5/command/poetry_config.sh +0 -2
- arpakitlib-1.8.336/arpakitlib/_arpakit_project_template_v_5/command/poetry_install.sh +0 -5
- arpakitlib-1.8.336/arpakitlib/_arpakit_project_template_v_5/command/poetry_lock.sh +0 -2
- arpakitlib-1.8.336/arpakitlib/_arpakit_project_template_v_5/command/poetry_remove_and_add_arpakitlib.sh +0 -7
- arpakitlib-1.8.336/arpakitlib/_arpakit_project_template_v_5/command/poetry_show.sh +0 -2
- arpakitlib-1.8.336/arpakitlib/_arpakit_project_template_v_5/command/poetry_show_arpakitlib.sh +0 -2
- arpakitlib-1.8.336/arpakitlib/_arpakit_project_template_v_5/command/poetry_update.sh +0 -6
- arpakitlib-1.8.336/arpakitlib/_arpakit_project_template_v_5/command/poetry_update_arpakitlib.sh +0 -5
- arpakitlib-1.8.336/arpakitlib/_arpakit_project_template_v_5/command/reinit_all_sqlalchemy_db.py +0 -13
- arpakitlib-1.8.336/arpakitlib/_arpakit_project_template_v_5/command/reinit_json_db.py +0 -13
- arpakitlib-1.8.336/arpakitlib/_arpakit_project_template_v_5/command/reinit_sqlalchemy_db.py +0 -13
- arpakitlib-1.8.336/arpakitlib/_arpakit_project_template_v_5/command/remove_operations.py +0 -13
- arpakitlib-1.8.336/arpakitlib/_arpakit_project_template_v_5/command/remove_rows_from_tables_sqlalchemy_db.py +0 -11
- arpakitlib-1.8.336/arpakitlib/_arpakit_project_template_v_5/command/remove_story_logs.py +0 -16
- arpakitlib-1.8.336/arpakitlib/_arpakit_project_template_v_5/command/rm_all_records_in_json_db.py +0 -13
- arpakitlib-1.8.336/arpakitlib/_arpakit_project_template_v_5/command/set_tg_bot_commands.py +0 -16
- arpakitlib-1.8.336/arpakitlib/_arpakit_project_template_v_5/command/show_arpakitlib_project_template_info.py +0 -9
- arpakitlib-1.8.336/arpakitlib/_arpakit_project_template_v_5/command/show_settings.py +0 -10
- arpakitlib-1.8.336/arpakitlib/_arpakit_project_template_v_5/command/show_sqlalchemy_db_table_name_to_amount.py +0 -16
- arpakitlib-1.8.336/arpakitlib/_arpakit_project_template_v_5/command/start_api.py +0 -9
- arpakitlib-1.8.336/arpakitlib/_arpakit_project_template_v_5/command/start_api_for_prod.py +0 -9
- arpakitlib-1.8.336/arpakitlib/_arpakit_project_template_v_5/command/start_operation_executor_worker.py +0 -15
- arpakitlib-1.8.336/arpakitlib/_arpakit_project_template_v_5/command/start_operation_executor_workers_mode_async_task.py +0 -24
- arpakitlib-1.8.336/arpakitlib/_arpakit_project_template_v_5/command/start_operation_executor_workers_mode_thread.py +0 -23
- arpakitlib-1.8.336/arpakitlib/_arpakit_project_template_v_5/command/start_scheduled_operation_creator_worker.py +0 -12
- arpakitlib-1.8.336/arpakitlib/_arpakit_project_template_v_5/command/start_sqladmin.py +0 -19
- arpakitlib-1.8.336/arpakitlib/_arpakit_project_template_v_5/command/start_sqladmin_for_prod.py +0 -19
- arpakitlib-1.8.336/arpakitlib/_arpakit_project_template_v_5/command/start_sqladmin_with_reload.py +0 -19
- arpakitlib-1.8.336/arpakitlib/_arpakit_project_template_v_5/command/start_tg_bot.py +0 -11
- arpakitlib-1.8.336/arpakitlib/_arpakit_project_template_v_5/command/start_tg_bot_for_prod.py +0 -11
- arpakitlib-1.8.336/arpakitlib/_arpakit_project_template_v_5/example.env +0 -59
- arpakitlib-1.8.336/arpakitlib/_arpakit_project_template_v_5/note/note_1.txt +0 -0
- arpakitlib-1.8.336/arpakitlib/_arpakit_project_template_v_5/note/note_2.txt +0 -0
- arpakitlib-1.8.336/arpakitlib/_arpakit_project_template_v_5/note/note_3.txt +0 -0
- arpakitlib-1.8.336/arpakitlib/_arpakit_project_template_v_5/note/note_4.txt +0 -0
- arpakitlib-1.8.336/arpakitlib/_arpakit_project_template_v_5/note/note_5.txt +0 -0
- arpakitlib-1.8.336/arpakitlib/_arpakit_project_template_v_5/project/__init__.py +0 -0
- arpakitlib-1.8.336/arpakitlib/_arpakit_project_template_v_5/project/additional_model/__init__.py +0 -0
- arpakitlib-1.8.336/arpakitlib/_arpakit_project_template_v_5/project/additional_model/common.py +0 -5
- arpakitlib-1.8.336/arpakitlib/_arpakit_project_template_v_5/project/api/__init__.py +0 -0
- arpakitlib-1.8.336/arpakitlib/_arpakit_project_template_v_5/project/api/api_error_codes.py +0 -36
- arpakitlib-1.8.336/arpakitlib/_arpakit_project_template_v_5/project/api/api_exception.py +0 -75
- arpakitlib-1.8.336/arpakitlib/_arpakit_project_template_v_5/project/api/asgi.py +0 -3
- arpakitlib-1.8.336/arpakitlib/_arpakit_project_template_v_5/project/api/authorize.py +0 -347
- arpakitlib-1.8.336/arpakitlib/_arpakit_project_template_v_5/project/api/before_start_api.py +0 -49
- arpakitlib-1.8.336/arpakitlib/_arpakit_project_template_v_5/project/api/blank/__init__.py +0 -0
- arpakitlib-1.8.336/arpakitlib/_arpakit_project_template_v_5/project/api/blank/admin.py +0 -5
- arpakitlib-1.8.336/arpakitlib/_arpakit_project_template_v_5/project/api/blank/client.py +0 -5
- arpakitlib-1.8.336/arpakitlib/_arpakit_project_template_v_5/project/api/blank/common.py +0 -5
- arpakitlib-1.8.336/arpakitlib/_arpakit_project_template_v_5/project/api/create_api_app.py +0 -83
- arpakitlib-1.8.336/arpakitlib/_arpakit_project_template_v_5/project/api/create_first_data.py +0 -64
- arpakitlib-1.8.336/arpakitlib/_arpakit_project_template_v_5/project/api/event.py +0 -41
- arpakitlib-1.8.336/arpakitlib/_arpakit_project_template_v_5/project/api/exception_handler.py +0 -322
- arpakitlib-1.8.336/arpakitlib/_arpakit_project_template_v_5/project/api/middleware/__init__.py +0 -0
- arpakitlib-1.8.336/arpakitlib/_arpakit_project_template_v_5/project/api/middleware/add_api_middlewares.py +0 -15
- arpakitlib-1.8.336/arpakitlib/_arpakit_project_template_v_5/project/api/middleware/limit_content_length.py +0 -52
- arpakitlib-1.8.336/arpakitlib/_arpakit_project_template_v_5/project/api/openapi_ui.py +0 -30
- arpakitlib-1.8.336/arpakitlib/_arpakit_project_template_v_5/project/api/raise_own_exception_if_exception_in_api_router.py +0 -35
- arpakitlib-1.8.336/arpakitlib/_arpakit_project_template_v_5/project/api/response.py +0 -31
- arpakitlib-1.8.336/arpakitlib/_arpakit_project_template_v_5/project/api/router/__init__.py +0 -0
- arpakitlib-1.8.336/arpakitlib/_arpakit_project_template_v_5/project/api/router/admin/__init__.py +0 -0
- arpakitlib-1.8.336/arpakitlib/_arpakit_project_template_v_5/project/api/router/admin/check_sqlalchemy_db.py +0 -35
- arpakitlib-1.8.336/arpakitlib/_arpakit_project_template_v_5/project/api/router/admin/clear_log_file.py +0 -38
- arpakitlib-1.8.336/arpakitlib/_arpakit_project_template_v_5/project/api/router/admin/create_operation.py +0 -67
- arpakitlib-1.8.336/arpakitlib/_arpakit_project_template_v_5/project/api/router/admin/get_arpakitlib_project_template_info.py +0 -35
- arpakitlib-1.8.336/arpakitlib/_arpakit_project_template_v_5/project/api/router/admin/get_auth_data.py +0 -35
- arpakitlib-1.8.336/arpakitlib/_arpakit_project_template_v_5/project/api/router/admin/get_log_file.py +0 -41
- arpakitlib-1.8.336/arpakitlib/_arpakit_project_template_v_5/project/api/router/admin/get_operation.py +0 -53
- arpakitlib-1.8.336/arpakitlib/_arpakit_project_template_v_5/project/api/router/admin/get_operation_allowed_statuses.py +0 -32
- arpakitlib-1.8.336/arpakitlib/_arpakit_project_template_v_5/project/api/router/admin/get_operation_allowed_types.py +0 -32
- arpakitlib-1.8.336/arpakitlib/_arpakit_project_template_v_5/project/api/router/admin/get_settings.py +0 -35
- arpakitlib-1.8.336/arpakitlib/_arpakit_project_template_v_5/project/api/router/admin/get_sqlalchemy_db_table_name_to_amount.py +0 -34
- arpakitlib-1.8.336/arpakitlib/_arpakit_project_template_v_5/project/api/router/admin/get_story_log.py +0 -53
- arpakitlib-1.8.336/arpakitlib/_arpakit_project_template_v_5/project/api/router/admin/get_user.py +0 -70
- arpakitlib-1.8.336/arpakitlib/_arpakit_project_template_v_5/project/api/router/admin/init_sqlalchemy_db.py +0 -36
- arpakitlib-1.8.336/arpakitlib/_arpakit_project_template_v_5/project/api/router/admin/main_router.py +0 -129
- arpakitlib-1.8.336/arpakitlib/_arpakit_project_template_v_5/project/api/router/admin/make_test_data_1.py +0 -35
- arpakitlib-1.8.336/arpakitlib/_arpakit_project_template_v_5/project/api/router/admin/make_test_data_2.py +0 -35
- arpakitlib-1.8.336/arpakitlib/_arpakit_project_template_v_5/project/api/router/admin/make_test_data_3.py +0 -35
- arpakitlib-1.8.336/arpakitlib/_arpakit_project_template_v_5/project/api/router/admin/make_test_data_4.py +0 -35
- arpakitlib-1.8.336/arpakitlib/_arpakit_project_template_v_5/project/api/router/admin/make_test_data_5.py +0 -35
- arpakitlib-1.8.336/arpakitlib/_arpakit_project_template_v_5/project/api/router/admin/raise_api_exception_1.py +0 -40
- arpakitlib-1.8.336/arpakitlib/_arpakit_project_template_v_5/project/api/router/admin/raise_api_exception_2.py +0 -40
- arpakitlib-1.8.336/arpakitlib/_arpakit_project_template_v_5/project/api/router/admin/raise_api_exception_3.py +0 -40
- arpakitlib-1.8.336/arpakitlib/_arpakit_project_template_v_5/project/api/router/admin/raise_fake_error.py +0 -32
- arpakitlib-1.8.336/arpakitlib/_arpakit_project_template_v_5/project/api/router/admin/reinit_sqlalchemy_db.py +0 -37
- arpakitlib-1.8.336/arpakitlib/_arpakit_project_template_v_5/project/api/router/client/__init__.py +0 -0
- arpakitlib-1.8.336/arpakitlib/_arpakit_project_template_v_5/project/api/router/client/get_current_user.py +0 -45
- arpakitlib-1.8.336/arpakitlib/_arpakit_project_template_v_5/project/api/router/client/get_current_user_token.py +0 -37
- arpakitlib-1.8.336/arpakitlib/_arpakit_project_template_v_5/project/api/router/client/main_router.py +0 -15
- arpakitlib-1.8.336/arpakitlib/_arpakit_project_template_v_5/project/api/router/general/__init__.py +0 -0
- arpakitlib-1.8.336/arpakitlib/_arpakit_project_template_v_5/project/api/router/general/check_authorization.py +0 -47
- arpakitlib-1.8.336/arpakitlib/_arpakit_project_template_v_5/project/api/router/general/get_current_api_key.py +0 -35
- arpakitlib-1.8.336/arpakitlib/_arpakit_project_template_v_5/project/api/router/general/get_errors_info.py +0 -37
- arpakitlib-1.8.336/arpakitlib/_arpakit_project_template_v_5/project/api/router/general/healthcheck.py +0 -30
- arpakitlib-1.8.336/arpakitlib/_arpakit_project_template_v_5/project/api/router/general/main_router.py +0 -31
- arpakitlib-1.8.336/arpakitlib/_arpakit_project_template_v_5/project/api/router/general/now_utc_datetime.py +0 -28
- arpakitlib-1.8.336/arpakitlib/_arpakit_project_template_v_5/project/api/router/main_router.py +0 -23
- arpakitlib-1.8.336/arpakitlib/_arpakit_project_template_v_5/project/api/schema/__init__.py +0 -0
- arpakitlib-1.8.336/arpakitlib/_arpakit_project_template_v_5/project/api/schema/common.py +0 -26
- arpakitlib-1.8.336/arpakitlib/_arpakit_project_template_v_5/project/api/schema/in_/__init__.py +0 -0
- arpakitlib-1.8.336/arpakitlib/_arpakit_project_template_v_5/project/api/schema/in_/admin/__init__.py +0 -0
- arpakitlib-1.8.336/arpakitlib/_arpakit_project_template_v_5/project/api/schema/in_/admin/common.py +0 -0
- arpakitlib-1.8.336/arpakitlib/_arpakit_project_template_v_5/project/api/schema/in_/client/__init__.py +0 -0
- arpakitlib-1.8.336/arpakitlib/_arpakit_project_template_v_5/project/api/schema/in_/client/common.py +0 -0
- arpakitlib-1.8.336/arpakitlib/_arpakit_project_template_v_5/project/api/schema/in_/common/__init__.py +0 -0
- arpakitlib-1.8.336/arpakitlib/_arpakit_project_template_v_5/project/api/schema/in_/general/__init__.py +0 -0
- arpakitlib-1.8.336/arpakitlib/_arpakit_project_template_v_5/project/api/schema/in_/general/common.py +0 -0
- arpakitlib-1.8.336/arpakitlib/_arpakit_project_template_v_5/project/api/schema/out/__init__.py +0 -0
- arpakitlib-1.8.336/arpakitlib/_arpakit_project_template_v_5/project/api/schema/out/admin/__init__.py +0 -0
- arpakitlib-1.8.336/arpakitlib/_arpakit_project_template_v_5/project/api/schema/out/admin/common.py +0 -23
- arpakitlib-1.8.336/arpakitlib/_arpakit_project_template_v_5/project/api/schema/out/admin/operation.py +0 -28
- arpakitlib-1.8.336/arpakitlib/_arpakit_project_template_v_5/project/api/schema/out/admin/story_log.py +0 -19
- arpakitlib-1.8.336/arpakitlib/_arpakit_project_template_v_5/project/api/schema/out/admin/user.py +0 -38
- arpakitlib-1.8.336/arpakitlib/_arpakit_project_template_v_5/project/api/schema/out/client/__init__.py +0 -0
- arpakitlib-1.8.336/arpakitlib/_arpakit_project_template_v_5/project/api/schema/out/client/common.py +0 -21
- arpakitlib-1.8.336/arpakitlib/_arpakit_project_template_v_5/project/api/schema/out/client/complicated_user_1.py +0 -21
- arpakitlib-1.8.336/arpakitlib/_arpakit_project_template_v_5/project/api/schema/out/client/complicated_user_token_1.py +0 -19
- arpakitlib-1.8.336/arpakitlib/_arpakit_project_template_v_5/project/api/schema/out/client/user.py +0 -37
- arpakitlib-1.8.336/arpakitlib/_arpakit_project_template_v_5/project/api/schema/out/client/user_token.py +0 -16
- arpakitlib-1.8.336/arpakitlib/_arpakit_project_template_v_5/project/api/schema/out/common/__init__.py +0 -0
- arpakitlib-1.8.336/arpakitlib/_arpakit_project_template_v_5/project/api/schema/out/common/datetime_.py +0 -38
- arpakitlib-1.8.336/arpakitlib/_arpakit_project_template_v_5/project/api/schema/out/common/error.py +0 -14
- arpakitlib-1.8.336/arpakitlib/_arpakit_project_template_v_5/project/api/schema/out/common/ok.py +0 -5
- arpakitlib-1.8.336/arpakitlib/_arpakit_project_template_v_5/project/api/schema/out/common/raw_data.py +0 -7
- arpakitlib-1.8.336/arpakitlib/_arpakit_project_template_v_5/project/api/schema/out/general/__init__.py +0 -0
- arpakitlib-1.8.336/arpakitlib/_arpakit_project_template_v_5/project/api/schema/out/general/api_key.py +0 -16
- arpakitlib-1.8.336/arpakitlib/_arpakit_project_template_v_5/project/api/schema/out/general/common.py +0 -21
- arpakitlib-1.8.336/arpakitlib/_arpakit_project_template_v_5/project/api/schema/out/general/user.py +0 -37
- arpakitlib-1.8.336/arpakitlib/_arpakit_project_template_v_5/project/api/schema/out/general/user_token.py +0 -16
- arpakitlib-1.8.336/arpakitlib/_arpakit_project_template_v_5/project/api/schema/util/__init__.py +0 -0
- arpakitlib-1.8.336/arpakitlib/_arpakit_project_template_v_5/project/api/schema/util/create_obj_schema_from_dbm.py +0 -10
- arpakitlib-1.8.336/arpakitlib/_arpakit_project_template_v_5/project/api/start_api.py +0 -24
- arpakitlib-1.8.336/arpakitlib/_arpakit_project_template_v_5/project/api/util.py +0 -0
- arpakitlib-1.8.336/arpakitlib/_arpakit_project_template_v_5/project/business_service/__init__.py +0 -0
- arpakitlib-1.8.336/arpakitlib/_arpakit_project_template_v_5/project/business_service/exception.py +0 -45
- arpakitlib-1.8.336/arpakitlib/_arpakit_project_template_v_5/project/business_service/hello_world.py +0 -15
- arpakitlib-1.8.336/arpakitlib/_arpakit_project_template_v_5/project/business_service/remove_operations.py +0 -51
- arpakitlib-1.8.336/arpakitlib/_arpakit_project_template_v_5/project/celery_/__init__.py +0 -0
- arpakitlib-1.8.336/arpakitlib/_arpakit_project_template_v_5/project/core/__init__.py +0 -0
- arpakitlib-1.8.336/arpakitlib/_arpakit_project_template_v_5/project/core/cache_file_storage_in_dir.py +0 -23
- arpakitlib-1.8.336/arpakitlib/_arpakit_project_template_v_5/project/core/const.py +0 -37
- arpakitlib-1.8.336/arpakitlib/_arpakit_project_template_v_5/project/core/dump_file_storage_in_dir.py +0 -23
- arpakitlib-1.8.336/arpakitlib/_arpakit_project_template_v_5/project/core/jinja2_templates.py +0 -14
- arpakitlib-1.8.336/arpakitlib/_arpakit_project_template_v_5/project/core/media_file_storage_in_dir.py +0 -23
- arpakitlib-1.8.336/arpakitlib/_arpakit_project_template_v_5/project/core/settings.py +0 -238
- arpakitlib-1.8.336/arpakitlib/_arpakit_project_template_v_5/project/core/setup_logging.py +0 -55
- arpakitlib-1.8.336/arpakitlib/_arpakit_project_template_v_5/project/core/util.py +0 -10
- arpakitlib-1.8.336/arpakitlib/_arpakit_project_template_v_5/project/emailer/__init__.py +0 -0
- arpakitlib-1.8.336/arpakitlib/_arpakit_project_template_v_5/project/emailer/send_email.py +0 -81
- arpakitlib-1.8.336/arpakitlib/_arpakit_project_template_v_5/project/emailer/send_simple_email.py +0 -41
- arpakitlib-1.8.336/arpakitlib/_arpakit_project_template_v_5/project/json_db/__init__.py +0 -0
- arpakitlib-1.8.336/arpakitlib/_arpakit_project_template_v_5/project/json_db/json_db.py +0 -28
- arpakitlib-1.8.336/arpakitlib/_arpakit_project_template_v_5/project/more/__init__.py +0 -0
- arpakitlib-1.8.336/arpakitlib/_arpakit_project_template_v_5/project/more/api.nginx +0 -43
- arpakitlib-1.8.336/arpakitlib/_arpakit_project_template_v_5/project/more/helloworld +0 -1
- arpakitlib-1.8.336/arpakitlib/_arpakit_project_template_v_5/project/operation_execution/__init__.py +0 -0
- arpakitlib-1.8.336/arpakitlib/_arpakit_project_template_v_5/project/operation_execution/const.py +0 -1
- arpakitlib-1.8.336/arpakitlib/_arpakit_project_template_v_5/project/operation_execution/operation_executor_worker.py +0 -294
- arpakitlib-1.8.336/arpakitlib/_arpakit_project_template_v_5/project/operation_execution/scheduled_operation_creator_worker.py +0 -114
- arpakitlib-1.8.336/arpakitlib/_arpakit_project_template_v_5/project/operation_execution/scheduled_operations.py +0 -49
- arpakitlib-1.8.336/arpakitlib/_arpakit_project_template_v_5/project/operation_execution/util.py +0 -34
- arpakitlib-1.8.336/arpakitlib/_arpakit_project_template_v_5/project/resource/__init__.py +0 -0
- arpakitlib-1.8.336/arpakitlib/_arpakit_project_template_v_5/project/resource/static/1 +0 -1
- arpakitlib-1.8.336/arpakitlib/_arpakit_project_template_v_5/project/resource/static/healthcheck +0 -1
- arpakitlib-1.8.336/arpakitlib/_arpakit_project_template_v_5/project/resource/static/helloworld +0 -1
- arpakitlib-1.8.336/arpakitlib/_arpakit_project_template_v_5/project/resource/static/openapi-favicon.png +0 -0
- arpakitlib-1.8.336/arpakitlib/_arpakit_project_template_v_5/project/resource/static/redoc/redoc.standalone.js +0 -1826
- arpakitlib-1.8.336/arpakitlib/_arpakit_project_template_v_5/project/resource/static/sqladmin-favicon.png +0 -0
- arpakitlib-1.8.336/arpakitlib/_arpakit_project_template_v_5/project/resource/static/swagger-ui/favicon-16x16.png +0 -0
- arpakitlib-1.8.336/arpakitlib/_arpakit_project_template_v_5/project/resource/static/swagger-ui/favicon-32x32.png +0 -0
- arpakitlib-1.8.336/arpakitlib/_arpakit_project_template_v_5/project/resource/static/swagger-ui/index.css +0 -16
- arpakitlib-1.8.336/arpakitlib/_arpakit_project_template_v_5/project/resource/static/swagger-ui/index.html +0 -19
- arpakitlib-1.8.336/arpakitlib/_arpakit_project_template_v_5/project/resource/static/swagger-ui/oauth2-redirect.html +0 -79
- arpakitlib-1.8.336/arpakitlib/_arpakit_project_template_v_5/project/resource/static/swagger-ui/swagger-initializer.js +0 -20
- arpakitlib-1.8.336/arpakitlib/_arpakit_project_template_v_5/project/resource/static/swagger-ui/swagger-ui-bundle.js +0 -2
- arpakitlib-1.8.336/arpakitlib/_arpakit_project_template_v_5/project/resource/static/swagger-ui/swagger-ui-bundle.js.map +0 -1
- arpakitlib-1.8.336/arpakitlib/_arpakit_project_template_v_5/project/resource/static/swagger-ui/swagger-ui-es-bundle-core.js +0 -3
- arpakitlib-1.8.336/arpakitlib/_arpakit_project_template_v_5/project/resource/static/swagger-ui/swagger-ui-es-bundle-core.js.map +0 -1
- arpakitlib-1.8.336/arpakitlib/_arpakit_project_template_v_5/project/resource/static/swagger-ui/swagger-ui-es-bundle.js +0 -2
- arpakitlib-1.8.336/arpakitlib/_arpakit_project_template_v_5/project/resource/static/swagger-ui/swagger-ui-es-bundle.js.map +0 -1
- arpakitlib-1.8.336/arpakitlib/_arpakit_project_template_v_5/project/resource/static/swagger-ui/swagger-ui-standalone-preset.js +0 -2
- arpakitlib-1.8.336/arpakitlib/_arpakit_project_template_v_5/project/resource/static/swagger-ui/swagger-ui-standalone-preset.js.map +0 -1
- arpakitlib-1.8.336/arpakitlib/_arpakit_project_template_v_5/project/resource/static/swagger-ui/swagger-ui.css +0 -3
- arpakitlib-1.8.336/arpakitlib/_arpakit_project_template_v_5/project/resource/static/swagger-ui/swagger-ui.css.map +0 -1
- arpakitlib-1.8.336/arpakitlib/_arpakit_project_template_v_5/project/resource/static/swagger-ui/swagger-ui.js +0 -2
- arpakitlib-1.8.336/arpakitlib/_arpakit_project_template_v_5/project/resource/static/swagger-ui/swagger-ui.js.map +0 -1
- arpakitlib-1.8.336/arpakitlib/_arpakit_project_template_v_5/project/resource/templates/healthcheck.txt +0 -1
- arpakitlib-1.8.336/arpakitlib/_arpakit_project_template_v_5/project/resource/templates/simple_email.html +0 -47
- arpakitlib-1.8.336/arpakitlib/_arpakit_project_template_v_5/project/sandbox/__init__.py +0 -0
- arpakitlib-1.8.336/arpakitlib/_arpakit_project_template_v_5/project/sandbox/sandbox_1.py +0 -14
- arpakitlib-1.8.336/arpakitlib/_arpakit_project_template_v_5/project/sandbox/sandbox_2.py +0 -16
- arpakitlib-1.8.336/arpakitlib/_arpakit_project_template_v_5/project/sandbox/sandbox_3.py +0 -18
- arpakitlib-1.8.336/arpakitlib/_arpakit_project_template_v_5/project/sandbox/sandbox_4.py +0 -21
- arpakitlib-1.8.336/arpakitlib/_arpakit_project_template_v_5/project/sandbox/sandbox_5.py +0 -14
- arpakitlib-1.8.336/arpakitlib/_arpakit_project_template_v_5/project/sandbox/sandbox_6.py +0 -14
- arpakitlib-1.8.336/arpakitlib/_arpakit_project_template_v_5/project/sandbox/sandbox_7.py +0 -14
- arpakitlib-1.8.336/arpakitlib/_arpakit_project_template_v_5/project/site/__init__.py +0 -0
- arpakitlib-1.8.336/arpakitlib/_arpakit_project_template_v_5/project/site/asgi.py +0 -3
- arpakitlib-1.8.336/arpakitlib/_arpakit_project_template_v_5/project/site/consts.py +0 -0
- arpakitlib-1.8.336/arpakitlib/_arpakit_project_template_v_5/project/site/create_site_app.py +0 -5
- arpakitlib-1.8.336/arpakitlib/_arpakit_project_template_v_5/project/site/event.py +0 -19
- arpakitlib-1.8.336/arpakitlib/_arpakit_project_template_v_5/project/site/exception_handler.py +0 -0
- arpakitlib-1.8.336/arpakitlib/_arpakit_project_template_v_5/project/site/router/__init__.py +0 -0
- arpakitlib-1.8.336/arpakitlib/_arpakit_project_template_v_5/project/site/router/main_router.py +0 -3
- arpakitlib-1.8.336/arpakitlib/_arpakit_project_template_v_5/project/sqladmin_/__init__.py +0 -0
- arpakitlib-1.8.336/arpakitlib/_arpakit_project_template_v_5/project/sqladmin_/add_admin_in_app.py +0 -30
- arpakitlib-1.8.336/arpakitlib/_arpakit_project_template_v_5/project/sqladmin_/admin_authorize.py +0 -120
- arpakitlib-1.8.336/arpakitlib/_arpakit_project_template_v_5/project/sqladmin_/asgi.py +0 -4
- arpakitlib-1.8.336/arpakitlib/_arpakit_project_template_v_5/project/sqladmin_/create_sqladmin_app.py +0 -49
- arpakitlib-1.8.336/arpakitlib/_arpakit_project_template_v_5/project/sqladmin_/event.py +0 -40
- arpakitlib-1.8.336/arpakitlib/_arpakit_project_template_v_5/project/sqladmin_/model_view/__init__.py +0 -11
- arpakitlib-1.8.336/arpakitlib/_arpakit_project_template_v_5/project/sqladmin_/model_view/api_key.py +0 -17
- arpakitlib-1.8.336/arpakitlib/_arpakit_project_template_v_5/project/sqladmin_/model_view/common.py +0 -127
- arpakitlib-1.8.336/arpakitlib/_arpakit_project_template_v_5/project/sqladmin_/model_view/operation.py +0 -46
- arpakitlib-1.8.336/arpakitlib/_arpakit_project_template_v_5/project/sqladmin_/model_view/story_log.py +0 -29
- arpakitlib-1.8.336/arpakitlib/_arpakit_project_template_v_5/project/sqladmin_/model_view/user.py +0 -91
- arpakitlib-1.8.336/arpakitlib/_arpakit_project_template_v_5/project/sqladmin_/model_view/user_token.py +0 -24
- arpakitlib-1.8.336/arpakitlib/_arpakit_project_template_v_5/project/sqladmin_/model_view/verification_code.py +0 -36
- arpakitlib-1.8.336/arpakitlib/_arpakit_project_template_v_5/project/sqladmin_/start_sqladmin.py +0 -19
- arpakitlib-1.8.336/arpakitlib/_arpakit_project_template_v_5/project/sqladmin_/util/__init__.py +0 -0
- arpakitlib-1.8.336/arpakitlib/_arpakit_project_template_v_5/project/sqladmin_/util/etc.py +0 -40
- arpakitlib-1.8.336/arpakitlib/_arpakit_project_template_v_5/project/sqlalchemy_db_/__init__.py +0 -0
- arpakitlib-1.8.336/arpakitlib/_arpakit_project_template_v_5/project/sqlalchemy_db_/const.py +0 -1
- arpakitlib-1.8.336/arpakitlib/_arpakit_project_template_v_5/project/sqlalchemy_db_/sqlalchemy_db.py +0 -22
- arpakitlib-1.8.336/arpakitlib/_arpakit_project_template_v_5/project/sqlalchemy_db_/sqlalchemy_model/__init__.py +0 -12
- arpakitlib-1.8.336/arpakitlib/_arpakit_project_template_v_5/project/sqlalchemy_db_/sqlalchemy_model/api_key.py +0 -69
- arpakitlib-1.8.336/arpakitlib/_arpakit_project_template_v_5/project/sqlalchemy_db_/sqlalchemy_model/common.py +0 -210
- arpakitlib-1.8.336/arpakitlib/_arpakit_project_template_v_5/project/sqlalchemy_db_/sqlalchemy_model/operation.py +0 -235
- arpakitlib-1.8.336/arpakitlib/_arpakit_project_template_v_5/project/sqlalchemy_db_/sqlalchemy_model/story_log.py +0 -88
- arpakitlib-1.8.336/arpakitlib/_arpakit_project_template_v_5/project/sqlalchemy_db_/sqlalchemy_model/user.py +0 -266
- arpakitlib-1.8.336/arpakitlib/_arpakit_project_template_v_5/project/sqlalchemy_db_/sqlalchemy_model/user_token.py +0 -76
- arpakitlib-1.8.336/arpakitlib/_arpakit_project_template_v_5/project/sqlalchemy_db_/sqlalchemy_model/verification_code.py +0 -106
- arpakitlib-1.8.336/arpakitlib/_arpakit_project_template_v_5/project/sqlalchemy_db_/util/__init__.py +0 -0
- arpakitlib-1.8.336/arpakitlib/_arpakit_project_template_v_5/project/sqlalchemy_db_/util/execute_func_with_story_log.py +0 -167
- arpakitlib-1.8.336/arpakitlib/_arpakit_project_template_v_5/project/test_data/__init__.py +0 -0
- arpakitlib-1.8.336/arpakitlib/_arpakit_project_template_v_5/project/test_data/make_test_api_keys.py +0 -37
- arpakitlib-1.8.336/arpakitlib/_arpakit_project_template_v_5/project/test_data/make_test_data_1.py +0 -78
- arpakitlib-1.8.336/arpakitlib/_arpakit_project_template_v_5/project/test_data/make_test_data_2.py +0 -24
- arpakitlib-1.8.336/arpakitlib/_arpakit_project_template_v_5/project/test_data/make_test_data_3.py +0 -24
- arpakitlib-1.8.336/arpakitlib/_arpakit_project_template_v_5/project/test_data/make_test_data_4.py +0 -24
- arpakitlib-1.8.336/arpakitlib/_arpakit_project_template_v_5/project/test_data/make_test_data_5.py +0 -24
- arpakitlib-1.8.336/arpakitlib/_arpakit_project_template_v_5/project/tg_bot/__init__.py +0 -0
- arpakitlib-1.8.336/arpakitlib/_arpakit_project_template_v_5/project/tg_bot/blank/__init__.py +0 -0
- arpakitlib-1.8.336/arpakitlib/_arpakit_project_template_v_5/project/tg_bot/blank/admin.py +0 -35
- arpakitlib-1.8.336/arpakitlib/_arpakit_project_template_v_5/project/tg_bot/blank/client.py +0 -76
- arpakitlib-1.8.336/arpakitlib/_arpakit_project_template_v_5/project/tg_bot/blank/common.py +0 -5
- arpakitlib-1.8.336/arpakitlib/_arpakit_project_template_v_5/project/tg_bot/callback_data_/__init__.py +0 -0
- arpakitlib-1.8.336/arpakitlib/_arpakit_project_template_v_5/project/tg_bot/callback_data_/admin.py +0 -5
- arpakitlib-1.8.336/arpakitlib/_arpakit_project_template_v_5/project/tg_bot/callback_data_/client.py +0 -5
- arpakitlib-1.8.336/arpakitlib/_arpakit_project_template_v_5/project/tg_bot/callback_data_/common.py +0 -37
- arpakitlib-1.8.336/arpakitlib/_arpakit_project_template_v_5/project/tg_bot/const.py +0 -42
- arpakitlib-1.8.336/arpakitlib/_arpakit_project_template_v_5/project/tg_bot/event.py +0 -118
- arpakitlib-1.8.336/arpakitlib/_arpakit_project_template_v_5/project/tg_bot/filter_/__init__.py +0 -0
- arpakitlib-1.8.336/arpakitlib/_arpakit_project_template_v_5/project/tg_bot/filter_/is_private_chat.py +0 -12
- arpakitlib-1.8.336/arpakitlib/_arpakit_project_template_v_5/project/tg_bot/filter_/message_text.py +0 -48
- arpakitlib-1.8.336/arpakitlib/_arpakit_project_template_v_5/project/tg_bot/filter_/not_prod_mode_filter.py +0 -8
- arpakitlib-1.8.336/arpakitlib/_arpakit_project_template_v_5/project/tg_bot/filter_/prod_mode_filter.py +0 -8
- arpakitlib-1.8.336/arpakitlib/_arpakit_project_template_v_5/project/tg_bot/filter_/user_roles_has_admin.py +0 -18
- arpakitlib-1.8.336/arpakitlib/_arpakit_project_template_v_5/project/tg_bot/filter_/user_roles_has_client.py +0 -18
- arpakitlib-1.8.336/arpakitlib/_arpakit_project_template_v_5/project/tg_bot/kb/__init__.py +0 -0
- arpakitlib-1.8.336/arpakitlib/_arpakit_project_template_v_5/project/tg_bot/kb/inline_/__init__.py +0 -0
- arpakitlib-1.8.336/arpakitlib/_arpakit_project_template_v_5/project/tg_bot/kb/inline_/admin/__init__.py +0 -0
- arpakitlib-1.8.336/arpakitlib/_arpakit_project_template_v_5/project/tg_bot/kb/inline_/admin/common.py +0 -0
- arpakitlib-1.8.336/arpakitlib/_arpakit_project_template_v_5/project/tg_bot/kb/inline_/admin/hello_world.py +0 -16
- arpakitlib-1.8.336/arpakitlib/_arpakit_project_template_v_5/project/tg_bot/kb/inline_/client/__init__.py +0 -0
- arpakitlib-1.8.336/arpakitlib/_arpakit_project_template_v_5/project/tg_bot/kb/inline_/client/common.py +0 -0
- arpakitlib-1.8.336/arpakitlib/_arpakit_project_template_v_5/project/tg_bot/kb/inline_/client/support.py +0 -15
- arpakitlib-1.8.336/arpakitlib/_arpakit_project_template_v_5/project/tg_bot/kb/inline_/common.py +0 -0
- arpakitlib-1.8.336/arpakitlib/_arpakit_project_template_v_5/project/tg_bot/kb/static_/__init__.py +0 -0
- arpakitlib-1.8.336/arpakitlib/_arpakit_project_template_v_5/project/tg_bot/kb/static_/admin/__init__.py +0 -0
- arpakitlib-1.8.336/arpakitlib/_arpakit_project_template_v_5/project/tg_bot/kb/static_/admin/common.py +0 -0
- arpakitlib-1.8.336/arpakitlib/_arpakit_project_template_v_5/project/tg_bot/kb/static_/admin/hello_world.py +0 -14
- arpakitlib-1.8.336/arpakitlib/_arpakit_project_template_v_5/project/tg_bot/kb/static_/client/__init__.py +0 -0
- arpakitlib-1.8.336/arpakitlib/_arpakit_project_template_v_5/project/tg_bot/kb/static_/client/common.py +0 -0
- arpakitlib-1.8.336/arpakitlib/_arpakit_project_template_v_5/project/tg_bot/kb/static_/common.py +0 -0
- arpakitlib-1.8.336/arpakitlib/_arpakit_project_template_v_5/project/tg_bot/middleware/__init__.py +0 -0
- arpakitlib-1.8.336/arpakitlib/_arpakit_project_template_v_5/project/tg_bot/middleware/common.py +0 -13
- arpakitlib-1.8.336/arpakitlib/_arpakit_project_template_v_5/project/tg_bot/middleware/init_user.py +0 -87
- arpakitlib-1.8.336/arpakitlib/_arpakit_project_template_v_5/project/tg_bot/middleware/uil.py +0 -11
- arpakitlib-1.8.336/arpakitlib/_arpakit_project_template_v_5/project/tg_bot/router/__init__.py +0 -0
- arpakitlib-1.8.336/arpakitlib/_arpakit_project_template_v_5/project/tg_bot/router/admin/__init__.py +0 -0
- arpakitlib-1.8.336/arpakitlib/_arpakit_project_template_v_5/project/tg_bot/router/admin/arpakitlib_project_template_info.py +0 -30
- arpakitlib-1.8.336/arpakitlib/_arpakit_project_template_v_5/project/tg_bot/router/admin/clear_log_file.py +0 -39
- arpakitlib-1.8.336/arpakitlib/_arpakit_project_template_v_5/project/tg_bot/router/admin/current_state.py +0 -31
- arpakitlib-1.8.336/arpakitlib/_arpakit_project_template_v_5/project/tg_bot/router/admin/drop_sqlalchemy_db.py +0 -34
- arpakitlib-1.8.336/arpakitlib/_arpakit_project_template_v_5/project/tg_bot/router/admin/hello_world.py +0 -73
- arpakitlib-1.8.336/arpakitlib/_arpakit_project_template_v_5/project/tg_bot/router/admin/init_sqlalchemy_db.py +0 -31
- arpakitlib-1.8.336/arpakitlib/_arpakit_project_template_v_5/project/tg_bot/router/admin/kb_with_not_modified.py +0 -66
- arpakitlib-1.8.336/arpakitlib/_arpakit_project_template_v_5/project/tg_bot/router/admin/kb_with_old_cd.py +0 -41
- arpakitlib-1.8.336/arpakitlib/_arpakit_project_template_v_5/project/tg_bot/router/admin/kb_with_raise_error.py +0 -52
- arpakitlib-1.8.336/arpakitlib/_arpakit_project_template_v_5/project/tg_bot/router/admin/kb_with_remove_message.py +0 -38
- arpakitlib-1.8.336/arpakitlib/_arpakit_project_template_v_5/project/tg_bot/router/admin/log_file.py +0 -42
- arpakitlib-1.8.336/arpakitlib/_arpakit_project_template_v_5/project/tg_bot/router/admin/me.py +0 -29
- arpakitlib-1.8.336/arpakitlib/_arpakit_project_template_v_5/project/tg_bot/router/admin/raise_fake_error.py +0 -26
- arpakitlib-1.8.336/arpakitlib/_arpakit_project_template_v_5/project/tg_bot/router/admin/reinit_sqlalchemy_db.py +0 -34
- arpakitlib-1.8.336/arpakitlib/_arpakit_project_template_v_5/project/tg_bot/router/admin/set_tg_bot_commands.py +0 -31
- arpakitlib-1.8.336/arpakitlib/_arpakit_project_template_v_5/project/tg_bot/router/client/__init__.py +0 -0
- arpakitlib-1.8.336/arpakitlib/_arpakit_project_template_v_5/project/tg_bot/router/client/about.py +0 -33
- arpakitlib-1.8.336/arpakitlib/_arpakit_project_template_v_5/project/tg_bot/router/client/author.py +0 -34
- arpakitlib-1.8.336/arpakitlib/_arpakit_project_template_v_5/project/tg_bot/router/client/cancel.py +0 -33
- arpakitlib-1.8.336/arpakitlib/_arpakit_project_template_v_5/project/tg_bot/router/client/error_handler.py +0 -95
- arpakitlib-1.8.336/arpakitlib/_arpakit_project_template_v_5/project/tg_bot/router/client/healthcheck.py +0 -21
- arpakitlib-1.8.336/arpakitlib/_arpakit_project_template_v_5/project/tg_bot/router/client/raw_callback_query.py +0 -32
- arpakitlib-1.8.336/arpakitlib/_arpakit_project_template_v_5/project/tg_bot/router/client/raw_inline_query.py +0 -16
- arpakitlib-1.8.336/arpakitlib/_arpakit_project_template_v_5/project/tg_bot/router/client/raw_message.py +0 -18
- arpakitlib-1.8.336/arpakitlib/_arpakit_project_template_v_5/project/tg_bot/router/client/remove_message.py +0 -30
- arpakitlib-1.8.336/arpakitlib/_arpakit_project_template_v_5/project/tg_bot/router/client/start.py +0 -37
- arpakitlib-1.8.336/arpakitlib/_arpakit_project_template_v_5/project/tg_bot/router/client/support.py +0 -37
- arpakitlib-1.8.336/arpakitlib/_arpakit_project_template_v_5/project/tg_bot/router/client/voice_.py +0 -22
- arpakitlib-1.8.336/arpakitlib/_arpakit_project_template_v_5/project/tg_bot/router/main_router.py +0 -41
- arpakitlib-1.8.336/arpakitlib/_arpakit_project_template_v_5/project/tg_bot/start_tg_bot.py +0 -39
- arpakitlib-1.8.336/arpakitlib/_arpakit_project_template_v_5/project/tg_bot/state/__init__.py +0 -0
- arpakitlib-1.8.336/arpakitlib/_arpakit_project_template_v_5/project/tg_bot/state/admin.py +0 -0
- arpakitlib-1.8.336/arpakitlib/_arpakit_project_template_v_5/project/tg_bot/state/client.py +0 -5
- arpakitlib-1.8.336/arpakitlib/_arpakit_project_template_v_5/project/tg_bot/state/common.py +0 -0
- arpakitlib-1.8.336/arpakitlib/_arpakit_project_template_v_5/project/tg_bot/state/util.py +0 -0
- arpakitlib-1.8.336/arpakitlib/_arpakit_project_template_v_5/project/tg_bot/tg_bot.py +0 -31
- arpakitlib-1.8.336/arpakitlib/_arpakit_project_template_v_5/project/tg_bot/tg_bot_dispatcher.py +0 -20
- arpakitlib-1.8.336/arpakitlib/_arpakit_project_template_v_5/project/tg_bot/util/__init__.py +0 -0
- arpakitlib-1.8.336/arpakitlib/_arpakit_project_template_v_5/project/tg_bot/util/etc.py +0 -0
- arpakitlib-1.8.336/arpakitlib/_arpakit_project_template_v_5/project/tg_bot/util/notify_admins.py +0 -65
- arpakitlib-1.8.336/arpakitlib/_arpakit_project_template_v_5/project/tg_bot/util/set_tg_bot_commands.py +0 -105
- arpakitlib-1.8.336/arpakitlib/_arpakit_project_template_v_5/project/tg_bot_notifier/__init__.py +0 -0
- arpakitlib-1.8.336/arpakitlib/_arpakit_project_template_v_5/project/tg_bot_notifier/blank.py +0 -20
- arpakitlib-1.8.336/arpakitlib/_arpakit_project_template_v_5/project/tg_bot_notifier/tg_bot_notifier.py +0 -48
- arpakitlib-1.8.336/arpakitlib/_arpakit_project_template_v_5/project/util/__init__.py +0 -0
- arpakitlib-1.8.336/arpakitlib/_arpakit_project_template_v_5/project/util/arpakitlib_project_template_util.py +0 -17
- arpakitlib-1.8.336/arpakitlib/_arpakit_project_template_v_5/project/util/etc.py +0 -0
- arpakitlib-1.8.336/arpakitlib/_arpakit_project_template_v_5/project/util/send_email_.py +0 -150
- arpakitlib-1.8.336/arpakitlib/_arpakit_project_template_v_5/todo.txt +0 -1
- arpakitlib-1.8.336/arpakitlib/ar_arpakitlib_cli_util.py +0 -74
- arpakitlib-1.8.336/arpakitlib/ar_dict_util.py +0 -26
- arpakitlib-1.8.336/arpakitlib/ar_exception_util.py +0 -18
- {arpakitlib-1.8.336 → arpakitlib-1.9.6}/arpakitlib/__init__.py +0 -0
- {arpakitlib-1.8.336 → arpakitlib-1.9.6}/arpakitlib/ar_arpakit_project_template_util.py +0 -0
- {arpakitlib-1.8.336 → arpakitlib-1.9.6}/arpakitlib/ar_blank_util.py +0 -0
- {arpakitlib-1.8.336 → arpakitlib-1.9.6}/arpakitlib/ar_cache_file_util.py +0 -0
- {arpakitlib-1.8.336 → arpakitlib-1.9.6}/arpakitlib/ar_class_util.py +0 -0
- {arpakitlib-1.8.336 → arpakitlib-1.9.6}/arpakitlib/ar_datetime_util.py +0 -0
- {arpakitlib-1.8.336 → arpakitlib-1.9.6}/arpakitlib/ar_encrypt_decrypt_util.py +0 -0
- {arpakitlib-1.8.336 → arpakitlib-1.9.6}/arpakitlib/ar_enumeration_util.py +0 -0
- {arpakitlib-1.8.336 → arpakitlib-1.9.6}/arpakitlib/ar_file_storage_in_dir_util.py +0 -0
- {arpakitlib-1.8.336 → arpakitlib-1.9.6}/arpakitlib/ar_file_util.py +0 -0
- {arpakitlib-1.8.336 → arpakitlib-1.9.6}/arpakitlib/ar_func_util.py +0 -0
- {arpakitlib-1.8.336 → arpakitlib-1.9.6}/arpakitlib/ar_hash_util.py +0 -0
- {arpakitlib-1.8.336 → arpakitlib-1.9.6}/arpakitlib/ar_http_request_util.py +0 -0
- {arpakitlib-1.8.336 → arpakitlib-1.9.6}/arpakitlib/ar_include_fastapi_routers_from_dir_util.py +0 -0
- {arpakitlib-1.8.336 → arpakitlib-1.9.6}/arpakitlib/ar_ip_util.py +0 -0
- {arpakitlib-1.8.336 → arpakitlib-1.9.6}/arpakitlib/ar_json_db_util.py +0 -0
- {arpakitlib-1.8.336 → arpakitlib-1.9.6}/arpakitlib/ar_json_util.py +0 -0
- {arpakitlib-1.8.336 → arpakitlib-1.9.6}/arpakitlib/ar_jwt_util.py +0 -0
- {arpakitlib-1.8.336 → arpakitlib-1.9.6}/arpakitlib/ar_list_of_dicts_to_xlsx_util.py +0 -0
- {arpakitlib-1.8.336 → arpakitlib-1.9.6}/arpakitlib/ar_log_async_func_if_error_util.py +0 -0
- {arpakitlib-1.8.336 → arpakitlib-1.9.6}/arpakitlib/ar_logging_util.py +0 -0
- {arpakitlib-1.8.336 → arpakitlib-1.9.6}/arpakitlib/ar_mongodb_util.py +0 -0
- {arpakitlib-1.8.336 → arpakitlib-1.9.6}/arpakitlib/ar_openai_api_client_util.py +0 -0
- {arpakitlib-1.8.336 → arpakitlib-1.9.6}/arpakitlib/ar_parse_command_util.py +0 -0
- {arpakitlib-1.8.336 → arpakitlib-1.9.6}/arpakitlib/ar_postgresql_util.py +0 -0
- {arpakitlib-1.8.336 → arpakitlib-1.9.6}/arpakitlib/ar_raise_own_exception_if_exception_util.py +0 -0
- {arpakitlib-1.8.336 → arpakitlib-1.9.6}/arpakitlib/ar_really_validate_url_util.py +0 -0
- {arpakitlib-1.8.336 → arpakitlib-1.9.6}/arpakitlib/ar_run_cmd_util.py +0 -0
- {arpakitlib-1.8.336 → arpakitlib-1.9.6}/arpakitlib/ar_settings_util.py +0 -0
- {arpakitlib-1.8.336 → arpakitlib-1.9.6}/arpakitlib/ar_sleep_util.py +0 -0
- {arpakitlib-1.8.336 → arpakitlib-1.9.6}/arpakitlib/ar_sqladmin_util.py +0 -0
- {arpakitlib-1.8.336 → arpakitlib-1.9.6}/arpakitlib/ar_sqlalchemy_drop_check_constraints_util.py +0 -0
- {arpakitlib-1.8.336 → arpakitlib-1.9.6}/arpakitlib/ar_sqlalchemy_ensure_check_constraints_util.py +0 -0
- {arpakitlib-1.8.336 → arpakitlib-1.9.6}/arpakitlib/ar_str_util.py +0 -0
- {arpakitlib-1.8.336 → arpakitlib-1.9.6}/arpakitlib/ar_uppercase_env_keys_util.py +0 -0
|
@@ -186,7 +186,7 @@
|
|
|
186
186
|
same "printed page" as the copyright notice for easier
|
|
187
187
|
identification within third-party archives.
|
|
188
188
|
|
|
189
|
-
Copyright 2024-present
|
|
189
|
+
Copyright 2024-present ARPAKIT-Company
|
|
190
190
|
|
|
191
191
|
Licensed under the Apache License, Version 2.0 (the "License");
|
|
192
192
|
you may not use this file except in compliance with the License.
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: arpakitlib
|
|
3
|
-
Version: 1.
|
|
3
|
+
Version: 1.9.6
|
|
4
4
|
Summary: arpakitlib
|
|
5
5
|
License-Expression: Apache-2.0
|
|
6
6
|
License-File: LICENSE
|
|
@@ -72,13 +72,15 @@ Description-Content-Type: text/markdown
|
|
|
72
72
|
|
|
73
73
|
# arpakitlib
|
|
74
74
|
|
|
75
|
-
## Текущая версия шаблона arpakit_project_template_v_5 находится в разработке, она неверная. В скором времени будет stable version.
|
|
76
|
-
|
|
77
75
|
## 🚀 Simplify Your Development Workflow
|
|
78
76
|
|
|
79
|
-
A collection of lightweight and convenient development tools by
|
|
77
|
+
A collection of lightweight and convenient development tools by arpakit, designed to simplify and accelerate your
|
|
80
78
|
workflow
|
|
81
79
|
|
|
80
|
+
## Important
|
|
81
|
+
|
|
82
|
+
The most up-to-date version is on GitHub or GitLab.
|
|
83
|
+
|
|
82
84
|
---
|
|
83
85
|
|
|
84
86
|
### Supported Python version
|
|
@@ -90,31 +92,11 @@ workflow
|
|
|
90
92
|
### Installation with Poetry
|
|
91
93
|
|
|
92
94
|
```
|
|
93
|
-
poetry add arpakitlib
|
|
94
|
-
```
|
|
95
|
-
|
|
96
|
-
### Installation with pip
|
|
97
|
-
|
|
98
|
-
```
|
|
99
|
-
pip install arpakitlib
|
|
100
|
-
```
|
|
101
|
-
|
|
102
|
-
### arpakitlib command
|
|
103
|
-
|
|
104
|
-
```
|
|
105
|
-
poetry run arpakitlib -c help
|
|
106
|
-
poetry run arpakitlib -c init_arpakit_project_template -version 5 -project_dirpath ./ -overwrite_if_exists true
|
|
95
|
+
poetry add git+https://github.com/ARPAKIT-Company/arpakitlib.git@master
|
|
107
96
|
```
|
|
108
97
|
|
|
109
98
|
---
|
|
110
99
|
|
|
111
|
-
### Links
|
|
112
|
-
|
|
113
|
-
- https://pypi.org/project/arpakitlib/
|
|
114
|
-
- https://test.pypi.org/project/arpakitlib/
|
|
115
|
-
- https://github.com/ARPAKIT-Company/arpakitlib
|
|
116
|
-
|
|
117
|
-
---
|
|
118
100
|
|
|
119
101
|
## ❤️ Made by ARPAKIT Company ❤️
|
|
120
102
|
|
|
@@ -0,0 +1,31 @@
|
|
|
1
|
+
# arpakitlib
|
|
2
|
+
|
|
3
|
+
## 🚀 Simplify Your Development Workflow
|
|
4
|
+
|
|
5
|
+
A collection of lightweight and convenient development tools by arpakit, designed to simplify and accelerate your
|
|
6
|
+
workflow
|
|
7
|
+
|
|
8
|
+
## Important
|
|
9
|
+
|
|
10
|
+
The most up-to-date version is on GitHub or GitLab.
|
|
11
|
+
|
|
12
|
+
---
|
|
13
|
+
|
|
14
|
+
### Supported Python version
|
|
15
|
+
|
|
16
|
+
- Python 3.12.4
|
|
17
|
+
|
|
18
|
+
---
|
|
19
|
+
|
|
20
|
+
### Installation with Poetry
|
|
21
|
+
|
|
22
|
+
```
|
|
23
|
+
poetry add git+https://github.com/ARPAKIT-Company/arpakitlib.git@master
|
|
24
|
+
```
|
|
25
|
+
|
|
26
|
+
---
|
|
27
|
+
|
|
28
|
+
|
|
29
|
+
## ❤️ Made by ARPAKIT Company ❤️
|
|
30
|
+
|
|
31
|
+
|
|
@@ -0,0 +1,192 @@
|
|
|
1
|
+
# arpakit
|
|
2
|
+
import ast
|
|
3
|
+
import asyncio
|
|
4
|
+
import json
|
|
5
|
+
import logging
|
|
6
|
+
from typing import Any, get_origin, get_args, Awaitable, Callable
|
|
7
|
+
|
|
8
|
+
from aiogram import types
|
|
9
|
+
from aiogram.enums import ParseMode
|
|
10
|
+
from aiogram.filters import CommandObject
|
|
11
|
+
from pydantic import BaseModel, Field, ConfigDict
|
|
12
|
+
from pydantic_core import PydanticUndefined
|
|
13
|
+
|
|
14
|
+
from arpakitlib.ar_parse_command_util import parse_command
|
|
15
|
+
|
|
16
|
+
_ARPAKIT_LIB_MODULE_VERSION = "3.0"
|
|
17
|
+
|
|
18
|
+
_logger = logging.getLogger(__name__)
|
|
19
|
+
|
|
20
|
+
|
|
21
|
+
class BaseTgCommandModel(BaseModel):
|
|
22
|
+
model_config = ConfigDict(extra="ignore", arbitrary_types_allowed=True, from_attributes=True)
|
|
23
|
+
|
|
24
|
+
help: bool | None = Field(default=False)
|
|
25
|
+
|
|
26
|
+
|
|
27
|
+
class ExampleTgCommandModel(BaseTgCommandModel):
|
|
28
|
+
"""Это описание команды hello-world"""
|
|
29
|
+
|
|
30
|
+
hello: str | None = Field(description="Example Desc", default="Hello world")
|
|
31
|
+
|
|
32
|
+
|
|
33
|
+
def _generate_help_text(
|
|
34
|
+
*,
|
|
35
|
+
command_name: str,
|
|
36
|
+
model_class: type[BaseTgCommandModel],
|
|
37
|
+
desc: str | None = None
|
|
38
|
+
) -> str:
|
|
39
|
+
"""Генерирует help-текст по описанию модели."""
|
|
40
|
+
lines = [f"<b>Command</b> /{command_name}"]
|
|
41
|
+
|
|
42
|
+
if desc:
|
|
43
|
+
desc = desc.strip()
|
|
44
|
+
if desc:
|
|
45
|
+
lines.append(f"\n{desc}")
|
|
46
|
+
|
|
47
|
+
lines.append(f"\n\n<b>Fields ({len(model_class.model_fields)}):</b>")
|
|
48
|
+
|
|
49
|
+
for name, field in model_class.model_fields.items():
|
|
50
|
+
|
|
51
|
+
default_value = (
|
|
52
|
+
field.default
|
|
53
|
+
if field.default is not PydanticUndefined
|
|
54
|
+
else "<i>required</i>"
|
|
55
|
+
)
|
|
56
|
+
|
|
57
|
+
origin = get_origin(field.annotation)
|
|
58
|
+
args = get_args(field.annotation)
|
|
59
|
+
|
|
60
|
+
if origin is list and args:
|
|
61
|
+
type_name = f"list[{args[0].__name__}]"
|
|
62
|
+
elif hasattr(field.annotation, "__name__"):
|
|
63
|
+
type_name = field.annotation.__name__
|
|
64
|
+
else:
|
|
65
|
+
type_name = str(field.annotation)
|
|
66
|
+
|
|
67
|
+
description = f" — {field.description}" if field.description else ""
|
|
68
|
+
|
|
69
|
+
lines.append(f"\n• <code>-{name}</code>: <i>{type_name}</i>{description} (default: {default_value})")
|
|
70
|
+
|
|
71
|
+
lines.append(f"\n\n<b>Usage for help:</b>\n<code>/{command_name} -help</code>")
|
|
72
|
+
|
|
73
|
+
return "\n".join(lines)
|
|
74
|
+
|
|
75
|
+
|
|
76
|
+
def _parse_tg_param(value: Any) -> Any:
|
|
77
|
+
"""Интеллектуальное преобразование строки из Telegram-команды в Python-значение."""
|
|
78
|
+
if isinstance(value, (bool, int, float)) or value is None:
|
|
79
|
+
return value
|
|
80
|
+
|
|
81
|
+
v = value.strip()
|
|
82
|
+
if v.lower() in {"true", "false"}:
|
|
83
|
+
return v.lower() == "true"
|
|
84
|
+
|
|
85
|
+
try:
|
|
86
|
+
result = ast.literal_eval(v)
|
|
87
|
+
# Если получился список — проверим, не смесь ли типов
|
|
88
|
+
if isinstance(result, list):
|
|
89
|
+
# Если все элементы одного типа — оставляем
|
|
90
|
+
if len(result) > 0 and len({type(x) for x in result}) > 1:
|
|
91
|
+
# Приводим всё к строкам для единообразия
|
|
92
|
+
result = [str(x) for x in result]
|
|
93
|
+
return result
|
|
94
|
+
except Exception:
|
|
95
|
+
# не получилось распарсить — возвращаем как строку
|
|
96
|
+
pass
|
|
97
|
+
|
|
98
|
+
try:
|
|
99
|
+
result = json.loads(v)
|
|
100
|
+
return result
|
|
101
|
+
except Exception:
|
|
102
|
+
pass
|
|
103
|
+
|
|
104
|
+
return v
|
|
105
|
+
|
|
106
|
+
|
|
107
|
+
def as_tg_command_handler(
|
|
108
|
+
*,
|
|
109
|
+
tg_command_format_class: type[BaseTgCommandModel],
|
|
110
|
+
desc: str | None = None
|
|
111
|
+
) -> Callable[[Callable[..., Awaitable[Any]]], Callable[..., Awaitable[Any]]]:
|
|
112
|
+
def decorator(handler):
|
|
113
|
+
|
|
114
|
+
async def new_handler(*args, **kwargs):
|
|
115
|
+
|
|
116
|
+
message: types.Message = args[0]
|
|
117
|
+
if not isinstance(message, types.Message):
|
|
118
|
+
raise TypeError("not isinstance(message, types.Message)")
|
|
119
|
+
|
|
120
|
+
tg_command: CommandObject = kwargs.get("command")
|
|
121
|
+
if tg_command is None:
|
|
122
|
+
raise ValueError("Missing 'command' in handler kwargs")
|
|
123
|
+
|
|
124
|
+
try:
|
|
125
|
+
|
|
126
|
+
parsed_command = parse_command(text=tg_command.text)
|
|
127
|
+
kwargs["parsed_command"] = parsed_command
|
|
128
|
+
|
|
129
|
+
if parsed_command.has_flag(flag="help") or parsed_command.has_flag(flag="h"):
|
|
130
|
+
await message.answer(
|
|
131
|
+
text=_generate_help_text(
|
|
132
|
+
command_name=tg_command.command,
|
|
133
|
+
model_class=tg_command_format_class,
|
|
134
|
+
desc=desc
|
|
135
|
+
),
|
|
136
|
+
disable_web_page_preview=True,
|
|
137
|
+
parse_mode=ParseMode.HTML
|
|
138
|
+
)
|
|
139
|
+
return None
|
|
140
|
+
|
|
141
|
+
tg_command_model_data: dict[str, Any] = {}
|
|
142
|
+
|
|
143
|
+
for key, value in parsed_command.key_to_value.items():
|
|
144
|
+
if value is None:
|
|
145
|
+
tg_command_model_data[key] = True
|
|
146
|
+
else:
|
|
147
|
+
tg_command_model_data[key] = _parse_tg_param(value=value)
|
|
148
|
+
|
|
149
|
+
for i, value in enumerate(parsed_command.values_without_key):
|
|
150
|
+
tg_command_model_data[f"arg_{i}"] = _parse_tg_param(value=value)
|
|
151
|
+
|
|
152
|
+
tg_command_format_obj = tg_command_format_class(**tg_command_model_data)
|
|
153
|
+
|
|
154
|
+
kwargs["tg_command_format_obj"] = tg_command_format_obj
|
|
155
|
+
|
|
156
|
+
except Exception as exception:
|
|
157
|
+
|
|
158
|
+
_logger.exception("Error while parsing command %s", tg_command.text, exc_info=True)
|
|
159
|
+
|
|
160
|
+
await message.answer(
|
|
161
|
+
text=(
|
|
162
|
+
f"<b>Bad command usage</b> /{tg_command.command}"
|
|
163
|
+
f"\n"
|
|
164
|
+
f"\n<b>Error:</b>"
|
|
165
|
+
f"\n{exception}"
|
|
166
|
+
f"\n"
|
|
167
|
+
f"\nUse <code>/{tg_command.command} -help</code> for help info"
|
|
168
|
+
),
|
|
169
|
+
disable_web_page_preview=True,
|
|
170
|
+
parse_mode=ParseMode.HTML
|
|
171
|
+
)
|
|
172
|
+
|
|
173
|
+
return None
|
|
174
|
+
|
|
175
|
+
return await handler(*args, **kwargs)
|
|
176
|
+
|
|
177
|
+
return new_handler
|
|
178
|
+
|
|
179
|
+
return decorator
|
|
180
|
+
|
|
181
|
+
|
|
182
|
+
def __example():
|
|
183
|
+
pass
|
|
184
|
+
|
|
185
|
+
|
|
186
|
+
async def __async_example():
|
|
187
|
+
pass
|
|
188
|
+
|
|
189
|
+
|
|
190
|
+
if __name__ == '__main__':
|
|
191
|
+
__example()
|
|
192
|
+
asyncio.run(__async_example())
|
|
@@ -1,7 +1,9 @@
|
|
|
1
1
|
# arpakit
|
|
2
|
+
# DEPRECATED
|
|
2
3
|
|
|
3
4
|
import asyncio
|
|
4
5
|
import logging
|
|
6
|
+
from pathlib import Path
|
|
5
7
|
from typing import Optional, Any, Callable
|
|
6
8
|
|
|
7
9
|
from aiogram import types
|
|
@@ -17,6 +19,8 @@ _ARPAKIT_LIB_MODULE_VERSION = "3.0"
|
|
|
17
19
|
|
|
18
20
|
_logger = logging.getLogger(__name__)
|
|
19
21
|
|
|
22
|
+
_logger.warning(f"Module '{Path(__file__).name}' is deprecated; use 'ar_aiogram_as_tg_command_2_util' instead.")
|
|
23
|
+
|
|
20
24
|
|
|
21
25
|
class BadTgCommandFormat(BadCommandFormat):
|
|
22
26
|
pass
|
|
@@ -150,13 +150,7 @@ def get_arpakit_lib_modules() -> ArpakitLibModules:
|
|
|
150
150
|
|
|
151
151
|
|
|
152
152
|
def __example():
|
|
153
|
-
|
|
154
|
-
get_arpakit_lib_modules().module_name_to_module_version_and_module_has_errors().items()
|
|
155
|
-
):
|
|
156
|
-
print(module_name)
|
|
157
|
-
print(d)
|
|
158
|
-
print()
|
|
159
|
-
print("have_modules_with_error", get_arpakit_lib_modules().have_modules_with_error())
|
|
153
|
+
pass
|
|
160
154
|
|
|
161
155
|
|
|
162
156
|
if __name__ == '__main__':
|
|
@@ -37,9 +37,7 @@ def convert_file_to_base64_string(*, filepath: str, raise_for_error: bool = Fals
|
|
|
37
37
|
|
|
38
38
|
|
|
39
39
|
def __example():
|
|
40
|
-
|
|
41
|
-
base64_string=convert_file_to_base64_string(filepath="./ar_arpakitlib_cli_util.py")
|
|
42
|
-
))
|
|
40
|
+
pass
|
|
43
41
|
|
|
44
42
|
|
|
45
43
|
if __name__ == '__main__':
|
|
@@ -0,0 +1,47 @@
|
|
|
1
|
+
import logging
|
|
2
|
+
from typing import Any
|
|
3
|
+
|
|
4
|
+
import aiohttp
|
|
5
|
+
import requests
|
|
6
|
+
|
|
7
|
+
from arpakitlib.ar_dict_util import combine_dicts
|
|
8
|
+
from arpakitlib.ar_http_request_util import async_make_http_request, sync_make_http_request
|
|
9
|
+
|
|
10
|
+
|
|
11
|
+
class BaseHTTPAPIClient:
|
|
12
|
+
def __init__(self):
|
|
13
|
+
self.headers = {"Content-Type": "application/json"}
|
|
14
|
+
self._logger = logging.getLogger(f"{self.__class__.__name__}")
|
|
15
|
+
|
|
16
|
+
def _sync_make_http_request(
|
|
17
|
+
self,
|
|
18
|
+
*,
|
|
19
|
+
method: str,
|
|
20
|
+
url: str,
|
|
21
|
+
headers: dict[str, Any] | None = None,
|
|
22
|
+
**kwargs
|
|
23
|
+
) -> requests.Response:
|
|
24
|
+
return sync_make_http_request(
|
|
25
|
+
method=method,
|
|
26
|
+
url=url,
|
|
27
|
+
headers=combine_dicts(self.headers, (headers if headers is not None else {})),
|
|
28
|
+
**kwargs
|
|
29
|
+
)
|
|
30
|
+
|
|
31
|
+
async def _async_make_http_request(
|
|
32
|
+
self,
|
|
33
|
+
*,
|
|
34
|
+
method: str = "GET",
|
|
35
|
+
url: str,
|
|
36
|
+
headers: dict[str, Any] | None = None,
|
|
37
|
+
**kwargs
|
|
38
|
+
) -> aiohttp.ClientResponse:
|
|
39
|
+
return await async_make_http_request(
|
|
40
|
+
method=method,
|
|
41
|
+
url=url,
|
|
42
|
+
headers=combine_dicts(self.headers, (headers if headers is not None else {})),
|
|
43
|
+
**kwargs
|
|
44
|
+
)
|
|
45
|
+
|
|
46
|
+
def healthcheck(self) -> bool:
|
|
47
|
+
raise NotImplemented()
|
|
@@ -13,14 +13,14 @@ def clone_pydantic_model_fields(
|
|
|
13
13
|
base_model: Type[BaseModel] = BaseModel,
|
|
14
14
|
fields_to_remove: Iterable[str] | None = None,
|
|
15
15
|
new_class_name: str | None = None,
|
|
16
|
-
|
|
16
|
+
class_name_suffix: str | None = "Cloned"
|
|
17
17
|
) -> Type[BaseModel]:
|
|
18
18
|
if fields_to_remove is None:
|
|
19
19
|
fields_to_remove = set()
|
|
20
|
-
if
|
|
21
|
-
|
|
20
|
+
if class_name_suffix is None:
|
|
21
|
+
class_name_suffix = "Cloned"
|
|
22
22
|
if new_class_name is None:
|
|
23
|
-
new_class_name = f"{model_cls.__name__}{
|
|
23
|
+
new_class_name = f"{model_cls.__name__}{class_name_suffix}"
|
|
24
24
|
|
|
25
25
|
field_defs: dict[str, tuple[type[Any], Any]] = {}
|
|
26
26
|
|
|
@@ -0,0 +1,59 @@
|
|
|
1
|
+
# arpakit
|
|
2
|
+
|
|
3
|
+
from typing import Any
|
|
4
|
+
|
|
5
|
+
_ARPAKIT_LIB_MODULE_VERSION = "3.0"
|
|
6
|
+
|
|
7
|
+
|
|
8
|
+
def combine_dicts(*dicts: dict) -> dict[Any, Any]:
|
|
9
|
+
res = {}
|
|
10
|
+
for dict_ in dicts:
|
|
11
|
+
res.update(dict_)
|
|
12
|
+
return res
|
|
13
|
+
|
|
14
|
+
|
|
15
|
+
def replace_dict_key(*, dict_: dict, old_key: Any, new_key: Any) -> dict[Any, Any]:
|
|
16
|
+
if old_key in dict_:
|
|
17
|
+
dict_[new_key] = dict_.pop(old_key)
|
|
18
|
+
return dict_
|
|
19
|
+
|
|
20
|
+
|
|
21
|
+
class GetTypedFromDictException(Exception):
|
|
22
|
+
pass
|
|
23
|
+
|
|
24
|
+
|
|
25
|
+
def get_typed_from_dict(
|
|
26
|
+
*,
|
|
27
|
+
d: dict,
|
|
28
|
+
key: str,
|
|
29
|
+
type_,
|
|
30
|
+
allow_missing: bool = False,
|
|
31
|
+
custom_exception: type[Exception] = GetTypedFromDictException
|
|
32
|
+
) -> Any:
|
|
33
|
+
"""
|
|
34
|
+
Получает d[key], проверяет, что оно относится к типу typ.
|
|
35
|
+
Если ключ отсутствует:
|
|
36
|
+
- если allow_non_existing=True → возвращаем None
|
|
37
|
+
- иначе → KeyError
|
|
38
|
+
Если тип не совпадает → TypeError
|
|
39
|
+
"""
|
|
40
|
+
|
|
41
|
+
if key not in d:
|
|
42
|
+
if allow_missing:
|
|
43
|
+
return None
|
|
44
|
+
raise custom_exception(f"Missing key: {key}")
|
|
45
|
+
|
|
46
|
+
val = d[key]
|
|
47
|
+
|
|
48
|
+
if not isinstance(val, type_):
|
|
49
|
+
raise custom_exception(f"Expected {type_}, got {type(val)} for key '{key}'")
|
|
50
|
+
|
|
51
|
+
return val
|
|
52
|
+
|
|
53
|
+
|
|
54
|
+
def __example():
|
|
55
|
+
pass
|
|
56
|
+
|
|
57
|
+
|
|
58
|
+
if __name__ == '__main__':
|
|
59
|
+
__example()
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
import traceback
|
|
2
|
+
|
|
3
|
+
_ARPAKIT_LIB_MODULE_VERSION = "3.0"
|
|
4
|
+
|
|
5
|
+
|
|
6
|
+
def exception_to_traceback_str(exception: BaseException) -> str:
|
|
7
|
+
try:
|
|
8
|
+
return "".join(traceback.format_exception(type(exception), exception, exception.__traceback__))
|
|
9
|
+
except Exception as exception_:
|
|
10
|
+
return f"Failed to format exception to traceback str {exception!r}: {exception_!r}"
|
|
11
|
+
|
|
12
|
+
|
|
13
|
+
def __example():
|
|
14
|
+
pass
|
|
15
|
+
|
|
16
|
+
|
|
17
|
+
if __name__ == '__main__':
|
|
18
|
+
__example()
|
|
@@ -58,21 +58,7 @@ def generate_connection_url(
|
|
|
58
58
|
|
|
59
59
|
|
|
60
60
|
def __example():
|
|
61
|
-
|
|
62
|
-
# → redis://127.0.0.1:6379/0
|
|
63
|
-
|
|
64
|
-
# Redis с паролем
|
|
65
|
-
print(generate_connection_url(password="supersecret", host="redis"))
|
|
66
|
-
# → redis://:supersecret@redis:6379/0
|
|
67
|
-
|
|
68
|
-
# RabbitMQ (AMQP)
|
|
69
|
-
print(generate_connection_url(scheme="amqp", user="guest", password="guest", host="rabbitmq", port=6789))
|
|
70
|
-
# → amqp://guest:guest@rabbitmq:6379/0
|
|
71
|
-
|
|
72
|
-
# Redis с параметрами
|
|
73
|
-
print(generate_connection_url(scheme="mongodb", user="root", password="pass", host="localhost", port=27017,
|
|
74
|
-
authSource="fghjkl;", quote_query_params=True))
|
|
75
|
-
# → redis://:pass@127.0.0.1:6379/0?ssl_cert_reqs=none&socket_timeout=10
|
|
61
|
+
pass
|
|
76
62
|
|
|
77
63
|
|
|
78
64
|
if __name__ == '__main__':
|
|
@@ -0,0 +1,41 @@
|
|
|
1
|
+
import random
|
|
2
|
+
import secrets
|
|
3
|
+
import string
|
|
4
|
+
import uuid
|
|
5
|
+
|
|
6
|
+
|
|
7
|
+
def generate_difficult_password(*, difficult: int = 1):
|
|
8
|
+
# динамический диапазон длины
|
|
9
|
+
base = 32 + difficult * 16 # минимальная длина
|
|
10
|
+
variance = 64 + difficult * 32 # насколько может "гулять"
|
|
11
|
+
target_len = random.randint(base, base + variance)
|
|
12
|
+
|
|
13
|
+
alphabet = (
|
|
14
|
+
string.ascii_letters +
|
|
15
|
+
string.digits +
|
|
16
|
+
string.punctuation
|
|
17
|
+
)
|
|
18
|
+
|
|
19
|
+
password = []
|
|
20
|
+
|
|
21
|
+
# добавляем случайный шум из UUID блоков
|
|
22
|
+
for _ in range(difficult * 2):
|
|
23
|
+
noise_block = uuid.uuid4().hex
|
|
24
|
+
password.append(noise_block)
|
|
25
|
+
|
|
26
|
+
# основная часть пароля — криптостойкие символы
|
|
27
|
+
for _ in range(target_len):
|
|
28
|
+
password.append(secrets.choice(alphabet))
|
|
29
|
+
|
|
30
|
+
# финальная перемешка обеспечивает нерегулярность структуры
|
|
31
|
+
secrets.SystemRandom().shuffle(password)
|
|
32
|
+
|
|
33
|
+
return "".join(password)
|
|
34
|
+
|
|
35
|
+
|
|
36
|
+
def __example():
|
|
37
|
+
pass
|
|
38
|
+
|
|
39
|
+
|
|
40
|
+
if __name__ == '__main__':
|
|
41
|
+
__example()
|
|
@@ -57,12 +57,30 @@ def remove_from_lists_if_left(
|
|
|
57
57
|
return lists_
|
|
58
58
|
|
|
59
59
|
|
|
60
|
+
def int_to_list_(value: int | list | None) -> list[int] | None:
|
|
61
|
+
if isinstance(value, int):
|
|
62
|
+
return [value]
|
|
63
|
+
elif isinstance(value, list):
|
|
64
|
+
return value
|
|
65
|
+
elif value is None:
|
|
66
|
+
return None
|
|
67
|
+
else:
|
|
68
|
+
raise TypeError(f"{type(value)=}")
|
|
69
|
+
|
|
70
|
+
|
|
71
|
+
def str_to_list_(value: str | list | None) -> list[str] | None:
|
|
72
|
+
if isinstance(value, str):
|
|
73
|
+
return [value]
|
|
74
|
+
elif isinstance(value, list):
|
|
75
|
+
return value
|
|
76
|
+
elif value is None:
|
|
77
|
+
return None
|
|
78
|
+
else:
|
|
79
|
+
raise TypeError(f"{type(value)=}")
|
|
80
|
+
|
|
81
|
+
|
|
60
82
|
def __example():
|
|
61
|
-
|
|
62
|
-
list_=[1, 2, 2, 2, 2, 2, 3, 3, 3, 3, 3, 3],
|
|
63
|
-
values=[1, 2, 3]
|
|
64
|
-
)
|
|
65
|
-
print(a)
|
|
83
|
+
pass
|
|
66
84
|
|
|
67
85
|
|
|
68
86
|
if __name__ == '__main__':
|
|
@@ -62,17 +62,7 @@ def parse_need_type(value: Any, need_type: str, allow_none: bool = False) -> Any
|
|
|
62
62
|
|
|
63
63
|
|
|
64
64
|
def __example():
|
|
65
|
-
|
|
66
|
-
print(parse_need_type(value="True", need_type="bool"))
|
|
67
|
-
print(parse_need_type(value=123.456, need_type="float"))
|
|
68
|
-
print(parse_need_type(value='[1, 2, 3]', need_type="list_of_int"))
|
|
69
|
-
print(parse_need_type(value='["a", "b", "c"]', need_type="list_of_str"))
|
|
70
|
-
print(parse_need_type(value='[1.1, 2.2, 3.3]', need_type="list_of_float"))
|
|
71
|
-
print(parse_need_type(value='{"key": "value"}', need_type="json"))
|
|
72
|
-
print(parse_need_type(value="hello world", need_type="str"))
|
|
73
|
-
print(parse_need_type(value="[]", need_type=NeedTypes.list_of_str))
|
|
74
|
-
print(parse_need_type(value="", need_type=NeedTypes.list_of_str))
|
|
75
|
-
print(parse_need_type(value="none,asfasfas", need_type=NeedTypes.list_of_str))
|
|
65
|
+
pass
|
|
76
66
|
|
|
77
67
|
|
|
78
68
|
if __name__ == '__main__':
|
{arpakitlib-1.8.336 → arpakitlib-1.9.6}/arpakitlib/ar_pydantic_schema_from_sqlalchemy_model_util.py
RENAMED
|
@@ -75,8 +75,6 @@ def _type_matches(*, type_: Any, allowed_types: list[type]) -> bool:
|
|
|
75
75
|
- Annotated (смотрит на базовый тип),
|
|
76
76
|
- generics (List[int], Dict[str, Any]) — сравнивает по origin (list, dict, и т.п.).
|
|
77
77
|
"""
|
|
78
|
-
if type_ is Any:
|
|
79
|
-
return True
|
|
80
78
|
|
|
81
79
|
origin = get_origin(type_)
|
|
82
80
|
if origin is Union: # Optional/Union
|
|
@@ -126,7 +124,8 @@ def pydantic_schema_from_sqlalchemy_model(
|
|
|
126
124
|
remove_property_prefixes: list[str] | None = None,
|
|
127
125
|
skip_property_if_cannot_define_type: bool = True,
|
|
128
126
|
skip_property_name_if_exists: bool = True,
|
|
129
|
-
|
|
127
|
+
model_name_prefix: str | None = "Schema",
|
|
128
|
+
model_name_suffix: str | None = "Schema",
|
|
130
129
|
) -> type[BaseModel]:
|
|
131
130
|
"""
|
|
132
131
|
Генерирует Pydantic-модель из колонок SQLAlchemy-модели и (опционально) из @property.
|
|
@@ -139,7 +138,13 @@ def pydantic_schema_from_sqlalchemy_model(
|
|
|
139
138
|
- exclude_property_names: blacklist имён свойств (исключаются после whitelist'а).
|
|
140
139
|
"""
|
|
141
140
|
mapper = inspect(sqlalchemy_model).mapper
|
|
142
|
-
|
|
141
|
+
|
|
142
|
+
if not model_name:
|
|
143
|
+
model_name = str(sqlalchemy_model.__name__)
|
|
144
|
+
if model_name_prefix:
|
|
145
|
+
model_name = f"{model_name_prefix}{model_name}"
|
|
146
|
+
if model_name_suffix:
|
|
147
|
+
model_name = f"{model_name}{model_name_suffix}"
|
|
143
148
|
|
|
144
149
|
annotations: dict[str, Any] = {}
|
|
145
150
|
attrs: dict[str, Any] = {}
|
|
@@ -63,14 +63,7 @@ async def rat_async_func(
|
|
|
63
63
|
|
|
64
64
|
|
|
65
65
|
def __example():
|
|
66
|
-
|
|
67
|
-
return "go"
|
|
68
|
-
|
|
69
|
-
a = rat_sync_func(sync_func=go)
|
|
70
|
-
print(a.has_exception)
|
|
71
|
-
print(a)
|
|
72
|
-
print(a.is_func_res_set)
|
|
73
|
-
print(a.is_func_res_not_set)
|
|
66
|
+
pass
|
|
74
67
|
|
|
75
68
|
|
|
76
69
|
if __name__ == '__main__':
|