@@ -942,22 +942,26 @@ def purge_the_cdn(db: ReleaseShelf) -> None:
942
942
"https://www.python.org/downloads/windows/" ,
943
943
"https://www.python.org/downloads/macos/" ,
944
944
]
945
- # Purge the source URLs and their associated metadata files.
946
- source_urls = [
947
- f"https://www.python.org/ftp/python/{ normalized_release } /Python-{ db ['release' ]} .tgz" ,
948
- f"https://www.python.org/ftp/python/{ normalized_release } /Python-{ db ['release' ]} .tar.xz" ,
949
- ]
950
- for source_url in source_urls :
951
- urls .extend (
952
- [
953
- f"{ source_url } " ,
954
- f"{ source_url } .asc" ,
955
- f"{ source_url } .crt" ,
956
- f"{ source_url } .sig" ,
957
- f"{ source_url } .sigstore" ,
958
- f"{ source_url } .spdx.json" ,
959
- ]
945
+
946
+ # Recursively discover artifacts to purge.
947
+ ftp_download_pages = [f"https://www.python.org/ftp/python/{ normalized_release } /" ]
948
+ while ftp_download_pages :
949
+ ftp_download_page = ftp_download_pages .pop (0 )
950
+ req = urllib .request .Request (
951
+ method = "GET" , url = ftp_download_page , headers = headers
960
952
)
953
+ resp = urllib .request .urlopen (req )
954
+ if resp .code != 200 :
955
+ raise RuntimeError ("Failed to purge the python.org/downloads CDN" )
956
+ for link in re .findall (r"<a href=\"([^\"]+)\">" , resp .read ().decode ()):
957
+ if link in ("../" , "./" ): # Special value, ignore it.
958
+ continue
959
+
960
+ if link .endswith ("/" ): # Directory, recurse into it.
961
+ ftp_download_pages .append (f"{ ftp_download_page } { link } " )
962
+
963
+ # We want to purge both directories and files.
964
+ urls .append (f"{ ftp_download_page } { link } " )
961
965
962
966
for url in urls :
963
967
req = urllib .request .Request (url = url , headers = headers , method = "PURGE" )
0 commit comments