def mediacache_redirect(request, blob_urn, mime_type, additional_args, resource): """Redirect to a mediacache resource This will issue a redirect to the mediacache url that serves this resource, given by DUCTUS_MEDIACACHE_URL. If DUCTUS_MEDIACACHE_URL is not defined, it will be assumed to be '/mediacache'. """ # as an additional layer of protection, make sure each mediacache module # view doesn't allow the insertion of rogue characters into additional_args if additional_args: if not _legal_additional_args_re.match(additional_args): raise Exception("illegal characters given in additional_args!") hash_type, digest = split_urn(blob_urn) pathname = "%s/%s%s.%s" % (hash_type, digest, _dotstr(additional_args), mime_to_ext[mime_type]) if request.is_secure() and getattr(settings, "DUCTUS_MEDIACACHE_URL_SECURE", None): mediacache_url = settings.DUCTUS_MEDIACACHE_URL_SECURE elif settings.DUCTUS_MEDIACACHE_URL: mediacache_url = settings.DUCTUS_MEDIACACHE_URL else: mediacache_url = '/mediacache' url = "%s/%s?%s" % (mediacache_url, pathname, resource.urn) return HttpResponseRedirect(url)
def __to_filename(urn, mime_type, additional_args): hash_type, digest = split_urn(urn) extension = mime_to_ext[mime_type] basename = "%s%s.%s" % (digest, _dotstr(additional_args), extension) # fixme: assert that there are no illegal characters in filename filename = os.path.join(settings.DUCTUS_MEDIACACHE_DIR, hash_type, digest[0:2], (digest[2:4] or digest[0:2]), basename) return filename
def resolve_relative_mediacache_url(resource, mime_type=None, additional_args=None, blob_urn=None): hash_type, digest = split_urn(blob_urn or resource.blob.href) ext = mime_to_ext[mime_type or resource.blob.mime_type] return "%s/%s%s.%s?%s" % (hash_type, digest, _dotstr(additional_args), ext, resource.urn)
def __storage_location(self, urn): hash_type, digest = split_urn(urn) return os.path.join(self.__storage_directory, hash_type, digest[0:2], (digest[2:4] or digest[0:2]), digest)