[Python-modules-commits] [django-organizations] 01/04: Imported Upstream version 0.9.2

Scott Kitterman kitterman at moszumanska.debian.org
Mon Aug 7 05:31:44 UTC 2017


This is an automated email from the git hooks/post-receive script.

kitterman pushed a commit to branch debian/master
in repository django-organizations.

commit 6d6716ce721f43474db94194b289e6dbce1c5c2c
Author: Scott Kitterman <scott at kitterman.com>
Date:   Mon Aug 7 01:20:57 2017 -0400

    Imported Upstream version 0.9.2
---
 HISTORY.rst                            |  5 +++
 PKG-INFO                               | 11 ++++--
 README.rst                             |  4 +--
 django_organizations.egg-info/PKG-INFO | 11 ++++--
 organizations/__init__.py              |  2 +-
 organizations/abstract.py              | 14 ++++++--
 organizations/admin.py                 | 12 ++++---
 organizations/app_settings.py          |  2 +-
 organizations/backends/__init__.py     |  4 +--
 organizations/backends/defaults.py     | 65 ++++++++++++++++------------------
 organizations/backends/forms.py        | 27 ++++++++------
 organizations/base.py                  |  6 ++--
 organizations/forms.py                 |  7 ++--
 organizations/mixins.py                |  3 +-
 organizations/models.py                |  6 ++--
 organizations/urls.py                  | 29 ++++++++-------
 organizations/utils.py                 | 11 +++---
 organizations/views.py                 | 34 ++++++++++++------
 18 files changed, 148 insertions(+), 105 deletions(-)

diff --git a/HISTORY.rst b/HISTORY.rst
index f335196..265aeac 100644
--- a/HISTORY.rst
+++ b/HISTORY.rst
@@ -3,6 +3,11 @@
 History
 =======
 
+0.9.2
+-----
+
+* Decouple concrete organizations.Organization model from the invitation/registration backends
+
 0.9.1
 -----
 
diff --git a/PKG-INFO b/PKG-INFO
index 6c24cea..53b3945 100644
--- a/PKG-INFO
+++ b/PKG-INFO
@@ -1,6 +1,6 @@
 Metadata-Version: 1.1
 Name: django-organizations
-Version: 0.9.1
+Version: 0.9.2
 Summary: Group accounts for Django
 Home-page: https://github.com/bennylope/django-organizations/
 Author: Ben Lopatin
@@ -134,7 +134,7 @@ Description: ====================
         the `invitation_backend` function will provide the URLs defined by that
         backend::
         
-            ORGS_INVITATION_BACKEND = 'myapp.backends.MyInvitationBackend'
+            INVITATION_BACKEND = 'myapp.backends.MyInvitationBackend'
         
         
         Usage Overview
@@ -214,7 +214,7 @@ Description: ====================
         * Django 1.10.x against Python 2.7, 3.4, 3.5, and PyPy
         
         To run the tests against all target environments, install `tox
-        <https://testrun.org/tox/latest/>`_ and then execute the command:
+        <https://testrun.org/tox/latest/>`_ and then execute the command::
         
             tox
         
@@ -277,6 +277,11 @@ Description: ====================
         History
         =======
         
+        0.9.2
+        -----
+        
+        * Decouple concrete organizations.Organization model from the invitation/registration backends
+        
         0.9.1
         -----
         
diff --git a/README.rst b/README.rst
index c6f5a0f..1dbb447 100644
--- a/README.rst
+++ b/README.rst
@@ -126,7 +126,7 @@ You can specify a different invitation backend in your project settings, and
 the `invitation_backend` function will provide the URLs defined by that
 backend::
 
-    ORGS_INVITATION_BACKEND = 'myapp.backends.MyInvitationBackend'
+    INVITATION_BACKEND = 'myapp.backends.MyInvitationBackend'
 
 
 Usage Overview
@@ -206,7 +206,7 @@ The codebase is targeted and tested against:
 * Django 1.10.x against Python 2.7, 3.4, 3.5, and PyPy
 
 To run the tests against all target environments, install `tox
-<https://testrun.org/tox/latest/>`_ and then execute the command:
+<https://testrun.org/tox/latest/>`_ and then execute the command::
 
     tox
 
diff --git a/django_organizations.egg-info/PKG-INFO b/django_organizations.egg-info/PKG-INFO
index 6c24cea..53b3945 100644
--- a/django_organizations.egg-info/PKG-INFO
+++ b/django_organizations.egg-info/PKG-INFO
@@ -1,6 +1,6 @@
 Metadata-Version: 1.1
 Name: django-organizations
