Hi Arthur, thanks for your work!
Is any syntax of setting keywords for app instances in INSTALLED_APPS or somewhere in settings supported now? On Mon, Aug 23, 2010 at 2:06 AM, Arthur Koziel <art...@arthurkoziel.com> wrote: > Hey there, > > the GSOC is over and I wanted to give you all a final status report. > > The AppCache was refactored and now creates app instances instead of just > loading models. An app is either an instance of django.core.apps.App or a > custom class. This depends on the entry in the INSTALLED_APPS setting. Here's > an example: > > INSTALLED_APPS = ( > 'django.contrib.auth', > 'django.contrib.sites', > 'myproject.poll.MyPollApp', > ) > > With this setting, three instances will be created. Two instances of the > django.core.apps.App class and one MyPollApp instance. The MyPollApp class > could look like this: > > from django.core.apps import App > from django.utils.translation import ugettext as _ > > class MyPollApp(App): > def __init__(self, name): > super(MyPollApp, self).__init__(name) > self.verbose_name = _('Poll') > self.db_prefix = 'foo' > > The first thing to note is the verbose_name attribute, which allows for a > more descriptive name of the app. Currently the app name is the app_label, so > "auth" would be used for "django.contrib.auth". However, something like > "Authentication" would fit better from a UI perspective. The name can be > passed to the ugettext function and translated in the projects .po file on > the next run of makemessages. I modified the admin to use the verbose_name > instead of the app_label. > > The db_prefix attribute allows the app to specify the prefix used when the > tables are created in the database. If the above app would have a "Poll" > model, it would be created as "foo_poll" instead of "poll_poll". > > There many more attributes than can be implemented like a fixture prefix or > admin permission prefix. The models app label is currently used for far too > many things. > > > > One thing I noticed was that a lot of code in Django itself or 3rd party apps > iterates over the installed apps and imports them. This won't work anymore as > an app can now also be a path to a class, so the import will raise an > exception. > > The ideal solution would be to change the code to iterate over the app > instances instead of the INSTALLED_APPS setting, but this might be a little > bit too much to ask. So, there's now an "installed_apps" attribute on the > AppCache that is a normalized version of the settings.INSTALLED_APPS variable > (with classnames removed). This makes the migration easier as this code: > > for app in settings.INSTALLED_APPS: > import_module(app) > > simply needs to be changed to this: > > for app in cache.installed_apps: > import_module(app) > > Applications with the same app label still cannot be created. The problem is > backwards compatibility, as the methods of the AppCache (get_model/get_app > etc.) all take the app_label as an argument. If, for example, there would be > two "auth" app instances (e.g. django.contrib.auth > and myproject.auth) calling get_model('auth', ...) the function must still > return the first one. I don't see migration path from app label to full path > without breaking bc. > > Nevertheless, things have improved a little here. Previously, loading two > apps with the same app label would assign the models of the second app to the > first app, leaving the user with one auth app that mixed together the models > from both apps. That won't happen anymore. Now there will be only one auth > app, and the second will not be loaded. Hopefully this will clear up some > confusion. > > > > Overall, I'm happy with the result. Working on this project was a great > experience for me. I plan to continue my work on this branch after gsoc. > Jannis Leidel was a fantastic mentor, always available and really helpful. > > I have the next 2 weeks filled up with exams but I'll be in Portland for > DjangoCon in early September. I'm always open to feedback and planning on > attending the sprints to do some further work. So until then... > > Regards, > Arthur > > -- > 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. > > -- Best regards, Yuri V. Baburov, ICQ# 99934676, Skype: yuri.baburov, MSN: bu...@live.com -- 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.