wappa 0.1.8__py3-none-any.whl → 0.1.9__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 wappa might be problematic. Click here for more details.

Files changed (78) hide show
  1. wappa/cli/examples/init/.env.example +33 -0
  2. wappa/cli/examples/init/app/__init__.py +0 -0
  3. wappa/cli/examples/init/app/main.py +8 -0
  4. wappa/cli/examples/init/app/master_event.py +8 -0
  5. wappa/cli/examples/json_cache_example/.env.example +33 -0
  6. wappa/cli/examples/json_cache_example/app/__init__.py +1 -0
  7. wappa/cli/examples/json_cache_example/app/main.py +235 -0
  8. wappa/cli/examples/json_cache_example/app/master_event.py +419 -0
  9. wappa/cli/examples/json_cache_example/app/models/__init__.py +1 -0
  10. wappa/cli/examples/json_cache_example/app/models/json_demo_models.py +275 -0
  11. wappa/cli/examples/json_cache_example/app/scores/__init__.py +35 -0
  12. wappa/cli/examples/json_cache_example/app/scores/score_base.py +186 -0
  13. wappa/cli/examples/json_cache_example/app/scores/score_cache_statistics.py +248 -0
  14. wappa/cli/examples/json_cache_example/app/scores/score_message_history.py +190 -0
  15. wappa/cli/examples/json_cache_example/app/scores/score_state_commands.py +260 -0
  16. wappa/cli/examples/json_cache_example/app/scores/score_user_management.py +223 -0
  17. wappa/cli/examples/json_cache_example/app/utils/__init__.py +26 -0
  18. wappa/cli/examples/json_cache_example/app/utils/cache_utils.py +176 -0
  19. wappa/cli/examples/json_cache_example/app/utils/message_utils.py +246 -0
  20. wappa/cli/examples/openai_transcript/.gitignore +63 -4
  21. wappa/cli/examples/openai_transcript/app/__init__.py +0 -0
  22. wappa/cli/examples/openai_transcript/app/main.py +8 -0
  23. wappa/cli/examples/openai_transcript/app/master_event.py +53 -0
  24. wappa/cli/examples/openai_transcript/app/openai_utils/__init__.py +3 -0
  25. wappa/cli/examples/openai_transcript/app/openai_utils/audio_processing.py +76 -0
  26. wappa/cli/examples/redis_cache_example/.env.example +33 -0
  27. wappa/cli/examples/redis_cache_example/app/__init__.py +6 -0
  28. wappa/cli/examples/redis_cache_example/app/main.py +234 -0
  29. wappa/cli/examples/redis_cache_example/app/master_event.py +419 -0
  30. wappa/cli/examples/redis_cache_example/app/models/redis_demo_models.py +275 -0
  31. wappa/cli/examples/redis_cache_example/app/scores/__init__.py +35 -0
  32. wappa/cli/examples/redis_cache_example/app/scores/score_base.py +186 -0
  33. wappa/cli/examples/redis_cache_example/app/scores/score_cache_statistics.py +248 -0
  34. wappa/cli/examples/redis_cache_example/app/scores/score_message_history.py +190 -0
  35. wappa/cli/examples/redis_cache_example/app/scores/score_state_commands.py +260 -0
  36. wappa/cli/examples/redis_cache_example/app/scores/score_user_management.py +223 -0
  37. wappa/cli/examples/redis_cache_example/app/utils/__init__.py +26 -0
  38. wappa/cli/examples/redis_cache_example/app/utils/cache_utils.py +176 -0
  39. wappa/cli/examples/redis_cache_example/app/utils/message_utils.py +246 -0
  40. wappa/cli/examples/simple_echo_example/.env.example +33 -0
  41. wappa/cli/examples/simple_echo_example/app/__init__.py +7 -0
  42. wappa/cli/examples/simple_echo_example/app/main.py +183 -0
  43. wappa/cli/examples/simple_echo_example/app/master_event.py +209 -0
  44. wappa/cli/examples/wappa_full_example/.env.example +33 -0
  45. wappa/cli/examples/wappa_full_example/.gitignore +63 -4
  46. wappa/cli/examples/wappa_full_example/app/__init__.py +6 -0
  47. wappa/cli/examples/wappa_full_example/app/handlers/__init__.py +5 -0
  48. wappa/cli/examples/wappa_full_example/app/handlers/command_handlers.py +484 -0
  49. wappa/cli/examples/wappa_full_example/app/handlers/message_handlers.py +551 -0
  50. wappa/cli/examples/wappa_full_example/app/handlers/state_handlers.py +492 -0
  51. wappa/cli/examples/wappa_full_example/app/main.py +257 -0
  52. wappa/cli/examples/wappa_full_example/app/master_event.py +445 -0
  53. wappa/cli/examples/wappa_full_example/app/media/README.md +54 -0
  54. wappa/cli/examples/wappa_full_example/app/media/buttons/README.md +62 -0
  55. wappa/cli/examples/wappa_full_example/app/media/buttons/kitty.png +0 -0
  56. wappa/cli/examples/wappa_full_example/app/media/buttons/puppy.png +0 -0
  57. wappa/cli/examples/wappa_full_example/app/media/list/README.md +110 -0
  58. wappa/cli/examples/wappa_full_example/app/media/list/audio.mp3 +0 -0
  59. wappa/cli/examples/wappa_full_example/app/media/list/document.pdf +0 -0
  60. wappa/cli/examples/wappa_full_example/app/media/list/image.png +0 -0
  61. wappa/cli/examples/wappa_full_example/app/media/list/video.mp4 +0 -0
  62. wappa/cli/examples/wappa_full_example/app/models/__init__.py +5 -0
  63. wappa/cli/examples/wappa_full_example/app/models/state_models.py +425 -0
  64. wappa/cli/examples/wappa_full_example/app/models/user_models.py +287 -0
  65. wappa/cli/examples/wappa_full_example/app/models/webhook_metadata.py +301 -0
  66. wappa/cli/examples/wappa_full_example/app/utils/__init__.py +5 -0
  67. wappa/cli/examples/wappa_full_example/app/utils/cache_utils.py +483 -0
  68. wappa/cli/examples/wappa_full_example/app/utils/media_handler.py +473 -0
  69. wappa/cli/examples/wappa_full_example/app/utils/metadata_extractor.py +298 -0
  70. wappa/cli/main.py +8 -4
  71. {wappa-0.1.8.dist-info → wappa-0.1.9.dist-info}/METADATA +1 -1
  72. {wappa-0.1.8.dist-info → wappa-0.1.9.dist-info}/RECORD +75 -11
  73. wappa/cli/examples/init/pyproject.toml +0 -7
  74. wappa/cli/examples/simple_echo_example/.python-version +0 -1
  75. wappa/cli/examples/simple_echo_example/pyproject.toml +0 -9
  76. {wappa-0.1.8.dist-info → wappa-0.1.9.dist-info}/WHEEL +0 -0
  77. {wappa-0.1.8.dist-info → wappa-0.1.9.dist-info}/entry_points.txt +0 -0
  78. {wappa-0.1.8.dist-info → wappa-0.1.9.dist-info}/licenses/LICENSE +0 -0
