netmsgs  1.2.2
RoadNarrows Robotics Network Messaging Package
NetMsgs.NetMsgsGenPy.NetMsgsGenPy Class Reference

Public Member Functions

def __init__ (self, xml, pyfilepath, kwargs)
 
def AugmentXmlDB (self)
 
def Pass0 (self)
 
def GenSource (self)
 
def GenPrologue (self, fp)
 
def GenMsgIds (self, fp)
 
def GenFTDict (self, fp)
 
def GenMsgDefSet (self, fp)
 
def GenMsgDef (self, name, msgid, msgdef, dentry)
 
def GenFieldDef (self, name, fid, fdef, dentry)
 
def GenClass (self, fp)
 
def GenEpilogue (self, fp)
 
def WriteFTDict (self, fp)
 
def WriteMsgDefSet (self, fp)
 
def IsDeprecated (self, xdef)
 
def BaseXType (self, ftype)
 
def GetLineage (self, xtype)
 
def EvalNum (sefl, args)
 
def PrettyPrintTopComment (self, fp)
 
def PrettyPrintMajorDivComment (self, fp, comment)
 
def PrettyPrintMinorDivComment (self, fp, comment)
 
def PrettyPrintBriefComment (self, fp, brief)
 

Public Attributes

 mXml
 parsed xml instance
 
 mPyFilePath
 output .h header file name
 
 mDebug
 debug level
 
 mHungarian
 do [not] prepend RN Hungarian notation to message fields
 
 mPyBaseName
 output .h header file basename
 
 mFTDict
 extended field type dictionary
 
 mMsgDefSet
 message definition set dictionary
 

Detailed Description

RoadNarrows Net Messages Python Source Generator Class.

    The NetMsgsGenPy class reads the post-parsed database of a
    NetMsgsXmlParser class instance and generates a Python .py file. The
    python file expects the NetMsgs run-time python library.

Definition at line 79 of file NetMsgsGenPy.py.

Constructor & Destructor Documentation

def NetMsgs.NetMsgsGenPy.NetMsgsGenPy.__init__ (   self,
  xml,
  pyfilepath,
  kwargs 
)
Initialize NetMsgsGenPy instance.

Parameters:
  xml         - NetMsgsXMLParser class instance.
  pyfilepath  - Generated output python file.
  kwargs      - Optional keyword arguments.
                  debug     - Set debugging level: 0 == off, 1, 2, 3.

Definition at line 88 of file NetMsgsGenPy.py.

88  def __init__(self, xml, pyfilepath, **kwargs):
89  """ Initialize NetMsgsGenPy instance.
90 
91  Parameters:
92  xml - NetMsgsXMLParser class instance.
93  pyfilepath - Generated output python file.
94  kwargs - Optional keyword arguments.
95  debug - Set debugging level: 0 == off, 1, 2, 3.
96  """
97  ## parsed xml instance
98  self.mXml = xml
99 
100  ## output .h header file name
101  self.mPyFilePath = pyfilepath
102 
103  ## debug level
104  self.mDebug = kwargs.get('debug', 0)
105 
106  ## do [not] prepend RN Hungarian notation to message fields
107  self.mHungarian = kwargs.get('hungarian', False)
108 
109  ## output .h header file basename
110  self.mPyBaseName = os.path.basename(self.mPyFilePath)
111 
112  ## extended field type dictionary
113  self.mFTDict = {}
114 
115  ## message definition set dictionary
116  self.mMsgDefSet = {}
117 
118  self.AugmentXmlDB()
mMsgDefSet
message definition set dictionary
mFTDict
extended field type dictionary
mPyBaseName
output .h header file basename
def __init__(self, xml, pyfilepath, kwargs)
Definition: NetMsgsGenPy.py:88
mHungarian
do [not] prepend RN Hungarian notation to message fields
mPyFilePath
output .h header file name

Member Function Documentation

def NetMsgs.NetMsgsGenPy.NetMsgsGenPy.AugmentXmlDB (   self)
Augument the XML database of parsed XML values with python generated
parameters.

Definition at line 122 of file NetMsgsGenPy.py.

References NetMsgs.NetMsgsGenPy.NetMsgsGenPy.mXml, NetMsgs.NetMsgsGenC.NetMsgsGenC.mXml, NetMsgs.NetMsgsGenPy.NetMsgsGenPy.Pass0(), and NetMsgs.NetMsgsGenC.NetMsgsGenC.Pass0().

122  def AugmentXmlDB(self):
123  """ Augument the XML database of parsed XML values with python generated
124  parameters.
125  """
126  self.mXml['genpy'] = { }
127  encoding = self.mXml['netmsgs']['encoding'].lower()
128  if not encoding:
129  encoding = 'itv'
130  if encoding == 'itv':
131  self.mXml['genpy']['encoding_prefix'] = encoding.upper()
132  else:
133  self.mXml['genpy']['encoding_prefix'] = encoding.capitalize()
134 
135  endian = self.mXml['netmsgs']['endian'].lower()
136  if not endian:
137  endian = 'big'
138  self.mXml['genpy']['endian_desc'] = endian + '-endian'
139  self.mXml['genpy']['endian_enum'] = 'NMEndian'+endian.capitalize()
140 
141  # perform pass 0 through database, setting C specific information
142  self.Pass0()
def NetMsgs.NetMsgsGenPy.NetMsgsGenPy.BaseXType (   self,
  ftype 
)
Returns the base XML field type for the given field type.

Parameters:
  ftype   - (Derived) field type.

   Return:
  Base field type.

Definition at line 640 of file NetMsgsGenPy.py.

References NetMsgs.NetMsgsGenPy.NetMsgsGenPy.mXml, and NetMsgs.NetMsgsGenC.NetMsgsGenC.mXml.

