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.3.0.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.3.0-py3-none-any.whl (18.2 kB view details)

Uploaded Python 3

File details

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

File metadata

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

File hashes

Hashes for esxport-9.3.0.tar.gz
Algorithm Hash digest
SHA256 ea8b15d9c0ff97838733cd59219e1e2e4190fb4eaf3005c27d109687c72072a3
MD5 f046a32b56d6e42d1477bed5bd3df4e3
BLAKE2b-256 148de5eff7cb473dabf33633d12c43c5c3168855d7e4c48566aff3e8047b5c37

See more details on using hashes here.

Provenance

The following attestation bundles were made for esxport-9.3.0.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.3.0-py3-none-any.whl.

File metadata

  • Download URL: esxport-9.3.0-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.7

File hashes

Hashes for esxport-9.3.0-py3-none-any.whl
Algorithm Hash digest
SHA256 15a4664de4207f27efda1d09178943ce1290f072fcf5a34c5004f920179d6c2e
MD5 766be0bf9ad64829b56debd5245947f3
BLAKE2b-256 d12b8c8d20164b756336bcac535143ebd84a6f25e2c29c2bb6613f38f1026a5a

See more details on using hashes here.

Provenance

The following attestation bundles were made for esxport-9.3.0-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