Mercurial > hg > bitsyblog
view bitsyblog/utils.py @ 113:8f30c2f702bc
py3
author | Jeff Hammel <k0scist@gmail.com> |
---|---|
date | Tue, 03 Nov 2020 14:07:56 -0800 |
parents | e5a23f5ea14e |
children | 73434c2db108 |
line wrap: on
line source
"""utlity functions for bitsyblog""" import cgi import datetime import os import urllib import urllib2 import docutils import docutils.core from docutils.utils import SystemMessage # format to uniquely label blog posts timeformat = ( 'YYYY', 'MM', 'DD', 'HH', 'MM', 'SS' ) timestamp = '%Y%m%d%H%M%S' # strftime representation def ReST2html(string): """renders a string with restructured text""" settings = { 'report_level': 5 } string = string.strip() try: parts = docutils.core.publish_parts(string, writer_name='html', settings_overrides=settings) body = parts['body'] except (SystemMessage, UnicodeError) as e: lines = [ cgi.escape(i.strip()) for i in string.split('\n') ] body = '<br/>\n'.join(lines) return body def validate_css(css): """use a webservice to determine if the argument is valid css""" url = 'http://jigsaw.w3.org/css-validator/validator?text=%s' url = url % urllib.quote_plus(css) foo = urllib2.urlopen(url) text = foo.read() return not 'We found the following errors' in text # XXX hacky def date(datestamp): datestamp = os.path.split(datestamp)[-1] retval = [] for i in timeformat: retval.append(int(datestamp[:len(i)])) datestamp = datestamp[len(i):] return datetime.datetime(*retval) def datestamp(date=None): if isinstance(date, float): date = datetime.datetime.fromtimestamp(date) if date is None: date = datetime.datetime.now() return date.strftime(timestamp)