Spaces:
Running
Running
| """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 | |