Orgmode – Generate custom report using external python script.

I use orgmode in emacs as a to-do list manager. End of every week I send my status report to the team. Earlier I used to do this manually by going through the agenda for the week and collecting relevant information. I thought of automating it since this is repeated every week.

It was super easy for me because, I strictly associate each task with a corresponding tag to uniquely identify it. These tags are related to my office projects and the script is a custom one which suits my requirement.

Here is the emacs part.

(defun noorul/gen_weekly_report (startPos endPos)
  "Generate weekly report using external pythong script"
(interactive "r")
  (let (scriptName)
    (setq scriptName "~/work/python/gen_weekly_report.py")
    (shell-command-on-region startPos endPos scriptName "*Weekly Report*" 
			     nil nil t)
    ))

(global-set-key (kbd "<f6> r") 'noorul/gen_weekly_report)

Here is the python supporting script.

#!/usr/bin/env python
import sys
import re

report_dict = {}
cubit_issue_id_regex = re.compile('.*(cubit\d+):.*$')
artf_issue_id_regex = re.compile('.*(artf\d+):.*$')
issue_desc_regex = re.compile('.*(WAITING|DONE|NEXT) (.*) :.*$')
for line in sys.stdin.readlines():
    id_match = re.match(cubit_issue_id_regex, line)
    if not id_match:
        id_match = re.match(artf_issue_id_regex, line)
    if id_match:
        issue = id_match.groups()[0]
        issue_desc = ''
        desc_match = re.match(issue_desc_regex, line)
        if desc_match:
            issue_desc = desc_match.groups()[1]
            if issue not in report_dict.keys():
                report_dict[issue] = issue_desc

print 'This Week:\n'
for issue in sorted(report_dict.keys()):
    print '* %-10s: %s' % (issue,  report_dict[issue])

Now to collect my report, all what I have to do is, go to the agenda buffer switch to log mode and mark the week area and press ‘F6 r’.

I think I can avoid the region marking step and that will be an enhancement.

This entry was posted in debian, emacs, linux, orgmode, python and tagged , , . Bookmark the permalink. Follow any comments here with the RSS feed for this post. Post a comment or leave a trackback: Trackback URL.

Post a Comment

Your email is never published nor shared. Required fields are marked *

*
*

You may use these HTML tags and attributes: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong>