Exemple #1
0
def rss_explore(request, tag_string, s_type=None):
    from apps.plus_lib.redis_lib import redis
    feed_type = 'rss2.0'  # XXX decide how to send this as parameter to link
    key = "feed:" + feed_type + ":" + tag_string
    if redis.exists(key):
        return HttpResponse(redis.get(key), mimetype="application/xhtml+xml")
    else:
        feed = Rss201rev2Feed(
            title=settings.SITE_NAME + " : " + tag_string,
            link='http://' + settings.DOMAIN_NAME +
            reverse('explore_filtered_feed', args=(tag_string, )),
            description=_("Items tagged with %s" % tag_string))
        # XXX decide how to parameterize which feed type, title, description, link

        form = SearchForm(request.GET)
        if form.is_valid():
            search, order = set_search_order(request, form)
        else:
            search = ''
            order = ''

        side_search = side_search_args('', '')

        if s_type:
            search_types = narrow_search_types(s_type)
        else:
            search_types = get_search_types()

        head_title = settings.EXPLORE_NAME
        listing_args_dict = listing_args('explore',
                                         'explore_filtered',
                                         tag_string=tag_string,
                                         search_terms=search,
                                         multitabbed=True,
                                         order=order,
                                         template_base="site_base.html",
                                         search_type_label=head_title)
        search_dict = plus_search(listing_args_dict['tag_filter'], search,
                                  search_types, order)

        for item_ref in search_dict['All']:
            item = item_ref.obj
            item = secure_wrap(item, request.user)

            try:
                feed.add_item(title=item.get_display_name(),
                              link=item.get_url(),
                              description=item.get_description(),
                              author_name=item.get_author_name(),
                              author_copyright=item.get_author_copyright(),
                              pubdate=item.get_created_date(),
                              **(item.get_feed_extras()))
            except PlusPermissionsNoAccessException, e:
                pass

        feed_string = feed.writeString('utf-8')
        # uncomment the following when we start to cache
        #redis.set(key,feed_string)
        #redis.expire(key,60*60*1) # sets expire every 1 hour
        return HttpResponse(feed_string, mimetype="application/xhtml+xml")
Exemple #2
0
def get_enclosure_set(self, seen=None):
    key = cache_key(MULTI_LEVEL_MEMBERSHIP_KEY, self)
    if redis.exists(key):
        return TgGroup.objects.filter(id__in=redis.smembers(key))

    es = get_enclosure_id_set(self.__class__, self.id)
    add_to_cached_set(key, es)

    return TgGroup.objects.filter(id__in=[x for x in es])
Exemple #3
0
def get_enclosure_set(self, seen=None):
    key = cache_key(MULTI_LEVEL_MEMBERSHIP_KEY, self)
    if redis.exists(key) :
        return TgGroup.objects.filter(id__in=redis.smembers(key))

    es = get_enclosure_id_set(self.__class__, self.id)
    add_to_cached_set(key, es)

    return TgGroup.objects.filter(id__in=[x for x in es])
Exemple #4
0
def rss_explore(request, tag_string, s_type=None) :
    from apps.plus_lib.redis_lib import redis
    feed_type = 'rss2.0' # XXX decide how to send this as parameter to link
    key = "feed:"+feed_type+":"+tag_string
    if redis.exists(key) :
        return HttpResponse(redis.get(key),mimetype="application/xhtml+xml")
    else :
        feed = Rss201rev2Feed(title=settings.SITE_NAME+" : "+tag_string,
                              link='http://'+settings.DOMAIN_NAME+reverse('explore_filtered_feed',args=(tag_string,)),
                              description=_("Items tagged with %s" % tag_string) )
        # XXX decide how to parameterize which feed type, title, description, link

        form = SearchForm(request.GET)
        if form.is_valid():
            search, order = set_search_order(request, form)
        else:
            search = ''
            order = ''

        side_search = side_search_args('', '')

        if s_type :
            search_types = narrow_search_types(s_type)
        else :
            search_types = get_search_types()

        head_title = settings.EXPLORE_NAME
        listing_args_dict = listing_args('explore', 'explore_filtered', tag_string=tag_string, search_terms=search, multitabbed=True, order=order, template_base="site_base.html", search_type_label=head_title)
        search_dict = plus_search(listing_args_dict['tag_filter'], search, search_types, order)

        for item_ref in search_dict['All']:
            item = item_ref.obj
            item=secure_wrap(item,request.user)

            try :
                feed.add_item(title=item.get_display_name(), 
                          link=item.get_url(), 
                          description=item.get_description(),
                          author_name=item.get_author_name(),
                          author_copyright=item.get_author_copyright(),
                          pubdate=item.get_created_date(),
                          **(item.get_feed_extras())
                          )
            except PlusPermissionsNoAccessException, e :
                pass


        feed_string = feed.writeString('utf-8')
        # uncomment the following when we start to cache
        #redis.set(key,feed_string)
        #redis.expire(key,60*60*1) # sets expire every 1 hour
        return HttpResponse(feed_string, mimetype="application/xhtml+xml")
