Esempio n. 1
0
def main(arguments):
    assert arguments is not None

    _FORMAT_CSV = "csv"
    _FORMAT_RST = "rst"
    _FORMATS = [_FORMAT_CSV, _FORMAT_RST]
    _DEFAULT_FORMAT = _FORMAT_CSV
    _DEFAULT_SHEET = 1

    parser = argparse.ArgumentParser(description='convert ODS file to other formats')
    parser.add_argument(
        "-f", "--format", metavar="FORMAT", default=_DEFAULT_FORMAT, choices=sorted(_FORMATS), dest="format",
        help="target format: %s (default: %s)" % (_tools.human_readable_list(_FORMATS), _DEFAULT_FORMAT))
    parser.add_argument(
        "-1", "--heading", action="store_true", dest="firstRowIsHeading",
        help="render first row as heading")
    parser.add_argument(
        "-s", "--sheet", metavar="SHEET", default=_DEFAULT_SHEET, type=int, dest="sheet",
        help="sheet to convert (default: %d)" % _DEFAULT_SHEET)
    parser.add_argument('source_ods_path', metavar='ODS-FILE', help='the ODS file to convert')
    parser.add_argument('target_path', metavar='TARGET-FILE', nargs='?', help='the target file to write')
    args = parser.parse_args(arguments)

    # Additional command line argument validation.
    if args.sheet < 1:
        parser.error("option --sheet is %d but must be at least 1" % args.sheet)
    if (args.format == _FORMAT_CSV) and args.firstRowIsHeading:
        parser.error("option --heading can not be used with --format=csv")

    if args.target_path is None:
        assert args.format in _FORMATS
        suffix = '.' + args.format
        args.target_path = _tools.with_suffix(args.source_ods_path, suffix)

    _log.info("convert %r to %r using format %r", args.source_ods_path, args.target_path, args.format)
    try:
        if args.format == _FORMAT_CSV:
            to_csv(args.source_ods_path, args.target_path, sheet=args.sheet)
        elif args.format == _FORMAT_RST:
            to_rst(
                args.source_ods_path, args.target_path, first_row_is_heading=args.firstRowIsHeading, sheet=args.sheet)
        else:  # pragma: no cover
            raise NotImplementedError("format=%r" % args.format)
    except (EnvironmentError, OSError) as error:
        _log.error("cannot convert ods: %s", error)
        sys.exit(1)
    except Exception as error:
        _log.exception("cannot convert ods: %s", error)
        sys.exit(1)
Esempio n. 2
0
 def _test_can_derive_suffix(self, expected_path, path_to_test, suffix_to_test):
     actualPath = _tools.with_suffix(path_to_test, suffix_to_test)
     self.assertEqual(expected_path, actualPath)
Esempio n. 3
0
def main(arguments):
    assert arguments is not None

    _FORMAT_CSV = "csv"
    _FORMAT_RST = "rst"
    _FORMATS = [_FORMAT_CSV, _FORMAT_RST]
    _DEFAULT_FORMAT = _FORMAT_CSV
    _DEFAULT_SHEET = 1

    parser = argparse.ArgumentParser(
        description='convert ODS file to other formats')
    parser.add_argument(
        "-f",
        "--format",
        metavar="FORMAT",
        default=_DEFAULT_FORMAT,
        choices=sorted(_FORMATS),
        dest="format",
        help="target format: %s (default: %s)" %
        (_tools.human_readable_list(_FORMATS), _DEFAULT_FORMAT))
    parser.add_argument("-1",
                        "--heading",
                        action="store_true",
                        dest="firstRowIsHeading",
                        help="render first row as heading")
    parser.add_argument("-s",
                        "--sheet",
                        metavar="SHEET",
                        default=_DEFAULT_SHEET,
                        type=int,
                        dest="sheet",
                        help="sheet to convert (default: %d)" % _DEFAULT_SHEET)
    parser.add_argument('source_ods_path',
                        metavar='ODS-FILE',
                        help='the ODS file to convert')
    parser.add_argument('target_path',
                        metavar='TARGET-FILE',
                        nargs='?',
                        help='the target file to write')
    args = parser.parse_args(arguments)

    # Additional command line argument validation.
    if args.sheet < 1:
        parser.error("option --sheet is %d but must be at least 1" %
                     args.sheet)
    if (args.format == _FORMAT_CSV) and args.firstRowIsHeading:
        parser.error("option --heading can not be used with --format=csv")

    if args.target_path is None:
        assert args.format in _FORMATS
        suffix = '.' + args.format
        args.target_path = _tools.with_suffix(args.source_ods_path, suffix)

    _log.info("convert %r to %r using format %r", args.source_ods_path,
              args.target_path, args.format)
    try:
        if args.format == _FORMAT_CSV:
            toCsv(args.source_ods_path, args.target_path, sheet=args.sheet)
        elif args.format == _FORMAT_RST:
            toRst(args.source_ods_path,
                  args.target_path,
                  firstRowIsHeading=args.firstRowIsHeading,
                  sheet=args.sheet)
        else:  # pragma: no cover
            raise NotImplementedError("format=%r" % args.format)
    except EnvironmentError as error:
        _log.error("cannot convert ods: %s", error)
        sys.exit(1)
    except Exception as error:
        _log.exception("cannot convert ods: %s", error)
        sys.exit(1)
Esempio n. 4
0
 def _test_can_derive_suffix(self, expected_path, path_to_test,
                             suffix_to_test):
     actualPath = _tools.with_suffix(path_to_test, suffix_to_test)
     self.assertEqual(expected_path, actualPath)