@@ -0,0 +1,298 @@
1
+ """
2
+ Metadata extraction utilities for webhook processing.
3
+
4
+ This module provides functions to extract comprehensive metadata from
5
+ IncomingMessageWebhook objects based on message type.
6
+ """
7
+
8
+ import time
9
+ from typing import Optional
10
+
11
+ from wappa.webhooks import IncomingMessageWebhook
12
+
13
+ from ..models.webhook_metadata import (
14
+ ContactMessageMetadata,
15
+ InteractiveMessageMetadata,
16
+ LocationMessageMetadata,
17
+ MediaMessageMetadata,
18
+ MessageType,
19
+ TextMessageMetadata,
20
+ UnknownMessageMetadata,
21
+ WebhookMetadata,
22
+ )
23
+
24
+
25
+ class MetadataExtractor:
26
+ """Utility class for extracting metadata from webhooks."""
27
+
28
+ @staticmethod
29
+ def extract_metadata(webhook: IncomingMessageWebhook, start_time: float = None) -> WebhookMetadata:
30
+ """
31
+ Extract appropriate metadata from webhook based on message type.
32
+
33
+ Args:
34
+ webhook: IncomingMessageWebhook to extract metadata from
35
+ start_time: Optional start time for processing time calculation
36
+
37
+ Returns:
38
+ WebhookMetadata object with extracted information
39
+ """
40
+ # Calculate processing time if start_time provided
41
+ processing_time_ms = None
42
+ if start_time is not None:
43
+ processing_time_ms = int((time.time() - start_time) * 1000)
44
+
45
+ # Get message type from webhook
46
+ message_type_name = webhook.get_message_type_name().lower()
47
+
48
+ try:
49
+ # Map message type string to enum
50
+ message_type = MessageType(message_type_name)
51
+ except ValueError:
52
+ # Handle unknown message types
53
+ return UnknownMessageMetadata.from_webhook(webhook, processing_time_ms)
54
+
55
+ # Extract metadata based on message type
56
+ if message_type == MessageType.TEXT:
57
+ return TextMessageMetadata.from_webhook(webhook, processing_time_ms)
58
+
59
+ elif message_type in [MessageType.IMAGE, MessageType.VIDEO, MessageType.AUDIO,
60
+ MessageType.VOICE, MessageType.DOCUMENT, MessageType.STICKER]:
61
+ return MediaMessageMetadata.from_webhook(webhook, message_type, processing_time_ms)
62
+
63
+ elif message_type == MessageType.LOCATION:
64
+ return LocationMessageMetadata.from_webhook(webhook, processing_time_ms)
65
+
66
+ elif message_type in [MessageType.CONTACT, MessageType.CONTACTS]:
67
+ return ContactMessageMetadata.from_webhook(webhook, processing_time_ms)
68
+
69
+ elif message_type == MessageType.INTERACTIVE:
70
+ return InteractiveMessageMetadata.from_webhook(webhook, processing_time_ms)
71
+
72
+ else:
73
+ # Fallback for unsupported types
74
+ return UnknownMessageMetadata.from_webhook(webhook, processing_time_ms)
75
+
76
+ @staticmethod
77
+ def format_metadata_for_user(metadata: WebhookMetadata) -> str:
78
+ """
79
+ Format metadata for display to user.
80
+
81
+ Args:
82
+ metadata: WebhookMetadata object to format
83
+
84
+ Returns:
85
+ Formatted string for user display
86
+ """
87
+ lines = []
88
+ lines.append("📊 *Message Metadata*")
89
+ lines.append("─" * 30)
90
+
91
+ # Basic information
92
+ lines.append(f"🆔 Message ID: `{metadata.message_id[:20]}...`")
93
+ # Handle both enum and string values for message_type
94
+ message_type_str = metadata.message_type.value if hasattr(metadata.message_type, 'value') else str(metadata.message_type)
95
+ lines.append(f"📱 Message Type: `{message_type_str}`")
96
+ lines.append(f"👤 User: {metadata.user_name or metadata.user_id}")
97
+ lines.append(f"🕐 Timestamp: {metadata.timestamp.strftime('%Y-%m-%d %H:%M:%S')}")
98
+ lines.append(f"🏢 Tenant: `{metadata.tenant_id}`")
99
+ lines.append(f"🌐 Platform: `{metadata.platform}`")
100
+
101
+ # Processing metadata
102
+ if metadata.processing_time_ms:
103
+ lines.append(f"⚡ Processing Time: {metadata.processing_time_ms}ms")
104
+
105
+ if metadata.cache_hit:
106
+ lines.append("💾 Cache: Hit ✅")
107
+
108
+ # Type-specific metadata
109
+ if isinstance(metadata, TextMessageMetadata):
110
+ lines.append("")
111
+ lines.append("📝 *Text Message Details:*")
112
+ lines.append(f"📏 Length: {metadata.text_length} characters")
113
+ if metadata.has_urls:
114
+ lines.append("🔗 Contains URLs: Yes")
115
+ if metadata.has_mentions:
116
+ lines.append("👥 Contains Mentions: Yes")
117
+ if metadata.is_forwarded:
118
+ lines.append("↪️ Forwarded: Yes")
119
+
120
+ elif isinstance(metadata, MediaMessageMetadata):
121
+ lines.append("")
122
+ lines.append(f"🎬 *{metadata.media_type.title()} Media Details:*")
123
+ lines.append(f"🆔 Media ID: `{metadata.media_id[:20]}...`")
124
+ if metadata.mime_type:
125
+ lines.append(f"📄 MIME Type: `{metadata.mime_type}`")
126
+ if metadata.file_size:
127
+ lines.append(f"📦 File Size: {MetadataExtractor._format_file_size(metadata.file_size)}")
128
+ if metadata.caption:
129
+ lines.append(f"💬 Caption: {metadata.caption[:50]}{'...' if len(metadata.caption) > 50 else ''}")
130
+ if metadata.width and metadata.height:
131
+ lines.append(f"📐 Dimensions: {metadata.width}x{metadata.height}")
132
+ if metadata.duration:
133
+ lines.append(f"⏱️ Duration: {metadata.duration}s")
134
+ if metadata.filename:
135
+ lines.append(f"📎 Filename: `{metadata.filename}`")
136
+ if metadata.is_forwarded:
137
+ lines.append("↪️ Forwarded: Yes")
138
+
139
+ elif isinstance(metadata, LocationMessageMetadata):
140
+ lines.append("")
141
+ lines.append("📍 *Location Details:*")
142
+ lines.append(f"🌍 Coordinates: {metadata.latitude}, {metadata.longitude}")
143
+ if metadata.location_name:
144
+ lines.append(f"🏷️ Name: {metadata.location_name}")
145
+ if metadata.location_address:
146
+ lines.append(f"🏠 Address: {metadata.location_address}")
147
+ if metadata.is_forwarded:
148
+ lines.append("↪️ Forwarded: Yes")
149
+
150
+ elif isinstance(metadata, ContactMessageMetadata):
151
+ lines.append("")
152
+ lines.append("👥 *Contact Details:*")
153
+ lines.append(f"📇 Contact Count: {metadata.contacts_count}")
154
+ if metadata.contact_names:
155
+ lines.append(f"👤 Names: {', '.join(metadata.contact_names[:3])}{'...' if len(metadata.contact_names) > 3 else ''}")
156
+ if metadata.has_phone_numbers:
157
+ lines.append("📞 Has Phone Numbers: Yes")
158
+ if metadata.has_emails:
159
+ lines.append("✉️ Has Emails: Yes")
160
+ if metadata.is_forwarded:
161
+ lines.append("↪️ Forwarded: Yes")
162
+
163
+ elif isinstance(metadata, InteractiveMessageMetadata):
164
+ lines.append("")
165
+ lines.append("🔘 *Interactive Details:*")
166
+ lines.append(f"⚡ Type: {metadata.interaction_type}")
167
+ lines.append(f"🆔 Selection ID: `{metadata.selection_id}`")
168
+ if metadata.selection_title:
169
+ lines.append(f"🏷️ Selection: {metadata.selection_title}")
170
+ if metadata.context_message_id:
171
+ lines.append(f"💬 Context Message: `{metadata.context_message_id[:20]}...`")
172
+
173
+ elif isinstance(metadata, UnknownMessageMetadata):
174
+ lines.append("")
175
+ lines.append("❓ *Unknown Message Type*")
176
+ lines.append("🔍 Raw data captured for debugging")
177
+
178
+ return "\n".join(lines)
179
+
180
+ @staticmethod
181
+ def get_metadata_summary(metadata: WebhookMetadata) -> dict:
182
+ """
183
+ Get a summary of metadata for logging/analytics.
184
+
185
+ Args:
186
+ metadata: WebhookMetadata object to summarize
187
+
188
+ Returns:
189
+ Dictionary with metadata summary
190
+ """
191
+ # Handle both enum and string values for message_type
192
+ message_type_value = metadata.message_type.value if hasattr(metadata.message_type, 'value') else str(metadata.message_type)
193
+
194
+ summary = {
195
+ "message_id": metadata.message_id,
196
+ "message_type": message_type_value,
197
+ "user_id": metadata.user_id,
198
+ "timestamp": metadata.timestamp.isoformat(),
199
+ "processing_time_ms": metadata.processing_time_ms,
200
+ "cache_hit": metadata.cache_hit
201
+ }
202
+
203
+ # Add type-specific summary data
204
+ if isinstance(metadata, TextMessageMetadata):
205
+ summary.update({
206
+ "text_length": metadata.text_length,
207
+ "has_urls": metadata.has_urls,
208
+ "has_mentions": metadata.has_mentions,
209
+ "is_forwarded": metadata.is_forwarded
210
+ })
211
+
212
+ elif isinstance(metadata, MediaMessageMetadata):
213
+ summary.update({
214
+ "media_id": metadata.media_id,
215
+ "media_type": metadata.media_type,
216
+ "file_size": metadata.file_size,
217
+ "has_caption": bool(metadata.caption),
218
+ "is_forwarded": metadata.is_forwarded
219
+ })
220
+
221
+ elif isinstance(metadata, LocationMessageMetadata):
222
+ summary.update({
223
+ "latitude": metadata.latitude,
224
+ "longitude": metadata.longitude,
225
+ "has_name": bool(metadata.location_name),
226
+ "has_address": bool(metadata.location_address),
227
+ "is_forwarded": metadata.is_forwarded
228
+ })
229
+
230
+ elif isinstance(metadata, ContactMessageMetadata):
231
+ summary.update({
232
+ "contacts_count": metadata.contacts_count,
233
+ "has_phone_numbers": metadata.has_phone_numbers,
234
+ "has_emails": metadata.has_emails,
235
+ "is_forwarded": metadata.is_forwarded
236
+ })
237
+
238
+ elif isinstance(metadata, InteractiveMessageMetadata):
239
+ summary.update({
240
+ "interaction_type": metadata.interaction_type,
241
+ "selection_id": metadata.selection_id,
242
+ "has_title": bool(metadata.selection_title)
243
+ })
244
+
245
+ return summary
246
+
247
+ @staticmethod
248
+ def _format_file_size(size_bytes: int) -> str:
249
+ """Format file size in human-readable format."""
250
+ if size_bytes < 1024:
251
+ return f"{size_bytes} B"
252
+ elif size_bytes < 1024 * 1024:
253
+ return f"{size_bytes / 1024:.1f} KB"
254
+ elif size_bytes < 1024 * 1024 * 1024:
255
+ return f"{size_bytes / (1024 * 1024):.1f} MB"
256
+ else:
257
+ return f"{size_bytes / (1024 * 1024 * 1024):.1f} GB"
258
+
259
+
260
+ # Convenience functions for direct use
261
+ def extract_webhook_metadata(webhook: IncomingMessageWebhook, start_time: float = None) -> WebhookMetadata:
262
+ """
263
+ Extract metadata from webhook (convenience function).
264
+
265
+ Args:
266
+ webhook: IncomingMessageWebhook to process
267
+ start_time: Optional start time for processing measurement
268
+
269
+ Returns:
270
+ WebhookMetadata object
271
+ """
272
+ return MetadataExtractor.extract_metadata(webhook, start_time)
273
+
274
+
275
+ def format_metadata_message(metadata: WebhookMetadata) -> str:
276
+ """
277
+ Format metadata for user display (convenience function).
278
+
279
+ Args:
280
+ metadata: WebhookMetadata to format
281
+
282
+ Returns:
283
+ Formatted string for user
284
+ """
285
+ return MetadataExtractor.format_metadata_for_user(metadata)
286
+
287
+
288
+ def get_processing_summary(metadata: WebhookMetadata) -> dict:
289
+ """
290
+ Get processing summary (convenience function).
291
+
292
+ Args:
293
+ metadata: WebhookMetadata to summarize
294
+
295
+ Returns:
296
+ Summary dictionary
297
+ """
298
+ return MetadataExtractor.get_metadata_summary(metadata)
wappa/cli/main.py CHANGED
@@ -127,7 +127,7 @@ def _initialize_project(directory: str) -> None:
127
127
  try:
