[Zope] ZClasses meet PythonScripts, sample request

Jim Washington jwashin@vt.edu
Mon, 15 Jan 2001 12:24:10 -0500


Hi, Tim

I have it.
The Python Script I sent you:

container.propertysheets['job_info'].manage_changeProperties(REQUEST)

needs to be rewritten:

container.propertysheets.job_info.manage_changeProperties(REQUEST)

Perhaps someone could explain why the first does not work.

One point about your form:

You have id as a form variable.  You will be disappointed by its
behavior.

Regards,

-- Jim Washington

Timothy Wilson wrote:
> 
> Jim (or anyone else who's feeling charitable this morning),
> 
> Thanks for all your help. I really appreciate it. I wonder if you'd have
> time to look one more time at the two methods I've got that aren't
> working. I've included the actual code for my job posting product. Perhaps
> someone will find it instructive. I have a feeling that the remaining
> problem is not directly related to the processing of the form by the
> PythonScript. I also included the traceback at the end of this message.
> 
> Here are the two methods. I have a table that displays the currently
> available jobs and displays two little icons which call the edit or delete
> methods on the corresponding instance of the 'Job Posting' class. The edit
> icon links to the 'editJobForm' method which in turn calls the
> 'editFormAction' method that actually processing the change.
> 
> ------------------
> editJobForm
> -----------------
> 
> <dtml-var standard_html_header>
> 
> <h2>Edit a Job Board Entry</h2>
> <p>This form allows you to make changes to current postings on the online
> job board. You don't needed to fill in every
> field on the form. Click on the "Submit Edits" button at the bottom of the
> screen to save your changes to the database.</p>
> 
> <dtml-if "REQUEST.form.has_key('editJob')">
> <dtml-call "editFormAction(REQUEST)">
> <p><font color="red">Your changes have been saved</font></p>
> </dtml-if>
> 
> <form action="editJobForm">
> <table border="0">
> 
> <tr><th>Notes</th>
> <td><textarea name="notes:text" rows="10" cols="60" wrap="virtual"><dtml-var
> notes></textarea></td>
> </tr>
> <tr><th>Job ID</th>
> <td><input type="text" name="id" size="20" value="<dtml-var id>"></td>
> </tr>
> <tr><th>Organization</th>
> <td><input type="text" name="organization" size="60" value="<dtml-var
> org_name>"></td>
> </tr>
> <tr><th>Position</th>
> <td><input type="text" name="position" size="60" value="<dtml-var
> name>"></td>
> </tr>
> <tr><th>Description</th>
> <td><textarea
> name="description:text" rows="10" cols="60" wrap="virtual"><dtml-var
> description></textarea></td>
> </tr>
> <tr><th>Pay Offered</th>
> <td><input type="text" name="pay" size="60" value="<dtml-var pay>"></td>
> </tr>
> <tr><th>Line of Authority</th>
> <td><input type="text" name="loa" size="60" value="<dtml-var loa>"></td>
> </tr>
> <tr><th>Function</th>
> <td><textarea
> name="function:text" rows="4" cols="60" wrap="virtual"><dtml-var
> function></textarea></td>
> </tr>
> <tr><th>Qualifications</th>
> <td><textarea
> name="qualifications:text" rows="8" cols="60" wrap="virtual"><dtml-var
> qualifications></textarea></td>
> </tr>
> <tr>
> <td colspan=2>
> <p>To create a bullet list of "duties," type each one in the box below and
> press the "ENTER" key
> between each item in the list.</p>
> </td>
> </tr>
> <tr><th>Duties</th>
> <dtml-if duties>
> <td><textarea name="duties:list" rows="10" cols="60" wrap="virtual"><dtml-in
> duties><dtml-let item=sequence-item><dtml-if item>
> <dtml-var item>
> </dtml-if></dtml-let></dtml-in></textarea></td>
> <dtml-else>
> <td><textarea
> name="duties:list" rows="10" cols="60" wrap="virtual"></textarea></td>
> </dtml-if>
> </tr>
> <tr><th>Offer Expires</th>
> <td><input type="text" name="expires" size="20" value="<dtml-var
> offer_expires fmt="%m/%d/%Y">"></td>
> </tr>
> <tr>
> <td colspan=2><p>Enter the date that the job was officially posted.</p></td>
> </tr>
> <tr><th>Posted Date</th>
> <td><input type="text" name="posted" size="20" value="<dtml-var date_posted
> fmt="%m/%d/%Y">"></td>
> </tr>
> <tr>
> <td>&nbsp;</td>
> <td>
> <input type="submit" name="editJob" value=" Submit Edits ">
> </form>
> <form action="admin_html">
> <input type="submit" value=" Cancel ">
> </form>
> </td>
> </tr>
> </table>
> 
> <dtml-var standard_html_footer>
> 
> -----------------
> editFormAction (with REQUEST as a parameter)
> -----------------
> 
> container.propertysheets['job_info'].manage_changeProperties(REQUEST)
> 
> The error I get is:
> 
>  Error Type: TypeError
> Error Value: sequence index must be integer
> 
> Traceback:
> 
> Traceback (innermost last):
>   File /var/lib/zope/2.3.0a2/lib/python/ZPublisher/Publish.py, line 222, in
> publish_module
>   File /var/lib/zope/2.3.0a2/lib/python/ZPublisher/Publish.py, line 187, in
> publish
>   File /var/lib/zope/2.3.0a2/lib/python/Zope/__init__.py, line 221, in
> zpublisher_exception_hook
>     (Object: Traversable)
>   File /var/lib/zope/2.3.0a2/lib/python/ZPublisher/Publish.py, line 171, in
> publish
>   File /var/lib/zope/2.3.0a2/lib/python/ZPublisher/mapply.py, line 160, in
> mapply
>     (Object: editJobForm)
>   File /var/lib/zope/2.3.0a2/lib/python/ZPublisher/Publish.py, line 112, in
> call_object
>     (Object: editJobForm)
>   File /var/lib/zope/2.3.0a2/lib/python/OFS/DTMLMethod.py, line 189, in
> __call__
>     (Object: editJobForm)
>   File /var/lib/zope/2.3.0a2/lib/python/DocumentTemplate/DT_String.py, line
> 538, in __call__
>     (Object: editJobForm)
>   File /var/lib/zope/2.3.0a2/lib/python/DocumentTemplate/DT_Util.py, line
> 336, in eval
>     (Object: editFormAction(REQUEST))
>     (Info: REQUEST)
>   File &lt;string&gt;, line 0, in ?
>   File /var/lib/zope/2.3.0a2/lib/python/Shared/DC/Scripts/Bindings.py, line
> 325, in __call__
>     (Object: editFormAction)
>   File /var/lib/zope/2.3.0a2/lib/python/Shared/DC/Scripts/Bindings.py, line
> 354, in _bindAndExec
>     (Object: editFormAction)
>   File
> /var/lib/zope/2.3.0a2/lib/python/Products/PythonScripts/PythonScript.py,
> line 321, in _exec
>     (Object: editFormAction)
>     (Info: ({'script': &lt;PythonScript instance at 8826790&gt;,
> 'context': &lt;JobPosting instance at 871e068&gt;, 'container': &lt;Folder
> instance at 885a3e0&gt;, 'traverse_subpath': []},
> (&lt;h3&gt;form&lt;/h3&gt;&lt;table&gt;&lt;tr
> valign=&quot;top&quot; align=&quot;left&quot;&gt;&lt;th&gt;posted&lt;/th&gt;&lt;td&gt;'01/14/2001'&lt;/td&gt;&lt;/tr&gt;&lt;tr
> valign=&quot;top&quot; align=&quot;left&quot;&gt;&lt;th&gt;duties&lt;/th&gt;&lt;td&gt;['asdfasdf\015\012']&lt;/td&gt;&lt;/tr&gt;&lt;tr
> 
> -- I've deleted what looks like the entire contents of REQUEST --
> 
>   File Python Script, line 2, in editFormAction
>   File /var/lib/zope/2.3.0a2/lib/python/Products/PythonScripts/Guarded.py,
> line 276, in __getitem__
>   File /var/lib/zope/2.3.0a2/lib/python/OFS/PropertySheets.py, line 647, in
> __getitem__
>     (Object: Traversable)
> TypeError: (see above)