X-Git-Url: http://git.onelab.eu/?a=blobdiff_plain;f=www%2FHyperText%2FDocuments.py;fp=www%2FHyperText%2FDocuments.py;h=60c4f69332cce4699fa7ebe6901cc037ed8085a2;hb=9a5afb968bf6ee5c9b03470c957b98906d3b78a9;hp=0000000000000000000000000000000000000000;hpb=4319f7e0428a13d886fa8456331991467e864d67;p=monitor.git diff --git a/www/HyperText/Documents.py b/www/HyperText/Documents.py new file mode 100644 index 0000000..60c4f69 --- /dev/null +++ b/www/HyperText/Documents.py @@ -0,0 +1,109 @@ +__version__ = "$Revision: 1.4 $"[11:-4] + +import HTML +import sys +from string import join + +class Document: + + generator = HTML.META(name="generator", + content="HyperText package (Python)") + DOCTYPE = HTML.DOCTYPE + body_element = HTML.BODY + + def __init__(self, *content, **attrs): + from HTML import HEAD, HTML + self.doctype = self.DOCTYPE + self.body = apply(self.body_element, content, attrs) + self.head = HEAD(self.generator) + if hasattr(self, 'style'): self.head.append(self.style) + if hasattr(self, 'title'): self.head.append(self.title) + self.html = HTML(self.head, self.body) + self.setup() + + def setup(self): pass + + def append(self, *items): map(self.body.content.append, items) + + def __str__(self, indent=0, perlevel=2): + return join([self.doctype.__str__(indent, perlevel), + self.html.__str__(indent, perlevel)], '') + + def writeto(self, fp=sys.stdout, indent=0, perlevel=2): + self.doctype.writeto(fp, indent, perlevel) + self.html.writeto(fp, indent, perlevel) + + +class FramesetDocument(Document): + + DOCTYPE = HTML.DOCTYPE_frameset + body_element = HTML.FRAMESET + + +class CGIMixIn: + + def setup(self): + self.content_type = "text/html" + self.headers = [] + self.nobody = 0 + + def _str_content_type(self): + return 'Content-Type: %s\r\n\r\n' % self.content_type + + def __str__(self, indent=0, perlevel=2): + s = self.headers[:] + s.append(self._str_content_type()) + if not self.nobody: + s.append(self.doctype.__str__(indent, perlevel)) + s.append(self.html.__str__(indent, perlevel)) + return join(s, '') + + def writeto(self, fp=sys.stdout, indent=0, perlevel=2): + fp.writelines(self.headers) + fp.write(self._str_content_type()) + if not self.nobody: + self.doctype.writeto(fp, indent, perlevel) + self.html.writeto(fp, indent, perlevel) + + +class HTTPMixIn(CGIMixIn): + + def setup(self): + CGIMixIn.setup(self) + if not hasattr(self, 'response'): + self.response = (200, 'Output follows') + self.date = None + + http_response_str = "%s %s %s\r\nServer: %s %s\r\nDate: %s\r\n" + + def _str_http_response(self): + if hasattr(self, 'request'): + apply(self.request.log_request, self.response) + return self.http_response_str \ + % (self.request.request_version, + self.response[0], + self.response[1], + self.request.server_version, + self.request.sys_version, + self.date) + else: + return self.http_response_str \ + % ('HTTP/1.0', + self.response[0], + self.response[1], + "Dunno/0.0", + "BeatzMe/0.0", + self.date) + + def __str__(self, indent=0, perlevel=2): + return join([self._str_http_response(), + CGIMixIn.__str__(self, indent, perlevel)], '') + + def writeto(self, fp=sys.stdout, indent=0, perlevel=2): + fp.write(self._str_http_response()) + CGIMixIn.writeto(self, fp, indent, perlevel) + + + + +