11#!/usr/bin/env python3
22
3- import base64 , os .path , time as dt
3+ import base64
4+ import os .path
5+ import time as dt
6+ from .imgur import Imgur
7+ from .ratelimit import RateLimit
8+ from .auth .anonymous import Anonymous
9+ from .auth .accesstoken import AccessToken
410
511try :
6- from urllib .request import Request as UrlLibRequest
7- from urllib .parse import urlencode as UrlLibEncode
12+ from urllib .request import Request as urllibrequest
13+ from urllib .parse import urlencode as urllibencode
814except ImportError :
9- from urllib2 import Request as UrlLibRequest
10- from urllib import urlencode as UrlLibEncode
11-
12- from .imgur import imgur
13- from .ratelimit import ratelimit
14- from .auth .accesstoken import accesstoken
15- from .auth .anonymous import anonymous
15+ from urllib2 import Request as urllibrequest
16+ from urllib import urlencode as urllibencode
1617
17- class factory :
1818
19+ class Factory :
1920 API_URL = "https://api.imgur.com/"
2021
2122 def __init__ (self , config ):
@@ -26,65 +27,72 @@ def __init__(self, config):
2627 def get_api_url (self ):
2728 return self .API_URL
2829
29- def build_api (self , auth = None , ratelimit = None ):
30+ def build_api (self , auth = None , rate_limit = None ):
3031 if auth is None :
3132 auth = self .build_anonymous_auth ()
32- if ratelimit is None :
33- ratelimit = self .build_rate_limit ()
34- return imgur (self .config ['client_id' ], self .config ['secret' ], auth , ratelimit )
33+
34+ if rate_limit is None :
35+ rate_limit = self .build_rate_limit ()
36+
37+ return Imgur (self .config ['client_id' ], self .config ['secret' ], auth , rate_limit )
3538
3639 def build_anonymous_auth (self ):
37- return anonymous (self .config ['client_id' ])
40+ return Anonymous (self .config ['client_id' ])
3841
39- def build_oauth (self , access , refresh , expire_time = None ):
42+ @staticmethod
43+ def build_oauth (access , refresh , expire_time = None ):
4044 now = int (dt .time ())
4145 if expire_time is None :
42- return accesstoken (access , refresh , now )
46+ return AccessToken (access , refresh , now )
4347 else :
44- return accesstoken (access , refresh , expire_time )
48+ return AccessToken (access , refresh , expire_time )
4549
46- def build_request (self , endpoint , data = None , method = None ):
47- '''Expects an endpoint like 'image.json' or a tuple like ('gallery', 'hot', 'viral', '0').
48-
49- Prepends 3/ and appends \.json to the tuple-form, not the endpoint form.'''
50+ def build_request (self , endpoint , data = None , method = None ):
51+ """Expects an endpoint like 'image.json' or a tuple like ('gallery', 'hot', 'viral', '0').
52+ Prepends 3/ and appends \.json to the tuple-form, not the endpoint form."""
5053 if isinstance (endpoint , str ):
5154 url = self .API_URL + endpoint
5255 else :
5356 url = self .API_URL + '3/' + ('/' .join (endpoint )) + ".json"
5457
55- req = UrlLibRequest (url )
58+ req = urllibrequest (url )
5659 if data is not None :
57- req .add_data (UrlLibEncode (data ).encode ('utf-8' ))
60+ req .add_data (urllibencode (data ).encode ('utf-8' ))
5861
5962 if method is not None :
6063 # python urllib2 is broken... http://stackoverflow.com/a/111988
6164 req .get_method = lambda : method
65+
6266 return req
63-
64- def build_rate_limit (self , limits = None ):
65- '''If none, defaults to fresh rate limits. Else expects keys "client_limit", "user_limit", "user_reset"'''
67+
68+ @staticmethod
69+ def build_rate_limit (limits = None ):
70+ """If none, defaults to fresh rate limits. Else expects keys \" client_limit\" , \" user_limit\" , \" user_reset\" """
6671 if limits is not None :
67- return ratelimit (limits ['client_limit' ], limits ['user_limit' ], limits ['user_reset' ])
72+ return RateLimit (limits ['client_limit' ], limits ['user_limit' ], limits ['user_reset' ])
6873 else :
69- return ratelimit ()
74+ return RateLimit ()
7075
7176 def build_rate_limits_from_server (self , api ):
72- ''' Get the rate limits for this application and build a rate limit model from it.'''
77+ """ Get the rate limits for this application and build a rate limit model from it."""
7378 req = self .build_request ('credits' )
7479 res = api .retrieve (req )
75- return ratelimit (res ['ClientRemaining' ], res ['UserRemaining' ], res ['UserReset' ])
7680
77-
78- def build_request_upload_from_path (self , path , params = dict ()):
81+ return RateLimit (res ['ClientRemaining' ], res ['UserRemaining' ], res ['UserReset' ])
82+
83+ def build_request_upload_from_path (self , path , params = dict ()):
7984 fd = open (path , 'rb' )
8085 contents = fd .read ()
8186 b64 = base64 .b64encode (contents )
87+
8288 data = {
8389 'image' : b64 ,
8490 'type' : 'base64' ,
8591 'name' : os .path .basename (path )
8692 }
93+
8794 data .update (params )
95+
8896 return self .build_request (('upload' ,), data )
8997
9098 def build_request_oauth_token_swap (self , grant_type , token ):
@@ -96,7 +104,7 @@ def build_request_oauth_token_swap(self, grant_type, token):
96104
97105 if grant_type == 'authorization_code' :
98106 data ['code' ] = token
99- if grant_type == 'pin' :
107+ elif grant_type == 'pin' :
100108 data ['pin' ] = token
101109
102110 return self .build_request ('oauth2/token' , data )
@@ -108,4 +116,5 @@ def build_request_oauth_refresh(self, refresh_token):
108116 'client_secret' : self .config ['secret' ],
109117 'grant_type' : 'refresh_token'
110118 }
119+
111120 return self .build_request ('oauth2/token' , data )
0 commit comments