Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 1 addition & 1 deletion src/openapi_parser/builders/common.py
Original file line number Diff line number Diff line change
Expand Up @@ -7,7 +7,7 @@
from openapi_parser.errors import ParserError


@dataclass
@dataclass(frozen=True, slots=True)
class PropertyMeta:
"""Property metadata for type-casting extraction."""

Expand Down
3 changes: 2 additions & 1 deletion src/openapi_parser/builders/path.py
Original file line number Diff line number Diff line change
Expand Up @@ -64,7 +64,8 @@ def _build_path(self, url: str, data: dict[str, Any]) -> Path:

if attrs.get("parameters"):
for operation in attrs["operations"]:
operation.parameters += attrs["parameters"]
merged = operation.parameters + attrs["parameters"]
object.__setattr__(operation, "parameters", merged)

attrs["extensions"] = extract_extension_attributes(data)

Expand Down
2 changes: 1 addition & 1 deletion src/openapi_parser/builders/schema.py
Original file line number Diff line number Diff line change
Expand Up @@ -185,7 +185,7 @@ def create(self, data: dict[str, Any]) -> Schema:
schema = builder_func(data)

if not_data is not None:
schema.not_schema = self.create(not_data)
object.__setattr__(schema, "not_schema", self.create(not_data))

return schema

Expand Down
2 changes: 1 addition & 1 deletion src/openapi_parser/loose_types.py
Original file line number Diff line number Diff line change
Expand Up @@ -3,7 +3,7 @@
from dataclasses import dataclass


@dataclass
@dataclass(frozen=True, slots=True)
class LooseEnum:
"""Enum that accepts any string value."""

Expand Down
68 changes: 33 additions & 35 deletions src/openapi_parser/specification.py
Original file line number Diff line number Diff line change
@@ -1,7 +1,5 @@
"""OpenAPI specification data models."""

from __future__ import annotations

from dataclasses import dataclass, field
from typing import Any

Expand Down Expand Up @@ -30,7 +28,7 @@
)


@dataclass
@dataclass(frozen=True, slots=True)
class Contact:
"""API contact information."""

Expand All @@ -39,7 +37,7 @@ class Contact:
email: str | None = None


@dataclass
@dataclass(frozen=True, slots=True)
class License:
"""API license information."""

Expand All @@ -48,7 +46,7 @@ class License:
extensions: dict[str, Any] | None = field(default_factory=dict)


@dataclass
@dataclass(frozen=True, slots=True)
class Info:
"""API metadata information."""

Expand All @@ -61,7 +59,7 @@ class Info:
extensions: dict[str, Any] | None = field(default_factory=dict)


@dataclass
@dataclass(frozen=True, slots=True)
class Server:
"""API server definition."""

Expand All @@ -71,7 +69,7 @@ class Server:
extensions: dict[str, Any] | None = field(default_factory=dict)


@dataclass
@dataclass(frozen=True, slots=True)
class ExternalDoc:
"""External documentation reference."""

Expand All @@ -80,7 +78,7 @@ class ExternalDoc:
extensions: dict[str, Any] | None = field(default_factory=dict)


@dataclass
@dataclass(frozen=True, slots=True)
class Schema:
"""Base schema model."""

Expand All @@ -94,11 +92,11 @@ class Schema:
read_only: bool | None = field(default=False)
write_only: bool | None = field(default=False)
deprecated: bool | None = field(default=False)
not_schema: Schema | None = None
not_schema: "Schema | None" = None
extensions: dict[str, Any] | None = field(default_factory=dict)


@dataclass
@dataclass(frozen=True, slots=True)
class Integer(Schema):
"""Integer type schema."""

Expand All @@ -110,7 +108,7 @@ class Integer(Schema):
format: IntegerFormat | LooseIntegerFormat | None = None


@dataclass
@dataclass(frozen=True, slots=True)
class Number(Schema):
"""Number type schema."""

Expand All @@ -122,7 +120,7 @@ class Number(Schema):
format: NumberFormat | LooseNumberFormat | None = None


@dataclass
@dataclass(frozen=True, slots=True)
class String(Schema):
"""String type schema."""

Expand All @@ -132,21 +130,21 @@ class String(Schema):
format: StringFormat | LooseStringFormat | None = None


@dataclass
@dataclass(frozen=True, slots=True)
class Null(Schema):
"""Null type schema."""

pass


@dataclass
@dataclass(frozen=True, slots=True)
class Boolean(Schema):
"""Boolean type schema."""

pass


@dataclass
@dataclass(frozen=True, slots=True)
class Array(Schema):
"""Array type schema."""

Expand All @@ -156,39 +154,39 @@ class Array(Schema):
items: Schema | None = None


