Redmine API утверждает, что пропустил поле 'hours', и возвращает POST 422 для time_entry.json

Я пытаюсь создать записи времени в установке Redmine 3.3.0.stable через REST API, используя библиотеку запросов в клиентском программном обеспечении. Я использую следующий код:

    urlSuffix='/time_entries.json'

    time_entry = {
        'hours':       0.25,
        'project_id':  1,
        'comments':    'test',
        'activity_id': 1,
    }

    params = {
        'key': session.APIKey,
    }

    headers = {
        'Content-Type': 'application/xml',
    }

    requestURL = "%s%s" % (session.redmineBaseUrl, urlSuffix)
    response = requests.post(requestURL, json=time_entry, params=params)

response.status_code всегда 422и ответ содержит следующее локализованное сообщение:

{"errors": ["Stunden muss ausgefüllt werden"]}

что переводится как

часы должны быть предоставлены

Однако, как вы можете видеть, поле "часы" было задано правильно. Кроме того, файл журнала указывает, что параметр правильно достигает Redmine:

Started POST "/PROJECTNAMEHERE/time_entries.json?key=APIKEYHERE" for 62.178.175.81 at 2016-11-15 00:19:47 +0100
Processing by TimelogController#create as JSON
  Parameters: {"project_id"=>"1", "spent_on"=>"2016-11-15T00:19:24.513001", "comments"=>"lkj", "activity_id"=>"1", "hours"=>0.25, "key"=>"a009fdb7d15f174b31860cfa9d56fd648737d862"}
  Current user: MichaelJaros (id=5)
  Rendered common/error_messages.api.rsb (0.2ms)
Completed 422 Unprocessable Entity in 22ms (Views: 0.7ms | ActiveRecord: 5.1ms)

Я пытался с тем же результатом:

  • все комбинации локализованной десятичной точки (, вместо .)
  • передача часов в виде целого числа, числа с плавающей запятой или строки
  • переключение на XML, как предполагает эта похожая проблема, обнаруженная на досках Redmine (это заставляет Redmine также жаловаться на отсутствие и неверный идентификатор проекта)
  • с использованием data= параметр вместо json= в post() метод (это делает часы значение строки как "1.0" вместо 1.0 в лог-файл)

Моим последним средством было бы попробовать одну из библиотек Python Redmine, но я не вижу, что они должны делать по-другому в этом случае.

  • Я делаю что-то не так?
  • Что именно они подразумевают под:

time_entry (обязательно): хэш атрибутов записи времени, в том числе: [...]

в документацию записей времени? Когда запрос выполняется в формате XML, я ожидаю, что API потребует также данные XML для time_entry, а не "хеша". Но, может быть, эта часть была написана неточно?

1 ответ

Я сделал pip install python-redmine и следующий код работает отлично:

from redmine import Redmine
redmine = Redmine (redmineBaseUrl, version='3.3.0', key=APIKey)
[...]
redmine.time_entry.create(project_id=self.projectId, activity_id=self.activityId, hours=self.getHoursRounded(), spent_on=self.startDateTime.date(), comments=self.comment)

Я должен был сделать это таким образом, прежде чем вчера возиться с этим часами.

Была такая же проблема. Заключение записи времени в time_entry тег решил проблему для меня.

Из:

   time_entry = {
        'hours':       0.25,
        'project_id':  1,
        'comments':    'test',
        'activity_id': 1,
    }

Кому:

   time_entry = {
        'time_entry': {
             'hours':       0.25,
             'project_id':  1,
             'comments':    'test',
             'activity_id': 1,
        }
    }
Другие вопросы по тегам