def METHOD_NAME(self, state="Open", default_state="Closed"):
    """Hold the shutter in a given state (for use in a `with` block).
    This returns a context manager, so it can be used in a `with` block,
    so that the shutter is held in the given position (default Open) while
    something else happens, then returns to its previous state (usually
    Closed) afterwards, even if exceptions occur.
    If the shutter can't report it's current state it should raise a
    `NotImplementedError` (this is the default) in which case we will 
    default to closing the shutter afterwards unless `default_state` has
    been set in which case we use that.
    In the future, this might block other threads from touching the 
    shutter - currently it does not.
    """
    try:
        oldstate = self.state
    except NotImplementedError:
        oldstate = default_state
    try:
        self.state = state
        yield
    finally:
        self.state = oldstate