plcopen/plcopen.py
branchpython3
changeset 3750 f62625418bff
parent 2739 7278186a2083
child 3752 9f6f46dbe3ae
equal deleted inserted replaced
3749:fda6c1a37662 3750:f62625418bff
    22 # You should have received a copy of the GNU General Public License
    22 # You should have received a copy of the GNU General Public License
    23 # along with this program; if not, write to the Free Software
    23 # along with this program; if not, write to the Free Software
    24 # Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301, USA.
    24 # Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301, USA.
    25 
    25 
    26 
    26 
    27 from __future__ import absolute_import
    27 
    28 from __future__ import division
    28 
    29 import re
    29 import re
    30 from collections import OrderedDict
    30 from collections import OrderedDict
    31 
    31 
    32 from six.moves import xrange
    32 from six.moves import xrange
    33 from lxml import etree
    33 from lxml import etree
   438         return contentheader
   438         return contentheader
   439     setattr(cls, "getcontentHeader", getcontentHeader)
   439     setattr(cls, "getcontentHeader", getcontentHeader)
   440 
   440 
   441     def setcontentHeader(self, contentheader):
   441     def setcontentHeader(self, contentheader):
   442         contentheader_obj = self.contentHeader
   442         contentheader_obj = self.contentHeader
   443         for attr, value in contentheader.iteritems():
   443         for attr, value in contentheader.items():
   444             func = {"projectName": contentheader_obj.setname,
   444             func = {"projectName": contentheader_obj.setname,
   445                     "projectVersion": contentheader_obj.setversion,
   445                     "projectVersion": contentheader_obj.setversion,
   446                     "authorName": contentheader_obj.setauthor,
   446                     "authorName": contentheader_obj.setauthor,
   447                     "pageSize": lambda v: contentheader_obj.setpageSize(*v),
   447                     "pageSize": lambda v: contentheader_obj.setpageSize(*v),
   448                     "scaling": contentheader_obj.setscaling}.get(attr)
   448                     "scaling": contentheader_obj.setscaling}.get(attr)
   493         filter = [] if filter is None else filter
   493         filter = [] if filter is None else filter
   494         return self.xpath(
   494         return self.xpath(
   495             "ppx:types/ppx:pous/ppx:pou%s%s" %
   495             "ppx:types/ppx:pous/ppx:pou%s%s" %
   496             (("[@name!='%s']" % exclude) if exclude is not None else '',
   496             (("[@name!='%s']" % exclude) if exclude is not None else '',
   497              ("[%s]" % " or ".join(
   497              ("[%s]" % " or ".join(
   498                  map(lambda x: "@pouType='%s'" % x, filter)))
   498                  ["@pouType='%s'" % x for x in filter]))
   499              if len(filter) > 0 else ""),
   499              if len(filter) > 0 else ""),
   500             namespaces=PLCOpenParser.NSMAP)
   500             namespaces=PLCOpenParser.NSMAP)
   501     setattr(cls, "getpous", getpous)
   501     setattr(cls, "getpous", getpous)
   502 
   502 
   503     setattr(cls, "getpou", gettypeElementFunc("pou"))
   503     setattr(cls, "getpou", gettypeElementFunc("pou"))
   648     def getpageSize(self):
   648     def getpageSize(self):
   649         return self.coordinateInfo.getpageSize()
   649         return self.coordinateInfo.getpageSize()
   650     setattr(cls, "getpageSize", getpageSize)
   650     setattr(cls, "getpageSize", getpageSize)
   651 
   651 
   652     def setscaling(self, scaling):
   652     def setscaling(self, scaling):
   653         for language, (x, y) in scaling.items():
   653         for language, (x, y) in list(scaling.items()):
   654             self.coordinateInfo.setscaling(language, x, y)
   654             self.coordinateInfo.setscaling(language, x, y)
   655     setattr(cls, "setscaling", setscaling)
   655     setattr(cls, "setscaling", setscaling)
   656 
   656 
   657     def getscaling(self):
   657     def getscaling(self):
   658         scaling = {}
   658         scaling = {}
   747 
   747 
   748 
   748 
   749 def _removeConfigurationResourceVariableByAddress(self, address):
   749 def _removeConfigurationResourceVariableByAddress(self, address):
   750     for varlist in self.getglobalVars():
   750     for varlist in self.getglobalVars():
   751         variables = varlist.getvariable()
   751         variables = varlist.getvariable()
   752         for i in xrange(len(variables)-1, -1, -1):
   752         for i in range(len(variables)-1, -1, -1):
   753             if variables[i].getaddress() == address:
   753             if variables[i].getaddress() == address:
   754                 variables.remove(variables[i])
   754                 variables.remove(variables[i])
   755 
   755 
   756 
   756 
   757 def _removeConfigurationResourceVariableByFilter(self, address_model):
   757 def _removeConfigurationResourceVariableByFilter(self, address_model):
   758     for varlist in self.getglobalVars():
   758     for varlist in self.getglobalVars():
   759         variables = varlist.getvariable()
   759         variables = varlist.getvariable()
   760         for i in xrange(len(variables)-1, -1, -1):
   760         for i in range(len(variables)-1, -1, -1):
   761             var_address = variables[i].getaddress()
   761             var_address = variables[i].getaddress()
   762             if var_address is not None:
   762             if var_address is not None:
   763                 result = address_model.match(var_address)
   763                 result = address_model.match(var_address)
   764                 if result is not None:
   764                 if result is not None:
   765                     variables.remove(variables[i])
   765                     variables.remove(variables[i])
   969             elif base_type_name in ["string", "wstring"]:
   969             elif base_type_name in ["string", "wstring"]:
   970                 basetype_name = base_type_name.upper()
   970                 basetype_name = base_type_name.upper()
   971             # Array derived directly from an elementary type
   971             # Array derived directly from an elementary type
   972             else:
   972             else:
   973                 basetype_name = base_type_name
   973                 basetype_name = base_type_name
   974             return "ARRAY [%s] OF %s" % (",".join(map(lambda x: "%s..%s" % (x.getlower(), x.getupper()), vartype_content.getdimension())), basetype_name)
   974             return "ARRAY [%s] OF %s" % (",".join(["%s..%s" % (x.getlower(), x.getupper()) for x in vartype_content.getdimension()]), basetype_name)
   975         # Variable type is an elementary type
   975         # Variable type is an elementary type
   976         return vartype_content_name
   976         return vartype_content_name
   977     setattr(cls, "gettypeAsText", gettypeAsText)
   977     setattr(cls, "gettypeAsText", gettypeAsText)
   978 
   978 
   979     def Search(self, criteria, parent_infos=None):
   979     def Search(self, criteria, parent_infos=None):
  1378 
  1378 
  1379     def getvars(self):
  1379     def getvars(self):
  1380         vars = []
  1380         vars = []
  1381         if self.interface is not None:
  1381         if self.interface is not None:
  1382             reverse_types = {}
  1382             reverse_types = {}
  1383             for name, value in VarTypes.items():
  1383             for name, value in list(VarTypes.items()):
  1384                 reverse_types[value] = name
  1384                 reverse_types[value] = name
  1385             for varlist in self.interface.getcontent():
  1385             for varlist in self.interface.getcontent():
  1386                 vars.append((reverse_types[varlist.getLocalTag()], varlist))
  1386                 vars.append((reverse_types[varlist.getLocalTag()], varlist))
  1387         return vars
  1387         return vars
  1388     setattr(cls, "getvars", getvars)
  1388     setattr(cls, "getvars", getvars)