On Mon, Apr 5, 2010 at 12:48 PM, Dagvadorj Galbadrakh
<dagvad...@gmail.com> wrote:
> 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.
>
>

Err, no, modifying a set of functions who's purpose is to support
dynamic imports using the standard python import protocol should
definitely not be necessary.  I'd highly advise you take a look at the
thread on the same topic by Arthur Koziel, that thread discusses a lot
of issues that you haven't brought up here.

Alex

-- 
"I disapprove of what you say, but I will defend to the death your
right to say it." -- Voltaire
"The people's good is the highest law." -- Cicero
"Code can always be simpler than you think, but never as simple as you
want" -- Me

-- 
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