コード例 #1
0
    def public_journal_atom(self):
        """
        Produce an atom-1.0 feed via feedgenerator module
        """
        c.following = self.sa.query(UserFollowing)\
            .filter(UserFollowing.user_id == self.rhodecode_user.user_id)\
            .options(joinedload(UserFollowing.follows_repository))\
            .all()

        journal = self._get_journal_data(c.following)

        feed = Atom1Feed(title=self.title % 'atom',
                         link=url('public_journal_atom', qualified=True),
                         description=_('Public journal'),
                         language=self.language,
                         ttl=self.ttl)

        for entry in journal[:self.feed_nr]:
            #tmpl = h.action_parser(entry)[0]
            action, action_extra = h.action_parser(entry, feed=True)
            title = "%s - %s %s" % (entry.user.short_contact, action,
                                    entry.repository.repo_name)
            desc = action_extra()
            feed.add_item(title=title,
                          pubdate=entry.action_date,
                          link=url('', qualified=True),
                          author_email=entry.user.email,
                          author_name=entry.user.full_contact,
                          description=desc)

        response.content_type = feed.mime_type
        return feed.writeString('utf-8')
コード例 #2
0
ファイル: feed.py プロジェクト: elfixit/rhodecode
    def atom(self, repo_name):
        """Produce an atom-1.0 feed via feedgenerator module"""
        feed = Atom1Feed(title=self.title % repo_name,
                         link=url('summary_home',
                                  repo_name=repo_name,
                                  qualified=True),
                         description=self.description % repo_name,
                         language=self.language,
                         ttl=self.ttl)

        for cs in reversed(list(c.rhodecode_repo[-self.feed_nr:])):
            desc_msg = []
            desc_msg.append('%s - %s<br/><pre>' % (cs.author, cs.date))
            desc_msg.append(self.__changes(cs))

            feed.add_item(title=self._get_title(cs),
                          link=url('changeset_home',
                                   repo_name=repo_name,
                                   revision=cs.raw_id,
                                   qualified=True),
                          author_name=cs.author,
                          description=''.join(desc_msg))

        response.content_type = feed.mime_type
        return feed.writeString('utf-8')
コード例 #3
0
    def rss(self, posts):
        if not posts:
            h.flash('There are no posts to show an RSS Feed for.', 'warning')
            redirect(url(controller='blog', action='index'))

        author = model.User.first()
        host = request_config().host
        feed_kwargs = {}
        if author.email:
            feed_kwargs['author_email'] = author.email

        feed = Atom1Feed(
            title=config['rss.title'],
            description=config['rss.description'],
            link=url(host=host, controller='blog', action='index'),
            author_name=author.name,
            author_link=url(
                host=host,
                controller='account',
                action='profile',
                id=author.id
            ),
            **feed_kwargs
        )
        for post in c.posts:
            item_kwargs = {}
            if post.user.email:
                item_kwargs['author_email'] = post.user.email

            if post.summary:
                description = post.summary
            else:
                description = _('No Summary')

            feed.add_item(
                title=post.title,
                link=url(
                    host=host,
                    controller='blog',
                    action='view',
                    category=post.category.slug,
                    slug=post.slug
                ),
                description=description,
                pubdate=post.posted,
                author_name=post.user.name,
                author_link=url(
                    host=host,
                    controller='account',
                    action='profile',
                    id=post.user.id
                ),
                **item_kwargs
            )
        response.content_type = 'application/atom+xml'
        return feed.writeString('utf-8')
コード例 #4
0
 def feed(self):
     etag_cache(get_last())
     alerts = model.Session.query(model.Alert)
     alerts = alerts.order_by(model.sa.desc(model.Alert.time)).limit(100)
     f = Atom1Feed(
         title="Alerts",
         link=url_for(),
         description="Alerts",
     )
     for a in alerts:
         f.add_item(
             title="%s - %s" % (a.addr, a.name),
             link=url_for(controller="alerts", action="notes", id=a.id),
             description="Down at %s\nUp at %s" % (a.time, a.uptime),
             pubdate=a.time,
         )
     response.content_type = 'application/atom+xml'
     return f.writeString('utf-8')
コード例 #5
0
    def _atom_feed(self, repos, public=True):
        journal = self._get_journal_data(repos)
        if public:
            _link = url('public_journal_atom', qualified=True)
            _desc = '%s %s %s' % (c.rhodecode_name, _('public journal'),
                                  'atom feed')
        else:
            _link = url('journal_atom', qualified=True)
            _desc = '%s %s %s' % (c.rhodecode_name, _('journal'), 'atom feed')

        feed = Atom1Feed(title=_desc,
                         link=_link,
                         description=_desc,
                         language=self.language,
                         ttl=self.ttl)

        for entry in journal[:self.feed_nr]:
            user = entry.user
            if user is None:
                #fix deleted users
                user = AttributeDict({
                    'short_contact': entry.username,
                    'email': '',
                    'full_contact': ''
                })
            action, action_extra, ico = h.action_parser(entry, feed=True)
            title = "%s - %s %s" % (user.short_contact, action(),
                                    entry.repository.repo_name)
            desc = action_extra()
            _url = None
            if entry.repository is not None:
                _url = url('changelog_home',
                           repo_name=entry.repository.repo_name,
                           qualified=True)

            feed.add_item(title=title,
                          pubdate=entry.action_date,
                          link=_url or url('', qualified=True),
                          author_email=user.email,
                          author_name=user.full_contact,
                          description=desc)

        response.content_type = feed.mime_type
        return feed.writeString('utf-8')
