File: transcode.py

package info (click to toggle)
odil 0.13.0-2
  • links: PTS, VCS
  • area: main
  • in suites: forky, sid
  • size: 5,476 kB
  • sloc: cpp: 55,982; python: 3,947; javascript: 460; xml: 182; makefile: 99; sh: 36
file content (64 lines) | stat: -rw-r--r-- 2,321 bytes parent folder | download | duplicates (3)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
import argparse

import odil

def add_subparser(subparsers):
    parser = subparsers.add_parser(
        "transcode",
        help="Change the transfer syntax or the format",
        formatter_class=argparse.ArgumentDefaultsHelpFormatter)
    parser.add_argument("input", help="Input file name")
    parser.add_argument("output", help="Output file name")
    parser.add_argument(
        "--format", "-f",
        choices=["binary", "json", "xml"], default="binary",
        help="Output file format")
    parser.add_argument(
        "--transfer-syntax", "-t",
        help="Transfer syntax of output file (binary only)")
    parser.add_argument(
        "--pretty-print", "-p", action="store_true",
        help="Pretty-print in output file (JSON and XML only)")
    parser.set_defaults(function=transcode)
    return parser

def transcode(input, output, format, transfer_syntax, pretty_print):

    kwargs = {}

    if format == "binary":
        if transfer_syntax:
            transfer_syntax = getattr(odil.registry, transfer_syntax)
            ts_info = odil.registry.uids_dictionary[transfer_syntax]
            if ts_info.type != "Transfer Syntax":
                raise Exception(
                    "{} is not a transfer syntax".format(ts_info.name))
            kwargs["transfer_syntax"] = transfer_syntax
        else:
            kwargs["transfer_syntax"] = None
    elif format == "json":
        kwargs["pretty_print"] = pretty_print
    elif format == "xml":
        kwargs["pretty_print"] = pretty_print

    globals()["as_{}".format(format)](input, output, **kwargs)

def as_binary(input, output, transfer_syntax):
    with odil.open(input) as stream:
        _, data_set = odil.Reader.read_file(stream)
    with odil.open(output, "wb") as fd:
        odil.Writer.write_file(data_set, fd, transfer_syntax=transfer_syntax)

def as_json(input, output, pretty_print):
    with odil.open(input) as stream:
        _, data_set = odil.Reader.read_file(stream)
    with open(output, "w") as fd:
        json = odil.as_json(data_set, pretty_print)
        fd.write(json)

def as_xml(input, output, pretty_print):
    with odil.open(input) as stream:
        _, data_set = odil.Reader.read_file(stream)
    with open(output, "w") as fd:
        xml = odil.as_xml(data_set, pretty_print)
        fd.write(xml)