Custom signalsΒΆ
If you redefine models via proxy or subclass and you need to manage sync permissions with
a different setting (like MY_APP['AUTH_MODELS_SYNC']
you need to use different signals functions
when saving objects and relations.
Signals functions accept kwargs:
get_auth_models_sync_func
: a function that returns a boolean (default honoursGROUPS_MANAGER['AUTH_MODELS_SYNC']
setting), that also take aninstance
parameter to allow additional checks;prefix
andsuffix
on group_save``: overrideGROUPS_MANAGER['GROUP_NAME_PREFIX']
andGROUPS_MANAGER['GROUP_NAME_SUFFIX']
;prefix
andsuffix
on member_save``: overrideGROUPS_MANAGER['USER_USERNAME_PREFIX']
andGROUPS_MANAGER['USER_USERNAME_SUFFIX']
;
So, for example, your wrapping functions will be like this:
class ProjectGroup(Group):
class Meta:
permissions = (('view_projectgroup', 'View Project Group'), )
class GroupsManagerMeta:
member_model = 'testproject.ProjectGroupMember'
group_member_model = 'testproject.ProjectGroupMember'
class ProjectMember(Member):
class Meta:
permissions = (('view_projectmember', 'View Project Member'), )
class ProjectGroupMember(GroupMember):
pass
def project_get_auth_models_sync_func(instance):
return MY_APP['AUTH_MODELS_SYNC']
def project_group_save(*args, **kwargs):
group_save(*args, get_auth_models_sync_func=project_get_auth_models_sync_func,
prefix='PGS_', suffix='_Project', **kwargs)
def project_group_delete(*args, **kwargs):
group_delete(*args, get_auth_models_sync_func=project_get_auth_models_sync_func, **kwargs)
def project_member_save(*args, **kwargs):
member_save(*args, get_auth_models_sync_func=project_get_auth_models_sync_func,
prefix='PMS_', suffix='_Member', **kwargs)
def project_member_delete(*args, **kwargs):
member_delete(*args, get_auth_models_sync_func=project_get_auth_models_sync_func, **kwargs)
def project_group_member_save(*args, **kwargs):
group_member_save(*args, get_auth_models_sync_func=project_get_auth_models_sync_func, **kwargs)
def project_group_member_delete(*args, **kwargs):
group_member_delete(*args, get_auth_models_sync_func=project_get_auth_models_sync_func, **kwargs)
post_save.connect(project_group_save, sender=ProjectGroup)
post_delete.connect(project_group_delete, sender=ProjectGroup)
post_save.connect(project_member_save, sender=ProjectMember)
post_delete.connect(project_member_delete, sender=ProjectMember)
post_save.connect(project_group_member_save, sender=ProjectGroupMember)
post_delete.connect(project_group_member_delete, sender=ProjectGroupMember)
Note
A tested example is available in repository source code, testproject
‘s tests.py
under
test_signals_kwargs
method.