plugger.py
changeset 86 f0a9d74e3b26
parent 82 d7b4dd1f543f
child 96 0c06f7874a3f
equal deleted inserted replaced
85:af97c60e759c 86:f0a9d74e3b26
    17 
    17 
    18 _BaseParamsClass = GenerateClassesFromXSDstring("""<?xml version="1.0" encoding="ISO-8859-1" ?>
    18 _BaseParamsClass = GenerateClassesFromXSDstring("""<?xml version="1.0" encoding="ISO-8859-1" ?>
    19         <xsd:schema xmlns:xsd="http://www.w3.org/2001/XMLSchema">
    19         <xsd:schema xmlns:xsd="http://www.w3.org/2001/XMLSchema">
    20           <xsd:element name="BaseParams">
    20           <xsd:element name="BaseParams">
    21             <xsd:complexType>
    21             <xsd:complexType>
    22               <xsd:attribute name="Name" type="xsd:string" use="required" default="__unnamed__"/>
    22               <xsd:attribute name="Name" type="xsd:string" use="optional" default="__unnamed__"/>
    23               <xsd:attribute name="IEC_Channel" type="xsd:integer" use="required"/>
    23               <xsd:attribute name="IEC_Channel" type="xsd:integer" use="required"/>
    24               <xsd:attribute name="Enabled" type="xsd:boolean" use="required" default="true"/>
    24               <xsd:attribute name="Enabled" type="xsd:boolean" use="optional" default="true"/>
    25             </xsd:complexType>
    25             </xsd:complexType>
    26           </xsd:element>
    26           </xsd:element>
    27         </xsd:schema>""")[0]["BaseParams"]
    27         </xsd:schema>""")["BaseParams"]
    28 
    28 
    29 NameTypeSeparator = '@'
    29 NameTypeSeparator = '@'
    30 
    30 
    31 class MiniTextControler:
    31 class MiniTextControler:
    32     
    32     
    78     PluginMethods = []
    78     PluginMethods = []
    79 
    79 
    80     def _AddParamsMembers(self):
    80     def _AddParamsMembers(self):
    81         self.PlugParams = None
    81         self.PlugParams = None
    82         if self.XSD:
    82         if self.XSD:
    83             Classes = GenerateClassesFromXSDstring(self.XSD)[0]
    83             Classes = GenerateClassesFromXSDstring(self.XSD)
    84             Classes = [(name, XSDclass) for name, XSDclass in Classes.items() if XSDclass.IsBaseClass]
    84             Classes = [(name, XSDclass) for name, XSDclass in Classes.items() if XSDclass.IsBaseClass]
    85             if len(Classes) == 1:
    85             if len(Classes) == 1:
    86                 name, XSDclass = Classes[0]
    86                 name, XSDclass = Classes[0]
    87                 obj = XSDclass()
    87                 obj = XSDclass()
    88                 self.PlugParams = (name, obj)
    88                 self.PlugParams = (name, obj)
   498         # Iterate over all PlugName@PlugType in plugin directory, and try to open them
   498         # Iterate over all PlugName@PlugType in plugin directory, and try to open them
   499         for PlugDir in os.listdir(self.PlugPath()):
   499         for PlugDir in os.listdir(self.PlugPath()):
   500             if os.path.isdir(os.path.join(self.PlugPath(), PlugDir)) and \
   500             if os.path.isdir(os.path.join(self.PlugPath(), PlugDir)) and \
   501                PlugDir.count(NameTypeSeparator) == 1:
   501                PlugDir.count(NameTypeSeparator) == 1:
   502                 pname, ptype = PlugDir.split(NameTypeSeparator)
   502                 pname, ptype = PlugDir.split(NameTypeSeparator)
   503                 try:
   503                 #try:
   504                     self.PlugAddChild(pname, ptype, logger)
   504                 self.PlugAddChild(pname, ptype, logger)
   505                 except Exception, e:
   505                 #except Exception, e:
   506                     logger.write_error("Could not add child \"%s\", type %s :\n%s\n"%(pname, ptype, str(e)))
   506                 #    logger.write_error("Could not add child \"%s\", type %s :\n%s\n"%(pname, ptype, str(e)))
   507 
   507 
   508 def _GetClassFunction(name):
   508 def _GetClassFunction(name):
   509     def GetRootClass():
   509     def GetRootClass():
   510         return getattr(__import__("plugins." + name), name).RootClass
   510         return getattr(__import__("plugins." + name), name).RootClass
   511     return GetRootClass
   511     return GetRootClass
   555 
   555 
   556     XSD = """<?xml version="1.0" encoding="ISO-8859-1" ?>
   556     XSD = """<?xml version="1.0" encoding="ISO-8859-1" ?>
   557     <xsd:schema xmlns:xsd="http://www.w3.org/2001/XMLSchema">
   557     <xsd:schema xmlns:xsd="http://www.w3.org/2001/XMLSchema">
   558       <xsd:element name="BeremizRoot">
   558       <xsd:element name="BeremizRoot">
   559         <xsd:complexType>
   559         <xsd:complexType>
   560           <xsd:element name="TargetType">
   560           <xsd:sequence>
   561             <xsd:complexType>
   561             <xsd:element name="TargetType">
   562               <xsd:choice>
   562               <xsd:complexType>
   563                 <xsd:element name="Win32">
   563                 <xsd:choice>
   564                   <xsd:complexType>
   564                   <xsd:element name="Win32">
   565                     <xsd:attribute name="Priority" type="xsd:integer" use="required"/>
   565                     <xsd:complexType>
   566                   </xsd:complexType>
   566                       <xsd:attribute name="Priority" type="xsd:integer" use="required"/>
   567                 </xsd:element>
   567                     </xsd:complexType>
   568                 <xsd:element name="Linux">
   568                   </xsd:element>
   569                   <xsd:complexType>
   569                   <xsd:element name="Linux">
   570                     <xsd:attribute name="Nice" type="xsd:integer" use="required"/>
   570                     <xsd:complexType>
   571                   </xsd:complexType>
   571                       <xsd:attribute name="Nice" type="xsd:integer" use="required"/>
   572                 </xsd:element>
   572                     </xsd:complexType>
   573                 <xsd:element name="Xenomai">
   573                   </xsd:element>
   574                   <xsd:complexType>
   574                   <xsd:element name="Xenomai">
   575                     <xsd:attribute name="xeno-config" type="xsd:string" use="required" default="/usr/xenomai/"/>
   575                     <xsd:complexType>
   576                     <xsd:attribute name="Priority" type="xsd:integer" use="required"/>
   576                       <xsd:attribute name="xeno_config" type="xsd:string" use="optional" default="/usr/xenomai/"/>
   577                   </xsd:complexType>
   577                       <xsd:attribute name="Priority" type="xsd:integer" use="required"/>
   578                 </xsd:element>
   578                     </xsd:complexType>
   579                 <xsd:element name="RTAI">
   579                   </xsd:element>
   580                   <xsd:complexType>
   580                   <xsd:element name="RTAI">
   581                     <xsd:attribute name="rtai-config" type="xsd:string" use="required"/>
   581                     <xsd:complexType>
   582                     <xsd:attribute name="Priority" type="xsd:integer" use="required"/>
   582                       <xsd:attribute name="rtai_config" type="xsd:string" use="required"/>
   583                   </xsd:complexType>
   583                       <xsd:attribute name="Priority" type="xsd:integer" use="required"/>
   584                 </xsd:element>
   584                     </xsd:complexType>
   585                 <xsd:element name="Library">
   585                   </xsd:element>
   586                   <xsd:complexType>
   586                   <xsd:element name="Library">
   587                     <xsd:attribute name="Dynamic" type="xsd:boolean" use="required" default="true"/>
   587                     <xsd:complexType>
   588                   </xsd:complexType>
   588                       <xsd:attribute name="Dynamic" type="xsd:boolean" use="optional" default="true"/>
   589                 </xsd:element>
   589                     </xsd:complexType>
   590               </xsd:choice>
   590                   </xsd:element>
   591             </xsd:complexType>
   591                 </xsd:choice>
   592           </xsd:element>
   592               </xsd:complexType>
   593           <xsd:attribute name="Compiler" type="xsd:string" use="required" default="gcc"/>
   593             </xsd:element>
   594           <xsd:attribute name="CFLAGS" type="xsd:string" use="required" default=""/>
   594           </xsd:sequence>
   595           <xsd:attribute name="Linker" type="xsd:string" use="required" default="ld"/>
   595           <xsd:attribute name="Compiler" type="xsd:string" use="optional" default="gcc"/>
   596           <xsd:attribute name="LDFLAGS" type="xsd:string" use="required" default=""/>
   596           <xsd:attribute name="CFLAGS" type="xsd:string" use="required"/>
       
   597           <xsd:attribute name="Linker" type="xsd:string" use="optional" default="ld"/>
       
   598           <xsd:attribute name="LDFLAGS" type="xsd:string" use="required"/>
   597         </xsd:complexType>
   599         </xsd:complexType>
   598       </xsd:element>
   600       </xsd:element>
   599     </xsd:schema>
   601     </xsd:schema>
   600     """
   602     """
   601 
   603