python-terminusgps 20.6.1__tar.gz → 20.7.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.

Potentially problematic release.


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

Files changed (58) hide show
  1. {python_terminusgps-20.6.1 → python_terminusgps-20.7.0}/PKG-INFO +1 -2
  2. {python_terminusgps-20.6.1 → python_terminusgps-20.7.0}/docs/source/conf.py +1 -1
  3. {python_terminusgps-20.6.1 → python_terminusgps-20.7.0}/docs/source/index.rst +1 -0
  4. {python_terminusgps-20.6.1 → python_terminusgps-20.7.0}/docs/source/wialon/examples.rst +33 -8
  5. {python_terminusgps-20.6.1 → python_terminusgps-20.7.0}/docs/source/wialon/index.rst +0 -1
  6. {python_terminusgps-20.6.1 → python_terminusgps-20.7.0}/pyproject.toml +1 -2
  7. {python_terminusgps-20.6.1 → python_terminusgps-20.7.0}/terminusgps/wialon/items/__init__.py +0 -1
  8. {python_terminusgps-20.6.1 → python_terminusgps-20.7.0}/terminusgps/wialon/items/resource.py +111 -1
  9. {python_terminusgps-20.6.1 → python_terminusgps-20.7.0}/terminusgps/wialon/items/unit.py +1 -0
  10. {python_terminusgps-20.6.1 → python_terminusgps-20.7.0}/terminusgps/wialon/utils.py +0 -1
  11. {python_terminusgps-20.6.1 → python_terminusgps-20.7.0}/uv.lock +48 -50
  12. python_terminusgps-20.6.1/terminusgps/wialon/items/geofence.py +0 -60
  13. python_terminusgps-20.6.1/terminusgps/wialon/items/notification.py +0 -4
  14. {python_terminusgps-20.6.1 → python_terminusgps-20.7.0}/.gitignore +0 -0
  15. {python_terminusgps-20.6.1 → python_terminusgps-20.7.0}/.readthedocs.yaml +0 -0
  16. {python_terminusgps-20.6.1 → python_terminusgps-20.7.0}/COPYING +0 -0
  17. {python_terminusgps-20.6.1 → python_terminusgps-20.7.0}/README.md +0 -0
  18. {python_terminusgps-20.6.1 → python_terminusgps-20.7.0}/docs/Makefile +0 -0
  19. {python_terminusgps-20.6.1 → python_terminusgps-20.7.0}/docs/make.bat +0 -0
  20. {python_terminusgps-20.6.1 → python_terminusgps-20.7.0}/docs/source/authorizenet/auth.rst +0 -0
  21. {python_terminusgps-20.6.1 → python_terminusgps-20.7.0}/docs/source/authorizenet/index.rst +0 -0
  22. {python_terminusgps-20.6.1 → python_terminusgps-20.7.0}/docs/source/authorizenet/profiles.rst +0 -0
  23. {python_terminusgps-20.6.1 → python_terminusgps-20.7.0}/docs/source/aws/index.rst +0 -0
  24. {python_terminusgps-20.6.1 → python_terminusgps-20.7.0}/docs/source/aws/secrets.rst +0 -0
  25. {python_terminusgps-20.6.1/docs/source/wialon → python_terminusgps-20.7.0/docs/source}/settings.rst +0 -0
  26. {python_terminusgps-20.6.1 → python_terminusgps-20.7.0}/docs/source/twilio/caller.rst +0 -0
  27. {python_terminusgps-20.6.1 → python_terminusgps-20.7.0}/docs/source/twilio/index.rst +0 -0
  28. {python_terminusgps-20.6.1 → python_terminusgps-20.7.0}/docs/source/wialon/constants.rst +0 -0
  29. {python_terminusgps-20.6.1 → python_terminusgps-20.7.0}/docs/source/wialon/errors.rst +0 -0
  30. {python_terminusgps-20.6.1 → python_terminusgps-20.7.0}/docs/source/wialon/flags.rst +0 -0
  31. {python_terminusgps-20.6.1 → python_terminusgps-20.7.0}/docs/source/wialon/items.rst +0 -0
  32. {python_terminusgps-20.6.1 → python_terminusgps-20.7.0}/docs/source/wialon/session.rst +0 -0
  33. {python_terminusgps-20.6.1 → python_terminusgps-20.7.0}/docs/source/wialon/utils.rst +0 -0
  34. {python_terminusgps-20.6.1 → python_terminusgps-20.7.0}/terminusgps/__init__.py +0 -0
  35. {python_terminusgps-20.6.1 → python_terminusgps-20.7.0}/terminusgps/authorizenet/__init__.py +0 -0
  36. {python_terminusgps-20.6.1 → python_terminusgps-20.7.0}/terminusgps/authorizenet/auth.py +0 -0
  37. {python_terminusgps-20.6.1 → python_terminusgps-20.7.0}/terminusgps/authorizenet/profiles/__init__.py +0 -0
  38. {python_terminusgps-20.6.1 → python_terminusgps-20.7.0}/terminusgps/authorizenet/profiles/addresses.py +0 -0
  39. {python_terminusgps-20.6.1 → python_terminusgps-20.7.0}/terminusgps/authorizenet/profiles/base.py +0 -0
  40. {python_terminusgps-20.6.1 → python_terminusgps-20.7.0}/terminusgps/authorizenet/profiles/customers.py +0 -0
  41. {python_terminusgps-20.6.1 → python_terminusgps-20.7.0}/terminusgps/authorizenet/profiles/payments.py +0 -0
  42. {python_terminusgps-20.6.1 → python_terminusgps-20.7.0}/terminusgps/authorizenet/subscriptions.py +0 -0
  43. {python_terminusgps-20.6.1 → python_terminusgps-20.7.0}/terminusgps/aws/__init__.py +0 -0
  44. {python_terminusgps-20.6.1 → python_terminusgps-20.7.0}/terminusgps/aws/secrets.py +0 -0
  45. {python_terminusgps-20.6.1 → python_terminusgps-20.7.0}/terminusgps/aws/ses.py +0 -0
  46. {python_terminusgps-20.6.1 → python_terminusgps-20.7.0}/terminusgps/settings.py +0 -0
  47. {python_terminusgps-20.6.1 → python_terminusgps-20.7.0}/terminusgps/twilio/__init__.py +0 -0
  48. {python_terminusgps-20.6.1 → python_terminusgps-20.7.0}/terminusgps/twilio/caller.py +0 -0
  49. {python_terminusgps-20.6.1 → python_terminusgps-20.7.0}/terminusgps/wialon/__init__.py +0 -0
  50. {python_terminusgps-20.6.1 → python_terminusgps-20.7.0}/terminusgps/wialon/constants.py +0 -0
  51. {python_terminusgps-20.6.1 → python_terminusgps-20.7.0}/terminusgps/wialon/flags.py +0 -0
  52. {python_terminusgps-20.6.1 → python_terminusgps-20.7.0}/terminusgps/wialon/items/base.py +0 -0
  53. {python_terminusgps-20.6.1 → python_terminusgps-20.7.0}/terminusgps/wialon/items/retranslator.py +0 -0
  54. {python_terminusgps-20.6.1 → python_terminusgps-20.7.0}/terminusgps/wialon/items/route.py +0 -0
  55. {python_terminusgps-20.6.1 → python_terminusgps-20.7.0}/terminusgps/wialon/items/unit_group.py +0 -0
  56. {python_terminusgps-20.6.1 → python_terminusgps-20.7.0}/terminusgps/wialon/items/user.py +0 -0
  57. {python_terminusgps-20.6.1 → python_terminusgps-20.7.0}/terminusgps/wialon/logger.py +0 -0
  58. {python_terminusgps-20.6.1 → python_terminusgps-20.7.0}/terminusgps/wialon/session.py +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: python-terminusgps
