Skip to content

Commit f604ad2

Browse files
committed
Refactored code, added documentation
1 parent ac0864a commit f604ad2

8 files changed

Lines changed: 138 additions & 61 deletions

File tree

README.md

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -237,6 +237,10 @@ print(response.data)
237237
| `serviceMethods.setDisappearingChat` | The method is designed to change the settings of disappearing messages in chats | [SetDisappearingChat](https://green-api.com/en/docs/api/service/SetDisappearingChat/) |
238238
| `webhooks.startReceivingNotifications` | The method is designed to start receiving new notifications | |
239239
| `webhooks.stopReceivingNotifications` | The method is designed to stop receiving new notifications | |
240+
| `partner.GetInstances` | The method is for getting all the account instances created by the partner. | [GetInstances](https://green-api.com/en/docs/partners/getInstances/) |
241+
| `partner.CreateInstance` | The method is for creating an instance. | [CreateInstance](https://green-api.com/en/docs/partners/createInstance/) |
242+
| `partner.DeleteInstanceAccount` | The method is for deleting an instance. | [DeleteInstanceAccount](https://green-api.com/en/docs/partners/deleteInstanceAccount/) |
243+
240244

241245
## Service methods documentation
242246

docs/README.md

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -221,6 +221,9 @@ print(response.data)
221221
| `serviceMethods.setDisappearingChat` | Метод предназначен для изменения настроек исчезающих сообщений в чатах | [SetDisappearingChat](https://green-api.com/docs/api/service/SetDisappearingChat/) |
222222
| `webhooks.startReceivingNotifications` | Метод предназначен для старта получения новых уведомлений | |
223223
| `webhooks.stopReceivingNotifications` | Метод предназначен для остановки получения новых уведомлений | |
224+
| `partner.GetInstances` | Метод предназначен для получения всех инстансов аккаунтов созданных партнёром. | [GetInstances](https://green-api.com/docs/partners/getInstances/) |
225+
| `partner.CreateInstance` | Метод предназначен для создания инстанса от имени партнёра. | [CreateInstance](https://green-api.com/docs/partners/createInstance/) |
226+
| `partner.DeleteInstanceAccount` | Метод предназначен для удаления инстанса аккаунта партнёра. | [DeleteInstanceAccount](https://green-api.com/docs/partners/deleteInstanceAccount/) |
224227

225228
## Документация по методам сервиса
226229

Lines changed: 34 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,34 @@
1+
from whatsapp_api_client_python import API
2+
3+
greenAPI = API.GreenApiPartner(
4+
"gac.abcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrst"
5+
)
6+
7+
8+
def main():
9+
settings = {
10+
"name": "Created by Python SDK",
11+
"webhookUrl": "https://webhook.url",
12+
"webhookUrlToken": "auth_token",
13+
"delaySendMessagesMilliseconds": 5000,
14+
"markIncomingMessagesReaded": "yes",
15+
"markIncomingMessagesReadedOnReply": "yes",
16+
"outgoingWebhook": "yes",
17+
"outgoingMessageWebhook": "yes",
18+
"outgoingAPIMessageWebhook": "yes",
19+
"stateWebhook": "yes",
20+
"incomingWebhook": "yes",
21+
"deviceWebhook": "yes",
22+
"keepOnlineStatus": "yes",
23+
"pollMessageWebhook": "yes",
24+
"incomingBlockWebhook": "yes",
25+
"incomingCallWebhook": "yes",
26+
"editedMessageWebhook": "yes",
27+
"deletedMessageWebhook": "yes"
28+
}
29+
30+
response = greenAPI.partner.createInstance(settings)
31+
print(response.data)
32+
33+
if __name__ == '__main__':
34+
main()
Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,14 @@
1+
from whatsapp_api_client_python import API
2+
3+
greenAPI = API.GreenApiPartner(
4+
"gac.abcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrst"
5+
)
6+
7+
8+
def main():
9+
response = greenAPI.partner.deleteInstanceAccount(1103123456)
10+
print(response.data)
11+
12+
13+
if __name__ == '__main__':
14+
main()
Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,13 @@
1+
from whatsapp_api_client_python import API
2+
3+
greenAPI = API.GreenApiPartner(
4+
"gac.abcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrst"
5+
)
6+
7+
8+
def main():
9+
response = greenAPI.partner.getInstances()
10+
print(response.data)
11+
12+
if __name__ == '__main__':
13+
main()

examples/setSettings.py

Lines changed: 34 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,34 @@
1+
from whatsapp_api_client_python import API
2+
3+
greenAPI = API.GreenAPI(
4+
"1101000001", "d75b3a66374942c5b3c019c698abc2067e151558acbd412345"
5+
)
6+
7+
8+
def main():
9+
settings = {
10+
"webhookUrl": "https://webhook.url",
11+
"webhookUrlToken": "auth_token",
12+
"delaySendMessagesMilliseconds": 5000,
13+
"markIncomingMessagesReaded": "yes",
14+
"markIncomingMessagesReadedOnReply": "yes",
15+
"outgoingWebhook": "yes",
16+
"outgoingMessageWebhook": "yes",
17+
"outgoingAPIMessageWebhook": "yes",
18+
"stateWebhook": "yes",
19+
"incomingWebhook": "yes",
20+
"deviceWebhook": "yes",
21+
"keepOnlineStatus": "yes",
22+
"pollMessageWebhook": "yes",
23+
"incomingBlockWebhook": "yes",
24+
"incomingCallWebhook": "yes",
25+
"editedMessageWebhook": "yes",
26+
"deletedMessageWebhook": "yes"
27+
}
28+
29+
response = greenAPI.account.setSettings(settings)
30+
print(response.data)
31+
32+
33+
if __name__ == '__main__':
34+
main()

whatsapp_api_client_python/API.py

Lines changed: 8 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -79,14 +79,18 @@ def request(
7979
url = url.replace("{{idInstance}}", self.idInstance)
8080
url = url.replace("{{apiTokenInstance}}", self.apiTokenInstance)
8181

82+
headers = {
83+
'User-Agent': 'GREEN-API_SDK_PY/1.0'
84+
}
85+
8286
try:
8387
if not files:
8488
response = self.session.request(
85-
method=method, url=url, json=payload, timeout=self.host_timeout
89+
method=method, url=url, json=payload, timeout=self.host_timeout, headers=headers
8690
)
8791
else:
8892
response = self.session.request(
89-
method=method, url=url, data=payload, files=files, timeout=self.media_timeout
93+
method=method, url=url, data=payload, files=files, timeout=self.media_timeout, headers=headers
9094
)
9195
except Exception as error:
9296
error_message = f"Request was failed with error: {error}."
@@ -185,23 +189,13 @@ def __init__(
185189
self,
186190
partnerToken: str,
187191
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
192+
host: str = "https://api.green-api.com"
194193
):
195194

196195
super().__init__(
197196
idInstance="",
198197
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
198+
host=host
205199
)
206200

207201
self.partnerToken = partnerToken
Lines changed: 28 additions & 47 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
from typing import Optional, TYPE_CHECKING
1+
from typing import Dict, TYPE_CHECKING, Union
22

33
from ..response import Response
44

@@ -8,57 +8,43 @@
88
class Partner:
99
def __init__(self, api: "GreenApiPartner"):
1010
self.api = api
11+
12+
def getInstances(self) -> Response:
13+
"""
14+
The method is aimed for getting all the account instances created by the partner.
1115
12-
def getInstances(
13-
self
14-
) -> Response:
15-
16-
request_body = self.__handle_parameters(locals())
16+
https://green-api.com/en/docs/partners/getInstances/
17+
"""
1718

1819
return self.api.request(
1920
"GET", (
2021
"{{host}}/partner/"
2122
"getInstances/{{partnerToken}}"
22-
), request_body
23+
)
2324
)
2425

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())
26+
def createInstance(self, requestBody: Dict[str, Union[int, str]]) -> Response:
27+
"""
28+
The method is aimed for creating a messenger account instance on the partner's part.
29+
30+
https://green-api.com/en/docs/partners/createInstance/
31+
"""
4832

4933
return self.api.request(
5034
"POST", (
5135
"{{host}}/partner/"
5236
"createInstance/{{partnerToken}}"
53-
), request_body
37+
), requestBody
5438
)
5539

56-
def deleteInstanceAccount(
57-
self,
58-
idInstance: int
59-
) -> Response:
40+
def deleteInstanceAccount(self, idInstance: int) -> Response:
41+
"""
42+
The method is aimed for deleting an instance of the partners's account.
43+
44+
https://green-api.com/en/docs/partners/deleteInstanceAccount/
45+
"""
6046

61-
request_body = self.__handle_parameters(locals())
47+
request_body = self.handle_parameters(locals())
6248

6349
return self.api.request(
6450
"POST", (
@@ -67,14 +53,9 @@ def deleteInstanceAccount(
6753
), request_body
6854
)
6955

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
56+
def handle_parameters(self, parameters: dict) -> dict:
57+
return {
58+
key: value
59+
for key, value in parameters.items()
60+
if value is not None and key != "self"
61+
}

0 commit comments

Comments
 (0)