def _tx(list_key, user_key): # TODO : cambiar a contador con sharding from models_indexes import ListFollowersIndex if ListFollowersIndex.all().ancestor(list_key).filter('keys =', user_key).get() is not None: return False # el usuario ya sigue la lista # indice con personas que siguen la sugerencia index = ListFollowersIndex.all().ancestor(list_key).filter('count <', 80).get() if index is None: index = ListFollowersIndex(parent=list_key) index.keys.append(user_key) index.count += 1 index.put() return True
def insert_list(cls, user, id=None, name=None, description = None, instances=[], instances_del=[], tags = None, vis='public'): """ Crea una nueva lista, en el caso de que exista una con ese nombre, se añaden las alertas :param user: usuario :type user: :class:`geouser.models.User` :param name: nombre de la lista :type name: :class:`string` :param description: descripcion de la lista :type description: :class:`string` :param instances: objetos a añadir a la lista :type instances: :class:`geoalert.models.Alert` :param vis: Visibilidad de la lista :type vis: :class:`string` """ list = None if id is not None: list = cls.objects.get_by_id_user(id, user) if list is None: list = user.listsuggestion_set.filter('name =', name).get() if list is not None: # la lista con ese nombre ya existe, la editamos list.update(name=name, description=description, instances=instances, instances_del=instances_del, tags=tags, vis=vis ) return list return False keys= set([db.Key.from_path('Event', int(instance)) for instance in instances]) list = ListSuggestion(name=name, user=user, description=description, keys=[k for k in keys], _vis=vis if vis is not None else 'public' ) if tags is not None: list._tags_setter(tags, commit=False) list.put() followers = ListFollowersIndex(parent=list.key(), keys=[list.user.key()]) followers.put() return list