Karen:

Yaaaaayyy!!! Thank you!

On Sep 23, 11:45 am, Karen Tracey <[email protected]> wrote:
...
> /home/kmt/software/web/playground/ttt/newfields.py(56)to_python()
>
> -> utc_dt = super(DateTimeFieldInTZ, self).__init__(value, *args, **kwargs)
...
> I don't actually have a clue what the code here is trying to do, but what it
> ends up doing is returning None, which would seem to be wrong.  Calling the
> superclass __init__ from the to_python method seems a bit odd, though?  Did
> you mean to rather call its to_python?

Ahem, yes, that would be absolutely right.   This call should be to
the superclass's
to_python():
> super(DateTimeFieldInTZ, self).to_python(value, *args, **kwargs)

The proximate cause of failure is that the superclass was returning
None. The
next cause is that __init__() doesn't have a return statement, so if
you collect
a value from it, as I did, the value will be none.

The ultimate cause of failure is my copy/paste goof. I wrote the
superclass call for
__init__(), then pasted it into to_python() and get_db_prep_value(),
and forgot to fix
up the method name once. Sloppy.

> > Diagnosis is made a little harder, because my Eclipse + PyDev setup
> > cannot step all the way through to these errors. I get a different
> > failure in the debugger, and it happens in the midst of stepping to
> > the next line, so I don't see the point of error.
>
> > Thanks for any light anyone can shed! I appreciate the help.
>
> Eclipse+PyDev has to do a lot of behind-the-scenes stuff to populate the
> variables window, etc.  When there are basic problems with pretty low-level
> stuff it can at times get confused.  In those cases its usually easier to
> rely on something more basic, like pdb, to figure out what is going on.  It
> may not be as pretty, but it can get the job done without going off into the
> weeds.
...
>....I put an import pdb; pdb.set_trace() right before the call to
> the superclass method, attempted to create an instance of a model with one
> of these fields from a Python shell, and stepped through in the debugger to
> see where it went:...

This is very good advice.  I've learned two things from you today.
Thank you, Karen.
     — Jim DeLaHunt, Vancouver, Canada


On Sep 23, 11:45 am, Karen Tracey <[email protected]> wrote:
> On Wed, Sep 23, 2009 at 12:47 PM, Jim DeLaHunt <[email protected]>wrote:
>
>
>
>
>
> > Karen:
>
> > Thank you so much for your reply.
>
> > On Sep 23, 7:01 am, Karen Tracey <[email protected]> wrote:
> > > What you haven't shared is the code for DateTimeFieldInTZ.  It's going to
> > be
> > > rather hard to figure out what is going wrong without seeing that code.
> > ...
> > > If you show us what is in the DateTimeFieldInTZ implementation it's much
> > > more likely that someone will be able to help.
>
> > Ah, right you are.  Here's the custom field in question.
>
> > =====  datetimefieldintz.py:
> > [snip]
>
> > I wrote this class while going over the definition of
> > models.DateTimeField in django/db/models/fields/__init__.py:526-583.
>
> > One interesting observation about the diagnostic print statement in
> > get_db_prep_value(). It prints out,
> >  @@@ get_db_prep_value( <type 'datetime.datetime'>(2009-06-30
> > 23:59:45+00:00) ) begins.
> >  @@@ get_db_prep_value( 2009-06-30 23:59:45+00:00 ) got None back from
> > superclass
> > Making it look like models.DateTimeField.get_db_prep_value() is
> > choking on <type 'datetime.datetime'>(2009-06-30 23:59:45+00:00) (with
> > a utc tzinfo).
>
> Since you then proceed to return what the superclass has returned, that
> explains why you are getting an IntegrityError on the field that isn't
> allowed to be NULL.  You are returning None, which will turn into an attempt
> to set the field to NULL in the database.
>
> The question, then, is why is the call to the superclass returning None?  To
> get some idea, I put an import pdb; pdb.set_trace() right before the call to
> the superclass method, attempted to create an instance of a model with one
> of these fields from a Python shell, and stepped through in the debugger to
> see where it went:
>
> >>> from ttt.models import Special
> >>> import datetime
> >>> x = Special.objects.create(special_date=datetime.datetime.now())
>
>  @@@ get_db_prep_value( <type 'datetime.datetime'>(2009-09-23
> 14:30:04.249914) ) begins.> 
> /home/kmt/software/web/playground/ttt/newfields.py(102)get_db_prep_value()
>
> -> r = super(DateTimeFieldInTZ, self).get_db_prep_value(value, *args,
> **kwargs)
> (Pdb) s
> --Call--
>
> /usr/lib/python2.5/site-packages/django/db/models/fields/__init__.py(567)get_db_prep_value()
> -> def get_db_prep_value(self, value):
> (Pdb) s
>
> /usr/lib/python2.5/site-packages/django/db/models/fields/__init__.py(569)get_db_prep_value()
> -> return connection.ops.value_to_db_datetime(self.to_python(value))
> (Pdb) s
> --Call--> /home/kmt/software/web/playground/ttt/newfields.py(46)to_python()
>
> -> def to_python(self, value, *args, **kwargs):
>
> Note it's coming right back to your to_python() method for this field.
>
> (Pdb) s> /home/kmt/software/web/playground/ttt/newfields.py(53)to_python()
>
> -> skip_tz =  isinstance(value, datetime.date)
> (Pdb) s> /home/kmt/software/web/playground/ttt/newfields.py(56)to_python()
>
> -> utc_dt = super(DateTimeFieldInTZ, self).__init__(value, *args, **kwargs)
> (Pdb) n> /home/kmt/software/web/playground/ttt/newfields.py(60)to_python()
>
> -> if utc_dt is None or skip_tz:
> (Pdb) utc_dt
> (Pdb) skip_tz
> True
> (Pdb) n> /home/kmt/software/web/playground/ttt/newfields.py(61)to_python()
>
> -> return utc_dt
> (Pdb) n
> --Return--> 
> /home/kmt/software/web/playground/ttt/newfields.py(61)to_python()->None
>
> -> return utc_dt
> (Pdb) c
>
> I don't actually have a clue what the code here is trying to do, but what it
> ends up doing is returning None, which would seem to be wrong.  Calling the
> superclass __init__ from the to_python method seems a bit odd, though?  Did
> you mean to rather call its to_python?
>
> Here's the entire traceback of the first failure in the Django built- in
>
> > tests:
>
> > [snip]
>
> I don't know that it is worth debugging this until you've got the basic
> save() working.
>
>
>
> > Diagnosis is made a little harder, because my Eclipse + PyDev setup
> > cannot step all the way through to these errors. I get a different
> > failure in the debugger, and it happens in the midst of stepping to
> > the next line, so I don't see the point of error.
>
> > Thanks for any light anyone can shed! I appreciate the help.
>
> Eclipse+PyDev has to do a lot of behind-the-scenes stuff to populate the
> variables window, etc.  When there are basic problems with pretty low-level
> stuff it can at times get confused.  In those cases its usually easier to
> rely on something more basic, like pdb, to figure out what is going on.  It
> may not be as pretty, but it can get the job done without going off into the
> weeds.
>
> Karen
--~--~---------~--~----~------------~-------~--~----~
You received this message because you are subscribed to the Google Groups 
"Django users" group.
To post to this group, send email to [email protected]
To unsubscribe from this group, send email to 
[email protected]
For more options, visit this group at 
http://groups.google.com/group/django-users?hl=en
-~----------~----~----~----~------~----~------~--~---

Reply via email to