Referenced by NetMsgs.NetMsgsGenPy.NetMsgsGenPy.GenFieldDef(), NetMsgs.NetMsgsGenPy.NetMsgsGenPy.GenFTDict(), and NetMsgs.NetMsgsGenPy.NetMsgsGenPy.GenMsgDef().

640  def BaseXType(self, ftype):
641  """ Returns the base XML field type for the given field type.
642 
643  Parameters:
644  ftype - (Derived) field type.
645 
646  Return:
647  Base field type.
648  """
649  if ftype == 'pad':
650  return ftype
651  while not nmBase.NMBuiltInFieldTypes.has_key(ftype):
652  if self.mXml['field_types'].has_key(ftype):
653  ftype = self.mXml['field_types'][ftype]['ftype']
654  else:
655  raise nmBase.NetMsgsError("Error: %s is not a defined ftype" % (ftype))
656  return ftype
def NetMsgs.NetMsgsGenPy.NetMsgsGenPy.EvalNum (   sefl,
  args 
)
Evaluate a summation of terms.

Paramters:
  args      List of summation terms, with each term one of:
              an equation, string, number

Examples:
  5                     -> '5'
  5, '(3 * 10)'         -> '35'
  5, 'MY_MAX', '1*255'  -> '300+MY_MAX'

Return:
  Returns string of the evaluated results.

Definition at line 682 of file NetMsgsGenPy.py.

682  def EvalNum(sefl, *args):
683  """ Evaluate a summation of terms.
684 
685  Paramters:
686  args List of summation terms, with each term one of:
687  an equation, string, number
688 
689  Examples:
690  5 -> '5'
691  5, '(3 * 10)' -> '35'
692  5, 'MY_MAX', '1*255' -> '300+MY_MAX'
693 
694  Return:
695  Returns string of the evaluated results.
696  """
697  n = 0
698  s = ''
699  for arg in args:
700  if arg is None:
701  continue
702  elif type(arg) == str:
703  arg = arg.replace("NMFVAL_LEN_MAX_STRING", "255") # built-in
704  arg = arg.replace("NMFVAL_LEN_MAX_VECTOR", "255") # built-in
705  else:
706  arg = repr(arg)
707  try:
708  n += eval(arg)
709  except:
710  s += '+(' + arg + ')'
711  n = int(n)
712  return repr(n) + s
def NetMsgs.NetMsgsGenPy.NetMsgsGenPy.GenClass (   self,
  fp 
)
Generate derived NetMsgs class.

Parameters:
  fp    - Opened output file pointer.

Definition at line 523 of file NetMsgsGenPy.py.

References NetMsgs.NetMsgsGenPy.NetMsgsGenPy.mXml, NetMsgs.NetMsgsGenC.NetMsgsGenC.mXml, NetMsgs.NetMsgsGenPy.NetMsgsGenPy.PrettyPrintMajorDivComment(), and NetMsgs.NetMsgsGenC.NetMsgsGenC.PrettyPrintMajorDivComment().

Referenced by NetMsgs.NetMsgsGenPy.NetMsgsGenPy.GenSource().

523  def GenClass(self, fp):
524  """ Generate derived NetMsgs class.
525 
526  Parameters:
527  fp - Opened output file pointer.
528  """
529  ns = self.mXml['meta']['ns']
530  if not ns:
531  ns = '_App'
532  classname = "%sNetMsgs" % (ns)
533  if self.mXml['netmsgs']['encoding'] == 'flat':
534  baseclass = 'NetMsgs'
535  else:
536  pre = self.mXml['genpy']['encoding_prefix']
537  baseclass = 'NetMsgs%s' % pre
538  msgdefset = "%sSetMsgDef" % (ns)
539  msgsetname = "%sMsgSet" % (ns)
540  self.PrettyPrintMajorDivComment(fp, "CLASS: %s" % (classname))
541  fp.write("""\
542 class %s(%s):
543  \"\"\" %s NetMsgs Class. \"\"\"
544 
545  #--
546  def __init__(self, **kwargs):
547  \"\"\" %s NetMsgs initialization. \"\"\"
548  kwargs['msgsetname'] = '%s'
549  %s.__init__(self, %s, **kwargs)
550  ##
551 ##""" % (classname, baseclass, ns, ns, msgsetname, baseclass, msgdefset))
def PrettyPrintMajorDivComment(self, fp, comment)
def NetMsgs.NetMsgsGenPy.NetMsgsGenPy.GenEpilogue (   self,
  fp 
)
Generate .py file epilogue.

Parameters:
  fp    - Opened output file pointer.

Definition at line 555 of file NetMsgsGenPy.py.

References NetMsgs.NetMsgsGenPy.NetMsgsGenPy.mXml, and NetMsgs.NetMsgsGenC.NetMsgsGenC.mXml.

Referenced by NetMsgs.NetMsgsGenPy.NetMsgsGenPy.GenSource().

555  def GenEpilogue(self, fp):
556  """ Generate .py file epilogue.
557 
558  Parameters:
559  fp - Opened output file pointer.
560  """
561  epilogue = self.mXml['meta']['python']['epilogue']
562  if epilogue:
563  fp.write("\n\n%s" % (epilogue))
564  fp.write("\n")
def NetMsgs.NetMsgsGenPy.NetMsgsGenPy.GenFieldDef (   self,
  name,
  fid,
  fdef,
  dentry 
)
Generate field definition dictionary entry.

fielddef ::=
    fielddef_simple
  | fielddef_string
  | fielddef_struct
  | fielddef_vector

fielddef_simple ::=
  fielddef_common ',' ['min:' m ',' 'max:' M ',' 'const:' C]

fielddef_string ::=
  fielddef_common ',' ['const:' C]

