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,
}
}