Skip to content

Commit ac0864a

Browse files
authored
Merge pull request #68 from nostalgiaCode/SW-3741
Moved to green-api:SW-3741.
2 parents 3489b18 + 1aae5a1 commit ac0864a

2 files changed

Lines changed: 124 additions & 7 deletions

File tree

whatsapp_api_client_python/API.py

Lines changed: 44 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -16,7 +16,8 @@
1616
receiving,
1717
sending,
1818
serviceMethods,
19-
webhooks
19+
webhooks,
20+
partner
2021
)
2122

2223

@@ -78,18 +79,14 @@ def request(
7879
url = url.replace("{{idInstance}}", self.idInstance)
7980
url = url.replace("{{apiTokenInstance}}", self.apiTokenInstance)
8081

81-
headers = {
82-
'User-Agent': 'GREEN-API_SDK_PY/1.0'
83-
}
84-
8582
try:
8683
if not files:
8784
response = self.session.request(
88-
method=method, url=url, json=payload, timeout=self.host_timeout, headers=headers
85+
method=method, url=url, json=payload, timeout=self.host_timeout
8986
)
9087
else:
9188
response = self.session.request(
92-
method=method, url=url, data=payload, files=files, timeout=self.media_timeout, headers=headers
89+
method=method, url=url, data=payload, files=files, timeout=self.media_timeout
9390
)
9491
except Exception as error:
9592
error_message = f"Request was failed with error: {error}."
@@ -182,3 +179,43 @@ class GreenAPI(GreenApi):
182179

183180
class GreenAPIError(Exception):
184181
pass
182+
183+
class GreenApiPartner(GreenApi):
184+
def __init__(
185+
self,
186+
partnerToken: str,
187+
email: str = None,
188+
debug_mode: bool = False,
189+
raise_errors: bool = False,
190+
host: str = "https://api.green-api.com",
191+
media: str = "https://media.green-api.com",
192+
host_timeout: float = 180,
193+
media_timeout: float = 10800
194+
):
195+
196+
super().__init__(
197+
idInstance="",
198+
apiTokenInstance="",
199+
debug_mode=debug_mode,
200+
raise_errors=raise_errors,
201+
host=host,
202+
media=media,
203+
host_timeout=host_timeout,
204+
media_timeout=media_timeout
205+
)
206+
207+
self.partnerToken = partnerToken
208+
self.email = email
209+
self.partner = partner.Partner(self)
210+
211+
def request(
212+
self,
213+
method: str,
214+
url: str,
215+
payload: Optional[dict] = None,
216+
files: Optional[dict] = None
217+
) -> GreenAPIResponse:
218+
219+
url = url.replace("{{partnerToken}}", self.partnerToken)
220+
221+
return super().request(method, url, payload, files)
Lines changed: 80 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,80 @@
1+
from typing import Optional, TYPE_CHECKING
2+
3+
from ..response import Response
4+
5+
if TYPE_CHECKING:
6+
from ..API import GreenApiPartner
7+
8+
class Partner:
9+
def __init__(self, api: "GreenApiPartner"):
10+
self.api = api
11+
12+
def getInstances(
13+
self
14+
) -> Response:
15+
16+
request_body = self.__handle_parameters(locals())
17+
18+
return self.api.request(
19+
"GET", (
20+
"{{host}}/partner/"
21+
"getInstances/{{partnerToken}}"
22+
), request_body
23+
)
24+
25+
def createInstance(
26+
self,
27+
name: Optional[str] = None,
28+
webhookUrl: Optional[str] = None,
29+
webhookUrlToken: Optional[str] = None,
30+
delaySendMessagesMilliseconds: Optional[int] = None,
31+
markIncomingMessagesReaded: Optional[str] = None,
32+
markIncomingMessagesReadedOnReply: Optional[str] = None,
33+
outgoingWebhook: Optional[str] = None,
34+
outgoingMessageWebhook: Optional[str] = None,
35+
outgoingAPIMessageWebhook: Optional[str] = None,
36+
stateWebhook: Optional[str] = None,
37+
incomingWebhook: Optional[str] = None,
38+
deviceWebhook: Optional[str] = None,
39+
keepOnlineStatus: Optional[str] = None,
40+
pollMessageWebhook: Optional[str] = None,
41+
incomingBlockWebhook: Optional[str] = None,
42+
incomingCallWebhook: Optional[str] = None,
43+
editedMessageWebhook: Optional[str] = None,
44+
deletedMessageWebhook: Optional[str] = None
45+
) -> Response:
46+
47+
request_body = self.__handle_parameters(locals())
48+
49+
return self.api.request(
50+
"POST", (
51+
"{{host}}/partner/"
52+
"createInstance/{{partnerToken}}"
53+
), request_body
54+
)
55+
56+
def deleteInstanceAccount(
57+
self,
58+
idInstance: int
59+
) -> Response:
60+
61+
request_body = self.__handle_parameters(locals())
62+
63+
return self.api.request(
64+
"POST", (
65+
"{{host}}/partner/"
66+
"deleteInstanceAccount/{{partnerToken}}"
67+
), request_body
68+
)
69+
70+
@classmethod
71+
def __handle_parameters(cls, parameters: dict) -> dict:
72+
handled_parameters = parameters.copy()
73+
74+
handled_parameters.pop("self")
75+
76+
for key, value in parameters.items():
77+
if value is None:
78+
handled_parameters.pop(key)
79+
80+
return handled_parameters

0 commit comments

Comments
 (0)