Mercurial > hg > bitsyblog
diff bitsyblog/settings.py @ 0:e3823be6a423
initial commit of bitsyblog, from https://svn.openplans.org/svn/standalone/bitsyblog/trunk/
author | k0s <k0scist@gmail.com> |
---|---|
date | Sat, 12 Sep 2009 16:06:57 -0400 |
parents | |
children | e54a6405a496 |
line wrap: on
line diff
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/bitsyblog/settings.py Sat Sep 12 16:06:57 2009 -0400 @@ -0,0 +1,62 @@ +"""user settings / preferences""" + +import parser # dateutils.parser with mods to retain strftime format +import urllib2 +import utils + +class InvalidSettingError(Exception): + """error when trying to validate a setting""" + +class Setting(object): + def __init__(self, name, value=None): + self.name = name + self.value = value + self.error_message = 'Invalid value for %s' % name + + def validator(self, value): + return True + + def set(self, value): + if not self.validator(value): + raise InvalidSettingError(self.error_message) + self.value = value + +class DateFormat(Setting): + def __init__(self): + Setting.__init__(self, 'Date format') + + def set(self, format): + value = parser.parser()._parse(format) + if value: + self.value = value.format + else: + raise InvalidSettingError('unrecognized date format: %s' % format) + + +class CSSFile(Setting): + def __init__(self): + Setting.__init__(self, 'CSS file') + + def set(self, value): + if not hasattr(value, 'file'): + return True # blank set: don't do anything + css = value.file.read() + try: + validcss = utils.validate_css(css) + except urllib2.URLError: + raise InvalidSettingError('Could not validate CSS (sorry!)') + if not validcss: + raise InvalidSettingError('%s is not valid css' % filename) + filename = value.filename + if not filename.endswith('.css'): + filename = '%s.css' % filename + self.value = dict(filename=filename, css=css) + +user = [ DateFormat(), + Setting('Subject'), + Setting('Friends'), + Setting('Stylesheet'), + ] + +form = user[:] +form += [ CSSFile() ]