14 Commits

8 changed files with 111 additions and 138 deletions

1
.gitignore vendored
View File

@@ -4,3 +4,4 @@ __pycache__
dist/ dist/
*.egg-info/ *.egg-info/
build/ build/
ressources/

View File

@@ -27,7 +27,7 @@ This library has been tested with python 3.7 and above, functionality for older
## Main repo: ## Main repo:
- https://git.tontontux.fr/mduval/pyGeoride - https://git.tontontux.fr/mduval/pyGeoride
## Github repo: ## Github repo:
- https://github.com/ptimatth/pyGeoride - https://github.com/ptimatth/georide-api
## Todo ## Todo
- [ ] Add support of "Get a shared trip" endpoint - [ ] Add support of "Get a shared trip" endpoint

View File

@@ -28,10 +28,13 @@ def example():
def locked_locked(data): def locked_locked(data):
_LOGGER.info("Lock received") _LOGGER.info("Lock received")
def refresh_tracker():
_LOGGER.info("Refresh tracker recieved")
def connect_socket(account): def connect_socket(account):
socket = GeoRideSocket() socket = GeoRideSocket()
socket.subscribe_locked(locked_locked) socket.subscribe_locked(locked_locked)
socket.subscribe_refresh_tracker(refresh_tracker)
socket.init() socket.init()
socket.connect(account.auth_token) socket.connect(account.auth_token)
time.sleep(10) time.sleep(10)

View File

@@ -13,7 +13,8 @@ from georideapilib.objects import (
GeoRideUser, GeoRideUser,
GeoRideTrackerTrip, GeoRideTrackerTrip,
GeoRideTrackerPosition, GeoRideTrackerPosition,
GeoRideSharedTrip GeoRideSharedTrip,
GeoRideTrackerBeacon
) )
from georideapilib.exception import ( from georideapilib.exception import (
@@ -128,7 +129,7 @@ def get_trackers(token):
trackers.append(GeoRideTracker.from_json(json_tracker)) trackers.append(GeoRideTracker.from_json(json_tracker))
return trackers return trackers
def get_tracker_beacon(token, tracker_id): def get_tracker_beacons(token, tracker_id):
""" get user trackers """ """ get user trackers """
headers = {"Authorization": "Bearer " + token} headers = {"Authorization": "Bearer " + token}
@@ -137,10 +138,13 @@ def get_tracker_beacon(token, tracker_id):
headers=headers) headers=headers)
response_data = response.json() response_data = response.json()
trackers_beacons = []
if response.status_code == 200: if response.status_code == 200:
return GeoRideTrackerBeacon.from_json(response_data) for json_tracker_beacon in response_data:
else: _LOGGER.debug(json_tracker_beacon)
return None json_tracker_beacon['linked_tracker_id'] = tracker_id
trackers_beacons.append(GeoRideTrackerBeacon.from_json(json_tracker_beacon))
return trackers_beacons
def get_trips(token, tracker_id, from_date, to_date): def get_trips(token, tracker_id, from_date, to_date):
""" return all trips between two dates """ """ return all trips between two dates """

View File

