29
29
import os
30
30
import zipfile
31
31
from tempfile import TemporaryDirectory
32
+ from unittest .mock import patch
32
33
34
+ from requests_toolbelt .multipart import decoder
33
35
from servicex_codegen import create_app
34
36
from servicex_codegen .code_generator import (GenerateCodeException ,
35
37
GeneratedFileResult )
@@ -51,7 +53,7 @@ def check_zip_file(zip_data: bytes, expected_file_count):
51
53
52
54
53
55
class TestPostOperation :
54
- def test_post_good_query (self , mocker ):
56
+ def test_post_good_query_with_params (self , mocker ):
55
57
"""Produce code for a simple good query"""
56
58
57
59
with TemporaryDirectory () as tempdir , \
@@ -68,11 +70,79 @@ def test_post_good_query(self, mocker):
68
70
}
69
71
app = create_app (config , provided_translator = mock_ast_translator )
70
72
client = app .test_client ()
73
+
74
+ print (app .config )
75
+
76
+ select_stmt = "(call ResultTTree (call Select (call SelectMany (call EventDataset (list 'localds://did_01')" # noqa: E501
77
+
78
+ response = client .post ("/servicex/generated-code" , json = {
79
+ "transformer_image" : "sslhep/servicex_func_adl_xaod_transformer" ,
80
+ "transformer_tag" : "develop" ,
81
+ "code" : select_stmt
82
+ })
83
+
84
+ boundary = str (response .data [2 :34 ], 'utf-8' )
85
+ content_type = f"multipart/form-data; boundary={ boundary } "
86
+ decoder_parts = decoder .MultipartDecoder (response .data , content_type )
87
+
88
+ transformer_image = str (decoder_parts .parts [0 ].content , 'utf-8' )
89
+ transformer_tag = str (decoder_parts .parts [1 ].content , 'utf-8' )
90
+ zip_file = decoder_parts .parts [2 ].content
91
+
92
+ print ("Transformer Image: " , transformer_image )
93
+ print ("Transformer Tag: " , transformer_tag )
94
+ print ("Zip File: " , zip_file )
95
+
96
+ assert response .status_code == 200
97
+ check_zip_file (zip_file , 2 )
98
+ # Capture the temporary directory that was generated
99
+ cache_dir = mock_ast_translator .generate_code .call_args [1 ]['cache_path' ]
100
+ mock_ast_translator .generate_code .assert_called_with (select_stmt ,
101
+ cache_path = cache_dir )
102
+
103
+ def test_post_good_query_without_params (self , mocker ):
104
+ """Produce code for a simple good query"""
105
+
106
+ with TemporaryDirectory () as tempdir , \
107
+ open (os .path .join (tempdir , "baz.txt" ), 'w' ),\
108
+ open (os .path .join (tempdir , "foo.txt" ), 'w' ):
109
+
110
+ mock_ast_translator = mocker .Mock ()
111
+ mock_ast_translator .generate_code = mocker .Mock (
112
+ return_value = GeneratedFileResult (hash = "1234" , output_dir = tempdir )
113
+ )
114
+
115
+ config = {
116
+ 'TARGET_BACKEND' : 'uproot' ,
117
+ 'DEFAULT_TRANSFORMER_IMAGE' : 'sslhep/servicex_func_adl_xaod_transformer' ,
118
+ 'DEFAULT_TRANSFORMER_TAG' : 'develop'
119
+ }
120
+
121
+ app = create_app (config , provided_translator = mock_ast_translator )
122
+ client = app .test_client ()
123
+
124
+ print (app .config )
125
+
71
126
select_stmt = "(call ResultTTree (call Select (call SelectMany (call EventDataset (list 'localds://did_01')" # noqa: E501
72
127
73
- response = client .post ("/servicex/generated-code" , data = select_stmt )
128
+ response = client .post ("/servicex/generated-code" , json = {
129
+ "code" : select_stmt
130
+ })
131
+
132
+ boundary = str (response .data [2 :34 ], 'utf-8' )
133
+ content_type = f"multipart/form-data; boundary={ boundary } "
134
+ decoder_parts = decoder .MultipartDecoder (response .data , content_type )
135
+
136
+ transformer_image = str (decoder_parts .parts [0 ].content , 'utf-8' )
137
+ transformer_tag = str (decoder_parts .parts [1 ].content , 'utf-8' )
138
+ zip_file = decoder_parts .parts [2 ].content
139
+
140
+ print ("Transformer Image: " , transformer_image )
141
+ print ("Transformer Tag: " , transformer_tag )
142
+ print ("Zip File: " , zip_file )
143
+
74
144
assert response .status_code == 200
75
- check_zip_file (response . data , 2 )
145
+ check_zip_file (zip_file , 2 )
76
146
# Capture the temporary directory that was generated
77
147
cache_dir = mock_ast_translator .generate_code .call_args [1 ]['cache_path' ]
78
148
mock_ast_translator .generate_code .assert_called_with (select_stmt ,
0 commit comments