def test_init(self): seq = {'red': 1, 'black': 3} d = CaselessDict(seq) self.assertEqual(d['red'], 1) self.assertEqual(d['black'], 3) seq = (('red', 1), ('black', 3)) d = CaselessDict(seq) self.assertEqual(d['red'], 1) self.assertEqual(d['black'], 3)
def _headers_to_botocore_kwargs(self, headers): """ Convert headers to botocore keyword agruments. """ # This is required while we need to support both boto and botocore. mapping = CaselessDict({ 'Content-Type': 'ContentType', 'Cache-Control': 'CacheControl', 'Content-Disposition': 'ContentDisposition', 'Content-Encoding': 'ContentEncoding', 'Content-Language': 'ContentLanguage', 'Content-Length': 'ContentLength', 'Content-MD5': 'ContentMD5', 'Expires': 'Expires', 'X-Amz-Grant-Full-Control': 'GrantFullControl', 'X-Amz-Grant-Read': 'GrantRead', 'X-Amz-Grant-Read-ACP': 'GrantReadACP', 'X-Amz-Grant-Write-ACP': 'GrantWriteACP', }) extra = {} for key, value in six.iteritems(headers): try: kwarg = mapping[key] except KeyError: raise TypeError( 'Header "%s" is not supported by botocore' % key) else: extra[kwarg] = value return extra
def make_headers(self, headers): headers = CaselessDict(headers) if 'user-agent' in headers: self.user_agent = headers.pop('user-agent') self.cookies = self.make_cookies(headers.pop('cookie', {})) self.headers = headers
def to_unicode_dict(d): """ Return headers as a CaselessDict with unicode keys and unicode values. Multiple values are joined with ','. """ return CaselessDict((to_unicode(key, encoding='utf-8'), to_unicode(b','.join(value), encoding='utf-8')) for key, value in d.items())
def _make_scrapy_request(self, request_from_browser, callback, errback): headers = CaselessDict(request_from_browser.headers) # Scrapy will set Content-Length if it is needed. headers.pop(b'Content-Length', None) # TODO: allow user to set a key on parent request and set it on all # requests from it. cookiejarkey = request_from_browser.cookiejarkey meta = { # XXX: could handle redirects on this side to avoid round-trips. 'dont_redirect': True, 'handle_httpstatus_all': True, 'from_browser': True, 'browser_page_first_request': request_from_browser.is_first_request, 'dont_merge_cookies': (cookiejarkey is None), 'cookiejar': cookiejarkey } # TODO: increase priority. return _BrowserDownloadRequest(url=request_from_browser.url, method=request_from_browser.method, headers=headers, body=request_from_browser.body, dont_filter=True, meta=meta, callback=callback, errback=errback)
def to_unicode_dict(self): """Return headers as a CaselessDict with unicode keys and unicode values. Multiple values are joined with ','. """ return CaselessDict(( to_unicode(key, encoding=self.encoding), to_unicode(b",".join(value), encoding=self.encoding), ) for key, value in self.items())
def test_caseless(self): d = CaselessDict() d['key_Lower'] = 1 self.assertEqual(d['KEy_loWer'], 1) self.assertEqual(d.get('KEy_loWer'), 1) d['KEY_LOWER'] = 3 self.assertEqual(d['key_Lower'], 3) self.assertEqual(d.get('key_Lower'), 3)
def test_setdefault(self): d = CaselessDict({'a': 1, 'b': 2}) r = d.setdefault('A', 5) self.assertEqual(r, 1) self.assertEqual(d['A'], 1) r = d.setdefault('c', 5) self.assertEqual(r, 5) self.assertEqual(d['C'], 5)
def test_init_mapping(self): class MyMapping(Mapping): def __init__(self, **kwargs): self._d = kwargs def __getitem__(self, key): return self._d[key] def __iter__(self): return iter(self._d) def __len__(self): return len(self._d) seq = MyMapping(red=1, black=3) d = CaselessDict(seq) self.assertEqual(d['red'], 1) self.assertEqual(d['black'], 3)
def test_fromkeys(self): keys = ('a', 'b') d = CaselessDict.fromkeys(keys) self.assertEqual(d['A'], None) self.assertEqual(d['B'], None) d = CaselessDict.fromkeys(keys, 1) self.assertEqual(d['A'], 1) self.assertEqual(d['B'], 1) instance = CaselessDict() d = instance.fromkeys(keys) self.assertEqual(d['A'], None) self.assertEqual(d['B'], None) d = instance.fromkeys(keys, 1) self.assertEqual(d['A'], 1) self.assertEqual(d['B'], 1)
def _headers_to_botocore_kwargs(self, headers): """ Convert headers to botocore keyword agruments. """ # This is required while we need to support both boto and botocore. mapping = CaselessDict({ 'Content-Type': 'ContentType', 'Cache-Control': 'CacheControl', 'Content-Disposition': 'ContentDisposition', 'Content-Encoding': 'ContentEncoding', 'Content-Language': 'ContentLanguage', 'Content-Length': 'ContentLength', 'Content-MD5': 'ContentMD5', 'Expires': 'Expires', 'X-Amz-Grant-Full-Control': 'GrantFullControl', 'X-Amz-Grant-Read': 'GrantRead', 'X-Amz-Grant-Read-ACP': 'GrantReadACP', 'X-Amz-Grant-Write-ACP': 'GrantWriteACP', 'X-Amz-Object-Lock-Legal-Hold': 'ObjectLockLegalHoldStatus', 'X-Amz-Object-Lock-Mode': 'ObjectLockMode', 'X-Amz-Object-Lock-Retain-Until-Date': 'ObjectLockRetainUntilDate', 'X-Amz-Request-Payer': 'RequestPayer', 'X-Amz-Server-Side-Encryption': 'ServerSideEncryption', 'X-Amz-Server-Side-Encryption-Aws-Kms-Key-Id': 'SSEKMSKeyId', 'X-Amz-Server-Side-Encryption-Context': 'SSEKMSEncryptionContext', 'X-Amz-Server-Side-Encryption-Customer-Algorithm': 'SSECustomerAlgorithm', 'X-Amz-Server-Side-Encryption-Customer-Key': 'SSECustomerKey', 'X-Amz-Server-Side-Encryption-Customer-Key-Md5': 'SSECustomerKeyMD5', 'X-Amz-Storage-Class': 'StorageClass', 'X-Amz-Tagging': 'Tagging', 'X-Amz-Website-Redirect-Location': 'WebsiteRedirectLocation', }) extra = {} for key, value in six.iteritems(headers): try: kwarg = mapping[key] except KeyError: raise TypeError( 'Header "%s" is not supported by botocore' % key) else: extra[kwarg] = value return extra
def _headers_to_azure_content_kwargs(self, headers): """ Convert headers to Azure content settings keyword agruments. """ # This is required while we need to support both boto and botocore. mapping = CaselessDict({ 'Content-Type': 'content_type', 'Cache-Control': 'cache_control', 'Content-Disposition': 'content_disposition', 'Content-Encoding': 'content_encoding', 'Content-Language': 'content_language', 'Content-MD5': 'content_md5', }) extra = {} for key, value in six.iteritems(headers): try: kwarg = mapping[key] except KeyError: raise TypeError('Header "%s" is not supported by Azure' % key) else: extra[kwarg] = value return extra
def test_pop(self): d = CaselessDict() d['a'] = 1 self.assertEqual(d.pop('A'), 1) self.assertRaises(KeyError, d.pop, 'A')
def test_contains(self): d = CaselessDict() d['a'] = 1 assert 'a' in d
def test_contains(self): d = CaselessDict() d['a'] = 1 assert 'a' in d assert d.has_key('a')
def test_init_dict(self): seq = {'red': 1, 'black': 3} d = CaselessDict(seq) self.assertEqual(d['red'], 1) self.assertEqual(d['black'], 3)
def test_getdefault(self): d = CaselessDict() self.assertEqual(d.get('c', 5), 5) d['c'] = 10 self.assertEqual(d.get('c', 5), 10)
def test_delete(self): d = CaselessDict({'key_lower': 1}) del d['key_LOWER'] self.assertRaises(KeyError, d.__getitem__, 'key_LOWER') self.assertRaises(KeyError, d.__getitem__, 'key_lower')
def test_init_pair_sequence(self): seq = (('red', 1), ('black', 3)) d = CaselessDict(seq) self.assertEqual(d['red'], 1) self.assertEqual(d['black'], 3)
def test_copy(self): h1 = CaselessDict({'header1': 'value'}) h2 = copy.copy(h1) self.assertEqual(h1, h2) self.assertEqual(h1.get('header1'), h2.get('header1')) assert isinstance(h2, CaselessDict)