Beispiel #1
0
def http_recorder(vcr_mode, cassette_dir):
    """Creates a VCR object in vcr_mode mode.

    Args:
        vcr_mode (string): the parameter for record_mode.
        cassette_dir (string): path to the cassettes.

    Returns:
        VCR: a VCR object.
    """
    my_vcr = VCR(cassette_library_dir=cassette_dir,
                 record_mode=vcr_mode,
                 match_on=[
                     'method', 'scheme', 'host', 'port', 'path',
                     'unordered_query'
                 ],
                 filter_headers=['x-qx-client-application', 'User-Agent'],
                 filter_query_parameters=[('access_token',
                                           'dummyapiusersloginWithTokenid01')],
                 filter_post_data_parameters=[('apiToken', 'apiToken_dummy')],
                 decode_compressed_response=True,
                 before_record_response=_purge_headers_cb([
                     'Date', ('Set-Cookie', 'dummy_cookie'),
                     'X-Global-Transaction-ID', 'Etag',
                     'Content-Security-Policy', 'X-Content-Security-Policy',
                     'X-Webkit-Csp', 'content-length'
                 ]))
    my_vcr.register_matcher('unordered_query', _unordered_query_matcher)
    my_vcr.register_persister(IdRemoverPersister)
    return my_vcr
Beispiel #2
0
def use_cassette(vcr_cassette_dir, record_mode, markers, config):
    """Create a VCR instance and return an appropriate context manager for the given cassette configuration."""
    merged_config = merge_kwargs(config, markers)
    path_transformer = get_path_transformer(merged_config)
    vcr = VCR(path_transformer=path_transformer,
              cassette_library_dir=vcr_cassette_dir,
              record_mode=record_mode)
    # flatten the paths
    extra_paths = chain(*(marker[0] for marker in markers))
    persister = CombinedPersister(extra_paths)
    vcr.register_persister(persister)
    return vcr.use_cassette(markers[0][0][0], **merged_config)
Beispiel #3
0
def use_cassette(
    default_cassette: str,
    vcr_cassette_dir: str,
    record_mode: str,
    markers: List[Mark],
    config: ConfigType,
    pytestconfig: Config,
) -> CassetteContextDecorator:
    """Create a VCR instance and return an appropriate context manager for the given cassette configuration."""
    merged_config = merge_kwargs(config, markers)
    if "record_mode" in merged_config:
        record_mode = merged_config["record_mode"]
    path_transformer = get_path_transformer(merged_config)
    if record_mode == "rewrite":
        path = path_transformer(
            os.path.join(vcr_cassette_dir, default_cassette))
        try:
            os.remove(path)
        except OSError:
            pass
        record_mode = "new_episodes"
    vcr = VCR(path_transformer=path_transformer,
              cassette_library_dir=vcr_cassette_dir,
              record_mode=record_mode)

    def extra_path_transformer(path: str) -> str:
        """Paths in extras can be handled as relative and as absolute.

        Relative paths will be checked in `vcr_cassette_dir`.
        """
        if not os.path.isabs(path):
            return os.path.join(vcr_cassette_dir, path)
        return path

    extra_paths = [
        extra_path_transformer(path) for marker in markers
        for path in marker.args
    ]
    persister = CombinedPersister(extra_paths)
    vcr.register_persister(persister)
    pytestconfig.hook.pytest_recording_configure(config=pytestconfig, vcr=vcr)
    return vcr.use_cassette(default_cassette, **merged_config)
Beispiel #4
0
        )

    @staticmethod
    def deserialize(cassette_string):
        return json.loads(cassette_string)


vcr = VCR(
    before_record_response=filter_access_token,
    cassette_library_dir="tests/integration/cassettes",
    match_on=["uri", "method"],
    path_transformer=VCR.ensure_suffix(".json"),
    serializer="custom_serializer",
)
vcr.register_serializer("custom_serializer", CustomSerializer)
vcr.register_persister(CustomPersister)


def after_init(func, *args):
    func(*args)


def add_init_hook(original_init):
    """Wrap an __init__ method to also call some hooks."""

    @wraps(original_init)
    def wrapper(self, *args, **kwargs):
        original_init(self, *args, **kwargs)
        after_init(init_hook, self)

    return wrapper
Beispiel #5
0
class CustomVCR(VCR):
    """Derived from VCR to make setting paths easier."""
    def use_cassette(self, path="", **kwargs):
        """Use a cassette."""
        path += ".json"
        return super().use_cassette(path, **kwargs)


VCR = CustomVCR(
    serializer="custom_serializer",
    cassette_library_dir="tests/integration/cassettes",
    match_on=["uri", "method"],
    before_record_response=filter_access_token,
)
VCR.register_serializer("custom_serializer", CustomSerializer)
VCR.register_persister(CustomPersister)


def after_init(func, *args):
    func(*args)


def add_init_hook(original_init):
    """Wrap an __init__ method to also call some hooks."""
    @wraps(original_init)
    def wrapper(self, *args, **kwargs):
        original_init(self, *args, **kwargs)
        after_init(init_hook, self)

    return wrapper