fielddef_struct ::=
  fielddef_common ','  'msgdef:' '{' msgdef '}'

fielddef_vector ::=
  fielddef_common ','  'vdef:' '{' fielddef '}'

fielddef_common ::=
  'name:' name ',' 'fid:' fid ',' 'ftype:' ftype ',' 'max_count:' n

name ::= (* field string name *)

msgid ::= (* field id enumeration *)

ftype ::= (* field type code *)

max_count ::=  (* number of vector items, string characters or 1 for
                  simpel types *)

Parameters:
  name    - Name keyword value.
  fid     - Field id keyword value.
  fdef    - XML field definition.
  deentry - Output field definition entry.

Definition at line 395 of file NetMsgsGenPy.py.

References NetMsgs.NetMsgsGenPy.NetMsgsGenPy.BaseXType(), NetMsgs.NetMsgsGenPy.NetMsgsGenPy.GenFieldDef(), NetMsgs.NetMsgsGenPy.NetMsgsGenPy.GenMsgDef(), NetMsgs.NetMsgsGenPy.NetMsgsGenPy.GetLineage(), NetMsgs.NetMsgsGenPy.NetMsgsGenPy.mFTDict, NetMsgs.NetMsgsGenPy.NetMsgsGenPy.mXml, and NetMsgs.NetMsgsGenC.NetMsgsGenC.mXml.

Referenced by NetMsgs.NetMsgsGenPy.NetMsgsGenPy.GenFieldDef(), NetMsgs.NetMsgsGenPy.NetMsgsGenPy.GenFTDict(), and NetMsgs.NetMsgsGenPy.NetMsgsGenPy.GenMsgDef().

395  def GenFieldDef(self, name, fid, fdef, dentry):
396  """ Generate field definition dictionary entry.
397 
398  fielddef ::=
399  fielddef_simple
400  | fielddef_string
401  | fielddef_struct
402  | fielddef_vector
403 
404  fielddef_simple ::=
405  fielddef_common ',' ['min:' m ',' 'max:' M ',' 'const:' C]
406 
407  fielddef_string ::=
408  fielddef_common ',' ['const:' C]
409 
410  fielddef_struct ::=
411  fielddef_common ',' 'msgdef:' '{' msgdef '}'
412 
413  fielddef_vector ::=
414  fielddef_common ',' 'vdef:' '{' fielddef '}'
415 
416  fielddef_common ::=
417  'name:' name ',' 'fid:' fid ',' 'ftype:' ftype ',' 'max_count:' n
418 
419  name ::= (* field string name *)
420 
421  msgid ::= (* field id enumeration *)
422 
423  ftype ::= (* field type code *)
424 
425  max_count ::= (* number of vector items, string characters or 1 for
426  simpel types *)
427 
428  Parameters:
429  name - Name keyword value.
430  fid - Field id keyword value.
431  fdef - XML field definition.
432  deentry - Output field definition entry.
433  """
434  ns = self.mXml['meta']['ns']
435  xtype = fdef['ftype']
436  base_xtype = self.BaseXType(xtype)
437 
438  # field definition common parameters
439  dentry['name'] = name
440  dentry['fid'] = fid
441  dentry['ftype'] = nmBase.NMBuiltInFieldTypes[base_xtype]['code']
442  dentry['max_count'] = 1
443 
444  # derived definition
445  if xtype != base_xtype:
446  lineage = self.GetLineage(xtype)
447  eve = lineage[0] # mother of all
448  ftentry = self.mFTDict[eve]
449  # in-situ definition
450  else:
451  eve = None
452 
453  # structure field definition
454  if base_xtype == 'struct':
455  nomsgid = "@%sMsgId.NoId" % (ns)
456  subname = name + '_struct'
457 
458  # derived struct
459  if eve:
460  dentry['msgdef'] = "@%sExtFType%s" % (ns, eve)
461  # in-situ definition
462  else:
463  dentry['msgdef'] = {}
464  self.GenMsgDef(subname, nomsgid, fdef, dentry['msgdef'])
465 
466  # vector field definition
467  elif base_xtype == 'vector':
468  nofid = "@nmBase.NMFIdNone"
469  subname = name + '_item'
470 
471  # derived vector
472  if eve:
473  dentry['max_count'] = ftentry['max_count']
474  dentry['vdef'] = "@%sExtFType%s['vdef']" % (ns, eve)
475  # in-situ definition
476  else:
477  dentry['max_count'] = '@' + fdef.get('size', 'nmBase.NMVectorMaxCount')
478  # create a vector item definition
479  vdef = {}
480  vdef['name'] = subname
481  vdef['ftype'] = fdef['vtype']
482  vdef['fields'] = fdef.get('fields', {})
483  dentry['vdef'] = {}
484  self.GenFieldDef(subname, nofid, vdef, dentry['vdef'])
485 
486  # string field definition
487  elif base_xtype == 'string':
488  # derived string
489  if eve:
490  dentry['max_count'] = ftentry['max_count']
491  if ftentry.has_key('const'):
492  dentry['const'] = ftentry['const']
493  # in-situ definition
494  else:
495  dentry['max_count'] = '@' + fdef.get('size', 'nmBase.NMStringMaxCount')
496  if fdef.has_key('const'):
497  dentry['const'] = '@' + fdef['const']
498 
499  # padding definition
500  elif xtype == 'pad':
501  dentry['max_count'] = '@' + fdef.get('count', 'nmBase.NMPadDftCount')
502 
503  # simple field definition
504  else:
505  # derived simple
506  if eve:
507  if ftentry.has_key('min'):
508  dentry['min'] = ftentry['min']
509  if ftentry.has_key('max'):
510  dentry['max'] = ftentry['max']
511  if ftentry.has_key('const'):
512  dentry['const'] = ftentry['const']
513  # in-situ definition
514  else:
515  if fdef.has_key('min'):
516  dentry['min'] = '@' + fdef['min']
517  if fdef.has_key('max'):
518  dentry['max'] = '@' + fdef['max']
519  if fdef.has_key('const'):
520  dentry['const'] = '@' + fdef['const']
mFTDict
extended field type dictionary
def GenMsgDef(self, name, msgid, msgdef, dentry)
def GenFieldDef(self, name, fid, fdef, dentry)
def NetMsgs.NetMsgsGenPy.NetMsgsGenPy.GenFTDict (   self,
  fp 
)
Generate field types dictionary.

