@@ -242,40 +242,66 @@ def versions_compatibility_validating(self):
242242 self .logger .info ('Parser type: %s, version %s,\t Generator version %s' ,
243243 basename (getfile (Parser ().__class__ )), parser_origin , self .get_version )
244244
245+ def get_file_content (self , file_name : Path ) -> list :
246+ """
247+
248+ :param file_name:
249+ :return:
250+ """
251+ try :
252+ with file_name .open ('r' ) as file :
253+ content = file .readlines ()
254+ return content
255+ except FileNotFoundError as message1 :
256+ self .logger .error (message1 )
257+ return []
258+
259+ def get_key_words (self , file_name = ROOT .joinpath ('rpc_spec/RpcParser/RESERVED_KEYWORDS' )):
260+ """
261+ :param file_name:
262+ :return:
263+ """
264+ content = self .get_file_content (file_name )
265+ content = tuple (map (lambda e : re .sub (r'\n' , r'' , e ).strip ().casefold (), content ))
266+ try :
267+ content = tuple (filter (lambda e : not re .search (r'^#+\s+.+|^$' , e ), content ))
268+ self .logger .debug ('key_words: %s' , ', ' .join (content ))
269+ return content
270+ except (IndexError , ValueError , StopIteration ) as error1 :
271+ self .logger .error ('Error while getting key_words, %s %s' , type (error1 ).__name__ , error1 )
272+ return []
273+
245274 def get_paths (self , file_name = ROOT .joinpath ('paths.ini' )):
246275 """
247276 :param file_name: path to file with Paths
248277 :return: namedtuple with Paths to key elements
249278 """
250279 fields = ('struct_class' , 'request_class' , 'response_class' ,
251280 'notification_class' , 'enums_package' , 'structs_package' , 'functions_package' )
252- intermediate = OrderedDict ()
253- try :
254- with file_name .open ('r' ) as file :
255- for line in file :
256- if line .startswith ('#' ):
257- self .logger .warning ('commented property %s, which will be skipped' , line .strip ())
258- continue
259- if re .match (r'^(\w+)\s?=\s?(.+)' , line ):
260- if len (line .split ('=' )) > 2 :
261- self .logger .critical ('can not evaluate value, too many separators %s' , str (line ))
262- sys .exit (1 )
263- name , var = line .partition ('=' )[::2 ]
264- if name .strip () in intermediate :
265- self .logger .critical ('duplicate key %s' , name )
266- sys .exit (1 )
267- intermediate [name .strip ().lower ()] = var .strip ()
268- except FileNotFoundError as message1 :
269- self .logger .critical (message1 )
270- sys .exit (1 )
281+ data = OrderedDict ()
282+ content = self .get_file_content (file_name )
283+
284+ for line in content :
285+ if line .startswith ('#' ):
286+ self .logger .warning ('commented property %s, which will be skipped' , line .strip ())
287+ continue
288+ if re .match (r'^(\w+)\s?=\s?(.+)' , line ):
289+ if len (line .split ('=' )) > 2 :
290+ self .logger .critical ('can not evaluate value, too many separators %s' , str (line ))
291+ sys .exit (1 )
292+ name , var = line .partition ('=' )[::2 ]
293+ if name .strip () in data :
294+ self .logger .critical ('duplicate key %s' , name )
295+ sys .exit (1 )
296+ data [name .strip ().lower ()] = var .strip ()
271297
272298 for line in fields :
273- if line not in intermediate :
274- self .logger .critical ('in %s missed fields: %s ' , file , str (line ))
299+ if line not in data :
300+ self .logger .critical ('in %s missed fields: %s ' , content , str (line ))
275301 sys .exit (1 )
276302
277303 Paths = namedtuple ('Paths' , ' ' .join (fields ))
278- return Paths (** intermediate )
304+ return Paths (** data )
279305
280306 def write_file (self , file_name , template , data ):
281307 """
@@ -399,16 +425,17 @@ def main(self):
399425 pattern = args .regex_pattern )
400426
401427 paths = self .get_paths ()
428+ key_words = self .get_key_words ()
402429
403430 if args .enums and interface .enums :
404431 self .process (args .output_directory , args .skip , args .overwrite , tuple (interface .enums .values ()),
405- EnumsProducer (paths ))
432+ EnumsProducer (paths , key_words ))
406433 if args .structs and interface .structs :
407434 self .process (args .output_directory , args .skip , args .overwrite , tuple (interface .structs .values ()),
408- StructsProducer (paths , enum_names , struct_names ))
435+ StructsProducer (paths , enum_names , struct_names , key_words ))
409436 if args .functions and interface .functions :
410437 self .process (args .output_directory , args .skip , args .overwrite , tuple (interface .functions .values ()),
411- FunctionsProducer (paths , enum_names , struct_names ))
438+ FunctionsProducer (paths , enum_names , struct_names , key_words ))
412439
413440
414441if __name__ == '__main__' :
0 commit comments