docs: def updateCache(self, service, url, new_data, new_data_dt):
          """
          :param new_data: a string representation of the data
          :param new_data_dt: a timezone aware datetime object giving
                  the timestamp of the new_data
          :raise MemcachedException: if update failed
          """
          key = self._get_key(service, url)
  
          # clear existing data
          try:
              value = self.client.get(key)
              if value:
                  data = pickle.loads(value, encoding="utf8")
                  if "time_stamp" in data:
                      cached_data_dt = parse(data["time_stamp"])
                      if new_data_dt > cached_data_dt:
                          self.client.delete(key)
                          # may raise MemcachedException
                          logger.info(
                              "IN cache (key: {}), older DELETE".format(key))
                      else:
                          logger.info(
                              "IN cache (key: {}), newer KEEP".format(key))
                          return
              else:
                  logger.info("NOT IN cache (key: {})".format(key))
  
          except MemcachedException as ex:
              logger.error(
                  "Clear existing data (key: {}) ==> {}".format(key, str(ex)))
              return
  
          # store new value in cache
          cdata, time_to_store = self._make_cache_data(
              service, url, new_data, {}, 200, new_data_dt)
  
          self.client.set(key, cdata, time=time_to_store)
          # may raise MemcachedException
          logger.info(
              "MemCached SET (key {}) for {:d} seconds".format(
                  key, time_to_store))