Playing With Jira and Python
I like Atlassian products.
So I use Confluence, Bitbucket and Jira for my personal projects. You can ask – isn’t it overkill? Well, it would really be overkill if it were not for the fact that Atlassian offers free instances for small teams of most of their products.
(Btw I run my own local instance of Confluence, it costs $10 that are donated to a charity).
Jira is a wonderful tool but sometimes I need something easier; for instance, a single main every morning with my pending tasks that I read in my mobile while I enjoy my first tea in the morning. Well, there is a library for this.
##
Creating the object
First of all we need a Jira object:
from jira import JIRA
jira = JIRA()
Hmmm, not very useful. You probably want to login to a different instance living on a server other than localhost:2990. Let’s try again:
from jira import JIRA
options = {
'server': 'https://' + server
}
jira = JIRA(options, basic_auth=(user, api_key))
Note that you will need the api_key, not the password!
Easy! Now you can get the list of projects in your instance:
projects = list_projects(jira)
for project in projects:
print(project)
And of course search for issues with the usual Jira filters:
filter = 'assignee = currentuser() and status != Done order by priority desc'
issues = jira.search_issues(filter)
All together:
from jira import JIRA
def list_issues(jira, filter=""):
issues = jira.search_issues(filter)
return issues
def report_issues(issues):
report = '''
<p>Good morning! Your tasks for today:</p>\n
<table width=”100%” border=”0”>\n
<tr><td colspan=5 width="80">\n
<tr bgcolor="#dddddd"><td>Issue ID<td>Status<td>Priority<td>Due date<td>Summary
'''
for issue in issues:
issue_key = issue.key
priority = str(issue.fields.priority)
status = issue.fields.status.name
summary = issue.fields.summary[:64]
duedate = issue.fields.duedate
if duedate is None:
duedate = '-'
report += "<tr><td>{}<td>{}<td>{}<td>{}<td>{}\n".format(issue_key, status, priority, duedate, summary)
report += '</table>\n<p>Have a nice day!<p>Sincerely, your team.'
return report
def mail_issues(text):
[...]
options = {
'server': 'https://' + server
}
jira = JIRA(options, basic_auth=(user, api_key))
filter = 'assignee = currentuser() and status != Done order by priority desc'
issues = list_issues(jira, filter)
report = report_issues(issues)
mail_issues(report)
Now read the Python Jira docs and play!