persona-dsl 26.1.20.12__tar.gz → 26.1.20.16__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.
- {persona_dsl-26.1.20.12/src/persona_dsl.egg-info → persona_dsl-26.1.20.16}/PKG-INFO +1 -1
- {persona_dsl-26.1.20.12 → persona_dsl-26.1.20.16}/pyproject.toml +1 -1
- {persona_dsl-26.1.20.12 → persona_dsl-26.1.20.16}/src/persona_dsl/expectations/web/matches_aria_snapshot.py +1 -0
- {persona_dsl-26.1.20.12 → persona_dsl-26.1.20.16}/src/persona_dsl/ops/web/generate_page_object.py +2 -2
- {persona_dsl-26.1.20.12 → persona_dsl-26.1.20.16}/src/persona_dsl/ops/web/rich_aria_snapshot.py +34 -21
- {persona_dsl-26.1.20.12 → persona_dsl-26.1.20.16/src/persona_dsl.egg-info}/PKG-INFO +1 -1
- {persona_dsl-26.1.20.12 → persona_dsl-26.1.20.16}/MANIFEST.in +0 -0
- {persona_dsl-26.1.20.12 → persona_dsl-26.1.20.16}/README.md +0 -0
- {persona_dsl-26.1.20.12 → persona_dsl-26.1.20.16}/setup.cfg +0 -0
- {persona_dsl-26.1.20.12 → persona_dsl-26.1.20.16}/src/persona_dsl/__init__.py +0 -0
- {persona_dsl-26.1.20.12 → persona_dsl-26.1.20.16}/src/persona_dsl/components/action.py +0 -0
- {persona_dsl-26.1.20.12 → persona_dsl-26.1.20.16}/src/persona_dsl/components/base_step.py +0 -0
- {persona_dsl-26.1.20.12 → persona_dsl-26.1.20.16}/src/persona_dsl/components/combined_step.py +0 -0
- {persona_dsl-26.1.20.12 → persona_dsl-26.1.20.16}/src/persona_dsl/components/expectation.py +0 -0
- {persona_dsl-26.1.20.12 → persona_dsl-26.1.20.16}/src/persona_dsl/components/fact.py +0 -0
- {persona_dsl-26.1.20.12 → persona_dsl-26.1.20.16}/src/persona_dsl/components/goal.py +0 -0
- {persona_dsl-26.1.20.12 → persona_dsl-26.1.20.16}/src/persona_dsl/components/ops.py +0 -0
- {persona_dsl-26.1.20.12 → persona_dsl-26.1.20.16}/src/persona_dsl/components/step.py +0 -0
- {persona_dsl-26.1.20.12 → persona_dsl-26.1.20.16}/src/persona_dsl/expectations/generic/__init__.py +0 -0
- {persona_dsl-26.1.20.12 → persona_dsl-26.1.20.16}/src/persona_dsl/expectations/generic/contains_item.py +0 -0
- {persona_dsl-26.1.20.12 → persona_dsl-26.1.20.16}/src/persona_dsl/expectations/generic/contains_the_text.py +0 -0
- {persona_dsl-26.1.20.12 → persona_dsl-26.1.20.16}/src/persona_dsl/expectations/generic/has_entries.py +0 -0
- {persona_dsl-26.1.20.12 → persona_dsl-26.1.20.16}/src/persona_dsl/expectations/generic/is_equal.py +0 -0
- {persona_dsl-26.1.20.12 → persona_dsl-26.1.20.16}/src/persona_dsl/expectations/generic/is_greater_than.py +0 -0
- {persona_dsl-26.1.20.12 → persona_dsl-26.1.20.16}/src/persona_dsl/expectations/generic/path_equal.py +0 -0
- {persona_dsl-26.1.20.12 → persona_dsl-26.1.20.16}/src/persona_dsl/expectations/web/__init__.py +0 -0
- {persona_dsl-26.1.20.12 → persona_dsl-26.1.20.16}/src/persona_dsl/expectations/web/is_displayed.py +0 -0
- {persona_dsl-26.1.20.12 → persona_dsl-26.1.20.16}/src/persona_dsl/expectations/web/matches_screenshot.py +0 -0
- {persona_dsl-26.1.20.12 → persona_dsl-26.1.20.16}/src/persona_dsl/generators/__init__.py +0 -0
- {persona_dsl-26.1.20.12 → persona_dsl-26.1.20.16}/src/persona_dsl/generators/api_generator.py +0 -0
- {persona_dsl-26.1.20.12 → persona_dsl-26.1.20.16}/src/persona_dsl/generators/cli.py +0 -0
- {persona_dsl-26.1.20.12 → persona_dsl-26.1.20.16}/src/persona_dsl/generators/page_generator.py +0 -0
- {persona_dsl-26.1.20.12 → persona_dsl-26.1.20.16}/src/persona_dsl/ops/api/__init__.py +0 -0
- {persona_dsl-26.1.20.12 → persona_dsl-26.1.20.16}/src/persona_dsl/ops/api/json_as.py +0 -0
- {persona_dsl-26.1.20.12 → persona_dsl-26.1.20.16}/src/persona_dsl/ops/api/json_response.py +0 -0
- {persona_dsl-26.1.20.12 → persona_dsl-26.1.20.16}/src/persona_dsl/ops/api/send_request.py +0 -0
- {persona_dsl-26.1.20.12 → persona_dsl-26.1.20.16}/src/persona_dsl/ops/db/__init__.py +0 -0
- {persona_dsl-26.1.20.12 → persona_dsl-26.1.20.16}/src/persona_dsl/ops/db/execute_sql.py +0 -0
- {persona_dsl-26.1.20.12 → persona_dsl-26.1.20.16}/src/persona_dsl/ops/db/fetch_all.py +0 -0
- {persona_dsl-26.1.20.12 → persona_dsl-26.1.20.16}/src/persona_dsl/ops/db/fetch_one.py +0 -0
- {persona_dsl-26.1.20.12 → persona_dsl-26.1.20.16}/src/persona_dsl/ops/kafka/__init__.py +0 -0
- {persona_dsl-26.1.20.12 → persona_dsl-26.1.20.16}/src/persona_dsl/ops/kafka/message_in_topic.py +0 -0
- {persona_dsl-26.1.20.12 → persona_dsl-26.1.20.16}/src/persona_dsl/ops/kafka/send_message.py +0 -0
- {persona_dsl-26.1.20.12 → persona_dsl-26.1.20.16}/src/persona_dsl/ops/soap/__init__.py +0 -0
- {persona_dsl-26.1.20.12 → persona_dsl-26.1.20.16}/src/persona_dsl/ops/soap/call_operation.py +0 -0
- {persona_dsl-26.1.20.12 → persona_dsl-26.1.20.16}/src/persona_dsl/ops/soap/operation_result.py +0 -0
- {persona_dsl-26.1.20.12 → persona_dsl-26.1.20.16}/src/persona_dsl/ops/web/__init__.py +0 -0
- {persona_dsl-26.1.20.12 → persona_dsl-26.1.20.16}/src/persona_dsl/ops/web/aria_snapshot.py +0 -0
- {persona_dsl-26.1.20.12 → persona_dsl-26.1.20.16}/src/persona_dsl/ops/web/click.py +0 -0
- {persona_dsl-26.1.20.12 → persona_dsl-26.1.20.16}/src/persona_dsl/ops/web/current_path.py +0 -0
- {persona_dsl-26.1.20.12 → persona_dsl-26.1.20.16}/src/persona_dsl/ops/web/element_attribute.py +0 -0
- {persona_dsl-26.1.20.12 → persona_dsl-26.1.20.16}/src/persona_dsl/ops/web/element_is_visible.py +0 -0
- {persona_dsl-26.1.20.12 → persona_dsl-26.1.20.16}/src/persona_dsl/ops/web/element_text.py +0 -0
- {persona_dsl-26.1.20.12 → persona_dsl-26.1.20.16}/src/persona_dsl/ops/web/elements_count.py +0 -0
- {persona_dsl-26.1.20.12 → persona_dsl-26.1.20.16}/src/persona_dsl/ops/web/fill.py +0 -0
- {persona_dsl-26.1.20.12 → persona_dsl-26.1.20.16}/src/persona_dsl/ops/web/input_value.py +0 -0
- {persona_dsl-26.1.20.12 → persona_dsl-26.1.20.16}/src/persona_dsl/ops/web/navigate.py +0 -0
- {persona_dsl-26.1.20.12 → persona_dsl-26.1.20.16}/src/persona_dsl/ops/web/press_key.py +0 -0
- {persona_dsl-26.1.20.12 → persona_dsl-26.1.20.16}/src/persona_dsl/ops/web/screenshot.py +0 -0
- {persona_dsl-26.1.20.12 → persona_dsl-26.1.20.16}/src/persona_dsl/ops/web/table_data.py +0 -0
- {persona_dsl-26.1.20.12 → persona_dsl-26.1.20.16}/src/persona_dsl/ops/web/wait_for_navigation.py +0 -0
- {persona_dsl-26.1.20.12 → persona_dsl-26.1.20.16}/src/persona_dsl/pages/__init__.py +0 -0
- {persona_dsl-26.1.20.12 → persona_dsl-26.1.20.16}/src/persona_dsl/pages/elements.py +0 -0
- {persona_dsl-26.1.20.12 → persona_dsl-26.1.20.16}/src/persona_dsl/pages/page.py +0 -0
- {persona_dsl-26.1.20.12 → persona_dsl-26.1.20.16}/src/persona_dsl/pages/virtual_page.py +0 -0
- {persona_dsl-26.1.20.12 → persona_dsl-26.1.20.16}/src/persona_dsl/persona.py +0 -0
- {persona_dsl-26.1.20.12 → persona_dsl-26.1.20.16}/src/persona_dsl/pytest_plugin.py +0 -0
- {persona_dsl-26.1.20.12 → persona_dsl-26.1.20.16}/src/persona_dsl/runtime/dist/persona_bundle.js +0 -0
- {persona_dsl-26.1.20.12 → persona_dsl-26.1.20.16}/src/persona_dsl/skills/__init__.py +0 -0
- {persona_dsl-26.1.20.12 → persona_dsl-26.1.20.16}/src/persona_dsl/skills/core/base.py +0 -0
- {persona_dsl-26.1.20.12 → persona_dsl-26.1.20.16}/src/persona_dsl/skills/core/skill_definition.py +0 -0
- {persona_dsl-26.1.20.12 → persona_dsl-26.1.20.16}/src/persona_dsl/skills/use_api.py +0 -0
- {persona_dsl-26.1.20.12 → persona_dsl-26.1.20.16}/src/persona_dsl/skills/use_browser.py +0 -0
- {persona_dsl-26.1.20.12 → persona_dsl-26.1.20.16}/src/persona_dsl/skills/use_database.py +0 -0
- {persona_dsl-26.1.20.12 → persona_dsl-26.1.20.16}/src/persona_dsl/skills/use_kafka.py +0 -0
- {persona_dsl-26.1.20.12 → persona_dsl-26.1.20.16}/src/persona_dsl/skills/use_soap.py +0 -0
- {persona_dsl-26.1.20.12 → persona_dsl-26.1.20.16}/src/persona_dsl/utils/__init__.py +0 -0
- {persona_dsl-26.1.20.12 → persona_dsl-26.1.20.16}/src/persona_dsl/utils/artifacts.py +0 -0
- {persona_dsl-26.1.20.12 → persona_dsl-26.1.20.16}/src/persona_dsl/utils/config.py +0 -0
- {persona_dsl-26.1.20.12 → persona_dsl-26.1.20.16}/src/persona_dsl/utils/data_providers.py +0 -0
- {persona_dsl-26.1.20.12 → persona_dsl-26.1.20.16}/src/persona_dsl/utils/decorators.py +0 -0
- {persona_dsl-26.1.20.12 → persona_dsl-26.1.20.16}/src/persona_dsl/utils/metrics.py +0 -0
- {persona_dsl-26.1.20.12 → persona_dsl-26.1.20.16}/src/persona_dsl/utils/naming.py +0 -0
- {persona_dsl-26.1.20.12 → persona_dsl-26.1.20.16}/src/persona_dsl/utils/path.py +0 -0
- {persona_dsl-26.1.20.12 → persona_dsl-26.1.20.16}/src/persona_dsl/utils/retry.py +0 -0
- {persona_dsl-26.1.20.12 → persona_dsl-26.1.20.16}/src/persona_dsl/utils/taas_integration.py +0 -0
- {persona_dsl-26.1.20.12 → persona_dsl-26.1.20.16}/src/persona_dsl/utils/waits.py +0 -0
- {persona_dsl-26.1.20.12 → persona_dsl-26.1.20.16}/src/persona_dsl.egg-info/SOURCES.txt +0 -0
- {persona_dsl-26.1.20.12 → persona_dsl-26.1.20.16}/src/persona_dsl.egg-info/dependency_links.txt +0 -0
- {persona_dsl-26.1.20.12 → persona_dsl-26.1.20.16}/src/persona_dsl.egg-info/entry_points.txt +0 -0
- {persona_dsl-26.1.20.12 → persona_dsl-26.1.20.16}/src/persona_dsl.egg-info/requires.txt +0 -0
- {persona_dsl-26.1.20.12 → persona_dsl-26.1.20.16}/src/persona_dsl.egg-info/top_level.txt +0 -0
|
@@ -69,6 +69,7 @@ class MatchesAriaSnapshot(Expectation):
|
|
|
69
69
|
|
|
70
70
|
def _perform(self, persona: Any, *args: Any, **kwargs: Any) -> None:
|
|
71
71
|
actual_value = args[0]
|
|
72
|
+
|
|
72
73
|
if not isinstance(actual_value, str):
|
|
73
74
|
raise TypeError(
|
|
74
75
|
f"MatchesAriaSnapshot ожидает YAML строку, получено: {type(actual_value)}"
|
{persona_dsl-26.1.20.12 → persona_dsl-26.1.20.16}/src/persona_dsl/ops/web/generate_page_object.py
RENAMED
|
@@ -80,7 +80,7 @@ class GeneratePageObject(Ops):
|
|
|
80
80
|
|
|
81
81
|
# Используем rich ARIA snapshot вместо стандартного
|
|
82
82
|
rich_snapshot_op = RichAriaSnapshot()
|
|
83
|
-
snapshot_struct = rich_snapshot_op.
|
|
83
|
+
snapshot_struct = rich_snapshot_op.get_tree(persona)
|
|
84
84
|
|
|
85
85
|
# Сохраняем ARIA снепшот на диск как YAML-строку
|
|
86
86
|
assets_dir = self.output_path.parent / "aria"
|
|
@@ -90,7 +90,7 @@ class GeneratePageObject(Ops):
|
|
|
90
90
|
snapshot_abs_path = assets_dir / snapshot_file
|
|
91
91
|
|
|
92
92
|
snapshot_yaml: str = (
|
|
93
|
-
|
|
93
|
+
RichAriaSnapshot.to_yaml(snapshot_struct) if snapshot_struct else ""
|
|
94
94
|
)
|
|
95
95
|
if snapshot_yaml:
|
|
96
96
|
snapshot_abs_path.write_text(snapshot_yaml, encoding="utf-8")
|
{persona_dsl-26.1.20.12 → persona_dsl-26.1.20.16}/src/persona_dsl/ops/web/rich_aria_snapshot.py
RENAMED
|
@@ -22,21 +22,16 @@ class RichAriaSnapshot(Ops):
|
|
|
22
22
|
def _get_step_description(self, persona: Any) -> str:
|
|
23
23
|
return f"{persona} получает богатый ARIA-снепшот страницы (через Runtime)"
|
|
24
24
|
|
|
25
|
-
def _perform(self, persona: Any, *args: Any, **kwargs: Any) ->
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
)
|
|
32
|
-
|
|
33
|
-
if not snapshot_tree:
|
|
34
|
-
raise RuntimeError(
|
|
35
|
-
"Persona Runtime не вернул JSON-дерево (getTreeForTransport). Убедитесь, что Runtime инициализирован."
|
|
36
|
-
)
|
|
25
|
+
def _perform(self, persona: Any, *args: Any, **kwargs: Any) -> str:
|
|
26
|
+
"""
|
|
27
|
+
Выполняет операцию получения снепшота.
|
|
28
|
+
Returns:
|
|
29
|
+
str: YAML-строка снепшота (как в Playwright).
|
|
30
|
+
"""
|
|
31
|
+
snapshot_tree = self.get_tree(persona)
|
|
37
32
|
|
|
38
33
|
# 2. Рендерим YAML для отчетов (визуализация)
|
|
39
|
-
snapshot_yaml = self.
|
|
34
|
+
snapshot_yaml = self.to_yaml(snapshot_tree)
|
|
40
35
|
|
|
41
36
|
try:
|
|
42
37
|
allure.attach(
|
|
@@ -47,10 +42,29 @@ class RichAriaSnapshot(Ops):
|
|
|
47
42
|
except Exception:
|
|
48
43
|
pass
|
|
49
44
|
|
|
50
|
-
|
|
45
|
+
return snapshot_yaml
|
|
46
|
+
|
|
47
|
+
def get_tree(self, persona: Any) -> Dict[str, Any] | List[Any]:
|
|
48
|
+
"""
|
|
49
|
+
Получает сырое дерево элементов (dict/list) от Persona Runtime.
|
|
50
|
+
Используется в генераторах кода.
|
|
51
|
+
"""
|
|
52
|
+
page = persona.skill(SkillId.BROWSER).page
|
|
53
|
+
|
|
54
|
+
# 1. Получаем чистое JSON-дерево от ядра
|
|
55
|
+
snapshot_tree = page.evaluate(
|
|
56
|
+
"window.__PERSONA__ && window.__PERSONA__.getTreeForTransport && window.__PERSONA__.getTreeForTransport()"
|
|
57
|
+
)
|
|
58
|
+
|
|
59
|
+
if not snapshot_tree:
|
|
60
|
+
raise RuntimeError(
|
|
61
|
+
"Persona Runtime не вернул JSON-дерево (getTreeForTransport). Убедитесь, что Runtime инициализирован."
|
|
62
|
+
)
|
|
63
|
+
|
|
51
64
|
return snapshot_tree
|
|
52
65
|
|
|
53
|
-
|
|
66
|
+
@staticmethod
|
|
67
|
+
def to_yaml(root: Dict[str, Any] | List[Any]) -> str:
|
|
54
68
|
"""
|
|
55
69
|
Преобразует JSON-дерево в читаемый структурный YAML формат.
|
|
56
70
|
Формат:
|
|
@@ -60,18 +74,17 @@ class RichAriaSnapshot(Ops):
|
|
|
60
74
|
"""
|
|
61
75
|
lines = []
|
|
62
76
|
if isinstance(root, dict):
|
|
63
|
-
lines.extend(
|
|
77
|
+
lines.extend(RichAriaSnapshot._render_node_yaml(root, indent=0))
|
|
64
78
|
elif isinstance(root, list):
|
|
65
79
|
for node in root:
|
|
66
|
-
lines.extend(
|
|
80
|
+
lines.extend(RichAriaSnapshot._render_node_yaml(node, indent=0))
|
|
67
81
|
|
|
68
82
|
return "\n".join(lines)
|
|
69
83
|
|
|
70
|
-
|
|
84
|
+
@staticmethod
|
|
85
|
+
def _render_node_yaml(node: Dict[str, Any] | str, indent: int) -> List[str]:
|
|
71
86
|
if isinstance(node, str):
|
|
72
87
|
# Текстовый узел (строка)
|
|
73
|
-
# В новом Runtime children могут быть строками? Вроде в TreeWalker мы делаем узлы для текста.
|
|
74
|
-
# Но на всякий случай.
|
|
75
88
|
return [f"{' ' * indent}- \"{node}\""]
|
|
76
89
|
|
|
77
90
|
lines = []
|
|
@@ -141,6 +154,6 @@ class RichAriaSnapshot(Ops):
|
|
|
141
154
|
|
|
142
155
|
# Рендерим детей
|
|
143
156
|
for child in children:
|
|
144
|
-
lines.extend(
|
|
157
|
+
lines.extend(RichAriaSnapshot._render_node_yaml(child, indent + 1))
|
|
145
158
|
|
|
146
159
|
return lines
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{persona_dsl-26.1.20.12 → persona_dsl-26.1.20.16}/src/persona_dsl/components/combined_step.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{persona_dsl-26.1.20.12 → persona_dsl-26.1.20.16}/src/persona_dsl/expectations/generic/__init__.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{persona_dsl-26.1.20.12 → persona_dsl-26.1.20.16}/src/persona_dsl/expectations/generic/is_equal.py
RENAMED
|
File without changes
|
|
File without changes
|
{persona_dsl-26.1.20.12 → persona_dsl-26.1.20.16}/src/persona_dsl/expectations/generic/path_equal.py
RENAMED
|
File without changes
|
{persona_dsl-26.1.20.12 → persona_dsl-26.1.20.16}/src/persona_dsl/expectations/web/__init__.py
RENAMED
|
File without changes
|
{persona_dsl-26.1.20.12 → persona_dsl-26.1.20.16}/src/persona_dsl/expectations/web/is_displayed.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
{persona_dsl-26.1.20.12 → persona_dsl-26.1.20.16}/src/persona_dsl/generators/api_generator.py
RENAMED
|
File without changes
|
|
File without changes
|
{persona_dsl-26.1.20.12 → persona_dsl-26.1.20.16}/src/persona_dsl/generators/page_generator.py
RENAMED
|
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
|
{persona_dsl-26.1.20.12 → persona_dsl-26.1.20.16}/src/persona_dsl/ops/kafka/message_in_topic.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
{persona_dsl-26.1.20.12 → persona_dsl-26.1.20.16}/src/persona_dsl/ops/soap/call_operation.py
RENAMED
|
File without changes
|
{persona_dsl-26.1.20.12 → persona_dsl-26.1.20.16}/src/persona_dsl/ops/soap/operation_result.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{persona_dsl-26.1.20.12 → persona_dsl-26.1.20.16}/src/persona_dsl/ops/web/element_attribute.py
RENAMED
|
File without changes
|
{persona_dsl-26.1.20.12 → persona_dsl-26.1.20.16}/src/persona_dsl/ops/web/element_is_visible.py
RENAMED
|
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
|
{persona_dsl-26.1.20.12 → persona_dsl-26.1.20.16}/src/persona_dsl/ops/web/wait_for_navigation.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{persona_dsl-26.1.20.12 → persona_dsl-26.1.20.16}/src/persona_dsl/runtime/dist/persona_bundle.js
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
{persona_dsl-26.1.20.12 → persona_dsl-26.1.20.16}/src/persona_dsl/skills/core/skill_definition.py
RENAMED
|
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
|
{persona_dsl-26.1.20.12 → persona_dsl-26.1.20.16}/src/persona_dsl.egg-info/dependency_links.txt
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|