Added extra fields management for Jira search
This commit is contained in:
@@ -14,7 +14,7 @@ from components.workflows.db_management import WorkflowsDesignerSettings, Workfl
|
|||||||
Connection, WorkflowsDesignerDbManager, ComponentState
|
Connection, WorkflowsDesignerDbManager, ComponentState
|
||||||
from components_helpers import apply_boundaries, mk_tooltip, mk_dialog_buttons, mk_icon
|
from components_helpers import apply_boundaries, mk_tooltip, mk_dialog_buttons, mk_icon
|
||||||
from core.instance_manager import InstanceManager
|
from core.instance_manager import InstanceManager
|
||||||
from core.jira import JiraRequestTypes
|
from core.jira import JiraRequestTypes, DEFAULT_SEARCH_FIELDS
|
||||||
from core.utils import get_unique_id, make_safe_id
|
from core.utils import get_unique_id, make_safe_id
|
||||||
from utils.DbManagementHelper import DbManagementHelper
|
from utils.DbManagementHelper import DbManagementHelper
|
||||||
|
|
||||||
@@ -453,34 +453,46 @@ class WorkflowDesigner(BaseComponent):
|
|||||||
def _mk_input_group():
|
def _mk_input_group():
|
||||||
if request_type == JiraRequestTypes.Issues.value:
|
if request_type == JiraRequestTypes.Issues.value:
|
||||||
return Div(
|
return Div(
|
||||||
Input(type="text",
|
Input(type="text",
|
||||||
name="request",
|
name="request",
|
||||||
value=component.properties.get("request", ""),
|
value=component.properties.get("request", ""),
|
||||||
placeholder="Enter JQL",
|
placeholder="Enter JQL",
|
||||||
cls="input w-full"),
|
cls="input w-full"),
|
||||||
P("Write your jql code"),
|
P("Write your jql code"),
|
||||||
)
|
)
|
||||||
elif request_type == JiraRequestTypes.Comments.value:
|
elif request_type == JiraRequestTypes.Comments.value:
|
||||||
return Div(
|
return Div(
|
||||||
Input(type="text",
|
Input(type="text",
|
||||||
name="request",
|
name="request",
|
||||||
value=component.properties.get("request", ""),
|
value=component.properties.get("request", ""),
|
||||||
placeholder="Issue id",
|
placeholder="Issue id",
|
||||||
cls="input w-full"),
|
cls="input w-full"),
|
||||||
P("Put the issue id here"),
|
P("Put the issue id here"),
|
||||||
)
|
)
|
||||||
|
|
||||||
|
def _mk_extra_parameters():
|
||||||
|
if request_type == JiraRequestTypes.Issues.value:
|
||||||
|
return Input(type="text",
|
||||||
|
name="fields",
|
||||||
|
value=component.properties.get("fields", DEFAULT_SEARCH_FIELDS),
|
||||||
|
placeholder="default fields",
|
||||||
|
cls="input w-full ml-2")
|
||||||
|
else:
|
||||||
|
return None
|
||||||
|
|
||||||
request_type = component.properties.get("request_type", JiraRequestTypes.Issues.value)
|
request_type = component.properties.get("request_type", JiraRequestTypes.Issues.value)
|
||||||
return Div(
|
return Div(
|
||||||
Fieldset(
|
Fieldset(
|
||||||
Legend("JQL", cls="fieldset-legend"),
|
Legend("JQL", cls="fieldset-legend"),
|
||||||
Select(
|
Div(
|
||||||
*[_mk_option(enum) for enum in JiraRequestTypes],
|
Select(
|
||||||
cls="select w-xs",
|
*[_mk_option(enum) for enum in JiraRequestTypes],
|
||||||
name="request_type",
|
cls="select w-xs",
|
||||||
**self.commands.on_processor_details_event(component.id, "OnJiraRequestTypeChanged"),
|
name="request_type",
|
||||||
),
|
**self.commands.on_processor_details_event(component.id, "OnJiraRequestTypeChanged"),
|
||||||
|
),
|
||||||
|
_mk_extra_parameters(),
|
||||||
|
cls="flex"),
|
||||||
_mk_input_group(),
|
_mk_input_group(),
|
||||||
cls="fieldset bg-base-200 border-base-300 rounded-box border p-4"
|
cls="fieldset bg-base-200 border-base-300 rounded-box border p-4"
|
||||||
),
|
),
|
||||||
|
|||||||
@@ -196,7 +196,8 @@ class WorkflowPlayer(BaseComponent):
|
|||||||
self._settings_manager,
|
self._settings_manager,
|
||||||
component.id,
|
component.id,
|
||||||
component.properties["request_type"],
|
component.properties["request_type"],
|
||||||
component.properties["request"]))
|
component.properties["request"],
|
||||||
|
component.properties["fields"]))
|
||||||
elif key == (ProcessorTypes.Filter, "Default"):
|
elif key == (ProcessorTypes.Filter, "Default"):
|
||||||
engine.add_processor(DefaultDataFilter(component.id, component.properties["filter"]))
|
engine.add_processor(DefaultDataFilter(component.id, component.properties["filter"]))
|
||||||
elif key == (ProcessorTypes.Presenter, "Default"):
|
elif key == (ProcessorTypes.Presenter, "Default"):
|
||||||
|
|||||||
@@ -9,7 +9,7 @@ from core.Expando import Expando
|
|||||||
|
|
||||||
JIRA_ROOT = "https://altares.atlassian.net/rest/api/3"
|
JIRA_ROOT = "https://altares.atlassian.net/rest/api/3"
|
||||||
DEFAULT_HEADERS = {"Accept": "application/json"}
|
DEFAULT_HEADERS = {"Accept": "application/json"}
|
||||||
|
DEFAULT_SEARCH_FIELDS = "summary,status,assignee"
|
||||||
logger = logging.getLogger("jql")
|
logger = logging.getLogger("jql")
|
||||||
|
|
||||||
|
|
||||||
@@ -25,7 +25,7 @@ class JiraRequestTypes(Enum):
|
|||||||
class Jira:
|
class Jira:
|
||||||
"""Manage default operation to JIRA"""
|
"""Manage default operation to JIRA"""
|
||||||
|
|
||||||
def __init__(self, user_name: str, api_token: str):
|
def __init__(self, user_name: str, api_token: str, fields=DEFAULT_SEARCH_FIELDS):
|
||||||
"""
|
"""
|
||||||
Prepare a connection to JIRA
|
Prepare a connection to JIRA
|
||||||
The initialisation do not to anything,
|
The initialisation do not to anything,
|
||||||
@@ -38,6 +38,7 @@ class Jira:
|
|||||||
self.user_name = user_name
|
self.user_name = user_name
|
||||||
self.api_token = api_token
|
self.api_token = api_token
|
||||||
self.auth = HTTPBasicAuth(self.user_name, self.api_token)
|
self.auth = HTTPBasicAuth(self.user_name, self.api_token)
|
||||||
|
self.fields = fields
|
||||||
|
|
||||||
def test(self):
|
def test(self):
|
||||||
url = f"{JIRA_ROOT}/myself"
|
url = f"{JIRA_ROOT}/myself"
|
||||||
@@ -85,7 +86,7 @@ class Jira:
|
|||||||
as_dict = json.loads(response.text)
|
as_dict = json.loads(response.text)
|
||||||
return [Expando(field) for field in as_dict]
|
return [Expando(field) for field in as_dict]
|
||||||
|
|
||||||
def issues(self, jql: str, fields="summary,status,assignee") -> list[Expando]:
|
def issues(self, jql: str, fields=None) -> list[Expando]:
|
||||||
"""
|
"""
|
||||||
Executes a JQL and returns the list of issues
|
Executes a JQL and returns the list of issues
|
||||||
:param jql:
|
:param jql:
|
||||||
@@ -93,6 +94,13 @@ class Jira:
|
|||||||
:return:
|
:return:
|
||||||
"""
|
"""
|
||||||
logger.debug(f"Processing jql '{jql}'")
|
logger.debug(f"Processing jql '{jql}'")
|
||||||
|
|
||||||
|
if not jql:
|
||||||
|
raise ValueError("Jql cannot be empty.")
|
||||||
|
|
||||||
|
if not fields:
|
||||||
|
fields = self.fields
|
||||||
|
|
||||||
url = f"{JIRA_ROOT}/search"
|
url = f"{JIRA_ROOT}/search"
|
||||||
|
|
||||||
headers = DEFAULT_HEADERS.copy()
|
headers = DEFAULT_HEADERS.copy()
|
||||||
|
|||||||
@@ -92,16 +92,17 @@ class TableDataProducer(DataProducer):
|
|||||||
class JiraDataProducer(DataProducer):
|
class JiraDataProducer(DataProducer):
|
||||||
"""Base class for data producers that emit data from Jira."""
|
"""Base class for data producers that emit data from Jira."""
|
||||||
|
|
||||||
def __init__(self, session, settings_manager, component_id, request_type='issues', request=''):
|
def __init__(self, session, settings_manager, component_id, request_type='issues', request='', fields=None):
|
||||||
super().__init__(component_id)
|
super().__init__(component_id)
|
||||||
self._session = session
|
self._session = session
|
||||||
self.settings_manager = settings_manager
|
self.settings_manager = settings_manager
|
||||||
self.request_type = request_type
|
self.request_type = request_type
|
||||||
self.request = request
|
self.request = request
|
||||||
|
self.fields = fields
|
||||||
self.db = AdminDbManager(session, settings_manager).jira
|
self.db = AdminDbManager(session, settings_manager).jira
|
||||||
|
|
||||||
def emit(self, data: Any = None) -> Generator[Any, None, None]:
|
def emit(self, data: Any = None) -> Generator[Any, None, None]:
|
||||||
jira = Jira(self.db.user_name, self.db.api_token)
|
jira = Jira(self.db.user_name, self.db.api_token, fields=self.fields)
|
||||||
if not hasattr(jira, self.request_type):
|
if not hasattr(jira, self.request_type):
|
||||||
raise ValueError(f"Invalid request type: {self.request_type}")
|
raise ValueError(f"Invalid request type: {self.request_type}")
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user