def find_project()

in builder/core/project.py [0:0]


    def find_project(name, hints=None):
        """ Finds a project, either on disk, or makes a virtual one to allow for acquisition """
        if hints is None:
            hints = []
        project = Project._projects.get(name.lower(), None)
        if project and project.resolved():
            return project

        dirs = []
        for d in hints + Project.search_dirs:
            dirs.append(d)
            dirs.append(os.path.join(d, name))

        # remove duplicates when these overlap
        dirs = UniqueList(dirs)

        for search_dir in dirs:
            dir_matches_name = (os.path.basename(search_dir) == name) and os.path.isdir(search_dir)
            if os.path.isfile(os.path.join(search_dir, 'builder.json')) or dir_matches_name:
                project = Project._project_from_path(search_dir, name)

                if project:
                    return project

                # might be a project without a config
                if dir_matches_name and looks_like_code(search_dir):
                    print('    Found source code only project at {}'.format(search_dir))
                    project = Project._projects.get(name.lower(), None)
                    if not project:
                        project = Project._create_project(name=name)
                    project.resolve(search_dir)
                    return Project._cache_project(project)

        if Project._find_project_class(name):
            return Project._cache_project(Project._create_project(name))

        # Enough of a project to get started, note that this is not cached
        return Project(name=name)