python-terminusgps 37.3.0__tar.gz → 37.4.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 (338) hide show
  1. {python_terminusgps-37.3.0 → python_terminusgps-37.4.0}/PKG-INFO +1 -1
  2. {python_terminusgps-37.3.0 → python_terminusgps-37.4.0}/pyproject.toml +1 -1
  3. python_terminusgps-37.4.0/terminusgps/wialon/renderer.py +188 -0
  4. {python_terminusgps-37.3.0 → python_terminusgps-37.4.0}/terminusgps/wialon/session.py +40 -218
  5. {python_terminusgps-37.3.0 → python_terminusgps-37.4.0}/uv.lock +65 -65
  6. {python_terminusgps-37.3.0 → python_terminusgps-37.4.0}/.gitignore +0 -0
  7. {python_terminusgps-37.3.0 → python_terminusgps-37.4.0}/COPYING +0 -0
  8. {python_terminusgps-37.3.0 → python_terminusgps-37.4.0}/README.md +0 -0
  9. {python_terminusgps-37.3.0 → python_terminusgps-37.4.0}/docs/Makefile +0 -0
  10. {python_terminusgps-37.3.0 → python_terminusgps-37.4.0}/docs/build/coverage/c.txt +0 -0
  11. {python_terminusgps-37.3.0 → python_terminusgps-37.4.0}/docs/build/coverage/python.txt +0 -0
  12. {python_terminusgps-37.3.0 → python_terminusgps-37.4.0}/docs/build/coverage/undoc.pickle +0 -0
  13. {python_terminusgps-37.3.0 → python_terminusgps-37.4.0}/docs/build/doctrees/authorizenet/auth.doctree +0 -0
  14. {python_terminusgps-37.3.0 → python_terminusgps-37.4.0}/docs/build/doctrees/authorizenet/constants.doctree +0 -0
  15. {python_terminusgps-37.3.0 → python_terminusgps-37.4.0}/docs/build/doctrees/authorizenet/controllers.doctree +0 -0
  16. {python_terminusgps-37.3.0 → python_terminusgps-37.4.0}/docs/build/doctrees/authorizenet/examples.doctree +0 -0
  17. {python_terminusgps-37.3.0 → python_terminusgps-37.4.0}/docs/build/doctrees/authorizenet/index.doctree +0 -0
  18. {python_terminusgps-37.3.0 → python_terminusgps-37.4.0}/docs/build/doctrees/authorizenet/profiles.doctree +0 -0
  19. {python_terminusgps-37.3.0 → python_terminusgps-37.4.0}/docs/build/doctrees/authorizenet/subscriptions.doctree +0 -0
  20. {python_terminusgps-37.3.0 → python_terminusgps-37.4.0}/docs/build/doctrees/authorizenet/utils.doctree +0 -0
  21. {python_terminusgps-37.3.0 → python_terminusgps-37.4.0}/docs/build/doctrees/aws/index.doctree +0 -0
  22. {python_terminusgps-37.3.0 → python_terminusgps-37.4.0}/docs/build/doctrees/aws/notifications.doctree +0 -0
  23. {python_terminusgps-37.3.0 → python_terminusgps-37.4.0}/docs/build/doctrees/aws/secrets.doctree +0 -0
  24. {python_terminusgps-37.3.0 → python_terminusgps-37.4.0}/docs/build/doctrees/aws/speech.doctree +0 -0
  25. {python_terminusgps-37.3.0 → python_terminusgps-37.4.0}/docs/build/doctrees/aws/utils.doctree +0 -0
  26. {python_terminusgps-37.3.0 → python_terminusgps-37.4.0}/docs/build/doctrees/django/forms.doctree +0 -0
  27. {python_terminusgps-37.3.0 → python_terminusgps-37.4.0}/docs/build/doctrees/django/index.doctree +0 -0
  28. {python_terminusgps-37.3.0 → python_terminusgps-37.4.0}/docs/build/doctrees/django/mixins.doctree +0 -0
  29. {python_terminusgps-37.3.0 → python_terminusgps-37.4.0}/docs/build/doctrees/django/settings.doctree +0 -0
  30. {python_terminusgps-37.3.0 → python_terminusgps-37.4.0}/docs/build/doctrees/django/validators.doctree +0 -0
  31. {python_terminusgps-37.3.0 → python_terminusgps-37.4.0}/docs/build/doctrees/environment.pickle +0 -0
  32. {python_terminusgps-37.3.0 → python_terminusgps-37.4.0}/docs/build/doctrees/index.doctree +0 -0
  33. {python_terminusgps-37.3.0 → python_terminusgps-37.4.0}/docs/build/doctrees/mixins.doctree +0 -0
  34. {python_terminusgps-37.3.0 → python_terminusgps-37.4.0}/docs/build/doctrees/settings.doctree +0 -0
  35. {python_terminusgps-37.3.0 → python_terminusgps-37.4.0}/docs/build/doctrees/twilio/caller.doctree +0 -0
  36. {python_terminusgps-37.3.0 → python_terminusgps-37.4.0}/docs/build/doctrees/twilio/examples.doctree +0 -0
  37. {python_terminusgps-37.3.0 → python_terminusgps-37.4.0}/docs/build/doctrees/twilio/index.doctree +0 -0
  38. {python_terminusgps-37.3.0 → python_terminusgps-37.4.0}/docs/build/doctrees/twilio/settings.doctree +0 -0
  39. {python_terminusgps-37.3.0 → python_terminusgps-37.4.0}/docs/build/doctrees/validators.doctree +0 -0
  40. {python_terminusgps-37.3.0 → python_terminusgps-37.4.0}/docs/build/doctrees/wialon/constants.doctree +0 -0
  41. {python_terminusgps-37.3.0 → python_terminusgps-37.4.0}/docs/build/doctrees/wialon/errors.doctree +0 -0
  42. {python_terminusgps-37.3.0 → python_terminusgps-37.4.0}/docs/build/doctrees/wialon/examples.doctree +0 -0
  43. {python_terminusgps-37.3.0 → python_terminusgps-37.4.0}/docs/build/doctrees/wialon/flags.doctree +0 -0
  44. {python_terminusgps-37.3.0 → python_terminusgps-37.4.0}/docs/build/doctrees/wialon/index.doctree +0 -0
  45. {python_terminusgps-37.3.0 → python_terminusgps-37.4.0}/docs/build/doctrees/wialon/items.doctree +0 -0
  46. {python_terminusgps-37.3.0 → python_terminusgps-37.4.0}/docs/build/doctrees/wialon/session.doctree +0 -0
  47. {python_terminusgps-37.3.0 → python_terminusgps-37.4.0}/docs/build/doctrees/wialon/settings.doctree +0 -0
  48. {python_terminusgps-37.3.0 → python_terminusgps-37.4.0}/docs/build/doctrees/wialon/utils.doctree +0 -0
  49. {python_terminusgps-37.3.0 → python_terminusgps-37.4.0}/docs/build/html/_modules/index.html +0 -0
  50. {python_terminusgps-37.3.0 → python_terminusgps-37.4.0}/docs/build/html/_modules/terminusgps/authorizenet/auth.html +0 -0
  51. {python_terminusgps-37.3.0 → python_terminusgps-37.4.0}/docs/build/html/_modules/terminusgps/authorizenet/constants.html +0 -0
  52. {python_terminusgps-37.3.0 → python_terminusgps-37.4.0}/docs/build/html/_modules/terminusgps/authorizenet/controllers.html +0 -0
  53. {python_terminusgps-37.3.0 → python_terminusgps-37.4.0}/docs/build/html/_modules/terminusgps/authorizenet/errors.html +0 -0
  54. {python_terminusgps-37.3.0 → python_terminusgps-37.4.0}/docs/build/html/_modules/terminusgps/authorizenet/profiles/addresses.html +0 -0
  55. {python_terminusgps-37.3.0 → python_terminusgps-37.4.0}/docs/build/html/_modules/terminusgps/authorizenet/profiles/base.html +0 -0
  56. {python_terminusgps-37.3.0 → python_terminusgps-37.4.0}/docs/build/html/_modules/terminusgps/authorizenet/profiles/customers.html +0 -0
  57. {python_terminusgps-37.3.0 → python_terminusgps-37.4.0}/docs/build/html/_modules/terminusgps/authorizenet/profiles/payments.html +0 -0
  58. {python_terminusgps-37.3.0 → python_terminusgps-37.4.0}/docs/build/html/_modules/terminusgps/authorizenet/profiles/subscriptions.html +0 -0
  59. {python_terminusgps-37.3.0 → python_terminusgps-37.4.0}/docs/build/html/_modules/terminusgps/authorizenet/subscriptions/subscriptions.html +0 -0
  60. {python_terminusgps-37.3.0 → python_terminusgps-37.4.0}/docs/build/html/_modules/terminusgps/authorizenet/utils.html +0 -0
  61. {python_terminusgps-37.3.0 → python_terminusgps-37.4.0}/docs/build/html/_modules/terminusgps/aws/notifications.html +0 -0
  62. {python_terminusgps-37.3.0 → python_terminusgps-37.4.0}/docs/build/html/_modules/terminusgps/aws/secrets.html +0 -0
  63. {python_terminusgps-37.3.0 → python_terminusgps-37.4.0}/docs/build/html/_modules/terminusgps/aws/speech.html +0 -0
  64. {python_terminusgps-37.3.0 → python_terminusgps-37.4.0}/docs/build/html/_modules/terminusgps/django/forms/fields.html +0 -0
  65. {python_terminusgps-37.3.0 → python_terminusgps-37.4.0}/docs/build/html/_modules/terminusgps/django/forms/renderer.html +0 -0
  66. {python_terminusgps-37.3.0 → python_terminusgps-37.4.0}/docs/build/html/_modules/terminusgps/django/forms/widgets.html +0 -0
  67. {python_terminusgps-37.3.0 → python_terminusgps-37.4.0}/docs/build/html/_modules/terminusgps/django/forms.html +0 -0
  68. {python_terminusgps-37.3.0 → python_terminusgps-37.4.0}/docs/build/html/_modules/terminusgps/django/mixins.html +0 -0
  69. {python_terminusgps-37.3.0 → python_terminusgps-37.4.0}/docs/build/html/_modules/terminusgps/django/validators.html +0 -0
  70. {python_terminusgps-37.3.0 → python_terminusgps-37.4.0}/docs/build/html/_modules/terminusgps/mixins.html +0 -0
  71. {python_terminusgps-37.3.0 → python_terminusgps-37.4.0}/docs/build/html/_modules/terminusgps/twilio/caller.html +0 -0
  72. {python_terminusgps-37.3.0 → python_terminusgps-37.4.0}/docs/build/html/_modules/terminusgps/wialon/constants.html +0 -0
  73. {python_terminusgps-37.3.0 → python_terminusgps-37.4.0}/docs/build/html/_modules/terminusgps/wialon/flags.html +0 -0
  74. {python_terminusgps-37.3.0 → python_terminusgps-37.4.0}/docs/build/html/_modules/terminusgps/wialon/items/base.html +0 -0
  75. {python_terminusgps-37.3.0 → python_terminusgps-37.4.0}/docs/build/html/_modules/terminusgps/wialon/items/geofence.html +0 -0
  76. {python_terminusgps-37.3.0 → python_terminusgps-37.4.0}/docs/build/html/_modules/terminusgps/wialon/items/notification.html +0 -0
  77. {python_terminusgps-37.3.0 → python_terminusgps-37.4.0}/docs/build/html/_modules/terminusgps/wialon/items/resource.html +0 -0
  78. {python_terminusgps-37.3.0 → python_terminusgps-37.4.0}/docs/build/html/_modules/terminusgps/wialon/items/retranslator.html +0 -0
  79. {python_terminusgps-37.3.0 → python_terminusgps-37.4.0}/docs/build/html/_modules/terminusgps/wialon/items/route.html +0 -0
  80. {python_terminusgps-37.3.0 → python_terminusgps-37.4.0}/docs/build/html/_modules/terminusgps/wialon/items/unit.html +0 -0
  81. {python_terminusgps-37.3.0 → python_terminusgps-37.4.0}/docs/build/html/_modules/terminusgps/wialon/items/unit_group.html +0 -0
  82. {python_terminusgps-37.3.0 → python_terminusgps-37.4.0}/docs/build/html/_modules/terminusgps/wialon/items/user.html +0 -0
  83. {python_terminusgps-37.3.0 → python_terminusgps-37.4.0}/docs/build/html/_modules/terminusgps/wialon/session.html +0 -0
  84. {python_terminusgps-37.3.0 → python_terminusgps-37.4.0}/docs/build/html/_modules/terminusgps/wialon/utils.html +0 -0
  85. {python_terminusgps-37.3.0 → python_terminusgps-37.4.0}/docs/build/html/_modules/wialon/api.html +0 -0
  86. {python_terminusgps-37.3.0 → python_terminusgps-37.4.0}/docs/build/html/_sources/authorizenet/auth.rst.txt +0 -0
  87. {python_terminusgps-37.3.0 → python_terminusgps-37.4.0}/docs/build/html/_sources/authorizenet/constants.rst.txt +0 -0
  88. {python_terminusgps-37.3.0 → python_terminusgps-37.4.0}/docs/build/html/_sources/authorizenet/controllers.rst.txt +0 -0
  89. {python_terminusgps-37.3.0 → python_terminusgps-37.4.0}/docs/build/html/_sources/authorizenet/examples.rst.txt +0 -0
  90. {python_terminusgps-37.3.0 → python_terminusgps-37.4.0}/docs/build/html/_sources/authorizenet/index.rst.txt +0 -0
  91. {python_terminusgps-37.3.0 → python_terminusgps-37.4.0}/docs/build/html/_sources/authorizenet/profiles.rst.txt +0 -0
  92. {python_terminusgps-37.3.0 → python_terminusgps-37.4.0}/docs/build/html/_sources/authorizenet/subscriptions.rst.txt +0 -0
  93. {python_terminusgps-37.3.0 → python_terminusgps-37.4.0}/docs/build/html/_sources/authorizenet/utils.rst.txt +0 -0
  94. {python_terminusgps-37.3.0 → python_terminusgps-37.4.0}/docs/build/html/_sources/aws/index.rst.txt +0 -0
  95. {python_terminusgps-37.3.0 → python_terminusgps-37.4.0}/docs/build/html/_sources/aws/notifications.rst.txt +0 -0
  96. {python_terminusgps-37.3.0 → python_terminusgps-37.4.0}/docs/build/html/_sources/aws/secrets.rst.txt +0 -0
  97. {python_terminusgps-37.3.0 → python_terminusgps-37.4.0}/docs/build/html/_sources/aws/speech.rst.txt +0 -0
  98. {python_terminusgps-37.3.0 → python_terminusgps-37.4.0}/docs/build/html/_sources/aws/utils.rst.txt +0 -0
  99. {python_terminusgps-37.3.0 → python_terminusgps-37.4.0}/docs/build/html/_sources/django/forms.rst.txt +0 -0
  100. {python_terminusgps-37.3.0 → python_terminusgps-37.4.0}/docs/build/html/_sources/django/index.rst.txt +0 -0
  101. {python_terminusgps-37.3.0 → python_terminusgps-37.4.0}/docs/build/html/_sources/django/mixins.rst.txt +0 -0
  102. {python_terminusgps-37.3.0 → python_terminusgps-37.4.0}/docs/build/html/_sources/django/settings.rst.txt +0 -0
  103. {python_terminusgps-37.3.0 → python_terminusgps-37.4.0}/docs/build/html/_sources/django/validators.rst.txt +0 -0
  104. {python_terminusgps-37.3.0 → python_terminusgps-37.4.0}/docs/build/html/_sources/index.rst.txt +0 -0
  105. {python_terminusgps-37.3.0 → python_terminusgps-37.4.0}/docs/build/html/_sources/mixins.rst.txt +0 -0
  106. {python_terminusgps-37.3.0 → python_terminusgps-37.4.0}/docs/build/html/_sources/settings.rst.txt +0 -0
  107. {python_terminusgps-37.3.0 → python_terminusgps-37.4.0}/docs/build/html/_sources/twilio/caller.rst.txt +0 -0
  108. {python_terminusgps-37.3.0 → python_terminusgps-37.4.0}/docs/build/html/_sources/twilio/examples.rst.txt +0 -0
  109. {python_terminusgps-37.3.0 → python_terminusgps-37.4.0}/docs/build/html/_sources/twilio/index.rst.txt +0 -0
  110. {python_terminusgps-37.3.0 → python_terminusgps-37.4.0}/docs/build/html/_sources/twilio/settings.rst.txt +0 -0
  111. {python_terminusgps-37.3.0 → python_terminusgps-37.4.0}/docs/build/html/_sources/validators.rst.txt +0 -0
  112. {python_terminusgps-37.3.0 → python_terminusgps-37.4.0}/docs/build/html/_sources/wialon/constants.rst.txt +0 -0
  113. {python_terminusgps-37.3.0 → python_terminusgps-37.4.0}/docs/build/html/_sources/wialon/errors.rst.txt +0 -0
  114. {python_terminusgps-37.3.0 → python_terminusgps-37.4.0}/docs/build/html/_sources/wialon/examples.rst.txt +0 -0
  115. {python_terminusgps-37.3.0 → python_terminusgps-37.4.0}/docs/build/html/_sources/wialon/flags.rst.txt +0 -0
  116. {python_terminusgps-37.3.0 → python_terminusgps-37.4.0}/docs/build/html/_sources/wialon/index.rst.txt +0 -0
  117. {python_terminusgps-37.3.0 → python_terminusgps-37.4.0}/docs/build/html/_sources/wialon/items.rst.txt +0 -0
  118. {python_terminusgps-37.3.0 → python_terminusgps-37.4.0}/docs/build/html/_sources/wialon/session.rst.txt +0 -0
  119. {python_terminusgps-37.3.0 → python_terminusgps-37.4.0}/docs/build/html/_sources/wialon/settings.rst.txt +0 -0
  120. {python_terminusgps-37.3.0 → python_terminusgps-37.4.0}/docs/build/html/_sources/wialon/utils.rst.txt +0 -0
  121. {python_terminusgps-37.3.0 → python_terminusgps-37.4.0}/docs/build/html/_static/0fc70aa4dfe4d16d7073.woff +0 -0
  122. {python_terminusgps-37.3.0 → python_terminusgps-37.4.0}/docs/build/html/_static/583e3f428bf2362b546d.woff +0 -0
  123. {python_terminusgps-37.3.0 → python_terminusgps-37.4.0}/docs/build/html/_static/5be6ec379613f10aea3f.woff +0 -0
  124. {python_terminusgps-37.3.0 → python_terminusgps-37.4.0}/docs/build/html/_static/76c1862325ea6f70eeff.woff2 +0 -0
  125. {python_terminusgps-37.3.0 → python_terminusgps-37.4.0}/docs/build/html/_static/83710c128240451d95af.woff +0 -0
  126. {python_terminusgps-37.3.0 → python_terminusgps-37.4.0}/docs/build/html/_static/_sphinx_javascript_frameworks_compat.js +0 -0
  127. {python_terminusgps-37.3.0 → python_terminusgps-37.4.0}/docs/build/html/_static/a63d39a1c104a2b3e87e.woff2 +0 -0
  128. {python_terminusgps-37.3.0 → python_terminusgps-37.4.0}/docs/build/html/_static/autoclasstoc.css +0 -0
  129. {python_terminusgps-37.3.0 → python_terminusgps-37.4.0}/docs/build/html/_static/awesome-docsearch.css +0 -0
  130. {python_terminusgps-37.3.0 → python_terminusgps-37.4.0}/docs/build/html/_static/awesome-docsearch.js +0 -0
  131. {python_terminusgps-37.3.0 → python_terminusgps-37.4.0}/docs/build/html/_static/awesome-sphinx-design.css +0 -0
  132. {python_terminusgps-37.3.0 → python_terminusgps-37.4.0}/docs/build/html/_static/awesome-sphinx-design.js +0 -0
  133. {python_terminusgps-37.3.0 → python_terminusgps-37.4.0}/docs/build/html/_static/b659956119f91f2342bc.woff2 +0 -0
  134. {python_terminusgps-37.3.0 → python_terminusgps-37.4.0}/docs/build/html/_static/basic.css +0 -0
  135. {python_terminusgps-37.3.0 → python_terminusgps-37.4.0}/docs/build/html/_static/bb50084be2b43ba7b98c.woff2 +0 -0
  136. {python_terminusgps-37.3.0 → python_terminusgps-37.4.0}/docs/build/html/_static/ce1e40901d7a0d88d483.woff2 +0 -0
  137. {python_terminusgps-37.3.0 → python_terminusgps-37.4.0}/docs/build/html/_static/css/badge_only.css +0 -0
  138. {python_terminusgps-37.3.0 → python_terminusgps-37.4.0}/docs/build/html/_static/css/custom.css +0 -0
  139. {python_terminusgps-37.3.0 → python_terminusgps-37.4.0}/docs/build/html/_static/css/custom.css.map +0 -0
  140. {python_terminusgps-37.3.0 → python_terminusgps-37.4.0}/docs/build/html/_static/css/fonts/Roboto-Slab-Bold.woff +0 -0
  141. {python_terminusgps-37.3.0 → python_terminusgps-37.4.0}/docs/build/html/_static/css/fonts/Roboto-Slab-Bold.woff2 +0 -0
  142. {python_terminusgps-37.3.0 → python_terminusgps-37.4.0}/docs/build/html/_static/css/fonts/Roboto-Slab-Regular.woff +0 -0
  143. {python_terminusgps-37.3.0 → python_terminusgps-37.4.0}/docs/build/html/_static/css/fonts/Roboto-Slab-Regular.woff2 +0 -0
  144. {python_terminusgps-37.3.0 → python_terminusgps-37.4.0}/docs/build/html/_static/css/fonts/fontawesome-webfont.eot +0 -0
  145. {python_terminusgps-37.3.0 → python_terminusgps-37.4.0}/docs/build/html/_static/css/fonts/fontawesome-webfont.svg +0 -0
  146. {python_terminusgps-37.3.0 → python_terminusgps-37.4.0}/docs/build/html/_static/css/fonts/fontawesome-webfont.ttf +0 -0
  147. {python_terminusgps-37.3.0 → python_terminusgps-37.4.0}/docs/build/html/_static/css/fonts/fontawesome-webfont.woff +0 -0
  148. {python_terminusgps-37.3.0 → python_terminusgps-37.4.0}/docs/build/html/_static/css/fonts/fontawesome-webfont.woff2 +0 -0
  149. {python_terminusgps-37.3.0 → python_terminusgps-37.4.0}/docs/build/html/_static/css/fonts/lato-bold-italic.woff +0 -0
  150. {python_terminusgps-37.3.0 → python_terminusgps-37.4.0}/docs/build/html/_static/css/fonts/lato-bold-italic.woff2 +0 -0
  151. {python_terminusgps-37.3.0 → python_terminusgps-37.4.0}/docs/build/html/_static/css/fonts/lato-bold.woff +0 -0
  152. {python_terminusgps-37.3.0 → python_terminusgps-37.4.0}/docs/build/html/_static/css/fonts/lato-bold.woff2 +0 -0
  153. {python_terminusgps-37.3.0 → python_terminusgps-37.4.0}/docs/build/html/_static/css/fonts/lato-normal-italic.woff +0 -0
  154. {python_terminusgps-37.3.0 → python_terminusgps-37.4.0}/docs/build/html/_static/css/fonts/lato-normal-italic.woff2 +0 -0
  155. {python_terminusgps-37.3.0 → python_terminusgps-37.4.0}/docs/build/html/_static/css/fonts/lato-normal.woff +0 -0
  156. {python_terminusgps-37.3.0 → python_terminusgps-37.4.0}/docs/build/html/_static/css/fonts/lato-normal.woff2 +0 -0
  157. {python_terminusgps-37.3.0 → python_terminusgps-37.4.0}/docs/build/html/_static/css/theme.css +0 -0
  158. {python_terminusgps-37.3.0 → python_terminusgps-37.4.0}/docs/build/html/_static/css/theme.css.map +0 -0
  159. {python_terminusgps-37.3.0 → python_terminusgps-37.4.0}/docs/build/html/_static/css/theme.min.css +0 -0
  160. {python_terminusgps-37.3.0 → python_terminusgps-37.4.0}/docs/build/html/_static/css/theme.min.css.map +0 -0
  161. {python_terminusgps-37.3.0 → python_terminusgps-37.4.0}/docs/build/html/_static/d04352f240062b100fba.woff2 +0 -0
  162. {python_terminusgps-37.3.0 → python_terminusgps-37.4.0}/docs/build/html/_static/doctools.js +0 -0
  163. {python_terminusgps-37.3.0 → python_terminusgps-37.4.0}/docs/build/html/_static/documentation_options.js +0 -0
  164. {python_terminusgps-37.3.0 → python_terminusgps-37.4.0}/docs/build/html/_static/f1cdf5c21de970ee0592.woff +0 -0
  165. {python_terminusgps-37.3.0 → python_terminusgps-37.4.0}/docs/build/html/_static/fd994e8d90d9cab651b0.woff +0 -0
  166. {python_terminusgps-37.3.0 → python_terminusgps-37.4.0}/docs/build/html/_static/file.png +0 -0
  167. {python_terminusgps-37.3.0 → python_terminusgps-37.4.0}/docs/build/html/_static/font/fontello.eot +0 -0
  168. {python_terminusgps-37.3.0 → python_terminusgps-37.4.0}/docs/build/html/_static/font/fontello.svg +0 -0
  169. {python_terminusgps-37.3.0 → python_terminusgps-37.4.0}/docs/build/html/_static/font/fontello.ttf +0 -0
  170. {python_terminusgps-37.3.0 → python_terminusgps-37.4.0}/docs/build/html/_static/font/fontello.woff +0 -0
  171. {python_terminusgps-37.3.0 → python_terminusgps-37.4.0}/docs/build/html/_static/font/fontello.woff2 +0 -0
  172. {python_terminusgps-37.3.0 → python_terminusgps-37.4.0}/docs/build/html/_static/fonts/Lato/lato-bold.eot +0 -0
  173. {python_terminusgps-37.3.0 → python_terminusgps-37.4.0}/docs/build/html/_static/fonts/Lato/lato-bold.ttf +0 -0
  174. {python_terminusgps-37.3.0 → python_terminusgps-37.4.0}/docs/build/html/_static/fonts/Lato/lato-bold.woff +0 -0
  175. {python_terminusgps-37.3.0 → python_terminusgps-37.4.0}/docs/build/html/_static/fonts/Lato/lato-bold.woff2 +0 -0
  176. {python_terminusgps-37.3.0 → python_terminusgps-37.4.0}/docs/build/html/_static/fonts/Lato/lato-bolditalic.eot +0 -0
  177. {python_terminusgps-37.3.0 → python_terminusgps-37.4.0}/docs/build/html/_static/fonts/Lato/lato-bolditalic.ttf +0 -0
  178. {python_terminusgps-37.3.0 → python_terminusgps-37.4.0}/docs/build/html/_static/fonts/Lato/lato-bolditalic.woff +0 -0
  179. {python_terminusgps-37.3.0 → python_terminusgps-37.4.0}/docs/build/html/_static/fonts/Lato/lato-bolditalic.woff2 +0 -0
  180. {python_terminusgps-37.3.0 → python_terminusgps-37.4.0}/docs/build/html/_static/fonts/Lato/lato-italic.eot +0 -0
  181. {python_terminusgps-37.3.0 → python_terminusgps-37.4.0}/docs/build/html/_static/fonts/Lato/lato-italic.ttf +0 -0
  182. {python_terminusgps-37.3.0 → python_terminusgps-37.4.0}/docs/build/html/_static/fonts/Lato/lato-italic.woff +0 -0
  183. {python_terminusgps-37.3.0 → python_terminusgps-37.4.0}/docs/build/html/_static/fonts/Lato/lato-italic.woff2 +0 -0
  184. {python_terminusgps-37.3.0 → python_terminusgps-37.4.0}/docs/build/html/_static/fonts/Lato/lato-regular.eot +0 -0
  185. {python_terminusgps-37.3.0 → python_terminusgps-37.4.0}/docs/build/html/_static/fonts/Lato/lato-regular.ttf +0 -0
  186. {python_terminusgps-37.3.0 → python_terminusgps-37.4.0}/docs/build/html/_static/fonts/Lato/lato-regular.woff +0 -0
  187. {python_terminusgps-37.3.0 → python_terminusgps-37.4.0}/docs/build/html/_static/fonts/Lato/lato-regular.woff2 +0 -0
  188. {python_terminusgps-37.3.0 → python_terminusgps-37.4.0}/docs/build/html/_static/fonts/RobotoSlab/roboto-slab-v7-bold.eot +0 -0
  189. {python_terminusgps-37.3.0 → python_terminusgps-37.4.0}/docs/build/html/_static/fonts/RobotoSlab/roboto-slab-v7-bold.ttf +0 -0
  190. {python_terminusgps-37.3.0 → python_terminusgps-37.4.0}/docs/build/html/_static/fonts/RobotoSlab/roboto-slab-v7-bold.woff +0 -0
  191. {python_terminusgps-37.3.0 → python_terminusgps-37.4.0}/docs/build/html/_static/fonts/RobotoSlab/roboto-slab-v7-bold.woff2 +0 -0
  192. {python_terminusgps-37.3.0 → python_terminusgps-37.4.0}/docs/build/html/_static/fonts/RobotoSlab/roboto-slab-v7-regular.eot +0 -0
  193. {python_terminusgps-37.3.0 → python_terminusgps-37.4.0}/docs/build/html/_static/fonts/RobotoSlab/roboto-slab-v7-regular.ttf +0 -0
  194. {python_terminusgps-37.3.0 → python_terminusgps-37.4.0}/docs/build/html/_static/fonts/RobotoSlab/roboto-slab-v7-regular.woff +0 -0
  195. {python_terminusgps-37.3.0 → python_terminusgps-37.4.0}/docs/build/html/_static/fonts/RobotoSlab/roboto-slab-v7-regular.woff2 +0 -0
  196. {python_terminusgps-37.3.0 → python_terminusgps-37.4.0}/docs/build/html/_static/jquery.js +0 -0
  197. {python_terminusgps-37.3.0 → python_terminusgps-37.4.0}/docs/build/html/_static/js/badge_only.js +0 -0
  198. {python_terminusgps-37.3.0 → python_terminusgps-37.4.0}/docs/build/html/_static/js/theme.js +0 -0
  199. {python_terminusgps-37.3.0 → python_terminusgps-37.4.0}/docs/build/html/_static/js/versions.js +0 -0
  200. {python_terminusgps-37.3.0 → python_terminusgps-37.4.0}/docs/build/html/_static/language_data.js +0 -0
  201. {python_terminusgps-37.3.0 → python_terminusgps-37.4.0}/docs/build/html/_static/minus.png +0 -0
  202. {python_terminusgps-37.3.0 → python_terminusgps-37.4.0}/docs/build/html/_static/plus.png +0 -0
  203. {python_terminusgps-37.3.0 → python_terminusgps-37.4.0}/docs/build/html/_static/pygments.css +0 -0
  204. {python_terminusgps-37.3.0 → python_terminusgps-37.4.0}/docs/build/html/_static/searchtools.js +0 -0
  205. {python_terminusgps-37.3.0 → python_terminusgps-37.4.0}/docs/build/html/_static/sphinx_highlight.js +0 -0
  206. {python_terminusgps-37.3.0 → python_terminusgps-37.4.0}/docs/build/html/_static/theme.css +0 -0
  207. {python_terminusgps-37.3.0 → python_terminusgps-37.4.0}/docs/build/html/_static/theme.js +0 -0
  208. {python_terminusgps-37.3.0 → python_terminusgps-37.4.0}/docs/build/html/_static/theme.js.LICENSE.txt +0 -0
  209. {python_terminusgps-37.3.0 → python_terminusgps-37.4.0}/docs/build/html/authorizenet/auth.html +0 -0
  210. {python_terminusgps-37.3.0 → python_terminusgps-37.4.0}/docs/build/html/authorizenet/constants.html +0 -0
  211. {python_terminusgps-37.3.0 → python_terminusgps-37.4.0}/docs/build/html/authorizenet/controllers.html +0 -0
  212. {python_terminusgps-37.3.0 → python_terminusgps-37.4.0}/docs/build/html/authorizenet/examples.html +0 -0
  213. {python_terminusgps-37.3.0 → python_terminusgps-37.4.0}/docs/build/html/authorizenet/index.html +0 -0
  214. {python_terminusgps-37.3.0 → python_terminusgps-37.4.0}/docs/build/html/authorizenet/profiles.html +0 -0
  215. {python_terminusgps-37.3.0 → python_terminusgps-37.4.0}/docs/build/html/authorizenet/subscriptions.html +0 -0
  216. {python_terminusgps-37.3.0 → python_terminusgps-37.4.0}/docs/build/html/authorizenet/utils.html +0 -0
  217. {python_terminusgps-37.3.0 → python_terminusgps-37.4.0}/docs/build/html/aws/index.html +0 -0
  218. {python_terminusgps-37.3.0 → python_terminusgps-37.4.0}/docs/build/html/aws/notifications.html +0 -0
  219. {python_terminusgps-37.3.0 → python_terminusgps-37.4.0}/docs/build/html/aws/secrets.html +0 -0
  220. {python_terminusgps-37.3.0 → python_terminusgps-37.4.0}/docs/build/html/aws/speech.html +0 -0
  221. {python_terminusgps-37.3.0 → python_terminusgps-37.4.0}/docs/build/html/aws/utils.html +0 -0
  222. {python_terminusgps-37.3.0 → python_terminusgps-37.4.0}/docs/build/html/django/forms.html +0 -0
  223. {python_terminusgps-37.3.0 → python_terminusgps-37.4.0}/docs/build/html/django/index.html +0 -0
  224. {python_terminusgps-37.3.0 → python_terminusgps-37.4.0}/docs/build/html/django/mixins.html +0 -0
  225. {python_terminusgps-37.3.0 → python_terminusgps-37.4.0}/docs/build/html/django/settings.html +0 -0
  226. {python_terminusgps-37.3.0 → python_terminusgps-37.4.0}/docs/build/html/django/validators.html +0 -0
  227. {python_terminusgps-37.3.0 → python_terminusgps-37.4.0}/docs/build/html/genindex.html +0 -0
  228. {python_terminusgps-37.3.0 → python_terminusgps-37.4.0}/docs/build/html/index.html +0 -0
  229. {python_terminusgps-37.3.0 → python_terminusgps-37.4.0}/docs/build/html/mixins.html +0 -0
  230. {python_terminusgps-37.3.0 → python_terminusgps-37.4.0}/docs/build/html/objects.inv +0 -0
  231. {python_terminusgps-37.3.0 → python_terminusgps-37.4.0}/docs/build/html/py-modindex.html +0 -0
  232. {python_terminusgps-37.3.0 → python_terminusgps-37.4.0}/docs/build/html/search.html +0 -0
  233. {python_terminusgps-37.3.0 → python_terminusgps-37.4.0}/docs/build/html/searchindex.js +0 -0
  234. {python_terminusgps-37.3.0 → python_terminusgps-37.4.0}/docs/build/html/settings.html +0 -0
  235. {python_terminusgps-37.3.0 → python_terminusgps-37.4.0}/docs/build/html/twilio/caller.html +0 -0
  236. {python_terminusgps-37.3.0 → python_terminusgps-37.4.0}/docs/build/html/twilio/examples.html +0 -0
  237. {python_terminusgps-37.3.0 → python_terminusgps-37.4.0}/docs/build/html/twilio/index.html +0 -0
  238. {python_terminusgps-37.3.0 → python_terminusgps-37.4.0}/docs/build/html/twilio/settings.html +0 -0
  239. {python_terminusgps-37.3.0 → python_terminusgps-37.4.0}/docs/build/html/validators.html +0 -0
  240. {python_terminusgps-37.3.0 → python_terminusgps-37.4.0}/docs/build/html/wialon/constants.html +0 -0
  241. {python_terminusgps-37.3.0 → python_terminusgps-37.4.0}/docs/build/html/wialon/errors.html +0 -0
  242. {python_terminusgps-37.3.0 → python_terminusgps-37.4.0}/docs/build/html/wialon/examples.html +0 -0
  243. {python_terminusgps-37.3.0 → python_terminusgps-37.4.0}/docs/build/html/wialon/flags.html +0 -0
  244. {python_terminusgps-37.3.0 → python_terminusgps-37.4.0}/docs/build/html/wialon/index.html +0 -0
  245. {python_terminusgps-37.3.0 → python_terminusgps-37.4.0}/docs/build/html/wialon/items.html +0 -0
  246. {python_terminusgps-37.3.0 → python_terminusgps-37.4.0}/docs/build/html/wialon/session.html +0 -0
  247. {python_terminusgps-37.3.0 → python_terminusgps-37.4.0}/docs/build/html/wialon/settings.html +0 -0
  248. {python_terminusgps-37.3.0 → python_terminusgps-37.4.0}/docs/build/html/wialon/utils.html +0 -0
  249. {python_terminusgps-37.3.0 → python_terminusgps-37.4.0}/docs/build/linkcheck/output.json +0 -0
  250. {python_terminusgps-37.3.0 → python_terminusgps-37.4.0}/docs/build/linkcheck/output.txt +0 -0
  251. {python_terminusgps-37.3.0 → python_terminusgps-37.4.0}/docs/make.bat +0 -0
  252. {python_terminusgps-37.3.0 → python_terminusgps-37.4.0}/docs/source/authorizenet/auth.rst +0 -0
  253. {python_terminusgps-37.3.0 → python_terminusgps-37.4.0}/docs/source/authorizenet/constants.rst +0 -0
  254. {python_terminusgps-37.3.0 → python_terminusgps-37.4.0}/docs/source/authorizenet/controllers.rst +0 -0
  255. {python_terminusgps-37.3.0 → python_terminusgps-37.4.0}/docs/source/authorizenet/examples.rst +0 -0
  256. {python_terminusgps-37.3.0 → python_terminusgps-37.4.0}/docs/source/authorizenet/index.rst +0 -0
  257. {python_terminusgps-37.3.0 → python_terminusgps-37.4.0}/docs/source/authorizenet/profiles.rst +0 -0
  258. {python_terminusgps-37.3.0 → python_terminusgps-37.4.0}/docs/source/authorizenet/utils.rst +0 -0
  259. {python_terminusgps-37.3.0 → python_terminusgps-37.4.0}/docs/source/aws/index.rst +0 -0
  260. {python_terminusgps-37.3.0 → python_terminusgps-37.4.0}/docs/source/aws/notifications.rst +0 -0
  261. {python_terminusgps-37.3.0 → python_terminusgps-37.4.0}/docs/source/aws/secrets.rst +0 -0
  262. {python_terminusgps-37.3.0 → python_terminusgps-37.4.0}/docs/source/conf.py +0 -0
  263. {python_terminusgps-37.3.0 → python_terminusgps-37.4.0}/docs/source/django/forms.rst +0 -0
  264. {python_terminusgps-37.3.0 → python_terminusgps-37.4.0}/docs/source/django/index.rst +0 -0
  265. {python_terminusgps-37.3.0 → python_terminusgps-37.4.0}/docs/source/django/mixins.rst +0 -0
  266. {python_terminusgps-37.3.0 → python_terminusgps-37.4.0}/docs/source/django/settings.rst +0 -0
  267. {python_terminusgps-37.3.0 → python_terminusgps-37.4.0}/docs/source/django/validators.rst +0 -0
  268. {python_terminusgps-37.3.0 → python_terminusgps-37.4.0}/docs/source/index.rst +0 -0
  269. {python_terminusgps-37.3.0 → python_terminusgps-37.4.0}/docs/source/twilio/caller.rst +0 -0
  270. {python_terminusgps-37.3.0 → python_terminusgps-37.4.0}/docs/source/twilio/examples.rst +0 -0
  271. {python_terminusgps-37.3.0 → python_terminusgps-37.4.0}/docs/source/twilio/index.rst +0 -0
  272. {python_terminusgps-37.3.0 → python_terminusgps-37.4.0}/docs/source/wialon/constants.rst +0 -0
  273. {python_terminusgps-37.3.0 → python_terminusgps-37.4.0}/docs/source/wialon/errors.rst +0 -0
  274. {python_terminusgps-37.3.0 → python_terminusgps-37.4.0}/docs/source/wialon/examples.rst +0 -0
  275. {python_terminusgps-37.3.0 → python_terminusgps-37.4.0}/docs/source/wialon/flags.rst +0 -0
  276. {python_terminusgps-37.3.0 → python_terminusgps-37.4.0}/docs/source/wialon/index.rst +0 -0
  277. {python_terminusgps-37.3.0 → python_terminusgps-37.4.0}/docs/source/wialon/items.rst +0 -0
  278. {python_terminusgps-37.3.0 → python_terminusgps-37.4.0}/docs/source/wialon/session.rst +0 -0
  279. {python_terminusgps-37.3.0 → python_terminusgps-37.4.0}/docs/source/wialon/utils.rst +0 -0
  280. {python_terminusgps-37.3.0 → python_terminusgps-37.4.0}/terminusgps/__init__.py +0 -0
  281. {python_terminusgps-37.3.0 → python_terminusgps-37.4.0}/terminusgps/authorizenet/__init__.py +0 -0
  282. {python_terminusgps-37.3.0 → python_terminusgps-37.4.0}/terminusgps/authorizenet/auth.py +0 -0
  283. {python_terminusgps-37.3.0 → python_terminusgps-37.4.0}/terminusgps/authorizenet/constants.py +0 -0
  284. {python_terminusgps-37.3.0 → python_terminusgps-37.4.0}/terminusgps/authorizenet/controllers.py +0 -0
  285. {python_terminusgps-37.3.0 → python_terminusgps-37.4.0}/terminusgps/authorizenet/items/__init__.py +0 -0
  286. {python_terminusgps-37.3.0 → python_terminusgps-37.4.0}/terminusgps/authorizenet/items/address_profiles.py +0 -0
  287. {python_terminusgps-37.3.0 → python_terminusgps-37.4.0}/terminusgps/authorizenet/items/base.py +0 -0
  288. {python_terminusgps-37.3.0 → python_terminusgps-37.4.0}/terminusgps/authorizenet/items/customer_profiles.py +0 -0
  289. {python_terminusgps-37.3.0 → python_terminusgps-37.4.0}/terminusgps/authorizenet/items/payment_profiles.py +0 -0
  290. {python_terminusgps-37.3.0 → python_terminusgps-37.4.0}/terminusgps/authorizenet/profiles/__init__.py +0 -0
  291. {python_terminusgps-37.3.0 → python_terminusgps-37.4.0}/terminusgps/authorizenet/profiles/addresses.py +0 -0
  292. {python_terminusgps-37.3.0 → python_terminusgps-37.4.0}/terminusgps/authorizenet/profiles/base.py +0 -0
  293. {python_terminusgps-37.3.0 → python_terminusgps-37.4.0}/terminusgps/authorizenet/profiles/customers.py +0 -0
  294. {python_terminusgps-37.3.0 → python_terminusgps-37.4.0}/terminusgps/authorizenet/profiles/payments.py +0 -0
  295. {python_terminusgps-37.3.0 → python_terminusgps-37.4.0}/terminusgps/authorizenet/profiles/subscriptions.py +0 -0
  296. {python_terminusgps-37.3.0 → python_terminusgps-37.4.0}/terminusgps/authorizenet/tests/__init__.py +0 -0
  297. {python_terminusgps-37.3.0 → python_terminusgps-37.4.0}/terminusgps/authorizenet/tests/test_auth.py +0 -0
  298. {python_terminusgps-37.3.0 → python_terminusgps-37.4.0}/terminusgps/authorizenet/tests/test_profiles.py +0 -0
  299. {python_terminusgps-37.3.0 → python_terminusgps-37.4.0}/terminusgps/authorizenet/tests/test_utils.py +0 -0
  300. {python_terminusgps-37.3.0 → python_terminusgps-37.4.0}/terminusgps/authorizenet/utils.py +0 -0
  301. {python_terminusgps-37.3.0 → python_terminusgps-37.4.0}/terminusgps/aws/__init__.py +0 -0
  302. {python_terminusgps-37.3.0 → python_terminusgps-37.4.0}/terminusgps/aws/notifications.py +0 -0
  303. {python_terminusgps-37.3.0 → python_terminusgps-37.4.0}/terminusgps/aws/secrets.py +0 -0
  304. {python_terminusgps-37.3.0 → python_terminusgps-37.4.0}/terminusgps/aws/tests/__init__.py +0 -0
  305. {python_terminusgps-37.3.0 → python_terminusgps-37.4.0}/terminusgps/aws/tests/test_notifications.py +0 -0
  306. {python_terminusgps-37.3.0 → python_terminusgps-37.4.0}/terminusgps/aws/tests/test_secrets.py +0 -0
  307. {python_terminusgps-37.3.0 → python_terminusgps-37.4.0}/terminusgps/django/__init__.py +0 -0
  308. {python_terminusgps-37.3.0 → python_terminusgps-37.4.0}/terminusgps/django/forms/__init__.py +0 -0
  309. {python_terminusgps-37.3.0 → python_terminusgps-37.4.0}/terminusgps/django/forms/fields.py +0 -0
  310. {python_terminusgps-37.3.0 → python_terminusgps-37.4.0}/terminusgps/django/forms/forms.py +0 -0
  311. {python_terminusgps-37.3.0 → python_terminusgps-37.4.0}/terminusgps/django/forms/renderer.py +0 -0
  312. {python_terminusgps-37.3.0 → python_terminusgps-37.4.0}/terminusgps/django/forms/widgets.py +0 -0
  313. {python_terminusgps-37.3.0 → python_terminusgps-37.4.0}/terminusgps/django/mixins.py +0 -0
  314. {python_terminusgps-37.3.0 → python_terminusgps-37.4.0}/terminusgps/django/settings.py +0 -0
  315. {python_terminusgps-37.3.0 → python_terminusgps-37.4.0}/terminusgps/django/tests/test_forms.py +0 -0
  316. {python_terminusgps-37.3.0 → python_terminusgps-37.4.0}/terminusgps/django/tests/test_mixins.py +0 -0
  317. {python_terminusgps-37.3.0 → python_terminusgps-37.4.0}/terminusgps/django/tests/test_utils.py +0 -0
  318. {python_terminusgps-37.3.0 → python_terminusgps-37.4.0}/terminusgps/django/utils.py +0 -0
  319. {python_terminusgps-37.3.0 → python_terminusgps-37.4.0}/terminusgps/django/validators.py +0 -0
  320. {python_terminusgps-37.3.0 → python_terminusgps-37.4.0}/terminusgps/twilio/__init__.py +0 -0
  321. {python_terminusgps-37.3.0 → python_terminusgps-37.4.0}/terminusgps/twilio/caller.py +0 -0
  322. {python_terminusgps-37.3.0 → python_terminusgps-37.4.0}/terminusgps/wialon/__init__.py +0 -0
  323. {python_terminusgps-37.3.0 → python_terminusgps-37.4.0}/terminusgps/wialon/constants.py +0 -0
  324. {python_terminusgps-37.3.0 → python_terminusgps-37.4.0}/terminusgps/wialon/flags.py +0 -0
  325. {python_terminusgps-37.3.0 → python_terminusgps-37.4.0}/terminusgps/wialon/items/__init__.py +0 -0
  326. {python_terminusgps-37.3.0 → python_terminusgps-37.4.0}/terminusgps/wialon/items/base.py +0 -0
  327. {python_terminusgps-37.3.0 → python_terminusgps-37.4.0}/terminusgps/wialon/items/resource.py +0 -0
  328. {python_terminusgps-37.3.0 → python_terminusgps-37.4.0}/terminusgps/wialon/items/retranslator.py +0 -0
  329. {python_terminusgps-37.3.0 → python_terminusgps-37.4.0}/terminusgps/wialon/items/route.py +0 -0
  330. {python_terminusgps-37.3.0 → python_terminusgps-37.4.0}/terminusgps/wialon/items/unit.py +0 -0
  331. {python_terminusgps-37.3.0 → python_terminusgps-37.4.0}/terminusgps/wialon/items/unit_group.py +0 -0
  332. {python_terminusgps-37.3.0 → python_terminusgps-37.4.0}/terminusgps/wialon/items/user.py +0 -0
  333. {python_terminusgps-37.3.0 → python_terminusgps-37.4.0}/terminusgps/wialon/tests/__init__.py +0 -0
  334. {python_terminusgps-37.3.0 → python_terminusgps-37.4.0}/terminusgps/wialon/tests/test_items.py +0 -0
  335. {python_terminusgps-37.3.0 → python_terminusgps-37.4.0}/terminusgps/wialon/tests/test_session.py +0 -0
  336. {python_terminusgps-37.3.0 → python_terminusgps-37.4.0}/terminusgps/wialon/tests/test_utils.py +0 -0
  337. {python_terminusgps-37.3.0 → python_terminusgps-37.4.0}/terminusgps/wialon/utils.py +0 -0
  338. {python_terminusgps-37.3.0 → python_terminusgps-37.4.0}/terminusgps/wialon/validators.py +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: python-terminusgps
