You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@allura.apache.org by br...@apache.org on 2012/09/25 04:13:10 UTC

[8/14] git commit: [#4637] ticket:168 URL shortener Allura App improvements

[#4637] ticket:168 URL shortener Allura App improvements


Project: http://git-wip-us.apache.org/repos/asf/incubator-allura/repo
Commit: http://git-wip-us.apache.org/repos/asf/incubator-allura/commit/d44aa45e
Tree: http://git-wip-us.apache.org/repos/asf/incubator-allura/tree/d44aa45e
Diff: http://git-wip-us.apache.org/repos/asf/incubator-allura/diff/d44aa45e

Branch: refs/heads/master
Commit: d44aa45e64f49cc3c81689bbda316b0cd36a2eb0
Parents: 22c09c5
Author: Yuriy Arhipov <yu...@yandex.ru>
Authored: Mon Sep 17 10:38:52 2012 +0400
Committer: Cory Johns <jo...@geek.net>
Committed: Fri Sep 21 20:06:16 2012 +0000

----------------------------------------------------------------------
 ForgeShortUrl/forgeshorturl/main.py                |   29 +++++++++------
 ForgeShortUrl/forgeshorturl/model/shorturl.py      |   16 +++++----
 .../forgeshorturl/tests/functional/test.py         |   11 ++----
 3 files changed, 29 insertions(+), 27 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/incubator-allura/blob/d44aa45e/ForgeShortUrl/forgeshorturl/main.py
----------------------------------------------------------------------
diff --git a/ForgeShortUrl/forgeshorturl/main.py b/ForgeShortUrl/forgeshorturl/main.py
index 982d418..89c7026 100644
--- a/ForgeShortUrl/forgeshorturl/main.py
+++ b/ForgeShortUrl/forgeshorturl/main.py
@@ -1,19 +1,23 @@
 from tg import expose, validate, redirect, flash, request
+
 from allura.app import Application, SitemapEntry, DefaultAdminController
 from allura import model as M
 from allura.lib.security import require_access, has_access
 from allura.lib import helpers as h
 from allura.controllers import BaseController
 from allura.lib.widgets import form_fields as ffw
+
 from webob import exc
+import pylons
 from pylons import c, g
+from datetime import datetime
 from formencode import validators
 from formencode.compound import All
-import logging
+
 from forgeshorturl.model.shorturl import ShortUrl
-from datetime import datetime
 from forgeshorturl.widgets.short_url import CreateShortUrlWidget
-import pylons
+
+import logging
 
 
 log = logging.getLogger(__name__)
@@ -36,7 +40,6 @@ class ForgeShortUrlApp(Application):
     sitemap = []
     ordinal = 14
     installable = False
-    hidden = True
     icons = {
         24: 'images/ext_24.png',
         32: 'images/ext_32.png',
@@ -48,6 +51,10 @@ class ForgeShortUrlApp(Application):
         self.root = RootController()
         self.admin = ShortURLAdminController(self)
 
+    def is_visible_to(self, user):
+        '''Whether the user can view the app.'''
+        return has_access(c.project, 'create')(user=user)
+
     @property
     @h.exceptionless([], log)
     def sitemap(self):
@@ -88,16 +95,15 @@ class ForgeShortUrlApp(Application):
         super(ForgeShortUrlApp, self).install(project)
         # Setup permissions
         role_admin = M.ProjectRole.by_name('Admin')._id
-        role_anon = M.ProjectRole.anonymous()._id
         self.config.acl = [
             M.ACE.allow(role_admin, 'create'),
             M.ACE.allow(role_admin, 'update'),
             M.ACE.allow(role_admin, 'view_private'),
-            M.ACE.allow(role_anon, 'read'),
             M.ACE.allow(role_admin, 'configure'), ]
 
     def uninstall(self, project):
         "Remove all the tool's artifacts from the database"
+        ShortUrl.query.remove(dict(app_config_id=c.app.config._id))
         super(ForgeShortUrlApp, self).uninstall(project)
 
 
@@ -115,7 +121,7 @@ class RootController(BaseController):
         c.page_list = W.page_list
         c.page_size = W.page_size
         limit, pagenum, start = g.handle_paging(limit, page, default=100)
-        p = {'project_id': c.project._id}
+        p = {'app_config_id': c.app.config._id}
         if not has_access(c.app, 'view_private'):
             p['private'] = False
         short_urls = (ShortUrl.query.find(p))
@@ -133,11 +139,10 @@ class RootController(BaseController):
     @expose()
     def _lookup(self, pname, *remainder):
         if request.method == 'GET':
-            short_url = ShortUrl.query.find({'project_id': c.project._id,
+            short_url = ShortUrl.query.find({'app_config_id': c.app.config._id,
                                              'short_name': pname}).first()
             if short_url:
-                u = validators.URL(add_http=True)
-                redirect(u.to_python(short_url.url))
+                redirect(short_url.url)
 
         flash("We're sorry but we weren't able "
               "to process this request.", "error")
@@ -153,7 +158,7 @@ class ShortURLAdminController(DefaultAdminController):
         redirect(c.project.url() + 'admin/tools')
 
     @expose('jinja:forgeshorturl:templates/add.html')
-    @validate(dict(full_url=All(validators.URL(),
+    @validate(dict(full_url=All(validators.URL(add_http=True),
                                 validators.NotEmpty()),
                    short_url=validators.NotEmpty()))
     def add(self, short_url="",
@@ -188,7 +193,7 @@ class ShortURLAdminController(DefaultAdminController):
                 shorturl.short_name = short_url
                 shorturl.description = description
                 shorturl.create_user = c.user._id
-                shorturl.project_id = c.project._id
+                shorturl.app_config_id = self.app.config._id
                 if private == "on":
                     shorturl.private = True
                 else:

http://git-wip-us.apache.org/repos/asf/incubator-allura/blob/d44aa45e/ForgeShortUrl/forgeshorturl/model/shorturl.py
----------------------------------------------------------------------
diff --git a/ForgeShortUrl/forgeshorturl/model/shorturl.py b/ForgeShortUrl/forgeshorturl/model/shorturl.py
index d20987c..b7585ce 100644
--- a/ForgeShortUrl/forgeshorturl/model/shorturl.py
+++ b/ForgeShortUrl/forgeshorturl/model/shorturl.py
@@ -1,22 +1,18 @@
 import pymongo
-from ming.orm.declarative import MappedClass
 from allura.model import project_orm_session
 from ming.orm import FieldProperty, ForeignIdProperty, session
 from datetime import datetime
-from ming import schema
 from allura.model.auth import User
-from allura.model import Project
-from allura.model.timeline import ActivityNode, ActivityObject
+from allura import model as M
 
 
-class ShortUrl(MappedClass, ActivityNode, ActivityObject):
+class ShortUrl(M.Artifact):
 
     class __mongometa__:
         name = 'short_urls'
         session = project_orm_session
         unique_indexes = ['short_name']
 
-    _id = FieldProperty(schema.ObjectId)
     url = FieldProperty(str)
     short_name = FieldProperty(str)
     description = FieldProperty(str)
@@ -24,7 +20,6 @@ class ShortUrl(MappedClass, ActivityNode, ActivityObject):
     create_user = ForeignIdProperty(User)
     created = FieldProperty(datetime, if_missing=datetime.utcnow)
     last_updated = FieldProperty(datetime, if_missing=datetime.utcnow)
-    project_id = ForeignIdProperty(Project)
 
     @property
     def user(self):
@@ -42,3 +37,10 @@ class ShortUrl(MappedClass, ActivityNode, ActivityObject):
             session(u).expunge(u)
             u = cls.query.get(short_name=shortname)
         return u
+
+    def index(self):
+        result = M.Artifact.index(self)
+        result.update(
+            url=self.url,
+            short_name=self.short_name)
+        return result

http://git-wip-us.apache.org/repos/asf/incubator-allura/blob/d44aa45e/ForgeShortUrl/forgeshorturl/tests/functional/test.py
----------------------------------------------------------------------
diff --git a/ForgeShortUrl/forgeshorturl/tests/functional/test.py b/ForgeShortUrl/forgeshorturl/tests/functional/test.py
index 466845f..5551d2b 100644
--- a/ForgeShortUrl/forgeshorturl/tests/functional/test.py
+++ b/ForgeShortUrl/forgeshorturl/tests/functional/test.py
@@ -34,14 +34,9 @@ class TestRootController(TestController):
                            full_url='http://www.amazone.com/',
                            private='on',
                            description="description1"))
-
-        self.app.post('/admin/url/add',
-                      dict(short_url='test',
-                           full_url='http://www.google.com/',
-                           description="description2"))
-        r = self.app.get('/url/', extra_environ=dict(username='*anonymous'))
-        assert 'http://www.google.com/' in r
-        assert 'http://www.amazone.com/' not in r
+        r = self.app.get('/url/')
+        assert 'http://www.amazone.com/' in r
+        assert '<td><small>yes</small></td>' in r
 
     def test_shorturl_errors(self):
         d = dict(short_url='http://www.amazone.com/',