Source code for library.pipeline.serialization_and_deserialization.deserializer
from library.utils.decorators.timer import timer
import joblib
import pickle
from abc import ABC, abstractmethod
[docs]
class Deserialization:
""" This class is responsible for deserializing the pipelines and models. """
def __init__(self):
pass
@timer("Deserializing pipelines")
def deserialize_pipelines(self, pipelines_to_deserialize: dict[str, str]):
deserialized_pipelines = {}
for pipeline_name, pipeline_path in pipelines_to_deserialize.items():
deserialized_pipelines[pipeline_name] = self._deserialize_pipeline(pipeline_name, pipeline_path)
return deserialized_pipelines
@abstractmethod
def _deserialize_pipeline(self, pipeline_name: str, pipeline_path: str):
pass
@timer("Deserializing models")
def deserialize_models(self, models_to_deserialize: dict[str, str]):
deserialized_models = {}
for model_name, model_path in models_to_deserialize.items():
deserialized_models[model_name] = self._deserialize_model(model_name, model_path)
return deserialized_models
@abstractmethod
def _deserialize_model(self, model_name: str, model_path: str):
pass
[docs]
class DeserializationJoblib(Deserialization):
def __init__(self):
super().__init__()
def _deserialize_pipeline(self, pipeline_name: str, pipeline_path: str):
print(f"Deserializing pipeline {pipeline_name} from {pipeline_path}")
obj = joblib.load(pipeline_path)
return obj
def _deserialize_model(self, model_name: str, model_path: str):
print(f"Deserializing model {model_name} from {model_path}")
obj = joblib.load(model_path)
return obj
[docs]
class DeserializationPickle(Deserialization):
def __init__(self):
super().__init__()
def _deserialize_pipeline(self, pipeline_name: str, pipeline_path: str):
print(f"Deserializing pipeline {pipeline_name} from {pipeline_path}")
obj = pickle.load(open(pipeline_path, "rb"))
return obj
def _deserialize_model(self, model_name: str, model_path: str):
print(f"Deserializing model {model_name} from {model_path}")
obj = pickle.load(open(model_path, "rb"))
return obj