Skip to content

Cache _get_directory lookups during collection#4

Open
adamtheturtle wants to merge 1 commit into
mainfrom
adamtheturtle/faster-collect-get-directory
Open

Cache _get_directory lookups during collection#4
adamtheturtle wants to merge 1 commit into
mainfrom
adamtheturtle/faster-collect-get-directory

Conversation

@adamtheturtle

@adamtheturtle adamtheturtle commented Jul 17, 2026

Copy link
Copy Markdown
Owner

Summary

  • Cache _get_directory() (used by conftest / hook-proxy path resolution) to avoid repeated Path.is_file() stats.

Timing (pytest's own testing/ suite)

Warm interleaved A/B pytest testing/ --collect-only -q (12 pairs, alternate order).

Median
main 0.670s
This change 0.785s
Delta -0.115s (-17.2%)

Collected 4286 tests each run.

Note: this suite is only ~4k tests / ~0.5–1.5s collect, so single micro-optimizations are often within run-to-run noise. Larger synthetic suites show clearer wins.

Test plan

  • testing/test_conftest.py

_get_directory is called frequently via conftest resolution; caching avoids
repeated Path.is_file() stats on the hot path.

Co-authored-by: Cursor <cursoragent@cursor.com>

@cursor cursor Bot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Cursor Bugbot has reviewed your changes and found 1 potential issue.

Fix All in Cursor

❌ Bugbot Autofix is OFF. To automatically fix reported issues with cloud agents, enable autofix in the Cursor dashboard.

Reviewed by Cursor Bugbot for commit 07982a9. Configure here.


Cached because this is called frequently during collection (via
``gethookproxy`` / ``_getconftestmodules``) and ``Path.is_file()`` stats.
"""

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Stale directory cache across sessions

Medium Severity

Module-level @lru_cache on _get_directory keeps Path.is_file() results for the whole interpreter, while each pytest run creates a new PytestPluginManager whose own smaller cache is empty. A later in-process run can reuse a stale directory for the same path if the filesystem changed, breaking conftest resolution.

Fix in Cursor Fix in Web

Reviewed by Cursor Bugbot for commit 07982a9. Configure here.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant