#24779: django-1.8.1 fails test with pypy - FAIL: test_serialize_datetime_safe
(migrations.test_writer.WriterTests)
----------------------------+------------------------------------
     Reporter:  jlec        |                    Owner:  nobody
         Type:  Bug         |                   Status:  new
    Component:  Migrations  |                  Version:  1.8
     Severity:  Normal      |               Resolution:
     Keywords:              |             Triage Stage:  Accepted
    Has patch:  0           |      Needs documentation:  0
  Needs tests:  0           |  Patch needs improvement:  0
Easy pickings:  0           |                    UI/UX:  0
----------------------------+------------------------------------

Comment (by flupzor):

 I've discovered the problem, I think it's a bug in PyPy. But I don't know
 if there is any Python API specification where this is specified in.

 The difference lies in the way the `__repr__` is made for date, time and
 datetime classes.

 In pypy the `__repr__` is determined as follows:

 date:
 
https://bitbucket.org/pypy/pypy/src/5d676752ae6613d0b423f4c1028ac47e1571d5fa/lib_pypy/datetime.py?at=default#cl-790
 time:
 
https://bitbucket.org/pypy/pypy/src/5d676752ae6613d0b423f4c1028ac47e1571d5fa/lib_pypy/datetime.py?at=default#cl-1281
 datetime:
 
https://bitbucket.org/pypy/pypy/src/5d676752ae6613d0b423f4c1028ac47e1571d5fa/lib_pypy/datetime.py?at=default#cl-1692

 While in cpython it is done like this:

 date:
 https://github.com/python/cpython/blob/master/Modules/_datetimemodule.c#L2633
 time:
 https://github.com/python/cpython/blob/master/Modules/_datetimemodule.c#L3581
 datetime:
 https://github.com/python/cpython/blob/master/Modules/_datetimemodule.c#L4442

 Which causes the date, datetime and time classes in datetime_safe module
 to return the wrong __repr__ value.

 e.g. in cpython 2 and 3 repr(datetime_safe.date(2015, 1, 1)) would return:
         date(2015, 1, 1)

 While in pypy this would return:
         datetime.date(2015, 1, 1)

 And the same would happen for datetime and time.

 There are three solutions I can think of:

 - Override the ` __repr__` function in datetime_safe.{date,time,datetime}
 which return the representation consistently for both PyPy and cpython.
 - Make an hard "if PyPy" condition and then don't prepend the 'datetime'
 in that case (this would be the ugly solution imo)
 - Fix it in PyPy.

--
Ticket URL: <https://code.djangoproject.com/ticket/24779#comment:3>
Django <https://code.djangoproject.com/>
The Web framework for perfectionists with deadlines.

-- 
You received this message because you are subscribed to the Google Groups 
"Django updates" group.
To unsubscribe from this group and stop receiving emails from it, send an email 
to [email protected].
To post to this group, send email to [email protected].
To view this discussion on the web visit 
https://groups.google.com/d/msgid/django-updates/062.0e66391630fda382138f854c90062caf%40djangoproject.com.
For more options, visit https://groups.google.com/d/optout.

Reply via email to