sefrone-api-e2e 1.2.0__tar.gz → 1.2.2__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.
- {sefrone_api_e2e-1.2.0 → sefrone_api_e2e-1.2.2}/PKG-INFO +1 -1
- {sefrone_api_e2e-1.2.0 → sefrone_api_e2e-1.2.2}/sefrone_api_e2e/api_e2e_manager.py +62 -0
- {sefrone_api_e2e-1.2.0 → sefrone_api_e2e-1.2.2}/sefrone_api_e2e/env_patch.py +2 -0
- {sefrone_api_e2e-1.2.0 → sefrone_api_e2e-1.2.2}/sefrone_api_e2e.egg-info/PKG-INFO +1 -1
- {sefrone_api_e2e-1.2.0 → sefrone_api_e2e-1.2.2}/setup.py +1 -1
- {sefrone_api_e2e-1.2.0 → sefrone_api_e2e-1.2.2}/README.md +0 -0
- {sefrone_api_e2e-1.2.0 → sefrone_api_e2e-1.2.2}/sefrone_api_e2e/__init__.py +0 -0
- {sefrone_api_e2e-1.2.0 → sefrone_api_e2e-1.2.2}/sefrone_api_e2e/e2e/Scenarios/Auth/0_check_features.yaml +0 -0
- {sefrone_api_e2e-1.2.0 → sefrone_api_e2e-1.2.2}/sefrone_api_e2e/e2e/Scenarios/Auth/1_normal_auth_flow.yaml +0 -0
- {sefrone_api_e2e-1.2.0 → sefrone_api_e2e-1.2.2}/sefrone_api_e2e/e2e/Scenarios/Auth/2_account_endpoints.yaml +0 -0
- {sefrone_api_e2e-1.2.0 → sefrone_api_e2e-1.2.2}/sefrone_api_e2e/e2e/Scenarios/Auth/3_admin_account_endpoints.yaml +0 -0
- {sefrone_api_e2e-1.2.0 → sefrone_api_e2e-1.2.2}/sefrone_api_e2e/e2e/Scenarios/Auth/4_workspace_endpoints.yaml +0 -0
- {sefrone_api_e2e-1.2.0 → sefrone_api_e2e-1.2.2}/sefrone_api_e2e/e2e/Scenarios/Auth/5_apikey_endpoints.yaml +0 -0
- {sefrone_api_e2e-1.2.0 → sefrone_api_e2e-1.2.2}/sefrone_api_e2e/e2e/Scenarios/Auth/6_project_endpoints.yaml +0 -0
- {sefrone_api_e2e-1.2.0 → sefrone_api_e2e-1.2.2}/sefrone_api_e2e/e2e/Scenarios/Auth/7_email_2fa_flow.yaml +0 -0
- {sefrone_api_e2e-1.2.0 → sefrone_api_e2e-1.2.2}/sefrone_api_e2e/e2e_scenarios_manager.py +0 -0
- {sefrone_api_e2e-1.2.0 → sefrone_api_e2e-1.2.2}/sefrone_api_e2e/json_mock_server.py +0 -0
- {sefrone_api_e2e-1.2.0 → sefrone_api_e2e-1.2.2}/sefrone_api_e2e/runner_assets.py +0 -0
- {sefrone_api_e2e-1.2.0 → sefrone_api_e2e-1.2.2}/sefrone_api_e2e/runner_email_mock.py +0 -0
- {sefrone_api_e2e-1.2.0 → sefrone_api_e2e-1.2.2}/sefrone_api_e2e/runner_rest_api.py +0 -0
- {sefrone_api_e2e-1.2.0 → sefrone_api_e2e-1.2.2}/sefrone_api_e2e/runner_satim_mock.py +0 -0
- {sefrone_api_e2e-1.2.0 → sefrone_api_e2e-1.2.2}/sefrone_api_e2e/runner_webhook_mock.py +0 -0
- {sefrone_api_e2e-1.2.0 → sefrone_api_e2e-1.2.2}/sefrone_api_e2e/step_runner.py +0 -0
- {sefrone_api_e2e-1.2.0 → sefrone_api_e2e-1.2.2}/sefrone_api_e2e.egg-info/SOURCES.txt +0 -0
- {sefrone_api_e2e-1.2.0 → sefrone_api_e2e-1.2.2}/sefrone_api_e2e.egg-info/dependency_links.txt +0 -0
- {sefrone_api_e2e-1.2.0 → sefrone_api_e2e-1.2.2}/sefrone_api_e2e.egg-info/requires.txt +0 -0
- {sefrone_api_e2e-1.2.0 → sefrone_api_e2e-1.2.2}/sefrone_api_e2e.egg-info/top_level.txt +0 -0
- {sefrone_api_e2e-1.2.0 → sefrone_api_e2e-1.2.2}/setup.cfg +0 -0
|
@@ -396,6 +396,68 @@ class ApiE2ETestsManager:
|
|
|
396
396
|
i = close_paren + 1
|
|
397
397
|
if i < len(expr) and expr[i] == ".":
|
|
398
398
|
i += 1
|
|
399
|
+
elif prop == "where":
|
|
400
|
+
close_paren = expr.find(")", end_pos)
|
|
401
|
+
if close_paren == -1:
|
|
402
|
+
raise ValueError(f"Unclosed parenthesis in: {expr}")
|
|
403
|
+
condition_str = expr[end_pos + 1:close_paren].strip()
|
|
404
|
+
if not isinstance(val, list):
|
|
405
|
+
raise KeyError(f"Cannot call where() on {type(val).__name__}")
|
|
406
|
+
cond_operators = ["not in", ">=", "<=", ">", "<", "==", "!=", "in", "include"]
|
|
407
|
+
cond_op = None
|
|
408
|
+
cond_left = cond_right = ""
|
|
409
|
+
for cop in cond_operators:
|
|
410
|
+
if f" {cop} " in condition_str:
|
|
411
|
+
cond_op = cop
|
|
412
|
+
cond_left, cond_right = [p.strip() for p in condition_str.split(f" {cop} ", 1)]
|
|
413
|
+
break
|
|
414
|
+
if not cond_op:
|
|
415
|
+
raise ValueError(f"Unsupported where() condition: '{condition_str}'")
|
|
416
|
+
def _parse_where_literal(s):
|
|
417
|
+
if (s.startswith("'") and s.endswith("'")) or (s.startswith('"') and s.endswith('"')):
|
|
418
|
+
return s[1:-1]
|
|
419
|
+
elif re.match(r'^-?\d+\.\d+$', s):
|
|
420
|
+
return float(s)
|
|
421
|
+
elif re.match(r'^-?\d+$', s):
|
|
422
|
+
return int(s)
|
|
423
|
+
elif s.lower() == 'true':
|
|
424
|
+
return True
|
|
425
|
+
elif s.lower() == 'false':
|
|
426
|
+
return False
|
|
427
|
+
elif s.lower() == 'none':
|
|
428
|
+
return None
|
|
429
|
+
return s
|
|
430
|
+
right_literal = _parse_where_literal(cond_right)
|
|
431
|
+
filtered = []
|
|
432
|
+
for item in val:
|
|
433
|
+
if isinstance(item, dict) and cond_left in item:
|
|
434
|
+
item_val = item[cond_left]
|
|
435
|
+
match = False
|
|
436
|
+
if cond_op == "==" :
|
|
437
|
+
match = item_val == right_literal
|
|
438
|
+
elif cond_op == "!=":
|
|
439
|
+
match = item_val != right_literal
|
|
440
|
+
elif cond_op == ">":
|
|
441
|
+
match = item_val > right_literal
|
|
442
|
+
elif cond_op == "<":
|
|
443
|
+
match = item_val < right_literal
|
|
444
|
+
elif cond_op == ">=":
|
|
445
|
+
match = item_val >= right_literal
|
|
446
|
+
elif cond_op == "<=":
|
|
447
|
+
match = item_val <= right_literal
|
|
448
|
+
elif cond_op == "in":
|
|
449
|
+
match = item_val in right_literal
|
|
450
|
+
elif cond_op == "not in":
|
|
451
|
+
match = item_val not in right_literal
|
|
452
|
+
elif cond_op == "include":
|
|
453
|
+
match = right_literal in item_val
|
|
454
|
+
if match:
|
|
455
|
+
filtered.append(item)
|
|
456
|
+
val = filtered
|
|
457
|
+
current_path += f".where({condition_str})"
|
|
458
|
+
i = close_paren + 1
|
|
459
|
+
if i < len(expr) and expr[i] == ".":
|
|
460
|
+
i += 1
|
|
399
461
|
else:
|
|
400
462
|
raise ValueError(f"Unsupported function '{prop}()': {expr}")
|
|
401
463
|
elif isinstance(val, dict) and prop in val:
|
|
@@ -55,6 +55,8 @@ def apply_env_overrides(
|
|
|
55
55
|
|
|
56
56
|
for key, val in overrides.items():
|
|
57
57
|
if key not in replaced and val is not None:
|
|
58
|
+
if new_lines and not new_lines[-1].endswith("\n"):
|
|
59
|
+
new_lines[-1] += "\n"
|
|
58
60
|
new_lines.append(f"{key}={val}\n")
|
|
59
61
|
|
|
60
62
|
with open(env_file_path, "w", encoding="utf-8") as f:
|
|
@@ -5,7 +5,7 @@ with open("README.md", "r", encoding="utf-8") as fh:
|
|
|
5
5
|
|
|
6
6
|
setup(
|
|
7
7
|
name="sefrone_api_e2e",
|
|
8
|
-
version="1.2.
|
|
8
|
+
version="1.2.2",
|
|
9
9
|
author="Sefrone",
|
|
10
10
|
author_email="contact@sefrone.com",
|
|
11
11
|
description="A Python package to provide e2e testing helpers for sefrone API projects",
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{sefrone_api_e2e-1.2.0 → sefrone_api_e2e-1.2.2}/sefrone_api_e2e.egg-info/dependency_links.txt
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|