Opened 22 months ago

Last modified 13 months ago

#18603 new Cleanup/optimization

Adding support for PEP 302 importers

Reported by: bhuztez Owned by: nobody
Component: Core (Other) Version:
Severity: Normal Keywords:
Cc: cberner Triage Stage: Accepted
Has patch: yes Needs documentation: no
Needs tests: no Patch needs improvement: no
Easy pickings: no UI/UX: no


Django makes assumptions about the filesystem layout of python packages here and there, and will silently skip any app which does not meet Django's assumptions without raise up any warnings.

Adding support for PEP 302 importers can solve all these problems, including #582 #596 #8238 #8280 #12206 #13587 #16718 #17331. And I found that there are three different kinds of problems.

  1. find submodules before importing the package: finding management commands
  2. find submodules after importing the package: finding template tags(already solved by #13334) and listing available database backends
  3. find resource files after importing the package: template files, static files, fixtures and translation files

I have been working on solve these problems in the past few months, code is now available on Github:

There are still a few problems.

management command
since we have to find management commands before importing any app packages, we still need to make assumptions, see . I think we have to make a better assumption on loader.get_filename. And how to find management commands in packages imported by sys.meta_path?
static files finder
I changed static files finder API. now Finder.find returns [(storage, path)] instead of [path].
app package resource file regression tests
templates, fixtures, translation files and static files (except collect_static) relies on same api to find resource files. Should I just add tests for the API, or I have to add almost same tests for templates, fixtures, translation files and static files?
template loader
I changed template loader API. I think the template_dirs parameter is confusing here in loader(template_name, template_dirs=None). if I set the template_dirs parameter, django.template.loaders.app_directories.Loader works just like django.template.loaders.filesystem.Loader, and django.template.loaders.eggs.Loader does not respect my parameter.
fixture path
how to humanize(fixture_storage)?

Any ideas?

Attachments (0)

Change History (3)

comment:1 Changed 22 months ago by aaugustin

  • Needs documentation unset
  • Needs tests unset
  • Patch needs improvement unset
  • Triage Stage changed from Unreviewed to Accepted

comment:2 Changed 21 months ago by cberner

  • Cc cberner added

Hey bhuztez,

I started work on part of this (the management command issue) because we've run into it. My patch is here. Let me know if I can be of assistance with other parts of this issue.

comment:3 Changed 13 months ago by aaugustin

  • Component changed from Uncategorized to Core (Other)

Add Comment

Modify Ticket

Change Properties
<Author field>
as new
The owner will be changed from nobody to anonymous. Next status will be 'assigned'
as The resolution will be set. Next status will be 'closed'

E-mail address and user name can be saved in the Preferences.

Note: See TracTickets for help on using tickets.