code: def create(options, timer=None, use_deque=True):
      
      if options is None:  # no options, don't create cache
          return None
  
      if not isinstance(options, (CheckOptions, QuotaOptions, ReportOptions)):
          _logger.error(u'make_cache(): bad options %s', options)
          raise ValueError(u'Invalid options')
  
      if (options.num_entries <= 0):
          _logger.debug(u"did not create cache, options was %s", options)
          return None
  
      _logger.debug(u"creating a cache from %s", options)
      if (options.flush_interval > ZERO_INTERVAL):
          # options always has a flush_interval, but may have an expiration
          # field. If the expiration is present, use that instead of the
          # flush_interval for the ttl
          ttl = getattr(options, u'expiration', options.flush_interval)
          cache_cls = DequeOutTTLCache if use_deque else cachetools.TTLCache
          return LockedObject(
              cache_cls(
                  options.num_entries,
                  ttl=ttl.total_seconds(),
                  timer=to_cache_timer(timer)
              ))
  
      cache_cls = DequeOutLRUCache if use_deque else cachetools.LRUCache
      return LockedObject(cache_cls(options.num_entries))
docs: Create a cache specified by ``options``
  
      ``options`` is an instance of either
      :class:`endpoints_management.control.caches.CheckOptions` or
      :class:`endpoints_management.control.caches.ReportOptions`
  
      The returned cache is wrapped in a :class:`LockedObject`, requiring it to
      be accessed in a with statement that gives synchronized access
  
      Example:
        >>> options = CheckOptions()
        >>> synced_cache = make_cache(options)
        >>> with synced_cache as cache:  #  acquire the lock
        ...    cache['a_key'] = 'a_value'
  
      Args:
        options (object): an instance of either of the options classes
  
      Returns:
        :class:`cachetools.Cache`: the cache implementation specified by options
          or None: if options is ``None`` or if options.num_entries < 0
  
      Raises:
         ValueError: if options is not a support type