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.
- {python_terminusgps-21.0.0.dist-info → python_terminusgps-22.0.0.dist-info}/METADATA +5 -1
- {python_terminusgps-21.0.0.dist-info → python_terminusgps-22.0.0.dist-info}/RECORD +9 -7
- terminusgps/opencv/__init__.py +0 -0
- terminusgps/opencv/barcodes.py +31 -0
- terminusgps/wialon/items/resource.py +8 -10
- terminusgps/wialon/items/unit.py +5 -7
- terminusgps/wialon/utils.py +20 -2
- {python_terminusgps-21.0.0.dist-info → python_terminusgps-22.0.0.dist-info}/WHEEL +0 -0
- {python_terminusgps-21.0.0.dist-info → python_terminusgps-22.0.0.dist-info}/licenses/COPYING +0 -0
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: python-terminusgps
|
|
3
|
-
Version:
|
|
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=
|
|
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=
|
|
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=
|
|
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-
|
|
31
|
-
python_terminusgps-
|
|
32
|
-
python_terminusgps-
|
|
33
|
-
python_terminusgps-
|
|
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
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
)
|
|
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.
|
terminusgps/wialon/items/unit.py
CHANGED
|
@@ -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
|
-
|
|
204
|
-
|
|
205
|
-
|
|
206
|
-
|
|
207
|
-
|
|
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
|
"""
|
terminusgps/wialon/utils.py
CHANGED
|
@@ -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
|
|
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"*{
|
|
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.
|
|
File without changes
|
{python_terminusgps-21.0.0.dist-info → python_terminusgps-22.0.0.dist-info}/licenses/COPYING
RENAMED
|
File without changes
|