コード例 #6
0
    def atom1(self):
        """Produce an atom-1.0 feed via feedgenerator module"""
        feed = Atom1Feed(
            title=u"Latest notices of pendency",
            link=current_url(),
            description=
            u"These are the latest foreclosures pulled together by the scraper",
            language=u"en",
        )

        latest = model.Foreclosure.query.order_by(
            desc(model.Foreclosure.filing_date)).limit(40).all()

        for closure in latest:
            feed.add_item(title=closure.formatted_address,
                          link=u"http://monroe-threebean.rhcloud.com/",
                          description=closure.fancy_format())

        response.content_type = 'application/atom+xml'
        return feed.writeString('utf-8')
コード例 #7
0
ファイル: feed.py プロジェクト: jeffjirsa/rhodecode
        def _get_feed_from_cache(key):
            feed = Atom1Feed(
                 title=self.title % repo_name,
                 link=url('summary_home', repo_name=repo_name,
                          qualified=True),
                 description=self.description % repo_name,
                 language=self.language,
                 ttl=self.ttl
            )

            for cs in reversed(list(c.rhodecode_repo[-self.feed_nr:])):
                feed.add_item(title=self._get_title(cs),
                              link=url('changeset_home', repo_name=repo_name,
                                       revision=cs.raw_id, qualified=True),
                              author_name=cs.author,
                              description=''.join(self.__get_desc(cs)),
                              pubdate=cs.date,
                              )

            response.content_type = feed.mime_type
            return feed.writeString('utf-8')
コード例 #8
0
        def _generate_feed(cache_key):
            feed = Atom1Feed(title=self.title % repo_name,
                             link=url('summary_home',
                                      repo_name=repo_name,
                                      qualified=True),
                             description=self.description % repo_name,
                             language=self.language,
                             ttl=self.ttl)

            for commit in reversed(self._get_commits()):
                date = self._set_timezone(commit.date)
                feed.add_item(
                    title=self._get_title(commit),
                    author_name=commit.author,
                    description=self._get_description(commit),
                    link=url('changeset_home',
                             repo_name=repo_name,
                             revision=commit.raw_id,
                             qualified=True),
                    pubdate=date,
                )

            return feed.mime_type, feed.writeString('utf-8')
コード例 #9
0
        def _get_feed_from_cache(key, kind):
            feed = Atom1Feed(title=_('%s %s feed') % (c.site_name, repo_name),
                             link=h.canonical_url('summary_home',
                                                  repo_name=repo_name),
                             description=_('Changes on %s repository') %
                             repo_name,
                             language=language,
                             ttl=ttl)

            rss_items_per_page = safe_int(CONFIG.get('rss_items_per_page', 20))
            for cs in reversed(
                    list(c.db_repo_scm_instance[-rss_items_per_page:])):
                feed.add_item(
                    title=self._get_title(cs),
                    link=h.canonical_url('changeset_home',
                                         repo_name=repo_name,
                                         revision=cs.raw_id),
                    author_name=cs.author,
                    description=''.join(self.__get_desc(cs)),
                    pubdate=cs.date,
                )

            response.content_type = feed.mime_type
            return feed.writeString('utf-8')
