def wrapper(*args, **kwargs): page = callback(*args, **kwargs) log.warn(page['content-type']) if page['content-type'] in overrides: page['content-type'] = overrides[page['content-type']] log.warn(page['content-type']) page['data'] = BeautifulSoup(render_markup(page['data'],page['content-type'])) plugins.apply_all(kwargs['page'], page['data'], request=request, response=response, indexing=False) # TODO: normalize links, run specific plugins, etc. # Normalize legacy keywords keywords = [] for k in [u'keywords', u'tags']: if k in page['headers'].keys(): keywords.extend(page['headers'][k].split(',')) page['headers']['keywords'] = ','.join(list(set([k.strip() for k in keywords]))) # Inject any per-page CSS if u'css' not in page['headers'].keys(): page['headers']['css'] = None # clean up requested URI page['headers']['url'] = urlparse.urlunparse(( request.urlparts.scheme, request.urlparts.netloc, os.path.abspath(request.urlparts.path), None, None, None )) page['headers']['permalink'] = page['headers']['url'] + "#%s" % munge_string(page['headers']['title']) return page
def parse_mapping_page(page, transform): result = {} p = WikiController.get_page(page) if not p: log.warn("Could not load %s" % page) return result # prepare to parse only <pre> tags (so that we can have multiple maps organized by sections) soup = BeautifulSoup(render_markup(p.body, p.mime_type)) all_sections = u''.join(map(lambda t: str(t.string), soup.find_all('pre'))).strip() # now that we have the full map, let's build the schema hash for line in all_sections.split('\n'): try: (link, replacement) = line.strip().split(' ',1) result.update(transform(link, replacement)) except ValueError as e: log.warn("skipping line '%s': %s" % (line, e)) pass return result