def failed(fixture_test_path, test_name, actual_hash, expected_hash): doc = dominate.document(title=test_name) recorded_path = fixture_test_path / "recorded" actual_path = fixture_test_path / "actual" download_failed = False if not recorded_path.exists(): recorded_path.mkdir() try: download.fetch_recorded(expected_hash, recorded_path) except Exception: download_failed = True recorded_screens = sorted(recorded_path.iterdir()) actual_screens = sorted(actual_path.iterdir()) with doc: _header(test_name, expected_hash, actual_hash) if download_failed: with p(): strong("WARNING:") text(" failed to download recorded fixtures. Is this a new test case?") with table(border=1, width=600): with tr(): th("Expected") th("Actual") html.diff_table(recorded_screens, actual_screens) return html.write(REPORTS_PATH / "failed", doc, test_name + ".html")
def get_update_netcdf_file_html_form(self): form_action = "/hsapi/_internal/{}/update-netcdf-file/".format(self.id) style = "display:none;" if self.is_dirty: style = "margin-bottom:10px" root_div = div(id="div-netcdf-file-update", cls="row", style=style) with root_div: with div(cls="col-sm-12"): with div(cls="alert alert-warning alert-dismissible", role="alert"): strong( "NetCDF file needs to be synced with metadata changes." ) input(id="metadata-dirty", type="hidden", value=self.is_dirty) with form(action=form_action, method="post", id="update-netcdf-file"): button("Update NetCDF File", type="button", cls="btn btn-primary", id="id-update-netcdf-file") return root_div
def failed(fixture_test_path: Path, test_name: str, actual_hash: str, expected_hash: str) -> Path: ACTUAL_HASHES[test_name] = actual_hash doc = document(title=test_name, actual_hash=actual_hash) recorded_path = fixture_test_path / "recorded" actual_path = fixture_test_path / "actual" download_failed = False if not recorded_path.exists(): recorded_path.mkdir() try: download.fetch_recorded(expected_hash, recorded_path) except Exception: download_failed = True recorded_screens = sorted(recorded_path.iterdir()) actual_screens = sorted(actual_path.iterdir()) with doc: _header(test_name, expected_hash, actual_hash) with div(id="markbox", _class="script-hidden"): p("Click a button to mark the test result as:") with div(id="buttons"): t.button("OK", id="mark-ok", onclick="markState('ok')") t.button("BAD", id="mark-bad", onclick="markState('bad')") if download_failed: with p(): strong("WARNING:") text( " failed to download recorded fixtures. Is this a new test case?" ) with table(border=1, width=600): with tr(): th("Expected") th("Actual") html.diff_table( recorded_screens, actual_screens, SCREENSHOTS_WIDTH_PX_TO_DISPLAY[test_name[:2]], ) return html.write(REPORTS_PATH / "failed", doc, test_name + ".html")
def author(self): authors = self.octiron.query(''' SELECT ?name ?url WHERE { ?page adr:author [ schema:name ?name ; schema:url ?url ] . } ''', page=self.iri) if not authors: return '' if len(authors) < 2: author, = authors dom = tags.li( tags.a( tags.strong('Author: '), author['name'], cls='md-nav__link', href=author['url'], target='_blank', ), cls='md-nav__item', ) return str(dom) raise ValueError('page has too many authors!')
def construct_list_items(violations) -> Iterable[li]: """Construct list items.""" for violation in violations: yield li( strong(code(violation['code'])), a(violation['title'], href=violation['url']), )
def add_section(template_task_sheet, topic, section_heading, error_message, materials_list): if not materials_list: error_html = p("") with error_html: strong(error_message) id_tag = section_heading + "-1-resources-container margin-top" if section_heading == "exercises" else section_heading + "-resources-container" if section_heading == "homework": replace_in_output(template_task_sheet, "p", "homework-paragraph-container", "") add_to_output(template_task_sheet, id_tag, str(error_html)) else: resource_num = 0 index_to_task = make_grid_list(len(materials_list)) row = 1 for resource in materials_list: if section_heading == "learn": resource_info = code_to_information(resource["code"]) paragraph_html = div( p("Videos") if resource_info["videos"] else p(), p("Notes") if resource_info["notes"] else p(), p("Exercises") if resource_info["exercises"] else p()) elif section_heading == "homework": paragraph_html = p(resource["description"]) resource_info = code_to_information( "n5w", index_to_task[resource_num]) else: paragraph_html = p(resource["title"]) resource_info = code_to_information( "n5w", index_to_task[resource_num]) generate_resource_html(template_task_sheet, topic["title"], resource_info["image"], resource_info["name"], paragraph_html, resource["link"], section_heading, row) if resource_num == 9: print("Too many resources") break else: resource_num = resource_num + 1 if resource_num % 3 == 0: row = row + 1
def failed(fixture_test_path, test_name, actual_hash, expected_hash): doc = dominate.document(title=test_name) recorded_path = fixture_test_path / "recorded" actual_path = fixture_test_path / "actual" download_failed = False if not recorded_path.exists(): recorded_path.mkdir() try: download.fetch_recorded(expected_hash, recorded_path) except Exception: download_failed = True recorded_screens = sorted(recorded_path.iterdir()) actual_screens = sorted(actual_path.iterdir()) with doc: _header(test_name, expected_hash, actual_hash) if download_failed: with p(): strong("WARNING:") text( " failed to download recorded fixtures. Is this a new test case?" ) with table(border=1, width=600): with tr(): th("Expected") th("Actual") for recorded, actual in zip_longest(recorded_screens, actual_screens): if recorded and actual and filecmp.cmp(actual, recorded): background = "white" else: background = "red" with tr(bgcolor=background): _image(recorded) _image(actual) return _write(REPORTS_PATH / "failed", doc, test_name + ".html")
def get_html(self, pretty=True): """Generates html code for displaying data for this metadata element""" root_div = div() def get_th(heading_name): return th(heading_name, cls="text-muted") with root_div: with div(cls="custom-well"): strong(self.name) with table(cls='custom-table'): with tbody(): with tr(): get_th('Variable Name') td(self.variableName) with tr(): get_th('Variable Unit') td(self.variableUnit) if self.noDataValue: with tr(): get_th('No Data Value') td(self.noDataValue) if self.maximumValue: with tr(): get_th('Maximum Value') td(self.maximumValue) if self.minimumValue: with tr(): get_th('Minimum Value') td(self.minimumValue) if self.method: with tr(): get_th('Method') td(self.method) if self.comment: with tr(): get_th('Comment') td(self.comment) return root_div.render(pretty=pretty)
def get_html(self, pretty=True): """Generates html code for displaying data for this metadata element""" root_div = div() def get_th(heading_name): return th(heading_name, cls="text-muted") with root_div: with div(cls="custom-well"): strong(self.name) with table(cls='custom-table'): with tbody(): with tr(): get_th('Variable Name') td(self.variableName) with tr(): get_th('Variable Unit') td(self.variableUnit) if self.noDataValue: with tr(): get_th('No Data Value') td(self.noDataValue) if self.maximumValue: with tr(): get_th('Maximum Value') td(self.maximumValue) if self.minimumValue: with tr(): get_th('Minimum Value') td(self.minimumValue) if self.method: with tr(): get_th('Method') td(self.method) if self.comment: with tr(): get_th('Comment') td(self.comment) return root_div.render(pretty=pretty)
def index() -> Path: passed_tests = list((REPORTS_PATH / "passed").iterdir()) failed_tests = list((REPORTS_PATH / "failed").iterdir()) title = "UI Test report " + datetime.now().strftime("%Y-%m-%d %H:%M:%S") doc = document(title=title, index=True) with doc: h1("UI Test report") if not failed_tests: p("All tests succeeded!", style="color: green; font-weight: bold;") else: p("Some tests failed!", style="color: red; font-weight: bold;") hr() h2("Failed", style="color: red;") with p(id="file-hint"): strong("Tip:") text(" use ") t.span("./tests/show_results.sh", style="font-family: monospace") text(" to enable smart features.") with div("Test colors", _class="script-hidden"): with t.ul(): with t.li(): t.span("new", style="color: blue") t.button("clear all", onclick="resetState('all')") with t.li(): t.span("marked OK", style="color: grey") t.button("clear", onclick="resetState('ok')") with t.li(): t.span("marked BAD", style="color: darkred") t.button("clear", onclick="resetState('bad')") html.report_links(failed_tests, REPORTS_PATH, ACTUAL_HASHES) h2("Passed", style="color: green;") html.report_links(passed_tests, REPORTS_PATH) return html.write(REPORTS_PATH, doc, "index.html")
def get_html(self, pretty=True): """Generates html code for displaying data for this metadata element""" root_div = div(cls="col-xs-12 pull-left", style="margin-top:10px;") def get_th(heading_name): return th(heading_name, cls="text-muted") with root_div: with div(cls="custom-well"): strong(self.name) with table(cls='custom-table'): with tbody(): with tr(): get_th('Unit') td(self.unit) with tr(): get_th('Type') td(self.type) with tr(): get_th('Shape') td(self.shape) if self.descriptive_name: with tr(): get_th('Long Name') td(self.descriptive_name) if self.missing_value: with tr(): get_th('Missing Value') td(self.missing_value) if self.method: with tr(): get_th('Comment') td(self.method) return root_div.render(pretty=pretty)
def get_html(self, pretty=True): """Generates html code for displaying data for this metadata element""" root_div = div(cls="content-block") def get_th(heading_name): return th(heading_name, cls="text-muted") with root_div: with div(cls="custom-well"): strong(self.name) with table(cls='custom-table'): with tbody(): with tr(): get_th('Unit') td(self.unit) with tr(): get_th('Type') td(self.type) with tr(): get_th('Shape') td(self.shape) if self.descriptive_name: with tr(): get_th('Long Name') td(self.descriptive_name) if self.missing_value: with tr(): get_th('Missing Value') td(self.missing_value) if self.method: with tr(): get_th('Comment') td(self.method) return root_div.render(pretty=pretty)
def sidebar_property( octiron: Octiron, iri: URIRef, environment: URIRef, ) -> str: """Render name of the property of the ADR page.""" rows = octiron.query( ''' SELECT * WHERE { ?property rdfs:label ?label . OPTIONAL { ?property octa:symbol ?symbol . } } LIMIT 1 ''', property=iri, ) try: row = first(rows) except ValueError as err: raise PropertyNotRenderable(iri=iri) from err label = row['label'] if symbol := row.get('symbol'): label = f'{symbol} {label}' return strong(f'{label}: ')