コード例 #10
0
 def list(self):
     format = request.params.get('format', '')
     if format == 'atom':
         # Generate and return Atom 1.0 document.
         from webhelpers.feedgenerator import Atom1Feed
         feed = Atom1Feed(
             title=_(u'CKAN Repository Revision History'),
             link=h.url_for(controller='revision', action='list', id=''),
             description=_(u'Recent changes to the CKAN repository.'),
             language=unicode(get_lang()),
         )
         # TODO: make this configurable?
         # we do not want the system to fall over!
         maxresults = 200
         try:
             dayHorizon = int(request.params.get('days', 5))
         except:
             dayHorizon = 5
         ourtimedelta = timedelta(days=-dayHorizon)
         since_when = datetime.now() + ourtimedelta
         revision_query = model.repo.history()
         revision_query = revision_query.filter(
             model.Revision.timestamp >= since_when).filter(
                 model.Revision.id != None)
         revision_query = revision_query.limit(maxresults)
         for revision in revision_query:
             package_indications = []
             revision_changes = model.repo.list_changes(revision)
             resource_revisions = revision_changes[model.Resource]
             resource_group_revisions = \
                 revision_changes[model.ResourceGroup]
             package_extra_revisions = revision_changes[model.PackageExtra]
             for package in revision.packages:
                 if not package:
                     # package is None sometimes - I don't know why,
                     # but in the meantime while that is fixed,
                     # avoid an exception here
                     continue
                 if package.private:
                     continue
                 number = len(package.all_revisions)
                 package_revision = None
                 count = 0
                 for pr in package.all_revisions:
                     count += 1
                     if pr.revision.id == revision.id:
                         package_revision = pr
                         break
                 if package_revision and package_revision.state == \
                         model.State.DELETED:
                     transition = 'deleted'
                 elif package_revision and count == number:
                     transition = 'created'
                 else:
                     transition = 'updated'
                     for resource_revision in resource_revisions:
                         if resource_revision.continuity.resource_group.\
                                 package_id == package.id:
                             transition += ':resources'
                             break
                     for resource_group_revision in \
                             resource_group_revisions:
                         if resource_group_revision.package_id == \
                                 package.id:
                             transition += ':resource_group'
                             break
                     for package_extra_revision in package_extra_revisions:
                         if package_extra_revision.package_id == \
                                 package.id:
                             if package_extra_revision.key == \
                                     'date_updated':
                                 transition += ':date_updated'
                                 break
                 indication = "%s:%s" % (package.name, transition)
                 package_indications.append(indication)
             pkgs = u'[%s]' % ' '.join(package_indications)
             item_title = u'r%s ' % (revision.id)
             item_title += pkgs
             if revision.message:
                 item_title += ': %s' % (revision.message or '')
             item_link = h.url_for(controller='revision',
                                   action='read',
                                   id=revision.id)
             item_description = _('Datasets affected: %s.\n') % pkgs
             item_description += '%s' % (revision.message or '')
             item_author_name = revision.author
             item_pubdate = revision.timestamp
             feed.add_item(
                 title=item_title,
                 link=item_link,
                 description=item_description,
                 author_name=item_author_name,
                 pubdate=item_pubdate,
             )
         feed.content_type = 'application/atom+xml'
         return feed.writeString('utf-8')
     else:
         query = model.Session.query(model.Revision)
         c.page = h.Page(collection=query,
                         page=request.params.get('page', 1),
                         url=h.pager_url,
                         items_per_page=20)
         return base.render('revision/list.html')
コード例 #11
0
            abort(404, _('Group not found'))
        except NotAuthorized:
            abort(
                401,
                _('User %r not authorized to edit %r') %
                (c.user.encode('ascii', 'ignore'), id))

        format = request.params.get('format', '')
        if format == 'atom':
            # Generate and return Atom 1.0 document.
            from webhelpers.feedgenerator import Atom1Feed
            feed = Atom1Feed(
                title=_(u'CKAN Group Revision History'),
                link=self._url_for(controller='group',
                                   action='read',
                                   id=c.group_dict['name']),
                description=_(u'Recent changes to CKAN Group: ') +
                c.group_dict['display_name'],
                language=unicode(get_lang()),
            )
            for revision_dict in c.group_revisions:
                revision_date = h.date_str_to_datetime(
                    revision_dict['timestamp'])
                try:
                    dayHorizon = int(request.params.get('days'))
                except:
                    dayHorizon = 30
                dayAge = (datetime.datetime.now() - revision_date).days
                if dayAge >= dayHorizon:
                    break
                if revision_dict['message']:
コード例 #12
0
    def history(self, id):
        group_type = self._ensure_controller_matches_group_type(id)
        if 'diff' in request.params or 'selected1' in request.params:
            try:
                params = {
                    'id': request.params.getone('group_name'),
                    'diff': request.params.getone('selected1'),
                    'oldid': request.params.getone('selected2'),
                }
            except KeyError:
                if 'group_name' in dict(request.params):
                    id = request.params.getone('group_name')
                c.error = \
                    _('Select two revisions before doing the comparison.')
            else:
                params['diff_entity'] = 'group'
                h.redirect_to(controller='revision', action='diff', **params)

        context = {
            'model': model,
            'session': model.Session,
            'user': c.user,
            'schema': self._db_to_form_schema()
        }
        data_dict = {'id': id}
        try:
            c.group_dict = self._action('group_show')(context, data_dict)
            c.group_revisions = self._action('group_revision_list')(context,
                                                                    data_dict)
            #TODO: remove
            # Still necessary for the authz check in group/layout.html
            c.group = context['group']
        except (NotFound, NotAuthorized):
            abort(404, _('Group not found'))

        format = request.params.get('format', '')
        if format == 'atom':
            # Generate and return Atom 1.0 document.
            from webhelpers.feedgenerator import Atom1Feed
            feed = Atom1Feed(
                title=_(u'CKAN Group Revision History'),
                link=self._url_for_this_controller(action='read',
                                                   id=c.group_dict['name']),
                description=_(u'Recent changes to CKAN Group: ') +
                c.group_dict['display_name'],
                language=unicode(get_lang()),
            )
            for revision_dict in c.group_revisions:
                revision_date = h.date_str_to_datetime(
                    revision_dict['timestamp'])
                try:
                    dayHorizon = int(request.params.get('days'))
                except:
                    dayHorizon = 30
                dayAge = (datetime.datetime.now() - revision_date).days
                if dayAge >= dayHorizon:
                    break
                if revision_dict['message']:
                    item_title = u'%s' % revision_dict['message'].\
                        split('\n')[0]
                else:
                    item_title = u'%s' % revision_dict['id']
                item_link = h.url_for(controller='revision',
                                      action='read',
                                      id=revision_dict['id'])
                item_description = _('Log message: ')
                item_description += '%s' % (revision_dict['message'] or '')
                item_author_name = revision_dict['author']
                item_pubdate = revision_date
                feed.add_item(
                    title=item_title,
                    link=item_link,
                    description=item_description,
                    author_name=item_author_name,
                    pubdate=item_pubdate,
                )
            feed.content_type = 'application/atom+xml'
            return feed.writeString('utf-8')
        return render(self._history_template(group_type),
                      extra_vars={'group_type': group_type})
