Exemplo n.º 1
0
 def test_configparsers_equal(self, tidy_writer, stub_create):
     rf = YumRepoFile()
     other = RawConfigParser()
     for parser in [rf, other]:
         parser.add_section('test')
         parser.set('test', 'key', 'val')
     self.assertTrue(rf._configparsers_equal(other))
Exemplo n.º 2
0
        def __init__(self):

            # http://standards.freedesktop.org/basedir-spec/latest/ar01s03.html
            self.app_dir = join(getenv('XDG_DATA_HOME', expanduser('~/.local/share')), appname)
            if not isdir(self.app_dir):
                makedirs(self.app_dir)

            self.plugin_dir = join(self.app_dir, 'plugins')
            if not isdir(self.plugin_dir):
                mkdir(self.plugin_dir)

            self.home = expanduser('~')

            self.respath = dirname(__file__)

            self.filename = join(getenv('XDG_CONFIG_HOME', expanduser('~/.config')), appname, '%s.ini' % appname)
            if not isdir(dirname(self.filename)):
                makedirs(dirname(self.filename))

            self.config = RawConfigParser()
            try:
                self.config.readfp(codecs.open(self.filename, 'r', 'utf-8'))
            except:
                self.config.add_section('config')

            if not self.get('outdir') or not isdir(self.get('outdir')):
                self.set('outdir', expanduser('~'))
Exemplo n.º 3
0
def inifile_readstring(inifilename, section, key, default=None):
    """Read a string parameter from inifile"""
    inifile = RawConfigParser()
    inifile.read(inifilename)
    if inifile.has_section(section) and inifile.has_option(section, key):
        return inifile.get(section, key)
    else:
        return default
Exemplo n.º 4
0
 def test_configparsers_diff_items(self, tidy_writer, stub_create):
     rf = RepoFile()
     other = RawConfigParser()
     for parser in [rf, other]:
         parser.add_section('test')
         parser.set('test', 'key', 'val')
     rf.set('test', 'somekey', 'val')
     self.assertFalse(rf._configparsers_equal(other))
Exemplo n.º 5
0
def inifile_writestring(inifilename, section, key, value):
    """Write a string parameter to inifile"""
    inifile = RawConfigParser()
    inifile.read(inifilename)
    if not inifile.has_section(section):
        inifile.add_section(section)
    inifile.set(section, key, value)
    inifile.write(open(inifilename, 'w'))