@dataclass
@dataclass(frozen=True, slots=True)
class Discriminator:
"""Polymorphism discriminator."""

property_name: str
mapping: dict[str, str] | None = field(default_factory=dict)


@dataclass
@dataclass(frozen=True, slots=True)
class OneOf(Schema):
"""OneOf composition schema."""

schemas: list[Schema] = field(default_factory=list)
discriminator: Discriminator | None = None


@dataclass
@dataclass(frozen=True, slots=True)
class AnyOf(Schema):
"""AnyOf composition schema."""

schemas: list[Schema] = field(default_factory=list)
discriminator: Discriminator | None = None


@dataclass
@dataclass(frozen=True, slots=True)
class Property:
"""Schema property definition."""

name: str
schema: Schema


@dataclass
@dataclass(frozen=True, slots=True)
class Object(Schema):
"""Object type schema."""

Expand All @@ -199,14 +197,14 @@ class Object(Schema):
additional_properties: bool | Schema | None = None


@dataclass
@dataclass(frozen=True, slots=True)
class Parameter:
"""API parameter definition."""

name: str
location: ParameterLocation
schema: Schema | None = None
content: list[Content] | None = None
content: "list[Content] | None" = None
required: bool | None = field(default=False)
description: str | None = None
example: Any | None = None
Expand All @@ -225,19 +223,19 @@ class Parameter:
extensions: dict[str, Any] | None = field(default_factory=dict)


@dataclass
@dataclass(frozen=True, slots=True)
class Encoding:
"""Encoding definition for request body properties."""

content_type: str | None = None
headers: list[Header] = field(default_factory=list)
headers: "list[Header]" = field(default_factory=list)
style: str | None = None
explode: bool | None = None
allow_reserved: bool | None = None
extensions: dict[str, Any] | None = field(default_factory=dict)


@dataclass
@dataclass(frozen=True, slots=True)
class Content:
"""Request/response content definition."""

Expand All @@ -248,7 +246,7 @@ class Content:
encoding: dict[str, Encoding] | None = None


@dataclass
@dataclass(frozen=True, slots=True)
class RequestBody:
"""Request body definition."""

Expand All @@ -257,7 +255,7 @@ class RequestBody:
required: bool | None = field(default=False)


@dataclass
@dataclass(frozen=True, slots=True)
class Header:
"""Response header definition."""

Expand All @@ -269,7 +267,7 @@ class Header:
extensions: dict[str, Any] | None = field(default_factory=dict)


@dataclass
@dataclass(frozen=True, slots=True)
class Link:
"""Link definition for response links."""

Expand All @@ -282,7 +280,7 @@ class Link:
extensions: dict[str, Any] | None = field(default_factory=dict)


@dataclass
@dataclass(frozen=True, slots=True)
class Response:
"""API response definition."""

Expand All @@ -294,7 +292,7 @@ class Response:
links: dict[str, Link] | None = None


@dataclass
@dataclass(frozen=True, slots=True)
class OAuthFlow:
"""OAuth flow definition."""

Expand All @@ -305,7 +303,7 @@ class OAuthFlow:
extensions: dict[str, Any] | None = field(default_factory=dict)


@dataclass
@dataclass(frozen=True, slots=True)
class Security:
"""Security scheme definition."""

Expand All @@ -320,7 +318,7 @@ class Security:
extensions: dict[str, Any] | None = field(default_factory=dict)


@dataclass
@dataclass(frozen=True, slots=True)
class Operation:
"""API operation definition."""

Expand All @@ -339,7 +337,7 @@ class Operation:
callbacks: dict[str, Any] = field(default_factory=dict)


@dataclass
@dataclass(frozen=True, slots=True)
class Path:
"""API path definition."""

Expand All @@ -351,7 +349,7 @@ class Path:
extensions: dict[str, Any] | None = field(default_factory=dict)


@dataclass
@dataclass(frozen=True, slots=True)
class Tag:
"""API tag definition."""

Expand All @@ -360,7 +358,7 @@ class Tag:
external_docs: ExternalDoc | None = None


@dataclass
@dataclass(frozen=True, slots=True)
class Specification:
"""Root OpenAPI specification object."""

Expand Down
2 changes: 1 addition & 1 deletion tests/builders/test_path_builder.py
Original file line number Diff line number Diff line change
Expand Up @@ -73,7 +73,7 @@ def add_parameters_to_operation(
parameters: list[Parameter],
) -> Operation:
operation_copy = copy.deepcopy(operation)
operation_copy.parameters = parameters
object.__setattr__(operation_copy, "parameters", parameters)
return operation_copy


Expand Down
Loading