python-terminusgps 45.8.0__tar.gz → 46.0.0__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 (54) hide show
  1. {python_terminusgps-45.8.0 → python_terminusgps-46.0.0}/PKG-INFO +1 -1
  2. {python_terminusgps-45.8.0 → python_terminusgps-46.0.0}/docs/source/conf.py +1 -1
  3. {python_terminusgps-45.8.0 → python_terminusgps-46.0.0}/pyproject.toml +1 -1
  4. {python_terminusgps-45.8.0 → python_terminusgps-46.0.0}/terminusgps/authorizenet/service.py +10 -11
  5. {python_terminusgps-45.8.0 → python_terminusgps-46.0.0}/uv.lock +10 -10
  6. {python_terminusgps-45.8.0 → python_terminusgps-46.0.0}/.github/workflows/sphinx.yml +0 -0
  7. {python_terminusgps-45.8.0 → python_terminusgps-46.0.0}/.gitignore +0 -0
  8. {python_terminusgps-45.8.0 → python_terminusgps-46.0.0}/.python-version +0 -0
  9. {python_terminusgps-45.8.0 → python_terminusgps-46.0.0}/COPYING +0 -0
  10. {python_terminusgps-45.8.0 → python_terminusgps-46.0.0}/README.md +0 -0
  11. {python_terminusgps-45.8.0 → python_terminusgps-46.0.0}/docs/Makefile +0 -0
  12. {python_terminusgps-45.8.0 → python_terminusgps-46.0.0}/docs/make.bat +0 -0
  13. {python_terminusgps-45.8.0 → python_terminusgps-46.0.0}/docs/requirements.txt +0 -0
  14. {python_terminusgps-45.8.0 → python_terminusgps-46.0.0}/docs/source/authorizenet/api.rst +0 -0
  15. {python_terminusgps-45.8.0 → python_terminusgps-46.0.0}/docs/source/authorizenet/constants.rst +0 -0
  16. {python_terminusgps-45.8.0 → python_terminusgps-46.0.0}/docs/source/authorizenet/index.rst +0 -0
  17. {python_terminusgps-45.8.0 → python_terminusgps-46.0.0}/docs/source/authorizenet/service.rst +0 -0
  18. {python_terminusgps-45.8.0 → python_terminusgps-46.0.0}/docs/source/index.rst +0 -0
  19. {python_terminusgps-45.8.0 → python_terminusgps-46.0.0}/docs/source/mixins.rst +0 -0
  20. {python_terminusgps-45.8.0 → python_terminusgps-46.0.0}/docs/source/validators.rst +0 -0
  21. {python_terminusgps-45.8.0 → python_terminusgps-46.0.0}/docs/source/wialon/constants.rst +0 -0
  22. {python_terminusgps-45.8.0 → python_terminusgps-46.0.0}/docs/source/wialon/exceptions.rst +0 -0
  23. {python_terminusgps-45.8.0 → python_terminusgps-46.0.0}/docs/source/wialon/index.rst +0 -0
  24. {python_terminusgps-45.8.0 → python_terminusgps-46.0.0}/docs/source/wialon/items.rst +0 -0
  25. {python_terminusgps-45.8.0 → python_terminusgps-46.0.0}/docs/source/wialon/session.rst +0 -0
  26. {python_terminusgps-45.8.0 → python_terminusgps-46.0.0}/docs/source/wialon/usage.rst +0 -0
  27. {python_terminusgps-45.8.0 → python_terminusgps-46.0.0}/terminusgps/__init__.py +0 -0
  28. {python_terminusgps-45.8.0 → python_terminusgps-46.0.0}/terminusgps/authorizenet/__init__.py +0 -0
  29. {python_terminusgps-45.8.0 → python_terminusgps-46.0.0}/terminusgps/authorizenet/api/__init__.py +0 -0
  30. {python_terminusgps-45.8.0 → python_terminusgps-46.0.0}/terminusgps/authorizenet/api/address_profiles.py +0 -0
  31. {python_terminusgps-45.8.0 → python_terminusgps-46.0.0}/terminusgps/authorizenet/api/customer_profiles.py +0 -0
  32. {python_terminusgps-45.8.0 → python_terminusgps-46.0.0}/terminusgps/authorizenet/api/payment_profiles.py +0 -0
  33. {python_terminusgps-45.8.0 → python_terminusgps-46.0.0}/terminusgps/authorizenet/api/subscriptions.py +0 -0
  34. {python_terminusgps-45.8.0 → python_terminusgps-46.0.0}/terminusgps/authorizenet/api/transactions.py +0 -0
  35. {python_terminusgps-45.8.0 → python_terminusgps-46.0.0}/terminusgps/authorizenet/constants.py +0 -0
  36. {python_terminusgps-45.8.0 → python_terminusgps-46.0.0}/terminusgps/default_settings.py +0 -0
  37. {python_terminusgps-45.8.0 → python_terminusgps-46.0.0}/terminusgps/mixins.py +0 -0
  38. {python_terminusgps-45.8.0 → python_terminusgps-46.0.0}/terminusgps/validators.py +0 -0
  39. {python_terminusgps-45.8.0 → python_terminusgps-46.0.0}/terminusgps/wialon/__init__.py +0 -0
  40. {python_terminusgps-45.8.0 → python_terminusgps-46.0.0}/terminusgps/wialon/constants.py +0 -0
  41. {python_terminusgps-45.8.0 → python_terminusgps-46.0.0}/terminusgps/wialon/flags.py +0 -0
  42. {python_terminusgps-45.8.0 → python_terminusgps-46.0.0}/terminusgps/wialon/items/__init__.py +0 -0
  43. {python_terminusgps-45.8.0 → python_terminusgps-46.0.0}/terminusgps/wialon/items/account.py +0 -0
  44. {python_terminusgps-45.8.0 → python_terminusgps-46.0.0}/terminusgps/wialon/items/base.py +0 -0
  45. {python_terminusgps-45.8.0 → python_terminusgps-46.0.0}/terminusgps/wialon/items/factory.py +0 -0
  46. {python_terminusgps-45.8.0 → python_terminusgps-46.0.0}/terminusgps/wialon/items/resource.py +0 -0
  47. {python_terminusgps-45.8.0 → python_terminusgps-46.0.0}/terminusgps/wialon/items/retranslator.py +0 -0
  48. {python_terminusgps-45.8.0 → python_terminusgps-46.0.0}/terminusgps/wialon/items/route.py +0 -0
  49. {python_terminusgps-45.8.0 → python_terminusgps-46.0.0}/terminusgps/wialon/items/unit.py +0 -0
  50. {python_terminusgps-45.8.0 → python_terminusgps-46.0.0}/terminusgps/wialon/items/unit_group.py +0 -0
  51. {python_terminusgps-45.8.0 → python_terminusgps-46.0.0}/terminusgps/wialon/items/user.py +0 -0
  52. {python_terminusgps-45.8.0 → python_terminusgps-46.0.0}/terminusgps/wialon/session.py +0 -0
  53. {python_terminusgps-45.8.0 → python_terminusgps-46.0.0}/terminusgps/wialon/utils.py +0 -0
  54. {python_terminusgps-45.8.0 → python_terminusgps-46.0.0}/terminusgps/wialon/validators.py +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: python-terminusgps
