From 2b30ca86097dfda9b8d193bae847c1522398fdf9 Mon Sep 17 00:00:00 2001 From: zouxiaochuan Date: Wed, 8 Nov 2023 23:38:32 +0800 Subject: [PATCH] [MNT] add reload learnware method in market --- learnware/market/base.py | 3 +++ learnware/market/easy2/database_ops.py | 22 ++++++++++++++++++++++ learnware/market/easy2/organizer.py | 25 +++++++++++++++++++++++-- 3 files changed, 48 insertions(+), 2 deletions(-) diff --git a/learnware/market/base.py b/learnware/market/base.py index 2349614..a422479 100644 --- a/learnware/market/base.py +++ b/learnware/market/base.py @@ -225,6 +225,9 @@ class LearnwareMarket: """ return self.learnware_organizer.get_learnwares(top, check_status, **kwargs) + def reload_learnware(self, learnware_id: str): + self.learnware_organizer.reload_learnware(learnware_id) + def get_learnware_zip_path_by_ids(self, ids: Union[str, List[str]], **kwargs) -> Union[Learnware, List[Learnware]]: return self.learnware_organizer.get_learnware_zip_path_by_ids(ids, **kwargs) diff --git a/learnware/market/easy2/database_ops.py b/learnware/market/easy2/database_ops.py index 087e6fd..077a04e 100644 --- a/learnware/market/easy2/database_ops.py +++ b/learnware/market/easy2/database_ops.py @@ -145,6 +145,28 @@ class DatabaseOperations(object): pass pass + def get_learnware_semantic_specification(self, id: str): + with self.engine.connect() as conn: + r = conn.execute(text("SELECT semantic_spec FROM tb_learnware WHERE id=:id;"), dict(id=id)) + row = r.fetchone() + if row is None: + return None + else: + return json.loads(row[0]) + pass + pass + + def get_learnware_use_flag(self, id: str): + with self.engine.connect() as conn: + r = conn.execute(text("SELECT use_flag FROM tb_learnware WHERE id=:id;"), dict(id=id)) + row = r.fetchone() + if row is None: + return None + else: + return int(row[0]) + pass + pass + def load_market(self): with self.engine.connect() as conn: cursor = conn.execute(text("SELECT id, semantic_spec, zip_path, folder_path, use_flag FROM tb_learnware;")) diff --git a/learnware/market/easy2/organizer.py b/learnware/market/easy2/organizer.py index f6122ca..3d6d6b6 100644 --- a/learnware/market/easy2/organizer.py +++ b/learnware/market/easy2/organizer.py @@ -143,9 +143,11 @@ class EasyOrganizer(BaseOrganizer): return False zip_dir = self.learnware_zip_list[id] - os.remove(zip_dir) + if os.path.exists(zip_dir): + os.remove(zip_dir) + pass folder_dir = self.learnware_folder_list[id] - rmtree(folder_dir) + rmtree(folder_dir, ignore_errors=True) self.learnware_list.pop(id) self.learnware_zip_list.pop(id) self.learnware_folder_list.pop(id) @@ -370,5 +372,24 @@ class EasyOrganizer(BaseOrganizer): learnware_ids = self.get_learnware_ids(top, check_status) return [self.learnware_list[idx] for idx in learnware_ids] + def reload_learnware(self, learnware_id: str): + current_learnware = self.learnware_list.get(learnware_id) + + if current_learnware is None: + # add learnware + self.count += 1 + else: + pass + + target_zip_dir = os.path.join(self.learnware_zip_pool_path, "%s.zip" % (learnware_id)) + target_folder_dir = os.path.join(self.learnware_folder_pool_path, learnware_id) + self.learnware_zip_list[learnware_id] = target_zip_dir + self.learnware_folder_list[learnware_id] = target_folder_dir + semantic_spec = self.dbops.get_learnware_semantic_specification(learnware_id) + self.learnware_list[learnware_id] = get_learnware_from_dirpath( + id=learnware_id, semantic_spec=semantic_spec, learnware_dirpath=target_folder_dir) + self.use_flags[learnware_id] = self.dbops.get_learnware_use_flag(learnware_id) + pass + def __len__(self): return len(self.learnware_list)