-Version: 0.9.1
+Version: 0.9.2
 Summary: Group accounts for Django
 Home-page: https://github.com/bennylope/django-organizations/
 Author: Ben Lopatin
@@ -134,7 +134,7 @@ Description: ====================
         the `invitation_backend` function will provide the URLs defined by that
         backend::
         
-            ORGS_INVITATION_BACKEND = 'myapp.backends.MyInvitationBackend'
+            INVITATION_BACKEND = 'myapp.backends.MyInvitationBackend'
         
         
         Usage Overview
@@ -214,7 +214,7 @@ Description: ====================
         * Django 1.10.x against Python 2.7, 3.4, 3.5, and PyPy
         
         To run the tests against all target environments, install `tox
-        <https://testrun.org/tox/latest/>`_ and then execute the command:
+        <https://testrun.org/tox/latest/>`_ and then execute the command::
         
             tox
         
@@ -277,6 +277,11 @@ Description: ====================
         History
         =======
         
+        0.9.2
+        -----
+        
+        * Decouple concrete organizations.Organization model from the invitation/registration backends
+        
         0.9.1
         -----
         
diff --git a/organizations/__init__.py b/organizations/__init__.py
index 9cbd29d..9ebcf4a 100644
--- a/organizations/__init__.py
+++ b/organizations/__init__.py
@@ -26,7 +26,7 @@
 
 __author__ = 'Ben Lopatin'
 __email__ = 'ben at wellfire.co'
-__version__ = '0.9.1'
+__version__ = '0.9.2'
 
 
 default_app_config = 'organizations.apps.OrganizationsConfig'
diff --git a/organizations/abstract.py b/organizations/abstract.py
index 2299510..a9890d7 100644
--- a/organizations/abstract.py
+++ b/organizations/abstract.py
@@ -29,14 +29,22 @@ from django.conf import settings
 from django.core.urlresolvers import reverse
 from django.db import models
 from django.utils.translation import ugettext_lazy as _
+
 try:
     import six
 except ImportError:
     from django.utils import six
 
-from .base import OrgMeta, AbstractBaseOrganization, AbstractBaseOrganizationUser, AbstractBaseOrganizationOwner
-from .fields import SlugField, AutoCreatedField, AutoLastModifiedField
-from .signals import user_added, user_removed, owner_changed
+from organizations.base import OrgMeta
+from organizations.base import AbstractBaseOrganization
+from organizations.base import AbstractBaseOrganizationUser
+from organizations.base import AbstractBaseOrganizationOwner
+from organizations.fields import SlugField
+from organizations.fields import AutoCreatedField
+from organizations.fields import AutoLastModifiedField
+from organizations.signals import user_added
+from organizations.signals import user_removed
+from organizations.signals import owner_changed
 
 USER_MODEL = getattr(settings, 'AUTH_USER_MODEL', 'auth.User')
 ORGS_TIMESTAMPED_MODEL = getattr(settings, 'ORGS_TIMESTAMPED_MODEL', None)
diff --git a/organizations/admin.py b/organizations/admin.py
index 08395eb..88684cc 100644
--- a/organizations/admin.py
+++ b/organizations/admin.py
@@ -25,11 +25,13 @@
 
 from django.contrib import admin
 
-from .base_admin import (BaseOwnerInline,
-                         BaseOrganizationAdmin,
-                         BaseOrganizationUserAdmin,
-                         BaseOrganizationOwnerAdmin)
-from .models import Organization, OrganizationUser, OrganizationOwner
+from organizations.base_admin import BaseOrganizationAdmin
+from organizations.base_admin import BaseOrganizationOwnerAdmin
+from organizations.base_admin import BaseOrganizationUserAdmin
+from organizations.base_admin import BaseOwnerInline
+from organizations.models import Organization
+from organizations.models import OrganizationOwner
+from organizations.models import OrganizationUser
 
 
 class OwnerInline(BaseOwnerInline):
diff --git a/organizations/app_settings.py b/organizations/app_settings.py
index 201ec91..48d2e88 100644
--- a/organizations/app_settings.py
+++ b/organizations/app_settings.py
@@ -26,7 +26,7 @@
 from django.conf import settings
 from django.contrib.auth.models import User
 
