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

Added default parameter

parent 847d9abe
No related branches found
No related tags found
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.
Finish editing this message first!
Please register or to comment