Skip to main content

An adept Python CLI utility designed for querying Elasticsearch and exporting result as a CSV file.

Project description

EsXport

codecov PyPI Downloads PyPI Version Quality Gate Status

A Python-based CLI utility and module designed for querying Elasticsearch and exporting results as a CSV file.

Requirements

  1. This tool should be used with Elasticsearch 8.x version.
  2. You also need >= Python 3.10.x.

Installation

From source:

pip install esxport

For development purpose

pip install "esxport[dev]"

Usage

CLI Usage

Run esxport --help for detailed information on available options:

OPTIONS

Usage: esxport [OPTIONS]

Options:
  -q, --query JSON           Query string in Query DSL syntax. [required]
  -o, --output-file PATH     CSV file location. [required]
  -i, --index-prefixes TEXT  Index name prefix(es). [required]
  -u, --url URL              Elasticsearch host URL. [default: https://localhost:9200]
  -U, --user TEXT            Elasticsearch basic authentication user. [default: elastic]
  -p, --password TEXT        Elasticsearch basic authentication password. [required]
  -f, --fields TEXT          List of _source fields to present in the output. [default: _all]
  -S, --sort ELASTIC SORT    List of fields to sort in the format `<field>:<direction>`.
  -d, --delimiter TEXT       Delimiter to use in the CSV file. [default: ,]
  -m, --max-results INTEGER  Maximum number of results to return. [default: 10]
  -s, --scroll-size INTEGER  Scroll size for each batch of results. [default: 100]
  -e, --meta-fields [_id|_index|_score]
                             Add meta-fields to the output.
  --verify-certs             Verify SSL certificates.
  --ca-certs PATH            Location of CA bundle.
  --client-cert PATH         Location of Client Auth cert.
  --client-key PATH          Location of Client Cert Key.
  -v, --version              Show version and exit.
  --debug                    Enable debug mode.
  --help                     Show this message and exit.

Module Usage

In addition to the CLI, EsXport can now be used as a Python module. Below is an example of how to integrate it into your Python application:

from esxport import CliOptions, EsXport

kwargs = {
    "query": {
        "query": {"match_all": {}},
        "size": 1000
    },
    "output_file": "output.csv",
    "index_prefixes": ["my-index-prefix"],
    "url": "https://localhost:9200",
    "user": "elastic",
    "password": "password",
    "verify_certs": False,
    "debug": True,
    "max_results": 1000,
    "scroll_size": 100,
    "sort": ["field_name:asc"],
    "ca_certs": "path/to/ca.crt"
}

# Create CLI options and initialize EsXport
cli_options = CliOptions(kwargs)
es = EsXport(cli_options)

# Export data
es.export()

Class Descriptions

CliOptions

A configuration class to manage CLI arguments programmatically when using the module.

Attributes

Attribute Type Description Default
query dict Elasticsearch Query DSL syntax for filtering data. N/A
output_file str Path to save the exported CSV file. N/A
url str Elasticsearch host URL. "https://localhost:9200"
user str Basic authentication username for Elasticsearch. "elastic"
password str Basic authentication password for Elasticsearch. N/A
index_prefixes list[str] List of index prefixes to query. N/A
fields list[str] List of _source fields to include in the output. ["_all"]
sort list[str] Fields to sort the output in the format `field_name:asc desc`.
delimiter str Delimiter for the CSV output. ","
max_results int Maximum number of results to fetch. 10
scroll_size int Batch size for scroll queries. 100
meta_fields list[str] Metadata fields to include in the output. ["_id", "_index", "_score"]
verify_certs bool Whether to verify SSL certificates. False
ca_certs str Path to the CA certificate bundle. N/A
client_cert str Path to the client certificate for authentication. N/A
client_key str Path to the client key for authentication. N/A
debug bool Enable debugging. False

Example Initialization

from esxport import CliOptions

cli_options = CliOptions({
    "query": {"query": {"match_all": {}}},
    "output_file": "data.csv",
    "url": "https://localhost:9200",
    "user": "elastic",
    "password": "password",
    "index_prefixes": ["my-index-prefix"],
    "fields": ["field1", "field2"],
    "sort": ["field1:asc"],
    "max_results": 1000,
    "scroll_size": 100
})

EsXport

The main class for executing the export operation.

Methods

Method Description
__init__(opts: CliOptions, es_client: ElasticsearchClient | None = None) Initializes the EsXport object with options (CliOptions) and an optional Elasticsearch client.
export() Executes the query and exports the results to the specified CSV file.

Example Initialization and Usage

from esxport import CliOptions, EsXport

# Define CLI options
cli_options = CliOptions({
    "query": {"query": {"match_all": {}}},
    "output_file": "output.csv",
    "url": "https://localhost:9200",
    "user": "elastic",
    "password": "password",
    "index_prefixes": ["my-index-prefix"]
})

# Initialize EsXport
esxport = EsXport(cli_options)

# Export data
esxport.export()

Development

This project uses Hatch for development environment management and packaging.

Quick Start

# Install hatch
pip install hatch

# Run tests
hatch run test

# Format code
hatch run lint:fmt

# Type checking
hatch run lint:typing

# Serve documentation locally
hatch run docs:serve

Available Environments

  • default - Development and testing environment
  • lint - Code formatting, linting, and type checking
  • docs - Documentation building and serving
  • release - Version management and publishing
  • all - Matrix testing across Python versions (3.10-3.14)

For comprehensive documentation on the development workflow, see: docs/HATCH_DEVELOPMENT.md

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

esxport-9.4.1.tar.gz (16.3 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

esxport-9.4.1-py3-none-any.whl (18.2 kB view details)

Uploaded Python 3

File details

Details for the file esxport-9.4.1.tar.gz.

File metadata

  • Download URL: esxport-9.4.1.tar.gz
  • Upload date:
  • Size: 16.3 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/6.1.0 CPython/3.13.13

File hashes

Hashes for esxport-9.4.1.tar.gz
Algorithm Hash digest
SHA256 3fae9436fc388e434f18439c4fbc369abb6af363844c74e12daae340e7a077c4
MD5 7257355ee2f4e77f0251f9031d202f9e
BLAKE2b-256 200606cb84a2e0b467ca366a600516ac9ffbc1858b06053a9cd5e1e050911f3c

See more details on using hashes here.

Provenance

The following attestation bundles were made for esxport-9.4.1.tar.gz:

Publisher: release.yml on nikhilbadyal/esxport

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file esxport-9.4.1-py3-none-any.whl.

File metadata

  • Download URL: esxport-9.4.1-py3-none-any.whl
  • Upload date:
  • Size: 18.2 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/6.1.0 CPython/3.13.13

File hashes

Hashes for esxport-9.4.1-py3-none-any.whl
Algorithm Hash digest
SHA256 8afcedcef83c1694ab72ef082e98358dfd7b43426897d9d25ed73574a747fa3c
MD5 39513f820287341bdaa8bc5c97c22b7a
BLAKE2b-256 d13c6dad25f28d4efa1b5bb4c9676661923694ca6bd3b87c138cc6f2b1f6240e

See more details on using hashes here.

Provenance

The following attestation bundles were made for esxport-9.4.1-py3-none-any.whl:

Publisher: release.yml on nikhilbadyal/esxport

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page