Skip to content

Commit

Permalink
Merge branch 'seconds'
Browse files Browse the repository at this point in the history
See pull-request #28

only a small conflicts on imports

Conflicts:
	discid/disc.py
  • Loading branch information
JonnyJD committed Apr 26, 2013
2 parents 3124061 + 5b11164 commit 328f266
Show file tree
Hide file tree
Showing 7 changed files with 55 additions and 18 deletions.
12 changes: 10 additions & 2 deletions discid/disc.py
Original file line number Diff line number Diff line change
Expand Up @@ -21,7 +21,7 @@
from ctypes import c_int, c_void_p, c_char_p, c_uint

from discid.libdiscid import _LIB, FEATURES
from discid.util import _encode, _decode
from discid.util import _encode, _decode, SECTORS_PER_SECOND
from discid.track import Track


Expand Down Expand Up @@ -270,9 +270,17 @@ def last_track_num(self):

@property
def sectors(self):
"""Total sector count"""
"""Total length in sectors"""
return self._get_sectors()

length = sectors
"""This is an alias for :attr:`sectors`"""

@property
def seconds(self):
"""Total length in seconds"""
return self.sectors // SECTORS_PER_SECOND

@property
def mcn(self):
"""This is the Media Catalogue Number (MCN/UPC/EAN)
Expand Down
14 changes: 11 additions & 3 deletions discid/track.py
Original file line number Diff line number Diff line change
Expand Up @@ -21,7 +21,7 @@
from ctypes import c_int, c_void_p, c_char_p

from discid.libdiscid import _LIB
from discid.util import _decode
from discid.util import _decode, SECTORS_PER_SECOND


class Track(object):
Expand Down Expand Up @@ -78,10 +78,18 @@ def offset(self):
return self._get_track_offset()

@property
def length(self):
"""The track length"""
def sectors(self):
"""The track length in sectors"""
return self._get_track_length()

length = sectors
"""This is an alias for :attr:`sectors`"""

@property
def seconds(self):
"""Track length in seconds"""
return self.sectors // SECTORS_PER_SECOND

@property
def isrc(self):
"""The International Standard Recording Code
Expand Down
2 changes: 2 additions & 0 deletions discid/util.py
Original file line number Diff line number Diff line change
Expand Up @@ -18,6 +18,8 @@
"""utility functions
"""

SECTORS_PER_SECOND = 75

def _encode(string):
"""Encode (unicode) string to byte string
"""
Expand Down
4 changes: 4 additions & 0 deletions doc/discid.rst
Original file line number Diff line number Diff line change
Expand Up @@ -39,6 +39,8 @@ Disc object
.. autoattribute:: first_track_num
.. autoattribute:: last_track_num
.. autoattribute:: sectors
.. autoattribute:: length
.. autoattribute:: seconds
.. autoattribute:: mcn
.. autoattribute:: tracks

Expand All @@ -50,7 +52,9 @@ Track object

.. autoattribute:: number
.. autoattribute:: offset
.. autoattribute:: sectors
.. autoattribute:: length
.. autoattribute:: seconds
.. autoattribute:: isrc

Exceptions
Expand Down
2 changes: 1 addition & 1 deletion doc/usage.rst
Original file line number Diff line number Diff line change
Expand Up @@ -52,7 +52,7 @@ An example for the TOC
disc = discid.put(first, last, offsets)
print("id: %s" % disc.id)
last_track = disc.tracks[disc.last_track_num - 1]
print("last track length: %s sectors" % last_track.length)
print("last track length: %s seconds" % last_track.seconds)

.. note:: The example disc has track 16 as a multimedia/data track.
The sector count for the disc is the ending sector for track 15!
Expand Down
21 changes: 12 additions & 9 deletions examples.py
Original file line number Diff line number Diff line change
Expand Up @@ -5,26 +5,29 @@
# this will load Libdiscid
import discid

SECTORS_PER_SECOND = 75