3
- Version: 37.3.0
3
+ Version: 37.4.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://docs.terminusgps.com
6
6
  Project-URL: Repository, https://github.com/terminusgps/python-terminusgps
@@ -1,6 +1,6 @@
1
1
  [project]
2
2
  name = "python-terminusgps"
3
- version = "37.3.0"
3
+ version = "37.4.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" } ]
@@ -0,0 +1,188 @@
1
+ import datetime
2
+ import secrets
3
+ import sys
4
+ import typing
5
+
6
+ from .session import WialonSession
7
+
8
+
9
+ class WialonMapRenderer:
10
+ def __init__(self, session: WialonSession) -> None:
11
+ self.session = session
12
+ self.layers = {}
13
+
14
+ def create_messages_layer(
15
+ self,
16
+ name: str,
17
+ unit_id: int | str,
18
+ time_from: datetime.datetime,
19
+ time_to: datetime.datetime,
20
+ enable_trip_detector: bool = False,
21
+ enable_directional_arrows: bool = False,
22
+ enable_points: bool = False,
23
+ enable_annotations: bool = False,
24
+ track_color: str = "FFFF0000",
25
+ point_color: str = "7F00FF00",
26
+ track_width: int = 12,
27
+ flags: int = 0x0004,
28
+ ) -> dict[str, typing.Any]:
29
+ """
30
+ Creates a messages layer and adds it to the renderer.
31
+
32
+ :param name: Name of the new messages layer.
33
+ :type name: :py:obj:`str`
34
+ :param unit_id: A Wialon unit id to retrieve messages for.
35
+ :type unit_id: :py:obj:`int` | :py:obj:`str`
36
+ :param time_from: Start time for the messages interval.
37
+ :type time_from: :py:obj:`~datetime.datetime`
38
+ :param time_to: End time for the messages interval.
39
+ :type time_to: :py:obj:`~datetime.datetime`
40
+ :param enable_trip_detector: Whether or not to enable the trip detector on the layer. Default is :py:obj:`False`.
41
+ :type enable_trip_detector: :py:obj:`bool`
42
+ :param enable_directional_arrows: Whether or not to enable directional arrows on the layer. Default is :py:obj:`False`.
43
+ :type enable_directional_arrows: :py:obj:`bool`
44
+ :param enable_points: Whether or not to enable points of interest on the layer. Default is :py:obj:`False`.
45
+ :type enable_points: :py:obj:`bool`
46
+ :param enable_annotations: Whether or not to annotate the points of interest on the layer. Default is :py:obj:`False`.
47
+ :type enable_annotations: :py:obj:`bool`
48
+ :param track_color: ARGB color to use for the track on the layer. Default is :py:obj:`"FFFF0000"`.
49
+ :type track_color: :py:obj:`str`
50
+ :param point_color: ARGB color to use for the points of interest on the layer. Default is :py:obj:`"7F00FF00"`.
51
+ :type point_color: :py:obj:`str`
52
+ :param track_width: Width (in pixels) of the track on the layer. Default is :py:obj:`12`.
53
+ :type track_width: :py:obj:`int`
54
+ :param flags: Determines which points of interest will be rendered on the layer. Default is :py:obj:`0x0004`.
55
+ :type flags: :py:obj:`int`
56
+ :returns: A Wialon API response.
57
+ :rtype: :py:obj:`dict`
58
+
59
+ """
60
+ response = self.session.wialon_api.render_create_messages_layer(
61
+ **{
62
+ "layerName": name,
63
+ "itemId": int(unit_id),
64
+ "timeFrom": time_from.timestamp(),
65
+ "timeTo": time_to.timestamp(),
66
+ "tripDetector": int(enable_trip_detector),
67
+ "trackColor": "trip" if enable_trip_detector else track_color,
68
+ "trackWidth": track_width,
69
+ "arrows": int(enable_directional_arrows),
70
+ "points": int(enable_points),
71
+ "pointColor": point_color,
72
+ "annotations": int(enable_annotations),
73
+ "flags": flags,
74
+ }
75
+ )
76
+ self.layers.setdefault(name, {"enabled": False})
77
+ return response if response else {}
78
+
79
+ def enable_layer(self, name: str) -> None:
80
+ """
81
+ Enables a layer by name in the renderer.
82
+
83
+ :param name: A layer name.
84
+ :type name: :py:obj:`str`
85
+ :returns: Nothing.
86
+ :rtype: :py:obj:`None`
87
+
88
+ """
89
+ if not self.layers[name]["enabled"]:
90
+ self.session.wialon_api.render_enable_layer(
91
+ **{"layerName": name, "enable": int(True)}
92
+ )
93
+ self.layers[name]["enabled"] = True
94
+
95
+ def disable_layer(self, name: str) -> None:
96
+ """
97
+ Disables a layer by name in the renderer.
98
+
99
+ :param name: A layer name.
100
+ :type name: :py:obj:`str`
101
+ :returns: Nothing.
102
+ :rtype: :py:obj:`None`
103
+
104
+ """
105
+ if self.layers[name]["enabled"]:
106
+ self.session.wialon_api.render_enable_layer(
107
+ **{"layerName": name, "enable": int(False)}
108
+ )
109
+ self.layers[name]["enabled"] = False
110
+
111
+ def remove_layer(self, name: str) -> None:
112
+ """
113
+ Removes a layer by name in the renderer.
114
+
115
+ :param name: A layer name.
116
+ :type name: :py:obj:`str`
117
+ :returns: Nothing.
118
+ :rtype: :py:obj:`None`
119
+
120
+ """
121
+ self.session.wialon_api.render_remove_layer(**{"layerName": name})
122
+ self.layers.pop(name)
123
+
124
+ def set_locale(
125
+ self,
126
+ timezone: int,
127
+ lang: str = "en",
128
+ flags: int = 1,
129
+ date_format: str = "%Y-%m-%E %H:%M:%S",
130
+ density: int = 1,
131
+ ) -> None:
132
+ """
133
+ Updates the locale options for the renderer.
134
+
135
+ :param timezone: Timezone offset to use in the renderer.
136
+ :type timezone: :py:obj:`int`
137
+ :param lang: A 2-character language code. Default is :py:obj:`"en"`.
138
+ :type lang: :py:obj:`str`
139
+ :param flags: Measurement system to use in the renderer.
140
+ :type flags: :py:obj:`int`
141
+ :param date_format: Format to use for dates in the renderer.
142
+ :type date_format: :py:obj:`str`
143
+ :param density: Tile density to use in the renderer.
144
+ :type density: :py:obj:`int`
145
+
146
+ Flag options:
147
+
148
+ +-------------+--------------+
149
+ | value | measurement |
150
+ +=============+==============+
151
+ | :py:obj:`0` | Metric |
152
+ +-------------+--------------+
153
+ | :py:obj:`1` | US |
154
+ +-------------+--------------+
155
+ | :py:obj:`2` | Imperial |
156
+ +-------------+--------------+
157
+
158
+ Density options:
159
+
160
+ +-------------+-----------+-------+
161
+ | value | tile size | ratio |
162
+ +=============+===========+=======+
163
+ | :py:obj:`1` | 256*256 | 1 |
164
+ +-------------+-----------+-------+
165
+ | :py:obj:`2` | 378*378 | 1.5 |
166
+ +-------------+-----------+-------+
167
+ | :py:obj:`3` | 512*512 | 2 |
168
+ +-------------+-----------+-------+
169
+ | :py:obj:`4` | 768*768 | 3 |
170
+ +-------------+-----------+-------+
171
+ | :py:obj:`5` | 1024*1024 | 4 |
172
+ +-------------+-----------+-------+
173
+
174
+ """
175
+ self.session.wialon_api.render_set_locale(
176
+ **{
177
+ "tzOffset": timezone,
178
+ "language": lang,
179
+ "flags": flags,
180
+ "formatDate": date_format,
181
+ "density": density,
182
+ }
183
+ )
184
+
185
+ def generate_render_url(self, x: int, y: int, z: int) -> str:
186
+ sid = self.session.id
187
+ random_num = secrets.SystemRandom(sid).randint(1, sys.maxsize)
188
+ return f"https://hst-api.wialon.com/adfurl{random_num}/avl_render/{x}_{y}_{z}/{sid}.png"
@@ -4,54 +4,59 @@ import typing
4
4
 