genftdict ::=
  ns+'ExtFieldTypes' '=' '{' ftdict '}'

ftdict ::=
    ftdict_item
  | ftdict ',' ftdict_item

ftdict_item ::=
    ftid ':' '{' msgdef '}'
  | ftid ':' '{' fielddef '}'

Parameters:
  fp    - Opened output file pointer.

Definition at line 248 of file NetMsgsGenPy.py.

References NetMsgs.NetMsgsGenPy.NetMsgsGenPy.BaseXType(), NetMsgs.NetMsgsGenPy.NetMsgsGenPy.GenFieldDef(), NetMsgs.NetMsgsGenPy.NetMsgsGenPy.GenMsgDef(), NetMsgs.NetMsgsGenPy.NetMsgsGenPy.IsDeprecated(), NetMsgs.NetMsgsGenC.NetMsgsGenC.IsDeprecated(), NetMsgs.NetMsgsGenPy.NetMsgsGenPy.mFTDict, NetMsgs.NetMsgsGenPy.NetMsgsGenPy.mXml, NetMsgs.NetMsgsGenC.NetMsgsGenC.mXml, NetMsgs.NetMsgsGenPy.NetMsgsGenPy.PrettyPrintMajorDivComment(), NetMsgs.NetMsgsGenC.NetMsgsGenC.PrettyPrintMajorDivComment(), and NetMsgs.NetMsgsGenPy.NetMsgsGenPy.WriteFTDict().

Referenced by NetMsgs.NetMsgsGenPy.NetMsgsGenPy.GenSource().

248  def GenFTDict(self, fp):
249  """ Generate field types dictionary.
250 
251  genftdict ::=
252  ns+'ExtFieldTypes' '=' '{' ftdict '}'
253 
254  ftdict ::=
255  ftdict_item
256  | ftdict ',' ftdict_item
257 
258  ftdict_item ::=
259  ftid ':' '{' msgdef '}'
260  | ftid ':' '{' fielddef '}'
261 
262  Parameters:
263  fp - Opened output file pointer.
264  """
265  ns = self.mXml['meta']['ns']
266  section = 'field_types'
267  if len(self.mXml[section][nmBase.NMKeyOrder]) == 0:
268  return
269 
270  # generate dictionary
271  self.mFTDict = {}
272  self.mFTDict[nmBase.NMKeyOrder] = []
273  nomsgid = "@%sMsgId.NoId" % (ns)
274  nofid = "@nmBase.NMFIdNone"
275  for ftid in self.mXml[section][nmBase.NMKeyOrder]:
276  ftdef = self.mXml[section][ftid]
277  if not self.IsDeprecated(ftdef):
278  xtype = ftdef['ftype']
279  base_xtype = self.BaseXType(xtype)
280  self.mFTDict[ftid] = {}
281  self.mFTDict[nmBase.NMKeyOrder] += [ftid]
282  if base_xtype == 'struct':
283  self.GenMsgDef(ftid, nomsgid, ftdef, self.mFTDict[ftid])
284  else:
285  self.GenFieldDef(ftid, nofid, ftdef, self.mFTDict[ftid])
286 
287  # generate output
288  self.PrettyPrintMajorDivComment(fp, "Extended Field Types")
289  self.WriteFTDict(fp)
def PrettyPrintMajorDivComment(self, fp, comment)
mFTDict
extended field type dictionary
def GenMsgDef(self, name, msgid, msgdef, dentry)
def GenFieldDef(self, name, fid, fdef, dentry)
def NetMsgs.NetMsgsGenPy.NetMsgsGenPy.GenMsgDef (   self,
  name,
  msgid,
  msgdef,
  dentry 
)
Generate message definition dictionary entry.

msgdef ::=
  msgdef_common ',' 'fielddef:' '[' fdeflist ']'

msgdef_common ::=
  'name:' name ',' 'msgid:' msgid ',' 'max_count:' n

fdeflist ::=
  '{' fielddef '}'
  fdeflist ',' '{' fielddef '}'

name ::= (* message string name *)

msgid ::= (* message id enumeration *)

max_count ::= (* number of fields in message definition *)

Parameters:
  name    - Name keyword value.
  msgid   - Message id keyword value.
  msgdef  - XML message definition.
  deentry - Output message definition entry.

Definition at line 332 of file NetMsgsGenPy.py.

References NetMsgs.NetMsgsGenPy.NetMsgsGenPy.BaseXType(), NetMsgs.NetMsgsGenPy.NetMsgsGenPy.GenFieldDef(), NetMsgs.NetMsgsGenPy.NetMsgsGenPy.GetLineage(), NetMsgs.NetMsgsGenPy.NetMsgsGenPy.IsDeprecated(), NetMsgs.NetMsgsGenC.NetMsgsGenC.IsDeprecated(), NetMsgs.NetMsgsGenPy.NetMsgsGenPy.mFTDict, NetMsgs.NetMsgsGenPy.NetMsgsGenPy.mXml, and NetMsgs.NetMsgsGenC.NetMsgsGenC.mXml.

