问题描述
我只是想设置 GitLab 合并请求的标签。
当我向 GitLab 发出这个 PUT 请求时
requests.put( https://gitlab.com/api/v4/projects/{}/merge_requests/{}".format(project_id,mr_num),{"labels":mr_new_labels},headers={'PRIVATE-TOKEN': os.getenv("GITLAB_ACCESS_TOKEN","")} )
,
如果 mr_new_labels 是任何字符串或具有 1 个元素的列表,它将起作用 - 所以如果请求只是设置 1 个标签(或 0 个标签,带有空字符串)。
但是,如果mr_new_labels是一个有多个元素的列表,那么只有最后一个元素会被'put'(可能列表中的元素是轮流'put'并相互替换,而不是列表一次被放入) ,因此合并请求将只有 1 个标签。
我曾尝试使用 POST 请求来执行此操作,但对我而言,POST 请求的语法与 PUT 请求相同,带有任何字符串或列表值 mr_new_labels,即
requests.post( https://gitlab.com/api/v4/projects/{}/merge_requests/{}".format(project_id,"")} )
,不会抛出错误但根本不起作用,即使我看过的任何地方都没有看到 PUT 请求和 POST 请求的语法之间有任何区别。所以我认为这可能与 GitLab API 不接受 POST 请求有关。 (POST 请求是否应该与 PUT 请求不同?)
所以,我不知道如何使用 PUT 或 POST 请求将“标签”设置为具有多个值的列表(我知道它可以)。任何想法将不胜感激:)
干杯, 米兰
解决方法
您不能 PUT(或 POST)列表值(因为 HTTP 查询只是一个字符串)。但是,{"labels":",".join(mr_new_labels)}
会起作用 :)