def _parse_source(self): try: with open(self.source, mode='r') as file: item = unicode(file.read()) except UnicodeDecodeError: with open(self.source, mode='r', encoding='UTF-8') as file: item = file.read() self._file_contents_raw = item parsed_content = re.match(self._regex, item) if parsed_content is None or parsed_content.group('metadata') is None: # Parsing failed, maybe there's no metadata raise PostMetadataError() if parsed_content.group('fence') is not None: self._fence = True # 'Clean' the YAML section since there might be tab characters metadata = parsed_content.group('metadata').replace('\t', ' ') try: metadata = yaml.load(metadata) except ScannerError: raise PostMetadataError("YAML error parsing metadata.") if not isinstance(metadata, dict): raise PostMetadataError( "Metadata isn't a dict. Instead, it's a %s." % type(metadata)) # Make the metadata dict case insensitive metadata = CaseInsensitiveDict(metadata) content = parsed_content.group('content') return metadata, content
class CaseInsensitiveDictTests(TestCase): def setUp(self): self.normal_dict = {"One": 1, "Two": 2} self.cid = CaseInsensitiveDict(self.normal_dict) def access_test(self): self.assertEqual(self.cid["one"], self.cid["OnE"]) self.assertIs(self.cid.get("not_present", None), None) def assignment_test(self): self.cid["Three"] = 3 self.assertEqual(self.cid["three"], 3) def del_test(self): del self.cid["one"] self.assertNotIn("One", self.cid) self.assertEqual(len(self.cid), 1) def pop_test(self): self.assertIsNotNone(self.cid.pop("two", None)) self.assertRaises(KeyError, self.cid.pop, "pop")
def _wrapped_view(request, *args, **kwargs): qsp = CaseInsensitiveDict(request.REQUEST) kw = CaseInsensitiveDict(kwargs) try: provided_token = qsp['access_token'] except KeyError: return HttpResponseForbidden() if 'id' in kw: resource_id = kw['id'] elif 'file_id' in kw: resource_id = kw['file_id'] elif 'resource_id' in kw: resource_id = kw['resource_id'] else: return HttpResponseForbidden() user = authenticate(access_token=provided_token, resource_id=resource_id) if user: login(request, user) return view_func(request, *args, **kwargs) return HttpResponseForbidden()
def setUp(self): self.normal_dict = {"One": 1, "Two": 2} self.cid = CaseInsensitiveDict(self.normal_dict)