Referenced by NetMsgs.NetMsgsGenPy.NetMsgsGenPy.GenFieldDef(), NetMsgs.NetMsgsGenPy.NetMsgsGenPy.GenFTDict(), and NetMsgs.NetMsgsGenPy.NetMsgsGenPy.GenMsgDefSet().

332  def GenMsgDef(self, name, msgid, msgdef, dentry):
333  """ Generate message definition dictionary entry.
334 
335  msgdef ::=
336  msgdef_common ',' 'fielddef:' '[' fdeflist ']'
337 
338  msgdef_common ::=
339  'name:' name ',' 'msgid:' msgid ',' 'max_count:' n
340 
341  fdeflist ::=
342  '{' fielddef '}'
343  fdeflist ',' '{' fielddef '}'
344 
345  name ::= (* message string name *)
346 
347  msgid ::= (* message id enumeration *)
348 
349  max_count ::= (* number of fields in message definition *)
350 
351  Parameters:
352  name - Name keyword value.
353  msgid - Message id keyword value.
354  msgdef - XML message definition.
355  deentry - Output message definition entry.
356  """
357  ns = self.mXml['meta']['ns']
358  xtype = msgdef['ftype']
359  base_xtype = self.BaseXType(xtype)
360 
361  # definition parameters
362  dentry['name'] = name
363  dentry['msgid'] = msgid
364  dentry['ftype'] = nmBase.NMBuiltInFieldTypes[base_xtype]['code']
365  dentry['max_count'] = 0
366  dentry['fielddef'] = []
367 
368  # derived definition
369  if xtype != base_xtype:
370  lineage = self.GetLineage(xtype)
371  eve = lineage[0] # mother of all
372  ftentry = self.mFTDict[eve]
373  dentry['max_count'] = ftentry['max_count']
374  dentry['fielddef'] = "@%sExtFType%s['fielddef']" % (ns, eve)
375 
376  # in-situ definition
377  else:
378  if not msgdef.has_key('fields'):
379  return
380  fields = msgdef['fields']
381  max_count = 0
382  fid = 1
383  for fname in fields[nmBase.NMKeyOrder]:
384  fdef = fields[fname]
385  if not self.IsDeprecated(fdef):
386  d = {}
387  self.GenFieldDef(fname, fid, fdef, d)
388  dentry['fielddef'] += [d]
389  max_count += 1
390  fid += 1
391  dentry['max_count'] = max_count
mFTDict
extended field type dictionary
def GenMsgDef(self, name, msgid, msgdef, dentry)
def GenFieldDef(self, name, fid, fdef, dentry)
def NetMsgs.NetMsgsGenPy.NetMsgsGenPy.GenMsgDefSet (   self,
  fp 
)
Generate message definition set.

genmsgdefset ::=
  ns+'MsgDefSet' '=' '{' msgdefset '}'

msgdefset ::=
    msgdef_item
  | msgdefset ',' msgdef_item

msgdef_item ::=
    msgid ':' '{' msgdef '}'

Parameters:
  fp    - Opened output file pointer.

Definition at line 293 of file NetMsgsGenPy.py.

References NetMsgs.NetMsgsGenPy.NetMsgsGenPy.GenMsgDef(), NetMsgs.NetMsgsGenPy.NetMsgsGenPy.IsDeprecated(), NetMsgs.NetMsgsGenC.NetMsgsGenC.IsDeprecated(), NetMsgs.NetMsgsGenPy.NetMsgsGenPy.mMsgDefSet, NetMsgs.NetMsgsGenPy.NetMsgsGenPy.mXml, NetMsgs.NetMsgsGenC.NetMsgsGenC.mXml, NetMsgs.NetMsgsGenPy.NetMsgsGenPy.PrettyPrintMajorDivComment(), NetMsgs.NetMsgsGenC.NetMsgsGenC.PrettyPrintMajorDivComment(), and NetMsgs.NetMsgsGenPy.NetMsgsGenPy.WriteMsgDefSet().

Referenced by NetMsgs.NetMsgsGenPy.NetMsgsGenPy.GenSource().

293  def GenMsgDefSet(self, fp):
294  """ Generate message definition set.
295 
296  genmsgdefset ::=
297  ns+'MsgDefSet' '=' '{' msgdefset '}'
298 
299  msgdefset ::=
300  msgdef_item
301  | msgdefset ',' msgdef_item
302 
303  msgdef_item ::=
304  msgid ':' '{' msgdef '}'
305 
306  Parameters:
307  fp - Opened output file pointer.
308  """
309  ns = self.mXml['meta']['ns']
310  section = 'msg_types'
311  if len(self.mXml[section][nmBase.NMKeyOrder]) == 0:
312  return
313 
314  # generate dictionary
315  self.mMsgDefSet = {}
316  self.mMsgDefSet[nmBase.NMKeyOrder] = []
317  for msgid in self.mXml[section][nmBase.NMKeyOrder]:
318  msgdef = self.mXml[section][msgid]
319  if not self.IsDeprecated(msgdef):
320  xtype = msgdef['ftype']
321  enum = "@%sMsgId.%s" % (ns, msgid)
322  self.mMsgDefSet[nmBase.NMKeyOrder] += [enum]
323  self.mMsgDefSet[enum] = {}
324  self.GenMsgDef(msgid, enum, msgdef, self.mMsgDefSet[enum])
325 
326  # generate output
327  self.PrettyPrintMajorDivComment(fp, "Message Definition Set")
328  self.WriteMsgDefSet(fp)
mMsgDefSet
message definition set dictionary
def PrettyPrintMajorDivComment(self, fp, comment)
def GenMsgDef(self, name, msgid, msgdef, dentry)
def NetMsgs.NetMsgsGenPy.NetMsgsGenPy.GenMsgIds (   self,
  fp 
)
Generate Message Id enumeration.

