def _ek(self): if self.ek: return self.ek if not self.ek and self.pk: return base64.encode(self.pk) return self.ek
def __fnv_hash(key): h = 2166136261 for k in key: h = (h * 16777619) ^ ord(k) # Return 8 bit URL return base64.encode(h % 281474976710656)
def generate_encoded_pk(self, sender, **kwargs): instance = kwargs['instance'] field_name = instance._base64field_name if getattr(instance, field_name) in ['', None]: from django.utils.baseconv import base64 obj_pk = instance.pk sender._default_manager.filter(pk=obj_pk).update( **{field_name: base64.encode(obj_pk)})
def generate_encoded_pk(self, sender, **kwargs): instance = kwargs['instance'] field_name = instance._base64field_name if getattr(instance, field_name) in ['', None]: from django.utils.baseconv import base64 obj_pk = instance.pk sender._default_manager.filter(pk=obj_pk).update( **{field_name: base64.encode(obj_pk)} )
def test_field_not_none_after_saved(self): """ After `Planet` has been created, `Planet.ek` will be available on next time of getting `planet` from database. Why? ---- Because after `planet` get created, `post_save` signal of `Planet` will emitted, This is where `ek` field will be set from ``base64`` encoded value based on `pk`. """ planet = Planet.objects.create() base64_key = base64.encode(planet.pk) same_planet_but_fresh = Planet.objects.get(pk=planet.pk) self.assertEqual(same_planet_but_fresh.ek, base64_key) self.assertNotEqual(planet.ek, same_planet_but_fresh.ek)
def uuid_bits(bits=64): """ Renvoyer un pseudo-UUID sur n bits, en base64 Note: 6 bits = 1 caractère :param bits: nombre de bits de l'UUID. Entre 16 et 1024 :returns: une chaîne en base64 représentant une valeur 'uuid' sur n bits """ bits = min(1024, max(16, bits)) val_shift = 1 total = 0 while bits > 128: value = str(uuid.uuid4()).replace('-', '') total += int(value, 16) * val_shift bits -= 128 val_shift *= 2**128 value = str(uuid.uuid4()).replace('-', '') total += (int(value, 16) >> (128 - bits)) * val_shift output = base64.encode(total) return output
def test_field_for_fk_not_none_after_creation(self): """ So I want to create new `Continent` for my new shiny funky punky ass `Planet` that I've just created, It's easy, just retrieving new planet from database to make `ek` available for it, Then it will be f*****g freaking ok to assign the fresh `Planet` to our sucker `Continent`. """ planet = Planet.objects.create() same_planet_but_fresh = Planet.objects.get(pk=planet.pk) continent = Continent.objects.create(planet=same_planet_but_fresh) self.assertIsNotNone(continent) self.assertIsInstance(continent, Continent) self.assertIn(continent.ek, ['', None]) continent_pk = continent.pk same_continent_but_fresh = Continent.objects.get(pk=continent_pk) self.assertNotEqual(same_continent_but_fresh.ek, continent.ek) self.assertEqual(same_continent_but_fresh.ek, base64.encode(continent_pk))
def tiny(self): return base64.encode(self.pk)
def test_base64(self): self.assertEqual(base64.encode(1234), 'JI') self.assertEqual(base64.decode('JI'), 1234) self.assertEqual(base64.encode(-1234), '$JI') self.assertEqual(base64.decode('$JI'), -1234)
def int_shorten(value): """ Renvoyer la représentation Base64 d'un entier """ result = base64.encode(value) return result
def test_base64(self): self.assertEqual(base64.encode(1234), "JI") self.assertEqual(base64.decode("JI"), 1234) self.assertEqual(base64.encode(-1234), "$JI") self.assertEqual(base64.decode("$JI"), -1234)