This repository has been archived on 2023-02-21. You can view files and clone it, but cannot push or open issues or pull requests.
authentic-adeline/extra/modules/stores.py

59 lines
1.9 KiB
Python

from quixote import get_session, get_session_manager, get_request, get_publisher
import authentic.identities
import collectivity
class MergedIdentityStore(authentic.identities.IdentitiesStoreStorage):
def get_identity_for_name_identifier(self, name_identifier):
x = authentic.identities.IdentitiesStoreStorage.get_identity_for_name_identifier(
self, name_identifier)
if x:
return x
for coll in collectivity.Collectivity.select():
store = get_collectivity_store(coll.id)
x = store.get_identity_for_name_identifier(name_identifier)
if x:
return x
return None
class InheritingIdentityStore(authentic.identities.IdentitiesStoreStorage):
def get_identity_for_account(self, account):
t = authentic.identities.IdentitiesStoreStorage.get_identity_for_account(self, account)
if not t:
store = get_collectivity_store(None)
t = store.get_identity_for_account(account)
if t:
get_session().force_base_store = True
load_store()
return t
def get_collectivity_identity_class(collectivity_id):
class CollectivityIdentity(authentic.identities.Identity):
_names = 'identities-' + str(collectivity_id)
return CollectivityIdentity
def get_collectivity_store(collectivity_id):
if collectivity_id == '547263': # Parthenay
raise NotImplementedError()
elif collectivity_id:
# Vandoeuvre (546555) and others
store = InheritingIdentityStore(
identity_class = get_collectivity_identity_class(collectivity_id))
else:
store = MergedIdentityStore()
return store
def load_store():
coll_id = get_request().get_header('X-Gdd-Account-Number')
if get_session().force_base_store:
coll_id = None
get_publisher().store = get_collectivity_store(coll_id)