@@ -352,3 +352,83 @@ def test_copy_segment_abort(self, accesskey, url, tmp_path):
352352 dataset_client .copy_segment ("Segment1" , "Segment2" )
353353
354354 gas_client .delete_dataset (dataset_name )
355+
356+ def test_copy_segment_between_datasets (self , accesskey , url , tmp_path ):
357+ gas_client = GAS (access_key = accesskey , url = url )
358+ dataset_name_1 = get_dataset_name ()
359+ dataset_name_2 = dataset_name_1 + "_2"
360+ gas_client .create_dataset (dataset_name_1 )
361+ dataset_client_2 = gas_client .create_dataset (dataset_name_2 )
362+ dataset_1 = Dataset (name = dataset_name_1 )
363+ segment_1 = dataset_1 .create_segment ("Segment1" )
364+ dataset_1 ._catalog = Catalog .loads (CATALOG )
365+ path = tmp_path / "sub"
366+ path .mkdir ()
367+ for i in range (10 ):
368+ local_path = path / f"hello{ i } .txt"
369+ local_path .write_text ("CONTENT" )
370+ data = Data (local_path = str (local_path ))
371+ data .label = Label .loads (LABEL )
372+ segment_1 .append (data )
373+ dataset_client_2 .create_draft ("draft_2" )
374+ dataset_client_1 = gas_client .upload_dataset (dataset_1 )
375+ segment_client = dataset_client_2 .copy_segment (
376+ "Segment1" , "Segment2" , source_client = dataset_client_1
377+ )
378+ assert segment_client .name == "Segment2"
379+
380+ with pytest .raises (InvalidParamsError ):
381+ dataset_client_2 .copy_segment (
382+ "Segment1" , "Segment3" , source_client = dataset_client_1 , strategy = "push"
383+ )
384+
385+ segment2 = Segment ("Segment2" , client = dataset_client_2 )
386+ assert segment2 [0 ].path == "hello0.txt"
387+ assert segment2 [0 ].path == segment_1 [0 ].target_remote_path
388+ assert segment2 [0 ].label
389+
390+ gas_client .delete_dataset (dataset_name_1 )
391+ gas_client .delete_dataset (dataset_name_2 )
392+
393+ def test_copy_segment_from_commits (self , accesskey , url , tmp_path ):
394+ gas_client = GAS (access_key = accesskey , url = url )
395+ dataset_name = get_dataset_name ()
396+ gas_client .create_dataset (dataset_name )
397+ dataset = Dataset (name = dataset_name )
398+ segment = dataset .create_segment ("Segment1" )
399+ dataset ._catalog = Catalog .loads (CATALOG )
400+ path = tmp_path / "sub"
401+ path .mkdir ()
402+ for i in range (10 ):
403+ local_path = path / f"hello{ i } .txt"
404+ local_path .write_text ("CONTENT" )
405+ data = Data (local_path = str (local_path ))
406+ data .label = Label .loads (LABEL )
407+ segment .append (data )
408+
409+ dataset_client = gas_client .upload_dataset (dataset )
410+ dataset_client .commit ("commit_1" )
411+
412+ dataset_client .create_draft ("draft_2" )
413+ dataset_client .commit ("commit_2" )
414+
415+ dataset_client_1 = gas_client .get_dataset (dataset_name )
416+ dataset_client_1 = gas_client .get_dataset (dataset_name )
417+ commit_id = dataset_client_1 .list_commits ()[- 1 ].commit_id
418+ dataset_client_1 .checkout (revision = commit_id )
419+ dataset_client .create_draft ("draft_3" )
420+ segment_client = dataset_client .copy_segment (
421+ "Segment1" , "Segment2" , source_client = dataset_client_1
422+ )
423+ assert segment_client .name == "Segment2"
424+
425+ with pytest .raises (InvalidParamsError ):
426+ dataset_client .copy_segment ("Segment1" , "Segment3" , strategy = "push" )
427+ segment2 = Segment ("Segment2" , client = dataset_client )
428+ assert segment2 [0 ].path == "hello0.txt"
429+ assert segment2 [0 ].path == segment [0 ].target_remote_path
430+ assert segment2 [0 ].label
431+ commit_id_1 = dataset_client_1 .list_commits ()[0 ].commit_id
432+ dataset_client .checkout (revision = commit_id_1 )
433+
434+ gas_client .delete_dataset (dataset_name )
0 commit comments