django-bananas 2.4__py3-none-any.whl → 3.0__py3-none-any.whl

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
bananas/__init__.py CHANGED
@@ -1,4 +1,4 @@
1
- VERSION = (2, 4, 0, "final", 0)
1
+ VERSION = (3, 0, 0, "final", 0)
2
2
 
3
3
 
4
4
  def get_version() -> str:
@@ -53,7 +53,7 @@ class LoginAPI(BananasAdminAPI):
53
53
  login_form = AuthenticationForm(request, data=request.data)
54
54
 
55
55
  if not login_form.is_valid():
56
- raise serializers.ValidationError(login_form.errors)
56
+ raise serializers.ValidationError(login_form.errors) # type: ignore[arg-type]
57
57
 
58
58
  auth_login(request, login_form.get_user())
59
59
 
@@ -111,7 +111,7 @@ class ChangePasswordAPI(BananasAdminAPI):
111
111
  password_form = PasswordChangeForm(request.user, data=request.data)
112
112
 
113
113
  if not password_form.is_valid():
114
- raise serializers.ValidationError(password_form.errors)
114
+ raise serializers.ValidationError(password_form.errors) # type: ignore[arg-type]
115
115
 
116
116
  password_form.save()
117
117
  update_session_auth_hash(request, password_form.user)
bananas/query.py CHANGED
@@ -11,6 +11,7 @@ from typing import (
11
11
  Type,
12
12
  TypeVar,
13
13
  Union,
14
+ cast,
14
15
  )
15
16
 
16
17
  from django.db.models import Model
@@ -66,7 +67,7 @@ _MT_co = TypeVar("_MT_co", bound=Model, covariant=True)
66
67
  class IsQuerySet(Protocol[_MT_co]):
67
68
  def values(
68
69
  self, *fields: Union[str, Combinable], **expressions: Any
69
- ) -> "_QuerySet[_MT_co, ModelDict]": ...
70
+ ) -> "_QuerySet[_MT_co, dict[str, Any]]": ...
70
71
 
71
72
 
72
73
  class ModelDictQuerySetMixin:
@@ -76,8 +77,8 @@ class ModelDictQuerySetMixin:
76
77
  if named_fields:
77
78
  fields += tuple(named_fields.values())
78
79
 
79
- clone = self.values(*fields)
80
- clone._iterable_class = ModelDictIterable
80
+ clone = cast("_QuerySet[_MT_co, ModelDict]", self.values(*fields))
81
+ clone._iterable_class = ModelDictIterable # type: ignore[assignment]
81
82
 
82
83
  # QuerySet._hints is a dict object used by db router
83
84
  # to aid deciding which db should get a request. Currently
@@ -85,7 +86,7 @@ class ModelDictQuerySetMixin:
85
86
  # fine to set a custom key on this dict as it's a guaranteed
86
87
  # way that it'll be returned with the QuerySet instance
87
88
  # while leaving the queryset intact
88
- clone._add_hints(**{"_named_fields": named_fields})
89
+ clone._add_hints(**{"_named_fields": named_fields}) # type: ignore[attr-defined]
89
90
 
90
91
  return clone
91
92
 
@@ -56,6 +56,10 @@ body:not(.popup) #header #object-tools {
56
56
  text-indent: -20000px;
57
57
  }
58
58
 
59
+ #changelist .changelist-form-container:has(#changelist-filter) > div {
60
+ max-width: 100%;
61
+ }
62
+
59
63
  #header #changelist-search input[type="submit"]:hover {
60
64
  background-image: url(../../img/search.svg), linear-gradient(to bottom, rgba(0, 0, 0, 0.15), rgba(0, 0, 0, 0.15));
61
65
  }
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: django-bananas
3
- Version: 2.4
3
+ Version: 3.0
4
4
  Summary: Django Bananas - Django extensions the monkey way
5
5
  Home-page: https://github.com/5monkeys/django-bananas
6
6
  License: MIT License
@@ -13,22 +13,21 @@ Classifier: Programming Language :: Python :: 3.10
13
13
  Classifier: Programming Language :: Python :: 3.11
14
14
  Classifier: Programming Language :: Python :: 3.12
15
15
  Classifier: Programming Language :: Python :: 3.13
16
+ Classifier: Programming Language :: Python :: 3.14
16
17
  Classifier: Framework :: Django
17
- Classifier: Framework :: Django :: 3.2
18
- Classifier: Framework :: Django :: 4.0
19
- Classifier: Framework :: Django :: 4.1
20
18
  Classifier: Framework :: Django :: 4.2
21
19
  Classifier: Framework :: Django :: 5.0
22
20
  Classifier: Framework :: Django :: 5.1
23
21
  Classifier: Framework :: Django :: 5.2
