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.
Files changed (45) hide show
  1. {setech-1.8.1 → setech-1.8.3}/PKG-INFO +2 -2
  2. {setech-1.8.1 → setech-1.8.3}/pyproject.toml +7 -7
  3. {setech-1.8.1 → setech-1.8.3}/src/setech/django/rest_framework/fields.py +2 -4
  4. setech-1.8.3/src/setech/logging/__init__.py +5 -0
  5. setech-1.8.3/src/setech/logging/logging.py +42 -0
  6. setech-1.8.1/src/setech/logging/__init__.py +0 -4
  7. {setech-1.8.1 → setech-1.8.3}/LICENCE +0 -0
  8. {setech-1.8.1 → setech-1.8.3}/README.md +0 -0
  9. {setech-1.8.1 → setech-1.8.3}/src/setech/__init__.py +0 -0
  10. {setech-1.8.1 → setech-1.8.3}/src/setech/api_client/__init__.py +0 -0
  11. {setech-1.8.1 → setech-1.8.3}/src/setech/api_client/_base.py +0 -0
  12. {setech-1.8.1 → setech-1.8.3}/src/setech/api_client/async_client.py +0 -0
  13. {setech-1.8.1 → setech-1.8.3}/src/setech/api_client/sync_client.py +0 -0
  14. {setech-1.8.1 → setech-1.8.3}/src/setech/api_client/utils.py +0 -0
  15. {setech-1.8.1 → setech-1.8.3}/src/setech/constants/__init__.py +0 -0
  16. {setech-1.8.1 → setech-1.8.3}/src/setech/constants/date.py +0 -0
  17. {setech-1.8.1 → setech-1.8.3}/src/setech/django/__init__.py +0 -0
  18. {setech-1.8.1 → setech-1.8.3}/src/setech/django/constants.py +0 -0
  19. {setech-1.8.1 → setech-1.8.3}/src/setech/django/middleware/__init__.py +0 -0
  20. {setech-1.8.1 → setech-1.8.3}/src/setech/django/middleware/request_logging.py +0 -0
  21. {setech-1.8.1 → setech-1.8.3}/src/setech/django/models.py +0 -0
  22. {setech-1.8.1 → setech-1.8.3}/src/setech/django/rest_framework/__init__.py +0 -0
  23. {setech-1.8.1 → setech-1.8.3}/src/setech/django/rest_framework/pagination.py +0 -0
  24. {setech-1.8.1 → setech-1.8.3}/src/setech/django/utils.py +0 -0
  25. {setech-1.8.1 → setech-1.8.3}/src/setech/django/validators.py +0 -0
  26. {setech-1.8.1 → setech-1.8.3}/src/setech/domain_mx_validator/__init__.py +0 -0
  27. {setech-1.8.1 → setech-1.8.3}/src/setech/domain_mx_validator/base.py +0 -0
  28. {setech-1.8.1 → setech-1.8.3}/src/setech/domain_mx_validator/memory.py +0 -0
  29. {setech-1.8.1 → setech-1.8.3}/src/setech/domain_mx_validator/redis.py +0 -0
  30. {setech-1.8.1 → setech-1.8.3}/src/setech/logging/formatters.py +0 -0
  31. {setech-1.8.1 → setech-1.8.3}/src/setech/logging/handlers.py +0 -0
  32. {setech-1.8.1 → setech-1.8.3}/src/setech/py.typed +0 -0
  33. {setech-1.8.1 → setech-1.8.3}/src/setech/utils/__init__.py +0 -0
  34. {setech-1.8.1 → setech-1.8.3}/src/setech/utils/numeric.py +0 -0
  35. {setech-1.8.1 → setech-1.8.3}/src/setech/utils/parse.py +0 -0
  36. {setech-1.8.1 → setech-1.8.3}/src/setech/utils/ssn/__init__.py +0 -0
  37. {setech-1.8.1 → setech-1.8.3}/src/setech/utils/ssn/base.py +0 -0
  38. {setech-1.8.1 → setech-1.8.3}/src/setech/utils/ssn/latvian.py +0 -0
  39. {setech-1.8.1 → setech-1.8.3}/src/setech/utils/ssn/lithuanian.py +0 -0
  40. {setech-1.8.1 → setech-1.8.3}/src/setech/utils/ssn/utils.py +0 -0
  41. {setech-1.8.1 → setech-1.8.3}/src/setech/utils/text.py +0 -0
  42. {setech-1.8.1 → setech-1.8.3}/src/setech/utils/time.py +0 -0
  43. {setech-1.8.1 → setech-1.8.3}/src/setech/utils/validators.py +0 -0
  44. {setech-1.8.1 → setech-1.8.3}/src/setech/utils/various.py +0 -0
  45. {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.1
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.12
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.1"
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"
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.12" }
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.12"
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,5 @@
1
+ from .formatters import LogJSONFormatter
2
+ from .handlers import JSONHttpPostHandler
3
+ from .logging import NonceLogHelper
4
+
5
+ __all__ = ["JSONHttpPostHandler", "LogJSONFormatter", "NonceLogHelper"]
@@ -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)
@@ -1,4 +0,0 @@
1
- from .formatters import LogJSONFormatter
2
- from .handlers import JSONHttpPostHandler
3
-
4
- __all__ = ["JSONHttpPostHandler", "LogJSONFormatter"]
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes