Esempio n. 1
0
 def get_by_user(self,
                 user,
                 querier,
                 page=1,
                 query_id=None,
                 all=False,
                 without_key=None):
     """
     Obtiene las listas de un usuario
     """
     if not user.is_authenticated():
         return []
     if user is None or querier is None:
         raise TypeError()
     if user.id == querier.id:
         if without_key is not None:
             q = self._klass.gql(
                 'WHERE user = :1 AND active = True ORDER BY modified DESC',
                 user)
         else:
             q = self._klass.gql(
                 'WHERE user = :1 AND active = True ORDER BY modified DESC',
                 user)
     else:
         q = self._klass.gql(
             'WHERE user = :1  AND active = True AND _vis = :2 ORDER BY modified DESC',
             user, 'public')
     if not all:
         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]
     else:
         return q.run()
Esempio n. 2
0
 def get_by_tag_querier(self, tagInstance, querier, page=1, query_id=None):
     from georemindme.paging import PagedQuery
     if not isinstance(querier, User) and not isinstance(
             querier, AnonymousUser):
         raise TypeError()
     from geotags.models import Tag
     if not isinstance(tagInstance, Tag):
         raise TypeError
     lists = self._klass.all().filter('_tags_list =', tagInstance.key())
     p = PagedQuery(lists, id=query_id)
     return_list = []
     lists_page = p.fetch_page(page)
     for list in lists_page:
         if list.__class__.user.get_value_for_datastore(
                 list) == querier.key():
             return_list.append(list)
         elif hasattr(list, '_vis'):
             if list._is_public():
                 return_list.append(list)
             elif list._is_shared() and list.user_invited(querier):
                 return_list.append(list)
     if len(return_list) != 0:
         prefetch_refprops(return_list, self._klass.user)
         return [p.id, return_list]
     return None
Esempio n. 3
0
    def get_by_user(self, user, querier, page=1, query_id=None, all=False, without_key=None):
        """
        Obtiene las listas de un usuario
        """
        if not user.is_authenticated():
            return []
        if user is None or querier is None:
            raise TypeError()
        if user.id == querier.id:
            if without_key is not None:
                q = self._klass.gql("WHERE user = :1 AND active = True ORDER BY modified DESC", user)
            else:
                q = self._klass.gql("WHERE user = :1 AND active = True ORDER BY modified DESC", user)
        else:
            q = self._klass.gql(
                "WHERE user = :1  AND active = True AND _vis = :2 ORDER BY modified DESC", user, "public"
            )
        if not all:
            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]
        else:
            return q.run()
Esempio n. 4
0
    def get_by_tag_querier(self, tagInstance, querier, page=1, query_id=None):
        from georemindme.paging import PagedQuery

        if not isinstance(querier, User) and not isinstance(querier, AnonymousUser):
            raise TypeError()
        from geotags.models import Tag

        if not isinstance(tagInstance, Tag):
            raise TypeError
        lists = self._klass.all().filter("_tags_list =", tagInstance.key())
        p = PagedQuery(lists, id=query_id)
        return_list = []
        lists_page = p.fetch_page(page)
        for list in lists_page:
            if list.__class__.user.get_value_for_datastore(list) == querier.key():
                return_list.append(list)
            elif hasattr(list, "_vis"):
                if list._is_public():
                    return_list.append(list)
                elif list._is_shared() and list.user_invited(querier):
                    return_list.append(list)
        if len(return_list) != 0:
            prefetch_refprops(return_list, self._klass.user)
            return [p.id, return_list]
        return None
Esempio n. 5
0
 def search(self, word, page=1, query_id = None):
     q = self._klass.all().search(word).order('-modified')
     p = PagedQuery(q, id = query_id)
     from georemindme.funcs import prefetch_refprops
     pois = p.fetch_page(page)
     pois = prefetch_refprops(pois, self._klass.user)
     return [p.id, pois]
Esempio n. 6
0
 def search(self, word, page=1, query_id=None):
     q = self._klass.all().search(word).order('-modified')
     p = PagedQuery(q, id=query_id)
     from georemindme.funcs import prefetch_refprops
     pois = p.fetch_page(page)
     pois = prefetch_refprops(pois, self._klass.user)
     return [p.id, pois]
