diff options
author | Jan Cholasta <jcholast@redhat.com> | 2013-01-22 09:58:53 +0100 |
---|---|---|
committer | Martin Kosek <mkosek@redhat.com> | 2013-03-01 16:59:43 +0100 |
commit | c1d6937ea274256e8a4422e3415670567f07dd4e (patch) | |
tree | ccfeb88848e77d19b5c8b0ad810e0fcb6378f77e /ipaserver/ipaldap.py | |
parent | 8d92ca851c6a0d3380ddbe13c3b442adab274f93 (diff) | |
download | freeipa-c1d6937ea274256e8a4422e3415670567f07dd4e.tar.gz freeipa-c1d6937ea274256e8a4422e3415670567f07dd4e.tar.xz freeipa-c1d6937ea274256e8a4422e3415670567f07dd4e.zip |
Remove the Entity class.
Move Entity functionality to LDAPEntry.
Diffstat (limited to 'ipaserver/ipaldap.py')
-rw-r--r-- | ipaserver/ipaldap.py | 52 |
1 files changed, 44 insertions, 8 deletions
diff --git a/ipaserver/ipaldap.py b/ipaserver/ipaldap.py index e3c74f83d..9f7a0e9d5 100644 --- a/ipaserver/ipaldap.py +++ b/ipaserver/ipaldap.py @@ -26,6 +26,7 @@ import string import time import shutil from decimal import Decimal +from copy import deepcopy import ldap import ldap as _ldap @@ -586,20 +587,32 @@ class IPASimpleLDAPObject(object): # r[0] == r.dn # r[1] == r.data class LDAPEntry(dict): - __slots__ = ('_dn',) + __slots__ = ('_dn', '_orig') def __init__(self, _dn=None, _obj=None, **kwargs): + super(LDAPEntry, self).__init__() + if isinstance(_dn, LDAPEntry): assert _obj is None _obj = _dn - self._dn = DN(_obj._dn) #pylint: disable=E1103 + _dn = DN(_dn._dn) + + if isinstance(_obj, LDAPEntry): + orig = _obj._orig else: - assert isinstance(_dn, DN) if _obj is None: _obj = {} - self._dn = _dn + orig = None + + assert isinstance(_dn, DN) + + self._dn = _dn + self._orig = orig - super(LDAPEntry, self).__init__(self._init_iter(_obj, **kwargs)) + if orig is None: + self.commit() + + self.update(_obj, **kwargs) # properties for Entry and Entity compatibility @property @@ -616,6 +629,11 @@ class LDAPEntry(dict): # FIXME: for backwards compatibility only return self + @property + def orig_data(self): + # FIXME: for backwards compatibility only + return self._orig + def _attr_name(self, name): if not isinstance(name, basestring): raise TypeError( @@ -637,6 +655,10 @@ class LDAPEntry(dict): def copy(self): return LDAPEntry(self) + def commit(self): + self._orig = self + self._orig = deepcopy(self) + def __setitem__(self, name, value): super(LDAPEntry, self).__setitem__(self._attr_name(name), value) @@ -733,6 +755,19 @@ class LDAPEntry(dict): result['dn'] = self.dn return result + def attrList(self): + """Return a list of all attributes in the entry""" + return self.data.keys() + + def origDataDict(self): + """Returns a dict of the original values of the user. + + Used for updates. + """ + result = ipautil.CIDict(self.orig_data) + result['dn'] = self.dn + return result + class Entry(LDAPEntry): """For compatibility with old code only @@ -750,7 +785,7 @@ class Entry(LDAPEntry): a search result entry or a reference or None. If creating a new empty entry, data is the string DN.""" if entrydata: - if isinstance(entrydata, (tuple, LDAPEntry)): + if isinstance(entrydata, tuple): dn = entrydata[0] data = ipautil.CIDict(entrydata[1]) elif isinstance(entrydata, DN): @@ -759,9 +794,10 @@ class Entry(LDAPEntry): elif isinstance(entrydata, basestring): dn = DN(entrydata) data = ipautil.CIDict() + elif isinstance(entrydata, LDAPEntry): + dn = entrydata.dn + data = entrydata elif isinstance(entrydata, dict): - if hasattr(entrydata, 'dn'): - entrydata['dn'] = entrydata.dn dn = entrydata['dn'] del entrydata['dn'] data = ipautil.CIDict(entrydata) |