Beispiel #1
0
    def get_all_staging_paths(
        self,
        invalid_chars: Sequence[str] = ("/", ),
        include_collection_name: bool = False,
    ) -> List[str]:
        safe_element_identifiers = []
        for element_identifiers, extension, *_ in self.element_identifiers_extensions_paths_and_metadata_files:
            datatype = self.datatypes_registry.get_datatype_by_extension(
                extension)
            if datatype:
                extension = getattr(datatype, 'file_ext_export_alias',
                                    extension)
            current_element_identifiers = []
            for element_identifier in element_identifiers:
                max_len = 254 - len(extension)
                if include_collection_name:
                    max_len = max_len - (len(self.name or "") + 1)
                    assert max_len >= 1, 'Could not stage element, element identifier is too long'
                current_element_identifier = filesystem_safe_string(
                    element_identifier,
                    max_len=max_len,
                    invalid_chars=invalid_chars)
                if include_collection_name and self.name:
                    current_element_identifier = f"{filesystem_safe_string(self.name, invalid_chars=invalid_chars)}{os.path.sep}{current_element_identifier}"
                current_element_identifiers.append(current_element_identifier)

            safe_element_identifiers.append(
                f'{os.path.sep.join(current_element_identifiers)}.{extension}')
        return safe_element_identifiers
Beispiel #2
0
    def staging_path(self):
        """
        Strip leading dots, unicode null chars, replace `/` with `_`, truncate at 255 characters.

        Not safe for commandline use, would need additional sanitization.
        """
        max_len = 254 - len(self.file_ext)
        safe_element_identifier = filesystem_safe_string(self.element_identifier, max_len=max_len)
        return f"{safe_element_identifier}.{self.file_ext}"
Beispiel #3
0
 def all_staging_paths(self):
     safe_element_identifiers = []
     for element_identifiers, extension, *_ in self.element_identifiers_extensions_paths_and_metadata_files:
         datatype = self.datatypes_registry.get_datatype_by_extension(extension)
         if datatype:
             extension = getattr(datatype, 'file_ext_export_alias', extension)
         current_element_identifiers = []
         for element_identifier in element_identifiers:
             current_element_identifiers.append(filesystem_safe_string(element_identifier, max_len=254 - len(extension)))
         safe_element_identifiers.append(f'{os.path.sep.join(current_element_identifiers)}.{extension}')
     return safe_element_identifiers