cardo-python-utils 0.5.dev5__py3-none-any.whl → 0.5.dev6__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.
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: cardo-python-utils
3
- Version: 0.5.dev5
3
+ Version: 0.5.dev6
4
4
  Summary: Python library enhanced with a wide range of functions for different scenarios.
5
5
  Author-email: CardoAI <hello@cardoai.com>
6
6
  License: MIT
@@ -24,24 +24,16 @@ Classifier: Topic :: Internet :: WWW/HTTP :: Dynamic Content
24
24
  Requires-Python: >=3.8
25
25
  Description-Content-Type: text/x-rst
26
26
  License-File: LICENSE
27
- Provides-Extra: django
28
- Requires-Dist: Django; extra == "django"
29
- Provides-Extra: django-ninja
30
- Requires-Dist: Django; extra == "django-ninja"
31
- Requires-Dist: django-ninja; extra == "django-ninja"
32
- Requires-Dist: PyJWT; extra == "django-ninja"
33
- Provides-Extra: drf
34
- Requires-Dist: Django; extra == "drf"
35
- Requires-Dist: djangorestframework; extra == "drf"
36
- Requires-Dist: PyJWT; extra == "drf"
37
- Provides-Extra: django-admin-auth
38
- Requires-Dist: Django; extra == "django-admin-auth"
39
- Requires-Dist: mozilla-django-oidc>=4.0.1; extra == "django-admin-auth"
27
+ Provides-Extra: django-keycloak-api
28
+ Requires-Dist: PyJWT>=2.10.1; extra == "django-keycloak-api"
29
+ Provides-Extra: django-keycloak-admin
30
+ Requires-Dist: mozilla-django-oidc>=4.0.1; extra == "django-keycloak-admin"
40
31
  Provides-Extra: django-keycloak-groups
41
- Requires-Dist: Django; extra == "django-keycloak-groups"
42
32
  Requires-Dist: python-keycloak>=5.8.1; extra == "django-keycloak-groups"
43
33
  Provides-Extra: all
44
- Requires-Dist: Django; extra == "all"
34
+ Requires-Dist: PyJWT>=2.10.1; extra == "all"
35
+ Requires-Dist: mozilla-django-oidc>=4.0.1; extra == "all"
36
+ Requires-Dist: python-keycloak>=5.8.1; extra == "all"
45
37
  Provides-Extra: dev
46
38
  Requires-Dist: pytest>=7.0; extra == "dev"
47
39
  Requires-Dist: pytest-django>=4.5; extra == "dev"
@@ -1,4 +1,4 @@
1
- cardo_python_utils-0.5.dev5.dist-info/licenses/LICENSE,sha256=N-YtxDy8n5A1Mo7JKKItNIlboiK_pMOZ48ojx76jo3g,1046
1
+ cardo_python_utils-0.5.dev6.dist-info/licenses/LICENSE,sha256=N-YtxDy8n5A1Mo7JKKItNIlboiK_pMOZ48ojx76jo3g,1046
2
2
  python_utils/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
3
3
  python_utils/choices.py,sha256=pu1fUBlem-Uz2J36FmDv-tzr0UqOSF00xIaF6cVOa4g,2505
4
4
  python_utils/data_structures.py,sha256=ZqkZYPy20zyGYOVhwb9qst4vF_P7X2A9z5E36rMUC6I,16820
@@ -11,15 +11,14 @@ python_utils/text.py,sha256=pw9CZeM_Lcw-6k4GyR-4D1Wix8A7F_V1u1IIZTIazW4,3792
11
11
  python_utils/time.py,sha256=7Wei3uJ02Bk-BFRf-e1axoG418XQOhrXPvTwNZgTdnw,9614
12
12
  python_utils/types_hinting.py,sha256=QVWzmXRgNxhvln14tEX_FbQYryuVYhjWJ0dVOnlF6G4,120
13
13
  python_utils/django/utils.py,sha256=lgLZLsUfdDJJmBYD2lqQDfiC9nDnT4oSIxVt3pKYIwI,16192
14
- python_utils/django/auth/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
15
- python_utils/django/auth/admin.py,sha256=1zuqfvAXSKEEPvrdv7tYOG1x0namOIlJwPeHaF2f1EA,1517
16
- python_utils/django/auth/drf.py,sha256=k7KISe1FZzwaPOpQU6geoTvnTnaVHa5sBALClb_n4-4,3735
17
- python_utils/django/auth/ninja.py,sha256=h8O0otdOi6aUUDR4WXeh6OBfBMdeKl0_wF7CKrOtS_I,4237
18
- python_utils/django/keycloak/admin.py,sha256=7cism4Pv39ijm_8cs0iC9I5gjY7tcjzbt91mJAvl3xk,2671
14
+ python_utils/django/keycloak/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
15
+ python_utils/django/keycloak/admin.py,sha256=AQhCOci7pAjo2SR5VRGAUPtJVdCSSKLZ7BxzpkqVb-s,4242
16
+ python_utils/django/keycloak/drf.py,sha256=k7KISe1FZzwaPOpQU6geoTvnTnaVHa5sBALClb_n4-4,3735
19
17
  python_utils/django/keycloak/models.py,sha256=WU_KClfj-pboDIKUDHZQfQuhAPIPXgP-LrEvg9XJjmA,504
18
+ python_utils/django/keycloak/ninja.py,sha256=h8O0otdOi6aUUDR4WXeh6OBfBMdeKl0_wF7CKrOtS_I,4237
20
19
  python_utils/django/keycloak/service.py,sha256=T_sfDn4OZ5U4OJaN0-Qi46w7AowWmxZLa_OD8a0MutI,3587
