#!/usr/bin/env python# -*- coding: utf-8 -*--# Copyright (c) 2020, 2024 Oracle and/or its affiliates.# Licensed under the Universal Permissive License v 1.0 as shown at https://oss.oracle.com/licenses/upl/from__future__importprint_function,absolute_importimportwarningswarnings.warn(("The `ads.catalog.summary` is deprecated in `oracle-ads 2.6.9` and will be removed in `oracle-ads 3.0`."),DeprecationWarning,stacklevel=2,)importabcimportads.common.utilsasutilsfromoci.utilimportto_dictfrompandasimportDataFrameimportpandasaspdfromabcimportABCMetafromads.common.decorator.runtime_dependencyimport(runtime_dependency,OptionalDependency,)
[docs]classSummaryList(list,metaclass=ABCMeta):def__init__(self,entity_list,datetime_format=utils.date_format):ifisinstance(entity_list,filter):entity_list=list(entity_list)super(SummaryList,self).__init__(entity_list)df=DataFrame.from_records([to_dict(entity)forentityinentity_list])# edge case handling: handle edge case where dataframe is emptyifnotdf.empty:# handle collision protectionnuniques=df["id"].nunique()minLen=-6shortened_ocids=df["id"].str[minLen:]whileshortened_ocids.nunique()!=nuniques:minLen-=1shortened_ocids=df["id"].str[minLen:]df.index=shortened_ocidsself.short_id_index=df["id"].to_dict()ordered_columns=["display_name","description","time_created","lifecycle_state","user_name","compartment_id","project_id",]remove_list=["created_by"]ordered_columns.extend([columnforcolumnindf.columnsifcolumnnotinordered_columns])forcolumninordered_columns:ifcolumnnotindf.columns:ordered_columns.remove(column)forcolumninremove_list:ordered_columns.remove(column)self.df=df[ordered_columns].drop(columns="id")self.df["compartment_id"]="..."+self.df["compartment_id"].str[-6:]if"project_id"inordered_columns:self.df["project_id"]="..."+self.df["project_id"].str[-6:]if"model_version_set_id"inordered_columns:self.df["model_version_set_id"]=("..."+self.df["model_version_set_id"].str[-6:])self.df["time_created"]=pd.to_datetime(self.df["time_created"]).dt.strftime(datetime_format)self.datetime_format=datetime_formatelse:self.df=df
[docs]@abc.abstractmethoddefsort_by(self,columns,reverse=False):# pragma: no cover""" Abstract method for sorting, implemented by the derived class """pass
[docs]@abc.abstractmethoddeffilter(self,selection,instance=None):# pragma: no cover""" Abstract method for filtering, implemented by the derived class """pass
@abc.abstractmethoddef__add__(self,rhs):# pragma: no coverpass
[docs]defto_dataframe(self,datetime_format=None):""" Returns the model catalog summary as a pandas dataframe Parameters ---------- datatime_format: date_format A datetime format, like utils.date_format. Defaults to none. Returns ------- Dataframe: The pandas DataFrame repersentation of the model catalog summary """df=self.df.copy()ifdatetime_formatisnotNone:df["time_created"]=pd.to_datetime(df["time_created"]).dt.strftime(datetime_format)returndf
[docs]@runtime_dependency(module="IPython",install_from=OptionalDependency.NOTEBOOK)defshow_in_notebook(self,datetime_format=None):""" Displays the model catalog summary in a Jupyter Notebook cell Parameters ---------- date_format: like utils.date_format. Defaults to none. Returns ------- None """fromIPython.core.displayimportdisplaydisplay(self.to_dataframe(datetime_format=datetime_format).style.applymap(self._color_lifecycle_state,subset=["lifecycle_state"]))
def_repr_html_(self):returnself.df.style.applymap(self._color_lifecycle_state,subset=["lifecycle_state"]).to_html()def_sort_by(self,cols,reverse=False):returnsorted(self,key=lambdax:([getattr(x,col).lower()ifisinstance(getattr(x,col),str)elsegetattr(x,col)forcolincols]),reverse=reverse,)def_color_lifecycle_state(self,lifecycle_state):""" Takes a scalar and returns a string with the css property """iflifecycle_state=="INACTIVE":color="grey"eliflifecycle_state=="ACTIVE":color="green"eliflifecycle_state=="DELETING":color="black"eliflifecycle_state=="CREATING":color="blue"eliflifecycle_state=="DELETED":color="black"eliflifecycle_state=="FAILED":color="red"return"color: %s"%color