pinecone.openapi_support.rest_aiohttp
1import ssl 2import certifi 3import json 4from .rest_utils import RestClientInterface, RESTResponse, raise_exceptions_or_return 5from .configuration import Configuration 6 7 8class AiohttpRestClient(RestClientInterface): 9 def __init__(self, configuration: Configuration) -> None: 10 try: 11 import aiohttp 12 except ImportError: 13 raise ImportError( 14 "Additional dependencies are required to use Pinecone with asyncio. Include these extra dependencies in your project by installing `pinecone[asyncio]`." 15 ) from None 16 17 if configuration.ssl_ca_cert is not None: 18 ca_certs = configuration.ssl_ca_cert 19 else: 20 ca_certs = certifi.where() 21 22 ssl_context = ssl.create_default_context(cafile=ca_certs) 23 24 conn = aiohttp.TCPConnector(verify_ssl=configuration.verify_ssl, ssl=ssl_context) 25 26 if configuration.proxy: 27 self._session = aiohttp.ClientSession(connector=conn, proxy=configuration.proxy) 28 else: 29 self._session = aiohttp.ClientSession(connector=conn) 30 31 async def close(self): 32 await self._session.close() 33 34 async def request( 35 self, 36 method, 37 url, 38 query_params=None, 39 headers=None, 40 body=None, 41 post_params=None, 42 _preload_content=True, 43 _request_timeout=None, 44 ): 45 if method in ["POST", "PUT", "PATCH", "OPTIONS"] and ("Content-Type" not in headers): 46 headers["Content-Type"] = "application/json" 47 48 if "application/x-ndjson" in headers.get("Content-Type", "").lower(): 49 ndjson_data = "\n".join(json.dumps(record) for record in body) 50 51 async with self._session.request( 52 method, url, params=query_params, headers=headers, data=ndjson_data 53 ) as resp: 54 content = await resp.read() 55 return raise_exceptions_or_return( 56 RESTResponse(resp.status, content, resp.headers, resp.reason) 57 ) 58 59 else: 60 async with self._session.request( 61 method, url, params=query_params, headers=headers, json=body 62 ) as resp: 63 content = await resp.read() 64 return raise_exceptions_or_return( 65 RESTResponse(resp.status, content, resp.headers, resp.reason) 66 ) 67 68 async def GET( 69 self, url, headers=None, query_params=None, _preload_content=True, _request_timeout=None 70 ): 71 return await self.request( 72 "GET", 73 url, 74 headers=headers, 75 _preload_content=_preload_content, 76 _request_timeout=_request_timeout, 77 query_params=query_params, 78 ) 79 80 async def HEAD( 81 self, url, headers=None, query_params=None, _preload_content=True, _request_timeout=None 82 ): 83 return await self.request( 84 "HEAD", 85 url, 86 headers=headers, 87 _preload_content=_preload_content, 88 _request_timeout=_request_timeout, 89 query_params=query_params, 90 ) 91 92 async def OPTIONS( 93 self, 94 url, 95 headers=None, 96 query_params=None, 97 post_params=None, 98 body=None, 99 _preload_content=True, 100 _request_timeout=None, 101 ): 102 return await self.request( 103 "OPTIONS", 104 url, 105 headers=headers, 106 query_params=query_params, 107 post_params=post_params, 108 _preload_content=_preload_content, 109 _request_timeout=_request_timeout, 110 body=body, 111 ) 112 113 async def DELETE( 114 self, 115 url, 116 headers=None, 117 query_params=None, 118 body=None, 119 _preload_content=True, 120 _request_timeout=None, 121 ): 122 return await self.request( 123 "DELETE", 124 url, 125 headers=headers, 126 query_params=query_params, 127 _preload_content=_preload_content, 128 _request_timeout=_request_timeout, 129 body=body, 130 ) 131 132 async def POST( 133 self, 134 url, 135 headers=None, 136 query_params=None, 137 post_params=None, 138 body=None, 139 _preload_content=True, 140 _request_timeout=None, 141 ): 142 return await self.request( 143 "POST", 144 url, 145 headers=headers, 146 query_params=query_params, 147 post_params=post_params, 148 _preload_content=_preload_content, 149 _request_timeout=_request_timeout, 150 body=body, 151 ) 152 153 async def PUT( 154 self, 155 url, 156 headers=None, 157 query_params=None, 158 post_params=None, 159 body=None, 160 _preload_content=True, 161 _request_timeout=None, 162 ): 163 return await self.request( 164 "PUT", 165 url, 166 headers=headers, 167 query_params=query_params, 168 post_params=post_params, 169 _preload_content=_preload_content, 170 _request_timeout=_request_timeout, 171 body=body, 172 ) 173 174 async def PATCH( 175 self, 176 url, 177 headers=None, 178 query_params=None, 179 post_params=None, 180 body=None, 181 _preload_content=True, 182 _request_timeout=None, 183 ): 184 return await self.request( 185 "PATCH", 186 url, 187 headers=headers, 188 query_params=query_params, 189 post_params=post_params, 190 _preload_content=_preload_content, 191 _request_timeout=_request_timeout, 192 body=body, 193 )
9class AiohttpRestClient(RestClientInterface): 10 def __init__(self, configuration: Configuration) -> None: 11 try: 12 import aiohttp 13 except ImportError: 14 raise ImportError( 15 "Additional dependencies are required to use Pinecone with asyncio. Include these extra dependencies in your project by installing `pinecone[asyncio]`." 16 ) from None 17 18 if configuration.ssl_ca_cert is not None: 19 ca_certs = configuration.ssl_ca_cert 20 else: 21 ca_certs = certifi.where() 22 23 ssl_context = ssl.create_default_context(cafile=ca_certs) 24 25 conn = aiohttp.TCPConnector(verify_ssl=configuration.verify_ssl, ssl=ssl_context) 26 27 if configuration.proxy: 28 self._session = aiohttp.ClientSession(connector=conn, proxy=configuration.proxy) 29 else: 30 self._session = aiohttp.ClientSession(connector=conn) 31 32 async def close(self): 33 await self._session.close() 34 35 async def request( 36 self, 37 method, 38 url, 39 query_params=None, 40 headers=None, 41 body=None, 42 post_params=None, 43 _preload_content=True, 44 _request_timeout=None, 45 ): 46 if method in ["POST", "PUT", "PATCH", "OPTIONS"] and ("Content-Type" not in headers): 47 headers["Content-Type"] = "application/json" 48 49 if "application/x-ndjson" in headers.get("Content-Type", "").lower(): 50 ndjson_data = "\n".join(json.dumps(record) for record in body) 51 52 async with self._session.request( 53 method, url, params=query_params, headers=headers, data=ndjson_data 54 ) as resp: 55 content = await resp.read() 56 return raise_exceptions_or_return( 57 RESTResponse(resp.status, content, resp.headers, resp.reason) 58 ) 59 60 else: 61 async with self._session.request( 62 method, url, params=query_params, headers=headers, json=body 63 ) as resp: 64 content = await resp.read() 65 return raise_exceptions_or_return( 66 RESTResponse(resp.status, content, resp.headers, resp.reason) 67 ) 68 69 async def GET( 70 self, url, headers=None, query_params=None, _preload_content=True, _request_timeout=None 71 ): 72 return await self.request( 73 "GET", 74 url, 75 headers=headers, 76 _preload_content=_preload_content, 77 _request_timeout=_request_timeout, 78 query_params=query_params, 79 ) 80 81 async def HEAD( 82 self, url, headers=None, query_params=None, _preload_content=True, _request_timeout=None 83 ): 84 return await self.request( 85 "HEAD", 86 url, 87 headers=headers, 88 _preload_content=_preload_content, 89 _request_timeout=_request_timeout, 90 query_params=query_params, 91 ) 92 93 async def OPTIONS( 94 self, 95 url, 96 headers=None, 97 query_params=None, 98 post_params=None, 99 body=None, 100 _preload_content=True, 101 _request_timeout=None, 102 ): 103 return await self.request( 104 "OPTIONS", 105 url, 106 headers=headers, 107 query_params=query_params, 108 post_params=post_params, 109 _preload_content=_preload_content, 110 _request_timeout=_request_timeout, 111 body=body, 112 ) 113 114 async def DELETE( 115 self, 116 url, 117 headers=None, 118 query_params=None, 119 body=None, 120 _preload_content=True, 121 _request_timeout=None, 122 ): 123 return await self.request( 124 "DELETE", 125 url, 126 headers=headers, 127 query_params=query_params, 128 _preload_content=_preload_content, 129 _request_timeout=_request_timeout, 130 body=body, 131 ) 132 133 async def POST( 134 self, 135 url, 136 headers=None, 137 query_params=None, 138 post_params=None, 139 body=None, 140 _preload_content=True, 141 _request_timeout=None, 142 ): 143 return await self.request( 144 "POST", 145 url, 146 headers=headers, 147 query_params=query_params, 148 post_params=post_params, 149 _preload_content=_preload_content, 150 _request_timeout=_request_timeout, 151 body=body, 152 ) 153 154 async def PUT( 155 self, 156 url, 157 headers=None, 158 query_params=None, 159 post_params=None, 160 body=None, 161 _preload_content=True, 162 _request_timeout=None, 163 ): 164 return await self.request( 165 "PUT", 166 url, 167 headers=headers, 168 query_params=query_params, 169 post_params=post_params, 170 _preload_content=_preload_content, 171 _request_timeout=_request_timeout, 172 body=body, 173 ) 174 175 async def PATCH( 176 self, 177 url, 178 headers=None, 179 query_params=None, 180 post_params=None, 181 body=None, 182 _preload_content=True, 183 _request_timeout=None, 184 ): 185 return await self.request( 186 "PATCH", 187 url, 188 headers=headers, 189 query_params=query_params, 190 post_params=post_params, 191 _preload_content=_preload_content, 192 _request_timeout=_request_timeout, 193 body=body, 194 )
Helper class that provides a standard way to create an ABC using inheritance.
AiohttpRestClient(configuration: pinecone.openapi_support.configuration.Configuration)
10 def __init__(self, configuration: Configuration) -> None: 11 try: 12 import aiohttp 13 except ImportError: 14 raise ImportError( 15 "Additional dependencies are required to use Pinecone with asyncio. Include these extra dependencies in your project by installing `pinecone[asyncio]`." 16 ) from None 17 18 if configuration.ssl_ca_cert is not None: 19 ca_certs = configuration.ssl_ca_cert 20 else: 21 ca_certs = certifi.where() 22 23 ssl_context = ssl.create_default_context(cafile=ca_certs) 24 25 conn = aiohttp.TCPConnector(verify_ssl=configuration.verify_ssl, ssl=ssl_context) 26 27 if configuration.proxy: 28 self._session = aiohttp.ClientSession(connector=conn, proxy=configuration.proxy) 29 else: 30 self._session = aiohttp.ClientSession(connector=conn)
async def
request( self, method, url, query_params=None, headers=None, body=None, post_params=None, _preload_content=True, _request_timeout=None):
35 async def request( 36 self, 37 method, 38 url, 39 query_params=None, 40 headers=None, 41 body=None, 42 post_params=None, 43 _preload_content=True, 44 _request_timeout=None, 45 ): 46 if method in ["POST", "PUT", "PATCH", "OPTIONS"] and ("Content-Type" not in headers): 47 headers["Content-Type"] = "application/json" 48 49 if "application/x-ndjson" in headers.get("Content-Type", "").lower(): 50 ndjson_data = "\n".join(json.dumps(record) for record in body) 51 52 async with self._session.request( 53 method, url, params=query_params, headers=headers, data=ndjson_data 54 ) as resp: 55 content = await resp.read() 56 return raise_exceptions_or_return( 57 RESTResponse(resp.status, content, resp.headers, resp.reason) 58 ) 59 60 else: 61 async with self._session.request( 62 method, url, params=query_params, headers=headers, json=body 63 ) as resp: 64 content = await resp.read() 65 return raise_exceptions_or_return( 66 RESTResponse(resp.status, content, resp.headers, resp.reason) 67 )
async def
GET( self, url, headers=None, query_params=None, _preload_content=True, _request_timeout=None):
async def
HEAD( self, url, headers=None, query_params=None, _preload_content=True, _request_timeout=None):
async def
OPTIONS( self, url, headers=None, query_params=None, post_params=None, body=None, _preload_content=True, _request_timeout=None):
93 async def OPTIONS( 94 self, 95 url, 96 headers=None, 97 query_params=None, 98 post_params=None, 99 body=None, 100 _preload_content=True, 101 _request_timeout=None, 102 ): 103 return await self.request( 104 "OPTIONS", 105 url, 106 headers=headers, 107 query_params=query_params, 108 post_params=post_params, 109 _preload_content=_preload_content, 110 _request_timeout=_request_timeout, 111 body=body, 112 )
async def
DELETE( self, url, headers=None, query_params=None, body=None, _preload_content=True, _request_timeout=None):
114 async def DELETE( 115 self, 116 url, 117 headers=None, 118 query_params=None, 119 body=None, 120 _preload_content=True, 121 _request_timeout=None, 122 ): 123 return await self.request( 124 "DELETE", 125 url, 126 headers=headers, 127 query_params=query_params, 128 _preload_content=_preload_content, 129 _request_timeout=_request_timeout, 130 body=body, 131 )
async def
POST( self, url, headers=None, query_params=None, post_params=None, body=None, _preload_content=True, _request_timeout=None):
133 async def POST( 134 self, 135 url, 136 headers=None, 137 query_params=None, 138 post_params=None, 139 body=None, 140 _preload_content=True, 141 _request_timeout=None, 142 ): 143 return await self.request( 144 "POST", 145 url, 146 headers=headers, 147 query_params=query_params, 148 post_params=post_params, 149 _preload_content=_preload_content, 150 _request_timeout=_request_timeout, 151 body=body, 152 )
async def
PUT( self, url, headers=None, query_params=None, post_params=None, body=None, _preload_content=True, _request_timeout=None):
154 async def PUT( 155 self, 156 url, 157 headers=None, 158 query_params=None, 159 post_params=None, 160 body=None, 161 _preload_content=True, 162 _request_timeout=None, 163 ): 164 return await self.request( 165 "PUT", 166 url, 167 headers=headers, 168 query_params=query_params, 169 post_params=post_params, 170 _preload_content=_preload_content, 171 _request_timeout=_request_timeout, 172 body=body, 173 )
async def
PATCH( self, url, headers=None, query_params=None, post_params=None, body=None, _preload_content=True, _request_timeout=None):
175 async def PATCH( 176 self, 177 url, 178 headers=None, 179 query_params=None, 180 post_params=None, 181 body=None, 182 _preload_content=True, 183 _request_timeout=None, 184 ): 185 return await self.request( 186 "PATCH", 187 url, 188 headers=headers, 189 query_params=query_params, 190 post_params=post_params, 191 _preload_content=_preload_content, 192 _request_timeout=_request_timeout, 193 body=body, 194 )