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)) |