Example #1
0
    def get_top_users(self, limit=5):
        from geouser.models_acc import UserCounter

        top_users = UserCounter.all(keys_only=True).order("-suggested").fetch(limit)
        top_users = model_plus.fetch_parentsKeys(top_users)
        top_users = filter(None, top_users)
        return top_users
Example #2
0
 def get_top_users(self, limit=5):
     from geouser.models_acc import UserCounter
     top_users = UserCounter.all(
         keys_only=True).order('-suggested').fetch(limit)
     top_users = model_plus.fetch_parentsKeys(top_users)
     top_users = filter(None, top_users)
     return top_users
Example #3
0
    def load_list_user_following_by_async(self, lists_async, to_dict=True, resolve=False):
        lists = model_plus.fetch_parentsKeys(lists_async)
        from georemindme.funcs import prefetch_refList

        if lists is not None and any(lists):
            if to_dict:
                if resolve:
                    instances = prefetch_refList(lists)
                else:
                    instances = None
                return [list.to_dict(resolve=resolve, instances=instances) for list in lists if list.active]
            return lists
        return []
Example #4
0
def get_suggestions_dict(querier):
    from models_indexes import SuggestionFollowersIndex
    
    indexes = SuggestionFollowersIndex.all(keys_only=True).filter('keys =', querier.key()).order('-created').run()
    suggs = model_plus.fetch_parentsKeys([s for s in indexes])
    if isinstance(suggs, list) and any(suggs):
        suggestions = []
        for s in suggs: # convertir entidades
            setattr(s, 'lists', [])
            suggestions.append(s)
        suggestions = model_plus.prefetch(suggestions, Suggestion.user, Suggestion.poi) 
        return suggestions
    return []
Example #5
0
 def load_list_user_following_by_async(self,
                                       lists_async,
                                       to_dict=True,
                                       resolve=False):
     lists = model_plus.fetch_parentsKeys(lists_async)
     from georemindme.funcs import prefetch_refList
     if lists is not None and any(lists):
         if to_dict:
             if resolve:
                 instances = prefetch_refList(lists)
             else:
                 instances = None
             return [
                 list.to_dict(resolve=resolve, instances=instances)
                 for list in lists if list.active
             ]
         return lists
     return []
Example #6
0
class ListHelper(object):
    _klass = List

    def get_all_public(self, query_id=None, page=1):
        '''
        Devuelve todas las listas publicas ¡PAGINADA!

            :param page: numero de pagina a mostrar
            :type param: int
            :param query_id: identificador de busqueda
            :type query_id: int
        '''
        q = self._klass.all().filter('_vis =',
                                     'public').filter('active =',
                                                      True).order('-modified')
        from georemindme.paging import PagedQuery
        p = PagedQuery(q, id=query_id)
        lists = p.fetch_page(page)
        prefetch_refprops(lists, self._klass.user)
        return [p.id, lists]

    def get_by_id(self, id):
        '''
        Devuelve la lista publica con ese ID

            :param id: identificador de la lista
            :type id: :class:`Integer`
            :returns: None o :class:`geolist.models.List`
        '''
        try:
            id = int(id)
        except:
            raise TypeError
        list = self._klass.get_by_id(id)
        return list

    def get_by_name_user(self, name, user):
        list = self._klass.all().filter('user ='******'name =', name).filter(
                                            'active =', True).get()
        return list

    def get_by_id_querier(self, id, querier):
        '''
        Devuelve la lista publica con ese ID

            :param id: identificador de la lista
            :type id: :class:`Integer`
            :returns: None o :class:`geolist.models.List`
        '''
        if not isinstance(querier, User) and not isinstance(
                querier, AnonymousUser):
            raise TypeError()
        list = self.get_by_id(id)
        if list is None:
            return None
        if list.__class__.user.get_value_for_datastore(list) == querier.key():
            return list
        if hasattr(list, '_vis'):
            if list._is_public():
                return list
            elif list._is_shared() and list.user_invited(querier):
                return list
        return None

    def get_by_id_user(self, id, user):
        '''
        Devuelve la lista con ese ID y el usuario como dueño.

            :param id: identificador de la lista
            :type id: :class:`Integer`
            :param user: usuario
            :type user: :class:`geouser.models.User`
            :returns: None o :class:`geolist.models.List`
        '''
        list = self.get_by_id(id)
        if list is not None:
            if not list.active:
                return None
            if list.__class__.user.get_value_for_datastore(list) == user.key():
                return list
        return None

    def get_list_user_following(self, user, resolve=False, async=False):
        '''
        Devuelve las listas a las que sigue el usuario

            :param user: usuario del que buscar las listas
            :type user: :class:`geouser.models.User`
        '''
        if not user.is_authenticated():
            return []
        from google.appengine.api import datastore

        if async:
            indexes = ListFollowersIndex.all(keys_only=True).filter(
                'keys =', user.key())
            return indexes.run()
        q = datastore.Query('ListFollowersIndex', {'keys =': user.key()},
                            keys_only=True)
        run = q.Run()
        indexes = [a for a in run]
        lists = model_plus.fetch_parentsKeys(indexes)
        return [list.to_dict(resolve=resolve) for list in lists if list.active]