glenn-jocher pre-commit-ci[bot] commited on
Commit
f3fecf9
·
unverified ·
1 Parent(s): 4870064

Pin downloads to release version (#7790)

Browse files

* Pin downloads to release version

Fixes a release version to avoid forward-compatibility issues in future releases.

* [pre-commit.ci] auto fixes from pre-commit.com hooks

for more information, see https://pre-commit.ci

Co-authored-by: pre-commit-ci[bot] <66853113+pre-commit-ci[bot]@users.noreply.github.com>

Files changed (1) hide show
  1. utils/downloads.py +29 -14
utils/downloads.py CHANGED
@@ -16,6 +16,15 @@ import requests
16
  import torch
17
 
18
 
 
 
 
 
 
 
 
 
 
19
  def gsutil_getsize(url=''):
20
  # gs://bucket/file size https://cloud.google.com/storage/docs/gsutil/commands/du
21
  s = subprocess.check_output(f'gsutil du {url}', shell=True).decode('utf-8')
@@ -43,10 +52,17 @@ def safe_download(file, url, url2=None, min_bytes=1E0, error_msg=''):
43
  LOGGER.info('')
44
 
45
 
46
- def attempt_download(file, repo='ultralytics/yolov5', release='latest'):
47
- # Attempt file download from GitHub release assets if not found locally
48
  from utils.general import LOGGER
49
 
 
 
 
 
 
 
 
50
  file = Path(str(file).strip().replace("'", ''))
51
  if not file.exists():
52
  # URL specified
@@ -61,22 +77,21 @@ def attempt_download(file, repo='ultralytics/yolov5', release='latest'):
61
  return file
62
 
63
  # GitHub assets
64
- file.parent.mkdir(parents=True, exist_ok=True) # make parent dir (if required)
65
- if release != 'latest' and not release.startswith('tags/'):
66
- release = f'tags/{release}' # prepend i.e. tags/v6.1
67
  try:
68
- response = requests.get(f'https://api.github.com/repos/{repo}/releases/{release}').json() # github api
69
- assets = [x['name'] for x in response['assets']] # release assets, i.e. ['yolov5s.pt', 'yolov5m.pt', ...]
70
- tag = response['tag_name'] # i.e. 'v1.0'
71
- except Exception: # fallback plan
72
- assets = [
73
- 'yolov5n.pt', 'yolov5s.pt', 'yolov5m.pt', 'yolov5l.pt', 'yolov5x.pt', 'yolov5n6.pt', 'yolov5s6.pt',
74
- 'yolov5m6.pt', 'yolov5l6.pt', 'yolov5x6.pt']
75
  try:
76
- tag = subprocess.check_output('git tag', shell=True, stderr=subprocess.STDOUT).decode().split()[-1]
77
  except Exception:
78
- tag = 'v6.1' # current release
 
 
 
79
 
 
80
  if name in assets:
81
  url3 = 'https://drive.google.com/drive/folders/1EFQTEUeXWSFww0luse2jB9M1QNZQGwNl' # backup gdrive mirror
82
  safe_download(
 
16
  import torch
17
 
18
 
19
+ def is_url(url):
20
+ # Check if online file exists
21
+ try:
22
+ r = urllib.request.urlopen(url) # response
23
+ return r.getcode() == 200
24
+ except urllib.request.HTTPError:
25
+ return False
26
+
27
+
28
  def gsutil_getsize(url=''):
29
  # gs://bucket/file size https://cloud.google.com/storage/docs/gsutil/commands/du
30
  s = subprocess.check_output(f'gsutil du {url}', shell=True).decode('utf-8')
 
52
  LOGGER.info('')
53
 
54
 
55
+ def attempt_download(file, repo='ultralytics/yolov5', release='v6.1'):
56
+ # Attempt file download from GitHub release assets if not found locally. release = 'latest', 'v6.1', etc.
57
  from utils.general import LOGGER
58
 
59
+ def github_assets(repository, version='latest'):
60
+ # Return GitHub repo tag (i.e. 'v6.1') and assets (i.e. ['yolov5s.pt', 'yolov5m.pt', ...])
61
+ if version != 'latest':
62
+ version = f'tags/{version}' # i.e. tags/v6.1
63
+ response = requests.get(f'https://api.github.com/repos/{repository}/releases/{version}').json() # github api
64
+ return response['tag_name'], [x['name'] for x in response['assets']] # tag, assets
65
+
66
  file = Path(str(file).strip().replace("'", ''))
67
  if not file.exists():
68
  # URL specified
 
77
  return file
78
 
79
  # GitHub assets
80
+ assets = [
81
+ 'yolov5n.pt', 'yolov5s.pt', 'yolov5m.pt', 'yolov5l.pt', 'yolov5x.pt', 'yolov5n6.pt', 'yolov5s6.pt',
82
+ 'yolov5m6.pt', 'yolov5l6.pt', 'yolov5x6.pt']
83
  try:
84
+ tag, assets = github_assets(repo, release)
85
+ except Exception:
 
 
 
 
 
86
  try:
87
+ tag, assets = github_assets(repo) # latest release
88
  except Exception:
89
+ try:
90
+ tag = subprocess.check_output('git tag', shell=True, stderr=subprocess.STDOUT).decode().split()[-1]
91
+ except Exception:
92
+ tag = release
93
 
94
+ file.parent.mkdir(parents=True, exist_ok=True) # make parent dir (if required)
95
  if name in assets:
96
  url3 = 'https://drive.google.com/drive/folders/1EFQTEUeXWSFww0luse2jB9M1QNZQGwNl' # backup gdrive mirror
97
  safe_download(