128
128
  # Create directory structure
129
129
  (project_path / "app").mkdir(exist_ok=True)
130
- (project_path / "scores").mkdir(exist_ok=True)
130
+ (project_path / "app" / "scores").mkdir(exist_ok=True)
131
131
 
132
132
  typer.echo("📁 Created directory structure")
133
133
 
@@ -136,7 +136,7 @@ def _initialize_project(directory: str) -> None:
136
136
  "app/__init__.py": "__init__.py.template",
137
137
  "app/main.py": "main.py.template",
138
138
  "app/master_event.py": "master_event.py.template",
139
- "scores/__init__.py": "__init__.py.template",
139
+ "app/scores/__init__.py": "__init__.py.template",
140
140
  ".gitignore": "gitignore.template",
141
141
  ".env": "env.template",
142
142
  }
@@ -493,13 +493,17 @@ def _copy_example(example_key: str, target_directory: str) -> None:
493
493
 
494
494
  console.print(f"🚀 Copying {EXAMPLES[example_key]['name']} to {target_path}")
495
495
 
496
- # Copy all files from the example
496
+ # Copy all files from the example (including hidden files, excluding .git and __pycache__)
497
497
  for item in source_path.iterdir():
498
+ # Skip .git and __pycache__ directories
499
+ if item.name in {'.git', '__pycache__'}:
500
+ continue
501
+
498
502
  if item.is_file():
