Checks if Sentinel-1 product ID matches Sentinel-1 DataSource configuration

        :param product_id: Sentinel-1 product ID
        :type product_id: str
        :param data_source: One of the supported Sentinel-1 data sources
        :type data_source: constants.DataSource
        :return: True if data_source contains product_id and False otherwise
        :rtype: bool

def _sentinel1_product_check(product_id, data_source):
        """Checks if Sentinel-1 product ID matches Sentinel-1 DataSource configuration

        :param product_id: Sentinel-1 product ID
        :type product_id: str
        :param data_source: One of the supported Sentinel-1 data sources
        :type data_source: constants.DataSource
        :return: True if data_source contains product_id and False otherwise
        :rtype: bool
        """
        props = product_id.split('_')
        acquisition, resolution, polarisation = props[1], props[2][3], props[3][2:4]
        if acquisition in ['IW', 'EW'] and resolution in ['M', 'H'] and polarisation in ['DV', 'DH', 'SV', 'SH']:
            return acquisition == data_source.value[2].name and polarisation == data_source.value[3].name and \
                   resolution == data_source.value[4].name[0]
        raise ValueError('Unknown Sentinel-1 tile type: {}'.format(product_id))