class_docstr: This class was written as a workaround to support dall-e-2 on openai > v1.x
  
  Refer to this issue for more: https://github.com/openai/openai-python/issues/692
class_docstr_tok: ["This","class","was","written","as","a","workaround","to","support","dall-e-2","on","openai",">","v1.x","Refer","to","this","issue","for","more",":","https",":","\/\/github.com\/openai\/openai-python\/issues\/692"]
code: def handle_request(
      self,
      request: httpx.Request,
  ) -> httpx.Response:
      if "images/generations" in request.url.path and request.url.params[
          "api-version"
      ] in [  # dall-e-3 starts from `2023-12-01-preview` so we should be able to avoid conflict
          "2023-06-01-preview",
          "2023-07-01-preview",
          "2023-08-01-preview",
          "2023-09-01-preview",
          "2023-10-01-preview",
      ]:
          request.url = request.url.copy_with(
              path="/openai/images/generations:submit"
          )
          response = super().handle_request(request)
          operation_location_url = response.headers[
              "operation-location"
          ]
          request.url = httpx.URL(operation_location_url)
          request.method = "GET"
          response = super().handle_request(request)
          response.read()
  
          timeout_secs: int = 120
          start_time = time.time()
          while response.json()["status"] not in [
              "succeeded",
              "failed",
          ]:
              if time.time() - start_time > timeout_secs:
                  timeout = {
                      "error": {
                          "code": "Timeout",
                          "message": "Operation polling timed out.",
                      }
                  }
                  return httpx.Response(
                      status_code=400,
                      headers=response.headers,
                      content=json.dumps(timeout).encode("utf-8"),
                      request=request,
                  )
  
              time.sleep(int(response.headers.get("retry-after")) or 10)
              response = super().handle_request(request)
              response.read()
  
          if response.json()["status"] == "failed":
              error_data = response.json()
              return httpx.Response(
                  status_code=400,
                  headers=response.headers,
                  content=json.dumps(error_data).encode("utf-8"),
                  request=request,
              )
  
          result = response.json()["result"]
          return httpx.Response(
              status_code=200,
              headers=response.headers,
              content=json.dumps(result).encode("utf-8"),
              request=request,
          )
      return super().handle_request(request)
  
imports: import time, json, httpx, asyncio
label_desc: Use image node_id 1 for calling the CustomHTTPTransport obj's underlying member method code with example usage: obj.handle_request(request) and returns: super, httpx, httpx, httpx