diff --git a/AUTHORS.rst b/AUTHORS.rst index 81000b4d..d0ba90d2 100644 --- a/AUTHORS.rst +++ b/AUTHORS.rst @@ -20,6 +20,7 @@ Contributors: * `Basil Shubin `_ * `Federico Capoano `_ * `Justin Mayer `_ +* `Alan Zhu `_ If your name is missing as a contributor that's my oversight, let me know at ben@benlopatin.com diff --git a/HISTORY.rst b/HISTORY.rst index 9f249f2c..1b75a7eb 100644 --- a/HISTORY.rst +++ b/HISTORY.rst @@ -3,6 +3,11 @@ History ======= +1.0.0 +----- + +* Django 2 compatability + 0.9.3 ----- diff --git a/README.rst b/README.rst index b442f352..31a162ff 100644 --- a/README.rst +++ b/README.rst @@ -201,11 +201,8 @@ Targets & testing The codebase is targeted and tested against: -* Django 1.8.x against Python 2.7, 3.4, 3.5, and PyPy -* Django 1.9.x against Python 2.7, 3.4, 3.5, and PyPy -* Django 1.10.x against Python 2.7, 3.4, 3.5, 3.6, and PyPy * Django 1.11.x against Python 2.7, 3.4, 3.5, 3.6, and PyPy -* Django 2.0.x against Python 3.6 +* Django 2.0.x against Python 3.4, 3.5, 3.6 To run the tests against all target environments, install `tox `_ and then execute the command:: diff --git a/docs/conf.py b/docs/conf.py index 84695da5..0795d889 100644 --- a/docs/conf.py +++ b/docs/conf.py @@ -48,9 +48,9 @@ # built documents. # # The short X.Y version. -version = '0.9' +version = '1.0' # The full version, including alpha/beta/rc tags. -release = '0.9.3' +release = '1.0.0' # The language for content autogenerated by Sphinx. Refer to documentation # for a list of supported languages. diff --git a/organizations/__init__.py b/organizations/__init__.py index 2ef483d5..4769fc35 100644 --- a/organizations/__init__.py +++ b/organizations/__init__.py @@ -26,7 +26,7 @@ __author__ = 'Ben Lopatin' __email__ = 'ben@wellfire.co' -__version__ = '0.9.3' +__version__ = '1.0.0' default_app_config = 'organizations.apps.OrganizationsConfig' diff --git a/organizations/abstract.py b/organizations/abstract.py index 7a34cd9c..a3803502 100644 --- a/organizations/abstract.py +++ b/organizations/abstract.py @@ -26,29 +26,21 @@ import warnings from django.conf import settings - -try: - from django.core.urlresolvers import reverse -except ImportError: - from django.urls 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 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.base import AbstractBaseOrganizationUser +from organizations.base import OrgMeta +from organizations.compat import reverse +from organizations.compat import six from organizations.fields import AutoCreatedField from organizations.fields import AutoLastModifiedField +from organizations.fields import SlugField +from organizations.signals import owner_changed 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/backends/defaults.py b/organizations/backends/defaults.py index 3f361a36..eafa01a8 100644 --- a/organizations/backends/defaults.py +++ b/organizations/backends/defaults.py @@ -36,12 +36,6 @@ from django.contrib.auth import get_user_model from django.contrib.auth import login from django.core.mail import EmailMessage - -try: - from django.core.urlresolvers import reverse -except ImportError: - from django.urls import reverse - from django.http import Http404 from django.shortcuts import redirect from django.shortcuts import render @@ -51,6 +45,7 @@ from organizations.backends.forms import UserRegistrationForm from organizations.backends.forms import org_registration_form from organizations.backends.tokens import RegistrationTokenGenerator +from organizations.compat import reverse from organizations.utils import create_organization from organizations.utils import default_org_model from organizations.utils import model_field_attr diff --git a/organizations/base.py b/organizations/base.py index 557e3da8..9a7a018f 100644 --- a/organizations/base.py +++ b/organizations/base.py @@ -24,17 +24,12 @@ # OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. from django.conf import settings +from django.core.exceptions import FieldDoesNotExist from django.db import models from django.db.models.base import ModelBase -# from django.db.models.fields import FieldDoesNotExist -from django.core.exceptions import FieldDoesNotExist - -try: - import six -except ImportError: - from django.utils import six from django.utils.translation import ugettext_lazy as _ +from organizations.compat import six from organizations.managers import ActiveOrgManager from organizations.managers import OrgManager diff --git a/organizations/compat.py b/organizations/compat.py new file mode 100644 index 00000000..dd39fe24 --- /dev/null +++ b/organizations/compat.py @@ -0,0 +1,10 @@ + +try: + from django.urls import reverse # noqa +except ImportError: + from django.core.urlresolvers import reverse # noqa + +try: + import six # noqa +except ImportError: + from django.utils import six # noqa diff --git a/organizations/views.py b/organizations/views.py index 49c6bee3..1d4f1ec5 100644 --- a/organizations/views.py +++ b/organizations/views.py @@ -24,12 +24,6 @@ # OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. from django.contrib.sites.shortcuts import get_current_site - -try: - from django.core.urlresolvers import reverse -except ImportError: - from django.urls import reverse - from django.http import HttpResponseBadRequest from django.shortcuts import redirect from django.shortcuts import render @@ -43,6 +37,7 @@ from organizations.backends import invitation_backend from organizations.backends import registration_backend +from organizations.compat import reverse from organizations.forms import OrganizationAddForm from organizations.forms import OrganizationForm from organizations.forms import OrganizationUserAddForm diff --git a/tests/test_backends.py b/tests/test_backends.py index 830ca37b..ccdec8d9 100644 --- a/tests/test_backends.py +++ b/tests/test_backends.py @@ -1,11 +1,5 @@ from django.contrib.auth.models import User from django.core import mail - -try: - from django.core.urlresolvers import reverse -except ImportError: - from django.urls import reverse - from django.http import Http404 from django.http import QueryDict from django.test import TestCase @@ -16,6 +10,7 @@ from organizations.backends.defaults import InvitationBackend from organizations.backends.defaults import RegistrationBackend from organizations.backends.tokens import RegistrationTokenGenerator +from organizations.compat import reverse from organizations.models import Organization from test_abstract.models import CustomOrganization from test_vendors.models import Vendor diff --git a/tox.ini b/tox.ini index 988510b2..72411861 100644 --- a/tox.ini +++ b/tox.ini @@ -1,9 +1,9 @@ [tox] envlist = flake8, - py{27,34,35}-django{18,19,110,111}, - py{36}-django{110,111,2}, - pypy-django{18,19,110,111} + py{27}-django{111}, + py{34,35,36}-django{111,2}, + pypy-django{111} [testenv] setenv = @@ -18,9 +18,6 @@ basepython = pypy3: pypy3 jython: jython deps = - django18: Django>=1.8,<1.9 - django19: Django>=1.9,<1.10 - django110: Django>=1.10,<1.11 django111: Django>=1.11,<2 django2: Django>=2,<2.1 -r{toxinidir}/requirements-test.txt