add utc tzinfo for start_ts when not provided
authorymh <ymh.work@gmail.com>
Wed, 22 Oct 2014 08:53:33 +0200
changeset 52 86d805a56843
parent 51 7792f095d94a
child 53 7e3156578f28
add utc tzinfo for start_ts when not provided
annot-server/webapp/admin.py
--- a/annot-server/webapp/admin.py	Wed Oct 22 01:52:52 2014 +0200
+++ b/annot-server/webapp/admin.py	Wed Oct 22 08:53:33 2014 +0200
@@ -6,6 +6,8 @@
 import json
 import urllib
 
+from dateutil.tz import tzutc
+
 from flask.ext.admin import Admin
 from flask.ext.admin.contrib.sqla import ModelView
 from flask.ext.admin.contrib.sqla.form import AdminModelConverter
@@ -76,13 +78,27 @@
         if valuelist:
             self.data = json.loads(valuelist[0])
         else:
-            self.data = '{}'
+            self.data = None
+
 
 class JsonAdminConverter(AdminModelConverter):
     @converts('JSON')
     def conv_JSON(self, field_args, **extra):
         return DictToJSONField(**field_args)
 
+
+class StartTSField(dateutil_fields.DateTimeField):
+    def __init__(self, *args, **kwargs):
+        if 'display_format' not in kwargs:
+            kwargs['display_format']='%Y-%m-%dT%H:%M:%S.%f%z'
+        super(StartTSField, self).__init__(*args, **kwargs)
+
+    def process_formdata(self, valuelist):
+        super(StartTSField, self).process_formdata(valuelist)
+        if self.data and self.data.tzinfo is None:
+            self.data = self.data.replace(tzinfo=tzutc())
+
+
 class EventSessionView(ModelView):
 
     column_default_sort = ( models.Event.code, True)
@@ -91,10 +107,7 @@
     column_list = ('event', 'project_id', 'order', 'categories_json', 'url')
     column_filters = ('event',)
     column_formatters = {'url': build_ldt_url, 'categories_json': lambda v, c, m, p: json.dumps(m.categories_json)[:80] if m.categories_json else ''}
-    form_args = {
-        "start_ts":{ "display_format": '%Y-%m-%dT%H:%M:%S.%f%z'},
-    }
-    form_overrides = { "start_ts": dateutil_fields.DateTimeField, }
+    form_overrides = { "start_ts": StartTSField, }
     form_widget_args = {
         'categories_json': {
             'rows': 10,