genlayer-test 0.12.0__tar.gz → 0.13.0__tar.gz

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (50) hide show
  1. {genlayer_test-0.12.0 → genlayer_test-0.13.0}/PKG-INFO +1 -1
  2. {genlayer_test-0.12.0 → genlayer_test-0.13.0}/genlayer_test.egg-info/PKG-INFO +1 -1
  3. {genlayer_test-0.12.0 → genlayer_test-0.13.0}/gltest/direct/wasi_mock.py +49 -10
  4. {genlayer_test-0.12.0 → genlayer_test-0.13.0}/pyproject.toml +1 -1
  5. {genlayer_test-0.12.0 → genlayer_test-0.13.0}/LICENSE +0 -0
  6. {genlayer_test-0.12.0 → genlayer_test-0.13.0}/README.md +0 -0
  7. {genlayer_test-0.12.0 → genlayer_test-0.13.0}/genlayer_test.egg-info/SOURCES.txt +0 -0
  8. {genlayer_test-0.12.0 → genlayer_test-0.13.0}/genlayer_test.egg-info/dependency_links.txt +0 -0
  9. {genlayer_test-0.12.0 → genlayer_test-0.13.0}/genlayer_test.egg-info/entry_points.txt +0 -0
  10. {genlayer_test-0.12.0 → genlayer_test-0.13.0}/genlayer_test.egg-info/requires.txt +0 -0
  11. {genlayer_test-0.12.0 → genlayer_test-0.13.0}/genlayer_test.egg-info/top_level.txt +0 -0
  12. {genlayer_test-0.12.0 → genlayer_test-0.13.0}/gltest/__init__.py +0 -0
  13. {genlayer_test-0.12.0 → genlayer_test-0.13.0}/gltest/accounts.py +0 -0
  14. {genlayer_test-0.12.0 → genlayer_test-0.13.0}/gltest/artifacts/__init__.py +0 -0
  15. {genlayer_test-0.12.0 → genlayer_test-0.13.0}/gltest/artifacts/contract.py +0 -0
  16. {genlayer_test-0.12.0 → genlayer_test-0.13.0}/gltest/assertions.py +0 -0
  17. {genlayer_test-0.12.0 → genlayer_test-0.13.0}/gltest/clients.py +0 -0
  18. {genlayer_test-0.12.0 → genlayer_test-0.13.0}/gltest/contracts/__init__.py +0 -0
  19. {genlayer_test-0.12.0 → genlayer_test-0.13.0}/gltest/contracts/contract.py +0 -0
  20. {genlayer_test-0.12.0 → genlayer_test-0.13.0}/gltest/contracts/contract_factory.py +0 -0
  21. {genlayer_test-0.12.0 → genlayer_test-0.13.0}/gltest/contracts/contract_functions.py +0 -0
  22. {genlayer_test-0.12.0 → genlayer_test-0.13.0}/gltest/contracts/method_stats.py +0 -0
  23. {genlayer_test-0.12.0 → genlayer_test-0.13.0}/gltest/contracts/stats_collector.py +0 -0
  24. {genlayer_test-0.12.0 → genlayer_test-0.13.0}/gltest/contracts/utils.py +0 -0
  25. {genlayer_test-0.12.0 → genlayer_test-0.13.0}/gltest/direct/__init__.py +0 -0
  26. {genlayer_test-0.12.0 → genlayer_test-0.13.0}/gltest/direct/loader.py +0 -0
  27. {genlayer_test-0.12.0 → genlayer_test-0.13.0}/gltest/direct/pytest_plugin.py +0 -0
  28. {genlayer_test-0.12.0 → genlayer_test-0.13.0}/gltest/direct/sdk_loader.py +0 -0
  29. {genlayer_test-0.12.0 → genlayer_test-0.13.0}/gltest/direct/types.py +0 -0
  30. {genlayer_test-0.12.0 → genlayer_test-0.13.0}/gltest/direct/vm.py +0 -0
  31. {genlayer_test-0.12.0 → genlayer_test-0.13.0}/gltest/exceptions.py +0 -0
  32. {genlayer_test-0.12.0 → genlayer_test-0.13.0}/gltest/fixtures.py +0 -0
  33. {genlayer_test-0.12.0 → genlayer_test-0.13.0}/gltest/helpers/__init__.py +0 -0
  34. {genlayer_test-0.12.0 → genlayer_test-0.13.0}/gltest/helpers/fixture_snapshot.py +0 -0
  35. {genlayer_test-0.12.0 → genlayer_test-0.13.0}/gltest/helpers/take_snapshot.py +0 -0
  36. {genlayer_test-0.12.0 → genlayer_test-0.13.0}/gltest/logging.py +0 -0
  37. {genlayer_test-0.12.0 → genlayer_test-0.13.0}/gltest/types.py +0 -0
  38. {genlayer_test-0.12.0 → genlayer_test-0.13.0}/gltest/utils.py +0 -0
  39. {genlayer_test-0.12.0 → genlayer_test-0.13.0}/gltest/validators/__init__.py +0 -0
  40. {genlayer_test-0.12.0 → genlayer_test-0.13.0}/gltest/validators/validator_factory.py +0 -0
  41. {genlayer_test-0.12.0 → genlayer_test-0.13.0}/gltest_cli/config/__init__.py +0 -0
  42. {genlayer_test-0.12.0 → genlayer_test-0.13.0}/gltest_cli/config/constants.py +0 -0
  43. {genlayer_test-0.12.0 → genlayer_test-0.13.0}/gltest_cli/config/general.py +0 -0
  44. {genlayer_test-0.12.0 → genlayer_test-0.13.0}/gltest_cli/config/plugin.py +0 -0
  45. {genlayer_test-0.12.0 → genlayer_test-0.13.0}/gltest_cli/config/pytest_context.py +0 -0
  46. {genlayer_test-0.12.0 → genlayer_test-0.13.0}/gltest_cli/config/types.py +0 -0
  47. {genlayer_test-0.12.0 → genlayer_test-0.13.0}/gltest_cli/config/user.py +0 -0
  48. {genlayer_test-0.12.0 → genlayer_test-0.13.0}/gltest_cli/logging.py +0 -0
  49. {genlayer_test-0.12.0 → genlayer_test-0.13.0}/gltest_cli/main.py +0 -0
  50. {genlayer_test-0.12.0 → genlayer_test-0.13.0}/setup.cfg +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: genlayer-test
