From 0e6524dd328503a727811390f42b102740dd1cd2 Mon Sep 17 00:00:00 2001 From: hagen-danswer Date: Tue, 1 Oct 2024 10:32:41 -0700 Subject: [PATCH] Added quotes to project name to handle reserved words (#2639) --- .../workflows/pr-python-connector-tests.yml | 3 ++ .../connectors/danswer_jira/connector.py | 8 +++- .../daily/connectors/jira/test_jira_basic.py | 48 +++++++++++++++++++ 3 files changed, 57 insertions(+), 2 deletions(-) create mode 100644 backend/tests/daily/connectors/jira/test_jira_basic.py diff --git a/.github/workflows/pr-python-connector-tests.yml b/.github/workflows/pr-python-connector-tests.yml index e5dd79c01..642618000 100644 --- a/.github/workflows/pr-python-connector-tests.yml +++ b/.github/workflows/pr-python-connector-tests.yml @@ -15,6 +15,9 @@ env: CONFLUENCE_TEST_PAGE_ID: ${{ secrets.CONFLUENCE_TEST_PAGE_ID }} CONFLUENCE_USER_NAME: ${{ secrets.CONFLUENCE_USER_NAME }} CONFLUENCE_ACCESS_TOKEN: ${{ secrets.CONFLUENCE_ACCESS_TOKEN }} + # Jira + JIRA_USER_EMAIL: ${{ secrets.JIRA_USER_EMAIL }} + JIRA_API_TOKEN: ${{ secrets.JIRA_API_TOKEN }} jobs: connectors-check: diff --git a/backend/danswer/connectors/danswer_jira/connector.py b/backend/danswer/connectors/danswer_jira/connector.py index 05fa2e1e2..097aa41c3 100644 --- a/backend/danswer/connectors/danswer_jira/connector.py +++ b/backend/danswer/connectors/danswer_jira/connector.py @@ -245,10 +245,12 @@ class JiraConnector(LoadConnector, PollConnector): if self.jira_client is None: raise ConnectorMissingCredentialError("Jira") + # Quote the project name to handle reserved words + quoted_project = f'"{self.jira_project}"' start_ind = 0 while True: doc_batch, fetched_batch_size = fetch_jira_issues_batch( - jql=f"project = {self.jira_project}", + jql=f"project = {quoted_project}", start_index=start_ind, jira_client=self.jira_client, batch_size=self.batch_size, @@ -276,8 +278,10 @@ class JiraConnector(LoadConnector, PollConnector): "%Y-%m-%d %H:%M" ) + # Quote the project name to handle reserved words + quoted_project = f'"{self.jira_project}"' jql = ( - f"project = {self.jira_project} AND " + f"project = {quoted_project} AND " f"updated >= '{start_date_str}' AND " f"updated <= '{end_date_str}'" ) diff --git a/backend/tests/daily/connectors/jira/test_jira_basic.py b/backend/tests/daily/connectors/jira/test_jira_basic.py new file mode 100644 index 000000000..19d69dfad --- /dev/null +++ b/backend/tests/daily/connectors/jira/test_jira_basic.py @@ -0,0 +1,48 @@ +import os +import time + +import pytest + +from danswer.configs.constants import DocumentSource +from danswer.connectors.danswer_jira.connector import JiraConnector + + +@pytest.fixture +def jira_connector() -> JiraConnector: + connector = JiraConnector( + "https://danswerai.atlassian.net/jira/software/c/projects/AS/boards/6", + comment_email_blacklist=[], + ) + connector.load_credentials( + { + "jira_user_email": os.environ["JIRA_USER_EMAIL"], + "jira_api_token": os.environ["JIRA_API_TOKEN"], + } + ) + return connector + + +def test_jira_connector_basic(jira_connector: JiraConnector) -> None: + doc_batch_generator = jira_connector.poll_source(0, time.time()) + + doc_batch = next(doc_batch_generator) + with pytest.raises(StopIteration): + next(doc_batch_generator) + + assert len(doc_batch) == 1 + + doc = doc_batch[0] + + assert doc.id == "https://danswerai.atlassian.net/browse/AS-2" + assert doc.semantic_identifier == "test123small" + assert doc.source == DocumentSource.JIRA + assert doc.metadata == {"priority": "Medium", "status": "Backlog"} + assert doc.secondary_owners is None + assert doc.title is None + assert doc.from_ingestion_api is False + assert doc.additional_info is None + + assert len(doc.sections) == 1 + section = doc.sections[0] + assert section.text == "example_text\n" + assert section.link == "https://danswerai.atlassian.net/browse/AS-2"