##// END OF EJS Templates
Fixed logic for register filter and transformer
Jonathan Frederic -
Show More
@@ -225,7 +225,7 b' class Exporter(Configurable):'
225 return self.from_notebook_node(nbformat.read(file_stream, 'json'), resources=resources, **kw)
225 return self.from_notebook_node(nbformat.read(file_stream, 'json'), resources=resources, **kw)
226
226
227
227
228 def register_transformer(self, transformer, enabled=None):
228 def register_transformer(self, transformer, enabled=False):
229 """
229 """
230 Register a transformer.
230 Register a transformer.
231 Transformers are classes that act upon the notebook before it is
231 Transformers are classes that act upon the notebook before it is
@@ -237,33 +237,39 b' class Exporter(Configurable):'
237 ----------
237 ----------
238 transformer : transformer
238 transformer : transformer
239 """
239 """
240 if transformer is None:
241 raise TypeError('transformer')
242 isclass = inspect.isclass(transformer)
243 constructed = not isclass
240
244
241 #Handle transformer's registration based on it's type
245 #Handle transformer's registration based on it's type
242 if inspect.isfunction(transformer):
246 if constructed and isinstance(transformer, types.StringTypes):
247 #Transformer is a string, import the namespace and recursively call
248 #this register_transformer method
249 transformer_cls = import_item(transformer)
250 return self.register_transformer(transformer_cls, enabled)
251
252 if constructed and hasattr(transformer, '__call__'):
243 #Transformer is a function, no need to construct it.
253 #Transformer is a function, no need to construct it.
254 #Register and return the transformer.
255 if enabled:
256 transformer.enabled = True
244 self._transformers.append(transformer)
257 self._transformers.append(transformer)
245 return transformer
258 return transformer
246
259
247 elif isinstance(transformer, types.StringTypes):
260 elif isclass and isinstance(transformer, MetaHasTraits):
248 #Transformer is a string, import the namespace and recursively call
249 #this register_transformer method
250 transformer_cls = import_item(DottedObjectName(transformer))
251 return self.register_transformer(transformer_cls, enabled=None)
252
253 elif isinstance(transformer, MetaHasTraits):
254 #Transformer is configurable. Make sure to pass in new default for
261 #Transformer is configurable. Make sure to pass in new default for
255 #the enabled flag if one was specified.
262 #the enabled flag if one was specified.
256 transformer_instance = transformer(parent=self)
263 self.register_transformer(transformer(parent=self), enabled)
257 if enabled is not None:
258 transformer_instance.enabled = True
259
264
260 else:
265 elif isclass:
261 #Transformer is not configurable, construct it
266 #Transformer is not configurable, construct it
262 transformer_instance = transformer()
267 self.register_transformer(transformer(), enabled)
263
268
264 #Register and return the transformer.
269 else:
265 self._transformers.append(transformer_instance)
270 #Transformer is an instance of something without a __call__
266 return transformer_instance
271 #attribute.
272 raise TypeError('transformer')
267
273
268
274
269 def register_filter(self, name, filter):
275 def register_filter(self, name, filter):
@@ -278,16 +284,36 b' class Exporter(Configurable):'
278 name to give the filter in the Jinja engine
284 name to give the filter in the Jinja engine
279 filter : filter
285 filter : filter
280 """
286 """
281 if inspect.isfunction(filter):
287 if filter is None:
288 raise TypeError('filter')
289 isclass = inspect.isclass(filter)
290 constructed = not isclass
291
292 #Handle filter's registration based on it's type
293 if constructed and isinstance(filter, types.StringTypes):
294 #filter is a string, import the namespace and recursively call
295 #this register_filter method
296 filter_cls = import_item(filter)
297 return self.register_filter(name, filter_cls)
298
299 if constructed and hasattr(filter, '__call__'):
300 #filter is a function, no need to construct it.
282 self.environment.filters[name] = filter
301 self.environment.filters[name] = filter
283 elif isinstance(filter, types.StringTypes):
302 return filter
284 filter_cls = import_item(DottedObjectName(filter))
303
285 self.register_filter(name, filter_cls)
304 elif isclass and isinstance(filter, MetaHasTraits):
286 elif isinstance(filter, MetaHasTraits):
305 #filter is configurable. Make sure to pass in new default for
287 self.environment.filters[name] = filter(config=self.config)
306 #the enabled flag if one was specified.
307 self.register_filter(name, filter(parent=self))
308
309 elif isclass:
310 #filter is not configurable, construct it
311 self.register_filter(name, filter())
312
288 else:
313 else:
289 self.environment.filters[name] = filter()
314 #filter is an instance of something without a __call__
290 return self.environment.filters[name]
315 #attribute.
316 raise TypeError('filter')
291
317
292
318
293 def _init_environment(self, extra_loaders=None):
319 def _init_environment(self, extra_loaders=None):
General Comments 0
You need to be logged in to leave comments. Login now