def get_output_mapfile(outdir, attributes, mapfile_name, dataset_id, dataset_version, mapfile_drs=None, basename=False): """ Builds the mapfile full path depending on: * the --mapfile name using tokens, * an optional mapfile tree declared in configuration file with ``mapfile_drs``, * the --outdir output directory. :param str outdir: The output directory (default is current working directory) :param dict attributes: The facets values deduces from file full path :param str mapfile_name: An optional mapfile name from the command-line :param str dataset_id: The dataset id :param str dataset_version: The dataset version :param str mapfile_drs: The optional mapfile tree :param boolean basename: True to only get mapfile name without root directory :returns: The mapfile full path :rtype: *str* """ # Deduce output directory from --outdir and 'mapfile_drs' if not basename: if mapfile_drs: try: outdir = os.path.join(outdir, interpolate(mapfile_drs, attributes)) except (BadInterpolation, InterpolationDepthError): raise MissingPatternKey(attributes.keys(), mapfile_drs) else: outdir = os.path.realpath(outdir) # Create output directory if not exists, catch OSError instead try: os.makedirs(outdir) except OSError: pass # Deduce mapfile name from --mapfile argument if re.compile(r'{dataset_id}').search(mapfile_name): mapfile_name = re.sub(r'{dataset_id}', dataset_id, mapfile_name) if re.compile(r'{version}').search(mapfile_name): if dataset_version: mapfile_name = re.sub(r'{version}', dataset_version, mapfile_name) else: mapfile_name = re.sub(r'\.{version}', '', mapfile_name) if re.compile(r'{date}').search(mapfile_name): mapfile_name = re.sub(r'{date}', datetime.now().strftime("%Y%d%m"), mapfile_name) if re.compile(r'{job_id}').search(mapfile_name): mapfile_name = re.sub(r'{job_id}', str(os.getpid()), mapfile_name) # Add a "working extension" pending for the end of process if basename: return mapfile_name + WORKING_EXTENSION else: return os.path.join(outdir, mapfile_name) + WORKING_EXTENSION
def get_dataset_id(self, dataset_format): """ Builds the dataset identifier from the dataset template interpolation. :param str dataset_format: The dataset template pattern :returns: The resulting dataset identifier :rtype: *str* :raises Error: If a facet key is missing """ try: return interpolate(dataset_format, self.attributes) except: raise MissingPatternKey(self.attributes.keys(), dataset_format)