You can not select more than 25 topics Topics must start with a chinese character,a letter or number, can include dashes ('-') and can be up to 35 characters long.

test_dataset_delete.py 4.0 kB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112
  1. # Copyright (c) Alibaba, Inc. and its affiliates.
  2. import os
  3. import shutil
  4. import tempfile
  5. import unittest
  6. import zipfile
  7. from modelscope.msdatasets import MsDataset
  8. from modelscope.utils import logger as logging
  9. from modelscope.utils.test_utils import test_level
  10. logger = logging.get_logger(__name__)
  11. KEY_EXTRACTED = 'extracted'
  12. EXPECTED_MSG = 'success'
  13. class DatasetDeleteTest(unittest.TestCase):
  14. def setUp(self):
  15. self.old_dir = os.getcwd()
  16. self.dataset_name = 'small_coco_for_test'
  17. self.dataset_file_name = self.dataset_name
  18. self.prepared_dataset_name = 'pets_small'
  19. self.token = os.getenv('TEST_UPLOAD_MS_TOKEN')
  20. error_msg = 'The modelscope token can not be empty, please set env variable: TEST_UPLOAD_MS_TOKEN'
  21. self.assertIsNotNone(self.token, msg=error_msg)
  22. from modelscope.hub.api import HubApi
  23. from modelscope.hub.api import ModelScopeConfig
  24. self.api = HubApi()
  25. self.api.login(self.token)
  26. # get user info
  27. self.namespace, _ = ModelScopeConfig.get_user_info()
  28. self.temp_dir = tempfile.mkdtemp()
  29. self.test_work_dir = os.path.join(self.temp_dir, self.dataset_name)
  30. if not os.path.exists(self.test_work_dir):
  31. os.makedirs(self.test_work_dir)
  32. def tearDown(self):
  33. os.chdir(self.old_dir)
  34. shutil.rmtree(self.temp_dir, ignore_errors=True)
  35. logger.info(
  36. f'Temporary directory {self.temp_dir} successfully removed!')
  37. @staticmethod
  38. def get_raw_downloaded_file_path(extracted_path):
  39. raw_downloaded_file_path = ''
  40. raw_data_dir = os.path.abspath(
  41. os.path.join(extracted_path, '../../..'))
  42. for root, dirs, files in os.walk(raw_data_dir):
  43. if KEY_EXTRACTED in dirs:
  44. for file in files:
  45. curr_file_path = os.path.join(root, file)
  46. if zipfile.is_zipfile(curr_file_path):
  47. raw_downloaded_file_path = curr_file_path
  48. return raw_downloaded_file_path
  49. def upload_test_file(self):
  50. # Get the prepared data from hub, using default modelscope namespace
  51. ms_ds_train = MsDataset.load(self.prepared_dataset_name, split='train')
  52. config_res = ms_ds_train._hf_ds.config_kwargs
  53. extracted_path = config_res.get('split_config').get('train')
  54. raw_zipfile_path = self.get_raw_downloaded_file_path(extracted_path)
  55. object_name = self.dataset_file_name + '_for_del.zip'
  56. MsDataset.upload(
  57. object_name=object_name,
  58. local_file_path=raw_zipfile_path,
  59. dataset_name=self.dataset_name,
  60. namespace=self.namespace)
  61. return object_name
  62. def upload_test_dir(self):
  63. ms_ds_train = MsDataset.load(self.prepared_dataset_name, split='train')
  64. config_train = ms_ds_train._hf_ds.config_kwargs
  65. extracted_path_train = config_train.get('split_config').get('train')
  66. object_name = 'train_for_del'
  67. MsDataset.upload(
  68. object_name=object_name,
  69. local_file_path=os.path.join(extracted_path_train,
  70. 'Pets/images/train'),
  71. dataset_name=self.dataset_name,
  72. namespace=self.namespace)
  73. return object_name + '/'
  74. @unittest.skipUnless(test_level() >= 1, 'skip test in current test level')
  75. def test_ds_delete_object(self):
  76. # upload prepared data
  77. file_name = self.upload_test_file()
  78. dir_name = self.upload_test_dir()
  79. # delete object
  80. del_file_msg = MsDataset.delete(
  81. object_name=file_name,
  82. dataset_name=self.dataset_name,
  83. namespace=self.namespace)
  84. del_dir_msg = MsDataset.delete(
  85. object_name=dir_name,
  86. dataset_name=self.dataset_name,
  87. namespace=self.namespace)
  88. assert all([del_file_msg == EXPECTED_MSG, del_dir_msg == EXPECTED_MSG])
  89. if __name__ == '__main__':
  90. unittest.main()