Esempio n. 7
0
 def get_by_tag_querier(self, tagInstance, querier, page=1, query_id=None):
     if querier is None:
         raise TypeError()
     from geotags.models import Tag
     if not isinstance(tagInstance, Tag):
         raise TypeError
     events = self._klass.all().filter('_tags_list =', tagInstance.key())
     p = PagedQuery(events, id=query_id)
     events_lists = []
     from georemindme.funcs import prefetch_refprops
     events = p.fetch_page(page)
     for event in events:
         if event.__class__.user.get_value_for_datastore(
                 event) == querier.key():
             events_lists.append(event)
         elif hasattr(event, '_vis'):
             if event._is_public():
                 events_lists.append(event)
             elif event._is_shared() and event.user_invited(querier):
                 events_lists.append(event)
     if len(events_lists) != 0:
         events_lists = prefetch_refprops(events_lists, self._klass.user,
                                          self._klass.poi)
         return [p.id, events_lists], p.page_count()
     return None, 0
Esempio n. 8
0
    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]
Esempio n. 9
0
    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]
Esempio n. 10
0
 def get_by_suggestion(self, suggestion, querier):
     if not isinstance(querier, User) and not isinstance(querier, AnonymousUser):
         raise TypeError()
     lists = self._klass.all().filter("keys =", suggestion.key()).filter("active =", True)
     lists_loaded = []
     for list in lists:
         if not querier.is_authenticated():
             if list._is_public():
                 lists_loaded.append(list)
         else:
             if list.__class__.user.get_value_for_datastore(list) == querier.key():
                 lists_loaded.append(list)
             elif list._is_public():
                 lists_loaded.append(list)
             elif list._is_shared() and list.user_invited(querier):
                 lists_loaded.append(list)
     if len(lists_loaded) != 0:
         prefetch_refprops(lists_loaded, self._klass.user)
         return lists_loaded
     return []
Esempio n. 11
0
 def get_by_business_user(self, business, user, page=1, query_id=None):
     if not isinstance(user, User):
         raise AttributeError()
     if not isinstance(business, Business):
         raise AttributeError()
     
     q = self._klass.gql('WHERE business = :1 AND user = :2 ORDER BY created DESC', business, user)
     p = PagedQuery(q, id = query_id)
     from georemindme.funcs import prefetch_refprops
     pois = p.fetch_page(page)
     pois = prefetch_refprops(pois, self._klass.user, self._klass.business)
     return [p.id, pois]
Esempio n. 12
0
 def get_by_user(self, user, page=1, query_id=None):
     '''
     Obtiene una lista con todos los Eventos
     de un usuario
     '''
     if not isinstance(user, User):
         raise TypeError()
     q = self._klass.gql('WHERE user = :1 ORDER BY modified DESC', user)
     p = PagedQuery(q, id=query_id)
     from georemindme.funcs import prefetch_refprops
     events = p.fetch_page(page)
     events = prefetch_refprops(events, self._klass.user, self._klass.poi)
     return [p.id, events, p.page_count()]
Esempio n. 13
0
    def get_by_business_user(self, business, user, page=1, query_id=None):
        if not isinstance(user, User):
            raise AttributeError()
        if not isinstance(business, Business):
            raise AttributeError()

        q = self._klass.gql(
            'WHERE business = :1 AND user = :2 ORDER BY created DESC',
            business, user)
        p = PagedQuery(q, id=query_id)
        from georemindme.funcs import prefetch_refprops
        pois = p.fetch_page(page)
        pois = prefetch_refprops(pois, self._klass.user, self._klass.business)
        return [p.id, pois]
Esempio n. 14
0
 def get_by_suggestion(self, suggestion, querier):
     if not isinstance(querier, User) and not isinstance(
             querier, AnonymousUser):
         raise TypeError()
     lists = self._klass.all().filter('keys =', suggestion.key()).filter(
         'active =', True)
     lists_loaded = []
     for list in lists:
         if not querier.is_authenticated():
             if list._is_public():
                 lists_loaded.append(list)
         else:
             if list.__class__.user.get_value_for_datastore(
                     list) == querier.key():
                 lists_loaded.append(list)
             elif list._is_public():
                 lists_loaded.append(list)
             elif list._is_shared() and list.user_invited(querier):
                 lists_loaded.append(list)
     if len(lists_loaded) != 0:
         prefetch_refprops(lists_loaded, self._klass.user)
         return lists_loaded
     return []
