mirror of
				https://github.com/explosion/spaCy.git
				synced 2025-11-04 01:48:04 +03:00 
			
		
		
		
	test versions of required libs across different places
This commit is contained in:
		
							parent
							
								
									2079948711
								
							
						
					
					
						commit
						34986c7bfd
					
				
							
								
								
									
										61
									
								
								spacy/tests/test_requirements.py
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										61
									
								
								spacy/tests/test_requirements.py
									
									
									
									
									
										Normal file
									
								
							| 
						 | 
				
			
			@ -0,0 +1,61 @@
 | 
			
		|||
import re
 | 
			
		||||
from pathlib import Path
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
def test_build_dependencies(en_vocab):
 | 
			
		||||
    libs_ignore_requirements = ["pytest", "pytest-timeout", "mock", "flake8", "jsonschema"]
 | 
			
		||||
    libs_ignore_setup = ["fugashi", "natto-py", "pythainlp"]
 | 
			
		||||
 | 
			
		||||
    # check requirements.txt
 | 
			
		||||
    root_dir = Path(__file__).parent.parent.parent
 | 
			
		||||
    req_file = root_dir / "requirements.txt"
 | 
			
		||||
    req_dict = {}
 | 
			
		||||
    with req_file.open() as f:
 | 
			
		||||
        lines = f.readlines()
 | 
			
		||||
    for line in lines:
 | 
			
		||||
        line = line.strip()
 | 
			
		||||
        if not line.startswith("#"):
 | 
			
		||||
            lib, v = _parse_req(line)
 | 
			
		||||
            if lib and lib not in libs_ignore_requirements:
 | 
			
		||||
                req_dict[lib] = v
 | 
			
		||||
 | 
			
		||||
    # check setup.cfg and compare to requirements.txt
 | 
			
		||||
    # also fails when there are missing or additional libs
 | 
			
		||||
    setup_file = root_dir / "setup.cfg"
 | 
			
		||||
    with setup_file.open() as f:
 | 
			
		||||
        lines = f.readlines()
 | 
			
		||||
    setup_keys = set()
 | 
			
		||||
    for line in lines:
 | 
			
		||||
        line = line.strip()
 | 
			
		||||
        if not line.startswith("#"):
 | 
			
		||||
            lib, v = _parse_req(line)
 | 
			
		||||
            if lib and not lib.startswith("cupy") and lib not in libs_ignore_setup:
 | 
			
		||||
                req_v = req_dict.get(lib, None)
 | 
			
		||||
                assert req_v is not None    # if fail: setup.cfg contains a lib not in requirements.txt
 | 
			
		||||
                assert (lib+v) == (lib+req_v)    # if fail: setup.cfg & requirements.txt have conflicting versions
 | 
			
		||||
                setup_keys.add(lib)
 | 
			
		||||
    assert sorted(setup_keys) == sorted(req_dict.keys()) # if fail: requirements.txt contains a lib not in setup.cfg
 | 
			
		||||
 | 
			
		||||
    # check pyproject.toml and compare the versions of the libs to requirements.txt
 | 
			
		||||
    # does not fail when there are missing or additional libs
 | 
			
		||||
    toml_file = root_dir / "pyproject.toml"
 | 
			
		||||
    with toml_file.open() as f:
 | 
			
		||||
        lines = f.readlines()
 | 
			
		||||
    toml_keys = set()
 | 
			
		||||
    for line in lines:
 | 
			
		||||
        line = line.strip()
 | 
			
		||||
        line = line.strip(",")
 | 
			
		||||
        line = line.strip("\"")
 | 
			
		||||
        if not line.startswith("#"):
 | 
			
		||||
            lib, v = _parse_req(line)
 | 
			
		||||
            if lib:
 | 
			
		||||
                req_v = req_dict.get(lib, None)
 | 
			
		||||
                assert (lib+v) == (lib+req_v)   # if fail: pyproject.toml & requirements.txt have conflicting versions
 | 
			
		||||
                toml_keys.add(lib)
 | 
			
		||||
 | 
			
		||||
def _parse_req(line):
 | 
			
		||||
    lib = re.match(r"^[a-z0-9\-]*", line).group(0)
 | 
			
		||||
    v = line.replace(lib, "").strip()
 | 
			
		||||
    if not re.match(r"^[<>=][<>=].*", v):
 | 
			
		||||
        return None, None
 | 
			
		||||
    return lib, v
 | 
			
		||||
		Loading…
	
		Reference in New Issue
	
	Block a user