50 lines
1006 B
Python
50 lines
1006 B
Python
from pathlib import Path
|
|
|
|
from importing import load_module
|
|
from utils import printable_exception
|
|
|
|
|
|
class Module:
|
|
|
|
def __init__(self, fname):
|
|
fname = Path(fname)
|
|
self.fname = fname
|
|
self.name = fname.stem.replace("-", "_")
|
|
self.mtime = self.get_mtime()
|
|
|
|
|
|
def load(self):
|
|
try:
|
|
self.mod = mod = load_module(self.name, self.fname)
|
|
except Exception as e:
|
|
raise ModuleLoadError(printable_exception(e)) from e
|
|
|
|
try:
|
|
self.run = mod.run
|
|
except AttributeError as e:
|
|
raise MissingRunFunctionError from e
|
|
|
|
|
|
def file_exists(self):
|
|
return self.fname.is_file()
|
|
|
|
def has_changed(self):
|
|
return self.mtime != self.get_mtime()
|
|
|
|
def get_mtime(self):
|
|
return self.fname.stat().st_mtime
|
|
|
|
def __str__(self):
|
|
return f"{self.fname} -> {self.name} ({self.mtime})"
|
|
|
|
|
|
|
|
class ModuleLoadError(Exception):
|
|
pass
|
|
|
|
class MissingRunFunctionError(Exception):
|
|
pass
|
|
|
|
|
|
|