mindroot 9.10.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/__init__.py +1 -0
- mindroot/coreplugins/__init__.py +2 -0
- 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/lib/plugins/default_plugin_manifest.json +1 -1
- mindroot/server.py +10 -1
- {mindroot-9.10.0.dist-info → mindroot-9.12.0.dist-info}/METADATA +1 -1
- {mindroot-9.10.0.dist-info → mindroot-9.12.0.dist-info}/RECORD +418 -10
- {mindroot-9.10.0.dist-info → mindroot-9.12.0.dist-info}/WHEEL +0 -0
- {mindroot-9.10.0.dist-info → mindroot-9.12.0.dist-info}/entry_points.txt +0 -0
- {mindroot-9.10.0.dist-info → mindroot-9.12.0.dist-info}/licenses/LICENSE +0 -0
- {mindroot-9.10.0.dist-info → mindroot-9.12.0.dist-info}/top_level.txt +0 -0
|
@@ -0,0 +1,343 @@
|
|
|
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.email.imap_handler — 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
|
+
<p class="caption" role="heading"><span class="caption-text">Contents:</span></p>
|
|
43
|
+
<ul>
|
|
44
|
+
<li class="toctree-l1"><a class="reference internal" href="../../../../getting_started.html">Getting Started</a></li>
|
|
45
|
+
</ul>
|
|
46
|
+
|
|
47
|
+
</div>
|
|
48
|
+
</div>
|
|
49
|
+
</nav>
|
|
50
|
+
|
|
51
|
+
<section data-toggle="wy-nav-shift" class="wy-nav-content-wrap"><nav class="wy-nav-top" aria-label="Mobile navigation menu" style="background: #343131" >
|
|
52
|
+
<i data-toggle="wy-nav-top" class="fa fa-bars"></i>
|
|
53
|
+
<a href="../../../../index.html">MindRoot</a>
|
|
54
|
+
</nav>
|
|
55
|
+
|
|
56
|
+
<div class="wy-nav-content">
|
|
57
|
+
<div class="rst-content">
|
|
58
|
+
<div role="navigation" aria-label="Page navigation">
|
|
59
|
+
<ul class="wy-breadcrumbs">
|
|
60
|
+
<li><a href="../../../../index.html" class="icon icon-home" aria-label="Home"></a></li>
|
|
61
|
+
<li class="breadcrumb-item"><a href="../../../index.html">Module code</a></li>
|
|
62
|
+
<li class="breadcrumb-item active">mindroot.coreplugins.email.imap_handler</li>
|
|
63
|
+
<li class="wy-breadcrumbs-aside">
|
|
64
|
+
</li>
|
|
65
|
+
</ul>
|
|
66
|
+
<hr/>
|
|
67
|
+
</div>
|
|
68
|
+
<div role="main" class="document" itemscope="itemscope" itemtype="http://schema.org/Article">
|
|
69
|
+
<div itemprop="articleBody">
|
|
70
|
+
|
|
71
|
+
<h1>Source code for mindroot.coreplugins.email.imap_handler</h1><div class="highlight"><pre>
|
|
72
|
+
<span></span><span class="kn">import</span><span class="w"> </span><span class="nn">imaplib</span>
|
|
73
|
+
<span class="kn">import</span><span class="w"> </span><span class="nn">email</span>
|
|
74
|
+
<span class="kn">import</span><span class="w"> </span><span class="nn">chardet</span>
|
|
75
|
+
<span class="kn">from</span><span class="w"> </span><span class="nn">datetime</span><span class="w"> </span><span class="kn">import</span> <span class="n">datetime</span><span class="p">,</span> <span class="n">timedelta</span>
|
|
76
|
+
<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>
|
|
77
|
+
<span class="kn">import</span><span class="w"> </span><span class="nn">logging</span>
|
|
78
|
+
|
|
79
|
+
<span class="n">logger</span> <span class="o">=</span> <span class="n">logging</span><span class="o">.</span><span class="n">getLogger</span><span class="p">(</span><span class="vm">__name__</span><span class="p">)</span>
|
|
80
|
+
|
|
81
|
+
<div class="viewcode-block" id="IMAPHandler">
|
|
82
|
+
<a class="viewcode-back" href="../../../../source/mindroot.coreplugins.email.html#mindroot.coreplugins.email.imap_handler.IMAPHandler">[docs]</a>
|
|
83
|
+
<span class="k">class</span><span class="w"> </span><span class="nc">IMAPHandler</span><span class="p">:</span>
|
|
84
|
+
<span class="k">def</span><span class="w"> </span><span class="fm">__init__</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">config</span><span class="p">:</span> <span class="n">Dict</span><span class="p">):</span>
|
|
85
|
+
<span class="bp">self</span><span class="o">.</span><span class="n">imap_server</span> <span class="o">=</span> <span class="n">config</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s1">'imap_server'</span><span class="p">)</span>
|
|
86
|
+
<span class="bp">self</span><span class="o">.</span><span class="n">imap_port</span> <span class="o">=</span> <span class="n">config</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s1">'imap_port'</span><span class="p">,</span> <span class="mi">993</span><span class="p">)</span>
|
|
87
|
+
<span class="bp">self</span><span class="o">.</span><span class="n">email</span> <span class="o">=</span> <span class="n">config</span><span class="p">[</span><span class="s1">'email'</span><span class="p">]</span>
|
|
88
|
+
<span class="bp">self</span><span class="o">.</span><span class="n">password</span> <span class="o">=</span> <span class="n">config</span><span class="p">[</span><span class="s1">'password'</span><span class="p">]</span>
|
|
89
|
+
<span class="bp">self</span><span class="o">.</span><span class="n">default_batch_size</span> <span class="o">=</span> <span class="n">config</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s1">'batch_size'</span><span class="p">,</span> <span class="mi">50</span><span class="p">)</span>
|
|
90
|
+
<span class="bp">self</span><span class="o">.</span><span class="n">default_max_messages</span> <span class="o">=</span> <span class="n">config</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s1">'max_messages'</span><span class="p">,</span> <span class="mi">100</span><span class="p">)</span>
|
|
91
|
+
|
|
92
|
+
<div class="viewcode-block" id="IMAPHandler.connect">
|
|
93
|
+
<a class="viewcode-back" href="../../../../source/mindroot.coreplugins.email.html#mindroot.coreplugins.email.imap_handler.IMAPHandler.connect">[docs]</a>
|
|
94
|
+
<span class="k">def</span><span class="w"> </span><span class="nf">connect</span><span class="p">(</span><span class="bp">self</span><span class="p">)</span> <span class="o">-></span> <span class="n">imaplib</span><span class="o">.</span><span class="n">IMAP4</span><span class="p">:</span>
|
|
95
|
+
<span class="w"> </span><span class="sd">"""Establish IMAP connection"""</span>
|
|
96
|
+
<span class="k">try</span><span class="p">:</span>
|
|
97
|
+
<span class="n">server</span> <span class="o">=</span> <span class="n">imaplib</span><span class="o">.</span><span class="n">IMAP4_SSL</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">imap_server</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">imap_port</span><span class="p">)</span>
|
|
98
|
+
<span class="n">server</span><span class="o">.</span><span class="n">login</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">email</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">password</span><span class="p">)</span>
|
|
99
|
+
<span class="k">return</span> <span class="n">server</span>
|
|
100
|
+
<span class="k">except</span> <span class="ne">Exception</span> <span class="k">as</span> <span class="n">e</span><span class="p">:</span>
|
|
101
|
+
<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">"IMAP Connection error: </span><span class="si">{</span><span class="nb">str</span><span class="p">(</span><span class="n">e</span><span class="p">)</span><span class="si">}</span><span class="s2">"</span><span class="p">)</span>
|
|
102
|
+
<span class="k">raise</span></div>
|
|
103
|
+
|
|
104
|
+
|
|
105
|
+
<div class="viewcode-block" id="IMAPHandler.build_search_criteria">
|
|
106
|
+
<a class="viewcode-back" href="../../../../source/mindroot.coreplugins.email.html#mindroot.coreplugins.email.imap_handler.IMAPHandler.build_search_criteria">[docs]</a>
|
|
107
|
+
<span class="k">def</span><span class="w"> </span><span class="nf">build_search_criteria</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">criteria</span><span class="p">:</span> <span class="n">Dict</span> <span class="o">=</span> <span class="kc">None</span><span class="p">,</span> <span class="n">last_uid</span><span class="p">:</span> <span class="nb">str</span> <span class="o">=</span> <span class="kc">None</span><span class="p">)</span> <span class="o">-></span> <span class="nb">str</span><span class="p">:</span>
|
|
108
|
+
<span class="w"> </span><span class="sd">"""Build IMAP search criteria string"""</span>
|
|
109
|
+
<span class="n">search_terms</span> <span class="o">=</span> <span class="p">[]</span>
|
|
110
|
+
|
|
111
|
+
<span class="c1"># Add UID range if we're paginating</span>
|
|
112
|
+
<span class="k">if</span> <span class="n">last_uid</span><span class="p">:</span>
|
|
113
|
+
<span class="n">search_terms</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="sa">f</span><span class="s1">'UID 1:</span><span class="si">{</span><span class="n">last_uid</span><span class="si">}</span><span class="s1">'</span><span class="p">)</span>
|
|
114
|
+
|
|
115
|
+
<span class="k">if</span> <span class="n">criteria</span><span class="p">:</span>
|
|
116
|
+
<span class="k">if</span> <span class="n">criteria</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s1">'unread_only'</span><span class="p">):</span>
|
|
117
|
+
<span class="n">search_terms</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="s1">'UNSEEN'</span><span class="p">)</span>
|
|
118
|
+
<span class="k">if</span> <span class="n">criteria</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s1">'since_date'</span><span class="p">):</span>
|
|
119
|
+
<span class="n">date_str</span> <span class="o">=</span> <span class="n">criteria</span><span class="p">[</span><span class="s1">'since_date'</span><span class="p">]</span><span class="o">.</span><span class="n">strftime</span><span class="p">(</span><span class="s2">"</span><span class="si">%d</span><span class="s2">-%b-%Y"</span><span class="p">)</span>
|
|
120
|
+
<span class="n">search_terms</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="sa">f</span><span class="s1">'SINCE "</span><span class="si">{</span><span class="n">date_str</span><span class="si">}</span><span class="s1">"'</span><span class="p">)</span>
|
|
121
|
+
<span class="k">if</span> <span class="n">criteria</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s1">'from'</span><span class="p">):</span>
|
|
122
|
+
<span class="n">search_terms</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="sa">f</span><span class="s1">'FROM "</span><span class="si">{</span><span class="n">criteria</span><span class="p">[</span><span class="s2">"from"</span><span class="p">]</span><span class="si">}</span><span class="s1">"'</span><span class="p">)</span>
|
|
123
|
+
<span class="k">if</span> <span class="n">criteria</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s1">'subject'</span><span class="p">):</span>
|
|
124
|
+
<span class="n">search_terms</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="sa">f</span><span class="s1">'SUBJECT "</span><span class="si">{</span><span class="n">criteria</span><span class="p">[</span><span class="s2">"subject"</span><span class="p">]</span><span class="si">}</span><span class="s1">"'</span><span class="p">)</span>
|
|
125
|
+
<span class="k">else</span><span class="p">:</span>
|
|
126
|
+
<span class="c1"># Default to messages from the last 30 days</span>
|
|
127
|
+
<span class="n">thirty_days_ago</span> <span class="o">=</span> <span class="p">(</span><span class="n">datetime</span><span class="o">.</span><span class="n">now</span><span class="p">()</span> <span class="o">-</span> <span class="n">timedelta</span><span class="p">(</span><span class="n">days</span><span class="o">=</span><span class="mi">30</span><span class="p">))</span><span class="o">.</span><span class="n">strftime</span><span class="p">(</span><span class="s2">"</span><span class="si">%d</span><span class="s2">-%b-%Y"</span><span class="p">)</span>
|
|
128
|
+
<span class="n">search_terms</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="sa">f</span><span class="s1">'SINCE "</span><span class="si">{</span><span class="n">thirty_days_ago</span><span class="si">}</span><span class="s1">"'</span><span class="p">)</span>
|
|
129
|
+
|
|
130
|
+
<span class="k">return</span> <span class="s1">' '</span><span class="o">.</span><span class="n">join</span><span class="p">(</span><span class="n">search_terms</span><span class="p">)</span> <span class="k">if</span> <span class="n">search_terms</span> <span class="k">else</span> <span class="s1">'ALL'</span></div>
|
|
131
|
+
|
|
132
|
+
|
|
133
|
+
<div class="viewcode-block" id="IMAPHandler.decode_text">
|
|
134
|
+
<a class="viewcode-back" href="../../../../source/mindroot.coreplugins.email.html#mindroot.coreplugins.email.imap_handler.IMAPHandler.decode_text">[docs]</a>
|
|
135
|
+
<span class="k">def</span><span class="w"> </span><span class="nf">decode_text</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">text_bytes</span><span class="p">:</span> <span class="nb">bytes</span><span class="p">)</span> <span class="o">-></span> <span class="nb">str</span><span class="p">:</span>
|
|
136
|
+
<span class="w"> </span><span class="sd">"""Safely decode text bytes to string, trying multiple encodings"""</span>
|
|
137
|
+
<span class="k">if</span> <span class="ow">not</span> <span class="n">text_bytes</span><span class="p">:</span>
|
|
138
|
+
<span class="k">return</span> <span class="s2">""</span>
|
|
139
|
+
|
|
140
|
+
<span class="c1"># Try UTF-8 first</span>
|
|
141
|
+
<span class="k">try</span><span class="p">:</span>
|
|
142
|
+
<span class="k">return</span> <span class="n">text_bytes</span><span class="o">.</span><span class="n">decode</span><span class="p">(</span><span class="s1">'utf-8'</span><span class="p">)</span>
|
|
143
|
+
<span class="k">except</span> <span class="ne">UnicodeDecodeError</span><span class="p">:</span>
|
|
144
|
+
<span class="k">pass</span>
|
|
145
|
+
|
|
146
|
+
<span class="c1"># Try to detect encoding</span>
|
|
147
|
+
<span class="k">try</span><span class="p">:</span>
|
|
148
|
+
<span class="n">detected</span> <span class="o">=</span> <span class="n">chardet</span><span class="o">.</span><span class="n">detect</span><span class="p">(</span><span class="n">text_bytes</span><span class="p">)</span>
|
|
149
|
+
<span class="k">if</span> <span class="n">detected</span> <span class="ow">and</span> <span class="n">detected</span><span class="p">[</span><span class="s1">'encoding'</span><span class="p">]:</span>
|
|
150
|
+
<span class="k">return</span> <span class="n">text_bytes</span><span class="o">.</span><span class="n">decode</span><span class="p">(</span><span class="n">detected</span><span class="p">[</span><span class="s1">'encoding'</span><span class="p">])</span>
|
|
151
|
+
<span class="k">except</span> <span class="ne">Exception</span><span class="p">:</span>
|
|
152
|
+
<span class="k">pass</span>
|
|
153
|
+
|
|
154
|
+
<span class="c1"># Fallback encodings</span>
|
|
155
|
+
<span class="k">for</span> <span class="n">encoding</span> <span class="ow">in</span> <span class="p">[</span><span class="s1">'latin1'</span><span class="p">,</span> <span class="s1">'iso-8859-1'</span><span class="p">,</span> <span class="s1">'cp1252'</span><span class="p">]:</span>
|
|
156
|
+
<span class="k">try</span><span class="p">:</span>
|
|
157
|
+
<span class="k">return</span> <span class="n">text_bytes</span><span class="o">.</span><span class="n">decode</span><span class="p">(</span><span class="n">encoding</span><span class="p">)</span>
|
|
158
|
+
<span class="k">except</span> <span class="ne">UnicodeDecodeError</span><span class="p">:</span>
|
|
159
|
+
<span class="k">continue</span>
|
|
160
|
+
|
|
161
|
+
<span class="c1"># Last resort: decode with replacement</span>
|
|
162
|
+
<span class="k">return</span> <span class="n">text_bytes</span><span class="o">.</span><span class="n">decode</span><span class="p">(</span><span class="s1">'utf-8'</span><span class="p">,</span> <span class="n">errors</span><span class="o">=</span><span class="s1">'replace'</span><span class="p">)</span></div>
|
|
163
|
+
|
|
164
|
+
|
|
165
|
+
<div class="viewcode-block" id="IMAPHandler.get_email_body">
|
|
166
|
+
<a class="viewcode-back" href="../../../../source/mindroot.coreplugins.email.html#mindroot.coreplugins.email.imap_handler.IMAPHandler.get_email_body">[docs]</a>
|
|
167
|
+
<span class="k">def</span><span class="w"> </span><span class="nf">get_email_body</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">email_message</span><span class="p">)</span> <span class="o">-></span> <span class="nb">str</span><span class="p">:</span>
|
|
168
|
+
<span class="w"> </span><span class="sd">"""Extract email body with better encoding handling"""</span>
|
|
169
|
+
<span class="n">body</span> <span class="o">=</span> <span class="s2">""</span>
|
|
170
|
+
<span class="k">if</span> <span class="n">email_message</span><span class="o">.</span><span class="n">is_multipart</span><span class="p">():</span>
|
|
171
|
+
<span class="k">for</span> <span class="n">part</span> <span class="ow">in</span> <span class="n">email_message</span><span class="o">.</span><span class="n">walk</span><span class="p">():</span>
|
|
172
|
+
<span class="k">if</span> <span class="n">part</span><span class="o">.</span><span class="n">get_content_type</span><span class="p">()</span> <span class="o">==</span> <span class="s2">"text/plain"</span><span class="p">:</span>
|
|
173
|
+
<span class="n">payload</span> <span class="o">=</span> <span class="n">part</span><span class="o">.</span><span class="n">get_payload</span><span class="p">(</span><span class="n">decode</span><span class="o">=</span><span class="kc">True</span><span class="p">)</span>
|
|
174
|
+
<span class="k">if</span> <span class="n">payload</span><span class="p">:</span>
|
|
175
|
+
<span class="n">body</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">decode_text</span><span class="p">(</span><span class="n">payload</span><span class="p">)</span>
|
|
176
|
+
<span class="k">break</span>
|
|
177
|
+
<span class="k">else</span><span class="p">:</span>
|
|
178
|
+
<span class="n">payload</span> <span class="o">=</span> <span class="n">email_message</span><span class="o">.</span><span class="n">get_payload</span><span class="p">(</span><span class="n">decode</span><span class="o">=</span><span class="kc">True</span><span class="p">)</span>
|
|
179
|
+
<span class="k">if</span> <span class="n">payload</span><span class="p">:</span>
|
|
180
|
+
<span class="n">body</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">decode_text</span><span class="p">(</span><span class="n">payload</span><span class="p">)</span>
|
|
181
|
+
|
|
182
|
+
<span class="k">return</span> <span class="n">body</span></div>
|
|
183
|
+
|
|
184
|
+
|
|
185
|
+
<div class="viewcode-block" id="IMAPHandler.check_emails">
|
|
186
|
+
<a class="viewcode-back" href="../../../../source/mindroot.coreplugins.email.html#mindroot.coreplugins.email.imap_handler.IMAPHandler.check_emails">[docs]</a>
|
|
187
|
+
<span class="k">async</span> <span class="k">def</span><span class="w"> </span><span class="nf">check_emails</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">folder</span><span class="p">:</span> <span class="nb">str</span> <span class="o">=</span> <span class="s2">"INBOX"</span><span class="p">,</span>
|
|
188
|
+
<span class="n">criteria</span><span class="p">:</span> <span class="n">Dict</span> <span class="o">=</span> <span class="kc">None</span><span class="p">,</span>
|
|
189
|
+
<span class="n">batch_size</span><span class="p">:</span> <span class="nb">int</span> <span class="o">=</span> <span class="kc">None</span><span class="p">,</span>
|
|
190
|
+
<span class="n">max_messages</span><span class="p">:</span> <span class="nb">int</span> <span class="o">=</span> <span class="kc">None</span><span class="p">,</span>
|
|
191
|
+
<span class="n">start_id</span><span class="p">:</span> <span class="nb">str</span> <span class="o">=</span> <span class="kc">None</span><span class="p">)</span> <span class="o">-></span> <span class="n">Dict</span><span class="p">:</span>
|
|
192
|
+
<span class="w"> </span><span class="sd">"""Check for emails in specified folder with pagination using UIDs"""</span>
|
|
193
|
+
<span class="k">try</span><span class="p">:</span>
|
|
194
|
+
<span class="n">batch_size</span> <span class="o">=</span> <span class="n">batch_size</span> <span class="ow">or</span> <span class="bp">self</span><span class="o">.</span><span class="n">default_batch_size</span>
|
|
195
|
+
<span class="n">max_messages</span> <span class="o">=</span> <span class="n">max_messages</span> <span class="ow">or</span> <span class="bp">self</span><span class="o">.</span><span class="n">default_max_messages</span>
|
|
196
|
+
|
|
197
|
+
<span class="n">server</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">connect</span><span class="p">()</span>
|
|
198
|
+
<span class="n">server</span><span class="o">.</span><span class="n">select</span><span class="p">(</span><span class="n">folder</span><span class="p">)</span>
|
|
199
|
+
|
|
200
|
+
<span class="c1"># Build search criteria</span>
|
|
201
|
+
<span class="n">search_criteria</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">build_search_criteria</span><span class="p">(</span><span class="n">criteria</span><span class="p">,</span> <span class="n">start_id</span><span class="p">)</span>
|
|
202
|
+
<span class="n">logger</span><span class="o">.</span><span class="n">info</span><span class="p">(</span><span class="sa">f</span><span class="s2">"Using search criteria: </span><span class="si">{</span><span class="n">search_criteria</span><span class="si">}</span><span class="s2">"</span><span class="p">)</span>
|
|
203
|
+
|
|
204
|
+
<span class="c1"># Use UID SEARCH instead of regular SEARCH</span>
|
|
205
|
+
<span class="n">_</span><span class="p">,</span> <span class="n">data</span> <span class="o">=</span> <span class="n">server</span><span class="o">.</span><span class="n">uid</span><span class="p">(</span><span class="s1">'search'</span><span class="p">,</span> <span class="kc">None</span><span class="p">,</span> <span class="n">search_criteria</span><span class="p">)</span>
|
|
206
|
+
<span class="n">message_uids</span> <span class="o">=</span> <span class="n">data</span><span class="p">[</span><span class="mi">0</span><span class="p">]</span><span class="o">.</span><span class="n">split</span><span class="p">()</span>
|
|
207
|
+
|
|
208
|
+
<span class="c1"># Sort UIDs in descending order (newest first)</span>
|
|
209
|
+
<span class="n">message_uids</span> <span class="o">=</span> <span class="nb">sorted</span><span class="p">([</span><span class="nb">int</span><span class="p">(</span><span class="n">uid</span><span class="p">)</span> <span class="k">for</span> <span class="n">uid</span> <span class="ow">in</span> <span class="n">message_uids</span><span class="p">],</span> <span class="n">reverse</span><span class="o">=</span><span class="kc">True</span><span class="p">)</span>
|
|
210
|
+
<span class="n">total_messages</span> <span class="o">=</span> <span class="nb">len</span><span class="p">(</span><span class="n">message_uids</span><span class="p">)</span>
|
|
211
|
+
|
|
212
|
+
<span class="n">logger</span><span class="o">.</span><span class="n">info</span><span class="p">(</span><span class="sa">f</span><span class="s2">"Found </span><span class="si">{</span><span class="n">total_messages</span><span class="si">}</span><span class="s2"> total messages"</span><span class="p">)</span>
|
|
213
|
+
|
|
214
|
+
<span class="c1"># Take the next batch of UIDs</span>
|
|
215
|
+
<span class="n">batch_uids</span> <span class="o">=</span> <span class="n">message_uids</span><span class="p">[:</span><span class="n">batch_size</span><span class="p">]</span>
|
|
216
|
+
|
|
217
|
+
<span class="n">email_list</span> <span class="o">=</span> <span class="p">[]</span>
|
|
218
|
+
<span class="k">for</span> <span class="n">uid</span> <span class="ow">in</span> <span class="n">batch_uids</span><span class="p">:</span>
|
|
219
|
+
<span class="k">try</span><span class="p">:</span>
|
|
220
|
+
<span class="c1"># Use UID FETCH instead of regular FETCH</span>
|
|
221
|
+
<span class="n">_</span><span class="p">,</span> <span class="n">msg_data</span> <span class="o">=</span> <span class="n">server</span><span class="o">.</span><span class="n">uid</span><span class="p">(</span><span class="s1">'fetch'</span><span class="p">,</span> <span class="nb">str</span><span class="p">(</span><span class="n">uid</span><span class="p">),</span> <span class="s1">'(RFC822)'</span><span class="p">)</span>
|
|
222
|
+
<span class="n">email_body</span> <span class="o">=</span> <span class="n">msg_data</span><span class="p">[</span><span class="mi">0</span><span class="p">][</span><span class="mi">1</span><span class="p">]</span>
|
|
223
|
+
<span class="n">email_message</span> <span class="o">=</span> <span class="n">email</span><span class="o">.</span><span class="n">message_from_bytes</span><span class="p">(</span><span class="n">email_body</span><span class="p">)</span>
|
|
224
|
+
|
|
225
|
+
<span class="c1"># Extract body with safe decoding</span>
|
|
226
|
+
<span class="n">body</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">get_email_body</span><span class="p">(</span><span class="n">email_message</span><span class="p">)</span>
|
|
227
|
+
|
|
228
|
+
<span class="n">email_data</span> <span class="o">=</span> <span class="p">{</span>
|
|
229
|
+
<span class="s2">"id"</span><span class="p">:</span> <span class="nb">str</span><span class="p">(</span><span class="n">uid</span><span class="p">),</span> <span class="c1"># Use UID as the message ID</span>
|
|
230
|
+
<span class="s2">"message_id"</span><span class="p">:</span> <span class="n">email_message</span><span class="p">[</span><span class="s1">'Message-ID'</span><span class="p">],</span>
|
|
231
|
+
<span class="s2">"in_reply_to"</span><span class="p">:</span> <span class="n">email_message</span><span class="p">[</span><span class="s1">'In-Reply-To'</span><span class="p">],</span>
|
|
232
|
+
<span class="s2">"from"</span><span class="p">:</span> <span class="n">email_message</span><span class="p">[</span><span class="s1">'from'</span><span class="p">],</span>
|
|
233
|
+
<span class="s2">"to"</span><span class="p">:</span> <span class="n">email_message</span><span class="p">[</span><span class="s1">'to'</span><span class="p">],</span>
|
|
234
|
+
<span class="s2">"subject"</span><span class="p">:</span> <span class="n">email_message</span><span class="p">[</span><span class="s1">'subject'</span><span class="p">],</span>
|
|
235
|
+
<span class="s2">"date"</span><span class="p">:</span> <span class="n">email_message</span><span class="p">[</span><span class="s1">'date'</span><span class="p">],</span>
|
|
236
|
+
<span class="s2">"body"</span><span class="p">:</span> <span class="n">body</span>
|
|
237
|
+
<span class="p">}</span>
|
|
238
|
+
|
|
239
|
+
<span class="n">email_list</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="n">email_data</span><span class="p">)</span>
|
|
240
|
+
<span class="k">except</span> <span class="ne">Exception</span> <span class="k">as</span> <span class="n">e</span><span class="p">:</span>
|
|
241
|
+
<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 processing message UID </span><span class="si">{</span><span class="n">uid</span><span class="si">}</span><span class="s2">: </span><span class="si">{</span><span class="nb">str</span><span class="p">(</span><span class="n">e</span><span class="p">)</span><span class="si">}</span><span class="s2">"</span><span class="p">)</span>
|
|
242
|
+
<span class="k">continue</span>
|
|
243
|
+
|
|
244
|
+
<span class="n">server</span><span class="o">.</span><span class="n">close</span><span class="p">()</span>
|
|
245
|
+
<span class="n">server</span><span class="o">.</span><span class="n">logout</span><span class="p">()</span>
|
|
246
|
+
|
|
247
|
+
<span class="c1"># Determine if there are more messages and next starting point</span>
|
|
248
|
+
<span class="n">has_more</span> <span class="o">=</span> <span class="nb">len</span><span class="p">(</span><span class="n">message_uids</span><span class="p">)</span> <span class="o">></span> <span class="n">batch_size</span>
|
|
249
|
+
<span class="n">next_id</span> <span class="o">=</span> <span class="nb">str</span><span class="p">(</span><span class="n">batch_uids</span><span class="p">[</span><span class="o">-</span><span class="mi">1</span><span class="p">]</span> <span class="o">-</span> <span class="mi">1</span><span class="p">)</span> <span class="k">if</span> <span class="n">has_more</span> <span class="k">else</span> <span class="kc">None</span>
|
|
250
|
+
|
|
251
|
+
<span class="k">return</span> <span class="p">{</span>
|
|
252
|
+
<span class="s2">"success"</span><span class="p">:</span> <span class="kc">True</span><span class="p">,</span>
|
|
253
|
+
<span class="s2">"messages"</span><span class="p">:</span> <span class="n">email_list</span><span class="p">,</span>
|
|
254
|
+
<span class="s2">"error"</span><span class="p">:</span> <span class="kc">None</span><span class="p">,</span>
|
|
255
|
+
<span class="s2">"pagination"</span><span class="p">:</span> <span class="p">{</span>
|
|
256
|
+
<span class="s2">"total_messages"</span><span class="p">:</span> <span class="n">total_messages</span><span class="p">,</span>
|
|
257
|
+
<span class="s2">"batch_size"</span><span class="p">:</span> <span class="n">batch_size</span><span class="p">,</span>
|
|
258
|
+
<span class="s2">"next_id"</span><span class="p">:</span> <span class="n">next_id</span><span class="p">,</span>
|
|
259
|
+
<span class="s2">"has_more"</span><span class="p">:</span> <span class="n">has_more</span>
|
|
260
|
+
<span class="p">}</span>
|
|
261
|
+
<span class="p">}</span>
|
|
262
|
+
|
|
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 checking emails: </span><span class="si">{</span><span class="nb">str</span><span class="p">(</span><span class="n">e</span><span class="p">)</span><span class="si">}</span><span class="s2">"</span><span class="p">)</span>
|
|
265
|
+
<span class="k">return</span> <span class="p">{</span>
|
|
266
|
+
<span class="s2">"success"</span><span class="p">:</span> <span class="kc">False</span><span class="p">,</span>
|
|
267
|
+
<span class="s2">"messages"</span><span class="p">:</span> <span class="p">[],</span>
|
|
268
|
+
<span class="s2">"error"</span><span class="p">:</span> <span class="nb">str</span><span class="p">(</span><span class="n">e</span><span class="p">),</span>
|
|
269
|
+
<span class="s2">"pagination"</span><span class="p">:</span> <span class="kc">None</span>
|
|
270
|
+
<span class="p">}</span></div>
|
|
271
|
+
|
|
272
|
+
|
|
273
|
+
<div class="viewcode-block" id="IMAPHandler.mark_as_processed">
|
|
274
|
+
<a class="viewcode-back" href="../../../../source/mindroot.coreplugins.email.html#mindroot.coreplugins.email.imap_handler.IMAPHandler.mark_as_processed">[docs]</a>
|
|
275
|
+
<span class="k">async</span> <span class="k">def</span><span class="w"> </span><span class="nf">mark_as_processed</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">message_ids</span><span class="p">:</span> <span class="n">List</span><span class="p">[</span><span class="nb">str</span><span class="p">],</span>
|
|
276
|
+
<span class="n">folder</span><span class="p">:</span> <span class="nb">str</span> <span class="o">=</span> <span class="s2">"INBOX"</span><span class="p">)</span> <span class="o">-></span> <span class="n">Dict</span><span class="p">:</span>
|
|
277
|
+
<span class="w"> </span><span class="sd">"""Mark messages as processed/read using UIDs"""</span>
|
|
278
|
+
<span class="k">try</span><span class="p">:</span>
|
|
279
|
+
<span class="n">server</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">connect</span><span class="p">()</span>
|
|
280
|
+
<span class="n">server</span><span class="o">.</span><span class="n">select</span><span class="p">(</span><span class="n">folder</span><span class="p">)</span>
|
|
281
|
+
|
|
282
|
+
<span class="n">processed</span> <span class="o">=</span> <span class="p">[]</span>
|
|
283
|
+
<span class="n">failed</span> <span class="o">=</span> <span class="p">[]</span>
|
|
284
|
+
|
|
285
|
+
<span class="k">for</span> <span class="n">msg_id</span> <span class="ow">in</span> <span class="n">message_ids</span><span class="p">:</span>
|
|
286
|
+
<span class="k">try</span><span class="p">:</span>
|
|
287
|
+
<span class="c1"># Use UID STORE instead of regular STORE</span>
|
|
288
|
+
<span class="n">server</span><span class="o">.</span><span class="n">uid</span><span class="p">(</span><span class="s1">'store'</span><span class="p">,</span> <span class="n">msg_id</span><span class="p">,</span> <span class="s1">'+FLAGS'</span><span class="p">,</span> <span class="s1">'</span><span class="se">\\</span><span class="s1">Seen'</span><span class="p">)</span>
|
|
289
|
+
<span class="n">processed</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="n">msg_id</span><span class="p">)</span>
|
|
290
|
+
<span class="k">except</span> <span class="ne">Exception</span> <span class="k">as</span> <span class="n">e</span><span class="p">:</span>
|
|
291
|
+
<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 marking message UID </span><span class="si">{</span><span class="n">msg_id</span><span class="si">}</span><span class="s2">: </span><span class="si">{</span><span class="nb">str</span><span class="p">(</span><span class="n">e</span><span class="p">)</span><span class="si">}</span><span class="s2">"</span><span class="p">)</span>
|
|
292
|
+
<span class="n">failed</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="n">msg_id</span><span class="p">)</span>
|
|
293
|
+
|
|
294
|
+
<span class="n">server</span><span class="o">.</span><span class="n">close</span><span class="p">()</span>
|
|
295
|
+
<span class="n">server</span><span class="o">.</span><span class="n">logout</span><span class="p">()</span>
|
|
296
|
+
|
|
297
|
+
<span class="k">return</span> <span class="p">{</span>
|
|
298
|
+
<span class="s2">"success"</span><span class="p">:</span> <span class="nb">len</span><span class="p">(</span><span class="n">failed</span><span class="p">)</span> <span class="o">==</span> <span class="mi">0</span><span class="p">,</span>
|
|
299
|
+
<span class="s2">"processed"</span><span class="p">:</span> <span class="n">processed</span><span class="p">,</span>
|
|
300
|
+
<span class="s2">"failed"</span><span class="p">:</span> <span class="n">failed</span><span class="p">,</span>
|
|
301
|
+
<span class="s2">"error"</span><span class="p">:</span> <span class="kc">None</span> <span class="k">if</span> <span class="nb">len</span><span class="p">(</span><span class="n">failed</span><span class="p">)</span> <span class="o">==</span> <span class="mi">0</span> <span class="k">else</span> <span class="s2">"Some messages failed to mark"</span>
|
|
302
|
+
<span class="p">}</span>
|
|
303
|
+
|
|
304
|
+
<span class="k">except</span> <span class="ne">Exception</span> <span class="k">as</span> <span class="n">e</span><span class="p">:</span>
|
|
305
|
+
<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 marking messages: </span><span class="si">{</span><span class="nb">str</span><span class="p">(</span><span class="n">e</span><span class="p">)</span><span class="si">}</span><span class="s2">"</span><span class="p">)</span>
|
|
306
|
+
<span class="k">return</span> <span class="p">{</span>
|
|
307
|
+
<span class="s2">"success"</span><span class="p">:</span> <span class="kc">False</span><span class="p">,</span>
|
|
308
|
+
<span class="s2">"processed"</span><span class="p">:</span> <span class="p">[],</span>
|
|
309
|
+
<span class="s2">"failed"</span><span class="p">:</span> <span class="n">message_ids</span><span class="p">,</span>
|
|
310
|
+
<span class="s2">"error"</span><span class="p">:</span> <span class="nb">str</span><span class="p">(</span><span class="n">e</span><span class="p">)</span>
|
|
311
|
+
<span class="p">}</span></div>
|
|
312
|
+
</div>
|
|
313
|
+
|
|
314
|
+
</pre></div>
|
|
315
|
+
|
|
316
|
+
</div>
|
|
317
|
+
</div>
|
|
318
|
+
<footer>
|
|
319
|
+
|
|
320
|
+
<hr/>
|
|
321
|
+
|
|
322
|
+
<div role="contentinfo">
|
|
323
|
+
<p>© Copyright 2025, Jason Livesay.</p>
|
|
324
|
+
</div>
|
|
325
|
+
|
|
326
|
+
Built with <a href="https://www.sphinx-doc.org/">Sphinx</a> using a
|
|
327
|
+
<a href="https://github.com/readthedocs/sphinx_rtd_theme">theme</a>
|
|
328
|
+
provided by <a href="https://readthedocs.org">Read the Docs</a>.
|
|
329
|
+
|
|
330
|
+
|
|
331
|
+
</footer>
|
|
332
|
+
</div>
|
|
333
|
+
</div>
|
|
334
|
+
</section>
|
|
335
|
+
</div>
|
|
336
|
+
<script>
|
|
337
|
+
jQuery(function () {
|
|
338
|
+
SphinxRtdTheme.Navigation.enable(true);
|
|
339
|
+
});
|
|
340
|
+
</script>
|
|
341
|
+
|
|
342
|
+
</body>
|
|
343
|
+
</html>
|