Skip to content

decorators

dandy.cache.decorators

cache_decorator_function

Source code in dandy/cache/decorators.py
def cache_decorator_function(
        cache: BaseCache,
        func,
        *args,
        **kwargs,
):
    hash_key = generate_cache_key(
        func,
        *args,
        **kwargs
    )

    cached_value = cache.get(hash_key)

    if cached_value:
        if Recorder.is_recording:
            if isinstance(cached_value, BaseIntel):
                response = cached_value.model_dump_json(indent=4)
            else:
                response = str(cached_value)

            Recorder.add_event(
                Event(
                    id=generate_new_recorder_event_id(),
                    object_name='Cache',
                    callable_name='Response',
                    type=EventType.RESPONSE,
                    attributes=[
                        EventAttribute(
                            key='Cached Response',
                            value=response,
                        ),
                    ],
                )
            )

        return cached_value

    value = func(*args, **kwargs)

    cache.set(hash_key, value)

    return value