예제 #1
0
    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)
예제 #2
0
 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
예제 #3
0
    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
예제 #4
0
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())
예제 #5
0
    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)
예제 #6
0
 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())
예제 #7
0
    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)
예제 #8
0
    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)
예제 #10
0
    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)
예제 #11
0
 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
예제 #12
0
 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
예제 #13
0
 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
예제 #15
0
 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)
예제 #17
0
 def test_getdefault(self):
     d = CaselessDict()
     self.assertEqual(d.get('c', 5), 5)
     d['c'] = 10
     self.assertEqual(d.get('c', 5), 10)
예제 #18
0
 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)
예제 #20
0
 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)