9
9
:copyright: (c) 2019 by Akop Kesheshyan.
10
10
11
11
"""
12
+ import warnings
13
+
12
14
import requests
13
15
from time import sleep
14
16
from urllib .parse import urlparse
@@ -27,13 +29,14 @@ class Bitrix24(object):
27
29
>>> bx24.callMethod('crm.product.list')
28
30
"""
29
31
30
- def __init__ (self , domain , timeout = 60 ):
32
+ def __init__ (self , domain , timeout = 60 , safe = True ):
31
33
"""Create Bitrix24 API object
32
34
:param domain: str Bitrix24 webhook domain
33
35
:param timeout: int Timeout for API request in seconds
34
36
"""
35
37
self .domain = self ._prepare_domain (domain )
36
38
self .timeout = timeout
39
+ self .safe = safe
37
40
38
41
def _prepare_domain (self , domain ):
39
42
"""Normalize user passed domain to a valid one."""
@@ -85,9 +88,21 @@ def callMethod(self, method, **params):
85
88
p = self ._prepare_params (params )
86
89
87
90
if method .rsplit ('.' , 1 )[0 ] in ['add' , 'update' , 'delete' , 'set' ]:
88
- r = requests .post (url , data = p , timeout = self .timeout ).json ()
91
+ r = requests .post (url , data = p , timeout = self .timeout , verify = self . safe ).json ()
89
92
else :
90
- r = requests .get (url , params = p , timeout = self .timeout ).json ()
93
+ r = requests .get (url , params = p , timeout = self .timeout , verify = self .safe )
94
+ try :
95
+ r = r .json ()
96
+ except requests .exceptions .JSONDecodeError as e :
97
+ warnings .warn ("bitrix24: JSON decode error..." )
98
+ if r .status_code == 403 :
99
+ warnings .warn (f"bitrix24: Forbidden: { method } . Check your bitrix24 webhook settings. Returning None! " )
100
+ return None
101
+ elif r .ok :
102
+ return r .content
103
+
104
+
105
+
91
106
except ValueError :
92
107
if r ['error' ] not in 'QUERY_LIMIT_EXCEEDED' :
93
108
raise BitrixError (r )
0 commit comments