def run(): """ console_scripts """ if not len(sys.argv) > 1: option = 'help' else: option = sys.argv[1] if option in ['help', '-h', '--help']: usage() elif option == 'show': Bundler.load() Bundler.show() elif option == 'install': Bundler.load() Bundler.install() elif option == 'upgrade': if len(sys.argv) > 2: filter = None if sys.argv[2] == 'all' else sys.argv[2] else: filter = None Bundler.load() Bundler.upgrade(filter=filter) elif option == 'selfupdate': Bundler.selfupdate() elif option == 'exec': if 3 > len(sys.argv): print colored('file is not given', COLOR_WARNING) exit(1) Bundler.load() Bundler.execute(sys.argv[2]) else: usage()
def execute(cls, target): # TODO: unstable & not well tested if os.path.isfile(target): execfile(target) else: print colored('Not executable file', COLOR_WARNING) exit(1) # fail
def resolve(cls, distname, version, source=None): """ Check a dependent package Parameters: - distname: package name - version Return: True if the dependency resolved """ try: version = version or '' get_distribution(distname + version) cls.dependencies[distname] = (version, source) except VersionConflict: version = version or 'any' print "%s: %s(%s)" % (WARNING_VERSION_CONFLICT, colored(distname, COLOR_INFO), colored(version, COLOR_INFO)) cls.terminate = True cls.unresolved[distname] = (version, source) return False except DistributionNotFound: version = version or 'any' print "%s: %s(%s)" % (WARNING_NOT_FOUND, colored(distname, COLOR_INFO), colored(version, COLOR_INFO)) cls.terminate = True cls.unresolved[distname] = (version, source) return False return True
def show(cls): """ Display resolved packages """ if len(cls.dependencies.keys()) > 0: print "\nResolved:" for distname in cls.dependencies.keys(): version = cls.dependencies[distname][0] or 'any' print " %s(%s)" % (distname, version) print "%s %s" % (colored(len(cls.dependencies), COLOR_INFO), colored('package(s)', COLOR_INFO))
def install(cls): """ Install all dependencies """ if len(cls.unresolved.keys()) > 0: print colored("\nStart resolving...", COLOR_INST) else: print "No unresolved package" return for distname in cls.unresolved.keys(): version = cls.unresolved[distname][0] source = cls.unresolved[distname][1] print "%s %s(%s)..." % (colored('installing', COLOR_INST), distname, version) if 'any' == version: version = '' cls._run_pip_(distname, version, source)
def upgrade(cls, filter=None): # TODO: If filter is None, slowly... for distname, (version, source) in cls.dependencies.iteritems(): if filter and not distname == filter: continue print "%s %s(%s)..." % (colored('installing', COLOR_INST), distname, version) if 'any' == version: version = '' cls._run_pip_(distname, version, source=source, options=['--upgrade'])
def inspect(pyfile): """ Inspection Use with your own script: import tbundler tbundler.inspect('path/to/pyfile') # your code here The script may be terminated if dependencies are not resolved """ Bundler.load(pyfile) execfile(pyfile) if Bundler.terminate: print colored(""" Your programm is terminated Before run the program, make sure resolve all the dependencies on $PYTHONPATH """, COLOR_WARNING) exit(1)
def load(cls, pyfile=LOCK_FILE): if os.path.isfile(pyfile): execfile(cls.LOCK_FILE) else: print colored('No PyFile exists', COLOR_WARNING) exit(1) # fail