From 2d9ad14d4889a7fdd23696bc2a6e4159e28c89b5 Mon Sep 17 00:00:00 2001 From: Jon Grace-Cox Date: Tue, 11 Jan 2022 10:45:33 -0500 Subject: [PATCH 01/15] Fix makemigrations warning for user model case Fix issue where a warning is raised when running makemigrations when user model is passed with different case to the default. This commonly happens when the default is `auth.User` and `auth.user` is passed in the `to` field. The fix is to detect the case difference, and update the incoming args to match the default. Relates to #43. --- django_currentuser/db/models/fields.py | 8 ++++++++ tests/testapp/tests.py | 10 ++++++++++ 2 files changed, 18 insertions(+) diff --git a/django_currentuser/db/models/fields.py b/django_currentuser/db/models/fields.py index 676de4e..558bfb1 100644 --- a/django_currentuser/db/models/fields.py +++ b/django_currentuser/db/models/fields.py @@ -17,6 +17,14 @@ class CurrentUserField(models.ForeignKey): def __init__(self, *args, **kwargs): self.on_update = kwargs.pop("on_update", False) + + # If `to` is present in kwargs, and the same when ignoring case then + # update `to` to use the defaults. + # Fix for https://github.com/PaesslerAG/django-currentuser/issues/43 + if "to" in kwargs \ + and kwargs["to"].lower() == self.defaults['to'].lower(): + kwargs["to"] = self.defaults['to'] + self._warn_for_shadowing_args(*args, **kwargs) if "on_delete" not in kwargs: diff --git a/tests/testapp/tests.py b/tests/testapp/tests.py index 82094b1..f424771 100644 --- a/tests/testapp/tests.py +++ b/tests/testapp/tests.py @@ -106,6 +106,16 @@ def test_raises_warning_when_non_default_arguments_are_passed(self): assert_that([str(m.message) for m in my_warnings], is_([CurrentUserField.warning] * 4)) + def test_no_warning_raised_when_upper_case_user_model_passed(self): + with warnings.catch_warnings(record=True) as my_warnings: + self.field_cls(to='auth.User') + assert_that(my_warnings, has_length(0)) + + def test_no_warning_raised_when_lower_case_user_model_passed(self): + with warnings.catch_warnings(record=True) as my_warnings: + self.field_cls(to='auth.user') + assert_that(my_warnings, has_length(0)) + def test_no_warning_raised_if_passed_argument_values_match_defaults(self): with warnings.catch_warnings(record=True) as my_warnings: self.field_cls(default=get_current_authenticated_user) From 4b20539a6fb86c6ef347ff43131a34debdada23e Mon Sep 17 00:00:00 2001 From: Taima Ryohei Date: Sun, 27 Feb 2022 12:30:08 +0900 Subject: [PATCH 02/15] Refresh a thread local for each session The reason for using a context manager is to facilitate mocking in testing. --- django_currentuser/middleware.py | 15 +++++++++++++-- 1 file changed, 13 insertions(+), 2 deletions(-) diff --git a/django_currentuser/middleware.py b/django_currentuser/middleware.py index ae04143..dec921f 100644 --- a/django_currentuser/middleware.py +++ b/django_currentuser/middleware.py @@ -21,6 +21,17 @@ def _set_current_user(user=None): _do_set_current_user(lambda self: user) +class SetCurrentUser: + def __init__(this, request): + this.request = request + + def __enter__(this): + _do_set_current_user(lambda self: getattr(this.request, 'user', None)) + + def __exit__(this, type, value, traceback): + _do_set_current_user(lambda self: None) + + class ThreadLocalUserMiddleware(object): def __init__(self, get_response): @@ -30,8 +41,8 @@ def __call__(self, request): # request.user closure; asserts laziness; # memorization is implemented in # request.user (non-data descriptor) - _do_set_current_user(lambda self: getattr(request, 'user', None)) - response = self.get_response(request) + with SetCurrentUser(request): + response = self.get_response(request) return response From 27c95cea0cedeca491baf09709e1b3f2a741b893 Mon Sep 17 00:00:00 2001 From: Taima Ryohei Date: Sun, 27 Feb 2022 12:37:27 +0900 Subject: [PATCH 03/15] Check that created_by is set during session. --- tests/testapp/tests.py | 39 +++++++++++++++++++++------------------ tests/testapp/urls.py | 12 +++++++++++- 2 files changed, 32 insertions(+), 19 deletions(-) diff --git a/tests/testapp/tests.py b/tests/testapp/tests.py index 82094b1..7981ef9 100644 --- a/tests/testapp/tests.py +++ b/tests/testapp/tests.py @@ -30,10 +30,10 @@ def setUp(self): self.user2.set_password("pw2") self.user2.save() - def login_and_go_to_homepage(self, username, password): + def login_and_create(self, username, password): data = {"username": username, "password": password} self.client.post(reverse("login"), follow=True, data=data) - self.client.get('/') + self.client.post(reverse("create"), follow=True, data=data) class TestSetUserToThread(TestUserBase): @@ -165,24 +165,27 @@ def test_on_update_enabled(self): self.assertIs(test_model.updated_by, None) def test_on_update_disabled(self): - self.login_and_go_to_homepage(username="user1", password="pw1") - test_model = TestModelDefaultBehavior() - test_model.save() + self.login_and_create(username="user1", password="pw1") + user1 = TestModelDefaultBehavior.objects.get(pk=1) - self.assertEqual(self.user1.pk, test_model.created_by_id) - test_model.refresh_from_db() - self.assertEqual(self.user1, test_model.created_by) + self.assertEqual(self.user1.pk, user1.created_by_id) + self.assertEqual(self.user1, user1.created_by) - self.login_and_go_to_homepage(username="user2", password="pw2") - test_model.save() + self.login_and_create(username="user2", password="pw2") + user1 = TestModelDefaultBehavior.objects.get(pk=1) + user2 = TestModelDefaultBehavior.objects.get(pk=2) - self.assertEqual(self.user1.pk, test_model.created_by_id) - test_model.refresh_from_db() - self.assertEqual(self.user1, test_model.created_by) + self.assertEqual(self.user1.pk, user1.created_by_id) + self.assertEqual(self.user1, user1.created_by) + self.assertEqual(self.user2.pk, user2.created_by_id) + self.assertEqual(self.user2, user2.created_by) _set_current_user(None) - test_model.save() - - self.assertEqual(self.user1.pk, test_model.created_by_id) - test_model.refresh_from_db() - self.assertEqual(self.user1, test_model.created_by) + TestModelDefaultBehavior().save() + user1 = TestModelDefaultBehavior.objects.get(pk=1) + user2 = TestModelDefaultBehavior.objects.get(pk=2) + + self.assertEqual(self.user1.pk, user1.created_by_id) + self.assertEqual(self.user1, user1.created_by) + self.assertEqual(self.user2.pk, user2.created_by_id) + self.assertEqual(self.user2, user2.created_by) diff --git a/tests/testapp/urls.py b/tests/testapp/urls.py index 705ed16..6c23c62 100644 --- a/tests/testapp/urls.py +++ b/tests/testapp/urls.py @@ -1,5 +1,8 @@ import django from django.contrib.auth import views as auth_views +from django.http import HttpResponse + +from .models import TestModelDefaultBehavior, TestModelOnUpdate if django.VERSION < (2, 0): @@ -8,6 +11,13 @@ from django.urls import path +def create(request): + if request.method == 'POST': + TestModelDefaultBehavior.objects.create() + return HttpResponse() + + urlpatterns = [ - path(r'login/', auth_views.LoginView.as_view(), name="login") + path(r'login/', auth_views.LoginView.as_view(), name="login"), + path(r'create/', create, name="create"), ] From bce50a5a900eee22505a7ce56e2d84be514b2e35 Mon Sep 17 00:00:00 2001 From: Taima Ryohei Date: Sun, 27 Feb 2022 12:44:15 +0900 Subject: [PATCH 04/15] Check that updated_by is set during session. --- tests/testapp/tests.py | 26 ++++++++++++++------------ tests/testapp/urls.py | 7 +++++++ 2 files changed, 21 insertions(+), 12 deletions(-) diff --git a/tests/testapp/tests.py b/tests/testapp/tests.py index 7981ef9..1e13e43 100644 --- a/tests/testapp/tests.py +++ b/tests/testapp/tests.py @@ -35,6 +35,11 @@ def login_and_create(self, username, password): self.client.post(reverse("login"), follow=True, data=data) self.client.post(reverse("create"), follow=True, data=data) + def login_and_update(self, username, password, pk): + data = {"username": username, "password": password} + self.client.post(reverse("login"), follow=True, data=data) + self.client.patch(reverse("update", args=[pk]), follow=True, data=data) + class TestSetUserToThread(TestUserBase): @@ -140,28 +145,25 @@ def test_on_update_enabled(self): test_model.save() self.assertIs(test_model.updated_by_id, None) - test_model.refresh_from_db() self.assertIs(test_model.updated_by, None) - self.login_and_go_to_homepage(username="user1", password="pw1") - test_model.save() + self.login_and_update(username="user1", password="pw1", pk=1) + user = TestModelOnUpdate.objects.get(pk=1) - self.assertEqual(self.user1.pk, test_model.updated_by_id) - test_model.refresh_from_db() - self.assertEqual(self.user1, test_model.updated_by) + self.assertEqual(self.user1.pk, user.updated_by_id) + self.assertEqual(self.user1, user.updated_by) - self.login_and_go_to_homepage(username="user2", password="pw2") - test_model.save() + self.login_and_update(username="user2", password="pw2", pk=1) + user = TestModelOnUpdate.objects.get(pk=1) - self.assertEqual(self.user2.pk, test_model.updated_by_id) - test_model.refresh_from_db() - self.assertEqual(self.user2, test_model.updated_by) + self.assertEqual(self.user2.pk, user.updated_by_id) + self.assertEqual(self.user2, user.updated_by) _set_current_user(None) test_model.save() + user = TestModelOnUpdate.objects.get(pk=1) self.assertIs(test_model.updated_by_id, None) - test_model.refresh_from_db() self.assertIs(test_model.updated_by, None) def test_on_update_disabled(self): diff --git a/tests/testapp/urls.py b/tests/testapp/urls.py index 6c23c62..ad6bbce 100644 --- a/tests/testapp/urls.py +++ b/tests/testapp/urls.py @@ -17,7 +17,14 @@ def create(request): return HttpResponse() +def update(request, pk): + if request.method == 'PATCH': + TestModelOnUpdate.objects.get(pk=pk).save() + return HttpResponse() + + urlpatterns = [ path(r'login/', auth_views.LoginView.as_view(), name="login"), path(r'create/', create, name="create"), + path(r'update//', update, name="update") ] From 2465e39dfafb20e9000cee0aadd72ce5d3dff863 Mon Sep 17 00:00:00 2001 From: Taima Ryohei Date: Sun, 27 Feb 2022 12:44:44 +0900 Subject: [PATCH 05/15] Limited test perspective. only check 'a thread local was set a valid value' --- tests/testapp/tests.py | 11 ++++++++--- 1 file changed, 8 insertions(+), 3 deletions(-) diff --git a/tests/testapp/tests.py b/tests/testapp/tests.py index 1e13e43..1384ac4 100644 --- a/tests/testapp/tests.py +++ b/tests/testapp/tests.py @@ -9,7 +9,11 @@ from hamcrest import assert_that, instance_of, equal_to, is_, empty, has_length from django_currentuser.middleware import ( - get_current_user, _set_current_user, get_current_authenticated_user) + SetCurrentUser, + get_current_user, + _set_current_user, + get_current_authenticated_user +) from django_currentuser.db.models import CurrentUserField from .sixmock import patch @@ -43,15 +47,16 @@ def login_and_update(self, username, password, pk): class TestSetUserToThread(TestUserBase): + @patch.object(SetCurrentUser, "__exit__", lambda *args, **kwargs: None) def test__local_thread_var_is_set_to_logged_in_user(self): _set_current_user(None) self.assertIsNone(get_current_user()) - self.login_and_go_to_homepage(username="user1", password="pw1") + self.login_and_create(username="user1", password="pw1") self.assertEqual(self.user1, get_current_user()) self.client.logout() - self.login_and_go_to_homepage(username="user2", password="pw2") + self.login_and_create(username="user2", password="pw2") self.assertEqual(self.user2, get_current_user()) self.client.logout() From c6cc8ecbaca6ea91605879e3b8e8eaa1cf2b90c9 Mon Sep 17 00:00:00 2001 From: Jeremy M Crews Date: Sat, 12 Mar 2022 15:08:27 -0700 Subject: [PATCH 06/15] Adding support for django 4 Adding support for django 4 Not sure how to remove the warning for related name --- django_currentuser/__init__.py | 2 +- django_currentuser/db/models/fields.py | 2 +- setup.py | 2 +- 3 files changed, 3 insertions(+), 3 deletions(-) diff --git a/django_currentuser/__init__.py b/django_currentuser/__init__.py index ed7d50e..19283fe 100644 --- a/django_currentuser/__init__.py +++ b/django_currentuser/__init__.py @@ -1 +1 @@ -__version__ = '0.5.3' +__version__ = '0.5.4' diff --git a/django_currentuser/db/models/fields.py b/django_currentuser/db/models/fields.py index 676de4e..e39711f 100644 --- a/django_currentuser/db/models/fields.py +++ b/django_currentuser/db/models/fields.py @@ -25,7 +25,7 @@ def __init__(self, *args, **kwargs): if self.on_update: kwargs["editable"] = False kwargs["blank"] = True - + kwargs.update(self.defaults) super(CurrentUserField, self).__init__(**kwargs) diff --git a/setup.py b/setup.py index 71e88ed..c85956c 100755 --- a/setup.py +++ b/setup.py @@ -31,7 +31,7 @@ ], include_package_data=True, install_requires=[ - 'Django>=1.11.17,<3.3;python_version>="2.7"', + 'Django>=1.11.17,<5.0;python_version>="2.7"', ], license="BSD", zip_safe=False, From 16ebee45079f121a76fbf6758d432b9f15f46be9 Mon Sep 17 00:00:00 2001 From: "Allen, Timothy" Date: Tue, 29 Mar 2022 09:17:45 -0400 Subject: [PATCH 07/15] Update trove classifiers to remove unsupported Python & Django versions and use Django SemVer major versions. --- django_currentuser/db/models/fields.py | 2 +- setup.py | 13 +++---------- 2 files changed, 4 insertions(+), 11 deletions(-) diff --git a/django_currentuser/db/models/fields.py b/django_currentuser/db/models/fields.py index f5fdfff..558bfb1 100644 --- a/django_currentuser/db/models/fields.py +++ b/django_currentuser/db/models/fields.py @@ -33,7 +33,7 @@ def __init__(self, *args, **kwargs): if self.on_update: kwargs["editable"] = False kwargs["blank"] = True - + kwargs.update(self.defaults) super(CurrentUserField, self).__init__(**kwargs) diff --git a/setup.py b/setup.py index c85956c..9df5c1b 100755 --- a/setup.py +++ b/setup.py @@ -41,20 +41,13 @@ 'Intended Audience :: Developers', 'License :: OSI Approved :: BSD License', 'Natural Language :: English', - 'Programming Language :: Python :: 2', - 'Programming Language :: Python :: 2.7', - 'Programming Language :: Python :: 3', - 'Programming Language :: Python :: 3.5', 'Programming Language :: Python :: 3.6', 'Programming Language :: Python :: 3.7', 'Programming Language :: Python :: 3.8', 'Programming Language :: Python :: 3.9', + 'Programming Language :: Python :: 3.10', 'Framework :: Django', - 'Framework :: Django :: 1.11', - 'Framework :: Django :: 2.1', - 'Framework :: Django :: 2.2', - 'Framework :: Django :: 3.0', - 'Framework :: Django :: 3.1', - 'Framework :: Django :: 3.2', + 'Framework :: Django :: 3', + 'Framework :: Django :: 4', ], ) From 35025f9cd004ef21e3b9b5e9a4b2335298846f99 Mon Sep 17 00:00:00 2001 From: Jeremy M Crews Date: Mon, 9 May 2022 10:26:16 -0700 Subject: [PATCH 08/15] Update setup.py removing old classifiers --- setup.py | 10 ++-------- 1 file changed, 2 insertions(+), 8 deletions(-) diff --git a/setup.py b/setup.py index c85956c..e2c7fc8 100755 --- a/setup.py +++ b/setup.py @@ -41,20 +41,14 @@ 'Intended Audience :: Developers', 'License :: OSI Approved :: BSD License', 'Natural Language :: English', - 'Programming Language :: Python :: 2', - 'Programming Language :: Python :: 2.7', - 'Programming Language :: Python :: 3', - 'Programming Language :: Python :: 3.5', - 'Programming Language :: Python :: 3.6', - 'Programming Language :: Python :: 3.7', 'Programming Language :: Python :: 3.8', 'Programming Language :: Python :: 3.9', + 'Programming Language :: Python :: 3.10', 'Framework :: Django', - 'Framework :: Django :: 1.11', - 'Framework :: Django :: 2.1', 'Framework :: Django :: 2.2', 'Framework :: Django :: 3.0', 'Framework :: Django :: 3.1', 'Framework :: Django :: 3.2', + 'Framework :: Django :: 4.0', ], ) From 1be737f52fa32d8c4abc8e139767005a1e5e187c Mon Sep 17 00:00:00 2001 From: Jeremy M Crews Date: Mon, 9 May 2022 10:28:26 -0700 Subject: [PATCH 09/15] Update setup.py updating install requires. --- setup.py | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/setup.py b/setup.py index e2c7fc8..1ed5aaa 100755 --- a/setup.py +++ b/setup.py @@ -31,7 +31,7 @@ ], include_package_data=True, install_requires=[ - 'Django>=1.11.17,<5.0;python_version>="2.7"', + 'Django>=3.0,<5.0;python_version>="3.8"', ], license="BSD", zip_safe=False, @@ -45,7 +45,6 @@ 'Programming Language :: Python :: 3.9', 'Programming Language :: Python :: 3.10', 'Framework :: Django', - 'Framework :: Django :: 2.2', 'Framework :: Django :: 3.0', 'Framework :: Django :: 3.1', 'Framework :: Django :: 3.2', From e3821caffe658375d2c62b0497f6f6008e45024b Mon Sep 17 00:00:00 2001 From: Jeremy M Crews Date: Mon, 9 May 2022 10:33:42 -0700 Subject: [PATCH 10/15] Update tox.ini removing old python --- tox.ini | 13 +++---------- 1 file changed, 3 insertions(+), 10 deletions(-) diff --git a/tox.ini b/tox.ini index bfb324e..0ae60da 100644 --- a/tox.ini +++ b/tox.ini @@ -1,12 +1,10 @@ # https://docs.djangoproject.com/en/dev/faq/install/#what-python-version-can-i-use-with-django [tox] envlist = - py{27,36,37}-django111, - py{36,37,38}-django21, - py{36,37,38,39}-django22, py{36,37,38,39}-django30, py{36,37,38,39}-django31, - py{36,37,38,39}-django32, + py{36,37,38,39,310}-django32, + py{38,39,310}-django40, [testenv] commands = @@ -16,15 +14,10 @@ setenv = DJANGO_SETTINGS_MODULE = settings PIP_INDEX_URL = https://pypi.python.org/simple/ deps = - py27: mock - py27: pyhamcrest==1.9.0 - !py27: pyhamcrest - django111: Django>=1.11.17,<1.12 - django21: Django>=2.1.8,<2.2 - django22: Django>=2.2.1,<2.3 django30: Django>=3.0,<3.1 django31: Django>=3.1,<3.2 django32: Django>=3.2,<3.3 + django40: Django>=4.0,<5.0 flake8 docutils From 5bb369f16d4e38e5881da96ef1ce256f8fd43899 Mon Sep 17 00:00:00 2001 From: Jeremy M Crews Date: Mon, 9 May 2022 10:34:38 -0700 Subject: [PATCH 11/15] Update setup.py removing python 2 --- setup.py | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/setup.py b/setup.py index 1ed5aaa..8cd52ce 100755 --- a/setup.py +++ b/setup.py @@ -31,7 +31,7 @@ ], include_package_data=True, install_requires=[ - 'Django>=3.0,<5.0;python_version>="3.8"', + 'Django>=3.0,<5.0;python_version>="3.6"', ], license="BSD", zip_safe=False, @@ -41,6 +41,8 @@ 'Intended Audience :: Developers', 'License :: OSI Approved :: BSD License', 'Natural Language :: English', + 'Programming Language :: Python :: 3.6', + 'Programming Language :: Python :: 3.7', 'Programming Language :: Python :: 3.8', 'Programming Language :: Python :: 3.9', 'Programming Language :: Python :: 3.10', From f9ab1b09887d09ebdce8a205b95e6b7c55c2826d Mon Sep 17 00:00:00 2001 From: Jeremy M Crews Date: Mon, 9 May 2022 10:36:53 -0700 Subject: [PATCH 12/15] Update .travis.yml removing old python --- .travis.yml | 14 ++++++-------- 1 file changed, 6 insertions(+), 8 deletions(-) diff --git a/.travis.yml b/.travis.yml index 529fc7d..3f32abe 100644 --- a/.travis.yml +++ b/.travis.yml @@ -7,18 +7,16 @@ install: - pip install tox matrix: include: - - python: "2.7" - env: TOX_ENVS=py27-django111 - - python: "3.5" - env: TOX_ENVS=py35-django21,py35-django22 - python: "3.6" - env: TOX_ENVS=py36-django21,py36-django22,py36-django30,py36-django31,py36-django32 + env: TOX_ENVS=py36-django30,py36-django31,py36-django32 - python: "3.7" - env: TOX_ENVS=py37-django21,py37-django22,py37-django30,py37-django31,py37-django32 + env: TOX_ENVS=py37-django30,py37-django31,py37-django32 - python: "3.8" - env: TOX_ENVS=py38-django21,py38-django22,py38-django30,py38-django31,py38-django32 + env: TOX_ENVS=py38-django30,py38-django31,py38-django32,py310-django40 - python: "3.9" - env: TOX_ENVS=py39-django22,py39-django30,py39-django31,py39-django32 + env: TOX_ENVS=py39-django30,py39-django31,py39-django32,py310-django40 + - python: "3.10" + env: TOX_ENVS=py39-django30,py39-django31,py39-django32,py310-django40 script: - tox -e $TOX_ENVS before_deploy: "make clean" From de6cf8fb51238daf3fe6c9cb47890cdeabe648f0 Mon Sep 17 00:00:00 2001 From: Jeremy M Crews Date: Mon, 9 May 2022 10:39:12 -0700 Subject: [PATCH 13/15] Delete setup.py --- setup.py | 55 ------------------------------------------------------- 1 file changed, 55 deletions(-) delete mode 100755 setup.py diff --git a/setup.py b/setup.py deleted file mode 100755 index 8cd52ce..0000000 --- a/setup.py +++ /dev/null @@ -1,55 +0,0 @@ -#!/usr/bin/env python -# -*- coding: utf-8 -*- - -import os -import sys - -import django_currentuser - -from setuptools import setup - -version = django_currentuser.__version__ - -if sys.argv[-1] == 'publish': - os.system('make release') - sys.exit() - -readme = open('README.rst').read() - -description = "Conveniently store reference to request user on thread/db level." - -setup( - name='django-currentuser', - version=version, - description=description, - long_description=readme, - author='Paessler AG', - author_email='bis@paessler.com', - url='https://github.com/PaesslerAG/django-currentuser', - packages=[ - 'django_currentuser', - ], - include_package_data=True, - install_requires=[ - 'Django>=3.0,<5.0;python_version>="3.6"', - ], - license="BSD", - zip_safe=False, - keywords='django-currentuser', - classifiers=[ - 'Development Status :: 4 - Beta', - 'Intended Audience :: Developers', - 'License :: OSI Approved :: BSD License', - 'Natural Language :: English', - 'Programming Language :: Python :: 3.6', - 'Programming Language :: Python :: 3.7', - 'Programming Language :: Python :: 3.8', - 'Programming Language :: Python :: 3.9', - 'Programming Language :: Python :: 3.10', - 'Framework :: Django', - 'Framework :: Django :: 3.0', - 'Framework :: Django :: 3.1', - 'Framework :: Django :: 3.2', - 'Framework :: Django :: 4.0', - ], -) From 278590d1b5dcc3df4d5ecdbbac5b1b12785201a9 Mon Sep 17 00:00:00 2001 From: Jeremy M Crews Date: Mon, 9 May 2022 15:24:52 -0700 Subject: [PATCH 14/15] Delete setup.cfg updates --- setup.cfg | 2 -- 1 file changed, 2 deletions(-) delete mode 100644 setup.cfg diff --git a/setup.cfg b/setup.cfg deleted file mode 100644 index 5e40900..0000000 --- a/setup.cfg +++ /dev/null @@ -1,2 +0,0 @@ -[wheel] -universal = 1 From 1ea8ca30407174c10bc206b698009c042b007b8b Mon Sep 17 00:00:00 2001 From: Jeremy M Crews Date: Mon, 9 May 2022 15:37:39 -0700 Subject: [PATCH 15/15] adding back setup.cfg --- setup.cfg | 2 ++ 1 file changed, 2 insertions(+) create mode 100644 setup.cfg diff --git a/setup.cfg b/setup.cfg new file mode 100644 index 0000000..0a8df87 --- /dev/null +++ b/setup.cfg @@ -0,0 +1,2 @@ +[wheel] +universal = 1 \ No newline at end of file