'Deserializes and returns the block structure starting at
root_block_usage_key, if found in the cache or storage.
The given root_block_usage_key must equate the
root_block_usage_key previously passed to the `add` method.
Arguments:
root_block_usage_key (UsageKey) - The usage_key for the
root of the block structure that is to be retrieved
from the store.
Returns:
BlockStructure - The deserialized block structure starting
at root_block_usage_key, if found.
Raises:
BlockStructureNotFound if the root_block_usage_key is not
found.'

def get(self, root_block_usage_key):

    bs_model = self._get_model(root_block_usage_key)
    try:
        serialized_data = self._get_from_cache(bs_model)
    except BlockStructureNotFound:
        serialized_data = self._get_from_store(bs_model)
        self._add_to_cache(serialized_data, bs_model)
    return self._deserialize(serialized_data, root_block_usage_key)
