setech 1.8.1__tar.gz → 1.8.3__tar.gz
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.
- {setech-1.8.1 → setech-1.8.3}/PKG-INFO +2 -2
- {setech-1.8.1 → setech-1.8.3}/pyproject.toml +7 -7
- {setech-1.8.1 → setech-1.8.3}/src/setech/django/rest_framework/fields.py +2 -4
- setech-1.8.3/src/setech/logging/__init__.py +5 -0
- setech-1.8.3/src/setech/logging/logging.py +42 -0
- setech-1.8.1/src/setech/logging/__init__.py +0 -4
- {setech-1.8.1 → setech-1.8.3}/LICENCE +0 -0
- {setech-1.8.1 → setech-1.8.3}/README.md +0 -0
- {setech-1.8.1 → setech-1.8.3}/src/setech/__init__.py +0 -0
- {setech-1.8.1 → setech-1.8.3}/src/setech/api_client/__init__.py +0 -0
- {setech-1.8.1 → setech-1.8.3}/src/setech/api_client/_base.py +0 -0
- {setech-1.8.1 → setech-1.8.3}/src/setech/api_client/async_client.py +0 -0
- {setech-1.8.1 → setech-1.8.3}/src/setech/api_client/sync_client.py +0 -0
- {setech-1.8.1 → setech-1.8.3}/src/setech/api_client/utils.py +0 -0
- {setech-1.8.1 → setech-1.8.3}/src/setech/constants/__init__.py +0 -0
- {setech-1.8.1 → setech-1.8.3}/src/setech/constants/date.py +0 -0
- {setech-1.8.1 → setech-1.8.3}/src/setech/django/__init__.py +0 -0
- {setech-1.8.1 → setech-1.8.3}/src/setech/django/constants.py +0 -0
- {setech-1.8.1 → setech-1.8.3}/src/setech/django/middleware/__init__.py +0 -0
- {setech-1.8.1 → setech-1.8.3}/src/setech/django/middleware/request_logging.py +0 -0
- {setech-1.8.1 → setech-1.8.3}/src/setech/django/models.py +0 -0
- {setech-1.8.1 → setech-1.8.3}/src/setech/django/rest_framework/__init__.py +0 -0
- {setech-1.8.1 → setech-1.8.3}/src/setech/django/rest_framework/pagination.py +0 -0
- {setech-1.8.1 → setech-1.8.3}/src/setech/django/utils.py +0 -0
- {setech-1.8.1 → setech-1.8.3}/src/setech/django/validators.py +0 -0
- {setech-1.8.1 → setech-1.8.3}/src/setech/domain_mx_validator/__init__.py +0 -0
- {setech-1.8.1 → setech-1.8.3}/src/setech/domain_mx_validator/base.py +0 -0
- {setech-1.8.1 → setech-1.8.3}/src/setech/domain_mx_validator/memory.py +0 -0
- {setech-1.8.1 → setech-1.8.3}/src/setech/domain_mx_validator/redis.py +0 -0
- {setech-1.8.1 → setech-1.8.3}/src/setech/logging/formatters.py +0 -0
- {setech-1.8.1 → setech-1.8.3}/src/setech/logging/handlers.py +0 -0
- {setech-1.8.1 → setech-1.8.3}/src/setech/py.typed +0 -0
- {setech-1.8.1 → setech-1.8.3}/src/setech/utils/__init__.py +0 -0
- {setech-1.8.1 → setech-1.8.3}/src/setech/utils/numeric.py +0 -0
- {setech-1.8.1 → setech-1.8.3}/src/setech/utils/parse.py +0 -0
- {setech-1.8.1 → setech-1.8.3}/src/setech/utils/ssn/__init__.py +0 -0
- {setech-1.8.1 → setech-1.8.3}/src/setech/utils/ssn/base.py +0 -0
- {setech-1.8.1 → setech-1.8.3}/src/setech/utils/ssn/latvian.py +0 -0
- {setech-1.8.1 → setech-1.8.3}/src/setech/utils/ssn/lithuanian.py +0 -0
- {setech-1.8.1 → setech-1.8.3}/src/setech/utils/ssn/utils.py +0 -0
- {setech-1.8.1 → setech-1.8.3}/src/setech/utils/text.py +0 -0
- {setech-1.8.1 → setech-1.8.3}/src/setech/utils/time.py +0 -0
- {setech-1.8.1 → setech-1.8.3}/src/setech/utils/validators.py +0 -0
- {setech-1.8.1 → setech-1.8.3}/src/setech/utils/various.py +0 -0
- {setech-1.8.1 → setech-1.8.3}/src/setech/utils/warnings.py +0 -0
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.3
|
|
2
2
|
Name: setech
|
|
3
|
-
Version: 1.8.
|
|
3
|
+
Version: 1.8.3
|
|
4
4
|
Summary: Setech utilities
|
|
5
5
|
Keywords: api-client,logging,setech,utility,utils
|
|
6
6
|
Author: Eriks Karls
|
|
@@ -48,7 +48,7 @@ Requires-Dist: redis ; extra == 'dns-redis'
|
|
|
48
48
|
Requires-Dist: setech[dns] ; extra == 'dns-redis'
|
|
49
49
|
Requires-Dist: djangorestframework ; extra == 'drf'
|
|
50
50
|
Requires-Dist: setech[django] ; extra == 'drf'
|
|
51
|
-
Requires-Python: >=3.
|
|
51
|
+
Requires-Python: >=3.11
|
|
52
52
|
Project-URL: Homepage, https://pypi.org/project/setech/
|
|
53
53
|
Provides-Extra: django
|
|
54
54
|
Provides-Extra: dns
|
|
@@ -4,12 +4,12 @@ requires = [ "uv-build>=0.11.18,<0.12", "wheel" ]
|
|
|
4
4
|
|
|
5
5
|
[project]
|
|
6
6
|
name = "setech"
|
|
7
|
-
version = "1.8.
|
|
7
|
+
version = "1.8.3"
|
|
8
8
|
description = "Setech utilities"
|
|
9
9
|
readme = "README.md"
|
|
10
10
|
keywords = [ "api-client", "logging", "setech", "utility", "utils" ]
|
|
11
11
|
license = { file = "LICENCE" }
|
|
12
|
-
requires-python = ">=3.
|
|
12
|
+
requires-python = ">=3.11"
|
|
13
13
|
classifiers = [
|
|
14
14
|
"Development Status :: 5 - Production/Stable",
|
|
15
15
|
"Intended Audience :: Developers",
|
|
@@ -82,13 +82,13 @@ stubs = [
|
|
|
82
82
|
# ==== uv ====
|
|
83
83
|
[tool.uv]
|
|
84
84
|
default-groups = "all"
|
|
85
|
-
[tool.uv.build-backend]
|
|
86
|
-
module-name = "setech"
|
|
87
|
-
module-root = "src"
|
|
88
85
|
[tool.uv.dependency-groups]
|
|
89
|
-
dev = { requires-python = ">=3.
|
|
86
|
+
dev = { requires-python = ">=3.11" }
|
|
90
87
|
[tool.uv.extra-build-dependencies]
|
|
91
88
|
setech = [ "uv.build" ]
|
|
89
|
+
[tool.uv.build-backend]
|
|
90
|
+
module-name = "setech"
|
|
91
|
+
module-root = "src"
|
|
92
92
|
|
|
93
93
|
# ==== ruff ====
|
|
94
94
|
[tool.ruff]
|
|
@@ -193,7 +193,7 @@ exclude = [
|
|
|
193
193
|
'^\.?venv/',
|
|
194
194
|
]
|
|
195
195
|
ignore_missing_imports = false
|
|
196
|
-
python_version = "3.
|
|
196
|
+
python_version = "3.11"
|
|
197
197
|
disallow_untyped_defs = true
|
|
198
198
|
implicit_optional = true
|
|
199
199
|
warn_redundant_casts = true
|
|
@@ -26,9 +26,8 @@ class EmailMxField(serializers.EmailField):
|
|
|
26
26
|
|
|
27
27
|
class PhoneNumberField(serializers.CharField):
|
|
28
28
|
def __init__(self, **kwargs: Any) -> None:
|
|
29
|
-
super().__init__(**kwargs)
|
|
29
|
+
super().__init__(error_messages={"invalid_format": "Not a valid phone number."}, **kwargs)
|
|
30
30
|
self.validators.append(django_phone_number_validator)
|
|
31
|
-
self.default_error_messages["invalid_format"] = "Not a valid phone number."
|
|
32
31
|
|
|
33
32
|
def to_internal_value(self, data: Any) -> str:
|
|
34
33
|
str_phone_number = super().to_internal_value(data)
|
|
@@ -44,9 +43,8 @@ class PersonalCodeField(serializers.CharField):
|
|
|
44
43
|
self.trim_whitespace = True
|
|
45
44
|
self.max_length = kwargs.pop("max_length", None)
|
|
46
45
|
self.min_length = kwargs.pop("min_length", None)
|
|
47
|
-
super().__init__(**kwargs)
|
|
46
|
+
super().__init__(error_messages={"invalid_format": "Not a valid format."}, **kwargs)
|
|
48
47
|
self.validators.append(django_personal_code_validator)
|
|
49
|
-
self.default_error_messages["invalid_format"] = "Not a valid format."
|
|
50
48
|
|
|
51
49
|
def to_internal_value(self, data: str) -> str:
|
|
52
50
|
str_personal_code = super().to_internal_value(data)
|
|
@@ -0,0 +1,42 @@
|
|
|
1
|
+
import logging
|
|
2
|
+
from logging import Logger
|
|
3
|
+
from typing import Any
|
|
4
|
+
|
|
5
|
+
from setech.utils import get_nonce
|
|
6
|
+
|
|
7
|
+
|
|
8
|
+
class NonceLogHelper:
|
|
9
|
+
def __init__(self, logger: Logger, nonce: str | None = None) -> None:
|
|
10
|
+
self.logger = logger
|
|
11
|
+
self.nonce = nonce or get_nonce()
|
|
12
|
+
|
|
13
|
+
def _log(self, level: int, msg: str, *args: Any, **kwargs: Any) -> None:
|
|
14
|
+
msg = f"[{self.nonce}] {msg}"
|
|
15
|
+
extra = kwargs.get("extra", {})
|
|
16
|
+
extra["nonce"] = self.nonce
|
|
17
|
+
kwargs["extra"] = extra
|
|
18
|
+
self.logger.log(level, msg, *args, **kwargs)
|
|
19
|
+
|
|
20
|
+
def debug(self, msg: str, *args: Any, **kwargs: Any) -> None:
|
|
21
|
+
self._log(logging.DEBUG, msg, *args, **kwargs)
|
|
22
|
+
|
|
23
|
+
def info(self, msg: str, *args: Any, **kwargs: Any) -> None:
|
|
24
|
+
self._log(logging.INFO, msg, *args, **kwargs)
|
|
25
|
+
|
|
26
|
+
def warning(self, msg: str, *args: Any, **kwargs: Any) -> None:
|
|
27
|
+
self._log(logging.WARNING, msg, *args, **kwargs)
|
|
28
|
+
|
|
29
|
+
def error(self, msg: str, *args: Any, **kwargs: Any) -> None:
|
|
30
|
+
self._log(logging.ERROR, msg, *args, **kwargs)
|
|
31
|
+
|
|
32
|
+
def critical(self, msg: str, *args: Any, **kwargs: Any) -> None:
|
|
33
|
+
self._log(logging.CRITICAL, msg, *args, **kwargs)
|
|
34
|
+
|
|
35
|
+
def exception(self, msg: str, *args: Any, **kwargs: Any) -> None:
|
|
36
|
+
self._log(logging.ERROR, msg, *args, **kwargs)
|
|
37
|
+
|
|
38
|
+
def fatal(self, msg: str, *args: Any, **kwargs: Any) -> None:
|
|
39
|
+
self._log(logging.FATAL, msg, *args, **kwargs)
|
|
40
|
+
|
|
41
|
+
def log(self, level: int, msg: str, *args: Any, **kwargs: Any) -> None:
|
|
42
|
+
self._log(level, msg, *args, **kwargs)
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|