mmrazor/.dev_scripts/meta_files_test.py

59 lines
1.9 KiB
Python

# Copyright (c) OpenMMLab. All rights reserved.
import os
import unittest
from pathlib import Path
import requests
import yaml
MMRAZOR_ROOT = Path(__file__).absolute().parents[1]
class TestMetafiles(unittest.TestCase):
def get_metafiles(self, code_path):
"""
Function: get the metafile of all configs from model-index.yml
"""
metafile = os.path.join(code_path, 'model-index.yml')
with open(metafile, 'r') as f:
meta = yaml.safe_load(f)
return meta['Import']
def test_metafiles(self):
metafiles = self.get_metafiles(MMRAZOR_ROOT)
for mf in metafiles:
metafile = os.path.abspath(os.path.join(MMRAZOR_ROOT, mf))
with open(metafile, 'r') as f:
meta = yaml.safe_load(f)
for model in meta['Models']:
# 1. weights url check
r = requests.head(model['Weights'], timeout=4)
assert r.status_code != 404, \
f"can't connect url {model['Weights']} in " \
f'metafile {metafile}'
# 2. config check
dir_path = os.path.abspath(os.path.join(metafile, '../'))
# list all files which are in the same directory of
# current metafile
config_files = os.listdir(dir_path)
if isinstance(model['Config'], list):
# TODO: 3. log error
continue
assert (model['Config'].split('/')[-1] in config_files), \
f"config error in {metafile} model {model['Name']}"
# 4. name check
# erase '.py'
correct_name = model['Config'].split('/')[-1][:-3]
assert model['Name'] == correct_name, \
f'name error in {metafile}, correct name should ' \
f'be {correct_name}'
if __name__ == '__main__':
unittest.main()