3
- Version: 20.6.1
3
+ Version: 20.7.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://app.terminusgps.com/docs/apps/python-terminusgps/index.html
6
6
  Project-URL: Repository, https://github.com/terminusgps/python-terminusgps
@@ -16,6 +16,5 @@ Requires-Dist: argparse>=1.4.0
16
16
  Requires-Dist: authorizenet>=1.1.5
17
17
  Requires-Dist: boto3>=1.34.144
18
18
  Requires-Dist: django>=5.1.5
19
- Requires-Dist: lxml==4.9.4
20
19
  Requires-Dist: python-wialon>=1.2.4
21
20
  Requires-Dist: twilio>=9.4.5
@@ -10,7 +10,7 @@ from sphinxawesome_theme.postprocess import Icons
10
10
  project = "python-terminusgps"
11
11
  copyright = "2025, Terminus GPS, LLC"
12
12
  author = "Terminus GPS, LLC"
13
- release = "20.5.2"
13
+ release = "20.6.1"
14
14
 
15
15
  # -- General configuration ---------------------------------------------------
16
16
  # https://www.sphinx-doc.org/en/master/usage/configuration.html#general-configuration
@@ -27,6 +27,7 @@ In Python, all subpackages are nested within :py:mod:`terminusgps`:
27
27
  :maxdepth: 2
28
28
  :caption: Contents:
29
29
 
30
+ settings.rst
30
31
  authorizenet/index.rst
31
32
  aws/index.rst
32
33
  twilio/index.rst
@@ -2,34 +2,44 @@ Usage Examples
2
2
  ==============
3
3
 
4
4
  ===============================
5
- Create a new unit and rename it
5
+ Create a new user and rename it
6
6
  ===============================
7
7
 
8
- 1. Import :py:obj:`~terminusgps.wialon.session.WialonSession` and :py:obj:`~terminusgps.wialon.items.unit.WialonUnit`.
8
+ ----------------------------------------------------------------------------------------------------------------------
9
+ 1. Import :py:obj:`~terminusgps.wialon.session.WialonSession` and :py:obj:`~terminusgps.wialon.items.user.WialonUser`.
10
+ ----------------------------------------------------------------------------------------------------------------------
9
11
 
10
12
  Let's also import :py:obj:`~terminusgps.wialon.utils.generate_wialon_password` so we don't have to come up with a valid Wialon password ourselves.
11
13
 
12
14
  .. code:: python
13
15
 
14
16
  from terminusgps.wialon.session import WialonSession
15
- from terminusgps.wialon.items import WialonUnit
17
+ from terminusgps.wialon.items import WialonUser
16
18
  from terminusgps.wialon.utils import generate_wialon_password
17
19
 
18
- 2. Open the session in a context manager and instantiate a unit.
20
+ ----------------------------------------------------------------
21
+ 2. Open the session in a context manager and instantiate a user.
22
+ ----------------------------------------------------------------
23
+
24
+ When creating a new Wialon object, you *must* pass :py:obj:`None` as the ``id`` parameter.
25
+
26
+ It is recommended to only use keyword arguments when instantiating a :py:obj:`~terminusgps.wialon.items.base.WialonBase` object.
19
27
 
20
28
  .. code:: python
21
29
 
22
30
  with WialonSession(token="my_wialon_api_token") as session:
23
- unit = WialonUnit(
31
+ user = WialonUser(
24
32
  id=None,
25
33
  session=session,
26
- creator_id="123",
34
+ creator_id="27884511", # Admin user id
27
35
  name="test_user",
28
36
  password=generate_wialon_password(32)
29
37
  )
30
- print(f"{unit.name = }") # unit.name = "test_user"
38
+ print(f"{user.name = }") # user.name = "test_user"
31
39
 
32
- 3. Within the context manager, :py:obj:`~terminusgps.wialon.items.WialonUnit` methods can be executed.
40
+ -----------------------------------------------------------------------------------------------------------
41
+ 3. Within the context manager, :py:meth:`~terminusgps.wialon.items.base.WialonBase.rename` can be executed.
42
+ -----------------------------------------------------------------------------------------------------------
33
43
 
34
44
  .. code:: python
35
45
 
@@ -37,6 +47,7 @@ Let's also import :py:obj:`~terminusgps.wialon.utils.generate_wialon_password` s
37
47
  ...
38
48
 
39
49
  unit.rename("super_test_user")
50
+ print(f"{user.name = }") # user.name = "super_test_user"
40
51
  # Session is logged out after exiting scope
41
52
 
42
53
  -----------------
@@ -64,14 +75,18 @@ Full code example
64
75
  Create an account and migrate a unit into it
65
76
  ============================================
66
77
 
78
+ ------------------------------------------------------------------------------------------------------------------------------------------------
67
79
  1. Import :py:obj:`~terminusgps.wialon.session.WialonSession`, :py:mod:`~terminusgps.wialon.items`, and :py:mod:`~terminusgps.wialon.constants`.
80
+ ------------------------------------------------------------------------------------------------------------------------------------------------
68
81
 
69
82
  .. code:: python
70
83
 
71
84
  from terminusgps.wialon.session import WialonSession
72
85
  from terminusgps.wialon import items, constants
73
86
 
87
+ --------------------------
74
88
  2. Create an account user.
89
+ --------------------------
75
90
 
76
91
  .. code:: python
77
92
 
@@ -84,7 +99,9 @@ Create an account and migrate a unit into it
84
99
  password="super_secure_password1!",
85
100
  )
86
101
 
102
+ --------------------------------------------
87
103
  3. Create a resource using the account user.
104
+ --------------------------------------------
88
105
 
89
106
  .. code:: python
90
107
 
@@ -97,7 +114,9 @@ Create an account and migrate a unit into it
97
114
  name="account_resource",
98
115
  )
99
116
 
117
+ ------------------------------------------------------------------
100
118
  4. Retrieve a :py:obj:`~terminusgps.wialon.items.unit.WialonUnit`.
119
+ ------------------------------------------------------------------
101
120
 
102
121
  .. code:: python
103
122
 
@@ -105,7 +124,9 @@ Create an account and migrate a unit into it
105
124
  ...
106
125
  unit = items.WialonUnit(id="12345678", session=session)
107
126
 
127
+ ------------------------------------------------
108
128
  5. Grant the account user migration permissions.
129
+ ------------------------------------------------
109
130
 
110
131
  .. code:: python
111
132
 
@@ -113,7 +134,9 @@ Create an account and migrate a unit into it
113
134
  ...
114
135
  account_user.grant_access(unit, access_mask=constants.ACCESSMASK_UNIT_MIGRATION)
115
136
 
137
+ --------------------------------------------------------
116
138
  6. Transform the resource into an account and enable it.
139
+ --------------------------------------------------------
117
140
 
118
141
  .. code:: python
119
142
 
