From 00f1ff9f8a1f853ca1a009a9382b00ae644bfdb8 Mon Sep 17 00:00:00 2001 From: Matt Singleton Date: Mon, 1 Feb 2021 09:31:55 -0600 Subject: checkpoint --- gemini.py | 16 ++++++++++++++-- 1 file changed, 14 insertions(+), 2 deletions(-) (limited to 'gemini.py') diff --git a/gemini.py b/gemini.py index 9856449..c3ece46 100644 --- a/gemini.py +++ b/gemini.py @@ -8,7 +8,7 @@ def htmlescape(text: str) -> str: def gem2html(gem: str) -> str: html = [] - html.append(''.format(css=open('style.css').read())) + html.append('\n') state = 'text' blanklines = 0 for line in gem.split('\n'): @@ -69,6 +69,7 @@ def gem2html(gem: str) -> str: html.append('

{}

'.format(line[1:].lstrip())) else: html.append('

{}

'.format(htmlescape(line))) + html.append('\n') return '\n'.join(html) def urljoin(base: str, url: str) -> str: @@ -90,6 +91,16 @@ def get(url: str, follow_redirects: bool = True) -> dict: response = _get(response['meta']) return response +def _parse_meta(meta: str) -> dict: + mime, _, params_text = meta.lower().strip().partition(';') + params = {} + if params_text.strip(): + for param in params_text.split(';'): + k, val = param.split('=') + params[k.strip()] = val.strip() + params['mime'] = mime.strip() + return params + def _get(url: str) -> dict: url_parts = urllib.parse.urlsplit(url) if len(url_parts.path) == 0: @@ -118,9 +129,10 @@ def _get(url: str) -> dict: 'status': status, 'meta': meta.strip(), } + meta_params = _parse_meta(meta) body = fp.read() return { 'status': status, 'meta': meta.strip(), - 'body': body.decode('utf8'), + 'body': body.decode(meta_params.get('charset', 'utf8')), } -- cgit v1.2.3