Exemple #1
0
    def rss(self, limit=50, source=None, *args, **kwargs):
        """
        RSS feed of jobs
        :param source: source name
        :param limit: number of displayed jobs
        :return: RSS feed content
        """
        site_url = config.get('site.domain_base_url')
        feed = feedgenerator.Rss201rev2Feed(
            title=u"pyjobs : le job qu'il vous faut en python",
            link=site_url,
            description=u"Agrégation de jobs python",
            language=u"fr",
            feed_url=u"http://www.pyjobs.fr/rss?limit=%s" % limit)

        jobs = DBSession.query(model.JobAlchemy) \
            .order_by(model.JobAlchemy.publication_datetime.desc()) \
            .limit(limit)

        if source is not None:
            jobs = jobs.filter(model.JobAlchemy.source == source)

        for job in jobs:
            job_slug = slugify(job.title)
            feed.add_item(title=job.title,
                          link=get_job_url(job.id,
                                           job_title=job.title,
                                           absolute=True),
                          description=job.description,
                          pubdate=job.publication_datetime,
                          unique_id="%s/job/%d/%s" %
                          (site_url, job.id, job_slug))

        return feed.writeString('utf-8')
Exemple #2
0
 def feed(cls, q, feed_type, title, link, description,
          since=None, until=None, offset=None, limit=None):
     "Produces webhelper.feedgenerator Feed"
     d = dict(title=title, link=h.absurl(link), description=description, language=u'en')
     if feed_type == 'atom':
         feed = FG.Atom1Feed(**d)
     elif feed_type == 'rss':
         feed = FG.Rss201rev2Feed(**d)
     query = defaultdict(dict)
     query.update(q)
     if since is not None:
         query['pubdate']['$gte'] = since
     if until is not None:
         query['pubdate']['$lte'] = until
     cur = cls.query.find(query)
     cur = cur.sort('pubdate', pymongo.DESCENDING)
     if limit is None: limit = 10
     query = cur.limit(limit)
     if offset is not None: query = cur.offset(offset)
     for r in cur:
         feed.add_item(title=r.title,
                       link=h.absurl(r.link.encode('utf-8')),
                       pubdate=r.pubdate,
                       description=r.description,
                       unique_id=h.absurl(r.unique_id),
                       author_name=r.author_name,
                       author_link=h.absurl(r.author_link))
     return feed
    def articles(self):
        feed = feedgenerator.Rss201rev2Feed(
            title="Renatopp's - Feed dos Artigos",
            link=self.request.host_url,
            description=
            "Artigos do super ultra hyper mega site http://renatopp.com",
            author_name=self.author)

        posts = Session.query(Post).order_by(desc(
            Post.id)).filter(Post.type == 'article').filter(
                Post.status == 'Published').limit(10).all()
        for post in posts:
            summary = post.content[:200].replace('\n', '<br>')
            categorys = ', '.join([c.name
                                   for c in post.categorys]) or 'Sem Categoria'
            description = u"""
            %s (...)<br><br>
            Categorias: %s<br>
            Visite <a href="http://renatopp.com">renatopp.com</a>
            """ % (summary, categorys)

            feed.add_item(title=post.title,
                          link=url('blog_entry',
                                   self.request,
                                   id=post.id,
                                   alias=post.alias),
                          description=description,
                          author_name=self.author)
        return Response(feed.writeString('utf-8'))
Exemple #4
0
 def feed(self, **kw):
     data = self._get_activities_data(**kw)
     response.headers['Content-Type'] = ''
     response.content_type = 'application/xml'
     d = {
         'title':
         'Activity for %s' % data['followee'].activity_name,
         'link':
         h.absurl(self.app.url),
         'description':
         'Recent activity for %s' % (data['followee'].activity_name),
         'language':
         u'en',
     }
     if request.environ['PATH_INFO'].endswith('.atom'):
         feed = FG.Atom1Feed(**d)
     else:
         feed = FG.Rss201rev2Feed(**d)
     for t in data['timeline']:
         url = h.absurl(t.obj.activity_url.encode('utf-8'))
         feed.add_item(title=u'%s %s %s%s' % (
             t.actor.activity_name,
             t.verb,
             t.obj.activity_name,
             ' on %s' %
             t.target.activity_name if t.target.activity_name else '',
         ),
                       link=url,
                       pubdate=t.published,
                       description=t.obj.activity_extras.get('summary'),
                       unique_id=url,
                       author_name=t.actor.activity_name,
                       author_link=h.absurl(t.actor.activity_url))
     return feed.writeString('utf-8')
    def snippets(self):
        feed = feedgenerator.Rss201rev2Feed(
            title="Renatopp's - Feed dos Snippets",
            link=self.request.host_url,
            description=
            "Snippets do super ultra hyper mega site http://renatopp.com",
            author_name=self.author)

        snippets = Session.query(Snippet).order_by(desc(
            Snippet.id)).limit(10).all()
        for snippet in snippets:
            summary = snippet.summary or u'Sem descrição'
            language = snippet.language
            category = ', '.join([c.name for c in snippet.categorys
                                  ]) or 'Sem Categoria'

            description = u"""
            %s<br>
            <br>
            Linguagem: %s <br>
            Categorias: %s <br>
            Visite o site para mais informações - 
            <a href="http://renatopp.com">renatopp.com</a>.
            """ % (summary, language, category)

            feed.add_item(title=snippet.title,
                          link=url('snippet_entry',
                                   self.request,
                                   id=snippet.id,
                                   alias=snippet.alias),
                          description=description,
                          author_name="Renato Pereira")

        return Response(feed.writeString('utf-8'))
