def send_request_message(reqs): for mid, value in reqs.items(): # store sent mids for receiving result user = User.get_key(mid).get() if user is None: key = create_user(mid) user = key.get() user.status = User.STAT_WAIT_RESULT user.status_info = value user.status_expire = utc_now()+timedelta(seconds=RESULT_TIMEOUT*60) user.put() send_message(reqs.keys(), u'昨日はお疲れさまでした。今日の様子はいかがですか?返信してくださいね!')
def send_watch_message(watches): for mid, value in watches.items(): # store sent mids for receiving replies user = User.get_key(mid).get() if user is None: key = create_user(mid) user = key.get() user.status = User.STAT_WAIT_REPLY user.status_info = value user.status_expire = utc_now()+timedelta(seconds=WATCH_REPLY_TIMEOUT*60) user.put() send_message(watches.keys(), u'楽しんでいますか?どのくらい飲みましたか?返信してくださいね!')
def send_request_message(reqs): for mid, value in reqs.items(): # store sent mids for receiving result user = User.get_key(mid).get() if user is None: key = create_user(mid) user = key.get() user.status = User.STAT_WAIT_RESULT user.status_info = value user.status_expire = utc_now() + timedelta(seconds=RESULT_TIMEOUT * 60) user.put() send_message(reqs.keys(), u'昨日はお疲れさまでした。今日の様子はいかがですか?返信してくださいね!')
def send_watch_message(watches): for mid, value in watches.items(): # store sent mids for receiving replies user = User.get_key(mid).get() if user is None: key = create_user(mid) user = key.get() user.status = User.STAT_WAIT_REPLY user.status_info = value user.status_expire = utc_now() + timedelta( seconds=WATCH_REPLY_TIMEOUT * 60) user.put() send_message(watches.keys(), u'楽しんでいますか?どのくらい飲みましたか?返信してくださいね!')
def testHistory(self): test_id = 'test' test_msgs = [u'過去の飲みは?', u'これまでの呑みを', u'今までの呑みは?', u'前の呑み'] for test_msg in test_msgs: msg = handle_message(test_id, test_msg) self.assertTrue(msg.startswith(u'まだ飲みの'), msg) user = User(id=test_id) user.put() for test_msg in test_msgs: msg = handle_message(test_id, test_msg) self.assertTrue(msg.startswith(u'過去の飲みは'), msg) user = User.get_key(test_id).get() self.assertTrue(user.history_url != None and len(user.history_url) > 0) self.assertTrue(user.history_expire < utc_now() + timedelta(minutes=HISTORY_DURATION)) sdt = utc_now() + timedelta(days=-2) check_sdt = [] for i in range(MAX_HISTORY + 1): watches = [] for j in range(WATCH_COUNTS): watches.append( Watch(date=sdt + timedelta(minutes=WATCH_INTERVAL * (i + 1)))) key = test_id + sdt.strftime('%Y%m%d%H%M') drinking = Drinking(id=key, mid=test_id, start_date=sdt, watches=watches) drinking.put() check_sdt.append( format_jdate(sdt.replace(tzinfo=tz_utc).astimezone(tz_jst))) sdt = sdt + timedelta(days=-1) self.assertEqual(get_drinking_history_content(user.history_url[:-1]), None) soup = BeautifulSoup(get_drinking_history_content(user.history_url), 'html.parser') trs = soup.body.div.table.tbody.findAll('tr') self.assertEqual(len(trs), MAX_HISTORY * 2) for i in range(MAX_HISTORY): self.assertEqual(trs[i * 2].td.text, check_sdt[i])
def get_status(user_id, is_peek=False): mid = user_id now = utc_now() user = User.get_key(mid).get() if user is None or user.status == User.STAT_NONE: return (User.STAT_NONE, None) else: status = user.status expire = user.status_expire info = user.status_info if is_peek == False: user.status = User.STAT_NONE user.put() if expire < now: # expired return (User.STAT_NONE, None) return (status, info)
def get_status(user_id, is_peek=False): mid = user_id now = utc_now() user = User.get_key(mid).get() if user is None or user.status == User.STAT_NONE: return (User.STAT_NONE, None) else: status = user.status expire = user.status_expire info = user.status_info if is_peek == False: user.status = User.STAT_NONE user.put() if expire < now: # expired return (User.STAT_NONE, None) return (status, info)
def history_drinking(mid): worst_drinking = get_worst_dinking(mid) history_url = generate_random_url(mid) user = User.get_key(mid).get() if history_url is None or user is None: return u'まだ飲みの登録がないか、参照が行えません' user.history_url = history_url user.history_expire = utc_now()+timedelta(minutes=HISTORY_DURATION) user.put() msg = '' if worst_drinking: msg += u'最悪の飲みは %s だったようです。\n' % \ (format_jdate(worst_drinking.start_date. replace(tzinfo=tz_utc).astimezone(tz_jst))) for kind in worst_drinking.summary: msg += u' %s %d 杯\n' % (kind, worst_drinking.summary[kind]) msg += '\n' url = service_url + '/history/' + history_url return msg + u'過去の飲みは %s を参照ください。このURLは%d分間有効です。' % (url, HISTORY_DURATION)
def history_drinking(mid): worst_drinking = get_worst_dinking(mid) history_url = generate_random_url(mid) user = User.get_key(mid).get() if history_url is None or user is None: return u'まだ飲みの登録がないか、参照が行えません' user.history_url = history_url user.history_expire = utc_now() + timedelta(minutes=HISTORY_DURATION) user.put() msg = '' if worst_drinking: msg += u'最悪の飲みは %s だったようです。\n' % \ (format_jdate(worst_drinking.start_date. replace(tzinfo=tz_utc).astimezone(tz_jst))) for kind in worst_drinking.summary: msg += u' %s %d 杯\n' % (kind, worst_drinking.summary[kind]) msg += '\n' url = service_url + '/history/' + history_url return msg + u'過去の飲みは %s を参照ください。このURLは%d分間有効です。' % (url, HISTORY_DURATION)