From 8417c43ee56788feb79c43e4e1c054535940e692 Mon Sep 17 00:00:00 2001 From: mmanc125uw Date: Wed, 16 Sep 2020 13:49:22 -0400 Subject: [PATCH] sp_py230 lesson 4, practice activity,, test results --- __pycache__/bookapp.cpython-37.pyc | Bin 0 -> 1993 bytes __pycache__/bookdb.cpython-37.pyc | Bin 0 -> 1579 bytes __pycache__/tests.cpython-37.pyc | Bin 0 -> 5870 bytes bookapp.py | 66 ++++++++++++++++++++++++++--- do_Testing.bat | 4 ++ testing_results.txt | 21 +++++++++ wsgi_1.py | 13 +++--- 7 files changed, 89 insertions(+), 15 deletions(-) create mode 100644 __pycache__/bookapp.cpython-37.pyc create mode 100644 __pycache__/bookdb.cpython-37.pyc create mode 100644 __pycache__/tests.cpython-37.pyc create mode 100644 do_Testing.bat create mode 100644 testing_results.txt diff --git a/__pycache__/bookapp.cpython-37.pyc b/__pycache__/bookapp.cpython-37.pyc new file mode 100644 index 0000000000000000000000000000000000000000..730cce4aaa5f9ca88282cce986e66a03ba4d623a GIT binary patch literal 1993 zcmZ`)OOF#r5bo}Ics#Zjgu(_m5Ni`f_z=7yixeTp3g#gY!mP59fYC;yS$BIq?0ClM zX)kLtlLJn!C_f+v`9P|{XcS3jzz`>U_Yy+*?&XoH6b{=7oS zUwU%dOeo)?r!fR4oJPc3kJO`>vxtoi&!9vY3*wpF;O5W7v$(}=j5e=u2V;d-xr@;e zRbD${@)<1akvpz=HCWbogKr3DVR&^>Up7{R;yZh!b>=m`N%}2X*u5k`DSz6i=W3^0L^|31AtJ&3||B;GTaoG$&J&HcSz z|DFFZJ&4~wiJkSOIze+J#qgW0_ExtS433&AX{wQE;(Myo4!Um3EZFT{;g&D*!+4k! z)qXG*cce^YVGk2I4phr1DhI&O54mSffSQJzIM7bgl0;RLy40a2E!PKFFPo;3 zja~-q9uys{70D4e&JI~lxskJz%Ne;%e%Q>7j4lzxGH}K#x}uc)cj1sk{}4tung`bHXyw!=q?mH0m#oI4Jo^QS5K!Awi(A?^@VNp=G zWl7Dj!Y(mQ3mZ=rF_-!Uh50NA*zV(g<&qCkoA{Uy3`M=QW`6lZlcSxSow$I7A6|n60v)|hRa;g8Ua6614X5!S^{RUCWALyr19=FH^umXD z)TKz1=vesL^i#M=KY}2PQO7vT99oA~ryJB|@)FhuOz)y;VCv{4IDbIl^bmPJ&t^LS z2UUra6$6covJPx1`jRS^84J44ax=H^Z0i-tZIG@4czS?`0-h&pc(|EYxRu+0=n8fW z?ELh0$Hq=2x0R`^rM)5xP;m|9W7NcqEm7^1qpF#`pbI)ga41NdRWi0<(Cnqlt1H|T zfV%*EUcZ&ZO2q05HJgZeRf!YT9;tEURd;WGf6u?)zx!xzU)$bpK6)^3>}>Be`-y7a zO{OuQpVOTGXSyc*#p^hFA0A~KM9n=RkA-ZOA(~&-$NzI{ZMt!KlSsseYE+n0HT=3& zD~v;-%J`P}7u7o_12Iuy5*OA)hOsKDN(KXQfWlO`>r&&3lYwj?CWQgM6b3vNwulD_ z7cHl#i1;{^N$hQ;Dv-(t0VYYD3a>H}0T(irAH!7Y6ppa(~TS6pHJ!|UwzIR^NOw{kIX^6UT`UQCf z=RG5p$6llSrVs1{!u8$@bxoCJ)o?oFgirAgr86?!guts literal 0 HcmV?d00001 diff --git a/__pycache__/bookdb.cpython-37.pyc b/__pycache__/bookdb.cpython-37.pyc new file mode 100644 index 0000000000000000000000000000000000000000..3a662628969a7735fd1b7f5ed4ea49dc1c0f044e GIT binary patch literal 1579 zcmaJ=OK%%D5Z+xqB0IKICutf31Sb!w#O7cUlYebfk7(s0dk&B>$g9WvuBtpBS zLawZ8;hd6d551>AbL?Nzwf`cg4!O4L^iT>Mj+Qf=`M#MsTwPtZVEtiZ-^p9n-}=w> zS_0)MY;^|Wg+(l4e}Mho=~=`f8ImPAlK+?`cSwOOk!7RbB`ai=tQq|t`HHNQ`$m62 z9+I!gBcp%wG1s%n*e%%V5s1_;w*Is~S#9gR{m#C$!83F6g$qEoy4nSS7+ROso5%0$*t)c1 zFy8>kuSX@1bPG|*xpLETR7@VMursq%-IE%ip6u(k-UWyS%F9ekd<;izfWVB#L^qiDXmj;3p^ejy| zS=VK8%Yd>BoHusLwPf}56=h*KN5_B*C*@{He??H67^=WZsL45ovR_cH0tx(VN(4U*K(Mig-1VFW0H8$?v@q32RW=%tuSU?Rd?7vdNzU_Qm_R$Xt~+pbpYNu@~$ zgE23^rYfYGX)yq{;eS}GodG8QP@uh=)jD_CVX03b8P*~Xa4{E2T&lGtpET3 literal 0 HcmV?d00001 diff --git a/__pycache__/tests.cpython-37.pyc b/__pycache__/tests.cpython-37.pyc new file mode 100644 index 0000000000000000000000000000000000000000..e9d5b3b2ab63ed8cb103073e7db352e0a2db0a94 GIT binary patch literal 5870 zcmbVQU2_xH8Q!zIlGa8B*APAuLR1I@QDRe|9YT`~frNH?p)d&iGXz zwyb}#k^NlUJirwVAOb5;eXDK#-U{r%`MVW3p|z!6J8c_J+@OLdmC#1pLAx5%(5^|_ zMcWG&&|Z*s1?|P)1llL0T@7nNecRSsp>^mTSqkfXZ#9?xjWw-Smood=xOsppIu8+A zZ53E;J5X)M?5OPqE=E?8QxAv3?XPxspN3KVs1t?bGtp*8he6}{XwZ#&!$GIti(hpW zX5o+1@_K|TItvk~!0uZ+>Od)Lq9&Ga2NouFTAD+eD)E9&+}Xg)O(&^tV6k9BJLpR6 zV54a#ZWQ*P%Y%Pfx`yXJ-FtL@{VRX;%ai%0xQF-Vn}U>RR}2-}RYQSx z&6vLJ1$7!ZIZ0K%ewbV8f+*g2KGcnPGi(@a8{J_L&NtTzmY+7)>uFO}%>qqZQzLx} z0{7MIen$1Aw$s@Tza4~puK@h)^e$J^m!`HOSIk%}`GYzk^l4{(G!Gh#OCyGKHe?xmEPCp!I&YSKyS?Y9Sbol1w*}b19 zc7CUy_4_)EM|uzjr!hsL%qKI-95*W0jyuS;`x6>v?e-r})YsNuzC5t0=LGI}0sULf zcJ+wfV+ZyH>wtPYrtbp62cEci+nqQQmssqrJTrJWt;FsHNk#Naq0zs}CvK4gEzWHCWehxU>6S`ngk`#=d~4rt;|)R8)H_TQg4fO18^sZ897Z9v?+@ytS> zJ=K>2y!SYT&Q60D^CN-qv~BEzsn0oCsf;9HEJDR}MbC<^^vpx?(ceE}kI zw!>Gma2akDQ~2HC&Tc=9!;df`#p|p(X)mf3T;sVMn=?8GjLw;J?6+v_-vVIbK~Vd0 z4i^ACgf9`UltH#IsGht0DhZOWJeThQ&;tF4q+6IEol+Ls28g@)=SlH3TR1rC6 zff*-{;l+OsYc&@%)2u#0L3ZgS3fbO!y!(KnL2;Ra@xCM^DxbtN4i&T+l|2`Kp0}vk zGe0^%K+pddor5Jr?}gwbqSUG6^mk!2?7s}3bmGmYSyH`14~p_ot<5X`F5bx#ZI`Kp zKW4`~$I@T(pbh_@*o=--8Ma=Y4k=Yk*4f?FA7gCOF?MvhmOPokDmmX}7|hbWKNM&!%vIg0ekh)lHXx^l_>yYt|C+cY_hgpjll7|Hqo z1s78b-5byWJharrsapb^O@fSXmw_7$8&m}X;H1f}AY_gfy|#rMTHs;=fhHu0OPUBU zvyezJ;!i;`82ViC3k)=Iz!oGveK#c1(K!T+Bsr7*fJT`~F*53wbLeI%;{av%VP#^c zv9CID1Sa>O0+?z@7a7A?S-5$v>e7nig*ECf}Be{W5UX0xrEq-Rb)!sM2agpc0gBvY#n+ z7Nx6iK&clXM+?dRh>^zOGLSy|A3-YS%28qvCQ@Pp#)!=8V))(`0`ZZP7N>S=d}?hl zjMrY`xD>20?%=pnH-*@DonC};b)kjR#y47{cA|4-m9=O;!;FuN&Yd77hD=~iDJ+7!a*03rH2gOPqTD-k@ytpl&nW9J+Mxhj|+%x$YOKJM>=3>VjO?<)UVFN@|LRrou77 zW1d z^XYtNVeEW2XW^$Kem8*AoJi`_eOy(4JSOjyQ+7Ntrs5 ztmh>kQ`OKTX#361%P{qYXh2JE>&(XY_Rx{cp%!(^B$9n zkR46Y7~wQ4$GZ%Om|vh?Au8pn~+t=lo2$(?JaOn+t7kH0Z_LO5$bs%I8Ko)k?ON nC?W%8M~Ta^^A=6K&&@Z_FBMmoa 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')] + headers = [("Content-type", "text/html")] + 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/do_Testing.bat b/do_Testing.bat new file mode 100644 index 0000000..6497dbb --- /dev/null +++ b/do_Testing.bat @@ -0,0 +1,4 @@ +python -m unittest -vv tests.py > testing_results.txt 2>&1 +type testing_results.txt + + diff --git a/testing_results.txt b/testing_results.txt new file mode 100644 index 0000000..b0e8470 --- /dev/null +++ b/testing_results.txt @@ -0,0 +1,21 @@ +test_all_titles_correct (tests.BookDBTestCase) ... ok +test_all_titles_returned (tests.BookDBTestCase) ... ok +test_title_info_complete (tests.BookDBTestCase) ... ok +test_title_info_correct (tests.BookDBTestCase) ... ok +test_all_ids_have_results (tests.BookTestCase) ... ok +test_bad_id_raises_name_error (tests.BookTestCase) ... ok +test_id_returns_correct_results (tests.BookTestCase) ... ok +test_all_book_ids_in_result (tests.BooksTestCase) ... ok +test_all_book_titles_in_result (tests.BooksTestCase) ... ok +test_bad_path_raises_name_error (tests.ResolvePathTestCase) ... ok +test_book_path_returns_book_function (tests.ResolvePathTestCase) ... ok +test_book_path_returns_bookid_in_args (tests.ResolvePathTestCase) ... ok +test_root_returns_books_function (tests.ResolvePathTestCase) +verify that the correct function is returned by the root path ... ok +test_root_returns_no_args (tests.ResolvePathTestCase) +verify that no args are returned for the root path ... ok + +---------------------------------------------------------------------- +Ran 14 tests in 0.006s + +OK diff --git a/wsgi_1.py b/wsgi_1.py index 85498d1..fc1f9da 100644 --- a/wsgi_1.py +++ b/wsgi_1.py @@ -21,21 +21,18 @@ 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' - response_headers = [('Content-Type', 'text/html'), ('Content-Length', str(len(response_body)))] start_response(status, response_headers) - return [response_body.encode('utf8')] - if __name__ == '__main__': from wsgiref.simple_server import make_server srv = make_server('localhost', 8080, application)