Skip to content
This repository was archived by the owner on Nov 23, 2024. It is now read-only.

Commit 4de81d8

Browse files
Merge pull request #137 from vladak/duplicate_photo_handling
introduce FlickrDuplicate exception
2 parents a73ce2b + 214db58 commit 4de81d8

File tree

2 files changed

+28
-1
lines changed

2 files changed

+28
-1
lines changed

flickrapi/core.py

Lines changed: 12 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -245,7 +245,13 @@ def parse_xmlnode(self, rest_xml):
245245
return rsp
246246

247247
err = rsp.err[0]
248-
raise FlickrError('Error: %(code)s: %(msg)s' % err, code=err['code'])
248+
code = err['code']
249+
if int(code) == 9:
250+
dup_id = rsp.duplicate_photo_id[0].text
251+
raise FlickrDuplicate('Duplicate photo',
252+
duplicate_photo_id=dup_id)
253+
254+
raise FlickrError('Error: %(code)s: %(msg)s' % err, code=code)
249255

250256
@rest_parser('parsed-json', 'json')
251257
def parse_json(self, json_string):
@@ -293,6 +299,11 @@ def parse_etree(self, rest_xml):
293299

294300
err = rsp.find('err')
295301
code = err.attrib.get('code', None)
302+
if int(code) == 9:
303+
dup_id = rsp.find('duplicate_photo_id')
304+
raise FlickrDuplicate('Duplicate photo',
305+
duplicate_photo_id=dup_id.text)
306+
296307
raise FlickrError('Error: %(code)s: %(msg)s' % err.attrib, code=code)
297308

298309
def __getattr__(self, method_name):

flickrapi/exceptions.py

Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -25,6 +25,22 @@ def __init__(self, message, code=None):
2525
self.code = int(code)
2626

2727

28+
class FlickrDuplicate(Exception):
29+
"""Raised when Flickr detects duplicate photo being uploaded.
30+
31+
The duplicate detection only happens if the upload request contains
32+
the 'dedup_check' parameter set to either 1 or 2.
33+
34+
The exception contains ID of the duplicate photo as returned
35+
from the API call.
36+
37+
"""
38+
def __init__(self, message, duplicate_photo_id):
39+
super().__init__(self, message)
40+
41+
self.duplicate_photo_id = duplicate_photo_id
42+
43+
2844
class CancelUpload(Exception):
2945
"""Raise this exception in an upload/replace callback function to
3046
abort the upload.

0 commit comments

Comments
 (0)