Stream Jupyter workspace file downloads
This commit is contained in:
@@ -647,6 +647,50 @@ print(json.dumps(entries, ensure_ascii=False))
|
||||
name = str(payload.get('name') or PurePosixPath(target).name or 'remote-file')
|
||||
return data, name
|
||||
|
||||
def file_info(self, path: str) -> dict[str, Any]:
|
||||
target = self.resolve_workspace_path(path)
|
||||
api_path = api_path_for_absolute_path(target)
|
||||
url = f'{self.binding.base_url}/api/contents/{quote(api_path, safe="/")}'
|
||||
response = self._session.get(
|
||||
url,
|
||||
params={'content': 0},
|
||||
headers={'X-XSRFToken': self._xsrf_token},
|
||||
timeout=30,
|
||||
)
|
||||
if response.status_code >= 400:
|
||||
raise JupyterRuntimeError(
|
||||
f'Unable to inspect remote file: HTTP {response.status_code} {response.text[:500]}'
|
||||
)
|
||||
payload = response.json()
|
||||
if payload.get('type') != 'file':
|
||||
raise JupyterRuntimeError('Remote path is not a file.')
|
||||
name = str(payload.get('name') or PurePosixPath(target).name or 'remote-file')
|
||||
size = payload.get('size')
|
||||
return {
|
||||
'name': name,
|
||||
'path': target,
|
||||
'size': int(size) if isinstance(size, int) and size >= 0 else None,
|
||||
}
|
||||
|
||||
def open_file_stream(self, path: str) -> tuple[Any, str]:
|
||||
"""打开远端文件流,由调用方负责关闭 response。"""
|
||||
|
||||
target = self.resolve_workspace_path(path)
|
||||
api_path = api_path_for_absolute_path(target)
|
||||
url = f'{self.binding.base_url}/files/{quote(api_path, safe="/")}'
|
||||
response = self._session.get(
|
||||
url,
|
||||
headers={'X-XSRFToken': self._xsrf_token},
|
||||
stream=True,
|
||||
timeout=(10, 300),
|
||||
)
|
||||
if response.status_code >= 400:
|
||||
response.close()
|
||||
raise JupyterRuntimeError(
|
||||
f'Unable to stream remote file: HTTP {response.status_code} {response.text[:500]}'
|
||||
)
|
||||
return response, str(PurePosixPath(target).name or 'remote-file')
|
||||
|
||||
def read_text(
|
||||
self,
|
||||
path: str,
|
||||
|
||||
Reference in New Issue
Block a user