|
|
|
@ -317,9 +317,10 @@ def timeconvert(timestr):
|
|
|
|
|
timestamp = email.utils.mktime_tz(timetuple)
|
|
|
|
|
return timestamp
|
|
|
|
|
|
|
|
|
|
def sanitize_filename(s, restricted=False):
|
|
|
|
|
def sanitize_filename(s, restricted=False, is_id=False):
|
|
|
|
|
"""Sanitizes a string so it could be used as part of a filename.
|
|
|
|
|
If restricted is set, use a stricter subset of allowed characters.
|
|
|
|
|
Set is_id if this is not an arbitrary string, but an ID that should be kept if possible
|
|
|
|
|
"""
|
|
|
|
|
def replace_insane(char):
|
|
|
|
|
if char == '?' or ord(char) < 32 or ord(char) == 127:
|
|
|
|
@ -337,14 +338,15 @@ def sanitize_filename(s, restricted=False):
|
|
|
|
|
return char
|
|
|
|
|
|
|
|
|
|
result = u''.join(map(replace_insane, s))
|
|
|
|
|
while '__' in result:
|
|
|
|
|
result = result.replace('__', '_')
|
|
|
|
|
result = result.strip('_')
|
|
|
|
|
# Common case of "Foreign band name - English song title"
|
|
|
|
|
if restricted and result.startswith('-_'):
|
|
|
|
|
result = result[2:]
|
|
|
|
|
if not result:
|
|
|
|
|
result = '_'
|
|
|
|
|
if not is_id:
|
|
|
|
|
while '__' in result:
|
|
|
|
|
result = result.replace('__', '_')
|
|
|
|
|
result = result.strip('_')
|
|
|
|
|
# Common case of "Foreign band name - English song title"
|
|
|
|
|
if restricted and result.startswith('-_'):
|
|
|
|
|
result = result[2:]
|
|
|
|
|
if not result:
|
|
|
|
|
result = '_'
|
|
|
|
|
return result
|
|
|
|
|
|
|
|
|
|
def orderedSet(iterable):
|
|
|
|
|