You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@allura.apache.org by tv...@apache.org on 2013/08/26 16:00:58 UTC
[19/50] git commit: [#3154] add & update project json API
[#3154] add & update project json API
* add screenshots
* fix screenshot url encoding on screenshot admin page
* add trove categories
* add a few individual fields
* rename fields to match their usage better
* remove download field since it's SourceForge-specific
Project: http://git-wip-us.apache.org/repos/asf/incubator-allura/repo
Commit: http://git-wip-us.apache.org/repos/asf/incubator-allura/commit/20955bde
Tree: http://git-wip-us.apache.org/repos/asf/incubator-allura/tree/20955bde
Diff: http://git-wip-us.apache.org/repos/asf/incubator-allura/diff/20955bde
Branch: refs/heads/tv/6595
Commit: 20955bde78b1a4d03b0f80119827a8947903a335
Parents: c71f754
Author: Dave Brondsema <db...@slashdotmedia.com>
Authored: Thu Aug 1 15:35:24 2013 +0000
Committer: Dave Brondsema <db...@slashdotmedia.com>
Committed: Thu Aug 22 20:04:43 2013 +0000
----------------------------------------------------------------------
Allura/allura/model/auth.py | 2 +-
Allura/allura/model/project.py | 52 +++++++++++++++++---
.../templates/widgets/project_screenshots.html | 2 +-
Allura/allura/tests/functional/test_rest.py | 11 ++---
4 files changed, 53 insertions(+), 14 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/incubator-allura/blob/20955bde/Allura/allura/model/auth.py
----------------------------------------------------------------------
diff --git a/Allura/allura/model/auth.py b/Allura/allura/model/auth.py
index c8964f3..fb58ce9 100644
--- a/Allura/allura/model/auth.py
+++ b/Allura/allura/model/auth.py
@@ -702,7 +702,7 @@ class User(MappedClass, ActivityNode, ActivityObject):
return dict(
username=self.username,
name=self.display_name,
- url=self.url(),
+ url=h.absurl(self.url()),
)
class OldProjectRole(MappedClass):
http://git-wip-us.apache.org/repos/asf/incubator-allura/blob/20955bde/Allura/allura/model/project.py
----------------------------------------------------------------------
diff --git a/Allura/allura/model/project.py b/Allura/allura/model/project.py
index 941b360..2258c18 100644
--- a/Allura/allura/model/project.py
+++ b/Allura/allura/model/project.py
@@ -20,6 +20,7 @@ import logging
from collections import Counter, OrderedDict
from datetime import datetime
from copy import deepcopy
+import urllib
from tg import config
from pylons import tmpl_context as c, app_globals as g
@@ -137,6 +138,14 @@ class TroveCategory(MappedClass):
crumbs.append((trove.fullname, url))
return crumbs
+ def __json__(self):
+ return dict(
+ id=self.trove_cat_id,
+ shortname=self.shortname,
+ fullname=self.fullname,
+ fullpath=self.fullpath,
+ )
+
class ProjectMapperExtension(MapperExtension):
def after_insert(self, obj, st, sess):
g.zarkov_event('project_create', project=obj)
@@ -250,6 +259,21 @@ class Project(MappedClass, ActivityNode, ActivityObject):
def troves_by_type(self, trove_type):
return TroveCategory.query.find({'_id':{'$in':getattr(self,'trove_%s' % trove_type)}}).all()
+ def all_troves(self):
+ '''
+ Returns a dict of human-readable root troves => [categories]
+ '''
+ troves = {}
+ for attr in dir(self):
+ if attr.startswith('trove_'):
+ trove_type = attr.replace('trove_','')
+ nice_name = dict(
+ natlanguage='translation',
+ root_database='database',
+ ).get(trove_type, trove_type)
+ troves[nice_name] = self.troves_by_type(trove_type)
+ return troves
+
def get_tool_data(self, tool, key, default=None):
return self.tool_data.get(tool, {}).get(key, default)
@@ -839,17 +863,33 @@ class Project(MappedClass, ActivityNode, ActivityObject):
def __json__(self):
return dict(
- name=self.shortname,
- title=self.name,
+ shortname=self.shortname,
+ name=self.name,
_id=self._id,
+ url=h.absurl(self.url()),
private=self.private,
short_description=self.short_description,
- description=self.description,
- download_page=self.best_download_url(),
- preferred_support=self.support_page_url,
+ summary=self.summary,
+ external_homepage=self.external_homepage,
+ socialnetworks=self.socialnetworks,
+ status=self.removal or 'active',
+ moved_to_url=self.moved_to_url,
+ preferred_support_tool=self.support_page,
+ preferred_support_url=self.support_page_url,
developers=self.users_with_role('Developer'),
tools=[dict(name=t.tool_name, mount_point=t.options.mount_point, label=t.options.mount_label)
- for t in self.app_configs if h.has_access(t, 'read')]
+ for t in self.app_configs if h.has_access(t, 'read')],
+ labels=self.labels,
+ categories=self.all_troves(),
+ icon_url=h.absurl(self.url() + 'icon') if self.icon else None,
+ screenshots = [
+ dict(
+ url = h.absurl(self.url() + 'screenshot/' + urllib.quote(ss.filename)),
+ thumbnail_url = h.absurl(self.url() + 'screenshot/' + urllib.quote(ss.filename) + '/thumb'),
+ caption = ss.caption,
+ )
+ for ss in self.get_screenshots()
+ ]
)
http://git-wip-us.apache.org/repos/asf/incubator-allura/blob/20955bde/Allura/allura/templates/widgets/project_screenshots.html
----------------------------------------------------------------------
diff --git a/Allura/allura/templates/widgets/project_screenshots.html b/Allura/allura/templates/widgets/project_screenshots.html
index 01d9849..7d3d338 100644
--- a/Allura/allura/templates/widgets/project_screenshots.html
+++ b/Allura/allura/templates/widgets/project_screenshots.html
@@ -24,7 +24,7 @@
{% for ss in screenshots %}
<div data-ss-id="{{ ss._id }}" class="screenshot">
<div class="image">
- <a href="{{project.url()}}screenshot/{{ss.filename}}"><img src="{{project.url()}}screenshot/{{ss.filename}}/thumb" alt="Screenshot thumbnail"/></a>
+ <a href="{{project.url()}}screenshot/{{h.urlquote(ss.filename)}}"><img src="{{project.url()}}screenshot/{{h.urlquote(ss.filename)}}/thumb" alt="Screenshot thumbnail"/></a>
{% if not edit %}
<br>
{{ss.caption}}
http://git-wip-us.apache.org/repos/asf/incubator-allura/blob/20955bde/Allura/allura/tests/functional/test_rest.py
----------------------------------------------------------------------
diff --git a/Allura/allura/tests/functional/test_rest.py b/Allura/allura/tests/functional/test_rest.py
index 0278666..0977f26 100644
--- a/Allura/allura/tests/functional/test_rest.py
+++ b/Allura/allura/tests/functional/test_rest.py
@@ -74,14 +74,13 @@ class TestRestHome(TestRestApiBase):
def test_project_data(self):
r = self.api_get('/rest/p/test/')
- assert_equal(r.json['name'], 'test')
- assert_equal(r.json['title'], 'Test Project')
- assert_equal(r.json['description'], 'You can edit this description in the admin page')
+ assert_equal(r.json['shortname'], 'test')
+ assert_equal(r.json['name'], 'Test Project')
assert_equal(len(r.json['developers']), 1)
admin_dev = r.json['developers'][0]
assert_equal(admin_dev['username'], 'test-admin')
assert_equal(admin_dev['name'], 'Test Admin')
- assert_equal(admin_dev['url'], '/u/test-admin/')
+ assert_equal(admin_dev['url'], 'http://localhost:80/u/test-admin/')
@td.with_tool('test', 'Tickets', 'bugs')
@td.with_tool('test', 'Tickets', 'private-bugs')
@@ -95,14 +94,14 @@ class TestRestHome(TestRestApiBase):
# admin sees both 'Tickets' tools
r = self.api_get('/rest/p/test/')
- assert_equal(r.json['name'], 'test')
+ assert_equal(r.json['shortname'], 'test')
tool_mounts = [t['mount_point'] for t in r.json['tools']]
assert_in('bugs', tool_mounts)
assert_in('private-bugs', tool_mounts)
# anonymous sees only non-private tool
r = self.app.get('/rest/p/test/', extra_environ={'username': '*anonymous'})
- assert_equal(r.json['name'], 'test')
+ assert_equal(r.json['shortname'], 'test')
tool_mounts = [t['mount_point'] for t in r.json['tools']]
assert_in('bugs', tool_mounts)
assert_not_in('private-bugs', tool_mounts)