Exemple #6
0
    def feed(self, filter=None, id=None):
        feed = feedgenerator.Rss201rev2Feed(
            title=_('%s packages' % config['debexpo.sitename']),
            link=config['debexpo.server'] + url('packages'),
            description=_('A feed of packages on %s' %
                          config['debexpo.sitename']),
            language=get_lang()[0])

        if filter == 'section':
            packages = self._get_packages(
                package_version_filter=(PackageVersion.section == id))

        elif filter == 'uploader':
            user = self._get_user(id)
            if user is not None:
                packages = self._get_packages(
                    package_filter=(Package.user_id == user.id))
            else:
                packages = []

        elif filter == 'maintainer':
            packages = self._get_packages(
                package_version_filter=(PackageVersion.maintainer == id))

        else:
            packages = self._get_packages()

        for item in packages:
            desc = _('Package %s uploaded by %s.' %
                     (item.name, item.user.name))

            desc += '<br/><br/>'

            if item.needs_sponsor:
                desc += _('Uploader is currently looking for a sponsor.')
            else:
                desc += _('Uploader is currently not looking for a sponsor.')

            desc += '<br/><br/>' + item.description.replace('\n', '<br/>')

            feed.add_item(title='%s %s' %
                          (item.name, item.package_versions[-1].version),
                          link=config['debexpo.server'] +
                          url('package', packagename=item.name),
                          description=desc,
                          unique_id=str(item.package_versions[-1].id))

        response.content_type = 'application/rss+xml'
        response.content_type_params = {'charset': 'utf8'}
        return feed.writeString('utf-8')
Exemple #7
0
def test_simple_feed():
    pubdate = datetime.datetime(2009, 12, 18, 23, 45, 12)
    feed = fg.Rss201rev2Feed(
        title=u"Poynter E-Media Tidbits",
        link=u"http://www.poynter.org/column.asp?id=31",
        description=u"A group weblog by the sharpest minds in online media/journalism/publishing.",
        language=u"en",
    )
    feed.add_item(
        title="Hello", 
        link=u"http://www.holovaty.com/test/",
        description="Testing.",  
        pubdate=pubdate)
    result = feed.writeString("utf-8")
    control = """<?xml version="1.0" encoding="utf-8"?>\n<rss version="2.0"><channel><title>Poynter E-Media Tidbits</title><link>http://www.poynter.org/column.asp?id=31</link><description>A group weblog by the sharpest minds in online media/journalism/publishing.</description><language>en</language><lastBuildDate>Fri, 18 Dec 2009 23:45:12 -0000</lastBuildDate><item><title>Hello</title><link>http://www.holovaty.com/test/</link><description>Testing.</description><pubDate>Fri, 18 Dec 2009 23:45:12 -0000</pubDate></item></channel></rss>"""
    eq_(result, control)
Exemple #8
0
def user_rss(request):
    """ Render per-user rss. """

    user_id = request.matchdict.get('id')
    user = _get_user(request, user_id)

    if not user:
        raise HTTPNotFound("No such user %r" % user_id)

    if user.opt_out == True and user.email != authenticated_userid(request):
        raise HTTPNotFound("User %r has opted out." % user_id)

    comparator = lambda x, y: cmp(x.issued_on, y.issued_on)
    sorted_assertions = sorted(user.assertions, cmp=comparator, reverse=True)

    feed = feedgenerator.Rss201rev2Feed(
        title=u"Badges Feed for %s" % user.nickname,
        link=request.route_url('user', id=user.nickname or user.id),
        description=u"The latest Fedora Badges obtained by %s" % user.nickname,
        language=u"en",
    )

    description_template = "<img src='%s' alt='%s'/>%s -- %s"

    for assertion in sorted_assertions:
        feed.add_item(
            title=assertion.badge.name,
            link=request.route_url('badge', id=assertion.badge.id),
            pubdate=assertion.issued_on,
            description=description_template % (
                assertion.badge.image,
                assertion.badge.name,
                assertion.badge.name,
                assertion.badge.description,
            )
        )

    return Response(
        body=feed.writeString('utf-8'),
        content_type='application/rss+xml',
        charset='utf-8',
    )
Exemple #9
0
def badge_rss(request):
    """ Render per-badge rss. """

    badge_id = request.matchdict.get('id')
    badge = request.db.get_badge(badge_id)

    if not badge:
        raise HTTPNotFound("No such badge %r" % badge_id)

    comparator = lambda x, y: cmp(x.issued_on, y.issued_on)
    sorted_assertions = sorted(badge.assertions, cmp=comparator, reverse=True)

    feed = feedgenerator.Rss201rev2Feed(
        title=u"Badges Feed for %s" % badge.name,
        link=request.route_url('badge', id=badge.id),
        description=u"Latest recipients of the badge %s" % badge.name,
        language=u"en",
    )

    description_template = "<img src='%s' alt='%s' />%s"

    for assertion in sorted_assertions:
        url = request.route_url(
            'user', id=assertion.person.nickname or assertion.person.id)
        feed.add_item(
            title=assertion.person.nickname,
            link=url,
            pubdate=assertion.issued_on,
            description=description_template % (
                assertion.person.avatar_url(128),
                assertion.person.nickname,
                assertion.person.nickname,
            )
        )

    return Response(
        body=feed.writeString('utf-8'),
        content_type='application/rss+xml',
        charset='utf-8',
    )