#!/usr/bin/env python # -*- coding: utf-8 -*- # # This file is part of Librarian, licensed under GNU Affero GPLv3 or later. # Copyright © Fundacja Nowoczesna Polska. See NOTICE for more information. # from __future__ import print_function, unicode_literals from collections import OrderedDict import inspect import optparse import os import sys from librarian import packagers if __name__ == '__main__': # Parse commandline arguments usage = """Usage: %prog [options] SOURCE [SOURCE...] Prepare SOURCE files for a partner.""" parser = optparse.OptionParser(usage=usage) parser.add_option('-v', '--verbose', action='store_true', dest='verbose', default=False, help='print status messages to stdout') parser.add_option('-O', '--output-dir', dest='output_dir', metavar='DIR', default='', help='specifies the directory for output') parser.add_option('-f', '--force-overwrite', action='store_true', dest='overwrite', default=False, help='rebuild the file even if it already exists') parser.add_option('-p', '--packages', dest='packages', metavar='package,...', default='', help='lists packages to build') parser.add_option('-m', '--packages-modules', dest='packages_modules', metavar='path.to.module,...', default='librarian.partners', help='modules with packages definitions to load') parser.add_option('-l', '--list-packages', action='store_true', dest='list_packages', default=False, help='lists available packages') options, input_filenames = parser.parse_args() packages = OrderedDict() sys.path.insert(0, os.getcwd()) for module_name in options.packages_modules.split(','): if not module_name: continue module = __import__(module_name, globals(), locals(), ['*']) for package_name in dir(module): package = getattr(module, package_name) if inspect.isclass(package) and issubclass(package, packagers.Packager): packages[package_name] = package if not packages: print('No packages found!') if options.list_packages: print('Available packages:') for package_name, package in packages.items(): print(' ', package_name) exit(0) if len(input_filenames) < 1 or not options.packages: parser.print_help() exit(1) used_packages = [packages[p] for p in options.packages.split(',')] for package in used_packages: if options.verbose: print('Package:', package.__name__) package.prepare(input_filenames, options.output_dir, options.verbose, options.overwrite)