[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