python-terminusgps 21.0.0__py3-none-any.whl → 22.0.0__py3-none-any.whl

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.

@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: python-terminusgps
3
- Version: 21.0.0
3
+ Version: 22.0.0
4
4
  Summary: Provides abstractions/utilities for working with Wialon API, Authorize.NET API, AWS API, and more.
5
5
  Project-URL: Documentation, https://app.terminusgps.com/docs/apps/python-terminusgps/index.html
6
6
  Project-URL: Repository, https://github.com/terminusgps/python-terminusgps
@@ -16,5 +16,9 @@ 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: matplotlib>=3.10.1
20
+ Requires-Dist: opencv-python>=4.11.0.86
21
+ Requires-Dist: pyqt6>=6.8.1
19
22
  Requires-Dist: python-wialon>=1.2.4
23
+ Requires-Dist: pyzbar>=0.1.9
20
24
  Requires-Dist: twilio>=9.4.5
@@ -11,6 +11,8 @@ terminusgps/authorizenet/profiles/payments.py,sha256=qOWp-gO6qBCADP98WjoNCHm-jtq
11
11
  terminusgps/aws/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
12
12
  terminusgps/aws/secrets.py,sha256=kgRA77rs0mD4berWRLkPtJLOe4Grf--o5f8NzwQqXCk,360
13
13
  terminusgps/aws/ses.py,sha256=sDca2GjMaZvUt3kUPtGCpcqHiOkij9lMV1ogZofgYUU,2372
14
+ terminusgps/opencv/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
15
+ terminusgps/opencv/barcodes.py,sha256=NmdpUnixlGJI-6shbKGcb6-M_IZvgSZJRDVSsI7pcFg,669
14
16
  terminusgps/twilio/__init__.py,sha256=dYo41F2jft_eHDWSUtSpKGSRG1bewq_qClqilUJZkYM,33
15
17
  terminusgps/twilio/caller.py,sha256=nHCIwUulo-C_v2orsp6OY0nuJA6YetSkxpMTwrRQ-uA,1831
16
18
  terminusgps/wialon/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
@@ -18,16 +20,16 @@ terminusgps/wialon/constants.py,sha256=n1ux68oWYWnzeZdN811Iw_Lk78KBM0YMJMoonn67u
18
20
  terminusgps/wialon/flags.py,sha256=_NIL3mrEGhvI5YISVjimjYtUatdgOqhZPJX368MtKSU,13959
19
21
  terminusgps/wialon/logger.py,sha256=nUBsaLMaffSaAHGHAM6mFXDzix9hbNecVtA3INVtii8,968
20
22
  terminusgps/wialon/session.py,sha256=6xg65LZz6cebWclTQp1KRLvPss0aM-bWhAmmwiDOlMg,10267
21
- terminusgps/wialon/utils.py,sha256=IN45hASI6iP3Wd35ejGeoIYDIQ_w65-W05eVUdWFRxo,5712
23
+ terminusgps/wialon/utils.py,sha256=HUuBgkqJzzsFHGKPgf_YAE0e5Oui8xdaYtb9fv_ibOc,6344
22
24
  terminusgps/wialon/items/__init__.py,sha256=3BVthghekMvhMQSzQgBMlD_phxmKSmp3Zvmo-z0O8Bs,211
23
25
  terminusgps/wialon/items/base.py,sha256=EAtzlnCvB7WTu3iX1bV1-S9TvwXc-Eez7e0X4TMiK9U,6943
24
- terminusgps/wialon/items/resource.py,sha256=5m0KdYu9lImNIfcAR8XcrZ6VnsXwGIQyXeRCHrx5EUo,14768
26
+ terminusgps/wialon/items/resource.py,sha256=qmQKEakJa9LH5YkI9-iBDA0hsotc5ctcwdb7kZuXdfQ,14549
25
27
  terminusgps/wialon/items/retranslator.py,sha256=8q9EDc92w92MElnHIeEzH3Ra4kiPXrx4t9V5nPDZuRU,3728
