Warning
This document is for an in-development version of Galaxy. You can alternatively view this page in the latest release if it exists or view the top of the latest release's documentation.
Source code for galaxy.visualization.plugins.utils
"""
Utilities for visualization plugins.
"""
# =============================================================================
[docs]class OpenObject(dict):
# note: not a Bunch
# TODO: move to util.data_structures
"""
A dict that allows assignment and attribute retrieval using the dot
operator.
If an attribute isn't contained in the dict `None` is returned (no
KeyError).
JSON-serializable.
"""
def __getitem__(self, key):
if key not in self:
return None
return super(OpenObject, self).__getitem__(key)
def __getattr__(self, key):
return self.__getitem__(key)
# ------------------------------------------------------------------- misc
# TODO: move to utils?
[docs]def getattr_recursive(item, attr_key, *args):
"""
Allows dot member notation in attribute name when getting an item's attribute.
NOTE: also searches dictionaries
"""
using_default = len(args) >= 1
default = args[0] if using_default else None
for attr_key in attr_key.split('.'):
try:
if isinstance(item, dict):
item = item.__getitem__(attr_key)
else:
item = getattr(item, attr_key)
except (KeyError, AttributeError):
if using_default:
return default
raise
return item
[docs]def hasattr_recursive(item, attr_key):
"""
Allows dot member notation in attribute name when getting an item's attribute.
NOTE: also searches dictionaries
"""
if '.' in attr_key:
attr_key, last_key = attr_key.rsplit('.', 1)
item = getattr_recursive(item, attr_key, None)
if item is None:
return False
attr_key = last_key
try:
if isinstance(item, dict):
return item.__contains__(attr_key)
else:
return hasattr(item, attr_key)
except (KeyError, AttributeError):
return False
return True