Exemplo n.º 6
0
def get_packages_filenames(packages,
                           with_depends=True,
                           waptconfigfile=None,
                           repo_name='wapt-templates',
                           remoterepo=None):
    """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:
        packages (list): list of package entries as dicts or PackageEntry
        with_depends (bool): get recursively the all depends filenames
        waptconfigfile (str): path to wapt ini file
        repo_name : section name in wapt ini file for repo parameters (repo_url, http_proxy, timeout, verify_cert)
        remoterepo (WaptRemoteRepo) : remote repo to query.
                                      Mutually exclusive with waptconfigfile and repo_name
    Returns:
        list: list of (wapt file basename,md5)

    >>> 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 = []
    defaults = {
        'repo_url': 'https://store.wapt.fr/wapt',
        'http_proxy': '',
        'verify_cert': '0',
    }

    if remoterepo is None:
        config = RawConfigParser(defaults=defaults)
        config.read(waptconfigfile)

        remoterepo = WaptRemoteRepo(name=repo_name, config=config)
        remoterepo.update()

    for pe in packages:
        if not isinstance(pe, PackageEntry):
            pe = PackageEntry(**pe)

        result.append((
            pe.filename,
            pe.md5sum,
        ))
        if with_depends and pe.depends:
            depends_list = []
            for depname in ensure_list(pe.depends):
                pe_dep = remoterepo.packages_matching(depname)
                if pe_dep:
                    depends_list.append(pe_dep[-1])
            for (fn, md5) in get_packages_filenames(depends_list,
                                                    remoterepo=remoterepo):
                if not fn in result:
                    result.append((
                        fn,
                        md5,
                    ))
    return result
Exemplo n.º 7
0
def read_config(filename, providers):
    cp = RawConfigParser()
    cp.read(filename)

    while providers:
        providers.pop()

    for provider_name in cp.sections():
        provider = Provider(provider_name)
        provider.read_config(cp)
        providers.append(provider)
Exemplo n.º 8
0
def inifile_writestring(inifilename, section, key, value):
    r"""Write a string parameter to inifile

    >>> inifile_writestring('c:/tranquilit/wapt/tests/test.ini','global','version','1.1.1')
    >>> print inifile_readstring('c:/tranquilit/wapt/tests/test.ini','global','version')
    1.1.1
    """
    inifile = RawConfigParser()
    inifile.read(inifilename)
    if not inifile.has_section(section):
        inifile.add_section(section)
    inifile.set(section, key, value)
    inifile.write(open(inifilename, 'w'))
Exemplo n.º 9
0
def inifile_readstring(inifilename, section, key, default=None):
    """Read a string parameter from inifile

    >>> inifile_writestring('c:/tranquilit/wapt/tests/test.ini','global','version','1.1.2')
    >>> print inifile_readstring('c:/tranquilit/wapt/tests/test.ini','global','version')
    1.1.2
    >>> print inifile_readstring('c:/tranquilit/wapt/tests/test.ini','global','undefaut','defvalue')
    defvalue
    """

    inifile = RawConfigParser()
    inifile.read(inifilename)
    if inifile.has_section(section) and inifile.has_option(section, key):
        return inifile.get(section, key)
    else:
        return default
Exemplo n.º 10
0
def inifile_deletesection(inifilename, section):
    """Remove a section within the inifile

    Args:
        inifilename (str): Path to the ini file
        section (str): section to remove

    Returns:
        boolean : True if the section has been removed

    """
    inifile = RawConfigParser()
    inifile.read(inifilename)
    inifile.remove_section(section)
    inifile.write(open(inifilename, 'w'))
    return not inifile.has_section(section)
Exemplo n.º 11
0
def inifile_hassection(inifilename, section):
    """Check if an option is present in section of the inifile

    Args:
        inifilename (str): Path to the ini file
        section (str): section

    Returns:
        boolean : True if the key exists

    >>> inifile_writestring('c:/tranquilit/wapt/tests/test.ini','global','version','1.1.2')
    >>> print inifile_hassection('c:/tranquilit/wapt/tests/test.ini','global')
    True

    """
    inifile = RawConfigParser()
    inifile.read(inifilename)
    return inifile.has_section(section)
Exemplo n.º 12
0
def get_packages_filenames(waptconfigfile,packages_names,with_depends=True,verify_cert=None,repo_name='wapt-templates'):
    """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
        verify_cert (0/1,path to certificate or ca) : check https connection
        with_depends (bool): get recursively the all depends filenames
        repo_name : section name in wapt ini file for repo parameters (repo_url, http_proxy, timeout, verify_cert)

    Returns:
        list: list of (wapt file basename,md5)

    >>> 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 = []
    defaults = {
        'repo_url':'https://store.wapt.fr/wapt',
        'http_proxy':'',
        'verify_cert':'0',
        }

    config = RawConfigParser(defaults=defaults)
    config.read(waptconfigfile)

    templates = WaptRemoteRepo(name=repo_name,verify_cert=verify_cert,config=config)
    templates.update()

    packages_names = ensure_list(packages_names)
    for name in packages_names:
        entries = templates.packages_matching(name)
        if entries:
            pe = entries[-1]
            result.append((pe.filename,pe.md5sum,))
            if with_depends and pe.depends:
                for (fn,md5) in get_packages_filenames(waptconfigfile,pe.depends):
                    if not fn in result:
                        result.append((fn,md5,))
    return result
