Rename module to opensearchpy
To avoid conflict with an existing package by name 'opensearch' being present Signed-off-by: Rushi Agrawal <rushi.agr@gmail.com>
This commit is contained in:
@@ -32,7 +32,7 @@ pip install git+https://github.com/opensearch-project/opensearch-py.git
|
||||
Then import it like any other module:
|
||||
|
||||
```python
|
||||
from opensearch import OpenSearch
|
||||
from opensearchpy import OpenSearch
|
||||
```
|
||||
|
||||
If you prefer to add the client manually or just want to examine the source code, see [opensearch-py on GitHub](https://github.com/opensearch-project/opensearch-py).
|
||||
@@ -41,7 +41,7 @@ If you prefer to add the client manually or just want to examine the source code
|
||||
## Sample code
|
||||
|
||||
```python
|
||||
from opensearch import OpenSearch
|
||||
from opensearchpy import OpenSearch
|
||||
|
||||
host = 'localhost'
|
||||
port = 9200
|
||||
|
||||
+7
-7
@@ -29,8 +29,8 @@ import nox
|
||||
SOURCE_FILES = (
|
||||
"setup.py",
|
||||
"noxfile.py",
|
||||
"opensearch/",
|
||||
"test_opensearch/",
|
||||
"opensearchpy/",
|
||||
"test_opensearchpy/",
|
||||
"utils/",
|
||||
)
|
||||
|
||||
@@ -68,15 +68,15 @@ def lint(session):
|
||||
|
||||
# Run mypy on the package and then the type examples separately for
|
||||
# the two different mypy use-cases, ourselves and our users.
|
||||
session.run("mypy", "--strict", "opensearch/")
|
||||
session.run("mypy", "--strict", "test_opensearch/test_types/sync_types.py")
|
||||
session.run("mypy", "--strict", "test_opensearch/test_types/async_types.py")
|
||||
session.run("mypy", "--strict", "opensearchpy/")
|
||||
session.run("mypy", "--strict", "test_opensearchpy/test_types/sync_types.py")
|
||||
session.run("mypy", "--strict", "test_opensearchpy/test_types/async_types.py")
|
||||
|
||||
# Make sure we don't require aiohttp to be installed for users to
|
||||
# receive type hint information from mypy.
|
||||
session.run("python", "-m", "pip", "uninstall", "--yes", "aiohttp")
|
||||
session.run("mypy", "--strict", "opensearch/")
|
||||
session.run("mypy", "--strict", "test_opensearch/test_types/sync_types.py")
|
||||
session.run("mypy", "--strict", "opensearchpy/")
|
||||
session.run("mypy", "--strict", "test_opensearchpy/test_types/sync_types.py")
|
||||
|
||||
|
||||
@nox.session()
|
||||
|
||||
@@ -52,13 +52,13 @@ class AsyncOpenSearch(object):
|
||||
|
||||
The instance has attributes ``cat``, ``cluster``, ``indices``, ``ingest``,
|
||||
``nodes``, ``snapshot`` and ``tasks`` that provide access to instances of
|
||||
:class:`~opensearch.client.CatClient`,
|
||||
:class:`~opensearch.client.ClusterClient`,
|
||||
:class:`~opensearch.client.IndicesClient`,
|
||||
:class:`~opensearch.client.IngestClient`,
|
||||
:class:`~opensearch.client.NodesClient`,
|
||||
:class:`~opensearch.client.SnapshotClient` and
|
||||
:class:`~opensearch.client.TasksClient` respectively. This is the
|
||||
:class:`~opensearchpy.client.CatClient`,
|
||||
:class:`~opensearchpy.client.ClusterClient`,
|
||||
:class:`~opensearchpy.client.IndicesClient`,
|
||||
:class:`~opensearchpy.client.IngestClient`,
|
||||
:class:`~opensearchpy.client.NodesClient`,
|
||||
:class:`~opensearchpy.client.SnapshotClient` and
|
||||
:class:`~opensearchpy.client.TasksClient` respectively. This is the
|
||||
preferred (and only supported) way to get access to those classes and their
|
||||
methods.
|
||||
|
||||
@@ -69,7 +69,7 @@ class AsyncOpenSearch(object):
|
||||
client = OpenSearch(connection_class=ThriftConnection)
|
||||
|
||||
If you want to turn on :ref:`sniffing` you have several options (described
|
||||
in :class:`~opensearch.Transport`)::
|
||||
in :class:`~opensearchpy.Transport`)::
|
||||
|
||||
# create connection that will automatically inspect the cluster to get
|
||||
# the list of active nodes. Start with nodes running on
|
||||
@@ -95,7 +95,7 @@ class AsyncOpenSearch(object):
|
||||
])
|
||||
|
||||
If using SSL, there are several parameters that control how we deal with
|
||||
certificates (see :class:`~opensearch.Urllib3HttpConnection` for
|
||||
certificates (see :class:`~opensearchpy.Urllib3HttpConnection` for
|
||||
detailed description of the options)::
|
||||
|
||||
client = OpenSearch(
|
||||
@@ -109,7 +109,7 @@ class AsyncOpenSearch(object):
|
||||
)
|
||||
|
||||
If using SSL, but don't verify the certs, a warning message is showed
|
||||
optionally (see :class:`~opensearch.Urllib3HttpConnection` for
|
||||
optionally (see :class:`~opensearchpy.Urllib3HttpConnection` for
|
||||
detailed description of the options)::
|
||||
|
||||
client = OpenSearch(
|
||||
@@ -123,7 +123,7 @@ class AsyncOpenSearch(object):
|
||||
)
|
||||
|
||||
SSL client authentication is supported
|
||||
(see :class:`~opensearch.Urllib3HttpConnection` for
|
||||
(see :class:`~opensearchpy.Urllib3HttpConnection` for
|
||||
detailed description of the options)::
|
||||
|
||||
client = OpenSearch(
|
||||
@@ -156,7 +156,7 @@ class AsyncOpenSearch(object):
|
||||
is used to encode all outgoing requests.
|
||||
However, you can implement your own custom serializer::
|
||||
|
||||
from opensearch.serializer import JSONSerializer
|
||||
from opensearchpy.serializer import JSONSerializer
|
||||
|
||||
class SetEncoder(JSONSerializer):
|
||||
def default(self, obj):
|
||||
@@ -174,16 +174,16 @@ class AsyncOpenSearch(object):
|
||||
"""
|
||||
:arg hosts: list of nodes, or a single node, we should connect to.
|
||||
Node should be a dictionary ({"host": "localhost", "port": 9200}),
|
||||
the entire dictionary will be passed to the :class:`~opensearch.Connection`
|
||||
the entire dictionary will be passed to the :class:`~opensearchpy.Connection`
|
||||
class as kwargs, or a string in the format of ``host[:port]`` which will be
|
||||
translated to a dictionary automatically. If no value is given the
|
||||
:class:`~opensearch.Connection` class defaults will be used.
|
||||
:class:`~opensearchpy.Connection` class defaults will be used.
|
||||
|
||||
:arg transport_class: :class:`~opensearch.Transport` subclass to use.
|
||||
:arg transport_class: :class:`~opensearchpy.Transport` subclass to use.
|
||||
|
||||
:arg kwargs: any additional arguments will be passed on to the
|
||||
:class:`~opensearch.Transport` class and, subsequently, to the
|
||||
:class:`~opensearch.Connection` instances.
|
||||
:class:`~opensearchpy.Transport` class and, subsequently, to the
|
||||
:class:`~opensearchpy.Connection` instances.
|
||||
"""
|
||||
self.transport = transport_class(_normalize_hosts(hosts), **kwargs)
|
||||
|
||||
@@ -42,7 +42,7 @@ from ..helpers.actions import (
|
||||
from ..helpers.errors import ScanError
|
||||
from .client import AsyncOpenSearch # noqa
|
||||
|
||||
logger = logging.getLogger("opensearch.helpers")
|
||||
logger = logging.getLogger("opensearchpy.helpers")
|
||||
|
||||
|
||||
async def _chunk_actions(actions, chunk_size, max_chunk_bytes, serializer):
|
||||
@@ -146,7 +146,7 @@ async def async_streaming_bulk(
|
||||
"""
|
||||
Streaming bulk consumes actions from the iterable passed in and yields
|
||||
results per action. For non-streaming usecases use
|
||||
:func:`~opensearch.helpers.async_bulk` which is a wrapper around streaming
|
||||
:func:`~opensearchpy.helpers.async_bulk` which is a wrapper around streaming
|
||||
bulk that returns summary information about the bulk operation once the
|
||||
entire input is consumed and sent.
|
||||
|
||||
@@ -156,7 +156,7 @@ async def async_streaming_bulk(
|
||||
every subsequent rejection for the same chunk, for double the time every
|
||||
time up to ``max_backoff`` seconds.
|
||||
|
||||
:arg client: instance of :class:`~opensearch.AsyncOpenSearch` to use
|
||||
:arg client: instance of :class:`~opensearchpy.AsyncOpenSearch` to use
|
||||
:arg actions: iterable or async iterable containing the actions to be executed
|
||||
:arg chunk_size: number of docs in one chunk sent to client (default: 500)
|
||||
:arg max_chunk_bytes: the maximum size of the request in bytes (default: 100MB)
|
||||
@@ -242,7 +242,7 @@ async def async_bulk(
|
||||
client, actions, stats_only=False, ignore_status=(), *args, **kwargs
|
||||
):
|
||||
"""
|
||||
Helper for the :meth:`~opensearch.AsyncOpenSearch.bulk` api that provides
|
||||
Helper for the :meth:`~opensearchpy.AsyncOpenSearch.bulk` api that provides
|
||||
a more human friendly interface - it consumes an iterator of actions and
|
||||
sends them to opensearch in chunks. It returns a tuple with summary
|
||||
information - number of successfully executed actions and either list of
|
||||
@@ -254,19 +254,19 @@ async def async_bulk(
|
||||
When errors are being collected original document data is included in the
|
||||
error dictionary which can lead to an extra high memory usage. If you need
|
||||
to process a lot of data and want to ignore/collect errors please consider
|
||||
using the :func:`~opensearch.helpers.async_streaming_bulk` helper which will
|
||||
using the :func:`~opensearchpy.helpers.async_streaming_bulk` helper which will
|
||||
just return the errors and not store them in memory.
|
||||
|
||||
|
||||
:arg client: instance of :class:`~opensearch.AsyncOpenSearch` to use
|
||||
:arg client: instance of :class:`~opensearchpy.AsyncOpenSearch` to use
|
||||
:arg actions: iterator containing the actions
|
||||
:arg stats_only: if `True` only report number of successful/failed
|
||||
operations instead of just number of successful and a list of error responses
|
||||
:arg ignore_status: list of HTTP status code that you want to ignore
|
||||
|
||||
Any additional keyword arguments will be passed to
|
||||
:func:`~opensearch.helpers.async_streaming_bulk` which is used to execute
|
||||
the operation, see :func:`~opensearch.helpers.async_streaming_bulk` for more
|
||||
:func:`~opensearchpy.helpers.async_streaming_bulk` which is used to execute
|
||||
the operation, see :func:`~opensearchpy.helpers.async_streaming_bulk` for more
|
||||
accepted parameters.
|
||||
"""
|
||||
success, failed = 0, 0
|
||||
@@ -304,7 +304,7 @@ async def async_scan(
|
||||
):
|
||||
"""
|
||||
Simple abstraction on top of the
|
||||
:meth:`~opensearch.AsyncOpenSearch.scroll` api - a simple iterator that
|
||||
:meth:`~opensearchpy.AsyncOpenSearch.scroll` api - a simple iterator that
|
||||
yields all hits as returned by underlining scroll requests.
|
||||
|
||||
By default scan does not return results in any pre-determined order. To
|
||||
@@ -313,8 +313,8 @@ async def async_scan(
|
||||
may be an expensive operation and will negate the performance benefits of
|
||||
using ``scan``.
|
||||
|
||||
:arg client: instance of :class:`~opensearch.AsyncOpenSearch` to use
|
||||
:arg query: body for the :meth:`~opensearch.AsyncOpenSearch.search` api
|
||||
:arg client: instance of :class:`~opensearchpy.AsyncOpenSearch` to use
|
||||
:arg query: body for the :meth:`~opensearchpy.AsyncOpenSearch.search` api
|
||||
:arg scroll: Specify how long a consistent view of the index should be
|
||||
maintained for scrolled search
|
||||
:arg raise_on_error: raises an exception (``ScanError``) if an error is
|
||||
@@ -329,10 +329,10 @@ async def async_scan(
|
||||
scroll API at the end of the method on completion or error, defaults
|
||||
to true.
|
||||
:arg scroll_kwargs: additional kwargs to be passed to
|
||||
:meth:`~opensearch.AsyncOpenSearch.scroll`
|
||||
:meth:`~opensearchpy.AsyncOpenSearch.scroll`
|
||||
|
||||
Any additional keyword arguments will be passed to the initial
|
||||
:meth:`~opensearch.AsyncOpenSearch.search` call::
|
||||
:meth:`~opensearchpy.AsyncOpenSearch.search` call::
|
||||
|
||||
async_scan(client,
|
||||
query={"query": {"match": {"title": "python"}}},
|
||||
@@ -427,7 +427,7 @@ async def async_reindex(
|
||||
to another, potentially (if `target_client` is specified) on a different cluster.
|
||||
If you don't specify the query you will reindex all the documents.
|
||||
|
||||
Since ``2.3`` a :meth:`~opensearch.AsyncOpenSearch.reindex` api is
|
||||
Since ``2.3`` a :meth:`~opensearchpy.AsyncOpenSearch.reindex` api is
|
||||
available as part of opensearch itself. It is recommended to use the api
|
||||
instead of this helper wherever possible. The helper is here mostly for
|
||||
backwards compatibility and for situations where more flexibility is
|
||||
@@ -437,20 +437,20 @@ async def async_reindex(
|
||||
|
||||
This helper doesn't transfer mappings, just the data.
|
||||
|
||||
:arg client: instance of :class:`~opensearch.AsyncOpenSearch` to use (for
|
||||
:arg client: instance of :class:`~opensearchpy.AsyncOpenSearch` to use (for
|
||||
read if `target_client` is specified as well)
|
||||
:arg source_index: index (or list of indices) to read documents from
|
||||
:arg target_index: name of the index in the target cluster to populate
|
||||
:arg query: body for the :meth:`~opensearch.AsyncOpenSearch.search` api
|
||||
:arg query: body for the :meth:`~opensearchpy.AsyncOpenSearch.search` api
|
||||
:arg target_client: optional, is specified will be used for writing (thus
|
||||
enabling reindex between clusters)
|
||||
:arg chunk_size: number of docs in one chunk sent to client (default: 500)
|
||||
:arg scroll: Specify how long a consistent view of the index should be
|
||||
maintained for scrolled search
|
||||
:arg scan_kwargs: additional kwargs to be passed to
|
||||
:func:`~opensearch.helpers.async_scan`
|
||||
:func:`~opensearchpy.helpers.async_scan`
|
||||
:arg bulk_kwargs: additional kwargs to be passed to
|
||||
:func:`~opensearch.helpers.async_bulk`
|
||||
:func:`~opensearchpy.helpers.async_bulk`
|
||||
"""
|
||||
target_client = client if target_client is None else target_client
|
||||
docs = async_scan(
|
||||
@@ -56,8 +56,8 @@ class AsyncTransport(Transport):
|
||||
"""
|
||||
:arg hosts: list of dictionaries, each containing keyword arguments to
|
||||
create a `connection_class` instance
|
||||
:arg connection_class: subclass of :class:`~opensearch.Connection` to use
|
||||
:arg connection_pool_class: subclass of :class:`~opensearch.ConnectionPool` to use
|
||||
:arg connection_class: subclass of :class:`~opensearchpy.Connection` to use
|
||||
:arg connection_pool_class: subclass of :class:`~opensearchpy.ConnectionPool` to use
|
||||
:arg host_info_callback: callback responsible for taking the node information from
|
||||
`/_cluster/nodes`, along with already extracted information, and
|
||||
producing a list of arguments (same as `hosts` parameter)
|
||||
@@ -300,7 +300,7 @@ class AsyncTransport(Transport):
|
||||
Mark a connection as dead (failed) in the connection pool. If sniffing
|
||||
on failure is enabled this will initiate the sniffing process.
|
||||
|
||||
:arg connection: instance of :class:`~opensearch.Connection` that failed
|
||||
:arg connection: instance of :class:`~opensearchpy.Connection` that failed
|
||||
"""
|
||||
self.connection_pool.mark_dead(connection)
|
||||
if self.sniff_on_connection_fail:
|
||||
@@ -324,9 +324,9 @@ class AsyncTransport(Transport):
|
||||
:arg method: HTTP method to use
|
||||
:arg url: absolute url (without host) to target
|
||||
:arg headers: dictionary of headers, will be handed over to the
|
||||
underlying :class:`~opensearch.Connection` class
|
||||
underlying :class:`~opensearchpy.Connection` class
|
||||
:arg params: dictionary of query parameters, will be handed over to the
|
||||
underlying :class:`~opensearch.Connection` class for serialization
|
||||
underlying :class:`~opensearchpy.Connection` class for serialization
|
||||
:arg body: body of the request, will be serialized using serializer and
|
||||
passed to the connection
|
||||
"""
|
||||
@@ -52,13 +52,13 @@ class OpenSearch(object):
|
||||
|
||||
The instance has attributes ``cat``, ``cluster``, ``indices``, ``ingest``,
|
||||
``nodes``, ``snapshot`` and ``tasks`` that provide access to instances of
|
||||
:class:`~opensearch.client.CatClient`,
|
||||
:class:`~opensearch.client.ClusterClient`,
|
||||
:class:`~opensearch.client.IndicesClient`,
|
||||
:class:`~opensearch.client.IngestClient`,
|
||||
:class:`~opensearch.client.NodesClient`,
|
||||
:class:`~opensearch.client.SnapshotClient` and
|
||||
:class:`~opensearch.client.TasksClient` respectively. This is the
|
||||
:class:`~opensearchpy.client.CatClient`,
|
||||
:class:`~opensearchpy.client.ClusterClient`,
|
||||
:class:`~opensearchpy.client.IndicesClient`,
|
||||
:class:`~opensearchpy.client.IngestClient`,
|
||||
:class:`~opensearchpy.client.NodesClient`,
|
||||
:class:`~opensearchpy.client.SnapshotClient` and
|
||||
:class:`~opensearchpy.client.TasksClient` respectively. This is the
|
||||
preferred (and only supported) way to get access to those classes and their
|
||||
methods.
|
||||
|
||||
@@ -69,7 +69,7 @@ class OpenSearch(object):
|
||||
client = OpenSearch(connection_class=ThriftConnection)
|
||||
|
||||
If you want to turn on :ref:`sniffing` you have several options (described
|
||||
in :class:`~opensearch.Transport`)::
|
||||
in :class:`~opensearchpy.Transport`)::
|
||||
|
||||
# create connection that will automatically inspect the cluster to get
|
||||
# the list of active nodes. Start with nodes running on
|
||||
@@ -95,7 +95,7 @@ class OpenSearch(object):
|
||||
])
|
||||
|
||||
If using SSL, there are several parameters that control how we deal with
|
||||
certificates (see :class:`~opensearch.Urllib3HttpConnection` for
|
||||
certificates (see :class:`~opensearchpy.Urllib3HttpConnection` for
|
||||
detailed description of the options)::
|
||||
|
||||
client = OpenSearch(
|
||||
@@ -109,7 +109,7 @@ class OpenSearch(object):
|
||||
)
|
||||
|
||||
If using SSL, but don't verify the certs, a warning message is showed
|
||||
optionally (see :class:`~opensearch.Urllib3HttpConnection` for
|
||||
optionally (see :class:`~opensearchpy.Urllib3HttpConnection` for
|
||||
detailed description of the options)::
|
||||
|
||||
client = OpenSearch(
|
||||
@@ -123,7 +123,7 @@ class OpenSearch(object):
|
||||
)
|
||||
|
||||
SSL client authentication is supported
|
||||
(see :class:`~opensearch.Urllib3HttpConnection` for
|
||||
(see :class:`~opensearchpy.Urllib3HttpConnection` for
|
||||
detailed description of the options)::
|
||||
|
||||
client = OpenSearch(
|
||||
@@ -156,7 +156,7 @@ class OpenSearch(object):
|
||||
is used to encode all outgoing requests.
|
||||
However, you can implement your own custom serializer::
|
||||
|
||||
from opensearch.serializer import JSONSerializer
|
||||
from opensearchpy.serializer import JSONSerializer
|
||||
|
||||
class SetEncoder(JSONSerializer):
|
||||
def default(self, obj):
|
||||
@@ -174,16 +174,16 @@ class OpenSearch(object):
|
||||
"""
|
||||
:arg hosts: list of nodes, or a single node, we should connect to.
|
||||
Node should be a dictionary ({"host": "localhost", "port": 9200}),
|
||||
the entire dictionary will be passed to the :class:`~opensearch.Connection`
|
||||
the entire dictionary will be passed to the :class:`~opensearchpy.Connection`
|
||||
class as kwargs, or a string in the format of ``host[:port]`` which will be
|
||||
translated to a dictionary automatically. If no value is given the
|
||||
:class:`~opensearch.Connection` class defaults will be used.
|
||||
:class:`~opensearchpy.Connection` class defaults will be used.
|
||||
|
||||
:arg transport_class: :class:`~opensearch.Transport` subclass to use.
|
||||
:arg transport_class: :class:`~opensearchpy.Transport` subclass to use.
|
||||
|
||||
:arg kwargs: any additional arguments will be passed on to the
|
||||
:class:`~opensearch.Transport` class and, subsequently, to the
|
||||
:class:`~opensearch.Connection` instances.
|
||||
:class:`~opensearchpy.Transport` class and, subsequently, to the
|
||||
:class:`~opensearchpy.Connection` instances.
|
||||
"""
|
||||
self.transport = transport_class(_normalize_hosts(hosts), **kwargs)
|
||||
|
||||
@@ -40,7 +40,7 @@ SKIP_IN_PATH = (None, "", b"", [], ())
|
||||
def _normalize_hosts(hosts):
|
||||
"""
|
||||
Helper function to transform hosts argument to
|
||||
:class:`~opensearch.OpenSearch` to a list of dicts.
|
||||
:class:`~opensearchpy.OpenSearch` to a list of dicts.
|
||||
"""
|
||||
# if hosts are empty, just defer to defaults down the line
|
||||
if hosts is None:
|
||||
@@ -48,10 +48,10 @@ from ..exceptions import (
|
||||
|
||||
logger = logging.getLogger("opensearch")
|
||||
|
||||
# create the opensearch.trace logger, but only set propagate to False if the
|
||||
# create the opensearchpy.trace logger, but only set propagate to False if the
|
||||
# logger hasn't already been configured
|
||||
_tracer_already_configured = "opensearch.trace" in logging.Logger.manager.loggerDict
|
||||
tracer = logging.getLogger("opensearch.trace")
|
||||
_tracer_already_configured = "opensearchpy.trace" in logging.Logger.manager.loggerDict
|
||||
tracer = logging.getLogger("opensearchpy.trace")
|
||||
if not _tracer_already_configured:
|
||||
tracer.propagate = False
|
||||
|
||||
@@ -48,7 +48,7 @@ class ConnectionSelector(object):
|
||||
*currently* live connections to choose from.
|
||||
|
||||
The options dictionary is the one that has been passed to
|
||||
:class:`~opensearch.Transport` as `hosts` param and the same that is
|
||||
:class:`~opensearchpy.Transport` as `hosts` param and the same that is
|
||||
used to construct the Connection object itself. When the Connection was
|
||||
created from information retrieved from the cluster via the sniffing
|
||||
process it will be the dictionary returned by the `host_info_callback`.
|
||||
@@ -99,11 +99,11 @@ class RoundRobinSelector(ConnectionSelector):
|
||||
|
||||
class ConnectionPool(object):
|
||||
"""
|
||||
Container holding the :class:`~opensearch.Connection` instances,
|
||||
Container holding the :class:`~opensearchpy.Connection` instances,
|
||||
managing the selection process (via a
|
||||
:class:`~opensearch.ConnectionSelector`) and dead connections.
|
||||
:class:`~opensearchpy.ConnectionSelector`) and dead connections.
|
||||
|
||||
It's only interactions are with the :class:`~opensearch.Transport` class
|
||||
It's only interactions are with the :class:`~opensearchpy.Transport` class
|
||||
that drives all the actions within `ConnectionPool`.
|
||||
|
||||
Initially connections are stored on the class as a list and, along with the
|
||||
@@ -131,12 +131,12 @@ class ConnectionPool(object):
|
||||
):
|
||||
"""
|
||||
:arg connections: list of tuples containing the
|
||||
:class:`~opensearch.Connection` instance and it's options
|
||||
:class:`~opensearchpy.Connection` instance and it's options
|
||||
:arg dead_timeout: number of seconds a connection should be retired for
|
||||
after a failure, increases on consecutive failures
|
||||
:arg timeout_cutoff: number of consecutive failures after which the
|
||||
timeout doesn't increase
|
||||
:arg selector_class: :class:`~opensearch.ConnectionSelector`
|
||||
:arg selector_class: :class:`~opensearchpy.ConnectionSelector`
|
||||
subclass to use if more than one connection is live
|
||||
:arg randomize_hosts: shuffle the list of connections upon arrival to
|
||||
avoid dog piling effect across processes
|
||||
@@ -49,7 +49,7 @@ class ImproperlyConfigured(Exception):
|
||||
class OpenSearchException(Exception):
|
||||
"""
|
||||
Base class for all exceptions raised by this package's operations (doesn't
|
||||
apply to :class:`~opensearch.ImproperlyConfigured`).
|
||||
apply to :class:`~opensearchpy.ImproperlyConfigured`).
|
||||
"""
|
||||
|
||||
|
||||
@@ -116,7 +116,7 @@ class TransportError(OpenSearchException):
|
||||
class ConnectionError(TransportError):
|
||||
"""
|
||||
Error raised when there was an exception while talking to OpenSearch. Original
|
||||
exception from the underlying :class:`~opensearch.Connection`
|
||||
exception from the underlying :class:`~opensearchpy.Connection`
|
||||
implementation is available as ``.info``.
|
||||
"""
|
||||
|
||||
@@ -32,14 +32,14 @@ from ..compat import Mapping, Queue, map, string_types
|
||||
from ..exceptions import TransportError
|
||||
from .errors import BulkIndexError, ScanError
|
||||
|
||||
logger = logging.getLogger("opensearch.helpers")
|
||||
logger = logging.getLogger("opensearchpy.helpers")
|
||||
|
||||
|
||||
def expand_action(data):
|
||||
"""
|
||||
From one document or action definition passed in by the user extract the
|
||||
action/data lines needed for opensearch's
|
||||
:meth:`~opensearch.OpenSearch.bulk` api.
|
||||
:meth:`~opensearchpy.OpenSearch.bulk` api.
|
||||
"""
|
||||
# when given a string, assume user wants to index raw json
|
||||
if isinstance(data, string_types):
|
||||
@@ -284,7 +284,7 @@ def streaming_bulk(
|
||||
"""
|
||||
Streaming bulk consumes actions from the iterable passed in and yields
|
||||
results per action. For non-streaming usecases use
|
||||
:func:`~opensearch.helpers.bulk` which is a wrapper around streaming
|
||||
:func:`~opensearchpy.helpers.bulk` which is a wrapper around streaming
|
||||
bulk that returns summary information about the bulk operation once the
|
||||
entire input is consumed and sent.
|
||||
|
||||
@@ -294,7 +294,7 @@ def streaming_bulk(
|
||||
every subsequent rejection for the same chunk, for double the time every
|
||||
time up to ``max_backoff`` seconds.
|
||||
|
||||
:arg client: instance of :class:`~opensearch.OpenSearch` to use
|
||||
:arg client: instance of :class:`~opensearchpy.OpenSearch` to use
|
||||
:arg actions: iterable containing the actions to be executed
|
||||
:arg chunk_size: number of docs in one chunk sent to client (default: 500)
|
||||
:arg max_chunk_bytes: the maximum size of the request in bytes (default: 100MB)
|
||||
@@ -373,7 +373,7 @@ def streaming_bulk(
|
||||
|
||||
def bulk(client, actions, stats_only=False, ignore_status=(), *args, **kwargs):
|
||||
"""
|
||||
Helper for the :meth:`~opensearch.OpenSearch.bulk` api that provides
|
||||
Helper for the :meth:`~opensearchpy.OpenSearch.bulk` api that provides
|
||||
a more human friendly interface - it consumes an iterator of actions and
|
||||
sends them to opensearch in chunks. It returns a tuple with summary
|
||||
information - number of successfully executed actions and either list of
|
||||
@@ -385,19 +385,19 @@ def bulk(client, actions, stats_only=False, ignore_status=(), *args, **kwargs):
|
||||
When errors are being collected original document data is included in the
|
||||
error dictionary which can lead to an extra high memory usage. If you need
|
||||
to process a lot of data and want to ignore/collect errors please consider
|
||||
using the :func:`~opensearch.helpers.streaming_bulk` helper which will
|
||||
using the :func:`~opensearchpy.helpers.streaming_bulk` helper which will
|
||||
just return the errors and not store them in memory.
|
||||
|
||||
|
||||
:arg client: instance of :class:`~opensearch.OpenSearch` to use
|
||||
:arg client: instance of :class:`~opensearchpy.OpenSearch` to use
|
||||
:arg actions: iterator containing the actions
|
||||
:arg stats_only: if `True` only report number of successful/failed
|
||||
operations instead of just number of successful and a list of error responses
|
||||
:arg ignore_status: list of HTTP status code that you want to ignore
|
||||
|
||||
Any additional keyword arguments will be passed to
|
||||
:func:`~opensearch.helpers.streaming_bulk` which is used to execute
|
||||
the operation, see :func:`~opensearch.helpers.streaming_bulk` for more
|
||||
:func:`~opensearchpy.helpers.streaming_bulk` which is used to execute
|
||||
the operation, see :func:`~opensearchpy.helpers.streaming_bulk` for more
|
||||
accepted parameters.
|
||||
"""
|
||||
success, failed = 0, 0
|
||||
@@ -436,7 +436,7 @@ def parallel_bulk(
|
||||
"""
|
||||
Parallel version of the bulk helper run in multiple threads at once.
|
||||
|
||||
:arg client: instance of :class:`~opensearch.OpenSearch` to use
|
||||
:arg client: instance of :class:`~opensearchpy.OpenSearch` to use
|
||||
:arg actions: iterator containing the actions
|
||||
:arg thread_count: size of the threadpool to use for the bulk requests
|
||||
:arg chunk_size: number of docs in one chunk sent to client (default: 500)
|
||||
@@ -506,7 +506,7 @@ def scan(
|
||||
):
|
||||
"""
|
||||
Simple abstraction on top of the
|
||||
:meth:`~opensearch.OpenSearch.scroll` api - a simple iterator that
|
||||
:meth:`~opensearchpy.OpenSearch.scroll` api - a simple iterator that
|
||||
yields all hits as returned by underlining scroll requests.
|
||||
|
||||
By default scan does not return results in any pre-determined order. To
|
||||
@@ -515,8 +515,8 @@ def scan(
|
||||
may be an expensive operation and will negate the performance benefits of
|
||||
using ``scan``.
|
||||
|
||||
:arg client: instance of :class:`~opensearch.OpenSearch` to use
|
||||
:arg query: body for the :meth:`~opensearch.OpenSearch.search` api
|
||||
:arg client: instance of :class:`~opensearchpy.OpenSearch` to use
|
||||
:arg query: body for the :meth:`~opensearchpy.OpenSearch.search` api
|
||||
:arg scroll: Specify how long a consistent view of the index should be
|
||||
maintained for scrolled search
|
||||
:arg raise_on_error: raises an exception (``ScanError``) if an error is
|
||||
@@ -531,10 +531,10 @@ def scan(
|
||||
scroll API at the end of the method on completion or error, defaults
|
||||
to true.
|
||||
:arg scroll_kwargs: additional kwargs to be passed to
|
||||
:meth:`~opensearch.OpenSearch.scroll`
|
||||
:meth:`~opensearchpy.OpenSearch.scroll`
|
||||
|
||||
Any additional keyword arguments will be passed to the initial
|
||||
:meth:`~opensearch.OpenSearch.search` call::
|
||||
:meth:`~opensearchpy.OpenSearch.search` call::
|
||||
|
||||
scan(client,
|
||||
query={"query": {"match": {"title": "python"}}},
|
||||
@@ -627,7 +627,7 @@ def reindex(
|
||||
to another, potentially (if `target_client` is specified) on a different cluster.
|
||||
If you don't specify the query you will reindex all the documents.
|
||||
|
||||
Since ``2.3`` a :meth:`~opensearch.OpenSearch.reindex` api is
|
||||
Since ``2.3`` a :meth:`~opensearchpy.OpenSearch.reindex` api is
|
||||
available as part of opensearch itself. It is recommended to use the api
|
||||
instead of this helper wherever possible. The helper is here mostly for
|
||||
backwards compatibility and for situations where more flexibility is
|
||||
@@ -637,20 +637,20 @@ def reindex(
|
||||
|
||||
This helper doesn't transfer mappings, just the data.
|
||||
|
||||
:arg client: instance of :class:`~opensearch.OpenSearch` to use (for
|
||||
:arg client: instance of :class:`~opensearchpy.OpenSearch` to use (for
|
||||
read if `target_client` is specified as well)
|
||||
:arg source_index: index (or list of indices) to read documents from
|
||||
:arg target_index: name of the index in the target cluster to populate
|
||||
:arg query: body for the :meth:`~opensearch.OpenSearch.search` api
|
||||
:arg query: body for the :meth:`~opensearchpy.OpenSearch.search` api
|
||||
:arg target_client: optional, is specified will be used for writing (thus
|
||||
enabling reindex between clusters)
|
||||
:arg chunk_size: number of docs in one chunk sent to client (default: 500)
|
||||
:arg scroll: Specify how long a consistent view of the index should be
|
||||
maintained for scrolled search
|
||||
:arg scan_kwargs: additional kwargs to be passed to
|
||||
:func:`~opensearch.helpers.scan`
|
||||
:func:`~opensearchpy.helpers.scan`
|
||||
:arg bulk_kwargs: additional kwargs to be passed to
|
||||
:func:`~opensearch.helpers.bulk`
|
||||
:func:`~opensearchpy.helpers.bulk`
|
||||
"""
|
||||
target_client = client if target_client is None else target_client
|
||||
docs = scan(client, query=query, index=source_index, scroll=scroll, **scan_kwargs)
|
||||
@@ -31,8 +31,8 @@ import time
|
||||
from os.path import abspath, dirname, join
|
||||
from unittest import SkipTest, TestCase
|
||||
|
||||
from opensearch import OpenSearch
|
||||
from opensearch.exceptions import ConnectionError
|
||||
from opensearchpy import OpenSearch
|
||||
from opensearchpy.exceptions import ConnectionError
|
||||
|
||||
if "OPENSEARCH_URL" in os.environ:
|
||||
OPENSEARCH_URL = os.environ["OPENSEARCH_URL"]
|
||||
@@ -47,7 +47,7 @@ def get_test_client(nowait=False, **kwargs):
|
||||
kw = {"timeout": 30, "ca_certs": CA_CERTS}
|
||||
|
||||
if "PYTHON_CONNECTION_CLASS" in os.environ:
|
||||
from opensearch import connection
|
||||
from opensearchpy import connection
|
||||
|
||||
kw["connection_class"] = getattr(
|
||||
connection, os.environ["PYTHON_CONNECTION_CLASS"]
|
||||
@@ -45,7 +45,7 @@ def get_host_info(node_info, host):
|
||||
`None` is returned this node will be skipped.
|
||||
|
||||
Useful for filtering nodes (by proximity for example) or if additional
|
||||
information needs to be provided for the :class:`~opensearch.Connection`
|
||||
information needs to be provided for the :class:`~opensearchpy.Connection`
|
||||
class. By default master only nodes are filtered out since they shouldn't
|
||||
typically be used for API operations.
|
||||
|
||||
@@ -90,8 +90,8 @@ class Transport(object):
|
||||
"""
|
||||
:arg hosts: list of dictionaries, each containing keyword arguments to
|
||||
create a `connection_class` instance
|
||||
:arg connection_class: subclass of :class:`~opensearch.Connection` to use
|
||||
:arg connection_pool_class: subclass of :class:`~opensearch.ConnectionPool` to use
|
||||
:arg connection_class: subclass of :class:`~opensearchpy.Connection` to use
|
||||
:arg connection_pool_class: subclass of :class:`~opensearchpy.ConnectionPool` to use
|
||||
:arg host_info_callback: callback responsible for taking the node information from
|
||||
`/_cluster/nodes`, along with already extracted information, and
|
||||
producing a list of arguments (same as `hosts` parameter)
|
||||
@@ -186,7 +186,7 @@ class Transport(object):
|
||||
|
||||
def add_connection(self, host):
|
||||
"""
|
||||
Create a new :class:`~opensearch.Connection` instance and add it to the pool.
|
||||
Create a new :class:`~opensearchpy.Connection` instance and add it to the pool.
|
||||
|
||||
:arg host: kwargs that will be used to create the instance
|
||||
"""
|
||||
@@ -197,7 +197,7 @@ class Transport(object):
|
||||
"""
|
||||
Instantiate all the connections and create new connection pool to hold them.
|
||||
Tries to identify unchanged hosts and re-use existing
|
||||
:class:`~opensearch.Connection` instances.
|
||||
:class:`~opensearchpy.Connection` instances.
|
||||
|
||||
:arg hosts: same as `__init__`
|
||||
"""
|
||||
@@ -229,8 +229,8 @@ class Transport(object):
|
||||
|
||||
def get_connection(self):
|
||||
"""
|
||||
Retrieve a :class:`~opensearch.Connection` instance from the
|
||||
:class:`~opensearch.ConnectionPool` instance.
|
||||
Retrieve a :class:`~opensearchpy.Connection` instance from the
|
||||
:class:`~opensearchpy.ConnectionPool` instance.
|
||||
"""
|
||||
if self.sniffer_timeout:
|
||||
if time.time() >= self.last_sniff + self.sniffer_timeout:
|
||||
@@ -334,7 +334,7 @@ class Transport(object):
|
||||
Mark a connection as dead (failed) in the connection pool. If sniffing
|
||||
on failure is enabled this will initiate the sniffing process.
|
||||
|
||||
:arg connection: instance of :class:`~opensearch.Connection` that failed
|
||||
:arg connection: instance of :class:`~opensearchpy.Connection` that failed
|
||||
"""
|
||||
# mark as dead even when sniffing to avoid hitting this host during the sniff process
|
||||
self.connection_pool.mark_dead(connection)
|
||||
@@ -356,9 +356,9 @@ class Transport(object):
|
||||
:arg method: HTTP method to use
|
||||
:arg url: absolute url (without host) to target
|
||||
:arg headers: dictionary of headers, will be handed over to the
|
||||
underlying :class:`~opensearch.Connection` class
|
||||
underlying :class:`~opensearchpy.Connection` class
|
||||
:arg params: dictionary of query parameters, will be handed over to the
|
||||
underlying :class:`~opensearch.Connection` class for serialization
|
||||
underlying :class:`~opensearchpy.Connection` class for serialization
|
||||
:arg body: body of the request, will be serialized using serializer and
|
||||
passed to the connection
|
||||
"""
|
||||
@@ -30,7 +30,7 @@ from os.path import abspath, dirname, join
|
||||
|
||||
from setuptools import find_packages, setup
|
||||
|
||||
package_name = "opensearch"
|
||||
package_name = "opensearchpy"
|
||||
base_dir = abspath(dirname(__file__))
|
||||
|
||||
with open(join(base_dir, package_name, "_version.py")) as f:
|
||||
@@ -43,7 +43,7 @@ with open(join(base_dir, "README.md")) as f:
|
||||
|
||||
packages = [
|
||||
package
|
||||
for package in find_packages(where=".", exclude=("test_opensearch*",))
|
||||
for package in find_packages(where=".", exclude=("test_opensearchpy*",))
|
||||
if package == package_name or package.startswith(package_name + ".")
|
||||
]
|
||||
|
||||
@@ -82,7 +82,7 @@ setup(
|
||||
"Issue Tracker": "https://github.com/opensearch-project/opensearch-py/issues",
|
||||
},
|
||||
packages=packages,
|
||||
package_data={"opensearch": ["py.typed", "*.pyi"]},
|
||||
package_data={"opensearchpy": ["py.typed", "*.pyi"]},
|
||||
include_package_data=True,
|
||||
zip_safe=False,
|
||||
classifiers=[
|
||||
@@ -105,7 +105,7 @@ setup(
|
||||
],
|
||||
python_requires=">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*, <4",
|
||||
install_requires=install_requires,
|
||||
test_suite="test_opensearch.run_tests.run_all",
|
||||
test_suite="test_opensearchpy.run_tests.run_all",
|
||||
tests_require=tests_require,
|
||||
extras_require={
|
||||
"develop": tests_require + docs_require + generate_require,
|
||||
|
||||
@@ -59,8 +59,8 @@ def fetch_opensearch_repo():
|
||||
if environ.get("TEST_OPENSEARCH_NOFETCH", False):
|
||||
return
|
||||
|
||||
from test_opensearch.test_cases import SkipTest
|
||||
from test_opensearch.test_server import get_client
|
||||
from test_opensearchpy.test_cases import SkipTest
|
||||
from test_opensearchpy.test_server import get_client
|
||||
|
||||
# find out the sha of the running client
|
||||
try:
|
||||
@@ -110,15 +110,15 @@ def run_all(argv=None):
|
||||
ignores = []
|
||||
# Python 3.6+ is required for async
|
||||
if sys.version_info < (3, 6):
|
||||
ignores.append("test_opensearch/test_async/")
|
||||
ignores.append("test_opensearchpy/test_async/")
|
||||
|
||||
# GitHub Actions, run non-server tests
|
||||
if "GITHUB_ACTION" in environ:
|
||||
ignores.extend(
|
||||
[
|
||||
"test_opensearch/test_server/",
|
||||
"test_opensearch/test_server_secured/",
|
||||
"test_opensearch/test_async/test_server/",
|
||||
"test_opensearchpy/test_server/",
|
||||
"test_opensearchpy/test_server_secured/",
|
||||
"test_opensearchpy/test_async/test_server/",
|
||||
]
|
||||
)
|
||||
|
||||
@@ -129,8 +129,8 @@ def run_all(argv=None):
|
||||
argv.append(join(test_dir, "test_server_secured"))
|
||||
ignores.extend(
|
||||
[
|
||||
"test_opensearch/test_server/",
|
||||
"test_opensearch/test_async/test_server/",
|
||||
"test_opensearchpy/test_server/",
|
||||
"test_opensearchpy/test_async/test_server/",
|
||||
]
|
||||
)
|
||||
else:
|
||||
@@ -139,7 +139,7 @@ def run_all(argv=None):
|
||||
argv.append(join(test_dir, "test_async/test_server"))
|
||||
ignores.extend(
|
||||
[
|
||||
"test_opensearch/test_server_secured/",
|
||||
"test_opensearchpy/test_server_secured/",
|
||||
]
|
||||
)
|
||||
|
||||
+4
-4
@@ -37,9 +37,9 @@ import pytest
|
||||
from mock import patch
|
||||
from multidict import CIMultiDict
|
||||
|
||||
from opensearch import AIOHttpConnection, __versionstr__
|
||||
from opensearch.compat import reraise_exceptions
|
||||
from opensearch.exceptions import ConnectionError
|
||||
from opensearchpy import AIOHttpConnection, __versionstr__
|
||||
from opensearchpy.compat import reraise_exceptions
|
||||
from opensearchpy.exceptions import ConnectionError
|
||||
|
||||
pytestmark = pytest.mark.asyncio
|
||||
|
||||
@@ -312,7 +312,7 @@ class TestAIOHttpConnection:
|
||||
== str(w[0].message)
|
||||
)
|
||||
|
||||
@patch("opensearch.connection.base.logger")
|
||||
@patch("opensearchpy.connection.base.logger")
|
||||
async def test_uncompressed_body_logged(self, logger):
|
||||
con = await self._get_mock_connection(connection_params={"http_compress": True})
|
||||
await con.perform_request("GET", "/", body=b'{"example": "body"}')
|
||||
+4
-4
@@ -28,8 +28,8 @@ import asyncio
|
||||
|
||||
import pytest
|
||||
|
||||
import opensearch
|
||||
from opensearch.helpers.test import CA_CERTS, OPENSEARCH_URL
|
||||
import opensearchpy
|
||||
from opensearchpy.helpers.test import CA_CERTS, OPENSEARCH_URL
|
||||
|
||||
from ...utils import wipe_cluster
|
||||
|
||||
@@ -40,11 +40,11 @@ pytestmark = pytest.mark.asyncio
|
||||
async def async_client():
|
||||
client = None
|
||||
try:
|
||||
if not hasattr(opensearch, "AsyncOpenSearch"):
|
||||
if not hasattr(opensearchpy, "AsyncOpenSearch"):
|
||||
pytest.skip("test requires 'AsyncOpenSearch'")
|
||||
|
||||
kw = {"timeout": 3, "ca_certs": CA_CERTS}
|
||||
client = opensearch.AsyncOpenSearch(OPENSEARCH_URL, **kw)
|
||||
client = opensearchpy.AsyncOpenSearch(OPENSEARCH_URL, **kw)
|
||||
|
||||
# wait for yellow status
|
||||
for _ in range(100):
|
||||
+1
-1
@@ -58,7 +58,7 @@ class TestYarlMissing:
|
||||
self, async_client, monkeypatch
|
||||
):
|
||||
# This is a defensive test case for if aiohttp suddenly stops using yarl.
|
||||
from opensearch._async import http_aiohttp
|
||||
from opensearchpy._async import http_aiohttp
|
||||
|
||||
monkeypatch.setattr(http_aiohttp, "yarl", False)
|
||||
|
||||
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user