Source code for omegaml.backends.mlflow.gitprojects

 1import re
 2
 3from omegaml.backends.basedata import BaseDataBackend
 4from omegaml.backends.mlflow.localprojects import MLFlowProject
 5from omegaml.backends.package.packager import RunnablePackageMixin
 6
 7
[docs] 8class MLFlowGitProjectBackend(RunnablePackageMixin, BaseDataBackend): 9 """ 10 Backend to support git-sourced MLFlow projects 11 12 This supports any git remote source that MLFlow supports 13 14 Usage:: 15 16 om.scripts.put('mlflow+ssh://git@github.com/<user>/<repo>.git', '<pkgname>') 17 om.scripts.put('mlflow+https://git@github.com/<user>/<repo>.git', '<pkgname>') 18 om.scripts.put('https://github.com/<user>/<repo>', '<pkgname>', kind='mlflow.project') 19 20 See Also: 21 * https://packaging.python.org/tutorials/packaging-projects/ 22 * https://docs.github.com/en/get-started/getting-started-with-git/managing-remote-repositories#changing-a-remote-repositorys-url 23 """ 24 KIND = 'mlflow.gitproject' 25 MLFLOW_GIT_PREFIX = re.compile(r'^mlflow\+(git|ssh|https).*') 26 GIT_PREFIX = 'https' 27
[docs] 28 @classmethod 29 def supports(self, obj, name, **kwargs): 30 is_mlflow_git = isinstance(obj, str) and self.MLFLOW_GIT_PREFIX.match(obj) 31 is_git = isinstance(obj, str) and obj.startswith(self.GIT_PREFIX) and kwargs.get('kind') == self.KIND 32 return is_mlflow_git or is_git
33
[docs] 34 def put(self, obj, name, attributes=None, **kwargs): 35 """ 36 save a MLFlow git-sourceable project 37 """ 38 git_uri = obj.replace('mlflow+', '') 39 return self.data_store._make_metadata( 40 name=name, 41 prefix=self.data_store.prefix, 42 bucket=self.data_store.bucket, 43 kind=MLFlowGitProjectBackend.KIND, 44 uri=git_uri, 45 attributes=attributes).save()
46
[docs] 47 def get(self, name, **kwargs): 48 """ 49 Load MLFlow project from git uri 50 51 :return: the loaded module 52 """ 53 meta = self.data_store.metadata(name) 54 mod = MLFlowProject(meta.uri) 55 return mod