/ / Http 404 podczas próby pobrania plików ze znakami specjalnymi z GitLab API - python-2.7, gitlab, gitlab-api

Http 404 podczas próby pobrania plików ze znakami specjalnymi z GitLab API - python-2.7, gitlab, gitlab-api

Używam sterownika python-gitlab dla Gitlab API. Następujące działa dobrze w moim repozytorium:

>>> rf_blob = p.repository_blob(p_latest_commit.id, "iOSBoilerplate/GooglePlus/GoogleOpenSource.framework/Versions/A/Headers/GTMOAuth2Authentication.h")
>>> rf_blob = p.repository_blob(p_latest_commit.id, "iOSBoilerplate/GooglePlus/GoogleOpenSource.framework/Versions/A/Headers/GTMOAuth2SignIn.h")

Jednak gdy próbuję otworzyć plik zawierający plik + znak w nim, otrzymuję następujące, mimo że ten plik wyraźnie istnieje w repozytorium:

>>> rf_blob = p.repository_blob(p_latest_commit.id, "iOSBoilerplate/GooglePlus/GoogleOpenSource.framework/Versions/A/Headers/GTMNSString+URLArguments.h")
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
File "/usr/local/lib/python2.7/site-packages/gitlab/objects.py", line 1521, in repository_blob
raise_error_from_response(r, GitlabGetError)
File "/usr/local/lib/python2.7/site-packages/gitlab/exceptions.py", line 140, in raise_error_from_response
response_body=response.content)
gitlab.exceptions.GitlabGetError: 404: 404 File Not Found

Jak dokładnie mam uciec przed + w pythonie, aby uzyskać obiekt blob pliku?

Odpowiedzi:

0 dla odpowiedzi № 1

Rozwiązaniem jest użycie urllib.quote.

python-gitlab to powierzchowne opakowanie dla prawdziwego API Gitlab. Interfejs API Gitlab działa na żądanie adresu URL, więc to rozwiązanie wydawało się naturalne:

rf_blob = p.repository_blob(p_latest_commit.id, urllib.quote("iOSBoilerplate/GooglePlus/GoogleOpenSource.framework/Versions/A/Headers/GTMNSString+URLArguments.h"))