python-terminusgps 1.5.6__tar.gz → 1.5.7__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.

Potentially problematic release.


This version of python-terminusgps might be problematic. Click here for more details.

Files changed (29) hide show
  1. {python_terminusgps-1.5.6 → python_terminusgps-1.5.7}/PKG-INFO +2 -2
  2. {python_terminusgps-1.5.6 → python_terminusgps-1.5.7}/pyproject.toml +2 -2
  3. python_terminusgps-1.5.7/terminusgps/wialon/errors.py +53 -0
  4. python_terminusgps-1.5.7/terminusgps/wialon/items/retranslator.py +117 -0
  5. {python_terminusgps-1.5.6 → python_terminusgps-1.5.7}/terminusgps/wialon/session.py +46 -26
  6. {python_terminusgps-1.5.6 → python_terminusgps-1.5.7}/uv.lock +54 -58
  7. python_terminusgps-1.5.6/terminusgps/wialon/errors.py +0 -35
  8. python_terminusgps-1.5.6/terminusgps/wialon/items/retranslator.py +0 -22
  9. {python_terminusgps-1.5.6 → python_terminusgps-1.5.7}/.gitignore +0 -0
  10. {python_terminusgps-1.5.6 → python_terminusgps-1.5.7}/COPYING +0 -0
  11. {python_terminusgps-1.5.6 → python_terminusgps-1.5.7}/README.md +0 -0
  12. {python_terminusgps-1.5.6 → python_terminusgps-1.5.7}/requirements.txt +0 -0
  13. {python_terminusgps-1.5.6 → python_terminusgps-1.5.7}/terminusgps/__init__.py +0 -0
  14. {python_terminusgps-1.5.6 → python_terminusgps-1.5.7}/terminusgps/authorizenet/__init__.py +0 -0
  15. {python_terminusgps-1.5.6 → python_terminusgps-1.5.7}/terminusgps/authorizenet/auth.py +0 -0
  16. {python_terminusgps-1.5.6 → python_terminusgps-1.5.7}/terminusgps/aws/__init__.py +0 -0
  17. {python_terminusgps-1.5.6 → python_terminusgps-1.5.7}/terminusgps/aws/secrets.py +0 -0
  18. {python_terminusgps-1.5.6 → python_terminusgps-1.5.7}/terminusgps/settings.py +0 -0
  19. {python_terminusgps-1.5.6 → python_terminusgps-1.5.7}/terminusgps/wialon/__init__.py +0 -0
  20. {python_terminusgps-1.5.6 → python_terminusgps-1.5.7}/terminusgps/wialon/constants.py +0 -0
  21. {python_terminusgps-1.5.6 → python_terminusgps-1.5.7}/terminusgps/wialon/flags.py +0 -0
  22. {python_terminusgps-1.5.6 → python_terminusgps-1.5.7}/terminusgps/wialon/items/__init__.py +0 -0
  23. {python_terminusgps-1.5.6 → python_terminusgps-1.5.7}/terminusgps/wialon/items/base.py +0 -0
  24. {python_terminusgps-1.5.6 → python_terminusgps-1.5.7}/terminusgps/wialon/items/resource.py +0 -0
  25. {python_terminusgps-1.5.6 → python_terminusgps-1.5.7}/terminusgps/wialon/items/route.py +0 -0
  26. {python_terminusgps-1.5.6 → python_terminusgps-1.5.7}/terminusgps/wialon/items/unit.py +0 -0
  27. {python_terminusgps-1.5.6 → python_terminusgps-1.5.7}/terminusgps/wialon/items/unit_group.py +0 -0
  28. {python_terminusgps-1.5.6 → python_terminusgps-1.5.7}/terminusgps/wialon/items/user.py +0 -0
  29. {python_terminusgps-1.5.6 → python_terminusgps-1.5.7}/terminusgps/wialon/utils.py +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: python-terminusgps
3
- Version: 1.5.6
3
+ Version: 1.5.7
4
4
  Summary: Provides abstractions/utilities for working with Wialon API, Authorize.NET API, AWS API, and more.
5
5
  Project-URL: Documentation, https://app.terminusgps.com/docs/apps/python-terminusgps/index.html
6
6
  Project-URL: Repository, https://github.com/terminusgps/python-terminusgps
@@ -15,5 +15,5 @@ Requires-Python: >=3.12
15
15
  Requires-Dist: argparse>=1.4.0
16
16
  Requires-Dist: authorizenet>=1.1.5
17
17
  Requires-Dist: boto3>=1.34.144
18
- Requires-Dist: django>=5.1.4
18
+ Requires-Dist: django>=5.1.5
19
19
  Requires-Dist: python-wialon>=1.2.4
@@ -1,6 +1,6 @@
1
1
  [project]
2
2
  name = "python-terminusgps"
3
- version = "1.5.6"
3
+ version = "1.5.7"
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" } ]
@@ -16,7 +16,7 @@ dependencies = [
16
16
  "argparse>=1.4.0",
17
17
  "authorizenet>=1.1.5",
18
18
  "boto3>=1.34.144",
19
- "django>=5.1.4",
19
+ "django>=5.1.5",
20
20
  "python-wialon>=1.2.4",
21
21
  ]
22
22
 
