cucu 1.3.15__py3-none-any.whl → 1.3.17__py3-none-any.whl
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.
Potentially problematic release.
This version of cucu might be problematic. Click here for more details.
- cucu/cli/core.py +15 -36
- cucu/db.py +96 -42
- cucu/environment.py +13 -15
- cucu/formatter/rundb.py +4 -6
- cucu/reporter/html.py +265 -453
- cucu/reporter/templates/feature.html +2 -2
- cucu/reporter/templates/flat.html +7 -7
- cucu/reporter/templates/index.html +18 -18
- cucu/reporter/templates/scenario.html +34 -34
- cucu/steps/browser_steps.py +1 -1
- cucu/utils.py +55 -13
- {cucu-1.3.15.dist-info → cucu-1.3.17.dist-info}/METADATA +1 -1
- {cucu-1.3.15.dist-info → cucu-1.3.17.dist-info}/RECORD +15 -15
- {cucu-1.3.15.dist-info → cucu-1.3.17.dist-info}/WHEEL +0 -0
- {cucu-1.3.15.dist-info → cucu-1.3.17.dist-info}/entry_points.txt +0 -0
|
@@ -10,7 +10,7 @@
|
|
|
10
10
|
<a class="nav-link" href="index.html" title="go to index report">Index</a>
|
|
11
11
|
</li>
|
|
12
12
|
<li class="align-middle">
|
|
13
|
-
<div style="padding: 8px">
|
|
13
|
+
<div style="padding: 8px">Start at {{ feature['start_at'] }} for {{ '{:.1f}'.format(feature['duration'] | float) }}s</div>
|
|
14
14
|
</li>
|
|
15
15
|
</ul>
|
|
16
16
|
</div>
|
|
@@ -60,7 +60,7 @@
|
|
|
60
60
|
</td>
|
|
61
61
|
<td class="text-center">{{ scenario['total_steps'] }}</td>
|
|
62
62
|
<td class="text-center"><span class="status-{{ scenario['status'] }}">{{ scenario['status'] }}</span></td>
|
|
63
|
-
<td class="text-center">{{ scenario['duration'] }}</td>
|
|
63
|
+
<td class="text-center">{{ '{:.1f}'.format(scenario['duration'] | float) }}</td>
|
|
64
64
|
</tr>
|
|
65
65
|
{% endif %}
|
|
66
66
|
{% endfor %}
|
|
@@ -17,25 +17,25 @@
|
|
|
17
17
|
<table class="table table-hover datatable">
|
|
18
18
|
<thead>
|
|
19
19
|
<tr class="align-text-top">
|
|
20
|
-
<th class="text-center">
|
|
21
|
-
<th>Features<br/>{{ grand_totals['
|
|
22
|
-
<th>Scenarios<br/>{{ grand_totals['
|
|
23
|
-
<th class="text-center">Steps<br/>{{ grand_totals['
|
|
20
|
+
<th class="text-center">Start at</th>
|
|
21
|
+
<th>Features<br/>{{ grand_totals['features'] | int }}</th>
|
|
22
|
+
<th>Scenarios<br/>{{ grand_totals['scenarios'] | int }}</th>
|
|
23
|
+
<th class="text-center">Steps<br/>{{ grand_totals['steps'] | int }}</th>
|
|
24
24
|
<th class="text-center">Status</th>
|
|
25
25
|
<th class="text-center">Duration<br/>{{ grand_totals['duration'] | int }}s</th>
|
|
26
26
|
</tr>
|
|
27
27
|
</thead>
|
|
28
28
|
{% for feature in features %}
|
|
29
|
-
{% for scenario in feature["
|
|
29
|
+
{% for scenario in feature["scenarios"] %}
|
|
30
30
|
<!--- ignore Backgrounds for the time being -->
|
|
31
31
|
{% if scenario['keyword'] != 'Background' %}
|
|
32
32
|
<tr>
|
|
33
|
-
<td class="text-center">{{ scenario['
|
|
33
|
+
<td class="text-center">{{ scenario['start_at'] }}</td>
|
|
34
34
|
<td><a href="{{ urlencode(escape(feature['name'])) }}.html"><span>{{ escape(feature['name']) }}</span></a><br>{{ feature['tags'] }}</td>
|
|
35
35
|
<td><a href="{{ urlencode(escape(feature['folder_name'])) }}/{{ urlencode(escape(scenario['folder_name'])) }}/index.html"><span>{{ escape(scenario['name']) }}</span></a><br>{{ scenario['tags'] }}</td>
|
|
36
36
|
<td class="text-center">{{ scenario['total_steps'] }}</td>
|
|
37
37
|
<td class="text-center"><span class="status-{{ scenario['status'] }}">{{ scenario['status'] }}</span></td>
|
|
38
|
-
<td class="text-center">{{ scenario['duration'] }}</td>
|
|
38
|
+
<td class="text-center">{{ '{:.1f}'.format(scenario['duration'] | float) }}</td>
|
|
39
39
|
</tr>
|
|
40
40
|
{% endif %}
|
|
41
41
|
{% endfor %}
|
|
@@ -17,28 +17,28 @@
|
|
|
17
17
|
<table class="table table-hover datatable">
|
|
18
18
|
<thead>
|
|
19
19
|
<tr class="align-text-top">
|
|
20
|
-
<th class="text-center">
|
|
21
|
-
<th>Features<br/>{{ grand_totals['
|
|
22
|
-
<th class="text-center">Scenarios<br/>{{ grand_totals['
|
|
23
|
-
<th class="text-center">Passed<br/>{{ grand_totals['
|
|
24
|
-
<th class="text-center">Failed<br/>{{ grand_totals['
|
|
25
|
-
<th class="text-center">Skipped<br/>{{ grand_totals['
|
|
26
|
-
<th class="text-center">Errored<br/>{{ grand_totals['
|
|
20
|
+
<th class="text-center">Start at</th>
|
|
21
|
+
<th>Features<br/>{{ grand_totals['features'] | int }}</th>
|
|
22
|
+
<th class="text-center">Scenarios<br/>{{ grand_totals['scenarios'] | int }}</th>
|
|
23
|
+
<th class="text-center">Passed<br/>{{ grand_totals['passed'] | int}}</th>
|
|
24
|
+
<th class="text-center">Failed<br/>{{ grand_totals['failed'] | int }}</th>
|
|
25
|
+
<th class="text-center">Skipped<br/>{{ grand_totals['skipped'] | int }}</th>
|
|
26
|
+
<th class="text-center">Errored<br/>{{ grand_totals['errored'] | int }}</th>
|
|
27
27
|
<th class="text-center">Status<br/> </th>
|
|
28
|
-
<th class="text-center">Duration<br/>{{ grand_totals['duration'] |
|
|
28
|
+
<th class="text-center">Duration<br/>{{ '{:.1f}'.format(grand_totals['duration'] | float) }}s</th>
|
|
29
29
|
</tr>
|
|
30
30
|
</thead>
|
|
31
|
-
{% for
|
|
31
|
+
{% for feature_stat in feature_stats %}
|
|
32
32
|
<tr>
|
|
33
|
-
<td class="text-center">{{
|
|
34
|
-
<td><a href="{{ urlencode(escape(
|
|
35
|
-
<td class="text-center">{{
|
|
36
|
-
<td class="text-center">{{
|
|
37
|
-
<td class="text-center">{{
|
|
38
|
-
<td class="text-center">{{
|
|
39
|
-
<td class="text-center">{{
|
|
40
|
-
<td class="text-center"><span class="status-{{
|
|
41
|
-
<td class="text-center">{{ '{:.1f}'.format(
|
|
33
|
+
<td class="text-center">{{ feature_stat['start_at'] }}</td>
|
|
34
|
+
<td><a href="{{ urlencode(escape(feature_stat['feature_name'])) }}.html">{{ escape(feature_stat['feature_name']) }}</a></td>
|
|
35
|
+
<td class="text-center">{{ feature_stat['scenarios'] }}</td>
|
|
36
|
+
<td class="text-center">{{ feature_stat['passed'] }}</td>
|
|
37
|
+
<td class="text-center">{{ feature_stat['failed'] }}</td>
|
|
38
|
+
<td class="text-center">{{ feature_stat['skipped'] }}</td>
|
|
39
|
+
<td class="text-center">{{ feature_stat['errored'] }}</td>
|
|
40
|
+
<td class="text-center"><span class="status-{{ feature_stat['status'] }}">{{ feature_stat['status'] }}</span></td>
|
|
41
|
+
<td class="text-center">{{ '{:.1f}'.format(feature_stat['duration'] | float ) }}</td>
|
|
42
42
|
</tr>
|
|
43
43
|
{% endfor %}
|
|
44
44
|
</table>
|
|
@@ -35,7 +35,7 @@
|
|
|
35
35
|
<button class="btn btn-md btn-light" title="scroll to bottom" onclick="window.scrollTo({ top: document.body.scrollHeight, behavior: 'smooth' });" class="nav-link">⬇️ </button>
|
|
36
36
|
</li>
|
|
37
37
|
<li class="align-middle">
|
|
38
|
-
<div style="padding: 8px">
|
|
38
|
+
<div style="padding: 8px">Start at {{ scenario["start_at"] }} for {{ '{:.1f}'.format(scenario['duration'] | float) }}s</div>
|
|
39
39
|
</li>
|
|
40
40
|
</ul>
|
|
41
41
|
</div>
|
|
@@ -80,19 +80,19 @@
|
|
|
80
80
|
</tr>
|
|
81
81
|
{% for step in steps %}
|
|
82
82
|
{% set step_name = step['keyword'] + ' ' + escape(step['name']) %}
|
|
83
|
-
{% if step['
|
|
83
|
+
{% if step['is_substep'] %}
|
|
84
84
|
{% set step_prefix = " ⤷" %}
|
|
85
85
|
{% else %}
|
|
86
86
|
{% set step_prefix = "" %}
|
|
87
87
|
{% endif %}
|
|
88
|
-
{% if step
|
|
89
|
-
{% set step_status = step['
|
|
90
|
-
{% if step['
|
|
88
|
+
{% if step is defined %}
|
|
89
|
+
{% set step_status = step['status'] %}
|
|
90
|
+
{% if step['status'] == 'skipped' %}
|
|
91
91
|
{% set step_status = 'untested' %}
|
|
92
92
|
{% endif %}
|
|
93
|
-
{% if step['
|
|
94
|
-
{% set step_timing = "{} for {:.3f}s".format(step["
|
|
95
|
-
{% set step_start = step["
|
|
93
|
+
{% if step['status'] in ('failed', 'passed') and step["timestamp"] %}
|
|
94
|
+
{% set step_timing = "{} for {:.3f}s".format(step["timestamp"].strftime("%H:%M:%S"), step["duration"]) %}
|
|
95
|
+
{% set step_start = step["timestamp"] %}
|
|
96
96
|
{% endif %}
|
|
97
97
|
{% else %}
|
|
98
98
|
{% set step_status = 'untested' %}
|
|
@@ -115,65 +115,65 @@
|
|
|
115
115
|
<a class="anchor" id="step_{{ loop.index}}" href="#step_{{ loop.index }}">🔗</a>
|
|
116
116
|
<pre class="status-{{ step_status }}">{{ step_keyword }}</pre><span style="display: contents;" title="{{ escape(step['name']) }}"> {{ escape(step['name']) }}</span>
|
|
117
117
|
</td>
|
|
118
|
-
<td style="min-width: 0; text-align: right;" class="col-2"><pre style="display: inline; color: gray;" title="{{
|
|
118
|
+
<td style="min-width: 0; text-align: right;" class="col-2"><pre style="display: inline; color: gray;" title="{{ step['start_at'] }}">{{ step_timing }}</pre></td>
|
|
119
119
|
</tr>
|
|
120
120
|
{% endif %}
|
|
121
121
|
|
|
122
|
-
{% if step['text'] or step['
|
|
122
|
+
{% if step['text'] or step['table_data'] %}
|
|
123
123
|
<tr class="row"><td style="min-width: 0;" class="col-12" colspan="2">
|
|
124
124
|
{% if step['text'] %}
|
|
125
|
-
<pre style="margin: 0;">{{ escape(step['text']) }}</pre>
|
|
125
|
+
<pre style="margin: 0;">{{ escape(step_text_list_to_html(step['text'])) }}</pre>
|
|
126
126
|
{% endif %}
|
|
127
|
-
{% if step['
|
|
128
|
-
<pre style="margin: 0;">{{ escape(step['
|
|
127
|
+
{% if step['table_data'] %}
|
|
128
|
+
<pre style="margin: 0;">{{ escape(step_table_to_html(step['table_data'])) }}</pre>
|
|
129
129
|
{% endif %}
|
|
130
130
|
</td></tr>
|
|
131
131
|
{% endif %}
|
|
132
132
|
|
|
133
|
-
{% if step
|
|
133
|
+
{% if step is defined %}
|
|
134
134
|
<tr class="row"><td style="min-width: 0;" class="col-12 collapse multi-collapse" id="collapsable-row-{{ loop.index }}" colspan="2">
|
|
135
135
|
|
|
136
|
-
{% if step['
|
|
136
|
+
{% if step['stdout'] %}
|
|
137
137
|
<details open>
|
|
138
|
-
<summary style="color: dimgray;">stdout ({{ step['
|
|
139
|
-
<pre style="color: darkgray;">{{ escape("\n".join(step['
|
|
138
|
+
<summary style="color: dimgray;">stdout ({{ step['stdout']|length }} lines)</summary>
|
|
139
|
+
<pre style="color: darkgray;">{{ escape("\n".join(step['stdout'])) }}</pre>
|
|
140
140
|
</details>
|
|
141
141
|
{% endif %}
|
|
142
|
-
{% if step['
|
|
142
|
+
{% if step['stderr'] %}
|
|
143
143
|
<details open>
|
|
144
|
-
<summary style="color: dimgray;">stderr ({{ step['
|
|
145
|
-
<pre style="color: darkgray;">{{ escape("\n".join(step['
|
|
144
|
+
<summary style="color: dimgray;">stderr ({{ step['stderr']|length }} lines)</summary>
|
|
145
|
+
<pre style="color: darkgray;">{{ escape("\n".join(step['stderr'])) }}</pre>
|
|
146
146
|
</details>
|
|
147
147
|
{% endif %}
|
|
148
|
-
{% if step['
|
|
148
|
+
{% if step['screenshots'] %}
|
|
149
149
|
<details open>
|
|
150
|
-
<summary style="color: dimgray;">images ({{ step['
|
|
150
|
+
<summary style="color: dimgray;">images ({{ step['screenshots']|length }} images)</summary>
|
|
151
151
|
<div style="margin: 10px 0 0 0;">
|
|
152
|
-
{% for image in step['
|
|
153
|
-
<img class="mx-auto d-block img-fluid shadow bg-white rounded" id=
|
|
152
|
+
{% for image in step['screenshots'] %}
|
|
153
|
+
<img class="mx-auto d-block img-fluid shadow bg-white rounded" id="{{ image['html_id'] }}" style="margin-bottom:15px" alt="{{ escape(image['label']) }}" title="{{ escape(image['label']) }}" src="{{ image['html_src'] }}"></img>
|
|
154
154
|
{% if image['highlight'] %}
|
|
155
|
-
<div class="step-image-highlight" id=
|
|
155
|
+
<div class="step-image-highlight" id="{{ image['id']}}-highlight" height-ratio="{{ image['highlight']['height_ratio'] }}" width-ratio="{{ image['highlight']['width_ratio'] }}" top-ratio="{{ image['highlight']['top_ratio'] }}" left-ratio="{{ image['highlight']['left_ratio'] }}"></div>
|
|
156
156
|
{% endif %}
|
|
157
157
|
{% endfor %}
|
|
158
158
|
</div>
|
|
159
159
|
</details>
|
|
160
160
|
{% endif %}
|
|
161
|
-
{% if step['
|
|
161
|
+
{% if step['error_message'] %}
|
|
162
162
|
<details open>
|
|
163
|
-
<summary style="color: dimgray;">error message ({{ step['
|
|
164
|
-
<pre style="color: darkgray;">{
|
|
163
|
+
<summary style="color: dimgray;">error message ({{ step['error_message']|length }} lines)</summary>
|
|
164
|
+
<pre style="color: darkgray;">{% for entry in step['error_message'] %}{{ entry }}<br/>{% endfor %}</pre>
|
|
165
165
|
</details>
|
|
166
166
|
{% endif %}
|
|
167
|
-
{% if step['
|
|
167
|
+
{% if step['browser_logs'] %}
|
|
168
168
|
<details open>
|
|
169
|
-
<summary style="color: dimgray;">browser logs ({{ step['
|
|
170
|
-
<pre style="color: darkgray;">{
|
|
169
|
+
<summary style="color: dimgray;">browser logs ({{ step['browser_logs']|length }} entries)</summary>
|
|
170
|
+
<pre style="color: darkgray;">{% for entry in step['browser_logs'] %}{{ browser_timestamp_to_datetime(entry['timestamp']) }} {{ entry['level'] }} {{ entry['source']}}: {{ entry['message'] }}<br/>{% endfor %}</pre>
|
|
171
171
|
</details>
|
|
172
172
|
{% endif %}
|
|
173
|
-
{% if step['
|
|
173
|
+
{% if step['debug_output'] %}
|
|
174
174
|
<details open>
|
|
175
|
-
<summary style="color: dimgray;">debug output ({{ step['
|
|
176
|
-
<pre style="color: darkgray;">{{ escape("\n".join(step['
|
|
175
|
+
<summary style="color: dimgray;">debug output ({{ step['debug_output']|length }} lines)</summary>
|
|
176
|
+
<pre style="color: darkgray;">{{ escape("\n".join(step['debug_output'])) }}</pre>
|
|
177
177
|
</details>
|
|
178
178
|
{% endif %}
|
|
179
179
|
|
cucu/steps/browser_steps.py
CHANGED
|
@@ -67,7 +67,7 @@ def execute_javascript_and_save(ctx, variable):
|
|
|
67
67
|
def assert_url_is(ctx, value):
|
|
68
68
|
ctx.check_browser_initialized()
|
|
69
69
|
url = ctx.browser.get_current_url()
|
|
70
|
-
if value
|
|
70
|
+
if value != url:
|
|
71
71
|
raise RuntimeError(f"current url is {url}, not {value}")
|
|
72
72
|
|
|
73
73
|
|
cucu/utils.py
CHANGED
|
@@ -9,6 +9,8 @@ import os
|
|
|
9
9
|
import pkgutil
|
|
10
10
|
import shutil
|
|
11
11
|
import time
|
|
12
|
+
from datetime import datetime
|
|
13
|
+
from pathlib import Path
|
|
12
14
|
|
|
13
15
|
import humanize
|
|
14
16
|
from selenium.webdriver.common.by import By
|
|
@@ -246,19 +248,13 @@ def take_screenshot(ctx, step_name, label="", element=None):
|
|
|
246
248
|
|
|
247
249
|
if len(label) > 0:
|
|
248
250
|
label = CONFIG.hide_secrets(label).replace("/", "_")
|
|
251
|
+
|
|
249
252
|
filename = f"{CONFIG['__STEP_SCREENSHOT_COUNT']:0>4} - {label}.png"
|
|
250
253
|
filename = ellipsize_filename(filename)
|
|
251
254
|
filepath = os.path.join(screenshot_dir, filename)
|
|
252
255
|
|
|
253
256
|
ctx.browser.screenshot(filepath)
|
|
254
|
-
|
|
255
|
-
"x": None,
|
|
256
|
-
"y": None,
|
|
257
|
-
"height": None,
|
|
258
|
-
"width": None,
|
|
259
|
-
}
|
|
260
|
-
if element:
|
|
261
|
-
element_info.update(element.rect)
|
|
257
|
+
|
|
262
258
|
# driver.get_window_size returns the size of the window the OS draws for
|
|
263
259
|
# the browser, not the window the browser uses to display the DOM.
|
|
264
260
|
# If we go through JavaScript, we ignore the height of the adress bar
|
|
@@ -273,14 +269,42 @@ def take_screenshot(ctx, step_name, label="", element=None):
|
|
|
273
269
|
};
|
|
274
270
|
return getDimensionsOfCurrentWindow();
|
|
275
271
|
"""
|
|
276
|
-
|
|
272
|
+
size = ctx.browser.execute(script)
|
|
273
|
+
|
|
274
|
+
location = {
|
|
275
|
+
"x": None,
|
|
276
|
+
"y": None,
|
|
277
|
+
"height": None,
|
|
278
|
+
"width": None,
|
|
279
|
+
}
|
|
280
|
+
highlight = {}
|
|
281
|
+
if element:
|
|
282
|
+
location.update(element.rect)
|
|
283
|
+
highlight = {
|
|
284
|
+
"height_ratio": location["height"] / size["height"],
|
|
285
|
+
"width_ratio": location["width"] / size["width"],
|
|
286
|
+
"top_ratio": location["y"] / size["height"],
|
|
287
|
+
"left_ratio": location["x"] / size["width"],
|
|
288
|
+
}
|
|
289
|
+
|
|
290
|
+
filename = os.path.split(filepath)[-1]
|
|
291
|
+
if not getattr(step, "step_image_dir", None):
|
|
292
|
+
step.step_image_dir = get_step_image_dir(ctx.step_index, step_name)
|
|
293
|
+
|
|
294
|
+
screenshot_index = len(step.screenshots) + 1
|
|
295
|
+
id = f"step-img-{step.step_run_id}-{screenshot_index:0>4}"
|
|
296
|
+
|
|
297
|
+
src = Path(step.step_image_dir) / filename
|
|
277
298
|
screenshot = {
|
|
278
299
|
"step_name": step_name,
|
|
279
|
-
"label": label,
|
|
280
|
-
"
|
|
281
|
-
"location": element_info,
|
|
300
|
+
"label": label or step_name,
|
|
301
|
+
"location": location,
|
|
282
302
|
"filepath": filepath,
|
|
283
|
-
"size":
|
|
303
|
+
"size": size,
|
|
304
|
+
"highlight": highlight,
|
|
305
|
+
"index": screenshot_index,
|
|
306
|
+
"html_src": str(src),
|
|
307
|
+
"html_id": id,
|
|
284
308
|
}
|
|
285
309
|
step.screenshots.append(screenshot)
|
|
286
310
|
|
|
@@ -341,3 +365,21 @@ class TeeStream:
|
|
|
341
365
|
def clear(self):
|
|
342
366
|
"""Clear the internal buffer."""
|
|
343
367
|
self.string_buffer = []
|
|
368
|
+
|
|
369
|
+
|
|
370
|
+
def get_iso_timestamp_with_ms():
|
|
371
|
+
"""
|
|
372
|
+
Get the current time as an ISO 8601 formatted string with milliseconds precision.
|
|
373
|
+
"""
|
|
374
|
+
return datetime.now().isoformat()[:-3]
|
|
375
|
+
|
|
376
|
+
|
|
377
|
+
def parse_iso_timestamp(iso_timestamp: (str | None)) -> datetime | None:
|
|
378
|
+
"""
|
|
379
|
+
Parse an ISO 8601 formatted string with milliseconds precision into a datetime object.
|
|
380
|
+
Returns None if the input is None.
|
|
381
|
+
"""
|
|
382
|
+
if iso_timestamp is None:
|
|
383
|
+
return None
|
|
384
|
+
|
|
385
|
+
return datetime.fromisoformat(iso_timestamp)
|
|
@@ -7,22 +7,22 @@ cucu/browser/frames.py,sha256=IW7kzRJn5PkbMaovIelAeCWO-T-2sOTwqaYBw-0-LKU,3545
|
|
|
7
7
|
cucu/browser/selenium.py,sha256=eUC2DZkhUIZi70sVTaNE_0AhanGTceyx_pCLIT7PN6o,13299
|
|
8
8
|
cucu/browser/selenium_tweaks.py,sha256=oUIhWVhBZbc9qsmQUJMpIr9uUWKxtgZBcnySWU6Yttk,879
|
|
9
9
|
cucu/cli/__init__.py,sha256=uXX5yVG1konJ_INdlrcfMg-Tt_5_cSx29Ed8R8v908A,62
|
|
10
|
-
cucu/cli/core.py,sha256
|
|
10
|
+
cucu/cli/core.py,sha256=op77u8ccFTqwbnpvYBFOhHy7gTyoqFBBti-Fw3BtbKM,26981
|
|
11
11
|
cucu/cli/run.py,sha256=6w7lkgf3iWsg9lqrmCJEWmOHGRXJFbVyZItVGGk_9gM,6105
|
|
12
12
|
cucu/cli/steps.py,sha256=5-aOGf3fmcnge4pcFM__4shcA3PZwjKe6oZN6XKY1pM,4215
|
|
13
13
|
cucu/cli/thread_dumper.py,sha256=Z3XnYSxidx6pqjlQ7zu-TKMIYZWk4z9c5YLdPkcemiU,1593
|
|
14
14
|
cucu/config.py,sha256=Pi59JiRcCdzugDwraM4R1hXRkP52123z0hSP8X6lyzI,14970
|
|
15
|
-
cucu/db.py,sha256=
|
|
15
|
+
cucu/db.py,sha256=2d2oAcBSAb3wwDKM7kBEaooMYEv0VY_9Mlwb9VLjzuY,17876
|
|
16
16
|
cucu/edgedriver_autoinstaller/README.md,sha256=tDkAWIqgRdCjt-oX1nYqikIC_FfiOEM2-pc5S5VbRLo,84
|
|
17
17
|
cucu/edgedriver_autoinstaller/__init__.py,sha256=fo6xJJPvcc5Xvni8epXfxDoPxJH5_b6Vk2jD9JTwfRs,969
|
|
18
18
|
cucu/edgedriver_autoinstaller/utils.py,sha256=iRKTww77CGaTAntt_QDvxlKPxpMU4otx95OeD97khcM,6802
|
|
19
|
-
cucu/environment.py,sha256=
|
|
19
|
+
cucu/environment.py,sha256=wO08ab85vKQ3Ypo8rqfuygeioyrOAGyoWGiXT7IndDY,11596
|
|
20
20
|
cucu/external/jquery/jquery-3.5.1.min.js,sha256=9_aliU8dGd2tb6OSsuzixeV4y_faTqgFtohetphbbj0,89476
|
|
21
21
|
cucu/formatter/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
22
22
|
cucu/formatter/cucu.py,sha256=NRLFsd6xl3uwUk45ihKN2OEioOeAqeTURrcQgscDGnU,9351
|
|
23
23
|
cucu/formatter/json.py,sha256=fJ1dZBGwYD4OkhQFDE49MRKGNzsrhDzQYq-dUfsYh94,10589
|
|
24
24
|
cucu/formatter/junit.py,sha256=dCyS47iHOqn5AZjsRpWCsDRkxxJ67IZy3wIlE5jjhoM,10249
|
|
25
|
-
cucu/formatter/rundb.py,sha256=
|
|
25
|
+
cucu/formatter/rundb.py,sha256=_JWY9btgrfXW233fDNt8ydLUhmWxGiykrf8N-2vqviQ,7821
|
|
26
26
|
cucu/fuzzy/__init__.py,sha256=ce4JRmaBF6oab6U99Qbpt7DrD3elhH32__-ND6fw5xc,104
|
|
27
27
|
cucu/fuzzy/core.py,sha256=TnUFaBgtJ4QeXXxW5E8Eviwy3zYpQuBPefAdNZzzjkM,3397
|
|
28
28
|
cucu/fuzzy/fuzzy.js,sha256=7ppPmR8szoEQ2rfIsyTmtYDgTrNwXrP_g11y-qEITGk,13882
|
|
@@ -57,15 +57,15 @@ cucu/reporter/external/jquery.dataTables.min.js,sha256=XNhaB1tBOSFMHu96BSAJpZOJz
|
|
|
57
57
|
cucu/reporter/external/manage_scenario_highlights.js,sha256=UAGC3CLzTqDdPI9d2tFOeww9afVS5S4J1Elg96x60cY,2669
|
|
58
58
|
cucu/reporter/external/popper.min.js,sha256=pS96pU17yq-gVu4KBQJi38VpSuKN7otMrDQprzf_DWY,19188
|
|
59
59
|
cucu/reporter/favicon.png,sha256=9ikXLAmzfQzy2NQps_8CGaZog2FvQrOX8nnSZ0e1UmM,2161
|
|
60
|
-
cucu/reporter/html.py,sha256=
|
|
61
|
-
cucu/reporter/templates/feature.html,sha256=
|
|
62
|
-
cucu/reporter/templates/flat.html,sha256=
|
|
63
|
-
cucu/reporter/templates/index.html,sha256=
|
|
60
|
+
cucu/reporter/html.py,sha256=e7CYtky0g0NvWaIdXYjUDgAQYn7-PVclYTVVpN2NPgY,13732
|
|
61
|
+
cucu/reporter/templates/feature.html,sha256=UKnQKsCiU7MFm1QJscoyDYc-kbolaxJ9D6qqLDUCSHU,3694
|
|
62
|
+
cucu/reporter/templates/flat.html,sha256=TGNwMxtqAmNbuxnBpWRKRTzo70Md1q_4tl0YnZW-iKY,2535
|
|
63
|
+
cucu/reporter/templates/index.html,sha256=2rLHG0zKp7i9JFmCpL76ITy-uOd7atBm8PieIvkN_9o,2768
|
|
64
64
|
cucu/reporter/templates/layout.html,sha256=2iDRbm8atO8mgHWgijIvDCrBMKvcP6YHrmr95WtJiE4,4561
|
|
65
|
-
cucu/reporter/templates/scenario.html,sha256=
|
|
65
|
+
cucu/reporter/templates/scenario.html,sha256=X7nBlKR147idHZlbX3lJsH75_lHijeZBzCgADbcCsGk,12290
|
|
66
66
|
cucu/steps/__init__.py,sha256=seSmASBlWu6-6wbFbvEbPwigBcRXiYP18C4X_2cW8Ng,753
|
|
67
67
|
cucu/steps/base_steps.py,sha256=0fPvdaKoan8lMAKrDnK0-zrALpxm11P1zVAY5CN7iXA,1893
|
|
68
|
-
cucu/steps/browser_steps.py,sha256=
|
|
68
|
+
cucu/steps/browser_steps.py,sha256=rI4QvNQVPTZrPhUmg2Qe7aCLQejVEGwWG2asensIcRg,12687
|
|
69
69
|
cucu/steps/button_steps.py,sha256=ej3urWbdffi7HimmPbrdUBkdLIA_xYcfLlsqOF-5_5s,2713
|
|
70
70
|
cucu/steps/checkbox_steps.py,sha256=B2HKFA-uwsrCa1DmzS7u1o1XH12b5BzLPg5qY1c445E,3386
|
|
71
71
|
cucu/steps/command_steps.py,sha256=nVCc8-TEitetk-zhk4z1wa0owqLQyHeQVH5THioUw-k,5094
|
|
@@ -88,8 +88,8 @@ cucu/steps/tables.js,sha256=Os2a7Fo-cg03XVli7USvcnBVad4N7idXr-HBuzdLvVQ,945
|
|
|
88
88
|
cucu/steps/text_steps.py,sha256=Jj_GHoHeemNwVdUOdqcehArNp7WM-WMjljA4w0pLXuw,2576
|
|
89
89
|
cucu/steps/variable_steps.py,sha256=WSctH3_xcxjijGPYZlxp-foC_SIAAKtF__saNtgZJbk,2966
|
|
90
90
|
cucu/steps/webserver_steps.py,sha256=i11xOmSjhhrQ-2QrDfpjDhWroeJuuGKvbYEsHV1cioI,1406
|
|
91
|
-
cucu/utils.py,sha256=
|
|
92
|
-
cucu-1.3.
|
|
93
|
-
cucu-1.3.
|
|
94
|
-
cucu-1.3.
|
|
95
|
-
cucu-1.3.
|
|
91
|
+
cucu/utils.py,sha256=ixJS5wG8GFuZfHE-gRk0dG4lJXjyjQFbq3hJzLG0Uvw,11409
|
|
92
|
+
cucu-1.3.17.dist-info/WHEEL,sha256=eh7sammvW2TypMMMGKgsM83HyA_3qQ5Lgg3ynoecH3M,79
|
|
93
|
+
cucu-1.3.17.dist-info/entry_points.txt,sha256=11WRIhQM7LuUnQg1lAoZQoNvvBvYNN1maDgQS4djwJo,40
|
|
94
|
+
cucu-1.3.17.dist-info/METADATA,sha256=O90o0Zasx0GHY9tJNFId4XttTZOfNo05KA74bdneKxQ,16722
|
|
95
|
+
cucu-1.3.17.dist-info/RECORD,,
|
|
File without changes
|
|
File without changes
|