mirror of
https://github.com/beetbox/beets.git
synced 2025-12-15 21:14:19 +01:00
Error handling for 'filesize' field
- Logs a warning and returns 0 if getsize fails - Add tests for this Fix #1326
This commit is contained in:
parent
e1e46df1b3
commit
9cdd541943
2 changed files with 24 additions and 1 deletions
|
|
@ -421,7 +421,7 @@ class Item(LibModel):
|
|||
getters = plugins.item_field_getters()
|
||||
getters['singleton'] = lambda i: i.album_id is None
|
||||
# Filesize is given in bytes
|
||||
getters['filesize'] = lambda i: os.path.getsize(syspath(i.path))
|
||||
getters['filesize'] = lambda i: i.try_filesize()
|
||||
return getters
|
||||
|
||||
@classmethod
|
||||
|
|
@ -605,6 +605,13 @@ class Item(LibModel):
|
|||
"""
|
||||
return int(os.path.getmtime(syspath(self.path)))
|
||||
|
||||
def try_filesize(self):
|
||||
try:
|
||||
return os.path.getsize(syspath(self.path))
|
||||
except (OSError, Exception) as exc:
|
||||
log.warning(u'could not get filesize: {0}', exc)
|
||||
return 0
|
||||
|
||||
# Model methods.
|
||||
|
||||
def remove(self, delete=False, with_album=True):
|
||||
|
|
|
|||
|
|
@ -1172,6 +1172,22 @@ class ItemReadTest(unittest.TestCase):
|
|||
item.read('/thisfiledoesnotexist')
|
||||
|
||||
|
||||
class FilesizeTest(unittest.TestCase, TestHelper):
|
||||
def setUp(self):
|
||||
self.setup_beets()
|
||||
|
||||
def tearDown(self):
|
||||
self.teardown_beets()
|
||||
|
||||
def test_filesize(self):
|
||||
item = self.add_item_fixture()
|
||||
self.assertNotEquals(item.filesize, 0)
|
||||
|
||||
def test_nonexistent_file(self):
|
||||
item = beets.library.Item()
|
||||
self.assertEqual(item.filesize, 0)
|
||||
|
||||
|
||||
class ParseQueryTest(unittest.TestCase):
|
||||
def test_parse_invalid_query_string(self):
|
||||
with self.assertRaises(beets.dbcore.InvalidQueryError) as raised:
|
||||
|
|
|
|||
Loading…
Reference in a new issue