def _mock_fetch(name, tag=None, secret=None, force=False): mock(name=name) return HubExecutor( uuid='hello', name='alias_dummy', tag='v0', image_name='jinahub/pod.dummy_mwu_encoder', md5sum=None, visibility=True, archive_url=None, )
def local_hub_executor(tmpdir, test_envs): from jina.hubble import hubapi, helper, HubExecutor hubapi._hub_root = Path(os.environ.get('JINA_HUB_ROOT')) pkg_path = Path(__file__).parent / 'dummyhub' stream_data = helper.archive_package(pkg_path) with open(tmpdir / 'dummy_test.zip', 'wb') as temp_zip_file: temp_zip_file.write(stream_data.getvalue()) hubapi.install_local( Path(tmpdir) / 'dummy_test.zip', HubExecutor(uuid='hello', tag='v0'))
def exist_local(uuid: str, tag: str = None) -> bool: """Check whether the executor exists in local :param uuid: the UUID of the executor :param tag: the TAG of the executor :return: True if existed, else False """ try: get_dist_path_of_executor(HubExecutor(uuid=uuid, tag=tag)) return True except FileNotFoundError: return False
def _mock_fetch(name, tag=None, secret=None, force=False): return ( HubExecutor( uuid='hello', name='alias_dummy', tag='v0', image_name=f'jinahub/{name}', md5sum=None, visibility=True, archive_url=None, ), False, )
def fetch_meta( name: str, tag: str, secret: Optional[str] = None, force: bool = False, ) -> HubExecutor: """Fetch the executor meta info from Jina Hub. :param name: the UUID/Name of the executor :param tag: the tag of the executor if available, otherwise, use `None` as the value :param secret: the access secret of the executor :param force: if set to True, access to fetch_meta will always pull latest Executor metas, otherwise, default to local cache :return: meta of executor .. note:: The `name` and `tag` should be passed via ``args`` and `force` and `secret` as ``kwargs``, otherwise, cache does not work. """ with ImportExtensions(required=True): import requests pull_url = get_hubble_url_v1() + f'/executors/{name}/?' path_params = {} if secret: path_params['secret'] = secret if tag: path_params['tag'] = tag if path_params: pull_url += urlencode(path_params) resp = requests.get(pull_url, headers=get_request_header()) if resp.status_code != 200: if resp.text: raise Exception(resp.text) resp.raise_for_status() resp = resp.json() return HubExecutor( uuid=resp['id'], name=resp.get('name', None), sn=resp.get('sn', None), tag=tag or resp['tag'], visibility=resp['visibility'], image_name=resp['image'], archive_url=resp['package']['download'], md5sum=resp['package']['md5'], )
def _mock_fetch( name, tag=None, secret=None, image_required=True, rebuild_image=True, force=False, ): mock(name=name, rebuild_image=rebuild_image) return ( HubExecutor( uuid='hello', name=name, tag='v0', image_name=f'jinahub/{name}', md5sum=None, visibility=True, archive_url=None, ), False, )
def test_executor(): return HubExecutor(uuid='hello', name=None, sn=0, tag='v0')
def fetch_meta( name: str, tag: str, *, secret: Optional[str] = None, image_required: bool = True, rebuild_image: bool = True, force: bool = False, ) -> HubExecutor: """Fetch the executor meta info from Jina Hub. :param name: the UUID/Name of the executor :param tag: the tag of the executor if available, otherwise, use `None` as the value :param secret: the access secret of the executor :param image_required: it indicates whether a Docker image is required or not :param rebuild_image: it indicates whether Jina Hub need to rebuild image or not :param force: if set to True, access to fetch_meta will always pull latest Executor metas, otherwise, default to local cache :return: meta of executor .. note:: The `name` and `tag` should be passed via ``args`` and `force` and `secret` as ``kwargs``, otherwise, cache does not work. """ with ImportExtensions(required=True): import requests @retry(num_retry=3) def _send_request_with_retry(url, **kwargs): resp = requests.post(url, **kwargs) if resp.status_code != 200: if resp.text: raise Exception(resp.text) resp.raise_for_status() return resp pull_url = get_hubble_url_v2() + f'/rpc/executor.getPackage' payload = { 'id': name, 'include': ['code'], 'rebuildImage': rebuild_image } if image_required: payload['include'].append('docker') if secret: payload['secret'] = secret if tag: payload['tag'] = tag req_header = get_request_header() resp = _send_request_with_retry(pull_url, json=payload, headers=req_header) resp = resp.json()['data'] images = resp['package'].get('containers', []) image_name = images[0] if images else None if image_required and not image_name: raise Exception( f'No image found for executor "{name}", ' f'tag: {tag}, commit: {resp.get("commit", {}).get("id")}, ' f'session_id: {req_header.get("jinameta-session-id")}') return HubExecutor( uuid=resp['id'], name=resp.get('name', None), commit_id=resp['commit'].get('id'), tag=tag or resp['commit'].get('tags', [None])[0], visibility=resp['visibility'], image_name=image_name, archive_url=resp['package']['download'], md5sum=resp['package']['md5'], )
def test_executor(): return HubExecutor(uuid='hello', name=None, commit_id='test_commit', tag='v0')