<SYSTEM_TASK:>
Solve the following problem using Python, implementing the functions described below, one line at a time
<END_TASK>
<USER_TASK:>
Description:
 def data_shape(self):
 """Shape tuple of the whole data block as determined from `header`. If no header is available (i.e., before it has been initialized), or any of the header entries ``'nx', 'ny', 'nz'`` is missing, -1 is returned, which makes reshaping a no-op. Otherwise, the returned shape is ``(nx, ny, nz)``. Note: this is the shape of the data as defined by the header. For a non-trivial axis ordering, the shape of actual data will be different. See Also -------- data_storage_shape data_axis_order """

        if not self.header:
            return -1
        try:
            nx = self.header['nx']['value']
            ny = self.header['ny']['value']
            nz = self.header['nz']['value']
        except KeyError:
            return -1
        else:
            return tuple(int(n) for n in (nx, ny, nz))