-from .utils import model_field_attr
+from organizations.utils import model_field_attr
 
 
 ORGS_INVITATION_BACKEND = getattr(settings, 'INVITATION_BACKEND',
diff --git a/organizations/backends/__init__.py b/organizations/backends/__init__.py
index 81ad627..8f00030 100644
--- a/organizations/backends/__init__.py
+++ b/organizations/backends/__init__.py
@@ -25,8 +25,8 @@
 
 from importlib import import_module
 
-from organizations.app_settings import (ORGS_INVITATION_BACKEND,
-        ORGS_REGISTRATION_BACKEND)
+from organizations.app_settings import ORGS_INVITATION_BACKEND
+from organizations.app_settings import ORGS_REGISTRATION_BACKEND
 
 
 def invitation_backend():
diff --git a/organizations/backends/defaults.py b/organizations/backends/defaults.py
index d0c2f63..f537557 100644
--- a/organizations/backends/defaults.py
+++ b/organizations/backends/defaults.py
@@ -31,29 +31,35 @@ import uuid
 
 from django.conf import settings
 from django.conf.urls import url
-from django.contrib.auth import authenticate, login, get_user_model
-from django.core.urlresolvers import reverse
+from django.contrib.auth import authenticate
+from django.contrib.auth import get_user_model
+from django.contrib.auth import login
 from django.core.mail import EmailMessage
+from django.core.urlresolvers import reverse
 from django.http import Http404
-from django.shortcuts import render, redirect
+from django.shortcuts import redirect
+from django.shortcuts import render
 from django.template import loader
 from django.utils.translation import ugettext as _
 
-from ..utils import create_organization
-from ..utils import model_field_attr
-from .forms import UserRegistrationForm, OrganizationRegistrationForm
-from .tokens import RegistrationTokenGenerator
+from organizations.backends.forms import UserRegistrationForm
+from organizations.backends.forms import org_registration_form
+from organizations.backends.tokens import RegistrationTokenGenerator
+from organizations.utils import create_organization
+from organizations.utils import default_org_model
+from organizations.utils import model_field_attr
 
 
 class BaseBackend(object):
     """
     Base backend class for registering and inviting users to an organization
     """
-    org_model = None
+    registration_form_template = 'organizations/register_form.html'
+    activation_success_template = 'organizations/register_success.html'
 
-    def __init__(self, org_model=None, *args, **kwargs):
+    def __init__(self, org_model=None):
         self.user_model = get_user_model()
-        self.org_model = org_model
+        self.org_model = org_model or default_org_model()
 
     def get_urls(self):
         raise NotImplementedError
@@ -92,7 +98,7 @@ class BaseBackend(object):
             relation_name = self.org_model().user_relation_name
         except TypeError:
             # No org_model specified, raises a TypeError because NoneType is
-            # not callable. Thiis the most sensible default
+            # not callable. This the most sensible default:
             relation_name = "organizations_organization"
         organization_set = getattr(user, relation_name)
         for org in organization_set.filter(is_active=False):
@@ -121,8 +127,7 @@ class BaseBackend(object):
                     password=form.cleaned_data['password'])
             login(request, user)
             return redirect(self.get_success_url())
-        return render(request, 'organizations/register_form.html',
-                {'form': form})
+        return render(request, self.registration_form_template, {'form': form})
 
     def send_reminder(self, user, sender=None, **kwargs):
         """Sends a reminder email to the specified user"""
@@ -130,8 +135,7 @@ class BaseBackend(object):
             return False
         token = RegistrationTokenGenerator().make_token(user)
         kwargs.update({'token': token})
-        self._send_email(user, self.reminder_subject, self.reminder_body,
-                sender, **kwargs)
+        self._send_email(user, self.reminder_subject, self.reminder_body, sender, **kwargs)
 
     # This could be replaced with a more channel agnostic function, most likely
     # in a custom backend.
@@ -141,8 +145,7 @@ class BaseBackend(object):
         if sender:
             from_email = "%s %s <%s>" % (sender.first_name, sender.last_name,
                     email.utils.parseaddr(settings.DEFAULT_FROM_EMAIL)[1])
-            reply_to = "%s %s <%s>" % (sender.first_name, sender.last_name,
-                    sender.email)
+            reply_to = "%s %s <%s>" % (sender.first_name, sender.last_name, sender.email)
         else:
             from_email = settings.DEFAULT_FROM_EMAIL
             reply_to = from_email
@@ -154,8 +157,7 @@ class BaseBackend(object):
         body_template = loader.get_template(body_template)
         subject = subject_template.render(kwargs).strip()  # Remove stray newline characters
         body = body_template.render(kwargs)
