address issues building mlflow model in GHA test env
This commit is contained in:
Andrew Tolopko
2022-07-29 11:17:04 -04:00
committed by GitHub
parent 03d9e8e6aa
commit a9ef01a6f9
3 changed files with 21 additions and 14 deletions
+5
View File
@@ -0,0 +1,5 @@
from .mlflow_model_fixture import FakeModel
def _load_pyfunc(data_path):
return FakeModel()
@@ -1,20 +1,11 @@
import shutil
from tempfile import TemporaryDirectory, mkstemp
import mlflow import mlflow
def write_model(model) -> str:
with TemporaryDirectory() as mlflow_model_dir:
mlflow.pyfunc.save_model(mlflow_model_dir, python_model=model)
return shutil.make_archive(mkstemp()[1], "zip", mlflow_model_dir)
class FakeModel(mlflow.pyfunc.PythonModel): class FakeModel(mlflow.pyfunc.PythonModel):
def __init__(self, input_to_output: dict = {}): def __init__(self, input_to_output: dict = {}):
self.input_to_output = input_to_output self.input_to_output = input_to_output
def predict(self, context, model_input) -> None: def predict(self, model_input) -> None:
# this stdout output is useful for validating the input in a test, noting that this model will be invoked in a # this stdout output is useful for validating the input in a test, noting that this model will be invoked in a
# subprocess, so stdout is one means of communicating information back to the test code # subprocess, so stdout is one means of communicating information back to the test code
print(f"__MODEL_INPUT__={model_input.iloc[0][0]}") print(f"__MODEL_INPUT__={model_input.iloc[0][0]}")
+15 -4
View File
@@ -1,10 +1,22 @@
import os
import shutil
import unittest import unittest
from tempfile import mkstemp from tempfile import mkstemp, TemporaryDirectory
import mlflow
from click.testing import CliRunner from click.testing import CliRunner
from server.cli.annotate import annotate from server.cli.annotate import annotate
from test.unit.cli.mlflow_model_fixture import FakeModel, write_model from test.unit.cli.fixtures.mlflow_model_fixture import FakeModel
def write_model(model) -> str:
with TemporaryDirectory() as mlflow_model_dir:
fixtures_path = os.path.join(os.path.dirname(__file__), 'fixtures')
mlflow.pyfunc.save_model(mlflow_model_dir,
loader_module='fixtures',
code_path=[fixtures_path])
return shutil.make_archive(mkstemp()[1], "zip", mlflow_model_dir)
class TestCliAnnotate(unittest.TestCase): class TestCliAnnotate(unittest.TestCase):
@@ -29,8 +41,7 @@ class TestCliAnnotate(unittest.TestCase):
""" """
_, query_dataset_file_path = mkstemp() _, query_dataset_file_path = mkstemp()
model = FakeModel() model_file_path = write_model(FakeModel())
model_file_path = write_model(model)
result = CliRunner().invoke( result = CliRunner().invoke(
annotate, annotate,