コード例 #13
0
def history(package_type, id):
    if u'diff' in request.args or u'selected1' in request.args:
        try:
            params = {
                u'id': request.args.getone(u'pkg_name'),
                u'diff': request.args.getone(u'selected1'),
                u'oldid': request.args.getone(u'selected2'),
            }
        except KeyError:
            if u'pkg_name' in dict(request.args):
                id = request.args.getone(u'pkg_name')
            g.error = \
                _(u'Select two revisions before doing the comparison.')
        else:
            params[u'diff_entity'] = u'package'
            return h.redirect_to(controller=u'revision',
                                 action=u'diff',
                                 **params)

    context = {
        u'model': model,
        u'session': model.Session,
        u'user': g.user,
        u'auth_user_obj': g.userobj,
        u'for_view': True
    }
    data_dict = {u'id': id}
    try:
        g.pkg_dict = get_action(u'package_show')(context, data_dict)
        g.pkg_revisions = get_action(u'package_revision_list')(context,
                                                               data_dict)
        # TODO: remove
        # Still necessary for the authz check in group/layout.html
        g.pkg = context[u'package']

    except NotAuthorized:
        return base.abort(403, _(u'Unauthorized to read package %s') % u'')
    except NotFound:
        return base.abort(404, _(u'Dataset not found'))

    format = request.args.get(u'format', u'')
    if format == u'atom':
        # Generate and return Atom 1.0 document.
        from webhelpers.feedgenerator import Atom1Feed
        feed = Atom1Feed(
            title=_(u'CKAN Dataset Revision History'),
            link=h.url_for(controller=u'revision',
                           action=u'read',
                           id=g.pkg_dict[u'name']),
            description=_(u'Recent changes to CKAN Dataset: ') +
            (g.pkg_dict[u'title'] or u''),
            language=text_type(i18n.get_lang()),
        )
        for revision_dict in g.pkg_revisions:
            revision_date = h.date_str_to_datetime(revision_dict[u'timestamp'])
            try:
                dayHorizon = int(request.args.get(u'days'))
            except:
                dayHorizon = 30
            dayAge = (datetime.datetime.now() - revision_date).days
            if dayAge >= dayHorizon:
                break
            if revision_dict[u'message']:
                item_title = u'%s' % revision_dict[u'message'].\
                    split(u'\n')[0]
            else:
                item_title = u'%s' % revision_dict[u'id']
            item_link = h.url_for(controller=u'revision',
                                  action=u'read',
                                  id=revision_dict[u'id'])
            item_description = _(u'Log message: ')
            item_description += u'%s' % (revision_dict[u'message'] or u'')
            item_author_name = revision_dict[u'author']
            item_pubdate = revision_date
            feed.add_item(
                title=item_title,
                link=item_link,
                description=item_description,
                author_name=item_author_name,
                pubdate=item_pubdate,
            )
        response = make_response(feed.writeString(u'utf-8'))
        response.headers[u'Content-Type'] = u'application/atom+xml'
        return response

    package_type = g.pkg_dict[u'type'] or u'dataset'

    return base.render(_get_pkg_template(u'history_template',
                                         g.pkg_dict.get(u'type',
                                                        package_type)),
                       extra_vars={u'dataset_type': package_type})
コード例 #14
0
            c.pkg = context['package']

        except NotAuthorized:
            abort(401, _('Unauthorized to read package %s') % '')
        except NotFound:
            abort(404, _('Package not found'))

        format = request.params.get('format', '')
        if format == 'atom':
            # Generate and return Atom 1.0 document.
            from webhelpers.feedgenerator import Atom1Feed
            feed = Atom1Feed(
                title=_(u'CKAN Package Revision History'),
                link=h.url_for(controller='revision',
                               action='read',
                               id=c.pkg_dict['name']),
                description=_(u'Recent changes to CKAN Package: ') +
                (c.pkg_dict['title'] or ''),
                language=unicode(get_lang()),
            )
            for revision_dict in c.pkg_revisions:
                revision_date = h.date_str_to_datetime(
                    revision_dict['timestamp'])
                try:
                    dayHorizon = int(request.params.get('days'))
                except:
                    dayHorizon = 30
                dayAge = (datetime.datetime.now() - revision_date).days
                if dayAge >= dayHorizon:
                    break
                if revision_dict['message']:
