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

View File

@ -11,7 +11,7 @@ import tcllib
import tcllib.argparser import tcllib.argparser
from tcllib import ansi, devlist from tcllib import ansi, devlist
from tcllib.devices import MobileDevice 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() dev = MobileDevice()
@ -59,4 +59,4 @@ for prd, variant in prds.items():
else: else:
print("{} ({}): {}".format(prd, lastver, chk.error)) 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 .tcl import *
from .runner import * from .runner import *
from .serverselector 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 defusedxml import ElementTree
from . import dumpmgr
class TclResult: 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): class CheckResult(TclResult):
def __init__(self, xml: str): def __init__(self, xml: str):
self.raw_xml = xml super().__init__(xml)
root = ElementTree.fromstring(xml) root = ElementTree.fromstring(xml)
self.curef = root.find("CUREF").text self.curef = root.find("CUREF").text
self.fvver = root.find("VERSION").find("FV").text self.fvver = root.find("VERSION").find("FV").text