Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
Improve
AttributeError
warnings when using deprecated methods (#291)
## Problem In v3.0, many methods have moved from the top-level namespace onto a class instance. We can throw more informative errors to help people migrate. ## Solution Add back stub implementations of methods that were removed. When called, they throw errors with useful documentation. I simplified the expected args for all methods to `*args, **kwargs` which should match no matter what combination of arguments the user has provided. ## Type of Change - [x] New feature (non-breaking change which adds functionality) ## Test Plan `poetry run python3` and then try it: ``` poetry run python3 Python 3.9.16 (main, May 2 2023, 18:16:09) [Clang 14.0.3 (clang-1403.0.22.14.1)] on darwin Type "help", "copyright", "credits" or "license" for more information. >>> import pinecone >>> pinecone.list_indexes() Traceback (most recent call last): File "<stdin>", line 1, in <module> File "/Users/jhamon/workspace/pinecone-python-client/pinecone/deprecation_warnings.py", line 21, in list_indexes raise AttributeError(_build_class_migration_message('list_indexes', example)) AttributeError: list_indexes is no longer top-level attribute of the pinecone package. To use list_indexes, please create a client instance and call the method there instead. Example: from pinecone import Pinecone pc = Pinecone(api_key='YOUR_API_KEY') index_name = "quickstart" # or your index name if index_name not in pc.list_indexes().names(): # do something >>> pinecone.create_index('quickstart', dimension=8, metric='cosine') Traceback (most recent call last): File "<stdin>", line 1, in <module> File "/Users/jhamon/workspace/pinecone-python-client/pinecone/deprecation_warnings.py", line 48, in create_index raise AttributeError(_build_class_migration_message('create_index', example)) AttributeError: create_index is no longer top-level attribute of the pinecone package. To use create_index, please create a client instance and call the method there instead. Example: from pinecone import Pinecone, ServerlessSpec pc = Pinecone(api_key='YOUR_API_KEY') pc.create_index( name='my-index', dimension=1536, metric='euclidean', spec=ServerlessSpec( cloud='aws', region='us-west-2' ) ) >>> pinecone.describe_index('asdf') Traceback (most recent call last): File "<stdin>", line 1, in <module> File "/Users/jhamon/workspace/pinecone-python-client/pinecone/deprecation_warnings.py", line 30, in describe_index raise AttributeError(_build_class_migration_message('describe_index', example)) AttributeError: describe_index is no longer top-level attribute of the pinecone package. To use describe_index, please create a client instance and call the method there instead. Example: from pinecone import Pinecone pc = Pinecone(api_key='YOUR_API_KEY') pc.describe_index('my_index') ``` And `pinecone.init()` ``` >>> pinecone.init() Traceback (most recent call last): File "<stdin>", line 1, in <module> File "/Users/jhamon/workspace/pinecone-python-client/pinecone/deprecation_warnings.py", line 38, in init raise AttributeError(msg) AttributeError: init is no longer a top-level attribute of the pinecone package. Please create an instance of the Pinecone class instead. Example: import os from pinecone import Pinecone, ServerlessSpec pc = Pinecone( api_key=os.environ.get("PINECONE_API_KEY") ) # Now do stuff if 'my_index' not in pc.list_indexes().names(): pc.create_index( name='my_index', dimension=1536, metric='euclidean', spec=ServerlessSpec( cloud='aws', region='us-west-2' ) ) ```
- Loading branch information