On Sat, Mar 24, 2012 at 12:39 PM, Phil Charlesworth <[email protected]> wrote: > On 23/03/12 17:14, lkcl luke wrote: >> On Fri, Mar 23, 2012 at 4:32 PM, Phil Charlesworth >> <[email protected]> wrote: >> >>> On 23/03/12 10:03, Peter Bittner wrote: >>> >>>> Phil, >>>> >>>> thanks for the testing. >>>> >>>> What I have noticed is that the logging module works with Pyjamas >>>> Desktop, unfortunately it doesn't work quite that well with pyjs. I >>>> hope I'll have some time in the evenings this weekend to look into >>>> this more closely. >>>> >>>> 2012/3/22 Phil Charlesworth<[email protected]>: >>>> >>>> >>>>> I've done a bit of very rudimentary testing of the various handlers >>>>> under pyjd on Windows >>>>> (just AlertLogger, AppendLogger and PrintLogger and everything seemed to >>>>> work. Just one comment. AlertLogger and PrintLogger (and, no doubt, >>>>> ConsoleLogger all work with text but AppendLogger is treating the >>>>> message as HTML. So, if the record is something like >>>>> <Sink.SinkInfo instance at 0x04C5CD28> it doesn't come out. Maybe >>>>> AppendHandler needs to call an escape function to turn things that are >>>>> special characters to HTML into their equivalent HTML entities. >>>>> >>>>> >>>> That's strange: The message itself is not modified much, just that >>>> line feeds are replaced by br tags: >>>> >>>> (pyjamas/library/pyjamas/logging/handlers.py, class AppendHandler) >>>> def emit(self, record): >>>> msg = self.format(record) >>>> msg = msg.replace("\n", "<br/>\n") + "<br/>\n" >>>> self.output += msg >>>> self.__addLogElement() >>>> DOM.setInnerHTML(self.div, self.output) >>>> >>>> Peter >>>> >>> Peter, >>> Just to clarify what I said about AppendHandler, the whole >>> message is rendered as HTML, so if you have, say,<Sink.SinkInfo >>> instance at 0x04C5CD28>, it looks like an HTML tag but the renderer >>> can't make sense of it so it leaves it out. I have made my version work >>> by adding the two lines >>> msg = msg.replace("<","<") >>> msg = msg.replace(">",">") >>> >> err.... those are i believe in cgi.escape, already. or something like it. >> >> >>> before the line where you replace "\n" by "<br/>\n". >>> However, all those replace calls and any other ones deemed necessary, or >>> desirable, could be put into one escape routine, so that you had: >>> msg = format(record) >>> self.output += escape(msg) >>> >>> Another way would be to have a dictionary with keys being characters to >>> be replaced and values being the replacement character. Then something like: >>> def escape(text): >>> return "".join(escape_dict.get(c,c) for c in text) >>> will work in cPython. (not sure if it works in pyjs - would have to check) >>> >> should do. if not, that's a bug in pyjs, and the above code-snippet >> should go into libtest. >> >> l. > L, > Yes, cgi.escape(s, quote = None) replaces & with &, < with <, > > with > and, optionally, " with ". > Also there is xml.saxutils.escape(data, entities = {}), which does > exactly the same for &, < and > but will also replace any keys in > entities with their values. > > Presumably something like one of these functions should be added to some > existing pyjamas module but which one? DOM?
no, they're already there, in pyjs/src/pyjs/lib. if they're not there, they should be added. l. > P.

