def register_smoke(self, **kw): """Try to add the smoking data.""" error = False try: parse_date = datetime.strptime(kw['date'], '%Y-%m-%d %H:%M:%S') except ValueError: kw['error.date'] = 'Date must be in format YYYY-MM-DD HH:MM:SS' error = True if kw.get('nosmoke'): # This is a nonsmoking event # Sanity Check: unsmoke should not occurr on a day with a # registered smoke, or on a day with and existing unsmoke. today = parse_date.date() tomorrow = today + timedelta(days=1) unsmoke = DBSession.query(Unsmoke.date) \ .filter_by(user=request.identity['repoze.who.userid']) \ .filter_by(date=today).all() smoke = DBSession.query(Cigarette.date) \ .filter_by(user=request.identity['repoze.who.userid']) \ .filter(Cigarette.date.between(today, tomorrow)).all() if smoke: flash("You already registered a smoke for {}".format(today), 'error') redirect('/smoke', params=kw) elif unsmoke: flash("You already marked {} as a non-smoking day.".format(today), 'info') redirect('/smoke', params=kw) else: smoke_data = Unsmoke() smoke_data.date = parse_date.date() else: # If there exists an unsmoke for today, probably best to delete it? unsmoke = DBSession.query(Unsmoke) \ .filter_by(user=request.identity['repoze.who.userid']) \ .filter_by(date=parse_date.date()).all() for event in unsmoke: DBSession.delete(event) DBSession.flush() smoke_data = Cigarette() smoke_data.date = parse_date smoke_data.submit_date = datetime.now() if kw['justification']: smoke_data.justification = kw['justification'] else: kw['error.justification'] = 'justification is required' error = True if not error: smoke_data.user = request.identity['repoze.who.userid'] DBSession.add(smoke_data) redirect('/') else: redirect('/smoke', params=kw)
def setUp(self): """Prepare model test fixture.""" try: new_attrs = {} new_attrs.update(self.attrs) new_attrs.update(self.do_get_dependencies()) self.obj = self.klass(**new_attrs) DBSession.add(self.obj) DBSession.flush() return self.obj except: DBSession.rollback() raise