Hello everybody, A week or two ago I got the idea to rewrite the template.py file. I worked on it for a weekend (and then left it there for a while, but that is another story) and now that most doctests pass I would like to ask you for comments.
The modifications are all done on web/template.py. I present you the output from the following command: $ git diff "c1b4ae6bf7ab29ffa9d2c28a39fc93bc0f5ca690" -- web/ template.py Which, I believe, is the latest commit by Anand, the 5th of September. I uploaded the output to pastebin.com: <http://pastebin.com/f28e95b3d> (HTML) and <http://pastebin.com/pastebin.php?dl=f28e95b3d> (plain text). I am not familiar with git or bazaar and only a little bit with mercurial: this is probably a very cumbersome way of sharing code changes, if anybody can tell me how this is normally done without access to the repository I would love to hear it. ## Goals In order of personal preference: - supporting other encodings than just utf-8 - making the code more obvious to read - making it more memory and CPU efficient. ## My impression of template.py's current state Correct me if I am wrong: it reads the entire template file at once as a raw byte string, does a /lot/ of splicing on it (this is usually very inefficient but I did not time it so I can not legally comment on it) and, important note, handles the raw byte string it reads as text encoded in utf-8 (hard-coded throughout the file to utf-8 and us- ascii). ## My changes so far Most significant changes: - Decode the template source file immediately when reading it - using unicode objects everywhere internally - update documentation and docstrings accordingly - step through the template line by line instead of compilation step by compilation step. The last step is done through extensive use of iterators: there is much less splicing of strings and the template engine does not need the entire file in memory anymore (although it does keep the compiled result in memory---I did not touch that part). For example: the splitline() function is never called anymore (it is completely removed from the code). This has not been tested extensively. Two doctests still fail: these are both related to old-style '$var x: 1' notation. Aside from the doctests, I did as good as no testing. And I did not compare the performance of both versions. I see this version mostly as a checkpoint that I illustrates my intentions enough to at least ask for some feedback, not a serious patch intended for the code base. I tried to leave as much of the current structure intact. Classes, functions, the big picture is still relatively the same. This is NOT a rewrite (yet), this is a big change to the implementation details. ## Plans for the future I want to start making more rigorous changes to the entire structure of template.py. At least some clear documentation on the steps that the code goes through is in order, as well as splitting the file into clearly seperate parts. I think more than that can be done, though. To be very honest: I am not entirely sure on what this will mean specifically, so I want to start by looking at how to best achieve the afore-mentioned goals. ## My request to the web.py community I would like to ask anybody who has read this far ;) a few questions. Please comment on any subset of these questions if you can find the motivation. - What do you think about the current templating system? On an abstract level: the documentation, the specification, the way it works, etc. Also on a practical level: performance, bugs, error messages, handling of encoding, etc. Any comments you have I would like to hear them. - What do you think about the changes I proposed (under "Goals"), and about this entire effort in general? Please do not hold back---if you think I should stop, I would rather hear it now than spend more time on something that will not be accepted. - What do you think about the code itself? Official template.py and mine, any comments you have. - Anything else you have to say! Greetings, Hraban --~--~---------~--~----~------------~-------~--~----~ You received this message because you are subscribed to the Google Groups "web.py" 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/webpy?hl=en -~----------~----~----~----~------~----~------~--~---
