Compare commits
16 Commits
| Author | SHA1 | Date | |
|---|---|---|---|
| b6ede1af3b | |||
| 6f02f0b925 | |||
| e38a402d44 | |||
| a05b5bdaa6 | |||
| 3053f2db69 | |||
| 859d962cae | |||
| 60254999df | |||
| 93f089c431 | |||
| e59cd77908 | |||
| 1275ffa882 | |||
| 6ab8749f11 | |||
| 9923f45a95 | |||
| 13df6822c8 | |||
| 9bb33b6020 | |||
| b78c503b31 | |||
| b0caa42ca2 |
1
.gitignore
vendored
1
.gitignore
vendored
@@ -3,3 +3,4 @@ __pycache__
|
|||||||
**/__pycache__
|
**/__pycache__
|
||||||
dist/
|
dist/
|
||||||
*.egg-info/
|
*.egg-info/
|
||||||
|
build/
|
||||||
11
README.md
11
README.md
@@ -1,16 +1,18 @@
|
|||||||
# Georideapilib
|
# georideapilib
|
||||||

|

|
||||||
|
|
||||||
⚠️ this is not an official implementation
|
⚠️ this is not an official implementation
|
||||||
|
|
||||||
|
[](https://pypi.org/project/georideapilib/)
|
||||||
|
|
||||||
Official georide website: https://georide.fr/
|
Official georide website: https://georide.fr/
|
||||||
|
|
||||||
This library can control your georide tracker tracker
|
This library can control your georide tracker
|
||||||
|
|
||||||
|
|
||||||
Some code have been taken from @alexmohr https://github.com/alexmohr/sonyapilib
|
Some code have been taken from @alexmohr https://github.com/alexmohr/sonyapilib
|
||||||
|
|
||||||
This library is used as communication interface in a home assistant component to control media players, which can be found here:(Not ready yet ;))
|
This library is used as communication interface in a home assistant component to control media players, which can be found here: https://github.com/ptimatth/GeorideHA
|
||||||
|
|
||||||
At the moment not all functions offered by the api are implemented. If you miss a function feel free to create a pull request or open a feature request.
|
At the moment not all functions offered by the api are implemented. If you miss a function feel free to create a pull request or open a feature request.
|
||||||
|
|
||||||
@@ -28,5 +30,4 @@ This library has been tested with python 3.7 and above, functionality for older
|
|||||||
- https://github.com/ptimatth/pyGeoride
|
- https://github.com/ptimatth/pyGeoride
|
||||||
|
|
||||||
## Todo
|
## Todo
|
||||||
- [ ] Add support of SocketIO connection
|
|
||||||
- [ ] Add support of "Get a shared trip" endpoint
|
- [ ] Add support of "Get a shared trip" endpoint
|
||||||
|
|||||||
@@ -5,9 +5,11 @@ import time
|
|||||||
import datetime
|
import datetime
|
||||||
|
|
||||||
logging.config.fileConfig('logging.conf')
|
logging.config.fileConfig('logging.conf')
|
||||||
from georideapilib.objects import GeorideAccount
|
from georideapilib.objects import GeoRideAccount
|
||||||
import georideapilib.api as GeorideApi
|
import georideapilib.api as GeoRideApi
|
||||||
from georideapilib.socket import GeorideSocket
|
from georideapilib.socket import GeoRideSocket
|
||||||
|
|
||||||
|
from threading import Thread
|
||||||
|
|
||||||
_LOGGER = logging.getLogger('example')
|
_LOGGER = logging.getLogger('example')
|
||||||
|
|
||||||
@@ -18,60 +20,69 @@ def example():
|
|||||||
# account = GeorideAccount(0, "<your_email>", False, token)
|
# account = GeorideAccount(0, "<your_email>", False, token)
|
||||||
|
|
||||||
|
|
||||||
account = GeorideApi.get_authorisation_token("<your_email>", "<your_password>")
|
account = GeoRideApi.get_authorisation_token("<your_email>", "<your_password>")
|
||||||
print("token 1: ", account.auth_token)
|
print("token 1: ", account.auth_token)
|
||||||
_LOGGER.info("token 1: %s", account.auth_token)
|
_LOGGER.info("token 1: %s", account.auth_token)
|
||||||
# pylint: disable=W0105
|
# pylint: disable=W0105
|
||||||
|
|
||||||
# socket = GeorideSocket()
|
def locked_locked(data):
|
||||||
# socket.init()
|
_LOGGER.info("Lock received")
|
||||||
# socket.connect(account.auth_token)
|
|
||||||
# time.sleep(10)
|
|
||||||
# socket.disconnect()
|
def connect_socket(account):
|
||||||
|
socket = GeoRideSocket()
|
||||||
|
socket.subscribe_locked(locked_locked)
|
||||||
|
socket.init()
|
||||||
|
socket.connect(account.auth_token)
|
||||||
|
time.sleep(10)
|
||||||
|
socket.disconnect()
|
||||||
|
|
||||||
|
thread = Thread(target=connect_socket, args=(account))
|
||||||
|
thread.start()
|
||||||
|
|
||||||
"""
|
"""
|
||||||
account.auth_token = GeorideApi.renewToken(account.auth_token)
|
account.auth_token = GeoRideApi.renewToken(account.auth_token)
|
||||||
print("token 2: ", account.auth_token)
|
print("token 2: ", account.auth_token)
|
||||||
""" # pylint: disable=W0105
|
""" # pylint: disable=W0105
|
||||||
|
|
||||||
user = GeorideApi.get_user(account.auth_token)
|
user = GeoRideApi.get_user(account.auth_token)
|
||||||
_LOGGER.info("User: %s", user.first_name)
|
_LOGGER.info("User: %s", user.first_name)
|
||||||
|
|
||||||
trackers = GeorideApi.get_trackers(account.auth_token)
|
trackers = GeoRideApi.get_trackers(account.auth_token)
|
||||||
tracker = trackers[0]
|
tracker = trackers[0]
|
||||||
_LOGGER.info("Tracker name: %s", tracker.tracker_name)
|
_LOGGER.info("Tracker name: %s", tracker.tracker_name)
|
||||||
|
|
||||||
trips = GeorideApi.get_trips(account.auth_token, tracker.tracker_id, "2019-10-10", "2019-10-24")
|
trips = GeoRideApi.get_trips(account.auth_token, tracker.tracker_id, "2019-10-10", "2019-10-24")
|
||||||
trip = trips[0]
|
trip = trips[0]
|
||||||
trip_date = datetime.datetime.strptime("2019-10-10T06:45:34.000Z", '%Y-%m-%dT%H:%M:%S.%fZ')
|
trip_date = datetime.datetime.strptime("2019-10-10T06:45:34.000Z", '%Y-%m-%dT%H:%M:%S.%fZ')
|
||||||
_LOGGER.info("Trip date: %s, from: %s, to: %s", trip_date, trip.nice_start_address,
|
_LOGGER.info("Trip date: %s, from: %s, to: %s", trip_date, trip.nice_start_address,
|
||||||
trip.nice_end_address)
|
trip.nice_end_address)
|
||||||
|
|
||||||
positions = GeorideApi.get_positions(account.auth_token, tracker.tracker_id,
|
positions = GeoRideApi.get_positions(account.auth_token, tracker.tracker_id,
|
||||||
"2019-10-10", "2019-10-24")
|
"2019-10-10", "2019-10-24")
|
||||||
position = positions[0]
|
position = positions[0]
|
||||||
_LOGGER.info("Position speed: %s, lon: %s, lat: %s", position.speed, position.longitude,
|
_LOGGER.info("Position speed: %s, lon: %s, lat: %s", position.speed, position.longitude,
|
||||||
position.latitude)
|
position.latitude)
|
||||||
|
|
||||||
|
|
||||||
trip_shared = GeorideApi.share_a_trip_by_date(account.auth_token, tracker.tracker_id,
|
trip_shared = GeoRideApi.share_a_trip_by_date(account.auth_token, tracker.tracker_id,
|
||||||
"2019-10-10", "2019-10-24")
|
"2019-10-10", "2019-10-24")
|
||||||
_LOGGER.info("tripShared url: %s, id: %s", trip_shared.url, trip_shared.share_id)
|
_LOGGER.info("tripShared url: %s, id: %s", trip_shared.url, trip_shared.share_id)
|
||||||
|
|
||||||
time.sleep(10)
|
time.sleep(10)
|
||||||
have_been_locked = GeorideApi.lock_tracker(account.auth_token, tracker.tracker_id)
|
have_been_locked = GeoRideApi.lock_tracker(account.auth_token, tracker.tracker_id)
|
||||||
_LOGGER.info("Tracker have been locked: %s", have_been_locked)
|
_LOGGER.info("Tracker have been locked: %s", have_been_locked)
|
||||||
|
|
||||||
time.sleep(10)
|
time.sleep(10)
|
||||||
have_been_unlocked = GeorideApi.unlock_tracker(account.auth_token, tracker.tracker_id)
|
have_been_unlocked = GeoRideApi.unlock_tracker(account.auth_token, tracker.tracker_id)
|
||||||
_LOGGER.info("Tracker have been unlocked: %s", have_been_unlocked)
|
_LOGGER.info("Tracker have been unlocked: %s", have_been_unlocked)
|
||||||
|
|
||||||
time.sleep(10)
|
time.sleep(10)
|
||||||
is_locked = GeorideApi.toogle_lock_tracker(account.auth_token, tracker.tracker_id)
|
is_locked = GeoRideApi.toogle_lock_tracker(account.auth_token, tracker.tracker_id)
|
||||||
_LOGGER.info("Tracker is locked: %s", is_locked)
|
_LOGGER.info("Tracker is locked: %s", is_locked)
|
||||||
|
|
||||||
time.sleep(10)
|
time.sleep(10)
|
||||||
trackers = GeorideApi.get_trackers(account.auth_token)
|
trackers = GeoRideApi.get_trackers(account.auth_token)
|
||||||
tracker = trackers[0]
|
tracker = trackers[0]
|
||||||
_LOGGER.info("Tracker name: %s is locked: %s", tracker.tracker_name, tracker.is_locked)
|
_LOGGER.info("Tracker name: %s is locked: %s", tracker.tracker_name, tracker.is_locked)
|
||||||
|
|
||||||
|
|||||||
@@ -8,12 +8,12 @@ import logging
|
|||||||
import requests
|
import requests
|
||||||
|
|
||||||
from georideapilib.objects import (
|
from georideapilib.objects import (
|
||||||
GeorideTracker,
|
GeoRideTracker,
|
||||||
GeorideAccount,
|
GeoRideAccount,
|
||||||
GeorideUser,
|
GeoRideUser,
|
||||||
GeorideTrackerTrip,
|
GeoRideTrackerTrip,
|
||||||
GeorideTrackerPosition,
|
GeoRideTrackerPosition,
|
||||||
GeorideSharedTrip
|
GeoRideSharedTrip
|
||||||
)
|
)
|
||||||
|
|
||||||
from georideapilib.exception import (
|
from georideapilib.exception import (
|
||||||
@@ -51,13 +51,14 @@ def get_authorisation_token(email, password):
|
|||||||
if response.status_code == 200:
|
if response.status_code == 200:
|
||||||
_LOGGER.debug("Login success")
|
_LOGGER.debug("Login success")
|
||||||
response_data = response.json()
|
response_data = response.json()
|
||||||
account = GeorideAccount.from_json(response_data)
|
account = GeoRideAccount.from_json(response_data)
|
||||||
elif response.status_code == 403:
|
elif response.status_code == 403:
|
||||||
_LOGGER.warnning("Login failed")
|
_LOGGER.warning("Login failed")
|
||||||
raise LoginException("Login failed")
|
raise LoginException(get_authorisation_token, "Login failed")
|
||||||
else:
|
else:
|
||||||
_LOGGER.error("Georide login, http error code: %s", response.status_code)
|
_LOGGER.error("Georide login, http error code: %s", response.status_code)
|
||||||
raise SeverException("Georide login, http error code: {}".format(response.status_code))
|
raise SeverException(get_authorisation_token,
|
||||||
|
"Georide login, http error code: {}".format(response.status_code))
|
||||||
return account
|
return account
|
||||||
|
|
||||||
|
|
||||||
@@ -73,10 +74,11 @@ def renew_token(token):
|
|||||||
new_token = response_data['authToken']
|
new_token = response_data['authToken']
|
||||||
elif response.status_code == 401:
|
elif response.status_code == 401:
|
||||||
_LOGGER.warnning("Renew token refused")
|
_LOGGER.warnning("Renew token refused")
|
||||||
raise UnauthorizedException("Renew token refused")
|
raise UnauthorizedException(renew_token, "Renew token refused")
|
||||||
else:
|
else:
|
||||||
_LOGGER.error("Georide login, http error code: %s", response.status_code)
|
_LOGGER.error("Georide login, http error code: %s", response.status_code)
|
||||||
raise SeverException("Georide login, http error code: {}".format(response.status_code))
|
raise SeverException(renew_token,
|
||||||
|
"Georide login, http error code: {}".format(response.status_code))
|
||||||
return new_token
|
return new_token
|
||||||
|
|
||||||
def revoke_token(token):
|
def revoke_token(token):
|
||||||
@@ -87,7 +89,7 @@ def revoke_token(token):
|
|||||||
headers=headers)
|
headers=headers)
|
||||||
if response.status_code == 401:
|
if response.status_code == 401:
|
||||||
_LOGGER.warnning("Token allready revoked")
|
_LOGGER.warnning("Token allready revoked")
|
||||||
raise UnauthorizedException("Token allready revoked")
|
raise UnauthorizedException(revoke_token, "Token allready revoked")
|
||||||
if response.status_code == 401:
|
if response.status_code == 401:
|
||||||
_LOGGER.warnning("Token allready revoked")
|
_LOGGER.warnning("Token allready revoked")
|
||||||
return False
|
return False
|
||||||
@@ -102,11 +104,12 @@ def get_user(token):
|
|||||||
headers=headers)
|
headers=headers)
|
||||||
response_data = response.json()
|
response_data = response.json()
|
||||||
_LOGGER.debug(response_data)
|
_LOGGER.debug(response_data)
|
||||||
account = GeorideUser.from_json(response_data)
|
account = GeoRideUser.from_json(response_data)
|
||||||
return account
|
return account
|
||||||
|
|
||||||
def get_trackers(token):
|
def get_trackers(token):
|
||||||
""" get user trackers """
|
""" get user trackers """
|
||||||
|
|
||||||
headers = {"Authorization": "Bearer " + token}
|
headers = {"Authorization": "Bearer " + token}
|
||||||
response = _SESSION.get(
|
response = _SESSION.get(
|
||||||
GEORIDE_API_HOST + GEORIDE_API_ENDPOINT_TRAKERS,
|
GEORIDE_API_HOST + GEORIDE_API_ENDPOINT_TRAKERS,
|
||||||
@@ -115,7 +118,8 @@ def get_trackers(token):
|
|||||||
response_data = response.json()
|
response_data = response.json()
|
||||||
trackers = []
|
trackers = []
|
||||||
for json_tracker in response_data:
|
for json_tracker in response_data:
|
||||||
trackers.append(GeorideTracker.from_json(json_tracker))
|
_LOGGER.debug(json_tracker)
|
||||||
|
trackers.append(GeoRideTracker.from_json(json_tracker))
|
||||||
return trackers
|
return trackers
|
||||||
|
|
||||||
|
|
||||||
@@ -130,7 +134,7 @@ def get_trips(token, tracker_id, from_date, to_date):
|
|||||||
response_data = response.json()
|
response_data = response.json()
|
||||||
trips = []
|
trips = []
|
||||||
for json_trip in response_data:
|
for json_trip in response_data:
|
||||||
trips.append(GeorideTrackerTrip.from_json(json_trip))
|
trips.append(GeoRideTrackerTrip.from_json(json_trip))
|
||||||
return trips
|
return trips
|
||||||
|
|
||||||
def get_positions(token, tracker_id, from_date, to_date):
|
def get_positions(token, tracker_id, from_date, to_date):
|
||||||
@@ -144,7 +148,7 @@ def get_positions(token, tracker_id, from_date, to_date):
|
|||||||
response_data = response.json()
|
response_data = response.json()
|
||||||
positions = []
|
positions = []
|
||||||
for json_position in response_data:
|
for json_position in response_data:
|
||||||
positions.append(GeorideTrackerPosition.from_json(json_position))
|
positions.append(GeoRideTrackerPosition.from_json(json_position))
|
||||||
return positions
|
return positions
|
||||||
|
|
||||||
def share_a_trip_by_trip_id(token, tracker_id, trip_id):
|
def share_a_trip_by_trip_id(token, tracker_id, trip_id):
|
||||||
@@ -182,7 +186,7 @@ def _share_a_trip(token, tracker_id, trip_id=None, from_date=None, # pylint: dis
|
|||||||
headers=headers)
|
headers=headers)
|
||||||
|
|
||||||
response_data = response.json()
|
response_data = response.json()
|
||||||
return GeorideSharedTrip.from_json(response_data)
|
return GeoRideSharedTrip.from_json(response_data)
|
||||||
|
|
||||||
def lock_tracker(token, tracker_id):
|
def lock_tracker(token, tracker_id):
|
||||||
""" used to lock a tracker """
|
""" used to lock a tracker """
|
||||||
|
|||||||
@@ -1,4 +1,4 @@
|
|||||||
""" all geroide exception """
|
""" all GeoRide exception """
|
||||||
|
|
||||||
class Error(Exception):
|
class Error(Exception):
|
||||||
"""Base class for exceptions in this module."""
|
"""Base class for exceptions in this module."""
|
||||||
|
|||||||
@@ -3,7 +3,12 @@ Georide objects implementation
|
|||||||
@author Matthieu DUVAL <matthieu@duval-dev.fr>
|
@author Matthieu DUVAL <matthieu@duval-dev.fr>
|
||||||
"""
|
"""
|
||||||
|
|
||||||
class GeorideSharedTrip:
|
import logging
|
||||||
|
|
||||||
|
|
||||||
|
_LOGGER = logging.getLogger(__name__)
|
||||||
|
|
||||||
|
class GeoRideSharedTrip:
|
||||||
""" Shared trip object representation """
|
""" Shared trip object representation """
|
||||||
def __init__(self, url, shareId):
|
def __init__(self, url, shareId):
|
||||||
self._url = url
|
self._url = url
|
||||||
@@ -22,12 +27,12 @@ class GeorideSharedTrip:
|
|||||||
@staticmethod
|
@staticmethod
|
||||||
def from_json(json):
|
def from_json(json):
|
||||||
"""return new object fromjson"""
|
"""return new object fromjson"""
|
||||||
return GeorideSharedTrip(
|
return GeoRideSharedTrip(
|
||||||
json['url'],
|
json['url'],
|
||||||
json['shareId']
|
json['shareId']
|
||||||
)
|
)
|
||||||
|
|
||||||
class GeorideTrackerTrip: # pylint: disable=too-many-instance-attributes
|
class GeoRideTrackerTrip: # pylint: disable=too-many-instance-attributes
|
||||||
""" Trip object representation """
|
""" Trip object representation """
|
||||||
def __init__(self, trip_id, tracker_id, average_speed, max_speed, distance, duration, # pylint: disable=R0914, R0913
|
def __init__(self, trip_id, tracker_id, average_speed, max_speed, distance, duration, # pylint: disable=R0914, R0913
|
||||||
start_address, nice_start_address, start_lat, start_lon, end_address,
|
start_address, nice_start_address, start_lat, start_lon, end_address,
|
||||||
@@ -134,7 +139,7 @@ class GeorideTrackerTrip: # pylint: disable=too-many-instance-attributes
|
|||||||
@staticmethod
|
@staticmethod
|
||||||
def from_json(json):
|
def from_json(json):
|
||||||
"""return new object from json"""
|
"""return new object from json"""
|
||||||
return GeorideTrackerTrip(
|
return GeoRideTrackerTrip(
|
||||||
json['id'],
|
json['id'],
|
||||||
json['trackerId'],
|
json['trackerId'],
|
||||||
json['averageSpeed'],
|
json['averageSpeed'],
|
||||||
@@ -153,8 +158,7 @@ class GeorideTrackerTrip: # pylint: disable=too-many-instance-attributes
|
|||||||
json['endTime']
|
json['endTime']
|
||||||
)
|
)
|
||||||
|
|
||||||
|
class GeoRideTrackerPosition:
|
||||||
class GeorideTrackerPosition:
|
|
||||||
""" Tracker position object representation """
|
""" Tracker position object representation """
|
||||||
def __init__(self, fixtime, latitude, longitude, altitude, speed, address): # pylint: disable= R0913
|
def __init__(self, fixtime, latitude, longitude, altitude, speed, address): # pylint: disable= R0913
|
||||||
self._fixtime = fixtime
|
self._fixtime = fixtime
|
||||||
@@ -197,7 +201,7 @@ class GeorideTrackerPosition:
|
|||||||
@staticmethod
|
@staticmethod
|
||||||
def from_json(json):
|
def from_json(json):
|
||||||
"""return new object fromjson"""
|
"""return new object fromjson"""
|
||||||
return GeorideTrackerPosition(
|
return GeoRideTrackerPosition(
|
||||||
json['fixtime'],
|
json['fixtime'],
|
||||||
json['latitude'],
|
json['latitude'],
|
||||||
json['longitude'],
|
json['longitude'],
|
||||||
@@ -206,10 +210,7 @@ class GeorideTrackerPosition:
|
|||||||
json['address']
|
json['address']
|
||||||
)
|
)
|
||||||
|
|
||||||
|
class GeoRideTracker: # pylint: disable=R0904,R0902
|
||||||
|
|
||||||
|
|
||||||
class GeorideTracker: # pylint: disable=R0904,R0902
|
|
||||||
""" Tracker position object representation """
|
""" Tracker position object representation """
|
||||||
def __init__(self, tracker_id, tracker_name, device_button_action, device_button_delay, # pylint: disable= R0913, R0914, R0915
|
def __init__(self, tracker_id, tracker_name, device_button_action, device_button_delay, # pylint: disable= R0913, R0914, R0915
|
||||||
vibration_level, is_old_tracker, auto_lock_freezed_to, fixtime, role,
|
vibration_level, is_old_tracker, auto_lock_freezed_to, fixtime, role,
|
||||||
@@ -218,34 +219,34 @@ class GeorideTracker: # pylint: disable=R0904,R0902
|
|||||||
longitude, altitude, locked_position_id, locked_latitude, locked_longitude,
|
longitude, altitude, locked_position_id, locked_latitude, locked_longitude,
|
||||||
is_locked, can_see_position, can_lock, can_unlock, can_share, can_unshare,
|
is_locked, can_see_position, can_lock, can_unlock, can_share, can_unshare,
|
||||||
can_check_speed, can_see_statistics, can_send_broken_down_signal,
|
can_check_speed, can_see_statistics, can_send_broken_down_signal,
|
||||||
can_send_stolen_signal, status):
|
can_send_stolen_signal, status, subscription_id, external_battery_voltage,
|
||||||
|
internal_battery_voltage, timezone, is_second_gen, is_up_to_date):
|
||||||
self._tracker_id = tracker_id
|
self._tracker_id = tracker_id
|
||||||
self._tracker_name = tracker_name
|
self._tracker_name = tracker_name
|
||||||
self._device_button_action = device_button_action
|
self._device_button_action = device_button_action
|
||||||
self._device_button_delay = device_button_delay
|
self._device_button_delay = device_button_delay
|
||||||
self._vibration_level = vibration_level
|
self._vibration_level = vibration_level
|
||||||
self._is_old_tracker = is_old_tracker
|
self._is_old_tracker = is_old_tracker
|
||||||
self._auto_lock_freezed_to = auto_lock_freezed_to
|
|
||||||
self._fixtime = fixtime
|
|
||||||
self._role = role
|
|
||||||
self._last_payment_date = last_payment_date
|
|
||||||
self._gift_card_id = gift_card_id
|
|
||||||
self._expires = expires
|
|
||||||
self._activation_date = activation_date
|
|
||||||
self._odometer = odometer
|
|
||||||
self._is_stolen = is_stolen
|
|
||||||
self._is_crashed = is_crashed
|
|
||||||
self._crash_detection_disabled = crash_detection_disabled
|
|
||||||
self._speed = speed
|
|
||||||
self._moving = moving
|
|
||||||
self._position_id = position_id
|
self._position_id = position_id
|
||||||
|
self._fixtime = fixtime
|
||||||
self._latitude = latitude
|
self._latitude = latitude
|
||||||
self._longitude = longitude
|
self._longitude = longitude
|
||||||
self._altitude = altitude
|
self._altitude = altitude
|
||||||
self._locked_position_id = locked_position_id
|
self._locked_position_id = locked_position_id
|
||||||
self._locked_latitude = locked_latitude
|
self._locked_latitude = locked_latitude
|
||||||
self._locked_longitude = locked_longitude
|
self._locked_longitude = locked_longitude
|
||||||
|
self._role = role
|
||||||
|
self._last_payment_date = last_payment_date
|
||||||
|
self._gift_card_id = gift_card_id
|
||||||
|
self._expires = expires
|
||||||
|
self._activation_date = activation_date
|
||||||
|
self._odometer = odometer
|
||||||
self._is_locked = is_locked
|
self._is_locked = is_locked
|
||||||
|
self._is_stolen = is_stolen
|
||||||
|
self._is_crashed = is_crashed
|
||||||
|
self._crash_detection_disabled = crash_detection_disabled
|
||||||
|
self._speed = speed
|
||||||
|
self._moving = moving
|
||||||
self._can_see_position = can_see_position
|
self._can_see_position = can_see_position
|
||||||
self._can_lock = can_lock
|
self._can_lock = can_lock
|
||||||
self._can_unlock = can_unlock
|
self._can_unlock = can_unlock
|
||||||
@@ -256,7 +257,13 @@ class GeorideTracker: # pylint: disable=R0904,R0902
|
|||||||
self._can_send_broken_down_signal = can_send_broken_down_signal
|
self._can_send_broken_down_signal = can_send_broken_down_signal
|
||||||
self._can_send_stolen_signal = can_send_stolen_signal
|
self._can_send_stolen_signal = can_send_stolen_signal
|
||||||
self._status = status
|
self._status = status
|
||||||
|
self._auto_lock_freezed_to = auto_lock_freezed_to
|
||||||
|
self._subscription_id = subscription_id
|
||||||
|
self._external_battery_voltage = external_battery_voltage
|
||||||
|
self._internal_battery_voltage = internal_battery_voltage
|
||||||
|
self._timezone = timezone
|
||||||
|
self._is_second_gen = is_second_gen
|
||||||
|
self._is_up_to_date = is_up_to_date
|
||||||
@property
|
@property
|
||||||
def tracker_id(self):
|
def tracker_id(self):
|
||||||
""" tracker_id """
|
""" tracker_id """
|
||||||
@@ -337,11 +344,21 @@ class GeorideTracker: # pylint: disable=R0904,R0902
|
|||||||
""" is_stolen """
|
""" is_stolen """
|
||||||
return self._is_stolen
|
return self._is_stolen
|
||||||
|
|
||||||
|
@is_stolen.setter
|
||||||
|
def is_stolen(self, is_stolen):
|
||||||
|
""" is_stolen setter"""
|
||||||
|
self._is_stolen = is_stolen
|
||||||
|
|
||||||
@property
|
@property
|
||||||
def is_crashed(self):
|
def is_crashed(self):
|
||||||
""" is_crashed """
|
""" is_crashed """
|
||||||
return self._is_crashed
|
return self._is_crashed
|
||||||
|
|
||||||
|
@is_crashed.setter
|
||||||
|
def is_crashed(self, is_crashed):
|
||||||
|
""" is_crashed setter"""
|
||||||
|
self._is_crashed = is_crashed
|
||||||
|
|
||||||
@property
|
@property
|
||||||
def crash_detection_disabled(self):
|
def crash_detection_disabled(self):
|
||||||
""" crash_detection_disabled """
|
""" crash_detection_disabled """
|
||||||
@@ -487,10 +504,41 @@ class GeorideTracker: # pylint: disable=R0904,R0902
|
|||||||
""" status """
|
""" status """
|
||||||
self._status = status
|
self._status = status
|
||||||
|
|
||||||
|
@property
|
||||||
|
def subscription_id(self):
|
||||||
|
"""subscription_id property"""
|
||||||
|
return self._subscription_id
|
||||||
|
|
||||||
|
@property
|
||||||
|
def external_battery_voltage(self):
|
||||||
|
"""_external_battery_voltage property"""
|
||||||
|
return self._external_battery_voltage
|
||||||
|
|
||||||
|
@property
|
||||||
|
def internal_battery_voltage(self):
|
||||||
|
"""internal_battery_voltage property"""
|
||||||
|
return self._internal_battery_voltage
|
||||||
|
|
||||||
|
@property
|
||||||
|
def timezone(self):
|
||||||
|
"""timezone property"""
|
||||||
|
return self._timezone
|
||||||
|
|
||||||
|
@property
|
||||||
|
def is_second_gen(self):
|
||||||
|
"""is_second_gen property"""
|
||||||
|
return self._is_second_gen
|
||||||
|
|
||||||
|
@property
|
||||||
|
def is_up_to_date(self):
|
||||||
|
"""is_up_to_date property"""
|
||||||
|
return self._is_up_to_date
|
||||||
|
|
||||||
|
|
||||||
@staticmethod
|
@staticmethod
|
||||||
def from_json(json):
|
def from_json(json):
|
||||||
"""return new object fromjson"""
|
"""return new object fromjson"""
|
||||||
return GeorideTracker(
|
return GeoRideTracker(
|
||||||
json['trackerId'],
|
json['trackerId'],
|
||||||
json['trackerName'],
|
json['trackerName'],
|
||||||
json['deviceButtonAction'],
|
json['deviceButtonAction'],
|
||||||
@@ -527,11 +575,61 @@ class GeorideTracker: # pylint: disable=R0904,R0902
|
|||||||
json['canSeeStatistics'],
|
json['canSeeStatistics'],
|
||||||
json['canSendBrokenDownSignal'],
|
json['canSendBrokenDownSignal'],
|
||||||
json['canSendStolenSignal'],
|
json['canSendStolenSignal'],
|
||||||
json['status']
|
json['status'],
|
||||||
|
None if json['subscriptionId'] == "None" else json['subscriptionId'],
|
||||||
|
None if json['externalBatteryVoltage'] == "None" else json['externalBatteryVoltage'],
|
||||||
|
None if json['internalBatteryVoltage'] == "None" else json['internalBatteryVoltage'],
|
||||||
|
json['timezone'],
|
||||||
|
json['isSecondGen'],
|
||||||
|
json['isUpToDate']
|
||||||
)
|
)
|
||||||
|
|
||||||
|
def update_all_data(self, tracker):
|
||||||
|
"""update all data of th tracker from anew object"""
|
||||||
|
self._tracker_name = tracker.tracker_name
|
||||||
|
self._device_button_action = tracker.device_button_action
|
||||||
|
self._device_button_delay = tracker.device_button_delay
|
||||||
|
self._vibration_level = tracker.vibration_level
|
||||||
|
self._is_old_tracker = tracker.is_old_tracker
|
||||||
|
self._position_id = tracker.position_id
|
||||||
|
self._fixtime = tracker.fixtime
|
||||||
|
self._latitude = tracker.latitude
|
||||||
|
self._longitude = tracker.longitude
|
||||||
|
self._altitude = tracker.altitude
|
||||||
|
self._locked_position_id = tracker.locked_position_id
|
||||||
|
self._locked_latitude = tracker.locked_latitude
|
||||||
|
self._locked_longitude = tracker.locked_longitude
|
||||||
|
self._role = tracker.role
|
||||||
|
self._last_payment_date = tracker.last_payment_date
|
||||||
|
self._gift_card_id = tracker.gift_card_id
|
||||||
|
self._expires = tracker.expires
|
||||||
|
self._activation_date = tracker.activation_date
|
||||||
|
self._odometer = tracker.odometer
|
||||||
|
self._is_locked = tracker.is_locked
|
||||||
|
self._is_stolen = tracker.is_stolen
|
||||||
|
self._is_crashed = tracker.is_crashed
|
||||||
|
self._crash_detection_disabled = tracker.crash_detection_disabled
|
||||||
|
self._speed = tracker.speed
|
||||||
|
self._moving = tracker.moving
|
||||||
|
self._can_see_position = tracker.can_see_position
|
||||||
|
self._can_lock = tracker.can_lock
|
||||||
|
self._can_unlock = tracker.can_unlock
|
||||||
|
self._can_share = tracker.can_share
|
||||||
|
self._can_unshare = tracker.can_unshare
|
||||||
|
self._can_check_speed = tracker.can_check_speed
|
||||||
|
self._can_see_statistics = tracker.can_see_statistics
|
||||||
|
self._can_send_broken_down_signal = tracker.can_send_broken_down_signal
|
||||||
|
self._can_send_stolen_signal = tracker.can_send_stolen_signal
|
||||||
|
self._status = tracker.status
|
||||||
|
self._auto_lock_freezed_to = tracker.auto_lock_freezed_to
|
||||||
|
self._subscription_id = tracker.subscription_id
|
||||||
|
self._external_battery_voltage = tracker.external_battery_voltage
|
||||||
|
self._internal_battery_voltage = tracker.internal_battery_voltage
|
||||||
|
self._timezone = tracker.timezone
|
||||||
|
self._is_second_gen = tracker.is_second_gen
|
||||||
|
self._is_up_to_date = tracker.is_up_to_date
|
||||||
|
|
||||||
class GeorideAccount:
|
class GeoRideAccount:
|
||||||
""" Account object representation """
|
""" Account object representation """
|
||||||
def __init__(self, account_id, email, is_admin, auth_token):
|
def __init__(self, account_id, email, is_admin, auth_token):
|
||||||
self._account_id = account_id
|
self._account_id = account_id
|
||||||
@@ -567,7 +665,7 @@ class GeorideAccount:
|
|||||||
@staticmethod
|
@staticmethod
|
||||||
def from_json(json):
|
def from_json(json):
|
||||||
"""return new object from_json"""
|
"""return new object from_json"""
|
||||||
return GeorideAccount(
|
return GeoRideAccount(
|
||||||
json['id'],
|
json['id'],
|
||||||
json['email'],
|
json['email'],
|
||||||
json['isAdmin'],
|
json['isAdmin'],
|
||||||
@@ -575,7 +673,8 @@ class GeorideAccount:
|
|||||||
)
|
)
|
||||||
|
|
||||||
|
|
||||||
class GeorideUser: # pylint: disable= R0902
|
|
||||||
|
class GeoRideUser: # pylint: disable= R0902
|
||||||
""" User object representation """
|
""" User object representation """
|
||||||
def __init__(self, user_id, email, first_name, created_at, phone_number, # pylint: disable= R0913
|
def __init__(self, user_id, email, first_name, created_at, phone_number, # pylint: disable= R0913
|
||||||
push_user_token, legal, date_of_birth):
|
push_user_token, legal, date_of_birth):
|
||||||
@@ -631,7 +730,7 @@ class GeorideUser: # pylint: disable= R0902
|
|||||||
@staticmethod
|
@staticmethod
|
||||||
def from_json(json):
|
def from_json(json):
|
||||||
"""return new object fromjson"""
|
"""return new object fromjson"""
|
||||||
return GeorideUser(
|
return GeoRideUser(
|
||||||
json['id'],
|
json['id'],
|
||||||
json['email'],
|
json['email'],
|
||||||
json['firstName'],
|
json['firstName'],
|
||||||
@@ -641,3 +740,95 @@ class GeorideUser: # pylint: disable= R0902
|
|||||||
json['legal'],
|
json['legal'],
|
||||||
json['dateOfBirth']
|
json['dateOfBirth']
|
||||||
)
|
)
|
||||||
|
|
||||||
|
#TODO: remove in v0.8.0
|
||||||
|
class GeorideSharedTrip(GeoRideSharedTrip):
|
||||||
|
""" Shared trip object representation """
|
||||||
|
|
||||||
|
def __init_subclass__(cls, **kwargs):
|
||||||
|
"""Print deprecation warning."""
|
||||||
|
super().__init_subclass__(**kwargs)
|
||||||
|
_LOGGER.warning(
|
||||||
|
"GeorideSharedTrip is deprecated, modify %s to use GeoRideSharedTrip",
|
||||||
|
cls.__name__,
|
||||||
|
)
|
||||||
|
|
||||||
|
def __init__(self, *argv):
|
||||||
|
"""Print deprecation warning."""
|
||||||
|
super().__init__(*argv)
|
||||||
|
_LOGGER.warning("GeorideSharedTrip is deprecated, modify your code to use GeoRideSharedTrip")
|
||||||
|
|
||||||
|
class GeorideTrackerTrip(GeoRideTrackerTrip):
|
||||||
|
""" Trip object representation """
|
||||||
|
def __init_subclass__(cls, **kwargs):
|
||||||
|
"""Print deprecation warning."""
|
||||||
|
super().__init_subclass__(**kwargs)
|
||||||
|
_LOGGER.warning(
|
||||||
|
"GeorideTrackerTrip is deprecated, modify %s to use GeoRideTrackerTrip",
|
||||||
|
cls.__name__,
|
||||||
|
)
|
||||||
|
def __init__(self, *argv):
|
||||||
|
"""Print deprecation warning."""
|
||||||
|
super().__init__(*argv)
|
||||||
|
_LOGGER.warning("GeorideTrackerTrip is deprecated, modify your code to use GeoRideTrackerTrip")
|
||||||
|
|
||||||
|
class GeorideTrackerPosition(GeoRideTrackerPosition):
|
||||||
|
""" Trip object representation """
|
||||||
|
def __init_subclass__(cls, **kwargs):
|
||||||
|
"""Print deprecation warning."""
|
||||||
|
super().__init_subclass__(**kwargs)
|
||||||
|
_LOGGER.warning(
|
||||||
|
"GeorideTrackerPosition is deprecated, modify %s to use GeoRideTrackerPosition",
|
||||||
|
cls.__name__,
|
||||||
|
)
|
||||||
|
|
||||||
|
def __init__(self, *argv):
|
||||||
|
"""Print deprecation warning."""
|
||||||
|
super().__init__(*argv)
|
||||||
|
_LOGGER.warning("GeorideTrackerPosition is deprecated, modify your code to use GeoRideTrackerPosition")
|
||||||
|
|
||||||
|
class GeorideTracker(GeoRideTracker):
|
||||||
|
""" Trip object representation """
|
||||||
|
def __init_subclass__(cls, **kwargs):
|
||||||
|
"""Print deprecation warning."""
|
||||||
|
super().__init_subclass__(**kwargs)
|
||||||
|
_LOGGER.warning(
|
||||||
|
"GeorideTracker is deprecated, modify %s to use GeoRideTracker",
|
||||||
|
cls.__name__,
|
||||||
|
)
|
||||||
|
|
||||||
|
def __init__(self, *argv):
|
||||||
|
"""Print deprecation warning."""
|
||||||
|
super().__init__(*argv)
|
||||||
|
_LOGGER.warning("GeorideTracker is deprecated, modify your code to use GeoRideTracker")
|
||||||
|
|
||||||
|
|
||||||
|
class GeorideAccount(GeoRideAccount):
|
||||||
|
""" Trip object representation """
|
||||||
|
def __init_subclass__(cls, **kwargs):
|
||||||
|
"""Print deprecation warning."""
|
||||||
|
super().__init_subclass__(**kwargs)
|
||||||
|
_LOGGER.warning(
|
||||||
|
"GeorideAccount is deprecated, modify %s to use GeoRideAccount",
|
||||||
|
cls.__name__,
|
||||||
|
)
|
||||||
|
|
||||||
|
def __init__(self, *argv):
|
||||||
|
"""Print deprecation warning."""
|
||||||
|
super().__init__(*argv)
|
||||||
|
_LOGGER.warning("GeorideAccount is deprecated, modify your code to use GeoRideAccount")
|
||||||
|
|
||||||
|
class GeorideUser(GeoRideUser):
|
||||||
|
""" Trip object representation """
|
||||||
|
def __init_subclass__(cls, **kwargs):
|
||||||
|
"""Print deprecation warning."""
|
||||||
|
super().__init_subclass__(**kwargs)
|
||||||
|
_LOGGER.warning(
|
||||||
|
"GeorideUser is deprecated, modify %s to use GeoRideUser",
|
||||||
|
cls.__name__,
|
||||||
|
)
|
||||||
|
|
||||||
|
def __init__(self, *argv):
|
||||||
|
"""Print deprecation warning."""
|
||||||
|
super().__init__(*argv)
|
||||||
|
_LOGGER.warning("GeorideUser is deprecated, modify your code to use GeoRideUser")
|
||||||
|
|||||||
@@ -1,4 +1,4 @@
|
|||||||
""" Georide socket-io implementation """
|
""" GeoRide socket-io implementation """
|
||||||
import logging
|
import logging
|
||||||
import socketio
|
import socketio
|
||||||
|
|
||||||
@@ -19,8 +19,8 @@ def on_disconnect():
|
|||||||
_LOGGER.debug('GeoRide socket disconnected')
|
_LOGGER.debug('GeoRide socket disconnected')
|
||||||
|
|
||||||
|
|
||||||
class GeorideSocket():
|
class GeoRideSocket():
|
||||||
"""docstring for GeorideSocket"""
|
"""docstring for GeoRideSocket"""
|
||||||
def __init__(self):
|
def __init__(self):
|
||||||
self._on_message_callback = None
|
self._on_message_callback = None
|
||||||
self._on_device_callback = None
|
self._on_device_callback = None
|
||||||
@@ -63,21 +63,21 @@ class GeorideSocket():
|
|||||||
""" on_message """
|
""" on_message """
|
||||||
_LOGGER.debug('Message received: %s', data)
|
_LOGGER.debug('Message received: %s', data)
|
||||||
if self._on_message_callback is not None:
|
if self._on_message_callback is not None:
|
||||||
self._on_message_callback()
|
self._on_message_callback(data)
|
||||||
|
|
||||||
@sio.on('device')
|
@sio.on('device')
|
||||||
def on_device(data):
|
def on_device(data):
|
||||||
""" on_device """
|
""" on_device """
|
||||||
_LOGGER.debug('Device received: %s', data)
|
_LOGGER.debug('Device received: %s', data)
|
||||||
if self._on_device_callback is not None:
|
if self._on_device_callback is not None:
|
||||||
self._on_device_callback()
|
self._on_device_callback(data)
|
||||||
|
|
||||||
@sio.on('position')
|
@sio.on('position')
|
||||||
def on_position(data):
|
def on_position(data):
|
||||||
""" on_position """
|
""" on_position """
|
||||||
_LOGGER.debug('Position received:%s', data)
|
_LOGGER.debug('Position received:%s', data)
|
||||||
if self._on_position_callback is not None:
|
if self._on_position_callback is not None:
|
||||||
self._on_position_callback()
|
self._on_position_callback(data)
|
||||||
|
|
||||||
@sio.on('alarm')
|
@sio.on('alarm')
|
||||||
def on_alarm(data):
|
def on_alarm(data):
|
||||||
@@ -98,8 +98,7 @@ class GeorideSocket():
|
|||||||
""" on_locked """
|
""" on_locked """
|
||||||
_LOGGER.debug('Locked received: %s', data)
|
_LOGGER.debug('Locked received: %s', data)
|
||||||
if self._on_locked_callback is not None:
|
if self._on_locked_callback is not None:
|
||||||
self._on_locked_callback()
|
self._on_locked_callback(data)
|
||||||
|
|
||||||
self._initialised = True
|
self._initialised = True
|
||||||
|
|
||||||
def connect(self, auth_token):
|
def connect(self, auth_token):
|
||||||
@@ -113,3 +112,19 @@ class GeorideSocket():
|
|||||||
def disconnect(self):
|
def disconnect(self):
|
||||||
"""disconnect from the georide socket"""
|
"""disconnect from the georide socket"""
|
||||||
sio.disconnect()
|
sio.disconnect()
|
||||||
|
|
||||||
|
|
||||||
|
#TODO: remove in v0.8.0
|
||||||
|
class GeorideSocket(GeoRideSocket):
|
||||||
|
""" Trip object representation """
|
||||||
|
def __init_subclass__(cls, **kwargs):
|
||||||
|
"""Print deprecation warning."""
|
||||||
|
super().__init_subclass__(**kwargs)
|
||||||
|
_LOGGER.warning(
|
||||||
|
"GeorideSocket is deprecated, modify %s to use GeoRideSocket",
|
||||||
|
cls.__name__,
|
||||||
|
)
|
||||||
|
def __init__(self, *argv):
|
||||||
|
"""Print deprecation warning."""
|
||||||
|
super().__init__(*argv)
|
||||||
|
_LOGGER.warning("GeorideSocket is deprecated, modify your code to use GeoRideSocket")
|
||||||
@@ -17,6 +17,12 @@ handlers=consoleHandler
|
|||||||
qualname=simpleExample
|
qualname=simpleExample
|
||||||
propagate=0
|
propagate=0
|
||||||
|
|
||||||
|
[logger_engine_io]
|
||||||
|
level=ERROR
|
||||||
|
handlers=consoleHandler
|
||||||
|
qualname=engineio.client
|
||||||
|
propagate=0
|
||||||
|
|
||||||
|
|
||||||
[handler_consoleHandler]
|
[handler_consoleHandler]
|
||||||
class=StreamHandler
|
class=StreamHandler
|
||||||
|
|||||||
@@ -1,2 +1,2 @@
|
|||||||
[metadata]
|
[metadata]
|
||||||
description-file = README.md
|
description_file = README.md
|
||||||
12
setup.py
12
setup.py
@@ -19,16 +19,16 @@ CURRENT_DIR = os.path.dirname(__file__)
|
|||||||
setup(
|
setup(
|
||||||
name='georideapilib',
|
name='georideapilib',
|
||||||
packages=['georideapilib'], # this must be the same as the name above
|
packages=['georideapilib'], # this must be the same as the name above
|
||||||
version='0.4.0',
|
version='0.6.1',
|
||||||
description='Lib to control georide tracker devices with their rest api',
|
description='Lib to control GeoRide tracker devices with their rest api',
|
||||||
author='Matthieu DUVAL',
|
author='Matthieu DUVAL',
|
||||||
author_email='georideapilib@duval-dev.fr',
|
author_email='georideapilib@duval-dev.fr',
|
||||||
# use the URL to the github repo
|
# use the URL to the github repo
|
||||||
url='https://github.com/ptimatth/pyGeoride',
|
url='https://github.com/hacf/georide-api',
|
||||||
download_url='https://codeload.github.com/ptimatth/pyGeoride/tar.gz/0.1.0',
|
download_url='https://codeload.github.com/hacf/georide-api/tar.gz/0.6.0',
|
||||||
keywords=['rest', 'georide', 'api', 'grutier'], # arbitrary keywords
|
keywords=['rest', 'georide', 'api', 'grutier', 'GeoRide'], # arbitrary keywords
|
||||||
classifiers=[],
|
classifiers=[],
|
||||||
install_requires=["python-socketio[client]"],
|
install_requires=["python-socketio[client]==4.6.1"],
|
||||||
tests_require=[
|
tests_require=[
|
||||||
'pytest>=3.7',
|
'pytest>=3.7',
|
||||||
'pytest-pep8',
|
'pytest-pep8',
|
||||||
|
|||||||
Reference in New Issue
Block a user