Monday, November 9, 2009

A patch for Django ticket #11696

Django ticket  #11696 is still not solved in Revision 11724. I didn't manage to apply the patch posted by anonymous on 09/13/09 18:08:56. Now I wrote my own patch which works for me, and I document it here as far as possible for now.

To install the patch, download the file 20091107.diff into you django's working copyand then type "patch -p0 < 20091107.diff", which should result in something like this:
(Stripping trailing CRs from patch.)
patching file django/db/models/loading.py

Yes I should write some test cases, when I have more time... for now I just write down the situation. I have a site with about 10 applications, and the models.py of one of them tries to import a non-existing module. This situation is stored in Lino 841 and igen 2.

Here is what happens without my patch:

T:\hgwork\igen\src\igen\demo>python manage.py validate
Traceback (most recent call last):
  File "manage.py", line 16, in
    execute_manager(settings)
  File "l:\snapshot\django\django\core\management\__init__.py", line 440, in execute_manager
    utility.execute()
  File "l:\snapshot\django\django\core\management\__init__.py", line 380, in execute
    self.fetch_command(subcommand).run_from_argv(self.argv)
  File "l:\snapshot\django\django\core\management\base.py", line 195, in run_from_argv
    self.execute(*args, **options.__dict__)
  File "l:\snapshot\django\django\core\management\base.py", line 223, in execute
    output = self.handle(*args, **options)
  File "l:\snapshot\django\django\core\management\base.py", line 352, in handle
    return self.handle_noargs(**options)
  File "l:\snapshot\django\django\core\management\commands\validate.py", line 9, in handle_noargs
    self.validate(display_num_errors=True)
  File "l:\snapshot\django\django\core\management\base.py", line 250, in validate
    num_errors = get_validation_errors(s, app)
  File "l:\snapshot\django\django\core\management\validation.py", line 28, in get_validation_errors
    for (app_name, error) in get_app_errors().items():
  File "l:\snapshot\django\django\db\models\loading.py", line 131, in get_app_errors
    self._populate()
  File "l:\snapshot\django\django\db\models\loading.py", line 58, in _populate
    self.load_app(app_name, True)
  File "l:\snapshot\django\django\db\models\loading.py", line 74, in load_app
    models = import_module('.models', app_name)
  File "l:\snapshot\django\django\utils\importlib.py", line 35, in import_module
    __import__(name)
  File "c:\drives\t\hgwork\lino\src\lino\modlib\contacts\models.py", line 29, in
    countries = models.get_app('countries')
  File "l:\snapshot\django\django\db\models\loading.py", line 114, in get_app
    self._populate()
  File "l:\snapshot\django\django\db\models\loading.py", line 58, in _populate
    self.load_app(app_name, True)
  File "l:\snapshot\django\django\db\models\loading.py", line 74, in load_app
    models = import_module('.models', app_name)
  File "l:\snapshot\django\django\utils\importlib.py", line 35, in import_module
    __import__(name)
  File "c:\drives\t\hgwork\lino\src\lino\modlib\ledger\models.py", line 26, in
    journals = reports.get_app('journals')
  File "c:\drives\t\hgwork\lino\src\lino\reports.py", line 44, in get_app
    m = models.get_app(app_label)
  File "l:\snapshot\django\django\db\models\loading.py", line 125, in get_app
    raise ImproperlyConfigured, "App with label %s could not be found" % app_label
django.core.exceptions.ImproperlyConfigured: App with label journals could not be found


Which is a completely useless error message.
And here is what happens after applying my patch:

  (...)
  File "l:\snapshot\django\django\db\models\loading.py", line 156, in get_app
    self._populate()
  File "l:\snapshot\django\django\db\models\loading.py", line 96, in _populate
    len(self.postponed),msg))
django.core.exceptions.ImproperlyConfigured: Failed to import 3 applications:
lino.modlib.sales:
Traceback (most recent call last):
  File "l:\snapshot\django\django\db\models\loading.py", line 112, in load_app
    models = import_module('.models', app_name)
  File "l:\snapshot\django\django\utils\importlib.py", line 35, in import_module
    __import__(name)
  File "c:\drives\t\hgwork\lino\src\lino\modlib\sales\models.py", line 49, in
    from lino.modlib.contacts import models as contacts
ImportError: cannot import name models
lino.modlib.finan:
Traceback (most recent call last):
  File "l:\snapshot\django\django\db\models\loading.py", line 112, in load_app
    models = import_module('.models', app_name)
  File "l:\snapshot\django\django\utils\importlib.py", line 35, in import_module
    __import__(name)
  File "c:\drives\t\hgwork\lino\src\lino\modlib\finan\models.py", line 32, in
    from lino.modlib.contacts import models as contacts
ImportError: cannot import name models
lino.modlib.journals:
Traceback (most recent call last):
  File "l:\snapshot\django\django\db\models\loading.py", line 112, in load_app
    models = import_module('.models', app_name)
  File "l:\snapshot\django\django\utils\importlib.py", line 35, in import_module
    __import__(name)
  File "c:\drives\t\hgwork\lino\src\lino\modlib\journals\models.py", line 30, in
    from lino.apps.documents import models as documents
ImportError: No module named apps.documents

No comments:

Post a Comment