499
503
  shutil.copy2(item, target_path / item.name)
500
504
  console.print(f"📝 Copied: {item.name}")
501
505
  elif item.is_dir():
502
- shutil.copytree(item, target_path / item.name, dirs_exist_ok=True)
506
+ shutil.copytree(item, target_path / item.name, dirs_exist_ok=True, ignore=shutil.ignore_patterns('__pycache__', '*.pyc'))
503
507
  console.print(f"📁 Copied: {item.name}/")
504
508
 
505
509
  console.print("\n✅ Example copied successfully!")
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: wappa
3
- Version: 0.1.8
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
@@ -20,27 +20,91 @@ wappa/api/routes/whatsapp/whatsapp_messages.py,sha256=_CM_HDtrvC4HOk1Mhv4nvkTPNq
20
20
  wappa/api/routes/whatsapp/whatsapp_specialized.py,sha256=O5yYq5omYkEzGoB5hPsAbM1xUQ0ZEz2AO0i71PTSGag,18509
21
21
  wappa/api/routes/whatsapp/whatsapp_templates.py,sha256=xx-UvuOFDtADUbXrwsSEc-I9u2w_jHqlUO-9ZN1uIdY,15371
22
22
  wappa/cli/__init__.py,sha256=IAcBraY6UIX5UE2gUcMZBDrPS2CRxd84eVR3IMI8S14,148
