Source code for memote.suite.reporting.reports.snapshot
# -*- coding: utf-8 -*-
# Copyright 2017 Novo Nordisk Foundation Center for Biosustainability,
# Technical University of Denmark.
#
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
# You may obtain a copy of the License at
#
# http://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS,
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
# See the License for the specific language governing permissions and
# limitations under the License.
"""Render a basic one-time report."""
from __future__ import absolute_import
import io
import json
import logging
# from base64 import b64encode
from string import Template
from os.path import join, dirname
# from zlib import compress
from six import iteritems
from memote.suite.reporting.reports.report import Report
LOGGER = logging.getLogger(__name__)
[docs]class SnapshotReport(Report):
"""Render a basic report from the given data."""
def __init__(self, data, **kwargs):
"""Initialize the data."""
super(SnapshotReport, self).__init__(**kwargs)
self.data = data
[docs] def render_html(self):
"""
Render a one-shot report for a model.
This is currently a stub while we convert from ``jinja2`` templates
to a full Angular based report.
"""
# template = self.env.get_template("snapshot.html")
with io.open(join(dirname(__file__), "../templates/snapshot.html")) as \
file_handle:
template = Template(file_handle.read())
try:
return template.safe_substitute(
results=json.dumps(self.data, sort_keys=True, indent=2,
separators=(",", ": ")))
except TypeError:
# Log information to easily find the culprit.
json_types = (type(None), int, float, str, list, dict)
for name, annotation in iteritems(self.data["tests"]):
data = annotation.get("data")
try:
for key, value in iteritems(data):
if not isinstance(value, json_types):
LOGGER.debug(
" %s - %s: %s", name, key, type(
value)
)
except AttributeError:
if not isinstance(data, json_types):
LOGGER.debug(" %s: %s", name, type(data))
# TODO: Use compression of JSON in future.
# return template.safe_substitute(
# results=b64encode(compress(
# json.dumps(self.data).encode("UTF-16"), level=9)))
# return template.render(
# result=Markup(b64encode(
# compress(json.dumps(self.data), level=9))))