Merge pull request #5035 from blueyed/cache-glob
Support glob argument with ``--cache-show``
This commit is contained in:
		
						commit
						8ad99c5cab
					
				|  | @ -0,0 +1 @@ | |||
| The ``--cache-show`` option/action accepts an optional glob to show only matching cache entries. | ||||
|  | @ -247,7 +247,7 @@ See the :ref:`cache-api` for more details. | |||
| 
 | ||||
| 
 | ||||
| Inspecting Cache content | ||||
| ------------------------------- | ||||
| ------------------------ | ||||
| 
 | ||||
| You can always peek at the content of the cache using the | ||||
| ``--cache-show`` command line option: | ||||
|  | @ -260,7 +260,7 @@ You can always peek at the content of the cache using the | |||
|     cachedir: $PYTHON_PREFIX/.pytest_cache | ||||
|     rootdir: /home/sweet/project | ||||
|     cachedir: $PYTHON_PREFIX/.pytest_cache | ||||
|     ------------------------------- cache values ------------------------------- | ||||
|     --------------------------- cache values for '*' --------------------------- | ||||
|     cache/lastfailed contains: | ||||
|       {'test_50.py::test_num[17]': True, | ||||
|        'test_50.py::test_num[25]': True, | ||||
|  | @ -277,8 +277,25 @@ You can always peek at the content of the cache using the | |||
| 
 | ||||
|     ======================= no tests ran in 0.12 seconds ======================= | ||||
| 
 | ||||
| ``--cache-show`` takes an optional argument to specify a glob pattern for | ||||
| filtering: | ||||
| 
 | ||||
| .. code-block:: pytest | ||||
| 
 | ||||
|     $ pytest --cache-show example/* | ||||
|     =========================== test session starts ============================ | ||||
|     platform linux -- Python 3.x.y, pytest-4.x.y, py-1.x.y, pluggy-0.x.y | ||||
|     cachedir: $PYTHON_PREFIX/.pytest_cache | ||||
|     rootdir: $REGENDOC_TMPDIR, inifile: | ||||
|     cachedir: $PYTHON_PREFIX/.pytest_cache | ||||
|     ----------------------- cache values for 'example/*' ----------------------- | ||||
|     example/value contains: | ||||
|       42 | ||||
| 
 | ||||
|     ======================= no tests ran in 0.12 seconds ======================= | ||||
| 
 | ||||
| Clearing Cache content | ||||
| ------------------------------- | ||||
| ---------------------- | ||||
| 
 | ||||
| You can instruct pytest to clear all cache files and values | ||||
| by adding the ``--cache-clear`` option like this: | ||||
|  |  | |||
|  | @ -292,9 +292,13 @@ def pytest_addoption(parser): | |||
|     ) | ||||
|     group.addoption( | ||||
|         "--cache-show", | ||||
|         action="store_true", | ||||
|         action="append", | ||||
|         nargs="?", | ||||
|         dest="cacheshow", | ||||
|         help="show cache contents, don't perform collection or tests", | ||||
|         help=( | ||||
|             "show cache contents, don't perform collection or tests. " | ||||
|             "Optional argument: glob (default: '*')." | ||||
|         ), | ||||
|     ) | ||||
|     group.addoption( | ||||
|         "--cache-clear", | ||||
|  | @ -369,11 +373,16 @@ def cacheshow(config, session): | |||
|     if not config.cache._cachedir.is_dir(): | ||||
|         tw.line("cache is empty") | ||||
|         return 0 | ||||
| 
 | ||||
|     glob = config.option.cacheshow[0] | ||||
|     if glob is None: | ||||
|         glob = "*" | ||||
| 
 | ||||
|     dummy = object() | ||||
|     basedir = config.cache._cachedir | ||||
|     vdir = basedir / "v" | ||||
|     tw.sep("-", "cache values") | ||||
|     for valpath in sorted(x for x in vdir.rglob("*") if x.is_file()): | ||||
|     tw.sep("-", "cache values for %r" % glob) | ||||
|     for valpath in sorted(x for x in vdir.rglob(glob) if x.is_file()): | ||||
|         key = valpath.relative_to(vdir) | ||||
|         val = config.cache.get(key, dummy) | ||||
|         if val is dummy: | ||||
|  | @ -385,8 +394,8 @@ def cacheshow(config, session): | |||
| 
 | ||||
|     ddir = basedir / "d" | ||||
|     if ddir.is_dir(): | ||||
|         contents = sorted(ddir.rglob("*")) | ||||
|         tw.sep("-", "cache directories") | ||||
|         contents = sorted(ddir.rglob(glob)) | ||||
|         tw.sep("-", "cache directories for %r" % glob) | ||||
|         for p in contents: | ||||
|             # if p.check(dir=1): | ||||
|             #    print("%s/" % p.relto(basedir)) | ||||
|  |  | |||
|  | @ -196,6 +196,7 @@ def test_cache_show(testdir): | |||
|         """ | ||||
|         def pytest_configure(config): | ||||
|             config.cache.set("my/name", [1,2,3]) | ||||
|             config.cache.set("my/hello", "world") | ||||
|             config.cache.set("other/some", {1:2}) | ||||
|             dp = config.cache.makedir("mydb") | ||||
|             dp.ensure("hello") | ||||
|  | @ -204,20 +205,39 @@ def test_cache_show(testdir): | |||
|     ) | ||||
|     result = testdir.runpytest() | ||||
|     assert result.ret == 5  # no tests executed | ||||
| 
 | ||||
|     result = testdir.runpytest("--cache-show") | ||||
|     result.stdout.fnmatch_lines_random( | ||||
|     result.stdout.fnmatch_lines( | ||||
|         [ | ||||
|             "*cachedir:*", | ||||
|             "-*cache values*-", | ||||
|             "*my/name contains:", | ||||
|             "*- cache values for '[*]' -*", | ||||
|             "cache/nodeids contains:", | ||||
|             "my/name contains:", | ||||
|             "  [1, 2, 3]", | ||||
|             "*other/some contains*", | ||||
|             "  {*1*: 2}", | ||||
|             "-*cache directories*-", | ||||
|             "other/some contains:", | ||||
|             "  {*'1': 2}", | ||||
|             "*- cache directories for '[*]' -*", | ||||
|             "*mydb/hello*length 0*", | ||||
|             "*mydb/world*length 0*", | ||||
|         ] | ||||
|     ) | ||||
|     assert result.ret == 0 | ||||
| 
 | ||||
|     result = testdir.runpytest("--cache-show", "*/hello") | ||||
|     result.stdout.fnmatch_lines( | ||||
|         [ | ||||
|             "*cachedir:*", | ||||
|             "*- cache values for '[*]/hello' -*", | ||||
|             "my/hello contains:", | ||||
|             "  *'world'", | ||||
|             "*- cache directories for '[*]/hello' -*", | ||||
|             "d/mydb/hello*length 0*", | ||||
|         ] | ||||
|     ) | ||||
|     stdout = result.stdout.str() | ||||
|     assert "other/some" not in stdout | ||||
|     assert "d/mydb/world" not in stdout | ||||
|     assert result.ret == 0 | ||||
| 
 | ||||
| 
 | ||||
| class TestLastFailed(object): | ||||
|  |  | |||
		Loading…
	
		Reference in New Issue