diff --git a/.github/workflows/tests.yml b/.github/workflows/tests.yml index 9bc9ae6..def60f1 100644 --- a/.github/workflows/tests.yml +++ b/.github/workflows/tests.yml @@ -12,7 +12,8 @@ jobs: strategy: matrix: - python-version: [ "3.7", "3.8", "3.9" ] + python-version: [ "3.8", "3.9", "3.10", "3.11" ] + django-version: [ "3.2.*", "4.2.*" ] steps: - uses: actions/checkout@v4 @@ -21,12 +22,12 @@ jobs: python-version: ${{ matrix.python-version }} - name: install dependencies run: | - pip install django==3.2.* + pip install django==${{ matrix.django-version }} pip install -e . pip install coverage coveralls - name: run tests run: | - coverage run --source='django_prbac' `which django-admin.py` test django_prbac --settings django_prbac.mock_settings --traceback + coverage run --source='django_prbac' `which django-admin` test django_prbac --settings django_prbac.mock_settings --traceback - name: report coverage stats env: GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} diff --git a/.gitignore b/.gitignore index b20c1f5..3c77127 100644 --- a/.gitignore +++ b/.gitignore @@ -56,3 +56,6 @@ nosetests.xml /docs/_build /django-prbac.db + +# virtualenv +.python-version diff --git a/django_prbac/models.py b/django_prbac/models.py index 0f88fd3..9ab78fe 100644 --- a/django_prbac/models.py +++ b/django_prbac/models.py @@ -144,8 +144,12 @@ def get_privileges(self, assignment): return self._granted_privileges except AttributeError: pass - return [membership.instantiated_to_role(assignment) - for membership in self.memberships_granted.all()] + try: + memberships = self.memberships_granted.all() + except ValueError: + # Django 4 raises ValueError if fk relationship is accessed prior to save + return [] + return [m.instantiated_to_role(assignment) for m in memberships] def instantiate(self, assignment): """ diff --git a/django_prbac/urls.py b/django_prbac/urls.py index d69c573..5f4d44e 100644 --- a/django_prbac/urls.py +++ b/django_prbac/urls.py @@ -1,8 +1,8 @@ -from django.conf.urls import url +from django.urls import re_path from django.contrib import admin admin.autodiscover() urlpatterns = [ - url(r'^admin/', admin.site.urls), + re_path(r'^admin/', admin.site.urls), ] diff --git a/setup.py b/setup.py index a188f37..14d5da4 100644 --- a/setup.py +++ b/setup.py @@ -30,9 +30,9 @@ def get_readme(): packages=find_packages(), zip_safe=False, install_requires=[ - # avoid django 2 <2.2.10 and django 3 < 3.0.7 + # avoid django 3 < 3.0.7 # https://github.com/advisories/GHSA-hmr4-m2h5-33qx - 'django>=2.2.13,!=3.0.0,!=3.0.1,!=3.0.2,!=3.0.3,!=3.0.4,!=3.0.5,!=3.0.6,<4', + 'django>=3.0.7,<5', 'jsonfield>=1.0.3,<4', 'simplejson', ], @@ -45,9 +45,10 @@ def get_readme(): 'Operating System :: OS Independent', 'Programming Language :: Python', 'Programming Language :: Python :: 3', - 'Programming Language :: Python :: 3.7', 'Programming Language :: Python :: 3.8', 'Programming Language :: Python :: 3.9', + 'Programming Language :: Python :: 3.10', + 'Programming Language :: Python :: 3.11', 'Topic :: Software Development :: Libraries :: Python Modules', ], options={"bdist_wheel": {"universal": "1"}},