Exemple #5
0
def get_enclosure_ids(cls, id):
    """ Note, these are depth 1 membership ids. And note also that all enclosures, are, by definition TgGroup
    cls is the actual python class (django model class) ... cache_key takes its name
    """
    key = cache_key(ONE_LEVEL_MEMBERSHIP_KEY, cls=cls, id=id)
    if redis.exists(key):
        return redis.smembers(key)

    # if not cached, get the object and get its enclosures
    obj = cls.objects.get(id=id)
    memberships = set([x.id for x in obj.get_enclosures()])

    add_to_cached_set(key, memberships)
    return memberships
Exemple #6
0
def get_enclosure_ids(cls,id) :
    """ Note, these are depth 1 membership ids. And note also that all enclosures, are, by definition TgGroup
    cls is the actual python class (django model class) ... cache_key takes its name
    """
    key = cache_key(ONE_LEVEL_MEMBERSHIP_KEY, cls=cls, id=id)
    if redis.exists(key) :
        return redis.smembers(key)

    # if not cached, get the object and get its enclosures
    obj = cls.objects.get(id=id)
    memberships = set([x.id for x in obj.get_enclosures()])
    
    add_to_cached_set(key, memberships)
    return memberships
Exemple #7
0
    def get_for(self, receiver, start_stop = None) :
        """ Feed items for receiver.
        If we already have a redis list for this receiver, then just pull from it,
        otherwise, recreate from db
        receiver is user or group"""

        key = feed_for_key(receiver)
        if redis.exists(key) :
            if not start_stop :
                start,stop=[0,39]
            else :
                start,stop = start_stop
            ids = redis.lrange(key,start,stop)
        else :
            # ok, we're going to recreate the whole feed again
            ids = recreate_feed(key, receiver)

        return self.filter(id__in=ids).order_by('-sent')
Exemple #8
0
def get_enclosures(self, levels=None) :
    # XXX TO-DO given that this is now different for Users and Groups 
    # no need to have one function assigned to both with a different test
    # just put different versions into respective classes
    """Give us all the things of which this user/group is a member_of
    """

    key = cache_key(ONE_LEVEL_MEMBERSHIP_KEY, self)
    if redis.exists(key) :
        return TgGroup.objects.filter(id__in=get_enclosure_ids(self.__class__, self.id))
 
    if levels == None:
        levels = ['member', 'host', 'public']

    if isinstance(self, User):
        return self.groups.filter(level__in=levels)
    elif isinstance(self, TgGroup):
        return self.parent_groups.filter(level__in=levels)
Exemple #9
0
def get_enclosures(self, levels=None):
    # XXX TO-DO given that this is now different for Users and Groups
    # no need to have one function assigned to both with a different test
    # just put different versions into respective classes
    """Give us all the things of which this user/group is a member_of
    """

    key = cache_key(ONE_LEVEL_MEMBERSHIP_KEY, self)
    if redis.exists(key):
        return TgGroup.objects.filter(
            id__in=get_enclosure_ids(self.__class__, self.id))

    if levels == None:
        levels = ['member', 'host', 'public']

    if isinstance(self, User):
        return self.groups.filter(level__in=levels)
    elif isinstance(self, TgGroup):
        return self.parent_groups.filter(level__in=levels)
Exemple #10
0
def get_enclosure_id_set(cls, self_id, seen=None):

    key = cache_key(MULTI_LEVEL_MEMBERSHIP_KEY, cls=cls, id=self_id)
    if redis.exists(key):
        return redis.smembers(key)

    if not seen:
        seen = set([self_id])

    if cls == TgGroup:
        es = set([self_id])
    else:
        es = set([])
    for e_id in get_enclosure_ids(cls, self_id):
        if e_id not in seen:
            seen.add(e_id)
            multi_memberships = get_enclosure_id_set(TgGroup, e_id, seen)
            es = es.union(set(multi_memberships))
            seen = seen.union([m for m in multi_memberships])

    add_to_cached_set(key, es)
    return es
Exemple #11
0
def get_enclosure_id_set(cls, self_id, seen=None) :

    key = cache_key(MULTI_LEVEL_MEMBERSHIP_KEY,cls=cls, id=self_id)
    if redis.exists(key) :
        return redis.smembers(key)

    if not seen :
        seen = set([self_id])

    if cls == TgGroup :
        es = set([self_id])
    else :
        es = set([])
    for e_id in get_enclosure_ids(cls, self_id ) :
        if e_id not in seen :
            seen.add(e_id)
            multi_memberships = get_enclosure_id_set(TgGroup, e_id, seen)
            es = es.union(set(multi_memberships))
            seen = seen.union([m for m in multi_memberships])

    add_to_cached_set(key, es)
    return es