@@ -757,6 +757,7 @@ async def test_credentials(gptscript):
757757 res = await gptscript .delete_credential (name = name )
758758 assert not res .startswith ("an error occurred" ), "Unexpected error deleting credential: " + res
759759
760+
760761@pytest .mark .asyncio
761762async def test_datasets (gptscript ):
762763 with tempfile .TemporaryDirectory (prefix = "py-gptscript_" ) as tempdir :
@@ -770,7 +771,8 @@ async def test_datasets(gptscript):
770771 assert len (dataset .elements ) == 0 , "Expected dataset elements to be empty"
771772
772773 # Add an element
773- element_meta = await gptscript .add_dataset_element (tempdir , dataset .id , "element1" , "element1 contents" , "element1 description" )
774+ element_meta = await gptscript .add_dataset_element (tempdir , dataset .id , "element1" , "element1 contents" ,
775+ "element1 description" )
774776 assert element_meta .name == "element1" , "Expected element name to match"
775777 assert element_meta .description == "element1 description" , "Expected element description to match"
776778
@@ -792,3 +794,93 @@ async def test_datasets(gptscript):
792794 assert datasets [0 ].id == dataset .id , "Expected dataset id to match"
793795 assert datasets [0 ].name == dataset_name , "Expected dataset name to match"
794796 assert datasets [0 ].description == "this is a test dataset" , "Expected dataset description to match"
797+
798+
799+ @pytest .mark .asyncio
800+ async def test_create_and_delete_workspace (gptscript ):
801+ workspace_id = await gptscript .create_workspace ("directory" )
802+ assert workspace_id != "" and workspace_id .startswith ("directory://" ), "Expected workspace id to be set"
803+ await gptscript .delete_workspace (workspace_id )
804+
805+
806+ @pytest .mark .asyncio
807+ async def test_create_read_and_delete_file_in_workspace (gptscript ):
808+ workspace_id = await gptscript .create_workspace ("directory" )
809+ await gptscript .write_file_in_workspace ("test.txt" , b"test" , workspace_id )
810+ contents = await gptscript .read_file_in_workspace ("test.txt" , workspace_id )
811+ assert contents == b"test"
812+ await gptscript .delete_file_in_workspace ("test.txt" , workspace_id )
813+ await gptscript .delete_workspace (workspace_id )
814+
815+
816+ @pytest .mark .asyncio
817+ async def test_ls_complex_workspace (gptscript ):
818+ workspace_id = await gptscript .create_workspace ("directory" )
819+ await gptscript .write_file_in_workspace ("test/test1.txt" , b"hello1" , workspace_id )
820+ await gptscript .write_file_in_workspace ("test1/test2.txt" , b"hello2" , workspace_id )
821+ await gptscript .write_file_in_workspace ("test1/test3.txt" , b"hello3" , workspace_id )
822+ await gptscript .write_file_in_workspace (".hidden.txt" , b"hidden" , workspace_id )
823+
824+ files = await gptscript .list_files_in_workspace (workspace_id )
825+ assert len (files ) == 4
826+
827+ files = await gptscript .list_files_in_workspace (workspace_id , prefix = "test1" )
828+ assert len (files ) == 2
829+
830+ await gptscript .remove_all (workspace_id , with_prefix = "test1" )
831+
832+ files = await gptscript .list_files_in_workspace (workspace_id )
833+ assert len (files ) == 2
834+
835+ await gptscript .delete_workspace (workspace_id )
836+
837+
838+ @pytest .mark .skipif (
839+ os .environ .get ("AWS_ACCESS_KEY_ID" ) is None or os .environ .get ("AWS_SECRET_ACCESS_KEY" ) is None ,
840+ reason = "AWS credentials not set" ,
841+ )
842+ @pytest .mark .asyncio
843+ async def test_create_and_delete_workspace_s3 (gptscript ):
844+ workspace_id = await gptscript .create_workspace ("s3" )
845+ assert workspace_id != "" and workspace_id .startswith ("s3://" ), "Expected workspace id to be set"
846+ await gptscript .delete_workspace (workspace_id )
847+
848+
849+ @pytest .mark .skipif (
850+ os .environ .get ("AWS_ACCESS_KEY_ID" ) is None or os .environ .get ("AWS_SECRET_ACCESS_KEY" ) is None ,
851+ reason = "AWS credentials not set" ,
852+ )
853+ @pytest .mark .asyncio
854+ async def test_create_read_and_delete_file_in_workspaces3 (gptscript ):
855+ workspace_id = await gptscript .create_workspace ("s3" )
856+ await gptscript .write_file_in_workspace ("test.txt" , b"test" , workspace_id )
857+ contents = await gptscript .read_file_in_workspace ("test.txt" , workspace_id )
858+ assert contents == b"test"
859+ await gptscript .delete_file_in_workspace ("test.txt" , workspace_id )
860+ await gptscript .delete_workspace (workspace_id )
861+
862+
863+ @pytest .mark .skipif (
864+ os .environ .get ("AWS_ACCESS_KEY_ID" ) is None or os .environ .get ("AWS_SECRET_ACCESS_KEY" ) is None ,
865+ reason = "AWS credentials not set" ,
866+ )
867+ @pytest .mark .asyncio
868+ async def test_ls_complex_workspace_s3 (gptscript ):
869+ workspace_id = await gptscript .create_workspace ("s3" )
870+ await gptscript .write_file_in_workspace ("test/test1.txt" , b"hello1" , workspace_id )
871+ await gptscript .write_file_in_workspace ("test1/test2.txt" , b"hello2" , workspace_id )
872+ await gptscript .write_file_in_workspace ("test1/test3.txt" , b"hello3" , workspace_id )
873+ await gptscript .write_file_in_workspace (".hidden.txt" , b"hidden" , workspace_id )
874+
875+ files = await gptscript .list_files_in_workspace (workspace_id )
876+ assert len (files ) == 4
877+
878+ files = await gptscript .list_files_in_workspace (workspace_id , prefix = "test1" )
879+ assert len (files ) == 2
880+
881+ await gptscript .remove_all (workspace_id , with_prefix = "test1" )
882+
883+ files = await gptscript .list_files_in_workspace (workspace_id )
884+ assert len (files ) == 2
885+
886+ await gptscript .delete_workspace (workspace_id )
0 commit comments