cucu 1.3.16__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.

@@ -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">Started {{ feature['started_at'] }} for {{ feature['duration'] }}s</div>
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">Started at</th>
21
- <th>Features<br/>{{ grand_totals['total_features'] | int }}</th>
22
- <th>Scenarios<br/>{{ grand_totals['total_scenarios'] | int }}</th>
23
- <th class="text-center">Steps<br/>{{ grand_totals['total_steps'] | int }}</th>
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["elements"] %}
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['started_at'] }}</td>
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">Started at</th>
21
- <th>Features<br/>{{ grand_totals['total_features'] | int }}</th>
22
- <th class="text-center">Scenarios<br/>{{ grand_totals['total_scenarios'] | int }}</th>
23
- <th class="text-center">Passed<br/>{{ grand_totals['total_scenarios_passed'] | int}}</th>
24
- <th class="text-center">Failed<br/>{{ grand_totals['total_scenarios_failed'] | int }}</th>
25
- <th class="text-center">Skipped<br/>{{ grand_totals['total_scenarios_skipped'] | int }}</th>
26
- <th class="text-center">Errored<br/>{{ grand_totals['total_scenarios_errored'] | int }}</th>
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/>&nbsp;</th>
28
- <th class="text-center">Duration<br/>{{ grand_totals['duration'] | int }}s</th>
28
+ <th class="text-center">Duration<br/>{{ '{:.1f}'.format(grand_totals['duration'] | float) }}s</th>
29
29
  </tr>
30
30
  </thead>
31
- {% for feature in features %}
31
+ {% for feature_stat in feature_stats %}
32
32
  <tr>
33
- <td class="text-center">{{ feature['started_at'] }}</td>
34
- <td><a href="{{ urlencode(escape(feature['name'])) }}.html">{{ escape(feature['name']) }}</a></td>
35
- <td class="text-center">{{ feature['total_scenarios'] }}</td>
36
- <td class="text-center">{{ feature['total_scenarios_passed'] }}</td>
37
- <td class="text-center">{{ feature['total_scenarios_failed'] }}</td>
38
- <td class="text-center">{{ feature['total_scenarios_skipped'] }}</td>
39
- <td class="text-center">{{ feature['total_scenarios_errored'] }}</td>
40
- <td class="text-center"><span class="status-{{ feature['status'] }}">{{ feature['status'] }}</span></td>
41
- <td class="text-center">{{ '{:.1f}'.format(feature['duration'] | float ) }}</td>
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">Started {{ scenario["started_at"] }} for {{ scenario['duration'] }}</div>
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['substep'] %}
83
+ {% if step['is_substep'] %}
84
84
  {% set step_prefix = " ⤷" %}
85
85
  {% else %}
86
86
  {% set step_prefix = "" %}
87
87
  {% endif %}
88
- {% if step['result'] is defined %}
89
- {% set step_status = step['result']['status'] %}
90
- {% if step['result']['status'] == 'skipped' %}
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['result']['status'] in ('failed', 'passed') and step["result"]["timestamp"] %}
94
- {% set step_timing = "{} for {:.3f}s".format(step["result"]["timestamp"].strftime("%H:%M:%S"), step["result"]["duration"]) %}
95
- {% set step_start = step["result"]["timestamp"] %}
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="{{ step_start }}">{{ step_timing }}</pre></td>
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['table'] %}
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['table'] %}
128
- <pre style="margin: 0;">{{ escape(step['table']) }}</pre>
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['result'] is defined %}
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['result']['stdout'] %}
136
+ {% if step['stdout'] %}
137
137
  <details open>
138
- <summary style="color: dimgray;">stdout ({{ step['result']['stdout']|length }} lines)</summary>
139
- <pre style="color: darkgray;">{{ escape("\n".join(step['result']['stdout'])) }}</pre>
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['result']['stderr'] %}
142
+ {% if step['stderr'] %}
143
143
  <details open>
144
- <summary style="color: dimgray;">stderr ({{ step['result']['stderr']|length }} lines)</summary>
145
- <pre style="color: darkgray;">{{ escape("\n".join(step['result']['stderr'])) }}</pre>
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['images'] %}
148
+ {% if step['screenshots'] %}
149
149
  <details open>
