1
0
mirror of https://github.com/mbirth/tcl_ota_check.git synced 2024-09-19 22:33:25 +01:00

Added standalone DumpMgr class.

This commit is contained in:
Markus Birth 2018-02-09 00:17:08 +01:00
parent d2c51e70d5
commit 784a511708
Signed by: mbirth
GPG Key ID: A9928D7A098C3A9A
5 changed files with 73 additions and 5 deletions

View File

@ -13,6 +13,7 @@ import tcllib
import tcllib.argparser
from tcllib import ansi, devlist
from tcllib.devices import DesktopDevice
from tcllib.requests import RequestRunner, CheckRequest, ServerVoteSelector, write_info_if_dumps_found
dev = DesktopDevice()
@ -56,4 +57,4 @@ for prd, variant in prds.items():
print("{}: {}".format(prd, str(e)))
continue
tcllib.FotaCheck.write_info_if_dumps_found()
write_info_if_dumps_found()

View File

@ -11,7 +11,7 @@ import tcllib
import tcllib.argparser
from tcllib import ansi, devlist
from tcllib.devices import MobileDevice
from tcllib.requests import RequestRunner, CheckRequest, ServerVoteSelector
from tcllib.requests import RequestRunner, CheckRequest, ServerVoteSelector, write_info_if_dumps_found
dev = MobileDevice()
@ -59,4 +59,4 @@ for prd, variant in prds.items():
else:
print("{} ({}): {}".format(prd, lastver, chk.error))
tcllib.FotaCheck.write_info_if_dumps_found()
write_info_if_dumps_found()

View File

@ -3,3 +3,4 @@
from .tcl import *
from .runner import *
from .serverselector import *
from .dumpmgr import write_info_if_dumps_found

View File

@ -0,0 +1,58 @@
#!/usr/bin/env python3
# -*- coding: utf-8 -*-
# pylint: disable=C0111,C0326,C0103
"""Tools to manage dumps of API requests."""
import errno
import glob
import os
import random
import time
from math import floor
from .. import ansi
def get_timestamp_random():
"""Generate timestamp + random part to avoid collisions."""
millis = floor(time.time() * 1000)
tail = "{:06d}".format(random.randint(0, 999999))
return "{}_{}".format(str(millis), tail)
def write_info_if_dumps_found():
"""Notify user to upload dumps if present."""
# To disable this info, uncomment the following line.
# return
files = glob.glob(os.path.normpath("logs/*.xml"))
if files:
print()
print("{}There are {} logs collected in the logs/ directory.{} Please consider uploading".format(ansi.YELLOW, len(files), ansi.RESET))
print("them to https://tclota.birth-online.de/ by running {}./upload_logs.py{}.".format(ansi.CYAN, ansi.RESET))
class DumpMgr:
"""A class for XML dump management."""
def __init__(self):
"""Populate dump file name."""
self.last_dump_filename = None
def write_dump(self, data):
"""Write dump to file."""
outfile = os.path.normpath("logs/{}.xml".format(get_timestamp_random()))
if not os.path.exists(os.path.dirname(outfile)):
try:
os.makedirs(os.path.dirname(outfile))
except OSError as err:
if err.errno != errno.EEXIST:
raise
with open(outfile, "w", encoding="utf-8") as fhandle:
fhandle.write(data)
self.last_dump_filename = outfile
def delete_last_dump(self):
"""Delete last dump."""
if self.last_dump_filename:
os.unlink(self.last_dump_filename)
self.last_dump_filename = None

View File

@ -2,13 +2,21 @@
from defusedxml import ElementTree
from . import dumpmgr
class TclResult:
pass
def __init__(self, xml: str):
self.raw_xml = xml
self.dumper = dumpmgr.DumpMgr()
self.dumper.write_dump(xml)
def delete_dump(self):
self.dumper.delete_last_dump()
class CheckResult(TclResult):
def __init__(self, xml: str):
self.raw_xml = xml
super().__init__(xml)
root = ElementTree.fromstring(xml)
self.curef = root.find("CUREF").text
self.fvver = root.find("VERSION").find("FV").text