[SOLVED] Edt Package v2022 build 0.3.0 / Pronote v2022 build 0.3.0
Published: January 26, 2017 - 2:36 PM
Good morning,
Remember to replace the SERVERNAME, SERVERPORT and NOMETAB variables with your values
The new code automatically handles the possible presence of the previous version as well as the def update_package() function to simplify the update.
Using the same code, it is therefore possible to install the latest version side-by-side with the previous version seamlessly.
To uninstall the previous version, you must therefore use the uninstall function of the package of the previous version.
EDT 2022 v0.3.0 x64:
This information must be entered in the EDT control file:
Pronote 2022 v0.3.0 x64:
This information must be entered in the Pronote control file:
Changelog of 05/12/2022:
- Added an Audit function for edt and pronote to check the correct presence of the automatic update module and the binary used for the uninstall function which tends to disappear.
Changelog from 01/12/2022:
- Updated the edt download link in the update-package function.
Changelog of 22/08/2022:
- Fix in the update_package function of edt.
Changelog of 18/08/2022:
- Code update for Pronote 2022 with a fix for automatic update of answer files. Simply update the `edition` and `app_uninstallkey` variables to switch to version 2022
- Change the source URL in the control file to use the same one as edt, because the Pronote URL changes every summer between the pre-release and final versions, which isn't the case for edt. This should eliminate the need to switch between the two!
Changelog of 21/06/2022:
- Code updated for EDT 2022 with a fix for automatic update of answer files. Simply update the `edition` and `app_uninstallkey` variables to switch to version 2022
Changelog of 09/06/2022:
- Updated source URL in the control file of the pronote package.
Changelog of 08/06/2022:
- Correction of a non-blocking typo on the minimum version control at installation and update of the uninstallkey of the update agent.
Changelog of 02/06/2022:
- Updated the update package function following the release of version 0.2.10 (the function will now correctly support all versions regardless of the length of the version number)
Changelog of 22/03/2022:
- Update of the url_dl variable (tele7 replaced by tele3) following the change of download url.
Changelog of 11/02/2022:
- Modification of the def update_package() functions following a change in the source code of the web page.
Changelog of 21/01/2022:
- Python 3 compatibility
The new code automatically handles the possible presence of the previous version as well as the def update_package() function to simplify the update.
Using the same code, it is therefore possible to install the latest version side-by-side with the previous version seamlessly.
To uninstall the previous version, you must therefore use the uninstall function of the package of the previous version.
EDT 2022 v0.3.0 x64:
Code: Select all
# -*- coding: utf-8 -*-
from setuphelpers import *
import platform
uninstallkey = []
# Defining variables
bin_name_string = 'Install_EDTclient_FR_%s.%s_win64.exe'
app_uninstallkey = '{53EC7135-0E8C-419B-A1F3-5FAFB215686C}'
edition = 'v2022.0'
SERVERNAME = 'blabla.index-education.net' # Le nom DNS du serveur pronote
SERVERPORT = '49500' # Le port TCP du serveur pronote
NOMETAB = 'Mon ETAB' # Utilisé pour personnaliser le nom du raccourci sur le bureau
def install():
# Initializing variables
package_version = control.version.split('-',1)[0]
bin_name = bin_name_string % (edition[1:5],package_version)
edition_old = str(int(edition[1:5]) - 1)
# Installing the package
print('Installing: %s' % bin_name)
import tempfile
import codecs
pathinstallfile = makepath(tempfile.gettempdir(),'Setup.iss')
if installed_softwares ('INDEX EDUCATION - Client EDT %s - 64bit' % edition_old):
data = r"""[InstallShield Silent]
Version=v7.00
File=Response File
[File Transfer]
OverwrittenReadOnly=NoToAll
[%s-DlgOrder]
Dlg0=%s-SdLicense2Rtf-0
Count=6
Dlg1=%s-SdAskDestPath-0
Dlg2=%s-AskOptions-0
Dlg3=%s-AskOptions-1
Dlg4=%s-AskOptions-2
Dlg5=%s-SdFinish-0
[%s-SdLicense2Rtf-0]
Result=1
[%s-SdAskDestPath-0]
szDir=C:\Program Files\Index Education\EDT %s\Réseau\Client
Result=1
[%s-AskOptions-0]
Result=1
Sel-0=0
[%s-AskOptions-1]
Result=1
Sel-0=1
Sel-1=0
Sel-2=0
Sel-3=0
[%s-AskOptions-2]
Result=1
Sel-0=0
[%s-SdFinish-0]
Result=1
bOpt1=0
bOpt2=0
""" % (app_uninstallkey,app_uninstallkey,app_uninstallkey,app_uninstallkey,app_uninstallkey,app_uninstallkey,app_uninstallkey,app_uninstallkey,app_uninstallkey,edition[1:5],app_uninstallkey,app_uninstallkey,app_uninstallkey,app_uninstallkey)
else:
data = r"""[InstallShield Silent]
Version=v7.00
File=Response File
[File Transfer]
OverwrittenReadOnly=NoToAll
[%s-DlgOrder]
Dlg0=%s-SdLicense2Rtf-0
Count=5
Dlg1=%s-SdAskDestPath-0
Dlg2=%s-AskOptions-0
Dlg3=%s-AskOptions-1
Dlg4=%s-SdFinish-0
[%s-SdLicense2Rtf-0]
Result=1
[%s-SdAskDestPath-0]
szDir=C:\Program Files\Index Education\EDT %s\Réseau\Client
Result=1
[%s-AskOptions-0]
Result=1
Sel-0=1
Sel-1=0
Sel-2=0
Sel-3=0
[%s-AskOptions-1]
Result=1
Sel-0=0
[%s-SdFinish-0]
Result=1
bOpt1=0
bOpt2=0
""" % (app_uninstallkey,app_uninstallkey,app_uninstallkey,app_uninstallkey,app_uninstallkey,app_uninstallkey,app_uninstallkey,app_uninstallkey,edition[1:5],app_uninstallkey,app_uninstallkey,app_uninstallkey)
fichier = codecs.open(pathinstallfile, "w", encoding='mbcs')
fichier.write(data)
fichier.close()
install_exe_if_needed(bin_name,silentflags='-s -f1%s' % pathinstallfile,key=app_uninstallkey,min_version=package_version,killbefore='Client EDT.exe')
uninstallkey.remove(app_uninstallkey)
# Deleting response file
remove_file(pathinstallfile)
# Creating desktop shortcut for all users
create_desktop_shortcut(r'EDT%s - %s' % (edition[1:5],NOMETAB),target=u'C:\Program Files\Index Education\EDT %s\Réseau\Client\Client EDT.exe' % edition[1:5],arguments=r'-Adresse "%s" -PortTcp "%s"' % (SERVERNAME,SERVERPORT))
def audit():
if not uninstall_key_exists ('{775E087D-A428-428C-A5FD-000010008000}'):
print('Module de Mise à jour automatique manquant')
return "ERROR"
if not isfile(r'%s\InstallShield Installation Information\{53EC7135-0E8C-419B-A1F3-5FAFB215686C}\setup.exe' % programfiles32):
print('Binaire de désinstallation manquant')
return "WARNING"
else:
return "OK"
def update_package():
print('Downloading/Updating package content from upstream binary sources')
# Initializing variables
proxies = get_proxies()
if not proxies:
proxies = get_proxies_from_wapt_console()
app_name = control.name
url = control.sources
app_arch = control.architecture
if app_arch == 'x64':
dl_arch = 'win64'
else:
dl_arch = 'win32'
# Getting latest version from official website
page = wgets(control.sources,proxies=proxies)
for line in page.splitlines() :
if ('CLIENT EDT %s - 0.' % edition[1:5]) in line :
version = line.split('-')[+1].replace(" ","")
break
latest_bin = bin_name_string % (edition[1:5],version)
url_dl = 'https://tele7.index-education.com/telechargement/edt/%s/exe/Install_EDTclient_FR_%s.%s_%s.exe' % (edition,edition[1:5],version,dl_arch)
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,latest_bin,proxies=proxies)
# Checking version from file
version_from_file = get_version_from_binary(latest_bin)
if version != version_from_file:
os.rename(latest_bin,bin_name_string % (edition[1:5],version_from_file))
version = version_from_file
# Changing version of the package
control.version = '%s-%s'%(version,int(control.version.split('-')[-1])+1)
control.save_control_to_wapt()
print('Changing version to: %s in WAPT\\control' % control.version)
# 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_version_from_binary(filename):
if filename.endswith('.msi'):
return get_msi_properties(filename)['ProductVersion']
else:
return get_file_properties(filename)['ProductVersion']
def remove_outdated_binaries(version, list_extensions=['exe','msi','deb','rpm','dmg','pkg'], 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 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 uninstall():
# Uninstalling the package
print('Uninstalling: %s' % control.package)
import tempfile
pathuninstallfile = makepath(tempfile.gettempdir(),'Uninstall.iss')
data = r"""[InstallShield Silent]
Version=v7.00
File=Response File
[File Transfer]
OverwrittenReadOnly=NoToAll
[%s-DlgOrder]
Dlg0=%s-MessageBox-0
Count=2
Dlg1=%s-SdFinishReboot-0
[%s-MessageBox-0]
Result=6
[%s-SdFinishReboot-0]
Result=1
BootOption=0
""" % (app_uninstallkey,app_uninstallkey,app_uninstallkey,app_uninstallkey,app_uninstallkey)
fichier = open(pathuninstallfile, "w")
fichier.write(data)
fichier.close()
run(r'"%s\InstallShield Installation Information\%s\setup.exe" -s -uninst -f1%s' % (programfiles32,app_uninstallkey,pathuninstallfile))
# Deleting response file
remove_file(pathuninstallfile)
# Removing desktop shortcut for all users
remove_desktop_shortcut('EDT%s - %s.lnk' % (edition[1:5],NOMETAB))
# Uninstalling Auto Update Agent
if uninstall_key_exists('{775E087D-A428-428C-A5FD-000010008000}'):
run('"MsiExec.exe" /X{775E087D-A428-428C-A5FD-000010008000} /qn')
Code: Select all
architecture : x64
sources : https://www.index-education.com/fr/telecharger-edt.php
Code: Select all
# -*- coding: utf-8 -*-
from setuphelpers import *
import platform
uninstallkey = []
# Defining variables
bin_name_string = 'Install_PRNclient_FR_%s.%s_win64.exe'
app_uninstallkey = '{D1124ED8-514E-40BF-9021-D3B3CA941A53}'
edition = 'v2022.0'
SERVERNAME = 'blabla.index-education.net' # Le nom DNS du serveur pronote
SERVERPORT = '49500' # Le port TCP du serveur pronote
NOMETAB = 'Mon ETAB' # Utilisé pour personnaliser le nom du raccourci sur le bureau
def install():
# Initializing variables
package_version = control.version.split('-',1)[0]
bin_name = bin_name_string % (edition[1:5],package_version)
edition_old = str(int(edition[1:5]) - 1)
print('Installing: %s' % bin_name)
import tempfile
import codecs
pathinstallfile = makepath(tempfile.gettempdir(),'Setup.iss')
if installed_softwares ('INDEX EDUCATION - Client PRONOTE %s - 64bit' % edition_old):
data = r"""[InstallShield Silent]
Version=v7.00
File=Response File
[File Transfer]
OverwrittenReadOnly=NoToAll
[%s-DlgOrder]
Dlg0=%s-SdLicense2Rtf-0
Count=6
Dlg1=%s-SdAskDestPath-0
Dlg2=%s-AskOptions-0
Dlg3=%s-AskOptions-1
Dlg4=%s-AskOptions-2
Dlg5=%s-SdFinish-0
[%s-SdLicense2Rtf-0]
Result=1
[%s-SdAskDestPath-0]
szDir=C:\Program Files\Index Education\Pronote %s\Réseau\Client
Result=1
[%s-AskOptions-0]
Result=1
Sel-0=0
[%s-AskOptions-1]
Result=1
Sel-0=1
Sel-1=0
Sel-2=0
Sel-3=0
[%s-AskOptions-2]
Result=1
Sel-0=0
[%s-SdFinish-0]
Result=1
bOpt1=0
bOpt2=0
""" % (app_uninstallkey,app_uninstallkey,app_uninstallkey,app_uninstallkey,app_uninstallkey,app_uninstallkey,app_uninstallkey,app_uninstallkey,app_uninstallkey,edition[1:5],app_uninstallkey,app_uninstallkey,app_uninstallkey,app_uninstallkey)
else:
data = r"""[InstallShield Silent]
Version=v7.00
File=Response File
[File Transfer]
OverwrittenReadOnly=NoToAll
[%s-DlgOrder]
Dlg0=%s-SdLicense2Rtf-0
Count=5
Dlg1=%s-SdAskDestPath-0
Dlg2=%s-AskOptions-0
Dlg3=%s-AskOptions-1
Dlg4=%s-SdFinish-0
[%s-SdLicense2Rtf-0]
Result=1
[%s-SdAskDestPath-0]
szDir=C:\Program Files\Index Education\Pronote %s\Réseau\Client
Result=1
[%s-AskOptions-0]
Result=1
Sel-0=1
Sel-1=0
Sel-2=0
Sel-3=0
[%s-AskOptions-1]
Result=1
Sel-0=0
[%s-SdFinish-0]
Result=1
bOpt1=0
bOpt2=0
""" % (app_uninstallkey,app_uninstallkey,app_uninstallkey,app_uninstallkey,app_uninstallkey,app_uninstallkey,app_uninstallkey,app_uninstallkey,edition[1:5],app_uninstallkey,app_uninstallkey,app_uninstallkey)
fichier = codecs.open(pathinstallfile, "w", encoding='mbcs')
fichier.write(data)
fichier.close()
install_exe_if_needed(bin_name,silentflags='-s -f1%s' % pathinstallfile,key=app_uninstallkey,min_version=package_version,killbefore='Client PRONOTE.exe')
uninstallkey.remove(app_uninstallkey)
# Deleting response file
remove_file(pathinstallfile)
# Creating desktop shortcut for all users
create_desktop_shortcut(r'Pronote%s - %s' % (edition[1:5],NOMETAB),target=u'C:\Program Files\Index Education\Pronote %s\Réseau\Client\Client PRONOTE.exe' % edition[1:5],arguments=r'-Adresse "%s" -PortTcp "%s"' % (SERVERNAME,SERVERPORT))
def audit():
if not uninstall_key_exists ('{775E087D-A428-428C-A5FD-000010008000}'):
print('Module de Mise à jour automatique manquant')
return "ERROR"
if not isfile(r'%s\InstallShield Installation Information\{D1124ED8-514E-40BF-9021-D3B3CA941A53}\setup.exe' % programfiles32):
print('Binaire de désinstallation manquant')
return "WARNING"
else:
return "OK"
def update_package():
print('Downloading/Updating package content from upstream binary sources')
# Initializing variables
proxies = get_proxies()
if not proxies:
proxies = get_proxies_from_wapt_console()
app_name = control.name
url = control.sources
app_arch = control.architecture
if app_arch == 'x64':
dl_arch = 'win64'
else:
dl_arch = 'win32'
# Getting latest version from official website
page = wgets(control.sources,proxies=proxies)
for line in page.splitlines() :
if ('CLIENT EDT %s - 0.' % edition[1:5]) in line :
version = line.split('-')[+1].replace(" ","")
break
latest_bin = bin_name_string % (edition[1:5],version)
url_dl = 'https://tele7.index-education.com/telechargement/pn/%s/exe/Install_PRNclient_FR_%s.%s_%s.exe' % (edition,edition[1:5],version,dl_arch)
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,latest_bin,proxies=proxies)
# Checking version from file
version_from_file = get_version_from_binary(latest_bin)
if version != version_from_file:
os.rename(latest_bin,bin_name_string % (edition[1:5],version_from_file))
version = version_from_file
# Changing version of the package
control.version = '%s-%s'%(version,int(control.version.split('-')[-1])+1)
control.save_control_to_wapt()
print('Changing version to: %s in WAPT\\control' % control.version)
# 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_version_from_binary(filename):
if filename.endswith('.msi'):
return get_msi_properties(filename)['ProductVersion']
else:
return get_file_properties(filename)['ProductVersion']
def remove_outdated_binaries(version, list_extensions=['exe','msi','deb','rpm','dmg','pkg'], 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 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 uninstall():
print('uninstalling: %s' % control.package)
import tempfile
pathuninstallfile = makepath(tempfile.gettempdir(),'Uninstall.iss')
data = r"""[InstallShield Silent]
Version=v7.00
File=Response File
[File Transfer]
OverwrittenReadOnly=NoToAll
[%s-DlgOrder]
Dlg0=%s-MessageBox-0
Count=2
Dlg1=%s-SdFinishReboot-0
[%s-MessageBox-0]
Result=6
[%s-SdFinishReboot-0]
Result=1
BootOption=0
""" % (app_uninstallkey,app_uninstallkey,app_uninstallkey,app_uninstallkey,app_uninstallkey)
fichier = open(pathuninstallfile, "w")
fichier.write(data)
fichier.close()
run(r'"%s\InstallShield Installation Information\%s\setup.exe" -s -uninst -f1%s' % (programfiles32,app_uninstallkey,pathuninstallfile))
# Deleting response file
remove_file(pathuninstallfile)
# Removing desktop shortcut for all users
remove_desktop_shortcut('Pronote%s - %s.lnk' % (edition[1:5],NOMETAB))
# Uninstalling Auto Update Agent
if uninstall_key_exists('{775E087D-A428-428C-A5FD-000010008000}'):
run('"MsiExec.exe" /X{775E087D-A428-428C-A5FD-000010008000} /qn')
Code: Select all
architecture : x64
sources : https://www.index-education.com/fr/telecharger-edt.php
- Added an Audit function for edt and pronote to check the correct presence of the automatic update module and the binary used for the uninstall function which tends to disappear.
Changelog from 01/12/2022:
- Updated the edt download link in the update-package function.
Changelog of 22/08/2022:
- Fix in the update_package function of edt.
Changelog of 18/08/2022:
- Code update for Pronote 2022 with a fix for automatic update of answer files. Simply update the `edition` and `app_uninstallkey` variables to switch to version 2022
- Change the source URL in the control file to use the same one as edt, because the Pronote URL changes every summer between the pre-release and final versions, which isn't the case for edt. This should eliminate the need to switch between the two!
Changelog of 21/06/2022:
- Code updated for EDT 2022 with a fix for automatic update of answer files. Simply update the `edition` and `app_uninstallkey` variables to switch to version 2022
Changelog of 09/06/2022:
- Updated source URL in the control file of the pronote package.
Changelog of 08/06/2022:
- Correction of a non-blocking typo on the minimum version control at installation and update of the uninstallkey of the update agent.
Changelog of 02/06/2022:
- Updated the update package function following the release of version 0.2.10 (the function will now correctly support all versions regardless of the length of the version number)
Changelog of 22/03/2022:
- Update of the url_dl variable (tele7 replaced by tele3) following the change of download url.
Changelog of 11/02/2022:
- Modification of the def update_package() functions following a change in the source code of the web page.
Changelog of 21/01/2022:
- Python 3 compatibility