Merge branch 'devel' of dev.sourcefabric.org:airtime into devel

This commit is contained in:
Martin Konecny 2012-08-15 18:31:07 -04:00
commit 45a4c8d896
15 changed files with 269 additions and 144 deletions

View file

@ -65,8 +65,6 @@ class BaseListener(object):
self.signal = signal
class OrganizeListener(BaseListener, pyinotify.ProcessEvent, Loggable):
# this class still don't handle the case where a dir was copied recursively
def process_IN_CLOSE_WRITE(self, event):
self.process_to_organize(event)
# got cookie

View file

@ -51,7 +51,7 @@ airtime_special = {
"MDATA_KEY_DURATION" :
lambda m: format_length(getattr(m.info, u'length', 0.0)),
"MDATA_KEY_BITRATE" :
lambda m: getattr(m.info, "bitrate", 0),
lambda m: getattr(m.info, "bitrate", ''),
"MDATA_KEY_SAMPLERATE" :
lambda m: getattr(m.info, u'sample_rate', 0),
"MDATA_KEY_MIME" :

View file

@ -62,7 +62,7 @@ def partition(f, alist):
Partition is very similar to filter except that it also returns the
elements for which f return false but in a tuple.
>>> partition(lambda x : x > 3, [1,2,3,4,5,6])
[4,5,6],[1,2,3]
([4, 5, 6], [1, 2, 3])
"""
return (filter(f, alist), filter(lambda x: not f(x), alist))
@ -104,6 +104,8 @@ def extension(path):
I.e. interpreter won't enforce None checks on the programmer
>>> extension("testing.php")
'php'
>>> extension("a.b.c.d.php")
'php'
>>> extension('/no/extension')
''
>>> extension('/path/extension.ml')
@ -117,15 +119,17 @@ def no_extension_basename(path):
"""
returns the extensionsless basename of a filepath
>>> no_extension_basename("/home/test.mp3")
'test'
u'test'
>>> no_extension_basename("/home/test")
'test'
u'test'
>>> no_extension_basename('blah.ml')
'blah'
u'blah'
>>> no_extension_basename('a.b.c.d.mp3')
u'a.b.c.d'
"""
base = unicode(os.path.basename(path))
if extension(base) == "": return base
else: return base.split(".")[-2]
else: return '.'.join(base.split(".")[0:-1])
def walk_supported(directory, clean_empties=False):
"""
@ -203,16 +207,16 @@ def parse_int(s):
Tries very hard to get some sort of integer result from s. Defaults to 0
when it failes
>>> parse_int("123")
123
'123'
>>> parse_int("123saf")
123
'123'
>>> parse_int("asdf")
0
''
"""
if s.isdigit(): return s
else:
try : return reduce(op.add, takewhile(lambda x: x.isdigit(), s))
except: return 0
try : return str(reduce(op.add, takewhile(lambda x: x.isdigit(), s)))
except: return ''
def normalized_metadata(md, original_path):
"""
@ -239,14 +243,13 @@ def normalized_metadata(md, original_path):
# could possibly lead to subtle bugs down the road. Plus the following
# approach gives us the flexibility to use different defaults for different
# attributes
new_md = remove_whitespace(new_md)
new_md = apply_rules_dict(new_md, format_rules)
new_md = default_to(dictionary=new_md, keys=['MDATA_KEY_TITLE'],
default=no_extension_basename(original_path))
new_md = remove_whitespace(new_md)
new_md = default_to(dictionary=new_md, keys=path_md,
default=u'')
default=no_extension_basename(original_path))
new_md = default_to(dictionary=new_md, keys=path_md, default=u'')
new_md = default_to(dictionary=new_md, keys=['MDATA_KEY_FTYPE'],
default=u'audioclip')
default=u'audioclip')
# In the case where the creator is 'Airtime Show Recorder' we would like to
# format the MDATA_KEY_TITLE slightly differently
# Note: I don't know why I'm doing a unicode string comparison here

View file

@ -67,4 +67,9 @@ class TestMMP(unittest.TestCase):
self.assertTrue( mmp.sub_path(d1, f1) )
self.assertTrue( mmp.sub_path(d2, f1) )
def test_parse_int(self):
self.assertEqual( mmp.parse_int("123"), "123" )
self.assertEqual( mmp.parse_int("123asf"), "123" )
self.assertEqual( mmp.parse_int("asdf"), "" )
if __name__ == '__main__': unittest.main()