Esempio n. 15
0
 def load_suggestions_async(suggestions):
     suggestions = suggestions.get_result()
     from georemindme.funcs import prefetch_refprops
     from geoalert.models import Suggestion
     suggestions = prefetch_refprops(suggestions, Suggestion.user, Suggestion.poi)
     suggestions_loaded = []
     for suggestion in suggestions:
         suggestions_loaded.append({
                                 'instance': suggestion,
                                 'has_voted':  Vote.objects.user_has_voted(request.user, suggestion.key()) if request.user.is_authenticated() else False,
                                 'vote_counter': Vote.objects.get_vote_counter(suggestion.key())
                                }
                               )
     return suggestions_loaded
Esempio n. 16
0
 def get_by_tag_owner(self, tagInstance, owner, page=1, query_id=None):
     if not isinstance(owner, User):
         raise TypeError()
     from geotags.models import Tag
     if not isinstance(tagInstance, Tag):
         raise TypeError
     events = self._klass.all().filter('_tags_list =',
                                       tagInstance.key()).filter(
                                           'user =', owner)
     p = PagedQuery(events, id=query_id)
     from georemindme.funcs import prefetch_refprops
     events = p.fetch_page(page)
     events = prefetch_refprops(events, self._klass.user, self._klass.poi)
     return [p.id, events]
Esempio n. 17
0
 def get_nearest(self, location, radius = 5000):
     if not isinstance(location, db.GeoPt):
         location = db.GeoPt(location)
     from mapsServices.fusiontable import ftclient, sqlbuilder
     
     ftclient = ftclient.OAuthFTClient()
     from django.conf import settings as __web_settings # parche hasta conseguir que se cachee variable global
     query = ftclient.query(sqlbuilder.SQL().select(__web_settings.FUSIONTABLES['TABLE_PLACES'], cols=['place_id'],
                                            condition = 'ST_INTERSECTS (location, CIRCLE(LATLNG (%s), %s))' % (location, radius)
                                            )
                    )
     results = query.splitlines()
     del results[0]  #  quitar la primera linea con el nombre de la columna
     places = [db.Key.from_path(self._klass.kind(), result) for result in results] # construir todas las keys para consultar en bach
     places = db.get(places)
     from georemindme.funcs import prefetch_refprops
     places = prefetch_refprops(places, self._klass.user)
     return places
Esempio n. 18
0
 def load_suggestions_async(suggestions):
     suggestions = suggestions.get_result()
     from georemindme.funcs import prefetch_refprops
     from geoalert.models import Suggestion
     suggestions = prefetch_refprops(suggestions, Suggestion.user,
                                     Suggestion.poi)
     suggestions_loaded = []
     for suggestion in suggestions:
         suggestions_loaded.append({
             'instance':
             suggestion,
             'has_voted':
             Vote.objects.user_has_voted(request.user, suggestion.key())
             if request.user.is_authenticated() else False,
             'vote_counter':
             Vote.objects.get_vote_counter(suggestion.key())
         })
     return suggestions_loaded
Esempio n. 19
0
 def load_suggestions_async(suggestions):
     suggestions_loaded = [s for s in suggestions]
     from georemindme.funcs import prefetch_refprops
     suggestions = prefetch_refprops(suggestions_loaded, SuggestionModel.user, SuggestionModel.poi)
     suggestions_loaded = []
     for a in suggestions:
         t = Suggestion(
                    name = a.name,
                    description = a.description,
                    poi_lat = a.poi.location.lat,
                    poi_lon = a.poi.location.lon,
                    poi_id = a.poi.id,
                    google_places_reference = a.poi.google_places_reference,
                    modified = int(mktime(a.modified.utctimetuple())),
                    created = int(mktime(a.created.utctimetuple())),
                    username = a.user.username,
                    id = a.id,
                  )
         suggestions_loaded.append(t)
     return suggestions_loaded
Esempio n. 20
0
    def get_nearest(self, location, radius=5000):
        if not isinstance(location, db.GeoPt):
            location = db.GeoPt(location)
        from mapsServices.fusiontable import ftclient, sqlbuilder

        ftclient = ftclient.OAuthFTClient()
        from django.conf import settings as __web_settings  # parche hasta conseguir que se cachee variable global
        query = ftclient.query(sqlbuilder.SQL().select(
            __web_settings.FUSIONTABLES['TABLE_PLACES'],
            cols=['place_id'],
            condition='ST_INTERSECTS (location, CIRCLE(LATLNG (%s), %s))' %
            (location, radius)))
        results = query.splitlines()
        del results[0]  #  quitar la primera linea con el nombre de la columna
        places = [
            db.Key.from_path(self._klass.kind(), result) for result in results
        ]  # construir todas las keys para consultar en bach
        places = db.get(places)
        from georemindme.funcs import prefetch_refprops
        places = prefetch_refprops(places, self._klass.user)
        return places
