Advertisement
Guest User

Untitled

a guest
Apr 29th, 2017
60
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 2.01 KB | None | 0 0
  1.  
  2. def build_ReferencedLayout(screen):
  3.  
  4. class Invalid_Property_Error(Exception): pass
  5.  
  6. def has_ID(widget):
  7. return hasattr(widget, "id") and (widget.id != None)
  8.  
  9. def has_Children(widget):
  10. return hasattr(widget, "children") and (len(widget.children) > 0)
  11.  
  12. def validate_ID(parent, child, child_ID):
  13. if hasattr(parent, child_ID):
  14. raise Invalid_Property_Error(
  15. f"\n\t{parent} already has '{child_ID}' property."
  16. f"\n\t{child} cannot be added unless its ID is changed"
  17. )
  18.  
  19. def add_Widget(parent, child, child_ID):
  20. child.id = child_ID
  21. if has_ID(parent):
  22. validate_ID(parent, child, child_ID)
  23. parent.__dict__[child_ID] = child
  24. else:
  25. validate_ID(layout, child, child_ID)
  26. layout.__dict__[child_ID] = child
  27.  
  28. def add_Widget_IfNamed(parent, child):
  29. for ID, reference in namedWidgets:
  30. if child == reference:
  31. add_Widget(parent, child, ID)
  32. break
  33.  
  34. def add_LayoutReferences(parent, namedWidgets):
  35. for child in reversed(parent.children):
  36. add_Widget_IfNamed(parent, child)
  37. if has_Children(child):
  38. add_LayoutReferences(child, namedWidgets)
  39.  
  40. layout = screen.ids.layout
  41. namedWidgets = screen.ids.items()
  42. add_LayoutReferences(layout, namedWidgets)
  43. return layout
  44.  
  45.  
  46.  
  47.  
  48. ### StdLib ###
  49. import inspect
  50.  
  51. def get_MetaData(classReference, metaData_Type):
  52.  
  53. class Invalid_MetaType_Error(Exception): pass
  54.  
  55. class MetaData():
  56. def __init__(self, name, reference):
  57. self.name = name
  58. self.reference = reference
  59.  
  60. def get_TypeFilter():
  61. typeFilter = None
  62. if(metaData_Type == "functions"): return inspect.isfunction
  63. if(metaData_Type == "methods" ): return inspect.ismethod
  64.  
  65. def _get_MetaData(typeFilter):
  66. if(typeFilter):
  67. functions = inspect.getmembers(classReference, predicate=typeFilter)
  68. return [MetaData(x,y) for x,y in functions]
  69. else:
  70. raise Invalid_MetaType_Error(
  71. f"\n\t{metaData_Type} is not a valid meta-type"
  72. )
  73.  
  74. typeFilter = get_TypeFilter()
  75. metaData = _get_MetaData(typeFilter)
  76. return metaData
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement