My name is Dave Weber, and I'm a student at the University of Toronto,
studying Computer Science. For one of our undergraduate courses led by
Greg Wilson (http://www.cs.utoronto.ca/~gvwilson/), myself and a group
of 10 other computer science students will be trying to port Django to
Python 3.
Until the end of January, we'll be studying the existing Django code
in order to gain an understanding of how the program works. We'll be
doing this primarily through architecture documentation and
performance profiling. In early February we plan on beginning work on
the port.
A few of us have experience working with Django, and by the end of
January we should have a much better understanding of it. I've been in
touch with Jacob Kaplan-Moss, who pointed me to this group, and he
also provided me with links about contributing to the Django project
and Martin van Lowis' port.
We don't really have any specific questions right now as we're pretty
unfamiliar with most of the project at this point in time. However, we
are very eager to learn as much as we can, so if you have any advice,
warnings, or anything at all to say to us, please feel free! We'd like
to hear from all of you as much as possible.
Best regards,
Dave Weber
--
You received this message because you are subscribed to the Google Groups "Django developers" group.
To post to this group, send email to django-d...@googlegroups.com.
To unsubscribe from this group, send email to django-develop...@googlegroups.com.
For more options, visit this group at http://groups.google.com/group/django-developers?hl=en.
Hi Dave,
Sounds like an interesting project!
My best piece of advice would be to learn to love the test suite.
Django's test suite may take a long time to run, but it is quite
comprehensive, and has enabled us to complete several large internal
refactoring projects with a minimum of impact on the general user
community.
My other advice would be to get involved in the community. Don't just
treat your Python 3 port as "your CS project", independent of the rest
of the world. For example, if your porting efforts discovers a section
of code that isn't tested (or tested well), or you discover a simple
fix that will boost performance, don't be a stranger - submit a patch
and help us make Django better.
This even extends to documentation - if your porting efforts generate
architecture documentation that might be useful to the general
community, we'd love to have that contributed back to the community.
Best of luck with your project. I can't wait to see what you come up with :-)
Yours,
Russ Magee %-)
My name is Johan Harjono, and I'm one of the UofT students
who will be taking part in porting Django to Python 3. It's a pleasure
to meet you all and I hope I will not be asking too many stupid
questions :)
regards,
Johan Harjono
I'm CS student at the National Autonomous University of Mexico, and
I'm very interested to porting Django to Python 3 too. I hope the
efforts porting Django will be public on a svn branch, so I can also
collaborate. And of course, if a core developer can guide us, it will
be much better.
2010/1/8 Russell Keith-Magee <freakb...@gmail.com>:
> --
> You received this message because you are subscribed to the Google Groups "Django developers" group.
> To post to this group, send email to django-d...@googlegroups.com.
> To unsubscribe from this group, send email to django-develop...@googlegroups.com.
> For more options, visit this group at http://groups.google.com/group/django-developers?hl=en.
>
>
>
>
--
Jesus Mager
[www.h1n1-al.blogspot.com]
In regard hosting, would suggest that all but a standard WSGI
interface be ignored for Python 3.0.
This is because it is extremely unlikely mod_python will ever be
ported to Python 3.0.
Although flup may be heading towards having Python 3.0 support, I
personally would suggest Django not support fastcgi directly as is
done now, even if it is just a wrapper around WSGI interface in flup.
Instead, push the adaption of WSGI to FASTCGI via flup onto the user.
In the long run this will reduce maintenance efforts as only have to
worry about one hosting interface type.
In respect of WSGI, very much suggest you use Apache/mod_wsgi as
reference to how WSGI interface should be implemented in Python 3.0.
Don't assume that whatever you get runserver to do under Python 3.0
will be correct. Only other WSGI server worth looking at this point is
the in development CherryPy WSGI server support for Python 3.0.
Graham
Uh ... I really hope Django supports fastcgi directly via flup.
Regards
Rajeev J Sebastian
At first thought many might think about mod_wsgi use by Apache here.
However, I have come to the conclusion that
http://projects.unbit.it/uwsgi/ too is an excellent solution. Especially
when combined with Cherokee or nginx. Apache just is not *the solution*
for anything anymore.
- http://sunoano.name/ws/public_xhtml/python.html#wake_up_call
Graham> In respect of WSGI, very much suggest you use Apache/mod_wsgi
Graham> as reference to how WSGI interface should be implemented in
Graham> Python 3.0. Don't assume that whatever you get runserver to do
Graham> under Python 3.0 will be correct. Only other WSGI server worth
Graham> looking at this point is the in development CherryPy WSGI
Graham> server support for Python 3.0.
Here I disagree. There is http://projects.unbit.it/uwsgi/ which works
excellent with Cherokee and nginx for example. There is great support
amongst those solutions for Django already:
- http://www.cherokee-project.com/doc/cookbook_uwsgi.html
- http://www.cherokee-project.com/doc/cookbook_django.html
Apache/mod_wsgi should not be *the* reference solution as far as I am
concerned. It may be one solution amongst others (uWSGI with Cherokee
for example) to look at.
On Jan 10, 8:50 pm, Suno Ano <suno....@sunoano.org> wrote:
> Graham> In regard hosting, would suggest that all but a standard WSGI
> Graham> interface be ignored for Python 3.0.
>
> At first thought many might think about mod_wsgi use by Apache here.
> However, I have come to the conclusion thathttp://projects.unbit.it/uwsgi/too is an excellent solution. Especially
> when combined with Cherokee or nginx. Apache just is not *the solution*
> for anything anymore.
>
> -http://sunoano.name/ws/public_xhtml/python.html#wake_up_call
>
> Graham> In respect of WSGI, very much suggest you use Apache/mod_wsgi
> Graham> as reference to how WSGI interface should be implemented in
> Graham> Python 3.0. Don't assume that whatever you get runserver to do
> Graham> under Python 3.0 will be correct. Only other WSGI server worth
> Graham> looking at this point is the in development CherryPy WSGI
> Graham> server support for Python 3.0.
>
> Here I disagree. There ishttp://projects.unbit.it/uwsgi/which works
> excellent with Cherokee and nginx for example. There is great support
> amongst those solutions for Django already:
>
> -http://www.cherokee-project.com/doc/cookbook_uwsgi.html
> -http://www.cherokee-project.com/doc/cookbook_django.html
>
> Apache/mod_wsgi should not be *the* reference solution as far as I am
> concerned. It may be one solution amongst others (uWSGI with Cherokee
> for example) to look at.
So, you would trust someone who from what I have seen has never once
participated in any discussions on the Python WEB-SIG in regard to
WSGI on Python 3.0 and in his own documentation somewhere suggests
that the uWSGI Python 3.0 support may need to be changed because it
may not actually match what proposals exist for WSGI on Python 3.0.
All I can say then is good luck, you will be on your own.
Graham
>
> - http://www.cherokee-project.com/doc/cookbook_uwsgi.html
> - http://www.cherokee-project.com/doc/cookbook_django.html
>
> Apache/mod_wsgi should not be *the* reference solution as far as I am
> concerned. It may be one solution amongst others (uWSGI with Cherokee
> for example) to look at.
>
>
Hi Suno, glad to hear you are a happy uWSGI user, but you should really
not follow our python3.x implementation for a project like Django.
Our (current) implementation is based on our customers needs, it has
nothing to do with what will be decided (if ever) on WEB-SIG. We are
lurking at that list waiting for a decision. We are software bitches, we
really have no interest on forcing (or even 'suggesting') the world on
our implementations. We write what the world/customer wants :P
Seriuosly, you should look at Graham's mod_wsgi implementation if you
want something that very-very-probably will be a standard
implementation. uWSGI 0.9.5 (scheduled for february) will have a
mod_wsgi compatibility layer for python3.x so your choice on what way to
follow is very simple :)
--
Roberto De Ioris
http://unbit.it
JID: rob...@jabber.unbit.it
Russ,
Would it be possible if the django core developers to create a python3
branch in the django svn repository?
Kind regards,
I'm not a core developer, but my perspective on the matter is, why?
Branches in Django's SVN are usually either from core developers or
other individuals working on projects specifically endorsed, and
mentored by core developers (such as GSOC). As such I think the most
sensible course of action would be to work on an external repo, on
something like github, bitbucket, or google code.
Alex
--
"I disapprove of what you say, but I will defend to the death your
right to say it." -- Voltaire
"The people's good is the highest law." -- Cicero
"Code can always be simpler than you think, but never as simple as you
want" -- Me
I am by no means an expert on the matter, but I remember seeing a comment awhile back suggesting that it generally makes more sense to fix the 2to3 script than to maintain two branches of the same library. Might that be the case here as well?
Sent from a mobile phone, please excuse any typos.
On Jan 12, 2010 11:53 PM, "Joshua Partogi" <joshua....@gmail.com> wrote:
On Jan 9, 1:02 pm, Russell Keith-Magee <freakboy3...@gmail.com> wrote:
> On Sat, Jan 9, 2010 at 2:25 AM, Dave <weber...@gmail.com> wrote: > > Hello everyone, > > > My name...
Russ,
Would it be possible if the django core developers to create a python3
branch in the django svn repository?
Kind regards,
--
http://jobs.scrum8.com | http://twitter.com/scrum8
Py3K does not support old-style classes. Django uses these quite a
lot, for instance the Meta-class of a model is old-style. I don't
think it is in any way possible to have an automatic script convert
these in a sensible way as django is deliberately utilizing the
difference between old and new style in no doubt a django-specific
way. If django on 2.x could be rewritten to no longer depend on
old-style classes, and was made to depend on python 2.6 or newer, then
2to3 would have a chance to do its magic.
HM
I can't think of any case where Django *requires* old-style classes.
Old-style classes are certainly used, but that's a combination of
accident, historical implementation and a small dose of clean API
styling ("class Meta" is cleaner and clearer than "class
Meta(object)"). I can't think of any reason why Django's current usage
of old-style classes couldn't be migrated to new-style classes.
Yours,
Russ Magee %-)
Cheering from the sidelines is not enough.
By the way, the pywin32 modules work in all versions of Python from
2.3 to 3.1 (mine works in IronPython as well.) 2.6 is helpful for a
conversion effort, but not necessary.
--
Vernon Cole
On Jan 13, 7:22 am, Karen Tracey <kmtra...@gmail.com> wrote:
I'd think doing the initial porting be done with Git or such to allow
for better collaboration.
Once the porting is done it should be moved into Django's SVN as a
seprate branch with an assigned
manager(s) who's duty is to merge in any changes in the 2.x branch.
While this might sound taxing, it's fairly
easy to do and can even be automated in some cases. Simply when ever a
commit occurs in 2.x auto apply it to
the 3.x branch then run the tests. If all pass, finalize the commit
and be done. If tests fail, fire off an error email to the person
responsible for the 3.x branch so they can fix it. You can even run
the 2to3 tool to try fixing any issues.
So
I don't think we can have a library working on python 2 and at the
same time on python 3.(Dont know if 3to2 is a good solution). The
converting process, IMHO, should be prepared for a mayor release of
Django, may be django 2 and let python 2 without support for these
version. But maintaining 2 libraries at the same time will be really
confusing.
I Know, Django 1.x is at now very young, but, what about starting the
ideas for the nee mayor release.
Just ideas...
2010/1/13 Josh Roesslein <jroes...@gmail.com>:
--
Jesus Mager
[www.h1n1-al.blogspot.com]
>The converting process, IMHO, should be prepared for a mayor release of
> Django, may be django 2 and let python 2 without support for these
> version. But maintaining 2 libraries at the same time will be really
> confusing.
> I Know, Django 1.x is at now very young, but, what about starting the
> ideas for the nee mayor release.
> Just ideas...
As a Django user I would be very unhappy to know, that after spending
lots of time making my app python 3.x compatible, now I have to port
it to a newer backwards-incompatible Django2 (and again, wait for all
applications I use to do the same).
--
Łukasz Rekucki
In many cases, this is true, but there are other scenarios (certain
forms of exception handling, for example) where there is no syntax
that's valid in both versions. That's syntax, not just libraries and
functions. There's no way to even get a file to parse in both Python 2
and Python 3 in these situations. There are certainly places in Django
that will run into these, so we really can't have a single codebase
that's completely compatible with both branches.
-Gul
Hi!
I don't think we can have a library working on python 2 and at the
same time on python 3.(Dont know if 3to2 is a good solution). The
converting process, IMHO, should be prepared for a mayor release of
Django, may be django 2 and let python 2 without support for these
version. But maintaining 2 libraries at the same time will be really
confusing.
I Know, Django 1.x is at now very young, but, what about starting the
ideas for the nee mayor release.
Just ideas...
From my experience with the 2to3 tool, it's no silver bullet for
porting to 3. I have had plenty of cases where manual tweeking of the
code was needed. The tool does help a lot on getting trivial things
changed over, but certain things it just can't do. Now this is with a
very small library of mine, django is a lot more complex.
I thought there was a way to have comments of the form:
# PY2
some code
# PY3
# some code
# ENDPY
Or something like that, and 2to3 handled them correctly.
Yes, I was a bit less clear than I should've been. I was responding on
an assumption that the author was expecting a single codebase to work
with 2 and 3 without going through 2to3 in between. To my knowledge,
2to3 does handle all the syntactic issues between the two, but I just
wanted to make it clear that it's definitely not "pretty much the same
as supporting old 2.x pythons."
-Gul
> To my knowledge,
> 2to3 does handle all the syntactic issues between the two, but I just
> wanted to make it clear that it's definitely not "pretty much the same
> as supporting old 2.x pythons."
I'm not saying it is *as easy*. Surely, it's more complicated and
requires more work.
And actually, I agree with that 2to3 already handles most of this
stuff, so it's the right way to go. At least now. What I really wanted
to say, is that using 2to3 on a 2.6 code that uses (for example)
__future__.unicode_literals is more likely to succed.
>
> -Gul
>
--
Łukasz Rekucki
2to3 has lots of command line switches which you use to coerce it
into giving the translation details you need, so you fix your Python2
code so that you NEVER edit the output of 2to3.
Someone mentioned a possible C-language-preprocessor-like syntax.
There isn't one. In those cases where the two versions require
different code, a normal Python "if" statement is used.
For example, here is a function which accepts a string (or unicode
string) and returns a binary buffer (i.e. type 'str' in CPython2 or
IronPython, but class 'bytes' in Python 3):
def str2bytes(sval):
if sys.version_info < (3,0) and isinstance(sval, str):
sval = sval.decode("latin1")
return sval.encode("latin1")
Then, inside the Python 2 code, you track down all implicit uses of a
string to create a binary buffer, and replace them with an explicit
function call like:
binfld = str2bytes('\x00\x01\xE2\x40')
Which not only works in either dialect of Python, but also is easier
for a code reviewer to understand.
--
Vernon
Hi Dave,
Please take a look at
http://wiki.python.org/moin/PortingDjangoTo3k
I have already done such a port, which I can update to the current
code base if there is interest. As others have discussed, this port
takes the approach of providing a single code base for both 2.x and
3.x
support, which is an approach that I would strongly recommend for
any kind of port of software to Python 3.x (unless dropping 2.x
support
altogether is acceptable).
Regards,
Martin
Martin, that page says Django is ported enough to run the tutorial,
have you tried running the test suite under your patch to see what the
results are?
Most certainly - that's the whole *point* of 2to3. Converting the
cases where
the syntax differs are actually the easy parts - it is very easy to
find out, by
static analysis, that Python 3 would reject a piece of code, and to
propose
a reformulation that is equivalent. That's where 2to3 shines, and thus
where
anybody adding 3.x support to a 2.x code base doesn't need to worry at
all.
When the syntax is correct in both versions, but library names
differs, 2to3
still works fairly well if it guesses correctly that the name indeed
refer to the
renamed libraries (which has some degree of uncertainty in Python).
The really difficult cases for 2to3 is where a piece of code works
unmodified
in both 2.x and 3.x, but does something significantly different. For
example,
string literals mean something different, and the result of reading
from a file
may be different (unicode vs. bytes in both cases). Fortunately,
Django
already attempts to differentiate bytes and unicode fairly well, so it
was
easy to fix the remaining spots which would break under 3.x.
Regards,
Martin
No, I haven't. It's been a while, but IIRC, the standard install would
not
install the test suite, so the test suite would not get converted to
3.x.
I started looking into converting the test suite, but then got
distracted
and never returned to the port.
Regards,
Martin
Ok. As a suggestion to the student's looking at this getting the test
suite running should probably be your first priority :)
Any thoughts on the breakdown and amount of people assigned to each
subsection?
Finally, Martin it's good to hear from you! We're looking at your work
with great interest; I'm sure we'll have more questions for you in the
near future.
On Jan 15, 12:36 pm, Alex Gaynor <alex.gay...@gmail.com> wrote:
> On Fri, Jan 15, 2010 at 11:35 AM, Martin v. Löwis <mar...@v.loewis.de> wrote:
>
>
>
> >> Martin, that page says Django is ported enough to run the tutorial,
> >> have you tried running the test suite under your patch to see what the
> >> results are?
>
> > No, I haven't. It's been a while, but IIRC, the standard install would
> > not
> > install the test suite, so the test suite would not get converted to
> > 3.x.
> > I started looking into converting the test suite, but then got
> > distracted
> > and never returned to the port.
>
> > Regards,
> > Martin
>
> > --
> > You received this message because you are subscribed to the Google Groups "Django developers" group.
> > To post to this group, send email to django-d...@googlegroups.com.
> > To unsubscribe from this group, send email to django-develop...@googlegroups.com.
> > For more options, visit this group athttp://groups.google.com/group/django-developers?hl=en.
That sounds like a not-unreasonable distribution of work. One of the
big architecture questions is that in Django currently anywhere you
can pass a string Django will accept either a utf-8 encoded string or
unicode, in Py3k given the clear differentiation in purpose between
str and bytes is that still reasonable behavior?
What APIs does this refer to? There are certainly places in Django
where there is no choice of providing byte strings (i.e. where you
must pass Unicode strings). In Python 3, there is no automatic
conversion anymore between byte strings and Unicode strings, so 3.x
developers wouldn't expect Django to transparently encode/decode
(unless when interfacing with databases, networks, or files, of
course). OTOH, if this feature is widely used in applications,
continued support for it would certainly be feasible.
Martin