http://www.mediawiki.org/wiki/Special:Code/pywikipedia/10387
Revision: 10387
Author: xqt
Date: 2012-06-20 14:16:58 +0000 (Wed, 20 Jun 2012)
Log Message:
-----------
shorten file name title, (bug #3536400)
Modified Paths:
--------------
trunk/pywikipedia/flickrripper.py
Modified: trunk/pywikipedia/flickrripper.py
===================================================================
--- trunk/pywikipedia/flickrripper.py 2012-06-20 13:58:25 UTC (rev 10386)
+++ trunk/pywikipedia/flickrripper.py 2012-06-20 14:16:58 UTC (rev 10387)
@@ -140,40 +140,43 @@
return rawDescription.decode('utf-8')
-def getFilename(photoInfo=None, site=pywikibot.getSite(u'commons',
u'commons'),
- project=u'Flickr'):
- ''' Build a good filename for the upload based on the username and the
+def getFilename(photoInfo=None, site=None, project=u'Flickr'):
+ """ Build a good filename for the upload based on the username and
the
title. Prevents naming collisions.
- '''
+ """
+ if not site:
+ site = pywikibot.getSite(u'commons', u'commons')
username =
photoInfo.find('photo').find('owner').attrib['username']
title = photoInfo.find('photo').find('title').text
if title:
- title = cleanUpTitle(title)
- else:
- title = u''
+ title = cleanUpTitle(title)
- if title == u'':
+ if not title:
+ #find the max length for a mw title
+ maxBytes = 240 - len(project.encode('utf-8')) \
+ - len(username.encode('utf-8'))
description = photoInfo.find('photo').find('description').text
if description:
- if len(description)>120:
- description = description[0 : 120]
- title = cleanUpTitle(description)
+ descBytes = len(description.encode('utf-8'))
+ if descBytes > maxBytes:
+ # maybe we cut more than needed, anyway we do it
+ items = max(0, len(description) - maxBytes + descBytes)
+ description = description[:items]
+ title = cleanUpTitle(description)
else:
title = u''
# Should probably have the id of the photo as last resort.
-
if pywikibot.Page(site, u'File:%s - %s - %s.jpg'
- % (title, project, username) ).exists():
+ % (title, project, username)).exists():
i = 1
while True:
- if (pywikibot.Page(site, u'File:%s - %s - %s (%s).jpg'
- % (title, project, username, str(i))).exists()):
- i = i + 1
+ if (pywikibot.Page(site, u'File:%s - %s - %s (%d).jpg'
+ % (title, project, username, i)).exists()):
+ i += 1
else:
- return u'%s - %s - %s (%s).jpg' % (title, project, username,
- str(i))
+ return u'%s - %s - %s (%d).jpg' % (title, project, username, i)
else:
return u'%s - %s - %s.jpg' % (title, project, username)