2016-04-02 2 views
1

github3.py 1.0.0a4を使用して、ファイルを作成、更新、削除、フェッチする基本的な "サーバー"プログラムを作成しようとしています。しかし、私のプログラムはファイルを作成しようとすると "InvalidSchema"を発生させます。どうして?私は...ドキュメントと私のプログラムをチェックしgithub3.pyでファイルを作成しようとすると "InvalidSchema"が表示される

コード:コマンドラインで実行している

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)) 

結果:

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 

答えて

0

この行で:

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

あなたしているときに、リストなどunpwを割り当てます彼らは文字列のようにそれらを使用しています。

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

が私のために働いたと行を置き換える:あなたは.split()から作成されたリストの2番目の項目を見つける必要があります。

3

unpwがリストではなく文字列です。 un = sys.argv[1].split('=')[1]などを使用してください。

編集コード:

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) 

(削除のような他のいくつかのバグが修正されました。)

関連する問題