8
0
Fork 0
mirror of https://gitlab.federez.net/re2o/re2o synced 2024-06-30 11:04:38 +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
def set_in_cache(cls, key):
machine_options, _created = cls.objects.get_or_create()
value = getattr(machine_options, key)
cache.set('optionaluser_' + key, value, None)
return value
def set_in_cache(cls):
optionaluser, _created = cls.objects.get_or_create()
cache.set('optionaluser', optionaluser, None)
return optionaluser
@classmethod
def get_cached_value(cls, key):
value = cache.get('optionaluser_' + key)
if value == None:
value = cls.set_in_cache(key)
return value
optionaluser = cache.get('optionaluser')
if optionaluser == None:
optionaluser = cls.set_in_cache()
return getattr(optionaluser, key)
class Meta:
permissions = (
@ -148,6 +147,13 @@ class OptionalUser(models.Model):
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):
"""Options pour les machines : maximum de machines ou d'alias par user
sans droit, activation de l'ipv6"""
@ -176,18 +182,17 @@ class OptionalMachine(models.Model):
return not self.get_cached_value('ipv6_mode') == 'DISABLED'
@classmethod
def set_in_cache(cls, key):
machine_options, _created = cls.objects.get_or_create()
value = getattr(machine_options, key)
cache.set('optionalmachine_' + key, value, None)
return value
def set_in_cache(cls):
optionalmachine, _created = cls.objects.get_or_create()
cache.set('optionalmachine', optionalmachine, None)
return optionalmachine
@classmethod
def get_cached_value(cls, key):
value = cache.get('optionalmachine_' + key)
if value == None:
value = cls.set_in_cache(key)
return value
optionalmachine = cache.get('optionalmachine')
if optionalmachine == None:
optionalmachine = cls.set_in_cache()
return getattr(optionalmachine, key)
class Meta:
permissions = (
@ -250,9 +255,9 @@ class OptionalMachine(models.Model):
@receiver(post_save, sender=OptionalMachine)
def optionalmachine_post_save(sender, **kwargs):
"""Synchronisation ipv6"""
"""Synchronisation ipv6 et ecriture dans le cache"""
machine_pref = kwargs['instance']
machine_pref.set_in_cache()
if machine_pref.ipv6_mode != "DISABLED":
for interface in machines.models.Interface.objects.all():
interface.sync_ipv6()
@ -291,18 +296,17 @@ class OptionalTopologie(models.Model):
)
@classmethod
def set_in_cache(cls, key):
machine_options, _created = cls.objects.get_or_create()
value = getattr(machine_options, key)
cache.set('optionaltopologie_' + key, value, None)
return value
def set_in_cache(cls):
optionaltopologie, _created = cls.objects.get_or_create()
cache.set('optionaltopologie', optionaltopologie, None)
return optionaltopologie
@classmethod
def get_cached_value(cls, key):
value = cache.get('optionaltopologie_' + key)
if value == None:
value = cls.set_in_cache(key)
return value
optionaltopologie = cache.get('optionaltopologie')
if optionaltopologie == None:
optionaltopologie = cls.set_in_cache()
return getattr(optionaltopologie, key)
class Meta:
permissions = (
@ -362,6 +366,13 @@ class OptionalTopologie(models.Model):
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):
"""Options générales : nombre de resultats par page, nom du site,
temps les liens sont valides"""
@ -390,18 +401,17 @@ class GeneralOption(models.Model):
)
@classmethod
def set_in_cache(cls, key):
machine_options, _created = cls.objects.get_or_create()
value = getattr(machine_options, key)
cache.set('generaloption_' + key, value, None)
return value
def set_in_cache(cls):
generaloption, _created = cls.objects.get_or_create()
cache.set('generaloption', generaloption, None)
return generaloption
@classmethod
def get_cached_value(cls, key):
value = cache.get('generaloption_' + key)
if value == None:
value = cls.set_in_cache(key)
return value
generaloption = cache.get('generaloption')
if generaloption == None:
generaloption = cls.set_in_cache()
return getattr(generaloption, key)
class Meta:
permissions = (
@ -462,6 +472,13 @@ class GeneralOption(models.Model):
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):
"""Liste des services affichés sur la page d'accueil : url, description,
image et nom"""
@ -572,18 +589,17 @@ class AssoOption(models.Model):
)
@classmethod
def set_in_cache(cls, key):
machine_options, _created = cls.objects.get_or_create()
value = getattr(machine_options, key)
cache.set('assooption_' + key, value, None)
return value
def set_in_cache(cls):
assooption, _created = cls.objects.get_or_create()
cache.set('assooption', assooption, None)
return assooption
@classmethod
def get_cached_value(cls, key):
value = cache.get('assooption_' + key)
if value == None:
value = cls.set_in_cache(key)
return value
assooption = cache.get('assooption')
if assooption == None:
assooption = cls.set_in_cache()
return getattr(assooption, key)
class Meta:
permissions = (
@ -643,6 +659,13 @@ class AssoOption(models.Model):
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):
"""Reglages, mail de bienvenue et autre"""
PRETTY_NAME = "Options de corps de mail"

View file

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

View file

@ -701,7 +701,6 @@ class User(FieldPermissionModelMixin, AbstractBaseUser, PermissionsMixin):
else:
return False, u"Vous n'avez pas le droit d'éditer ce club"
else:
options, _created = AssoOption.objects.get_or_create()
if self == user_request:
return True, None
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'):
if self.groups.filter(listright__critical=True):
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"
else:
return True, None