3
- Version: 45.8.0
3
+ Version: 46.0.0
4
4
  Summary: Provides abstractions/utilities for working with Wialon API, Authorize.NET API, AWS API, and more.
5
5
  Project-URL: Documentation, https://terminusgps.github.io/python-terminusgps
6
6
  Project-URL: Repository, https://github.com/terminusgps/python-terminusgps
@@ -12,7 +12,7 @@ sys.path.insert(0, os.path.abspath("../../"))
12
12
  project = "python-terminusgps"
13
13
  copyright = "2025, Terminus GPS, LLC"
14
14
  author = "Terminus GPS, LLC"
15
- release = "45.8.0"
15
+ release = "46.0.0"
16
16
 
17
17
  # -- General configuration ---------------------------------------------------
18
18
  # https://www.sphinx-doc.org/en/master/usage/configuration.html#general-configuration
@@ -1,6 +1,6 @@
1
1
  [project]
2
2
  name = "python-terminusgps"
3
- version = "45.8.0"
3
+ version = "46.0.0"
4
4
  description = "Provides abstractions/utilities for working with Wialon API, Authorize.NET API, AWS API, and more."
5
5
  readme = "README.md"
6
6
  authors = [ {name = "Blake Nall", email = "blake@terminusgps.com" } ]
@@ -1,3 +1,4 @@
1
+ from abc import ABC
1
2
  from functools import cached_property
2
3
 
3
4
  from authorizenet.apicontractsv1 import merchantAuthenticationType
@@ -34,8 +35,8 @@ class AuthorizenetControllerExecutionError(Exception):
34
35
  return self._code
35
36
 
36
37
 
