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
> > 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).
Some examples:
>>> Template(u"{{ foo }}").render(Context({"foo":"bar"}))
u'bar'
>>> Template("{{ foo }}").render(Context({u"foo":"bar"}))
u'bar'
>>> Template("{{ foo }}").render(Context({"foo":u"bar"}))
u'bar'
>>> MyModel.objects.filter(my_attr="foo")
>>> MyModel.objects.filter(my_attr=u"foo")
>>> mymodel_instance.my_attr = "foo"
>>> mymodel_instance.my_attr = u"foo"
In addition to these things, there may be problems where dictionary
keys and various other values have used byte strings up until now,
with no problems, but based on assumptions that no longer hold. For
example, declarative classes (e.g. Models) are an interesting one - in
Python 2.x, the keys of MyClass.__dict__ are byte strings, but in 3.0,
they are unicode strings. Since non-ascii names for identifiers are
valid in Python 3.0 (thanks in part, I believe, to your good self :-),
and also in at least some databases, this is not an academic issue.
Also, in Python 3.0, you can have models with non-ascii names, which
challenges some assumptions about things like the INSTALLED_APPS
setting.
I imagine that some of these things will 'come out in the wash', so to
speak, and the lack of automatic conversion will help identify
problems, but some things might come back to bite us if we don't get
them right.
Luke
--
"Outside of a dog, a book is a man's best friend... inside of a
dog, it's too dark to read."
Luke Plant || http://lukeplant.me.uk/
We finished our preliminary exercise in learning Django - we created
an architecture, performance and call profile, as well as a screencast
instructing how to install Django in Linux and a few simple use cases.
We'll try to make these publicly available so you the community can
use them if you wish. Right now they're in our school's repository so
we'll try to export them soon.
Right now we're trying to decide how our work should be evaluated at
the end of our term, April 1. What we would like to hear back from you
is, how much do you think we should finish by that point in time?
All / 75% / 50%, or whatever is appropriate. We're also debating how
it should be evaluated. What made the most sense to us was to pick a
number (if not all) of the test cases in the test suite, and try to
have them passed by the end of term, as well as being able to perform
some use cases. How many test cases do you think the Django / Python 3
port should be able to pass by April 1? What use cases should a Django
user be able to do when using the port? We were also thinking of
making a screencast to showcase these use cases.
Finally, a small aside but Martin, we tried to email you at your
Google Group address - we were interested in talking to you about the
work you're doing or have done on the port. Is there a way we could
contact you in case we had some questions or needed some guidance?
I don't see much point in trying to put a specific number on it. For
example, the ORM (which represents a LOT of the tests) will pretty
much all just work once you work out the syntactic and unicode issues.
I imagine by fixing those you'll go from 0% to 50% completion nearly
overnight. Further, you guys know whether you're working hard on it,
and if you don't reach your goals due to unforseen complications, or
due to laziness. I see little value in trying to evaluate yourselves
based on the % of passing tests (but now we're delving far into my
personal education philosophies :P). Regardless, I think picking a
specific number would be incredibly difficult, and that if you still
want one you should work for 3 weeks and then see where you are, and
what seems reasonable there.
http://wiki.python.org/moin/PortingDjangoTo3k
Seems to the good way to achieve it some times...
On Tue, Feb 2, 2010 at 5:37 PM, Dave <webe...@gmail.com> wrote:
Thanks for posting them:
> >>> Template(u"{{ foo }}").render(Context({"foo":"bar"}))
> u'bar'
I get
py> Template("{{ foo }}").render(Context({b"foo":b"bar"}))
''
I think that's correct: the dictionary has no key "foo".
I'm also unsure what this has to do with UTF-8: isn't this the regular
default encoding (ASCII) that allows you to have Unicode and byte
strings compare equal?
What is the syntax for variable names (i.e. can you even have non-
ASCII characters in variable names)?
> >>> Template("{{ foo }}").render(Context({u"foo":"bar"}))
> u'bar'
py> Template(b"{{ foo }}").render(Context({"foo":b"bar"}))
'bar'
Not sure why this happens - perhaps variable names get always
converted into strings?
> >>> Template("{{ foo }}").render(Context({"foo":u"bar"}))
> u'bar'
py> Template(b"{{ foo }}").render(Context({b"foo":"bar"}))
''
Also notice that it never produces bytes in these cases. Again, I'm
unsure why this happens.
> >>> MyModel.objects.filter(my_attr="foo")
py> Choice.objects.filter(choice=b'geht so')
[<Choice: geht so>]
> >>> MyModel.objects.filter(my_attr=u"foo")
py> Choice.objects.filter(choice='geht so')
[<Choice: geht so>]
> >>> mymodel_instance.my_attr = "foo"
> >>> mymodel_instance.my_attr = u"foo"
>>> c=Choice()
>>> c.choice=b'fine'
>>> c.choice='fine'
>
> In addition to these things, there may be problems where dictionary
> keys and various other values have used byte strings up until now,
> with no problems, but based on assumptions that no longer hold. For
> example, declarative classes (e.g. Models) are an interesting one - inPython2.x, the keys of MyClass.__dict__ are byte strings, but in 3.0,
> they are unicode strings. Since non-ascii names for identifiers are
> valid inPython3.0 (thanks in part, I believe, to your good self :-),
> and also in at least some databases, this is not an academic issue.
Not sure what issue you see here. It's most likely difficult to map
such names into a relational database. Having a restriction that
requires field names to follow SQL syntax sounds reasonable to me.
As for __dict__ now containing Unicode strings - this already had a
number of consequences on the patch. My recommendation would be that
identifier-like things always get represented as (unicode) strings in
Django on 3k (or more generally, by the "standard" string type).
> Also, inPython3.0, you can have models with non-ascii names, which
> challenges some assumptions about things like the INSTALLED_APPS
> setting.
Again, I don't see a need to support these. I doubt the ability to
create them would be the primary reason why people would switch to
Python 3...
> I imagine that some of these things will 'come out in the wash', so to
> speak, and the lack of automatic conversion will help identify
> problems, but some things might come back to bite us if we don't get
> them right.
I think migration of existing applications is probably the biggest
challenge. For a new 3.x application, the guideline should be to use
the (unicode) string type throughout, and leave encodings entirely to
Django.
Regards,
Martin