5
5
  import wialon.api
6
6
  from django.conf import settings
7
+ from loguru import logger
8
+
9
+ from . import flags as wialon_flags
10
+
11
+ logger.disable(__name__)
7
12
 
8
13
 
9
14
  @dataclasses.dataclass
10
15
  class WialonAPICall:
11
16
  action: str
12
17
  timestamp: datetime.datetime
13
- args: tuple
14
- kwargs: dict
15
18
  result: typing.Any = None
16
19
  error: Exception | None = None
17
20
 
18
21
 
19
22
  class Wialon(wialon.api.Wialon):
20
- def __init__(self, token: str, timeout: int = 300, *args, **kwargs) -> None:
23
+ def __init__(self, token: str, *args, **kwargs) -> None:
21
24
  super().__init__(*args, **kwargs)
22
25
  self.token = token
23
26
  self.call_history: list[WialonAPICall] = []
24
- self.last_call_datetime = None
25
- self.timeout = timeout
26
27
 
27
28
  @property
28
29
  def total_calls(self) -> int:
29
30
  return len(self.call_history)
30
31
 
32
+ @property
33
+ def call_actions(self) -> list[str]:
34
+ return [call.action for call in self.call_history]
35
+
31
36
  def token_login(self, *args, **kwargs) -> typing.Any:
