I am planning to modify django.utils.importlib.py this way. Is it
agreeable?


On Apr 5, 11:11 am, Dagvadorj Galbadrakh <dagvad...@gmail.com> wrote:
> Hello group,
>
> I want to attend to this year's Google Summer of Code program with
> "App loading". The following is a part from my proposal. It offers
> more simplistic approach than heavily discussed one with App() in
> INSTALLED_APPS, i.e., multiple instances of an app is declared as
> ('foo.polls', 'mayor'). I'd appreciate any comments and feedbacks.
>
> Thanks,
>
> --
>
> Proposal
>
> I'd like to propose a solution which is one of the earlier
> recommendations regarding the issue and is simpler among these. App
> loading would be defined as follows:
>
> Note: The explanations and illustrations in this proposal will focus
> around an application called 'gsoc' – Google Summer of Codes program
> classified system which shows the lists of accepted organizations and
> ideas of a selected organization. The instances of the app will be
> classified systems for this year, last year, and so forth.
>
> INSTALLED_APPS = (
>
> 'django.contrib.auth',
>
> 'django.contrib.contenttypes',
>
> 'django.contrib.sessions',
>
> 'django.contrib.sites',
>
> 'django.contrib.admin',
>
> 'foo.gsoc', #an instance of foo.gsoc; the name is foo.gsoc
>
> ('foo.gsoc', '2008'), #an instance of foo.gsoc; the name is foo.gsoc_2008_
>
> ('foo.gsoc', '2009'), #an instance of foo.gsoc; the name is foo.gsoc_2009_
>
> )
>
> This way no names would be colliding since it relies on the uniquely
> defined full module names (kind of namespace).
>
> The URLconf will be like the following:
>
> urlpatterns = patterns('',
>
> (r'^gsoc/', include('foo.gsoc.urls')),
>
> (r'^gsoc2009/', include('foo.gsoc_2009_.urls')),
>
> (r'^gsoc2008/', include('foo.gsoc_2008_.urls')),
>
> (r'^admin/', include(admin.site.urls)),
>
> )
>
> There's no need to define URLconf for each instance. The URLconf of
> each instance is derived from foo/gsoc/urls.py, which in this example
> looks like:
>
> from django.conf.urls.defaults import *
>
> import views # notice not absolute. IMPORTANT: Siblings are imported 
> relatively.
>
> urlpatterns = patterns('',
>
> (r'^/', views.index),
>
> (r'^orgs/$', views.list_orgs),
>
> (r'^ideas/(?P<org>\w+)/$', views.list_ideas),
>
> )
>
> In fact, I did work on the Django source trunk in the last couple of
> days and made it work. The patch can be found here and my project
> here.
>
> The major trick of my work was creating name for an instance and
> importing it as module (like followings):
>
> ...
>
> for app_name in settings.INSTALLED_APPS:
>
>     if (type(app_name) == types.TupleType):
>
>     a = app_name[0]+ "_" + app_name[1] + "_"
>
> else:
>
>     a = app_name
>
> if a in self.handled:
>
>     continue
>
> ...
>
> # in django/db/models/loading.py and some other places
>
> def import_module(name, package=None):
>
> ...
>
>     if not name.split('.')[-1].endswith('_'):
>
>           __import__(name)
>
>     else:
>
>           temp_name = name[0:name.rindex('_')]
>
>           new_module = __import__(temp_name[0:temp_name.rindex('_')],
> globals(), locals(), ['models'], -1)
>
>            sys.modules[name] = new_module
>
> return sys.modules[name]
>
> # in django/utils/importlib.py
>
> --
> Dagvadorj GALBADRAKH

-- 
You received this message because you are subscribed to the Google Groups 
"Django developers" group.
To post to this group, send email to django-develop...@googlegroups.com.
To unsubscribe from this group, send email to 
django-developers+unsubscr...@googlegroups.com.
For more options, visit this group at 
http://groups.google.com/group/django-developers?hl=en.

Reply via email to