23
- wappa/cli/main.py,sha256=-C0fc0lKaq50rZuiIpWN5TW_3ltYmM1In_pZl1TdVlo,18198
23
+ wappa/cli/main.py,sha256=RHNmOvbX-PF4cK55UrLzbZBbPpVp-NpaM_F35qurB9g,18469
24
+ wappa/cli/examples/init/.env.example,sha256=MFtwavWncye8qvhCSGdGQ6kunNRVf1WNNgnA9shFCZ4,746
24
25
  wappa/cli/examples/init/.gitignore,sha256=QHovONB4wk9fp23oqg80JdChM7UWs4mfmtpN5ZrORNc,574
25
- wappa/cli/examples/init/pyproject.toml,sha256=EMnBNlcbKtHgqCZDUM4UfybMCFRKkgspbmcyTQk-urE,113
26
+ wappa/cli/examples/init/app/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
27
+ wappa/cli/examples/init/app/main.py,sha256=v0Ep5Au3SmFo9NxfcuGCSfT7IZSGJX6vz_d1qTmm8cI,169
28
+ wappa/cli/examples/init/app/master_event.py,sha256=0cCDZlJ1aa-y4QRK6ImD64KyGltAXdYDQz9d2RV9QsY,379
29
+ wappa/cli/examples/json_cache_example/.env.example,sha256=MFtwavWncye8qvhCSGdGQ6kunNRVf1WNNgnA9shFCZ4,746
26
30
  wappa/cli/examples/json_cache_example/.gitignore,sha256=QHovONB4wk9fp23oqg80JdChM7UWs4mfmtpN5ZrORNc,574
27
31
  wappa/cli/examples/json_cache_example/README.md,sha256=Sa2gUpOeLFaU3oeLX97AFLJ42bmXiu6StyHtZ30wERk,6240
28
- wappa/cli/examples/openai_transcript/.gitignore,sha256=7XuE6BY1nRcnaoAYAt5cNiwsVyzj5QqGcMg2Kwg1E4A,109
32
+ wappa/cli/examples/json_cache_example/app/__init__.py,sha256=Zj1E_qslVEJXN4J28UKbq-yS6zKMQuCDrnl34ICzyrM,60
33
+ wappa/cli/examples/json_cache_example/app/main.py,sha256=Ili5pVDSc2qiO7soQ0EZJIKo2zbsV-GxStyL9iKyFu0,8838
34
+ wappa/cli/examples/json_cache_example/app/master_event.py,sha256=oYjSzmt-Cp629j4m5YSm_q3sThK8wYKnCsYfjUkaJLM,17456
35
+ wappa/cli/examples/json_cache_example/app/models/__init__.py,sha256=u6SMNzALf1NNXmKIBSut3hDOOyzp2DYIFtfMFT_yZBA,40
36
+ wappa/cli/examples/json_cache_example/app/models/json_demo_models.py,sha256=4067RlEkiTfiXSCZql9Q-sNSiZyRx26PTHoO9uH_2kk,8065
37
+ wappa/cli/examples/json_cache_example/app/scores/__init__.py,sha256=9yA3sMd4uU3t_vWR6OYBMIOf0rZUkcsLx7ki2VGyDUQ,1081
38
+ wappa/cli/examples/json_cache_example/app/scores/score_base.py,sha256=qd_NfZacxX7XcgeiOAyoOVZLYksvHqLbj0GoJwnsl3s,5838
39
+ wappa/cli/examples/json_cache_example/app/scores/score_cache_statistics.py,sha256=vkjfEcpRqAg52U2XQQVTzHBZ3JmABg2_4tL9gMHkF-0,9795
40
+ wappa/cli/examples/json_cache_example/app/scores/score_message_history.py,sha256=iYASzRtwy-6O_6wFtK42wJdZjiqUFrF3fmz2Q_QXswg,6837
41
+ wappa/cli/examples/json_cache_example/app/scores/score_state_commands.py,sha256=gbg1e_0D4NENiGr1fv_4b-_czmnR-MD3zYrXGLqhx_Y,9870
42
+ wappa/cli/examples/json_cache_example/app/scores/score_user_management.py,sha256=klLATgExomqoZqkZK2KfWZTc7-aniXvC9Zo-54z2TBw,8404
43
+ wappa/cli/examples/json_cache_example/app/utils/__init__.py,sha256=Sk_Edbxi5kO4mIHeka6VFpDbHON09GDDFJCGuaOqmoM,541
44
+ wappa/cli/examples/json_cache_example/app/utils/cache_utils.py,sha256=WCiLGoCun-ozxlrq07CfqQo41ynivClIssmY46V-AHE,5196
45
+ wappa/cli/examples/json_cache_example/app/utils/message_utils.py,sha256=wHW_XK--pLBKqaRWFuPdlZEy8BwKk6hn02mYMOivdgU,7310
46
+ wappa/cli/examples/openai_transcript/.gitignore,sha256=QHovONB4wk9fp23oqg80JdChM7UWs4mfmtpN5ZrORNc,574
29
47
  wappa/cli/examples/openai_transcript/README.md,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
