93 lines
		
	
	
		
			2.1 KiB
		
	
	
	
		
			Python
		
	
	
	
	
	
			
		
		
	
	
			93 lines
		
	
	
		
			2.1 KiB
		
	
	
	
		
			Python
		
	
	
	
	
	
| import os
 | |
| import sys
 | |
| 
 | |
| from easyprocess import EasyProcess
 | |
| 
 | |
| from entrypoint2 import entrypoint
 | |
| 
 | |
| # https://mypy.readthedocs.io/en/stable/cheat_sheet_py3.html
 | |
| 
 | |
| python = sys.executable
 | |
| join = os.path.join
 | |
| d = os.path.dirname(__file__)
 | |
| 
 | |
| prog = """
 | |
| from entrypoint2 import entrypoint
 | |
| from typing import Optional,Any,List,Sequence,Iterable
 | |
| @entrypoint
 | |
| def flen(param: {typ}):
 | |
|     print(type(param).__name__, repr(param))
 | |
|     """
 | |
| 
 | |
| 
 | |
| def run(typ, params):
 | |
|     cmd = [python, "-c", prog.format(typ=typ), "--debug"] + list(params)
 | |
|     p = EasyProcess(cmd).call()
 | |
|     if p.return_code != 0 or p.stderr != "":
 | |
|         return p.stderr.splitlines()[-1]
 | |
|     return p.stdout
 | |
| 
 | |
| 
 | |
| @entrypoint
 | |
| def check_hints(*params):
 | |
|     # TODO: For collections, the type of the collection item is in brackets
 | |
|     # (Python 3.9+)
 | |
|     # x: list[int] = [1]
 | |
|     # x: set[int] = {6, 7}
 | |
| 
 | |
|     # For mappings, we need the types of both keys and values
 | |
|     # x: dict[str, float] = {'field': 2.0}  # Python 3.9+
 | |
|     # x: Dict[str, float] = {'field': 2.0}
 | |
| 
 | |
|     # not supported:
 | |
|     # "Set[str]",
 | |
|     # "Union[int, str]",
 | |
|     # "Union[int, float]",
 | |
|     # "Tuple[int, float, str]",
 | |
|     # "Tuple[int, ...]",
 | |
|     # "Callable",
 | |
|     # "Literal",
 | |
| 
 | |
|     s = ""
 | |
|     for x in [
 | |
|         "list[str]",
 | |
|         "list[bytes]",
 | |
|         "list[int]",
 | |
|         "list[float]",
 | |
|         "list[complex]",
 | |
|         "list[bool]",
 | |
|         "str",
 | |
|         "bytes",
 | |
|         "int",
 | |
|         "float",
 | |
|         "complex",
 | |
|         "bool",
 | |
|         "List[str]",
 | |
|         "List[bytes]",
 | |
|         "List[int]",
 | |
|         "List[float]",
 | |
|         "List[complex]",
 | |
|         "List[bool]",
 | |
|         "Sequence[str]",
 | |
|         "Sequence[bytes]",
 | |
|         "Sequence[int]",
 | |
|         "Sequence[float]",
 | |
|         "Sequence[complex]",
 | |
|         "Sequence[bool]",
 | |
|         "Iterable[str]",
 | |
|         "Iterable[bytes]",
 | |
|         "Iterable[int]",
 | |
|         "Iterable[float]",
 | |
|         "Iterable[complex]",
 | |
|         "Iterable[bool]",
 | |
|         "Optional[str]",
 | |
|         "Optional[bytes]",
 | |
|         "Optional[int]",
 | |
|         "Optional[float]",
 | |
|         "Optional[complex]",
 | |
|         "Optional[bool]",
 | |
|         "Any",
 | |
|     ]:
 | |
|         s = "{} -> {}".format(x, run(x, params))
 | |
|         print(s)
 |