Differences between revisions 50 and 51
Revision 50 as of 2008-08-04 02:03:20
Size: 9441
Editor: 190
Comment: Refreshed a bit the information about DoJ
Revision 51 as of 2008-08-04 02:04:17
Size: 9440
Editor: 190
Comment: syntax fix
Deletions are marked like this. Additions are marked like this.
Line 13: Line 13:
Additionaly, you will need the [http://code.google.com/p/django-jython] django-jython integration code] which contains the JDBC database backends and some management utilities. Additionaly, you will need the [http://code.google.com/p/django-jython django-jython integration code] which contains the JDBC database backends and some management utilities.

[http://pipes.yahoo.com/pipes/pipe.info?_id=jroxOD1f3BGgvtiIqGIyXQ RSS Aggregator for blog posts about Django on Jython]

Summary of Django on Jython: The Gaps

The most important thing to know about Django on Jython is that we are almost there, and with clean code. End-to-end functionality is demonstrated by the admin tool running in full CRUD, along with more than 90% of successful tests.

Moreover, we are part of the goals for the upcoming Django 1.0 release.

Running on Jython

To run Django on Jython, with a PostgreSQL backend, the easiest way to get started is to follow the instructions outlined [http://blog.leosoto.com/2008/07/my-new-djangojython-developer-workflow.html here]. If you prefer you can manually get Jython asm branch and Django trunk to later apply the patches at https://hg.leosoto.com/django.patches/file and https://hg.leosoto.com/jython.patches/file

Additionaly, you will need the [http://code.google.com/p/django-jython django-jython integration code] which contains the JDBC database backends and some management utilities.

Status

This is mostly outdated. We are working on updated status and documentation. Sorry for the inconveniences.

Here's what works:

syncdb and the very cool Django admin run; many unit tests pass. You can run with internationalization enabled. You do need to run the dev server with --noreload for now. We need to document here how to run with [http://www.xhaus.com/modjy/ modjy], which is Alan Kennedy's servlet container for WSGI apps.

In running the model unit tests, here are the things we seem to be missing:

  • We still have some encoding problems, again seen in doctests. An example where output is expected to be lower case hex, not upper case. I fixed the problem in PyUnicode, but there are more places. Our current plan is to make test_unicode.py pass (accounting for any UTF-16 vs UCS-2/UCS-4 issues).

  • Problem with the ManagerDescriptor handling, in django.db.models.manager.

  • No decorators yet! (But they are coming soon, and are now available experimentally for Jython.)

There may be some other rough categories, we need to look at the failures more systematically.

[http://dojstatus.leosoto.com Here are some unofficial test suite results]

Next Steps

On the Django front, get more of the unit tests running!

Modern is now in trunk.


Historical Notes

(Preserved to show how much we had to go through...)

Merging Modern into trunk

With the Modern branch was recently merged in (and deleted), we have consolidated the bugs, workarounds, and patches found below -- plus a bunch more. The most important aspect is that we have tried to make Jython conform more to CPython, using Django as our guide, although there are some gaps - especially if Django already had incorporated fixes. Our driving goal is to converge on these gaps over time. Please note that is intended to be stable, performant code, and so far that looks to be the case!

Here are some of the things we addressed:

  • The test_extcall unit test still fails. This appears to be a dependency on dict traversal being a specific arbitrary order different from CPython's. Google's GHOP produced an improved version for Python 2.6, so we will look at this as a starting point for further analysis.

  • Tristan King provided a near complete subset of the functionality for time.strptime, as implemented in org.python.modules.time.Time. This needs to be enhanced. All unit tests in the CPythonLib version of test_time now pass except for strptime -- specifically the conversion specifier '%c' -- so we can also move to that, and discard our Jython version, when this is completed. That should be soon! Done, and in trunk.

  • Decide whether we should use ConcurentHashMap or not as the backing hash map for dict and __dict__. CHM introduces creation overhead, but it should prove to be far more scalable on multicore systems. The programming model is also far nicer with respect to Jython. Done.

Former Major Problems

Former Minor annoyances

Already Fixed

(And many more!)

  • Jython does not have sys.stdout.isatty. Jython should get added to the exclusions around that call in django/core/management.py (win32 and 'Pocket PC' are already excluded).

  • stringmap (or the __dict__ implementation) needs a pop(o) method.

  • Jython lists and tuples don't have __iter__ .

  • Jython does not have os.getpid().

    • Django workarounds it now.
  • Jython does not have os.W_OK needed in django/core/management.py. This probably will not be hard to add this since java.io.File has a canWrite().

    • os.chmod should be implemented too (After checking for write permissions, Django will try to change them if necessary).

      • That's hard. Maybe Django shouldn't check for permissions if running on Jython.
    • Django don't check or change file permissions when running on Jython now
  • The U (Universal newlines) flag for open() isn't recognized on Jython

  • Unicode string interpolation doesn't work
  • object has a __unicode__ attribute (it doesn't on CPython) [http://bugs.jython.org/issue1800378 bug] [http://bugs.jython.org/issue1800381 patch] -- TristanKing

  • metaclasses need to know the __module__ of its classes [http://bugs.jython.org/issue1781500 bug] [http://bugs.jython.org/issue1789137 patch]

DjangoOnJython (last edited 2014-05-22 23:24:19 by AdamBurke)