|
import json |
|
import re |
|
from ..core import CATEGORY, CONFIG, METADATA_RAW, TEXTS, findJsonsDiff, logger |
|
|
|
|
|
class CMetadataExtractor: |
|
@classmethod |
|
def INPUT_TYPES(cls): |
|
return { |
|
"required": { |
|
"metadata_raw": METADATA_RAW, |
|
}, |
|
"optional": { |
|
} |
|
} |
|
|
|
CATEGORY = CATEGORY.MAIN.value + CATEGORY.METADATA.value |
|
RETURN_TYPES = ("JSON", "JSON", "JSON", "JSON", "STRING", "STRING") |
|
RETURN_NAMES = ("prompt", "workflow", "file info", "raw to JSON", "raw to property", "raw to csv") |
|
|
|
|
|
FUNCTION = "execute" |
|
|
|
def execute(self, metadata_raw=None): |
|
prompt = {} |
|
workflow = {} |
|
fileinfo = {} |
|
text = "" |
|
csv = "" |
|
|
|
if metadata_raw is not None and isinstance(metadata_raw, dict): |
|
try: |
|
for key, value in metadata_raw.items(): |
|
|
|
if isinstance(value, dict): |
|
|
|
value = json.dumps(json.dumps(value)) |
|
else: |
|
value = json.dumps(value) |
|
|
|
text += f"\"{key}\"={value}\n" |
|
|
|
|
|
value = re.sub('\n', ' ', value) |
|
csv += f'"{key}"\t{value}\n' |
|
|
|
if csv != "": |
|
csv = '"key"\t"value"\n' + csv |
|
|
|
except Exception as e: |
|
logger.warn(e) |
|
|
|
try: |
|
if "prompt" in metadata_raw: |
|
prompt = metadata_raw["prompt"] |
|
else: |
|
raise Exception("Prompt not found in metadata_raw") |
|
except Exception as e: |
|
logger.warn(e) |
|
|
|
try: |
|
if "workflow" in metadata_raw: |
|
workflow = metadata_raw["workflow"] |
|
else: |
|
raise Exception("Workflow not found in metadata_raw") |
|
except Exception as e: |
|
logger.warn(e) |
|
|
|
try: |
|
if "fileinfo" in metadata_raw: |
|
fileinfo = metadata_raw["fileinfo"] |
|
else: |
|
raise Exception("Fileinfo not found in metadata_raw") |
|
except Exception as e: |
|
logger.warn(e) |
|
|
|
elif metadata_raw is None: |
|
logger.debug("metadata_raw is None") |
|
else: |
|
logger.warn(TEXTS.INVALID_METADATA_MSG.value) |
|
|
|
return (json.dumps(prompt, indent=CONFIG["indent"]), |
|
json.dumps(workflow, indent=CONFIG["indent"]), |
|
json.dumps(fileinfo, indent=CONFIG["indent"]), |
|
json.dumps(metadata_raw, indent=CONFIG["indent"]), |
|
text, csv) |
|
|
|
|
|
class CMetadataCompare: |
|
@classmethod |
|
def INPUT_TYPES(cls): |
|
return { |
|
"required": { |
|
"metadata_raw_old": METADATA_RAW, |
|
"metadata_raw_new": METADATA_RAW, |
|
"what": (["Prompt", "Workflow", "Fileinfo"],), |
|
}, |
|
"optional": { |
|
} |
|
} |
|
|
|
CATEGORY = CATEGORY.MAIN.value + CATEGORY.METADATA.value |
|
RETURN_TYPES = ("JSON",) |
|
RETURN_NAMES = ("diff",) |
|
OUTPUT_NODE = True |
|
|
|
FUNCTION = "execute" |
|
|
|
def execute(self, what, metadata_raw_old=None, metadata_raw_new=None): |
|
prompt_old = {} |
|
workflow_old = {} |
|
fileinfo_old = {} |
|
prompt_new = {} |
|
workflow_new = {} |
|
fileinfo_new = {} |
|
diff = "" |
|
|
|
if type(metadata_raw_old) == dict and type(metadata_raw_new) == dict: |
|
|
|
if "prompt" in metadata_raw_old: |
|
prompt_old = metadata_raw_old["prompt"] |
|
else: |
|
logger.warn("Prompt not found in metadata_raw_old") |
|
|
|
if "workflow" in metadata_raw_old: |
|
workflow_old = metadata_raw_old["workflow"] |
|
else: |
|
logger.warn("Workflow not found in metadata_raw_old") |
|
|
|
if "fileinfo" in metadata_raw_old: |
|
fileinfo_old = metadata_raw_old["fileinfo"] |
|
else: |
|
logger.warn("Fileinfo not found in metadata_raw_old") |
|
|
|
if "prompt" in metadata_raw_new: |
|
prompt_new = metadata_raw_new["prompt"] |
|
else: |
|
logger.warn("Prompt not found in metadata_raw_new") |
|
|
|
if "workflow" in metadata_raw_new: |
|
workflow_new = metadata_raw_new["workflow"] |
|
else: |
|
logger.warn("Workflow not found in metadata_raw_new") |
|
|
|
if "fileinfo" in metadata_raw_new: |
|
fileinfo_new = metadata_raw_new["fileinfo"] |
|
else: |
|
logger.warn("Fileinfo not found in metadata_raw_new") |
|
|
|
if what == "Prompt": |
|
diff = findJsonsDiff(prompt_old, prompt_new) |
|
elif what == "Workflow": |
|
diff = findJsonsDiff(workflow_old, workflow_new) |
|
else: |
|
diff = findJsonsDiff(fileinfo_old, fileinfo_new) |
|
|
|
diff = json.dumps(diff, indent=CONFIG["indent"]) |
|
|
|
else: |
|
invalid_msg = TEXTS.INVALID_METADATA_MSG.value |
|
logger.warn(invalid_msg) |
|
diff = invalid_msg |
|
|
|
return {"ui": {"text": [diff]}, "result": (diff,)} |
|
|