Skip to content

Commit 9b1e57d

Browse files
author
Josef-MrBeam
committed
fix usage data will be reset bug
1 parent b1fdcce commit 9b1e57d

File tree

2 files changed

+44
-15
lines changed

2 files changed

+44
-15
lines changed

octoprint_mrbeam/__init__.py

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -13,6 +13,7 @@
1313
import datetime
1414
import collections
1515
import logging
16+
import unicodedata
1617
from subprocess import check_output
1718

1819
import octoprint.plugin
@@ -38,6 +39,9 @@
3839
from ._version import get_versions
3940

4041
__version__ = get_versions()["version"]
42+
if isinstance(__version__, unicode):
43+
__version__ = unicodedata.normalize('NFKD', __version__).encode('ascii', 'ignore')
44+
4145
del get_versions
4246

4347
from octoprint_mrbeam.iobeam.iobeam_handler import ioBeamHandler, IoBeamEvents

octoprint_mrbeam/analytics/usage_handler.py

Lines changed: 40 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,7 @@
11
import os
22
import time
3+
import unicodedata
4+
35
import yaml
46

57
from octoprint_mrbeam.mrb_logger import mrb_logger
@@ -356,36 +358,59 @@ def _load_usage_data(self):
356358
"Trying to recover from _backup_file file: %s", self._backup_file
357359
)
358360
recovery_try = True
359-
if os.path.isfile(self._backup_file):
361+
try:
362+
with open(self._backup_file, "r") as stream:
363+
data = yaml.safe_load(stream)
364+
if self._validate_data(data):
365+
data["restored"] = (
366+
data["restored"] + 1 if "restored" in data else 1
367+
)
368+
self._usage_data = data
369+
success = True
370+
self._write_usage_data()
371+
self._logger.info("Recovered from _backup_file file. Yayy!")
372+
except yaml.constructor.ConstructorError:
360373
try:
361-
data = None
362-
with open(self._backup_file, "r") as stream:
363-
data = yaml.safe_load(stream)
364-
if self._validate_data(data):
365-
data["restored"] = (
366-
data["restored"] + 1 if "restored" in data else 1
367-
)
368-
self._usage_data = data
369-
success = True
370-
self._write_usage_data()
371-
self._logger.info("Recovered from _backup_file file. Yayy!")
372-
except:
373-
self._logger.error("Can't read _backup_file file.")
374+
success = self._repair_backup_usage_data()
375+
except Exception:
376+
self._logger.error("Repair of the _backup_file failed.")
377+
except OSError:
378+
self._logger.error("There is no _backup_file file.")
379+
except yaml.YAMLError:
380+
self._logger.error("There was a YAMLError with the _backup_file file.")
381+
except:
382+
self._logger.error("Can't read _backup_file file.")
374383

375384
if not success:
376385
self._logger.warn("Resetting usage data. (marking as incomplete)")
377386
self._usage_data = self._get_usage_data_template()
378387
if recovery_try:
379388
self._write_usage_data()
380389

390+
def _repair_backup_usage_data(self):
391+
success = False
392+
with open(self._backup_file, "r") as stream:
393+
data = yaml.load(stream)
394+
if self._validate_data(data):
395+
if isinstance(data["version"], unicode):
396+
data["version"] = unicodedata.normalize('NFKD', data["version"]).encode('ascii', 'ignore')
397+
data["restored"] = (
398+
data["restored"] + 1 if "restored" in data else 1
399+
)
400+
self._usage_data = data
401+
success = True
402+
self._write_usage_data()
403+
self._logger.info("Could repair _backup_file file. Yayy!")
404+
return success
405+
381406
def _write_usage_data(self, file=None):
382407
self._usage_data["version"] = self._plugin_version
383408
self._usage_data["ts"] = time.time()
384409
self._usage_data["serial"] = self._device_serial
385410
file = self._storage_file if file is None else file
386411
try:
387412
with open(file, "w") as outfile:
388-
yaml.dump(self._usage_data, outfile, default_flow_style=False)
413+
yaml.safe_dump(self._usage_data, outfile, default_flow_style=False)
389414
except:
390415
self._logger.exception("Can't write file %s due to an exception: ", file)
391416

0 commit comments

Comments
 (0)