32
- kwargs["appName"] = "python-terminusgps"
37
+ kwargs.setdefault("appName", "python-terminusgps")
33
38
  return self.call("token_login", *args, **kwargs)
34
39
 
35
- def call(self, action_name: str, *argc, **kwargs) -> typing.Any:
36
- now = datetime.datetime.now()
37
-
40
+ def call(self, action_name: str, *argc, **kwargs) -> dict[str, typing.Any]:
38
41
  try:
42
+ timestamp = datetime.datetime.now()
39
43
  result = super().call(action_name, *argc, **kwargs)
40
44
  call_record = WialonAPICall(
41
- action=action_name,
42
- timestamp=now,
43
- args=argc,
44
- kwargs=kwargs,
45
- result=result,
45
+ action=action_name, timestamp=timestamp, result=result
46
46
  )
47
47
  return result
48
48
  except wialon.api.WialonError as e:
49
49
  call_record = WialonAPICall(
50
- action=action_name, timestamp=now, args=argc, kwargs=kwargs, error=e
50
+ action=action_name, timestamp=timestamp, error=e
51
51
  )
52
- return None
52
+ return {}
53
53
  finally:
54
- self.last_call_datetime = now
54
+ if call_record.result:
55
+ logger.debug("Successfully executed '{}'", action_name)
56
+ elif call_record.error:
57
+ logger.warning(
58
+ "Failed to execute '{}': {}", action_name, call_record.error
59
+ )
55
60
  self.call_history.append(call_record)
