Skip to content

Commit 1358d89

Browse files
authored
Refactored build system, added dataclass (#25)
1 parent 7b9e700 commit 1358d89

9 files changed

+46
-98
lines changed

Diff for: .gitignore

+1-1
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,3 @@
11
.idea/
2-
entraid/__pycache__
2+
redis_entraid/__pycache__
33
tests/__pycache__

Diff for: pyproject.toml

+22
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,22 @@
1+
[build-system]
2+
requires = ["setuptools>=61.0"]
3+
build-backend = "setuptools.build_meta"
4+
5+
[project]
6+
name = "redispy-entraid-credentials"
7+
version = "0.0.1"
8+
authors = [
9+
{ name="Redis Inc.", email="[email protected]" },
10+
]
11+
description = "Entra ID credentials provider implementation for Redis-py client"
12+
readme = "README.md"
13+
requires-python = ">=3.8"
14+
dependencies = [
15+
"redis @ git+https://github.com/redis/redis-py.git/@vv-tba-support",
16+
"PyJWT~=2.9.0",
17+
"msal~=1.31.0",
18+
]
19+
20+
[tool.setuptools.packages.find]
21+
include = ["redis_entraid"]
22+
excludea = ["tests", ".github"]
File renamed without changes.

Diff for: entraid/cred_provider.py renamed to redis_entraid/cred_provider.py

+15-69
Original file line numberDiff line numberDiff line change
@@ -1,11 +1,13 @@
1+
from dataclasses import dataclass
12
from typing import Union, Tuple, Callable, Any, Awaitable
23

34
from redis.credentials import StreamingCredentialProvider
45
from redis.auth.token_manager import TokenManagerConfig, RetryPolicy, TokenManager, CredentialsListener
56

6-
from entraid.identity_provider import EntraIDIdentityProvider
7+
from redis_entraid.identity_provider import EntraIDIdentityProvider
78

89

10+
@dataclass
911
class TokenAuthConfig:
1012
"""
1113
Configuration for token authentication.
@@ -19,82 +21,26 @@ class TokenAuthConfig:
1921
DEFAULT_MAX_ATTEMPTS = 3
2022
DEFAULT_DELAY_IN_MS = 3
2123

22-
def __init__(self, idp: EntraIDIdentityProvider):
23-
self._expiration_refresh_ratio = self.DEFAULT_EXPIRATION_REFRESH_RATIO
24-
self._lower_refresh_bound_millis = self.DEFAULT_LOWER_REFRESH_BOUND_MILLIS
25-
self._token_request_execution_timeout_in_ms = self.DEFAULT_TOKEN_REQUEST_EXECUTION_TIMEOUT_IN_MS
26-
self._max_attempts = self.DEFAULT_MAX_ATTEMPTS
27-
self._delay_in_ms = self.DEFAULT_DELAY_IN_MS
28-
self._idp = idp
24+
idp: EntraIDIdentityProvider
25+
expiration_refresh_ratio: float = DEFAULT_EXPIRATION_REFRESH_RATIO
26+
lower_refresh_bound_millis: int = DEFAULT_LOWER_REFRESH_BOUND_MILLIS
27+
token_request_execution_timeout_in_ms: int = DEFAULT_TOKEN_REQUEST_EXECUTION_TIMEOUT_IN_MS
28+
max_attempts: int = DEFAULT_MAX_ATTEMPTS
29+
delay_in_ms: int = DEFAULT_DELAY_IN_MS
2930

3031
def get_token_manager_config(self) -> TokenManagerConfig:
3132
return TokenManagerConfig(
32-
self._expiration_refresh_ratio,
33-
self._lower_refresh_bound_millis,
34-
self._token_request_execution_timeout_in_ms,
33+
self.expiration_refresh_ratio,
34+
self.lower_refresh_bound_millis,
35+
self.token_request_execution_timeout_in_ms,
3536
RetryPolicy(
36-
self._max_attempts,
37-
self._delay_in_ms
37+
self.max_attempts,
38+
self.delay_in_ms
3839
)
3940
)
4041

4142
def get_identity_provider(self) -> EntraIDIdentityProvider:
42-
return self._idp
43-
44-
def expiration_refresh_ratio(self, value: float):
45-
"""
46-
Percentage value of total token TTL when refresh should be triggered.
47-
Default: 0.8
48-
49-
:param value: float
50-
:return: Self
51-
"""
52-
self._expiration_refresh_ratio = value
53-
return self
54-
55-
def lower_refresh_bound_millis(self, value: int):
56-
"""
57-
Represents the minimum time in milliseconds before token expiration to trigger a refresh, in milliseconds.
58-
Default: 0
59-
60-
:param value: int
61-
:return: Self
62-
"""
63-
self._lower_refresh_bound_millis = value
64-
return self
65-
66-
def token_request_execution_timeout_in_ms(self, value: int):
67-
"""
68-
Represents the maximum time in milliseconds to wait for a token request to complete.
69-
Default: 100
70-
71-
:param value: int
72-
:return: Self
73-
"""
74-
self._token_request_execution_timeout_in_ms = value
75-
return self
76-
77-
def max_attempts(self, value: int):
78-
"""
79-
Represents the maximum number of attempts to trigger a refresh in case of error.
80-
Default: 3
81-
82-
:param value: int
83-
:return: Self
84-
"""
85-
self._max_attempts = value
86-
return self
87-
88-
def delay_in_ms(self, value: int):
89-
"""
90-
Represents the delay between retries.
91-
Default: 10
92-
93-
:param value: int
94-
:return: Self
95-
"""
96-
self._delay_in_ms = value
97-
return self
43+
return self.idp
9844

9945

10046
class EntraIdCredentialsProvider(StreamingCredentialProvider):
File renamed without changes.

Diff for: setup.py

-20
This file was deleted.

Diff for: tests/conftest.py

+6-6
Original file line numberDiff line numberDiff line change
@@ -5,8 +5,8 @@
55
from redis import CredentialProvider
66
from redis.auth.idp import IdentityProviderInterface
77

8-
from entraid.cred_provider import EntraIdCredentialsProvider, TokenAuthConfig
9-
from entraid.identity_provider import ManagedIdentityType, create_provider_from_managed_identity, \
8+
from redis_entraid.cred_provider import EntraIdCredentialsProvider, TokenAuthConfig
9+
from redis_entraid.identity_provider import ManagedIdentityType, create_provider_from_managed_identity, \
1010
create_provider_from_service_principal, EntraIDIdentityProvider
1111

1212

@@ -93,10 +93,10 @@ def get_credential_provider(request) -> CredentialProvider:
9393
)
9494

9595
auth_config = TokenAuthConfig(idp)
96-
auth_config.expiration_refresh_ratio(expiration_refresh_ratio)
97-
auth_config.lower_refresh_bound_millis(lower_refresh_bound_millis)
98-
auth_config.max_attempts(max_attempts)
99-
auth_config.delay_in_ms(delay_in_ms)
96+
auth_config.expiration_refresh_ratio = expiration_refresh_ratio
97+
auth_config.lower_refresh_bound_millis = lower_refresh_bound_millis
98+
auth_config.max_attempts = max_attempts
99+
auth_config.delay_in_ms = delay_in_ms
100100

101101
return EntraIdCredentialsProvider(
102102
config=auth_config,

Diff for: tests/test_cred_provider.py

+1-1
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,7 @@
44
import pytest
55
from redis.auth.token import TokenInterface
66

7-
from entraid.cred_provider import EntraIdCredentialsProvider
7+
from redis_entraid.cred_provider import EntraIdCredentialsProvider
88

99

1010
class TestEntraIdCredentialsProvider:

Diff for: tests/test_identity_provider.py

+1-1
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
import pytest
22
from msal import TokenCache
33

4-
from entraid.identity_provider import EntraIDIdentityProvider
4+
from redis_entraid.identity_provider import EntraIDIdentityProvider
55

66

77
class TestEntraIDIdentityProvider:

0 commit comments

Comments
 (0)