wappa 0.1.8__tar.gz → 0.1.9__tar.gz
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Potentially problematic release.
This version of wappa might be problematic. Click here for more details.
- {wappa-0.1.8 → wappa-0.1.9}/.gitignore +0 -1
- {wappa-0.1.8 → wappa-0.1.9}/PKG-INFO +1 -1
- {wappa-0.1.8 → wappa-0.1.9}/pyproject.toml +1 -1
- wappa-0.1.9/wappa/cli/examples/init/.env.example +33 -0
- wappa-0.1.9/wappa/cli/examples/init/app/master_event.py +8 -0
- wappa-0.1.9/wappa/cli/examples/json_cache_example/.env.example +33 -0
- wappa-0.1.9/wappa/cli/examples/json_cache_example/app/__init__.py +1 -0
- wappa-0.1.9/wappa/cli/examples/json_cache_example/app/main.py +235 -0
- wappa-0.1.9/wappa/cli/examples/json_cache_example/app/master_event.py +419 -0
- wappa-0.1.9/wappa/cli/examples/json_cache_example/app/models/__init__.py +1 -0
- wappa-0.1.9/wappa/cli/examples/json_cache_example/app/models/json_demo_models.py +275 -0
- wappa-0.1.9/wappa/cli/examples/json_cache_example/app/scores/__init__.py +35 -0
- wappa-0.1.9/wappa/cli/examples/json_cache_example/app/scores/score_base.py +186 -0
- wappa-0.1.9/wappa/cli/examples/json_cache_example/app/scores/score_cache_statistics.py +248 -0
- wappa-0.1.9/wappa/cli/examples/json_cache_example/app/scores/score_message_history.py +190 -0
- wappa-0.1.9/wappa/cli/examples/json_cache_example/app/scores/score_state_commands.py +260 -0
- wappa-0.1.9/wappa/cli/examples/json_cache_example/app/scores/score_user_management.py +223 -0
- wappa-0.1.9/wappa/cli/examples/json_cache_example/app/utils/__init__.py +26 -0
- wappa-0.1.9/wappa/cli/examples/json_cache_example/app/utils/cache_utils.py +176 -0
- wappa-0.1.9/wappa/cli/examples/json_cache_example/app/utils/message_utils.py +246 -0
- wappa-0.1.9/wappa/cli/examples/openai_transcript/app/main.py +8 -0
- wappa-0.1.9/wappa/cli/examples/openai_transcript/app/master_event.py +53 -0
- wappa-0.1.9/wappa/cli/examples/openai_transcript/app/openai_utils/__init__.py +3 -0
- wappa-0.1.9/wappa/cli/examples/openai_transcript/app/openai_utils/audio_processing.py +76 -0
- wappa-0.1.9/wappa/cli/examples/redis_cache_example/.env.example +33 -0
- wappa-0.1.9/wappa/cli/examples/redis_cache_example/README.md +0 -0
- wappa-0.1.9/wappa/cli/examples/redis_cache_example/app/__init__.py +6 -0
- wappa-0.1.9/wappa/cli/examples/redis_cache_example/app/main.py +234 -0
- wappa-0.1.9/wappa/cli/examples/redis_cache_example/app/master_event.py +419 -0
- wappa-0.1.9/wappa/cli/examples/redis_cache_example/app/models/redis_demo_models.py +275 -0
- wappa-0.1.9/wappa/cli/examples/redis_cache_example/app/scores/__init__.py +35 -0
- wappa-0.1.9/wappa/cli/examples/redis_cache_example/app/scores/score_base.py +186 -0
- wappa-0.1.9/wappa/cli/examples/redis_cache_example/app/scores/score_cache_statistics.py +248 -0
- wappa-0.1.9/wappa/cli/examples/redis_cache_example/app/scores/score_message_history.py +190 -0
- wappa-0.1.9/wappa/cli/examples/redis_cache_example/app/scores/score_state_commands.py +260 -0
- wappa-0.1.9/wappa/cli/examples/redis_cache_example/app/scores/score_user_management.py +223 -0
- wappa-0.1.9/wappa/cli/examples/redis_cache_example/app/utils/__init__.py +26 -0
- wappa-0.1.9/wappa/cli/examples/redis_cache_example/app/utils/cache_utils.py +176 -0
- wappa-0.1.9/wappa/cli/examples/redis_cache_example/app/utils/message_utils.py +246 -0
- wappa-0.1.9/wappa/cli/examples/simple_echo_example/.env.example +33 -0
- wappa-0.1.9/wappa/cli/examples/simple_echo_example/.gitignore +69 -0
- wappa-0.1.9/wappa/cli/examples/simple_echo_example/app/__init__.py +7 -0
- wappa-0.1.9/wappa/cli/examples/simple_echo_example/app/main.py +183 -0
- wappa-0.1.9/wappa/cli/examples/simple_echo_example/app/master_event.py +209 -0
- wappa-0.1.9/wappa/cli/examples/wappa_full_example/.env.example +33 -0
- wappa-0.1.9/wappa/cli/examples/wappa_full_example/.gitignore +69 -0
- wappa-0.1.9/wappa/cli/examples/wappa_full_example/app/__init__.py +6 -0
- wappa-0.1.9/wappa/cli/examples/wappa_full_example/app/handlers/__init__.py +5 -0
- wappa-0.1.9/wappa/cli/examples/wappa_full_example/app/handlers/command_handlers.py +484 -0
- wappa-0.1.9/wappa/cli/examples/wappa_full_example/app/handlers/message_handlers.py +551 -0
- wappa-0.1.9/wappa/cli/examples/wappa_full_example/app/handlers/state_handlers.py +492 -0
- wappa-0.1.9/wappa/cli/examples/wappa_full_example/app/main.py +257 -0
- wappa-0.1.9/wappa/cli/examples/wappa_full_example/app/master_event.py +445 -0
- wappa-0.1.9/wappa/cli/examples/wappa_full_example/app/media/README.md +54 -0
- wappa-0.1.9/wappa/cli/examples/wappa_full_example/app/media/buttons/README.md +62 -0
- wappa-0.1.9/wappa/cli/examples/wappa_full_example/app/media/buttons/kitty.png +0 -0
- wappa-0.1.9/wappa/cli/examples/wappa_full_example/app/media/buttons/puppy.png +0 -0
- wappa-0.1.9/wappa/cli/examples/wappa_full_example/app/media/list/README.md +110 -0
- wappa-0.1.9/wappa/cli/examples/wappa_full_example/app/media/list/audio.mp3 +0 -0
- wappa-0.1.9/wappa/cli/examples/wappa_full_example/app/media/list/document.pdf +0 -0
- wappa-0.1.9/wappa/cli/examples/wappa_full_example/app/media/list/image.png +0 -0
- wappa-0.1.9/wappa/cli/examples/wappa_full_example/app/media/list/video.mp4 +0 -0
- wappa-0.1.9/wappa/cli/examples/wappa_full_example/app/models/__init__.py +5 -0
- wappa-0.1.9/wappa/cli/examples/wappa_full_example/app/models/state_models.py +425 -0
- wappa-0.1.9/wappa/cli/examples/wappa_full_example/app/models/user_models.py +287 -0
- wappa-0.1.9/wappa/cli/examples/wappa_full_example/app/models/webhook_metadata.py +301 -0
- wappa-0.1.9/wappa/cli/examples/wappa_full_example/app/utils/__init__.py +5 -0
- wappa-0.1.9/wappa/cli/examples/wappa_full_example/app/utils/cache_utils.py +483 -0
- wappa-0.1.9/wappa/cli/examples/wappa_full_example/app/utils/media_handler.py +473 -0
- wappa-0.1.9/wappa/cli/examples/wappa_full_example/app/utils/metadata_extractor.py +298 -0
- {wappa-0.1.8 → wappa-0.1.9}/wappa/cli/main.py +8 -4
- wappa-0.1.9/wappa/cli/templates/__init__.py.template +0 -0
- wappa-0.1.9/wappa/cli/templates/main.py.template +8 -0
- wappa-0.1.8/wappa/cli/examples/init/pyproject.toml +0 -7
- wappa-0.1.8/wappa/cli/examples/openai_transcript/.gitignore +0 -10
- wappa-0.1.8/wappa/cli/examples/simple_echo_example/.python-version +0 -1
- wappa-0.1.8/wappa/cli/examples/simple_echo_example/pyproject.toml +0 -9
- wappa-0.1.8/wappa/cli/examples/wappa_full_example/.gitignore +0 -10
- {wappa-0.1.8 → wappa-0.1.9}/.python-version +0 -0
- {wappa-0.1.8 → wappa-0.1.9}/LICENSE +0 -0
- {wappa-0.1.8 → wappa-0.1.9}/README.md +0 -0
- {wappa-0.1.8 → wappa-0.1.9}/uv.lock +0 -0
- {wappa-0.1.8 → wappa-0.1.9}/wappa/__init__.py +0 -0
- {wappa-0.1.8 → wappa-0.1.9}/wappa/api/__init__.py +0 -0
- {wappa-0.1.8 → wappa-0.1.9}/wappa/api/controllers/__init__.py +0 -0
- {wappa-0.1.8 → wappa-0.1.9}/wappa/api/controllers/webhook_controller.py +0 -0
- {wappa-0.1.8 → wappa-0.1.9}/wappa/api/dependencies/__init__.py +0 -0
- {wappa-0.1.8 → wappa-0.1.9}/wappa/api/dependencies/whatsapp_dependencies.py +0 -0
- {wappa-0.1.8 → wappa-0.1.9}/wappa/api/dependencies/whatsapp_media_dependencies.py +0 -0
- {wappa-0.1.8 → wappa-0.1.9}/wappa/api/middleware/__init__.py +0 -0
- {wappa-0.1.8 → wappa-0.1.9}/wappa/api/middleware/error_handler.py +0 -0
- {wappa-0.1.8 → wappa-0.1.9}/wappa/api/middleware/owner.py +0 -0
- {wappa-0.1.8 → wappa-0.1.9}/wappa/api/middleware/request_logging.py +0 -0
- {wappa-0.1.8 → wappa-0.1.9}/wappa/api/routes/__init__.py +0 -0
- {wappa-0.1.8 → wappa-0.1.9}/wappa/api/routes/health.py +0 -0
- {wappa-0.1.8 → wappa-0.1.9}/wappa/api/routes/webhooks.py +0 -0
- {wappa-0.1.8 → wappa-0.1.9}/wappa/api/routes/whatsapp/__init__.py +0 -0
- {wappa-0.1.8 → wappa-0.1.9}/wappa/api/routes/whatsapp/whatsapp_interactive.py +0 -0
- {wappa-0.1.8 → wappa-0.1.9}/wappa/api/routes/whatsapp/whatsapp_media.py +0 -0
- {wappa-0.1.8 → wappa-0.1.9}/wappa/api/routes/whatsapp/whatsapp_messages.py +0 -0
- {wappa-0.1.8 → wappa-0.1.9}/wappa/api/routes/whatsapp/whatsapp_specialized.py +0 -0
- {wappa-0.1.8 → wappa-0.1.9}/wappa/api/routes/whatsapp/whatsapp_templates.py +0 -0
- {wappa-0.1.8 → wappa-0.1.9}/wappa/api/routes/whatsapp_combined.py +0 -0
- {wappa-0.1.8 → wappa-0.1.9}/wappa/cli/__init__.py +0 -0
- {wappa-0.1.8 → wappa-0.1.9}/wappa/cli/examples/init/.gitignore +0 -0
- /wappa-0.1.8/wappa/cli/examples/openai_transcript/README.md → /wappa-0.1.9/wappa/cli/examples/init/app/__init__.py +0 -0
- /wappa-0.1.8/wappa/cli/templates/main.py.template → /wappa-0.1.9/wappa/cli/examples/init/app/main.py +0 -0
- {wappa-0.1.8 → wappa-0.1.9}/wappa/cli/examples/json_cache_example/.gitignore +0 -0
- {wappa-0.1.8 → wappa-0.1.9}/wappa/cli/examples/json_cache_example/README.md +0 -0
- {wappa-0.1.8/wappa/cli/examples/redis_cache_example → wappa-0.1.9/wappa/cli/examples/openai_transcript}/.gitignore +0 -0
- {wappa-0.1.8/wappa/cli/examples/redis_cache_example → wappa-0.1.9/wappa/cli/examples/openai_transcript}/README.md +0 -0
- /wappa-0.1.8/wappa/cli/templates/__init__.py.template → /wappa-0.1.9/wappa/cli/examples/openai_transcript/app/__init__.py +0 -0
- {wappa-0.1.8/wappa/cli/examples/simple_echo_example → wappa-0.1.9/wappa/cli/examples/redis_cache_example}/.gitignore +0 -0
- {wappa-0.1.8 → wappa-0.1.9}/wappa/cli/examples/simple_echo_example/README.md +0 -0
- {wappa-0.1.8 → wappa-0.1.9}/wappa/cli/examples/wappa_full_example/.dockerignore +0 -0
- {wappa-0.1.8 → wappa-0.1.9}/wappa/cli/examples/wappa_full_example/Dockerfile +0 -0
- {wappa-0.1.8 → wappa-0.1.9}/wappa/cli/examples/wappa_full_example/RAILWAY_DEPLOYMENT.md +0 -0
- {wappa-0.1.8 → wappa-0.1.9}/wappa/cli/examples/wappa_full_example/README.md +0 -0
- {wappa-0.1.8 → wappa-0.1.9}/wappa/cli/examples/wappa_full_example/docker-compose.yml +0 -0
- {wappa-0.1.8 → wappa-0.1.9}/wappa/cli/examples/wappa_full_example/nginx.conf +0 -0
- {wappa-0.1.8 → wappa-0.1.9}/wappa/cli/examples/wappa_full_example/railway.toml +0 -0
- {wappa-0.1.8 → wappa-0.1.9}/wappa/cli/templates/env.template +0 -0
- {wappa-0.1.8 → wappa-0.1.9}/wappa/cli/templates/gitignore.template +0 -0
- {wappa-0.1.8 → wappa-0.1.9}/wappa/cli/templates/master_event.py.template +0 -0
- {wappa-0.1.8 → wappa-0.1.9}/wappa/core/__init__.py +0 -0
- {wappa-0.1.8 → wappa-0.1.9}/wappa/core/config/__init__.py +0 -0
- {wappa-0.1.8 → wappa-0.1.9}/wappa/core/config/settings.py +0 -0
- {wappa-0.1.8 → wappa-0.1.9}/wappa/core/events/__init__.py +0 -0
- {wappa-0.1.8 → wappa-0.1.9}/wappa/core/events/default_handlers.py +0 -0
- {wappa-0.1.8 → wappa-0.1.9}/wappa/core/events/event_dispatcher.py +0 -0
- {wappa-0.1.8 → wappa-0.1.9}/wappa/core/events/event_handler.py +0 -0
- {wappa-0.1.8 → wappa-0.1.9}/wappa/core/events/webhook_factory.py +0 -0
- {wappa-0.1.8 → wappa-0.1.9}/wappa/core/factory/__init__.py +0 -0
- {wappa-0.1.8 → wappa-0.1.9}/wappa/core/factory/plugin.py +0 -0
- {wappa-0.1.8 → wappa-0.1.9}/wappa/core/factory/wappa_builder.py +0 -0
- {wappa-0.1.8 → wappa-0.1.9}/wappa/core/logging/__init__.py +0 -0
- {wappa-0.1.8 → wappa-0.1.9}/wappa/core/logging/context.py +0 -0
- {wappa-0.1.8 → wappa-0.1.9}/wappa/core/logging/logger.py +0 -0
- {wappa-0.1.8 → wappa-0.1.9}/wappa/core/plugins/__init__.py +0 -0
- {wappa-0.1.8 → wappa-0.1.9}/wappa/core/plugins/auth_plugin.py +0 -0
- {wappa-0.1.8 → wappa-0.1.9}/wappa/core/plugins/cors_plugin.py +0 -0
- {wappa-0.1.8 → wappa-0.1.9}/wappa/core/plugins/custom_middleware_plugin.py +0 -0
- {wappa-0.1.8 → wappa-0.1.9}/wappa/core/plugins/database_plugin.py +0 -0
- {wappa-0.1.8 → wappa-0.1.9}/wappa/core/plugins/rate_limit_plugin.py +0 -0
- {wappa-0.1.8 → wappa-0.1.9}/wappa/core/plugins/redis_plugin.py +0 -0
- {wappa-0.1.8 → wappa-0.1.9}/wappa/core/plugins/wappa_core_plugin.py +0 -0
- {wappa-0.1.8 → wappa-0.1.9}/wappa/core/plugins/webhook_plugin.py +0 -0
- {wappa-0.1.8 → wappa-0.1.9}/wappa/core/types.py +0 -0
- {wappa-0.1.8 → wappa-0.1.9}/wappa/core/wappa_app.py +0 -0
- {wappa-0.1.8 → wappa-0.1.9}/wappa/database/__init__.py +0 -0
- {wappa-0.1.8 → wappa-0.1.9}/wappa/database/adapter.py +0 -0
- {wappa-0.1.8 → wappa-0.1.9}/wappa/database/adapters/__init__.py +0 -0
- {wappa-0.1.8 → wappa-0.1.9}/wappa/database/adapters/mysql_adapter.py +0 -0
- {wappa-0.1.8 → wappa-0.1.9}/wappa/database/adapters/postgresql_adapter.py +0 -0
- {wappa-0.1.8 → wappa-0.1.9}/wappa/database/adapters/sqlite_adapter.py +0 -0
- {wappa-0.1.8 → wappa-0.1.9}/wappa/domain/__init__.py +0 -0
- {wappa-0.1.8 → wappa-0.1.9}/wappa/domain/builders/__init__.py +0 -0
- {wappa-0.1.8 → wappa-0.1.9}/wappa/domain/builders/message_builder.py +0 -0
- {wappa-0.1.8 → wappa-0.1.9}/wappa/domain/entities/__init__.py +0 -0
- {wappa-0.1.8 → wappa-0.1.9}/wappa/domain/enums/messenger_platform.py +0 -0
- {wappa-0.1.8 → wappa-0.1.9}/wappa/domain/factories/__init__.py +0 -0
- {wappa-0.1.8 → wappa-0.1.9}/wappa/domain/factories/media_factory.py +0 -0
- {wappa-0.1.8 → wappa-0.1.9}/wappa/domain/factories/message_factory.py +0 -0
- {wappa-0.1.8 → wappa-0.1.9}/wappa/domain/factories/messenger_factory.py +0 -0
- {wappa-0.1.8 → wappa-0.1.9}/wappa/domain/interfaces/__init__.py +0 -0
- {wappa-0.1.8 → wappa-0.1.9}/wappa/domain/interfaces/base_repository.py +0 -0
- {wappa-0.1.8 → wappa-0.1.9}/wappa/domain/interfaces/cache_factory.py +0 -0
- {wappa-0.1.8 → wappa-0.1.9}/wappa/domain/interfaces/cache_interface.py +0 -0
- {wappa-0.1.8 → wappa-0.1.9}/wappa/domain/interfaces/expiry_repository.py +0 -0
- {wappa-0.1.8 → wappa-0.1.9}/wappa/domain/interfaces/media_interface.py +0 -0
- {wappa-0.1.8 → wappa-0.1.9}/wappa/domain/interfaces/messaging_interface.py +0 -0
- {wappa-0.1.8 → wappa-0.1.9}/wappa/domain/interfaces/pubsub_repository.py +0 -0
- {wappa-0.1.8 → wappa-0.1.9}/wappa/domain/interfaces/repository_factory.py +0 -0
- {wappa-0.1.8 → wappa-0.1.9}/wappa/domain/interfaces/shared_state_repository.py +0 -0
- {wappa-0.1.8 → wappa-0.1.9}/wappa/domain/interfaces/state_repository.py +0 -0
- {wappa-0.1.8 → wappa-0.1.9}/wappa/domain/interfaces/tables_repository.py +0 -0
- {wappa-0.1.8 → wappa-0.1.9}/wappa/domain/interfaces/user_repository.py +0 -0
- {wappa-0.1.8 → wappa-0.1.9}/wappa/domain/models/media_result.py +0 -0
- {wappa-0.1.8 → wappa-0.1.9}/wappa/domain/models/platforms/__init__.py +0 -0
- {wappa-0.1.8 → wappa-0.1.9}/wappa/domain/models/platforms/platform_config.py +0 -0
- {wappa-0.1.8 → wappa-0.1.9}/wappa/domain/services/__init__.py +0 -0
- {wappa-0.1.8 → wappa-0.1.9}/wappa/domain/services/tenant_credentials_service.py +0 -0
- {wappa-0.1.8 → wappa-0.1.9}/wappa/messaging/__init__.py +0 -0
- {wappa-0.1.8 → wappa-0.1.9}/wappa/messaging/whatsapp/__init__.py +0 -0
- {wappa-0.1.8 → wappa-0.1.9}/wappa/messaging/whatsapp/client/__init__.py +0 -0
- {wappa-0.1.8 → wappa-0.1.9}/wappa/messaging/whatsapp/client/whatsapp_client.py +0 -0
- {wappa-0.1.8 → wappa-0.1.9}/wappa/messaging/whatsapp/handlers/__init__.py +0 -0
- {wappa-0.1.8 → wappa-0.1.9}/wappa/messaging/whatsapp/handlers/whatsapp_interactive_handler.py +0 -0
- {wappa-0.1.8 → wappa-0.1.9}/wappa/messaging/whatsapp/handlers/whatsapp_media_handler.py +0 -0
- {wappa-0.1.8 → wappa-0.1.9}/wappa/messaging/whatsapp/handlers/whatsapp_specialized_handler.py +0 -0
- {wappa-0.1.8 → wappa-0.1.9}/wappa/messaging/whatsapp/handlers/whatsapp_template_handler.py +0 -0
- {wappa-0.1.8 → wappa-0.1.9}/wappa/messaging/whatsapp/messenger/__init__.py +0 -0
- {wappa-0.1.8 → wappa-0.1.9}/wappa/messaging/whatsapp/messenger/whatsapp_messenger.py +0 -0
- {wappa-0.1.8 → wappa-0.1.9}/wappa/messaging/whatsapp/models/__init__.py +0 -0
- {wappa-0.1.8 → wappa-0.1.9}/wappa/messaging/whatsapp/models/basic_models.py +0 -0
- {wappa-0.1.8 → wappa-0.1.9}/wappa/messaging/whatsapp/models/interactive_models.py +0 -0
- {wappa-0.1.8 → wappa-0.1.9}/wappa/messaging/whatsapp/models/media_models.py +0 -0
- {wappa-0.1.8 → wappa-0.1.9}/wappa/messaging/whatsapp/models/specialized_models.py +0 -0
- {wappa-0.1.8 → wappa-0.1.9}/wappa/messaging/whatsapp/models/template_models.py +0 -0
- {wappa-0.1.8 → wappa-0.1.9}/wappa/models/__init__.py +0 -0
- {wappa-0.1.8 → wappa-0.1.9}/wappa/persistence/__init__.py +0 -0
- {wappa-0.1.8 → wappa-0.1.9}/wappa/persistence/cache_factory.py +0 -0
- {wappa-0.1.8 → wappa-0.1.9}/wappa/persistence/json/__init__.py +0 -0
- {wappa-0.1.8 → wappa-0.1.9}/wappa/persistence/json/cache_adapters.py +0 -0
- {wappa-0.1.8 → wappa-0.1.9}/wappa/persistence/json/handlers/state_handler.py +0 -0
- {wappa-0.1.8 → wappa-0.1.9}/wappa/persistence/json/handlers/table_handler.py +0 -0
- {wappa-0.1.8 → wappa-0.1.9}/wappa/persistence/json/handlers/user_handler.py +0 -0
- {wappa-0.1.8 → wappa-0.1.9}/wappa/persistence/json/handlers/utils/file_manager.py +0 -0
- {wappa-0.1.8 → wappa-0.1.9}/wappa/persistence/json/handlers/utils/key_factory.py +0 -0
- {wappa-0.1.8 → wappa-0.1.9}/wappa/persistence/json/handlers/utils/serialization.py +0 -0
- {wappa-0.1.8 → wappa-0.1.9}/wappa/persistence/json/json_cache_factory.py +0 -0
- {wappa-0.1.8 → wappa-0.1.9}/wappa/persistence/json/storage_manager.py +0 -0
- {wappa-0.1.8 → wappa-0.1.9}/wappa/persistence/memory/__init__.py +0 -0
- {wappa-0.1.8 → wappa-0.1.9}/wappa/persistence/memory/cache_adapters.py +0 -0
- {wappa-0.1.8 → wappa-0.1.9}/wappa/persistence/memory/handlers/state_handler.py +0 -0
- {wappa-0.1.8 → wappa-0.1.9}/wappa/persistence/memory/handlers/table_handler.py +0 -0
- {wappa-0.1.8 → wappa-0.1.9}/wappa/persistence/memory/handlers/user_handler.py +0 -0
- {wappa-0.1.8 → wappa-0.1.9}/wappa/persistence/memory/handlers/utils/key_factory.py +0 -0
- {wappa-0.1.8 → wappa-0.1.9}/wappa/persistence/memory/handlers/utils/memory_store.py +0 -0
- {wappa-0.1.8 → wappa-0.1.9}/wappa/persistence/memory/handlers/utils/ttl_manager.py +0 -0
- {wappa-0.1.8 → wappa-0.1.9}/wappa/persistence/memory/memory_cache_factory.py +0 -0
- {wappa-0.1.8 → wappa-0.1.9}/wappa/persistence/memory/storage_manager.py +0 -0
- {wappa-0.1.8 → wappa-0.1.9}/wappa/persistence/redis/README.md +0 -0
- {wappa-0.1.8 → wappa-0.1.9}/wappa/persistence/redis/__init__.py +0 -0
- {wappa-0.1.8 → wappa-0.1.9}/wappa/persistence/redis/cache_adapters.py +0 -0
- {wappa-0.1.8 → wappa-0.1.9}/wappa/persistence/redis/ops.py +0 -0
- {wappa-0.1.8 → wappa-0.1.9}/wappa/persistence/redis/redis_cache_factory.py +0 -0
- {wappa-0.1.8 → wappa-0.1.9}/wappa/persistence/redis/redis_client.py +0 -0
- {wappa-0.1.8 → wappa-0.1.9}/wappa/persistence/redis/redis_handler/__init__.py +0 -0
- {wappa-0.1.8 → wappa-0.1.9}/wappa/persistence/redis/redis_handler/state_handler.py +0 -0
- {wappa-0.1.8 → wappa-0.1.9}/wappa/persistence/redis/redis_handler/table.py +0 -0
- {wappa-0.1.8 → wappa-0.1.9}/wappa/persistence/redis/redis_handler/user.py +0 -0
- {wappa-0.1.8 → wappa-0.1.9}/wappa/persistence/redis/redis_handler/utils/__init__.py +0 -0
- {wappa-0.1.8 → wappa-0.1.9}/wappa/persistence/redis/redis_handler/utils/key_factory.py +0 -0
- {wappa-0.1.8 → wappa-0.1.9}/wappa/persistence/redis/redis_handler/utils/serde.py +0 -0
- {wappa-0.1.8 → wappa-0.1.9}/wappa/persistence/redis/redis_handler/utils/tenant_cache.py +0 -0
- {wappa-0.1.8 → wappa-0.1.9}/wappa/persistence/redis/redis_manager.py +0 -0
- {wappa-0.1.8 → wappa-0.1.9}/wappa/processors/__init__.py +0 -0
- {wappa-0.1.8 → wappa-0.1.9}/wappa/processors/base_processor.py +0 -0
- {wappa-0.1.8 → wappa-0.1.9}/wappa/processors/factory.py +0 -0
- {wappa-0.1.8 → wappa-0.1.9}/wappa/processors/whatsapp_processor.py +0 -0
- {wappa-0.1.8 → wappa-0.1.9}/wappa/schemas/__init__.py +0 -0
- {wappa-0.1.8 → wappa-0.1.9}/wappa/schemas/core/__init__.py +0 -0
- {wappa-0.1.8 → wappa-0.1.9}/wappa/schemas/core/base_message.py +0 -0
- {wappa-0.1.8 → wappa-0.1.9}/wappa/schemas/core/base_status.py +0 -0
- {wappa-0.1.8 → wappa-0.1.9}/wappa/schemas/core/base_webhook.py +0 -0
- {wappa-0.1.8 → wappa-0.1.9}/wappa/schemas/core/types.py +0 -0
- {wappa-0.1.8 → wappa-0.1.9}/wappa/schemas/core/webhook_interfaces/__init__.py +0 -0
- {wappa-0.1.8 → wappa-0.1.9}/wappa/schemas/core/webhook_interfaces/base_components.py +0 -0
- {wappa-0.1.8 → wappa-0.1.9}/wappa/schemas/core/webhook_interfaces/universal_webhooks.py +0 -0
- {wappa-0.1.8 → wappa-0.1.9}/wappa/schemas/factory.py +0 -0
- {wappa-0.1.8 → wappa-0.1.9}/wappa/schemas/whatsapp/__init__.py +0 -0
- {wappa-0.1.8 → wappa-0.1.9}/wappa/schemas/whatsapp/base_models.py +0 -0
- {wappa-0.1.8 → wappa-0.1.9}/wappa/schemas/whatsapp/message_types/__init__.py +0 -0
- {wappa-0.1.8 → wappa-0.1.9}/wappa/schemas/whatsapp/message_types/audio.py +0 -0
- {wappa-0.1.8 → wappa-0.1.9}/wappa/schemas/whatsapp/message_types/button.py +0 -0
- {wappa-0.1.8 → wappa-0.1.9}/wappa/schemas/whatsapp/message_types/contact.py +0 -0
- {wappa-0.1.8 → wappa-0.1.9}/wappa/schemas/whatsapp/message_types/document.py +0 -0
- {wappa-0.1.8 → wappa-0.1.9}/wappa/schemas/whatsapp/message_types/errors.py +0 -0
- {wappa-0.1.8 → wappa-0.1.9}/wappa/schemas/whatsapp/message_types/image.py +0 -0
- {wappa-0.1.8 → wappa-0.1.9}/wappa/schemas/whatsapp/message_types/interactive.py +0 -0
- {wappa-0.1.8 → wappa-0.1.9}/wappa/schemas/whatsapp/message_types/location.py +0 -0
- {wappa-0.1.8 → wappa-0.1.9}/wappa/schemas/whatsapp/message_types/order.py +0 -0
- {wappa-0.1.8 → wappa-0.1.9}/wappa/schemas/whatsapp/message_types/reaction.py +0 -0
- {wappa-0.1.8 → wappa-0.1.9}/wappa/schemas/whatsapp/message_types/sticker.py +0 -0
- {wappa-0.1.8 → wappa-0.1.9}/wappa/schemas/whatsapp/message_types/system.py +0 -0
- {wappa-0.1.8 → wappa-0.1.9}/wappa/schemas/whatsapp/message_types/text.py +0 -0
- {wappa-0.1.8 → wappa-0.1.9}/wappa/schemas/whatsapp/message_types/unsupported.py +0 -0
- {wappa-0.1.8 → wappa-0.1.9}/wappa/schemas/whatsapp/message_types/video.py +0 -0
- {wappa-0.1.8 → wappa-0.1.9}/wappa/schemas/whatsapp/status_models.py +0 -0
- {wappa-0.1.8 → wappa-0.1.9}/wappa/schemas/whatsapp/validators.py +0 -0
- {wappa-0.1.8 → wappa-0.1.9}/wappa/schemas/whatsapp/webhook_container.py +0 -0
- {wappa-0.1.8 → wappa-0.1.9}/wappa/webhooks/__init__.py +0 -0
- {wappa-0.1.8 → wappa-0.1.9}/wappa/webhooks/core/__init__.py +0 -0
- {wappa-0.1.8 → wappa-0.1.9}/wappa/webhooks/core/base_message.py +0 -0
- {wappa-0.1.8 → wappa-0.1.9}/wappa/webhooks/core/base_status.py +0 -0
- {wappa-0.1.8 → wappa-0.1.9}/wappa/webhooks/core/base_webhook.py +0 -0
- {wappa-0.1.8 → wappa-0.1.9}/wappa/webhooks/core/types.py +0 -0
- {wappa-0.1.8 → wappa-0.1.9}/wappa/webhooks/core/webhook_interfaces/__init__.py +0 -0
- {wappa-0.1.8 → wappa-0.1.9}/wappa/webhooks/core/webhook_interfaces/base_components.py +0 -0
- {wappa-0.1.8 → wappa-0.1.9}/wappa/webhooks/core/webhook_interfaces/universal_webhooks.py +0 -0
- {wappa-0.1.8 → wappa-0.1.9}/wappa/webhooks/factory.py +0 -0
- {wappa-0.1.8 → wappa-0.1.9}/wappa/webhooks/whatsapp/__init__.py +0 -0
- {wappa-0.1.8 → wappa-0.1.9}/wappa/webhooks/whatsapp/base_models.py +0 -0
- {wappa-0.1.8 → wappa-0.1.9}/wappa/webhooks/whatsapp/message_types/__init__.py +0 -0
- {wappa-0.1.8 → wappa-0.1.9}/wappa/webhooks/whatsapp/message_types/audio.py +0 -0
- {wappa-0.1.8 → wappa-0.1.9}/wappa/webhooks/whatsapp/message_types/button.py +0 -0
- {wappa-0.1.8 → wappa-0.1.9}/wappa/webhooks/whatsapp/message_types/contact.py +0 -0
- {wappa-0.1.8 → wappa-0.1.9}/wappa/webhooks/whatsapp/message_types/document.py +0 -0
- {wappa-0.1.8 → wappa-0.1.9}/wappa/webhooks/whatsapp/message_types/errors.py +0 -0
- {wappa-0.1.8 → wappa-0.1.9}/wappa/webhooks/whatsapp/message_types/image.py +0 -0
- {wappa-0.1.8 → wappa-0.1.9}/wappa/webhooks/whatsapp/message_types/interactive.py +0 -0
- {wappa-0.1.8 → wappa-0.1.9}/wappa/webhooks/whatsapp/message_types/location.py +0 -0
- {wappa-0.1.8 → wappa-0.1.9}/wappa/webhooks/whatsapp/message_types/order.py +0 -0
- {wappa-0.1.8 → wappa-0.1.9}/wappa/webhooks/whatsapp/message_types/reaction.py +0 -0
- {wappa-0.1.8 → wappa-0.1.9}/wappa/webhooks/whatsapp/message_types/sticker.py +0 -0
- {wappa-0.1.8 → wappa-0.1.9}/wappa/webhooks/whatsapp/message_types/system.py +0 -0
- {wappa-0.1.8 → wappa-0.1.9}/wappa/webhooks/whatsapp/message_types/text.py +0 -0
- {wappa-0.1.8 → wappa-0.1.9}/wappa/webhooks/whatsapp/message_types/unsupported.py +0 -0
- {wappa-0.1.8 → wappa-0.1.9}/wappa/webhooks/whatsapp/message_types/video.py +0 -0
- {wappa-0.1.8 → wappa-0.1.9}/wappa/webhooks/whatsapp/status_models.py +0 -0
- {wappa-0.1.8 → wappa-0.1.9}/wappa/webhooks/whatsapp/validators.py +0 -0
- {wappa-0.1.8 → wappa-0.1.9}/wappa/webhooks/whatsapp/webhook_container.py +0 -0
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: wappa
|
|
3
|
-
Version: 0.1.
|
|
3
|
+
Version: 0.1.9
|
|
4
4
|
Summary: Open Source Framework to develop smart Workflows, Agents and full chat applications through WhatsApp
|
|
5
5
|
Project-URL: Homepage, https://wappa.mimeia.com
|
|
6
6
|
Project-URL: Documentation, https://wappa.mimeia.com/docs
|
|
@@ -4,7 +4,7 @@ build-backend = "hatchling.build"
|
|
|
4
4
|
|
|
5
5
|
[project]
|
|
6
6
|
name = "wappa"
|
|
7
|
-
version = "0.1.
|
|
7
|
+
version = "0.1.9"
|
|
8
8
|
description = "Open Source Framework to develop smart Workflows, Agents and full chat applications through WhatsApp"
|
|
9
9
|
authors = [
|
|
10
10
|
{name = "Sasha Canal", email = "contact@mimeia.com"},
|
|
@@ -0,0 +1,33 @@
|
|
|
1
|
+
# ================================================================
|
|
2
|
+
# WAPPA WHATSAPP FRAMEWORK CONFIGURATION
|
|
3
|
+
# ================================================================
|
|
4
|
+
|
|
5
|
+
# General Configuration
|
|
6
|
+
PORT=8000
|
|
7
|
+
TIME_ZONE=America/Bogota
|
|
8
|
+
|
|
9
|
+
# DEBUG or INFO or WARNING or ERROR or CRITICAL
|
|
10
|
+
LOG_LEVEL=DEBUG
|
|
11
|
+
LOG_DIR=./logs
|
|
12
|
+
## Environment DEV or PROD
|
|
13
|
+
ENVIRONMENT=DEV
|
|
14
|
+
|
|
15
|
+
# WhatsApp Graph API
|
|
16
|
+
BASE_URL=https://graph.facebook.com/
|
|
17
|
+
API_VERSION=v23.0
|
|
18
|
+
|
|
19
|
+
# WhatsApp Business API Credentials
|
|
20
|
+
WP_ACCESS_TOKEN=
|
|
21
|
+
WP_PHONE_ID=
|
|
22
|
+
WP_BID=
|
|
23
|
+
|
|
24
|
+
# Webhook Configuration
|
|
25
|
+
WHATSAPP_WEBHOOK_VERIFY_TOKEN=
|
|
26
|
+
|
|
27
|
+
# Redis Configuration (Optional - uncomment to enable Redis persistence)
|
|
28
|
+
# REDIS_URL=redis://localhost:6379/
|
|
29
|
+
# REDIS_MAX_CONNECTIONS=64
|
|
30
|
+
|
|
31
|
+
# Optional: AI Tools
|
|
32
|
+
# OPENAI_API_KEY=
|
|
33
|
+
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
from wappa import WappaEventHandler
|
|
2
|
+
from wappa.webhooks import IncomingMessageWebhook
|
|
3
|
+
|
|
4
|
+
class MasterEventHandler(WappaEventHandler):
|
|
5
|
+
|
|
6
|
+
async def process_message(self, webhook: IncomingMessageWebhook):
|
|
7
|
+
await self.messenger.mark_as_read(webhook.message.message_id, webhook.user.user_id)
|
|
8
|
+
await self.messenger.send_text("Welcome to Wappa", webhook.user.user_id)
|
|
@@ -0,0 +1,33 @@
|
|
|
1
|
+
# ================================================================
|
|
2
|
+
# WAPPA WHATSAPP FRAMEWORK CONFIGURATION
|
|
3
|
+
# ================================================================
|
|
4
|
+
|
|
5
|
+
# General Configuration
|
|
6
|
+
PORT=8000
|
|
7
|
+
TIME_ZONE=America/Bogota
|
|
8
|
+
|
|
9
|
+
# DEBUG or INFO or WARNING or ERROR or CRITICAL
|
|
10
|
+
LOG_LEVEL=DEBUG
|
|
11
|
+
LOG_DIR=./logs
|
|
12
|
+
## Environment DEV or PROD
|
|
13
|
+
ENVIRONMENT=DEV
|
|
14
|
+
|
|
15
|
+
# WhatsApp Graph API
|
|
16
|
+
BASE_URL=https://graph.facebook.com/
|
|
17
|
+
API_VERSION=v23.0
|
|
18
|
+
|
|
19
|
+
# WhatsApp Business API Credentials
|
|
20
|
+
WP_ACCESS_TOKEN=
|
|
21
|
+
WP_PHONE_ID=
|
|
22
|
+
WP_BID=
|
|
23
|
+
|
|
24
|
+
# Webhook Configuration
|
|
25
|
+
WHATSAPP_WEBHOOK_VERIFY_TOKEN=
|
|
26
|
+
|
|
27
|
+
# Redis Configuration (Optional - uncomment to enable Redis persistence)
|
|
28
|
+
# REDIS_URL=redis://localhost:6379/
|
|
29
|
+
# REDIS_MAX_CONNECTIONS=64
|
|
30
|
+
|
|
31
|
+
# Optional: AI Tools
|
|
32
|
+
# OPENAI_API_KEY=
|
|
33
|
+
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
"""JSON Cache Example - SOLID Architecture Implementation"""
|
|
@@ -0,0 +1,235 @@
|
|
|
1
|
+
"""
|
|
2
|
+
JSON Cache Example - SOLID Architecture Implementation
|
|
3
|
+
|
|
4
|
+
This is the main initialization file following SOLID principles:
|
|
5
|
+
- Single Responsibility: Pure initialization and configuration
|
|
6
|
+
- Open/Closed: Extensible through score module registration
|
|
7
|
+
- Liskov Substitution: Compatible with Wappa framework interface
|
|
8
|
+
- Interface Segregation: Clean dependency interfaces
|
|
9
|
+
- Dependency Inversion: Abstractions injected into concrete implementations
|
|
10
|
+
|
|
11
|
+
SETUP REQUIRED:
|
|
12
|
+
1. Create a .env file with your WhatsApp Business API credentials:
|
|
13
|
+
WP_ACCESS_TOKEN=your_access_token_here
|
|
14
|
+
WP_PHONE_ID=your_phone_number_id_here
|
|
15
|
+
WP_BID=your_business_id_here
|
|
16
|
+
|
|
17
|
+
2. JSON Cache automatically creates cache directory:
|
|
18
|
+
No external dependencies required!
|
|
19
|
+
Cache files will be created in {project_root}/cache/
|
|
20
|
+
|
|
21
|
+
DEMO FEATURES:
|
|
22
|
+
- SOLID architecture with separated concerns
|
|
23
|
+
- Master event orchestrator with score modules
|
|
24
|
+
- User management, message history, and state commands
|
|
25
|
+
- Cache statistics and monitoring
|
|
26
|
+
- Professional logging and error handling
|
|
27
|
+
- File-based JSON cache with TTL support
|
|
28
|
+
|
|
29
|
+
USAGE:
|
|
30
|
+
- Direct Python: python -m app.main (from project root)
|
|
31
|
+
- FastAPI-style: uvicorn app.main:app --reload (from project root)
|
|
32
|
+
- Wappa CLI: wappa dev app.main (when CLI is available)
|
|
33
|
+
"""
|
|
34
|
+
|
|
35
|
+
# Import core Wappa components
|
|
36
|
+
from wappa import Wappa, __version__
|
|
37
|
+
from wappa.core.config.settings import settings
|
|
38
|
+
from wappa.core.logging import get_logger
|
|
39
|
+
|
|
40
|
+
logger = get_logger(__name__)
|
|
41
|
+
|
|
42
|
+
# Import our SOLID architecture WappaEventHandler implementation
|
|
43
|
+
from .master_event import JSONCacheExampleHandler
|
|
44
|
+
|
|
45
|
+
|
|
46
|
+
def validate_configuration() -> bool:
|
|
47
|
+
"""
|
|
48
|
+
Validate required configuration settings.
|
|
49
|
+
|
|
50
|
+
Returns:
|
|
51
|
+
True if configuration is valid, False otherwise
|
|
52
|
+
"""
|
|
53
|
+
|
|
54
|
+
# Check required WhatsApp credentials
|
|
55
|
+
missing_configs = []
|
|
56
|
+
|
|
57
|
+
if not settings.wp_access_token:
|
|
58
|
+
missing_configs.append("WP_ACCESS_TOKEN")
|
|
59
|
+
|
|
60
|
+
if not settings.wp_phone_id:
|
|
61
|
+
missing_configs.append("WP_PHONE_ID")
|
|
62
|
+
|
|
63
|
+
if not settings.wp_bid:
|
|
64
|
+
missing_configs.append("WP_BID")
|
|
65
|
+
|
|
66
|
+
if missing_configs:
|
|
67
|
+
logger.error(f"❌ Missing required configuration: {', '.join(missing_configs)}")
|
|
68
|
+
logger.error("💡 Create a .env file with the required credentials")
|
|
69
|
+
return False
|
|
70
|
+
|
|
71
|
+
logger.info("✅ Configuration validation passed")
|
|
72
|
+
return True
|
|
73
|
+
|
|
74
|
+
|
|
75
|
+
def display_startup_information() -> None:
|
|
76
|
+
"""
|
|
77
|
+
Display startup information and demo features.
|
|
78
|
+
|
|
79
|
+
Shows configuration status, architecture overview,
|
|
80
|
+
and available demo features.
|
|
81
|
+
"""
|
|
82
|
+
print(f"🚀 Wappa v{__version__} - JSON Cache Example (SOLID Architecture)")
|
|
83
|
+
print("=" * 80)
|
|
84
|
+
print()
|
|
85
|
+
|
|
86
|
+
print("🏗️ *SOLID ARCHITECTURE IMPLEMENTATION:*")
|
|
87
|
+
print(" • Single Responsibility: Each score module has one specific concern")
|
|
88
|
+
print(" • Open/Closed: New score modules can be added without modification")
|
|
89
|
+
print(" • Liskov Substitution: All scores implement the same interface")
|
|
90
|
+
print(" • Interface Segregation: Clean, focused interfaces for each concern")
|
|
91
|
+
print(" • Dependency Inversion: Dependencies injected through abstractions")
|
|
92
|
+
print()
|
|
93
|
+
|
|
94
|
+
print("📋 *CONFIGURATION STATUS:*")
|
|
95
|
+
print(f" • Access Token: {'✅ Configured' if settings.wp_access_token else '❌ Missing'}")
|
|
96
|
+
print(f" • Phone ID: {settings.wp_phone_id if settings.wp_phone_id else '❌ Missing'}")
|
|
97
|
+
print(f" • Business ID: {'✅ Configured' if settings.wp_bid else '❌ Missing'}")
|
|
98
|
+
print(f" • JSON Cache: ✅ No external dependencies required")
|
|
99
|
+
print(f" • Environment: {'🛠️ Development' if settings.is_development else '🚀 Production'}")
|
|
100
|
+
print()
|
|
101
|
+
|
|
102
|
+
print("🎯 *SCORE MODULES (BUSINESS LOGIC):*")
|
|
103
|
+
print(" • UserManagementScore: User profile and caching logic")
|
|
104
|
+
print(" • MessageHistoryScore: Message logging and /HISTORY command")
|
|
105
|
+
print(" • StateCommandsScore: /WAPPA and /EXIT command processing")
|
|
106
|
+
print(" • CacheStatisticsScore: Cache monitoring and /STATS command")
|
|
107
|
+
print()
|
|
108
|
+
|
|
109
|
+
print("🧪 *DEMO FEATURES:*")
|
|
110
|
+
print(" 1. Send any message → User profile created/updated + message logged")
|
|
111
|
+
print(" 2. Send '/WAPPA' → Enter special state with cache management")
|
|
112
|
+
print(" 3. While in WAPPA state → All messages replied with 'Hola Wapp@ ;)'")
|
|
113
|
+
print(" 4. Send '/EXIT' → Leave special state with session summary")
|
|
114
|
+
print(" 5. Send '/HISTORY' → View your last 20 messages with timestamps")
|
|
115
|
+
print(" 6. Send '/STATS' → View comprehensive cache statistics")
|
|
116
|
+
print()
|
|
117
|
+
|
|
118
|
+
print("💎 *JSON CACHE ARCHITECTURE:*")
|
|
119
|
+
print(" • user_cache: User profiles stored in {project_root}/cache/users/")
|
|
120
|
+
print(" • table_cache: Message history in {project_root}/cache/tables/")
|
|
121
|
+
print(" • state_cache: Command state management in {project_root}/cache/states/")
|
|
122
|
+
print(" • TTL Support: Metadata-based expiration with lazy cleanup")
|
|
123
|
+
print(" • File Safety: Atomic write operations prevent corruption")
|
|
124
|
+
print()
|
|
125
|
+
|
|
126
|
+
print("🔧 *TECHNICAL FEATURES:*")
|
|
127
|
+
print(" • File-based persistence with project root auto-detection")
|
|
128
|
+
print(" • BaseModel JSON serialization with datetime handling")
|
|
129
|
+
print(" • TTL support through JSON metadata")
|
|
130
|
+
print(" • Dependency injection with interface abstractions")
|
|
131
|
+
print(" • Score module registry with automatic discovery")
|
|
132
|
+
print(" • Professional error handling and recovery")
|
|
133
|
+
print(" • Performance monitoring and statistics")
|
|
134
|
+
print(" • Comprehensive logging with structured output")
|
|
135
|
+
print(" • Cache file inspection for debugging")
|
|
136
|
+
print()
|
|
137
|
+
|
|
138
|
+
|
|
139
|
+
def create_wappa_application() -> Wappa:
|
|
140
|
+
"""
|
|
141
|
+
Create and configure the Wappa application.
|
|
142
|
+
|
|
143
|
+
This function follows Single Responsibility Principle by focusing
|
|
144
|
+
only on application creation and initial configuration.
|
|
145
|
+
|
|
146
|
+
Returns:
|
|
147
|
+
Configured Wappa application instance
|
|
148
|
+
"""
|
|
149
|
+
|
|
150
|
+
try:
|
|
151
|
+
# Create Wappa instance with JSON cache
|
|
152
|
+
logger.info("🏗️ Creating Wappa application with JSON cache...")
|
|
153
|
+
app = Wappa(cache="json")
|
|
154
|
+
|
|
155
|
+
logger.info("✅ Wappa application created successfully")
|
|
156
|
+
return app
|
|
157
|
+
|
|
158
|
+
except Exception as e:
|
|
159
|
+
logger.error(f"❌ Failed to create Wappa application: {e}")
|
|
160
|
+
raise
|
|
161
|
+
|
|
162
|
+
|
|
163
|
+
def main() -> None:
|
|
164
|
+
"""
|
|
165
|
+
Main application entry point.
|
|
166
|
+
|
|
167
|
+
Demonstrates SOLID principles in action:
|
|
168
|
+
- Single Responsibility: Each function has one clear purpose
|
|
169
|
+
- Dependency Inversion: Dependencies flow from abstractions
|
|
170
|
+
- Open/Closed: System is open for extension via score modules
|
|
171
|
+
"""
|
|
172
|
+
|
|
173
|
+
logger.info("🚀 Starting JSON Cache Example with SOLID Architecture")
|
|
174
|
+
|
|
175
|
+
try:
|
|
176
|
+
# Display startup information
|
|
177
|
+
display_startup_information()
|
|
178
|
+
|
|
179
|
+
# Validate configuration before proceeding
|
|
180
|
+
if not validate_configuration():
|
|
181
|
+
logger.error("❌ Configuration validation failed - cannot start application")
|
|
182
|
+
return
|
|
183
|
+
|
|
184
|
+
# Create Wappa application
|
|
185
|
+
app = create_wappa_application()
|
|
186
|
+
|
|
187
|
+
# Create and set the SOLID WappaEventHandler implementation
|
|
188
|
+
handler = JSONCacheExampleHandler()
|
|
189
|
+
app.set_event_handler(handler)
|
|
190
|
+
|
|
191
|
+
logger.info("✅ Application initialization completed with SOLID WappaEventHandler")
|
|
192
|
+
|
|
193
|
+
print("🌐 Starting SOLID JSON cache demo server...")
|
|
194
|
+
print("💡 Press CTRL+C to stop the server")
|
|
195
|
+
print("💾 Cache files will be created in the project's cache/ directory")
|
|
196
|
+
print("=" * 80)
|
|
197
|
+
print()
|
|
198
|
+
|
|
199
|
+
# Start the application
|
|
200
|
+
# The framework will handle dependency injection automatically
|
|
201
|
+
app.run()
|
|
202
|
+
|
|
203
|
+
except KeyboardInterrupt:
|
|
204
|
+
logger.info("👋 Application stopped by user")
|
|
205
|
+
print("\n👋 JSON cache demo stopped by user")
|
|
206
|
+
|
|
207
|
+
except Exception as e:
|
|
208
|
+
logger.error(f"❌ Application startup error: {e}", exc_info=True)
|
|
209
|
+
print(f"\n❌ Server error: {e}")
|
|
210
|
+
|
|
211
|
+
finally:
|
|
212
|
+
logger.info("🏁 JSON cache demo completed")
|
|
213
|
+
print("🏁 JSON cache demo completed")
|
|
214
|
+
|
|
215
|
+
|
|
216
|
+
# Module-level app instance for uvicorn compatibility
|
|
217
|
+
# This enables: uvicorn main:app --reload
|
|
218
|
+
|
|
219
|
+
try:
|
|
220
|
+
logger.info("📦 Creating module-level Wappa application instance")
|
|
221
|
+
app = Wappa(cache="json")
|
|
222
|
+
|
|
223
|
+
# Create and set the SOLID WappaEventHandler implementation
|
|
224
|
+
handler = JSONCacheExampleHandler()
|
|
225
|
+
app.set_event_handler(handler)
|
|
226
|
+
|
|
227
|
+
logger.info("✅ Module-level application instance ready with SOLID WappaEventHandler")
|
|
228
|
+
|
|
229
|
+
except Exception as e:
|
|
230
|
+
logger.error(f"❌ Failed to create module-level app instance: {e}")
|
|
231
|
+
raise
|
|
232
|
+
|
|
233
|
+
|
|
234
|
+
if __name__ == "__main__":
|
|
235
|
+
main()
|