arpakitlib 1.8.15__py3-none-any.whl → 1.8.17__py3-none-any.whl
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/_arpakit_project_template_v_4/arpakitlib_project_template_info.json +3 -0
- arpakitlib/_arpakit_project_template_v_4/command/beautify_json.py +10 -0
- arpakitlib/_arpakit_project_template_v_4/command/demojize.py +9 -0
- arpakitlib/{_arpakit_project_template_v_2 → _arpakit_project_template_v_4}/command/drop_json_db.py +1 -1
- arpakitlib/{_arpakit_project_template_v_2 → _arpakit_project_template_v_4}/command/drop_sqlalchemy_db.py +1 -1
- arpakitlib/{_arpakit_project_template_v_2 → _arpakit_project_template_v_4}/command/generate_settings_env_example.py +2 -2
- arpakitlib/{_arpakit_project_template_v_2 → _arpakit_project_template_v_4}/command/reinit_json_db.py +1 -1
- arpakitlib/{_arpakit_project_template_v_2 → _arpakit_project_template_v_4}/command/reinit_sqlalchemy_db.py +1 -1
- arpakitlib/{_arpakit_project_template_v_2 → _arpakit_project_template_v_4}/command/remove_operations.py +1 -1
- arpakitlib/{_arpakit_project_template_v_2 → _arpakit_project_template_v_4}/command/remove_story_logs.py +1 -1
- arpakitlib/{_arpakit_project_template_v_2 → _arpakit_project_template_v_4}/command/rm_all_records_in_json_db.py +1 -1
- arpakitlib/_arpakit_project_template_v_4/command/set_tg_bot_commands.py +16 -0
- arpakitlib/_arpakit_project_template_v_4/command/show_settings.py +10 -0
- arpakitlib/_arpakit_project_template_v_4/command/start_sqladmin.py +19 -0
- arpakitlib/_arpakit_project_template_v_4/command/start_sqladmin_for_prod.py +19 -0
- arpakitlib/_arpakit_project_template_v_4/command/start_sqladmin_with_reload.py +19 -0
- arpakitlib/_arpakit_project_template_v_4/command/start_tg_bot_for_prod.py +11 -0
- arpakitlib/{_arpakit_project_template_v_2 → _arpakit_project_template_v_4}/example.env +11 -5
- arpakitlib/_arpakit_project_template_v_4/project/additional_model/common.py +8 -0
- arpakitlib/{_arpakit_project_template_v_2 → _arpakit_project_template_v_4}/project/api/auth.py +111 -35
- arpakitlib/_arpakit_project_template_v_4/project/api/auth2.py +171 -0
- arpakitlib/{_arpakit_project_template_v_2 → _arpakit_project_template_v_4}/project/api/create_api_app.py +7 -7
- arpakitlib/{_arpakit_project_template_v_2 → _arpakit_project_template_v_4}/project/api/event.py +8 -8
- arpakitlib/{_arpakit_project_template_v_2 → _arpakit_project_template_v_4}/project/api/exception.py +1 -1
- arpakitlib/{_arpakit_project_template_v_2 → _arpakit_project_template_v_4}/project/api/exception_handler.py +38 -36
- arpakitlib/{_arpakit_project_template_v_2 → _arpakit_project_template_v_4}/project/api/openapi_ui.py +1 -1
- arpakitlib/{_arpakit_project_template_v_2 → _arpakit_project_template_v_4}/project/api/response.py +5 -5
- arpakitlib/_arpakit_project_template_v_4/project/api/router/admin/get_arpakitlib_project_template_info.py +23 -0
- arpakitlib/_arpakit_project_template_v_4/project/api/router/admin/get_auth_data.py +30 -0
- arpakitlib/_arpakit_project_template_v_4/project/api/router/admin/main_router.py +3 -0
- arpakitlib/{_arpakit_project_template_v_2/project/api/router/general → _arpakit_project_template_v_4/project/api/router/client}/get_errors_info.py +3 -9
- arpakitlib/_arpakit_project_template_v_4/project/api/router/client/main_router.py +3 -0
- arpakitlib/_arpakit_project_template_v_4/project/api/router/client/now_utc_datetime.py +22 -0
- arpakitlib/_arpakit_project_template_v_4/project/api/router/general/healthcheck.py +21 -0
- arpakitlib/_arpakit_project_template_v_4/project/api/router/general/main_router.py +10 -0
- arpakitlib/_arpakit_project_template_v_4/project/api/router/main_router.py +23 -0
- arpakitlib/_arpakit_project_template_v_4/project/api/schema/out/admin/common.py +10 -0
- arpakitlib/_arpakit_project_template_v_4/project/api/schema/out/admin/operation.py +23 -0
- arpakitlib/_arpakit_project_template_v_4/project/api/schema/out/admin/story_log.py +17 -0
- arpakitlib/_arpakit_project_template_v_4/project/api/schema/out/client/common.py +10 -0
- arpakitlib/{_arpakit_project_template_v_2/project/api/schema/common/out.py → _arpakit_project_template_v_4/project/api/schema/out/common/datetime_.py} +2 -19
- arpakitlib/_arpakit_project_template_v_4/project/api/schema/out/common/raw_data.py +7 -0
- arpakitlib/_arpakit_project_template_v_4/project/api/schema/out/common.py +5 -0
- arpakitlib/_arpakit_project_template_v_4/project/api/schema/out/general/error.py +11 -0
- arpakitlib/_arpakit_project_template_v_4/project/api/schema/out/general/errors_info_general.py +6 -0
- arpakitlib/_arpakit_project_template_v_4/project/api/schema/out/general/healthcheck.py +5 -0
- arpakitlib/{_arpakit_project_template_v_2 → _arpakit_project_template_v_4}/project/core/const.py +2 -2
- arpakitlib/{_arpakit_project_template_v_2 → _arpakit_project_template_v_4}/project/core/settings.py +43 -39
- arpakitlib/_arpakit_project_template_v_4/project/site/router/__init__.py +0 -0
- arpakitlib/_arpakit_project_template_v_4/project/sqladmin_/__init__.py +0 -0
- arpakitlib/{_arpakit_project_template_v_2 → _arpakit_project_template_v_4}/project/sqladmin_/admin_auth.py +17 -12
- arpakitlib/_arpakit_project_template_v_4/project/sqladmin_/asgi.py +3 -0
- arpakitlib/_arpakit_project_template_v_4/project/sqladmin_/create_sqladmin_app.py +49 -0
- arpakitlib/_arpakit_project_template_v_4/project/sqladmin_/event.py +40 -0
- arpakitlib/{_arpakit_project_template_v_2 → _arpakit_project_template_v_4}/project/sqladmin_/model_view/operation.py +1 -1
- arpakitlib/{_arpakit_project_template_v_2 → _arpakit_project_template_v_4}/project/sqladmin_/model_view/story_log.py +1 -1
- arpakitlib/_arpakit_project_template_v_4/project/sqlalchemy_db_/__init__.py +0 -0
- arpakitlib/{_arpakit_project_template_v_2 → _arpakit_project_template_v_4}/project/sqlalchemy_db_/sqlalchemy_model/__init__.py +4 -0
- arpakitlib/_arpakit_project_template_v_4/project/sqlalchemy_db_/sqlalchemy_model/api_key.py +44 -0
- arpakitlib/{_arpakit_project_template_v_2 → _arpakit_project_template_v_4}/project/sqlalchemy_db_/sqlalchemy_model/common.py +29 -6
- arpakitlib/{_arpakit_project_template_v_2 → _arpakit_project_template_v_4}/project/sqlalchemy_db_/sqlalchemy_model/story_log.py +2 -1
- arpakitlib/_arpakit_project_template_v_4/project/sqlalchemy_db_/sqlalchemy_model/user.py +87 -0
- arpakitlib/_arpakit_project_template_v_4/project/sqlalchemy_db_/sqlalchemy_model/user_token.py +41 -0
- arpakitlib/_arpakit_project_template_v_4/project/test_data/__init__.py +0 -0
- arpakitlib/_arpakit_project_template_v_4/project/tg_bot/__init__.py +0 -0
- arpakitlib/_arpakit_project_template_v_4/project/tg_bot/blank/__init__.py +0 -0
- arpakitlib/_arpakit_project_template_v_4/project/tg_bot/blank/admin.py +45 -0
- arpakitlib/_arpakit_project_template_v_4/project/tg_bot/blank/client.py +44 -0
- arpakitlib/_arpakit_project_template_v_4/project/tg_bot/blank/common.py +5 -0
- arpakitlib/_arpakit_project_template_v_4/project/tg_bot/callback/__init__.py +0 -0
- arpakitlib/_arpakit_project_template_v_4/project/tg_bot/callback/admin.py +0 -0
- arpakitlib/_arpakit_project_template_v_4/project/tg_bot/callback/client.py +5 -0
- arpakitlib/{_arpakit_project_template_v_2/project/tg_bot/kb/inline_/callback.py → _arpakit_project_template_v_4/project/tg_bot/callback/common.py} +7 -7
- arpakitlib/{_arpakit_project_template_v_2 → _arpakit_project_template_v_4}/project/tg_bot/const.py +22 -6
- arpakitlib/_arpakit_project_template_v_4/project/tg_bot/error_handler.py +37 -0
- arpakitlib/{_arpakit_project_template_v_2 → _arpakit_project_template_v_4}/project/tg_bot/event.py +43 -13
- arpakitlib/_arpakit_project_template_v_4/project/tg_bot/filter_/__init__.py +0 -0
- arpakitlib/_arpakit_project_template_v_4/project/tg_bot/filter_/is_private_chat.py +12 -0
- arpakitlib/{_arpakit_project_template_v_2/project/tg_bot/filter_.py → _arpakit_project_template_v_4/project/tg_bot/filter_/message_text.py} +1 -22
- arpakitlib/_arpakit_project_template_v_4/project/tg_bot/filter_/not_prod_mode_filter.py +8 -0
- arpakitlib/_arpakit_project_template_v_4/project/tg_bot/filter_/prod_mode_filter.py +8 -0
- arpakitlib/_arpakit_project_template_v_4/project/tg_bot/filter_/user_roles_has_admin.py +27 -0
- arpakitlib/_arpakit_project_template_v_4/project/tg_bot/filter_/user_roles_has_client.py +27 -0
- arpakitlib/_arpakit_project_template_v_4/project/tg_bot/kb/__init__.py +0 -0
- arpakitlib/_arpakit_project_template_v_4/project/tg_bot/kb/inline_/__init__.py +0 -0
- arpakitlib/_arpakit_project_template_v_4/project/tg_bot/kb/inline_/admin/__init__.py +0 -0
- arpakitlib/_arpakit_project_template_v_4/project/tg_bot/kb/inline_/admin/common.py +0 -0
- arpakitlib/_arpakit_project_template_v_4/project/tg_bot/kb/inline_/client/__init__.py +0 -0
- arpakitlib/_arpakit_project_template_v_4/project/tg_bot/kb/inline_/client/common.py +0 -0
- arpakitlib/_arpakit_project_template_v_4/project/tg_bot/kb/inline_/client/hello_world.py +16 -0
- arpakitlib/_arpakit_project_template_v_4/project/tg_bot/kb/inline_/common.py +0 -0
- arpakitlib/_arpakit_project_template_v_4/project/tg_bot/kb/static_/__init__.py +0 -0
- arpakitlib/_arpakit_project_template_v_4/project/tg_bot/kb/static_/admin/__init__.py +0 -0
- arpakitlib/_arpakit_project_template_v_4/project/tg_bot/kb/static_/admin/common.py +0 -0
- arpakitlib/_arpakit_project_template_v_4/project/tg_bot/kb/static_/client/__init__.py +0 -0
- arpakitlib/_arpakit_project_template_v_4/project/tg_bot/kb/static_/client/common.py +0 -0
- arpakitlib/{_arpakit_project_template_v_2/project/tg_bot/kb/static_/common.py → _arpakit_project_template_v_4/project/tg_bot/kb/static_/client/hello_world.py} +3 -3
- arpakitlib/_arpakit_project_template_v_4/project/tg_bot/kb/static_/common.py +0 -0
- arpakitlib/_arpakit_project_template_v_4/project/tg_bot/middleware/__init__.py +0 -0
- arpakitlib/_arpakit_project_template_v_4/project/tg_bot/middleware/common.py +13 -0
- arpakitlib/_arpakit_project_template_v_4/project/tg_bot/middleware/init_user.py +84 -0
- arpakitlib/{_arpakit_project_template_v_2 → _arpakit_project_template_v_4}/project/tg_bot/middleware/middleware.py +1 -2
- arpakitlib/_arpakit_project_template_v_4/project/tg_bot/router/__init__.py +0 -0
- arpakitlib/_arpakit_project_template_v_4/project/tg_bot/router/admin/__init__.py +0 -0
- arpakitlib/_arpakit_project_template_v_4/project/tg_bot/router/admin/arpakitlib_project_template_info.py +25 -0
- arpakitlib/_arpakit_project_template_v_4/project/tg_bot/router/admin/main_router.py +15 -0
- arpakitlib/_arpakit_project_template_v_4/project/tg_bot/router/admin/me.py +20 -0
- arpakitlib/_arpakit_project_template_v_4/project/tg_bot/router/admin/raise_fake_error.py +20 -0
- arpakitlib/_arpakit_project_template_v_4/project/tg_bot/router/admin/reinit_sqlalchemy_db.py +27 -0
- arpakitlib/_arpakit_project_template_v_4/project/tg_bot/router/client/__init__.py +0 -0
- arpakitlib/_arpakit_project_template_v_4/project/tg_bot/router/client/healthcheck.py +16 -0
- arpakitlib/_arpakit_project_template_v_4/project/tg_bot/router/client/hello_world.py +44 -0
- arpakitlib/_arpakit_project_template_v_4/project/tg_bot/router/client/main_router.py +14 -0
- arpakitlib/_arpakit_project_template_v_4/project/tg_bot/router/client/start.py +33 -0
- arpakitlib/_arpakit_project_template_v_4/project/tg_bot/router/main_router.py +13 -0
- arpakitlib/{_arpakit_project_template_v_2 → _arpakit_project_template_v_4}/project/tg_bot/start_tg_bot.py +2 -2
- arpakitlib/{_arpakit_project_template_v_2 → _arpakit_project_template_v_4}/project/tg_bot/tg_bot.py +7 -0
- arpakitlib/_arpakit_project_template_v_4/project/tg_bot/util/__init__.py +0 -0
- arpakitlib/_arpakit_project_template_v_4/project/tg_bot/util/etc.py +0 -0
- arpakitlib/_arpakit_project_template_v_4/project/tg_bot/util/set_tg_bot_commands.py +76 -0
- arpakitlib/_arpakit_project_template_v_4/project/util/__init__.py +0 -0
- arpakitlib/ar_aiogram_util.py +0 -3
- arpakitlib/ar_arpakit_schedule_uust_api_client_util.py +1 -65
- arpakitlib/ar_json_util.py +43 -12
- arpakitlib/ar_sqlalchemy_util.py +2 -2
- arpakitlib/ar_ssh_runner_util.py +2 -2
- arpakitlib/ar_str_util.py +15 -0
- {arpakitlib-1.8.15.dist-info → arpakitlib-1.8.17.dist-info}/METADATA +3 -1
- arpakitlib-1.8.17.dist-info/RECORD +330 -0
- arpakitlib/_arpakit_project_template_v_2/arpakitlib_project_template_info.json +0 -3
- arpakitlib/_arpakit_project_template_v_2/command/beautify_json.py +0 -10
- arpakitlib/_arpakit_project_template_v_2/command/show_settings.py +0 -10
- arpakitlib/_arpakit_project_template_v_2/project/additional_model/common.py +0 -1
- arpakitlib/_arpakit_project_template_v_2/project/api/router/general/get_auth_data.py +0 -31
- arpakitlib/_arpakit_project_template_v_2/project/api/router/general/healthcheck.py +0 -26
- arpakitlib/_arpakit_project_template_v_2/project/api/router/general/main_router.py +0 -24
- arpakitlib/_arpakit_project_template_v_2/project/api/router/general/now_utc_datetime.py +0 -26
- arpakitlib/_arpakit_project_template_v_2/project/api/router/main_router.py +0 -11
- arpakitlib/_arpakit_project_template_v_2/project/api/schema/common/in_.py +0 -5
- arpakitlib/_arpakit_project_template_v_2/project/api/schema/example/in_.py +0 -5
- arpakitlib/_arpakit_project_template_v_2/project/api/schema/example/out.py +0 -45
- arpakitlib/_arpakit_project_template_v_2/project/api/schema/general/in_.py +0 -5
- arpakitlib/_arpakit_project_template_v_2/project/api/schema/general/out.py +0 -14
- arpakitlib/_arpakit_project_template_v_2/project/tg_bot/blank/blank.py +0 -24
- arpakitlib/_arpakit_project_template_v_2/project/tg_bot/kb/inline_/common.py +0 -15
- arpakitlib/_arpakit_project_template_v_2/project/tg_bot/middleware/init_user.py +0 -21
- arpakitlib/_arpakit_project_template_v_2/project/tg_bot/router/arpakitlib_project_template_info.py +0 -14
- arpakitlib/_arpakit_project_template_v_2/project/tg_bot/router/error.py +0 -16
- arpakitlib/_arpakit_project_template_v_2/project/tg_bot/router/healthcheck.py +0 -11
- arpakitlib/_arpakit_project_template_v_2/project/tg_bot/router/main_router.py +0 -12
- arpakitlib/_arpakit_project_template_v_2/project/tg_bot/util.py +0 -1
- arpakitlib-1.8.15.dist-info/RECORD +0 -265
- /arpakitlib/{_arpakit_project_template_v_2 → _arpakit_project_template_v_4}/.gitignore +0 -0
- /arpakitlib/{_arpakit_project_template_v_2 → _arpakit_project_template_v_4}/.python-version +0 -0
- /arpakitlib/{_arpakit_project_template_v_2 → _arpakit_project_template_v_4}/LICENSE +0 -0
- /arpakitlib/{_arpakit_project_template_v_2 → _arpakit_project_template_v_4}/README.md +0 -0
- /arpakitlib/{_arpakit_project_template_v_2 → _arpakit_project_template_v_4}/alembic/README +0 -0
- /arpakitlib/{_arpakit_project_template_v_2 → _arpakit_project_template_v_4}/alembic/env.py +0 -0
- /arpakitlib/{_arpakit_project_template_v_2 → _arpakit_project_template_v_4}/alembic/script.py.mako +0 -0
- /arpakitlib/{_arpakit_project_template_v_2 → _arpakit_project_template_v_4}/alembic/versions/__init__.py +0 -0
- /arpakitlib/{_arpakit_project_template_v_2 → _arpakit_project_template_v_4}/alembic.ini +0 -0
- /arpakitlib/{_arpakit_project_template_v_2 → _arpakit_project_template_v_4}/command/__init__.py +0 -0
- /arpakitlib/{_arpakit_project_template_v_2 → _arpakit_project_template_v_4}/command/alembic_history.sh +0 -0
- /arpakitlib/{_arpakit_project_template_v_2 → _arpakit_project_template_v_4}/command/alembic_revision_autogenerate.sh +0 -0
- /arpakitlib/{_arpakit_project_template_v_2 → _arpakit_project_template_v_4}/command/alembic_upgrade_head.sh +0 -0
- /arpakitlib/{_arpakit_project_template_v_2 → _arpakit_project_template_v_4}/command/check_logging.py +0 -0
- /arpakitlib/{_arpakit_project_template_v_2 → _arpakit_project_template_v_4}/command/check_sqlalchemy_db.py +0 -0
- /arpakitlib/{_arpakit_project_template_v_2 → _arpakit_project_template_v_4}/command/docker_ps_a.sh +0 -0
- /arpakitlib/{_arpakit_project_template_v_2 → _arpakit_project_template_v_4}/command/docker_rm_postgres.sh +0 -0
- /arpakitlib/{_arpakit_project_template_v_2 → _arpakit_project_template_v_4}/command/docker_run_postgres.sh +0 -0
- /arpakitlib/{_arpakit_project_template_v_2 → _arpakit_project_template_v_4}/command/docker_start_postgres.sh +0 -0
- /arpakitlib/{_arpakit_project_template_v_2 → _arpakit_project_template_v_4}/command/docker_stop_postgres.sh +0 -0
- /arpakitlib/{_arpakit_project_template_v_2 → _arpakit_project_template_v_4}/command/git_commit.sh +0 -0
- /arpakitlib/{_arpakit_project_template_v_2 → _arpakit_project_template_v_4}/command/git_push_arpakit_company_github_1.sh +0 -0
- /arpakitlib/{_arpakit_project_template_v_2 → _arpakit_project_template_v_4}/command/git_push_arpakit_company_gitlab_1.sh +0 -0
- /arpakitlib/{_arpakit_project_template_v_2 → _arpakit_project_template_v_4}/command/git_push_arpakit_github_1.sh +0 -0
- /arpakitlib/{_arpakit_project_template_v_2 → _arpakit_project_template_v_4}/command/git_push_arpakit_gitlab_1.sh +0 -0
- /arpakitlib/{_arpakit_project_template_v_2 → _arpakit_project_template_v_4}/command/git_remote_v.sh +0 -0
- /arpakitlib/{_arpakit_project_template_v_2 → _arpakit_project_template_v_4}/command/git_set_arpakit_company_origin.sh +0 -0
- /arpakitlib/{_arpakit_project_template_v_2 → _arpakit_project_template_v_4}/command/git_set_arpakit_origin.sh +0 -0
- /arpakitlib/{_arpakit_project_template_v_2 → _arpakit_project_template_v_4}/command/git_set_divarteam_origin.sh +0 -0
- /arpakitlib/{_arpakit_project_template_v_2 → _arpakit_project_template_v_4}/command/git_status.sh +0 -0
- /arpakitlib/{_arpakit_project_template_v_2 → _arpakit_project_template_v_4}/command/hello_world.py +0 -0
- /arpakitlib/{_arpakit_project_template_v_2 → _arpakit_project_template_v_4}/command/init_json_db.py +0 -0
- /arpakitlib/{_arpakit_project_template_v_2 → _arpakit_project_template_v_4}/command/init_sqlalchemy_db.py +0 -0
- /arpakitlib/{_arpakit_project_template_v_2 → _arpakit_project_template_v_4}/command/poetry_check.sh +0 -0
- /arpakitlib/{_arpakit_project_template_v_2 → _arpakit_project_template_v_4}/command/poetry_clear_cache.sh +0 -0
- /arpakitlib/{_arpakit_project_template_v_2 → _arpakit_project_template_v_4}/command/poetry_config.sh +0 -0
- /arpakitlib/{_arpakit_project_template_v_2 → _arpakit_project_template_v_4}/command/poetry_install.sh +0 -0
- /arpakitlib/{_arpakit_project_template_v_2 → _arpakit_project_template_v_4}/command/poetry_lock.sh +0 -0
- /arpakitlib/{_arpakit_project_template_v_2 → _arpakit_project_template_v_4}/command/poetry_remove_and_add_arpakitlib.sh +0 -0
- /arpakitlib/{_arpakit_project_template_v_2 → _arpakit_project_template_v_4}/command/poetry_show.sh +0 -0
- /arpakitlib/{_arpakit_project_template_v_2 → _arpakit_project_template_v_4}/command/poetry_show_arpakitlib.sh +0 -0
- /arpakitlib/{_arpakit_project_template_v_2 → _arpakit_project_template_v_4}/command/poetry_update.sh +0 -0
- /arpakitlib/{_arpakit_project_template_v_2 → _arpakit_project_template_v_4}/command/poetry_update_arpakitlib.sh +0 -0
- /arpakitlib/{_arpakit_project_template_v_2/command/start_api_for_not_prod.py → _arpakit_project_template_v_4/command/start_api.py} +0 -0
- /arpakitlib/{_arpakit_project_template_v_2 → _arpakit_project_template_v_4}/command/start_api_for_prod.py +0 -0
- /arpakitlib/{_arpakit_project_template_v_2/command/start_api_with_reload_for_not_prod.py → _arpakit_project_template_v_4/command/start_api_with_reload.py} +0 -0
- /arpakitlib/{_arpakit_project_template_v_2/command/start_operation_executor_worker_for_not_prod.py → _arpakit_project_template_v_4/command/start_operation_executor_worker.py} +0 -0
- /arpakitlib/{_arpakit_project_template_v_2/command/start_operation_executor_workers_for_not_prod.py → _arpakit_project_template_v_4/command/start_operation_executor_workers.py} +0 -0
- /arpakitlib/{_arpakit_project_template_v_2/command/start_scheduled_operation_creator_worker_for_not_prod.py → _arpakit_project_template_v_4/command/start_scheduled_operation_creator_worker.py} +0 -0
- /arpakitlib/{_arpakit_project_template_v_2/command/start_tg_bot_for_prod.py → _arpakit_project_template_v_4/command/start_tg_bot.py} +0 -0
- /arpakitlib/{_arpakit_project_template_v_2 → _arpakit_project_template_v_4}/note/note_1.txt +0 -0
- /arpakitlib/{_arpakit_project_template_v_2 → _arpakit_project_template_v_4}/note/note_2.txt +0 -0
- /arpakitlib/{_arpakit_project_template_v_2 → _arpakit_project_template_v_4}/note/note_3.txt +0 -0
- /arpakitlib/{_arpakit_project_template_v_2 → _arpakit_project_template_v_4}/note/note_4.txt +0 -0
- /arpakitlib/{_arpakit_project_template_v_2 → _arpakit_project_template_v_4}/note/note_5.txt +0 -0
- /arpakitlib/{_arpakit_project_template_v_2 → _arpakit_project_template_v_4}/project/__init__.py +0 -0
- /arpakitlib/{_arpakit_project_template_v_2 → _arpakit_project_template_v_4}/project/additional_model/__init__.py +0 -0
- /arpakitlib/{_arpakit_project_template_v_2 → _arpakit_project_template_v_4}/project/api/__init__.py +0 -0
- /arpakitlib/{_arpakit_project_template_v_2 → _arpakit_project_template_v_4}/project/api/asgi.py +0 -0
- /arpakitlib/{_arpakit_project_template_v_2 → _arpakit_project_template_v_4}/project/api/const.py +0 -0
- /arpakitlib/{_arpakit_project_template_v_2 → _arpakit_project_template_v_4}/project/api/router/__init__.py +0 -0
- /arpakitlib/{_arpakit_project_template_v_2/project/api/router/general → _arpakit_project_template_v_4/project/api/router/admin}/__init__.py +0 -0
- /arpakitlib/{_arpakit_project_template_v_2/project/api/schema → _arpakit_project_template_v_4/project/api/router/client}/__init__.py +0 -0
- /arpakitlib/{_arpakit_project_template_v_2/project/api/schema/common → _arpakit_project_template_v_4/project/api/router/general}/__init__.py +0 -0
- /arpakitlib/{_arpakit_project_template_v_2/project/api/schema/example → _arpakit_project_template_v_4/project/api/schema}/__init__.py +0 -0
- /arpakitlib/{_arpakit_project_template_v_2/project/api/schema/base_schema.py → _arpakit_project_template_v_4/project/api/schema/common.py} +0 -0
- /arpakitlib/{_arpakit_project_template_v_2/project/api/schema/general → _arpakit_project_template_v_4/project/api/schema/in_}/__init__.py +0 -0
- /arpakitlib/{_arpakit_project_template_v_2/project/business_service → _arpakit_project_template_v_4/project/api/schema/in_/admin}/__init__.py +0 -0
- /arpakitlib/{_arpakit_project_template_v_2/project/api/util.py → _arpakit_project_template_v_4/project/api/schema/in_/admin/common.py} +0 -0
- /arpakitlib/{_arpakit_project_template_v_2/project/celery_ → _arpakit_project_template_v_4/project/api/schema/in_/client}/__init__.py +0 -0
- /arpakitlib/{_arpakit_project_template_v_2/project/core/__init__.py → _arpakit_project_template_v_4/project/api/schema/in_/client/common.py} +0 -0
- /arpakitlib/{_arpakit_project_template_v_2/project/json_db → _arpakit_project_template_v_4/project/api/schema/in_/general}/__init__.py +0 -0
- /arpakitlib/{_arpakit_project_template_v_2/project/operation_execution/__init__.py → _arpakit_project_template_v_4/project/api/schema/in_/general/common.py} +0 -0
- /arpakitlib/{_arpakit_project_template_v_2/project/resource → _arpakit_project_template_v_4/project/api/schema/out}/__init__.py +0 -0
- /arpakitlib/{_arpakit_project_template_v_2/project/sandbox → _arpakit_project_template_v_4/project/api/schema/out/admin}/__init__.py +0 -0
- /arpakitlib/{_arpakit_project_template_v_2/project/site → _arpakit_project_template_v_4/project/api/schema/out/client}/__init__.py +0 -0
- /arpakitlib/{_arpakit_project_template_v_2/project/site/router → _arpakit_project_template_v_4/project/api/schema/out/common}/__init__.py +0 -0
- /arpakitlib/{_arpakit_project_template_v_2/project/sqladmin_ → _arpakit_project_template_v_4/project/api/schema/out/general}/__init__.py +0 -0
- /arpakitlib/{_arpakit_project_template_v_2/project/site/consts.py → _arpakit_project_template_v_4/project/api/schema/out/general/common.py} +0 -0
- /arpakitlib/{_arpakit_project_template_v_2/project/site/exception_handler.py → _arpakit_project_template_v_4/project/api/util.py} +0 -0
- /arpakitlib/{_arpakit_project_template_v_2/project/sqlalchemy_db_ → _arpakit_project_template_v_4/project/business_service}/__init__.py +0 -0
- /arpakitlib/{_arpakit_project_template_v_2 → _arpakit_project_template_v_4}/project/business_service/hello_world.py +0 -0
- /arpakitlib/{_arpakit_project_template_v_2 → _arpakit_project_template_v_4}/project/business_service/remove_operations.py +0 -0
- /arpakitlib/{_arpakit_project_template_v_2/project/test_data → _arpakit_project_template_v_4/project/celery_}/__init__.py +0 -0
- /arpakitlib/{_arpakit_project_template_v_2/project/tg_bot → _arpakit_project_template_v_4/project/core}/__init__.py +0 -0
- /arpakitlib/{_arpakit_project_template_v_2 → _arpakit_project_template_v_4}/project/core/cache_file_storage_in_dir.py +0 -0
- /arpakitlib/{_arpakit_project_template_v_2 → _arpakit_project_template_v_4}/project/core/dump_file_storage_in_dir.py +0 -0
- /arpakitlib/{_arpakit_project_template_v_2 → _arpakit_project_template_v_4}/project/core/jinja2_templates.py +0 -0
- /arpakitlib/{_arpakit_project_template_v_2 → _arpakit_project_template_v_4}/project/core/media_file_storage_in_dir.py +0 -0
- /arpakitlib/{_arpakit_project_template_v_2 → _arpakit_project_template_v_4}/project/core/util.py +0 -0
- /arpakitlib/{_arpakit_project_template_v_2/project/tg_bot/blank → _arpakit_project_template_v_4/project/json_db}/__init__.py +0 -0
- /arpakitlib/{_arpakit_project_template_v_2 → _arpakit_project_template_v_4}/project/json_db/json_db.py +0 -0
- /arpakitlib/{_arpakit_project_template_v_2 → _arpakit_project_template_v_4}/project/more/helloworld +0 -0
- /arpakitlib/{_arpakit_project_template_v_2/project/tg_bot/kb → _arpakit_project_template_v_4/project/operation_execution}/__init__.py +0 -0
- /arpakitlib/{_arpakit_project_template_v_2 → _arpakit_project_template_v_4}/project/operation_execution/const.py +0 -0
- /arpakitlib/{_arpakit_project_template_v_2 → _arpakit_project_template_v_4}/project/operation_execution/operation_executor_worker.py +0 -0
- /arpakitlib/{_arpakit_project_template_v_2 → _arpakit_project_template_v_4}/project/operation_execution/scheduled_operation_creator_worker.py +0 -0
- /arpakitlib/{_arpakit_project_template_v_2 → _arpakit_project_template_v_4}/project/operation_execution/scheduled_operations.py +0 -0
- /arpakitlib/{_arpakit_project_template_v_2 → _arpakit_project_template_v_4}/project/operation_execution/util.py +0 -0
- /arpakitlib/{_arpakit_project_template_v_2/project/tg_bot/kb/inline_ → _arpakit_project_template_v_4/project/resource}/__init__.py +0 -0
- /arpakitlib/{_arpakit_project_template_v_2 → _arpakit_project_template_v_4}/project/resource/static/1 +0 -0
- /arpakitlib/{_arpakit_project_template_v_2 → _arpakit_project_template_v_4}/project/resource/static/healthcheck +0 -0
- /arpakitlib/{_arpakit_project_template_v_2 → _arpakit_project_template_v_4}/project/resource/static/helloworld +0 -0
- /arpakitlib/{_arpakit_project_template_v_2 → _arpakit_project_template_v_4}/project/resource/static/openapi-favicon.png +0 -0
- /arpakitlib/{_arpakit_project_template_v_2 → _arpakit_project_template_v_4}/project/resource/static/redoc/redoc.standalone.js +0 -0
- /arpakitlib/{_arpakit_project_template_v_2 → _arpakit_project_template_v_4}/project/resource/static/swagger-ui/favicon-16x16.png +0 -0
- /arpakitlib/{_arpakit_project_template_v_2 → _arpakit_project_template_v_4}/project/resource/static/swagger-ui/favicon-32x32.png +0 -0
- /arpakitlib/{_arpakit_project_template_v_2 → _arpakit_project_template_v_4}/project/resource/static/swagger-ui/index.css +0 -0
- /arpakitlib/{_arpakit_project_template_v_2 → _arpakit_project_template_v_4}/project/resource/static/swagger-ui/index.html +0 -0
- /arpakitlib/{_arpakit_project_template_v_2 → _arpakit_project_template_v_4}/project/resource/static/swagger-ui/oauth2-redirect.html +0 -0
- /arpakitlib/{_arpakit_project_template_v_2 → _arpakit_project_template_v_4}/project/resource/static/swagger-ui/swagger-initializer.js +0 -0
- /arpakitlib/{_arpakit_project_template_v_2 → _arpakit_project_template_v_4}/project/resource/static/swagger-ui/swagger-ui-bundle.js +0 -0
- /arpakitlib/{_arpakit_project_template_v_2 → _arpakit_project_template_v_4}/project/resource/static/swagger-ui/swagger-ui-bundle.js.map +0 -0
- /arpakitlib/{_arpakit_project_template_v_2 → _arpakit_project_template_v_4}/project/resource/static/swagger-ui/swagger-ui-es-bundle-core.js +0 -0
- /arpakitlib/{_arpakit_project_template_v_2 → _arpakit_project_template_v_4}/project/resource/static/swagger-ui/swagger-ui-es-bundle-core.js.map +0 -0
- /arpakitlib/{_arpakit_project_template_v_2 → _arpakit_project_template_v_4}/project/resource/static/swagger-ui/swagger-ui-es-bundle.js +0 -0
- /arpakitlib/{_arpakit_project_template_v_2 → _arpakit_project_template_v_4}/project/resource/static/swagger-ui/swagger-ui-es-bundle.js.map +0 -0
- /arpakitlib/{_arpakit_project_template_v_2 → _arpakit_project_template_v_4}/project/resource/static/swagger-ui/swagger-ui-standalone-preset.js +0 -0
- /arpakitlib/{_arpakit_project_template_v_2 → _arpakit_project_template_v_4}/project/resource/static/swagger-ui/swagger-ui-standalone-preset.js.map +0 -0
- /arpakitlib/{_arpakit_project_template_v_2 → _arpakit_project_template_v_4}/project/resource/static/swagger-ui/swagger-ui.css +0 -0
- /arpakitlib/{_arpakit_project_template_v_2 → _arpakit_project_template_v_4}/project/resource/static/swagger-ui/swagger-ui.css.map +0 -0
- /arpakitlib/{_arpakit_project_template_v_2 → _arpakit_project_template_v_4}/project/resource/static/swagger-ui/swagger-ui.js +0 -0
- /arpakitlib/{_arpakit_project_template_v_2 → _arpakit_project_template_v_4}/project/resource/static/swagger-ui/swagger-ui.js.map +0 -0
- /arpakitlib/{_arpakit_project_template_v_2/project/tg_bot/kb/static_ → _arpakit_project_template_v_4/project/sandbox}/__init__.py +0 -0
- /arpakitlib/{_arpakit_project_template_v_2 → _arpakit_project_template_v_4}/project/sandbox/sandbox_1.py +0 -0
- /arpakitlib/{_arpakit_project_template_v_2 → _arpakit_project_template_v_4}/project/sandbox/sandbox_2.py +0 -0
- /arpakitlib/{_arpakit_project_template_v_2 → _arpakit_project_template_v_4}/project/sandbox/sandbox_3.py +0 -0
- /arpakitlib/{_arpakit_project_template_v_2 → _arpakit_project_template_v_4}/project/sandbox/sandbox_4.py +0 -0
- /arpakitlib/{_arpakit_project_template_v_2 → _arpakit_project_template_v_4}/project/sandbox/sandbox_5.py +0 -0
- /arpakitlib/{_arpakit_project_template_v_2 → _arpakit_project_template_v_4}/project/sandbox/sandbox_6.py +0 -0
- /arpakitlib/{_arpakit_project_template_v_2 → _arpakit_project_template_v_4}/project/sandbox/sandbox_7.py +0 -0
- /arpakitlib/{_arpakit_project_template_v_2/project/tg_bot/middleware → _arpakit_project_template_v_4/project/site}/__init__.py +0 -0
- /arpakitlib/{_arpakit_project_template_v_2 → _arpakit_project_template_v_4}/project/site/asgi.py +0 -0
- /arpakitlib/{_arpakit_project_template_v_2/project/tg_bot/router/__init__.py → _arpakit_project_template_v_4/project/site/consts.py} +0 -0
- /arpakitlib/{_arpakit_project_template_v_2 → _arpakit_project_template_v_4}/project/site/create_site_app.py +0 -0
- /arpakitlib/{_arpakit_project_template_v_2 → _arpakit_project_template_v_4}/project/site/event.py +0 -0
- /arpakitlib/{_arpakit_project_template_v_2/project/util/__init__.py → _arpakit_project_template_v_4/project/site/exception_handler.py} +0 -0
- /arpakitlib/{_arpakit_project_template_v_2 → _arpakit_project_template_v_4}/project/site/router/main_router.py +0 -0
- /arpakitlib/{_arpakit_project_template_v_2 → _arpakit_project_template_v_4}/project/sqladmin_/add_admin_in_app.py +0 -0
- /arpakitlib/{_arpakit_project_template_v_2 → _arpakit_project_template_v_4}/project/sqladmin_/model_view/__init__.py +0 -0
- /arpakitlib/{_arpakit_project_template_v_2 → _arpakit_project_template_v_4}/project/sqladmin_/model_view/common.py +0 -0
- /arpakitlib/{_arpakit_project_template_v_2 → _arpakit_project_template_v_4}/project/sqlalchemy_db_/const.py +0 -0
- /arpakitlib/{_arpakit_project_template_v_2 → _arpakit_project_template_v_4}/project/sqlalchemy_db_/sqlalchemy_db.py +0 -0
- /arpakitlib/{_arpakit_project_template_v_2 → _arpakit_project_template_v_4}/project/sqlalchemy_db_/sqlalchemy_model/operation.py +0 -0
- /arpakitlib/{_arpakit_project_template_v_2 → _arpakit_project_template_v_4}/project/sqlalchemy_db_/util.py +0 -0
- /arpakitlib/{_arpakit_project_template_v_2 → _arpakit_project_template_v_4}/project/test_data/make_test_data_1.py +0 -0
- /arpakitlib/{_arpakit_project_template_v_2 → _arpakit_project_template_v_4}/project/test_data/make_test_data_2.py +0 -0
- /arpakitlib/{_arpakit_project_template_v_2 → _arpakit_project_template_v_4}/project/test_data/make_test_data_3.py +0 -0
- /arpakitlib/{_arpakit_project_template_v_2 → _arpakit_project_template_v_4}/project/test_data/make_test_data_4.py +0 -0
- /arpakitlib/{_arpakit_project_template_v_2 → _arpakit_project_template_v_4}/project/test_data/make_test_data_5.py +0 -0
- /arpakitlib/{_arpakit_project_template_v_2 → _arpakit_project_template_v_4}/project/tg_bot/tg_bot_dispatcher.py +0 -0
- /arpakitlib/{_arpakit_project_template_v_2 → _arpakit_project_template_v_4}/project/util/arpakitlib_project_template.py +0 -0
- {arpakitlib-1.8.15.dist-info → arpakitlib-1.8.17.dist-info}/LICENSE +0 -0
- {arpakitlib-1.8.15.dist-info → arpakitlib-1.8.17.dist-info}/WHEEL +0 -0
- {arpakitlib-1.8.15.dist-info → arpakitlib-1.8.17.dist-info}/entry_points.txt +0 -0
@@ -0,0 +1,23 @@
|
|
1
|
+
from fastapi import APIRouter
|
2
|
+
|
3
|
+
from project.api.router.admin.main_router import main_admin_api_router
|
4
|
+
from project.api.router.client.main_router import main_client_api_router
|
5
|
+
from project.api.router.general.main_router import main_general_api_router
|
6
|
+
|
7
|
+
main_api_router = APIRouter()
|
8
|
+
|
9
|
+
main_api_router.include_router(
|
10
|
+
prefix="/general",
|
11
|
+
router=main_general_api_router,
|
12
|
+
tags=["General"]
|
13
|
+
)
|
14
|
+
main_api_router.include_router(
|
15
|
+
prefix="/client",
|
16
|
+
router=main_client_api_router,
|
17
|
+
tags=["Client"]
|
18
|
+
)
|
19
|
+
main_api_router.include_router(
|
20
|
+
prefix="/admin",
|
21
|
+
router=main_admin_api_router,
|
22
|
+
tags=["Admin"]
|
23
|
+
)
|
@@ -0,0 +1,23 @@
|
|
1
|
+
from __future__ import annotations
|
2
|
+
|
3
|
+
import datetime as dt
|
4
|
+
from typing import Any
|
5
|
+
|
6
|
+
from project.api.schema.out.admin.common import SimpleDBMAdminCommonSO
|
7
|
+
from project.sqlalchemy_db_.sqlalchemy_model import OperationDBM
|
8
|
+
|
9
|
+
|
10
|
+
class OperationAdminSO(SimpleDBMAdminCommonSO):
|
11
|
+
execution_start_dt: dt.datetime | None
|
12
|
+
execution_finish_dt: dt.datetime | None
|
13
|
+
status: str
|
14
|
+
type: str
|
15
|
+
title: str | None
|
16
|
+
input_data: dict[str, Any]
|
17
|
+
output_data: dict[str, Any]
|
18
|
+
error_data: dict[str, Any]
|
19
|
+
duration_total_seconds: float | None
|
20
|
+
|
21
|
+
@classmethod
|
22
|
+
def from_operation_dbm(cls, *, operation_dbm: OperationDBM) -> OperationAdminSO:
|
23
|
+
return cls.model_validate(operation_dbm.simple_dict_with_sd_properties())
|
@@ -0,0 +1,17 @@
|
|
1
|
+
from __future__ import annotations
|
2
|
+
|
3
|
+
from typing import Any
|
4
|
+
|
5
|
+
from project.api.schema.out.admin.common import SimpleDBMAdminCommonSO
|
6
|
+
from project.sqlalchemy_db_.sqlalchemy_model import StoryLogDBM
|
7
|
+
|
8
|
+
|
9
|
+
class StoryLogAdminSO(SimpleDBMAdminCommonSO):
|
10
|
+
level: str
|
11
|
+
type: str | None
|
12
|
+
title: str | None
|
13
|
+
data: dict[str, Any]
|
14
|
+
|
15
|
+
@classmethod
|
16
|
+
def from_story_log_dbm(cls, *, story_log_dbm: StoryLogDBM) -> StoryLogAdminSO:
|
17
|
+
return cls.model_validate(story_log_dbm.simple_dict_with_sd_properties())
|
@@ -1,22 +1,9 @@
|
|
1
1
|
import datetime as dt
|
2
|
-
from typing import Any
|
3
2
|
|
4
|
-
from project.api.schema.
|
3
|
+
from project.api.schema.common import BaseSO
|
5
4
|
|
6
5
|
|
7
|
-
class
|
8
|
-
pass
|
9
|
-
|
10
|
-
|
11
|
-
class ErrorCommonSO(BaseCommonSO):
|
12
|
-
has_error: bool = True
|
13
|
-
error_code: str | None = None
|
14
|
-
error_specification_code: str | None = None
|
15
|
-
error_description: str | None = None
|
16
|
-
error_data: dict[str, Any] = {}
|
17
|
-
|
18
|
-
|
19
|
-
class DatetimeCommonSO(BaseCommonSO):
|
6
|
+
class DatetimeCommonSO(BaseSO):
|
20
7
|
date: dt.date
|
21
8
|
datetime: dt.datetime | None = None
|
22
9
|
year: int
|
@@ -49,7 +36,3 @@ class DatetimeCommonSO(BaseCommonSO):
|
|
49
36
|
month=date_.month,
|
50
37
|
day=date_.day
|
51
38
|
)
|
52
|
-
|
53
|
-
|
54
|
-
class RawDataCommonSO(BaseCommonSO):
|
55
|
-
data: dict[str, Any] = {}
|
@@ -0,0 +1,11 @@
|
|
1
|
+
from typing import Any
|
2
|
+
|
3
|
+
from project.api.schema.common import BaseSO
|
4
|
+
|
5
|
+
|
6
|
+
class ErrorGeneralSO(BaseSO):
|
7
|
+
has_error: bool = True
|
8
|
+
error_code: str | None = None
|
9
|
+
error_specification_code: str | None = None
|
10
|
+
error_description: str | None = None
|
11
|
+
error_data: dict[str, Any] = {}
|
arpakitlib/{_arpakit_project_template_v_2 → _arpakit_project_template_v_4}/project/core/const.py
RENAMED
@@ -3,7 +3,7 @@ import os
|
|
3
3
|
import pathlib
|
4
4
|
|
5
5
|
from arpakitlib.ar_enumeration_util import Enumeration
|
6
|
-
from arpakitlib.ar_json_util import
|
6
|
+
from arpakitlib.ar_json_util import transfer_data_to_json_str
|
7
7
|
|
8
8
|
|
9
9
|
class ProjectPaths(Enumeration):
|
@@ -25,7 +25,7 @@ class ProjectPaths(Enumeration):
|
|
25
25
|
|
26
26
|
|
27
27
|
def __example():
|
28
|
-
print(
|
28
|
+
print(transfer_data_to_json_str(ProjectPaths.key_to_value()))
|
29
29
|
|
30
30
|
|
31
31
|
async def __async_example():
|
arpakitlib/{_arpakit_project_template_v_2 → _arpakit_project_template_v_4}/project/core/settings.py
RENAMED
@@ -6,44 +6,23 @@ import pytz
|
|
6
6
|
from pydantic import field_validator
|
7
7
|
from pydantic_core.core_schema import ValidationInfo
|
8
8
|
|
9
|
-
from arpakitlib.
|
10
|
-
from arpakitlib.ar_json_util import safely_transfer_obj_to_json_str
|
9
|
+
from arpakitlib.ar_json_util import transfer_data_to_json_str
|
11
10
|
from arpakitlib.ar_settings_util import SimpleSettings
|
12
11
|
from arpakitlib.ar_sqlalchemy_util import generate_sqlalchemy_url
|
12
|
+
from arpakitlib.ar_type_util import raise_for_type
|
13
13
|
from project.core.const import ProjectPaths
|
14
14
|
|
15
15
|
|
16
|
-
class ModeTypes(Enumeration):
|
17
|
-
not_prod: str = "not_prod"
|
18
|
-
prod: str = "prod"
|
19
|
-
|
20
|
-
|
21
16
|
class Settings(SimpleSettings):
|
22
|
-
|
23
|
-
|
24
|
-
@field_validator("mode_type")
|
25
|
-
@classmethod
|
26
|
-
def validate_mode_type(cls, v: Any, validation_info: ValidationInfo, **kwargs):
|
27
|
-
if v is None:
|
28
|
-
v = ModeTypes.not_prod
|
29
|
-
ModeTypes.parse_and_validate_values(v.lower().strip())
|
30
|
-
return v
|
31
|
-
|
32
|
-
@property
|
33
|
-
def is_mode_type_not_prod(self) -> bool:
|
34
|
-
return self.mode_type == ModeTypes.not_prod
|
35
|
-
|
36
|
-
def raise_if_mode_type_not_prod(self):
|
37
|
-
if self.is_mode_type_not_prod:
|
38
|
-
raise ValueError(f"mode type = {self.mode_type}")
|
17
|
+
prod_mode: bool = False
|
39
18
|
|
40
|
-
|
41
|
-
|
42
|
-
|
19
|
+
def raise_if_prod_mode(self):
|
20
|
+
if self.prod_mode:
|
21
|
+
raise ValueError(f"self.prod_mode")
|
43
22
|
|
44
|
-
def
|
45
|
-
if self.
|
46
|
-
raise ValueError(f"
|
23
|
+
def raise_if_not_prod_mode(self):
|
24
|
+
if not self.prod_mode:
|
25
|
+
raise ValueError(f"not self.prod_mode")
|
47
26
|
|
48
27
|
project_name: str | None = "project"
|
49
28
|
|
@@ -105,10 +84,10 @@ class Settings(SimpleSettings):
|
|
105
84
|
|
106
85
|
api_init_json_db: bool = False
|
107
86
|
|
108
|
-
|
87
|
+
api_api_keys: list[str] | None = ["1"]
|
109
88
|
|
110
|
-
@field_validator("
|
111
|
-
def
|
89
|
+
@field_validator("api_api_keys", mode="before")
|
90
|
+
def validate_api_api_keys(cls, v: Any, validation_info: ValidationInfo, **kwargs) -> list[str] | None:
|
112
91
|
if isinstance(v, str):
|
113
92
|
v = [v]
|
114
93
|
if isinstance(v, int):
|
@@ -119,10 +98,10 @@ class Settings(SimpleSettings):
|
|
119
98
|
v[i] = str(v_)
|
120
99
|
return v
|
121
100
|
|
122
|
-
|
101
|
+
api_user_tokens: list[str] | None = ["1"]
|
123
102
|
|
124
|
-
@field_validator("
|
125
|
-
def
|
103
|
+
@field_validator("api_user_tokens", mode="before")
|
104
|
+
def validate_api_tokens(cls, v: Any, validation_info: ValidationInfo, **kwargs) -> list[str] | None:
|
126
105
|
if isinstance(v, str):
|
127
106
|
v = [v]
|
128
107
|
if isinstance(v, int):
|
@@ -139,11 +118,25 @@ class Settings(SimpleSettings):
|
|
139
118
|
|
140
119
|
api_start_scheduled_operation_creator_worker: bool = False
|
141
120
|
|
142
|
-
|
121
|
+
api_create_story_log_func_before_in_api_exception_handler: bool = False
|
143
122
|
|
144
123
|
sqladmin_secret_key: str | None = "85a9583cb91c4de7a78d7eb1e5306a04418c9c43014c447ea8ec8dd5deb4cf71"
|
145
124
|
|
146
|
-
|
125
|
+
sqladmin_auth_keys: list[str] | None = ["1"]
|
126
|
+
|
127
|
+
@field_validator("sqladmin_auth_keys", mode="before")
|
128
|
+
def validate_sqladmin_auth_keys(cls, v: Any, validation_info: ValidationInfo, **kwargs) -> list[str] | None:
|
129
|
+
if isinstance(v, str):
|
130
|
+
v = [v]
|
131
|
+
if isinstance(v, int):
|
132
|
+
v = [str(v)]
|
133
|
+
if isinstance(v, list):
|
134
|
+
for i, v_ in enumerate(v):
|
135
|
+
if isinstance(v_, int):
|
136
|
+
v[i] = str(v_)
|
137
|
+
return v
|
138
|
+
|
139
|
+
sqladmin_port: int | None = 8081
|
147
140
|
|
148
141
|
tg_bot_token: str | None = None
|
149
142
|
|
@@ -165,6 +158,16 @@ class Settings(SimpleSettings):
|
|
165
158
|
|
166
159
|
tg_bot_webhook_enabled: bool = False
|
167
160
|
|
161
|
+
tg_bot_drop_pending_updates: bool = True
|
162
|
+
|
163
|
+
tg_bot_start_operation_executor_worker: bool = False
|
164
|
+
|
165
|
+
tg_bot_start_scheduled_operation_creator_worker: bool = False
|
166
|
+
|
167
|
+
tg_bot_command_passwd: str | None = "1"
|
168
|
+
|
169
|
+
tg_bot_admin_tg_ids: list[int] = [269870432]
|
170
|
+
|
168
171
|
var_dirpath: str | None = os.path.join(ProjectPaths.base_dirpath, "var")
|
169
172
|
|
170
173
|
log_filepath: str | None = os.path.join(var_dirpath, "story.log")
|
@@ -181,6 +184,7 @@ class Settings(SimpleSettings):
|
|
181
184
|
|
182
185
|
@property
|
183
186
|
def local_timezone_as_pytz(self) -> Any:
|
187
|
+
raise_for_type(self.local_timezone, str)
|
184
188
|
return pytz.timezone(self.local_timezone)
|
185
189
|
|
186
190
|
|
@@ -192,4 +196,4 @@ def get_cached_settings() -> Settings:
|
|
192
196
|
|
193
197
|
|
194
198
|
if __name__ == '__main__':
|
195
|
-
print(
|
199
|
+
print(transfer_data_to_json_str(get_cached_settings().model_dump(mode="json")))
|
File without changes
|
File without changes
|
@@ -3,6 +3,7 @@ import logging
|
|
3
3
|
import fastapi
|
4
4
|
from sqladmin.authentication import AuthenticationBackend
|
5
5
|
|
6
|
+
from arpakitlib.ar_str_util import make_none_if_blank
|
6
7
|
from project.core.settings import get_cached_settings
|
7
8
|
|
8
9
|
|
@@ -14,33 +15,36 @@ class SQLAdminAuth(AuthenticationBackend):
|
|
14
15
|
async def login(self, request: fastapi.Request) -> bool:
|
15
16
|
form = await request.form()
|
16
17
|
|
17
|
-
username
|
18
|
+
username = form.get("username")
|
18
19
|
if username:
|
19
20
|
username = username.strip()
|
21
|
+
username = make_none_if_blank(username)
|
22
|
+
|
23
|
+
password = form.get("password")
|
20
24
|
if password:
|
21
25
|
password = password.strip()
|
26
|
+
password = make_none_if_blank(password)
|
22
27
|
|
23
|
-
if get_cached_settings().
|
28
|
+
if get_cached_settings().sqladmin_auth_keys is not None:
|
24
29
|
if (
|
25
30
|
(
|
26
31
|
is_username_correct := (
|
27
32
|
username is not None
|
28
|
-
and username in get_cached_settings().
|
33
|
+
and username in get_cached_settings().sqladmin_auth_keys
|
29
34
|
)
|
30
35
|
)
|
31
36
|
or
|
32
37
|
(
|
33
38
|
is_password_correct := (
|
34
39
|
password is not None
|
35
|
-
and password in get_cached_settings().
|
40
|
+
and password in get_cached_settings().sqladmin_auth_keys
|
36
41
|
)
|
37
42
|
)
|
38
43
|
):
|
39
44
|
if is_username_correct is True:
|
40
|
-
request.session.update({"
|
45
|
+
request.session.update({"sqladmin_auth_key": username})
|
41
46
|
elif is_password_correct is True:
|
42
|
-
request.session.update({"
|
43
|
-
|
47
|
+
request.session.update({"sqladmin_auth_key": password})
|
44
48
|
return True
|
45
49
|
|
46
50
|
return False
|
@@ -50,12 +54,13 @@ class SQLAdminAuth(AuthenticationBackend):
|
|
50
54
|
return True
|
51
55
|
|
52
56
|
async def authenticate(self, request: fastapi.Request) -> bool:
|
53
|
-
|
54
|
-
if
|
55
|
-
|
57
|
+
sqladmin_auth_key = request.session.get("sqladmin_auth_key")
|
58
|
+
if sqladmin_auth_key:
|
59
|
+
sqladmin_auth_key = sqladmin_auth_key.strip()
|
60
|
+
sqladmin_auth_key = make_none_if_blank(sqladmin_auth_key)
|
56
61
|
|
57
|
-
if get_cached_settings().
|
58
|
-
if
|
62
|
+
if get_cached_settings().sqladmin_auth_keys is not None:
|
63
|
+
if sqladmin_auth_key is not None and sqladmin_auth_key in get_cached_settings().sqladmin_auth_keys:
|
59
64
|
return True
|
60
65
|
|
61
66
|
return False
|
@@ -0,0 +1,49 @@
|
|
1
|
+
import logging
|
2
|
+
|
3
|
+
from fastapi import FastAPI
|
4
|
+
from fastapi.middleware.cors import CORSMiddleware
|
5
|
+
|
6
|
+
from project.core.settings import get_cached_settings
|
7
|
+
from project.core.util import setup_logging
|
8
|
+
from project.sqladmin_.add_admin_in_app import add_sqladmin_in_app
|
9
|
+
from project.sqladmin_.event import get_sqladmin_startup_events, get_sqladmin_shutdown_events
|
10
|
+
|
11
|
+
_logger = logging.getLogger(__name__)
|
12
|
+
|
13
|
+
|
14
|
+
def create_sqladmin_app(*, prefix: str = "/sqladmin") -> FastAPI:
|
15
|
+
setup_logging()
|
16
|
+
|
17
|
+
_logger.info("start")
|
18
|
+
|
19
|
+
sqladmin_app = FastAPI(
|
20
|
+
title=get_cached_settings().project_name,
|
21
|
+
description=get_cached_settings().project_name,
|
22
|
+
docs_url=None,
|
23
|
+
redoc_url=None,
|
24
|
+
openapi_url=None,
|
25
|
+
on_startup=get_sqladmin_startup_events(),
|
26
|
+
on_shutdown=get_sqladmin_shutdown_events(),
|
27
|
+
contact={
|
28
|
+
"name": "ARPAKIT Company",
|
29
|
+
"url": "https://arpakit.com/",
|
30
|
+
"email": "support@arpakit.com",
|
31
|
+
},
|
32
|
+
)
|
33
|
+
|
34
|
+
sqladmin_app.add_middleware(
|
35
|
+
CORSMiddleware,
|
36
|
+
allow_origins=["*"],
|
37
|
+
allow_credentials=True,
|
38
|
+
allow_methods=["*"],
|
39
|
+
allow_headers=["*"],
|
40
|
+
)
|
41
|
+
|
42
|
+
add_sqladmin_in_app(
|
43
|
+
app=sqladmin_app,
|
44
|
+
base_url=prefix
|
45
|
+
)
|
46
|
+
|
47
|
+
_logger.info("finish")
|
48
|
+
|
49
|
+
return sqladmin_app
|
@@ -0,0 +1,40 @@
|
|
1
|
+
import logging
|
2
|
+
from typing import Callable
|
3
|
+
|
4
|
+
from project.core.settings import get_cached_settings
|
5
|
+
from project.sqlalchemy_db_.sqlalchemy_db import get_cached_sqlalchemy_db
|
6
|
+
|
7
|
+
_logger = logging.getLogger(__name__)
|
8
|
+
|
9
|
+
|
10
|
+
# STARTUP API EVENTS
|
11
|
+
|
12
|
+
|
13
|
+
async def async_sqladmin_startup_event():
|
14
|
+
_logger.info("start")
|
15
|
+
|
16
|
+
if (
|
17
|
+
get_cached_sqlalchemy_db() is not None
|
18
|
+
and get_cached_settings().api_init_sqlalchemy_db
|
19
|
+
):
|
20
|
+
get_cached_sqlalchemy_db().init()
|
21
|
+
|
22
|
+
_logger.info("finish")
|
23
|
+
|
24
|
+
|
25
|
+
def get_sqladmin_startup_events() -> list[Callable]:
|
26
|
+
res = [async_sqladmin_startup_event]
|
27
|
+
return res
|
28
|
+
|
29
|
+
|
30
|
+
# SHUTDOWN API EVENTS
|
31
|
+
|
32
|
+
|
33
|
+
async def async_sqladmin_shutdown_event():
|
34
|
+
_logger.info("start")
|
35
|
+
_logger.info("finish")
|
36
|
+
|
37
|
+
|
38
|
+
def get_sqladmin_shutdown_events() -> list[Callable]:
|
39
|
+
res = [async_sqladmin_shutdown_event]
|
40
|
+
return res
|
File without changes
|
@@ -1,7 +1,11 @@
|
|
1
1
|
from arpakitlib.ar_sqlalchemy_util import get_string_info_from_declarative_base
|
2
|
+
|
3
|
+
from project.sqlalchemy_db_.sqlalchemy_model.api_key import ApiKeyDBM
|
2
4
|
from project.sqlalchemy_db_.sqlalchemy_model.common import SimpleDBM
|
3
5
|
from project.sqlalchemy_db_.sqlalchemy_model.operation import OperationDBM
|
4
6
|
from project.sqlalchemy_db_.sqlalchemy_model.story_log import StoryLogDBM
|
7
|
+
from project.sqlalchemy_db_.sqlalchemy_model.user import UserDBM
|
8
|
+
from project.sqlalchemy_db_.sqlalchemy_model.user_token import UserTokenDBM
|
5
9
|
|
6
10
|
if __name__ == '__main__':
|
7
11
|
print(get_string_info_from_declarative_base(SimpleDBM))
|
@@ -0,0 +1,44 @@
|
|
1
|
+
from __future__ import annotations
|
2
|
+
|
3
|
+
from typing import TYPE_CHECKING
|
4
|
+
from uuid import uuid4
|
5
|
+
|
6
|
+
import sqlalchemy
|
7
|
+
from sqlalchemy.orm import Mapped, mapped_column
|
8
|
+
|
9
|
+
from arpakitlib.ar_datetime_util import now_utc_dt
|
10
|
+
from project.sqlalchemy_db_.sqlalchemy_model.common import SimpleDBM
|
11
|
+
|
12
|
+
if TYPE_CHECKING:
|
13
|
+
pass
|
14
|
+
|
15
|
+
|
16
|
+
def generate_default_api_key_value() -> str:
|
17
|
+
return (
|
18
|
+
f"apikey"
|
19
|
+
f"{str(uuid4()).replace('-', '')}"
|
20
|
+
f"{str(now_utc_dt().timestamp()).replace('.', '')}"
|
21
|
+
)
|
22
|
+
|
23
|
+
|
24
|
+
class ApiKeyDBM(SimpleDBM):
|
25
|
+
__tablename__ = "api_key"
|
26
|
+
|
27
|
+
title: Mapped[str | None] = mapped_column(
|
28
|
+
sqlalchemy.TEXT,
|
29
|
+
insert_default=None,
|
30
|
+
nullable=True
|
31
|
+
)
|
32
|
+
value: Mapped[str] = mapped_column(
|
33
|
+
sqlalchemy.TEXT,
|
34
|
+
unique=True,
|
35
|
+
insert_default=generate_default_api_key_value,
|
36
|
+
nullable=False
|
37
|
+
)
|
38
|
+
is_enabled: Mapped[bool] = mapped_column(
|
39
|
+
sqlalchemy.Boolean,
|
40
|
+
index=True,
|
41
|
+
insert_default=True,
|
42
|
+
server_default="true",
|
43
|
+
nullable=False
|
44
|
+
)
|
@@ -1,4 +1,5 @@
|
|
1
1
|
from datetime import datetime
|
2
|
+
from typing import Any
|
2
3
|
|
3
4
|
import sqlalchemy
|
4
5
|
from sqlalchemy import func
|
@@ -13,18 +14,40 @@ class SimpleDBM(BaseDBM):
|
|
13
14
|
__abstract__ = True
|
14
15
|
|
15
16
|
id: Mapped[int] = mapped_column(
|
16
|
-
sqlalchemy.INTEGER,
|
17
|
+
sqlalchemy.INTEGER,
|
18
|
+
primary_key=True,
|
19
|
+
autoincrement=True,
|
20
|
+
sort_order=-103,
|
21
|
+
nullable=False
|
17
22
|
)
|
18
23
|
long_id: Mapped[str] = mapped_column(
|
19
|
-
sqlalchemy.TEXT,
|
20
|
-
|
24
|
+
sqlalchemy.TEXT,
|
25
|
+
insert_default=generate_default_long_id,
|
26
|
+
server_default=func.gen_random_uuid(),
|
27
|
+
unique=True,
|
28
|
+
sort_order=-102,
|
29
|
+
nullable=False
|
21
30
|
)
|
22
31
|
slug: Mapped[str | None] = mapped_column(
|
23
|
-
sqlalchemy.TEXT,
|
32
|
+
sqlalchemy.TEXT,
|
33
|
+
unique=True,
|
34
|
+
sort_order=-101,
|
35
|
+
nullable=True
|
24
36
|
)
|
25
37
|
creation_dt: Mapped[datetime] = mapped_column(
|
26
|
-
sqlalchemy.TIMESTAMP(timezone=True),
|
27
|
-
|
38
|
+
sqlalchemy.TIMESTAMP(timezone=True),
|
39
|
+
insert_default=now_utc_dt,
|
40
|
+
server_default=func.now(),
|
41
|
+
index=True,
|
42
|
+
sort_order=-100,
|
43
|
+
nullable=False
|
44
|
+
)
|
45
|
+
extra_data: Mapped[dict[str, Any] | None] = mapped_column(
|
46
|
+
sqlalchemy.JSON,
|
47
|
+
index=False,
|
48
|
+
nullable=True,
|
49
|
+
insert_default=None,
|
50
|
+
sort_order=1000,
|
28
51
|
)
|
29
52
|
|
30
53
|
def __repr__(self) -> str:
|
@@ -23,7 +23,8 @@ class StoryLogDBM(SimpleDBM):
|
|
23
23
|
|
24
24
|
class Types(Enumeration):
|
25
25
|
error_in_execute_operation = "error_in_execute_operation"
|
26
|
-
|
26
|
+
error_in_api = "error_in_api"
|
27
|
+
error_in_tg_bot = "error_in_tg_bot"
|
27
28
|
|
28
29
|
level: Mapped[str] = mapped_column(
|
29
30
|
sqlalchemy.TEXT, insert_default=Levels.info, server_default=Levels.info, index=True, nullable=False
|