def test_process_status_log(self): datum = self.data[2] # exercise self.org.process_girl(datum) self.org.process_attendance(datum) # first stat, is_new = self.org.process_status_log(datum) self.assertTrue(is_new) self.assertEqual(stat.id, '8907484-20160130-164000') self.assertEqual(stat.attendance.id, '8907484-20160130') self.assertEqual(stat.checked_at, datetime.datetime(2016, 1, 30, 16, 40, 0)) self.assertEqual(stat.status, 'off') # second snd, is_not_new = self.org.process_status_log(datum) self.assertFalse(is_not_new) self.assertEqual(snd.id, '8907484-20160130-164000') # count-inserted self.assertEqual(StatusLog.count(), 1) # abnormal null_status = copy.copy(datum) del null_status['status'] self.assertRaises(NotOurDataException, self.org.process_status_log, null_status)
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