def _parse_specline(self, specline): """Given a bytestring, return a two-tuple. The incoming string is expected to be of the form: media_type via renderer The renderer is optional. It will be computed based on media type if absent. The return two-tuple contains a render function and a media type (as unicode). SyntaxError is raised if there aren't one or two parts or if either of the parts is malformed. If only one part is passed in it's interpreted as a media type. """ # Parse into parts parts = parse_specline(specline) #Assign parts media_type, renderer = parts if renderer == '': renderer = self.website.default_renderers_by_media_type[media_type] # Validate media type. if media_type_re.match(media_type) is None: msg = ("Malformed media type %s in specline %s. It must match " "%s.") msg %= (media_type, specline, media_type_re.pattern) raise SyntaxError(msg) # Hydrate and validate renderer. make_renderer = self._get_renderer_factory(media_type, renderer) # Return. return (make_renderer, media_type)
def compile_email_spt(fpath): r = {} with open(fpath) as f: pages = list(split_and_escape(f.read())) for i, page in enumerate(pages, 1): tmpl = b'\n' * page.offset + page.content content_type, renderer = parse_specline(page.header) key = 'subject' if i == 1 else content_type r[key] = SimplateLoader(fpath, tmpl).load(jinja_env, fpath) return r
def extract_spt(fileobj, *args, **kw): pages = list(split_and_escape(fileobj.read())) npages = len(pages) for i, page in enumerate(pages, 1): f = BytesIO(b'\n' * page.offset + page.content) content_type, renderer = parse_specline(page.header) extractor = None if (i == npages and not page.header) or content_type == 'text/html' or renderer == 'jinja2': extractor = jinja2.ext.babel_extract elif i < 3: extractor = extract_python if extractor: for match in extractor(f, *args, **kw): yield match
def extract_spt(fileobj, *args, **kw): pages = list(split_and_escape(fileobj.read())) npages = len(pages) for i, page in enumerate(pages, 1): f = BytesIO(b'\n' * page.offset + page.content) content_type, renderer = parse_specline(page.header) extractor = None if (i == npages and not page.header) or content_type in ('text/html', 'text/plain'): extractor = jinja2.ext.babel_extract elif i < 3: extractor = extract_python if extractor: for match in extractor(f, *args, **kw): yield match
def _parse_specline(self, specline): """Override to simplify. Rendered resources have a simpler specline than negotiated resources. They don't have a media type, and the renderer is optional. """ #parse into parts. parts = parse_specline(specline) #Assign parts, discard media type renderer = parts[1] media_type = self.media_type if not renderer: renderer = self.website.default_renderers_by_media_type[media_type] #Hydrate and validate renderer make_renderer = self._get_renderer_factory(media_type, renderer) return (make_renderer, media_type)
def check_specline(header, media_type, renderer): assert pagination.parse_specline(header) == (media_type, renderer)