@@ -0,0 +1,53 @@
1
+ from wialon.api import WialonError
2
+
3
+
4
+ class WialonBaseError(Exception):
5
+ def __init__(
6
+ self, message: str, wialon_err: WialonError | AssertionError | None = None
7
+ ) -> None:
8
+ self.wialon_err = wialon_err
9
+ return super().__init__(message)
10
+
11
+
12
+ class WialonLoginError(WialonBaseError):
13
+ def __init__(
14
+ self, token: str | None, wialon_err: WialonError | AssertionError | None = None
15
+ ) -> None:
16
+ message = f"Failed to login to the Wialon API using token: '{token}'\n"
17
+ if wialon_err:
18
+ message += str(wialon_err)
19
+ return super().__init__(message, wialon_err)
20
+
21
+
22
+ class WialonSessionDuplicationError(WialonBaseError):
23
+ def __init__(
24
+ self,
25
+ session_id: str | None,
26
+ wialon_err: WialonError | AssertionError | None = None,
27
+ ) -> None:
28
+ message = f"Failed to duplicate the Wialon session: '#{session_id}'\n"
29
+ if wialon_err:
30
+ message += str(wialon_err)
31
+ return super().__init__(message, wialon_err)
32
+
33
+
34
+ class WialonLogoutError(WialonBaseError):
35
+ def __init__(
36
+ self, session_id: str, wialon_err: WialonError | AssertionError | None = None
37
+ ) -> None:
38
+ message = f"Failed to logout of the Wialon API session: '{session_id}'\n"
39
+ if wialon_err:
40
+ message += str(wialon_err)
41
+ return super().__init__(message, wialon_err)
42
+
43
+
44
+ class WialonSessionInvalidError(WialonBaseError):
45
+ def __init__(
46
+ self,
47
+ session_id: str | None,
48
+ wialon_err: WialonError | AssertionError | None = None,
49
+ ) -> None:
50
+ message = f"The session was invalid/expired: '{session_id}'\n"
51
+ if wialon_err:
52
+ message += str(wialon_err)
53
+ return super().__init__(message, wialon_err)
@@ -0,0 +1,117 @@
1
+ from terminusgps.wialon import flags
2
+ from terminusgps.wialon.items.base import WialonBase
3
+
4
+
5
+ class WialonRetranslator(WialonBase):
6
+ def create(self, **kwargs) -> int | None:
7
+ """
8
+ Creates a Wialon retranslator.
9
+
10
+ :param creator_id: A Wialon user that will create the retranslator.
11
+ :type creator_id: :py:obj:`str`
12
+ :param name: A name for the new retranslator.
13
+ :type name: :py:obj:`str`
14
+ :param config: A Wialon retranslator configuration object.
15
+ :type config: :py:obj:`dict`
16
+ :raises ValueError: If a required parameter was not provided.
17
+ :raises WialonError: If something went wrong with Wialon.
18
+ :returns: Nothing.
19
+ :rtype: :py:obj:`None`
20
+
21
+ """
22
+ if not kwargs.get("creator_id"):
23
+ raise ValueError("'creator_id' is required on creation.")
24
+ if not kwargs.get("name"):
25
+ raise ValueError("'name' is required on creation.")
26
+ if not kwargs.get("config"):
27
+ raise ValueError("'config' is required on creation.")
28
+
29
+ response = self.session.wialon_api.core_create_retranslator(
30
+ **{
31
+ "creatorId": kwargs["creator_id"],
32
+ "name": kwargs["name"],
33
+ "config": kwargs["config"],
34
+ "dataFlags": flags.DATAFLAG_UNIT_BASE,
35
+ }
36
+ )
37
+ return response.get("item", {}).get("id")
38
+
39
+ def update_config(self, new_config: dict) -> None:
40
+ """
41
+ Updates the retranslator config to the new config.
42
+
43
+ :param new_config: A Wialon retranslator configuration.
44
+ :type units: :py:obj:`dict`
45
+ :raises WialonError: If something went wrong with Wialon.
46
+ :returns: Nothing.
47
+ :rtype: :py:obj:`None`
48
+
49
+ """
50
+ self.session.wialon_api.retranslator_update_config(
51
+ **{"itemId": self.id, "config": new_config}
52
+ )
53
+
54
+ def add_units(self, units: list[WialonBase]) -> None:
55
+ """
56
+ Adds a list of units to the Wialon retranslator.
57
+
58
+ :param units: A list of Wialon unit objects.
59
+ :type units: :py:obj:`list`
60
+ :raises WialonError: If something went wrong with Wialon.
61
+ :returns: Nothing.
62
+ :rtype: :py:obj:`None`
63
+
64
+ """
65
+ self.session.wialon_api.retranslator_update_units(
66
+ **{
67
+ "itemId": self.id,
68
+ "units": [{"a": unit.id, "i": unit.hw_type} for unit in units],
69
+ "callMode": "add",
70
+ }
71
+ )
72
+
73
+ def rm_units(self, units: list[WialonBase]) -> None:
74
+ """
75
+
76
+ Naively removes a list of units from the Wialon retranslator.
77
+
78
+ :param units: A list of Wialon unit objects.
79
+ :type units: :py:obj:`list`
80
+ :raises WialonError: If something went wrong with Wialon.
81
+ :returns: Nothing.
82
+ :rtype: :py:obj:`None`
83
+
84
+ """
85
+ self.session.wialon_api.retranslator_update_units(
86
+ **{
87
+ "itemId": self.id,
88
+ "units": [{"a": unit.id, "i": unit.hw_type} for unit in units],
89
+ "callMode": "remove",
90
+ }
91
+ )
92
+
93
+ def start(self, stop: int | None = None) -> None:
94
+ """
95
+ Starts the Wialon retranslator.
96
+
97
+ :raises WialonError: If something went wrong with Wialon.
98
+ :returns: Nothing.
99
+ :rtype: :py:obj:`None`
100
+
101
+ """
102
+ self.session.wialon_api.retranslator_update_operating(
103
+ **{"itemId": self.id, "operate": int(True), "stopTime": stop}
104
+ )
105
+
106
+ def stop(self) -> None:
107
+ """
108
+ Stops the Wialon retranslator.
109
+
110
+ :raises WialonError: If something went wrong with Wialon.
111
+ :returns: Nothing.
112
+ :rtype: :py:obj:`None`
113
+
114
+ """
115
+ self.session.wialon_api.retranslator_update_operating(
116
+ **{"itemId": self.id, "operate": int(False)}
117
+ )
@@ -2,7 +2,12 @@ from wialon.api import Wialon, WialonError
2
2
  from django.conf import settings
3
3
  from django.core.exceptions import ImproperlyConfigured
4
4
 
5
- from .errors import WialonLogoutError, WialonLoginError, WialonSessionDuplicationError
5
+ from .errors import (
6
+ WialonLogoutError,
7
+ WialonLoginError,
8
+ WialonSessionDuplicationError,
9
+ WialonSessionInvalidError,
10
+ )
6
11
 
7
12
 
8
13
  class WialonSession:
@@ -32,7 +37,6 @@ class WialonSession:
32
37
  raise ImproperlyConfigured("'WIALON_ADMIN_ID' setting is required.")
33
38
 
34
39
  self.wialon_api = Wialon(scheme=scheme, host=host, port=port, sid=sid)
35
- self.active = bool(sid)
36
40
  self.token = token
37
41
  self._username = None
38
42
  self._gis_sid = None
@@ -48,6 +52,24 @@ class WialonSession:
48
52
  def __exit__(self, *args, **kwargs) -> None:
49
53
  self.logout()
50
54
 
55
+ @property
56
+ def active(self) -> bool:
57
+ """
58
+ Whether or not the Wialon session is currently active.
59
+
60
+ :type: :py:obj:`bool`
61
+ :value: :py:obj:`False`
62
+ """
63
+ is_active = False
64
+
65
+ try:
66
+ response = self.wialon_api.core_duplicate(**{"restore": 1})
67
+ is_active = bool(response)
68
+ except WialonError as e:
69
+ raise WialonSessionInvalidError(self.id, e)
70
+ finally:
71
+ return is_active
72
+
51
73
  @property
52
74
  def gis_geocode(self) -> str | None:
53
75
  """
@@ -198,32 +220,31 @@ class WialonSession:
198
220
  def token(self, value: str | None = None) -> None:
199
221
  self._token = value if value else settings.WIALON_TOKEN
200
222
 
201
- def duplicate(
202
- self, user_id: str | None = None, continue_session: bool = False
203
- ) -> None:
223
+ def duplicate(self, username: str | None = None, continued: bool = False) -> str:
204
224
  """
205
225
  Duplicates the active Wialon API session.
206
226
 
207
- :param user_id: A Wialon user to operate as in the session.
208
- :type user_id: :py:obj:`str` | :py:obj:`None`
227
+ :param username: A Wialon user to operate as in the session.
228
+ :type username: :py:obj:`str` | :py:obj:`None`
209
229
  :param continue_session: Whether or not the original session id should be valid after duplication.
