Spaces:
Runtime error
Runtime error
| from typing import Dict | |
| def resolve_reference(reference: str, references: Dict) -> Dict: | |
| return references[reference.split("/")[-1]] | |
| def get_single_reference_item(property: Dict, references: Dict) -> Dict: | |
| # Ref can either be directly in the properties or the first element of allOf | |
| reference = property.get("$ref") | |
| if reference is None: | |
| reference = property["allOf"][0]["$ref"] | |
| return resolve_reference(reference, references) | |
| def is_single_string_property(property: Dict) -> bool: | |
| return property.get("type") == "string" | |
| def is_single_datetime_property(property: Dict) -> bool: | |
| if property.get("type") != "string": | |
| return False | |
| return property.get("format") in ["date-time", "time", "date"] | |
| def is_single_boolean_property(property: Dict) -> bool: | |
| return property.get("type") == "boolean" | |
| def is_single_number_property(property: Dict) -> bool: | |
| return property.get("type") in ["integer", "number"] | |
| def is_single_file_property(property: Dict) -> bool: | |
| if property.get("type") != "string": | |
| return False | |
| # TODO: binary? | |
| return property.get("format") == "byte" | |
| def is_single_directory_property(property: Dict) -> bool: | |
| if property.get("type") != "string": | |
| return False | |
| return property.get("format") == "path" | |
| def is_multi_enum_property(property: Dict, references: Dict) -> bool: | |
| if property.get("type") != "array": | |
| return False | |
| if property.get("uniqueItems") is not True: | |
| # Only relevant if it is a set or other datastructures with unique items | |
| return False | |
| try: | |
| _ = resolve_reference(property["items"]["$ref"], references)["enum"] | |
| return True | |
| except Exception: | |
| return False | |
| def is_single_enum_property(property: Dict, references: Dict) -> bool: | |
| try: | |
| _ = get_single_reference_item(property, references)["enum"] | |
| return True | |
| except Exception: | |
| return False | |
| def is_single_dict_property(property: Dict) -> bool: | |
| if property.get("type") != "object": | |
| return False | |
| return "additionalProperties" in property | |
| def is_single_reference(property: Dict) -> bool: | |
| if property.get("type") is not None: | |
| return False | |
| return bool(property.get("$ref")) | |
| def is_multi_file_property(property: Dict) -> bool: | |
| if property.get("type") != "array": | |
| return False | |
| if property.get("items") is None: | |
| return False | |
| try: | |
| # TODO: binary | |
| return property["items"]["format"] == "byte" | |
| except Exception: | |
| return False | |
| def is_single_object(property: Dict, references: Dict) -> bool: | |
| try: | |
| object_reference = get_single_reference_item(property, references) | |
| if object_reference["type"] != "object": | |
| return False | |
| return "properties" in object_reference | |
| except Exception: | |
| return False | |
| def is_property_list(property: Dict) -> bool: | |
| if property.get("type") != "array": | |
| return False | |
| if property.get("items") is None: | |
| return False | |
| try: | |
| return property["items"]["type"] in ["string", "number", "integer"] | |
| except Exception: | |
| return False | |
| def is_object_list_property(property: Dict, references: Dict) -> bool: | |
| if property.get("type") != "array": | |
| return False | |
| try: | |
| object_reference = resolve_reference(property["items"]["$ref"], references) | |
| if object_reference["type"] != "object": | |
| return False | |
| return "properties" in object_reference | |
| except Exception: | |
| return False | |