def _publish_one(self, charm_id, charm): if charm_id in self._charm_state_cache: return succeed(self._charm_state_cache[charm_id]) bundle = charm.as_bundle() charm_file = open(bundle.path, "rb") charm_store_path = under.quote( "%s:%s" % (charm_id, bundle.get_sha256())) def close_charm_file(passthrough): charm_file.close() return passthrough def get_charm_url(result): return self._storage.get_url(charm_store_path) d = self._storage.put(charm_store_path, charm_file) d.addBoth(close_charm_file) d.addCallback(get_charm_url) d.addCallback(self._cb_store_charm_state, charm_id, bundle) d.addErrback(self._eb_verify_duplicate, charm_id, bundle) return d
def _cache_key(charm_url): charm_url.assert_revision() return under.quote("%s.charm" % charm_url)