66 lines
2.4 KiB
Python
66 lines
2.4 KiB
Python
"""WordOps download core classes."""
|
|
import os
|
|
import requests
|
|
|
|
from wo.core.logging import Log
|
|
|
|
|
|
class WODownload():
|
|
"""Method to download using urllib"""
|
|
def __init__():
|
|
pass
|
|
|
|
def download(self, packages):
|
|
"""Download packages, packages must be list in format of
|
|
[url, path, package name]"""
|
|
for package in packages:
|
|
url = package[0]
|
|
filename = package[1]
|
|
pkg_name = package[2]
|
|
try:
|
|
directory = os.path.dirname(filename)
|
|
if not os.path.exists(directory):
|
|
os.makedirs(directory)
|
|
Log.wait(self, "Downloading {0:20}".format(pkg_name))
|
|
with open(filename, "wb") as out_file:
|
|
req = requests.get(url, timeout=(5, 30))
|
|
if req.encoding is None:
|
|
req.encoding = 'utf-8'
|
|
out_file.write(req.content)
|
|
Log.valide(self, "Downloading {0:20}".format(pkg_name))
|
|
except requests.RequestException as e:
|
|
Log.debug(self, f"[{type(e).__name__}] {str(e)}")
|
|
Log.error(self, "Unable to download file, {0}"
|
|
.format(filename), exit=False)
|
|
return False
|
|
return 0
|
|
|
|
def latest_release(self, repository, name=False):
|
|
"""Get the latest release number of a GitHub repository.\n
|
|
repository format should be: \"user/repo\""""
|
|
try:
|
|
req = requests.get(
|
|
'https://api.github.com/repos/{0}/releases/latest'
|
|
.format(repository),
|
|
timeout=(5, 30))
|
|
github_json = req.json()
|
|
except requests.RequestException as e:
|
|
Log.debug(self, str(e))
|
|
Log.error(self, "Unable to query GitHub API")
|
|
if name:
|
|
return github_json["name"]
|
|
else:
|
|
return github_json["tag_name"]
|
|
|
|
def pma_release(self):
|
|
"""Get the latest phpmyadmin release number from a json file"""
|
|
try:
|
|
req = requests.get(
|
|
'https://www.phpmyadmin.net/home_page/version.json',
|
|
timeout=(5, 30))
|
|
pma_json = req.json()
|
|
except requests.RequestException as e:
|
|
Log.debug(self, str(e))
|
|
Log.error(self, "Unable to query phpmyadmin API")
|
|
return pma_json["version"]
|