Source code for jasy.core.MetaData

#
# Jasy - Web Tooling Framework
# Copyright 2010-2012 Zynga Inc.
# Copyright 2013-2014 Sebastian Werner
#


[docs]class MetaData(object): """ Data structure to hold all meta information. A instance of this class is typically created by processing all meta data relevant tags of all doc comments in the given node structure. Hint: Must be a clean data class without links to other systems for optiomal cachability using Pickle """ __slots__ = ["requires", "optionals", "breaks", "assets"] def __init__(self, tree): self.requires = set() self.optionals = set() self.breaks = set() self.assets = set() self.parse(tree)
[docs] def parse(self, node): """The internal inspection routine to add relevant data from comments.""" # Parse meta if node.type == "meta": child = node[0] value = child.value if node.name == "require": self.requires.add(value) if node.name == "load": self.requires.add(value) self.breaks.add(value) if node.name == "optional": self.optionals.add(value) if node.name == "break": self.breaks.add(value) if node.name == "asset": self.assets.add(value) # Parse comments comments = getattr(node, "comments", None) if comments: for comment in comments: commentTags = comment.getTags() if commentTags: if "require" in commentTags: self.requires.update(commentTags["require"]) if "load" in commentTags: # load is a special combination shorthand for requires + breaks # This means load it but don't require it being loaded first self.requires.update(commentTags["load"]) self.breaks.update(commentTags["load"]) if "optional" in commentTags: self.optionals.update(commentTags["optional"]) if "break" in commentTags: self.breaks.update(commentTags["break"]) if "asset" in commentTags: self.assets.update(commentTags["asset"]) # Process children for child in node: if child is not None: self.parse(child)