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
MultipartBuilder(platform)
 7    def __init__(self, platform):
 8        self._body = None
 9        self._contents = []
10        self._boundary = ''
11        self._multipart_mixed = False
12        self._platform = platform
def set_multipart_mixed(self, multipart_mixed):
14    def set_multipart_mixed(self, multipart_mixed):
15        self._multipart_mixed = multipart_mixed
16        return self
def set_body(self, body):
18    def set_body(self, body):
19        self._body = body
20        return self
def body(self):
22    def body(self):
23        return self._body
def contents(self):
25    def contents(self):
26        return self._contents
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:

  1. Downloaded: ('filename.ext', urllib.urlopen('https://...').read(), 'image/png')
  2. Local file: ('report.xls', open('report.xls', 'rb'), 'application/vnd.ms-excel', {'Expires': '0'})
  3. Direct local file w/o meta: open('report.xls', 'rb')
  4. 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