'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) mywapt = Wapt(config=cp) mywapt.wapt_repourl = mywapt.find_wapt_server() print mywapt.wapt_repourl
'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) mywapt = Wapt(config=cp) mywapt.wapt_repourl = mywapt.find_wapt_server() print mywapt.wapt_repourl
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)
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)