Author: astaric
Date: Wed Sep 25 11:29:51 2013
New Revision: 1526159
URL: http://svn.apache.org/r1526159
Log:
Support #product-ticket_id syntax when adding relations.
Only non standard ways of specifying ticekts from different prouct
were supported before. (product_prefix:ticket:ticket_id)
Modified:
bloodhound/trunk/bloodhound_relations/bhrelations/api.py
bloodhound/trunk/bloodhound_relations/bhrelations/tests/api.py
Modified: bloodhound/trunk/bloodhound_relations/bhrelations/api.py
URL:
http://svn.apache.org/viewvc/bloodhound/trunk/bloodhound_relations/bhrelations/api.py?rev=1526159&r1=1526158&r2=1526159&view=diff
==============================================================================
--- bloodhound/trunk/bloodhound_relations/bhrelations/api.py (original)
+++ bloodhound/trunk/bloodhound_relations/bhrelations/api.py Wed Sep 25
11:29:51 2013
@@ -561,23 +561,31 @@ class TicketRelationsSpecifics(Component
def find_ticket(self, ticket_spec):
ticket = None
- m = re.match(r'#?(?P<tid>\d+)', ticket_spec)
+ m = re.match(r'#?(?:(?P<pid>[^-]+)-)?(?P<tid>\d+)', ticket_spec)
if m:
+ pid = m.group('pid')
tid = m.group('tid')
- try:
- ticket = Ticket(self.env, tid)
- except ResourceNotFound:
- # ticket not found in current product, try all other products
- for p in Product.select(self.env):
- if p.prefix != self.env.product.prefix:
- # TODO: check for PRODUCT_VIEW permissions
- penv = ProductEnvironment(self.env.parent, p.prefix)
- try:
- ticket = Ticket(penv, tid)
- except ResourceNotFound:
- pass
- else:
- break
+ if pid:
+ try:
+ env = ProductEnvironment(self.env.parent, pid)
+ ticket = Ticket(env, tid)
+ except:
+ pass
+ else:
+ try:
+ ticket = Ticket(self.env, tid)
+ except ResourceNotFound:
+ # ticket not found in current product, try all other
products
+ for p in Product.select(self.env):
+ if p.prefix != self.env.product.prefix:
+ # TODO: check for PRODUCT_VIEW permissions
+ penv = ProductEnvironment(self.env.parent,
p.prefix)
+ try:
+ ticket = Ticket(penv, tid)
+ except ResourceNotFound:
+ pass
+ else:
+ break
# ticket still not found, use fallback for <prefix>:ticket:<id> syntax
if ticket is None:
Modified: bloodhound/trunk/bloodhound_relations/bhrelations/tests/api.py
URL:
http://svn.apache.org/viewvc/bloodhound/trunk/bloodhound_relations/bhrelations/tests/api.py?rev=1526159&r1=1526158&r2=1526159&view=diff
==============================================================================
--- bloodhound/trunk/bloodhound_relations/bhrelations/tests/api.py (original)
+++ bloodhound/trunk/bloodhound_relations/bhrelations/tests/api.py Wed Sep 25
11:29:51 2013
@@ -496,6 +496,42 @@ class ApiTestCase(BaseRelationsTestCase)
self.relations_system.add(t1, t2, "refersto")
self.relations_system.add(t2, t1, "refersto")
+ def test_can_find_ticket_by_id_from_same_env(self):
+ """ Can find ticket given #id"""
+ product2 = "tp2"
+ self._load_product_from_data(self.global_env, product2)
+ p2_env = ProductEnvironment(self.global_env, product2)
+ t1 = self._insert_and_load_ticket_with_env(p2_env, "T1")
+ trs = TicketRelationsSpecifics(p2_env)
+
+ ticket = trs.find_ticket("#%d" % t1.id)
+
+ self.assertEqual(ticket.id, 1)
+
+ def test_can_find_ticket_by_id_from_different_env(self):
+ """ Can find ticket from different env given #id"""
+ product2 = "tp2"
+ self._load_product_from_data(self.global_env, product2)
+ p2_env = ProductEnvironment(self.global_env, product2)
+ t1 = self._insert_and_load_ticket_with_env(p2_env, "T1")
+ trs = TicketRelationsSpecifics(self.env)
+
+ ticket = trs.find_ticket("#%d" % t1.id)
+
+ self.assertEqual(ticket.id, 1)
+
+ def test_can_find_ticket_by_product_and_id(self):
+ """ Can find ticket given #prefix-id"""
+ product2 = "tp2"
+ self._load_product_from_data(self.global_env, product2)
+ p2_env = ProductEnvironment(self.global_env, product2)
+ t1 = self._insert_and_load_ticket_with_env(p2_env, "T1")
+ trs = TicketRelationsSpecifics(self.env)
+
+ ticket = trs.find_ticket("#%s-%d" % (product2, t1.id))
+
+ self.assertEqual(ticket.id, 1)
+
class RelationChangingListenerTestCase(BaseRelationsTestCase):
def test_can_sent_adding_event(self):