python-terminusgps 1.5.5__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.5 → python_terminusgps-1.5.7}/PKG-INFO +2 -2
  2. {python_terminusgps-1.5.5 → 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.5 → python_terminusgps-1.5.7}/terminusgps/wialon/session.py +46 -28
  6. {python_terminusgps-1.5.5 → python_terminusgps-1.5.7}/uv.lock +54 -58
  7. python_terminusgps-1.5.5/terminusgps/wialon/errors.py +0 -35
  8. python_terminusgps-1.5.5/terminusgps/wialon/items/retranslator.py +0 -22
  9. {python_terminusgps-1.5.5 → python_terminusgps-1.5.7}/.gitignore +0 -0
  10. {python_terminusgps-1.5.5 → python_terminusgps-1.5.7}/COPYING +0 -0
  11. {python_terminusgps-1.5.5 → python_terminusgps-1.5.7}/README.md +0 -0
  12. {python_terminusgps-1.5.5 → python_terminusgps-1.5.7}/requirements.txt +0 -0
  13. {python_terminusgps-1.5.5 → python_terminusgps-1.5.7}/terminusgps/__init__.py +0 -0
  14. {python_terminusgps-1.5.5 → python_terminusgps-1.5.7}/terminusgps/authorizenet/__init__.py +0 -0
  15. {python_terminusgps-1.5.5 → python_terminusgps-1.5.7}/terminusgps/authorizenet/auth.py +0 -0
  16. {python_terminusgps-1.5.5 → python_terminusgps-1.5.7}/terminusgps/aws/__init__.py +0 -0
  17. {python_terminusgps-1.5.5 → python_terminusgps-1.5.7}/terminusgps/aws/secrets.py +0 -0
  18. {python_terminusgps-1.5.5 → python_terminusgps-1.5.7}/terminusgps/settings.py +0 -0
  19. {python_terminusgps-1.5.5 → python_terminusgps-1.5.7}/terminusgps/wialon/__init__.py +0 -0
  20. {python_terminusgps-1.5.5 → python_terminusgps-1.5.7}/terminusgps/wialon/constants.py +0 -0
  21. {python_terminusgps-1.5.5 → python_terminusgps-1.5.7}/terminusgps/wialon/flags.py +0 -0
  22. {python_terminusgps-1.5.5 → python_terminusgps-1.5.7}/terminusgps/wialon/items/__init__.py +0 -0
  23. {python_terminusgps-1.5.5 → python_terminusgps-1.5.7}/terminusgps/wialon/items/base.py +0 -0
  24. {python_terminusgps-1.5.5 → python_terminusgps-1.5.7}/terminusgps/wialon/items/resource.py +0 -0
  25. {python_terminusgps-1.5.5 → python_terminusgps-1.5.7}/terminusgps/wialon/items/route.py +0 -0
  26. {python_terminusgps-1.5.5 → python_terminusgps-1.5.7}/terminusgps/wialon/items/unit.py +0 -0
  27. {python_terminusgps-1.5.5 → python_terminusgps-1.5.7}/terminusgps/wialon/items/unit_group.py +0 -0
  28. {python_terminusgps-1.5.5 → python_terminusgps-1.5.7}/terminusgps/wialon/items/user.py +0 -0
  29. {python_terminusgps-1.5.5 → 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.5
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.5"
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
+ )
@@ -1,9 +1,13 @@
1
1
  from wialon.api import Wialon, WialonError
2
- from pprint import pprint
3
2
  from django.conf import settings
4
3
  from django.core.exceptions import ImproperlyConfigured
5
4
 
6
- from .errors import WialonLogoutError, WialonLoginError, WialonSessionDuplicationError
5
+ from .errors import (
6
+ WialonLogoutError,
7
+ WialonLoginError,
8
+ WialonSessionDuplicationError,
9
+ WialonSessionInvalidError,
10
+ )
7
11
 
8
12
 
9
13
  class WialonSession:
