Hello, I am running Zope on windows using the builtin webserver and attempting to add a new Product. The way I've been going about using Zope so far is to install a new "Zope directory" for each new project...not so bad until I started trying to "compile" python code. It seems to me I should create a "default" install of Zope and point my python path to those directories ? I am trying to compile the following Product code (below) and get the following err message: Traceback (innermost last): File "C:\Tech\Lang\Python\Python152\Pythonwin\pywin\framework\scriptutils.py", line 237, in RunScript exec codeObject in __main__.__dict__ File "C:\Zope\ProjectMgt\lib\python\Products\ProjectMgt\projobjs.py", line 1, in ? from Globals import HTMLFile, MessageDialog, Persistent File "C:\Zope\ProjectMgt\lib\python\Globals.py", line 90, in ? import Acquisition, ComputedAttribute, App.PersistentExtra, os File "C:\Zope\ProjectMgt\lib\python\App\PersistentExtra.py", line 87, in ? from Persistence import Persistent ImportError: cannot import name Persistent My path settings are at the end of the code below. #-------projobjs.py--------------------------------------------------------- ------------------------ from Globals import HTMLFile, MessageDialog, Persistent import OFS.SimpleItem, Acquisition, AccessControl.Role import sys,DocumentTemplate projectDict = {} #MAPS PROJECT id string to PROJECT object taskDict = {} #MAPS TASK id string to TASK object class Project( OFS.SimpleItem.Item, Persistent, Acquisition.Implicit, AccessControl.Role.RoleManager, ): index_html = DocumentTemplate.HTMLFile("c:\Zope\ProjectMgt\lib\python\Products\ProjectMgt \project.dtml") _id = '' _name = '' _descr = '' _tasks = {} #list of Tasks I contain def __init__(self, projectID): self._id = projectID #setters def set_id(self, anID): self._id = anID def set_name(self, aName): self._name = aName def set_descr(self, aDescr): self._descr = aDescr def addTask(self, aTask): #require aTask not nul self._tasks[aTask.id()] = aTask #getters def id(self): return self._id def name(self): return self._name def descr(self): return self._descr #end class Project class Task: index_html = DocumentTemplate.HTMLFile("c:/Zope/ProjectMgt/lib/python/Products/ProjectMgt /task.dtml") _id = '' _name = '' _descr = '' _owner = '' #Person responsible for the task _project = '' #the project that contains me _budgeted_units = 0 _budgeted_unit_type = '' _budgeted_mhrs = 0 def __init__(self,ID): self._id = ID def test(self): #dump internals print('in Task test') #setters def set_id(self,anID): self._id = anID def set_name(self, aName): self._name = aName def set_descr(self, aDescr): self._descr = aDescr def set_project(self, aProject): #aProject: PROJECT self._project = aProject def set_budgeted_units(self,aUnits): #must match unit type self._budgeted_units = aUnits def set_budgeted_units__type(self,aUnitType): self._budgeted_units_type = aUnitType def set_budgeted_mhrs(self,aMHRS): self._budgeted_mhrs = aMHRS #getters def id(self): return self._id def name(self): return self._name def descr(self): return self._descr def budgeted_units(self): return self._budgeted_units def budgeted_units_type(self): return self._budgeted_units_type def budgeted_mhrs(self): return self._budgeted_mhrs #end class Task #---------------Call back functions for GUI------------------------ def addTaskToProject(aTaskID, aProjectID): #require valid id's and exist in the dictionaries prj = projectDict[aProjectID] task = taskDict[aTaskID] prj.addTask(task) #end addTaskToProject def createNewProject(anID,aName): p = Project(anID) p.set_name(aName) projectDict[p.id()] = p def createNewTask(anID,aName): t = Task(anID) t.set_name(aName) taskDict[t.id()]= t def dumpProjectDictContents(): for prjKey in projectDict.keys(): print 'project key: ' + prjKey + ' name: ' + projectDict[prjKey].name() def dumpTaskDictContents(): for key in taskDict.keys(): print 'task key: ' + key + ' name: ' + taskDict[key].name() def projectReport(): for prjKey in projectDict.keys(): print 'project key: ' + prjKey + ' name: ' + projectDict[prjKey].name() for taskKey in projectDict[prjKey]._tasks.keys(): print 'task key: ' + taskKey taskKey = '' #end createNewProject #-------------------------------------------------------------------- def testRun(): createNewProject('x123','Project A') createNewProject('y124','Project B') createNewProject('z125','Project C') # dumpProjectDictContents() createNewTask('t1231','Task A') createNewTask('t1232','Task B') createNewTask('t1233','Task C') createNewTask('t1241','Task D') createNewTask('t1242','Task E') createNewTask('t1251','Task F') createNewTask('t1252','Task G') # dumpTaskDictContents() addTaskToProject('t1231','x123') #some how all the tasks are added to all the projects addTaskToProject('t1241','y124') projectReport() #end testRun def testHTML(): t = Task('123') t.set_name('abc') t.set_descr('This is task abc easy as 123') print t.index_html(t) p = Project('456') p.set_name('def') p.set_descr('This is cool') print p.index_html(p) if __name__ == '__main__': #testRun() testHTML() set PYTHONPATH=.;c:\tech\lang\python\python152\lib;c:\tech\lang\python\python152 \lib-tk;c:\tech\lang\python\tcl\lib;c:\tech\lang\python\tcl\bin set PYTHONPATH=%PYTHONPATH%;c:\tech\lang\python\zopemodules set PYTHONPATH=%PYTHONPATH%;c:\tech\lang\python\zopemodules\DocumentTemplate set PYTHONPATH=%PYTHONPATH%;c:\tech\lang\python\zopemodules\Ofs set PYTHONPATH=%PYTHONPATH%;c:\tech\lang\python\zopemodules\ZPublisher set PYTHONPATH=%PYTHONPATH%;c:\tech\lang\python\zopemodules\Shared set PYTHONPATH=%PYTHONPATH%;c:\tech\lang\python\zopemodules\DateTime regards, Steve
Hmmm... I'm not sure how you got to this. You don't need to 'compile' Zope products. Zope does that for you when you start zope! Just put your product in the Products folder and go. If your product appears in the list of installed products then it's been compiled OK. If not... you need to stop zope and try something like this: import sys sys.path = ['lib/python'] + sys.path from Products.YourProductFolder import * if that doesn't work... fix the syntax errors (;->) until it does. Then restart zope and try again. If you get into some problems *after* your product is installed. You can try the interactive debugger: import ZPublisher print ZPublisher.Main("/path/to/your/product/instance/in/zope", d=1, u="") good luck! -steve
participants (2)
-
Steve Spicklemire -
steve@hosys.com