You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@allura.apache.org by jo...@apache.org on 2012/10/05 18:27:22 UTC

[1/2] git commit: [#4968] provide pluggable ticket import_id converter

Updated Branches:
  refs/heads/master 1a481f418 -> 62c872437


[#4968] provide pluggable ticket import_id converter


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

Branch: refs/heads/master
Commit: 62c872437b821d767efe152a4ae8aa2d07021771
Parents: 6ef3a88
Author: Dave Brondsema <db...@geek.net>
Authored: Tue Oct 2 19:53:11 2012 +0000
Committer: Cory Johns <jo...@geek.net>
Committed: Fri Oct 5 16:13:30 2012 +0000

----------------------------------------------------------------------
 Allura/allura/lib/app_globals.py                   |   31 ++++++++------
 ForgeTracker/forgetracker/model/ticket.py          |    5 +-
 ForgeTracker/forgetracker/plugins.py               |   32 +++++++++++++++
 ForgeTracker/forgetracker/tracker_main.py          |    5 +-
 ForgeTracker/forgetracker/widgets/ticket_search.py |    9 ++--
 5 files changed, 60 insertions(+), 22 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/incubator-allura/blob/62c87243/Allura/allura/lib/app_globals.py
----------------------------------------------------------------------
diff --git a/Allura/allura/lib/app_globals.py b/Allura/allura/lib/app_globals.py
index 194765e..00af5ae 100644
--- a/Allura/allura/lib/app_globals.py
+++ b/Allura/allura/lib/app_globals.py
@@ -139,12 +139,24 @@ class Globals(object):
         )
 
         # Cache some loaded entry points
-        self.entry_points = dict(
-            tool=self._cache_eps('allura', dict_cls=utils.CaseInsensitiveDict),
-            auth=self._cache_eps('allura.auth'),
-            registration=self._cache_eps('allura.project_registration'),
-            theme=self._cache_eps('allura.theme'),
-            user_prefs=self._cache_eps('allura.user_prefs'),
+        def _cache_eps(section_name, dict_cls=dict):
+            d = dict_cls()
+            for ep in pkg_resources.iter_entry_points(section_name):
+                value = ep.load()
+                d[ep.name] = value
+            return d
+
+        class entry_point_loading_dict(dict):
+            def __missing__(self, key):
+                self[key] = _cache_eps(key)
+                return self[key]
+
+        self.entry_points = entry_point_loading_dict(
+            tool=_cache_eps('allura', dict_cls=utils.CaseInsensitiveDict),
+            auth=_cache_eps('allura.auth'),
+            registration=_cache_eps('allura.project_registration'),
+            theme=_cache_eps('allura.theme'),
+            user_prefs=_cache_eps('allura.user_prefs'),
             )
 
         # Zarkov logger
@@ -170,13 +182,6 @@ class Globals(object):
         else:
             return None
 
-    def _cache_eps(self, section_name, dict_cls=dict):
-        d = dict_cls()
-        for ep in pkg_resources.iter_entry_points(section_name):
-            value = ep.load()
-            d[ep.name] = value
-        return d
-
     def post_event(self, topic, *args, **kwargs):
         allura.tasks.event_tasks.event.post(topic, *args, **kwargs)
 

http://git-wip-us.apache.org/repos/asf/incubator-allura/blob/62c87243/ForgeTracker/forgetracker/model/ticket.py
----------------------------------------------------------------------
diff --git a/ForgeTracker/forgetracker/model/ticket.py b/ForgeTracker/forgetracker/model/ticket.py
index b0a4580..31753ae 100644
--- a/ForgeTracker/forgetracker/model/ticket.py
+++ b/ForgeTracker/forgetracker/model/ticket.py
@@ -4,7 +4,6 @@ import json
 import difflib
 from datetime import datetime, timedelta
 
-import bson
 import pymongo
 import pylons
 pylons.c = pylons.tmpl_context
@@ -29,6 +28,8 @@ from allura.lib.search import search_artifact
 from allura.lib import utils
 from allura.lib import helpers as h
 
+from forgetracker.plugins import ImportIdConverter
+
 log = logging.getLogger(__name__)
 
 config = utils.ConfigProxy(
@@ -278,7 +279,7 @@ class Ticket(VersionedArtifact, ActivityObject, VotableArtifact):
             votes_up_i=self.votes_up,
             votes_down_i=self.votes_down,
             votes_total_i=(self.votes_up-self.votes_down),
-            import_id_s=self.import_id
+            import_id_s=ImportIdConverter.get().simplify(self.import_id)
             )
         for k,v in self.custom_fields.iteritems():
             result[k + '_s'] = unicode(v)

http://git-wip-us.apache.org/repos/asf/incubator-allura/blob/62c87243/ForgeTracker/forgetracker/plugins.py
----------------------------------------------------------------------
diff --git a/ForgeTracker/forgetracker/plugins.py b/ForgeTracker/forgetracker/plugins.py
new file mode 100644
index 0000000..0a3f938
--- /dev/null
+++ b/ForgeTracker/forgetracker/plugins.py
@@ -0,0 +1,32 @@
+import logging
+
+from tg import config
+from pylons import app_globals as g
+
+log = logging.getLogger(__name__)
+
+
+class ImportIdConverter(object):
+    '''
+    An interface to provide authentication services for Allura.
+
+    To provide a new converter, expose an entry point in setup.py:
+
+        [allura.tickets.import_id_converter]
+        mylegacy = foo.bar:LegacyConverter
+
+    Then in your .ini file, set tickets.import_id_converter=mylegacy
+    '''
+
+    @classmethod
+    def get(cls):
+        converter = config.get('tickets.import_id_converter')
+        if converter:
+            return g.entry_points['allura.tickets.import_id_converter'][converter]()
+        return cls()
+
+    def simplify(self, import_id):
+        return import_id
+
+    def expand(self, url_part, app_instance):
+        return url_part

http://git-wip-us.apache.org/repos/asf/incubator-allura/blob/62c87243/ForgeTracker/forgetracker/tracker_main.py
----------------------------------------------------------------------
diff --git a/ForgeTracker/forgetracker/tracker_main.py b/ForgeTracker/forgetracker/tracker_main.py
index 8a6bc42..8210233 100644
--- a/ForgeTracker/forgetracker/tracker_main.py
+++ b/ForgeTracker/forgetracker/tracker_main.py
@@ -48,6 +48,7 @@ from forgetracker.widgets.bin_form import BinForm
 from forgetracker.widgets.ticket_search import TicketSearchResults, MassEdit, MassEditForm, SearchHelp
 from forgetracker.widgets.admin_custom_fields import TrackerFieldAdmin, TrackerFieldDisplay
 from forgetracker.import_support import ImportSupport
+from forgetracker.plugins import ImportIdConverter
 
 log = logging.getLogger(__name__)
 
@@ -301,8 +302,6 @@ class ForgeTrackerApp(Application):
 
 
 
-
-
 ### Controllers ###
 
 def mongo_columns():
@@ -958,7 +957,7 @@ class TicketController(BaseController):
             if self.ticket is None:
                 self.ticket = TM.Ticket.query.get(
                         app_config_id=c.app.config._id,
-                        import_id=str(ticket_num))
+                        import_id=str(ImportIdConverter.get().expand(ticket_num, c.app)))
                 if self.ticket is not None:
                     utils.permanent_redirect(self.ticket.url())
             self.attachment = AttachmentsController(self.ticket)

http://git-wip-us.apache.org/repos/asf/incubator-allura/blob/62c87243/ForgeTracker/forgetracker/widgets/ticket_search.py
----------------------------------------------------------------------
diff --git a/ForgeTracker/forgetracker/widgets/ticket_search.py b/ForgeTracker/forgetracker/widgets/ticket_search.py
index b134a22..a0de204 100644
--- a/ForgeTracker/forgetracker/widgets/ticket_search.py
+++ b/ForgeTracker/forgetracker/widgets/ticket_search.py
@@ -75,17 +75,18 @@ class SearchHelp(ffw.Lightbox):
         content="""<div style="height:400px; overflow:auto;"><h1>Searching for tickets</h1>
 <p>Searches use <a href="http://www.solrtutorial.com/solr-query-syntax.html" target="_blank">solr lucene query syntax</a>. Use the following fields in tracker ticket searches:</p>
 <ul>
-<li>User who owns the ticket - assigned_to_s</li>
+<li>User who owns the ticket - assigned_to</li>
 <li>Labels assigned to the ticket - labels</li>
 <li>Milestone the ticket is assigned to - _milestone</li>
 <li>Last modified date - mod_date_dt</li>
 <li>Body of the ticket - text</li>
 <li>Number of ticket - ticket_num</li>
-<li>User who created the ticket - reported_by_s</li>
+<li>User who created the ticket - reported_by</li>
 <li>Status of the ticket - status</li>
 <li>Title of the ticket - summary</li>
-<li>Votes up/down of the ticket - votes_up_i/votes_down_i (if enabled in tool options)</li>
-<li>Votes total of the ticket - votes_total_i</li>
+<li>Votes up/down of the ticket - votes_up/votes_down (if enabled in tool options)</li>
+<li>Votes total of the ticket - votes_total</li>
+<li>Imported legacy id - import_id</li>
 <li>Custom field - the field name with an underscore in front, like _custom</li>
 </ul>
 <h2>Example searches</h2>