[Checkins] SVN: Sandbox/luciano/kirbi/src/kirbi/ added function to
convert from ISBN13 to ISBN10
Luciano Ramalho
luciano at ramalho.org
Sat Aug 4 15:34:29 EDT 2007
Log message for revision 78585:
added function to convert from ISBN13 to ISBN10
Changed:
D Sandbox/luciano/kirbi/src/kirbi/fetch/
U Sandbox/luciano/kirbi/src/kirbi/isbn.py
U Sandbox/luciano/kirbi/src/kirbi/tests/test_isbn.py
-=-
Modified: Sandbox/luciano/kirbi/src/kirbi/isbn.py
===================================================================
--- Sandbox/luciano/kirbi/src/kirbi/isbn.py 2007-08-04 14:52:48 UTC (rev 78584)
+++ Sandbox/luciano/kirbi/src/kirbi/isbn.py 2007-08-04 19:34:28 UTC (rev 78585)
@@ -78,13 +78,28 @@
return isValidISBN10(digits) or isValidISBN13(digits)
def convertISBN10toISBN13(digits):
- digits = filterDigits(digits)
+ if len(digits) > 10:
+ digits = filterDigits(digits)
if len(digits) != 10:
raise ValueError, '%s is not a valid ISBN-10'
else:
digits = '978' + digits[:-1]
return digits + checksumEAN(digits)
+def convertISBN13toISBN10(digits):
+ if len(digits) > 13:
+ digits = filterDigits(digits)
+ if len(digits) != 13:
+ raise ValueError, '%s is not a valid ISBN-13'
+ if digits.startswith('978'):
+ digits = digits[3:-1]
+ return digits + checksumISBN10(digits)
+ elif digits.startswith('979'):
+ raise ValueError, '%s is a valid ISBN-13 but has no ISBN-10 equivalent'
+ else:
+ raise ValueError, '%s is not a valid ISBN-13 (wrong prefix)'
+
+
# Note: ISBN group identifiers related to languages
# http://www.isbn-international.org/en/identifiers/allidentifiers.html
# http://www.loc.gov/standards/iso639-2/php/code_list.php
Modified: Sandbox/luciano/kirbi/src/kirbi/tests/test_isbn.py
===================================================================
--- Sandbox/luciano/kirbi/src/kirbi/tests/test_isbn.py 2007-08-04 14:52:48 UTC (rev 78584)
+++ Sandbox/luciano/kirbi/src/kirbi/tests/test_isbn.py 2007-08-04 19:34:28 UTC (rev 78585)
@@ -2,16 +2,17 @@
import unittest
from kirbi.isbn import filterDigits, isValidISBN10, isValidEAN, isValidISBN13
-from kirbi.isbn import convertISBN13toLang
+from kirbi.isbn import convertISBN13toISBN10, convertISBN13toLang
class IsbnTestCase(unittest.TestCase):
def setUp(self):
self.digits10ok0 = '0596002920'
+ self.digits13ok0 = '9780596002923'
+ self.digits10okX = '013147149X'
+ self.digits13okX = '9780131471498'
self.digits10ok2 = ' 853-521-714-2 '
self.digits10ok9 = '0-3162-8929-9'
- self.digits10okX = '013147149X'
self.digits10nok = '0131471490'
- self.digits13ok0 = '9780316289290'
self.digits13ok8 = '9788535217148' # '978-85-352-1714-8'
self.digits13nok = '9780596100679'
self.digits13isbn = '9791231231233'
@@ -42,6 +43,13 @@
self.assertFalse(isValidISBN13(self.digits13nok))
self.assertFalse(isValidISBN13(self.digits10ok0))
+ def testConvertISBN13toISBN10(self):
+ self.assertEquals(self.digits10ok0,
+ convertISBN13toISBN10(self.digits13ok0))
+ self.assertEquals(self.digits10okX,
+ convertISBN13toISBN10(self.digits13okX))
+
+
def testConvertISBN13toLang(self):
self.assertEquals('en',convertISBN13toLang('0001234567890'))
self.assertEquals('en',convertISBN13toLang('0000000000000'))
More information about the Checkins
mailing list