class HTMLRepository(RemoteRepository): """\ A remote repository which easy_install can cope with. """ def __init__(self, location, index=False, verbose=False): self.location = format_as_url(location) self.index = index if index: self.environment = PackageIndex(index_url=self.location, search_path=[]) else: self.environment = PackageIndex(no_default_index=True) self.environment.add_find_links([self.location]) self._projects = None self.tmpdir = mkdtemp(prefix="ensetuptools-") self.verbose = verbose @property def projects(self): if self._projects == None: self._projects = {} info("Scanning repository at %s..." % self.location) self.environment.prescan() self.environment.scan_all() for project in self.environment: self._projects[project] = HTMLProject(self, project, verbose=self.verbose) for project in self.environment.package_pages: if project not in self._projects: self._projects[project] = HTMLProject(self, project, verbose=self.verbose) self._projects[project].scan_needed = True return self._projects def search(self, combiner='and', **kwargs): if 'project' not in kwargs: raise SearchError("EasyInstall-based remote repositories require" " a 'project' search term.") if isinstance(kwargs['project'], basestring): return self.projects[kwargs['project']].match(combiner, **kwargs) partial_match_names = set(project_name for project_name in self.projects if kwargs['project'].match(project_name)) matches = [] for project in partial_match_names: matches += self.projects[project].search(combiner, **kwargs) return matches