11
11
from huggingface_hub .commands .download import DownloadCommand
12
12
from huggingface_hub .commands .scan_cache import ScanCacheCommand
13
13
from huggingface_hub .commands .upload import UploadCommand
14
- from huggingface_hub .utils import SoftTemporaryDirectory , capture_output
14
+ from huggingface_hub .utils import RevisionNotFoundError , SoftTemporaryDirectory , capture_output
15
15
16
16
from .testing_utils import DUMMY_MODEL_ID
17
17
@@ -211,9 +211,10 @@ def test_every_as_float(self) -> None:
211
211
cmd = UploadCommand (self .parser .parse_args (["upload" , DUMMY_MODEL_ID , "." , "--every" , "0.5" ]))
212
212
self .assertEqual (cmd .every , 0.5 )
213
213
214
+ @patch ("huggingface_hub.commands.upload.HfApi.repo_info" )
214
215
@patch ("huggingface_hub.commands.upload.HfApi.upload_folder" )
215
216
@patch ("huggingface_hub.commands.upload.HfApi.create_repo" )
216
- def test_upload_folder_mock (self , create_mock : Mock , upload_mock : Mock ) -> None :
217
+ def test_upload_folder_mock (self , create_mock : Mock , upload_mock : Mock , repo_info_mock : Mock ) -> None :
217
218
with SoftTemporaryDirectory () as cache_dir :
218
219
cmd = UploadCommand (
219
220
self .parser .parse_args (
@@ -239,9 +240,10 @@ def test_upload_folder_mock(self, create_mock: Mock, upload_mock: Mock) -> None:
239
240
delete_patterns = ["*.json" ],
240
241
)
241
242
243
+ @patch ("huggingface_hub.commands.upload.HfApi.repo_info" )
242
244
@patch ("huggingface_hub.commands.upload.HfApi.upload_file" )
243
245
@patch ("huggingface_hub.commands.upload.HfApi.create_repo" )
244
- def test_upload_file_mock (self , create_mock : Mock , upload_mock : Mock ) -> None :
246
+ def test_upload_file_mock (self , create_mock : Mock , upload_mock : Mock , repo_info_mock : Mock ) -> None :
245
247
with SoftTemporaryDirectory () as cache_dir :
246
248
file_path = Path (cache_dir ) / "file.txt"
247
249
file_path .write_text ("content" )
@@ -266,6 +268,65 @@ def test_upload_file_mock(self, create_mock: Mock, upload_mock: Mock) -> None:
266
268
create_pr = True ,
267
269
)
268
270
271
+ @patch ("huggingface_hub.commands.upload.HfApi.repo_info" )
272
+ @patch ("huggingface_hub.commands.upload.HfApi.upload_file" )
273
+ @patch ("huggingface_hub.commands.upload.HfApi.create_repo" )
274
+ def test_upload_file_no_revision_mock (self , create_mock : Mock , upload_mock : Mock , repo_info_mock : Mock ) -> None :
275
+ with SoftTemporaryDirectory () as cache_dir :
276
+ file_path = Path (cache_dir ) / "file.txt"
277
+ file_path .write_text ("content" )
278
+ cmd = UploadCommand (self .parser .parse_args (["upload" , "my-model" , str (file_path ), "logs/file.txt" ]))
279
+ cmd .run ()
280
+ # Revision not specified => no need to check
281
+ repo_info_mock .assert_not_called ()
282
+
283
+ @patch ("huggingface_hub.commands.upload.HfApi.create_branch" )
284
+ @patch ("huggingface_hub.commands.upload.HfApi.repo_info" )
285
+ @patch ("huggingface_hub.commands.upload.HfApi.upload_file" )
286
+ @patch ("huggingface_hub.commands.upload.HfApi.create_repo" )
287
+ def test_upload_file_with_revision_mock (
288
+ self , create_mock : Mock , upload_mock : Mock , repo_info_mock : Mock , create_branch_mock : Mock
289
+ ) -> None :
290
+ repo_info_mock .side_effect = RevisionNotFoundError ("revision not found" )
291
+
292
+ with SoftTemporaryDirectory () as cache_dir :
293
+ file_path = Path (cache_dir ) / "file.txt"
294
+ file_path .write_text ("content" )
295
+ cmd = UploadCommand (
296
+ self .parser .parse_args (
297
+ ["upload" , "my-model" , str (file_path ), "logs/file.txt" , "--revision" , "my-branch" ]
298
+ )
299
+ )
300
+ cmd .run ()
301
+
302
+ # Revision specified => check that it exists
303
+ repo_info_mock .assert_called_once_with (
304
+ repo_id = create_mock .return_value .repo_id , repo_type = "model" , revision = "my-branch"
305
+ )
306
+
307
+ # Revision does not exist => create it
308
+ create_branch_mock .assert_called_once_with (
309
+ repo_id = create_mock .return_value .repo_id , repo_type = "model" , branch = "my-branch" , exist_ok = True
310
+ )
311
+
312
+ @patch ("huggingface_hub.commands.upload.HfApi.repo_info" )
313
+ @patch ("huggingface_hub.commands.upload.HfApi.upload_file" )
314
+ @patch ("huggingface_hub.commands.upload.HfApi.create_repo" )
315
+ def test_upload_file_revision_and_create_pr_mock (
316
+ self , create_mock : Mock , upload_mock : Mock , repo_info_mock : Mock
317
+ ) -> None :
318
+ with SoftTemporaryDirectory () as cache_dir :
319
+ file_path = Path (cache_dir ) / "file.txt"
320
+ file_path .write_text ("content" )
321
+ cmd = UploadCommand (
322
+ self .parser .parse_args (
323
+ ["upload" , "my-model" , str (file_path ), "logs/file.txt" , "--revision" , "my-branch" , "--create-pr" ]
324
+ )
325
+ )
326
+ cmd .run ()
327
+ # Revision specified but --create-pr => no need to check
328
+ repo_info_mock .assert_not_called ()
329
+
269
330
@patch ("huggingface_hub.commands.upload.HfApi.create_repo" )
270
331
def test_upload_missing_path (self , create_mock : Mock ) -> None :
271
332
cmd = UploadCommand (self .parser .parse_args (["upload" , "my-model" , "/path/to/missing_file" , "logs/file.txt" ]))
0 commit comments