コード例 #15
0
ファイル: group.py プロジェクト: nushkovg/ckan
def history(id, group_type, is_organization):
    u''' Do we need this? '''
    extra_vars = {}
    set_org(is_organization)
    if u'diff' in request.params or u'selected1' in request.params:
        try:
            params = {
                u'id': request.params.getone(u'group_name'),
                u'diff': request.params.getone(u'selected1'),
                u'oldid': request.params.getone(u'selected2'),
            }
        except KeyError:
            if u'group_name' in dict(request.params):
                id = request.params.getone(u'group_name')
            error = \
                _(u'Select two revisions before doing the comparison.')
            # TODO: Remove
            g.error = error
        else:
            params[u'diff_entity'] = u'group'
            return h.redirect_to(controller=u'revision',
                                 action=u'diff',
                                 **params)

    context = {
        u'model': model,
        u'session': model.Session,
        u'user': g.user,
        u'schema': _db_to_form_schema()
    }
    data_dict = {u'id': id}
    try:
        group_dict = _action(u'group_show')(context, data_dict)
        group_revisions = _action(u'group_revision_list')(context, data_dict)
        # TODO: remove
        # Still necessary for the authz check in group/layout.html
        group = context['group']
    except (NotFound, NotAuthorized):
        base.abort(404, _(u'Group not found'))

    format = request.params.get(u'format', u'')
    if format == u'atom':
        # Generate and return Atom 1.0 document.
        from webhelpers.feedgenerator import Atom1Feed
        feed = Atom1Feed(
            title=_(u'CKAN Group Revision History'),
            link=h.url_for(group_type + u'.read', id=group_dict[u'name']),
            description=_(u'Recent changes to CKAN Group: ') +
            group_dict['display_name'],
            language=text_type(get_lang()),
        )
        for revision_dict in group_revisions:
            revision_date = h.date_str_to_datetime(revision_dict[u'timestamp'])
            try:
                dayHorizon = int(request.params.get(u'days'))
            except Exception:
                dayHorizon = 30
            dayAge = (datetime.datetime.now() - revision_date).days
            if dayAge >= dayHorizon:
                break
            if revision_dict['message']:
                item_title = u'%s' % revision_dict['message'].\
                    split(u'\n')[0]
            else:
                item_title = u'%s' % revision_dict['id']
            item_link = h.url_for(controller=u'revision',
                                  action=u'read',
                                  id=revision_dict['id'])
            item_description = _(u'Log message: ')
            item_description += u'%s' % (revision_dict['message'] or u'')
            item_author_name = revision_dict['author']
            item_pubdate = revision_date
            feed.add_item(
                title=item_title,
                link=item_link,
                description=item_description,
                author_name=item_author_name,
                pubdate=item_pubdate,
            )
        feed.content_type = u'application/atom+xml'
        return feed.writeString(u'utf-8')

    # TODO: Remove
    g.group_dict = group_dict
    g.group_revisions = group_revisions
    g.group = group
    extra_vars = {
        u"group_dict": group_dict,
        u"group_revisions": group_revisions,
        u"group": group,
        u"group_type": group_type
    }
    return base.render(_history_template(group_type), extra_vars)
コード例 #16
0
            'ckan.locale_default', 'en')
        web_schema = ui_util.transform_dcat_schema_to_ui_schema(dataset)
        log.info(
            '****************** rss3 /history took {0} sec**********************'
            .format((time.time() - start)))

        start = time.time()
        if format == 'atom':
            # Generate and return Atom 1.0 document.
            start_loop = time.time()
            from webhelpers.feedgenerator import Atom1Feed
            feed = Atom1Feed(
                title=_(u'' + web_schema.get('title', '')),
                link=h.url_for(controller='revision',
                               action='read',
                               id=web_schema.get('name')),
                description=_(u'Recent changes to CKAN Dataset: ') +
                (web_schema.get('title', '') or ''),
                language=unicode(i18n.get_lang()),
            )
            for revision_dict in c.pkg_revisions:
                revision_date = h.date_str_to_datetime(
                    revision_dict['timestamp'])
                try:
                    dayHorizon = int(request.params.get('days'))
                except:
                    dayHorizon = 30
                dayAge = (datetime.datetime.now() - revision_date).days
                if dayAge >= dayHorizon:
                    break
                if revision_dict['message']:
コード例 #17
0
ファイル: rssfeed.py プロジェクト: samyisok/orphereus
    def rss(self, watch, authid, uid, feedType):
        if not g.OPT.allowFeeds:
            abort(403)

        if not self.currentUserIsAuthorized():
            user = User.getByUid(uid)
            if not user or not int(authid) == user.authid():
                return redirect_to('boardBase')
            if user.isAdmin() and not checkAdminIP():
                return redirect_to('boardBase')
            # enable static files downloading
            session['feedAuth'] = True
            session.save()
            self.setCookie()
        else:
            user = self.userInst
        self.userInst = user

        title = u''
        descr = u'%s News Feed' % g.OPT.baseDomain
        posts = []
        if re.compile("^\d+$").match(watch):
            watch = int(watch)
            thePost = Post.getPost(watch)
            if not thePost:
                abort(404)
            title = _(u"%s: thread #%d") % (g.OPT.title, watch)
            thread = Post.buildThreadFilter(user, thePost.id).first()
            if not thread:
                abort(404)
            replies = thread.filterReplies().all()
            posts = [thread]
            if replies:
                posts += replies
        else:
            title = _(u"%s: %s") % (g.OPT.title, watch)
            filter = Post.buildMetaboardFilter(watch, user)[0]
            tpp = user.threadsPerPage
            posts = filter.order_by(Post.bumpDate.desc())[0:tpp]

        feed = None
        link = h.url_for('feed',
                         uid=uid,
                         authid=authid,
                         watch=watch,
                         feedType=feedType)
        args = dict(
            title=title,
            link=link,
            description=descr,
            language=u"en",
        )

        if feedType == 'rss':
            feed = Rss201rev2Feed(**args)
            response.content_type = 'application/rss+xml'
        else:
            feed = Atom1Feed(**args)
            response.content_type = 'application/atom+xml'

        for post in posts:
            parent = post.parentPost
            if not parent:
                parent = post
            parent.enableShortMessages = False

            title = None
            if not post.parentPost:
                post.replies = post.replyCount
                title = _(u"Thread #%d") % post.id
            else:
                post.replies = None
                title = _(u"#%d") % post.id
            descr = self.render('rssPost',
                                'std',
                                thread=parent,
                                post=post,
                                disableFiltering=True)  #.decode('utf-8')

            feed.add_item(title=title,
                          link=h.url_for('thread', post=post.id),
                          description=descr)

        out = feed.writeString('utf-8')
        #css = str(h.staticFile(g.OPT.styles[0] + ".css"))
        #out = out.replace('<?xml version="1.0" encoding="utf-8"?>',
        #                  '<?xml version="1.0" encoding="utf-8"?>\n<?xml-stylesheet type="text/css" href="%s"?>' % css)
        return out