-        return EmailMessage(subject, body, from_email, [user.email],
-                headers=headers).send()
+        return EmailMessage(subject, body, from_email, [user.email], headers=headers).send()
 
 
 class RegistrationBackend(BaseBackend):
@@ -206,8 +208,7 @@ class RegistrationBackend(BaseBackend):
             return False
         token = self.get_token(user)
         kwargs.update({'token': token})
-        self._send_email(user, self.activation_subject, self.activation_body,
-                sender, **kwargs)
+        self._send_email(user, self.activation_subject, self.activation_body, sender, **kwargs)
 
     def create_view(self, request):
         """
@@ -215,7 +216,7 @@ class RegistrationBackend(BaseBackend):
         """
         if request.user.is_authenticated():
             return redirect("organization_add")
-        form = OrganizationRegistrationForm(request.POST or None)
+        form = org_registration_form(self.org_model)(request.POST or None)
         if form.is_valid():
             try:
                 user = self.user_model.objects.get(email=form.cleaned_data['email'])
@@ -229,13 +230,11 @@ class RegistrationBackend(BaseBackend):
                 return redirect("organization_add")
             organization = create_organization(user, form.cleaned_data['name'],
                     form.cleaned_data['slug'], is_active=False)
-            return render(request, 'organizations/register_success.html',
-                    {'user': user, 'organization': organization})
-        return render(request, 'organizations/register_form.html',
-                {'form': form})
+            return render(request, self.activation_success_template, {'user': user, 'organization': organization})
+        return render(request, self.registration_form_template, {'form': form})
 
     def success_view(self, request):
-        return render(request, 'organizations/register_success.html', {})
+        return render(request, self.activation_success_template, {})
 
 
 class InvitationBackend(BaseBackend):
@@ -289,8 +288,8 @@ class InvitationBackend(BaseBackend):
             return False
         token = self.get_token(user)
         kwargs.update({'token': token})
-        self._send_email(user, self.invitation_subject, self.invitation_body,
-                sender, **kwargs)
+        self._send_email(user, self.invitation_subject, self.invitation_body, sender, **kwargs)
+        return True
 
     def send_notification(self, user, sender=None, **kwargs):
         """
@@ -300,9 +299,5 @@ class InvitationBackend(BaseBackend):
         """
         if not user.is_active:
             return False
-        self._send_email(
-            user,
-            self.notification_subject,
-            self.notification_body,
-            sender,
-            **kwargs)
+        self._send_email(user, self.notification_subject, self.notification_body, sender, **kwargs)
+        return True
diff --git a/organizations/backends/forms.py b/organizations/backends/forms.py
index 0d249bc..aed6ac8 100644
--- a/organizations/backends/forms.py
+++ b/organizations/backends/forms.py
@@ -27,8 +27,6 @@ from django import forms
 from django.contrib.auth import get_user_model
 from django.utils.translation import ugettext_lazy as _
 
