Skip to content
Snippets Groups Projects
Select Git revision
  • 0df59d5abb7e455650040708b85653ed6c1c933b
  • develop default protected
  • ical-export
  • feature/audit_log
  • fix/index
  • badge-redeem-404
  • 720-schedule_source
  • room-docu
  • chore/event-views
  • 511-schedule-foo-fixed
  • 607-schedule-versions
  • deploy/curl-verbose
  • fix/public-badge-access-rights
  • 445-schedule-redirects
  • 623-wiki-im-baustellenmodus-sollte-mal-als-wiki-admin-trotzdem-seiten-anlegen-bearbeiten-konnen
  • fix/registration_mail_subject
  • feature/conference-query-set
  • feature/568-habitatmanagement
  • feat/unit-integration-tests
  • camp23-prod
  • production
  • prod-2024-12-27_20-15
  • prod-2024-12-27_16-37
  • prod-2024-12-27_16-01
  • prod-2024-12-27_13-29
  • prod-2024-12-27_00-34
  • prod-2024-12-26_21-45
  • prod-2024-12-26_13-12
  • prod-2024-12-26_00-21
  • prod-2024-12-25_21-04
  • prod-2024-12-25_15-54
  • prod-2024-12-25_01-29
  • prod-2024-12-24_14-48
  • prod-2024-12-23_23-39
  • prod-2024-12-22_21-12
  • prod-2024-12-22_17-25
  • prod-2024-12-22_01-34
  • prod-2024-12-22_00-55
  • prod-2024-12-21_13-42
  • prod-2024-12-21_10-44
  • prod-2024-12-20_12-25
41 results

manage.py

Blame
  • Forked from hub / hub
    Source project has a limited visibility.
    dbutils.py 3.52 KiB
    from collections.abc import MutableSet
    
    from .model import add_to_session
    
    class DBRelationshipSet(MutableSet):
    	def __init__(self, dbobj, relattr, ldapcls, mapcls):
    		self.__dbobj = dbobj
    		self.__relattr = relattr
    		self.__ldapcls = ldapcls
    		self.__mapcls = mapcls
    
    	def __get_dns(self):
    		return [mapobj.dn for mapobj in getattr(self.__dbobj, self.__relattr)]
    
    	def __repr__(self):
    		return repr(set(self))
    
    	def __contains__(self, value):
    		if value is None or not isinstance(value, self.__ldapcls):
    			return False
    		return value.ldap_object.dn in self.__get_dns()
    
    	def __iter__(self):
    		return iter(filter(lambda obj: obj is not None, [self.__ldapcls.query.get(dn) for dn in self.__get_dns()]))
    
    	def __len__(self):
    		return len(set(self))
    
    	def add(self, value):
    		if not isinstance(value, self.__ldapcls):
    			raise TypeError()
    		if value.ldap_object.session is None:
    			add_to_session(value, self.__ldapcls.ldap_mapper.session.ldap_session)
    		if value.ldap_object.dn not in self.__get_dns():
    			getattr(self.__dbobj, self.__relattr).append(self.__mapcls(dn=value.ldap_object.dn))
    
    	def discard(self, value):
    		if not isinstance(value, self.__ldapcls):
    			raise TypeError()
    		rel = getattr(self.__dbobj, self.__relattr)
    		for mapobj in list(rel):
    			if mapobj.dn == value.ldap_object.dn:
    				rel.remove(mapobj)
    
    class DBRelationship:
    	def __init__(self, relattr, ldapcls, mapcls, backref=None, backattr=None):
    		self.relattr = relattr
    		self.ldapcls = ldapcls
    		self.mapcls = mapcls
    		self.backref = backref
    		self.backattr = backattr
    
    	def __set_name__(self, cls, name):
    		if self.backref:
    			assert self.backattr
    			setattr(self.ldapcls, self.backref, DBBackreference(cls, self.relattr, self.mapcls, self.backattr))
    
    	def __get__(self, obj, objtype=None):
    		if obj is None:
    			return self
    		return DBRelationshipSet(obj, self.relattr, self.ldapcls, self.mapcls)
    
    	def __set__(self, obj, values):
    		tmp = self.__get__(obj)
    		tmp.clear()
    		for value in values:
    			tmp.add(value)
    
    class DBBackreferenceSet(MutableSet):
    	def __init__(self, ldapobj, dbcls, relattr, mapcls, backattr):
    		self.__ldapobj = ldapobj
    		self.__dbcls = dbcls
    		self.__relattr = relattr
    		self.__mapcls = mapcls
    		self.__backattr = backattr
    
    	@property
    	def __dn(self):
    		return self.__ldapobj.ldap_object.dn
    
    	def __get(self):
    		return {getattr(mapobj, self.__backattr) for mapobj in self.__mapcls.query.filter_by(dn=self.__dn)}
    
    	def __repr__(self):
    		return repr(self.__get())
    
    	def __contains__(self, value):
    		return value in self.__get()
    
    	def __iter__(self):
    		return iter(self.__get())
    
    	def __len__(self):
    		return len(self.__get())
    
    	def add(self, value):
    		# TODO: add value to db session if necessary
    		assert self.__ldapobj.ldap_object.session is not None
    		if not isinstance(value, self.__dbcls):
    			raise TypeError()
    		rel = getattr(value, self.__relattr)
    		if self.__dn not in {mapobj.dn for mapobj in rel}:
    			rel.append(self.__mapcls(dn=self.__dn))
    
    	def discard(self, value):
    		if not isinstance(value, self.__dbcls):
    			raise TypeError()
    		rel = getattr(value, self.__relattr)
    		for mapobj in list(rel):
    			if mapobj.dn == self.__dn:
    				rel.remove(mapobj)
    
    class DBBackreference:
    	def __init__(self, dbcls, relattr, mapcls, backattr):
    		self.dbcls = dbcls
    		self.relattr = relattr
    		self.mapcls = mapcls
    		self.backattr = backattr
    
    	def __get__(self, obj, objtype=None):
    		if obj is None:
    			return self
    		return DBBackreferenceSet(obj, self.dbcls, self.relattr, self.mapcls, self.backattr)
    
    	def __set__(self, obj, values):
    		tmp = self.__get__(obj)
    		tmp.clear()
    		for value in values:
    			tmp.add(value)