New Research: Supply Chain Attack on Axios Pulls Malicious Dependency from npm.Details →
Socket
Book a DemoSign in
Socket

python-whatsapp-wrapper

Package Overview
Dependencies
Maintainers
1
Versions
11
Alerts
File Explorer

Advanced tools

Socket logo

Install Socket

Detect and block malicious and high-risk dependencies

Install

python-whatsapp-wrapper - pypi Package Compare versions

Comparing version
0.1.7
to
0.1.9
+1
-1
PKG-INFO
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"
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