def edit_hosts_depends(waptconfigfile, hosts_list, append_depends=[], remove_depends=[], append_conflicts=[], remove_conflicts=[], key_password=None, wapt_server_user=None, wapt_server_passwd=None): """Add or remove packages from host packages >>> edit_hosts_depends('c:/wapt/wapt-get.ini','htlaptop.tranquilit.local','toto','tis-7zip','admin','password') """ if not wapt_server_user: wapt_server_user = raw_input('WAPT Server user :'******'WAPT Server password :'******'ascii') wapt = common.Wapt(config_filename=waptconfigfile, disable_update_server_status=True) wapt.dbpath = r':memory:' wapt.use_hostpackages = True hosts_list = ensure_list(hosts_list) append_depends = ensure_list(append_depends) remove_depends = ensure_list(remove_depends) append_conflicts = ensure_list(append_conflicts) remove_conflicts = ensure_list(remove_conflicts) result = [] sources = [] build_res = [] try: for host in hosts_list: logger.debug(u'Edit host %s : +%s -%s' % (host, append_depends, remove_depends)) target_dir = tempfile.mkdtemp('wapt') edit_res = wapt.edit_host( host, use_local_sources=False, target_directory=target_dir, append_depends=append_depends, remove_depends=remove_depends, append_conflicts=append_conflicts, remove_conflicts=remove_conflicts, ) sources.append(edit_res) logger.debug(u'Build upload %s' % [r['source_dir'] for r in sources]) build_res = wapt.build_upload([r['source_dir'] for r in sources], private_key_passwd=key_password, wapt_server_user=wapt_server_user, wapt_server_passwd=wapt_server_passwd) finally: logger.debug('Cleanup') for s in sources: if os.path.isdir(s['source_dir']): shutil.rmtree(s['source_dir']) for s in build_res: if os.path.isfile(s['filename']): os.unlink(s['filename']) return build_res
def create_waptwua_package(waptconfigfile,wuagroup='default',wapt_server_user=None,wapt_server_passwd=None,key_password=None): """Create/update - upload a package to enable waptwua and set windows_updates_rules based on the content of database. """ wapt = common.Wapt(config_filename=waptconfigfile,disable_update_server_status=True) wapt.dbpath = r':memory:' wapt.use_hostpackages = False # be sure to be up to date wapt.update(register=False,filter_on_host_cap=False) packagename = '{}-waptwua-{}'.format(wapt.config.get('global','default_package_prefix'),wuagroup) """ packages = wapt.is_available(packagename) if not packages: # creates a new package based on waptwua template res = wapt.make_group_template(packagename,directoryname = mkdtemp('wapt'),section='waptwua') else: res = wapt.edit_package(packagename,target_directory = mkdtemp('wapt'),use_local_sources = False) """ group_entry = wapt.make_group_template(packagename,directoryname = mkdtemp('wapt'),section='waptwua') build_res = wapt.build_upload(group_entry.sourcespath, private_key_passwd = key_password, wapt_server_user=wapt_server_user, wapt_server_passwd=wapt_server_passwd, inc_package_release=True) group_entry.delete_localsources() packagefilename = group_entry.localpath if isfile(packagefilename): remove_file(packagefilename) return build_res
def create_waptwua_package(waptconfigfile, wuagroup='default', wapt_server_user=None, wapt_server_passwd=None, key_password=None): """Create/update - upload a package to enable waptwua and set windows_updates_rules based on the content of database. """ try: import waptconsole progress_hook = waptconsole.UpdateProgress private_key_password_callback = waptconsole.GetPrivateKeyPassword except ImportError as e: def print_progress(show=False, n=0, max=100, msg=''): if show: print('%s %s/%s\r' % (msg, n, max), end='') else: if not msg: msg = 'Done' print("%s%s" % (msg, ' ' * (80 - len(msg)))) progress_hook = print_progress private_key_password_callback = None wapt = common.Wapt(config_filename=waptconfigfile, disable_update_server_status=True) wapt.dbpath = r':memory:' wapt.use_hostpackages = False wapt.filter_on_host_cap = False # be sure to be up to date wapt.update(register=False) wapt.private_key_password_callback = private_key_password_callback packagename = '{}-waptwua-{}'.format( wapt.config.get('global', 'default_package_prefix'), wuagroup) """ packages = wapt.is_available(packagename) if not packages: # creates a new package based on waptwua template res = wapt.make_group_template(packagename,directoryname = mkdtemp('wapt'),section='waptwua') else: res = wapt.edit_package(packagename,target_directory = mkdtemp('wapt'),use_local_sources = False) """ group_entry = wapt.make_group_template(packagename, directoryname=mkdtemp('wapt'), section='waptwua') build_res = wapt.build_upload(group_entry.sourcespath, private_key_passwd=key_password, wapt_server_user=wapt_server_user, wapt_server_passwd=wapt_server_passwd, inc_package_release=True) group_entry.delete_localsources() packagefilename = group_entry.localpath if isfile(packagefilename): remove_file(packagefilename) return build_res
def build_waptupgrade_package(waptconfigfile, target_directory=None, wapt_server_user=None, wapt_server_passwd=None, key_password=None, sign_digests=None): if target_directory is None: target_directory = tempfile.gettempdir() if not wapt_server_user: wapt_server_user = raw_input('WAPT Server user :'******'WAPT Server password :'******'ascii') wapt = common.Wapt(config_filename=waptconfigfile, disable_update_server_status=True) wapt.dbpath = r':memory:' wapt.use_hostpackages = False if sign_digests is None: sign_digests = wapt.sign_digests if not wapt.personal_certificate_path or not os.path.isfile( wapt.personal_certificate_path): raise Exception( u'No personal certificate provided or not found (%s) for signing waptupgrade package' % wapt.personal_certificate_path) waptget = get_file_properties('wapt-get.exe') entry = PackageEntry(waptfile=makepath(wapt.wapt_base_dir, 'waptupgrade')) patchs_dir = makepath(entry.sourcespath, 'patchs') mkdirs(patchs_dir) filecopyto(makepath(wapt.wapt_base_dir, 'waptdeploy.exe'), makepath(patchs_dir, 'waptdeploy.exe')) entry.package = '%s-waptupgrade' % wapt.config.get( 'global', 'default_package_prefix') rev = entry.version.split('-')[1] entry.version = '%s-%s' % (waptget['FileVersion'], rev) entry.inc_build() entry.save_control_to_wapt() entry.build_package(target_directory=target_directory) certs = wapt.personal_certificate() key = wapt.private_key(private_key_password=key_password) if not certs[0].is_code_signing: raise Exception(u'%s is not a code signing certificate' % wapt.personal_certificate_path) entry.sign_package(private_key=key, certificate=certs, private_key_password=key_password, mds=ensure_list(sign_digests)) wapt.http_upload_package(entry.localpath, wapt_server_user=wapt_server_user, wapt_server_passwd=wapt_server_passwd) return entry.as_dict()
def get_packages_filenames(waptconfigfile, packages_names): """Returns list of package filenames (latest version) and md5 matching comma separated list of packages names and their dependencies helps to batch download a list of selected packages using tools like curl or wget Args: waptconfigfile (str): path to wapt ini file packages_names (list or csv str): list of package names >>> get_packages_filenames(r"c:\users\htouvet\AppData\Local\waptconsole\waptconsole.ini","tis-firefox-esr,tis-flash,tis-wapttest") [u'tis-firefox-esr_24.4.0-0_all.wapt', u'tis-flash_12.0.0.77-3_all.wapt', u'tis-wapttest.wapt', u'tis-wapttestsub_0.1.0-1_all.wapt', u'tis-7zip_9.2.0-15_all.wapt'] """ result = [] wapt = common.Wapt(config_filename=waptconfigfile, disable_update_server_status=True) wapt.dbpath = r':memory:' wapt.use_hostpackages = False # force to use alternate templates repo repo = wapt.config.get('global', 'templates_repo_url') wapt.repositories[ 0].repo_url = repo if repo else 'https://store.wapt.fr/wapt' if wapt.use_http_proxy_for_templates: wapt.repositories[0].proxies = { 'http': wapt.config.get('global', 'http_proxy'), 'https': wapt.config.get('global', 'http_proxy') } else: wapt.repositories[0].proxies = {'http': None, 'https': None} # be sure to be up to date wapt.update(register=False, filter_on_host_cap=False) packages_names = ensure_list(packages_names) for name in packages_names: entries = wapt.is_available(name) if entries: pe = entries[-1] result.append(( pe.filename, pe.md5sum, )) if pe.depends: for (fn, md5) in get_packages_filenames(waptconfigfile, pe.depends): if not fn in result: result.append(( fn, md5, )) return result
import common import waptpackage import waptdevutils import logging logger = logging.getLogger() logging.basicConfig(level=logging.WARNING) mywapt = common.Wapt( config_filename= r"C:\Users\%(user)s\AppData\Local\waptconsole\waptconsole.ini".decode( 'utf8'), disable_update_server_status=True) mywapt.dbpath = ':memory:' mywapt.use_hostpackages = False mywapt.search() mywapt.repositories[0] mywapt.repositories[0].repo_url mywapt.repositories[0].is_available()
def duplicate_from_external_repo(waptconfigfile, package_filename): r"""Duplicate a downloaded package to match prefix defined in waptconfigfile renames all dependencies returns source directory >>> from common import Wapt >>> wapt = Wapt(config_filename = r'C:\Users\htouvet\AppData\Local\waptconsole\waptconsole.ini') >>> sources = duplicate_from_external_repo(wapt.config_filename,r'C:\tranquilit\wapt\tests\packages\tis-wapttest.wapt') >>> res = wapt.build_upload(sources,wapt_server_user='******',wapt_server_passwd='password') >>> res[0]['package'].depends u'test-wapttestsub,test-7zip' """ wapt = common.Wapt(config_filename=waptconfigfile, disable_update_server_status=True) wapt.dbpath = r':memory:' wapt.use_hostpackages = False prefix = wapt.config.get('global', 'default_package_prefix', 'test') if not prefix: error( 'You must specify a default package prefix in WAPT Console preferences' ) def rename_package(oldname, prefix): sp = oldname.split('-', 1) if len(sp) == 2: return "%s-%s" % (prefix, sp[-1]) else: return oldname oldname = PackageEntry().load_control_from_wapt(package_filename).package newname = rename_package(oldname, prefix) res = wapt.duplicate_package(package_filename, newname, build=False, auto_inc_version=True) result = res['source_dir'] # renames dependencies package = res['package'] if package.depends: newdepends = [] depends = ensure_list(package.depends) for dependname in depends: newname = rename_package(dependname, prefix) newdepends.append(newname) package.depends = ','.join(newdepends) package.save_control_to_wapt(result) # renames conflicts if package.conflicts: newconflicts = [] conflicts = ensure_list(package.conflicts) for dependname in conflicts: newname = rename_package(dependname, prefix) newconflicts.append(newname) package.conflicts = ','.join(newconflicts) package.save_control_to_wapt(result) return result
def edit_hosts_depends(waptconfigfile,hosts_list, append_depends=[], remove_depends=[], append_conflicts=[], remove_conflicts=[], key_password=None, wapt_server_user=None,wapt_server_passwd=None, cabundle = None ): """Add or remove packages from host packages >>> edit_hosts_depends('c:/wapt/wapt-get.ini','htlaptop.tranquilit.local','toto','tis-7zip','admin','password') """ wapt = common.Wapt(config_filename=waptconfigfile,disable_update_server_status=True) wapt.dbpath = r':memory:' wapt.use_hostpackages = True hosts_list = ensure_list(hosts_list) append_depends = ensure_list(append_depends) remove_depends = ensure_list(remove_depends) append_conflicts = ensure_list(append_conflicts) remove_conflicts = ensure_list(remove_conflicts) result = [] package_files = [] build_res = [] sources = [] try: for host in hosts_list: logger.debug(u'Edit host %s : +%s -%s'%( host, append_depends, remove_depends)) target_dir = tempfile.mkdtemp('wapt') edit_res = wapt.edit_host(host, target_directory = target_dir, append_depends = append_depends, remove_depends = remove_depends, append_conflicts = append_conflicts, remove_conflicts = remove_conflicts, cabundle = cabundle, ) sources.append(edit_res) # build and sign res = wapt.build_package(edit_res['sourcespath'],inc_package_release = True) signature = wapt.sign_package(res,private_key_password=key_password) build_res.append(res) package_files.append(res) # upload all in one step... wapt.http_upload_package(package_files,wapt_server_user=wapt_server_user,wapt_server_passwd=wapt_server_passwd) finally: logger.debug('Cleanup') try: for s in sources: if os.path.isdir(s['sourcespath']): shutil.rmtree(s['sourcespath']) for s in build_res: if os.path.isfile(s): os.unlink(s) except WindowsError as e: logger.critical('Unable to remove temporary directory %s: %s'% (s,repr(e))) return build_res