[ZODB-Dev] Query Regrading ZODB FileStorage(.fs file)

Monica chopra mail2monica_2k at yahoo.com
Tue Jan 3 15:54:53 EST 2006


Skipped content of type multipart/alternative-------------- next part --------------
A non-text attachment was scrubbed...
Name: data.fs
Type: application/octet-stream
Size: 1023 bytes
Desc: 122756374-data.fs
Url : http://mail.zope.org/pipermail/zodb-dev/attachments/20060103/de22b7e4/data.obj
-------------- next part --------------
from ZODB import FileStorage, DB
from ZODB.PersistentMapping import PersistentMapping
from persistent import Persistent
import unicodedata

#import logging
#logging.basicConfig()

class Employee(Persistent):
			"""An employee"""
			def __init__(self, name,age,organisation,manager=None):
				#self.name=name.encode('utf-16')
				self.name=name
				self.age=age
				self.organisation=organisation
				self.type="E"
				self.manager=manager
				
class Organisation(Persistent):
			"""An organisation"""
			def __init__(self, name,Id):
				self.Id=Id
				#self.name=unicode( name, "utf-16" )
				#self.name=name.encode('utf-16')
				#self.name=unicode(name)
				self.name=name
				self.type="O"
				
			
# setup the database
import transaction
storage =FileStorage.FileStorage('Data\data.fs')
db=DB(storage)
connection=db.open()
root=connection.root()
  

if not root.has_key("sbx"):
   root["sbx"] = []
   #root["lstOrg"] = {}
   #lstOrg=root["lstOrg"]
   #sbx=root["sbx"],root["organisation"] # get the sbx mapping, creating an empty mapping if
   sbx=root["sbx"]
   transaction.commit()
else:
   sbx=root["sbx"]
   transaction.commit()
   #lstOrg=root["lstOrg"]
#   # get the sbx mapping, creating an empty mapping if
#   # necessary
#if not root.has_key('sbx'):
#    from BTrees.OOBTree import OOBTree
#    root['sbx'] = OOBTree()

#sbx = root['sbx']

def AddOrganisation(name,id):
	#if sbx.has_key(name):
	#	print "There is already an employee with this name."
	#	return
	
	#lstOrg[id]=Organisation(name,id)
	#root['lstOrg'] = lstOrg # reassign to change
	
	sbx.append(Organisation(name,id))
	root['sbx'] = sbx # reassign to change
		
	print "Organisation %s added." % name
	transaction.commit()
	print
	#for key in sbx.keys():
	#	obj= sbx[key]
	#	print obj.name
	for organisation in sbx:#.values():
		if organisation.type=="O":
			print organisation.name
		

def listEmployees():
    if len(sbx)==0: #values()
       print "There are no employees."
       print
       return
	   
    for employee in sbx:#.values():
		#print employee.type
		if employee.type=="E":
			print "Name: %s " % employee.name 	    
			print "Age: %s" % employee.age
			print "Organisation: %s" % employee.organisation.name
			if employee.manager is not None:
				print "Manager's name: %s" % employee.manager.name
		
#def listorgZemp(name):
def listorgZemp():
    if len(sbx)==0: #.values()
       print "There are no employees."
       print
       return
	   
    for employee in sbx:#.values():
		#print employee.type
		#if employee.type=="E":
		if employee.type=="O":
			#if employee.organisation.name==name:
			print "Name: %s " % employee.name 	    
			#	print "Age: %s" % employee.age
			#	print "Organisation: %s" % employee.organisation.name
			#	if employee.manager is not None:
			#		print "Manager's name: %s" % employee.manager.name
			
def empDetails(name):
	if not sbx.has_key(name):
		print "There is no employee with this name."
		return
	else:
		empObject=sbx[name]
		print "Name: %s " % empObject.name 	    
		print "Age: %s" % empObject.age
		print "Organisation: %s" % employee.organisation.name
		if empObject.manager is not None:
			print "Manager's name: %s" % empObject.manager.name
		
			