210
230
  :type continue_session: :py:obj:`bool`
211
231
  :raises WialonSessionDuplicationError: If the Wialon session was not duplicated.
212
- :returns: Nothing.
213
- :rtype: :py:obj:`None`
232
+ :raises AssertionError: If the session was already active.
233
+ :returns: The new session id.
234
+ :rtype: :py:obj:`str`
214
235
 
215
236
  """
216
237
  try:
217
- login_response = self.wialon_api.core_duplicate(
218
- **{"operateAs": user_id, "continueCurrentSession": continue_session}
238
+ assert self.active, "Cannot duplicate an inactive session."
239
+ response = self.wialon_api.core_duplicate(
240
+ **{"operateAs": username, "continueCurrentSession": continued}
219
241
  )
220
- except WialonError as e:
242
+ self._set_login_response(response)
243
+ return response.get("eid")
244
+ except (WialonError, AssertionError) as e:
221
245
  raise WialonSessionDuplicationError(self.id, e)
222
- else:
223
- self._set_login_response(login_response)
224
- self.active = True
225
246
 
226
- def login(self, token: str, flags: int = sum([0x1, 0x2, 0x20])) -> None:
247
+ def login(self, token: str, flags: int = sum([0x1, 0x2, 0x20])) -> str:
227
248
  """
228
249
  Logs into the Wialon API and starts a new session.
229
250
 
@@ -235,18 +256,17 @@ class WialonSession:
235
256
  :type flags: :py:obj:`int`
236
257
  :raises WialonLoginError: If the login fails.
237
258
  :raises AssertionError: If the session was already active.
238
- :returns: Nothing.
239
- :rtype: :py:obj:`None`
259
+ :returns: The new session id.
260
+ :rtype: :py:obj:`str`
240
261
 
241
262
  """
242
- assert not self.active, "Cannot login to an active session."
243
263
  try:
264
+ assert not self.active, "Cannot login to an active session."
244
265
  response = self.wialon_api.token_login(**{"token": token, "fl": flags})
245
- except WialonError as e:
246
- raise WialonLoginError(token, e)
247
- else:
248
266
  self._set_login_response(response)
249
- self.active = True
267
+ return response.get("eid")
268
+ except (WialonError, AssertionError) as e:
269
+ raise WialonLoginError(token, e)
250
270
 
251
271
  def logout(self) -> None:
252
272
  """