@@ -2,7 +2,7 @@
Georide objects implementation Georide objects implementation
@author Matthieu DUVAL <matthieu@duval-dev.fr> @author Matthieu DUVAL <matthieu@duval-dev.fr>
""" """
import time
import logging import logging
@@ -288,6 +288,8 @@ class GeoRideTracker(metaclass=JsonMgtMetaClass): # pylint: disable=R0904,R0902
self._has_beacon = has_beacon self._has_beacon = has_beacon
self._has_outdated_beacons = has_outdated_beacons self._has_outdated_beacons = has_outdated_beacons
self._ecall_activated = ecall_activated self._ecall_activated = ecall_activated
self._is_siren_on = False
self._siren_last_on_date = time.time()
@property @property
def tracker_id(self): def tracker_id(self):
@@ -599,6 +601,28 @@ class GeoRideTracker(metaclass=JsonMgtMetaClass): # pylint: disable=R0904,R0902
""" is_in_eco property """ """ is_in_eco property """
return self._is_in_eco return self._is_in_eco
@is_in_eco.setter
def is_in_eco(self, is_in_eco):
""" is_in_eco setter """
self._is_in_eco = is_in_eco
@property
def is_siren_on(self):
""" is_siren_on property """
return self._is_siren_on
@is_siren_on.setter
def is_siren_on(self, is_siren_on):
""" is_siren_on setter """
if is_siren_on:
self._siren_last_on_date = time.time()
self._is_siren_on = is_siren_on
@property
def siren_last_on_date(self):
""" siren_last_on_date property """
return self._siren_last_on_date
@property @property
def is_calibrated(self): def is_calibrated(self):
""" is_calibrated property """ """ is_calibrated property """
@@ -753,10 +777,11 @@ class GeoRideTracker(metaclass=JsonMgtMetaClass): # pylint: disable=R0904,R0902
class GeoRideTrackerBeacon: class GeoRideTrackerBeacon:
""" GeoRideTrackerBeacon representation """ """ GeoRideTrackerBeacon representation """
def __init__(self, beacon_id, name, created_at, updated_at, mac_address, def __init__(self, beacon_id, linked_tracker_id, name, created_at, updated_at,
battery_level, last_battery_level_update, sleep_delay, mac_address, battery_level, last_battery_level_update, sleep_delay,
is_updated, power): is_updated, power):
self._beacon_id = beacon_id self._beacon_id = beacon_id
self._linked_tracker_id = linked_tracker_id
self._name = name self._name = name
self._created_at = created_at self._created_at = created_at
self._updated_at = updated_at self._updated_at = updated_at
@@ -766,6 +791,18 @@ class GeoRideTrackerBeacon:
self._sleep_delay = sleep_delay self._sleep_delay = sleep_delay
self._is_updated = is_updated self._is_updated = is_updated
self._power = power self._power = power
@property
def linked_tracker_id(self):
""" linked_tracker_id property """
return self._linked_tracker_id
@linked_tracker_id.setter
def linked_tracker_id(self, linked_tracker_id):
""" linked_tracker_id setter """
self._linked_tracker_id = linked_tracker_id
@property @property
def beacon_id(self): def beacon_id(self):
"""beacon_id property""" """beacon_id property"""
@@ -821,6 +858,7 @@ class GeoRideTrackerBeacon:
"""return new object from_json""" """return new object from_json"""
return GeoRideTrackerBeacon( return GeoRideTrackerBeacon(
json['id'], json['id'],
json['linked_tracker_id'],
json['name'], json['name'],
json['createdAt'], json['createdAt'],
json['updatedAt'], json['updatedAt'],
@@ -831,10 +869,23 @@ class GeoRideTrackerBeacon:
json['isUpdated'], json['isUpdated'],
json['power']) json['power'])
class GeoRideSubscription: def update_all_data(self, tracker_beacon):
"""update all data of the tracker beacon from a new object"""
self._name = tracker_beacon.name
self._created_at = tracker_beacon.created_at
self._updated_at = tracker_beacon.updated_at
self._mac_address = tracker_beacon.mac_address
self._battery_level = tracker_beacon.battery_level
self._last_battery_level_update = tracker_beacon.last_battery_level_update
self._sleep_delay = tracker_beacon.sleep_delay
self._is_updated = tracker_beacon.is_updated
self._power = tracker_beacon.power
class GeoRideSubscription(metaclass=JsonMgtMetaClass):
""" Account object representation """ """ Account object representation """
def __init__(self, subscription_id, subscription_type, initialDate, nextPaymentDate, def __init__(self, subscription_id, subscription_type, initial_date, next_payment_date,
status, pausedSince, cancelRequested, price, firstName, lastName, cardInformation): status, paused_since, cancel_requested, price, first_name, last_name, card_information):
self._subscription_id = subscription_id self._subscription_id = subscription_id
self._subscription_type = subscription_type self._subscription_type = subscription_type
self._initial_date = initial_date self._initial_date = initial_date
@@ -845,6 +896,7 @@ class GeoRideSubscription:
self._price = price self._price = price
self._first_name = first_name self._first_name = first_name
self._last_name = last_name self._last_name = last_name
self._card_information = card_information
@property @property
def subscription_id(self): def subscription_id(self):
@@ -896,37 +948,59 @@ class GeoRideSubscription:
"""last_name property""" """last_name property"""
return self._last_name return self._last_name
@property
def card_information(self):
"""card_information property"""
return self._card_information
@classmethod @classmethod
def from_json(cls, json): def from_json(cls, json):
"""return new object from_json""" """return new object from_json"""
card_info = GeoRideSubscription_CardInfo.from_json(json['cardInformation']) if cls.json_field_protect(json, 'cardInformation', None) is not None else {}
return GeoRideSubscription( return GeoRideSubscription(
json['id'], json['id'],
json['type'], json['type'],
json['initialDate'], cls.json_field_protect(json, 'initialDate'),
json['nextPaymentDate'], cls.json_field_protect(json, 'nextPaymentDate'),
json['status'], cls.json_field_protect(json, 'status'),
json['pausedSince'], cls.json_field_protect(json, 'pausedSince'),
json['cancelRequested'], cls.json_field_protect(json, 'cancelRequested'),
json['price'], cls.json_field_protect(json, 'price'),
json['firstName'], cls.json_field_protect(json, 'firstName'),
json['lastName'], cls.json_field_protect(json, 'lastName'),
GeoRideSubscription_CardInfo.from_json(json['cardInformation']) card_info
) )
class GeoRideSubscription_CardInfo: class GeoRideSubscription_CardInfo(metaclass=JsonMgtMetaClass):
""" Account object representation """ """ Account object representation """
def __init__(self, last_digits, expiry, brand): def __init__(self, last_digits, expiry, brand):
self._last_digits = last_digits self._last_digits = last_digits
self._expiry = expiry self._expiry = expiry
self._brand = brand self._brand = brand
@property
def last_digits(self):
"""last_digits property"""
return self._last_digits
@property
def expiry(self):
"""expiry property"""
return self._expiry
@property
def brand(self):
"""brand property"""
return self._brand
@classmethod @classmethod
def from_json(cls, json): def from_json(cls, json):
"""return new object from_json""" """return new object from_json"""
return GeoRideSubscription_CardInfo( return GeoRideSubscription_CardInfo(
json['lastDigits'], cls.json_field_protect(json, 'lastDigits'),
json['expiry'], cls.json_field_protect(json, 'expiry'),
json['brand'] cls.json_field_protect(json, 'brand')
) )
class GeoRideAccount: class GeoRideAccount:
@@ -1038,95 +1112,3 @@ 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")

View File

@@ -112,19 +112,3 @@ 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")

View File

@@ -23,7 +23,6 @@ handlers=consoleHandler
qualname=engineio.client qualname=engineio.client
propagate=0 propagate=0
[handler_consoleHandler] [handler_consoleHandler]
class=StreamHandler class=StreamHandler
level=DEBUG level=DEBUG

View File

@@ -19,13 +19,13 @@ 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.7.0', version='0.8.4',
description='Lib to control GeoRide tracker devices with theire rest api', description='Lib to control GeoRide tracker devices with theire 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/hacf/georide-api', url='https://github.com/hacf/georide-api',
download_url='https://codeload.github.com/hacf/georide-api/tar.gz/0.7.0', download_url='https://codeload.github.com/hacf/georide-api/tar.gz/0.8.1',
keywords=['rest', 'georide', 'api', 'grutier', 'GeoRide'], # arbitrary keywords keywords=['rest', 'georide', 'api', 'grutier', 'GeoRide'], # arbitrary keywords
classifiers=[], classifiers=[],
install_requires=["python-socketio[client]==4.6.1"], install_requires=["python-socketio[client]==4.6.1"],