from dataclasses import dataclass, field, asdict
from typing import Dict, Any
from ace.core.constants import MessageRequest, APIMessage
[docs]
@dataclass
class GraphQLRequestData:
query: str = ""
variables: Dict[str, Any] = field(default_factory=dict)
[docs]
def to_dict(self) -> Dict[str, Any]:
return asdict(self)
[docs]
@dataclass
class GraphQLMessageBody:
url: str
auth_service: str = APIMessage.AuthService.CENTRALIZE
method: str = "POST"
params: str = ""
headers: Dict[str, str] = field(default_factory=lambda: {"Content-Type": APIMessage.ContentType.Application.JSON})
data: GraphQLRequestData = field(default_factory=GraphQLRequestData) # A.K.A. BODY
[docs]
def to_dict(self) -> Dict[str, Any]:
return {
**asdict(self),
"data": self.data.to_dict() # Convert the nested data object
}
[docs]
@dataclass
class GraphQLMessage:
message_type: str = MessageRequest.Type.GRAPHQL
message_body: GraphQLMessageBody = field(default_factory=GraphQLMessageBody)
[docs]
def to_dict(self) -> Dict[str, Any]:
return asdict(self)