diff --git a/docs/api.rst b/docs/api.rst index 4f6c0f18..5a75608a 100644 --- a/docs/api.rst +++ b/docs/api.rst @@ -1,6 +1,14 @@ API Documentation ================= +.. note:: + + All the API calls map the raw REST api as closely as possible, including + the distinction between required and optional arguments to the calls. This + means that the code makes distinction between positional and keyword arguments; + we, however, recommend that people use keyword arguments for all calls for + consistency and safety. + .. py:module:: elasticsearch Elasticsearch diff --git a/docs/connection.rst b/docs/connection.rst index 621660a4..d91a9c49 100644 --- a/docs/connection.rst +++ b/docs/connection.rst @@ -1,3 +1,5 @@ +.. _connection_api: + Connection Layer API ==================== diff --git a/docs/index.rst b/docs/index.rst index d7377ab2..ee0f311c 100644 --- a/docs/index.rst +++ b/docs/index.rst @@ -49,6 +49,26 @@ Example Usage {u'text': u'Elasticsearch: cool. bonsai cool.', u'author': u'kimchy', u'timestamp': u'2010-10-10T10:10:10'} Got 1 Hits: 2010-10-10T10:10:10 kimchy: Elasticsearch: cool. bonsai cool. + +Features +-------- + +Extendability +~~~~~~~~~~~~~ + +Configurable connections and load balancing (see :ref:`connection_api`):: + * persistent connections + * configurable load balancing strategy + * different protocols and connection classes + * ... + + +Sniffing +~~~~~~~~ + +The client can be configured to inspect the cluster state to get a list of +nodes upon startup, periodically and/or on failure. See +:class:`~elasticsearch.Transport` parameters for details. Contents -------- @@ -58,6 +78,7 @@ Contents api connection + transports License ------- diff --git a/elasticsearch/client/__init__.py b/elasticsearch/client/__init__.py index 079d514c..d5b894c2 100644 --- a/elasticsearch/client/__init__.py +++ b/elasticsearch/client/__init__.py @@ -36,6 +36,10 @@ class Elasticsearch(object): """ Elasticsearch low-level client. Provides a straightforward mapping from Python to ES REST endpoints. + + The instance has attributes `indices` and `cluster` that provide access to + :class:`~elasticsearch.client.IndicesClient` and + :class:`~elasticsearch.client.ClusterClient` instances respectively. """ def __init__(self, hosts=None, transport_class=Transport, **kwargs): """ @@ -91,7 +95,7 @@ class Elasticsearch(object): """ Adds a typed JSON document in a specific index, making it searchable. Behind the scenes this method calls index(..., op_type='create') - http://elasticsearch.org/guide/reference/api/index_/ + ``_ :arg index: The name of the index :arg doc_type: The type of the document @@ -117,7 +121,7 @@ class Elasticsearch(object): def index(self, index, doc_type, body, id=None, params=None): """ Adds or updates a typed JSON document in a specific index, making it searchable. - http://elasticsearch.org/guide/reference/api/index_/ + ``_ :arg index: The name of the index :arg doc_type: The type of the document @@ -144,7 +148,7 @@ class Elasticsearch(object): def exists(self, index, id, doc_type='_all', params=None): """ Returns a boolean indicating whether or not given document exists in Elasticsearch. - http://elasticsearch.org/guide/reference/api/get/ + ``_ :arg index: The name of the index :arg id: The document ID @@ -169,7 +173,7 @@ class Elasticsearch(object): def get(self, index, id, doc_type='_all', ignore=(), params=None): """ Get a typed JSON document from the index based on its id. - http://elasticsearch.org/guide/reference/api/get/ + ``_ :arg index: The name of the index :arg id: The document ID @@ -200,7 +204,7 @@ class Elasticsearch(object): def get_source(self, index, id, doc_type='_all', ignore=(), params=None): """ Get the source of a document by it's index, type and id. - http://elasticsearch.org/guide/reference/api/get/ + ``_ :arg index: The name of the index :arg doc_type: The type of the document (uses `_all` by default to @@ -229,7 +233,7 @@ class Elasticsearch(object): def mget(self, body, index=None, doc_type=None, params=None): """ Get multiple documents based on an index, type (optional) and ids. - http://elasticsearch.org/guide/reference/api/multi-get/ + ``_ :arg body: Document identifiers; can be either `docs` (containing full document information) or `ids` (when index and type is provided in the URL. @@ -254,7 +258,7 @@ class Elasticsearch(object): def update(self, index, doc_type, id, body=None, ignore=(), params=None): """ Update a document based on a script or partial data provided. - http://elasticsearch.org/guide/reference/api/update/ + ``_ :arg index: The name of the index :arg doc_type: The type of the document @@ -298,7 +302,7 @@ class Elasticsearch(object): def search(self, index=None, doc_type=None, body=None, params=None): """ Execute a search query and get back search hits that match the query. - http://www.elasticsearch.org/guide/reference/api/search/ + ``_ :arg index: A comma-separated list of index names to search; use `_all` or empty string to perform the operation on all indices @@ -351,7 +355,7 @@ class Elasticsearch(object): def scroll(self, scroll_id, params=None): """ Scroll a search request created by specifying the scroll parameter. - http://www.elasticsearch.org/guide/reference/api/search/scroll/ + ``_ :arg scroll_id: The scroll ID :arg scroll: Specify how long a consistent view of the index should be @@ -366,7 +370,7 @@ class Elasticsearch(object): def delete(self, index, doc_type, id, ignore=(), params=None): """ Delete a typed JSON document from a specific index based on its id. - http://elasticsearch.org/guide/reference/api/delete/ + ``_ :arg index: The name of the index :arg doc_type: The type of the document @@ -394,7 +398,7 @@ class Elasticsearch(object): def count(self, index=None, doc_type=None, body=None, params=None): """ Execute a query and get the number of matches for that query. - http://elasticsearch.org/guide/reference/api/count/ + ``_ :arg index: A comma-separated list of indices to restrict the results :arg doc_type: A comma-separated list of types to restrict the results @@ -415,7 +419,7 @@ class Elasticsearch(object): def bulk(self, body, index=None, doc_type=None, params=None): """ Perform many index/delete operations in a single API call. - http://elasticsearch.org/guide/reference/api/bulk/ + ``_ :arg body: The operation definition and data (action-data pairs) :arg index: Default index for items which don't provide one @@ -433,7 +437,7 @@ class Elasticsearch(object): def msearch(self, body, index=None, doc_type=None, params=None): """ Execute several search requests within the same API. - http://www.elasticsearch.org/guide/reference/api/multi-search/ + ``_ :arg body: The request definitions (metadata-search request definition pairs), separated by newlines @@ -449,7 +453,7 @@ class Elasticsearch(object): def delete_by_query(self, index, doc_type=None, body=None, params=None): """ Delete documents from one or more indices and one or more types based on a query. - http://www.elasticsearch.org/guide/reference/api/delete-by-query/ + ``_ :arg index: A comma-separated list of indices to restrict the operation :arg doc_type: A comma-separated list of types to restrict the operation @@ -471,7 +475,7 @@ class Elasticsearch(object): """ The suggest feature suggests similar looking terms based on a provided text by using a suggester. - http://elasticsearch.org/guide/reference/api/search/suggest/ + ``_ :arg index: A comma-separated list of index names to restrict the operation; use `_all` or empty string to perform the operation on all indices @@ -492,7 +496,7 @@ class Elasticsearch(object): """ Send a percolate request which include a doc, and get back the queries that match on that doc out of the set of registered queries. - http://elasticsearch.org/guide/reference/api/percolate/ + ``_ :arg index: The name of the index with a registered percolator query :arg doc_type: The document type @@ -513,7 +517,7 @@ class Elasticsearch(object): def mlt(self, index, doc_type, id, body=None, params=None): """ Get documents that are "like" a specified document. - http://elasticsearch.org/guide/reference/api/more-like-this/ + ``_ :arg index: The name of the index :arg doc_type: The type of the document (use `_all` to fetch the first @@ -558,7 +562,7 @@ class Elasticsearch(object): """ Computes a score explanation for a query and a specific document and presents the calculation. - http://elasticsearch.org/guide/reference/api/explain/ + ``_ :arg index: The name of the index :arg doc_type: The type of the document diff --git a/elasticsearch/client/cluster.py b/elasticsearch/client/cluster.py index 8aa9511b..1df7e795 100644 --- a/elasticsearch/client/cluster.py +++ b/elasticsearch/client/cluster.py @@ -7,7 +7,7 @@ class ClusterClient(NamespacedClient): def health(self, index=None, params=None): """ Get a very simple status on the health of the cluster. - http://elasticsearch.org/guide/reference/api/admin-cluster-health/ + ``_ :arg index: Limit the information returned to a specific index :arg level: Specify the level of detail for returned information, default u'cluster' @@ -29,7 +29,7 @@ class ClusterClient(NamespacedClient): def state(self, params=None): """ Get a comprehensive state information of the whole cluster. - http://elasticsearch.org/guide/reference/api/admin-cluster-state/ + ``_ :arg filter_blocks: Do not return information about blocks :arg filter_index_templates: Do not return information about index templates @@ -48,7 +48,7 @@ class ClusterClient(NamespacedClient): def reroute(self, body=None, params=None): """ Explicitly execute a cluster reroute allocation command including specific commands. - http://elasticsearch.org/guide/reference/api/admin-cluster-reroute/ + ``_ :arg body: The definition of `commands` to perform (`move`, `cancel`, `allocate`) :arg dry_run: Simulate the operation only and return the resulting state @@ -61,7 +61,7 @@ class ClusterClient(NamespacedClient): def get_settings(self, params=None): """ Get cluster settings. - http://elasticsearch.org/guide/reference/api/admin-cluster-update-settings/ + ``_ """ _, data = self.transport.perform_request('GET', '/_cluster/settings', params=params) return data @@ -70,7 +70,7 @@ class ClusterClient(NamespacedClient): def put_settings(self, body, params=None): """ Update cluster wide specific settings. - http://elasticsearch.org/guide/reference/api/admin-cluster-update-settings/ + ``_ :arg body: The settings to be updated. Can be either `transient` or `persistent` (survives cluster restart). @@ -83,7 +83,7 @@ class ClusterClient(NamespacedClient): def node_stats(self, node_id=None, metric=None, fields=None, params=None): """ Retrieve one or more (or all) of the cluster nodes statistics. - http://elasticsearch.org/guide/reference/api/admin-cluster-nodes-stats/ + ``_ :arg node_id: A comma-separated list of node IDs or names to limit the returned information; use `_local` to return information from the node @@ -113,7 +113,7 @@ class ClusterClient(NamespacedClient): def node_info(self, node_id=None, params=None): """ Retrieve one or more (or all) of the cluster nodes' information. - http://elasticsearch.org/guide/reference/api/admin-cluster-nodes-info/ + ``_ :arg node_id: A comma-separated list of node IDs or names to limit the returned information; use `_local` to return information from the node @@ -139,7 +139,7 @@ class ClusterClient(NamespacedClient): def node_shutdown(self, node_id=None, params=None): """ Shutdown one or more (or all) nodes in the cluster. - http://elasticsearch.org/guide/reference/api/admin-cluster-nodes-shutdown/ + ``_ :arg node_id: A comma-separated list of node IDs or names to perform the operation on; use `_local` to perform the operation on the node diff --git a/elasticsearch/client/indices.py b/elasticsearch/client/indices.py index 6fd8144d..c8da9acb 100644 --- a/elasticsearch/client/indices.py +++ b/elasticsearch/client/indices.py @@ -7,7 +7,7 @@ class IndicesClient(NamespacedClient): def analyze(self, index=None, body=None, params=None): """ Perform the analysis process on a text and return the tokens breakdown of the text. - http://www.elasticsearch.org/guide/reference/api/admin-indices-analyze/ + ``_ :arg index: The name of the index to scope the operation :arg body: The text on which the analysis should be performed @@ -32,7 +32,7 @@ class IndicesClient(NamespacedClient): """ Explicitly refresh one or more index, making all operations performed since the last refresh available for search. - http://www.elasticsearch.org/guide/reference/api/admin-indices-refresh/ + ``_ :arg index: A comma-separated list of index names; use `_all` or empty string to perform the operation on all indices @@ -47,7 +47,7 @@ class IndicesClient(NamespacedClient): def flush(self, index=None, params=None): """ Explicitly flush one or more indices. - http://www.elasticsearch.org/guide/reference/api/admin-indices-flush/ + ``_ :arg index: A comma-separated list of index names; use `_all` or empty string for all indices @@ -65,7 +65,7 @@ class IndicesClient(NamespacedClient): def create(self, index, body=None, params=None): """ Create an index in Elasticsearch. - http://www.elasticsearch.org/guide/reference/api/admin-indices-create-index/ + ``_ :arg index: The name of the index :arg body: The configuration for the index (`settings` and `mappings`) @@ -80,7 +80,7 @@ class IndicesClient(NamespacedClient): def open(self, index, params=None): """ Open a closed index to make it available for search. - http://www.elasticsearch.org/guide/reference/api/admin-indices-open-close/ + ``_ :arg index: The name of the index :arg master_timeout: Specify timeout for connection to master @@ -95,7 +95,7 @@ class IndicesClient(NamespacedClient): """ Close an index to remove it's overhead from the cluster. Closed index is blocked for read/write operations. - http://www.elasticsearch.org/guide/reference/api/admin-indices-open-close/ + ``_ :arg index: The name of the index :arg master_timeout: Specify timeout for connection to master @@ -109,7 +109,7 @@ class IndicesClient(NamespacedClient): def delete(self, index=None, params=None): """ Delete an index in Elasticsearch - http://www.elasticsearch.org/guide/reference/api/admin-indices-delete-index/ + ``_ :arg index: A comma-separated list of indices to delete; use `_all` or empty string to delete all indices @@ -124,7 +124,7 @@ class IndicesClient(NamespacedClient): def exists(self, index, params=None): """ Return a boolean indicating whether given index exists. - http://www.elasticsearch.org/guide/reference/api/admin-indices-indices-exists/ + ``_ :arg index: A list of indices to check """ @@ -138,7 +138,7 @@ class IndicesClient(NamespacedClient): def exists_type(self, index, doc_type, params=None): """ Check if a type/types exists in an index/indices. - http://www.elasticsearch.org/guide/reference/api/admin-indices-types-exists/ + ``_ :arg index: A comma-separated list of index names; use `_all` to check the types across all indices @@ -156,7 +156,7 @@ class IndicesClient(NamespacedClient): def snapshot_index(self, index=None, params=None): """ Explicitly perform a snapshot through the gateway of one or more indices (backup them). - http://www.elasticsearch.org/guide/reference/api/admin-indices-gateway-snapshot/ + ``_ :arg index: A comma-separated list of index names; use `_all` or empty string for all indices @@ -171,7 +171,7 @@ class IndicesClient(NamespacedClient): def put_mapping(self, index, doc_type, body, params=None): """ Register specific mapping definition for a specific type. - http://www.elasticsearch.org/guide/reference/api/admin-indices-put-mapping/ + ``_ :arg index: A comma-separated list of index names; use `_all` to perform the operation on all indices @@ -190,7 +190,7 @@ class IndicesClient(NamespacedClient): def get_mapping(self, index=None, doc_type=None, params=None): """ Retrieve mapping definition of index or index/type. - http://www.elasticsearch.org/guide/reference/api/admin-indices-get-mapping/ + ``_ :arg index: A comma-separated list of index names; use `_all` or empty string for all indices @@ -204,7 +204,7 @@ class IndicesClient(NamespacedClient): def delete_mapping(self, index, doc_type, params=None): """ Delete a mapping (type) along with its data. - http://www.elasticsearch.org/guide/reference/api/admin-indices-delete-mapping/ + ``_ :arg index: A comma-separated list of index names; use `_all` for all indices :arg doc_type: The name of the document type to delete @@ -218,7 +218,7 @@ class IndicesClient(NamespacedClient): def put_alias(self, index, name, body=None, params=None): """ Create an alias for a specific index/indices. - http://www.elasticsearch.org/guide/reference/api/admin-indices-aliases/ + ``_ :arg index: The name of the index with an alias :arg name: The name of the alias to be created or updated @@ -234,7 +234,7 @@ class IndicesClient(NamespacedClient): def exists_alias(self, name, index=None, params=None): """ Return a boolean indicating whether given alias exists. - http://www.elasticsearch.org/guide/reference/api/admin-indices-aliases/ + ``_ :arg name: A comma-separated list of alias names to return :arg index: A comma-separated list of index names to filter aliases @@ -252,7 +252,7 @@ class IndicesClient(NamespacedClient): def get_alias(self, name, index=None, params=None): """ Retrieve a specified alias. - http://www.elasticsearch.org/guide/reference/api/admin-indices-aliases/ + ``_ :arg name: A comma-separated list of alias names to return :arg index: A comma-separated list of index names to filter aliases @@ -267,7 +267,7 @@ class IndicesClient(NamespacedClient): def get_aliases(self, index=None, params=None): """ Retrieve specified aliases - http://www.elasticsearch.org/guide/reference/api/admin-indices-aliases/ + ``_ :arg index: A comma-separated list of index names to filter aliases :arg timeout: Explicit operation timeout @@ -280,7 +280,7 @@ class IndicesClient(NamespacedClient): def update_aliases(self, body, params=None): """ Update specified aliases. - http://www.elasticsearch.org/guide/reference/api/admin-indices-aliases/ + ``_ :arg body: The definition of `actions` to perform :arg master_timeout: Specify timeout for connection to master @@ -294,7 +294,7 @@ class IndicesClient(NamespacedClient): def delete_alias(self, index, name, params=None): """ Delete specific alias. - http://www.elasticsearch.org/guide/reference/api/admin-indices-aliases/ + ``_ :arg index: The name of the index with an alias :arg name: The name of the alias to be deleted @@ -310,7 +310,7 @@ class IndicesClient(NamespacedClient): """ Create an index template that will automatically be applied to new indices created. - http://www.elasticsearch.org/guide/reference/api/admin-indices-templates/ + ``_ :arg name: The name of the template :arg body: The template definition @@ -327,7 +327,7 @@ class IndicesClient(NamespacedClient): def get_template(self, name, params=None): """ Retrieve an index template by its name. - http://www.elasticsearch.org/guide/reference/api/admin-indices-templates/ + ``_ :arg name: The name of the template """ @@ -339,7 +339,7 @@ class IndicesClient(NamespacedClient): def delete_template(self, name, params=None): """ Delete an index template by its name. - http://www.elasticsearch.org/guide/reference/api/admin-indices-templates/ + ``_ :arg name: The name of the template :arg master_timeout: Specify timeout for connection to master @@ -353,7 +353,7 @@ class IndicesClient(NamespacedClient): def get_settings(self, index=None, params=None): """ Retrieve settings for one or more (or all) indices. - http://www.elasticsearch.org/guide/reference/api/admin-indices-get-settings/ + ``_ :arg index: A comma-separated list of index names; use `_all` or empty string to perform the operation on all indices @@ -366,7 +366,7 @@ class IndicesClient(NamespacedClient): def put_settings(self, body, index=None, params=None): """ Change specific index level settings in real time. - http://www.elasticsearch.org/guide/reference/api/admin-indices-update-settings/ + ``_ :arg index: A comma-separated list of index names; use `_all` or empty string to perform the operation on all indices @@ -382,7 +382,7 @@ class IndicesClient(NamespacedClient): """ Create an index warmer to run registered search requests to warm up the index before it is available for search. - http://www.elasticsearch.org/guide/reference/api/admin-indices-warmers/ + ``_ :arg index: A comma-separated list of index names to register the warmer for; use `_all` or empty string to perform the operation on all indices @@ -400,7 +400,7 @@ class IndicesClient(NamespacedClient): def get_warmer(self, index, doc_type=None, name=None, params=None): """ Retreieve an index warmer. - http://www.elasticsearch.org/guide/reference/api/admin-indices-warmers/ + ``_ :arg index: A comma-separated list of index names to restrict the operation; use `_all` to perform the operation on all indices @@ -415,7 +415,7 @@ class IndicesClient(NamespacedClient): def delete_warmer(self, index, doc_type=None, name=None, params=None): """ Delete an index warmer. - http://www.elasticsearch.org/guide/reference/api/admin-indices-warmers/ + ``_ :arg index: A comma-separated list of index names to register warmer for; use `_all` or empty string to perform the operation on all indices @@ -432,7 +432,7 @@ class IndicesClient(NamespacedClient): def status(self, index=None, params=None): """ Get a comprehensive status information of one or more indices. - http://elasticsearch.org/guide/reference/api/admin-indices-_/ + ``_ :arg index: A comma-separated list of index names; use `_all` or empty string to perform the operation on all indices @@ -452,7 +452,7 @@ class IndicesClient(NamespacedClient): def stats(self, index=None, metric_family=None, params=None): """ Retrieve statistics on different operations happening on an index. - http://elasticsearch.org/guide/reference/api/admin-indices-stats/ + ``_ :arg index: A comma-separated list of index names; use `_all` or empty string to perform the operation on all indices @@ -486,7 +486,7 @@ class IndicesClient(NamespacedClient): def segments(self, index=None, params=None): """ Provide low level segments information that a Lucene index (shard level) is built with. - http://elasticsearch.org/guide/reference/api/admin-indices-segments/ + ``_ :arg index: A comma-separated list of index names; use `_all` or empty string to perform the operation on all indices @@ -502,7 +502,7 @@ class IndicesClient(NamespacedClient): def optimize(self, index=None, params=None): """ Explicitly optimize one or more indices through an API. - http://www.elasticsearch.org/guide/reference/api/admin-indices-optimize/ + ``_ :arg index: A comma-separated list of index names; use `_all` or empty string to perform the operation on all indices @@ -527,7 +527,7 @@ class IndicesClient(NamespacedClient): def validate_query(self, index=None, doc_type=None, body=None, params=None): """ Validate a potentially expensive query without executing it. - http://www.elasticsearch.org/guide/reference/api/validate/ + ``_ :arg index: A comma-separated list of index names to restrict the operation; use `_all` or empty string to perform the operation on all indices @@ -552,7 +552,7 @@ class IndicesClient(NamespacedClient): def clear_cache(self, index=None, params=None): """ Clear either all caches or specific cached associated with one ore more indices. - http://www.elasticsearch.org/guide/reference/api/admin-indices-clearcache/ + ``_ :arg index: A comma-separated list of index name to limit the operation :arg field_data: Clear field data diff --git a/elasticsearch/connection/http.py b/elasticsearch/connection/http.py index 01e162f5..8567420f 100644 --- a/elasticsearch/connection/http.py +++ b/elasticsearch/connection/http.py @@ -11,7 +11,7 @@ from ..exceptions import ConnectionError class RequestsHttpConnection(Connection): """ Connection using the `requests` library. """ - def __init__(self, **kwargs): + def __init__(self, host='localhost', port=9200, url_prefix='', timeout=10, **kwargs): super(RequestsHttpConnection, self).__init__(**kwargs) self.session = requests.session() @@ -39,7 +39,10 @@ class RequestsHttpConnection(Connection): return response.status_code, raw_data class Urllib3HttpConnection(Connection): - def __init__(self, host='localhost', port=9200, **kwargs): + """ + Default connection class using the `urllib3` library and the http protocol. + """ + def __init__(self, host='localhost', port=9200, url_prefix='', timeout=10, **kwargs): super(Urllib3HttpConnection, self).__init__(host=host, port=port, **kwargs) self.pool = urllib3.HTTPConnectionPool(host, port=port, timeout=kwargs.get('timeout', None)) diff --git a/elasticsearch/connection/memcached.py b/elasticsearch/connection/memcached.py index 09f0c163..47636d34 100644 --- a/elasticsearch/connection/memcached.py +++ b/elasticsearch/connection/memcached.py @@ -9,6 +9,12 @@ from ..exceptions import TransportError, ConnectionError, ImproperlyConfigured from .pooling import PoolingConnection class MemcachedConnection(PoolingConnection): + """ + Client using the `pylibmc` python library to communicate with elasticsearch + using the memcached protocol. Requires plugin in the cluster. + + See https://github.com/elasticsearch/elasticsearch-transport-memcached for more details. + """ transport_schema = 'memcached' method_map = { diff --git a/elasticsearch/connection/thrift.py b/elasticsearch/connection/thrift.py index 25e039a6..d7c9b9a3 100644 --- a/elasticsearch/connection/thrift.py +++ b/elasticsearch/connection/thrift.py @@ -16,9 +16,18 @@ from ..exceptions import ConnectionError, ImproperlyConfigured from .pooling import PoolingConnection class ThriftConnection(PoolingConnection): + """ + Connection using the `thrift` protocol to communicate with elasticsearch. + + See https://github.com/elasticsearch/elasticsearch-transport-thrift for additional info. + """ transport_schema = 'thrift' def __init__(self, host='localhost', port=9500, framed_transport=False, **kwargs): + """ + :arg framed_transport: use `TTransport.TFramedTransport` instead of + `TTransport.TBufferedTransport` + """ if not THRIFT_AVAILABLE: raise ImproperlyConfigured("Thrift is not available.")