Version 0.3.5

Try to make it work as intended
This commit is contained in:
StableLlama
2025-06-03 00:25:03 +02:00
parent 90684e9e57
commit 43b8665a36
6 changed files with 578 additions and 522 deletions
+1 -1
View File
@@ -4,7 +4,7 @@ build-backend = "setuptools.build_meta"
[project]
name = "basic_data_handling"
version = "0.3.4"
version = "0.3.5"
description = """NOTE: Still in development! Expect breaking changes!
Basic Python functions for manipulating data that every programmer is used to.
Currently supported ComfyUI data types: BOOLEAN, FLOAT, INT, STRING and data lists.
+15 -10
View File
@@ -29,7 +29,7 @@ class DataListCreate(ComfyNodeABC):
def INPUT_TYPES(cls):
return {
"optional": ContainsDynamicDict({
"item_0": (IO.ANY, {"_dynamic": "number"}),
"item_0": (IO.ANY, {"_dynamic": "number", "widgetType": "STRING"}),
})
}
@@ -41,7 +41,8 @@ class DataListCreate(ComfyNodeABC):
OUTPUT_IS_LIST = (True,)
def create_list(self, **kwargs: list[Any]) -> tuple[list]:
return (list(kwargs.values()),)
values = list(kwargs.values())
return (values[:-1],)
class DataListCreateFromBoolean(ComfyNodeABC):
@@ -56,7 +57,7 @@ class DataListCreateFromBoolean(ComfyNodeABC):
def INPUT_TYPES(cls):
return {
"optional": ContainsDynamicDict({
"item_0": (IO.BOOLEAN, {"_dynamic": "number"}),
"item_0": (IO.BOOLEAN, {"_dynamic": "number", "widgetType": "STRING"}),
})
}
@@ -68,7 +69,8 @@ class DataListCreateFromBoolean(ComfyNodeABC):
OUTPUT_IS_LIST = (True,)
def create_list(self, **kwargs: list[Any]) -> tuple[list]:
return ([bool(value) for value in kwargs.values()],)
values = [bool(value) for value in kwargs.values()]
return (values[:-1],)
class DataListCreateFromFloat(ComfyNodeABC):
@@ -83,7 +85,7 @@ class DataListCreateFromFloat(ComfyNodeABC):
def INPUT_TYPES(cls):
return {
"optional": ContainsDynamicDict({
"item_0": (IO.FLOAT, {"_dynamic": "number"}),
"item_0": (IO.FLOAT, {"_dynamic": "number", "widgetType": "STRING"}),
})
}
@@ -95,7 +97,8 @@ class DataListCreateFromFloat(ComfyNodeABC):
OUTPUT_IS_LIST = (True,)
def create_list(self, **kwargs: list[Any]) -> tuple[list]:
return ([float(value) for value in kwargs.values()],)
values = [float(value) for value in kwargs.values()]
return (values[:-1],)
class DataListCreateFromInt(ComfyNodeABC):
@@ -110,7 +113,7 @@ class DataListCreateFromInt(ComfyNodeABC):
def INPUT_TYPES(cls):
return {
"optional": ContainsDynamicDict({
"item_0": (IO.INT, {"_dynamic": "number"}),
"item_0": (IO.INT, {"_dynamic": "number", "widgetType": "STRING"}),
})
}
@@ -122,7 +125,8 @@ class DataListCreateFromInt(ComfyNodeABC):
OUTPUT_IS_LIST = (True,)
def create_list(self, **kwargs: list[Any]) -> tuple[list]:
return ([int(value) for value in kwargs.values()],)
values = [int(value) for value in kwargs.values()]
return (values[:-1],)
class DataListCreateFromString(ComfyNodeABC):
@@ -137,7 +141,7 @@ class DataListCreateFromString(ComfyNodeABC):
def INPUT_TYPES(cls):
return {
"optional": ContainsDynamicDict({
"item_0": (IO.STRING, {"_dynamic": "number"}),
"item_0": (IO.STRING, {"_dynamic": "number", "widgetType": "STRING"}),
})
}
@@ -149,7 +153,8 @@ class DataListCreateFromString(ComfyNodeABC):
OUTPUT_IS_LIST = (True,)
def create_list(self, **kwargs: list[Any]) -> tuple[list[Any]]:
return ([str(value) for value in kwargs.values()],)
values = [str(value) for value in kwargs.values()]
return (values[:-1],)
class DataListAppend(ComfyNodeABC):
+15 -15
View File
@@ -27,8 +27,8 @@ class DictCreate(ComfyNodeABC):
def INPUT_TYPES(cls):
return {
"optional": ContainsDynamicDict({
"key_0": (IO.STRING, {"_dynamic": "number", "_dynamicGroup": 0}),
"value_0": (IO.ANY, {"_dynamic": "number", "_dynamicGroup": 0}),
"key_0": (IO.STRING, {"_dynamic": "number", "_dynamicGroup": 0, "widgetType": "STRING"}),
"value_0": (IO.ANY, {"_dynamic": "number", "_dynamicGroup": 0, "widgetType": "STRING"}),
})
}
@@ -40,7 +40,7 @@ class DictCreate(ComfyNodeABC):
def create(self, **kwargs: list[Any]) -> tuple[dict]:
result = {}
# Process all key_X/value_X pairs from dynamic inputs
for i in range(len(kwargs) // 2): # Divide by 2 since we have key/value pairs
for i in range(len(kwargs) // 2 - 1): # Divide by 2 since we have key/value pairs
key_name = f"key_{i}"
value_name = f"value_{i}"
if key_name in kwargs and value_name in kwargs:
@@ -59,8 +59,8 @@ class DictCreateFromBoolean(ComfyNodeABC):
def INPUT_TYPES(cls):
return {
"optional": ContainsDynamicDict({
"key_0": (IO.STRING, {"_dynamic": "number", "_dynamicGroup": 0}),
"value_0": (IO.BOOLEAN, {"_dynamic": "number", "_dynamicGroup": 0}),
"key_0": (IO.STRING, {"_dynamic": "number", "_dynamicGroup": 0, "widgetType": "STRING"}),
"value_0": (IO.BOOLEAN, {"_dynamic": "number", "_dynamicGroup": 0, "widgetType": "STRING"}),
})
}
@@ -72,7 +72,7 @@ class DictCreateFromBoolean(ComfyNodeABC):
def create(self, **kwargs: list[Any]) -> tuple[dict]:
result = {}
# Process all key_X/value_X pairs from dynamic inputs
for i in range(len(kwargs) // 2): # Divide by 2 since we have key/value pairs
for i in range(len(kwargs) // 2 - 1): # Divide by 2 since we have key/value pairs
key_name = f"key_{i}"
value_name = f"value_{i}"
if key_name in kwargs and value_name in kwargs:
@@ -91,8 +91,8 @@ class DictCreateFromFloat(ComfyNodeABC):
def INPUT_TYPES(cls):
return {
"optional": ContainsDynamicDict({
"key_0": (IO.STRING, {"_dynamic": "number", "_dynamicGroup": 0}),
"value_0": (IO.FLOAT, {"_dynamic": "number", "_dynamicGroup": 0}),
"key_0": (IO.STRING, {"_dynamic": "number", "_dynamicGroup": 0, "widgetType": "STRING"}),
"value_0": (IO.FLOAT, {"_dynamic": "number", "_dynamicGroup": 0, "widgetType": "STRING"}),
})
}
@@ -104,7 +104,7 @@ class DictCreateFromFloat(ComfyNodeABC):
def create(self, **kwargs: list[Any]) -> tuple[dict]:
result = {}
# Process all key_X/value_X pairs from dynamic inputs
for i in range(len(kwargs) // 2): # Divide by 2 since we have key/value pairs
for i in range(len(kwargs) // 2 - 1): # Divide by 2 since we have key/value pairs
key_name = f"key_{i}"
value_name = f"value_{i}"
if key_name in kwargs and value_name in kwargs:
@@ -123,8 +123,8 @@ class DictCreateFromInt(ComfyNodeABC):
def INPUT_TYPES(cls):
return {
"optional": ContainsDynamicDict({
"key_0": (IO.STRING, {"_dynamic": "number", "_dynamicGroup": 0}),
"value_0": (IO.INT, {"_dynamic": "number", "_dynamicGroup": 0}),
"key_0": (IO.STRING, {"_dynamic": "number", "_dynamicGroup": 0, "widgetType": "STRING"}),
"value_0": (IO.INT, {"_dynamic": "number", "_dynamicGroup": 0, "widgetType": "STRING"}),
})
}
@@ -136,7 +136,7 @@ class DictCreateFromInt(ComfyNodeABC):
def create(self, **kwargs: list[Any]) -> tuple[dict]:
result = {}
# Process all key_X/value_X pairs from dynamic inputs
for i in range(len(kwargs) // 2): # Divide by 2 since we have key/value pairs
for i in range(len(kwargs) // 2 - 1): # Divide by 2 since we have key/value pairs
key_name = f"key_{i}"
value_name = f"value_{i}"
if key_name in kwargs and value_name in kwargs:
@@ -155,8 +155,8 @@ class DictCreateFromString(ComfyNodeABC):
def INPUT_TYPES(cls):
return {
"optional": ContainsDynamicDict({
"key_0": (IO.STRING, {"_dynamic": "number", "_dynamicGroup": 0}),
"value_0": (IO.STRING, {"_dynamic": "number", "_dynamicGroup": 0}),
"key_0": (IO.STRING, {"_dynamic": "number", "_dynamicGroup": 0, "widgetType": "STRING"}),
"value_0": (IO.STRING, {"_dynamic": "number", "_dynamicGroup": 0, "widgetType": "STRING"}),
})
}
@@ -168,7 +168,7 @@ class DictCreateFromString(ComfyNodeABC):
def create(self, **kwargs: list[Any]) -> tuple[dict]:
result = {}
# Process all key_X/value_X pairs from dynamic inputs
for i in range(len(kwargs) // 2): # Divide by 2 since we have key/value pairs
for i in range(len(kwargs) // 2 - 1): # Divide by 2 since we have key/value pairs
key_name = f"key_{i}"
value_name = f"value_{i}"
if key_name in kwargs and value_name in kwargs:
+14 -9
View File
@@ -29,7 +29,7 @@ class ListCreate(ComfyNodeABC):
def INPUT_TYPES(cls):
return {
"optional": ContainsDynamicDict({
"item_0": (IO.ANY, {"_dynamic": "number"}),
"item_0": (IO.ANY, {"_dynamic": "number", "widgetType": "STRING"}),
})
}
@@ -39,7 +39,8 @@ class ListCreate(ComfyNodeABC):
FUNCTION = "create_list"
def create_list(self, **kwargs: list[Any]) -> tuple[list[Any]]:
return (list(kwargs.values()),)
values = list(kwargs.values())
return (values[:-1],)
class ListCreateFromBoolean(ComfyNodeABC):
@@ -54,7 +55,7 @@ class ListCreateFromBoolean(ComfyNodeABC):
def INPUT_TYPES(cls):
return {
"optional": ContainsDynamicDict({
"item_0": (IO.BOOLEAN, {"_dynamic": "number"}),
"item_0": (IO.BOOLEAN, {"_dynamic": "number", "widgetType": "STRING"}),
})
}
@@ -64,7 +65,8 @@ class ListCreateFromBoolean(ComfyNodeABC):
FUNCTION = "create_list"
def create_list(self, **kwargs: list[Any]) -> tuple[list[Any]]:
return ([bool(value) for value in kwargs.values()],)
values = [bool(value) for value in kwargs.values()]
return (values[:-1],)
class ListCreateFromFloat(ComfyNodeABC):
@@ -79,7 +81,7 @@ class ListCreateFromFloat(ComfyNodeABC):
def INPUT_TYPES(cls):
return {
"optional": ContainsDynamicDict({
"item_0": (IO.FLOAT, {"_dynamic": "number"}),
"item_0": (IO.FLOAT, {"_dynamic": "number", "widgetType": "STRING"}),
})
}
@@ -89,7 +91,8 @@ class ListCreateFromFloat(ComfyNodeABC):
FUNCTION = "create_list"
def create_list(self, **kwargs: list[Any]) -> tuple[list[Any]]:
return ([float(value) for value in kwargs.values()],)
values = [float(value) for value in kwargs.values()]
return (values[:-1],)
class ListCreateFromInt(ComfyNodeABC):
@@ -104,7 +107,7 @@ class ListCreateFromInt(ComfyNodeABC):
def INPUT_TYPES(cls):
return {
"optional": ContainsDynamicDict({
"item_0": (IO.INT, {"_dynamic": "number"}),
"item_0": (IO.INT, {"_dynamic": "number", "widgetType": "STRING"}),
})
}
@@ -114,7 +117,8 @@ class ListCreateFromInt(ComfyNodeABC):
FUNCTION = "create_list"
def create_list(self, **kwargs: list[Any]) -> tuple[list[Any]]:
return ([int(value) for value in kwargs.values()],)
values = [int(value) for value in kwargs.values()]
return (values[:-1],)
class ListCreateFromString(ComfyNodeABC):
@@ -139,7 +143,8 @@ class ListCreateFromString(ComfyNodeABC):
FUNCTION = "create_list"
def create_list(self, **kwargs: list[Any]) -> tuple[list[Any]]:
return ([str(value) for value in kwargs.values()],)
values = [str(value) for value in kwargs.values()]
return (values[:-1],)
class ListAppend(ComfyNodeABC):
+15 -10
View File
@@ -27,7 +27,7 @@ class SetCreate(ComfyNodeABC):
def INPUT_TYPES(cls):
return {
"optional": ContainsDynamicDict({
"item_0": (IO.ANY, {"_dynamic": "number"}),
"item_0": (IO.ANY, {"_dynamic": "number", "widgetType": "STRING"}),
})
}
@@ -37,7 +37,8 @@ class SetCreate(ComfyNodeABC):
FUNCTION = "create_set"
def create_set(self, **kwargs: list[Any]) -> tuple[set[Any]]:
return (set(kwargs.values()),)
values = kwargs.values()
return (set(values[:-1]),)
class SetCreateFromBoolean(ComfyNodeABC):
@@ -52,7 +53,7 @@ class SetCreateFromBoolean(ComfyNodeABC):
def INPUT_TYPES(cls):
return {
"optional": ContainsDynamicDict({
"item_0": (IO.BOOLEAN, {"_dynamic": "number"}),
"item_0": (IO.BOOLEAN, {"_dynamic": "number", "widgetType": "STRING"}),
})
}
@@ -62,7 +63,8 @@ class SetCreateFromBoolean(ComfyNodeABC):
FUNCTION = "create_set"
def create_set(self, **kwargs: list[Any]) -> tuple[set[Any]]:
return (set([bool(value) for value in kwargs.values()]),)
values = [bool(value) for value in kwargs.values()]
return (set(values[:-1]),)
class SetCreateFromFloat(ComfyNodeABC):
@@ -77,7 +79,7 @@ class SetCreateFromFloat(ComfyNodeABC):
def INPUT_TYPES(cls):
return {
"optional": ContainsDynamicDict({
"item_0": (IO.FLOAT, {"_dynamic": "number"}),
"item_0": (IO.FLOAT, {"_dynamic": "number", "widgetType": "STRING"}),
})
}
@@ -87,7 +89,8 @@ class SetCreateFromFloat(ComfyNodeABC):
FUNCTION = "create_set"
def create_set(self, **kwargs: list[Any]) -> tuple[set[Any]]:
return (set([float(value) for value in kwargs.values()]),)
values = [float(value) for value in kwargs.values()]
return (set(values[:-1]),)
class SetCreateFromInt(ComfyNodeABC):
@@ -102,7 +105,7 @@ class SetCreateFromInt(ComfyNodeABC):
def INPUT_TYPES(cls):
return {
"optional": ContainsDynamicDict({
"item_0": (IO.INT, {"_dynamic": "number"}),
"item_0": (IO.INT, {"_dynamic": "number", "widgetType": "STRING"}),
})
}
@@ -112,7 +115,8 @@ class SetCreateFromInt(ComfyNodeABC):
FUNCTION = "create_set"
def create_set(self, **kwargs: list[Any]) -> tuple[set[Any]]:
return (set([int(value) for value in kwargs.values()]),)
values = [int(value) for value in kwargs.values()]
return (set(values[:-1]),)
class SetCreateFromString(ComfyNodeABC):
@@ -127,7 +131,7 @@ class SetCreateFromString(ComfyNodeABC):
def INPUT_TYPES(cls):
return {
"optional": ContainsDynamicDict({
"item_0": (IO.STRING, {"_dynamic": "number"}),
"item_0": (IO.STRING, {"_dynamic": "number", "widgetType": "STRING"}),
})
}
@@ -137,7 +141,8 @@ class SetCreateFromString(ComfyNodeABC):
FUNCTION = "create_set"
def create_set(self, **kwargs: list[Any]) -> tuple[set[Any]]:
return (set([str(value) for value in kwargs.values()]),)
values = [str(value) for value in kwargs.values()]
return (set(values[:-1]),)
class SetAdd(ComfyNodeABC):
+518 -477
View File
File diff suppressed because it is too large Load Diff