from urlparse import urljoin

from flask import url_for


def get_blob_download_uri_getter(context, url_scheme_and_hostname):
  """
  Returns a function with context to later generate the uri for a download blob
  :param context: Flask RequestContext
  :param url_scheme_and_hostname: URLSchemeAndHostname class instance
  :return: function (repository_and_namespace, checksum) -> uri
  """
  def create_uri(repository_and_namespace, checksum):
    """
    Creates a uri for a download blob from a repository, namespace, and checksum from earlier context
    """
    with context:
      relative_layer_url = url_for('v2.download_blob', repository=repository_and_namespace,
                                   digest=checksum)
    return urljoin(url_scheme_and_hostname.get_url(), relative_layer_url)

  return create_uri