We need to see some of the code. Somehow the validator is not called.

On Thursday, 11 October 2012 13:32:40 UTC-5, David Sorrentino wrote:
>
> I'm using a custom form, but no custom validators.
> Do you need some additional information?
>
> Cheers,
> David
>
>
> On 11 October 2012 15:34, Massimo Di Pierro 
> <[email protected]<javascript:>
> > wrote:
>
>> Is it possible you have a custom validator?
>>
>> is should have a IS_DATE validator (default). It is the validator that 
>> maps request.vars.date into form.vars.date and performs the conversion.
>>
>>
>> On Thursday, 11 October 2012 06:30:46 UTC-5, David Sorrentino wrote:
>>
>>> Changed the name of the field from "date" to "created_on" to avoid 
>>> confusion.
>>> Tried with a fresh table.
>>> Result:
>>> *form.vars.created_on* seems to be still an object of type str.
>>>
>>> Am I missing something? :-/
>>>
>>> Cheers,
>>> David
>>>
>>>
>>> On 11 October 2012 11:45, Niphlod <[email protected]> wrote:
>>>
>>>> uhm. I can't reproduce the issue. For me form.vars.whatever if is a 
>>>> field of type datetime is a datetime tuple. Request.vars.whatever on the 
>>>> other hand is always a string, as it should be.
>>>>
>>>> Try with a fresh table
>>>>
>>>> PS: having a db with a column named "date" is a call for problems ... 
>>>>
>>>> On Thursday, October 11, 2012 11:27:52 AM UTC+2, David Sorrentino wrote:
>>>>
>>>>> Thanks for your explanation Niphlod. ;)
>>>>>
>>>>> I'm trying to normalize the time, as you suggested.
>>>>> However I'm facing some difficulties.
>>>>>
>>>>> In particular I created an additional field in my table to store the 
>>>>> normalized time (UTC) too. So now my table looks like that:
>>>>>
>>>>>> db.define_table('news',
>>>>>>     Field('title', 'string'),
>>>>>>     Field('body', 'text'),
>>>>>>     Field('date', 'datetime'),
>>>>>>     Field('dateUTC', 'datetime', readable=False, writable=False)
>>>>>> )
>>>>>>
>>>>>
>>>>> I decided to compute the field "dateUTC" onvalidation. My controller 
>>>>> looks like that:
>>>>>
>>>>>> def insertnews():
>>>>>>     form = crud.create(db.news, next=URL('index'), 
>>>>>> onvalidation=localtime_to_utc)
>>>>>>     return dict(form=form)
>>>>>>
>>>>>
>>>>> Eventually, assuming that I want to normalize the local time of Rome 
>>>>> (+2 hours) the function I use to do that looks so:
>>>>>
>>>>>> def localtime_to_utc(form):
>>>>>>         form.vars.dateUTC = form.vars.date - timedelta(hours=2)
>>>>>>
>>>>>  
>>>>> The problem is that *form.vars.date* seems to be a string. O_O
>>>>> Indeed I get this error:
>>>>>
>>>>>> TypeError: unsupported operand type(s) for -: 'str' and 
>>>>>> 'datetime.timedelta'
>>>>>>
>>>>>
>>>>>  Now I wonder, is it normal that a form.vars is considered a string? 
>>>>> Is there any way to retrieve the original type (datetime), in order to 
>>>>> compute the normalization?
>>>>>
>>>>> @Alec: if I manage I'll send them a mail with the solution! ;)
>>>>>
>>>>> Cheers,
>>>>> David
>>>>>
>>>>>
>>>>> On 10 October 2012 14:35, Alec Taylor <[email protected]> wrote:
>>>>>
>>>>>> Also if it makes you feel better LinkedIn hasn't implemented this
>>>>>> properly either :P
>>>>>>
>>>>>> On Wed, Oct 10, 2012 at 10:57 PM, Niphlod <[email protected]> wrote:
>>>>>> > welcome to datetime madness :D It's exactly what you need to take 
>>>>>> into
>>>>>> > consideration if you're working with user-inputted datetimes. You'd 
>>>>>> need to
>>>>>> > retrieve it's local date (javascript comes to the rescue, or based 
>>>>>> on
>>>>>> > nation, or whatever) and calculate the difference between that and 
>>>>>> your
>>>>>> > current date, then subtract/add the difference to the actually 
>>>>>> submitted
>>>>>> > datetime to "normalize" it in a UTC form.
>>>>>> >
>>>>>> >
>>>>>> > On Wednesday, October 10, 2012 1:01:35 PM UTC+2, David Sorrentino 
>>>>>> wrote:
>>>>>> >>
>>>>>> >> I see your point, but what if the user inserts into the datetime 
>>>>>> input
>>>>>> >> field his/her current time? It will be different from the server's 
>>>>>> one
>>>>>> >> (which I set to GMT), and prettydate will not work properly.
>>>>>> >>
>>>>>> >> I confess that I am a bit confused about that.
>>>>>> >>
>>>>>> >> Best,
>>>>>> >> David
>>>>>> >>
>>>>>> >>
>>>>>> >> On 10 October 2012 11:16, Niphlod <[email protected]> wrote:
>>>>>> >>>
>>>>>> >>> not necessarily wrong, just a different timezone. If you're going 
>>>>>> to
>>>>>> >>> display "prettydates" just in the browser for a "nicer 
>>>>>> visualization" you
>>>>>> >>> should take into consideration that your server's locatime can be 
>>>>>> different
>>>>>> >>> from the users's browser one.
>>>>>> >>>
>>>>>> >>> In a "perfect" setup, your server is on GMT (that is, utc), your 
>>>>>> app uses
>>>>>> >>> request.utcnow in all the places instead of request.now (and
>>>>>> >>> datetime.datetime.utcnow() instead of 
>>>>>> datetime.datetime.utcnow()). You'll
>>>>>> >>> have prettydate working right.
>>>>>> >>>
>>>>>> >>>
>>>>>> >>> On Wednesday, October 10, 2012 10:38:32 AM UTC+2, David 
>>>>>> Sorrentino wrote:
>>>>>> >>>>
>>>>>> >>>> Hey Niphlod,
>>>>>> >>>>
>>>>>> >>>> Thank you for your help.
>>>>>> >>>>
>>>>>> >>>> The version is 2.0.9 (2012-10-05 09:01:45) dev
>>>>>> >>>>
>>>>>> >>>> I tried datetime.datetime.now() in my application and I just 
>>>>>> discovered
>>>>>> >>>> that it is 2 hours late. This explains why prettydate is then 2 
>>>>>> hours in
>>>>>> >>>> hurry!
>>>>>> >>>> The odd thing is that if I open a python console and try
>>>>>> >>>> datetime.datetime.now(), I get the right time. O_O
>>>>>> >>>>
>>>>>> >>>> Something wrong with my server?
>>>>>> >>>>
>>>>>> >>>> Cheers,
>>>>>> >>>> David
>>>>>> >>>>
>>>>>> >>>>
>>>>>> >>>> On 10 October 2012 10:28, Niphlod <[email protected]> wrote:
>>>>>> >>>>>
>>>>>> >>>>> should calculate the difference between datetime.datetime.now() 
>>>>>> and
>>>>>> >>>>> your date. what web2py version are you using ?
>>>>>> >>>>>
>>>>>> >>>>>
>>>>>> >>>>> On Wednesday, October 10, 2012 10:16:24 AM UTC+2, David 
>>>>>> Sorrentino
>>>>>> >>>>> wrote:
>>>>>> >>>>>>
>>>>>> >>>>>> Hello everybody,
>>>>>> >>>>>>
>>>>>> >>>>>> I am using the module prettydate, but it seems that it matches 
>>>>>> the
>>>>>> >>>>>> datetime I give as input with a wrong timezone.
>>>>>> >>>>>>
>>>>>> >>>>>> For example now it's 10:12 am at my place.
>>>>>> >>>>>>
>>>>>> >>>>>> This is the datetime I give as input: 2012-10-10 10:12:00.
>>>>>> >>>>>>
>>>>>> >>>>>> This is the code:
>>>>>> >>>>>>
>>>>>> >>>>>>> from gluon.tools import prettydate
>>>>>> >>>>>>> pretty_d = prettydate(input_datetime, T)
>>>>>> >>>>>>
>>>>>> >>>>>>
>>>>>> >>>>>>
>>>>>> >>>>>> And this is the result: "2 hours from now".
>>>>>> >>>>>> It's 2 hours in hurry!! :)
>>>>>> >>>>>>
>>>>>> >>>>>> Am I wrong in something?
>>>>>> >>>>>>
>>>>>> >>>>>> I wish you a wonderful Wednesday,
>>>>>> >>>>>> David
>>>>>> >>>>>>
>>>>>> >>>>>>
>>>>>> >>>>> --
>>>>>> >>>>>
>>>>>> >>>>>
>>>>>> >>>>>
>>>>>> >>>>
>>>>>> >>>>
>>>>>> >>> --
>>>>>> >>>
>>>>>> >>>
>>>>>> >>>
>>>>>> >>
>>>>>> >>
>>>>>> > --
>>>>>> >
>>>>>> >
>>>>>> >
>>>>>>
>>>>>> --
>>>>>>
>>>>>>
>>>>>>
>>>>>>
>>>>>  -- 
>>>>  
>>>>  
>>>>  
>>>>
>>>
>>>  -- 
>>  
>>  
>>  
>>
>
>

-- 



Reply via email to