37
- class AuthorizenetService:
38
- """A service for safely interacting with the Authorizenet API."""
38
+ class AuthorizenetService(ABC):
39
+ """Base service for safely interacting with the Authorizenet API."""
39
40
 
40
41
  REQUIRED_SETTINGS = (
41
42
  "MERCHANT_AUTH_ENVIRONMENT",
@@ -50,21 +51,18 @@ class AuthorizenetService:
50
51
  if not hasattr(settings, setting):
51
52
  raise ImproperlyConfigured(f"'{setting}' setting is required.")
52
53
 
53
- def call_api(
54
+ def execute(
54
55
  self,
55
- request: ObjectifiedElement,
56
- controller_cls: type[APIOperationBase],
56
+ request_tuple: tuple[ObjectifiedElement, type[APIOperationBase]],
57
57
  reference_id: str | None = None,
58
58
  ) -> ObjectifiedElement:
59
59
  """
60
- Adds required authentication data to the request before executing it and returning its response.
60
+ Adds required authentication data to the Authorizenet API request before executing it and returning its response.
61
61
 
62
62
  If ``reference_id`` was provided, it is added to the request before execution.
63
63
 
64
- :param request: An Authorizenet API request element.
65
- :type request: ~lxml.objectify.ObjectifiedElement
66
- :param controller_cls: An Authorizenet controller class.
67
- :type controller_cls: type[~authorizenet.apicontrollersbase.APIOperationBase]
64
+ :param request_tuple: A tuple containing an Authorizenet API request contract and a controller class to execute it with.
65
+ :type request_tuple: tuple[~lxml.objectify.ObjectifiedElement, type[~authorizenet.apicontrollersbase.APIOperationBase]]
68
66
  :param reference_id: An optional reference id string for the API call. Default is :py:obj:`None`.
69
67
  :type reference_id: str | None
70
68
  :raises AuthorizenetControllerExecutionError: If the API call failed.
@@ -72,6 +70,7 @@ class AuthorizenetService:
72
70
  :rtype: ~lxml.objectify.ObjectifiedElement
73
71
 
74
72
  """
73
+ request, controller_cls = request_tuple[0], request_tuple[1]
75
74
  request.merchantAuthentication = self.merchantAuthentication
76
75
  if reference_id is not None:
77
76
  request.refId = reference_id
@@ -79,8 +78,8 @@ class AuthorizenetService:
79
78
  controller = controller_cls(request)
80
79
  controller.setenvironment(self.environment)
81
80
  controller.execute()
81
+ response = controller.getresponse()
82
82
 
83
- response: ObjectifiedElement | None = controller.getresponse()
84
83
  if response is None:
85
84
  raise AuthorizenetControllerExecutionError(
86
85
  message="No response from the Authorizenet API controller.",
@@ -142,7 +142,7 @@ wheels = [
142
142
 
143
143
  [[package]]
144
144
  name = "django-stubs"
145
- version = "5.2.4"
145
+ version = "5.2.5"
146
146
  source = { registry = "https://pypi.org/simple" }
147
147
  dependencies = [
148
148
  { name = "django" },
@@ -150,22 +150,22 @@ dependencies = [
150
150
  { name = "types-pyyaml" },
151
151
  { name = "typing-extensions" },
152
152
  ]
153
- sdist = { url = "https://files.pythonhosted.org/packages/fd/71/430901a1a799e1e66bb169a28e48a5f7b6e4ad5d6cadf60d9319d44b4181/django_stubs-5.2.4.tar.gz", hash = "sha256:89e1493d57ed091fdc990bf625bde77088e8660fcf6a3cdf0faf68e33c11c79b", size = 247751 }
153
+ sdist = { url = "https://files.pythonhosted.org/packages/e1/8e/286150f593481c33f54d14efb58d72178f159d57d31043529d38bbc98e2f/django_stubs-5.2.5.tar.gz", hash = "sha256:fc78384e28d8c5292d60983075a5934f644f7c304c25ae2793fc57aa66d5018b", size = 247794 }
154
154
  wheels = [
155
- { url = "https://files.pythonhosted.org/packages/e0/0a/6e1326888d2a8b5f390a28b543a9766105bff573641bbfd7edc7394ab5fe/django_stubs-5.2.4-py3-none-any.whl", hash = "sha256:000d59e826a15b032070d4b1b7f95b281005d690493173b95837c4c07b68dcf6", size = 490115 },
155
+ { url = "https://files.pythonhosted.org/packages/2f/02/cdbf7652ef2c9a7a1fed7c279484b7f3806f15b1bb34aec9fef8e8cfacbf/django_stubs-5.2.5-py3-none-any.whl", hash = "sha256:223c1a3324cd4873b7629dec6e9adbe224a94508284c1926b25fddff7a92252b", size = 490196 },
156
156
  ]
157
157
 
158
158
  [[package]]
159
159
  name = "django-stubs-ext"
160
- version = "5.2.4"
160
+ version = "5.2.5"
161
161
  source = { registry = "https://pypi.org/simple" }
162
162
  dependencies = [
163
163
  { name = "django" },
164
164
  { name = "typing-extensions" },
165
165
  ]
166
- sdist = { url = "https://files.pythonhosted.org/packages/63/9a/d3554928fca79bc8e28dccb7f9c410c132667a47a216b53850c268a94114/django_stubs_ext-5.2.4.tar.gz", hash = "sha256:920bb81c1fbf95b8882db7dcd3fff2d851a3c01d49aef9c7b5d79da40ff39fe6", size = 6488 }
166
+ sdist = { url = "https://files.pythonhosted.org/packages/16/94/c9b8f4c47084a0fa666da9066c36771098101932688adf2c17a40fab79c2/django_stubs_ext-5.2.5.tar.gz", hash = "sha256:ecc628df29d36cede638567c4e33ff485dd7a99f1552ad0cece8c60e9c3a8872", size = 6489 }
167
167
  wheels = [
168
- { url = "https://files.pythonhosted.org/packages/59/20/4595270c02c5763ff751dab83df148f606de3738a236a4c961c71df7c005/django_stubs_ext-5.2.4-py3-none-any.whl", hash = "sha256:e539cb40c5281f291c285ba7ecd704e70343d8f610f13629c2b1521454364d1b", size = 9307 },
168
+ { url = "https://files.pythonhosted.org/packages/e0/fe/a85a105fddffadb4a8d50e500caeee87d836b679d51a19d52dfa0cc6c660/django_stubs_ext-5.2.5-py3-none-any.whl", hash = "sha256:9b4b8ac9d32f7e6c304fd05477f8688fae6ed57f6a0f9f4d074f9e55b5a3da14", size = 9310 },
169
169
  ]
170
170
 
171
171
  [[package]]
@@ -298,7 +298,7 @@ wheels = [
298
298
 
299
299
  [[package]]
300
300
  name = "python-terminusgps"
301
- version = "45.8.0"
301
+ version = "46.0.0"
302
302
  source = { editable = "." }
303
303
  dependencies = [
304
304
  { name = "authorizenet" },
@@ -536,11 +536,11 @@ wheels = [
536
536
 
537
537
  [[package]]
538
538
  name = "types-pyyaml"
539
- version = "6.0.12.20250822"
539
+ version = "6.0.12.20250915"
540
540
  source = { registry = "https://pypi.org/simple" }
541
- sdist = { url = "https://files.pythonhosted.org/packages/49/85/90a442e538359ab5c9e30de415006fb22567aa4301c908c09f19e42975c2/types_pyyaml-6.0.12.20250822.tar.gz", hash = "sha256:259f1d93079d335730a9db7cff2bcaf65d7e04b4a56b5927d49a612199b59413", size = 17481 }
541
+ sdist = { url = "https://files.pythonhosted.org/packages/7e/69/3c51b36d04da19b92f9e815be12753125bd8bc247ba0470a982e6979e71c/types_pyyaml-6.0.12.20250915.tar.gz", hash = "sha256:0f8b54a528c303f0e6f7165687dd33fafa81c807fcac23f632b63aa624ced1d3", size = 17522 }
542
542
  wheels = [
543
- { url = "https://files.pythonhosted.org/packages/32/8e/8f0aca667c97c0d76024b37cffa39e76e2ce39ca54a38f285a64e6ae33ba/types_pyyaml-6.0.12.20250822-py3-none-any.whl", hash = "sha256:1fe1a5e146aa315483592d292b72a172b65b946a6d98aa6ddd8e4aa838ab7098", size = 20314 },
543
+ { url = "https://files.pythonhosted.org/packages/bd/e0/1eed384f02555dde685fff1a1ac805c1c7dcb6dd019c916fe659b1c1f9ec/types_pyyaml-6.0.12.20250915-py3-none-any.whl", hash = "sha256:e7d4d9e064e89a3b3cae120b4990cd370874d2bf12fa5f46c97018dd5d3c9ab6", size = 20338 },
544
544
  ]
545
545
 
546
546
  [[package]]