def main(): # Set up the store # store = MySQLObjectStore(user='******', passwd='password') store = MySQLObjectStore() store.readModelFileNamed('../Middle/Videos') movie = Movie() movie.setTitle('The Terminator') movie.setYear(1984) movie.setRating('r') store.addObject(movie) james = Person() james.setName('James Cameron') james.setBirthDate(date(1954, 8, 16)) movie.addToDirectors(james) ahnuld = Person() ahnuld.setName('Arnold Schwarzenegger') ahnuld.setBirthDate(date(1947, 7, 30)) store.addObject(ahnuld) terminator = Role() terminator.setKaracter('Terminator') terminator.setPerson(ahnuld) movie.addToCast(terminator) store.saveChanges()
def main(): # Set up the store # store = MySQLObjectStore(user='******', passwd='password') store = MySQLObjectStore() store.readModelFileNamed('../Middle/Videos') movie = Movie() movie.setTitle('The Terminator') movie.setYear(1984) movie.setRating('r') store.addObject(movie) james = Person() james.setName('James Cameron') james.setBirthDate(DateFrom('8/16/1954')) movie.addToDirectors(james) ahnuld = Person() ahnuld.setName('Arnold Schwarzenegger') ahnuld.setBirthDate(DateFrom('7/30/1947')) store.addObject(ahnuld) terminator = Role() terminator.setKaracter('Terminator') terminator.setPerson(ahnuld) movie.addToCast(terminator) store.saveChanges()
def test(filename, pyFilename, deleteData): curDir = os.getcwd() os.chdir(workDir) try: filename = '../'+filename if os.path.splitext(filename)[1]=='': filename += '.mkmodel' pyFilename = os.path.join(filename, pyFilename) if not os.path.exists(pyFilename): print 'No such file', pyFilename return print 'Testing %s...' % filename # Set up the store store = MySQLObjectStore() store.readModelFileNamed(filename) assert store.model()._havePythonClasses # @@@@@@ # Clear the database if deleteData: print 'Deleting all database records for test...' for klass in store.model().klasses().values(): if not klass.isAbstract(): ObjectStore.Store.executeSQL('delete from %s;' % klass.name()) # Run the test results = {} execfile(pyFilename, results) assert results.has_key('test'), 'No test defined in %s.' % filename results['test'](store) finally: os.chdir(curDir)
class TestThreads(Test): def __init__(self): Test.__init__(self) self._numObjects = 64 self._numThreads = [1, 2, 4, 8, 16, 32] self._numReads = 32 def timedMain(self): import time start = time.time() self.main() end = time.time() duration = end - start print print 'secs: %0.2f' % duration print 'mins: %0.2f' % (duration/60.0) def readArgs(self, args): self._modelNames = ['MKBasic'] def testEmpty(self): self.createDatabase() self.createStore() self.createObjects() self.testConcurrentReads() def createStore(self): from MiddleKit.Run.MySQLObjectStore import MySQLObjectStore self._store = MySQLObjectStore(**storeArgs) self._store.readModelFileNamed(self._modelName) def createObjects(self): from Thing import Thing for i in range(self._numObjects): t = Thing() t.setB(1) t.setI(2) t.setL(3) t.setF(4.0) t.setS('five') self._store.addObject(t) self._store.saveChanges() things = self._store.fetchObjectsOfClass('Thing') assert len(things) == self._numObjects, \ '%i, %i' % (len(things), self._numObjects) def testConcurrentReads(self): for numThreads in self._numThreads: print '>> numThreads:', numThreads self.testReaderThreads(numThreads) def testReaderThreads(self, numThreads): class Reader(threading.Thread): def __init__(self, store, numReads): threading.Thread.__init__(self) self._store = store self._numReads = numReads def run(self): store = self._store for i in range(self._numReads): # print '%x:%03i' % (id(self), i), objects = store.fetchObjectsOfClass('Thing') threads = [] for i in range(numThreads): thread = Reader(self._store, self._numReads) threads.append(thread) for thread in threads: thread.start() for thread in threads: thread.join() def testSamples(self): """Test samples. We do all our necessary testing in testEmpty() so we override this method to pass. """ pass
class TestThreads(Test): def __init__(self): Test.__init__(self) self._numObjects = 64 self._numThreads = [1, 2, 4, 8, 16, 32] self._numReads = 32 def timedMain(self): import time start = time.time() self.main() end = time.time() duration = end - start print print 'secs: %0.2f' % duration print 'mins: %0.2f' % (duration/60.0) def readArgs(self, args): self._modelNames = ['MKBasic'] def testEmpty(self): self.createDatabase() self.createStore() self.createObjects() self.testConcurrentReads() def createStore(self): from MiddleKit.Run.MySQLObjectStore import MySQLObjectStore self._store = MySQLObjectStore() self._store.readModelFileNamed(self._modelName) def createObjects(self): from Thing import Thing for i in range(self._numObjects): t = Thing() t.setB(1) t.setI(2) t.setL(3) t.setF(4.0) t.setS('five') self._store.addObject(t) self._store.saveChanges() things = self._store.fetchObjectsOfClass('Thing') assert len(things)==self._numObjects, '%i, %i' % (len(things), self._numObjects) def testConcurrentReads(self): for numThreads in self._numThreads: print '>> numThreads:', numThreads self.testReaderThreads(numThreads) def testReaderThreads(self, numThreads): class Reader(threading.Thread): def __init__(self, store, numReads): threading.Thread.__init__(self) self._store = store self._numReads = numReads def run(self): store = self._store for i in range(self._numReads): #print '%x:%03i' % (id(self), i), objects = store.fetchObjectsOfClass('Thing') threads = [] for i in range(numThreads): thread = Reader(self._store, self._numReads) threads.append(thread) for thread in threads: thread.start() for thread in threads: thread.join() def testSamples(self): """ We do all our necessary testing in testEmpty() so we override this method to pass. """ pass
class StorePage(SitePage): ## Init ## def __init__(self): SitePage.__init__(self) self._store = None ## Access ## def modelFilename(self): req = self.request() filename = req.field('modelFilename', None) if filename: self.response().setCookie('modelFilename', filename) else: filename = req.cookie('modelFilename', None) return filename def store(self): if not self._store: self.saveFieldsToCookies() modelFilename = self.modelFilename() # MK will need access to the Python classes for the model. # We expect to find them with the actual model file, # so we update sys.path appropriately: extraDir = os.path.dirname(modelFilename) # We need the parent directory of the model package: extraDir = os.path.dirname(extraDir) if extraDir not in sys.path: sys.path.insert(1, extraDir) req = self.request() self._store = MySQLObjectStore(host=req.value('host'), user=req.value('user'), passwd=req.value('password')) self._store.readModelFileNamed(modelFilename) self._store.connect() recentModels = self.request().cookie('recentModels', []) if recentModels: recentModels = recentModels.split(';') if modelFilename not in recentModels: recentModels.append(modelFilename) recentModels = ';'.join(recentModels) self.response().setCookie('recentModels', ';'.join(recentModels)) return self._store ## Writing page parts ## def writeTopBar(self): names = os.path.split(self.modelFilename()) self.writeln('<p><a href="SelectModel" class="SelectLink">SELECT</a>' ' <span class=StatusBar>%s - %s</span></p>' % (names[1], names[0])) req = self.request() self.writeln('<p><a href="SelectDatabase" class="SelectLink">SELECT</a>' ' <span class="StatusBar">db=%s, host=%s, user=%s</span></p>' % (req.value('database'), req.value('host'), req.value('user'))) def writeSideBar(self): self.writeKlasses() def writeKlasses(self): # @@ 2000-11-27 ce: move this to MixIns??? curClassName = self.request().field('class', None) klasses = self.store().model().klasses() names = klasses.keys() names.sort() modelFilename = self.urlEncode(self.modelFilename()) for name in names: urlName = self.urlEncode(name) if name == curClassName: style = 'CurClassLink' else: style = 'ClassLink' self.writeln('<p><a href="BrowseObjects?class=%s" class"=%s">' '%s</a></p>' % (name, style, urlName)) def writeContent(self): self.writeln('<p>Woops. Forgot to override writeContent().</p>')
class StorePage(SitePage): ## Init ## def __init__(self): SitePage.__init__(self) self._store = None ## Access ## def modelFilename(self): req = self.request() filename = req.field('modelFilename', None) if filename: self.response().setCookie('modelFilename', filename) else: filename = req.cookie('modelFilename', None) return filename def store(self): if not self._store: self.saveFieldsToCookies() modelFilename = self.modelFilename() # MK will need access to the Python classes for the model. # We expect to find them with the actual model file, # so we update sys.path appropriately: extraDir = os.path.dirname(modelFilename) # We need the parent directory of the model package: extraDir = os.path.dirname(extraDir) if extraDir not in sys.path: sys.path.insert(1, extraDir) req = self.request() self._store = MySQLObjectStore(host=req.value('host'), user=req.value('user'), passwd=req.value('password')) self._store.readModelFileNamed(modelFilename) self._store.connect() recentModels = self.request().cookie('recentModels', []) if recentModels: recentModels = recentModels.split(';') if modelFilename not in recentModels: recentModels.append(modelFilename) recentModels = ';'.join(recentModels) self.response().setCookie('recentModels', ';'.join(recentModels)) return self._store ## Writing page parts ## def writeTopBar(self): names = os.path.split(self.modelFilename()) self.writeln('<p><a href="SelectModel" class="SelectLink">SELECT</a>' ' <span class=StatusBar>%s - %s</span></p>' % (names[1], names[0])) req = self.request() self.writeln( '<p><a href="SelectDatabase" class="SelectLink">SELECT</a>' ' <span class="StatusBar">db=%s, host=%s, user=%s</span></p>' % (req.value('database'), req.value('host'), req.value('user'))) def writeSideBar(self): self.writeKlasses() def writeKlasses(self): # @@ 2000-11-27 ce: move this to MixIns? curClassName = self.request().field('class', None) klasses = self.store().model().klasses() names = sorted(klasses) for name in names: urlName = self.urlEncode(name) style = 'CurClassLink' if name == curClassName else 'ClassLink' self.writeln('<p><a href="BrowseObjects?class=%s" class"=%s">' '%s</a></p>' % (name, style, urlName)) def writeContent(self): self.writeln('<p>Woops. Forgot to override writeContent().</p>')