Exemplo n.º 13
0
def inifile_deleteoption(inifilename, section, key):
    """Remove a key within the section of the inifile

    Args:
        inifilename (str): Path to the ini file
        section (str): section
        key (str): value key of option to remove

    Returns:
        boolean : True if the key/option has been removed

    >>> inifile_writestring('c:/tranquilit/wapt/tests/test.ini','global','version','1.1.2')
    >>> print inifile_hasoption('c:/tranquilit/wapt/tests/test.ini','global','version')
    True
    >>> print inifile_deleteoption('c:/tranquilit/wapt/tests/test.ini','global','version')
    False

    """
    inifile = RawConfigParser()
    inifile.read(inifilename)
    inifile.remove_option(section, key)
    inifile.write(open(inifilename, 'w'))
    return inifile.has_section(section) and not inifile.has_option(
        section, key)
Exemplo n.º 14
0
def main():
    if len(args) == 0:
        print "ERROR : You must provide one action to perform"
        parser.print_usage()
        sys.exit(2)

    action = args[0]

    # Config file
    if not os.path.isfile(config_file):
        logger.error("Error : could not find file : " + config_file +
                     ", please check the path")

    logger.debug('Config file: %s' % config_file)

    defaults = {
        'repositories': '',
        'repo_url': '',
        'default_source_url': '',
        'private_key': '',
        'public_cert': '',
        'default_development_base': 'c:\tranquilit',
        'default_package_prefix': 'tis',
        'default_sources_suffix': 'wapt',
        'default_sources_url': '',
        'upload_cmd': '',
        'wapt_server': '',
        'loglevel': 'info',
    }

    cp = RawConfigParser(defaults=defaults)
    cp.add_section('global')
    cp.read(config_file)

    global loglevel
    if not loglevel and cp.has_option('global', 'loglevel'):
        loglevel = cp.get('global', 'loglevel')
        setloglevel(loglevel)

    mywapt = Wapt(config=cp)
    if options.wapt_url:
        mywapt.wapt_repourl = options.wapt_url

    if options.private_key:
        mywapt.private_key = options.private_key
    else:
        mywapt.private_key = cp.get('global', 'private_key')

    mywapt.dry_run = options.dry_run
    #logger.info("Main wapt Repository %s" % mywapt.wapt_repourl)
    logger.debug('WAPT base directory : %s' % mywapt.wapt_base_dir)
    logger.debug('Package cache dir : %s' % mywapt.packagecachedir)
    logger.debug('WAPT DB Structure version;: %s' % mywapt.waptdb.db_version)

    try:
        params_dict = {}
        try:
            params_dict = json.loads(options.params.replace("'", '"'))
        except:
            raise Exception('Install Parameters must be in json format')

        if action == 'install' or action == 'download':
            if len(args) < 2:
                print "You must provide at least one package name"
                sys.exit(1)

            if os.path.isdir(args[1]) or os.path.isfile(args[1]):
                print "installing WAPT file %s" % args[1]
                if action == 'install':
                    mywapt.install_wapt(args[1], params_dict=params_dict)
            else:
                print "%sing WAPT packages %s" % (action, ','.join(args[1:]))
                if options.update_packages:
                    print "Update package list"
                    mywapt.update()

                result = mywapt.install(
                    args[1:],
                    force=options.force,
                    params_dict=params_dict,
                    download_only=(action == 'download'),
                )
                print "\nResults :"
                if action <> 'download':
                    for k in ('install', 'additional', 'upgrade', 'skipped',
                              'errors'):
                        if result.get(k, []):
                            print "\n=== %s packages ===\n%s" % (
                                k,
                                '\n'.join([
                                    "  %-30s | %s (%s)" %
                                    (s[0], s[1].package, s[1].version)
                                    for s in result[k]
                                ]),
                            )
                else:
                    for k in ('downloaded', 'skipped', 'errors'):
                        if result.get('downloads', {
                                'downloaded': [],
                                'skipped': [],
                                'errors': []
                        })[k]:
                            print "\n=== %s packages ===\n%s" % (
                                k,
                                '\n'.join([
                                    "  %s" % (s, )
                                    for s in result['downloads'][k]
                                ]),
                            )

        elif action == 'download':
            if len(args) < 2:
                print "You must provide at least one package name to download"
                sys.exit(1)
            if options.update_packages:
                print "Update package list"
                mywapt.update()
            print "Downloading packages %s" % (','.join(args[1:]), )
            result = mywapt.download_packages(args[1:],
                                              usecache=not options.force)
            if result['downloaded']:
                print "\nDownloaded packages : \n%s" % "\n".join(
                    ["  %s" % p for p in result['downloaded']])
            if result['skipped']:
                print "Skipped packages : \n%s" % "\n".join(
                    ["  %s" % p for p in result['skipped']])
            if result['errors']:
                logger.critical('Unable to download some files : %s' %
                                (result['errors'], ))
                sys.exit(1)

        elif action == 'show':
            if len(args) < 2:
                print "You must provide at least one package name to show"
                sys.exit(1)
            if os.path.isdir(args[1]) or os.path.isfile(args[1]):
                entry = PackageEntry().load_control_from_wapt(args[1])
                print "%s" % entry
            else:
                print "Display package control data for %s\n" % (','.join(
                    args[1:]), )
                if options.update_packages:
                    print "Update package list"
                    mywapt.update()
                for packagename in args[1:]:
                    entries = mywapt.waptdb.packages_matching(packagename)
                    if entries:
                        for e in entries:
                            print "%s\n" % e.ascontrol(
                                with_non_control_attributes=True)
                    else:
                        print "None packages found matching package name and version"
        elif action == 'show-params':
            if len(args) < 2:
                print "You must provide at one package name to show params for"
                sys.exit(1)
            for packagename in args[1:]:
                params = mywapt.waptdb.params(packagename)
                print "%s" % params

        elif action == 'list-registry':
            print "%-39s%-70s%-20s%-70s" % ('UninstallKey', 'Software',
                                            'Version', 'Uninstallstring')
            print '-' * 39 + '-' * 70 + '-' * 20 + '-' * 70
            for p in setuphelpers.installed_softwares(' '.join(args[1:])):
                print u"%-39s%-70s%-20s%-70s" % (
                    p['key'], p['name'], p['version'], p['uninstall_string'])

        elif action == 'showlog':
            if len(args) < 2:
                print "You must provide at least one package name"
                sys.exit(1)
            for packagename in args[1:]:
                result = mywapt.last_install_log(packagename)
                print "Package : %s\nStatus : %s\n\nInstallation log:\n%s" % (
                    packagename, result['status'], result['log'])

        elif action == 'remove':
            if len(args) < 2:
                print "You must provide at least one package name to remove"
                sys.exit(1)
            for packagename in args[1:]:
                print "Removing %s ..." % (packagename, ),
                mywapt.remove(packagename, force=options.force)
                print "done"

        elif action == 'session-setup':
            if len(args) < 2:
                print "You must provide at least one package to be configured in user's session"
                sys.exit(1)

            for packagename in args[1:]:
                print "Configuring %s ..." % (packagename, ),
                mywapt.session_setup(packagename, params_dict=params_dict)
                print "done"

        elif action == 'uninstall':
            # launch the setup.uninstall() procedure for the given packages
            # can be used when registering in registry a custom install with a python script
            if len(args) < 2:
                print "You must provide at least one package to be uninstalled"
                sys.exit(1)

            for packagename in args[1:]:
                print "uninstalling %s ..." % (packagename, ),
                mywapt.uninstall(packagename, params_dict=params_dict)
                print "uninstall done"

        elif action == 'update':
            print "Update package list"
            result = mywapt.update()
            print "Total packages : %i" % result['count']
            print "Added packages : \n%s" % "\n".join(
                ["  %s (%s)" % p for p in result['added']])
            print "Removed packages : \n%s" % "\n".join(
                ["  %s (%s)" % p for p in result['removed']])
            print "Repositories URL : \n%s" % "\n".join(
                ["  %s" % p for p in result['repos']])

        elif action == 'upgradedb':
            (old, new) = mywapt.waptdb.upgradedb()
            if old == new:
                print "No database upgrade required, current %s, required %s" % (
                    old, mywapt.waptdb.curr_db_version)
            else:
                print "Old version : %s to new : %s" % (old, new)

        elif action == 'upgrade':
            if options.update_packages:
                print "Update package list"
                mywapt.update()
            result = mywapt.upgrade()
            if not result['install'] and not result[
                    'additional'] and not result['upgrade'] and not result[
                        'skipped']:
                print "Nothing to upgrade"
            else:
                for k in ('install', 'additional', 'upgrade', 'skipped',
                          'errors'):
                    if result[k]:
                        print "\n=== %s packages ===\n%s" % (
                            k,
                            '\n'.join([
                                "  %-30s | %s (%s)" %
                                (s[0], s[1].package, s[1].version)
                                for s in result[k]
                            ]),
                        )

            sys.exit(0)

        elif action == 'list-upgrade':
            if options.update_packages:
                print "Update package list"
                mywapt.update()
            q = mywapt.list_upgrade()
            if not q:
                print "Nothing to upgrade"
            else:
                print ppdicttable([p[0] for p in q], [('package', 20),
                                                      ('version', 10)])

        elif action == 'download-upgrade':
            if options.update_packages:
                print "Update package list"
                mywapt.update()
            result = mywapt.download_upgrades()
            print "Downloaded packages : \n%s" % "\n".join(
                ["  %s" % p for p in result['downloaded']])
            print "Skipped packages : \n%s" % "\n".join(
                ["  %s" % p for p in result['skipped']])

            if result['errors']:
                logger.critical('Unable to download some files : %s' %
                                (result['errors'], ))
                sys.exit(1)

        elif action == 'update-packages':
            if len(args) < 2:
                print "You must provide the directory"
                sys.exit(1)
            print update_packages(args[1])

        elif action == 'sources':
            if len(args) < 2:
                print "You must provide the package name"
                sys.exit(1)
            os.startfile(mywapt.get_sources(args[1]))

        elif action == 'make-template':
            if len(args) < 2:
                print "You must provide the installer path"
                sys.exit(1)
            source_dir = mywapt.maketemplate(*args[1:])
            print "Template created. You can build the WAPT package by launching\n  %s build-package %s" % (
                sys.argv[0], source_dir)
            os.startfile(source_dir)

        elif action == 'make-host-template':
            source_dir = mywapt.makehosttemplate(*args[1:])
            print "Template created. You can build the WAPT package by launching\n  %s build-package %s" % (
                sys.argv[0], source_dir)
            os.startfile(source_dir)

        elif action == 'build-package':
            if len(args) < 2:
                print "You must provide at least one source directory for package build"
                sys.exit(1)
            for source_dir in [os.path.abspath(p) for p in args[1:]]:
                if os.path.isdir(source_dir):
                    print('Building  %s' % source_dir)
                    result = mywapt.buildpackage(
                        source_dir,
                        inc_package_release=options.increlease,
                        excludes=options.excludes.split(','))
                    package_fn = result['filename']
                    if package_fn:
                        print "Package content:"
                        for f in result['files']:
                            print " %s" % f[0]
                        print('...done. Package filename %s' % (package_fn, ))

                        def pwd_callback(*args):
                            """Default password callback for opening private keys"""
                            return open(options.private_key_passwd, 'r').read()

                        if mywapt.private_key:
                            print('Signing %s' % package_fn)
                            if options.private_key_passwd:
                                signature = mywapt.signpackage(
                                    package_fn,
                                    excludes=options.excludes.split(','),
                                    callback=pwd_callback)
                            else:
                                signature = mywapt.signpackage(
                                    package_fn,
                                    excludes=options.excludes.split(','))
                            print "Package %s signed : signature :\n%s" % (
                                package_fn, signature)
                        else:
                            logger.warning(
                                'No private key provided, package %s is unsigned !'
                                % package_fn)

                        if mywapt.upload_cmd:
                            print '\nYou can upload to repository with\n  %s upload-package %s ' % (
                                sys.argv[0], package_fn)
                        return 0
                    else:
                        logger.critical('package not created')
                        return 1
                else:
                    logger.critical('Directory %s not found' % source_dir)

        elif action == 'sign-package':
            if len(args) < 2:
                print "You must provide at least one source directory or package to sign"
                sys.exit(1)
            for waptfile in [os.path.abspath(p) for p in args[1:]]:
                if os.path.isdir(waptfile) or os.path.isfile(waptfile):
                    print('Signing %s' % waptfile)
                    signature = mywapt.signpackage(
                        waptfile, excludes=options.excludes.split(','))
                    print "Package %s signed : signature :\n%s" % (waptfile,
                                                                   signature)
                else:
                    logger.critical('Package %s not found' % waptfile)
                    return 1

        elif action == 'upload-package':
            if len(args) < 2:
                print "You must provide a package to upload"
                sys.exit(1)
            waptfiles = []
            for a in args[1:]:
                waptfiles += glob.glob(a)
            waptfile_arg = " ".join(['"%s"' % f for f in waptfiles])
            print setuphelpers.run(mywapt.upload_cmd %
                                   {'waptfile': waptfile_arg})
            if mywapt.after_upload:
                print setuphelpers.run(mywapt.after_upload %
                                       {'waptfile': waptfile_arg})

        elif action == 'search':
            if options.update_packages:
                print "Update package list"
                mywapt.update()
            result = mywapt.waptdb.packages_search(args[1:])
            print ppdicttable(result, (('package', 30), ('version', 10),
                                       ('description', 80)))

        elif action == 'cleanup':
            result = mywapt.cleanup()
            print "Removed files : \n%s" % "\n".join(
                ["  %s" % p for p in result])

        elif action == 'inventory':
            print mywapt.inventory()

        elif action == 'setup-tasks':
            print mywapt.setup_tasks()

        elif action == 'list':

            def cb(fieldname, value):
                if value and fieldname == 'install_date':
                    return value[0:16]
                else:
                    return value

            print ppdicttable(
                mywapt.waptdb.installed_search(args[1:]).values(),
                (('package', 20), ('version', 15), ('install_status', 10),
                 ('install_date', 16), ('description', 80)),
                callback=cb)
        else:
            print 'Unknown action %s' % action
            sys.exit(1)
    except Exception, e:
        print "FATAL ERROR : %s" % e
        if logger.level == logging.DEBUG:
            raise
        sys.exit(3)
