Skip to content

Commit 5a758ca

Browse files
committed
feat: add ability to stat files in workspaces
Signed-off-by: Donnie Adams <[email protected]>
1 parent c3d4ba7 commit 5a758ca

File tree

3 files changed

+46
-0
lines changed

3 files changed

+46
-0
lines changed

gptscript/fileinfo.py

+10
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,10 @@
1+
from datetime import datetime
2+
3+
from pydantic import BaseModel
4+
5+
6+
class FileInfo(BaseModel):
7+
workspaceID: str
8+
name: str
9+
size: int
10+
modTime: datetime

gptscript/gptscript.py

+15
Original file line numberDiff line numberDiff line change
@@ -9,6 +9,7 @@
99
from gptscript.confirm import AuthResponse
1010
from gptscript.credentials import Credential, to_credential
1111
from gptscript.datasets import DatasetMeta, Dataset, DatasetElementMeta, DatasetElement
12+
from gptscript.fileinfo import FileInfo
1213
from gptscript.frame import RunFrame, CallFrame, PromptFrame, Program
1314
from gptscript.opts import GlobalOptions
1415
from gptscript.prompt import PromptResponse
@@ -402,6 +403,20 @@ async def read_file_in_workspace(self, file_path: str, workspace_id: str = "") -
402403
}
403404
))
404405

406+
async def stat_file_in_workspace(self, file_path: str, workspace_id: str = "") -> FileInfo:
407+
if workspace_id == "":
408+
workspace_id = os.environ["GPTSCRIPT_WORKSPACE_ID"]
409+
410+
return FileInfo.model_validate_json(await self._run_basic_command(
411+
"workspaces/stat-file",
412+
{
413+
"id": workspace_id,
414+
"filePath": file_path,
415+
"workspaceTool": self.opts.WorkspaceTool,
416+
"env": self.opts.Env,
417+
}
418+
))
419+
405420

406421
def _get_command():
407422
if os.getenv("GPTSCRIPT_BIN") is not None:

tests/test_gptscript.py

+21
Original file line numberDiff line numberDiff line change
@@ -810,6 +810,17 @@ async def test_create_read_and_delete_file_in_workspace(gptscript):
810810
await gptscript.write_file_in_workspace("test.txt", b"test", workspace_id)
811811
contents = await gptscript.read_file_in_workspace("test.txt", workspace_id)
812812
assert contents == b"test"
813+
814+
file_info = await gptscript.stat_file_in_workspace("test.txt", workspace_id)
815+
assert file_info.name == "test.txt"
816+
assert file_info.size == 4
817+
assert file_info.modTime.hour == datetime.now(
818+
tz=file_info.modTime.tzinfo,
819+
).hour and file_info.modTime < datetime.now(
820+
tz=file_info.modTime.tzinfo,
821+
)
822+
823+
assert file_info.workspaceID == workspace_id
813824
await gptscript.delete_file_in_workspace("test.txt", workspace_id)
814825
await gptscript.delete_workspace(workspace_id)
815826

@@ -857,6 +868,16 @@ async def test_create_read_and_delete_file_in_workspaces3(gptscript):
857868
await gptscript.write_file_in_workspace("test.txt", b"test", workspace_id)
858869
contents = await gptscript.read_file_in_workspace("test.txt", workspace_id)
859870
assert contents == b"test"
871+
872+
file_info = await gptscript.stat_file_in_workspace("test.txt", workspace_id)
873+
assert file_info.name == "test.txt"
874+
assert file_info.size == 4
875+
assert file_info.modTime.hour == datetime.now(
876+
tz=file_info.modTime.tzinfo,
877+
).hour and file_info.modTime < datetime.now(
878+
tz=file_info.modTime.tzinfo,
879+
)
880+
860881
await gptscript.delete_file_in_workspace("test.txt", workspace_id)
861882
await gptscript.delete_workspace(workspace_id)
862883

0 commit comments

Comments
 (0)