Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Odd behavior of with remove_watcher method of JIRA client: #1734

Open
2 of 4 tasks
danmanor opened this issue Sep 10, 2023 · 2 comments
Open
2 of 4 tasks

Odd behavior of with remove_watcher method of JIRA client: #1734

danmanor opened this issue Sep 10, 2023 · 2 comments
Labels
good first issue New contributors welcome !

Comments

@danmanor
Copy link

Bug summary

Hello,

I have encountered odd behavior from remove_watcher method of JIRA client - When I attempt to remove a watcher from an issue that is no longer an active user on Jira, it raises a jira.JIRAError exception. I humbly believe it shouldn't fail in that case, but just remove the watcher.

Thank you

Is there an existing issue for this?

  • I have searched the existing issues

Jira Instance type

Jira Cloud (Hosted by Atlassian)

Jira instance version

No response

jira-python version

3.5.2

Python Interpreter version

3.11.4

Which operating systems have you used?

  • Linux
  • macOS
  • Windows

Reproduction steps

Remove an inactive watcher user from an issue

Stack trace

jira.exceptions.JIRAError: JiraError HTTP None
12:49:47  	text: No matching user found for: <user>

Expected behaviour

Watcher should be removed.

Additional Context

No response

@adehad adehad added the good first issue New contributors welcome ! label Sep 28, 2023
@cperrin88
Copy link

I am not sure what can be done about this. In Jira Cloud the issue/{issueIdOrKey}/watchers endpoint expects an accountId to delete a user. To get the accountId we search for the username on the user/search endpoint. It seems like in this case the endpoint didn't return a user. The only "fix" I could think of would be to add a method that accepts an accountId instead of a username.

@tonkolviktor
Copy link

in our setup, with jira==3.6.0, I get:

issue_handler/issue_handler_base.py:199: in issue_handling_engine
    self.ticket_key = self.jira_conn.create_ticket(self._create_ticket_fields(), watcher_list)
services/jira.py:131: in create_ticket
    self._connection.add_watcher(ticket.key, watcher)
../jira/client.py:124: in wrapper
    result = func(*arg_list, **kwargs)
../jira/client.py:2326: in add_watcher
    watcher_id = self._get_user_id(watcher)

    def _get_user_id(self, user: str | None) -> str | None:
        """Internal method for translating a user search (str) to an id.
    
        Return None and -1 unchanged.
    
        This function uses :py:meth:`JIRA.search_users` to find the user and then using :py:meth:`JIRA._get_user_identifier` extracts
        the relevant identifier property depending on whether the instance is a Cloud or self-hosted Instance.
    
        Args:
            user (Optional[str]): The search term used for finding a user. None, '-1' and -1 are equivalent to 'Unassigned'.
    
        Raises:
            JIRAError: If any error occurs.
    
        Returns:
            Optional[str]: The Jira user's identifier. Or "-1" and None unchanged.
        """
        if user in (None, -1, "-1"):
            return user
        try:
            user_obj: User
            if self._is_cloud:
                users = self.search_users(query=user, maxResults=20)
            else:
                users = self.search_users(user=user, maxResults=20)
    
            if len(users) < 1:
                raise JIRAError(f"No matching user found for: '{user}'")
    
            matches = []
            if len(users) > 1:
                matches = [u for u in users if self._get_user_identifier(u) == user]
            user_obj = matches[0] if matches else users[0]
    
        except Exception as e:
>           raise JIRAError(str(e))
E           jira.exceptions.JIRAError: JiraError HTTP None
E           	text: JiraError HTTP None
E           	text: No matching user found for: '5eXXXXXXXX'

../jira/client.py:1853: JIRAError

with jira==3.5.2 it works without issue

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
good first issue New contributors welcome !
Projects
None yet
Development

No branches or pull requests

4 participants