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)