26
28
  terminusgps/wialon/items/route.py,sha256=PTJx1gmT_PGz7nlSSUS2VzjYD-aAuvkEOIdIFneUSSQ,1148
27
- terminusgps/wialon/items/unit.py,sha256=K5IoGSRoH_JiAZoKK6Wb9DToaDScaL7mPKqSOAwtg0A,8618
29
+ terminusgps/wialon/items/unit.py,sha256=oNqLdblY6uWd08FCInSix9gzDYk-O1YdgbkENZ-1vjs,8541
28
30
  terminusgps/wialon/items/unit_group.py,sha256=vGVJMBY1BrKK0tP-C1DCIz4Bh6P-HKRnKY1g8g95UIs,5031
29
31
  terminusgps/wialon/items/user.py,sha256=INwAibQVmjNNelepQXMfDevgJqMvIjHHgEjAMLRvhB0,7082
30
- python_terminusgps-21.0.0.dist-info/METADATA,sha256=hFTGuFn_AJi118S-oxWMwIZAQCFI3Mv-6Bf78g8UNnw,912
31
- python_terminusgps-21.0.0.dist-info/WHEEL,sha256=qtCwoSJWgHk21S1Kb4ihdzI2rlJ1ZKaIurTj_ngOhyQ,87
32
- python_terminusgps-21.0.0.dist-info/licenses/COPYING,sha256=OXLcl0T2SZ8Pmy2_dmlvKuetivmyPd5m1q-Gyd-zaYY,35149
33
- python_terminusgps-21.0.0.dist-info/RECORD,,
32
+ python_terminusgps-22.0.0.dist-info/METADATA,sha256=l1aRSUtjM8xkFRzAohx1YK_hQ15zVfjiRyFD1dNwUQY,1043
33
+ python_terminusgps-22.0.0.dist-info/WHEEL,sha256=qtCwoSJWgHk21S1Kb4ihdzI2rlJ1ZKaIurTj_ngOhyQ,87
34
+ python_terminusgps-22.0.0.dist-info/licenses/COPYING,sha256=OXLcl0T2SZ8Pmy2_dmlvKuetivmyPd5m1q-Gyd-zaYY,35149
35
+ python_terminusgps-22.0.0.dist-info/RECORD,,
File without changes
@@ -0,0 +1,31 @@
1
+ import cv2 as cv
2
+ from pyzbar.pyzbar import decode
3
+
4
+
5
+ def read_barcode(filepath: str) -> None:
6
+ img = cv.imread(filepath)
7
+ barcodes = decode(img)
8
+
9
+ if not barcodes:
10
+ raise ValueError("No barcodes detected.")
11
+
12
+ for barcode in barcodes:
13
+ (x, y, w, h) = barcode.rect
14
+ cv.rectangle(img, (x - 10, y - 10), (x + w + 10, y + h + 10), (255, 0, 0), 2)
15
+
16
+ print(f"{barcode.data = }")
17
+ print(f"{barcode.type = }")
18
+
19
+ cv.imshow("Image", img)
20
+ cv.waitKey(0)
21
+ cv.destroyAllWindows()
22
+
23
+
24
+ def main() -> None:
25
+ filepath = "/home/blake/sift_keypoints.jpg"
26
+ read_barcode(filepath)
27
+ return
28
+
29
+
30
+ if __name__ == "__main__":
31
+ main()
@@ -58,12 +58,14 @@ class WialonResource(WialonBase):
58
58
  :type: :py:obj:`bool`
59
59
 
