[Python-modules-commits] [python-django-rules] 01/01: New upstream version 1.3.0

Michael Fladischer fladi at moszumanska.debian.org
Wed Dec 20 08:14:22 UTC 2017


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

fladi pushed a commit to branch upstream
in repository python-django-rules.

commit be6c5df271c5ddd0a0fa8577360285ad617c3153
Author: Michael Fladischer <FladischerMichael at fladi.at>
Date:   Thu Dec 14 14:44:30 2017 +0100

    New upstream version 1.3.0
---
 .travis.yml                           | 87 +++++++++++++++--------------------
 CHANGELOG.md                          | 62 +++++++++++++++++++++++++
 MANIFEST.in                           |  1 +
 README.rst                            | 50 --------------------
 rules/__init__.py                     |  2 +-
 rules/predicates.py                   |  2 +-
 rules/templatetags/rules.py           |  9 +++-
 setup.py                              |  1 +
 tests/testapp/models.py               |  2 +-
 tests/testapp/settings.py             |  5 +-
 tests/testapp/urls.py                 |  4 +-
 tests/testsuite/contrib/test_admin.py | 12 ++++-
 tests/testsuite/contrib/test_views.py |  7 ++-
 tox.ini                               | 15 +++---
 14 files changed, 142 insertions(+), 117 deletions(-)

diff --git a/.travis.yml b/.travis.yml
index 6094061..baa5ac4 100644
--- a/.travis.yml
+++ b/.travis.yml
@@ -1,61 +1,46 @@
-# ----------------------------------------
+# ---------------------------------------------------------------------------
 # Python support matrix per Django version
 #
 #   2.6   1.5  1.6
-#   2.7   1.5  1.6  1.7  1.8  1.9  1.10
+#   2.7   1.5  1.6  1.7  1.8  1.9  1.10  1.11
 #   3.3   1.5  1.6  1.7  1.8
-#   3.4             1.7  1.8  1.9  1.10
-#   3.5                  1.8  1.9  1.10
-# ----------------------------------------
+#   3.4             1.7  1.8  1.9  1.10  1.11  2.0
+#   3.5                  1.8  1.9  1.10  1.11  2.0
+#   3.6                            1.10  1.11  2.0
+# ---------------------------------------------------------------------------
 sudo: false
 language: python
-python:
-  - "2.6"
-  - "2.7"
-  - "3.3"
-  - "3.4"
-  - "3.5"
-  - "pypy"
-  - "pypy3"
-env:
-  - DJANGO='Django<1.6'  # Django 1.5
-  - DJANGO='Django<1.7'  # Django 1.6
-  - DJANGO='Django<1.8'  # Django 1.7
-  - DJANGO='Django<1.9'  # Django 1.8
-  - DJANGO='Django<1.10' # Django 1.9
-  - DJANGO='Django<1.11' # Django 1.10
 matrix:
-  exclude:
-    - python: "2.6"
-      env: DJANGO='Django<1.8'
-    - python: "2.6"
-      env: DJANGO='Django<1.9'
-    - python: "2.6"
-      env: DJANGO='Django<1.10'
-    - python: "2.6"
-      env: DJANGO='Django<1.11'
-    - python: "3.3"
-      env: DJANGO='Django<1.10'
-    - python: "3.3"
-      env: DJANGO='Django<1.11'
-    - python: "3.4"
-      env: DJANGO='Django<1.6'
-    - python: "3.4"
-      env: DJANGO='Django<1.7'
-    - python: "3.5"
-      env: DJANGO='Django<1.6'
-    - python: "3.5"
-      env: DJANGO='Django<1.7'
-    - python: "3.5"
-      env: DJANGO='Django<1.8'
-    - python: "pypy3"
-      env: DJANGO='Django<1.10'
-    - python: "pypy3"
-      env: DJANGO='Django<1.11'
+  include:
+    - { python: 2.6, env: TOXENV=py26-django15 }
+    - { python: 2.6, env: TOXENV=py26-django16 }
+    - { python: 2.7, env: TOXENV=py27-django15 }
+    - { python: 2.7, env: TOXENV=py27-django16 }
+    - { python: 2.7, env: TOXENV=py27-django17 }
+    - { python: 2.7, env: TOXENV=py27-django18 }
+    - { python: 2.7, env: TOXENV=py27-django19 }
+    - { python: 2.7, env: TOXENV=py27-django110 }
+    - { python: 2.7, env: TOXENV=py27-django111 }
+    - { python: 3.3, env: TOXENV=py33-django15 }
+    - { python: 3.3, env: TOXENV=py33-django16 }
+    - { python: 3.3, env: TOXENV=py33-django17 }
+    - { python: 3.3, env: TOXENV=py33-django18 }
+    - { python: 3.4, env: TOXENV=py34-django17 }
+    - { python: 3.4, env: TOXENV=py34-django18 }
+    - { python: 3.4, env: TOXENV=py34-django19 }
+    - { python: 3.4, env: TOXENV=py34-django110 }
+    - { python: 3.4, env: TOXENV=py34-django20 }
+    - { python: 3.4, env: TOXENV=py34-django111 }
+    - { python: 3.5, env: TOXENV=py35-django18 }
+    - { python: 3.5, env: TOXENV=py35-django19 }
+    - { python: 3.5, env: TOXENV=py35-django110 }
+    - { python: 3.5, env: TOXENV=py35-django111 }
+    - { python: 3.5, env: TOXENV=py35-django20 }
+    - { python: 3.6, env: TOXENV=py36-django110 }
+    - { python: 3.6, env: TOXENV=py36-django111 }
+    - { python: 3.6, env: TOXENV=py36-django20 }
 install:
-  - 'pip install "${DJANGO}"'
-  - pip install coveralls
-  - pip install -e .
-script: ./runtests.sh -v
+  - pip install tox
+script: tox
 after_success:
   - coveralls
diff --git a/CHANGELOG.md b/CHANGELOG.md
new file mode 100644
index 0000000..7a86992
--- /dev/null
+++ b/CHANGELOG.md
@@ -0,0 +1,62 @@
+Changelog
+=========
+
+## v1.3.0 - 2017/12/13
+
+- Added support for Django 2.0
+- Added support for Django 1.11 and Python 3.6
+- Dropped support for PyPy and PyPy3
+
+## v1.2.1 - 2017/05/13
+
+- Reverted "Fixed undesired caching in `is_group_member` factory"
+
+## v1.2.0 - 2016/12/18
+
+- Added logging to predicates
+- Added support for Django 1.10
+- Fixed undesired caching in `is_group_member` factory
+
+## v1.1.1 - 2015/12/07
+
+- Improved handling of skipped predicates
+
+## v1.1.0 - 2015/12/05
+
+- Fixed regression that wouldn't short-circuit boolean expressions
+- Added support for Django 1.9 and Python 3.5
+- Added support for skipping predicates simply by returning `None`.
+  The previous way of skipping predicates by raising `SkipPredicate`
+  has been deprecated and will not be supported in a future release.
+
+## v1.0.0 - 2015/10/06
+
+- Initial stable public release
+- Dropped support for Python 3.2
+- Added Django test suite
+- Added function-based view decorator
+- Added class-based view mixin
+
+## v0.4 - 2015/02/16
+
+- Added support for creating predicates from partial functions
+- Added support for creating predicates from instance methods
+- Added predicate invocation context
+- Added support for automatically passing `self` to a predicate
+- Added support for discarding a predicate's result
+
+## v0.3 - 2014/10/15
+
+- Added compatibility with PyPy and PyPy 3
+- Added `always_true()` and `always_false()` predicates
+- Added integration with Tox
+- Bug fixes
+
+## v0.2 - 2014/06/09
+
+- Added compatibility with Python 3.4
+- Improved admin integration
+
+## v0.1 - 2014/03/07
+
+- Initial public release
diff --git a/MANIFEST.in b/MANIFEST.in
index 0cab32c..ae2e4bb 100644
--- a/MANIFEST.in
+++ b/MANIFEST.in
@@ -1,3 +1,4 @@
+include CHANGELOG.md
 include INSTALL
 include LICENSE
 include README.rst
diff --git a/README.rst b/README.rst
index 8ff6d08..48dc0de 100644
--- a/README.rst
+++ b/README.rst
@@ -70,7 +70,6 @@ Table of Contents
 
 - `Best practices`_
 - `API Reference`_
-- `Changelog`_
 - `Licence`_
 
 
@@ -912,55 +911,6 @@ Managing the permissions rule set
     Tests the rule with the given name. See ``RuleSet.test_rule``.
 
 