@@ -265,7 +285,7 @@ class WialonSession:
265
285
  """
266
286
  Sets the Wialon API session's attributes based on a login response.
267
287
 
268
- :param login_response: A Wialon API response to :py:meth:`login`.
288
+ :param login_response: A response returned from :py:meth:`login` or :py:meth:`duplicate`.
269
289
  :type login_response: :py:obj:`dict`
270
290
  :returns: Nothing.
271
291
  :rtype: :py:obj:`None`
@@ -289,8 +309,8 @@ class WialonSession:
289
309
 
290
310
  def main() -> None:
291
311
  session = WialonSession()
292
- session.login(settings.WIALON_TOKEN)
293
- session.duplicate(user_id="28944309")
312
+ session.login(token=settings.WIALON_TOKEN)
313
+ session.duplicate(username="chrissyron@gmail.com", continued=False)
294
314
  session.logout()
295
315
  return
296
316
 
@@ -50,78 +50,74 @@ wheels = [
50
50
 
51
51
  [[package]]
52
52
  name = "boto3"
53
- version = "1.35.80"
53
+ version = "1.36.2"
54
54
  source = { registry = "https://pypi.org/simple" }
55
55
  dependencies = [
56
56
  { name = "botocore" },
57
57
  { name = "jmespath" },
58
58
  { name = "s3transfer" },
59
59
  ]
60
- sdist = { url = "https://files.pythonhosted.org/packages/81/cd/58de9a4e792176bca4f2e4b4248a9db4a47ae217bc20ac6adb3052b029d3/boto3-1.35.80.tar.gz", hash = "sha256:50dae461ab5fbedfb81b690895d48a918fed0d5fdff37be1c4232770c0dc9712", size = 111009 }
60
+ sdist = { url = "https://files.pythonhosted.org/packages/3a/e9/c0b2fa75efc4007ea1af21bc2fcbedf6e545c517fb90904d7f59850e02bf/boto3-1.36.2.tar.gz", hash = "sha256:fde1c29996b77274a60b7bc9f741525afa6267bb1716eb644a764fb7c124a0d2", size = 110998 }
61
61
  wheels = [
62
- { url = "https://files.pythonhosted.org/packages/0a/72/f6724a19acaac7a7cdfc088ac95d2d0ea3626c00d5a5197a99e49bde474d/boto3-1.35.80-py3-none-any.whl", hash = "sha256:21a3b18c3a7fd20e463708fe3fa035983105dc7f3a1c274e1903e1583ab91159", size = 139179 },
62
+ { url = "https://files.pythonhosted.org/packages/17/c2/72a92794237b43f64141e156bc3a58bc36d18631f1a614e1e97a48b56447/boto3-1.36.2-py3-none-any.whl", hash = "sha256:76cfc9a705be46e8d22607efacc8d688c064f923d785a01c00b28e9a96425d1a", size = 139166 },
63
63
  ]
64
64
 
65
65
  [[package]]
66
66
  name = "botocore"
67
- version = "1.35.80"
67
+ version = "1.36.2"
68
68
  source = { registry = "https://pypi.org/simple" }
69
69
  dependencies = [
70
70
  { name = "jmespath" },
71
71
  { name = "python-dateutil" },
72
72
  { name = "urllib3" },
73
73
  ]
74
- sdist = { url = "https://files.pythonhosted.org/packages/81/e3/b10f8c2c58fd144d99de10e5f964bd1b0e609d27cb05513bebfdfa47e3eb/botocore-1.35.80.tar.gz", hash = "sha256:b8dfceca58891cb2711bd6455ec4f7159051f3796e0f64adef9bb334f19d8a92", size = 13456944 }
74
+ sdist = { url = "https://files.pythonhosted.org/packages/c6/93/353b70cea6447e37789fc2d6f761fc12ae36fb4adb6f558055de8cdf655f/botocore-1.36.2.tar.gz", hash = "sha256:a1fe6610983f0214b0c7655fe6990b6a731746baf305b182976fc7b568fc3cb0", size = 13505440 }
75
75
  wheels = [
76
- { url = "https://files.pythonhosted.org/packages/f6/cc/7ecef0f0e883f4bd8e23a04e86d98f8c7d6aa6a821efcec67b3547388d2e/botocore-1.35.80-py3-none-any.whl", hash = "sha256:36e589dccb62380abd628b08fecfa2f7c89b99f41ec9fc42c467c94008c0be4a", size = 13263229 },
76
+ { url = "https://files.pythonhosted.org/packages/0c/fe/c066e8cb069027c12dbcf9066a7a4f3e9d2a31b10c7b174a8455ef1d0f46/botocore-1.36.2-py3-none-any.whl", hash = "sha256:bc3b7e3b573a48af2bd7116b80fe24f9a335b0b67314dcb2697a327d009abf29", size = 13302324 },
77
77
  ]
78
78
 
79
79
  [[package]]
80
80
  name = "certifi"
81
- version = "2024.8.30"
81
+ version = "2024.12.14"
82
82
  source = { registry = "https://pypi.org/simple" }
83
- sdist = { url = "https://files.pythonhosted.org/packages/b0/ee/9b19140fe824b367c04c5e1b369942dd754c4c5462d5674002f75c4dedc1/certifi-2024.8.30.tar.gz", hash = "sha256:bec941d2aa8195e248a60b31ff9f0558284cf01a52591ceda73ea9afffd69fd9", size = 168507 }
83
+ sdist = { url = "https://files.pythonhosted.org/packages/0f/bd/1d41ee578ce09523c81a15426705dd20969f5abf006d1afe8aeff0dd776a/certifi-2024.12.14.tar.gz", hash = "sha256:b650d30f370c2b724812bee08008be0c4163b163ddaec3f2546c1caf65f191db", size = 166010 }
84
84
  wheels = [
85
- { url = "https://files.pythonhosted.org/packages/12/90/3c9ff0512038035f59d279fddeb79f5f1eccd8859f06d6163c58798b9487/certifi-2024.8.30-py3-none-any.whl", hash = "sha256:922820b53db7a7257ffbda3f597266d435245903d80737e34f8a45ff3e3230d8", size = 167321 },
85
+ { url = "https://files.pythonhosted.org/packages/a5/32/8f6669fc4798494966bf446c8c4a162e0b5d893dff088afddf76414f70e1/certifi-2024.12.14-py3-none-any.whl", hash = "sha256:1275f7a45be9464efc1173084eaa30f866fe2e47d389406136d332ed4967ec56", size = 164927 },
86
86
  ]
87
87
 
88
88
  [[package]]
89
89
  name = "charset-normalizer"
90
- version = "3.4.0"
91
- source = { registry = "https://pypi.org/simple" }
92
- sdist = { url = "https://files.pythonhosted.org/packages/f2/4f/e1808dc01273379acc506d18f1504eb2d299bd4131743b9fc54d7be4df1e/charset_normalizer-3.4.0.tar.gz", hash = "sha256:223217c3d4f82c3ac5e29032b3f1c2eb0fb591b72161f86d93f5719079dae93e", size = 106620 }
93
- wheels = [
94
- { url = "https://files.pythonhosted.org/packages/d3/0b/4b7a70987abf9b8196845806198975b6aab4ce016632f817ad758a5aa056/charset_normalizer-3.4.0-cp312-cp312-macosx_10_13_universal2.whl", hash = "sha256:0713f3adb9d03d49d365b70b84775d0a0d18e4ab08d12bc46baa6132ba78aaf6", size = 194445 },
95
- { url = "https://files.pythonhosted.org/packages/50/89/354cc56cf4dd2449715bc9a0f54f3aef3dc700d2d62d1fa5bbea53b13426/charset_normalizer-3.4.0-cp312-cp312-macosx_10_13_x86_64.whl", hash = "sha256:de7376c29d95d6719048c194a9cf1a1b0393fbe8488a22008610b0361d834ecf", size = 125275 },
96
- { url = "https://files.pythonhosted.org/packages/fa/44/b730e2a2580110ced837ac083d8ad222343c96bb6b66e9e4e706e4d0b6df/charset_normalizer-3.4.0-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:4a51b48f42d9358460b78725283f04bddaf44a9358197b889657deba38f329db", size = 119020 },
97
- { url = "https://files.pythonhosted.org/packages/9d/e4/9263b8240ed9472a2ae7ddc3e516e71ef46617fe40eaa51221ccd4ad9a27/charset_normalizer-3.4.0-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:b295729485b06c1a0683af02a9e42d2caa9db04a373dc38a6a58cdd1e8abddf1", size = 139128 },
98
- { url = "https://files.pythonhosted.org/packages/6b/e3/9f73e779315a54334240353eaea75854a9a690f3f580e4bd85d977cb2204/charset_normalizer-3.4.0-cp312-cp312-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:ee803480535c44e7f5ad00788526da7d85525cfefaf8acf8ab9a310000be4b03", size = 149277 },
99
- { url = "https://files.pythonhosted.org/packages/1a/cf/f1f50c2f295312edb8a548d3fa56a5c923b146cd3f24114d5adb7e7be558/charset_normalizer-3.4.0-cp312-cp312-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:3d59d125ffbd6d552765510e3f31ed75ebac2c7470c7274195b9161a32350284", size = 142174 },
100
- { url = "https://files.pythonhosted.org/packages/16/92/92a76dc2ff3a12e69ba94e7e05168d37d0345fa08c87e1fe24d0c2a42223/charset_normalizer-3.4.0-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:8cda06946eac330cbe6598f77bb54e690b4ca93f593dee1568ad22b04f347c15", size = 143838 },
101
- { url = "https://files.pythonhosted.org/packages/a4/01/2117ff2b1dfc61695daf2babe4a874bca328489afa85952440b59819e9d7/charset_normalizer-3.4.0-cp312-cp312-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:07afec21bbbbf8a5cc3651aa96b980afe2526e7f048fdfb7f1014d84acc8b6d8", size = 146149 },
102
- { url = "https://files.pythonhosted.org/packages/f6/9b/93a332b8d25b347f6839ca0a61b7f0287b0930216994e8bf67a75d050255/charset_normalizer-3.4.0-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:6b40e8d38afe634559e398cc32b1472f376a4099c75fe6299ae607e404c033b2", size = 140043 },
103
- { url = "https://files.pythonhosted.org/packages/ab/f6/7ac4a01adcdecbc7a7587767c776d53d369b8b971382b91211489535acf0/charset_normalizer-3.4.0-cp312-cp312-musllinux_1_2_i686.whl", hash = "sha256:b8dcd239c743aa2f9c22ce674a145e0a25cb1566c495928440a181ca1ccf6719", size = 148229 },
104
- { url = "https://files.pythonhosted.org/packages/9d/be/5708ad18161dee7dc6a0f7e6cf3a88ea6279c3e8484844c0590e50e803ef/charset_normalizer-3.4.0-cp312-cp312-musllinux_1_2_ppc64le.whl", hash = "sha256:84450ba661fb96e9fd67629b93d2941c871ca86fc38d835d19d4225ff946a631", size = 151556 },
105
- { url = "https://files.pythonhosted.org/packages/5a/bb/3d8bc22bacb9eb89785e83e6723f9888265f3a0de3b9ce724d66bd49884e/charset_normalizer-3.4.0-cp312-cp312-musllinux_1_2_s390x.whl", hash = "sha256:44aeb140295a2f0659e113b31cfe92c9061622cadbc9e2a2f7b8ef6b1e29ef4b", size = 149772 },
106
- { url = "https://files.pythonhosted.org/packages/f7/fa/d3fc622de05a86f30beea5fc4e9ac46aead4731e73fd9055496732bcc0a4/charset_normalizer-3.4.0-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:1db4e7fefefd0f548d73e2e2e041f9df5c59e178b4c72fbac4cc6f535cfb1565", size = 144800 },
107
- { url = "https://files.pythonhosted.org/packages/9a/65/bdb9bc496d7d190d725e96816e20e2ae3a6fa42a5cac99c3c3d6ff884118/charset_normalizer-3.4.0-cp312-cp312-win32.whl", hash = "sha256:5726cf76c982532c1863fb64d8c6dd0e4c90b6ece9feb06c9f202417a31f7dd7", size = 94836 },
108
- { url = "https://files.pythonhosted.org/packages/3e/67/7b72b69d25b89c0b3cea583ee372c43aa24df15f0e0f8d3982c57804984b/charset_normalizer-3.4.0-cp312-cp312-win_amd64.whl", hash = "sha256:b197e7094f232959f8f20541ead1d9862ac5ebea1d58e9849c1bf979255dfac9", size = 102187 },
109
- { url = "https://files.pythonhosted.org/packages/f3/89/68a4c86f1a0002810a27f12e9a7b22feb198c59b2f05231349fbce5c06f4/charset_normalizer-3.4.0-cp313-cp313-macosx_10_13_universal2.whl", hash = "sha256:dd4eda173a9fcccb5f2e2bd2a9f423d180194b1bf17cf59e3269899235b2a114", size = 194617 },
110
- { url = "https://files.pythonhosted.org/packages/4f/cd/8947fe425e2ab0aa57aceb7807af13a0e4162cd21eee42ef5b053447edf5/charset_normalizer-3.4.0-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:e9e3c4c9e1ed40ea53acf11e2a386383c3304212c965773704e4603d589343ed", size = 125310 },
111
- { url = "https://files.pythonhosted.org/packages/5b/f0/b5263e8668a4ee9becc2b451ed909e9c27058337fda5b8c49588183c267a/charset_normalizer-3.4.0-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:92a7e36b000bf022ef3dbb9c46bfe2d52c047d5e3f3343f43204263c5addc250", size = 119126 },
112
- { url = "https://files.pythonhosted.org/packages/ff/6e/e445afe4f7fda27a533f3234b627b3e515a1b9429bc981c9a5e2aa5d97b6/charset_normalizer-3.4.0-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:54b6a92d009cbe2fb11054ba694bc9e284dad30a26757b1e372a1fdddaf21920", size = 139342 },
113
- { url = "https://files.pythonhosted.org/packages/a1/b2/4af9993b532d93270538ad4926c8e37dc29f2111c36f9c629840c57cd9b3/charset_normalizer-3.4.0-cp313-cp313-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:1ffd9493de4c922f2a38c2bf62b831dcec90ac673ed1ca182fe11b4d8e9f2a64", size = 149383 },
114
- { url = "https://files.pythonhosted.org/packages/fb/6f/4e78c3b97686b871db9be6f31d64e9264e889f8c9d7ab33c771f847f79b7/charset_normalizer-3.4.0-cp313-cp313-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:35c404d74c2926d0287fbd63ed5d27eb911eb9e4a3bb2c6d294f3cfd4a9e0c23", size = 142214 },
115
- { url = "https://files.pythonhosted.org/packages/2b/c9/1c8fe3ce05d30c87eff498592c89015b19fade13df42850aafae09e94f35/charset_normalizer-3.4.0-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:4796efc4faf6b53a18e3d46343535caed491776a22af773f366534056c4e1fbc", size = 144104 },
116
- { url = "https://files.pythonhosted.org/packages/ee/68/efad5dcb306bf37db7db338338e7bb8ebd8cf38ee5bbd5ceaaaa46f257e6/charset_normalizer-3.4.0-cp313-cp313-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:e7fdd52961feb4c96507aa649550ec2a0d527c086d284749b2f582f2d40a2e0d", size = 146255 },
117
- { url = "https://files.pythonhosted.org/packages/0c/75/1ed813c3ffd200b1f3e71121c95da3f79e6d2a96120163443b3ad1057505/charset_normalizer-3.4.0-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:92db3c28b5b2a273346bebb24857fda45601aef6ae1c011c0a997106581e8a88", size = 140251 },
118
- { url = "https://files.pythonhosted.org/packages/7d/0d/6f32255c1979653b448d3c709583557a4d24ff97ac4f3a5be156b2e6a210/charset_normalizer-3.4.0-cp313-cp313-musllinux_1_2_i686.whl", hash = "sha256:ab973df98fc99ab39080bfb0eb3a925181454d7c3ac8a1e695fddfae696d9e90", size = 148474 },
119
- { url = "https://files.pythonhosted.org/packages/ac/a0/c1b5298de4670d997101fef95b97ac440e8c8d8b4efa5a4d1ef44af82f0d/charset_normalizer-3.4.0-cp313-cp313-musllinux_1_2_ppc64le.whl", hash = "sha256:4b67fdab07fdd3c10bb21edab3cbfe8cf5696f453afce75d815d9d7223fbe88b", size = 151849 },
120
- { url = "https://files.pythonhosted.org/packages/04/4f/b3961ba0c664989ba63e30595a3ed0875d6790ff26671e2aae2fdc28a399/charset_normalizer-3.4.0-cp313-cp313-musllinux_1_2_s390x.whl", hash = "sha256:aa41e526a5d4a9dfcfbab0716c7e8a1b215abd3f3df5a45cf18a12721d31cb5d", size = 149781 },
121
- { url = "https://files.pythonhosted.org/packages/d8/90/6af4cd042066a4adad58ae25648a12c09c879efa4849c705719ba1b23d8c/charset_normalizer-3.4.0-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:ffc519621dce0c767e96b9c53f09c5d215578e10b02c285809f76509a3931482", size = 144970 },
122
- { url = "https://files.pythonhosted.org/packages/cc/67/e5e7e0cbfefc4ca79025238b43cdf8a2037854195b37d6417f3d0895c4c2/charset_normalizer-3.4.0-cp313-cp313-win32.whl", hash = "sha256:f19c1585933c82098c2a520f8ec1227f20e339e33aca8fa6f956f6691b784e67", size = 94973 },
123
- { url = "https://files.pythonhosted.org/packages/65/97/fc9bbc54ee13d33dc54a7fcf17b26368b18505500fc01e228c27b5222d80/charset_normalizer-3.4.0-cp313-cp313-win_amd64.whl", hash = "sha256:707b82d19e65c9bd28b81dde95249b07bf9f5b90ebe1ef17d9b57473f8a64b7b", size = 102308 },
124
- { url = "https://files.pythonhosted.org/packages/bf/9b/08c0432272d77b04803958a4598a51e2a4b51c06640af8b8f0f908c18bf2/charset_normalizer-3.4.0-py3-none-any.whl", hash = "sha256:fe9f97feb71aa9896b81973a7bbada8c49501dc73e58a10fcef6663af95e5079", size = 49446 },
90
+ version = "3.4.1"
91
+ source = { registry = "https://pypi.org/simple" }
92
+ sdist = { url = "https://files.pythonhosted.org/packages/16/b0/572805e227f01586461c80e0fd25d65a2115599cc9dad142fee4b747c357/charset_normalizer-3.4.1.tar.gz", hash = "sha256:44251f18cd68a75b56585dd00dae26183e102cd5e0f9f1466e6df5da2ed64ea3", size = 123188 }
93
+ wheels = [
94
+ { url = "https://files.pythonhosted.org/packages/0a/9a/dd1e1cdceb841925b7798369a09279bd1cf183cef0f9ddf15a3a6502ee45/charset_normalizer-3.4.1-cp312-cp312-macosx_10_13_universal2.whl", hash = "sha256:73d94b58ec7fecbc7366247d3b0b10a21681004153238750bb67bd9012414545", size = 196105 },
95
+ { url = "https://files.pythonhosted.org/packages/d3/8c/90bfabf8c4809ecb648f39794cf2a84ff2e7d2a6cf159fe68d9a26160467/charset_normalizer-3.4.1-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:dad3e487649f498dd991eeb901125411559b22e8d7ab25d3aeb1af367df5efd7", size = 140404 },
96
+ { url = "https://files.pythonhosted.org/packages/ad/8f/e410d57c721945ea3b4f1a04b74f70ce8fa800d393d72899f0a40526401f/charset_normalizer-3.4.1-cp312-cp312-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:c30197aa96e8eed02200a83fba2657b4c3acd0f0aa4bdc9f6c1af8e8962e0757", size = 150423 },
97
+ { url = "https://files.pythonhosted.org/packages/f0/b8/e6825e25deb691ff98cf5c9072ee0605dc2acfca98af70c2d1b1bc75190d/charset_normalizer-3.4.1-cp312-cp312-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:2369eea1ee4a7610a860d88f268eb39b95cb588acd7235e02fd5a5601773d4fa", size = 143184 },
98
+ { url = "https://files.pythonhosted.org/packages/3e/a2/513f6cbe752421f16d969e32f3583762bfd583848b763913ddab8d9bfd4f/charset_normalizer-3.4.1-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:bc2722592d8998c870fa4e290c2eec2c1569b87fe58618e67d38b4665dfa680d", size = 145268 },
99
+ { url = "https://files.pythonhosted.org/packages/74/94/8a5277664f27c3c438546f3eb53b33f5b19568eb7424736bdc440a88a31f/charset_normalizer-3.4.1-cp312-cp312-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:ffc9202a29ab3920fa812879e95a9e78b2465fd10be7fcbd042899695d75e616", size = 147601 },
100
+ { url = "https://files.pythonhosted.org/packages/7c/5f/6d352c51ee763623a98e31194823518e09bfa48be2a7e8383cf691bbb3d0/charset_normalizer-3.4.1-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:804a4d582ba6e5b747c625bf1255e6b1507465494a40a2130978bda7b932c90b", size = 141098 },
101
+ { url = "https://files.pythonhosted.org/packages/78/d4/f5704cb629ba5ab16d1d3d741396aec6dc3ca2b67757c45b0599bb010478/charset_normalizer-3.4.1-cp312-cp312-musllinux_1_2_i686.whl", hash = "sha256:0f55e69f030f7163dffe9fd0752b32f070566451afe180f99dbeeb81f511ad8d", size = 149520 },
102
+ { url = "https://files.pythonhosted.org/packages/c5/96/64120b1d02b81785f222b976c0fb79a35875457fa9bb40827678e54d1bc8/charset_normalizer-3.4.1-cp312-cp312-musllinux_1_2_ppc64le.whl", hash = "sha256:c4c3e6da02df6fa1410a7680bd3f63d4f710232d3139089536310d027950696a", size = 152852 },
103
+ { url = "https://files.pythonhosted.org/packages/84/c9/98e3732278a99f47d487fd3468bc60b882920cef29d1fa6ca460a1fdf4e6/charset_normalizer-3.4.1-cp312-cp312-musllinux_1_2_s390x.whl", hash = "sha256:5df196eb874dae23dcfb968c83d4f8fdccb333330fe1fc278ac5ceeb101003a9", size = 150488 },
104
+ { url = "https://files.pythonhosted.org/packages/13/0e/9c8d4cb99c98c1007cc11eda969ebfe837bbbd0acdb4736d228ccaabcd22/charset_normalizer-3.4.1-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:e358e64305fe12299a08e08978f51fc21fac060dcfcddd95453eabe5b93ed0e1", size = 146192 },
105
+ { url = "https://files.pythonhosted.org/packages/b2/21/2b6b5b860781a0b49427309cb8670785aa543fb2178de875b87b9cc97746/charset_normalizer-3.4.1-cp312-cp312-win32.whl", hash = "sha256:9b23ca7ef998bc739bf6ffc077c2116917eabcc901f88da1b9856b210ef63f35", size = 95550 },
106
+ { url = "https://files.pythonhosted.org/packages/21/5b/1b390b03b1d16c7e382b561c5329f83cc06623916aab983e8ab9239c7d5c/charset_normalizer-3.4.1-cp312-cp312-win_amd64.whl", hash = "sha256:6ff8a4a60c227ad87030d76e99cd1698345d4491638dfa6673027c48b3cd395f", size = 102785 },
107
+ { url = "https://files.pythonhosted.org/packages/38/94/ce8e6f63d18049672c76d07d119304e1e2d7c6098f0841b51c666e9f44a0/charset_normalizer-3.4.1-cp313-cp313-macosx_10_13_universal2.whl", hash = "sha256:aabfa34badd18f1da5ec1bc2715cadc8dca465868a4e73a0173466b688f29dda", size = 195698 },
108
+ { url = "https://files.pythonhosted.org/packages/24/2e/dfdd9770664aae179a96561cc6952ff08f9a8cd09a908f259a9dfa063568/charset_normalizer-3.4.1-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:22e14b5d70560b8dd51ec22863f370d1e595ac3d024cb8ad7d308b4cd95f8313", size = 140162 },
109
+ { url = "https://files.pythonhosted.org/packages/24/4e/f646b9093cff8fc86f2d60af2de4dc17c759de9d554f130b140ea4738ca6/charset_normalizer-3.4.1-cp313-cp313-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:8436c508b408b82d87dc5f62496973a1805cd46727c34440b0d29d8a2f50a6c9", size = 150263 },
110
+ { url = "https://files.pythonhosted.org/packages/5e/67/2937f8d548c3ef6e2f9aab0f6e21001056f692d43282b165e7c56023e6dd/charset_normalizer-3.4.1-cp313-cp313-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:2d074908e1aecee37a7635990b2c6d504cd4766c7bc9fc86d63f9c09af3fa11b", size = 142966 },
111
+ { url = "https://files.pythonhosted.org/packages/52/ed/b7f4f07de100bdb95c1756d3a4d17b90c1a3c53715c1a476f8738058e0fa/charset_normalizer-3.4.1-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:955f8851919303c92343d2f66165294848d57e9bba6cf6e3625485a70a038d11", size = 144992 },
112
+ { url = "https://files.pythonhosted.org/packages/96/2c/d49710a6dbcd3776265f4c923bb73ebe83933dfbaa841c5da850fe0fd20b/charset_normalizer-3.4.1-cp313-cp313-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:44ecbf16649486d4aebafeaa7ec4c9fed8b88101f4dd612dcaf65d5e815f837f", size = 147162 },
113
+ { url = "https://files.pythonhosted.org/packages/b4/41/35ff1f9a6bd380303dea55e44c4933b4cc3c4850988927d4082ada230273/charset_normalizer-3.4.1-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:0924e81d3d5e70f8126529951dac65c1010cdf117bb75eb02dd12339b57749dd", size = 140972 },
114
+ { url = "https://files.pythonhosted.org/packages/fb/43/c6a0b685fe6910d08ba971f62cd9c3e862a85770395ba5d9cad4fede33ab/charset_normalizer-3.4.1-cp313-cp313-musllinux_1_2_i686.whl", hash = "sha256:2967f74ad52c3b98de4c3b32e1a44e32975e008a9cd2a8cc8966d6a5218c5cb2", size = 149095 },
115
+ { url = "https://files.pythonhosted.org/packages/4c/ff/a9a504662452e2d2878512115638966e75633519ec11f25fca3d2049a94a/charset_normalizer-3.4.1-cp313-cp313-musllinux_1_2_ppc64le.whl", hash = "sha256:c75cb2a3e389853835e84a2d8fb2b81a10645b503eca9bcb98df6b5a43eb8886", size = 152668 },
116
+ { url = "https://files.pythonhosted.org/packages/6c/71/189996b6d9a4b932564701628af5cee6716733e9165af1d5e1b285c530ed/charset_normalizer-3.4.1-cp313-cp313-musllinux_1_2_s390x.whl", hash = "sha256:09b26ae6b1abf0d27570633b2b078a2a20419c99d66fb2823173d73f188ce601", size = 150073 },
117
+ { url = "https://files.pythonhosted.org/packages/e4/93/946a86ce20790e11312c87c75ba68d5f6ad2208cfb52b2d6a2c32840d922/charset_normalizer-3.4.1-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:fa88b843d6e211393a37219e6a1c1df99d35e8fd90446f1118f4216e307e48cd", size = 145732 },
118
+ { url = "https://files.pythonhosted.org/packages/cd/e5/131d2fb1b0dddafc37be4f3a2fa79aa4c037368be9423061dccadfd90091/charset_normalizer-3.4.1-cp313-cp313-win32.whl", hash = "sha256:eb8178fe3dba6450a3e024e95ac49ed3400e506fd4e9e5c32d30adda88cbd407", size = 95391 },
119
+ { url = "https://files.pythonhosted.org/packages/27/f2/4f9a69cc7712b9b5ad8fdb87039fd89abba997ad5cbe690d1835d40405b0/charset_normalizer-3.4.1-cp313-cp313-win_amd64.whl", hash = "sha256:b1ac5992a838106edb89654e0aebfc24f5848ae2547d22c2c3f66454daa11971", size = 102702 },
120
+ { url = "https://files.pythonhosted.org/packages/0e/f6/65ecc6878a89bb1c23a086ea335ad4bf21a588990c3f535a227b9eea9108/charset_normalizer-3.4.1-py3-none-any.whl", hash = "sha256:d98b1668f06378c6dbefec3b92299716b931cd4e6061f3c875a71ced1780ab85", size = 49767 },
125
121
  ]
126
122
 
127
123
  [[package]]
@@ -135,16 +131,16 @@ wheels = [
135
131
 
136
132
  [[package]]
137
133
  name = "django"
138
- version = "5.1.4"
134
+ version = "5.1.5"
139
135
  source = { registry = "https://pypi.org/simple" }
140
136
  dependencies = [
141
137
  { name = "asgiref" },
142
138
  { name = "sqlparse" },
143
139
  { name = "tzdata", marker = "sys_platform == 'win32'" },
144
140
  ]
145
- sdist = { url = "https://files.pythonhosted.org/packages/d3/e8/536555596dbb79f6e77418aeb40bdc1758c26725aba31919ba449e6d5e6a/Django-5.1.4.tar.gz", hash = "sha256:de450c09e91879fa5a307f696e57c851955c910a438a35e6b4c895e86bedc82a", size = 10716397 }
141
+ sdist = { url = "https://files.pythonhosted.org/packages/e4/17/834e3e08d590dcc27d4cc3c5cd4e2fb757b7a92bab9de8ee402455732952/Django-5.1.5.tar.gz", hash = "sha256:19bbca786df50b9eca23cee79d495facf55c8f5c54c529d9bf1fe7b5ea086af3", size = 10700031 }
146
142
  wheels = [
147
- { url = "https://files.pythonhosted.org/packages/58/0b/8a4ab2c02982df4ed41e29f28f189459a7eba37899438e6bea7f39db793b/Django-5.1.4-py3-none-any.whl", hash = "sha256:236e023f021f5ce7dee5779de7b286565fdea5f4ab86bae5338e3f7b69896cf0", size = 8276471 },
143
+ { url = "https://files.pythonhosted.org/packages/11/e6/e92c8c788b83d109f34d933c5e817095d85722719cb4483472abc135f44e/Django-5.1.5-py3-none-any.whl", hash = "sha256:c46eb936111fffe6ec4bc9930035524a8be98ec2f74d8a0ff351226a3e52f459", size = 8276957 },
148
144
  ]
149
145
 
150
146
  [[package]]
@@ -289,7 +285,7 @@ wheels = [
289
285
 
290
286
  [[package]]
291
287
  name = "python-terminusgps"
292
- version = "1.5.5"
288
+ version = "1.5.7"
293
289
  source = { editable = "." }
294
290
  dependencies = [
295
291
  { name = "argparse" },
@@ -310,7 +306,7 @@ requires-dist = [
310
306
  { name = "argparse", specifier = ">=1.4.0" },
311
307
  { name = "authorizenet", specifier = ">=1.1.5" },
312
308
  { name = "boto3", specifier = ">=1.34.144" },
313
- { name = "django", specifier = ">=5.1.4" },
309
+ { name = "django", specifier = ">=5.1.5" },
314
310
  { name = "python-wialon", specifier = ">=1.2.4" },
315
311
  ]
316
312
 
@@ -335,11 +331,11 @@ wheels = [
335
331
 
336
332
  [[package]]
337
333
  name = "pyxb-x"
338
- version = "1.2.6.2"
334
+ version = "1.2.6.3"
339
335
  source = { registry = "https://pypi.org/simple" }
340
- sdist = { url = "https://files.pythonhosted.org/packages/0f/1f/4c727df69fb9652cc693912a70f25af437ddde92564f1749deca7f0e4e64/PyXB-X-1.2.6.2.tar.gz", hash = "sha256:3bebab03b5020bd31be4f5e8439f44600b3ba10e45580d01d631029c3c531c9e", size = 1275145 }
336
+ sdist = { url = "https://files.pythonhosted.org/packages/de/de/2556352e8e4092d835852af63c34500681ba5ab6a5a3047e5daabb6d9ca9/pyxb_x-1.2.6.3.tar.gz", hash = "sha256:bf401fa8d3e6bd6ea6648f49f02c7dc7ef460b4c61dc34bc2f1c4c3a952037b5", size = 1275136 }
341
337
  wheels = [
342
- { url = "https://files.pythonhosted.org/packages/a9/71/8db3f341cd884f87987673c54d36fa028b8ffea8164e4bca2930b76e60fe/PyXB_X-1.2.6.2-py3-none-any.whl", hash = "sha256:7d130e824c9e08acc3d43a0b454a48613588b27cee09d9f34d947081a92691e2", size = 310099 },
338
+ { url = "https://files.pythonhosted.org/packages/8c/03/8154462b23ce8ed229d9be4eee17b8132b746e6a1f1dbfe57b72139ce5a0/PyXB_X-1.2.6.3-py3-none-any.whl", hash = "sha256:4c4a55d6b8c61c2d84ab4c2cb49ee74185599242bbfd1cf0bdd6be4a8a874006", size = 310097 },
343
339
  ]
344
340
 
345
341
  [[package]]
@@ -359,14 +355,14 @@ wheels = [
359
355
 
360
356
  [[package]]
361
357
  name = "s3transfer"
362
- version = "0.10.4"
358
+ version = "0.11.1"
363
359
  source = { registry = "https://pypi.org/simple" }
364
360
  dependencies = [
365
361
  { name = "botocore" },
366
362
  ]
367
- sdist = { url = "https://files.pythonhosted.org/packages/c0/0a/1cdbabf9edd0ea7747efdf6c9ab4e7061b085aa7f9bfc36bb1601563b069/s3transfer-0.10.4.tar.gz", hash = "sha256:29edc09801743c21eb5ecbc617a152df41d3c287f67b615f73e5f750583666a7", size = 145287 }
363
+ sdist = { url = "https://files.pythonhosted.org/packages/1a/aa/fdd958c626b00e3f046d4004363e7f1a2aba4354f78d65ceb3b217fa5eb8/s3transfer-0.11.1.tar.gz", hash = "sha256:3f25c900a367c8b7f7d8f9c34edc87e300bde424f779dc9f0a8ae4f9df9264f6", size = 146952 }
368
364
  wheels = [
369
- { url = "https://files.pythonhosted.org/packages/66/05/7957af15543b8c9799209506df4660cba7afc4cf94bfb60513827e96bed6/s3transfer-0.10.4-py3-none-any.whl", hash = "sha256:244a76a24355363a68164241438de1b72f8781664920260c48465896b712a41e", size = 83175 },
365
+ { url = "https://files.pythonhosted.org/packages/5f/ce/22673f4a85ccc640735b4f8d12178a0f41b5d3c6eda7f33756d10ce56901/s3transfer-0.11.1-py3-none-any.whl", hash = "sha256:8fa0aa48177be1f3425176dfe1ab85dcd3d962df603c3dbfc585e6bf857ef0ff", size = 84111 },
370
366
  ]
371
367
 
372
368
  [[package]]
@@ -549,9 +545,9 @@ wheels = [
549
545
 
550
546
  [[package]]
551
547
  name = "urllib3"
552
- version = "2.2.3"
548
+ version = "2.3.0"
553
549
  source = { registry = "https://pypi.org/simple" }
554
- sdist = { url = "https://files.pythonhosted.org/packages/ed/63/22ba4ebfe7430b76388e7cd448d5478814d3032121827c12a2cc287e2260/urllib3-2.2.3.tar.gz", hash = "sha256:e7d814a81dad81e6caf2ec9fdedb284ecc9c73076b62654547cc64ccdcae26e9", size = 300677 }
550
+ sdist = { url = "https://files.pythonhosted.org/packages/aa/63/e53da845320b757bf29ef6a9062f5c669fe997973f966045cb019c3f4b66/urllib3-2.3.0.tar.gz", hash = "sha256:f8c5449b3cf0861679ce7e0503c7b44b5ec981bec0d1d3795a07f1ba96f0204d", size = 307268 }
555
551
  wheels = [
556
- { url = "https://files.pythonhosted.org/packages/ce/d9/5f4c13cecde62396b0d3fe530a50ccea91e7dfc1ccf0e09c228841bb5ba8/urllib3-2.2.3-py3-none-any.whl", hash = "sha256:ca899ca043dcb1bafa3e262d73aa25c465bfb49e0bd9dd5d59f1d0acba2f8fac", size = 126338 },
552
+ { url = "https://files.pythonhosted.org/packages/c8/19/4ec628951a74043532ca2cf5d97b7b14863931476d117c471e8e2b1eb39f/urllib3-2.3.0-py3-none-any.whl", hash = "sha256:1cee9ad369867bfdbbb48b7dd50374c0967a0bb7710050facf0dd6911440e3df", size = 128369 },
557
553
  ]
@@ -1,35 +0,0 @@
1
- from wialon.api import WialonError
2
-
3
-
4
- class WialonBaseError(Exception):
5
- def __init__(self, message: str, wialon_err: WialonError | None = None) -> None:
6
- self.wialon_err = wialon_err
7
- super().__init__(message)
8
-
9
-
10
- class WialonLoginError(WialonBaseError):
11
- def __init__(
12
- self, token: str | None, wialon_err: WialonError | None = None
13
- ) -> None:
14
- message = f"Failed to login to the Wialon API using token: '{token}'\n"
15
- if wialon_err:
16
- message += str(wialon_err)
17
- super().__init__(message, wialon_err)
18
-
19
-
20
- class WialonSessionDuplicationError(WialonBaseError):
21
- def __init__(
22
- self, session_id: str | None, wialon_err: WialonError | None = None
23
- ) -> None:
24
- message = f"Failed to duplicate the Wialon session: '#{session_id}'\n"
25
- if wialon_err:
26
- message += str(wialon_err)
27
- super().__init__(message, wialon_err)
28
-
29
-
30
- class WialonLogoutError(WialonBaseError):
31
- def __init__(self, session_id: str, wialon_err: WialonError | None = None) -> None:
32
- message = f"Failed to logout of the Wialon API session: '{session_id}'\n"
33
- if wialon_err:
34
- message += str(wialon_err)
35
- super().__init__(message, wialon_err)
@@ -1,22 +0,0 @@
1
- from terminusgps.wialon import flags
2
- from terminusgps.wialon.items.base import WialonBase
3
-
4
-
5
- class WialonRetranslator(WialonBase):
6
- def create(self, **kwargs) -> int | None:
7
- if not kwargs.get("creator_id"):
8
- raise ValueError("'creator_id' is required on creation.")
9
- if not kwargs.get("name"):
10
- raise ValueError("'name' is required on creation.")
11
- if not kwargs.get("config"):
12
- raise ValueError("'config' is required on creation.")
13
-
14
- response = self.session.wialon_api.core_create_retranslator(
15
- **{
16
- "creatorId": kwargs["creator_id"],
17
- "name": kwargs["name"],
18
- "config": kwargs["config"],
19
- "dataFlags": flags.DATAFLAG_UNIT_BASE,
20
- }
21
- )
22
- return response.get("item", {}).get("id")