11import requests
2- from helpers .error import ImgurClientError
2+ from imgur .models .album import Album
3+ from imgur .models .image import Image
34from imgur .models .account import Account
5+ from imgur .models .comment import Comment
6+ from helpers .error import ImgurClientError
47from imgur .models .gallery_album import GalleryAlbum
58from imgur .models .gallery_image import GalleryImage
9+ from imgur .models .account_settings import AccountSettings
610
711API_URL = 'https://api.imgur.com/'
812
@@ -79,20 +83,37 @@ def make_request(self, method, route, data=None):
7983 header = self .prepare_headers ()
8084 response = method_to_call (url , headers = header , data = data )
8185
86+ # TODO: Add rate-limit checks
87+
8288 try :
8389 response_data = response .json ()
84-
85- if 'error' in response_data ['data' ]:
86- raise ImgurClientError (response_data ['data' ]['error' ], response .status_code )
8790 except :
8891 raise ImgurClientError ('JSON decoding of response failed.' )
8992
93+ if isinstance (response_data ['data' ], dict ) and 'error' in response_data ['data' ]:
94+ raise ImgurClientError (response_data ['data' ]['error' ], response .status_code )
95+
9096 return response_data ['data' ]
9197
9298 def validate_user_context (self , username ):
9399 if username == 'me' and self .auth is None :
94100 raise ImgurClientError ('\' me\' can only be used in the authenticated context.' )
95101
102+ def logged_in (self ):
103+ if self .auth is None :
104+ raise ImgurClientError ('Must be logged in to complete request.' )
105+
106+ @staticmethod
107+ def build_gallery_images_and_albums (items ):
108+ result = []
109+ for item in items :
110+ if item ['is_album' ]:
111+ result .append (GalleryAlbum (item ))
112+ else :
113+ result .append (GalleryImage (item ))
114+
115+ return result
116+
96117 # Account-related endpoints
97118 def get_account (self , username ):
98119 self .validate_user_context (username )
@@ -109,13 +130,95 @@ def get_account(self, username):
109130
110131 def get_gallery_favorites (self , username ):
111132 self .validate_user_context (username )
112- favorites = self .make_request ('GET' , 'account/%s/gallery_favorites' % username )
133+ gallery_favorites = self .make_request ('GET' , 'account/%s/gallery_favorites' % username )
113134
114- result = []
115- for favorite in favorites :
116- if favorite ['is_album' ]:
117- result .append (GalleryAlbum (favorite ))
118- else :
119- result .append (GalleryImage (favorite ))
135+ return self .build_gallery_images_and_albums (gallery_favorites )
136+
137+ def get_account_favorites (self , username ):
138+ self .validate_user_context (username )
139+ favorites = self .make_request ('GET' , 'account/%s/favorites' % username )
140+
141+ return self .build_gallery_images_and_albums (favorites )
142+
143+ def get_account_submissions (self , username , page = 0 ):
144+ self .validate_user_context (username )
145+ submissions = self .make_request ('GET' , 'account/%s/submissions/%d' % (username , page ))
146+
147+ return self .build_gallery_images_and_albums (submissions )
148+
149+ def get_account_settings (self , username ):
150+ self .logged_in ()
151+ settings = self .make_request ('GET' , 'account/%s/settings' % username )
152+
153+ return AccountSettings (
154+ settings ['email' ],
155+ settings ['high_quality' ],
156+ settings ['public_images' ],
157+ settings ['album_privacy' ],
158+ settings ['pro_expiration' ],
159+ settings ['accepted_gallery_terms' ],
160+ settings ['active_emails' ],
161+ settings ['messaging_enabled' ],
162+ settings ['blocked_users' ]
163+ )
164+
165+ def change_account_settings (self , username , fields ):
166+ allowed_fields = {
167+ 'bio' , 'public_images' , 'messaging_enabled' , 'album_privacy' , 'accepted_gallery_terms' , 'username'
168+ }
120169
121- return result
170+ post_data = {setting : fields [setting ] for setting in set (allowed_fields ).intersection (fields .keys ())}
171+
172+ return self .make_request ('POST' , 'account/%s/settings' % username , post_data )
173+
174+ def get_email_verification_status (self , username ):
175+ self .logged_in ()
176+ self .validate_user_context (username )
177+ return self .make_request ('GET' , 'account/%s/verifyemail' % username )
178+
179+ def send_verification_email (self , username ):
180+ self .logged_in ()
181+ self .validate_user_context (username )
182+ return self .make_request ('POST' , 'account/%s/verifyemail' % username )
183+
184+ def get_account_albums (self , username , page = 0 ):
185+ self .validate_user_context (username )
186+
187+ albums = self .make_request ('GET' , 'account/%s/albums/%d' % (username , page ))
188+ return [Album (album ) for album in albums ]
189+
190+ def get_account_album_ids (self , username , page = 0 ):
191+ self .validate_user_context (username )
192+ return self .make_request ('GET' , 'account/%s/albums/ids/%d' % (username , page ))
193+
194+ def get_account_album_count (self , username ):
195+ self .validate_user_context (username )
196+ return self .make_request ('GET' , 'account/%s/albums/count' % username )
197+
198+ def get_account_comments (self , username , sort = 'newest' , page = 0 ):
199+ self .validate_user_context (username )
200+ comments = self .make_request ('GET' , 'account/%s/comments/%s/%s' % (username , sort , page ))
201+
202+ return [Comment (comment ) for comment in comments ]
203+
204+ def get_account_comment_ids (self , username , sort = 'newest' , page = 0 ):
205+ self .validate_user_context (username )
206+ return self .make_request ('GET' , 'account/%s/comments/ids/%s/%s' % (username , sort , page ))
207+
208+ def get_account_comment_count (self , username ):
209+ self .validate_user_context (username )
210+ return self .make_request ('GET' , 'account/%s/comments/count' % username )
211+
212+ def get_account_images (self , username , page = 0 ):
213+ self .validate_user_context (username )
214+ images = self .make_request ('GET' , 'account/%s/images/%d' % (username , page ))
215+
216+ return [Image (image ) for image in images ]
217+
218+ def get_account_image_ids (self , username , page = 0 ):
219+ self .validate_user_context (username )
220+ return self .make_request ('GET' , 'account/%s/images/ids/%d' % (username , page ))
221+
222+ def get_account_images_count (self , username , page = 0 ):
223+ self .validate_user_context (username )
224+ return self .make_request ('GET' , 'account/%s/images/ids/%d' % (username , page ))
0 commit comments