Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Detect plugins for Index and IndexGRPC classes #402

Open
wants to merge 2 commits into
base: main
Choose a base branch
from
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
35 changes: 30 additions & 5 deletions pinecone/data/index.py
Original file line number Diff line number Diff line change
@@ -1,11 +1,11 @@
from tqdm.autonotebook import tqdm

import logging
from typing import Union, List, Optional, Dict, Any

from pinecone.config import ConfigBuilder

from pinecone.core.openapi.shared import API_VERSION
from pinecone.core.openapi.data.models import SparseValues
from pinecone.core.openapi.data import ApiClient
from pinecone.core.openapi.data.models import (
FetchResponse,
Expand All @@ -22,12 +22,22 @@
UpdateRequest,
DescribeIndexStatsRequest,
ListResponse,
SparseValues,
)
from .features.bulk_import import ImportFeatureMixin
from pinecone.core.openapi.data.api.data_plane_api import DataPlaneApi
from ..utils import setup_openapi_client, parse_non_empty_args
from ..utils import (
setup_openapi_client,
parse_non_empty_args,
build_plugin_setup_client,
validate_and_convert_errors,
)
from .features.bulk_import import ImportFeatureMixin
Comment on lines +28 to +34
Copy link
Collaborator Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Most of these import changes are just cosmetic

from .vector_factory import VectorFactory

from pinecone_plugin_interface import load_and_install as install_plugins

logger = logging.getLogger(__name__)

__all__ = [
"Index",
"FetchResponse",
Expand All @@ -47,8 +57,6 @@
"SparseValues",
]

from ..utils.error_handling import validate_and_convert_errors

_OPENAPI_ENDPOINT_PARAMS = (
"_return_http_data_only",
"_preload_content",
Expand Down Expand Up @@ -103,6 +111,23 @@ def __init__(
api_version=API_VERSION,
)

self._load_plugins()

def _load_plugins(self):
"""@private"""
try:
# I don't expect this to ever throw, but wrapping this in a
# try block just in case to make sure a bad plugin doesn't
# halt client initialization.
openapi_client_builder = build_plugin_setup_client(
config=self.config,
openapi_config=self.openapi_config,
pool_threads=self.pool_threads,
)
install_plugins(self, openapi_client_builder)
except Exception as e:
logger.error(f"Error loading plugins in Index: {e}")

def __enter__(self):
return self

Expand Down
18 changes: 18 additions & 0 deletions pinecone/grpc/base.py
Original file line number Diff line number Diff line change
@@ -1,6 +1,7 @@
from abc import ABC, abstractmethod
from typing import Optional

import logging
import grpc
from grpc._channel import Channel

Expand All @@ -10,6 +11,10 @@
from .config import GRPCClientConfig
from .grpc_runner import GrpcRunner

from pinecone_plugin_interface import load_and_install as install_plugins

_logger = logging.getLogger(__name__)


class GRPCIndexBase(ABC):
"""
Expand Down Expand Up @@ -40,6 +45,19 @@ def __init__(
self._channel = channel or self._gen_channel()
self.stub = self.stub_class(self._channel)

self._load_plugins()

def _load_plugins(self):
"""@private"""
try:

def stub_openapi_client_builder(*args, **kwargs):
pass

install_plugins(self, stub_openapi_client_builder)
except Exception as e:
_logger.error(f"Error loading plugins in GRPCIndex: {e}")

@property
@abstractmethod
def stub_class(self):
Expand Down
2 changes: 2 additions & 0 deletions pinecone/utils/__init__.py
Original file line number Diff line number Diff line change
Expand Up @@ -9,6 +9,7 @@
from .parse_args import parse_non_empty_args
from .docslinks import docslinks
from .repr_overrides import install_json_repr_override
from .error_handling import validate_and_convert_errors

__all__ = [
"check_kwargs",
Expand All @@ -23,4 +24,5 @@
"parse_non_empty_args",
"docslinks",
"install_json_repr_override",
"validate_and_convert_errors",
]
Loading