Return-Path: X-Original-To: apmail-incubator-allura-commits-archive@minotaur.apache.org Delivered-To: apmail-incubator-allura-commits-archive@minotaur.apache.org Received: from mail.apache.org (hermes.apache.org [140.211.11.3]) by minotaur.apache.org (Postfix) with SMTP id DA83E1027A for ; Wed, 12 Mar 2014 20:48:03 +0000 (UTC) Received: (qmail 33069 invoked by uid 500); 12 Mar 2014 20:48:02 -0000 Delivered-To: apmail-incubator-allura-commits-archive@incubator.apache.org Received: (qmail 32973 invoked by uid 500); 12 Mar 2014 20:48:01 -0000 Mailing-List: contact allura-commits-help@incubator.apache.org; run by ezmlm Precedence: bulk List-Help: List-Unsubscribe: List-Post: List-Id: Reply-To: allura-dev@incubator.apache.org Delivered-To: mailing list allura-commits@incubator.apache.org Received: (qmail 32861 invoked by uid 99); 12 Mar 2014 20:48:00 -0000 Received: from tyr.zones.apache.org (HELO tyr.zones.apache.org) (140.211.11.114) by apache.org (qpsmtpd/0.29) with ESMTP; Wed, 12 Mar 2014 20:48:00 +0000 Received: by tyr.zones.apache.org (Postfix, from userid 65534) id C8F83942BD1; Wed, 12 Mar 2014 20:47:59 +0000 (UTC) Content-Type: text/plain; charset="us-ascii" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit From: johnsca@apache.org To: allura-commits@incubator.apache.org Date: Wed, 12 Mar 2014 20:48:03 -0000 Message-Id: <292d6aa2a0a84f928aeef692bf9d88ed@git.apache.org> In-Reply-To: <1207a1f09c9f4d6a991624949e192c70@git.apache.org> References: <1207a1f09c9f4d6a991624949e192c70@git.apache.org> X-Mailer: ASF-Git Admin Mailer Subject: [5/9] git commit: [#7208] ticket:549 Add DOAP API + basic project fields [#7208] ticket:549 Add DOAP API + basic project fields Project: http://git-wip-us.apache.org/repos/asf/incubator-allura/repo Commit: http://git-wip-us.apache.org/repos/asf/incubator-allura/commit/28c1722d Tree: http://git-wip-us.apache.org/repos/asf/incubator-allura/tree/28c1722d Diff: http://git-wip-us.apache.org/repos/asf/incubator-allura/diff/28c1722d Branch: refs/heads/master Commit: 28c1722d4147819ea0d2b927540b1f52ce7606c9 Parents: cc742e3 Author: Igor Bondarenko Authored: Mon Feb 24 17:23:49 2014 +0200 Committer: Cory Johns Committed: Wed Mar 12 20:47:54 2014 +0000 ---------------------------------------------------------------------- Allura/allura/controllers/rest.py | 6 +++- Allura/allura/model/project.py | 54 ++++++++++++++++++++++++++++++++++ 2 files changed, 59 insertions(+), 1 deletion(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/incubator-allura/blob/28c1722d/Allura/allura/controllers/rest.py ---------------------------------------------------------------------- diff --git a/Allura/allura/controllers/rest.py b/Allura/allura/controllers/rest.py index 6e7e452..2985c55 100644 --- a/Allura/allura/controllers/rest.py +++ b/Allura/allura/controllers/rest.py @@ -25,7 +25,7 @@ import oauth2 as oauth from webob import exc from tg import expose, flash, redirect from pylons import tmpl_context as c, app_globals as g -from pylons import request +from pylons import request, response from ming.orm import session from ming.utils import LazyProperty @@ -307,4 +307,8 @@ class ProjectRestController(object): @expose('json:') def index(self, **kw): + if 'doap' in kw: + response.headers['Content-Type'] = '' + response.content_type = 'application/rdf+xml' + return c.project.doap() return c.project.__json__() http://git-wip-us.apache.org/repos/asf/incubator-allura/blob/28c1722d/Allura/allura/model/project.py ---------------------------------------------------------------------- diff --git a/Allura/allura/model/project.py b/Allura/allura/model/project.py index c5ffd91..21b8b9c 100644 --- a/Allura/allura/model/project.py +++ b/Allura/allura/model/project.py @@ -27,6 +27,7 @@ from pylons import tmpl_context as c, app_globals as g from pylons import request from paste.deploy.converters import asbool import formencode as fe +from datatree import Tree, Node from ming import schema as S from ming.utils import LazyProperty @@ -983,6 +984,59 @@ class Project(MappedClass, ActivityNode, ActivityObject): ] ) + def doap(self): + root = Node('rdf:RDF', **{ + 'xmlns:rdf': "http://www.w3.org/1999/02/22-rdf-syntax-ns#", + 'xmlns:rdfs': "http://www.w3.org/2000/01/rdf-schema#", + }) + p = Node('Project', **{ + 'xmlns': "http://usefulinc.com/ns/doap#", + 'xmlns:foaf': "http://xmlns.com/foaf/0.1/", + 'xmlns:sf': "http://sourceforge.net/api/sfelements.rdf#", + 'xmlns:rss': "http://purl.org/rss/1.0/", + 'xmlns:dc': "http://dublincore.org/documents/dcmi-namespace/", + 'xmlns:beer': "http://www.purl.org/net/ontology/beer.owl#", + 'rdf:about': "http://sourceforge.net/api/project/name/vivo/doap#", + }) + root << p + p << Node('name', self.name) + p << Node('sf:shortname', self.shortname) + p << Node('sf:id', str(self._id)) + p << Node('sf:private', self.private) + p << Node('created', ) + p << Node('shortdesc', self.short_description, **{'xml:lang': 'en'}) + p << Node('description', self.description, **{'xml:lang': 'en'}) + if self.external_homepage: + p << Node('homepage', **{'rdf:resource': self.external_homepage}) + + for cat in TroveCategory.query.find({'_id': {'$in': self.trove_audience}}): + p << Node('audience', cat.fullname) + for cat in TroveCategory.query.find({'_id': {'$in': self.trove_os}}): + p << Node('os', cat.fullname) + for cat in TroveCategory.query.find({'_id': {'$in': self.trove_language}}): + p << Node('programming-language', cat.fullname) + for cat in TroveCategory.query.find({'_id': {'$in': self.trove_license}}): + p << Node('license', cat.fullname) + for cat in TroveCategory.query.find({'_id': {'$in': self.trove_environment}}): + p << Node('sf:environment', cat.fullname) + for cat in TroveCategory.query.find({'_id': {'$in': self.trove_root_database}}): + p << Node('sf:database', cat.fullname) + all_troves = ( + self.trove_root_database + + self.trove_developmentstatus + + self.trove_audience + + self.trove_license + + self.trove_topic + + self.trove_os + + self.trove_language + + self.trove_natlanguage + + self.trove_environment + ) + for cat in TroveCategory.query.find({'_id': {'$in': all_troves}}): + p << Node('category', **{'rdf:resource': 'http://sourceforge.net/api/trove/index/rdf#%s' % cat.trove_cat_id}) + + return root.render(as_root=True) + class AppConfig(MappedClass, ActivityObject):