Genie API Netflix принимает JSON или multipart с одной деталью request
в application/json
и любым количеством attachment
деталей в application/octet-stream
.
Запросы делают простой JSON POST довольно простым:
requests.post(
url=self.host + self.endpoint,
json={
"version" : "1.0",
"user" : "genie",
"name" : "List * ... Directories bash job",
"description" : "Genie 3 Test Job",
"configs" : [ "/home/travis/build/Netflix/genie/genie-web/build/resources/test/com/netflix/genie/web/controllers/JobRestControllerIntegrationTests/job/config1" ],
"dependencies" : [ "/home/travis/build/Netflix/genie/genie-web/build/resources/test/com/netflix/genie/web/controllers/JobRestControllerIntegrationTests/job/dep1" ],
"setupFile" : "/home/travis/build/Netflix/genie/genie-web/build/resources/test/com/netflix/genie/web/controllers/JobRestControllerIntegrationTests/job/jobsetupfile",
"commandArgs" : "-c 'echo hello world'",
"clusterCriterias" : [ {
"tags" : [ "localhost" ]
} ],
"commandCriteria" : [ "bash" ],
},
)
Команда ограничена, поэтому, если у вас есть большая команда (запрос) для отправки, вам лучше использовать вложение.
С запросами не так сложно запросить составную часть:
requests.post(
url=self.host + self.endpoint,
json={
"version" : "1.0",
"user" : "genie",
"name" : "List * ... Directories bash job",
"description" : "Genie 3 Test Job",
"configs" : [ "/home/travis/build/Netflix/genie/genie-web/build/resources/test/com/netflix/genie/web/controllers/JobRestControllerIntegrationTests/job/config1" ],
"dependencies" : [ "/home/travis/build/Netflix/genie/genie-web/build/resources/test/com/netflix/genie/web/controllers/JobRestControllerIntegrationTests/job/dep1" ],
"setupFile" : "/home/travis/build/Netflix/genie/genie-web/build/resources/test/com/netflix/genie/web/controllers/JobRestControllerIntegrationTests/job/jobsetupfile",
"commandArgs" : "-c 'cat query.sql'",
"clusterCriterias" : [ {
"tags" : [ "localhost" ]
} ],
"commandCriteria" : [ "bash" ],
},
files={
"attachment": (
'query.sql',
'select count(1) from small_table;',
'application/octet-stream'
),
},
)
За исключением случаев, если существует files
, он игнорирует json
a, если я изменю json
на data
it 'будет форма.Я мог бы переместить JSON dict в files
dict, но, похоже, он не обрабатывается как JSON, и теперь мне нужно использовать пакет для его кодирования?
Я спрашиваю, потому что с обработкой requests
json в аргументе и объекте ответа. Я подозреваю, что он будет обрабатывать его где-нибудь и для многочастной формы, в противном случае я добавлю json
только для json.dumps(...)
Дополнительно:
- Похоже, нет способа отправить более одной части с именем
attachment
, которую API-интерфейс разрешил бы / ожидал, если вам нужно более одного вложенного файла.[Как и в моем комментарии, это можно сделать, изменив files
на список пар имя-файл-список]. - В примере запросов показано, что заголовки деталей имеют имена без кавычек, такие как
Content-Disposition: form-data; name=request
иContent-Disposition: form-data; name=attachment
в то время как пакет запроса, похоже, генерирует Content-Disposition: form-data; name="attachment"
.