From 20550a45ecb6a17208ebc9bf15871e63eec636c4 Mon Sep 17 00:00:00 2001 From: Alexander Boone Date: Sat, 4 Apr 2020 18:40:50 -0700 Subject: [PATCH] created multi-page wsgi-based web application --- __pycache__/bookdb.cpython-37.pyc | Bin 0 -> 1612 bytes bookapp.py | 60 ++++++++++++++++++++++++++++-- wsgi_1.py | 11 +++--- 3 files changed, 62 insertions(+), 9 deletions(-) create mode 100644 __pycache__/bookdb.cpython-37.pyc diff --git a/__pycache__/bookdb.cpython-37.pyc b/__pycache__/bookdb.cpython-37.pyc new file mode 100644 index 0000000000000000000000000000000000000000..eef1c32dae980ea67a9e530bc7a3df4f94067971 GIT binary patch literal 1612 zcmaJ=OK%%D5Z+xqB0IKICutf31ScN6*O7cUlYebJYZcsZ$WW#`<8o_`I0;`_E#S=ZJRu9S@|^|{`uxOU_AvjIEvh!?R zh*7id+u*8?j!l6yK-42pNnB+8VSlum);s&HeQ85v>iDw|fNZsN2m&>*F0G#*zqKRl z(vHA=4IqQqzd64}ng{AtNMaD8ew zb~|T^O4Y#u{RMZLRE;7r?wp->%BX;Tb(4S|M08@9Oa^NJFKxsrO4a#!vJMr>o34EPaAAM^d(+3@;J8%h|{OACI z_VIPr)PP1{-vtjt)qfJs7fl^q#`{8#p@C)D@#^iY=JhzAndiD)jzik*&KJAgP>@NW z?WJz_%>)O@i$Ne)bUNLVTgu?mW28$r_;PkGEA=n&4~-#}a&|I9&y=D(V!+`pdWFY~ zTy+PX(;ljg#{u(k!~{o8dO-s*4#7KKsc!ESysBH-@w}bNPWMpMz zVd)Q1+1o%R*WJ#?4_mX~0z>l;X%NtXnCSO>+RR!z%~X%K7sg3EmF+B^z=+7Wo{S3W z3yE5yA5F2OP>Es#zKagU6h#7^Lc$UHiH#`2r~&gbfvH0+pJ`m`s#tfk|5QP9)EL1Mgw+4@5u&gQD1O^o+Ty6tGX?20Z?9Y_(P7h(eY zJqt0{jX1&zm`|{}CD+^Xwo0W+T&xkoV8sjPR0UKsE&9MUu!aM){?dYHkXNk& z&ucYKB%Pwe3BRf5bSOfs@|kvu5l^dh($ literal 0 HcmV?d00001 diff --git a/bookapp.py b/bookapp.py index d2284c6..48d519b 100644 --- a/bookapp.py +++ b/bookapp.py @@ -1,4 +1,5 @@ import re +import traceback from bookdb import BookDB @@ -6,18 +7,69 @@ 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(): - 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): + 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__': diff --git a/wsgi_1.py b/wsgi_1.py index 85498d1..7b84518 100644 --- a/wsgi_1.py +++ b/wsgi_1.py @@ -1,5 +1,6 @@ #!/usr/bin/env python import datetime +import os default = "No Value Set" @@ -21,11 +22,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', default) ) status = '200 OK'