mirror of
https://github.com/thead-yocto-mirror/skia
synced 2026-07-07 00:25:06 +02:00
62 lines
1.8 KiB
Python
62 lines
1.8 KiB
Python
#!/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.
|
|
"""
|
|
|
|
# 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)
|