mirror of
				https://github.com/explosion/spaCy.git
				synced 2025-11-04 09:57:26 +03:00 
			
		
		
		
	* Add cli for finding locations of registered func * fixes: naming and typing * isort * update naming * remove to find-function * remove file:// bit * use registry name if given and exit gracefully if a registry was not found * clean up failure msg * specify registry_name options * mypy fixes * return location for internal usage * add documentation * more mypy fixes * clean up example * add section to menu * add tests --------- Co-authored-by: svlandeg <svlandeg@github.com>
		
			
				
	
	
		
			70 lines
		
	
	
		
			2.1 KiB
		
	
	
	
		
			Python
		
	
	
	
	
	
			
		
		
	
	
			70 lines
		
	
	
		
			2.1 KiB
		
	
	
	
		
			Python
		
	
	
	
	
	
from typing import Optional, Tuple
 | 
						|
 | 
						|
from catalogue import RegistryError
 | 
						|
from wasabi import msg
 | 
						|
 | 
						|
from ..util import registry
 | 
						|
from ._util import Arg, Opt, app
 | 
						|
 | 
						|
 | 
						|
@app.command("find-function")
 | 
						|
def find_function_cli(
 | 
						|
    # fmt: off
 | 
						|
    func_name: str = Arg(..., help="Name of the registered function."),
 | 
						|
    registry_name: Optional[str] = Opt(None, "--registry", "-r", help="Name of the catalogue registry."),
 | 
						|
    # fmt: on
 | 
						|
):
 | 
						|
    """
 | 
						|
    Find the module, path and line number to the file the registered
 | 
						|
    function is defined in, if available.
 | 
						|
 | 
						|
    func_name (str): Name of the registered function.
 | 
						|
    registry_name (Optional[str]): Name of the catalogue registry.
 | 
						|
 | 
						|
    DOCS: https://spacy.io/api/cli#find-function
 | 
						|
    """
 | 
						|
    if not registry_name:
 | 
						|
        registry_names = registry.get_registry_names()
 | 
						|
        for name in registry_names:
 | 
						|
            if registry.has(name, func_name):
 | 
						|
                registry_name = name
 | 
						|
                break
 | 
						|
 | 
						|
    if not registry_name:
 | 
						|
        msg.fail(
 | 
						|
            f"Couldn't find registered function: '{func_name}'",
 | 
						|
            exits=1,
 | 
						|
        )
 | 
						|
 | 
						|
    assert registry_name is not None
 | 
						|
    find_function(func_name, registry_name)
 | 
						|
 | 
						|
 | 
						|
def find_function(func_name: str, registry_name: str) -> Tuple[str, int]:
 | 
						|
    registry_desc = None
 | 
						|
    try:
 | 
						|
        registry_desc = registry.find(registry_name, func_name)
 | 
						|
    except RegistryError as e:
 | 
						|
        msg.fail(
 | 
						|
            f"Couldn't find registered function: '{func_name}' in registry '{registry_name}'",
 | 
						|
        )
 | 
						|
        msg.fail(f"{e}", exits=1)
 | 
						|
    assert registry_desc is not None
 | 
						|
 | 
						|
    registry_path = None
 | 
						|
    line_no = None
 | 
						|
    if registry_desc["file"]:
 | 
						|
        registry_path = registry_desc["file"]
 | 
						|
        line_no = registry_desc["line_no"]
 | 
						|
 | 
						|
    if not registry_path or not line_no:
 | 
						|
        msg.fail(
 | 
						|
            f"Couldn't find path to registered function: '{func_name}' in registry '{registry_name}'",
 | 
						|
            exits=1,
 | 
						|
        )
 | 
						|
    assert registry_path is not None
 | 
						|
    assert line_no is not None
 | 
						|
 | 
						|
    msg.good(f"Found registered function '{func_name}' at {registry_path}:{line_no}")
 | 
						|
    return str(registry_path), int(line_no)
 |