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.