author | etisserant |
Mon, 27 Aug 2007 17:54:55 +0200 | |
changeset 13 | f1f0edbeb313 |
child 14 | eb9fdd316a40 |
permissions | -rw-r--r-- |
13
f1f0edbeb313
More precise design for plugins.... to be continued...
etisserant
parents:
diff
changeset
|
1 |
import os |
f1f0edbeb313
More precise design for plugins.... to be continued...
etisserant
parents:
diff
changeset
|
2 |
import plugins |
f1f0edbeb313
More precise design for plugins.... to be continued...
etisserant
parents:
diff
changeset
|
3 |
from plugins import PlugTemplate |
f1f0edbeb313
More precise design for plugins.... to be continued...
etisserant
parents:
diff
changeset
|
4 |
|
f1f0edbeb313
More precise design for plugins.... to be continued...
etisserant
parents:
diff
changeset
|
5 |
|
f1f0edbeb313
More precise design for plugins.... to be continued...
etisserant
parents:
diff
changeset
|
6 |
class PluginsRoot(PlugTemplate): |
f1f0edbeb313
More precise design for plugins.... to be continued...
etisserant
parents:
diff
changeset
|
7 |
|
f1f0edbeb313
More precise design for plugins.... to be continued...
etisserant
parents:
diff
changeset
|
8 |
# A special PlugChildsTypes |
f1f0edbeb313
More precise design for plugins.... to be continued...
etisserant
parents:
diff
changeset
|
9 |
PlugChildsTypes = [(name,lambda : getattr(__import__("plugins." + name), name).RootClass) for name in plugins.__all__] |
f1f0edbeb313
More precise design for plugins.... to be continued...
etisserant
parents:
diff
changeset
|
10 |
|
f1f0edbeb313
More precise design for plugins.... to be continued...
etisserant
parents:
diff
changeset
|
11 |
XSD = """<?xml version="1.0" encoding="ISO-8859-1" ?> |
f1f0edbeb313
More precise design for plugins.... to be continued...
etisserant
parents:
diff
changeset
|
12 |
<xsd:schema xmlns:xsd="http://www.w3.org/2001/XMLSchema"> |
f1f0edbeb313
More precise design for plugins.... to be continued...
etisserant
parents:
diff
changeset
|
13 |
<xsd:simpleType name="Win32Compiler"> |
f1f0edbeb313
More precise design for plugins.... to be continued...
etisserant
parents:
diff
changeset
|
14 |
<xsd:restriction base="xsd:string"> |
f1f0edbeb313
More precise design for plugins.... to be continued...
etisserant
parents:
diff
changeset
|
15 |
<xsd:enumeration value="Cygwin"/> |
f1f0edbeb313
More precise design for plugins.... to be continued...
etisserant
parents:
diff
changeset
|
16 |
<xsd:enumeration value="MinGW"/> |
f1f0edbeb313
More precise design for plugins.... to be continued...
etisserant
parents:
diff
changeset
|
17 |
<xsd:enumeration value="VC++"/> |
f1f0edbeb313
More precise design for plugins.... to be continued...
etisserant
parents:
diff
changeset
|
18 |
</xsd:restriction> |
f1f0edbeb313
More precise design for plugins.... to be continued...
etisserant
parents:
diff
changeset
|
19 |
</xsd:simpleType> |
f1f0edbeb313
More precise design for plugins.... to be continued...
etisserant
parents:
diff
changeset
|
20 |
<xsd:element name="BeremizRoot"> |
f1f0edbeb313
More precise design for plugins.... to be continued...
etisserant
parents:
diff
changeset
|
21 |
<xsd:complexType> |
f1f0edbeb313
More precise design for plugins.... to be continued...
etisserant
parents:
diff
changeset
|
22 |
<xsd:element name="TargetType"> |
f1f0edbeb313
More precise design for plugins.... to be continued...
etisserant
parents:
diff
changeset
|
23 |
<xsd:complexType> |
f1f0edbeb313
More precise design for plugins.... to be continued...
etisserant
parents:
diff
changeset
|
24 |
<xsd:choice> |
f1f0edbeb313
More precise design for plugins.... to be continued...
etisserant
parents:
diff
changeset
|
25 |
<xsd:element name="Win32"> |
f1f0edbeb313
More precise design for plugins.... to be continued...
etisserant
parents:
diff
changeset
|
26 |
<xsd:complexType> |
f1f0edbeb313
More precise design for plugins.... to be continued...
etisserant
parents:
diff
changeset
|
27 |
<xsd:attribute name="ToolChain" type="ppx:Win32Compiler" use="required" default="MinGW"/> |
f1f0edbeb313
More precise design for plugins.... to be continued...
etisserant
parents:
diff
changeset
|
28 |
<xsd:attribute name="Priority" type="xsd:integer" use="required" default="0"/> |
f1f0edbeb313
More precise design for plugins.... to be continued...
etisserant
parents:
diff
changeset
|
29 |
</xsd:complexType> |
f1f0edbeb313
More precise design for plugins.... to be continued...
etisserant
parents:
diff
changeset
|
30 |
</xsd:element> |
f1f0edbeb313
More precise design for plugins.... to be continued...
etisserant
parents:
diff
changeset
|
31 |
<xsd:element name="Linux"> |
f1f0edbeb313
More precise design for plugins.... to be continued...
etisserant
parents:
diff
changeset
|
32 |
<xsd:complexType> |
f1f0edbeb313
More precise design for plugins.... to be continued...
etisserant
parents:
diff
changeset
|
33 |
<xsd:attribute name="Compiler" type="xsd:string" use="required" default="0"/> |
f1f0edbeb313
More precise design for plugins.... to be continued...
etisserant
parents:
diff
changeset
|
34 |
<xsd:attribute name="Nice" type="xsd:integer" use="required" default="0"/> |
f1f0edbeb313
More precise design for plugins.... to be continued...
etisserant
parents:
diff
changeset
|
35 |
</xsd:complexType> |
f1f0edbeb313
More precise design for plugins.... to be continued...
etisserant
parents:
diff
changeset
|
36 |
</xsd:element> |
f1f0edbeb313
More precise design for plugins.... to be continued...
etisserant
parents:
diff
changeset
|
37 |
<xsd:element name="Xenomai"> |
f1f0edbeb313
More precise design for plugins.... to be continued...
etisserant
parents:
diff
changeset
|
38 |
<xsd:complexType> |
f1f0edbeb313
More precise design for plugins.... to be continued...
etisserant
parents:
diff
changeset
|
39 |
<xsd:attribute name="xeno-config" type="xsd:string" use="required" default="0"/> |
f1f0edbeb313
More precise design for plugins.... to be continued...
etisserant
parents:
diff
changeset
|
40 |
<xsd:attribute name="Compiler" type="xsd:string" use="required" default="0"/> |
f1f0edbeb313
More precise design for plugins.... to be continued...
etisserant
parents:
diff
changeset
|
41 |
<xsd:attribute name="Priority" type="xsd:integer" use="required" default="0"/> |
f1f0edbeb313
More precise design for plugins.... to be continued...
etisserant
parents:
diff
changeset
|
42 |
</xsd:complexType> |
f1f0edbeb313
More precise design for plugins.... to be continued...
etisserant
parents:
diff
changeset
|
43 |
</xsd:element> |
f1f0edbeb313
More precise design for plugins.... to be continued...
etisserant
parents:
diff
changeset
|
44 |
<xsd:element name="RTAI"> |
f1f0edbeb313
More precise design for plugins.... to be continued...
etisserant
parents:
diff
changeset
|
45 |
<xsd:complexType> |
f1f0edbeb313
More precise design for plugins.... to be continued...
etisserant
parents:
diff
changeset
|
46 |
<xsd:attribute name="xeno-config" type="xsd:string" use="required" default="0"/> |
f1f0edbeb313
More precise design for plugins.... to be continued...
etisserant
parents:
diff
changeset
|
47 |
<xsd:attribute name="Compiler" type="xsd:string" use="required" default="0"/> |
f1f0edbeb313
More precise design for plugins.... to be continued...
etisserant
parents:
diff
changeset
|
48 |
<xsd:attribute name="Priority" type="xsd:integer" use="required" default="0"/> |
f1f0edbeb313
More precise design for plugins.... to be continued...
etisserant
parents:
diff
changeset
|
49 |
</xsd:complexType> |
f1f0edbeb313
More precise design for plugins.... to be continued...
etisserant
parents:
diff
changeset
|
50 |
</xsd:element> |
f1f0edbeb313
More precise design for plugins.... to be continued...
etisserant
parents:
diff
changeset
|
51 |
<xsd:element name="Library"> |
f1f0edbeb313
More precise design for plugins.... to be continued...
etisserant
parents:
diff
changeset
|
52 |
<xsd:complexType> |
f1f0edbeb313
More precise design for plugins.... to be continued...
etisserant
parents:
diff
changeset
|
53 |
<xsd:attribute name="Dynamic" type="xsd:boolean" default="true"/> |
f1f0edbeb313
More precise design for plugins.... to be continued...
etisserant
parents:
diff
changeset
|
54 |
<xsd:attribute name="Compiler" type="xsd:string" use="required" default="0"/> |
f1f0edbeb313
More precise design for plugins.... to be continued...
etisserant
parents:
diff
changeset
|
55 |
</xsd:complexType> |
f1f0edbeb313
More precise design for plugins.... to be continued...
etisserant
parents:
diff
changeset
|
56 |
</xsd:element> |
f1f0edbeb313
More precise design for plugins.... to be continued...
etisserant
parents:
diff
changeset
|
57 |
</xsd:choice> |
f1f0edbeb313
More precise design for plugins.... to be continued...
etisserant
parents:
diff
changeset
|
58 |
</xsd:complexType> |
f1f0edbeb313
More precise design for plugins.... to be continued...
etisserant
parents:
diff
changeset
|
59 |
</xsd:element> |
f1f0edbeb313
More precise design for plugins.... to be continued...
etisserant
parents:
diff
changeset
|
60 |
</xsd:complexType> |
f1f0edbeb313
More precise design for plugins.... to be continued...
etisserant
parents:
diff
changeset
|
61 |
</xsd:element> |
f1f0edbeb313
More precise design for plugins.... to be continued...
etisserant
parents:
diff
changeset
|
62 |
</xsd:schema> |
f1f0edbeb313
More precise design for plugins.... to be continued...
etisserant
parents:
diff
changeset
|
63 |
""" |
f1f0edbeb313
More precise design for plugins.... to be continued...
etisserant
parents:
diff
changeset
|
64 |
|
f1f0edbeb313
More precise design for plugins.... to be continued...
etisserant
parents:
diff
changeset
|
65 |
def __init__(self, ProjectPath): |
f1f0edbeb313
More precise design for plugins.... to be continued...
etisserant
parents:
diff
changeset
|
66 |
# self is the parent |
f1f0edbeb313
More precise design for plugins.... to be continued...
etisserant
parents:
diff
changeset
|
67 |
self.PlugParent = None |
f1f0edbeb313
More precise design for plugins.... to be continued...
etisserant
parents:
diff
changeset
|
68 |
# Keep track of the plugin type name |
f1f0edbeb313
More precise design for plugins.... to be continued...
etisserant
parents:
diff
changeset
|
69 |
self.PlugType = "Beremiz" |
f1f0edbeb313
More precise design for plugins.... to be continued...
etisserant
parents:
diff
changeset
|
70 |
# Keep track of the root plugin (i.e. project path) |
f1f0edbeb313
More precise design for plugins.... to be continued...
etisserant
parents:
diff
changeset
|
71 |
self.ProjectPath = ProjectPath |
f1f0edbeb313
More precise design for plugins.... to be continued...
etisserant
parents:
diff
changeset
|
72 |
# Change XSD into class members |
f1f0edbeb313
More precise design for plugins.... to be continued...
etisserant
parents:
diff
changeset
|
73 |
self._AddParamsMembers() |
f1f0edbeb313
More precise design for plugins.... to be continued...
etisserant
parents:
diff
changeset
|
74 |
self.PluggedChilds = {} |
f1f0edbeb313
More precise design for plugins.... to be continued...
etisserant
parents:
diff
changeset
|
75 |
# No IEC channel, name, etc... |
f1f0edbeb313
More precise design for plugins.... to be continued...
etisserant
parents:
diff
changeset
|
76 |
self.MandatoryParams = [] |
f1f0edbeb313
More precise design for plugins.... to be continued...
etisserant
parents:
diff
changeset
|
77 |
# If dir have already be made, and file exist |
f1f0edbeb313
More precise design for plugins.... to be continued...
etisserant
parents:
diff
changeset
|
78 |
if os.path.isdir(_self.PlugPath(PlugName)) and os.path.isfile(_self.PluginXmlFilePath(PlugName)): |
f1f0edbeb313
More precise design for plugins.... to be continued...
etisserant
parents:
diff
changeset
|
79 |
#Load the plugin.xml file into parameters members |
f1f0edbeb313
More precise design for plugins.... to be continued...
etisserant
parents:
diff
changeset
|
80 |
_self.LoadXMLParams() |
f1f0edbeb313
More precise design for plugins.... to be continued...
etisserant
parents:
diff
changeset
|
81 |
#Load and init all the childs |
f1f0edbeb313
More precise design for plugins.... to be continued...
etisserant
parents:
diff
changeset
|
82 |
_self.LoadChilds() |
f1f0edbeb313
More precise design for plugins.... to be continued...
etisserant
parents:
diff
changeset
|
83 |
|
f1f0edbeb313
More precise design for plugins.... to be continued...
etisserant
parents:
diff
changeset
|
84 |
def PlugPath(self,PlugName=None): |
f1f0edbeb313
More precise design for plugins.... to be continued...
etisserant
parents:
diff
changeset
|
85 |
return self.ProjectPath |
f1f0edbeb313
More precise design for plugins.... to be continued...
etisserant
parents:
diff
changeset
|
86 |
|
f1f0edbeb313
More precise design for plugins.... to be continued...
etisserant
parents:
diff
changeset
|
87 |
def PluginXmlFilePath(self, PlugName=None): |
f1f0edbeb313
More precise design for plugins.... to be continued...
etisserant
parents:
diff
changeset
|
88 |
return os.path.join(self.PlugPath(PlugName), "beremiz.xml") |
f1f0edbeb313
More precise design for plugins.... to be continued...
etisserant
parents:
diff
changeset
|
89 |
|
f1f0edbeb313
More precise design for plugins.... to be continued...
etisserant
parents:
diff
changeset
|
90 |