From eae291d08c50c6ca7671e6793ce81389742f75ee Mon Sep 17 00:00:00 2001 From: Felix Date: Fri, 30 Aug 2024 09:05:32 +0200 Subject: [PATCH 1/7] Update apk_parser.py Change import function to match new androguard version --- psa_car_controller/psa/setup/apk_parser.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/psa_car_controller/psa/setup/apk_parser.py b/psa_car_controller/psa/setup/apk_parser.py index 6a3e3b8c..83b263ad 100644 --- a/psa_car_controller/psa/setup/apk_parser.py +++ b/psa_car_controller/psa/setup/apk_parser.py @@ -2,7 +2,7 @@ import logging import os -from androguard.core.bytecodes.apk import APK +from androguard.core.apk import APK from cryptography.hazmat.backends import default_backend from cryptography.hazmat.primitives import serialization from cryptography.hazmat.primitives.serialization import pkcs12 From fafb34b90e33563820adc8c7bf4b56157109700d Mon Sep 17 00:00:00 2001 From: Felix Date: Fri, 30 Aug 2024 09:06:32 +0200 Subject: [PATCH 2/7] Update pyproject.toml udate androguard --- pyproject.toml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/pyproject.toml b/pyproject.toml index d1874560..f1044497 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -27,7 +27,7 @@ pytz = "^2021.0" argparse = "^1.4.0" geojson = "^2.5.0" reverse-geocode = "^1.4.1" -androguard = "^3.3.5" +androguard = "^4.1.2" pycryptodomex = "^3.9.0" pydantic = "^1.9.0" "ruamel.yaml" = ">=0.15.0" @@ -65,4 +65,4 @@ max_line_length = 120 in-place = true recursive = true aggressive = 3 -exclude = "psa_car_controller/__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" From 7706625a427aac83df33e9a233443afa84ab8878 Mon Sep 17 00:00:00 2001 From: Felix Date: Fri, 30 Aug 2024 09:07:31 +0200 Subject: [PATCH 3/7] Update app_decoder.py --- psa_car_controller/psa/setup/app_decoder.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/psa_car_controller/psa/setup/app_decoder.py b/psa_car_controller/psa/setup/app_decoder.py index 3fcf7977..64b62caa 100755 --- a/psa_car_controller/psa/setup/app_decoder.py +++ b/psa_car_controller/psa/setup/app_decoder.py @@ -14,8 +14,8 @@ logger = logging.getLogger(__name__) -APP_VERSION = "1.33.0" -GITHUB_USER = "flobz" +APP_VERSION = "1.48.1" +GITHUB_USER = "HansUweRempler" #"flobz" temporary replaced till flobz updated his own GITHUB_REPO = "psa_apk" TIMEOUT_IN_S = 10 app = PSACarController() From 830c03b4d9b29a2318b4e2fd43f2e2765d401497 Mon Sep 17 00:00:00 2001 From: Felix Date: Fri, 30 Aug 2024 09:11:45 +0200 Subject: [PATCH 4/7] Update pyproject.toml solve version missmatch --- pyproject.toml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pyproject.toml b/pyproject.toml index f1044497..a3ab208c 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -11,7 +11,7 @@ include = [ ] [tool.poetry.dependencies] -python = ">=3.7.2, <4.0.0" +python = ">=3.9, <4.0.0" paho-mqtt = ">=1.5.0, <2.0.0" dash = ">=2.9.0, <3.0.0" dash-daq = "^0.5.0" From da034c8ec2f818a403f4048a98a0004a0f9e49c5 Mon Sep 17 00:00:00 2001 From: Florian Bezannier Date: Sat, 31 Aug 2024 13:21:31 +0200 Subject: [PATCH 5/7] fix: qa issue --- psa_car_controller/common/mylogger.py | 3 ++- psa_car_controller/psacc/repository/trips.py | 4 ++-- 2 files changed, 4 insertions(+), 3 deletions(-) diff --git a/psa_car_controller/common/mylogger.py b/psa_car_controller/common/mylogger.py index b64666ed..298f7df9 100644 --- a/psa_car_controller/common/mylogger.py +++ b/psa_car_controller/common/mylogger.py @@ -14,11 +14,12 @@ def _log(self, level, # pylint: disable=too-many-arguments,unused-argument exc_info=None, extra=None, stack_info=False, + stacklevel=1, exc_info_debug=False, **kwargs): if exc_info_debug and self.isEnabledFor(logging.DEBUG): exc_info = True - super()._log(level, msg, args, exc_info, extra, stack_info) + super()._log(level, msg, args, exc_info, extra, stack_info, stacklevel) def __new_style_log(self, level, msg, args, exc_info=None, extra=None, # pylint: disable=too-many-arguments stack_info=False, **kwargs): diff --git a/psa_car_controller/psacc/repository/trips.py b/psa_car_controller/psacc/repository/trips.py index f263f4ae..5b621143 100644 --- a/psa_car_controller/psacc/repository/trips.py +++ b/psa_car_controller/psacc/repository/trips.py @@ -49,8 +49,8 @@ def get_speed_average(distance, duration): speed_average = 0 return speed_average - @staticmethod # noqa: MC0001 - def get_trips(vehicles_list: Cars) -> Dict[str, "Trips"]: + @staticmethod + def get_trips(vehicles_list: Cars) -> Dict[str, "Trips"]: # noqa: MC0001 # 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() From 442fbc505ad2e5a82ad3eab6182fb509871cf8d7 Mon Sep 17 00:00:00 2001 From: Florian Bezannier Date: Sat, 31 Aug 2024 13:22:51 +0200 Subject: [PATCH 6/7] feat: compress apk to be under github file size limit --- psa_car_controller/psa/setup/apk_parser.py | 6 ++++-- psa_car_controller/psa/setup/app_decoder.py | 6 +++--- psa_car_controller/psa/setup/github.py | 11 ++++++++--- tests/test_unit.py | 5 ++--- 4 files changed, 17 insertions(+), 11 deletions(-) diff --git a/psa_car_controller/psa/setup/apk_parser.py b/psa_car_controller/psa/setup/apk_parser.py index 83b263ad..053e1bb6 100644 --- a/psa_car_controller/psa/setup/apk_parser.py +++ b/psa_car_controller/psa/setup/apk_parser.py @@ -1,6 +1,6 @@ import json -import logging import os +import sys from androguard.core.apk import APK from cryptography.hazmat.backends import default_backend @@ -9,7 +9,9 @@ from psa_car_controller.psa.constants import BRAND -logging.getLogger("androguard").setLevel(logging.ERROR) +from androguard.core.axml import logger as androguard_logger +androguard_logger.remove() +androguard_logger.add(sys.stderr, level="ERROR") class ApkParser: diff --git a/psa_car_controller/psa/setup/app_decoder.py b/psa_car_controller/psa/setup/app_decoder.py index 64b62caa..eaa495b9 100755 --- a/psa_car_controller/psa/setup/app_decoder.py +++ b/psa_car_controller/psa/setup/app_decoder.py @@ -14,16 +14,16 @@ logger = logging.getLogger(__name__) -APP_VERSION = "1.48.1" -GITHUB_USER = "HansUweRempler" #"flobz" temporary replaced till flobz updated his own +APP_VERSION = "1.48.2" +GITHUB_USER = "flobz" GITHUB_REPO = "psa_apk" TIMEOUT_IN_S = 10 app = PSACarController() def get_content_from_apk(filename: str, country_code: str) -> ApkParser: + urlretrieve_from_github(GITHUB_USER, GITHUB_REPO, "", filename) apk_parser = ApkParser(filename, country_code) - urlretrieve_from_github(GITHUB_USER, GITHUB_REPO, "", apk_parser.filename) apk_parser.retrieve_content_from_apk() return apk_parser diff --git a/psa_car_controller/psa/setup/github.py b/psa_car_controller/psa/setup/github.py index 86ad39fa..b4b98299 100644 --- a/psa_car_controller/psa/setup/github.py +++ b/psa_car_controller/psa/setup/github.py @@ -1,5 +1,7 @@ +import bz2 import logging from hashlib import sha1 +from os import path import requests @@ -36,9 +38,10 @@ def github_file_need_to_be_downloaded(user, repo, directory, filename): def urlretrieve_from_github(user, repo, directory, filename, branch="main"): - if github_file_need_to_be_downloaded(user, repo, directory, filename): - with open(filename, 'wb') as f: - url = "https://github.com/{}/{}/raw/{}/{}{}".format(user, repo, branch, directory, filename) + archive_name = filename + ".bz2" + if github_file_need_to_be_downloaded(user, repo, directory, archive_name) or not path.isfile(filename): + with open(archive_name, 'wb') as f: + url = "https://github.com/{}/{}/raw/{}/{}{}".format(user, repo, branch, directory, archive_name) r = requests.get(url, headers={ "Accept": "application/vnd.github.VERSION.raw" @@ -50,3 +53,5 @@ def urlretrieve_from_github(user, repo, directory, filename, branch="main"): r.raise_for_status() for chunk in r.iter_content(1024): f.write(chunk) + with bz2.BZ2File(archive_name, 'rb') as file, open(filename, 'wb') as out_file: + out_file.write(file.read()) diff --git a/tests/test_unit.py b/tests/test_unit.py index 0faa495d..0d8b41b7 100644 --- a/tests/test_unit.py +++ b/tests/test_unit.py @@ -5,7 +5,6 @@ from datetime import datetime, timedelta from unittest.mock import MagicMock, patch -import pytz import reverse_geocode from dateutil.tz import tzutc from greenery.lego import parse, charclass @@ -337,10 +336,10 @@ def test_parse_apk(self): except FileNotFoundError: pass assert get_content_from_apk(filename, "FR") - assert github_file_need_to_be_downloaded(GITHUB_USER, GITHUB_REPO, "", filename) is False + assert github_file_need_to_be_downloaded(GITHUB_USER, GITHUB_REPO, "", filename + ".bz2") is False def test_file_need_to_be_updated(self): - filename = "mypeugeot.apk" + filename = "mypeugeot.apk.bz2" with open(filename, "w") as f: f.write(" ") assert github_file_need_to_be_downloaded(GITHUB_USER, GITHUB_REPO, "", filename) is True From aae512450bcdf12bb25cebad7719cb908edb8bd0 Mon Sep 17 00:00:00 2001 From: Florian Bezannier Date: Sat, 31 Aug 2024 14:31:10 +0200 Subject: [PATCH 7/7] fix: force numpy v1 --- pyproject.toml | 4 +--- 1 file changed, 1 insertion(+), 3 deletions(-) diff --git a/pyproject.toml b/pyproject.toml index a3ab208c..a01d129b 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -37,9 +37,7 @@ python-dateutil = ">=2.5.3" urllib3 = ">=1.15.1 <2.0.0" importlib-metadata = {version = ">=1.7.0", python = "<3.8"} pandas = "^1.1.5" -numpy = [{version = ">=1.24.0", python = ">=3.11"}, - {version = "<1.26.0", python = "<3.9"}, - {version = "<1.22.0", python = "<3.8"}] +numpy = "^1.24.0" scipy = [{version = ">=1.9.2", python = ">=3.11"}, {version = "<1.11.0", python = "<3.8"}, {version = "<1.8.0", python = "<3.8"}]