22
+ Classifier: Framework :: Django :: 6.0
24
23
  Classifier: Intended Audience :: Developers
25
24
  Classifier: License :: OSI Approved :: MIT License
26
25
  Classifier: Operating System :: OS Independent
27
26
  Classifier: Framework :: Django
28
- Requires-Python: >=3.6
27
+ Requires-Python: >=3.8
29
28
  Description-Content-Type: text/x-rst; charset=UTF-8
30
29
  License-File: LICENSE
31
- Requires-Dist: Django>=2.2
30
+ Requires-Dist: Django>=4.2
32
31
  Requires-Dist: typing-extensions>=3.7.4.3
33
32
  Provides-Extra: drf
34
33
  Requires-Dist: djangorestframework>=3.10; extra == "drf"
@@ -81,13 +80,11 @@ with the ``drf`` extra to keep those in sync:
81
80
 
82
81
  Currently tested only for
83
82
 
84
- - Django 3.2 under Python 3.8-3.10
85
- - Django 4.0 under Python 3.8-3.10
86
- - Django 4.1 under Python 3.8-3.13
87
- - Django 4.2 under Python 3.8-3.13
83
+ - Django 4.2 under Python 3.8-3.12
88
84
  - Django 5.0 under Python 3.10-3.13
89
85
  - Django 5.1 under Python 3.10-3.13
90
- - Django 5.2 under Python 3.10-3.13
86
+ - Django 5.2 under Python 3.10-3.14
87
+ - Django 6.0 under Python 3.12-3.14
91
88
 
92
89
  Pull requests welcome!
93
90
 
@@ -578,12 +575,12 @@ Testing and development requirements can be installed using package extras
578
575
  ``drf`` extra when installing ``dev``.
579
576
 
580
577
  To get started, setup a virtualenv and then install test requirements and run
581
- tests and checks on Python 3.9/Django 3.1 with:
578
+ tests and typehints on Python 3.14/Django 6.0 with:
582
579
 
583
580
  .. code-block:: bash
584
581
 
585
582
  python3 -m pip install -e .[test]
586
- TOXENV=py39-django31,checks python3 -m tox
583
+ TOXENV=py314-django60,type-check python3 -m tox
587
584
 
588
585
  You can install development requirements into your virtualenv. Linting and
589
586
  formatting uses pre-commit which you could also install on a system level.
@@ -1,9 +1,9 @@
1
- bananas/__init__.py,sha256=HBTRN6OCuRJ35rOq9Scw0Q_tH_VrxXXcWvRjUDjLtpc,686
1
+ bananas/__init__.py,sha256=yml9BS9jMFFoXxex1qXrBIwFeYdTP692zPJd-QQYXZY,686
2
2
  bananas/environment.py,sha256=1UwUNjSbnLlWh0XN41_AdEc0TVXQbbswkM34KNPzNwk,7744
3
3
  bananas/lazy.py,sha256=XFaqACJ6K5s_MZcxK_5OLQU35F7c7jB3KsdAtHuYQ6k,140
4
4
  bananas/models.py,sha256=upapLi3Zvk073G4oMXCobh7RRXDhBLQ0kjPTWWAeYCM,8797
5
5
  bananas/py.typed,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
6
- bananas/query.py,sha256=vDvbY3_KSri_bUZflmUDb2zo46kuZJpuWVBL6s2lX4Y,3615
6
+ bananas/query.py,sha256=DJeuDY41JRX_45r3hS-1XBN9wThm4f-8PUh6yy8-N5k,3726
7
7
  bananas/secrets.py,sha256=WDBZapuPzDGHUwO1J_UjFuoljFkgbLKYy0uFTIl53Fk,1021
8
8
  bananas/settings.py,sha256=HGZBxm5BMwHJc9PpQpvkzAuasXvePa-q_4tgeup9DPA,139
9
9
  bananas/url.py,sha256=63vR_bK0Py9X-8dA7seEPVrQaU8FRSIOLwUb8XIUDAk,7907
@@ -17,7 +17,7 @@ bananas/admin/api/router.py,sha256=VWn6O97sbsoPZtKPLPxPDn_raO7Gy8B62N1s7-mGHhU,5
17
17
  bananas/admin/api/serializers.py,sha256=XziZ1-6h4hn1qgts3qB8W18ctpl6h8vP3dkqa7WxLe8,2964
18
18
  bananas/admin/api/urls.py,sha256=fch3C5BhI6d12U9un8I28fFiHZWTWFH5XAhAzXPURxY,398
19
19
  bananas/admin/api/versioning.py,sha256=ciyelTzGZtJDPnigRZAJ0Gk1ZHfGxM9FXctS-OoyJ4Y,901
