|
| 1 | +from __future__ import annotations |
| 2 | +from typing import Any, List, Dict, Optional, Union |
| 3 | +from pydantic import model_serializer, model_validator, BaseModel, Field |
| 4 | +from . import CoreSchemaMetaSchemaObject |
| 5 | +from . import JsonSchemaDraft07SchemaType |
| 6 | +from . import SchemaAllOf1DiscriminatorObject |
| 7 | +from . import ExternalDocs |
| 8 | +from . import OpenapiSchema30Xml |
| 9 | +class MessageObjectPayloadObject(BaseModel): |
| 10 | + dollar_id: Optional[str] = Field(default=None, alias='''$id''') |
| 11 | + dollar_schema: Optional[str] = Field(default=None, alias='''$schema''') |
| 12 | + dollar_ref: Optional[str] = Field(default=None, alias='''$ref''') |
| 13 | + dollar_comment: Optional[str] = Field(default=None, alias='''$comment''') |
| 14 | + title: Optional[str] = Field(default=None) |
| 15 | + description: Optional[str] = Field(default=None) |
| 16 | + default: Optional[Any] = Field(description='''Configuration for the OAuth Authorization Code flow.''', default=None) |
| 17 | + read_only: Optional[bool] = Field(default=None, alias='''readOnly''') |
| 18 | + write_only: Optional[bool] = Field(default=None, alias='''writeOnly''') |
| 19 | + examples: Optional[List[Any]] = Field(default=None) |
| 20 | + multiple_of: Optional[float] = Field(default=None, alias='''multipleOf''') |
| 21 | + maximum: Optional[float] = Field(default=None) |
| 22 | + exclusive_maximum: Optional[Union[float, bool]] = Field(default=None, alias='''exclusiveMaximum''') |
| 23 | + minimum: Optional[float] = Field(default=None) |
| 24 | + exclusive_minimum: Optional[Union[float, bool]] = Field(default=None, alias='''exclusiveMinimum''') |
| 25 | + max_length: Optional[int] = Field(default=None, alias='''maxLength''') |
| 26 | + min_length: Optional[int] = Field(default=None, alias='''minLength''') |
| 27 | + pattern: Optional[str] = Field(default=None) |
| 28 | + additional_items: Optional[Union[MessageObjectPayloadObject, bool]] = Field(default=None, alias='''additionalItems''') |
| 29 | + items: Optional[Union[CoreSchemaMetaSchemaObject.CoreSchemaMetaSchemaObject | bool, List[MessageObjectPayloadObject | bool]]] = Field(default=None) |
| 30 | + max_items: Optional[int] = Field(default=None, alias='''maxItems''') |
| 31 | + min_items: Optional[int] = Field(default=None, alias='''minItems''') |
| 32 | + unique_items: Optional[bool] = Field(default=None, alias='''uniqueItems''') |
| 33 | + contains: Optional[Union[MessageObjectPayloadObject, bool]] = Field(default=None) |
| 34 | + max_properties: Optional[int] = Field(default=None, alias='''maxProperties''') |
| 35 | + min_properties: Optional[int] = Field(default=None, alias='''minProperties''') |
| 36 | + required: Optional[List[str]] = Field(default=None) |
| 37 | + additional_properties: Optional[Union[MessageObjectPayloadObject, bool]] = Field(default=None, alias='''additionalProperties''') |
| 38 | + definitions: Optional[dict[str, MessageObjectPayloadObject | bool]] = Field(default=None) |
| 39 | + properties: Optional[dict[str, MessageObjectPayloadObject | bool]] = Field(default=None) |
| 40 | + pattern_properties: Optional[dict[str, MessageObjectPayloadObject | bool]] = Field(default=None, alias='''patternProperties''') |
| 41 | + dependencies: Optional[dict[str, Any | List[str]]] = Field(default=None) |
| 42 | + property_names: Optional[Union[MessageObjectPayloadObject, bool]] = Field(default=None, alias='''propertyNames''') |
| 43 | + const: Optional[Any] = Field(description='''Configuration for the OAuth Authorization Code flow.''', default=None) |
| 44 | + enum: Optional[List[Any]] = Field(default=None) |
| 45 | + type: Optional[JsonSchemaDraft07SchemaType.JsonSchemaDraft07SchemaType] = Field(default=None) |
| 46 | + format: Optional[str] = Field(default=None) |
| 47 | + content_media_type: Optional[str] = Field(default=None, alias='''contentMediaType''') |
| 48 | + content_encoding: Optional[str] = Field(default=None, alias='''contentEncoding''') |
| 49 | + reserved_if: Optional[Union[MessageObjectPayloadObject, bool]] = Field(default=None, alias='''if''') |
| 50 | + then: Optional[Union[MessageObjectPayloadObject, bool]] = Field(default=None) |
| 51 | + reserved_else: Optional[Union[MessageObjectPayloadObject, bool]] = Field(default=None, alias='''else''') |
| 52 | + all_of: Optional[List[MessageObjectPayloadObject | bool]] = Field(default=None, alias='''allOf''') |
| 53 | + any_of: Optional[List[MessageObjectPayloadObject | bool]] = Field(default=None, alias='''anyOf''') |
| 54 | + one_of: Optional[List[MessageObjectPayloadObject | bool]] = Field(default=None, alias='''oneOf''') |
| 55 | + reserved_not: Optional[Union[MessageObjectPayloadObject, bool]] = Field(default=None, alias='''not''') |
| 56 | + discriminator: Optional[Union[SchemaAllOf1DiscriminatorObject.SchemaAllOf1DiscriminatorObject, str]] = Field(default=None) |
| 57 | + external_docs: Optional[ExternalDocs.ExternalDocs] = Field(default=None, alias='''externalDocs''') |
| 58 | + deprecated: Optional[bool] = Field(default=None) |
| 59 | + nullable: Optional[bool] = Field(default=None) |
| 60 | + example: Optional[Any] = Field(description='''Configuration for the OAuth Authorization Code flow.''', default=None) |
| 61 | + xml: Optional[OpenapiSchema30Xml.OpenapiSchema30Xml] = Field(default=None) |
| 62 | + extensions: Optional[dict[str, Any]] = Field(exclude=True, default=None) |
| 63 | + |
| 64 | + @model_serializer(mode='wrap') |
| 65 | + def custom_serializer(self, handler): |
| 66 | + serialized_self = handler(self) |
| 67 | + extensions = getattr(self, "extensions") |
| 68 | + if extensions is not None: |
| 69 | + for key, value in extensions.items(): |
| 70 | + # Never overwrite existing values, to avoid clashes |
| 71 | + if not hasattr(serialized_self, key): |
| 72 | + serialized_self[key] = value |
| 73 | + |
| 74 | + return serialized_self |
| 75 | + |
| 76 | + @model_validator(mode='before') |
| 77 | + @classmethod |
| 78 | + def unwrap_extensions(cls, data): |
| 79 | + json_properties = list(data.keys()) |
| 80 | + known_object_properties = ['dollar_id', 'dollar_schema', 'dollar_ref', 'dollar_comment', 'title', 'description', 'default', 'read_only', 'write_only', 'examples', 'multiple_of', 'maximum', 'exclusive_maximum', 'minimum', 'exclusive_minimum', 'max_length', 'min_length', 'pattern', 'additional_items', 'items', 'max_items', 'min_items', 'unique_items', 'contains', 'max_properties', 'min_properties', 'required', 'additional_properties', 'definitions', 'properties', 'pattern_properties', 'dependencies', 'property_names', 'const', 'enum', 'type', 'format', 'content_media_type', 'content_encoding', 'reserved_if', 'then', 'reserved_else', 'all_of', 'any_of', 'one_of', 'reserved_not', 'discriminator', 'external_docs', 'deprecated', 'nullable', 'example', 'xml', 'extensions'] |
| 81 | + unknown_object_properties = [element for element in json_properties if element not in known_object_properties] |
| 82 | + # Ignore attempts that validate regular models, only when unknown input is used we add unwrap extensions |
| 83 | + if len(unknown_object_properties) == 0: |
| 84 | + return data |
| 85 | + |
| 86 | + known_json_properties = ['$id', '$schema', '$ref', '$comment', 'title', 'description', 'default', 'readOnly', 'writeOnly', 'examples', 'multipleOf', 'maximum', 'exclusiveMaximum', 'minimum', 'exclusiveMinimum', 'maxLength', 'minLength', 'pattern', 'additionalItems', 'items', 'maxItems', 'minItems', 'uniqueItems', 'contains', 'maxProperties', 'minProperties', 'required', 'additionalProperties', 'definitions', 'properties', 'patternProperties', 'dependencies', 'propertyNames', 'const', 'enum', 'type', 'format', 'contentMediaType', 'contentEncoding', 'if', 'then', 'else', 'allOf', 'anyOf', 'oneOf', 'not', 'discriminator', 'externalDocs', 'deprecated', 'nullable', 'example', 'xml', 'extensions'] |
| 87 | + extensions = {} |
| 88 | + for obj_key in list(data.keys()): |
| 89 | + if not known_json_properties.__contains__(obj_key): |
| 90 | + extensions[obj_key] = data.pop(obj_key, None) |
| 91 | + data['extensions'] = extensions |
| 92 | + return data |
| 93 | + |
0 commit comments