Source code for project_composer.app_storage.node


[docs]class AppNode: """ Class to store application payload as an object. Arguments: name (string): The application module name. Keyword Arguments: push_end (boolean): Application parameter to describe that it should be pushed to end of the ordered application list. Attributes: name (string): The application name comes from its directory name in application repository. dependencies (list): List of AppNode objects. Only filled once ``AppStore`` resolving has been done. dependency_names (list): List of string names. It is mostly used in ``AppStore`` preparation until it has done resolving. push_end (boolean): "Push end" mode value. """ def __init__(self, name, push_end=False): self.name = name self.dependencies = [] self.dependency_names = [] self.push_end = push_end def __repr__(self): return "<{klass}: {name}>".format( klass=self.__class__.__name__, name=self.name ) def __str__(self): return self.name
[docs] def add_dependency(self, node): """ Add a dependency object to the object registry ``AppNode.dependencies``. A dependency which already exists in registry is not added twice. Arguments: node (AppNode): Dependency object to add. """ if node.name not in [item.name for item in self.dependencies]: self.dependencies.append(node)
[docs] def add_dependency_name(self, name): """ Add a dependency name to the name registry ``AppNode.dependency_names``. A dependency name which already exists in registry is not added twice. Arguments: node (string): Dependency name to add. """ if name not in self.dependency_names: self.dependency_names.append(name)
[docs] def to_dict(self, flat=False): """ Serialize the object attribute as a dictionnary. Keyword Arguments: flat (boolean): If set to True, the dependencies are returned as a list of names (string) instead of AppNode objects. Returns: dict: Application payload including dependencies as ``AppNode`` objects. """ return { "name": self.name, "dependencies": [ dependency.name if flat is True else dependency for dependency in self.dependencies ], "push_end": self.push_end, }
[docs] def to_payload(self): """ Shortcut to ``to_dict`` with flat mode enforced. Returns: dict: Application payload including dependencies as string name. """ return self.to_dict(flat=True)