File size: 3,071 Bytes
985c397
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
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
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
#! python
# SPDX-License-Identifier: LGPL-2.1-or-later

# (c) 2006 Jürgen Riegel  GPL

import os
import sys
import getopt
import model.generateModel_Module
import model.generateModel_Python
import templates.templateModule
import templates.templateClassPyExport


Usage = """generate - generates a FreeCAD Module out of an XML or Python model



Usage:

   generate [Optionen] Model.xml/py Model2.xml/py Model3.xml/py ...



Options:

 -h, --help          print this help

 -o, --outputPath    specify the output path if differs from source path



Generate source code out of an model definition.



Author:

  (c) 2006 Juergen Riegel

  juergen.riegel@web.de

    Licence: GPL



Version:

  0.3

"""


# Globals


def generate_model(filename):
    if filename.endswith(".xml"):
        return model.generateModel_Module.parse(filename)
    elif filename.endswith(".pyi"):
        return model.generateModel_Python.parse(filename)
    raise ValueError("invalid file extension")


def generate(filename, outputPath):
    GenerateModelInst = generate_model(filename)

    if len(GenerateModelInst.Module) != 0:
        Module = templates.templateModule.TemplateModule()
        Module.outputDir = outputPath
        Module.module = GenerateModelInst.Module[0]
        Module.Generate()
        print("Done generating: " + GenerateModelInst.Module[0].Name)
    else:
        Export = templates.templateClassPyExport.TemplateClassPyExport()
        Export.outputDir = outputPath + "/"
        Export.inputDir = os.path.dirname(filename) + "/"
        Export.export = GenerateModelInst.PythonExport[0]
        Export.is_python = filename.endswith(".pyi")
        Export.Generate()
        if Export.is_python:
            Export.Compare()
        print("Done generating: " + GenerateModelInst.PythonExport[0].Name)


def main():
    verbose = False
    outputPath = ""

    class generateOutput:
        def write(self, data):
            pass

        def flush(self):  # mandatory for file-like objects
            pass

    try:
        opts, args = getopt.getopt(sys.argv[1:], "hvo:", ["help", "verbose", "outputPath="])
    except getopt.GetoptError:
        # print help information and exit:
        sys.stderr.write(Usage)
        sys.exit(2)

    # checking on the options
    for o, a in opts:
        if o in ("-h", "--help"):
            sys.stderr.write(Usage)
            sys.exit()
        if o in ("-o", "--outputPath"):
            outputPath = a
        if o in ("-v", "--verbose"):
            verbose = True

    if not verbose:
        sys.stdout = generateOutput()

    # running through the files
    if len(args) == 0:
        sys.stderr.write(Usage)
    else:
        for i in args:
            filename = os.path.abspath(i)
            if outputPath == "":
                head, _ = os.path.split(filename)
                generate(filename, head)
            else:
                generate(filename, outputPath)


if __name__ == "__main__":
    main()