@@ -122,7 +145,9 @@ Create an account and migrate a unit into it
122
145
  account_resource.create_account("terminusgps_ext_hist")
123
146
  account_resource.enable()
124
147
 
148
+ -------------------------------------
125
149
  7. Migrate the unit into the account.
150
+ -------------------------------------
126
151
 
127
152
  .. code:: python
128
153
 
@@ -15,5 +15,4 @@ Wialon API
15
15
  flags.rst
16
16
  items.rst
17
17
  session.rst
18
- settings.rst
19
18
  utils.rst
@@ -1,6 +1,6 @@
1
1
  [project]
2
2
  name = "python-terminusgps"
3
- version = "20.6.1"
3
+ version = "20.7.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" } ]
@@ -17,7 +17,6 @@ dependencies = [
17
17
  "authorizenet>=1.1.5",
18
18
  "boto3>=1.34.144",
19
19
  "django>=5.1.5",
20
- "lxml==4.9.4",
21
20
  "python-wialon>=1.2.4",
22
21
  "twilio>=9.4.5",
23
22
  ]
@@ -1,4 +1,3 @@
1
- from .notification import WialonNotification
2
1
  from .resource import WialonResource
3
2
  from .retranslator import WialonRetranslator
4
3
  from .route import WialonRoute
@@ -1,9 +1,13 @@
1
+ from urllib.parse import quote_plus
2
+
1
3
  from terminusgps.wialon import flags
2
4
  from terminusgps.wialon.items.base import WialonBase
3
5
 
4
6
 
5
7
  class WialonResource(WialonBase):
