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("<","&lt;")
>>>      msg = msg.replace(">","&gt;")
>>>
>>   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 &amp;, < with &lt;,
>  > with &gt; and, optionally, " with &quot;.
> 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.

Reply via email to