21
20
  python_utils/django/keycloak/user_groups_changelist.html,sha256=KbO6bsH-nh3DDYCq4UB8j25NdjLP_nh_GuGZ4lYSarM,182
22
- cardo_python_utils-0.5.dev5.dist-info/METADATA,sha256=bTLNIn-j1Z78dOyw6dpb1xXfeiSy59R7JPMrEUf-PrQ,3236
23
- cardo_python_utils-0.5.dev5.dist-info/WHEEL,sha256=_zCd3N1l69ArxyTb8rzEoP9TpbYXkqRFSNOD5OuxnTs,91
24
- cardo_python_utils-0.5.dev5.dist-info/top_level.txt,sha256=zAx6OfEsjJs8BEW3okSiG_j9gpkI69xWShzum6oBgKI,13
25
- cardo_python_utils-0.5.dev5.dist-info/RECORD,,
21
+ cardo_python_utils-0.5.dev6.dist-info/METADATA,sha256=xlxfHApBS3CIV2Tb_IuLS-DWe7imLvrZKN4ML1HEBwg,2966
22
+ cardo_python_utils-0.5.dev6.dist-info/WHEEL,sha256=_zCd3N1l69ArxyTb8rzEoP9TpbYXkqRFSNOD5OuxnTs,91
23
+ cardo_python_utils-0.5.dev6.dist-info/top_level.txt,sha256=zAx6OfEsjJs8BEW3okSiG_j9gpkI69xWShzum6oBgKI,13
24
+ cardo_python_utils-0.5.dev6.dist-info/RECORD,,
@@ -1,16 +1,64 @@
1
+ from django.conf import settings
1
2
  from django.contrib import admin, messages
2
3
  from django.core.cache import cache
3
4
  from django.urls import path
4
5
  from django.shortcuts import redirect
6
+ from mozilla_django_oidc.auth import OIDCAuthenticationBackend
5
7
 
6
8
  from .service import KeycloakService
7
9
 
8
10
 
11
+ class KeycloakAuthenticationBackend(OIDCAuthenticationBackend):
12
+ def _get_user_data(self, claims) -> dict:
13
+ client_roles = (
14
+ claims.get("resource_access", {})
15
+ .get(getattr(settings, "OIDC_RP_CLIENT_ID", ""), {})
16
+ .get("roles", [])
17
+ )
18
+ is_superuser = "Admin" in client_roles
19
+
20
+ return {
21
+ "username": claims.get("preferred_username"),
22
+ "email": claims.get("email"),
23
+ "first_name": claims.get("given_name", ""),
24
+ "last_name": claims.get("family_name", ""),
25
+ "is_staff": claims.get("is_staff", False),
26
+ "is_superuser": is_superuser,
27
+ }
28
+
29
+ def filter_users_by_claims(self, claims):
30
+ username = claims.get("preferred_username")
31
+ if not username:
32
+ return self.UserModel.objects.none()
33
+ return self.UserModel.objects.filter(username=username)
34
+
35
+ def create_user(self, claims):
36
+ return self.UserModel.objects.create_user(**self._get_user_data(claims))
37
+
38
+ def update_user(self, user, claims):
39
+ save_needed = False
40
+
41
+ for attr, value in self._get_user_data(claims).items():
42
+ if getattr(user, attr) != value:
43
+ setattr(user, attr, value)
44
+ save_needed = True
45
+
46
+ if save_needed:
47
+ user.save()
48
+
49
+ return user
50
+
51
+
52
+ def has_admin_site_permission(request):
53
+ """Admin site is not publicly accessible."""
54
+ return request.user.is_active
55
+
56
+
9
57
  class UserGroupAdminBase(admin.ModelAdmin):
10
58
  list_display = ("path",)
11
59
  search_fields = ("id", "path")
12
60
  readonly_fields = ("id", "path")
13
-
61
+
14
62
  # To show ManyToMany fields with a horizontal filter widget
15
63
  # filter_horizontal = ("allowed_entities",)
16
64
 
@@ -1,47 +0,0 @@
1
- from django.conf import settings
2
- from mozilla_django_oidc.auth import OIDCAuthenticationBackend
3
-
4
-
5
- class OIDCCustomAuthenticationBackend(OIDCAuthenticationBackend):
6
- def _get_user_data(self, claims) -> dict:
7
- client_roles = (
8
- claims.get("resource_access", {})
9
- .get(getattr(settings, "OIDC_RP_CLIENT_ID", ""), {})
10
- .get("roles", [])
11
- )
12
- is_superuser = "Admin" in client_roles
13
-
14
- return {
15
- "username": claims.get("preferred_username"),
16
- "email": claims.get("email"),
17
- "first_name": claims.get("given_name", ""),
18
- "last_name": claims.get("family_name", ""),
19
- "is_staff": claims.get("is_staff", False),
20
- "is_superuser": is_superuser,
21
- }
22
-
23
- def filter_users_by_claims(self, claims):
24
- username = claims.get("preferred_username")
25
- if not username:
26
- return self.UserModel.objects.none()
27
- return self.UserModel.objects.filter(username=username)
28
-
29
- def create_user(self, claims):
30
- return self.UserModel.objects.create_user(**self._get_user_data(claims))
31
-
32
- def update_user(self, user, claims):
33
- save_needed = False
34
-
35
- for attr, value in self._get_user_data(claims).items():
36
- if getattr(user, attr) != value:
37
- setattr(user, attr, value)
38
- save_needed = True
39
-
40
- if save_needed:
41
- user.save()
42
-
43
- return user
44
-
45
-
46
- def has_permission(request):
47
- return request.user.is_active
File without changes
File without changes
File without changes