コード例 #1
0
ファイル: waptdevutils.py プロジェクト: QGuLL/WAPT
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
コード例 #2
0
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
コード例 #3
0
ファイル: waptdevutils.py プロジェクト: tranquilit/WAPT
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
コード例 #4
0
ファイル: waptdevutils.py プロジェクト: mayasd/WAPT
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()
コード例 #5
0
ファイル: waptdevutils.py プロジェクト: QGuLL/WAPT
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
コード例 #6
0
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()
コード例 #7
0
ファイル: waptdevutils.py プロジェクト: QGuLL/WAPT
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
コード例 #8
0
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