Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

🎨 Export developer API #50

Closed
wants to merge 1 commit into from
Closed
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
11 changes: 11 additions & 0 deletions esxport/__init__.py
Original file line number Diff line number Diff line change
@@ -1,3 +1,14 @@
"""EsXport CLi."""
from .click_opt.cli_options import CliOptions
from .elastic import ElasticsearchClient
from .esxport import EsXport

__version__ = "8.10.0"


__all__ = [
# Core
"CliOptions",
"ElasticsearchClient",
"EsXport",
]
30 changes: 16 additions & 14 deletions esxport/click_opt/cli_options.py
Original file line number Diff line number Diff line change
Expand Up @@ -8,6 +8,8 @@
import urllib3
from elastic_transport import SecurityWarning

from esxport.constant import default_config_fields

if TYPE_CHECKING:
from typing_extensions import Self

Expand All @@ -24,21 +26,21 @@ def __init__(
) -> None:
self.query: dict[str, Any] = myclass_kwargs["query"]
self.output_file = myclass_kwargs["output_file"]
self.url = myclass_kwargs["url"]
self.user = myclass_kwargs["user"]
self.url = myclass_kwargs.get("url", default_config_fields["url"])
self.user = myclass_kwargs.get("user", default_config_fields["user"])
self.password = myclass_kwargs["password"]
self.index_prefixes = myclass_kwargs["index_prefixes"]
self.fields: list[str] = list(myclass_kwargs["fields"])
self.sort: list[dict[str, str]] = myclass_kwargs["sort"]
self.delimiter = myclass_kwargs["delimiter"]
self.max_results = int(myclass_kwargs["max_results"])
self.scroll_size = int(myclass_kwargs["scroll_size"])
self.meta_fields: list[str] = list(myclass_kwargs["meta_fields"])
self.verify_certs: bool = myclass_kwargs["verify_certs"]
self.ca_certs = myclass_kwargs["ca_certs"]
self.client_cert = myclass_kwargs["ca_certs"]
self.client_key = myclass_kwargs["ca_certs"]
self.debug: bool = myclass_kwargs["debug"]
self.index_prefixes = myclass_kwargs.get("index_prefixes", default_config_fields["index_prefixes"])
self.fields: list[str] = list(myclass_kwargs.get("fields", default_config_fields["fields"]))
self.sort: list[dict[str, str]] = myclass_kwargs.get("sort", default_config_fields["sort"])
self.delimiter = myclass_kwargs.get("delimiter", default_config_fields["delimiter"])
self.max_results = int(myclass_kwargs.get("max_results", default_config_fields["max_results"]))
self.scroll_size = int(myclass_kwargs.get("scroll_size", default_config_fields["scroll_size"]))
self.meta_fields: list[str] = list(myclass_kwargs.get("meta_fields", default_config_fields["meta_fields"]))
self.verify_certs: bool = myclass_kwargs.get("verify_certs", default_config_fields["verify_certs"])
self.ca_certs = myclass_kwargs.get("ca_certs", default_config_fields["ca_certs"])
self.client_cert = myclass_kwargs.get("ca_certs", default_config_fields["client_cert"])
self.client_key = myclass_kwargs.get("ca_certs", default_config_fields["client_key"])
self.debug: bool = myclass_kwargs.get("debug", default_config_fields["debug"])
self.format: str = "csv"

def __str__(self: Self) -> str:
Expand Down
16 changes: 16 additions & 0 deletions esxport/constant.py
Original file line number Diff line number Diff line change
Expand Up @@ -4,3 +4,19 @@
TIMES_TO_TRY = 3
RETRY_DELAY = 60
META_FIELDS = ["_id", "_index", "_score"]
default_config_fields = {
"url": "https://localhost:9200",
"user": "elastic",
"index_prefixes": "",
"fields": ["_all"],
"sort": [],
"delimiter": ",",
"max_results": 10,
"scroll_size": 100,
"meta_fields": [],
"verify_certs": True,
"ca_certs": "",
"client_cert": "",
"client_key": "",
"debug": False,
}
32 changes: 16 additions & 16 deletions esxport/esxport_cli.py
Original file line number Diff line number Diff line change
Expand Up @@ -7,13 +7,13 @@
from click import Context, Parameter
from click_params import URL

from esxport import esxport
from esxport.__init__ import __version__
from esxport.click_opt.cli_options import CliOptions
from esxport.click_opt.click_custom import JSON, sort
from esxport.constant import META_FIELDS
from esxport.elastic import ElasticsearchClient
from esxport.strings import cli_version
from .__init__ import __version__
from .click_opt.cli_options import CliOptions
from .click_opt.click_custom import JSON, sort
from .constant import META_FIELDS, default_config_fields
from .elastic import ElasticsearchClient
from .esxport import EsXport
from .strings import cli_version

if TYPE_CHECKING:
from pathlib import Path
Expand Down Expand Up @@ -48,14 +48,14 @@ def print_version(ctx: Context, _: Parameter, value: bool) -> None: # noqa: FBT
"--url",
type=URL,
required=False,
default="https://localhost:9200",
default=default_config_fields["url"],
help="Elasticsearch host URL.",
)
@click.option(
"-U",
"--user",
required=False,
default="elastic",
default=default_config_fields["user"],
help="Elasticsearch basic authentication user.",
)
@click.password_option(
Expand All @@ -68,7 +68,7 @@ def print_version(ctx: Context, _: Parameter, value: bool) -> None: # noqa: FBT
@click.option(
"-f",
"--fields",
default=["_all"],
default=default_config_fields["fields"],
multiple=True,
help="List of _source fields to present be in output.",
)
Expand All @@ -82,28 +82,28 @@ def print_version(ctx: Context, _: Parameter, value: bool) -> None: # noqa: FBT
@click.option(
"-d",
"--delimiter",
default=",",
default=default_config_fields["delimiter"],
help="Delimiter to use in CSV file.",
)
@click.option(
"-m",
"--max-results",
default=10,
default=default_config_fields["max_results"],
type=int,
help="Maximum number of results to return.",
)
@click.option(
"-s",
"--scroll-size",
default=100,
default=default_config_fields["scroll_size"],
type=int,
help="Scroll size for each batch of results.",
)
@click.option(
"-e",
"--meta-fields",
type=click.Choice(META_FIELDS),
default=[],
default=default_config_fields["meta_fields"],
multiple=True,
help="Add meta-fields in output.",
)
Expand Down Expand Up @@ -138,7 +138,7 @@ def print_version(ctx: Context, _: Parameter, value: bool) -> None: # noqa: FBT
@click.option(
"--debug",
is_flag=True,
default=False,
default=default_config_fields["debug"],
help="Debug mode on.",
)
def cli( # noqa: PLR0913
Expand All @@ -164,7 +164,7 @@ def cli( # noqa: PLR0913
kwargs: dict[str, Any] = {k: v for k, v in locals().items() if k != "self"}
cli_options = CliOptions(kwargs)
client = ElasticsearchClient(cli_options)
es = esxport.EsXport(cli_options, client)
es = EsXport(cli_options, client)
es.export()


Expand Down
2 changes: 1 addition & 1 deletion test/click/cli_test.py
Original file line number Diff line number Diff line change
Expand Up @@ -21,7 +21,7 @@
}
usage_error_code = 2
random_pass = "password\n" # noqa: S105
export_module = "esxport.esxport.EsXport"
export_module = "esxport.esxport_cli.EsXport"


# noinspection PyTypeChecker
Expand Down
Loading