Skip to content
Merged
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
6 changes: 6 additions & 0 deletions CHANGELOG.md
Original file line number Diff line number Diff line change
Expand Up @@ -7,6 +7,12 @@ and this project adheres to [Semantic Versioning].

## [Unreleased]

## [0.0.26] - 2025-07-11

### Changed in 0.0.26

- Rename some methods changed in the Python SDK

## [0.0.25] - 2025-06-21

### Removed in 0.0.25
Expand Down
2 changes: 1 addition & 1 deletion development-requirements.txt
Original file line number Diff line number Diff line change
Expand Up @@ -17,7 +17,7 @@ sphinx-jinja2-compat==0.3.0
sphinx-prompt==1.9.0
sphinxext-remoteliteralinclude==0.6.0
sphinx-rtd-theme==3.0.2
sphinx-tabs==3.4.7
sphinx-tabs==3.4.5
sphinx-toolbox==4.0.0
sphinx==8.2.3
sphinxcontrib-applehelp==2.0.0
Expand Down
4 changes: 2 additions & 2 deletions requirements.txt
Original file line number Diff line number Diff line change
@@ -1,2 +1,2 @@
senzing==0.2.16
senzing-core==0.3.16
senzing==0.2.17
senzing-core==0.3.17
6 changes: 3 additions & 3 deletions setup.cfg
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
[metadata]
name = python-tools
version = 0.0.25
version = 0.0.26
author = senzing
author_email = support@senzing.com
description = Python Tools
Expand All @@ -21,8 +21,8 @@ package_dir =
packages = find:
python_requires = >=3.9
install_requires =
senzing >= 0.2.16
senzing-core >= 0.3.15
senzing >= 0.2.17
senzing-core >= 0.3.17

[options.packages.find]
where = src
87 changes: 42 additions & 45 deletions sz_tools/sz_command
Original file line number Diff line number Diff line change
Expand Up @@ -286,7 +286,7 @@
self.read_config()

# Create config file if one doesn't exist and write it again if it exists. read_config() merges DEFAULT_CONFIG
# with the config file incase new config settings are added to DEFAULT_CONFIG in a new release of the tool

Check warning on line 289 in sz_tools/sz_command

View workflow job for this annotation

GitHub Actions / spellcheck

Unknown word (incase)
self.write_config()

# Acquire Senzing engines and information
Expand Down Expand Up @@ -376,10 +376,10 @@

# szdiagnostic parsers

check_datastore_performance_parser = self.subparsers.add_parser(
"check_datastore_performance", usage=argparse.SUPPRESS
check_repository_performance_parser = self.subparsers.add_parser(
"check_repository_performance", usage=argparse.SUPPRESS
)
check_datastore_performance_parser.add_argument("seconds_to_run", default=3, nargs="?", type=int)
check_repository_performance_parser.add_argument("seconds_to_run", default=3, nargs="?", type=int)

get_feature_parser = self.subparsers.add_parser("get_feature", usage=argparse.SUPPRESS)
get_feature_parser.add_argument("featureID", type=int)
Expand Down Expand Up @@ -495,6 +495,10 @@
get_record_parser.add_argument("record_id")
get_record_parser.add_argument("-f", "--flags", nargs="+", required=False)

get_record_preview_parser = self.subparsers.add_parser("get_record_preview", usage=argparse.SUPPRESS)
get_record_preview_parser.add_argument("record_definition")
get_record_preview_parser.add_argument("-f", "--flags", nargs="+", required=False)

get_virtual_entity_by_record_id_parser = self.subparsers.add_parser(
"get_virtual_entity_by_record_id", usage=argparse.SUPPRESS
)
Expand All @@ -505,10 +509,6 @@
how_entity_by_entity_id_parser.add_argument("entity_id", type=int)
how_entity_by_entity_id_parser.add_argument("-f", "--flags", nargs="+", required=False)

preprocess_record_parser = self.subparsers.add_parser("preprocess_record", usage=argparse.SUPPRESS)
preprocess_record_parser.add_argument("record_definition")
preprocess_record_parser.add_argument("-f", "--flags", nargs="+", required=False)

process_redo_record_parser = self.subparsers.add_parser("process_redo_record", usage=argparse.SUPPRESS)
process_redo_record_parser.add_argument("redo_record")
process_redo_record_parser.add_argument("-f", "--flags", nargs="+", required=False)
Expand Down Expand Up @@ -923,29 +923,29 @@
# -----------------------------------------------------------------------------

@do_methods_decorator
def do_check_datastore_performance(self, **kwargs: Any) -> None:
def do_check_repository_performance(self, **kwargs: Any) -> None:
"""
Run a performance check on the database
Run a performance check on the repository

Syntax:
check_datastore_performance [seconds_to_run]
check_datastore_performance
check_repository_performance [seconds_to_run]
check_repository_performance

Arguments:
seconds_to_run = Time in seconds to run the check, default is 3"""

response = self.sz_diagnostic.check_datastore_performance(kwargs["parsed_args"].seconds_to_run)
response = self.sz_diagnostic.check_repository_performance(kwargs["parsed_args"].seconds_to_run)
self.last_response = self.output_response(response)

@do_methods_decorator
def do_get_datastore_info(self) -> None:
def do_get_repository_info(self) -> None:
"""
Get data store information
Get repository information

Syntax:
get_datastore_info"""
get_repository_info"""

response = self.sz_diagnostic.get_datastore_info()
response = self.sz_diagnostic.get_repository_info()
self.last_response = self.output_response(response)

@do_methods_decorator
Expand Down Expand Up @@ -1137,7 +1137,7 @@
rec_cnt += 1
if rec_cnt % 1000 == 0:
print(f"Exported {rec_cnt} records...", flush=True)
self.sz_engine.close_export(export_handle)
self.sz_engine.close_export_report(export_handle)
except (SzError, IOError) as err:
print_error(err)
else:
Expand Down Expand Up @@ -1187,7 +1187,7 @@
rec_cnt += 1
if rec_cnt % 1000 == 0:
print(f"Exported {rec_cnt} records...", flush=True)
self.sz_engine.close_export(export_handle)
self.sz_engine.close_export_report(export_handle)
except (SzError, IOError) as err:
print_error(err)
else:
Expand Down Expand Up @@ -1501,6 +1501,27 @@
response = get_record(kwargs["flags"]) if "flags" in kwargs else get_record()
self.last_response = self.output_response(response)

@do_methods_decorator
def do_get_record_preview(self, **kwargs: Any) -> None:
"""
Describe the features resulting from the hypothetical load of a record

Syntax:
get_record_preview record_definition [-f flag ...]

Examples:
get_record_preview '{"NAME_FULL":"Robert Smith", "DATE_OF_BIRTH":"7/4/1976", "PHONE_NUMBER":"787-767-2088"}'

Arguments:
record_definition = Senzing mapped JSON representation of a record
flag = Optional space separated list of engine flag(s) to determine output (don't specify for defaults)
"""

preview_record = functools.partial(self.sz_engine.get_record_preview, kwargs["parsed_args"].record_definition)

response = preview_record(kwargs["flags"]) if "flags" in kwargs else preview_record()
self.last_response = self.output_response(response)

@do_methods_decorator
def do_get_redo_record(self) -> None:
"""
Expand Down Expand Up @@ -1614,30 +1635,6 @@
response = process_redo(kwargs["flags"]) if "flags" in kwargs else process_redo()
self.last_response = self.output_response(response)

@do_methods_decorator
def do_preprocess_record(self, **kwargs: Any) -> None:
"""
Pre-process a record

Syntax:
preprocess_record record_definition [-f flag ...]

Examples:
preprocess_record '{"NAME_FULL":"Robert Smith", "DATE_OF_BIRTH":"7/4/1976", "PHONE_NUMBER":"787-767-2088"}'

Arguments:
record_definition = Senzing mapped JSON representation of a record
flag = Optional space separated list of engine flag(s) to determine output (don't specify for defaults)
"""

preprocess_record = functools.partial(
self.sz_engine.preprocess_record,
kwargs["parsed_args"].record_definition,
)

response = preprocess_record(kwargs["flags"]) if "flags" in kwargs else preprocess_record()
self.last_response = self.output_response(response)

@do_methods_decorator
def do_reevaluate_entity(self, **kwargs: Any) -> None:
"""
Expand Down Expand Up @@ -2238,7 +2235,7 @@
return self.flags_completes(text, line) + kwargs["cmd_settings"]

@cmd_settings_decorator
def complete_check_datastore_performance(
def complete_check_repository_performance(
self, text: str, line: str, begidx: int, endidx: int, **kwargs
) -> List[str]:
return kwargs["cmd_settings"]
Expand Down Expand Up @@ -2300,7 +2297,7 @@
return kwargs["cmd_settings"]

@cmd_settings_decorator
def complete_get_datastore_info(self, text: str, line: str, begidx: int, endidx: int, **kwargs) -> List[str]:
def complete_get_repository_info(self, text: str, line: str, begidx: int, endidx: int, **kwargs) -> List[str]:
return kwargs["cmd_settings"]

@cmd_settings_decorator
Expand Down Expand Up @@ -2342,7 +2339,7 @@
return self.flags_completes(text, line) + kwargs["cmd_settings"]

@cmd_settings_decorator
def complete_preprocess_record(self, text: str, line: str, begidx: int, endidx: int, **kwargs) -> List[str]:
def complete_get_record_preview(self, text: str, line: str, begidx: int, endidx: int, **kwargs) -> List[str]:
return self.flags_completes(text, line) + kwargs["cmd_settings"]

@cmd_settings_decorator
Expand Down
10 changes: 5 additions & 5 deletions sz_tools/sz_file_loader
Original file line number Diff line number Diff line change
Expand Up @@ -606,7 +606,7 @@ def startup_info(
ver_info = _json_loads(product.get_version())
config_list = _json_loads(configmgr.get_config_registry())
active_cfg_id = engine.get_active_config_id()
ds_info = _json_loads(diag.get_datastore_info())
ds_info = _json_loads(diag.get_repository_info())
except SzError as err:
raise err

Expand Down Expand Up @@ -657,11 +657,11 @@ def startup_info(
db_tune_article = "https://senzing.zendesk.com/hc/en-us/articles/360016288254-Tuning-Your-Database"

logger.info("")
logger.info("Datastore Performance")
logger.info("Repository Performance")
logger.info("---------------------")
logger.info("")

ds_perf = _json_loads(diag.check_datastore_performance(3))
ds_perf = _json_loads(diag.check_repository_performance(3))
num_recs_inserted = ds_perf.get("numRecordsInserted", None)
if num_recs_inserted:
insert_time = ds_perf["insertTime"]
Expand All @@ -671,11 +671,11 @@ def startup_info(
logger.info("Average per insert: %s ms", f"{time_per_insert:.3f}")
logger.info("")
else:
logger.error("Datastore performance test failed!")
logger.error("Repository performance test failed!")

if time_per_insert > max_time_per_insert:
logger.warning(
"Datastore performance of %s ms per insert is slower than the recommended minimum of %s ms per insert",
"Repository performance of %s ms per insert is slower than the recommended minimum of %s ms per insert",
f"{time_per_insert:.1f}",
f"{max_time_per_insert:.1f}",
)
Expand Down
Loading