コード例 #18
0
ファイル: data_gv_at.py プロジェクト: sebneu/ckanext-dgvat
 except NotAuthorized:
     abort(401, _('User %r not authorized to edit %r') % (c.user, id))
     
 onlycreated = request.params.get('created', '')
 feed_title=u'RSS-Feed - Geänderte Datensätze - %s - data.gv.at' % c.group_dict['display_name']
 feed_description=_(u'Letzte Änderungen: ') + c.group_dict['display_name']
 if onlycreated == '1':
     feed_title=u'RSS-Feed - Neue Datensätze - %s - data.gv.at' % c.group_dict['display_name']
     feed_description=_(u'Neue Datensätze: ') + c.group_dict['display_name']
 format = request.params.get('format', '')
 if format == 'atom':
     # Generate and return Atom 1.0 document.
     from webhelpers.feedgenerator import Atom1Feed
     feed = Atom1Feed(
         title=feed_title,
         link=h.url_for(controller='group', action='read', id=c.group_dict['name']),
         description=feed_description,
         language=unicode(get_lang()),
     )
     for revision_dict in c.group_revisions:
         
         revision_date = h.date_str_to_datetime(revision_dict['timestamp'])
         try:
             dayHorizon = int(request.params.get('days'))
         except:
             dayHorizon = 30
         dayAge = (datetime.now() - revision_date).days
         if dayAge >= dayHorizon:
             break
         if revision_dict['message']:
             item_title = u'%s' % revision_dict['message'].split('\n')[0]
         else:
