Source code for robot.htmldata.template

#  Copyright 2008-2015 Nokia Networks
#  Copyright 2016-     Robot Framework Foundation
#
#  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.

import sys
from collections.abc import Iterable
from os.path import normpath
from pathlib import Path

if sys.version_info < (3, 9) and not Path(__file__).exists():  # zipsafe
    try:
        from importlib_resources import files
    except ImportError:
        raise ImportError(
            "'importlib_resources' backport module needs to be installed with "
            "Python 3.8 when Robot Framework is distributed as a zip package "
            "or '__file__' does not exist for other reasons."
        )
else:
    try:
        from importlib.resources import files
    except ImportError:  # Python 3.8
        BASE_DIR = Path(__file__).absolute().parent.parent.parent  # zipsafe

        def files(module):
            return BASE_DIR / module.replace(".", "/")


[docs] class HtmlTemplate(Iterable): def __init__(self, path: "Path|str"): # Need to use `os.path.normpath` because `Path` does not support # normalizing only `..` components. path = Path(normpath(path)) try: module, self.name = path.parts except ValueError: raise ValueError( f"HTML template path must contain only directory and " f"file names like 'rebot/log.html', got '{path}'." ) self.module = "robot.htmldata." + module def __iter__(self): path = files(self.module).joinpath(self.name) # Workaround for a bug on Windows with Python 3.9 when packaged to a zip: # https://github.com/python/importlib_resources/issues/281 if hasattr(path, "at") and "\\" in path.at: path.at = path.at.replace("\\", "/") with path.open(encoding="UTF-8") as file: for item in file: yield item.rstrip()