20110622
========
watch_tim now logs changes
--------------------------
:term:`watch_tim` ruft jetzt :func:`lino.utils.dblogger.log_changes`.
Dadurch kann man in den log-Dateien nun sehen, was er verändert hat.
Statt bisher nur der Zusammenfassung "5 changes have been processed."
Checkin-Serie 20110622.
appy.pod and enumerations
-------------------------
Gaëtan has solved the `lists in "do text from xhtml()" `_ problem.
In works on my computer, but when trying it at the customer's
site I saw another problem::
Error while evaluating the expression "html(self.body)" defined in the "from" part of a statement.
File "", line 1, in
File "/var/snapshots/lino/lino/utils/appy_pod.py", line 63, in html_func
return renderer.renderXhtml(html,**kw)
File "/var/snapshots/appy-current/appy/pod/renderer.py", line 238, in renderXhtml
stylesMapping, ns).run()
File "/var/snapshots/appy-current/appy/pod/xhtml2odt.py", line 493, in run
self.xhtmlParser.parse(self.xhtmlString)
File "/var/snapshots/appy-current/appy/shared/xml_parser.py", line 195, in parse
self.parser.parse(inputSource)
File "/usr/lib/python2.6/xml/sax/expatreader.py", line 107, in parse
xmlreader.IncrementalParser.parse(self, source)
File "/usr/lib/python2.6/xml/sax/xmlreader.py", line 123, in parse
self.feed(buffer)
File "/usr/lib/python2.6/xml/sax/expatreader.py", line 211, in feed
self._err_handler.fatalError(exc)
File "/usr/lib/python2.6/xml/sax/handler.py", line 38, in fatalError
raise exception
: :1:1: not well-formed (invalid token)
Here now also a more elegant trick to see the xml fragment
that causes the problem. In :file:`appy/shared/xml_parser.py`
I wrapped the `self.parser.parse(inputSource)` call into an
Exception handler that logs the fragment to the dblogger and
then re-raises::
try:
self.parser.parse(inputSource)
except Exception,e:
from lino.utils import dblogger
dblogger.info("Exception while parsing:-----\n%r\n-----",xml)
raise
This creates the following log entry in the above case::
201106-22 10:22:44 INFO xml_parser : Exception while parsing:-----
u'In Notizen haben wir jetzt den WYSIWYG-Editor.
\nAufz\xe4hlungen sind m\xf6glich:
\n\nerstens\nzweitens\nund drittens.\xa0\n\nMan kann nicht nur fett,
sondern auch kursiv (italic) und unterstrichen schreiben.
\n\xa0
'
-----
Explanation: some versions of expat parsers don't like unicode strings.
Always encode them.
Solution is to have Lino's `html()` template function
in :mod:`lino.utils.appy_pod` do this::
if isinstance(html,unicode):
html = html.encode('utf-8')
We simply hardcode UTF-8 because appy.pod currently doesn't support anything else.
Derek Dahmer posted a similar problem on
`stackoverflow `_
Checkin 20110622b.
DoesNotExist at /api/uploads/Uploads
------------------------------------
There was a problem when the owner of an upload no longer exists.
Deleting a Person obviously does not also delete her uploads,
and neither does Lino refuse to delete the Person.
Probably because it is a `GenericForeignKey`.
But worse: the server afterwards caused an exception
when we wanted to display a list of all uploads.
This is fixed. And the fields Upload.owner_type and Upload.owner_id are
now editable again so that users can manually repair such cases.
Kleinkram
---------
- persons_by_user kleine Optimierungen
- Person.get_property
- Funktion `iif` in AppyBuildMethod
Checkin 20110622d.