Make fetch-wheels PEP8 compliant

This is just a little cleanup.

Change-Id: I148369869e9aac1b3f4ba25d3780d6bca380d4c9
This commit is contained in:
Johannes Kulik 2023-11-29 16:17:08 +01:00
parent 6537fe480e
commit f4cc70548a
1 changed files with 20 additions and 16 deletions

View File

@ -1,5 +1,4 @@
#!/usr/bin/env python
import json
import os
import platform
@ -7,7 +6,7 @@ import re
import ssl
from urllib import request as urllib2
DOCKER_REGISTRY='registry.hub.docker.com'
DOCKER_REGISTRY = 'registry.hub.docker.com'
MANIFEST_V1 = 'application/vnd.oci.image.manifest.v1+json'
MANIFEST_V2 = 'application/vnd.docker.distribution.manifest.v2+json'
@ -18,10 +17,12 @@ ARCH_MAP = {
'aarch64': 'arm64',
}
# Clone from the now-deprecated distutils
def strtobool(v):
# Clone from the now-deprecated distutils
return str(v).lower() in ("yes", "true", "t", "1")
def registry_urlopen(r):
if strtobool(os.environ.get('REGISTRY_INSECURE', "False")):
resp = urllib2.urlopen(r, context=ssl._create_unverified_context())
@ -29,6 +30,7 @@ def registry_urlopen(r):
resp = urllib2.urlopen(r)
return resp
def registry_request(r, token=None):
try:
if token:
@ -54,6 +56,7 @@ def registry_request(r, token=None):
return registry_request(r, token)
raise
def get_sha(repo, tag, registry, protocol):
headers = {
'Accept': ', '.join([MANIFEST_V2_LIST, MANIFEST_V2, MANIFEST_V1])
@ -78,7 +81,7 @@ def get_sha(repo, tag, registry, protocol):
# manifest we want, we go back and run this code
# again but getting that arch-specific manifest.
if m['platform']['architecture'] == ARCH_MAP[arch]:
tag = m['digest']
tag = m['digest']
return get_sha(repo, tag, registry, protocol)
# NOTE(mnaser): If we're here, we've gone over all the manifests
@ -104,38 +107,39 @@ def get_blob(repo, tag, protocol, registry=DOCKER_REGISTRY):
resp = registry_request(r)
return resp.read()
def protocol_detection(registry, protocol='http'):
PROTOCOLS = ('http','https')
PROTOCOLS = ('http', 'https')
index = PROTOCOLS.index(protocol)
try:
url = "{}://{}".format(protocol, registry)
r = urllib2.Request(url)
resp = urllib2.urlopen(r)
except (urllib2.URLError,urllib2.HTTPError) as err:
urllib2.urlopen(r)
except (urllib2.URLError, urllib2.HTTPError) as err:
if err.reason == 'Forbidden':
return protocol
elif index < len(PROTOCOLS) - 1:
return protocol_detection(registry, PROTOCOLS[index + 1])
else:
raise Exception("Cannot detect protocol for registry: {} due to error: {}".format(registry,err))
except:
raise
raise Exception("Cannot detect protocol for registry: {} due to error: {}".format(registry, err))
else:
return protocol
def get_wheels(url):
r = urllib2.Request(url=url)
resp = registry_request(r)
#Using urllib2.request.urlopen() from python3 will face the IncompleteRead and then system report connect refused.
#To avoid this problem, add an exception to ensure that all packages will be transmitted. before link down.
# Using urllib2.request.urlopen() from python3 will face the IncompleteRead and then system report connect refused.
# To avoid this problem, add an exception to ensure that all packages will be transmitted. before link down.
try:
buf = resp.read()
except Exception as e:
buf = e.partial
return buf
def parse_image(full_image):
slash_occurrences = len(re.findall('/',full_image))
slash_occurrences = len(re.findall('/', full_image))
repo = None
registry = DOCKER_REGISTRY
if slash_occurrences > 1:
@ -151,7 +155,8 @@ def parse_image(full_image):
image, tag = image.split(':')
else:
tag = 'latest'
return registry, repo+'/'+image if repo else image, tag
return registry, repo + '/' + image if repo else image, tag
def main():
if 'WHEELS' in os.environ:
@ -167,7 +172,7 @@ def main():
data = get_wheels(wheels)
else:
registry, image, tag = parse_image(wheels)
if os.environ.get('REGISTRY_PROTOCOL') in ['http','https']:
if os.environ.get('REGISTRY_PROTOCOL') in ['http', 'https']:
protocol = os.environ.get('REGISTRY_PROTOCOL')
elif os.environ.get('REGISTRY_PROTOCOL') == 'detect':
protocol = protocol_detection(registry)
@ -190,4 +195,3 @@ def main():
if __name__ == '__main__':
main()