Esempio n. 21
0
 def get_by_user(self, user, querier, page=1, query_id=None):
     """
     Obtiene una lista con todos los Eventos
     de un usuario
     """
     if not isinstance(user, User) or not isinstance(querier, User):
         raise TypeError()
     if user.id == querier.id:
         q = self._klass.gql('WHERE user = :1 ORDER BY modified DESC', user)
     else:
         q = self._klass.gql(
             'WHERE user = :1 AND _vis = :2 ORDER BY modified DESC', user,
             'public')
     p = PagedQuery(q, id=query_id)
     suggestions = p.fetch_page(page)
     from georemindme.funcs import prefetch_refprops
     suggestions = prefetch_refprops(suggestions, self._klass.user,
                                     self._klass.poi)
     from geolist.models import ListSuggestion
     for s in suggestions:
         lists = ListSuggestion.objects.get_by_suggestion(s, querier)
         setattr(s, 'lists', lists)
     return [p.id, suggestions, p.page_count()]
Esempio n. 22
0
    def get_by_id(self, userid, query_id=None, querier=None):
        '''
        Obtiene la lista de ultimos timeline del usuario

            :param userid: id del usuario (user.id)
            :type userid: :class:`string`
            :param page: numero de pagina a mostrar
            :type param: int
            :param query_id: identificador de busqueda
            :type query_id: int
            :returns: lista de tuplas de la forma [query_id, [(id, username, avatar)]]
        '''
        try:
            userid = long(userid)
        except:
            return None
        from geovote.models import Vote, Comment
        from geoalert.models import Suggestion
        from geolist.models import List
        from models_acc import UserTimeline, UserTimelineSuggest
        query = UserTimeline.all().filter(
            'user ='******'-created')
        if query_id is not None:  # recuperamos los cursores anteriores
            query = query.with_cursor(start_cursor=query_id)
        timelines = query.fetch(10)
        query_id = query.cursor()
        from georemindme.funcs import prefetch_refprops
        timelines = prefetch_refprops(timelines, UserTimeline.user,
                                      UserTimeline.instance)
        instances = _load_ref_instances(timelines)
        if querier is None:
            return [
                query_id,
                [{
                    'id':
                    timeline.id,
                    'created':
                    timeline.created,
                    'modified':
                    timeline.modified,
                    'msg':
                    timeline.msg,
                    'username':
                    timeline.user.username,
                    'msg_id':
                    timeline.msg_id,
                    'instance':
                    instances.get(
                        UserTimeline.instance.get_value_for_datastore(
                            timeline), timeline.instance),
                    'list':
                    instances.get(
                        UserTimelineSuggest.list_id.get_value_for_datastore(
                            timeline), timeline.list_id) if isinstance(
                                timeline, UserTimelineSuggest) else None,
                    'has_voted':
                    Vote.objects.user_has_voted(
                        db.Key.from_path(User.kind(), userid),
                        timeline.instance.key())
                    if timeline.instance is not None else None,
                    'vote_counter':
                    Vote.objects.get_vote_counter(timeline.instance.key())
                    if timeline.instance is not None else None,
                    'comments':
                    Comment.objects.get_by_instance(timeline.instance),
                    'is_private':
                    False
                } for timeline in timelines]
            ]
        elif querier.is_authenticated() and querier.are_friends(
                db.Key.from_path(User.kind(), userid)):
            return [
                query_id,
                [{
                    'id':
                    timeline.id,
                    'created':
                    timeline.created,
                    'modified':
                    timeline.modified,
                    'msg':
                    timeline.msg,
                    'username':
                    timeline.user.username,
                    'msg_id':
                    timeline.msg_id,
                    'instance':
                    instances.get(
                        UserTimeline.instance.get_value_for_datastore(
                            timeline), timeline.instance),
                    'list':
                    instances.get(
                        UserTimelineSuggest.list_id.get_value_for_datastore(
                            timeline), timeline.list_id) if isinstance(
                                timeline, UserTimelineSuggest) else None,
                    'has_voted':
                    Vote.objects.user_has_voted(querier,
                                                timeline.instance.key())
                    if timeline.instance is not None else None,
                    'vote_counter':
                    Vote.objects.get_vote_counter(timeline.instance.key())
                    if timeline.instance is not None else None,
                    'comments':
                    Comment.objects.get_by_instance(timeline.instance,
                                                    querier=querier),
                    'user_follower':
                    timeline.instance.has_follower(querier)
                    if isinstance(timeline.instance, Suggestion)
                    and querier.is_authenticated() else None,
                    'is_private':
                    False,
                } for timeline in timelines
                 if timeline._is_shared() or timeline._is_public()]
            ]
        return [
            query_id,
            [{
                'id':
                timeline.id,
                'created':
                timeline.created,
                'modified':
                timeline.modified,
                'msg':
                timeline.msg,
                'username':
                timeline.user.username,
                'msg_id':
                timeline.msg_id,
                'instance':
                instances.get(
                    UserTimeline.instance.get_value_for_datastore(timeline),
                    timeline.instance),
                'list':
                instances.get(
                    UserTimelineSuggest.list_id.get_value_for_datastore(
                        timeline), timeline.list_id) if isinstance(
                            timeline, UserTimelineSuggest) else None,
                'has_voted':
                Vote.objects.user_has_voted(querier, timeline.instance.key())
                if timeline.instance is not None
                and querier.is_authenticated() else None,
                'vote_counter':
                Vote.objects.get_vote_counter(timeline.instance.key())
                if timeline.instance is not None else None,
                'comments':
                Comment.objects.get_by_instance(timeline.instance,
                                                querier=querier),
                'user_follower':
                timeline.instance.has_follower(querier)
                if isinstance(timeline.instance, Suggestion)
                and querier.is_authenticated() else None,
                'is_private':
                False,
            } for timeline in timelines if timeline._is_public()]
        ]
