Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- def build_ReferencedLayout(screen):
- class Invalid_Property_Error(Exception): pass
- def has_ID(widget):
- return hasattr(widget, "id") and (widget.id != None)
- def has_Children(widget):
- return hasattr(widget, "children") and (len(widget.children) > 0)
- def validate_ID(parent, child, child_ID):
- if hasattr(parent, child_ID):
- raise Invalid_Property_Error(
- f"\n\t{parent} already has '{child_ID}' property."
- f"\n\t{child} cannot be added unless its ID is changed"
- )
- def add_Widget(parent, child, child_ID):
- child.id = child_ID
- if has_ID(parent):
- validate_ID(parent, child, child_ID)
- parent.__dict__[child_ID] = child
- else:
- validate_ID(layout, child, child_ID)
- layout.__dict__[child_ID] = child
- def add_Widget_IfNamed(parent, child):
- for ID, reference in namedWidgets:
- if child == reference:
- add_Widget(parent, child, ID)
- break
- def add_LayoutReferences(parent, namedWidgets):
- for child in reversed(parent.children):
- add_Widget_IfNamed(parent, child)
- if has_Children(child):
- add_LayoutReferences(child, namedWidgets)
- layout = screen.ids.layout
- namedWidgets = screen.ids.items()
- add_LayoutReferences(layout, namedWidgets)
- return layout
- ### StdLib ###
- import inspect
- def get_MetaData(classReference, metaData_Type):
- class Invalid_MetaType_Error(Exception): pass
- class MetaData():
- def __init__(self, name, reference):
- self.name = name
- self.reference = reference
- def get_TypeFilter():
- typeFilter = None
- if(metaData_Type == "functions"): return inspect.isfunction
- if(metaData_Type == "methods" ): return inspect.ismethod
- def _get_MetaData(typeFilter):
- if(typeFilter):
- functions = inspect.getmembers(classReference, predicate=typeFilter)
- return [MetaData(x,y) for x,y in functions]
- else:
- raise Invalid_MetaType_Error(
- f"\n\t{metaData_Type} is not a valid meta-type"
- )
- typeFilter = get_TypeFilter()
- metaData = _get_MetaData(typeFilter)
- return metaData
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement