[Zope] dtml-in, ZSQL Method, date argument problem
hans
hans@beehive.de
Fri, 12 Apr 2002 19:37:09 +0100
N Burnett wrote:
> I have been trying for a while to get arguments passed
> to a ZSQL
> Method from inside a dtml-in loop. My top level
> objective is to
> update a table with multiple changes to date/times and
> descriptions in records about
> conference sessions input from a form. Having read
> many posts here
> and other documentation, my current attempt should
> work, but I can't
> get it right yet. I keep getting a TypeError in the
> DateTime function
> indicating that the date isn't being passed in the
> format I think it should be:
>
> Here is the dtml I am trying:
>
> (The relevant fields in the table are:
> ID,StartsAt,aDescription)
>
> <dtml-var standard_html_header>
> <dtml-if expr="REQUEST.has_key('submit')">
> <dtml-in s>
> <dtml-call expr="sessions_modifydates(_)">
> </dtml-in>
> </dtml-if>
>
assuming "s" is some kind of a state variable
there should be a
<input type="hidden" name="s" value="1">
in the form below (note the double quotes)
>
> <form method=post action=sessions_update>
> <table>
> <dtml-in sessions_list>
> <tr><td>
> <input type=text name=s.ID:records value=<dtml-var ID>
> size=4>
>
tried?
<input type="text" name="s.ID:records:int" value="<dtml-var ID>"
size=4>
> </td><td>
> <input type=text name=s.StartsAt:records:date
> value="<dtml-var
> StartsAt>">
> </td><td>
> <input type=text name=s.aDescription:records
> value="<dtml-var
> aDescription>" size=60>
>
again
<input type="text" name="s.aDescription:records:text"
value="<dtml-var
aDescription>" size=60>
if the type is not 'text', something else?
> </td><tr>
> </dtml-in>
> </table>
<input type="hidden" name="submit" value="1">
>
> <input type=submit name=submit>
> </form>
> <dtml-var standard_html_footer>
>
> The (not very well named) ZSQL Method
> sessions_modifydates is as follows. If it gets a date
> that DateTime can recognize, it converts it to SQL
> format:
>
has your zsql method parameter declarations?
with types?
like
StartsAt:date
aDescription:text
ID:int
>
> UPDATE tblSession SET
> tblSession.StartsAt = <dtml-var
> expr="_.DateTime(StartsAt).strftime('#%m/%d/%Y
> %H:%M:%S#')">,
> tblSession.Description = <dtml-sqlvar aDescription
> type=string>
> <dtml-sqlgroup where>
> <dtml-sqltest ID op=eq type=int>
> <dtml-and>
> <dtml-sqltest ConferenceID op=eq type=int>
> </dtml-sqlgroup>
>
> (Note that commenting out the updating of the date
> then allows the description to be updated, so I think
> everything else works OK. I use 'aDescription' because
> I thought Description may have been a reserved word
> somewhere along the line, but it probably isn't.)
>
> For completeness, here is the traceback I get:
>
> Traceback (innermost last):
> File
> C:\Programmer\WebSite\lib\python\ZPublisher\Publish.py,
> line
> 150, in publish_module
> File
> C:\Programmer\WebSite\lib\python\ZPublisher\Publish.py,
> line
> 114, in publish
> File
> C:\Programmer\WebSite\lib\python\Zope\__init__.py,
> line 158,
> in zpublisher_exception_hook
> (Object: sss)
>
where does "sss" come from?
> File
> C:\Programmer\WebSite\lib\python\ZPublisher\Publish.py,
> line
> 98, in publish
> File
> C:\Programmer\WebSite\lib\python\ZPublisher\mapply.py,
> line
> 88, in mapply
> (Object: sessions_update)
> File
> C:\Programmer\WebSite\lib\python\ZPublisher\Publish.py,
> line
> 39, in call_object
> (Object: sessions_update)
> File
> C:\Programmer\WebSite\lib\python\OFS\DTMLMethod.py,
> line 127,
> in __call__
> (Object: sessions_update)
> File
> C:\Programmer\WebSite\lib\python\DocumentTemplate\DT_String.py,
> line
> 473, in __call__
> (Object: sessions_update)
> File
> C:\Programmer\WebSite\lib\python\DocumentTemplate\DT_In.py,
>
> line 695, in renderwob
> (Object: s)
> File
> C:\Programmer\WebSite\lib\python\DocumentTemplate\DT_Util.py,
>
> line 159, in eval
> (Object:
> sessions_modifydates(StartsAt=_['sequence-var-
> StartsAt']))
> (Info: _)
> File <string>, line 2, in f
> File
> C:\Programmer\WebSite\lib\python\Shared\DC\ZRDB\DA.py,
> line
> 414, in __call__
> (Object: sessions_modifydates)
> File
> C:\Programmer\WebSite\lib\python\DocumentTemplate\DT_String.py,
> line
> 473, in __call__
> (Object: <string>)
> File
> C:\Programmer\WebSite\lib\python\DocumentTemplate\DT_Util.py,
>
> line 159, in eval
> (Object: _.DateTime(StartsAt).strftime('#%m/%d/%Y
> %H:%M:%S#'))
> (Info: StartsAt)
> File <string>, line 2, in f
> File
> C:\Programmer\WebSite\lib\python\DateTime\DateTime.py,
> line
> 671, in __init__
> File
> C:\Programmer\WebSite\lib\python\DateTime\DateTime.py,
> line
> 279, in _calcSD
> TypeError: (see above)
>
this is the culprit: Your DateTime argument StartsAt
is malformed in some way. Looking into
lib\python\DateTime\DateTime.py,
shows, that if the argument do DateTime() is of type
string, DateTime tries to convert string using a method "_calcSD",
its def beeing at line 272 like
def _calcSD(t):
# Returns timezone-independent days since epoch and the fractional
# part of the days.
dd = t + EPOCH - 86400.0
d = dd / 86400.0
s = d - math.floor(d)
return s, d
hans
--
-------------------------------------------------------------
Who's got only a hammer sees the world as a nail
hans augustin (software developer) hans@beehive.de
beehive elektronische medien GmbH http://www.beehive.de
phone: +49 30 847-82 0 fax: +49 30 847-82 299