@@ -282,6 +282,68 @@ def test_put_data_with_metadata(
282282 assert ret ['x-qn-meta' ]['name' ] == 'qiniu'
283283 assert ret ['x-qn-meta' ]['age' ] == '18'
284284
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+
285347
286348class TestResumableUploader :
287349 @pytest .mark .parametrize ('temp_file' , [64 * KB ], indirect = True )
@@ -544,6 +606,87 @@ def test_put_stream_v2_with_metadata(
544606 assert ret ['x-qn-meta' ]['name' ] == 'qiniu'
545607 assert ret ['x-qn-meta' ]['age' ] == '18'
546608
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+
547690 @pytest .mark .parametrize ('temp_file' , [30 * MB ], indirect = True )
548691 @pytest .mark .parametrize ('version' , ['v1' , 'v2' ])
549692 def test_resume_upload (self , bucket_name , qn_auth , temp_file , version ):
0 commit comments