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):
self.__set(tmp)
class Attribute:
def __init__(self, name, aliases=None, multi=False):
def __init__(self, name, aliases=None, multi=False, default=None):
self.name = name
self.aliases = aliases or []
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):
if obj is None:
......
from collections.abc import MutableSet
from .model import add_to_session
class DBRelationshipSet(MutableSet):
def __init__(self, dbobj, relattr, ldapcls):
self.__dbobj = dbobj
......@@ -27,7 +29,7 @@ class DBRelationshipSet(MutableSet):
if not isinstance(value, self.__ldapcls):
raise TypeError()
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():
getattr(self.__dbobj, self.__relattr).append(self.__ldapcls(dn=value.ldap_object.dn))
......
try:
# Added in v2.5
from ldap3.utils.dn import escape_rdn
......@@ -14,14 +13,19 @@ except ImportError:
rdn = ''.join((rdn[:-1], '\\ '))
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:
def __init__(self, get_connection):
self.ldap_session = base.Session(get_connection)
self.ldap_session = core.Session(get_connection)
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):
self.ldap_session.delete(obj.ldap_object)
......@@ -76,6 +80,8 @@ class ModelQueryWrapper:
class Model:
# Overwritten by mapper
ldap_mapper = None
query = ModelQueryWrapper()
ldap_add_hooks = tuple()
# Overwritten by models
ldap_search_base = None
......@@ -84,10 +90,8 @@ class Model:
ldap_dn_base = None
ldap_dn_attribute = None
query = ModelQueryWrapper()
def __init__(self, **kwargs):
self.ldap_object = base.Object()
self.ldap_object = core.Object()
for key, value, in kwargs.items():
if not hasattr(self, key):
raise Exception()
......
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):
pass
......@@ -38,7 +38,7 @@ class RelationshipSet(MutableSet):
def add(self, value):
self.__modify_check(value)
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
self.__ldap_object.attradd(self.__name, value.dn)
......@@ -102,7 +102,7 @@ class BackreferenceSet(MutableSet):
def add(self, value):
self.__modify_check(value)
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
if self.__ldap_object.dn not in value.ldap_object.getattr(self.__name):
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