def convert_command(args): env = Environment() try: converter = env.converters[args.output_format] except KeyError: raise CliException("Converter for format '%s' is not found" % \ args.output_format) extra_args = converter.parse_cmdline(args.extra_args) filter_args = FilterModes.make_filter_args(args.filter_mode) fmt = args.input_format if not args.input_format: matches = env.detect_dataset(args.source) if len(matches) == 0: log.error( "Failed to detect dataset format. " "Try to specify format with '-if/--input-format' parameter.") return 1 elif len(matches) != 1: log.error( "Multiple formats match the dataset: %s. " "Try to specify format with '-if/--input-format' parameter.", ', '.join(matches)) return 2 fmt = matches[0] log.info("Source dataset format detected as '%s'", args.input_format) source = osp.abspath(args.source) dst_dir = args.dst_dir if dst_dir: if not args.overwrite and osp.isdir(dst_dir) and os.listdir(dst_dir): raise CliException("Directory '%s' already exists " "(pass --overwrite to overwrite)" % dst_dir) else: dst_dir = generate_next_file_name('%s-%s' % \ (osp.basename(source), make_file_name(args.output_format))) dst_dir = osp.abspath(dst_dir) dataset = Dataset.import_from(source, fmt) log.info("Exporting the dataset") if args.filter: dataset = dataset.filter(args.filter, **filter_args) dataset.export(format=args.output_format, save_dir=dst_dir, **extra_args) log.info("Dataset exported to '%s' as '%s'" % \ (dst_dir, args.output_format)) return 0
def import_command(args): project_dir = osp.abspath(args.dst_dir) project_env_dir = osp.join(project_dir, DEFAULT_CONFIG.env_dir) if osp.isdir(project_env_dir) and os.listdir(project_env_dir): if not args.overwrite: raise CliException("Directory '%s' already exists " "(pass --overwrite to overwrite)" % project_env_dir) else: shutil.rmtree(project_env_dir, ignore_errors=True) own_dataset_dir = osp.join(project_dir, DEFAULT_CONFIG.dataset_dir) if osp.isdir(own_dataset_dir) and os.listdir(own_dataset_dir): if not args.overwrite: raise CliException("Directory '%s' already exists " "(pass --overwrite to overwrite)" % own_dataset_dir) else: # NOTE: remove the dir to avoid using data from previous project shutil.rmtree(own_dataset_dir) project_name = args.name if project_name is None: project_name = osp.basename(project_dir) env = Environment() log.info("Importing project from '%s'" % args.source) extra_args = {} fmt = args.format if not args.format: if args.extra_args: raise CliException("Extra args can not be used without format") log.info("Trying to detect dataset format...") matches = env.detect_dataset(args.source) if len(matches) == 0: log.error("Failed to detect dataset format. " "Try to specify format with '-f/--format' parameter.") return 1 elif len(matches) != 1: log.error("Multiple formats match the dataset: %s. " "Try to specify format with '-f/--format' parameter.", ', '.join(matches)) return 1 fmt = matches[0] elif args.extra_args: if fmt in env.importers: arg_parser = env.importers[fmt] elif fmt in env.extractors: arg_parser = env.extractors[fmt] else: raise CliException("Unknown format '%s'. A format can be added" "by providing an Extractor and Importer plugins" % fmt) if hasattr(arg_parser, 'parse_cmdline'): extra_args = arg_parser.parse_cmdline(args.extra_args) else: raise CliException("Format '%s' does not accept " "extra parameters" % fmt) log.info("Importing project as '%s'" % fmt) project = Project.import_from(osp.abspath(args.source), fmt, **extra_args) project.config.project_name = project_name project.config.project_dir = project_dir if not args.skip_check or args.copy: log.info("Checking the dataset...") dataset = project.make_dataset() if args.copy: log.info("Cloning data...") dataset.save(merge=True, save_images=True) else: project.save() log.info("Project has been created at '%s'" % project_dir) return 0