@@ -338,7 +338,7 @@ def query_download_size(self, url: str, timeout_ms: int = default_timeout):
338
338
current_index = next (self .counting_iterator ) # A thread-safe counter
339
339
item = QueueItem (
340
340
current_index ,
341
- self .__create_get_request (url , timeout_ms ),
341
+ self .__create_get_request (url , timeout_ms , disable_cache = true ),
342
342
track_progress = False ,
343
343
operation = QtNetwork .QNetworkAccessManager .HeadOperation ,
344
344
)
@@ -347,9 +347,7 @@ def query_download_size(self, url: str, timeout_ms: int = default_timeout):
347
347
return current_index
348
348
349
349
def submit_unmonitored_get (
350
- self ,
351
- url : str ,
352
- timeout_ms : int = default_timeout ,
350
+ self , url : str , timeout_ms : int = default_timeout , disable_cache : bool = False
353
351
) -> int :
354
352
"""Adds this request to the queue, and returns an index that can be used by calling code
355
353
in conjunction with the completed() signal to handle the results of the call. All data is
@@ -360,16 +358,16 @@ def submit_unmonitored_get(
360
358
# Use a queue because we can only put things on the QNAM from the main event loop thread
361
359
self .queue .put (
362
360
QueueItem (
363
- current_index , self .__create_get_request (url , timeout_ms ), track_progress = False
361
+ current_index ,
362
+ self .__create_get_request (url , timeout_ms , disable_cache ),
363
+ track_progress = False ,
364
364
)
365
365
)
366
366
self .__request_queued .emit ()
367
367
return current_index
368
368
369
369
def submit_monitored_get (
370
- self ,
371
- url : str ,
372
- timeout_ms : int = default_timeout ,
370
+ self , url : str , timeout_ms : int = default_timeout , disable_cache : bool = False
373
371
) -> int :
374
372
"""Adds this request to the queue, and returns an index that can be used by calling code
375
373
in conjunction with the progress_made() and progress_completed() signals to handle the
@@ -382,7 +380,9 @@ def submit_monitored_get(
382
380
# Use a queue because we can only put things on the QNAM from the main event loop thread
383
381
self .queue .put (
384
382
QueueItem (
385
- current_index , self .__create_get_request (url , timeout_ms ), track_progress = True
383
+ current_index ,
384
+ self .__create_get_request (url , timeout_ms , disable_cache ),
385
+ track_progress = True ,
386
386
)
387
387
)
388
388
self .__request_queued .emit ()
@@ -394,6 +394,7 @@ def blocking_get_with_retries(
394
394
timeout_ms : int = default_timeout ,
395
395
max_attempts : int = 3 ,
396
396
delay_ms : int = 1000 ,
397
+ disable_cache : bool = False ,
397
398
):
398
399
"""Submits a GET request to the QNetworkAccessManager and blocks until it is complete. Do
399
400
not use on the main GUI thread, it will prevent any event processing while it blocks.
@@ -421,9 +422,7 @@ def blocking_get_with_retries(
421
422
time .sleep (delay_ms / 1000 )
422
423
423
424
def blocking_get (
424
- self ,
425
- url : str ,
426
- timeout_ms : int = default_timeout ,
425
+ self , url : str , timeout_ms : int = default_timeout , disable_cache : bool = False
427
426
) -> Optional [QtCore .QByteArray ]:
428
427
"""Submits a GET request to the QNetworkAccessManager and blocks until it is complete. Do
429
428
not use on the main GUI thread, it will prevent any event processing while it blocks.
@@ -438,7 +437,9 @@ def blocking_get(
438
437
439
438
self .queue .put (
440
439
QueueItem (
441
- current_index , self .__create_get_request (url , timeout_ms ), track_progress = False
440
+ current_index ,
441
+ self .__create_get_request (url , timeout_ms , disable_cache ),
442
+ track_progress = False ,
442
443
)
443
444
)
444
445
self .__request_queued .emit ()
@@ -476,18 +477,27 @@ def __synchronous_process_completion(
476
477
self .synchronous_complete [index ] = True
477
478
478
479
@staticmethod
479
- def __create_get_request (url : str , timeout_ms : int ) -> QtNetwork .QNetworkRequest :
480
+ def __create_get_request (
481
+ url : str , timeout_ms : int , disable_cache : bool
482
+ ) -> QtNetwork .QNetworkRequest :
480
483
"""Construct a network request to a given URL"""
481
484
request = QtNetwork .QNetworkRequest (QtCore .QUrl (url ))
482
485
request .setAttribute (
483
486
QtNetwork .QNetworkRequest .RedirectPolicyAttribute ,
484
487
QtNetwork .QNetworkRequest .ManualRedirectPolicy ,
485
488
)
486
- request .setAttribute (QtNetwork .QNetworkRequest .CacheSaveControlAttribute , True )
487
- request .setAttribute (
488
- QtNetwork .QNetworkRequest .CacheLoadControlAttribute ,
489
- QtNetwork .QNetworkRequest .PreferNetwork ,
490
- )
489
+ if disable_cache :
490
+ request .setAttribute (QtNetwork .QNetworkRequest .CacheSaveControlAttribute , False )
491
+ request .setAttribute (
492
+ QtNetwork .QNetworkRequest .CacheLoadControlAttribute ,
493
+ QtNetwork .QNetworkRequest .AlwaysNetwork ,
494
+ )
495
+ else :
496
+ request .setAttribute (QtNetwork .QNetworkRequest .CacheSaveControlAttribute , True )
497
+ request .setAttribute (
498
+ QtNetwork .QNetworkRequest .CacheLoadControlAttribute ,
499
+ QtNetwork .QNetworkRequest .PreferNetwork ,
500
+ )
491
501
if hasattr (request , "setTransferTimeout" ):
492
502
# Added in Qt 5.15
493
503
# In Qt 5, the function setTransferTimeout seems to accept
@@ -630,8 +640,13 @@ def __reply_finished(self) -> None:
630
640
if hasattr (request , "transferTimeout" ):
631
641
timeout_ms = request .transferTimeout ()
632
642
new_url = reply .attribute (QtNetwork .QNetworkRequest .RedirectionTargetAttribute )
643
+ disable_cache = not reply .request ().attribute (
644
+ QtNetwork .QNetworkRequest .CacheSaveControlAttribute
645
+ )
633
646
self .__launch_request (
634
- index , self .__create_get_request (new_url , timeout_ms ), reply .operation ()
647
+ index ,
648
+ self .__create_get_request (new_url , timeout_ms , disable_cache = disable_cache ),
649
+ reply .operation (),
635
650
)
636
651
return # The task is not done, so get out of this method now
637
652
if reply .error () != QtNetwork .QNetworkReply .NetworkError .OperationCanceledError :
0 commit comments