Parameters:
  fp    - Opened output file pointer.

Definition at line 210 of file NetMsgsGenPy.py.

References NetMsgs.NetMsgsGenPy.NetMsgsGenPy.IsDeprecated(), NetMsgs.NetMsgsGenC.NetMsgsGenC.IsDeprecated(), NetMsgs.NetMsgsGenPy.NetMsgsGenPy.mXml, NetMsgs.NetMsgsGenC.NetMsgsGenC.mXml, NetMsgs.NetMsgsGenPy.NetMsgsGenPy.PrettyPrintMajorDivComment(), and NetMsgs.NetMsgsGenC.NetMsgsGenC.PrettyPrintMajorDivComment().

Referenced by NetMsgs.NetMsgsGenPy.NetMsgsGenPy.GenSource().

210  def GenMsgIds(self, fp):
211  """ Generate Message Id enumeration.
212 
213  Parameters:
214  fp - Opened output file pointer.
215  """
216  ns = self.mXml['meta']['ns']
217  msgorder = self.mXml['msg_types'][nmBase.NMKeyOrder]
218  if len(msgorder) == 0:
219  return
220  self.PrettyPrintMajorDivComment(fp, "%s Message Id Enumeration" % (ns))
221  fp.write("class %sMsgId:\n" % ns)
222  fp.write(' """ %s Message Id Enumeration class. """\n' % ns)
223  n = 0
224  nmBase.PrettyPrintCols(fp, 0,
225  2, 'NoId',
226  34, '= ' + repr(n),
227  42, '# no message id\n')
228  for msgid in msgorder:
229  n += 1
230  msgdef = self.mXml['msg_types'][msgid]
231  if self.IsDeprecated(msgdef):
232  comment = "%s (deprecated)" % (msgid)
233  else:
234  comment = "%s" % (msgid)
235  nmBase.PrettyPrintCols(fp, 0,
236  2, msgid,
237  34, '= ' + repr(n),
238  42, "# %s\n" % (comment))
239  n += 1
240  nmBase.PrettyPrintCols(fp, 0,
241  2, 'NumOf',
242  34, '= ' + repr(n),
243  42, '# number of message ids\n')
244  fp.write("##\n\n")
def PrettyPrintMajorDivComment(self, fp, comment)
def NetMsgs.NetMsgsGenPy.NetMsgsGenPy.GenPrologue (   self,
  fp 
)
Generate .py file prologue.

Prologue includes core imports plus any prologue specified
in the XML file.

Parameters:
  fp    - Opened output file pointer.

Definition at line 182 of file NetMsgsGenPy.py.

References NetMsgs.NetMsgsGenPy.NetMsgsGenPy.mXml, and NetMsgs.NetMsgsGenC.NetMsgsGenC.mXml.

Referenced by NetMsgs.NetMsgsGenPy.NetMsgsGenPy.GenSource().

182  def GenPrologue(self, fp):
183  """ Generate .py file prologue.
184 
185  Prologue includes core imports plus any prologue specified
186  in the XML file.
187 
188  Parameters:
189  fp - Opened output file pointer.
190  """
191  pre = self.mXml['genpy']['encoding_prefix']
192  module = "NetMsgs.NetMsgsLib%s" % pre
193  if self.mXml['netmsgs']['encoding'] == 'flat':
194  baseclass = 'NetMsgs'
195  else:
196  baseclass = 'NetMsgs%s' % pre
197  prologue = self.mXml['meta']['python']['prologue']
198  fp.write(
199 """
200 
201 import NetMsgs.NetMsgsBase as nmBase
202 from %s import %s
203 
204 """ % (module, baseclass))
205  if prologue:
206  fp.write("%s\n\n" % (prologue))
def NetMsgs.NetMsgsGenPy.NetMsgsGenPy.GenSource (   self)
Generate python .py source file.

Exceptions:
  Raises NetMsgError exception on error. 

Definition at line 160 of file NetMsgsGenPy.py.

References NetMsgs.NetMsgsGenPy.NetMsgsGenPy.GenClass(), NetMsgs.NetMsgsGenPy.NetMsgsGenPy.GenEpilogue(), NetMsgs.NetMsgsGenPy.NetMsgsGenPy.GenFTDict(), NetMsgs.NetMsgsGenPy.NetMsgsGenPy.GenMsgDefSet(), NetMsgs.NetMsgsGenPy.NetMsgsGenPy.GenMsgIds(), NetMsgs.NetMsgsGenPy.NetMsgsGenPy.GenPrologue(), NetMsgs.NetMsgsGenPy.NetMsgsGenPy.mPyFilePath, NetMsgs.NetMsgsGenPy.NetMsgsGenPy.PrettyPrintTopComment(), and NetMsgs.NetMsgsGenC.NetMsgsGenC.PrettyPrintTopComment().

160  def GenSource(self):
161  """ Generate python .py source file.
162 
163  Exceptions:
164  Raises NetMsgError exception on error.
165  """
166  # open python file for writing
167  try:
168  fp = open(self.mPyFilePath, 'w')
169  except IOError, err:
170  raise nmBase.NetMsgsError("Error: %s" % (err))
171  self.PrettyPrintTopComment(fp)
172  self.GenPrologue(fp)
173  self.GenMsgIds(fp)
174  self.GenFTDict(fp)
175  self.GenMsgDefSet(fp)
176  self.GenClass(fp)
177  self.GenEpilogue(fp)
178  fp.close()
mPyFilePath
output .h header file name
def NetMsgs.NetMsgsGenPy.NetMsgsGenPy.GetLineage (   self,
  xtype 
)
Get lineage of XML field type