コード例 #19
0
ファイル: data_gv_at.py プロジェクト: sebneu/ckanext-dgvat
    def old_list(self):
           format = request.params.get('format', '')
           onlycreated = request.params.get('created', '')
           organization = request.params.get('organization', '')
           feed_title=u'RSS-Feed - Geänderte Datensätze - data.gv.at'
           feed_description=_(u'Letzte Änderungen: ')
           if onlycreated == '1':
               feed_title=u'RSS-Feed - Neue Datensätze - data.gv.at'
               feed_description=_(u'Neue Datensätze: ')
           log.debug("organization selected: %s" % organization)
           lang = get_lang()
           if lang[0]:
               lang = lang[0]
           if format == 'atom':
               feed = Atom1Feed(
                  title=_(feed_title),
                  link=h.url_for(controller='revision', action='list', id=''),
                  description=feed_description,
                  language=unicode(lang),
               )
               maxresults = 10
               #revision_query = model.repo.history()
               #revision_query = revision_query.limit(maxresults)
               revision_query = model.repo.history()
               revision_query = revision_query.order_by(model.Revision.timestamp.desc())
               revision_query = revision_query.filter(model.Revision.id!=None)
               #revision_query = revision_query.filter(model.Member.group_id=='4a766e5e-89a3-4a16-addd-05fa0b5953c3')
               #revision_query = revision_query.limit(maxresults)
               maintainer = 'default'
               for revision in revision_query:
                   if(feed.num_items()>=maxresults):
                       break
                   transition = ""
                   packName= ""
                   package_indications = []
                   revision_changes = model.repo.list_changes(revision)
                   resource_revisions = revision_changes[model.Resource]
                   #package_revisions = revision_changes[model.Package]
                   resource_group_revisions = revision_changes[model.ResourceGroup]
                   package_extra_revisions = revision_changes[model.PackageExtra]
                   group_revisions = revision_changes[model.Group]
                   tag_revisions = revision_changes[model.PackageTag]
                   member_revisions = revision_changes[model.Member]
                   
                   #Skip groups
                   if (len(group_revisions)>0):
                     continue       
                   #if (len(member_revisions)>0):
                     #continue   
                   if len(revision.packages)==0:
                     continue
                   if (len(resource_group_revisions) + len(tag_revisions) +len(package_extra_revisions) +len(resource_revisions))==0:
                     continue       
                   for package in revision.packages:
                       number = len(package.all_revisions)
                       package_revision = None
                       count = 0
                       
                       for pr in package.all_revisions:
                           count += 1
                           if pr.revision.id == revision.id:
                               package_revision = pr
                               break
                       if package_revision and package_revision.state == model.State.DELETED:
                            transition = 'deleted'
                       elif package_revision and count == number:
                            transition = 'created'
                       else:
                            transition = 'updated'
                            for resource_revision in resource_revisions:
                                if resource_revision.continuity.resource_group.package_id == package.id:
                                    transition += ': Ressourcen'
                                    break
                            for resource_group_revision in resource_group_revisions:
                                if resource_group_revision.package_id == package.id:
                                    transition += ' resource_group'
                                    break
                            for package_extra_revision in package_extra_revisions:
                                if package_extra_revision.package_id == package.id:
                                    #if package_extra_revision.key == 'date_updated':
                                    transition += ''
                                    break
                       indication = "%s" % ( transition)
                       packName = package.name
                       packId = package.id
                       packTitle = package.title
                       maintainer = package.maintainer
                       package_indications.append(indication)
                       package = model.Package.get(packId)
                       packDict = model.Package.as_dict(package)
                   if (onlycreated == '1') and not(transition.startswith('created')):
                       continue

                   log.debug('group found: %s / group wanted: %s' % (packDict.get('groups'), organization))                   
                   if (organization != ''):
                       if not(organization in packDict.get('groups')):
                           continue
                   log.critical('CORRECT GROUP FOUND!!')
                   #if len(package_indications[0]) < 3:
                   #    revision_changes.xxx()
                       
                   pkgs = u'%s' % ' '.join(package_indications)
                   #item_title = u'%s ' % (revision.id)
                   item_title = packTitle
                   #if revision.message:
                   #    item_title += ': %s' % (revision.message or '')    
                   item_link = '/sucheDetail/?id=' + packId
                   item_description = indication
                   #item_description = _('Datasets affected: %s.\n') % pkgs
                   #item_description += '%s' % (revision.message or '')
                   #item_author_name = Authorization Group !
                   item_author_name =  maintainer
                   item_pubdate = revision.timestamp
                   
                   feed.add_item(
                     title=item_title,
                     link=item_link,
                     description=item_description,
                     author_name=item_author_name,
                     pubdate=item_pubdate,
                   )
                   log.fatal("feedlength: " + feed.num_items())
               feed.content_type = 'application/atom+xml'
               return feed.writeString('utf-8')
           else:
               return RevisionController.list(self);
コード例 #20
0
ファイル: data_gv_at.py プロジェクト: sebneu/ckanext-dgvat
 def list(self):
     format = request.params.get('format', '')
     onlycreated = request.params.get('created', '')
     organization = request.params.get('organization', '')
     feed_title=u'RSS-Feed - Geänderte Datensätze - data.gv.at'
     feed_description=_(u'Letzte Änderungen: ')
     if onlycreated == '1':
         feed_title=u'RSS-Feed - Neue Datensätze - data.gv.at'
         feed_description=_(u'Neue Datensätze: ')
     log.debug("organization selected: %s" % organization)        
     if format == 'atom':
         # Generate and return Atom 1.0 document.
         from webhelpers.feedgenerator import Atom1Feed
         feed = Atom1Feed(
             title=feed_title,
             link=h.url_for(controller='revision', action='list', id=''),
             description=feed_description,
             language=unicode(get_lang()),
         )
         # TODO: make this configurable?
         # we do not want the system to fall over!
         maxresults = 200
         maxfeedresults = 10
         try:
             dayHorizon = int(request.params.get('days', 30))
         except:
             dayHorizon = 30
         ourtimedelta = timedelta(days=-dayHorizon)
         since_when = datetime.now() + ourtimedelta
         querycounter = 0
         while querycounter <= 2:
             revision_query = model.repo.history()
             revision_query = revision_query.filter(
                     model.Revision.timestamp>=since_when).filter(
                     model.Revision.id!=None)
             revision_query = revision_query.slice(maxresults*querycounter, maxresults*querycounter+maxresults)
             for revision in revision_query:
                 if(feed.num_items()>=maxfeedresults):
                        break
                 package_indications = []
                 revision_changes = model.repo.list_changes(revision)
                 resource_revisions = revision_changes[model.Resource]
                 resource_group_revisions = revision_changes[model.ResourceGroup]
                 package_extra_revisions = revision_changes[model.PackageExtra]
                 for package in revision.packages:
                     number = len(package.all_revisions)
                     package_revision = None
                     count = 0
                     for pr in package.all_revisions:
                         count += 1
                         if pr.revision.id == revision.id:
                             package_revision = pr
                             break
                     if package_revision and package_revision.state == model.State.DELETED:
                         transition = 'deleted'
                     elif package_revision and count == number:
                         transition = 'created'
                     else:
                         transition = 'updated'
                         for resource_revision in resource_revisions:
                             if resource_revision.continuity.resource_group.package_id == package.id:
                                 transition += ':resources'
                                 break
                         for resource_group_revision in resource_group_revisions:
                             if resource_group_revision.package_id == package.id:
                                 transition += ':resource_group'
                                 break
                         for package_extra_revision in package_extra_revisions:
                             if package_extra_revision.package_id == package.id:
                                 if package_extra_revision.key == 'date_updated':
                                     transition += ':date_updated'
                                     break
                     indication = "%s:%s" % (package.name, transition)
                     package_indications.append(indication)
                     packName = package.name
                     packId = package.id
 #                    packTitle = package.title
 #                    maintainer = package.maintainer
 #                    package_indications.append(indication)
 #                    package = model.Package.get(packId)
 #                    packDict = model.Package.as_dict(package)
                 if (onlycreated == '1') and not(transition.startswith('created')):
                     log.fatal("show only created")
                     log.fatal("transition: %s" % transition)
                     continue
                 
 #                log.debug('group found: %s / group wanted: %s' % (packDict.get('groups'), organization))                   
 #                if (organization != ''):
 #                    if not(organization in packDict.get('groups')):
 #                        continue
 #                log.critical('CORRECT GROUP FOUND!!')                    
                 pkgs = u'[%s]' % ' '.join(package_indications)
                 item_title = u'r%s ' % (revision.id)
                 item_title += pkgs
                 if revision.message:
                     item_title += ': %s' % (revision.message or '')
                 item_link = "/sucheDetail/?id=%s" % packId
                 item_description = _('Datasets affected: %s.\n') % pkgs
                 item_description += '%s' % (revision.message or '')
                 item_author_name = revision.author
                 item_pubdate = revision.timestamp
                 feed.add_item(
                     title=item_title,
                     link=item_link,
                     description=item_description,
                     author_name=item_author_name,
                     pubdate=item_pubdate,
                 )
             querycounter += 1
         feed.content_type = 'application/atom+xml'
         return feed.writeString('utf-8')
     else:
         query = model.Session.query(model.Revision)
         c.page = Page(
             collection=query,
             page=request.params.get('page', 1),
             url=h.pager_url,
             items_per_page=20
         )
         return render('revision/list.html')
