diff --git a/pinecone/control/__init__.py b/pinecone/control/__init__.py index 4c739f1a..dc6bf1e2 100644 --- a/pinecone/control/__init__.py +++ b/pinecone/control/__init__.py @@ -1 +1,5 @@ from .pinecone import Pinecone + +from .repr_overrides import install_repr_overrides + +install_repr_overrides() diff --git a/pinecone/control/repr_overrides.py b/pinecone/control/repr_overrides.py new file mode 100644 index 00000000..4cf76c7c --- /dev/null +++ b/pinecone/control/repr_overrides.py @@ -0,0 +1,17 @@ +from pinecone.models.index_model import IndexModel +from pinecone.core.openapi.control.models import CollectionModel + +import json + + +def install_repr_overrides(): + """ + The generator code uses pprint.pformat to format the repr output + which looks really poor when printing a list of large objects + in a notebook setting. We override it here for a few select models + instead of modifying the generator code because the more compact output + from pprint.pformat seems better for data plane objects such as lists of + query results. + """ + for model in [IndexModel, CollectionModel]: + model.__repr__ = lambda self: json.dumps(self.to_dict(), indent=4, sort_keys=False) diff --git a/pinecone/models/collection_list.py b/pinecone/models/collection_list.py index 9b788cee..865a55ac 100644 --- a/pinecone/models/collection_list.py +++ b/pinecone/models/collection_list.py @@ -1,3 +1,4 @@ +import json from pinecone.core.openapi.control.models import ( CollectionList as OpenAPICollectionList, ) @@ -28,7 +29,7 @@ def __str__(self): return str(self.collection_list) def __repr__(self): - return repr(self.collection_list) + return json.dumps([c.to_dict() for c in self.collection_list.collections], indent=4) def __getattr__(self, attr): return getattr(self.collection_list, attr) diff --git a/pinecone/models/index_list.py b/pinecone/models/index_list.py index 6c524489..5240ebe4 100644 --- a/pinecone/models/index_list.py +++ b/pinecone/models/index_list.py @@ -1,3 +1,4 @@ +import json from pinecone.core.openapi.control.models import IndexList as OpenAPIIndexList from .index_model import IndexModel @@ -21,10 +22,10 @@ def __iter__(self): return iter(self.indexes) def __str__(self): - return str(self.index_list) + return str(self.indexes) def __repr__(self): - return repr(self.index_list) + return json.dumps([i.to_dict() for i in self.indexes], indent=4) def __getattr__(self, attr): return getattr(self.index_list, attr) diff --git a/pinecone/models/index_model.py b/pinecone/models/index_model.py index 9d46b0ed..ebf5d238 100644 --- a/pinecone/models/index_model.py +++ b/pinecone/models/index_model.py @@ -9,11 +9,11 @@ def __init__(self, index: OpenAPIIndexModel): def __str__(self): return str(self.index) - def __repr__(self): - return repr(self.index) - def __getattr__(self, attr): return getattr(self.index, attr) def __getitem__(self, key): return self.__getattr__(key) + + def to_dict(self): + return self.index.to_dict()