2

I am trying to create my own functions in the subclass of BaseHTTPRequestHandler as such

class Weblog(BaseHTTPServer.BaseHTTPRequestHandler):

def do_HEAD(self):
    self.send_response(200)
    self.send_header("Content-type", "text/html")
    self.end_headers()
def do_GET(self):
    """Respond to a GET request."""
    if self.path == '/':
        do_index()
    elif self.path == '/timestamp':
        do_entry()
    elif self.path == '/post':
        do_post_form()

def do_index(self):
    '''If the PATH_INFO is '/' then the weblog index should be presented'''
    self.send_response(200)
    self.send_header("Content-type", "text/html")
    self.end_headers()
    post = None
    content = {}
    line = '<tr id="%(timestamp)s"><td>%(date)s</td>'
    line += '<td><a href="%(timestamp)s">%(title)s</a></td></tr>'
    for timestamp in weblog.list_posts():
        post = storage.retrieve_post(timestamp)
        if content.has_key('lines') == false:
            content['lines'] = line %post
        else:
            content['lines'] += line %post
    self.wfile.write('<a href = "post">Add a post</a>')
    self.wfile.write('<table><tr><th>Date</th><th>Title</th></tr>%(lines)s</tables>' %content)

When I run it on the commnadline it gives me the following error:-

Exception happened during processing of request from ('127.0.0.1', 59808)
Traceback (most recent call last):
File "/Library/Frameworks/Python.framework/Versions/2.6/lib/python2.6/SocketServer.py", line 281, in _handle_request_noblock
self.process_request(request, client_address)
File "/Library/Frameworks/Python.framework/Versions/2.6/lib/python2.6/SocketServer.py", line 307, in process_request
self.finish_request(request, client_address)
File "/Library/Frameworks/Python.framework/Versions/2.6/lib/python2.6/SocketServer.py", line 320, in finish_request
self.RequestHandlerClass(request, client_address, self)
File "/Library/Frameworks/Python.framework/Versions/2.6/lib/python2.6/SocketServer.py", line 615, in __init__
self.handle()
File "/Library/Frameworks/Python.framework/Versions/2.6/lib/python2.6/BaseHTTPServer.py", line 329, in hand
self.handle_one_request()
File "/Library/Frameworks/Python.framework/Versions/2.6/lib/python2.6/BaseHTTPServer.py", line 323, in handle_one_request
method()
File "weblog.py", line 34, in do_GET
do_index()
NameError: global name 'do_index' is not defined

Am I doing something wrong here?

2
  • 1
    It's worth noting that subclassing BaseHTTPServer is not a serious way to create a blogging application in python: use pylons/turbogears/django, etc. instead. These are designed to use a real webserver that is safe to expose on the internet. Commented Aug 13, 2010 at 5:19
  • 1
    Ah yes, I realise that, but it is just an assignment I have to do as per specifications. But thank you for the comment Commented Aug 13, 2010 at 5:40

1 Answer 1

2

To call something in the current class, you should use self.method_name()

def do_GET(self):
    """Respond to a GET request."""
    if self.path == '/':
        self.do_index()
    elif self.path == '/timestamp':
        self.do_entry()
    elif self.path == '/post':
        self.do_post_form()
Sign up to request clarification or add additional context in comments.

Comments

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.