Example #1
0
 def _format_link(self, formatter, ns, target, label, fullmatch):
     link, params, fragment = formatter.split_link(target)
     expr = link.split(':', 1)
     if ns == 'product' and len(expr) == 1:
         # product:prefix form
         return self._render_link(formatter.context, None, label,
                                  params + fragment, expr[0])
     elif ns == 'global' or (ns == 'product' and expr[0] == ''):
         # global scope
         sublink = link if ns == 'global' else expr[1]
         target_env = self.env.parent \
                         if isinstance(self.env, ProductEnvironment) \
                         else self.env
         return self._make_sublink(target_env, sublink, formatter, ns,
                                   target, label, fullmatch,
                                   extra=params + fragment)
     else:
         # product:prefix:realm:id:...
         prefix, sublink = expr
         try:
             target_env = lookup_product_env(self.env, prefix)
         except LookupError:
             return tag.a(label, class_='missing product')
         # TODO: Check for nested product links
         # e.g. product:p1:product:p2:ticket:1
         return self._make_sublink(target_env, sublink, formatter, ns,
                                   target, label, fullmatch,
                                   extra=params + fragment)
Example #2
0
 def _format_link(self, formatter, ns, target, label, fullmatch):
     link, params, fragment = formatter.split_link(target)
     expr = link.split(':', 1)
     if ns == 'product' and len(expr) == 1:
         # product:prefix form
         return self._render_link(formatter.context, None, label,
                                  params + fragment, expr[0])
     elif ns == 'global' or (ns == 'product' and expr[0] == ''):
         # global scope
         sublink = link if ns == 'global' else expr[1]
         target_env = self.env.parent \
                         if isinstance(self.env, ProductEnvironment) \
                         else self.env
         return self._make_sublink(target_env, sublink, formatter, ns,
                                   target, label, fullmatch,
                                   extra=params + fragment)
     else:
         # product:prefix:realm:id:...
         prefix, sublink = expr
         try:
             target_env = lookup_product_env(self.env, prefix)
         except LookupError:
             return tag.a(label, class_='missing product')
         # TODO: Check for nested product links
         # e.g. product:p1:product:p2:ticket:1
         return self._make_sublink(target_env, sublink, formatter, ns,
                                   target, label, fullmatch,
                                   extra=params + fragment)
Example #3
0
 def _get_ticket_href(self, prefix, tid):
     try:
         env = lookup_product_env(self.env, prefix)
     except LookupError:
         return '#invalid-product-' + prefix
     else:
         href = resolve_product_href(env, self.env)
         return href.ticket(tid)
Example #4
0
 def _get_ticket_href(self, prefix, tid):
     try:
         env = lookup_product_env(self.env, prefix)
     except LookupError:
         return '#invalid-product-' + prefix
     else:
         href = resolve_product_href(env, self.env)
         return href.ticket(tid)
Example #5
0
 def _render_list(self, req):
     """products list"""
     products = [p for p in Product.select(self.env)
                 if 'PRODUCT_VIEW' in req.perm(Neighborhood('product',
                                                            p.prefix))]
     map(lambda p: setattr(p, 'href', resolve_product_href(
         lookup_product_env(self.env, p.prefix), self.env)), products)
     data = {'products': products,
             'context': web_context(req, Resource('product', None))}
     return 'product_list.html', data, None
Example #6
0
 def manager_exists(self, neighborhood):
     """Check whether the target environment exists physically.
     """
     if neighborhood._realm == 'global':
         # Global environment
         return isinstance(self.env, (Environment, ProductEnvironment))
     elif neighborhood._realm == 'product':
         prefix = neighborhood._id
         if not prefix:
             # Global environment
             return True
         return Product(lookup_product_env(self.env, GLOBAL_PRODUCT),
                        {'prefix' : prefix})._exists
Example #7
0
 def manager_exists(self, neighborhood):
     """Check whether the target environment exists physically.
     """
     if neighborhood._realm == 'global':
         # Global environment
         return isinstance(self.env, (Environment, ProductEnvironment))
     elif neighborhood._realm == 'product':
         prefix = neighborhood._id
         if not prefix:
             # Global environment
             return True
         return Product(lookup_product_env(self.env, GLOBAL_PRODUCT),
                        {'prefix' : prefix})._exists
Example #8
0
 def load_manager(self, neighborhood):
     """Load global environment or product environment given its prefix
     """
     if neighborhood._realm == 'global':
         # FIXME: ResourceNotFound if neighborhood ID != None ?
         prefix = GLOBAL_PRODUCT
     elif neighborhood._realm == 'product':
         prefix = neighborhood._id
     else:
         raise ResourceNotFound(_(u'Unsupported neighborhood %(realm)s',
                                  realm=neighborhood._realm))
     try:
         return lookup_product_env(self.env, prefix)
     except LookupError:
         raise ResourceNotFound(_(u'Unknown product prefix %(prefix)s',
                                  prefix=prefix))
Example #9
0
 def _render_list(self, req):
     """products list"""
     products = [
         p for p in Product.select(self.env)
         if 'PRODUCT_VIEW' in req.perm(Neighborhood('product', p.prefix))
     ]
     map(
         lambda p: setattr(
             p, 'href',
             resolve_product_href(lookup_product_env(self.env, p.prefix),
                                  self.env)), products)
     data = {
         'products': products,
         'context': web_context(req, Resource('product', None))
     }
     return 'product_list.html', data, None
Example #10
0
 def load_manager(self, neighborhood):
     """Load global environment or product environment given its prefix
     """
     if neighborhood._realm == 'global':
         # FIXME: ResourceNotFound if neighborhood ID != None ?
         prefix = GLOBAL_PRODUCT
     elif neighborhood._realm == 'product':
         prefix = neighborhood._id
     else:
         raise ResourceNotFound(_(u'Unsupported neighborhood %(realm)s',
                                  realm=neighborhood._realm))
     try:
         return lookup_product_env(self.env, prefix)
     except LookupError:
         raise ResourceNotFound(_(u'Unknown product prefix %(prefix)s',
                                  prefix=prefix))
Example #11
0
 def ticket_anchor(ticket):
     try:
         pvalue = ticket.get('product') or GLOBAL_PRODUCT
         envhref = hrefcache[pvalue]
     except KeyError:
         try:
             env = lookup_product_env(self.env, prefix= pvalue,
                                      name=pvalue)
         except LookupError:
             return tag.a('#%s' % ticket['id'], 
                          class_='missing product')
         hrefcache[pvalue] = envhref = resolve_product_href(
                  to_env=env, at_env=self.env)
     return tag.a('#%s' % ticket['id'],
                  class_=ticket['status'],
                  href=envhref.ticket(int(ticket['id'])),
                  title=shorten_line(ticket['summary']))
Example #12
0
 def _get_ticket_href(self, prefix, tid):
     env = lookup_product_env(self.env, prefix)
     href = resolve_product_href(env, self.env)
     return href.ticket(tid)