-Changelog
-=========
-
-``v1.2.1`` - 2017/05/13
-    - Reverted "Fixed undesired caching in `is_group_member` factory"
-
-``v1.2.0`` - 2016/12/18
-    - Added logging to predicates
-    - Added support for Django 1.10
-    - Fixed undesired caching in `is_group_member` factory
-
-``v1.1.1`` - 2015/12/07
-    - Improved handling of skipped predicates
-
-``v1.1.0`` - 2015/12/05
-    - Fixed regression that wouldn't short-circuit boolean expressions
-    - Added support for Django 1.9 and Python 3.5
-    - Added support for skipping predicates simply by returning ``None``.
-      The previous way of skipping predicates by raising ``SkipPredicate``
-      has been deprecated and will not be supported in a future release.
-
-``v1.0.0`` - 2015/10/06
-    - Initial stable public release
-    - Dropped support for Python 3.2
-    - Added Django test suite
-    - Added function-based view decorator
-    - Added class-based view mixin
-
-``v0.4`` - 2015/02/16
-    - Added support for creating predicates from partial functions
-    - Added support for creating predicates from instance methods
-    - Added predicate invocation context
-    - Added support for automatically passing ``self`` to a predicate
-    - Added support for discarding a predicate's result
-
-``v0.3`` - 2014/10/15
-    - Added compatibility with PyPy and PyPy 3
-    - Added ``always_true()`` and ``always_false()`` predicates
-    - Added integration with Tox
-    - Bug fixes
-
-``v0.2`` - 2014/06/09
-    - Added compatibility with Python 3.4
-    - Improved admin integration
-
-``v0.1`` - 2014/03/07
-    - Initial public release
-
-
 Licence
 =======
 
diff --git a/rules/__init__.py b/rules/__init__.py
index c71b50e..72faf16 100644
--- a/rules/__init__.py
+++ b/rules/__init__.py
@@ -4,6 +4,6 @@ from .predicates import (Predicate, predicate, always_true, always_false,
                          always_allow, always_deny, is_authenticated,
                          is_superuser, is_staff, is_active, is_group_member)
 
-VERSION = (1, 2, 1, 'final', 1)
+VERSION = (1, 3, 0, 'final', 1)
 
 default_app_config = 'rules.apps.RulesConfig'
diff --git a/rules/predicates.py b/rules/predicates.py
index 822a69b..095fa07 100644
--- a/rules/predicates.py
+++ b/rules/predicates.py
@@ -219,7 +219,7 @@ class Predicate(object):
             result = None if result is None else bool(result)
         except SkipPredicate:
             result = None
-        
+
         logger.debug('  %s = %s', self, 'skipped' if result is None else result)
         return result
 
diff --git a/rules/templatetags/rules.py b/rules/templatetags/rules.py
index 497827e..8e15eb4 100644
--- a/rules/templatetags/rules.py
+++ b/rules/templatetags/rules.py
@@ -4,14 +4,19 @@ from ..rulesets import default_rules
 
 
 register = template.Library()
+try:
+    # Django < 2.0
+    simple_tag = register.assignment_tag
+except AttributeError:  # pragma: no cover
+    simple_tag = register.simple_tag
 
 
- at register.assignment_tag
+ at simple_tag
 def test_rule(name, obj=None, target=None):
     return default_rules.test_rule(name, obj, target)
 
 
- at register.assignment_tag
+ at simple_tag
 def has_perm(perm, user, obj=None):
     if not hasattr(user, 'has_perm'):  # pragma: no cover
         return False  # swapped user model that doesn't support permissions
diff --git a/setup.py b/setup.py
index e0b2d6d..76bd70e 100644
--- a/setup.py
+++ b/setup.py
@@ -74,5 +74,6 @@ setup(
         'Programming Language :: Python :: 3.3',
         'Programming Language :: Python :: 3.4',
         'Programming Language :: Python :: 3.5',
+        'Programming Language :: Python :: 3.6',
     ],
 )
diff --git a/tests/testapp/models.py b/tests/testapp/models.py
index b668f15..5eb3f19 100644
--- a/tests/testapp/models.py
+++ b/tests/testapp/models.py
@@ -7,7 +7,7 @@ from django.utils.encoding import python_2_unicode_compatible
 class Book(models.Model):
     isbn = models.CharField(max_length=50, unique=True)
     title = models.CharField(max_length=100)
-    author = models.ForeignKey(settings.AUTH_USER_MODEL)
+    author = models.ForeignKey(settings.AUTH_USER_MODEL, on_delete=models.CASCADE)
 
     def __str__(self):
         return self.title
