Source code for operators.grapi.update_application_answer
from typing import Any, Dict, List, Optional
from airflow.exceptions import AirflowException
from airflow.utils.decorators import apply_defaults
import requests
from operators.grapi.grapi_base import GrapiBaseOperator
from config import Config
[docs]
class UpdateApplicationAnswerOperator(GrapiBaseOperator):
ui_color = "#b4ffb3"
GRAPHQL_QUERY = """
mutation UpdateApplicationAnswerProtected($data: ApplicationAnswerProtectedInput!, $where: ApplicationAnswerProtectedWhereInput!) {
updateApplicationAnswerProtected(data: $data, where: $where) {
id
}
}
"""
data = None
expense_line_item = None
application_id = None
@apply_defaults
def __init__(
self, expense_line_item: str, application_id: str, data: dict, *args, **kwargs
):
super().__init__(*args, **kwargs)
self.data = data
self.expense_line_item = expense_line_item
self.application_id = application_id
[docs]
def get_request_payload(self) -> Dict[str, Any]:
"""Prepare the GraphQL request payload."""
variables = {
"data": self.data,
"where": {
"id": self.expense_line_item,
"applicationId": self.application_id,
},
}
print({
"query": self.GRAPHQL_QUERY,
"variables": variables,
})
return {
"query": self.GRAPHQL_QUERY,
"variables": variables,
}
[docs]
def post_process_response(
self, response: requests.Response, context: Optional[Dict[str, Any]] = None
) -> Dict[str, Any]:
"""Parse and validate GraphQL response."""
import json
try:
result = response.json()
except json.JSONDecodeError as e:
raise Exception(f"Failed to parse response JSON: {str(e)}")
# Check for GraphQL errors
if "errors" in result:
error_msg = json.dumps(result["errors"])
self.log.error(f"GraphQL errors: {error_msg}")
raise Exception(f"GraphQL request failed with errors: {error_msg}")
# Check if data exists
if "data" not in result:
raise Exception("Response missing 'data' field")
return result["data"]
[docs]
def execute(self, context):
"""Execute the GraphQL mutation."""
try:
self.log.info(f"Updating application resource")
results = super().execute(context)
self.log.info(
f"Updating application resource completed successfully: {results}"
)
except Exception as e:
self.log.error(f"Updating application resource: {str(e)}", exc_info=True)
raise AirflowException(f"Execution failed: {str(e)}")