def new(self, visitor, target_user): """ Consigner ou mettre à jour une visite à un profil """ if visitor.pk != target_user.pk: if self.filter(visitor=visitor, user=target_user).update(time=now()) == 0: return self.create(visitor=visitor, user=target_user, time=now()) return self.get(visitor=visitor, user=target_user) return False
def is_editable(self, request): """ Renvoyer si le commentaire peut être modifié par l'utilisateur """ if request.user.is_authenticated(): if request.user.is_staff or (self.author == request.user and now() < self.time + 600): return True return False
def set(self, user, ip): """ Enregistrer une nouvelle IP pour un utilisateur """ if user and user.is_authenticated() and ip: if self.filter(user=user, ip=ip).update(time=now()) == 0: userip = self.create(user=user, ip=ip) userip_created.send(userip) return userip else: return self.get(user=user, ip=ip)
def add(self, user, text, purge=0): """ Ajouter un post pour un utilisateur """ self.create(author=user, text=text) # Purger les posts anciens de n+ jours if purge > 0: limit = now() - 86400 * purge posts = self.filter(author=user, time__lte=limit).delete() return posts return True
def add(self, request): """ Ajouter une entrée à la liste d'accès par IP @param request: objet HttpRequest avec une IP valide """ state = self.get_ip_list() state[request.get_ip()] = now() self.set_ip_list(state)
def countries_for(self, user, as_codes=True, days=None): """ Renvoyer les instances de pays d'IP pour l'utilisateur """ criteria = {} if days is None else {'time__gt': now() - 86400 * days} country_list = set( self.filter(user=user, **criteria).exclude(ip__country='').values_list( 'ip__country', flat=True)) if not as_codes: from scoop.location.models import Country # Liste d'objets Country country_list = Country.objects.filter(code2__in=country_list) return country_list
def clean(self, minutes=60): """ Nettoyer les entrées plus anciennes que n minutes @param minutes: ancienneté minimum en minutes """ limit = now() - minutes * 60 state = self.get_ip_list() for key in state: if state[key] < limit: del state[key] self.set_ip_list(state)
def prune(self, days=120): """ Supprimer les visites plus anciennes que n jours """ timestamp = now() - days * 86400 self.filter(time__lt=timestamp).delete()
def last_messages(self, minutes=30, **kwargs): """ Renvoyer les messages des n dernières minutes """ stamp = now() - minutes * 60 messages = self.filter(time__gt=stamp, **kwargs) return messages
def clear_transient(self): """ Supprimer les images volatiles (après 24h de délai) """ time_limit = now() - 86400 images = self.filter(transient=True, time__lt=time_limit) for image in images: image.delete(clear=True)