#from pylons import request, response, session, url, tmpl_context as c #from pylons.controllers.util import abort, redirect import datetime from flask import request, abort import paginate import sqlalchemy as sa import wrpylib.wrmwmarkup import wrpylib.wrmwcache import wrpylib.mwmarkup import wradmin.model as model from wradmin.genshi import render_genshi_template, TemplateContext # class RequireDateIfUserDefined(formencode.validators.FormValidator): # "requires that date_userdefined is not empty if date_invalid == 'userdefined'" # def _to_python(self, value_dict, state): # # if not value_dict.get('date_invalid'): ... # This is _not_ checked because this should be checked elsewhere # if value_dict.get('date_invalid') == 'userdefined' and not value_dict.get('date_userdefined'): # value = value_dict.get('date_userdefined') # raise formencode.Invalid('Es muss ein Wert eingegeben werden', value, state, error_dict={'date_userdefined': formencode.Invalid(self.message('empty', state), value, state)}) # return value_dict # # # class ChangeDateInvalidForm(formencode.Schema): # allow_extra_fields = True # filter_extra_fields = True # date_invalid = formencode.validators.OneOf(['no_change', 'tomorrow', 'one_week', 'two_weeks', 'one_week_more', 'end_of_saison', 'now', 'userdefined'], not_empty=True) # date_userdefined = wrpylib.wrvalidators.DateTimeNoSec # chained_validators = [RequireDateIfUserDefined()] class BerichtController: def _add_dates_to_c(self, c, date_invalid): now = datetime.datetime.today() if date_invalid is None: date_invalid = now c.date_now = now c.date_no_change = date_invalid c.date_tomorrow = now + datetime.timedelta(1) c.date_one_week = now + datetime.timedelta(7) c.date_two_weeks = now + datetime.timedelta(14) c.date_one_week_more = date_invalid + datetime.timedelta(7) c.date_end_of_saison = datetime.datetime(now.year if now.month < 7 else now.year + 1, 7, 1) def view(self, id): """Displays a report""" q = model.meta.Session.query(model.WrReport) c = TemplateContext() c.wrreport = q.get(id) if c.wrreport is None: abort(404) self._add_dates_to_c(c, c.wrreport.date_invalid) return render_genshi_template('bericht_view.html', c=c) #@restrict('POST') #@validate(schema=ChangeDateInvalidForm(), form='view') def change_date_invalid(self, id=None): if id is None: abort(404) wrreport_q = model.meta.Session.query(model.WrReport) wrreport = wrreport_q.get(id) if wrreport is None: abort(404) self._add_dates_to_c(c, wrreport.date_invalid) date = self.form_result['date_invalid'] if date == 'tomorrow': wrreport.date_invalid = c.date_tomorrow elif date == 'one_week': wrreport.date_invalid = c.date_one_week elif date == 'two_weeks': wrreport.date_invalid = c.date_two_weeks elif date == 'one_week_more': wrreport.date_invalid = c.date_one_week_more elif date == 'end_of_saison': wrreport.date_invalid = c.date_end_of_saison elif date == 'now': wrreport.date_invalid = c.date_now elif date == 'userdefined': wrreport.date_invalid = self.form_result['date_userdefined'] model.meta.Session.commit() session['flash'] = 'Datum wurde erfolgreich geƤndert' session.save() return redirect(url(controller='bericht', action='view', id=id)) def list(self): """Lists all reports""" q = model.meta.Session.query(model.WrReport) q = q.order_by(sa.sql.expression.desc(model.WrReport.id)) c = TemplateContext() c.paginator = paginate.Page(q.all(), page=int(request.args.get('page', 1)), items_per_page = 25) return render_genshi_template('bericht_list.html', c=c)