async def attend(self, ctx, name: str): '''Allows a user to attend an upcoming event example: ?attend party ''' author = ctx.message.author.name avatar = ctx.message.author.avatar_url id = ctx.message.author.id try: count = self.session.query(Member).filter(Member.id == id).count() event = self.session.query(Event).filter(Event.name == name).first() # Verify This event exists if not event: await self.bot.say('This event does not exist') return # Create member if they do not exist in our database if count < 1: member = Member(id=id, name=author, avatar=avatar, level = 1, experience = 0) self.session.add(member) attending = Attendance(member_id=id, event_id=event.id) self.session.add(attending) self.session.commit() await self.bot.say('Member {} is now attending event {}'.format(author, name)) except Exception as e: await self.bot.say('Could not complete your command') self.logger.error(e)
def process_status_log(self, data): """:rtype: (StatusLog, bool)""" if not data.get('status') in ('off', 'work', 'wait'): raise NotOurDataException checked_at = data.get('checked_term') atnd_id = Attendance.composite_pk( data['girl_id'], to_biz_date(checked_at)) try: pk = StatusLog.composite_pk(atnd_id, checked_at) return StatusLog.find_by_pk_with_cache(pk), False except StatusLog.DoesNotExist: stat = StatusLog() stat.attendance = Attendance.find_by_pk_with_cache(atnd_id) stat.checked_at = checked_at stat.status = data['status'] self.save_or_raise(stat) return stat, True
def process_attendance(self, data): """:rtype: (Attendance, bool)""" if data.get('clock_in') is None or data.get('clock_out') is None: raise NotOurDataException try: pk = Attendance.composite_pk( data['girl_id'], to_biz_date(data['checked_term'])) return Attendance.find_by_pk_with_cache(pk), False except Attendance.DoesNotExist: atnd = Attendance() atnd.girl = Girl.find_by_pk_with_cache(data['girl_id']) atnd.date = to_biz_date(data['checked_term']) atnd.clock_in = data['clock_in'] atnd.clock_out = data['clock_out'] self.save_or_raise(atnd) return atnd, True
def test_process_attendance(self): datum = self.data[1] # exercise self.org.process_girl(datum) # first atnd, is_new = self.org.process_attendance(datum) self.assertTrue(is_new) self.assertEqual(atnd.id, '12192627-20160130') self.assertEqual(atnd.girl.id, '12192627') self.assertEqual(atnd.date, datetime.date(2016, 1, 30)) self.assertEqual(atnd.clock_in, datetime.datetime(2016, 1, 30, 18, 0, 0)) self.assertEqual(atnd.clock_out, datetime.datetime(2016, 1, 31, 2, 0, 0)) # second snd, is_not_new = self.org.process_attendance(datum) self.assertFalse(is_not_new) self.assertEqual(snd.id, '12192627-20160130') # count-inserted self.assertEqual(Attendance.count(), 1)