Refactor comment extraction in JIRA connector to handle nested content (#1329)

- Implement `extract_text_from_content` to parse nested text elements from comment bodies.
- Modify `_get_comment_strs` to use the new text extraction method, improving handling of various content structures.
This commit is contained in:
Shravan Vishwanathan 2024-05-11 23:11:27 +05:30 committed by GitHub
parent cfd9159b27
commit b8af38bb95
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194

View File

@ -44,24 +44,37 @@ def extract_jira_project(url: str) -> tuple[str, str]:
return jira_base, jira_project
def extract_text_from_content(content):
texts = []
if 'content' in content:
for block in content['content']:
if 'content' in block:
for item in block['content']:
if item['type'] == 'text':
texts.append(item['text'])
return " ".join(texts)
def _get_comment_strs(
jira: Issue,
comment_email_blacklist: tuple[str, ...] = (),
) -> list[str]:
def _get_comment_strs(jira: Issue, comment_email_blacklist: tuple[str, ...] = ()) -> list[str]:
comment_strs = []
for comment in jira.fields.comment.comments:
# Can't test Jira server so can't be sure this works for everyone, wrapping in a try just
# in case
try:
comment_strs.append(comment.body)
# If this fails, we just assume it's ok to keep the comment
if comment.author.emailAddress in comment_email_blacklist:
comment_strs.pop()
except Exception:
pass
return comment_strs
if hasattr(comment, 'body'):
body_text = extract_text_from_content(comment.raw['body'])
elif hasattr(comment, 'raw'):
body = comment.raw.get('body', 'No body content available')
body_text = extract_text_from_content(body) if isinstance(body, dict) else body
else:
body_text = "No body attribute found"
if hasattr(comment, 'author') and comment.author.emailAddress in comment_email_blacklist:
continue # Skip adding comment if author's email is in blacklist
comment_strs.append(body_text)
except Exception as e:
logger.error(f"Failed to process comment due to an error: {e}")
continue
return comment_strs
def fetch_jira_issues_batch(
jql: str,