|
from __future__ import annotations |
|
|
|
|
|
def validate_node_input( |
|
received_type: str, input_type: str, strict: bool = False |
|
) -> bool: |
|
""" |
|
received_type and input_type are both strings of the form "T1,T2,...". |
|
|
|
If strict is True, the input_type must contain the received_type. |
|
For example, if received_type is "STRING" and input_type is "STRING,INT", |
|
this will return True. But if received_type is "STRING,INT" and input_type is |
|
"INT", this will return False. |
|
|
|
If strict is False, the input_type must have overlap with the received_type. |
|
For example, if received_type is "STRING,BOOLEAN" and input_type is "STRING,INT", |
|
this will return True. |
|
|
|
Supports pre-union type extension behaviour of ``__ne__`` overrides. |
|
""" |
|
|
|
|
|
if not received_type != input_type: |
|
return True |
|
|
|
|
|
if not isinstance(received_type, str) or not isinstance(input_type, str): |
|
return False |
|
|
|
|
|
received_types = set(t.strip() for t in received_type.split(",")) |
|
input_types = set(t.strip() for t in input_type.split(",")) |
|
|
|
if strict: |
|
|
|
return received_types.issubset(input_types) |
|
else: |
|
|
|
return len(received_types.intersection(input_types)) > 0 |
|
|