48
+ wappa/cli/examples/openai_transcript/app/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
49
+ wappa/cli/examples/openai_transcript/app/main.py,sha256=lObR1r_W8jF054nrv55dIoK4oPWjFt81Zvk30P2wgxA,177
50
+ wappa/cli/examples/openai_transcript/app/master_event.py,sha256=KcoWSkHKUjraqslNbkzdzV5fJRWwKQpk1dFaQ9k0lE0,2617
51
+ wappa/cli/examples/openai_transcript/app/openai_utils/__init__.py,sha256=RoxD5Qpyy-FyLKdBnQEjpobb1Rj1t8REvCyC1YU3R7I,86
52
+ wappa/cli/examples/openai_transcript/app/openai_utils/audio_processing.py,sha256=tN4ACy7rQToapOF1g6R-AqLgAgHmx-Fz2NHWJFk6QsE,3294
53
+ wappa/cli/examples/redis_cache_example/.env.example,sha256=XfLfh17WO_7LBn5VEr_4dXcsD_UGT5LHeK3FIhHU9yw,742
30
54
  wappa/cli/examples/redis_cache_example/.gitignore,sha256=QHovONB4wk9fp23oqg80JdChM7UWs4mfmtpN5ZrORNc,574
31
55
  wappa/cli/examples/redis_cache_example/README.md,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
56
+ wappa/cli/examples/redis_cache_example/app/__init__.py,sha256=K2M48HHnqSNpk6aKxO9llvuqVTVnVFxomANkSHt9Xso,181
57
+ wappa/cli/examples/redis_cache_example/app/main.py,sha256=zVoRI7Hf4V117oCOpz6Bjff08fXDsBH2HgA3TPGQsm4,8502
58
+ wappa/cli/examples/redis_cache_example/app/master_event.py,sha256=LfaMqEo1ChBWsWqCRaA92dYzfQtSaB2Ck2hT8rCfOJE,17462
59
+ wappa/cli/examples/redis_cache_example/app/models/redis_demo_models.py,sha256=_1CFt62JsxHbjRM_aBYiydTni5h49ju2RZwPymje_6o,8067
60
+ wappa/cli/examples/redis_cache_example/app/scores/__init__.py,sha256=_yZ1ko4-JlIAR1_qbMbzE_1PUyfcGwTQimbWBeP-zx0,1082
61
+ wappa/cli/examples/redis_cache_example/app/scores/score_base.py,sha256=qd_NfZacxX7XcgeiOAyoOVZLYksvHqLbj0GoJwnsl3s,5838
62
+ wappa/cli/examples/redis_cache_example/app/scores/score_cache_statistics.py,sha256=Bvja9NHlfjjgAJFdaFYvCkM7ZfZfQ4I0Xz9I_qCHfIU,9836
63
+ wappa/cli/examples/redis_cache_example/app/scores/score_message_history.py,sha256=kxsw-kj6tuIooU53GZmOMCnKCgJ5CvNpeyX1VWBu1-A,6833
64
+ wappa/cli/examples/redis_cache_example/app/scores/score_state_commands.py,sha256=0HAXgA6Xh5D5Imz15fRXgn0OKbh0Uc9wLAnkjNPv868,9867
65
+ wappa/cli/examples/redis_cache_example/app/scores/score_user_management.py,sha256=hkZ3D4K3WxtuORsrzg0rLZI8eT95Q1Ov0rxbHRF_CEc,8396
66
+ wappa/cli/examples/redis_cache_example/app/utils/__init__.py,sha256=Sk_Edbxi5kO4mIHeka6VFpDbHON09GDDFJCGuaOqmoM,541
67
+ wappa/cli/examples/redis_cache_example/app/utils/cache_utils.py,sha256=WCiLGoCun-ozxlrq07CfqQo41ynivClIssmY46V-AHE,5196
68
+ wappa/cli/examples/redis_cache_example/app/utils/message_utils.py,sha256=wHW_XK--pLBKqaRWFuPdlZEy8BwKk6hn02mYMOivdgU,7310
69
+ wappa/cli/examples/simple_echo_example/.env.example,sha256=XfLfh17WO_7LBn5VEr_4dXcsD_UGT5LHeK3FIhHU9yw,742
32
70
  wappa/cli/examples/simple_echo_example/.gitignore,sha256=QHovONB4wk9fp23oqg80JdChM7UWs4mfmtpN5ZrORNc,574
33
- wappa/cli/examples/simple_echo_example/.python-version,sha256=e1X45ntWI8S-8_ppEojalDfXnTq6FW3kjUgdsyrH0W0,5
34
71
  wappa/cli/examples/simple_echo_example/README.md,sha256=cuQfzmHaNM4C6_VQDjnHB3No6zAiDOPBTcAWBneI6Kc,4486
