def request(self, method, uri, **kwargs): data = kwargs.get("data") if data is not None: udata = {} for k, v in data.items(): key = k.encode("utf-8") if isinstance(v, (list, tuple, set)): udata[key] = [encode_atom(x) for x in v] elif isinstance(v, (int, bytes, str)): udata[key] = encode_atom(v) else: raise ValueError("data should be an integer, " "binary, or string, or sequence ") data = urlencode(udata, doseq=True) del kwargs["auth"] event = HttpEvent(method, uri, data) if "/messages" in uri.lower() or "/calls" in uri.lower(): self.events.append(event) resp = super().request(method, uri, auth=self.auth, **kwargs) event.url = uri event.status_code = resp.status_code event.response_body = force_text(resp.content) return resp
def request(self, method, uri, **kwargs): """ Send an HTTP request to the resource. :raises: a :exc:`~twilio.TwilioRestException` """ if 'timeout' not in kwargs and self.timeout is not UNSET_TIMEOUT: kwargs['timeout'] = self.timeout data = kwargs.get('data') if data is not None: udata = {} for k, v in six.iteritems(data): key = k.encode('utf-8') if isinstance(v, (list, tuple, set)): udata[key] = [encode_atom(x) for x in v] elif isinstance(v, (six.integer_types, six.binary_type, six.string_types)): udata[key] = encode_atom(v) else: raise ValueError('data should be an integer, ' 'binary, or string, or sequence ') data = urlencode(udata, doseq=True) event = HttpEvent(method, uri, data) self.events.append(event) resp = make_twilio_request(method, uri, auth=self.auth, **kwargs) event.url = resp.url event.status_code = resp.status_code event.response_body = six.text_type(resp.content) if method == "DELETE": return resp, {} else: return resp, json.loads(resp.content)