2016-04-02 10 views
1

Mit github3.py 1.0.0a4 versuche ich, ein grundlegendes "Server" -Programm zu erstellen, das Dateien erstellt, aktualisiert, löscht und abruft. Mein Programm löst jedoch "InvalidSchema" beim Versuch, eine Datei zu erstellen. Warum? Ich habe mein Programm mit der Dokumentation ..."InvalidSchema" beim Versuch, eine Datei mit github3.py zu erstellen

Code:

from github3 import login 
from github3.repos.repo import Repository 

import sys, time 

print sys.argv 

if len(sys.argv) != 5: 
    print 'Usage: server.exe username=... password=... [[-create -delete -update -fetch] file] [repo=server]' 
    sys.exit() 

try: 
    un, pw, mode, f = sys.argv[1].split('='), sys.argv[2].split('='), sys.argv[3], sys.argv[4] 
    me = login(un, pw) 
except: 
    print 'Usage: server.exe username=... password=... [[-create -delete -update -fetch] file] [repo=server]' 
    sys.exit() 

try: 
    repo = sys.argv[5] 
except IndexError: 
    repo = 'server' 

repo = Repository({'name':repo}, session=me) 

if mode == '-create': 
    f = open(f) 
    name = f.name 
    data = f.read() 
    repo.create_file(name, 'Create '+time.asctime(), data.encode('utf-8')) 

if mode == '-delete': 
    f = open(f) 
    repo.contents(f.name).delete('Delete '+time.asctime(), data.encode('utf-8')) 

if mode == '-update': 
    f = open(f) 
    name = f.name 
    data = f.read() 
    repo.contents(name).update('Update '+time.asctime(), data.encode('utf-8')) 

if mode == '-fetch': 
    with open(f, mode='w') as f: 
     f.write(repo.contents(f.name)) 

Ergebnis, wenn auf der Kommandozeile ausgeführt wird:

C:\Python27>python server.py username=... password=... -create pytest.py 
['server.py', 'username=...', 'password=...', '-create', 'pytest.py'] 
Traceback (most recent call last): 
    File "server.py", line 30, in <module> 
    repo.create_file(name, 'Create '+time.asctime(), data.encode('utf-8')) 
    File "C:\Python27\lib\site-packages\github3\decorators.py", line 33, in auth_wrapper 
    return func(self, *args, **kwargs) 
    File "C:\Python27\lib\site-packages\github3\repos\repo.py", line 745, in create_file 
    json = self._json(self._put(url, data=dumps(data)), 201) 
    File "C:\Python27\lib\site-packages\github3\models.py", line 199, in _put 
    return self.session.put(url, **kwargs) 
    File "C:\Python27\lib\site-packages\requests\sessions.py", line 521, in put 
    return self.request('PUT', url, data=data, **kwargs) 
    File "C:\Python27\lib\site-packages\github3\session.py", line 88, in request 
    response = super(GitHubSession, self).request(*args, **kwargs) 
    File "C:\Python27\lib\site-packages\requests\sessions.py", line 468, in request 
    resp = self.send(prep, **send_kwargs) 
    File "C:\Python27\lib\site-packages\requests\sessions.py", line 570, in send 
    adapter = self.get_adapter(url=request.url) 
    File "C:\Python27\lib\site-packages\requests\sessions.py", line 644, in get_adapter 
    raise InvalidSchema("No connection adapters were found for '%s'" % url) 
requests.exceptions.InvalidSchema: No connection adapters were found for ':///contents/pytest.py 

Antwort

0

Auf dieser Linie:

un, pw, mode, f = sys.argv[1].split('='), sys.argv[2].split('='), sys.argv[3], sys.argv[4] 

Sie un und pw als Listen zuweisen, während Sie benützen sie wie Saiten. Sie müssen das zweite Element der Listen von .split() erstellt finden: Ersetzen Sie die Zeile mit

un, pw, mode, f = sys.argv[1].split('=')[1], sys.argv[2].split('=')[1], sys.argv[3], sys.argv[4] 

für mich gearbeitet.

3

un und pw sind Listen und keine Strings. Verwenden Sie un = sys.argv[1].split('=')[1] oder etwas ähnliches.

Edited Code:

from github3 import login 
from github3.repos.repo import Repository 

import sys, time 

if len(sys.argv) != 5: 
    print 'Usage: server.exe username=... password=... [[-create -delete -update -fetch] file] [repo=server]' 
    sys.exit() 

try: 
    un, pw, mode, f = sys.argv[1].split('=')[1], sys.argv[2].split('=')[1], sys.argv[3], sys.argv[4] 
    me = login(un, pw) 
except: 
    print 'Usage: server.exe username=... password=... [[-create -delete -update -fetch] file] [repo=server]' 
    sys.exit() 

try: 
    repo = sys.argv[5] 
except IndexError: 
    repo = 'server' 

repo = me.repository(un, repo) 

if mode == '-create': 
    f = open(f) 
    name = f.name 
    data = f.read() 
    repo.create_file(name, 'Create '+time.asctime(), data.encode('utf-8')) 

if mode == '-delete': 
    f = open(f) 
    repo.file_contents(f.name).delete('Delete '+time.asctime()) 

if mode == '-update': 
    f = open(f) 
    name = f.name 
    data = f.read() 
    repo.file_contents(name).update('Update '+time.asctime(), f.read().encode('utf-8')) 

if mode == '-fetch': 
    with open(f, mode='w') as f: 
     f.write(repo.file_contents(f.name).decoded) 

(Einige andere Fehler wie behoben wurden zu löschen.)

Verwandte Themen