sarj-python-lint 1.28.5__tar.gz → 1.28.6__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.
- {sarj_python_lint-1.28.5 → sarj_python_lint-1.28.6}/PKG-INFO +1 -1
- {sarj_python_lint-1.28.5 → sarj_python_lint-1.28.6}/pyproject.toml +1 -1
- {sarj_python_lint-1.28.5 → sarj_python_lint-1.28.6}/src/sarj_python_lint/_file_context.py +11 -0
- {sarj_python_lint-1.28.5 → sarj_python_lint-1.28.6}/src/sarj_python_lint/rules/complex_postgres_query_requires_architecture_review.py +1 -13
- {sarj_python_lint-1.28.5 → sarj_python_lint-1.28.6}/src/sarj_python_lint/rules/no_analytical_aggregation_in_postgres_store.py +2 -15
- {sarj_python_lint-1.28.5 → sarj_python_lint-1.28.6}/src/sarj_python_lint/rules/no_offset_pagination.py +2 -14
- {sarj_python_lint-1.28.5 → sarj_python_lint-1.28.6}/.gitignore +0 -0
- {sarj_python_lint-1.28.5 → sarj_python_lint-1.28.6}/LICENSE +0 -0
- {sarj_python_lint-1.28.5 → sarj_python_lint-1.28.6}/README.md +0 -0
- {sarj_python_lint-1.28.5 → sarj_python_lint-1.28.6}/src/sarj_python_lint/__init__.py +0 -0
- {sarj_python_lint-1.28.5 → sarj_python_lint-1.28.6}/src/sarj_python_lint/__main__.py +0 -0
- {sarj_python_lint-1.28.5 → sarj_python_lint-1.28.6}/src/sarj_python_lint/_analysis_session.py +0 -0
- {sarj_python_lint-1.28.5 → sarj_python_lint-1.28.6}/src/sarj_python_lint/_filesystem.py +0 -0
- {sarj_python_lint-1.28.5 → sarj_python_lint-1.28.6}/src/sarj_python_lint/_python_target.py +0 -0
- {sarj_python_lint-1.28.5 → sarj_python_lint-1.28.6}/src/sarj_python_lint/_ratchet_cli.py +0 -0
- {sarj_python_lint-1.28.5 → sarj_python_lint-1.28.6}/src/sarj_python_lint/_secret_names.py +0 -0
- {sarj_python_lint-1.28.5 → sarj_python_lint-1.28.6}/src/sarj_python_lint/_source.py +0 -0
- {sarj_python_lint-1.28.5 → sarj_python_lint-1.28.6}/src/sarj_python_lint/_version.py +0 -0
- {sarj_python_lint-1.28.5 → sarj_python_lint-1.28.6}/src/sarj_python_lint/benchmark.py +0 -0
- {sarj_python_lint-1.28.5 → sarj_python_lint-1.28.6}/src/sarj_python_lint/interpreter_argv.py +0 -0
- {sarj_python_lint-1.28.5 → sarj_python_lint-1.28.6}/src/sarj_python_lint/json_boundary.py +0 -0
- {sarj_python_lint-1.28.5 → sarj_python_lint-1.28.6}/src/sarj_python_lint/py.typed +0 -0
- {sarj_python_lint-1.28.5 → sarj_python_lint-1.28.6}/src/sarj_python_lint/ratchet.py +0 -0
- {sarj_python_lint-1.28.5 → sarj_python_lint-1.28.6}/src/sarj_python_lint/rule_base.py +0 -0
- {sarj_python_lint-1.28.5 → sarj_python_lint-1.28.6}/src/sarj_python_lint/rules/__init__.py +0 -0
- {sarj_python_lint-1.28.5 → sarj_python_lint-1.28.6}/src/sarj_python_lint/rules/_annotation_semantics.py +0 -0
- {sarj_python_lint-1.28.5 → sarj_python_lint-1.28.6}/src/sarj_python_lint/rules/_ast_index.py +0 -0
- {sarj_python_lint-1.28.5 → sarj_python_lint-1.28.6}/src/sarj_python_lint/rules/_ast_position.py +0 -0
- {sarj_python_lint-1.28.5 → sarj_python_lint-1.28.6}/src/sarj_python_lint/rules/_closed_helpers.py +0 -0
- {sarj_python_lint-1.28.5 → sarj_python_lint-1.28.6}/src/sarj_python_lint/rules/_comments.py +0 -0
- {sarj_python_lint-1.28.5 → sarj_python_lint-1.28.6}/src/sarj_python_lint/rules/_contract_annotation.py +0 -0
- {sarj_python_lint-1.28.5 → sarj_python_lint-1.28.6}/src/sarj_python_lint/rules/_copy_on_write.py +0 -0
- {sarj_python_lint-1.28.5 → sarj_python_lint-1.28.6}/src/sarj_python_lint/rules/_dict_key_views.py +0 -0
- {sarj_python_lint-1.28.5 → sarj_python_lint-1.28.6}/src/sarj_python_lint/rules/_docstrings.py +0 -0
- {sarj_python_lint-1.28.5 → sarj_python_lint-1.28.6}/src/sarj_python_lint/rules/_fastapi.py +0 -0
- {sarj_python_lint-1.28.5 → sarj_python_lint-1.28.6}/src/sarj_python_lint/rules/_first_party.py +0 -0
- {sarj_python_lint-1.28.5 → sarj_python_lint-1.28.6}/src/sarj_python_lint/rules/_fixed_record.py +0 -0
- {sarj_python_lint-1.28.5 → sarj_python_lint-1.28.6}/src/sarj_python_lint/rules/_imports.py +0 -0
- {sarj_python_lint-1.28.5 → sarj_python_lint-1.28.6}/src/sarj_python_lint/rules/_local_source.py +0 -0
- {sarj_python_lint-1.28.5 → sarj_python_lint-1.28.6}/src/sarj_python_lint/rules/_logging.py +0 -0
- {sarj_python_lint-1.28.5 → sarj_python_lint-1.28.6}/src/sarj_python_lint/rules/_nominal_project.py +0 -0
- {sarj_python_lint-1.28.5 → sarj_python_lint-1.28.6}/src/sarj_python_lint/rules/_paths.py +0 -0
- {sarj_python_lint-1.28.5 → sarj_python_lint-1.28.6}/src/sarj_python_lint/rules/_project_index.py +0 -0
- {sarj_python_lint-1.28.5 → sarj_python_lint-1.28.6}/src/sarj_python_lint/rules/_prose_budget.py +0 -0
- {sarj_python_lint-1.28.5 → sarj_python_lint-1.28.6}/src/sarj_python_lint/rules/_pytest.py +0 -0
- {sarj_python_lint-1.28.5 → sarj_python_lint-1.28.6}/src/sarj_python_lint/rules/_registry.py +0 -0
- {sarj_python_lint-1.28.5 → sarj_python_lint-1.28.6}/src/sarj_python_lint/rules/_resource_provenance.py +0 -0
- {sarj_python_lint-1.28.5 → sarj_python_lint-1.28.6}/src/sarj_python_lint/rules/_set_fields.py +0 -0
- {sarj_python_lint-1.28.5 → sarj_python_lint-1.28.6}/src/sarj_python_lint/rules/_sql.py +0 -0
- {sarj_python_lint-1.28.5 → sarj_python_lint-1.28.6}/src/sarj_python_lint/rules/_suppression_comments.py +0 -0
- {sarj_python_lint-1.28.5 → sarj_python_lint-1.28.6}/src/sarj_python_lint/rules/_test_assertions.py +0 -0
- {sarj_python_lint-1.28.5 → sarj_python_lint-1.28.6}/src/sarj_python_lint/rules/_test_composition.py +0 -0
- {sarj_python_lint-1.28.5 → sarj_python_lint-1.28.6}/src/sarj_python_lint/rules/_test_provenance.py +0 -0
- {sarj_python_lint-1.28.5 → sarj_python_lint-1.28.6}/src/sarj_python_lint/rules/async_cleanup_registered_synchronously.py +0 -0
- {sarj_python_lint-1.28.5 → sarj_python_lint-1.28.6}/src/sarj_python_lint/rules/async_mock_call_without_await_assertion.py +0 -0
- {sarj_python_lint-1.28.5 → sarj_python_lint-1.28.6}/src/sarj_python_lint/rules/defect_xfail_requires_explicit_strict.py +0 -0
- {sarj_python_lint-1.28.5 → sarj_python_lint-1.28.6}/src/sarj_python_lint/rules/docstring_args_restate_signature.py +0 -0
- {sarj_python_lint-1.28.5 → sarj_python_lint-1.28.6}/src/sarj_python_lint/rules/docstring_returns_restate_signature.py +0 -0
- {sarj_python_lint-1.28.5 → sarj_python_lint-1.28.6}/src/sarj_python_lint/rules/duplicate_adjacent_exception_handler.py +0 -0
- {sarj_python_lint-1.28.5 → sarj_python_lint-1.28.6}/src/sarj_python_lint/rules/duplicate_closed_pure_helper.py +0 -0
- {sarj_python_lint-1.28.5 → sarj_python_lint-1.28.6}/src/sarj_python_lint/rules/excessive_commentary.py +0 -0
- {sarj_python_lint-1.28.5 → sarj_python_lint-1.28.6}/src/sarj_python_lint/rules/fakes_in_shared_location.py +0 -0
- {sarj_python_lint-1.28.5 → sarj_python_lint-1.28.6}/src/sarj_python_lint/rules/fastapi_class_router_contract.py +0 -0
- {sarj_python_lint-1.28.5 → sarj_python_lint-1.28.6}/src/sarj_python_lint/rules/fastapi_explicit_openapi_contract.py +0 -0
- {sarj_python_lint-1.28.5 → sarj_python_lint-1.28.6}/src/sarj_python_lint/rules/iac_source_coupled_test.py +0 -0
- {sarj_python_lint-1.28.5 → sarj_python_lint-1.28.6}/src/sarj_python_lint/rules/invalid_pydantic_field_default.py +0 -0
- {sarj_python_lint-1.28.5 → sarj_python_lint-1.28.6}/src/sarj_python_lint/rules/mock_without_spec.py +0 -0
- {sarj_python_lint-1.28.5 → sarj_python_lint-1.28.6}/src/sarj_python_lint/rules/named_record_at_boundaries.py +0 -0
- {sarj_python_lint-1.28.5 → sarj_python_lint-1.28.6}/src/sarj_python_lint/rules/negative_only_http_status_assertion.py +0 -0
- {sarj_python_lint-1.28.5 → sarj_python_lint-1.28.6}/src/sarj_python_lint/rules/no_any_mapping_types.py +0 -0
- {sarj_python_lint-1.28.5 → sarj_python_lint-1.28.6}/src/sarj_python_lint/rules/no_before_validator_input_mutation.py +0 -0
- {sarj_python_lint-1.28.5 → sarj_python_lint-1.28.6}/src/sarj_python_lint/rules/no_broad_keyword_capture.py +0 -0
- {sarj_python_lint-1.28.5 → sarj_python_lint-1.28.6}/src/sarj_python_lint/rules/no_comment_cruft.py +0 -0
- {sarj_python_lint-1.28.5 → sarj_python_lint-1.28.6}/src/sarj_python_lint/rules/no_conftest_test_module_import.py +0 -0
- {sarj_python_lint-1.28.5 → sarj_python_lint-1.28.6}/src/sarj_python_lint/rules/no_copied_inherited_docstring.py +0 -0
- {sarj_python_lint-1.28.5 → sarj_python_lint-1.28.6}/src/sarj_python_lint/rules/no_cors_wildcard_with_credentials.py +0 -0
- {sarj_python_lint-1.28.5 → sarj_python_lint-1.28.6}/src/sarj_python_lint/rules/no_database_programmability.py +0 -0
- {sarj_python_lint-1.28.5 → sarj_python_lint-1.28.6}/src/sarj_python_lint/rules/no_delete_statement.py +0 -0
- {sarj_python_lint-1.28.5 → sarj_python_lint-1.28.6}/src/sarj_python_lint/rules/no_dunder_all.py +0 -0
- {sarj_python_lint-1.28.5 → sarj_python_lint-1.28.6}/src/sarj_python_lint/rules/no_duplicate_dunder_all_entry.py +0 -0
- {sarj_python_lint-1.28.5 → sarj_python_lint-1.28.6}/src/sarj_python_lint/rules/no_excessive_cognitive_complexity.py +0 -0
- {sarj_python_lint-1.28.5 → sarj_python_lint-1.28.6}/src/sarj_python_lint/rules/no_fastapi_on_event.py +0 -0
- {sarj_python_lint-1.28.5 → sarj_python_lint-1.28.6}/src/sarj_python_lint/rules/no_file_level_escape_hatch_suppression.py +0 -0
- {sarj_python_lint-1.28.5 → sarj_python_lint-1.28.6}/src/sarj_python_lint/rules/no_first_party_private_import.py +0 -0
- {sarj_python_lint-1.28.5 → sarj_python_lint-1.28.6}/src/sarj_python_lint/rules/no_fixed_sleep_before_assert.py +0 -0
- {sarj_python_lint-1.28.5 → sarj_python_lint-1.28.6}/src/sarj_python_lint/rules/no_fixed_sleep_in_loop.py +0 -0
- {sarj_python_lint-1.28.5 → sarj_python_lint-1.28.6}/src/sarj_python_lint/rules/no_frozen_after_validator_field_write.py +0 -0
- {sarj_python_lint-1.28.5 → sarj_python_lint-1.28.6}/src/sarj_python_lint/rules/no_generic_single_export_module.py +0 -0
- {sarj_python_lint-1.28.5 → sarj_python_lint-1.28.6}/src/sarj_python_lint/rules/no_hidden_constructor_fallback.py +0 -0
- {sarj_python_lint-1.28.5 → sarj_python_lint-1.28.6}/src/sarj_python_lint/rules/no_injected_module_loader.py +0 -0
- {sarj_python_lint-1.28.5 → sarj_python_lint-1.28.6}/src/sarj_python_lint/rules/no_input_model_mutation.py +0 -0
- {sarj_python_lint-1.28.5 → sarj_python_lint-1.28.6}/src/sarj_python_lint/rules/no_interpreter_source_arguments.py +0 -0
- {sarj_python_lint-1.28.5 → sarj_python_lint-1.28.6}/src/sarj_python_lint/rules/no_invalid_argument_name_suppression.py +0 -0
- {sarj_python_lint-1.28.5 → sarj_python_lint-1.28.6}/src/sarj_python_lint/rules/no_mocked_pydantic_value_object.py +0 -0
- {sarj_python_lint-1.28.5 → sarj_python_lint-1.28.6}/src/sarj_python_lint/rules/no_nested_pydantic_field_validator.py +0 -0
- {sarj_python_lint-1.28.5 → sarj_python_lint-1.28.6}/src/sarj_python_lint/rules/no_nullable_dependency_fallback.py +0 -0
- {sarj_python_lint-1.28.5 → sarj_python_lint-1.28.6}/src/sarj_python_lint/rules/no_positional_psycopg_row_escape.py +0 -0
- {sarj_python_lint-1.28.5 → sarj_python_lint-1.28.6}/src/sarj_python_lint/rules/no_psycopg_execution_outside_injected_owner.py +0 -0
- {sarj_python_lint-1.28.5 → sarj_python_lint-1.28.6}/src/sarj_python_lint/rules/no_random_uuid_in_sql.py +0 -0
- {sarj_python_lint-1.28.5 → sarj_python_lint-1.28.6}/src/sarj_python_lint/rules/no_raw_connection_in_tests.py +0 -0
- {sarj_python_lint-1.28.5 → sarj_python_lint-1.28.6}/src/sarj_python_lint/rules/no_raw_source_text_test_oracle.py +0 -0
- {sarj_python_lint-1.28.5 → sarj_python_lint-1.28.6}/src/sarj_python_lint/rules/no_redundant_literal_description.py +0 -0
- {sarj_python_lint-1.28.5 → sarj_python_lint-1.28.6}/src/sarj_python_lint/rules/no_redundant_module_alias_exports.py +0 -0
- {sarj_python_lint-1.28.5 → sarj_python_lint-1.28.6}/src/sarj_python_lint/rules/no_repeated_string_literal.py +0 -0
- {sarj_python_lint-1.28.5 → sarj_python_lint-1.28.6}/src/sarj_python_lint/rules/no_repeated_test_body.py +0 -0
- {sarj_python_lint-1.28.5 → sarj_python_lint-1.28.6}/src/sarj_python_lint/rules/no_restated_comment.py +0 -0
- {sarj_python_lint-1.28.5 → sarj_python_lint-1.28.6}/src/sarj_python_lint/rules/no_secret_in_log.py +0 -0
- {sarj_python_lint-1.28.5 → sarj_python_lint-1.28.6}/src/sarj_python_lint/rules/no_select_star.py +0 -0
- {sarj_python_lint-1.28.5 → sarj_python_lint-1.28.6}/src/sarj_python_lint/rules/no_service_behavior_in_settings.py +0 -0
- {sarj_python_lint-1.28.5 → sarj_python_lint-1.28.6}/src/sarj_python_lint/rules/no_shallow_container_type_guard.py +0 -0
- {sarj_python_lint-1.28.5 → sarj_python_lint-1.28.6}/src/sarj_python_lint/rules/no_string_concat_in_loop.py +0 -0
- {sarj_python_lint-1.28.5 → sarj_python_lint-1.28.6}/src/sarj_python_lint/rules/no_swallowed_asyncio_cancellation.py +0 -0
- {sarj_python_lint-1.28.5 → sarj_python_lint-1.28.6}/src/sarj_python_lint/rules/no_tautological_expect.py +0 -0
- {sarj_python_lint-1.28.5 → sarj_python_lint-1.28.6}/src/sarj_python_lint/rules/no_test_method_grafting.py +0 -0
- {sarj_python_lint-1.28.5 → sarj_python_lint-1.28.6}/src/sarj_python_lint/rules/no_typed_doc_sections.py +0 -0
- {sarj_python_lint-1.28.5 → sarj_python_lint-1.28.6}/src/sarj_python_lint/rules/no_unique_violation_message_match.py +0 -0
- {sarj_python_lint-1.28.5 → sarj_python_lint-1.28.6}/src/sarj_python_lint/rules/no_unnecessary_docstring.py +0 -0
- {sarj_python_lint-1.28.5 → sarj_python_lint-1.28.6}/src/sarj_python_lint/rules/no_unused_copy_result.py +0 -0
- {sarj_python_lint-1.28.5 → sarj_python_lint-1.28.6}/src/sarj_python_lint/rules/no_unused_underscored_keyword_parameter.py +0 -0
- {sarj_python_lint-1.28.5 → sarj_python_lint-1.28.6}/src/sarj_python_lint/rules/no_unused_value_marker.py +0 -0
- {sarj_python_lint-1.28.5 → sarj_python_lint-1.28.6}/src/sarj_python_lint/rules/no_vague_suppression_description.py +0 -0
- {sarj_python_lint-1.28.5 → sarj_python_lint-1.28.6}/src/sarj_python_lint/rules/no_whole_request_response_payload_in_log.py +0 -0
- {sarj_python_lint-1.28.5 → sarj_python_lint-1.28.6}/src/sarj_python_lint/rules/opaque_parametrize_case_needs_id.py +0 -0
- {sarj_python_lint-1.28.5 → sarj_python_lint-1.28.6}/src/sarj_python_lint/rules/over_mocked_test.py +0 -0
- {sarj_python_lint-1.28.5 → sarj_python_lint-1.28.6}/src/sarj_python_lint/rules/phase_label_comment.py +0 -0
- {sarj_python_lint-1.28.5 → sarj_python_lint-1.28.6}/src/sarj_python_lint/rules/prefer_autospec_for_callable_mock.py +0 -0
- {sarj_python_lint-1.28.5 → sarj_python_lint-1.28.6}/src/sarj_python_lint/rules/prefer_class_row.py +0 -0
- {sarj_python_lint-1.28.5 → sarj_python_lint-1.28.6}/src/sarj_python_lint/rules/prefer_collection_comprehension.py +0 -0
- {sarj_python_lint-1.28.5 → sarj_python_lint-1.28.6}/src/sarj_python_lint/rules/prefer_constant_time_secret_compare.py +0 -0
- {sarj_python_lint-1.28.5 → sarj_python_lint-1.28.6}/src/sarj_python_lint/rules/prefer_fstring_over_concat.py +0 -0
- {sarj_python_lint-1.28.5 → sarj_python_lint-1.28.6}/src/sarj_python_lint/rules/prefer_immutable_module_constant.py +0 -0
- {sarj_python_lint-1.28.5 → sarj_python_lint-1.28.6}/src/sarj_python_lint/rules/prefer_injected_dependency_over_monkeypatch.py +0 -0
- {sarj_python_lint-1.28.5 → sarj_python_lint-1.28.6}/src/sarj_python_lint/rules/prefer_library_fake.py +0 -0
- {sarj_python_lint-1.28.5 → sarj_python_lint-1.28.6}/src/sarj_python_lint/rules/prefer_match_assert_never.py +0 -0
- {sarj_python_lint-1.28.5 → sarj_python_lint-1.28.6}/src/sarj_python_lint/rules/prefer_match_exception_dispatch.py +0 -0
- {sarj_python_lint-1.28.5 → sarj_python_lint-1.28.6}/src/sarj_python_lint/rules/prefer_match_type_dispatch.py +0 -0
- {sarj_python_lint-1.28.5 → sarj_python_lint-1.28.6}/src/sarj_python_lint/rules/prefer_match_value_dispatch.py +0 -0
- {sarj_python_lint-1.28.5 → sarj_python_lint-1.28.6}/src/sarj_python_lint/rules/prefer_module_level_constant.py +0 -0
- {sarj_python_lint-1.28.5 → sarj_python_lint-1.28.6}/src/sarj_python_lint/rules/prefer_monkeypatch_for_process_state_in_test.py +0 -0
- {sarj_python_lint-1.28.5 → sarj_python_lint-1.28.6}/src/sarj_python_lint/rules/prefer_monotonic_for_elapsed_time.py +0 -0
- {sarj_python_lint-1.28.5 → sarj_python_lint-1.28.6}/src/sarj_python_lint/rules/prefer_namedtuple_over_tuple_return.py +0 -0
- {sarj_python_lint-1.28.5 → sarj_python_lint-1.28.6}/src/sarj_python_lint/rules/prefer_native_string_check.py +0 -0
- {sarj_python_lint-1.28.5 → sarj_python_lint-1.28.6}/src/sarj_python_lint/rules/prefer_nominal_id_types.py +0 -0
- {sarj_python_lint-1.28.5 → sarj_python_lint-1.28.6}/src/sarj_python_lint/rules/prefer_non_nullable_collection.py +0 -0
- {sarj_python_lint-1.28.5 → sarj_python_lint-1.28.6}/src/sarj_python_lint/rules/prefer_or_pattern.py +0 -0
- {sarj_python_lint-1.28.5 → sarj_python_lint-1.28.6}/src/sarj_python_lint/rules/prefer_pydantic_json_value.py +0 -0
- {sarj_python_lint-1.28.5 → sarj_python_lint-1.28.6}/src/sarj_python_lint/rules/prefer_pytest_fixture_injection.py +0 -0
- {sarj_python_lint-1.28.5 → sarj_python_lint-1.28.6}/src/sarj_python_lint/rules/prefer_regex_fullmatch.py +0 -0
- {sarj_python_lint-1.28.5 → sarj_python_lint-1.28.6}/src/sarj_python_lint/rules/prefer_required_constructor_parameters.py +0 -0
- {sarj_python_lint-1.28.5 → sarj_python_lint-1.28.6}/src/sarj_python_lint/rules/prefer_self_documenting_constant.py +0 -0
- {sarj_python_lint-1.28.5 → sarj_python_lint-1.28.6}/src/sarj_python_lint/rules/prefer_self_type_annotation.py +0 -0
- {sarj_python_lint-1.28.5 → sarj_python_lint-1.28.6}/src/sarj_python_lint/rules/prefer_set_isdisjoint.py +0 -0
- {sarj_python_lint-1.28.5 → sarj_python_lint-1.28.6}/src/sarj_python_lint/rules/prefer_str_enum.py +0 -0
- {sarj_python_lint-1.28.5 → sarj_python_lint-1.28.6}/src/sarj_python_lint/rules/prefer_struct_over_namedtuple.py +0 -0
- {sarj_python_lint-1.28.5 → sarj_python_lint-1.28.6}/src/sarj_python_lint/rules/prefer_walrus_awaited_none_guard.py +0 -0
- {sarj_python_lint-1.28.5 → sarj_python_lint-1.28.6}/src/sarj_python_lint/rules/prefer_walrus_comprehension_filter.py +0 -0
- {sarj_python_lint-1.28.5 → sarj_python_lint-1.28.6}/src/sarj_python_lint/rules/prefer_walrus_regex_match.py +0 -0
- {sarj_python_lint-1.28.5 → sarj_python_lint-1.28.6}/src/sarj_python_lint/rules/prefer_walrus_stream_loop.py +0 -0
- {sarj_python_lint-1.28.5 → sarj_python_lint-1.28.6}/src/sarj_python_lint/rules/production_derived_test_cases.py +0 -0
- {sarj_python_lint-1.28.5 → sarj_python_lint-1.28.6}/src/sarj_python_lint/rules/pytest_fixture_returns_bare_tuple.py +0 -0
- {sarj_python_lint-1.28.5 → sarj_python_lint-1.28.6}/src/sarj_python_lint/rules/redundant_class_docstring.py +0 -0
- {sarj_python_lint-1.28.5 → sarj_python_lint-1.28.6}/src/sarj_python_lint/rules/redundant_docstring.py +0 -0
- {sarj_python_lint-1.28.5 → sarj_python_lint-1.28.6}/src/sarj_python_lint/rules/redundant_module_docstring.py +0 -0
- {sarj_python_lint-1.28.5 → sarj_python_lint-1.28.6}/src/sarj_python_lint/rules/redundant_test_constructor_forwarder.py +0 -0
- {sarj_python_lint-1.28.5 → sarj_python_lint-1.28.6}/src/sarj_python_lint/rules/repeated_kwarg_heavy_call_in_test.py +0 -0
- {sarj_python_lint-1.28.5 → sarj_python_lint-1.28.6}/src/sarj_python_lint/rules/repeated_static_call_cases.py +0 -0
- {sarj_python_lint-1.28.5 → sarj_python_lint-1.28.6}/src/sarj_python_lint/rules/repeated_test_composition.py +0 -0
- {sarj_python_lint-1.28.5 → sarj_python_lint-1.28.6}/src/sarj_python_lint/rules/repeated_unimplemented_test_contract.py +0 -0
- {sarj_python_lint-1.28.5 → sarj_python_lint-1.28.6}/src/sarj_python_lint/rules/require_explicit_contract_implementation.py +0 -0
- {sarj_python_lint-1.28.5 → sarj_python_lint-1.28.6}/src/sarj_python_lint/rules/require_explicit_psycopg_transaction.py +0 -0
- {sarj_python_lint-1.28.5 → sarj_python_lint-1.28.6}/src/sarj_python_lint/rules/require_explicit_service_contract.py +0 -0
- {sarj_python_lint-1.28.5 → sarj_python_lint-1.28.6}/src/sarj_python_lint/rules/require_injectable_retry_sleep.py +0 -0
- {sarj_python_lint-1.28.5 → sarj_python_lint-1.28.6}/src/sarj_python_lint/rules/require_keyword_only_swap_prone_params.py +0 -0
- {sarj_python_lint-1.28.5 → sarj_python_lint-1.28.6}/src/sarj_python_lint/rules/require_nodecode_for_splitting_settings_field.py +0 -0
- {sarj_python_lint-1.28.5 → sarj_python_lint-1.28.6}/src/sarj_python_lint/rules/require_port_for_service.py +0 -0
- {sarj_python_lint-1.28.5 → sarj_python_lint-1.28.6}/src/sarj_python_lint/rules/require_precise_factory_signature.py +0 -0
- {sarj_python_lint-1.28.5 → sarj_python_lint-1.28.6}/src/sarj_python_lint/rules/require_public_dependency_contract.py +0 -0
- {sarj_python_lint-1.28.5 → sarj_python_lint-1.28.6}/src/sarj_python_lint/rules/require_pydantic_for_external_json.py +0 -0
- {sarj_python_lint-1.28.5 → sarj_python_lint-1.28.6}/src/sarj_python_lint/rules/require_pydantic_for_structured_payload.py +0 -0
- {sarj_python_lint-1.28.5 → sarj_python_lint-1.28.6}/src/sarj_python_lint/rules/require_pydantic_ordinal_lower_bound.py +0 -0
- {sarj_python_lint-1.28.5 → sarj_python_lint-1.28.6}/src/sarj_python_lint/rules/restated_test_docstring.py +0 -0
- {sarj_python_lint-1.28.5 → sarj_python_lint-1.28.6}/src/sarj_python_lint/rules/shared_mutable_pydantic_factory.py +0 -0
- {sarj_python_lint-1.28.5 → sarj_python_lint-1.28.6}/src/sarj_python_lint/rules/stepdown.py +0 -0
- {sarj_python_lint-1.28.5 → sarj_python_lint-1.28.6}/src/sarj_python_lint/rules/store_get_delegates_to_bulk_read.py +0 -0
- {sarj_python_lint-1.28.5 → sarj_python_lint-1.28.6}/src/sarj_python_lint/rules/store_insert_requires_on_conflict.py +0 -0
- {sarj_python_lint-1.28.5 → sarj_python_lint-1.28.6}/src/sarj_python_lint/rules/subprocess_kill_without_reap.py +0 -0
- {sarj_python_lint-1.28.5 → sarj_python_lint-1.28.6}/src/sarj_python_lint/rules/timestamp_order_requires_tiebreaker.py +0 -0
- {sarj_python_lint-1.28.5 → sarj_python_lint-1.28.6}/src/sarj_python_lint/rules/trailing_value_narration.py +0 -0
- {sarj_python_lint-1.28.5 → sarj_python_lint-1.28.6}/src/sarj_python_lint/rules/typed_error_reasons.py +0 -0
- {sarj_python_lint-1.28.5 → sarj_python_lint-1.28.6}/src/sarj_python_lint/rules/uncontrolled_randomness_in_test.py +0 -0
- {sarj_python_lint-1.28.5 → sarj_python_lint-1.28.6}/src/sarj_python_lint/rules/unused_mock_setup.py +0 -0
- {sarj_python_lint-1.28.5 → sarj_python_lint-1.28.6}/src/sarj_python_lint/rules/unused_test_factory_option.py +0 -0
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.5
|
|
2
2
|
Name: sarj-python-lint
|
|
3
|
-
Version: 1.28.
|
|
3
|
+
Version: 1.28.6
|
|
4
4
|
Summary: Custom Python lint rules — AST-based, pre-commit-friendly, hypermodern defaults
|
|
5
5
|
Project-URL: Homepage, https://code-standards.sarj.ai/rules/python/
|
|
6
6
|
Project-URL: Documentation, https://code-standards.sarj.ai/rules/python/
|
|
@@ -67,6 +67,17 @@ class PythonFileContext:
|
|
|
67
67
|
|
|
68
68
|
return consumed_docstring_names(self._valid_tree(), node_index=self.node_index)
|
|
69
69
|
|
|
70
|
+
@cached_property
|
|
71
|
+
def docstring_node_ids(self) -> frozenset[int]:
|
|
72
|
+
result: set[int] = set()
|
|
73
|
+
for owner in self.nodes(ast.Module, ast.ClassDef, ast.FunctionDef, ast.AsyncFunctionDef):
|
|
74
|
+
if not owner.body or not isinstance(owner.body[0], ast.Expr):
|
|
75
|
+
continue
|
|
76
|
+
value = owner.body[0].value
|
|
77
|
+
if isinstance(value, ast.Constant) and isinstance(value.value, str):
|
|
78
|
+
result.add(id(value))
|
|
79
|
+
return frozenset(result)
|
|
80
|
+
|
|
70
81
|
@property
|
|
71
82
|
def parents(self) -> Mapping[ast.AST, ast.AST]:
|
|
72
83
|
return self.node_index.parents
|
|
@@ -71,18 +71,6 @@ class _ConstructorImport(NamedTuple):
|
|
|
71
71
|
name: str
|
|
72
72
|
|
|
73
73
|
|
|
74
|
-
def _docstring_node_ids(tree: ast.AST, *, node_index: NodeIndex | None = None) -> set[int]:
|
|
75
|
-
result: set[int] = set()
|
|
76
|
-
for owner in nodes(tree, ast.Module, ast.ClassDef, ast.FunctionDef, ast.AsyncFunctionDef, index=node_index):
|
|
77
|
-
body = owner.body
|
|
78
|
-
if not body or not isinstance(body[0], ast.Expr):
|
|
79
|
-
continue
|
|
80
|
-
value = body[0].value
|
|
81
|
-
if isinstance(value, ast.Constant) and isinstance(value.value, str):
|
|
82
|
-
result.add(id(value))
|
|
83
|
-
return result
|
|
84
|
-
|
|
85
|
-
|
|
86
74
|
def _is_query_context(node: ast.expr, parents: Mapping[ast.AST, ast.AST], roots: frozenset[int]) -> bool:
|
|
87
75
|
current: ast.AST = node
|
|
88
76
|
while True:
|
|
@@ -368,7 +356,7 @@ class ComplexPostgresQueryRequiresArchitectureReview(Rule):
|
|
|
368
356
|
if not _is_postgres_module(tree, node_index=context.node_index):
|
|
369
357
|
return []
|
|
370
358
|
|
|
371
|
-
docstrings =
|
|
359
|
+
docstrings = context.docstring_node_ids
|
|
372
360
|
parents = context.parents
|
|
373
361
|
query_roots = _query_roots(tree, parents, node_index=context.node_index)
|
|
374
362
|
diagnostics: list[Diagnostic] = []
|
|
@@ -16,7 +16,7 @@ from sarj_python_lint.rule_base import (
|
|
|
16
16
|
RuleExample,
|
|
17
17
|
Severity,
|
|
18
18
|
)
|
|
19
|
-
from sarj_python_lint.rules._ast_index import
|
|
19
|
+
from sarj_python_lint.rules._ast_index import walk
|
|
20
20
|
from sarj_python_lint.rules._sql import is_store_module, sql_string_value, strip_sql_noise
|
|
21
21
|
|
|
22
22
|
|
|
@@ -24,7 +24,6 @@ if TYPE_CHECKING:
|
|
|
24
24
|
from sqlglot import exp
|
|
25
25
|
|
|
26
26
|
from sarj_python_lint._file_context import PythonFileContext
|
|
27
|
-
from sarj_python_lint.rules._ast_index import NodeIndex
|
|
28
27
|
|
|
29
28
|
|
|
30
29
|
_QUERY_SHAPE = re.compile(r"\bSELECT\b[\s\S]*?\bFROM\b", re.IGNORECASE)
|
|
@@ -65,18 +64,6 @@ _STRONG_ANALYTICAL: tuple[tuple[str, re.Pattern[str]], ...] = (
|
|
|
65
64
|
)
|
|
66
65
|
|
|
67
66
|
|
|
68
|
-
def _docstring_node_ids(tree: ast.AST, *, node_index: NodeIndex | None = None) -> set[int]:
|
|
69
|
-
result: set[int] = set()
|
|
70
|
-
for owner in nodes(tree, ast.Module, ast.ClassDef, ast.FunctionDef, ast.AsyncFunctionDef, index=node_index):
|
|
71
|
-
body = owner.body
|
|
72
|
-
if not body or not isinstance(body[0], ast.Expr):
|
|
73
|
-
continue
|
|
74
|
-
value = body[0].value
|
|
75
|
-
if isinstance(value, ast.Constant) and isinstance(value.value, str):
|
|
76
|
-
result.add(id(value))
|
|
77
|
-
return result
|
|
78
|
-
|
|
79
|
-
|
|
80
67
|
def analytical_signal(sql: str) -> str | None:
|
|
81
68
|
if _LOCKING_READ.search(sql) is not None:
|
|
82
69
|
return None
|
|
@@ -217,7 +204,7 @@ class NoAnalyticalAggregationInPostgresStore(Rule):
|
|
|
217
204
|
if tree is None:
|
|
218
205
|
return []
|
|
219
206
|
|
|
220
|
-
docstrings =
|
|
207
|
+
docstrings = context.docstring_node_ids
|
|
221
208
|
diagnostics: list[Diagnostic] = []
|
|
222
209
|
consumed: set[int] = set()
|
|
223
210
|
for node in context.nodes(ast.Constant, ast.BinOp):
|
|
@@ -16,13 +16,12 @@ from sarj_python_lint.rule_base import (
|
|
|
16
16
|
RuleExample,
|
|
17
17
|
Severity,
|
|
18
18
|
)
|
|
19
|
-
from sarj_python_lint.rules._ast_index import
|
|
19
|
+
from sarj_python_lint.rules._ast_index import walk
|
|
20
20
|
from sarj_python_lint.rules._sql import is_store_module, sql_string_value, strip_sql_noise
|
|
21
21
|
|
|
22
22
|
|
|
23
23
|
if TYPE_CHECKING:
|
|
24
24
|
from sarj_python_lint._file_context import PythonFileContext
|
|
25
|
-
from sarj_python_lint.rules._ast_index import NodeIndex
|
|
26
25
|
|
|
27
26
|
|
|
28
27
|
_DYNAMIC_VALUE = r"(?:%s|%\(\w+\)s|\?\d*|:\w+|@\w+|\$\d+|:__sarj_dynamic__)"
|
|
@@ -107,7 +106,7 @@ class NoOffsetPagination(Rule):
|
|
|
107
106
|
|
|
108
107
|
diags: list[Diagnostic] = []
|
|
109
108
|
consumed: set[int] = set()
|
|
110
|
-
docstrings =
|
|
109
|
+
docstrings = context.docstring_node_ids
|
|
111
110
|
for node in context.nodes(ast.Constant, ast.BinOp, ast.JoinedStr):
|
|
112
111
|
if id(node) in consumed or id(node) in docstrings:
|
|
113
112
|
continue
|
|
@@ -151,17 +150,6 @@ def _sql_value(node: ast.expr) -> str | None:
|
|
|
151
150
|
return sql_string_value(node)
|
|
152
151
|
|
|
153
152
|
|
|
154
|
-
def _docstring_node_ids(tree: ast.Module, *, node_index: NodeIndex | None = None) -> set[int]:
|
|
155
|
-
result: set[int] = set()
|
|
156
|
-
for owner in nodes(tree, ast.Module, ast.ClassDef, ast.FunctionDef, ast.AsyncFunctionDef, index=node_index):
|
|
157
|
-
if not owner.body or not isinstance(owner.body[0], ast.Expr):
|
|
158
|
-
continue
|
|
159
|
-
value = owner.body[0].value
|
|
160
|
-
if isinstance(value, ast.Constant) and isinstance(value.value, str):
|
|
161
|
-
result.add(id(value))
|
|
162
|
-
return result
|
|
163
|
-
|
|
164
|
-
|
|
165
153
|
def _mask_dialect_noise(sql: str) -> str:
|
|
166
154
|
sql = _QUOTED_IDENTIFIER.sub(lambda match: " " * len(match.group(0)), sql)
|
|
167
155
|
return _MYSQL_COMMENT.sub(lambda match: " " * len(match.group(0)), sql)
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{sarj_python_lint-1.28.5 → sarj_python_lint-1.28.6}/src/sarj_python_lint/_analysis_session.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
|
{sarj_python_lint-1.28.5 → sarj_python_lint-1.28.6}/src/sarj_python_lint/interpreter_argv.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{sarj_python_lint-1.28.5 → sarj_python_lint-1.28.6}/src/sarj_python_lint/rules/_ast_index.py
RENAMED
|
File without changes
|
{sarj_python_lint-1.28.5 → sarj_python_lint-1.28.6}/src/sarj_python_lint/rules/_ast_position.py
RENAMED
|
File without changes
|
{sarj_python_lint-1.28.5 → sarj_python_lint-1.28.6}/src/sarj_python_lint/rules/_closed_helpers.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
{sarj_python_lint-1.28.5 → sarj_python_lint-1.28.6}/src/sarj_python_lint/rules/_copy_on_write.py
RENAMED
|
File without changes
|
{sarj_python_lint-1.28.5 → sarj_python_lint-1.28.6}/src/sarj_python_lint/rules/_dict_key_views.py
RENAMED
|
File without changes
|
{sarj_python_lint-1.28.5 → sarj_python_lint-1.28.6}/src/sarj_python_lint/rules/_docstrings.py
RENAMED
|
File without changes
|
|
File without changes
|
{sarj_python_lint-1.28.5 → sarj_python_lint-1.28.6}/src/sarj_python_lint/rules/_first_party.py
RENAMED
|
File without changes
|
{sarj_python_lint-1.28.5 → sarj_python_lint-1.28.6}/src/sarj_python_lint/rules/_fixed_record.py
RENAMED
|
File without changes
|
|
File without changes
|
{sarj_python_lint-1.28.5 → sarj_python_lint-1.28.6}/src/sarj_python_lint/rules/_local_source.py
RENAMED
|
File without changes
|
|
File without changes
|
{sarj_python_lint-1.28.5 → sarj_python_lint-1.28.6}/src/sarj_python_lint/rules/_nominal_project.py
RENAMED
|
File without changes
|
|
File without changes
|
{sarj_python_lint-1.28.5 → sarj_python_lint-1.28.6}/src/sarj_python_lint/rules/_project_index.py
RENAMED
|
File without changes
|
{sarj_python_lint-1.28.5 → sarj_python_lint-1.28.6}/src/sarj_python_lint/rules/_prose_budget.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{sarj_python_lint-1.28.5 → sarj_python_lint-1.28.6}/src/sarj_python_lint/rules/_set_fields.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
{sarj_python_lint-1.28.5 → sarj_python_lint-1.28.6}/src/sarj_python_lint/rules/_test_assertions.py
RENAMED
|
File without changes
|
{sarj_python_lint-1.28.5 → sarj_python_lint-1.28.6}/src/sarj_python_lint/rules/_test_composition.py
RENAMED
|
File without changes
|
{sarj_python_lint-1.28.5 → sarj_python_lint-1.28.6}/src/sarj_python_lint/rules/_test_provenance.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
|
{sarj_python_lint-1.28.5 → sarj_python_lint-1.28.6}/src/sarj_python_lint/rules/mock_without_spec.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{sarj_python_lint-1.28.5 → sarj_python_lint-1.28.6}/src/sarj_python_lint/rules/no_comment_cruft.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{sarj_python_lint-1.28.5 → sarj_python_lint-1.28.6}/src/sarj_python_lint/rules/no_dunder_all.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
|
|
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
|
{sarj_python_lint-1.28.5 → sarj_python_lint-1.28.6}/src/sarj_python_lint/rules/no_secret_in_log.py
RENAMED
|
File without changes
|
{sarj_python_lint-1.28.5 → sarj_python_lint-1.28.6}/src/sarj_python_lint/rules/no_select_star.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
|
|
File without changes
|
{sarj_python_lint-1.28.5 → sarj_python_lint-1.28.6}/src/sarj_python_lint/rules/over_mocked_test.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
{sarj_python_lint-1.28.5 → sarj_python_lint-1.28.6}/src/sarj_python_lint/rules/prefer_class_row.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
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{sarj_python_lint-1.28.5 → sarj_python_lint-1.28.6}/src/sarj_python_lint/rules/prefer_or_pattern.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
|
{sarj_python_lint-1.28.5 → sarj_python_lint-1.28.6}/src/sarj_python_lint/rules/prefer_str_enum.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
|
|
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
|
{sarj_python_lint-1.28.5 → sarj_python_lint-1.28.6}/src/sarj_python_lint/rules/unused_mock_setup.py
RENAMED
|
File without changes
|
|
File without changes
|