Exemplo n.º 1
0
 def test_or(self):
     self.assertEquals(1 | Bit(2), 5)
     self.assertEquals(1 | Bit(5), 33)
     self.assertEquals(1 | ~Bit(2), -5)
     self.assertEquals(Bit(0) | Bit(2), 5)
     self.assertEquals(Bit(0) | Bit(5), 33)
     self.assertEquals(Bit(0) | ~Bit(2), -5)
Exemplo n.º 2
0
 def test_and(self):
     self.assertEquals(1 & Bit(2), 0)
     self.assertEquals(1 & Bit(0), 1)
     self.assertEquals(1 & ~Bit(0), 0)
     self.assertEquals(Bit(0) & Bit(2), 0)
     self.assertEquals(Bit(0) & Bit(0), 1)
     self.assertEquals(Bit(0) & ~Bit(0), 0)
Exemplo n.º 3
0
    def __init__(self, flags, default=None, *args, **kwargs):
        if isinstance(flags, dict):
            # Get only integer keys in correct range
            valid_keys = (k for k in flags.keys()
                          if isinstance(k, int) and (0 <= k < MAX_FLAG_COUNT))
            if not valid_keys:
                raise ValueError('Wrong keys or empty dictionary')
            # Fill list with values from dict or with empty values
            flags = [flags.get(i, '') for i in range(max(valid_keys) + 1)]

        if len(flags) > MAX_FLAG_COUNT:
            raise ValueError('Too many flags')

        flags = list(flags)
        labels = []
        for num, flag in enumerate(flags):
            if isinstance(flag, (tuple, list)):
                flags[num] = flag[0]
                labels.append(flag[1])
            else:
                labels.append(flag)

        if isinstance(default, (list, tuple, set, frozenset)):
            new_value = 0
            for flag in default:
                new_value |= Bit(flags.index(flag))
            default = new_value

        BigIntegerField.__init__(self, default=default, *args, **kwargs)
        self.flags = flags
        self.labels = labels
Exemplo n.º 4
0
 def set_bit(self, bit_number, true_or_false):
     mask = 2**int(bit_number)
     if true_or_false:
         self._value |= mask
     else:
         self._value &= (~mask)
     return Bit(bit_number, self._value & mask != 0)
Exemplo n.º 5
0
 def choices(self, cl):
     yield {
         'selected': self.lookup_val == 0,
         'query_string': cl.get_query_string({}, [self.lookup_kwarg]),
         'display': _('All'),
     }
     for number, flag in enumerate(self.flags):
         bit_mask = Bit(number).mask
         yield {
             'selected': self.lookup_val == bit_mask,
             'query_string': cl.get_query_string({self.lookup_kwarg: bit_mask}),
             'display': self.labels[number],
         }
Exemplo n.º 6
0
 def choices(self, cl):
     yield {
         "selected": self.lookup_val == 0,
         "query_string": cl.get_query_string({}, [self.lookup_kwarg]),
         "display": _("All"),
     }
     for number, flag in enumerate(self.flags):
         bit_mask = Bit(number).mask
         yield {
             "selected": self.lookup_val == bit_mask,
             "query_string": cl.get_query_string({self.lookup_kwarg: bit_mask}),
             "display": self.labels[number],
         }
Exemplo n.º 7
0
 def test_xor(self):
     self.assertEquals(1 ^ Bit(2), 5)
     self.assertEquals(1 ^ Bit(0), 0)
     self.assertEquals(1 ^ Bit(1), 3)
     self.assertEquals(1 ^ Bit(5), 33)
     self.assertEquals(1 ^ ~Bit(2), -6)
     self.assertEquals(Bit(0) ^ Bit(2), 5)
     self.assertEquals(Bit(0) ^ Bit(0), 0)
     self.assertEquals(Bit(0) ^ Bit(1), 3)
     self.assertEquals(Bit(0) ^ Bit(5), 33)
     self.assertEquals(Bit(0) ^ ~Bit(2), -6)
Exemplo n.º 8
0
 def test_comparison(self):
     self.assertEquals(Bit(0), Bit(0))
     self.assertNotEquals(Bit(1), Bit(0))
     self.assertNotEquals(Bit(0, 0), Bit(0, 1))
     self.assertEquals(Bit(0, 1), Bit(0, 1))
     self.assertEquals(Bit(0), 1)
Exemplo n.º 9
0
 def test_int(self):
     bit = Bit(0)
     self.assertEquals(int(bit), 1)
     self.assertEquals(bool(bit), True)
     self.assertFalse(not bit)
Exemplo n.º 10
0
 def itervalues(self):
     for flag in self._flags:
         yield Bit(self._flags.index(flag))
Exemplo n.º 11
0
 def iteritems(self):
     for flag in self._flags:
         yield flag, Bit(self._flags.index(flag))
Exemplo n.º 12
0
 def __getattr__(self, key):
     if key not in self._flags:
         raise AttributeError
     return Bit(self._flags.index(key))
Exemplo n.º 13
0
 def get_bit(self, bit_number):
     mask = 2**int(bit_number)
     return Bit(bit_number, self._value & mask != 0)