def calc_value_slice_1d(slice_, brick_ext, brick_slice, brick_sl, val_shp_max):
    log.trace(
        'slice_==%s\tbrick_ext==%s\tbrick_slice==%s\tbrick_sl==%s\tval_shp_max==%s',
        slice_, brick_ext, brick_slice, brick_sl, val_shp_max)

    sl = deepcopy(slice_)
    brick_ext_min = brick_ext[0]
    brick_ext_max = brick_ext[1] + 1
    brick_shp = brick_ext_max - brick_ext[0]

    if isinstance(sl, int):
        ts = sl
        # Value Slice in Total Domain Notation
        val_sl_tn_min = max(ts, brick_ext_min)
        value_slice = val_sl_tn_min - ts

        log.trace('ts=%s\tbrick_ext_min=%s\tval_sl_tn_min=%s\tvalue_slice=%s',
                  ts, brick_ext_min, val_sl_tn_min, value_slice)
    elif isinstance(sl, (list, tuple)):
        si = utils.find_nearest_index(sl, brick_sl[0] + brick_ext_min)
        ei = utils.find_nearest_index(
            sl,
            brick_sl[1] + brick_ext_min) + 1  # Slices use exclusive upper!!

        value_slice = slice(si, ei, None)
        log.trace('si=%s\tei=%s\tvalue_slice=%s', si, ei, value_slice)
    elif isinstance(sl, slice):
        ts = sl.start if sl.start is not None else 0
        if sl.step is not None and sl.step != 1:
            brick_ext_min = len(xrange(*sl.indices(brick_ext_min))) + ts
            brick_ext_max = len(xrange(*sl.indices(brick_ext_max))) + ts
            log.trace(
                'Correct for step: step=%s\tbrick_ext_min=%s\tbrick_ext_max=%s',
                sl.step, brick_ext_min, brick_ext_max)

        # Value Slice in Total Domain Notation
        val_sl_tn_min = max(ts, brick_ext_min)
        val_sl_tn_max = brick_sl[1] + brick_ext_max - brick_shp

        val_sl_min = val_sl_tn_min - ts
        val_sl_max = val_sl_tn_max - ts

        value_slice = slice(val_sl_min, val_sl_max, None)
        log.trace(
            'ts=%s\tbrick_ext_min=%s\tbrick_ext_max=%s\tval_sl_tn_min=%s\tval_sl_tn_max=%s\tval_sl_min=%s\tval_sl_max=%s\tvalue_slice=%s',
            ts, brick_ext_min, brick_ext_max, val_sl_tn_min, val_sl_tn_max,
            val_sl_min, val_sl_max, value_slice)
    else:
        value_slice = ()
        log.trace('value_slice=%s', value_slice)

    return value_slice
    def manual_upload(self, dataset_id, data_file_path, config_path=None):
        # First, ensure we can get a parser and parse the data file
        parser = self.get_parser(data_file_path, config_path)
        dat = parser.parse()

        # Get the coverage
        with self.get_editable_coverage(dataset_id) as cov:
            # Find the indices for the times in the data file
            try:
                time_dat = dat[cov.temporal_parameter_name]
            except ValueError, ve:
                if ve.message == 'field named %s not found.' % cov.temporal_parameter_name:
                    raise ValueError('Temporal parameter name {0} not in upload data'.format(cov.temporal_parameter_name))
                else:
                    raise
            cov_times = cov.get_time_values()
            tinds = [utils.find_nearest_index(cov_times, ti) for ti in time_dat]

            sl = (tinds,)
            cparams = cov.list_parameters()
            for n in dat.dtype.names:
                if n != cov.temporal_parameter_name:
                    if n in cparams:
                        cov.set_parameter_values(n, dat[n], sl)
                    else:
                        warn_user('Skipping column \'%s\': matching parameter not found in coverage!' % n)
def calc_value_slice_1d(slice_, brick_ext, brick_slice, brick_sl, val_shp_max):
    log.trace('slice_==%s\tbrick_ext==%s\tbrick_slice==%s\tbrick_sl==%s\tval_shp_max==%s', slice_, brick_ext,
              brick_slice, brick_sl, val_shp_max)

    sl = deepcopy(slice_)
    brick_ext_min = brick_ext[0]
    brick_ext_max = brick_ext[1] + 1
    brick_shp = brick_ext_max - brick_ext[0]

    if isinstance(sl, int):
        ts = sl
        # Value Slice in Total Domain Notation
        val_sl_tn_min = max(ts, brick_ext_min)
        value_slice = val_sl_tn_min - ts

        log.trace('ts=%s\tbrick_ext_min=%s\tval_sl_tn_min=%s\tvalue_slice=%s', ts, brick_ext_min, val_sl_tn_min,
                  value_slice)
    elif isinstance(sl, (list, tuple)):
        si = utils.find_nearest_index(sl, brick_sl[0] + brick_ext_min)
        ei = utils.find_nearest_index(sl, brick_sl[1] + brick_ext_min) + 1 # Slices use exclusive upper!!

        value_slice = slice(si, ei, None)
        log.trace('si=%s\tei=%s\tvalue_slice=%s', si, ei, value_slice)
    elif isinstance(sl, slice):
        ts = sl.start if sl.start is not None else 0
        if sl.step is not None and sl.step != 1:
            brick_ext_min = len(xrange(*sl.indices(brick_ext_min))) + ts
            brick_ext_max = len(xrange(*sl.indices(brick_ext_max))) + ts
            log.trace('Correct for step: step=%s\tbrick_ext_min=%s\tbrick_ext_max=%s', sl.step, brick_ext_min,
                      brick_ext_max)

        # Value Slice in Total Domain Notation
        val_sl_tn_min = max(ts, brick_ext_min)
        val_sl_tn_max = brick_sl[1] + brick_ext_max - brick_shp

        val_sl_min = val_sl_tn_min - ts
        val_sl_max = val_sl_tn_max - ts

        value_slice = slice(val_sl_min, val_sl_max, None)
        log.trace(
            'ts=%s\tbrick_ext_min=%s\tbrick_ext_max=%s\tval_sl_tn_min=%s\tval_sl_tn_max=%s\tval_sl_min=%s\tval_sl_max=%s\tvalue_slice=%s',
            ts, brick_ext_min, brick_ext_max, val_sl_tn_min, val_sl_tn_max, val_sl_min, val_sl_max, value_slice)
    else:
        value_slice = ()
        log.trace('value_slice=%s', value_slice)

    return value_slice