Beispiel #1
0
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()
Beispiel #2
0
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()
Beispiel #3
0
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)
Beispiel #4
0
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
Beispiel #6
0
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>')
Beispiel #7
0
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>')