11#!/usr/bin/env python
22# -*- encoding: utf-8 -*-
3- #
4- # author: David Medina
53
64import requests
75import json
86from errors import GithubError
7+ from handlers import users , gists
98
109RESOURCES_PER_PAGE = 100
1110
11+
12+ #TODO: refactor: loads json in request editing Response object
1213class GithubCore (object ):
1314 """
1415 Wrapper to github api requests
@@ -69,7 +70,9 @@ def patch(self, request, data=None, **kwargs):
6970
7071 def put (self , request , ** kwargs ):
7172 """ PUT request """
72- response = self ._request ('PUT' , request , ** kwargs )
73+
74+ response = self ._request ('PUT' , request ,
75+ headers = {'Content-length' : '0' }, ** kwargs )
7376 assert response .status_code == 204
7477 return response
7578
@@ -87,22 +90,21 @@ def _parse_args(self, request_args):
8790 """
8891 Arg's parser to `_request` method
8992
90- It check keyword args to parse extra request args to params
91- Sample:
92- _parse_args(arg1=1, arg2=2) => params = {'arg1': 1, 'arg2': 2}
93+ Put extra request_args in params
9394 """
9495 request_core = (
95- 'params' ,'data' ,'headers' ,'cookies' ,'files' ,'auth' ,'tiemout' ,
96- 'allow_redirects' ,'proxies' ,'return_response' ,'config' )
96+ 'params' , 'data' , 'headers' , 'cookies' , 'files' , 'auth' , 'tiemout' ,
97+ 'allow_redirects' , 'proxies' , 'return_response' , 'config' )
9798 request_params = request_args .get ('params' )
9899 extra_params = {}
99100 for k , v in request_args .items ():
100- if k in request_core : continue
101+ if k in request_core :
102+ continue
101103 extra_params .update ({k : v })
102104 del request_args [k ]
103- if request_params :
105+ if request_params and getattr ( request_params , 'update' ) :
104106 request_args ['params' ].update (extra_params )
105- else :
107+ elif extra_params :
106108 request_args ['params' ] = extra_params
107109
108110 return request_args
@@ -116,14 +118,42 @@ def _request(self, verb, request, **kwargs):
116118 :param kwargs: Keyword args to request
117119 """
118120 request = self .base_url + request
119- parsed_args = self ._parse_args (kwargs )
120- response = self .session .request (verb , request , ** parsed_args )
121+ self ._parse_args (kwargs )
122+ response = self .session .request (verb , request , ** kwargs )
121123 self .requests_remaining = response .headers .get (
122- 'x-ratelimit-remaining' ,- 1 )
124+ 'x-ratelimit-remaining' , - 1 )
123125 error = GithubError (response )
124126 error .process ()
125127
126128 return response
127129
130+ return response
131+
128132class Github (GithubCore ):
129- pass
133+ """ Library enter """
134+
135+ def __init__ (self , * args ):
136+ super (Github , self ).__init__ ()
137+ self .authenticated = False
138+ auth = len (args )
139+ if auth == 2 : # Basic auth
140+ self .session .auth = tuple (map (str , args ))
141+ self .authenticated = True
142+ elif auth == 1 : # Token oauth
143+ raise NotImplementedError
144+ elif auth > 2 :
145+ raise TypeError ("user, password or token" )
146+
147+ @property
148+ def users (self ):
149+ if self .authenticated :
150+ return users .AuthUser (self )
151+ else :
152+ return users .User (self )
153+
154+ @property
155+ def gists (self ):
156+ if self .authenticated :
157+ return gists .AuthGist (self )
158+ else :
159+ return gists .Gist (self )
0 commit comments