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() ]