コード例 #21
0
ファイル: data_gv_at.py プロジェクト: sebneu/ckanext-dgvat
class feedGroupController(GroupController):

    def history(self, id):
        if 'diff' in request.params or 'selected1' in request.params:
            try:
                params = {'id':request.params.getone('group_name'),
                          'diff':request.params.getone('selected1'),
                          'oldid':request.params.getone('selected2'),
                          }
            except KeyError, e:
                if dict(request.params).has_key('group_name'):
                    id = request.params.getone('group_name')
                c.error = _('Select two revisions before doing the comparison.')
            else:
                params['diff_entity'] = 'group'
                h.redirect_to(controller='revision', action='diff', **params)

        context = {'model': model, 'session': model.Session,
                   'user': c.user or c.author,
                   'schema': self._form_to_db_schema()}
        data_dict = {'id': id}
        try:
            c.group_dict = get_action('group_show')(context, data_dict)
            c.group_revisions = get_action('group_revision_list')(context, data_dict)
            c.group = context['group']
        except NotFound:
            abort(404, _('Group not found'))
        except NotAuthorized:
            abort(401, _('User %r not authorized to edit %r') % (c.user, id))

        onlycreated = request.params.get('created', '')
        feed_title=u'RSS-Feed - Geänderte Datensätze - %s - data.gv.at' % c.group_dict['display_name']
        feed_description=_(u'Letzte Änderungen: ') + c.group_dict['display_name']
        if onlycreated == '1':
            feed_title=u'RSS-Feed - Neue Datensätze - %s - data.gv.at' % c.group_dict['display_name']
            feed_description=_(u'Neue Datensätze: ') + c.group_dict['display_name']
        format = request.params.get('format', '')
        if format == 'atom':
            # Generate and return Atom 1.0 document.
            from webhelpers.feedgenerator import Atom1Feed
            feed = Atom1Feed(
                title=_(u'CKAN Group Revision History'),
                link=h.url_for(controller='group', action='read', id=c.group_dict['name']),
                description=_(u'Recent changes to CKAN Group: ') +
                    c.group_dict['display_name'],
                language=unicode(get_lang()),
            )
            for revision_dict in c.group_revisions:
                revision_date = h.date_str_to_datetime(revision_dict['timestamp'])
                try:
                    dayHorizon = int(request.params.get('days'))
                except:
                    dayHorizon = 30
                dayAge = (datetime.datetime.now() - revision_date).days
                if dayAge >= dayHorizon:
                    break
                if revision_dict['message']:
                    item_title = u'%s' % revision_dict['message'].split('\n')[0]
                else:
                    item_title = u'%s' % revision_dict['id']
                item_link = h.url_for(controller='revision', action='read', id=revision_dict['id'])
                item_description = _('Log message: ')
                item_description += '%s' % (revision_dict['message'] or '')
                item_author_name = revision_dict['author']
                item_pubdate = revision_date
                feed.add_item(
                    title=item_title,
                    link=item_link,
                    description=item_description,
                    author_name=item_author_name,
                    pubdate=item_pubdate,
                )
            feed.content_type = 'application/atom+xml'
            return feed.writeString('utf-8')
        return render( self._history_template(c.group_dict['type']) )