diff --git a/tests/testapp/settings.py b/tests/testapp/settings.py
index d96cda0..e2e4b08 100644
--- a/tests/testapp/settings.py
+++ b/tests/testapp/settings.py
@@ -26,12 +26,15 @@ INSTALLED_APPS = [
     'testapp',
 ]
 
-MIDDLEWARE_CLASSES = [
+MIDDLEWARE = [
     'django.contrib.sessions.middleware.SessionMiddleware',
     'django.contrib.auth.middleware.AuthenticationMiddleware',
     'django.contrib.messages.middleware.MessageMiddleware',
 ]
 
+# Django < 2.0
+MIDDLEWARE_CLASSES = MIDDLEWARE
+
 AUTHENTICATION_BACKENDS = [
     'rules.permissions.ObjectPermissionBackend',
     'django.contrib.auth.backends.ModelBackend',
diff --git a/tests/testapp/urls.py b/tests/testapp/urls.py
index 53e6471..c55aaec 100644
--- a/tests/testapp/urls.py
+++ b/tests/testapp/urls.py
@@ -1,4 +1,4 @@
-from django.conf.urls import include, url
+from django.conf.urls import url
 from django.contrib import admin
 
 from .views import (change_book, delete_book,
@@ -8,7 +8,7 @@ from .views import (change_book, delete_book,
 admin.autodiscover()
 
 urlpatterns = [
-    url(r'^admin/', include(admin.site.urls)),
+    url(r'^admin/', admin.site.urls),
 
     # Function-based views
     url(r'^(?P<book_id>\d+)/change/$', change_book, name='change_book'),
diff --git a/tests/testsuite/contrib/test_admin.py b/tests/testsuite/contrib/test_admin.py
index 064cc60..e32108c 100644
--- a/tests/testsuite/contrib/test_admin.py
+++ b/tests/testsuite/contrib/test_admin.py
@@ -1,5 +1,15 @@
-from django.core.urlresolvers import reverse
 from django.test import TestCase
+try:
+    from django.urls import reverse
+except ImportError:
+    # django < 1.10
+    from django.core.urlresolvers import reverse
+
+try:
+    from django.urls import reverse
+except ImportError:
+    # Django < 2.0
+    from django.core.urlresolvers import reverse
 
 
 class ModelAdminTests(TestCase):
diff --git a/tests/testsuite/contrib/test_views.py b/tests/testsuite/contrib/test_views.py
index e4973ca..ef4a16a 100644
--- a/tests/testsuite/contrib/test_views.py
+++ b/tests/testsuite/contrib/test_views.py
@@ -1,11 +1,16 @@
 from __future__ import absolute_import
 
 from django.core.exceptions import ImproperlyConfigured
-from django.core.urlresolvers import reverse
 from django.http import HttpRequest, Http404
 from django.test import TestCase
 from django.utils.encoding import force_str
 
+try:
+    from django.urls import reverse
+except ImportError:
+    # Django < 2.0
+    from django.core.urlresolvers import reverse
+
 from rules.contrib.views import objectgetter
 
 from testapp.models import Book
diff --git a/tox.ini b/tox.ini
index c61b1ac..b95dbc9 100644
--- a/tox.ini
+++ b/tox.ini
@@ -1,22 +1,25 @@
 [tox]
 envlist =
     {py26}-django{15,16},
-    {py27}-django{15,16,17,18,19,110},
+    {py27}-django{15,16,17,18,19,110,111},
     {py33}-django{15,16,17,18},
-    {py34}-django{17,18,19,110},
-    {py35}-django{18,19,110},
-    {pypy}-django{15,16,17,18,19,110},
-    {pypy3}-django{15,16,17,18}
+    {py34}-django{17,18,19,110,111,20},
+    {py35}-django{18,19,110,111,20},
+    {py36}-django{110,111,20}
 
 [testenv]
 deps =
     nose
+    coverage
     django15: Django>=1.5,<1.6
     django16: Django>=1.6,<1.7
     django17: Django>=1.7,<1.8
     django18: Django>=1.8,<1.9
     django19: Django>=1.9,<1.10
     django110: Django>=1.10,<1.11
+    django111: Django>=1.11,<1.12
+    django20: Django>=2.0,<2.1
 
 commands =
-    {envbindir}/python runtests.py --nologcapture --nocapture {posargs}
+    coverage run --source=rules runtests.py --nologcapture --nocapture {posargs}
+    coverage report -m

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



More information about the Python-modules-commits mailing list