Chromium Code Reviews| Index: py/utils/url_utils.py |
| diff --git a/py/utils/url_utils.py b/py/utils/url_utils.py |
| new file mode 100755 |
| index 0000000000000000000000000000000000000000..235ab5b412fbcd3832928d81b8684b71dd32458a |
| --- /dev/null |
| +++ b/py/utils/url_utils.py |
| @@ -0,0 +1,61 @@ |
| +#!/usr/bin/python |
|
borenet
2014/07/10 19:42:32
Is this a pure copy/paste?
epoger
2014/07/10 19:44:03
Yes, both files were pure copy from https://skia.g
|
| + |
| +""" |
| +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. |
| +""" |
| + |
| +# 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. |
|
borenet
2014/07/10 19:42:32
Why? Is this ever better than just returning the p
epoger
2014/07/10 19:44:03
I dunno. Figure I should just leave this as-is fo
|
| + """ |
| + 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) |