leaf-common 1.2.38__tar.gz → 1.2.40__tar.gz
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- {leaf_common-1.2.38 → leaf_common-1.2.40}/.flake8 +1 -1
- {leaf_common-1.2.38 → leaf_common-1.2.40}/.pylintrc +7 -8
- leaf_common-1.2.40/Makefile +32 -0
- {leaf_common-1.2.38 → leaf_common-1.2.40}/PKG-INFO +1 -1
- {leaf_common-1.2.38 → leaf_common-1.2.40}/build_scripts/run_pylint.sh +1 -1
- {leaf_common-1.2.38 → leaf_common-1.2.40}/leaf_common/config/resolver.py +3 -2
- leaf_common-1.2.40/leaf_common/serialization/util/text_file_reader.py +53 -0
- {leaf_common-1.2.38 → leaf_common-1.2.40}/leaf_common.egg-info/PKG-INFO +1 -1
- {leaf_common-1.2.38 → leaf_common-1.2.40}/leaf_common.egg-info/SOURCES.txt +3 -0
- {leaf_common-1.2.38 → leaf_common-1.2.40}/requirements-build.txt +1 -1
- leaf_common-1.2.40/tests/serialization/encoding/text_file_reader_test.py +139 -0
- {leaf_common-1.2.38 → leaf_common-1.2.40}/.coveragerc +0 -0
- {leaf_common-1.2.38 → leaf_common-1.2.40}/.github/workflows/codeql.yml +0 -0
- {leaf_common-1.2.38 → leaf_common-1.2.40}/.github/workflows/publish.yml +0 -0
- {leaf_common-1.2.38 → leaf_common-1.2.40}/.github/workflows/tests.yml +0 -0
- {leaf_common-1.2.38 → leaf_common-1.2.40}/.gitignore +0 -0
- {leaf_common-1.2.38 → leaf_common-1.2.40}/CODE_OF_CONDUCT.md +0 -0
- {leaf_common-1.2.38 → leaf_common-1.2.40}/CONTRIBUTING.md +0 -0
- {leaf_common-1.2.38 → leaf_common-1.2.40}/LICENSE.txt +0 -0
- {leaf_common-1.2.38 → leaf_common-1.2.40}/NOTICE.txt +0 -0
- {leaf_common-1.2.38 → leaf_common-1.2.40}/README.md +0 -0
- {leaf_common-1.2.38 → leaf_common-1.2.40}/SECURITY.md +0 -0
- {leaf_common-1.2.38 → leaf_common-1.2.40}/SUPPORT.md +0 -0
- {leaf_common-1.2.38 → leaf_common-1.2.40}/build_scripts/copyright_config.json +0 -0
- {leaf_common-1.2.38 → leaf_common-1.2.40}/build_scripts/run_flake8.sh +0 -0
- {leaf_common-1.2.38 → leaf_common-1.2.40}/build_scripts/source_available_copyright.txt +0 -0
- {leaf_common-1.2.38 → leaf_common-1.2.40}/leaf_common/__init__.py +0 -0
- {leaf_common-1.2.38 → leaf_common-1.2.40}/leaf_common/asyncio/__init__.py +0 -0
- {leaf_common-1.2.38 → leaf_common-1.2.40}/leaf_common/asyncio/async_to_sync_generator.py +0 -0
- {leaf_common-1.2.38 → leaf_common-1.2.40}/leaf_common/asyncio/asyncio_executor.py +0 -0
- {leaf_common-1.2.38 → leaf_common-1.2.40}/leaf_common/asyncio/asyncio_executor_pool.py +0 -0
- {leaf_common-1.2.38 → leaf_common-1.2.40}/leaf_common/asyncio/task_executor.py +0 -0
- {leaf_common-1.2.38 → leaf_common-1.2.40}/leaf_common/candidates/__init__.py +0 -0
- {leaf_common-1.2.38 → leaf_common-1.2.40}/leaf_common/candidates/constants.py +0 -0
- {leaf_common-1.2.38 → leaf_common-1.2.40}/leaf_common/candidates/representation_types.py +0 -0
- {leaf_common-1.2.38 → leaf_common-1.2.40}/leaf_common/config/__init__.py +0 -0
- {leaf_common-1.2.38 → leaf_common-1.2.40}/leaf_common/config/config_filter.py +0 -0
- {leaf_common-1.2.38 → leaf_common-1.2.40}/leaf_common/config/config_filter_chain.py +0 -0
- {leaf_common-1.2.38 → leaf_common-1.2.40}/leaf_common/config/config_handler.py +0 -0
- {leaf_common-1.2.38 → leaf_common-1.2.40}/leaf_common/config/dictionary_overlay.py +0 -0
- {leaf_common-1.2.38 → leaf_common-1.2.40}/leaf_common/config/environment_defaults.py +0 -0
- {leaf_common-1.2.38 → leaf_common-1.2.40}/leaf_common/config/file_of_class.py +0 -0
- {leaf_common-1.2.38 → leaf_common-1.2.40}/leaf_common/config/resolver_util.py +0 -0
- {leaf_common-1.2.38 → leaf_common-1.2.40}/leaf_common/evaluation/__init__.py +0 -0
- {leaf_common-1.2.38 → leaf_common-1.2.40}/leaf_common/evaluation/component_evaluator.py +0 -0
- {leaf_common-1.2.38 → leaf_common-1.2.40}/leaf_common/evaluation/metrics_merger.py +0 -0
- {leaf_common-1.2.38 → leaf_common-1.2.40}/leaf_common/filters/__init__.py +0 -0
- {leaf_common-1.2.38 → leaf_common-1.2.40}/leaf_common/filters/composite_string_filter.py +0 -0
- {leaf_common-1.2.38 → leaf_common-1.2.40}/leaf_common/filters/inclusionary_replacement_string_filter.py +0 -0
- {leaf_common-1.2.38 → leaf_common-1.2.40}/leaf_common/filters/replacement_string_filter.py +0 -0
- {leaf_common-1.2.38 → leaf_common-1.2.40}/leaf_common/filters/sanitizer_util.py +0 -0
- {leaf_common-1.2.38 → leaf_common-1.2.40}/leaf_common/filters/string_filter.py +0 -0
- {leaf_common-1.2.38 → leaf_common-1.2.40}/leaf_common/filters/strip_whitespace_string_filter.py +0 -0
- {leaf_common-1.2.38 → leaf_common-1.2.40}/leaf_common/filters/tensorflow_field_name_filter.py +0 -0
- {leaf_common-1.2.38 → leaf_common-1.2.40}/leaf_common/fitness/__init__.py +0 -0
- {leaf_common-1.2.38 → leaf_common-1.2.40}/leaf_common/fitness/candidate_metrics_provider.py +0 -0
- {leaf_common-1.2.38 → leaf_common-1.2.40}/leaf_common/fitness/cmp_to_key.py +0 -0
- {leaf_common-1.2.38 → leaf_common-1.2.40}/leaf_common/fitness/comparator.py +0 -0
- {leaf_common-1.2.38 → leaf_common-1.2.40}/leaf_common/fitness/fitness_objective.py +0 -0
- {leaf_common-1.2.38 → leaf_common-1.2.40}/leaf_common/fitness/fitness_objectives.py +0 -0
- {leaf_common-1.2.38 → leaf_common-1.2.40}/leaf_common/fitness/fitness_objectives_builder.py +0 -0
- {leaf_common-1.2.38 → leaf_common-1.2.40}/leaf_common/fitness/fitness_objectives_from_config.py +0 -0
- {leaf_common-1.2.38 → leaf_common-1.2.40}/leaf_common/fitness/metrics_based_individual_comparator.py +0 -0
- {leaf_common-1.2.38 → leaf_common-1.2.40}/leaf_common/fitness/metrics_provider.py +0 -0
- {leaf_common-1.2.38 → leaf_common-1.2.40}/leaf_common/fitness/none_comparator.py +0 -0
- {leaf_common-1.2.38 → leaf_common-1.2.40}/leaf_common/fitness/number_comparator.py +0 -0
- {leaf_common-1.2.38 → leaf_common-1.2.40}/leaf_common/fitness/reversed_comparator.py +0 -0
- {leaf_common-1.2.38 → leaf_common-1.2.40}/leaf_common/log_utils/__init__.py +0 -0
- {leaf_common-1.2.38 → leaf_common-1.2.40}/leaf_common/log_utils/message_type.py +0 -0
- {leaf_common-1.2.38 → leaf_common-1.2.40}/leaf_common/log_utils/structured_message.py +0 -0
- {leaf_common-1.2.38 → leaf_common-1.2.40}/leaf_common/logging/__init__.py +0 -0
- {leaf_common-1.2.38 → leaf_common-1.2.40}/leaf_common/logging/example_logging_config.hocon +0 -0
- {leaf_common-1.2.38 → leaf_common-1.2.40}/leaf_common/logging/logging_setup.py +0 -0
- {leaf_common-1.2.38 → leaf_common-1.2.40}/leaf_common/logging/stream_to_logger.py +0 -0
- {leaf_common-1.2.38 → leaf_common-1.2.40}/leaf_common/parsers/__init__.py +0 -0
- {leaf_common-1.2.38 → leaf_common-1.2.40}/leaf_common/parsers/boolean_list_parser.py +0 -0
- {leaf_common-1.2.38 → leaf_common-1.2.40}/leaf_common/parsers/boolean_parser.py +0 -0
- {leaf_common-1.2.38 → leaf_common-1.2.40}/leaf_common/parsers/canonical_multi_config_parser.py +0 -0
- {leaf_common-1.2.38 → leaf_common-1.2.40}/leaf_common/parsers/dictionary_extractor.py +0 -0
- {leaf_common-1.2.38 → leaf_common-1.2.40}/leaf_common/parsers/field_extractor.py +0 -0
- {leaf_common-1.2.38 → leaf_common-1.2.40}/leaf_common/parsers/list_parser.py +0 -0
- {leaf_common-1.2.38 → leaf_common-1.2.40}/leaf_common/parsers/parser.py +0 -0
- {leaf_common-1.2.38 → leaf_common-1.2.40}/leaf_common/parsers/string_parser.py +0 -0
- {leaf_common-1.2.38 → leaf_common-1.2.40}/leaf_common/persistence/__init__.py +0 -0
- {leaf_common-1.2.38 → leaf_common-1.2.40}/leaf_common/persistence/easy/__init__.py +0 -0
- {leaf_common-1.2.38 → leaf_common-1.2.40}/leaf_common/persistence/easy/abstract_easy_persistence.py +0 -0
- {leaf_common-1.2.38 → leaf_common-1.2.40}/leaf_common/persistence/easy/composite_persistor.py +0 -0
- {leaf_common-1.2.38 → leaf_common-1.2.40}/leaf_common/persistence/easy/easy_hocon_persistence.py +0 -0
- {leaf_common-1.2.38 → leaf_common-1.2.40}/leaf_common/persistence/easy/easy_json_persistence.py +0 -0
- {leaf_common-1.2.38 → leaf_common-1.2.40}/leaf_common/persistence/easy/easy_txt_persistence.py +0 -0
- {leaf_common-1.2.38 → leaf_common-1.2.40}/leaf_common/persistence/easy/easy_yaml_persistence.py +0 -0
- {leaf_common-1.2.38 → leaf_common-1.2.40}/leaf_common/persistence/factory/README.md +0 -0
- {leaf_common-1.2.38 → leaf_common-1.2.40}/leaf_common/persistence/factory/__init__.py +0 -0
- {leaf_common-1.2.38 → leaf_common-1.2.40}/leaf_common/persistence/factory/abstract_persistence.py +0 -0
- {leaf_common-1.2.38 → leaf_common-1.2.40}/leaf_common/persistence/factory/hocon_persistence.py +0 -0
- {leaf_common-1.2.38 → leaf_common-1.2.40}/leaf_common/persistence/factory/json_gzip_persistence.py +0 -0
- {leaf_common-1.2.38 → leaf_common-1.2.40}/leaf_common/persistence/factory/json_persistence.py +0 -0
- {leaf_common-1.2.38 → leaf_common-1.2.40}/leaf_common/persistence/factory/null_persistence.py +0 -0
- {leaf_common-1.2.38 → leaf_common-1.2.40}/leaf_common/persistence/factory/override_file_extension_provider.py +0 -0
- {leaf_common-1.2.38 → leaf_common-1.2.40}/leaf_common/persistence/factory/persistence_factory.py +0 -0
- {leaf_common-1.2.38 → leaf_common-1.2.40}/leaf_common/persistence/factory/raw_bytes_persistence.py +0 -0
- {leaf_common-1.2.38 → leaf_common-1.2.40}/leaf_common/persistence/factory/reference_helper.py +0 -0
- {leaf_common-1.2.38 → leaf_common-1.2.40}/leaf_common/persistence/factory/simple_file_persistence.py +0 -0
- {leaf_common-1.2.38 → leaf_common-1.2.40}/leaf_common/persistence/factory/text_persistence.py +0 -0
- {leaf_common-1.2.38 → leaf_common-1.2.40}/leaf_common/persistence/factory/yaml_persistence.py +0 -0
- {leaf_common-1.2.38 → leaf_common-1.2.40}/leaf_common/persistence/interface/__init__.py +0 -0
- {leaf_common-1.2.38 → leaf_common-1.2.40}/leaf_common/persistence/interface/persistence.py +0 -0
- {leaf_common-1.2.38 → leaf_common-1.2.40}/leaf_common/persistence/interface/persistence_mechanism.py +0 -0
- {leaf_common-1.2.38 → leaf_common-1.2.40}/leaf_common/persistence/interface/persistor.py +0 -0
- {leaf_common-1.2.38 → leaf_common-1.2.40}/leaf_common/persistence/interface/restorer.py +0 -0
- {leaf_common-1.2.38 → leaf_common-1.2.40}/leaf_common/persistence/mechanism/__init__.py +0 -0
- {leaf_common-1.2.38 → leaf_common-1.2.40}/leaf_common/persistence/mechanism/abstract_persistence_mechanism.py +0 -0
- {leaf_common-1.2.38 → leaf_common-1.2.40}/leaf_common/persistence/mechanism/local_file_persistence_mechanism.py +0 -0
- {leaf_common-1.2.38 → leaf_common-1.2.40}/leaf_common/persistence/mechanism/persistence_mechanism_factory.py +0 -0
- {leaf_common-1.2.38 → leaf_common-1.2.40}/leaf_common/persistence/mechanism/persistence_mechanisms.py +0 -0
- {leaf_common-1.2.38 → leaf_common-1.2.40}/leaf_common/persistence/mechanism/s3_file_persistence_mechanism.py +0 -0
- {leaf_common-1.2.38 → leaf_common-1.2.40}/leaf_common/progress/__init__.py +0 -0
- {leaf_common-1.2.38 → leaf_common-1.2.40}/leaf_common/progress/composite_progress_reporter.py +0 -0
- {leaf_common-1.2.38 → leaf_common-1.2.40}/leaf_common/progress/iterating_progress_reporter.py +0 -0
- {leaf_common-1.2.38 → leaf_common-1.2.40}/leaf_common/progress/json_progress_reporter.py +0 -0
- {leaf_common-1.2.38 → leaf_common-1.2.40}/leaf_common/progress/progress_reporter.py +0 -0
- {leaf_common-1.2.38 → leaf_common-1.2.40}/leaf_common/progress/status_dict_progress_reporter.py +0 -0
- {leaf_common-1.2.38 → leaf_common-1.2.40}/leaf_common/progress/worker_progress_reporter.py +0 -0
- {leaf_common-1.2.38 → leaf_common-1.2.40}/leaf_common/representation/__init__.py +0 -0
- {leaf_common-1.2.38 → leaf_common-1.2.40}/leaf_common/representation/registry/__init__.py +0 -0
- {leaf_common-1.2.38 → leaf_common-1.2.40}/leaf_common/representation/registry/representation_file_extension_provider_registry.py +0 -0
- {leaf_common-1.2.38 → leaf_common-1.2.40}/leaf_common/representation/registry/representation_persistence_registry.py +0 -0
- {leaf_common-1.2.38 → leaf_common-1.2.40}/leaf_common/representation/registry/representation_serialization_format_registry.py +0 -0
- {leaf_common-1.2.38 → leaf_common-1.2.40}/leaf_common/representation/registry/self_identifying_restorer.py +0 -0
- {leaf_common-1.2.38 → leaf_common-1.2.40}/leaf_common/representation/rule_based/__init__.py +0 -0
- {leaf_common-1.2.38 → leaf_common-1.2.40}/leaf_common/representation/rule_based/config/__init__.py +0 -0
- {leaf_common-1.2.38 → leaf_common-1.2.40}/leaf_common/representation/rule_based/config/rule_set_config_helper.py +0 -0
- {leaf_common-1.2.38 → leaf_common-1.2.40}/leaf_common/representation/rule_based/data/__init__.py +0 -0
- {leaf_common-1.2.38 → leaf_common-1.2.40}/leaf_common/representation/rule_based/data/condition.py +0 -0
- {leaf_common-1.2.38 → leaf_common-1.2.40}/leaf_common/representation/rule_based/data/features.py +0 -0
- {leaf_common-1.2.38 → leaf_common-1.2.40}/leaf_common/representation/rule_based/data/rule.py +0 -0
- {leaf_common-1.2.38 → leaf_common-1.2.40}/leaf_common/representation/rule_based/data/rule_set.py +0 -0
- {leaf_common-1.2.38 → leaf_common-1.2.40}/leaf_common/representation/rule_based/data/rule_set_binding.py +0 -0
- {leaf_common-1.2.38 → leaf_common-1.2.40}/leaf_common/representation/rule_based/data/rules_constants.py +0 -0
- {leaf_common-1.2.38 → leaf_common-1.2.40}/leaf_common/representation/rule_based/evaluation/__init__.py +0 -0
- {leaf_common-1.2.38 → leaf_common-1.2.40}/leaf_common/representation/rule_based/evaluation/condition_evaluator.py +0 -0
- {leaf_common-1.2.38 → leaf_common-1.2.40}/leaf_common/representation/rule_based/evaluation/rule_evaluator.py +0 -0
- {leaf_common-1.2.38 → leaf_common-1.2.40}/leaf_common/representation/rule_based/evaluation/rule_metrics_merger.py +0 -0
- {leaf_common-1.2.38 → leaf_common-1.2.40}/leaf_common/representation/rule_based/evaluation/rule_set_binding_evaluator.py +0 -0
- {leaf_common-1.2.38 → leaf_common-1.2.40}/leaf_common/representation/rule_based/evaluation/rule_set_evaluator.py +0 -0
- {leaf_common-1.2.38 → leaf_common-1.2.40}/leaf_common/representation/rule_based/evaluation/rule_set_metrics_merger.py +0 -0
- {leaf_common-1.2.38 → leaf_common-1.2.40}/leaf_common/representation/rule_based/persistence/__init__.py +0 -0
- {leaf_common-1.2.38 → leaf_common-1.2.40}/leaf_common/representation/rule_based/persistence/rule_set_binding_file_persistence.py +0 -0
- {leaf_common-1.2.38 → leaf_common-1.2.40}/leaf_common/representation/rule_based/persistence/rule_set_file_persistence.py +0 -0
- {leaf_common-1.2.38 → leaf_common-1.2.40}/leaf_common/representation/rule_based/serialization/__init__.py +0 -0
- {leaf_common-1.2.38 → leaf_common-1.2.40}/leaf_common/representation/rule_based/serialization/condition_dictionary_converter.py +0 -0
- {leaf_common-1.2.38 → leaf_common-1.2.40}/leaf_common/representation/rule_based/serialization/rule_dictionary_converter.py +0 -0
- {leaf_common-1.2.38 → leaf_common-1.2.40}/leaf_common/representation/rule_based/serialization/rule_set_binding_dictionary_converter.py +0 -0
- {leaf_common-1.2.38 → leaf_common-1.2.40}/leaf_common/representation/rule_based/serialization/rule_set_dictionary_converter.py +0 -0
- {leaf_common-1.2.38 → leaf_common-1.2.40}/leaf_common/representation/rule_based/serialization/rule_set_serialization_format.py +0 -0
- {leaf_common-1.2.38 → leaf_common-1.2.40}/leaf_common/security/__init__.py +0 -0
- {leaf_common-1.2.38 → leaf_common-1.2.40}/leaf_common/security/service/__init__.py +0 -0
- {leaf_common-1.2.38 → leaf_common-1.2.40}/leaf_common/security/service/auth0_direct_service_accessor.py +0 -0
- {leaf_common-1.2.38 → leaf_common-1.2.40}/leaf_common/security/service/leaf_service_access.py +0 -0
- {leaf_common-1.2.38 → leaf_common-1.2.40}/leaf_common/security/service/service_accessor.py +0 -0
- {leaf_common-1.2.38 → leaf_common-1.2.40}/leaf_common/security/service/service_accessor_factory.py +0 -0
- {leaf_common-1.2.38 → leaf_common-1.2.40}/leaf_common/security/service/static_token_service_accessor.py +0 -0
- {leaf_common-1.2.38 → leaf_common-1.2.40}/leaf_common/security/service/vault_dynamic_token_service_accessor.py +0 -0
- {leaf_common-1.2.38 → leaf_common-1.2.40}/leaf_common/security/vault/__init__.py +0 -0
- {leaf_common-1.2.38 → leaf_common-1.2.40}/leaf_common/security/vault/github_vault_login.py +0 -0
- {leaf_common-1.2.38 → leaf_common-1.2.40}/leaf_common/security/vault/kubernetes_vault_login.py +0 -0
- {leaf_common-1.2.38 → leaf_common-1.2.40}/leaf_common/security/vault/token_vault_login.py +0 -0
- {leaf_common-1.2.38 → leaf_common-1.2.40}/leaf_common/security/vault/vault_login.py +0 -0
- {leaf_common-1.2.38 → leaf_common-1.2.40}/leaf_common/security/vault/vault_login_factory.py +0 -0
- {leaf_common-1.2.38 → leaf_common-1.2.40}/leaf_common/serialization/__init__.py +0 -0
- {leaf_common-1.2.38 → leaf_common-1.2.40}/leaf_common/serialization/format/__init__.py +0 -0
- {leaf_common-1.2.38 → leaf_common-1.2.40}/leaf_common/serialization/format/buffered_gzip_serialization_format.py +0 -0
- {leaf_common-1.2.38 → leaf_common-1.2.40}/leaf_common/serialization/format/chained_serialization_format.py +0 -0
- {leaf_common-1.2.38 → leaf_common-1.2.40}/leaf_common/serialization/format/conversion_policy.py +0 -0
- {leaf_common-1.2.38 → leaf_common-1.2.40}/leaf_common/serialization/format/gzip_serialization_format.py +0 -0
- {leaf_common-1.2.38 → leaf_common-1.2.40}/leaf_common/serialization/format/hocon_serialization_format.py +0 -0
- {leaf_common-1.2.38 → leaf_common-1.2.40}/leaf_common/serialization/format/json_serialization_format.py +0 -0
- {leaf_common-1.2.38 → leaf_common-1.2.40}/leaf_common/serialization/format/raw_bytes_serialization_format.py +0 -0
- {leaf_common-1.2.38 → leaf_common-1.2.40}/leaf_common/serialization/format/serialization_formats.py +0 -0
- {leaf_common-1.2.38 → leaf_common-1.2.40}/leaf_common/serialization/format/text_serialization_format.py +0 -0
- {leaf_common-1.2.38 → leaf_common-1.2.40}/leaf_common/serialization/format/yaml_serialization_format.py +0 -0
- {leaf_common-1.2.38 → leaf_common-1.2.40}/leaf_common/serialization/interface/__init__.py +0 -0
- {leaf_common-1.2.38 → leaf_common-1.2.40}/leaf_common/serialization/interface/deserializer.py +0 -0
- {leaf_common-1.2.38 → leaf_common-1.2.40}/leaf_common/serialization/interface/dictionary_converter.py +0 -0
- {leaf_common-1.2.38 → leaf_common-1.2.40}/leaf_common/serialization/interface/file_extension_provider.py +0 -0
- {leaf_common-1.2.38 → leaf_common-1.2.40}/leaf_common/serialization/interface/reference_pruner.py +0 -0
- {leaf_common-1.2.38 → leaf_common-1.2.40}/leaf_common/serialization/interface/self_identifying_representation_error.py +0 -0
- {leaf_common-1.2.38 → leaf_common-1.2.40}/leaf_common/serialization/interface/serialization_format.py +0 -0
- {leaf_common-1.2.38 → leaf_common-1.2.40}/leaf_common/serialization/interface/serializer.py +0 -0
- {leaf_common-1.2.38 → leaf_common-1.2.40}/leaf_common/serialization/prep/__init__.py +0 -0
- {leaf_common-1.2.38 → leaf_common-1.2.40}/leaf_common/serialization/prep/empty_dictionary_converter.py +0 -0
- {leaf_common-1.2.38 → leaf_common-1.2.40}/leaf_common/serialization/prep/metrics_dictionary_converter.py +0 -0
- {leaf_common-1.2.38 → leaf_common-1.2.40}/leaf_common/serialization/prep/pass_through_dictionary_converter.py +0 -0
- {leaf_common-1.2.38 → leaf_common-1.2.40}/leaf_common/serialization/prep/pass_through_reference_pruner.py +0 -0
- {leaf_common-1.2.38 → leaf_common-1.2.40}/leaf_common/serialization/prep/redactor_dictionary_converter.py +0 -0
- {leaf_common-1.2.38 → leaf_common-1.2.40}/leaf_common/serialization/util/__init__.py +0 -0
- {leaf_common-1.2.38 → leaf_common-1.2.40}/leaf_common/serialization/util/bytes_decoder.py +0 -0
- {leaf_common-1.2.38 → leaf_common-1.2.40}/leaf_common/session/__init__.py +0 -0
- {leaf_common-1.2.38 → leaf_common-1.2.40}/leaf_common/session/abstract_service_session.py +0 -0
- {leaf_common-1.2.38 → leaf_common-1.2.40}/leaf_common/session/async_abstract_service_session.py +0 -0
- {leaf_common-1.2.38 → leaf_common-1.2.40}/leaf_common/session/async_grpc_client_retry.py +0 -0
- {leaf_common-1.2.38 → leaf_common-1.2.40}/leaf_common/session/extension_packaging.py +0 -0
- {leaf_common-1.2.38 → leaf_common-1.2.40}/leaf_common/session/grpc_channel_security.py +0 -0
- {leaf_common-1.2.38 → leaf_common-1.2.40}/leaf_common/session/grpc_client_retry.py +0 -0
- {leaf_common-1.2.38 → leaf_common-1.2.40}/leaf_common/session/grpc_metadata_util.py +0 -0
- {leaf_common-1.2.38 → leaf_common-1.2.40}/leaf_common/session/population_response_dictionary_converter.py +0 -0
- {leaf_common-1.2.38 → leaf_common-1.2.40}/leaf_common/session/population_session.py +0 -0
- {leaf_common-1.2.38 → leaf_common-1.2.40}/leaf_common/session/population_session_factory.py +0 -0
- {leaf_common-1.2.38 → leaf_common-1.2.40}/leaf_common/session/response_candidate_dictionary_converter.py +0 -0
- {leaf_common-1.2.38 → leaf_common-1.2.40}/leaf_common/time/__init__.py +0 -0
- {leaf_common-1.2.38 → leaf_common-1.2.40}/leaf_common/time/time_util.py +0 -0
- {leaf_common-1.2.38 → leaf_common-1.2.40}/leaf_common/time/timeout.py +0 -0
- {leaf_common-1.2.38 → leaf_common-1.2.40}/leaf_common/time/timeout_reached_exception.py +0 -0
- {leaf_common-1.2.38 → leaf_common-1.2.40}/leaf_common/utils/__init__.py +0 -0
- {leaf_common-1.2.38 → leaf_common-1.2.40}/leaf_common/utils/async_atomic_counter.py +0 -0
- {leaf_common-1.2.38 → leaf_common-1.2.40}/leaf_common/utils/atomic_counter.py +0 -0
- {leaf_common-1.2.38 → leaf_common-1.2.40}/leaf_common.egg-info/dependency_links.txt +0 -0
- {leaf_common-1.2.38 → leaf_common-1.2.40}/leaf_common.egg-info/requires.txt +0 -0
- {leaf_common-1.2.38 → leaf_common-1.2.40}/leaf_common.egg-info/top_level.txt +0 -0
- {leaf_common-1.2.38 → leaf_common-1.2.40}/pyproject.toml +0 -0
- {leaf_common-1.2.38 → leaf_common-1.2.40}/requirements.txt +0 -0
- {leaf_common-1.2.38 → leaf_common-1.2.40}/setup.cfg +0 -0
- {leaf_common-1.2.38 → leaf_common-1.2.40}/tests/__init__.py +0 -0
- {leaf_common-1.2.38 → leaf_common-1.2.40}/tests/asyncio/__init__.py +0 -0
- {leaf_common-1.2.38 → leaf_common-1.2.40}/tests/asyncio/async_test_helpers.py +0 -0
- {leaf_common-1.2.38 → leaf_common-1.2.40}/tests/asyncio/asyncio_executor_not_started_test.py +0 -0
- {leaf_common-1.2.38 → leaf_common-1.2.40}/tests/asyncio/asyncio_executor_started_test.py +0 -0
- {leaf_common-1.2.38 → leaf_common-1.2.40}/tests/asyncio/callable_class.py +0 -0
- {leaf_common-1.2.38 → leaf_common-1.2.40}/tests/asyncio/sync_test_helpers.py +0 -0
- {leaf_common-1.2.38 → leaf_common-1.2.40}/tests/candidates/__init__.py +0 -0
- {leaf_common-1.2.38 → leaf_common-1.2.40}/tests/candidates/test_representation_types.py +0 -0
- {leaf_common-1.2.38 → leaf_common-1.2.40}/tests/config/__init__.py +0 -0
- {leaf_common-1.2.38 → leaf_common-1.2.40}/tests/config/dictionary_overlay_test.py +0 -0
- {leaf_common-1.2.38 → leaf_common-1.2.40}/tests/config/resolver_util_test.py +0 -0
- {leaf_common-1.2.38 → leaf_common-1.2.40}/tests/filters/__init__.py +0 -0
- {leaf_common-1.2.38 → leaf_common-1.2.40}/tests/filters/test_sanitizer_util.py +0 -0
- {leaf_common-1.2.38 → leaf_common-1.2.40}/tests/filters/test_tensorflow_field_name_filter.py +0 -0
- {leaf_common-1.2.38 → leaf_common-1.2.40}/tests/fitness/__init__.py +0 -0
- {leaf_common-1.2.38 → leaf_common-1.2.40}/tests/fitness/fitness_objectives_from_config_test.py +0 -0
- {leaf_common-1.2.38 → leaf_common-1.2.40}/tests/fixtures/saved_rule_set.rules +0 -0
- {leaf_common-1.2.38 → leaf_common-1.2.40}/tests/fixtures/saved_rules_model.json +0 -0
- {leaf_common-1.2.38 → leaf_common-1.2.40}/tests/parsers/__init__.py +0 -0
- {leaf_common-1.2.38 → leaf_common-1.2.40}/tests/parsers/canonical_multi_config_parser_test.py +0 -0
- {leaf_common-1.2.38 → leaf_common-1.2.40}/tests/progress/__init__.py +0 -0
- {leaf_common-1.2.38 → leaf_common-1.2.40}/tests/progress/test_status_dict_progress_reporter.py +0 -0
- {leaf_common-1.2.38 → leaf_common-1.2.40}/tests/representation/__init__.py +0 -0
- {leaf_common-1.2.38 → leaf_common-1.2.40}/tests/representation/rule_based/__init__.py +0 -0
- {leaf_common-1.2.38 → leaf_common-1.2.40}/tests/representation/rule_based/test_condition.py +0 -0
- {leaf_common-1.2.38 → leaf_common-1.2.40}/tests/representation/rule_based/test_rule.py +0 -0
- {leaf_common-1.2.38 → leaf_common-1.2.40}/tests/representation/rule_based/test_rule_set.py +0 -0
- {leaf_common-1.2.38 → leaf_common-1.2.40}/tests/serialization/__init__.py +0 -0
- {leaf_common-1.2.38 → leaf_common-1.2.40}/tests/serialization/encoding/__init__.py +0 -0
- {leaf_common-1.2.38 → leaf_common-1.2.40}/tests/serialization/encoding/decode_text_test.py +0 -0
- {leaf_common-1.2.38 → leaf_common-1.2.40}/tests/serialization/prep/__init__.py +0 -0
- {leaf_common-1.2.38 → leaf_common-1.2.40}/tests/serialization/prep/redactor_dictionary_converter_test.py +0 -0
- {leaf_common-1.2.38 → leaf_common-1.2.40}/tests/session/__init__.py +0 -0
- {leaf_common-1.2.38 → leaf_common-1.2.40}/tests/session/test_extension_packaging.py +0 -0
- {leaf_common-1.2.38 → leaf_common-1.2.40}/tests/time/__init__.py +0 -0
- {leaf_common-1.2.38 → leaf_common-1.2.40}/tests/time/timeout_test.py +0 -0
|
@@ -9,19 +9,18 @@
|
|
|
9
9
|
|
|
10
10
|
# Add files or directories to the blacklist. They should be base names, not
|
|
11
11
|
# paths.
|
|
12
|
-
ignore=.git, extension_packaging.py
|
|
12
|
+
ignore=.git, dist, extension_packaging.py
|
|
13
|
+
ignore-patterns=.*egg-info
|
|
13
14
|
|
|
14
15
|
# Use multiple processes to speed up Pylint. Specifying 0 will auto-detect the
|
|
15
16
|
# number of processors available to use.
|
|
16
17
|
jobs=0
|
|
17
18
|
|
|
18
|
-
# Set reasonable line length
|
|
19
|
-
max-line-length=120
|
|
20
|
-
|
|
21
|
-
# When enabled, pylint would attempt to guess common misconfiguration and emit
|
|
22
|
-
# user-friendly hints instead of false-positive error messages.
|
|
23
|
-
suggestion-mode=yes
|
|
24
|
-
|
|
25
19
|
# Not useful warning
|
|
26
20
|
disable=too-few-public-methods,
|
|
27
21
|
duplicate-code
|
|
22
|
+
|
|
23
|
+
[FORMAT]
|
|
24
|
+
|
|
25
|
+
# Set reasonable line length
|
|
26
|
+
max-line-length=120
|
|
@@ -0,0 +1,32 @@
|
|
|
1
|
+
.DEFAULT_GOAL := help
|
|
2
|
+
|
|
3
|
+
# Makefile for developer convenience only - not part of build infrastructure
|
|
4
|
+
.PHONY: help install lint test check build
|
|
5
|
+
|
|
6
|
+
help:
|
|
7
|
+
@echo "Makefile for developer convenience only"
|
|
8
|
+
@echo "Usage: make <target>"
|
|
9
|
+
@echo ""
|
|
10
|
+
@echo "Targets:"
|
|
11
|
+
@echo " install Install all dependencies (runtime + build/test)"
|
|
12
|
+
@echo " lint Run pylint and flake8"
|
|
13
|
+
@echo " test Run pytest (excluding integration tests)"
|
|
14
|
+
@echo " check Run lint + test (mirrors CI)"
|
|
15
|
+
@echo " build Build the package distribution"
|
|
16
|
+
|
|
17
|
+
install:
|
|
18
|
+
pip install -r requirements-build.txt
|
|
19
|
+
pip install -r requirements.txt
|
|
20
|
+
|
|
21
|
+
lint:
|
|
22
|
+
build_scripts/run_pylint.sh
|
|
23
|
+
flake8
|
|
24
|
+
|
|
25
|
+
test:
|
|
26
|
+
pytest --verbose -m "not integration" --timer-top-n 10 --cov-config=.coveragerc --cov
|
|
27
|
+
rm -rf .coverage
|
|
28
|
+
|
|
29
|
+
check: lint test
|
|
30
|
+
|
|
31
|
+
build:
|
|
32
|
+
python -m build
|
|
@@ -81,8 +81,9 @@ class Resolver():
|
|
|
81
81
|
message: str = f"Could not find code for {use_module_name}"
|
|
82
82
|
messages.append(message)
|
|
83
83
|
for message in messages:
|
|
84
|
-
#
|
|
85
|
-
|
|
84
|
+
# Only print a message when we couldn't find something if verbose.
|
|
85
|
+
if verbose:
|
|
86
|
+
logger.warning(message)
|
|
86
87
|
if raise_if_not_found:
|
|
87
88
|
raise ValueError(str(messages))
|
|
88
89
|
elif verbose:
|
|
@@ -0,0 +1,53 @@
|
|
|
1
|
+
|
|
2
|
+
# Copyright © 2019-2026 Cognizant Technology Solutions Corp, www.cognizant.com.
|
|
3
|
+
#
|
|
4
|
+
# Licensed under the Apache License, Version 2.0 (the "License");
|
|
5
|
+
# you may not use this file except in compliance with the License.
|
|
6
|
+
# You may obtain a copy of the License at
|
|
7
|
+
#
|
|
8
|
+
# http://www.apache.org/licenses/LICENSE-2.0
|
|
9
|
+
#
|
|
10
|
+
# Unless required by applicable law or agreed to in writing, software
|
|
11
|
+
# distributed under the License is distributed on an "AS IS" BASIS,
|
|
12
|
+
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
13
|
+
# See the License for the specific language governing permissions and
|
|
14
|
+
# limitations under the License.
|
|
15
|
+
#
|
|
16
|
+
# END COPYRIGHT
|
|
17
|
+
"""
|
|
18
|
+
See class comment for details.
|
|
19
|
+
"""
|
|
20
|
+
|
|
21
|
+
import asyncio
|
|
22
|
+
|
|
23
|
+
from leaf_common.serialization.util.bytes_decoder import BytesDecoder
|
|
24
|
+
|
|
25
|
+
|
|
26
|
+
class TextFileReader:
|
|
27
|
+
"""
|
|
28
|
+
Class providing utility methods for reading text files in several possible encodings.
|
|
29
|
+
"""
|
|
30
|
+
|
|
31
|
+
@staticmethod
|
|
32
|
+
def read_text_file(filepath: str) -> str:
|
|
33
|
+
"""
|
|
34
|
+
Read the content of a text file in some encoding and return it as a string.
|
|
35
|
+
:param filepath: The path to the text file to read
|
|
36
|
+
:return: The content of the text file as a string
|
|
37
|
+
"""
|
|
38
|
+
with open(filepath, "rb") as binary_file:
|
|
39
|
+
contents: bytes = binary_file.read()
|
|
40
|
+
text, _ = BytesDecoder.decode_bytes(contents, source_name=filepath)
|
|
41
|
+
return text
|
|
42
|
+
|
|
43
|
+
@staticmethod
|
|
44
|
+
async def async_read_text_file(filepath: str) -> str:
|
|
45
|
+
"""
|
|
46
|
+
Asynchronously read the content of a text file in some encoding and return it as a string.
|
|
47
|
+
|
|
48
|
+
Implemented by offloading the blocking read to a default thread executor via
|
|
49
|
+
``asyncio.to_thread`` to avoid an extra third-party dependency on aiofiles.
|
|
50
|
+
:param filepath: The path to the text file to read
|
|
51
|
+
:return: The content of the text file as a string
|
|
52
|
+
"""
|
|
53
|
+
return await asyncio.to_thread(TextFileReader.read_text_file, filepath)
|
|
@@ -5,6 +5,7 @@
|
|
|
5
5
|
CODE_OF_CONDUCT.md
|
|
6
6
|
CONTRIBUTING.md
|
|
7
7
|
LICENSE.txt
|
|
8
|
+
Makefile
|
|
8
9
|
NOTICE.txt
|
|
9
10
|
README.md
|
|
10
11
|
SECURITY.md
|
|
@@ -196,6 +197,7 @@ leaf_common/serialization/prep/pass_through_reference_pruner.py
|
|
|
196
197
|
leaf_common/serialization/prep/redactor_dictionary_converter.py
|
|
197
198
|
leaf_common/serialization/util/__init__.py
|
|
198
199
|
leaf_common/serialization/util/bytes_decoder.py
|
|
200
|
+
leaf_common/serialization/util/text_file_reader.py
|
|
199
201
|
leaf_common/session/__init__.py
|
|
200
202
|
leaf_common/session/abstract_service_session.py
|
|
201
203
|
leaf_common/session/async_abstract_service_session.py
|
|
@@ -246,6 +248,7 @@ tests/representation/rule_based/test_rule_set.py
|
|
|
246
248
|
tests/serialization/__init__.py
|
|
247
249
|
tests/serialization/encoding/__init__.py
|
|
248
250
|
tests/serialization/encoding/decode_text_test.py
|
|
251
|
+
tests/serialization/encoding/text_file_reader_test.py
|
|
249
252
|
tests/serialization/prep/__init__.py
|
|
250
253
|
tests/serialization/prep/redactor_dictionary_converter_test.py
|
|
251
254
|
tests/session/__init__.py
|
|
@@ -0,0 +1,139 @@
|
|
|
1
|
+
|
|
2
|
+
# Copyright © 2019-2026 Cognizant Technology Solutions Corp, www.cognizant.com.
|
|
3
|
+
#
|
|
4
|
+
# Licensed under the Apache License, Version 2.0 (the "License");
|
|
5
|
+
# you may not use this file except in compliance with the License.
|
|
6
|
+
# You may obtain a copy of the License at
|
|
7
|
+
#
|
|
8
|
+
# http://www.apache.org/licenses/LICENSE-2.0
|
|
9
|
+
#
|
|
10
|
+
# Unless required by applicable law or agreed to in writing, software
|
|
11
|
+
# distributed under the License is distributed on an "AS IS" BASIS,
|
|
12
|
+
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
13
|
+
# See the License for the specific language governing permissions and
|
|
14
|
+
# limitations under the License.
|
|
15
|
+
#
|
|
16
|
+
# END COPYRIGHT
|
|
17
|
+
"""
|
|
18
|
+
See class comment for details.
|
|
19
|
+
"""
|
|
20
|
+
|
|
21
|
+
import asyncio
|
|
22
|
+
import os
|
|
23
|
+
import tempfile
|
|
24
|
+
from unittest import TestCase
|
|
25
|
+
|
|
26
|
+
from leaf_common.serialization.util.text_file_reader import TextFileReader
|
|
27
|
+
|
|
28
|
+
|
|
29
|
+
# ---------------------------------------------------------------------------
|
|
30
|
+
# Encoding fixtures
|
|
31
|
+
#
|
|
32
|
+
# BytesDecoder tries the encodings utf-8, cp1252, latin-1 in that order and
|
|
33
|
+
# returns as soon as one succeeds. The byte sequences below are chosen so
|
|
34
|
+
# that each encoding's branch is exercised exactly once:
|
|
35
|
+
#
|
|
36
|
+
# * utf-8 : valid UTF-8 multibyte sequence (E2 80 99 -> U+2019)
|
|
37
|
+
# * cp1252 : 0x92 -- invalid as standalone UTF-8, valid in cp1252 (U+2019)
|
|
38
|
+
# * latin-1 : 0x81 -- invalid in UTF-8 *and* in strict cp1252, valid in latin-1 (U+0081)
|
|
39
|
+
# ---------------------------------------------------------------------------
|
|
40
|
+
|
|
41
|
+
UTF8_BYTES = "hello ’world’".encode("utf-8")
|
|
42
|
+
UTF8_EXPECTED = "hello ’world’"
|
|
43
|
+
|
|
44
|
+
CP1252_BYTES = b"hello \x92world\x92"
|
|
45
|
+
CP1252_EXPECTED = "hello ’world’"
|
|
46
|
+
|
|
47
|
+
LATIN1_BYTES = b"hello \x81world\x81"
|
|
48
|
+
LATIN1_EXPECTED = LATIN1_BYTES.decode("latin-1")
|
|
49
|
+
|
|
50
|
+
|
|
51
|
+
class TextFileReaderTest(TestCase):
|
|
52
|
+
"""
|
|
53
|
+
Test class for the TextFileReader utility, covering both the synchronous
|
|
54
|
+
and asynchronous read methods over all three encodings tried by BytesDecoder
|
|
55
|
+
(utf-8, cp1252, latin-1).
|
|
56
|
+
"""
|
|
57
|
+
|
|
58
|
+
def setUp(self):
|
|
59
|
+
"""Create a fresh temporary directory for each test."""
|
|
60
|
+
# pylint: disable=consider-using-with
|
|
61
|
+
self._tmp_dir = tempfile.TemporaryDirectory()
|
|
62
|
+
self.tmp_path = self._tmp_dir.name
|
|
63
|
+
|
|
64
|
+
def tearDown(self):
|
|
65
|
+
"""Clean up the temporary directory created in setUp."""
|
|
66
|
+
self._tmp_dir.cleanup()
|
|
67
|
+
|
|
68
|
+
def _write_bytes(self, content: bytes, filename: str = "sample.txt") -> str:
|
|
69
|
+
"""Write raw bytes to a file in the per-test temp directory and return its path."""
|
|
70
|
+
path = os.path.join(self.tmp_path, filename)
|
|
71
|
+
with open(path, "wb") as fileobj:
|
|
72
|
+
fileobj.write(content)
|
|
73
|
+
return path
|
|
74
|
+
|
|
75
|
+
# -----------------------------------------------------------------------
|
|
76
|
+
# read_text_file (synchronous)
|
|
77
|
+
# -----------------------------------------------------------------------
|
|
78
|
+
|
|
79
|
+
def test_read_text_file_decodes_utf8(self):
|
|
80
|
+
"""A UTF-8 encoded file is decoded via the utf-8 branch."""
|
|
81
|
+
path = self._write_bytes(UTF8_BYTES)
|
|
82
|
+
self.assertEqual(TextFileReader.read_text_file(path), UTF8_EXPECTED)
|
|
83
|
+
|
|
84
|
+
def test_read_text_file_decodes_cp1252(self):
|
|
85
|
+
"""A cp1252-only byte sequence falls through utf-8 and is decoded as cp1252."""
|
|
86
|
+
path = self._write_bytes(CP1252_BYTES)
|
|
87
|
+
self.assertEqual(TextFileReader.read_text_file(path), CP1252_EXPECTED)
|
|
88
|
+
|
|
89
|
+
def test_read_text_file_decodes_latin1(self):
|
|
90
|
+
"""A latin-1-only byte sequence falls through utf-8 and cp1252, decoded as latin-1."""
|
|
91
|
+
path = self._write_bytes(LATIN1_BYTES)
|
|
92
|
+
self.assertEqual(TextFileReader.read_text_file(path), LATIN1_EXPECTED)
|
|
93
|
+
|
|
94
|
+
def test_read_text_file_empty_file_returns_empty_string(self):
|
|
95
|
+
"""An empty file decodes to an empty string."""
|
|
96
|
+
path = self._write_bytes(b"")
|
|
97
|
+
self.assertEqual(TextFileReader.read_text_file(path), "")
|
|
98
|
+
|
|
99
|
+
def test_read_text_file_raises_file_not_found(self):
|
|
100
|
+
"""A missing file raises FileNotFoundError."""
|
|
101
|
+
with self.assertRaises(FileNotFoundError):
|
|
102
|
+
TextFileReader.read_text_file(os.path.join(self.tmp_path, "does_not_exist.txt"))
|
|
103
|
+
|
|
104
|
+
# -----------------------------------------------------------------------
|
|
105
|
+
# async_read_text_file
|
|
106
|
+
# -----------------------------------------------------------------------
|
|
107
|
+
|
|
108
|
+
def test_async_read_text_file_decodes_utf8(self):
|
|
109
|
+
"""A UTF-8 encoded file is decoded via the utf-8 branch (async)."""
|
|
110
|
+
path = self._write_bytes(UTF8_BYTES)
|
|
111
|
+
result = asyncio.run(TextFileReader.async_read_text_file(path))
|
|
112
|
+
self.assertEqual(result, UTF8_EXPECTED)
|
|
113
|
+
|
|
114
|
+
def test_async_read_text_file_decodes_cp1252(self):
|
|
115
|
+
"""A cp1252-only byte sequence falls through utf-8 and is decoded as cp1252 (async)."""
|
|
116
|
+
path = self._write_bytes(CP1252_BYTES)
|
|
117
|
+
result = asyncio.run(TextFileReader.async_read_text_file(path))
|
|
118
|
+
self.assertEqual(result, CP1252_EXPECTED)
|
|
119
|
+
|
|
120
|
+
def test_async_read_text_file_decodes_latin1(self):
|
|
121
|
+
"""A latin-1-only byte sequence falls through utf-8 and cp1252, decoded as latin-1 (async)."""
|
|
122
|
+
path = self._write_bytes(LATIN1_BYTES)
|
|
123
|
+
result = asyncio.run(TextFileReader.async_read_text_file(path))
|
|
124
|
+
self.assertEqual(result, LATIN1_EXPECTED)
|
|
125
|
+
|
|
126
|
+
def test_async_read_text_file_empty_file_returns_empty_string(self):
|
|
127
|
+
"""An empty file decodes to an empty string (async)."""
|
|
128
|
+
path = self._write_bytes(b"")
|
|
129
|
+
result = asyncio.run(TextFileReader.async_read_text_file(path))
|
|
130
|
+
self.assertEqual(result, "")
|
|
131
|
+
|
|
132
|
+
def test_async_read_text_file_raises_file_not_found(self):
|
|
133
|
+
"""A missing file raises FileNotFoundError (async)."""
|
|
134
|
+
with self.assertRaises(FileNotFoundError):
|
|
135
|
+
asyncio.run(
|
|
136
|
+
TextFileReader.async_read_text_file(
|
|
137
|
+
os.path.join(self.tmp_path, "does_not_exist.txt")
|
|
138
|
+
)
|
|
139
|
+
)
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{leaf_common-1.2.38 → leaf_common-1.2.40}/leaf_common/filters/strip_whitespace_string_filter.py
RENAMED
|
File without changes
|
{leaf_common-1.2.38 → leaf_common-1.2.40}/leaf_common/filters/tensorflow_field_name_filter.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{leaf_common-1.2.38 → leaf_common-1.2.40}/leaf_common/fitness/fitness_objectives_from_config.py
RENAMED
|
File without changes
|
{leaf_common-1.2.38 → leaf_common-1.2.40}/leaf_common/fitness/metrics_based_individual_comparator.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{leaf_common-1.2.38 → leaf_common-1.2.40}/leaf_common/parsers/canonical_multi_config_parser.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{leaf_common-1.2.38 → leaf_common-1.2.40}/leaf_common/persistence/easy/abstract_easy_persistence.py
RENAMED
|
File without changes
|
{leaf_common-1.2.38 → leaf_common-1.2.40}/leaf_common/persistence/easy/composite_persistor.py
RENAMED
|
File without changes
|
{leaf_common-1.2.38 → leaf_common-1.2.40}/leaf_common/persistence/easy/easy_hocon_persistence.py
RENAMED
|
File without changes
|
{leaf_common-1.2.38 → leaf_common-1.2.40}/leaf_common/persistence/easy/easy_json_persistence.py
RENAMED
|
File without changes
|
{leaf_common-1.2.38 → leaf_common-1.2.40}/leaf_common/persistence/easy/easy_txt_persistence.py
RENAMED
|
File without changes
|
{leaf_common-1.2.38 → leaf_common-1.2.40}/leaf_common/persistence/easy/easy_yaml_persistence.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
{leaf_common-1.2.38 → leaf_common-1.2.40}/leaf_common/persistence/factory/abstract_persistence.py
RENAMED
|
File without changes
|
{leaf_common-1.2.38 → leaf_common-1.2.40}/leaf_common/persistence/factory/hocon_persistence.py
RENAMED
|
File without changes
|
{leaf_common-1.2.38 → leaf_common-1.2.40}/leaf_common/persistence/factory/json_gzip_persistence.py
RENAMED
|
File without changes
|
{leaf_common-1.2.38 → leaf_common-1.2.40}/leaf_common/persistence/factory/json_persistence.py
RENAMED
|
File without changes
|
{leaf_common-1.2.38 → leaf_common-1.2.40}/leaf_common/persistence/factory/null_persistence.py
RENAMED
|
File without changes
|
|
File without changes
|
{leaf_common-1.2.38 → leaf_common-1.2.40}/leaf_common/persistence/factory/persistence_factory.py
RENAMED
|
File without changes
|
{leaf_common-1.2.38 → leaf_common-1.2.40}/leaf_common/persistence/factory/raw_bytes_persistence.py
RENAMED
|
File without changes
|
{leaf_common-1.2.38 → leaf_common-1.2.40}/leaf_common/persistence/factory/reference_helper.py
RENAMED
|
File without changes
|
{leaf_common-1.2.38 → leaf_common-1.2.40}/leaf_common/persistence/factory/simple_file_persistence.py
RENAMED
|
File without changes
|
{leaf_common-1.2.38 → leaf_common-1.2.40}/leaf_common/persistence/factory/text_persistence.py
RENAMED
|
File without changes
|
{leaf_common-1.2.38 → leaf_common-1.2.40}/leaf_common/persistence/factory/yaml_persistence.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
{leaf_common-1.2.38 → leaf_common-1.2.40}/leaf_common/persistence/interface/persistence_mechanism.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{leaf_common-1.2.38 → leaf_common-1.2.40}/leaf_common/progress/composite_progress_reporter.py
RENAMED
|
File without changes
|
{leaf_common-1.2.38 → leaf_common-1.2.40}/leaf_common/progress/iterating_progress_reporter.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
{leaf_common-1.2.38 → leaf_common-1.2.40}/leaf_common/progress/status_dict_progress_reporter.py
RENAMED
|
File without changes
|
|
File without changes
|