configurationengine/source/plugins/common/ConeTemplatePlugin/templatemlplugin/templatemlplugin.py
changeset 4 0951727b8815
parent 3 e7e0ae78773e
equal deleted inserted replaced
3:e7e0ae78773e 4:0951727b8815
   287                 if filter_elem.text != None:
   287                 if filter_elem.text != None:
   288                     filter.set_code(filter_elem.text)
   288                     filter.set_code(filter_elem.text)
   289                     if filter_elem.get('file') != None:
   289                     if filter_elem.get('file') != None:
   290                         logging.getLogger('cone.templateml').warning("In filter element file attribute and text defined. Using filter found from file attribute.")
   290                         logging.getLogger('cone.templateml').warning("In filter element file attribute and text defined. Using filter found from file attribute.")
   291                 filters.append(filter)
   291                 filters.append(filter)
       
   292         
       
   293         filters_elems = etree.findall("{%s}filters" % self.namespaces[0])
       
   294         for filters_elem in filters_elems:
       
   295             if filters_elem != None:
       
   296                 filter = Filter()
       
   297                 if filters_elem.get('file') != None:
       
   298                     file = filters_elem.get('file')
       
   299                     if self.configuration != None:
       
   300                         file = utils.expand_refs_by_default_view(file, self.configuration.get_default_view())
       
   301                     filter.set_path(file)
       
   302                 if filters_elem.text != None:
       
   303                     filter.set_code(filters_elem.text)
       
   304                     if filters_elem.get('file') != None:
       
   305                         logging.getLogger('cone.templateml'). warning("In filters element file attribute and text defined. Using filters found from file attribute.")
       
   306                 filters.append(filter)
       
   307                 
   292         return filters
   308         return filters
   293     
   309     
   294     def parse_tags(self, etree):
   310     def parse_tags(self, etree):
   295         tags = {}
   311         tags = {}
   296         for tag in etree.getiterator("{%s}tag" % self.namespaces[0]):
   312         for tag in etree.getiterator("{%s}tag" % self.namespaces[0]):
   417                     else:
   433                     else:
   418                         env = Environment(loader=dict_loader)
   434                         env = Environment(loader=dict_loader)
   419 
   435 
   420                     # Common filters
   436                     # Common filters
   421                     for filter in self.filters:
   437                     for filter in self.filters:
   422                         
       
   423                         if filter.path:
   438                         if filter.path:
   424                             filter.code = _read_relative_file(generation_context.configuration, filter.path, ref)
   439                             filter.code = _read_relative_file(generation_context.configuration, filter.path, ref)
   425                         
   440                         
   426                         if not filter.code:
   441                         if not filter.code:
   427                             logging.getLogger('cone.templateml').warning("Skipping empty filter definition.")
   442                             logging.getLogger('cone.templateml').warning("Skipping empty filter definition.")
   428                         else:
   443                         else:
   429                             env.filters[str(filter.name)] = eval(filter.code.replace('\r', ''))
   444                             # filter elements (lambda functions) have names
       
   445                             if filter.name:
       
   446                                 env.filters[str(filter.name)] = eval(filter.code.replace('\r', ''))
       
   447                             # filters elements (any python functions) do not have names
       
   448                             else:
       
   449                                 funcs = {}
       
   450                                 exec(filter.code.strip().replace('\r', ''), funcs)
       
   451                                 for k,v in funcs.items():
       
   452                                     env.filters[k] = v
   430                     
   453                     
   431                     # Output file specific filters
   454                     # Output file specific filters
   432                     for filter in output.filters:
   455                     for filter in output.filters:
   433                         if filter.path:
   456                         if filter.path:
   434                             filter.code = _read_relative_file(generation_context.configuration, filter.path, ref)
   457                             filter.code = _read_relative_file(generation_context.configuration, filter.path, ref)
   435                         
   458                         
   436                         if not filter.code:
   459                         if not filter.code:
   437                             logging.getLogger('cone.templateml').warning("Skipping empty filter definition.")
   460                             logging.getLogger('cone.templateml').warning("Skipping empty filter definition.")
   438                         else:
   461                         else:
   439                             env.filters[str(filter.name)] = eval(filter.code)
   462                             if filter.name:
       
   463                                 env.filters[str(filter.name)] = eval(filter.code.replace('\r', ''))
       
   464                             else:
       
   465                                 funcs = {}
       
   466                                 exec(filter.code.strip().replace('\r', ''), funcs)
       
   467                                 for k,v in funcs.items():
       
   468                                     env.filters[k] = v
   440                     
   469                     
   441                     template = env.get_template('template')
   470                     template = env.get_template('template')
   442                     
   471                     
   443                     file_string = template.render(self.context)
   472                     file_string = template.render(self.context)
   444                     out_file.write(self._encode_data(file_string, output.encoding, output.bom))
   473                     out_file.write(self._encode_data(file_string, output.encoding, output.bom))