def simple_example():
disc = discid.read() # use default device
print("id: %s" % disc.id)
print("used %s as device" % discid.DEFAULT_DEVICE)
print("submit with:\n%s" % disc.submission_url)


def _length_str(seconds, sectors):
return "{min:>2.0f}:{sec:>02.0f} ({sectors:>6})".format(
min=(seconds // 60), sec=(seconds % 60), sectors=sectors)

def complex_example():
disc = discid.read("/dev/cdrom", ["mcn", "isrc"])
print("id: %s" % disc.id)
print("MCN: %s" % disc.mcn)
print("id:\t%s" % disc.id)
print("MCN:\t%s" % disc.mcn)
print("length:\t%s" % _length_str(disc.seconds, disc.sectors))
for track in disc.tracks:
seconds = track.length // SECTORS_PER_SECOND
length = "{min:>2.0f}:{sec:>02.0f} ({sectors:>6})".format(
min=(seconds // 60), sec=(seconds % 60), sectors=track.length)
length = _length_str(track.seconds, track.sectors)
print("{num:>2}: {offset:>6} {len}\tISRC: {isrc:13}".format(
num=track.number, offset=track.offset, len=length, isrc=track.isrc))

simple_example()
#complex_example()
if __name__ == "__main__":
simple_example()
#complex_example()

# vim:set shiftwidth=4 smarttab expandtab:
18 changes: 15 additions & 3 deletions test_discid.py
Original file line number Diff line number Diff line change
Expand Up @@ -88,6 +88,14 @@ def test_put_success(self):
self.assertEqual(disc.sectors, test_disc["offsets"][0])
track_offsets = [track.offset for track in disc.tracks]
self.assertEqual(track_offsets, test_disc["offsets"][1:])
self.assertEqual(disc.sectors,
disc.tracks[-1].offset + disc.tracks[-1].sectors)
self.assertEqual(disc.seconds,
disc.sectors // discid.util.SECTORS_PER_SECOND)
for track in disc.tracks:
self.assertEqual(track.seconds,
track.sectors // discid.util.SECTORS_PER_SECOND)



class TestClass(unittest.TestCase):
Expand All @@ -105,6 +113,8 @@ def test_emptyness(self):
self.assertFalse(self.disc.first_track_num)
self.assertFalse(self.disc.last_track_num)
self.assertFalse(self.disc.sectors)
self.assertFalse(self.disc.length)
self.assertFalse(self.disc.seconds)
self.assertFalse(self.disc.tracks)

def tearDown(self):
Expand Down Expand Up @@ -132,6 +142,8 @@ def test_read_simple(self):
self.assertTrue(disc.submission_url, "Invalid submission url")
self.assertEqual(disc.last_track_num, len(disc.tracks),
"Wrong amount of tracks")
self.assertEqual(disc.sectors,
disc.tracks[-1].offset + disc.tracks[-1].sectors)

for track in disc.tracks:
self.assertTrue(track.offset <= disc.sectors, "Invalid offset")
Expand All @@ -153,7 +165,7 @@ def test_read_simple(self):
last = disc.last_track_num
track_offsets = [track.offset for track in disc.tracks]
offsets = [disc.sectors] + track_offsets
track_lengths = [track.length for track in disc.tracks]
track_sectors = [track.sectors for track in disc.tracks]

disc = discid.put(first, last, offsets)
self.assertEqual(disc.id, disc_id, "different id after put")
Expand All @@ -170,8 +182,8 @@ def test_read_simple(self):
new_offsets = [track.offset for track in disc.tracks]
self.assertEqual(new_offsets, track_offsets,
"different offsets after put")
new_lengths = [track.length for track in disc.tracks]
self.assertEqual(new_lengths, track_lengths,
new_sectors = [track.sectors for track in disc.tracks]
self.assertEqual(new_sectors, track_sectors,
"different lengths after put")

def test_read_features(self):
Expand Down

0 comments on commit 328f266

Please sign in to comment.