Esempio n. 1
0
 def test_asjson_all_params(self):
     request = TransformDocumentPipeRequest(
         document=encode_base64("Hello Pipe Request5!"),
         services=[ServiceInfo(name="QDS.MAIL")],
         file_name="sec.txt",
     )
     assert (
         request.json() ==
         '{"document": "SGVsbG8gUGlwZSBSZXF1ZXN0NSE=", "services": [{"name": "QDS.MAIL", "options": null}], "file_name": "sec.txt"}'
     )
Esempio n. 2
0
 def test_asjson_required_params(self):
     request = TransformDocumentPipeRequest(
         document=encode_base64("Hello Pipe Request4!"),
         services=[ServiceInfo(name="QDS.CAESER")],
         file_name=None,
     )
     assert (
         request.json() ==
         '{"document": "SGVsbG8gUGlwZSBSZXF1ZXN0NCE=", "services": [{"name": "QDS.CAESER", "options": null}], "file_name": null}'
     )
Esempio n. 3
0
    def _transform_document_pipe(
        self,
    ) -> Tuple[RawTransformDocumentPipeResponse, Status]:
        """Callback function which gets invoked by flask if a 'transform pipe' request is received.

        Returns:
            Tuple[RawTransformDocumentPipeResponse, Status]: Returns a flask response.
        """
        request_model = TransformDocumentPipeRequest(**flask.request.json)
        result = self.client.transform_document_pipe(**request_model.dict())
        return cast(RawTransformDocumentPipeResponse, result.dict()), Status.OK
Esempio n. 4
0
 def test_asdict_all_params(self):
     request = TransformDocumentPipeRequest(
         document=encode_base64("Hello Pipe Request3!"),
         services=[ServiceInfo(name="QDS.COUNT")],
         file_name="secret.txt",
     )
     request_dict = request.dict()
     assert len(request_dict.keys()) == 3
     assert request_dict["document"] == "SGVsbG8gUGlwZSBSZXF1ZXN0MyE="
     assert request_dict["services"] == [{
         "name": "QDS.COUNT",
         "options": None
     }]
     assert request_dict["file_name"] == "secret.txt"
Esempio n. 5
0
 def test_asdict_required_params(self):
     request = TransformDocumentPipeRequest(
         document=encode_base64("Hello Pipe Request2!"),
         services=[ServiceInfo(name="QDS.ECHO")],
         file_name=None,
     )
     request_dict = request.dict()
     assert len(request_dict.keys()) == 3
     assert request_dict["document"] == "SGVsbG8gUGlwZSBSZXF1ZXN0MiE="
     assert request_dict["services"] == [{
         "name": "QDS.ECHO",
         "options": None
     }]
     assert request_dict["file_name"] is None
Esempio n. 6
0
def test_transform_document_pipe_with_instance_address(client: Client) -> None:
    httpretty.register_uri(
        method=httpretty.POST,
        uri="http://localhost:50000/v1/document/transform-pipe",
        body=json.dumps({
            "document":
            "Hello World!!",
            "output": ["transforming document <simpletext.txt> ...", "lol"],
            "error": ["Unknown Exceptions"],
            "last_transformer":
            "COUNT",
        }),
        status=200,
    )

    response = client.transform_document_pipe(
        request=TransformDocumentPipeRequest(
            document="Hello World",
            services=[PipeService(name="ECHO"),
                      PipeService(name="COUNT")],
        ),
        instance_address="localhost:50000",
    )

    assert response.document == "Hello World!!"
    assert response.last_transformer == "COUNT"
    assert not response.output is None
    assert not response.error is None
    assert len(response.output) == 2
    assert len(response.error) == 1
Esempio n. 7
0
def test_transform_document_pipe(client: Client) -> None:
    httpretty.register_uri(
        method=httpretty.GET,
        uri="http://localhost:8761/eureka/apps/ECHO",
        body=EUREKA_GET_APPS_ECHO_RESPONSE,
        status=200,
    )

    httpretty.register_uri(
        method=httpretty.POST,
        uri="http://localhost:50000/v1/document/transform-pipe",
        body=json.dumps({
            "document":
            "Hello Worlds!",
            "output": ["transforming document <simpletext.txt> ...", "lol"],
            "error": ["Unknown Exceptions"],
            "last_transformer":
            "COUNT",
        }),
        status=200,
    )

    response = client.transform_document_pipe(
        request=TransformDocumentPipeRequest(
            document="Hello World",
            services=[PipeService(name="ECHO"),
                      PipeService(name="COUNT")],
        ))

    assert response.document == "Hello Worlds!"
    assert response.last_transformer == "COUNT"
    assert not response.output is None
    assert not response.error is None
    assert len(response.output) == 2
    assert len(response.error) == 1
Esempio n. 8
0
def test_transform_document_pipe_no_service(client: Client) -> None:
    httpretty.register_uri(
        method=httpretty.GET,
        uri="http://localhost:8761/eureka/apps/ECHO",
        status=404,
    )

    with pytest.raises(ServiceNotFoundError, match="No service named <ECHO>"):
        client.transform_document_pipe(request=TransformDocumentPipeRequest(
            document="Hello World",
            services=[PipeService(name="ECHO"),
                      PipeService(name="COUNT")],
        ))
Esempio n. 9
0
def test_rest_transform_pipe(eureka_server):
    print("start pipe test")
    config = ClientConfig("http://127.0.0.1:8761/eureka")
    client = Client(config)
    response = client.transform_document_pipe(
        TransformDocumentPipeRequest(
            document="Hello World",
            services=[
                PipeService(name="TEST1"),
                PipeService(name="TEST2"),
                PipeService(name="TEST3"),
            ],
        ))
    assert response.document == "Hello World,TEST1,TEST2,TEST3"
    assert response.last_transformer == "TEST3"
Esempio n. 10
0
    def _transform_document_pipe(
        self,
    ) -> Tuple[RawTransformDocumentPipeResponse, Status]:
        """Callback function which gets invoked by flask if a 'transform pipe' request is received.

        Returns:
            Tuple[RawTransformDocumentPipeResponse, Status]: Returns a flask response.
        """
        request = flask.request.json
        request_model = TransformDocumentPipeRequest(
            document=request["document"],
            file_name=request["file_name"],
            services=[PipeService(**info) for info in request["services"]],
        )
        response_model = self.transform_document_pipe(request_model)
        status_code = (
            Status.OK if not response_model.error else Status.INTERNAL_SERVER_ERROR
        )
        return response_model.dict(), status_code
Esempio n. 11
0
    def transform_document_pipe(
        self, request: TransformDocumentPipeRequest
    ) -> TransformDocumentPipeResponse:
        log.info("transform document pipe was called with: <%s>", request.document)
        pipe_service = request.services.pop(0)
        transform_response = self.transform_document(
            TransformDocumentRequest(
                document=request.document,
                service_name=pipe_service.name,
                file_name=request.file_name,
                options=pipe_service.options,
            )
        )
        # return a response if there are only 1 service left
        # this means that the pipe is either finished or will
        # be interupted because of an occured error
        if request.services == [] or transform_response.error:
            log.info(
                "reached end of pipe returning response: %s",
                transform_response.document,
            )
            return TransformDocumentPipeResponse(
                document=transform_response.document,
                output=transform_response.output,
                last_transformer=self.config.name,
                error=transform_response.error,
            )

        request.document = transform_response.document
        response = self.client.transform_document_pipe(request=request)

        # cancat outputs in the right order
        response.output = transform_response.output + response.output
        response.error = transform_response.error + response.error

        return response