mirror of
https://github.com/pyscript/pyscript.git
synced 2025-12-22 11:45:28 -05:00
Make HTTP cache persisten across sessions (#936)
* use pytest-cache to cache HTTP requests, so that it survives across multiple runs * add an option to clear the HTTP cache * add some docs about pytest
This commit is contained in:
@@ -1,3 +1,4 @@
|
||||
import shutil
|
||||
import threading
|
||||
from http.server import HTTPServer as SuperHTTPServer
|
||||
from http.server import SimpleHTTPRequestHandler
|
||||
@@ -7,6 +8,44 @@ import pytest
|
||||
from .support import Logger
|
||||
|
||||
|
||||
def pytest_cmdline_main(config):
|
||||
"""
|
||||
If we pass --clear-http-cache, we don't enter the main pytest logic, but
|
||||
use our custom main instead
|
||||
"""
|
||||
|
||||
def mymain(config, session):
|
||||
print()
|
||||
print("-" * 20, "SmartRouter HTTP cache", "-" * 20)
|
||||
# unfortunately pytest-cache doesn't offer a public API to selectively
|
||||
# clear the cache, so we need to peek its internal. The good news is
|
||||
# that pytest-cache is very old, stable and robust, so it's likely
|
||||
# that this won't break anytime soon.
|
||||
cache = config.cache
|
||||
base = cache._cachedir.joinpath(cache._CACHE_PREFIX_VALUES, "pyscript")
|
||||
if not base.exists():
|
||||
print("No cache found, nothing to do")
|
||||
return 0
|
||||
#
|
||||
print("Requests found in the cache:")
|
||||
for f in base.rglob("*"):
|
||||
if f.is_file():
|
||||
# requests are saved in dirs named pyscript/http:/foo/bar, let's turn
|
||||
# them into a proper url
|
||||
url = str(f.relative_to(base))
|
||||
url = url.replace(":/", "://")
|
||||
print(" ", url)
|
||||
shutil.rmtree(base)
|
||||
print("Cache cleared")
|
||||
return 0
|
||||
|
||||
if config.option.clear_http_cache:
|
||||
from _pytest.main import wrap_session
|
||||
|
||||
return wrap_session(config, mymain)
|
||||
return None
|
||||
|
||||
|
||||
def pytest_configure(config):
|
||||
"""
|
||||
THIS IS A WORKAROUND FOR A pytest QUIRK!
|
||||
@@ -61,6 +100,11 @@ def pytest_addoption(parser):
|
||||
action="store_true",
|
||||
help="Automatically open a devtools panel. Implies --headed and --no-fake-server",
|
||||
)
|
||||
parser.addoption(
|
||||
"--clear-http-cache",
|
||||
action="store_true",
|
||||
help="Clear the cache of HTTP requests for SmartRouter",
|
||||
)
|
||||
|
||||
|
||||
@pytest.fixture(scope="session")
|
||||
|
||||
Reference in New Issue
Block a user