20130301 ======== `contacts.QuickTest` failed sometimes ------------------------------------- Gestern abend hatte ich das hier bemerkt: - `contacts.QuickTest` fails when called for a Lino-Welfare site. Das war subtil. Lag daran, dass :mod:`lino_welfare.modlib.cv` folgendes machte, um die Titel der drei Tabellen "Fähigkeiten", "Sozialkompetenzen" und "Hindernisse" zu setzen:: @classmethod def after_site_setup(self,site): super(ConfiguredPropsByPerson,self).after_site_setup(site) if self.propgroup_config_name: def adapt(sc): ... adapt(site.site_config) ... Da wurde also während :meth:`lino.Lino.startup` auf :attr:`lino.Lino.site_config` zugegriffen. Logisch, denn diese drei Tabellen hängen nun mal davon ab, was man in der SiteConfig angegeben hat. Lino versucht da also die `SiteConfig` zu laden:: @property def site_config(self): if self._site_config is None: from lino.core.modeltools import resolve_model SiteConfig = resolve_model('ui.SiteConfig') from django.db.utils import DatabaseError try: self._site_config = SiteConfig.objects.get(pk=1) except (SiteConfig.DoesNotExist,DatabaseError): kw = dict(pk=1) kw.update(self.site_config_defaults) self._site_config = SiteConfig(**kw) return self._site_config Bei einem ``manage.py test`` gelang ihm das *manchmal*, und zwar dann, wenn zufällig momentan eine echte Datenbank existierte. Dann hatte er das Objekt im Cache drin, aber kurz danach wurde die echte Datenbank abgemeldet, um die Testdatenbank anzumelden und zu erstellen. Besonders witzig war, dass es dann nicht sofort und überhaupt gar nicht immer knallte. Es knallte z.B., wenn ein Test dann auf `settings.LINO.site_config.site_company` zugriff. Dann versuchte Django, die `site_company` aus der Datenbank zu holen, deren `primary key` er sich zuvor selber notiert hatte. Und dann merkte er, dass eine Company mit diesem pk nicht existierte. Eine erste Lösung bestand darin, nach jedem `connection_created` den cache zu löschen:: @dd.receiver(dd.connection_created) def my_callback(sender,**kw): settings.LINO.clear_site_config() Aber das war doch recht unelegant: zufällige Daten einlesen, nur das Ganze dann wieder rückgängig zu machen? Nein, da ändern wir doch besser die obige `after_site_setup`, so dass diese Funktion `adapt` nicht sofort sondern nach jedem `connection_created` gerufen wird:: @classmethod def after_site_setup(self,site): super(ConfiguredPropsByPerson,self).after_site_setup(site) if self.propgroup_config_name: def adapt(sc): ... @dd.receiver(dd.connection_created) def my_callback(sender,**kw): adapt(settings.LINO.site_config) ... Jetzt brauchen wir auch nicht mehr den DatabaseError abzufangen in der property :attr:`site_config `. Cool! Lino ist mal wieder schöner geworden. expected parenthesized list --------------------------- I had the following line in my setup.py:: requires = [... 'python-dateutil'...], That was wrong, it must be:: requires = [... 'python_dateutil'...], Here is how Distribute told me this:: python setup.py sdist --formats=gztar,zip --dist-dir=docs/dl Traceback (most recent call last): File "setup.py", line 47, in Topic :: Software Development :: Libraries :: Application Frameworks""".splitlines()) File "C:\Python27\lib\distutils\core.py", line 112, in setup _setup_distribution = dist = klass(attrs) File "C:\Python27\lib\site-packages\distribute-0.6.35-py2.7.egg\setuptools\dist.py", line 225, in __init__ _Distribution.__init__(self,attrs) File "C:\Python27\lib\distutils\dist.py", line 259, in __init__ getattr(self.metadata, "set_" + key)(val) File "C:\Python27\lib\distutils\dist.py", line 1220, in set_requires distutils.versionpredicate.VersionPredicate(v) File "C:\Python27\lib\distutils\versionpredicate.py", line 113, in __init__ raise ValueError("expected parenthesized list: %r" % paren) ValueError: expected parenthesized list: '-dateutil' make: *** [sdist] Error 1 Release ------- Und jetzt kann ich die neuen Versionen für :welfare:`Lino-Welfare ` und :lino:`Lino ` rauslassen und installieren. Genau rechtzeitig zum Amtsantritt des neuen Präsidenten. Willkommen im ÖSHZ, Lambert Jaegers! Wir kennen uns noch nicht persönlich, aber ich freue mich, dass jetzt ein Ecolo-Geist mitredet. New naming ideas ---------------- Continued to think on :srcref:`docs/tickets/74`.