From 46f9597e2e5488de7bddac0ec15b038f41ac0edf Mon Sep 17 00:00:00 2001 From: Richard Bronkhorst Date: Sun, 18 Jun 2023 07:06:32 +0200 Subject: [PATCH] Cleanup --- nullptr/commander.py | 3 +++ nullptr/models/base.py | 3 +++ nullptr/models/survey.py | 2 +- nullptr/store.py | 20 ++++++++++++++++++++ 4 files changed, 27 insertions(+), 1 deletion(-) diff --git a/nullptr/commander.py b/nullptr/commander.py index 9750838..cb2c3e6 100644 --- a/nullptr/commander.py +++ b/nullptr/commander.py @@ -263,6 +263,9 @@ class Commander(CommandLine): r = self.api.survey(self.ship) pprint(r) + def do_surveys(self): + pprint(list(self.store.all('Survey'))) + def do_extract(self, survey_str=''): if not self.has_ship(): return survey = None diff --git a/nullptr/models/base.py b/nullptr/models/base.py index ced5713..92327d7 100644 --- a/nullptr/models/base.py +++ b/nullptr/models/base.py @@ -39,6 +39,9 @@ class Base: def update(self, d): pass + def is_expired(self): + return False + def load(self, d): self.__dict__ = d diff --git a/nullptr/models/survey.py b/nullptr/models/survey.py index 0c42d14..fed5101 100644 --- a/nullptr/models/survey.py +++ b/nullptr/models/survey.py @@ -19,7 +19,7 @@ class Survey(SystemMember): def path(self): sector, system, waypoint, signature = self.symbol.split('-') - return f'atlas/{sector}/{system[0:1]}/{system}/{waypoint}-{signature}.{self.ext()}' + return f'atlas/{sector}/{system[0:1]}/{system}/{self.symbol}.{self.ext()}' def is_expired(self): diff --git a/nullptr/store.py b/nullptr/store.py index 95641e7..e1eb50e 100644 --- a/nullptr/store.py +++ b/nullptr/store.py @@ -23,6 +23,8 @@ class Store: self.data = {m: {} for m in self.models} self.system_members = {} self.dirty_objects = set() + self.cleanup_interval = 600 + self.last_cleanup = 0 def init_models(self): self.models = all_subclasses(Base) @@ -125,8 +127,26 @@ class Store: for m in self.system_members[system]: if typ is None or type(m) == typ: yield m + + def cleanup(self): + if time() > self.last_cleanup + self.cleanup_interval: + return + start_time = time() + expired = list() + for t in self.data: + for o in self.all(t): + if o.is_expired(): + expired.append(o) + for o in expired: + path = o.path() + if isfile(path): + os.remove(path) + del self.data[type(o)][o.symbol] + dur = time() - start_time + # print(f'cleaned {len(expired)} in {dur:.03f} seconds') def flush(self): + self.cleanup() it = 0 start_time = time() for obj in self.dirty_objects: