def email_digest(): timezone = pytz.timezone('US/Eastern') date = doneit.timezone.localize(datetime.datetime.now().replace(hour=0,minute=0,second=0,microsecond=0)) # midnight today doneit.log("Sending digest for %s at %s" % (request.forms.get('name'), request.forms.get('email'))) r = requests.get("%s/%s?date=%s" % (doneit.digest_composition_service_url, request.forms.get('project_id'), date.strftime(doneit.date_format_url))) tasks = r.json['tasks'] to = request.forms.get('email') subject = "Daily digest for %s" % doneit.get_by_id('projects', request.forms.get('project_id'))['name'] body = [] body.append("Project status as of %s\n\n" % datetime.datetime.now().strftime(doneit.date_format_digest)) for task_type in tasks: body.append("%s:\n" % task_type.title()) task_list = json_util.loads(r.json['tasks'][task_type]) if len(task_list) > 0: for task in task_list: user = doneit.get_by_id('users', task['user_id']) body.append("%s %s - %s\n" % (u'\u2022', task['comment'], user['name'])) else: body.append("%s None\n" % (u'\u2022')) body.append('\n') sign(body) body = ''.join(body) doneit.send_email(to, subject, body)
def main(): message = email.message_from_string(sys.stdin.read()) doneit.log("Got email from %s" % message['From']) user = get_user(message) project = get_project(message) tasks = get_tasks(message) if (user == None) or (project == None) or (tasks == None): send_error_reply(message) return for task in tasks: entity = dict() entity['date'] = datetime.datetime.utcnow() entity['user_id'] = user['_id'] entity['project_id'] = project["_id"] for field in ['type', 'comment']: entity[field] = task[field] doneit.log("Submit Task: %s, %s, %s, %s" % (user['email'], project['name'], task['type'], task['comment'])) r = requests.post(doneit.entry_input_service_url + "/task", entity) if r.json['status'] != "success": send_error_reply(message) return
def email_reminder(): doneit.log("Sending reminder for %s at %s" % (request.forms.get('name'), request.forms.get('email'))) project = doneit.get_by_id('projects', request.forms.get('project_id')) to = request.forms.get('email') subject = "Daily reminder for %s" % project['name'] body = [] body.append("Please remember to provide your status for %s.\n" % project['name']) sign(body) body = ''.join(body) doneit.send_email(to, subject, body)
def digest_composition(project_id): project = doneit.get_by_id('projects', project_id) timezone = pytz.timezone('US/Eastern') if request.query.date: date = doneit.timezone.localize(datetime.datetime.fromtimestamp(time.mktime(time.strptime(request.query.date, "%y-%m-%d")))) doneit.log(request.query.date) else: date = doneit.timezone.localize(datetime.datetime.now().replace(hour=0,minute=0,second=0,microsecond=0)) # midnight today # Offset date based on when digest is sent date = date + timedelta(hours=int(project['digest-hour'])) doneit.log("Digest requested for %s as of %s" % (project['name'], date)) response = {'status':'success', 'tasks':{'done':[], 'todo':[], 'block':[], 'doing':[]}} for task_type in response['tasks']: task_list = doneit.get_tasks(task_type, project['_id'], date) response['tasks'][task_type] = json_util.dumps(task_list) return response
def main(): now = datetime.datetime.now() hour = int(now.strftime("%H")) doneit.log("Waker triggered at %s H. " % hour) users = doneit.get_user_list_by_reminder_request(hour) for user in users: if user['reminder-email']: doneit.log("Waker to initiate reminder request for %s" % user['name']) r = requests.post(doneit.email_sending_service_url + "/reminder", user) users = doneit.get_user_list_by_digest_request(hour) for user in users: doneit.log("Waker to initiate digest request for %s" % user['name']) r = requests.post(doneit.email_sending_service_url + "/digest", user)
def github_post_commit(): _id = request.query.id key = request.query.key if _id and key and doneit.get_by_id("projects", _id)["secret-key"] == key: for commit in json.loads(request.forms["payload"])["commits"]: author = commit["author"]["email"] try: task = dict() task["user_id"] = ObjectId(doneit.get_user_by_email(author)["_id"]) task["project_id"] = ObjectId(_id) task["type"] = "done" task["comment"] = commit["message"] task["date"] = datetime.datetime.utcnow() doneit.log("Added commit from " + author) doneit.add_task(task) except: doneit.log("Unknown git commit author:" + author_email) else: doneit.log("Tried to add task from github but authorization failed")