xref: /aosp_15_r20/external/openscreen/tools/curlish.py (revision 3f982cf4871df8771c9d4abe6e9a6f8d829b2736)
1*3f982cf4SFabien Sanglard#!/usr/bin/env python3
2*3f982cf4SFabien Sanglard# Copyright 2020 The Chromium Authors. All rights reserved.
3*3f982cf4SFabien Sanglard# Use of this source code is governed by a BSD-style license that can be
4*3f982cf4SFabien Sanglard# found in the LICENSE file.
5*3f982cf4SFabien Sanglard"""
6*3f982cf4SFabien SanglardThis file contains curlish(), a CURL-ish method that downloads things without
7*3f982cf4SFabien Sanglardneeding CURL installed.
8*3f982cf4SFabien Sanglard"""
9*3f982cf4SFabien Sanglard
10*3f982cf4SFabien Sanglardimport os
11*3f982cf4SFabien Sanglard
12*3f982cf4SFabien Sanglardtry:
13*3f982cf4SFabien Sanglard    from urllib2 import HTTPError, URLError, urlopen
14*3f982cf4SFabien Sanglardexcept ImportError:  # For Py3 compatibility
15*3f982cf4SFabien Sanglard    from urllib.error import HTTPError, URLError
16*3f982cf4SFabien Sanglard    from urllib.request import urlopen
17*3f982cf4SFabien Sanglard
18*3f982cf4SFabien Sanglard
19*3f982cf4SFabien Sanglarddef curlish(download_url, output_path):
20*3f982cf4SFabien Sanglard    """Basically curl, but doesn't require the developer to have curl installed
21*3f982cf4SFabien Sanglard    locally. Returns True if succeeded at downloading file."""
22*3f982cf4SFabien Sanglard
23*3f982cf4SFabien Sanglard    if not output_path or not download_url:
24*3f982cf4SFabien Sanglard        print('need both output path and download URL to download, exiting.')
25*3f982cf4SFabien Sanglard        return False
26*3f982cf4SFabien Sanglard
27*3f982cf4SFabien Sanglard    print('downloading from "{}" to "{}"'.format(download_url, output_path))
28*3f982cf4SFabien Sanglard    script_contents = ''
29*3f982cf4SFabien Sanglard    try:
30*3f982cf4SFabien Sanglard        response = urlopen(download_url)
31*3f982cf4SFabien Sanglard        script_contents = response.read()
32*3f982cf4SFabien Sanglard    except HTTPError as e:
33*3f982cf4SFabien Sanglard        print(e.code)
34*3f982cf4SFabien Sanglard        print(e.read())
35*3f982cf4SFabien Sanglard        return False
36*3f982cf4SFabien Sanglard    except URLError as e:
37*3f982cf4SFabien Sanglard        print('Download failed. Reason: ', e.reason)
38*3f982cf4SFabien Sanglard        return False
39*3f982cf4SFabien Sanglard
40*3f982cf4SFabien Sanglard    directory = os.path.dirname(output_path)
41*3f982cf4SFabien Sanglard    if not os.path.exists(directory):
42*3f982cf4SFabien Sanglard        os.makedirs(directory)
43*3f982cf4SFabien Sanglard
44*3f982cf4SFabien Sanglard    script_file = open(output_path, 'w')
45*3f982cf4SFabien Sanglard    script_file.write(script_contents)
46*3f982cf4SFabien Sanglard    script_file.close()
47*3f982cf4SFabien Sanglard
48*3f982cf4SFabien Sanglard    return True
49