Exemplo n.º 15
0
def get_packages_filenames(packages,
                           with_depends=True,
                           waptconfigfile=None,
                           repo_name='wapt-templates',
                           remoterepo=None,
                           package_request=None,
                           privaterepo=None,
                           local_prefix=None):
    """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:
        packages (list): list of package entries as dicts or PackageEntry
        with_depends (bool): get recursively the all depends filenames
        waptconfigfile (str): path to wapt ini file
        repo_name : section name in wapt ini file for repo parameters (repo_url, http_proxy, timeout, verify_cert)
        remoterepo (WaptRemoteRepo) : remote repo to query.
                                      Mutually exclusive with waptconfigfile and repo_name
        privaterepo (WaptRemoteRepo) : local private repo where to check if dependencies already exists
    Returns:
        list: list of (wapt file basename,md5)

    >>> 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 = []
    defaults = {
        'repo_url': 'https://store.wapt.fr/wapt',
        'http_proxy': '',
        'verify_cert': '0',
    }

    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

    if remoterepo is None:
        config = RawConfigParser(defaults=defaults)
        config.read(waptconfigfile)

        remoterepo = WaptRemoteRepo(name=repo_name, config=config)
        remoterepo.private_key_password_callback = private_key_password_callback
        remoterepo.update()

    if privaterepo is None and waptconfigfile:
        config = RawConfigParser(defaults=defaults)
        config.read(waptconfigfile)

        privaterepo = WaptRemoteRepo(name='wapt', config=config)
        privaterepo.private_key_password_callback = private_key_password_callback
        privaterepo.update()

    if package_request is not None and isinstance(package_request, dict):
        package_request = PackageRequest(**package_request)

    for pe in packages:
        if not isinstance(pe, PackageEntry):
            pe = PackageEntry(**pe)

        # propagate capa to parent package
        if package_request is None:
            request_filter = PackageRequest()
            if pe.locale != 'all' and pe.locale:
                request_filter.locales = [pe.locale]
            if pe.architecture != 'all' and pe.architecture:
                request_filter.architectures = [pe.architecture]
            if pe.min_os_version:
                request_filter.min_os_version = pe.min_os_version
            if pe.max_os_version:
                request_filter.max_os_version = pe.max_os_version
        else:
            request_filter = package_request

        if pe.filename:
            result.append((
                pe.filename,
                pe.md5sum,
            ))
            if with_depends and pe.depends:
                depends_list = []
                for depname in ensure_list(pe.depends):
                    request_filter.request = depname
                    pe_dep = remoterepo.packages_matching(request_filter)

                    if privaterepo and local_prefix:
                        request_filter.request = change_prefix(
                            depname, local_prefix)
                        pe_local = privaterepo.packages_matching(
                            request_filter)
                    else:
                        pe_local = None

                    if pe_dep and not pe_local:
                        depends_list.append(pe_dep[-1])

                for (fn, md5) in get_packages_filenames(depends_list,
                                                        remoterepo=remoterepo):
                    if not (fn, md5) in result:
                        result.append((
                            fn,
                            md5,
                        ))
    return result
Exemplo n.º 16
0
with open(args.config, "r") as f:
    config = read_config(f)

sbuild_arch = get_sbuild_architecture()
if args.sbuild_path is None:
    if not args.base_directory:
        parser.print_usage()
        parser.exit()
    sbuild_path = os.path.join(args.base_directory, config.distribution.chroot)
else:
    sbuild_path = args.sbuild_path

if args.remove_old:
    for entry in os.scandir('/etc/schroot/chroot.d'):
        cp = RawConfigParser()
        cp.read([entry.path])
        if config.distribution.chroot in cp.sections():
            old_sbuild_path = cp.get('unstable-amd64-sbuild', 'directory')
            if old_sbuild_path != sbuild_path:
                raise AssertionError('sbuild path has changed: %s != %s' %
                                     (old_sbuild_path, sbuild_path))
            if os.path.isdir(old_sbuild_path):
                shutil.rmtree(old_sbuild_path)
            os.unlink(entry.path)

create_chroot(config.distribution,
              sbuild_path,
              config.suite,
              sbuild_arch,
              args.include,
Exemplo n.º 17
0
def inifile_hasoption(inifilename, section, key):
    """Read a string parameter from inifile"""
    inifile = RawConfigParser()
    inifile.read(inifilename)
    return inifile.has_section(section) and inifile.has_option(section, key)
Exemplo n.º 18
0
loglevel = 'debug'

defaults = {
    'repositories': '',
    'repo_url': '',
    'default_source_url': '',
    'gpgkey': '',
    'default_development_base': 'c:\tranquilit',
    'default_package_prefix': 'tis',
    'default_sources_suffix': 'wapt',
    'default_sources_url': '',
    'upload_cmd': '',
    'wapt_server': '',
}

cp = RawConfigParser(defaults=defaults)
cp.add_section('global')
cp.read(config_file)

if len(logger.handlers) < 1:
    hdlr = logging.StreamHandler(sys.stdout)
    hdlr.setFormatter(
        logging.Formatter('%(asctime)s %(levelname)s %(message)s'))
    logger.addHandler(hdlr)

# set loglevel
if loglevel in ('debug', 'warning', 'info', 'error', 'critical'):
    numeric_level = getattr(logging, loglevel.upper(), None)
    if not isinstance(numeric_level, int):
        raise ValueError('Invalid log level: %s' % loglevel)
    logger.setLevel(numeric_level)