ringcentral.http.multipart_builder
1import json 2import requests 3 4 5class MultipartBuilder: 6 def __init__(self, platform): 7 self._body = None 8 self._contents = [] 9 self._boundary = '' 10 self._multipart_mixed = False 11 self._platform = platform 12 13 def set_multipart_mixed(self, multipart_mixed): 14 self._multipart_mixed = multipart_mixed 15 return self 16 17 def set_body(self, body): 18 self._body = body 19 return self 20 21 def body(self): 22 return self._body 23 24 def contents(self): 25 return self._contents 26 27 def add(self, attachment, name='attachment'): 28 """ 29 Possible attachment formats: 30 31 1. Downloaded: ('filename.ext', urllib.urlopen('https://...').read(), 'image/png') 32 2. Local file: ('report.xls', open('report.xls', 'rb'), 'application/vnd.ms-excel', {'Expires': '0'}) 33 3. Direct local file w/o meta: open('report.xls', 'rb') 34 4. Plain text: ('report.csv', 'some,data,to,send') 35 36 :param attachment: 37 :param name='attachment': 38 :return: 39 """ 40 self._contents.append((name, attachment)) 41 return self 42 43 def request(self, url, method='POST'): 44 files = [('json', ('request.json', json.dumps(self._body), 'application/json'))] + self._contents 45 request = requests.Request(method, url, files=files) 46 if self._multipart_mixed: # Ref: https://github.com/requests/requests/issues/1736#issuecomment-28470217 47 request.url = self._platform.create_url(request.url, add_server=True) # prepare requires full url 48 request = request.prepare() 49 request.headers['Content-Type'] = request.headers['Content-Type'].replace('multipart/form-data;', 'multipart/mixed;') 50 return request
class
MultipartBuilder:
6class MultipartBuilder: 7 def __init__(self, platform): 8 self._body = None 9 self._contents = [] 10 self._boundary = '' 11 self._multipart_mixed = False 12 self._platform = platform 13 14 def set_multipart_mixed(self, multipart_mixed): 15 self._multipart_mixed = multipart_mixed 16 return self 17 18 def set_body(self, body): 19 self._body = body 20 return self 21 22 def body(self): 23 return self._body 24 25 def contents(self): 26 return self._contents 27 28 def add(self, attachment, name='attachment'): 29 """ 30 Possible attachment formats: 31 32 1. Downloaded: ('filename.ext', urllib.urlopen('https://...').read(), 'image/png') 33 2. Local file: ('report.xls', open('report.xls', 'rb'), 'application/vnd.ms-excel', {'Expires': '0'}) 34 3. Direct local file w/o meta: open('report.xls', 'rb') 35 4. Plain text: ('report.csv', 'some,data,to,send') 36 37 :param attachment: 38 :param name='attachment': 39 :return: 40 """ 41 self._contents.append((name, attachment)) 42 return self 43 44 def request(self, url, method='POST'): 45 files = [('json', ('request.json', json.dumps(self._body), 'application/json'))] + self._contents 46 request = requests.Request(method, url, files=files) 47 if self._multipart_mixed: # Ref: https://github.com/requests/requests/issues/1736#issuecomment-28470217 48 request.url = self._platform.create_url(request.url, add_server=True) # prepare requires full url 49 request = request.prepare() 50 request.headers['Content-Type'] = request.headers['Content-Type'].replace('multipart/form-data;', 'multipart/mixed;') 51 return request
def
add(self, attachment, name='attachment'):
28 def add(self, attachment, name='attachment'): 29 """ 30 Possible attachment formats: 31 32 1. Downloaded: ('filename.ext', urllib.urlopen('https://...').read(), 'image/png') 33 2. Local file: ('report.xls', open('report.xls', 'rb'), 'application/vnd.ms-excel', {'Expires': '0'}) 34 3. Direct local file w/o meta: open('report.xls', 'rb') 35 4. Plain text: ('report.csv', 'some,data,to,send') 36 37 :param attachment: 38 :param name='attachment': 39 :return: 40 """ 41 self._contents.append((name, attachment)) 42 return self
Possible attachment formats:
- Downloaded: ('filename.ext', urllib.urlopen('https://...').read(), 'image/png')
- Local file: ('report.xls', open('report.xls', 'rb'), 'application/vnd.ms-excel', {'Expires': '0'})
- Direct local file w/o meta: open('report.xls', 'rb')
- Plain text: ('report.csv', 'some,data,to,send')
Parameters
- attachment:
- name='attachment':
Returns
def
request(self, url, method='POST'):
44 def request(self, url, method='POST'): 45 files = [('json', ('request.json', json.dumps(self._body), 'application/json'))] + self._contents 46 request = requests.Request(method, url, files=files) 47 if self._multipart_mixed: # Ref: https://github.com/requests/requests/issues/1736#issuecomment-28470217 48 request.url = self._platform.create_url(request.url, add_server=True) # prepare requires full url 49 request = request.prepare() 50 request.headers['Content-Type'] = request.headers['Content-Type'].replace('multipart/form-data;', 'multipart/mixed;') 51 return request