From bda7143fff038d997a4c3fffc2975a092d84beff Mon Sep 17 00:00:00 2001 From: b_galloway Date: Tue, 19 Jan 2021 14:22:03 -0800 Subject: [PATCH] submitting for review --- __pycache__/bookapp.cpython-39.pyc | Bin 0 -> 846 bytes __pycache__/bookdb.cpython-39.pyc | Bin 0 -> 1588 bytes bookapp.py | 64 ++++++++++++++++++++++++++--- wsgi_1.py | 12 +++--- 4 files changed, 64 insertions(+), 12 deletions(-) create mode 100644 __pycache__/bookapp.cpython-39.pyc create mode 100644 __pycache__/bookdb.cpython-39.pyc diff --git a/__pycache__/bookapp.cpython-39.pyc b/__pycache__/bookapp.cpython-39.pyc new file mode 100644 index 0000000000000000000000000000000000000000..d74eb93353a1e717ab01261d72897895cb723802 GIT binary patch literal 846 zcmZ8e%Z}496t$f+k3L2S2{d9e*|6whre)Z$s79zWJEVfd3NHwm*lnXGab&w4T6I?C z1NelQC4a$pWXpn>$M5QcjA6JW`z8}#bLOxcnzQV2uTn@ zbHZ_EIV~7xlt{KC+!2m&zYy+1s6z+Xb`n{jPK_-1#dt;>*SL2l8#-Bh83dtpWCV(X9mOLd;$0nO+qxp-AB)W#O z=q9uCC==0hGaA6|Hv$*>_$SVUcA&6HzfK0KvV&@E=c+tCe>oi7m{~T!b4gX5RqNVC zj6?=$3Dq9t6yaf@tVR+#)jR{_9Pj1inX!?YHnR3&{_!867F5p^E?rddmcx(OYLrw`}X|pdZ4yBf`C>Gjy~y*?8x}Vf6M*pKZFAsV* zO=#t3JDA%d->aRd=$%$GEscpjNZVLfyGuKLh5e9as)X#jwJ*z6rd7$0j7_wS;e4e^ zBWn-Vc4@djmx++t{QtfVxSD5aVl!1f0_{x;33aJQ+f?Jb>mZJcBrD?>7&}F>kg<_^ zB{dIol_vRI8Jm4QA*A1}nFdC5Ok8WUh_kD4(;tnl{k^VC3K_@z3AR?t>6yujDu1|E wA7Py=-J@lSKbL?C6C3?}dhrUBmpdC_j>a>?q;Oy*jhBMzcGr}t?OAf4Goa}eM z<{alY^KyMH!pnWw>H@?ghd9K21N*htbcjbXBujF{f14!>Bu^H}lGSgJWwJt6t$vey zMApd1R{wqU&5b zFYdf@wR7oea9IcVu-zZLAHA1ZxWJp{G}AE!#bZR8xS(bUi}W;4u*Pky>|rU8CZV4l zxd4wpzStB4y*ZfZp5VoDCD zqaKxVayCH^l%iZS;BpT=#REprnJo=^PTQzH7{n~XnhA~?bVOq@NWeN>t?ldcGtNd-DyApsOj4!3Mj@hvS-f)u;kHFk zE2KB;kT^$&CDagOPA6&Mp%`-LbYMpz(YYe-lI4#y=`aOc$Xs80)Ky}VBlzl|GiX`y6ff{%OJy2H> zG)P*x=uyCdy9uC--Xo%N4?UD3L65~y0uu@5rVuAs0rNAgK{*Jw!|igpnwIK>Fa^W@ zoT``_rbP$12G($l?mdaLFrX{J1`2C6;Ca2yiKJt6Jml~5x#)=mt3s}sVI(x7Y(&L~ ssu5de{!C}vzkq8)U}wTi!Zg1>8=wO_4psQHy6U<1_h)wDe`>$~4Q+3gTmS$7 literal 0 HcmV?d00001 diff --git a/bookapp.py b/bookapp.py index d2284c6..c581df0 100644 --- a/bookapp.py +++ b/bookapp.py @@ -1,23 +1,75 @@ import re - +import traceback from bookdb import BookDB DB = BookDB() 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: + print(f"Func name: {func_name}\nArgs: {args}") + 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..56aaedd 100644 --- a/wsgi_1.py +++ b/wsgi_1.py @@ -1,5 +1,5 @@ #!/usr/bin/env python -import datetime +import os, datetime default = "No Value Set" @@ -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'), + 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'