Source code for project_composer.processors.classes

from .base import ComposerProcessor


[docs]class ClassProcessor(ComposerProcessor): """ Class composer find all existing classes for enabled application modules and that match criterias from ``Composer._is_elligible_class``. """
[docs] def export(self, **kwargs): """ Export enabled applications classes. Returns: list: A list of Python classes found as elligible for criterias. The list is firstly ordered by the order of enabled application from manifest and secondly by their definition order in their module (if there is two classes defined with the same name, the first is retained and the second one is ignored). """ mods = [] _mod_names = set([]) for node in self.composer.apps: path = self.get_module_path(node.name) # Try to find module module = self.composer.find_app_module(path) if module: msg = "{klass} found module at: {path}".format( klass=self.__class__.__name__, path=path, ) self.composer.log.debug(msg) mods.extend([ item for item in self.composer._get_elligible_module_classes(path, module) if item.__name__ not in _mod_names ]) # Update the list of unique retained class names which are used # for previous uniqueness comparaison in next iteration _mod_names.update([item.__name__ for item in mods]) return mods
[docs] def check(self, printer=print): """ Debugging check what this processor should find or match. Keyword Arguments: printer (callable): A callable to use to output debugging informations. Default to builtin function ``print`` but it won't be very pretty, we recommend to use ``utils.tree_printer.TreePrinter`` to benefit from the tree alike display. Note than composer already give ``TreePrinter`` to this argument when calling this method. """ printer() printer("🧵 Processor '{}'".format(self.__class__.__name__)) app_last = len(self.composer.apps) for i, node in enumerate(self.composer.apps, start=1): printer( "X" if (i == app_last) else "T", node.name ) path = self.get_module_path(node.name) module = self.composer.find_app_module(path) if module: klasses = self.composer._get_elligible_module_classes(path, module) klass_last = len(klasses) for k, item in enumerate(klasses, start=1): printer( ( "O" if (i == app_last) else "I" ) + ( "X" if (k == klass_last) else "T" ), item.__name__ ) else: pass