20121114 ======== Ich bin noch immer mit den Online-Demos dran, die demnächst fertig werrden müssten. Eins ---- :: MultipleObjectsReturned: get() returned more than one City -- it returned 2! Lookup parameters were {'name': 'Eupen'} INFO Lino initdb done ('std', 'all_countries', 'be', 'few_cities', 'all_languages', 'props', 'democfg', 'demo', 'demo_ev ents') on database :memory:. Oh, das war ein subtiler Bug! Es gab eine Fixture `lino.modlib.ledger.fixtures.be`, in dem fälschlicherweise keine Funktion `objects` definiert war. Aber :mod:`lino.utils.dumpy` merkte das nicht, sondern rief stattdesen die `objects` der vorigen Fixture nochmal neu auf. Zumindest falls es denn der Zufall wollte, dass just zuvor eine Fixture mit dem gleichen Namen (hier "be") geladen worden war. Das lag daran, dass ich `imp.load_module `_ falsch aufrief. Jetzt generiert er eindeutige temporäre Modulnamen im Stil "lino.utils.dumpy_tmp_37091808". When :attr:`lino.Lino.build_js_cache_on_startup` is None, :mod:`lino.core.kernel` now also considers :setting:`DEBUG` for finding the default value. Zwei ---- Problem Nummer Zwei war besonders dumm und deshalb besonders schwer zu finden. Auf lf.org kam bei der initdb_demo von demo2 (presto) folgender Traceback:: Traceback (most recent call last): File "/home/luc/snapshots/django/django/core/management/commands/loaddata.py", line 221, in handle return File "/usr/lib/python2.6/contextlib.py", line 34, in __exit__ self.gen.throw(type, value, traceback) File "/home/luc/snapshots/django/django/db/backends/__init__.py", line 271, in constraint_checks_disabled yield File "/home/luc/snapshots/django/django/core/management/commands/loaddata.py", line 190, in handle for obj in objects: File "/home/luc/mypy/demo2/using/lino/lino/utils/dumpy.py", line 497, in deserialize for obj in module.objects(): File "/home/luc/mypy/demo2/using/lino/lino/modlib/users/fixtures/demo.py", line 55, in objects kw = root_kw(lang) File "/home/luc/mypy/demo2/using/lino/lino/modlib/users/fixtures/demo.py", line 23, in root_kw kw.update(profile=dd.UserProfiles.admin) AttributeError: type object 'UserProfiles' has no attribute 'admin' War auch wie folgt reproduzierbar. Erstelle eine Datei :file:`t.py` mit folgendem Inhalt:: from django.conf import settings settings.LINO.startup() Starte die Datei:: $ python manage.py run t.py INFO Starting Lino... 20120705 lino.UserProfiles.user:100(level=user,office=user) 20120705 lino.UserProfiles.admin:900(level=admin,office=admin) INFO Analyzing models... WARNING No help texts : no such table: lino_helptext INFO Lino Site 'presto@armand' started. Languages: de, en, fr, et, nl. 197 actors. INFO Using Lino Presto 0.0.1, Lino 1.5.1, Django 1.4.2, python-dateutil 1.5, Cheetah 2.4.4, OdfPy ODFPY/0.9.4, docutils 0.7, suds 0.4.1, PyYaml 3.08, Appy 0.8.0 (2011/12/15 22:41), Python 2.7.1, Silk Icons 1.3. Auf lf.org fehlen in beiden Debug-Zeilen die `name` der UserProfiles:: 20120705 lino.UserProfiles:100(level=user,office=user) 20120705 lino.UserProfiles:900(level=admin,office=admin) Lösung war einfach, dass Mercurial mir einen Streich gespielt hatte: ich hatte nicht gemerkt, dass er eine lokal bearbeitete Datei nicht aktualisiert hatte. Drei ---- Eine dritte Überraschung war die Erkenntnis, dass die meisten Aktionen par défaut nur für angemeldete Benutzer sichtbare sein sollten.