mirror of
https://github.com/mbirth/tcl_ota_check.git
synced 2024-11-09 22:06:47 +00:00
Added standalone DumpMgr class.
This commit is contained in:
parent
d2c51e70d5
commit
784a511708
@ -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()
|
||||||
|
@ -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()
|
||||||
|
@ -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
|
||||||
|
58
tcllib/requests/dumpmgr.py
Normal file
58
tcllib/requests/dumpmgr.py
Normal 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
|
@ -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
|
||||||
|
Loading…
Reference in New Issue
Block a user