File size: 1,231 Bytes
583c1c7
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
"""The original Context Switch."""
from .constants import get_category, get_name
from .context_utils import is_context_empty
from .utils import ByPassTypeTuple, FlexibleOptionalInputType


class RgthreeDynamicContextSwitch:
  """The initial Context Switch node."""

  NAME = get_name("Dynamic Context Switch")
  CATEGORY = get_category()

  @classmethod
  def INPUT_TYPES(cls):  # pylint: disable = invalid-name, missing-function-docstring
    return {
      "required": {},
      "optional": FlexibleOptionalInputType("RGTHREE_DYNAMIC_CONTEXT"),
    }

  RETURN_TYPES = ByPassTypeTuple(("RGTHREE_DYNAMIC_CONTEXT",))
  RETURN_NAMES = ByPassTypeTuple(("CONTEXT",))
  FUNCTION = "switch"

  def switch(self, **kwargs):
    """Chooses the first non-empty Context to output."""

    output_keys = kwargs.get('output_keys', None)

    ctx = None
    for key, value in kwargs.items():
      if key.startswith('ctx_') and not is_context_empty(value):
        ctx = value
        break

    res = [ctx]
    output_keys = output_keys.split(',') if output_keys is not None else []
    for key in output_keys:
      res.append(ctx[key] if ctx is not None and key in ctx else None)
    return tuple(res)