@@ -282,6 +282,68 @@ def test_put_data_with_metadata(
282
282
assert ret ['x-qn-meta' ]['name' ] == 'qiniu'
283
283
assert ret ['x-qn-meta' ]['age' ] == '18'
284
284
285
+ @pytest .mark .parametrize ('temp_file' , [64 * KB ], indirect = True )
286
+ def test_put_file_with_callback (
287
+ self ,
288
+ qn_auth ,
289
+ bucket_name ,
290
+ temp_file ,
291
+ commonly_options ,
292
+ bucket_manager ,
293
+ upload_callback_url
294
+ ):
295
+ key = 'test_file_with_callback'
296
+ policy = {
297
+ 'callbackUrl' : upload_callback_url ,
298
+ 'callbackBody' : '{"custom_vars":{"a":$(x:a)},"key":$(key),"hash":$(etag)}' ,
299
+ 'callbackBodyType' : 'application/json' ,
300
+ }
301
+ token = qn_auth .upload_token (bucket_name , key , policy = policy )
302
+ ret , info = put_file (
303
+ token ,
304
+ key ,
305
+ temp_file ,
306
+ metadata = commonly_options .metadata ,
307
+ params = commonly_options .params ,
308
+ )
309
+ assert ret ['key' ] == key
310
+ assert ret ['hash' ] == etag (temp_file )
311
+ assert ret ['custom_vars' ]['a' ] == 'a'
312
+ ret , info = bucket_manager .stat (bucket_name , key )
313
+ assert 'x-qn-meta' in ret
314
+ assert ret ['x-qn-meta' ]['name' ] == 'qiniu'
315
+ assert ret ['x-qn-meta' ]['age' ] == '18'
316
+
317
+ def test_put_data_with_callback (
318
+ self ,
319
+ qn_auth ,
320
+ bucket_name ,
321
+ commonly_options ,
322
+ bucket_manager ,
323
+ upload_callback_url
324
+ ):
325
+ key = 'put_data_with_metadata'
326
+ data = 'hello metadata!'
327
+ policy = {
328
+ 'callbackUrl' : upload_callback_url ,
329
+ 'callbackBody' : '{"custom_vars":{"a":$(x:a)},"key":$(key),"hash":$(etag)}' ,
330
+ 'callbackBodyType' : 'application/json' ,
331
+ }
332
+ token = qn_auth .upload_token (bucket_name , key , policy = policy )
333
+ ret , info = put_data (
334
+ token ,
335
+ key ,
336
+ data ,
337
+ metadata = commonly_options .metadata ,
338
+ params = commonly_options .params
339
+ )
340
+ assert ret ['key' ] == key
341
+ assert ret ['custom_vars' ]['a' ] == 'a'
342
+ ret , info = bucket_manager .stat (bucket_name , key )
343
+ assert 'x-qn-meta' in ret
344
+ assert ret ['x-qn-meta' ]['name' ] == 'qiniu'
345
+ assert ret ['x-qn-meta' ]['age' ] == '18'
346
+
285
347
286
348
class TestResumableUploader :
287
349
@pytest .mark .parametrize ('temp_file' , [64 * KB ], indirect = True )
@@ -544,6 +606,87 @@ def test_put_stream_v2_with_metadata(
544
606
assert ret ['x-qn-meta' ]['name' ] == 'qiniu'
545
607
assert ret ['x-qn-meta' ]['age' ] == '18'
546
608
609
+ @pytest .mark .parametrize ('temp_file' , [64 * KB ], indirect = True )
610
+ def test_put_stream_with_callback (
611
+ self ,
612
+ qn_auth ,
613
+ bucket_name ,
614
+ temp_file ,
615
+ commonly_options ,
616
+ bucket_manager ,
617
+ upload_callback_url
618
+ ):
619
+ key = 'test_put_stream_with_callback'
620
+ size = os .stat (temp_file ).st_size
621
+ with open (temp_file , 'rb' ) as input_stream :
622
+ policy = {
623
+ 'callbackUrl' : upload_callback_url ,
624
+ 'callbackBody' : '{"custom_vars":{"a":$(x:a)},"key":$(key),"hash":$(etag)}' ,
625
+ 'callbackBodyType' : 'application/json' ,
626
+ }
627
+ token = qn_auth .upload_token (bucket_name , key , policy = policy )
628
+ ret , info = put_stream (
629
+ token ,
630
+ key ,
631
+ input_stream ,
632
+ os .path .basename (temp_file ),
633
+ size ,
634
+ None ,
635
+ commonly_options .params ,
636
+ commonly_options .mime_type ,
637
+ part_size = None ,
638
+ version = None ,
639
+ bucket_name = None ,
640
+ metadata = commonly_options .metadata
641
+ )
642
+ assert ret ['key' ] == key
643
+ assert ret ['custom_vars' ]['a' ] == 'a'
644
+ ret , info = bucket_manager .stat (bucket_name , key )
645
+ assert 'x-qn-meta' in ret
646
+ assert ret ['x-qn-meta' ]['name' ] == 'qiniu'
647
+ assert ret ['x-qn-meta' ]['age' ] == '18'
648
+
649
+ @pytest .mark .parametrize ('temp_file' , [4 * MB + 1 ], indirect = True )
650
+ def test_put_stream_v2_with_callback (
651
+ self ,
652
+ qn_auth ,
653
+ bucket_name ,
654
+ temp_file ,
655
+ commonly_options ,
656
+ bucket_manager ,
657
+ upload_callback_url
658
+ ):
659
+ part_size = 4 * MB
660
+ key = 'test_put_stream_v2_with_metadata'
661
+ size = os .stat (temp_file ).st_size
662
+ with open (temp_file , 'rb' ) as input_stream :
663
+ policy = {
664
+ 'callbackUrl' : upload_callback_url ,
665
+ 'callbackBody' : '{"custom_vars":{"a":$(x:a)},"key":$(key),"hash":$(etag)}' ,
666
+ 'callbackBodyType' : 'application/json' ,
667
+ }
668
+ token = qn_auth .upload_token (bucket_name , key , policy = policy )
669
+ ret , info = put_stream (
670
+ token ,
671
+ key ,
672
+ input_stream ,
673
+ os .path .basename (temp_file ),
674
+ size ,
675
+ None ,
676
+ commonly_options .params ,
677
+ commonly_options .mime_type ,
678
+ part_size = part_size ,
679
+ version = 'v2' ,
680
+ bucket_name = bucket_name ,
681
+ metadata = commonly_options .metadata
682
+ )
683
+ assert ret ['key' ] == key
684
+ assert ret ['custom_vars' ]['a' ] == 'a'
685
+ ret , info = bucket_manager .stat (bucket_name , key )
686
+ assert 'x-qn-meta' in ret
687
+ assert ret ['x-qn-meta' ]['name' ] == 'qiniu'
688
+ assert ret ['x-qn-meta' ]['age' ] == '18'
689
+
547
690
@pytest .mark .parametrize ('temp_file' , [30 * MB ], indirect = True )
548
691
@pytest .mark .parametrize ('version' , ['v1' , 'v2' ])
549
692
def test_resume_upload (self , bucket_name , qn_auth , temp_file , version ):
0 commit comments