1
# -*- coding: iso-8859-1 -*-
3
MoinMoin - CLI Request Implementation for commandline usage.
5
@copyright: 2001-2003 Juergen Hermann <jh@web.de>,
6
2003-2006 MoinMoin:ThomasWaldmann
7
@license: GNU GPL, see COPYING for details.
11
from MoinMoin import log
12
logging = log.getLogger(__name__)
14
from MoinMoin.request import RequestBase, RemoteClosedConnection
16
class Request(RequestBase):
17
""" specialized on command line interface and script requests """
19
def __init__(self, url='CLI', pagename='', properties={}):
20
self.saved_cookie = ''
21
self.path_info = '/' + pagename
22
self.query_string = ''
23
self.remote_addr = '127.0.0.1'
25
self.http_user_agent = 'CLI/Script'
27
self.request_method = 'GET'
28
self.request_uri = '/' + pagename # TODO check if /pagename works as URI for CLI usage
29
self.http_host = 'localhost'
30
self.http_referer = ''
31
self.script_name = '.'
32
self.content_length = None
33
self.if_modified_since = None
34
self.if_none_match = None
35
RequestBase.__init__(self, properties)
36
self.cfg.caching_formats = [] # don't spoil the cache
37
self.initTheme() # usually request.run() does this, but we don't use it
39
def _setup_args_from_cgi_form(self):
40
""" Override to create cli form """
41
#form = cgi.FieldStorage()
42
#return RequestBase._setup_args_from_cgi_form(self, form)
46
""" Read from input stream. """
48
logging.warning("calling request.read(None) might block")
49
return sys.stdin.read()
51
return sys.stdin.read(n)
53
def write(self, *data):
54
""" Write to output stream. """
55
data = self.encode(data)
57
sys.stdout.write(data)
59
raise RemoteClosedConnection()
65
RequestBase.finish(self)
66
# flush the output, ignore errors caused by the user closing the socket
71
if ex.errno != errno.EPIPE:
74
def isForbidden(self):
75
""" Nothing is forbidden """
78
# Accessors --------------------------------------------------------
80
def getQualifiedURL(self, uri=None):
81
""" Return a full URL starting with schema and host
83
TODO: does this create correct pages when you render wiki pages
84
within a cli request?!
88
# Headers ----------------------------------------------------------
90
def setHttpHeader(self, header):
93
def _emit_http_headers(self, headers):
94
""" private method to send out preprocessed list of HTTP headers """
97
def http_redirect(self, url):
98
""" Redirect to a fully qualified, or server-rooted URL
100
TODO: Does this work for rendering redirect pages?
102
raise Exception("Redirect not supported for command line tools!")