8
0
Fork 0
mirror of https://gitlab2.federez.net/re2o/re2o synced 2024-11-23 11:53:12 +00:00

Mise en cache de l'instance en entier, supprime les clefs foireuses

This commit is contained in:
Gabriel Detraz 2018-01-31 04:10:10 +01:00 committed by root
parent a3c0a50f4a
commit 9f560b2141
3 changed files with 72 additions and 51 deletions

View file

@ -69,18 +69,17 @@ class OptionalUser(models.Model):
) )
@classmethod @classmethod
def set_in_cache(cls, key): def set_in_cache(cls):
machine_options, _created = cls.objects.get_or_create() optionaluser, _created = cls.objects.get_or_create()
value = getattr(machine_options, key) cache.set('optionaluser', optionaluser, None)
cache.set('optionaluser_' + key, value, None) return optionaluser
return value
@classmethod @classmethod
def get_cached_value(cls, key): def get_cached_value(cls, key):
value = cache.get('optionaluser_' + key) optionaluser = cache.get('optionaluser')
if value == None: if optionaluser == None:
value = cls.set_in_cache(key) optionaluser = cls.set_in_cache()
return value return getattr(optionaluser, key)
class Meta: class Meta:
permissions = ( permissions = (
@ -148,6 +147,13 @@ class OptionalUser(models.Model):
c.save() c.save()
@receiver(post_save, sender=OptionalUser)
def optionaluser_post_save(sender, **kwargs):
"""Ecriture dans le cache"""
user_pref = kwargs['instance']
user_pref.set_in_cache()
class OptionalMachine(models.Model): class OptionalMachine(models.Model):
"""Options pour les machines : maximum de machines ou d'alias par user """Options pour les machines : maximum de machines ou d'alias par user
sans droit, activation de l'ipv6""" sans droit, activation de l'ipv6"""
@ -176,18 +182,17 @@ class OptionalMachine(models.Model):
return not self.get_cached_value('ipv6_mode') == 'DISABLED' return not self.get_cached_value('ipv6_mode') == 'DISABLED'
@classmethod @classmethod
def set_in_cache(cls, key): def set_in_cache(cls):
machine_options, _created = cls.objects.get_or_create() optionalmachine, _created = cls.objects.get_or_create()
value = getattr(machine_options, key) cache.set('optionalmachine', optionalmachine, None)
cache.set('optionalmachine_' + key, value, None) return optionalmachine
return value
@classmethod @classmethod
def get_cached_value(cls, key): def get_cached_value(cls, key):
value = cache.get('optionalmachine_' + key) optionalmachine = cache.get('optionalmachine')
if value == None: if optionalmachine == None:
value = cls.set_in_cache(key) optionalmachine = cls.set_in_cache()
return value return getattr(optionalmachine, key)
class Meta: class Meta:
permissions = ( permissions = (
@ -250,9 +255,9 @@ class OptionalMachine(models.Model):
@receiver(post_save, sender=OptionalMachine) @receiver(post_save, sender=OptionalMachine)
def optionalmachine_post_save(sender, **kwargs): def optionalmachine_post_save(sender, **kwargs):
"""Synchronisation ipv6""" """Synchronisation ipv6 et ecriture dans le cache"""
machine_pref = kwargs['instance'] machine_pref = kwargs['instance']
machine_pref.set_in_cache()
if machine_pref.ipv6_mode != "DISABLED": if machine_pref.ipv6_mode != "DISABLED":
for interface in machines.models.Interface.objects.all(): for interface in machines.models.Interface.objects.all():
interface.sync_ipv6() interface.sync_ipv6()
@ -291,18 +296,17 @@ class OptionalTopologie(models.Model):
) )
@classmethod @classmethod
def set_in_cache(cls, key): def set_in_cache(cls):
machine_options, _created = cls.objects.get_or_create() optionaltopologie, _created = cls.objects.get_or_create()
value = getattr(machine_options, key) cache.set('optionaltopologie', optionaltopologie, None)
cache.set('optionaltopologie_' + key, value, None) return optionaltopologie
return value
@classmethod @classmethod
def get_cached_value(cls, key): def get_cached_value(cls, key):
value = cache.get('optionaltopologie_' + key) optionaltopologie = cache.get('optionaltopologie')
if value == None: if optionaltopologie == None:
value = cls.set_in_cache(key) optionaltopologie = cls.set_in_cache()
return value return getattr(optionaltopologie, key)
class Meta: class Meta:
permissions = ( permissions = (
@ -362,6 +366,13 @@ class OptionalTopologie(models.Model):
de voir les préférences concernant la topologie" de voir les préférences concernant la topologie"
@receiver(post_save, sender=OptionalTopologie)
def optionaltopologie_post_save(sender, **kwargs):
"""Ecriture dans le cache"""
topologie_pref = kwargs['instance']
topologie_pref.set_in_cache()
class GeneralOption(models.Model): class GeneralOption(models.Model):
"""Options générales : nombre de resultats par page, nom du site, """Options générales : nombre de resultats par page, nom du site,
temps les liens sont valides""" temps les liens sont valides"""
@ -390,18 +401,17 @@ class GeneralOption(models.Model):
) )
@classmethod @classmethod
def set_in_cache(cls, key): def set_in_cache(cls):
machine_options, _created = cls.objects.get_or_create() generaloption, _created = cls.objects.get_or_create()
value = getattr(machine_options, key) cache.set('generaloption', generaloption, None)
cache.set('generaloption_' + key, value, None) return generaloption
return value
@classmethod @classmethod
def get_cached_value(cls, key): def get_cached_value(cls, key):
value = cache.get('generaloption_' + key) generaloption = cache.get('generaloption')
if value == None: if generaloption == None:
value = cls.set_in_cache(key) generaloption = cls.set_in_cache()
return value return getattr(generaloption, key)
class Meta: class Meta:
permissions = ( permissions = (
@ -462,6 +472,13 @@ class GeneralOption(models.Model):
de voir les préférences générales" de voir les préférences générales"
@receiver(post_save, sender=GeneralOption)
def generaloption_post_save(sender, **kwargs):
"""Ecriture dans le cache"""
general_pref = kwargs['instance']
general_pref.set_in_cache()
class Service(models.Model): class Service(models.Model):
"""Liste des services affichés sur la page d'accueil : url, description, """Liste des services affichés sur la page d'accueil : url, description,
image et nom""" image et nom"""
@ -572,18 +589,17 @@ class AssoOption(models.Model):
) )
@classmethod @classmethod
def set_in_cache(cls, key): def set_in_cache(cls):
machine_options, _created = cls.objects.get_or_create() assooption, _created = cls.objects.get_or_create()
value = getattr(machine_options, key) cache.set('assooption', assooption, None)
cache.set('assooption_' + key, value, None) return assooption
return value
@classmethod @classmethod
def get_cached_value(cls, key): def get_cached_value(cls, key):
value = cache.get('assooption_' + key) assooption = cache.get('assooption')
if value == None: if assooption == None:
value = cls.set_in_cache(key) assooption = cls.set_in_cache()
return value return getattr(assooption, key)
class Meta: class Meta:
permissions = ( permissions = (
@ -643,6 +659,13 @@ class AssoOption(models.Model):
de voir les préférences concernant l'association" de voir les préférences concernant l'association"
@receiver(post_save, sender=AssoOption)
def assooption_post_save(sender, **kwargs):
"""Ecriture dans le cache"""
asso_pref = kwargs['instance']
asso_pref.set_in_cache()
class MailMessageOption(models.Model): class MailMessageOption(models.Model):
"""Reglages, mail de bienvenue et autre""" """Reglages, mail de bienvenue et autre"""
PRETTY_NAME = "Options de corps de mail" PRETTY_NAME = "Options de corps de mail"

View file

@ -364,8 +364,7 @@ def new_switch(request):
request.POST or None, request.POST or None,
) )
if switch.is_valid() and machine.is_valid() and interface.is_valid(): if switch.is_valid() and machine.is_valid() and interface.is_valid():
options, _created = AssoOption.objects.get_or_create() user = AssoOption.get_cached_value('utilisateur_asso')
user = options.utilisateur_asso
if not user: if not user:
messages.error(request, "L'user association n'existe pas encore,\ messages.error(request, "L'user association n'existe pas encore,\
veuillez le créer ou le linker dans preferences") veuillez le créer ou le linker dans preferences")

View file

@ -701,7 +701,6 @@ class User(FieldPermissionModelMixin, AbstractBaseUser, PermissionsMixin):
else: else:
return False, u"Vous n'avez pas le droit d'éditer ce club" return False, u"Vous n'avez pas le droit d'éditer ce club"
else: else:
options, _created = AssoOption.objects.get_or_create()
if self == user_request: if self == user_request:
return True, None return True, None
elif user_request.has_perm('users.change_all_users'): elif user_request.has_perm('users.change_all_users'):
@ -709,7 +708,7 @@ class User(FieldPermissionModelMixin, AbstractBaseUser, PermissionsMixin):
elif user_request.has_perm('users.change_user'): elif user_request.has_perm('users.change_user'):
if self.groups.filter(listright__critical=True): if self.groups.filter(listright__critical=True):
return False, u"Utilisateurs avec droits critiques, ne peut etre édité" return False, u"Utilisateurs avec droits critiques, ne peut etre édité"
elif self == options.utilisateur_asso: elif self == AssoOption.get_cached_value('utilisateur_asso'):
return False, u"Impossible d'éditer l'utilisateur asso sans droit change_all_users" return False, u"Impossible d'éditer l'utilisateur asso sans droit change_all_users"
else: else:
return True, None return True, None