# Copyright The IETF Trust 2023, All Rights Reserved
# -*- coding: utf-8 -*-

from django.core.cache.backends.base import DEFAULT_TIMEOUT
from django.core.cache.backends.memcached import PyMemcacheCache
from pymemcache.exceptions import MemcacheServerError

from .log import log


class LenientMemcacheCache(PyMemcacheCache):
    """PyMemcacheCache backend that tolerates failed inserts due to object size"""
    def set(self, key, value, timeout=DEFAULT_TIMEOUT, version=None):
        try:
            super().set(key, value, timeout, version)
        except MemcacheServerError as err:
            if "object too large for cache" in str(err):
                log(f"Memcache failed to cache large object for {key}")
            else:
                raise