diff --git a/doc/getting_started/upgrade.rst b/doc/getting_started/upgrade.rst index c24117dfc..dfde23e49 100644 --- a/doc/getting_started/upgrade.rst +++ b/doc/getting_started/upgrade.rst @@ -33,6 +33,11 @@ install it. $ pip install --upgrade modoboa +.. warning:: + + If you migrate to **1.1.0**, please follow the :ref:`dedicated migration + procedure <1.1.0>` and skip the usual one. + Then, refer to this page to check if the version you're installing requires specific operations. If the version you're looking for is not present, it means nothing special is required. @@ -43,6 +48,41 @@ Finally, follow the common procedure:: $ python manage.py syncdb --migrate $ python manage.py collectstatic +.. _1.1.0: + +1.1.0: FIXME +============ + +Due to code refactoring, some modifications need to be done into +:file:`settings.py`: + +#. ``MODOBOA_APPS`` must contain the following applications:: + + MODOBOA_APPS = ( + 'modoboa', + 'modoboa.core', + 'modoboa.lib', + + 'modoboa.extensions.admin', + 'modoboa.extensions.limits', + 'modoboa.extensions.postfix_autoreply', + 'modoboa.extensions.webmail', + 'modoboa.extensions.stats', + 'modoboa.extensions.amavis', + 'modoboa.extensions.sievefilters', + ) + +#. ``AUTH_USER_MODEL`` must be set to ``core.User`` + +#. Into ``LOGGING``, replace ``modoboa.lib.logutils.SQLHandler`` by + ``modoboa.core.loggers.SQLHandler`` + +Then, run the following commands to migrate your installation:: + + $ python manage.py migrate core 0001 --fake + $ python manage.py migrate + $ python manage.py collectstatic + 1.0.1: operations on mailboxes ============================== diff --git a/modoboa/core/urls.py b/modoboa/core/urls.py index a4d1147f9..152d56229 100644 --- a/modoboa/core/urls.py +++ b/modoboa/core/urls.py @@ -2,13 +2,20 @@ from django.conf.urls import patterns, url urlpatterns = patterns( - 'modoboa.core.views', - - (r'^settings/$', 'viewsettings'), - (r'^settings/parameters/$', 'viewparameters'), - (r'^settings/parameters/save/$', 'saveparameters'), - (r'^settings/extensions/$', 'viewextensions'), - (r'^settings/extensions/save/$', 'saveextensions'), - (r'^settings/info/$', 'information'), - (r'^settings/logs/$', 'logs'), + '', + + (r'^accounts/login/$', 'modoboa.core.views.auth.dologin'), + (r'^accounts/logout/$', 'modoboa.core.views.auth.dologout'), + + (r'^core/$', 'modoboa.core.views.admin.viewsettings'), + (r'^core/parameters/$', 'modoboa.core.views.admin.viewparameters'), + (r'^core/parameters/save/$', 'modoboa.core.views.admin.saveparameters'), + (r'^core/extensions/$', 'modoboa.core.views.admin.viewextensions'), + (r'^core/extensions/save/$', 'modoboa.core.views.admin.saveextensions'), + (r'^core/info/$', 'modoboa.core.views.admin.information'), + (r'^core/logs/$', 'modoboa.core.views.admin.logs'), + + (r'^user/$', 'modoboa.core.views.user.index'), + (r'^user/preferences/$', 'modoboa.core.views.user.preferences'), + (r'^user/profile/$', 'modoboa.core.views.user.profile'), ) diff --git a/modoboa/extensions/limits/controls.py b/modoboa/extensions/limits/controls.py index f8174e666..c8c6829d1 100644 --- a/modoboa/extensions/limits/controls.py +++ b/modoboa/extensions/limits/controls.py @@ -133,7 +133,6 @@ def can_create_new_object(user, objtype): @events.observe("AccountCreated") def create_pool(user): - print "pouet" owner = get_object_owner(user) if not owner.is_superuser and \ not owner.belongs_to_group("Resellers"): diff --git a/modoboa/extensions/limits/tests.py b/modoboa/extensions/limits/tests.py index 23e4669e3..410b9f30c 100644 --- a/modoboa/extensions/limits/tests.py +++ b/modoboa/extensions/limits/tests.py @@ -1,7 +1,8 @@ from django.core.urlresolvers import reverse from modoboa.lib.tests import ExtTestCase +from modoboa.core.factories import UserFactory +from modoboa.extensions.admin.factories import DomainFactory, MailboxFactory from modoboa.core.models import User -from modoboa.admin import factories class PermissionsTestCase(ExtTestCase): @@ -10,10 +11,11 @@ class PermissionsTestCase(ExtTestCase): def setUp(self): super(PermissionsTestCase, self).setUp() - dom = factories.DomainFactory(name='test.com') - self.admin = factories.UserFactory( - username='admin@test.com', groups=('DomainAdmins',), mailbox__domain=dom + dom = DomainFactory(name='test.com') + self.admin = UserFactory( + username='admin@test.com', groups=('DomainAdmins',) ) + MailboxFactory(address='admin', domain=dom, user=self.admin) dom.add_admin(self.admin) def test_domainadmin_deletes_reseller(self): @@ -26,7 +28,7 @@ class PermissionsTestCase(ExtTestCase): password1="toto", password2="toto", role="Resellers", is_active=True, email="reseller@test.com", stepid=2 ) - self.check_ajax_post(reverse("modoboa.admin.views.newaccount"), values) + self.check_ajax_post(reverse("modoboa.extensions.admin.views.identity.newaccount"), values) account = User.objects.get(username="reseller@test.com") self.clt.logout() self.clt.login(username="admin@test.com", password="toto") diff --git a/modoboa/lib/tests.py b/modoboa/lib/tests.py index d99d2e6a1..986d7d7b2 100644 --- a/modoboa/lib/tests.py +++ b/modoboa/lib/tests.py @@ -35,8 +35,8 @@ class ExtTestCase(ModoTestCase): def setUp(self, *args, **kwargs): super(ExtTestCase, self).setUp(*args, **kwargs) - self.clt.get(reverse("modoboa.admin.views.viewextensions")) - self.clt.post(reverse("modoboa.admin.views.saveextensions"), + self.clt.get(reverse("modoboa.core.views.admin.viewextensions")) + self.clt.post(reverse("modoboa.core.views.admin.saveextensions"), {"select_%s" % self.name : "1"}) @@ -65,7 +65,7 @@ class ParameterTestCase(TestCase): """ def setUp(self): - from modoboa.admin.models import User + from modoboa.core.models import User parameters.register(TestParams, "Test") parameters.register(TestUserParams, "TestUser") self.user = User.objects.create(username="tester") diff --git a/modoboa/urls.py b/modoboa/urls.py index 8c85d6060..25d9a2ee9 100644 --- a/modoboa/urls.py +++ b/modoboa/urls.py @@ -6,39 +6,29 @@ from modoboa.core import load_settings load_settings() -urlpatterns = patterns('', +urlpatterns = patterns( + '', (r'^$', 'modoboa.lib.webutils.topredirection'), (r'^jsi18n/$', 'django.views.i18n.javascript_catalog', {'packages': ('modoboa', ), }), - - (r'^accounts/login/$', 'modoboa.core.views.auth.dologin'), - (r'^accounts/logout/$', 'modoboa.core.views.auth.dologout'), - - (r'^core/$', 'modoboa.core.views.admin.viewsettings'), - (r'^core/parameters/$', 'modoboa.core.views.admin.viewparameters'), - (r'^core/parameters/save/$', 'modoboa.core.views.admin.saveparameters'), - (r'^core/extensions/$', 'modoboa.core.views.admin.viewextensions'), - (r'^core/extensions/save/$', 'modoboa.core.views.admin.saveextensions'), - (r'^core/info/$', 'modoboa.core.views.admin.information'), - (r'^core/logs/$', 'modoboa.core.views.admin.logs'), - - (r'^user/$', 'modoboa.core.views.user.index'), - (r'^user/preferences/$', 'modoboa.core.views.user.preferences'), - (r'^user/profile/$', 'modoboa.core.views.user.profile'), + ('', include('modoboa.core.urls')), ) -urlpatterns += patterns('', +urlpatterns += patterns( + '', *events.raiseQueryEvent("ExtraUprefsRoutes") ) -urlpatterns += patterns('', +urlpatterns += patterns( + '', *exts_pool.load_all() ) parameters.apply_to_django_settings() if 'modoboa.demo' in settings.INSTALLED_APPS: - urlpatterns += patterns('', + urlpatterns += patterns( + '', (r'^demo/', include('modoboa.demo.urls')) ) @@ -46,4 +36,6 @@ if settings.DEBUG: from django.contrib.staticfiles.urls import staticfiles_urlpatterns from django.conf.urls.static import static urlpatterns += staticfiles_urlpatterns() - urlpatterns += static(settings.MEDIA_URL, document_root=settings.MEDIA_ROOT) + urlpatterns += static( + settings.MEDIA_URL, document_root=settings.MEDIA_ROOT + )