From 2a668447ea4a6334a5d0ceb0168dc4a698e47123 Mon Sep 17 00:00:00 2001 From: GerardoP Date: Fri, 18 Sep 2020 13:18:10 -0700 Subject: [PATCH 1/4] Completed the Simple WSGI Excercise. --- wsgi_1.py | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/wsgi_1.py b/wsgi_1.py index 85498d1..edcfe1c 100644 --- a/wsgi_1.py +++ b/wsgi_1.py @@ -21,11 +21,11 @@ def application(environ, start_response): response_body = body.format( software=environ.get('SERVER_SOFTWARE', default), - path="aaaa", - month="bbbb", - date="cccc", - year="dddd", - client_ip="eeee" + path=environ.get('PATH_INFO', default), + month=datetime.datetime.now().strftime('%B'), + date=datetime.datetime.now().day, + year=datetime.datetime.now().year, + client_ip=environ.get('REMOTE_ADDR') ) status = '200 OK' From d4b740e4675c8f5fa5dce620d17ce72969ca3c7a Mon Sep 17 00:00:00 2001 From: GerardoP Date: Tue, 29 Sep 2020 12:43:01 -0700 Subject: [PATCH 2/4] Implemented resolve_path function and revised application function --- .gitignore | 1 + bookapp.py | 39 ++++++++++++++++++++++++++++++++++++--- 2 files changed, 37 insertions(+), 3 deletions(-) create mode 100644 .gitignore diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..ed8ebf5 --- /dev/null +++ b/.gitignore @@ -0,0 +1 @@ +__pycache__ \ No newline at end of file diff --git a/bookapp.py b/bookapp.py index d2284c6..0ca4fd5 100644 --- a/bookapp.py +++ b/bookapp.py @@ -1,4 +1,5 @@ import re +import traceback from bookdb import BookDB @@ -13,11 +14,43 @@ def books(): return "

a list of books

" +def resolve_path(path): + funcs = { + '': books, + 'book': book + } + + path = path.strip('/').split('/') + + func_name = path[0] + args = path[1:] + try: + func = funcs[func_name] + except KeyError: + raise NameError + return func, args + + def application(environ, start_response): - status = "200 OK" headers = [('Content-type', 'text/html')] - start_response(status, headers) - return ["

No Progress Yet

".encode('utf8')] + try: + path = environ.get('PATH_INFO', None) + if path is None: + raise NameError + func, args = resolve_path(path) + body = func(*args) + status = '200 OK' + except NameError: + status = '404 Not Found' + body = '

Not Found

' + except Exception: + status = '500 Internal Server Error' + body = '

Internal Server Error

' + print(traceback.format_exc()) + finally: + headers.append(('Content-length', str(len(body)))) + start_response(status, headers) + return [body.encode('utf8')] if __name__ == '__main__': From f14c2f415eff6de4024cbb9ef92829feecf9503d Mon Sep 17 00:00:00 2001 From: GerardoP Date: Tue, 29 Sep 2020 13:29:01 -0700 Subject: [PATCH 3/4] Implemented books function. --- bookapp.py | 8 +++++++- 1 file changed, 7 insertions(+), 1 deletion(-) diff --git a/bookapp.py b/bookapp.py index 0ca4fd5..0f4b780 100644 --- a/bookapp.py +++ b/bookapp.py @@ -11,7 +11,13 @@ def book(book_id): def books(): - return "

a list of books

" + all_books = DB.titles() + body = ['

My Bookshelf

', '
    '] + item_template = '
  • {title}
  • ' + for book in all_books: + body.append(item_template.format(**book)) + body.append('
') + return '\n'.join(body) def resolve_path(path): From cbb0365a813362546cc4448cc62e0327c1b7da5c Mon Sep 17 00:00:00 2001 From: GerardoP Date: Tue, 29 Sep 2020 14:16:19 -0700 Subject: [PATCH 4/4] Implemented book function. --- bookapp.py | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/bookapp.py b/bookapp.py index 0f4b780..af45995 100644 --- a/bookapp.py +++ b/bookapp.py @@ -7,7 +7,19 @@ def book(book_id): - return "

a book with id %s

" % book_id + page = ''' +

{title}

+ + + + +
Author{author}
Publisher{publisher}
ISBN{isbn}
+ Back to the list + ''' + book = DB.title_info(book_id) + if book is None: + raise NameError + return page.format(**book) def books():