python-whatsapp-wrapper
Advanced tools
+1
-1
| Metadata-Version: 2.1 | ||
| Name: python-whatsapp-wrapper | ||
| Version: 0.1.7 | ||
| Version: 0.1.9 | ||
| Summary: Pure python project for META Whatsapp Business API wrapper. | ||
@@ -5,0 +5,0 @@ Author-email: Sergio Pires <sergiodanpires@gmail.com> |
| Metadata-Version: 2.1 | ||
| Name: python-whatsapp-wrapper | ||
| Version: 0.1.7 | ||
| Version: 0.1.9 | ||
| Summary: Pure python project for META Whatsapp Business API wrapper. | ||
@@ -5,0 +5,0 @@ Author-email: Sergio Pires <sergiodanpires@gmail.com> |
@@ -1,1 +0,1 @@ | ||
| __version__ = "0.1.7" | ||
| __version__ = "0.1.9" |
+57
-75
| import dataclasses as dc | ||
| import json | ||
| import logging | ||
@@ -66,3 +65,3 @@ from abc import ABC, abstractmethod | ||
| def to_json (self, has_description: bool = True) -> dict[str, str]: | ||
| def _to_dict (self, has_description: bool = True) -> dict[str, str]: | ||
| output = { "id": self.id, "title": self.title, "description": self.description } | ||
@@ -128,5 +127,5 @@ | ||
| "Message id (Used for replies for example)" | ||
| forwarded: bool = dc.field(default=None) | ||
| forwarded: bool | None = dc.field(default=None) | ||
| "True if the received message was been forwarded" | ||
| frequently_forwarded: bool = dc.field(default=None) | ||
| frequently_forwarded: bool | None = dc.field(default=None) | ||
| "True if the received message was been forwarded more than 5 times" | ||
@@ -320,3 +319,3 @@ | ||
| def default_body_to_send ( | ||
| cls, to: str, msg_type: MessageTypes, context: Context | dict[str, str] = None, | ||
| cls, to: str, msg_type: MessageTypes, context: Context | dict[str, str] | None = None, | ||
| ) -> dict[str, Any]: | ||
@@ -329,3 +328,3 @@ default_body = { | ||
| if context is not None: | ||
| default_body["context"] = context.to_json() | ||
| default_body["context"] = context.to_dict() if isinstance(context, Context) else context | ||
@@ -336,3 +335,5 @@ return default_body | ||
| @abstractmethod | ||
| def to_send (cls, to: str, *args, **kwargs) -> dict[str, str]: | ||
| def to_send ( | ||
| cls, to: str, context: Context | dict[str, str] | None = None, *args, **kwargs | ||
| ) -> dict[str, str]: | ||
| ... | ||
@@ -366,5 +367,6 @@ | ||
| def to_send ( | ||
| cls, to: str, audio_id: str = None, link: str = None | ||
| cls, to: str, audio_id: str = None, link: str = None, | ||
| context: Context | dict[str, str] | None = None | ||
| ) -> dict[str, str]: | ||
| output_msg = cls.default_body_to_send(to, MessageTypes.AUDIO) | ||
| output_msg = cls.default_body_to_send(to, MessageTypes.AUDIO, context) | ||
@@ -422,6 +424,6 @@ if audio_id: | ||
| def to_send ( | ||
| cls, to: str, document_id: str = None, link: str = None, | ||
| caption: str = None, filename: str = None | ||
| cls, to: str, document_id: str = None, link: str = None, caption: str = None, | ||
| filename: str = None, context: Context | dict[str, str] | None = None | ||
| ) -> dict[str, str]: | ||
| output_msg = cls.default_body_to_send(to, MessageTypes.DOCUMENT) | ||
| output_msg = cls.default_body_to_send(to, MessageTypes.DOCUMENT, context) | ||
@@ -469,5 +471,6 @@ if document_id: | ||
| def to_send ( | ||
| cls, to: str, image_id: str = None, link: str = None, caption: str = None | ||
| cls, to: str, image_id: str = None, link: str = None, | ||
| caption: str = None, context: Context | dict[str, str] | None = None | ||
| ) -> dict[str, str]: | ||
| output_msg = cls.default_body_to_send(to, MessageTypes.IMAGE) | ||
| output_msg = cls.default_body_to_send(to, MessageTypes.IMAGE, context) | ||
@@ -511,5 +514,5 @@ if image_id: | ||
| def to_send (self, to: str) -> dict[str, str]: | ||
| def to_send (self, to: str, context: Context | dict[str, str] | None = None) -> dict[str, str]: | ||
| return { | ||
| **ReceivedMessage.default_body_to_send(to, MessageTypes.INTERACTIVE), | ||
| **ReceivedMessage.default_body_to_send(to, MessageTypes.INTERACTIVE, context), | ||
| "interactive": { | ||
@@ -549,5 +552,5 @@ "type": "cta_url", | ||
| def to_send (self, to: str) -> dict[str, str]: | ||
| def to_send (self, to: str, context: Context | dict[str, str] | None = None) -> dict[str, str]: | ||
| return { | ||
| **ReceivedMessage.default_body_to_send(to, MessageTypes.INTERACTIVE), | ||
| **ReceivedMessage.default_body_to_send(to, MessageTypes.INTERACTIVE, context), | ||
| "interactive": { | ||
@@ -560,3 +563,3 @@ "type": "list", | ||
| "button": self.button_title, | ||
| "sections": [ section.to_json() for section in self.sections ] | ||
| "sections": [ section.to_dict() for section in self.sections ] | ||
| } | ||
@@ -569,22 +572,21 @@ } | ||
| @register_message_type(MessageTypes.INTERACTIVE) | ||
| class InteractiveListReply (ReceivedMessage): | ||
| interactive: dict[str, str] = dc.field(kw_only=True) | ||
| class InteractiveReply (ReceivedMessage): | ||
| interactive: dict[str, str] = dc.field(kw_only=True, default=None) | ||
| @property | ||
| def message_value (self) -> str: | ||
| return f"{self.list_reply.title}\n{self.list_reply.description}" | ||
| return self.list_reply.title | ||
| @property | ||
| def list_reply(self) -> Item: | ||
| item = self.interactive["list_reply"] | ||
| def user_reply(self) -> Item: | ||
| item = self.interactive.get("list_reply", self.interactive.get("button_reply", None)) | ||
| if isinstance(item, str): | ||
| item = item.replace("'", "\"") | ||
| item = json.loads(item) | ||
| item = Item.from_json(item.replace("'", "\"")) | ||
| return Item.from_dict(item) | ||
| return item | ||
| @list_reply.setter | ||
| def list_reply(self, value: Item): | ||
| raise ValueError("Can't set list_reply directly. Use 'interactive' instead.") | ||
| @user_reply.setter | ||
| def user_reply(self, value: Item): | ||
| raise ValueError("Can't set reply directly. Use 'interactive' instead.") | ||
@@ -594,4 +596,4 @@ @classmethod | ||
| raise ValueError( | ||
| "'InteractiveListReply' can't be used to send messages. " | ||
| "Use 'InteractiveListMessage' instead." | ||
| "'InteractiveReply' can't be used to send messages. " | ||
| "Use 'InteractiveListMessage' or 'InteractiveButtonsMessage' instead." | ||
| ) | ||
@@ -611,5 +613,5 @@ | ||
| def to_send (self, to: str,) -> dict[str, str]: | ||
| def to_send (self, to: str, context: Context | dict[str, str] | None = None) -> dict[str, str]: | ||
| return { | ||
| **ReceivedMessage.default_body_to_send(to, MessageTypes.INTERACTIVE), | ||
| **ReceivedMessage.default_body_to_send(to, MessageTypes.INTERACTIVE, context), | ||
| "interactive": { | ||
@@ -622,3 +624,4 @@ "type": "button", | ||
| "buttons": [ | ||
| { "type": "reply", "reply": button.to_json() } for button in self.buttons | ||
| { "type": "reply", "reply": button._to_dict(False) } | ||
| for button in self.buttons | ||
| ] | ||
@@ -631,28 +634,2 @@ } | ||
| @dc.dataclass | ||
| class InteractiveButtonsReply (ReceivedMessage): | ||
| interactive: dict[str, str] = dc.field(kw_only=True) | ||
| button_reply: Item = dc.field(init=False) | ||
| @property | ||
| def message_value (self) -> str: | ||
| return f"{self.button_reply.title}\n{self.button_reply.description}" | ||
| @property | ||
| def button_reply(self) -> Item: | ||
| return Item.from_dict(self.interactive["button_reply"]) | ||
| @button_reply.setter | ||
| def button_reply(self, value: Item): | ||
| raise ValueError("Can't set button_reply directly. Use 'interactive' instead.") | ||
| @classmethod | ||
| def to_send (cls, to: str, *args, **kwargs): | ||
| raise ValueError( | ||
| "'InteractiveListReply' can't be used to send messages. " | ||
| "Use 'InteractiveListMessage' instead." | ||
| ) | ||
| @dataclass_json | ||
| @dc.dataclass | ||
| @register_message_type(MessageTypes.LOCATION) | ||
@@ -664,5 +641,6 @@ class LocationMessage (ReceivedMessage): | ||
| def to_send( | ||
| cls, to: str, latitude: str, longitude: str, address: str = None, name: str = None | ||
| cls, to: str, latitude: str, longitude: str, address: str = None, | ||
| name: str = None, context: Context | dict[str, str] | None = None | ||
| ): | ||
| output_msg = cls.default_body_to_send(to, MessageTypes.LOCATION) | ||
| output_msg = cls.default_body_to_send(to, MessageTypes.LOCATION, context) | ||
| output_msg["location"] = { "latitude": latitude, "longitude": longitude } | ||
@@ -687,5 +665,5 @@ | ||
| def to_send (self, to: str) -> dict[str, str]: | ||
| def to_send (self, to: str, context: Context | dict[str, str] | None = None) -> dict[str, str]: | ||
| return { | ||
| **ReceivedMessage.default_body_to_send(to, MessageTypes.INTERACTIVE), | ||
| **ReceivedMessage.default_body_to_send(to, MessageTypes.INTERACTIVE, context), | ||
| "interactive": { | ||
@@ -707,5 +685,5 @@ "type": "location_request_message", | ||
| def to_send ( | ||
| cls, to: str, message_id: str, emoji: str | ||
| cls, to: str, message_id: str, emoji: str, context: Context | dict[str, str] | None = None | ||
| ) -> dict[str, str]: | ||
| output_msg = cls.default_body_to_send(to, MessageTypes.REACTION) | ||
| output_msg = cls.default_body_to_send(to, MessageTypes.REACTION, context) | ||
| output_msg["reaction"] = { "message_id": message_id, "emoji": emoji } | ||
@@ -724,5 +702,6 @@ | ||
| def to_send ( | ||
| cls, to: str, sticker_id: str = None, link: str = None | ||
| cls, to: str, sticker_id: str = None, link: str = None, | ||
| context: Context | dict[str, str] | None = None | ||
| ) -> dict[str, str]: | ||
| output_msg = cls.default_body_to_send(to, MessageTypes.DOCUMENT) | ||
| output_msg = cls.default_body_to_send(to, MessageTypes.DOCUMENT, context) | ||
@@ -766,3 +745,5 @@ if sticker_id: | ||
| @classmethod | ||
| def to_send (cls, to: str, message: str, preview_url: bool = None) -> dict[str, str]: | ||
| def to_send ( | ||
| cls, to: str, message: str, preview_url: bool = None, context: Context | dict[str, str] | None = None | ||
| ) -> dict[str, str]: | ||
| """ | ||
@@ -776,3 +757,3 @@ Send an text message. | ||
| """ | ||
| output_msg = cls.default_body_to_send(to, MessageTypes.TEXT) | ||
| output_msg = cls.default_body_to_send(to, MessageTypes.TEXT, context) | ||
| output_msg["text"] = { "body": message } | ||
@@ -799,3 +780,4 @@ | ||
| def to_send ( | ||
| cls, to: str, video_id: str = None, link: str = None, caption: str = None | ||
| cls, to: str, video_id: str = None, link: str = None, | ||
| caption: str = None, context: Context | dict[str, str] | None = None | ||
| ) -> dict[str, str]: | ||
@@ -814,3 +796,3 @@ """ | ||
| output_msg = cls.default_body_to_send(to, MessageTypes.VIDEO) | ||
| output_msg = cls.default_body_to_send(to, MessageTypes.VIDEO, context) | ||
@@ -910,3 +892,3 @@ if video_id: | ||
| output = { | ||
| "messaging_product": self.messaging_product, "metadata": self.metadata.to_json() | ||
| "messaging_product": self.messaging_product, "metadata": self.metadata.to_dict() | ||
| } | ||
@@ -920,3 +902,3 @@ | ||
| output[attr_key] = [ attr.to_json() for attr in attr_value ] | ||
| output[attr_key] = [ attr.to_dict() for attr in attr_value ] | ||
@@ -923,0 +905,0 @@ return output |
Alert delta unavailable
Currently unable to show alert delta for PyPI packages.
76349
0.13%1454
-0.82%