def addEmployee(name,age,organisationName,manager_name=None):
	#if sbx.has_key(name):
	#	print "There is already an employee with this name."
	#	return
	if manager_name:
		try:
			x=0
			for organisation in sbx:    #.values():
				if organisation.name==manager_name:
					manager=sbx[x]
				else:
					x=x+1

		except KeyError:
			print
			print "No such manager"
			print
			return
		#for organisation in lstOrg.values():
		#	if organisation.name==organisationName:
		#		orgObject=lstOrg[organisation.id]
		x=0
		for organisation in sbx:    #.values():
			if organisation.name==organisationName:
				orgObject=sbx[x]
								
			else:
				x=x+1
		#sbx[name]=Employee(name,age,orgObject,manager)
		sbx.append(Employee(name,age,orgObject,manager))
		root['sbx'] = sbx # reassign to change
		print "Employee %s added." % name
		print "Age: %s" % age
		transaction.commit()
       
	else:
		#orgObject=sbx[organisation]
		#for organisation in lstOrg.values():
		#	if organisation.name==organisationName:
		#		id=organisation.Id
		#		orgObject=lstOrg[id]
		x=0
		for organisation in sbx:    #.values():
			if organisation.name==organisationName:
				orgObject=sbx[x]
							
			else:
				x=x+1
				
		##sbx[name]=Employee(name,age,orgObject)
		sbx.append(Employee(name,age,orgObject))
		root['sbx'] = sbx # reassign to change
		print "Employee %s added." % name
		print "Age: %s" % age
		transaction.commit()
		print
def EditEmployee(name,age,organisation,manager_name=None):
	if not sbx.has_key(name):
		print "There is no such employee with this name."
		return
	if manager_name:
		try:
			 manager=sbx[manager_name]
		except KeyError:
			print
			print "There is no such manager"
			print
			return
		editEmpObject=sbx[name]
		editEmpObject.manager=manager
		root['sbx'] = sbx # reassign to change
		transaction.commit()
	
	if age:
		editEmpObject=sbx[name]
		editEmpObject.age=age
		root['sbx'] = sbx # reassign to change
		transaction.commit()
	if organisation:
		orgObject=sbx[organisation]
		editEmpObject=sbx[name]
		editEmpObject.organisation=orgObject
		root['sbx'] = sbx # reassign to change
		transaction.commit()
	print "Employee %s ediited." % name
	empDetails(name)
def deleteall(name):
	if sbx.has_key(name):
		del(sbx[name])
		root['sbx'] = sbx 
		transaction.commit()
		print "Employee %s deleted." % name
		
		
if __name__=="__main__":
	
     while 1:
		choice=raw_input("Press 'O' to Add Organisation,Press 'OL' to List Organisations,Press 'L' to list employees,'A' to add an employee, or 'Q' to quit:")
		choice=choice.lower()
		if choice=="l":
			listEmployees()
			
		elif choice=="o":
			name=raw_input("Organisation name:")
			id=raw_input("Organisation Id:")
			AddOrganisation(name,id)
		elif choice=="ol":
			#name=raw_input("Organisation name:")
			#listorgZemp(name)
			listorgZemp()
		elif choice=="a":
			name=raw_input("Employee name:")
			organisation=raw_input("Organisation name:")
			manager_name=raw_input("Manager name:")
			age=raw_input("Age :")
			addEmployee(name,age,organisation,manager_name)
		elif choice=="e":
			name=raw_input("Employee name:")

			manager_name=raw_input("Manager name:")
			organisation=raw_input("Organisation name:")
			age=raw_input("Age :")
			EditEmployee(name,age,organisation,manager_name)
		elif choice=="d":
			
			name=raw_input("Employee name:")
			deleteall(name)
		elif choice=="s":
			
			name=raw_input("Employee name:")
			empDetails(name)
		elif choice=="q":
			connection.close()
			db.close()
			
			break

     # close database
#connection.close()


More information about the ZODB-Dev mailing list