1 __version__ = "$Revision: 1.4 $"[11:-4]
5 from string import join
9 generator = HTML.META(name="generator",
10 content="HyperText package (Python)")
11 DOCTYPE = HTML.DOCTYPE
12 body_element = HTML.BODY
14 def __init__(self, *content, **attrs):
15 from HTML import HEAD, HTML
16 self.doctype = self.DOCTYPE
17 self.body = apply(self.body_element, content, attrs)
18 self.head = HEAD(self.generator)
19 if hasattr(self, 'style'): self.head.append(self.style)
20 if hasattr(self, 'title'): self.head.append(self.title)
21 self.html = HTML(self.head, self.body)
26 def append(self, *items): map(self.body.content.append, items)
28 def __str__(self, indent=0, perlevel=2):
29 return join([self.doctype.__str__(indent, perlevel),
30 self.html.__str__(indent, perlevel)], '')
32 def writeto(self, fp=sys.stdout, indent=0, perlevel=2):
33 self.doctype.writeto(fp, indent, perlevel)
34 self.html.writeto(fp, indent, perlevel)
37 class FramesetDocument(Document):
39 DOCTYPE = HTML.DOCTYPE_frameset
40 body_element = HTML.FRAMESET
46 self.content_type = "text/html"
50 def _str_content_type(self):
51 return 'Content-Type: %s\r\n\r\n' % self.content_type
53 def __str__(self, indent=0, perlevel=2):
55 s.append(self._str_content_type())
57 s.append(self.doctype.__str__(indent, perlevel))
58 s.append(self.html.__str__(indent, perlevel))
61 def writeto(self, fp=sys.stdout, indent=0, perlevel=2):
62 fp.writelines(self.headers)
63 fp.write(self._str_content_type())
65 self.doctype.writeto(fp, indent, perlevel)
66 self.html.writeto(fp, indent, perlevel)
69 class HTTPMixIn(CGIMixIn):
73 if not hasattr(self, 'response'):
74 self.response = (200, 'Output follows')
77 http_response_str = "%s %s %s\r\nServer: %s %s\r\nDate: %s\r\n"
79 def _str_http_response(self):
80 if hasattr(self, 'request'):
81 apply(self.request.log_request, self.response)
82 return self.http_response_str \
83 % (self.request.request_version,
86 self.request.server_version,
87 self.request.sys_version,
90 return self.http_response_str \
98 def __str__(self, indent=0, perlevel=2):
99 return join([self._str_http_response(),
100 CGIMixIn.__str__(self, indent, perlevel)], '')
102 def writeto(self, fp=sys.stdout, indent=0, perlevel=2):
103 fp.write(self._str_http_response())
104 CGIMixIn.writeto(self, fp, indent, perlevel)