56
61
 
57
62
 
@@ -63,7 +68,6 @@ class WialonSession:
63
68
  scheme: str = "https",
64
69
  host: str = "hst-api.wialon.com",
65
70
  port: int = 443,
66
- timeout: int = 300,
67
71
  ) -> None:
68
72
  """
69
73
  Starts or continues a Wialon API session.
@@ -76,10 +80,10 @@ class WialonSession:
76
80
  :type scheme: :py:obj:`str`
77
81
  :param host: Wialon API host url. Default is ``"hst-api.wialon.com"``.
78
82
  :type host: :py:obj:`str`
83
+ :param host: Wialon API rendering url. Default is ``"render-maps.wialon.com"``.
84
+ :type host: :py:obj:`str`
79
85
  :param port: Wialon API host port. Default is ``443``.
80
86
  :type port: :py:obj:`int`
81
- :param timeout: How long in seconds a session can be active for. Default is ``500`` (5 min).
82
- :type timeout: :py:obj:`int`
83
87
  :returns: Nothing.
84
88
  :rtype: :py:obj:`None`
85
89
 
@@ -92,12 +96,7 @@ class WialonSession:
92
96
  self._wsdk_version = None
93
97
  self._uid = None
94
98
  self._wialon_api = Wialon(
95
- scheme=scheme,
96
- host=host,
97
- port=port,
98
- sid=sid,
99
- timeout=timeout,
100
- token=self.token,
99
+ scheme=scheme, host=host, port=port, sid=sid, token=self.token
101
100
  )
102
101
 
103
102
  def __str__(self) -> str:
@@ -110,12 +109,12 @@ class WialonSession:
110
109
  """