60
60
  """
61
- if not self.is_account:
62
- return False # Resources cannot have dealer rights
63
- return bool(
64
- self.session.wialon_api.get_account_data(
65
- **{"itemId": self.id, "type": 1}
66
- ).get("dealerRights")
61
+ return (
62
+ bool(
63
+ self.session.wialon_api.get_account_data(
64
+ **{"itemId": self.id, "type": 1}
65
+ ).get("dealerRights")
66
+ )
67
+ if self.is_account
68
+ else False
67
69
  )
68
70
 
69
71
  @property
@@ -302,10 +304,6 @@ class WialonResource(WialonBase):
302
304
  :type phone: :py:obj:`str`
303
305
  :param mobile_auth_code: Authentication code for Wialon mobile app.
304
306
  :type mobile_auth_code: :py:obj:`str`
305
- :param image_checksum: Checksum for driver image.
306
- :type image_checksum: :py:obj:`str`
307
- :param image_ratio: Driver image aspect ratio.
308
- :type image_ratio: :py:obj:`float` | :py:obj:`None`
309
307
  :param custom_fields: Additional custom fields to add to the driver.
310
308
  :type custom_fields: :py:obj:`dict` | :py:obj:`None`
311
309
  :raises WialonError: If something goes wrong calling the Wialon API.
@@ -200,13 +200,11 @@ class WialonUnit(WialonBase):
200
200
 
201
201
  def clean_phone_numbers(self, phones: list[str]) -> list[str]:
202
202
  """Takes a list of phone numbers and returns a list of clean phone numbers."""
203
- cleaned_phones = []
204
- for num in phones:
205
- if "," in num:
206
- cleaned_phones.extend(num.split(","))
207
- else:
208
- cleaned_phones.append(num)
209
- return cleaned_phones
203
+ return [
204
+ clean_num
205
+ for num in phones
206
+ for clean_num in (num.split(",") if "," in num else [num])
207
+ ]
210
208
 
211
209
  def _get_afield_phone_numbers(self, key: str = "to_number") -> list[str] | None:
212
210
  """
@@ -32,7 +32,7 @@ def get_hw_type_id(name: str, session: WialonSession) -> int | None:
32
32
  return int(hw_types.get(name)) if name in hw_types.keys() else None
33
33
 
34
34
 
35
- def get_id_from_iccid(iccid: str, session: WialonSession) -> str | None:
35
+ def get_id_from_imei(imei: str, session: WialonSession) -> str | None:
36
36
  """
37
37
  Takes a Wialon unit's IMEI # and returns its unit id, if it exists.
38
38
 
@@ -50,7 +50,7 @@ def get_id_from_iccid(iccid: str, session: WialonSession) -> str | None:
50
50
  "spec": {
51
51
  "itemsType": "avl_unit",
52
52
  "propName": "sys_unique_id",
53
- "propValueMask": f"*{iccid}*",
53
+ "propValueMask": f"*{imei}*",
54
54
  "sortType": "sys_unique_id",
55
55
  "propType": "property",
56
56
  "or_logic": 0,
@@ -66,6 +66,24 @@ def get_id_from_iccid(iccid: str, session: WialonSession) -> str | None:
66
66
  return response["items"][0].get("id")
67
67
 
68
68
 
69
+ def get_id_from_iccid(iccid: str, session: WialonSession) -> str | None:
70
+ """
71
+ DEPRECATED: Use :py:func:`~terminusgps.wialon.utils.get_id_from_imei`.
72
+
73
+ Takes a Wialon unit's IMEI # and returns its unit id, if it exists.
74
+
75
+ :param iccid: A unique id.
76
+ :type iccid: :py:obj:`str`
77
+ :param session: A valid Wialon API session.
78
+ :type session: :py:obj:`~terminusgps.wialon.session.WialonSession`
79
+ :raises WialonError: If something goes wrong with Wialon.
80
+ :returns: A Wialon object id, if it was found.
81
+ :rtype: :py:obj:`str` | :py:obj:`None`
82
+
83
+ """
84
+ return get_id_from_imei(imei=iccid, session=session)
85
+
86
+
69
87
  def get_wialon_cls(items_type: str) -> typing.Type[WialonBase]:
70
88
  """
71
89
  Returns a Wialon object class based on items_type.