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