diff --git a/.prospector.yaml b/.prospector.yaml index bfae8bf..7c1855a 100644 --- a/.prospector.yaml +++ b/.prospector.yaml @@ -1,7 +1,7 @@ doc-warnings: false max-line-length: 120 ignore-paths: - - test + - tests - connected_car_api pycodestyle: disable: diff --git a/psa-car-controller/psa/connected_car_api/__init__.py b/psa-car-controller/psa/connected_car_api/__init__.py deleted file mode 100644 index 769dafd..0000000 --- a/psa-car-controller/psa/connected_car_api/__init__.py +++ /dev/null @@ -1,155 +0,0 @@ -# coding: utf-8 - -# flake8: noqa - -""" - Groupe PSA Connected Car - WEB API B2C - - *PSA B2C Connected Car API* # Introduction This is the description of the *Groupe PSA Connected Car V2 API*. The speccification is is based on **OpenAPI Specification version 3** and can be displayed via [ReDoc](https://github.com/Rebilly/ReDoc)a or [Swagger](http://swagger.io). This API allows applications to fetch data from the connected Vehicles data platform. # Authentication PSA Connected Car APIs uses the [OAuth 2.0](https://tools.ietf.org/html/rfc6749) protocol for authentication and Authorization. any application require a valid [Access Token](https://tools.ietf.org/html/rfc6749#section-1.4) to access to user data. # Errors Error codes returned by all REST APIs comply with the standard. Nevertheless, PSA Services (callers) need to have more complete data structures (even when the answer is not Http-OK) to better detail the type of error by providing application code, message and a debugging code(for investigation purposes). The http code of the response is managed by the protocol itself (in the header). **Errors are returned as a generic error response:** * ```xError``` object model. # noqa: E501 - - OpenAPI spec version: 4.0 - - Generated by: https://github.com/swagger-api/swagger-codegen.git -""" - - -from __future__ import absolute_import - -# import apis into sdk package -from psa.connected_car_api.api.trips_api import TripsApi -from psa.connected_car_api.api.user_api import UserApi -from psa.connected_car_api.api.vehicles_api import VehiclesApi - -# import ApiClient -from psa.connected_car_api.api_client import ApiClient -from psa.connected_car_api.configuration import Configuration -# import models into sdk package -from psa.connected_car_api.models.adas import Adas -from psa.connected_car_api.models.adas_park_assist import AdasParkAssist -from psa.connected_car_api.models.alert import Alert -from psa.connected_car_api.models.alert_end_position import AlertEndPosition -from psa.connected_car_api.models.alert_links import AlertLinks -from psa.connected_car_api.models.alert_msg_enum import AlertMsgEnum -from psa.connected_car_api.models.alerts import Alerts -from psa.connected_car_api.models.alerts_embedded import AlertsEmbedded -from psa.connected_car_api.models.battery import Battery -from psa.connected_car_api.models.bounded_program import BoundedProgram -from psa.connected_car_api.models.charging_status_enum import ChargingStatusEnum -from psa.connected_car_api.models.circle_zone import CircleZone -from psa.connected_car_api.models.circle_zone_coordinates import CircleZoneCoordinates -from psa.connected_car_api.models.collection_result import CollectionResult -from psa.connected_car_api.models.collision import Collision -from psa.connected_car_api.models.collision_links import CollisionLinks -from psa.connected_car_api.models.collision_obj import CollisionObj -from psa.connected_car_api.models.collision_obj_front import CollisionObjFront -from psa.connected_car_api.models.collisions import Collisions -from psa.connected_car_api.models.collisions_embedded import CollisionsEmbedded -from psa.connected_car_api.models.created_at_field import CreatedAtField -from psa.connected_car_api.models.data_monitor_trigger import DataMonitorTrigger -from psa.connected_car_api.models.data_trigger import DataTrigger -from psa.connected_car_api.models.default_alert_push import DefaultAlertPush -from psa.connected_car_api.models.default_alert_push_attributes import DefaultAlertPushAttributes -from psa.connected_car_api.models.doors_state import DoorsState -from psa.connected_car_api.models.doors_state_opening import DoorsStateOpening -from psa.connected_car_api.models.e_coaching import ECoaching -from psa.connected_car_api.models.e_coaching_links import ECoachingLinks -from psa.connected_car_api.models.e_coaching_scores import ECoachingScores -from psa.connected_car_api.models.energy import Energy -from psa.connected_car_api.models.energy_battery import EnergyBattery -from psa.connected_car_api.models.energy_battery_health import EnergyBatteryHealth -from psa.connected_car_api.models.energy_charging import EnergyCharging -from psa.connected_car_api.models.engine import Engine -from psa.connected_car_api.models.engine_oil import EngineOil -from psa.connected_car_api.models.environment import Environment -from psa.connected_car_api.models.environment_luminosity import EnvironmentLuminosity -from psa.connected_car_api.models.event import Event -from psa.connected_car_api.models.event_links import EventLinks -from psa.connected_car_api.models.extension import Extension -from psa.connected_car_api.models.extension_type import ExtensionType -from psa.connected_car_api.models.geometry import Geometry -from psa.connected_car_api.models.ignition import Ignition -from psa.connected_car_api.models.index_range import IndexRange -from psa.connected_car_api.models.kinetic import Kinetic -from psa.connected_car_api.models.lighting import Lighting -from psa.connected_car_api.models.link import Link -from psa.connected_car_api.models.maintenance import Maintenance -from psa.connected_car_api.models.maintenance_links import MaintenanceLinks -from psa.connected_car_api.models.maintenance_obj import MaintenanceObj -from psa.connected_car_api.models.monitor import Monitor -from psa.connected_car_api.models.monitor_id import MonitorId -from psa.connected_car_api.models.monitor_links import MonitorLinks -from psa.connected_car_api.models.monitor_parameter import MonitorParameter -from psa.connected_car_api.models.monitor_parameter_trigger_param import MonitorParameterTriggerParam -from psa.connected_car_api.models.monitor_ref import MonitorRef -from psa.connected_car_api.models.monitor_ref_links import MonitorRefLinks -from psa.connected_car_api.models.monitor_status import MonitorStatus -from psa.connected_car_api.models.monitor_status_setter import MonitorStatusSetter -from psa.connected_car_api.models.monitor_subscribe import MonitorSubscribe -from psa.connected_car_api.models.monitor_subscribe_batch_notify import MonitorSubscribeBatchNotify -from psa.connected_car_api.models.monitor_subscribe_retry_policy import MonitorSubscribeRetryPolicy -from psa.connected_car_api.models.monitor_trigger import MonitorTrigger -from psa.connected_car_api.models.monitor_webhook import MonitorWebhook -from psa.connected_car_api.models.monitor_webhook_attributes import MonitorWebhookAttributes -from psa.connected_car_api.models.monitors import Monitors -from psa.connected_car_api.models.monitors_embedded import MonitorsEmbedded -from psa.connected_car_api.models.overall_autonomy import OverallAutonomy -from psa.connected_car_api.models.point import Point -from psa.connected_car_api.models.polygon_zone import PolygonZone -from psa.connected_car_api.models.position import Position -from psa.connected_car_api.models.position_properties import PositionProperties -from psa.connected_car_api.models.preconditioning import Preconditioning -from psa.connected_car_api.models.preconditioning_air_conditioning import PreconditioningAirConditioning -from psa.connected_car_api.models.preconditioning_program import PreconditioningProgram -from psa.connected_car_api.models.privacy import Privacy -from psa.connected_car_api.models.program import Program -from psa.connected_car_api.models.program_occurence import ProgramOccurence -from psa.connected_car_api.models.safety import Safety -from psa.connected_car_api.models.service_type import ServiceType -from psa.connected_car_api.models.status import Status -from psa.connected_car_api.models.status_embedded import StatusEmbedded -from psa.connected_car_api.models.status_extension_type import StatusExtensionType -from psa.connected_car_api.models.status_links import StatusLinks -from psa.connected_car_api.models.tab_links import TabLinks -from psa.connected_car_api.models.telemetry import Telemetry -from psa.connected_car_api.models.telemetry_embedded import TelemetryEmbedded -from psa.connected_car_api.models.telemetry_enum import TelemetryEnum -from psa.connected_car_api.models.telemetry_extension import TelemetryExtension -from psa.connected_car_api.models.telemetry_extension_type import TelemetryExtensionType -from psa.connected_car_api.models.telemetry_message import TelemetryMessage -from psa.connected_car_api.models.telemetry_message_embedded import TelemetryMessageEmbedded -from psa.connected_car_api.models.telemetry_message_vehicle import TelemetryMessageVehicle -from psa.connected_car_api.models.telemetry_message_vehicle_braking_system import TelemetryMessageVehicleBrakingSystem -from psa.connected_car_api.models.telemetry_message_vehicle_transmission import TelemetryMessageVehicleTransmission -from psa.connected_car_api.models.telemetry_message_vehicle_transmission_gearbox import TelemetryMessageVehicleTransmissionGearbox -from psa.connected_car_api.models.telemetry_message_vehicle_transmission_gearbox_gear import TelemetryMessageVehicleTransmissionGearboxGear -from psa.connected_car_api.models.telemetry_message_vehicle_transmission_gearbox_mode import TelemetryMessageVehicleTransmissionGearboxMode -from psa.connected_car_api.models.time_monitor_trigger import TimeMonitorTrigger -from psa.connected_car_api.models.time_range import TimeRange -from psa.connected_car_api.models.time_stamped import TimeStamped -from psa.connected_car_api.models.time_trigger import TimeTrigger -from psa.connected_car_api.models.time_zone_monitor_trigger import TimeZoneMonitorTrigger -from psa.connected_car_api.models.time_zone_trigger import TimeZoneTrigger -from psa.connected_car_api.models.trip import Trip -from psa.connected_car_api.models.trip_avg_consumption import TripAvgConsumption -from psa.connected_car_api.models.trip_links import TripLinks -from psa.connected_car_api.models.trips import Trips -from psa.connected_car_api.models.trips_embedded import TripsEmbedded -from psa.connected_car_api.models.updated_field import UpdatedField -from psa.connected_car_api.models.url import Url -from psa.connected_car_api.models.user import User -from psa.connected_car_api.models.user_embedded import UserEmbedded -from psa.connected_car_api.models.user_links import UserLinks -from psa.connected_car_api.models.vect2_d import Vect2D -from psa.connected_car_api.models.vehicle import Vehicle -from psa.connected_car_api.models.vehicle_engine import VehicleEngine -from psa.connected_car_api.models.vehicle_links import VehicleLinks -from psa.connected_car_api.models.vehicle_odometer import VehicleOdometer -from psa.connected_car_api.models.vehicles import Vehicles -from psa.connected_car_api.models.vehicles_embedded import VehiclesEmbedded -from psa.connected_car_api.models.way_points import WayPoints -from psa.connected_car_api.models.way_points_embedded import WayPointsEmbedded -from psa.connected_car_api.models.x_error import XError -from psa.connected_car_api.models.zone_monitor_trigger import ZoneMonitorTrigger -from psa.connected_car_api.models.zone_trigger import ZoneTrigger -from psa.connected_car_api.models.zone_trigger_place import ZoneTriggerPlace -from psa.connected_car_api.models.zone_trigger_place_center import ZoneTriggerPlaceCenter diff --git a/psa-car-controller/psa/connected_car_api/api/__init__.py b/psa-car-controller/psa/connected_car_api/api/__init__.py deleted file mode 100644 index 231613e..0000000 --- a/psa-car-controller/psa/connected_car_api/api/__init__.py +++ /dev/null @@ -1,8 +0,0 @@ -from __future__ import absolute_import - -# flake8: noqa - -# import apis into api package -from psa.connected_car_api.api.trips_api import TripsApi -from psa.connected_car_api.api.user_api import UserApi -from psa.connected_car_api.api.vehicles_api import VehiclesApi diff --git a/psa-car-controller/psa/connected_car_api/models/__init__.py b/psa-car-controller/psa/connected_car_api/models/__init__.py deleted file mode 100644 index 1f159ea..0000000 --- a/psa-car-controller/psa/connected_car_api/models/__init__.py +++ /dev/null @@ -1,146 +0,0 @@ -# coding: utf-8 - -# flake8: noqa -""" - Groupe PSA Connected Car - WEB API B2C - - *PSA B2C Connected Car API* # Introduction This is the description of the *Groupe PSA Connected Car V2 API*. The speccification is is based on **OpenAPI Specification version 3** and can be displayed via [ReDoc](https://github.com/Rebilly/ReDoc)a or [Swagger](http://swagger.io). This API allows applications to fetch data from the connected Vehicles data platform. # Authentication PSA Connected Car APIs uses the [OAuth 2.0](https://tools.ietf.org/html/rfc6749) protocol for authentication and Authorization. any application require a valid [Access Token](https://tools.ietf.org/html/rfc6749#section-1.4) to access to user data. # Errors Error codes returned by all REST APIs comply with the standard. Nevertheless, PSA Services (callers) need to have more complete data structures (even when the answer is not Http-OK) to better detail the type of error by providing application code, message and a debugging code(for investigation purposes). The http code of the response is managed by the protocol itself (in the header). **Errors are returned as a generic error response:** * ```xError``` object model. # noqa: E501 - - OpenAPI spec version: 4.0 - - Generated by: https://github.com/swagger-api/swagger-codegen.git -""" - - -from __future__ import absolute_import - -# import models into model package -from psa.connected_car_api.models.adas import Adas -from psa.connected_car_api.models.adas_park_assist import AdasParkAssist -from psa.connected_car_api.models.alert import Alert -from psa.connected_car_api.models.alert_end_position import AlertEndPosition -from psa.connected_car_api.models.alert_links import AlertLinks -from psa.connected_car_api.models.alert_msg_enum import AlertMsgEnum -from psa.connected_car_api.models.alerts import Alerts -from psa.connected_car_api.models.alerts_embedded import AlertsEmbedded -from psa.connected_car_api.models.battery import Battery -from psa.connected_car_api.models.bounded_program import BoundedProgram -from psa.connected_car_api.models.charging_status_enum import ChargingStatusEnum -from psa.connected_car_api.models.circle_zone import CircleZone -from psa.connected_car_api.models.circle_zone_coordinates import CircleZoneCoordinates -from psa.connected_car_api.models.collection_result import CollectionResult -from psa.connected_car_api.models.collision import Collision -from psa.connected_car_api.models.collision_links import CollisionLinks -from psa.connected_car_api.models.collision_obj import CollisionObj -from psa.connected_car_api.models.collision_obj_front import CollisionObjFront -from psa.connected_car_api.models.collisions import Collisions -from psa.connected_car_api.models.collisions_embedded import CollisionsEmbedded -from psa.connected_car_api.models.created_at_field import CreatedAtField -from psa.connected_car_api.models.data_monitor_trigger import DataMonitorTrigger -from psa.connected_car_api.models.data_trigger import DataTrigger -from psa.connected_car_api.models.default_alert_push import DefaultAlertPush -from psa.connected_car_api.models.default_alert_push_attributes import DefaultAlertPushAttributes -from psa.connected_car_api.models.doors_state import DoorsState -from psa.connected_car_api.models.doors_state_opening import DoorsStateOpening -from psa.connected_car_api.models.e_coaching import ECoaching -from psa.connected_car_api.models.e_coaching_links import ECoachingLinks -from psa.connected_car_api.models.e_coaching_scores import ECoachingScores -from psa.connected_car_api.models.energy import Energy -from psa.connected_car_api.models.energy_battery import EnergyBattery -from psa.connected_car_api.models.energy_battery_health import EnergyBatteryHealth -from psa.connected_car_api.models.energy_charging import EnergyCharging -from psa.connected_car_api.models.engine import Engine -from psa.connected_car_api.models.engine_oil import EngineOil -from psa.connected_car_api.models.environment import Environment -from psa.connected_car_api.models.environment_luminosity import EnvironmentLuminosity -from psa.connected_car_api.models.event import Event -from psa.connected_car_api.models.event_links import EventLinks -from psa.connected_car_api.models.extension import Extension -from psa.connected_car_api.models.extension_type import ExtensionType -from psa.connected_car_api.models.geometry import Geometry -from psa.connected_car_api.models.ignition import Ignition -from psa.connected_car_api.models.index_range import IndexRange -from psa.connected_car_api.models.kinetic import Kinetic -from psa.connected_car_api.models.lighting import Lighting -from psa.connected_car_api.models.link import Link -from psa.connected_car_api.models.maintenance import Maintenance -from psa.connected_car_api.models.maintenance_links import MaintenanceLinks -from psa.connected_car_api.models.maintenance_obj import MaintenanceObj -from psa.connected_car_api.models.monitor import Monitor -from psa.connected_car_api.models.monitor_id import MonitorId -from psa.connected_car_api.models.monitor_links import MonitorLinks -from psa.connected_car_api.models.monitor_parameter import MonitorParameter -from psa.connected_car_api.models.monitor_parameter_trigger_param import MonitorParameterTriggerParam -from psa.connected_car_api.models.monitor_ref import MonitorRef -from psa.connected_car_api.models.monitor_ref_links import MonitorRefLinks -from psa.connected_car_api.models.monitor_status import MonitorStatus -from psa.connected_car_api.models.monitor_status_setter import MonitorStatusSetter -from psa.connected_car_api.models.monitor_subscribe import MonitorSubscribe -from psa.connected_car_api.models.monitor_subscribe_batch_notify import MonitorSubscribeBatchNotify -from psa.connected_car_api.models.monitor_subscribe_retry_policy import MonitorSubscribeRetryPolicy -from psa.connected_car_api.models.monitor_trigger import MonitorTrigger -from psa.connected_car_api.models.monitor_webhook import MonitorWebhook -from psa.connected_car_api.models.monitor_webhook_attributes import MonitorWebhookAttributes -from psa.connected_car_api.models.monitors import Monitors -from psa.connected_car_api.models.monitors_embedded import MonitorsEmbedded -from psa.connected_car_api.models.overall_autonomy import OverallAutonomy -from psa.connected_car_api.models.point import Point -from psa.connected_car_api.models.polygon_zone import PolygonZone -from psa.connected_car_api.models.position import Position -from psa.connected_car_api.models.position_properties import PositionProperties -from psa.connected_car_api.models.preconditioning import Preconditioning -from psa.connected_car_api.models.preconditioning_air_conditioning import PreconditioningAirConditioning -from psa.connected_car_api.models.preconditioning_program import PreconditioningProgram -from psa.connected_car_api.models.privacy import Privacy -from psa.connected_car_api.models.program import Program -from psa.connected_car_api.models.program_occurence import ProgramOccurence -from psa.connected_car_api.models.safety import Safety -from psa.connected_car_api.models.service_type import ServiceType -from psa.connected_car_api.models.status import Status -from psa.connected_car_api.models.status_embedded import StatusEmbedded -from psa.connected_car_api.models.status_extension_type import StatusExtensionType -from psa.connected_car_api.models.status_links import StatusLinks -from psa.connected_car_api.models.tab_links import TabLinks -from psa.connected_car_api.models.telemetry import Telemetry -from psa.connected_car_api.models.telemetry_embedded import TelemetryEmbedded -from psa.connected_car_api.models.telemetry_enum import TelemetryEnum -from psa.connected_car_api.models.telemetry_extension import TelemetryExtension -from psa.connected_car_api.models.telemetry_extension_type import TelemetryExtensionType -from psa.connected_car_api.models.telemetry_message import TelemetryMessage -from psa.connected_car_api.models.telemetry_message_embedded import TelemetryMessageEmbedded -from psa.connected_car_api.models.telemetry_message_vehicle import TelemetryMessageVehicle -from psa.connected_car_api.models.telemetry_message_vehicle_braking_system import TelemetryMessageVehicleBrakingSystem -from psa.connected_car_api.models.telemetry_message_vehicle_transmission import TelemetryMessageVehicleTransmission -from psa.connected_car_api.models.telemetry_message_vehicle_transmission_gearbox import TelemetryMessageVehicleTransmissionGearbox -from psa.connected_car_api.models.telemetry_message_vehicle_transmission_gearbox_gear import TelemetryMessageVehicleTransmissionGearboxGear -from psa.connected_car_api.models.telemetry_message_vehicle_transmission_gearbox_mode import TelemetryMessageVehicleTransmissionGearboxMode -from psa.connected_car_api.models.time_monitor_trigger import TimeMonitorTrigger -from psa.connected_car_api.models.time_range import TimeRange -from psa.connected_car_api.models.time_stamped import TimeStamped -from psa.connected_car_api.models.time_trigger import TimeTrigger -from psa.connected_car_api.models.time_zone_monitor_trigger import TimeZoneMonitorTrigger -from psa.connected_car_api.models.time_zone_trigger import TimeZoneTrigger -from psa.connected_car_api.models.trip import Trip -from psa.connected_car_api.models.trip_avg_consumption import TripAvgConsumption -from psa.connected_car_api.models.trip_links import TripLinks -from psa.connected_car_api.models.trips import Trips -from psa.connected_car_api.models.trips_embedded import TripsEmbedded -from psa.connected_car_api.models.updated_field import UpdatedField -from psa.connected_car_api.models.url import Url -from psa.connected_car_api.models.user import User -from psa.connected_car_api.models.user_embedded import UserEmbedded -from psa.connected_car_api.models.user_links import UserLinks -from psa.connected_car_api.models.vect2_d import Vect2D -from psa.connected_car_api.models.vehicle import Vehicle -from psa.connected_car_api.models.vehicle_engine import VehicleEngine -from psa.connected_car_api.models.vehicle_links import VehicleLinks -from psa.connected_car_api.models.vehicle_odometer import VehicleOdometer -from psa.connected_car_api.models.vehicles import Vehicles -from psa.connected_car_api.models.vehicles_embedded import VehiclesEmbedded -from psa.connected_car_api.models.way_points import WayPoints -from psa.connected_car_api.models.way_points_embedded import WayPointsEmbedded -from psa.connected_car_api.models.x_error import XError -from psa.connected_car_api.models.zone_monitor_trigger import ZoneMonitorTrigger -from psa.connected_car_api.models.zone_trigger import ZoneTrigger -from psa.connected_car_api.models.zone_trigger_place import ZoneTriggerPlace -from psa.connected_car_api.models.zone_trigger_place_center import ZoneTriggerPlaceCenter diff --git a/psa-car-controller/psacc/utils/requirements.py b/psa-car-controller/psacc/utils/requirements.py deleted file mode 100644 index f05321e..0000000 --- a/psa-car-controller/psacc/utils/requirements.py +++ /dev/null @@ -1,28 +0,0 @@ -import logging -import sys - -import pkg_resources -from pathlib import Path - -logger = logging.getLogger(__name__) - - -class TestRequirements: - """Test availability of required packages.""" - - def __init__(self, requirement_path): - self.requirement_path = Path(requirement_path) - - def test_requirements(self): - """Test that each required package is available.""" - requirements = pkg_resources.parse_requirements(self.requirement_path.open()) - missing_requirement = False - for requirement in requirements: - requirement = str(requirement) - try: - pkg_resources.require(requirement) - except (pkg_resources.VersionConflict, pkg_resources.DistributionNotFound) as ex: - logger.error("%s\nYou need to install or update %s: pip3 install -U %s", ex, requirement, requirement) - missing_requirement = True - if missing_requirement: - sys.exit(10) diff --git a/psa-car-controller/common/__init__.py b/psa_car_controller/__init__.py similarity index 100% rename from psa-car-controller/common/__init__.py rename to psa_car_controller/__init__.py diff --git a/psa-car-controller/__main__.py b/psa_car_controller/__main__.py similarity index 63% rename from psa-car-controller/__main__.py rename to psa_car_controller/__main__.py index 80eff8f..fe926ee 100755 --- a/psa-car-controller/__main__.py +++ b/psa_car_controller/__main__.py @@ -4,18 +4,15 @@ import os import sys from threading import Thread -DIR = os.path.dirname(os.path.realpath(__file__)) -if sys.version_info < (3, 6): - raise RuntimeError("This application requires Python 3.6+") -# pylint: disable=wrong-import-position -from psacc.utils.requirements import TestRequirements - -TestRequirements(DIR + "/../requirements.txt").test_requirements() - -import web.app -from psacc.application.psa_car_controller import PSACarController - logger = logging.getLogger(__name__) +DIR = os.path.dirname(os.path.realpath(__file__)) +if sys.version_info < (3, 7): + raise RuntimeError("This application requires Python 3.7+") + + +# pylint: disable=wrong-import-position +from psa_car_controller.psacc.application.car_controller import PSACarController +from psa_car_controller import web # noqa: MC0001 if __name__ == "__main__": diff --git a/psa-car-controller/psa/__init__.py b/psa_car_controller/common/__init__.py similarity index 100% rename from psa-car-controller/psa/__init__.py rename to psa_car_controller/common/__init__.py diff --git a/psa-car-controller/common/mylogger.py b/psa_car_controller/common/mylogger.py similarity index 99% rename from psa-car-controller/common/mylogger.py rename to psa_car_controller/common/mylogger.py index 4847064..266f95c 100644 --- a/psa-car-controller/common/mylogger.py +++ b/psa_car_controller/common/mylogger.py @@ -8,7 +8,7 @@ logging.addLevelName(DEBUG_LEVELV_NUM, "DEBUGV") class CustomLogger(logging.Logger): - # pylint: disable=too-many-arguments,unused-argument,arguments-renamed + # pylint: disable=too-many-arguments,unused-argument,arguments-differ def _log(self, level, msg, args, exc_info=None, extra=None, stack_info=False, exc_info_debug=False, **kwargs): if exc_info_debug and self.isEnabledFor(logging.DEBUG): exc_info = True diff --git a/psa-car-controller/common/utils.py b/psa_car_controller/common/utils.py similarity index 70% rename from psa-car-controller/common/utils.py rename to psa_car_controller/common/utils.py index d734139..1ba973a 100644 --- a/psa-car-controller/common/utils.py +++ b/psa_car_controller/common/utils.py @@ -2,6 +2,8 @@ from functools import wraps from threading import Semaphore, Timer from typing import List +import requests + def rate_limit(limit, every): def limit_decorator(func): @@ -14,7 +16,7 @@ def rate_limit(limit, every): return func(*args, **kwargs) finally: # don't catch but ensure semaphore release timer = Timer(every, semaphore.release) - timer.setDaemon(True) # pylint: disable=deprecated-method + timer.setDaemon(True) timer.start() else: raise RateLimitException @@ -44,3 +46,15 @@ def parse_hour(s): class RateLimitException(Exception): pass + + +def get_positions(locations): + latitude = 0 + longitude = 1 + locations_str = "" + for line in locations: + locations_str += str(line[latitude]) + "," + str(line[longitude]) + "|" + locations_str = locations_str[:-1] + res = requests.get("https://api.opentopodata.org/v1/srtm30m", + params={"locations": locations_str}) + return res.json()["results"] diff --git a/psa-car-controller/psa/AccountInformation.py b/psa_car_controller/psa/AccountInformation.py similarity index 86% rename from psa-car-controller/psa/AccountInformation.py rename to psa_car_controller/psa/AccountInformation.py index 48de9f6..e915a6a 100644 --- a/psa-car-controller/psa/AccountInformation.py +++ b/psa_car_controller/psa/AccountInformation.py @@ -1,4 +1,4 @@ -from psa.constants import MQTT_BRANDCODE +from psa_car_controller.psa.constants import MQTT_BRANDCODE class AccountInformation: diff --git a/psa-car-controller/psa/RemoteClient.py b/psa_car_controller/psa/RemoteClient.py similarity index 94% rename from psa-car-controller/psa/RemoteClient.py rename to psa_car_controller/psa/RemoteClient.py index 8eb885f..84ae0ee 100644 --- a/psa-car-controller/psa/RemoteClient.py +++ b/psa_car_controller/psa/RemoteClient.py @@ -8,14 +8,15 @@ from time import sleep import paho.mqtt.client as mqtt from requests import RequestException -from psacc.model.car import Cars -from psa.AccountInformation import AccountInformation -from psa.RemoteCredentials import RemoteCredentials -from psa.constants import INPROGRESS, DEFAULT_PRECONDITIONING_PROGRAM, IMMEDIATE_CHARGE, DELAYED_CHARGE, REMOTE_URL -from psa.mqtt_request import MQTTRequest -from psa.oauth import OpenIdCredentialManager -from common.utils import RateLimitException, rate_limit, parse_hour -from psa.otp.otp import ConfigException, save_otp, load_otp +from psa_car_controller.psacc.model.car import Cars +from psa_car_controller.psa.AccountInformation import AccountInformation +from psa_car_controller.psa.RemoteCredentials import RemoteCredentials +from psa_car_controller.psa.constants import INPROGRESS, DEFAULT_PRECONDITIONING_PROGRAM, IMMEDIATE_CHARGE, \ + DELAYED_CHARGE, REMOTE_URL +from psa_car_controller.psa.mqtt_request import MQTTRequest +from psa_car_controller.psa.oauth import OpenIdCredentialManager +from psa_car_controller.common.utils import RateLimitException, rate_limit, parse_hour +from psa_car_controller.psa.otp.otp import ConfigException, save_otp, load_otp logger = logging.getLogger(__name__) @@ -119,7 +120,7 @@ class RemoteClient: except RateLimitException: logger.exception("__keep_mqtt") t = threading.Timer(timeout, self.__keep_mqtt) - t.setDaemon(True) # pylint: disable=deprecated-method + t.setDaemon(True) t.start() def veh_charge_request(self, vin, hour, minute, charge_type): diff --git a/psa-car-controller/psa/RemoteCredentials.py b/psa_car_controller/psa/RemoteCredentials.py similarity index 100% rename from psa-car-controller/psa/RemoteCredentials.py rename to psa_car_controller/psa/RemoteCredentials.py diff --git a/psa-car-controller/psa/otp/__init__.py b/psa_car_controller/psa/__init__.py similarity index 100% rename from psa-car-controller/psa/otp/__init__.py rename to psa_car_controller/psa/__init__.py diff --git a/psa_car_controller/psa/connected_car_api/__init__.py b/psa_car_controller/psa/connected_car_api/__init__.py new file mode 100644 index 0000000..6cdd8fd --- /dev/null +++ b/psa_car_controller/psa/connected_car_api/__init__.py @@ -0,0 +1,153 @@ +# coding: utf-8 + +# flake8: noqa + +""" + Groupe PSA Connected Car - WEB API B2C + + *PSA B2C Connected Car API* # Introduction This is the description of the *Groupe PSA Connected Car V2 API*. The speccification is is based on **OpenAPI Specification version 3** and can be displayed via [ReDoc](https://github.com/Rebilly/ReDoc)a or [Swagger](http://swagger.io). This API allows applications to fetch data from the connected Vehicles data platform. # Authentication PSA Connected Car APIs uses the [OAuth 2.0](https://tools.ietf.org/html/rfc6749) protocol for authentication and Authorization. any application require a valid [Access Token](https://tools.ietf.org/html/rfc6749#section-1.4) to access to user data. # Errors Error codes returned by all REST APIs comply with the standard. Nevertheless, PSA Services (callers) need to have more complete data structures (even when the answer is not Http-OK) to better detail the type of error by providing application code, message and a debugging code(for investigation purposes). The http code of the response is managed by the protocol itself (in the header). **Errors are returned as a generic error response:** * ```xError``` object model. # noqa: E501 + + OpenAPI spec version: 4.0 + + Generated by: https://github.com/swagger-api/swagger-codegen.git +""" + + +# import apis into sdk package +from psa_car_controller.psa.connected_car_api.api.trips_api import TripsApi +from psa_car_controller.psa.connected_car_api.api.user_api import UserApi +from psa_car_controller.psa.connected_car_api.api.vehicles_api import VehiclesApi + +# import ApiClient +from psa_car_controller.psa.connected_car_api.api_client import ApiClient +from psa_car_controller.psa.connected_car_api.configuration import Configuration +# import models into sdk package +from psa_car_controller.psa.connected_car_api.models.adas import Adas +from psa_car_controller.psa.connected_car_api.models.adas_park_assist import AdasParkAssist +from psa_car_controller.psa.connected_car_api.models.alert import Alert +from psa_car_controller.psa.connected_car_api.models.alert_end_position import AlertEndPosition +from psa_car_controller.psa.connected_car_api.models.alert_links import AlertLinks +from psa_car_controller.psa.connected_car_api.models.alert_msg_enum import AlertMsgEnum +from psa_car_controller.psa.connected_car_api.models.alerts import Alerts +from psa_car_controller.psa.connected_car_api.models.alerts_embedded import AlertsEmbedded +from psa_car_controller.psa.connected_car_api.models.battery import Battery +from psa_car_controller.psa.connected_car_api.models.bounded_program import BoundedProgram +from psa_car_controller.psa.connected_car_api.models.charging_status_enum import ChargingStatusEnum +from psa_car_controller.psa.connected_car_api.models.circle_zone import CircleZone +from psa_car_controller.psa.connected_car_api.models.circle_zone_coordinates import CircleZoneCoordinates +from psa_car_controller.psa.connected_car_api.models.collection_result import CollectionResult +from psa_car_controller.psa.connected_car_api.models.collision import Collision +from psa_car_controller.psa.connected_car_api.models.collision_links import CollisionLinks +from psa_car_controller.psa.connected_car_api.models.collision_obj import CollisionObj +from psa_car_controller.psa.connected_car_api.models.collision_obj_front import CollisionObjFront +from psa_car_controller.psa.connected_car_api.models.collisions import Collisions +from psa_car_controller.psa.connected_car_api.models.collisions_embedded import CollisionsEmbedded +from psa_car_controller.psa.connected_car_api.models.created_at_field import CreatedAtField +from psa_car_controller.psa.connected_car_api.models.data_monitor_trigger import DataMonitorTrigger +from psa_car_controller.psa.connected_car_api.models.data_trigger import DataTrigger +from psa_car_controller.psa.connected_car_api.models.default_alert_push import DefaultAlertPush +from psa_car_controller.psa.connected_car_api.models.default_alert_push_attributes import DefaultAlertPushAttributes +from psa_car_controller.psa.connected_car_api.models.doors_state import DoorsState +from psa_car_controller.psa.connected_car_api.models.doors_state_opening import DoorsStateOpening +from psa_car_controller.psa.connected_car_api.models.e_coaching import ECoaching +from psa_car_controller.psa.connected_car_api.models.e_coaching_links import ECoachingLinks +from psa_car_controller.psa.connected_car_api.models.e_coaching_scores import ECoachingScores +from psa_car_controller.psa.connected_car_api.models.energy import Energy +from psa_car_controller.psa.connected_car_api.models.energy_battery import EnergyBattery +from psa_car_controller.psa.connected_car_api.models.energy_battery_health import EnergyBatteryHealth +from psa_car_controller.psa.connected_car_api.models.energy_charging import EnergyCharging +from psa_car_controller.psa.connected_car_api.models.engine import Engine +from psa_car_controller.psa.connected_car_api.models.engine_oil import EngineOil +from psa_car_controller.psa.connected_car_api.models.environment import Environment +from psa_car_controller.psa.connected_car_api.models.environment_luminosity import EnvironmentLuminosity +from psa_car_controller.psa.connected_car_api.models.event import Event +from psa_car_controller.psa.connected_car_api.models.event_links import EventLinks +from psa_car_controller.psa.connected_car_api.models.extension import Extension +from psa_car_controller.psa.connected_car_api.models.extension_type import ExtensionType +from psa_car_controller.psa.connected_car_api.models.geometry import Geometry +from psa_car_controller.psa.connected_car_api.models.ignition import Ignition +from psa_car_controller.psa.connected_car_api.models.index_range import IndexRange +from psa_car_controller.psa.connected_car_api.models.kinetic import Kinetic +from psa_car_controller.psa.connected_car_api.models.lighting import Lighting +from psa_car_controller.psa.connected_car_api.models.link import Link +from psa_car_controller.psa.connected_car_api.models.maintenance import Maintenance +from psa_car_controller.psa.connected_car_api.models.maintenance_links import MaintenanceLinks +from psa_car_controller.psa.connected_car_api.models.maintenance_obj import MaintenanceObj +from psa_car_controller.psa.connected_car_api.models.monitor import Monitor +from psa_car_controller.psa.connected_car_api.models.monitor_id import MonitorId +from psa_car_controller.psa.connected_car_api.models.monitor_links import MonitorLinks +from psa_car_controller.psa.connected_car_api.models.monitor_parameter import MonitorParameter +from psa_car_controller.psa.connected_car_api.models.monitor_parameter_trigger_param import MonitorParameterTriggerParam +from psa_car_controller.psa.connected_car_api.models.monitor_ref import MonitorRef +from psa_car_controller.psa.connected_car_api.models.monitor_ref_links import MonitorRefLinks +from psa_car_controller.psa.connected_car_api.models.monitor_status import MonitorStatus +from psa_car_controller.psa.connected_car_api.models.monitor_status_setter import MonitorStatusSetter +from psa_car_controller.psa.connected_car_api.models.monitor_subscribe import MonitorSubscribe +from psa_car_controller.psa.connected_car_api.models.monitor_subscribe_batch_notify import MonitorSubscribeBatchNotify +from psa_car_controller.psa.connected_car_api.models.monitor_subscribe_retry_policy import MonitorSubscribeRetryPolicy +from psa_car_controller.psa.connected_car_api.models.monitor_trigger import MonitorTrigger +from psa_car_controller.psa.connected_car_api.models.monitor_webhook import MonitorWebhook +from psa_car_controller.psa.connected_car_api.models.monitor_webhook_attributes import MonitorWebhookAttributes +from psa_car_controller.psa.connected_car_api.models.monitors import Monitors +from psa_car_controller.psa.connected_car_api.models.monitors_embedded import MonitorsEmbedded +from psa_car_controller.psa.connected_car_api.models.overall_autonomy import OverallAutonomy +from psa_car_controller.psa.connected_car_api.models.point import Point +from psa_car_controller.psa.connected_car_api.models.polygon_zone import PolygonZone +from psa_car_controller.psa.connected_car_api.models.position import Position +from psa_car_controller.psa.connected_car_api.models.position_properties import PositionProperties +from psa_car_controller.psa.connected_car_api.models.preconditioning import Preconditioning +from psa_car_controller.psa.connected_car_api.models.preconditioning_air_conditioning import PreconditioningAirConditioning +from psa_car_controller.psa.connected_car_api.models.preconditioning_program import PreconditioningProgram +from psa_car_controller.psa.connected_car_api.models.privacy import Privacy +from psa_car_controller.psa.connected_car_api.models.program import Program +from psa_car_controller.psa.connected_car_api.models.program_occurence import ProgramOccurence +from psa_car_controller.psa.connected_car_api.models.safety import Safety +from psa_car_controller.psa.connected_car_api.models.service_type import ServiceType +from psa_car_controller.psa.connected_car_api.models.status import Status +from psa_car_controller.psa.connected_car_api.models.status_embedded import StatusEmbedded +from psa_car_controller.psa.connected_car_api.models.status_extension_type import StatusExtensionType +from psa_car_controller.psa.connected_car_api.models.status_links import StatusLinks +from psa_car_controller.psa.connected_car_api.models.tab_links import TabLinks +from psa_car_controller.psa.connected_car_api.models.telemetry import Telemetry +from psa_car_controller.psa.connected_car_api.models.telemetry_embedded import TelemetryEmbedded +from psa_car_controller.psa.connected_car_api.models.telemetry_enum import TelemetryEnum +from psa_car_controller.psa.connected_car_api.models.telemetry_extension import TelemetryExtension +from psa_car_controller.psa.connected_car_api.models.telemetry_extension_type import TelemetryExtensionType +from psa_car_controller.psa.connected_car_api.models.telemetry_message import TelemetryMessage +from psa_car_controller.psa.connected_car_api.models.telemetry_message_embedded import TelemetryMessageEmbedded +from psa_car_controller.psa.connected_car_api.models.telemetry_message_vehicle import TelemetryMessageVehicle +from psa_car_controller.psa.connected_car_api.models.telemetry_message_vehicle_braking_system import TelemetryMessageVehicleBrakingSystem +from psa_car_controller.psa.connected_car_api.models.telemetry_message_vehicle_transmission import TelemetryMessageVehicleTransmission +from psa_car_controller.psa.connected_car_api.models.telemetry_message_vehicle_transmission_gearbox import TelemetryMessageVehicleTransmissionGearbox +from psa_car_controller.psa.connected_car_api.models.telemetry_message_vehicle_transmission_gearbox_gear import TelemetryMessageVehicleTransmissionGearboxGear +from psa_car_controller.psa.connected_car_api.models.telemetry_message_vehicle_transmission_gearbox_mode import TelemetryMessageVehicleTransmissionGearboxMode +from psa_car_controller.psa.connected_car_api.models.time_monitor_trigger import TimeMonitorTrigger +from psa_car_controller.psa.connected_car_api.models.time_range import TimeRange +from psa_car_controller.psa.connected_car_api.models.time_stamped import TimeStamped +from psa_car_controller.psa.connected_car_api.models.time_trigger import TimeTrigger +from psa_car_controller.psa.connected_car_api.models.time_zone_monitor_trigger import TimeZoneMonitorTrigger +from psa_car_controller.psa.connected_car_api.models.time_zone_trigger import TimeZoneTrigger +from psa_car_controller.psa.connected_car_api.models.trip import Trip +from psa_car_controller.psa.connected_car_api.models.trip_avg_consumption import TripAvgConsumption +from psa_car_controller.psa.connected_car_api.models.trip_links import TripLinks +from psa_car_controller.psa.connected_car_api.models.trips import Trips +from psa_car_controller.psa.connected_car_api.models.trips_embedded import TripsEmbedded +from psa_car_controller.psa.connected_car_api.models.updated_field import UpdatedField +from psa_car_controller.psa.connected_car_api.models.url import Url +from psa_car_controller.psa.connected_car_api.models.user import User +from psa_car_controller.psa.connected_car_api.models.user_embedded import UserEmbedded +from psa_car_controller.psa.connected_car_api.models.user_links import UserLinks +from psa_car_controller.psa.connected_car_api.models.vect2_d import Vect2D +from psa_car_controller.psa.connected_car_api.models.vehicle import Vehicle +from psa_car_controller.psa.connected_car_api.models.vehicle_engine import VehicleEngine +from psa_car_controller.psa.connected_car_api.models.vehicle_links import VehicleLinks +from psa_car_controller.psa.connected_car_api.models.vehicle_odometer import VehicleOdometer +from psa_car_controller.psa.connected_car_api.models.vehicles import Vehicles +from psa_car_controller.psa.connected_car_api.models.vehicles_embedded import VehiclesEmbedded +from psa_car_controller.psa.connected_car_api.models.way_points import WayPoints +from psa_car_controller.psa.connected_car_api.models.way_points_embedded import WayPointsEmbedded +from psa_car_controller.psa.connected_car_api.models.x_error import XError +from psa_car_controller.psa.connected_car_api.models.zone_monitor_trigger import ZoneMonitorTrigger +from psa_car_controller.psa.connected_car_api.models.zone_trigger import ZoneTrigger +from psa_car_controller.psa.connected_car_api.models.zone_trigger_place import ZoneTriggerPlace +from psa_car_controller.psa.connected_car_api.models.zone_trigger_place_center import ZoneTriggerPlaceCenter diff --git a/psa_car_controller/psa/connected_car_api/api/__init__.py b/psa_car_controller/psa/connected_car_api/api/__init__.py new file mode 100644 index 0000000..af159c6 --- /dev/null +++ b/psa_car_controller/psa/connected_car_api/api/__init__.py @@ -0,0 +1,8 @@ +from __future__ import absolute_import + +# flake8: noqa + +# import apis into api package +from psa_car_controller.psa.connected_car_api.api.trips_api import TripsApi +from psa_car_controller.psa.connected_car_api.api.user_api import UserApi +from psa_car_controller.psa.connected_car_api.api.vehicles_api import VehiclesApi diff --git a/psa-car-controller/psa/connected_car_api/api/trips_api.py b/psa_car_controller/psa/connected_car_api/api/trips_api.py similarity index 99% rename from psa-car-controller/psa/connected_car_api/api/trips_api.py rename to psa_car_controller/psa/connected_car_api/api/trips_api.py index 06b8a2f..1fa4899 100644 --- a/psa-car-controller/psa/connected_car_api/api/trips_api.py +++ b/psa_car_controller/psa/connected_car_api/api/trips_api.py @@ -18,7 +18,7 @@ import re # noqa: F401 # python 2 and python 3 compatibility library import six -from psa.connected_car_api.api_client import ApiClient +from psa_car_controller.psa.connected_car_api.api_client import ApiClient class TripsApi(object): diff --git a/psa-car-controller/psa/connected_car_api/api/user_api.py b/psa_car_controller/psa/connected_car_api/api/user_api.py similarity index 98% rename from psa-car-controller/psa/connected_car_api/api/user_api.py rename to psa_car_controller/psa/connected_car_api/api/user_api.py index 580cc36..a0ffc84 100644 --- a/psa-car-controller/psa/connected_car_api/api/user_api.py +++ b/psa_car_controller/psa/connected_car_api/api/user_api.py @@ -18,7 +18,7 @@ import re # noqa: F401 # python 2 and python 3 compatibility library import six -from psa.connected_car_api.api_client import ApiClient +from psa_car_controller.psa.connected_car_api.api_client import ApiClient class UserApi(object): diff --git a/psa-car-controller/psa/connected_car_api/api/vehicles_api.py b/psa_car_controller/psa/connected_car_api/api/vehicles_api.py similarity index 99% rename from psa-car-controller/psa/connected_car_api/api/vehicles_api.py rename to psa_car_controller/psa/connected_car_api/api/vehicles_api.py index b035a60..4813198 100644 --- a/psa-car-controller/psa/connected_car_api/api/vehicles_api.py +++ b/psa_car_controller/psa/connected_car_api/api/vehicles_api.py @@ -18,7 +18,7 @@ import re # noqa: F401 # python 2 and python 3 compatibility library import six -from psa.connected_car_api.api_client import ApiClient +from psa_car_controller.psa.connected_car_api.api_client import ApiClient class VehiclesApi(object): diff --git a/psa-car-controller/psa/connected_car_api/api_client.py b/psa_car_controller/psa/connected_car_api/api_client.py similarity index 98% rename from psa-car-controller/psa/connected_car_api/api_client.py rename to psa_car_controller/psa/connected_car_api/api_client.py index e418f81..f963e45 100644 --- a/psa-car-controller/psa/connected_car_api/api_client.py +++ b/psa_car_controller/psa/connected_car_api/api_client.py @@ -23,9 +23,9 @@ import tempfile import six from six.moves.urllib.parse import quote -import psa -from psa.connected_car_api.configuration import Configuration -from psa.connected_car_api import rest +from psa_car_controller.psa.connected_car_api import models +from psa_car_controller.psa.connected_car_api.configuration import Configuration +from psa_car_controller.psa.connected_car_api import rest class ApiClient(object): @@ -251,7 +251,7 @@ class ApiClient(object): if data is None: return None - if type(klass) == str: + if isinstance(klass, str): if klass.startswith('list['): sub_kls = re.match(r'list\[(.*)\]', klass).group(1) return [self.__deserialize(sub_data, sub_kls) @@ -266,7 +266,7 @@ class ApiClient(object): if klass in self.NATIVE_TYPES_MAPPING: klass = self.NATIVE_TYPES_MAPPING[klass] else: - klass = getattr(psa.connected_car_api.models, klass) + klass = getattr(models, klass) if klass in self.PRIMITIVE_TYPES: return self.__deserialize_primitive(data, klass) @@ -446,7 +446,7 @@ class ApiClient(object): for k, v in six.iteritems(files): if not v: continue - file_names = v if type(v) is list else [v] + file_names = v if isinstance(v, list) else [v] for n in file_names: with open(n, 'rb') as f: filename = os.path.basename(f.name) diff --git a/psa-car-controller/psa/connected_car_api/configuration.py b/psa_car_controller/psa/connected_car_api/configuration.py similarity index 99% rename from psa-car-controller/psa/connected_car_api/configuration.py rename to psa_car_controller/psa/connected_car_api/configuration.py index 5f02ed1..8f1a4a4 100644 --- a/psa-car-controller/psa/connected_car_api/configuration.py +++ b/psa_car_controller/psa/connected_car_api/configuration.py @@ -208,7 +208,7 @@ class Configuration(object): if self.refresh_api_key_hook: self.refresh_api_key_hook(self) - + key = self.api_key.get(identifier) if key: prefix = self.api_key_prefix.get(identifier) diff --git a/psa_car_controller/psa/connected_car_api/models/__init__.py b/psa_car_controller/psa/connected_car_api/models/__init__.py new file mode 100644 index 0000000..78e9335 --- /dev/null +++ b/psa_car_controller/psa/connected_car_api/models/__init__.py @@ -0,0 +1,146 @@ +# coding: utf-8 + +# flake8: noqa +""" + Groupe PSA Connected Car - WEB API B2C + + *PSA B2C Connected Car API* # Introduction This is the description of the *Groupe PSA Connected Car V2 API*. The speccification is is based on **OpenAPI Specification version 3** and can be displayed via [ReDoc](https://github.com/Rebilly/ReDoc)a or [Swagger](http://swagger.io). This API allows applications to fetch data from the connected Vehicles data platform. # Authentication PSA Connected Car APIs uses the [OAuth 2.0](https://tools.ietf.org/html/rfc6749) protocol for authentication and Authorization. any application require a valid [Access Token](https://tools.ietf.org/html/rfc6749#section-1.4) to access to user data. # Errors Error codes returned by all REST APIs comply with the standard. Nevertheless, PSA Services (callers) need to have more complete data structures (even when the answer is not Http-OK) to better detail the type of error by providing application code, message and a debugging code(for investigation purposes). The http code of the response is managed by the protocol itself (in the header). **Errors are returned as a generic error response:** * ```xError``` object model. # noqa: E501 + + OpenAPI spec version: 4.0 + + Generated by: https://github.com/swagger-api/swagger-codegen.git +""" + + +from __future__ import absolute_import + +# import models into model package +from psa_car_controller.psa.connected_car_api.models.adas import Adas +from psa_car_controller.psa.connected_car_api.models.adas_park_assist import AdasParkAssist +from psa_car_controller.psa.connected_car_api.models.alert import Alert +from psa_car_controller.psa.connected_car_api.models.alert_end_position import AlertEndPosition +from psa_car_controller.psa.connected_car_api.models.alert_links import AlertLinks +from psa_car_controller.psa.connected_car_api.models.alert_msg_enum import AlertMsgEnum +from psa_car_controller.psa.connected_car_api.models.alerts import Alerts +from psa_car_controller.psa.connected_car_api.models.alerts_embedded import AlertsEmbedded +from psa_car_controller.psa.connected_car_api.models.battery import Battery +from psa_car_controller.psa.connected_car_api.models.bounded_program import BoundedProgram +from psa_car_controller.psa.connected_car_api.models.charging_status_enum import ChargingStatusEnum +from psa_car_controller.psa.connected_car_api.models.circle_zone import CircleZone +from psa_car_controller.psa.connected_car_api.models.circle_zone_coordinates import CircleZoneCoordinates +from psa_car_controller.psa.connected_car_api.models.collection_result import CollectionResult +from psa_car_controller.psa.connected_car_api.models.collision import Collision +from psa_car_controller.psa.connected_car_api.models.collision_links import CollisionLinks +from psa_car_controller.psa.connected_car_api.models.collision_obj import CollisionObj +from psa_car_controller.psa.connected_car_api.models.collision_obj_front import CollisionObjFront +from psa_car_controller.psa.connected_car_api.models.collisions import Collisions +from psa_car_controller.psa.connected_car_api.models.collisions_embedded import CollisionsEmbedded +from psa_car_controller.psa.connected_car_api.models.created_at_field import CreatedAtField +from psa_car_controller.psa.connected_car_api.models.data_monitor_trigger import DataMonitorTrigger +from psa_car_controller.psa.connected_car_api.models.data_trigger import DataTrigger +from psa_car_controller.psa.connected_car_api.models.default_alert_push import DefaultAlertPush +from psa_car_controller.psa.connected_car_api.models.default_alert_push_attributes import DefaultAlertPushAttributes +from psa_car_controller.psa.connected_car_api.models.doors_state import DoorsState +from psa_car_controller.psa.connected_car_api.models.doors_state_opening import DoorsStateOpening +from psa_car_controller.psa.connected_car_api.models.e_coaching import ECoaching +from psa_car_controller.psa.connected_car_api.models.e_coaching_links import ECoachingLinks +from psa_car_controller.psa.connected_car_api.models.e_coaching_scores import ECoachingScores +from psa_car_controller.psa.connected_car_api.models.energy import Energy +from psa_car_controller.psa.connected_car_api.models.energy_battery import EnergyBattery +from psa_car_controller.psa.connected_car_api.models.energy_battery_health import EnergyBatteryHealth +from psa_car_controller.psa.connected_car_api.models.energy_charging import EnergyCharging +from psa_car_controller.psa.connected_car_api.models.engine import Engine +from psa_car_controller.psa.connected_car_api.models.engine_oil import EngineOil +from psa_car_controller.psa.connected_car_api.models.environment import Environment +from psa_car_controller.psa.connected_car_api.models.environment_luminosity import EnvironmentLuminosity +from psa_car_controller.psa.connected_car_api.models.event import Event +from psa_car_controller.psa.connected_car_api.models.event_links import EventLinks +from psa_car_controller.psa.connected_car_api.models.extension import Extension +from psa_car_controller.psa.connected_car_api.models.extension_type import ExtensionType +from psa_car_controller.psa.connected_car_api.models.geometry import Geometry +from psa_car_controller.psa.connected_car_api.models.ignition import Ignition +from psa_car_controller.psa.connected_car_api.models.index_range import IndexRange +from psa_car_controller.psa.connected_car_api.models.kinetic import Kinetic +from psa_car_controller.psa.connected_car_api.models.lighting import Lighting +from psa_car_controller.psa.connected_car_api.models.link import Link +from psa_car_controller.psa.connected_car_api.models.maintenance import Maintenance +from psa_car_controller.psa.connected_car_api.models.maintenance_links import MaintenanceLinks +from psa_car_controller.psa.connected_car_api.models.maintenance_obj import MaintenanceObj +from psa_car_controller.psa.connected_car_api.models.monitor import Monitor +from psa_car_controller.psa.connected_car_api.models.monitor_id import MonitorId +from psa_car_controller.psa.connected_car_api.models.monitor_links import MonitorLinks +from psa_car_controller.psa.connected_car_api.models.monitor_parameter import MonitorParameter +from psa_car_controller.psa.connected_car_api.models.monitor_parameter_trigger_param import MonitorParameterTriggerParam +from psa_car_controller.psa.connected_car_api.models.monitor_ref import MonitorRef +from psa_car_controller.psa.connected_car_api.models.monitor_ref_links import MonitorRefLinks +from psa_car_controller.psa.connected_car_api.models.monitor_status import MonitorStatus +from psa_car_controller.psa.connected_car_api.models.monitor_status_setter import MonitorStatusSetter +from psa_car_controller.psa.connected_car_api.models.monitor_subscribe import MonitorSubscribe +from psa_car_controller.psa.connected_car_api.models.monitor_subscribe_batch_notify import MonitorSubscribeBatchNotify +from psa_car_controller.psa.connected_car_api.models.monitor_subscribe_retry_policy import MonitorSubscribeRetryPolicy +from psa_car_controller.psa.connected_car_api.models.monitor_trigger import MonitorTrigger +from psa_car_controller.psa.connected_car_api.models.monitor_webhook import MonitorWebhook +from psa_car_controller.psa.connected_car_api.models.monitor_webhook_attributes import MonitorWebhookAttributes +from psa_car_controller.psa.connected_car_api.models.monitors import Monitors +from psa_car_controller.psa.connected_car_api.models.monitors_embedded import MonitorsEmbedded +from psa_car_controller.psa.connected_car_api.models.overall_autonomy import OverallAutonomy +from psa_car_controller.psa.connected_car_api.models.point import Point +from psa_car_controller.psa.connected_car_api.models.polygon_zone import PolygonZone +from psa_car_controller.psa.connected_car_api.models.position import Position +from psa_car_controller.psa.connected_car_api.models.position_properties import PositionProperties +from psa_car_controller.psa.connected_car_api.models.preconditioning import Preconditioning +from psa_car_controller.psa.connected_car_api.models.preconditioning_air_conditioning import PreconditioningAirConditioning +from psa_car_controller.psa.connected_car_api.models.preconditioning_program import PreconditioningProgram +from psa_car_controller.psa.connected_car_api.models.privacy import Privacy +from psa_car_controller.psa.connected_car_api.models.program import Program +from psa_car_controller.psa.connected_car_api.models.program_occurence import ProgramOccurence +from psa_car_controller.psa.connected_car_api.models.safety import Safety +from psa_car_controller.psa.connected_car_api.models.service_type import ServiceType +from psa_car_controller.psa.connected_car_api.models.status import Status +from psa_car_controller.psa.connected_car_api.models.status_embedded import StatusEmbedded +from psa_car_controller.psa.connected_car_api.models.status_extension_type import StatusExtensionType +from psa_car_controller.psa.connected_car_api.models.status_links import StatusLinks +from psa_car_controller.psa.connected_car_api.models.tab_links import TabLinks +from psa_car_controller.psa.connected_car_api.models.telemetry import Telemetry +from psa_car_controller.psa.connected_car_api.models.telemetry_embedded import TelemetryEmbedded +from psa_car_controller.psa.connected_car_api.models.telemetry_enum import TelemetryEnum +from psa_car_controller.psa.connected_car_api.models.telemetry_extension import TelemetryExtension +from psa_car_controller.psa.connected_car_api.models.telemetry_extension_type import TelemetryExtensionType +from psa_car_controller.psa.connected_car_api.models.telemetry_message import TelemetryMessage +from psa_car_controller.psa.connected_car_api.models.telemetry_message_embedded import TelemetryMessageEmbedded +from psa_car_controller.psa.connected_car_api.models.telemetry_message_vehicle import TelemetryMessageVehicle +from psa_car_controller.psa.connected_car_api.models.telemetry_message_vehicle_braking_system import TelemetryMessageVehicleBrakingSystem +from psa_car_controller.psa.connected_car_api.models.telemetry_message_vehicle_transmission import TelemetryMessageVehicleTransmission +from psa_car_controller.psa.connected_car_api.models.telemetry_message_vehicle_transmission_gearbox import TelemetryMessageVehicleTransmissionGearbox +from psa_car_controller.psa.connected_car_api.models.telemetry_message_vehicle_transmission_gearbox_gear import TelemetryMessageVehicleTransmissionGearboxGear +from psa_car_controller.psa.connected_car_api.models.telemetry_message_vehicle_transmission_gearbox_mode import TelemetryMessageVehicleTransmissionGearboxMode +from psa_car_controller.psa.connected_car_api.models.time_monitor_trigger import TimeMonitorTrigger +from psa_car_controller.psa.connected_car_api.models.time_range import TimeRange +from psa_car_controller.psa.connected_car_api.models.time_stamped import TimeStamped +from psa_car_controller.psa.connected_car_api.models.time_trigger import TimeTrigger +from psa_car_controller.psa.connected_car_api.models.time_zone_monitor_trigger import TimeZoneMonitorTrigger +from psa_car_controller.psa.connected_car_api.models.time_zone_trigger import TimeZoneTrigger +from psa_car_controller.psa.connected_car_api.models.trip import Trip +from psa_car_controller.psa.connected_car_api.models.trip_avg_consumption import TripAvgConsumption +from psa_car_controller.psa.connected_car_api.models.trip_links import TripLinks +from psa_car_controller.psa.connected_car_api.models.trips import Trips +from psa_car_controller.psa.connected_car_api.models.trips_embedded import TripsEmbedded +from psa_car_controller.psa.connected_car_api.models.updated_field import UpdatedField +from psa_car_controller.psa.connected_car_api.models.url import Url +from psa_car_controller.psa.connected_car_api.models.user import User +from psa_car_controller.psa.connected_car_api.models.user_embedded import UserEmbedded +from psa_car_controller.psa.connected_car_api.models.user_links import UserLinks +from psa_car_controller.psa.connected_car_api.models.vect2_d import Vect2D +from psa_car_controller.psa.connected_car_api.models.vehicle import Vehicle +from psa_car_controller.psa.connected_car_api.models.vehicle_engine import VehicleEngine +from psa_car_controller.psa.connected_car_api.models.vehicle_links import VehicleLinks +from psa_car_controller.psa.connected_car_api.models.vehicle_odometer import VehicleOdometer +from psa_car_controller.psa.connected_car_api.models.vehicles import Vehicles +from psa_car_controller.psa.connected_car_api.models.vehicles_embedded import VehiclesEmbedded +from psa_car_controller.psa.connected_car_api.models.way_points import WayPoints +from psa_car_controller.psa.connected_car_api.models.way_points_embedded import WayPointsEmbedded +from psa_car_controller.psa.connected_car_api.models.x_error import XError +from psa_car_controller.psa.connected_car_api.models.zone_monitor_trigger import ZoneMonitorTrigger +from psa_car_controller.psa.connected_car_api.models.zone_trigger import ZoneTrigger +from psa_car_controller.psa.connected_car_api.models.zone_trigger_place import ZoneTriggerPlace +from psa_car_controller.psa.connected_car_api.models.zone_trigger_place_center import ZoneTriggerPlaceCenter diff --git a/psa-car-controller/psa/connected_car_api/models/adas.py b/psa_car_controller/psa/connected_car_api/models/adas.py similarity index 100% rename from psa-car-controller/psa/connected_car_api/models/adas.py rename to psa_car_controller/psa/connected_car_api/models/adas.py diff --git a/psa-car-controller/psa/connected_car_api/models/adas_park_assist.py b/psa_car_controller/psa/connected_car_api/models/adas_park_assist.py similarity index 100% rename from psa-car-controller/psa/connected_car_api/models/adas_park_assist.py rename to psa_car_controller/psa/connected_car_api/models/adas_park_assist.py diff --git a/psa-car-controller/psa/connected_car_api/models/alert.py b/psa_car_controller/psa/connected_car_api/models/alert.py similarity index 100% rename from psa-car-controller/psa/connected_car_api/models/alert.py rename to psa_car_controller/psa/connected_car_api/models/alert.py diff --git a/psa-car-controller/psa/connected_car_api/models/alert_end_position.py b/psa_car_controller/psa/connected_car_api/models/alert_end_position.py similarity index 100% rename from psa-car-controller/psa/connected_car_api/models/alert_end_position.py rename to psa_car_controller/psa/connected_car_api/models/alert_end_position.py diff --git a/psa-car-controller/psa/connected_car_api/models/alert_links.py b/psa_car_controller/psa/connected_car_api/models/alert_links.py similarity index 100% rename from psa-car-controller/psa/connected_car_api/models/alert_links.py rename to psa_car_controller/psa/connected_car_api/models/alert_links.py diff --git a/psa-car-controller/psa/connected_car_api/models/alert_msg_enum.py b/psa_car_controller/psa/connected_car_api/models/alert_msg_enum.py similarity index 100% rename from psa-car-controller/psa/connected_car_api/models/alert_msg_enum.py rename to psa_car_controller/psa/connected_car_api/models/alert_msg_enum.py diff --git a/psa-car-controller/psa/connected_car_api/models/alerts.py b/psa_car_controller/psa/connected_car_api/models/alerts.py similarity index 100% rename from psa-car-controller/psa/connected_car_api/models/alerts.py rename to psa_car_controller/psa/connected_car_api/models/alerts.py diff --git a/psa-car-controller/psa/connected_car_api/models/alerts_embedded.py b/psa_car_controller/psa/connected_car_api/models/alerts_embedded.py similarity index 100% rename from psa-car-controller/psa/connected_car_api/models/alerts_embedded.py rename to psa_car_controller/psa/connected_car_api/models/alerts_embedded.py diff --git a/psa-car-controller/psa/connected_car_api/models/battery.py b/psa_car_controller/psa/connected_car_api/models/battery.py similarity index 100% rename from psa-car-controller/psa/connected_car_api/models/battery.py rename to psa_car_controller/psa/connected_car_api/models/battery.py diff --git a/psa-car-controller/psa/connected_car_api/models/bounded_program.py b/psa_car_controller/psa/connected_car_api/models/bounded_program.py similarity index 100% rename from psa-car-controller/psa/connected_car_api/models/bounded_program.py rename to psa_car_controller/psa/connected_car_api/models/bounded_program.py diff --git a/psa-car-controller/psa/connected_car_api/models/charging_status_enum.py b/psa_car_controller/psa/connected_car_api/models/charging_status_enum.py similarity index 100% rename from psa-car-controller/psa/connected_car_api/models/charging_status_enum.py rename to psa_car_controller/psa/connected_car_api/models/charging_status_enum.py diff --git a/psa-car-controller/psa/connected_car_api/models/circle_zone.py b/psa_car_controller/psa/connected_car_api/models/circle_zone.py similarity index 100% rename from psa-car-controller/psa/connected_car_api/models/circle_zone.py rename to psa_car_controller/psa/connected_car_api/models/circle_zone.py diff --git a/psa-car-controller/psa/connected_car_api/models/circle_zone_coordinates.py b/psa_car_controller/psa/connected_car_api/models/circle_zone_coordinates.py similarity index 100% rename from psa-car-controller/psa/connected_car_api/models/circle_zone_coordinates.py rename to psa_car_controller/psa/connected_car_api/models/circle_zone_coordinates.py diff --git a/psa-car-controller/psa/connected_car_api/models/collection_result.py b/psa_car_controller/psa/connected_car_api/models/collection_result.py similarity index 100% rename from psa-car-controller/psa/connected_car_api/models/collection_result.py rename to psa_car_controller/psa/connected_car_api/models/collection_result.py diff --git a/psa-car-controller/psa/connected_car_api/models/collision.py b/psa_car_controller/psa/connected_car_api/models/collision.py similarity index 100% rename from psa-car-controller/psa/connected_car_api/models/collision.py rename to psa_car_controller/psa/connected_car_api/models/collision.py diff --git a/psa-car-controller/psa/connected_car_api/models/collision_links.py b/psa_car_controller/psa/connected_car_api/models/collision_links.py similarity index 100% rename from psa-car-controller/psa/connected_car_api/models/collision_links.py rename to psa_car_controller/psa/connected_car_api/models/collision_links.py diff --git a/psa-car-controller/psa/connected_car_api/models/collision_obj.py b/psa_car_controller/psa/connected_car_api/models/collision_obj.py similarity index 100% rename from psa-car-controller/psa/connected_car_api/models/collision_obj.py rename to psa_car_controller/psa/connected_car_api/models/collision_obj.py diff --git a/psa-car-controller/psa/connected_car_api/models/collision_obj_front.py b/psa_car_controller/psa/connected_car_api/models/collision_obj_front.py similarity index 100% rename from psa-car-controller/psa/connected_car_api/models/collision_obj_front.py rename to psa_car_controller/psa/connected_car_api/models/collision_obj_front.py diff --git a/psa-car-controller/psa/connected_car_api/models/collisions.py b/psa_car_controller/psa/connected_car_api/models/collisions.py similarity index 100% rename from psa-car-controller/psa/connected_car_api/models/collisions.py rename to psa_car_controller/psa/connected_car_api/models/collisions.py diff --git a/psa-car-controller/psa/connected_car_api/models/collisions_embedded.py b/psa_car_controller/psa/connected_car_api/models/collisions_embedded.py similarity index 100% rename from psa-car-controller/psa/connected_car_api/models/collisions_embedded.py rename to psa_car_controller/psa/connected_car_api/models/collisions_embedded.py diff --git a/psa-car-controller/psa/connected_car_api/models/created_at_field.py b/psa_car_controller/psa/connected_car_api/models/created_at_field.py similarity index 100% rename from psa-car-controller/psa/connected_car_api/models/created_at_field.py rename to psa_car_controller/psa/connected_car_api/models/created_at_field.py diff --git a/psa-car-controller/psa/connected_car_api/models/data_monitor_trigger.py b/psa_car_controller/psa/connected_car_api/models/data_monitor_trigger.py similarity index 100% rename from psa-car-controller/psa/connected_car_api/models/data_monitor_trigger.py rename to psa_car_controller/psa/connected_car_api/models/data_monitor_trigger.py diff --git a/psa-car-controller/psa/connected_car_api/models/data_trigger.py b/psa_car_controller/psa/connected_car_api/models/data_trigger.py similarity index 100% rename from psa-car-controller/psa/connected_car_api/models/data_trigger.py rename to psa_car_controller/psa/connected_car_api/models/data_trigger.py diff --git a/psa-car-controller/psa/connected_car_api/models/default_alert_push.py b/psa_car_controller/psa/connected_car_api/models/default_alert_push.py similarity index 100% rename from psa-car-controller/psa/connected_car_api/models/default_alert_push.py rename to psa_car_controller/psa/connected_car_api/models/default_alert_push.py diff --git a/psa-car-controller/psa/connected_car_api/models/default_alert_push_attributes.py b/psa_car_controller/psa/connected_car_api/models/default_alert_push_attributes.py similarity index 100% rename from psa-car-controller/psa/connected_car_api/models/default_alert_push_attributes.py rename to psa_car_controller/psa/connected_car_api/models/default_alert_push_attributes.py diff --git a/psa-car-controller/psa/connected_car_api/models/doors_state.py b/psa_car_controller/psa/connected_car_api/models/doors_state.py similarity index 100% rename from psa-car-controller/psa/connected_car_api/models/doors_state.py rename to psa_car_controller/psa/connected_car_api/models/doors_state.py diff --git a/psa-car-controller/psa/connected_car_api/models/doors_state_opening.py b/psa_car_controller/psa/connected_car_api/models/doors_state_opening.py similarity index 100% rename from psa-car-controller/psa/connected_car_api/models/doors_state_opening.py rename to psa_car_controller/psa/connected_car_api/models/doors_state_opening.py diff --git a/psa-car-controller/psa/connected_car_api/models/e_coaching.py b/psa_car_controller/psa/connected_car_api/models/e_coaching.py similarity index 100% rename from psa-car-controller/psa/connected_car_api/models/e_coaching.py rename to psa_car_controller/psa/connected_car_api/models/e_coaching.py diff --git a/psa-car-controller/psa/connected_car_api/models/e_coaching_links.py b/psa_car_controller/psa/connected_car_api/models/e_coaching_links.py similarity index 100% rename from psa-car-controller/psa/connected_car_api/models/e_coaching_links.py rename to psa_car_controller/psa/connected_car_api/models/e_coaching_links.py diff --git a/psa-car-controller/psa/connected_car_api/models/e_coaching_scores.py b/psa_car_controller/psa/connected_car_api/models/e_coaching_scores.py similarity index 100% rename from psa-car-controller/psa/connected_car_api/models/e_coaching_scores.py rename to psa_car_controller/psa/connected_car_api/models/e_coaching_scores.py diff --git a/psa-car-controller/psa/connected_car_api/models/energy.py b/psa_car_controller/psa/connected_car_api/models/energy.py similarity index 100% rename from psa-car-controller/psa/connected_car_api/models/energy.py rename to psa_car_controller/psa/connected_car_api/models/energy.py diff --git a/psa-car-controller/psa/connected_car_api/models/energy_battery.py b/psa_car_controller/psa/connected_car_api/models/energy_battery.py similarity index 100% rename from psa-car-controller/psa/connected_car_api/models/energy_battery.py rename to psa_car_controller/psa/connected_car_api/models/energy_battery.py diff --git a/psa-car-controller/psa/connected_car_api/models/energy_battery_health.py b/psa_car_controller/psa/connected_car_api/models/energy_battery_health.py similarity index 100% rename from psa-car-controller/psa/connected_car_api/models/energy_battery_health.py rename to psa_car_controller/psa/connected_car_api/models/energy_battery_health.py diff --git a/psa-car-controller/psa/connected_car_api/models/energy_charging.py b/psa_car_controller/psa/connected_car_api/models/energy_charging.py similarity index 100% rename from psa-car-controller/psa/connected_car_api/models/energy_charging.py rename to psa_car_controller/psa/connected_car_api/models/energy_charging.py diff --git a/psa-car-controller/psa/connected_car_api/models/engine.py b/psa_car_controller/psa/connected_car_api/models/engine.py similarity index 100% rename from psa-car-controller/psa/connected_car_api/models/engine.py rename to psa_car_controller/psa/connected_car_api/models/engine.py diff --git a/psa-car-controller/psa/connected_car_api/models/engine_oil.py b/psa_car_controller/psa/connected_car_api/models/engine_oil.py similarity index 100% rename from psa-car-controller/psa/connected_car_api/models/engine_oil.py rename to psa_car_controller/psa/connected_car_api/models/engine_oil.py diff --git a/psa-car-controller/psa/connected_car_api/models/environment.py b/psa_car_controller/psa/connected_car_api/models/environment.py similarity index 100% rename from psa-car-controller/psa/connected_car_api/models/environment.py rename to psa_car_controller/psa/connected_car_api/models/environment.py diff --git a/psa-car-controller/psa/connected_car_api/models/environment_luminosity.py b/psa_car_controller/psa/connected_car_api/models/environment_luminosity.py similarity index 100% rename from psa-car-controller/psa/connected_car_api/models/environment_luminosity.py rename to psa_car_controller/psa/connected_car_api/models/environment_luminosity.py diff --git a/psa-car-controller/psa/connected_car_api/models/event.py b/psa_car_controller/psa/connected_car_api/models/event.py similarity index 100% rename from psa-car-controller/psa/connected_car_api/models/event.py rename to psa_car_controller/psa/connected_car_api/models/event.py diff --git a/psa-car-controller/psa/connected_car_api/models/event_links.py b/psa_car_controller/psa/connected_car_api/models/event_links.py similarity index 100% rename from psa-car-controller/psa/connected_car_api/models/event_links.py rename to psa_car_controller/psa/connected_car_api/models/event_links.py diff --git a/psa-car-controller/psa/connected_car_api/models/extension.py b/psa_car_controller/psa/connected_car_api/models/extension.py similarity index 100% rename from psa-car-controller/psa/connected_car_api/models/extension.py rename to psa_car_controller/psa/connected_car_api/models/extension.py diff --git a/psa-car-controller/psa/connected_car_api/models/extension_type.py b/psa_car_controller/psa/connected_car_api/models/extension_type.py similarity index 100% rename from psa-car-controller/psa/connected_car_api/models/extension_type.py rename to psa_car_controller/psa/connected_car_api/models/extension_type.py diff --git a/psa-car-controller/psa/connected_car_api/models/geometry.py b/psa_car_controller/psa/connected_car_api/models/geometry.py similarity index 100% rename from psa-car-controller/psa/connected_car_api/models/geometry.py rename to psa_car_controller/psa/connected_car_api/models/geometry.py diff --git a/psa-car-controller/psa/connected_car_api/models/ignition.py b/psa_car_controller/psa/connected_car_api/models/ignition.py similarity index 100% rename from psa-car-controller/psa/connected_car_api/models/ignition.py rename to psa_car_controller/psa/connected_car_api/models/ignition.py diff --git a/psa-car-controller/psa/connected_car_api/models/index_range.py b/psa_car_controller/psa/connected_car_api/models/index_range.py similarity index 100% rename from psa-car-controller/psa/connected_car_api/models/index_range.py rename to psa_car_controller/psa/connected_car_api/models/index_range.py diff --git a/psa-car-controller/psa/connected_car_api/models/kinetic.py b/psa_car_controller/psa/connected_car_api/models/kinetic.py similarity index 100% rename from psa-car-controller/psa/connected_car_api/models/kinetic.py rename to psa_car_controller/psa/connected_car_api/models/kinetic.py diff --git a/psa-car-controller/psa/connected_car_api/models/lighting.py b/psa_car_controller/psa/connected_car_api/models/lighting.py similarity index 100% rename from psa-car-controller/psa/connected_car_api/models/lighting.py rename to psa_car_controller/psa/connected_car_api/models/lighting.py diff --git a/psa-car-controller/psa/connected_car_api/models/link.py b/psa_car_controller/psa/connected_car_api/models/link.py similarity index 100% rename from psa-car-controller/psa/connected_car_api/models/link.py rename to psa_car_controller/psa/connected_car_api/models/link.py diff --git a/psa-car-controller/psa/connected_car_api/models/maintenance.py b/psa_car_controller/psa/connected_car_api/models/maintenance.py similarity index 100% rename from psa-car-controller/psa/connected_car_api/models/maintenance.py rename to psa_car_controller/psa/connected_car_api/models/maintenance.py diff --git a/psa-car-controller/psa/connected_car_api/models/maintenance_links.py b/psa_car_controller/psa/connected_car_api/models/maintenance_links.py similarity index 100% rename from psa-car-controller/psa/connected_car_api/models/maintenance_links.py rename to psa_car_controller/psa/connected_car_api/models/maintenance_links.py diff --git a/psa-car-controller/psa/connected_car_api/models/maintenance_obj.py b/psa_car_controller/psa/connected_car_api/models/maintenance_obj.py similarity index 100% rename from psa-car-controller/psa/connected_car_api/models/maintenance_obj.py rename to psa_car_controller/psa/connected_car_api/models/maintenance_obj.py diff --git a/psa-car-controller/psa/connected_car_api/models/monitor.py b/psa_car_controller/psa/connected_car_api/models/monitor.py similarity index 100% rename from psa-car-controller/psa/connected_car_api/models/monitor.py rename to psa_car_controller/psa/connected_car_api/models/monitor.py diff --git a/psa-car-controller/psa/connected_car_api/models/monitor_id.py b/psa_car_controller/psa/connected_car_api/models/monitor_id.py similarity index 100% rename from psa-car-controller/psa/connected_car_api/models/monitor_id.py rename to psa_car_controller/psa/connected_car_api/models/monitor_id.py diff --git a/psa-car-controller/psa/connected_car_api/models/monitor_links.py b/psa_car_controller/psa/connected_car_api/models/monitor_links.py similarity index 100% rename from psa-car-controller/psa/connected_car_api/models/monitor_links.py rename to psa_car_controller/psa/connected_car_api/models/monitor_links.py diff --git a/psa-car-controller/psa/connected_car_api/models/monitor_parameter.py b/psa_car_controller/psa/connected_car_api/models/monitor_parameter.py similarity index 100% rename from psa-car-controller/psa/connected_car_api/models/monitor_parameter.py rename to psa_car_controller/psa/connected_car_api/models/monitor_parameter.py diff --git a/psa-car-controller/psa/connected_car_api/models/monitor_parameter_trigger_param.py b/psa_car_controller/psa/connected_car_api/models/monitor_parameter_trigger_param.py similarity index 100% rename from psa-car-controller/psa/connected_car_api/models/monitor_parameter_trigger_param.py rename to psa_car_controller/psa/connected_car_api/models/monitor_parameter_trigger_param.py diff --git a/psa-car-controller/psa/connected_car_api/models/monitor_ref.py b/psa_car_controller/psa/connected_car_api/models/monitor_ref.py similarity index 100% rename from psa-car-controller/psa/connected_car_api/models/monitor_ref.py rename to psa_car_controller/psa/connected_car_api/models/monitor_ref.py diff --git a/psa-car-controller/psa/connected_car_api/models/monitor_ref_links.py b/psa_car_controller/psa/connected_car_api/models/monitor_ref_links.py similarity index 100% rename from psa-car-controller/psa/connected_car_api/models/monitor_ref_links.py rename to psa_car_controller/psa/connected_car_api/models/monitor_ref_links.py diff --git a/psa-car-controller/psa/connected_car_api/models/monitor_status.py b/psa_car_controller/psa/connected_car_api/models/monitor_status.py similarity index 100% rename from psa-car-controller/psa/connected_car_api/models/monitor_status.py rename to psa_car_controller/psa/connected_car_api/models/monitor_status.py diff --git a/psa-car-controller/psa/connected_car_api/models/monitor_status_setter.py b/psa_car_controller/psa/connected_car_api/models/monitor_status_setter.py similarity index 100% rename from psa-car-controller/psa/connected_car_api/models/monitor_status_setter.py rename to psa_car_controller/psa/connected_car_api/models/monitor_status_setter.py diff --git a/psa-car-controller/psa/connected_car_api/models/monitor_subscribe.py b/psa_car_controller/psa/connected_car_api/models/monitor_subscribe.py similarity index 100% rename from psa-car-controller/psa/connected_car_api/models/monitor_subscribe.py rename to psa_car_controller/psa/connected_car_api/models/monitor_subscribe.py diff --git a/psa-car-controller/psa/connected_car_api/models/monitor_subscribe_batch_notify.py b/psa_car_controller/psa/connected_car_api/models/monitor_subscribe_batch_notify.py similarity index 100% rename from psa-car-controller/psa/connected_car_api/models/monitor_subscribe_batch_notify.py rename to psa_car_controller/psa/connected_car_api/models/monitor_subscribe_batch_notify.py diff --git a/psa-car-controller/psa/connected_car_api/models/monitor_subscribe_retry_policy.py b/psa_car_controller/psa/connected_car_api/models/monitor_subscribe_retry_policy.py similarity index 100% rename from psa-car-controller/psa/connected_car_api/models/monitor_subscribe_retry_policy.py rename to psa_car_controller/psa/connected_car_api/models/monitor_subscribe_retry_policy.py diff --git a/psa-car-controller/psa/connected_car_api/models/monitor_trigger.py b/psa_car_controller/psa/connected_car_api/models/monitor_trigger.py similarity index 100% rename from psa-car-controller/psa/connected_car_api/models/monitor_trigger.py rename to psa_car_controller/psa/connected_car_api/models/monitor_trigger.py diff --git a/psa-car-controller/psa/connected_car_api/models/monitor_webhook.py b/psa_car_controller/psa/connected_car_api/models/monitor_webhook.py similarity index 100% rename from psa-car-controller/psa/connected_car_api/models/monitor_webhook.py rename to psa_car_controller/psa/connected_car_api/models/monitor_webhook.py diff --git a/psa-car-controller/psa/connected_car_api/models/monitor_webhook_attributes.py b/psa_car_controller/psa/connected_car_api/models/monitor_webhook_attributes.py similarity index 100% rename from psa-car-controller/psa/connected_car_api/models/monitor_webhook_attributes.py rename to psa_car_controller/psa/connected_car_api/models/monitor_webhook_attributes.py diff --git a/psa-car-controller/psa/connected_car_api/models/monitors.py b/psa_car_controller/psa/connected_car_api/models/monitors.py similarity index 100% rename from psa-car-controller/psa/connected_car_api/models/monitors.py rename to psa_car_controller/psa/connected_car_api/models/monitors.py diff --git a/psa-car-controller/psa/connected_car_api/models/monitors_embedded.py b/psa_car_controller/psa/connected_car_api/models/monitors_embedded.py similarity index 100% rename from psa-car-controller/psa/connected_car_api/models/monitors_embedded.py rename to psa_car_controller/psa/connected_car_api/models/monitors_embedded.py diff --git a/psa-car-controller/psa/connected_car_api/models/overall_autonomy.py b/psa_car_controller/psa/connected_car_api/models/overall_autonomy.py similarity index 100% rename from psa-car-controller/psa/connected_car_api/models/overall_autonomy.py rename to psa_car_controller/psa/connected_car_api/models/overall_autonomy.py diff --git a/psa-car-controller/psa/connected_car_api/models/point.py b/psa_car_controller/psa/connected_car_api/models/point.py similarity index 100% rename from psa-car-controller/psa/connected_car_api/models/point.py rename to psa_car_controller/psa/connected_car_api/models/point.py diff --git a/psa-car-controller/psa/connected_car_api/models/polygon_zone.py b/psa_car_controller/psa/connected_car_api/models/polygon_zone.py similarity index 100% rename from psa-car-controller/psa/connected_car_api/models/polygon_zone.py rename to psa_car_controller/psa/connected_car_api/models/polygon_zone.py diff --git a/psa-car-controller/psa/connected_car_api/models/position.py b/psa_car_controller/psa/connected_car_api/models/position.py similarity index 100% rename from psa-car-controller/psa/connected_car_api/models/position.py rename to psa_car_controller/psa/connected_car_api/models/position.py diff --git a/psa-car-controller/psa/connected_car_api/models/position_properties.py b/psa_car_controller/psa/connected_car_api/models/position_properties.py similarity index 100% rename from psa-car-controller/psa/connected_car_api/models/position_properties.py rename to psa_car_controller/psa/connected_car_api/models/position_properties.py diff --git a/psa-car-controller/psa/connected_car_api/models/preconditioning.py b/psa_car_controller/psa/connected_car_api/models/preconditioning.py similarity index 100% rename from psa-car-controller/psa/connected_car_api/models/preconditioning.py rename to psa_car_controller/psa/connected_car_api/models/preconditioning.py diff --git a/psa-car-controller/psa/connected_car_api/models/preconditioning_air_conditioning.py b/psa_car_controller/psa/connected_car_api/models/preconditioning_air_conditioning.py similarity index 100% rename from psa-car-controller/psa/connected_car_api/models/preconditioning_air_conditioning.py rename to psa_car_controller/psa/connected_car_api/models/preconditioning_air_conditioning.py diff --git a/psa-car-controller/psa/connected_car_api/models/preconditioning_program.py b/psa_car_controller/psa/connected_car_api/models/preconditioning_program.py similarity index 100% rename from psa-car-controller/psa/connected_car_api/models/preconditioning_program.py rename to psa_car_controller/psa/connected_car_api/models/preconditioning_program.py diff --git a/psa-car-controller/psa/connected_car_api/models/privacy.py b/psa_car_controller/psa/connected_car_api/models/privacy.py similarity index 100% rename from psa-car-controller/psa/connected_car_api/models/privacy.py rename to psa_car_controller/psa/connected_car_api/models/privacy.py diff --git a/psa-car-controller/psa/connected_car_api/models/program.py b/psa_car_controller/psa/connected_car_api/models/program.py similarity index 100% rename from psa-car-controller/psa/connected_car_api/models/program.py rename to psa_car_controller/psa/connected_car_api/models/program.py diff --git a/psa-car-controller/psa/connected_car_api/models/program_occurence.py b/psa_car_controller/psa/connected_car_api/models/program_occurence.py similarity index 100% rename from psa-car-controller/psa/connected_car_api/models/program_occurence.py rename to psa_car_controller/psa/connected_car_api/models/program_occurence.py diff --git a/psa-car-controller/psa/connected_car_api/models/safety.py b/psa_car_controller/psa/connected_car_api/models/safety.py similarity index 100% rename from psa-car-controller/psa/connected_car_api/models/safety.py rename to psa_car_controller/psa/connected_car_api/models/safety.py diff --git a/psa-car-controller/psa/connected_car_api/models/service_type.py b/psa_car_controller/psa/connected_car_api/models/service_type.py similarity index 100% rename from psa-car-controller/psa/connected_car_api/models/service_type.py rename to psa_car_controller/psa/connected_car_api/models/service_type.py diff --git a/psa-car-controller/psa/connected_car_api/models/status.py b/psa_car_controller/psa/connected_car_api/models/status.py similarity index 100% rename from psa-car-controller/psa/connected_car_api/models/status.py rename to psa_car_controller/psa/connected_car_api/models/status.py diff --git a/psa-car-controller/psa/connected_car_api/models/status_embedded.py b/psa_car_controller/psa/connected_car_api/models/status_embedded.py similarity index 100% rename from psa-car-controller/psa/connected_car_api/models/status_embedded.py rename to psa_car_controller/psa/connected_car_api/models/status_embedded.py diff --git a/psa-car-controller/psa/connected_car_api/models/status_extension_type.py b/psa_car_controller/psa/connected_car_api/models/status_extension_type.py similarity index 100% rename from psa-car-controller/psa/connected_car_api/models/status_extension_type.py rename to psa_car_controller/psa/connected_car_api/models/status_extension_type.py diff --git a/psa-car-controller/psa/connected_car_api/models/status_links.py b/psa_car_controller/psa/connected_car_api/models/status_links.py similarity index 100% rename from psa-car-controller/psa/connected_car_api/models/status_links.py rename to psa_car_controller/psa/connected_car_api/models/status_links.py diff --git a/psa-car-controller/psa/connected_car_api/models/tab_links.py b/psa_car_controller/psa/connected_car_api/models/tab_links.py similarity index 100% rename from psa-car-controller/psa/connected_car_api/models/tab_links.py rename to psa_car_controller/psa/connected_car_api/models/tab_links.py diff --git a/psa-car-controller/psa/connected_car_api/models/telemetry.py b/psa_car_controller/psa/connected_car_api/models/telemetry.py similarity index 100% rename from psa-car-controller/psa/connected_car_api/models/telemetry.py rename to psa_car_controller/psa/connected_car_api/models/telemetry.py diff --git a/psa-car-controller/psa/connected_car_api/models/telemetry_embedded.py b/psa_car_controller/psa/connected_car_api/models/telemetry_embedded.py similarity index 100% rename from psa-car-controller/psa/connected_car_api/models/telemetry_embedded.py rename to psa_car_controller/psa/connected_car_api/models/telemetry_embedded.py diff --git a/psa-car-controller/psa/connected_car_api/models/telemetry_enum.py b/psa_car_controller/psa/connected_car_api/models/telemetry_enum.py similarity index 100% rename from psa-car-controller/psa/connected_car_api/models/telemetry_enum.py rename to psa_car_controller/psa/connected_car_api/models/telemetry_enum.py diff --git a/psa-car-controller/psa/connected_car_api/models/telemetry_extension.py b/psa_car_controller/psa/connected_car_api/models/telemetry_extension.py similarity index 100% rename from psa-car-controller/psa/connected_car_api/models/telemetry_extension.py rename to psa_car_controller/psa/connected_car_api/models/telemetry_extension.py diff --git a/psa-car-controller/psa/connected_car_api/models/telemetry_extension_type.py b/psa_car_controller/psa/connected_car_api/models/telemetry_extension_type.py similarity index 100% rename from psa-car-controller/psa/connected_car_api/models/telemetry_extension_type.py rename to psa_car_controller/psa/connected_car_api/models/telemetry_extension_type.py diff --git a/psa-car-controller/psa/connected_car_api/models/telemetry_message.py b/psa_car_controller/psa/connected_car_api/models/telemetry_message.py similarity index 100% rename from psa-car-controller/psa/connected_car_api/models/telemetry_message.py rename to psa_car_controller/psa/connected_car_api/models/telemetry_message.py diff --git a/psa-car-controller/psa/connected_car_api/models/telemetry_message_embedded.py b/psa_car_controller/psa/connected_car_api/models/telemetry_message_embedded.py similarity index 100% rename from psa-car-controller/psa/connected_car_api/models/telemetry_message_embedded.py rename to psa_car_controller/psa/connected_car_api/models/telemetry_message_embedded.py diff --git a/psa-car-controller/psa/connected_car_api/models/telemetry_message_vehicle.py b/psa_car_controller/psa/connected_car_api/models/telemetry_message_vehicle.py similarity index 100% rename from psa-car-controller/psa/connected_car_api/models/telemetry_message_vehicle.py rename to psa_car_controller/psa/connected_car_api/models/telemetry_message_vehicle.py diff --git a/psa-car-controller/psa/connected_car_api/models/telemetry_message_vehicle_braking_system.py b/psa_car_controller/psa/connected_car_api/models/telemetry_message_vehicle_braking_system.py similarity index 100% rename from psa-car-controller/psa/connected_car_api/models/telemetry_message_vehicle_braking_system.py rename to psa_car_controller/psa/connected_car_api/models/telemetry_message_vehicle_braking_system.py diff --git a/psa-car-controller/psa/connected_car_api/models/telemetry_message_vehicle_transmission.py b/psa_car_controller/psa/connected_car_api/models/telemetry_message_vehicle_transmission.py similarity index 100% rename from psa-car-controller/psa/connected_car_api/models/telemetry_message_vehicle_transmission.py rename to psa_car_controller/psa/connected_car_api/models/telemetry_message_vehicle_transmission.py diff --git a/psa-car-controller/psa/connected_car_api/models/telemetry_message_vehicle_transmission_gearbox.py b/psa_car_controller/psa/connected_car_api/models/telemetry_message_vehicle_transmission_gearbox.py similarity index 100% rename from psa-car-controller/psa/connected_car_api/models/telemetry_message_vehicle_transmission_gearbox.py rename to psa_car_controller/psa/connected_car_api/models/telemetry_message_vehicle_transmission_gearbox.py diff --git a/psa-car-controller/psa/connected_car_api/models/telemetry_message_vehicle_transmission_gearbox_gear.py b/psa_car_controller/psa/connected_car_api/models/telemetry_message_vehicle_transmission_gearbox_gear.py similarity index 100% rename from psa-car-controller/psa/connected_car_api/models/telemetry_message_vehicle_transmission_gearbox_gear.py rename to psa_car_controller/psa/connected_car_api/models/telemetry_message_vehicle_transmission_gearbox_gear.py diff --git a/psa-car-controller/psa/connected_car_api/models/telemetry_message_vehicle_transmission_gearbox_mode.py b/psa_car_controller/psa/connected_car_api/models/telemetry_message_vehicle_transmission_gearbox_mode.py similarity index 100% rename from psa-car-controller/psa/connected_car_api/models/telemetry_message_vehicle_transmission_gearbox_mode.py rename to psa_car_controller/psa/connected_car_api/models/telemetry_message_vehicle_transmission_gearbox_mode.py diff --git a/psa-car-controller/psa/connected_car_api/models/time_monitor_trigger.py b/psa_car_controller/psa/connected_car_api/models/time_monitor_trigger.py similarity index 100% rename from psa-car-controller/psa/connected_car_api/models/time_monitor_trigger.py rename to psa_car_controller/psa/connected_car_api/models/time_monitor_trigger.py diff --git a/psa-car-controller/psa/connected_car_api/models/time_range.py b/psa_car_controller/psa/connected_car_api/models/time_range.py similarity index 100% rename from psa-car-controller/psa/connected_car_api/models/time_range.py rename to psa_car_controller/psa/connected_car_api/models/time_range.py diff --git a/psa-car-controller/psa/connected_car_api/models/time_stamped.py b/psa_car_controller/psa/connected_car_api/models/time_stamped.py similarity index 100% rename from psa-car-controller/psa/connected_car_api/models/time_stamped.py rename to psa_car_controller/psa/connected_car_api/models/time_stamped.py diff --git a/psa-car-controller/psa/connected_car_api/models/time_trigger.py b/psa_car_controller/psa/connected_car_api/models/time_trigger.py similarity index 100% rename from psa-car-controller/psa/connected_car_api/models/time_trigger.py rename to psa_car_controller/psa/connected_car_api/models/time_trigger.py diff --git a/psa-car-controller/psa/connected_car_api/models/time_zone_monitor_trigger.py b/psa_car_controller/psa/connected_car_api/models/time_zone_monitor_trigger.py similarity index 100% rename from psa-car-controller/psa/connected_car_api/models/time_zone_monitor_trigger.py rename to psa_car_controller/psa/connected_car_api/models/time_zone_monitor_trigger.py diff --git a/psa-car-controller/psa/connected_car_api/models/time_zone_trigger.py b/psa_car_controller/psa/connected_car_api/models/time_zone_trigger.py similarity index 100% rename from psa-car-controller/psa/connected_car_api/models/time_zone_trigger.py rename to psa_car_controller/psa/connected_car_api/models/time_zone_trigger.py diff --git a/psa-car-controller/psa/connected_car_api/models/trip.py b/psa_car_controller/psa/connected_car_api/models/trip.py similarity index 100% rename from psa-car-controller/psa/connected_car_api/models/trip.py rename to psa_car_controller/psa/connected_car_api/models/trip.py diff --git a/psa-car-controller/psa/connected_car_api/models/trip_avg_consumption.py b/psa_car_controller/psa/connected_car_api/models/trip_avg_consumption.py similarity index 100% rename from psa-car-controller/psa/connected_car_api/models/trip_avg_consumption.py rename to psa_car_controller/psa/connected_car_api/models/trip_avg_consumption.py diff --git a/psa-car-controller/psa/connected_car_api/models/trip_links.py b/psa_car_controller/psa/connected_car_api/models/trip_links.py similarity index 100% rename from psa-car-controller/psa/connected_car_api/models/trip_links.py rename to psa_car_controller/psa/connected_car_api/models/trip_links.py diff --git a/psa-car-controller/psa/connected_car_api/models/trips.py b/psa_car_controller/psa/connected_car_api/models/trips.py similarity index 100% rename from psa-car-controller/psa/connected_car_api/models/trips.py rename to psa_car_controller/psa/connected_car_api/models/trips.py diff --git a/psa-car-controller/psa/connected_car_api/models/trips_embedded.py b/psa_car_controller/psa/connected_car_api/models/trips_embedded.py similarity index 100% rename from psa-car-controller/psa/connected_car_api/models/trips_embedded.py rename to psa_car_controller/psa/connected_car_api/models/trips_embedded.py diff --git a/psa-car-controller/psa/connected_car_api/models/updated_field.py b/psa_car_controller/psa/connected_car_api/models/updated_field.py similarity index 100% rename from psa-car-controller/psa/connected_car_api/models/updated_field.py rename to psa_car_controller/psa/connected_car_api/models/updated_field.py diff --git a/psa-car-controller/psa/connected_car_api/models/url.py b/psa_car_controller/psa/connected_car_api/models/url.py similarity index 100% rename from psa-car-controller/psa/connected_car_api/models/url.py rename to psa_car_controller/psa/connected_car_api/models/url.py diff --git a/psa-car-controller/psa/connected_car_api/models/user.py b/psa_car_controller/psa/connected_car_api/models/user.py similarity index 100% rename from psa-car-controller/psa/connected_car_api/models/user.py rename to psa_car_controller/psa/connected_car_api/models/user.py diff --git a/psa-car-controller/psa/connected_car_api/models/user_embedded.py b/psa_car_controller/psa/connected_car_api/models/user_embedded.py similarity index 100% rename from psa-car-controller/psa/connected_car_api/models/user_embedded.py rename to psa_car_controller/psa/connected_car_api/models/user_embedded.py diff --git a/psa-car-controller/psa/connected_car_api/models/user_links.py b/psa_car_controller/psa/connected_car_api/models/user_links.py similarity index 100% rename from psa-car-controller/psa/connected_car_api/models/user_links.py rename to psa_car_controller/psa/connected_car_api/models/user_links.py diff --git a/psa-car-controller/psa/connected_car_api/models/vect2_d.py b/psa_car_controller/psa/connected_car_api/models/vect2_d.py similarity index 100% rename from psa-car-controller/psa/connected_car_api/models/vect2_d.py rename to psa_car_controller/psa/connected_car_api/models/vect2_d.py diff --git a/psa-car-controller/psa/connected_car_api/models/vehicle.py b/psa_car_controller/psa/connected_car_api/models/vehicle.py similarity index 100% rename from psa-car-controller/psa/connected_car_api/models/vehicle.py rename to psa_car_controller/psa/connected_car_api/models/vehicle.py diff --git a/psa-car-controller/psa/connected_car_api/models/vehicle_engine.py b/psa_car_controller/psa/connected_car_api/models/vehicle_engine.py similarity index 100% rename from psa-car-controller/psa/connected_car_api/models/vehicle_engine.py rename to psa_car_controller/psa/connected_car_api/models/vehicle_engine.py diff --git a/psa-car-controller/psa/connected_car_api/models/vehicle_links.py b/psa_car_controller/psa/connected_car_api/models/vehicle_links.py similarity index 100% rename from psa-car-controller/psa/connected_car_api/models/vehicle_links.py rename to psa_car_controller/psa/connected_car_api/models/vehicle_links.py diff --git a/psa-car-controller/psa/connected_car_api/models/vehicle_odometer.py b/psa_car_controller/psa/connected_car_api/models/vehicle_odometer.py similarity index 100% rename from psa-car-controller/psa/connected_car_api/models/vehicle_odometer.py rename to psa_car_controller/psa/connected_car_api/models/vehicle_odometer.py diff --git a/psa-car-controller/psa/connected_car_api/models/vehicles.py b/psa_car_controller/psa/connected_car_api/models/vehicles.py similarity index 100% rename from psa-car-controller/psa/connected_car_api/models/vehicles.py rename to psa_car_controller/psa/connected_car_api/models/vehicles.py diff --git a/psa-car-controller/psa/connected_car_api/models/vehicles_embedded.py b/psa_car_controller/psa/connected_car_api/models/vehicles_embedded.py similarity index 100% rename from psa-car-controller/psa/connected_car_api/models/vehicles_embedded.py rename to psa_car_controller/psa/connected_car_api/models/vehicles_embedded.py diff --git a/psa-car-controller/psa/connected_car_api/models/way_points.py b/psa_car_controller/psa/connected_car_api/models/way_points.py similarity index 100% rename from psa-car-controller/psa/connected_car_api/models/way_points.py rename to psa_car_controller/psa/connected_car_api/models/way_points.py diff --git a/psa-car-controller/psa/connected_car_api/models/way_points_embedded.py b/psa_car_controller/psa/connected_car_api/models/way_points_embedded.py similarity index 100% rename from psa-car-controller/psa/connected_car_api/models/way_points_embedded.py rename to psa_car_controller/psa/connected_car_api/models/way_points_embedded.py diff --git a/psa-car-controller/psa/connected_car_api/models/x_error.py b/psa_car_controller/psa/connected_car_api/models/x_error.py similarity index 100% rename from psa-car-controller/psa/connected_car_api/models/x_error.py rename to psa_car_controller/psa/connected_car_api/models/x_error.py diff --git a/psa-car-controller/psa/connected_car_api/models/zone_monitor_trigger.py b/psa_car_controller/psa/connected_car_api/models/zone_monitor_trigger.py similarity index 100% rename from psa-car-controller/psa/connected_car_api/models/zone_monitor_trigger.py rename to psa_car_controller/psa/connected_car_api/models/zone_monitor_trigger.py diff --git a/psa-car-controller/psa/connected_car_api/models/zone_trigger.py b/psa_car_controller/psa/connected_car_api/models/zone_trigger.py similarity index 100% rename from psa-car-controller/psa/connected_car_api/models/zone_trigger.py rename to psa_car_controller/psa/connected_car_api/models/zone_trigger.py diff --git a/psa-car-controller/psa/connected_car_api/models/zone_trigger_place.py b/psa_car_controller/psa/connected_car_api/models/zone_trigger_place.py similarity index 100% rename from psa-car-controller/psa/connected_car_api/models/zone_trigger_place.py rename to psa_car_controller/psa/connected_car_api/models/zone_trigger_place.py diff --git a/psa-car-controller/psa/connected_car_api/models/zone_trigger_place_center.py b/psa_car_controller/psa/connected_car_api/models/zone_trigger_place_center.py similarity index 100% rename from psa-car-controller/psa/connected_car_api/models/zone_trigger_place_center.py rename to psa_car_controller/psa/connected_car_api/models/zone_trigger_place_center.py diff --git a/psa-car-controller/psa/connected_car_api/rest.py b/psa_car_controller/psa/connected_car_api/rest.py similarity index 100% rename from psa-car-controller/psa/connected_car_api/rest.py rename to psa_car_controller/psa/connected_car_api/rest.py diff --git a/psa-car-controller/psa/constants.py b/psa_car_controller/psa/constants.py similarity index 100% rename from psa-car-controller/psa/constants.py rename to psa_car_controller/psa/constants.py diff --git a/psa-car-controller/psa/mqtt_request.py b/psa_car_controller/psa/mqtt_request.py similarity index 94% rename from psa-car-controller/psa/mqtt_request.py rename to psa_car_controller/psa/mqtt_request.py index fc7e85a..1f2a0cc 100644 --- a/psa-car-controller/psa/mqtt_request.py +++ b/psa_car_controller/psa/mqtt_request.py @@ -2,7 +2,7 @@ import json from datetime import datetime, timedelta from uuid import uuid4 -from psa.constants import PSA_DATE_FORMAT, PSA_CORRELATION_DATE_FORMAT +from psa_car_controller.psa.constants import PSA_DATE_FORMAT, PSA_CORRELATION_DATE_FORMAT MQTT_REQ_TOPIC = "psa/RemoteServices/from/cid/" diff --git a/psa-car-controller/psa/oauth.py b/psa_car_controller/psa/oauth.py similarity index 94% rename from psa-car-controller/psa/oauth.py rename to psa_car_controller/psa/oauth.py index 2f46a46..7d7d03e 100644 --- a/psa-car-controller/psa/oauth.py +++ b/psa_car_controller/psa/oauth.py @@ -5,10 +5,10 @@ from typing import Optional from oauth2_client.credentials_manager import CredentialManager, ServiceInformation from requests import Response, RequestException -from common.utils import rate_limit -from psa import connected_car_api -from psa.connected_car_api import ApiClient -from psa.connected_car_api.rest import ApiException +from psa_car_controller.common.utils import rate_limit +from psa_car_controller.psa import connected_car_api +from psa_car_controller.psa.connected_car_api import ApiClient +from psa_car_controller.psa.connected_car_api.rest import ApiException logger = logging.getLogger(__name__) diff --git a/psa-car-controller/psacc/__init__.py b/psa_car_controller/psa/otp/__init__.py similarity index 100% rename from psa-car-controller/psacc/__init__.py rename to psa_car_controller/psa/otp/__init__.py diff --git a/psa-car-controller/psa/otp/load.py b/psa_car_controller/psa/otp/load.py similarity index 100% rename from psa-car-controller/psa/otp/load.py rename to psa_car_controller/psa/otp/load.py diff --git a/psa-car-controller/psa/otp/oaep.py b/psa_car_controller/psa/otp/oaep.py similarity index 100% rename from psa-car-controller/psa/otp/oaep.py rename to psa_car_controller/psa/otp/oaep.py diff --git a/psa-car-controller/psa/otp/otp.py b/psa_car_controller/psa/otp/otp.py similarity index 99% rename from psa-car-controller/psa/otp/otp.py rename to psa_car_controller/psa/otp/otp.py index a815948..3e9ef02 100644 --- a/psa-car-controller/psa/otp/otp.py +++ b/psa_car_controller/psa/otp/otp.py @@ -305,7 +305,7 @@ def save_otp(obj, filename="otp.bin"): class RenameUnpickler(pickle.Unpickler): def find_class(self, module, name): - renamed_module = "psa." + module.lower() + renamed_module = "psa_car_controller." + module.lower() return super().find_class(renamed_module, name) diff --git a/psa-car-controller/psa/otp/tokenizer.py b/psa_car_controller/psa/otp/tokenizer.py similarity index 100% rename from psa-car-controller/psa/otp/tokenizer.py rename to psa_car_controller/psa/otp/tokenizer.py diff --git a/psa-car-controller/psacc/application/__init__.py b/psa_car_controller/psa/setup/__init__.py similarity index 100% rename from psa-car-controller/psacc/application/__init__.py rename to psa_car_controller/psa/setup/__init__.py diff --git a/psa-car-controller/psa/setup/apk_parser.py b/psa_car_controller/psa/setup/apk_parser.py similarity index 97% rename from psa-car-controller/psa/setup/apk_parser.py rename to psa_car_controller/psa/setup/apk_parser.py index 9f05654..42194cd 100644 --- a/psa-car-controller/psa/setup/apk_parser.py +++ b/psa_car_controller/psa/setup/apk_parser.py @@ -6,7 +6,7 @@ from cryptography.hazmat.backends import default_backend from cryptography.hazmat.primitives import serialization from cryptography.hazmat.primitives.serialization import pkcs12 -from psa.constants import BRAND +from psa_car_controller.psa.constants import BRAND class ApkParser: diff --git a/psa-car-controller/psa/setup/app_decoder.py b/psa_car_controller/psa/setup/app_decoder.py similarity index 92% rename from psa-car-controller/psa/setup/app_decoder.py rename to psa_car_controller/psa/setup/app_decoder.py index 533a33f..d66be6f 100755 --- a/psa-car-controller/psa/setup/app_decoder.py +++ b/psa_car_controller/psa/setup/app_decoder.py @@ -5,11 +5,11 @@ import traceback import requests -from psa.constants import BRAND -from psa.setup.apk_parser import ApkParser -from psa.setup.github import urlretrieve_from_github -from psacc.application.psa_client import PSAClient -from psacc.application.charge_control import ChargeControl, ChargeControls +from psa_car_controller.psa.constants import BRAND +from psa_car_controller.psa.setup.apk_parser import ApkParser +from psa_car_controller.psa.setup.github import urlretrieve_from_github +from psa_car_controller.psacc.application.psa_client import PSAClient +from psa_car_controller.psacc.application.charge_control import ChargeControl, ChargeControls logger = logging.getLogger(__name__) diff --git a/psa-car-controller/psa/setup/github.py b/psa_car_controller/psa/setup/github.py similarity index 100% rename from psa-car-controller/psa/setup/github.py rename to psa_car_controller/psa/setup/github.py diff --git a/psa-car-controller/psacc/model/__init__.py b/psa_car_controller/psacc/__init__.py similarity index 100% rename from psa-car-controller/psacc/model/__init__.py rename to psa_car_controller/psacc/__init__.py diff --git a/psa-car-controller/web/__init__.py b/psa_car_controller/psacc/application/__init__.py similarity index 100% rename from psa-car-controller/web/__init__.py rename to psa_car_controller/psacc/application/__init__.py diff --git a/psa-car-controller/psacc/application/abrp.py b/psa_car_controller/psacc/application/abrp.py similarity index 97% rename from psa-car-controller/psacc/application/abrp.py rename to psa_car_controller/psacc/application/abrp.py index c823dbb..f6ed7ad 100644 --- a/psa-car-controller/psacc/application/abrp.py +++ b/psa_car_controller/psacc/application/abrp.py @@ -5,7 +5,7 @@ from json.decoder import JSONDecodeError import requests -from psacc.model.car import Car +from psa_car_controller.psacc.model.car import Car logger = logging.getLogger(__name__) diff --git a/psa-car-controller/psacc/application/battery_charge_curve.py b/psa_car_controller/psacc/application/battery_charge_curve.py similarity index 90% rename from psa-car-controller/psacc/application/battery_charge_curve.py rename to psa_car_controller/psacc/application/battery_charge_curve.py index 78c8f92..5037e6a 100644 --- a/psa-car-controller/psacc/application/battery_charge_curve.py +++ b/psa_car_controller/psacc/application/battery_charge_curve.py @@ -2,10 +2,10 @@ from statistics import mean from typing import List -from psacc.model.battery_curve import BatteryCurveDto -from psacc.model.car import Car -from psacc.model.charge import Charge -from psacc.repository.db import Database +from psa_car_controller.psacc.model.battery_curve import BatteryCurveDto +from psa_car_controller.psacc.model.car import Car +from psa_car_controller.psacc.model.charge import Charge +from psa_car_controller.psacc.repository.db import Database class BatteryChargeCurve: diff --git a/psa-car-controller/psacc/application/psa_car_controller.py b/psa_car_controller/psacc/application/car_controller.py similarity index 93% rename from psa-car-controller/psacc/application/psa_car_controller.py rename to psa_car_controller/psacc/application/car_controller.py index b209895..6638bc1 100644 --- a/psa-car-controller/psacc/application/psa_car_controller.py +++ b/psa_car_controller/psacc/application/car_controller.py @@ -7,11 +7,11 @@ from oauth2_client.credentials_manager import OAuthError from .charge_control import ChargeControls from .charging import Charging -from psacc.repository.config_repository import ConfigRepository -from psacc.utils.utils import Singleton +from psa_car_controller.psacc.repository.config_repository import ConfigRepository +from psa_car_controller.psacc.utils.utils import Singleton from .psa_client import PSAClient -from common.mylogger import logger, my_logger -from psa.otp.otp import CONFIG_NAME as OTP_CONFIG_NAME, ConfigException +from psa_car_controller.common.mylogger import logger, my_logger +from psa_car_controller.psa.otp.otp import CONFIG_NAME as OTP_CONFIG_NAME, ConfigException DEFAULT_NAME = "config.json" @@ -69,6 +69,7 @@ class PSACarController(metaclass=Singleton): if path.isfile(self.config_name): self.myp = PSAClient.load_config(name=self.config_name) elif self.args.web_conf: + logger.error("Bad config") self.is_good = False return False else: diff --git a/psa-car-controller/psacc/application/charge_control.py b/psa_car_controller/psacc/application/charge_control.py similarity index 97% rename from psa-car-controller/psacc/application/charge_control.py rename to psa_car_controller/psacc/application/charge_control.py index 3135213..e9da0d6 100644 --- a/psa-car-controller/psacc/application/charge_control.py +++ b/psa_car_controller/psacc/application/charge_control.py @@ -8,8 +8,8 @@ from time import sleep import pytz -from psa.constants import DISCONNECTED, INPROGRESS, FINISHED -from common.utils import RateLimitException +from psa_car_controller.psa.constants import DISCONNECTED, INPROGRESS, FINISHED +from psa_car_controller.common.utils import RateLimitException from .psa_client import PSAClient logger = logging.getLogger(__name__) diff --git a/psa-car-controller/psacc/application/charging.py b/psa_car_controller/psacc/application/charging.py similarity index 96% rename from psa-car-controller/psacc/application/charging.py rename to psa_car_controller/psacc/application/charging.py index af4454a..d07a05e 100644 --- a/psa-car-controller/psacc/application/charging.py +++ b/psa_car_controller/psacc/application/charging.py @@ -7,8 +7,8 @@ from typing import List from .battery_charge_curve import BatteryChargeCurve from .ecomix import Ecomix -from psacc.repository.config_repository import ElectricityPriceConfig -from psacc.repository.db import Database +from psa_car_controller.psacc.repository.config_repository import ElectricityPriceConfig +from psa_car_controller.psacc.repository.db import Database from ..model.car import Car from ..model.charge import Charge diff --git a/psa-car-controller/psacc/application/ecomix.py b/psa_car_controller/psacc/application/ecomix.py similarity index 100% rename from psa-car-controller/psacc/application/ecomix.py rename to psa_car_controller/psacc/application/ecomix.py diff --git a/psa-car-controller/psacc/application/psa_client.py b/psa_car_controller/psacc/application/psa_client.py similarity index 92% rename from psa-car-controller/psacc/application/psa_client.py rename to psa_car_controller/psacc/application/psa_client.py index 46efa1f..55478e7 100644 --- a/psa-car-controller/psacc/application/psa_client.py +++ b/psa_car_controller/psacc/application/psa_client.py @@ -9,19 +9,19 @@ from time import sleep from oauth2_client.credentials_manager import ServiceInformation from urllib3.exceptions import InvalidHeader -from psa.connected_car_api.api.vehicles_api import VehiclesApi -from psa.connected_car_api.rest import ApiException -from psacc.model.car import Cars, Car -from .charging import Charging -from psa.AccountInformation import AccountInformation -from psa.RemoteClient import RemoteClient -from psa.RemoteCredentials import RemoteCredentials -from psa.oauth import OpenIdCredentialManager, Oauth2PSACCApiConfig, OauthAPIClient +from psa_car_controller.psa.connected_car_api.api.vehicles_api import VehiclesApi +from psa_car_controller.psa.connected_car_api.rest import ApiException +from psa_car_controller.psacc.model.car import Cars, Car +from psa_car_controller.psacc.application.charging import Charging +from psa_car_controller.psa.AccountInformation import AccountInformation +from psa_car_controller.psa.RemoteClient import RemoteClient +from psa_car_controller.psa.RemoteCredentials import RemoteCredentials +from psa_car_controller.psa.oauth import OpenIdCredentialManager, Oauth2PSACCApiConfig, OauthAPIClient from .ecomix import Ecomix -from psa.constants import realm_info, AUTHORIZE_SERVICE +from psa_car_controller.psa.constants import realm_info, AUTHORIZE_SERVICE from .abrp import Abrp -from psacc.repository.db import Database +from psa_car_controller.psacc.repository.db import Database SCOPE = ['openid profile'] CARS_FILE = "cars.json" diff --git a/psa-car-controller/psacc/application/trip_parser.py b/psa_car_controller/psacc/application/trip_parser.py similarity index 98% rename from psa-car-controller/psacc/application/trip_parser.py rename to psa_car_controller/psacc/application/trip_parser.py index 466df0d..6b066b3 100644 --- a/psa-car-controller/psacc/application/trip_parser.py +++ b/psa_car_controller/psacc/application/trip_parser.py @@ -1,6 +1,6 @@ import logging from collections.abc import Callable -from psacc.model.car import Car +from psa_car_controller.psacc.model.car import Car LEVEL = 5 diff --git a/psa-car-controller/web/view/__init__.py b/psa_car_controller/psacc/model/__init__.py similarity index 100% rename from psa-car-controller/web/view/__init__.py rename to psa_car_controller/psacc/model/__init__.py diff --git a/psa-car-controller/psacc/model/battery_curve.py b/psa_car_controller/psacc/model/battery_curve.py similarity index 100% rename from psa-car-controller/psacc/model/battery_curve.py rename to psa_car_controller/psacc/model/battery_curve.py diff --git a/psa-car-controller/psacc/model/car.py b/psa_car_controller/psacc/model/car.py similarity index 100% rename from psa-car-controller/psacc/model/car.py rename to psa_car_controller/psacc/model/car.py diff --git a/psa-car-controller/psacc/model/car_model.py b/psa_car_controller/psacc/model/car_model.py similarity index 100% rename from psa-car-controller/psacc/model/car_model.py rename to psa_car_controller/psacc/model/car_model.py diff --git a/psa-car-controller/psacc/model/car_status.py b/psa_car_controller/psacc/model/car_status.py similarity index 74% rename from psa-car-controller/psacc/model/car_status.py rename to psa_car_controller/psacc/model/car_status.py index c62a754..a399750 100644 --- a/psa-car-controller/psacc/model/car_status.py +++ b/psa_car_controller/psacc/model/car_status.py @@ -1,13 +1,13 @@ import logging -from psa.connected_car_api.models.energy import Energy -from psa.connected_car_api.models.energy_charging import EnergyCharging -from psa.connected_car_api.models.geometry import Geometry -from psa.connected_car_api.models.kinetic import Kinetic -from psa.connected_car_api.models.position import Position -from psa.connected_car_api.models.position_properties import PositionProperties -from psa.connected_car_api.models.status import Status -from psa.connected_car_api.models.vehicle_odometer import VehicleOdometer +from psa_car_controller.psa.connected_car_api.models.energy import Energy +from psa_car_controller.psa.connected_car_api.models.energy_charging import EnergyCharging +from psa_car_controller.psa.connected_car_api.models.geometry import Geometry +from psa_car_controller.psa.connected_car_api.models.kinetic import Kinetic +from psa_car_controller.psa.connected_car_api.models.position import Position +from psa_car_controller.psa.connected_car_api.models.position_properties import PositionProperties +from psa_car_controller.psa.connected_car_api.models.status import Status +from psa_car_controller.psa.connected_car_api.models.vehicle_odometer import VehicleOdometer logger = logging.getLogger(__name__) diff --git a/psa-car-controller/psacc/model/charge.py b/psa_car_controller/psacc/model/charge.py similarity index 100% rename from psa-car-controller/psacc/model/charge.py rename to psa_car_controller/psacc/model/charge.py diff --git a/psa-car-controller/psacc/model/trip.py b/psa_car_controller/psacc/model/trip.py similarity index 100% rename from psa-car-controller/psacc/model/trip.py rename to psa_car_controller/psacc/model/trip.py diff --git a/psa-car-controller/psacc/repository/car_model.py b/psa_car_controller/psacc/repository/car_model.py similarity index 82% rename from psa-car-controller/psacc/repository/car_model.py rename to psa_car_controller/psacc/repository/car_model.py index b4e3114..b63be23 100644 --- a/psa-car-controller/psacc/repository/car_model.py +++ b/psa_car_controller/psacc/repository/car_model.py @@ -4,8 +4,8 @@ import os import ruamel.yaml from typing import List -from psacc.model.car_model import ElecModel, CarModel, DEFAULT_BATTERY_POWER, DEFAULT_FUEL_CAPACITY -from psacc.utils.utils import Singleton +from psa_car_controller.psacc.model.car_model import ElecModel, CarModel, DEFAULT_BATTERY_POWER, DEFAULT_FUEL_CAPACITY +from psa_car_controller.psacc.utils.utils import Singleton MODELS_FILE = os.path.dirname(os.path.realpath(__file__)) + "/../resources/car_models.yml" logger = logging.getLogger(__name__) @@ -13,7 +13,7 @@ logger = logging.getLogger(__name__) class CarModelRepository(metaclass=Singleton): def __init__(self): - with open(MODELS_FILE, "r") as f: + with open(MODELS_FILE, "r", encoding="utf-8") as f: models = f.read() yaml = ruamel.yaml.YAML() yaml.register_class(ElecModel) diff --git a/psa-car-controller/psacc/repository/config_repository.py b/psa_car_controller/psacc/repository/config_repository.py similarity index 97% rename from psa-car-controller/psacc/repository/config_repository.py rename to psa_car_controller/psacc/repository/config_repository.py index 21deb96..31fe3fd 100644 --- a/psa-car-controller/psacc/repository/config_repository.py +++ b/psa_car_controller/psacc/repository/config_repository.py @@ -7,8 +7,8 @@ from configupdater import ConfigUpdater from pydantic import BaseModel from typing import List -from psacc.application.battery_charge_curve import BatteryChargeCurve -from psacc.model.charge import Charge +from psa_car_controller.psacc.application.battery_charge_curve import BatteryChargeCurve +from psa_car_controller.psacc.model.charge import Charge logger = logging.getLogger(__name__) @@ -182,7 +182,7 @@ class ConfigRepository(BaseModel): name = CONFIG_FILENAME config_to_write = ConfigRepository.get_default_config() self.config_dto_to_config_file(config_to_write) - ConfigRepository._write(name, config_to_write) + self._write(name, config_to_write) @staticmethod def _write(name, config): diff --git a/psa-car-controller/psacc/repository/db.py b/psa_car_controller/psacc/repository/db.py similarity index 90% rename from psa-car-controller/psacc/repository/db.py rename to psa_car_controller/psacc/repository/db.py index 6969e21..2b2eb84 100644 --- a/psa-car-controller/psacc/repository/db.py +++ b/psa_car_controller/psacc/repository/db.py @@ -1,5 +1,4 @@ import logging -import sys import sqlite3 from datetime import datetime from threading import Lock @@ -12,9 +11,10 @@ import requests from geojson import Feature, Point, FeatureCollection from geojson import dumps as geo_dumps -from psacc.model.battery_curve import BatteryCurveDto -from psacc.model.charge import Charge -from psacc.utils.utils import get_temp +from psa_car_controller.common import utils +from psa_car_controller.psacc.model.battery_curve import BatteryCurveDto +from psa_car_controller.psacc.model.charge import Charge +from psa_car_controller.psacc.utils.utils import get_temp logger = logging.getLogger(__name__) @@ -30,10 +30,6 @@ def convert_sql_res(rows): DATE_FORMAT = "%Y-%m-%d %H:%M:%S+00:00" -def new_convert_datetime_from_string(string): - return datetime.fromisoformat(string) - - def dict_key_to_lower_case(**kwargs) -> dict: return dict((k.lower(), v) for k, v in kwargs.items()) @@ -65,10 +61,7 @@ class Database: @staticmethod def convert_datetime_from_string(string): - try: - return datetime.strptime(string, DATE_FORMAT).replace(tzinfo=pytz.UTC) - except ValueError: - return datetime.strptime(string.replace("T", " "), DATE_FORMAT).replace(tzinfo=pytz.UTC) + return datetime.fromisoformat(string) @staticmethod def convert_datetime_from_bytes(bytes_string): @@ -84,13 +77,10 @@ class Database: @staticmethod def backup(conn): - if sys.version_info < (3, 7): - logger.warning("Can't do database backup, please upgrade to python 3.7") - else: - filename = f"info_backup_{datetime.now()}.db".replace(":", "_") - back_conn = sqlite3.connect(filename) - conn.backup(back_conn) - back_conn.close() + filename = f"info_backup_{datetime.now()}.db".replace(":", "_") + back_conn = sqlite3.connect(filename) + conn.backup(back_conn) + back_conn.close() @staticmethod def init_db(conn): @@ -126,8 +116,6 @@ class Database: conn.commit() conn.execute("VACUUM;") conn.commit() - if sys.version_info >= (3, 7): - Database.convert_datetime_from_string = new_convert_datetime_from_string sqlite3.register_converter("DATETIME", Database.convert_datetime_from_bytes) sqlite3.register_adapter(datetime, Database.convert_datetime_to_string) Database.db_initialized = True @@ -211,13 +199,7 @@ class Database: if nb_res > 0: logger.debug("add altitude for %s positions point", nb_null) nb_null -= nb_res - locations_str = "" - for line in res: - locations_str += str(line[0]) + "," + str(line[1]) + "|" - locations_str = locations_str[:-1] - res = requests.get("https://api.opentopodata.org/v1/srtm30m", - params={"locations": locations_str}) - data = res.json()["results"] + data = utils.get_positions(res) for line in data: conn.execute("UPDATE position SET altitude=? WHERE latitude=? and longitude=?", (line["elevation"], line["location"]["lat"], line["location"]["lng"])) diff --git a/psa-car-controller/psacc/repository/trips.py b/psa_car_controller/psacc/repository/trips.py similarity index 95% rename from psa-car-controller/psacc/repository/trips.py rename to psa_car_controller/psacc/repository/trips.py index 928e877..63aebe8 100644 --- a/psa-car-controller/psacc/repository/trips.py +++ b/psa_car_controller/psacc/repository/trips.py @@ -3,11 +3,11 @@ from typing import Dict from geojson import FeatureCollection -from psacc.application.trip_parser import TripParser +from psa_car_controller.psacc.application.trip_parser import TripParser -from psacc.model.trip import Trip -from psacc.model.car import Cars -from psacc.repository.db import Database +from psa_car_controller.psacc.model.trip import Trip +from psa_car_controller.psacc.model.car import Cars +from psa_car_controller.psacc.repository.db import Database logger = logging.getLogger(__name__) @@ -37,8 +37,8 @@ class Trips(list): logger.debugv("trip discarded") return False - @staticmethod - def get_trips(vehicles_list: Cars) -> Dict[str, "Trips"]: # noqa: MC0001 + @staticmethod # noqa: MC0001 + def get_trips(vehicles_list: Cars) -> Dict[str, "Trips"]: # pylint: disable=too-many-locals,too-many-statements,too-many-nested-blocks,too-many-branches conn = Database.get_db() vehicles = conn.execute("SELECT DISTINCT vin FROM position;").fetchall() diff --git a/psa-car-controller/psacc/resources/car_models.yml b/psa_car_controller/psacc/resources/car_models.yml similarity index 100% rename from psa-car-controller/psacc/resources/car_models.yml rename to psa_car_controller/psacc/resources/car_models.yml diff --git a/psa-car-controller/psacc/utils/utils.py b/psa_car_controller/psacc/utils/utils.py similarity index 100% rename from psa-car-controller/psacc/utils/utils.py rename to psa_car_controller/psacc/utils/utils.py diff --git a/psa_car_controller/web/__init__.py b/psa_car_controller/web/__init__.py new file mode 100644 index 0000000..aa551fb --- /dev/null +++ b/psa_car_controller/web/__init__.py @@ -0,0 +1 @@ +from . import app diff --git a/psa-car-controller/web/app.py b/psa_car_controller/web/app.py similarity index 93% rename from psa-car-controller/web/app.py rename to psa_car_controller/web/app.py index 167fcda..8f7cdf7 100644 --- a/psa-car-controller/web/app.py +++ b/psa_car_controller/web/app.py @@ -5,14 +5,14 @@ from flask import Flask from werkzeug import run_simple from werkzeug.middleware.proxy_fix import ProxyFix -from web.dash_custom import DashCustom +from psa_car_controller.web.dash_custom import DashCustom try: from werkzeug.middleware.dispatcher import DispatcherMiddleware except ImportError: from werkzeug import DispatcherMiddleware -from common.mylogger import logger, file_handler +from psa_car_controller.common.mylogger import logger, file_handler import importlib # pylint: disable=invalid-name @@ -45,7 +45,7 @@ def start_app(*args, **kwargs): def config_flask(title, base_path, debug: bool, host, port, reloader=False, # pylint: disable=too-many-arguments - unminified=False, view="web.view.views"): + unminified=False, view="psa_car_controller.web.view.views"): global app, dash_app reload_view = app is not None app = Flask(__name__) diff --git a/psa-car-controller/web/assets/clientside.js b/psa_car_controller/web/assets/clientside.js similarity index 100% rename from psa-car-controller/web/assets/clientside.js rename to psa_car_controller/web/assets/clientside.js diff --git a/psa-car-controller/web/assets/images/battery-charge-line.svg b/psa_car_controller/web/assets/images/battery-charge-line.svg similarity index 100% rename from psa-car-controller/web/assets/images/battery-charge-line.svg rename to psa_car_controller/web/assets/images/battery-charge-line.svg diff --git a/psa-car-controller/web/assets/images/battery-charge.svg b/psa_car_controller/web/assets/images/battery-charge.svg similarity index 100% rename from psa-car-controller/web/assets/images/battery-charge.svg rename to psa_car_controller/web/assets/images/battery-charge.svg diff --git a/psa-car-controller/web/assets/images/consumption.svg b/psa_car_controller/web/assets/images/consumption.svg similarity index 100% rename from psa-car-controller/web/assets/images/consumption.svg rename to psa_car_controller/web/assets/images/consumption.svg diff --git a/psa-car-controller/web/assets/images/electricity bill.svg b/psa_car_controller/web/assets/images/electricity bill.svg similarity index 100% rename from psa-car-controller/web/assets/images/electricity bill.svg rename to psa_car_controller/web/assets/images/electricity bill.svg diff --git a/psa-car-controller/web/assets/images/mileage.svg b/psa_car_controller/web/assets/images/mileage.svg similarity index 100% rename from psa-car-controller/web/assets/images/mileage.svg rename to psa_car_controller/web/assets/images/mileage.svg diff --git a/psa-car-controller/web/assets/images/pollution.svg b/psa_car_controller/web/assets/images/pollution.svg similarity index 100% rename from psa-car-controller/web/assets/images/pollution.svg rename to psa_car_controller/web/assets/images/pollution.svg diff --git a/psa-car-controller/web/assets/images/settings.svg b/psa_car_controller/web/assets/images/settings.svg similarity index 100% rename from psa-car-controller/web/assets/images/settings.svg rename to psa_car_controller/web/assets/images/settings.svg diff --git a/psa-car-controller/web/assets/images/sync.svg b/psa_car_controller/web/assets/images/sync.svg similarity index 100% rename from psa-car-controller/web/assets/images/sync.svg rename to psa_car_controller/web/assets/images/sync.svg diff --git a/psa-car-controller/web/assets/sprites/osm-liberty.json b/psa_car_controller/web/assets/sprites/osm-liberty.json similarity index 100% rename from psa-car-controller/web/assets/sprites/osm-liberty.json rename to psa_car_controller/web/assets/sprites/osm-liberty.json diff --git a/psa-car-controller/web/assets/sprites/osm-liberty.png b/psa_car_controller/web/assets/sprites/osm-liberty.png similarity index 100% rename from psa-car-controller/web/assets/sprites/osm-liberty.png rename to psa_car_controller/web/assets/sprites/osm-liberty.png diff --git a/psa-car-controller/web/assets/sprites/osm-liberty@2x.json b/psa_car_controller/web/assets/sprites/osm-liberty@2x.json similarity index 100% rename from psa-car-controller/web/assets/sprites/osm-liberty@2x.json rename to psa_car_controller/web/assets/sprites/osm-liberty@2x.json diff --git a/psa-car-controller/web/assets/sprites/osm-liberty@2x.png b/psa_car_controller/web/assets/sprites/osm-liberty@2x.png similarity index 100% rename from psa-car-controller/web/assets/sprites/osm-liberty@2x.png rename to psa_car_controller/web/assets/sprites/osm-liberty@2x.png diff --git a/psa-car-controller/web/assets/style.json b/psa_car_controller/web/assets/style.json similarity index 100% rename from psa-car-controller/web/assets/style.json rename to psa_car_controller/web/assets/style.json diff --git a/psa-car-controller/web/dash_custom.py b/psa_car_controller/web/dash_custom.py similarity index 100% rename from psa-car-controller/web/dash_custom.py rename to psa_car_controller/web/dash_custom.py diff --git a/psa-car-controller/web/figures.py b/psa_car_controller/web/figures.py similarity index 96% rename from psa-car-controller/web/figures.py rename to psa_car_controller/web/figures.py index 5cbdb1a..4bb0986 100644 --- a/psa-car-controller/web/figures.py +++ b/psa_car_controller/web/figures.py @@ -8,13 +8,13 @@ import plotly.graph_objects as go from dash.dash_table.Format import Scheme, Symbol, Format from dash.dcc import Graph -from psacc.application.charging import Charging -from psacc.model.car import Car -from psacc.repository.trips import Trip -from psacc.repository.db import Database +from psa_car_controller.psacc.application.charging import Charging +from psa_car_controller.psacc.model.car import Car +from psa_car_controller.psacc.repository.trips import Trip +from psa_car_controller.psacc.repository.db import Database # pylint: disable=invalid-name -from web.tools.utils import card_value_div, dash_date_to_datetime +from psa_car_controller.web.tools.utils import card_value_div, dash_date_to_datetime ERROR_DIV = dbc.Alert("No data to show, there is probably no trips recorded yet", color="danger") PADDING_TOP = {"padding-top": "1em"} diff --git a/psa-car-controller/web/tools/Button.py b/psa_car_controller/web/tools/Button.py similarity index 96% rename from psa-car-controller/web/tools/Button.py rename to psa_car_controller/web/tools/Button.py index 0dc0147..24f9811 100644 --- a/psa-car-controller/web/tools/Button.py +++ b/psa_car_controller/web/tools/Button.py @@ -3,7 +3,7 @@ from dash import html from dash._utils import create_callback_id from dash.dependencies import Output, Input -from web.app import dash_app +from psa_car_controller.web.app import dash_app RESPONSE = "-response" diff --git a/psa-car-controller/web/tools/Switch.py b/psa_car_controller/web/tools/Switch.py similarity index 90% rename from psa-car-controller/web/tools/Switch.py rename to psa_car_controller/web/tools/Switch.py index ff28ce9..ec80bc2 100644 --- a/psa-car-controller/web/tools/Switch.py +++ b/psa_car_controller/web/tools/Switch.py @@ -3,8 +3,8 @@ import dash_daq as daq from dash import html from dash.dependencies import Input -from web.app import dash_app -from web.tools.Button import Button +from psa_car_controller.web.app import dash_app +from psa_car_controller.web.tools.Button import Button class Switch(Button): diff --git a/psa-car-controller/web/tools/figurefilter.py b/psa_car_controller/web/tools/figurefilter.py similarity index 100% rename from psa-car-controller/web/tools/figurefilter.py rename to psa_car_controller/web/tools/figurefilter.py diff --git a/psa-car-controller/web/tools/utils.py b/psa_car_controller/web/tools/utils.py similarity index 100% rename from psa-car-controller/web/tools/utils.py rename to psa_car_controller/web/tools/utils.py diff --git a/psa_car_controller/web/view/__init__.py b/psa_car_controller/web/view/__init__.py new file mode 100644 index 0000000..e69de29 diff --git a/psa-car-controller/web/view/config_views.py b/psa_car_controller/web/view/config_views.py similarity index 95% rename from psa-car-controller/web/view/config_views.py rename to psa_car_controller/web/view/config_views.py index 57c01e3..ddc1b86 100644 --- a/psa-car-controller/web/view/config_views.py +++ b/psa_car_controller/web/view/config_views.py @@ -4,11 +4,11 @@ from dash import callback_context, html, dcc from dash.exceptions import PreventUpdate from flask import request -from psa.otp.otp import new_otp_session -from psacc.application.psa_car_controller import PSACarController -from psa.setup.app_decoder import firstLaunchConfig -from common.mylogger import LOG_FILE -from web.app import dash_app +from psa_car_controller.psa.otp.otp import new_otp_session +from psa_car_controller.psacc.application.car_controller import PSACarController +from psa_car_controller.psa.setup.app_decoder import firstLaunchConfig +from psa_car_controller.common.mylogger import LOG_FILE +from psa_car_controller.web.app import dash_app import dash_bootstrap_components as dbc from dash.dependencies import Output, Input, State diff --git a/psa-car-controller/web/view/control.py b/psa_car_controller/web/view/control.py similarity index 91% rename from psa-car-controller/web/view/control.py rename to psa_car_controller/web/view/control.py index 84bb761..3d3e562 100644 --- a/psa-car-controller/web/view/control.py +++ b/psa_car_controller/web/view/control.py @@ -3,10 +3,10 @@ import logging import dash_bootstrap_components as dbc from dash import html -from psacc.application.psa_client import PSAClient -from web.tools.Button import Button -from web.tools.Switch import Switch -from web.tools.utils import card_value_div, create_card +from psa_car_controller.psacc.application.psa_client import PSAClient +from psa_car_controller.web.tools.Button import Button +from psa_car_controller.web.tools.Switch import Switch +from psa_car_controller.web.tools.utils import card_value_div, create_card logger = logging.getLogger(__name__) diff --git a/psa-car-controller/web/view/views.py b/psa_car_controller/web/view/views.py similarity index 94% rename from psa-car-controller/web/view/views.py rename to psa_car_controller/web/view/views.py index b593d8a..cd719cf 100644 --- a/psa-car-controller/web/view/views.py +++ b/psa_car_controller/web/view/views.py @@ -9,24 +9,24 @@ from dash.dependencies import Output, Input, State from dash.exceptions import PreventUpdate from flask import jsonify, request, Response as FlaskResponse -from psacc.application.psa_car_controller import PSACarController -from psacc.model.car import Cars, Car -from common.utils import RateLimitException -from psacc.model.charge import Charge +from psa_car_controller.psacc.application.car_controller import PSACarController +from psa_car_controller.psacc.model.car import Cars, Car +from psa_car_controller.common.utils import RateLimitException +from psa_car_controller.psacc.model.charge import Charge -from psacc.repository.trips import Trips +from psa_car_controller.psacc.repository.trips import Trips -from psacc.application.charging import Charging -from web import figures +from psa_car_controller.psacc.application.charging import Charging +from psa_car_controller.web import figures -from web.app import app, dash_app -from psacc.repository.db import Database -from web.tools.utils import diff_dashtable, unix_time_millis, get_marks_from_start_end, create_card -from web.view.config_views import log_layout, config_layout +from psa_car_controller.web.app import app, dash_app +from psa_car_controller.psacc.repository.db import Database +from psa_car_controller.web.tools.utils import diff_dashtable, unix_time_millis, get_marks_from_start_end, create_card +from psa_car_controller.web.view.config_views import log_layout, config_layout # pylint: disable=invalid-name -from web.tools.figurefilter import FigureFilter -from web.view.control import get_control_tabs +from psa_car_controller.web.tools.figurefilter import FigureFilter +from psa_car_controller.web.view.control import get_control_tabs logger = logging.getLogger(__name__) @@ -395,7 +395,8 @@ def serve_layout(): try: - Charging.set_default_price(get_default_car()) + if APP.is_good: + Charging.set_default_price(get_default_car()) Database.set_db_callback(update_trips) update_trips() except (IndexError, TypeError): diff --git a/pyproject.toml b/pyproject.toml index 9be63ab..5b92c6b 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -49,4 +49,4 @@ max_line_length = 120 in-place = true recursive = true aggressive = 3 -exclude = "__main__.py,psa-car-controller/psa/connected_car_api" \ No newline at end of file +exclude = "psa_car_controller/__main__.py,psa_car_controller/psa/connected_car_api" \ No newline at end of file diff --git a/test/data/cars.json b/test/data/cars.json deleted file mode 100644 index 41cfe5c..0000000 --- a/test/data/cars.json +++ /dev/null @@ -1,13 +0,0 @@ -[ - { - "abrp_name": "peugeot:e208:20:50", - "battery_power": 46, - "brand": "Peugeot", - "fuel_capacity": 0, - "label": "e-208", - "max_elec_consumption": 70, - "max_fuel_consumption": 0, - "vehicle_id": "vid", - "vin": "VR3UHZKXZL" - } -] \ No newline at end of file diff --git a/test/data/config.ini b/test/data/config.ini deleted file mode 100644 index 537e577..0000000 --- a/test/data/config.ini +++ /dev/null @@ -1,9 +0,0 @@ -[General] -currency = € - -[Electricity config] -day price = 0.1853 -night price = 0.1353 -night hour start = 22h30 -night hour end = 6h00 - diff --git a/test/data/config.json b/test/data/config.json deleted file mode 100644 index 127e047..0000000 --- a/test/data/config.json +++ /dev/null @@ -1,15 +0,0 @@ -{ - "abrp": { - "token": null - }, - "client_id": "cid", - "client_secret": "csec", - "co2_signal_api": null, - "country_code": "FR", - "customer_id": "AP-ACNT1234", - "proxies": null, - "realm": "clientsB2CPeugeot", - "refresh_token": "aasds-aaa", - "remote_refresh_token": "aa", - "weather_api": null -} \ No newline at end of file diff --git a/test/data/otp_test.bin b/tests/data/otp_test.bin similarity index 100% rename from test/data/otp_test.bin rename to tests/data/otp_test.bin diff --git a/test/test_config.py b/tests/test_config.py similarity index 50% rename from test/test_config.py rename to tests/test_config.py index 3dfdf6b..94e60be 100644 --- a/test/test_config.py +++ b/tests/test_config.py @@ -1,46 +1,49 @@ import os import unittest from configparser import ConfigParser -from unittest.mock import MagicMock +from unittest.mock import patch, Mock, MagicMock -from configupdater import ConfigUpdater +from psa_car_controller.common.mylogger import my_logger -from common.mylogger import my_logger -from psacc.repository.config_repository import ConfigRepository +from psa_car_controller.psacc.repository.config_repository import ConfigRepository class TestUnit(unittest.TestCase): def test_read_config(self): + from psa_car_controller.psacc.repository.config_repository import ConfigRepository config = ConfigRepository.read_config() - def test_read_old_config(self): - old_config = ConfigUpdater() + @patch("psa_car_controller.psacc.repository.config_repository.ConfigRepository._write") + @patch("psa_car_controller.psacc.repository.config_repository.ConfigRepository._read_file") + def test_read_old_config(self, mock_read, mock_write): old_config_str = """[General] currency = € [Electricity config] day price = 42 night price = 0.1 -night hour start = 1h00 +night hour start = 1h00 night hour end = 4h42 """ - ConfigRepository._read_file = MagicMock(return_value=old_config_str) - ConfigRepository._write = MagicMock() + mock_read.return_value = old_config_str conf = ConfigRepository.read_config() conf.write_config(conf) - config_written: ConfigParser = ConfigRepository._write.call_args_list[0][0][1] + config_written: ConfigParser = mock_write.call_args_list[0][0][1] self.assertEqual(config_written["General"]["currency"].value, "€") self.assertEqual(config_written["Electricity config"]["day price"].value, 42) print(config_written) def test_read_non_existent_config(self): - self.assertRaises(FileNotFoundError, lambda :ConfigRepository._read_file("nonexistent.ini")) + from psa_car_controller.psacc.repository.config_repository import ConfigRepository + self.assertRaises(FileNotFoundError, lambda: ConfigRepository._read_file("nonexistent.ini")) def test_read_config_non_existent_config(self): + from psa_car_controller.psacc.repository.config_repository import ConfigRepository result = ConfigRepository.read_config("nonexistent.ini") expected_result = ConfigRepository.config_file_to_dto(ConfigRepository.get_default_config()) - self.assertEqual(result,expected_result) + self.assertEqual(result, expected_result) + if __name__ == '__main__': my_logger(handler_level=os.environ.get("DEBUG_LEVEL", 20)) diff --git a/test/test_unit.py b/tests/test_unit.py similarity index 89% rename from test/test_unit.py rename to tests/test_unit.py index b0cf03c..52884a0 100644 --- a/test/test_unit.py +++ b/tests/test_unit.py @@ -3,32 +3,34 @@ import json import os import unittest from datetime import datetime, timedelta +from unittest.mock import MagicMock import reverse_geocode from pytz import UTC -import psa.connected_car_api +from psa_car_controller import psa +from psa_car_controller.common import utils +from psa_car_controller.common.mylogger import my_logger -from common.mylogger import my_logger -from common.utils import parse_hour, RateLimitException, rate_limit -from psa.otp.otp import load_otp, save_otp -from psa.setup.app_decoder import get_content_from_apk, GITHUB_USER, GITHUB_REPO -from psa.setup.github import github_file_need_to_be_downloaded -from psa.connected_car_api import ApiClient -from psacc.application.charge_control import ChargeControls -from psacc.application.charging import Charging -from psacc.application.ecomix import Ecomix -from psacc.application.psa_client import PSAClient -from psacc.model.car import Car, Cars -from psacc.repository import config_repository -from psacc.repository.car_model import CarModelRepository -from psacc.repository.config_repository import ConfigRepository -from psacc.repository.db import Database -from psacc.repository.trips import Trips -from psacc.utils.utils import get_temp -from utils import DATA_DIR, record_position, latitude, longitude, date0, date1, date2, date3, record_charging, \ +from psa_car_controller.common.utils import parse_hour, RateLimitException, rate_limit +from psa_car_controller.psa.otp.otp import load_otp, save_otp +from psa_car_controller.psa.setup.app_decoder import get_content_from_apk, GITHUB_USER, GITHUB_REPO +from psa_car_controller.psa.setup.github import github_file_need_to_be_downloaded +from psa_car_controller.psa.connected_car_api import ApiClient +from psa_car_controller.psacc.application.charge_control import ChargeControls +from psa_car_controller.psacc.application.charging import Charging +from psa_car_controller.psacc.application.ecomix import Ecomix +from psa_car_controller.psacc.application.psa_client import PSAClient +from psa_car_controller.psacc.model.car import Car, Cars +from psa_car_controller.psacc.repository import config_repository +from psa_car_controller.psacc.repository.car_model import CarModelRepository +from psa_car_controller.psacc.repository.config_repository import ConfigRepository +from psa_car_controller.psacc.repository.db import Database +from psa_car_controller.psacc.repository.trips import Trips +from psa_car_controller.psacc.utils.utils import get_temp +from tests.utils import DATA_DIR, record_position, latitude, longitude, date0, date1, date2, date3, record_charging, \ vehicule_list, get_new_test_db, get_date, date4 -from web.figures import get_figures, get_battery_curve_fig, get_altitude_fig +from psa_car_controller.web.figures import get_figures, get_battery_curve_fig, get_altitude_fig from deepdiff import DeepDiff @@ -167,6 +169,8 @@ class TestUnit(unittest.TestCase): config_repository.CONFIG_FILENAME = DATA_DIR + "config.ini" car = self.vehicule_list[0] record_position() + utils.get_positions = MagicMock( + return_value=[{'dataset': 'srtm30m', 'elevation': 40.0, 'location': {'lat': 47.2183, 'lng': -1.60362}}]) Database.add_altitude_to_db(Database.get_db()) data = json.loads(Database.get_recorded_position()) assert data["features"][1]["geometry"]["coordinates"] == [float(longitude), float(latitude)] @@ -201,7 +205,6 @@ class TestUnit(unittest.TestCase): 'kw': 20.7, 'price': 3.84, 'charging_mode': 'slow'}]) - print() assert get_figures(car) row = {"start_at": date0.strftime('%Y-%m-%dT%H:%M:%S.000Z'), "stop_at": date3.strftime('%Y-%m-%dT%H:%M:%S.000Z'), "start_level": start_level, "end_level": end_level} @@ -246,7 +249,6 @@ class TestUnit(unittest.TestCase): Database.record_position(None, car.vin, 30, latitude, longitude, 22, end, 30, 28, False) trips = Trips.get_trips(self.vehicule_list) res = trips[car.vin].get_trips_as_dict() - print(res) assert compare_dict(res, [{'consumption_km': 6.947368421052632, 'start_at': start, 'consumption_by_temp': None, diff --git a/test/utils.py b/tests/utils.py similarity index 91% rename from test/utils.py rename to tests/utils.py index c20df01..843a4d0 100644 --- a/test/utils.py +++ b/tests/utils.py @@ -5,9 +5,10 @@ from datetime import timedelta, datetime import pytz -from psacc.application.charging import Charging -from psacc.model.car import Cars, Car -from psacc.repository.db import Database + +from psa_car_controller.psacc.application.charging import Charging +from psa_car_controller.psacc.model.car import Cars, Car +from psa_car_controller.psacc.repository.db import Database DATA_DIR = os.path.dirname(os.path.realpath(__file__)) + "/data/" latitude = 47.2183