def METHOD_NAME(
    self,
    session: sqlalchemy.orm.Session,
    owner: str = None,
    format_: mlrun.common.schemas.ProjectsFormat = mlrun.common.schemas.ProjectsFormat.full,
    labels: typing.List[str] = None,
    state: mlrun.common.schemas.ProjectState = None,
    names: typing.Optional[typing.List[str]] = None,
) -> mlrun.common.schemas.ProjectsOutput:
    if owner or labels or state:
        raise NotImplementedError(
            "Filtering by owner, labels or state is not supported"
        )
    projects = list(self._projects.values())
    # deep copy so we won't accidentally get changes from tests
    projects = [project.copy(deep=True) for project in projects]
    if names:
        projects = [
            project
            for project_name, project in self._projects.items()
            if project_name in names
        ]
    if format_ == mlrun.common.schemas.ProjectsFormat.full:
        return mlrun.common.schemas.ProjectsOutput(projects=projects)
    elif format_ == mlrun.common.schemas.ProjectsFormat.minimal:
        return mlrun.common.schemas.ProjectsOutput(
            projects=[
                mlrun.api.utils.helpers.minimize_project_schema(project)
                for project in projects
            ]
        )
    elif format_ == mlrun.common.schemas.ProjectsFormat.name_only:
        project_names = [project.metadata.name for project in projects]
        return mlrun.common.schemas.ProjectsOutput(projects=project_names)
    else:
        raise NotImplementedError(
            f"Provided format is not supported. format={format_}"
        )