Esempio n. 23
0
                     place,
                     page=1,
                     query_id=None,
                     async=False,
                     querier=None):
        if querier is None:
            raise TypeError()
        q = self._klass.all().filter('poi =', place.key())
        p = PagedQuery(q, id=query_id)
        if async:
            return p.id, q.run()
        else:
            from geovote.models import Vote
            from georemindme.funcs import prefetch_refprops
            suggestions = p.fetch_page(page)
            suggestions = prefetch_refprops(suggestions, Suggestion.user,
                                            Suggestion.poi)
            [
                p.id,
                [{
                    'instance':
                    suggestion,
                    'has_voted':
                    Vote.objects.user_has_voted(querier, suggestion.key()),
                    'vote_counter':
                    Vote.objects.get_vote_counter(suggestion.key())
                } for suggestion in suggestions]
            ]

    def get_by_id_user(self, id, user, querier):
        '''
        Obtiene el evento con ese id comprobando que
Esempio n. 24
0
 def get_activity_timeline(self, query_id=None):
     from models_acc import UserTimelineSystem, UserTimeline, UserTimelineFollowersIndex, UserTimelineSuggest
     from geovote.models import Comment, Vote
     from geoalert.models import Event
     from geolist.models import List
     # definir las consultas
     query_chrono = UserTimelineFollowersIndex.all().filter(
         'followers =', self.key()).order('-created')
     query_activity = UserTimelineSystem.all().filter(
         'user ='******'visible =', True).order('-modified')
     # recuperar cursores
     if query_id is not None and len(query_id) >= 2:
         cursor_chronology = query_id[0]
         cursor_activity = query_id[1]
         query_chrono = query_chrono.with_cursor(
             start_cursor=cursor_chronology)
         query_activity = query_activity.with_cursor(
             start_cursor=cursor_activity)
     else:
         cursor_activity = None
         cursor_chronology = None
     # let's go!
     timeline = []
     timeline_chrono = []
     activity_async = query_activity.run(
         config=datastore_query.QueryOptions(limit=TIMELINE_PAGE_SIZE))
     chrono_async = query_chrono.run(config=datastore_query.QueryOptions(
         limit=TIMELINE_PAGE_SIZE))
     _go_chrono = True
     chrono = None
     for activity_timeline in activity_async:
         while _go_chrono:
             if len(timeline) + len(timeline_chrono) >= TIMELINE_PAGE_SIZE:
                 _go_chrono = False
                 break
             if chrono is None:
                 try:
                     chrono = chrono_async.next()
                 except:
                     _go_chrono = False
                     break
             if chrono is not None and chrono.created > activity_timeline.modified:
                 timeline_chrono.append(chrono)
                 chrono = None
             else:
                 break
         timeline.append(activity_timeline)
         if len(timeline) + len(timeline_chrono) >= TIMELINE_PAGE_SIZE:
             break
     # generar timeline
     timeline_chrono = fetch_parents(timeline_chrono)
     timeline = prefetch_refprops(timeline, UserTimeline.user)
     timeline_chrono = prefetch_refprops(timeline_chrono,
                                         UserTimeline.instance,
                                         UserTimeline.user)
     timeline.extend(timeline_chrono)
     #seguimos cargando por lotes todas las referencias
     from helpers_acc import _load_ref_instances
     instances = _load_ref_instances(timeline)
     timeline = [{
         'id':
         int(activity_timeline.id),
         'created':
         activity_timeline.created,
         'modified':
         activity_timeline.modified,
         'msg':
         activity_timeline.msg,
         'username':
         activity_timeline.user.username,
         'msg_id':
         activity_timeline.msg_id,
         'instance':
         instances.get(
             UserTimeline.instance.get_value_for_datastore(
                 activity_timeline), activity_timeline.instance),
         'has_voted':
         Vote.objects.user_has_voted(self, activity_timeline.instance.key())
         if activity_timeline.instance is not None else None,
         'vote_counter':
         Vote.objects.get_vote_counter(activity_timeline.instance.key())
         if activity_timeline.instance is not None else None,
         'comments':
         Comment.objects.get_by_instance(activity_timeline.instance,
                                         querier=self),
         'list':
         instances.get(
             UserTimelineSuggest.list_id.get_value_for_datastore(
                 activity_timeline), activity_timeline.list_id)
         if isinstance(activity_timeline, UserTimelineSuggest) else None,
         'status':
         activity_timeline.status
         if hasattr(activity_timeline, 'status') else None,
         'is_private':
         True,
         'user_follower':
         instances.get(
             UserTimeline.instance.get_value_for_datastore(
                 activity_timeline),
             activity_timeline.instance).has_follower(self) if hasattr(
                 instances.get(
                     UserTimeline.instance.get_value_for_datastore(
                         activity_timeline), activity_timeline.instance),
                 'has_follower') else None,
     } for activity_timeline in timeline]
     from operator import itemgetter
     timeline_sorted = sorted(timeline,
                              key=itemgetter('modified'),
                              reverse=True)
     chronology = [[query_chrono.cursor(),
                    query_activity.cursor()], timeline_sorted]
     return chronology
Esempio n. 25
0
    def get_by_id(self, userid, query_id = None, querier=None):
        '''
        Obtiene la lista de ultimos timeline del usuario

            :param userid: id del usuario (user.id)
            :type userid: :class:`string`
            :param page: numero de pagina a mostrar
            :type param: int
            :param query_id: identificador de busqueda
            :type query_id: int
            :returns: lista de tuplas de la forma [query_id, [(id, username, avatar)]]
        '''
        try:
            userid = long(userid)
        except:
            return None
        from geovote.models import Vote, Comment
        from geoalert.models import Suggestion
        from geolist.models import List
        from models_acc import UserTimeline, UserTimelineSuggest
        query = UserTimeline.all().filter('user ='******'-created')
        if query_id is not None:  # recuperamos los cursores anteriores
            query = query.with_cursor(start_cursor=query_id)
        timelines = query.fetch(10)
        query_id = query.cursor()
        from georemindme.funcs import prefetch_refprops
        timelines = prefetch_refprops(timelines, UserTimeline.user, UserTimeline.instance)
        instances = _load_ref_instances(timelines)
        if querier is None:
                return [query_id, [{'id': timeline.id, 'created': timeline.created, 
                        'modified': timeline.modified,
                        'msg': timeline.msg, 'username':timeline.user.username, 
                        'msg_id': timeline.msg_id,
                        'instance': instances.get(UserTimeline.instance.get_value_for_datastore(timeline), timeline.instance),
                        'list': instances.get(UserTimelineSuggest.list_id.get_value_for_datastore(timeline), timeline.list_id) 
                                    if isinstance(timeline, UserTimelineSuggest) else None,
                        'has_voted':  Vote.objects.user_has_voted(db.Key.from_path(User.kind(), userid), timeline.instance.key()) if timeline.instance is not None else None,
                        'vote_counter': Vote.objects.get_vote_counter(timeline.instance.key()) if timeline.instance is not None else None,
                        'comments': Comment.objects.get_by_instance(timeline.instance),
                        'is_private': False
                        } 
                       for timeline in timelines]]
        elif querier.is_authenticated() and querier.are_friends(db.Key.from_path(User.kind(), userid)):
            return [query_id, [{'id': timeline.id, 'created': timeline.created, 
                        'modified': timeline.modified,
                        'msg': timeline.msg, 'username':timeline.user.username, 
                        'msg_id': timeline.msg_id,
                        'instance': instances.get(UserTimeline.instance.get_value_for_datastore(timeline), timeline.instance),
                        'list': instances.get(UserTimelineSuggest.list_id.get_value_for_datastore(timeline), timeline.list_id) 
                                    if isinstance(timeline, UserTimelineSuggest) else None,
                        'has_voted':  Vote.objects.user_has_voted(querier, timeline.instance.key()) if timeline.instance is not None else None,
                        'vote_counter': Vote.objects.get_vote_counter(timeline.instance.key()) if timeline.instance is not None else None,
                        'comments': Comment.objects.get_by_instance(timeline.instance, querier=querier),
                        'user_follower': timeline.instance.has_follower(querier) if isinstance(timeline.instance, Suggestion) and querier.is_authenticated() else None,
                        'is_private': False,
                        }
                        for timeline in timelines if timeline._is_shared() or timeline._is_public()]]
        return [query_id, [{'id': timeline.id, 'created': timeline.created, 
                        'modified': timeline.modified,
                        'msg': timeline.msg, 'username':timeline.user.username, 
                        'msg_id': timeline.msg_id,
                        'instance': instances.get(UserTimeline.instance.get_value_for_datastore(timeline), timeline.instance),
                        'list': instances.get(UserTimelineSuggest.list_id.get_value_for_datastore(timeline), timeline.list_id) 
                                    if isinstance(timeline, UserTimelineSuggest) else None,
                        'has_voted':  Vote.objects.user_has_voted(querier, timeline.instance.key()) if timeline.instance is not None and querier.is_authenticated()else None,
                        'vote_counter': Vote.objects.get_vote_counter(timeline.instance.key()) if timeline.instance is not None else None,
                        'comments': Comment.objects.get_by_instance(timeline.instance, querier=querier),
                        'user_follower': timeline.instance.has_follower(querier) if isinstance(timeline.instance, Suggestion) and querier.is_authenticated() else None,
                        'is_private': False,
                        }
                       for timeline in timelines if timeline._is_public()]]
Esempio n. 26
0
 def get_nearest(self, location, radius=5000, querier=None):
     if not isinstance(location, db.GeoPt):
         location = db.GeoPt(location)
     import memcache
     client = memcache.mem.Client()
     if querier is not None and querier.is_authenticated():
         sugs = client.get('%ssug_nearest%s,%s_%s' % (
             memcache.version,
             location.lat,
             location.lon,
             querier.username,
         ))
     else:
         sugs = client.get('%ssug_nearest%s,%s' %
                           (memcache.version, location.lat, location.lon))
     if sugs is None:
         from mapsServices.fusiontable import ftclient, sqlbuilder
         ftclient = ftclient.OAuthFTClient()
         from django.conf import settings as __web_settings  # parche hasta conseguir que se cachee variable global
         query = ftclient.query(sqlbuilder.SQL().select(
             __web_settings.FUSIONTABLES['TABLE_SUGGS'],
             cols=['sug_id'],
             condition=
             'ST_INTERSECTS (location, CIRCLE(LATLNG (%s), %s)) ORDER BY relevance DESC LIMIT 50'
             % (location, radius)))
         results = query.splitlines()
         if len(results) == 1:
             return []
         del results[
             0]  #  quitar la primera linea con el nombre de la columna
         try:
             sugs = [
                 db.Key.from_path(self._klass.kind(), int(result))
                 for result in results
             ]  # construir todas las keys para consultar en bach
         except:
             return []
         sugs = db.get(sugs)
         sugs = filter(None, sugs)
         if querier is not None and querier.is_authenticated():
             sugs = filter(
                 lambda x: x.__class__.user.get_value_for_datastore(x) !=
                 querier.key(), sugs)
         from georemindme.funcs import prefetch_refprops
         prefetch_refprops(sugs, Suggestion.user, Suggestion.poi)
         sugs = sorted(sugs,
                       key=lambda x: x._calc_relevance(),
                       reverse=True)
         sugs = [{
             'id': sug.key().id(),
             'slug': sug.slug,
             'username': sug.user.username,
             'name': sug.name,
             'address': sug.poi.address,
             'description': sug.description,
             'poi': {
                 'lat': sug.poi.location.lat,
                 'lon': sug.poi.location.lon,
                 'id': sug.poi.id,
             },
             'created': sug.created,
             'modified': sug.modified,
         } for sug in sugs]
         if querier is not None and querier.is_authenticated():
             client.set(
                 '%ssug_nearest%s,%s_%s' % (
                     memcache.version,
                     location.lat,
                     location.lon,
                     querier.username,
                 ), sugs, 112)
         else:
             client.set(
                 '%ssug_nearest%s,%s' %
                 (memcache.version, location.lat, location.lon), sugs, 112)
         # FIXME : DEBERIA USARSE CAS EN VEZ DE SET EN MEMCACHE
     return sugs
Esempio n. 27
0
 def get_activity_timeline(self, query_id=None):
     from models_acc import UserTimelineSystem, UserTimeline, UserTimelineFollowersIndex, UserTimelineSuggest
     from geovote.models import Comment, Vote
     from geoalert.models import Event
     from geolist.models import List
     # definir las consultas
     query_chrono = UserTimelineFollowersIndex.all().filter('followers =', self.key()).order('-created')
     query_activity = UserTimelineSystem.all().filter('user ='******'visible =', True).order('-modified')
     # recuperar cursores
     if query_id is not None and len(query_id)>=2:
         cursor_chronology = query_id[0]
         cursor_activity = query_id[1]
         query_chrono = query_chrono.with_cursor(start_cursor=cursor_chronology)
         query_activity = query_activity.with_cursor(start_cursor=cursor_activity)
     else:
         cursor_activity = None
         cursor_chronology = None
     # let's go!
     timeline = []
     timeline_chrono = []
     activity_async = query_activity.run(config=datastore_query.QueryOptions(limit=TIMELINE_PAGE_SIZE))
     chrono_async = query_chrono.run(config=datastore_query.QueryOptions(limit=TIMELINE_PAGE_SIZE))
     _go_chrono = True
     chrono = None
     for activity_timeline in activity_async:
         while _go_chrono:
             if len(timeline) + len(timeline_chrono) >= TIMELINE_PAGE_SIZE:
                 _go_chrono = False
                 break
             if chrono is None:
                 try:
                     chrono = chrono_async.next()
                 except:
                     _go_chrono = False
                     break
             if chrono is not None and chrono.created > activity_timeline.modified:
                 timeline_chrono.append(chrono)
                 chrono = None
             else:
                 break
         timeline.append(activity_timeline)
         if len(timeline) + len(timeline_chrono) >= TIMELINE_PAGE_SIZE:
             break
     # generar timeline
     timeline_chrono = fetch_parents(timeline_chrono)
     timeline = prefetch_refprops(timeline, UserTimeline.user)
     timeline_chrono = prefetch_refprops(timeline_chrono, UserTimeline.instance, UserTimeline.user)
     timeline.extend(timeline_chrono)
     #seguimos cargando por lotes todas las referencias
     from helpers_acc import _load_ref_instances
     instances = _load_ref_instances(timeline)
     timeline = [{
                 'id': int(activity_timeline.id),
                 'created': activity_timeline.created,
                 'modified': activity_timeline.modified,
                 'msg': activity_timeline.msg,
                 'username': activity_timeline.user.username,
                 'msg_id': activity_timeline.msg_id,
                 'instance': instances.get(UserTimeline.instance.get_value_for_datastore(activity_timeline), activity_timeline.instance),
                 'has_voted': Vote.objects.user_has_voted(self, activity_timeline.instance.key()) if activity_timeline.instance is not None else None,
                 'vote_counter': Vote.objects.get_vote_counter(activity_timeline.instance.key()) if activity_timeline.instance is not None else None,
                 'comments': Comment.objects.get_by_instance(activity_timeline.instance, querier=self),
                 'list': instances.get(UserTimelineSuggest.list_id.get_value_for_datastore(activity_timeline), activity_timeline.list_id)
                                 if isinstance(activity_timeline, UserTimelineSuggest) else None,
                 'status': activity_timeline.status if hasattr(activity_timeline, 'status') else None,
                 'is_private': True,
                 'user_follower': instances.get(UserTimeline.instance.get_value_for_datastore(activity_timeline), activity_timeline.instance).has_follower(self)
                     if hasattr(instances.get(UserTimeline.instance.get_value_for_datastore(activity_timeline), activity_timeline.instance), 'has_follower')
                     else None,
                 } for activity_timeline in timeline]
     from operator import itemgetter
     timeline_sorted = sorted(timeline, key=itemgetter('modified'), reverse=True)
     chronology = [[query_chrono.cursor(), query_activity.cursor()], timeline_sorted]
     return chronology