6
- def create(self, creator_id: str | int, name: str) -> int | None:
8
+ def create(
9
+ self, creator_id: str | int, name: str, skip_creator_check: bool = False
10
+ ) -> int | None:
7
11
  """
8
12
  Creates a new Wialon resource.
9
13
 
@@ -11,6 +15,8 @@ class WialonResource(WialonBase):
11
15
  :type creator_id: :py:obj:`int` | :py:obj:`str`
12
16
  :param name: A name for the resource.
13
17
  :type name: :py:obj:`str`
18
+ :param skip_creator_check: Bypass object creation restrictions while creating the resource.
19
+ :type skip_creator_check: :py:obj:`bool`
14
20
  :raises ValueError: If ``creator_id`` is not a digit.
15
21
  :raises WialonError: If something goes wrong with Wialon.
16
22
  :returns: The Wialon id for the new resource, if it was created.
@@ -25,6 +31,7 @@ class WialonResource(WialonBase):
25
31
  "creatorId": creator_id,
26
32
  "name": name,
27
33
  "dataFlags": flags.DATAFLAG_UNIT_BASE,
34
+ "skipCreatorCheck": int(skip_creator_check),
28
35
  }
29
36
  )
30
37
  return int(response.get("item", {}).get("id")) if response.get("item") else None
@@ -272,3 +279,106 @@ class WialonResource(WialonBase):
272
279
  "denyBalance": deny_balance_val,
273
280
  }
274
281
  )
282
+
283
+ def create_driver(
284
+ self,
285
+ name: str,
286
+ code: str = "",
287
+ desc: str = "",
288
+ phone: str = "",
289
+ mobile_auth_code: str = "",
290
+ image_checksum: str = "",
291
+ image_ratio: str = "",
292
+ custom_fields: dict[str, str] | None = None,
293
+ ) -> None:
294
+ """
295
+ Creates a driver for the resource.
296
+
297
+ :param name: A name for the new driver.
298
+ :type name: :py:obj:`str`
299
+ :param code: A unique code for the new driver.
300
+ :type code: :py:obj:`str`
301
+ :param desc: Description for the driver.
302
+ :type desc: :py:obj:`str`
303
+ :param phone: A phone number beginning in a country code. No spaces.
304
+ :type phone: :py:obj:`str`
305
+ :param mobile_auth_code: Authentication code for Wialon mobile app.
306
+ :type mobile_auth_code: :py:obj:`str`
307
+ :param image_checksum: Checksum for driver image.
308
+ :type image_checksum: :py:obj:`str`
309
+ :param image_ratio: Driver image aspect ratio.
310
+ :type image_ratio: :py:obj:`float` | :py:obj:`None`
311
+ :param custom_fields: Additional custom fields to add to the driver.
312
+ :type custom_fields: :py:obj:`dict` | :py:obj:`None`
313
+ :raises WialonError: If something goes wrong calling the Wialon API.
314
+ :returns: Nothing.
315
+ :rtype: :py:obj:`None`
316
+
317
+ """
318
+ params = {
319
+ "itemId": self.id,
320
+ "id": 0,
321
+ "callMode": "create",
322
+ "ej": {"apps": []},
323
+ "c": code,
324
+ "ds": desc,
325
+ "n": name,
326
+ "f": 1,
327
+ "pwd": mobile_auth_code,
328
+ }
329
+
330
+ if phone:
331
+ params.update({"p": quote_plus(phone)})
332
+ if custom_fields:
333
+ params.update({"jp": custom_fields})
334
+ response = self.session.wialon_api.resource_update_driver(**params)
335
+ print(f"{response = }")
336
+
337
+ def create_passenger(
338
+ self,
339
+ name: str,
340
+ code: str,
341
+ phone: str = "",
342
+ timezone: int | None = None,
343
+ image_checksum: str = "",
344
+ image_ratio: float | None = None,
345
+ custom_fields: dict[str, str] | None = None,
346
+ ) -> None:
347
+ """
348
+ Creates a passenger/tag for the resource.
349
+
350
+ :param name: A name for the new passenger.
351
+ :type name: :py:obj:`str`
352
+ :param code: A unique code for the new passenger.
353
+ :type code: :py:obj:`str`
354
+ :param phone: A phone number beginning in a country code. No spaces.
355
+ :type phone: :py:obj:`str`
356
+ :param timezone: A timezone integer.
357
+ :type timezone: :py:obj:`int` | :py:obj:`None`
358
+ :param image_checksum: Checksum for passenger image.
359
+ :type image_checksum: :py:obj:`str`
360
+ :param image_ratio: Passenger image aspect ratio.
361
+ :type image_ratio: :py:obj:`float` | :py:obj:`None`
362
+ :param custom_fields: Additional custom fields to add to the passenger.
363
+ :type custom_fields: :py:obj:`dict` | :py:obj:`None`
364
+ :raises WialonError: If something goes wrong calling the Wialon API.
365
+ :returns: Nothing.
366
+ :rtype: :py:obj:`None`
367
+
368
+ """
369
+ params = {
370
+ "itemId": self.id,
371
+ "id": 0,
372
+ "callMode": "create",
373
+ "c": code,
374
+ "ck": image_checksum,
375
+ "r": image_ratio,
376
+ "n": name,
377
+ }
378
+ if phone:
379
+ params.update({"p": quote_plus(phone)})
380
+ if timezone:
381
+ params.update({"tz": timezone})
382
+ if custom_fields:
383
+ params.update({"jp": custom_fields})
384
+ self.session.wialon_api.resource_update_tag(**params)
@@ -199,6 +199,7 @@ class WialonUnit(WialonBase):
199
199
  return list(dict.fromkeys(phone_numbers)) # Removes duplicate phone numbers
200
200
 
201
201
  def clean_phone_numbers(self, phones: list[str]) -> list[str]:
202
+ """Takes a list of phone numbers and returns a list of clean phone numbers."""
202
203
  cleaned_phones = []
203
204
  for num in phones:
204
205
  if "," in num:
@@ -1,6 +1,5 @@
1
1
  import secrets
2
2
  import string
3
- import warnings
4
3
  import typing
5
4
 
6
5
  from terminusgps.wialon import items, flags
@@ -12,7 +12,7 @@ wheels = [
12
12
 
13
13
  [[package]]
14
14
  name = "aiohttp"
15
- version = "3.11.12"
15
+ version = "3.11.13"
16
16
  source = { registry = "https://pypi.org/simple" }
17
17
  dependencies = [
18
18
  { name = "aiohappyeyeballs" },
@@ -23,40 +23,40 @@ dependencies = [
23
23
  { name = "propcache" },
24
24
  { name = "yarl" },
25
25
  ]
26
- sdist = { url = "https://files.pythonhosted.org/packages/37/4b/952d49c73084fb790cb5c6ead50848c8e96b4980ad806cf4d2ad341eaa03/aiohttp-3.11.12.tar.gz", hash = "sha256:7603ca26d75b1b86160ce1bbe2787a0b706e592af5b2504e12caa88a217767b0", size = 7673175 }
27
- wheels = [
28
- { url = "https://files.pythonhosted.org/packages/4d/d0/94346961acb476569fca9a644cc6f9a02f97ef75961a6b8d2b35279b8d1f/aiohttp-3.11.12-cp312-cp312-macosx_10_13_universal2.whl", hash = "sha256:e392804a38353900c3fd8b7cacbea5132888f7129f8e241915e90b85f00e3250", size = 704837 },
29
- { url = "https://files.pythonhosted.org/packages/a9/af/05c503f1cc8f97621f199ef4b8db65fb88b8bc74a26ab2adb74789507ad3/aiohttp-3.11.12-cp312-cp312-macosx_10_13_x86_64.whl", hash = "sha256:8fa1510b96c08aaad49303ab11f8803787c99222288f310a62f493faf883ede1", size = 464218 },
30
- { url = "https://files.pythonhosted.org/packages/f2/48/b9949eb645b9bd699153a2ec48751b985e352ab3fed9d98c8115de305508/aiohttp-3.11.12-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:dc065a4285307607df3f3686363e7f8bdd0d8ab35f12226362a847731516e42c", size = 456166 },
31
- { url = "https://files.pythonhosted.org/packages/14/fb/980981807baecb6f54bdd38beb1bd271d9a3a786e19a978871584d026dcf/aiohttp-3.11.12-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:cddb31f8474695cd61fc9455c644fc1606c164b93bff2490390d90464b4655df", size = 1682528 },
32
- { url = "https://files.pythonhosted.org/packages/90/cb/77b1445e0a716914e6197b0698b7a3640590da6c692437920c586764d05b/aiohttp-3.11.12-cp312-cp312-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:9dec0000d2d8621d8015c293e24589d46fa218637d820894cb7356c77eca3259", size = 1737154 },
33
- { url = "https://files.pythonhosted.org/packages/ff/24/d6fb1f4cede9ccbe98e4def6f3ed1e1efcb658871bbf29f4863ec646bf38/aiohttp-3.11.12-cp312-cp312-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:e3552fe98e90fdf5918c04769f338a87fa4f00f3b28830ea9b78b1bdc6140e0d", size = 1793435 },
34
- { url = "https://files.pythonhosted.org/packages/17/e2/9f744cee0861af673dc271a3351f59ebd5415928e20080ab85be25641471/aiohttp-3.11.12-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:6dfe7f984f28a8ae94ff3a7953cd9678550dbd2a1f9bda5dd9c5ae627744c78e", size = 1692010 },
35
- { url = "https://files.pythonhosted.org/packages/90/c4/4a1235c1df544223eb57ba553ce03bc706bdd065e53918767f7fa1ff99e0/aiohttp-3.11.12-cp312-cp312-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:a481a574af914b6e84624412666cbfbe531a05667ca197804ecc19c97b8ab1b0", size = 1619481 },
36
- { url = "https://files.pythonhosted.org/packages/60/70/cf12d402a94a33abda86dd136eb749b14c8eb9fec1e16adc310e25b20033/aiohttp-3.11.12-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:1987770fb4887560363b0e1a9b75aa303e447433c41284d3af2840a2f226d6e0", size = 1641578 },
37
- { url = "https://files.pythonhosted.org/packages/1b/25/7211973fda1f5e833fcfd98ccb7f9ce4fbfc0074e3e70c0157a751d00db8/aiohttp-3.11.12-cp312-cp312-musllinux_1_2_armv7l.whl", hash = "sha256:a4ac6a0f0f6402854adca4e3259a623f5c82ec3f0c049374133bcb243132baf9", size = 1684463 },
38
- { url = "https://files.pythonhosted.org/packages/93/60/b5905b4d0693f6018b26afa9f2221fefc0dcbd3773fe2dff1a20fb5727f1/aiohttp-3.11.12-cp312-cp312-musllinux_1_2_i686.whl", hash = "sha256:c96a43822f1f9f69cc5c3706af33239489a6294be486a0447fb71380070d4d5f", size = 1646691 },
39
- { url = "https://files.pythonhosted.org/packages/b4/fc/ba1b14d6fdcd38df0b7c04640794b3683e949ea10937c8a58c14d697e93f/aiohttp-3.11.12-cp312-cp312-musllinux_1_2_ppc64le.whl", hash = "sha256:a5e69046f83c0d3cb8f0d5bd9b8838271b1bc898e01562a04398e160953e8eb9", size = 1702269 },
40
- { url = "https://files.pythonhosted.org/packages/5e/39/18c13c6f658b2ba9cc1e0c6fb2d02f98fd653ad2addcdf938193d51a9c53/aiohttp-3.11.12-cp312-cp312-musllinux_1_2_s390x.whl", hash = "sha256:68d54234c8d76d8ef74744f9f9fc6324f1508129e23da8883771cdbb5818cbef", size = 1734782 },
41
- { url = "https://files.pythonhosted.org/packages/9f/d2/ccc190023020e342419b265861877cd8ffb75bec37b7ddd8521dd2c6deb8/aiohttp-3.11.12-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:c9fd9dcf9c91affe71654ef77426f5cf8489305e1c66ed4816f5a21874b094b9", size = 1694740 },
42
- { url = "https://files.pythonhosted.org/packages/3f/54/186805bcada64ea90ea909311ffedcd74369bfc6e880d39d2473314daa36/aiohttp-3.11.12-cp312-cp312-win32.whl", hash = "sha256:0ed49efcd0dc1611378beadbd97beb5d9ca8fe48579fc04a6ed0844072261b6a", size = 411530 },
43
- { url = "https://files.pythonhosted.org/packages/3d/63/5eca549d34d141bcd9de50d4e59b913f3641559460c739d5e215693cb54a/aiohttp-3.11.12-cp312-cp312-win_amd64.whl", hash = "sha256:54775858c7f2f214476773ce785a19ee81d1294a6bedc5cc17225355aab74802", size = 437860 },
44
- { url = "https://files.pythonhosted.org/packages/c3/9b/cea185d4b543ae08ee478373e16653722c19fcda10d2d0646f300ce10791/aiohttp-3.11.12-cp313-cp313-macosx_10_13_universal2.whl", hash = "sha256:413ad794dccb19453e2b97c2375f2ca3cdf34dc50d18cc2693bd5aed7d16f4b9", size = 698148 },
45
- { url = "https://files.pythonhosted.org/packages/91/5c/80d47fe7749fde584d1404a68ade29bcd7e58db8fa11fa38e8d90d77e447/aiohttp-3.11.12-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:4a93d28ed4b4b39e6f46fd240896c29b686b75e39cc6992692e3922ff6982b4c", size = 460831 },
46
- { url = "https://files.pythonhosted.org/packages/8e/f9/de568f8a8ca6b061d157c50272620c53168d6e3eeddae78dbb0f7db981eb/aiohttp-3.11.12-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:d589264dbba3b16e8951b6f145d1e6b883094075283dafcab4cdd564a9e353a0", size = 453122 },
47
- { url = "https://files.pythonhosted.org/packages/8b/fd/b775970a047543bbc1d0f66725ba72acef788028fce215dc959fd15a8200/aiohttp-3.11.12-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:e5148ca8955affdfeb864aca158ecae11030e952b25b3ae15d4e2b5ba299bad2", size = 1665336 },
48
- { url = "https://files.pythonhosted.org/packages/82/9b/aff01d4f9716245a1b2965f02044e4474fadd2bcfe63cf249ca788541886/aiohttp-3.11.12-cp313-cp313-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:525410e0790aab036492eeea913858989c4cb070ff373ec3bc322d700bdf47c1", size = 1718111 },
49
- { url = "https://files.pythonhosted.org/packages/e0/a9/166fd2d8b2cc64f08104aa614fad30eee506b563154081bf88ce729bc665/aiohttp-3.11.12-cp313-cp313-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:9bd8695be2c80b665ae3f05cb584093a1e59c35ecb7d794d1edd96e8cc9201d7", size = 1775293 },
50
- { url = "https://files.pythonhosted.org/packages/13/c5/0d3c89bd9e36288f10dc246f42518ce8e1c333f27636ac78df091c86bb4a/aiohttp-3.11.12-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:f0203433121484b32646a5f5ea93ae86f3d9559d7243f07e8c0eab5ff8e3f70e", size = 1677338 },
51
- { url = "https://files.pythonhosted.org/packages/72/b2/017db2833ef537be284f64ead78725984db8a39276c1a9a07c5c7526e238/aiohttp-3.11.12-cp313-cp313-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:40cd36749a1035c34ba8d8aaf221b91ca3d111532e5ccb5fa8c3703ab1b967ed", size = 1603365 },
52
- { url = "https://files.pythonhosted.org/packages/fc/72/b66c96a106ec7e791e29988c222141dd1219d7793ffb01e72245399e08d2/aiohttp-3.11.12-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:a7442662afebbf7b4c6d28cb7aab9e9ce3a5df055fc4116cc7228192ad6cb484", size = 1618464 },
53
- { url = "https://files.pythonhosted.org/packages/3f/50/e68a40f267b46a603bab569d48d57f23508801614e05b3369898c5b2910a/aiohttp-3.11.12-cp313-cp313-musllinux_1_2_armv7l.whl", hash = "sha256:8a2fb742ef378284a50766e985804bd6adb5adb5aa781100b09befdbfa757b65", size = 1657827 },
54
- { url = "https://files.pythonhosted.org/packages/c5/1d/aafbcdb1773d0ba7c20793ebeedfaba1f3f7462f6fc251f24983ed738aa7/aiohttp-3.11.12-cp313-cp313-musllinux_1_2_i686.whl", hash = "sha256:2cee3b117a8d13ab98b38d5b6bdcd040cfb4181068d05ce0c474ec9db5f3c5bb", size = 1616700 },
55
- { url = "https://files.pythonhosted.org/packages/b0/5e/6cd9724a2932f36e2a6b742436a36d64784322cfb3406ca773f903bb9a70/aiohttp-3.11.12-cp313-cp313-musllinux_1_2_ppc64le.whl", hash = "sha256:f6a19bcab7fbd8f8649d6595624856635159a6527861b9cdc3447af288a00c00", size = 1685643 },
56
- { url = "https://files.pythonhosted.org/packages/8b/38/ea6c91d5c767fd45a18151675a07c710ca018b30aa876a9f35b32fa59761/aiohttp-3.11.12-cp313-cp313-musllinux_1_2_s390x.whl", hash = "sha256:e4cecdb52aaa9994fbed6b81d4568427b6002f0a91c322697a4bfcc2b2363f5a", size = 1715487 },
57
- { url = "https://files.pythonhosted.org/packages/8e/24/e9edbcb7d1d93c02e055490348df6f955d675e85a028c33babdcaeda0853/aiohttp-3.11.12-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:30f546358dfa0953db92ba620101fefc81574f87b2346556b90b5f3ef16e55ce", size = 1672948 },
58
- { url = "https://files.pythonhosted.org/packages/25/be/0b1fb737268e003198f25c3a68c2135e76e4754bf399a879b27bd508a003/aiohttp-3.11.12-cp313-cp313-win32.whl", hash = "sha256:ce1bb21fc7d753b5f8a5d5a4bae99566386b15e716ebdb410154c16c91494d7f", size = 410396 },
59
- { url = "https://files.pythonhosted.org/packages/68/fd/677def96a75057b0a26446b62f8fbb084435b20a7d270c99539c26573bfd/aiohttp-3.11.12-cp313-cp313-win_amd64.whl", hash = "sha256:f7914ab70d2ee8ab91c13e5402122edbc77821c66d2758abb53aabe87f013287", size = 436234 },
26
+ sdist = { url = "https://files.pythonhosted.org/packages/b3/3f/c4a667d184c69667b8f16e0704127efc5f1e60577df429382b4d95fd381e/aiohttp-3.11.13.tar.gz", hash = "sha256:8ce789231404ca8fff7f693cdce398abf6d90fd5dae2b1847477196c243b1fbb", size = 7674284 }
27
+ wheels = [
28
+ { url = "https://files.pythonhosted.org/packages/9a/a9/6657664a55f78db8767e396cc9723782ed3311eb57704b0a5dacfa731916/aiohttp-3.11.13-cp312-cp312-macosx_10_13_universal2.whl", hash = "sha256:2eabb269dc3852537d57589b36d7f7362e57d1ece308842ef44d9830d2dc3c90", size = 705054 },
29
+ { url = "https://files.pythonhosted.org/packages/3b/06/f7df1fe062d16422f70af5065b76264f40b382605cf7477fa70553a9c9c1/aiohttp-3.11.13-cp312-cp312-macosx_10_13_x86_64.whl", hash = "sha256:7b77ee42addbb1c36d35aca55e8cc6d0958f8419e458bb70888d8c69a4ca833d", size = 464440 },
30
+ { url = "https://files.pythonhosted.org/packages/22/3a/8773ea866735754004d9f79e501fe988bdd56cfac7fdecbc8de17fc093eb/aiohttp-3.11.13-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:55789e93c5ed71832e7fac868167276beadf9877b85697020c46e9a75471f55f", size = 456394 },
31
+ { url = "https://files.pythonhosted.org/packages/7f/61/8e2f2af2327e8e475a2b0890f15ef0bbfd117e321cce1e1ed210df81bbac/aiohttp-3.11.13-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:c929f9a7249a11e4aa5c157091cfad7f49cc6b13f4eecf9b747104befd9f56f2", size = 1682752 },
32
+ { url = "https://files.pythonhosted.org/packages/24/ed/84fce816bc8da39aa3f6c1196fe26e47065fea882b1a67a808282029c079/aiohttp-3.11.13-cp312-cp312-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:d33851d85537bbf0f6291ddc97926a754c8f041af759e0aa0230fe939168852b", size = 1737375 },
33
+ { url = "https://files.pythonhosted.org/packages/d9/de/35a5ba9e3d21ebfda1ebbe66f6cc5cbb4d3ff9bd6a03e5e8a788954f8f27/aiohttp-3.11.13-cp312-cp312-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:9229d8613bd8401182868fe95688f7581673e1c18ff78855671a4b8284f47bcb", size = 1793660 },
34
+ { url = "https://files.pythonhosted.org/packages/ff/fe/0f650a8c7c72c8a07edf8ab164786f936668acd71786dd5885fc4b1ca563/aiohttp-3.11.13-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:669dd33f028e54fe4c96576f406ebb242ba534dd3a981ce009961bf49960f117", size = 1692233 },
35
+ { url = "https://files.pythonhosted.org/packages/a8/20/185378b3483f968c6303aafe1e33b0da0d902db40731b2b2b2680a631131/aiohttp-3.11.13-cp312-cp312-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:7c1b20a1ace54af7db1f95af85da530fe97407d9063b7aaf9ce6a32f44730778", size = 1619708 },
36
+ { url = "https://files.pythonhosted.org/packages/a4/f9/d9c181750980b17e1e13e522d7e82a8d08d3d28a2249f99207ef5d8d738f/aiohttp-3.11.13-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:5724cc77f4e648362ebbb49bdecb9e2b86d9b172c68a295263fa072e679ee69d", size = 1641802 },
37
+ { url = "https://files.pythonhosted.org/packages/50/c7/1cb46b72b1788710343b6e59eaab9642bd2422f2d87ede18b1996e0aed8f/aiohttp-3.11.13-cp312-cp312-musllinux_1_2_armv7l.whl", hash = "sha256:aa36c35e94ecdb478246dd60db12aba57cfcd0abcad43c927a8876f25734d496", size = 1684678 },
38
+ { url = "https://files.pythonhosted.org/packages/71/87/89b979391de840c5d7c34e78e1148cc731b8aafa84b6a51d02f44b4c66e2/aiohttp-3.11.13-cp312-cp312-musllinux_1_2_i686.whl", hash = "sha256:9b5b37c863ad5b0892cc7a4ceb1e435e5e6acd3f2f8d3e11fa56f08d3c67b820", size = 1646921 },
39
+ { url = "https://files.pythonhosted.org/packages/a7/db/a463700ac85b72f8cf68093e988538faaf4e865e3150aa165cf80ee29d6e/aiohttp-3.11.13-cp312-cp312-musllinux_1_2_ppc64le.whl", hash = "sha256:e06cf4852ce8c4442a59bae5a3ea01162b8fcb49ab438d8548b8dc79375dad8a", size = 1702493 },
40
+ { url = "https://files.pythonhosted.org/packages/b8/32/1084e65da3adfb08c7e1b3e94f3e4ded8bd707dee265a412bc377b7cd000/aiohttp-3.11.13-cp312-cp312-musllinux_1_2_s390x.whl", hash = "sha256:5194143927e494616e335d074e77a5dac7cd353a04755330c9adc984ac5a628e", size = 1735004 },
41
+ { url = "https://files.pythonhosted.org/packages/a0/bb/a634cbdd97ce5d05c2054a9a35bfc32792d7e4f69d600ad7e820571d095b/aiohttp-3.11.13-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:afcb6b275c2d2ba5d8418bf30a9654fa978b4f819c2e8db6311b3525c86fe637", size = 1694964 },
42
+ { url = "https://files.pythonhosted.org/packages/fd/cf/7d29db4e5c28ec316e5d2ac9ac9df0e2e278e9ea910e5c4205b9b64c2c42/aiohttp-3.11.13-cp312-cp312-win32.whl", hash = "sha256:7104d5b3943c6351d1ad7027d90bdd0ea002903e9f610735ac99df3b81f102ee", size = 411746 },
43
+ { url = "https://files.pythonhosted.org/packages/65/a9/13e69ad4fd62104ebd94617f9f2be58231b50bb1e6bac114f024303ac23b/aiohttp-3.11.13-cp312-cp312-win_amd64.whl", hash = "sha256:47dc018b1b220c48089b5b9382fbab94db35bef2fa192995be22cbad3c5730c8", size = 438078 },
44
+ { url = "https://files.pythonhosted.org/packages/87/dc/7d58d33cec693f1ddf407d4ab975445f5cb507af95600f137b81683a18d8/aiohttp-3.11.13-cp313-cp313-macosx_10_13_universal2.whl", hash = "sha256:9862d077b9ffa015dbe3ce6c081bdf35135948cb89116e26667dd183550833d1", size = 698372 },
45
+ { url = "https://files.pythonhosted.org/packages/84/e7/5d88514c9e24fbc8dd6117350a8ec4a9314f4adae6e89fe32e3e639b0c37/aiohttp-3.11.13-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:fbfef0666ae9e07abfa2c54c212ac18a1f63e13e0760a769f70b5717742f3ece", size = 461057 },
46
+ { url = "https://files.pythonhosted.org/packages/96/1a/8143c48a929fa00c6324f85660cb0f47a55ed9385f0c1b72d4b8043acf8e/aiohttp-3.11.13-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:93a1f7d857c4fcf7cabb1178058182c789b30d85de379e04f64c15b7e88d66fb", size = 453340 },
47
+ { url = "https://files.pythonhosted.org/packages/2f/1c/b8010e4d65c5860d62681088e5376f3c0a940c5e3ca8989cae36ce8c3ea8/aiohttp-3.11.13-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:ba40b7ae0f81c7029583a338853f6607b6d83a341a3dcde8bed1ea58a3af1df9", size = 1665561 },
48
+ { url = "https://files.pythonhosted.org/packages/19/ed/a68c3ab2f92fdc17dfc2096117d1cfaa7f7bdded2a57bacbf767b104165b/aiohttp-3.11.13-cp313-cp313-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:b5b95787335c483cd5f29577f42bbe027a412c5431f2f80a749c80d040f7ca9f", size = 1718335 },
49
+ { url = "https://files.pythonhosted.org/packages/27/4f/3a0b6160ce663b8ebdb65d1eedff60900cd7108838c914d25952fe2b909f/aiohttp-3.11.13-cp313-cp313-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:a7d474c5c1f0b9405c1565fafdc4429fa7d986ccbec7ce55bc6a330f36409cad", size = 1775522 },
50
+ { url = "https://files.pythonhosted.org/packages/0b/58/9da09291e19696c452e7224c1ce8c6d23a291fe8cd5c6b247b51bcda07db/aiohttp-3.11.13-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:1e83fb1991e9d8982b3b36aea1e7ad27ea0ce18c14d054c7a404d68b0319eebb", size = 1677566 },
51
+ { url = "https://files.pythonhosted.org/packages/3d/18/6184f2bf8bbe397acbbbaa449937d61c20a6b85765f48e5eddc6d84957fe/aiohttp-3.11.13-cp313-cp313-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:4586a68730bd2f2b04a83e83f79d271d8ed13763f64b75920f18a3a677b9a7f0", size = 1603590 },
52
+ { url = "https://files.pythonhosted.org/packages/04/94/91e0d1ca0793012ccd927e835540aa38cca98bdce2389256ab813ebd64a3/aiohttp-3.11.13-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:9fe4eb0e7f50cdb99b26250d9328faef30b1175a5dbcfd6d0578d18456bac567", size = 1618688 },
53
+ { url = "https://files.pythonhosted.org/packages/71/85/d13c3ea2e48a10b43668305d4903838834c3d4112e5229177fbcc23a56cd/aiohttp-3.11.13-cp313-cp313-musllinux_1_2_armv7l.whl", hash = "sha256:2a8a6bc19818ac3e5596310ace5aa50d918e1ebdcc204dc96e2f4d505d51740c", size = 1658053 },
54
+ { url = "https://files.pythonhosted.org/packages/12/6a/3242a35100de23c1e8d9e05e8605e10f34268dee91b00d9d1e278c58eb80/aiohttp-3.11.13-cp313-cp313-musllinux_1_2_i686.whl", hash = "sha256:7f27eec42f6c3c1df09cfc1f6786308f8b525b8efaaf6d6bd76c1f52c6511f6a", size = 1616917 },
55
+ { url = "https://files.pythonhosted.org/packages/f5/b3/3f99b6f0a9a79590a7ba5655dbde8408c685aa462247378c977603464d0a/aiohttp-3.11.13-cp313-cp313-musllinux_1_2_ppc64le.whl", hash = "sha256:2a4a13dfbb23977a51853b419141cd0a9b9573ab8d3a1455c6e63561387b52ff", size = 1685872 },
56
+ { url = "https://files.pythonhosted.org/packages/8a/2e/99672181751f280a85e24fcb9a2c2469e8b1a0de1746b7b5c45d1eb9a999/aiohttp-3.11.13-cp313-cp313-musllinux_1_2_s390x.whl", hash = "sha256:02876bf2f69b062584965507b07bc06903c2dc93c57a554b64e012d636952654", size = 1715719 },
57
+ { url = "https://files.pythonhosted.org/packages/7a/cd/68030356eb9a7d57b3e2823c8a852709d437abb0fbff41a61ebc351b7625/aiohttp-3.11.13-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:b992778d95b60a21c4d8d4a5f15aaab2bd3c3e16466a72d7f9bfd86e8cea0d4b", size = 1673166 },
58
+ { url = "https://files.pythonhosted.org/packages/03/61/425397a9a2839c609d09fdb53d940472f316a2dbeaa77a35b2628dae6284/aiohttp-3.11.13-cp313-cp313-win32.whl", hash = "sha256:507ab05d90586dacb4f26a001c3abf912eb719d05635cbfad930bdbeb469b36c", size = 410615 },
59
+ { url = "https://files.pythonhosted.org/packages/9c/54/ebb815bc0fe057d8e7a11c086c479e972e827082f39aeebc6019dd4f0862/aiohttp-3.11.13-cp313-cp313-win_amd64.whl", hash = "sha256:5ceb81a4db2decdfa087381b5fc5847aa448244f973e5da232610304e199e7b2", size = 436452 },
60
60
  ]
61
61
 
62
62
  [[package]]
@@ -168,30 +168,30 @@ wheels = [
168
168
 
169
169
  [[package]]
170
170
  name = "boto3"
171
- version = "1.36.25"
171
+ version = "1.36.26"
172
172
  source = { registry = "https://pypi.org/simple" }
173
173
  dependencies = [
174
174
  { name = "botocore" },
175
175
  { name = "jmespath" },
176
176
  { name = "s3transfer" },
177
177
  ]
178
- sdist = { url = "https://files.pythonhosted.org/packages/0d/4d/1ea0720c173814f2055bf9ac6937a74b559169fa66602be7f37e809dda1e/boto3-1.36.25.tar.gz", hash = "sha256:a057c19adffb48737c192bdb10f9d85e0d9dcecd21327f51520c15db9022a835", size = 111018 }
178
+ sdist = { url = "https://files.pythonhosted.org/packages/79/af/2082fde2cbd81f8b60fd46e3ac07a0f841abfdb9818b818d560e42b5c444/boto3-1.36.26.tar.gz", hash = "sha256:523b69457eee55ac15aa707c0e768b2a45ca1521f95b2442931090633ec72458", size = 111027 }
179
179
  wheels = [
180
- { url = "https://files.pythonhosted.org/packages/36/0d/cc521e7b0ffe37b099f9183ced90e8f93e75910611c8b9b10968a30a2715/boto3-1.36.25-py3-none-any.whl", hash = "sha256:41fb90a516995946563ec91b9d891e2516c58617e9556d5e86dfa62da3fdebe6", size = 139181 },
180
+ { url = "https://files.pythonhosted.org/packages/b1/a7/9081049e432f5130c6bd4d86f4db7a7729f812ebceda59baff69a06b19a5/boto3-1.36.26-py3-none-any.whl", hash = "sha256:f67d014a7c5a3cd540606d64d7cb9eec3600cf42acab1ac0518df9751ae115e2", size = 139178 },
181
181
  ]
182
182
 
183
183
  [[package]]
184
184
  name = "botocore"
185
- version = "1.36.25"
185
+ version = "1.36.26"
186
186
  source = { registry = "https://pypi.org/simple" }
187
187
  dependencies = [
188
188
  { name = "jmespath" },
189
189
  { name = "python-dateutil" },
190
190
  { name = "urllib3" },
191
191
  ]
192
- sdist = { url = "https://files.pythonhosted.org/packages/17/e7/3d93e2b5be18486a9c14fc3fda1597c5f3835a9766eb7f2ba9f144fca73f/botocore-1.36.25.tar.gz", hash = "sha256:3b0a857d2621c336fb82a36cb6da4b6e062d346451ac46d110b074e5e5fd7cfc", size = 13573787 }
192
+ sdist = { url = "https://files.pythonhosted.org/packages/69/db/caa8778cf98ecbe0ad0efd7fbf673e2d036373386582e15dffff80bf16e1/botocore-1.36.26.tar.gz", hash = "sha256:4a63bcef7ecf6146fd3a61dc4f9b33b7473b49bdaf1770e9aaca6eee0c9eab62", size = 13574958 }
193
193
  wheels = [
194
- { url = "https://files.pythonhosted.org/packages/b5/e9/107e5ab6b0b02c3d766a850238741c02723ae249dcfe76c72b9c76d7b67b/botocore-1.36.25-py3-none-any.whl", hash = "sha256:04c8ff03531e8d92baa8c98d1850bdf01668a805467f4222b65e5325f94aa8af", size = 13360625 },
194
+ { url = "https://files.pythonhosted.org/packages/dd/0c/a3eeca35b22ac8f441d412881582a5f3b8665de0269baf9fdeb8e86d7f1c/botocore-1.36.26-py3-none-any.whl", hash = "sha256:4e3f19913887a58502e71ef8d696fe7eaa54de7813ff73390cd5883f837dfa6e", size = 13360675 },
195
195
  ]
196
196
 
197
197
  [[package]]
@@ -556,14 +556,13 @@ wheels = [
556
556
 
557
557
  [[package]]
558
558
  name = "python-terminusgps"
559
- version = "20.6.1"
559
+ version = "20.7.0"
560
560
  source = { editable = "." }
561
561
  dependencies = [
562
562
  { name = "argparse" },
563
563
  { name = "authorizenet" },
564
564
  { name = "boto3" },
565
565
  { name = "django" },
566
- { name = "lxml" },
567
566
  { name = "python-wialon" },
568
567
  { name = "twilio" },
569
568
  ]
@@ -581,7 +580,6 @@ requires-dist = [
581
580
  { name = "authorizenet", specifier = ">=1.1.5" },
582
581
  { name = "boto3", specifier = ">=1.34.144" },
583
582
  { name = "django", specifier = ">=5.1.5" },
584
- { name = "lxml", specifier = "==4.9.4" },
585
583
  { name = "python-wialon", specifier = ">=1.2.4" },
586
584
  { name = "twilio", specifier = ">=9.4.5" },
587
585
  ]
@@ -632,11 +630,11 @@ wheels = [
632
630
 
633
631
  [[package]]
634
632
  name = "roman-numerals-py"
635
- version = "3.0.0"
633
+ version = "3.1.0"
636
634
  source = { registry = "https://pypi.org/simple" }
637
- sdist = { url = "https://files.pythonhosted.org/packages/9e/78/9491ab144c9cb2d97aa74d6f632bd6f4be67957de03f945a23a67415d859/roman_numerals_py-3.0.0.tar.gz", hash = "sha256:91199c4373658c03d87d9fe004f4a5120a20f6cb192be745c2377cce274ef41c", size = 8970 }
635
+ sdist = { url = "https://files.pythonhosted.org/packages/30/76/48fd56d17c5bdbdf65609abbc67288728a98ed4c02919428d4f52d23b24b/roman_numerals_py-3.1.0.tar.gz", hash = "sha256:be4bf804f083a4ce001b5eb7e3c0862479d10f94c936f6c4e5f250aa5ff5bd2d", size = 9017 }
638
636
  wheels = [
639
- { url = "https://files.pythonhosted.org/packages/27/d0/a3a2fed015e95b9e81619182adc472540f9786183febfaef8b7c5e909418/roman_numerals_py-3.0.0-py3-none-any.whl", hash = "sha256:a1421ce66b3eab7e8735065458de3fa5c4a46263d50f9f4ac8f0e5e7701dd125", size = 4416 },
637
+ { url = "https://files.pythonhosted.org/packages/53/97/d2cbbaa10c9b826af0e10fdf836e1bf344d9f0abb873ebc34d1f49642d3f/roman_numerals_py-3.1.0-py3-none-any.whl", hash = "sha256:9da2ad2fb670bcf24e81070ceb3be72f6c11c440d73bd579fbeca1e9f330954c", size = 7742 },
640
638
  ]
641
639
 
642
640
  [[package]]
@@ -715,7 +713,7 @@ wheels = [
715
713
 
716
714
  [[package]]
717
715
  name = "sphinx"
718
- version = "8.2.0"
716
+ version = "8.2.1"
719
717
  source = { registry = "https://pypi.org/simple" }
720
718
  dependencies = [
721
719
  { name = "alabaster" },
@@ -736,9 +734,9 @@ dependencies = [
736
734
  { name = "sphinxcontrib-qthelp" },
737
735
  { name = "sphinxcontrib-serializinghtml" },
738
736
  ]
739
- sdist = { url = "https://files.pythonhosted.org/packages/81/46/08fe30fc7a6b0e8ff1f502e44133d3a1bd9453d7ab884c2ac7f0ef280920/sphinx-8.2.0.tar.gz", hash = "sha256:5b0067853d6e97f3fa87563e3404ebd008fce03525b55b25da90706764da6215", size = 8321764 }
737
+ sdist = { url = "https://files.pythonhosted.org/packages/99/4b/95bdb36eaee30698f2d244d52e1b9e58642af56525d4b02fcd0f7312c27c/sphinx-8.2.1.tar.gz", hash = "sha256:e4b932951b9c18b039f73b72e4e63afe967d90408700ec222b981ac24647c01e", size = 8321376 }
740
738
  wheels = [
741
- { url = "https://files.pythonhosted.org/packages/ef/4d/bbe0250199b9dfa8b25a1949ff13d81e7a6f3bfde37fe373a881bd78a37a/sphinx-8.2.0-py3-none-any.whl", hash = "sha256:3c0a40ff71ace28b316bde7387d93b9249a3688c202181519689b66d5d0aed53", size = 3589193 },
739
+ { url = "https://files.pythonhosted.org/packages/cf/aa/282768cff0039b227a923cb65686539bb606e448c594d4fdee4d2c7765a1/sphinx-8.2.1-py3-none-any.whl", hash = "sha256:b5d2bb3cdf6207fcacde9f92085d2b97667b05b9c346eaec426ca4be8af505e9", size = 3589415 },
742
740
  ]
743
741
 
744
742
  [[package]]
@@ -1,60 +0,0 @@
1
- from django.db import models
2
-
3
- from terminusgps.wialon.items.base import WialonBase
4
-
5
-
6
- class WialonGeofence(WialonBase):
7
- def __new__(cls) -> "WialonGeofence":
8
- raise NotImplementedError()
9
-
10
- class WialonGeofenceShape(models.IntegerChoices):
11
- LINE = 1
12
- POLYGON = 2
13
- CIRCLE = 3
14
-
15
- class WialonGeofenceColor(models.IntegerChoices):
16
- RED = int("ff0000", 16)
17
- ORANGE = int("ff7b00", 16)
18
- YELLOW = int("fffb00", 16)
19
- GREEN = int("20ff00", 16)
20
- BLUE = int("0090ff", 16)
21
- PURPLE = int("7000ff", 16)
22
- WHITE = int("f3f3f3", 16)
23
- BLACK = int("030303", 16)
24
-
25
- def create(
26
- self,
27
- resource_id: str | int,
28
- name: str,
29
- xpos: float,
30
- ypos: float,
31
- desc: str | None = None,
32
- shape: int = WialonGeofenceShape.CIRCLE,
33
- width: int = 100,
34
- flags: int = 0x04,
35
- color: int = WialonGeofenceColor.GREEN,
36
- text_color: int = WialonGeofenceColor.BLACK,
37
- text_size: int = 12,
38
- min_zoom: int = 2,
39
- max_zoom: int = 19,
40
- ) -> int | None:
41
- response = self.session.wialon_api.resource_update_zone(
42
- **{
43
- "itemId": resource_id,
44
- "id": 0,
45
- "callMode": "create",
46
- "n": name,
47
- "d": desc if desc else name,
48
- "t": shape,
49
- "w": width,
50
- "f": flags,
51
- "c": color,
52
- "tc": text_color,
53
- "ts": text_size,
54
- "min": min_zoom,
55
- "max": max_zoom,
56
- "p": [{"x": xpos, "y": ypos, "r": width}],
57
- }
58
- )
59
- if response:
60
- return int(response[0])
@@ -1,4 +0,0 @@
1
- from terminusgps.wialon.items.base import WialonBase
2
-
3
-
4
- class WialonNotification(WialonBase): ...