Parameters:
  xtype   - XML field type

Return:
  List of ancestors order from base to nearest to xtype.

Definition at line 660 of file NetMsgsGenPy.py.

References NetMsgs.NetMsgsGenPy.NetMsgsGenPy.mXml, and NetMsgs.NetMsgsGenC.NetMsgsGenC.mXml.

Referenced by NetMsgs.NetMsgsGenPy.NetMsgsGenPy.GenFieldDef(), and NetMsgs.NetMsgsGenPy.NetMsgsGenPy.GenMsgDef().

660  def GetLineage(self, xtype):
661  """ Get lineage of XML field type
662 
663  Parameters:
664  xtype - XML field type
665 
666  Return:
667  List of ancestors order from base to nearest to xtype.
668  """
669  lineage = []
670  if xtype == 'pad':
671  return lineage
672  while not nmBase.NMBuiltInFieldTypes.has_key(xtype):
673  if self.mXml['field_types'].has_key(xtype):
674  lineage = [xtype] + lineage
675  xtype = self.mXml['field_types'][xtype]['ftype']
676  else:
677  raise nmBase.NetMsgsError("Error: %s is not a defined ftype" % (xtype))
678  return lineage
def NetMsgs.NetMsgsGenPy.NetMsgsGenPy.IsDeprecated (   self,
  xdef 
)
Returns True (False) is definition is (not) deprecated.

Parameters:
  xdef      - XML ftypedef, msgdef, or fielddef XML specification.

Return:
  True or False.

Definition at line 623 of file NetMsgsGenPy.py.

Referenced by NetMsgs.NetMsgsGenPy.NetMsgsGenPy.GenFTDict(), NetMsgs.NetMsgsGenPy.NetMsgsGenPy.GenMsgDef(), NetMsgs.NetMsgsGenPy.NetMsgsGenPy.GenMsgDefSet(), and NetMsgs.NetMsgsGenPy.NetMsgsGenPy.GenMsgIds().

623  def IsDeprecated(self, xdef):
624  """ Returns True (False) is definition is (not) deprecated.
625 
626  Parameters:
627  xdef - XML ftypedef, msgdef, or fielddef XML specification.
628 
629  Return:
630  True or False.
631  """
632  dispo = xdef.get('disposition', 'active')
633  if dispo == 'deprecated':
634  return True
635  else:
636  return False
def NetMsgs.NetMsgsGenPy.NetMsgsGenPy.Pass0 (   self)
Make initial pass through the XML database and augument with
specific python information.

No generated python code is written to file output.

Definition at line 146 of file NetMsgsGenPy.py.

Referenced by NetMsgs.NetMsgsGenPy.NetMsgsGenPy.AugmentXmlDB().

146  def Pass0(self):
147  """ Make initial pass through the XML database and augument with
148  specific python information.
149 
150  No generated python code is written to file output.
151  """
152  pass
153 
154 
def NetMsgs.NetMsgsGenPy.NetMsgsGenPy.PrettyPrintBriefComment (   self,
  fp,
  brief 
)
Print doxygen brief comment block.

Parameters:
  fp      - Opened output file pointer.
  brief   - Brief comment.

Definition at line 795 of file NetMsgsGenPy.py.

Referenced by NetMsgs.NetMsgsGenPy.NetMsgsGenPy.WriteFTDict(), and NetMsgs.NetMsgsGenPy.NetMsgsGenPy.WriteMsgDefSet().

795  def PrettyPrintBriefComment(self, fp, brief):
796  """ Print doxygen brief comment block.
797 
798  Parameters:
799  fp - Opened output file pointer.
800  brief - Brief comment.
801  """
802  fp.write("""\
803 ## %s
804 """ % (brief))
def PrettyPrintBriefComment(self, fp, brief)
def NetMsgs.NetMsgsGenPy.NetMsgsGenPy.PrettyPrintMajorDivComment (   self,
  fp,
  comment 
)
Prints major file division comment block.

Parameters:
  fp          - Opened output file pointer.
  comment     - Major division comment line.

Definition at line 761 of file NetMsgsGenPy.py.

Referenced by NetMsgs.NetMsgsGenPy.NetMsgsGenPy.GenClass(), NetMsgs.NetMsgsGenPy.NetMsgsGenPy.GenFTDict(), NetMsgs.NetMsgsGenPy.NetMsgsGenPy.GenMsgDefSet(), and NetMsgs.NetMsgsGenPy.NetMsgsGenPy.GenMsgIds().

761  def PrettyPrintMajorDivComment(self, fp, comment):
762  """ Prints major file division comment block.
763 
764  Parameters:
765  fp - Opened output file pointer.
766  comment - Major division comment line.
767  """
768  fp.write("""\
769 
770 # -----------------------------------------------------------------------------
771 # %s
772 # -----------------------------------------------------------------------------
773 
774 """ % (comment))
def PrettyPrintMajorDivComment(self, fp, comment)
def NetMsgs.NetMsgsGenPy.NetMsgsGenPy.PrettyPrintMinorDivComment (   self,
  fp,
  comment 
)
Prints minor file division comment block.

Parameters:
  fp          - Opened output file pointer.
  comment     - Minor division comment line.

Definition at line 778 of file NetMsgsGenPy.py.

778  def PrettyPrintMinorDivComment(self, fp, comment):
779  """ Prints minor file division comment block.
780 
781  Parameters:
782  fp - Opened output file pointer.
783  comment - Minor division comment line.
784  """
785  fp.write("""\
786 
787 # . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
788 # %s
789 # . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
790 
791 """ % (comment))
def PrettyPrintMinorDivComment(self, fp, comment)
def NetMsgs.NetMsgsGenPy.NetMsgsGenPy.PrettyPrintTopComment (   self,
  fp 
)
Prints source file top comment block.

