From b9cf774b30fc36c8c28858e614199b1ce708e9ae Mon Sep 17 00:00:00 2001 From: Matias Volpe Date: Wed, 9 Jan 2019 10:34:27 -0300 Subject: [PATCH] fix: ipc encoding on Windows for import paths encoded as cp1252 --- mapillary_tools/processing.py | 5 ++++- mapillary_tools/uploader.py | 5 ++++- mapillary_tools/utils.py | 8 ++++++++ 3 files changed, 16 insertions(+), 2 deletions(-) create mode 100644 mapillary_tools/utils.py diff --git a/mapillary_tools/processing.py b/mapillary_tools/processing.py index 53676373..b7b4f5bc 100644 --- a/mapillary_tools/processing.py +++ b/mapillary_tools/processing.py @@ -22,6 +22,7 @@ from tqdm import tqdm from . import ipc from .error import print_error +from .utils import force_decode STATUS_PAIRS = {"success": "failed", "failed": "success" @@ -823,9 +824,11 @@ def create_and_log_process(image, process, status, mapillary_description={}, ver process)) os.remove(log_MAPJson) + decoded_image = force_decode(image) + ipc.send( process, - { 'image': image, 'status': status, 'description': mapillary_description }) + { 'image': decoded_image, 'status': status, 'description': mapillary_description }) def user_properties(user_name, diff --git a/mapillary_tools/uploader.py b/mapillary_tools/uploader.py index d3179b19..1d798fd1 100644 --- a/mapillary_tools/uploader.py +++ b/mapillary_tools/uploader.py @@ -17,6 +17,7 @@ import processing from . import ipc from .error import print_error +from .utils import force_decode if os.getenv("AWS_S3_ENDPOINT", None) is None: MAPILLARY_UPLOAD_URL = "https://d22zcsn13kp53w.cloudfront.net/" @@ -723,10 +724,12 @@ def create_upload_log(filepath, status): if os.path.isfile(upload_opposite_log_filepath): os.remove(upload_opposite_log_filepath) + decoded_filepath = force_decode(filepath) + ipc.send( 'upload', { - 'image': filepath, + 'image': decoded_filepath, 'status': 'success' if status == 'upload_success' else 'failed', }) diff --git a/mapillary_tools/utils.py b/mapillary_tools/utils.py new file mode 100644 index 00000000..5a0f881a --- /dev/null +++ b/mapillary_tools/utils.py @@ -0,0 +1,8 @@ +def force_decode(string, codecs=['utf8', 'cp1252']): + for i in codecs: + try: + return string.decode(i) + except UnicodeDecodeError: + pass + print('cannot decode string: %s' % (string)) + return string.decode('utf8', errors='replace') \ No newline at end of file