Spaces:
Runtime error
Runtime error
"""Utilities for the json_fixes package.""" | |
import json | |
import re | |
from jsonschema import Draft7Validator | |
from autogpt.config import Config | |
from autogpt.logs import logger | |
CFG = Config() | |
def extract_char_position(error_message: str) -> int: | |
"""Extract the character position from the JSONDecodeError message. | |
Args: | |
error_message (str): The error message from the JSONDecodeError | |
exception. | |
Returns: | |
int: The character position. | |
""" | |
char_pattern = re.compile(r"\(char (\d+)\)") | |
if match := char_pattern.search(error_message): | |
return int(match[1]) | |
else: | |
raise ValueError("Character position not found in the error message.") | |
def validate_json(json_object: object, schema_name: object) -> object: | |
""" | |
:type schema_name: object | |
:param schema_name: | |
:type json_object: object | |
""" | |
with open(f"autogpt/json_utils/{schema_name}.json", "r") as f: | |
schema = json.load(f) | |
validator = Draft7Validator(schema) | |
if errors := sorted(validator.iter_errors(json_object), key=lambda e: e.path): | |
logger.error("The JSON object is invalid.") | |
if CFG.debug_mode: | |
logger.error( | |
json.dumps(json_object, indent=4) | |
) # Replace 'json_object' with the variable containing the JSON data | |
logger.error("The following issues were found:") | |
for error in errors: | |
logger.error(f"Error: {error.message}") | |
elif CFG.debug_mode: | |
print("The JSON object is valid.") | |
return json_object | |