Browse Source

[MNT] update client check learnware

tags/v0.3.2
bxdd 2 years ago
parent
commit
2e3f0cbe80
6 changed files with 37 additions and 15 deletions
  1. +11
    -9
      learnware/client/learnware_client.py
  2. +2
    -1
      learnware/market/__init__.py
  3. +19
    -0
      learnware/market/classes.py
  4. +1
    -1
      learnware/market/easy2/__init__.py
  5. +2
    -2
      learnware/market/easy2/checker.py
  6. +2
    -2
      learnware/market/module.py

+ 11
- 9
learnware/client/learnware_client.py View File

@@ -14,7 +14,7 @@ from typing import Union, List
from ..config import C
from .. import learnware
from .container import LearnwaresContainer
from ..market import EasySemanticChecker, EasyStatisticalChecker
from ..market import BaseChecker, EasySemanticChecker, EasyStatChecker, CondaChecker
from ..logger import get_module_logger
from ..specification import Specification
from ..learnware import get_learnware_from_dirpath
@@ -386,14 +386,21 @@ class LearnwareClient:

@staticmethod
def _check_semantic_specification(semantic_spec):
return EasySemanticChecker.check_semantic_spec(semantic_spec)
semantic_checker = EasySemanticChecker()
return semantic_checker(semantic_spec) != BaseChecker.INVALID_LEARNWARE
@staticmethod
def _check_stat_specification(learnware):
stat_checker = CondaChecker(inner_checker=EasyStatChecker())
return stat_checker(learnware) != BaseChecker.INVALID_LEARNWARE

@staticmethod
def check_learnware(learnware_zip_path, semantic_specification=None):
semantic_specification = (
get_semantic_specification() if semantic_specification is None else semantic_specification
)
LearnwareClient._check_semantic_specification(semantic_specification)
assert LearnwareClient._check_semantic_specification(semantic_specification), "Semantic specification check failed!"

with tempfile.TemporaryDirectory(prefix="learnware_") as tempdir:
with zipfile.ZipFile(learnware_zip_path, mode="r") as z_file:
@@ -406,12 +413,7 @@ class LearnwareClient:
if learnware is None:
raise Exception("The learnware is not valid.")

with LearnwaresContainer(learnware, learnware_zip_path) as env_container:
learnware = env_container.get_learnwares_with_container()[0]
if EasyStatisticalChecker()(learnware) == EasyStatisticalChecker.USABLE_LEARWARE:
logger.info("The learnware passed the local test.")
else:
raise Exception("The learnware is not usable.")
assert LearnwareClient._check_semantic_specification(learnware), "Stas specification check failed!"

def cleanup(self):
for tempdir in self.tempdir_list:


+ 2
- 1
learnware/market/__init__.py View File

@@ -2,8 +2,9 @@ from .anchor import AnchoredUserInfo, AnchoredOrganizer
from .base import BaseUserInfo, LearnwareMarket, BaseChecker, BaseOrganizer, BaseSearcher
from .evolve_anchor import EvolvedAnchoredOrganizer
from .evolve import EvolvedOrganizer
from .easy2 import EasyOrganizer, EasySearcher, EasySemanticChecker, EasyStatisticalChecker
from .easy2 import EasyOrganizer, EasySearcher, EasySemanticChecker, EasyStatChecker
from .hetergeneous import HeterogeneousOrganizer, MappingFunction

from .easy import EasyMarket
from .module import instatiate_learnware_market
from .classes import CondaChecker

+ 19
- 0
learnware/market/classes.py View File

@@ -0,0 +1,19 @@
from .base import BaseChecker, BaseOrganizer
from ..learnware import Learnware
from ..client.container import LearnwaresContainer


class CondaChecker(BaseChecker):
def __init__(self, inner_checker, **kwargs):
self.inner_checker = inner_checker
super(CondaChecker, self).__init__(**kwargs)
def __call__(self, learnware: Learnware) -> int:
with LearnwaresContainer(learnware) as env_container:
learnwares = env_container.get_learnwares_with_container()
if len(learnwares) == 0:
raise AssertionError(f"The env of learnware {learnware} installed failed")
check_status = self.inner_checker(learnware[0])
return check_status

+ 1
- 1
learnware/market/easy2/__init__.py View File

@@ -1,3 +1,3 @@
from .organizer import EasyOrganizer
from .searcher import EasySearcher
from .checker import EasySemanticChecker, EasyStatisticalChecker
from .checker import EasySemanticChecker, EasyStatChecker

+ 2
- 2
learnware/market/easy2/checker.py View File

@@ -51,7 +51,7 @@ class EasySemanticChecker(BaseChecker):

return EasySemanticChecker.NONUSABLE_LEARNWARE

except Exception as err:
except AssertionError as err:
logger.warning(f"semantic_specification is not valid due to {err}!")
return EasySemanticChecker.INVALID_LEARNWARE

@@ -60,7 +60,7 @@ class EasySemanticChecker(BaseChecker):
return self.check_semantic_spec(semantic_spec)


class EasyStatisticalChecker(BaseChecker):
class EasyStatChecker(BaseChecker):
def __call__(self, learnware):
semantic_spec = learnware.get_specification().get_semantic_spec()



+ 2
- 2
learnware/market/module.py View File

@@ -1,11 +1,11 @@
from .base import LearnwareMarket
from .easy2 import EasyOrganizer, EasySearcher, EasySemanticChecker, EasyStatisticalChecker
from .easy2 import EasyOrganizer, EasySearcher, EasySemanticChecker, EasyStatChecker

MARKET_CONFIG = {
"easy": {
"organizer": EasyOrganizer(),
"searcher": EasySearcher(),
"checker_list": [EasySemanticChecker(), EasyStatisticalChecker()],
"checker_list": [EasySemanticChecker(), EasyStatChecker()],
}
}



Loading…
Cancel
Save