Exemple #1
0
 def from_json(cls, data):
     """Parse the JSON data and produce an index."""
     mapping = json.loads(data)
     # Parse the global data, of which there is only the timestamp.  Even
     # though the string will contain 'UTC' (which we assert is so since we
     # can only handle UTC timestamps), strptime() will return a naive
     # datetime.  We'll turn it into an aware datetime in UTC, which is the
     # only thing that can possibly make sense.
     timestamp_str = mapping['global']['generated_at']
     assert 'UTC' in timestamp_str.split(), 'timestamps must be UTC'
     naive_generated_at = datetime.strptime(timestamp_str, IN_FMT)
     generated_at = naive_generated_at.replace(tzinfo=timezone.utc)
     global_ = Bag(generated_at=generated_at)
     # Parse the images.
     images = []
     for image_data in mapping['images']:
         # Descriptions can be any of:
         #
         # * description
         # * description-xx (e.g. description-en)
         # * description-xx_CC (e.g. description-en_US)
         #
         # We want to preserve the keys exactly as given, and because the
         # extended forms are not Python identifiers, we'll pull these out
         # into a separate, non-Bag dictionary.
         descriptions = {}
         # We're going to mutate the dictionary during iteration.
         for key in list(image_data):
             if key.startswith('description'):
                 descriptions[key] = image_data.pop(key)
         files = image_data.pop('files', [])
         bundles = [Bag(**bundle_data) for bundle_data in files]
         image = Image(files=bundles,
                       descriptions=descriptions,
                       **image_data)
         images.append(image)
     return cls(global_=global_, images=images)
Exemple #2
0
 def test_full_equal(self):
     image_1 = Image(type='full', version=17)
     image_2 = Image(type='full', version=17)
     self.assertEqual(image_1, image_2)
Exemple #3
0
 def test_delta_with_more_info(self):
     image = Image(type='delta', version=99, base=83)
     self.assertEqual(hash(image), 0b00000000011000110000000001010011)
Exemple #4
0
 def test_delta_includes_base(self):
     image = Image(type='delta', version=3, base=2)
     self.assertEqual(hash(image), 0b00000000000000110000000000000010)
Exemple #5
0
 def test_full_hash_ignores_base(self):
     image = Image(type='full', version=3, base=2)
     self.assertEqual(hash(image), 0b00000000000000110000000000000000)
Exemple #6
0
 def test_full_hash(self):
     image = Image(type='full', version=3)
     self.assertEqual(hash(image), 0b00000000000000110000000000000000)
Exemple #7
0
 def test_explicit_phased_percentage(self):
     kws = dict(type='full', version=10)
     kws['phased-percentage'] = '39'
     image = Image(**kws)
     self.assertEqual(image.phased_percentage, 39)
Exemple #8
0
 def test_default_phased_percentage(self):
     image = Image(type='full', version=10)
     self.assertEqual(image.phased_percentage, 100)
Exemple #9
0
 def test_full_delta_with_base_inequal(self):
     image_1 = Image(type='full', version=400, base=300)
     image_2 = Image(type='delta', version=400, base=300)
     self.assertNotEqual(image_1, image_2)
Exemple #10
0
 def test_full_equal_ignores_missing_base(self):
     image_1 = Image(type='full', version=400, base=300)
     image_2 = Image(type='full', version=400)
     self.assertEqual(image_1, image_2)
Exemple #11
0
 def test_full_inequal(self):
     image_1 = Image(type='full', version=400)
     image_2 = Image(type='full', version=401)
     self.assertNotEqual(image_1, image_2)
Exemple #12
0
 def test_mixed_regime_reversed_rejects(self):
     self.assertRaises(AssertionError, hash,
                       Image(type='delta', version=20130899, base=3))
Exemple #13
0
 def test_mixed_regime_full_okay(self):
     self.assertEqual(hash(Image(type='full', version=3, base=20130899)),
                      0b00000000000000110000000000000000)
Exemple #14
0
 def test_17bit_version_rejects(self):
     self.assertRaises(AssertionError, hash,
                       Image(type='full', version=1 << 16))
Exemple #15
0
 def test_signed_version_rejects(self):
     self.assertRaises(AssertionError, hash, Image(type='full', version=-1))