def test_encode_multipart(self): data = {'key': 'value'} body, boundary = encode_multipart(data) expected_body = ( '\r\n--{boundary}' '\r\nContent-Disposition: form-data; name="key"\r\n' '\r\nvalue' '\r\n--{boundary}--' '\r\n'.format(boundary=boundary).encode('utf8') ) self.assertEqual(body, expected_body)
def test_encode_multipart_file(self): # this data is not decodable using utf8 data = {'key': ('file/name', b'\xa1\xa2\xa3\xa4\r\n\r')} body, boundary = encode_multipart(data) body_lines = [ b'\r\n--' + boundary.encode('ascii'), b'\r\nContent-Disposition: form-data; name="key"; filename="file/name"\r\n', b'\r\n\xa1\xa2\xa3\xa4\r\n\r', b'\r\n--' + boundary.encode('ascii') + b'--\r\n', ] expected_body = b''.join(body_lines) self.assertEqual(body, expected_body)
def _http_post(self, json_interface, data): url = self._get_server_url() + "/" + json_interface if data: body, boundary = encode_multipart(data) headers = { 'Content-Type': 'multipart/form-data; boundary=%s' % boundary, 'Content-Length': str(len(body)), } self._log("_http_post: url=%s with body=%s, from data=%s" % (url, body, data)) req = urllib2.Request(url, body, headers) self._add_auth_header(req) return self._get_response(req)
def test_encode_multipart_unicode(self): data = OrderedDict([ (u'ключ1', u'значение1'.encode('utf8')), (u'ключ2', u'значение2'), ]) body, boundary = encode_multipart(data) expected_body = ( u'\r\n--{boundary}' u'\r\nContent-Disposition: form-data; name="ключ1"\r\n' u'\r\nзначение1' u'\r\n--{boundary}' u'\r\nContent-Disposition: form-data; name="ключ2"\r\n' u'\r\nзначение2' u'\r\n--{boundary}--' u'\r\n'.format(boundary=boundary).encode('utf8') ) self.assertEqual(body, expected_body)
def _upload_egg(target, eggpath, project, version): with open(eggpath, 'rb') as f: eggdata = f.read() data = { 'project': project, 'version': version, 'egg': ('project.egg', eggdata), } body, boundary = encode_multipart(data) url = _url(target, 'addversion.json') headers = { 'Content-Type': 'multipart/form-data; boundary=%s' % boundary, 'Content-Length': str(len(body)), } req = urllib2.Request(url, body, headers) _add_auth_header(req, target) _log("Deploying %s-%s to %s" % (project, version, url)) _http_post(req)
def _upload_egg(self, target, eggpath, project, version): with open(eggpath, 'rb') as f: eggdata = f.read() data = { 'project': project, 'version': version, 'egg': ('project.egg', eggdata), } body, boundary = encode_multipart(data) url = self._get_url(target) headers = { 'Content-Type': 'multipart/form-data; boundary=%s' % boundary, 'Content-Length': str(len(body)), } print 'Deploying to project "%s" in %s' % (project, url) result = self._do_post(url, body, headers) return result
def _upload_egg(self, eggpath, project, version ): with open(eggpath, 'rb' ) as f : eggdata = f.read() data = { 'project': project, 'version' : version, 'egg' : ('project.egg', eggdata), } body, boundary = encode_multipart(data) #url = _url(target, 'addversion.json') url = "%s/addversion.json" % settings.SCRAPYD_URL headers = { 'Content-Type': 'multipart/form-data; boundary=%s' % boundary, 'Content-Length': str(len(body)), } req = urllib2.Request(url, body, headers) #_add_auth_header(req, target) self._log('Deploying to project "%s" in %s' % (project, url)) return self._http_post(req)