mirror of
https://github.com/status-im/PyGithub.git
synced 2026-08-31 10:51:14 +00:00
Extract Requester from Github
This commit is contained in:
+4
-40
@@ -1,51 +1,15 @@
|
||||
import httplib
|
||||
import json
|
||||
import base64
|
||||
|
||||
from Requester import Requester
|
||||
from GithubObjects import *
|
||||
|
||||
class UnknownGithubObject( Exception ):
|
||||
pass
|
||||
|
||||
class Github:
|
||||
def __init__( self, login, password ):
|
||||
self.__login = login
|
||||
self.__password = password
|
||||
self.__requester = Requester( login, password )
|
||||
|
||||
def _dataRequest( self, verb, url, parameters, data ):
|
||||
status, headers, data = self.__rawRequest( verb, url, parameters, data )
|
||||
if 200 <= status < 300:
|
||||
return data
|
||||
else:
|
||||
raise UnknownGithubObject()
|
||||
return self.__requester.dataRequest( verb, url, parameters, data )
|
||||
|
||||
def _statusRequest( self, verb, url, parameters, data ):
|
||||
status, headers, data = self.__rawRequest( verb, url, parameters, data )
|
||||
return status
|
||||
|
||||
def __rawRequest( self, verb, url, parameters, input ):
|
||||
assert verb in [ "HEAD", "GET", "POST", "PATCH", "PUT", "DELETE" ]
|
||||
|
||||
b64_userpass = base64.b64encode( '%s:%s' % ( self.__login, self.__password ) )
|
||||
b64_userpass = b64_userpass.replace( '\n', '' )
|
||||
|
||||
input = json.dumps( input )
|
||||
|
||||
cnx = httplib.HTTPSConnection( "api.github.com", strict = True )
|
||||
cnx.request( verb, url, input, { "Authorization" : "Basic " + b64_userpass } )
|
||||
response = cnx.getresponse()
|
||||
|
||||
status = response.status
|
||||
headers = dict( response.getheaders() )
|
||||
output = response.read()
|
||||
if len( output ) == 0:
|
||||
output = None
|
||||
else:
|
||||
output = json.loads( output )
|
||||
cnx.close()
|
||||
|
||||
# print verb, url, input, "==>", status, str( headers )[ :30 ], str( output )[ :30 ]
|
||||
return status, headers, output
|
||||
return self.__requester.statusRequest( verb, url, parameters, data )
|
||||
|
||||
def get_user( self, login = None ):
|
||||
if login is None:
|
||||
|
||||
@@ -3,13 +3,13 @@ import MockMockMock
|
||||
import httplib
|
||||
import base64
|
||||
|
||||
from Github import Github, UnknownGithubObject
|
||||
from Requester import Requester, UnknownGithubObject
|
||||
|
||||
class TestCase( unittest.TestCase ):
|
||||
def setUp( self ):
|
||||
unittest.TestCase.setUp( self )
|
||||
|
||||
self.g = Github( "login", "password" )
|
||||
self.r = Requester( "login", "password" )
|
||||
self.b64_userpass = base64.b64encode( "login:password" )
|
||||
self.b64_userpass = self.b64_userpass.replace( '\n', '' )
|
||||
|
||||
@@ -34,15 +34,15 @@ class TestCase( unittest.TestCase ):
|
||||
|
||||
def testSimpleStatus( self ):
|
||||
self.expect( "GET", "/test", "null", 200, [], "" )
|
||||
self.assertEqual( self.g._statusRequest( "GET", "/test", None, None ), 200 )
|
||||
self.assertEqual( self.r._statusRequest( "GET", "/test", None, None ), 200 )
|
||||
|
||||
def testSimpleData( self ):
|
||||
self.expect( "GET", "/test", "null", 200, [], '{ "foo": "bar" }' )
|
||||
self.assertEqual( self.g._dataRequest( "GET", "/test", None, None ), { "foo" : "bar" } )
|
||||
self.assertEqual( self.r._dataRequest( "GET", "/test", None, None ), { "foo" : "bar" } )
|
||||
|
||||
def testDataOnBadStatus( self ):
|
||||
self.expect( "GET", "/test", "null", 404, [], '{ "foo": "bar" }' )
|
||||
with self.assertRaises( UnknownGithubObject ):
|
||||
self.g._dataRequest( "GET", "/test", None, None )
|
||||
self.r._dataRequest( "GET", "/test", None, None )
|
||||
|
||||
unittest.main()
|
||||
@@ -0,0 +1,46 @@
|
||||
import httplib
|
||||
import json
|
||||
import base64
|
||||
|
||||
class UnknownGithubObject( Exception ):
|
||||
pass
|
||||
|
||||
class Requester:
|
||||
def __init__( self, login, password ):
|
||||
self.__login = login
|
||||
self.__password = password
|
||||
|
||||
def _dataRequest( self, verb, url, parameters, data ):
|
||||
status, headers, data = self.__rawRequest( verb, url, parameters, data )
|
||||
if 200 <= status < 300:
|
||||
return data
|
||||
else:
|
||||
raise UnknownGithubObject()
|
||||
|
||||
def _statusRequest( self, verb, url, parameters, data ):
|
||||
status, headers, data = self.__rawRequest( verb, url, parameters, data )
|
||||
return status
|
||||
|
||||
def __rawRequest( self, verb, url, parameters, input ):
|
||||
assert verb in [ "HEAD", "GET", "POST", "PATCH", "PUT", "DELETE" ]
|
||||
|
||||
b64_userpass = base64.b64encode( '%s:%s' % ( self.__login, self.__password ) )
|
||||
b64_userpass = b64_userpass.replace( '\n', '' )
|
||||
|
||||
input = json.dumps( input )
|
||||
|
||||
cnx = httplib.HTTPSConnection( "api.github.com", strict = True )
|
||||
cnx.request( verb, url, input, { "Authorization" : "Basic " + b64_userpass } )
|
||||
response = cnx.getresponse()
|
||||
|
||||
status = response.status
|
||||
headers = dict( response.getheaders() )
|
||||
output = response.read()
|
||||
if len( output ) == 0:
|
||||
output = None
|
||||
else:
|
||||
output = json.loads( output )
|
||||
cnx.close()
|
||||
|
||||
# print verb, url, input, "==>", status, str( headers )[ :30 ], str( output )[ :30 ]
|
||||
return status, headers, output
|
||||
Reference in New Issue
Block a user