def _get_help_href(self, req): if not self.help_opt: return None link = resource_id = None if self.help_opt.startswith('/'): # Assume valid URL to arbitrary resource inside # of the current Trac environment. link = req.href(self.help_opt) if not link and ':' in self.help_opt: realm, resource_id = self.help_opt.split(':', 1) # Validate realm-like prefix against resource realm list, # but exclude 'wiki' to allow deferred page creation. rsys = ResourceSystem(self.env) if realm in set(rsys.get_known_realms()) - set('wiki'): mgr = rsys.get_resource_manager(realm) # Handle optional IResourceManager method gracefully. try: if mgr.resource_exists(Resource(realm, resource_id)): link = mgr.get_resource_url(resource_id, req.href) except AttributeError: # Assume generic resource URL build rule. link = req.href(realm, resource_id) if not link: if not resource_id: # Assume wiki page name for backwards-compatibility. resource_id = self.help_opt if '#' in resource_id: path, anchor = resource_id.split('#', 1) anchor = unicode_quote_plus(anchor, safe="?!~*'()") link = '#'.join((req.href.wiki(path), anchor)) else: link = req.href.wiki(resource_id) return link
def resource_from_page(env, page): resource_realm = None resources = ResourceSystem(env) for realm in resources.get_known_realms(): if page.startswith('/' + realm): resource_realm = realm break if resource_realm is not None: return (resource_realm, re.sub('/' + resource_realm, '', page).lstrip('/')) else: return page, None
def resource_from_page(env, page): resource_realm = None resources = ResourceSystem(env) for realm in resources.get_known_realms(): if page.startswith('/' + realm): resource_realm = realm break if resource_realm is not None: return (resource_realm, re.sub('/' + resource_realm, '', page).lstrip('/')) else: return page, None
def _get_helppage_link(self, req): link = realm = resource_id = None if self.helppage_opt.startswith('/'): # Assume valid URL to arbitrary resource inside # of the current Trac environment. link = req.href(self.helppage_opt) if not link and ':' in self.helppage_opt: realm, resource_id = self.helppage_opt.split(':', 1) # Validate realm-like prefix against resource realm list, # but exclude 'wiki' to allow deferred page creation. rsys = ResourceSystem(self.env) if realm in set(rsys.get_known_realms()) - set('wiki'): mgr = rsys.get_resource_manager(realm) # Handle optional IResourceManager method gracefully. try: if mgr.resource_exists(Resource(realm, resource_id)): link = mgr.get_resource_url(resource_id, req.href) except AttributeError: # Assume generic resource URL build rule. link = req.href(realm, resource_id) if not link: if not resource_id: # Assume wiki page name for backwards-compatibility. resource_id = self.helppage_opt # Preserve anchor without 'path_safe' arg (since Trac 0.12.2dev). if '#' in resource_id: path, anchor = resource_id.split('#', 1) else: anchor = None path = resource_id if hasattr(unicode_quote_plus, "safe"): # Use method for query string quoting (since Trac 0.13dev). anchor = unicode_quote_plus(anchor, safe="?!~*'()") else: anchor = unicode_quote_plus(anchor) link = '#'.join([req.href.wiki(path), anchor]) return link