[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