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/10/03 18:31:08 UTC
[1/4] git commit: [#4968] provide pluggable ticket import_id converter
Updated Branches:
refs/heads/db/4968 f95299bd5 -> 1b05b99d3 (forced update)
[#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/1b05b99d
Tree: http://git-wip-us.apache.org/repos/asf/incubator-allura/tree/1b05b99d
Diff: http://git-wip-us.apache.org/repos/asf/incubator-allura/diff/1b05b99d
Branch: refs/heads/db/4968
Commit: 1b05b99d35e8fa02497b192db3cdbc202200cbc9
Parents: deb58da
Author: Dave Brondsema <db...@geek.net>
Authored: Tue Oct 2 19:53:11 2012 +0000
Committer: Dave Brondsema <db...@geek.net>
Committed: Wed Oct 3 16:30:54 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/1b05b99d/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/1b05b99d/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/1b05b99d/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/1b05b99d/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/1b05b99d/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>