21
21
22
22
import pytest
23
23
24
- script_dir = pathlib .Path (__file__ ).parent .parent
25
- sys .path .append (os .fspath (script_dir ))
26
- sys .path .append (os .fspath (script_dir / "lib" / "python" ))
27
- from testing_tools import socket_manager # noqa: E402
28
-
29
24
if TYPE_CHECKING :
30
25
from pluggy import Result
31
26
@@ -171,7 +166,7 @@ def pytest_exception_interact(node, call, report):
171
166
collected_test = TestRunResultDict ()
172
167
collected_test [node_id ] = item_result
173
168
cwd = pathlib .Path .cwd ()
174
- execution_post (
169
+ send_execution_message (
175
170
os .fsdecode (cwd ),
176
171
"success" ,
177
172
collected_test if collected_test else None ,
@@ -295,7 +290,7 @@ def pytest_report_teststatus(report, config): # noqa: ARG001
295
290
)
296
291
collected_test = TestRunResultDict ()
297
292
collected_test [absolute_node_id ] = item_result
298
- execution_post (
293
+ send_execution_message (
299
294
os .fsdecode (cwd ),
300
295
"success" ,
301
296
collected_test if collected_test else None ,
@@ -329,7 +324,7 @@ def pytest_runtest_protocol(item, nextitem): # noqa: ARG001
329
324
)
330
325
collected_test = TestRunResultDict ()
331
326
collected_test [absolute_node_id ] = item_result
332
- execution_post (
327
+ send_execution_message (
333
328
os .fsdecode (cwd ),
334
329
"success" ,
335
330
collected_test if collected_test else None ,
@@ -405,15 +400,15 @@ def pytest_sessionfinish(session, exitstatus):
405
400
"children" : [],
406
401
"id_" : "" ,
407
402
}
408
- post_response (os .fsdecode (cwd ), error_node )
403
+ send_discovery_message (os .fsdecode (cwd ), error_node )
409
404
try :
410
405
session_node : TestNode | None = build_test_tree (session )
411
406
if not session_node :
412
407
raise VSCodePytestError (
413
408
"Something went wrong following pytest finish, \
414
409
no session node was created"
415
410
)
416
- post_response (os .fsdecode (cwd ), session_node )
411
+ send_discovery_message (os .fsdecode (cwd ), session_node )
417
412
except Exception as e :
418
413
ERRORS .append (
419
414
f"Error Occurred, traceback: { (traceback .format_exc () if e .__traceback__ else '' )} "
@@ -425,7 +420,7 @@ def pytest_sessionfinish(session, exitstatus):
425
420
"children" : [],
426
421
"id_" : "" ,
427
422
}
428
- post_response (os .fsdecode (cwd ), error_node )
423
+ send_discovery_message (os .fsdecode (cwd ), error_node )
429
424
else :
430
425
if exitstatus == 0 or exitstatus == 1 :
431
426
exitstatus_bool = "success"
@@ -435,7 +430,7 @@ def pytest_sessionfinish(session, exitstatus):
435
430
)
436
431
exitstatus_bool = "error"
437
432
438
- execution_post (
433
+ send_execution_message (
439
434
os .fsdecode (cwd ),
440
435
exitstatus_bool ,
441
436
None ,
@@ -485,7 +480,7 @@ def pytest_sessionfinish(session, exitstatus):
485
480
result = file_coverage_map ,
486
481
error = None ,
487
482
)
488
- send_post_request (payload )
483
+ send_message (payload )
489
484
490
485
491
486
def build_test_tree (session : pytest .Session ) -> TestNode :
@@ -853,8 +848,10 @@ def get_node_path(node: Any) -> pathlib.Path:
853
848
atexit .register (lambda : __writer .close () if __writer else None )
854
849
855
850
856
- def execution_post (cwd : str , status : Literal ["success" , "error" ], tests : TestRunResultDict | None ):
857
- """Sends a POST request with execution payload details.
851
+ def send_execution_message (
852
+ cwd : str , status : Literal ["success" , "error" ], tests : TestRunResultDict | None
853
+ ):
854
+ """Sends message execution payload details.
858
855
859
856
Args:
860
857
cwd (str): Current working directory.
@@ -866,10 +863,10 @@ def execution_post(cwd: str, status: Literal["success", "error"], tests: TestRun
866
863
)
867
864
if ERRORS :
868
865
payload ["error" ] = ERRORS
869
- send_post_request (payload )
866
+ send_message (payload )
870
867
871
868
872
- def post_response (cwd : str , session_node : TestNode ) -> None :
869
+ def send_discovery_message (cwd : str , session_node : TestNode ) -> None :
873
870
"""
874
871
Sends a POST request with test session details in payload.
875
872
@@ -885,7 +882,7 @@ def post_response(cwd: str, session_node: TestNode) -> None:
885
882
}
886
883
if ERRORS is not None :
887
884
payload ["error" ] = ERRORS
888
- send_post_request (payload , cls_encoder = PathEncoder )
885
+ send_message (payload , cls_encoder = PathEncoder )
889
886
890
887
891
888
class PathEncoder (json .JSONEncoder ):
@@ -897,7 +894,7 @@ def default(self, o):
897
894
return super ().default (o )
898
895
899
896
900
- def send_post_request (
897
+ def send_message (
901
898
payload : ExecutionPayloadDict | DiscoveryPayloadDict | CoveragePayloadDict ,
902
899
cls_encoder = None ,
903
900
):
@@ -922,8 +919,7 @@ def send_post_request(
922
919
923
920
if __writer is None :
924
921
try :
925
- __writer = socket_manager .PipeManager (TEST_RUN_PIPE )
926
- __writer .connect ()
922
+ __writer = open (TEST_RUN_PIPE , "wb" ) # noqa: SIM115, PTH123
927
923
except Exception as error :
928
924
error_msg = f"Error attempting to connect to extension named pipe { TEST_RUN_PIPE } [vscode-pytest]: { error } "
929
925
print (error_msg , file = sys .stderr )
@@ -941,10 +937,18 @@ def send_post_request(
941
937
"params" : payload ,
942
938
}
943
939
data = json .dumps (rpc , cls = cls_encoder )
944
-
945
940
try :
946
941
if __writer :
947
- __writer .write (data )
942
+ request = (
943
+ f"""content-length: { len (data )} \r \n content-type: application/json\r \n \r \n { data } """
944
+ )
945
+ size = 4096
946
+ encoded = request .encode ("utf-8" )
947
+ bytes_written = 0
948
+ while bytes_written < len (encoded ):
949
+ segment = encoded [bytes_written : bytes_written + size ]
950
+ bytes_written += __writer .write (segment )
951
+ __writer .flush ()
948
952
else :
949
953
print (
950
954
f"Plugin error connection error[vscode-pytest], writer is None \n [vscode-pytest] data: \n { data } \n " ,
0 commit comments