mindroot 9.11.0__py3-none-any.whl → 9.12.0__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.
Potentially problematic release.
This version of mindroot might be problematic. Click here for more details.
- mindroot/coreplugins/home/templates/home.jinja2 +1 -0
- mindroot/docs/Makefile +20 -0
- mindroot/docs/_build/doctrees/chat_with_assistant.doctree +0 -0
- mindroot/docs/_build/doctrees/developer_documentation.doctree +0 -0
- mindroot/docs/_build/doctrees/environment.pickle +0 -0
- mindroot/docs/_build/doctrees/getting_started.doctree +0 -0
- mindroot/docs/_build/doctrees/index.doctree +0 -0
- mindroot/docs/_build/doctrees/install_plugins_with_tools.doctree +0 -0
- mindroot/docs/_build/doctrees/installation.doctree +0 -0
- mindroot/docs/_build/doctrees/llm_api_key.doctree +0 -0
- mindroot/docs/_build/doctrees/llm_plugin_installation.doctree +0 -0
- mindroot/docs/_build/doctrees/programming_task.doctree +0 -0
- mindroot/docs/_build/doctrees/source/ahp.doctree +0 -0
- mindroot/docs/_build/doctrees/source/mindroot.coreplugins.admin.doctree +0 -0
- mindroot/docs/_build/doctrees/source/mindroot.coreplugins.api_keys.doctree +0 -0
- mindroot/docs/_build/doctrees/source/mindroot.coreplugins.chat.doctree +0 -0
- mindroot/docs/_build/doctrees/source/mindroot.coreplugins.chat_avatar.doctree +0 -0
- mindroot/docs/_build/doctrees/source/mindroot.coreplugins.check_list.doctree +0 -0
- mindroot/docs/_build/doctrees/source/mindroot.coreplugins.credits.doctree +0 -0
- mindroot/docs/_build/doctrees/source/mindroot.coreplugins.doctree +0 -0
- mindroot/docs/_build/doctrees/source/mindroot.coreplugins.email.doctree +0 -0
- mindroot/docs/_build/doctrees/source/mindroot.coreplugins.env_manager.doctree +0 -0
- mindroot/docs/_build/doctrees/source/mindroot.coreplugins.events.doctree +0 -0
- mindroot/docs/_build/doctrees/source/mindroot.coreplugins.index.doctree +0 -0
- mindroot/docs/_build/doctrees/source/mindroot.coreplugins.index.handlers.doctree +0 -0
- mindroot/docs/_build/doctrees/source/mindroot.coreplugins.jwt_auth.doctree +0 -0
- mindroot/docs/_build/doctrees/source/mindroot.coreplugins.l8n.doctree +0 -0
- mindroot/docs/_build/doctrees/source/mindroot.coreplugins.mcp_.doctree +0 -0
- mindroot/docs/_build/doctrees/source/mindroot.coreplugins.persona.doctree +0 -0
- mindroot/docs/_build/doctrees/source/mindroot.coreplugins.startup.doctree +0 -0
- mindroot/docs/_build/doctrees/source/mindroot.coreplugins.subscriptions.doctree +0 -0
- mindroot/docs/_build/doctrees/source/mindroot.coreplugins.usage.doctree +0 -0
- mindroot/docs/_build/doctrees/source/mindroot.coreplugins.user_service.doctree +0 -0
- mindroot/docs/_build/doctrees/source/mindroot.doctree +0 -0
- mindroot/docs/_build/doctrees/source/mindroot.lib.auth.doctree +0 -0
- mindroot/docs/_build/doctrees/source/mindroot.lib.doctree +0 -0
- mindroot/docs/_build/doctrees/source/mindroot.lib.json_str_block.doctree +0 -0
- mindroot/docs/_build/doctrees/source/mindroot.lib.plugins.doctree +0 -0
- mindroot/docs/_build/doctrees/source/mindroot.lib.providers.backup.doctree +0 -0
- mindroot/docs/_build/doctrees/source/mindroot.lib.providers.doctree +0 -0
- mindroot/docs/_build/doctrees/source/mindroot.registry.doctree +0 -0
- mindroot/docs/_build/doctrees/source/modules.doctree +0 -0
- mindroot/docs/_build/doctrees/source/mr_agent_expert_instr.doctree +0 -0
- mindroot/docs/_build/doctrees/starting_mindroot.doctree +0 -0
- mindroot/docs/_build/doctrees/user_documentation.doctree +0 -0
- mindroot/docs/_build/html/.buildinfo +4 -0
- mindroot/docs/_build/html/.buildinfo.bak +4 -0
- mindroot/docs/_build/html/_images/envvar.png +0 -0
- mindroot/docs/_build/html/_images/files.png +0 -0
- mindroot/docs/_build/html/_images/installopenrouter.png +0 -0
- mindroot/docs/_build/html/_images/mood.png +0 -0
- mindroot/docs/_build/html/_images/moon.png +0 -0
- mindroot/docs/_build/html/_images/openrouter.png +0 -0
- mindroot/docs/_build/html/_images/restart.png +0 -0
- mindroot/docs/_build/html/_modules/index.html +425 -0
- mindroot/docs/_build/html/_modules/mindroot/coreplugins/admin/agent_importer.html +292 -0
- mindroot/docs/_build/html/_modules/mindroot/coreplugins/admin/agent_router.html +620 -0
- mindroot/docs/_build/html/_modules/mindroot/coreplugins/admin/asset_manager.html +289 -0
- mindroot/docs/_build/html/_modules/mindroot/coreplugins/admin/command_router.html +518 -0
- mindroot/docs/_build/html/_modules/mindroot/coreplugins/admin/mcp_catalog_routes.html +275 -0
- mindroot/docs/_build/html/_modules/mindroot/coreplugins/admin/mcp_publish_routes.html +581 -0
- mindroot/docs/_build/html/_modules/mindroot/coreplugins/admin/mcp_registry_routes.html +623 -0
- mindroot/docs/_build/html/_modules/mindroot/coreplugins/admin/mcp_routes.html +347 -0
- mindroot/docs/_build/html/_modules/mindroot/coreplugins/admin/mod.html +163 -0
- mindroot/docs/_build/html/_modules/mindroot/coreplugins/admin/oauth_callback_router.html +188 -0
- mindroot/docs/_build/html/_modules/mindroot/coreplugins/admin/persona_handler.html +195 -0
- mindroot/docs/_build/html/_modules/mindroot/coreplugins/admin/persona_router.html +428 -0
- mindroot/docs/_build/html/_modules/mindroot/coreplugins/admin/plugin_manager.html +610 -0
- mindroot/docs/_build/html/_modules/mindroot/coreplugins/admin/plugin_router.html +146 -0
- mindroot/docs/_build/html/_modules/mindroot/coreplugins/admin/plugin_routes.html +230 -0
- mindroot/docs/_build/html/_modules/mindroot/coreplugins/admin/registry_settings_routes.html +253 -0
- mindroot/docs/_build/html/_modules/mindroot/coreplugins/admin/router.html +267 -0
- mindroot/docs/_build/html/_modules/mindroot/coreplugins/admin/server_router.html +271 -0
- mindroot/docs/_build/html/_modules/mindroot/coreplugins/admin/service_models.html +195 -0
- mindroot/docs/_build/html/_modules/mindroot/coreplugins/admin/settings_router.html +403 -0
- mindroot/docs/_build/html/_modules/mindroot/coreplugins/api_keys/api_key_manager.html +215 -0
- mindroot/docs/_build/html/_modules/mindroot/coreplugins/api_keys/mod.html +127 -0
- mindroot/docs/_build/html/_modules/mindroot/coreplugins/api_keys/router.html +170 -0
- mindroot/docs/_build/html/_modules/mindroot/coreplugins/chat/commands.html +565 -0
- mindroot/docs/_build/html/_modules/mindroot/coreplugins/chat/mod.html +118 -0
- mindroot/docs/_build/html/_modules/mindroot/coreplugins/chat/models.html +130 -0
- mindroot/docs/_build/html/_modules/mindroot/coreplugins/chat/router.html +571 -0
- mindroot/docs/_build/html/_modules/mindroot/coreplugins/chat/services.html +645 -0
- mindroot/docs/_build/html/_modules/mindroot/coreplugins/chat/widget_manager.html +258 -0
- mindroot/docs/_build/html/_modules/mindroot/coreplugins/chat/widget_routes.html +409 -0
- mindroot/docs/_build/html/_modules/mindroot/coreplugins/check_list/mod.html +460 -0
- mindroot/docs/_build/html/_modules/mindroot/coreplugins/credits/conversion.html +232 -0
- mindroot/docs/_build/html/_modules/mindroot/coreplugins/credits/ledger.html +283 -0
- mindroot/docs/_build/html/_modules/mindroot/coreplugins/credits/mod.html +355 -0
- mindroot/docs/_build/html/_modules/mindroot/coreplugins/credits/models.html +269 -0
- mindroot/docs/_build/html/_modules/mindroot/coreplugins/credits/router.html +306 -0
- mindroot/docs/_build/html/_modules/mindroot/coreplugins/credits/storage.html +257 -0
- mindroot/docs/_build/html/_modules/mindroot/coreplugins/email/email_provider.html +159 -0
- mindroot/docs/_build/html/_modules/mindroot/coreplugins/email/imap_handler.html +343 -0
- mindroot/docs/_build/html/_modules/mindroot/coreplugins/email/mod.html +210 -0
- mindroot/docs/_build/html/_modules/mindroot/coreplugins/email/services.html +172 -0
- mindroot/docs/_build/html/_modules/mindroot/coreplugins/email/smtp_handler.html +188 -0
- mindroot/docs/_build/html/_modules/mindroot/coreplugins/email/test_email_service.html +179 -0
- mindroot/docs/_build/html/_modules/mindroot/coreplugins/env_manager/mod.html +409 -0
- mindroot/docs/_build/html/_modules/mindroot/coreplugins/env_manager/router.html +147 -0
- mindroot/docs/_build/html/_modules/mindroot/coreplugins/events/router.html +201 -0
- mindroot/docs/_build/html/_modules/mindroot/coreplugins/index/handlers/agent_ops.html +195 -0
- mindroot/docs/_build/html/_modules/mindroot/coreplugins/index/handlers/index_ops.html +214 -0
- mindroot/docs/_build/html/_modules/mindroot/coreplugins/index/handlers/plugin_ops.html +263 -0
- mindroot/docs/_build/html/_modules/mindroot/coreplugins/index/handlers/publish.html +225 -0
- mindroot/docs/_build/html/_modules/mindroot/coreplugins/index/mod.html +120 -0
- mindroot/docs/_build/html/_modules/mindroot/coreplugins/index/models.html +148 -0
- mindroot/docs/_build/html/_modules/mindroot/coreplugins/index/router.html +184 -0
- mindroot/docs/_build/html/_modules/mindroot/coreplugins/index/utils.html +166 -0
- mindroot/docs/_build/html/_modules/mindroot/coreplugins/jwt_auth/middleware.html +400 -0
- mindroot/docs/_build/html/_modules/mindroot/coreplugins/jwt_auth/mod.html +153 -0
- mindroot/docs/_build/html/_modules/mindroot/coreplugins/jwt_auth/router.html +134 -0
- mindroot/docs/_build/html/_modules/mindroot/coreplugins/l8n/language_detection.html +296 -0
- mindroot/docs/_build/html/_modules/mindroot/coreplugins/l8n/middleware.html +258 -0
- mindroot/docs/_build/html/_modules/mindroot/coreplugins/l8n/mod.html +393 -0
- mindroot/docs/_build/html/_modules/mindroot/coreplugins/l8n/test_enhanced.html +408 -0
- mindroot/docs/_build/html/_modules/mindroot/coreplugins/l8n/test_l8n_standalone.html +379 -0
- mindroot/docs/_build/html/_modules/mindroot/coreplugins/l8n/test_middleware.html +394 -0
- mindroot/docs/_build/html/_modules/mindroot/coreplugins/l8n/utils.html +348 -0
- mindroot/docs/_build/html/_modules/mindroot/coreplugins/mcp_/catalog_commands.html +456 -0
- mindroot/docs/_build/html/_modules/mindroot/coreplugins/mcp_/catalog_manager.html +409 -0
- mindroot/docs/_build/html/_modules/mindroot/coreplugins/mcp_/dynamic_commands.html +267 -0
- mindroot/docs/_build/html/_modules/mindroot/coreplugins/mcp_/mcp_manager.html +1186 -0
- mindroot/docs/_build/html/_modules/mindroot/coreplugins/mcp_/mod.html +510 -0
- mindroot/docs/_build/html/_modules/mindroot/coreplugins/mcp_/oauth_storage.html +260 -0
- mindroot/docs/_build/html/_modules/mindroot/coreplugins/mcp_/server_installer.html +195 -0
- mindroot/docs/_build/html/_modules/mindroot/coreplugins/mcp_/testmcpclient.html +217 -0
- mindroot/docs/_build/html/_modules/mindroot/coreplugins/persona/init_persona.html +117 -0
- mindroot/docs/_build/html/_modules/mindroot/coreplugins/persona/mod.html +276 -0
- mindroot/docs/_build/html/_modules/mindroot/coreplugins/startup/mod.html +122 -0
- mindroot/docs/_build/html/_modules/mindroot/coreplugins/subscriptions/credit_integration.html +163 -0
- mindroot/docs/_build/html/_modules/mindroot/coreplugins/subscriptions/mod.html +1089 -0
- mindroot/docs/_build/html/_modules/mindroot/coreplugins/subscriptions/models.html +261 -0
- mindroot/docs/_build/html/_modules/mindroot/coreplugins/subscriptions/router.html +502 -0
- mindroot/docs/_build/html/_modules/mindroot/coreplugins/subscriptions/storage.html +413 -0
- mindroot/docs/_build/html/_modules/mindroot/coreplugins/subscriptions/stripe_integration.html +178 -0
- mindroot/docs/_build/html/_modules/mindroot/coreplugins/subscriptions/subscription_manager.html +289 -0
- mindroot/docs/_build/html/_modules/mindroot/coreplugins/subscriptions/webhook_handler.html +327 -0
- mindroot/docs/_build/html/_modules/mindroot/coreplugins/usage/handlers.html +157 -0
- mindroot/docs/_build/html/_modules/mindroot/coreplugins/usage/mod.html +253 -0
- mindroot/docs/_build/html/_modules/mindroot/coreplugins/usage/models.html +141 -0
- mindroot/docs/_build/html/_modules/mindroot/coreplugins/usage/reporting.html +226 -0
- mindroot/docs/_build/html/_modules/mindroot/coreplugins/usage/router.html +228 -0
- mindroot/docs/_build/html/_modules/mindroot/coreplugins/usage/storage.html +264 -0
- mindroot/docs/_build/html/_modules/mindroot/coreplugins/user_service/admin_init.html +234 -0
- mindroot/docs/_build/html/_modules/mindroot/coreplugins/user_service/email_service.html +204 -0
- mindroot/docs/_build/html/_modules/mindroot/coreplugins/user_service/mod.html +260 -0
- mindroot/docs/_build/html/_modules/mindroot/coreplugins/user_service/models.html +148 -0
- mindroot/docs/_build/html/_modules/mindroot/coreplugins/user_service/password_reset_service.html +336 -0
- mindroot/docs/_build/html/_modules/mindroot/coreplugins/user_service/role_service.html +183 -0
- mindroot/docs/_build/html/_modules/mindroot/coreplugins/user_service/router.html +202 -0
- mindroot/docs/_build/html/_modules/mindroot/lib/auth/api_key.html +129 -0
- mindroot/docs/_build/html/_modules/mindroot/lib/auth/auth.html +203 -0
- mindroot/docs/_build/html/_modules/mindroot/lib/buchatlog.html +259 -0
- mindroot/docs/_build/html/_modules/mindroot/lib/buchatlog2.html +500 -0
- mindroot/docs/_build/html/_modules/mindroot/lib/butemplates.html +415 -0
- mindroot/docs/_build/html/_modules/mindroot/lib/chatcontext.html +401 -0
- mindroot/docs/_build/html/_modules/mindroot/lib/chatlog.html +619 -0
- mindroot/docs/_build/html/_modules/mindroot/lib/chatlog_optimized.html +655 -0
- mindroot/docs/_build/html/_modules/mindroot/lib/json_escape.html +138 -0
- mindroot/docs/_build/html/_modules/mindroot/lib/json_str_block/json_str_block.html +213 -0
- mindroot/docs/_build/html/_modules/mindroot/lib/parent_templates.html +181 -0
- mindroot/docs/_build/html/_modules/mindroot/lib/plugins/installation.html +481 -0
- mindroot/docs/_build/html/_modules/mindroot/lib/plugins/l8n_static_handler.html +347 -0
- mindroot/docs/_build/html/_modules/mindroot/lib/plugins/loader.html +403 -0
- mindroot/docs/_build/html/_modules/mindroot/lib/plugins/loader_with_l8n.html +391 -0
- mindroot/docs/_build/html/_modules/mindroot/lib/plugins/manifest.html +450 -0
- mindroot/docs/_build/html/_modules/mindroot/lib/plugins/mapping.html +127 -0
- mindroot/docs/_build/html/_modules/mindroot/lib/plugins/paths.html +215 -0
- mindroot/docs/_build/html/_modules/mindroot/lib/plugins_install.html +171 -0
- mindroot/docs/_build/html/_modules/mindroot/lib/providers/commands.html +125 -0
- mindroot/docs/_build/html/_modules/mindroot/lib/providers/hooks.html +117 -0
- mindroot/docs/_build/html/_modules/mindroot/lib/providers/missing.html +169 -0
- mindroot/docs/_build/html/_modules/mindroot/lib/providers/model_preferences_v2.html +291 -0
- mindroot/docs/_build/html/_modules/mindroot/lib/providers/services.html +122 -0
- mindroot/docs/_build/html/_modules/mindroot/lib/providers.html +465 -0
- mindroot/docs/_build/html/_modules/mindroot/lib/route_decorators.html +175 -0
- mindroot/docs/_build/html/_modules/mindroot/lib/session_files.html +142 -0
- mindroot/docs/_build/html/_modules/mindroot/lib/streamcmd.html +246 -0
- mindroot/docs/_build/html/_modules/mindroot/lib/templates.html +677 -0
- mindroot/docs/_build/html/_modules/mindroot/lib/token_counter.html +326 -0
- mindroot/docs/_build/html/_modules/mindroot/migrate.html +153 -0
- mindroot/docs/_build/html/_modules/mindroot/registry/component_manager.html +140 -0
- mindroot/docs/_build/html/_modules/mindroot/registry/data_access.html +302 -0
- mindroot/docs/_build/html/_modules/mindroot/server.html +317 -0
- mindroot/docs/_build/html/_modules/mindroot/server_missing_normal_args.html +322 -0
- mindroot/docs/_build/html/_modules/mindroot/server_prev.html +298 -0
- mindroot/docs/_build/html/_sources/chat_with_assistant.rst.txt +14 -0
- mindroot/docs/_build/html/_sources/developer_documentation.rst.txt +26 -0
- mindroot/docs/_build/html/_sources/getting_started.rst.txt +139 -0
- mindroot/docs/_build/html/_sources/index.rst.txt +38 -0
- mindroot/docs/_build/html/_sources/install_plugins_with_tools.rst.txt +25 -0
- mindroot/docs/_build/html/_sources/installation.rst.txt +21 -0
- mindroot/docs/_build/html/_sources/llm_api_key.rst.txt +22 -0
- mindroot/docs/_build/html/_sources/llm_plugin_installation.rst.txt +27 -0
- mindroot/docs/_build/html/_sources/programming_task.rst.txt +10 -0
- mindroot/docs/_build/html/_sources/source/ahp.rst.txt +7 -0
- mindroot/docs/_build/html/_sources/source/mindroot.coreplugins.admin.rst.txt +189 -0
- mindroot/docs/_build/html/_sources/source/mindroot.coreplugins.api_keys.rst.txt +45 -0
- mindroot/docs/_build/html/_sources/source/mindroot.coreplugins.chat.rst.txt +93 -0
- mindroot/docs/_build/html/_sources/source/mindroot.coreplugins.chat_avatar.rst.txt +10 -0
- mindroot/docs/_build/html/_sources/source/mindroot.coreplugins.check_list.rst.txt +21 -0
- mindroot/docs/_build/html/_sources/source/mindroot.coreplugins.credits.rst.txt +61 -0
- mindroot/docs/_build/html/_sources/source/mindroot.coreplugins.email.rst.txt +77 -0
- mindroot/docs/_build/html/_sources/source/mindroot.coreplugins.env_manager.rst.txt +29 -0
- mindroot/docs/_build/html/_sources/source/mindroot.coreplugins.events.rst.txt +29 -0
- mindroot/docs/_build/html/_sources/source/mindroot.coreplugins.index.handlers.rst.txt +45 -0
- mindroot/docs/_build/html/_sources/source/mindroot.coreplugins.index.rst.txt +53 -0
- mindroot/docs/_build/html/_sources/source/mindroot.coreplugins.jwt_auth.rst.txt +45 -0
- mindroot/docs/_build/html/_sources/source/mindroot.coreplugins.l8n.rst.txt +109 -0
- mindroot/docs/_build/html/_sources/source/mindroot.coreplugins.mcp_.rst.txt +93 -0
- mindroot/docs/_build/html/_sources/source/mindroot.coreplugins.persona.rst.txt +29 -0
- mindroot/docs/_build/html/_sources/source/mindroot.coreplugins.rst.txt +35 -0
- mindroot/docs/_build/html/_sources/source/mindroot.coreplugins.startup.rst.txt +21 -0
- mindroot/docs/_build/html/_sources/source/mindroot.coreplugins.subscriptions.rst.txt +85 -0
- mindroot/docs/_build/html/_sources/source/mindroot.coreplugins.usage.rst.txt +61 -0
- mindroot/docs/_build/html/_sources/source/mindroot.coreplugins.user_service.rst.txt +69 -0
- mindroot/docs/_build/html/_sources/source/mindroot.lib.auth.rst.txt +29 -0
- mindroot/docs/_build/html/_sources/source/mindroot.lib.json_str_block.rst.txt +21 -0
- mindroot/docs/_build/html/_sources/source/mindroot.lib.plugins.rst.txt +69 -0
- mindroot/docs/_build/html/_sources/source/mindroot.lib.providers.backup.rst.txt +10 -0
- mindroot/docs/_build/html/_sources/source/mindroot.lib.providers.rst.txt +61 -0
- mindroot/docs/_build/html/_sources/source/mindroot.lib.rst.txt +152 -0
- mindroot/docs/_build/html/_sources/source/mindroot.registry.rst.txt +29 -0
- mindroot/docs/_build/html/_sources/source/mindroot.rst.txt +54 -0
- mindroot/docs/_build/html/_sources/source/modules.rst.txt +7 -0
- mindroot/docs/_build/html/_sources/source/mr_agent_expert_instr.rst.txt +7 -0
- mindroot/docs/_build/html/_sources/starting_mindroot.rst.txt +12 -0
- mindroot/docs/_build/html/_sources/user_documentation.rst.txt +16 -0
- mindroot/docs/_build/html/_static/_sphinx_javascript_frameworks_compat.js +123 -0
- mindroot/docs/_build/html/_static/basic.css +906 -0
- mindroot/docs/_build/html/_static/css/badge_only.css +1 -0
- mindroot/docs/_build/html/_static/css/fonts/Roboto-Slab-Bold.woff +0 -0
- mindroot/docs/_build/html/_static/css/fonts/Roboto-Slab-Bold.woff2 +0 -0
- mindroot/docs/_build/html/_static/css/fonts/Roboto-Slab-Regular.woff +0 -0
- mindroot/docs/_build/html/_static/css/fonts/Roboto-Slab-Regular.woff2 +0 -0
- mindroot/docs/_build/html/_static/css/fonts/fontawesome-webfont.eot +0 -0
- mindroot/docs/_build/html/_static/css/fonts/fontawesome-webfont.svg +2671 -0
- mindroot/docs/_build/html/_static/css/fonts/fontawesome-webfont.ttf +0 -0
- mindroot/docs/_build/html/_static/css/fonts/fontawesome-webfont.woff +0 -0
- mindroot/docs/_build/html/_static/css/fonts/fontawesome-webfont.woff2 +0 -0
- mindroot/docs/_build/html/_static/css/fonts/lato-bold-italic.woff +0 -0
- mindroot/docs/_build/html/_static/css/fonts/lato-bold-italic.woff2 +0 -0
- mindroot/docs/_build/html/_static/css/fonts/lato-bold.woff +0 -0
- mindroot/docs/_build/html/_static/css/fonts/lato-bold.woff2 +0 -0
- mindroot/docs/_build/html/_static/css/fonts/lato-normal-italic.woff +0 -0
- mindroot/docs/_build/html/_static/css/fonts/lato-normal-italic.woff2 +0 -0
- mindroot/docs/_build/html/_static/css/fonts/lato-normal.woff +0 -0
- mindroot/docs/_build/html/_static/css/fonts/lato-normal.woff2 +0 -0
- mindroot/docs/_build/html/_static/css/theme.css +4 -0
- mindroot/docs/_build/html/_static/custom.css +19 -0
- mindroot/docs/_build/html/_static/debug.css +69 -0
- mindroot/docs/_build/html/_static/doctools.js +149 -0
- mindroot/docs/_build/html/_static/documentation_options.js +13 -0
- mindroot/docs/_build/html/_static/file.png +0 -0
- mindroot/docs/_build/html/_static/fonts/Lato/lato-bold.eot +0 -0
- mindroot/docs/_build/html/_static/fonts/Lato/lato-bold.ttf +0 -0
- mindroot/docs/_build/html/_static/fonts/Lato/lato-bold.woff +0 -0
- mindroot/docs/_build/html/_static/fonts/Lato/lato-bold.woff2 +0 -0
- mindroot/docs/_build/html/_static/fonts/Lato/lato-bolditalic.eot +0 -0
- mindroot/docs/_build/html/_static/fonts/Lato/lato-bolditalic.ttf +0 -0
- mindroot/docs/_build/html/_static/fonts/Lato/lato-bolditalic.woff +0 -0
- mindroot/docs/_build/html/_static/fonts/Lato/lato-bolditalic.woff2 +0 -0
- mindroot/docs/_build/html/_static/fonts/Lato/lato-italic.eot +0 -0
- mindroot/docs/_build/html/_static/fonts/Lato/lato-italic.ttf +0 -0
- mindroot/docs/_build/html/_static/fonts/Lato/lato-italic.woff +0 -0
- mindroot/docs/_build/html/_static/fonts/Lato/lato-italic.woff2 +0 -0
- mindroot/docs/_build/html/_static/fonts/Lato/lato-regular.eot +0 -0
- mindroot/docs/_build/html/_static/fonts/Lato/lato-regular.ttf +0 -0
- mindroot/docs/_build/html/_static/fonts/Lato/lato-regular.woff +0 -0
- mindroot/docs/_build/html/_static/fonts/Lato/lato-regular.woff2 +0 -0
- mindroot/docs/_build/html/_static/fonts/RobotoSlab/roboto-slab-v7-bold.eot +0 -0
- mindroot/docs/_build/html/_static/fonts/RobotoSlab/roboto-slab-v7-bold.ttf +0 -0
- mindroot/docs/_build/html/_static/fonts/RobotoSlab/roboto-slab-v7-bold.woff +0 -0
- mindroot/docs/_build/html/_static/fonts/RobotoSlab/roboto-slab-v7-bold.woff2 +0 -0
- mindroot/docs/_build/html/_static/fonts/RobotoSlab/roboto-slab-v7-regular.eot +0 -0
- mindroot/docs/_build/html/_static/fonts/RobotoSlab/roboto-slab-v7-regular.ttf +0 -0
- mindroot/docs/_build/html/_static/fonts/RobotoSlab/roboto-slab-v7-regular.woff +0 -0
- mindroot/docs/_build/html/_static/fonts/RobotoSlab/roboto-slab-v7-regular.woff2 +0 -0
- mindroot/docs/_build/html/_static/jquery.js +2 -0
- mindroot/docs/_build/html/_static/js/badge_only.js +1 -0
- mindroot/docs/_build/html/_static/js/theme.js +1 -0
- mindroot/docs/_build/html/_static/js/versions.js +228 -0
- mindroot/docs/_build/html/_static/language_data.js +192 -0
- mindroot/docs/_build/html/_static/minus.png +0 -0
- mindroot/docs/_build/html/_static/plus.png +0 -0
- mindroot/docs/_build/html/_static/pygments.css +232 -0
- mindroot/docs/_build/html/_static/scripts/furo-extensions.js +0 -0
- mindroot/docs/_build/html/_static/scripts/furo.js +3 -0
- mindroot/docs/_build/html/_static/scripts/furo.js.LICENSE.txt +7 -0
- mindroot/docs/_build/html/_static/scripts/furo.js.map +1 -0
- mindroot/docs/_build/html/_static/searchtools.js +635 -0
- mindroot/docs/_build/html/_static/skeleton.css +296 -0
- mindroot/docs/_build/html/_static/sphinx_highlight.js +154 -0
- mindroot/docs/_build/html/_static/styles/furo-extensions.css +2 -0
- mindroot/docs/_build/html/_static/styles/furo-extensions.css.map +1 -0
- mindroot/docs/_build/html/_static/styles/furo.css +2 -0
- mindroot/docs/_build/html/_static/styles/furo.css.map +1 -0
- mindroot/docs/_build/html/chat_with_assistant.html +329 -0
- mindroot/docs/_build/html/developer_documentation.html +338 -0
- mindroot/docs/_build/html/genindex.html +4690 -0
- mindroot/docs/_build/html/getting_started.html +423 -0
- mindroot/docs/_build/html/index.html +357 -0
- mindroot/docs/_build/html/install_plugins_with_tools.html +336 -0
- mindroot/docs/_build/html/installation.html +330 -0
- mindroot/docs/_build/html/llm_api_key.html +337 -0
- mindroot/docs/_build/html/llm_plugin_installation.html +338 -0
- mindroot/docs/_build/html/objects.inv +0 -0
- mindroot/docs/_build/html/programming_task.html +326 -0
- mindroot/docs/_build/html/py-modindex.html +1307 -0
- mindroot/docs/_build/html/search.html +307 -0
- mindroot/docs/_build/html/searchindex.js +1 -0
- mindroot/docs/_build/html/source/ahp.html +302 -0
- mindroot/docs/_build/html/source/mindroot.coreplugins.admin.html +2212 -0
- mindroot/docs/_build/html/source/mindroot.coreplugins.api_keys.html +532 -0
- mindroot/docs/_build/html/source/mindroot.coreplugins.chat.html +1185 -0
- mindroot/docs/_build/html/source/mindroot.coreplugins.chat_avatar.html +311 -0
- mindroot/docs/_build/html/source/mindroot.coreplugins.check_list.html +441 -0
- mindroot/docs/_build/html/source/mindroot.coreplugins.credits.html +879 -0
- mindroot/docs/_build/html/source/mindroot.coreplugins.email.html +554 -0
- mindroot/docs/_build/html/source/mindroot.coreplugins.env_manager.html +447 -0
- mindroot/docs/_build/html/source/mindroot.coreplugins.events.html +338 -0
- mindroot/docs/_build/html/source/mindroot.coreplugins.html +1785 -0
- mindroot/docs/_build/html/source/mindroot.coreplugins.index.handlers.html +481 -0
- mindroot/docs/_build/html/source/mindroot.coreplugins.index.html +696 -0
- mindroot/docs/_build/html/source/mindroot.coreplugins.jwt_auth.html +432 -0
- mindroot/docs/_build/html/source/mindroot.coreplugins.l8n.html +933 -0
- mindroot/docs/_build/html/source/mindroot.coreplugins.mcp_.html +1271 -0
- mindroot/docs/_build/html/source/mindroot.coreplugins.persona.html +386 -0
- mindroot/docs/_build/html/source/mindroot.coreplugins.startup.html +327 -0
- mindroot/docs/_build/html/source/mindroot.coreplugins.subscriptions.html +1631 -0
- mindroot/docs/_build/html/source/mindroot.coreplugins.usage.html +677 -0
- mindroot/docs/_build/html/source/mindroot.coreplugins.user_service.html +681 -0
- mindroot/docs/_build/html/source/mindroot.html +811 -0
- mindroot/docs/_build/html/source/mindroot.lib.auth.html +407 -0
- mindroot/docs/_build/html/source/mindroot.lib.html +2027 -0
- mindroot/docs/_build/html/source/mindroot.lib.json_str_block.html +344 -0
- mindroot/docs/_build/html/source/mindroot.lib.plugins.html +1050 -0
- mindroot/docs/_build/html/source/mindroot.lib.providers.backup.html +324 -0
- mindroot/docs/_build/html/source/mindroot.lib.providers.html +572 -0
- mindroot/docs/_build/html/source/mindroot.registry.html +501 -0
- mindroot/docs/_build/html/source/modules.html +377 -0
- mindroot/docs/_build/html/source/mr_agent_expert_instr.html +302 -0
- mindroot/docs/_build/html/starting_mindroot.html +325 -0
- mindroot/docs/_build/html/user_documentation.html +333 -0
- mindroot/docs/_static/custom.css +19 -0
- mindroot/docs/chat_with_assistant.rst +14 -0
- mindroot/docs/conf.py +54 -0
- mindroot/docs/data/agents/local/Assistant/agent.json +27 -0
- mindroot/docs/data/agents/local/SysAdmin/agent.json +33 -0
- mindroot/docs/data/equivalent_flags.json +1 -0
- mindroot/docs/data/mcp/servers.json +9 -0
- mindroot/docs/data/models.json +57 -0
- mindroot/docs/data/plugin_manifest.json +95 -0
- mindroot/docs/data/preferred_models.json +12 -0
- mindroot/docs/data/providers.json +62 -0
- mindroot/docs/developer_documentation.rst +26 -0
- mindroot/docs/envvar.png +0 -0
- mindroot/docs/files.png +0 -0
- mindroot/docs/getting_started.rst +139 -0
- mindroot/docs/index.rst +38 -0
- mindroot/docs/install_plugins_with_tools.rst +25 -0
- mindroot/docs/installation.rst +21 -0
- mindroot/docs/installopenrouter.png +0 -0
- mindroot/docs/llm_api_key.rst +22 -0
- mindroot/docs/llm_plugin_installation.rst +27 -0
- mindroot/docs/make.bat +35 -0
- mindroot/docs/mood.png +0 -0
- mindroot/docs/moon.png +0 -0
- mindroot/docs/openrouter.png +0 -0
- mindroot/docs/personas/local/Assistant/avatar.png +0 -0
- mindroot/docs/personas/local/Assistant/faceref.png +0 -0
- mindroot/docs/personas/local/Assistant/persona.json +7 -0
- mindroot/docs/programming_task.rst +10 -0
- mindroot/docs/restart.png +0 -0
- mindroot/docs/source/ahp.rst +7 -0
- mindroot/docs/source/mindroot.coreplugins.admin.rst +189 -0
- mindroot/docs/source/mindroot.coreplugins.api_keys.rst +45 -0
- mindroot/docs/source/mindroot.coreplugins.chat.rst +93 -0
- mindroot/docs/source/mindroot.coreplugins.chat_avatar.rst +10 -0
- mindroot/docs/source/mindroot.coreplugins.check_list.rst +21 -0
- mindroot/docs/source/mindroot.coreplugins.credits.rst +61 -0
- mindroot/docs/source/mindroot.coreplugins.email.rst +77 -0
- mindroot/docs/source/mindroot.coreplugins.env_manager.rst +29 -0
- mindroot/docs/source/mindroot.coreplugins.events.rst +29 -0
- mindroot/docs/source/mindroot.coreplugins.index.handlers.rst +45 -0
- mindroot/docs/source/mindroot.coreplugins.index.rst +53 -0
- mindroot/docs/source/mindroot.coreplugins.jwt_auth.rst +45 -0
- mindroot/docs/source/mindroot.coreplugins.l8n.rst +109 -0
- mindroot/docs/source/mindroot.coreplugins.mcp_.rst +93 -0
- mindroot/docs/source/mindroot.coreplugins.persona.rst +29 -0
- mindroot/docs/source/mindroot.coreplugins.rst +35 -0
- mindroot/docs/source/mindroot.coreplugins.startup.rst +21 -0
- mindroot/docs/source/mindroot.coreplugins.subscriptions.rst +85 -0
- mindroot/docs/source/mindroot.coreplugins.usage.rst +61 -0
- mindroot/docs/source/mindroot.coreplugins.user_service.rst +69 -0
- mindroot/docs/source/mindroot.lib.auth.rst +29 -0
- mindroot/docs/source/mindroot.lib.json_str_block.rst +21 -0
- mindroot/docs/source/mindroot.lib.plugins.rst +69 -0
- mindroot/docs/source/mindroot.lib.providers.backup.rst +10 -0
- mindroot/docs/source/mindroot.lib.providers.rst +61 -0
- mindroot/docs/source/mindroot.lib.rst +152 -0
- mindroot/docs/source/mindroot.registry.rst +29 -0
- mindroot/docs/source/mindroot.rst +54 -0
- mindroot/docs/source/modules.rst +7 -0
- mindroot/docs/source/mr_agent_expert_instr.rst +7 -0
- mindroot/docs/starting_mindroot.rst +12 -0
- mindroot/docs/user_documentation.rst +16 -0
- mindroot/server.py +10 -1
- {mindroot-9.11.0.dist-info → mindroot-9.12.0.dist-info}/METADATA +1 -1
- {mindroot-9.11.0.dist-info → mindroot-9.12.0.dist-info}/RECORD +415 -8
- {mindroot-9.11.0.dist-info → mindroot-9.12.0.dist-info}/WHEEL +0 -0
- {mindroot-9.11.0.dist-info → mindroot-9.12.0.dist-info}/entry_points.txt +0 -0
- {mindroot-9.11.0.dist-info → mindroot-9.12.0.dist-info}/licenses/LICENSE +0 -0
- {mindroot-9.11.0.dist-info → mindroot-9.12.0.dist-info}/top_level.txt +0 -0
|
@@ -0,0 +1,502 @@
|
|
|
1
|
+
|
|
2
|
+
|
|
3
|
+
<!DOCTYPE html>
|
|
4
|
+
<html class="writer-html5" lang="en" data-content_root="../../../../">
|
|
5
|
+
<head>
|
|
6
|
+
<meta charset="utf-8" />
|
|
7
|
+
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
|
|
8
|
+
<title>mindroot.coreplugins.subscriptions.router — MindRoot 9.10.0 documentation</title>
|
|
9
|
+
<link rel="stylesheet" type="text/css" href="../../../../_static/pygments.css?v=b86133f3" />
|
|
10
|
+
<link rel="stylesheet" type="text/css" href="../../../../_static/css/theme.css?v=e59714d7" />
|
|
11
|
+
|
|
12
|
+
|
|
13
|
+
<script src="../../../../_static/jquery.js?v=5d32c60e"></script>
|
|
14
|
+
<script src="../../../../_static/_sphinx_javascript_frameworks_compat.js?v=2cd50e6c"></script>
|
|
15
|
+
<script src="../../../../_static/documentation_options.js?v=3c16008f"></script>
|
|
16
|
+
<script src="../../../../_static/doctools.js?v=9bcbadda"></script>
|
|
17
|
+
<script src="../../../../_static/sphinx_highlight.js?v=dc90522c"></script>
|
|
18
|
+
<script src="../../../../_static/js/theme.js"></script>
|
|
19
|
+
<link rel="index" title="Index" href="../../../../genindex.html" />
|
|
20
|
+
<link rel="search" title="Search" href="../../../../search.html" />
|
|
21
|
+
</head>
|
|
22
|
+
|
|
23
|
+
<body class="wy-body-for-nav">
|
|
24
|
+
<div class="wy-grid-for-nav">
|
|
25
|
+
<nav data-toggle="wy-nav-shift" class="wy-nav-side">
|
|
26
|
+
<div class="wy-side-scroll">
|
|
27
|
+
<div class="wy-side-nav-search" style="background: #343131" >
|
|
28
|
+
|
|
29
|
+
|
|
30
|
+
|
|
31
|
+
<a href="../../../../index.html" class="icon icon-home">
|
|
32
|
+
MindRoot
|
|
33
|
+
</a>
|
|
34
|
+
<div role="search">
|
|
35
|
+
<form id="rtd-search-form" class="wy-form" action="../../../../search.html" method="get">
|
|
36
|
+
<input type="text" name="q" placeholder="Search docs" aria-label="Search docs" />
|
|
37
|
+
<input type="hidden" name="check_keywords" value="yes" />
|
|
38
|
+
<input type="hidden" name="area" value="default" />
|
|
39
|
+
</form>
|
|
40
|
+
</div>
|
|
41
|
+
</div><div class="wy-menu wy-menu-vertical" data-spy="affix" role="navigation" aria-label="Navigation menu">
|
|
42
|
+
<!-- Local TOC -->
|
|
43
|
+
<div class="local-toc"></div>
|
|
44
|
+
</div>
|
|
45
|
+
</div>
|
|
46
|
+
</nav>
|
|
47
|
+
|
|
48
|
+
<section data-toggle="wy-nav-shift" class="wy-nav-content-wrap"><nav class="wy-nav-top" aria-label="Mobile navigation menu" style="background: #343131" >
|
|
49
|
+
<i data-toggle="wy-nav-top" class="fa fa-bars"></i>
|
|
50
|
+
<a href="../../../../index.html">MindRoot</a>
|
|
51
|
+
</nav>
|
|
52
|
+
|
|
53
|
+
<div class="wy-nav-content">
|
|
54
|
+
<div class="rst-content">
|
|
55
|
+
<div role="navigation" aria-label="Page navigation">
|
|
56
|
+
<ul class="wy-breadcrumbs">
|
|
57
|
+
<li><a href="../../../../index.html" class="icon icon-home" aria-label="Home"></a></li>
|
|
58
|
+
<li class="breadcrumb-item"><a href="../../../index.html">Module code</a></li>
|
|
59
|
+
<li class="breadcrumb-item active">mindroot.coreplugins.subscriptions.router</li>
|
|
60
|
+
<li class="wy-breadcrumbs-aside">
|
|
61
|
+
</li>
|
|
62
|
+
</ul>
|
|
63
|
+
<hr/>
|
|
64
|
+
</div>
|
|
65
|
+
<div role="main" class="document" itemscope="itemscope" itemtype="http://schema.org/Article">
|
|
66
|
+
<div itemprop="articleBody">
|
|
67
|
+
|
|
68
|
+
<h1>Source code for mindroot.coreplugins.subscriptions.router</h1><div class="highlight"><pre>
|
|
69
|
+
<span></span><span class="kn">from</span><span class="w"> </span><span class="nn">fastapi</span><span class="w"> </span><span class="kn">import</span> <span class="n">APIRouter</span><span class="p">,</span> <span class="n">Request</span><span class="p">,</span> <span class="n">HTTPException</span><span class="p">,</span> <span class="n">Depends</span><span class="p">,</span> <span class="n">Query</span>
|
|
70
|
+
<span class="kn">from</span><span class="w"> </span><span class="nn">fastapi.responses</span><span class="w"> </span><span class="kn">import</span> <span class="n">HTMLResponse</span><span class="p">,</span> <span class="n">JSONResponse</span>
|
|
71
|
+
<span class="kn">from</span><span class="w"> </span><span class="nn">lib.templates</span><span class="w"> </span><span class="kn">import</span> <span class="n">render</span>
|
|
72
|
+
<span class="kn">from</span><span class="w"> </span><span class="nn">lib.route_decorators</span><span class="w"> </span><span class="kn">import</span> <span class="n">requires_role</span>
|
|
73
|
+
<span class="kn">from</span><span class="w"> </span><span class="nn">typing</span><span class="w"> </span><span class="kn">import</span> <span class="n">Dict</span><span class="p">,</span> <span class="n">List</span><span class="p">,</span> <span class="n">Optional</span><span class="p">,</span> <span class="n">Any</span>
|
|
74
|
+
<span class="kn">from</span><span class="w"> </span><span class="nn">loguru</span><span class="w"> </span><span class="kn">import</span> <span class="n">logger</span>
|
|
75
|
+
<span class="kn">import</span><span class="w"> </span><span class="nn">traceback</span>
|
|
76
|
+
<span class="kn">from</span><span class="w"> </span><span class="nn">decimal</span><span class="w"> </span><span class="kn">import</span> <span class="n">Decimal</span>
|
|
77
|
+
<span class="kn">import</span><span class="w"> </span><span class="nn">json</span>
|
|
78
|
+
|
|
79
|
+
<span class="kn">from</span><span class="w"> </span><span class="nn">lib.providers.services</span><span class="w"> </span><span class="kn">import</span> <span class="n">service_manager</span>
|
|
80
|
+
|
|
81
|
+
<span class="kn">from</span><span class="w"> </span><span class="nn">.mod</span><span class="w"> </span><span class="kn">import</span> <span class="p">(</span>
|
|
82
|
+
<span class="n">create_subscription_plan</span><span class="p">,</span>
|
|
83
|
+
<span class="n">get_subscription_plans</span><span class="p">,</span>
|
|
84
|
+
<span class="n">get_subscription_plan</span><span class="p">,</span>
|
|
85
|
+
<span class="n">update_subscription_plan</span><span class="p">,</span>
|
|
86
|
+
<span class="n">deactivate_subscription_plan</span><span class="p">,</span>
|
|
87
|
+
<span class="n">activate_subscription_plan</span><span class="p">,</span>
|
|
88
|
+
<span class="n">get_available_features</span><span class="p">,</span>
|
|
89
|
+
<span class="n">create_plan_feature</span><span class="p">,</span>
|
|
90
|
+
<span class="n">update_plan_feature</span><span class="p">,</span>
|
|
91
|
+
<span class="n">deactivate_plan_feature</span><span class="p">,</span>
|
|
92
|
+
<span class="n">activate_plan_feature</span><span class="p">,</span>
|
|
93
|
+
<span class="n">get_page_templates</span><span class="p">,</span>
|
|
94
|
+
<span class="n">create_page_template</span><span class="p">,</span>
|
|
95
|
+
<span class="n">update_page_template</span><span class="p">,</span>
|
|
96
|
+
<span class="n">set_default_template</span><span class="p">,</span>
|
|
97
|
+
<span class="n">process_subscription_event</span><span class="p">,</span>
|
|
98
|
+
<span class="n">get_user_subscriptions</span><span class="p">,</span>
|
|
99
|
+
<span class="n">cancel_subscription</span>
|
|
100
|
+
<span class="p">)</span>
|
|
101
|
+
|
|
102
|
+
<span class="c1"># Define common error responses</span>
|
|
103
|
+
<span class="n">INVALID_REQUEST</span> <span class="o">=</span> <span class="n">HTTPException</span><span class="p">(</span><span class="n">status_code</span><span class="o">=</span><span class="mi">400</span><span class="p">,</span> <span class="n">detail</span><span class="o">=</span><span class="s2">"Invalid request parameters"</span><span class="p">)</span>
|
|
104
|
+
<span class="n">UNAUTHORIZED</span> <span class="o">=</span> <span class="n">HTTPException</span><span class="p">(</span><span class="n">status_code</span><span class="o">=</span><span class="mi">401</span><span class="p">,</span> <span class="n">detail</span><span class="o">=</span><span class="s2">"Unauthorized"</span><span class="p">)</span>
|
|
105
|
+
<span class="n">NOT_FOUND</span> <span class="o">=</span> <span class="n">HTTPException</span><span class="p">(</span><span class="n">status_code</span><span class="o">=</span><span class="mi">404</span><span class="p">,</span> <span class="n">detail</span><span class="o">=</span><span class="s2">"Resource not found"</span><span class="p">)</span>
|
|
106
|
+
<span class="n">SERVER_ERROR</span> <span class="o">=</span> <span class="n">HTTPException</span><span class="p">(</span><span class="n">status_code</span><span class="o">=</span><span class="mi">500</span><span class="p">,</span> <span class="n">detail</span><span class="o">=</span><span class="s2">"Internal server error"</span><span class="p">)</span>
|
|
107
|
+
|
|
108
|
+
<span class="c1"># Admin routes</span>
|
|
109
|
+
<span class="n">router_admin</span> <span class="o">=</span> <span class="n">APIRouter</span><span class="p">(</span><span class="n">dependencies</span><span class="o">=</span><span class="p">[</span><span class="n">requires_role</span><span class="p">(</span><span class="s1">'admin'</span><span class="p">)],</span> <span class="n">prefix</span><span class="o">=</span><span class="s2">"/admin/subscriptions"</span><span class="p">)</span>
|
|
110
|
+
|
|
111
|
+
<span class="c1"># Public routes</span>
|
|
112
|
+
<span class="n">router_public</span> <span class="o">=</span> <span class="n">APIRouter</span><span class="p">(</span><span class="n">prefix</span><span class="o">=</span><span class="s2">"/subscriptions"</span><span class="p">)</span>
|
|
113
|
+
|
|
114
|
+
<span class="c1"># Admin API routes - Plans</span>
|
|
115
|
+
|
|
116
|
+
<div class="viewcode-block" id="api_create_plan">
|
|
117
|
+
<a class="viewcode-back" href="../../../../source/mindroot.coreplugins.subscriptions.html#mindroot.coreplugins.subscriptions.router.api_create_plan">[docs]</a>
|
|
118
|
+
<span class="nd">@router_admin</span><span class="o">.</span><span class="n">post</span><span class="p">(</span><span class="s2">"/plans"</span><span class="p">)</span>
|
|
119
|
+
<span class="k">async</span> <span class="k">def</span><span class="w"> </span><span class="nf">api_create_plan</span><span class="p">(</span><span class="n">request</span><span class="p">:</span> <span class="n">Request</span><span class="p">):</span>
|
|
120
|
+
<span class="w"> </span><span class="sd">"""Create a new subscription plan"""</span>
|
|
121
|
+
<span class="k">try</span><span class="p">:</span>
|
|
122
|
+
<span class="n">data</span> <span class="o">=</span> <span class="k">await</span> <span class="n">request</span><span class="o">.</span><span class="n">json</span><span class="p">()</span>
|
|
123
|
+
<span class="n">plan</span> <span class="o">=</span> <span class="k">await</span> <span class="n">create_subscription_plan</span><span class="p">(</span><span class="n">data</span><span class="p">,</span> <span class="n">context</span><span class="o">=</span><span class="n">request</span><span class="p">)</span>
|
|
124
|
+
<span class="k">return</span> <span class="n">JSONResponse</span><span class="p">({</span><span class="s2">"status"</span><span class="p">:</span> <span class="s2">"success"</span><span class="p">,</span> <span class="s2">"plan"</span><span class="p">:</span> <span class="n">plan</span><span class="p">})</span>
|
|
125
|
+
<span class="k">except</span> <span class="ne">ValueError</span> <span class="k">as</span> <span class="n">e</span><span class="p">:</span>
|
|
126
|
+
<span class="k">raise</span> <span class="n">HTTPException</span><span class="p">(</span><span class="n">status_code</span><span class="o">=</span><span class="mi">400</span><span class="p">,</span> <span class="n">detail</span><span class="o">=</span><span class="nb">str</span><span class="p">(</span><span class="n">e</span><span class="p">))</span>
|
|
127
|
+
<span class="k">except</span> <span class="ne">Exception</span> <span class="k">as</span> <span class="n">e</span><span class="p">:</span>
|
|
128
|
+
<span class="n">logger</span><span class="o">.</span><span class="n">error</span><span class="p">(</span><span class="sa">f</span><span class="s2">"Error creating plan: </span><span class="si">{</span><span class="n">e</span><span class="si">}</span><span class="s2">"</span><span class="p">)</span>
|
|
129
|
+
<span class="k">raise</span> <span class="n">SERVER_ERROR</span></div>
|
|
130
|
+
|
|
131
|
+
|
|
132
|
+
<div class="viewcode-block" id="api_get_all_plans">
|
|
133
|
+
<a class="viewcode-back" href="../../../../source/mindroot.coreplugins.subscriptions.html#mindroot.coreplugins.subscriptions.router.api_get_all_plans">[docs]</a>
|
|
134
|
+
<span class="nd">@router_admin</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s2">"/plans"</span><span class="p">)</span>
|
|
135
|
+
<span class="k">async</span> <span class="k">def</span><span class="w"> </span><span class="nf">api_get_all_plans</span><span class="p">(</span><span class="n">request</span><span class="p">:</span> <span class="n">Request</span><span class="p">,</span> <span class="n">active_only</span><span class="p">:</span> <span class="nb">bool</span> <span class="o">=</span> <span class="kc">True</span><span class="p">):</span>
|
|
136
|
+
<span class="w"> </span><span class="sd">"""Get all subscription plans"""</span>
|
|
137
|
+
<span class="k">try</span><span class="p">:</span>
|
|
138
|
+
<span class="n">plans</span> <span class="o">=</span> <span class="k">await</span> <span class="n">get_subscription_plans</span><span class="p">(</span><span class="n">active_only</span><span class="p">,</span> <span class="n">context</span><span class="o">=</span><span class="n">request</span><span class="p">)</span>
|
|
139
|
+
<span class="k">return</span> <span class="n">JSONResponse</span><span class="p">({</span><span class="s2">"status"</span><span class="p">:</span> <span class="s2">"success"</span><span class="p">,</span> <span class="s2">"plans"</span><span class="p">:</span> <span class="n">plans</span><span class="p">})</span>
|
|
140
|
+
<span class="k">except</span> <span class="ne">Exception</span> <span class="k">as</span> <span class="n">e</span><span class="p">:</span>
|
|
141
|
+
<span class="n">logger</span><span class="o">.</span><span class="n">error</span><span class="p">(</span><span class="sa">f</span><span class="s2">"Error getting plans: </span><span class="si">{</span><span class="n">e</span><span class="si">}</span><span class="s2">"</span><span class="p">)</span>
|
|
142
|
+
<span class="k">raise</span> <span class="n">SERVER_ERROR</span></div>
|
|
143
|
+
|
|
144
|
+
|
|
145
|
+
<div class="viewcode-block" id="api_update_plan">
|
|
146
|
+
<a class="viewcode-back" href="../../../../source/mindroot.coreplugins.subscriptions.html#mindroot.coreplugins.subscriptions.router.api_update_plan">[docs]</a>
|
|
147
|
+
<span class="nd">@router_admin</span><span class="o">.</span><span class="n">put</span><span class="p">(</span><span class="s2">"/plans/</span><span class="si">{plan_id}</span><span class="s2">"</span><span class="p">)</span>
|
|
148
|
+
<span class="k">async</span> <span class="k">def</span><span class="w"> </span><span class="nf">api_update_plan</span><span class="p">(</span><span class="n">plan_id</span><span class="p">:</span> <span class="nb">str</span><span class="p">,</span> <span class="n">request</span><span class="p">:</span> <span class="n">Request</span><span class="p">):</span>
|
|
149
|
+
<span class="w"> </span><span class="sd">"""Update an existing subscription plan"""</span>
|
|
150
|
+
<span class="k">try</span><span class="p">:</span>
|
|
151
|
+
<span class="n">data</span> <span class="o">=</span> <span class="k">await</span> <span class="n">request</span><span class="o">.</span><span class="n">json</span><span class="p">()</span>
|
|
152
|
+
<span class="n">plan</span> <span class="o">=</span> <span class="k">await</span> <span class="n">update_subscription_plan</span><span class="p">(</span><span class="n">plan_id</span><span class="p">,</span> <span class="n">data</span><span class="p">,</span> <span class="n">context</span><span class="o">=</span><span class="n">request</span><span class="p">)</span>
|
|
153
|
+
<span class="k">return</span> <span class="n">JSONResponse</span><span class="p">({</span><span class="s2">"status"</span><span class="p">:</span> <span class="s2">"success"</span><span class="p">,</span> <span class="s2">"plan"</span><span class="p">:</span> <span class="n">plan</span><span class="p">})</span>
|
|
154
|
+
<span class="k">except</span> <span class="ne">ValueError</span> <span class="k">as</span> <span class="n">e</span><span class="p">:</span>
|
|
155
|
+
<span class="k">raise</span> <span class="n">HTTPException</span><span class="p">(</span><span class="n">status_code</span><span class="o">=</span><span class="mi">400</span><span class="p">,</span> <span class="n">detail</span><span class="o">=</span><span class="nb">str</span><span class="p">(</span><span class="n">e</span><span class="p">))</span>
|
|
156
|
+
<span class="k">except</span> <span class="ne">Exception</span> <span class="k">as</span> <span class="n">e</span><span class="p">:</span>
|
|
157
|
+
<span class="n">logger</span><span class="o">.</span><span class="n">error</span><span class="p">(</span><span class="sa">f</span><span class="s2">"Error updating plan: </span><span class="si">{</span><span class="n">e</span><span class="si">}</span><span class="s2">"</span><span class="p">)</span>
|
|
158
|
+
<span class="k">raise</span> <span class="n">SERVER_ERROR</span></div>
|
|
159
|
+
|
|
160
|
+
|
|
161
|
+
<div class="viewcode-block" id="api_deactivate_plan">
|
|
162
|
+
<a class="viewcode-back" href="../../../../source/mindroot.coreplugins.subscriptions.html#mindroot.coreplugins.subscriptions.router.api_deactivate_plan">[docs]</a>
|
|
163
|
+
<span class="nd">@router_admin</span><span class="o">.</span><span class="n">delete</span><span class="p">(</span><span class="s2">"/plans/</span><span class="si">{plan_id}</span><span class="s2">"</span><span class="p">)</span>
|
|
164
|
+
<span class="k">async</span> <span class="k">def</span><span class="w"> </span><span class="nf">api_deactivate_plan</span><span class="p">(</span><span class="n">plan_id</span><span class="p">:</span> <span class="nb">str</span><span class="p">,</span> <span class="n">request</span><span class="p">:</span> <span class="n">Request</span><span class="p">):</span>
|
|
165
|
+
<span class="w"> </span><span class="sd">"""Deactivate a subscription plan"""</span>
|
|
166
|
+
<span class="k">try</span><span class="p">:</span>
|
|
167
|
+
<span class="n">result</span> <span class="o">=</span> <span class="k">await</span> <span class="n">deactivate_subscription_plan</span><span class="p">(</span><span class="n">plan_id</span><span class="p">,</span> <span class="n">context</span><span class="o">=</span><span class="n">request</span><span class="p">)</span>
|
|
168
|
+
<span class="k">return</span> <span class="n">JSONResponse</span><span class="p">(</span><span class="n">result</span><span class="p">)</span>
|
|
169
|
+
<span class="k">except</span> <span class="ne">ValueError</span> <span class="k">as</span> <span class="n">e</span><span class="p">:</span>
|
|
170
|
+
<span class="k">raise</span> <span class="n">HTTPException</span><span class="p">(</span><span class="n">status_code</span><span class="o">=</span><span class="mi">400</span><span class="p">,</span> <span class="n">detail</span><span class="o">=</span><span class="nb">str</span><span class="p">(</span><span class="n">e</span><span class="p">))</span>
|
|
171
|
+
<span class="k">except</span> <span class="ne">Exception</span> <span class="k">as</span> <span class="n">e</span><span class="p">:</span>
|
|
172
|
+
<span class="n">logger</span><span class="o">.</span><span class="n">error</span><span class="p">(</span><span class="sa">f</span><span class="s2">"Error deactivating plan: </span><span class="si">{</span><span class="n">e</span><span class="si">}</span><span class="s2">"</span><span class="p">)</span>
|
|
173
|
+
<span class="k">raise</span> <span class="n">SERVER_ERROR</span></div>
|
|
174
|
+
|
|
175
|
+
|
|
176
|
+
<div class="viewcode-block" id="api_activate_plan">
|
|
177
|
+
<a class="viewcode-back" href="../../../../source/mindroot.coreplugins.subscriptions.html#mindroot.coreplugins.subscriptions.router.api_activate_plan">[docs]</a>
|
|
178
|
+
<span class="nd">@router_admin</span><span class="o">.</span><span class="n">post</span><span class="p">(</span><span class="s2">"/plans/</span><span class="si">{plan_id}</span><span class="s2">/activate"</span><span class="p">)</span>
|
|
179
|
+
<span class="k">async</span> <span class="k">def</span><span class="w"> </span><span class="nf">api_activate_plan</span><span class="p">(</span><span class="n">plan_id</span><span class="p">:</span> <span class="nb">str</span><span class="p">,</span> <span class="n">request</span><span class="p">:</span> <span class="n">Request</span><span class="p">):</span>
|
|
180
|
+
<span class="w"> </span><span class="sd">"""Activate a subscription plan"""</span>
|
|
181
|
+
<span class="k">try</span><span class="p">:</span>
|
|
182
|
+
<span class="n">result</span> <span class="o">=</span> <span class="k">await</span> <span class="n">activate_subscription_plan</span><span class="p">(</span><span class="n">plan_id</span><span class="p">,</span> <span class="n">context</span><span class="o">=</span><span class="n">request</span><span class="p">)</span>
|
|
183
|
+
<span class="k">return</span> <span class="n">JSONResponse</span><span class="p">(</span><span class="n">result</span><span class="p">)</span>
|
|
184
|
+
<span class="k">except</span> <span class="ne">ValueError</span> <span class="k">as</span> <span class="n">e</span><span class="p">:</span>
|
|
185
|
+
<span class="k">raise</span> <span class="n">HTTPException</span><span class="p">(</span><span class="n">status_code</span><span class="o">=</span><span class="mi">400</span><span class="p">,</span> <span class="n">detail</span><span class="o">=</span><span class="nb">str</span><span class="p">(</span><span class="n">e</span><span class="p">))</span>
|
|
186
|
+
<span class="k">except</span> <span class="ne">Exception</span> <span class="k">as</span> <span class="n">e</span><span class="p">:</span>
|
|
187
|
+
<span class="n">logger</span><span class="o">.</span><span class="n">error</span><span class="p">(</span><span class="sa">f</span><span class="s2">"Error activating plan: </span><span class="si">{</span><span class="n">e</span><span class="si">}</span><span class="s2">"</span><span class="p">)</span>
|
|
188
|
+
<span class="k">raise</span> <span class="n">SERVER_ERROR</span></div>
|
|
189
|
+
|
|
190
|
+
|
|
191
|
+
<span class="c1"># Admin API routes - Features</span>
|
|
192
|
+
|
|
193
|
+
<div class="viewcode-block" id="api_get_features">
|
|
194
|
+
<a class="viewcode-back" href="../../../../source/mindroot.coreplugins.subscriptions.html#mindroot.coreplugins.subscriptions.router.api_get_features">[docs]</a>
|
|
195
|
+
<span class="nd">@router_admin</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s2">"/features/list"</span><span class="p">)</span>
|
|
196
|
+
<span class="k">async</span> <span class="k">def</span><span class="w"> </span><span class="nf">api_get_features</span><span class="p">(</span><span class="n">request</span><span class="p">:</span> <span class="n">Request</span><span class="p">,</span> <span class="n">active_only</span><span class="p">:</span> <span class="nb">bool</span> <span class="o">=</span> <span class="kc">False</span><span class="p">):</span>
|
|
197
|
+
<span class="w"> </span><span class="sd">"""Get all plan features"""</span>
|
|
198
|
+
<span class="k">try</span><span class="p">:</span>
|
|
199
|
+
<span class="n">features</span> <span class="o">=</span> <span class="k">await</span> <span class="n">get_available_features</span><span class="p">(</span><span class="n">active_only</span><span class="p">,</span> <span class="n">context</span><span class="o">=</span><span class="n">request</span><span class="p">)</span>
|
|
200
|
+
<span class="k">return</span> <span class="n">JSONResponse</span><span class="p">({</span><span class="s2">"status"</span><span class="p">:</span> <span class="s2">"success"</span><span class="p">,</span> <span class="s2">"features"</span><span class="p">:</span> <span class="n">features</span><span class="p">})</span>
|
|
201
|
+
<span class="k">except</span> <span class="ne">Exception</span> <span class="k">as</span> <span class="n">e</span><span class="p">:</span>
|
|
202
|
+
<span class="n">logger</span><span class="o">.</span><span class="n">error</span><span class="p">(</span><span class="sa">f</span><span class="s2">"Error getting features: </span><span class="si">{</span><span class="n">e</span><span class="si">}</span><span class="s2">"</span><span class="p">)</span>
|
|
203
|
+
<span class="k">raise</span> <span class="n">SERVER_ERROR</span></div>
|
|
204
|
+
|
|
205
|
+
|
|
206
|
+
<div class="viewcode-block" id="api_create_feature">
|
|
207
|
+
<a class="viewcode-back" href="../../../../source/mindroot.coreplugins.subscriptions.html#mindroot.coreplugins.subscriptions.router.api_create_feature">[docs]</a>
|
|
208
|
+
<span class="nd">@router_admin</span><span class="o">.</span><span class="n">post</span><span class="p">(</span><span class="s2">"/features"</span><span class="p">)</span>
|
|
209
|
+
<span class="k">async</span> <span class="k">def</span><span class="w"> </span><span class="nf">api_create_feature</span><span class="p">(</span><span class="n">request</span><span class="p">:</span> <span class="n">Request</span><span class="p">):</span>
|
|
210
|
+
<span class="w"> </span><span class="sd">"""Create a new plan feature"""</span>
|
|
211
|
+
<span class="k">try</span><span class="p">:</span>
|
|
212
|
+
<span class="n">data</span> <span class="o">=</span> <span class="k">await</span> <span class="n">request</span><span class="o">.</span><span class="n">json</span><span class="p">()</span>
|
|
213
|
+
<span class="n">feature</span> <span class="o">=</span> <span class="k">await</span> <span class="n">create_plan_feature</span><span class="p">(</span><span class="n">data</span><span class="p">,</span> <span class="n">context</span><span class="o">=</span><span class="n">request</span><span class="p">)</span>
|
|
214
|
+
<span class="k">return</span> <span class="n">JSONResponse</span><span class="p">({</span><span class="s2">"status"</span><span class="p">:</span> <span class="s2">"success"</span><span class="p">,</span> <span class="s2">"feature"</span><span class="p">:</span> <span class="n">feature</span><span class="p">})</span>
|
|
215
|
+
<span class="k">except</span> <span class="ne">ValueError</span> <span class="k">as</span> <span class="n">e</span><span class="p">:</span>
|
|
216
|
+
<span class="k">raise</span> <span class="n">HTTPException</span><span class="p">(</span><span class="n">status_code</span><span class="o">=</span><span class="mi">400</span><span class="p">,</span> <span class="n">detail</span><span class="o">=</span><span class="nb">str</span><span class="p">(</span><span class="n">e</span><span class="p">))</span>
|
|
217
|
+
<span class="k">except</span> <span class="ne">Exception</span> <span class="k">as</span> <span class="n">e</span><span class="p">:</span>
|
|
218
|
+
<span class="n">logger</span><span class="o">.</span><span class="n">error</span><span class="p">(</span><span class="sa">f</span><span class="s2">"Error creating feature: </span><span class="si">{</span><span class="n">e</span><span class="si">}</span><span class="s2">"</span><span class="p">)</span>
|
|
219
|
+
<span class="k">raise</span> <span class="n">SERVER_ERROR</span></div>
|
|
220
|
+
|
|
221
|
+
|
|
222
|
+
<div class="viewcode-block" id="api_update_feature">
|
|
223
|
+
<a class="viewcode-back" href="../../../../source/mindroot.coreplugins.subscriptions.html#mindroot.coreplugins.subscriptions.router.api_update_feature">[docs]</a>
|
|
224
|
+
<span class="nd">@router_admin</span><span class="o">.</span><span class="n">put</span><span class="p">(</span><span class="s2">"/features/</span><span class="si">{feature_id}</span><span class="s2">"</span><span class="p">)</span>
|
|
225
|
+
<span class="k">async</span> <span class="k">def</span><span class="w"> </span><span class="nf">api_update_feature</span><span class="p">(</span><span class="n">feature_id</span><span class="p">:</span> <span class="nb">str</span><span class="p">,</span> <span class="n">request</span><span class="p">:</span> <span class="n">Request</span><span class="p">):</span>
|
|
226
|
+
<span class="w"> </span><span class="sd">"""Update an existing plan feature"""</span>
|
|
227
|
+
<span class="k">try</span><span class="p">:</span>
|
|
228
|
+
<span class="n">data</span> <span class="o">=</span> <span class="k">await</span> <span class="n">request</span><span class="o">.</span><span class="n">json</span><span class="p">()</span>
|
|
229
|
+
<span class="n">feature</span> <span class="o">=</span> <span class="k">await</span> <span class="n">update_plan_feature</span><span class="p">(</span><span class="n">feature_id</span><span class="p">,</span> <span class="n">data</span><span class="p">,</span> <span class="n">context</span><span class="o">=</span><span class="n">request</span><span class="p">)</span>
|
|
230
|
+
<span class="k">return</span> <span class="n">JSONResponse</span><span class="p">({</span><span class="s2">"status"</span><span class="p">:</span> <span class="s2">"success"</span><span class="p">,</span> <span class="s2">"feature"</span><span class="p">:</span> <span class="n">feature</span><span class="p">})</span>
|
|
231
|
+
<span class="k">except</span> <span class="ne">ValueError</span> <span class="k">as</span> <span class="n">e</span><span class="p">:</span>
|
|
232
|
+
<span class="k">raise</span> <span class="n">HTTPException</span><span class="p">(</span><span class="n">status_code</span><span class="o">=</span><span class="mi">400</span><span class="p">,</span> <span class="n">detail</span><span class="o">=</span><span class="nb">str</span><span class="p">(</span><span class="n">e</span><span class="p">))</span>
|
|
233
|
+
<span class="k">except</span> <span class="ne">Exception</span> <span class="k">as</span> <span class="n">e</span><span class="p">:</span>
|
|
234
|
+
<span class="n">logger</span><span class="o">.</span><span class="n">error</span><span class="p">(</span><span class="sa">f</span><span class="s2">"Error updating feature: </span><span class="si">{</span><span class="n">e</span><span class="si">}</span><span class="s2">"</span><span class="p">)</span>
|
|
235
|
+
<span class="k">raise</span> <span class="n">SERVER_ERROR</span></div>
|
|
236
|
+
|
|
237
|
+
|
|
238
|
+
<div class="viewcode-block" id="api_deactivate_feature">
|
|
239
|
+
<a class="viewcode-back" href="../../../../source/mindroot.coreplugins.subscriptions.html#mindroot.coreplugins.subscriptions.router.api_deactivate_feature">[docs]</a>
|
|
240
|
+
<span class="nd">@router_admin</span><span class="o">.</span><span class="n">post</span><span class="p">(</span><span class="s2">"/features/</span><span class="si">{feature_id}</span><span class="s2">/deactivate"</span><span class="p">)</span>
|
|
241
|
+
<span class="k">async</span> <span class="k">def</span><span class="w"> </span><span class="nf">api_deactivate_feature</span><span class="p">(</span><span class="n">feature_id</span><span class="p">:</span> <span class="nb">str</span><span class="p">,</span> <span class="n">request</span><span class="p">:</span> <span class="n">Request</span><span class="p">):</span>
|
|
242
|
+
<span class="w"> </span><span class="sd">"""Deactivate a plan feature"""</span>
|
|
243
|
+
<span class="k">try</span><span class="p">:</span>
|
|
244
|
+
<span class="n">result</span> <span class="o">=</span> <span class="k">await</span> <span class="n">deactivate_plan_feature</span><span class="p">(</span><span class="n">feature_id</span><span class="p">,</span> <span class="n">context</span><span class="o">=</span><span class="n">request</span><span class="p">)</span>
|
|
245
|
+
<span class="k">return</span> <span class="n">JSONResponse</span><span class="p">(</span><span class="n">result</span><span class="p">)</span>
|
|
246
|
+
<span class="k">except</span> <span class="ne">ValueError</span> <span class="k">as</span> <span class="n">e</span><span class="p">:</span>
|
|
247
|
+
<span class="k">raise</span> <span class="n">HTTPException</span><span class="p">(</span><span class="n">status_code</span><span class="o">=</span><span class="mi">400</span><span class="p">,</span> <span class="n">detail</span><span class="o">=</span><span class="nb">str</span><span class="p">(</span><span class="n">e</span><span class="p">))</span>
|
|
248
|
+
<span class="k">except</span> <span class="ne">Exception</span> <span class="k">as</span> <span class="n">e</span><span class="p">:</span>
|
|
249
|
+
<span class="n">logger</span><span class="o">.</span><span class="n">error</span><span class="p">(</span><span class="sa">f</span><span class="s2">"Error deactivating feature: </span><span class="si">{</span><span class="n">e</span><span class="si">}</span><span class="s2">"</span><span class="p">)</span>
|
|
250
|
+
<span class="k">raise</span> <span class="n">SERVER_ERROR</span></div>
|
|
251
|
+
|
|
252
|
+
|
|
253
|
+
<div class="viewcode-block" id="api_activate_feature">
|
|
254
|
+
<a class="viewcode-back" href="../../../../source/mindroot.coreplugins.subscriptions.html#mindroot.coreplugins.subscriptions.router.api_activate_feature">[docs]</a>
|
|
255
|
+
<span class="nd">@router_admin</span><span class="o">.</span><span class="n">post</span><span class="p">(</span><span class="s2">"/features/</span><span class="si">{feature_id}</span><span class="s2">/activate"</span><span class="p">)</span>
|
|
256
|
+
<span class="k">async</span> <span class="k">def</span><span class="w"> </span><span class="nf">api_activate_feature</span><span class="p">(</span><span class="n">feature_id</span><span class="p">:</span> <span class="nb">str</span><span class="p">,</span> <span class="n">request</span><span class="p">:</span> <span class="n">Request</span><span class="p">):</span>
|
|
257
|
+
<span class="w"> </span><span class="sd">"""Activate a plan feature"""</span>
|
|
258
|
+
<span class="k">try</span><span class="p">:</span>
|
|
259
|
+
<span class="n">result</span> <span class="o">=</span> <span class="k">await</span> <span class="n">activate_plan_feature</span><span class="p">(</span><span class="n">feature_id</span><span class="p">,</span> <span class="n">context</span><span class="o">=</span><span class="n">request</span><span class="p">)</span>
|
|
260
|
+
<span class="k">return</span> <span class="n">JSONResponse</span><span class="p">(</span><span class="n">result</span><span class="p">)</span>
|
|
261
|
+
<span class="k">except</span> <span class="ne">ValueError</span> <span class="k">as</span> <span class="n">e</span><span class="p">:</span>
|
|
262
|
+
<span class="k">raise</span> <span class="n">HTTPException</span><span class="p">(</span><span class="n">status_code</span><span class="o">=</span><span class="mi">400</span><span class="p">,</span> <span class="n">detail</span><span class="o">=</span><span class="nb">str</span><span class="p">(</span><span class="n">e</span><span class="p">))</span>
|
|
263
|
+
<span class="k">except</span> <span class="ne">Exception</span> <span class="k">as</span> <span class="n">e</span><span class="p">:</span>
|
|
264
|
+
<span class="n">logger</span><span class="o">.</span><span class="n">error</span><span class="p">(</span><span class="sa">f</span><span class="s2">"Error activating feature: </span><span class="si">{</span><span class="n">e</span><span class="si">}</span><span class="s2">"</span><span class="p">)</span>
|
|
265
|
+
<span class="k">raise</span> <span class="n">SERVER_ERROR</span></div>
|
|
266
|
+
|
|
267
|
+
|
|
268
|
+
<span class="c1"># Admin API routes - Templates</span>
|
|
269
|
+
|
|
270
|
+
<div class="viewcode-block" id="api_get_templates">
|
|
271
|
+
<a class="viewcode-back" href="../../../../source/mindroot.coreplugins.subscriptions.html#mindroot.coreplugins.subscriptions.router.api_get_templates">[docs]</a>
|
|
272
|
+
<span class="nd">@router_admin</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s2">"/templates/list"</span><span class="p">)</span>
|
|
273
|
+
<span class="k">async</span> <span class="k">def</span><span class="w"> </span><span class="nf">api_get_templates</span><span class="p">(</span><span class="n">request</span><span class="p">:</span> <span class="n">Request</span><span class="p">):</span>
|
|
274
|
+
<span class="w"> </span><span class="sd">"""Get all page templates"""</span>
|
|
275
|
+
<span class="k">try</span><span class="p">:</span>
|
|
276
|
+
<span class="n">templates</span> <span class="o">=</span> <span class="k">await</span> <span class="n">get_page_templates</span><span class="p">(</span><span class="n">context</span><span class="o">=</span><span class="n">request</span><span class="p">)</span>
|
|
277
|
+
<span class="k">return</span> <span class="n">JSONResponse</span><span class="p">({</span><span class="s2">"status"</span><span class="p">:</span> <span class="s2">"success"</span><span class="p">,</span> <span class="s2">"templates"</span><span class="p">:</span> <span class="n">templates</span><span class="p">})</span>
|
|
278
|
+
<span class="k">except</span> <span class="ne">Exception</span> <span class="k">as</span> <span class="n">e</span><span class="p">:</span>
|
|
279
|
+
<span class="n">logger</span><span class="o">.</span><span class="n">error</span><span class="p">(</span><span class="sa">f</span><span class="s2">"Error getting templates: </span><span class="si">{</span><span class="n">e</span><span class="si">}</span><span class="s2">"</span><span class="p">)</span>
|
|
280
|
+
<span class="k">raise</span> <span class="n">SERVER_ERROR</span></div>
|
|
281
|
+
|
|
282
|
+
|
|
283
|
+
<div class="viewcode-block" id="api_create_template">
|
|
284
|
+
<a class="viewcode-back" href="../../../../source/mindroot.coreplugins.subscriptions.html#mindroot.coreplugins.subscriptions.router.api_create_template">[docs]</a>
|
|
285
|
+
<span class="nd">@router_admin</span><span class="o">.</span><span class="n">post</span><span class="p">(</span><span class="s2">"/templates"</span><span class="p">)</span>
|
|
286
|
+
<span class="k">async</span> <span class="k">def</span><span class="w"> </span><span class="nf">api_create_template</span><span class="p">(</span><span class="n">request</span><span class="p">:</span> <span class="n">Request</span><span class="p">):</span>
|
|
287
|
+
<span class="w"> </span><span class="sd">"""Create a new page template"""</span>
|
|
288
|
+
<span class="k">try</span><span class="p">:</span>
|
|
289
|
+
<span class="n">data</span> <span class="o">=</span> <span class="k">await</span> <span class="n">request</span><span class="o">.</span><span class="n">json</span><span class="p">()</span>
|
|
290
|
+
<span class="n">template</span> <span class="o">=</span> <span class="k">await</span> <span class="n">create_page_template</span><span class="p">(</span><span class="n">data</span><span class="p">,</span> <span class="n">context</span><span class="o">=</span><span class="n">request</span><span class="p">)</span>
|
|
291
|
+
<span class="k">return</span> <span class="n">JSONResponse</span><span class="p">({</span><span class="s2">"status"</span><span class="p">:</span> <span class="s2">"success"</span><span class="p">,</span> <span class="s2">"template"</span><span class="p">:</span> <span class="n">template</span><span class="p">})</span>
|
|
292
|
+
<span class="k">except</span> <span class="ne">ValueError</span> <span class="k">as</span> <span class="n">e</span><span class="p">:</span>
|
|
293
|
+
<span class="k">raise</span> <span class="n">HTTPException</span><span class="p">(</span><span class="n">status_code</span><span class="o">=</span><span class="mi">400</span><span class="p">,</span> <span class="n">detail</span><span class="o">=</span><span class="nb">str</span><span class="p">(</span><span class="n">e</span><span class="p">))</span>
|
|
294
|
+
<span class="k">except</span> <span class="ne">Exception</span> <span class="k">as</span> <span class="n">e</span><span class="p">:</span>
|
|
295
|
+
<span class="n">logger</span><span class="o">.</span><span class="n">error</span><span class="p">(</span><span class="sa">f</span><span class="s2">"Error creating template: </span><span class="si">{</span><span class="n">e</span><span class="si">}</span><span class="s2">"</span><span class="p">)</span>
|
|
296
|
+
<span class="k">raise</span> <span class="n">SERVER_ERROR</span></div>
|
|
297
|
+
|
|
298
|
+
|
|
299
|
+
<div class="viewcode-block" id="api_update_template">
|
|
300
|
+
<a class="viewcode-back" href="../../../../source/mindroot.coreplugins.subscriptions.html#mindroot.coreplugins.subscriptions.router.api_update_template">[docs]</a>
|
|
301
|
+
<span class="nd">@router_admin</span><span class="o">.</span><span class="n">put</span><span class="p">(</span><span class="s2">"/templates/</span><span class="si">{template_id}</span><span class="s2">"</span><span class="p">)</span>
|
|
302
|
+
<span class="k">async</span> <span class="k">def</span><span class="w"> </span><span class="nf">api_update_template</span><span class="p">(</span><span class="n">template_id</span><span class="p">:</span> <span class="nb">str</span><span class="p">,</span> <span class="n">request</span><span class="p">:</span> <span class="n">Request</span><span class="p">):</span>
|
|
303
|
+
<span class="w"> </span><span class="sd">"""Update an existing page template"""</span>
|
|
304
|
+
<span class="k">try</span><span class="p">:</span>
|
|
305
|
+
<span class="n">data</span> <span class="o">=</span> <span class="k">await</span> <span class="n">request</span><span class="o">.</span><span class="n">json</span><span class="p">()</span>
|
|
306
|
+
<span class="n">template</span> <span class="o">=</span> <span class="k">await</span> <span class="n">update_page_template</span><span class="p">(</span><span class="n">template_id</span><span class="p">,</span> <span class="n">data</span><span class="p">,</span> <span class="n">context</span><span class="o">=</span><span class="n">request</span><span class="p">)</span>
|
|
307
|
+
<span class="k">return</span> <span class="n">JSONResponse</span><span class="p">({</span><span class="s2">"status"</span><span class="p">:</span> <span class="s2">"success"</span><span class="p">,</span> <span class="s2">"template"</span><span class="p">:</span> <span class="n">template</span><span class="p">})</span>
|
|
308
|
+
<span class="k">except</span> <span class="ne">ValueError</span> <span class="k">as</span> <span class="n">e</span><span class="p">:</span>
|
|
309
|
+
<span class="k">raise</span> <span class="n">HTTPException</span><span class="p">(</span><span class="n">status_code</span><span class="o">=</span><span class="mi">400</span><span class="p">,</span> <span class="n">detail</span><span class="o">=</span><span class="nb">str</span><span class="p">(</span><span class="n">e</span><span class="p">))</span>
|
|
310
|
+
<span class="k">except</span> <span class="ne">Exception</span> <span class="k">as</span> <span class="n">e</span><span class="p">:</span>
|
|
311
|
+
<span class="n">logger</span><span class="o">.</span><span class="n">error</span><span class="p">(</span><span class="sa">f</span><span class="s2">"Error updating template: </span><span class="si">{</span><span class="n">e</span><span class="si">}</span><span class="s2">"</span><span class="p">)</span>
|
|
312
|
+
<span class="k">raise</span> <span class="n">SERVER_ERROR</span></div>
|
|
313
|
+
|
|
314
|
+
|
|
315
|
+
<div class="viewcode-block" id="api_set_default_template">
|
|
316
|
+
<a class="viewcode-back" href="../../../../source/mindroot.coreplugins.subscriptions.html#mindroot.coreplugins.subscriptions.router.api_set_default_template">[docs]</a>
|
|
317
|
+
<span class="nd">@router_admin</span><span class="o">.</span><span class="n">post</span><span class="p">(</span><span class="s2">"/templates/</span><span class="si">{template_id}</span><span class="s2">/set-default"</span><span class="p">)</span>
|
|
318
|
+
<span class="k">async</span> <span class="k">def</span><span class="w"> </span><span class="nf">api_set_default_template</span><span class="p">(</span><span class="n">template_id</span><span class="p">:</span> <span class="nb">str</span><span class="p">,</span> <span class="n">request</span><span class="p">:</span> <span class="n">Request</span><span class="p">):</span>
|
|
319
|
+
<span class="w"> </span><span class="sd">"""Set a template as the default"""</span>
|
|
320
|
+
<span class="k">try</span><span class="p">:</span>
|
|
321
|
+
<span class="n">result</span> <span class="o">=</span> <span class="k">await</span> <span class="n">set_default_template</span><span class="p">(</span><span class="n">template_id</span><span class="p">,</span> <span class="n">context</span><span class="o">=</span><span class="n">request</span><span class="p">)</span>
|
|
322
|
+
<span class="k">return</span> <span class="n">JSONResponse</span><span class="p">(</span><span class="n">result</span><span class="p">)</span>
|
|
323
|
+
<span class="k">except</span> <span class="ne">ValueError</span> <span class="k">as</span> <span class="n">e</span><span class="p">:</span>
|
|
324
|
+
<span class="k">raise</span> <span class="n">HTTPException</span><span class="p">(</span><span class="n">status_code</span><span class="o">=</span><span class="mi">400</span><span class="p">,</span> <span class="n">detail</span><span class="o">=</span><span class="nb">str</span><span class="p">(</span><span class="n">e</span><span class="p">))</span>
|
|
325
|
+
<span class="k">except</span> <span class="ne">Exception</span> <span class="k">as</span> <span class="n">e</span><span class="p">:</span>
|
|
326
|
+
<span class="n">logger</span><span class="o">.</span><span class="n">error</span><span class="p">(</span><span class="sa">f</span><span class="s2">"Error setting default template: </span><span class="si">{</span><span class="n">e</span><span class="si">}</span><span class="s2">"</span><span class="p">)</span>
|
|
327
|
+
<span class="k">raise</span> <span class="n">SERVER_ERROR</span></div>
|
|
328
|
+
|
|
329
|
+
|
|
330
|
+
<span class="c1"># Public API routes</span>
|
|
331
|
+
|
|
332
|
+
<div class="viewcode-block" id="api_get_plans">
|
|
333
|
+
<a class="viewcode-back" href="../../../../source/mindroot.coreplugins.subscriptions.html#mindroot.coreplugins.subscriptions.router.api_get_plans">[docs]</a>
|
|
334
|
+
<span class="nd">@router_public</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s2">"/plans"</span><span class="p">)</span>
|
|
335
|
+
<span class="k">async</span> <span class="k">def</span><span class="w"> </span><span class="nf">api_get_plans</span><span class="p">(</span><span class="n">request</span><span class="p">:</span> <span class="n">Request</span><span class="p">):</span>
|
|
336
|
+
<span class="w"> </span><span class="sd">"""Get available subscription plans"""</span>
|
|
337
|
+
<span class="k">try</span><span class="p">:</span>
|
|
338
|
+
<span class="n">plans</span> <span class="o">=</span> <span class="k">await</span> <span class="n">get_subscription_plans</span><span class="p">(</span><span class="n">active_only</span><span class="o">=</span><span class="kc">True</span><span class="p">,</span> <span class="n">context</span><span class="o">=</span><span class="n">request</span><span class="p">)</span>
|
|
339
|
+
<span class="k">return</span> <span class="n">JSONResponse</span><span class="p">({</span><span class="s2">"status"</span><span class="p">:</span> <span class="s2">"success"</span><span class="p">,</span> <span class="s2">"plans"</span><span class="p">:</span> <span class="n">plans</span><span class="p">})</span>
|
|
340
|
+
<span class="k">except</span> <span class="ne">Exception</span> <span class="k">as</span> <span class="n">e</span><span class="p">:</span>
|
|
341
|
+
<span class="n">logger</span><span class="o">.</span><span class="n">error</span><span class="p">(</span><span class="sa">f</span><span class="s2">"Error getting plans: </span><span class="si">{</span><span class="n">e</span><span class="si">}</span><span class="s2">"</span><span class="p">)</span>
|
|
342
|
+
<span class="k">raise</span> <span class="n">SERVER_ERROR</span></div>
|
|
343
|
+
|
|
344
|
+
|
|
345
|
+
<div class="viewcode-block" id="api_create_checkout">
|
|
346
|
+
<a class="viewcode-back" href="../../../../source/mindroot.coreplugins.subscriptions.html#mindroot.coreplugins.subscriptions.router.api_create_checkout">[docs]</a>
|
|
347
|
+
<span class="nd">@router_public</span><span class="o">.</span><span class="n">post</span><span class="p">(</span><span class="s2">"/checkout/</span><span class="si">{plan_id}</span><span class="s2">"</span><span class="p">)</span>
|
|
348
|
+
<span class="k">async</span> <span class="k">def</span><span class="w"> </span><span class="nf">api_create_checkout</span><span class="p">(</span><span class="n">plan_id</span><span class="p">:</span> <span class="nb">str</span><span class="p">,</span>
|
|
349
|
+
<span class="n">request</span><span class="p">:</span> <span class="n">Request</span><span class="p">,</span>
|
|
350
|
+
<span class="n">provider</span><span class="p">:</span> <span class="nb">str</span> <span class="o">=</span> <span class="n">Query</span><span class="p">(</span><span class="s1">'stripe'</span><span class="p">)):</span>
|
|
351
|
+
<span class="w"> </span><span class="sd">"""Create checkout session for subscription"""</span>
|
|
352
|
+
<span class="k">try</span><span class="p">:</span>
|
|
353
|
+
<span class="nb">print</span><span class="p">(</span><span class="s2">"checkout"</span><span class="p">)</span>
|
|
354
|
+
<span class="k">if</span> <span class="ow">not</span> <span class="n">request</span><span class="o">.</span><span class="n">state</span><span class="o">.</span><span class="n">user</span><span class="p">:</span>
|
|
355
|
+
<span class="nb">print</span><span class="p">(</span><span class="s2">"Unauthorized"</span><span class="p">)</span>
|
|
356
|
+
<span class="k">raise</span> <span class="n">UNAUTHORIZED</span>
|
|
357
|
+
|
|
358
|
+
<span class="n">username</span> <span class="o">=</span> <span class="n">request</span><span class="o">.</span><span class="n">state</span><span class="o">.</span><span class="n">user</span><span class="o">.</span><span class="n">username</span>
|
|
359
|
+
|
|
360
|
+
<span class="c1"># Get plan details</span>
|
|
361
|
+
<span class="n">plan</span> <span class="o">=</span> <span class="k">await</span> <span class="n">get_subscription_plan</span><span class="p">(</span><span class="n">plan_id</span><span class="p">,</span> <span class="n">context</span><span class="o">=</span><span class="n">request</span><span class="p">)</span>
|
|
362
|
+
<span class="k">if</span> <span class="ow">not</span> <span class="n">plan</span><span class="p">:</span>
|
|
363
|
+
<span class="nb">print</span><span class="p">(</span><span class="s2">"could not find plan"</span><span class="p">,</span><span class="n">plan_id</span><span class="p">)</span>
|
|
364
|
+
<span class="k">raise</span> <span class="n">NOT_FOUND</span>
|
|
365
|
+
|
|
366
|
+
<span class="c1"># Call provider-specific checkout service</span>
|
|
367
|
+
<span class="c1"># The service name is 'subscription_checkout' for all providers</span>
|
|
368
|
+
<span class="k">try</span><span class="p">:</span>
|
|
369
|
+
<span class="n">checkout_url</span> <span class="o">=</span> <span class="k">await</span> <span class="n">service_manager</span><span class="o">.</span><span class="n">subscription_checkout</span><span class="p">(</span>
|
|
370
|
+
<span class="n">user_id</span><span class="o">=</span><span class="n">username</span><span class="p">,</span>
|
|
371
|
+
<span class="n">plan_name</span><span class="o">=</span><span class="n">plan</span><span class="p">[</span><span class="s1">'name'</span><span class="p">],</span>
|
|
372
|
+
<span class="n">amount</span><span class="o">=</span><span class="n">Decimal</span><span class="p">(</span><span class="nb">str</span><span class="p">(</span><span class="n">plan</span><span class="p">[</span><span class="s1">'price'</span><span class="p">])),</span>
|
|
373
|
+
<span class="n">interval</span><span class="o">=</span><span class="n">plan</span><span class="p">[</span><span class="s1">'interval'</span><span class="p">],</span>
|
|
374
|
+
<span class="n">currency</span><span class="o">=</span><span class="n">plan</span><span class="p">[</span><span class="s1">'currency'</span><span class="p">],</span>
|
|
375
|
+
<span class="n">metadata</span><span class="o">=</span><span class="p">{</span>
|
|
376
|
+
<span class="s1">'plan_id'</span><span class="p">:</span> <span class="n">plan</span><span class="p">[</span><span class="s1">'plan_id'</span><span class="p">],</span>
|
|
377
|
+
<span class="s1">'credits_per_cycle'</span><span class="p">:</span> <span class="n">plan</span><span class="p">[</span><span class="s1">'credits_per_cycle'</span><span class="p">],</span>
|
|
378
|
+
<span class="s1">'source'</span><span class="p">:</span> <span class="s1">'subscription_plugin'</span>
|
|
379
|
+
<span class="p">}</span>
|
|
380
|
+
<span class="p">)</span>
|
|
381
|
+
|
|
382
|
+
<span class="k">return</span> <span class="n">JSONResponse</span><span class="p">({</span><span class="s2">"status"</span><span class="p">:</span> <span class="s2">"success"</span><span class="p">,</span> <span class="s2">"url"</span><span class="p">:</span> <span class="n">checkout_url</span><span class="p">})</span>
|
|
383
|
+
<span class="k">except</span> <span class="ne">AttributeError</span><span class="p">:</span>
|
|
384
|
+
<span class="n">logger</span><span class="o">.</span><span class="n">error</span><span class="p">(</span><span class="sa">f</span><span class="s2">"Payment provider '</span><span class="si">{</span><span class="n">provider</span><span class="si">}</span><span class="s2">' not available"</span><span class="p">)</span>
|
|
385
|
+
<span class="k">raise</span> <span class="n">HTTPException</span><span class="p">(</span><span class="n">status_code</span><span class="o">=</span><span class="mi">400</span><span class="p">,</span> <span class="n">detail</span><span class="o">=</span><span class="sa">f</span><span class="s2">"Payment provider '</span><span class="si">{</span><span class="n">provider</span><span class="si">}</span><span class="s2">' not available"</span><span class="p">)</span>
|
|
386
|
+
<span class="k">except</span> <span class="ne">Exception</span> <span class="k">as</span> <span class="n">e</span><span class="p">:</span>
|
|
387
|
+
<span class="n">logger</span><span class="o">.</span><span class="n">error</span><span class="p">(</span><span class="sa">f</span><span class="s2">"Error creating checkout: </span><span class="si">{</span><span class="n">e</span><span class="si">}</span><span class="s2">"</span><span class="p">)</span>
|
|
388
|
+
<span class="k">raise</span> <span class="n">SERVER_ERROR</span>
|
|
389
|
+
|
|
390
|
+
<span class="k">except</span> <span class="n">HTTPException</span><span class="p">:</span>
|
|
391
|
+
<span class="k">raise</span>
|
|
392
|
+
<span class="k">except</span> <span class="ne">Exception</span> <span class="k">as</span> <span class="n">e</span><span class="p">:</span>
|
|
393
|
+
<span class="n">logger</span><span class="o">.</span><span class="n">error</span><span class="p">(</span><span class="sa">f</span><span class="s2">"Error creating checkout: </span><span class="si">{</span><span class="n">e</span><span class="si">}</span><span class="s2">"</span><span class="p">)</span>
|
|
394
|
+
<span class="k">raise</span> <span class="n">SERVER_ERROR</span></div>
|
|
395
|
+
|
|
396
|
+
|
|
397
|
+
<div class="viewcode-block" id="api_get_my_subscriptions">
|
|
398
|
+
<a class="viewcode-back" href="../../../../source/mindroot.coreplugins.subscriptions.html#mindroot.coreplugins.subscriptions.router.api_get_my_subscriptions">[docs]</a>
|
|
399
|
+
<span class="nd">@router_public</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s2">"/my"</span><span class="p">)</span>
|
|
400
|
+
<span class="k">async</span> <span class="k">def</span><span class="w"> </span><span class="nf">api_get_my_subscriptions</span><span class="p">(</span><span class="n">request</span><span class="p">:</span> <span class="n">Request</span><span class="p">):</span>
|
|
401
|
+
<span class="w"> </span><span class="sd">"""Get current user's subscriptions"""</span>
|
|
402
|
+
<span class="k">try</span><span class="p">:</span>
|
|
403
|
+
<span class="k">if</span> <span class="ow">not</span> <span class="n">request</span><span class="o">.</span><span class="n">state</span><span class="o">.</span><span class="n">user</span><span class="p">:</span>
|
|
404
|
+
<span class="k">raise</span> <span class="n">UNAUTHORIZED</span>
|
|
405
|
+
|
|
406
|
+
<span class="n">username</span> <span class="o">=</span> <span class="n">request</span><span class="o">.</span><span class="n">state</span><span class="o">.</span><span class="n">user</span><span class="o">.</span><span class="n">username</span>
|
|
407
|
+
<span class="n">subscriptions</span> <span class="o">=</span> <span class="k">await</span> <span class="n">get_user_subscriptions</span><span class="p">(</span><span class="n">username</span><span class="p">,</span> <span class="n">context</span><span class="o">=</span><span class="n">request</span><span class="p">)</span>
|
|
408
|
+
|
|
409
|
+
<span class="k">return</span> <span class="n">JSONResponse</span><span class="p">({</span><span class="s2">"status"</span><span class="p">:</span> <span class="s2">"success"</span><span class="p">,</span> <span class="s2">"subscriptions"</span><span class="p">:</span> <span class="n">subscriptions</span><span class="p">})</span>
|
|
410
|
+
<span class="k">except</span> <span class="ne">Exception</span> <span class="k">as</span> <span class="n">e</span><span class="p">:</span>
|
|
411
|
+
<span class="n">logger</span><span class="o">.</span><span class="n">error</span><span class="p">(</span><span class="sa">f</span><span class="s2">"Error getting subscriptions: </span><span class="si">{</span><span class="n">e</span><span class="si">}</span><span class="s2">"</span><span class="p">)</span>
|
|
412
|
+
<span class="k">raise</span> <span class="n">SERVER_ERROR</span></div>
|
|
413
|
+
|
|
414
|
+
|
|
415
|
+
<div class="viewcode-block" id="api_cancel_subscription">
|
|
416
|
+
<a class="viewcode-back" href="../../../../source/mindroot.coreplugins.subscriptions.html#mindroot.coreplugins.subscriptions.router.api_cancel_subscription">[docs]</a>
|
|
417
|
+
<span class="nd">@router_public</span><span class="o">.</span><span class="n">post</span><span class="p">(</span><span class="s2">"/cancel/</span><span class="si">{subscription_id}</span><span class="s2">"</span><span class="p">)</span>
|
|
418
|
+
<span class="k">async</span> <span class="k">def</span><span class="w"> </span><span class="nf">api_cancel_subscription</span><span class="p">(</span><span class="n">subscription_id</span><span class="p">:</span> <span class="nb">str</span><span class="p">,</span> <span class="n">request</span><span class="p">:</span> <span class="n">Request</span><span class="p">,</span> <span class="n">at_period_end</span><span class="p">:</span> <span class="nb">bool</span> <span class="o">=</span> <span class="kc">True</span><span class="p">):</span>
|
|
419
|
+
<span class="w"> </span><span class="sd">"""Cancel a subscription"""</span>
|
|
420
|
+
<span class="k">try</span><span class="p">:</span>
|
|
421
|
+
<span class="k">if</span> <span class="ow">not</span> <span class="n">request</span><span class="o">.</span><span class="n">state</span><span class="o">.</span><span class="n">user</span><span class="p">:</span>
|
|
422
|
+
<span class="k">raise</span> <span class="n">UNAUTHORIZED</span>
|
|
423
|
+
|
|
424
|
+
<span class="c1"># Get subscription to check ownership</span>
|
|
425
|
+
<span class="n">subscriptions</span> <span class="o">=</span> <span class="k">await</span> <span class="n">get_user_subscriptions</span><span class="p">(</span><span class="n">request</span><span class="o">.</span><span class="n">state</span><span class="o">.</span><span class="n">user</span><span class="o">.</span><span class="n">username</span><span class="p">,</span> <span class="n">context</span><span class="o">=</span><span class="n">request</span><span class="p">)</span>
|
|
426
|
+
<span class="n">subscription_ids</span> <span class="o">=</span> <span class="p">[</span><span class="n">sub</span><span class="p">[</span><span class="s1">'subscription_id'</span><span class="p">]</span> <span class="k">for</span> <span class="n">sub</span> <span class="ow">in</span> <span class="n">subscriptions</span><span class="p">]</span>
|
|
427
|
+
|
|
428
|
+
<span class="c1"># Only allow cancellation if user owns the subscription or is admin</span>
|
|
429
|
+
<span class="k">if</span> <span class="n">subscription_id</span> <span class="ow">not</span> <span class="ow">in</span> <span class="n">subscription_ids</span> <span class="ow">and</span> <span class="s1">'admin'</span> <span class="ow">not</span> <span class="ow">in</span> <span class="n">request</span><span class="o">.</span><span class="n">state</span><span class="o">.</span><span class="n">user</span><span class="o">.</span><span class="n">roles</span><span class="p">:</span>
|
|
430
|
+
<span class="k">raise</span> <span class="n">UNAUTHORIZED</span>
|
|
431
|
+
|
|
432
|
+
<span class="n">result</span> <span class="o">=</span> <span class="k">await</span> <span class="n">cancel_subscription</span><span class="p">(</span><span class="n">subscription_id</span><span class="p">,</span> <span class="n">at_period_end</span><span class="p">,</span> <span class="n">context</span><span class="o">=</span><span class="n">request</span><span class="p">)</span>
|
|
433
|
+
|
|
434
|
+
<span class="k">return</span> <span class="n">JSONResponse</span><span class="p">({</span><span class="s2">"status"</span><span class="p">:</span> <span class="s2">"success"</span><span class="p">,</span> <span class="s2">"subscription"</span><span class="p">:</span> <span class="n">result</span><span class="p">})</span>
|
|
435
|
+
<span class="k">except</span> <span class="ne">ValueError</span> <span class="k">as</span> <span class="n">e</span><span class="p">:</span>
|
|
436
|
+
<span class="k">raise</span> <span class="n">HTTPException</span><span class="p">(</span><span class="n">status_code</span><span class="o">=</span><span class="mi">400</span><span class="p">,</span> <span class="n">detail</span><span class="o">=</span><span class="nb">str</span><span class="p">(</span><span class="n">e</span><span class="p">))</span>
|
|
437
|
+
<span class="k">except</span> <span class="ne">Exception</span> <span class="k">as</span> <span class="n">e</span><span class="p">:</span>
|
|
438
|
+
<span class="n">logger</span><span class="o">.</span><span class="n">error</span><span class="p">(</span><span class="sa">f</span><span class="s2">"Error cancelling subscription: </span><span class="si">{</span><span class="n">e</span><span class="si">}</span><span class="s2">"</span><span class="p">)</span>
|
|
439
|
+
<span class="k">raise</span> <span class="n">SERVER_ERROR</span></div>
|
|
440
|
+
|
|
441
|
+
|
|
442
|
+
<div class="viewcode-block" id="subscription_page">
|
|
443
|
+
<a class="viewcode-back" href="../../../../source/mindroot.coreplugins.subscriptions.html#mindroot.coreplugins.subscriptions.router.subscription_page">[docs]</a>
|
|
444
|
+
<span class="nd">@router_public</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s2">"/page"</span><span class="p">,</span> <span class="n">response_class</span><span class="o">=</span><span class="n">HTMLResponse</span><span class="p">)</span>
|
|
445
|
+
<span class="k">async</span> <span class="k">def</span><span class="w"> </span><span class="nf">subscription_page</span><span class="p">(</span><span class="n">request</span><span class="p">:</span> <span class="n">Request</span><span class="p">):</span>
|
|
446
|
+
<span class="w"> </span><span class="sd">"""Public subscription page"""</span>
|
|
447
|
+
<span class="k">try</span><span class="p">:</span>
|
|
448
|
+
<span class="c1"># Get active plans</span>
|
|
449
|
+
<span class="n">plans</span> <span class="o">=</span> <span class="k">await</span> <span class="n">get_subscription_plans</span><span class="p">(</span><span class="n">active_only</span><span class="o">=</span><span class="kc">True</span><span class="p">,</span> <span class="n">context</span><span class="o">=</span><span class="n">request</span><span class="p">)</span>
|
|
450
|
+
|
|
451
|
+
<span class="c1"># Get user's subscriptions if logged in</span>
|
|
452
|
+
<span class="n">user_subscriptions</span> <span class="o">=</span> <span class="p">[]</span>
|
|
453
|
+
<span class="k">if</span> <span class="n">request</span><span class="o">.</span><span class="n">state</span><span class="o">.</span><span class="n">user</span><span class="p">:</span>
|
|
454
|
+
<span class="n">user_subscriptions</span> <span class="o">=</span> <span class="k">await</span> <span class="n">get_user_subscriptions</span><span class="p">(</span><span class="n">request</span><span class="o">.</span><span class="n">state</span><span class="o">.</span><span class="n">user</span><span class="o">.</span><span class="n">username</span><span class="p">,</span> <span class="n">context</span><span class="o">=</span><span class="n">request</span><span class="p">)</span>
|
|
455
|
+
|
|
456
|
+
<span class="n">template_data</span> <span class="o">=</span> <span class="p">{</span>
|
|
457
|
+
<span class="s2">"plans"</span><span class="p">:</span> <span class="n">plans</span><span class="p">,</span>
|
|
458
|
+
<span class="s2">"user_subscriptions"</span><span class="p">:</span> <span class="n">user_subscriptions</span>
|
|
459
|
+
<span class="p">}</span>
|
|
460
|
+
|
|
461
|
+
<span class="n">html</span> <span class="o">=</span> <span class="k">await</span> <span class="n">render</span><span class="p">(</span><span class="s1">'subscription_page'</span><span class="p">,</span> <span class="n">template_data</span><span class="p">)</span>
|
|
462
|
+
<span class="k">return</span> <span class="n">HTMLResponse</span><span class="p">(</span><span class="n">html</span><span class="p">)</span>
|
|
463
|
+
<span class="k">except</span> <span class="ne">Exception</span> <span class="k">as</span> <span class="n">e</span><span class="p">:</span>
|
|
464
|
+
<span class="n">trace</span> <span class="o">=</span> <span class="n">traceback</span><span class="o">.</span><span class="n">format_exc</span><span class="p">()</span>
|
|
465
|
+
<span class="n">logger</span><span class="o">.</span><span class="n">error</span><span class="p">(</span><span class="sa">f</span><span class="s2">"Error rendering subscription page: </span><span class="si">{</span><span class="n">e</span><span class="si">}</span><span class="se">\n\n</span><span class="s2"> </span><span class="si">{</span><span class="n">trace</span><span class="si">}</span><span class="s2">"</span><span class="p">)</span>
|
|
466
|
+
<span class="k">raise</span> <span class="n">SERVER_ERROR</span></div>
|
|
467
|
+
|
|
468
|
+
|
|
469
|
+
<span class="c1"># Combine all routers</span>
|
|
470
|
+
<span class="n">router</span> <span class="o">=</span> <span class="n">APIRouter</span><span class="p">()</span>
|
|
471
|
+
<span class="n">router</span><span class="o">.</span><span class="n">include_router</span><span class="p">(</span><span class="n">router_admin</span><span class="p">)</span>
|
|
472
|
+
<span class="n">router</span><span class="o">.</span><span class="n">include_router</span><span class="p">(</span><span class="n">router_public</span><span class="p">)</span>
|
|
473
|
+
</pre></div>
|
|
474
|
+
|
|
475
|
+
</div>
|
|
476
|
+
</div>
|
|
477
|
+
<footer>
|
|
478
|
+
|
|
479
|
+
<hr/>
|
|
480
|
+
|
|
481
|
+
<div role="contentinfo">
|
|
482
|
+
<p>© Copyright 2025, Jason Livesay.</p>
|
|
483
|
+
</div>
|
|
484
|
+
|
|
485
|
+
Built with <a href="https://www.sphinx-doc.org/">Sphinx</a> using a
|
|
486
|
+
<a href="https://github.com/readthedocs/sphinx_rtd_theme">theme</a>
|
|
487
|
+
provided by <a href="https://readthedocs.org">Read the Docs</a>.
|
|
488
|
+
|
|
489
|
+
|
|
490
|
+
</footer>
|
|
491
|
+
</div>
|
|
492
|
+
</div>
|
|
493
|
+
</section>
|
|
494
|
+
</div>
|
|
495
|
+
<script>
|
|
496
|
+
jQuery(function () {
|
|
497
|
+
SphinxRtdTheme.Navigation.enable(true);
|
|
498
|
+
});
|
|
499
|
+
</script>
|
|
500
|
+
|
|
501
|
+
</body>
|
|
502
|
+
</html>
|