@@ -92,12 +92,25 @@ def download_set(set_id, get_filename, size_label=None):
9292 @param get_filename: Function, function that creates a filename for the photo
9393 @param size_label: str|None, size to download (or None for largest available)
9494 """
95- suffix = " ({})" .format (size_label ) if size_label else ""
9695 pset = Flickr .Photoset (id = set_id )
96+ download_list (pset , pset .title , get_filename , size_label )
97+
98+
99+ def download_list (pset , photos_title , get_filename , size_label ):
100+ """
101+ Download all the photos in the given photo list
102+
103+ @param pset: FlickrList, photo list to download
104+ @param photos_title: str, name of the photo list
105+ @param get_filename: Function, function that creates a filename for the photo
106+ @param size_label: str|None, size to download (or None for largest available)
107+ """
97108 photos = pset .getPhotos ()
98109 pagenum = 2
99110 while True :
100111 try :
112+ if pagenum > photos .info .pages :
113+ break
101114 page = pset .getPhotos (page = pagenum )
102115 photos .extend (page )
103116 pagenum += 1
@@ -106,8 +119,10 @@ def download_set(set_id, get_filename, size_label=None):
106119 break
107120 raise
108121
122+ suffix = " ({})" .format (size_label ) if size_label else ""
123+
109124 # we need to convert pathname separator to something else to create a valid directory
110- dirname = pset . title .replace (os .sep , "_" )
125+ dirname = photos_title .replace (os .sep , "_" )
111126 if not os .path .exists (dirname ):
112127 os .mkdir (dirname )
113128
@@ -151,6 +166,18 @@ def download_user(username, get_filename, size_label):
151166 download_set (photoset .id , get_filename , size_label )
152167
153168
169+ def download_user_photos (username , get_filename , size_label ):
170+ """
171+ Download all the photos owned by the given user.
172+
173+ @param username: str, username
174+ @param get_filename: Function, function that creates a filename for the photo
175+ @param size_label: str|None, size to download (or None for largest available)
176+ """
177+ user = Flickr .Person .findByUserName (username )
178+ download_list (user , username , get_filename , size_label )
179+
180+
154181def print_sets (username ):
155182 """
156183 Print all sets for the given user
@@ -194,6 +221,8 @@ def main():
194221 help = 'List photosets for a user' )
195222 parser .add_argument ('-d' , '--download' , type = str , metavar = 'SET_ID' ,
196223 help = 'Download the given set' )
224+ parser .add_argument ('-p' , '--download_user_photos' , type = str , metavar = 'USERNAME' ,
225+ help = 'Download all photos for a given user' )
197226 parser .add_argument ('-u' , '--download_user' , type = str , metavar = 'USERNAME' ,
198227 help = 'Download all sets for a given user' )
199228 parser .add_argument ('-q' , '--quality' , type = str , metavar = 'SIZE_LABEL' ,
@@ -227,13 +256,15 @@ def main():
227256 print_sets (args .list )
228257 return 0
229258
230- if args .download or args .download_user :
259+ if args .download or args .download_user or args . download_user_photos :
231260 try :
232261 get_filename = get_filename_handler (args .naming )
233262 if args .download :
234263 download_set (args .download , get_filename , args .quality )
235- else :
264+ elif args . download_user :
236265 download_user (args .download_user , get_filename , args .quality )
266+ else :
267+ download_user_photos (args .download_user_photos , get_filename , args .quality )
237268 except KeyboardInterrupt :
238269 print ('Forcefully aborting. Last photo download might be partial :(' , file = sys .stderr )
239270 return 0
0 commit comments