arpakitlib 1.8.18__py3-none-any.whl → 1.8.20__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_5/arpakitlib_project_template_info.json +3 -0
- arpakitlib/_arpakit_project_template_v_5/command/alembic_revision_autogenerate.sh +2 -0
- arpakitlib/_arpakit_project_template_v_5/command/reinit_all_sqlalchemy_db.py +13 -0
- arpakitlib/{_arpakit_project_template_v_4/project/api/auth2.py → _arpakit_project_template_v_5/project/api/auth.py} +133 -26
- arpakitlib/{_arpakit_project_template_v_4 → _arpakit_project_template_v_5}/project/api/exception_handler.py +11 -12
- arpakitlib/{_arpakit_project_template_v_4 → _arpakit_project_template_v_5}/project/api/router/admin/get_arpakitlib_project_template_info.py +9 -3
- arpakitlib/{_arpakit_project_template_v_4 → _arpakit_project_template_v_5}/project/api/router/admin/get_auth_data.py +7 -9
- arpakitlib/_arpakit_project_template_v_5/project/api/router/admin/main_router.py +20 -0
- arpakitlib/_arpakit_project_template_v_5/project/api/router/admin/raise_fake_error.py +27 -0
- arpakitlib/{_arpakit_project_template_v_4 → _arpakit_project_template_v_5}/project/api/router/client/get_errors_info.py +8 -2
- arpakitlib/_arpakit_project_template_v_5/project/api/router/client/main_router.py +10 -0
- arpakitlib/_arpakit_project_template_v_5/project/api/router/general/main_router.py +14 -0
- arpakitlib/{_arpakit_project_template_v_4/project/api/router/client → _arpakit_project_template_v_5/project/api/router/general}/now_utc_datetime.py +3 -3
- arpakitlib/{_arpakit_project_template_v_4 → _arpakit_project_template_v_5}/project/api/schema/out/admin/common.py +1 -1
- arpakitlib/{_arpakit_project_template_v_4 → _arpakit_project_template_v_5}/project/api/schema/out/admin/operation.py +2 -2
- arpakitlib/{_arpakit_project_template_v_4 → _arpakit_project_template_v_5}/project/api/schema/out/admin/story_log.py +2 -2
- arpakitlib/_arpakit_project_template_v_5/project/api/schema/out/admin/user.py +22 -0
- arpakitlib/_arpakit_project_template_v_5/project/api/schema/out/admin/user_token.py +14 -0
- arpakitlib/{_arpakit_project_template_v_4 → _arpakit_project_template_v_5}/project/api/schema/out/client/common.py +1 -1
- arpakitlib/{_arpakit_project_template_v_4/project/api/schema/out/general → _arpakit_project_template_v_5/project/api/schema/out/common}/error.py +1 -1
- arpakitlib/{_arpakit_project_template_v_4 → _arpakit_project_template_v_5}/project/core/settings.py +3 -17
- arpakitlib/{_arpakit_project_template_v_4 → _arpakit_project_template_v_5}/project/operation_execution/operation_executor_worker.py +2 -2
- arpakitlib/{_arpakit_project_template_v_4 → _arpakit_project_template_v_5}/project/sandbox/sandbox_1.py +3 -1
- arpakitlib/{_arpakit_project_template_v_4 → _arpakit_project_template_v_5}/project/sqlalchemy_db_/sqlalchemy_model/api_key.py +1 -1
- arpakitlib/{_arpakit_project_template_v_4 → _arpakit_project_template_v_5}/project/sqlalchemy_db_/sqlalchemy_model/user.py +2 -2
- arpakitlib/{_arpakit_project_template_v_4 → _arpakit_project_template_v_5}/project/sqlalchemy_db_/sqlalchemy_model/user_token.py +1 -1
- arpakitlib/_arpakit_project_template_v_5/project/test_data/make_test_api_keys.py +35 -0
- arpakitlib/{_arpakit_project_template_v_4 → _arpakit_project_template_v_5}/project/test_data/make_test_data_1.py +4 -2
- arpakitlib/{_arpakit_project_template_v_4 → _arpakit_project_template_v_5}/project/test_data/make_test_data_2.py +4 -2
- arpakitlib/{_arpakit_project_template_v_4 → _arpakit_project_template_v_5}/project/test_data/make_test_data_3.py +4 -2
- arpakitlib/{_arpakit_project_template_v_4 → _arpakit_project_template_v_5}/project/test_data/make_test_data_4.py +4 -2
- arpakitlib/{_arpakit_project_template_v_4 → _arpakit_project_template_v_5}/project/test_data/make_test_data_5.py +4 -2
- arpakitlib/{_arpakit_project_template_v_4 → _arpakit_project_template_v_5}/project/tg_bot/blank/admin.py +2 -8
- arpakitlib/_arpakit_project_template_v_5/project/tg_bot/blank/client.py +69 -0
- arpakitlib/{_arpakit_project_template_v_4 → _arpakit_project_template_v_5}/project/tg_bot/callback/client.py +4 -0
- arpakitlib/{_arpakit_project_template_v_4 → _arpakit_project_template_v_5}/project/tg_bot/const.py +7 -6
- arpakitlib/_arpakit_project_template_v_5/project/tg_bot/filter_/user_roles_has_admin.py +18 -0
- arpakitlib/_arpakit_project_template_v_5/project/tg_bot/filter_/user_roles_has_client.py +18 -0
- arpakitlib/{_arpakit_project_template_v_4 → _arpakit_project_template_v_5}/project/tg_bot/middleware/init_user.py +9 -8
- arpakitlib/{_arpakit_project_template_v_4 → _arpakit_project_template_v_5}/project/tg_bot/router/admin/arpakitlib_project_template_info.py +6 -4
- arpakitlib/_arpakit_project_template_v_5/project/tg_bot/router/admin/clear_log_file.py +33 -0
- arpakitlib/_arpakit_project_template_v_5/project/tg_bot/router/admin/drop_sqlalchemy_db.py +31 -0
- arpakitlib/_arpakit_project_template_v_5/project/tg_bot/router/admin/init_sqlalchemy_db.py +28 -0
- arpakitlib/_arpakit_project_template_v_5/project/tg_bot/router/admin/kb_with_not_modified.py +59 -0
- arpakitlib/_arpakit_project_template_v_5/project/tg_bot/router/admin/kb_with_old_cd.py +40 -0
- arpakitlib/_arpakit_project_template_v_5/project/tg_bot/router/admin/kb_with_raise_error.py +48 -0
- arpakitlib/_arpakit_project_template_v_5/project/tg_bot/router/admin/kb_with_remove_message.py +35 -0
- arpakitlib/_arpakit_project_template_v_5/project/tg_bot/router/admin/log_file.py +37 -0
- arpakitlib/{_arpakit_project_template_v_4 → _arpakit_project_template_v_5}/project/tg_bot/router/admin/me.py +4 -0
- arpakitlib/{_arpakit_project_template_v_4 → _arpakit_project_template_v_5}/project/tg_bot/router/admin/raise_fake_error.py +5 -1
- arpakitlib/{_arpakit_project_template_v_4 → _arpakit_project_template_v_5}/project/tg_bot/router/admin/reinit_sqlalchemy_db.py +7 -3
- arpakitlib/_arpakit_project_template_v_5/project/tg_bot/router/admin/set_tg_bot_commands.py +28 -0
- arpakitlib/_arpakit_project_template_v_5/project/tg_bot/router/client/about.py +30 -0
- arpakitlib/_arpakit_project_template_v_5/project/tg_bot/router/client/error_handler.py +91 -0
- arpakitlib/{_arpakit_project_template_v_4 → _arpakit_project_template_v_5}/project/tg_bot/router/client/healthcheck.py +3 -1
- arpakitlib/{_arpakit_project_template_v_4 → _arpakit_project_template_v_5}/project/tg_bot/router/client/hello_world.py +5 -2
- arpakitlib/_arpakit_project_template_v_5/project/tg_bot/router/client/raw_callback_query.py +30 -0
- arpakitlib/_arpakit_project_template_v_5/project/tg_bot/router/client/raw_inline_query.py +14 -0
- arpakitlib/_arpakit_project_template_v_5/project/tg_bot/router/client/raw_message.py +15 -0
- arpakitlib/_arpakit_project_template_v_5/project/tg_bot/router/client/remove_message.py +28 -0
- arpakitlib/{_arpakit_project_template_v_4 → _arpakit_project_template_v_5}/project/tg_bot/router/client/start.py +3 -2
- arpakitlib/_arpakit_project_template_v_5/project/tg_bot/router/client/support.py +30 -0
- arpakitlib/_arpakit_project_template_v_5/project/tg_bot/router/main_router.py +36 -0
- arpakitlib/_arpakit_project_template_v_5/project/tg_bot/util/notify_admins.py +58 -0
- arpakitlib/{_arpakit_project_template_v_4 → _arpakit_project_template_v_5}/project/tg_bot/util/set_tg_bot_commands.py +26 -4
- arpakitlib/_arpakit_project_template_v_5/project/util/__init__.py +0 -0
- arpakitlib/ar_base_worker_util.py +7 -7
- arpakitlib/ar_blank_util.py +2 -2
- arpakitlib/ar_func_util.py +21 -14
- arpakitlib/ar_sqlalchemy_util.py +9 -3
- {arpakitlib-1.8.18.dist-info → arpakitlib-1.8.20.dist-info}/METADATA +1 -1
- arpakitlib-1.8.20.dist-info/RECORD +348 -0
- arpakitlib/_arpakit_project_template_v_4/arpakitlib_project_template_info.json +0 -3
- arpakitlib/_arpakit_project_template_v_4/command/alembic_revision_autogenerate.sh +0 -2
- arpakitlib/_arpakit_project_template_v_4/project/api/auth.py +0 -353
- arpakitlib/_arpakit_project_template_v_4/project/api/router/admin/main_router.py +0 -3
- arpakitlib/_arpakit_project_template_v_4/project/api/router/client/main_router.py +0 -3
- arpakitlib/_arpakit_project_template_v_4/project/api/router/general/main_router.py +0 -10
- arpakitlib/_arpakit_project_template_v_4/project/api/schema/out/common.py +0 -5
- arpakitlib/_arpakit_project_template_v_4/project/tg_bot/blank/client.py +0 -44
- arpakitlib/_arpakit_project_template_v_4/project/tg_bot/error_handler.py +0 -37
- arpakitlib/_arpakit_project_template_v_4/project/tg_bot/filter_/user_roles_has_admin.py +0 -27
- arpakitlib/_arpakit_project_template_v_4/project/tg_bot/filter_/user_roles_has_client.py +0 -27
- arpakitlib/_arpakit_project_template_v_4/project/tg_bot/router/admin/main_router.py +0 -15
- arpakitlib/_arpakit_project_template_v_4/project/tg_bot/router/client/main_router.py +0 -14
- arpakitlib/_arpakit_project_template_v_4/project/tg_bot/router/main_router.py +0 -13
- arpakitlib-1.8.18.dist-info/RECORD +0 -330
- arpakitlib/{_arpakit_project_template_v_4 → _arpakit_project_template_v_5}/.gitignore +0 -0
- arpakitlib/{_arpakit_project_template_v_4 → _arpakit_project_template_v_5}/.python-version +0 -0
- arpakitlib/{_arpakit_project_template_v_4 → _arpakit_project_template_v_5}/LICENSE +0 -0
- arpakitlib/{_arpakit_project_template_v_4 → _arpakit_project_template_v_5}/README.md +0 -0
- arpakitlib/{_arpakit_project_template_v_4 → _arpakit_project_template_v_5}/alembic/README +0 -0
- arpakitlib/{_arpakit_project_template_v_4 → _arpakit_project_template_v_5}/alembic/env.py +0 -0
- arpakitlib/{_arpakit_project_template_v_4 → _arpakit_project_template_v_5}/alembic/script.py.mako +0 -0
- arpakitlib/{_arpakit_project_template_v_4 → _arpakit_project_template_v_5}/alembic/versions/__init__.py +0 -0
- arpakitlib/{_arpakit_project_template_v_4 → _arpakit_project_template_v_5}/alembic.ini +0 -0
- arpakitlib/{_arpakit_project_template_v_4 → _arpakit_project_template_v_5}/command/__init__.py +0 -0
- arpakitlib/{_arpakit_project_template_v_4 → _arpakit_project_template_v_5}/command/alembic_history.sh +0 -0
- arpakitlib/{_arpakit_project_template_v_4 → _arpakit_project_template_v_5}/command/alembic_upgrade_head.sh +0 -0
- arpakitlib/{_arpakit_project_template_v_4 → _arpakit_project_template_v_5}/command/beautify_json.py +0 -0
- arpakitlib/{_arpakit_project_template_v_4 → _arpakit_project_template_v_5}/command/check_logging.py +0 -0
- arpakitlib/{_arpakit_project_template_v_4 → _arpakit_project_template_v_5}/command/check_sqlalchemy_db.py +0 -0
- arpakitlib/{_arpakit_project_template_v_4 → _arpakit_project_template_v_5}/command/demojize.py +0 -0
- arpakitlib/{_arpakit_project_template_v_4 → _arpakit_project_template_v_5}/command/docker_ps_a.sh +0 -0
- arpakitlib/{_arpakit_project_template_v_4 → _arpakit_project_template_v_5}/command/docker_rm_postgres.sh +0 -0
- arpakitlib/{_arpakit_project_template_v_4 → _arpakit_project_template_v_5}/command/docker_run_postgres.sh +0 -0
- arpakitlib/{_arpakit_project_template_v_4 → _arpakit_project_template_v_5}/command/docker_start_postgres.sh +0 -0
- arpakitlib/{_arpakit_project_template_v_4 → _arpakit_project_template_v_5}/command/docker_stop_postgres.sh +0 -0
- arpakitlib/{_arpakit_project_template_v_4 → _arpakit_project_template_v_5}/command/drop_json_db.py +0 -0
- arpakitlib/{_arpakit_project_template_v_4 → _arpakit_project_template_v_5}/command/drop_sqlalchemy_db.py +0 -0
- arpakitlib/{_arpakit_project_template_v_4 → _arpakit_project_template_v_5}/command/generate_settings_env_example.py +0 -0
- arpakitlib/{_arpakit_project_template_v_4 → _arpakit_project_template_v_5}/command/git_commit.sh +0 -0
- arpakitlib/{_arpakit_project_template_v_4 → _arpakit_project_template_v_5}/command/git_push_arpakit_company_github_1.sh +0 -0
- arpakitlib/{_arpakit_project_template_v_4 → _arpakit_project_template_v_5}/command/git_push_arpakit_company_gitlab_1.sh +0 -0
- arpakitlib/{_arpakit_project_template_v_4 → _arpakit_project_template_v_5}/command/git_push_arpakit_github_1.sh +0 -0
- arpakitlib/{_arpakit_project_template_v_4 → _arpakit_project_template_v_5}/command/git_push_arpakit_gitlab_1.sh +0 -0
- arpakitlib/{_arpakit_project_template_v_4 → _arpakit_project_template_v_5}/command/git_remote_v.sh +0 -0
- arpakitlib/{_arpakit_project_template_v_4 → _arpakit_project_template_v_5}/command/git_set_arpakit_company_origin.sh +0 -0
- arpakitlib/{_arpakit_project_template_v_4 → _arpakit_project_template_v_5}/command/git_set_arpakit_origin.sh +0 -0
- arpakitlib/{_arpakit_project_template_v_4 → _arpakit_project_template_v_5}/command/git_set_divarteam_origin.sh +0 -0
- arpakitlib/{_arpakit_project_template_v_4 → _arpakit_project_template_v_5}/command/git_status.sh +0 -0
- arpakitlib/{_arpakit_project_template_v_4 → _arpakit_project_template_v_5}/command/hello_world.py +0 -0
- arpakitlib/{_arpakit_project_template_v_4 → _arpakit_project_template_v_5}/command/init_json_db.py +0 -0
- arpakitlib/{_arpakit_project_template_v_4 → _arpakit_project_template_v_5}/command/init_sqlalchemy_db.py +0 -0
- arpakitlib/{_arpakit_project_template_v_4 → _arpakit_project_template_v_5}/command/poetry_check.sh +0 -0
- arpakitlib/{_arpakit_project_template_v_4 → _arpakit_project_template_v_5}/command/poetry_clear_cache.sh +0 -0
- arpakitlib/{_arpakit_project_template_v_4 → _arpakit_project_template_v_5}/command/poetry_config.sh +0 -0
- arpakitlib/{_arpakit_project_template_v_4 → _arpakit_project_template_v_5}/command/poetry_install.sh +0 -0
- arpakitlib/{_arpakit_project_template_v_4 → _arpakit_project_template_v_5}/command/poetry_lock.sh +0 -0
- arpakitlib/{_arpakit_project_template_v_4 → _arpakit_project_template_v_5}/command/poetry_remove_and_add_arpakitlib.sh +0 -0
- arpakitlib/{_arpakit_project_template_v_4 → _arpakit_project_template_v_5}/command/poetry_show.sh +0 -0
- arpakitlib/{_arpakit_project_template_v_4 → _arpakit_project_template_v_5}/command/poetry_show_arpakitlib.sh +0 -0
- arpakitlib/{_arpakit_project_template_v_4 → _arpakit_project_template_v_5}/command/poetry_update.sh +0 -0
- arpakitlib/{_arpakit_project_template_v_4 → _arpakit_project_template_v_5}/command/poetry_update_arpakitlib.sh +0 -0
- arpakitlib/{_arpakit_project_template_v_4 → _arpakit_project_template_v_5}/command/reinit_json_db.py +0 -0
- arpakitlib/{_arpakit_project_template_v_4 → _arpakit_project_template_v_5}/command/reinit_sqlalchemy_db.py +0 -0
- arpakitlib/{_arpakit_project_template_v_4 → _arpakit_project_template_v_5}/command/remove_operations.py +0 -0
- arpakitlib/{_arpakit_project_template_v_4 → _arpakit_project_template_v_5}/command/remove_story_logs.py +0 -0
- arpakitlib/{_arpakit_project_template_v_4 → _arpakit_project_template_v_5}/command/rm_all_records_in_json_db.py +0 -0
- arpakitlib/{_arpakit_project_template_v_4 → _arpakit_project_template_v_5}/command/set_tg_bot_commands.py +0 -0
- arpakitlib/{_arpakit_project_template_v_4 → _arpakit_project_template_v_5}/command/show_settings.py +0 -0
- arpakitlib/{_arpakit_project_template_v_4 → _arpakit_project_template_v_5}/command/start_api.py +0 -0
- arpakitlib/{_arpakit_project_template_v_4 → _arpakit_project_template_v_5}/command/start_api_for_prod.py +0 -0
- arpakitlib/{_arpakit_project_template_v_4 → _arpakit_project_template_v_5}/command/start_api_with_reload.py +0 -0
- arpakitlib/{_arpakit_project_template_v_4 → _arpakit_project_template_v_5}/command/start_operation_executor_worker.py +0 -0
- arpakitlib/{_arpakit_project_template_v_4 → _arpakit_project_template_v_5}/command/start_operation_executor_workers.py +0 -0
- arpakitlib/{_arpakit_project_template_v_4 → _arpakit_project_template_v_5}/command/start_scheduled_operation_creator_worker.py +0 -0
- arpakitlib/{_arpakit_project_template_v_4 → _arpakit_project_template_v_5}/command/start_sqladmin.py +0 -0
- arpakitlib/{_arpakit_project_template_v_4 → _arpakit_project_template_v_5}/command/start_sqladmin_for_prod.py +0 -0
- arpakitlib/{_arpakit_project_template_v_4 → _arpakit_project_template_v_5}/command/start_sqladmin_with_reload.py +0 -0
- arpakitlib/{_arpakit_project_template_v_4 → _arpakit_project_template_v_5}/command/start_tg_bot.py +0 -0
- arpakitlib/{_arpakit_project_template_v_4 → _arpakit_project_template_v_5}/command/start_tg_bot_for_prod.py +0 -0
- arpakitlib/{_arpakit_project_template_v_4 → _arpakit_project_template_v_5}/example.env +0 -0
- arpakitlib/{_arpakit_project_template_v_4 → _arpakit_project_template_v_5}/note/note_1.txt +0 -0
- arpakitlib/{_arpakit_project_template_v_4 → _arpakit_project_template_v_5}/note/note_2.txt +0 -0
- arpakitlib/{_arpakit_project_template_v_4 → _arpakit_project_template_v_5}/note/note_3.txt +0 -0
- arpakitlib/{_arpakit_project_template_v_4 → _arpakit_project_template_v_5}/note/note_4.txt +0 -0
- arpakitlib/{_arpakit_project_template_v_4 → _arpakit_project_template_v_5}/note/note_5.txt +0 -0
- arpakitlib/{_arpakit_project_template_v_4 → _arpakit_project_template_v_5}/project/__init__.py +0 -0
- arpakitlib/{_arpakit_project_template_v_4 → _arpakit_project_template_v_5}/project/additional_model/__init__.py +0 -0
- arpakitlib/{_arpakit_project_template_v_4 → _arpakit_project_template_v_5}/project/additional_model/common.py +0 -0
- arpakitlib/{_arpakit_project_template_v_4 → _arpakit_project_template_v_5}/project/api/__init__.py +0 -0
- arpakitlib/{_arpakit_project_template_v_4 → _arpakit_project_template_v_5}/project/api/asgi.py +0 -0
- arpakitlib/{_arpakit_project_template_v_4 → _arpakit_project_template_v_5}/project/api/const.py +0 -0
- arpakitlib/{_arpakit_project_template_v_4 → _arpakit_project_template_v_5}/project/api/create_api_app.py +0 -0
- arpakitlib/{_arpakit_project_template_v_4 → _arpakit_project_template_v_5}/project/api/event.py +0 -0
- arpakitlib/{_arpakit_project_template_v_4 → _arpakit_project_template_v_5}/project/api/exception.py +1 -1
- arpakitlib/{_arpakit_project_template_v_4 → _arpakit_project_template_v_5}/project/api/openapi_ui.py +0 -0
- arpakitlib/{_arpakit_project_template_v_4 → _arpakit_project_template_v_5}/project/api/response.py +0 -0
- arpakitlib/{_arpakit_project_template_v_4 → _arpakit_project_template_v_5}/project/api/router/__init__.py +0 -0
- arpakitlib/{_arpakit_project_template_v_4 → _arpakit_project_template_v_5}/project/api/router/admin/__init__.py +0 -0
- arpakitlib/{_arpakit_project_template_v_4 → _arpakit_project_template_v_5}/project/api/router/client/__init__.py +0 -0
- arpakitlib/{_arpakit_project_template_v_4 → _arpakit_project_template_v_5}/project/api/router/general/__init__.py +0 -0
- arpakitlib/{_arpakit_project_template_v_4 → _arpakit_project_template_v_5}/project/api/router/general/healthcheck.py +1 -1
- /arpakitlib/{_arpakit_project_template_v_4 → _arpakit_project_template_v_5}/project/api/router/main_router.py +0 -0
- /arpakitlib/{_arpakit_project_template_v_4 → _arpakit_project_template_v_5}/project/api/schema/__init__.py +0 -0
- /arpakitlib/{_arpakit_project_template_v_4 → _arpakit_project_template_v_5}/project/api/schema/common.py +0 -0
- /arpakitlib/{_arpakit_project_template_v_4 → _arpakit_project_template_v_5}/project/api/schema/in_/__init__.py +0 -0
- /arpakitlib/{_arpakit_project_template_v_4 → _arpakit_project_template_v_5}/project/api/schema/in_/admin/__init__.py +0 -0
- /arpakitlib/{_arpakit_project_template_v_4 → _arpakit_project_template_v_5}/project/api/schema/in_/admin/common.py +0 -0
- /arpakitlib/{_arpakit_project_template_v_4 → _arpakit_project_template_v_5}/project/api/schema/in_/client/__init__.py +0 -0
- /arpakitlib/{_arpakit_project_template_v_4 → _arpakit_project_template_v_5}/project/api/schema/in_/client/common.py +0 -0
- /arpakitlib/{_arpakit_project_template_v_4/project/api/schema/in_/general → _arpakit_project_template_v_5/project/api/schema/in_/common}/__init__.py +0 -0
- /arpakitlib/{_arpakit_project_template_v_4/project/api/schema/out → _arpakit_project_template_v_5/project/api/schema/in_/general}/__init__.py +0 -0
- /arpakitlib/{_arpakit_project_template_v_4 → _arpakit_project_template_v_5}/project/api/schema/in_/general/common.py +0 -0
- /arpakitlib/{_arpakit_project_template_v_4/project/api/schema/out/admin → _arpakit_project_template_v_5/project/api/schema/out}/__init__.py +0 -0
- /arpakitlib/{_arpakit_project_template_v_4/project/api/schema/out/client → _arpakit_project_template_v_5/project/api/schema/out/admin}/__init__.py +0 -0
- /arpakitlib/{_arpakit_project_template_v_4/project/api/schema/out/common → _arpakit_project_template_v_5/project/api/schema/out/client}/__init__.py +0 -0
- /arpakitlib/{_arpakit_project_template_v_4/project/api/schema/out/general → _arpakit_project_template_v_5/project/api/schema/out/common}/__init__.py +0 -0
- /arpakitlib/{_arpakit_project_template_v_4 → _arpakit_project_template_v_5}/project/api/schema/out/common/datetime_.py +0 -0
- /arpakitlib/{_arpakit_project_template_v_4 → _arpakit_project_template_v_5}/project/api/schema/out/common/raw_data.py +0 -0
- /arpakitlib/{_arpakit_project_template_v_4/project/business_service → _arpakit_project_template_v_5/project/api/schema/out/general}/__init__.py +0 -0
- /arpakitlib/{_arpakit_project_template_v_4 → _arpakit_project_template_v_5}/project/api/schema/out/general/common.py +0 -0
- /arpakitlib/{_arpakit_project_template_v_4 → _arpakit_project_template_v_5}/project/api/schema/out/general/errors_info_general.py +0 -0
- /arpakitlib/{_arpakit_project_template_v_4 → _arpakit_project_template_v_5}/project/api/schema/out/general/healthcheck.py +0 -0
- /arpakitlib/{_arpakit_project_template_v_4 → _arpakit_project_template_v_5}/project/api/util.py +0 -0
- /arpakitlib/{_arpakit_project_template_v_4/project/celery_ → _arpakit_project_template_v_5/project/business_service}/__init__.py +0 -0
- /arpakitlib/{_arpakit_project_template_v_4 → _arpakit_project_template_v_5}/project/business_service/hello_world.py +0 -0
- /arpakitlib/{_arpakit_project_template_v_4 → _arpakit_project_template_v_5}/project/business_service/remove_operations.py +0 -0
- /arpakitlib/{_arpakit_project_template_v_4/project/core → _arpakit_project_template_v_5/project/celery_}/__init__.py +0 -0
- /arpakitlib/{_arpakit_project_template_v_4/project/json_db → _arpakit_project_template_v_5/project/core}/__init__.py +0 -0
- /arpakitlib/{_arpakit_project_template_v_4 → _arpakit_project_template_v_5}/project/core/cache_file_storage_in_dir.py +0 -0
- /arpakitlib/{_arpakit_project_template_v_4 → _arpakit_project_template_v_5}/project/core/const.py +0 -0
- /arpakitlib/{_arpakit_project_template_v_4 → _arpakit_project_template_v_5}/project/core/dump_file_storage_in_dir.py +0 -0
- /arpakitlib/{_arpakit_project_template_v_4 → _arpakit_project_template_v_5}/project/core/jinja2_templates.py +0 -0
- /arpakitlib/{_arpakit_project_template_v_4 → _arpakit_project_template_v_5}/project/core/media_file_storage_in_dir.py +0 -0
- /arpakitlib/{_arpakit_project_template_v_4 → _arpakit_project_template_v_5}/project/core/util.py +0 -0
- /arpakitlib/{_arpakit_project_template_v_4/project/operation_execution → _arpakit_project_template_v_5/project/json_db}/__init__.py +0 -0
- /arpakitlib/{_arpakit_project_template_v_4 → _arpakit_project_template_v_5}/project/json_db/json_db.py +0 -0
- /arpakitlib/{_arpakit_project_template_v_4 → _arpakit_project_template_v_5}/project/more/helloworld +0 -0
- /arpakitlib/{_arpakit_project_template_v_4/project/resource → _arpakit_project_template_v_5/project/operation_execution}/__init__.py +0 -0
- /arpakitlib/{_arpakit_project_template_v_4 → _arpakit_project_template_v_5}/project/operation_execution/const.py +0 -0
- /arpakitlib/{_arpakit_project_template_v_4 → _arpakit_project_template_v_5}/project/operation_execution/scheduled_operation_creator_worker.py +0 -0
- /arpakitlib/{_arpakit_project_template_v_4 → _arpakit_project_template_v_5}/project/operation_execution/scheduled_operations.py +0 -0
- /arpakitlib/{_arpakit_project_template_v_4 → _arpakit_project_template_v_5}/project/operation_execution/util.py +0 -0
- /arpakitlib/{_arpakit_project_template_v_4/project/sandbox → _arpakit_project_template_v_5/project/resource}/__init__.py +0 -0
- /arpakitlib/{_arpakit_project_template_v_4 → _arpakit_project_template_v_5}/project/resource/static/1 +0 -0
- /arpakitlib/{_arpakit_project_template_v_4 → _arpakit_project_template_v_5}/project/resource/static/healthcheck +0 -0
- /arpakitlib/{_arpakit_project_template_v_4 → _arpakit_project_template_v_5}/project/resource/static/helloworld +0 -0
- /arpakitlib/{_arpakit_project_template_v_4 → _arpakit_project_template_v_5}/project/resource/static/openapi-favicon.png +0 -0
- /arpakitlib/{_arpakit_project_template_v_4 → _arpakit_project_template_v_5}/project/resource/static/redoc/redoc.standalone.js +0 -0
- /arpakitlib/{_arpakit_project_template_v_4 → _arpakit_project_template_v_5}/project/resource/static/swagger-ui/favicon-16x16.png +0 -0
- /arpakitlib/{_arpakit_project_template_v_4 → _arpakit_project_template_v_5}/project/resource/static/swagger-ui/favicon-32x32.png +0 -0
- /arpakitlib/{_arpakit_project_template_v_4 → _arpakit_project_template_v_5}/project/resource/static/swagger-ui/index.css +0 -0
- /arpakitlib/{_arpakit_project_template_v_4 → _arpakit_project_template_v_5}/project/resource/static/swagger-ui/index.html +0 -0
- /arpakitlib/{_arpakit_project_template_v_4 → _arpakit_project_template_v_5}/project/resource/static/swagger-ui/oauth2-redirect.html +0 -0
- /arpakitlib/{_arpakit_project_template_v_4 → _arpakit_project_template_v_5}/project/resource/static/swagger-ui/swagger-initializer.js +0 -0
- /arpakitlib/{_arpakit_project_template_v_4 → _arpakit_project_template_v_5}/project/resource/static/swagger-ui/swagger-ui-bundle.js +0 -0
- /arpakitlib/{_arpakit_project_template_v_4 → _arpakit_project_template_v_5}/project/resource/static/swagger-ui/swagger-ui-bundle.js.map +0 -0
- /arpakitlib/{_arpakit_project_template_v_4 → _arpakit_project_template_v_5}/project/resource/static/swagger-ui/swagger-ui-es-bundle-core.js +0 -0
- /arpakitlib/{_arpakit_project_template_v_4 → _arpakit_project_template_v_5}/project/resource/static/swagger-ui/swagger-ui-es-bundle-core.js.map +0 -0
- /arpakitlib/{_arpakit_project_template_v_4 → _arpakit_project_template_v_5}/project/resource/static/swagger-ui/swagger-ui-es-bundle.js +0 -0
- /arpakitlib/{_arpakit_project_template_v_4 → _arpakit_project_template_v_5}/project/resource/static/swagger-ui/swagger-ui-es-bundle.js.map +0 -0
- /arpakitlib/{_arpakit_project_template_v_4 → _arpakit_project_template_v_5}/project/resource/static/swagger-ui/swagger-ui-standalone-preset.js +0 -0
- /arpakitlib/{_arpakit_project_template_v_4 → _arpakit_project_template_v_5}/project/resource/static/swagger-ui/swagger-ui-standalone-preset.js.map +0 -0
- /arpakitlib/{_arpakit_project_template_v_4 → _arpakit_project_template_v_5}/project/resource/static/swagger-ui/swagger-ui.css +0 -0
- /arpakitlib/{_arpakit_project_template_v_4 → _arpakit_project_template_v_5}/project/resource/static/swagger-ui/swagger-ui.css.map +0 -0
- /arpakitlib/{_arpakit_project_template_v_4 → _arpakit_project_template_v_5}/project/resource/static/swagger-ui/swagger-ui.js +0 -0
- /arpakitlib/{_arpakit_project_template_v_4 → _arpakit_project_template_v_5}/project/resource/static/swagger-ui/swagger-ui.js.map +0 -0
- /arpakitlib/{_arpakit_project_template_v_4/project/site → _arpakit_project_template_v_5/project/sandbox}/__init__.py +0 -0
- /arpakitlib/{_arpakit_project_template_v_4 → _arpakit_project_template_v_5}/project/sandbox/sandbox_2.py +0 -0
- /arpakitlib/{_arpakit_project_template_v_4 → _arpakit_project_template_v_5}/project/sandbox/sandbox_3.py +0 -0
- /arpakitlib/{_arpakit_project_template_v_4 → _arpakit_project_template_v_5}/project/sandbox/sandbox_4.py +0 -0
- /arpakitlib/{_arpakit_project_template_v_4 → _arpakit_project_template_v_5}/project/sandbox/sandbox_5.py +0 -0
- /arpakitlib/{_arpakit_project_template_v_4 → _arpakit_project_template_v_5}/project/sandbox/sandbox_6.py +0 -0
- /arpakitlib/{_arpakit_project_template_v_4 → _arpakit_project_template_v_5}/project/sandbox/sandbox_7.py +0 -0
- /arpakitlib/{_arpakit_project_template_v_4/project/site/router → _arpakit_project_template_v_5/project/site}/__init__.py +0 -0
- /arpakitlib/{_arpakit_project_template_v_4 → _arpakit_project_template_v_5}/project/site/asgi.py +0 -0
- /arpakitlib/{_arpakit_project_template_v_4 → _arpakit_project_template_v_5}/project/site/consts.py +0 -0
- /arpakitlib/{_arpakit_project_template_v_4 → _arpakit_project_template_v_5}/project/site/create_site_app.py +0 -0
- /arpakitlib/{_arpakit_project_template_v_4 → _arpakit_project_template_v_5}/project/site/event.py +0 -0
- /arpakitlib/{_arpakit_project_template_v_4 → _arpakit_project_template_v_5}/project/site/exception_handler.py +0 -0
- /arpakitlib/{_arpakit_project_template_v_4/project/sqladmin_ → _arpakit_project_template_v_5/project/site/router}/__init__.py +0 -0
- /arpakitlib/{_arpakit_project_template_v_4 → _arpakit_project_template_v_5}/project/site/router/main_router.py +0 -0
- /arpakitlib/{_arpakit_project_template_v_4/project/sqlalchemy_db_ → _arpakit_project_template_v_5/project/sqladmin_}/__init__.py +0 -0
- /arpakitlib/{_arpakit_project_template_v_4 → _arpakit_project_template_v_5}/project/sqladmin_/add_admin_in_app.py +0 -0
- /arpakitlib/{_arpakit_project_template_v_4 → _arpakit_project_template_v_5}/project/sqladmin_/admin_auth.py +0 -0
- /arpakitlib/{_arpakit_project_template_v_4 → _arpakit_project_template_v_5}/project/sqladmin_/asgi.py +0 -0
- /arpakitlib/{_arpakit_project_template_v_4 → _arpakit_project_template_v_5}/project/sqladmin_/create_sqladmin_app.py +0 -0
- /arpakitlib/{_arpakit_project_template_v_4 → _arpakit_project_template_v_5}/project/sqladmin_/event.py +0 -0
- /arpakitlib/{_arpakit_project_template_v_4 → _arpakit_project_template_v_5}/project/sqladmin_/model_view/__init__.py +0 -0
- /arpakitlib/{_arpakit_project_template_v_4 → _arpakit_project_template_v_5}/project/sqladmin_/model_view/common.py +0 -0
- /arpakitlib/{_arpakit_project_template_v_4 → _arpakit_project_template_v_5}/project/sqladmin_/model_view/operation.py +0 -0
- /arpakitlib/{_arpakit_project_template_v_4 → _arpakit_project_template_v_5}/project/sqladmin_/model_view/story_log.py +0 -0
- /arpakitlib/{_arpakit_project_template_v_4/project/test_data → _arpakit_project_template_v_5/project/sqlalchemy_db_}/__init__.py +0 -0
- /arpakitlib/{_arpakit_project_template_v_4 → _arpakit_project_template_v_5}/project/sqlalchemy_db_/const.py +0 -0
- /arpakitlib/{_arpakit_project_template_v_4 → _arpakit_project_template_v_5}/project/sqlalchemy_db_/sqlalchemy_db.py +0 -0
- /arpakitlib/{_arpakit_project_template_v_4 → _arpakit_project_template_v_5}/project/sqlalchemy_db_/sqlalchemy_model/__init__.py +0 -0
- /arpakitlib/{_arpakit_project_template_v_4 → _arpakit_project_template_v_5}/project/sqlalchemy_db_/sqlalchemy_model/common.py +0 -0
- /arpakitlib/{_arpakit_project_template_v_4 → _arpakit_project_template_v_5}/project/sqlalchemy_db_/sqlalchemy_model/operation.py +0 -0
- /arpakitlib/{_arpakit_project_template_v_4 → _arpakit_project_template_v_5}/project/sqlalchemy_db_/sqlalchemy_model/story_log.py +0 -0
- /arpakitlib/{_arpakit_project_template_v_4 → _arpakit_project_template_v_5}/project/sqlalchemy_db_/util.py +0 -0
- /arpakitlib/{_arpakit_project_template_v_4/project/tg_bot → _arpakit_project_template_v_5/project/test_data}/__init__.py +0 -0
- /arpakitlib/{_arpakit_project_template_v_4/project/tg_bot/blank → _arpakit_project_template_v_5/project/tg_bot}/__init__.py +0 -0
- /arpakitlib/{_arpakit_project_template_v_4/project/tg_bot/callback → _arpakit_project_template_v_5/project/tg_bot/blank}/__init__.py +0 -0
- /arpakitlib/{_arpakit_project_template_v_4 → _arpakit_project_template_v_5}/project/tg_bot/blank/common.py +0 -0
- /arpakitlib/{_arpakit_project_template_v_4/project/tg_bot/filter_ → _arpakit_project_template_v_5/project/tg_bot/callback}/__init__.py +0 -0
- /arpakitlib/{_arpakit_project_template_v_4 → _arpakit_project_template_v_5}/project/tg_bot/callback/admin.py +0 -0
- /arpakitlib/{_arpakit_project_template_v_4 → _arpakit_project_template_v_5}/project/tg_bot/callback/common.py +0 -0
- /arpakitlib/{_arpakit_project_template_v_4 → _arpakit_project_template_v_5}/project/tg_bot/event.py +0 -0
- /arpakitlib/{_arpakit_project_template_v_4/project/tg_bot/kb → _arpakit_project_template_v_5/project/tg_bot/filter_}/__init__.py +0 -0
- /arpakitlib/{_arpakit_project_template_v_4 → _arpakit_project_template_v_5}/project/tg_bot/filter_/is_private_chat.py +0 -0
- /arpakitlib/{_arpakit_project_template_v_4 → _arpakit_project_template_v_5}/project/tg_bot/filter_/message_text.py +0 -0
- /arpakitlib/{_arpakit_project_template_v_4 → _arpakit_project_template_v_5}/project/tg_bot/filter_/not_prod_mode_filter.py +0 -0
- /arpakitlib/{_arpakit_project_template_v_4 → _arpakit_project_template_v_5}/project/tg_bot/filter_/prod_mode_filter.py +0 -0
- /arpakitlib/{_arpakit_project_template_v_4/project/tg_bot/kb/inline_ → _arpakit_project_template_v_5/project/tg_bot/kb}/__init__.py +0 -0
- /arpakitlib/{_arpakit_project_template_v_4/project/tg_bot/kb/inline_/admin → _arpakit_project_template_v_5/project/tg_bot/kb/inline_}/__init__.py +0 -0
- /arpakitlib/{_arpakit_project_template_v_4/project/tg_bot/kb/inline_/client → _arpakit_project_template_v_5/project/tg_bot/kb/inline_/admin}/__init__.py +0 -0
- /arpakitlib/{_arpakit_project_template_v_4 → _arpakit_project_template_v_5}/project/tg_bot/kb/inline_/admin/common.py +0 -0
- /arpakitlib/{_arpakit_project_template_v_4/project/tg_bot/kb/static_ → _arpakit_project_template_v_5/project/tg_bot/kb/inline_/client}/__init__.py +0 -0
- /arpakitlib/{_arpakit_project_template_v_4 → _arpakit_project_template_v_5}/project/tg_bot/kb/inline_/client/common.py +0 -0
- /arpakitlib/{_arpakit_project_template_v_4 → _arpakit_project_template_v_5}/project/tg_bot/kb/inline_/client/hello_world.py +0 -0
- /arpakitlib/{_arpakit_project_template_v_4 → _arpakit_project_template_v_5}/project/tg_bot/kb/inline_/common.py +0 -0
- /arpakitlib/{_arpakit_project_template_v_4/project/tg_bot/kb/static_/admin → _arpakit_project_template_v_5/project/tg_bot/kb/static_}/__init__.py +0 -0
- /arpakitlib/{_arpakit_project_template_v_4/project/tg_bot/kb/static_/client → _arpakit_project_template_v_5/project/tg_bot/kb/static_/admin}/__init__.py +0 -0
- /arpakitlib/{_arpakit_project_template_v_4 → _arpakit_project_template_v_5}/project/tg_bot/kb/static_/admin/common.py +0 -0
- /arpakitlib/{_arpakit_project_template_v_4/project/tg_bot/middleware → _arpakit_project_template_v_5/project/tg_bot/kb/static_/client}/__init__.py +0 -0
- /arpakitlib/{_arpakit_project_template_v_4 → _arpakit_project_template_v_5}/project/tg_bot/kb/static_/client/common.py +0 -0
- /arpakitlib/{_arpakit_project_template_v_4 → _arpakit_project_template_v_5}/project/tg_bot/kb/static_/client/hello_world.py +0 -0
- /arpakitlib/{_arpakit_project_template_v_4 → _arpakit_project_template_v_5}/project/tg_bot/kb/static_/common.py +0 -0
- /arpakitlib/{_arpakit_project_template_v_4/project/tg_bot/router → _arpakit_project_template_v_5/project/tg_bot/middleware}/__init__.py +0 -0
- /arpakitlib/{_arpakit_project_template_v_4 → _arpakit_project_template_v_5}/project/tg_bot/middleware/common.py +0 -0
- /arpakitlib/{_arpakit_project_template_v_4 → _arpakit_project_template_v_5}/project/tg_bot/middleware/middleware.py +0 -0
- /arpakitlib/{_arpakit_project_template_v_4/project/tg_bot/router/admin → _arpakit_project_template_v_5/project/tg_bot/router}/__init__.py +0 -0
- /arpakitlib/{_arpakit_project_template_v_4/project/tg_bot/router/client → _arpakit_project_template_v_5/project/tg_bot/router/admin}/__init__.py +0 -0
- /arpakitlib/{_arpakit_project_template_v_4/project/tg_bot/util → _arpakit_project_template_v_5/project/tg_bot/router/client}/__init__.py +0 -0
- /arpakitlib/{_arpakit_project_template_v_4 → _arpakit_project_template_v_5}/project/tg_bot/start_tg_bot.py +0 -0
- /arpakitlib/{_arpakit_project_template_v_4 → _arpakit_project_template_v_5}/project/tg_bot/tg_bot.py +0 -0
- /arpakitlib/{_arpakit_project_template_v_4 → _arpakit_project_template_v_5}/project/tg_bot/tg_bot_dispatcher.py +0 -0
- /arpakitlib/{_arpakit_project_template_v_4/project → _arpakit_project_template_v_5/project/tg_bot}/util/__init__.py +0 -0
- /arpakitlib/{_arpakit_project_template_v_4 → _arpakit_project_template_v_5}/project/tg_bot/util/etc.py +0 -0
- /arpakitlib/{_arpakit_project_template_v_4 → _arpakit_project_template_v_5}/project/util/arpakitlib_project_template.py +0 -0
- {arpakitlib-1.8.18.dist-info → arpakitlib-1.8.20.dist-info}/LICENSE +0 -0
- {arpakitlib-1.8.18.dist-info → arpakitlib-1.8.20.dist-info}/WHEEL +0 -0
- {arpakitlib-1.8.18.dist-info → arpakitlib-1.8.20.dist-info}/entry_points.txt +0 -0
@@ -0,0 +1,13 @@
|
|
1
|
+
from project.core.settings import get_cached_settings
|
2
|
+
from project.core.util import setup_logging
|
3
|
+
from project.sqlalchemy_db_.sqlalchemy_db import get_cached_sqlalchemy_db
|
4
|
+
|
5
|
+
|
6
|
+
def __command():
|
7
|
+
setup_logging()
|
8
|
+
get_cached_settings().raise_if_prod_mode()
|
9
|
+
get_cached_sqlalchemy_db().reinit_all()
|
10
|
+
|
11
|
+
|
12
|
+
if __name__ == '__main__':
|
13
|
+
__command()
|
@@ -1,18 +1,23 @@
|
|
1
|
-
|
1
|
+
import functools
|
2
|
+
from typing import Callable, Any
|
2
3
|
|
3
4
|
import fastapi
|
4
5
|
import fastapi.exceptions
|
5
6
|
import fastapi.responses
|
6
7
|
import fastapi.security
|
8
|
+
import sqlalchemy
|
7
9
|
from fastapi import Security
|
8
10
|
from fastapi.security import APIKeyHeader
|
9
11
|
from pydantic import BaseModel, ConfigDict
|
12
|
+
from sqlalchemy.orm import joinedload
|
10
13
|
|
11
|
-
from arpakitlib.ar_func_util import
|
14
|
+
from arpakitlib.ar_func_util import is_async_func, is_sync_func
|
12
15
|
from arpakitlib.ar_json_util import transfer_data_to_json_str_to_data
|
13
16
|
from project.api.const import APIErrorCodes
|
14
17
|
from project.api.exception import APIException
|
15
18
|
from project.core.settings import get_cached_settings
|
19
|
+
from project.sqlalchemy_db_.sqlalchemy_db import get_cached_sqlalchemy_db
|
20
|
+
from project.sqlalchemy_db_.sqlalchemy_model import ApiKeyDBM, UserTokenDBM
|
16
21
|
|
17
22
|
|
18
23
|
class APIAuthData(BaseModel):
|
@@ -21,15 +26,22 @@ class APIAuthData(BaseModel):
|
|
21
26
|
api_key_string: str | None = None
|
22
27
|
user_token_string: str | None = None
|
23
28
|
|
29
|
+
is_api_key_correct: bool | None = None
|
30
|
+
|
31
|
+
api_key_dbm: ApiKeyDBM | None = None
|
32
|
+
user_token_dbm: UserTokenDBM | None = None
|
33
|
+
|
24
34
|
prod_mode: bool = False
|
25
35
|
|
36
|
+
extra_data: dict[str, Any] = {}
|
37
|
+
|
26
38
|
|
27
39
|
def api_auth(
|
28
40
|
*,
|
29
|
-
|
41
|
+
middlewares: list[Callable] | None = None
|
30
42
|
) -> Callable:
|
31
|
-
if
|
32
|
-
|
43
|
+
if middlewares is None:
|
44
|
+
middlewares = []
|
33
45
|
|
34
46
|
async def async_func(
|
35
47
|
*,
|
@@ -46,7 +58,7 @@ def api_auth(
|
|
46
58
|
prod_mode=get_cached_settings().prod_mode
|
47
59
|
)
|
48
60
|
|
49
|
-
# parse
|
61
|
+
# parse api_key_string
|
50
62
|
|
51
63
|
api_auth_data.api_key_string = api_key_string
|
52
64
|
|
@@ -56,6 +68,8 @@ def api_auth(
|
|
56
68
|
api_auth_data.api_key_string = request.headers["api-key"]
|
57
69
|
if not api_auth_data.api_key_string and "apikey" in request.headers.keys():
|
58
70
|
api_auth_data.api_key_string = request.headers["apikey"]
|
71
|
+
if not api_auth_data.api_key_string and "api_key_string" in request.headers.keys():
|
72
|
+
api_auth_data.api_key_string = request.headers["api_key_string"]
|
59
73
|
|
60
74
|
if not api_auth_data.api_key_string and "api_key" in request.query_params.keys():
|
61
75
|
api_auth_data.api_key_string = request.query_params["api_key"]
|
@@ -63,13 +77,15 @@ def api_auth(
|
|
63
77
|
api_auth_data.api_key_string = request.query_params["api-key"]
|
64
78
|
if not api_auth_data.api_key_string and "apikey" in request.query_params.keys():
|
65
79
|
api_auth_data.api_key_string = request.query_params["apikey"]
|
80
|
+
if not api_auth_data.api_key_string and "api_key_string" in request.query_params.keys():
|
81
|
+
api_auth_data.api_key_string = request.query_params["api_key_string"]
|
66
82
|
|
67
83
|
if api_auth_data.api_key_string:
|
68
84
|
api_auth_data.api_key_string = api_auth_data.api_key_string.strip()
|
69
85
|
if not api_auth_data.api_key_string:
|
70
86
|
api_auth_data.api_key_string = None
|
71
87
|
|
72
|
-
# parse
|
88
|
+
# parse user_token_string
|
73
89
|
|
74
90
|
api_auth_data.user_token_string = ac.credentials if ac and ac.credentials and ac.credentials.strip() else None
|
75
91
|
|
@@ -98,74 +114,165 @@ def api_auth(
|
|
98
114
|
if not api_auth_data.user_token_string:
|
99
115
|
api_auth_data.user_token_string = None
|
100
116
|
|
101
|
-
#
|
117
|
+
# is_api_key_correct
|
118
|
+
|
119
|
+
if api_auth_data.api_key_string is not None:
|
120
|
+
if get_cached_settings().api_correct_api_keys is None:
|
121
|
+
api_auth_data.is_api_key_correct = None
|
122
|
+
else:
|
123
|
+
api_auth_data.is_api_key_correct = api_auth_data.api_key_string in get_cached_settings().api_correct_api_keys
|
124
|
+
|
125
|
+
# api_key_dbm
|
126
|
+
|
127
|
+
if api_auth_data.api_key_string is not None:
|
128
|
+
if get_cached_sqlalchemy_db() is not None:
|
129
|
+
async with get_cached_sqlalchemy_db().new_async_session() as async_session:
|
130
|
+
api_auth_data.api_key_dbm = await async_session.scalar(
|
131
|
+
sqlalchemy.select(ApiKeyDBM).where(ApiKeyDBM.value == api_auth_data.api_key_string)
|
132
|
+
)
|
133
|
+
|
134
|
+
# user_token_dbm
|
102
135
|
|
103
|
-
|
104
|
-
if
|
105
|
-
|
136
|
+
if api_auth_data.api_key_string is not None:
|
137
|
+
if get_cached_sqlalchemy_db() is not None:
|
138
|
+
async with get_cached_sqlalchemy_db().new_async_session() as async_session:
|
139
|
+
api_auth_data.user_token_dbm = await async_session.scalar(
|
140
|
+
sqlalchemy.select(UserTokenDBM)
|
141
|
+
.options(joinedload(UserTokenDBM.user))
|
142
|
+
.where(UserTokenDBM.value == api_auth_data.user_token_string)
|
143
|
+
)
|
144
|
+
|
145
|
+
# middlewares
|
146
|
+
|
147
|
+
for middleware in middlewares:
|
148
|
+
api_auth_data.extra_data[middleware.__name__] = True
|
149
|
+
|
150
|
+
for middleware in middlewares:
|
151
|
+
if is_async_func(middleware):
|
152
|
+
await middleware(
|
106
153
|
api_auth_data=api_auth_data,
|
107
154
|
request=request
|
108
155
|
)
|
109
|
-
elif
|
110
|
-
|
156
|
+
elif is_sync_func(middleware):
|
157
|
+
middleware(
|
111
158
|
api_auth_data=api_auth_data,
|
112
159
|
request=request
|
113
160
|
)
|
114
161
|
else:
|
115
|
-
raise TypeError("unknown
|
162
|
+
raise TypeError(f"unknown middleware type, {middleware.__name__}")
|
116
163
|
|
117
164
|
return api_auth_data
|
118
165
|
|
119
166
|
return async_func
|
120
167
|
|
121
168
|
|
122
|
-
def
|
169
|
+
def require_prod_mode_api_middleware():
|
170
|
+
@functools.wraps(require_prod_mode_api_middleware)
|
123
171
|
def func(*, api_auth_data: APIAuthData, request: fastapi.requests.Request):
|
124
|
-
if
|
172
|
+
if not get_cached_settings().prod_mode:
|
125
173
|
raise APIException(
|
126
174
|
status_code=fastapi.status.HTTP_401_UNAUTHORIZED,
|
127
175
|
error_code=APIErrorCodes.cannot_authorize,
|
128
|
-
error_description="
|
176
|
+
error_description=f"prod_mode={get_cached_settings().prod_mode}",
|
129
177
|
error_data=transfer_data_to_json_str_to_data(api_auth_data.model_dump())
|
130
178
|
)
|
131
179
|
|
132
180
|
return func
|
133
181
|
|
134
182
|
|
135
|
-
def
|
183
|
+
def require_not_prod_mode_api_middleware():
|
184
|
+
@functools.wraps(require_not_prod_mode_api_middleware)
|
136
185
|
def func(*, api_auth_data: APIAuthData, request: fastapi.requests.Request):
|
137
|
-
if
|
186
|
+
if get_cached_settings().prod_mode:
|
138
187
|
raise APIException(
|
139
188
|
status_code=fastapi.status.HTTP_401_UNAUTHORIZED,
|
140
189
|
error_code=APIErrorCodes.cannot_authorize,
|
141
|
-
error_description="
|
190
|
+
error_description=f"prod_mode={get_cached_settings().prod_mode}",
|
142
191
|
error_data=transfer_data_to_json_str_to_data(api_auth_data.model_dump())
|
143
192
|
)
|
144
193
|
|
145
194
|
return func
|
146
195
|
|
147
196
|
|
148
|
-
def
|
197
|
+
def require_api_key_string_api_middleware():
|
198
|
+
@functools.wraps(require_api_key_string_api_middleware)
|
149
199
|
def func(*, api_auth_data: APIAuthData, request: fastapi.requests.Request):
|
150
|
-
if
|
200
|
+
if api_auth_data.api_key_string is None:
|
151
201
|
raise APIException(
|
152
202
|
status_code=fastapi.status.HTTP_401_UNAUTHORIZED,
|
153
203
|
error_code=APIErrorCodes.cannot_authorize,
|
154
|
-
error_description=
|
204
|
+
error_description="api_key_string is required",
|
155
205
|
error_data=transfer_data_to_json_str_to_data(api_auth_data.model_dump())
|
156
206
|
)
|
157
207
|
|
158
208
|
return func
|
159
209
|
|
160
210
|
|
161
|
-
def
|
211
|
+
def require_user_token_string_api_middleware():
|
212
|
+
@functools.wraps(require_user_token_string_api_middleware)
|
162
213
|
def func(*, api_auth_data: APIAuthData, request: fastapi.requests.Request):
|
163
|
-
if
|
214
|
+
if api_auth_data.user_token_string is None:
|
164
215
|
raise APIException(
|
165
216
|
status_code=fastapi.status.HTTP_401_UNAUTHORIZED,
|
166
217
|
error_code=APIErrorCodes.cannot_authorize,
|
167
|
-
error_description=
|
218
|
+
error_description="user_token_string is required",
|
168
219
|
error_data=transfer_data_to_json_str_to_data(api_auth_data.model_dump())
|
169
220
|
)
|
170
221
|
|
171
222
|
return func
|
223
|
+
|
224
|
+
|
225
|
+
def require_correct_api_key_dbm_api_middleware():
|
226
|
+
@functools.wraps(require_correct_api_key_dbm_api_middleware)
|
227
|
+
def func(*, api_auth_data: APIAuthData, request: fastapi.requests.Request):
|
228
|
+
if not api_auth_data.is_api_key_correct:
|
229
|
+
raise APIException(
|
230
|
+
status_code=fastapi.status.HTTP_401_UNAUTHORIZED,
|
231
|
+
error_code=APIErrorCodes.cannot_authorize,
|
232
|
+
error_description="api_key_string is not correct",
|
233
|
+
error_data=transfer_data_to_json_str_to_data(api_auth_data.model_dump())
|
234
|
+
)
|
235
|
+
|
236
|
+
return func
|
237
|
+
|
238
|
+
|
239
|
+
def require_api_key_dbm_api_middleware(*, require_active: bool = True):
|
240
|
+
@functools.wraps(require_api_key_dbm_api_middleware)
|
241
|
+
async def async_func(*, api_auth_data: APIAuthData, request: fastapi.requests.Request):
|
242
|
+
if api_auth_data.api_key_dbm is None:
|
243
|
+
raise APIException(
|
244
|
+
status_code=fastapi.status.HTTP_401_UNAUTHORIZED,
|
245
|
+
error_code=APIErrorCodes.cannot_authorize,
|
246
|
+
error_description="api_key_dbm is required",
|
247
|
+
error_data=transfer_data_to_json_str_to_data(api_auth_data.model_dump())
|
248
|
+
)
|
249
|
+
if require_active and not api_auth_data.api_key_dbm.is_active:
|
250
|
+
raise APIException(
|
251
|
+
status_code=fastapi.status.HTTP_401_UNAUTHORIZED,
|
252
|
+
error_code=APIErrorCodes.cannot_authorize,
|
253
|
+
error_description="api_key_dbm is not active",
|
254
|
+
error_data=transfer_data_to_json_str_to_data(api_auth_data.model_dump())
|
255
|
+
)
|
256
|
+
|
257
|
+
return async_func
|
258
|
+
|
259
|
+
|
260
|
+
def require_user_token_dbm_api_middleware(*, require_active: bool = True):
|
261
|
+
@functools.wraps(require_user_token_dbm_api_middleware)
|
262
|
+
async def async_func(*, api_auth_data: APIAuthData, request: fastapi.requests.Request):
|
263
|
+
if api_auth_data.user_token_dbm is None:
|
264
|
+
raise APIException(
|
265
|
+
status_code=fastapi.status.HTTP_401_UNAUTHORIZED,
|
266
|
+
error_code=APIErrorCodes.cannot_authorize,
|
267
|
+
error_description="user_key_dbm is required",
|
268
|
+
error_data=transfer_data_to_json_str_to_data(api_auth_data.model_dump())
|
269
|
+
)
|
270
|
+
if require_active and not api_auth_data.user_token_dbm.is_active:
|
271
|
+
raise APIException(
|
272
|
+
status_code=fastapi.status.HTTP_401_UNAUTHORIZED,
|
273
|
+
error_code=APIErrorCodes.cannot_authorize,
|
274
|
+
error_description="user_key_dbm is not active",
|
275
|
+
error_data=transfer_data_to_json_str_to_data(api_auth_data.model_dump())
|
276
|
+
)
|
277
|
+
|
278
|
+
return async_func
|
@@ -10,12 +10,11 @@ import starlette.exceptions
|
|
10
10
|
from arpakitlib.ar_datetime_util import now_utc_dt
|
11
11
|
from arpakitlib.ar_dict_util import combine_dicts
|
12
12
|
from arpakitlib.ar_exception_util import exception_to_traceback_str
|
13
|
-
from arpakitlib.ar_func_util import
|
14
|
-
from arpakitlib.ar_json_util import transfer_data_to_json_str
|
13
|
+
from arpakitlib.ar_func_util import raise_if_not_async_func, is_async_func, is_sync_func
|
15
14
|
from project.api.const import APIErrorCodes
|
16
15
|
from project.api.exception import APIException
|
17
16
|
from project.api.response import APIJSONResponse
|
18
|
-
from project.api.schema.out.
|
17
|
+
from project.api.schema.out.common.error import ErrorCommonSO
|
19
18
|
from project.core.settings import get_cached_settings
|
20
19
|
from project.sqlalchemy_db_.sqlalchemy_db import get_cached_sqlalchemy_db
|
21
20
|
from project.sqlalchemy_db_.sqlalchemy_model import StoryLogDBM
|
@@ -42,7 +41,7 @@ def create_api_exception_handler(
|
|
42
41
|
) -> APIJSONResponse:
|
43
42
|
status_code = fastapi.status.HTTP_500_INTERNAL_SERVER_ERROR
|
44
43
|
|
45
|
-
error_common_so =
|
44
|
+
error_common_so = ErrorCommonSO(
|
46
45
|
has_error=True,
|
47
46
|
error_code=APIErrorCodes.unknown_error,
|
48
47
|
error_data={
|
@@ -102,7 +101,7 @@ def create_api_exception_handler(
|
|
102
101
|
|
103
102
|
_transmitted_kwargs = {}
|
104
103
|
for func_before in funcs_before:
|
105
|
-
if
|
104
|
+
if is_async_func(func_before):
|
106
105
|
try:
|
107
106
|
await func_before(
|
108
107
|
request=request,
|
@@ -114,7 +113,7 @@ def create_api_exception_handler(
|
|
114
113
|
except Exception as exception_:
|
115
114
|
_logger.exception(exception_)
|
116
115
|
raise exception_
|
117
|
-
elif
|
116
|
+
elif is_sync_func(func_before):
|
118
117
|
try:
|
119
118
|
func_before(
|
120
119
|
request=request,
|
@@ -132,7 +131,7 @@ def create_api_exception_handler(
|
|
132
131
|
# async_funcs_after
|
133
132
|
|
134
133
|
for async_func_after in async_funcs_after:
|
135
|
-
|
134
|
+
raise_if_not_async_func(async_func_after)
|
136
135
|
_ = asyncio.create_task(async_func_after(
|
137
136
|
request=request, status_code=status_code, error_common_so=error_common_so, exception=exception
|
138
137
|
))
|
@@ -157,7 +156,7 @@ def logging_func_before_in_api_exception_handler(
|
|
157
156
|
*,
|
158
157
|
request: fastapi.requests.Request,
|
159
158
|
status_code: int,
|
160
|
-
error_common_so:
|
159
|
+
error_common_so: ErrorCommonSO,
|
161
160
|
exception: Exception,
|
162
161
|
transmitted_kwargs: dict[str, Any],
|
163
162
|
**kwargs
|
@@ -175,7 +174,7 @@ def logging_func_before_in_api_exception_handler(
|
|
175
174
|
):
|
176
175
|
return
|
177
176
|
|
178
|
-
_logger.
|
177
|
+
_logger.exception(exception)
|
179
178
|
|
180
179
|
return func
|
181
180
|
|
@@ -192,7 +191,7 @@ def create_story_log_func_before_in_api_exception_handler(
|
|
192
191
|
*,
|
193
192
|
request: fastapi.requests.Request,
|
194
193
|
status_code: int,
|
195
|
-
error_common_so:
|
194
|
+
error_common_so: ErrorCommonSO,
|
196
195
|
exception: Exception,
|
197
196
|
transmitted_kwargs: dict[str, Any],
|
198
197
|
**kwargs
|
@@ -216,9 +215,9 @@ def create_story_log_func_before_in_api_exception_handler(
|
|
216
215
|
type=StoryLogDBM.Types.error_in_api,
|
217
216
|
title=f"{status_code}, {type(exception)}",
|
218
217
|
data={
|
219
|
-
"
|
218
|
+
"exception": str(exception),
|
220
219
|
"error_common_so": error_common_so.model_dump(),
|
221
|
-
"
|
220
|
+
"exception_traceback": exception_to_traceback_str(exception=exception)
|
222
221
|
}
|
223
222
|
)
|
224
223
|
session.add(story_log_dbm)
|
@@ -1,8 +1,10 @@
|
|
1
1
|
import fastapi
|
2
2
|
from fastapi import APIRouter
|
3
3
|
|
4
|
+
from project.api.auth import require_user_token_dbm_api_middleware, require_api_key_dbm_api_middleware, APIAuthData, \
|
5
|
+
api_auth
|
6
|
+
from project.api.schema.out.common.error import ErrorCommonSO
|
4
7
|
from project.api.schema.out.common.raw_data import RawDataCommonSO
|
5
|
-
from project.api.schema.out.general.error import ErrorGeneralSO
|
6
8
|
from project.util.arpakitlib_project_template import get_arpakitlib_project_template_info
|
7
9
|
|
8
10
|
api_router = APIRouter()
|
@@ -12,12 +14,16 @@ api_router = APIRouter()
|
|
12
14
|
"",
|
13
15
|
name="Get arpakitlib project template info",
|
14
16
|
status_code=fastapi.status.HTTP_200_OK,
|
15
|
-
response_model=RawDataCommonSO |
|
17
|
+
response_model=RawDataCommonSO | ErrorCommonSO
|
16
18
|
)
|
17
19
|
async def _(
|
18
20
|
*,
|
19
21
|
request: fastapi.requests.Request,
|
20
|
-
response: fastapi.responses.Response
|
22
|
+
response: fastapi.responses.Response,
|
23
|
+
api_auth_data: APIAuthData = fastapi.Depends(api_auth(middlewares=[
|
24
|
+
require_api_key_dbm_api_middleware(require_active=True),
|
25
|
+
require_user_token_dbm_api_middleware(require_active=True)
|
26
|
+
]))
|
21
27
|
):
|
22
28
|
arpakitlib_project_template_data = get_arpakitlib_project_template_info()
|
23
29
|
return RawDataCommonSO(data=arpakitlib_project_template_data)
|
@@ -1,9 +1,10 @@
|
|
1
1
|
import fastapi.requests
|
2
2
|
from fastapi import APIRouter
|
3
|
-
from project.api.schema.out.common.error import ErrorCommonSO
|
4
3
|
|
5
4
|
from arpakitlib.ar_json_util import transfer_data_to_json_str_to_data
|
6
|
-
from project.api.auth import APIAuthData, api_auth
|
5
|
+
from project.api.auth import APIAuthData, api_auth, require_user_token_dbm_api_middleware, \
|
6
|
+
require_api_key_dbm_api_middleware
|
7
|
+
from project.api.schema.out.common.error import ErrorCommonSO
|
7
8
|
from project.api.schema.out.common.raw_data import RawDataCommonSO
|
8
9
|
|
9
10
|
api_router = APIRouter()
|
@@ -19,12 +20,9 @@ async def _(
|
|
19
20
|
*,
|
20
21
|
request: fastapi.requests.Request,
|
21
22
|
response: fastapi.responses.Response,
|
22
|
-
api_auth_data: APIAuthData = fastapi.Depends(api_auth(
|
23
|
-
|
24
|
-
|
25
|
-
|
26
|
-
require_api_key_dbm_from_sqlalchemy_db=True,
|
27
|
-
require_user_token_dbm_from_sqlalchemy_db=True
|
28
|
-
))
|
23
|
+
api_auth_data: APIAuthData = fastapi.Depends(api_auth(middlewares=[
|
24
|
+
require_api_key_dbm_api_middleware(require_active=True),
|
25
|
+
require_user_token_dbm_api_middleware(require_active=True)
|
26
|
+
]))
|
29
27
|
):
|
30
28
|
return RawDataCommonSO(data=transfer_data_to_json_str_to_data(api_auth_data.model_dump()))
|
@@ -0,0 +1,20 @@
|
|
1
|
+
from fastapi import APIRouter
|
2
|
+
|
3
|
+
from project.api.router.admin import get_auth_data, get_arpakitlib_project_template_info, raise_fake_error
|
4
|
+
|
5
|
+
main_admin_api_router = APIRouter()
|
6
|
+
|
7
|
+
main_admin_api_router.include_router(
|
8
|
+
router=get_arpakitlib_project_template_info.api_router,
|
9
|
+
prefix="/get_arpakitlib_project_template_info"
|
10
|
+
)
|
11
|
+
|
12
|
+
main_admin_api_router.include_router(
|
13
|
+
router=get_auth_data.api_router,
|
14
|
+
prefix="/get_auth_data"
|
15
|
+
)
|
16
|
+
|
17
|
+
main_admin_api_router.include_router(
|
18
|
+
router=raise_fake_error.api_router,
|
19
|
+
prefix="/raise_fake_error"
|
20
|
+
)
|
@@ -0,0 +1,27 @@
|
|
1
|
+
import fastapi.requests
|
2
|
+
from fastapi import APIRouter
|
3
|
+
|
4
|
+
from project.api.auth import APIAuthData, api_auth, require_user_token_dbm_api_middleware, \
|
5
|
+
require_api_key_dbm_api_middleware
|
6
|
+
from project.api.schema.out.common.error import ErrorCommonSO
|
7
|
+
from project.api.schema.out.common.raw_data import RawDataCommonSO
|
8
|
+
|
9
|
+
api_router = APIRouter()
|
10
|
+
|
11
|
+
|
12
|
+
@api_router.get(
|
13
|
+
path="",
|
14
|
+
name="Raise fake error",
|
15
|
+
status_code=fastapi.status.HTTP_200_OK,
|
16
|
+
response_model=RawDataCommonSO | ErrorCommonSO,
|
17
|
+
)
|
18
|
+
async def _(
|
19
|
+
*,
|
20
|
+
request: fastapi.requests.Request,
|
21
|
+
response: fastapi.responses.Response,
|
22
|
+
api_auth_data: APIAuthData = fastapi.Depends(api_auth(middlewares=[
|
23
|
+
require_api_key_dbm_api_middleware(require_active=True),
|
24
|
+
require_user_token_dbm_api_middleware(require_active=True)
|
25
|
+
]))
|
26
|
+
):
|
27
|
+
raise Exception("fake error")
|
@@ -1,8 +1,10 @@
|
|
1
1
|
import fastapi.requests
|
2
2
|
from fastapi import APIRouter
|
3
|
-
from project.api.schema.out.common.error import ErrorCommonSO
|
4
3
|
|
4
|
+
from project.api.auth import APIAuthData, api_auth, require_api_key_dbm_api_middleware, \
|
5
|
+
require_user_token_dbm_api_middleware
|
5
6
|
from project.api.const import APIErrorCodes, APIErrorSpecificationCodes
|
7
|
+
from project.api.schema.out.common.error import ErrorCommonSO
|
6
8
|
from project.api.schema.out.general.errors_info_general import ErrorsInfoGeneralSO
|
7
9
|
|
8
10
|
api_router = APIRouter()
|
@@ -17,7 +19,11 @@ api_router = APIRouter()
|
|
17
19
|
async def _(
|
18
20
|
*,
|
19
21
|
request: fastapi.requests.Request,
|
20
|
-
response: fastapi.responses.Response
|
22
|
+
response: fastapi.responses.Response,
|
23
|
+
api_auth_data: APIAuthData = fastapi.Depends(api_auth(middlewares=[
|
24
|
+
require_api_key_dbm_api_middleware(require_active=True),
|
25
|
+
require_user_token_dbm_api_middleware(require_active=True)
|
26
|
+
]))
|
21
27
|
):
|
22
28
|
return ErrorsInfoGeneralSO(
|
23
29
|
api_error_codes=APIErrorCodes.values_list(),
|
@@ -0,0 +1,14 @@
|
|
1
|
+
from fastapi import APIRouter
|
2
|
+
|
3
|
+
from project.api.router.general import healthcheck, now_utc_datetime
|
4
|
+
|
5
|
+
main_general_api_router = APIRouter()
|
6
|
+
|
7
|
+
main_general_api_router.include_router(
|
8
|
+
router=healthcheck.api_router,
|
9
|
+
prefix="/healthcheck"
|
10
|
+
)
|
11
|
+
main_general_api_router.include_router(
|
12
|
+
router=now_utc_datetime.api_router,
|
13
|
+
prefix="/now_utc_datetime"
|
14
|
+
)
|
@@ -3,7 +3,7 @@ from fastapi import APIRouter
|
|
3
3
|
|
4
4
|
from arpakitlib.ar_datetime_util import now_utc_dt
|
5
5
|
from project.api.schema.out.common.datetime_ import DatetimeCommonSO
|
6
|
-
from project.api.schema.out.
|
6
|
+
from project.api.schema.out.common.error import ErrorCommonSO
|
7
7
|
|
8
8
|
api_router = APIRouter()
|
9
9
|
|
@@ -12,11 +12,11 @@ api_router = APIRouter()
|
|
12
12
|
"",
|
13
13
|
name="Now UTC datetime",
|
14
14
|
status_code=fastapi.status.HTTP_200_OK,
|
15
|
-
response_model=DatetimeCommonSO |
|
15
|
+
response_model=DatetimeCommonSO | ErrorCommonSO,
|
16
16
|
)
|
17
17
|
async def _(
|
18
18
|
*,
|
19
19
|
request: fastapi.requests.Request,
|
20
|
-
response: fastapi.responses.Response
|
20
|
+
response: fastapi.responses.Response,
|
21
21
|
):
|
22
22
|
return DatetimeCommonSO.from_datetime(datetime_=now_utc_dt())
|
@@ -3,11 +3,11 @@ from __future__ import annotations
|
|
3
3
|
import datetime as dt
|
4
4
|
from typing import Any
|
5
5
|
|
6
|
-
from project.api.schema.out.admin.common import
|
6
|
+
from project.api.schema.out.admin.common import SimpleDBMAdminSO
|
7
7
|
from project.sqlalchemy_db_.sqlalchemy_model import OperationDBM
|
8
8
|
|
9
9
|
|
10
|
-
class OperationAdminSO(
|
10
|
+
class OperationAdminSO(SimpleDBMAdminSO):
|
11
11
|
execution_start_dt: dt.datetime | None
|
12
12
|
execution_finish_dt: dt.datetime | None
|
13
13
|
status: str
|
@@ -2,11 +2,11 @@ from __future__ import annotations
|
|
2
2
|
|
3
3
|
from typing import Any
|
4
4
|
|
5
|
-
from project.api.schema.out.admin.common import
|
5
|
+
from project.api.schema.out.admin.common import SimpleDBMAdminSO
|
6
6
|
from project.sqlalchemy_db_.sqlalchemy_model import StoryLogDBM
|
7
7
|
|
8
8
|
|
9
|
-
class StoryLogAdminSO(
|
9
|
+
class StoryLogAdminSO(SimpleDBMAdminSO):
|
10
10
|
level: str
|
11
11
|
type: str | None
|
12
12
|
title: str | None
|
@@ -0,0 +1,22 @@
|
|
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 SimpleDBMAdminSO
|
7
|
+
from project.sqlalchemy_db_.sqlalchemy_model import UserDBM
|
8
|
+
|
9
|
+
|
10
|
+
class UserDBMSAdminSO(SimpleDBMAdminSO):
|
11
|
+
mail: str | None
|
12
|
+
roles: list[str]
|
13
|
+
is_active: bool
|
14
|
+
tg_id: int | None
|
15
|
+
tg_bot_last_action_dt: dt.datetime | None
|
16
|
+
tg_data: dict[str, Any] | None
|
17
|
+
roles_has_admin: bool
|
18
|
+
roles_has_client: bool
|
19
|
+
|
20
|
+
@classmethod
|
21
|
+
def from_user_dbm(cls, *, user_dbm: UserDBM) -> UserDBMSAdminSO:
|
22
|
+
return cls.model_validate(user_dbm.simple_dict_with_sd_properties())
|
@@ -0,0 +1,14 @@
|
|
1
|
+
from __future__ import annotations
|
2
|
+
|
3
|
+
from project.api.schema.out.admin.common import SimpleDBMAdminSO
|
4
|
+
from project.sqlalchemy_db_.sqlalchemy_model import UserTokenDBM
|
5
|
+
|
6
|
+
|
7
|
+
class UserTokenDBMSAdminSO(SimpleDBMAdminSO):
|
8
|
+
value: str
|
9
|
+
user_id: int
|
10
|
+
is_active: bool
|
11
|
+
|
12
|
+
@classmethod
|
13
|
+
def from_user_token_dbm(cls, *, user_dbm: UserTokenDBM) -> UserTokenDBMSAdminSO:
|
14
|
+
return cls.model_validate(user_dbm.simple_dict_with_sd_properties())
|