-from ..models import Organization
-
 
 class UserRegistrationForm(forms.ModelForm):
     """
@@ -61,14 +59,21 @@ class UserRegistrationForm(forms.ModelForm):
                 'date_joined', 'groups', 'user_permissions')
 
 
-class OrganizationRegistrationForm(forms.ModelForm):
-    """Form class for creating new organizations owned by new users."""
-    email = forms.EmailField()
+def org_registration_form(org_model):
+    """
+    Generates a registration ModelForm for the given organization model class
+    """
+
+    class OrganizationRegistrationForm(forms.ModelForm):
+        """Form class for creating new organizations owned by new users."""
+        email = forms.EmailField()
+
+        class Meta:
+            model = org_model
+            exclude = ('is_active', 'users')
 
-    class Meta:
-        model = Organization
-        exclude = ('is_active', 'users')
+        def save(self, *args, **kwargs):
+            self.instance.is_active = False
+            super(OrganizationRegistrationForm, self).save(*args, **kwargs)
 
-    def save(self, *args, **kwargs):
-        self.instance.is_active = False
-        super(OrganizationRegistrationForm, self).save(*args, **kwargs)
+    return OrganizationRegistrationForm
diff --git a/organizations/base.py b/organizations/base.py
index 8589c42..f06f2cd 100644
--- a/organizations/base.py
+++ b/organizations/base.py
@@ -25,15 +25,17 @@
 
 from django.conf import settings
 from django.db import models
-from django.db.models.fields import FieldDoesNotExist
 from django.db.models.base import ModelBase
+from django.db.models.fields import FieldDoesNotExist
+
 try:
     import six
 except ImportError:
     from django.utils import six
 from django.utils.translation import ugettext_lazy as _
 
-from .managers import OrgManager, ActiveOrgManager
+from organizations.managers import ActiveOrgManager
+from organizations.managers import OrgManager
 
 USER_MODEL = getattr(settings, 'AUTH_USER_MODEL', 'auth.User')
 
diff --git a/organizations/forms.py b/organizations/forms.py
index 8ffb445..197135d 100644
--- a/organizations/forms.py
+++ b/organizations/forms.py
@@ -28,9 +28,10 @@ from django.contrib.auth import get_user_model
 from django.contrib.sites.shortcuts import get_current_site
 from django.utils.translation import ugettext_lazy as _
 
-from .models import Organization, OrganizationUser
-from .utils import create_organization
-from .backends import invitation_backend
+from organizations.backends import invitation_backend
+from organizations.models import Organization
+from organizations.models import OrganizationUser
+from organizations.utils import create_organization
 
 
 class OrganizationForm(forms.ModelForm):
diff --git a/organizations/mixins.py b/organizations/mixins.py
index f17dc16..2e49d7e 100644
--- a/organizations/mixins.py
+++ b/organizations/mixins.py
@@ -27,7 +27,8 @@ from django.core.exceptions import PermissionDenied
 from django.shortcuts import get_object_or_404
 from django.utils.translation import ugettext_lazy as _
 
-from .models import Organization, OrganizationUser
+from organizations.models import Organization
+from organizations.models import OrganizationUser
 
 
 class OrganizationMixin(object):
diff --git a/organizations/models.py b/organizations/models.py
index b999412..0eabf19 100644
--- a/organizations/models.py
+++ b/organizations/models.py
@@ -23,9 +23,9 @@
 # OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
 # OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
 
-from .abstract import (AbstractOrganization,
-                       AbstractOrganizationUser,
-                       AbstractOrganizationOwner)
+from organizations.abstract import AbstractOrganization
+from organizations.abstract import AbstractOrganizationOwner
+from organizations.abstract import AbstractOrganizationUser
 
 
 class Organization(AbstractOrganization):
diff --git a/organizations/urls.py b/organizations/urls.py
index b7a1a81..516573e 100644
--- a/organizations/urls.py
+++ b/organizations/urls.py
@@ -26,45 +26,44 @@
 from django.conf.urls import url
 from django.contrib.auth.decorators import login_required
 
-from .views import (OrganizationList, OrganizationDetail,
-        OrganizationUpdate, OrganizationDelete, OrganizationCreate,
-        OrganizationUserList, OrganizationUserDetail, OrganizationUserUpdate,
-        OrganizationUserCreate, OrganizationUserRemind, OrganizationUserDelete)
+from organizations import views
 
 
 urlpatterns = [
     # Organization URLs
-    url(r'^$', view=login_required(OrganizationList.as_view()),
+    url(r'^$',
+        view=login_required(views.OrganizationList.as_view()),
         name="organization_list"),
-    url(r'^add/$', view=login_required(OrganizationCreate.as_view()),
+    url(r'^add/$',
+        view=login_required(views.OrganizationCreate.as_view()),
         name="organization_add"),
     url(r'^(?P<organization_pk>[\d]+)/$',
-        view=login_required(OrganizationDetail.as_view()),
+        view=login_required(views.OrganizationDetail.as_view()),
         name="organization_detail"),
     url(r'^(?P<organization_pk>[\d]+)/edit/$',
-        view=login_required(OrganizationUpdate.as_view()),
+        view=login_required(views.OrganizationUpdate.as_view()),
         name="organization_edit"),
     url(r'^(?P<organization_pk>[\d]+)/delete/$',
-        view=login_required(OrganizationDelete.as_view()),
+        view=login_required(views.OrganizationDelete.as_view()),
         name="organization_delete"),
 
     # Organization user URLs
     url(r'^(?P<organization_pk>[\d]+)/people/$',
-        view=login_required(OrganizationUserList.as_view()),
+        view=login_required(views.OrganizationUserList.as_view()),
         name="organization_user_list"),
     url(r'^(?P<organization_pk>[\d]+)/people/add/$',
-        view=login_required(OrganizationUserCreate.as_view()),
+        view=login_required(views.OrganizationUserCreate.as_view()),
         name="organization_user_add"),
     url(r'^(?P<organization_pk>[\d]+)/people/(?P<user_pk>[\d]+)/remind/$',
-        view=login_required(OrganizationUserRemind.as_view()),
+        view=login_required(views.OrganizationUserRemind.as_view()),
         name="organization_user_remind"),
     url(r'^(?P<organization_pk>[\d]+)/people/(?P<user_pk>[\d]+)/$',
-        view=login_required(OrganizationUserDetail.as_view()),
+        view=login_required(views.OrganizationUserDetail.as_view()),
         name="organization_user_detail"),
     url(r'^(?P<organization_pk>[\d]+)/people/(?P<user_pk>[\d]+)/edit/$',
-        view=login_required(OrganizationUserUpdate.as_view()),
+        view=login_required(views.OrganizationUserUpdate.as_view()),
         name="organization_user_edit"),
     url(r'^(?P<organization_pk>[\d]+)/people/(?P<user_pk>[\d]+)/delete/$',
-        view=login_required(OrganizationUserDelete.as_view()),
+        view=login_required(views.OrganizationUserDelete.as_view()),
         name="organization_user_delete"),
 ]
diff --git a/organizations/utils.py b/organizations/utils.py
index 035c647..2e5ce6a 100644
--- a/organizations/utils.py
+++ b/organizations/utils.py
@@ -25,7 +25,11 @@
 
 from itertools import chain
 
-from .models import Organization
+
+def default_org_model():
+    """Encapsulates importing the concrete model"""
+    from organizations.models import Organization
+    return Organization
 
 
 def model_field_names(model):
@@ -41,8 +45,7 @@ def model_field_names(model):
     )))
 
 
-def create_organization(user, name, slug=None, is_active=None,
-        org_defaults=None, org_user_defaults=None, **kwargs):
+def create_organization(user, name, slug=None, is_active=None, org_defaults=None, org_user_defaults=None, **kwargs):
     """
     Returns a new organization, also creating an initial organization user who
     is the owner.