35
- wappa/cli/examples/simple_echo_example/pyproject.toml,sha256=tnTUEyAvb1XT4JgTU6rAMzp4g_-h7LlLqLk9Q7YbDww,215
72
+ wappa/cli/examples/simple_echo_example/app/__init__.py,sha256=4a_vkSCD8fjzxPpc_CZRxBauyn4EF2ddAUd5SdL2IPg,218
73
+ wappa/cli/examples/simple_echo_example/app/main.py,sha256=2j6P4kdRh7-mumuyAsDMDq-RANPYqK23i30wTTRCrnM,5685
74
+ wappa/cli/examples/simple_echo_example/app/master_event.py,sha256=fZ_9lyzn8M1t0ZTu_LwHDq_NQVPeS8XZDBlW1vDcXrQ,8210
36
75
  wappa/cli/examples/wappa_full_example/.dockerignore,sha256=xmyhzrl7nBHRABH06D2Imt3rZ1OXSaBmCj_a15JiCrA,1974
37
- wappa/cli/examples/wappa_full_example/.gitignore,sha256=7XuE6BY1nRcnaoAYAt5cNiwsVyzj5QqGcMg2Kwg1E4A,109
76
+ wappa/cli/examples/wappa_full_example/.env.example,sha256=XfLfh17WO_7LBn5VEr_4dXcsD_UGT5LHeK3FIhHU9yw,742
77
+ wappa/cli/examples/wappa_full_example/.gitignore,sha256=QHovONB4wk9fp23oqg80JdChM7UWs4mfmtpN5ZrORNc,574
38
78
  wappa/cli/examples/wappa_full_example/Dockerfile,sha256=aRMbPhxkjpOEINgdC7GK_PQvrdFUKPoWDFNQG48VVDE,2781
39
79
  wappa/cli/examples/wappa_full_example/RAILWAY_DEPLOYMENT.md,sha256=2Yo4RpCg_JuVYeKP7aFbsg74bEHmAAkblMKwf_Vfqvs,7602
40
80
  wappa/cli/examples/wappa_full_example/README.md,sha256=TjPajI52_9nqgpw0-do0-Fm78wL2iNTr4ZgLibnQIsA,10283
41
81
  wappa/cli/examples/wappa_full_example/docker-compose.yml,sha256=aVPUzQAzp4Mde80VzS3tOLwUr4zm50pPkWi8JVlDAjg,4613
42
82
  wappa/cli/examples/wappa_full_example/nginx.conf,sha256=4dGnf4_QnxyizzsWx3KWCf9X2GKSe8X4XGxhcR12MxE,6134
43
83
  wappa/cli/examples/wappa_full_example/railway.toml,sha256=QcGF8H65jFVcsQMIR4erfqS9krmfvoSKyXtnsCCzcqo,1030
84
+ wappa/cli/examples/wappa_full_example/app/__init__.py,sha256=1iMMamjH2stZfcCKmnMqV03RrD0ZEjtjNbPNpVq4_gc,201
85
+ wappa/cli/examples/wappa_full_example/app/main.py,sha256=L-bUcrq6mMvMi0A2oYPuk1ymTw3lKo-cmCaoBaVblQU,9763
86
+ wappa/cli/examples/wappa_full_example/app/master_event.py,sha256=s4aTNPmAbVNwZ5C1uHkY6KlL7LjjMmSpLJEPTrvRlyU,19981
87
+ wappa/cli/examples/wappa_full_example/app/handlers/__init__.py,sha256=gofWlv2vlmtTwLljjrYCuxrp0995BFzPpYXhccKpGKU,166
88
+ wappa/cli/examples/wappa_full_example/app/handlers/command_handlers.py,sha256=YBBOfUTfADkDwelIhS6xFjR-xciSfzRj2aDdnkQjx68,19960
89
+ wappa/cli/examples/wappa_full_example/app/handlers/message_handlers.py,sha256=gnCZM-sL-jeAY198JRi5wIrHPsUBkjZyMxRRd9_RM5U,22817
90
+ wappa/cli/examples/wappa_full_example/app/handlers/state_handlers.py,sha256=aj_lCuWjAfBzSEl24Br3jgBEJv6ZZdbT0WJXFtpHU9E,20443
91
+ wappa/cli/examples/wappa_full_example/app/media/README.md,sha256=r0xGsUxouTKv5I8bDE_A7RTrFc4m9jD5vm01Mu6JLes,1984
92
+ wappa/cli/examples/wappa_full_example/app/media/buttons/README.md,sha256=tR1BEJelo8Jv5cPNJB7-z3twNGLEhaU0fuLEccRyw6Y,1689
93
+ wappa/cli/examples/wappa_full_example/app/media/buttons/kitty.png,sha256=5PwFKWNwdP0QXeBu9LmxfRIMQcRfM7xXU_ScddVZ3p0,2918957
94
+ wappa/cli/examples/wappa_full_example/app/media/buttons/puppy.png,sha256=H9n1fk1nXfdLzNmWxvuTh9u6SRrfYNi3TQxHP6zfh9s,2621581
95
+ wappa/cli/examples/wappa_full_example/app/media/list/README.md,sha256=JNKCwXGNAgNrng-xhC4WCSb0VSTc0IRarHVLNqN0ehM,3661
96
+ wappa/cli/examples/wappa_full_example/app/media/list/audio.mp3,sha256=GPWSYW8Hn-Cc9WXFB8oV99tVzjIm2elXMgmdc5qNFmk,200619
97
+ wappa/cli/examples/wappa_full_example/app/media/list/document.pdf,sha256=9BbGU8MRI3R93qVRDrsvu9T23PhyfD6Kj5tbiQw7DXE,147162
98
+ wappa/cli/examples/wappa_full_example/app/media/list/image.png,sha256=YDyPnnOG_BLD70kG-6h5CVj4uPDQ2Qvmfl2HEE0tCow,100521
99
+ wappa/cli/examples/wappa_full_example/app/media/list/video.mp4,sha256=pVDzWKCxvfYPkRFEbk3IU8NGCIrqCDvhBPLEB0xyJFE,1655191
100
+ wappa/cli/examples/wappa_full_example/app/models/__init__.py,sha256=PR-yPzlAjzqyzvYPnc81ogu97yFY_ZXx8JYc_CKxn7s,141
101
+ wappa/cli/examples/wappa_full_example/app/models/state_models.py,sha256=zLNAP1cF95_qi0Z1fd2c5DWibbJNI_bJRnfR_wjtN2s,15061
102
+ wappa/cli/examples/wappa_full_example/app/models/user_models.py,sha256=5zUmrY8vqmV_pL3Jw8m5t-l4TBLHVE9-qVINMP1VORU,10911
103
+ wappa/cli/examples/wappa_full_example/app/models/webhook_metadata.py,sha256=PNnRqd7E1Jj8vN6HJV-IgVelOInyrfIaeo55xlsgoYA,11354
104
+ wappa/cli/examples/wappa_full_example/app/utils/__init__.py,sha256=Ud6emdpWO17cueQJaUlAsR7rEe9UgLy2Ll-2xUzmW5w,146
105
+ wappa/cli/examples/wappa_full_example/app/utils/cache_utils.py,sha256=OrFj-NtRVrvfFvwMjdf1p-Lat0XtMhqobi8wTyD5g3M,15983
106
+ wappa/cli/examples/wappa_full_example/app/utils/media_handler.py,sha256=y3f8Aonu6wd2yKe-H7Gn6dy10D2liPZFRDQmJGY7ETs,16697
107
+ wappa/cli/examples/wappa_full_example/app/utils/metadata_extractor.py,sha256=JBJdFt-jSu2rIncYcj4GyckeA35-txD2CeKQ53e800M,11989
44
108
  wappa/cli/templates/__init__.py.template,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
