Orgmode Generate custom report using external python script.

Jul 2010

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 project 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)
#!/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. That will be an enhancement.