20
- bananas/admin/api/views.py,sha256=at_iF0Q860srlsyqjuQq9D274PItTSrXp0uURgegqrE,4169
20
+ bananas/admin/api/views.py,sha256=2jVkpOMA2c6bNINGMM1JYWXmfyvuZqdmYHqsdBE1uzc,4221
21
21
  bananas/admin/api/schemas/__init__.py,sha256=n4vZ3Sd1H23krxIIUWvktHimmdfh1n0K-J4z2-QsZxI,336
22
22
  bananas/admin/api/schemas/base.py,sha256=XFfSQE_VeUraB_LIge1xEtVYOaTGfx6aDq6eahd6D2o,449
23
23
  bananas/admin/api/schemas/decorators.py,sha256=Zwp7AwV_6Y0iWVcsO8VjNHHttYMcdGnrfr7ElwEzJzE,492
@@ -33,15 +33,15 @@ bananas/management/commands/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMp
33
33
  bananas/management/commands/show_urls.py,sha256=X6ipP04XN1pdrT2Ne5ozbMx068SQ8Io-HpO6Xi7v7d0,2220
34
34
  bananas/management/commands/syncpermissions.py,sha256=fmsJpikAPAwvK8Yfkj4A53fdUOz-y0rHEF7xsRiy8W0,1565
35
35
  bananas/static/admin/bananas/css/bananas.css,sha256=h7IuijjLYePQ5vwMWNP_Piyxn7IDBMWBM5Of0n6knNE,17882
36
- bananas/static/admin/bananas/css/banansive.css,sha256=P2EuItR7n0l_hn3X0mIMKhj4cQc4hnjg4PvQjyknLBg,3984
36
+ bananas/static/admin/bananas/css/banansive.css,sha256=t23KL0bJEO_reIjJh6TsOq_FVYBf2DAT5lP5IkLYEh8,4077
37
37
  bananas/static/admin/bananas/img/django.svg,sha256=4S1Cjntojkcoj17oTNufVtnlflhoKsRuQ9O7hTqyx6Q,5291
38
38
  bananas/static/admin/bananas/img/search.svg,sha256=59UwyGYVJ4EJ26d5AAIdjtCHR3CnO94in6eQIbkYTu8,458
39
39
  bananas/static/admin/bananas/js/bananas.js,sha256=1Xv6JEiTZYeaJSTxkKyMLwIRJ40SnRDPi2N-prpWoU0,4596
40
40
  bananas/static/admin/css/responsive.css,sha256=UAMABM7h5rRZ8FocJw4bfx36Q5XtIDm4ddXN8lMC4SQ,17894
41
41
  bananas/templates/admin/base_site.html,sha256=RU67gxvx1ozx3-uCyXWf2jC9H6c4adm0BjwmKF8EHEo,7977
42
42
  bananas/templates/admin/view.html,sha256=WezwD9qGPch5S29intLVzbY1zVRop4zdIdm4pf7usVw,114
43
- django_bananas-2.4.dist-info/licenses/LICENSE,sha256=ezKzVU8KUSkiuP6I5I1PEfOUn33aerXQ_fU8_4Qavos,1081
44
- django_bananas-2.4.dist-info/METADATA,sha256=13IP-MgvJRUUqgKRwtv6Lag1f5vhsq4bnzhfCPj2UCM,18680
45
- django_bananas-2.4.dist-info/WHEEL,sha256=_zCd3N1l69ArxyTb8rzEoP9TpbYXkqRFSNOD5OuxnTs,91
46
- django_bananas-2.4.dist-info/top_level.txt,sha256=5JKVcC99qGcHeOm5WigbcrQbMcsWr6N2A0tF9ZoY6j8,8
47
- django_bananas-2.4.dist-info/RECORD,,
43
+ django_bananas-3.0.dist-info/licenses/LICENSE,sha256=ezKzVU8KUSkiuP6I5I1PEfOUn33aerXQ_fU8_4Qavos,1081
44
+ django_bananas-3.0.dist-info/METADATA,sha256=DTJIaBDEiXx8bXU14ta7Knj3juyy_TEfiMp5rizlDVo,18589
45
+ django_bananas-3.0.dist-info/WHEEL,sha256=wUyA8OaulRlbfwMtmQsvNngGrxQHAvkKcvRmdizlJi0,92
46
+ django_bananas-3.0.dist-info/top_level.txt,sha256=5JKVcC99qGcHeOm5WigbcrQbMcsWr6N2A0tF9ZoY6j8,8
47
+ django_bananas-3.0.dist-info/RECORD,,
@@ -1,5 +1,5 @@
1
1
  Wheel-Version: 1.0
2
- Generator: setuptools (80.9.0)
2
+ Generator: setuptools (80.10.2)
3
3
  Root-Is-Purelib: true
4
4
  Tag: py3-none-any
5
5