22
22
23
23
Georg Brandl, March 2014.
24
24
"""
25
- from __future__ import print_function
26
25
27
26
import hashlib
28
27
import json
29
28
import os
30
- from os import path
31
29
import re
32
- import sys
33
- import time
34
30
import subprocess
31
+ import sys
32
+ from os import path
35
33
36
34
import requests
37
35
36
+
38
37
# Copied from release.py
39
38
def error (* msgs ):
40
39
print ('**ERROR**' , file = sys .stderr )
@@ -138,7 +137,7 @@ def slug_for(release):
138
137
('-' + release [len (base_version (release )):] if release [len (base_version (release )):] else '' )
139
138
140
139
def sigfile_for (release , rfile ):
141
- return download_root + '%s/%s .asc' % ( release , rfile )
140
+ return download_root + f' { release } / { rfile } .asc'
142
141
143
142
def md5sum_for (release , rfile ):
144
143
return hashlib .md5 (open (ftp_root + base_version (release ) + '/' + rfile , 'rb' ).read ()).hexdigest ()
@@ -164,33 +163,33 @@ def minor_version_tuple(release):
164
163
def build_file_dict (release , rfile , rel_pk , file_desc , os_pk ,
165
164
add_download , add_desc ):
166
165
"""Return a dictionary with all needed fields for a ReleaseFile object."""
167
- d = dict (
168
- name = file_desc ,
169
- slug = slug_for (release ) + '-' + make_slug (file_desc )[:40 ],
170
- os = '/api/v1/downloads/os/%s/' % os_pk ,
171
- release = '/api/v1/downloads/release/%s/' % rel_pk ,
172
- description = add_desc ,
173
- is_source = os_pk == 3 ,
174
- url = download_root + '%s/%s' % ( base_version (release ), rfile ) ,
175
- md5_sum = md5sum_for (release , rfile ),
176
- filesize = filesize_for (release , rfile ),
177
- download_button = add_download ,
178
- )
166
+ d = {
167
+ ' name' : file_desc ,
168
+ ' slug' : slug_for (release ) + '-' + make_slug (file_desc )[:40 ],
169
+ 'os' : '/api/v1/downloads/os/%s/' % os_pk ,
170
+ ' release' : '/api/v1/downloads/release/%s/' % rel_pk ,
171
+ ' description' : add_desc ,
172
+ ' is_source' : os_pk == 3 ,
173
+ ' url' : download_root + f' { base_version (release )} / { rfile } ' ,
174
+ ' md5_sum' : md5sum_for (release , rfile ),
175
+ ' filesize' : filesize_for (release , rfile ),
176
+ ' download_button' : add_download ,
177
+ }
179
178
# Upload GPG signature
180
- if os .path .exists (ftp_root + "%s/%s.asc" % ( base_version (release ), rfile ) ):
179
+ if os .path .exists (ftp_root + f" { base_version (release )} / { rfile } .asc" ):
181
180
d ["gpg_signature_file" ] = sigfile_for (base_version (release ), rfile )
182
181
# Upload Sigstore signature
183
- if os .path .exists (ftp_root + "%s/%s.sig" % ( base_version (release ), rfile ) ):
184
- d ["sigstore_signature_file" ] = download_root + '%s/%s.sig' % ( base_version (release ), rfile )
182
+ if os .path .exists (ftp_root + f" { base_version (release )} / { rfile } .sig" ):
183
+ d ["sigstore_signature_file" ] = download_root + f' { base_version (release )} / { rfile } .sig'
185
184
# Upload Sigstore certificate
186
- if os .path .exists (ftp_root + "%s/%s.crt" % ( base_version (release ), rfile ) ):
187
- d ["sigstore_cert_file" ] = download_root + '%s/%s.crt' % ( base_version (release ), rfile )
185
+ if os .path .exists (ftp_root + f" { base_version (release )} / { rfile } .crt" ):
186
+ d ["sigstore_cert_file" ] = download_root + f' { base_version (release )} / { rfile } .crt'
188
187
# Upload Sigstore bundle
189
- if os .path .exists (ftp_root + "%s/%s.sigstore" % ( base_version (release ), rfile ) ):
190
- d ["sigstore_bundle_file" ] = download_root + '%s/%s.sigstore' % ( base_version (release ), rfile )
188
+ if os .path .exists (ftp_root + f" { base_version (release )} / { rfile } .sigstore" ):
189
+ d ["sigstore_bundle_file" ] = download_root + f' { base_version (release )} / { rfile } .sigstore'
191
190
# Upload SPDX SBOM file
192
- if os .path .exists (ftp_root + "%s/%s .spdx.json" % ( base_version ( release ), rfile ) ):
193
- d ["sbom_spdx2_file" ] = download_root + '%s/%s .spdx.json' % ( base_version ( release ), rfile )
191
+ if os .path .exists (ftp_root + f" { base_version ( release ) } / { rfile } .spdx.json" ):
192
+ d ["sbom_spdx2_file" ] = download_root + f' { base_version ( release ) } / { rfile } .spdx.json'
194
193
195
194
return d
196
195
@@ -206,36 +205,36 @@ def list_files(release):
206
205
if rfile .startswith (prefix ):
207
206
break
208
207
else :
209
- print (' File %s/%s has wrong prefix' % ( reldir , rfile ) )
208
+ print (f ' File { reldir } / { rfile } has wrong prefix' )
210
209
continue
211
210
if rfile .endswith ('.chm' ):
212
211
if rfile [:- 4 ] != 'python' + release .replace ('.' , '' ):
213
- print (' File %s/%s has a different version' % ( reldir , rfile ) )
212
+ print (f ' File { reldir } / { rfile } has a different version' )
214
213
continue
215
214
else :
216
215
try :
217
216
prefix , rest = rfile .split ('-' , 1 )
218
- except :
217
+ except : # noqa: E722
219
218
prefix , rest = rfile , ''
220
219
if not rest .startswith ((release + '-' , release + '.' )):
221
- print (' File %s/%s has a different version' % ( reldir , rfile ) )
220
+ print (f ' File { reldir } / { rfile } has a different version' )
222
221
continue
223
222
for rx , info in get_file_descriptions (release ):
224
223
if rx .search (rfile ):
225
224
file_desc , os_pk , add_download , add_desc = info
226
225
yield rfile , file_desc , os_pk , add_download , add_desc
227
226
break
228
227
else :
229
- print (' File %s/%s not recognized' % ( reldir , rfile ) )
228
+ print (f ' File { reldir } / { rfile } not recognized' )
230
229
continue
231
230
232
231
def query_object (objtype , ** params ):
233
232
"""Find an API object by query parameters."""
234
233
uri = base_url + 'downloads/%s/' % objtype
235
- uri += '?' + '&' .join ('%s=%s' % v for v in params .items ())
234
+ uri += '?' + '&' .join (f' { k } = { v } ' for k , v in params .items ())
236
235
resp = requests .get (uri , headers = headers )
237
236
if resp .status_code != 200 or not json .loads (resp .text )['objects' ]:
238
- raise RuntimeError ('no object for %s params=%r' % ( objtype , params ) )
237
+ raise RuntimeError (f 'no object for { objtype } params={ params !r } ' )
239
238
obj = json .loads (resp .text )['objects' ][0 ]
240
239
return int (obj ['resource_uri' ].strip ('/' ).split ('/' )[- 1 ])
241
240
@@ -248,17 +247,17 @@ def post_object(objtype, datadict):
248
247
info = json .loads (resp .text )
249
248
print (info .get ('error_message' , 'No error message.' ))
250
249
print (info .get ('traceback' , '' ))
251
- except :
250
+ except : # noqa: E722
252
251
pass
253
- print ('Creating %s failed: %s' % ( objtype , resp .status_code ) )
252
+ print (f 'Creating { objtype } failed: { resp .status_code } ' )
254
253
return - 1
255
254
newloc = resp .headers ['Location' ]
256
255
pk = int (newloc .strip ('/' ).split ('/' )[- 1 ])
257
256
return pk
258
257
259
258
def sign_release_files_with_sigstore (release , release_files ):
260
259
filenames = [
261
- ftp_root + "%s/%s" % ( base_version (release ), rfile )
260
+ ftp_root + f" { base_version (release )} / { rfile } "
262
261
for rfile , file_desc , os_pk , add_download , add_desc in release_files
263
262
]
264
263
0 commit comments