robotframework-roboview 0.0.2__tar.gz → 0.0.3__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.
- {robotframework_roboview-0.0.2 → robotframework_roboview-0.0.3}/PKG-INFO +23 -27
- {robotframework_roboview-0.0.2 → robotframework_roboview-0.0.3}/README.md +11 -11
- {robotframework_roboview-0.0.2 → robotframework_roboview-0.0.3}/pyproject.toml +18 -17
- {robotframework_roboview-0.0.2 → robotframework_roboview-0.0.3}/roboview/main.py +1 -1
- {robotframework_roboview-0.0.2 → robotframework_roboview-0.0.3}/roboview/models/robot_parsing/called_keyword_parsing.py +20 -0
- {robotframework_roboview-0.0.2 → robotframework_roboview-0.0.3}/roboview/registries/file_registry.py +1 -1
- robotframework_roboview-0.0.3/roboview/schemas/domain/common.py +42 -0
- {robotframework_roboview-0.0.2 → robotframework_roboview-0.0.3}/roboview/services/keyword_register_service.py +57 -12
- {robotframework_roboview-0.0.2 → robotframework_roboview-0.0.3}/roboview/services/keyword_similarity_service.py +74 -12
- {robotframework_roboview-0.0.2 → robotframework_roboview-0.0.3}/roboview/services/keyword_usage_service.py +1 -1
- {robotframework_roboview-0.0.2 → robotframework_roboview-0.0.3}/roboview/services/robocop_register_service.py +7 -4
- robotframework_roboview-0.0.2/roboview/schemas/domain/common.py +0 -26
- {robotframework_roboview-0.0.2 → robotframework_roboview-0.0.3}/LICENSE.txt +0 -0
- {robotframework_roboview-0.0.2 → robotframework_roboview-0.0.3}/roboview/__init__.py +0 -0
- {robotframework_roboview-0.0.2 → robotframework_roboview-0.0.3}/roboview/api/__init__.py +0 -0
- {robotframework_roboview-0.0.2 → robotframework_roboview-0.0.3}/roboview/api/endpoints/__init__.py +0 -0
- {robotframework_roboview-0.0.2 → robotframework_roboview-0.0.3}/roboview/api/endpoints/files/__init__.py +0 -0
- {robotframework_roboview-0.0.2 → robotframework_roboview-0.0.3}/roboview/api/endpoints/files/all_files.py +0 -0
- {robotframework_roboview-0.0.2 → robotframework_roboview-0.0.3}/roboview/api/endpoints/files/resource_files.py +0 -0
- {robotframework_roboview-0.0.2 → robotframework_roboview-0.0.3}/roboview/api/endpoints/files/robot_files.py +0 -0
- {robotframework_roboview-0.0.2 → robotframework_roboview-0.0.3}/roboview/api/endpoints/keyword_usage/__init__.py +0 -0
- {robotframework_roboview-0.0.2 → robotframework_roboview-0.0.3}/roboview/api/endpoints/keyword_usage/keyword_duplicates.py +0 -0
- {robotframework_roboview-0.0.2 → robotframework_roboview-0.0.3}/roboview/api/endpoints/keyword_usage/keyword_similarity.py +0 -0
- {robotframework_roboview-0.0.2 → robotframework_roboview-0.0.3}/roboview/api/endpoints/keyword_usage/keyword_usage_resource.py +0 -0
- {robotframework_roboview-0.0.2 → robotframework_roboview-0.0.3}/roboview/api/endpoints/keyword_usage/keyword_usage_robot.py +0 -0
- {robotframework_roboview-0.0.2 → robotframework_roboview-0.0.3}/roboview/api/endpoints/keyword_usage/keywords_called.py +0 -0
- {robotframework_roboview-0.0.2 → robotframework_roboview-0.0.3}/roboview/api/endpoints/keyword_usage/keywords_initialized.py +0 -0
- {robotframework_roboview-0.0.2 → robotframework_roboview-0.0.3}/roboview/api/endpoints/keyword_usage/keywords_wo_documentation.py +0 -0
- {robotframework_roboview-0.0.2 → robotframework_roboview-0.0.3}/roboview/api/endpoints/keyword_usage/keywords_wo_usages.py +0 -0
- {robotframework_roboview-0.0.2 → robotframework_roboview-0.0.3}/roboview/api/endpoints/overview/__init__.py +0 -0
- {robotframework_roboview-0.0.2 → robotframework_roboview-0.0.3}/roboview/api/endpoints/overview/kpis.py +0 -0
- {robotframework_roboview-0.0.2 → robotframework_roboview-0.0.3}/roboview/api/endpoints/overview/most_used_keywords.py +0 -0
- {robotframework_roboview-0.0.2 → robotframework_roboview-0.0.3}/roboview/api/endpoints/overview/robocop_summary.py +0 -0
- {robotframework_roboview-0.0.2 → robotframework_roboview-0.0.3}/roboview/api/endpoints/robocop/__init__.py +0 -0
- {robotframework_roboview-0.0.2 → robotframework_roboview-0.0.3}/roboview/api/endpoints/robocop/robocop_message.py +0 -0
- {robotframework_roboview-0.0.2 → robotframework_roboview-0.0.3}/roboview/api/endpoints/robocop/robocop_messages.py +0 -0
- {robotframework_roboview-0.0.2 → robotframework_roboview-0.0.3}/roboview/api/endpoints/system/__init__.py +0 -0
- {robotframework_roboview-0.0.2 → robotframework_roboview-0.0.3}/roboview/api/endpoints/system/health.py +0 -0
- {robotframework_roboview-0.0.2 → robotframework_roboview-0.0.3}/roboview/api/endpoints/system/initialize.py +0 -0
- {robotframework_roboview-0.0.2 → robotframework_roboview-0.0.3}/roboview/core/__init__.py +0 -0
- {robotframework_roboview-0.0.2 → robotframework_roboview-0.0.3}/roboview/core/config.py +0 -0
- {robotframework_roboview-0.0.2 → robotframework_roboview-0.0.3}/roboview/core/logging.py +0 -0
- {robotframework_roboview-0.0.2 → robotframework_roboview-0.0.3}/roboview/models/__init__.py +0 -0
- {robotframework_roboview-0.0.2 → robotframework_roboview-0.0.3}/roboview/models/robot_parsing/__init__.py +0 -0
- {robotframework_roboview-0.0.2 → robotframework_roboview-0.0.3}/roboview/models/robot_parsing/keyword_dependency_parsing.py +0 -0
- {robotframework_roboview-0.0.2 → robotframework_roboview-0.0.3}/roboview/models/robot_parsing/local_keyword_parsing.py +0 -0
- {robotframework_roboview-0.0.2 → robotframework_roboview-0.0.3}/roboview/models/robot_parsing/resource_dependency_parsing.py +0 -0
- {robotframework_roboview-0.0.2 → robotframework_roboview-0.0.3}/roboview/registries/__init__.py +0 -0
- {robotframework_roboview-0.0.2 → robotframework_roboview-0.0.3}/roboview/registries/keyword_registry.py +0 -0
- {robotframework_roboview-0.0.2 → robotframework_roboview-0.0.3}/roboview/registries/robocop_registry.py +0 -0
- {robotframework_roboview-0.0.2 → robotframework_roboview-0.0.3}/roboview/schemas/__init__.py +0 -0
- {robotframework_roboview-0.0.2 → robotframework_roboview-0.0.3}/roboview/schemas/domain/__init__.py +0 -0
- {robotframework_roboview-0.0.2 → robotframework_roboview-0.0.3}/roboview/schemas/domain/files.py +0 -0
- {robotframework_roboview-0.0.2 → robotframework_roboview-0.0.3}/roboview/schemas/domain/keywords.py +0 -0
- {robotframework_roboview-0.0.2 → robotframework_roboview-0.0.3}/roboview/schemas/domain/robocop.py +0 -0
- {robotframework_roboview-0.0.2 → robotframework_roboview-0.0.3}/roboview/schemas/dtos/__init__.py +0 -0
- {robotframework_roboview-0.0.2 → robotframework_roboview-0.0.3}/roboview/schemas/dtos/common.py +0 -0
- {robotframework_roboview-0.0.2 → robotframework_roboview-0.0.3}/roboview/schemas/dtos/files.py +0 -0
- {robotframework_roboview-0.0.2 → robotframework_roboview-0.0.3}/roboview/schemas/dtos/keyword_similarity.py +0 -0
- {robotframework_roboview-0.0.2 → robotframework_roboview-0.0.3}/roboview/schemas/dtos/keyword_usage.py +0 -0
- {robotframework_roboview-0.0.2 → robotframework_roboview-0.0.3}/roboview/schemas/dtos/overview.py +0 -0
- {robotframework_roboview-0.0.2 → robotframework_roboview-0.0.3}/roboview/schemas/dtos/robocop.py +0 -0
- {robotframework_roboview-0.0.2 → robotframework_roboview-0.0.3}/roboview/services/__init__.py +0 -0
- {robotframework_roboview-0.0.2 → robotframework_roboview-0.0.3}/roboview/services/file_register_service.py +0 -0
- {robotframework_roboview-0.0.2 → robotframework_roboview-0.0.3}/roboview/services/robocop_service.py +0 -0
- {robotframework_roboview-0.0.2 → robotframework_roboview-0.0.3}/roboview/utils/__init__.py +0 -0
- {robotframework_roboview-0.0.2 → robotframework_roboview-0.0.3}/roboview/utils/directory_parsing.py +0 -0
|
@@ -1,33 +1,29 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: robotframework-roboview
|
|
3
|
-
Version: 0.0.
|
|
3
|
+
Version: 0.0.3
|
|
4
4
|
Summary: RoboView is a Visual Studio Code extension designed to help you manage keywords within your Robot Framework projects and improve overall test quality through built-in Robocop integration. Its primary goal is to provide a comprehensive overview of all keywords and their relationships, making it easier to understand and maintain your test automation codebase.
|
|
5
5
|
License: Apache 2.0
|
|
6
6
|
License-File: LICENSE.txt
|
|
7
7
|
Author: viadee Unternehmensberatung AG
|
|
8
|
-
Requires-Python: >=3.10
|
|
8
|
+
Requires-Python: >=3.10,<=3.14
|
|
9
9
|
Classifier: License :: Other/Proprietary License
|
|
10
10
|
Classifier: Programming Language :: Python :: 3
|
|
11
11
|
Classifier: Programming Language :: Python :: 3.10
|
|
12
12
|
Classifier: Programming Language :: Python :: 3.11
|
|
13
13
|
Classifier: Programming Language :: Python :: 3.12
|
|
14
14
|
Classifier: Programming Language :: Python :: 3.13
|
|
15
|
+
Classifier: Programming Language :: Python :: 3.14
|
|
15
16
|
Requires-Dist: coloredlogs (>=15.0.1,<16.0.0)
|
|
16
|
-
Requires-Dist: fastapi (>=0.
|
|
17
|
+
Requires-Dist: fastapi (>=0.135.1,<0.136.0)
|
|
17
18
|
Requires-Dist: httpx (>=0.28.1,<0.29.0)
|
|
18
|
-
Requires-Dist:
|
|
19
|
-
Requires-Dist: pydantic (>=2.
|
|
20
|
-
Requires-Dist:
|
|
21
|
-
Requires-Dist:
|
|
22
|
-
Requires-Dist: robotframework (>=
|
|
23
|
-
Requires-Dist:
|
|
24
|
-
Requires-Dist:
|
|
25
|
-
Requires-Dist:
|
|
26
|
-
Requires-Dist: robotframework-robocop (>=7.2.0,<8.0.0)
|
|
27
|
-
Requires-Dist: robotframework-seleniumlibrary (>=6.8.0,<7.0.0)
|
|
28
|
-
Requires-Dist: scikit-learn (>=1.6.1,<2.0.0)
|
|
29
|
-
Requires-Dist: starlette (>=0.46.0,<0.47.0)
|
|
30
|
-
Requires-Dist: uvicorn (>=0.34.0,<0.35.0)
|
|
19
|
+
Requires-Dist: pydantic (>=2.12.5,<3.0.0)
|
|
20
|
+
Requires-Dist: pydantic-settings (>=2.13.1,<3.0.0)
|
|
21
|
+
Requires-Dist: pygments (>=2.19.2,<3.0.0)
|
|
22
|
+
Requires-Dist: robotframework (>=7.4.1,<8.0.0)
|
|
23
|
+
Requires-Dist: robotframework-robocop (>=8.2.2,<9.0.0)
|
|
24
|
+
Requires-Dist: starlette (>=0.52.1,<0.53.0)
|
|
25
|
+
Requires-Dist: typer (>=0.24.1,<0.25.0)
|
|
26
|
+
Requires-Dist: uvicorn (>=0.41.0,<0.42.0)
|
|
31
27
|
Description-Content-Type: text/markdown
|
|
32
28
|
|
|
33
29
|
# RoboView - Keyword Management in Robot Framework
|
|
@@ -41,7 +37,7 @@ RoboView is a Visual Studio Code extension designed to help you manage keywords
|
|
|
41
37
|
|
|
42
38
|
---
|
|
43
39
|
|
|
44
|
-
|
|
40
|
+
## ✨ Key Features
|
|
45
41
|
|
|
46
42
|
- 🗂️ **Workspace:** Automatically selects your current workspace project and generates comprehensive overviews.
|
|
47
43
|
- 📈 **Dashboard:** Get key performance indicators and a general overview of your robot framework project.
|
|
@@ -55,7 +51,7 @@ RoboView is a Visual Studio Code extension designed to help you manage keywords
|
|
|
55
51
|
|
|
56
52
|
---
|
|
57
53
|
|
|
58
|
-
|
|
54
|
+
## ⚙️ Installation Guide
|
|
59
55
|
|
|
60
56
|
RoboView consists of two parts: a **backend** (Python package) and a **frontend** (Visual Studio Code extension).
|
|
61
57
|
|
|
@@ -77,7 +73,7 @@ The Frontend is available as a Visual Studio Code extension on the Marketplace
|
|
|
77
73
|
|
|
78
74
|
---
|
|
79
75
|
|
|
80
|
-
|
|
76
|
+
## 🛠️ GitHub
|
|
81
77
|
|
|
82
78
|
You can find the RoboView source code and issue tracker on GitHub:
|
|
83
79
|
|
|
@@ -85,7 +81,7 @@ You can find the RoboView source code and issue tracker on GitHub:
|
|
|
85
81
|
|
|
86
82
|
---
|
|
87
83
|
|
|
88
|
-
|
|
84
|
+
## 📝 Notes and Recommendations
|
|
89
85
|
|
|
90
86
|
- For Robocop to automatically detect your configuration, name the file **`robocop.toml`**, **`robot.toml`** or integrate in **`pyproject.toml`**.
|
|
91
87
|
If you cannot change the filename in your project, you can instead set the environment variable **`ROBOCOP_CONFIG_PATH`** to the full path of your config file.
|
|
@@ -94,12 +90,12 @@ You can find the RoboView source code and issue tracker on GitHub:
|
|
|
94
90
|
|
|
95
91
|
---
|
|
96
92
|
|
|
97
|
-
|
|
93
|
+
## 🔍 How to navigate RoboView
|
|
98
94
|
|
|
99
95
|
In the following three sections, we will dive deeper into how to navigate RoboView: where to find the features and understand the terminology we use. We start with the dashboard, then look at the keyword usage overview, and finally the Robocop integration.
|
|
100
96
|
You can switch between these views using the buttons in the top-right corner of RoboView: <code>Dashboard</code>, <code>Keyword Usage</code>, and <code>Robocop</code>.
|
|
101
97
|
|
|
102
|
-
|
|
98
|
+
## 📋 1) Dashboard
|
|
103
99
|
|
|
104
100
|
The **Dashboard** gives you a high‑level overview of the selected Robot Framework project and its overall health.
|
|
105
101
|
|
|
@@ -130,7 +126,7 @@ The **KPIs** section summarizes the most important metrics of your test suite:
|
|
|
130
126
|
- **Robot Framework Files**: Total number of `.robot` and `.resource` files that were analyzed. Use the dashboard to quickly spot problematic areas (e.g. many unused keywords, low documentation coverage, or a high number of Robocop issues) and decide where to focus your refactoring or cleanup efforts first.
|
|
131
127
|
|
|
132
128
|
|
|
133
|
-
|
|
129
|
+
## 🌳 2) Keyword Overview
|
|
134
130
|
|
|
135
131
|
<p align="center" style="margin-bottom: 0.5em;">
|
|
136
132
|
<strong>Keyword Overview Layout</strong>
|
|
@@ -145,7 +141,7 @@ The **KPIs** section summarizes the most important metrics of your test suite:
|
|
|
145
141
|
|
|
146
142
|
<br>
|
|
147
143
|
|
|
148
|
-
|
|
144
|
+
### ⬅️ Left Side – Navigation & Filters
|
|
149
145
|
|
|
150
146
|
- <strong>File Selection:</strong> At the top, a dropdown lets you select a file. The current VS Code workspace is used as root, and all
|
|
151
147
|
<code>.robot</code> and <code>.resource</code> files are available.
|
|
@@ -160,7 +156,7 @@ The **KPIs** section summarizes the most important metrics of your test suite:
|
|
|
160
156
|
|
|
161
157
|
<br>
|
|
162
158
|
|
|
163
|
-
|
|
159
|
+
### 📊 Middle – Keyword List
|
|
164
160
|
|
|
165
161
|
The middle section lists all keywords found in the selected file and shows key information about each of them:
|
|
166
162
|
|
|
@@ -173,7 +169,7 @@ The middle section lists all keywords found in the selected file and shows key i
|
|
|
173
169
|
|
|
174
170
|
<br>
|
|
175
171
|
|
|
176
|
-
|
|
172
|
+
### ➡️ Right Side – Keyword Details
|
|
177
173
|
|
|
178
174
|
When you select a keyword (by clicking a row in the middle table), the right panel shows detailed information:
|
|
179
175
|
|
|
@@ -231,7 +227,7 @@ The **Robocop** view integrates the `https://robocop.readthedocs.io/` linter dir
|
|
|
231
227
|
|
|
232
228
|
---
|
|
233
229
|
|
|
234
|
-
|
|
230
|
+
## 🔮 Outlook
|
|
235
231
|
|
|
236
232
|
RoboView is an actively evolving project. ✨
|
|
237
233
|
We’re continuously adding new features, polishing existing workflows, and exploring fresh ideas to make working with Robot Framework even more enjoyable. 💡
|
|
@@ -9,7 +9,7 @@ RoboView is a Visual Studio Code extension designed to help you manage keywords
|
|
|
9
9
|
|
|
10
10
|
---
|
|
11
11
|
|
|
12
|
-
|
|
12
|
+
## ✨ Key Features
|
|
13
13
|
|
|
14
14
|
- 🗂️ **Workspace:** Automatically selects your current workspace project and generates comprehensive overviews.
|
|
15
15
|
- 📈 **Dashboard:** Get key performance indicators and a general overview of your robot framework project.
|
|
@@ -23,7 +23,7 @@ RoboView is a Visual Studio Code extension designed to help you manage keywords
|
|
|
23
23
|
|
|
24
24
|
---
|
|
25
25
|
|
|
26
|
-
|
|
26
|
+
## ⚙️ Installation Guide
|
|
27
27
|
|
|
28
28
|
RoboView consists of two parts: a **backend** (Python package) and a **frontend** (Visual Studio Code extension).
|
|
29
29
|
|
|
@@ -45,7 +45,7 @@ The Frontend is available as a Visual Studio Code extension on the Marketplace
|
|
|
45
45
|
|
|
46
46
|
---
|
|
47
47
|
|
|
48
|
-
|
|
48
|
+
## 🛠️ GitHub
|
|
49
49
|
|
|
50
50
|
You can find the RoboView source code and issue tracker on GitHub:
|
|
51
51
|
|
|
@@ -53,7 +53,7 @@ You can find the RoboView source code and issue tracker on GitHub:
|
|
|
53
53
|
|
|
54
54
|
---
|
|
55
55
|
|
|
56
|
-
|
|
56
|
+
## 📝 Notes and Recommendations
|
|
57
57
|
|
|
58
58
|
- For Robocop to automatically detect your configuration, name the file **`robocop.toml`**, **`robot.toml`** or integrate in **`pyproject.toml`**.
|
|
59
59
|
If you cannot change the filename in your project, you can instead set the environment variable **`ROBOCOP_CONFIG_PATH`** to the full path of your config file.
|
|
@@ -62,12 +62,12 @@ You can find the RoboView source code and issue tracker on GitHub:
|
|
|
62
62
|
|
|
63
63
|
---
|
|
64
64
|
|
|
65
|
-
|
|
65
|
+
## 🔍 How to navigate RoboView
|
|
66
66
|
|
|
67
67
|
In the following three sections, we will dive deeper into how to navigate RoboView: where to find the features and understand the terminology we use. We start with the dashboard, then look at the keyword usage overview, and finally the Robocop integration.
|
|
68
68
|
You can switch between these views using the buttons in the top-right corner of RoboView: <code>Dashboard</code>, <code>Keyword Usage</code>, and <code>Robocop</code>.
|
|
69
69
|
|
|
70
|
-
|
|
70
|
+
## 📋 1) Dashboard
|
|
71
71
|
|
|
72
72
|
The **Dashboard** gives you a high‑level overview of the selected Robot Framework project and its overall health.
|
|
73
73
|
|
|
@@ -98,7 +98,7 @@ The **KPIs** section summarizes the most important metrics of your test suite:
|
|
|
98
98
|
- **Robot Framework Files**: Total number of `.robot` and `.resource` files that were analyzed. Use the dashboard to quickly spot problematic areas (e.g. many unused keywords, low documentation coverage, or a high number of Robocop issues) and decide where to focus your refactoring or cleanup efforts first.
|
|
99
99
|
|
|
100
100
|
|
|
101
|
-
|
|
101
|
+
## 🌳 2) Keyword Overview
|
|
102
102
|
|
|
103
103
|
<p align="center" style="margin-bottom: 0.5em;">
|
|
104
104
|
<strong>Keyword Overview Layout</strong>
|
|
@@ -113,7 +113,7 @@ The **KPIs** section summarizes the most important metrics of your test suite:
|
|
|
113
113
|
|
|
114
114
|
<br>
|
|
115
115
|
|
|
116
|
-
|
|
116
|
+
### ⬅️ Left Side – Navigation & Filters
|
|
117
117
|
|
|
118
118
|
- <strong>File Selection:</strong> At the top, a dropdown lets you select a file. The current VS Code workspace is used as root, and all
|
|
119
119
|
<code>.robot</code> and <code>.resource</code> files are available.
|
|
@@ -128,7 +128,7 @@ The **KPIs** section summarizes the most important metrics of your test suite:
|
|
|
128
128
|
|
|
129
129
|
<br>
|
|
130
130
|
|
|
131
|
-
|
|
131
|
+
### 📊 Middle – Keyword List
|
|
132
132
|
|
|
133
133
|
The middle section lists all keywords found in the selected file and shows key information about each of them:
|
|
134
134
|
|
|
@@ -141,7 +141,7 @@ The middle section lists all keywords found in the selected file and shows key i
|
|
|
141
141
|
|
|
142
142
|
<br>
|
|
143
143
|
|
|
144
|
-
|
|
144
|
+
### ➡️ Right Side – Keyword Details
|
|
145
145
|
|
|
146
146
|
When you select a keyword (by clicking a row in the middle table), the right panel shows detailed information:
|
|
147
147
|
|
|
@@ -199,7 +199,7 @@ The **Robocop** view integrates the `https://robocop.readthedocs.io/` linter dir
|
|
|
199
199
|
|
|
200
200
|
---
|
|
201
201
|
|
|
202
|
-
|
|
202
|
+
## 🔮 Outlook
|
|
203
203
|
|
|
204
204
|
RoboView is an actively evolving project. ✨
|
|
205
205
|
We’re continuously adding new features, polishing existing workflows, and exploring fresh ideas to make working with Robot Framework even more enjoyable. 💡
|
|
@@ -1,38 +1,39 @@
|
|
|
1
1
|
[tool.poetry]
|
|
2
2
|
name = "robotframework-roboview"
|
|
3
|
-
version = "0.0.
|
|
3
|
+
version = "0.0.3"
|
|
4
4
|
description = "RoboView is a Visual Studio Code extension designed to help you manage keywords within your Robot Framework projects and improve overall test quality through built-in Robocop integration. Its primary goal is to provide a comprehensive overview of all keywords and their relationships, making it easier to understand and maintain your test automation codebase."
|
|
5
5
|
license = "Apache 2.0"
|
|
6
6
|
authors = ["viadee Unternehmensberatung AG"]
|
|
7
7
|
readme = "README.md"
|
|
8
8
|
|
|
9
9
|
packages = [
|
|
10
|
-
|
|
10
|
+
{ include = "roboview" }
|
|
11
11
|
]
|
|
12
12
|
|
|
13
13
|
[tool.poetry.dependencies]
|
|
14
|
-
python = ">=3.10
|
|
15
|
-
robotframework = "^7.
|
|
16
|
-
fastapi = "^0.
|
|
17
|
-
uvicorn = "^0.
|
|
18
|
-
pygments = "^2.19.
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
pydantic = "^2.
|
|
22
|
-
starlette = "^0.46.0"
|
|
23
|
-
pydantic-settings = "^2.12.0"
|
|
14
|
+
python = ">=3.10,<=3.14"
|
|
15
|
+
robotframework = "^7.4.1"
|
|
16
|
+
fastapi = "^0.135.1"
|
|
17
|
+
uvicorn = "^0.41.0"
|
|
18
|
+
pygments = "^2.19.2"
|
|
19
|
+
pydantic = "^2.12.5"
|
|
20
|
+
starlette = "^0.52.1"
|
|
21
|
+
pydantic-settings = "^2.13.1"
|
|
24
22
|
coloredlogs = "^15.0.1"
|
|
25
|
-
robotframework-robocop = "^
|
|
23
|
+
robotframework-robocop = "^8.2.2"
|
|
26
24
|
httpx = "^0.28.1"
|
|
27
|
-
|
|
28
|
-
robotframework-databaselibrary = "^2.4.1"
|
|
29
|
-
robotframework-crypto = "^0.4.2"
|
|
30
|
-
robotframework-seleniumlibrary = "^6.8.0"
|
|
25
|
+
typer = "^0.24.1"
|
|
31
26
|
|
|
32
27
|
[tool.poetry.group.dev.dependencies]
|
|
33
28
|
pyright = "^1.1.408"
|
|
34
29
|
pytest = "^9.0.2"
|
|
35
30
|
deptry = "^0.24.0"
|
|
31
|
+
robotframework-browser = "^19.12.5"
|
|
32
|
+
robotframework-databaselibrary = "^2.4.1"
|
|
33
|
+
robotframework-crypto = "^0.4.2"
|
|
34
|
+
robotframework-seleniumlibrary = "^6.8.0"
|
|
35
|
+
robotframework-appiumlibrary = "^3.2.1"
|
|
36
|
+
robotframework-requests = "^0.9.7"
|
|
36
37
|
|
|
37
38
|
[build-system]
|
|
38
39
|
requires = ["poetry-core"]
|
|
@@ -8,6 +8,8 @@ from robot.api.parsing import (
|
|
|
8
8
|
from robot.parsing.model.statements import (
|
|
9
9
|
KeywordCall,
|
|
10
10
|
Setup,
|
|
11
|
+
SuiteSetup,
|
|
12
|
+
SuiteTeardown,
|
|
11
13
|
Teardown,
|
|
12
14
|
TestSetup,
|
|
13
15
|
TestTeardown,
|
|
@@ -51,6 +53,24 @@ class CalledKeywordFinder(ModelVisitor):
|
|
|
51
53
|
"""
|
|
52
54
|
self._add_keyword(node.keyword)
|
|
53
55
|
|
|
56
|
+
def visit_SuiteSetup(self, node: SuiteSetup) -> None: # noqa: N802
|
|
57
|
+
"""Visit a SuiteSetup node and extract the keyword.
|
|
58
|
+
|
|
59
|
+
Arguments:
|
|
60
|
+
node (SuiteSetup): SuiteSetup node in the AST.
|
|
61
|
+
|
|
62
|
+
"""
|
|
63
|
+
self._add_keyword(node.name)
|
|
64
|
+
|
|
65
|
+
def visit_SuiteTeardown(self, node: SuiteTeardown) -> None: # noqa: N802
|
|
66
|
+
"""Visit a SuiteTeardown node and extract the keyword.
|
|
67
|
+
|
|
68
|
+
Arguments:
|
|
69
|
+
node (SuiteTeardown): SuiteTeardown node in the AST.
|
|
70
|
+
|
|
71
|
+
"""
|
|
72
|
+
self._add_keyword(node.name)
|
|
73
|
+
|
|
54
74
|
def visit_Setup(self, node: Setup) -> None: # noqa: N802
|
|
55
75
|
"""Visit a Setup node and extract the keyword.
|
|
56
76
|
|
|
@@ -0,0 +1,42 @@
|
|
|
1
|
+
"""Common domain schemas for pydantic validation."""
|
|
2
|
+
|
|
3
|
+
from enum import Enum
|
|
4
|
+
|
|
5
|
+
|
|
6
|
+
class ExternalLibraryType(Enum):
|
|
7
|
+
"""Supported external Robot Framework libraries."""
|
|
8
|
+
|
|
9
|
+
BROWSER = "Browser"
|
|
10
|
+
SELENIUM = "SeleniumLibrary"
|
|
11
|
+
DATABASE = "DatabaseLibrary"
|
|
12
|
+
APPIUM = "AppiumLibrary"
|
|
13
|
+
REQUESTS = "RequestsLibrary"
|
|
14
|
+
|
|
15
|
+
|
|
16
|
+
class BuiltinLibraryType(Enum):
|
|
17
|
+
"""Supported Robot Framework BuiltIn libraries."""
|
|
18
|
+
|
|
19
|
+
BUILTIN = "BuiltIn"
|
|
20
|
+
COLLECTIONS = "Collections"
|
|
21
|
+
DATETIME = "DateTime"
|
|
22
|
+
DIALOGS = "Dialogs"
|
|
23
|
+
OPERATINGSYSTEM = "OperatingSystem"
|
|
24
|
+
PROCESS = "Process"
|
|
25
|
+
SCREENSHOT = "Screenshot"
|
|
26
|
+
STRING = "String"
|
|
27
|
+
TELNET = "Telnet"
|
|
28
|
+
XML = "XML"
|
|
29
|
+
|
|
30
|
+
|
|
31
|
+
class FileType(Enum):
|
|
32
|
+
"""Supported Robot Framework files."""
|
|
33
|
+
|
|
34
|
+
ROBOT = "robot"
|
|
35
|
+
RESOURCE = "resource"
|
|
36
|
+
|
|
37
|
+
|
|
38
|
+
class KeywordType(Enum):
|
|
39
|
+
"""Supported Robot Framework keyword types."""
|
|
40
|
+
|
|
41
|
+
INITIALIZED = "initialized"
|
|
42
|
+
CALLED = "called"
|
|
@@ -3,12 +3,13 @@
|
|
|
3
3
|
import logging
|
|
4
4
|
from pathlib import Path
|
|
5
5
|
|
|
6
|
+
from robot.errors import DataError
|
|
6
7
|
from robot.libdocpkg import LibraryDocumentation
|
|
7
8
|
from robot.parsing import get_model, get_resource_model
|
|
8
9
|
from roboview.models.robot_parsing.keyword_dependency_parsing import KeywordDependencyFinder
|
|
9
10
|
from roboview.models.robot_parsing.local_keyword_parsing import LocalKeywordFinder
|
|
10
11
|
from roboview.registries.keyword_registry import KeywordRegistry
|
|
11
|
-
from roboview.schemas.domain.common import
|
|
12
|
+
from roboview.schemas.domain.common import BuiltinLibraryType, ExternalLibraryType, FileType
|
|
12
13
|
from roboview.schemas.domain.keywords import KeywordProperties
|
|
13
14
|
from roboview.utils.directory_parsing import DirectoryParser
|
|
14
15
|
|
|
@@ -45,16 +46,33 @@ class KeywordRegistryService:
|
|
|
45
46
|
|
|
46
47
|
This method:
|
|
47
48
|
1. Loads local keywords from .robot and .resource files
|
|
48
|
-
2. Loads
|
|
49
|
-
3.
|
|
49
|
+
2. Loads built-in library keywords (BuiltIn, Collections, DateTime, etc.)
|
|
50
|
+
3. Loads external library keywords (Browser, Selenium, Database, Appium, Requests) if installed
|
|
51
|
+
4. Populates the KeywordRegistry with all discovered keywords
|
|
50
52
|
|
|
51
53
|
"""
|
|
52
54
|
try:
|
|
55
|
+
logger.info("Register user-defined keywords")
|
|
53
56
|
self._load_local_keywords()
|
|
54
|
-
|
|
55
|
-
logger.info("Registry initialized with %d keywords", len(self.registry))
|
|
57
|
+
logger.info("Finished registering user-defined keywords")
|
|
56
58
|
except Exception:
|
|
57
|
-
logger.exception("Failed to
|
|
59
|
+
logger.exception("Failed to register keywords with user-defined keywords")
|
|
60
|
+
|
|
61
|
+
try:
|
|
62
|
+
logger.info("Register built-in library keywords")
|
|
63
|
+
self._load_builtin_library_keywords()
|
|
64
|
+
logger.info("Finished registering built-in library keywords")
|
|
65
|
+
except Exception:
|
|
66
|
+
logger.exception("Failed to register keywords with built-in keywords")
|
|
67
|
+
|
|
68
|
+
try:
|
|
69
|
+
logger.info("Register external library keywords")
|
|
70
|
+
self._load_external_library_keywords()
|
|
71
|
+
logger.info("Finished registering external library keywords")
|
|
72
|
+
except Exception:
|
|
73
|
+
logger.exception("Failed to register keywords with external keywords")
|
|
74
|
+
|
|
75
|
+
logger.info("Registry initialized with %d keywords", len(self.registry))
|
|
58
76
|
|
|
59
77
|
def _load_local_keywords(self) -> None:
|
|
60
78
|
"""Load local keywords from Robot Framework files."""
|
|
@@ -125,13 +143,37 @@ class KeywordRegistryService:
|
|
|
125
143
|
keyword_doc.called_keywords = dependency_map.get(keyword_name, [])
|
|
126
144
|
return keyword_doc
|
|
127
145
|
|
|
128
|
-
def
|
|
146
|
+
def _load_builtin_library_keywords(self) -> None:
|
|
147
|
+
libraries = [
|
|
148
|
+
BuiltinLibraryType.BUILTIN,
|
|
149
|
+
BuiltinLibraryType.COLLECTIONS,
|
|
150
|
+
BuiltinLibraryType.DATETIME,
|
|
151
|
+
BuiltinLibraryType.DIALOGS,
|
|
152
|
+
BuiltinLibraryType.OPERATINGSYSTEM,
|
|
153
|
+
BuiltinLibraryType.PROCESS,
|
|
154
|
+
BuiltinLibraryType.SCREENSHOT,
|
|
155
|
+
BuiltinLibraryType.STRING,
|
|
156
|
+
BuiltinLibraryType.TELNET,
|
|
157
|
+
BuiltinLibraryType.XML,
|
|
158
|
+
]
|
|
159
|
+
|
|
160
|
+
for library_type in libraries:
|
|
161
|
+
try:
|
|
162
|
+
keyword_doc = self._get_library_keywords(library_type)
|
|
163
|
+
for keyword in keyword_doc:
|
|
164
|
+
self.registry.register(keyword)
|
|
165
|
+
except Exception:
|
|
166
|
+
logger.exception("Failed to load library: %s", library_type.value)
|
|
167
|
+
continue
|
|
168
|
+
|
|
169
|
+
def _load_external_library_keywords(self) -> None:
|
|
129
170
|
"""Load keywords from external Robot Framework libraries."""
|
|
130
171
|
libraries = [
|
|
131
|
-
|
|
132
|
-
|
|
133
|
-
|
|
134
|
-
|
|
172
|
+
ExternalLibraryType.BROWSER,
|
|
173
|
+
ExternalLibraryType.SELENIUM,
|
|
174
|
+
ExternalLibraryType.APPIUM,
|
|
175
|
+
ExternalLibraryType.DATABASE,
|
|
176
|
+
ExternalLibraryType.REQUESTS,
|
|
135
177
|
]
|
|
136
178
|
|
|
137
179
|
for library_type in libraries:
|
|
@@ -145,7 +187,7 @@ class KeywordRegistryService:
|
|
|
145
187
|
continue
|
|
146
188
|
|
|
147
189
|
@staticmethod
|
|
148
|
-
def _get_library_keywords(library_type:
|
|
190
|
+
def _get_library_keywords(library_type: BuiltinLibraryType | ExternalLibraryType) -> list[KeywordProperties]:
|
|
149
191
|
"""Get keyword metadata for a specific library.
|
|
150
192
|
|
|
151
193
|
Arguments:
|
|
@@ -176,6 +218,9 @@ class KeywordRegistryService:
|
|
|
176
218
|
validation_str_with_prefix=str(keyword_with_prefix).lower().replace(" ", "").replace("_", ""),
|
|
177
219
|
)
|
|
178
220
|
)
|
|
221
|
+
except DataError:
|
|
222
|
+
logger.warning("Library not installed: %s will be skipped", library_type.value)
|
|
223
|
+
return []
|
|
179
224
|
|
|
180
225
|
except Exception:
|
|
181
226
|
logger.exception("Library %s could not be loaded", lib_name)
|
|
@@ -1,14 +1,13 @@
|
|
|
1
1
|
"""Functionality to cover the KeywordSimilarity."""
|
|
2
2
|
|
|
3
3
|
import logging
|
|
4
|
+
from collections import Counter
|
|
5
|
+
from math import sqrt
|
|
4
6
|
|
|
5
|
-
import numpy as np
|
|
6
7
|
from pygments import lex
|
|
7
8
|
from pygments.lexers import get_lexer_by_name
|
|
8
9
|
from roboview.registries.keyword_registry import KeywordRegistry
|
|
9
10
|
from roboview.schemas.domain.keywords import KeywordProperties, SimilarKeyword
|
|
10
|
-
from sklearn.feature_extraction.text import CountVectorizer
|
|
11
|
-
from sklearn.metrics.pairwise import cosine_similarity
|
|
12
11
|
|
|
13
12
|
logger = logging.getLogger(__name__)
|
|
14
13
|
|
|
@@ -17,7 +16,7 @@ class KeywordSimilarityService:
|
|
|
17
16
|
"""Class for calculating and querying the similarity between Keywords.
|
|
18
17
|
|
|
19
18
|
This class provides functionality to analyze keyword similarity across Robot Framework
|
|
20
|
-
files using
|
|
19
|
+
files using token frequency vectors and cosine similarity metrics. It can identify
|
|
21
20
|
similar keywords based on their source code structure and content.
|
|
22
21
|
|
|
23
22
|
Attributes:
|
|
@@ -36,10 +35,71 @@ class KeywordSimilarityService:
|
|
|
36
35
|
"""
|
|
37
36
|
self.keyword_registry = keyword_registry
|
|
38
37
|
self.keyword_names_list = []
|
|
39
|
-
self.similarity_matrix:
|
|
38
|
+
self.similarity_matrix: list[list[float]] = []
|
|
39
|
+
|
|
40
|
+
@staticmethod
|
|
41
|
+
def _calculate_cosine_similarity(
|
|
42
|
+
vector_a: Counter[str],
|
|
43
|
+
vector_b: Counter[str],
|
|
44
|
+
norm_a: float,
|
|
45
|
+
norm_b: float,
|
|
46
|
+
) -> float:
|
|
47
|
+
"""Calculate cosine similarity for two sparse token vectors.
|
|
48
|
+
|
|
49
|
+
Arguments:
|
|
50
|
+
vector_a (Counter[str]): Sparse token frequency vector for the first keyword.
|
|
51
|
+
vector_b (Counter[str]): Sparse token frequency vector for the second keyword.
|
|
52
|
+
norm_a (float): Precomputed Euclidean norm of vector_a.
|
|
53
|
+
norm_b (float): Precomputed Euclidean norm of vector_b.
|
|
54
|
+
|
|
55
|
+
Returns:
|
|
56
|
+
float: Cosine similarity score in range [0.0, 1.0]. Returns 0.0 if one
|
|
57
|
+
of the vectors has a zero norm.
|
|
58
|
+
|
|
59
|
+
"""
|
|
60
|
+
if norm_a == 0.0 or norm_b == 0.0:
|
|
61
|
+
return 0.0
|
|
62
|
+
|
|
63
|
+
if len(vector_a) > len(vector_b):
|
|
64
|
+
vector_a, vector_b = vector_b, vector_a
|
|
65
|
+
|
|
66
|
+
dot_product = sum(value * vector_b.get(token, 0) for token, value in vector_a.items())
|
|
67
|
+
return dot_product / (norm_a * norm_b)
|
|
68
|
+
|
|
69
|
+
def _build_similarity_matrix(self, tokenized_keywords: list[str]) -> list[list[float]]:
|
|
70
|
+
"""Build a full pairwise similarity matrix for tokenized keywords.
|
|
71
|
+
|
|
72
|
+
Arguments:
|
|
73
|
+
tokenized_keywords (list[str]): List of whitespace-separated token strings,
|
|
74
|
+
one entry per keyword.
|
|
75
|
+
|
|
76
|
+
Returns:
|
|
77
|
+
list[list[float]]: Symmetric cosine similarity matrix where matrix[i][j]
|
|
78
|
+
represents the similarity between keyword i and keyword j.
|
|
79
|
+
|
|
80
|
+
"""
|
|
81
|
+
token_vectors = [Counter(tokens.split()) for tokens in tokenized_keywords]
|
|
82
|
+
norms = [sqrt(sum(value * value for value in token_vector.values())) for token_vector in token_vectors]
|
|
83
|
+
|
|
84
|
+
vector_count = len(token_vectors)
|
|
85
|
+
similarity_matrix = [[0.0] * vector_count for _ in range(vector_count)]
|
|
86
|
+
|
|
87
|
+
for i in range(vector_count):
|
|
88
|
+
similarity_matrix[i][i] = 1.0
|
|
89
|
+
for j in range(i + 1, vector_count):
|
|
90
|
+
similarity = self._calculate_cosine_similarity(
|
|
91
|
+
token_vectors[i],
|
|
92
|
+
token_vectors[j],
|
|
93
|
+
norms[i],
|
|
94
|
+
norms[j],
|
|
95
|
+
)
|
|
96
|
+
similarity_matrix[i][j] = similarity
|
|
97
|
+
similarity_matrix[j][i] = similarity
|
|
98
|
+
|
|
99
|
+
return similarity_matrix
|
|
40
100
|
|
|
41
101
|
def calculate_keyword_similarity_matrix(self) -> None:
|
|
42
|
-
"""Calculate the keyword similarity matrix using
|
|
102
|
+
"""Calculate the keyword similarity matrix using token vectors and cosine similarity.
|
|
43
103
|
|
|
44
104
|
Analyzes keyword source code to compute similarity scores between all keywords
|
|
45
105
|
in the project using tokenization and vectorization techniques.
|
|
@@ -76,9 +136,7 @@ class KeywordSimilarityService:
|
|
|
76
136
|
|
|
77
137
|
# Create similarity matrix
|
|
78
138
|
try:
|
|
79
|
-
|
|
80
|
-
vectors = vectorizer.fit_transform(tokenized_keywords)
|
|
81
|
-
similarity_matrix = cosine_similarity(vectors)
|
|
139
|
+
similarity_matrix = self._build_similarity_matrix(tokenized_keywords)
|
|
82
140
|
except Exception:
|
|
83
141
|
logger.exception("Failed to create vectors or calculate similarity matrix")
|
|
84
142
|
return
|
|
@@ -123,7 +181,11 @@ class KeywordSimilarityService:
|
|
|
123
181
|
|
|
124
182
|
try:
|
|
125
183
|
similarities = self.similarity_matrix[index]
|
|
126
|
-
similar_indices =
|
|
184
|
+
similar_indices = sorted(
|
|
185
|
+
range(len(similarities)),
|
|
186
|
+
key=lambda similarity_index: similarities[similarity_index],
|
|
187
|
+
reverse=True,
|
|
188
|
+
)
|
|
127
189
|
|
|
128
190
|
similar_keywords = []
|
|
129
191
|
for i in similar_indices:
|
|
@@ -171,7 +233,7 @@ class KeywordSimilarityService:
|
|
|
171
233
|
list: List of keywords that have high similarity with at least one other keyword.
|
|
172
234
|
|
|
173
235
|
"""
|
|
174
|
-
if self.similarity_matrix
|
|
236
|
+
if not self.similarity_matrix:
|
|
175
237
|
logger.warning("Similarity matrix is empty")
|
|
176
238
|
return []
|
|
177
239
|
|
|
@@ -181,7 +243,7 @@ class KeywordSimilarityService:
|
|
|
181
243
|
|
|
182
244
|
for i in range(n):
|
|
183
245
|
for j in range(i + 1, n):
|
|
184
|
-
similarity_score = round(float(self.similarity_matrix[i
|
|
246
|
+
similarity_score = round(float(self.similarity_matrix[i][j]), 4)
|
|
185
247
|
if similarity_score >= threshold:
|
|
186
248
|
similar_keyword_indices.add(i)
|
|
187
249
|
similar_keyword_indices.add(j)
|
|
@@ -410,7 +410,7 @@ class KeywordUsageService:
|
|
|
410
410
|
"""Get called keywords for a Robot Framework file.
|
|
411
411
|
|
|
412
412
|
Arguments:
|
|
413
|
-
file_path (str): Path of the file to fetch
|
|
413
|
+
file_path (str): Path of the file to fetch called keywords from.
|
|
414
414
|
|
|
415
415
|
Returns:
|
|
416
416
|
list: List of called keywords for the target file.
|
|
@@ -7,8 +7,10 @@ from contextlib import redirect_stderr, redirect_stdout
|
|
|
7
7
|
from pathlib import Path
|
|
8
8
|
|
|
9
9
|
import click
|
|
10
|
-
from robocop.config import
|
|
10
|
+
from robocop.config.manager import ConfigManager
|
|
11
|
+
from robocop.linter.fix import FixApplier
|
|
11
12
|
from robocop.linter.runner import RobocopLinter
|
|
13
|
+
from robocop.source_file import SourceFile
|
|
12
14
|
from roboview.registries.robocop_registry import RobocopRegistry
|
|
13
15
|
from roboview.schemas.domain.robocop import RobocopMessage, RuleCategory
|
|
14
16
|
from roboview.utils.directory_parsing import DirectoryParser
|
|
@@ -73,7 +75,7 @@ class RobocopRegistryService:
|
|
|
73
75
|
diagnostics = linter.diagnostics
|
|
74
76
|
if diagnostics:
|
|
75
77
|
for error in diagnostics:
|
|
76
|
-
rf_script_path = Path(error.source)
|
|
78
|
+
rf_script_path = Path(error.source.path)
|
|
77
79
|
self.robocop_registry.register(
|
|
78
80
|
RobocopMessage(
|
|
79
81
|
rule_id=self._extract_rule_id(str(error.rule)),
|
|
@@ -105,11 +107,12 @@ class RobocopRegistryService:
|
|
|
105
107
|
files = robot_files + resources_files
|
|
106
108
|
|
|
107
109
|
try:
|
|
108
|
-
config =
|
|
110
|
+
config = ConfigManager().default_config
|
|
109
111
|
linter = RobocopLinter(ConfigManager())
|
|
110
112
|
|
|
111
113
|
for file in files:
|
|
112
|
-
|
|
114
|
+
source_file = SourceFile(path=file, config=config)
|
|
115
|
+
diagnostics = linter.get_model_diagnostics(source_file, FixApplier())
|
|
113
116
|
|
|
114
117
|
if diagnostics:
|
|
115
118
|
for error in diagnostics:
|
|
@@ -1,26 +0,0 @@
|
|
|
1
|
-
"""Common domain schemas for pydantic validation."""
|
|
2
|
-
|
|
3
|
-
from enum import Enum
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
class LibraryType(Enum):
|
|
7
|
-
"""Supported Robot Framework libraries."""
|
|
8
|
-
|
|
9
|
-
BROWSER = "Browser"
|
|
10
|
-
SELENIUM = "SeleniumLibrary"
|
|
11
|
-
BUILTIN = "BuiltIn"
|
|
12
|
-
DATABASE = "DatabaseLibrary"
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
class FileType(Enum):
|
|
16
|
-
"""Supported Robot Framework files."""
|
|
17
|
-
|
|
18
|
-
ROBOT = "robot"
|
|
19
|
-
RESOURCE = "resource"
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
class KeywordType(Enum):
|
|
23
|
-
"""Supported Robot Framework keyword types."""
|
|
24
|
-
|
|
25
|
-
INITIALIZED = "initialized"
|
|
26
|
-
CALLED = "called"
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{robotframework_roboview-0.0.2 → robotframework_roboview-0.0.3}/roboview/api/endpoints/__init__.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
|
|
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
|
{robotframework_roboview-0.0.2 → robotframework_roboview-0.0.3}/roboview/registries/__init__.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
{robotframework_roboview-0.0.2 → robotframework_roboview-0.0.3}/roboview/schemas/__init__.py
RENAMED
|
File without changes
|
{robotframework_roboview-0.0.2 → robotframework_roboview-0.0.3}/roboview/schemas/domain/__init__.py
RENAMED
|
File without changes
|
{robotframework_roboview-0.0.2 → robotframework_roboview-0.0.3}/roboview/schemas/domain/files.py
RENAMED
|
File without changes
|
{robotframework_roboview-0.0.2 → robotframework_roboview-0.0.3}/roboview/schemas/domain/keywords.py
RENAMED
|
File without changes
|
{robotframework_roboview-0.0.2 → robotframework_roboview-0.0.3}/roboview/schemas/domain/robocop.py
RENAMED
|
File without changes
|
{robotframework_roboview-0.0.2 → robotframework_roboview-0.0.3}/roboview/schemas/dtos/__init__.py
RENAMED
|
File without changes
|
{robotframework_roboview-0.0.2 → robotframework_roboview-0.0.3}/roboview/schemas/dtos/common.py
RENAMED
|
File without changes
|
{robotframework_roboview-0.0.2 → robotframework_roboview-0.0.3}/roboview/schemas/dtos/files.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
{robotframework_roboview-0.0.2 → robotframework_roboview-0.0.3}/roboview/schemas/dtos/overview.py
RENAMED
|
File without changes
|
{robotframework_roboview-0.0.2 → robotframework_roboview-0.0.3}/roboview/schemas/dtos/robocop.py
RENAMED
|
File without changes
|
{robotframework_roboview-0.0.2 → robotframework_roboview-0.0.3}/roboview/services/__init__.py
RENAMED
|
File without changes
|
|
File without changes
|
{robotframework_roboview-0.0.2 → robotframework_roboview-0.0.3}/roboview/services/robocop_service.py
RENAMED
|
File without changes
|
|
File without changes
|
{robotframework_roboview-0.0.2 → robotframework_roboview-0.0.3}/roboview/utils/directory_parsing.py
RENAMED
|
File without changes
|