@@ -33,7 +37,6 @@ class WialonSession:
33
37
  raise ImproperlyConfigured("'WIALON_ADMIN_ID' setting is required.")
34
38
 
35
39
  self.wialon_api = Wialon(scheme=scheme, host=host, port=port, sid=sid)
36
- self.active = bool(sid)
37
40
  self.token = token
38
41
  self._username = None
39
42
  self._gis_sid = None
@@ -49,6 +52,24 @@ class WialonSession:
49
52
  def __exit__(self, *args, **kwargs) -> None:
50
53
  self.logout()
51
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
+
52
73
  @property
53
74
  def gis_geocode(self) -> str | None:
54
75
  """
@@ -199,32 +220,31 @@ class WialonSession:
199
220
  def token(self, value: str | None = None) -> None:
200
221
  self._token = value if value else settings.WIALON_TOKEN
201
222
 
202
- def duplicate(
203
- self, user_id: str | None = None, continue_session: bool = False
204
- ) -> None:
223
+ def duplicate(self, username: str | None = None, continued: bool = False) -> str:
205
224
  """
206
225
  Duplicates the active Wialon API session.
207
226
 
208
- :param user_id: A Wialon user to operate as in the session.
209
- :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`
210
229
  :param continue_session: Whether or not the original session id should be valid after duplication.
211
230
  :type continue_session: :py:obj:`bool`
212
231
  :raises WialonSessionDuplicationError: If the Wialon session was not duplicated.
213
- :returns: Nothing.
214
- :rtype: :py:obj:`None`
232
+ :raises AssertionError: If the session was already active.
233
+ :returns: The new session id.
234
+ :rtype: :py:obj:`str`
215
235
 
216
236
  """
217
237
  try:
218
- login_response = self.wialon_api.core_duplicate(
219
- **{"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}
220
241
  )
221
- except WialonError as e:
242
+ self._set_login_response(response)
243
+ return response.get("eid")
244
+ except (WialonError, AssertionError) as e:
222
245
  raise WialonSessionDuplicationError(self.id, e)
223
- else:
224
- self._set_login_response(login_response)
225
- self.active = True
226
246
 
227
- 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:
228
248
  """
229
249
  Logs into the Wialon API and starts a new session.
230
250
 
@@ -236,19 +256,17 @@ class WialonSession:
236
256
  :type flags: :py:obj:`int`
237
257
  :raises WialonLoginError: If the login fails.
238
258
  :raises AssertionError: If the session was already active.
239
- :returns: Nothing.
240
- :rtype: :py:obj:`None`
259
+ :returns: The new session id.
260
+ :rtype: :py:obj:`str`
241
261
 
242
262
  """
243
- assert not self.active, "Cannot login to an active session."
244
263
  try:
264
+ assert not self.active, "Cannot login to an active session."
245
265
  response = self.wialon_api.token_login(**{"token": token, "fl": flags})
246
- pprint(response)
247
- except WialonError as e:
248
- raise WialonLoginError(token, e)
249
- else:
250
266
  self._set_login_response(response)
251
- self.active = True
267
+ return response.get("eid")
268
+ except (WialonError, AssertionError) as e:
269
+ raise WialonLoginError(token, e)
252
270
 
253
271
  def logout(self) -> None:
254
272
  """
@@ -267,7 +285,7 @@ class WialonSession:
267
285
  """
268
286
  Sets the Wialon API session's attributes based on a login response.
269
287
 
270
- :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`.
271
289
  :type login_response: :py:obj:`dict`
272
290
  :returns: Nothing.
273
291
  :rtype: :py:obj:`None`
@@ -291,8 +309,8 @@ class WialonSession:
291
309
 
292
310
  def main() -> None:
293
311
  session = WialonSession()
294
- session.login(settings.WIALON_TOKEN)
295
- session.duplicate(user_id="28944309")
312
+ session.login(token=settings.WIALON_TOKEN)
313
+ session.duplicate(username="chrissyron@gmail.com", continued=False)
296
314
  session.logout()
297
315
  return
298
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.3"
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")