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 № 1Rozwią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"))