in Allura/allura/model/project.py [0:0]
def doap(self):
root = ET.Element('rdf:RDF', {
'xmlns:rdf': "http://www.w3.org/1999/02/22-rdf-syntax-ns#",
'xmlns:rdfs': "http://www.w3.org/2000/01/rdf-schema#",
})
project = ET.SubElement(root, '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': h.absurl('/rest/' + self.url().strip('/') + '?doap#'),
})
# Basic fields
ET.SubElement(project, 'name').text = self.shortname
ET.SubElement(project, 'dc:title').text = self.name
ET.SubElement(project, 'sf:private').text = '1' if self.private else '0' # strange, but sf.net does this
ET.SubElement(project, 'shortdesc', {'xml:lang': 'en'}).text = self.summary
ET.SubElement(project, 'description', {'xml:lang': 'en'}).text = self.short_description
registration_date = plugin.ProjectRegistrationProvider.get().registration_date(self)
ET.SubElement(project, 'created').text = registration_date.strftime('%Y-%m-%d')
if self.external_homepage:
ET.SubElement(project, 'homepage', {'rdf:resource': self.external_homepage})
# Categories
for cat in TroveCategory.query.find({'_id': {'$in': self.trove_audience}}):
ET.SubElement(project, 'audience').text = cat.fullname
for cat in TroveCategory.query.find({'_id': {'$in': self.trove_os}}):
ET.SubElement(project, 'os').text = cat.fullname
for cat in TroveCategory.query.find({'_id': {'$in': self.trove_language}}):
ET.SubElement(project, 'programming-language').text = cat.fullname
for cat in TroveCategory.query.find({'_id': {'$in': self.trove_license}}):
ET.SubElement(project, 'license').text = cat.fullname
for cat in TroveCategory.query.find({'_id': {'$in': self.trove_environment}}):
ET.SubElement(project, 'sf:environment').text = cat.fullname
for cat in TroveCategory.query.find({'_id': {'$in': self.trove_root_database}}):
ET.SubElement(project, 'sf:database').text = 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}}):
ET.SubElement(project, 'category', {'rdf:resource': 'http://sourceforge.net/api/trove/index/rdf#%s' % cat.trove_cat_id})
# Awards
for a in self.accolades:
award = ET.SubElement(project, 'sf:awarded')
award = ET.SubElement(award, 'beer:Award')
ET.SubElement(award, 'beer:awardCategory').text = a.award.full
ET.SubElement(award, 'beer:awardedAt').text = a.granted_by_neighborhood.name
# Maintainers
admins = self.admins()
for u in admins:
person = ET.SubElement(project, 'maintainer')
person = ET.SubElement(person, 'foaf:Person', {
'xmlns:foaf': "http://xmlns.com/foaf/0.1/",
'xmlns:rdf': "http://www.w3.org/1999/02/22-rdf-syntax-ns#"})
ET.SubElement(person, 'foaf:name').text = u.display_name
ET.SubElement(person, 'foaf:nick').text = u.username
ET.SubElement(person, 'foaf:homepage', {'rdf:resource': h.absurl(u.url())})
# Developers
devs = [u for u in self.users_with_role('Developer') if u not in admins]
for u in devs:
person = ET.SubElement(project, 'developer')
person = ET.SubElement(person, 'foaf:Person', {
'xmlns:foaf': "http://xmlns.com/foaf/0.1/",
'xmlns:rdf': "http://www.w3.org/1999/02/22-rdf-syntax-ns#"})
ET.SubElement(person, 'foaf:name').text = u.display_name
ET.SubElement(person, 'foaf:nick').text = u.username
ET.SubElement(person, 'foaf:homepage', {'rdf:resource': h.absurl(u.url())})
# Basic tool info
apps = [self.app_instance(ac) for ac in self.app_configs if h.has_access(ac, 'read')]
for app in apps:
app.doap(project)
return ET.tostring(root, encoding='utf-8')