in modules/SwissArmyTransformer/sat/resources/download.py [0:0]
def auto_create(name, *, path=None, url=None):
if path is None:
path = os.getenv('SAT_HOME', '~/.sat_models')
path = os.path.expanduser(path)
model_path = os.path.join(path, name)
if url == 'local':
return model_path
os.makedirs(os.path.dirname(model_path), exist_ok=True)
lock = FileLock(model_path + '.lock', mode=0o777)
with lock:
if url is None:
url = MODEL_URLS[name]
if os.path.isdir(model_path) and not url.startswith('r2://'):
pass
elif os.path.isdir(model_path) and url.startswith('r2://') and url.endswith('.zip'):
pass
else:
print(f'Downloading models {url} into {path} ...')
try:
if url.startswith('r2://'):
download_s3(path, url[5:])
else:
file_path = os.path.join(path, name + '.zip')
download_with_progress_bar(file_path, url)
except Exception as e:
print(f'Failed to download or check, if you already had the zip file, please unzip it manually as {model_path}!')
raise e
# unzip
if not os.path.isdir(model_path):
import zipfile
file_path = os.path.join(path, name + '.zip')
print(f'Unzipping {file_path}...')
f = zipfile.ZipFile(file_path, 'r')
f.extractall(path=path)
assert os.path.isdir(model_path), f'Unzip failed, or the first-level folder in zip is not {name}.'
return model_path # must return outside the `with lock` block