def _del_follows(self, key): ''' Borra un key de la lista de following :param key: key del usuario a borrar :type key: :class:`db.Key() :returns: True si se borro el usuario, False si no se encontro ''' from models_acc import UserFollowingIndex index = UserFollowingIndex.all().ancestor(self.key()).filter( 'following =', key).get() if index is not None: index.following.remove(key) try: from models_acc import UserCounter counter_result = self.counters_async( ) # obtiene los contadores de self follow_query = UserCounter.all().ancestor( key) # obtiene los contadores del otro usuario follow_result = follow_query.run() counter_result = counter_result.next() follow_result = follow_result.next() counter_result.set_followings( -1) # sumamos uno al contador de following follow_result.set_followers( -1 ) # sumamos uno al contador de followers del otro usuario except: return False index.put() return True return False
def _del_follows(self, key): ''' Borra un key de la lista de following :param key: key del usuario a borrar :type key: :class:`db.Key() :returns: True si se borro el usuario, False si no se encontro ''' from models_acc import UserFollowingIndex index = UserFollowingIndex.all().ancestor(self.key()).filter('following =', key).get() if index is not None: index.following.remove(key) try: from models_acc import UserCounter counter_result = self.counters_async() # obtiene los contadores de self follow_query = UserCounter.all().ancestor(key) # obtiene los contadores del otro usuario follow_result = follow_query.run() counter_result = counter_result.next() follow_result = follow_result.next() counter_result.set_followings(-1) # sumamos uno al contador de following follow_result.set_followers(-1) # sumamos uno al contador de followers del otro usuario except: return False index.put() return True return False
def _add_follows(self, followiterator, key): ''' Guarda el usuario en el ultimo index posible, si se ha llegado al maximo numero de usuarios por lista, se crea uno nuevo. :param followiterator: Iterador con la consulta para obtener los index, ordenador por fecha de creacion asi el primero de la lista, sera el ultimo index posible. :type followiterator: :class:`_QueryIterator` :param key: key del usuario a añadir :type key: :class:`db.Key() :returns: True si se añadio el usuario ''' from models_acc import UserFollowingIndex try: last_follow = followiterator.next() # como estan ordenados por fecha de creacion, carga el primero que seria el ultimo indice. except StopIteration: last_follow = UserFollowingIndex(parent=self) if len(last_follow.following) < TIMELINE_PAGE_SIZE*2: # un maximo de usuarios en este index para que las listas no sean lentas last_follow.following.append(key) else: # creamos un index nuevo last_follow = UserFollowingIndex(parent=self, following=[key]) try: from models_acc import UserCounter counter_result = self.counters_async() # obtiene los contadores de self follow_query = UserCounter.all().ancestor(key) # obtiene los contadores del otro usuario follow_result = follow_query.run() counter_result = counter_result.next() follow_result = follow_result.next() counter_result.set_followings(+1) # sumamos uno al contador de following follow_result.set_followers(+1)# sumamos uno al contador de followers del otro usuario except: return False last_follow.put() return True
def _add_follows(self, followiterator, key): ''' Guarda el usuario en el ultimo index posible, si se ha llegado al maximo numero de usuarios por lista, se crea uno nuevo. :param followiterator: Iterador con la consulta para obtener los index, ordenador por fecha de creacion asi el primero de la lista, sera el ultimo index posible. :type followiterator: :class:`_QueryIterator` :param key: key del usuario a añadir :type key: :class:`db.Key() :returns: True si se añadio el usuario ''' from models_acc import UserFollowingIndex try: last_follow = followiterator.next( ) # como estan ordenados por fecha de creacion, carga el primero que seria el ultimo indice. except StopIteration: last_follow = UserFollowingIndex(parent=self) if len( last_follow.following ) < TIMELINE_PAGE_SIZE * 2: # un maximo de usuarios en este index para que las listas no sean lentas last_follow.following.append(key) else: # creamos un index nuevo last_follow = UserFollowingIndex(parent=self, following=[key]) try: from models_acc import UserCounter counter_result = self.counters_async( ) # obtiene los contadores de self follow_query = UserCounter.all().ancestor( key) # obtiene los contadores del otro usuario follow_result = follow_query.run() counter_result = counter_result.next() follow_result = follow_result.next() counter_result.set_followings( +1) # sumamos uno al contador de following follow_result.set_followers( +1) # sumamos uno al contador de followers del otro usuario except: return False last_follow.put() return True
def counters_async(self): from models_acc import UserCounter q = UserCounter.all().ancestor(self.key()) return q.run()