home *** CD-ROM | disk | FTP | other *** search
/ Maximum CD 2010 November / maximum-cd-2010-11.iso / DiscContents / calibre-0.7.13.msi / file_284 (.txt) < prev    next >
Encoding:
Python Compiled Bytecode  |  2010-08-06  |  17.5 KB  |  427 lines

  1. # Source Generated with Decompyle++
  2. # File: in.pyc (Python 2.6)
  3.  
  4. import sys
  5. import os
  6. import string
  7. import time
  8. from pprint import pprint
  9. import unittest
  10. from test_all import db, dbshelve, test_support, verbose, have_threads, get_new_environment_path
  11. musicdata = {
  12.     1: ('Bad English', 'The Price Of Love', 'Rock'),
  13.     2: ('DNA featuring Suzanne Vega', "Tom's Diner", 'Rock'),
  14.     3: ('George Michael', 'Praying For Time', 'Rock'),
  15.     4: ('Gloria Estefan', 'Here We Are', 'Rock'),
  16.     5: ('Linda Ronstadt', "Don't Know Much", 'Rock'),
  17.     6: ('Michael Bolton', 'How Am I Supposed To Live Without You', 'Blues'),
  18.     7: ('Paul Young', 'Oh Girl', 'Rock'),
  19.     8: ('Paula Abdul', 'Opposites Attract', 'Rock'),
  20.     9: ('Richard Marx', "Should've Known Better", 'Rock'),
  21.     10: ('Rod Stewart', 'Forever Young', 'Rock'),
  22.     11: ('Roxette', 'Dangerous', 'Rock'),
  23.     12: ('Sheena Easton', 'The Lover In Me', 'Rock'),
  24.     13: ("Sinead O'Connor", 'Nothing Compares 2 U', 'Rock'),
  25.     14: ('Stevie B.', 'Because I Love You', 'Rock'),
  26.     15: ('Taylor Dayne', 'Love Will Lead You Back', 'Rock'),
  27.     16: ('The Bangles', 'Eternal Flame', 'Rock'),
  28.     17: ('Wilson Phillips', 'Release Me', 'Rock'),
  29.     18: ('Billy Joel', 'Blonde Over Blue', 'Rock'),
  30.     19: ('Billy Joel', 'Famous Last Words', 'Rock'),
  31.     20: ('Billy Joel', 'Lullabye (Goodnight, My Angel)', 'Rock'),
  32.     21: ('Billy Joel', 'The River Of Dreams', 'Rock'),
  33.     22: ('Billy Joel', 'Two Thousand Years', 'Rock'),
  34.     23: ('Janet Jackson', 'Alright', 'Rock'),
  35.     24: ('Janet Jackson', 'Black Cat', 'Rock'),
  36.     25: ('Janet Jackson', 'Come Back To Me', 'Rock'),
  37.     26: ('Janet Jackson', 'Escapade', 'Rock'),
  38.     27: ('Janet Jackson', 'Love Will Never Do (Without You)', 'Rock'),
  39.     28: ('Janet Jackson', 'Miss You Much', 'Rock'),
  40.     29: ('Janet Jackson', 'Rhythm Nation', 'Rock'),
  41.     30: ('Janet Jackson', 'State Of The World', 'Rock'),
  42.     31: ('Janet Jackson', 'The Knowledge', 'Rock'),
  43.     32: ('Spyro Gyra', 'End of Romanticism', 'Jazz'),
  44.     33: ('Spyro Gyra', 'Heliopolis', 'Jazz'),
  45.     34: ('Spyro Gyra', 'Jubilee', 'Jazz'),
  46.     35: ('Spyro Gyra', 'Little Linda', 'Jazz'),
  47.     36: ('Spyro Gyra', 'Morning Dance', 'Jazz'),
  48.     37: ('Spyro Gyra', 'Song for Lorraine', 'Jazz'),
  49.     38: ('Yes', 'Owner Of A Lonely Heart', 'Rock'),
  50.     39: ('Yes', 'Rhythm Of Love', 'Rock'),
  51.     40: ('Cusco', 'Dream Catcher', 'New Age'),
  52.     41: ('Cusco', 'Geronimos Laughter', 'New Age'),
  53.     42: ('Cusco', 'Ghost Dance', 'New Age'),
  54.     43: ('Blue Man Group', 'Drumbone', 'New Age'),
  55.     44: ('Blue Man Group', 'Endless Column', 'New Age'),
  56.     45: ('Blue Man Group', 'Klein Mandelbrot', 'New Age'),
  57.     46: ('Kenny G', 'Silhouette', 'Jazz'),
  58.     47: ('Sade', 'Smooth Operator', 'Jazz'),
  59.     48: ('David Arkenstone', 'Papillon (On The Wings Of The Butterfly)', 'New Age'),
  60.     49: ('David Arkenstone', 'Stepping Stars', 'New Age'),
  61.     50: ('David Arkenstone', 'Carnation Lily Lily Rose', 'New Age'),
  62.     51: ('David Lanz', 'Behind The Waterfall', 'New Age'),
  63.     52: ('David Lanz', "Cristofori's Dream", 'New Age'),
  64.     53: ('David Lanz', 'Heartsounds', 'New Age'),
  65.     54: ('David Lanz', 'Leaves on the Seine', 'New Age'),
  66.     99: ('unknown artist', 'Unnamed song', 'Unknown') }
  67.  
  68. class AssociateErrorTestCase(unittest.TestCase):
  69.     
  70.     def setUp(self):
  71.         self.filename = self.__class__.__name__ + '.db'
  72.         self.homeDir = get_new_environment_path()
  73.         self.env = db.DBEnv()
  74.         self.env.open(self.homeDir, db.DB_CREATE | db.DB_INIT_MPOOL)
  75.  
  76.     
  77.     def tearDown(self):
  78.         self.env.close()
  79.         self.env = None
  80.         test_support.rmtree(self.homeDir)
  81.  
  82.     
  83.     def test00_associateDBError(self):
  84.         if verbose:
  85.             print '\n', '-=' * 30
  86.             print 'Running %s.test00_associateDBError...' % self.__class__.__name__
  87.         
  88.         dupDB = db.DB(self.env)
  89.         dupDB.set_flags(db.DB_DUP)
  90.         dupDB.open(self.filename, 'primary', db.DB_BTREE, db.DB_CREATE)
  91.         secDB = db.DB(self.env)
  92.         secDB.open(self.filename, 'secondary', db.DB_BTREE, db.DB_CREATE)
  93.         
  94.         try:
  95.             
  96.             def f(a, b):
  97.                 return a + b
  98.  
  99.             dupDB.associate(secDB, f)
  100.         except db.DBError:
  101.             secDB.close()
  102.             dupDB.close()
  103.  
  104.         secDB.close()
  105.         dupDB.close()
  106.         self.fail('DBError exception was expected')
  107.  
  108.  
  109.  
  110. class AssociateTestCase(unittest.TestCase):
  111.     keytype = ''
  112.     envFlags = 0
  113.     dbFlags = 0
  114.     
  115.     def setUp(self):
  116.         self.filename = self.__class__.__name__ + '.db'
  117.         self.homeDir = get_new_environment_path()
  118.         self.env = db.DBEnv()
  119.         self.env.open(self.homeDir, db.DB_CREATE | db.DB_INIT_MPOOL | db.DB_INIT_LOCK | db.DB_THREAD | self.envFlags)
  120.  
  121.     
  122.     def tearDown(self):
  123.         self.closeDB()
  124.         self.env.close()
  125.         self.env = None
  126.         test_support.rmtree(self.homeDir)
  127.  
  128.     
  129.     def addDataToDB(self, d, txn = None):
  130.         for key, value in musicdata.items():
  131.             if type(self.keytype) == type(''):
  132.                 key = '%02d' % key
  133.             
  134.             d.put(key, '|'.join(value), txn = txn)
  135.         
  136.  
  137.     
  138.     def createDB(self, txn = None):
  139.         self.cur = None
  140.         self.secDB = None
  141.         self.primary = db.DB(self.env)
  142.         self.primary.set_get_returns_none(2)
  143.         if db.version() >= (4, 1):
  144.             self.primary.open(self.filename, 'primary', self.dbtype, db.DB_CREATE | db.DB_THREAD | self.dbFlags, txn = txn)
  145.         else:
  146.             self.primary.open(self.filename, 'primary', self.dbtype, db.DB_CREATE | db.DB_THREAD | self.dbFlags)
  147.  
  148.     
  149.     def closeDB(self):
  150.         if self.cur:
  151.             self.cur.close()
  152.             self.cur = None
  153.         
  154.         if self.secDB:
  155.             self.secDB.close()
  156.             self.secDB = None
  157.         
  158.         self.primary.close()
  159.         self.primary = None
  160.  
  161.     
  162.     def getDB(self):
  163.         return self.primary
  164.  
  165.     
  166.     def test01_associateWithDB(self):
  167.         if verbose:
  168.             print '\n', '-=' * 30
  169.             print 'Running %s.test01_associateWithDB...' % self.__class__.__name__
  170.         
  171.         self.createDB()
  172.         self.secDB = db.DB(self.env)
  173.         self.secDB.set_flags(db.DB_DUP)
  174.         self.secDB.set_get_returns_none(2)
  175.         self.secDB.open(self.filename, 'secondary', db.DB_BTREE, db.DB_CREATE | db.DB_THREAD | self.dbFlags)
  176.         self.getDB().associate(self.secDB, self.getGenre)
  177.         self.addDataToDB(self.getDB())
  178.         self.finish_test(self.secDB)
  179.  
  180.     
  181.     def test02_associateAfterDB(self):
  182.         if verbose:
  183.             print '\n', '-=' * 30
  184.             print 'Running %s.test02_associateAfterDB...' % self.__class__.__name__
  185.         
  186.         self.createDB()
  187.         self.addDataToDB(self.getDB())
  188.         self.secDB = db.DB(self.env)
  189.         self.secDB.set_flags(db.DB_DUP)
  190.         self.secDB.open(self.filename, 'secondary', db.DB_BTREE, db.DB_CREATE | db.DB_THREAD | self.dbFlags)
  191.         self.getDB().associate(self.secDB, self.getGenre, db.DB_CREATE)
  192.         self.finish_test(self.secDB)
  193.  
  194.     
  195.     def finish_test(self, secDB, txn = None):
  196.         vals = secDB.pget('Blues', txn = txn)
  197.         self.assertEqual(vals, None, vals)
  198.         vals = secDB.pget('Unknown', txn = txn)
  199.         if not vals[0] == 99:
  200.             pass
  201.         self.assert_(vals[0] == '99', vals)
  202.         vals[1].index('Unknown')
  203.         vals[1].index('Unnamed')
  204.         vals[1].index('unknown')
  205.         if verbose:
  206.             print 'Primary key traversal:'
  207.         
  208.         self.cur = self.getDB().cursor(txn)
  209.         count = 0
  210.         rec = self.cur.first()
  211.         while rec is not None:
  212.             if type(self.keytype) == type(''):
  213.                 self.assert_(int(rec[0]))
  214.             elif rec[0]:
  215.                 pass
  216.             self.assert_(type(rec[0]) == type(0))
  217.             count = count + 1
  218.             if verbose:
  219.                 print rec
  220.             
  221.             rec = getattr(self.cur, 'next')()
  222.         self.assertEqual(count, len(musicdata))
  223.         if verbose:
  224.             print 'Secondary key traversal:'
  225.         
  226.         self.cur = secDB.cursor(txn)
  227.         count = 0
  228.         vals = self.cur.pget('Unknown', flags = db.DB_LAST)
  229.         if not vals[1] == 99:
  230.             pass
  231.         self.assert_(vals[1] == '99', vals)
  232.         self.assertEqual(vals[0], 'Unknown')
  233.         vals[2].index('Unknown')
  234.         vals[2].index('Unnamed')
  235.         vals[2].index('unknown')
  236.         vals = self.cur.pget('Unknown', data = 'wrong value', flags = db.DB_GET_BOTH)
  237.         self.assertEqual(vals, None, vals)
  238.         rec = self.cur.first()
  239.         self.assertEqual(rec[0], 'Jazz')
  240.         while rec is not None:
  241.             count = count + 1
  242.             if verbose:
  243.                 print rec
  244.             
  245.             rec = getattr(self.cur, 'next')()
  246.         self.assertEqual(count, len(musicdata) - 1)
  247.         self.cur = None
  248.  
  249.     
  250.     def getGenre(self, priKey, priData):
  251.         self.assertEqual(type(priData), type(''))
  252.         genre = priData.split('|')[2]
  253.         if verbose:
  254.             print 'getGenre key: %r data: %r' % (priKey, priData)
  255.         
  256.         if genre == 'Blues':
  257.             return db.DB_DONOTINDEX
  258.         return genre
  259.  
  260.  
  261.  
  262. class AssociateHashTestCase(AssociateTestCase):
  263.     dbtype = db.DB_HASH
  264.  
  265.  
  266. class AssociateBTreeTestCase(AssociateTestCase):
  267.     dbtype = db.DB_BTREE
  268.  
  269.  
  270. class AssociateRecnoTestCase(AssociateTestCase):
  271.     dbtype = db.DB_RECNO
  272.     keytype = 0
  273.  
  274.  
  275. class AssociateBTreeTxnTestCase(AssociateBTreeTestCase):
  276.     envFlags = db.DB_INIT_TXN
  277.     dbFlags = 0
  278.     
  279.     def txn_finish_test(self, sDB, txn):
  280.         
  281.         try:
  282.             self.finish_test(sDB, txn = txn)
  283.         finally:
  284.             if self.cur:
  285.                 self.cur.close()
  286.                 self.cur = None
  287.             
  288.             if txn:
  289.                 txn.commit()
  290.             
  291.  
  292.  
  293.     
  294.     def test13_associate_in_transaction(self):
  295.         if verbose:
  296.             print '\n', '-=' * 30
  297.             print 'Running %s.test13_associateAutoCommit...' % self.__class__.__name__
  298.         
  299.         txn = self.env.txn_begin()
  300.         
  301.         try:
  302.             self.createDB(txn = txn)
  303.             self.secDB = db.DB(self.env)
  304.             self.secDB.set_flags(db.DB_DUP)
  305.             self.secDB.set_get_returns_none(2)
  306.             self.secDB.open(self.filename, 'secondary', db.DB_BTREE, db.DB_CREATE | db.DB_THREAD, txn = txn)
  307.             if db.version() >= (4, 1):
  308.                 self.getDB().associate(self.secDB, self.getGenre, txn = txn)
  309.             else:
  310.                 self.getDB().associate(self.secDB, self.getGenre)
  311.             self.addDataToDB(self.getDB(), txn = txn)
  312.         except:
  313.             txn.abort()
  314.             raise 
  315.  
  316.         self.txn_finish_test(self.secDB, txn = txn)
  317.  
  318.  
  319.  
  320. class ShelveAssociateTestCase(AssociateTestCase):
  321.     
  322.     def createDB(self):
  323.         self.primary = dbshelve.open(self.filename, dbname = 'primary', dbenv = self.env, filetype = self.dbtype)
  324.  
  325.     
  326.     def addDataToDB(self, d):
  327.         for key, value in musicdata.items():
  328.             if type(self.keytype) == type(''):
  329.                 key = '%02d' % key
  330.             
  331.             d.put(key, value)
  332.         
  333.  
  334.     
  335.     def getGenre(self, priKey, priData):
  336.         self.assertEqual(type(priData), type(()))
  337.         if verbose:
  338.             print 'getGenre key: %r data: %r' % (priKey, priData)
  339.         
  340.         genre = priData[2]
  341.         if genre == 'Blues':
  342.             return db.DB_DONOTINDEX
  343.         return genre
  344.  
  345.  
  346.  
  347. class ShelveAssociateHashTestCase(ShelveAssociateTestCase):
  348.     dbtype = db.DB_HASH
  349.  
  350.  
  351. class ShelveAssociateBTreeTestCase(ShelveAssociateTestCase):
  352.     dbtype = db.DB_BTREE
  353.  
  354.  
  355. class ShelveAssociateRecnoTestCase(ShelveAssociateTestCase):
  356.     dbtype = db.DB_RECNO
  357.     keytype = 0
  358.  
  359.  
  360. class ThreadedAssociateTestCase(AssociateTestCase):
  361.     
  362.     def addDataToDB(self, d):
  363.         t1 = Thread(target = self.writer1, args = (d,))
  364.         t2 = Thread(target = self.writer2, args = (d,))
  365.         t1.setDaemon(True)
  366.         t2.setDaemon(True)
  367.         t1.start()
  368.         t2.start()
  369.         t1.join()
  370.         t2.join()
  371.  
  372.     
  373.     def writer1(self, d):
  374.         for key, value in musicdata.items():
  375.             if type(self.keytype) == type(''):
  376.                 key = '%02d' % key
  377.             
  378.             d.put(key, '|'.join(value))
  379.         
  380.  
  381.     
  382.     def writer2(self, d):
  383.         for x in range(100, 600):
  384.             key = 'z%2d' % x
  385.             value = [
  386.                 key] * 4
  387.             d.put(key, '|'.join(value))
  388.         
  389.  
  390.  
  391.  
  392. class ThreadedAssociateHashTestCase(ShelveAssociateTestCase):
  393.     dbtype = db.DB_HASH
  394.  
  395.  
  396. class ThreadedAssociateBTreeTestCase(ShelveAssociateTestCase):
  397.     dbtype = db.DB_BTREE
  398.  
  399.  
  400. class ThreadedAssociateRecnoTestCase(ShelveAssociateTestCase):
  401.     dbtype = db.DB_RECNO
  402.     keytype = 0
  403.  
  404.  
  405. def test_suite():
  406.     suite = unittest.TestSuite()
  407.     suite.addTest(unittest.makeSuite(AssociateErrorTestCase))
  408.     suite.addTest(unittest.makeSuite(AssociateHashTestCase))
  409.     suite.addTest(unittest.makeSuite(AssociateBTreeTestCase))
  410.     suite.addTest(unittest.makeSuite(AssociateRecnoTestCase))
  411.     if db.version() >= (4, 1):
  412.         suite.addTest(unittest.makeSuite(AssociateBTreeTxnTestCase))
  413.     
  414.     suite.addTest(unittest.makeSuite(ShelveAssociateHashTestCase))
  415.     suite.addTest(unittest.makeSuite(ShelveAssociateBTreeTestCase))
  416.     suite.addTest(unittest.makeSuite(ShelveAssociateRecnoTestCase))
  417.     if have_threads:
  418.         suite.addTest(unittest.makeSuite(ThreadedAssociateHashTestCase))
  419.         suite.addTest(unittest.makeSuite(ThreadedAssociateBTreeTestCase))
  420.         suite.addTest(unittest.makeSuite(ThreadedAssociateRecnoTestCase))
  421.     
  422.     return suite
  423.  
  424. if __name__ == '__main__':
  425.     unittest.main(defaultTest = 'test_suite')
  426.  
  427.