nzbToMedia/libs/win/jaraco/windows/eventlog.py
2022-11-29 00:44:47 -05:00

51 lines
1.4 KiB
Python

import functools
import win32api
import win32evtlog
import win32evtlogutil
error = win32api.error # The error the evtlog module raises.
class EventLog(object):
def __init__(self, name="Application", machine_name=None):
self.machine_name = machine_name
self.name = name
self.formatter = functools.partial(
win32evtlogutil.FormatMessage, logType=self.name
)
def __enter__(self):
if hasattr(self, 'handle'):
raise ValueError("Overlapping attempts to use this log context")
self.handle = win32evtlog.OpenEventLog(self.machine_name, self.name)
return self
def __exit__(self, *args):
win32evtlog.CloseEventLog(self.handle)
del self.handle
_default_flags = (
win32evtlog.EVENTLOG_BACKWARDS_READ | win32evtlog.EVENTLOG_SEQUENTIAL_READ
)
def get_records(self, flags=_default_flags):
with self:
while True:
objects = win32evtlog.ReadEventLog(self.handle, flags, 0)
if not objects:
break
for item in objects:
yield item
def __iter__(self):
return self.get_records()
def format_record(self, record):
return self.formatter(record)
def format_records(self, records=None):
if records is None:
records = self.get_records()
return map(self.format_record, records)