def list_files(self, path, case_insensitive=True, folders_first=True, match_patterns=[]): """Return a list of files in folder @path """ ds_name, file_name = re.match(self._re_path, path).groups() ds = [k for k,v in self._server.get_datastores().items() if v == ds_name][0] browser_mor = VIProperty(self._server, ds).browser._obj request = VI.SearchDatastore_TaskRequestMsg() _this = request.new__this(browser_mor) _this.set_attribute_type(browser_mor.get_attribute_type()) request.set_element__this(_this) request.set_element_datastorePath(path) search_spec = request.new_searchSpec() query = [VI.ns0.FloppyImageFileQuery_Def('floppy').pyclass(), VI.ns0.FileQuery_Def('file').pyclass(), VI.ns0.FolderFileQuery_Def('folder').pyclass(), VI.ns0.IsoImageFileQuery_Def('iso').pyclass(), VI.ns0.VmConfigFileQuery_Def('vm').pyclass(), VI.ns0.TemplateConfigFileQuery_Def('template').pyclass(), VI.ns0.VmDiskFileQuery_Def('vm_disk').pyclass(), VI.ns0.VmLogFileQuery_Def('vm_log').pyclass(), VI.ns0.VmNvramFileQuery_Def('vm_ram').pyclass(), VI.ns0.VmSnapshotFileQuery_Def('vm_snapshot').pyclass()] search_spec.set_element_query(query) details = search_spec.new_details() details.set_element_fileOwner(True) details.set_element_fileSize(True) details.set_element_fileType(True) details.set_element_modification(True) search_spec.set_element_details(details) search_spec.set_element_searchCaseInsensitive(case_insensitive) search_spec.set_element_sortFoldersFirst(folders_first) search_spec.set_element_matchPattern(match_patterns) request.set_element_searchSpec(search_spec) response = self._server._proxy.SearchDatastore_Task(request)._returnval vi_task = VITask(response, self._server) if vi_task.wait_for_state([vi_task.STATE_ERROR, vi_task.STATE_SUCCESS]) == vi_task.STATE_ERROR: raise VITaskException(vi_task.info.error) info = vi_task.get_result() # return info if not hasattr(info, "file"): return [] # for fi in info.file: # fi._get_all() return [{'type':fi._type, 'path':fi.path, 'size':fi.fileSize, 'modified':fi.modification, 'owner':fi.owner } for fi in info.file]