From 541314d7ad23408a3e7c0eb048e9bd4a9829ea61 Mon Sep 17 00:00:00 2001 From: HowToSD Date: Fri, 14 Feb 2025 11:14:31 -0800 Subject: [PATCH] Added Show Text, Columns, Index nodes --- __init__.py | 43 ++++++------ docs/images/columns_index.png | Bin 0 -> 105301 bytes docs/ug.md | 17 +++++ .../{pandas => pandas_wrapper}/__init__.py | 0 modules/pandas_wrapper/pandas_columns.py | 43 ++++++++++++ .../{pandas => pandas_wrapper}/pandas_head.py | 0 modules/pandas_wrapper/pandas_index.py | 43 ++++++++++++ .../{pandas => pandas_wrapper}/pandas_join.py | 2 +- .../pandas_load_csv.py | 0 .../pandas_save_csv.py | 0 .../pandas_select_columns.py | 0 .../pandas_select_rows.py | 0 .../pandas_show_dataframe.py | 0 modules/pandas_wrapper/pandas_show_text.py | 48 +++++++++++++ .../{pandas => pandas_wrapper}/pandas_sort.py | 0 .../pandas_summary.py | 0 .../pandas_to_string.py | 0 modules/pandas_wrapper/utils.py | 63 +++++++++++++++++ pyproject.toml | 2 +- tests/pandas/utils_index_json_test.py | 51 ++++++++++++++ tests/pandas/utils_series_json_test.py | 41 +++++++++++ web/js/ShowText.js | 64 ++++++++++++++++++ 22 files changed, 391 insertions(+), 26 deletions(-) create mode 100644 docs/images/columns_index.png rename modules/{pandas => pandas_wrapper}/__init__.py (100%) create mode 100644 modules/pandas_wrapper/pandas_columns.py rename modules/{pandas => pandas_wrapper}/pandas_head.py (100%) create mode 100644 modules/pandas_wrapper/pandas_index.py rename modules/{pandas => pandas_wrapper}/pandas_join.py (96%) rename modules/{pandas => pandas_wrapper}/pandas_load_csv.py (100%) rename modules/{pandas => pandas_wrapper}/pandas_save_csv.py (100%) rename modules/{pandas => pandas_wrapper}/pandas_select_columns.py (100%) rename modules/{pandas => pandas_wrapper}/pandas_select_rows.py (100%) rename modules/{pandas => pandas_wrapper}/pandas_show_dataframe.py (100%) create mode 100644 modules/pandas_wrapper/pandas_show_text.py rename modules/{pandas => pandas_wrapper}/pandas_sort.py (100%) rename modules/{pandas => pandas_wrapper}/pandas_summary.py (100%) rename modules/{pandas => pandas_wrapper}/pandas_to_string.py (100%) create mode 100644 modules/pandas_wrapper/utils.py create mode 100644 tests/pandas/utils_index_json_test.py create mode 100644 tests/pandas/utils_series_json_test.py create mode 100644 web/js/ShowText.js diff --git a/__init__.py b/__init__.py index 3eb45d9..26b3c21 100644 --- a/__init__.py +++ b/__init__.py @@ -2,16 +2,19 @@ from typing import Dict, Type, TypeVar from .modules.matplotlib.mpl_bar import MPLBar from .modules.matplotlib.mpl_line import MPLLine from .modules.matplotlib.mpl_scatter import MPLScatter -from .modules.pandas.pandas_head import PandasHead -from .modules.pandas.pandas_join import PandasJoin -from .modules.pandas.pandas_load_csv import PandasLoadCSV -from .modules.pandas.pandas_save_csv import PandasSaveCSV -from .modules.pandas.pandas_select_columns import PandasSelectColumns -from .modules.pandas.pandas_select_rows import PandasSelectRows -from .modules.pandas.pandas_show_dataframe import PandasShowDataFrame -from .modules.pandas.pandas_sort import PandasSort -from .modules.pandas.pandas_summary import PandasSummary -from .modules.pandas.pandas_to_string import PandasToString +from .modules.pandas_wrapper.pandas_columns import PandasColumns +from .modules.pandas_wrapper.pandas_head import PandasHead +from .modules.pandas_wrapper.pandas_index import PandasIndex +from .modules.pandas_wrapper.pandas_join import PandasJoin +from .modules.pandas_wrapper.pandas_load_csv import PandasLoadCSV +from .modules.pandas_wrapper.pandas_save_csv import PandasSaveCSV +from .modules.pandas_wrapper.pandas_select_columns import PandasSelectColumns +from .modules.pandas_wrapper.pandas_select_rows import PandasSelectRows +from .modules.pandas_wrapper.pandas_show_dataframe import PandasShowDataFrame +from .modules.pandas_wrapper.pandas_show_text import PandasShowText +from .modules.pandas_wrapper.pandas_sort import PandasSort +from .modules.pandas_wrapper.pandas_summary import PandasSummary +from .modules.pandas_wrapper.pandas_to_string import PandasToString T = TypeVar("T") @@ -19,13 +22,16 @@ NODE_CLASS_MAPPINGS: Dict[str, Type[T]] = { "MPLBar": MPLBar, "MPLLine": MPLLine, "MPLScatter": MPLScatter, + "PandasColumns": PandasColumns, "PandasHead": PandasHead, + "PandasIndex": PandasIndex, "PandasJoin": PandasJoin, "PandasLoadCSV": PandasLoadCSV, "PandasSaveCSV": PandasSaveCSV, "PandasSelectColumns": PandasSelectColumns, "PandasSelectRows": PandasSelectRows, "PandasShowDataFrame": PandasShowDataFrame, + "PandasShowText": PandasShowText, "PandasSort": PandasSort, "PandasSummary": PandasSummary, "PandasToString": PandasToString, @@ -33,33 +39,22 @@ NODE_CLASS_MAPPINGS: Dict[str, Type[T]] = { """ NODE_CLASS_MAPPINGS (Dict[str, Type[T]]): A dictionary mapping node names to their corresponding class implementations. - - - "MPLBar": Generates a bar chart from DataFrame data. - - "MPLLine": Generates a line plot from DataFrame data. - - "MPLScatter": Generates a scatter plot from DataFrame data. - - "PandasHead": Handles retrieving the first few rows of a DataFrame. - - "PandasJoin": Provides functionality to join multiple DataFrames. - - "PandasLoadCSV": Loads CSV data into a DataFrame. - - "PandasSaveCSV": Save a DataFrame to a CSV file. - - "PandasSelectColumns": Selects specific columns from a DataFrame. - - "PandasSelectRows": Filters specific rows from a DataFrame. - - "PandasShowDataFrame": Displays the content of the DataFrame. - - "PandasSort": Sorts a DataFrame based on given criteria. - - "PandasSummary": Provides a summary of a DataFrame. - - "PandasToString": Converts a DataFrame to a string representation. """ NODE_DISPLAY_NAME_MAPPINGS: Dict[str, str] = { "MPLBar": "MPL Bar Chart", "MPLLine": "MPL Line Plot", "MPLScatter": "MPL Scatter Plot", + "PandasColumns": "Pandas Columns", "PandasHead": "Pandas Head", + "PandasIndex": "Pandas Index", "PandasJoin": "Pandas Join", "PandasLoadCSV": "Pandas Load CSV", "PandasSaveCSV": "Pandas Save CSV", "PandasSelectColumns": "Pandas Select Columns", "PandasSelectRows": "Pandas Select Rows", "PandasShowDataFrame": "Pandas Show DataFrame", + "PandasShowText": "Pandas Show Text", "PandasSort": "Pandas Sort", "PandasSummary": "Pandas Summary", "PandasToString": "Pandas To String", diff --git a/docs/images/columns_index.png b/docs/images/columns_index.png new file mode 100644 index 0000000000000000000000000000000000000000..756048ff045f8b52115c81871cc61df1f21aeec4 GIT binary patch literal 105301 zcmb?@byQS;yDzq)C<2PKN{4`SqX;4`!q6cg-7T%s-5?C1G(&fTf=IV?2?z*7cXOZl zz3+R@S@)l_?poKi6q(qw_xJn6C!Rh2uVuw?u!*s;u&{6>UWvZJ!n&e_g>@nO`c-(u zpxC?%eq6Q{kx;x2e_XG>^Ml`s?8H>;6f6zw9Cd8;u?#IN&Gnzy>e=Y)Ti6;|+O1z| z5P}yy!Mx~&jlPbZv8BaBMPqY)td};%51(>8e5tSdkd2j%^WjrgK2BafR`!R_Wgfm( zQ1ncF@Cys;A(n*bbH(=wE0d0{1omeKo5N-jEV!(f@hIR290uMay@l*V4TuU=UqCl61<$Dc}#SwzTiwH+@} z-f3GgoZ23ZTj_M2IzDuLxzzjBQ%|cuRqJlrM~6QEivpmIG9;=FOI|&1qK9Qt(=)vOV;Hm#Ae`*hi~UH4yxZhMeBB)%FX#d*%!8_Ao+8anXjvy$()Zj9-SYDS7T6wY%lWiaSX9qI1No0*WfQ_ zoak6y383-96}kTCKmSnrBmV3E@TgT7m6G@Wc)sy@gv!1D@$&1}ByHK|YbWW965poB8cO|kc+)Q0nV+AFXVG>A^9t3#)gV3NU~|huALkWK>T=3ORb^Dg59W^O5NeKE zTO?z1%yIHheDyVtWg)KCQ#sA%d|6Em>T*U+c4~(%UG8YT8#wEvGo8m2ycJarX3CYZ zd2B@{b%n}^d^;zX4nDQ1(W39X>m`rYBYlX++mq}yvZru%*T+YTR)g0WcHv<0l4e<_ zdP_!5{+j$n-#J6l>vqFNb`=PfkC5irMR~9l7P_7j=f4mu%fFhVbv;crFrTdVVoo@w zccc4mckOw&EfU@0b5s`_&HMj*!T+CktUq6qzpS2d2K(PZnq>Oeq}`e6d5GZ)+LmJL z@NKiXM=iyhVS1zQTRBTGKPy|E$}v9+3C`Dr*$ouU2DDIWTQw>DO0A0#bO=nQ@$wIev`{-H8@NSH7uBBqB-J=FJZr z*>mU8OrILemQwJCJ^uFsYtE~PGznHzNv_0Coqtxurx{etm`OpQUf|ppZ(qz_gKHEIS+Tq3FxS4=Ty)g7I0AD`DY8#^^l7A zS4=L5naDRYz7i_iESyt`XT9({qjDyrdM4kog0ZyD!}DrQ%8h^0Lq0$ghfusljQ5R} z?l{9>A#2V;KnJ3N*&(Xz?8$?tv)RtNiU|YkX+^9L7%T%uk>C23?Ec#Ab!`|tS$uVf zYQIlNIDSv+`lE!d-1s(yZ91j-TB>%2H-W5rKfe(7GL{W*YvARGT*qQUiIFhqeE+0d zR6^KsuBH|eRZ)?vdRWrp)253W9O=$=v|oNhSY#h?ThRH|gLfl=xG68wW*#%>HF}{? z2fr0^aAJQx%N&?lT@CItGUFK5MIfHWNx#$A*C|p#X+4J%NPGPx$^~DZp50(;(AAY7 zSuKzrGC00cH-Ns7;C0shvHIWGb@q~uVTF!l%2^dTKhLJm?f+U0SIvEW|0UA!0rn%* zb7JNchGvtehrcYE(!UNY*>RW-<@Ql2<`IZ}@9GNv@ByoTU;tgiC*ntwD~(k0v-zwT z*)+h8c&YYFghK~~iqPv0zxf(p@4HAnb+U$(g`2Y2^**d@6vHr%4xwq2Sk%Veo`s#n zV80z7nUGM#D?*W9chIdJK7ZpHgqq^DhkiM7CM;(bxX+e()G9F+B_-@pA!9A`_m1u} zeJ-*cqvC(1i}0h76r)z|${WNFFj5Kl^%(otr=xry+?0>uK7ppDoj9>Roo`v+a&VpT z8s@}vE5X8u*;`%zO-SMTJxJUDYh%iEeRDta++y3==oQ_~g(ts%4|%@(pž?78^ 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 Dict[str, Any]: + """ + Defines the input types for the `columns` function. + + Returns: + Dict[str, Any]: A dictionary specifying required input types. + """ + return { + "required": { + "dataframe_json": ("STRING", {"multiline": True}) + } + } + + RETURN_TYPES: tuple = ("STRING",) + FUNCTION: str = "columns" + CATEGORY: str = "Data Analysis" + + def columns(self, dataframe_json: str) -> tuple: + """ + Returns the column labels of a pandas DataFrame. + + Args: + dataframe_json (str): A JSON string representation of the DataFrame. + + Returns: + tuple: A tuple containing a JSON string for the serialized pandas.Index containing columns. + """ + # Deserialize JSON string to DataFrame + df = pd.read_json(StringIO(dataframe_json)) + columns = df.columns + return (index_to_jsons(columns),) diff --git a/modules/pandas/pandas_head.py b/modules/pandas_wrapper/pandas_head.py similarity index 100% rename from modules/pandas/pandas_head.py rename to modules/pandas_wrapper/pandas_head.py diff --git a/modules/pandas_wrapper/pandas_index.py b/modules/pandas_wrapper/pandas_index.py new file mode 100644 index 0000000..68990f3 --- /dev/null +++ b/modules/pandas_wrapper/pandas_index.py @@ -0,0 +1,43 @@ +from typing import Any, Dict +from io import StringIO +import pandas as pd +from .utils import index_to_jsons + +class PandasIndex: + """ + PandasColumns: + A class for retrieving the row labels (index) of a pandas DataFrame. + """ + + @classmethod + def INPUT_TYPES(cls) -> Dict[str, Any]: + """ + Defines the input types for the `row_index` function. + + Returns: + Dict[str, Any]: A dictionary specifying required input types. + """ + return { + "required": { + "dataframe_json": ("STRING", {"multiline": True}) + } + } + + RETURN_TYPES: tuple = ("STRING",) + FUNCTION: str = "row_index" + CATEGORY: str = "Data Analysis" + + def row_index(self, dataframe_json: str) -> tuple: + """ + Returns the row labels (index) of a pandas DataFrame. + + Args: + dataframe_json (str): A JSON string representation of the DataFrame. + + Returns: + tuple: A tuple containing a JSON string for the serialized pandas.Index containing row labels. + """ + # Deserialize JSON string to DataFrame + df = pd.read_json(StringIO(dataframe_json)) + row_index = df.index + return (index_to_jsons(row_index),) diff --git a/modules/pandas/pandas_join.py b/modules/pandas_wrapper/pandas_join.py similarity index 96% rename from modules/pandas/pandas_join.py rename to modules/pandas_wrapper/pandas_join.py index 423cd0f..2c1da74 100644 --- a/modules/pandas/pandas_join.py +++ b/modules/pandas_wrapper/pandas_join.py @@ -12,7 +12,7 @@ class PandasJoin: @classmethod def INPUT_TYPES(cls) -> Dict[str, Any]: """ - Defines the input types for the `sort_rows` function. + Defines the input types for the `join` function. Returns: Dict[str, Any]: A dictionary specifying required input types. diff --git a/modules/pandas/pandas_load_csv.py b/modules/pandas_wrapper/pandas_load_csv.py similarity index 100% rename from modules/pandas/pandas_load_csv.py rename to modules/pandas_wrapper/pandas_load_csv.py diff --git a/modules/pandas/pandas_save_csv.py b/modules/pandas_wrapper/pandas_save_csv.py similarity index 100% rename from modules/pandas/pandas_save_csv.py rename to modules/pandas_wrapper/pandas_save_csv.py diff --git a/modules/pandas/pandas_select_columns.py b/modules/pandas_wrapper/pandas_select_columns.py similarity index 100% rename from modules/pandas/pandas_select_columns.py rename to modules/pandas_wrapper/pandas_select_columns.py diff --git a/modules/pandas/pandas_select_rows.py b/modules/pandas_wrapper/pandas_select_rows.py similarity index 100% rename from modules/pandas/pandas_select_rows.py rename to modules/pandas_wrapper/pandas_select_rows.py diff --git a/modules/pandas/pandas_show_dataframe.py b/modules/pandas_wrapper/pandas_show_dataframe.py similarity index 100% rename from modules/pandas/pandas_show_dataframe.py rename to modules/pandas_wrapper/pandas_show_dataframe.py diff --git a/modules/pandas_wrapper/pandas_show_text.py b/modules/pandas_wrapper/pandas_show_text.py new file mode 100644 index 0000000..d64dc81 --- /dev/null +++ b/modules/pandas_wrapper/pandas_show_text.py @@ -0,0 +1,48 @@ +""" +Almost all of this code was taken from +https://github.com/pythongosssss/ComfyUI-Custom-Scripts/blob/main/py/show_text.py + +See credit/credit.md for the full license. +""" + +class PandasShowText: + @classmethod + def INPUT_TYPES(s): + return { + "required": { + "text": ("STRING", {"forceInput": True}), + }, + "hidden": { + "unique_id": "UNIQUE_ID", + "extra_pnginfo": "EXTRA_PNGINFO", + }, + } + + INPUT_IS_LIST = True + RETURN_TYPES = ("STRING",) + FUNCTION = "notify" + OUTPUT_NODE = True + OUTPUT_IS_LIST = (True,) + + CATEGORY = "Data Analysis" + + def notify(self, text, unique_id=None, extra_pnginfo=None): + if unique_id is not None and extra_pnginfo is not None: + if not isinstance(extra_pnginfo, list): + print("Error: extra_pnginfo is not a list") + elif ( + not isinstance(extra_pnginfo[0], dict) + or "workflow" not in extra_pnginfo[0] + ): + print("Error: extra_pnginfo[0] is not a dict or missing 'workflow' key") + else: + workflow = extra_pnginfo[0]["workflow"] + node = next( + (x for x in workflow["nodes"] if str(x["id"]) == str(unique_id[0])), + None, + ) + if node: + node["widgets_values"] = [text] + else: + print("unique_id or extra_pnginfo is None.") + return {"ui": {"text": text}, "result": (text,)} diff --git a/modules/pandas/pandas_sort.py b/modules/pandas_wrapper/pandas_sort.py similarity index 100% rename from modules/pandas/pandas_sort.py rename to modules/pandas_wrapper/pandas_sort.py diff --git a/modules/pandas/pandas_summary.py b/modules/pandas_wrapper/pandas_summary.py similarity index 100% rename from modules/pandas/pandas_summary.py rename to modules/pandas_wrapper/pandas_summary.py diff --git a/modules/pandas/pandas_to_string.py b/modules/pandas_wrapper/pandas_to_string.py similarity index 100% rename from modules/pandas/pandas_to_string.py rename to modules/pandas_wrapper/pandas_to_string.py diff --git a/modules/pandas_wrapper/utils.py b/modules/pandas_wrapper/utils.py new file mode 100644 index 0000000..7e95a27 --- /dev/null +++ b/modules/pandas_wrapper/utils.py @@ -0,0 +1,63 @@ +import json +import pandas as pd + +def series_to_jsons(series: pd.Series) -> str: + """ + Convert a pandas Series to a JSON string. + + Args: + series (pd.Series): The pandas Series to convert. + + Returns: + str: A JSON string representing the Series, including its data, index, and name. + """ + array = [x.item() if hasattr(x, "item") else x for x in series.tolist()] # Convert NumPy types to Python types + index = [x.item() if hasattr(x, "item") else x for x in series.index.tolist()] # Convert index to Python types + name = series.name + + d = {"array": array, "index": index, "name": name} + + return json.dumps(d) + +def jsons_to_series(s: str) -> pd.Series: + """ + Convert a JSON string to a pandas Series. + + Args: + s (str): The JSON string representing the Series. + + Returns: + pd.Series: The reconstructed pandas Series. + """ + d = json.loads(s) + return pd.Series(data=d["array"], index=d["index"], name=d["name"]) + +def index_to_jsons(index: pd.Index) -> str: + """ + Convert a pandas Index to a JSON string. + + Args: + index (pd.Index): The pandas Index to convert. + + Returns: + str: A JSON string representing the Index, including its values and name. + """ + index_list = [x.item() if hasattr(x, "item") else x for x in index.tolist()] # Convert NumPy types to Python types + index_name = index.name # Preserve index name + + d = {"index": index_list, "name": index_name} + + return json.dumps(d) + +def jsons_to_index(s: str) -> pd.Index: + """ + Convert a JSON string to a pandas Index. + + Args: + s (str): The JSON string representing the Index. + + Returns: + pd.Index: The reconstructed pandas Index. + """ + d = json.loads(s) + return pd.Index(d["index"], name=d.get("name")) # Restore index with name diff --git a/pyproject.toml b/pyproject.toml index 85a4f96..1c2ccd0 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -1,7 +1,7 @@ [project] name = "data-analysis" description = "Data analysis custom modules for ComfyUI - Use Pandas & Matplotlib within ComfyUI" -version = "1.0.5" +version = "1.0.6" license = {file = "LICENSE"} [project.urls] diff --git a/tests/pandas/utils_index_json_test.py b/tests/pandas/utils_index_json_test.py new file mode 100644 index 0000000..7397364 --- /dev/null +++ b/tests/pandas/utils_index_json_test.py @@ -0,0 +1,51 @@ +import os +import sys +import unittest +import json +import pandas as pd + +PROJECT_ROOT = os.path.realpath(os.path.join(__file__, "..", "..", "..")) +MODULE_ROOT = os.path.join(PROJECT_ROOT, "modules") +sys.path.append(MODULE_ROOT) +print(MODULE_ROOT) + +from pandas_wrapper.utils import index_to_jsons, jsons_to_index + +class TestIndexJsonConversion(unittest.TestCase): + def setUp(self): + """Set up test data""" + self.index_int = pd.Index([1, 2, 3], name="test_index_int") + self.index_float = pd.Index([1.1, 2.2, 3.3], name="test_index_float") + self.index_str = pd.Index(["a", "b", "c"], name="test_index_str") + self.index_mixed = pd.Index([1, "text", 3.5], name="test_index_mixed") + self.index_no_name = pd.Index([1, "text", 3.5]) + + def test_index_to_jsons_and_back(self): + """Test conversion from Index to JSON and back""" + for index in [self.index_int, self.index_float, self.index_str, self.index_mixed]: + with self.subTest(index=index): + json_str = index_to_jsons(index) + reconstructed_index = jsons_to_index(json_str) + self.assertTrue(index.equals(reconstructed_index), f"Failed for index: {index.name}") + + def test_json_format(self): + """Test if JSON output is correctly formatted""" + json_str = index_to_jsons(self.index_int) + data = json.loads(json_str) + + self.assertIn("index", data) + self.assertIn("name", data) + self.assertEqual(data["name"], "test_index_int") + + def test_json_format_no_name(self): + """Test if JSON output is correctly formatted""" + json_str = index_to_jsons(self.index_no_name) + data = json.loads(json_str) + + self.assertIn("index", data) + self.assertIn("name", data) + self.assertTrue(data["name"] is None) + + +if __name__ == "__main__": + unittest.main() diff --git a/tests/pandas/utils_series_json_test.py b/tests/pandas/utils_series_json_test.py new file mode 100644 index 0000000..be5d8c1 --- /dev/null +++ b/tests/pandas/utils_series_json_test.py @@ -0,0 +1,41 @@ +import os +import sys +import unittest +import json +import pandas as pd + +PROJECT_ROOT = os.path.realpath(os.path.join(__file__, "..", "..", "..")) +MODULE_ROOT = os.path.join(PROJECT_ROOT, "modules") +sys.path.append(MODULE_ROOT) +print(MODULE_ROOT) +from pandas_wrapper.utils import series_to_jsons +from pandas_wrapper.utils import jsons_to_series + +class TestSeriesJsonConversion(unittest.TestCase): + def setUp(self): + """Set up test data""" + self.series_int = pd.Series([10, 20, 30], index=["a", "b", "c"], name="test_series_int") + self.series_float = pd.Series([1.1, 2.2, 3.3], index=["x", "y", "z"], name="test_series_float") + self.series_str = pd.Series(["apple", "banana", "cherry"], index=[0, 1, 2], name="test_series_str") + self.series_mixed = pd.Series([1, "text", 3.5], index=["one", "two", "three"], name="test_series_mixed") + + def test_series_to_jsons_and_back(self): + """Test conversion from Series to JSON and back""" + for series in [self.series_int, self.series_float, self.series_str, self.series_mixed]: + with self.subTest(series=series): + json_str = series_to_jsons(series) + reconstructed_series = jsons_to_series(json_str) + self.assertTrue(series.equals(reconstructed_series), f"Failed for series: {series.name}") + + def test_json_format(self): + """Test if JSON output is correctly formatted""" + json_str = series_to_jsons(self.series_int) + data = json.loads(json_str) + + self.assertIn("array", data) + self.assertIn("index", data) + self.assertIn("name", data) + self.assertEqual(data["name"], "test_series_int") + +if __name__ == "__main__": + unittest.main() diff --git a/web/js/ShowText.js b/web/js/ShowText.js new file mode 100644 index 0000000..bd23863 --- /dev/null +++ b/web/js/ShowText.js @@ -0,0 +1,64 @@ +/* +Almost all of this code was taken from +https://github.com/pythongosssss/ComfyUI-Custom-Scripts/blob/main/web/js/showText.js + +See credit/credit.md for the full license. +*/ + +import { app } from "../../../scripts/app.js"; +import { ComfyWidgets } from "../../../scripts/widgets.js"; + +// Displays input text on a node +app.registerExtension({ + name: "HowToSD.ShowText", + async beforeRegisterNodeDef(nodeType, nodeData, app) { + if (nodeData.name === "PandasShowText") { // This needs to match NODE_CLASS_MAPPINGS in Python + function populate(text) { + if (this.widgets) { + for (let i = 1; i < this.widgets.length; i++) { + this.widgets[i].onRemove?.(); + } + this.widgets.length = 1; + } + + const v = [...text]; + if (!v[0]) { + v.shift(); + } + for (const list of v) { + const w = ComfyWidgets["STRING"](this, "text2", ["STRING", { multiline: true }], app).widget; + w.inputEl.readOnly = true; + w.inputEl.style.opacity = 0.6; + w.value = list; + } + + requestAnimationFrame(() => { + const sz = this.computeSize(); + if (sz[0] < this.size[0]) { + sz[0] = this.size[0]; + } + if (sz[1] < this.size[1]) { + sz[1] = this.size[1]; + } + this.onResize?.(sz); + app.graph.setDirtyCanvas(true, false); + }); + } + + // When the node is executed we will be sent the input text, display this in the widget + const onExecuted = nodeType.prototype.onExecuted; + nodeType.prototype.onExecuted = function (message) { + onExecuted?.apply(this, arguments); + populate.call(this, message.text); + }; + + const onConfigure = nodeType.prototype.onConfigure; + nodeType.prototype.onConfigure = function () { + onConfigure?.apply(this, arguments); + if (this.widgets_values?.length) { + populate.call(this, this.widgets_values.slice(+this.widgets_values.length > 1)); + } + }; + } + }, +}); \ No newline at end of file