45
109
  wappa/cli/templates/env.template,sha256=NnFFQ6QDZkHq5t3sPET6X0cLYi403IHe-sfh1Y-FbCY,734
46
110
  wappa/cli/templates/gitignore.template,sha256=WQ1DBB8_-oI20xwAzfhTGGF2CWCW0QGLLwwd_FNyzdo,3107
@@ -225,8 +289,8 @@ wappa/webhooks/whatsapp/message_types/system.py,sha256=lrAwSTNokxjDkgCg7Hg33eb8s
225
289
  wappa/webhooks/whatsapp/message_types/text.py,sha256=u3gXGMNpJFDdaJWA0vhBGFTyAEzI2fyqvtaVvZwzAhA,14688
226
290
  wappa/webhooks/whatsapp/message_types/unsupported.py,sha256=5GxVcNNu2X5H1gZvze3iNNrZUrUs2DxmiL3bruS38RI,9532
227
291
  wappa/webhooks/whatsapp/message_types/video.py,sha256=NR081ZyNwxajmCbOw-LvPadU97Qksghxr_TWhWsZEz0,11271
228
- wappa-0.1.8.dist-info/METADATA,sha256=3xPTEC1tKzolldSW4zXOcAAxVoElVcPLbpLPhaJWBaE,15758
229
- wappa-0.1.8.dist-info/WHEEL,sha256=qtCwoSJWgHk21S1Kb4ihdzI2rlJ1ZKaIurTj_ngOhyQ,87
230
- wappa-0.1.8.dist-info/entry_points.txt,sha256=KzfFZSK3VpWP4M-gpgh9AdKbhh4kOwiOI3q32e3NLHs,45
231
- wappa-0.1.8.dist-info/licenses/LICENSE,sha256=xx0jnfkXJvxRnG63LTGOxlggYnIysveWIZ6H3PNdCrQ,11357
232
- wappa-0.1.8.dist-info/RECORD,,
292
+ wappa-0.1.9.dist-info/METADATA,sha256=8TJgY7G29O7zwxRJ7K9RLxLVfUKq0E-cLhpzzU8zuYA,15758
293
+ wappa-0.1.9.dist-info/WHEEL,sha256=qtCwoSJWgHk21S1Kb4ihdzI2rlJ1ZKaIurTj_ngOhyQ,87
294
+ wappa-0.1.9.dist-info/entry_points.txt,sha256=KzfFZSK3VpWP4M-gpgh9AdKbhh4kOwiOI3q32e3NLHs,45
295
+ wappa-0.1.9.dist-info/licenses/LICENSE,sha256=xx0jnfkXJvxRnG63LTGOxlggYnIysveWIZ6H3PNdCrQ,11357
296
+ wappa-0.1.9.dist-info/RECORD,,
@@ -1,7 +0,0 @@
1
- [project]
2
- name = "wappa-init"
3
- version = "0.1.0"
4
- requires-python = ">=3.12"
5
- dependencies = [
6
- "wappa>=0.1.6",
7
- ]
@@ -1,9 +0,0 @@
1
- [project]
2
- name = "simple-echo-example"
3
- version = "0.1.0"
4
- description = "Simple WhatsApp echo bot example using Wappa framework"
5
- readme = "README.md"
6
- requires-python = ">=3.12"
7
- dependencies = [
8
- "wappa>=0.1.6",
9
- ]
File without changes