Skip to content
Snippets Groups Projects
Commit 5bebfb45 authored by Julian's avatar Julian
Browse files

Added default parameter

parent 847d9abe
Branches
Tags
No related merge requests found
...@@ -38,10 +38,19 @@ class AttributeList(MutableSequence): ...@@ -38,10 +38,19 @@ class AttributeList(MutableSequence):
self.__set(tmp) self.__set(tmp)
class Attribute: class Attribute:
def __init__(self, name, aliases=None, multi=False): def __init__(self, name, aliases=None, multi=False, default=None):
self.name = name self.name = name
self.aliases = aliases or [] self.aliases = aliases or []
self.multi = multi self.multi = multi
self.default = default
def add_hook(self, obj):
if obj.ldap_object.getattr(self.name) == []:
self.__set__(self.name, self.default() if callable(self.default) else self.default)
def __set_name__(self, cls, name):
if self.default is not None:
cls.ldap_add_hooks = cls.ldap_add_hooks + (self.add_hook,)
def __get__(self, obj, objtype=None): def __get__(self, obj, objtype=None):
if obj is None: if obj is None:
......
from collections.abc import MutableSet from collections.abc import MutableSet
from .model import add_to_session
class DBRelationshipSet(MutableSet): class DBRelationshipSet(MutableSet):
def __init__(self, dbobj, relattr, ldapcls): def __init__(self, dbobj, relattr, ldapcls):
self.__dbobj = dbobj self.__dbobj = dbobj
...@@ -27,7 +29,7 @@ class DBRelationshipSet(MutableSet): ...@@ -27,7 +29,7 @@ class DBRelationshipSet(MutableSet):
if not isinstance(value, self.__ldapcls): if not isinstance(value, self.__ldapcls):
raise TypeError() raise TypeError()
if value.ldap_object.session is not None: if value.ldap_object.session is not None:
self.__ldapcls.ldap_mapper.session.add(value) add_to_session(value, self.__ldapcls.ldap_mapper.session)
if value.ldap_object.dn not in self.__get_dns(): if value.ldap_object.dn not in self.__get_dns():
getattr(self.__dbobj, self.__relattr).append(self.__ldapcls(dn=value.ldap_object.dn)) getattr(self.__dbobj, self.__relattr).append(self.__ldapcls(dn=value.ldap_object.dn))
......
try: try:
# Added in v2.5 # Added in v2.5
from ldap3.utils.dn import escape_rdn from ldap3.utils.dn import escape_rdn
...@@ -14,14 +13,19 @@ except ImportError: ...@@ -14,14 +13,19 @@ except ImportError:
rdn = ''.join((rdn[:-1], '\\ ')) rdn = ''.join((rdn[:-1], '\\ '))
return rdn return rdn
from . import base from . import core
def add_to_session(obj, session):
for func in obj.ldap_add_hooks:
func(obj)
session.add(obj.ldap_object, obj.dn, obj.ldap_object_classes)
class Session: class Session:
def __init__(self, get_connection): def __init__(self, get_connection):
self.ldap_session = base.Session(get_connection) self.ldap_session = core.Session(get_connection)
def add(self, obj): def add(self, obj):
self.ldap_session.add(obj.ldap_object, obj.dn, obj.ldap_object_classes) add_to_session(obj, self.ldap_session)
def delete(self, obj): def delete(self, obj):
self.ldap_session.delete(obj.ldap_object) self.ldap_session.delete(obj.ldap_object)
...@@ -76,6 +80,8 @@ class ModelQueryWrapper: ...@@ -76,6 +80,8 @@ class ModelQueryWrapper:
class Model: class Model:
# Overwritten by mapper # Overwritten by mapper
ldap_mapper = None ldap_mapper = None
query = ModelQueryWrapper()
ldap_add_hooks = tuple()
# Overwritten by models # Overwritten by models
ldap_search_base = None ldap_search_base = None
...@@ -84,10 +90,8 @@ class Model: ...@@ -84,10 +90,8 @@ class Model:
ldap_dn_base = None ldap_dn_base = None
ldap_dn_attribute = None ldap_dn_attribute = None
query = ModelQueryWrapper()
def __init__(self, **kwargs): def __init__(self, **kwargs):
self.ldap_object = base.Object() self.ldap_object = core.Object()
for key, value, in kwargs.items(): for key, value, in kwargs.items():
if not hasattr(self, key): if not hasattr(self, key):
raise Exception() raise Exception()
......
from collections.abc import MutableSet from collections.abc import MutableSet
from .model import make_modelobj, make_modelobjs from .model import make_modelobj, make_modelobjs, add_to_session
class UnboundObjectError(Exception): class UnboundObjectError(Exception):
pass pass
...@@ -38,7 +38,7 @@ class RelationshipSet(MutableSet): ...@@ -38,7 +38,7 @@ class RelationshipSet(MutableSet):
def add(self, value): def add(self, value):
self.__modify_check(value) self.__modify_check(value)
if value.ldap_object.session is None: if value.ldap_object.session is None:
self.__ldap_object.session.add(value.ldap_object) add_to_session(value, self.__ldap_object.session)
assert value.ldap_object.session == self.__ldap_object.session assert value.ldap_object.session == self.__ldap_object.session
self.__ldap_object.attradd(self.__name, value.dn) self.__ldap_object.attradd(self.__name, value.dn)
...@@ -102,7 +102,7 @@ class BackreferenceSet(MutableSet): ...@@ -102,7 +102,7 @@ class BackreferenceSet(MutableSet):
def add(self, value): def add(self, value):
self.__modify_check(value) self.__modify_check(value)
if value.ldap_object.session is None: if value.ldap_object.session is None:
self.__ldap_object.session.add(value.ldap_object) add_to_session(value, self.__ldap_object.session)
assert value.ldap_object.session == self.__ldap_object.session assert value.ldap_object.session == self.__ldap_object.session
if self.__ldap_object.dn not in value.ldap_object.getattr(self.__name): if self.__ldap_object.dn not in value.ldap_object.getattr(self.__name):
value.ldap_object.attradd(self.__name, self.__ldap_object.dn) value.ldap_object.attradd(self.__name, self.__ldap_object.dn)
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment