Example #1
0
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)
Example #2
0
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
Example #3
0
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)
Example #4
0
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
Example #5
0
File: waker.py Project: di/doneit
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)
Example #6
0
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")