RE: [Zope] Saving property values to file
Sorry, but can you expand as I am not sure as how this is done. Also how do I create the dtml method so that it lists each record on one line sequentially, so that each additional record is started on a new line? If possible can you add couple of simple examples Many thanks Norm,an -----Original Message----- From: zope-admin@zope.org [mailto:zope-admin@zope.org]On Behalf Of J. Cameron Cooper Sent: 24 July 2001 23:44 To: zope@zope.org Subject: Re: [Zope] Saving property values to file
Now my problem is how to extract the whole list and save the contents as ASCii csv (Comma Seperated Variable Lenght) format on the local machine?
Use DTML to render the CSV file (I've done this before, and it's really easy), and use an External Method to call that and save the result as a file. --jcc (modular) _______________________________________________ Zope maillist - Zope@zope.org http://lists.zope.org/mailman/listinfo/zope ** No cross posts or HTML encoding! ** (Related lists - http://lists.zope.org/mailman/listinfo/zope-announce http://lists.zope.org/mailman/listinfo/zope-dev )
Sorry, but can you expand as I am not sure as how this is done.
What a rendered object returns is a string. Usually that string is sent to the web server, but it can also be put to other purposes. You could, for instance, give it to another method to save to a file. Just so happens that the most lightweight thing that can deal with the host filesystem is an External Method. Your External Method will look something like: in a file called extSaveFile.py in the Extensions directory: file='DEFAULT_FILE" # substitute a valid file on your system here def saveFile(file=file,contents="Default contents: error"): fsave = open(file,'w') fsave.write(contents) fsave.close() return Then create an external method with id=extSaveFile title=Save file to host system function=extSaveFile method=saveFile Then have a Python Script that does torender='dtmldoc' # what to render and save filepath='/tmp/csv' # where to save str = container[torender](container,container.REQUEST) # this renders it container.extSaveFile(file=filepath,contents=str) # calls the external method to do the saving work return "Object " + torender + " saved to " + filepath # or return something else, like another DTML doc So all you have to do to save is call the PythonScript. You might even give it parameters to specify file or whatever. Say, someone want to put this in the ZopeLabs cookbook for me? I haven't an account. Notes: I have not fully tested this. But it should be close. See the Python Library Reference on python.org (section 2.1.7.9) for the fileobject API. Also, it is a major security risk to allow writing of an arbitrary file. Lock it down tight, or code in a specific directory and only take file names to write to.
Also how do I create the dtml method so that it lists each record on one line sequentially, so that each additional record is started on a new line?
HTML may not care about line breaks, but DTML does. Although usually used for HTML, it doens't have to be. DTML can generate arbitrary text files. A CSV file is real, real easy. Usually one looks something like: "one","two","three" "i","am","here" So if you have a list of objects with properties, you would do something like this in DTML: <dtml-in listofwhatever> "<dtml-var firstprop>","<dtml-var secprop>","<dtml-var thirdprop>" </dtml-in> That's all. No headers or footers of whatever, since that'll put HTML in your pretty CSV file. And remember that whitespace formatting within the in loop will be preserved, so it all has to be on the same line.
If possible can you add couple of simple examples
Well, the above should take care of that. --jcc (expoundment)
participants (2)
-
J. Cameron Cooper -
Norman Khine