[Mobies-commit] [commit] r3675 - UDM/trunk/src/UdmCliGen

ksmyth at redhat1.isis.vanderbilt.edu ksmyth at redhat1.isis.vanderbilt.edu
Fri Mar 25 11:58:38 CDT 2011


Author: ksmyth
Date: Fri Mar 25 11:58:37 2011
New Revision: 3675

Log:
Add -o option. Load Cheetah from UDM_3RD_PARTY. Compile Cheetah templates and include in py2exe.

Modified:
   UDM/trunk/src/UdmCliGen/UdmCliGen-setup.py
   UDM/trunk/src/UdmCliGen/UdmCliGen.py

Modified: UDM/trunk/src/UdmCliGen/UdmCliGen-setup.py
==============================================================================
--- UDM/trunk/src/UdmCliGen/UdmCliGen-setup.py	Thu Mar 24 14:10:14 2011	(r3674)
+++ UDM/trunk/src/UdmCliGen/UdmCliGen-setup.py	Fri Mar 25 11:58:37 2011	(r3675)
@@ -4,6 +4,16 @@
 from distutils.core import setup
 import py2exe
 import time
+import sys
+import os
+
+import UdmCliGen # for Cheetah in sys.path
+
+templates = ['Interface', 'Implementation', 'Initialize']
+if __name__ == '__main__':
+    from Cheetah.CheetahWrapper import CheetahWrapper
+    for template in templates:
+        CheetahWrapper().main([sys.argv[0], 'compile', template + '.tmpl'])
 
 class Target:
     def __init__(self, **kw):
@@ -18,7 +28,7 @@
 options={"py2exe":{
                         "dll_excludes": ['w9xpopen.exe'],
                         #"bundle_files": 1,
-                        "includes": ["Cheetah.DummyTransaction"],
+                        "includes": ["Cheetah.DummyTransaction"] + templates,
                 }
         },
 )

Modified: UDM/trunk/src/UdmCliGen/UdmCliGen.py
==============================================================================
--- UDM/trunk/src/UdmCliGen/UdmCliGen.py	Thu Mar 24 14:10:14 2011	(r3674)
+++ UDM/trunk/src/UdmCliGen/UdmCliGen.py	Fri Mar 25 11:58:37 2011	(r3675)
@@ -1,5 +1,3 @@
-from Cheetah.Template import Template
-
 import sys
 import os
 import os.path
@@ -7,23 +5,29 @@
 import udm
 import common
 
+if os.environ.has_key("UDM_3RDPARTY_PATH"):
+    sys.path.append(os.path.join(os.environ["UDM_3RDPARTY_PATH"], r"Cheetah-2.4.4\build\lib.win32-2.6"))
+
+from Cheetah.Template import Template
+
+def get_template(name, **kwargs):
+    if hasattr(sys, "frozen"): #i.e. .exe generated by py2exe
+        __import__(name)
+        return getattr(sys.modules[name], name)(**kwargs)
+    else:
+        return Template(file=name+'.tmpl', **kwargs)
+   
 
 if __name__ == "__main__":
     from optparse import OptionParser
     parser = OptionParser(usage="usage: %prog [options] input-uml.xml")
-    parser.add_option("-o", "--output", dest="output")
+    parser.add_option("-o", "--output", dest="output", help="File or directory to output to.")
     parser.add_option("--impl_namespace", dest="impl_namespace")
     parser.add_option("--interface_namespace", dest="interface_namespace")
     (options, args) = parser.parse_args()
     if len(args) != 1:
         print parser.print_help()
         sys.exit()
-    if options.output:
-        output = open(options.output, "w")
-        # TODO: close this
-    else:
-        output = sys.stdout
-    output.write("#pragma warning disable 0108\n");
     if options.impl_namespace:
         common.impl_namespace = options.impl_namespace + "."
     if options.interface_namespace:
@@ -33,25 +37,38 @@
     dn = udm.SmartDataNetwork(udm.uml_diagram())
     dn.open(args[0], "")
 
-    classes = []
-    classes.extend(dn.root.children(child_type=uml.Class))
-    import collections
-    q = collections.deque()
-    q.extend(dn.root.children(child_type=uml.Namespace))
-    while q:
-        namespace = q.pop()
-        q.extend(namespace.children(child_type=uml.Namespace))
-        classes.extend(namespace.children(child_type=uml.Class))
+    if options.output:
+        if os.path.isdir(options.output):
+            output = open(os.path.join(options.output, dn.root.name + ".cs"), "w")
+        else:
+            output = open(options.output, "w")
+        # TODO: close this
+    else:
+        output = sys.stdout
+
+    output.write("#pragma warning disable 0108\n"); # disable "'member1' hides inherited member 'member2'. Use the new keyword if hiding was intended."
+
+    def get_classes(dn):
+        classes = []
+        classes.extend(dn.root.children(child_type=uml.Class))
+        import collections
+        q = collections.deque()
+        q.extend(dn.root.children(child_type=uml.Namespace))
+        while q:
+            namespace = q.pop()
+            q.extend(namespace.children(child_type=uml.Namespace))
+            classes.extend(namespace.children(child_type=uml.Class))
+        return classes
     
-    for child in classes:
+    for child in get_classes(dn):
         searchList = {'c': child, 'namespace': common.interface_namespace + common.get_path(child.parent), 'uml': uml, 'diagram_name': dn.root.name}
-        t = Template(file="Interface.tmpl", searchList=[searchList])
+        t = get_template("Interface", searchList=[searchList])
         output.write(str(t))
 
         searchList = {'c': child, 'namespace': common.impl_namespace + common.get_path(child.parent), 'uml': uml, 'diagram_name': dn.root.name}
-        t = Template(file="Implementation.tmpl", searchList=[searchList])
+        t = get_template("Implementation", searchList=[searchList])
         output.write(str(t))
 
     searchList = {'root': dn.root}
-    t = Template(file="Initialize.tmpl", searchList=[searchList])
+    t = get_template("Initialize", searchList=[searchList])
     output.write(str(t))


More information about the Mobies-commit mailing list