Как можно получить идентификатор задачи (issue ID) в python-redmine, зная название этой задачи?

Я разрабатываю скрипт на Python для работы с Redmine и мне нужно изменить текст задачи (issue), зная её название. Я пробовал получить все задачи и пройтись по ним в цикле, используя следующий код: <br/> <pre><code class="python">def get_redmine_issue_name(subject):
    """
    Получает issue, у которых название (subject) точно совпадает с указанной строкой.
    """
    try:
        all_issues = redmine.issue.all()
        for issue in all_issues:
            if issue.subject == subject:
                return issue
        return None  # Если не найдено
    except Exception as e:
        raise</code></pre> <br/> Однако, я получаю ошибку <br/> <pre><code class="python">File "/home/petr/VScodeProjects/dbt.obsever/.venv/lib/python3.11/site-packages/redminelib/engines/base.py", line 177, in process_response
    raise exceptions.ForbiddenError
redminelib.exceptions.ForbiddenError: Requested resource is forbidden</code></pre> <br/> Можете подсказать, как я могу реализовать задачу с учетом того, что метод issue.get доступен только по ID?
  • 27 декабря 2024 г. 15:33
Ответы на вопрос 2
Ошибка `ForbiddenError`, которую вы получаете, может быть связана с тем, что ваш API-токен или учетные данные не позволяют вам получить список всех задач (issues). Возможно, у вас не хватает прав доступа к этому ресурсу.

Тем не менее, идея получения задачи по её названию вполне рабочая, но, учитывая ограничения, лучше всего использовать фильтрацию на стороне сервера, если это возможно. В библиотеке `python-redmine` существует метод `query`, который можно использовать для поиска задач по определенным параметрам, включая заголовок (`subject`).

Вот как это можно реализовать:

```python
from redminelib import Redmine

# Подключаемся к вашему Redmine
redmine = Redmine('https://your-redmine-url', key='your-api-key')

def get_redmine_issue_by_name(subject):
    """
    Получает issue, у которых название (subject) совпадает с указанной строкой.
    """
    try:
        # Используем метод filter для поиска по названию задачи
        issues = redmine.issue.filter(subject=subject)
        # Возвращаем первую найденную задачу
        return issues[0] if issues else None  
    except Exception as e:
        print(f"Error: {e}")
        return None

# Пример использования
issue = get_redmine_issue_by_name("Название вашей задачи")
if issue:
    print(f"Issue ID: {issue.id}")
else:
    print("Задача не найдена.")
```

В этом примере:

1. Метод `issue.filter` используется для фильтрации задач по заголовку (subject).
2. Возвращается первая найденная задача, если она существует, или `None`, если задач с таким заголовком нет.
3. Обязательно настройте ваш `Redmine` объект с правильным URL и ключом API.

Пожалуйста, убедитесь, что используете корректные параметры в методе `filter` и что у вашего API-ключа есть соответствующие права для выполнения запрашиваемых действий.
Судя по ошибке приложение не прошло аутентификацию . 
Перебирать все проблемы и искать совпадение - не лучшая идея.
Посмотрите в сторону готовых библиотек , например тут есть метод search
Похожие вопросы