111
110
  Logs into the Wialon API using :py:meth:`login`.
112
111
 
113
- :raises AssertionError: If the Wialon API token was not set.
112
+ :raises AssertionError: If the session's Wialon API :py:attr:`token` wasn't set.
114
113
  :returns: A valid Wialon API session.
115
114
  :rtype: :py:obj:`~terminusgps.wialon.session.WialonSession`
116
115
 
117
116
  """
118
- assert self.token, "Wialon API token was not set"
117
+ assert self.token, "Wialon API token wasn't set."
119
118
  self.login(self.token)
120
119
  return self
121
120
 
@@ -279,7 +278,7 @@ class WialonSession:
279
278
  """
280
279
  return str(self._token)
281
280
 
282
- def login(self, token: str, flags: int = sum([0x1, 0x2, 0x20])) -> str:
281
+ def login(self, token: str, flags: int | None = None) -> str:
283
282
  """
284
283
  Logs into the Wialon API and starts a new session.
285
284
 
@@ -293,10 +292,17 @@ class WialonSession:
293
292
  :rtype: :py:obj:`str`
294
293
 
295
294
  """
295
+ if flags is None:
296
+ flags = (
297
+ wialon_flags.TokenFlag.ONLINE_TRACKING
298
+ | wialon_flags.TokenFlag.VIEW_ACCESS
299
+ | wialon_flags.TokenFlag.MANAGE_NONSENSITIVE
300
+ )
296
301
  try:
302
+ print(f"{type(flags) = }")
297
303
  response = self.wialon_api.token_login(**{"token": token, "fl": flags})
298
304
  self._set_login_response(response)
299
- return response.get("eid")
305
+ return response.get("eid", "")
300
306
  except (wialon.api.WialonError, ValueError):
301
307
  raise
302
308
 
@@ -312,13 +318,15 @@ class WialonSession:
312
318
  self.wialon_api.sid = None
313
319
 
314
320
  if response.get("error") != 0:
315
- print(f"Failed to logout of session: '{response.get('message')}'")
321
+ logger.warning(
322
+ "Failed to logout of the session: '{}'", response.get("message")
323
+ )
316
324
 
317
325
  def _set_login_response(self, login_response: dict | None) -> None:
318
326
  """
319
327
  Sets the Wialon API session's attributes based on a login response.
320
328
 
321
- :param login_response: A response returned from :py:meth:`login` or :py:meth:`duplicate`.
329
+ :param login_response: A dictionary returned from :py:meth:`login`.
322
330
  :type login_response: :py:obj:`dict`
323
331
  :raises ValueError: If ``login_response`` wasn't provided.
324
332
  :returns: Nothing.
@@ -342,189 +350,3 @@ class WialonSession:
342
350
  self._username = login_response.get("au")
343
351
  self._video_service_url = login_response.get("video_service_url")
344
352
  self._wsdk_version = login_response.get("wsdk_version")
345
-
346
-
347
- class WialonSessionManager:
348
- """Provides an interface for generating automatically activated Wialon sessions."""
349
-
350
- def __init__(
351
- self,
352
- token: str | None = None,
353
- lifetime: int = 500,
354
- session: WialonSession | None = None,
355
- session_id: str | None = None,
356
- ) -> None:
357
- """
358
- Sets :py:attr:`token` and :py:attr:`lifetime`.
359
-
360
- :param token: A Wialon API token. Default is :confval:`WIALON_TOKEN`.
361
- :type token: :py:obj:`str` | :py:obj:`None`
362
- :param lifetime: How long in seconds a Wialon session can be valid for. Default is ``500``.
363
- :type lifetime: :py:obj:`int`
364
- :returns: Nothing.
365
- :rtype: :py:obj:`None`
366
-
367
- """
368
- self.token = token
369
- self.lifetime = lifetime
370
-
371
- target_sid = session.id if session and session.id else session_id
372
- self.session = WialonSession(sid=target_sid)
373
- if not target_sid or not self.validate_session():
374
- self.session.login(token=self.token)
375
-
376
- def check_active(self) -> bool:
377
- """
378
- Checks if :py:attr:`session` is active.
379
-
380
- :returns: Whether or not :py:attr:`session` is an active Wialon session.
381
- :rtype: :py:obj:`bool`
382
-
383
- """
384
- if not self.session.id:
385
- return False
386
- if not self.session.wialon_api.last_call_datetime:
387
- return self.validate_session()
388
-
389
- now = datetime.datetime.now()
390
- last_call = self.session.wialon_api.last_call_datetime
391
- session_expiry = last_call + datetime.timedelta(seconds=self.lifetime)
392
-
393
- if now > session_expiry:
394
- return False
395
- return self.validate_session()
396
-
397
- def get_session(self, sid: str | None = None) -> WialonSession:
398
- """
399
- Returns a valid Wialon API session.
400
-
401
- If ``sid`` is provided, tries to continue the session and return it.
402
-
403
- :param sid: A Wialon API session id.
404
- :type sid: :py:obj:`str` | :py:obj:`None`
405
- :returns: A valid Wialon API session.
406
- :rtype: :py:obj:`~terminusgps.wialon.session.WialonSession`
407
-
408
- """
409
- if sid is not None:
410
- self.session = WialonSession(sid=sid)
411
- if not self.validate_session():
412
- self.session = WialonSession()
413
- self.session.login(token=self.token)
414
- return self.session
415
- if not self.check_active():
416
- self.session = WialonSession()
417
- self.session.login(token=self.token)
418
- return self.session
419
-
420
- def validate_session(self) -> bool:
421
- """
422
- Tries to make a Wialon API request and returns whether or not it was successful.
423
-
424
- :returns: Whether or not validation Wialon API call was successful.
425
- :rtype: :py:obj:`bool`
426
-
427
- """
428
- try:
429
- result = self.session.wialon_api.core_duplicate()
430
- return result is not None
431
- except wialon.api.WialonError:
432
- return False
433
-
434
- @property
435
- def sid(self) -> str | None:
436
- """
437
- Current Wialon session id.
438
-
439
- :type: :py:obj:`str` | :py:obj:`None`
440
-
441
- """
442
- return self.session.wialon_api.sid if self.session else None
443
-
444
- @sid.setter
445
- def sid(self, other: str) -> None:
446
- """
447
- Sets :py:attr:`sid` to ``other``.
448
-
449
- :param other: A Wialon session id.
450
- :type other: :py:obj:`str`
451
- :returns: Nothing.
452
- :rtype: :py:obj:`None`
453
-
454
- """
455
- if self.session:
456
- self.session.wialon_api.sid = other
457
- else:
458
- self.session = WialonSession(sid=other)
459
-
460
- @property
461
- def token(self) -> str:
462
- """
463
- A Wialon API token.
464
-
465
- :type: :py:obj:`str`
466
-
467
- """
468
- return str(self._token)
469
-
470
- @token.setter
471
- def token(self, other: str | None) -> None:
472
- """
473
- Sets :py:attr:`token` to ``other`` if provided.
474
-
475
- If ``other`` isn't provided, instead sets :py:attr:`token` to :confval:`WIALON_TOKEN`.
476
-
477
- :param other: A Wialon API token.
478
- :type other: :py:obj:`str` | :py:obj:`None`
479
- :returns: Nothing.
480
- :rtype: :py:obj:`None`
481
-
482
- """
483
- self._token = other if other is not None else settings.WIALON_TOKEN
484
-
485
- @property
486
- def session(self) -> WialonSession:
487
- """
488
- A Wialon API session.
489
-
490
- :type: :py:obj:`~terminusgps.wialon.session.WialonSession`
491
-
492
- """
493
- return self._session
494
-
495
- @session.setter
496
- def session(self, other: WialonSession) -> None:
497
- """
498
- Sets :py:attr:`session` to ``other``.
499
-
500
- :param other: A Wialon session.
501
- :type other: :py:obj:`~terminusgps.wialon.session.WialonSession`
502
- :returns: Nothing.
503
- :rtype: :py:obj:`None`
504
-
505
- """
506
- self._session = other
507
-
508
- @property
509
- def lifetime(self) -> int:
510
- """
511
- How long in seconds a Wialon session can live for.
512
-
513
- :type: :py:obj:`int`
514
- :value: :py:obj:`500`
515
-
516
- """
517
- return self._lifetime
518
-
519
- @lifetime.setter
520
- def lifetime(self, other: int) -> None:
521
- """
522
- Sets :py:attr:`lifetime` to ``other``.
523
-
524
- :param other: An integer.
525
- :type other: :py:obj:`int`
526
- :returns: Nothing.
527
- :rtype: :py:obj:`None`
528
-
529
- """
530
- self._lifetime = other