From e67e0a03fa95ad153f50cfa975a97b625aec6313 Mon Sep 17 00:00:00 2001
From: Athanasius <github@miggy.org>
Date: Wed, 7 Apr 2021 13:24:35 +0100
Subject: [PATCH] dashboard.py: Fix flake8 lints

---
 dashboard.py | 81 ++++++++++++++++++++++++++++++++++------------------
 1 file changed, 54 insertions(+), 27 deletions(-)

diff --git a/dashboard.py b/dashboard.py
index 71b16f4c..e98af412 100644
--- a/dashboard.py
+++ b/dashboard.py
@@ -1,42 +1,51 @@
+"""Handle the game Status.json file."""
+
 import json
-from calendar import timegm
-from os.path import isdir, isfile, join, getsize
-from sys import platform
 import time
+import tkinter as tk
+from calendar import timegm
+from os.path import getsize, isdir, isfile, join
+from sys import platform
 
 from config import config
 from EDMCLogging import get_main_logger
 
 logger = get_main_logger()
 
-if platform=='darwin':
-    from watchdog.observers import Observer
+if platform == 'darwin':
     from watchdog.events import FileSystemEventHandler
+    from watchdog.observers import Observer
 
-elif platform=='win32':
-    from watchdog.observers import Observer
+elif platform == 'win32':
     from watchdog.events import FileSystemEventHandler
+    from watchdog.observers import Observer
 
 else:
     # Linux's inotify doesn't work over CIFS or NFS, so poll
-    FileSystemEventHandler = object	# dummy
+    FileSystemEventHandler = object  # dummy
 
 
-# Status.json handler
 class Dashboard(FileSystemEventHandler):
+    """Status.json handler."""
 
     _POLL = 1  # Fallback polling interval
 
-    def __init__(self):
-        FileSystemEventHandler.__init__(self)	# futureproofing - not need for current version of watchdog
+    def __init__(self) -> None:
+        FileSystemEventHandler.__init__(self)  # futureproofing - not need for current version of watchdog
         self.root = None
-        self.currentdir = None		# The actual logdir that we're monitoring
+        self.currentdir = None                 # The actual logdir that we're monitoring
         self.observer = None
-        self.observed = None		# a watchdog ObservedWatch, or None if polling
-        self.status = {}		# Current status for communicating status back to main thread
+        self.observed = None                   # a watchdog ObservedWatch, or None if polling
+        self.status = {}                       # Current status for communicating status back to main thread
 
-    def start(self, root, started):
-        """Start monitoring of Journal directory."""
+    def start(self, root: tk.Tk, started: int) -> bool:
+        """
+        Start monitoring of Journal directory.
+
+        :param root: tkinter parent window.
+        :param started: unix epoch timestamp of LoadGame event.  Ref: monitor.started.
+        :return: Successful start.
+        """
         logger.debug('Starting...')
         self.root = root
         self.session_start = started
@@ -90,7 +99,7 @@ class Dashboard(FileSystemEventHandler):
 
         return True
 
-    def stop(self):
+    def stop(self) -> None:
         """Stop monitoring dashboard."""
         logger.debug('Stopping monitoring Dashboard')
         self.currentdir = None
@@ -105,7 +114,7 @@ class Dashboard(FileSystemEventHandler):
         self.status = {}
         logger.debug('Done.')
 
-    def close(self):
+    def close(self) -> None:
         """Close down dashboard."""
         logger.debug('Calling self.stop()')
         self.stop()
@@ -123,28 +132,45 @@ class Dashboard(FileSystemEventHandler):
 
         logger.debug('Done.')
 
-    def poll(self, first_time=False):
+    def poll(self, first_time: bool = False) -> None:
+        """
+        Poll Status.json via calling self.process() once a second.
+
+        :param first_time: True if first call of this.
+        """
         if not self.currentdir:
             # Stopped
             self.status = {}
+
         else:
             self.process()
 
             if first_time:
                 # Watchdog thread
-                emitter = self.observed and self.observer._emitter_for_watch[self.observed]	# Note: Uses undocumented attribute
+                if self.observed:
+                    emitter = self.observer._emitter_for_watch[self.observed]  # Note: Uses undocumented attribute
+
                 if emitter and emitter.is_alive():
-                    return	# Watchdog thread still running - stop polling
+                    return  # Watchdog thread still running - stop polling
 
-            self.root.after(self._POLL * 1000, self.poll)	# keep polling
+            self.root.after(self._POLL * 1000, self.poll)  # keep polling
 
-    def on_modified(self, event):
-        # watchdog callback - DirModifiedEvent on macOS, FileModifiedEvent on Windows
-        if event.is_directory or (isfile(event.src_path) and getsize(event.src_path)):	# Can get on_modified events when the file is emptied
+    def on_modified(self, event) -> None:
+        """
+        Watchdog callback - DirModifiedEvent on macOS, FileModifiedEvent on Windows.
+
+        :param event: Watchdog event.
+        """
+        if event.is_directory or (isfile(event.src_path) and getsize(event.src_path)):
+            # Can get on_modified events when the file is emptied
             self.process(event.src_path if not event.is_directory else None)
 
-    # Can be called either in watchdog thread or, if polling, in main thread.
-    def process(self, logfile=None):
+    def process(self) -> None:
+        """
+        Process the contents of current Status.json file.
+
+        Can be called either in watchdog thread or, if polling, in main thread.
+        """
         if config.shutting_down:
             return
 
@@ -166,5 +192,6 @@ class Dashboard(FileSystemEventHandler):
         except Exception:
             logger.exception('Processing Status.json')
 
+
 # singleton
 dashboard = Dashboard()