@@ -56,7 +59,7 @@ def create_organization(user, name, slug=None, is_active=None,
     >>> create_account = partial(create_organization, model=Account)
 
     """
-    org_model = kwargs.pop('model', None) or kwargs.pop('org_model', None) or Organization
+    org_model = kwargs.pop('model', None) or kwargs.pop('org_model', None) or default_org_model()
     kwargs.pop('org_user_model', None)  # Discard deprecated argument
 
     org_owner_model = org_model.owner.related.related_model
diff --git a/organizations/views.py b/organizations/views.py
index cf1fe20..1193759 100644
--- a/organizations/views.py
+++ b/organizations/views.py
@@ -26,18 +26,30 @@
 from django.contrib.sites.shortcuts import get_current_site
 from django.core.urlresolvers import reverse
 from django.http import HttpResponseBadRequest
-from django.shortcuts import render, redirect
+from django.shortcuts import redirect
+from django.shortcuts import render
 from django.utils.translation import ugettext as _
-from django.views.generic import (ListView, DetailView, UpdateView, CreateView,
-        DeleteView, FormView)
-
-from .backends import invitation_backend, registration_backend
-from .forms import (OrganizationForm, OrganizationUserForm,
-        OrganizationUserAddForm, OrganizationAddForm, SignUpForm)
-from .mixins import (OrganizationMixin, OrganizationUserMixin,
-        MembershipRequiredMixin, AdminRequiredMixin, OwnerRequiredMixin)
-from .models import Organization
-from .utils import create_organization
+from django.views.generic import CreateView
+from django.views.generic import DeleteView
+from django.views.generic import DetailView
+from django.views.generic import FormView
+from django.views.generic import ListView
+from django.views.generic import UpdateView
+
+from organizations.backends import invitation_backend
+from organizations.backends import registration_backend
+from organizations.forms import OrganizationAddForm
+from organizations.forms import OrganizationForm
+from organizations.forms import OrganizationUserAddForm
+from organizations.forms import OrganizationUserForm
+from organizations.forms import SignUpForm
+from organizations.mixins import AdminRequiredMixin
+from organizations.mixins import MembershipRequiredMixin
+from organizations.mixins import OrganizationMixin
+from organizations.mixins import OrganizationUserMixin
+from organizations.mixins import OwnerRequiredMixin
+from organizations.models import Organization
+from organizations.utils import create_organization
 
 
 class BaseOrganizationList(ListView):

-- 
Alioth's /usr/local/bin/git-commit-notice on /srv/git.debian.org/git/python-modules/packages/django-organizations.git



More information about the Python-modules-commits mailing list