plugger.py
author etisserant
Mon, 27 Aug 2007 17:54:55 +0200
changeset 13 f1f0edbeb313
child 14 eb9fdd316a40
permissions -rw-r--r--
More precise design for plugins.... to be continued...
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