Skip to content
Snippets Groups Projects

Cache YAML payloads in tests

Merged Bastien Abadie requested to merge cache-yaml into master
1 file
+ 31
1
Compare changes
  • Side-by-side
  • Inline
+ 31
1
# -*- coding: utf-8 -*-
import hashlib
import json
import os
import sys
from pathlib import Path
import pytest
import yaml
from arkindex.mock import MockApiClient
from arkindex_worker.git import GitHelper, GitlabHelper
@@ -12,9 +14,37 @@ from arkindex_worker.worker import ElementsWorker
FIXTURES_DIR = Path(__file__).resolve().parent / "data"
__yaml_cache = {}
@pytest.fixture
def cache_yaml(monkeypatch):
"""
Cache all calls to yaml.safe_load in order to speedup
every test cases that load the OpenAPI schema
"""
# Keep a reference towards the original function
_original_yaml_load = yaml.safe_load
def _cached_yaml_load(yaml_payload):
# Create a unique cache key for direct YAML strings
# and file descriptors
if isinstance(yaml_payload, str):
key = hashlib.md5(yaml_payload.encode("utf-8")).hexdigest()
else:
key = yaml_payload.name
# Cache result
if key not in __yaml_cache:
__yaml_cache[key] = _original_yaml_load(yaml_payload)
return __yaml_cache[key]
monkeypatch.setattr(yaml, "safe_load", _cached_yaml_load)
@pytest.fixture(autouse=True)
def setup_api(responses, monkeypatch):
def setup_api(responses, monkeypatch, cache_yaml):
# Always use the environment variable first
schema_url = os.environ.get("ARKINDEX_API_SCHEMA_URL")
Loading