Exemple #1
0
    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)
Exemple #2
0
 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