def test_explicit_single_remove_aliases_same_case(self): cid = CaseInsensitiveWithAliasDict() cid['oNe', 'oNe-A', 'oNe-B'] = 1 cid['tWo'] = 2 self.assertEqual(len(cid), 2) cid.remove_alias(['oNe-A', 'oNe-B']) self.assertEqual(len(cid), 2) self.assertEqual(cid['oNe'], 1) try: cid['oNe-A'] except KeyError: self.assertTrue(True) except Exception: self.assertTrue(False) else: self.fail('key still present') try: cid['oNe-B'] except KeyError: self.assertTrue(True) except Exception: self.assertTrue(False) else: self.fail('key still present') self.assertEqual(cid._store, {'oNe': 1, 'tWo': 2}) self.assertEqual(cid._aliases, {}) self.assertEqual(cid._alias_keymap, {})
def test_add_alias_to_key_different_case(self): cid = CaseInsensitiveWithAliasDict() cid['oNe'] = 1 cid['tWo'] = 2 cid.set_alias('ONE', 'oNe-A') self.assertEqual(len(cid), 2) self.assertEqual(cid['oNe'], 1) self.assertEqual(cid['oNe-A'], 1) self.assertEqual(cid['tWo'], 2)
def test_explicit_add_multiple_aliases_to_same_key_same_case(self): cid = CaseInsensitiveWithAliasDict() cid['oNe'] = 1 cid['tWo'] = 2 cid.set_alias('oNe', 'oNe-A') cid.set_alias('oNe', 'oNe-B') self.assertEqual(len(cid), 2) self.assertEqual(cid['oNe'], 1) self.assertEqual(cid['oNe-A'], 1) self.assertEqual(cid['oNe-B'], 1) self.assertEqual(cid['tWo'], 2)
def test_equality_with_same_case(self): cid = CaseInsensitiveWithAliasDict() cid['one', 'oNe-A'] = 1 cid['two'] = 2 cid[3] = 3 cid2 = CaseInsensitiveWithAliasDict() cid2['one'] = 1 cid2['two'] = 2 cid2[3, 4] = 3 self.assertEqual(cid, cid2)
def test_equality_with_different_case(self): cid = CaseInsensitiveWithAliasDict() cid['one', 'oNe-A'] = 1 cid['two'] = 2 cid[3] = 3 cid2 = CaseInsensitiveWithAliasDict() cid2['ONE', 'ONE-A'] = 1 cid2['TWO'] = 2 cid2[3] = 3 self.assertEqual(cid, cid2)
def test_copy(self): cid = CaseInsensitiveWithAliasDict() cid['oNe'] = 1 cid['tWo'] = 2 cid[3] = 3 cid2 = cid.copy() self.assertEqual(cid2['ONE'], 1) self.assertEqual(cid2['one'], 1) self.assertEqual(cid2['TWO'], 2) self.assertEqual(cid2['two'], 2) self.assertEqual(cid2[3], 3)
def test_explicit_add_same_alias_twice_to_same_key_different_case(self): cid = CaseInsensitiveWithAliasDict() cid['oNe'] = 1 try: cid.set_alias('ONE', ['oNe-A', 'ONE-A']) except KeyError: self.assertTrue(True) except Exception: self.fail('wrong exception') self.assertEqual(cid._store, {'oNe': 1}) self.assertEqual(cid._aliases, {'one-a': 'one'}) self.assertEqual(cid._alias_keymap, {'one': ['one-a']})
def test_preserve_key_case(self): cid = CaseInsensitiveWithAliasDict() cid['One'] = 1 cid['Two'] = 2 cid[3] = 3 key_list = list(cid.keys()) self.assertTrue('One' in key_list) self.assertTrue('Two' in key_list) self.assertTrue(3 in key_list) self.assertFalse('ONE' in key_list) self.assertFalse('one' in key_list) self.assertFalse('TWO' in key_list) self.assertFalse('TWO' in key_list) self.assertFalse(4 in key_list)
def test_explicit_add_same_alias_twice_to_same_key_different_case(self): cid = CaseInsensitiveWithAliasDict() cid['oNe'] = 1 try: cid.set_alias('ONE', ['oNe-A', 'ONE-A']) except KeyError: self.assertTrue(True) except Exception: self.fail('wrong exception') else: self.fail('double alias') self.assertEqual(cid._store, {'oNe': 1}) self.assertEqual(cid._aliases, {'one-a': 'one'}) self.assertEqual(cid._alias_keymap, {'one': ['one-a']})
def test_explicit_add_same_alias_to_different_key_different_case(self): cid = CaseInsensitiveWithAliasDict() cid['oNe', 'oNe-A'] = 1 cid['tWo'] = 2 try: cid.set_alias('TWO', 'ONE-A') except KeyError: self.assertTrue(True) except Exception: self.fail('wrong exception') else: self.fail('double alias') self.assertEqual(cid._store, {'oNe': 1, 'tWo': 2}) self.assertEqual(cid._aliases, {'one-a': 'one'}) self.assertEqual(cid._alias_keymap, {'one': ['one-a']})
def test_explicit_add_multiple_alias_to_different_key_different_case(self): cid = CaseInsensitiveWithAliasDict() cid['oNe'] = 1 cid['tWo'] = 2 cid.set_alias('ONE', 'oNe-A') cid.set_alias('ONE', 'oNe-B') cid.set_alias('TWO', 'tWo-A') cid.set_alias('TWO', 'tWo-B') self.assertEqual(len(cid), 2) self.assertEqual(cid['oNe'], 1) self.assertEqual(cid['oNe-A'], 1) self.assertEqual(cid['oNe-B'], 1) self.assertEqual(cid['tWo-A'], 2) self.assertEqual(cid['tWo-B'], 2) self.assertEqual(cid['tWo'], 2)
def test_delete_key_different_case(self): cid = CaseInsensitiveWithAliasDict() cid['oNe', 'oNe-A', 'oNe-B'] = 1 cid['tWo'] = 2 self.assertEqual(len(cid), 2) del cid['ONE'] self.assertEqual(len(cid), 1) try: cid['oNe'] except KeyError: self.assertTrue(True) except Exception: self.assertTrue(False) else: self.fail('key still present') try: cid['oNe-A'] except KeyError: self.assertTrue(True) except Exception: self.assertTrue(False) else: self.fail('key still present') try: cid['oNe-B'] except KeyError: self.assertTrue(True) except Exception: self.assertTrue(False) else: self.fail('key still present') self.assertEqual(cid._store, dict(tWo=2)) self.assertEqual(cid._aliases, dict()) self.assertEqual(cid._alias_keymap, dict())
def test_explicit_add_alias_to_unexistent_key(self): cid = CaseInsensitiveWithAliasDict() cid['oNe', 'oNe-A'] = 1 cid['tWo'] = 2 try: cid.set_alias('THREE', 'THREE-A') except KeyError: self.assertTrue(True) except Exception: self.fail('wrong exception') else: # self.fail('double alias') pass self.assertEqual(cid._store, {'oNe': 1, 'tWo': 2}) self.assertEqual(cid._aliases, {'one-a': 'one'}) self.assertEqual(cid._alias_keymap, {'one': ['one-a']})
def test_delete_item_in_immutable_key(self): cid = CaseInsensitiveWithAliasDict() cid['oNe'] = 1 cid['tWo'] = 2 cid[3, 4] = 3 self.assertEqual(cid[3], 3) del cid[3] self.assertEqual(cid['ONE'], 1) self.assertEqual(cid['oNe'], 1) self.assertEqual(cid['TWO'], 2) self.assertEqual(cid['tWo'], 2) try: cid[3] except KeyError: self.assertTrue(True) except Exception: self.assertTrue(False) else: self.fail('key still present') try: cid[4] except KeyError: self.assertTrue(True) except Exception: self.assertTrue(False) else: self.fail('key still present')
def test_contains_different_case_key(self): cid = CaseInsensitiveWithAliasDict() cid['oNe'] = 1 cid['tWo'] = 2 cid[3] = 3 self.assertTrue('ONE' in cid) self.assertFalse('THREE' in cid) self.assertFalse(4 in cid)
def test_len(self): cid = CaseInsensitiveWithAliasDict() cid['oNe'] = 1 cid['tWo'] = 2 cid[3] = 3 self.assertEqual(len(cid), 3) cid['ONE'] = 'ONE' self.assertEqual(len(cid), 3)
def test_contains_same_case_key(self): cid = CaseInsensitiveWithAliasDict() cid['oNe', 'oNe-a'] = 1 cid['tWo'] = 2 cid[3] = 3 self.assertTrue('oNe' in cid) self.assertTrue('oNe-a' in cid) self.assertFalse('THREE' in cid) self.assertFalse(4 in cid)
def test_contains_immutable_key(self): cid = CaseInsensitiveWithAliasDict() cid['oNe'] = 1 cid['tWo'] = 2 cid[3, 4] = 3 self.assertTrue(3 in cid) self.assertTrue(4 in cid) self.assertFalse('THREE' in cid) self.assertFalse(5 in cid)
def test_modify_value_by_alias_different_case(self): cid = CaseInsensitiveWithAliasDict() cid['oNe', 'oNe-A', 'oNe-B'] = 1 cid['tWo'] = 2 cid['ONE-A'] = 3 self.assertEqual(len(cid), 2) self.assertEqual(cid['oNe'], 3) self.assertEqual(cid['oNe-A'], 3) self.assertEqual(cid['oNe-B'], 3)
def test_add_values(self): cid = CaseInsensitiveWithAliasDict() cid['oNe'] = 1 cid['tWo'] = 2 cid[3] = 3 self.assertEqual(cid['ONE'], 1) self.assertEqual(cid['one'], 1) self.assertEqual(cid['TWO'], 2) self.assertEqual(cid['two'], 2) self.assertEqual(cid[3], 3)
def test_implicit_add_multiple_aliases_to_different_key(self): cid = CaseInsensitiveWithAliasDict() cid['oNe', 'oNe-A', 'oNe-B'] = 1 cid['tWo', 'tWo-A', 'tWo-B'] = 2 self.assertEqual(len(cid), 2) self.assertEqual(cid['oNe'], 1) self.assertEqual(cid['oNe-A'], 1) self.assertEqual(cid['oNe-B'], 1) self.assertEqual(cid['tWo'], 2) self.assertEqual(cid['tWo-A'], 2) self.assertEqual(cid['tWo-B'], 2)
def test_create_from_dict(self): dic = dict() dic['ONE'] = 1 dic['TWO'] = 2 dic[3] = 3 cid = CaseInsensitiveWithAliasDict(dic) self.assertEqual(cid['ONE'], 1) self.assertEqual(cid['one'], 1) self.assertEqual(cid['TWO'], 2) self.assertEqual(cid['two'], 2) self.assertEqual(cid[3], 3)
def test_equality_with_same_case_dict(self): cid = CaseInsensitiveWithAliasDict() cid['one'] = 1 cid['two'] = 2 cid[3] = 3 dic = dict() dic['one'] = 1 dic['two'] = 2 dic[3] = 3 self.assertEqual(cid, dic)
def test_modify_value_immutable_key(self): cid = CaseInsensitiveWithAliasDict() cid['oNe'] = 1 cid['tWo'] = 2 cid[3] = 3 self.assertEqual(cid[3], 3) cid[3] = 'Three' self.assertEqual(cid['ONE'], 1) self.assertEqual(cid['oNe'], 1) self.assertEqual(cid['TWO'], 2) self.assertEqual(cid['tWo'], 2) self.assertEqual(cid[3], 'Three')
def test_equality_with_different_case_dict(self): cid = CaseInsensitiveWithAliasDict() cid['one', 'oNe-A'] = 1 cid['two'] = 2 cid[3] = 3 dic = dict() dic['ONE'] = 1 dic['TWO'] = 2 dic[3] = 3 self.assertEqual(cid, dic)
def test_add_same_alias_twice_to_same_key_same_case(self): cid = CaseInsensitiveWithAliasDict() try: cid['oNe', 'oNe-A', 'oNe-A'] = 1 except KeyError: self.assertTrue(True) except Exception: self.fail('wrong exception') self.assertEqual(cid._store, {'oNe': 1}) self.assertEqual(cid._aliases, {'one-a': 'one'}) self.assertEqual(cid._alias_keymap, {'one': ['one-a']})
def __init__(self, **kwargs): class _DummyCursor(object): # needed for _EntryState def __init__(self, object_def): self.definition = object_def if self.dn is None: raise NotImplementedError("%s must set the 'dn' attribute" % self.__class__) cursor = _DummyCursor(ObjectDef(self.object_classes)) self.__dict__["_state"] = EntryState(None, cursor) # TODO: remove the following line once ldap3 pull request #718 is merged if not hasattr(self._state, "entry_raw_attributes"): self._state.entry_raw_attributes = CaseInsensitiveWithAliasDict() # initialize attributes from kwargs attrdefs = dict(self._attrdefs) for k, v in iteritems(kwargs): if k in self._attrdefs: attrdef = attrdefs.pop(k) self._create_attribute_or_parameter(attrdef, v) else: raise TypeError("__init__() got an unexpected keyword argument" " '%s'" % k) # check remaining attributes for key in list(attrdefs): if attrdefs[key].default != NotImplemented: attrdef = attrdefs.pop(key) self._create_attribute_or_parameter(attrdef, attrdef.default) elif not attrdefs[key].mandatory: # delete non mandatory attrdef and add to definition self._state.definition += attrdefs.pop(key) # all remaining attributes are mandatory, do not provide a reasonable # default value (NotImplemented) and should have been set earlier if attrdefs: s = " '" if len(attrdefs) == 1 else "s '" raise TypeError("__init__() missing the following keyword " "argument" + s + ", ".join(attrdefs.keys()) + "'") # self._state will be overwritten by _Entry.__init__ # thus store a copy self._state state = self._state fmtdict = dict( (k, getattr(self.__class__, k)) for k in dir(self.__class__)) fmtdict.update(self._state.attributes) fmtdict.update(self._state.parameters) safedn = safe_dn(self.dn.format(**fmtdict)) _Entry.__init__(self, safedn, cursor) state.dn = safedn state.set_status(_STATUS_WRITEABLE) # restore self._state self.__dict__["_state"] = state
def test_modify_value_different_case_key(self): cid = CaseInsensitiveWithAliasDict() cid['oNe'] = 1 cid['tWo'] = 2 cid[3] = 3 self.assertEqual(cid['ONE'], 1) self.assertEqual(cid['oNe'], 1) cid['one'] = 'ONE' self.assertEqual(cid['ONE'], 'ONE') self.assertEqual(cid['oNe'], 'ONE') self.assertEqual(cid['TWO'], 2) self.assertEqual(cid['two'], 2) self.assertEqual(cid[3], 3)
def test_delete_item_in_same_case_key(self): cid = CaseInsensitiveWithAliasDict() cid['oNe', 'oNe-A'] = 1 cid['tWo'] = 2 cid[3] = 3 self.assertEqual(cid['ONE'], 1) self.assertEqual(cid['oNe'], 1) self.assertEqual(cid['ONE-a'], 1) self.assertEqual(cid['oNe-a'], 1) del cid['oNe'] self.assertEqual(cid['TWO'], 2) self.assertEqual(cid['two'], 2) self.assertEqual(cid[3], 3) try: cid['oNe'] except KeyError: self.assertTrue(True) except Exception: self.fail() else: self.fail('key still present') try: cid['ONE'] except KeyError: self.assertTrue(True) except Exception: self.assertTrue(False) else: self.fail('key still present') try: cid['oNe-A'] except KeyError: self.assertTrue(True) except Exception: self.assertTrue(False) else: self.fail('key still present') try: cid['ONE-A'] except KeyError: self.assertTrue(True) except Exception: self.assertTrue(False) else: self.fail('key still present')
def test_delete_alias_different_case(self): cid = CaseInsensitiveWithAliasDict() cid['oNe', 'oNe-A', 'oNe-B'] = 1 cid['tWo'] = 2 self.assertEqual(len(cid), 2) del cid['ONE-A'] self.assertEqual(len(cid), 2) self.assertEqual(cid['oNe'], 1) self.assertEqual(cid['oNe-B'], 1) try: cid['oNe-A'] except KeyError: self.assertTrue(True) except Exception: self.assertTrue(False) else: self.fail('key still present') self.assertEqual(cid._store, {'oNe': 1, 'tWo': 2}) self.assertEqual(cid._aliases, {'one-b': 'one'}) self.assertEqual(cid._alias_keymap, {'one': ['one-b']})
def test_create_empty(self): cid = CaseInsensitiveWithAliasDict() self.assertTrue(isinstance(cid, CaseInsensitiveWithAliasDict))
def test_create_from_parameters(self): cid = CaseInsensitiveWithAliasDict(one=1, two=2) self.assertEqual(cid['ONE'], 1) self.assertEqual(cid['one'], 1) self.assertEqual(cid['TWO'], 2) self.assertEqual(cid['two'], 2)