Запрос об использовании setattr () в Python-Redmine - PullRequest
0 голосов
/ 13 февраля 2019

setattr() для элемента в проблемах Redmine, происходит сбой, со следующей ошибкой:

Traceback (most recent call last):
  File "E:\test\get_redmine_data.py", line 47, in <module>
    print (item.assigned_to)
  File "C:\Python27\lib\site-packages\redminelib\resources\standard.py", line 150, in __getattr__
    return super(Issue, self).__getattr__(attr)
  File "C:\Python27\lib\site-packages\redminelib\resources\base.py", line 164, in __getattr__
    attr, encoded = self.encode(attr, decoded, self.manager)
  File "C:\Python27\lib\site-packages\redminelib\resources\base.py", line 266, in encode
    return attr, manager.new_manager(cls._resource_map[attr]).to_resource(value)
  File "C:\Python27\lib\site-packages\redminelib\managers\base.py", line 29, in to_resource
    return self.resource_class(self, resource)
  File "C:\Python27\lib\site-packages\redminelib\resources\base.py", line 130, in __init__
    self._decoded_attrs = dict(dict.fromkeys(relations_includes), **attributes)
TypeError: type object argument after ** must be a mapping, not str

Я пытаюсь установить какого-либо правопреемника по умолчанию для проблем, в которых не указан правопреемник.Код терпит неудачу в строке, где я печатаю атрибут, который я только что установил.Мой код приведен ниже:

redmine = Redmine('http://redmine_url', username='uname', password='pwd')
project = redmine.project.get('proj_name')
work_items = project.issues
for item in work_items:
   assignee_not_set = getattr(item,'assigned_to',True)
   if assignee_not_set == True:
       print item.id
       setattr(item,'assigned_to','Deepak')
       print (item.assigned_to)

Я также пытался использовать метод update (),

redmine.project.update(item.id, assigned_to='Deepak')

, который также завершается с другой ошибкой - redminelib.exceptions.ResourceNotFoundError: Requested resource doesn't exist.Я проверил, что идентификатор проблемы существует в Redmine.

1 Ответ

0 голосов
/ 14 февраля 2019

У вас есть несколько проблем:

  1. Имя атрибута assigned_to_id, а не assigned_to
  2. Он принимает идентификатор пользователя, который равен int, а не имя пользователя, котороеstr
  3. Нет необходимости использовать setattr() здесь, просто используйте item.assigned_to_id = 123
  4. Вам нужно позвонить item.save() после установки assigned_to_id, иначе он не будет сохранен вRedmine
  5. Когда вы пытаетесь использовать метод update(), вы используете ресурс Project, а не ресурс Issue, поэтому вы получаете ResourceNotFoundError

Вся эта информация доступна в документации: https://python -redmine.com / resources / issue.html

...