# -*- coding: utf-8 -*-
from setuphelpers import *
import platform
import bs4 as BeautifulSoup
r"""
Usable WAPT package functions: install(), uninstall(), session_setup(), audit(), update_package()
"""
# Declaring global variables - Warnings: 1) WAPT context is only available in package functions; 2) Global variables are not persistent between calls
bin_contains = "eclipse-jee-"
app_name = "Eclipse Java EE"
app_dir = makepath(programfiles32, "eclipse")
app_path = makepath(app_dir, "eclipse.exe")
def install():
# Declaring local variables
package_version = control.get_software_version()
bin_name = glob.glob("*%s*.zip" % bin_contains)[0]
# Getting installed software version
if isfile(app_path):
for entry in installed_softwares("Eclipse Java EE"):
installed_version = entry["version"]
else:
installed_version = None
# Installing software
print("Installing: %s" % app_name)
if installed_version is None or installed_version < package_version or force:
killalltasks(control.get_impacted_process_list())
if isdir(app_dir):
remove_tree(app_dir)
mkdirs(app_dir)
print("Extracting: %s to: %s" % (bin_name, app_dir))
unzip(bin_name, programfiles32)
# Creating shortcuts
create_desktop_shortcut(app_name, app_path)
create_programs_menu_shortcut(app_name, app_path)
# Adding software to "list-registry"
register_windows_uninstall(control, win64app=False)
else:
print("%s already installed. Skipping" % app_name)
def uninstall():
# Uninstalling software
killalltasks(control.get_impacted_process_list())
if isdir(app_dir):
remove_tree(app_dir)
unregister_uninstall(app_name)
# Removing shortcuts
remove_desktop_shortcut(app_name)
remove_programs_menu_shortcut(app_name)
def audit():
# Declaring local variables
package_version = control.get_software_version()
# Getting installed software version
if isfile(app_path):
for entry in installed_softwares("Eclipse Java EE"):
installed_version = entry["version"]
else:
installed_version = None
# Auditing software
print("Auditing: %s" % control.package)
if installed_version is None or installed_version < package_version:
print("%s version is incorrect (%s)" % (app_name, installed_version))
return "ERROR"
else:
print("%s is installed in correct version (%s)" % (app_name, installed_version))
return "OK"
def update_package():
# Initializing variables
proxies = get_proxies()
if not proxies:
proxies = get_proxies_from_wapt_console()
app_name = control.name
url = "https://www.eclipse.org/downloads/packages"
if control.architecture == "x64":
arch = "64bits"
else:
arch = "32bits"
# www.eclipse.org/downloads/download.php?file=/technology/epp/downloads/release/2021-03/R/eclipse-jee-2021-03-R-win32-x86_64.zip
# Getting latest version from official sources
print("URL used is: %s" % url)
for bs_search in bs_find_all(url, "a", "title", "Eclipse IDE for Enterprise Java and Web Developers", proxies=proxies):
if "eclipse-ide-enterprise" in bs_search["href"]:
url2 = "https://www.eclipse.org" + bs_search["href"]
print("URL used is: %s" % url)
break
version = url2.split("/")[-3]
url_dl = "https://eclipse.mirror.liteserver.nl/technology/epp/downloads/release/%s/R/eclipse-jee-%s-R-win32-x86_64.zip" % (version, version)
version = version.replace("-", ".")
latest_bin = url_dl.split("/")[-1]
print("Latest %s version is: %s" % (app_name, version))
print("Download url is: %s" % url_dl)
# Downloading latest binaries
if not isfile(latest_bin):
print("Downloading: %s" % latest_bin)
wget(url_dl, bin_contains + version + ".zip", proxies=proxies)
# Changing version of the package
if Version(version) > Version(control.get_software_version()):
print("Software version updated (from: %s to: %s)" % (control.get_software_version(), Version(version)))
result = True
else:
print("Software version up-to-date (%s)" % Version(version))
control.version = "%s-%s" % (Version(version), control.version.split("-", 1)[-1])
# control.set_software_version(version)
control.save_control_to_wapt()
# Deleting outdated binaries
remove_outdated_binaries(version)
def get_proxies():
if platform.python_version_tuple()[0] == "3":
from urllib.request import getproxies
else:
from urllib import getproxies
return getproxies()
def get_proxies_from_wapt_console():
proxies = {}
if platform.system() == "Windows":
waptconsole_ini_path = makepath(user_local_appdata(), "waptconsole", "waptconsole.ini")
else:
waptconsole_ini_path = makepath(user_home_directory(), ".config", "waptconsole", "waptconsole.ini")
if isfile(waptconsole_ini_path):
proxy_wapt = inifile_readstring(waptconsole_ini_path, "global", "http_proxy")
if proxy_wapt:
proxies = {"http": proxy_wapt, "https": proxy_wapt}
return proxies
def get_version_from_binary(filename, parameter="ProductVersion"):
if filename.endswith(".msi"):
return get_msi_properties(filename)[parameter]
else:
return get_file_properties(filename)[parameter]
def remove_outdated_binaries(version, list_extensions=["exe", "msi", "deb", "rpm", "dmg", "pkg", "zip"], list_filename_contain=None):
if type(list_extensions) != list:
list_extensions = [list_extensions]
if list_filename_contain:
if type(list_filename_contain) != list:
list_filename_contain = [list_filename_contain]
list_extensions = ["." + ext for ext in list_extensions if ext[0] != "."]
for file_ext in list_extensions:
for bin_in_dir in glob.glob("*%s" % file_ext):
if not version in bin_in_dir:
remove_file(bin_in_dir)
if list_filename_contain:
for filename_contain in list_filename_contain:
if not filename_contain in bin_in_dir:
remove_file(bin_in_dir)
def bs_find(url, element, attribute=None, value=None, user_agent=None, proxies=None, features="html.parser", **kwargs):
""" "You may need to use a user agent for some websites.
Example: user_agent='Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:78.0) Gecko/20100101 Firefox/78.0')
"""
import requests
if user_agent:
page = requests.get(url, proxies=proxies, headers={"User-Agent": "%s" % user_agent}, **kwargs).text
else:
page = requests.get(url, proxies=proxies, **kwargs).text
soup = BeautifulSoup.BeautifulSoup(page, features=features)
if value:
return soup.find(element, {attribute: value})
else:
return soup.find(element)
def bs_find_all(url, element, attribute=None, value=None, headers=None, proxies=None, features="html.parser", **kwargs):
""" "You may need to use a header for some websites. For example: headers={'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:78.0) Gecko/20100101 Firefox/78.0'}"""
import requests
page = requests.get(url, proxies=proxies, headers=headers, **kwargs).text
try:
import bs4 as BeautifulSoup
soup = BeautifulSoup.BeautifulSoup(page, features=features)
except:
import BeautifulSoup
soup = BeautifulSoup.BeautifulSoup(page)
if value:
return soup.findAll(element, {attribute: value})
else:
return soup.findAll(element)