150
- <summary style="color: dimgray;">images ({{ step['images']|length }} images)</summary>
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['images'] %}
153
- <img class="mx-auto d-block img-fluid shadow bg-white rounded" id='{{image['id']}}' style="margin-bottom:15px" alt='{{ image["label"] }}' title='{{ image["label"] }}' src='{{ image["src"] }}'></img>
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='{{ 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>
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['result']['error_message'] %}
161
+ {% if step['error_message'] %}
162
162
  <details open>
163
- <summary style="color: dimgray;">error message ({{ step['result']['error_message']|length }} lines)</summary>
164
- <pre style="color: darkgray;">{{ escape("\n".join(step['result']['error_message'])) }}</pre>
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['result']['browser_logs'] %}
167
+ {% if step['browser_logs'] %}
168
168
  <details open>
169
- <summary style="color: dimgray;">browser logs ({{ step['result']['browser_logs']|length }} lines)</summary>
170
- <pre style="color: darkgray;">{{ escape("\n".join(step['result']['browser_logs'])) }}</pre>
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['result']['debug_output'] %}
173
+ {% if step['debug_output'] %}
174
174
  <details open>
175
- <summary style="color: dimgray;">debug output ({{ step['result']['debug_output']|length }} lines)</summary>
176
- <pre style="color: darkgray;">{{ escape("\n".join(step['result']['debug_output'])) }}</pre>
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/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
- element_info = {
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
- browser_window_size = ctx.browser.execute(script)
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
- "element": element,
281
- "location": element_info,
300
+ "label": label or step_name,
301
+ "location": location,
282
302
  "filepath": filepath,
283
- "size": browser_window_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)
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.3
2
2
  Name: cucu
3
- Version: 1.3.16
3
+ Version: 1.3.17
4
4
  Summary: Easy BDD web testing
5
5
  Keywords: cucumber,selenium,behave
6
6
  Author: Domino Data Lab, Rodney Gomes, Cedric Young, Xin Dong, Kavya Yakkati, Kevin Garton, Joy Liao
@@ -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=-3TWxedDNMR1Jg7qNF5GLdvgn7KgthMwQ0hfeyJi1eg,27509
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=ZadBBvwwzlHTi-MXMrHlSudpn61zxaTQsDMfCjSGnNk,15323
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=wjj-CA3i3sDi9G_sVzkIUgOv1CgBlwaePdUWIZQMBsw,11729
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=dKNlD-LXmrJ1Gm4OHI7Cs49eMuBGlBfwLz7NLISF5sg,7857
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,12 +57,12 @@ 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=8wXF9ntF5Rkmoe-LWHY0YgxbSwuJGdZ1XTKWD-LFbBE,21009
61
- cucu/reporter/templates/feature.html,sha256=IBkwGiul-sRO5lT8q8VFXMUJx1owsAd1YbdDzziSjKw,3645
62
- cucu/reporter/templates/flat.html,sha256=inx9wBo23SKsETA5BqU3GAxM7WaLTsDgCyL_D7TPpdA,2531
63
- cucu/reporter/templates/index.html,sha256=pJ1eojL19EIUuIiqtALPm3atTabKJb7M1FwGzWpGkdg,2818
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=LWjSj2PNcBpC1EnxCmgnzG8ZLDIXEDF4F1oexfFfx4E,12238
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
68
  cucu/steps/browser_steps.py,sha256=rI4QvNQVPTZrPhUmg2Qe7aCLQejVEGwWG2asensIcRg,12687
@@ -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=hkvfTpN9bCClZ8ezny8mkAPq0OaR3A3kJi8lzq0zL0Q,10164
92
- cucu-1.3.16.dist-info/WHEEL,sha256=eh7sammvW2TypMMMGKgsM83HyA_3qQ5Lgg3ynoecH3M,79
93
- cucu-1.3.16.dist-info/entry_points.txt,sha256=11WRIhQM7LuUnQg1lAoZQoNvvBvYNN1maDgQS4djwJo,40
94
- cucu-1.3.16.dist-info/METADATA,sha256=gsPi3-X5SJsJyXCi5VWZLIs8A763XPlEllARyALOB4I,16722
95
- cucu-1.3.16.dist-info/RECORD,,
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