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)
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)
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
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
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))
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
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']))
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)