Parameters:
  fp          - Opened output file pointer.

Definition at line 721 of file NetMsgsGenPy.py.

References NetMsgs.NetMsgsGenPy.NetMsgsGenPy.mPyBaseName, NetMsgs.NetMsgsGenPy.NetMsgsGenPy.mXml, and NetMsgs.NetMsgsGenC.NetMsgsGenC.mXml.

Referenced by NetMsgs.NetMsgsGenPy.NetMsgsGenPy.GenSource().

721  def PrettyPrintTopComment(self, fp):
722  """ Prints source file top comment block.
723 
724  Parameters:
725  fp - Opened output file pointer.
726  """
727  srcbasename = self.mPyBaseName
728  brief = self.mXml['meta']['brief']
729  xmlfilename = self.mXml.GetXMLFileName()
730  now = time.localtime()
731  thisdate = "%d.%02d.%02d" % (now.tm_year, now.tm_mon, now.tm_mday)
732  thistime = "%02d:%02d:%02d" % (now.tm_hour, now.tm_min, now.tm_sec)
733  fp.write("""\
734 ##############################################################################
735 #
736 # File: %s
737 #
738 
739 \"\"\"
740 %s
741 \"\"\"
742 
743 ## \\file
744 ##
745 ## \\brief %s
746 ##
747 ## \\warning This file was auto-generated on %s %s from the NetMsgs
748 ## XML specification %s.
749 ##
750 ## \\par Copyright:
751 ## (C) %d. RoadNarrows LLC
752 ## (http://www.roadnarrows.com)
753 ## All Rights Reserved
754 ##
755 ##############################################################################
756 """ % (srcbasename, srcbasename, brief, thisdate, thistime,
757  xmlfilename, now.tm_year))
mPyBaseName
output .h header file basename
def NetMsgs.NetMsgsGenPy.NetMsgsGenPy.WriteFTDict (   self,
  fp 
)
Write field types and field type dictionary.

Parameters:
  fp    - Opened output file pointer.

Definition at line 573 of file NetMsgsGenPy.py.

References NetMsgs.NetMsgsGenPy.NetMsgsGenPy.mFTDict, NetMsgs.NetMsgsGenPy.NetMsgsGenPy.mXml, NetMsgs.NetMsgsGenC.NetMsgsGenC.mXml, NetMsgs.NetMsgsGenPy.NetMsgsGenPy.PrettyPrintBriefComment(), and NetMsgs.NetMsgsGenC.NetMsgsGenC.PrettyPrintBriefComment().

Referenced by NetMsgs.NetMsgsGenPy.NetMsgsGenPy.GenFTDict().

573  def WriteFTDict(self, fp):
574  """ Write field types and field type dictionary.
575 
576  Parameters:
577  fp - Opened output file pointer.
578  """
579  ns = self.mXml['meta']['ns']
580  d = {}
581  for ftid in self.mFTDict[nmBase.NMKeyOrder]:
582  ftname = "%sExtFType%s" % (ns, ftid)
583  self.PrettyPrintBriefComment(fp, "%s Extended Field Type " % ftid)
584  nmBase.PrettyPrintAssignExpr(ftname, self.mFTDict[ftid], fp=fp)
585  fp.write("##\n\n")
586  d[ftid] = '@' + ftname
587  self.PrettyPrintBriefComment(fp, "%s Extended Field Type Dictionary" % ns)
588  dname = "%sExtFieldTypes" % (ns)
589  nmBase.PrettyPrintAssignExpr(dname, d, fp=fp)
590  fp.write("##\n\n")
mFTDict
extended field type dictionary
def PrettyPrintBriefComment(self, fp, brief)
def NetMsgs.NetMsgsGenPy.NetMsgsGenPy.WriteMsgDefSet (   self,
  fp 
)
Write message definitions and message definition set dictionary.

Parameters:
  fp    - Opened output file pointer.

Definition at line 594 of file NetMsgsGenPy.py.

References NetMsgs.NetMsgsGenPy.NetMsgsGenPy.mMsgDefSet, NetMsgs.NetMsgsGenPy.NetMsgsGenPy.mXml, NetMsgs.NetMsgsGenC.NetMsgsGenC.mXml, NetMsgs.NetMsgsGenPy.NetMsgsGenPy.PrettyPrintBriefComment(), and NetMsgs.NetMsgsGenC.NetMsgsGenC.PrettyPrintBriefComment().

Referenced by NetMsgs.NetMsgsGenPy.NetMsgsGenPy.GenMsgDefSet().

594  def WriteMsgDefSet(self, fp):
595  """ Write message definitions and message definition set dictionary.
596 
597  Parameters:
598  fp - Opened output file pointer.
599  """
600  ns = self.mXml['meta']['ns']
601  d = {}
602  for enum in self.mMsgDefSet[nmBase.NMKeyOrder]:
603  msgdef = self.mMsgDefSet[enum]
604  name = msgdef['name']
605  mname = "%sMsgDef%s" % (ns, name)
606  self.PrettyPrintBriefComment(fp, "%s Message Definition " % name)
607  nmBase.PrettyPrintAssignExpr(mname, msgdef, fp=fp)
608  fp.write("##\n\n")
609  d[enum] = '@' + mname
610  self.PrettyPrintBriefComment(fp,
611  "%s Message Definition Set Dictionary" % ns)
612  dname = "%sSetMsgDef" % (ns)
613  nmBase.PrettyPrintAssignExpr(dname, d, fp=fp)
614  fp.write("##\n\n")
mMsgDefSet
message definition set dictionary
def PrettyPrintBriefComment(self, fp, brief)

The documentation for this class was generated from the following file: