assertpy2 2.29.1__tar.gz → 2.30.0__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.
- {assertpy2-2.29.1 → assertpy2-2.30.0}/PKG-INFO +4 -3
- {assertpy2-2.29.1 → assertpy2-2.30.0}/README.md +2 -2
- {assertpy2-2.29.1 → assertpy2-2.30.0}/assertpy2/_clustering.py +2 -1
- {assertpy2-2.29.1 → assertpy2-2.30.0}/assertpy2/_engine/_builder_check_typing.py +56 -47
- {assertpy2-2.29.1 → assertpy2-2.30.0}/assertpy2/_engine/_capable_typing.py +2 -0
- {assertpy2-2.29.1 → assertpy2-2.30.0}/assertpy2/_engine/_check_typing.py +17 -15
- {assertpy2-2.29.1 → assertpy2-2.30.0}/assertpy2/_engine/_compare.py +177 -28
- assertpy2-2.30.0/assertpy2/_engine/_contract.py +1798 -0
- {assertpy2-2.29.1 → assertpy2-2.30.0}/assertpy2/_engine/_diff.py +218 -76
- {assertpy2-2.29.1 → assertpy2-2.30.0}/assertpy2/_engine/_equality.py +328 -73
- {assertpy2-2.29.1 → assertpy2-2.30.0}/assertpy2/_engine/_introspection.py +295 -4
- {assertpy2-2.29.1 → assertpy2-2.30.0}/assertpy2/_engine/_mixin_base.py +65 -0
- {assertpy2-2.29.1 → assertpy2-2.30.0}/assertpy2/_engine/_negated_typing.py +3 -0
- {assertpy2-2.29.1 → assertpy2-2.30.0}/assertpy2/_engine/_operations.py +1 -1
- {assertpy2-2.29.1 → assertpy2-2.30.0}/assertpy2/_engine/_ordering.py +121 -5
- {assertpy2-2.29.1 → assertpy2-2.30.0}/assertpy2/_engine/_poll_typing.py +185 -178
- {assertpy2-2.29.1 → assertpy2-2.30.0}/assertpy2/_engine/_require.py +35 -7
- {assertpy2-2.29.1 → assertpy2-2.30.0}/assertpy2/_engine/_typing.py +34 -24
- assertpy2-2.30.0/assertpy2/_hints.py +1001 -0
- {assertpy2-2.29.1 → assertpy2-2.30.0}/assertpy2/_matcher_impls.py +115 -65
- {assertpy2-2.29.1 → assertpy2-2.30.0}/assertpy2/_satisfies.py +124 -23
- {assertpy2-2.29.1 → assertpy2-2.30.0}/assertpy2/assertpy.py +108 -39
- {assertpy2-2.29.1 → assertpy2-2.30.0}/assertpy2/async_assertions.py +18 -1
- {assertpy2-2.29.1 → assertpy2-2.30.0}/assertpy2/base.py +88 -75
- {assertpy2-2.29.1 → assertpy2-2.30.0}/assertpy2/collection.py +34 -19
- {assertpy2-2.29.1 → assertpy2-2.30.0}/assertpy2/contains.py +344 -88
- {assertpy2-2.29.1 → assertpy2-2.30.0}/assertpy2/date.py +52 -18
- {assertpy2-2.29.1 → assertpy2-2.30.0}/assertpy2/dict.py +12 -7
- {assertpy2-2.29.1 → assertpy2-2.30.0}/assertpy2/dynamic.py +87 -6
- {assertpy2-2.29.1 → assertpy2-2.30.0}/assertpy2/errors.py +154 -27
- {assertpy2-2.29.1 → assertpy2-2.30.0}/assertpy2/extracting.py +1 -1
- {assertpy2-2.29.1 → assertpy2-2.30.0}/assertpy2/file.py +9 -9
- {assertpy2-2.29.1 → assertpy2-2.30.0}/assertpy2/helpers.py +268 -133
- assertpy2-2.30.0/assertpy2/json_mixin.py +1263 -0
- {assertpy2-2.29.1 → assertpy2-2.30.0}/assertpy2/matchers.py +36 -9
- {assertpy2-2.29.1 → assertpy2-2.30.0}/assertpy2/numeric.py +40 -39
- {assertpy2-2.29.1 → assertpy2-2.30.0}/assertpy2/pytest_plugin.py +94 -13
- {assertpy2-2.29.1 → assertpy2-2.30.0}/assertpy2/string.py +112 -31
- {assertpy2-2.29.1 → assertpy2-2.30.0}/benchmarks/test_perf.py +12 -4
- {assertpy2-2.29.1 → assertpy2-2.30.0}/docs/concepts/stability.md +6 -5
- {assertpy2-2.29.1 → assertpy2-2.30.0}/docs/concepts/type-safety.md +150 -38
- {assertpy2-2.29.1 → assertpy2-2.30.0}/docs/getting-started/migration.md +9 -0
- {assertpy2-2.29.1 → assertpy2-2.30.0}/docs/getting-started/quickstart.md +1 -1
- {assertpy2-2.29.1 → assertpy2-2.30.0}/docs/guides/assertions.md +97 -9
- assertpy2-2.30.0/docs/guides/data.md +248 -0
- {assertpy2-2.29.1 → assertpy2-2.30.0}/docs/guides/errors.md +344 -22
- {assertpy2-2.29.1 → assertpy2-2.30.0}/docs/guides/fluent.md +20 -0
- {assertpy2-2.29.1 → assertpy2-2.30.0}/docs/guides/matchers.md +37 -1
- {assertpy2-2.29.1 → assertpy2-2.30.0}/docs/guides/testing.md +6 -2
- {assertpy2-2.29.1 → assertpy2-2.30.0}/docs/index.md +19 -1
- {assertpy2-2.29.1 → assertpy2-2.30.0}/docs/recipes.md +53 -1
- {assertpy2-2.29.1 → assertpy2-2.30.0}/pyproject.toml +13 -2
- {assertpy2-2.29.1 → assertpy2-2.30.0}/scripts/generate_check_protocols.py +1 -0
- {assertpy2-2.29.1 → assertpy2-2.30.0}/scripts/generate_poll_protocols.py +33 -7
- {assertpy2-2.29.1 → assertpy2-2.30.0}/tests/api_snapshot.json +22 -15
- {assertpy2-2.29.1 → assertpy2-2.30.0}/tests/conftest.py +2 -0
- assertpy2-2.30.0/tests/data/json_schema_test_suite/LICENSE +19 -0
- assertpy2-2.30.0/tests/data/json_schema_test_suite/date-time.json +226 -0
- assertpy2-2.30.0/tests/data/json_schema_test_suite/date.json +423 -0
- assertpy2-2.30.0/tests/data/json_schema_test_suite/duration.json +273 -0
- assertpy2-2.30.0/tests/data/json_schema_test_suite/email.json +368 -0
- assertpy2-2.30.0/tests/data/json_schema_test_suite/hostname.json +376 -0
- assertpy2-2.30.0/tests/data/json_schema_test_suite/multipleOf.json +102 -0
- assertpy2-2.30.0/tests/data/json_schema_test_suite/time.json +297 -0
- assertpy2-2.30.0/tests/data/json_schema_test_suite/uri.json +248 -0
- assertpy2-2.30.0/tests/format_corpus.py +137 -0
- {assertpy2-2.29.1 → assertpy2-2.30.0}/tests/pyright_baseline.py +4 -3
- {assertpy2-2.29.1 → assertpy2-2.30.0}/tests/test_attrs_support.py +5 -3
- {assertpy2-2.29.1 → assertpy2-2.30.0}/tests/test_capable_protocol.py +9 -2
- {assertpy2-2.29.1 → assertpy2-2.30.0}/tests/test_chain_machine.py +8 -1
- {assertpy2-2.29.1 → assertpy2-2.30.0}/tests/test_check.py +29 -2
- assertpy2-2.30.0/tests/test_class_in_spec.py +293 -0
- {assertpy2-2.29.1 → assertpy2-2.30.0}/tests/test_clustering.py +21 -0
- {assertpy2-2.29.1 → assertpy2-2.30.0}/tests/test_complexity.py +6 -8
- {assertpy2-2.29.1 → assertpy2-2.30.0}/tests/test_custom_dict.py +4 -1
- {assertpy2-2.29.1 → assertpy2-2.30.0}/tests/test_datetime.py +301 -13
- {assertpy2-2.29.1 → assertpy2-2.30.0}/tests/test_deep_nesting.py +4 -3
- assertpy2-2.30.0/tests/test_dict_compare.py +1086 -0
- assertpy2-2.30.0/tests/test_diff_laws.py +1772 -0
- assertpy2-2.30.0/tests/test_difference_places.py +223 -0
- {assertpy2-2.29.1 → assertpy2-2.30.0}/tests/test_duality.py +5 -1
- assertpy2-2.30.0/tests/test_dynamic.py +460 -0
- {assertpy2-2.29.1 → assertpy2-2.30.0}/tests/test_equality_signals.py +60 -0
- {assertpy2-2.29.1 → assertpy2-2.30.0}/tests/test_evaluation_core.py +14 -8
- assertpy2-2.30.0/tests/test_exception_fields.py +267 -0
- {assertpy2-2.29.1 → assertpy2-2.30.0}/tests/test_expected_contract.py +4 -2
- assertpy2-2.30.0/tests/test_fixed_width_integers.py +717 -0
- {assertpy2-2.29.1 → assertpy2-2.30.0}/tests/test_hints.py +193 -11
- assertpy2-2.30.0/tests/test_import_cost.py +44 -0
- {assertpy2-2.29.1 → assertpy2-2.30.0}/tests/test_iterable_cluster.py +1 -1
- {assertpy2-2.29.1 → assertpy2-2.30.0}/tests/test_list.py +50 -6
- {assertpy2-2.29.1 → assertpy2-2.30.0}/tests/test_matchers.py +71 -3
- assertpy2-2.30.0/tests/test_membership_failures.py +270 -0
- assertpy2-2.30.0/tests/test_membership_family.py +523 -0
- {assertpy2-2.29.1 → assertpy2-2.30.0}/tests/test_message_elision.py +11 -0
- assertpy2-2.30.0/tests/test_message_values.py +345 -0
- assertpy2-2.30.0/tests/test_missing_names.py +488 -0
- assertpy2-2.30.0/tests/test_moment_relations.py +866 -0
- {assertpy2-2.29.1 → assertpy2-2.30.0}/tests/test_number_zoo.py +10 -11
- {assertpy2-2.29.1 → assertpy2-2.30.0}/tests/test_numbers.py +83 -15
- assertpy2-2.30.0/tests/test_one_shot_chains.py +550 -0
- assertpy2-2.30.0/tests/test_openapi_30_keywords.py +576 -0
- {assertpy2-2.29.1 → assertpy2-2.30.0}/tests/test_openapi_contract.py +442 -12
- assertpy2-2.30.0/tests/test_openapi_format_suite.py +118 -0
- assertpy2-2.30.0/tests/test_openapi_formats.py +1007 -0
- assertpy2-2.30.0/tests/test_openapi_multiple_of.py +322 -0
- assertpy2-2.30.0/tests/test_openapi_oracle.py +328 -0
- assertpy2-2.30.0/tests/test_openapi_part_read.py +441 -0
- {assertpy2-2.29.1 → assertpy2-2.30.0}/tests/test_overload_order.py +10 -1
- {assertpy2-2.29.1 → assertpy2-2.30.0}/tests/test_pin_coverage.py +324 -54
- {assertpy2-2.29.1 → assertpy2-2.30.0}/tests/test_poll_parity.py +11 -1
- {assertpy2-2.29.1 → assertpy2-2.30.0}/tests/test_prerequisites.py +1 -1
- {assertpy2-2.29.1 → assertpy2-2.30.0}/tests/test_property_based.py +65 -1
- {assertpy2-2.29.1 → assertpy2-2.30.0}/tests/test_pyright_baseline.py +3 -0
- {assertpy2-2.29.1 → assertpy2-2.30.0}/tests/test_pytest_plugin.py +818 -4
- {assertpy2-2.29.1 → assertpy2-2.30.0}/tests/test_recursive_assertion.py +17 -6
- {assertpy2-2.29.1 → assertpy2-2.30.0}/tests/test_recursive_compare.py +9 -3
- {assertpy2-2.29.1 → assertpy2-2.30.0}/tests/test_recursive_compare_config.py +121 -6
- assertpy2-2.30.0/tests/test_refusal_frames.py +288 -0
- assertpy2-2.30.0/tests/test_render_laws.py +651 -0
- {assertpy2-2.29.1 → assertpy2-2.30.0}/tests/test_rich_diff.py +131 -77
- assertpy2-2.30.0/tests/test_skip_guard.py +240 -0
- assertpy2-2.30.0/tests/test_strict_reach.py +466 -0
- {assertpy2-2.29.1 → assertpy2-2.30.0}/tests/test_string.py +8 -2
- {assertpy2-2.29.1 → assertpy2-2.30.0}/tests/test_structural.py +2573 -176
- assertpy2-2.30.0/tests/test_structure_sentence.py +539 -0
- assertpy2-2.30.0/tests/test_text_relations.py +404 -0
- {assertpy2-2.29.1 → assertpy2-2.30.0}/tests/test_typing.py +49 -3
- assertpy2-2.30.0/tests/test_typing_harness.py +79 -0
- {assertpy2-2.29.1 → assertpy2-2.30.0}/tests/test_typing_negative.py +9 -1
- assertpy2-2.30.0/tests/test_verdicts_held_to_python.py +277 -0
- {assertpy2-2.29.1 → assertpy2-2.30.0}/tests/typing_cases.py +58 -6
- {assertpy2-2.29.1 → assertpy2-2.30.0}/tests/typing_harness.py +33 -5
- {assertpy2-2.29.1 → assertpy2-2.30.0}/tests/typing_negative_baseline.py +60 -18
- {assertpy2-2.29.1 → assertpy2-2.30.0}/tests/verdict_golden.txt +2 -2
- assertpy2-2.29.1/assertpy2/_engine/_contract.py +0 -927
- assertpy2-2.29.1/assertpy2/_hints.py +0 -369
- assertpy2-2.29.1/assertpy2/json_mixin.py +0 -424
- assertpy2-2.29.1/docs/guides/data.md +0 -180
- assertpy2-2.29.1/tests/test_dict_compare.py +0 -537
- assertpy2-2.29.1/tests/test_dynamic.py +0 -173
- assertpy2-2.29.1/tests/test_skip_guard.py +0 -115
- {assertpy2-2.29.1 → assertpy2-2.30.0}/.gitignore +0 -0
- {assertpy2-2.29.1 → assertpy2-2.30.0}/CONTRIBUTING.md +0 -0
- {assertpy2-2.29.1 → assertpy2-2.30.0}/LICENSE +0 -0
- {assertpy2-2.29.1 → assertpy2-2.30.0}/SECURITY.md +0 -0
- {assertpy2-2.29.1 → assertpy2-2.30.0}/assertpy2/__init__.py +0 -0
- {assertpy2-2.29.1 → assertpy2-2.30.0}/assertpy2/_dangling.py +0 -0
- {assertpy2-2.29.1 → assertpy2-2.30.0}/assertpy2/_engine/__init__.py +0 -0
- {assertpy2-2.29.1 → assertpy2-2.30.0}/assertpy2/_engine/_compat.py +0 -0
- {assertpy2-2.29.1 → assertpy2-2.30.0}/assertpy2/_engine/_membership.py +0 -0
- {assertpy2-2.29.1 → assertpy2-2.30.0}/assertpy2/_engine/_pairing.py +0 -0
- {assertpy2-2.29.1 → assertpy2-2.30.0}/assertpy2/_engine/_path.py +0 -0
- {assertpy2-2.29.1 → assertpy2-2.30.0}/assertpy2/_engine/_size.py +0 -0
- {assertpy2-2.29.1 → assertpy2-2.30.0}/assertpy2/_engine/_text.py +0 -0
- {assertpy2-2.29.1 → assertpy2-2.30.0}/assertpy2/_inline.py +0 -0
- {assertpy2-2.29.1 → assertpy2-2.30.0}/assertpy2/_snapshot_codec.py +0 -0
- {assertpy2-2.29.1 → assertpy2-2.30.0}/assertpy2/behave_matchers.py +0 -0
- {assertpy2-2.29.1 → assertpy2-2.30.0}/assertpy2/bytes_mixin.py +0 -0
- {assertpy2-2.29.1 → assertpy2-2.30.0}/assertpy2/dataframe.py +0 -0
- {assertpy2-2.29.1 → assertpy2-2.30.0}/assertpy2/exception.py +0 -0
- {assertpy2-2.29.1 → assertpy2-2.30.0}/assertpy2/http_mixin.py +0 -0
- {assertpy2-2.29.1 → assertpy2-2.30.0}/assertpy2/outcome.py +0 -0
- {assertpy2-2.29.1 → assertpy2-2.30.0}/assertpy2/py.typed +0 -0
- {assertpy2-2.29.1 → assertpy2-2.30.0}/assertpy2/snapshot.py +0 -0
- {assertpy2-2.29.1 → assertpy2-2.30.0}/assertpy2/warning.py +0 -0
- {assertpy2-2.29.1 → assertpy2-2.30.0}/docs/assets/diff-equal.png +0 -0
- {assertpy2-2.29.1 → assertpy2-2.30.0}/docs/assets/diff-equal.svg +0 -0
- {assertpy2-2.29.1 → assertpy2-2.30.0}/docs/assets/diff-gallery.png +0 -0
- {assertpy2-2.29.1 → assertpy2-2.30.0}/docs/assets/diff-match.svg +0 -0
- {assertpy2-2.29.1 → assertpy2-2.30.0}/docs/assets/diff-sequence.svg +0 -0
- {assertpy2-2.29.1 → assertpy2-2.30.0}/docs/assets/diff-set.svg +0 -0
- {assertpy2-2.29.1 → assertpy2-2.30.0}/docs/assets/diff-string.svg +0 -0
- {assertpy2-2.29.1 → assertpy2-2.30.0}/docs/extending/custom-assertions.md +0 -0
- {assertpy2-2.29.1 → assertpy2-2.30.0}/docs/extending/integrations.md +0 -0
- {assertpy2-2.29.1 → assertpy2-2.30.0}/docs/getting-started/comparison.md +0 -0
- {assertpy2-2.29.1 → assertpy2-2.30.0}/docs/logo-dark.svg +0 -0
- {assertpy2-2.29.1 → assertpy2-2.30.0}/docs/logo.svg +0 -0
- {assertpy2-2.29.1 → assertpy2-2.30.0}/docs/reference/async.md +0 -0
- {assertpy2-2.29.1 → assertpy2-2.30.0}/docs/reference/bytes.md +0 -0
- {assertpy2-2.29.1 → assertpy2-2.30.0}/docs/reference/collections.md +0 -0
- {assertpy2-2.29.1 → assertpy2-2.30.0}/docs/reference/containment.md +0 -0
- {assertpy2-2.29.1 → assertpy2-2.30.0}/docs/reference/core.md +0 -0
- {assertpy2-2.29.1 → assertpy2-2.30.0}/docs/reference/dataframes.md +0 -0
- {assertpy2-2.29.1 → assertpy2-2.30.0}/docs/reference/dates.md +0 -0
- {assertpy2-2.29.1 → assertpy2-2.30.0}/docs/reference/dicts.md +0 -0
- {assertpy2-2.29.1 → assertpy2-2.30.0}/docs/reference/dynamic.md +0 -0
- {assertpy2-2.29.1 → assertpy2-2.30.0}/docs/reference/entry-points.md +0 -0
- {assertpy2-2.29.1 → assertpy2-2.30.0}/docs/reference/errors.md +0 -0
- {assertpy2-2.29.1 → assertpy2-2.30.0}/docs/reference/exceptions.md +0 -0
- {assertpy2-2.29.1 → assertpy2-2.30.0}/docs/reference/extracting.md +0 -0
- {assertpy2-2.29.1 → assertpy2-2.30.0}/docs/reference/files.md +0 -0
- {assertpy2-2.29.1 → assertpy2-2.30.0}/docs/reference/http.md +0 -0
- {assertpy2-2.29.1 → assertpy2-2.30.0}/docs/reference/json.md +0 -0
- {assertpy2-2.29.1 → assertpy2-2.30.0}/docs/reference/matchers.md +0 -0
- {assertpy2-2.29.1 → assertpy2-2.30.0}/docs/reference/numbers.md +0 -0
- {assertpy2-2.29.1 → assertpy2-2.30.0}/docs/reference/overview.md +0 -0
- {assertpy2-2.29.1 → assertpy2-2.30.0}/docs/reference/snapshots.md +0 -0
- {assertpy2-2.29.1 → assertpy2-2.30.0}/docs/reference/strings.md +0 -0
- {assertpy2-2.29.1 → assertpy2-2.30.0}/docs/reference/warnings.md +0 -0
- {assertpy2-2.29.1 → assertpy2-2.30.0}/docs/stylesheets/extra.css +0 -0
- {assertpy2-2.29.1 → assertpy2-2.30.0}/mkdocs.yml +0 -0
- {assertpy2-2.29.1 → assertpy2-2.30.0}/mkdocs_hooks.py +0 -0
- {assertpy2-2.29.1 → assertpy2-2.30.0}/scripts/mutation_report.py +0 -0
- {assertpy2-2.29.1 → assertpy2-2.30.0}/scripts/regenerate.py +0 -0
- {assertpy2-2.29.1 → assertpy2-2.30.0}/tests/api_surface.py +0 -0
- {assertpy2-2.29.1 → assertpy2-2.30.0}/tests/chain_corpus.py +0 -0
- {assertpy2-2.29.1 → assertpy2-2.30.0}/tests/chain_model.py +0 -0
- {assertpy2-2.29.1 → assertpy2-2.30.0}/tests/chain_surfaces.py +0 -0
- {assertpy2-2.29.1 → assertpy2-2.30.0}/tests/docs_fixtures.py +0 -0
- {assertpy2-2.29.1 → assertpy2-2.30.0}/tests/group_compat.py +0 -0
- {assertpy2-2.29.1 → assertpy2-2.30.0}/tests/poll_parity_baseline.py +0 -0
- {assertpy2-2.29.1 → assertpy2-2.30.0}/tests/poll_parity_cases.py +0 -0
- {assertpy2-2.29.1 → assertpy2-2.30.0}/tests/test_api_compatibility.py +0 -0
- {assertpy2-2.29.1 → assertpy2-2.30.0}/tests/test_api_vocabulary.py +0 -0
- {assertpy2-2.29.1 → assertpy2-2.30.0}/tests/test_architecture_doc.py +0 -0
- {assertpy2-2.29.1 → assertpy2-2.30.0}/tests/test_async.py +0 -0
- {assertpy2-2.29.1 → assertpy2-2.30.0}/tests/test_async_predicates.py +0 -0
- {assertpy2-2.29.1 → assertpy2-2.30.0}/tests/test_behave_matchers.py +0 -0
- {assertpy2-2.29.1 → assertpy2-2.30.0}/tests/test_bool.py +0 -0
- {assertpy2-2.29.1 → assertpy2-2.30.0}/tests/test_boundary_cases.py +0 -0
- {assertpy2-2.29.1 → assertpy2-2.30.0}/tests/test_bytes.py +0 -0
- {assertpy2-2.29.1 → assertpy2-2.30.0}/tests/test_call_awaitables.py +0 -0
- {assertpy2-2.29.1 → assertpy2-2.30.0}/tests/test_callable.py +0 -0
- {assertpy2-2.29.1 → assertpy2-2.30.0}/tests/test_chaining.py +0 -0
- {assertpy2-2.29.1 → assertpy2-2.30.0}/tests/test_check_protocols.py +0 -0
- {assertpy2-2.29.1 → assertpy2-2.30.0}/tests/test_class.py +0 -0
- {assertpy2-2.29.1 → assertpy2-2.30.0}/tests/test_collection.py +0 -0
- {assertpy2-2.29.1 → assertpy2-2.30.0}/tests/test_core.py +0 -0
- {assertpy2-2.29.1 → assertpy2-2.30.0}/tests/test_custom_list.py +0 -0
- {assertpy2-2.29.1 → assertpy2-2.30.0}/tests/test_dangling.py +0 -0
- {assertpy2-2.29.1 → assertpy2-2.30.0}/tests/test_dataframe.py +0 -0
- {assertpy2-2.29.1 → assertpy2-2.30.0}/tests/test_declared_floors.py +0 -0
- {assertpy2-2.29.1 → assertpy2-2.30.0}/tests/test_description.py +0 -0
- {assertpy2-2.29.1 → assertpy2-2.30.0}/tests/test_dict.py +0 -0
- {assertpy2-2.29.1 → assertpy2-2.30.0}/tests/test_docs_examples.py +0 -0
- {assertpy2-2.29.1 → assertpy2-2.30.0}/tests/test_docs_typing.py +0 -0
- {assertpy2-2.29.1 → assertpy2-2.30.0}/tests/test_equals.py +0 -0
- {assertpy2-2.29.1 → assertpy2-2.30.0}/tests/test_errors.py +0 -0
- {assertpy2-2.29.1 → assertpy2-2.30.0}/tests/test_exception_context.py +0 -0
- {assertpy2-2.29.1 → assertpy2-2.30.0}/tests/test_expected_exception.py +0 -0
- {assertpy2-2.29.1 → assertpy2-2.30.0}/tests/test_expected_warning.py +0 -0
- {assertpy2-2.29.1 → assertpy2-2.30.0}/tests/test_extensions.py +0 -0
- {assertpy2-2.29.1 → assertpy2-2.30.0}/tests/test_extracting.py +0 -0
- {assertpy2-2.29.1 → assertpy2-2.30.0}/tests/test_fail.py +0 -0
- {assertpy2-2.29.1 → assertpy2-2.30.0}/tests/test_file.py +0 -0
- {assertpy2-2.29.1 → assertpy2-2.30.0}/tests/test_grouped_soft.py +0 -0
- {assertpy2-2.29.1 → assertpy2-2.30.0}/tests/test_hostile_values.py +0 -0
- {assertpy2-2.29.1 → assertpy2-2.30.0}/tests/test_http.py +0 -0
- {assertpy2-2.29.1 → assertpy2-2.30.0}/tests/test_in.py +0 -0
- {assertpy2-2.29.1 → assertpy2-2.30.0}/tests/test_inline_record.py +0 -0
- {assertpy2-2.29.1 → assertpy2-2.30.0}/tests/test_inline_snapshot.py +0 -0
- {assertpy2-2.29.1 → assertpy2-2.30.0}/tests/test_integer_arguments.py +0 -0
- {assertpy2-2.29.1 → assertpy2-2.30.0}/tests/test_json.py +0 -0
- {assertpy2-2.29.1 → assertpy2-2.30.0}/tests/test_match_result.py +0 -0
- {assertpy2-2.29.1 → assertpy2-2.30.0}/tests/test_matcher_algebra.py +0 -0
- {assertpy2-2.29.1 → assertpy2-2.30.0}/tests/test_matcher_parity.py +0 -0
- {assertpy2-2.29.1 → assertpy2-2.30.0}/tests/test_matcher_registry.py +0 -0
- {assertpy2-2.29.1 → assertpy2-2.30.0}/tests/test_namedtuple.py +0 -0
- {assertpy2-2.29.1 → assertpy2-2.30.0}/tests/test_negated_protocols.py +0 -0
- {assertpy2-2.29.1 → assertpy2-2.30.0}/tests/test_none.py +0 -0
- {assertpy2-2.29.1 → assertpy2-2.30.0}/tests/test_not.py +0 -0
- {assertpy2-2.29.1 → assertpy2-2.30.0}/tests/test_numeric_questions.py +0 -0
- {assertpy2-2.29.1 → assertpy2-2.30.0}/tests/test_operation_contract.py +0 -0
- {assertpy2-2.29.1 → assertpy2-2.30.0}/tests/test_optional_integration_contracts.py +0 -0
- {assertpy2-2.29.1 → assertpy2-2.30.0}/tests/test_overloads.py +0 -0
- {assertpy2-2.29.1 → assertpy2-2.30.0}/tests/test_pipeline.py +0 -0
- {assertpy2-2.29.1 → assertpy2-2.30.0}/tests/test_poll_protocols.py +0 -0
- {assertpy2-2.29.1 → assertpy2-2.30.0}/tests/test_property_attrs.py +0 -0
- {assertpy2-2.29.1 → assertpy2-2.30.0}/tests/test_protocol_parity.py +0 -0
- {assertpy2-2.29.1 → assertpy2-2.30.0}/tests/test_public_surface.py +0 -0
- {assertpy2-2.29.1 → assertpy2-2.30.0}/tests/test_recursive_compare_attrs.py +0 -0
- {assertpy2-2.29.1 → assertpy2-2.30.0}/tests/test_recursive_compare_pydantic.py +0 -0
- {assertpy2-2.29.1 → assertpy2-2.30.0}/tests/test_refusals.py +0 -0
- {assertpy2-2.29.1 → assertpy2-2.30.0}/tests/test_regex_groups.py +0 -0
- {assertpy2-2.29.1 → assertpy2-2.30.0}/tests/test_requirement.py +0 -0
- {assertpy2-2.29.1 → assertpy2-2.30.0}/tests/test_same_as.py +0 -0
- {assertpy2-2.29.1 → assertpy2-2.30.0}/tests/test_satisfy.py +0 -0
- {assertpy2-2.29.1 → assertpy2-2.30.0}/tests/test_snapshots.py +0 -0
- {assertpy2-2.29.1 → assertpy2-2.30.0}/tests/test_soft.py +0 -0
- {assertpy2-2.29.1 → assertpy2-2.30.0}/tests/test_soft_fail.py +0 -0
- {assertpy2-2.29.1 → assertpy2-2.30.0}/tests/test_surface_conformance.py +0 -0
- {assertpy2-2.29.1 → assertpy2-2.30.0}/tests/test_sync_eventually.py +0 -0
- {assertpy2-2.29.1 → assertpy2-2.30.0}/tests/test_traceback.py +0 -0
- {assertpy2-2.29.1 → assertpy2-2.30.0}/tests/test_type.py +0 -0
- {assertpy2-2.29.1 → assertpy2-2.30.0}/tests/test_type_expression_failures.py +0 -0
- {assertpy2-2.29.1 → assertpy2-2.30.0}/tests/test_typing_chain_corpus.py +0 -0
- {assertpy2-2.29.1 → assertpy2-2.30.0}/tests/test_typing_claims.py +0 -0
- {assertpy2-2.29.1 → assertpy2-2.30.0}/tests/test_typing_completeness.py +0 -0
- {assertpy2-2.29.1 → assertpy2-2.30.0}/tests/test_typing_conformance.py +0 -0
- {assertpy2-2.29.1 → assertpy2-2.30.0}/tests/test_typing_from_a_wheel.py +0 -0
- {assertpy2-2.29.1 → assertpy2-2.30.0}/tests/test_typing_http.py +0 -0
- {assertpy2-2.29.1 → assertpy2-2.30.0}/tests/test_typing_integrations.py +0 -0
- {assertpy2-2.29.1 → assertpy2-2.30.0}/tests/test_typing_promises.py +0 -0
- {assertpy2-2.29.1 → assertpy2-2.30.0}/tests/test_unrenderable_values.py +0 -0
- {assertpy2-2.29.1 → assertpy2-2.30.0}/tests/test_vacuity_contract.py +0 -0
- {assertpy2-2.29.1 → assertpy2-2.30.0}/tests/test_verdict_corpus.py +0 -0
- {assertpy2-2.29.1 → assertpy2-2.30.0}/tests/test_warn.py +0 -0
- {assertpy2-2.29.1 → assertpy2-2.30.0}/tests/typing_chain_corpus_baseline.json +0 -0
- {assertpy2-2.29.1 → assertpy2-2.30.0}/tests/typing_http.py +0 -0
- {assertpy2-2.29.1 → assertpy2-2.30.0}/tests/typing_integrations.py +0 -0
- {assertpy2-2.29.1 → assertpy2-2.30.0}/tests/typing_integrations_baseline.py +0 -0
- {assertpy2-2.29.1 → assertpy2-2.30.0}/tests/typing_promises.py +0 -0
- {assertpy2-2.29.1 → assertpy2-2.30.0}/tests/verdict_corpus.py +0 -0
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.5
|
|
2
2
|
Name: assertpy2
|
|
3
|
-
Version: 2.
|
|
3
|
+
Version: 2.30.0
|
|
4
4
|
Summary: Fluent, fully typed assertion library for Python: your type checker sees only the assertions that fit the value, and every failure carries a structured diff. Soft assertions, polling, inline snapshots, OpenAPI contracts.
|
|
5
5
|
Project-URL: Homepage, https://github.com/Solganis/assertpy2
|
|
6
6
|
Project-URL: Repository, https://github.com/Solganis/assertpy2
|
|
@@ -39,6 +39,7 @@ Provides-Extra: inline
|
|
|
39
39
|
Requires-Dist: asttokens>=2.0.4; extra == 'inline'
|
|
40
40
|
Requires-Dist: executing>=2.2; extra == 'inline'
|
|
41
41
|
Provides-Extra: json
|
|
42
|
+
Requires-Dist: idna>=3.7; extra == 'json'
|
|
42
43
|
Requires-Dist: jsonpath-ng>=1.8; extra == 'json'
|
|
43
44
|
Requires-Dist: jsonschema>=4.18; extra == 'json'
|
|
44
45
|
Requires-Dist: referencing>=0.28.4; extra == 'json'
|
|
@@ -73,8 +74,6 @@ Description-Content-Type: text/markdown
|
|
|
73
74
|
<a href="https://scorecard.dev/viewer/?uri=github.com/Solganis/assertpy2"><img src="https://img.shields.io/ossf-scorecard/github.com/Solganis/assertpy2?label=OpenSSF%20Scorecard" alt="OpenSSF Scorecard"></a>
|
|
74
75
|
</p>
|
|
75
76
|
|
|
76
|
-
---
|
|
77
|
-
|
|
78
77
|
<h2 align="center"><a href="https://solganis.github.io/assertpy2/getting-started/quickstart/">Quick start</a></h2>
|
|
79
78
|
|
|
80
79
|
```bash
|
|
@@ -295,12 +294,14 @@ Anything else you build can too.
|
|
|
295
294
|
- [**Structured errors**](https://solganis.github.io/assertpy2/guides/errors/#structured-errors): `AssertionFailure` carries `.actual`, `.expected` and `.diff`, and the diff renders into the message, so it shows off pytest too.
|
|
296
295
|
- [**Assertions as values**](https://solganis.github.io/assertpy2/guides/errors/#asking-instead-of-asserting): `check()` runs the next assertion for its verdict instead of raising, handing back an `AssertionOutcome`.
|
|
297
296
|
- [**Rich pytest diffs**](https://solganis.github.io/assertpy2/guides/errors/#rich-pytest-diffs): recursive diffs across containers, dataclasses, attrs and Pydantic models, with intra-line carets for strings.
|
|
297
|
+
- [**Failures that say why**](https://solganis.github.io/assertpy2/guides/errors/#some-failures-say-why-not-only-what): where one fact explains a failure, a line under the message says it. An id the payload holds as text (`7` against `"7"`), a NaN, two instances compared by identity, surrounding whitespace. A failed `contains()` or `is_in()` names the closest row, and forty rows that differ in one field are named as one place.
|
|
298
298
|
|
|
299
299
|
**Plugin for pytest**
|
|
300
300
|
|
|
301
301
|
Set from the command line or from `[tool.pytest.ini_options]`, not from a call.
|
|
302
302
|
|
|
303
303
|
- [**Failure clustering**](https://solganis.github.io/assertpy2/guides/errors/#what-the-failures-had-in-common): forty failing tests are usually not forty problems. Where three or more differ at the same place, the run ends with a line saying where. On by default, `assertpy2_failure_clusters = "off"` turns it off.
|
|
304
|
+
- [**IDE comparison window**](https://solganis.github.io/assertpy2/guides/errors/#the-comparison-window-of-an-ide): a failed `is_equal_to()` or `has_<name>()` gets PyCharm's "Click to see difference" link, as a plain `assert` does, and the window shows the two values it compared. Under `ignore=` or `include=` those go without the keys left out. The plugin hands them to `pytest_assertrepr_compare`, the hook the IDE's runner listens to. On by default, `assertpy2_comparison = "off"` turns it off.
|
|
304
305
|
- [**Diagnostic profiles**](https://solganis.github.io/assertpy2/guides/errors/#configuration): `assertpy2_profile` turns the guards below on in one line. `compatible` (default) leaves them off, `safe` warns, `strict` fails the tests they find. A setting you name yourself still wins.
|
|
305
306
|
- [**Vacuous-assertion guard**](https://solganis.github.io/assertpy2/guides/assertions/#assertions-that-checked-nothing): `--assertpy2-vacuous` warns when a universal assertion passes over an empty collection, having checked nothing.
|
|
306
307
|
- [**Dangling-assertion detector**](https://solganis.github.io/assertpy2/guides/assertions/#assertions-that-never-ran): `--assertpy2-dangling` warns when a chain builds an assertion and never runs it. `assert assert_that(x).is_positive` passes on any value, and neither ruff nor coverage sees it.
|
|
@@ -21,8 +21,6 @@
|
|
|
21
21
|
<a href="https://scorecard.dev/viewer/?uri=github.com/Solganis/assertpy2"><img src="https://img.shields.io/ossf-scorecard/github.com/Solganis/assertpy2?label=OpenSSF%20Scorecard" alt="OpenSSF Scorecard"></a>
|
|
22
22
|
</p>
|
|
23
23
|
|
|
24
|
-
---
|
|
25
|
-
|
|
26
24
|
<h2 align="center"><a href="https://solganis.github.io/assertpy2/getting-started/quickstart/">Quick start</a></h2>
|
|
27
25
|
|
|
28
26
|
```bash
|
|
@@ -243,12 +241,14 @@ Anything else you build can too.
|
|
|
243
241
|
- [**Structured errors**](https://solganis.github.io/assertpy2/guides/errors/#structured-errors): `AssertionFailure` carries `.actual`, `.expected` and `.diff`, and the diff renders into the message, so it shows off pytest too.
|
|
244
242
|
- [**Assertions as values**](https://solganis.github.io/assertpy2/guides/errors/#asking-instead-of-asserting): `check()` runs the next assertion for its verdict instead of raising, handing back an `AssertionOutcome`.
|
|
245
243
|
- [**Rich pytest diffs**](https://solganis.github.io/assertpy2/guides/errors/#rich-pytest-diffs): recursive diffs across containers, dataclasses, attrs and Pydantic models, with intra-line carets for strings.
|
|
244
|
+
- [**Failures that say why**](https://solganis.github.io/assertpy2/guides/errors/#some-failures-say-why-not-only-what): where one fact explains a failure, a line under the message says it. An id the payload holds as text (`7` against `"7"`), a NaN, two instances compared by identity, surrounding whitespace. A failed `contains()` or `is_in()` names the closest row, and forty rows that differ in one field are named as one place.
|
|
246
245
|
|
|
247
246
|
**Plugin for pytest**
|
|
248
247
|
|
|
249
248
|
Set from the command line or from `[tool.pytest.ini_options]`, not from a call.
|
|
250
249
|
|
|
251
250
|
- [**Failure clustering**](https://solganis.github.io/assertpy2/guides/errors/#what-the-failures-had-in-common): forty failing tests are usually not forty problems. Where three or more differ at the same place, the run ends with a line saying where. On by default, `assertpy2_failure_clusters = "off"` turns it off.
|
|
251
|
+
- [**IDE comparison window**](https://solganis.github.io/assertpy2/guides/errors/#the-comparison-window-of-an-ide): a failed `is_equal_to()` or `has_<name>()` gets PyCharm's "Click to see difference" link, as a plain `assert` does, and the window shows the two values it compared. Under `ignore=` or `include=` those go without the keys left out. The plugin hands them to `pytest_assertrepr_compare`, the hook the IDE's runner listens to. On by default, `assertpy2_comparison = "off"` turns it off.
|
|
252
252
|
- [**Diagnostic profiles**](https://solganis.github.io/assertpy2/guides/errors/#configuration): `assertpy2_profile` turns the guards below on in one line. `compatible` (default) leaves them off, `safe` warns, `strict` fails the tests they find. A setting you name yourself still wins.
|
|
253
253
|
- [**Vacuous-assertion guard**](https://solganis.github.io/assertpy2/guides/assertions/#assertions-that-checked-nothing): `--assertpy2-vacuous` warns when a universal assertion passes over an empty collection, having checked nothing.
|
|
254
254
|
- [**Dangling-assertion detector**](https://solganis.github.io/assertpy2/guides/assertions/#assertions-that-never-ran): `--assertpy2-dangling` warns when a chain builds an assertion and never runs it. `assert assert_that(x).is_positive` passes on any value, and neither ruff nor coverage sees it.
|
|
@@ -209,7 +209,8 @@ def canonical_steps(entry: DiffEntry) -> tuple[tuple[str, str], ...] | None:
|
|
|
209
209
|
Indices collapse to one placeholder, and every other hop keeps its value's repr rather than its
|
|
210
210
|
text, so two keys that render alike stay apart.
|
|
211
211
|
"""
|
|
212
|
-
|
|
212
|
+
# entering JSON text is no place of its own: what lies in it is found by the same keys from one run to the next
|
|
213
|
+
steps = tuple(step for step in entry.steps if step.kind != "json")
|
|
213
214
|
if not steps or any(step.kind not in _COORDINATE for step in steps):
|
|
214
215
|
return None
|
|
215
216
|
return tuple((step.kind, _ANY_POSITION if step.kind in _POSITIONAL else stable_repr(step.value)) for step in steps)
|
|
@@ -10,6 +10,11 @@ from a payload typed `dict[str, Any]` then read as a string. A rung per asserti
|
|
|
10
10
|
|
|
11
11
|
A name nobody declares stays open, because `__getattr__` answers it: a dynamic assertion is resolved
|
|
12
12
|
from the value's own attributes and reaches this proxy too.
|
|
13
|
+
|
|
14
|
+
`val` and `value` are declared, and not only because the proxy hands the value back under them. They
|
|
15
|
+
hand the protocol's parameter out directly, where `not_` names it only through the protocol itself.
|
|
16
|
+
Measured on a protocol of two members: with `not_` alone ty takes the twin over a number for the twin
|
|
17
|
+
over a text, so no restriction on ``self`` was read and a text verdict asked of a number was taken.
|
|
13
18
|
"""
|
|
14
19
|
|
|
15
20
|
from __future__ import annotations
|
|
@@ -38,7 +43,7 @@ if TYPE_CHECKING:
|
|
|
38
43
|
from ._typing import (
|
|
39
44
|
_U,
|
|
40
45
|
_ArrayT_co,
|
|
41
|
-
|
|
46
|
+
_Capable,
|
|
42
47
|
_FrameT_co,
|
|
43
48
|
_Other,
|
|
44
49
|
_P_co,
|
|
@@ -65,6 +70,10 @@ if TYPE_CHECKING:
|
|
|
65
70
|
|
|
66
71
|
@property
|
|
67
72
|
def not_(self) -> _CheckAnyValue[_P_co]: ...
|
|
73
|
+
@property
|
|
74
|
+
def val(self) -> _P_co: ...
|
|
75
|
+
@property
|
|
76
|
+
def value(self) -> _P_co: ...
|
|
68
77
|
def __getattr__(self, name: str) -> Callable[..., AssertionOutcome]: ...
|
|
69
78
|
|
|
70
79
|
@overload
|
|
@@ -97,7 +106,7 @@ if TYPE_CHECKING:
|
|
|
97
106
|
self: _CheckAnyValue[_FrameT_co] | _CheckAnyValue[_ArrayT_co], *items: object
|
|
98
107
|
) -> AssertionOutcome: ...
|
|
99
108
|
@overload
|
|
100
|
-
def contains(self: _CheckAnyValue[
|
|
109
|
+
def contains(self: _CheckAnyValue[_Capable], *items: object) -> AssertionOutcome: ...
|
|
101
110
|
|
|
102
111
|
def is_equal_to_ignoring_case(self: _CheckAnyValue[str], other: str) -> AssertionOutcome: ...
|
|
103
112
|
|
|
@@ -106,7 +115,7 @@ if TYPE_CHECKING:
|
|
|
106
115
|
@overload
|
|
107
116
|
def contains_ignoring_case(self: _CheckAnyValue[str], *items: str) -> AssertionOutcome: ...
|
|
108
117
|
@overload
|
|
109
|
-
def contains_ignoring_case(self: _CheckAnyValue[
|
|
118
|
+
def contains_ignoring_case(self: _CheckAnyValue[_Capable], *items: str) -> AssertionOutcome: ...
|
|
110
119
|
|
|
111
120
|
@overload
|
|
112
121
|
def starts_with(self: _CheckAnyValue[str], prefix: str) -> AssertionOutcome: ...
|
|
@@ -123,7 +132,7 @@ if TYPE_CHECKING:
|
|
|
123
132
|
self: _CheckAnyValue[bytes] | _CheckAnyValue[bytearray], prefix: bytes | bytearray
|
|
124
133
|
) -> AssertionOutcome: ...
|
|
125
134
|
@overload
|
|
126
|
-
def starts_with(self: _CheckAnyValue[
|
|
135
|
+
def starts_with(self: _CheckAnyValue[_Capable], prefix: str) -> AssertionOutcome: ...
|
|
127
136
|
|
|
128
137
|
def starts_with_ignoring_case(self: _CheckAnyValue[str], prefix: str) -> AssertionOutcome: ...
|
|
129
138
|
|
|
@@ -142,7 +151,7 @@ if TYPE_CHECKING:
|
|
|
142
151
|
self: _CheckAnyValue[bytes] | _CheckAnyValue[bytearray], suffix: bytes | bytearray
|
|
143
152
|
) -> AssertionOutcome: ...
|
|
144
153
|
@overload
|
|
145
|
-
def ends_with(self: _CheckAnyValue[
|
|
154
|
+
def ends_with(self: _CheckAnyValue[_Capable], suffix: str) -> AssertionOutcome: ...
|
|
146
155
|
|
|
147
156
|
def ends_with_ignoring_case(self: _CheckAnyValue[str], suffix: str) -> AssertionOutcome: ...
|
|
148
157
|
|
|
@@ -165,17 +174,17 @@ if TYPE_CHECKING:
|
|
|
165
174
|
@overload
|
|
166
175
|
def contains_any_of(self: _CheckAnyValue[str], *items: str) -> AssertionOutcome: ...
|
|
167
176
|
@overload
|
|
168
|
-
def contains_any_of(self: _CheckAnyValue[
|
|
177
|
+
def contains_any_of(self: _CheckAnyValue[_Capable], *items: str) -> AssertionOutcome: ...
|
|
169
178
|
|
|
170
179
|
@overload
|
|
171
180
|
def contains_none_of(self: _CheckAnyValue[str], *items: str) -> AssertionOutcome: ...
|
|
172
181
|
@overload
|
|
173
|
-
def contains_none_of(self: _CheckAnyValue[
|
|
182
|
+
def contains_none_of(self: _CheckAnyValue[_Capable], *items: str) -> AssertionOutcome: ...
|
|
174
183
|
|
|
175
184
|
@overload
|
|
176
185
|
def is_unicode(self: _CheckAnyValue[str]) -> AssertionOutcome: ...
|
|
177
186
|
@overload
|
|
178
|
-
def is_unicode(self: _CheckAnyValue[
|
|
187
|
+
def is_unicode(self: _CheckAnyValue[_Capable]) -> AssertionOutcome: ...
|
|
179
188
|
|
|
180
189
|
@overload
|
|
181
190
|
def is_greater_than(self: _CheckAnyValue[str], other: str) -> AssertionOutcome: ...
|
|
@@ -280,7 +289,7 @@ if TYPE_CHECKING:
|
|
|
280
289
|
self: _CheckAnyValue[_FrameT_co] | _CheckAnyValue[_ArrayT_co], *items: object
|
|
281
290
|
) -> AssertionOutcome: ...
|
|
282
291
|
@overload
|
|
283
|
-
def does_not_contain(self: _CheckAnyValue[
|
|
292
|
+
def does_not_contain(self: _CheckAnyValue[_Capable], *items: object) -> AssertionOutcome: ...
|
|
284
293
|
|
|
285
294
|
@overload
|
|
286
295
|
def contains_only(self: _CheckAnyValue[str], *items: str | Matcher[str]) -> AssertionOutcome: ...
|
|
@@ -299,7 +308,7 @@ if TYPE_CHECKING:
|
|
|
299
308
|
self: _CheckAnyValue[_FrameT_co] | _CheckAnyValue[_ArrayT_co], *items: object
|
|
300
309
|
) -> AssertionOutcome: ...
|
|
301
310
|
@overload
|
|
302
|
-
def contains_only(self: _CheckAnyValue[
|
|
311
|
+
def contains_only(self: _CheckAnyValue[_Capable], *items: object) -> AssertionOutcome: ...
|
|
303
312
|
|
|
304
313
|
@overload
|
|
305
314
|
def contains_sequence(self: _CheckAnyValue[str], *items: str | Matcher[str]) -> AssertionOutcome: ...
|
|
@@ -312,7 +321,7 @@ if TYPE_CHECKING:
|
|
|
312
321
|
*items: _E | Matcher[_E],
|
|
313
322
|
) -> AssertionOutcome: ...
|
|
314
323
|
@overload
|
|
315
|
-
def contains_sequence(self: _CheckAnyValue[
|
|
324
|
+
def contains_sequence(self: _CheckAnyValue[_Capable], *items: str | Matcher[str]) -> AssertionOutcome: ...
|
|
316
325
|
|
|
317
326
|
@overload
|
|
318
327
|
def contains_exactly(self: _CheckAnyValue[str], *items: str | Matcher[str]) -> AssertionOutcome: ...
|
|
@@ -325,7 +334,7 @@ if TYPE_CHECKING:
|
|
|
325
334
|
*items: _E | Matcher[_E],
|
|
326
335
|
) -> AssertionOutcome: ...
|
|
327
336
|
@overload
|
|
328
|
-
def contains_exactly(self: _CheckAnyValue[
|
|
337
|
+
def contains_exactly(self: _CheckAnyValue[_Capable], *items: str | Matcher[str]) -> AssertionOutcome: ...
|
|
329
338
|
|
|
330
339
|
@overload
|
|
331
340
|
def contains_exactly_in_any_order(
|
|
@@ -341,7 +350,7 @@ if TYPE_CHECKING:
|
|
|
341
350
|
) -> AssertionOutcome: ...
|
|
342
351
|
@overload
|
|
343
352
|
def contains_exactly_in_any_order(
|
|
344
|
-
self: _CheckAnyValue[
|
|
353
|
+
self: _CheckAnyValue[_Capable], *items: str | Matcher[str]
|
|
345
354
|
) -> AssertionOutcome: ...
|
|
346
355
|
|
|
347
356
|
@overload
|
|
@@ -381,7 +390,7 @@ if TYPE_CHECKING:
|
|
|
381
390
|
) -> AssertionOutcome: ...
|
|
382
391
|
@overload
|
|
383
392
|
def is_sorted(
|
|
384
|
-
self: _CheckAnyValue[
|
|
393
|
+
self: _CheckAnyValue[_Capable],
|
|
385
394
|
key: Callable[[str], object] = ...,
|
|
386
395
|
reverse: bool = ...,
|
|
387
396
|
*,
|
|
@@ -424,7 +433,7 @@ if TYPE_CHECKING:
|
|
|
424
433
|
) -> AssertionOutcome: ...
|
|
425
434
|
@overload
|
|
426
435
|
def each(
|
|
427
|
-
self: _CheckAnyValue[
|
|
436
|
+
self: _CheckAnyValue[_Capable], matcher: Matcher[Any] | Callable[[Any], object], *, allow_empty: bool = ...
|
|
428
437
|
) -> AssertionOutcome: ...
|
|
429
438
|
|
|
430
439
|
@overload
|
|
@@ -463,7 +472,7 @@ if TYPE_CHECKING:
|
|
|
463
472
|
) -> AssertionOutcome: ...
|
|
464
473
|
@overload
|
|
465
474
|
def all_satisfy(
|
|
466
|
-
self: _CheckAnyValue[
|
|
475
|
+
self: _CheckAnyValue[_Capable], matcher: Matcher[Any] | Callable[[Any], object], *, allow_empty: bool = ...
|
|
467
476
|
) -> AssertionOutcome: ...
|
|
468
477
|
|
|
469
478
|
@overload
|
|
@@ -480,7 +489,7 @@ if TYPE_CHECKING:
|
|
|
480
489
|
) -> AssertionOutcome: ...
|
|
481
490
|
@overload
|
|
482
491
|
def any_satisfy(
|
|
483
|
-
self: _CheckAnyValue[
|
|
492
|
+
self: _CheckAnyValue[_Capable], matcher: Matcher[str] | Callable[[str], object]
|
|
484
493
|
) -> AssertionOutcome: ...
|
|
485
494
|
|
|
486
495
|
@overload
|
|
@@ -497,7 +506,7 @@ if TYPE_CHECKING:
|
|
|
497
506
|
) -> AssertionOutcome: ...
|
|
498
507
|
@overload
|
|
499
508
|
def none_satisfy(
|
|
500
|
-
self: _CheckAnyValue[
|
|
509
|
+
self: _CheckAnyValue[_Capable], matcher: Matcher[str] | Callable[[str], object]
|
|
501
510
|
) -> AssertionOutcome: ...
|
|
502
511
|
|
|
503
512
|
@overload
|
|
@@ -514,7 +523,7 @@ if TYPE_CHECKING:
|
|
|
514
523
|
) -> AssertionOutcome: ...
|
|
515
524
|
@overload
|
|
516
525
|
def satisfies_exactly(
|
|
517
|
-
self: _CheckAnyValue[
|
|
526
|
+
self: _CheckAnyValue[_Capable], *matchers: Matcher[str] | Callable[[str], object]
|
|
518
527
|
) -> AssertionOutcome: ...
|
|
519
528
|
|
|
520
529
|
@overload
|
|
@@ -531,7 +540,7 @@ if TYPE_CHECKING:
|
|
|
531
540
|
) -> AssertionOutcome: ...
|
|
532
541
|
@overload
|
|
533
542
|
def satisfies_exactly_in_any_order(
|
|
534
|
-
self: _CheckAnyValue[
|
|
543
|
+
self: _CheckAnyValue[_Capable], *matchers: Matcher[str] | Callable[[str], object]
|
|
535
544
|
) -> AssertionOutcome: ...
|
|
536
545
|
|
|
537
546
|
@overload
|
|
@@ -555,7 +564,7 @@ if TYPE_CHECKING:
|
|
|
555
564
|
) -> AssertionOutcome: ...
|
|
556
565
|
@overload
|
|
557
566
|
def zip_satisfies(
|
|
558
|
-
self: _CheckAnyValue[
|
|
567
|
+
self: _CheckAnyValue[_Capable],
|
|
559
568
|
other: Iterable[_Other],
|
|
560
569
|
predicate: Callable[[str, _Other], object],
|
|
561
570
|
*,
|
|
@@ -633,7 +642,7 @@ if TYPE_CHECKING:
|
|
|
633
642
|
) -> AssertionOutcome: ...
|
|
634
643
|
@overload
|
|
635
644
|
def is_subset_of(
|
|
636
|
-
self: _CheckAnyValue[
|
|
645
|
+
self: _CheckAnyValue[_Capable], *supersets: object, allow_empty: bool = ...
|
|
637
646
|
) -> AssertionOutcome: ...
|
|
638
647
|
|
|
639
648
|
@overload
|
|
@@ -646,7 +655,7 @@ if TYPE_CHECKING:
|
|
|
646
655
|
| _CheckAnyValue[frozenset[_E]],
|
|
647
656
|
) -> AssertionOutcome: ...
|
|
648
657
|
@overload
|
|
649
|
-
def contains_duplicates(self: _CheckAnyValue[
|
|
658
|
+
def contains_duplicates(self: _CheckAnyValue[_Capable]) -> AssertionOutcome: ...
|
|
650
659
|
|
|
651
660
|
@overload
|
|
652
661
|
def does_not_contain_duplicates(self: _CheckAnyValue[str]) -> AssertionOutcome: ...
|
|
@@ -658,7 +667,7 @@ if TYPE_CHECKING:
|
|
|
658
667
|
| _CheckAnyValue[frozenset[_E]],
|
|
659
668
|
) -> AssertionOutcome: ...
|
|
660
669
|
@overload
|
|
661
|
-
def does_not_contain_duplicates(self: _CheckAnyValue[
|
|
670
|
+
def does_not_contain_duplicates(self: _CheckAnyValue[_Capable]) -> AssertionOutcome: ...
|
|
662
671
|
|
|
663
672
|
@overload
|
|
664
673
|
def contains_only_once(self: _CheckAnyValue[str], *items: object) -> AssertionOutcome: ...
|
|
@@ -671,7 +680,7 @@ if TYPE_CHECKING:
|
|
|
671
680
|
*items: object,
|
|
672
681
|
) -> AssertionOutcome: ...
|
|
673
682
|
@overload
|
|
674
|
-
def contains_only_once(self: _CheckAnyValue[
|
|
683
|
+
def contains_only_once(self: _CheckAnyValue[_Capable], *items: object) -> AssertionOutcome: ...
|
|
675
684
|
|
|
676
685
|
@overload
|
|
677
686
|
def contains_in_order(self: _CheckAnyValue[str], *items: str | Matcher[str]) -> AssertionOutcome: ...
|
|
@@ -703,7 +712,7 @@ if TYPE_CHECKING:
|
|
|
703
712
|
other: Sized,
|
|
704
713
|
) -> AssertionOutcome: ...
|
|
705
714
|
@overload
|
|
706
|
-
def has_same_size_as(self: _CheckAnyValue[
|
|
715
|
+
def has_same_size_as(self: _CheckAnyValue[_Capable], other: Sized) -> AssertionOutcome: ...
|
|
707
716
|
|
|
708
717
|
@overload
|
|
709
718
|
def has_size_greater_than(
|
|
@@ -720,7 +729,7 @@ if TYPE_CHECKING:
|
|
|
720
729
|
size: SupportsIndex,
|
|
721
730
|
) -> AssertionOutcome: ...
|
|
722
731
|
@overload
|
|
723
|
-
def has_size_greater_than(self: _CheckAnyValue[
|
|
732
|
+
def has_size_greater_than(self: _CheckAnyValue[_Capable], size: SupportsIndex) -> AssertionOutcome: ...
|
|
724
733
|
|
|
725
734
|
@overload
|
|
726
735
|
def has_size_less_than(
|
|
@@ -737,7 +746,7 @@ if TYPE_CHECKING:
|
|
|
737
746
|
size: SupportsIndex,
|
|
738
747
|
) -> AssertionOutcome: ...
|
|
739
748
|
@overload
|
|
740
|
-
def has_size_less_than(self: _CheckAnyValue[
|
|
749
|
+
def has_size_less_than(self: _CheckAnyValue[_Capable], size: SupportsIndex) -> AssertionOutcome: ...
|
|
741
750
|
|
|
742
751
|
@overload
|
|
743
752
|
def has_size_between(
|
|
@@ -756,7 +765,7 @@ if TYPE_CHECKING:
|
|
|
756
765
|
) -> AssertionOutcome: ...
|
|
757
766
|
@overload
|
|
758
767
|
def has_size_between(
|
|
759
|
-
self: _CheckAnyValue[
|
|
768
|
+
self: _CheckAnyValue[_Capable], low: SupportsIndex, high: SupportsIndex
|
|
760
769
|
) -> AssertionOutcome: ...
|
|
761
770
|
|
|
762
771
|
@overload
|
|
@@ -773,7 +782,7 @@ if TYPE_CHECKING:
|
|
|
773
782
|
| _CheckAnyValue[_ArrayT_co],
|
|
774
783
|
) -> AssertionOutcome: ...
|
|
775
784
|
@overload
|
|
776
|
-
def is_empty(self: _CheckAnyValue[
|
|
785
|
+
def is_empty(self: _CheckAnyValue[_Capable]) -> AssertionOutcome: ...
|
|
777
786
|
|
|
778
787
|
@overload
|
|
779
788
|
def is_not_empty(
|
|
@@ -789,7 +798,7 @@ if TYPE_CHECKING:
|
|
|
789
798
|
| _CheckAnyValue[_ArrayT_co],
|
|
790
799
|
) -> AssertionOutcome: ...
|
|
791
800
|
@overload
|
|
792
|
-
def is_not_empty(self: _CheckAnyValue[
|
|
801
|
+
def is_not_empty(self: _CheckAnyValue[_Capable]) -> AssertionOutcome: ...
|
|
793
802
|
|
|
794
803
|
@overload
|
|
795
804
|
def is_positive(
|
|
@@ -844,7 +853,7 @@ if TYPE_CHECKING:
|
|
|
844
853
|
@overload
|
|
845
854
|
def is_not_between(self: _CheckAnyValue[_T], low: Any, high: Any) -> AssertionOutcome: ...
|
|
846
855
|
@overload
|
|
847
|
-
def is_not_between(self: _CheckAnyValue[
|
|
856
|
+
def is_not_between(self: _CheckAnyValue[_Capable], low: _Number, high: _Number) -> AssertionOutcome: ...
|
|
848
857
|
|
|
849
858
|
@overload
|
|
850
859
|
def is_between(
|
|
@@ -861,7 +870,7 @@ if TYPE_CHECKING:
|
|
|
861
870
|
@overload
|
|
862
871
|
def is_between(self: _CheckAnyValue[_T], low: Any, high: Any) -> AssertionOutcome: ...
|
|
863
872
|
@overload
|
|
864
|
-
def is_between(self: _CheckAnyValue[
|
|
873
|
+
def is_between(self: _CheckAnyValue[_Capable], low: _Number, high: _Number) -> AssertionOutcome: ...
|
|
865
874
|
|
|
866
875
|
@overload
|
|
867
876
|
def is_zero(
|
|
@@ -870,7 +879,7 @@ if TYPE_CHECKING:
|
|
|
870
879
|
@overload
|
|
871
880
|
def is_zero(self: _CheckAnyValue[SupportsFloat | SupportsIndex]) -> AssertionOutcome: ...
|
|
872
881
|
@overload
|
|
873
|
-
def is_zero(self: _CheckAnyValue[
|
|
882
|
+
def is_zero(self: _CheckAnyValue[_Capable]) -> AssertionOutcome: ...
|
|
874
883
|
|
|
875
884
|
@overload
|
|
876
885
|
def is_not_zero(
|
|
@@ -879,7 +888,7 @@ if TYPE_CHECKING:
|
|
|
879
888
|
@overload
|
|
880
889
|
def is_not_zero(self: _CheckAnyValue[SupportsFloat | SupportsIndex]) -> AssertionOutcome: ...
|
|
881
890
|
@overload
|
|
882
|
-
def is_not_zero(self: _CheckAnyValue[
|
|
891
|
+
def is_not_zero(self: _CheckAnyValue[_Capable]) -> AssertionOutcome: ...
|
|
883
892
|
|
|
884
893
|
@overload
|
|
885
894
|
def is_close_to(
|
|
@@ -915,9 +924,7 @@ if TYPE_CHECKING:
|
|
|
915
924
|
tolerance: SupportsFloat | SupportsIndex,
|
|
916
925
|
) -> AssertionOutcome: ...
|
|
917
926
|
@overload
|
|
918
|
-
def is_not_close_to(
|
|
919
|
-
self: _CheckAnyValue[_CapableT], other: _Number, tolerance: _Number
|
|
920
|
-
) -> AssertionOutcome: ...
|
|
927
|
+
def is_not_close_to(self: _CheckAnyValue[_Capable], other: _Number, tolerance: _Number) -> AssertionOutcome: ...
|
|
921
928
|
|
|
922
929
|
@overload
|
|
923
930
|
def is_even(self: _CheckAnyValue[int] | _CheckAnyValue[float]) -> AssertionOutcome: ...
|
|
@@ -981,7 +988,7 @@ if TYPE_CHECKING:
|
|
|
981
988
|
@overload
|
|
982
989
|
def matches_structure(self: _CheckAnyValue[_T], spec: dict[Any, Any]) -> AssertionOutcome: ...
|
|
983
990
|
@overload
|
|
984
|
-
def matches_structure(self: _CheckAnyValue[
|
|
991
|
+
def matches_structure(self: _CheckAnyValue[_Capable], spec: dict[Any, Any]) -> AssertionOutcome: ...
|
|
985
992
|
|
|
986
993
|
@overload
|
|
987
994
|
def has_json_path(
|
|
@@ -993,7 +1000,7 @@ if TYPE_CHECKING:
|
|
|
993
1000
|
path: str,
|
|
994
1001
|
) -> AssertionOutcome: ...
|
|
995
1002
|
@overload
|
|
996
|
-
def has_json_path(self: _CheckAnyValue[
|
|
1003
|
+
def has_json_path(self: _CheckAnyValue[_Capable], path: str) -> AssertionOutcome: ...
|
|
997
1004
|
|
|
998
1005
|
@overload
|
|
999
1006
|
def does_not_have_json_path(
|
|
@@ -1005,7 +1012,7 @@ if TYPE_CHECKING:
|
|
|
1005
1012
|
path: str,
|
|
1006
1013
|
) -> AssertionOutcome: ...
|
|
1007
1014
|
@overload
|
|
1008
|
-
def does_not_have_json_path(self: _CheckAnyValue[
|
|
1015
|
+
def does_not_have_json_path(self: _CheckAnyValue[_Capable], path: str) -> AssertionOutcome: ...
|
|
1009
1016
|
|
|
1010
1017
|
@overload
|
|
1011
1018
|
def matches_json_schema(
|
|
@@ -1017,7 +1024,7 @@ if TYPE_CHECKING:
|
|
|
1017
1024
|
schema: dict[str, Any],
|
|
1018
1025
|
) -> AssertionOutcome: ...
|
|
1019
1026
|
@overload
|
|
1020
|
-
def matches_json_schema(self: _CheckAnyValue[
|
|
1027
|
+
def matches_json_schema(self: _CheckAnyValue[_Capable], schema: dict[str, Any]) -> AssertionOutcome: ...
|
|
1021
1028
|
|
|
1022
1029
|
@overload
|
|
1023
1030
|
def matches_json_schema_from_file(
|
|
@@ -1029,7 +1036,7 @@ if TYPE_CHECKING:
|
|
|
1029
1036
|
path: str | Path,
|
|
1030
1037
|
) -> AssertionOutcome: ...
|
|
1031
1038
|
@overload
|
|
1032
|
-
def matches_json_schema_from_file(self: _CheckAnyValue[
|
|
1039
|
+
def matches_json_schema_from_file(self: _CheckAnyValue[_Capable], path: str | Path) -> AssertionOutcome: ...
|
|
1033
1040
|
|
|
1034
1041
|
@overload
|
|
1035
1042
|
def conforms_to_openapi(
|
|
@@ -1044,16 +1051,18 @@ if TYPE_CHECKING:
|
|
|
1044
1051
|
*,
|
|
1045
1052
|
status: str | int | None = ...,
|
|
1046
1053
|
content_type: str = ...,
|
|
1054
|
+
strict_nullable: bool = ...,
|
|
1047
1055
|
) -> AssertionOutcome: ...
|
|
1048
1056
|
@overload
|
|
1049
1057
|
def conforms_to_openapi(
|
|
1050
|
-
self: _CheckAnyValue[
|
|
1058
|
+
self: _CheckAnyValue[_Capable],
|
|
1051
1059
|
spec: dict[str, Any],
|
|
1052
1060
|
path: str,
|
|
1053
1061
|
method: str,
|
|
1054
1062
|
*,
|
|
1055
1063
|
status: str | int | None = ...,
|
|
1056
1064
|
content_type: str = ...,
|
|
1065
|
+
strict_nullable: bool = ...,
|
|
1057
1066
|
) -> AssertionOutcome: ...
|
|
1058
1067
|
|
|
1059
1068
|
def is_before(self: _CheckAnyValue[datetime.datetime], other: datetime.datetime) -> AssertionOutcome: ...
|
|
@@ -1127,14 +1136,14 @@ if TYPE_CHECKING:
|
|
|
1127
1136
|
@overload
|
|
1128
1137
|
def is_frame_equal(self: _CheckAnyValue[_FrameT_co], expected: object, **options: Any) -> AssertionOutcome: ...
|
|
1129
1138
|
@overload
|
|
1130
|
-
def is_frame_equal(self: _CheckAnyValue[
|
|
1139
|
+
def is_frame_equal(self: _CheckAnyValue[_Capable], expected: object, **options: Any) -> AssertionOutcome: ...
|
|
1131
1140
|
|
|
1132
1141
|
@overload
|
|
1133
1142
|
def is_array_equal(
|
|
1134
1143
|
self: _CheckAnyValue[_FrameT_co] | _CheckAnyValue[_ArrayT_co], expected: object, **options: Any
|
|
1135
1144
|
) -> AssertionOutcome: ...
|
|
1136
1145
|
@overload
|
|
1137
|
-
def is_array_equal(self: _CheckAnyValue[
|
|
1146
|
+
def is_array_equal(self: _CheckAnyValue[_Capable], expected: object, **options: Any) -> AssertionOutcome: ...
|
|
1138
1147
|
|
|
1139
1148
|
@overload
|
|
1140
1149
|
def is_array_close_to(
|
|
@@ -1148,7 +1157,7 @@ if TYPE_CHECKING:
|
|
|
1148
1157
|
) -> AssertionOutcome: ...
|
|
1149
1158
|
@overload
|
|
1150
1159
|
def is_array_close_to(
|
|
1151
|
-
self: _CheckAnyValue[
|
|
1160
|
+
self: _CheckAnyValue[_Capable],
|
|
1152
1161
|
expected: object,
|
|
1153
1162
|
*,
|
|
1154
1163
|
rtol: float = ...,
|
|
@@ -256,6 +256,7 @@ if TYPE_CHECKING:
|
|
|
256
256
|
*,
|
|
257
257
|
status: str | int | None = ...,
|
|
258
258
|
content_type: str = ...,
|
|
259
|
+
strict_nullable: bool = ...,
|
|
259
260
|
) -> Self: ...
|
|
260
261
|
def contains(self, *items: object) -> Self: ...
|
|
261
262
|
def contains_any_of(self, *items: str) -> Self: ...
|
|
@@ -507,6 +508,7 @@ if TYPE_CHECKING:
|
|
|
507
508
|
*,
|
|
508
509
|
status: str | int | None = ...,
|
|
509
510
|
content_type: str = ...,
|
|
511
|
+
strict_nullable: bool = ...,
|
|
510
512
|
) -> _CapableAssertion[_CapableT_co]: ...
|
|
511
513
|
def contains(self, *items: object) -> _CapableAssertion[_CapableT_co]: ...
|
|
512
514
|
def contains_any_of(self, *items: str) -> _CapableAssertion[_CapableT_co]: ...
|
|
@@ -32,6 +32,7 @@ if TYPE_CHECKING:
|
|
|
32
32
|
_ArrayT_co,
|
|
33
33
|
_CapableT,
|
|
34
34
|
_FrameT_co,
|
|
35
|
+
_Holding,
|
|
35
36
|
_Landed,
|
|
36
37
|
_ObjectAssertion,
|
|
37
38
|
_Other,
|
|
@@ -131,6 +132,7 @@ if TYPE_CHECKING:
|
|
|
131
132
|
*,
|
|
132
133
|
status: str | int | None = ...,
|
|
133
134
|
content_type: str = ...,
|
|
135
|
+
strict_nullable: bool = ...,
|
|
134
136
|
) -> AssertionOutcome: ...
|
|
135
137
|
@property
|
|
136
138
|
def not_(self) -> Self: ...
|
|
@@ -278,35 +280,35 @@ if TYPE_CHECKING:
|
|
|
278
280
|
tolerance: SupportsFloat | SupportsIndex,
|
|
279
281
|
) -> AssertionOutcome: ...
|
|
280
282
|
@overload
|
|
281
|
-
def is_not_none(self:
|
|
283
|
+
def is_not_none(self: _Holding[str | None]) -> AssertionOutcome: ...
|
|
282
284
|
@overload
|
|
283
|
-
def is_not_none(self:
|
|
285
|
+
def is_not_none(self: _Holding[bool | None]) -> AssertionOutcome: ...
|
|
284
286
|
@overload
|
|
285
|
-
def is_not_none(self:
|
|
287
|
+
def is_not_none(self: _Holding[int | None]) -> AssertionOutcome: ...
|
|
286
288
|
@overload
|
|
287
|
-
def is_not_none(self:
|
|
289
|
+
def is_not_none(self: _Holding[float | None]) -> AssertionOutcome: ...
|
|
288
290
|
@overload
|
|
289
|
-
def is_not_none(self:
|
|
291
|
+
def is_not_none(self: _Holding[complex | None]) -> AssertionOutcome: ...
|
|
290
292
|
@overload
|
|
291
|
-
def is_not_none(self:
|
|
293
|
+
def is_not_none(self: _Holding[dict[_K, _V] | None]) -> AssertionOutcome: ...
|
|
292
294
|
@overload
|
|
293
|
-
def is_not_none(self:
|
|
295
|
+
def is_not_none(self: _Holding[list[_E] | tuple[_E, ...] | None]) -> AssertionOutcome: ...
|
|
294
296
|
@overload
|
|
295
|
-
def is_not_none(self:
|
|
297
|
+
def is_not_none(self: _Holding[set[_E] | frozenset[_E] | None]) -> AssertionOutcome: ...
|
|
296
298
|
@overload
|
|
297
|
-
def is_not_none(self:
|
|
299
|
+
def is_not_none(self: _Holding[datetime.datetime | None]) -> AssertionOutcome: ...
|
|
298
300
|
@overload
|
|
299
|
-
def is_not_none(self:
|
|
301
|
+
def is_not_none(self: _Holding[datetime.date | None]) -> AssertionOutcome: ...
|
|
300
302
|
@overload
|
|
301
|
-
def is_not_none(self:
|
|
303
|
+
def is_not_none(self: _Holding[Path | None]) -> AssertionOutcome: ...
|
|
302
304
|
@overload
|
|
303
|
-
def is_not_none(self:
|
|
305
|
+
def is_not_none(self: _Holding[bytes | None]) -> AssertionOutcome: ...
|
|
304
306
|
@overload
|
|
305
|
-
def is_not_none(self:
|
|
307
|
+
def is_not_none(self: _Holding[bytearray | None]) -> AssertionOutcome: ...
|
|
306
308
|
@overload
|
|
307
|
-
def is_not_none(self:
|
|
309
|
+
def is_not_none(self: _Holding[Callable[..., object] | None]) -> AssertionOutcome: ...
|
|
308
310
|
@overload
|
|
309
|
-
def is_not_none(self:
|
|
311
|
+
def is_not_none(self: _Holding[_U | None]) -> AssertionOutcome: ...
|
|
310
312
|
@overload
|
|
311
313
|
def is_not_none(self) -> AssertionOutcome: ...
|
|
312
314
|
@overload
|