Stephen Peterkins 8c742b20e6
Create JiraReader for loading Jira issues (#141)
Co-authored-by: Stephen Peterkins <stephenpeterkins@Stephens-MacBook-Pro.local>
2023-03-28 13:49:25 -07:00

65 lines
2.1 KiB
Python

from typing import List
from llama_index.readers.base import BaseReader
from llama_index.readers.schema.base import Document
class JiraReader(BaseReader):
"""Jira reader. Reads data from Jira issues from passwed query.
Args:
email (str): Jira email.
api_token (str): Jira API token.
server_url (str): Jira server url.
"""
def __init__(self, email: str, api_token: str, server_url: str) -> None:
from jira import JIRA
self.jira = JIRA(
basic_auth=(email, api_token),
server=f'https://{server_url}'
)
def load_data(self, query: str) -> List[Document]:
relevant_issues = self.jira.search_issues(query)
issues = []
for issue in relevant_issues:
assignee = ''
reporter = ''
epic = ''
if issue.fields.assignee:
assignee = issue.fields.assignee.displayName
if issue.fields.reporter:
reporter = issue.fields.reporter.displayName
if issue.raw['fields']['customfield_10009']['showField']:
epic = issue.raw['fields']['customfield_10009']['data']['summary']
issues.append(
Document(
issue.fields.summary + " " + issue.fields.description,
extra_info={
'id': issue.id,
'title': issue.fields.summary,
'url': issue.permalink(),
'created_at': issue.fields.created,
'updated_at': issue.fields.updated,
'labels': issue.fields.labels,
'status': issue.fields.status.name,
'assignee': assignee,
'reporter': reporter,
'project': issue.fields.project.name,
'issue_type': issue.fields.issuetype.name,
'priority': issue.fields.priority.name,
'epic': epic
}
)
)
return issues