| Index: tools/pyutils/url_utils.py
|
| diff --git a/tools/pyutils/url_utils.py b/tools/pyutils/url_utils.py
|
| new file mode 100755
|
| index 0000000000000000000000000000000000000000..b107f560db781a31de6214b5a9210c0fb58a3ec7
|
| --- /dev/null
|
| +++ b/tools/pyutils/url_utils.py
|
| @@ -0,0 +1,63 @@
|
| +#!/usr/bin/python
|
| +
|
| +"""
|
| +Copyright 2014 Google Inc.
|
| +
|
| +Use of this source code is governed by a BSD-style license that can be
|
| +found in the LICENSE file.
|
| +
|
| +Utilities for working with URLs.
|
| +
|
| +TODO(epoger): move this into tools/utils for broader use?
|
| +"""
|
| +
|
| +# System-level imports
|
| +import contextlib
|
| +import os
|
| +import shutil
|
| +import urllib
|
| +import urlparse
|
| +
|
| +
|
| +def create_filepath_url(filepath):
|
| + """ Returns a file:/// URL pointing at the given filepath on local disk.
|
| +
|
| + Args:
|
| + filepath: string; path to a file on local disk (may be absolute or relative,
|
| + and the file does not need to exist)
|
| +
|
| + Returns:
|
| + A file:/// URL pointing at the file. Regardless of whether filepath was
|
| + specified as a relative or absolute path, the URL will contain an
|
| + absolute path to the file.
|
| +
|
| + Raises:
|
| + An Exception, if filepath is already a URL.
|
| + """
|
| + if urlparse.urlparse(filepath).scheme:
|
| + raise Exception('"%s" is already a URL' % filepath)
|
| + return urlparse.urljoin(
|
| + 'file:', urllib.pathname2url(os.path.abspath(filepath)))
|
| +
|
| +
|
| +def copy_contents(source_url, dest_path, create_subdirs_if_needed=False):
|
| + """ Copies the full contents of the URL 'source_url' into
|
| + filepath 'dest_path'.
|
| +
|
| + Args:
|
| + source_url: string; complete URL to read from
|
| + dest_path: string; complete filepath to write to (may be absolute or
|
| + relative)
|
| + create_subdirs_if_needed: boolean; whether to create subdirectories as
|
| + needed to create dest_path
|
| +
|
| + Raises:
|
| + Some subclass of Exception if unable to read source_url or write dest_path.
|
| + """
|
| + if create_subdirs_if_needed:
|
| + dest_dir = os.path.dirname(dest_path)
|
| + if not os.path.exists(dest_dir):
|
| + os.makedirs(dest_dir)
|
| + with contextlib.closing(urllib.urlopen(source_url)) as source_handle:
|
| + with open(dest_path, 'wb') as dest_handle:
|
| + shutil.copyfileobj(fsrc=source_handle, fdst=dest_handle)
|
|
|