Robot Framework
htmlfilewriter.py
Go to the documentation of this file.
1 # Copyright 2008-2015 Nokia Networks
2 # Copyright 2016- Robot Framework Foundation
3 #
4 # Licensed under the Apache License, Version 2.0 (the "License");
5 # you may not use this file except in compliance with the License.
6 # You may obtain a copy of the License at
7 #
8 # http://www.apache.org/licenses/LICENSE-2.0
9 #
10 # Unless required by applicable law or agreed to in writing, software
11 # distributed under the License is distributed on an "AS IS" BASIS,
12 # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13 # See the License for the specific language governing permissions and
14 # limitations under the License.
15 
16 import os.path
17 import re
18 
19 from robot.utils import HtmlWriter
20 from robot.version import get_full_version
21 
22 from .template import HtmlTemplate
23 
24 
26 
27  def __init__(self, output, model_writer):
28  self._output_output = output
29  self._model_writer_model_writer = model_writer
30 
31  def write(self, template):
32  writers = self._get_writers_get_writers(os.path.dirname(template))
33  for line in HtmlTemplate(template):
34  for writer in writers:
35  if writer.handles(line):
36  writer.write(line)
37  break
38 
39  def _get_writers(self, base_dir):
40  html_writer = HtmlWriter(self._output_output)
41  return (self._model_writer_model_writer,
42  JsFileWriter(html_writer, base_dir),
43  CssFileWriter(html_writer, base_dir),
44  GeneratorWriter(html_writer),
45  LineWriter(self._output_output))
46 
47 
48 class _Writer:
49 
52  _handles_line = None
53 
54  def handles(self, line):
55  return line.startswith(self._handles_line_handles_line)
56 
57  def write(self, line):
58  raise NotImplementedError
59 
60 
62 
65  _handles_line = '<!-- JS MODEL -->'
66 
67 
69 
70  def __init__(self, output):
71  self._output_output = output
72 
73  def handles(self, line):
74  return True
75 
76  def write(self, line):
77  self._output_output.write(line + '\n')
78 
79 
81 
84  _handles_line = '<meta name="Generator" content='
85 
86  def __init__(self, html_writer):
87  self._html_writer_html_writer = html_writer
88 
89  def write(self, line):
90  version = get_full_version('Robot Framework')
91  self._html_writer_html_writer.start('meta', {'name': 'Generator', 'content': version})
92 
93 
95 
96  def __init__(self, html_writer, base_dir):
97  self._html_writer_html_writer = html_writer
98  self._base_dir_base_dir = base_dir
99 
100  def _inline_file(self, filename, tag, attrs):
101  self._html_writer_html_writer.start(tag, attrs)
102  for line in HtmlTemplate(os.path.join(self._base_dir_base_dir, filename)):
103  self._html_writer_html_writer.content(line, escape=False, newline=True)
104  self._html_writer_html_writer.end(tag)
105 
106 
108 
111  _handles_line = '<script type="text/javascript" src='
112 
115  _source_file = re.compile('src=\"([^\"]+)\"')
116 
117  def write(self, line):
118  name = self._source_file_source_file.search(line).group(1)
119  self._inline_file_inline_file(name, 'script', {'type': 'text/javascript'})
120 
121 
123 
126  _handles_line = '<link rel="stylesheet"'
127 
130  _source_file = re.compile('href=\"([^\"]+)\"')
131 
134  _media_type = re.compile('media=\"([^\"]+)\"')
135 
136  def write(self, line):
137  name = self._source_file_source_file.search(line).group(1)
138  media = self._media_type_media_type.search(line).group(1)
139  self._inline_file_inline_file(name, 'style', {'type': 'text/css', 'media': media})
def __init__(self, output, model_writer)
def __init__(self, html_writer, base_dir)
def _inline_file(self, filename, tag, attrs)
def get_full_version(program=None, naked=False)
Definition: version.py:30