wappa 0.1.9__tar.gz → 0.1.10__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.9 → wappa-0.1.10}/PKG-INFO +362 -8
- wappa-0.1.10/README.md +364 -0
- {wappa-0.1.9 → wappa-0.1.10}/pyproject.toml +1 -1
- {wappa-0.1.9 → wappa-0.1.10}/uv.lock +1 -1
- {wappa-0.1.9 → wappa-0.1.10}/wappa/__init__.py +4 -5
- {wappa-0.1.9 → wappa-0.1.10}/wappa/api/controllers/webhook_controller.py +5 -2
- {wappa-0.1.9 → wappa-0.1.10}/wappa/api/dependencies/__init__.py +0 -5
- {wappa-0.1.9 → wappa-0.1.10}/wappa/api/middleware/error_handler.py +4 -4
- {wappa-0.1.9 → wappa-0.1.10}/wappa/api/middleware/owner.py +11 -5
- {wappa-0.1.9 → wappa-0.1.10}/wappa/api/routes/webhooks.py +2 -2
- {wappa-0.1.9 → wappa-0.1.10}/wappa/cli/__init__.py +1 -1
- {wappa-0.1.9 → wappa-0.1.10}/wappa/cli/examples/init/app/main.py +2 -1
- {wappa-0.1.9 → wappa-0.1.10}/wappa/cli/examples/init/app/master_event.py +5 -3
- wappa-0.1.10/wappa/cli/examples/json_cache_example/app/__init__.py +1 -0
- {wappa-0.1.9 → wappa-0.1.10}/wappa/cli/examples/json_cache_example/app/main.py +56 -44
- {wappa-0.1.9 → wappa-0.1.10}/wappa/cli/examples/json_cache_example/app/master_event.py +181 -145
- wappa-0.1.10/wappa/cli/examples/json_cache_example/app/models/__init__.py +1 -0
- {wappa-0.1.9 → wappa-0.1.10}/wappa/cli/examples/json_cache_example/app/models/json_demo_models.py +32 -51
- {wappa-0.1.9 → wappa-0.1.10}/wappa/cli/examples/json_cache_example/app/scores/__init__.py +2 -2
- {wappa-0.1.9 → wappa-0.1.10}/wappa/cli/examples/json_cache_example/app/scores/score_base.py +52 -46
- {wappa-0.1.9 → wappa-0.1.10}/wappa/cli/examples/json_cache_example/app/scores/score_cache_statistics.py +70 -62
- {wappa-0.1.9 → wappa-0.1.10}/wappa/cli/examples/json_cache_example/app/scores/score_message_history.py +41 -44
- {wappa-0.1.9 → wappa-0.1.10}/wappa/cli/examples/json_cache_example/app/scores/score_state_commands.py +83 -71
- {wappa-0.1.9 → wappa-0.1.10}/wappa/cli/examples/json_cache_example/app/scores/score_user_management.py +73 -57
- {wappa-0.1.9/wappa/cli/examples/redis_cache_example → wappa-0.1.10/wappa/cli/examples/json_cache_example}/app/utils/__init__.py +2 -2
- {wappa-0.1.9/wappa/cli/examples/redis_cache_example → wappa-0.1.10/wappa/cli/examples/json_cache_example}/app/utils/cache_utils.py +54 -56
- {wappa-0.1.9/wappa/cli/examples/redis_cache_example → wappa-0.1.10/wappa/cli/examples/json_cache_example}/app/utils/message_utils.py +85 -80
- {wappa-0.1.9 → wappa-0.1.10}/wappa/cli/examples/openai_transcript/app/main.py +2 -1
- {wappa-0.1.9 → wappa-0.1.10}/wappa/cli/examples/openai_transcript/app/master_event.py +31 -22
- {wappa-0.1.9 → wappa-0.1.10}/wappa/cli/examples/openai_transcript/app/openai_utils/__init__.py +1 -1
- {wappa-0.1.9 → wappa-0.1.10}/wappa/cli/examples/openai_transcript/app/openai_utils/audio_processing.py +37 -24
- {wappa-0.1.9 → wappa-0.1.10}/wappa/cli/examples/redis_cache_example/app/__init__.py +1 -1
- {wappa-0.1.9 → wappa-0.1.10}/wappa/cli/examples/redis_cache_example/app/main.py +56 -44
- {wappa-0.1.9 → wappa-0.1.10}/wappa/cli/examples/redis_cache_example/app/master_event.py +181 -145
- {wappa-0.1.9 → wappa-0.1.10}/wappa/cli/examples/redis_cache_example/app/models/redis_demo_models.py +31 -50
- {wappa-0.1.9 → wappa-0.1.10}/wappa/cli/examples/redis_cache_example/app/scores/__init__.py +2 -2
- {wappa-0.1.9 → wappa-0.1.10}/wappa/cli/examples/redis_cache_example/app/scores/score_base.py +52 -46
- {wappa-0.1.9 → wappa-0.1.10}/wappa/cli/examples/redis_cache_example/app/scores/score_cache_statistics.py +70 -62
- {wappa-0.1.9 → wappa-0.1.10}/wappa/cli/examples/redis_cache_example/app/scores/score_message_history.py +41 -44
- {wappa-0.1.9 → wappa-0.1.10}/wappa/cli/examples/redis_cache_example/app/scores/score_state_commands.py +83 -71
- {wappa-0.1.9 → wappa-0.1.10}/wappa/cli/examples/redis_cache_example/app/scores/score_user_management.py +73 -57
- {wappa-0.1.9/wappa/cli/examples/json_cache_example → wappa-0.1.10/wappa/cli/examples/redis_cache_example}/app/utils/__init__.py +2 -2
- {wappa-0.1.9/wappa/cli/examples/json_cache_example → wappa-0.1.10/wappa/cli/examples/redis_cache_example}/app/utils/cache_utils.py +54 -56
- {wappa-0.1.9/wappa/cli/examples/json_cache_example → wappa-0.1.10/wappa/cli/examples/redis_cache_example}/app/utils/message_utils.py +85 -80
- {wappa-0.1.9 → wappa-0.1.10}/wappa/cli/examples/simple_echo_example/app/__init__.py +1 -1
- {wappa-0.1.9 → wappa-0.1.10}/wappa/cli/examples/simple_echo_example/app/main.py +41 -33
- {wappa-0.1.9 → wappa-0.1.10}/wappa/cli/examples/simple_echo_example/app/master_event.py +78 -57
- {wappa-0.1.9 → wappa-0.1.10}/wappa/cli/examples/wappa_full_example/app/__init__.py +1 -1
- {wappa-0.1.9 → wappa-0.1.10}/wappa/cli/examples/wappa_full_example/app/handlers/__init__.py +1 -1
- {wappa-0.1.9 → wappa-0.1.10}/wappa/cli/examples/wappa_full_example/app/handlers/command_handlers.py +134 -126
- {wappa-0.1.9 → wappa-0.1.10}/wappa/cli/examples/wappa_full_example/app/handlers/message_handlers.py +237 -229
- {wappa-0.1.9 → wappa-0.1.10}/wappa/cli/examples/wappa_full_example/app/handlers/state_handlers.py +170 -148
- {wappa-0.1.9 → wappa-0.1.10}/wappa/cli/examples/wappa_full_example/app/main.py +51 -39
- {wappa-0.1.9 → wappa-0.1.10}/wappa/cli/examples/wappa_full_example/app/master_event.py +179 -120
- {wappa-0.1.9 → wappa-0.1.10}/wappa/cli/examples/wappa_full_example/app/models/__init__.py +1 -1
- {wappa-0.1.9 → wappa-0.1.10}/wappa/cli/examples/wappa_full_example/app/models/state_models.py +113 -104
- {wappa-0.1.9 → wappa-0.1.10}/wappa/cli/examples/wappa_full_example/app/models/user_models.py +92 -76
- {wappa-0.1.9 → wappa-0.1.10}/wappa/cli/examples/wappa_full_example/app/models/webhook_metadata.py +109 -83
- {wappa-0.1.9 → wappa-0.1.10}/wappa/cli/examples/wappa_full_example/app/utils/__init__.py +1 -1
- {wappa-0.1.9 → wappa-0.1.10}/wappa/cli/examples/wappa_full_example/app/utils/cache_utils.py +132 -113
- {wappa-0.1.9 → wappa-0.1.10}/wappa/cli/examples/wappa_full_example/app/utils/media_handler.py +175 -132
- {wappa-0.1.9 → wappa-0.1.10}/wappa/cli/examples/wappa_full_example/app/utils/metadata_extractor.py +126 -87
- {wappa-0.1.9 → wappa-0.1.10}/wappa/cli/main.py +9 -4
- {wappa-0.1.9 → wappa-0.1.10}/wappa/core/__init__.py +18 -23
- {wappa-0.1.9 → wappa-0.1.10}/wappa/core/config/settings.py +7 -5
- {wappa-0.1.9 → wappa-0.1.10}/wappa/core/events/default_handlers.py +1 -1
- {wappa-0.1.9 → wappa-0.1.10}/wappa/core/factory/wappa_builder.py +38 -25
- {wappa-0.1.9 → wappa-0.1.10}/wappa/core/plugins/redis_plugin.py +1 -3
- {wappa-0.1.9 → wappa-0.1.10}/wappa/core/plugins/wappa_core_plugin.py +7 -6
- {wappa-0.1.9 → wappa-0.1.10}/wappa/core/types.py +12 -12
- {wappa-0.1.9 → wappa-0.1.10}/wappa/core/wappa_app.py +10 -8
- {wappa-0.1.9 → wappa-0.1.10}/wappa/database/__init__.py +3 -4
- {wappa-0.1.9 → wappa-0.1.10}/wappa/domain/enums/messenger_platform.py +1 -2
- {wappa-0.1.9 → wappa-0.1.10}/wappa/domain/factories/media_factory.py +5 -20
- {wappa-0.1.9 → wappa-0.1.10}/wappa/domain/factories/message_factory.py +5 -20
- {wappa-0.1.9 → wappa-0.1.10}/wappa/domain/factories/messenger_factory.py +2 -4
- {wappa-0.1.9 → wappa-0.1.10}/wappa/domain/interfaces/cache_interface.py +7 -7
- {wappa-0.1.9 → wappa-0.1.10}/wappa/domain/interfaces/media_interface.py +2 -5
- {wappa-0.1.9 → wappa-0.1.10}/wappa/domain/models/media_result.py +1 -3
- {wappa-0.1.9 → wappa-0.1.10}/wappa/domain/models/platforms/platform_config.py +1 -3
- {wappa-0.1.9 → wappa-0.1.10}/wappa/messaging/__init__.py +9 -12
- {wappa-0.1.9 → wappa-0.1.10}/wappa/messaging/whatsapp/handlers/whatsapp_media_handler.py +20 -22
- {wappa-0.1.9 → wappa-0.1.10}/wappa/models/__init__.py +27 -35
- {wappa-0.1.9 → wappa-0.1.10}/wappa/persistence/__init__.py +12 -15
- {wappa-0.1.9 → wappa-0.1.10}/wappa/persistence/cache_factory.py +0 -1
- {wappa-0.1.9 → wappa-0.1.10}/wappa/persistence/json/__init__.py +1 -1
- {wappa-0.1.9 → wappa-0.1.10}/wappa/persistence/json/cache_adapters.py +37 -25
- {wappa-0.1.9 → wappa-0.1.10}/wappa/persistence/json/handlers/state_handler.py +60 -52
- {wappa-0.1.9 → wappa-0.1.10}/wappa/persistence/json/handlers/table_handler.py +51 -49
- {wappa-0.1.9 → wappa-0.1.10}/wappa/persistence/json/handlers/user_handler.py +71 -55
- {wappa-0.1.9 → wappa-0.1.10}/wappa/persistence/json/handlers/utils/file_manager.py +42 -39
- {wappa-0.1.9 → wappa-0.1.10}/wappa/persistence/json/handlers/utils/key_factory.py +1 -1
- {wappa-0.1.9 → wappa-0.1.10}/wappa/persistence/json/handlers/utils/serialization.py +13 -11
- {wappa-0.1.9 → wappa-0.1.10}/wappa/persistence/json/json_cache_factory.py +4 -8
- {wappa-0.1.9 → wappa-0.1.10}/wappa/persistence/json/storage_manager.py +66 -79
- {wappa-0.1.9 → wappa-0.1.10}/wappa/persistence/memory/__init__.py +1 -1
- {wappa-0.1.9 → wappa-0.1.10}/wappa/persistence/memory/cache_adapters.py +37 -25
- {wappa-0.1.9 → wappa-0.1.10}/wappa/persistence/memory/handlers/state_handler.py +62 -52
- {wappa-0.1.9 → wappa-0.1.10}/wappa/persistence/memory/handlers/table_handler.py +59 -53
- {wappa-0.1.9 → wappa-0.1.10}/wappa/persistence/memory/handlers/user_handler.py +75 -55
- {wappa-0.1.9 → wappa-0.1.10}/wappa/persistence/memory/handlers/utils/key_factory.py +1 -1
- {wappa-0.1.9 → wappa-0.1.10}/wappa/persistence/memory/handlers/utils/memory_store.py +75 -71
- {wappa-0.1.9 → wappa-0.1.10}/wappa/persistence/memory/handlers/utils/ttl_manager.py +59 -67
- {wappa-0.1.9 → wappa-0.1.10}/wappa/persistence/memory/memory_cache_factory.py +3 -7
- {wappa-0.1.9 → wappa-0.1.10}/wappa/persistence/memory/storage_manager.py +52 -62
- {wappa-0.1.9 → wappa-0.1.10}/wappa/persistence/redis/cache_adapters.py +27 -21
- {wappa-0.1.9 → wappa-0.1.10}/wappa/persistence/redis/ops.py +11 -11
- {wappa-0.1.9 → wappa-0.1.10}/wappa/persistence/redis/redis_client.py +4 -6
- {wappa-0.1.9 → wappa-0.1.10}/wappa/persistence/redis/redis_manager.py +12 -4
- {wappa-0.1.9 → wappa-0.1.10}/wappa/processors/factory.py +5 -5
- {wappa-0.1.9 → wappa-0.1.10}/wappa/schemas/factory.py +2 -5
- {wappa-0.1.9 → wappa-0.1.10}/wappa/schemas/whatsapp/message_types/errors.py +3 -12
- {wappa-0.1.9 → wappa-0.1.10}/wappa/schemas/whatsapp/validators.py +3 -3
- {wappa-0.1.9 → wappa-0.1.10}/wappa/webhooks/__init__.py +17 -18
- {wappa-0.1.9 → wappa-0.1.10}/wappa/webhooks/factory.py +3 -5
- {wappa-0.1.9 → wappa-0.1.10}/wappa/webhooks/whatsapp/__init__.py +10 -13
- {wappa-0.1.9 → wappa-0.1.10}/wappa/webhooks/whatsapp/message_types/audio.py +0 -4
- {wappa-0.1.9 → wappa-0.1.10}/wappa/webhooks/whatsapp/message_types/document.py +1 -9
- {wappa-0.1.9 → wappa-0.1.10}/wappa/webhooks/whatsapp/message_types/errors.py +3 -12
- {wappa-0.1.9 → wappa-0.1.10}/wappa/webhooks/whatsapp/message_types/location.py +1 -21
- {wappa-0.1.9 → wappa-0.1.10}/wappa/webhooks/whatsapp/message_types/sticker.py +1 -5
- {wappa-0.1.9 → wappa-0.1.10}/wappa/webhooks/whatsapp/message_types/text.py +0 -6
- {wappa-0.1.9 → wappa-0.1.10}/wappa/webhooks/whatsapp/message_types/video.py +1 -20
- {wappa-0.1.9 → wappa-0.1.10}/wappa/webhooks/whatsapp/status_models.py +2 -2
- {wappa-0.1.9 → wappa-0.1.10}/wappa/webhooks/whatsapp/validators.py +3 -3
- wappa-0.1.9/README.md +0 -10
- wappa-0.1.9/wappa/cli/examples/json_cache_example/app/__init__.py +0 -1
- wappa-0.1.9/wappa/cli/examples/json_cache_example/app/models/__init__.py +0 -1
- {wappa-0.1.9 → wappa-0.1.10}/.gitignore +0 -0
- {wappa-0.1.9 → wappa-0.1.10}/.python-version +0 -0
- {wappa-0.1.9 → wappa-0.1.10}/LICENSE +0 -0
- {wappa-0.1.9 → wappa-0.1.10}/wappa/api/__init__.py +0 -0
- {wappa-0.1.9 → wappa-0.1.10}/wappa/api/controllers/__init__.py +0 -0
- {wappa-0.1.9 → wappa-0.1.10}/wappa/api/dependencies/whatsapp_dependencies.py +0 -0
- {wappa-0.1.9 → wappa-0.1.10}/wappa/api/dependencies/whatsapp_media_dependencies.py +0 -0
- {wappa-0.1.9 → wappa-0.1.10}/wappa/api/middleware/__init__.py +0 -0
- {wappa-0.1.9 → wappa-0.1.10}/wappa/api/middleware/request_logging.py +0 -0
- {wappa-0.1.9 → wappa-0.1.10}/wappa/api/routes/__init__.py +0 -0
- {wappa-0.1.9 → wappa-0.1.10}/wappa/api/routes/health.py +0 -0
- {wappa-0.1.9 → wappa-0.1.10}/wappa/api/routes/whatsapp/__init__.py +0 -0
- {wappa-0.1.9 → wappa-0.1.10}/wappa/api/routes/whatsapp/whatsapp_interactive.py +0 -0
- {wappa-0.1.9 → wappa-0.1.10}/wappa/api/routes/whatsapp/whatsapp_media.py +0 -0
- {wappa-0.1.9 → wappa-0.1.10}/wappa/api/routes/whatsapp/whatsapp_messages.py +0 -0
- {wappa-0.1.9 → wappa-0.1.10}/wappa/api/routes/whatsapp/whatsapp_specialized.py +0 -0
- {wappa-0.1.9 → wappa-0.1.10}/wappa/api/routes/whatsapp/whatsapp_templates.py +0 -0
- {wappa-0.1.9 → wappa-0.1.10}/wappa/api/routes/whatsapp_combined.py +0 -0
- {wappa-0.1.9 → wappa-0.1.10}/wappa/cli/examples/init/.env.example +0 -0
- {wappa-0.1.9 → wappa-0.1.10}/wappa/cli/examples/init/.gitignore +0 -0
- {wappa-0.1.9 → wappa-0.1.10}/wappa/cli/examples/init/app/__init__.py +0 -0
- {wappa-0.1.9 → wappa-0.1.10}/wappa/cli/examples/json_cache_example/.env.example +0 -0
- {wappa-0.1.9 → wappa-0.1.10}/wappa/cli/examples/json_cache_example/.gitignore +0 -0
- {wappa-0.1.9 → wappa-0.1.10}/wappa/cli/examples/json_cache_example/README.md +0 -0
- {wappa-0.1.9 → wappa-0.1.10}/wappa/cli/examples/openai_transcript/.gitignore +0 -0
- {wappa-0.1.9 → wappa-0.1.10}/wappa/cli/examples/openai_transcript/README.md +0 -0
- {wappa-0.1.9 → wappa-0.1.10}/wappa/cli/examples/openai_transcript/app/__init__.py +0 -0
- {wappa-0.1.9 → wappa-0.1.10}/wappa/cli/examples/redis_cache_example/.env.example +0 -0
- {wappa-0.1.9 → wappa-0.1.10}/wappa/cli/examples/redis_cache_example/.gitignore +0 -0
- {wappa-0.1.9 → wappa-0.1.10}/wappa/cli/examples/redis_cache_example/README.md +0 -0
- {wappa-0.1.9 → wappa-0.1.10}/wappa/cli/examples/simple_echo_example/.env.example +0 -0
- {wappa-0.1.9 → wappa-0.1.10}/wappa/cli/examples/simple_echo_example/.gitignore +0 -0
- {wappa-0.1.9 → wappa-0.1.10}/wappa/cli/examples/simple_echo_example/README.md +0 -0
- {wappa-0.1.9 → wappa-0.1.10}/wappa/cli/examples/wappa_full_example/.dockerignore +0 -0
- {wappa-0.1.9 → wappa-0.1.10}/wappa/cli/examples/wappa_full_example/.env.example +0 -0
- {wappa-0.1.9 → wappa-0.1.10}/wappa/cli/examples/wappa_full_example/.gitignore +0 -0
- {wappa-0.1.9 → wappa-0.1.10}/wappa/cli/examples/wappa_full_example/Dockerfile +0 -0
- {wappa-0.1.9 → wappa-0.1.10}/wappa/cli/examples/wappa_full_example/RAILWAY_DEPLOYMENT.md +0 -0
- {wappa-0.1.9 → wappa-0.1.10}/wappa/cli/examples/wappa_full_example/README.md +0 -0
- {wappa-0.1.9 → wappa-0.1.10}/wappa/cli/examples/wappa_full_example/app/media/README.md +0 -0
- {wappa-0.1.9 → wappa-0.1.10}/wappa/cli/examples/wappa_full_example/app/media/buttons/README.md +0 -0
- {wappa-0.1.9 → wappa-0.1.10}/wappa/cli/examples/wappa_full_example/app/media/buttons/kitty.png +0 -0
- {wappa-0.1.9 → wappa-0.1.10}/wappa/cli/examples/wappa_full_example/app/media/buttons/puppy.png +0 -0
- {wappa-0.1.9 → wappa-0.1.10}/wappa/cli/examples/wappa_full_example/app/media/list/README.md +0 -0
- {wappa-0.1.9 → wappa-0.1.10}/wappa/cli/examples/wappa_full_example/app/media/list/audio.mp3 +0 -0
- {wappa-0.1.9 → wappa-0.1.10}/wappa/cli/examples/wappa_full_example/app/media/list/document.pdf +0 -0
- {wappa-0.1.9 → wappa-0.1.10}/wappa/cli/examples/wappa_full_example/app/media/list/image.png +0 -0
- {wappa-0.1.9 → wappa-0.1.10}/wappa/cli/examples/wappa_full_example/app/media/list/video.mp4 +0 -0
- {wappa-0.1.9 → wappa-0.1.10}/wappa/cli/examples/wappa_full_example/docker-compose.yml +0 -0
- {wappa-0.1.9 → wappa-0.1.10}/wappa/cli/examples/wappa_full_example/nginx.conf +0 -0
- {wappa-0.1.9 → wappa-0.1.10}/wappa/cli/examples/wappa_full_example/railway.toml +0 -0
- {wappa-0.1.9 → wappa-0.1.10}/wappa/cli/templates/__init__.py.template +0 -0
- {wappa-0.1.9 → wappa-0.1.10}/wappa/cli/templates/env.template +0 -0
- {wappa-0.1.9 → wappa-0.1.10}/wappa/cli/templates/gitignore.template +0 -0
- {wappa-0.1.9 → wappa-0.1.10}/wappa/cli/templates/main.py.template +0 -0
- {wappa-0.1.9 → wappa-0.1.10}/wappa/cli/templates/master_event.py.template +0 -0
- {wappa-0.1.9 → wappa-0.1.10}/wappa/core/config/__init__.py +0 -0
- {wappa-0.1.9 → wappa-0.1.10}/wappa/core/events/__init__.py +0 -0
- {wappa-0.1.9 → wappa-0.1.10}/wappa/core/events/event_dispatcher.py +0 -0
- {wappa-0.1.9 → wappa-0.1.10}/wappa/core/events/event_handler.py +0 -0
- {wappa-0.1.9 → wappa-0.1.10}/wappa/core/events/webhook_factory.py +0 -0
- {wappa-0.1.9 → wappa-0.1.10}/wappa/core/factory/__init__.py +0 -0
- {wappa-0.1.9 → wappa-0.1.10}/wappa/core/factory/plugin.py +0 -0
- {wappa-0.1.9 → wappa-0.1.10}/wappa/core/logging/__init__.py +0 -0
- {wappa-0.1.9 → wappa-0.1.10}/wappa/core/logging/context.py +0 -0
- {wappa-0.1.9 → wappa-0.1.10}/wappa/core/logging/logger.py +0 -0
- {wappa-0.1.9 → wappa-0.1.10}/wappa/core/plugins/__init__.py +0 -0
- {wappa-0.1.9 → wappa-0.1.10}/wappa/core/plugins/auth_plugin.py +0 -0
- {wappa-0.1.9 → wappa-0.1.10}/wappa/core/plugins/cors_plugin.py +0 -0
- {wappa-0.1.9 → wappa-0.1.10}/wappa/core/plugins/custom_middleware_plugin.py +0 -0
- {wappa-0.1.9 → wappa-0.1.10}/wappa/core/plugins/database_plugin.py +0 -0
- {wappa-0.1.9 → wappa-0.1.10}/wappa/core/plugins/rate_limit_plugin.py +0 -0
- {wappa-0.1.9 → wappa-0.1.10}/wappa/core/plugins/webhook_plugin.py +0 -0
- {wappa-0.1.9 → wappa-0.1.10}/wappa/database/adapter.py +0 -0
- {wappa-0.1.9 → wappa-0.1.10}/wappa/database/adapters/__init__.py +0 -0
- {wappa-0.1.9 → wappa-0.1.10}/wappa/database/adapters/mysql_adapter.py +0 -0
- {wappa-0.1.9 → wappa-0.1.10}/wappa/database/adapters/postgresql_adapter.py +0 -0
- {wappa-0.1.9 → wappa-0.1.10}/wappa/database/adapters/sqlite_adapter.py +0 -0
- {wappa-0.1.9 → wappa-0.1.10}/wappa/domain/__init__.py +0 -0
- {wappa-0.1.9 → wappa-0.1.10}/wappa/domain/builders/__init__.py +0 -0
- {wappa-0.1.9 → wappa-0.1.10}/wappa/domain/builders/message_builder.py +0 -0
- {wappa-0.1.9 → wappa-0.1.10}/wappa/domain/entities/__init__.py +0 -0
- {wappa-0.1.9 → wappa-0.1.10}/wappa/domain/factories/__init__.py +0 -0
- {wappa-0.1.9 → wappa-0.1.10}/wappa/domain/interfaces/__init__.py +0 -0
- {wappa-0.1.9 → wappa-0.1.10}/wappa/domain/interfaces/base_repository.py +0 -0
- {wappa-0.1.9 → wappa-0.1.10}/wappa/domain/interfaces/cache_factory.py +0 -0
- {wappa-0.1.9 → wappa-0.1.10}/wappa/domain/interfaces/expiry_repository.py +0 -0
- {wappa-0.1.9 → wappa-0.1.10}/wappa/domain/interfaces/messaging_interface.py +0 -0
- {wappa-0.1.9 → wappa-0.1.10}/wappa/domain/interfaces/pubsub_repository.py +0 -0
- {wappa-0.1.9 → wappa-0.1.10}/wappa/domain/interfaces/repository_factory.py +0 -0
- {wappa-0.1.9 → wappa-0.1.10}/wappa/domain/interfaces/shared_state_repository.py +0 -0
- {wappa-0.1.9 → wappa-0.1.10}/wappa/domain/interfaces/state_repository.py +0 -0
- {wappa-0.1.9 → wappa-0.1.10}/wappa/domain/interfaces/tables_repository.py +0 -0
- {wappa-0.1.9 → wappa-0.1.10}/wappa/domain/interfaces/user_repository.py +0 -0
- {wappa-0.1.9 → wappa-0.1.10}/wappa/domain/models/platforms/__init__.py +0 -0
- {wappa-0.1.9 → wappa-0.1.10}/wappa/domain/services/__init__.py +0 -0
- {wappa-0.1.9 → wappa-0.1.10}/wappa/domain/services/tenant_credentials_service.py +0 -0
- {wappa-0.1.9 → wappa-0.1.10}/wappa/messaging/whatsapp/__init__.py +0 -0
- {wappa-0.1.9 → wappa-0.1.10}/wappa/messaging/whatsapp/client/__init__.py +0 -0
- {wappa-0.1.9 → wappa-0.1.10}/wappa/messaging/whatsapp/client/whatsapp_client.py +0 -0
- {wappa-0.1.9 → wappa-0.1.10}/wappa/messaging/whatsapp/handlers/__init__.py +0 -0
- {wappa-0.1.9 → wappa-0.1.10}/wappa/messaging/whatsapp/handlers/whatsapp_interactive_handler.py +0 -0
- {wappa-0.1.9 → wappa-0.1.10}/wappa/messaging/whatsapp/handlers/whatsapp_specialized_handler.py +0 -0
- {wappa-0.1.9 → wappa-0.1.10}/wappa/messaging/whatsapp/handlers/whatsapp_template_handler.py +0 -0
- {wappa-0.1.9 → wappa-0.1.10}/wappa/messaging/whatsapp/messenger/__init__.py +0 -0
- {wappa-0.1.9 → wappa-0.1.10}/wappa/messaging/whatsapp/messenger/whatsapp_messenger.py +0 -0
- {wappa-0.1.9 → wappa-0.1.10}/wappa/messaging/whatsapp/models/__init__.py +0 -0
- {wappa-0.1.9 → wappa-0.1.10}/wappa/messaging/whatsapp/models/basic_models.py +0 -0
- {wappa-0.1.9 → wappa-0.1.10}/wappa/messaging/whatsapp/models/interactive_models.py +0 -0
- {wappa-0.1.9 → wappa-0.1.10}/wappa/messaging/whatsapp/models/media_models.py +0 -0
- {wappa-0.1.9 → wappa-0.1.10}/wappa/messaging/whatsapp/models/specialized_models.py +0 -0
- {wappa-0.1.9 → wappa-0.1.10}/wappa/messaging/whatsapp/models/template_models.py +0 -0
- {wappa-0.1.9 → wappa-0.1.10}/wappa/persistence/redis/README.md +0 -0
- {wappa-0.1.9 → wappa-0.1.10}/wappa/persistence/redis/__init__.py +0 -0
- {wappa-0.1.9 → wappa-0.1.10}/wappa/persistence/redis/redis_cache_factory.py +0 -0
- {wappa-0.1.9 → wappa-0.1.10}/wappa/persistence/redis/redis_handler/__init__.py +0 -0
- {wappa-0.1.9 → wappa-0.1.10}/wappa/persistence/redis/redis_handler/state_handler.py +0 -0
- {wappa-0.1.9 → wappa-0.1.10}/wappa/persistence/redis/redis_handler/table.py +0 -0
- {wappa-0.1.9 → wappa-0.1.10}/wappa/persistence/redis/redis_handler/user.py +0 -0
- {wappa-0.1.9 → wappa-0.1.10}/wappa/persistence/redis/redis_handler/utils/__init__.py +0 -0
- {wappa-0.1.9 → wappa-0.1.10}/wappa/persistence/redis/redis_handler/utils/key_factory.py +0 -0
- {wappa-0.1.9 → wappa-0.1.10}/wappa/persistence/redis/redis_handler/utils/serde.py +0 -0
- {wappa-0.1.9 → wappa-0.1.10}/wappa/persistence/redis/redis_handler/utils/tenant_cache.py +0 -0
- {wappa-0.1.9 → wappa-0.1.10}/wappa/processors/__init__.py +0 -0
- {wappa-0.1.9 → wappa-0.1.10}/wappa/processors/base_processor.py +0 -0
- {wappa-0.1.9 → wappa-0.1.10}/wappa/processors/whatsapp_processor.py +0 -0
- {wappa-0.1.9 → wappa-0.1.10}/wappa/schemas/__init__.py +0 -0
- {wappa-0.1.9 → wappa-0.1.10}/wappa/schemas/core/__init__.py +0 -0
- {wappa-0.1.9 → wappa-0.1.10}/wappa/schemas/core/base_message.py +0 -0
- {wappa-0.1.9 → wappa-0.1.10}/wappa/schemas/core/base_status.py +0 -0
- {wappa-0.1.9 → wappa-0.1.10}/wappa/schemas/core/base_webhook.py +0 -0
- {wappa-0.1.9 → wappa-0.1.10}/wappa/schemas/core/types.py +0 -0
- {wappa-0.1.9 → wappa-0.1.10}/wappa/schemas/core/webhook_interfaces/__init__.py +0 -0
- {wappa-0.1.9 → wappa-0.1.10}/wappa/schemas/core/webhook_interfaces/base_components.py +0 -0
- {wappa-0.1.9 → wappa-0.1.10}/wappa/schemas/core/webhook_interfaces/universal_webhooks.py +0 -0
- {wappa-0.1.9 → wappa-0.1.10}/wappa/schemas/whatsapp/__init__.py +0 -0
- {wappa-0.1.9 → wappa-0.1.10}/wappa/schemas/whatsapp/base_models.py +0 -0
- {wappa-0.1.9 → wappa-0.1.10}/wappa/schemas/whatsapp/message_types/__init__.py +0 -0
- {wappa-0.1.9 → wappa-0.1.10}/wappa/schemas/whatsapp/message_types/audio.py +0 -0
- {wappa-0.1.9 → wappa-0.1.10}/wappa/schemas/whatsapp/message_types/button.py +0 -0
- {wappa-0.1.9 → wappa-0.1.10}/wappa/schemas/whatsapp/message_types/contact.py +0 -0
- {wappa-0.1.9 → wappa-0.1.10}/wappa/schemas/whatsapp/message_types/document.py +0 -0
- {wappa-0.1.9 → wappa-0.1.10}/wappa/schemas/whatsapp/message_types/image.py +0 -0
- {wappa-0.1.9 → wappa-0.1.10}/wappa/schemas/whatsapp/message_types/interactive.py +0 -0
- {wappa-0.1.9 → wappa-0.1.10}/wappa/schemas/whatsapp/message_types/location.py +0 -0
- {wappa-0.1.9 → wappa-0.1.10}/wappa/schemas/whatsapp/message_types/order.py +0 -0
- {wappa-0.1.9 → wappa-0.1.10}/wappa/schemas/whatsapp/message_types/reaction.py +0 -0
- {wappa-0.1.9 → wappa-0.1.10}/wappa/schemas/whatsapp/message_types/sticker.py +0 -0
- {wappa-0.1.9 → wappa-0.1.10}/wappa/schemas/whatsapp/message_types/system.py +0 -0
- {wappa-0.1.9 → wappa-0.1.10}/wappa/schemas/whatsapp/message_types/text.py +0 -0
- {wappa-0.1.9 → wappa-0.1.10}/wappa/schemas/whatsapp/message_types/unsupported.py +0 -0
- {wappa-0.1.9 → wappa-0.1.10}/wappa/schemas/whatsapp/message_types/video.py +0 -0
- {wappa-0.1.9 → wappa-0.1.10}/wappa/schemas/whatsapp/status_models.py +0 -0
- {wappa-0.1.9 → wappa-0.1.10}/wappa/schemas/whatsapp/webhook_container.py +0 -0
- {wappa-0.1.9 → wappa-0.1.10}/wappa/webhooks/core/__init__.py +0 -0
- {wappa-0.1.9 → wappa-0.1.10}/wappa/webhooks/core/base_message.py +0 -0
- {wappa-0.1.9 → wappa-0.1.10}/wappa/webhooks/core/base_status.py +0 -0
- {wappa-0.1.9 → wappa-0.1.10}/wappa/webhooks/core/base_webhook.py +0 -0
- {wappa-0.1.9 → wappa-0.1.10}/wappa/webhooks/core/types.py +0 -0
- {wappa-0.1.9 → wappa-0.1.10}/wappa/webhooks/core/webhook_interfaces/__init__.py +0 -0
- {wappa-0.1.9 → wappa-0.1.10}/wappa/webhooks/core/webhook_interfaces/base_components.py +0 -0
- {wappa-0.1.9 → wappa-0.1.10}/wappa/webhooks/core/webhook_interfaces/universal_webhooks.py +0 -0
- {wappa-0.1.9 → wappa-0.1.10}/wappa/webhooks/whatsapp/base_models.py +0 -0
- {wappa-0.1.9 → wappa-0.1.10}/wappa/webhooks/whatsapp/message_types/__init__.py +0 -0
- {wappa-0.1.9 → wappa-0.1.10}/wappa/webhooks/whatsapp/message_types/button.py +0 -0
- {wappa-0.1.9 → wappa-0.1.10}/wappa/webhooks/whatsapp/message_types/contact.py +0 -0
- {wappa-0.1.9 → wappa-0.1.10}/wappa/webhooks/whatsapp/message_types/image.py +0 -0
- {wappa-0.1.9 → wappa-0.1.10}/wappa/webhooks/whatsapp/message_types/interactive.py +0 -0
- {wappa-0.1.9 → wappa-0.1.10}/wappa/webhooks/whatsapp/message_types/order.py +0 -0
- {wappa-0.1.9 → wappa-0.1.10}/wappa/webhooks/whatsapp/message_types/reaction.py +0 -0
- {wappa-0.1.9 → wappa-0.1.10}/wappa/webhooks/whatsapp/message_types/system.py +0 -0
- {wappa-0.1.9 → wappa-0.1.10}/wappa/webhooks/whatsapp/message_types/unsupported.py +0 -0
- {wappa-0.1.9 → wappa-0.1.10}/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.10
|
|
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
|
|
@@ -240,13 +240,367 @@ Requires-Dist: typer>=0.9.0
|
|
|
240
240
|
Requires-Dist: uvicorn[standard]>=0.24.0
|
|
241
241
|
Description-Content-Type: text/markdown
|
|
242
242
|
|
|
243
|
-
#
|
|
244
|
-
Open Source Framework to develop smart Workflows, Agents and full chat appllications through WhatsApp
|
|
243
|
+
# Wappa 🤖
|
|
245
244
|
|
|
246
|
-
|
|
247
|
-
1) from wapp import WhatsAppMessenger -> So then throughoutt flow in /events I can just initialize the WhatsAppMessenger and send all the messages
|
|
248
|
-
2) have a terminal like ruff or black named wappa so when the user writes uvx wappa init or uv run wappa init a terminal opens to generate a clean project
|
|
245
|
+
**Open Source Framework for WhatsApp Business Applications**
|
|
249
246
|
|
|
250
|
-
|
|
247
|
+
Build intelligent WhatsApp bots, workflows, and chat applications with clean architecture and modern Python.
|
|
251
248
|
|
|
252
|
-
|
|
249
|
+
[](https://www.python.org/downloads/)
|
|
250
|
+
[](https://opensource.org/licenses/Apache-2.0)
|
|
251
|
+
[](https://fastapi.tiangolo.com)
|
|
252
|
+
[](https://developers.facebook.com/docs/whatsapp)
|
|
253
|
+
|
|
254
|
+
---
|
|
255
|
+
|
|
256
|
+
## 🚀 What is Wappa?
|
|
257
|
+
|
|
258
|
+
Wappa is a modern Python framework that transforms WhatsApp Business API into a powerful platform for building:
|
|
259
|
+
|
|
260
|
+
- **🤖 Smart Chatbots** - AI-powered conversational experiences
|
|
261
|
+
- **📋 Workflows** - Multi-step business processes
|
|
262
|
+
- **🎯 Agents** - Intelligent customer service automation
|
|
263
|
+
- **💬 Chat Applications** - Full-featured messaging platforms
|
|
264
|
+
|
|
265
|
+
**Built for developers who want clean code, not webhook complexity.**
|
|
266
|
+
|
|
267
|
+
## ✨ Key Features
|
|
268
|
+
|
|
269
|
+
### 🎯 **Simple & Clean**
|
|
270
|
+
```python
|
|
271
|
+
from wappa import Wappa, WappaEventHandler
|
|
272
|
+
|
|
273
|
+
class MyBot(WappaEventHandler):
|
|
274
|
+
async def process_message(self, webhook):
|
|
275
|
+
await self.messenger.send_text("Hello!", webhook.user.user_id)
|
|
276
|
+
|
|
277
|
+
app = Wappa()
|
|
278
|
+
app.set_event_handler(MyBot())
|
|
279
|
+
app.run()
|
|
280
|
+
```
|
|
281
|
+
|
|
282
|
+
### 🏗️ **Production-Ready Architecture**
|
|
283
|
+
- **Clean Architecture** - Domain-driven design with dependency injection
|
|
284
|
+
- **Type-Safe** - Full Pydantic models for all WhatsApp data structures
|
|
285
|
+
- **Multi-Tenant** - Built for scaling across multiple business numbers
|
|
286
|
+
- **Plugin System** - Extensible with Redis, CORS, rate limiting, and custom plugins
|
|
287
|
+
|
|
288
|
+
### 📱 **Complete WhatsApp Support**
|
|
289
|
+
- **All Message Types** - Text, media, interactive buttons, lists, templates
|
|
290
|
+
- **Rich Interactions** - Buttons, lists, call-to-action messages
|
|
291
|
+
- **Media Handling** - Images, videos, audio, documents with automatic upload/download
|
|
292
|
+
- **Templates** - Pre-approved business message templates
|
|
293
|
+
|
|
294
|
+
### 🛠️ **Developer Experience**
|
|
295
|
+
```bash
|
|
296
|
+
# Initialize new project
|
|
297
|
+
wappa init my-bot
|
|
298
|
+
|
|
299
|
+
# Start development server with auto-reload
|
|
300
|
+
wappa dev app/main.py
|
|
301
|
+
|
|
302
|
+
# Browse interactive examples
|
|
303
|
+
wappa examples
|
|
304
|
+
```
|
|
305
|
+
|
|
306
|
+
### 💾 **Flexible State Management**
|
|
307
|
+
```python
|
|
308
|
+
# Memory, JSON file, or Redis caching
|
|
309
|
+
app = Wappa(cache="redis") # or "memory" or "json"
|
|
310
|
+
|
|
311
|
+
# Automatic state persistence
|
|
312
|
+
await self.state_cache.set("conversation", {"step": "greeting"})
|
|
313
|
+
```
|
|
314
|
+
|
|
315
|
+
## 📦 Installation
|
|
316
|
+
|
|
317
|
+
### Using uv (Recommended)
|
|
318
|
+
```bash
|
|
319
|
+
# Create new project
|
|
320
|
+
uv init my-wappa-project
|
|
321
|
+
cd my-wappa-project
|
|
322
|
+
|
|
323
|
+
# Add Wappa
|
|
324
|
+
uv add wappa
|
|
325
|
+
|
|
326
|
+
# Initialize project structure
|
|
327
|
+
wappa init .
|
|
328
|
+
```
|
|
329
|
+
|
|
330
|
+
### Using pip
|
|
331
|
+
```bash
|
|
332
|
+
pip install wappa
|
|
333
|
+
|
|
334
|
+
# Initialize new project
|
|
335
|
+
wappa init my-wappa-project
|
|
336
|
+
cd my-wappa-project
|
|
337
|
+
```
|
|
338
|
+
|
|
339
|
+
### Using Poetry
|
|
340
|
+
```bash
|
|
341
|
+
poetry new my-wappa-project
|
|
342
|
+
cd my-wappa-project
|
|
343
|
+
poetry add wappa
|
|
344
|
+
|
|
345
|
+
# Initialize project structure
|
|
346
|
+
wappa init .
|
|
347
|
+
```
|
|
348
|
+
|
|
349
|
+
## 🏃♂️ Quick Start
|
|
350
|
+
|
|
351
|
+
### 1. Get WhatsApp Business API Credentials
|
|
352
|
+
|
|
353
|
+
1. Visit [Meta for Developers](https://developers.facebook.com)
|
|
354
|
+
2. Create a WhatsApp Business App
|
|
355
|
+
3. Get your credentials:
|
|
356
|
+
- **Access Token**
|
|
357
|
+
- **Phone Number ID**
|
|
358
|
+
- **Business Account ID**
|
|
359
|
+
|
|
360
|
+
### 2. Create Your Bot
|
|
361
|
+
|
|
362
|
+
```bash
|
|
363
|
+
# Initialize project
|
|
364
|
+
wappa init my-bot
|
|
365
|
+
cd my-bot
|
|
366
|
+
|
|
367
|
+
# Configure environment
|
|
368
|
+
cp .env.example .env
|
|
369
|
+
# Edit .env with your WhatsApp credentials
|
|
370
|
+
```
|
|
371
|
+
|
|
372
|
+
### 3. Run Development Server
|
|
373
|
+
|
|
374
|
+
```bash
|
|
375
|
+
# Start with auto-reload
|
|
376
|
+
wappa dev app/main.py
|
|
377
|
+
|
|
378
|
+
# Or manually
|
|
379
|
+
uv run python -m app.main
|
|
380
|
+
```
|
|
381
|
+
|
|
382
|
+
### 4. Test Your Bot
|
|
383
|
+
|
|
384
|
+
Send a message to your WhatsApp Business number and watch it echo back!
|
|
385
|
+
|
|
386
|
+
## 🎛️ Architecture Overview
|
|
387
|
+
|
|
388
|
+
```mermaid
|
|
389
|
+
graph TD
|
|
390
|
+
A[👤 WhatsApp User] -->|Message| B[📡 Webhook Endpoint]
|
|
391
|
+
B --> C[🔄 Event Dispatcher]
|
|
392
|
+
C --> D[⚡ Your Event Handler]
|
|
393
|
+
D --> E[💬 Messenger Interface]
|
|
394
|
+
E --> F[📱 WhatsApp API]
|
|
395
|
+
|
|
396
|
+
D --> G[💾 State Management]
|
|
397
|
+
D --> H[🧠 Business Logic]
|
|
398
|
+
G --> I[🗄️ Redis/Memory/JSON Cache]
|
|
399
|
+
H --> J[🔗 External Services]
|
|
400
|
+
|
|
401
|
+
style D fill:#333481,color:#fff,stroke:#333481,stroke-width:3px
|
|
402
|
+
style E fill:#4A90E2,color:#fff,stroke:#4A90E2,stroke-width:3px
|
|
403
|
+
style G fill:#333481,color:#fff,stroke:#333481,stroke-width:3px
|
|
404
|
+
style A fill:#25D366,color:#fff,stroke:#25D366,stroke-width:3px
|
|
405
|
+
style F fill:#25D366,color:#fff,stroke:#25D366,stroke-width:3px
|
|
406
|
+
```
|
|
407
|
+
|
|
408
|
+
- **Event-Driven**: Webhook → Event Handler → Response
|
|
409
|
+
- **Type-Safe**: Full Pydantic models for all WhatsApp data structures
|
|
410
|
+
- **FastAPI Core**: Built on modern async Python with automatic OpenAPI docs
|
|
411
|
+
- **Production Ready**: Docker support, Redis caching, structured logging
|
|
412
|
+
|
|
413
|
+
## 📚 Documentation
|
|
414
|
+
|
|
415
|
+
**📖 [Complete Documentation](https://wappa.mimeia.com/docs)**
|
|
416
|
+
|
|
417
|
+
### Quick Links
|
|
418
|
+
|
|
419
|
+
- **🚀 [Quick Start](https://wappa.mimeia.com/docs/getting-started)** - Get running in 5 minutes
|
|
420
|
+
- **🏗️ [Architecture Guide](https://wappa.mimeia.com/docs/concepts/architecture)** - Understanding the framework
|
|
421
|
+
- **📡 [API Reference](https://wappa.mimeia.com/docs/api/messaging)** - Complete messaging API
|
|
422
|
+
- **💾 [State Management](https://wappa.mimeia.com/docs/concepts/state-management)** - Caching and persistence
|
|
423
|
+
- **🚀 [Deploy to Railway](https://wappa.mimeia.com/docs/deployment/railway)** - Production deployment
|
|
424
|
+
- **🛠️ [WhatsApp Setup](https://wappa.mimeia.com/docs/setup/whatsapp-setup)** - Configure WhatsApp Business API
|
|
425
|
+
|
|
426
|
+
### Example Projects
|
|
427
|
+
|
|
428
|
+
Explore 6 complete example applications:
|
|
429
|
+
|
|
430
|
+
```bash
|
|
431
|
+
# Browse examples interactively
|
|
432
|
+
wappa examples
|
|
433
|
+
|
|
434
|
+
# Copy specific example
|
|
435
|
+
wappa examples redis-cache-demo
|
|
436
|
+
```
|
|
437
|
+
|
|
438
|
+
- **Simple Echo** - Basic message echoing
|
|
439
|
+
- **JSON Cache Demo** - File-based state persistence
|
|
440
|
+
- **Redis Cache Demo** - High-performance caching
|
|
441
|
+
- **OpenAI Transcription** - Voice message processing
|
|
442
|
+
- **Full-Featured Bot** - Complete production example
|
|
443
|
+
- **Basic Project** - Minimal setup template
|
|
444
|
+
|
|
445
|
+
## 🛠️ Advanced Usage
|
|
446
|
+
|
|
447
|
+
### Builder Pattern for Complex Apps
|
|
448
|
+
|
|
449
|
+
```python
|
|
450
|
+
from wappa import WappaBuilder
|
|
451
|
+
|
|
452
|
+
app = await (WappaBuilder()
|
|
453
|
+
.with_whatsapp(
|
|
454
|
+
token="your_token",
|
|
455
|
+
phone_id="your_phone_id",
|
|
456
|
+
business_id="your_business_id"
|
|
457
|
+
)
|
|
458
|
+
.with_redis_cache("redis://localhost:6379")
|
|
459
|
+
.with_cors_enabled()
|
|
460
|
+
.with_rate_limiting(requests_per_minute=100)
|
|
461
|
+
.build())
|
|
462
|
+
|
|
463
|
+
app.set_event_handler(MyAdvancedHandler())
|
|
464
|
+
app.run()
|
|
465
|
+
```
|
|
466
|
+
|
|
467
|
+
### Plugin System
|
|
468
|
+
|
|
469
|
+
```python
|
|
470
|
+
from wappa.plugins import DatabasePlugin, CorsPlugin
|
|
471
|
+
|
|
472
|
+
app = Wappa(cache="redis")
|
|
473
|
+
app.add_plugin(DatabasePlugin("postgresql://..."))
|
|
474
|
+
app.add_plugin(CorsPlugin(allow_origins=["*"]))
|
|
475
|
+
app.set_event_handler(MyHandler())
|
|
476
|
+
app.run()
|
|
477
|
+
```
|
|
478
|
+
|
|
479
|
+
### CLI Commands
|
|
480
|
+
|
|
481
|
+
```bash
|
|
482
|
+
# Project management
|
|
483
|
+
wappa init [directory] # Initialize new project
|
|
484
|
+
wappa examples [target] # Browse/copy examples
|
|
485
|
+
|
|
486
|
+
# Development
|
|
487
|
+
wappa dev app/main.py # Development server with auto-reload
|
|
488
|
+
wappa prod app/main.py # Production server
|
|
489
|
+
|
|
490
|
+
# Help
|
|
491
|
+
wappa --help # Show all commands
|
|
492
|
+
```
|
|
493
|
+
|
|
494
|
+
## 🚀 Deployment
|
|
495
|
+
|
|
496
|
+
### Railway (Recommended)
|
|
497
|
+
|
|
498
|
+
```bash
|
|
499
|
+
# Install Railway CLI
|
|
500
|
+
npm install -g @railway/cli
|
|
501
|
+
|
|
502
|
+
# Login and deploy
|
|
503
|
+
railway login
|
|
504
|
+
railway init
|
|
505
|
+
railway add redis
|
|
506
|
+
railway up
|
|
507
|
+
|
|
508
|
+
# Set environment variables
|
|
509
|
+
railway variables set WP_ACCESS_TOKEN=your_token
|
|
510
|
+
railway variables set WP_PHONE_ID=your_phone_id
|
|
511
|
+
railway variables set WP_BID=your_business_id
|
|
512
|
+
```
|
|
513
|
+
|
|
514
|
+
See [complete Railway deployment guide](https://wappa.mimeia.com/docs/deployment/railway).
|
|
515
|
+
|
|
516
|
+
### Docker
|
|
517
|
+
|
|
518
|
+
```dockerfile
|
|
519
|
+
FROM python:3.12-slim
|
|
520
|
+
|
|
521
|
+
WORKDIR /app
|
|
522
|
+
COPY . .
|
|
523
|
+
|
|
524
|
+
RUN pip install uv
|
|
525
|
+
RUN uv sync --frozen
|
|
526
|
+
|
|
527
|
+
EXPOSE 8000
|
|
528
|
+
CMD ["uv", "run", "python", "-m", "app.main"]
|
|
529
|
+
```
|
|
530
|
+
|
|
531
|
+
## 🧪 Development
|
|
532
|
+
|
|
533
|
+
### Setup Development Environment
|
|
534
|
+
|
|
535
|
+
```bash
|
|
536
|
+
# Clone repository
|
|
537
|
+
git clone https://github.com/sashanclrp/wappa.git
|
|
538
|
+
cd wappa
|
|
539
|
+
|
|
540
|
+
# Install dependencies
|
|
541
|
+
uv sync --group dev
|
|
542
|
+
|
|
543
|
+
# Run tests
|
|
544
|
+
uv run pytest
|
|
545
|
+
|
|
546
|
+
# Code formatting
|
|
547
|
+
uv run ruff check .
|
|
548
|
+
uv run ruff format .
|
|
549
|
+
```
|
|
550
|
+
|
|
551
|
+
### Project Structure
|
|
552
|
+
|
|
553
|
+
```
|
|
554
|
+
wappa/
|
|
555
|
+
├── wappa/ # Core framework
|
|
556
|
+
│ ├── core/ # Application core & plugins
|
|
557
|
+
│ ├── messaging/ # WhatsApp messaging implementation
|
|
558
|
+
│ ├── persistence/ # Cache backends (Memory/JSON/Redis)
|
|
559
|
+
│ ├── cli/ # CLI tools & project templates
|
|
560
|
+
│ └── api/ # FastAPI routes & dependencies
|
|
561
|
+
├── examples/ # Example applications
|
|
562
|
+
├── docs/ # Documentation source
|
|
563
|
+
└── tests/ # Test suite
|
|
564
|
+
```
|
|
565
|
+
|
|
566
|
+
## 🤝 Community & Support
|
|
567
|
+
|
|
568
|
+
### 💬 **Join the Community**
|
|
569
|
+
- **💭 [Discord Community](https://discord.gg/wappa)** - Get help, share projects, and connect with other developers
|
|
570
|
+
- **🐛 [GitHub Issues](https://github.com/sashanclrp/wappa/issues)** - Bug reports and feature requests
|
|
571
|
+
- **📖 [GitHub Discussions](https://github.com/sashanclrp/wappa/discussions)** - Questions and community discussions
|
|
572
|
+
|
|
573
|
+
### 📞 **Get Support**
|
|
574
|
+
- **📚 [Documentation](https://wappa.mimeia.com/docs)** - Comprehensive guides and API reference
|
|
575
|
+
- **💡 [Examples](https://wappa.mimeia.com/docs/resources/examples)** - 6 complete working examples
|
|
576
|
+
- **🔧 [Configuration Guide](https://wappa.mimeia.com/docs/setup/whatsapp-setup)** - WhatsApp Business API setup
|
|
577
|
+
|
|
578
|
+
### 🤝 **Contributing**
|
|
579
|
+
We welcome contributions! Please see our [Contributing Guide](CONTRIBUTING.md) for details.
|
|
580
|
+
|
|
581
|
+
- **🐛 Found a bug?** Open an [issue](https://github.com/sashanclrp/wappa/issues)
|
|
582
|
+
- **💡 Have an idea?** Start a [discussion](https://github.com/sashanclrp/wappa/discussions)
|
|
583
|
+
- **🔧 Want to contribute?** Check out [good first issues](https://github.com/sashanclrp/wappa/labels/good%20first%20issue)
|
|
584
|
+
|
|
585
|
+
## 📋 Requirements
|
|
586
|
+
|
|
587
|
+
- **Python 3.12+** - Modern Python with latest type hints
|
|
588
|
+
- **WhatsApp Business API** - Meta for Developers account
|
|
589
|
+
- **Redis** (optional) - For production caching and state management
|
|
590
|
+
|
|
591
|
+
## 📄 License
|
|
592
|
+
|
|
593
|
+
This project is licensed under the Apache License 2.0 - see the [LICENSE](LICENSE) file for details.
|
|
594
|
+
|
|
595
|
+
## 🙏 Acknowledgments
|
|
596
|
+
|
|
597
|
+
- **Meta** - For the WhatsApp Business API
|
|
598
|
+
- **FastAPI** - For the excellent async Python framework
|
|
599
|
+
- **Redis** - For high-performance caching
|
|
600
|
+
- **Open Source Community** - For inspiration and contributions
|
|
601
|
+
|
|
602
|
+
---
|
|
603
|
+
|
|
604
|
+
**Built with ❤️ by [Mimeia](https://mimeia.com) • Open Source • Apache 2.0 License**
|
|
605
|
+
|
|
606
|
+
*Transform your business communication with WhatsApp automation.*
|