예제 #1
0
    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)
예제 #2
0
파일: organize.py 프로젝트: sakamossan/d
    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
예제 #3
0
파일: organize.py 프로젝트: sakamossan/d
    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
예제 #4
0
파일: tests.py 프로젝트: sakamossan/d
    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)