3
- Version: 0.12.0
3
+ Version: 0.13.0
4
4
  Summary: GenLayer Testing Suite
5
5
  Author: GenLayer
6
6
  License-Expression: MIT
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: genlayer-test
3
- Version: 0.12.0
3
+ Version: 0.13.0
4
4
  Summary: GenLayer Testing Suite
5
5
  Author: GenLayer
6
6
  License-Expression: MIT
@@ -102,12 +102,19 @@ def gl_call(data: bytes, /) -> int:
102
102
  if response is None:
103
103
  return 2**32 - 1
104
104
 
105
- try:
106
- from genlayer.py import calldata
107
- encoded = calldata.encode(response)
108
- except Exception as e:
109
- vm._trace(f"gl_call encode error: {e}")
110
- return 2**32 - 1
105
+ # If response is already bytes (from RunNondet), use directly
106
+ # RunNondet handles its own ResultCode prefix for sub-VM result format
107
+ if isinstance(response, bytes):
108
+ encoded = response
109
+ else:
110
+ # Regular responses (web, llm, etc) are just calldata-encoded
111
+ # The SDK's _decode_nondet expects plain {"ok": ...} format
112
+ try:
113
+ from genlayer.py import calldata
114
+ encoded = calldata.encode(response)
115
+ except Exception as e:
116
+ vm._trace(f"gl_call encode error: {e}")
117
+ return 2**32 - 1
111
118
 
112
119
  fd_counter = getattr(_local, 'fd_counter', 100)
113
120
  fd = fd_counter
@@ -148,7 +155,7 @@ def _handle_gl_call(vm: "VMContext", request: Any) -> Any:
148
155
  return {"ok": None}
149
156
 
150
157
  if "RunNondet" in request:
151
- return {"ok": None}
158
+ return _handle_run_nondet(vm, request["RunNondet"])
152
159
 
153
160
  if "GetWebsite" in request or "WebRequest" in request:
154
161
  web_data = request.get("GetWebsite") or request.get("WebRequest", {})
@@ -167,9 +174,13 @@ def _handle_web_request(vm: "VMContext", data: Any) -> Any:
167
174
  url = data.get("url", "")
168
175
  method = data.get("method", "GET")
169
176
 
170
- response = vm._match_web_mock(url, method)
171
- if response:
172
- return {"ok": response}
177
+ mock_data = vm._match_web_mock(url, method)
178
+ if mock_data:
179
+ # SDK expects {"ok": {"response": {...}}} format
180
+ # Mock stores {"response": {...}, "method": "..."}
181
+ if "response" in mock_data:
182
+ return {"ok": {"response": mock_data["response"]}}
183
+ return {"ok": mock_data}
173
184
 
174
185
  raise MockNotFoundError(f"No web mock for {method} {url}")
175
186
 
@@ -185,6 +196,34 @@ def _handle_llm_request(vm: "VMContext", data: Any) -> Any:
185
196
  raise MockNotFoundError(f"No LLM mock for prompt: {prompt[:100]}...")
186
197
 
187
198
 
199
+ def _handle_run_nondet(vm: "VMContext", data: Any) -> Any:
200
+ """Handle RunNondet request by executing the leader function directly.
201
+
202
+ In direct mode, we skip the leader/validator consensus and just run
203
+ the leader function, returning its result.
204
+ """
205
+ import cloudpickle
206
+ from genlayer.py import calldata
207
+
208
+ data_leader = data.get("data_leader")
209
+ if not data_leader:
210
+ raise ValueError("RunNondet missing data_leader")
211
+
212
+ # Unpickle and execute the leader function
213
+ # The lambda expects a stage_data argument, but in leader mode it's None
214
+ leader_fn = cloudpickle.loads(data_leader)
215
+
216
+ try:
217
+ result = leader_fn(None)
218
+ # Wrap result in Return format (code 0 + calldata)
219
+ encoded = bytes([0]) + calldata.encode(result)
220
+ return encoded
221
+ except Exception as e:
222
+ # Wrap error in UserError format (code 1 + message)
223
+ error_msg = str(e)
224
+ return bytes([1]) + error_msg.encode('utf-8')
225
+
226
+
188
227
  def patched_fdopen(fd_arg: int, mode: str = "r", *args, **kwargs):
189
228
  """Patched os.fdopen that intercepts mock file descriptors."""
190
229
  fd_buffers = getattr(_local, 'fd_buffers', {})
@@ -4,7 +4,7 @@ build-backend = "setuptools.build_meta"
4
4
 
5
5
  [project]
6
6
  name = "genlayer-test"
7
- version = "0.12.0"
7
+ version = "0.13.0"
8
8
  description = "GenLayer Testing Suite"
9
9
  authors = [
10
10
  { name = "GenLayer" }
File without changes
File without changes
File without changes