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 25 KIND = 'mlflow.gitproject' 26 MLFLOW_GIT_PREFIX = re.compile(r'^mlflow\+(git|ssh|https).*') 27 GIT_PREFIX = 'https' 28
[docs] 29 @classmethod 30 def supports(self, obj, name, **kwargs): 31 is_mlflow_git = isinstance(obj, str) and self.MLFLOW_GIT_PREFIX.match(obj) 32 is_git = isinstance(obj, str) and obj.startswith(self.GIT_PREFIX) and kwargs.get('kind') == self.KIND 33 return is_mlflow_git or is_git
34
[docs] 35 def put(self, obj, name, attributes=None, **kwargs): 36 """ 37 save a MLFlow git-sourceable project 38 """ 39 git_uri = obj.replace('mlflow+', '') 40 return self.data_store._make_metadata( 41 name=name, 42 prefix=self.data_store.prefix, 43 bucket=self.data_store.bucket, 44 kind=MLFlowGitProjectBackend.KIND, 45 uri=git_uri, 46 attributes=attributes, 47 ).save()
48
[docs] 49 def get(self, name, **kwargs): 50 """ 51 Load MLFlow project from git uri 52 53 :return: the loaded module 54 """ 55 meta = self.data_store.metadata(name) 56 mod = MLFlowProject(meta.uri) 57 return mod