| | """The Dynamic Context node.""" |
| | from mimetypes import add_type |
| | from .constants import get_category, get_name |
| | from .utils import ByPassTypeTuple, FlexibleOptionalInputType |
| |
|
| |
|
| | class RgthreeDynamicContext: |
| | """The Dynamic Context node. |
| | |
| | Similar to the static Context and Context Big nodes, this allows users to add any number and |
| | variety of inputs to a Dynamic Context node, and return the outputs by key name. |
| | """ |
| |
|
| | NAME = get_name("Dynamic Context") |
| | CATEGORY = get_category() |
| |
|
| | @classmethod |
| | def INPUT_TYPES(cls): |
| | return { |
| | "required": {}, |
| | "optional": FlexibleOptionalInputType(add_type), |
| | "hidden": {}, |
| | } |
| |
|
| | RETURN_TYPES = ByPassTypeTuple(("RGTHREE_DYNAMIC_CONTEXT",)) |
| | RETURN_NAMES = ByPassTypeTuple(("CONTEXT",)) |
| | FUNCTION = "main" |
| |
|
| | def main(self, **kwargs): |
| | """Creates a new context from the provided data, with an optional base ctx to start. |
| | |
| | This node takes a list of named inputs that are the named keys (with an optional "+ " prefix) |
| | which are to be stored within the ctx dict as well as a list of keys contained in `output_keys` |
| | to determine the list of output data. |
| | """ |
| |
|
| | base_ctx = kwargs.get('base_ctx', None) |
| | output_keys = kwargs.get('output_keys', None) |
| |
|
| | new_ctx = base_ctx.copy() if base_ctx is not None else {} |
| |
|
| | for key_raw, value in kwargs.items(): |
| | if key_raw in ['base_ctx', 'output_keys']: |
| | continue |
| | key = key_raw.upper() |
| | if key.startswith('+ '): |
| | key = key[2:] |
| | new_ctx[key] = value |
| |
|
| | print(new_ctx) |
| |
|
| | res = [new_ctx] |
| | output_keys = output_keys.split(',') if output_keys is not None else [] |
| | for key in output_keys: |
| | res.append(new_ctx[key] if key in new_ctx else None) |
| | return tuple(res) |
| |
|