(subdir: str, name: str, type_suffix: str)
return my_id
Construct target ID from subdir, name and type suffix.

        This helper function is made public mostly for tests.
Construct target ID from subdir, name and type suffix.
Construct target ID from subdir name and type suffix .
def construct_id_from_path(subdir: str, name: str, type_suffix: str) -> str:
        """Construct target ID from subdir, name and type suffix.

        This helper function is made public mostly for tests."""
        # This ID must also be a valid file name on all OSs.
        # It should also avoid shell metacharacters for obvious
        # reasons. '@' is not used as often as '_' in source code names.
        # In case of collisions consider using checksums.
        # FIXME replace with assert when slash in names is prohibited
        name_part = name.replace('/', '@').replace('\\', '@')
        assert not has_path_sep(type_suffix)
        my_id = name_part + type_suffix
        if subdir:
            subdir_part = Target._get_id_hash(subdir)
            # preserve myid for better debuggability
            return subdir_part + '@@' + my_id
        return my_id
def construct_id_from_path ( subdir : str , name : str , type_suffix : str ) -> str : # This ID must also be a valid file name on all OSs. # It should also avoid shell metacharacters for obvious # reasons. '@' is not used as often as '_' in source code names. # In case of collisions consider using checksums. # FIXME replace with assert when slash in names is prohibited name_part = name . replace ( '/' , '@' ) . replace ( '\\' , '@' ) assert not has_path_sep ( type_suffix ) my_id = name_part + type_suffix if subdir : subdir_part = Target . _get_id_hash ( subdir ) # preserve myid for better debuggability return subdir_part + '@@' + my_id return my_id