From 983312ab02677aaa22ca40e36a4c236cfe159170 Mon Sep 17 00:00:00 2001 From: Piyush Raj Date: Mon, 22 Jul 2019 06:42:10 +0530 Subject: [PATCH 1/4] Homework done --- week-0/day-1/piyush_raj_script.sh | 50 +++++++++++++++++++++++++++++++ 1 file changed, 50 insertions(+) create mode 100644 week-0/day-1/piyush_raj_script.sh diff --git a/week-0/day-1/piyush_raj_script.sh b/week-0/day-1/piyush_raj_script.sh new file mode 100644 index 00000000..5947894c --- /dev/null +++ b/week-0/day-1/piyush_raj_script.sh @@ -0,0 +1,50 @@ +url='https://wallpapercave.com/dark-knight-hd-wallpaper' +durl='https://wallpapercave.com' + +echo "Getting content of webpage" +content=$(wget $url -q -o -) + +echo "Getting img tags out of webpage" +imgs=($(grep -oE "" <<< $content)) +images=() + +echo "Creating links" +for i in ${imgs[@]} +do + arr=($(grep 'src=/wp' <<< $i)) + len=${#arr[@]} + if ["$len" -ne 0 ] + then + loc=`echo "$i" | cut -d '"' -f 2` + images+=($durl$loc) + fi +done + +echo "Making Download directory" +mkdir -p piyush_raj_download + +for i in ${images[@]} +do + echo "Downloading image: "$i + wget -P ./piyush_raj_download $i +done + +echo "All images downloaded" + + + + + + + + + + + + + + + + + + From 285ba0832f66a1e4aa8b32fc7349fb03faef7dc7 Mon Sep 17 00:00:00 2001 From: Piyush Raj Date: Mon, 22 Jul 2019 20:22:03 +0530 Subject: [PATCH 2/4] ready to begin --- week-0/day-3/my_todo_app/.gitignore | 2 - week-0/day-3/my_todo_app/todo_app/__init__.py | 72 ------------------ .../day-3/my_todo_app/todo_app/__init__.pyc | Bin 1920 -> 0 bytes .../__pycache__/__init__.cpython-36.pyc | Bin 2047 -> 0 bytes .../my_todo_app/todo_app/templates/404.html | 2 - .../todo_app/templates/todo_view.html | 7 -- 6 files changed, 83 deletions(-) delete mode 100644 week-0/day-3/my_todo_app/.gitignore delete mode 100644 week-0/day-3/my_todo_app/todo_app/__init__.py delete mode 100644 week-0/day-3/my_todo_app/todo_app/__init__.pyc delete mode 100644 week-0/day-3/my_todo_app/todo_app/__pycache__/__init__.cpython-36.pyc delete mode 100644 week-0/day-3/my_todo_app/todo_app/templates/404.html delete mode 100644 week-0/day-3/my_todo_app/todo_app/templates/todo_view.html diff --git a/week-0/day-3/my_todo_app/.gitignore b/week-0/day-3/my_todo_app/.gitignore deleted file mode 100644 index 99fa7e12..00000000 --- a/week-0/day-3/my_todo_app/.gitignore +++ /dev/null @@ -1,2 +0,0 @@ -venv -venv/* diff --git a/week-0/day-3/my_todo_app/todo_app/__init__.py b/week-0/day-3/my_todo_app/todo_app/__init__.py deleted file mode 100644 index 86fb09d8..00000000 --- a/week-0/day-3/my_todo_app/todo_app/__init__.py +++ /dev/null @@ -1,72 +0,0 @@ -import os - -from flask import Flask -from flask import request - -from flask import render_template - -# our fake db -todo_store = {} -todo_store['depo'] = ['Go for run', 'Listen Rock Music'] -todo_store['shivang'] = ['Read book', 'Play Fifa', 'Drink Coffee'] -todo_store['raj'] = ['Study', 'Brush'] -todo_store['sanket'] = ['Sleep', 'Code'] -todo_store['aagam'] = ['play cricket', 'have tea'] - -def create_app(test_config=None): - # create and configure the app - app = Flask(__name__, instance_relative_config=True) - - # ensure the instance folder exists - try: - os.makedirs(app.instance_path) - except OSError: - pass - - def select_todos(name): - global todo_store - return todo_store[name] - - def insert_todo(name, todo): - global todo_store - current_todos = todo_store[name] - current_todos.append(todo) - todo_store[name] = current_todos - return - - def add_todo_by_name(name, todo): - # call DB function - insert_todo(name, todo) - return - - def get_todos_by_name(name): - try: - return select_todos(name) - except: - return None - - - # http://127.0.0.1:5000/todos?name=duster - @app.route('/todos') - def todos(): - name = request.args.get('name') - print('---------') - print(name) - print('---------') - - person_todo_list = get_todos_by_name(name) - if person_todo_list == None: - return render_template('404.html'), 404 - else: - return render_template('todo_view.html',todos=person_todo_list) - - - @app.route('/add_todos') - def add_todos(): - name = request.args.get('name') - todo = request.args.get('todo') - add_todo_by_name(name, todo) - return 'Added Successfully' - - return app - diff --git a/week-0/day-3/my_todo_app/todo_app/__init__.pyc b/week-0/day-3/my_todo_app/todo_app/__init__.pyc deleted file mode 100644 index 45e35a62304fd57942e8da34ed12d0253d261011..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1920 zcmcgtUvJws5I<6O{+S<=cPG#L1eq*S$Jl9n1uOv0 z+p&a&fTe_U34(MH&m%aGa4tZ1;H`l3E^V3&yJ(>J8=vt|;4skq*+TiUoo?gQnX8rY zAt!x=jh4{YUtt&UMVkVGgx`dCBcM5i5W!^!ZUtO+Q3&E?wGW-J1!WK1BM?GV0$yne zZvpPcVT0hMNIwP>q-& zhNT2|pYTGAW)dbO?XWbVSm`a$+c1k-#SSY*pm#y{Hp}m^^cT>5(0d!{2Q0k;{UPW9 zOJ^88jcrISju|CwYRk@^+IVVR>{it#G^UDEo0stqD_`V+n7c;K(|uE;bbMiL$+Mpp zs)?T!Q|0@pJ8?x-#!u~ZY7BB0DX%U$R+F&O4UfKaD?djHqfu3rCba5>F*W=3)M~>b zrDkf$Mr%4EcSVk?J%xL&u1y?_YNO2AMuD%?()?e6Cm?4gFg<*B(PVV^Cv>U%*n#LH z1^P&W_DkcQ^mJ+FkyKl9C45bqDw#77sDO$0vm9uXN+`~FYlFs}0uiWyTcNr~e{8wv|ag!xil{$jse`k|S}vw0gBLPl$ZX`@S5A GLG%xQ{;XdB diff --git a/week-0/day-3/my_todo_app/todo_app/__pycache__/__init__.cpython-36.pyc b/week-0/day-3/my_todo_app/todo_app/__pycache__/__init__.cpython-36.pyc deleted file mode 100644 index 7f86b4e6006f81666b1b72b7af94a9502166c1bf..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 2047 zcmZuy&u`l{6ecOjmL1!1(kx4d{qSKO<^hR=wa1{y)~&m2S<$RmCtwg*k+x;al1I`B zEF`A{$U306{S*6-1|4?UY5&4bdyjG)r;7|yA1R9Z-uJ#oKWsMZfBpIC&&?_!f0LEV z0elEepFt;xpa}`^&JsFd0i%c=z)s*;>;iTJmy(!pPk5p-V8#>G10sA;6ZL@uqcs>c zMAJTL0bUnvi#GsoihCAs0e)A!BepMTP!aT)ba(y%2IQzq3-4*d^%y`^$zNtt8-VLd zrb4RF$jLO}M&|WzvQ9r!9W_hyjc;RZWZHS2MdQwQGaW~PE95lGYtJPYomW{l&TG#S zKJPq@`#f)arQ&qld6M<}QU+B$j8Awv2)tu66Z63PQqA-*a1|D+e$r4w%9|6|r_f zuPDrc@|XSvJ!f{d1+xTZAqRFAz6n}y9Q^>A?!>7!JdI?iBxo9+$S}&%emq#lfUz)W z#~6ceV>l!CVc4aZsJh8S7HX3z2_rY<6Zr>GxbEMVy%$<4-CKy;JI&NsPkAJJJmNx5 z=DR~4jky_SY423Z@$P<4@cHh;-eexyUHNp{TY@l*)7XUJ-gI6xv`l1V>?-{p5<`ZB z<&Y8y&IsYny@Mo+c%mQgtuBu2LRgC_!Dhqy5P%^V7D&cMASR~djNu%ZbP+656r79odx2%qY`Ls@bntyZ`>6JH@oRK?n zzK2`1p!*g00ash1HX-(#U1pgnbY7RLCfruIw7C$ayszdVrt1OjhE64{PVKt;GhHj*5Ub$eyR<_&!K4qgf&1h_<_ZI+F<$p zyOgs8@_O$&ySEiv8toI<@0MbvdZ5}lT``~o26Rgutn>2CFNBbyb3BV8sdayrBy*@4 z+*WO1w+Y=_Rz*+W#8lLl%nsqfqG%el0cDeaa92dj_1&t%tQUT0Egpsi%XHyS_*jZq z>7uzj_NH+D6xHvKzg8+!g{QKakzF@fGw`3YI0_2~D&7jLwyp_wU1iDIEZ7ROezw(K zzoCZ7&{!9c5r@$>ZP5zzUBBA!8vb@`yQ*N2PC0|N~Hn8W8U0I5Q gr|XJL{=p;@vqV0|qgo?HAM)RTFS?*r3mT6811jU(rT_o{ diff --git a/week-0/day-3/my_todo_app/todo_app/templates/404.html b/week-0/day-3/my_todo_app/todo_app/templates/404.html deleted file mode 100644 index 242cff84..00000000 --- a/week-0/day-3/my_todo_app/todo_app/templates/404.html +++ /dev/null @@ -1,2 +0,0 @@ -

404

-

Record not found

diff --git a/week-0/day-3/my_todo_app/todo_app/templates/todo_view.html b/week-0/day-3/my_todo_app/todo_app/templates/todo_view.html deleted file mode 100644 index 24236a13..00000000 --- a/week-0/day-3/my_todo_app/todo_app/templates/todo_view.html +++ /dev/null @@ -1,7 +0,0 @@ -List of my todos:
- -{% for todo in todos %} -{{todo}}
-{% endfor %} - ----- LIST ENDS HERE --- From 5ed0b8680e93f5af798b7dde389f76ff81046d06 Mon Sep 17 00:00:00 2001 From: Piyush Raj Date: Tue, 23 Jul 2019 00:29:36 +0530 Subject: [PATCH 3/4] Made complete Todo_app --- week-0/day-3/my_todo_app/todo_app/__init__.py | 39 + .../__pycache__/__init__.cpython-36.pyc | Bin 0 -> 1161 bytes week-0/day-3/my_todo_app/venv/bin/activate | 76 + .../day-3/my_todo_app/venv/bin/activate.csh | 37 + .../day-3/my_todo_app/venv/bin/activate.fish | 75 + .../day-3/my_todo_app/venv/bin/easy_install | 11 + .../my_todo_app/venv/bin/easy_install-3.6 | 11 + week-0/day-3/my_todo_app/venv/bin/flask | 11 + week-0/day-3/my_todo_app/venv/bin/pip | 11 + week-0/day-3/my_todo_app/venv/bin/pip3 | 11 + week-0/day-3/my_todo_app/venv/bin/pip3.6 | 11 + week-0/day-3/my_todo_app/venv/bin/python | 1 + week-0/day-3/my_todo_app/venv/bin/python3 | 1 + .../Click-7.0.dist-info/INSTALLER | 1 + .../Click-7.0.dist-info/LICENSE.txt | 39 + .../Click-7.0.dist-info/METADATA | 121 + .../site-packages/Click-7.0.dist-info/RECORD | 40 + .../site-packages/Click-7.0.dist-info/WHEEL | 6 + .../Click-7.0.dist-info/top_level.txt | 1 + .../Flask-1.1.1.dist-info/INSTALLER | 1 + .../Flask-1.1.1.dist-info/LICENSE.rst | 28 + .../Flask-1.1.1.dist-info/METADATA | 134 + .../Flask-1.1.1.dist-info/RECORD | 48 + .../site-packages/Flask-1.1.1.dist-info/WHEEL | 6 + .../Flask-1.1.1.dist-info/entry_points.txt | 3 + .../Flask-1.1.1.dist-info/top_level.txt | 1 + .../Jinja2-2.10.1.dist-info/INSTALLER | 1 + .../Jinja2-2.10.1.dist-info/LICENSE | 31 + .../Jinja2-2.10.1.dist-info/METADATA | 67 + .../Jinja2-2.10.1.dist-info/RECORD | 61 + .../Jinja2-2.10.1.dist-info/WHEEL | 6 + .../Jinja2-2.10.1.dist-info/entry_points.txt | 4 + .../Jinja2-2.10.1.dist-info/top_level.txt | 1 + .../MarkupSafe-1.1.1.dist-info/INSTALLER | 1 + .../MarkupSafe-1.1.1.dist-info/LICENSE.txt | 28 + .../MarkupSafe-1.1.1.dist-info/METADATA | 103 + .../MarkupSafe-1.1.1.dist-info/RECORD | 16 + .../MarkupSafe-1.1.1.dist-info/WHEEL | 5 + .../MarkupSafe-1.1.1.dist-info/top_level.txt | 1 + .../Werkzeug-0.15.5.dist-info/INSTALLER | 1 + .../Werkzeug-0.15.5.dist-info/LICENSE.rst | 28 + .../Werkzeug-0.15.5.dist-info/METADATA | 128 + .../Werkzeug-0.15.5.dist-info/RECORD | 119 + .../Werkzeug-0.15.5.dist-info/WHEEL | 6 + .../Werkzeug-0.15.5.dist-info/top_level.txt | 1 + .../__pycache__/easy_install.cpython-36.pyc | Bin 0 -> 275 bytes .../python3.6/site-packages/click/__init__.py | 97 + .../click/__pycache__/__init__.cpython-36.pyc | Bin 0 -> 2618 bytes .../__pycache__/_bashcomplete.cpython-36.pyc | Bin 0 -> 9076 bytes .../click/__pycache__/_compat.cpython-36.pyc | Bin 0 -> 16749 bytes .../__pycache__/_termui_impl.cpython-36.pyc | Bin 0 -> 13984 bytes .../__pycache__/_textwrap.cpython-36.pyc | Bin 0 -> 1297 bytes .../__pycache__/_unicodefun.cpython-36.pyc | Bin 0 -> 3329 bytes .../__pycache__/_winconsole.cpython-36.pyc | Bin 0 -> 8741 bytes .../click/__pycache__/core.cpython-36.pyc | Bin 0 -> 59865 bytes .../__pycache__/decorators.cpython-36.pyc | Bin 0 -> 11570 bytes .../__pycache__/exceptions.cpython-36.pyc | Bin 0 -> 8572 bytes .../__pycache__/formatting.cpython-36.pyc | Bin 0 -> 8515 bytes .../click/__pycache__/globals.cpython-36.pyc | Bin 0 -> 1844 bytes .../click/__pycache__/parser.cpython-36.pyc | Bin 0 -> 11433 bytes .../click/__pycache__/termui.cpython-36.pyc | Bin 0 -> 20782 bytes .../click/__pycache__/testing.cpython-36.pyc | Bin 0 -> 11586 bytes .../click/__pycache__/types.cpython-36.pyc | Bin 0 -> 21829 bytes .../click/__pycache__/utils.cpython-36.pyc | Bin 0 -> 15210 bytes .../site-packages/click/_bashcomplete.py | 293 + .../python3.6/site-packages/click/_compat.py | 703 ++ .../site-packages/click/_termui_impl.py | 621 ++ .../site-packages/click/_textwrap.py | 38 + .../site-packages/click/_unicodefun.py | 125 + .../site-packages/click/_winconsole.py | 307 + .../lib/python3.6/site-packages/click/core.py | 1856 ++++++ .../site-packages/click/decorators.py | 311 + .../site-packages/click/exceptions.py | 235 + .../site-packages/click/formatting.py | 256 + .../python3.6/site-packages/click/globals.py | 48 + .../python3.6/site-packages/click/parser.py | 427 ++ .../python3.6/site-packages/click/termui.py | 606 ++ .../python3.6/site-packages/click/testing.py | 374 ++ .../python3.6/site-packages/click/types.py | 668 ++ .../python3.6/site-packages/click/utils.py | 440 ++ .../python3.6/site-packages/easy_install.py | 5 + .../python3.6/site-packages/flask/__init__.py | 60 + .../python3.6/site-packages/flask/__main__.py | 15 + .../flask/__pycache__/__init__.cpython-36.pyc | Bin 0 -> 2086 bytes .../flask/__pycache__/__main__.cpython-36.pyc | Bin 0 -> 378 bytes .../flask/__pycache__/_compat.cpython-36.pyc | Bin 0 -> 4576 bytes .../flask/__pycache__/app.cpython-36.pyc | Bin 0 -> 74542 bytes .../__pycache__/blueprints.cpython-36.pyc | Bin 0 -> 22883 bytes .../flask/__pycache__/cli.cpython-36.pyc | Bin 0 -> 26254 bytes .../flask/__pycache__/config.cpython-36.pyc | Bin 0 -> 10123 bytes .../flask/__pycache__/ctx.cpython-36.pyc | Bin 0 -> 14284 bytes .../__pycache__/debughelpers.cpython-36.pyc | Bin 0 -> 6544 bytes .../flask/__pycache__/globals.cpython-36.pyc | Bin 0 -> 1690 bytes .../flask/__pycache__/helpers.cpython-36.pyc | Bin 0 -> 34528 bytes .../flask/__pycache__/logging.cpython-36.pyc | Bin 0 -> 3099 bytes .../flask/__pycache__/sessions.cpython-36.pyc | Bin 0 -> 12184 bytes .../flask/__pycache__/signals.cpython-36.pyc | Bin 0 -> 2363 bytes .../__pycache__/templating.cpython-36.pyc | Bin 0 -> 4942 bytes .../flask/__pycache__/testing.cpython-36.pyc | Bin 0 -> 8653 bytes .../flask/__pycache__/views.cpython-36.pyc | Bin 0 -> 4759 bytes .../flask/__pycache__/wrappers.cpython-36.pyc | Bin 0 -> 4252 bytes .../python3.6/site-packages/flask/_compat.py | 145 + .../lib/python3.6/site-packages/flask/app.py | 2466 +++++++ .../site-packages/flask/blueprints.py | 569 ++ .../lib/python3.6/site-packages/flask/cli.py | 970 +++ .../python3.6/site-packages/flask/config.py | 269 + .../lib/python3.6/site-packages/flask/ctx.py | 475 ++ .../site-packages/flask/debughelpers.py | 183 + .../python3.6/site-packages/flask/globals.py | 62 + .../python3.6/site-packages/flask/helpers.py | 1153 ++++ .../site-packages/flask/json/__init__.py | 376 ++ .../json/__pycache__/__init__.cpython-36.pyc | Bin 0 -> 11556 bytes .../flask/json/__pycache__/tag.cpython-36.pyc | Bin 0 -> 11055 bytes .../python3.6/site-packages/flask/json/tag.py | 309 + .../python3.6/site-packages/flask/logging.py | 109 + .../python3.6/site-packages/flask/sessions.py | 388 ++ .../python3.6/site-packages/flask/signals.py | 65 + .../site-packages/flask/templating.py | 155 + .../python3.6/site-packages/flask/testing.py | 283 + .../python3.6/site-packages/flask/views.py | 163 + .../python3.6/site-packages/flask/wrappers.py | 137 + .../itsdangerous-1.1.0.dist-info/INSTALLER | 1 + .../itsdangerous-1.1.0.dist-info/LICENSE.rst | 47 + .../itsdangerous-1.1.0.dist-info/METADATA | 98 + .../itsdangerous-1.1.0.dist-info/RECORD | 26 + .../itsdangerous-1.1.0.dist-info/WHEEL | 6 + .../top_level.txt | 1 + .../site-packages/itsdangerous/__init__.py | 22 + .../__pycache__/__init__.cpython-36.pyc | Bin 0 -> 972 bytes .../__pycache__/_compat.cpython-36.pyc | Bin 0 -> 1134 bytes .../__pycache__/_json.cpython-36.pyc | Bin 0 -> 827 bytes .../__pycache__/encoding.cpython-36.pyc | Bin 0 -> 1599 bytes .../__pycache__/exc.cpython-36.pyc | Bin 0 -> 3188 bytes .../__pycache__/jws.cpython-36.pyc | Bin 0 -> 6647 bytes .../__pycache__/serializer.cpython-36.pyc | Bin 0 -> 8002 bytes .../__pycache__/signer.cpython-36.pyc | Bin 0 -> 5763 bytes .../__pycache__/timed.cpython-36.pyc | Bin 0 -> 4529 bytes .../__pycache__/url_safe.cpython-36.pyc | Bin 0 -> 2518 bytes .../site-packages/itsdangerous/_compat.py | 46 + .../site-packages/itsdangerous/_json.py | 18 + .../site-packages/itsdangerous/encoding.py | 49 + .../site-packages/itsdangerous/exc.py | 98 + .../site-packages/itsdangerous/jws.py | 218 + .../site-packages/itsdangerous/serializer.py | 233 + .../site-packages/itsdangerous/signer.py | 179 + .../site-packages/itsdangerous/timed.py | 147 + .../site-packages/itsdangerous/url_safe.py | 65 + .../site-packages/jinja2/__init__.py | 83 + .../__pycache__/__init__.cpython-36.pyc | Bin 0 -> 2498 bytes .../jinja2/__pycache__/_compat.cpython-36.pyc | Bin 0 -> 3306 bytes .../__pycache__/_identifier.cpython-36.pyc | Bin 0 -> 1809 bytes .../__pycache__/asyncfilters.cpython-36.pyc | Bin 0 -> 4761 bytes .../__pycache__/asyncsupport.cpython-36.pyc | Bin 0 -> 8110 bytes .../jinja2/__pycache__/bccache.cpython-36.pyc | Bin 0 -> 12682 bytes .../__pycache__/compiler.cpython-36.pyc | Bin 0 -> 46863 bytes .../__pycache__/constants.cpython-36.pyc | Bin 0 -> 1672 bytes .../jinja2/__pycache__/debug.cpython-36.pyc | Bin 0 -> 9305 bytes .../__pycache__/defaults.cpython-36.pyc | Bin 0 -> 1422 bytes .../__pycache__/environment.cpython-36.pyc | Bin 0 -> 43233 bytes .../__pycache__/exceptions.cpython-36.pyc | Bin 0 -> 4982 bytes .../jinja2/__pycache__/ext.cpython-36.pyc | Bin 0 -> 20073 bytes .../jinja2/__pycache__/filters.cpython-36.pyc | Bin 0 -> 34380 bytes .../__pycache__/idtracking.cpython-36.pyc | Bin 0 -> 9911 bytes .../jinja2/__pycache__/lexer.cpython-36.pyc | Bin 0 -> 18535 bytes .../jinja2/__pycache__/loaders.cpython-36.pyc | Bin 0 -> 16542 bytes .../jinja2/__pycache__/meta.cpython-36.pyc | Bin 0 -> 3633 bytes .../__pycache__/nativetypes.cpython-36.pyc | Bin 0 -> 5096 bytes .../jinja2/__pycache__/nodes.cpython-36.pyc | Bin 0 -> 36630 bytes .../__pycache__/optimizer.cpython-36.pyc | Bin 0 -> 2002 bytes .../jinja2/__pycache__/parser.cpython-36.pyc | Bin 0 -> 25307 bytes .../jinja2/__pycache__/runtime.cpython-36.pyc | Bin 0 -> 24572 bytes .../jinja2/__pycache__/sandbox.cpython-36.pyc | Bin 0 -> 14168 bytes .../jinja2/__pycache__/tests.cpython-36.pyc | Bin 0 -> 4378 bytes .../jinja2/__pycache__/utils.cpython-36.pyc | Bin 0 -> 20835 bytes .../jinja2/__pycache__/visitor.cpython-36.pyc | Bin 0 -> 3318 bytes .../python3.6/site-packages/jinja2/_compat.py | 99 + .../site-packages/jinja2/_identifier.py | 2 + .../site-packages/jinja2/asyncfilters.py | 146 + .../site-packages/jinja2/asyncsupport.py | 256 + .../python3.6/site-packages/jinja2/bccache.py | 362 ++ .../site-packages/jinja2/compiler.py | 1721 +++++ .../site-packages/jinja2/constants.py | 32 + .../python3.6/site-packages/jinja2/debug.py | 372 ++ .../site-packages/jinja2/defaults.py | 56 + .../site-packages/jinja2/environment.py | 1276 ++++ .../site-packages/jinja2/exceptions.py | 146 + .../lib/python3.6/site-packages/jinja2/ext.py | 627 ++ .../python3.6/site-packages/jinja2/filters.py | 1190 ++++ .../site-packages/jinja2/idtracking.py | 286 + .../python3.6/site-packages/jinja2/lexer.py | 739 +++ .../python3.6/site-packages/jinja2/loaders.py | 481 ++ .../python3.6/site-packages/jinja2/meta.py | 106 + .../site-packages/jinja2/nativetypes.py | 220 + .../python3.6/site-packages/jinja2/nodes.py | 999 +++ .../site-packages/jinja2/optimizer.py | 49 + .../python3.6/site-packages/jinja2/parser.py | 903 +++ .../python3.6/site-packages/jinja2/runtime.py | 813 +++ .../python3.6/site-packages/jinja2/sandbox.py | 486 ++ .../python3.6/site-packages/jinja2/tests.py | 175 + .../python3.6/site-packages/jinja2/utils.py | 647 ++ .../python3.6/site-packages/jinja2/visitor.py | 87 + .../site-packages/markupsafe/__init__.py | 327 + .../__pycache__/__init__.cpython-36.pyc | Bin 0 -> 10933 bytes .../__pycache__/_compat.cpython-36.pyc | Bin 0 -> 725 bytes .../__pycache__/_constants.cpython-36.pyc | Bin 0 -> 4225 bytes .../__pycache__/_native.cpython-36.pyc | Bin 0 -> 2077 bytes .../site-packages/markupsafe/_compat.py | 33 + .../site-packages/markupsafe/_constants.py | 264 + .../site-packages/markupsafe/_native.py | 69 + .../site-packages/markupsafe/_speedups.c | 423 ++ .../_speedups.cpython-36m-x86_64-linux-gnu.so | Bin 0 -> 38875 bytes .../pip-9.0.1.dist-info/DESCRIPTION.rst | 39 + .../pip-9.0.1.dist-info/INSTALLER | 1 + .../pip-9.0.1.dist-info/METADATA | 70 + .../site-packages/pip-9.0.1.dist-info/RECORD | 123 + .../site-packages/pip-9.0.1.dist-info/WHEEL | 6 + .../pip-9.0.1.dist-info/entry_points.txt | 5 + .../pip-9.0.1.dist-info/metadata.json | 1 + .../pip-9.0.1.dist-info/top_level.txt | 1 + .../python3.6/site-packages/pip/__init__.py | 338 + .../python3.6/site-packages/pip/__main__.py | 19 + .../pip/__pycache__/__init__.cpython-36.pyc | Bin 0 -> 8498 bytes .../pip/__pycache__/__main__.cpython-36.pyc | Bin 0 -> 374 bytes .../__pycache__/basecommand.cpython-36.pyc | Bin 0 -> 7210 bytes .../pip/__pycache__/baseparser.cpython-36.pyc | Bin 0 -> 9271 bytes .../pip/__pycache__/cmdoptions.cpython-36.pyc | Bin 0 -> 12929 bytes .../pip/__pycache__/download.cpython-36.pyc | Bin 0 -> 20310 bytes .../pip/__pycache__/exceptions.cpython-36.pyc | Bin 0 -> 10483 bytes .../pip/__pycache__/index.cpython-36.pyc | Bin 0 -> 30245 bytes .../pip/__pycache__/locations.cpython-36.pyc | Bin 0 -> 3869 bytes .../pip/__pycache__/pep425tags.cpython-36.pyc | Bin 0 -> 7464 bytes .../__pycache__/status_codes.cpython-36.pyc | Bin 0 -> 338 bytes .../pip/__pycache__/wheel.cpython-36.pyc | Bin 0 -> 21655 bytes .../site-packages/pip/_vendor/__init__.py | 111 + .../__pycache__/__init__.cpython-36.pyc | Bin 0 -> 2797 bytes .../site-packages/pip/basecommand.py | 337 + .../python3.6/site-packages/pip/baseparser.py | 293 + .../python3.6/site-packages/pip/cmdoptions.py | 633 ++ .../site-packages/pip/commands/__init__.py | 86 + .../__pycache__/__init__.cpython-36.pyc | Bin 0 -> 2028 bytes .../commands/__pycache__/check.cpython-36.pyc | Bin 0 -> 1269 bytes .../__pycache__/completion.cpython-36.pyc | Bin 0 -> 2600 bytes .../__pycache__/download.cpython-36.pyc | Bin 0 -> 5385 bytes .../__pycache__/freeze.cpython-36.pyc | Bin 0 -> 2582 bytes .../commands/__pycache__/hash.cpython-36.pyc | Bin 0 -> 1923 bytes .../commands/__pycache__/help.cpython-36.pyc | Bin 0 -> 1074 bytes .../__pycache__/install.cpython-36.pyc | Bin 0 -> 10221 bytes .../commands/__pycache__/list.cpython-36.pyc | Bin 0 -> 9685 bytes .../__pycache__/search.cpython-36.pyc | Bin 0 -> 4164 bytes .../commands/__pycache__/show.cpython-36.pyc | Bin 0 -> 5335 bytes .../__pycache__/uninstall.cpython-36.pyc | Bin 0 -> 2560 bytes .../commands/__pycache__/wheel.cpython-36.pyc | Bin 0 -> 5422 bytes .../site-packages/pip/commands/check.py | 39 + .../site-packages/pip/commands/completion.py | 81 + .../site-packages/pip/commands/download.py | 212 + .../site-packages/pip/commands/freeze.py | 87 + .../site-packages/pip/commands/hash.py | 57 + .../site-packages/pip/commands/help.py | 35 + .../site-packages/pip/commands/install.py | 455 ++ .../site-packages/pip/commands/list.py | 337 + .../site-packages/pip/commands/search.py | 133 + .../site-packages/pip/commands/show.py | 154 + .../site-packages/pip/commands/uninstall.py | 76 + .../site-packages/pip/commands/wheel.py | 208 + .../site-packages/pip/compat/__init__.py | 164 + .../__pycache__/__init__.cpython-36.pyc | Bin 0 -> 3957 bytes .../__pycache__/dictconfig.cpython-36.pyc | Bin 0 -> 13604 bytes .../site-packages/pip/compat/dictconfig.py | 565 ++ .../python3.6/site-packages/pip/download.py | 906 +++ .../python3.6/site-packages/pip/exceptions.py | 244 + .../lib/python3.6/site-packages/pip/index.py | 1102 ++++ .../python3.6/site-packages/pip/locations.py | 182 + .../site-packages/pip/models/__init__.py | 4 + .../__pycache__/__init__.cpython-36.pyc | Bin 0 -> 223 bytes .../models/__pycache__/index.cpython-36.pyc | Bin 0 -> 827 bytes .../site-packages/pip/models/index.py | 16 + .../site-packages/pip/operations/__init__.py | 0 .../__pycache__/__init__.cpython-36.pyc | Bin 0 -> 137 bytes .../__pycache__/check.cpython-36.pyc | Bin 0 -> 1424 bytes .../__pycache__/freeze.cpython-36.pyc | Bin 0 -> 2881 bytes .../site-packages/pip/operations/check.py | 49 + .../site-packages/pip/operations/freeze.py | 132 + .../python3.6/site-packages/pip/pep425tags.py | 324 + .../site-packages/pip/req/__init__.py | 10 + .../req/__pycache__/__init__.cpython-36.pyc | Bin 0 -> 404 bytes .../req/__pycache__/req_file.cpython-36.pyc | Bin 0 -> 8419 bytes .../__pycache__/req_install.cpython-36.pyc | Bin 0 -> 30120 bytes .../req/__pycache__/req_set.cpython-36.pyc | Bin 0 -> 20967 bytes .../__pycache__/req_uninstall.cpython-36.pyc | Bin 0 -> 6282 bytes .../site-packages/pip/req/req_file.py | 342 + .../site-packages/pip/req/req_install.py | 1204 ++++ .../site-packages/pip/req/req_set.py | 798 +++ .../site-packages/pip/req/req_uninstall.py | 195 + .../site-packages/pip/status_codes.py | 8 + .../site-packages/pip/utils/__init__.py | 870 +++ .../utils/__pycache__/__init__.cpython-36.pyc | Bin 0 -> 22743 bytes .../utils/__pycache__/appdirs.cpython-36.pyc | Bin 0 -> 7701 bytes .../utils/__pycache__/build.cpython-36.pyc | Bin 0 -> 1315 bytes .../__pycache__/deprecation.cpython-36.pyc | Bin 0 -> 1728 bytes .../utils/__pycache__/encoding.cpython-36.pyc | Bin 0 -> 1018 bytes .../__pycache__/filesystem.cpython-36.pyc | Bin 0 -> 583 bytes .../utils/__pycache__/glibc.cpython-36.pyc | Bin 0 -> 1366 bytes .../utils/__pycache__/hashes.cpython-36.pyc | Bin 0 -> 3242 bytes .../utils/__pycache__/logging.cpython-36.pyc | Bin 0 -> 3898 bytes .../utils/__pycache__/outdated.cpython-36.pyc | Bin 0 -> 4223 bytes .../__pycache__/packaging.cpython-36.pyc | Bin 0 -> 1986 bytes .../setuptools_build.cpython-36.pyc | Bin 0 -> 327 bytes .../pip/utils/__pycache__/ui.cpython-36.pyc | Bin 0 -> 9583 bytes .../site-packages/pip/utils/appdirs.py | 248 + .../site-packages/pip/utils/build.py | 42 + .../site-packages/pip/utils/deprecation.py | 76 + .../site-packages/pip/utils/encoding.py | 31 + .../site-packages/pip/utils/filesystem.py | 28 + .../site-packages/pip/utils/glibc.py | 81 + .../site-packages/pip/utils/hashes.py | 92 + .../site-packages/pip/utils/logging.py | 130 + .../site-packages/pip/utils/outdated.py | 162 + .../site-packages/pip/utils/packaging.py | 63 + .../pip/utils/setuptools_build.py | 8 + .../python3.6/site-packages/pip/utils/ui.py | 344 + .../site-packages/pip/vcs/__init__.py | 366 ++ .../vcs/__pycache__/__init__.cpython-36.pyc | Bin 0 -> 11102 bytes .../pip/vcs/__pycache__/bazaar.cpython-36.pyc | Bin 0 -> 3655 bytes .../pip/vcs/__pycache__/git.cpython-36.pyc | Bin 0 -> 8795 bytes .../vcs/__pycache__/mercurial.cpython-36.pyc | Bin 0 -> 3568 bytes .../vcs/__pycache__/subversion.cpython-36.pyc | Bin 0 -> 7107 bytes .../python3.6/site-packages/pip/vcs/bazaar.py | 116 + .../python3.6/site-packages/pip/vcs/git.py | 300 + .../site-packages/pip/vcs/mercurial.py | 103 + .../site-packages/pip/vcs/subversion.py | 269 + .../lib/python3.6/site-packages/pip/wheel.py | 853 +++ .../DESCRIPTION.rst | 3 + .../pkg_resources-0.0.0.dist-info/INSTALLER | 1 + .../pkg_resources-0.0.0.dist-info/METADATA | 13 + .../pkg_resources-0.0.0.dist-info/RECORD | 38 + .../pkg_resources-0.0.0.dist-info/WHEEL | 6 + .../metadata.json | 1 + .../site-packages/pkg_resources/__init__.py | 3125 +++++++++ .../__pycache__/__init__.cpython-36.pyc | Bin 0 -> 95310 bytes .../__pycache__/py31compat.cpython-36.pyc | Bin 0 -> 657 bytes .../pkg_resources/_vendor/__init__.py | 0 .../__pycache__/__init__.cpython-36.pyc | Bin 0 -> 154 bytes .../__pycache__/appdirs.cpython-36.pyc | Bin 0 -> 18580 bytes .../__pycache__/pyparsing.cpython-36.pyc | Bin 0 -> 201076 bytes .../_vendor/__pycache__/six.cpython-36.pyc | Bin 0 -> 24451 bytes .../pkg_resources/_vendor/appdirs.py | 552 ++ .../_vendor/packaging/__about__.py | 21 + .../_vendor/packaging/__init__.py | 14 + .../__pycache__/__about__.cpython-36.pyc | Bin 0 -> 690 bytes .../__pycache__/__init__.cpython-36.pyc | Bin 0 -> 528 bytes .../__pycache__/_compat.cpython-36.pyc | Bin 0 -> 975 bytes .../__pycache__/_structures.cpython-36.pyc | Bin 0 -> 2832 bytes .../__pycache__/markers.cpython-36.pyc | Bin 0 -> 8855 bytes .../__pycache__/requirements.cpython-36.pyc | Bin 0 -> 3851 bytes .../__pycache__/specifiers.cpython-36.pyc | Bin 0 -> 19794 bytes .../__pycache__/utils.cpython-36.pyc | Bin 0 -> 459 bytes .../__pycache__/version.cpython-36.pyc | Bin 0 -> 10569 bytes .../_vendor/packaging/_compat.py | 30 + .../_vendor/packaging/_structures.py | 68 + .../_vendor/packaging/markers.py | 301 + .../_vendor/packaging/requirements.py | 127 + .../_vendor/packaging/specifiers.py | 774 +++ .../pkg_resources/_vendor/packaging/utils.py | 14 + .../_vendor/packaging/version.py | 393 ++ .../pkg_resources/_vendor/pyparsing.py | 5696 +++++++++++++++++ .../pkg_resources/_vendor/six.py | 868 +++ .../pkg_resources/extern/__init__.py | 73 + .../__pycache__/__init__.cpython-36.pyc | Bin 0 -> 2385 bytes .../site-packages/pkg_resources/py31compat.py | 22 + .../DESCRIPTION.rst | 36 + .../setuptools-39.0.1.dist-info/INSTALLER | 1 + .../setuptools-39.0.1.dist-info/METADATA | 67 + .../setuptools-39.0.1.dist-info/RECORD | 155 + .../setuptools-39.0.1.dist-info/WHEEL | 6 + .../dependency_links.txt | 2 + .../entry_points.txt | 64 + .../setuptools-39.0.1.dist-info/metadata.json | 1 + .../setuptools-39.0.1.dist-info/top_level.txt | 3 + .../setuptools-39.0.1.dist-info/zip-safe | 1 + .../site-packages/setuptools/__init__.py | 180 + .../__pycache__/__init__.cpython-36.pyc | Bin 0 -> 6246 bytes .../__pycache__/archive_util.cpython-36.pyc | Bin 0 -> 5094 bytes .../__pycache__/build_meta.cpython-36.pyc | Bin 0 -> 5867 bytes .../__pycache__/config.cpython-36.pyc | Bin 0 -> 14323 bytes .../__pycache__/dep_util.cpython-36.pyc | Bin 0 -> 813 bytes .../__pycache__/depends.cpython-36.pyc | Bin 0 -> 5239 bytes .../__pycache__/dist.cpython-36.pyc | Bin 0 -> 36818 bytes .../__pycache__/extension.cpython-36.pyc | Bin 0 -> 1933 bytes .../__pycache__/glibc.cpython-36.pyc | Bin 0 -> 1503 bytes .../__pycache__/glob.cpython-36.pyc | Bin 0 -> 3801 bytes .../__pycache__/launch.cpython-36.pyc | Bin 0 -> 812 bytes .../__pycache__/lib2to3_ex.cpython-36.pyc | Bin 0 -> 2391 bytes .../__pycache__/monkey.cpython-36.pyc | Bin 0 -> 5133 bytes .../__pycache__/msvc.cpython-36.pyc | Bin 0 -> 34498 bytes .../__pycache__/namespaces.cpython-36.pyc | Bin 0 -> 3636 bytes .../__pycache__/package_index.cpython-36.pyc | Bin 0 -> 32218 bytes .../__pycache__/pep425tags.cpython-36.pyc | Bin 0 -> 7296 bytes .../__pycache__/py27compat.cpython-36.pyc | Bin 0 -> 769 bytes .../__pycache__/py31compat.cpython-36.pyc | Bin 0 -> 1508 bytes .../__pycache__/py33compat.cpython-36.pyc | Bin 0 -> 1361 bytes .../__pycache__/py36compat.cpython-36.pyc | Bin 0 -> 2165 bytes .../__pycache__/sandbox.cpython-36.pyc | Bin 0 -> 15681 bytes .../__pycache__/site-patch.cpython-36.pyc | Bin 0 -> 1464 bytes .../__pycache__/ssl_support.cpython-36.pyc | Bin 0 -> 6744 bytes .../__pycache__/unicode_utils.cpython-36.pyc | Bin 0 -> 1127 bytes .../__pycache__/version.cpython-36.pyc | Bin 0 -> 286 bytes .../__pycache__/wheel.cpython-36.pyc | Bin 0 -> 5781 bytes .../windows_support.cpython-36.pyc | Bin 0 -> 969 bytes .../setuptools/_vendor/__init__.py | 0 .../__pycache__/__init__.cpython-36.pyc | Bin 0 -> 148 bytes .../__pycache__/pyparsing.cpython-36.pyc | Bin 0 -> 201070 bytes .../_vendor/__pycache__/six.cpython-36.pyc | Bin 0 -> 24445 bytes .../setuptools/_vendor/packaging/__about__.py | 21 + .../setuptools/_vendor/packaging/__init__.py | 14 + .../__pycache__/__about__.cpython-36.pyc | Bin 0 -> 684 bytes .../__pycache__/__init__.cpython-36.pyc | Bin 0 -> 522 bytes .../__pycache__/_compat.cpython-36.pyc | Bin 0 -> 969 bytes .../__pycache__/_structures.cpython-36.pyc | Bin 0 -> 2826 bytes .../__pycache__/markers.cpython-36.pyc | Bin 0 -> 8846 bytes .../__pycache__/requirements.cpython-36.pyc | Bin 0 -> 3839 bytes .../__pycache__/specifiers.cpython-36.pyc | Bin 0 -> 19788 bytes .../__pycache__/utils.cpython-36.pyc | Bin 0 -> 453 bytes .../__pycache__/version.cpython-36.pyc | Bin 0 -> 10563 bytes .../setuptools/_vendor/packaging/_compat.py | 30 + .../_vendor/packaging/_structures.py | 68 + .../setuptools/_vendor/packaging/markers.py | 301 + .../_vendor/packaging/requirements.py | 127 + .../_vendor/packaging/specifiers.py | 774 +++ .../setuptools/_vendor/packaging/utils.py | 14 + .../setuptools/_vendor/packaging/version.py | 393 ++ .../setuptools/_vendor/pyparsing.py | 5696 +++++++++++++++++ .../site-packages/setuptools/_vendor/six.py | 868 +++ .../site-packages/setuptools/archive_util.py | 173 + .../site-packages/setuptools/build_meta.py | 172 + .../site-packages/setuptools/cli-32.exe | Bin 0 -> 65536 bytes .../site-packages/setuptools/cli-64.exe | Bin 0 -> 74752 bytes .../site-packages/setuptools/cli.exe | Bin 0 -> 65536 bytes .../setuptools/command/__init__.py | 18 + .../__pycache__/__init__.cpython-36.pyc | Bin 0 -> 699 bytes .../command/__pycache__/alias.cpython-36.pyc | Bin 0 -> 2392 bytes .../__pycache__/bdist_egg.cpython-36.pyc | Bin 0 -> 14373 bytes .../__pycache__/bdist_rpm.cpython-36.pyc | Bin 0 -> 1735 bytes .../__pycache__/bdist_wininst.cpython-36.pyc | Bin 0 -> 936 bytes .../__pycache__/build_clib.cpython-36.pyc | Bin 0 -> 2407 bytes .../__pycache__/build_ext.cpython-36.pyc | Bin 0 -> 10006 bytes .../__pycache__/build_py.cpython-36.pyc | Bin 0 -> 8531 bytes .../__pycache__/develop.cpython-36.pyc | Bin 0 -> 6385 bytes .../__pycache__/dist_info.cpython-36.pyc | Bin 0 -> 1352 bytes .../__pycache__/easy_install.cpython-36.pyc | Bin 0 -> 66239 bytes .../__pycache__/egg_info.cpython-36.pyc | Bin 0 -> 20935 bytes .../__pycache__/install.cpython-36.pyc | Bin 0 -> 3932 bytes .../install_egg_info.cpython-36.pyc | Bin 0 -> 2916 bytes .../__pycache__/install_lib.cpython-36.pyc | Bin 0 -> 5050 bytes .../install_scripts.cpython-36.pyc | Bin 0 -> 2237 bytes .../__pycache__/py36compat.cpython-36.pyc | Bin 0 -> 4582 bytes .../__pycache__/register.cpython-36.pyc | Bin 0 -> 552 bytes .../command/__pycache__/rotate.cpython-36.pyc | Bin 0 -> 2538 bytes .../__pycache__/saveopts.cpython-36.pyc | Bin 0 -> 883 bytes .../command/__pycache__/sdist.cpython-36.pyc | Bin 0 -> 6347 bytes .../command/__pycache__/setopt.cpython-36.pyc | Bin 0 -> 4561 bytes .../command/__pycache__/test.cpython-36.pyc | Bin 0 -> 8120 bytes .../command/__pycache__/upload.cpython-36.pyc | Bin 0 -> 1350 bytes .../__pycache__/upload_docs.cpython-36.pyc | Bin 0 -> 6059 bytes .../site-packages/setuptools/command/alias.py | 80 + .../setuptools/command/bdist_egg.py | 502 ++ .../setuptools/command/bdist_rpm.py | 43 + .../setuptools/command/bdist_wininst.py | 21 + .../setuptools/command/build_clib.py | 98 + .../setuptools/command/build_ext.py | 331 + .../setuptools/command/build_py.py | 270 + .../setuptools/command/develop.py | 216 + .../setuptools/command/dist_info.py | 36 + .../setuptools/command/easy_install.py | 2389 +++++++ .../setuptools/command/egg_info.py | 696 ++ .../setuptools/command/install.py | 125 + .../setuptools/command/install_egg_info.py | 82 + .../setuptools/command/install_lib.py | 148 + .../setuptools/command/install_scripts.py | 65 + .../setuptools/command/launcher manifest.xml | 15 + .../setuptools/command/py36compat.py | 136 + .../setuptools/command/register.py | 10 + .../setuptools/command/rotate.py | 66 + .../setuptools/command/saveopts.py | 22 + .../site-packages/setuptools/command/sdist.py | 200 + .../setuptools/command/setopt.py | 149 + .../site-packages/setuptools/command/test.py | 268 + .../setuptools/command/upload.py | 42 + .../setuptools/command/upload_docs.py | 206 + .../site-packages/setuptools/config.py | 556 ++ .../site-packages/setuptools/dep_util.py | 23 + .../site-packages/setuptools/depends.py | 186 + .../site-packages/setuptools/dist.py | 1070 ++++ .../site-packages/setuptools/extension.py | 57 + .../setuptools/extern/__init__.py | 73 + .../__pycache__/__init__.cpython-36.pyc | Bin 0 -> 2387 bytes .../site-packages/setuptools/glibc.py | 86 + .../site-packages/setuptools/glob.py | 176 + .../site-packages/setuptools/gui-32.exe | Bin 0 -> 65536 bytes .../site-packages/setuptools/gui-64.exe | Bin 0 -> 75264 bytes .../site-packages/setuptools/gui.exe | Bin 0 -> 65536 bytes .../site-packages/setuptools/launch.py | 35 + .../site-packages/setuptools/lib2to3_ex.py | 62 + .../site-packages/setuptools/monkey.py | 197 + .../site-packages/setuptools/msvc.py | 1302 ++++ .../site-packages/setuptools/namespaces.py | 107 + .../site-packages/setuptools/package_index.py | 1119 ++++ .../site-packages/setuptools/pep425tags.py | 316 + .../site-packages/setuptools/py27compat.py | 28 + .../site-packages/setuptools/py31compat.py | 41 + .../site-packages/setuptools/py33compat.py | 54 + .../site-packages/setuptools/py36compat.py | 82 + .../site-packages/setuptools/sandbox.py | 491 ++ .../setuptools/script (dev).tmpl | 5 + .../site-packages/setuptools/script.tmpl | 3 + .../site-packages/setuptools/site-patch.py | 74 + .../site-packages/setuptools/ssl_support.py | 260 + .../site-packages/setuptools/unicode_utils.py | 44 + .../site-packages/setuptools/version.py | 6 + .../site-packages/setuptools/wheel.py | 163 + .../setuptools/windows_support.py | 29 + .../site-packages/werkzeug/__init__.py | 233 + .../__pycache__/__init__.cpython-36.pyc | Bin 0 -> 4783 bytes .../__pycache__/_compat.cpython-36.pyc | Bin 0 -> 7139 bytes .../__pycache__/_internal.cpython-36.pyc | Bin 0 -> 13250 bytes .../__pycache__/_reloader.cpython-36.pyc | Bin 0 -> 9556 bytes .../__pycache__/datastructures.cpython-36.pyc | Bin 0 -> 100821 bytes .../__pycache__/exceptions.cpython-36.pyc | Bin 0 -> 26092 bytes .../__pycache__/filesystem.cpython-36.pyc | Bin 0 -> 2125 bytes .../__pycache__/formparser.cpython-36.pyc | Bin 0 -> 16178 bytes .../werkzeug/__pycache__/http.cpython-36.pyc | Bin 0 -> 36147 bytes .../werkzeug/__pycache__/local.cpython-36.pyc | Bin 0 -> 18601 bytes .../__pycache__/posixemulation.cpython-36.pyc | Bin 0 -> 2699 bytes .../__pycache__/routing.cpython-36.pyc | Bin 0 -> 64495 bytes .../__pycache__/security.cpython-36.pyc | Bin 0 -> 7911 bytes .../__pycache__/serving.cpython-36.pyc | Bin 0 -> 28613 bytes .../werkzeug/__pycache__/test.cpython-36.pyc | Bin 0 -> 33590 bytes .../__pycache__/testapp.cpython-36.pyc | Bin 0 -> 9306 bytes .../werkzeug/__pycache__/urls.cpython-36.pyc | Bin 0 -> 35814 bytes .../__pycache__/useragents.cpython-36.pyc | Bin 0 -> 6568 bytes .../werkzeug/__pycache__/utils.cpython-36.pyc | Bin 0 -> 25309 bytes .../werkzeug/__pycache__/wsgi.cpython-36.pyc | Bin 0 -> 33401 bytes .../site-packages/werkzeug/_compat.py | 219 + .../site-packages/werkzeug/_internal.py | 484 ++ .../site-packages/werkzeug/_reloader.py | 335 + .../werkzeug/contrib/__init__.py | 16 + .../__pycache__/__init__.cpython-36.pyc | Bin 0 -> 681 bytes .../contrib/__pycache__/atom.cpython-36.pyc | Bin 0 -> 14149 bytes .../contrib/__pycache__/cache.cpython-36.pyc | Bin 0 -> 32570 bytes .../contrib/__pycache__/fixers.cpython-36.pyc | Bin 0 -> 9507 bytes .../contrib/__pycache__/iterio.cpython-36.pyc | Bin 0 -> 11062 bytes .../contrib/__pycache__/lint.cpython-36.pyc | Bin 0 -> 408 bytes .../__pycache__/profiler.cpython-36.pyc | Bin 0 -> 1525 bytes .../__pycache__/securecookie.cpython-36.pyc | Bin 0 -> 10744 bytes .../__pycache__/sessions.cpython-36.pyc | Bin 0 -> 13142 bytes .../__pycache__/wrappers.cpython-36.pyc | Bin 0 -> 12363 bytes .../site-packages/werkzeug/contrib/atom.py | 362 ++ .../site-packages/werkzeug/contrib/cache.py | 933 +++ .../site-packages/werkzeug/contrib/fixers.py | 262 + .../site-packages/werkzeug/contrib/iterio.py | 358 ++ .../site-packages/werkzeug/contrib/lint.py | 11 + .../werkzeug/contrib/profiler.py | 42 + .../werkzeug/contrib/securecookie.py | 362 ++ .../werkzeug/contrib/sessions.py | 389 ++ .../werkzeug/contrib/wrappers.py | 385 ++ .../site-packages/werkzeug/datastructures.py | 2852 +++++++++ .../site-packages/werkzeug/debug/__init__.py | 524 ++ .../debug/__pycache__/__init__.cpython-36.pyc | Bin 0 -> 13213 bytes .../debug/__pycache__/console.cpython-36.pyc | Bin 0 -> 7247 bytes .../debug/__pycache__/repr.cpython-36.pyc | Bin 0 -> 8569 bytes .../debug/__pycache__/tbtools.cpython-36.pyc | Bin 0 -> 18482 bytes .../site-packages/werkzeug/debug/console.py | 216 + .../site-packages/werkzeug/debug/repr.py | 297 + .../werkzeug/debug/shared/FONT_LICENSE | 96 + .../werkzeug/debug/shared/console.png | Bin 0 -> 507 bytes .../werkzeug/debug/shared/debugger.js | 210 + .../werkzeug/debug/shared/jquery.js | 2 + .../werkzeug/debug/shared/less.png | Bin 0 -> 191 bytes .../werkzeug/debug/shared/more.png | Bin 0 -> 200 bytes .../werkzeug/debug/shared/source.png | Bin 0 -> 818 bytes .../werkzeug/debug/shared/style.css | 154 + .../werkzeug/debug/shared/ubuntu.ttf | Bin 0 -> 70220 bytes .../site-packages/werkzeug/debug/tbtools.py | 629 ++ .../site-packages/werkzeug/exceptions.py | 786 +++ .../site-packages/werkzeug/filesystem.py | 64 + .../site-packages/werkzeug/formparser.py | 586 ++ .../python3.6/site-packages/werkzeug/http.py | 1303 ++++ .../python3.6/site-packages/werkzeug/local.py | 421 ++ .../werkzeug/middleware/__init__.py | 25 + .../__pycache__/__init__.cpython-36.pyc | Bin 0 -> 704 bytes .../__pycache__/dispatcher.cpython-36.pyc | Bin 0 -> 2393 bytes .../__pycache__/http_proxy.cpython-36.pyc | Bin 0 -> 6350 bytes .../__pycache__/lint.cpython-36.pyc | Bin 0 -> 11687 bytes .../__pycache__/profiler.cpython-36.pyc | Bin 0 -> 4433 bytes .../__pycache__/proxy_fix.cpython-36.pyc | Bin 0 -> 7621 bytes .../__pycache__/shared_data.cpython-36.pyc | Bin 0 -> 8000 bytes .../werkzeug/middleware/dispatcher.py | 66 + .../werkzeug/middleware/http_proxy.py | 219 + .../site-packages/werkzeug/middleware/lint.py | 408 ++ .../werkzeug/middleware/profiler.py | 132 + .../werkzeug/middleware/proxy_fix.py | 228 + .../werkzeug/middleware/shared_data.py | 253 + .../site-packages/werkzeug/posixemulation.py | 117 + .../site-packages/werkzeug/routing.py | 2039 ++++++ .../site-packages/werkzeug/security.py | 249 + .../site-packages/werkzeug/serving.py | 1074 ++++ .../python3.6/site-packages/werkzeug/test.py | 1146 ++++ .../site-packages/werkzeug/testapp.py | 241 + .../python3.6/site-packages/werkzeug/urls.py | 1134 ++++ .../site-packages/werkzeug/useragents.py | 220 + .../python3.6/site-packages/werkzeug/utils.py | 836 +++ .../werkzeug/wrappers/__init__.py | 36 + .../__pycache__/__init__.cpython-36.pyc | Bin 0 -> 1632 bytes .../__pycache__/accept.cpython-36.pyc | Bin 0 -> 2161 bytes .../wrappers/__pycache__/auth.cpython-36.pyc | Bin 0 -> 1650 bytes .../__pycache__/base_request.cpython-36.pyc | Bin 0 -> 22648 bytes .../__pycache__/base_response.cpython-36.pyc | Bin 0 -> 23280 bytes .../common_descriptors.cpython-36.pyc | Bin 0 -> 12149 bytes .../wrappers/__pycache__/etag.cpython-36.pyc | Bin 0 -> 11691 bytes .../wrappers/__pycache__/json.cpython-36.pyc | Bin 0 -> 4273 bytes .../__pycache__/request.cpython-36.pyc | Bin 0 -> 1767 bytes .../__pycache__/response.cpython-36.pyc | Bin 0 -> 3278 bytes .../__pycache__/user_agent.cpython-36.pyc | Bin 0 -> 795 bytes .../site-packages/werkzeug/wrappers/accept.py | 50 + .../site-packages/werkzeug/wrappers/auth.py | 33 + .../werkzeug/wrappers/base_request.py | 695 ++ .../werkzeug/wrappers/base_response.py | 702 ++ .../werkzeug/wrappers/common_descriptors.py | 322 + .../site-packages/werkzeug/wrappers/etag.py | 304 + .../site-packages/werkzeug/wrappers/json.py | 145 + .../werkzeug/wrappers/request.py | 44 + .../werkzeug/wrappers/response.py | 78 + .../werkzeug/wrappers/user_agent.py | 15 + .../python3.6/site-packages/werkzeug/wsgi.py | 1067 +++ week-0/day-3/my_todo_app/venv/lib64 | 1 + week-0/day-3/my_todo_app/venv/pyvenv.cfg | 3 + .../CacheControl-0.11.7-py2.py3-none-any.whl | Bin 0 -> 18720 bytes .../appdirs-1.4.3-py2.py3-none-any.whl | Bin 0 -> 12139 bytes .../certifi-2018.1.18-py2.py3-none-any.whl | Bin 0 -> 150807 bytes .../chardet-3.0.4-py2.py3-none-any.whl | Bin 0 -> 133328 bytes .../colorama-0.3.7-py2.py3-none-any.whl | Bin 0 -> 19915 bytes .../distlib-0.2.6-py2.py3-none-any.whl | Bin 0 -> 141707 bytes .../distro-1.0.1-py2.py3-none-any.whl | Bin 0 -> 11733 bytes .../html5lib-0.999999999-py2.py3-none-any.whl | Bin 0 -> 112620 bytes .../idna-2.6-py2.py3-none-any.whl | Bin 0 -> 56485 bytes .../ipaddress-0.0.0-py2.py3-none-any.whl | Bin 0 -> 17503 bytes .../lockfile-0.12.2-py2.py3-none-any.whl | Bin 0 -> 13506 bytes .../packaging-17.1-py2.py3-none-any.whl | Bin 0 -> 24058 bytes .../pip-9.0.1-py2.py3-none-any.whl | Bin 0 -> 159152 bytes .../pkg_resources-0.0.0-py2.py3-none-any.whl | Bin 0 -> 115663 bytes .../progress-1.2-py2.py3-none-any.whl | Bin 0 -> 9606 bytes .../pyparsing-2.2.0-py2.py3-none-any.whl | Bin 0 -> 56411 bytes .../requests-2.18.4-py2.py3-none-any.whl | Bin 0 -> 88788 bytes .../retrying-1.3.3-py2.py3-none-any.whl | Bin 0 -> 9480 bytes .../setuptools-39.0.1-py2.py3-none-any.whl | Bin 0 -> 455758 bytes .../six-1.11.0-py2.py3-none-any.whl | Bin 0 -> 10720 bytes .../urllib3-1.22-py2.py3-none-any.whl | Bin 0 -> 124700 bytes .../webencodings-0.5-py2.py3-none-any.whl | Bin 0 -> 11646 bytes .../wheel-0.30.0-py2.py3-none-any.whl | Bin 0 -> 48886 bytes 658 files changed, 104786 insertions(+) create mode 100644 week-0/day-3/my_todo_app/todo_app/__init__.py create mode 100644 week-0/day-3/my_todo_app/todo_app/__pycache__/__init__.cpython-36.pyc create mode 100644 week-0/day-3/my_todo_app/venv/bin/activate create mode 100644 week-0/day-3/my_todo_app/venv/bin/activate.csh create mode 100644 week-0/day-3/my_todo_app/venv/bin/activate.fish create mode 100755 week-0/day-3/my_todo_app/venv/bin/easy_install create mode 100755 week-0/day-3/my_todo_app/venv/bin/easy_install-3.6 create mode 100755 week-0/day-3/my_todo_app/venv/bin/flask create mode 100755 week-0/day-3/my_todo_app/venv/bin/pip create mode 100755 week-0/day-3/my_todo_app/venv/bin/pip3 create mode 100755 week-0/day-3/my_todo_app/venv/bin/pip3.6 create mode 120000 week-0/day-3/my_todo_app/venv/bin/python create mode 120000 week-0/day-3/my_todo_app/venv/bin/python3 create mode 100644 week-0/day-3/my_todo_app/venv/lib/python3.6/site-packages/Click-7.0.dist-info/INSTALLER create mode 100644 week-0/day-3/my_todo_app/venv/lib/python3.6/site-packages/Click-7.0.dist-info/LICENSE.txt create mode 100644 week-0/day-3/my_todo_app/venv/lib/python3.6/site-packages/Click-7.0.dist-info/METADATA create mode 100644 week-0/day-3/my_todo_app/venv/lib/python3.6/site-packages/Click-7.0.dist-info/RECORD create mode 100644 week-0/day-3/my_todo_app/venv/lib/python3.6/site-packages/Click-7.0.dist-info/WHEEL create mode 100644 week-0/day-3/my_todo_app/venv/lib/python3.6/site-packages/Click-7.0.dist-info/top_level.txt create mode 100644 week-0/day-3/my_todo_app/venv/lib/python3.6/site-packages/Flask-1.1.1.dist-info/INSTALLER create mode 100644 week-0/day-3/my_todo_app/venv/lib/python3.6/site-packages/Flask-1.1.1.dist-info/LICENSE.rst create mode 100644 week-0/day-3/my_todo_app/venv/lib/python3.6/site-packages/Flask-1.1.1.dist-info/METADATA create mode 100644 week-0/day-3/my_todo_app/venv/lib/python3.6/site-packages/Flask-1.1.1.dist-info/RECORD create mode 100644 week-0/day-3/my_todo_app/venv/lib/python3.6/site-packages/Flask-1.1.1.dist-info/WHEEL create mode 100644 week-0/day-3/my_todo_app/venv/lib/python3.6/site-packages/Flask-1.1.1.dist-info/entry_points.txt create mode 100644 week-0/day-3/my_todo_app/venv/lib/python3.6/site-packages/Flask-1.1.1.dist-info/top_level.txt create mode 100644 week-0/day-3/my_todo_app/venv/lib/python3.6/site-packages/Jinja2-2.10.1.dist-info/INSTALLER create mode 100644 week-0/day-3/my_todo_app/venv/lib/python3.6/site-packages/Jinja2-2.10.1.dist-info/LICENSE create mode 100644 week-0/day-3/my_todo_app/venv/lib/python3.6/site-packages/Jinja2-2.10.1.dist-info/METADATA create mode 100644 week-0/day-3/my_todo_app/venv/lib/python3.6/site-packages/Jinja2-2.10.1.dist-info/RECORD create mode 100644 week-0/day-3/my_todo_app/venv/lib/python3.6/site-packages/Jinja2-2.10.1.dist-info/WHEEL create mode 100644 week-0/day-3/my_todo_app/venv/lib/python3.6/site-packages/Jinja2-2.10.1.dist-info/entry_points.txt create mode 100644 week-0/day-3/my_todo_app/venv/lib/python3.6/site-packages/Jinja2-2.10.1.dist-info/top_level.txt create mode 100644 week-0/day-3/my_todo_app/venv/lib/python3.6/site-packages/MarkupSafe-1.1.1.dist-info/INSTALLER create mode 100644 week-0/day-3/my_todo_app/venv/lib/python3.6/site-packages/MarkupSafe-1.1.1.dist-info/LICENSE.txt create mode 100644 week-0/day-3/my_todo_app/venv/lib/python3.6/site-packages/MarkupSafe-1.1.1.dist-info/METADATA create mode 100644 week-0/day-3/my_todo_app/venv/lib/python3.6/site-packages/MarkupSafe-1.1.1.dist-info/RECORD create mode 100644 week-0/day-3/my_todo_app/venv/lib/python3.6/site-packages/MarkupSafe-1.1.1.dist-info/WHEEL create mode 100644 week-0/day-3/my_todo_app/venv/lib/python3.6/site-packages/MarkupSafe-1.1.1.dist-info/top_level.txt create mode 100644 week-0/day-3/my_todo_app/venv/lib/python3.6/site-packages/Werkzeug-0.15.5.dist-info/INSTALLER create mode 100644 week-0/day-3/my_todo_app/venv/lib/python3.6/site-packages/Werkzeug-0.15.5.dist-info/LICENSE.rst create mode 100644 week-0/day-3/my_todo_app/venv/lib/python3.6/site-packages/Werkzeug-0.15.5.dist-info/METADATA create mode 100644 week-0/day-3/my_todo_app/venv/lib/python3.6/site-packages/Werkzeug-0.15.5.dist-info/RECORD create mode 100644 week-0/day-3/my_todo_app/venv/lib/python3.6/site-packages/Werkzeug-0.15.5.dist-info/WHEEL create mode 100644 week-0/day-3/my_todo_app/venv/lib/python3.6/site-packages/Werkzeug-0.15.5.dist-info/top_level.txt create mode 100644 week-0/day-3/my_todo_app/venv/lib/python3.6/site-packages/__pycache__/easy_install.cpython-36.pyc create mode 100644 week-0/day-3/my_todo_app/venv/lib/python3.6/site-packages/click/__init__.py create mode 100644 week-0/day-3/my_todo_app/venv/lib/python3.6/site-packages/click/__pycache__/__init__.cpython-36.pyc create mode 100644 week-0/day-3/my_todo_app/venv/lib/python3.6/site-packages/click/__pycache__/_bashcomplete.cpython-36.pyc create mode 100644 week-0/day-3/my_todo_app/venv/lib/python3.6/site-packages/click/__pycache__/_compat.cpython-36.pyc create mode 100644 week-0/day-3/my_todo_app/venv/lib/python3.6/site-packages/click/__pycache__/_termui_impl.cpython-36.pyc create mode 100644 week-0/day-3/my_todo_app/venv/lib/python3.6/site-packages/click/__pycache__/_textwrap.cpython-36.pyc create mode 100644 week-0/day-3/my_todo_app/venv/lib/python3.6/site-packages/click/__pycache__/_unicodefun.cpython-36.pyc create mode 100644 week-0/day-3/my_todo_app/venv/lib/python3.6/site-packages/click/__pycache__/_winconsole.cpython-36.pyc create mode 100644 week-0/day-3/my_todo_app/venv/lib/python3.6/site-packages/click/__pycache__/core.cpython-36.pyc create mode 100644 week-0/day-3/my_todo_app/venv/lib/python3.6/site-packages/click/__pycache__/decorators.cpython-36.pyc create mode 100644 week-0/day-3/my_todo_app/venv/lib/python3.6/site-packages/click/__pycache__/exceptions.cpython-36.pyc create mode 100644 week-0/day-3/my_todo_app/venv/lib/python3.6/site-packages/click/__pycache__/formatting.cpython-36.pyc create mode 100644 week-0/day-3/my_todo_app/venv/lib/python3.6/site-packages/click/__pycache__/globals.cpython-36.pyc create mode 100644 week-0/day-3/my_todo_app/venv/lib/python3.6/site-packages/click/__pycache__/parser.cpython-36.pyc create mode 100644 week-0/day-3/my_todo_app/venv/lib/python3.6/site-packages/click/__pycache__/termui.cpython-36.pyc create mode 100644 week-0/day-3/my_todo_app/venv/lib/python3.6/site-packages/click/__pycache__/testing.cpython-36.pyc create mode 100644 week-0/day-3/my_todo_app/venv/lib/python3.6/site-packages/click/__pycache__/types.cpython-36.pyc create mode 100644 week-0/day-3/my_todo_app/venv/lib/python3.6/site-packages/click/__pycache__/utils.cpython-36.pyc create mode 100644 week-0/day-3/my_todo_app/venv/lib/python3.6/site-packages/click/_bashcomplete.py create mode 100644 week-0/day-3/my_todo_app/venv/lib/python3.6/site-packages/click/_compat.py create mode 100644 week-0/day-3/my_todo_app/venv/lib/python3.6/site-packages/click/_termui_impl.py create mode 100644 week-0/day-3/my_todo_app/venv/lib/python3.6/site-packages/click/_textwrap.py create mode 100644 week-0/day-3/my_todo_app/venv/lib/python3.6/site-packages/click/_unicodefun.py create mode 100644 week-0/day-3/my_todo_app/venv/lib/python3.6/site-packages/click/_winconsole.py create mode 100644 week-0/day-3/my_todo_app/venv/lib/python3.6/site-packages/click/core.py create mode 100644 week-0/day-3/my_todo_app/venv/lib/python3.6/site-packages/click/decorators.py create mode 100644 week-0/day-3/my_todo_app/venv/lib/python3.6/site-packages/click/exceptions.py create mode 100644 week-0/day-3/my_todo_app/venv/lib/python3.6/site-packages/click/formatting.py create mode 100644 week-0/day-3/my_todo_app/venv/lib/python3.6/site-packages/click/globals.py create mode 100644 week-0/day-3/my_todo_app/venv/lib/python3.6/site-packages/click/parser.py create mode 100644 week-0/day-3/my_todo_app/venv/lib/python3.6/site-packages/click/termui.py create mode 100644 week-0/day-3/my_todo_app/venv/lib/python3.6/site-packages/click/testing.py create mode 100644 week-0/day-3/my_todo_app/venv/lib/python3.6/site-packages/click/types.py create mode 100644 week-0/day-3/my_todo_app/venv/lib/python3.6/site-packages/click/utils.py create mode 100644 week-0/day-3/my_todo_app/venv/lib/python3.6/site-packages/easy_install.py create mode 100644 week-0/day-3/my_todo_app/venv/lib/python3.6/site-packages/flask/__init__.py create mode 100644 week-0/day-3/my_todo_app/venv/lib/python3.6/site-packages/flask/__main__.py create mode 100644 week-0/day-3/my_todo_app/venv/lib/python3.6/site-packages/flask/__pycache__/__init__.cpython-36.pyc create mode 100644 week-0/day-3/my_todo_app/venv/lib/python3.6/site-packages/flask/__pycache__/__main__.cpython-36.pyc create mode 100644 week-0/day-3/my_todo_app/venv/lib/python3.6/site-packages/flask/__pycache__/_compat.cpython-36.pyc create mode 100644 week-0/day-3/my_todo_app/venv/lib/python3.6/site-packages/flask/__pycache__/app.cpython-36.pyc create mode 100644 week-0/day-3/my_todo_app/venv/lib/python3.6/site-packages/flask/__pycache__/blueprints.cpython-36.pyc create mode 100644 week-0/day-3/my_todo_app/venv/lib/python3.6/site-packages/flask/__pycache__/cli.cpython-36.pyc create mode 100644 week-0/day-3/my_todo_app/venv/lib/python3.6/site-packages/flask/__pycache__/config.cpython-36.pyc create mode 100644 week-0/day-3/my_todo_app/venv/lib/python3.6/site-packages/flask/__pycache__/ctx.cpython-36.pyc create mode 100644 week-0/day-3/my_todo_app/venv/lib/python3.6/site-packages/flask/__pycache__/debughelpers.cpython-36.pyc create mode 100644 week-0/day-3/my_todo_app/venv/lib/python3.6/site-packages/flask/__pycache__/globals.cpython-36.pyc create mode 100644 week-0/day-3/my_todo_app/venv/lib/python3.6/site-packages/flask/__pycache__/helpers.cpython-36.pyc create mode 100644 week-0/day-3/my_todo_app/venv/lib/python3.6/site-packages/flask/__pycache__/logging.cpython-36.pyc create mode 100644 week-0/day-3/my_todo_app/venv/lib/python3.6/site-packages/flask/__pycache__/sessions.cpython-36.pyc create mode 100644 week-0/day-3/my_todo_app/venv/lib/python3.6/site-packages/flask/__pycache__/signals.cpython-36.pyc create mode 100644 week-0/day-3/my_todo_app/venv/lib/python3.6/site-packages/flask/__pycache__/templating.cpython-36.pyc create mode 100644 week-0/day-3/my_todo_app/venv/lib/python3.6/site-packages/flask/__pycache__/testing.cpython-36.pyc create mode 100644 week-0/day-3/my_todo_app/venv/lib/python3.6/site-packages/flask/__pycache__/views.cpython-36.pyc create mode 100644 week-0/day-3/my_todo_app/venv/lib/python3.6/site-packages/flask/__pycache__/wrappers.cpython-36.pyc create mode 100644 week-0/day-3/my_todo_app/venv/lib/python3.6/site-packages/flask/_compat.py create mode 100644 week-0/day-3/my_todo_app/venv/lib/python3.6/site-packages/flask/app.py create mode 100644 week-0/day-3/my_todo_app/venv/lib/python3.6/site-packages/flask/blueprints.py create mode 100644 week-0/day-3/my_todo_app/venv/lib/python3.6/site-packages/flask/cli.py create mode 100644 week-0/day-3/my_todo_app/venv/lib/python3.6/site-packages/flask/config.py create mode 100644 week-0/day-3/my_todo_app/venv/lib/python3.6/site-packages/flask/ctx.py create mode 100644 week-0/day-3/my_todo_app/venv/lib/python3.6/site-packages/flask/debughelpers.py create mode 100644 week-0/day-3/my_todo_app/venv/lib/python3.6/site-packages/flask/globals.py create mode 100644 week-0/day-3/my_todo_app/venv/lib/python3.6/site-packages/flask/helpers.py create mode 100644 week-0/day-3/my_todo_app/venv/lib/python3.6/site-packages/flask/json/__init__.py create mode 100644 week-0/day-3/my_todo_app/venv/lib/python3.6/site-packages/flask/json/__pycache__/__init__.cpython-36.pyc create mode 100644 week-0/day-3/my_todo_app/venv/lib/python3.6/site-packages/flask/json/__pycache__/tag.cpython-36.pyc create mode 100644 week-0/day-3/my_todo_app/venv/lib/python3.6/site-packages/flask/json/tag.py create mode 100644 week-0/day-3/my_todo_app/venv/lib/python3.6/site-packages/flask/logging.py create mode 100644 week-0/day-3/my_todo_app/venv/lib/python3.6/site-packages/flask/sessions.py create mode 100644 week-0/day-3/my_todo_app/venv/lib/python3.6/site-packages/flask/signals.py create mode 100644 week-0/day-3/my_todo_app/venv/lib/python3.6/site-packages/flask/templating.py create mode 100644 week-0/day-3/my_todo_app/venv/lib/python3.6/site-packages/flask/testing.py create mode 100644 week-0/day-3/my_todo_app/venv/lib/python3.6/site-packages/flask/views.py create mode 100644 week-0/day-3/my_todo_app/venv/lib/python3.6/site-packages/flask/wrappers.py create mode 100644 week-0/day-3/my_todo_app/venv/lib/python3.6/site-packages/itsdangerous-1.1.0.dist-info/INSTALLER create mode 100644 week-0/day-3/my_todo_app/venv/lib/python3.6/site-packages/itsdangerous-1.1.0.dist-info/LICENSE.rst create mode 100644 week-0/day-3/my_todo_app/venv/lib/python3.6/site-packages/itsdangerous-1.1.0.dist-info/METADATA create mode 100644 week-0/day-3/my_todo_app/venv/lib/python3.6/site-packages/itsdangerous-1.1.0.dist-info/RECORD create mode 100644 week-0/day-3/my_todo_app/venv/lib/python3.6/site-packages/itsdangerous-1.1.0.dist-info/WHEEL create mode 100644 week-0/day-3/my_todo_app/venv/lib/python3.6/site-packages/itsdangerous-1.1.0.dist-info/top_level.txt create mode 100644 week-0/day-3/my_todo_app/venv/lib/python3.6/site-packages/itsdangerous/__init__.py create mode 100644 week-0/day-3/my_todo_app/venv/lib/python3.6/site-packages/itsdangerous/__pycache__/__init__.cpython-36.pyc create mode 100644 week-0/day-3/my_todo_app/venv/lib/python3.6/site-packages/itsdangerous/__pycache__/_compat.cpython-36.pyc create mode 100644 week-0/day-3/my_todo_app/venv/lib/python3.6/site-packages/itsdangerous/__pycache__/_json.cpython-36.pyc create mode 100644 week-0/day-3/my_todo_app/venv/lib/python3.6/site-packages/itsdangerous/__pycache__/encoding.cpython-36.pyc create mode 100644 week-0/day-3/my_todo_app/venv/lib/python3.6/site-packages/itsdangerous/__pycache__/exc.cpython-36.pyc create mode 100644 week-0/day-3/my_todo_app/venv/lib/python3.6/site-packages/itsdangerous/__pycache__/jws.cpython-36.pyc create mode 100644 week-0/day-3/my_todo_app/venv/lib/python3.6/site-packages/itsdangerous/__pycache__/serializer.cpython-36.pyc create mode 100644 week-0/day-3/my_todo_app/venv/lib/python3.6/site-packages/itsdangerous/__pycache__/signer.cpython-36.pyc create mode 100644 week-0/day-3/my_todo_app/venv/lib/python3.6/site-packages/itsdangerous/__pycache__/timed.cpython-36.pyc create mode 100644 week-0/day-3/my_todo_app/venv/lib/python3.6/site-packages/itsdangerous/__pycache__/url_safe.cpython-36.pyc create mode 100644 week-0/day-3/my_todo_app/venv/lib/python3.6/site-packages/itsdangerous/_compat.py create mode 100644 week-0/day-3/my_todo_app/venv/lib/python3.6/site-packages/itsdangerous/_json.py create mode 100644 week-0/day-3/my_todo_app/venv/lib/python3.6/site-packages/itsdangerous/encoding.py create mode 100644 week-0/day-3/my_todo_app/venv/lib/python3.6/site-packages/itsdangerous/exc.py create mode 100644 week-0/day-3/my_todo_app/venv/lib/python3.6/site-packages/itsdangerous/jws.py create mode 100644 week-0/day-3/my_todo_app/venv/lib/python3.6/site-packages/itsdangerous/serializer.py create mode 100644 week-0/day-3/my_todo_app/venv/lib/python3.6/site-packages/itsdangerous/signer.py create mode 100644 week-0/day-3/my_todo_app/venv/lib/python3.6/site-packages/itsdangerous/timed.py create mode 100644 week-0/day-3/my_todo_app/venv/lib/python3.6/site-packages/itsdangerous/url_safe.py create mode 100644 week-0/day-3/my_todo_app/venv/lib/python3.6/site-packages/jinja2/__init__.py create mode 100644 week-0/day-3/my_todo_app/venv/lib/python3.6/site-packages/jinja2/__pycache__/__init__.cpython-36.pyc create mode 100644 week-0/day-3/my_todo_app/venv/lib/python3.6/site-packages/jinja2/__pycache__/_compat.cpython-36.pyc create mode 100644 week-0/day-3/my_todo_app/venv/lib/python3.6/site-packages/jinja2/__pycache__/_identifier.cpython-36.pyc create mode 100644 week-0/day-3/my_todo_app/venv/lib/python3.6/site-packages/jinja2/__pycache__/asyncfilters.cpython-36.pyc create mode 100644 week-0/day-3/my_todo_app/venv/lib/python3.6/site-packages/jinja2/__pycache__/asyncsupport.cpython-36.pyc create mode 100644 week-0/day-3/my_todo_app/venv/lib/python3.6/site-packages/jinja2/__pycache__/bccache.cpython-36.pyc create mode 100644 week-0/day-3/my_todo_app/venv/lib/python3.6/site-packages/jinja2/__pycache__/compiler.cpython-36.pyc create mode 100644 week-0/day-3/my_todo_app/venv/lib/python3.6/site-packages/jinja2/__pycache__/constants.cpython-36.pyc create mode 100644 week-0/day-3/my_todo_app/venv/lib/python3.6/site-packages/jinja2/__pycache__/debug.cpython-36.pyc create mode 100644 week-0/day-3/my_todo_app/venv/lib/python3.6/site-packages/jinja2/__pycache__/defaults.cpython-36.pyc create mode 100644 week-0/day-3/my_todo_app/venv/lib/python3.6/site-packages/jinja2/__pycache__/environment.cpython-36.pyc create mode 100644 week-0/day-3/my_todo_app/venv/lib/python3.6/site-packages/jinja2/__pycache__/exceptions.cpython-36.pyc create mode 100644 week-0/day-3/my_todo_app/venv/lib/python3.6/site-packages/jinja2/__pycache__/ext.cpython-36.pyc create mode 100644 week-0/day-3/my_todo_app/venv/lib/python3.6/site-packages/jinja2/__pycache__/filters.cpython-36.pyc create mode 100644 week-0/day-3/my_todo_app/venv/lib/python3.6/site-packages/jinja2/__pycache__/idtracking.cpython-36.pyc create mode 100644 week-0/day-3/my_todo_app/venv/lib/python3.6/site-packages/jinja2/__pycache__/lexer.cpython-36.pyc create mode 100644 week-0/day-3/my_todo_app/venv/lib/python3.6/site-packages/jinja2/__pycache__/loaders.cpython-36.pyc create mode 100644 week-0/day-3/my_todo_app/venv/lib/python3.6/site-packages/jinja2/__pycache__/meta.cpython-36.pyc create mode 100644 week-0/day-3/my_todo_app/venv/lib/python3.6/site-packages/jinja2/__pycache__/nativetypes.cpython-36.pyc create mode 100644 week-0/day-3/my_todo_app/venv/lib/python3.6/site-packages/jinja2/__pycache__/nodes.cpython-36.pyc create mode 100644 week-0/day-3/my_todo_app/venv/lib/python3.6/site-packages/jinja2/__pycache__/optimizer.cpython-36.pyc create mode 100644 week-0/day-3/my_todo_app/venv/lib/python3.6/site-packages/jinja2/__pycache__/parser.cpython-36.pyc create mode 100644 week-0/day-3/my_todo_app/venv/lib/python3.6/site-packages/jinja2/__pycache__/runtime.cpython-36.pyc create mode 100644 week-0/day-3/my_todo_app/venv/lib/python3.6/site-packages/jinja2/__pycache__/sandbox.cpython-36.pyc create mode 100644 week-0/day-3/my_todo_app/venv/lib/python3.6/site-packages/jinja2/__pycache__/tests.cpython-36.pyc create mode 100644 week-0/day-3/my_todo_app/venv/lib/python3.6/site-packages/jinja2/__pycache__/utils.cpython-36.pyc create mode 100644 week-0/day-3/my_todo_app/venv/lib/python3.6/site-packages/jinja2/__pycache__/visitor.cpython-36.pyc create mode 100644 week-0/day-3/my_todo_app/venv/lib/python3.6/site-packages/jinja2/_compat.py create mode 100644 week-0/day-3/my_todo_app/venv/lib/python3.6/site-packages/jinja2/_identifier.py create mode 100644 week-0/day-3/my_todo_app/venv/lib/python3.6/site-packages/jinja2/asyncfilters.py create mode 100644 week-0/day-3/my_todo_app/venv/lib/python3.6/site-packages/jinja2/asyncsupport.py create mode 100644 week-0/day-3/my_todo_app/venv/lib/python3.6/site-packages/jinja2/bccache.py create mode 100644 week-0/day-3/my_todo_app/venv/lib/python3.6/site-packages/jinja2/compiler.py create mode 100644 week-0/day-3/my_todo_app/venv/lib/python3.6/site-packages/jinja2/constants.py create mode 100644 week-0/day-3/my_todo_app/venv/lib/python3.6/site-packages/jinja2/debug.py create mode 100644 week-0/day-3/my_todo_app/venv/lib/python3.6/site-packages/jinja2/defaults.py create mode 100644 week-0/day-3/my_todo_app/venv/lib/python3.6/site-packages/jinja2/environment.py create mode 100644 week-0/day-3/my_todo_app/venv/lib/python3.6/site-packages/jinja2/exceptions.py create mode 100644 week-0/day-3/my_todo_app/venv/lib/python3.6/site-packages/jinja2/ext.py create mode 100644 week-0/day-3/my_todo_app/venv/lib/python3.6/site-packages/jinja2/filters.py create mode 100644 week-0/day-3/my_todo_app/venv/lib/python3.6/site-packages/jinja2/idtracking.py create mode 100644 week-0/day-3/my_todo_app/venv/lib/python3.6/site-packages/jinja2/lexer.py create mode 100644 week-0/day-3/my_todo_app/venv/lib/python3.6/site-packages/jinja2/loaders.py create mode 100644 week-0/day-3/my_todo_app/venv/lib/python3.6/site-packages/jinja2/meta.py create mode 100644 week-0/day-3/my_todo_app/venv/lib/python3.6/site-packages/jinja2/nativetypes.py create mode 100644 week-0/day-3/my_todo_app/venv/lib/python3.6/site-packages/jinja2/nodes.py create mode 100644 week-0/day-3/my_todo_app/venv/lib/python3.6/site-packages/jinja2/optimizer.py create mode 100644 week-0/day-3/my_todo_app/venv/lib/python3.6/site-packages/jinja2/parser.py create mode 100644 week-0/day-3/my_todo_app/venv/lib/python3.6/site-packages/jinja2/runtime.py create mode 100644 week-0/day-3/my_todo_app/venv/lib/python3.6/site-packages/jinja2/sandbox.py create mode 100644 week-0/day-3/my_todo_app/venv/lib/python3.6/site-packages/jinja2/tests.py create mode 100644 week-0/day-3/my_todo_app/venv/lib/python3.6/site-packages/jinja2/utils.py create mode 100644 week-0/day-3/my_todo_app/venv/lib/python3.6/site-packages/jinja2/visitor.py create mode 100644 week-0/day-3/my_todo_app/venv/lib/python3.6/site-packages/markupsafe/__init__.py create mode 100644 week-0/day-3/my_todo_app/venv/lib/python3.6/site-packages/markupsafe/__pycache__/__init__.cpython-36.pyc create mode 100644 week-0/day-3/my_todo_app/venv/lib/python3.6/site-packages/markupsafe/__pycache__/_compat.cpython-36.pyc create mode 100644 week-0/day-3/my_todo_app/venv/lib/python3.6/site-packages/markupsafe/__pycache__/_constants.cpython-36.pyc create mode 100644 week-0/day-3/my_todo_app/venv/lib/python3.6/site-packages/markupsafe/__pycache__/_native.cpython-36.pyc create mode 100644 week-0/day-3/my_todo_app/venv/lib/python3.6/site-packages/markupsafe/_compat.py create mode 100644 week-0/day-3/my_todo_app/venv/lib/python3.6/site-packages/markupsafe/_constants.py create mode 100644 week-0/day-3/my_todo_app/venv/lib/python3.6/site-packages/markupsafe/_native.py create mode 100644 week-0/day-3/my_todo_app/venv/lib/python3.6/site-packages/markupsafe/_speedups.c create mode 100755 week-0/day-3/my_todo_app/venv/lib/python3.6/site-packages/markupsafe/_speedups.cpython-36m-x86_64-linux-gnu.so create mode 100644 week-0/day-3/my_todo_app/venv/lib/python3.6/site-packages/pip-9.0.1.dist-info/DESCRIPTION.rst create mode 100644 week-0/day-3/my_todo_app/venv/lib/python3.6/site-packages/pip-9.0.1.dist-info/INSTALLER create mode 100644 week-0/day-3/my_todo_app/venv/lib/python3.6/site-packages/pip-9.0.1.dist-info/METADATA create mode 100644 week-0/day-3/my_todo_app/venv/lib/python3.6/site-packages/pip-9.0.1.dist-info/RECORD create mode 100644 week-0/day-3/my_todo_app/venv/lib/python3.6/site-packages/pip-9.0.1.dist-info/WHEEL create mode 100644 week-0/day-3/my_todo_app/venv/lib/python3.6/site-packages/pip-9.0.1.dist-info/entry_points.txt create mode 100644 week-0/day-3/my_todo_app/venv/lib/python3.6/site-packages/pip-9.0.1.dist-info/metadata.json create mode 100644 week-0/day-3/my_todo_app/venv/lib/python3.6/site-packages/pip-9.0.1.dist-info/top_level.txt create mode 100644 week-0/day-3/my_todo_app/venv/lib/python3.6/site-packages/pip/__init__.py create mode 100644 week-0/day-3/my_todo_app/venv/lib/python3.6/site-packages/pip/__main__.py create mode 100644 week-0/day-3/my_todo_app/venv/lib/python3.6/site-packages/pip/__pycache__/__init__.cpython-36.pyc create mode 100644 week-0/day-3/my_todo_app/venv/lib/python3.6/site-packages/pip/__pycache__/__main__.cpython-36.pyc create mode 100644 week-0/day-3/my_todo_app/venv/lib/python3.6/site-packages/pip/__pycache__/basecommand.cpython-36.pyc create mode 100644 week-0/day-3/my_todo_app/venv/lib/python3.6/site-packages/pip/__pycache__/baseparser.cpython-36.pyc create mode 100644 week-0/day-3/my_todo_app/venv/lib/python3.6/site-packages/pip/__pycache__/cmdoptions.cpython-36.pyc create mode 100644 week-0/day-3/my_todo_app/venv/lib/python3.6/site-packages/pip/__pycache__/download.cpython-36.pyc create mode 100644 week-0/day-3/my_todo_app/venv/lib/python3.6/site-packages/pip/__pycache__/exceptions.cpython-36.pyc create mode 100644 week-0/day-3/my_todo_app/venv/lib/python3.6/site-packages/pip/__pycache__/index.cpython-36.pyc create mode 100644 week-0/day-3/my_todo_app/venv/lib/python3.6/site-packages/pip/__pycache__/locations.cpython-36.pyc create mode 100644 week-0/day-3/my_todo_app/venv/lib/python3.6/site-packages/pip/__pycache__/pep425tags.cpython-36.pyc create mode 100644 week-0/day-3/my_todo_app/venv/lib/python3.6/site-packages/pip/__pycache__/status_codes.cpython-36.pyc create mode 100644 week-0/day-3/my_todo_app/venv/lib/python3.6/site-packages/pip/__pycache__/wheel.cpython-36.pyc create mode 100644 week-0/day-3/my_todo_app/venv/lib/python3.6/site-packages/pip/_vendor/__init__.py create mode 100644 week-0/day-3/my_todo_app/venv/lib/python3.6/site-packages/pip/_vendor/__pycache__/__init__.cpython-36.pyc create mode 100644 week-0/day-3/my_todo_app/venv/lib/python3.6/site-packages/pip/basecommand.py create mode 100644 week-0/day-3/my_todo_app/venv/lib/python3.6/site-packages/pip/baseparser.py create mode 100644 week-0/day-3/my_todo_app/venv/lib/python3.6/site-packages/pip/cmdoptions.py create mode 100644 week-0/day-3/my_todo_app/venv/lib/python3.6/site-packages/pip/commands/__init__.py create mode 100644 week-0/day-3/my_todo_app/venv/lib/python3.6/site-packages/pip/commands/__pycache__/__init__.cpython-36.pyc create mode 100644 week-0/day-3/my_todo_app/venv/lib/python3.6/site-packages/pip/commands/__pycache__/check.cpython-36.pyc create mode 100644 week-0/day-3/my_todo_app/venv/lib/python3.6/site-packages/pip/commands/__pycache__/completion.cpython-36.pyc create mode 100644 week-0/day-3/my_todo_app/venv/lib/python3.6/site-packages/pip/commands/__pycache__/download.cpython-36.pyc create mode 100644 week-0/day-3/my_todo_app/venv/lib/python3.6/site-packages/pip/commands/__pycache__/freeze.cpython-36.pyc create mode 100644 week-0/day-3/my_todo_app/venv/lib/python3.6/site-packages/pip/commands/__pycache__/hash.cpython-36.pyc create mode 100644 week-0/day-3/my_todo_app/venv/lib/python3.6/site-packages/pip/commands/__pycache__/help.cpython-36.pyc create mode 100644 week-0/day-3/my_todo_app/venv/lib/python3.6/site-packages/pip/commands/__pycache__/install.cpython-36.pyc create mode 100644 week-0/day-3/my_todo_app/venv/lib/python3.6/site-packages/pip/commands/__pycache__/list.cpython-36.pyc create mode 100644 week-0/day-3/my_todo_app/venv/lib/python3.6/site-packages/pip/commands/__pycache__/search.cpython-36.pyc create mode 100644 week-0/day-3/my_todo_app/venv/lib/python3.6/site-packages/pip/commands/__pycache__/show.cpython-36.pyc create mode 100644 week-0/day-3/my_todo_app/venv/lib/python3.6/site-packages/pip/commands/__pycache__/uninstall.cpython-36.pyc create mode 100644 week-0/day-3/my_todo_app/venv/lib/python3.6/site-packages/pip/commands/__pycache__/wheel.cpython-36.pyc create mode 100644 week-0/day-3/my_todo_app/venv/lib/python3.6/site-packages/pip/commands/check.py create mode 100644 week-0/day-3/my_todo_app/venv/lib/python3.6/site-packages/pip/commands/completion.py create mode 100644 week-0/day-3/my_todo_app/venv/lib/python3.6/site-packages/pip/commands/download.py create mode 100644 week-0/day-3/my_todo_app/venv/lib/python3.6/site-packages/pip/commands/freeze.py create mode 100644 week-0/day-3/my_todo_app/venv/lib/python3.6/site-packages/pip/commands/hash.py create mode 100644 week-0/day-3/my_todo_app/venv/lib/python3.6/site-packages/pip/commands/help.py create mode 100644 week-0/day-3/my_todo_app/venv/lib/python3.6/site-packages/pip/commands/install.py create mode 100644 week-0/day-3/my_todo_app/venv/lib/python3.6/site-packages/pip/commands/list.py create mode 100644 week-0/day-3/my_todo_app/venv/lib/python3.6/site-packages/pip/commands/search.py create mode 100644 week-0/day-3/my_todo_app/venv/lib/python3.6/site-packages/pip/commands/show.py create mode 100644 week-0/day-3/my_todo_app/venv/lib/python3.6/site-packages/pip/commands/uninstall.py create mode 100644 week-0/day-3/my_todo_app/venv/lib/python3.6/site-packages/pip/commands/wheel.py create mode 100644 week-0/day-3/my_todo_app/venv/lib/python3.6/site-packages/pip/compat/__init__.py create mode 100644 week-0/day-3/my_todo_app/venv/lib/python3.6/site-packages/pip/compat/__pycache__/__init__.cpython-36.pyc create mode 100644 week-0/day-3/my_todo_app/venv/lib/python3.6/site-packages/pip/compat/__pycache__/dictconfig.cpython-36.pyc create mode 100644 week-0/day-3/my_todo_app/venv/lib/python3.6/site-packages/pip/compat/dictconfig.py create mode 100644 week-0/day-3/my_todo_app/venv/lib/python3.6/site-packages/pip/download.py create mode 100644 week-0/day-3/my_todo_app/venv/lib/python3.6/site-packages/pip/exceptions.py create mode 100644 week-0/day-3/my_todo_app/venv/lib/python3.6/site-packages/pip/index.py create mode 100644 week-0/day-3/my_todo_app/venv/lib/python3.6/site-packages/pip/locations.py create mode 100644 week-0/day-3/my_todo_app/venv/lib/python3.6/site-packages/pip/models/__init__.py create mode 100644 week-0/day-3/my_todo_app/venv/lib/python3.6/site-packages/pip/models/__pycache__/__init__.cpython-36.pyc create mode 100644 week-0/day-3/my_todo_app/venv/lib/python3.6/site-packages/pip/models/__pycache__/index.cpython-36.pyc create mode 100644 week-0/day-3/my_todo_app/venv/lib/python3.6/site-packages/pip/models/index.py create mode 100644 week-0/day-3/my_todo_app/venv/lib/python3.6/site-packages/pip/operations/__init__.py create mode 100644 week-0/day-3/my_todo_app/venv/lib/python3.6/site-packages/pip/operations/__pycache__/__init__.cpython-36.pyc create mode 100644 week-0/day-3/my_todo_app/venv/lib/python3.6/site-packages/pip/operations/__pycache__/check.cpython-36.pyc create mode 100644 week-0/day-3/my_todo_app/venv/lib/python3.6/site-packages/pip/operations/__pycache__/freeze.cpython-36.pyc create mode 100644 week-0/day-3/my_todo_app/venv/lib/python3.6/site-packages/pip/operations/check.py create mode 100644 week-0/day-3/my_todo_app/venv/lib/python3.6/site-packages/pip/operations/freeze.py create mode 100644 week-0/day-3/my_todo_app/venv/lib/python3.6/site-packages/pip/pep425tags.py create mode 100644 week-0/day-3/my_todo_app/venv/lib/python3.6/site-packages/pip/req/__init__.py create mode 100644 week-0/day-3/my_todo_app/venv/lib/python3.6/site-packages/pip/req/__pycache__/__init__.cpython-36.pyc create mode 100644 week-0/day-3/my_todo_app/venv/lib/python3.6/site-packages/pip/req/__pycache__/req_file.cpython-36.pyc create mode 100644 week-0/day-3/my_todo_app/venv/lib/python3.6/site-packages/pip/req/__pycache__/req_install.cpython-36.pyc create mode 100644 week-0/day-3/my_todo_app/venv/lib/python3.6/site-packages/pip/req/__pycache__/req_set.cpython-36.pyc create mode 100644 week-0/day-3/my_todo_app/venv/lib/python3.6/site-packages/pip/req/__pycache__/req_uninstall.cpython-36.pyc create mode 100644 week-0/day-3/my_todo_app/venv/lib/python3.6/site-packages/pip/req/req_file.py create mode 100644 week-0/day-3/my_todo_app/venv/lib/python3.6/site-packages/pip/req/req_install.py create mode 100644 week-0/day-3/my_todo_app/venv/lib/python3.6/site-packages/pip/req/req_set.py create mode 100644 week-0/day-3/my_todo_app/venv/lib/python3.6/site-packages/pip/req/req_uninstall.py create mode 100644 week-0/day-3/my_todo_app/venv/lib/python3.6/site-packages/pip/status_codes.py create mode 100644 week-0/day-3/my_todo_app/venv/lib/python3.6/site-packages/pip/utils/__init__.py create mode 100644 week-0/day-3/my_todo_app/venv/lib/python3.6/site-packages/pip/utils/__pycache__/__init__.cpython-36.pyc create mode 100644 week-0/day-3/my_todo_app/venv/lib/python3.6/site-packages/pip/utils/__pycache__/appdirs.cpython-36.pyc create mode 100644 week-0/day-3/my_todo_app/venv/lib/python3.6/site-packages/pip/utils/__pycache__/build.cpython-36.pyc create mode 100644 week-0/day-3/my_todo_app/venv/lib/python3.6/site-packages/pip/utils/__pycache__/deprecation.cpython-36.pyc create mode 100644 week-0/day-3/my_todo_app/venv/lib/python3.6/site-packages/pip/utils/__pycache__/encoding.cpython-36.pyc create mode 100644 week-0/day-3/my_todo_app/venv/lib/python3.6/site-packages/pip/utils/__pycache__/filesystem.cpython-36.pyc create mode 100644 week-0/day-3/my_todo_app/venv/lib/python3.6/site-packages/pip/utils/__pycache__/glibc.cpython-36.pyc create mode 100644 week-0/day-3/my_todo_app/venv/lib/python3.6/site-packages/pip/utils/__pycache__/hashes.cpython-36.pyc create mode 100644 week-0/day-3/my_todo_app/venv/lib/python3.6/site-packages/pip/utils/__pycache__/logging.cpython-36.pyc create mode 100644 week-0/day-3/my_todo_app/venv/lib/python3.6/site-packages/pip/utils/__pycache__/outdated.cpython-36.pyc create mode 100644 week-0/day-3/my_todo_app/venv/lib/python3.6/site-packages/pip/utils/__pycache__/packaging.cpython-36.pyc create mode 100644 week-0/day-3/my_todo_app/venv/lib/python3.6/site-packages/pip/utils/__pycache__/setuptools_build.cpython-36.pyc create mode 100644 week-0/day-3/my_todo_app/venv/lib/python3.6/site-packages/pip/utils/__pycache__/ui.cpython-36.pyc create mode 100644 week-0/day-3/my_todo_app/venv/lib/python3.6/site-packages/pip/utils/appdirs.py create mode 100644 week-0/day-3/my_todo_app/venv/lib/python3.6/site-packages/pip/utils/build.py create mode 100644 week-0/day-3/my_todo_app/venv/lib/python3.6/site-packages/pip/utils/deprecation.py create mode 100644 week-0/day-3/my_todo_app/venv/lib/python3.6/site-packages/pip/utils/encoding.py create mode 100644 week-0/day-3/my_todo_app/venv/lib/python3.6/site-packages/pip/utils/filesystem.py create mode 100644 week-0/day-3/my_todo_app/venv/lib/python3.6/site-packages/pip/utils/glibc.py create mode 100644 week-0/day-3/my_todo_app/venv/lib/python3.6/site-packages/pip/utils/hashes.py create mode 100644 week-0/day-3/my_todo_app/venv/lib/python3.6/site-packages/pip/utils/logging.py create mode 100644 week-0/day-3/my_todo_app/venv/lib/python3.6/site-packages/pip/utils/outdated.py create mode 100644 week-0/day-3/my_todo_app/venv/lib/python3.6/site-packages/pip/utils/packaging.py create mode 100644 week-0/day-3/my_todo_app/venv/lib/python3.6/site-packages/pip/utils/setuptools_build.py create mode 100644 week-0/day-3/my_todo_app/venv/lib/python3.6/site-packages/pip/utils/ui.py create mode 100644 week-0/day-3/my_todo_app/venv/lib/python3.6/site-packages/pip/vcs/__init__.py create mode 100644 week-0/day-3/my_todo_app/venv/lib/python3.6/site-packages/pip/vcs/__pycache__/__init__.cpython-36.pyc create mode 100644 week-0/day-3/my_todo_app/venv/lib/python3.6/site-packages/pip/vcs/__pycache__/bazaar.cpython-36.pyc create mode 100644 week-0/day-3/my_todo_app/venv/lib/python3.6/site-packages/pip/vcs/__pycache__/git.cpython-36.pyc create mode 100644 week-0/day-3/my_todo_app/venv/lib/python3.6/site-packages/pip/vcs/__pycache__/mercurial.cpython-36.pyc create mode 100644 week-0/day-3/my_todo_app/venv/lib/python3.6/site-packages/pip/vcs/__pycache__/subversion.cpython-36.pyc create mode 100644 week-0/day-3/my_todo_app/venv/lib/python3.6/site-packages/pip/vcs/bazaar.py create mode 100644 week-0/day-3/my_todo_app/venv/lib/python3.6/site-packages/pip/vcs/git.py create mode 100644 week-0/day-3/my_todo_app/venv/lib/python3.6/site-packages/pip/vcs/mercurial.py create mode 100644 week-0/day-3/my_todo_app/venv/lib/python3.6/site-packages/pip/vcs/subversion.py create mode 100644 week-0/day-3/my_todo_app/venv/lib/python3.6/site-packages/pip/wheel.py create mode 100644 week-0/day-3/my_todo_app/venv/lib/python3.6/site-packages/pkg_resources-0.0.0.dist-info/DESCRIPTION.rst create mode 100644 week-0/day-3/my_todo_app/venv/lib/python3.6/site-packages/pkg_resources-0.0.0.dist-info/INSTALLER create mode 100644 week-0/day-3/my_todo_app/venv/lib/python3.6/site-packages/pkg_resources-0.0.0.dist-info/METADATA create mode 100644 week-0/day-3/my_todo_app/venv/lib/python3.6/site-packages/pkg_resources-0.0.0.dist-info/RECORD create mode 100644 week-0/day-3/my_todo_app/venv/lib/python3.6/site-packages/pkg_resources-0.0.0.dist-info/WHEEL create mode 100644 week-0/day-3/my_todo_app/venv/lib/python3.6/site-packages/pkg_resources-0.0.0.dist-info/metadata.json create mode 100644 week-0/day-3/my_todo_app/venv/lib/python3.6/site-packages/pkg_resources/__init__.py create mode 100644 week-0/day-3/my_todo_app/venv/lib/python3.6/site-packages/pkg_resources/__pycache__/__init__.cpython-36.pyc create mode 100644 week-0/day-3/my_todo_app/venv/lib/python3.6/site-packages/pkg_resources/__pycache__/py31compat.cpython-36.pyc create mode 100644 week-0/day-3/my_todo_app/venv/lib/python3.6/site-packages/pkg_resources/_vendor/__init__.py create mode 100644 week-0/day-3/my_todo_app/venv/lib/python3.6/site-packages/pkg_resources/_vendor/__pycache__/__init__.cpython-36.pyc create mode 100644 week-0/day-3/my_todo_app/venv/lib/python3.6/site-packages/pkg_resources/_vendor/__pycache__/appdirs.cpython-36.pyc create mode 100644 week-0/day-3/my_todo_app/venv/lib/python3.6/site-packages/pkg_resources/_vendor/__pycache__/pyparsing.cpython-36.pyc create mode 100644 week-0/day-3/my_todo_app/venv/lib/python3.6/site-packages/pkg_resources/_vendor/__pycache__/six.cpython-36.pyc create mode 100644 week-0/day-3/my_todo_app/venv/lib/python3.6/site-packages/pkg_resources/_vendor/appdirs.py create mode 100644 week-0/day-3/my_todo_app/venv/lib/python3.6/site-packages/pkg_resources/_vendor/packaging/__about__.py create mode 100644 week-0/day-3/my_todo_app/venv/lib/python3.6/site-packages/pkg_resources/_vendor/packaging/__init__.py create mode 100644 week-0/day-3/my_todo_app/venv/lib/python3.6/site-packages/pkg_resources/_vendor/packaging/__pycache__/__about__.cpython-36.pyc create mode 100644 week-0/day-3/my_todo_app/venv/lib/python3.6/site-packages/pkg_resources/_vendor/packaging/__pycache__/__init__.cpython-36.pyc create mode 100644 week-0/day-3/my_todo_app/venv/lib/python3.6/site-packages/pkg_resources/_vendor/packaging/__pycache__/_compat.cpython-36.pyc create mode 100644 week-0/day-3/my_todo_app/venv/lib/python3.6/site-packages/pkg_resources/_vendor/packaging/__pycache__/_structures.cpython-36.pyc create mode 100644 week-0/day-3/my_todo_app/venv/lib/python3.6/site-packages/pkg_resources/_vendor/packaging/__pycache__/markers.cpython-36.pyc create mode 100644 week-0/day-3/my_todo_app/venv/lib/python3.6/site-packages/pkg_resources/_vendor/packaging/__pycache__/requirements.cpython-36.pyc create mode 100644 week-0/day-3/my_todo_app/venv/lib/python3.6/site-packages/pkg_resources/_vendor/packaging/__pycache__/specifiers.cpython-36.pyc create mode 100644 week-0/day-3/my_todo_app/venv/lib/python3.6/site-packages/pkg_resources/_vendor/packaging/__pycache__/utils.cpython-36.pyc create mode 100644 week-0/day-3/my_todo_app/venv/lib/python3.6/site-packages/pkg_resources/_vendor/packaging/__pycache__/version.cpython-36.pyc create mode 100644 week-0/day-3/my_todo_app/venv/lib/python3.6/site-packages/pkg_resources/_vendor/packaging/_compat.py create mode 100644 week-0/day-3/my_todo_app/venv/lib/python3.6/site-packages/pkg_resources/_vendor/packaging/_structures.py create mode 100644 week-0/day-3/my_todo_app/venv/lib/python3.6/site-packages/pkg_resources/_vendor/packaging/markers.py create mode 100644 week-0/day-3/my_todo_app/venv/lib/python3.6/site-packages/pkg_resources/_vendor/packaging/requirements.py create mode 100644 week-0/day-3/my_todo_app/venv/lib/python3.6/site-packages/pkg_resources/_vendor/packaging/specifiers.py create mode 100644 week-0/day-3/my_todo_app/venv/lib/python3.6/site-packages/pkg_resources/_vendor/packaging/utils.py create mode 100644 week-0/day-3/my_todo_app/venv/lib/python3.6/site-packages/pkg_resources/_vendor/packaging/version.py create mode 100644 week-0/day-3/my_todo_app/venv/lib/python3.6/site-packages/pkg_resources/_vendor/pyparsing.py create mode 100644 week-0/day-3/my_todo_app/venv/lib/python3.6/site-packages/pkg_resources/_vendor/six.py create mode 100644 week-0/day-3/my_todo_app/venv/lib/python3.6/site-packages/pkg_resources/extern/__init__.py create mode 100644 week-0/day-3/my_todo_app/venv/lib/python3.6/site-packages/pkg_resources/extern/__pycache__/__init__.cpython-36.pyc create mode 100644 week-0/day-3/my_todo_app/venv/lib/python3.6/site-packages/pkg_resources/py31compat.py create mode 100644 week-0/day-3/my_todo_app/venv/lib/python3.6/site-packages/setuptools-39.0.1.dist-info/DESCRIPTION.rst create mode 100644 week-0/day-3/my_todo_app/venv/lib/python3.6/site-packages/setuptools-39.0.1.dist-info/INSTALLER create mode 100644 week-0/day-3/my_todo_app/venv/lib/python3.6/site-packages/setuptools-39.0.1.dist-info/METADATA create mode 100644 week-0/day-3/my_todo_app/venv/lib/python3.6/site-packages/setuptools-39.0.1.dist-info/RECORD create mode 100644 week-0/day-3/my_todo_app/venv/lib/python3.6/site-packages/setuptools-39.0.1.dist-info/WHEEL create mode 100644 week-0/day-3/my_todo_app/venv/lib/python3.6/site-packages/setuptools-39.0.1.dist-info/dependency_links.txt create mode 100644 week-0/day-3/my_todo_app/venv/lib/python3.6/site-packages/setuptools-39.0.1.dist-info/entry_points.txt create mode 100644 week-0/day-3/my_todo_app/venv/lib/python3.6/site-packages/setuptools-39.0.1.dist-info/metadata.json create mode 100644 week-0/day-3/my_todo_app/venv/lib/python3.6/site-packages/setuptools-39.0.1.dist-info/top_level.txt create mode 100644 week-0/day-3/my_todo_app/venv/lib/python3.6/site-packages/setuptools-39.0.1.dist-info/zip-safe create mode 100644 week-0/day-3/my_todo_app/venv/lib/python3.6/site-packages/setuptools/__init__.py create mode 100644 week-0/day-3/my_todo_app/venv/lib/python3.6/site-packages/setuptools/__pycache__/__init__.cpython-36.pyc create mode 100644 week-0/day-3/my_todo_app/venv/lib/python3.6/site-packages/setuptools/__pycache__/archive_util.cpython-36.pyc create mode 100644 week-0/day-3/my_todo_app/venv/lib/python3.6/site-packages/setuptools/__pycache__/build_meta.cpython-36.pyc create mode 100644 week-0/day-3/my_todo_app/venv/lib/python3.6/site-packages/setuptools/__pycache__/config.cpython-36.pyc create mode 100644 week-0/day-3/my_todo_app/venv/lib/python3.6/site-packages/setuptools/__pycache__/dep_util.cpython-36.pyc create mode 100644 week-0/day-3/my_todo_app/venv/lib/python3.6/site-packages/setuptools/__pycache__/depends.cpython-36.pyc create mode 100644 week-0/day-3/my_todo_app/venv/lib/python3.6/site-packages/setuptools/__pycache__/dist.cpython-36.pyc create mode 100644 week-0/day-3/my_todo_app/venv/lib/python3.6/site-packages/setuptools/__pycache__/extension.cpython-36.pyc create mode 100644 week-0/day-3/my_todo_app/venv/lib/python3.6/site-packages/setuptools/__pycache__/glibc.cpython-36.pyc create mode 100644 week-0/day-3/my_todo_app/venv/lib/python3.6/site-packages/setuptools/__pycache__/glob.cpython-36.pyc create mode 100644 week-0/day-3/my_todo_app/venv/lib/python3.6/site-packages/setuptools/__pycache__/launch.cpython-36.pyc create mode 100644 week-0/day-3/my_todo_app/venv/lib/python3.6/site-packages/setuptools/__pycache__/lib2to3_ex.cpython-36.pyc create mode 100644 week-0/day-3/my_todo_app/venv/lib/python3.6/site-packages/setuptools/__pycache__/monkey.cpython-36.pyc create mode 100644 week-0/day-3/my_todo_app/venv/lib/python3.6/site-packages/setuptools/__pycache__/msvc.cpython-36.pyc create mode 100644 week-0/day-3/my_todo_app/venv/lib/python3.6/site-packages/setuptools/__pycache__/namespaces.cpython-36.pyc create mode 100644 week-0/day-3/my_todo_app/venv/lib/python3.6/site-packages/setuptools/__pycache__/package_index.cpython-36.pyc create mode 100644 week-0/day-3/my_todo_app/venv/lib/python3.6/site-packages/setuptools/__pycache__/pep425tags.cpython-36.pyc create mode 100644 week-0/day-3/my_todo_app/venv/lib/python3.6/site-packages/setuptools/__pycache__/py27compat.cpython-36.pyc create mode 100644 week-0/day-3/my_todo_app/venv/lib/python3.6/site-packages/setuptools/__pycache__/py31compat.cpython-36.pyc create mode 100644 week-0/day-3/my_todo_app/venv/lib/python3.6/site-packages/setuptools/__pycache__/py33compat.cpython-36.pyc create mode 100644 week-0/day-3/my_todo_app/venv/lib/python3.6/site-packages/setuptools/__pycache__/py36compat.cpython-36.pyc create mode 100644 week-0/day-3/my_todo_app/venv/lib/python3.6/site-packages/setuptools/__pycache__/sandbox.cpython-36.pyc create mode 100644 week-0/day-3/my_todo_app/venv/lib/python3.6/site-packages/setuptools/__pycache__/site-patch.cpython-36.pyc create mode 100644 week-0/day-3/my_todo_app/venv/lib/python3.6/site-packages/setuptools/__pycache__/ssl_support.cpython-36.pyc create mode 100644 week-0/day-3/my_todo_app/venv/lib/python3.6/site-packages/setuptools/__pycache__/unicode_utils.cpython-36.pyc create mode 100644 week-0/day-3/my_todo_app/venv/lib/python3.6/site-packages/setuptools/__pycache__/version.cpython-36.pyc create mode 100644 week-0/day-3/my_todo_app/venv/lib/python3.6/site-packages/setuptools/__pycache__/wheel.cpython-36.pyc create mode 100644 week-0/day-3/my_todo_app/venv/lib/python3.6/site-packages/setuptools/__pycache__/windows_support.cpython-36.pyc create mode 100644 week-0/day-3/my_todo_app/venv/lib/python3.6/site-packages/setuptools/_vendor/__init__.py create mode 100644 week-0/day-3/my_todo_app/venv/lib/python3.6/site-packages/setuptools/_vendor/__pycache__/__init__.cpython-36.pyc create mode 100644 week-0/day-3/my_todo_app/venv/lib/python3.6/site-packages/setuptools/_vendor/__pycache__/pyparsing.cpython-36.pyc create mode 100644 week-0/day-3/my_todo_app/venv/lib/python3.6/site-packages/setuptools/_vendor/__pycache__/six.cpython-36.pyc create mode 100644 week-0/day-3/my_todo_app/venv/lib/python3.6/site-packages/setuptools/_vendor/packaging/__about__.py create mode 100644 week-0/day-3/my_todo_app/venv/lib/python3.6/site-packages/setuptools/_vendor/packaging/__init__.py create mode 100644 week-0/day-3/my_todo_app/venv/lib/python3.6/site-packages/setuptools/_vendor/packaging/__pycache__/__about__.cpython-36.pyc create mode 100644 week-0/day-3/my_todo_app/venv/lib/python3.6/site-packages/setuptools/_vendor/packaging/__pycache__/__init__.cpython-36.pyc create mode 100644 week-0/day-3/my_todo_app/venv/lib/python3.6/site-packages/setuptools/_vendor/packaging/__pycache__/_compat.cpython-36.pyc create mode 100644 week-0/day-3/my_todo_app/venv/lib/python3.6/site-packages/setuptools/_vendor/packaging/__pycache__/_structures.cpython-36.pyc create mode 100644 week-0/day-3/my_todo_app/venv/lib/python3.6/site-packages/setuptools/_vendor/packaging/__pycache__/markers.cpython-36.pyc create mode 100644 week-0/day-3/my_todo_app/venv/lib/python3.6/site-packages/setuptools/_vendor/packaging/__pycache__/requirements.cpython-36.pyc create mode 100644 week-0/day-3/my_todo_app/venv/lib/python3.6/site-packages/setuptools/_vendor/packaging/__pycache__/specifiers.cpython-36.pyc create mode 100644 week-0/day-3/my_todo_app/venv/lib/python3.6/site-packages/setuptools/_vendor/packaging/__pycache__/utils.cpython-36.pyc create mode 100644 week-0/day-3/my_todo_app/venv/lib/python3.6/site-packages/setuptools/_vendor/packaging/__pycache__/version.cpython-36.pyc create mode 100644 week-0/day-3/my_todo_app/venv/lib/python3.6/site-packages/setuptools/_vendor/packaging/_compat.py create mode 100644 week-0/day-3/my_todo_app/venv/lib/python3.6/site-packages/setuptools/_vendor/packaging/_structures.py create mode 100644 week-0/day-3/my_todo_app/venv/lib/python3.6/site-packages/setuptools/_vendor/packaging/markers.py create mode 100644 week-0/day-3/my_todo_app/venv/lib/python3.6/site-packages/setuptools/_vendor/packaging/requirements.py create mode 100644 week-0/day-3/my_todo_app/venv/lib/python3.6/site-packages/setuptools/_vendor/packaging/specifiers.py create mode 100644 week-0/day-3/my_todo_app/venv/lib/python3.6/site-packages/setuptools/_vendor/packaging/utils.py create mode 100644 week-0/day-3/my_todo_app/venv/lib/python3.6/site-packages/setuptools/_vendor/packaging/version.py create mode 100644 week-0/day-3/my_todo_app/venv/lib/python3.6/site-packages/setuptools/_vendor/pyparsing.py create mode 100644 week-0/day-3/my_todo_app/venv/lib/python3.6/site-packages/setuptools/_vendor/six.py create mode 100644 week-0/day-3/my_todo_app/venv/lib/python3.6/site-packages/setuptools/archive_util.py create mode 100644 week-0/day-3/my_todo_app/venv/lib/python3.6/site-packages/setuptools/build_meta.py create mode 100644 week-0/day-3/my_todo_app/venv/lib/python3.6/site-packages/setuptools/cli-32.exe create mode 100644 week-0/day-3/my_todo_app/venv/lib/python3.6/site-packages/setuptools/cli-64.exe create mode 100644 week-0/day-3/my_todo_app/venv/lib/python3.6/site-packages/setuptools/cli.exe create mode 100644 week-0/day-3/my_todo_app/venv/lib/python3.6/site-packages/setuptools/command/__init__.py create mode 100644 week-0/day-3/my_todo_app/venv/lib/python3.6/site-packages/setuptools/command/__pycache__/__init__.cpython-36.pyc create mode 100644 week-0/day-3/my_todo_app/venv/lib/python3.6/site-packages/setuptools/command/__pycache__/alias.cpython-36.pyc create mode 100644 week-0/day-3/my_todo_app/venv/lib/python3.6/site-packages/setuptools/command/__pycache__/bdist_egg.cpython-36.pyc create mode 100644 week-0/day-3/my_todo_app/venv/lib/python3.6/site-packages/setuptools/command/__pycache__/bdist_rpm.cpython-36.pyc create mode 100644 week-0/day-3/my_todo_app/venv/lib/python3.6/site-packages/setuptools/command/__pycache__/bdist_wininst.cpython-36.pyc create mode 100644 week-0/day-3/my_todo_app/venv/lib/python3.6/site-packages/setuptools/command/__pycache__/build_clib.cpython-36.pyc create mode 100644 week-0/day-3/my_todo_app/venv/lib/python3.6/site-packages/setuptools/command/__pycache__/build_ext.cpython-36.pyc create mode 100644 week-0/day-3/my_todo_app/venv/lib/python3.6/site-packages/setuptools/command/__pycache__/build_py.cpython-36.pyc create mode 100644 week-0/day-3/my_todo_app/venv/lib/python3.6/site-packages/setuptools/command/__pycache__/develop.cpython-36.pyc create mode 100644 week-0/day-3/my_todo_app/venv/lib/python3.6/site-packages/setuptools/command/__pycache__/dist_info.cpython-36.pyc create mode 100644 week-0/day-3/my_todo_app/venv/lib/python3.6/site-packages/setuptools/command/__pycache__/easy_install.cpython-36.pyc create mode 100644 week-0/day-3/my_todo_app/venv/lib/python3.6/site-packages/setuptools/command/__pycache__/egg_info.cpython-36.pyc create mode 100644 week-0/day-3/my_todo_app/venv/lib/python3.6/site-packages/setuptools/command/__pycache__/install.cpython-36.pyc create mode 100644 week-0/day-3/my_todo_app/venv/lib/python3.6/site-packages/setuptools/command/__pycache__/install_egg_info.cpython-36.pyc create mode 100644 week-0/day-3/my_todo_app/venv/lib/python3.6/site-packages/setuptools/command/__pycache__/install_lib.cpython-36.pyc create mode 100644 week-0/day-3/my_todo_app/venv/lib/python3.6/site-packages/setuptools/command/__pycache__/install_scripts.cpython-36.pyc create mode 100644 week-0/day-3/my_todo_app/venv/lib/python3.6/site-packages/setuptools/command/__pycache__/py36compat.cpython-36.pyc create mode 100644 week-0/day-3/my_todo_app/venv/lib/python3.6/site-packages/setuptools/command/__pycache__/register.cpython-36.pyc create mode 100644 week-0/day-3/my_todo_app/venv/lib/python3.6/site-packages/setuptools/command/__pycache__/rotate.cpython-36.pyc create mode 100644 week-0/day-3/my_todo_app/venv/lib/python3.6/site-packages/setuptools/command/__pycache__/saveopts.cpython-36.pyc create mode 100644 week-0/day-3/my_todo_app/venv/lib/python3.6/site-packages/setuptools/command/__pycache__/sdist.cpython-36.pyc create mode 100644 week-0/day-3/my_todo_app/venv/lib/python3.6/site-packages/setuptools/command/__pycache__/setopt.cpython-36.pyc create mode 100644 week-0/day-3/my_todo_app/venv/lib/python3.6/site-packages/setuptools/command/__pycache__/test.cpython-36.pyc create mode 100644 week-0/day-3/my_todo_app/venv/lib/python3.6/site-packages/setuptools/command/__pycache__/upload.cpython-36.pyc create mode 100644 week-0/day-3/my_todo_app/venv/lib/python3.6/site-packages/setuptools/command/__pycache__/upload_docs.cpython-36.pyc create mode 100644 week-0/day-3/my_todo_app/venv/lib/python3.6/site-packages/setuptools/command/alias.py create mode 100644 week-0/day-3/my_todo_app/venv/lib/python3.6/site-packages/setuptools/command/bdist_egg.py create mode 100644 week-0/day-3/my_todo_app/venv/lib/python3.6/site-packages/setuptools/command/bdist_rpm.py create mode 100644 week-0/day-3/my_todo_app/venv/lib/python3.6/site-packages/setuptools/command/bdist_wininst.py create mode 100644 week-0/day-3/my_todo_app/venv/lib/python3.6/site-packages/setuptools/command/build_clib.py create mode 100644 week-0/day-3/my_todo_app/venv/lib/python3.6/site-packages/setuptools/command/build_ext.py create mode 100644 week-0/day-3/my_todo_app/venv/lib/python3.6/site-packages/setuptools/command/build_py.py create mode 100644 week-0/day-3/my_todo_app/venv/lib/python3.6/site-packages/setuptools/command/develop.py create mode 100644 week-0/day-3/my_todo_app/venv/lib/python3.6/site-packages/setuptools/command/dist_info.py create mode 100644 week-0/day-3/my_todo_app/venv/lib/python3.6/site-packages/setuptools/command/easy_install.py create mode 100644 week-0/day-3/my_todo_app/venv/lib/python3.6/site-packages/setuptools/command/egg_info.py create mode 100644 week-0/day-3/my_todo_app/venv/lib/python3.6/site-packages/setuptools/command/install.py create mode 100644 week-0/day-3/my_todo_app/venv/lib/python3.6/site-packages/setuptools/command/install_egg_info.py create mode 100644 week-0/day-3/my_todo_app/venv/lib/python3.6/site-packages/setuptools/command/install_lib.py create mode 100644 week-0/day-3/my_todo_app/venv/lib/python3.6/site-packages/setuptools/command/install_scripts.py create mode 100644 week-0/day-3/my_todo_app/venv/lib/python3.6/site-packages/setuptools/command/launcher manifest.xml create mode 100644 week-0/day-3/my_todo_app/venv/lib/python3.6/site-packages/setuptools/command/py36compat.py create mode 100644 week-0/day-3/my_todo_app/venv/lib/python3.6/site-packages/setuptools/command/register.py create mode 100644 week-0/day-3/my_todo_app/venv/lib/python3.6/site-packages/setuptools/command/rotate.py create mode 100644 week-0/day-3/my_todo_app/venv/lib/python3.6/site-packages/setuptools/command/saveopts.py create mode 100644 week-0/day-3/my_todo_app/venv/lib/python3.6/site-packages/setuptools/command/sdist.py create mode 100644 week-0/day-3/my_todo_app/venv/lib/python3.6/site-packages/setuptools/command/setopt.py create mode 100644 week-0/day-3/my_todo_app/venv/lib/python3.6/site-packages/setuptools/command/test.py create mode 100644 week-0/day-3/my_todo_app/venv/lib/python3.6/site-packages/setuptools/command/upload.py create mode 100644 week-0/day-3/my_todo_app/venv/lib/python3.6/site-packages/setuptools/command/upload_docs.py create mode 100644 week-0/day-3/my_todo_app/venv/lib/python3.6/site-packages/setuptools/config.py create mode 100644 week-0/day-3/my_todo_app/venv/lib/python3.6/site-packages/setuptools/dep_util.py create mode 100644 week-0/day-3/my_todo_app/venv/lib/python3.6/site-packages/setuptools/depends.py create mode 100644 week-0/day-3/my_todo_app/venv/lib/python3.6/site-packages/setuptools/dist.py create mode 100644 week-0/day-3/my_todo_app/venv/lib/python3.6/site-packages/setuptools/extension.py create mode 100644 week-0/day-3/my_todo_app/venv/lib/python3.6/site-packages/setuptools/extern/__init__.py create mode 100644 week-0/day-3/my_todo_app/venv/lib/python3.6/site-packages/setuptools/extern/__pycache__/__init__.cpython-36.pyc create mode 100644 week-0/day-3/my_todo_app/venv/lib/python3.6/site-packages/setuptools/glibc.py create mode 100644 week-0/day-3/my_todo_app/venv/lib/python3.6/site-packages/setuptools/glob.py create mode 100644 week-0/day-3/my_todo_app/venv/lib/python3.6/site-packages/setuptools/gui-32.exe create mode 100644 week-0/day-3/my_todo_app/venv/lib/python3.6/site-packages/setuptools/gui-64.exe create mode 100644 week-0/day-3/my_todo_app/venv/lib/python3.6/site-packages/setuptools/gui.exe create mode 100644 week-0/day-3/my_todo_app/venv/lib/python3.6/site-packages/setuptools/launch.py create mode 100644 week-0/day-3/my_todo_app/venv/lib/python3.6/site-packages/setuptools/lib2to3_ex.py create mode 100644 week-0/day-3/my_todo_app/venv/lib/python3.6/site-packages/setuptools/monkey.py create mode 100644 week-0/day-3/my_todo_app/venv/lib/python3.6/site-packages/setuptools/msvc.py create mode 100644 week-0/day-3/my_todo_app/venv/lib/python3.6/site-packages/setuptools/namespaces.py create mode 100644 week-0/day-3/my_todo_app/venv/lib/python3.6/site-packages/setuptools/package_index.py create mode 100644 week-0/day-3/my_todo_app/venv/lib/python3.6/site-packages/setuptools/pep425tags.py create mode 100644 week-0/day-3/my_todo_app/venv/lib/python3.6/site-packages/setuptools/py27compat.py create mode 100644 week-0/day-3/my_todo_app/venv/lib/python3.6/site-packages/setuptools/py31compat.py create mode 100644 week-0/day-3/my_todo_app/venv/lib/python3.6/site-packages/setuptools/py33compat.py create mode 100644 week-0/day-3/my_todo_app/venv/lib/python3.6/site-packages/setuptools/py36compat.py create mode 100644 week-0/day-3/my_todo_app/venv/lib/python3.6/site-packages/setuptools/sandbox.py create mode 100644 week-0/day-3/my_todo_app/venv/lib/python3.6/site-packages/setuptools/script (dev).tmpl create mode 100644 week-0/day-3/my_todo_app/venv/lib/python3.6/site-packages/setuptools/script.tmpl create mode 100644 week-0/day-3/my_todo_app/venv/lib/python3.6/site-packages/setuptools/site-patch.py create mode 100644 week-0/day-3/my_todo_app/venv/lib/python3.6/site-packages/setuptools/ssl_support.py create mode 100644 week-0/day-3/my_todo_app/venv/lib/python3.6/site-packages/setuptools/unicode_utils.py create mode 100644 week-0/day-3/my_todo_app/venv/lib/python3.6/site-packages/setuptools/version.py create mode 100644 week-0/day-3/my_todo_app/venv/lib/python3.6/site-packages/setuptools/wheel.py create mode 100644 week-0/day-3/my_todo_app/venv/lib/python3.6/site-packages/setuptools/windows_support.py create mode 100644 week-0/day-3/my_todo_app/venv/lib/python3.6/site-packages/werkzeug/__init__.py create mode 100644 week-0/day-3/my_todo_app/venv/lib/python3.6/site-packages/werkzeug/__pycache__/__init__.cpython-36.pyc create mode 100644 week-0/day-3/my_todo_app/venv/lib/python3.6/site-packages/werkzeug/__pycache__/_compat.cpython-36.pyc create mode 100644 week-0/day-3/my_todo_app/venv/lib/python3.6/site-packages/werkzeug/__pycache__/_internal.cpython-36.pyc create mode 100644 week-0/day-3/my_todo_app/venv/lib/python3.6/site-packages/werkzeug/__pycache__/_reloader.cpython-36.pyc create mode 100644 week-0/day-3/my_todo_app/venv/lib/python3.6/site-packages/werkzeug/__pycache__/datastructures.cpython-36.pyc create mode 100644 week-0/day-3/my_todo_app/venv/lib/python3.6/site-packages/werkzeug/__pycache__/exceptions.cpython-36.pyc create mode 100644 week-0/day-3/my_todo_app/venv/lib/python3.6/site-packages/werkzeug/__pycache__/filesystem.cpython-36.pyc create mode 100644 week-0/day-3/my_todo_app/venv/lib/python3.6/site-packages/werkzeug/__pycache__/formparser.cpython-36.pyc create mode 100644 week-0/day-3/my_todo_app/venv/lib/python3.6/site-packages/werkzeug/__pycache__/http.cpython-36.pyc create mode 100644 week-0/day-3/my_todo_app/venv/lib/python3.6/site-packages/werkzeug/__pycache__/local.cpython-36.pyc create mode 100644 week-0/day-3/my_todo_app/venv/lib/python3.6/site-packages/werkzeug/__pycache__/posixemulation.cpython-36.pyc create mode 100644 week-0/day-3/my_todo_app/venv/lib/python3.6/site-packages/werkzeug/__pycache__/routing.cpython-36.pyc create mode 100644 week-0/day-3/my_todo_app/venv/lib/python3.6/site-packages/werkzeug/__pycache__/security.cpython-36.pyc create mode 100644 week-0/day-3/my_todo_app/venv/lib/python3.6/site-packages/werkzeug/__pycache__/serving.cpython-36.pyc create mode 100644 week-0/day-3/my_todo_app/venv/lib/python3.6/site-packages/werkzeug/__pycache__/test.cpython-36.pyc create mode 100644 week-0/day-3/my_todo_app/venv/lib/python3.6/site-packages/werkzeug/__pycache__/testapp.cpython-36.pyc create mode 100644 week-0/day-3/my_todo_app/venv/lib/python3.6/site-packages/werkzeug/__pycache__/urls.cpython-36.pyc create mode 100644 week-0/day-3/my_todo_app/venv/lib/python3.6/site-packages/werkzeug/__pycache__/useragents.cpython-36.pyc create mode 100644 week-0/day-3/my_todo_app/venv/lib/python3.6/site-packages/werkzeug/__pycache__/utils.cpython-36.pyc create mode 100644 week-0/day-3/my_todo_app/venv/lib/python3.6/site-packages/werkzeug/__pycache__/wsgi.cpython-36.pyc create mode 100644 week-0/day-3/my_todo_app/venv/lib/python3.6/site-packages/werkzeug/_compat.py create mode 100644 week-0/day-3/my_todo_app/venv/lib/python3.6/site-packages/werkzeug/_internal.py create mode 100644 week-0/day-3/my_todo_app/venv/lib/python3.6/site-packages/werkzeug/_reloader.py create mode 100644 week-0/day-3/my_todo_app/venv/lib/python3.6/site-packages/werkzeug/contrib/__init__.py create mode 100644 week-0/day-3/my_todo_app/venv/lib/python3.6/site-packages/werkzeug/contrib/__pycache__/__init__.cpython-36.pyc create mode 100644 week-0/day-3/my_todo_app/venv/lib/python3.6/site-packages/werkzeug/contrib/__pycache__/atom.cpython-36.pyc create mode 100644 week-0/day-3/my_todo_app/venv/lib/python3.6/site-packages/werkzeug/contrib/__pycache__/cache.cpython-36.pyc create mode 100644 week-0/day-3/my_todo_app/venv/lib/python3.6/site-packages/werkzeug/contrib/__pycache__/fixers.cpython-36.pyc create mode 100644 week-0/day-3/my_todo_app/venv/lib/python3.6/site-packages/werkzeug/contrib/__pycache__/iterio.cpython-36.pyc create mode 100644 week-0/day-3/my_todo_app/venv/lib/python3.6/site-packages/werkzeug/contrib/__pycache__/lint.cpython-36.pyc create mode 100644 week-0/day-3/my_todo_app/venv/lib/python3.6/site-packages/werkzeug/contrib/__pycache__/profiler.cpython-36.pyc create mode 100644 week-0/day-3/my_todo_app/venv/lib/python3.6/site-packages/werkzeug/contrib/__pycache__/securecookie.cpython-36.pyc create mode 100644 week-0/day-3/my_todo_app/venv/lib/python3.6/site-packages/werkzeug/contrib/__pycache__/sessions.cpython-36.pyc create mode 100644 week-0/day-3/my_todo_app/venv/lib/python3.6/site-packages/werkzeug/contrib/__pycache__/wrappers.cpython-36.pyc create mode 100644 week-0/day-3/my_todo_app/venv/lib/python3.6/site-packages/werkzeug/contrib/atom.py create mode 100644 week-0/day-3/my_todo_app/venv/lib/python3.6/site-packages/werkzeug/contrib/cache.py create mode 100644 week-0/day-3/my_todo_app/venv/lib/python3.6/site-packages/werkzeug/contrib/fixers.py create mode 100644 week-0/day-3/my_todo_app/venv/lib/python3.6/site-packages/werkzeug/contrib/iterio.py create mode 100644 week-0/day-3/my_todo_app/venv/lib/python3.6/site-packages/werkzeug/contrib/lint.py create mode 100644 week-0/day-3/my_todo_app/venv/lib/python3.6/site-packages/werkzeug/contrib/profiler.py create mode 100644 week-0/day-3/my_todo_app/venv/lib/python3.6/site-packages/werkzeug/contrib/securecookie.py create mode 100644 week-0/day-3/my_todo_app/venv/lib/python3.6/site-packages/werkzeug/contrib/sessions.py create mode 100644 week-0/day-3/my_todo_app/venv/lib/python3.6/site-packages/werkzeug/contrib/wrappers.py create mode 100644 week-0/day-3/my_todo_app/venv/lib/python3.6/site-packages/werkzeug/datastructures.py create mode 100644 week-0/day-3/my_todo_app/venv/lib/python3.6/site-packages/werkzeug/debug/__init__.py create mode 100644 week-0/day-3/my_todo_app/venv/lib/python3.6/site-packages/werkzeug/debug/__pycache__/__init__.cpython-36.pyc create mode 100644 week-0/day-3/my_todo_app/venv/lib/python3.6/site-packages/werkzeug/debug/__pycache__/console.cpython-36.pyc create mode 100644 week-0/day-3/my_todo_app/venv/lib/python3.6/site-packages/werkzeug/debug/__pycache__/repr.cpython-36.pyc create mode 100644 week-0/day-3/my_todo_app/venv/lib/python3.6/site-packages/werkzeug/debug/__pycache__/tbtools.cpython-36.pyc create mode 100644 week-0/day-3/my_todo_app/venv/lib/python3.6/site-packages/werkzeug/debug/console.py create mode 100644 week-0/day-3/my_todo_app/venv/lib/python3.6/site-packages/werkzeug/debug/repr.py create mode 100644 week-0/day-3/my_todo_app/venv/lib/python3.6/site-packages/werkzeug/debug/shared/FONT_LICENSE create mode 100644 week-0/day-3/my_todo_app/venv/lib/python3.6/site-packages/werkzeug/debug/shared/console.png create mode 100644 week-0/day-3/my_todo_app/venv/lib/python3.6/site-packages/werkzeug/debug/shared/debugger.js create mode 100644 week-0/day-3/my_todo_app/venv/lib/python3.6/site-packages/werkzeug/debug/shared/jquery.js create mode 100644 week-0/day-3/my_todo_app/venv/lib/python3.6/site-packages/werkzeug/debug/shared/less.png create mode 100644 week-0/day-3/my_todo_app/venv/lib/python3.6/site-packages/werkzeug/debug/shared/more.png create mode 100644 week-0/day-3/my_todo_app/venv/lib/python3.6/site-packages/werkzeug/debug/shared/source.png create mode 100644 week-0/day-3/my_todo_app/venv/lib/python3.6/site-packages/werkzeug/debug/shared/style.css create mode 100644 week-0/day-3/my_todo_app/venv/lib/python3.6/site-packages/werkzeug/debug/shared/ubuntu.ttf create mode 100644 week-0/day-3/my_todo_app/venv/lib/python3.6/site-packages/werkzeug/debug/tbtools.py create mode 100644 week-0/day-3/my_todo_app/venv/lib/python3.6/site-packages/werkzeug/exceptions.py create mode 100644 week-0/day-3/my_todo_app/venv/lib/python3.6/site-packages/werkzeug/filesystem.py create mode 100644 week-0/day-3/my_todo_app/venv/lib/python3.6/site-packages/werkzeug/formparser.py create mode 100644 week-0/day-3/my_todo_app/venv/lib/python3.6/site-packages/werkzeug/http.py create mode 100644 week-0/day-3/my_todo_app/venv/lib/python3.6/site-packages/werkzeug/local.py create mode 100644 week-0/day-3/my_todo_app/venv/lib/python3.6/site-packages/werkzeug/middleware/__init__.py create mode 100644 week-0/day-3/my_todo_app/venv/lib/python3.6/site-packages/werkzeug/middleware/__pycache__/__init__.cpython-36.pyc create mode 100644 week-0/day-3/my_todo_app/venv/lib/python3.6/site-packages/werkzeug/middleware/__pycache__/dispatcher.cpython-36.pyc create mode 100644 week-0/day-3/my_todo_app/venv/lib/python3.6/site-packages/werkzeug/middleware/__pycache__/http_proxy.cpython-36.pyc create mode 100644 week-0/day-3/my_todo_app/venv/lib/python3.6/site-packages/werkzeug/middleware/__pycache__/lint.cpython-36.pyc create mode 100644 week-0/day-3/my_todo_app/venv/lib/python3.6/site-packages/werkzeug/middleware/__pycache__/profiler.cpython-36.pyc create mode 100644 week-0/day-3/my_todo_app/venv/lib/python3.6/site-packages/werkzeug/middleware/__pycache__/proxy_fix.cpython-36.pyc create mode 100644 week-0/day-3/my_todo_app/venv/lib/python3.6/site-packages/werkzeug/middleware/__pycache__/shared_data.cpython-36.pyc create mode 100644 week-0/day-3/my_todo_app/venv/lib/python3.6/site-packages/werkzeug/middleware/dispatcher.py create mode 100644 week-0/day-3/my_todo_app/venv/lib/python3.6/site-packages/werkzeug/middleware/http_proxy.py create mode 100644 week-0/day-3/my_todo_app/venv/lib/python3.6/site-packages/werkzeug/middleware/lint.py create mode 100644 week-0/day-3/my_todo_app/venv/lib/python3.6/site-packages/werkzeug/middleware/profiler.py create mode 100644 week-0/day-3/my_todo_app/venv/lib/python3.6/site-packages/werkzeug/middleware/proxy_fix.py create mode 100644 week-0/day-3/my_todo_app/venv/lib/python3.6/site-packages/werkzeug/middleware/shared_data.py create mode 100644 week-0/day-3/my_todo_app/venv/lib/python3.6/site-packages/werkzeug/posixemulation.py create mode 100644 week-0/day-3/my_todo_app/venv/lib/python3.6/site-packages/werkzeug/routing.py create mode 100644 week-0/day-3/my_todo_app/venv/lib/python3.6/site-packages/werkzeug/security.py create mode 100644 week-0/day-3/my_todo_app/venv/lib/python3.6/site-packages/werkzeug/serving.py create mode 100644 week-0/day-3/my_todo_app/venv/lib/python3.6/site-packages/werkzeug/test.py create mode 100644 week-0/day-3/my_todo_app/venv/lib/python3.6/site-packages/werkzeug/testapp.py create mode 100644 week-0/day-3/my_todo_app/venv/lib/python3.6/site-packages/werkzeug/urls.py create mode 100644 week-0/day-3/my_todo_app/venv/lib/python3.6/site-packages/werkzeug/useragents.py create mode 100644 week-0/day-3/my_todo_app/venv/lib/python3.6/site-packages/werkzeug/utils.py create mode 100644 week-0/day-3/my_todo_app/venv/lib/python3.6/site-packages/werkzeug/wrappers/__init__.py create mode 100644 week-0/day-3/my_todo_app/venv/lib/python3.6/site-packages/werkzeug/wrappers/__pycache__/__init__.cpython-36.pyc create mode 100644 week-0/day-3/my_todo_app/venv/lib/python3.6/site-packages/werkzeug/wrappers/__pycache__/accept.cpython-36.pyc create mode 100644 week-0/day-3/my_todo_app/venv/lib/python3.6/site-packages/werkzeug/wrappers/__pycache__/auth.cpython-36.pyc create mode 100644 week-0/day-3/my_todo_app/venv/lib/python3.6/site-packages/werkzeug/wrappers/__pycache__/base_request.cpython-36.pyc create mode 100644 week-0/day-3/my_todo_app/venv/lib/python3.6/site-packages/werkzeug/wrappers/__pycache__/base_response.cpython-36.pyc create mode 100644 week-0/day-3/my_todo_app/venv/lib/python3.6/site-packages/werkzeug/wrappers/__pycache__/common_descriptors.cpython-36.pyc create mode 100644 week-0/day-3/my_todo_app/venv/lib/python3.6/site-packages/werkzeug/wrappers/__pycache__/etag.cpython-36.pyc create mode 100644 week-0/day-3/my_todo_app/venv/lib/python3.6/site-packages/werkzeug/wrappers/__pycache__/json.cpython-36.pyc create mode 100644 week-0/day-3/my_todo_app/venv/lib/python3.6/site-packages/werkzeug/wrappers/__pycache__/request.cpython-36.pyc create mode 100644 week-0/day-3/my_todo_app/venv/lib/python3.6/site-packages/werkzeug/wrappers/__pycache__/response.cpython-36.pyc create mode 100644 week-0/day-3/my_todo_app/venv/lib/python3.6/site-packages/werkzeug/wrappers/__pycache__/user_agent.cpython-36.pyc create mode 100644 week-0/day-3/my_todo_app/venv/lib/python3.6/site-packages/werkzeug/wrappers/accept.py create mode 100644 week-0/day-3/my_todo_app/venv/lib/python3.6/site-packages/werkzeug/wrappers/auth.py create mode 100644 week-0/day-3/my_todo_app/venv/lib/python3.6/site-packages/werkzeug/wrappers/base_request.py create mode 100644 week-0/day-3/my_todo_app/venv/lib/python3.6/site-packages/werkzeug/wrappers/base_response.py create mode 100644 week-0/day-3/my_todo_app/venv/lib/python3.6/site-packages/werkzeug/wrappers/common_descriptors.py create mode 100644 week-0/day-3/my_todo_app/venv/lib/python3.6/site-packages/werkzeug/wrappers/etag.py create mode 100644 week-0/day-3/my_todo_app/venv/lib/python3.6/site-packages/werkzeug/wrappers/json.py create mode 100644 week-0/day-3/my_todo_app/venv/lib/python3.6/site-packages/werkzeug/wrappers/request.py create mode 100644 week-0/day-3/my_todo_app/venv/lib/python3.6/site-packages/werkzeug/wrappers/response.py create mode 100644 week-0/day-3/my_todo_app/venv/lib/python3.6/site-packages/werkzeug/wrappers/user_agent.py create mode 100644 week-0/day-3/my_todo_app/venv/lib/python3.6/site-packages/werkzeug/wsgi.py create mode 120000 week-0/day-3/my_todo_app/venv/lib64 create mode 100644 week-0/day-3/my_todo_app/venv/pyvenv.cfg create mode 100644 week-0/day-3/my_todo_app/venv/share/python-wheels/CacheControl-0.11.7-py2.py3-none-any.whl create mode 100644 week-0/day-3/my_todo_app/venv/share/python-wheels/appdirs-1.4.3-py2.py3-none-any.whl create mode 100644 week-0/day-3/my_todo_app/venv/share/python-wheels/certifi-2018.1.18-py2.py3-none-any.whl create mode 100644 week-0/day-3/my_todo_app/venv/share/python-wheels/chardet-3.0.4-py2.py3-none-any.whl create mode 100644 week-0/day-3/my_todo_app/venv/share/python-wheels/colorama-0.3.7-py2.py3-none-any.whl create mode 100644 week-0/day-3/my_todo_app/venv/share/python-wheels/distlib-0.2.6-py2.py3-none-any.whl create mode 100644 week-0/day-3/my_todo_app/venv/share/python-wheels/distro-1.0.1-py2.py3-none-any.whl create mode 100644 week-0/day-3/my_todo_app/venv/share/python-wheels/html5lib-0.999999999-py2.py3-none-any.whl create mode 100644 week-0/day-3/my_todo_app/venv/share/python-wheels/idna-2.6-py2.py3-none-any.whl create mode 100644 week-0/day-3/my_todo_app/venv/share/python-wheels/ipaddress-0.0.0-py2.py3-none-any.whl create mode 100644 week-0/day-3/my_todo_app/venv/share/python-wheels/lockfile-0.12.2-py2.py3-none-any.whl create mode 100644 week-0/day-3/my_todo_app/venv/share/python-wheels/packaging-17.1-py2.py3-none-any.whl create mode 100644 week-0/day-3/my_todo_app/venv/share/python-wheels/pip-9.0.1-py2.py3-none-any.whl create mode 100644 week-0/day-3/my_todo_app/venv/share/python-wheels/pkg_resources-0.0.0-py2.py3-none-any.whl create mode 100644 week-0/day-3/my_todo_app/venv/share/python-wheels/progress-1.2-py2.py3-none-any.whl create mode 100644 week-0/day-3/my_todo_app/venv/share/python-wheels/pyparsing-2.2.0-py2.py3-none-any.whl create mode 100644 week-0/day-3/my_todo_app/venv/share/python-wheels/requests-2.18.4-py2.py3-none-any.whl create mode 100644 week-0/day-3/my_todo_app/venv/share/python-wheels/retrying-1.3.3-py2.py3-none-any.whl create mode 100644 week-0/day-3/my_todo_app/venv/share/python-wheels/setuptools-39.0.1-py2.py3-none-any.whl create mode 100644 week-0/day-3/my_todo_app/venv/share/python-wheels/six-1.11.0-py2.py3-none-any.whl create mode 100644 week-0/day-3/my_todo_app/venv/share/python-wheels/urllib3-1.22-py2.py3-none-any.whl create mode 100644 week-0/day-3/my_todo_app/venv/share/python-wheels/webencodings-0.5-py2.py3-none-any.whl create mode 100644 week-0/day-3/my_todo_app/venv/share/python-wheels/wheel-0.30.0-py2.py3-none-any.whl diff --git a/week-0/day-3/my_todo_app/todo_app/__init__.py b/week-0/day-3/my_todo_app/todo_app/__init__.py new file mode 100644 index 00000000..ce678855 --- /dev/null +++ b/week-0/day-3/my_todo_app/todo_app/__init__.py @@ -0,0 +1,39 @@ +import os + +from flask import Flask +from flask import request + + +def create_app(test_config=None): + # create and configure the app + app = Flask(__name__, instance_relative_config=True) + + # ensure the instance folder exists + try: + os.makedirs(app.instance_path) + except OSError: + pass + + def todo_view(todos): + the_view = 'List of my todos:' + '
' + + for todo in todos: + the_view += (todo + '
') + + the_view+='-----------LIST ENDS HERE-------------' + return the_view + + @app.route('/todos') + def todos(): + name = request.args.get('name') + print(name) + if name == 'depo': + my_todos = ['Go for run' , 'Listen Rock music'] + elif name == 'shivang': + my_todos = ['Read' , 'Code'] + elif name == 'raj': + my_todos = ['Study' , 'Jerkoff'] + return todo_view(my_todos) + + return app + diff --git a/week-0/day-3/my_todo_app/todo_app/__pycache__/__init__.cpython-36.pyc b/week-0/day-3/my_todo_app/todo_app/__pycache__/__init__.cpython-36.pyc new file mode 100644 index 0000000000000000000000000000000000000000..e7a1702d4e3b74aff5c6e99308f20b0b14efe1a1 GIT binary patch literal 1161 zcmZ`(L2uhO6ecOjR+OZ5)-CG>3=noGpaPBp1XznA2nICX(xLE%I6zkcfxwEiEz1%e zl1^sBJ|#fgLw`k2`%Ap;w7<~P9#t=HF^mEqpFZk6etO@N4z{<0M&pO`_YOjTp-%?f zqaR_aJunP0JVuFK$rzU;A=vs3_)g-0-(W8DZgAo<+(S|GZ-_zN2pjLGF;xXPP025& zTzEtpVG=HB5e z86V9bwAbVLv))pje|Ge{ZEEE{!bJ+#;a2%z8>=QGUr#uwSe@1W^FzU z;-M&cJjrKMHEd6^_*i7ql2=;Q8&^UWDWkK4m}Zpma@HQwte|=*s`!fYqP-u(Zu=lE zXQ|Dc(#a&gb<#Aia-F7olbPA5QOjY+7AgRPuuB5mB0ipfmq|`Fx8Zw-W0BFZI@-I9 zm^bR2Dzia$kkz~gtNIO$Mk72T41;<|I}2pBUqHtdL_V-u51=!u?*Z`ud2E%gkrp66 zASY~t1r~V&`dnM}H@n8IXvv{1`9#cvpGDXgGL+Nmqhh=YPeoRQ`@o?o+{d;z&A5yq=!2S4->MlEhyXQbky9 z0Ps;N-+B!&-@;U1fI(yn`)~!T2{ruY|7xhBrnD6^ewx~MN>f9GGJZ)5&T^^D_HC0- zKw8uMwbzkSNaIN{)jV>NO%31Qs_~5jBGqJSZvXPM6iu+E(1d%{0s~APf?N0wZV-QC wcT0W+ScJQgC+~u1yuSU;Yl3xc>iu=06fwJZBp$c2hKe0v}Jpcdz literal 0 HcmV?d00001 diff --git a/week-0/day-3/my_todo_app/venv/bin/activate b/week-0/day-3/my_todo_app/venv/bin/activate new file mode 100644 index 00000000..7c50df74 --- /dev/null +++ b/week-0/day-3/my_todo_app/venv/bin/activate @@ -0,0 +1,76 @@ +# This file must be used with "source bin/activate" *from bash* +# you cannot run it directly + +deactivate () { + # reset old environment variables + if [ -n "${_OLD_VIRTUAL_PATH:-}" ] ; then + PATH="${_OLD_VIRTUAL_PATH:-}" + export PATH + unset _OLD_VIRTUAL_PATH + fi + if [ -n "${_OLD_VIRTUAL_PYTHONHOME:-}" ] ; then + PYTHONHOME="${_OLD_VIRTUAL_PYTHONHOME:-}" + export PYTHONHOME + unset _OLD_VIRTUAL_PYTHONHOME + fi + + # This should detect bash and zsh, which have a hash command that must + # be called to get it to forget past commands. Without forgetting + # past commands the $PATH changes we made may not be respected + if [ -n "${BASH:-}" -o -n "${ZSH_VERSION:-}" ] ; then + hash -r + fi + + if [ -n "${_OLD_VIRTUAL_PS1:-}" ] ; then + PS1="${_OLD_VIRTUAL_PS1:-}" + export PS1 + unset _OLD_VIRTUAL_PS1 + fi + + unset VIRTUAL_ENV + if [ ! "$1" = "nondestructive" ] ; then + # Self destruct! + unset -f deactivate + fi +} + +# unset irrelevant variables +deactivate nondestructive + +VIRTUAL_ENV="/home/piyush-pc/Documents/homework_day3/academy-hackathon/week-0/day-3/my_todo_app/venv" +export VIRTUAL_ENV + +_OLD_VIRTUAL_PATH="$PATH" +PATH="$VIRTUAL_ENV/bin:$PATH" +export PATH + +# unset PYTHONHOME if set +# this will fail if PYTHONHOME is set to the empty string (which is bad anyway) +# could use `if (set -u; : $PYTHONHOME) ;` in bash +if [ -n "${PYTHONHOME:-}" ] ; then + _OLD_VIRTUAL_PYTHONHOME="${PYTHONHOME:-}" + unset PYTHONHOME +fi + +if [ -z "${VIRTUAL_ENV_DISABLE_PROMPT:-}" ] ; then + _OLD_VIRTUAL_PS1="${PS1:-}" + if [ "x(venv) " != x ] ; then + PS1="(venv) ${PS1:-}" + else + if [ "`basename \"$VIRTUAL_ENV\"`" = "__" ] ; then + # special case for Aspen magic directories + # see http://www.zetadev.com/software/aspen/ + PS1="[`basename \`dirname \"$VIRTUAL_ENV\"\``] $PS1" + else + PS1="(`basename \"$VIRTUAL_ENV\"`)$PS1" + fi + fi + export PS1 +fi + +# This should detect bash and zsh, which have a hash command that must +# be called to get it to forget past commands. Without forgetting +# past commands the $PATH changes we made may not be respected +if [ -n "${BASH:-}" -o -n "${ZSH_VERSION:-}" ] ; then + hash -r +fi diff --git a/week-0/day-3/my_todo_app/venv/bin/activate.csh b/week-0/day-3/my_todo_app/venv/bin/activate.csh new file mode 100644 index 00000000..f51c6428 --- /dev/null +++ b/week-0/day-3/my_todo_app/venv/bin/activate.csh @@ -0,0 +1,37 @@ +# This file must be used with "source bin/activate.csh" *from csh*. +# You cannot run it directly. +# Created by Davide Di Blasi . +# Ported to Python 3.3 venv by Andrew Svetlov + +alias deactivate 'test $?_OLD_VIRTUAL_PATH != 0 && setenv PATH "$_OLD_VIRTUAL_PATH" && unset _OLD_VIRTUAL_PATH; rehash; test $?_OLD_VIRTUAL_PROMPT != 0 && set prompt="$_OLD_VIRTUAL_PROMPT" && unset _OLD_VIRTUAL_PROMPT; unsetenv VIRTUAL_ENV; test "\!:*" != "nondestructive" && unalias deactivate' + +# Unset irrelevant variables. +deactivate nondestructive + +setenv VIRTUAL_ENV "/home/piyush-pc/Documents/homework_day3/academy-hackathon/week-0/day-3/my_todo_app/venv" + +set _OLD_VIRTUAL_PATH="$PATH" +setenv PATH "$VIRTUAL_ENV/bin:$PATH" + + +set _OLD_VIRTUAL_PROMPT="$prompt" + +if (! "$?VIRTUAL_ENV_DISABLE_PROMPT") then + if ("venv" != "") then + set env_name = "venv" + else + if (`basename "VIRTUAL_ENV"` == "__") then + # special case for Aspen magic directories + # see http://www.zetadev.com/software/aspen/ + set env_name = `basename \`dirname "$VIRTUAL_ENV"\`` + else + set env_name = `basename "$VIRTUAL_ENV"` + endif + endif + set prompt = "[$env_name] $prompt" + unset env_name +endif + +alias pydoc python -m pydoc + +rehash diff --git a/week-0/day-3/my_todo_app/venv/bin/activate.fish b/week-0/day-3/my_todo_app/venv/bin/activate.fish new file mode 100644 index 00000000..c60a2734 --- /dev/null +++ b/week-0/day-3/my_todo_app/venv/bin/activate.fish @@ -0,0 +1,75 @@ +# This file must be used with ". bin/activate.fish" *from fish* (http://fishshell.org) +# you cannot run it directly + +function deactivate -d "Exit virtualenv and return to normal shell environment" + # reset old environment variables + if test -n "$_OLD_VIRTUAL_PATH" + set -gx PATH $_OLD_VIRTUAL_PATH + set -e _OLD_VIRTUAL_PATH + end + if test -n "$_OLD_VIRTUAL_PYTHONHOME" + set -gx PYTHONHOME $_OLD_VIRTUAL_PYTHONHOME + set -e _OLD_VIRTUAL_PYTHONHOME + end + + if test -n "$_OLD_FISH_PROMPT_OVERRIDE" + functions -e fish_prompt + set -e _OLD_FISH_PROMPT_OVERRIDE + functions -c _old_fish_prompt fish_prompt + functions -e _old_fish_prompt + end + + set -e VIRTUAL_ENV + if test "$argv[1]" != "nondestructive" + # Self destruct! + functions -e deactivate + end +end + +# unset irrelevant variables +deactivate nondestructive + +set -gx VIRTUAL_ENV "/home/piyush-pc/Documents/homework_day3/academy-hackathon/week-0/day-3/my_todo_app/venv" + +set -gx _OLD_VIRTUAL_PATH $PATH +set -gx PATH "$VIRTUAL_ENV/bin" $PATH + +# unset PYTHONHOME if set +if set -q PYTHONHOME + set -gx _OLD_VIRTUAL_PYTHONHOME $PYTHONHOME + set -e PYTHONHOME +end + +if test -z "$VIRTUAL_ENV_DISABLE_PROMPT" + # fish uses a function instead of an env var to generate the prompt. + + # save the current fish_prompt function as the function _old_fish_prompt + functions -c fish_prompt _old_fish_prompt + + # with the original prompt function renamed, we can override with our own. + function fish_prompt + # Save the return status of the last command + set -l old_status $status + + # Prompt override? + if test -n "(venv) " + printf "%s%s" "(venv) " (set_color normal) + else + # ...Otherwise, prepend env + set -l _checkbase (basename "$VIRTUAL_ENV") + if test $_checkbase = "__" + # special case for Aspen magic directories + # see http://www.zetadev.com/software/aspen/ + printf "%s[%s]%s " (set_color -b blue white) (basename (dirname "$VIRTUAL_ENV")) (set_color normal) + else + printf "%s(%s)%s" (set_color -b blue white) (basename "$VIRTUAL_ENV") (set_color normal) + end + end + + # Restore the return status of the previous command. + echo "exit $old_status" | . + _old_fish_prompt + end + + set -gx _OLD_FISH_PROMPT_OVERRIDE "$VIRTUAL_ENV" +end diff --git a/week-0/day-3/my_todo_app/venv/bin/easy_install b/week-0/day-3/my_todo_app/venv/bin/easy_install new file mode 100755 index 00000000..9829782b --- /dev/null +++ b/week-0/day-3/my_todo_app/venv/bin/easy_install @@ -0,0 +1,11 @@ +#!/home/piyush-pc/Documents/homework_day3/academy-hackathon/week-0/day-3/my_todo_app/venv/bin/python3 + +# -*- coding: utf-8 -*- +import re +import sys + +from setuptools.command.easy_install import main + +if __name__ == '__main__': + sys.argv[0] = re.sub(r'(-script\.pyw?|\.exe)?$', '', sys.argv[0]) + sys.exit(main()) diff --git a/week-0/day-3/my_todo_app/venv/bin/easy_install-3.6 b/week-0/day-3/my_todo_app/venv/bin/easy_install-3.6 new file mode 100755 index 00000000..9829782b --- /dev/null +++ b/week-0/day-3/my_todo_app/venv/bin/easy_install-3.6 @@ -0,0 +1,11 @@ +#!/home/piyush-pc/Documents/homework_day3/academy-hackathon/week-0/day-3/my_todo_app/venv/bin/python3 + +# -*- coding: utf-8 -*- +import re +import sys + +from setuptools.command.easy_install import main + +if __name__ == '__main__': + sys.argv[0] = re.sub(r'(-script\.pyw?|\.exe)?$', '', sys.argv[0]) + sys.exit(main()) diff --git a/week-0/day-3/my_todo_app/venv/bin/flask b/week-0/day-3/my_todo_app/venv/bin/flask new file mode 100755 index 00000000..60179603 --- /dev/null +++ b/week-0/day-3/my_todo_app/venv/bin/flask @@ -0,0 +1,11 @@ +#!/home/piyush-pc/Documents/homework_day3/academy-hackathon/week-0/day-3/my_todo_app/venv/bin/python3 + +# -*- coding: utf-8 -*- +import re +import sys + +from flask.cli import main + +if __name__ == '__main__': + sys.argv[0] = re.sub(r'(-script\.pyw?|\.exe)?$', '', sys.argv[0]) + sys.exit(main()) diff --git a/week-0/day-3/my_todo_app/venv/bin/pip b/week-0/day-3/my_todo_app/venv/bin/pip new file mode 100755 index 00000000..3e73e96e --- /dev/null +++ b/week-0/day-3/my_todo_app/venv/bin/pip @@ -0,0 +1,11 @@ +#!/home/piyush-pc/Documents/homework_day3/academy-hackathon/week-0/day-3/my_todo_app/venv/bin/python3 + +# -*- coding: utf-8 -*- +import re +import sys + +from pip import main + +if __name__ == '__main__': + sys.argv[0] = re.sub(r'(-script\.pyw?|\.exe)?$', '', sys.argv[0]) + sys.exit(main()) diff --git a/week-0/day-3/my_todo_app/venv/bin/pip3 b/week-0/day-3/my_todo_app/venv/bin/pip3 new file mode 100755 index 00000000..3e73e96e --- /dev/null +++ b/week-0/day-3/my_todo_app/venv/bin/pip3 @@ -0,0 +1,11 @@ +#!/home/piyush-pc/Documents/homework_day3/academy-hackathon/week-0/day-3/my_todo_app/venv/bin/python3 + +# -*- coding: utf-8 -*- +import re +import sys + +from pip import main + +if __name__ == '__main__': + sys.argv[0] = re.sub(r'(-script\.pyw?|\.exe)?$', '', sys.argv[0]) + sys.exit(main()) diff --git a/week-0/day-3/my_todo_app/venv/bin/pip3.6 b/week-0/day-3/my_todo_app/venv/bin/pip3.6 new file mode 100755 index 00000000..3e73e96e --- /dev/null +++ b/week-0/day-3/my_todo_app/venv/bin/pip3.6 @@ -0,0 +1,11 @@ +#!/home/piyush-pc/Documents/homework_day3/academy-hackathon/week-0/day-3/my_todo_app/venv/bin/python3 + +# -*- coding: utf-8 -*- +import re +import sys + +from pip import main + +if __name__ == '__main__': + sys.argv[0] = re.sub(r'(-script\.pyw?|\.exe)?$', '', sys.argv[0]) + sys.exit(main()) diff --git a/week-0/day-3/my_todo_app/venv/bin/python b/week-0/day-3/my_todo_app/venv/bin/python new file mode 120000 index 00000000..b8a0adbb --- /dev/null +++ b/week-0/day-3/my_todo_app/venv/bin/python @@ -0,0 +1 @@ +python3 \ No newline at end of file diff --git a/week-0/day-3/my_todo_app/venv/bin/python3 b/week-0/day-3/my_todo_app/venv/bin/python3 new file mode 120000 index 00000000..ae65fdaa --- /dev/null +++ b/week-0/day-3/my_todo_app/venv/bin/python3 @@ -0,0 +1 @@ +/usr/bin/python3 \ No newline at end of file diff --git a/week-0/day-3/my_todo_app/venv/lib/python3.6/site-packages/Click-7.0.dist-info/INSTALLER b/week-0/day-3/my_todo_app/venv/lib/python3.6/site-packages/Click-7.0.dist-info/INSTALLER new file mode 100644 index 00000000..a1b589e3 --- /dev/null +++ b/week-0/day-3/my_todo_app/venv/lib/python3.6/site-packages/Click-7.0.dist-info/INSTALLER @@ -0,0 +1 @@ +pip diff --git a/week-0/day-3/my_todo_app/venv/lib/python3.6/site-packages/Click-7.0.dist-info/LICENSE.txt b/week-0/day-3/my_todo_app/venv/lib/python3.6/site-packages/Click-7.0.dist-info/LICENSE.txt new file mode 100644 index 00000000..87ce152a --- /dev/null +++ b/week-0/day-3/my_todo_app/venv/lib/python3.6/site-packages/Click-7.0.dist-info/LICENSE.txt @@ -0,0 +1,39 @@ +Copyright © 2014 by the Pallets team. + +Some rights reserved. + +Redistribution and use in source and binary forms of the software as +well as documentation, with or without modification, are permitted +provided that the following conditions are met: + +- Redistributions of source code must retain the above copyright + notice, this list of conditions and the following disclaimer. + +- Redistributions in binary form must reproduce the above copyright + notice, this list of conditions and the following disclaimer in the + documentation and/or other materials provided with the distribution. + +- Neither the name of the copyright holder nor the names of its + contributors may be used to endorse or promote products derived from + this software without specific prior written permission. + +THIS SOFTWARE AND DOCUMENTATION IS PROVIDED BY THE COPYRIGHT HOLDERS AND +CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, +BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND +FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE +COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, +INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT +NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF +USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON +ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF +THIS SOFTWARE AND DOCUMENTATION, EVEN IF ADVISED OF THE POSSIBILITY OF +SUCH DAMAGE. + +---- + +Click uses parts of optparse written by Gregory P. Ward and maintained +by the Python Software Foundation. This is limited to code in parser.py. + +Copyright © 2001-2006 Gregory P. Ward. All rights reserved. +Copyright © 2002-2006 Python Software Foundation. All rights reserved. diff --git a/week-0/day-3/my_todo_app/venv/lib/python3.6/site-packages/Click-7.0.dist-info/METADATA b/week-0/day-3/my_todo_app/venv/lib/python3.6/site-packages/Click-7.0.dist-info/METADATA new file mode 100644 index 00000000..625bdadd --- /dev/null +++ b/week-0/day-3/my_todo_app/venv/lib/python3.6/site-packages/Click-7.0.dist-info/METADATA @@ -0,0 +1,121 @@ +Metadata-Version: 2.1 +Name: Click +Version: 7.0 +Summary: Composable command line interface toolkit +Home-page: https://palletsprojects.com/p/click/ +Author: Armin Ronacher +Author-email: armin.ronacher@active-4.com +Maintainer: Pallets Team +Maintainer-email: contact@palletsprojects.com +License: BSD +Project-URL: Documentation, https://click.palletsprojects.com/ +Project-URL: Code, https://github.com/pallets/click +Project-URL: Issue tracker, https://github.com/pallets/click/issues +Platform: UNKNOWN +Classifier: Development Status :: 5 - Production/Stable +Classifier: Intended Audience :: Developers +Classifier: License :: OSI Approved :: BSD License +Classifier: Operating System :: OS Independent +Classifier: Programming Language :: Python +Classifier: Programming Language :: Python :: 2 +Classifier: Programming Language :: Python :: 2.7 +Classifier: Programming Language :: Python :: 3 +Classifier: Programming Language :: Python :: 3.4 +Classifier: Programming Language :: Python :: 3.5 +Classifier: Programming Language :: Python :: 3.6 +Classifier: Programming Language :: Python :: 3.7 +Requires-Python: >=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.* + +\$ click\_ +========== + +Click is a Python package for creating beautiful command line interfaces +in a composable way with as little code as necessary. It's the "Command +Line Interface Creation Kit". It's highly configurable but comes with +sensible defaults out of the box. + +It aims to make the process of writing command line tools quick and fun +while also preventing any frustration caused by the inability to +implement an intended CLI API. + +Click in three points: + +- Arbitrary nesting of commands +- Automatic help page generation +- Supports lazy loading of subcommands at runtime + + +Installing +---------- + +Install and update using `pip`_: + +.. code-block:: text + + $ pip install click + +Click supports Python 3.4 and newer, Python 2.7, and PyPy. + +.. _pip: https://pip.pypa.io/en/stable/quickstart/ + + +A Simple Example +---------------- + +What does it look like? Here is an example of a simple Click program: + +.. code-block:: python + + import click + + @click.command() + @click.option("--count", default=1, help="Number of greetings.") + @click.option("--name", prompt="Your name", + help="The person to greet.") + def hello(count, name): + """Simple program that greets NAME for a total of COUNT times.""" + for _ in range(count): + click.echo("Hello, %s!" % name) + + if __name__ == '__main__': + hello() + +And what it looks like when run: + +.. code-block:: text + + $ python hello.py --count=3 + Your name: Click + Hello, Click! + Hello, Click! + Hello, Click! + + +Donate +------ + +The Pallets organization develops and supports Click and other popular +packages. In order to grow the community of contributors and users, and +allow the maintainers to devote more time to the projects, `please +donate today`_. + +.. _please donate today: https://palletsprojects.com/donate + + +Links +----- + +* Website: https://palletsprojects.com/p/click/ +* Documentation: https://click.palletsprojects.com/ +* License: `BSD `_ +* Releases: https://pypi.org/project/click/ +* Code: https://github.com/pallets/click +* Issue tracker: https://github.com/pallets/click/issues +* Test status: + + * Linux, Mac: https://travis-ci.org/pallets/click + * Windows: https://ci.appveyor.com/project/pallets/click + +* Test coverage: https://codecov.io/gh/pallets/click + + diff --git a/week-0/day-3/my_todo_app/venv/lib/python3.6/site-packages/Click-7.0.dist-info/RECORD b/week-0/day-3/my_todo_app/venv/lib/python3.6/site-packages/Click-7.0.dist-info/RECORD new file mode 100644 index 00000000..f9b98a6c --- /dev/null +++ b/week-0/day-3/my_todo_app/venv/lib/python3.6/site-packages/Click-7.0.dist-info/RECORD @@ -0,0 +1,40 @@ +Click-7.0.dist-info/LICENSE.txt,sha256=4hIxn676T0Wcisk3_chVcECjyrivKTZsoqSNI5AlIlw,1876 +Click-7.0.dist-info/METADATA,sha256=-r8jeke3Zer4diRvT1MjFZuiJ6yTT_qFP39svLqdaLI,3516 +Click-7.0.dist-info/RECORD,, +Click-7.0.dist-info/WHEEL,sha256=gduuPyBvFJQSQ0zdyxF7k0zynDXbIbvg5ZBHoXum5uk,110 +Click-7.0.dist-info/top_level.txt,sha256=J1ZQogalYS4pphY_lPECoNMfw0HzTSrZglC4Yfwo4xA,6 +click/__init__.py,sha256=HjGThQ7tef9kkwCV371TBnrf0SAi6fKfU_jtEnbYTvQ,2789 +click/_bashcomplete.py,sha256=iaNUmtxag0YPfxba3TDYCNietiTMQIrvhRLj-H8okFU,11014 +click/_compat.py,sha256=vYmvoj4opPxo-c-2GMQQjYT_r_QkOKybkfGoeVrt0dA,23399 +click/_termui_impl.py,sha256=xHmLtOJhKUCVD6168yucJ9fknUJPAMs0eUTPgVUO-GQ,19611 +click/_textwrap.py,sha256=gwS4m7bdQiJnzaDG8osFcRb-5vn4t4l2qSCy-5csCEc,1198 +click/_unicodefun.py,sha256=QHy2_5jYlX-36O-JVrTHNnHOqg8tquUR0HmQFev7Ics,4364 +click/_winconsole.py,sha256=PPWVak8Iikm_gAPsxMrzwsVFCvHgaW3jPaDWZ1JBl3U,8965 +click/core.py,sha256=q8FLcDZsagBGSRe5Y9Hi_FGvAeZvusNfoO5EkhkSQ8Y,75305 +click/decorators.py,sha256=idKt6duLUUfAFftrHoREi8MJSd39XW36pUVHthdglwk,11226 +click/exceptions.py,sha256=CNpAjBAE7qjaV4WChxQeak95e5yUOau8AsvT-8m6wss,7663 +click/formatting.py,sha256=eh-cypTUAhpI3HD-K4ZpR3vCiURIO62xXvKkR3tNUTM,8889 +click/globals.py,sha256=oQkou3ZQ5DgrbVM6BwIBirwiqozbjfirzsLGAlLRRdg,1514 +click/parser.py,sha256=m-nGZz4VwprM42_qtFlWFGo7yRJQxkBlRcZodoH593Y,15510 +click/termui.py,sha256=o_ZXB2jyvL2Rce7P_bFGq452iyBq9ykJyRApIPMCZO0,23207 +click/testing.py,sha256=aYGqY_iWLu2p4k7lkuJ6t3fqpf6aPGqTsyLzNY_ngKg,13062 +click/types.py,sha256=2Q929p-aBP_ZYuMFJqJR-Ipucofv3fmDc5JzBDPmzJU,23287 +click/utils.py,sha256=6-D0WkAxvv9FkgHXSHwDIv0l9Gdx9Mm6Z5vuKNLIfZI,15763 +Click-7.0.dist-info/INSTALLER,sha256=zuuue4knoyJ-UwPPXg8fezS7VCrXJQrAP7zeNuwvFQg,4 +click/__pycache__/testing.cpython-36.pyc,, +click/__pycache__/types.cpython-36.pyc,, +click/__pycache__/utils.cpython-36.pyc,, +click/__pycache__/formatting.cpython-36.pyc,, +click/__pycache__/parser.cpython-36.pyc,, +click/__pycache__/exceptions.cpython-36.pyc,, +click/__pycache__/_termui_impl.cpython-36.pyc,, +click/__pycache__/_bashcomplete.cpython-36.pyc,, +click/__pycache__/_compat.cpython-36.pyc,, +click/__pycache__/globals.cpython-36.pyc,, +click/__pycache__/_textwrap.cpython-36.pyc,, +click/__pycache__/decorators.cpython-36.pyc,, +click/__pycache__/_winconsole.cpython-36.pyc,, +click/__pycache__/core.cpython-36.pyc,, +click/__pycache__/__init__.cpython-36.pyc,, +click/__pycache__/_unicodefun.cpython-36.pyc,, +click/__pycache__/termui.cpython-36.pyc,, diff --git a/week-0/day-3/my_todo_app/venv/lib/python3.6/site-packages/Click-7.0.dist-info/WHEEL b/week-0/day-3/my_todo_app/venv/lib/python3.6/site-packages/Click-7.0.dist-info/WHEEL new file mode 100644 index 00000000..1316c41d --- /dev/null +++ b/week-0/day-3/my_todo_app/venv/lib/python3.6/site-packages/Click-7.0.dist-info/WHEEL @@ -0,0 +1,6 @@ +Wheel-Version: 1.0 +Generator: bdist_wheel (0.31.1) +Root-Is-Purelib: true +Tag: py2-none-any +Tag: py3-none-any + diff --git a/week-0/day-3/my_todo_app/venv/lib/python3.6/site-packages/Click-7.0.dist-info/top_level.txt b/week-0/day-3/my_todo_app/venv/lib/python3.6/site-packages/Click-7.0.dist-info/top_level.txt new file mode 100644 index 00000000..dca9a909 --- /dev/null +++ b/week-0/day-3/my_todo_app/venv/lib/python3.6/site-packages/Click-7.0.dist-info/top_level.txt @@ -0,0 +1 @@ +click diff --git a/week-0/day-3/my_todo_app/venv/lib/python3.6/site-packages/Flask-1.1.1.dist-info/INSTALLER b/week-0/day-3/my_todo_app/venv/lib/python3.6/site-packages/Flask-1.1.1.dist-info/INSTALLER new file mode 100644 index 00000000..a1b589e3 --- /dev/null +++ b/week-0/day-3/my_todo_app/venv/lib/python3.6/site-packages/Flask-1.1.1.dist-info/INSTALLER @@ -0,0 +1 @@ +pip diff --git a/week-0/day-3/my_todo_app/venv/lib/python3.6/site-packages/Flask-1.1.1.dist-info/LICENSE.rst b/week-0/day-3/my_todo_app/venv/lib/python3.6/site-packages/Flask-1.1.1.dist-info/LICENSE.rst new file mode 100644 index 00000000..9d227a0c --- /dev/null +++ b/week-0/day-3/my_todo_app/venv/lib/python3.6/site-packages/Flask-1.1.1.dist-info/LICENSE.rst @@ -0,0 +1,28 @@ +Copyright 2010 Pallets + +Redistribution and use in source and binary forms, with or without +modification, are permitted provided that the following conditions are +met: + +1. Redistributions of source code must retain the above copyright + notice, this list of conditions and the following disclaimer. + +2. Redistributions in binary form must reproduce the above copyright + notice, this list of conditions and the following disclaimer in the + documentation and/or other materials provided with the distribution. + +3. Neither the name of the copyright holder nor the names of its + contributors may be used to endorse or promote products derived from + this software without specific prior written permission. + +THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A +PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED +TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR +PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF +LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING +NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS +SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. diff --git a/week-0/day-3/my_todo_app/venv/lib/python3.6/site-packages/Flask-1.1.1.dist-info/METADATA b/week-0/day-3/my_todo_app/venv/lib/python3.6/site-packages/Flask-1.1.1.dist-info/METADATA new file mode 100644 index 00000000..08fcc912 --- /dev/null +++ b/week-0/day-3/my_todo_app/venv/lib/python3.6/site-packages/Flask-1.1.1.dist-info/METADATA @@ -0,0 +1,134 @@ +Metadata-Version: 2.1 +Name: Flask +Version: 1.1.1 +Summary: A simple framework for building complex web applications. +Home-page: https://palletsprojects.com/p/flask/ +Author: Armin Ronacher +Author-email: armin.ronacher@active-4.com +Maintainer: Pallets +Maintainer-email: contact@palletsprojects.com +License: BSD-3-Clause +Project-URL: Documentation, https://flask.palletsprojects.com/ +Project-URL: Code, https://github.com/pallets/flask +Project-URL: Issue tracker, https://github.com/pallets/flask/issues +Platform: UNKNOWN +Classifier: Development Status :: 5 - Production/Stable +Classifier: Environment :: Web Environment +Classifier: Framework :: Flask +Classifier: Intended Audience :: Developers +Classifier: License :: OSI Approved :: BSD License +Classifier: Operating System :: OS Independent +Classifier: Programming Language :: Python +Classifier: Programming Language :: Python :: 2 +Classifier: Programming Language :: Python :: 2.7 +Classifier: Programming Language :: Python :: 3 +Classifier: Programming Language :: Python :: 3.5 +Classifier: Programming Language :: Python :: 3.6 +Classifier: Programming Language :: Python :: 3.7 +Classifier: Topic :: Internet :: WWW/HTTP :: Dynamic Content +Classifier: Topic :: Internet :: WWW/HTTP :: WSGI :: Application +Classifier: Topic :: Software Development :: Libraries :: Application Frameworks +Classifier: Topic :: Software Development :: Libraries :: Python Modules +Requires-Python: >=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*, !=3.4.* +Requires-Dist: Werkzeug (>=0.15) +Requires-Dist: Jinja2 (>=2.10.1) +Requires-Dist: itsdangerous (>=0.24) +Requires-Dist: click (>=5.1) +Provides-Extra: dev +Requires-Dist: pytest ; extra == 'dev' +Requires-Dist: coverage ; extra == 'dev' +Requires-Dist: tox ; extra == 'dev' +Requires-Dist: sphinx ; extra == 'dev' +Requires-Dist: pallets-sphinx-themes ; extra == 'dev' +Requires-Dist: sphinxcontrib-log-cabinet ; extra == 'dev' +Requires-Dist: sphinx-issues ; extra == 'dev' +Provides-Extra: docs +Requires-Dist: sphinx ; extra == 'docs' +Requires-Dist: pallets-sphinx-themes ; extra == 'docs' +Requires-Dist: sphinxcontrib-log-cabinet ; extra == 'docs' +Requires-Dist: sphinx-issues ; extra == 'docs' +Provides-Extra: dotenv +Requires-Dist: python-dotenv ; extra == 'dotenv' + +Flask +===== + +Flask is a lightweight `WSGI`_ web application framework. It is designed +to make getting started quick and easy, with the ability to scale up to +complex applications. It began as a simple wrapper around `Werkzeug`_ +and `Jinja`_ and has become one of the most popular Python web +application frameworks. + +Flask offers suggestions, but doesn't enforce any dependencies or +project layout. It is up to the developer to choose the tools and +libraries they want to use. There are many extensions provided by the +community that make adding new functionality easy. + + +Installing +---------- + +Install and update using `pip`_: + +.. code-block:: text + + pip install -U Flask + + +A Simple Example +---------------- + +.. code-block:: python + + from flask import Flask + + app = Flask(__name__) + + @app.route("/") + def hello(): + return "Hello, World!" + +.. code-block:: text + + $ env FLASK_APP=hello.py flask run + * Serving Flask app "hello" + * Running on http://127.0.0.1:5000/ (Press CTRL+C to quit) + + +Contributing +------------ + +For guidance on setting up a development environment and how to make a +contribution to Flask, see the `contributing guidelines`_. + +.. _contributing guidelines: https://github.com/pallets/flask/blob/master/CONTRIBUTING.rst + + +Donate +------ + +The Pallets organization develops and supports Flask and the libraries +it uses. In order to grow the community of contributors and users, and +allow the maintainers to devote more time to the projects, `please +donate today`_. + +.. _please donate today: https://psfmember.org/civicrm/contribute/transact?reset=1&id=20 + + +Links +----- + +* Website: https://palletsprojects.com/p/flask/ +* Documentation: https://flask.palletsprojects.com/ +* Releases: https://pypi.org/project/Flask/ +* Code: https://github.com/pallets/flask +* Issue tracker: https://github.com/pallets/flask/issues +* Test status: https://dev.azure.com/pallets/flask/_build +* Official chat: https://discord.gg/t6rrQZH + +.. _WSGI: https://wsgi.readthedocs.io +.. _Werkzeug: https://www.palletsprojects.com/p/werkzeug/ +.. _Jinja: https://www.palletsprojects.com/p/jinja/ +.. _pip: https://pip.pypa.io/en/stable/quickstart/ + + diff --git a/week-0/day-3/my_todo_app/venv/lib/python3.6/site-packages/Flask-1.1.1.dist-info/RECORD b/week-0/day-3/my_todo_app/venv/lib/python3.6/site-packages/Flask-1.1.1.dist-info/RECORD new file mode 100644 index 00000000..0510f6fc --- /dev/null +++ b/week-0/day-3/my_todo_app/venv/lib/python3.6/site-packages/Flask-1.1.1.dist-info/RECORD @@ -0,0 +1,48 @@ +flask/__init__.py,sha256=qaBW4gy9Xxmdc3ygYO0_H214H1VpF7fq8xRR4XbqRjE,1894 +flask/__main__.py,sha256=fjVtt3QTANXlpJCOv3Ha7d5H-76MwzSIOab7SFD9TEk,254 +flask/_compat.py,sha256=8KPT54Iig96TuLipdogLRHNYToIcg-xPhnSV5VRERnw,4099 +flask/app.py,sha256=gLZInxueeQ9dkBo1wrntZ-bZqiDT4rYxy_AQ1xraFDc,98066 +flask/blueprints.py,sha256=vkdm8NusGsfZUeIfPdCluj733QFmiQcT4Sk1tuZLUjw,21400 +flask/cli.py,sha256=_WhPG1bggNdrP0QO95Vex6VJpDqTsVK0z54Y5poljKU,30933 +flask/config.py,sha256=3dejvQRYfNHw_V7dCLMxU8UNFpL34xIKemN7gHZIZ8Y,10052 +flask/ctx.py,sha256=cks-omGedkxawHFo6bKIrdOHsJCAgg1i_NWw_htxb5U,16724 +flask/debughelpers.py,sha256=-whvPKuAoU8AZ9c1z_INuOeBgfYDqE1J2xNBsoriugU,6475 +flask/globals.py,sha256=OgcHb6_NCyX6-TldciOdKcyj4PNfyQwClxdMhvov6aA,1637 +flask/helpers.py,sha256=x2Pa85R5dV6uA5f5423JTb6x4u6ZaMGf8sfosUZ76dQ,43004 +flask/logging.py,sha256=WcY5UkqTysGfmosyygSlXyZYGwOp3y-VsE6ehoJ48dk,3250 +flask/sessions.py,sha256=G0KsEkr_i1LG_wOINwFSOW3ts7Xbv4bNgEZKc7TRloc,14360 +flask/signals.py,sha256=yYLOed2x8WnQ7pirGalQYfpYpCILJ0LJhmNSrnWvjqw,2212 +flask/templating.py,sha256=F8E_IZXn9BGsjMzUJ5N_ACMyZdiFBp_SSEaUunvfZ7g,4939 +flask/testing.py,sha256=b0QaEejx0UcXqfSFP43k5W57bTVeDyrNK3uPD8JUpCk,10146 +flask/views.py,sha256=eeWnadLAj0QdQPLtjKipDetRZyG62CT2y7fNOFDJz0g,5802 +flask/wrappers.py,sha256=kgsvtZuMM6RQaDqhRbc5Pcj9vqTnaERl2pmXcdGL7LU,4736 +flask/json/__init__.py,sha256=6nITbZYiYOPB8Qfi1-dvsblwn01KRz8VOsMBIZyaYek,11988 +flask/json/tag.py,sha256=vq9GOllg_0kTWKuVFrwmkeOQzR-jdBD23x-89JyCCQI,8306 +Flask-1.1.1.dist-info/LICENSE.rst,sha256=SJqOEQhQntmKN7uYPhHg9-HTHwvY-Zp5yESOf_N9B-o,1475 +Flask-1.1.1.dist-info/METADATA,sha256=Ht4R6TpTKOaXOmmQHhEF3A0Obpzde2Ai0kzNdu6-VWQ,4400 +Flask-1.1.1.dist-info/WHEEL,sha256=h_aVn5OB2IERUjMbi2pucmR_zzWJtk303YXvhh60NJ8,110 +Flask-1.1.1.dist-info/entry_points.txt,sha256=gBLA1aKg0OYR8AhbAfg8lnburHtKcgJLDU52BBctN0k,42 +Flask-1.1.1.dist-info/top_level.txt,sha256=dvi65F6AeGWVU0TBpYiC04yM60-FX1gJFkK31IKQr5c,6 +Flask-1.1.1.dist-info/RECORD,, +../../../bin/flask,sha256=CkawjdVpTXwKWqx39bLdiWK32z7ZDiU1uY86F_wy_WE,295 +Flask-1.1.1.dist-info/INSTALLER,sha256=zuuue4knoyJ-UwPPXg8fezS7VCrXJQrAP7zeNuwvFQg,4 +flask/json/__pycache__/tag.cpython-36.pyc,, +flask/json/__pycache__/__init__.cpython-36.pyc,, +flask/__pycache__/testing.cpython-36.pyc,, +flask/__pycache__/templating.cpython-36.pyc,, +flask/__pycache__/config.cpython-36.pyc,, +flask/__pycache__/sessions.cpython-36.pyc,, +flask/__pycache__/_compat.cpython-36.pyc,, +flask/__pycache__/ctx.cpython-36.pyc,, +flask/__pycache__/globals.cpython-36.pyc,, +flask/__pycache__/app.cpython-36.pyc,, +flask/__pycache__/views.cpython-36.pyc,, +flask/__pycache__/logging.cpython-36.pyc,, +flask/__pycache__/cli.cpython-36.pyc,, +flask/__pycache__/__init__.cpython-36.pyc,, +flask/__pycache__/blueprints.cpython-36.pyc,, +flask/__pycache__/helpers.cpython-36.pyc,, +flask/__pycache__/signals.cpython-36.pyc,, +flask/__pycache__/__main__.cpython-36.pyc,, +flask/__pycache__/wrappers.cpython-36.pyc,, +flask/__pycache__/debughelpers.cpython-36.pyc,, diff --git a/week-0/day-3/my_todo_app/venv/lib/python3.6/site-packages/Flask-1.1.1.dist-info/WHEEL b/week-0/day-3/my_todo_app/venv/lib/python3.6/site-packages/Flask-1.1.1.dist-info/WHEEL new file mode 100644 index 00000000..78e6f69d --- /dev/null +++ b/week-0/day-3/my_todo_app/venv/lib/python3.6/site-packages/Flask-1.1.1.dist-info/WHEEL @@ -0,0 +1,6 @@ +Wheel-Version: 1.0 +Generator: bdist_wheel (0.33.4) +Root-Is-Purelib: true +Tag: py2-none-any +Tag: py3-none-any + diff --git a/week-0/day-3/my_todo_app/venv/lib/python3.6/site-packages/Flask-1.1.1.dist-info/entry_points.txt b/week-0/day-3/my_todo_app/venv/lib/python3.6/site-packages/Flask-1.1.1.dist-info/entry_points.txt new file mode 100644 index 00000000..1eb02520 --- /dev/null +++ b/week-0/day-3/my_todo_app/venv/lib/python3.6/site-packages/Flask-1.1.1.dist-info/entry_points.txt @@ -0,0 +1,3 @@ +[console_scripts] +flask = flask.cli:main + diff --git a/week-0/day-3/my_todo_app/venv/lib/python3.6/site-packages/Flask-1.1.1.dist-info/top_level.txt b/week-0/day-3/my_todo_app/venv/lib/python3.6/site-packages/Flask-1.1.1.dist-info/top_level.txt new file mode 100644 index 00000000..7e106024 --- /dev/null +++ b/week-0/day-3/my_todo_app/venv/lib/python3.6/site-packages/Flask-1.1.1.dist-info/top_level.txt @@ -0,0 +1 @@ +flask diff --git a/week-0/day-3/my_todo_app/venv/lib/python3.6/site-packages/Jinja2-2.10.1.dist-info/INSTALLER b/week-0/day-3/my_todo_app/venv/lib/python3.6/site-packages/Jinja2-2.10.1.dist-info/INSTALLER new file mode 100644 index 00000000..a1b589e3 --- /dev/null +++ b/week-0/day-3/my_todo_app/venv/lib/python3.6/site-packages/Jinja2-2.10.1.dist-info/INSTALLER @@ -0,0 +1 @@ +pip diff --git a/week-0/day-3/my_todo_app/venv/lib/python3.6/site-packages/Jinja2-2.10.1.dist-info/LICENSE b/week-0/day-3/my_todo_app/venv/lib/python3.6/site-packages/Jinja2-2.10.1.dist-info/LICENSE new file mode 100644 index 00000000..10145a26 --- /dev/null +++ b/week-0/day-3/my_todo_app/venv/lib/python3.6/site-packages/Jinja2-2.10.1.dist-info/LICENSE @@ -0,0 +1,31 @@ +Copyright (c) 2009 by the Jinja Team, see AUTHORS for more details. + +Some rights reserved. + +Redistribution and use in source and binary forms, with or without +modification, are permitted provided that the following conditions are +met: + + * Redistributions of source code must retain the above copyright + notice, this list of conditions and the following disclaimer. + + * Redistributions in binary form must reproduce the above + copyright notice, this list of conditions and the following + disclaimer in the documentation and/or other materials provided + with the distribution. + + * The names of the contributors may not be used to endorse or + promote products derived from this software without specific + prior written permission. + +THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. diff --git a/week-0/day-3/my_todo_app/venv/lib/python3.6/site-packages/Jinja2-2.10.1.dist-info/METADATA b/week-0/day-3/my_todo_app/venv/lib/python3.6/site-packages/Jinja2-2.10.1.dist-info/METADATA new file mode 100644 index 00000000..fb4a867d --- /dev/null +++ b/week-0/day-3/my_todo_app/venv/lib/python3.6/site-packages/Jinja2-2.10.1.dist-info/METADATA @@ -0,0 +1,67 @@ +Metadata-Version: 2.1 +Name: Jinja2 +Version: 2.10.1 +Summary: A small but fast and easy to use stand-alone template engine written in pure python. +Home-page: http://jinja.pocoo.org/ +Author: Armin Ronacher +Author-email: armin.ronacher@active-4.com +License: BSD +Platform: UNKNOWN +Classifier: Development Status :: 5 - Production/Stable +Classifier: Environment :: Web Environment +Classifier: Intended Audience :: Developers +Classifier: License :: OSI Approved :: BSD License +Classifier: Operating System :: OS Independent +Classifier: Programming Language :: Python +Classifier: Programming Language :: Python :: 2 +Classifier: Programming Language :: Python :: 2.6 +Classifier: Programming Language :: Python :: 2.7 +Classifier: Programming Language :: Python :: 3 +Classifier: Programming Language :: Python :: 3.3 +Classifier: Programming Language :: Python :: 3.4 +Classifier: Programming Language :: Python :: 3.5 +Classifier: Programming Language :: Python :: 3.6 +Classifier: Topic :: Internet :: WWW/HTTP :: Dynamic Content +Classifier: Topic :: Software Development :: Libraries :: Python Modules +Classifier: Topic :: Text Processing :: Markup :: HTML +Requires-Dist: MarkupSafe (>=0.23) +Provides-Extra: i18n +Requires-Dist: Babel (>=0.8) ; extra == 'i18n' + + +Jinja2 +~~~~~~ + +Jinja2 is a template engine written in pure Python. It provides a +`Django`_ inspired non-XML syntax but supports inline expressions and +an optional `sandboxed`_ environment. + +Nutshell +-------- + +Here a small example of a Jinja template:: + + {% extends 'base.html' %} + {% block title %}Memberlist{% endblock %} + {% block content %} + + {% endblock %} + +Philosophy +---------- + +Application logic is for the controller but don't try to make the life +for the template designer too hard by giving him too few functionality. + +For more informations visit the new `Jinja2 webpage`_ and `documentation`_. + +.. _sandboxed: https://en.wikipedia.org/wiki/Sandbox_(computer_security) +.. _Django: https://www.djangoproject.com/ +.. _Jinja2 webpage: http://jinja.pocoo.org/ +.. _documentation: http://jinja.pocoo.org/2/documentation/ + + diff --git a/week-0/day-3/my_todo_app/venv/lib/python3.6/site-packages/Jinja2-2.10.1.dist-info/RECORD b/week-0/day-3/my_todo_app/venv/lib/python3.6/site-packages/Jinja2-2.10.1.dist-info/RECORD new file mode 100644 index 00000000..629794a2 --- /dev/null +++ b/week-0/day-3/my_todo_app/venv/lib/python3.6/site-packages/Jinja2-2.10.1.dist-info/RECORD @@ -0,0 +1,61 @@ +jinja2/__init__.py,sha256=V1D-JHQKklZseXOMA-uAW7-BeKe_TfPpOFi9-dV04ZA,2616 +jinja2/_compat.py,sha256=xP60CE5Qr8FTYcDE1f54tbZLKGvMwYml4-8T7Q4KG9k,2596 +jinja2/_identifier.py,sha256=W1QBSY-iJsyt6oR_nKSuNNCzV95vLIOYgUNPUI1d5gU,1726 +jinja2/asyncfilters.py,sha256=cTDPvrS8Hp_IkwsZ1m9af_lr5nHysw7uTa5gV0NmZVE,4144 +jinja2/asyncsupport.py,sha256=UErQ3YlTLaSjFb94P4MVn08-aVD9jJxty2JVfMRb-1M,7878 +jinja2/bccache.py,sha256=nQldx0ZRYANMyfvOihRoYFKSlUdd5vJkS7BjxNwlOZM,12794 +jinja2/compiler.py,sha256=BqC5U6JxObSRhblyT_a6Tp5GtEU5z3US1a4jLQaxxgo,65386 +jinja2/constants.py,sha256=uwwV8ZUhHhacAuz5PTwckfsbqBaqM7aKfyJL7kGX5YQ,1626 +jinja2/debug.py,sha256=WTVeUFGUa4v6ReCsYv-iVPa3pkNB75OinJt3PfxNdXs,12045 +jinja2/defaults.py,sha256=Em-95hmsJxIenDCZFB1YSvf9CNhe9rBmytN3yUrBcWA,1400 +jinja2/environment.py,sha256=VnkAkqw8JbjZct4tAyHlpBrka2vqB-Z58RAP-32P1ZY,50849 +jinja2/exceptions.py,sha256=_Rj-NVi98Q6AiEjYQOsP8dEIdu5AlmRHzcSNOPdWix4,4428 +jinja2/ext.py,sha256=atMQydEC86tN1zUsdQiHw5L5cF62nDbqGue25Yiu3N4,24500 +jinja2/filters.py,sha256=yOAJk0MsH-_gEC0i0U6NweVQhbtYaC-uE8xswHFLF4w,36528 +jinja2/idtracking.py,sha256=2GbDSzIvGArEBGLkovLkqEfmYxmWsEf8c3QZwM4uNsw,9197 +jinja2/lexer.py,sha256=ySEPoXd1g7wRjsuw23uimS6nkGN5aqrYwcOKxCaVMBQ,28559 +jinja2/loaders.py,sha256=xiTuURKAEObyym0nU8PCIXu_Qp8fn0AJ5oIADUUm-5Q,17382 +jinja2/meta.py,sha256=fmKHxkmZYAOm9QyWWy8EMd6eefAIh234rkBMW2X4ZR8,4340 +jinja2/nativetypes.py,sha256=_sJhS8f-8Q0QMIC0dm1YEdLyxEyoO-kch8qOL5xUDfE,7308 +jinja2/nodes.py,sha256=L10L_nQDfubLhO3XjpF9qz46FSh2clL-3e49ogVlMmA,30853 +jinja2/optimizer.py,sha256=MsdlFACJ0FRdPtjmCAdt7JQ9SGrXFaDNUaslsWQaG3M,1722 +jinja2/parser.py,sha256=lPzTEbcpTRBLw8ii6OYyExHeAhaZLMA05Hpv4ll3ULk,35875 +jinja2/runtime.py,sha256=DHdD38Pq8gj7uWQC5usJyWFoNWL317A9AvXOW_CLB34,27755 +jinja2/sandbox.py,sha256=UmX8hVjdaERCbA3RXBwrV1f-beA23KmijG5kzPJyU4A,17106 +jinja2/tests.py,sha256=iJQLwbapZr-EKquTG_fVOVdwHUUKf3SX9eNkjQDF8oU,4237 +jinja2/utils.py,sha256=q24VupGZotQ-uOyrJxCaXtDWhZC1RgsQG7kcdmjck2Q,20629 +jinja2/visitor.py,sha256=JD1H1cANA29JcntFfN5fPyqQxB4bI4wC00BzZa-XHks,3316 +Jinja2-2.10.1.dist-info/LICENSE,sha256=JvzUNv3Io51EiWrAPm8d_SXjhJnEjyDYvB3Tvwqqils,1554 +Jinja2-2.10.1.dist-info/METADATA,sha256=rx0eN8lX8iq8-YVppmCzV1Qx4y3Pj9IWi08mXUCrewI,2227 +Jinja2-2.10.1.dist-info/WHEEL,sha256=HX-v9-noUkyUoxyZ1PMSuS7auUxDAR4VBdoYLqD0xws,110 +Jinja2-2.10.1.dist-info/entry_points.txt,sha256=NdzVcOrqyNyKDxD09aERj__3bFx2paZhizFDsKmVhiA,72 +Jinja2-2.10.1.dist-info/top_level.txt,sha256=PkeVWtLb3-CqjWi1fO29OCbj55EhX_chhKrCdrVe_zs,7 +Jinja2-2.10.1.dist-info/RECORD,, +Jinja2-2.10.1.dist-info/INSTALLER,sha256=zuuue4knoyJ-UwPPXg8fezS7VCrXJQrAP7zeNuwvFQg,4 +jinja2/__pycache__/utils.cpython-36.pyc,, +jinja2/__pycache__/runtime.cpython-36.pyc,, +jinja2/__pycache__/constants.cpython-36.pyc,, +jinja2/__pycache__/_identifier.cpython-36.pyc,, +jinja2/__pycache__/nativetypes.cpython-36.pyc,, +jinja2/__pycache__/filters.cpython-36.pyc,, +jinja2/__pycache__/loaders.cpython-36.pyc,, +jinja2/__pycache__/meta.cpython-36.pyc,, +jinja2/__pycache__/parser.cpython-36.pyc,, +jinja2/__pycache__/debug.cpython-36.pyc,, +jinja2/__pycache__/exceptions.cpython-36.pyc,, +jinja2/__pycache__/_compat.cpython-36.pyc,, +jinja2/__pycache__/idtracking.cpython-36.pyc,, +jinja2/__pycache__/compiler.cpython-36.pyc,, +jinja2/__pycache__/tests.cpython-36.pyc,, +jinja2/__pycache__/asyncsupport.cpython-36.pyc,, +jinja2/__pycache__/asyncfilters.cpython-36.pyc,, +jinja2/__pycache__/sandbox.cpython-36.pyc,, +jinja2/__pycache__/ext.cpython-36.pyc,, +jinja2/__pycache__/bccache.cpython-36.pyc,, +jinja2/__pycache__/__init__.cpython-36.pyc,, +jinja2/__pycache__/defaults.cpython-36.pyc,, +jinja2/__pycache__/nodes.cpython-36.pyc,, +jinja2/__pycache__/visitor.cpython-36.pyc,, +jinja2/__pycache__/lexer.cpython-36.pyc,, +jinja2/__pycache__/optimizer.cpython-36.pyc,, +jinja2/__pycache__/environment.cpython-36.pyc,, diff --git a/week-0/day-3/my_todo_app/venv/lib/python3.6/site-packages/Jinja2-2.10.1.dist-info/WHEEL b/week-0/day-3/my_todo_app/venv/lib/python3.6/site-packages/Jinja2-2.10.1.dist-info/WHEEL new file mode 100644 index 00000000..c8240f03 --- /dev/null +++ b/week-0/day-3/my_todo_app/venv/lib/python3.6/site-packages/Jinja2-2.10.1.dist-info/WHEEL @@ -0,0 +1,6 @@ +Wheel-Version: 1.0 +Generator: bdist_wheel (0.33.1) +Root-Is-Purelib: true +Tag: py2-none-any +Tag: py3-none-any + diff --git a/week-0/day-3/my_todo_app/venv/lib/python3.6/site-packages/Jinja2-2.10.1.dist-info/entry_points.txt b/week-0/day-3/my_todo_app/venv/lib/python3.6/site-packages/Jinja2-2.10.1.dist-info/entry_points.txt new file mode 100644 index 00000000..32e6b753 --- /dev/null +++ b/week-0/day-3/my_todo_app/venv/lib/python3.6/site-packages/Jinja2-2.10.1.dist-info/entry_points.txt @@ -0,0 +1,4 @@ + + [babel.extractors] + jinja2 = jinja2.ext:babel_extract[i18n] + \ No newline at end of file diff --git a/week-0/day-3/my_todo_app/venv/lib/python3.6/site-packages/Jinja2-2.10.1.dist-info/top_level.txt b/week-0/day-3/my_todo_app/venv/lib/python3.6/site-packages/Jinja2-2.10.1.dist-info/top_level.txt new file mode 100644 index 00000000..7f7afbf3 --- /dev/null +++ b/week-0/day-3/my_todo_app/venv/lib/python3.6/site-packages/Jinja2-2.10.1.dist-info/top_level.txt @@ -0,0 +1 @@ +jinja2 diff --git a/week-0/day-3/my_todo_app/venv/lib/python3.6/site-packages/MarkupSafe-1.1.1.dist-info/INSTALLER b/week-0/day-3/my_todo_app/venv/lib/python3.6/site-packages/MarkupSafe-1.1.1.dist-info/INSTALLER new file mode 100644 index 00000000..a1b589e3 --- /dev/null +++ b/week-0/day-3/my_todo_app/venv/lib/python3.6/site-packages/MarkupSafe-1.1.1.dist-info/INSTALLER @@ -0,0 +1 @@ +pip diff --git a/week-0/day-3/my_todo_app/venv/lib/python3.6/site-packages/MarkupSafe-1.1.1.dist-info/LICENSE.txt b/week-0/day-3/my_todo_app/venv/lib/python3.6/site-packages/MarkupSafe-1.1.1.dist-info/LICENSE.txt new file mode 100644 index 00000000..9d227a0c --- /dev/null +++ b/week-0/day-3/my_todo_app/venv/lib/python3.6/site-packages/MarkupSafe-1.1.1.dist-info/LICENSE.txt @@ -0,0 +1,28 @@ +Copyright 2010 Pallets + +Redistribution and use in source and binary forms, with or without +modification, are permitted provided that the following conditions are +met: + +1. Redistributions of source code must retain the above copyright + notice, this list of conditions and the following disclaimer. + +2. Redistributions in binary form must reproduce the above copyright + notice, this list of conditions and the following disclaimer in the + documentation and/or other materials provided with the distribution. + +3. Neither the name of the copyright holder nor the names of its + contributors may be used to endorse or promote products derived from + this software without specific prior written permission. + +THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A +PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED +TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR +PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF +LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING +NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS +SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. diff --git a/week-0/day-3/my_todo_app/venv/lib/python3.6/site-packages/MarkupSafe-1.1.1.dist-info/METADATA b/week-0/day-3/my_todo_app/venv/lib/python3.6/site-packages/MarkupSafe-1.1.1.dist-info/METADATA new file mode 100644 index 00000000..b208d936 --- /dev/null +++ b/week-0/day-3/my_todo_app/venv/lib/python3.6/site-packages/MarkupSafe-1.1.1.dist-info/METADATA @@ -0,0 +1,103 @@ +Metadata-Version: 2.1 +Name: MarkupSafe +Version: 1.1.1 +Summary: Safely add untrusted strings to HTML/XML markup. +Home-page: https://palletsprojects.com/p/markupsafe/ +Author: Armin Ronacher +Author-email: armin.ronacher@active-4.com +Maintainer: The Pallets Team +Maintainer-email: contact@palletsprojects.com +License: BSD-3-Clause +Project-URL: Documentation, https://markupsafe.palletsprojects.com/ +Project-URL: Code, https://github.com/pallets/markupsafe +Project-URL: Issue tracker, https://github.com/pallets/markupsafe/issues +Platform: UNKNOWN +Classifier: Development Status :: 5 - Production/Stable +Classifier: Environment :: Web Environment +Classifier: Intended Audience :: Developers +Classifier: License :: OSI Approved :: BSD License +Classifier: Operating System :: OS Independent +Classifier: Programming Language :: Python +Classifier: Programming Language :: Python :: 2 +Classifier: Programming Language :: Python :: 2.7 +Classifier: Programming Language :: Python :: 3 +Classifier: Programming Language :: Python :: 3.4 +Classifier: Programming Language :: Python :: 3.5 +Classifier: Programming Language :: Python :: 3.6 +Classifier: Programming Language :: Python :: 3.7 +Classifier: Topic :: Internet :: WWW/HTTP :: Dynamic Content +Classifier: Topic :: Software Development :: Libraries :: Python Modules +Classifier: Topic :: Text Processing :: Markup :: HTML +Requires-Python: >=2.7,!=3.0.*,!=3.1.*,!=3.2.*,!=3.3.* + +MarkupSafe +========== + +MarkupSafe implements a text object that escapes characters so it is +safe to use in HTML and XML. Characters that have special meanings are +replaced so that they display as the actual characters. This mitigates +injection attacks, meaning untrusted user input can safely be displayed +on a page. + + +Installing +---------- + +Install and update using `pip`_: + +.. code-block:: text + + pip install -U MarkupSafe + +.. _pip: https://pip.pypa.io/en/stable/quickstart/ + + +Examples +-------- + +.. code-block:: pycon + + >>> from markupsafe import Markup, escape + >>> # escape replaces special characters and wraps in Markup + >>> escape('') + Markup(u'<script>alert(document.cookie);</script>') + >>> # wrap in Markup to mark text "safe" and prevent escaping + >>> Markup('Hello') + Markup('hello') + >>> escape(Markup('Hello')) + Markup('hello') + >>> # Markup is a text subclass (str on Python 3, unicode on Python 2) + >>> # methods and operators escape their arguments + >>> template = Markup("Hello %s") + >>> template % '"World"' + Markup('Hello "World"') + + +Donate +------ + +The Pallets organization develops and supports MarkupSafe and other +libraries that use it. In order to grow the community of contributors +and users, and allow the maintainers to devote more time to the +projects, `please donate today`_. + +.. _please donate today: https://palletsprojects.com/donate + + +Links +----- + +* Website: https://palletsprojects.com/p/markupsafe/ +* Documentation: https://markupsafe.palletsprojects.com/ +* License: `BSD-3-Clause `_ +* Releases: https://pypi.org/project/MarkupSafe/ +* Code: https://github.com/pallets/markupsafe +* Issue tracker: https://github.com/pallets/markupsafe/issues +* Test status: + + * Linux, Mac: https://travis-ci.org/pallets/markupsafe + * Windows: https://ci.appveyor.com/project/pallets/markupsafe + +* Test coverage: https://codecov.io/gh/pallets/markupsafe + + diff --git a/week-0/day-3/my_todo_app/venv/lib/python3.6/site-packages/MarkupSafe-1.1.1.dist-info/RECORD b/week-0/day-3/my_todo_app/venv/lib/python3.6/site-packages/MarkupSafe-1.1.1.dist-info/RECORD new file mode 100644 index 00000000..addf3e56 --- /dev/null +++ b/week-0/day-3/my_todo_app/venv/lib/python3.6/site-packages/MarkupSafe-1.1.1.dist-info/RECORD @@ -0,0 +1,16 @@ +MarkupSafe-1.1.1.dist-info/LICENSE.txt,sha256=SJqOEQhQntmKN7uYPhHg9-HTHwvY-Zp5yESOf_N9B-o,1475 +MarkupSafe-1.1.1.dist-info/top_level.txt,sha256=qy0Plje5IJuvsCBjejJyhDCjEAdcDLK_2agVcex8Z6U,11 +MarkupSafe-1.1.1.dist-info/RECORD,, +MarkupSafe-1.1.1.dist-info/METADATA,sha256=nJHwJ4_4ka-V39QH883jPrslj6inNdyyNASBXbYgHXQ,3570 +MarkupSafe-1.1.1.dist-info/WHEEL,sha256=d2ILPScH-y2UwGxsW1PeA2TT-KW0Git4AJ6LeOK8sQo,109 +markupsafe/_constants.py,sha256=zo2ajfScG-l1Sb_52EP3MlDCqO7Y1BVHUXXKRsVDRNk,4690 +markupsafe/_compat.py,sha256=uEW1ybxEjfxIiuTbRRaJpHsPFf4yQUMMKaPgYEC5XbU,558 +markupsafe/_native.py,sha256=d-8S_zzYt2y512xYcuSxq0NeG2DUUvG80wVdTn-4KI8,1873 +markupsafe/__init__.py,sha256=oTblO5f9KFM-pvnq9bB0HgElnqkJyqHnFN1Nx2NIvnY,10126 +markupsafe/_speedups.cpython-36m-x86_64-linux-gnu.so,sha256=YAxqjdtS2XJQ043wfxMAnE1u7KpsBc49UrW9yGPiK0w,38875 +markupsafe/_speedups.c,sha256=k0fzEIK3CP6MmMqeY0ob43TP90mVN0DTyn7BAl3RqSg,9884 +MarkupSafe-1.1.1.dist-info/INSTALLER,sha256=zuuue4knoyJ-UwPPXg8fezS7VCrXJQrAP7zeNuwvFQg,4 +markupsafe/__pycache__/_compat.cpython-36.pyc,, +markupsafe/__pycache__/_constants.cpython-36.pyc,, +markupsafe/__pycache__/_native.cpython-36.pyc,, +markupsafe/__pycache__/__init__.cpython-36.pyc,, diff --git a/week-0/day-3/my_todo_app/venv/lib/python3.6/site-packages/MarkupSafe-1.1.1.dist-info/WHEEL b/week-0/day-3/my_todo_app/venv/lib/python3.6/site-packages/MarkupSafe-1.1.1.dist-info/WHEEL new file mode 100644 index 00000000..92946fe5 --- /dev/null +++ b/week-0/day-3/my_todo_app/venv/lib/python3.6/site-packages/MarkupSafe-1.1.1.dist-info/WHEEL @@ -0,0 +1,5 @@ +Wheel-Version: 1.0 +Generator: bdist_wheel (0.31.1) +Root-Is-Purelib: false +Tag: cp36-cp36m-manylinux1_x86_64 + diff --git a/week-0/day-3/my_todo_app/venv/lib/python3.6/site-packages/MarkupSafe-1.1.1.dist-info/top_level.txt b/week-0/day-3/my_todo_app/venv/lib/python3.6/site-packages/MarkupSafe-1.1.1.dist-info/top_level.txt new file mode 100644 index 00000000..75bf7292 --- /dev/null +++ b/week-0/day-3/my_todo_app/venv/lib/python3.6/site-packages/MarkupSafe-1.1.1.dist-info/top_level.txt @@ -0,0 +1 @@ +markupsafe diff --git a/week-0/day-3/my_todo_app/venv/lib/python3.6/site-packages/Werkzeug-0.15.5.dist-info/INSTALLER b/week-0/day-3/my_todo_app/venv/lib/python3.6/site-packages/Werkzeug-0.15.5.dist-info/INSTALLER new file mode 100644 index 00000000..a1b589e3 --- /dev/null +++ b/week-0/day-3/my_todo_app/venv/lib/python3.6/site-packages/Werkzeug-0.15.5.dist-info/INSTALLER @@ -0,0 +1 @@ +pip diff --git a/week-0/day-3/my_todo_app/venv/lib/python3.6/site-packages/Werkzeug-0.15.5.dist-info/LICENSE.rst b/week-0/day-3/my_todo_app/venv/lib/python3.6/site-packages/Werkzeug-0.15.5.dist-info/LICENSE.rst new file mode 100644 index 00000000..c37cae49 --- /dev/null +++ b/week-0/day-3/my_todo_app/venv/lib/python3.6/site-packages/Werkzeug-0.15.5.dist-info/LICENSE.rst @@ -0,0 +1,28 @@ +Copyright 2007 Pallets + +Redistribution and use in source and binary forms, with or without +modification, are permitted provided that the following conditions are +met: + +1. Redistributions of source code must retain the above copyright + notice, this list of conditions and the following disclaimer. + +2. Redistributions in binary form must reproduce the above copyright + notice, this list of conditions and the following disclaimer in the + documentation and/or other materials provided with the distribution. + +3. Neither the name of the copyright holder nor the names of its + contributors may be used to endorse or promote products derived from + this software without specific prior written permission. + +THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A +PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED +TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR +PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF +LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING +NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS +SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. diff --git a/week-0/day-3/my_todo_app/venv/lib/python3.6/site-packages/Werkzeug-0.15.5.dist-info/METADATA b/week-0/day-3/my_todo_app/venv/lib/python3.6/site-packages/Werkzeug-0.15.5.dist-info/METADATA new file mode 100644 index 00000000..34ce7eab --- /dev/null +++ b/week-0/day-3/my_todo_app/venv/lib/python3.6/site-packages/Werkzeug-0.15.5.dist-info/METADATA @@ -0,0 +1,128 @@ +Metadata-Version: 2.1 +Name: Werkzeug +Version: 0.15.5 +Summary: The comprehensive WSGI web application library. +Home-page: https://palletsprojects.com/p/werkzeug/ +Author: Armin Ronacher +Author-email: armin.ronacher@active-4.com +Maintainer: Pallets +Maintainer-email: contact@palletsprojects.com +License: BSD-3-Clause +Project-URL: Documentation, https://werkzeug.palletsprojects.com/ +Project-URL: Code, https://github.com/pallets/werkzeug +Project-URL: Issue tracker, https://github.com/pallets/werkzeug/issues +Platform: UNKNOWN +Classifier: Development Status :: 5 - Production/Stable +Classifier: Environment :: Web Environment +Classifier: Intended Audience :: Developers +Classifier: License :: OSI Approved :: BSD License +Classifier: Operating System :: OS Independent +Classifier: Programming Language :: Python +Classifier: Programming Language :: Python :: 2 +Classifier: Programming Language :: Python :: 2.7 +Classifier: Programming Language :: Python :: 3 +Classifier: Programming Language :: Python :: 3.4 +Classifier: Programming Language :: Python :: 3.5 +Classifier: Programming Language :: Python :: 3.6 +Classifier: Programming Language :: Python :: 3.7 +Classifier: Programming Language :: Python :: Implementation :: CPython +Classifier: Programming Language :: Python :: Implementation :: PyPy +Classifier: Topic :: Internet :: WWW/HTTP :: Dynamic Content +Classifier: Topic :: Internet :: WWW/HTTP :: WSGI +Classifier: Topic :: Internet :: WWW/HTTP :: WSGI :: Application +Classifier: Topic :: Internet :: WWW/HTTP :: WSGI :: Middleware +Classifier: Topic :: Software Development :: Libraries :: Application Frameworks +Classifier: Topic :: Software Development :: Libraries :: Python Modules +Requires-Python: >=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.* +Provides-Extra: dev +Requires-Dist: pytest ; extra == 'dev' +Requires-Dist: coverage ; extra == 'dev' +Requires-Dist: tox ; extra == 'dev' +Requires-Dist: sphinx ; extra == 'dev' +Requires-Dist: pallets-sphinx-themes ; extra == 'dev' +Requires-Dist: sphinx-issues ; extra == 'dev' +Provides-Extra: termcolor +Requires-Dist: termcolor ; extra == 'termcolor' +Provides-Extra: watchdog +Requires-Dist: watchdog ; extra == 'watchdog' + +Werkzeug +======== + +*werkzeug* German noun: "tool". Etymology: *werk* ("work"), *zeug* ("stuff") + +Werkzeug is a comprehensive `WSGI`_ web application library. It began as +a simple collection of various utilities for WSGI applications and has +become one of the most advanced WSGI utility libraries. + +It includes: + +- An interactive debugger that allows inspecting stack traces and + source code in the browser with an interactive interpreter for any + frame in the stack. +- A full-featured request object with objects to interact with + headers, query args, form data, files, and cookies. +- A response object that can wrap other WSGI applications and handle + streaming data. +- A routing system for matching URLs to endpoints and generating URLs + for endpoints, with an extensible system for capturing variables + from URLs. +- HTTP utilities to handle entity tags, cache control, dates, user + agents, cookies, files, and more. +- A threaded WSGI server for use while developing applications + locally. +- A test client for simulating HTTP requests during testing without + requiring running a server. + +Werkzeug is Unicode aware and doesn't enforce any dependencies. It is up +to the developer to choose a template engine, database adapter, and even +how to handle requests. It can be used to build all sorts of end user +applications such as blogs, wikis, or bulletin boards. + +`Flask`_ wraps Werkzeug, using it to handle the details of WSGI while +providing more structure and patterns for defining powerful +applications. + + +Installing +---------- + +Install and update using `pip`_: + +.. code-block:: text + + pip install -U Werkzeug + + +A Simple Example +---------------- + +.. code-block:: python + + from werkzeug.wrappers import Request, Response + + @Request.application + def application(request): + return Response('Hello, World!') + + if __name__ == '__main__': + from werkzeug.serving import run_simple + run_simple('localhost', 4000, application) + + +Links +----- + +- Website: https://palletsprojects.com/p/werkzeug/ +- Documentation: https://werkzeug.palletsprojects.com/ +- Releases: https://pypi.org/project/Werkzeug/ +- Code: https://github.com/pallets/werkzeug +- Issue tracker: https://github.com/pallets/werkzeug/issues +- Test status: https://dev.azure.com/pallets/werkzeug/_build +- Official chat: https://discord.gg/t6rrQZH + +.. _WSGI: https://wsgi.readthedocs.io/en/latest/ +.. _Flask: https://www.palletsprojects.com/p/flask/ +.. _pip: https://pip.pypa.io/en/stable/quickstart/ + + diff --git a/week-0/day-3/my_todo_app/venv/lib/python3.6/site-packages/Werkzeug-0.15.5.dist-info/RECORD b/week-0/day-3/my_todo_app/venv/lib/python3.6/site-packages/Werkzeug-0.15.5.dist-info/RECORD new file mode 100644 index 00000000..197e7d04 --- /dev/null +++ b/week-0/day-3/my_todo_app/venv/lib/python3.6/site-packages/Werkzeug-0.15.5.dist-info/RECORD @@ -0,0 +1,119 @@ +werkzeug/__init__.py,sha256=TqqguxCOVD9JRfiTjo_JNHcEmtQsdK1B9FxwDNchE18,6805 +werkzeug/_compat.py,sha256=oBEVVrJT4sqYdIZbUWmgV9T9w257RhTSDBlTjh0Zbb0,6431 +werkzeug/_internal.py,sha256=Wx7cpTRWqeBd0LAqobo0lCO4pNUW4oav6XKf7Taumgk,14590 +werkzeug/_reloader.py,sha256=J0EYq3YrGtC3bNDRqWCHf4yBPuVYoZBy8qp69eHO3YQ,11281 +werkzeug/datastructures.py,sha256=8HoA4Gu9i7ZWi5OBjx244OLWvDEE4JTQQUUTRoAYKog,91761 +werkzeug/exceptions.py,sha256=UzmMCkt5PCn5-TDNI0iGxGz07d3sKHQoArJrvurqVBE,23638 +werkzeug/filesystem.py,sha256=HzKl-j0Hd8Jl66j778UbPTAYNnY6vUZgYLlBZ0e7uw0,2101 +werkzeug/formparser.py,sha256=tN6SO4mn6RUsxRZq4qVBWXbNWNuasn2KaBznTieMaVk,21790 +werkzeug/http.py,sha256=t0ET2tySAf9ZWdEelVWJoLaZzFViYpjoUmiYHPz10-E,43304 +werkzeug/local.py,sha256=USVEcgIg-oCiUJFPIecFIW9jkIejfw4Fjf1u5yN-Np4,14456 +werkzeug/posixemulation.py,sha256=gSSiv1SCmOyzOM_nq1ZaZCtxP__C5MeDJl_4yXJmi4Q,3541 +werkzeug/routing.py,sha256=BSgjrYNwj2j5dAHQtK4INEp2TOf4OJP8hBncYSRO2ps,73410 +werkzeug/security.py,sha256=81149MplFq7-hD4RK4sKp9kzXXejjV9D4lWBzaRyeQ8,8106 +werkzeug/serving.py,sha256=tUFUMg7Bj9iw3nA8ZgC_czMDJJKN7vFskajEmgEFhzE,36597 +werkzeug/test.py,sha256=Cnb5xa3vLDL0hzFCH1fkG_YRpndViGQgCh4D744iSQk,40645 +werkzeug/testapp.py,sha256=hcKBzorVlSHC-uGvGXXjCm3FzCwGWq4yjbTG3Pr7MV8,9301 +werkzeug/urls.py,sha256=8yHdYI99N__-isoTwvGqvuj9QhOh66dd1Xh1DIp0q0g,39261 +werkzeug/useragents.py,sha256=FIonyUF790Ro8OG8cJqG1zixhg5YzXdHmkZbrnK0QRo,5965 +werkzeug/utils.py,sha256=O20Y0qWk5O1IWamC_A5gkmzR5cgBd3yDIHviwBTfNB0,27387 +werkzeug/wsgi.py,sha256=h-zyAeInwE6X6ciSnHI14ImA85adV-F861PmR7UGtRk,36681 +werkzeug/contrib/__init__.py,sha256=EvNyiiCF49j5P0fZYJ3ZGe82ofXdSBvUNqWFwwBMibQ,553 +werkzeug/contrib/atom.py,sha256=KpPJcTfzNW1J0VNQckCbVtVGBe3V8s451tOUya4qByI,15415 +werkzeug/contrib/cache.py,sha256=AEh5UIw-Ui7sHZnlpvrD7ueOKUhCaAD55FXiPtXbbRs,32115 +werkzeug/contrib/fixers.py,sha256=peEtAiIWYT5bh00EWEPOGKzGZXivOzVhhzKPvvzk1RM,9193 +werkzeug/contrib/iterio.py,sha256=KKHa_8aCF_uhoeQVyPGUwrivuB6y6nNdXYo2D2vzOA8,10928 +werkzeug/contrib/lint.py,sha256=NdIxP0E2kVt1xDIxoaIz3Rcl8ZdgmHaFbGTOaybGpN4,296 +werkzeug/contrib/profiler.py,sha256=k_oMLU-AtsVvQ9TxNdermY6FuzSTYr-WE-ZmWb_DMyU,1229 +werkzeug/contrib/securecookie.py,sha256=xbtElskGmtbiApgOJ5WhGgqGDs_68_PcWzqDIAY_QZY,13076 +werkzeug/contrib/sessions.py,sha256=oVXh_7-6_CWOMxDKqcaK05H8RpYoWqAd3al-KzMFPYs,13042 +werkzeug/contrib/wrappers.py,sha256=ZmNk0wpzD66yomPnQxapndZQs4c0kNJaRzqI-BVxeQk,13199 +werkzeug/debug/__init__.py,sha256=Bo3HvgTNY4NQ_2jROTSk3r1ScZcT_g_4EnuHTjKyrKM,18275 +werkzeug/debug/console.py,sha256=HoBL21bbcmtiCLqiLDJLZi1LYnWMZxjoXYH5WaZB1XY,5469 +werkzeug/debug/repr.py,sha256=lIwuhbyrMwVe3P_cFqNyqzHL7P93TLKod7lw9clydEw,9621 +werkzeug/debug/tbtools.py,sha256=SkAAA4KKfwsXJinUbf-AEP4GqONTsR4uU7WPUloXcSE,20318 +werkzeug/debug/shared/FONT_LICENSE,sha256=LwAVEI1oYnvXiNMT9SnCH_TaLCxCpeHziDrMg0gPkAI,4673 +werkzeug/debug/shared/console.png,sha256=bxax6RXXlvOij_KeqvSNX0ojJf83YbnZ7my-3Gx9w2A,507 +werkzeug/debug/shared/debugger.js,sha256=rOhqZMRfpZnnu6_XCGn6wMWPhtfwRAcyZKksdIxPJas,6400 +werkzeug/debug/shared/jquery.js,sha256=CSXorXvZcTkaix6Yvo6HppcZGetbYMGWSFlBw8HfCJo,88145 +werkzeug/debug/shared/less.png,sha256=-4-kNRaXJSONVLahrQKUxMwXGm9R4OnZ9SxDGpHlIR4,191 +werkzeug/debug/shared/more.png,sha256=GngN7CioHQoV58rH6ojnkYi8c_qED2Aka5FO5UXrReY,200 +werkzeug/debug/shared/source.png,sha256=RoGcBTE4CyCB85GBuDGTFlAnUqxwTBiIfDqW15EpnUQ,818 +werkzeug/debug/shared/style.css,sha256=gZ9uhmb5zj3XLuT9RvnMp6jMINgQ-VVBCp-2AZbG3YQ,6604 +werkzeug/debug/shared/ubuntu.ttf,sha256=1eaHFyepmy4FyDvjLVzpITrGEBu_CZYY94jE0nED1c0,70220 +werkzeug/middleware/__init__.py,sha256=f1SFZo67IlW4k1uqKzNHxYQlsakUS-D6KK_j0e3jjwQ,549 +werkzeug/middleware/dispatcher.py,sha256=_-KoMzHtcISHS7ouWKAOraqlCLprdh83YOAn_8DjLp8,2240 +werkzeug/middleware/http_proxy.py,sha256=lRjTdMmghHiZuZrS7_UJ3gZc-vlFizhBbFZ-XZPLwIA,7117 +werkzeug/middleware/lint.py,sha256=ItTwuWJnflF8xMT1uqU_Ty1ryhux-CjeUfskqaUpxsw,12967 +werkzeug/middleware/profiler.py,sha256=8B_s23d6BGrU_q54gJsm6kcCbOJbTSqrXCsioHON0Xs,4471 +werkzeug/middleware/proxy_fix.py,sha256=Y86VcU2oAQ--x0mi4iFVJyEFMzp3Ao8q0zvr_SsrpNw,8506 +werkzeug/middleware/shared_data.py,sha256=WtSphPrsUdpEk4E-_09CAILhfOBJ1YtcX1LrxcQfIzw,8224 +werkzeug/wrappers/__init__.py,sha256=S4VioKAmF_av9Ec9zQvG71X1EOkYfPx1TYck9jyDiyY,1384 +werkzeug/wrappers/accept.py,sha256=TIvjUc0g73fhTWX54wg_D9NNzKvpnG1X8u1w26tK1o8,1760 +werkzeug/wrappers/auth.py,sha256=Pmn6iaGHBrUyHbJpW0lZhO_q9RVoAa5QalaTqcavdAI,1158 +werkzeug/wrappers/base_request.py,sha256=aknREwqVT7WJUxm4weUGdBj90H6rDR3DvsIvmYhaC8A,26943 +werkzeug/wrappers/base_response.py,sha256=ZA1XlxtsbvG4SpbdOEMT5--z7aZM0w6C5y33W8wOXa4,27906 +werkzeug/wrappers/common_descriptors.py,sha256=OJ8jOwMun4L-BxCuFPkK1vaefx_-Y5IndVXvvn_ems4,12089 +werkzeug/wrappers/etag.py,sha256=TwMO1fvluXbBqnFTj2DvrCNa3mYhbHYe1UZAVzfXvuU,12533 +werkzeug/wrappers/json.py,sha256=HvK_A4NpO0sLqgb10sTJcoZydYOwyNiPCJPV7SVgcgE,4343 +werkzeug/wrappers/request.py,sha256=qPo2zmmBv4HxboywtWZb2pJL8OPXo07BUXBKw2j9Fi8,1338 +werkzeug/wrappers/response.py,sha256=vDZFEGzDOG0jjmS0uVVjeT3hqRt1hFaf15npnx7RD28,2329 +werkzeug/wrappers/user_agent.py,sha256=4bTgQKTLQmGUyxOREYOzbeiFP2VwIOE7E14AhUB5NqM,444 +Werkzeug-0.15.5.dist-info/LICENSE.rst,sha256=O0nc7kEF6ze6wQ-vG-JgQI_oXSUrjp3y4JefweCUQ3s,1475 +Werkzeug-0.15.5.dist-info/METADATA,sha256=QMmXGaI5L-K5NH-S1q3ATVwWxqU0tQgUCdrJ7_OzqwU,4712 +Werkzeug-0.15.5.dist-info/WHEEL,sha256=h_aVn5OB2IERUjMbi2pucmR_zzWJtk303YXvhh60NJ8,110 +Werkzeug-0.15.5.dist-info/top_level.txt,sha256=QRyj2VjwJoQkrwjwFIOlB8Xg3r9un0NtqVHQF-15xaw,9 +Werkzeug-0.15.5.dist-info/RECORD,, +Werkzeug-0.15.5.dist-info/INSTALLER,sha256=zuuue4knoyJ-UwPPXg8fezS7VCrXJQrAP7zeNuwvFQg,4 +werkzeug/debug/__pycache__/repr.cpython-36.pyc,, +werkzeug/debug/__pycache__/__init__.cpython-36.pyc,, +werkzeug/debug/__pycache__/console.cpython-36.pyc,, +werkzeug/debug/__pycache__/tbtools.cpython-36.pyc,, +werkzeug/wrappers/__pycache__/request.cpython-36.pyc,, +werkzeug/wrappers/__pycache__/response.cpython-36.pyc,, +werkzeug/wrappers/__pycache__/accept.cpython-36.pyc,, +werkzeug/wrappers/__pycache__/base_request.cpython-36.pyc,, +werkzeug/wrappers/__pycache__/etag.cpython-36.pyc,, +werkzeug/wrappers/__pycache__/user_agent.cpython-36.pyc,, +werkzeug/wrappers/__pycache__/__init__.cpython-36.pyc,, +werkzeug/wrappers/__pycache__/json.cpython-36.pyc,, +werkzeug/wrappers/__pycache__/base_response.cpython-36.pyc,, +werkzeug/wrappers/__pycache__/auth.cpython-36.pyc,, +werkzeug/wrappers/__pycache__/common_descriptors.cpython-36.pyc,, +werkzeug/contrib/__pycache__/fixers.cpython-36.pyc,, +werkzeug/contrib/__pycache__/sessions.cpython-36.pyc,, +werkzeug/contrib/__pycache__/cache.cpython-36.pyc,, +werkzeug/contrib/__pycache__/iterio.cpython-36.pyc,, +werkzeug/contrib/__pycache__/securecookie.cpython-36.pyc,, +werkzeug/contrib/__pycache__/__init__.cpython-36.pyc,, +werkzeug/contrib/__pycache__/lint.cpython-36.pyc,, +werkzeug/contrib/__pycache__/atom.cpython-36.pyc,, +werkzeug/contrib/__pycache__/profiler.cpython-36.pyc,, +werkzeug/contrib/__pycache__/wrappers.cpython-36.pyc,, +werkzeug/middleware/__pycache__/shared_data.cpython-36.pyc,, +werkzeug/middleware/__pycache__/dispatcher.cpython-36.pyc,, +werkzeug/middleware/__pycache__/proxy_fix.cpython-36.pyc,, +werkzeug/middleware/__pycache__/http_proxy.cpython-36.pyc,, +werkzeug/middleware/__pycache__/__init__.cpython-36.pyc,, +werkzeug/middleware/__pycache__/lint.cpython-36.pyc,, +werkzeug/middleware/__pycache__/profiler.cpython-36.pyc,, +werkzeug/__pycache__/filesystem.cpython-36.pyc,, +werkzeug/__pycache__/testapp.cpython-36.pyc,, +werkzeug/__pycache__/utils.cpython-36.pyc,, +werkzeug/__pycache__/datastructures.cpython-36.pyc,, +werkzeug/__pycache__/http.cpython-36.pyc,, +werkzeug/__pycache__/posixemulation.cpython-36.pyc,, +werkzeug/__pycache__/exceptions.cpython-36.pyc,, +werkzeug/__pycache__/useragents.cpython-36.pyc,, +werkzeug/__pycache__/routing.cpython-36.pyc,, +werkzeug/__pycache__/_compat.cpython-36.pyc,, +werkzeug/__pycache__/serving.cpython-36.pyc,, +werkzeug/__pycache__/_reloader.cpython-36.pyc,, +werkzeug/__pycache__/wsgi.cpython-36.pyc,, +werkzeug/__pycache__/formparser.cpython-36.pyc,, +werkzeug/__pycache__/local.cpython-36.pyc,, +werkzeug/__pycache__/__init__.cpython-36.pyc,, +werkzeug/__pycache__/test.cpython-36.pyc,, +werkzeug/__pycache__/urls.cpython-36.pyc,, +werkzeug/__pycache__/_internal.cpython-36.pyc,, +werkzeug/__pycache__/security.cpython-36.pyc,, diff --git a/week-0/day-3/my_todo_app/venv/lib/python3.6/site-packages/Werkzeug-0.15.5.dist-info/WHEEL b/week-0/day-3/my_todo_app/venv/lib/python3.6/site-packages/Werkzeug-0.15.5.dist-info/WHEEL new file mode 100644 index 00000000..78e6f69d --- /dev/null +++ b/week-0/day-3/my_todo_app/venv/lib/python3.6/site-packages/Werkzeug-0.15.5.dist-info/WHEEL @@ -0,0 +1,6 @@ +Wheel-Version: 1.0 +Generator: bdist_wheel (0.33.4) +Root-Is-Purelib: true +Tag: py2-none-any +Tag: py3-none-any + diff --git a/week-0/day-3/my_todo_app/venv/lib/python3.6/site-packages/Werkzeug-0.15.5.dist-info/top_level.txt b/week-0/day-3/my_todo_app/venv/lib/python3.6/site-packages/Werkzeug-0.15.5.dist-info/top_level.txt new file mode 100644 index 00000000..6fe8da84 --- /dev/null +++ b/week-0/day-3/my_todo_app/venv/lib/python3.6/site-packages/Werkzeug-0.15.5.dist-info/top_level.txt @@ -0,0 +1 @@ +werkzeug diff --git a/week-0/day-3/my_todo_app/venv/lib/python3.6/site-packages/__pycache__/easy_install.cpython-36.pyc b/week-0/day-3/my_todo_app/venv/lib/python3.6/site-packages/__pycache__/easy_install.cpython-36.pyc new file mode 100644 index 0000000000000000000000000000000000000000..0fa44c3cb1ca3bf98242ee6ad1cf0b26cab422fb GIT binary patch literal 275 zcmXr!<>i|5!!)*zfq~&M5W@izkmUfx#Y#XTg&~R|l`(}eo2f`Hg(-zOhbfmiikXoi zmARRLks*a8m_d`ZN;;@CPoX3uRlzl}xY9GPxFj(rMsH#ada5BUq<>Rxdr+KnFYE@rI|S?x`qX&No8f`8Tts5^pQ=_E2zB1VUwGm VQks)$#|Sj07-SX;69*#?BLEfSO-BF# literal 0 HcmV?d00001 diff --git a/week-0/day-3/my_todo_app/venv/lib/python3.6/site-packages/click/__init__.py b/week-0/day-3/my_todo_app/venv/lib/python3.6/site-packages/click/__init__.py new file mode 100644 index 00000000..d3c33660 --- /dev/null +++ b/week-0/day-3/my_todo_app/venv/lib/python3.6/site-packages/click/__init__.py @@ -0,0 +1,97 @@ +# -*- coding: utf-8 -*- +""" +click +~~~~~ + +Click is a simple Python module inspired by the stdlib optparse to make +writing command line scripts fun. Unlike other modules, it's based +around a simple API that does not come with too much magic and is +composable. + +:copyright: © 2014 by the Pallets team. +:license: BSD, see LICENSE.rst for more details. +""" + +# Core classes +from .core import Context, BaseCommand, Command, MultiCommand, Group, \ + CommandCollection, Parameter, Option, Argument + +# Globals +from .globals import get_current_context + +# Decorators +from .decorators import pass_context, pass_obj, make_pass_decorator, \ + command, group, argument, option, confirmation_option, \ + password_option, version_option, help_option + +# Types +from .types import ParamType, File, Path, Choice, IntRange, Tuple, \ + DateTime, STRING, INT, FLOAT, BOOL, UUID, UNPROCESSED, FloatRange + +# Utilities +from .utils import echo, get_binary_stream, get_text_stream, open_file, \ + format_filename, get_app_dir, get_os_args + +# Terminal functions +from .termui import prompt, confirm, get_terminal_size, echo_via_pager, \ + progressbar, clear, style, unstyle, secho, edit, launch, getchar, \ + pause + +# Exceptions +from .exceptions import ClickException, UsageError, BadParameter, \ + FileError, Abort, NoSuchOption, BadOptionUsage, BadArgumentUsage, \ + MissingParameter + +# Formatting +from .formatting import HelpFormatter, wrap_text + +# Parsing +from .parser import OptionParser + + +__all__ = [ + # Core classes + 'Context', 'BaseCommand', 'Command', 'MultiCommand', 'Group', + 'CommandCollection', 'Parameter', 'Option', 'Argument', + + # Globals + 'get_current_context', + + # Decorators + 'pass_context', 'pass_obj', 'make_pass_decorator', 'command', 'group', + 'argument', 'option', 'confirmation_option', 'password_option', + 'version_option', 'help_option', + + # Types + 'ParamType', 'File', 'Path', 'Choice', 'IntRange', 'Tuple', + 'DateTime', 'STRING', 'INT', 'FLOAT', 'BOOL', 'UUID', 'UNPROCESSED', + 'FloatRange', + + # Utilities + 'echo', 'get_binary_stream', 'get_text_stream', 'open_file', + 'format_filename', 'get_app_dir', 'get_os_args', + + # Terminal functions + 'prompt', 'confirm', 'get_terminal_size', 'echo_via_pager', + 'progressbar', 'clear', 'style', 'unstyle', 'secho', 'edit', 'launch', + 'getchar', 'pause', + + # Exceptions + 'ClickException', 'UsageError', 'BadParameter', 'FileError', + 'Abort', 'NoSuchOption', 'BadOptionUsage', 'BadArgumentUsage', + 'MissingParameter', + + # Formatting + 'HelpFormatter', 'wrap_text', + + # Parsing + 'OptionParser', +] + + +# Controls if click should emit the warning about the use of unicode +# literals. +disable_unicode_literals_warning = False + + +__version__ = '7.0' diff --git a/week-0/day-3/my_todo_app/venv/lib/python3.6/site-packages/click/__pycache__/__init__.cpython-36.pyc b/week-0/day-3/my_todo_app/venv/lib/python3.6/site-packages/click/__pycache__/__init__.cpython-36.pyc new file mode 100644 index 0000000000000000000000000000000000000000..4b061926ffb78a74cbbe351c5743141c89c08cf6 GIT binary patch literal 2618 zcmb`IOLN=E5ywgKDUhNh%kL*_%a&~oH7kk-aTfMunIq-2QxiA{qLDs9vicM`RD4N|7K+}f6e^v z*EH{2=28F1W-^$83}$h}&(a8tP!4jGhddRaKt(802})FkGL6D0Szu+kZ_ck!6{_ib z-XEhH)My;WX#yr_5+>;iT%jqLqN{L~uE90B4%g`h+@PCqGaXa#Z_#bIO?Ti9-G#e! z5AM-@xK9t@0oh>FLwHD!;1NBB$21Mo^aP&JQ+P@8ib$SlZ=>@!?S(v3c zn4<2k+uNypIpi#)tR_ALBGW!KXNb&#;cq@deJ} z95!$s7jO}ma2Z!{6<^{SuH!4*z}L8mZ}2U?!!6v#9cJc1)UKFQSo)Za0pTb?hyFV@fev#cf?wp6xjD@lc`OqdbZsvras#w|8JNyqETcr(pZh_>J_~&L zMcAS75)ZwrSz9JE%I>&IpykG4-;Deg$o6r|Oz9>zhCT#0b0VQrWch(L)A zd*@_#)>cB;hppyb`(&>XtHk~sa=5XuQ6#SPRm1wb$zrBHs!Pod zYnlRG{n+;td1)06%<>{VIkcOh3BgNb80gVsH+D%RBG$#DC~Ycl$K5`OAgO2dR97U9 z*NeWHmvmluy--hbmO3(U;|oV6u@P2}a}(=x*)SSLB5*!)VBsk(tkTl>ABP8b{&$C|#5K zu2HgL#&lz$RL6~V!SeJ97IW+)QmCq1+rOZD5=CeMc$KD%}_tSiFjgFqjZj|QL6lZnd&U9BIjz`SCh;xiQqrfOKN{ljN zlwmHVOk8198DoqZW1KO;m}FdGOfjx9t}(7NZZK{#ZZU2%?lA5$?lJB&9x!aiL&hV< zW5zV&3F9eahVhJ1XFO-TV9YY+7!AfeV}Y^ASYj+QRv4>{my9*WI^z{%gYlZN$#}zf z%Xr7wVr(;Z7){2m!TwLVwZ=lbeymH5gQ4d*I&U_#_(N$n_2h>g*H>x2!TNS4sQ)te zx{#Rtt^Pj}=t4g+N9uo|1QdC{_2vJph_=M#PEvnJ9k2#x248c(DP<0aLG80*ER?xg z90zQa={@B11L=h*9ABFFjSSAY8wbXNt~k!+Ve0&viQB9?<6rah2}SdfjOIFh>EqlF z&Up}hU0R<{@9iNSM+P!+oJMq^%bSC{`YrDx#TAy%&E~7QmBLnjI=@+%EllL91uI+5 gjpPio`CK(y%Z}vA*`j%B#x9%Ikz77kEar3n25s5htN;K2 literal 0 HcmV?d00001 diff --git a/week-0/day-3/my_todo_app/venv/lib/python3.6/site-packages/click/__pycache__/_bashcomplete.cpython-36.pyc b/week-0/day-3/my_todo_app/venv/lib/python3.6/site-packages/click/__pycache__/_bashcomplete.cpython-36.pyc new file mode 100644 index 0000000000000000000000000000000000000000..682b0361c9f9813d0095e1e8c3001206b85225ed GIT binary patch literal 9076 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 CfTLyr literal 0 HcmV?d00001 diff --git a/week-0/day-3/my_todo_app/venv/lib/python3.6/site-packages/click/__pycache__/_termui_impl.cpython-36.pyc b/week-0/day-3/my_todo_app/venv/lib/python3.6/site-packages/click/__pycache__/_termui_impl.cpython-36.pyc new file mode 100644 index 0000000000000000000000000000000000000000..0f2ed41d375b378f5a24b069701b99850a153f74 GIT binary patch literal 13984 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 Wd6Vz*zuPM?6;^WmH=&PJI`qGj=8jDO literal 0 HcmV?d00001 diff --git a/week-0/day-3/my_todo_app/venv/lib/python3.6/site-packages/click/__pycache__/_textwrap.cpython-36.pyc b/week-0/day-3/my_todo_app/venv/lib/python3.6/site-packages/click/__pycache__/_textwrap.cpython-36.pyc new file mode 100644 index 0000000000000000000000000000000000000000..1214ba5c80f6b10366f5f7725b691387ccf86c37 GIT binary patch literal 1297 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 Jj(^_2@FVrM&HexY literal 0 HcmV?d00001 diff --git a/week-0/day-3/my_todo_app/venv/lib/python3.6/site-packages/click/__pycache__/_winconsole.cpython-36.pyc b/week-0/day-3/my_todo_app/venv/lib/python3.6/site-packages/click/__pycache__/_winconsole.cpython-36.pyc new file mode 100644 index 0000000000000000000000000000000000000000..6bf7f250d72a720c5f0218da64ea57001da294fe GIT binary patch literal 8741 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 Az5oCK literal 0 HcmV?d00001 diff --git a/week-0/day-3/my_todo_app/venv/lib/python3.6/site-packages/click/__pycache__/core.cpython-36.pyc b/week-0/day-3/my_todo_app/venv/lib/python3.6/site-packages/click/__pycache__/core.cpython-36.pyc new file mode 100644 index 0000000000000000000000000000000000000000..9aa024e536e59218439c7591ffc24d182b32a6f4 GIT binary patch literal 59865 zcmeIbeVAO=ecw0lJNtsgVgcfX1gQ~7kXRC2lAuJ%5JeFL0g)25WJp+)S5jsNduM@J z%+4tx!`zk{~NjBe%@4Eev01@1Sj}?!hU~<-wVNm{C=?cA?`oT?}vhu{65)yn%`&m z{cy0z@5SaBem}$SM}kNB{iyvu%kRg6Q~W+<^*zh)$AkCq`#sHPDSwXN?+u>d_Y?N} zJY)5~_J=o~TYhfi`Q_(NKQ&VuGzW4qm}cQ0>J(dA})YglToUfvu|UuyR1 zo85XNywqK&3}?@_TdP;jU0ZE#^;(;q;ncTxY38{w+zf{^&oqLU8ewCj*=vTw@|lZN zHJtlctJ`gLE+scg=dQJSG`q4DZf z(CqYDYb`z8;sty*y2BZOK|2kIddpq))yvJ*EA_R_u)f`Ct!@U*IxlL5jdpjqzYf5G zX?^Q@@A78n@p`lKdVk;97eDr~GfU6bK6&Ql55My1#l^+`gZ|QE$+g-i{k2ocH7mQP zcH-G{FTH&3?3oMao?Yl4c(%C}Hdh-0^Q(=pL)%W*`uASA+^nr`Zh#&^?f8ifz+ULq zTHRXUOE-hXRpEvH^j+q2mQVKthe2*V7v9&)_X@pYkmpyal|Kl535uUD1f`(-`2zTu z10O3(!;&9J$+ zb$xhueWP*xBItT~^J+bLcfGUOYpphqQD0XiHJ7jC!w31!000u}0HAWc+b~+3jBKQX{+wiUag^ySb{-I9cmm2IAeVW;5v4wzq0c zmA`ns*0`t#9(#17TLWvRYWz{MbE#Wvx2`m67aQHn8oRA_Q`Ib5fh8tYv3tEctaN(; zj}Oahny2;?Xb%gU-C?<|Hvqwsu+RYL4hwW?IJws7_N>GM{OndZTU~7!-p1m1=l2C=BxJFqWWnqp+U8kvo{%Df9|Jr!*+s$nO*f#qOgbQpRM; z8J~t>0a)bP!Feu(Ag)jFef^rPMiT-0ypk~-2a(snZxG=Rh|2-LdUTU!u` z#ijmC{dl*|#CYk2a~ICNoqu?kuZL4+7RsSuG@OL=T&fGfMLcaln)TNk;WE_M|7vxh2kuEBYy$7_ zG(R8Z)1BjxD^&9b@-z8TzEqgW&*ts!`Bg(l?y3uud~623#EE9$Os;#N2k?4@8-aRZE69r&4 z)V4MuwinyYT5q$~2!h%MG`$tki*Bvat*u^Wx`oY-mEe)f3{R#M1J$tlS{({EIBtM+ z{owrOHYBGpQkWXM+ZTbF5hT5Jq`=tP7HhQ&nnJ$S9u1m7|3{8@xp&rAckFogn96jU zJvG<0Mug99T;<*Lu}Pycjkw4hWIodHR(=SLHNea30T$34UmnoK*plqaJf30H<#h z!G8#hxDw~(K{+U1$%P*ge`@D93Og0ZPlXx6jLb`u=S52tu!^-8<>db17qCm>}=K;f{e)`^dVOSE}7;l%-vvKqY&=Gwb9EL)3* zWvelKOodAl-0ZngOuD0Gy{+3b^{Ao?Jme@FRBfhEg{oDGv*IS7;7*K30-osKs*1nG z;rdjN|2Ta0)m-PhN(|hFW$tBwt+^tgclFq3b87%8D7;aHRU5WT zf)h9B|Hg+~uS4A%5Y5-Nn^39R=30WtkX$+nC*BMZB#dw(m-d+HmUQnt|s`i9!6@Z1f;;-Fnj$u!51j4IT-uF-7Mz zYn)VGHy|dG!LZtu@^qzn{X5mhDGs@O0ii(u`X>cCH`%(TR3yM%e6mfI?e0^HQ3brH zNIiU2bO{-}7+$2h<$XaDjuINi`u7W&tPu-&D-)Vjc<0Su_c{+afw??05w7t|Rm6X@ zoITB_`^y}fIawsIM&z+XEQ$uBd6$ApFoAAe4ywT<-<9SBI`MQcW14rhIT`E;X5V07 zmZyTf!5k%~gMGm~-!sAf-~iuyD04?}(8|mPhl0ag+Z!AS?&N#U^m}#H>G$(qzu#}V zeQx*mFEA*kW><;^xSK4iJqtc6V|bEDIXr-#tFyBfB(dQgt$ z>b8*)geT~C2uee-nJ7lhVHwZ&9*~R%wQ0An^Rm|wB$!B6nS>iB4WLhS+Dti3((5&p z+J`k^H*2s0V;gJq)cbjY5ZB1>2pjD>q76Qm<=a7g(C(kjhDdeUa z1T)-hOR+J4Bz;=L{s5Dcm<5NU>af`e#Mv-MG-_+;@m7JC!A0(1YGF%+qU&3EM)XC7 z4QmtRhIX3d7F~|WH2uALxn+#B+f*N}w%Tpus`if4SQjpzURiB#cAG0Tk?m$93^uQ# zPTBp%#TwA>LeNb%JbhX$*Y2Q=oiTAy!?r?iTJ4qyGyG3OwQ{nyBD;q-G?+xzT{#&& zy3#{3=%8|H01H8la`+l$hW!AWm*;ZDJ!mhZ>hKdXW29ChpjhYdQ zBoSP9_xC+x--r6T8LE#+EU49(G_G`jT4Yw?4ir9m%gRRMnlqdLpR28)cX>=tPg`3e z#64|n#bYtTj*!l&eTX}Lj2%Vy&+#pdsH72-K-t4d0aTCJssz)hMO!!n@}kVo|&aPfa- zX|u!J1{|G;(A=&jk)ZUO6Y`@9gH~6hC@{hOrdSa-E7*k6NtSy-)}J zh}uENp+XKPglo5czUK^ej&;CmFqcE?y+r9ju#3bwC~vAyBnCkkdQhND5Q zOghHWcdNGpWV4aiP8dF~ZX@n?dJv?|4hM%)-I_SfZED#<{Om4xoQ+1nSpWMUm7OAN ztO6Zo%-U@#5-M-P6vGzmuS12;cWTb?a}^1;ds^}elD!e2+f)?~2eS$>6bA)E0!fjq zbkg_R_%-jmO;t|u;z=pC0(Vqbws*G$wnt6ZEqHz_Qs!Kn+-nR_8?8&1Z`Ud+sC74? z$KA$Svv-}jzqKVnM}h|E7^;fQ#N8!FoOX}|Kx^&BC6S+I$Ec4g=%iqD8~8APpskS= zy3vu$NH-Yt*6S@=Cd`Df$SQH0nlcRXSwEA_L?E~$T%mewq5u(vYakf~RnsCV zV>d{4$%tbibDpt{K;u1Vw|=wdf~M|AK$OTX&_GEyTGu=uy&bx^iW0_=>bqkQH|ySb z0hQj#BEP-bL!6Y4$m%ncl$wORZwili_dDsJx+4MD#`j9Ixn=BT!+2&JWzTtUJTPwd zmD1qTutFi|^y|R)aZ{xHc6CxeVQJbX)Ig;!B2Bz5EnnOE)#<~6_1-E0JEwPtU1F=moRiM(|_qi4R8=ENk7C#89Iy0i&yf?{y7dAad=YctG% z#x$zaCLW+Qiw_$yiCLugYIJL7mR@Y}Jn_JtSeJ-6}l`&O+`i@-zzl=p5zhbT~vt|xkagk%8g$1u(yrg5vj%6GK zIlPyr@nYt%CG)+GXHrhHdZjlZ-)0L}0>7$*ik0m7l6$^1mEj3I}?Km?#&FUcJFKc9^dPGcB+Fa_x22??B3V$r_Sz74W_s@JD9d> zL$2-JnI24YZSP>luKg3P&F#z#X1F#t*rRJ-%!dbE&793q_r9Gyok~!+l;7Di*h9H} zgIQnhiMSkR>+?IagIVs+4<LfLP4tuD*H+w;LhH`UhW^XF*y_n`sU7DC=)<{rKZuZIKt8| zWO1=I2+AMr|=B-?UMe7bEA^R@Q}N*i_s1bj%QKBeY+_C@W40% zI^4HQY8=k**0sa;SwD?(4CnA9V)BapGz1JN6ry)|VQyHGn=@ReblB42iVhte`Z{ds z5bDs?;kphz9kz9lH8{Mg!!;dbx*qiu;XrG3h_R{veQtL3o?Nw3;9rqXxq|Pg%ua0vAq!{l1zfz9(*pFA;k)Bkzng<-t@_-fvA|auH>7r4ZIQBg8`P2_4OY zUvy1#Q=@3@!`ZCC4v(stC2QueigU_Ecunfeh({l`BiGj(R{$2 z0i`Q)A>(4gIPUy;=Q$bVyYpFi_U|0zzA&>>7!;hJFDU$}+{?L7;ImT%N%!ffwCgf{ zI2qrIjpu>Q1zC19IneQBzuh#Wv*bw=7Nq1j?&3|v-Y$iGiRr%q0f;#Y)&;H_Cvu84 z=Q2ju%!5)p(QP(srzMh{UQyth*S@15u$2YJ!6i;yNXbzVe|Odo$7f|?H$vjx)^1`2 z+KQze&o|?C$g}Xt#a+z1Y{|#(OQ*gLt^zG~!t=_hI4NcLBN71Cot2ni+ z>Rafz#7GjVg;NJ~RFI{l&y1%A)MSjZ(;%5`QCp(#r6wURfvX9uimb-RVtwq9ux{X?zmSF>?Y24WC?yc*(J8 zh`gZ?IwcpMB0;AuWO;$M+rxEZ_NjQVoof=iD;kR_AlIo>6MWOvN<+~p<&m_eAb4!a z&wo+XVnj-8hwi1Q4Z<-uxp{)eQ?}@<&2~FA;YC96Qafs8>W+MRJTAiCX%T-=3pNSi z#iVAjwZhZ$G8TCiE$##nX4?>stw!&%tE^GGv?(TGYM?3QxI1gLSG|g9a4-a9BBT~CPKQh6iigi!VUq5oSydHMxZa7 zI(pG1=X`?l13!ErC~Il>GIG}$?u`@#Z%Hy=IJ5NO`bW=wN9}{PD0r;)Q0;-mHqqS= zBqT^viYX(0Q`fC+sP73A55^E#h$z*KrLpm7L~~TsS~B)0qlSE%N3G)BFISE6%g4Oe z#eBCtI&yU~qRrNxR%tgvVF#pKj>hCroBgTb4Q;ysh6==*hLlui(Ztw^{uyrn zH8s)#(Fq@%O7U5%Z+!Ef;5h>SG~J{tO@`J~`%R=9zZbbf@P1G{1nM5jsRQf98x{lI z|BVZVY#W%D7-nx&Fn*H4Hg+}R$`Qs1tN+C^zI&;&ho=ii^cC`1(j8! z1wyO15?&1+8@|$_I9frRz+UTOn8kN>d+iic}iffc@khBE3vgfgWLGR8<-S;IgLb;00Q z)ne0H5zq{IVzoOi6Vo@OvBUzf=$cx%b{{q>HS`4ZyI|B#iZ^G31`~0*Q&7_bQNKce zA!)kdCJpz>Cu4*ZV!@Q65cH!MKE*4XVa0mn<50TAVq@s~>ugJF&krOzHFBU_qZFQhwJ4SU{q1&fdd?}eH4P=ei8?Cnd z!D&zxosG`Smlo2k0uj*ey&2GE^~UWj%zzf0@r@X>fZ7ajOA83uqA}nEG)FdWIgPUVXwV{eIzk;1bF^S@@C+>(#zgsjZNNvRdar^iD){BcUX9e1dd zm}uh%-*K=0^lf?-%L0G0E>+bs)pe5|eVHCfW_OrdO3dHUbE_(#Kdqn zex~rfg(JC7!Q@!Dry0DtQugo&49I_xYC~Mm01GF zy0UAF+^rxa-Y2)1)}URP2w&pN9jgOM;hf{nleyPkLJB}$3-WsJPOdj868nXtS|a#` z8IHK%2Kl!@oY+{LcV|Xl%8g@?pIG9ICAV19z{b?PM$8LVCy{1?=frfH*9cMW$((@P z7bezWnN)gLH&u*@lQQ5++c3Lx$}0I7kE>4B9>evch!L~1V86i7i2!VCek>LOVc5k? zMFkO%Q~HXq7E_1a704tlL6?&$$7BI$xXkjd`XpR1Q%~fWceB+R5?8&zfDC3Bc#E)|_N)jV-*geMj zApHIiJEXz&BE;@aiyjcEdr(&fr6Ulofk@ngkhlV5u($@<6Debv)!%)kwSgRmF1Z;= z*{&^4z!nb5+Y+I7gt+n8$I~Yj3*{YJ5odJfTu*hPA@-CnuE)%xW>CRCtZCp{5fd+& zZ=EaWq>CJJM9f#mtP^(WZz=o>z^i}f*@)^vbX1=lK87EQES@&~=O-u^enki2MflSk zxb>>ee@X`%`3H11ZlotX6?#}hZ6^8hoTPk)wwj+W^!G+X>&q?7F1f$+?rR}WA_C_t zy)%4q8GK_s!F;uqux|x zY);A|PE4=qz&4nUIA~af>6b-%|Cm{#pd1$o$%bLLXT>($>~wAdmo>tg0kyE26+Q+= z6DH?h@eBz<1RyOakAWFAa14ahZH-&M$`fL%;bOTg<4sB2 z1DM$0!of{fetG&@_x|~AYH5>)s#i}%MVxM`Gl56oi!hww6XgAJJxoO`sN0I->~Roi zeVzzwK-~nwwn_!4)xd0(h-qnHD0SjTaAAr1~V* z$9Q^p@ki4D7K11dAxbO}F-11FFJ0bkjZ$N8ztZrESz&nlJ6dU|*$Q~n9J8|iu~!?a zB2RgoLSl99UUA48<6AE{R7Gk|nxy@)7aiWbvP7`-^iN8GBc=%&K(8EIgCSdr07z^U zDG-mSf1ZL0^0BtNbKv3V9D?!~tEzv_)`PIb$l&> zvJ`7LV_snofDKU!6Q%bafWpq?4-(^YFyB9%CS&Ob#&d!Ut+m*_{%=OfBqC62S|$q^ zQX^@>KPlI^bu%#m>p8pR=0g0S$p)5TNcq^@&G=m?AWf}yXBA|EPLcCC>xpyI-WSU^{n@8xI?=?4X2yh0%H=rrPEH!8H7n zale%T*mF7u{qG!szLz0gUn5vK-7FK%7~^g%06NPtgh-2)(gGq8!A`m z5p!?Z%ZmBj7jxJD&GpmpxjkGVL&%`~R{je$IA(5rc2J@8#GurDQydSI=U%l!-owb8 z+4;p%t~b})w^ktc$k%=Dk$K*@UmP@_>m86wfh;6HM7cYzOc8MpC*7%%7pF$O|Kn$J zgX;Q0)ygw_IX|S>j5rTY^}DL%!TAKw9=2yc;h#NC$s@fZ>vvu$P~-XDT|9mCM!q*$ zKWgXu?R>xLlu;MRrL*g}TFHw--jtBK@3y*sG-(%gzL9QEr=pguc=muj`|Gaf zgVGoC-LHKn*P9Q@JTDl~+oTmP8;hBKD~-n{l3+TqBpG*^e-0Z!Q6K7&38iBxJcbp> zNsQz~-gSHAnUGc&8!KQZ7~N8C6PTt^4!_>f8Hn8?=u~vEi49sS?0qebHPk`XijpIN zLoy1pi2s^C3Y(O2w6gMw#dXPFlZq!$7#_3KqT$feY~g6!YHN(sDpj4u-NsDJ=9V|x z*t?T>0;f%)i^MfG;&7I;PWOh|#WxeJD9VPB%0>a}N@v7S)j^|;wNmyJ0%L6bD(x3R zR$dT6Cn;oU;Zm=<6`z;Z9ES@z{SU@#l$NeJ$O6&0*=kw*hl%EORtFoPQTY~O9>(O}qonGjBgWRVTvX-IHbtsjDAkK8a@F;53jg@hS zTl9p=FJ`k*Mq0g1l*9*~imWscj2>22j@6$OOiXfqDo){ejM1@)8{cDI-?~AT%~4D5 zb`58ObcUG@2A=ugcyMd;OwNv}hvBNF=DGDt=?_-gBum4+kW|wON;lojEh3icQ%LR0trdy z!O^DPZEK2%9u^bPGrxvGbzNtW|qC1oU4+x|pbTTnhKvYFt5e?Nv*WBB-#oQ0h z7Q^g|;lg=Ri4Rg8#nsW@Xd7NwbSx(&CcZP}K|;}=K!K>$UeRh5AB=d`X)};rDC5S6 zmnoSNOV0L9%0kf>i-+%5EmENwynErE@NNXB@R$zo)?tqh=XH>Uz~xFUSp-=X0zhVh zjb``|cPvlf>q?cVYB8CgR&jZiolRSI?qT)Zi|5UlGTisk=Jku4xHX>_E`{4$J(mc0 zQ4h!|9ZDZzVHz^^GV7ICkEAGt;l%SVx(doX)!7`D&%N~gOXosKeBntQEQDdwDMlt^ ze?V8CrC7Zxjy5Rr zHhs(!CCv(HQg${hEEYp?=uEqXz@o8^6_!?KWf4*Omna=s)(iyZRT=4+a#}Kf>h-r{ zp?a5L%@t58PyUy1pIlhjYc7-UXL&{Vb2|LI4m};Vb$DF|S?y9j4MPIyHVzZiyzp=6 zkTl887If_|a(G%z(t5n=fl|T!o0_f`tHr59I5H}^{M02Yw@Q)tPw4qHpY9KF$T%?` zuxxY6I_I*@m4m5Z8plN?mR z(Pb*HUbec7WJG05YO`mhMB7rED2bF8*%Ha{|F@TWJ5t(S9*JJeF~xv5kt6mz0A9y3 zOj?5X@IOk3;7D~Oh$@4uw|g-*P+Q2QDFtz?xp#z6gCFgvP8=rVxFHUdCN2UvXT&*P zwDcDw!%Hrm@u@qwXvqw{qt~}eR%q8F3u^L_T69Vd4Ur^c_)&AL5fMY&YPC1XLvJ~$ zg!t(SoR(IbzljCsk-ygRNxR)b=!$&CbXT=GO30H!y|U6KJO?8NU*;F@p0 zT^nxJ`gpm)xOYn;5Q}0RUbJ2zns8lPyXk#C3?0VDc!1InL9eoKE}uy6bjmJLYm#a< zdI@UAAOTr)zwRL?!6u0uBu7 zZh1-+dgF&U$*)h!m2P)inl=7U3*iLo@l;_=VsNBx+zh6!GaCDdg7N;OV%N~6w$Bblr22XRtDuO z6>>lj)TXq!H}GB%jOKC|lr6IZ_6s~(E{8+aawJSzeugQ_$Uu$;MRgE!KVuS=ld)!u zOF4FEkt}Um!!8xtZ(>*y1c#NTO^D%MH&k8ANkCdVGC9YnI@~*gBg2XtobWjHEzCG! z=U&c3GZx3M3V%h{{+143*Wtg?;cx5kt2*fE6c0A`E7pBy5x^-+aIQ34tdyoKbf$vH z68%$5p)(uCOX}g+_Q#`1Jn%7oDAwPCrES@ea|0=e{sswkWvm2jq|?n$u~gv)C_bEl zd=Lief;NW=c69MV6=LkPULj>eCFnm|KQ-EoAE&BQ>PCf=oY}M$+UXj-+aV`(Q4h}Y z>E6#l!WIGE)@BTNY+- zcQ~b|Z5nppr&ddr(Pk71UT5{oe7fbXSZsk;(_?HmfSa6XjV@^I0t;SP=As-W^1!(@ z_5FocwP}e{dE81flMtj~8pVwPyBPk5yg<3!50FMe`&alp)LSi?)|aQRsv>vI!d-?X zZMKr>{(nmiB;~LNMtUCpH{5$lT~;4*q;=5R5;sg~M2Jn^neINyBN{1^n-s1ci$)8V z)3Xfatda$jEi6r zGa260^8^%Z%Kcs1$xOedrSrqN82#$*y%|`UA~GiIDf~_9I4eL^ImwZlpJ=vx|7ZlP zaf6cq8jm{keu5JPip#qT*zN~x1weMxKn9+yo3+;>*oy0A1KoTKy89#032f5+oCcy_ zjv<&Nv1nV8GzW(gG%%JYrJ&eb z#zunOF*4^|(HG(g1U5fgtgx|PC>2{Wn95qXlYr*{K7BmV0l=ibwe^u$2F`nhu{g_w}WUt8z3RU zm<+Nk*g29pgR;u*Ln)G(qF2oTc@pMA;t2xF^k4aoxHfhkOq;9H6%b!=Bm(oqoN%ADVUC`r zOZ|!1b^opN#&;e2Fx)oA(ZCF<9k5Kn^u$t8OkRR^(HIDWvCtQD8GFJEfzpr?0=x#x z*}SSMeNmnIP`V^7NBCa@L7-*w!?b4`YF7An1lnKI-IUl6iXV+)&zHHjF4!6NLta@k z7E3u1)%fPal!`G%Fysk`F%|{IoZTYF&3ZmOtjHL*a&YTT^Hvr5FMe2y=1i<}#FCa8 zn^|=OB=t*Uq{uHR0amgZF9pS~aw)AXErws@<#g=pd^t&PS{MAvrgEG3;$54+%&RL_ zvC}yiuu#1=d?*mSo0{+0VzI!XF2~(|4?pNAQ^iYm*6H}1X%e5qiQTye$N!xYK@uDi zCrQx4tq_EOkk=yRDY{_V2$&)}NG!2Ls1oBxjAsv{PDCpiQ_^L!a(8zDBR2|yyHz1K zx4XA0;>7!;1d^1=Jj1yZp4RoE;jF*nYaQPT&}i?O~(^$#cehoKQB0P*w~-0bmKX zyOIBb12T&YvO{7(F81H=fh_W>Ip&cpJ%3Vwro?se?Jhg34JTf7*-;TOj7ue|4(kF~ zt`vTb<_{;3 z{#)wUH+A>}9sUmvx1F#58-;#c-L?7Z@kr~GGu?EJhtk#FdhP;z-%&{&23GXW)%o6z7{ zT;*`snYb6G+`^miZ&LQcc?CHBu4+9n)|Dg!l=B^l*ch)g-Ph>{67n5td|7Aziw{3p2f?+|%xOVjF+Xc^7a9W0xf;4_JrX|I;fuw-U$b(WKu!=p?`?HorzrAenuQ@qhr=~Fe4}c)i(ohKff0JaD(c?Hl+3|2+&e;%NHT4CxJIe( zaQ`dc{*2#2{FVC0&Rsb3@iQ+E=aY-cwFDQV*%WH0*x}xhA$03_pVF;rgl5;QT;lI@34|RB32h|z=YYxM*Qr>jO8M&;Fzf)xVY81>BwWiy-qgW9} zwr8#LcKM#oaCwJ;^{kgeZtbO#=_W#m8|1w}L68t;dX)1RNG_7h-~&8`DM4ts z*DIgV+{`q0oDED*{Yy1hFICRx{#}{I`uZZx3jxah)XeD9o#)4AbDu>kkRMgsiy8=v zjSY&N35aKI;75_*o|)^ST@LS~Nu1^6Fy(mak3J4fY_wT95?qg6FvpMG?5}=A8|Dab65~xwFDh}t0AV~xX=-Ig}BRjzf@zR zaVJ$l=s8>47wM%tr_k+8Hd$m@_NT=|m>AZ@z& zyFBJSAs10MmC=k{O0w7_8!DdvDOfZ6G>RS3Q>RS{( zOZg49=t@Ph?}{Yc&(!RSNWWQJ&wYRXO;+b#sdnezEQCkjszof`rK&|osR)Oa)Yl(l;=g5ztUELMWCU`dxO||VCM17F(_kT4o{)nEM9TIWIKOlbCE{7sI- zq+82d*e6+31s4tfb2us~Bo60#74}*$y@9y(EQXI8 z`NO%L3h$XfY~sqNYnY=-s(Bru3fEgz3yG<*>T3i+1`}3WHNXbyEuNEu3B7N`tX%0g z&zY^sF|EjHBmvng%-&64;&F|6D=y+}qY=Z5C$Nhv6CL%u&xx3tk4xVaZ;vO0c%rbU ztB)dB2f0tr@8so6401>4w01st4c;i}&w_+xD*G1{B*kxG@zL-BPDjLuw^}o4v|D>1~rKj>?Q9F2LvyX62tv)J^DTFFPB2J2eQXo`>kmS0bgYabdLP7hccR&6nAPisNSm>VY5jXOt z@rqYq0$(@?_~I+F4POHHqZDpDT~_X-JSErlsSr@b-b`<@^O7B5BGma?)bnx5Y6~*6#&+f2LL=O&=K)SWCo#}9GuXgk;nUUA0sYQLXM{qi_pLpwGHzRUO11MqVr@;0RfIS159f)UGXP$ z-`XydzfBF(NjKZCHzT4JzNTAW(_vi)5wr}+niV_MBnm|zj7%+0K)32-tzU+eS!#f8 zl592un*}|h7JNjYc#aeFrAlQ&b4)ycM%0S9Nq(16OPPVXrez;B%CI1$%t8{bPT3-n zDcej!Uc_T~Y{!5yCTU_e7=0Z{dy5k|3*1DUMRtprMKfEBMJpf6vk)N&6DVP4V#!9% z5YjZO;&KBKLP+Akv2E3gCzrWOIXps&ci|h4(4gc!K1u^g6qF-+Yei72@%{Uw0pc#3ZV0WII3Wcx4o9?=vGi2cyD5q9@(P)+yF8g0ISQU6hQDiBvl3?SLjt{J72h!7_=rsw%d*{0 zjKZ>uH@sC)Qj`;RUF3?RKqKvEwR`R_rP_aIru`XVW}&h~rnmEO-17@_V_i%=dgE3r znX^femCkj9Q6(2j7D@S!ghrv^s@jke&8&q+2R_6Te*+}3#Dmp?ECVC*42;RMT&Yan zwd2*JIFX*M-dU}f-)5Ea@gL9Sp61himP5vgwAX}XEnAxNZltnzBUQW`X~LXH%EadK zu1#8W@4jK#d@=o>KjU*sIs0ubK}vLdGx;VXhxFTHCkuAvi44nF6Bs&^fi3fl5CqRp zw8lQlj%2HYM9Ud;w;IVQzFz6|XvGSa%x*Wy$|k?CBngKUt_dh+ti6Ym$m)f$7MCbQ zsIYa=wsVB2Mchn7;NtA38Kp>0x>r|qA^anqjo_39pWF+P0y$Uc&l=p4j8bZb{`4)% zdzO!j3oUF_p@kL(Zfek-J*^rb$CTo}-f zPD}-o6+LE8ac&l=A0j5PR>A-&i9qBm5|PPf@sjEJx{M!MKw^mAuiVBD$}B*z<$NUh@+`80)!iaK@ZY`-Eg16M)}Ji#gg z?gg0&m9oy+%DMnK+3fhx7MIEI>Nxlq$&KWD|3{pBrC4i=w(v*4nKgoJLMxTM%2K`^le zL!*hrW!&|rICu7jgtp1(@S7S;;lJAluwQcn>A{hRdGT;Ka_+VrOjVs2Fm}Dr=&0nh zzoT~v9debqQh!h8O>xKHA-eSc?H>bI3@QGkm|~Uue;7}OW$VGWj4A(U1XJ#D<7buq z`@@s{;N(BZ;K_9AJsGi0Q^ctD3@0*XF(shW(R2`9vprukz7ahz$}A)S{I1@q8gnr* zyP4z^zt@S2GMpuEZK{5~8kNE{Ez`NO)HIZ|@%yP4?sr|xiaLcQ#GEA(F+Za!e^!T| z)8XfJ5P!1~bPAB5b{j!vA4UF}-YN5CwOlGpm8YhNewnEjL)}~Da{MRC^E99CDGnLI zWjYpIlrT0&`dAnJl87w|5}O%D3$o6-g+;`bG~k%IGcm>V-Z39=!XiSsfaAO7%qRQ6 zCFr)@kt5npjHr6@1Wn&`PG}?)NGsWCQW8!>A?uA6sdeBW%CerMv`XRu>_v@LCFYR( zDiV966)o&!nQj+Fv6OeFee@yuc)-8dpV8KXoz5|Zmr-}-3YSn#HwXrMgHRLs=bf9#C&{b@&- z47i+sKl1*?u}C3V(+Z(A)HHWDQRoiD>FF-zCkKa8gh8s1r_TBX{b6pTrQ zRO(o*eu^L0-mgAjs9BU+Ek3GXM>+mYk(Rq3n>YI)NZ2cxHiikx>W%TQ_DtAbjl^q!?UI4n?DkYp# zgq3UW+C4D4XiFuMc*MrtA(#EUKoz^4eA81MOX` zD%pUl(QftS-?T=*LjSZ0l@^k_W@KJ^5ydL<)i`ay$CyQ{ND_}NUi96`p3l0AH8s7_ zV_&JLnWzRzF%WxS1@tx>u3nUj-K9|WIx|E(9vdleUOTRxT71-LYWOyjdYt>lIde%I z0Fz)NkSiyxuhit@uq>QG85q$|P{c#GHi+GG$TnWPzPYUs3OXZHAioD&F7I*{~EQI zt`nikY|%b#F3h71^vJ$$`Pr0$i;$AkTB8uTV|S}ZQi_s`mXu^9oQT}=aUg&Tj2hkS znU}@DB@B;-f%=)=`&bDF0RO{Bmk^q{$$~GvD_U=7VFeC3p$yC=rQM8iDh7Z~pcHNc zVx>=WfwOTiOSBbd^gi0C%!H{OQqooVSYKwHD9t4ct@JjY$RtEdTuKzzDxEtoY%-AX zMxcr7HJ(ko;jZ^d+`aEu1@x9 zwZW!j@+PBm#EKJ!J*Fx>fVsx@kakb2bqg7IKyArs8Ipv=78d)K>iq=MV6KNt*u1po zZ4sgEwP|nj*p}XOCKHRh;$m-ThFcF2!^so!&5rbeaV_`g4wY3Oyq=NJa#^4J{?Z~T zR>Yi1H^DhoXNJJ5BJ38l-o4VoLhgfkd`Ad0Z<6E&VAz)%G{^hAcMeea{f;`k*p))v zadG@N%fsmBoRA3us<s2n>QBRl{KuzDqe-ST8iHkQs`7@s2M`w;ph?GN%>Q)@V6 z)30RQPXI=oJ+z+l(DnO>bg;*}D7TgrDWM6o1Gjh&Ihg zQDFl#oE0Ner6dhS3iBCehJKlpYtdbjzwJFWo#|!aJvw{04qw&Jx(>(m^IjcB)B>3& z-Yd1B#!0Sxv@larLcOU%iM4Q}|N8UB!Y$)u9L-Cm_NQ-s&hjxkrAAXGp8n?}XO(8* zWSS!Q-Je;;yi*|cG*<{-jN_#ZH$E`3qz-}_whS|TWN>?RTSA~4^oT7wR*AXrKjvMb zP=B~r^N=t_0;=q8#+GPWaklH>Px9zR^|;DOt~dqGvvlx|q^Hv5{R>ysIsNH7Msg|k z-q2vvDthHNxIWf@`af~wN{meT{-NY$GKa)DC*s%X4KW%i{E!$v4_R463~gjaz}4kK z5A4b*g%CLStCZlZ*!gc$v+m_E+-DG~E2O#Zh>h)sl`$k3nftgN$--^8hoFou0;L0U zN8O1mBU*!PIU7!LzG*h?@lT2ruwWB*m3H9%}-*^h;3=pOG7-6h6}{ zn?p*`4y89(5xaGI4fBwTD^d+yd0~yZ-pt>i+p+sf2GHvF6InE{8a1za71elyBvLnQ zt!)12+LN$%ndNntE}J-EVpg|N+0k~#KO0iN~CFH2Drxi9Gsr2J+_#kdK%To`4~eX?(#4$ zFoi$mx8@ib#ikW~^rd$j=R*-Nh*VkAIDd_^G0{(9g}a}L=1wWsKbg#(k(r;kIO3?w zm{4glX;PW9P9}3=)$&&g;Xy@X4~VaRlSLh`%j!iqUf6Oy_N%z zULT;>^jXo}hrzH+ys03xIvVapNkxZrHh-J?TC&V8pI@MSIb## z+Pn-g5>d>t2~V({Mvh5xLifxBT3Wi`MdX4LH#LHwkx5kXh^5*(=Qs{h@`ejK{9!d$ z7GYsgDSwzx|ITEnMvG_0O1-qPiUcd~7htV}@xS}we~K!$q-rjG6#bAWrA@Ffs*8~* zBt((MpJ9CAkfiYPbVr#75Un1iM=mDrC%NEc?8kIXcy`;dnP1x`X<7#Ke_lQIoU%Yt z4L&n?Mv^}7ek2|(^*HYJGCypDBs9)S0I~FBYy;LS5~E)TpS$*i?&DfG$`&al=}79e zml!623ncEf``I*P*59SH9HWufWWwnSPpRXYmM-)7Bl`J%9VAI)gauPC#t2!%15q@e z6EhsD{)`|I$(a^qZnEZ7p?^;Tjd2gg@X&0{Vz13q`si?A5}XBd#pvx!$wmYL?%G(p z5Xe&axH@P0l99uC%L(d5qIW1pE>OjPq7IoD3H4Ft@%~*&M;t1rWUW=3rSyQOatgRK zT>b@4v_QdO_m=hvDS8X#WH^gG?>`gvxwXhqey)a>zL1OyIN#m@xz-{J$vv z*9GSLI8g-53^BWNd@F@JvO7nmf7kDMBDe0zM zE6p?}Yx3cthWlKD$hk>)SG-8yS+%!h|HndS>;AgZ#l2QLf*y))j~yT>G!BjG>dC5>N%N;?;;v)M-5 z)H)*)?jEDo%2#4K9-0)^ssQt-wxRM-BraxGu1}XoX{~9_NojawN>6OIY#9GQ&mw%i zyYvhWMHg#oW9JtFV`R9Pq8uU8m~UR2YXbsu!_yX)`PybuSDj_Y z8J^Q#5kPR8>K2{4O{IXU*OH-#bf0oRB1##B3a&FX5W~HVFk=Qc*g3Hz3p&h`TyBM% zoegD+j}2100eI8)Y4}p`O960P%{K>|Jo^ch?RDM{foO@^KV}s(q*%KG(g*Gn@*kyK z@%|Nn6Gp3*$2H&83)Pot)fQqqH&=G4w4tZ9AgW6kJFY$ld5dg@@^7_zQ2>E(&G!ZL zUTZ1u9ae71%$bg59Yf{;kx@dE1e=6^^d?@=G(O`TlLrNzE8WEmMkvRA-THh>7nPNW zD1@slg2Ffms1YtvyvrdV*l83}HtrP0iWCrZkSx+j_knXaBxy`Qr;;oGv_?$9Zf3di zV3)bZZIq7HhC=qvgfQG>!peSy2eRi<31&c~N}OPP+PkVpi3@#k$YbqLdAE*ctoPA6 zm!vVeAPt)T9@!c-Sp%AKpwlAZhaAb*sqbcR7HoajJ>r8PJ#r`*-632C(;ZP6jSyEi zAvxp7LS&80pujHdckCge^=h+=OuQK)Mzz*@ErkS$r#RU#2^3JjNfrwYQyW*jiEvD) zgn)+FC1s6D($&RKGK*JAhecz{LiABhau+;%(k(jpr_mkyU<@StUX zB=Q`HHgZi-Lij^7Si&g5mrUi+$U*Zm(2UY&FkX_%tZt0(8Ru}5ykco+s8w1jl5k|LNw%o3>?G)T$G401Ba5? z61%qd@G!Q{*i-TD9%}Zm;_l0hY8o^`jcl2cDQ&6F5Fu+YhxvxA5jP4wk^}7Q>shW% z?TLybbh?!v%xQ;k6wD&|B(*XTvk1x}xzleHSYepkneWVVufn~TQ7Gp-sC+x~gL#~# z?4imra<1;-e9Ajx-x^Gqy7@-H%HNLiQs&lYP`OzJ9DZrAFZ@z~5{lzhrK;gCaCZ+` zo?PCh$Pt@cpAEm!ld8MdayETqz>Xf2{zh*f&&~&O?C$SWtfu|u!aXpUWL@w9SB|r4 z?+%4Ie_n3m`N2Nj3*_Y8W6s}$=IT8(KnbcJ#+{t29~sPYymPRZ<6XS>XfSal$5Su# z?hYp9ci`FtzqJB$)_?DxQHc&ErhEx^RxfY1VE)7DlvL{sTVJ8Vh5gPlOAcugOY5Lsg-`12gF2|G;Zr&@Q~c99JEMbH z>wiUee^rOGy7sINf5cDXWSeUZqVAP`(ZiE0t|q`)p5>JKXd1YJ4NABUY(F5D7Ud6< zUP61FS6t>Wj5ih1Oz5{9iAt2<@{5r=LB9%G#I5~UY)N-IK%pdO^__fFQVWaSzJOEI z-{0%-B#D?W(hU76;8=w7ET8U6^h()Q_z+#bQ|7yJ?Q4TPR@9%{nZPnfev|P1*(V^Vh42Lu^e#aLs}P+DHZ=Mf5)zO;KpPs7TV--*YA{J& zv)s<)U^4t1X$MGVH-Ok!!UEj?I)^w<87ZC`Ooe}w4Adp}TX%S$dxjRp&v33gBq~q~ ztDC<*s6afbl$@|-tGQr8+gL-at4C<-k=#1F@Ik-|>yxykO#jH`!lutv_1)FM^A8T# zmb!Zkn+xe4w6vUlJJQAyb?%=Zl-xJhX9i{GswMKqmtNSj)Sq8cgh#|ndsjhIv%bEa zf8_1_2V!dv&^K$9Oog`ag%-iYw4{Doj>1B;VWvydk{@T`8CIWcH#RN?ji*{dGHS~8 zk4J-#*bv3>r0hGsJT8}j(ndwY$8{#s+Q0X#smvl`5{E;Gt6$qG0=Q{ZwttyL_U<$h z8RT+B3scWc<8VRA%Cfvzd$tu=l<}vlIcGi2;w6Ey! z%R2m;4xiIOX5{eCa$v7cLR}phD=$ac|5oC5O>#?1z z-CC~5x!dhsAYV}h4G+ax41_D^LlH8@Tm$Q>Nl3bJq~g}*R`?+b8LM(Db{vK|v=AGJ z4D;VmB^Pw~DIHYx=-A7;*w@(0K$wG$lTyQ|G?dzc$lT^XGT0wrbn(xMCLi$Qn+`r<(p6kOB8!}rw$2L$ zAnIj)mBU}+SdnaM^5q-+nh4*}pcr|7BQS>tS0~q}ZV(4>5N2RyC&OPNF;+1sBi~kf zGrc|LaQjcm#Xjqn*9|JpnBF1l%^HSk|NgzIck|b%aSpQiRBu{my?r?A{veoKpVu#B z<%!O-c4u!?Gi480-JsDM>c?JJJ0^jmVC|~CHwP1Eo;`=hFzV{I1d~2P!nz{8^u>$Ke8Gg9`MnIdlzAxCv9kQ0d2;}~m zUy5mWk)aYF-Os1{3oa7R_;lv+dsLRwg zU3c3ffcM=m33+F@rL|omP_|#sLmok8n3ozxM4)zANLWXz2FsY=FCXvLk9YgisGqVK zp04quaIzLdNysfoi7(ySpHVp8&3H40`CxR`DIVl&YPf2}m$7iW=Ek8g{nCl=+*$bd z(5jHEP`jvs+V$5{?V3E{O|T37X)i3Eu6^f@xzqcV=>$)6HJ{O|`?_Xi&O#kcx<0RK=CYQP#>wF(@YeV_tiZN0Be4for@Mu9 zYdF>FMp*}~Ntx{lzFjXdr?$QQuc|`5oh~#vgjg6uQR9>vs1*XW8@*@I;W`q{p z$x%WUd(P%yca|y_awu`uiNMD=lk<3%<6(I+5pd@qmX?vI&_6hSh{yZ;p5v8pA7p%v znr%;#-H-XUUUX3b#1R@NL|R1=h9K(5mT9jYc55el6Y}?Jdo89q(Swt20vg*`r|!gu z>tJlUgB(2Oa!NbL#-7hbKY!+#xp&A5m$*(V( z5+3at9dYqGJuw5k{v1h(wl1f z8Vew#Fi95_$++juUC7r%6pbQe498<)8h)5tzo)_E`GgXAHINzSwBLksMnXD4Hl`<= zj%jM>Ss{?L(&Z^@y9LlNC(Vs%xOWGyaLVhLr!r_~RjZMiR!a>X&W*P1zfY}sL|p(N)rSyF`VfLCA3`wgLkMOpRA7JjZ>YHcFU~~kCeh1rGH7X! zErw1U^AKLeL;ENJ=Uls9Q<~UNjw++)&<<@|Qd?`Hi*rn31tP`Xd2hsEEV7`5Gql4h zq7fI6XujGJy|DYUC5j=DrX*n|~qT#G^BN(8mMeVHzHK`D* zEMkzEbh~#e2JU^ScOS~UJBb*KO_M?}A=gIbVFcbukng3@2fy zVNVXtPy;laG^O8u3tq#rqA0tzp4U0xs&;i71*{uRa_(~F%3l-;ox(l3KjoI)!*;r% zSU|W}2YKbgeL4sXp){-IihKv`!ed@HQ(+X(x;*8~5z3wt9#UbmbbUi-M|6-;e>ice zy?K%BCgEMWbkr`{QsYK1yjz#<(cxV>)Hp0p*S9+@B^jZQ;k$MD7zg48F0Nzo2u}-C z|Bo*JD;@rK9q!lRK^;!%a9W3RI!Jg9KcU024r@AG(%~=a@Dn*Um)sr@7t+FQua%vbl$eRod(p5psyK4cJJ=_It+%rvKZ$R74| zx2tjdkb{ct6o*Tdhho>s$ZX-ZT##vZ+w#fp=JG#HSt$M`6jOPzi<DZzpty zrFO}-L`jsx^03mbaJdpzhqZQ%%hj+xoN3Q+xfV8t&2|&zx|sRgYPUo~H1V7juZUSO z_qpAk6UW4H)EpC6#0hZ{HOIwOaY~#<>4bPeoWZ-3;ze;5&r{-@IFILPaY0D)3+)TTi|vcUOYKXThkeglnEy3aXRR*S z`P?WGUgmeUq?aVV{I!jGRL=yNFL4c1{J7BRZTP*-PCu5NQ55uI;der6;Dz+M?DsZe zJWs9rS*JIW(vR?rqs)Jl^@tw*IkVGHN;`mUW>V|(A)b1<{g&L=_n>hwoZ z?>G%iv#{))%ZZn!hG)w+!We5$-(EINF$-$A;K&9Za+YpQs<2f>3+22uNrP(AGHzD6 z<;XcazrjxY>%CwYgq|d>uh5iNx|3sc7u~f{=EhOD?NUAOh~|DA(J#euB?)K;)``@e zU-7a`u5@p!`epR!E-bt5{f!`X@qd*1{ZZ%!eNgZ~p0|@JNk5T(img;br5Oa*jr$Ol z$WJq0xal??!>`)t)8K^K=z)EBs~z6zyo3?K={j1<8Qct$iQ$s?%KSf%g4ww)>7&A!p3W<1M4fd(e)^^&+DQ*>*zO z0@n7V50;T`6*8%qycL9@yA{h#=5u=Vw$n!Ojt3Fg>ZI;qaif@cRc$o9{2I@HB`H{oUjpoJ1j2 z@1jp1(y26lzLz~(bYCR^!Q)j8CDW9sAJ*%><)ZO2@u{PhKR>~Rg{i@*i}bURjJQt_ zJ&ZT~`Tio&d3w01uDaXwqUX(g7v28BNV;huIEpnZi6_0G-g@4l72a2tIVA~3E&w9L zC8eFZpC6?o>93Hor+!8_)4eZ8K9GfUddqZWnOOtev-}FkwwPK5aR7hPANs>JUjhjf z{uDw5`ayOrb)y)AY@mg^?Hhw|*g~BmB_#EJY(vGIe(5MHwc0}i{v&mT(phXr{tN}O zBD>DMCC`kVfxYkS*}J8vfwH5@+;PEg!i36`HZz^e`e!-W#1l``p$&?aaMQU z`;ixU>sS$ZqjvVdE^YUlz{YODcmUE%X=+>T9EZ0KSZca#8 z-uh?+D?9Yxl`@ujz0--jq2KAWt7_nd@&PF3C5WdyhUG4l@~WcAwkU5-$SE7C1I&CA z%~L`(%dXmGyX7?Ox?RS7=lamw^gFCXg@7G^=@C^%M31nHz-~f$NnmQQn+@blLFWy; zQaEcLZ|+?EdV?#ATVlFu1af0k?ZlA0-2BuLG+9Cz-OtR;$`{eO$G=dh;vyq`8&~=- zxWOZ`GJDUFCo@1i3CQ-Du{9{|mdE8mdC#)(zFYd(iq4j;tg_jVH*M6}*1EM@{wphT zequqOs)B^CGOn<|Wm#=dA4Ax7E1+Jg{m?(?N9t3q<7S%6HW9J_nc9&|aJ8#^|V1W}d#t>MDe>pF2_+heB8D;&Y>$%-|VlP3g$|Qby-ME2ym9ZvWIG#5G7#*1Z zsORUk+lo{^a~~qFME7{7!wwiE3h0z}I(bd{m`UpAbC{qE;J4_eB{;2l4b&1ijd>Nn zMBK|OYum7sd6gta&>TV^vyFSQg1wRCE#{Rl-tr|8PC~EeL%-NJyTI?r!%3kdVJa_C zkF#`R2cqyI^4Si{h~~t*Xpz2xn`J{Q90wXw$GAWOcO^0l<; zU|ZQ@2EbP@WehgkV>~#+b&q*^)_6TjUDwBh#MoHWT4u80Ph3? z>q_Ihb9D;)f$j7Wcwka7+ZoNh!YlAy5*qD;6jBBw?2STl8&$8#HfBAT{|9|{J09_> zDBfTR-teMz@*TWvkzN9PBQ|3^I)vGe1en4E5pj@9!%+tlF|*gRyM?81`rB}`V8L`y zg4MzpA+RFfSSbzB7=fw`x5=~8D|C5#G^GzA_y=56qmm;-+d_T-ycwltPi?AE8=fEg z*R&v*Rt52x7)M@OJHsHtT(SVc-nJV{YNxhQ&D2u@pc|X9-hB43DBLyuLFLvVMwDDdH>0sn$f{u5G)*OE>&!UjxdhrZB}(+GNF)EPyL% zq(_xBC`@o1j zH5gmXnx^@H#-gCeIt`<3A1}-Ap**!{V2btUxKe_c-^FZ3QW*sPCqv`;cIb9(v|ocQ8VL!O~8xx{!n} z(=n%y;G%#J0o3l^z?Hd-?B3O8UTV9S`P%+Et8Us)%0*e0&9v9Gjj`A7Iw zpts3G+@>biaVt#!SxAaAD2-wMZ7aH%mB(P{o|De6L!LSnysenG!h$S0tMVoEhb6j< z2X8l9pS((`ok--h4KF3jq?)N@LSA7e95zl(WjZ@>sN>IQW@OyRG|jU~R7KoEBNUcC+C?0jB5L8D z8dwWZGiyr2={fLNxy8=dkfIbRK z5AaTnq+T)9)eWJ)r4d+N8*^oO1HYbA)_-wG)?;>V%h9>LH$1DTo3&_mvYTV z_JzKMjO*zhl5m2sLc-s{50Y@i^6;j|_GVSSoY@0phJ}3&K@>f2kdZ41CoAtcyG{l~ z9y_E1Wa!B3u@010mG{qzP|eG|IN6q0KwU1-?N4yat7<|@ElM0nv|DPe9RlpM-Bc|m zRYVCcn;Vi|NrL@zTq*ssoVrtoa4DFdQ=seFKG;|95eEV`1PF1@f#?|y$vMW zddOYC^`$ToPBVoH@Lv<8DBKd2a)Aa}*o*>6gCmb0AyWORwZ9nZIR++E_MJ%Aw z$@5?kEf)O^9rg4d!R-1Sp4nS>5X7Og+K;!cy%Tf%Qv^oHI0ezj|KYWR$q*NWj1#do ze`v|HYdq#t{vtcce+ePtEE|-K%?i%eNP)Oqfdgd9RZ%O-I8Q6eI8&o?1{0Lr6|-c7 zDANI_Xl}JfdQE@yBx`mL7pI}dPTGPO1s%t+7}+a2@5w97eb@||n*3wj@(Oe0kdGuU z;?=(sEmj8j#5>m~CAsrVtvgUevmwYps2#h{RP)y4PTWD}gOy_E?6Wq3A!g^wZKX); z3wtUYG&w>=0TR6Yq{32yfZ$zB9`^S8c(5L8i_BBdcK9fe`8QfKWveW^UTOhi)W4mp zUvKr#Ws*-FLGxEMKJ)yJRdZe|NT*UG8Yd;&&0 zlW(4(?Hd8kaf2usWsDQkdaOKPPYi=--VFF#m727Rw2YPdO%#-mh%}^8U|7qdTvlaP z+C@>FP}%(o!)yTfT=*Qv$8dN54Xr{~JA2RBNR8Wkc`T z`ukiGeC!at|DX|BdRuc9`96LXm`JsBaU69Mg?$_mAd&ZK24o{<$*bgoP`-9h8kB*N z_7`@9T&zj+JudZ;krlNf(O35<&b%dX?CQB>E-48LD+`mU(8=A}2#}QvhC^Ra{sW0R zM2aer1$M6^-^S9DNMw}A{?T~@Swv09jYf3hV$vpLa)(KXa~NdCR5B@YeVkuNrlQB> zNSrCEfebB5{NcPpAMfhn;ZyQ}1}dlHAKg_Yb_^XgC-M)|jd)8X_Q>Lb;zP*1aBtJ; z{E=D#Z;R5`DnLd4(iH)+OCY@MJ`6m{5sVT(FI2vxj>2fFd|2{yj?1iKej=m9nNfi} zCPTE+J56cmrzzOAf-f6VWKUiF+pL8hY<=`fyP%04xs>^C_u7?t8h-)DjfOW@=5=Wy zz1Hncjm^0fK3Cd|lNikwIpXnfX-lzPmBnVJR@&nnXGzZBx zLqkTg?NInA@YTl`bPR?sYarLo7x*sZaS18w3M3hlO<#xLtxZzRz(HkW`KjEPsBelE zwLu{2h*_LoIQ!*fAdcXV7&|Sv+vGyX zJCtDO)0V5KwQ*L0nteXC;o4trw`k2_X}5y2o6|VEDdX(sBXxFzbDO(Au^zpT zGnvXe)+cZ8R>##r6*OwleLG14Yq$33YE~cD_H4XA|G?R;@6L>81~dEirX$B_-PkSv z*!pz*vGwVLkLh%V4jO-%H3>03v$NK|H7=pH{H1dS!O37&RQ`_mWzngQc7dv^l2AN9 z2E&`iq2Eb+GJrztT(}*NLS(w3Mg2a$y@YpmEM&wcli;w zg3{wqNUuC^ssdAOH`TaF3_L_K^)9uqs$nJNKGm=XQ5iXjPjIE*#m$0|DdQiV=g{53 z?>W2bP?UBObyZw+>QlxWYP0jY=I66*(bK-9{8J2cU*5+3PF{y!$@r^0#Pf)|wx;mg zVD2(|eNScz69ND5uR#KSFomeka1zTZr}BVWaEgVP4s%OvQS2x})Bi&iCkKfME$8F~ z<2NF2{nBq;=0Zi1KarR4iI4n%N;Cb=dKj-ENMQlMUhsw=mFPKgmg<~#ZhGYZrAc!9 z+#>#;cFNAlE7C)44;TLtxY5N%`XmZReuoo6i6+c09dCYnn@dy>fUXy(6hP)t%GpF5 zghco*4#oqP3TDd_WPRB#@RvVmi7FLBYoo!oKzbrfSf>L(?AM@Q9f0&8GJ7`hj zWo(ApP4ks3TJaYHIlgQN090g%@|uAy`mmHg&Ezlr_=6BW3gj~-J|yCVAm^VsKId4M zLk5NVzfygs-e_E{zu36cm_hkO P{Y?FG{d8lce(wJP3&HJ= literal 0 HcmV?d00001 diff --git a/week-0/day-3/my_todo_app/venv/lib/python3.6/site-packages/click/__pycache__/exceptions.cpython-36.pyc b/week-0/day-3/my_todo_app/venv/lib/python3.6/site-packages/click/__pycache__/exceptions.cpython-36.pyc new file mode 100644 index 0000000000000000000000000000000000000000..4b89abf4bf49ef9cbb81c24ef37c00b9eeeff2f6 GIT binary patch literal 8572 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 I-YSao7dN+?kpKVy literal 0 HcmV?d00001 diff --git a/week-0/day-3/my_todo_app/venv/lib/python3.6/site-packages/click/__pycache__/formatting.cpython-36.pyc b/week-0/day-3/my_todo_app/venv/lib/python3.6/site-packages/click/__pycache__/formatting.cpython-36.pyc new file mode 100644 index 0000000000000000000000000000000000000000..cda9cfb3e0c022e982e0437cfb609f818b1069d0 GIT binary patch literal 8515 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 literal 0 HcmV?d00001 diff --git a/week-0/day-3/my_todo_app/venv/lib/python3.6/site-packages/click/__pycache__/termui.cpython-36.pyc b/week-0/day-3/my_todo_app/venv/lib/python3.6/site-packages/click/__pycache__/termui.cpython-36.pyc new file mode 100644 index 0000000000000000000000000000000000000000..2836878012ab6826df361609c23646a276d39eac GIT binary patch literal 20782 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 CST@iA literal 0 HcmV?d00001 diff --git a/week-0/day-3/my_todo_app/venv/lib/python3.6/site-packages/click/_bashcomplete.py b/week-0/day-3/my_todo_app/venv/lib/python3.6/site-packages/click/_bashcomplete.py new file mode 100644 index 00000000..a5f1084c --- /dev/null +++ b/week-0/day-3/my_todo_app/venv/lib/python3.6/site-packages/click/_bashcomplete.py @@ -0,0 +1,293 @@ +import copy +import os +import re + +from .utils import echo +from .parser import split_arg_string +from .core import MultiCommand, Option, Argument +from .types import Choice + +try: + from collections import abc +except ImportError: + import collections as abc + +WORDBREAK = '=' + +# Note, only BASH version 4.4 and later have the nosort option. +COMPLETION_SCRIPT_BASH = ''' +%(complete_func)s() { + local IFS=$'\n' + COMPREPLY=( $( env COMP_WORDS="${COMP_WORDS[*]}" \\ + COMP_CWORD=$COMP_CWORD \\ + %(autocomplete_var)s=complete $1 ) ) + return 0 +} + +%(complete_func)setup() { + local COMPLETION_OPTIONS="" + local BASH_VERSION_ARR=(${BASH_VERSION//./ }) + # Only BASH version 4.4 and later have the nosort option. + if [ ${BASH_VERSION_ARR[0]} -gt 4 ] || ([ ${BASH_VERSION_ARR[0]} -eq 4 ] && [ ${BASH_VERSION_ARR[1]} -ge 4 ]); then + COMPLETION_OPTIONS="-o nosort" + fi + + complete $COMPLETION_OPTIONS -F %(complete_func)s %(script_names)s +} + +%(complete_func)setup +''' + +COMPLETION_SCRIPT_ZSH = ''' +%(complete_func)s() { + local -a completions + local -a completions_with_descriptions + local -a response + response=("${(@f)$( env COMP_WORDS=\"${words[*]}\" \\ + COMP_CWORD=$((CURRENT-1)) \\ + %(autocomplete_var)s=\"complete_zsh\" \\ + %(script_names)s )}") + + for key descr in ${(kv)response}; do + if [[ "$descr" == "_" ]]; then + completions+=("$key") + else + completions_with_descriptions+=("$key":"$descr") + fi + done + + if [ -n "$completions_with_descriptions" ]; then + _describe -V unsorted completions_with_descriptions -U -Q + fi + + if [ -n "$completions" ]; then + compadd -U -V unsorted -Q -a completions + fi + compstate[insert]="automenu" +} + +compdef %(complete_func)s %(script_names)s +''' + +_invalid_ident_char_re = re.compile(r'[^a-zA-Z0-9_]') + + +def get_completion_script(prog_name, complete_var, shell): + cf_name = _invalid_ident_char_re.sub('', prog_name.replace('-', '_')) + script = COMPLETION_SCRIPT_ZSH if shell == 'zsh' else COMPLETION_SCRIPT_BASH + return (script % { + 'complete_func': '_%s_completion' % cf_name, + 'script_names': prog_name, + 'autocomplete_var': complete_var, + }).strip() + ';' + + +def resolve_ctx(cli, prog_name, args): + """ + Parse into a hierarchy of contexts. Contexts are connected through the parent variable. + :param cli: command definition + :param prog_name: the program that is running + :param args: full list of args + :return: the final context/command parsed + """ + ctx = cli.make_context(prog_name, args, resilient_parsing=True) + args = ctx.protected_args + ctx.args + while args: + if isinstance(ctx.command, MultiCommand): + if not ctx.command.chain: + cmd_name, cmd, args = ctx.command.resolve_command(ctx, args) + if cmd is None: + return ctx + ctx = cmd.make_context(cmd_name, args, parent=ctx, + resilient_parsing=True) + args = ctx.protected_args + ctx.args + else: + # Walk chained subcommand contexts saving the last one. + while args: + cmd_name, cmd, args = ctx.command.resolve_command(ctx, args) + if cmd is None: + return ctx + sub_ctx = cmd.make_context(cmd_name, args, parent=ctx, + allow_extra_args=True, + allow_interspersed_args=False, + resilient_parsing=True) + args = sub_ctx.args + ctx = sub_ctx + args = sub_ctx.protected_args + sub_ctx.args + else: + break + return ctx + + +def start_of_option(param_str): + """ + :param param_str: param_str to check + :return: whether or not this is the start of an option declaration (i.e. starts "-" or "--") + """ + return param_str and param_str[:1] == '-' + + +def is_incomplete_option(all_args, cmd_param): + """ + :param all_args: the full original list of args supplied + :param cmd_param: the current command paramter + :return: whether or not the last option declaration (i.e. starts "-" or "--") is incomplete and + corresponds to this cmd_param. In other words whether this cmd_param option can still accept + values + """ + if not isinstance(cmd_param, Option): + return False + if cmd_param.is_flag: + return False + last_option = None + for index, arg_str in enumerate(reversed([arg for arg in all_args if arg != WORDBREAK])): + if index + 1 > cmd_param.nargs: + break + if start_of_option(arg_str): + last_option = arg_str + + return True if last_option and last_option in cmd_param.opts else False + + +def is_incomplete_argument(current_params, cmd_param): + """ + :param current_params: the current params and values for this argument as already entered + :param cmd_param: the current command parameter + :return: whether or not the last argument is incomplete and corresponds to this cmd_param. In + other words whether or not the this cmd_param argument can still accept values + """ + if not isinstance(cmd_param, Argument): + return False + current_param_values = current_params[cmd_param.name] + if current_param_values is None: + return True + if cmd_param.nargs == -1: + return True + if isinstance(current_param_values, abc.Iterable) \ + and cmd_param.nargs > 1 and len(current_param_values) < cmd_param.nargs: + return True + return False + + +def get_user_autocompletions(ctx, args, incomplete, cmd_param): + """ + :param ctx: context associated with the parsed command + :param args: full list of args + :param incomplete: the incomplete text to autocomplete + :param cmd_param: command definition + :return: all the possible user-specified completions for the param + """ + results = [] + if isinstance(cmd_param.type, Choice): + # Choices don't support descriptions. + results = [(c, None) + for c in cmd_param.type.choices if str(c).startswith(incomplete)] + elif cmd_param.autocompletion is not None: + dynamic_completions = cmd_param.autocompletion(ctx=ctx, + args=args, + incomplete=incomplete) + results = [c if isinstance(c, tuple) else (c, None) + for c in dynamic_completions] + return results + + +def get_visible_commands_starting_with(ctx, starts_with): + """ + :param ctx: context associated with the parsed command + :starts_with: string that visible commands must start with. + :return: all visible (not hidden) commands that start with starts_with. + """ + for c in ctx.command.list_commands(ctx): + if c.startswith(starts_with): + command = ctx.command.get_command(ctx, c) + if not command.hidden: + yield command + + +def add_subcommand_completions(ctx, incomplete, completions_out): + # Add subcommand completions. + if isinstance(ctx.command, MultiCommand): + completions_out.extend( + [(c.name, c.get_short_help_str()) for c in get_visible_commands_starting_with(ctx, incomplete)]) + + # Walk up the context list and add any other completion possibilities from chained commands + while ctx.parent is not None: + ctx = ctx.parent + if isinstance(ctx.command, MultiCommand) and ctx.command.chain: + remaining_commands = [c for c in get_visible_commands_starting_with(ctx, incomplete) + if c.name not in ctx.protected_args] + completions_out.extend([(c.name, c.get_short_help_str()) for c in remaining_commands]) + + +def get_choices(cli, prog_name, args, incomplete): + """ + :param cli: command definition + :param prog_name: the program that is running + :param args: full list of args + :param incomplete: the incomplete text to autocomplete + :return: all the possible completions for the incomplete + """ + all_args = copy.deepcopy(args) + + ctx = resolve_ctx(cli, prog_name, args) + if ctx is None: + return [] + + # In newer versions of bash long opts with '='s are partitioned, but it's easier to parse + # without the '=' + if start_of_option(incomplete) and WORDBREAK in incomplete: + partition_incomplete = incomplete.partition(WORDBREAK) + all_args.append(partition_incomplete[0]) + incomplete = partition_incomplete[2] + elif incomplete == WORDBREAK: + incomplete = '' + + completions = [] + if start_of_option(incomplete): + # completions for partial options + for param in ctx.command.params: + if isinstance(param, Option) and not param.hidden: + param_opts = [param_opt for param_opt in param.opts + + param.secondary_opts if param_opt not in all_args or param.multiple] + completions.extend([(o, param.help) for o in param_opts if o.startswith(incomplete)]) + return completions + # completion for option values from user supplied values + for param in ctx.command.params: + if is_incomplete_option(all_args, param): + return get_user_autocompletions(ctx, all_args, incomplete, param) + # completion for argument values from user supplied values + for param in ctx.command.params: + if is_incomplete_argument(ctx.params, param): + return get_user_autocompletions(ctx, all_args, incomplete, param) + + add_subcommand_completions(ctx, incomplete, completions) + # Sort before returning so that proper ordering can be enforced in custom types. + return sorted(completions) + + +def do_complete(cli, prog_name, include_descriptions): + cwords = split_arg_string(os.environ['COMP_WORDS']) + cword = int(os.environ['COMP_CWORD']) + args = cwords[1:cword] + try: + incomplete = cwords[cword] + except IndexError: + incomplete = '' + + for item in get_choices(cli, prog_name, args, incomplete): + echo(item[0]) + if include_descriptions: + # ZSH has trouble dealing with empty array parameters when returned from commands, so use a well defined character '_' to indicate no description is present. + echo(item[1] if item[1] else '_') + + return True + + +def bashcomplete(cli, prog_name, complete_var, complete_instr): + if complete_instr.startswith('source'): + shell = 'zsh' if complete_instr == 'source_zsh' else 'bash' + echo(get_completion_script(prog_name, complete_var, shell)) + return True + elif complete_instr == 'complete' or complete_instr == 'complete_zsh': + return do_complete(cli, prog_name, complete_instr == 'complete_zsh') + return False diff --git a/week-0/day-3/my_todo_app/venv/lib/python3.6/site-packages/click/_compat.py b/week-0/day-3/my_todo_app/venv/lib/python3.6/site-packages/click/_compat.py new file mode 100644 index 00000000..937e2301 --- /dev/null +++ b/week-0/day-3/my_todo_app/venv/lib/python3.6/site-packages/click/_compat.py @@ -0,0 +1,703 @@ +import re +import io +import os +import sys +import codecs +from weakref import WeakKeyDictionary + + +PY2 = sys.version_info[0] == 2 +CYGWIN = sys.platform.startswith('cygwin') +# Determine local App Engine environment, per Google's own suggestion +APP_ENGINE = ('APPENGINE_RUNTIME' in os.environ and + 'Development/' in os.environ['SERVER_SOFTWARE']) +WIN = sys.platform.startswith('win') and not APP_ENGINE +DEFAULT_COLUMNS = 80 + + +_ansi_re = re.compile(r'\033\[((?:\d|;)*)([a-zA-Z])') + + +def get_filesystem_encoding(): + return sys.getfilesystemencoding() or sys.getdefaultencoding() + + +def _make_text_stream(stream, encoding, errors, + force_readable=False, force_writable=False): + if encoding is None: + encoding = get_best_encoding(stream) + if errors is None: + errors = 'replace' + return _NonClosingTextIOWrapper(stream, encoding, errors, + line_buffering=True, + force_readable=force_readable, + force_writable=force_writable) + + +def is_ascii_encoding(encoding): + """Checks if a given encoding is ascii.""" + try: + return codecs.lookup(encoding).name == 'ascii' + except LookupError: + return False + + +def get_best_encoding(stream): + """Returns the default stream encoding if not found.""" + rv = getattr(stream, 'encoding', None) or sys.getdefaultencoding() + if is_ascii_encoding(rv): + return 'utf-8' + return rv + + +class _NonClosingTextIOWrapper(io.TextIOWrapper): + + def __init__(self, stream, encoding, errors, + force_readable=False, force_writable=False, **extra): + self._stream = stream = _FixupStream(stream, force_readable, + force_writable) + io.TextIOWrapper.__init__(self, stream, encoding, errors, **extra) + + # The io module is a place where the Python 3 text behavior + # was forced upon Python 2, so we need to unbreak + # it to look like Python 2. + if PY2: + def write(self, x): + if isinstance(x, str) or is_bytes(x): + try: + self.flush() + except Exception: + pass + return self.buffer.write(str(x)) + return io.TextIOWrapper.write(self, x) + + def writelines(self, lines): + for line in lines: + self.write(line) + + def __del__(self): + try: + self.detach() + except Exception: + pass + + def isatty(self): + # https://bitbucket.org/pypy/pypy/issue/1803 + return self._stream.isatty() + + +class _FixupStream(object): + """The new io interface needs more from streams than streams + traditionally implement. As such, this fix-up code is necessary in + some circumstances. + + The forcing of readable and writable flags are there because some tools + put badly patched objects on sys (one such offender are certain version + of jupyter notebook). + """ + + def __init__(self, stream, force_readable=False, force_writable=False): + self._stream = stream + self._force_readable = force_readable + self._force_writable = force_writable + + def __getattr__(self, name): + return getattr(self._stream, name) + + def read1(self, size): + f = getattr(self._stream, 'read1', None) + if f is not None: + return f(size) + # We only dispatch to readline instead of read in Python 2 as we + # do not want cause problems with the different implementation + # of line buffering. + if PY2: + return self._stream.readline(size) + return self._stream.read(size) + + def readable(self): + if self._force_readable: + return True + x = getattr(self._stream, 'readable', None) + if x is not None: + return x() + try: + self._stream.read(0) + except Exception: + return False + return True + + def writable(self): + if self._force_writable: + return True + x = getattr(self._stream, 'writable', None) + if x is not None: + return x() + try: + self._stream.write('') + except Exception: + try: + self._stream.write(b'') + except Exception: + return False + return True + + def seekable(self): + x = getattr(self._stream, 'seekable', None) + if x is not None: + return x() + try: + self._stream.seek(self._stream.tell()) + except Exception: + return False + return True + + +if PY2: + text_type = unicode + bytes = str + raw_input = raw_input + string_types = (str, unicode) + int_types = (int, long) + iteritems = lambda x: x.iteritems() + range_type = xrange + + def is_bytes(x): + return isinstance(x, (buffer, bytearray)) + + _identifier_re = re.compile(r'^[a-zA-Z_][a-zA-Z0-9_]*$') + + # For Windows, we need to force stdout/stdin/stderr to binary if it's + # fetched for that. This obviously is not the most correct way to do + # it as it changes global state. Unfortunately, there does not seem to + # be a clear better way to do it as just reopening the file in binary + # mode does not change anything. + # + # An option would be to do what Python 3 does and to open the file as + # binary only, patch it back to the system, and then use a wrapper + # stream that converts newlines. It's not quite clear what's the + # correct option here. + # + # This code also lives in _winconsole for the fallback to the console + # emulation stream. + # + # There are also Windows environments where the `msvcrt` module is not + # available (which is why we use try-catch instead of the WIN variable + # here), such as the Google App Engine development server on Windows. In + # those cases there is just nothing we can do. + def set_binary_mode(f): + return f + + try: + import msvcrt + except ImportError: + pass + else: + def set_binary_mode(f): + try: + fileno = f.fileno() + except Exception: + pass + else: + msvcrt.setmode(fileno, os.O_BINARY) + return f + + try: + import fcntl + except ImportError: + pass + else: + def set_binary_mode(f): + try: + fileno = f.fileno() + except Exception: + pass + else: + flags = fcntl.fcntl(fileno, fcntl.F_GETFL) + fcntl.fcntl(fileno, fcntl.F_SETFL, flags & ~os.O_NONBLOCK) + return f + + def isidentifier(x): + return _identifier_re.search(x) is not None + + def get_binary_stdin(): + return set_binary_mode(sys.stdin) + + def get_binary_stdout(): + _wrap_std_stream('stdout') + return set_binary_mode(sys.stdout) + + def get_binary_stderr(): + _wrap_std_stream('stderr') + return set_binary_mode(sys.stderr) + + def get_text_stdin(encoding=None, errors=None): + rv = _get_windows_console_stream(sys.stdin, encoding, errors) + if rv is not None: + return rv + return _make_text_stream(sys.stdin, encoding, errors, + force_readable=True) + + def get_text_stdout(encoding=None, errors=None): + _wrap_std_stream('stdout') + rv = _get_windows_console_stream(sys.stdout, encoding, errors) + if rv is not None: + return rv + return _make_text_stream(sys.stdout, encoding, errors, + force_writable=True) + + def get_text_stderr(encoding=None, errors=None): + _wrap_std_stream('stderr') + rv = _get_windows_console_stream(sys.stderr, encoding, errors) + if rv is not None: + return rv + return _make_text_stream(sys.stderr, encoding, errors, + force_writable=True) + + def filename_to_ui(value): + if isinstance(value, bytes): + value = value.decode(get_filesystem_encoding(), 'replace') + return value +else: + import io + text_type = str + raw_input = input + string_types = (str,) + int_types = (int,) + range_type = range + isidentifier = lambda x: x.isidentifier() + iteritems = lambda x: iter(x.items()) + + def is_bytes(x): + return isinstance(x, (bytes, memoryview, bytearray)) + + def _is_binary_reader(stream, default=False): + try: + return isinstance(stream.read(0), bytes) + except Exception: + return default + # This happens in some cases where the stream was already + # closed. In this case, we assume the default. + + def _is_binary_writer(stream, default=False): + try: + stream.write(b'') + except Exception: + try: + stream.write('') + return False + except Exception: + pass + return default + return True + + def _find_binary_reader(stream): + # We need to figure out if the given stream is already binary. + # This can happen because the official docs recommend detaching + # the streams to get binary streams. Some code might do this, so + # we need to deal with this case explicitly. + if _is_binary_reader(stream, False): + return stream + + buf = getattr(stream, 'buffer', None) + + # Same situation here; this time we assume that the buffer is + # actually binary in case it's closed. + if buf is not None and _is_binary_reader(buf, True): + return buf + + def _find_binary_writer(stream): + # We need to figure out if the given stream is already binary. + # This can happen because the official docs recommend detatching + # the streams to get binary streams. Some code might do this, so + # we need to deal with this case explicitly. + if _is_binary_writer(stream, False): + return stream + + buf = getattr(stream, 'buffer', None) + + # Same situation here; this time we assume that the buffer is + # actually binary in case it's closed. + if buf is not None and _is_binary_writer(buf, True): + return buf + + def _stream_is_misconfigured(stream): + """A stream is misconfigured if its encoding is ASCII.""" + # If the stream does not have an encoding set, we assume it's set + # to ASCII. This appears to happen in certain unittest + # environments. It's not quite clear what the correct behavior is + # but this at least will force Click to recover somehow. + return is_ascii_encoding(getattr(stream, 'encoding', None) or 'ascii') + + def _is_compatible_text_stream(stream, encoding, errors): + stream_encoding = getattr(stream, 'encoding', None) + stream_errors = getattr(stream, 'errors', None) + + # Perfect match. + if stream_encoding == encoding and stream_errors == errors: + return True + + # Otherwise, it's only a compatible stream if we did not ask for + # an encoding. + if encoding is None: + return stream_encoding is not None + + return False + + def _force_correct_text_reader(text_reader, encoding, errors, + force_readable=False): + if _is_binary_reader(text_reader, False): + binary_reader = text_reader + else: + # If there is no target encoding set, we need to verify that the + # reader is not actually misconfigured. + if encoding is None and not _stream_is_misconfigured(text_reader): + return text_reader + + if _is_compatible_text_stream(text_reader, encoding, errors): + return text_reader + + # If the reader has no encoding, we try to find the underlying + # binary reader for it. If that fails because the environment is + # misconfigured, we silently go with the same reader because this + # is too common to happen. In that case, mojibake is better than + # exceptions. + binary_reader = _find_binary_reader(text_reader) + if binary_reader is None: + return text_reader + + # At this point, we default the errors to replace instead of strict + # because nobody handles those errors anyways and at this point + # we're so fundamentally fucked that nothing can repair it. + if errors is None: + errors = 'replace' + return _make_text_stream(binary_reader, encoding, errors, + force_readable=force_readable) + + def _force_correct_text_writer(text_writer, encoding, errors, + force_writable=False): + if _is_binary_writer(text_writer, False): + binary_writer = text_writer + else: + # If there is no target encoding set, we need to verify that the + # writer is not actually misconfigured. + if encoding is None and not _stream_is_misconfigured(text_writer): + return text_writer + + if _is_compatible_text_stream(text_writer, encoding, errors): + return text_writer + + # If the writer has no encoding, we try to find the underlying + # binary writer for it. If that fails because the environment is + # misconfigured, we silently go with the same writer because this + # is too common to happen. In that case, mojibake is better than + # exceptions. + binary_writer = _find_binary_writer(text_writer) + if binary_writer is None: + return text_writer + + # At this point, we default the errors to replace instead of strict + # because nobody handles those errors anyways and at this point + # we're so fundamentally fucked that nothing can repair it. + if errors is None: + errors = 'replace' + return _make_text_stream(binary_writer, encoding, errors, + force_writable=force_writable) + + def get_binary_stdin(): + reader = _find_binary_reader(sys.stdin) + if reader is None: + raise RuntimeError('Was not able to determine binary ' + 'stream for sys.stdin.') + return reader + + def get_binary_stdout(): + writer = _find_binary_writer(sys.stdout) + if writer is None: + raise RuntimeError('Was not able to determine binary ' + 'stream for sys.stdout.') + return writer + + def get_binary_stderr(): + writer = _find_binary_writer(sys.stderr) + if writer is None: + raise RuntimeError('Was not able to determine binary ' + 'stream for sys.stderr.') + return writer + + def get_text_stdin(encoding=None, errors=None): + rv = _get_windows_console_stream(sys.stdin, encoding, errors) + if rv is not None: + return rv + return _force_correct_text_reader(sys.stdin, encoding, errors, + force_readable=True) + + def get_text_stdout(encoding=None, errors=None): + rv = _get_windows_console_stream(sys.stdout, encoding, errors) + if rv is not None: + return rv + return _force_correct_text_writer(sys.stdout, encoding, errors, + force_writable=True) + + def get_text_stderr(encoding=None, errors=None): + rv = _get_windows_console_stream(sys.stderr, encoding, errors) + if rv is not None: + return rv + return _force_correct_text_writer(sys.stderr, encoding, errors, + force_writable=True) + + def filename_to_ui(value): + if isinstance(value, bytes): + value = value.decode(get_filesystem_encoding(), 'replace') + else: + value = value.encode('utf-8', 'surrogateescape') \ + .decode('utf-8', 'replace') + return value + + +def get_streerror(e, default=None): + if hasattr(e, 'strerror'): + msg = e.strerror + else: + if default is not None: + msg = default + else: + msg = str(e) + if isinstance(msg, bytes): + msg = msg.decode('utf-8', 'replace') + return msg + + +def open_stream(filename, mode='r', encoding=None, errors='strict', + atomic=False): + # Standard streams first. These are simple because they don't need + # special handling for the atomic flag. It's entirely ignored. + if filename == '-': + if any(m in mode for m in ['w', 'a', 'x']): + if 'b' in mode: + return get_binary_stdout(), False + return get_text_stdout(encoding=encoding, errors=errors), False + if 'b' in mode: + return get_binary_stdin(), False + return get_text_stdin(encoding=encoding, errors=errors), False + + # Non-atomic writes directly go out through the regular open functions. + if not atomic: + if encoding is None: + return open(filename, mode), True + return io.open(filename, mode, encoding=encoding, errors=errors), True + + # Some usability stuff for atomic writes + if 'a' in mode: + raise ValueError( + 'Appending to an existing file is not supported, because that ' + 'would involve an expensive `copy`-operation to a temporary ' + 'file. Open the file in normal `w`-mode and copy explicitly ' + 'if that\'s what you\'re after.' + ) + if 'x' in mode: + raise ValueError('Use the `overwrite`-parameter instead.') + if 'w' not in mode: + raise ValueError('Atomic writes only make sense with `w`-mode.') + + # Atomic writes are more complicated. They work by opening a file + # as a proxy in the same folder and then using the fdopen + # functionality to wrap it in a Python file. Then we wrap it in an + # atomic file that moves the file over on close. + import tempfile + fd, tmp_filename = tempfile.mkstemp(dir=os.path.dirname(filename), + prefix='.__atomic-write') + + if encoding is not None: + f = io.open(fd, mode, encoding=encoding, errors=errors) + else: + f = os.fdopen(fd, mode) + + return _AtomicFile(f, tmp_filename, os.path.realpath(filename)), True + + +# Used in a destructor call, needs extra protection from interpreter cleanup. +if hasattr(os, 'replace'): + _replace = os.replace + _can_replace = True +else: + _replace = os.rename + _can_replace = not WIN + + +class _AtomicFile(object): + + def __init__(self, f, tmp_filename, real_filename): + self._f = f + self._tmp_filename = tmp_filename + self._real_filename = real_filename + self.closed = False + + @property + def name(self): + return self._real_filename + + def close(self, delete=False): + if self.closed: + return + self._f.close() + if not _can_replace: + try: + os.remove(self._real_filename) + except OSError: + pass + _replace(self._tmp_filename, self._real_filename) + self.closed = True + + def __getattr__(self, name): + return getattr(self._f, name) + + def __enter__(self): + return self + + def __exit__(self, exc_type, exc_value, tb): + self.close(delete=exc_type is not None) + + def __repr__(self): + return repr(self._f) + + +auto_wrap_for_ansi = None +colorama = None +get_winterm_size = None + + +def strip_ansi(value): + return _ansi_re.sub('', value) + + +def should_strip_ansi(stream=None, color=None): + if color is None: + if stream is None: + stream = sys.stdin + return not isatty(stream) + return not color + + +# If we're on Windows, we provide transparent integration through +# colorama. This will make ANSI colors through the echo function +# work automatically. +if WIN: + # Windows has a smaller terminal + DEFAULT_COLUMNS = 79 + + from ._winconsole import _get_windows_console_stream, _wrap_std_stream + + def _get_argv_encoding(): + import locale + return locale.getpreferredencoding() + + if PY2: + def raw_input(prompt=''): + sys.stderr.flush() + if prompt: + stdout = _default_text_stdout() + stdout.write(prompt) + stdin = _default_text_stdin() + return stdin.readline().rstrip('\r\n') + + try: + import colorama + except ImportError: + pass + else: + _ansi_stream_wrappers = WeakKeyDictionary() + + def auto_wrap_for_ansi(stream, color=None): + """This function wraps a stream so that calls through colorama + are issued to the win32 console API to recolor on demand. It + also ensures to reset the colors if a write call is interrupted + to not destroy the console afterwards. + """ + try: + cached = _ansi_stream_wrappers.get(stream) + except Exception: + cached = None + if cached is not None: + return cached + strip = should_strip_ansi(stream, color) + ansi_wrapper = colorama.AnsiToWin32(stream, strip=strip) + rv = ansi_wrapper.stream + _write = rv.write + + def _safe_write(s): + try: + return _write(s) + except: + ansi_wrapper.reset_all() + raise + + rv.write = _safe_write + try: + _ansi_stream_wrappers[stream] = rv + except Exception: + pass + return rv + + def get_winterm_size(): + win = colorama.win32.GetConsoleScreenBufferInfo( + colorama.win32.STDOUT).srWindow + return win.Right - win.Left, win.Bottom - win.Top +else: + def _get_argv_encoding(): + return getattr(sys.stdin, 'encoding', None) or get_filesystem_encoding() + + _get_windows_console_stream = lambda *x: None + _wrap_std_stream = lambda *x: None + + +def term_len(x): + return len(strip_ansi(x)) + + +def isatty(stream): + try: + return stream.isatty() + except Exception: + return False + + +def _make_cached_stream_func(src_func, wrapper_func): + cache = WeakKeyDictionary() + def func(): + stream = src_func() + try: + rv = cache.get(stream) + except Exception: + rv = None + if rv is not None: + return rv + rv = wrapper_func() + try: + stream = src_func() # In case wrapper_func() modified the stream + cache[stream] = rv + except Exception: + pass + return rv + return func + + +_default_text_stdin = _make_cached_stream_func( + lambda: sys.stdin, get_text_stdin) +_default_text_stdout = _make_cached_stream_func( + lambda: sys.stdout, get_text_stdout) +_default_text_stderr = _make_cached_stream_func( + lambda: sys.stderr, get_text_stderr) + + +binary_streams = { + 'stdin': get_binary_stdin, + 'stdout': get_binary_stdout, + 'stderr': get_binary_stderr, +} + +text_streams = { + 'stdin': get_text_stdin, + 'stdout': get_text_stdout, + 'stderr': get_text_stderr, +} diff --git a/week-0/day-3/my_todo_app/venv/lib/python3.6/site-packages/click/_termui_impl.py b/week-0/day-3/my_todo_app/venv/lib/python3.6/site-packages/click/_termui_impl.py new file mode 100644 index 00000000..00a8e5ef --- /dev/null +++ b/week-0/day-3/my_todo_app/venv/lib/python3.6/site-packages/click/_termui_impl.py @@ -0,0 +1,621 @@ +# -*- coding: utf-8 -*- +""" +click._termui_impl +~~~~~~~~~~~~~~~~~~ + +This module contains implementations for the termui module. To keep the +import time of Click down, some infrequently used functionality is +placed in this module and only imported as needed. + +:copyright: © 2014 by the Pallets team. +:license: BSD, see LICENSE.rst for more details. +""" + +import os +import sys +import time +import math +import contextlib +from ._compat import _default_text_stdout, range_type, PY2, isatty, \ + open_stream, strip_ansi, term_len, get_best_encoding, WIN, int_types, \ + CYGWIN +from .utils import echo +from .exceptions import ClickException + + +if os.name == 'nt': + BEFORE_BAR = '\r' + AFTER_BAR = '\n' +else: + BEFORE_BAR = '\r\033[?25l' + AFTER_BAR = '\033[?25h\n' + + +def _length_hint(obj): + """Returns the length hint of an object.""" + try: + return len(obj) + except (AttributeError, TypeError): + try: + get_hint = type(obj).__length_hint__ + except AttributeError: + return None + try: + hint = get_hint(obj) + except TypeError: + return None + if hint is NotImplemented or \ + not isinstance(hint, int_types) or \ + hint < 0: + return None + return hint + + +class ProgressBar(object): + + def __init__(self, iterable, length=None, fill_char='#', empty_char=' ', + bar_template='%(bar)s', info_sep=' ', show_eta=True, + show_percent=None, show_pos=False, item_show_func=None, + label=None, file=None, color=None, width=30): + self.fill_char = fill_char + self.empty_char = empty_char + self.bar_template = bar_template + self.info_sep = info_sep + self.show_eta = show_eta + self.show_percent = show_percent + self.show_pos = show_pos + self.item_show_func = item_show_func + self.label = label or '' + if file is None: + file = _default_text_stdout() + self.file = file + self.color = color + self.width = width + self.autowidth = width == 0 + + if length is None: + length = _length_hint(iterable) + if iterable is None: + if length is None: + raise TypeError('iterable or length is required') + iterable = range_type(length) + self.iter = iter(iterable) + self.length = length + self.length_known = length is not None + self.pos = 0 + self.avg = [] + self.start = self.last_eta = time.time() + self.eta_known = False + self.finished = False + self.max_width = None + self.entered = False + self.current_item = None + self.is_hidden = not isatty(self.file) + self._last_line = None + self.short_limit = 0.5 + + def __enter__(self): + self.entered = True + self.render_progress() + return self + + def __exit__(self, exc_type, exc_value, tb): + self.render_finish() + + def __iter__(self): + if not self.entered: + raise RuntimeError('You need to use progress bars in a with block.') + self.render_progress() + return self.generator() + + def is_fast(self): + return time.time() - self.start <= self.short_limit + + def render_finish(self): + if self.is_hidden or self.is_fast(): + return + self.file.write(AFTER_BAR) + self.file.flush() + + @property + def pct(self): + if self.finished: + return 1.0 + return min(self.pos / (float(self.length) or 1), 1.0) + + @property + def time_per_iteration(self): + if not self.avg: + return 0.0 + return sum(self.avg) / float(len(self.avg)) + + @property + def eta(self): + if self.length_known and not self.finished: + return self.time_per_iteration * (self.length - self.pos) + return 0.0 + + def format_eta(self): + if self.eta_known: + t = int(self.eta) + seconds = t % 60 + t //= 60 + minutes = t % 60 + t //= 60 + hours = t % 24 + t //= 24 + if t > 0: + days = t + return '%dd %02d:%02d:%02d' % (days, hours, minutes, seconds) + else: + return '%02d:%02d:%02d' % (hours, minutes, seconds) + return '' + + def format_pos(self): + pos = str(self.pos) + if self.length_known: + pos += '/%s' % self.length + return pos + + def format_pct(self): + return ('% 4d%%' % int(self.pct * 100))[1:] + + def format_bar(self): + if self.length_known: + bar_length = int(self.pct * self.width) + bar = self.fill_char * bar_length + bar += self.empty_char * (self.width - bar_length) + elif self.finished: + bar = self.fill_char * self.width + else: + bar = list(self.empty_char * (self.width or 1)) + if self.time_per_iteration != 0: + bar[int((math.cos(self.pos * self.time_per_iteration) + / 2.0 + 0.5) * self.width)] = self.fill_char + bar = ''.join(bar) + return bar + + def format_progress_line(self): + show_percent = self.show_percent + + info_bits = [] + if self.length_known and show_percent is None: + show_percent = not self.show_pos + + if self.show_pos: + info_bits.append(self.format_pos()) + if show_percent: + info_bits.append(self.format_pct()) + if self.show_eta and self.eta_known and not self.finished: + info_bits.append(self.format_eta()) + if self.item_show_func is not None: + item_info = self.item_show_func(self.current_item) + if item_info is not None: + info_bits.append(item_info) + + return (self.bar_template % { + 'label': self.label, + 'bar': self.format_bar(), + 'info': self.info_sep.join(info_bits) + }).rstrip() + + def render_progress(self): + from .termui import get_terminal_size + + if self.is_hidden: + return + + buf = [] + # Update width in case the terminal has been resized + if self.autowidth: + old_width = self.width + self.width = 0 + clutter_length = term_len(self.format_progress_line()) + new_width = max(0, get_terminal_size()[0] - clutter_length) + if new_width < old_width: + buf.append(BEFORE_BAR) + buf.append(' ' * self.max_width) + self.max_width = new_width + self.width = new_width + + clear_width = self.width + if self.max_width is not None: + clear_width = self.max_width + + buf.append(BEFORE_BAR) + line = self.format_progress_line() + line_len = term_len(line) + if self.max_width is None or self.max_width < line_len: + self.max_width = line_len + + buf.append(line) + buf.append(' ' * (clear_width - line_len)) + line = ''.join(buf) + # Render the line only if it changed. + + if line != self._last_line and not self.is_fast(): + self._last_line = line + echo(line, file=self.file, color=self.color, nl=False) + self.file.flush() + + def make_step(self, n_steps): + self.pos += n_steps + if self.length_known and self.pos >= self.length: + self.finished = True + + if (time.time() - self.last_eta) < 1.0: + return + + self.last_eta = time.time() + + # self.avg is a rolling list of length <= 7 of steps where steps are + # defined as time elapsed divided by the total progress through + # self.length. + if self.pos: + step = (time.time() - self.start) / self.pos + else: + step = time.time() - self.start + + self.avg = self.avg[-6:] + [step] + + self.eta_known = self.length_known + + def update(self, n_steps): + self.make_step(n_steps) + self.render_progress() + + def finish(self): + self.eta_known = 0 + self.current_item = None + self.finished = True + + def generator(self): + """ + Returns a generator which yields the items added to the bar during + construction, and updates the progress bar *after* the yielded block + returns. + """ + if not self.entered: + raise RuntimeError('You need to use progress bars in a with block.') + + if self.is_hidden: + for rv in self.iter: + yield rv + else: + for rv in self.iter: + self.current_item = rv + yield rv + self.update(1) + self.finish() + self.render_progress() + + +def pager(generator, color=None): + """Decide what method to use for paging through text.""" + stdout = _default_text_stdout() + if not isatty(sys.stdin) or not isatty(stdout): + return _nullpager(stdout, generator, color) + pager_cmd = (os.environ.get('PAGER', None) or '').strip() + if pager_cmd: + if WIN: + return _tempfilepager(generator, pager_cmd, color) + return _pipepager(generator, pager_cmd, color) + if os.environ.get('TERM') in ('dumb', 'emacs'): + return _nullpager(stdout, generator, color) + if WIN or sys.platform.startswith('os2'): + return _tempfilepager(generator, 'more <', color) + if hasattr(os, 'system') and os.system('(less) 2>/dev/null') == 0: + return _pipepager(generator, 'less', color) + + import tempfile + fd, filename = tempfile.mkstemp() + os.close(fd) + try: + if hasattr(os, 'system') and os.system('more "%s"' % filename) == 0: + return _pipepager(generator, 'more', color) + return _nullpager(stdout, generator, color) + finally: + os.unlink(filename) + + +def _pipepager(generator, cmd, color): + """Page through text by feeding it to another program. Invoking a + pager through this might support colors. + """ + import subprocess + env = dict(os.environ) + + # If we're piping to less we might support colors under the + # condition that + cmd_detail = cmd.rsplit('/', 1)[-1].split() + if color is None and cmd_detail[0] == 'less': + less_flags = os.environ.get('LESS', '') + ' '.join(cmd_detail[1:]) + if not less_flags: + env['LESS'] = '-R' + color = True + elif 'r' in less_flags or 'R' in less_flags: + color = True + + c = subprocess.Popen(cmd, shell=True, stdin=subprocess.PIPE, + env=env) + encoding = get_best_encoding(c.stdin) + try: + for text in generator: + if not color: + text = strip_ansi(text) + + c.stdin.write(text.encode(encoding, 'replace')) + except (IOError, KeyboardInterrupt): + pass + else: + c.stdin.close() + + # Less doesn't respect ^C, but catches it for its own UI purposes (aborting + # search or other commands inside less). + # + # That means when the user hits ^C, the parent process (click) terminates, + # but less is still alive, paging the output and messing up the terminal. + # + # If the user wants to make the pager exit on ^C, they should set + # `LESS='-K'`. It's not our decision to make. + while True: + try: + c.wait() + except KeyboardInterrupt: + pass + else: + break + + +def _tempfilepager(generator, cmd, color): + """Page through text by invoking a program on a temporary file.""" + import tempfile + filename = tempfile.mktemp() + # TODO: This never terminates if the passed generator never terminates. + text = "".join(generator) + if not color: + text = strip_ansi(text) + encoding = get_best_encoding(sys.stdout) + with open_stream(filename, 'wb')[0] as f: + f.write(text.encode(encoding)) + try: + os.system(cmd + ' "' + filename + '"') + finally: + os.unlink(filename) + + +def _nullpager(stream, generator, color): + """Simply print unformatted text. This is the ultimate fallback.""" + for text in generator: + if not color: + text = strip_ansi(text) + stream.write(text) + + +class Editor(object): + + def __init__(self, editor=None, env=None, require_save=True, + extension='.txt'): + self.editor = editor + self.env = env + self.require_save = require_save + self.extension = extension + + def get_editor(self): + if self.editor is not None: + return self.editor + for key in 'VISUAL', 'EDITOR': + rv = os.environ.get(key) + if rv: + return rv + if WIN: + return 'notepad' + for editor in 'vim', 'nano': + if os.system('which %s >/dev/null 2>&1' % editor) == 0: + return editor + return 'vi' + + def edit_file(self, filename): + import subprocess + editor = self.get_editor() + if self.env: + environ = os.environ.copy() + environ.update(self.env) + else: + environ = None + try: + c = subprocess.Popen('%s "%s"' % (editor, filename), + env=environ, shell=True) + exit_code = c.wait() + if exit_code != 0: + raise ClickException('%s: Editing failed!' % editor) + except OSError as e: + raise ClickException('%s: Editing failed: %s' % (editor, e)) + + def edit(self, text): + import tempfile + + text = text or '' + if text and not text.endswith('\n'): + text += '\n' + + fd, name = tempfile.mkstemp(prefix='editor-', suffix=self.extension) + try: + if WIN: + encoding = 'utf-8-sig' + text = text.replace('\n', '\r\n') + else: + encoding = 'utf-8' + text = text.encode(encoding) + + f = os.fdopen(fd, 'wb') + f.write(text) + f.close() + timestamp = os.path.getmtime(name) + + self.edit_file(name) + + if self.require_save \ + and os.path.getmtime(name) == timestamp: + return None + + f = open(name, 'rb') + try: + rv = f.read() + finally: + f.close() + return rv.decode('utf-8-sig').replace('\r\n', '\n') + finally: + os.unlink(name) + + +def open_url(url, wait=False, locate=False): + import subprocess + + def _unquote_file(url): + try: + import urllib + except ImportError: + import urllib + if url.startswith('file://'): + url = urllib.unquote(url[7:]) + return url + + if sys.platform == 'darwin': + args = ['open'] + if wait: + args.append('-W') + if locate: + args.append('-R') + args.append(_unquote_file(url)) + null = open('/dev/null', 'w') + try: + return subprocess.Popen(args, stderr=null).wait() + finally: + null.close() + elif WIN: + if locate: + url = _unquote_file(url) + args = 'explorer /select,"%s"' % _unquote_file( + url.replace('"', '')) + else: + args = 'start %s "" "%s"' % ( + wait and '/WAIT' or '', url.replace('"', '')) + return os.system(args) + elif CYGWIN: + if locate: + url = _unquote_file(url) + args = 'cygstart "%s"' % (os.path.dirname(url).replace('"', '')) + else: + args = 'cygstart %s "%s"' % ( + wait and '-w' or '', url.replace('"', '')) + return os.system(args) + + try: + if locate: + url = os.path.dirname(_unquote_file(url)) or '.' + else: + url = _unquote_file(url) + c = subprocess.Popen(['xdg-open', url]) + if wait: + return c.wait() + return 0 + except OSError: + if url.startswith(('http://', 'https://')) and not locate and not wait: + import webbrowser + webbrowser.open(url) + return 0 + return 1 + + +def _translate_ch_to_exc(ch): + if ch == u'\x03': + raise KeyboardInterrupt() + if ch == u'\x04' and not WIN: # Unix-like, Ctrl+D + raise EOFError() + if ch == u'\x1a' and WIN: # Windows, Ctrl+Z + raise EOFError() + + +if WIN: + import msvcrt + + @contextlib.contextmanager + def raw_terminal(): + yield + + def getchar(echo): + # The function `getch` will return a bytes object corresponding to + # the pressed character. Since Windows 10 build 1803, it will also + # return \x00 when called a second time after pressing a regular key. + # + # `getwch` does not share this probably-bugged behavior. Moreover, it + # returns a Unicode object by default, which is what we want. + # + # Either of these functions will return \x00 or \xe0 to indicate + # a special key, and you need to call the same function again to get + # the "rest" of the code. The fun part is that \u00e0 is + # "latin small letter a with grave", so if you type that on a French + # keyboard, you _also_ get a \xe0. + # E.g., consider the Up arrow. This returns \xe0 and then \x48. The + # resulting Unicode string reads as "a with grave" + "capital H". + # This is indistinguishable from when the user actually types + # "a with grave" and then "capital H". + # + # When \xe0 is returned, we assume it's part of a special-key sequence + # and call `getwch` again, but that means that when the user types + # the \u00e0 character, `getchar` doesn't return until a second + # character is typed. + # The alternative is returning immediately, but that would mess up + # cross-platform handling of arrow keys and others that start with + # \xe0. Another option is using `getch`, but then we can't reliably + # read non-ASCII characters, because return values of `getch` are + # limited to the current 8-bit codepage. + # + # Anyway, Click doesn't claim to do this Right(tm), and using `getwch` + # is doing the right thing in more situations than with `getch`. + if echo: + func = msvcrt.getwche + else: + func = msvcrt.getwch + + rv = func() + if rv in (u'\x00', u'\xe0'): + # \x00 and \xe0 are control characters that indicate special key, + # see above. + rv += func() + _translate_ch_to_exc(rv) + return rv +else: + import tty + import termios + + @contextlib.contextmanager + def raw_terminal(): + if not isatty(sys.stdin): + f = open('/dev/tty') + fd = f.fileno() + else: + fd = sys.stdin.fileno() + f = None + try: + old_settings = termios.tcgetattr(fd) + try: + tty.setraw(fd) + yield fd + finally: + termios.tcsetattr(fd, termios.TCSADRAIN, old_settings) + sys.stdout.flush() + if f is not None: + f.close() + except termios.error: + pass + + def getchar(echo): + with raw_terminal() as fd: + ch = os.read(fd, 32) + ch = ch.decode(get_best_encoding(sys.stdin), 'replace') + if echo and isatty(sys.stdout): + sys.stdout.write(ch) + _translate_ch_to_exc(ch) + return ch diff --git a/week-0/day-3/my_todo_app/venv/lib/python3.6/site-packages/click/_textwrap.py b/week-0/day-3/my_todo_app/venv/lib/python3.6/site-packages/click/_textwrap.py new file mode 100644 index 00000000..7e776031 --- /dev/null +++ b/week-0/day-3/my_todo_app/venv/lib/python3.6/site-packages/click/_textwrap.py @@ -0,0 +1,38 @@ +import textwrap +from contextlib import contextmanager + + +class TextWrapper(textwrap.TextWrapper): + + def _handle_long_word(self, reversed_chunks, cur_line, cur_len, width): + space_left = max(width - cur_len, 1) + + if self.break_long_words: + last = reversed_chunks[-1] + cut = last[:space_left] + res = last[space_left:] + cur_line.append(cut) + reversed_chunks[-1] = res + elif not cur_line: + cur_line.append(reversed_chunks.pop()) + + @contextmanager + def extra_indent(self, indent): + old_initial_indent = self.initial_indent + old_subsequent_indent = self.subsequent_indent + self.initial_indent += indent + self.subsequent_indent += indent + try: + yield + finally: + self.initial_indent = old_initial_indent + self.subsequent_indent = old_subsequent_indent + + def indent_only(self, text): + rv = [] + for idx, line in enumerate(text.splitlines()): + indent = self.initial_indent + if idx > 0: + indent = self.subsequent_indent + rv.append(indent + line) + return '\n'.join(rv) diff --git a/week-0/day-3/my_todo_app/venv/lib/python3.6/site-packages/click/_unicodefun.py b/week-0/day-3/my_todo_app/venv/lib/python3.6/site-packages/click/_unicodefun.py new file mode 100644 index 00000000..620edff3 --- /dev/null +++ b/week-0/day-3/my_todo_app/venv/lib/python3.6/site-packages/click/_unicodefun.py @@ -0,0 +1,125 @@ +import os +import sys +import codecs + +from ._compat import PY2 + + +# If someone wants to vendor click, we want to ensure the +# correct package is discovered. Ideally we could use a +# relative import here but unfortunately Python does not +# support that. +click = sys.modules[__name__.rsplit('.', 1)[0]] + + +def _find_unicode_literals_frame(): + import __future__ + if not hasattr(sys, '_getframe'): # not all Python implementations have it + return 0 + frm = sys._getframe(1) + idx = 1 + while frm is not None: + if frm.f_globals.get('__name__', '').startswith('click.'): + frm = frm.f_back + idx += 1 + elif frm.f_code.co_flags & __future__.unicode_literals.compiler_flag: + return idx + else: + break + return 0 + + +def _check_for_unicode_literals(): + if not __debug__: + return + if not PY2 or click.disable_unicode_literals_warning: + return + bad_frame = _find_unicode_literals_frame() + if bad_frame <= 0: + return + from warnings import warn + warn(Warning('Click detected the use of the unicode_literals ' + '__future__ import. This is heavily discouraged ' + 'because it can introduce subtle bugs in your ' + 'code. You should instead use explicit u"" literals ' + 'for your unicode strings. For more information see ' + 'https://click.palletsprojects.com/python3/'), + stacklevel=bad_frame) + + +def _verify_python3_env(): + """Ensures that the environment is good for unicode on Python 3.""" + if PY2: + return + try: + import locale + fs_enc = codecs.lookup(locale.getpreferredencoding()).name + except Exception: + fs_enc = 'ascii' + if fs_enc != 'ascii': + return + + extra = '' + if os.name == 'posix': + import subprocess + try: + rv = subprocess.Popen(['locale', '-a'], stdout=subprocess.PIPE, + stderr=subprocess.PIPE).communicate()[0] + except OSError: + rv = b'' + good_locales = set() + has_c_utf8 = False + + # Make sure we're operating on text here. + if isinstance(rv, bytes): + rv = rv.decode('ascii', 'replace') + + for line in rv.splitlines(): + locale = line.strip() + if locale.lower().endswith(('.utf-8', '.utf8')): + good_locales.add(locale) + if locale.lower() in ('c.utf8', 'c.utf-8'): + has_c_utf8 = True + + extra += '\n\n' + if not good_locales: + extra += ( + 'Additional information: on this system no suitable UTF-8\n' + 'locales were discovered. This most likely requires resolving\n' + 'by reconfiguring the locale system.' + ) + elif has_c_utf8: + extra += ( + 'This system supports the C.UTF-8 locale which is recommended.\n' + 'You might be able to resolve your issue by exporting the\n' + 'following environment variables:\n\n' + ' export LC_ALL=C.UTF-8\n' + ' export LANG=C.UTF-8' + ) + else: + extra += ( + 'This system lists a couple of UTF-8 supporting locales that\n' + 'you can pick from. The following suitable locales were\n' + 'discovered: %s' + ) % ', '.join(sorted(good_locales)) + + bad_locale = None + for locale in os.environ.get('LC_ALL'), os.environ.get('LANG'): + if locale and locale.lower().endswith(('.utf-8', '.utf8')): + bad_locale = locale + if locale is not None: + break + if bad_locale is not None: + extra += ( + '\n\nClick discovered that you exported a UTF-8 locale\n' + 'but the locale system could not pick up from it because\n' + 'it does not exist. The exported locale is "%s" but it\n' + 'is not supported' + ) % bad_locale + + raise RuntimeError( + 'Click will abort further execution because Python 3 was' + ' configured to use ASCII as encoding for the environment.' + ' Consult https://click.palletsprojects.com/en/7.x/python3/ for' + ' mitigation steps.' + extra + ) diff --git a/week-0/day-3/my_todo_app/venv/lib/python3.6/site-packages/click/_winconsole.py b/week-0/day-3/my_todo_app/venv/lib/python3.6/site-packages/click/_winconsole.py new file mode 100644 index 00000000..bbb080dd --- /dev/null +++ b/week-0/day-3/my_todo_app/venv/lib/python3.6/site-packages/click/_winconsole.py @@ -0,0 +1,307 @@ +# -*- coding: utf-8 -*- +# This module is based on the excellent work by Adam Bartoš who +# provided a lot of what went into the implementation here in +# the discussion to issue1602 in the Python bug tracker. +# +# There are some general differences in regards to how this works +# compared to the original patches as we do not need to patch +# the entire interpreter but just work in our little world of +# echo and prmopt. + +import io +import os +import sys +import zlib +import time +import ctypes +import msvcrt +from ._compat import _NonClosingTextIOWrapper, text_type, PY2 +from ctypes import byref, POINTER, c_int, c_char, c_char_p, \ + c_void_p, py_object, c_ssize_t, c_ulong, windll, WINFUNCTYPE +try: + from ctypes import pythonapi + PyObject_GetBuffer = pythonapi.PyObject_GetBuffer + PyBuffer_Release = pythonapi.PyBuffer_Release +except ImportError: + pythonapi = None +from ctypes.wintypes import LPWSTR, LPCWSTR + + +c_ssize_p = POINTER(c_ssize_t) + +kernel32 = windll.kernel32 +GetStdHandle = kernel32.GetStdHandle +ReadConsoleW = kernel32.ReadConsoleW +WriteConsoleW = kernel32.WriteConsoleW +GetLastError = kernel32.GetLastError +GetCommandLineW = WINFUNCTYPE(LPWSTR)( + ('GetCommandLineW', windll.kernel32)) +CommandLineToArgvW = WINFUNCTYPE( + POINTER(LPWSTR), LPCWSTR, POINTER(c_int))( + ('CommandLineToArgvW', windll.shell32)) + + +STDIN_HANDLE = GetStdHandle(-10) +STDOUT_HANDLE = GetStdHandle(-11) +STDERR_HANDLE = GetStdHandle(-12) + + +PyBUF_SIMPLE = 0 +PyBUF_WRITABLE = 1 + +ERROR_SUCCESS = 0 +ERROR_NOT_ENOUGH_MEMORY = 8 +ERROR_OPERATION_ABORTED = 995 + +STDIN_FILENO = 0 +STDOUT_FILENO = 1 +STDERR_FILENO = 2 + +EOF = b'\x1a' +MAX_BYTES_WRITTEN = 32767 + + +class Py_buffer(ctypes.Structure): + _fields_ = [ + ('buf', c_void_p), + ('obj', py_object), + ('len', c_ssize_t), + ('itemsize', c_ssize_t), + ('readonly', c_int), + ('ndim', c_int), + ('format', c_char_p), + ('shape', c_ssize_p), + ('strides', c_ssize_p), + ('suboffsets', c_ssize_p), + ('internal', c_void_p) + ] + + if PY2: + _fields_.insert(-1, ('smalltable', c_ssize_t * 2)) + + +# On PyPy we cannot get buffers so our ability to operate here is +# serverly limited. +if pythonapi is None: + get_buffer = None +else: + def get_buffer(obj, writable=False): + buf = Py_buffer() + flags = PyBUF_WRITABLE if writable else PyBUF_SIMPLE + PyObject_GetBuffer(py_object(obj), byref(buf), flags) + try: + buffer_type = c_char * buf.len + return buffer_type.from_address(buf.buf) + finally: + PyBuffer_Release(byref(buf)) + + +class _WindowsConsoleRawIOBase(io.RawIOBase): + + def __init__(self, handle): + self.handle = handle + + def isatty(self): + io.RawIOBase.isatty(self) + return True + + +class _WindowsConsoleReader(_WindowsConsoleRawIOBase): + + def readable(self): + return True + + def readinto(self, b): + bytes_to_be_read = len(b) + if not bytes_to_be_read: + return 0 + elif bytes_to_be_read % 2: + raise ValueError('cannot read odd number of bytes from ' + 'UTF-16-LE encoded console') + + buffer = get_buffer(b, writable=True) + code_units_to_be_read = bytes_to_be_read // 2 + code_units_read = c_ulong() + + rv = ReadConsoleW(self.handle, buffer, code_units_to_be_read, + byref(code_units_read), None) + if GetLastError() == ERROR_OPERATION_ABORTED: + # wait for KeyboardInterrupt + time.sleep(0.1) + if not rv: + raise OSError('Windows error: %s' % GetLastError()) + + if buffer[0] == EOF: + return 0 + return 2 * code_units_read.value + + +class _WindowsConsoleWriter(_WindowsConsoleRawIOBase): + + def writable(self): + return True + + @staticmethod + def _get_error_message(errno): + if errno == ERROR_SUCCESS: + return 'ERROR_SUCCESS' + elif errno == ERROR_NOT_ENOUGH_MEMORY: + return 'ERROR_NOT_ENOUGH_MEMORY' + return 'Windows error %s' % errno + + def write(self, b): + bytes_to_be_written = len(b) + buf = get_buffer(b) + code_units_to_be_written = min(bytes_to_be_written, + MAX_BYTES_WRITTEN) // 2 + code_units_written = c_ulong() + + WriteConsoleW(self.handle, buf, code_units_to_be_written, + byref(code_units_written), None) + bytes_written = 2 * code_units_written.value + + if bytes_written == 0 and bytes_to_be_written > 0: + raise OSError(self._get_error_message(GetLastError())) + return bytes_written + + +class ConsoleStream(object): + + def __init__(self, text_stream, byte_stream): + self._text_stream = text_stream + self.buffer = byte_stream + + @property + def name(self): + return self.buffer.name + + def write(self, x): + if isinstance(x, text_type): + return self._text_stream.write(x) + try: + self.flush() + except Exception: + pass + return self.buffer.write(x) + + def writelines(self, lines): + for line in lines: + self.write(line) + + def __getattr__(self, name): + return getattr(self._text_stream, name) + + def isatty(self): + return self.buffer.isatty() + + def __repr__(self): + return '' % ( + self.name, + self.encoding, + ) + + +class WindowsChunkedWriter(object): + """ + Wraps a stream (such as stdout), acting as a transparent proxy for all + attribute access apart from method 'write()' which we wrap to write in + limited chunks due to a Windows limitation on binary console streams. + """ + def __init__(self, wrapped): + # double-underscore everything to prevent clashes with names of + # attributes on the wrapped stream object. + self.__wrapped = wrapped + + def __getattr__(self, name): + return getattr(self.__wrapped, name) + + def write(self, text): + total_to_write = len(text) + written = 0 + + while written < total_to_write: + to_write = min(total_to_write - written, MAX_BYTES_WRITTEN) + self.__wrapped.write(text[written:written+to_write]) + written += to_write + + +_wrapped_std_streams = set() + + +def _wrap_std_stream(name): + # Python 2 & Windows 7 and below + if PY2 and sys.getwindowsversion()[:2] <= (6, 1) and name not in _wrapped_std_streams: + setattr(sys, name, WindowsChunkedWriter(getattr(sys, name))) + _wrapped_std_streams.add(name) + + +def _get_text_stdin(buffer_stream): + text_stream = _NonClosingTextIOWrapper( + io.BufferedReader(_WindowsConsoleReader(STDIN_HANDLE)), + 'utf-16-le', 'strict', line_buffering=True) + return ConsoleStream(text_stream, buffer_stream) + + +def _get_text_stdout(buffer_stream): + text_stream = _NonClosingTextIOWrapper( + io.BufferedWriter(_WindowsConsoleWriter(STDOUT_HANDLE)), + 'utf-16-le', 'strict', line_buffering=True) + return ConsoleStream(text_stream, buffer_stream) + + +def _get_text_stderr(buffer_stream): + text_stream = _NonClosingTextIOWrapper( + io.BufferedWriter(_WindowsConsoleWriter(STDERR_HANDLE)), + 'utf-16-le', 'strict', line_buffering=True) + return ConsoleStream(text_stream, buffer_stream) + + +if PY2: + def _hash_py_argv(): + return zlib.crc32('\x00'.join(sys.argv[1:])) + + _initial_argv_hash = _hash_py_argv() + + def _get_windows_argv(): + argc = c_int(0) + argv_unicode = CommandLineToArgvW(GetCommandLineW(), byref(argc)) + argv = [argv_unicode[i] for i in range(0, argc.value)] + + if not hasattr(sys, 'frozen'): + argv = argv[1:] + while len(argv) > 0: + arg = argv[0] + if not arg.startswith('-') or arg == '-': + break + argv = argv[1:] + if arg.startswith(('-c', '-m')): + break + + return argv[1:] + + +_stream_factories = { + 0: _get_text_stdin, + 1: _get_text_stdout, + 2: _get_text_stderr, +} + + +def _get_windows_console_stream(f, encoding, errors): + if get_buffer is not None and \ + encoding in ('utf-16-le', None) \ + and errors in ('strict', None) and \ + hasattr(f, 'isatty') and f.isatty(): + func = _stream_factories.get(f.fileno()) + if func is not None: + if not PY2: + f = getattr(f, 'buffer', None) + if f is None: + return None + else: + # If we are on Python 2 we need to set the stream that we + # deal with to binary mode as otherwise the exercise if a + # bit moot. The same problems apply as for + # get_binary_stdin and friends from _compat. + msvcrt.setmode(f.fileno(), os.O_BINARY) + return func(f) diff --git a/week-0/day-3/my_todo_app/venv/lib/python3.6/site-packages/click/core.py b/week-0/day-3/my_todo_app/venv/lib/python3.6/site-packages/click/core.py new file mode 100644 index 00000000..7a1e3422 --- /dev/null +++ b/week-0/day-3/my_todo_app/venv/lib/python3.6/site-packages/click/core.py @@ -0,0 +1,1856 @@ +import errno +import inspect +import os +import sys +from contextlib import contextmanager +from itertools import repeat +from functools import update_wrapper + +from .types import convert_type, IntRange, BOOL +from .utils import PacifyFlushWrapper, make_str, make_default_short_help, \ + echo, get_os_args +from .exceptions import ClickException, UsageError, BadParameter, Abort, \ + MissingParameter, Exit +from .termui import prompt, confirm, style +from .formatting import HelpFormatter, join_options +from .parser import OptionParser, split_opt +from .globals import push_context, pop_context + +from ._compat import PY2, isidentifier, iteritems, string_types +from ._unicodefun import _check_for_unicode_literals, _verify_python3_env + + +_missing = object() + + +SUBCOMMAND_METAVAR = 'COMMAND [ARGS]...' +SUBCOMMANDS_METAVAR = 'COMMAND1 [ARGS]... [COMMAND2 [ARGS]...]...' + +DEPRECATED_HELP_NOTICE = ' (DEPRECATED)' +DEPRECATED_INVOKE_NOTICE = 'DeprecationWarning: ' + \ + 'The command %(name)s is deprecated.' + + +def _maybe_show_deprecated_notice(cmd): + if cmd.deprecated: + echo(style(DEPRECATED_INVOKE_NOTICE % {'name': cmd.name}, fg='red'), err=True) + + +def fast_exit(code): + """Exit without garbage collection, this speeds up exit by about 10ms for + things like bash completion. + """ + sys.stdout.flush() + sys.stderr.flush() + os._exit(code) + + +def _bashcomplete(cmd, prog_name, complete_var=None): + """Internal handler for the bash completion support.""" + if complete_var is None: + complete_var = '_%s_COMPLETE' % (prog_name.replace('-', '_')).upper() + complete_instr = os.environ.get(complete_var) + if not complete_instr: + return + + from ._bashcomplete import bashcomplete + if bashcomplete(cmd, prog_name, complete_var, complete_instr): + fast_exit(1) + + +def _check_multicommand(base_command, cmd_name, cmd, register=False): + if not base_command.chain or not isinstance(cmd, MultiCommand): + return + if register: + hint = 'It is not possible to add multi commands as children to ' \ + 'another multi command that is in chain mode' + else: + hint = 'Found a multi command as subcommand to a multi command ' \ + 'that is in chain mode. This is not supported' + raise RuntimeError('%s. Command "%s" is set to chain and "%s" was ' + 'added as subcommand but it in itself is a ' + 'multi command. ("%s" is a %s within a chained ' + '%s named "%s").' % ( + hint, base_command.name, cmd_name, + cmd_name, cmd.__class__.__name__, + base_command.__class__.__name__, + base_command.name)) + + +def batch(iterable, batch_size): + return list(zip(*repeat(iter(iterable), batch_size))) + + +def invoke_param_callback(callback, ctx, param, value): + code = getattr(callback, '__code__', None) + args = getattr(code, 'co_argcount', 3) + + if args < 3: + # This will become a warning in Click 3.0: + from warnings import warn + warn(Warning('Invoked legacy parameter callback "%s". The new ' + 'signature for such callbacks starting with ' + 'click 2.0 is (ctx, param, value).' + % callback), stacklevel=3) + return callback(ctx, value) + return callback(ctx, param, value) + + +@contextmanager +def augment_usage_errors(ctx, param=None): + """Context manager that attaches extra information to exceptions that + fly. + """ + try: + yield + except BadParameter as e: + if e.ctx is None: + e.ctx = ctx + if param is not None and e.param is None: + e.param = param + raise + except UsageError as e: + if e.ctx is None: + e.ctx = ctx + raise + + +def iter_params_for_processing(invocation_order, declaration_order): + """Given a sequence of parameters in the order as should be considered + for processing and an iterable of parameters that exist, this returns + a list in the correct order as they should be processed. + """ + def sort_key(item): + try: + idx = invocation_order.index(item) + except ValueError: + idx = float('inf') + return (not item.is_eager, idx) + + return sorted(declaration_order, key=sort_key) + + +class Context(object): + """The context is a special internal object that holds state relevant + for the script execution at every single level. It's normally invisible + to commands unless they opt-in to getting access to it. + + The context is useful as it can pass internal objects around and can + control special execution features such as reading data from + environment variables. + + A context can be used as context manager in which case it will call + :meth:`close` on teardown. + + .. versionadded:: 2.0 + Added the `resilient_parsing`, `help_option_names`, + `token_normalize_func` parameters. + + .. versionadded:: 3.0 + Added the `allow_extra_args` and `allow_interspersed_args` + parameters. + + .. versionadded:: 4.0 + Added the `color`, `ignore_unknown_options`, and + `max_content_width` parameters. + + :param command: the command class for this context. + :param parent: the parent context. + :param info_name: the info name for this invocation. Generally this + is the most descriptive name for the script or + command. For the toplevel script it is usually + the name of the script, for commands below it it's + the name of the script. + :param obj: an arbitrary object of user data. + :param auto_envvar_prefix: the prefix to use for automatic environment + variables. If this is `None` then reading + from environment variables is disabled. This + does not affect manually set environment + variables which are always read. + :param default_map: a dictionary (like object) with default values + for parameters. + :param terminal_width: the width of the terminal. The default is + inherit from parent context. If no context + defines the terminal width then auto + detection will be applied. + :param max_content_width: the maximum width for content rendered by + Click (this currently only affects help + pages). This defaults to 80 characters if + not overridden. In other words: even if the + terminal is larger than that, Click will not + format things wider than 80 characters by + default. In addition to that, formatters might + add some safety mapping on the right. + :param resilient_parsing: if this flag is enabled then Click will + parse without any interactivity or callback + invocation. Default values will also be + ignored. This is useful for implementing + things such as completion support. + :param allow_extra_args: if this is set to `True` then extra arguments + at the end will not raise an error and will be + kept on the context. The default is to inherit + from the command. + :param allow_interspersed_args: if this is set to `False` then options + and arguments cannot be mixed. The + default is to inherit from the command. + :param ignore_unknown_options: instructs click to ignore options it does + not know and keeps them for later + processing. + :param help_option_names: optionally a list of strings that define how + the default help parameter is named. The + default is ``['--help']``. + :param token_normalize_func: an optional function that is used to + normalize tokens (options, choices, + etc.). This for instance can be used to + implement case insensitive behavior. + :param color: controls if the terminal supports ANSI colors or not. The + default is autodetection. This is only needed if ANSI + codes are used in texts that Click prints which is by + default not the case. This for instance would affect + help output. + """ + + def __init__(self, command, parent=None, info_name=None, obj=None, + auto_envvar_prefix=None, default_map=None, + terminal_width=None, max_content_width=None, + resilient_parsing=False, allow_extra_args=None, + allow_interspersed_args=None, + ignore_unknown_options=None, help_option_names=None, + token_normalize_func=None, color=None): + #: the parent context or `None` if none exists. + self.parent = parent + #: the :class:`Command` for this context. + self.command = command + #: the descriptive information name + self.info_name = info_name + #: the parsed parameters except if the value is hidden in which + #: case it's not remembered. + self.params = {} + #: the leftover arguments. + self.args = [] + #: protected arguments. These are arguments that are prepended + #: to `args` when certain parsing scenarios are encountered but + #: must be never propagated to another arguments. This is used + #: to implement nested parsing. + self.protected_args = [] + if obj is None and parent is not None: + obj = parent.obj + #: the user object stored. + self.obj = obj + self._meta = getattr(parent, 'meta', {}) + + #: A dictionary (-like object) with defaults for parameters. + if default_map is None \ + and parent is not None \ + and parent.default_map is not None: + default_map = parent.default_map.get(info_name) + self.default_map = default_map + + #: This flag indicates if a subcommand is going to be executed. A + #: group callback can use this information to figure out if it's + #: being executed directly or because the execution flow passes + #: onwards to a subcommand. By default it's None, but it can be + #: the name of the subcommand to execute. + #: + #: If chaining is enabled this will be set to ``'*'`` in case + #: any commands are executed. It is however not possible to + #: figure out which ones. If you require this knowledge you + #: should use a :func:`resultcallback`. + self.invoked_subcommand = None + + if terminal_width is None and parent is not None: + terminal_width = parent.terminal_width + #: The width of the terminal (None is autodetection). + self.terminal_width = terminal_width + + if max_content_width is None and parent is not None: + max_content_width = parent.max_content_width + #: The maximum width of formatted content (None implies a sensible + #: default which is 80 for most things). + self.max_content_width = max_content_width + + if allow_extra_args is None: + allow_extra_args = command.allow_extra_args + #: Indicates if the context allows extra args or if it should + #: fail on parsing. + #: + #: .. versionadded:: 3.0 + self.allow_extra_args = allow_extra_args + + if allow_interspersed_args is None: + allow_interspersed_args = command.allow_interspersed_args + #: Indicates if the context allows mixing of arguments and + #: options or not. + #: + #: .. versionadded:: 3.0 + self.allow_interspersed_args = allow_interspersed_args + + if ignore_unknown_options is None: + ignore_unknown_options = command.ignore_unknown_options + #: Instructs click to ignore options that a command does not + #: understand and will store it on the context for later + #: processing. This is primarily useful for situations where you + #: want to call into external programs. Generally this pattern is + #: strongly discouraged because it's not possibly to losslessly + #: forward all arguments. + #: + #: .. versionadded:: 4.0 + self.ignore_unknown_options = ignore_unknown_options + + if help_option_names is None: + if parent is not None: + help_option_names = parent.help_option_names + else: + help_option_names = ['--help'] + + #: The names for the help options. + self.help_option_names = help_option_names + + if token_normalize_func is None and parent is not None: + token_normalize_func = parent.token_normalize_func + + #: An optional normalization function for tokens. This is + #: options, choices, commands etc. + self.token_normalize_func = token_normalize_func + + #: Indicates if resilient parsing is enabled. In that case Click + #: will do its best to not cause any failures and default values + #: will be ignored. Useful for completion. + self.resilient_parsing = resilient_parsing + + # If there is no envvar prefix yet, but the parent has one and + # the command on this level has a name, we can expand the envvar + # prefix automatically. + if auto_envvar_prefix is None: + if parent is not None \ + and parent.auto_envvar_prefix is not None and \ + self.info_name is not None: + auto_envvar_prefix = '%s_%s' % (parent.auto_envvar_prefix, + self.info_name.upper()) + else: + auto_envvar_prefix = auto_envvar_prefix.upper() + self.auto_envvar_prefix = auto_envvar_prefix + + if color is None and parent is not None: + color = parent.color + + #: Controls if styling output is wanted or not. + self.color = color + + self._close_callbacks = [] + self._depth = 0 + + def __enter__(self): + self._depth += 1 + push_context(self) + return self + + def __exit__(self, exc_type, exc_value, tb): + self._depth -= 1 + if self._depth == 0: + self.close() + pop_context() + + @contextmanager + def scope(self, cleanup=True): + """This helper method can be used with the context object to promote + it to the current thread local (see :func:`get_current_context`). + The default behavior of this is to invoke the cleanup functions which + can be disabled by setting `cleanup` to `False`. The cleanup + functions are typically used for things such as closing file handles. + + If the cleanup is intended the context object can also be directly + used as a context manager. + + Example usage:: + + with ctx.scope(): + assert get_current_context() is ctx + + This is equivalent:: + + with ctx: + assert get_current_context() is ctx + + .. versionadded:: 5.0 + + :param cleanup: controls if the cleanup functions should be run or + not. The default is to run these functions. In + some situations the context only wants to be + temporarily pushed in which case this can be disabled. + Nested pushes automatically defer the cleanup. + """ + if not cleanup: + self._depth += 1 + try: + with self as rv: + yield rv + finally: + if not cleanup: + self._depth -= 1 + + @property + def meta(self): + """This is a dictionary which is shared with all the contexts + that are nested. It exists so that click utilities can store some + state here if they need to. It is however the responsibility of + that code to manage this dictionary well. + + The keys are supposed to be unique dotted strings. For instance + module paths are a good choice for it. What is stored in there is + irrelevant for the operation of click. However what is important is + that code that places data here adheres to the general semantics of + the system. + + Example usage:: + + LANG_KEY = __name__ + '.lang' + + def set_language(value): + ctx = get_current_context() + ctx.meta[LANG_KEY] = value + + def get_language(): + return get_current_context().meta.get(LANG_KEY, 'en_US') + + .. versionadded:: 5.0 + """ + return self._meta + + def make_formatter(self): + """Creates the formatter for the help and usage output.""" + return HelpFormatter(width=self.terminal_width, + max_width=self.max_content_width) + + def call_on_close(self, f): + """This decorator remembers a function as callback that should be + executed when the context tears down. This is most useful to bind + resource handling to the script execution. For instance, file objects + opened by the :class:`File` type will register their close callbacks + here. + + :param f: the function to execute on teardown. + """ + self._close_callbacks.append(f) + return f + + def close(self): + """Invokes all close callbacks.""" + for cb in self._close_callbacks: + cb() + self._close_callbacks = [] + + @property + def command_path(self): + """The computed command path. This is used for the ``usage`` + information on the help page. It's automatically created by + combining the info names of the chain of contexts to the root. + """ + rv = '' + if self.info_name is not None: + rv = self.info_name + if self.parent is not None: + rv = self.parent.command_path + ' ' + rv + return rv.lstrip() + + def find_root(self): + """Finds the outermost context.""" + node = self + while node.parent is not None: + node = node.parent + return node + + def find_object(self, object_type): + """Finds the closest object of a given type.""" + node = self + while node is not None: + if isinstance(node.obj, object_type): + return node.obj + node = node.parent + + def ensure_object(self, object_type): + """Like :meth:`find_object` but sets the innermost object to a + new instance of `object_type` if it does not exist. + """ + rv = self.find_object(object_type) + if rv is None: + self.obj = rv = object_type() + return rv + + def lookup_default(self, name): + """Looks up the default for a parameter name. This by default + looks into the :attr:`default_map` if available. + """ + if self.default_map is not None: + rv = self.default_map.get(name) + if callable(rv): + rv = rv() + return rv + + def fail(self, message): + """Aborts the execution of the program with a specific error + message. + + :param message: the error message to fail with. + """ + raise UsageError(message, self) + + def abort(self): + """Aborts the script.""" + raise Abort() + + def exit(self, code=0): + """Exits the application with a given exit code.""" + raise Exit(code) + + def get_usage(self): + """Helper method to get formatted usage string for the current + context and command. + """ + return self.command.get_usage(self) + + def get_help(self): + """Helper method to get formatted help page for the current + context and command. + """ + return self.command.get_help(self) + + def invoke(*args, **kwargs): + """Invokes a command callback in exactly the way it expects. There + are two ways to invoke this method: + + 1. the first argument can be a callback and all other arguments and + keyword arguments are forwarded directly to the function. + 2. the first argument is a click command object. In that case all + arguments are forwarded as well but proper click parameters + (options and click arguments) must be keyword arguments and Click + will fill in defaults. + + Note that before Click 3.2 keyword arguments were not properly filled + in against the intention of this code and no context was created. For + more information about this change and why it was done in a bugfix + release see :ref:`upgrade-to-3.2`. + """ + self, callback = args[:2] + ctx = self + + # It's also possible to invoke another command which might or + # might not have a callback. In that case we also fill + # in defaults and make a new context for this command. + if isinstance(callback, Command): + other_cmd = callback + callback = other_cmd.callback + ctx = Context(other_cmd, info_name=other_cmd.name, parent=self) + if callback is None: + raise TypeError('The given command does not have a ' + 'callback that can be invoked.') + + for param in other_cmd.params: + if param.name not in kwargs and param.expose_value: + kwargs[param.name] = param.get_default(ctx) + + args = args[2:] + with augment_usage_errors(self): + with ctx: + return callback(*args, **kwargs) + + def forward(*args, **kwargs): + """Similar to :meth:`invoke` but fills in default keyword + arguments from the current context if the other command expects + it. This cannot invoke callbacks directly, only other commands. + """ + self, cmd = args[:2] + + # It's also possible to invoke another command which might or + # might not have a callback. + if not isinstance(cmd, Command): + raise TypeError('Callback is not a command.') + + for param in self.params: + if param not in kwargs: + kwargs[param] = self.params[param] + + return self.invoke(cmd, **kwargs) + + +class BaseCommand(object): + """The base command implements the minimal API contract of commands. + Most code will never use this as it does not implement a lot of useful + functionality but it can act as the direct subclass of alternative + parsing methods that do not depend on the Click parser. + + For instance, this can be used to bridge Click and other systems like + argparse or docopt. + + Because base commands do not implement a lot of the API that other + parts of Click take for granted, they are not supported for all + operations. For instance, they cannot be used with the decorators + usually and they have no built-in callback system. + + .. versionchanged:: 2.0 + Added the `context_settings` parameter. + + :param name: the name of the command to use unless a group overrides it. + :param context_settings: an optional dictionary with defaults that are + passed to the context object. + """ + #: the default for the :attr:`Context.allow_extra_args` flag. + allow_extra_args = False + #: the default for the :attr:`Context.allow_interspersed_args` flag. + allow_interspersed_args = True + #: the default for the :attr:`Context.ignore_unknown_options` flag. + ignore_unknown_options = False + + def __init__(self, name, context_settings=None): + #: the name the command thinks it has. Upon registering a command + #: on a :class:`Group` the group will default the command name + #: with this information. You should instead use the + #: :class:`Context`\'s :attr:`~Context.info_name` attribute. + self.name = name + if context_settings is None: + context_settings = {} + #: an optional dictionary with defaults passed to the context. + self.context_settings = context_settings + + def get_usage(self, ctx): + raise NotImplementedError('Base commands cannot get usage') + + def get_help(self, ctx): + raise NotImplementedError('Base commands cannot get help') + + def make_context(self, info_name, args, parent=None, **extra): + """This function when given an info name and arguments will kick + off the parsing and create a new :class:`Context`. It does not + invoke the actual command callback though. + + :param info_name: the info name for this invokation. Generally this + is the most descriptive name for the script or + command. For the toplevel script it's usually + the name of the script, for commands below it it's + the name of the script. + :param args: the arguments to parse as list of strings. + :param parent: the parent context if available. + :param extra: extra keyword arguments forwarded to the context + constructor. + """ + for key, value in iteritems(self.context_settings): + if key not in extra: + extra[key] = value + ctx = Context(self, info_name=info_name, parent=parent, **extra) + with ctx.scope(cleanup=False): + self.parse_args(ctx, args) + return ctx + + def parse_args(self, ctx, args): + """Given a context and a list of arguments this creates the parser + and parses the arguments, then modifies the context as necessary. + This is automatically invoked by :meth:`make_context`. + """ + raise NotImplementedError('Base commands do not know how to parse ' + 'arguments.') + + def invoke(self, ctx): + """Given a context, this invokes the command. The default + implementation is raising a not implemented error. + """ + raise NotImplementedError('Base commands are not invokable by default') + + def main(self, args=None, prog_name=None, complete_var=None, + standalone_mode=True, **extra): + """This is the way to invoke a script with all the bells and + whistles as a command line application. This will always terminate + the application after a call. If this is not wanted, ``SystemExit`` + needs to be caught. + + This method is also available by directly calling the instance of + a :class:`Command`. + + .. versionadded:: 3.0 + Added the `standalone_mode` flag to control the standalone mode. + + :param args: the arguments that should be used for parsing. If not + provided, ``sys.argv[1:]`` is used. + :param prog_name: the program name that should be used. By default + the program name is constructed by taking the file + name from ``sys.argv[0]``. + :param complete_var: the environment variable that controls the + bash completion support. The default is + ``"__COMPLETE"`` with prog_name in + uppercase. + :param standalone_mode: the default behavior is to invoke the script + in standalone mode. Click will then + handle exceptions and convert them into + error messages and the function will never + return but shut down the interpreter. If + this is set to `False` they will be + propagated to the caller and the return + value of this function is the return value + of :meth:`invoke`. + :param extra: extra keyword arguments are forwarded to the context + constructor. See :class:`Context` for more information. + """ + # If we are in Python 3, we will verify that the environment is + # sane at this point or reject further execution to avoid a + # broken script. + if not PY2: + _verify_python3_env() + else: + _check_for_unicode_literals() + + if args is None: + args = get_os_args() + else: + args = list(args) + + if prog_name is None: + prog_name = make_str(os.path.basename( + sys.argv and sys.argv[0] or __file__)) + + # Hook for the Bash completion. This only activates if the Bash + # completion is actually enabled, otherwise this is quite a fast + # noop. + _bashcomplete(self, prog_name, complete_var) + + try: + try: + with self.make_context(prog_name, args, **extra) as ctx: + rv = self.invoke(ctx) + if not standalone_mode: + return rv + # it's not safe to `ctx.exit(rv)` here! + # note that `rv` may actually contain data like "1" which + # has obvious effects + # more subtle case: `rv=[None, None]` can come out of + # chained commands which all returned `None` -- so it's not + # even always obvious that `rv` indicates success/failure + # by its truthiness/falsiness + ctx.exit() + except (EOFError, KeyboardInterrupt): + echo(file=sys.stderr) + raise Abort() + except ClickException as e: + if not standalone_mode: + raise + e.show() + sys.exit(e.exit_code) + except IOError as e: + if e.errno == errno.EPIPE: + sys.stdout = PacifyFlushWrapper(sys.stdout) + sys.stderr = PacifyFlushWrapper(sys.stderr) + sys.exit(1) + else: + raise + except Exit as e: + if standalone_mode: + sys.exit(e.exit_code) + else: + # in non-standalone mode, return the exit code + # note that this is only reached if `self.invoke` above raises + # an Exit explicitly -- thus bypassing the check there which + # would return its result + # the results of non-standalone execution may therefore be + # somewhat ambiguous: if there are codepaths which lead to + # `ctx.exit(1)` and to `return 1`, the caller won't be able to + # tell the difference between the two + return e.exit_code + except Abort: + if not standalone_mode: + raise + echo('Aborted!', file=sys.stderr) + sys.exit(1) + + def __call__(self, *args, **kwargs): + """Alias for :meth:`main`.""" + return self.main(*args, **kwargs) + + +class Command(BaseCommand): + """Commands are the basic building block of command line interfaces in + Click. A basic command handles command line parsing and might dispatch + more parsing to commands nested below it. + + .. versionchanged:: 2.0 + Added the `context_settings` parameter. + + :param name: the name of the command to use unless a group overrides it. + :param context_settings: an optional dictionary with defaults that are + passed to the context object. + :param callback: the callback to invoke. This is optional. + :param params: the parameters to register with this command. This can + be either :class:`Option` or :class:`Argument` objects. + :param help: the help string to use for this command. + :param epilog: like the help string but it's printed at the end of the + help page after everything else. + :param short_help: the short help to use for this command. This is + shown on the command listing of the parent command. + :param add_help_option: by default each command registers a ``--help`` + option. This can be disabled by this parameter. + :param hidden: hide this command from help outputs. + + :param deprecated: issues a message indicating that + the command is deprecated. + """ + + def __init__(self, name, context_settings=None, callback=None, + params=None, help=None, epilog=None, short_help=None, + options_metavar='[OPTIONS]', add_help_option=True, + hidden=False, deprecated=False): + BaseCommand.__init__(self, name, context_settings) + #: the callback to execute when the command fires. This might be + #: `None` in which case nothing happens. + self.callback = callback + #: the list of parameters for this command in the order they + #: should show up in the help page and execute. Eager parameters + #: will automatically be handled before non eager ones. + self.params = params or [] + # if a form feed (page break) is found in the help text, truncate help + # text to the content preceding the first form feed + if help and '\f' in help: + help = help.split('\f', 1)[0] + self.help = help + self.epilog = epilog + self.options_metavar = options_metavar + self.short_help = short_help + self.add_help_option = add_help_option + self.hidden = hidden + self.deprecated = deprecated + + def get_usage(self, ctx): + formatter = ctx.make_formatter() + self.format_usage(ctx, formatter) + return formatter.getvalue().rstrip('\n') + + def get_params(self, ctx): + rv = self.params + help_option = self.get_help_option(ctx) + if help_option is not None: + rv = rv + [help_option] + return rv + + def format_usage(self, ctx, formatter): + """Writes the usage line into the formatter.""" + pieces = self.collect_usage_pieces(ctx) + formatter.write_usage(ctx.command_path, ' '.join(pieces)) + + def collect_usage_pieces(self, ctx): + """Returns all the pieces that go into the usage line and returns + it as a list of strings. + """ + rv = [self.options_metavar] + for param in self.get_params(ctx): + rv.extend(param.get_usage_pieces(ctx)) + return rv + + def get_help_option_names(self, ctx): + """Returns the names for the help option.""" + all_names = set(ctx.help_option_names) + for param in self.params: + all_names.difference_update(param.opts) + all_names.difference_update(param.secondary_opts) + return all_names + + def get_help_option(self, ctx): + """Returns the help option object.""" + help_options = self.get_help_option_names(ctx) + if not help_options or not self.add_help_option: + return + + def show_help(ctx, param, value): + if value and not ctx.resilient_parsing: + echo(ctx.get_help(), color=ctx.color) + ctx.exit() + return Option(help_options, is_flag=True, + is_eager=True, expose_value=False, + callback=show_help, + help='Show this message and exit.') + + def make_parser(self, ctx): + """Creates the underlying option parser for this command.""" + parser = OptionParser(ctx) + for param in self.get_params(ctx): + param.add_to_parser(parser, ctx) + return parser + + def get_help(self, ctx): + """Formats the help into a string and returns it. This creates a + formatter and will call into the following formatting methods: + """ + formatter = ctx.make_formatter() + self.format_help(ctx, formatter) + return formatter.getvalue().rstrip('\n') + + def get_short_help_str(self, limit=45): + """Gets short help for the command or makes it by shortening the long help string.""" + return self.short_help or self.help and make_default_short_help(self.help, limit) or '' + + def format_help(self, ctx, formatter): + """Writes the help into the formatter if it exists. + + This calls into the following methods: + + - :meth:`format_usage` + - :meth:`format_help_text` + - :meth:`format_options` + - :meth:`format_epilog` + """ + self.format_usage(ctx, formatter) + self.format_help_text(ctx, formatter) + self.format_options(ctx, formatter) + self.format_epilog(ctx, formatter) + + def format_help_text(self, ctx, formatter): + """Writes the help text to the formatter if it exists.""" + if self.help: + formatter.write_paragraph() + with formatter.indentation(): + help_text = self.help + if self.deprecated: + help_text += DEPRECATED_HELP_NOTICE + formatter.write_text(help_text) + elif self.deprecated: + formatter.write_paragraph() + with formatter.indentation(): + formatter.write_text(DEPRECATED_HELP_NOTICE) + + def format_options(self, ctx, formatter): + """Writes all the options into the formatter if they exist.""" + opts = [] + for param in self.get_params(ctx): + rv = param.get_help_record(ctx) + if rv is not None: + opts.append(rv) + + if opts: + with formatter.section('Options'): + formatter.write_dl(opts) + + def format_epilog(self, ctx, formatter): + """Writes the epilog into the formatter if it exists.""" + if self.epilog: + formatter.write_paragraph() + with formatter.indentation(): + formatter.write_text(self.epilog) + + def parse_args(self, ctx, args): + parser = self.make_parser(ctx) + opts, args, param_order = parser.parse_args(args=args) + + for param in iter_params_for_processing( + param_order, self.get_params(ctx)): + value, args = param.handle_parse_result(ctx, opts, args) + + if args and not ctx.allow_extra_args and not ctx.resilient_parsing: + ctx.fail('Got unexpected extra argument%s (%s)' + % (len(args) != 1 and 's' or '', + ' '.join(map(make_str, args)))) + + ctx.args = args + return args + + def invoke(self, ctx): + """Given a context, this invokes the attached callback (if it exists) + in the right way. + """ + _maybe_show_deprecated_notice(self) + if self.callback is not None: + return ctx.invoke(self.callback, **ctx.params) + + +class MultiCommand(Command): + """A multi command is the basic implementation of a command that + dispatches to subcommands. The most common version is the + :class:`Group`. + + :param invoke_without_command: this controls how the multi command itself + is invoked. By default it's only invoked + if a subcommand is provided. + :param no_args_is_help: this controls what happens if no arguments are + provided. This option is enabled by default if + `invoke_without_command` is disabled or disabled + if it's enabled. If enabled this will add + ``--help`` as argument if no arguments are + passed. + :param subcommand_metavar: the string that is used in the documentation + to indicate the subcommand place. + :param chain: if this is set to `True` chaining of multiple subcommands + is enabled. This restricts the form of commands in that + they cannot have optional arguments but it allows + multiple commands to be chained together. + :param result_callback: the result callback to attach to this multi + command. + """ + allow_extra_args = True + allow_interspersed_args = False + + def __init__(self, name=None, invoke_without_command=False, + no_args_is_help=None, subcommand_metavar=None, + chain=False, result_callback=None, **attrs): + Command.__init__(self, name, **attrs) + if no_args_is_help is None: + no_args_is_help = not invoke_without_command + self.no_args_is_help = no_args_is_help + self.invoke_without_command = invoke_without_command + if subcommand_metavar is None: + if chain: + subcommand_metavar = SUBCOMMANDS_METAVAR + else: + subcommand_metavar = SUBCOMMAND_METAVAR + self.subcommand_metavar = subcommand_metavar + self.chain = chain + #: The result callback that is stored. This can be set or + #: overridden with the :func:`resultcallback` decorator. + self.result_callback = result_callback + + if self.chain: + for param in self.params: + if isinstance(param, Argument) and not param.required: + raise RuntimeError('Multi commands in chain mode cannot ' + 'have optional arguments.') + + def collect_usage_pieces(self, ctx): + rv = Command.collect_usage_pieces(self, ctx) + rv.append(self.subcommand_metavar) + return rv + + def format_options(self, ctx, formatter): + Command.format_options(self, ctx, formatter) + self.format_commands(ctx, formatter) + + def resultcallback(self, replace=False): + """Adds a result callback to the chain command. By default if a + result callback is already registered this will chain them but + this can be disabled with the `replace` parameter. The result + callback is invoked with the return value of the subcommand + (or the list of return values from all subcommands if chaining + is enabled) as well as the parameters as they would be passed + to the main callback. + + Example:: + + @click.group() + @click.option('-i', '--input', default=23) + def cli(input): + return 42 + + @cli.resultcallback() + def process_result(result, input): + return result + input + + .. versionadded:: 3.0 + + :param replace: if set to `True` an already existing result + callback will be removed. + """ + def decorator(f): + old_callback = self.result_callback + if old_callback is None or replace: + self.result_callback = f + return f + def function(__value, *args, **kwargs): + return f(old_callback(__value, *args, **kwargs), + *args, **kwargs) + self.result_callback = rv = update_wrapper(function, f) + return rv + return decorator + + def format_commands(self, ctx, formatter): + """Extra format methods for multi methods that adds all the commands + after the options. + """ + commands = [] + for subcommand in self.list_commands(ctx): + cmd = self.get_command(ctx, subcommand) + # What is this, the tool lied about a command. Ignore it + if cmd is None: + continue + if cmd.hidden: + continue + + commands.append((subcommand, cmd)) + + # allow for 3 times the default spacing + if len(commands): + limit = formatter.width - 6 - max(len(cmd[0]) for cmd in commands) + + rows = [] + for subcommand, cmd in commands: + help = cmd.get_short_help_str(limit) + rows.append((subcommand, help)) + + if rows: + with formatter.section('Commands'): + formatter.write_dl(rows) + + def parse_args(self, ctx, args): + if not args and self.no_args_is_help and not ctx.resilient_parsing: + echo(ctx.get_help(), color=ctx.color) + ctx.exit() + + rest = Command.parse_args(self, ctx, args) + if self.chain: + ctx.protected_args = rest + ctx.args = [] + elif rest: + ctx.protected_args, ctx.args = rest[:1], rest[1:] + + return ctx.args + + def invoke(self, ctx): + def _process_result(value): + if self.result_callback is not None: + value = ctx.invoke(self.result_callback, value, + **ctx.params) + return value + + if not ctx.protected_args: + # If we are invoked without command the chain flag controls + # how this happens. If we are not in chain mode, the return + # value here is the return value of the command. + # If however we are in chain mode, the return value is the + # return value of the result processor invoked with an empty + # list (which means that no subcommand actually was executed). + if self.invoke_without_command: + if not self.chain: + return Command.invoke(self, ctx) + with ctx: + Command.invoke(self, ctx) + return _process_result([]) + ctx.fail('Missing command.') + + # Fetch args back out + args = ctx.protected_args + ctx.args + ctx.args = [] + ctx.protected_args = [] + + # If we're not in chain mode, we only allow the invocation of a + # single command but we also inform the current context about the + # name of the command to invoke. + if not self.chain: + # Make sure the context is entered so we do not clean up + # resources until the result processor has worked. + with ctx: + cmd_name, cmd, args = self.resolve_command(ctx, args) + ctx.invoked_subcommand = cmd_name + Command.invoke(self, ctx) + sub_ctx = cmd.make_context(cmd_name, args, parent=ctx) + with sub_ctx: + return _process_result(sub_ctx.command.invoke(sub_ctx)) + + # In chain mode we create the contexts step by step, but after the + # base command has been invoked. Because at that point we do not + # know the subcommands yet, the invoked subcommand attribute is + # set to ``*`` to inform the command that subcommands are executed + # but nothing else. + with ctx: + ctx.invoked_subcommand = args and '*' or None + Command.invoke(self, ctx) + + # Otherwise we make every single context and invoke them in a + # chain. In that case the return value to the result processor + # is the list of all invoked subcommand's results. + contexts = [] + while args: + cmd_name, cmd, args = self.resolve_command(ctx, args) + sub_ctx = cmd.make_context(cmd_name, args, parent=ctx, + allow_extra_args=True, + allow_interspersed_args=False) + contexts.append(sub_ctx) + args, sub_ctx.args = sub_ctx.args, [] + + rv = [] + for sub_ctx in contexts: + with sub_ctx: + rv.append(sub_ctx.command.invoke(sub_ctx)) + return _process_result(rv) + + def resolve_command(self, ctx, args): + cmd_name = make_str(args[0]) + original_cmd_name = cmd_name + + # Get the command + cmd = self.get_command(ctx, cmd_name) + + # If we can't find the command but there is a normalization + # function available, we try with that one. + if cmd is None and ctx.token_normalize_func is not None: + cmd_name = ctx.token_normalize_func(cmd_name) + cmd = self.get_command(ctx, cmd_name) + + # If we don't find the command we want to show an error message + # to the user that it was not provided. However, there is + # something else we should do: if the first argument looks like + # an option we want to kick off parsing again for arguments to + # resolve things like --help which now should go to the main + # place. + if cmd is None and not ctx.resilient_parsing: + if split_opt(cmd_name)[0]: + self.parse_args(ctx, ctx.args) + ctx.fail('No such command "%s".' % original_cmd_name) + + return cmd_name, cmd, args[1:] + + def get_command(self, ctx, cmd_name): + """Given a context and a command name, this returns a + :class:`Command` object if it exists or returns `None`. + """ + raise NotImplementedError() + + def list_commands(self, ctx): + """Returns a list of subcommand names in the order they should + appear. + """ + return [] + + +class Group(MultiCommand): + """A group allows a command to have subcommands attached. This is the + most common way to implement nesting in Click. + + :param commands: a dictionary of commands. + """ + + def __init__(self, name=None, commands=None, **attrs): + MultiCommand.__init__(self, name, **attrs) + #: the registered subcommands by their exported names. + self.commands = commands or {} + + def add_command(self, cmd, name=None): + """Registers another :class:`Command` with this group. If the name + is not provided, the name of the command is used. + """ + name = name or cmd.name + if name is None: + raise TypeError('Command has no name.') + _check_multicommand(self, name, cmd, register=True) + self.commands[name] = cmd + + def command(self, *args, **kwargs): + """A shortcut decorator for declaring and attaching a command to + the group. This takes the same arguments as :func:`command` but + immediately registers the created command with this instance by + calling into :meth:`add_command`. + """ + def decorator(f): + cmd = command(*args, **kwargs)(f) + self.add_command(cmd) + return cmd + return decorator + + def group(self, *args, **kwargs): + """A shortcut decorator for declaring and attaching a group to + the group. This takes the same arguments as :func:`group` but + immediately registers the created command with this instance by + calling into :meth:`add_command`. + """ + def decorator(f): + cmd = group(*args, **kwargs)(f) + self.add_command(cmd) + return cmd + return decorator + + def get_command(self, ctx, cmd_name): + return self.commands.get(cmd_name) + + def list_commands(self, ctx): + return sorted(self.commands) + + +class CommandCollection(MultiCommand): + """A command collection is a multi command that merges multiple multi + commands together into one. This is a straightforward implementation + that accepts a list of different multi commands as sources and + provides all the commands for each of them. + """ + + def __init__(self, name=None, sources=None, **attrs): + MultiCommand.__init__(self, name, **attrs) + #: The list of registered multi commands. + self.sources = sources or [] + + def add_source(self, multi_cmd): + """Adds a new multi command to the chain dispatcher.""" + self.sources.append(multi_cmd) + + def get_command(self, ctx, cmd_name): + for source in self.sources: + rv = source.get_command(ctx, cmd_name) + if rv is not None: + if self.chain: + _check_multicommand(self, cmd_name, rv) + return rv + + def list_commands(self, ctx): + rv = set() + for source in self.sources: + rv.update(source.list_commands(ctx)) + return sorted(rv) + + +class Parameter(object): + r"""A parameter to a command comes in two versions: they are either + :class:`Option`\s or :class:`Argument`\s. Other subclasses are currently + not supported by design as some of the internals for parsing are + intentionally not finalized. + + Some settings are supported by both options and arguments. + + .. versionchanged:: 2.0 + Changed signature for parameter callback to also be passed the + parameter. In Click 2.0, the old callback format will still work, + but it will raise a warning to give you change to migrate the + code easier. + + :param param_decls: the parameter declarations for this option or + argument. This is a list of flags or argument + names. + :param type: the type that should be used. Either a :class:`ParamType` + or a Python type. The later is converted into the former + automatically if supported. + :param required: controls if this is optional or not. + :param default: the default value if omitted. This can also be a callable, + in which case it's invoked when the default is needed + without any arguments. + :param callback: a callback that should be executed after the parameter + was matched. This is called as ``fn(ctx, param, + value)`` and needs to return the value. Before Click + 2.0, the signature was ``(ctx, value)``. + :param nargs: the number of arguments to match. If not ``1`` the return + value is a tuple instead of single value. The default for + nargs is ``1`` (except if the type is a tuple, then it's + the arity of the tuple). + :param metavar: how the value is represented in the help page. + :param expose_value: if this is `True` then the value is passed onwards + to the command callback and stored on the context, + otherwise it's skipped. + :param is_eager: eager values are processed before non eager ones. This + should not be set for arguments or it will inverse the + order of processing. + :param envvar: a string or list of strings that are environment variables + that should be checked. + """ + param_type_name = 'parameter' + + def __init__(self, param_decls=None, type=None, required=False, + default=None, callback=None, nargs=None, metavar=None, + expose_value=True, is_eager=False, envvar=None, + autocompletion=None): + self.name, self.opts, self.secondary_opts = \ + self._parse_decls(param_decls or (), expose_value) + + self.type = convert_type(type, default) + + # Default nargs to what the type tells us if we have that + # information available. + if nargs is None: + if self.type.is_composite: + nargs = self.type.arity + else: + nargs = 1 + + self.required = required + self.callback = callback + self.nargs = nargs + self.multiple = False + self.expose_value = expose_value + self.default = default + self.is_eager = is_eager + self.metavar = metavar + self.envvar = envvar + self.autocompletion = autocompletion + + @property + def human_readable_name(self): + """Returns the human readable name of this parameter. This is the + same as the name for options, but the metavar for arguments. + """ + return self.name + + def make_metavar(self): + if self.metavar is not None: + return self.metavar + metavar = self.type.get_metavar(self) + if metavar is None: + metavar = self.type.name.upper() + if self.nargs != 1: + metavar += '...' + return metavar + + def get_default(self, ctx): + """Given a context variable this calculates the default value.""" + # Otherwise go with the regular default. + if callable(self.default): + rv = self.default() + else: + rv = self.default + return self.type_cast_value(ctx, rv) + + def add_to_parser(self, parser, ctx): + pass + + def consume_value(self, ctx, opts): + value = opts.get(self.name) + if value is None: + value = self.value_from_envvar(ctx) + if value is None: + value = ctx.lookup_default(self.name) + return value + + def type_cast_value(self, ctx, value): + """Given a value this runs it properly through the type system. + This automatically handles things like `nargs` and `multiple` as + well as composite types. + """ + if self.type.is_composite: + if self.nargs <= 1: + raise TypeError('Attempted to invoke composite type ' + 'but nargs has been set to %s. This is ' + 'not supported; nargs needs to be set to ' + 'a fixed value > 1.' % self.nargs) + if self.multiple: + return tuple(self.type(x or (), self, ctx) for x in value or ()) + return self.type(value or (), self, ctx) + + def _convert(value, level): + if level == 0: + return self.type(value, self, ctx) + return tuple(_convert(x, level - 1) for x in value or ()) + return _convert(value, (self.nargs != 1) + bool(self.multiple)) + + def process_value(self, ctx, value): + """Given a value and context this runs the logic to convert the + value as necessary. + """ + # If the value we were given is None we do nothing. This way + # code that calls this can easily figure out if something was + # not provided. Otherwise it would be converted into an empty + # tuple for multiple invocations which is inconvenient. + if value is not None: + return self.type_cast_value(ctx, value) + + def value_is_missing(self, value): + if value is None: + return True + if (self.nargs != 1 or self.multiple) and value == (): + return True + return False + + def full_process_value(self, ctx, value): + value = self.process_value(ctx, value) + + if value is None and not ctx.resilient_parsing: + value = self.get_default(ctx) + + if self.required and self.value_is_missing(value): + raise MissingParameter(ctx=ctx, param=self) + + return value + + def resolve_envvar_value(self, ctx): + if self.envvar is None: + return + if isinstance(self.envvar, (tuple, list)): + for envvar in self.envvar: + rv = os.environ.get(envvar) + if rv is not None: + return rv + else: + return os.environ.get(self.envvar) + + def value_from_envvar(self, ctx): + rv = self.resolve_envvar_value(ctx) + if rv is not None and self.nargs != 1: + rv = self.type.split_envvar_value(rv) + return rv + + def handle_parse_result(self, ctx, opts, args): + with augment_usage_errors(ctx, param=self): + value = self.consume_value(ctx, opts) + try: + value = self.full_process_value(ctx, value) + except Exception: + if not ctx.resilient_parsing: + raise + value = None + if self.callback is not None: + try: + value = invoke_param_callback( + self.callback, ctx, self, value) + except Exception: + if not ctx.resilient_parsing: + raise + + if self.expose_value: + ctx.params[self.name] = value + return value, args + + def get_help_record(self, ctx): + pass + + def get_usage_pieces(self, ctx): + return [] + + def get_error_hint(self, ctx): + """Get a stringified version of the param for use in error messages to + indicate which param caused the error. + """ + hint_list = self.opts or [self.human_readable_name] + return ' / '.join('"%s"' % x for x in hint_list) + + +class Option(Parameter): + """Options are usually optional values on the command line and + have some extra features that arguments don't have. + + All other parameters are passed onwards to the parameter constructor. + + :param show_default: controls if the default value should be shown on the + help page. Normally, defaults are not shown. If this + value is a string, it shows the string instead of the + value. This is particularly useful for dynamic options. + :param show_envvar: controls if an environment variable should be shown on + the help page. Normally, environment variables + are not shown. + :param prompt: if set to `True` or a non empty string then the user will be + prompted for input. If set to `True` the prompt will be the + option name capitalized. + :param confirmation_prompt: if set then the value will need to be confirmed + if it was prompted for. + :param hide_input: if this is `True` then the input on the prompt will be + hidden from the user. This is useful for password + input. + :param is_flag: forces this option to act as a flag. The default is + auto detection. + :param flag_value: which value should be used for this flag if it's + enabled. This is set to a boolean automatically if + the option string contains a slash to mark two options. + :param multiple: if this is set to `True` then the argument is accepted + multiple times and recorded. This is similar to ``nargs`` + in how it works but supports arbitrary number of + arguments. + :param count: this flag makes an option increment an integer. + :param allow_from_autoenv: if this is enabled then the value of this + parameter will be pulled from an environment + variable in case a prefix is defined on the + context. + :param help: the help string. + :param hidden: hide this option from help outputs. + """ + param_type_name = 'option' + + def __init__(self, param_decls=None, show_default=False, + prompt=False, confirmation_prompt=False, + hide_input=False, is_flag=None, flag_value=None, + multiple=False, count=False, allow_from_autoenv=True, + type=None, help=None, hidden=False, show_choices=True, + show_envvar=False, **attrs): + default_is_missing = attrs.get('default', _missing) is _missing + Parameter.__init__(self, param_decls, type=type, **attrs) + + if prompt is True: + prompt_text = self.name.replace('_', ' ').capitalize() + elif prompt is False: + prompt_text = None + else: + prompt_text = prompt + self.prompt = prompt_text + self.confirmation_prompt = confirmation_prompt + self.hide_input = hide_input + self.hidden = hidden + + # Flags + if is_flag is None: + if flag_value is not None: + is_flag = True + else: + is_flag = bool(self.secondary_opts) + if is_flag and default_is_missing: + self.default = False + if flag_value is None: + flag_value = not self.default + self.is_flag = is_flag + self.flag_value = flag_value + if self.is_flag and isinstance(self.flag_value, bool) \ + and type is None: + self.type = BOOL + self.is_bool_flag = True + else: + self.is_bool_flag = False + + # Counting + self.count = count + if count: + if type is None: + self.type = IntRange(min=0) + if default_is_missing: + self.default = 0 + + self.multiple = multiple + self.allow_from_autoenv = allow_from_autoenv + self.help = help + self.show_default = show_default + self.show_choices = show_choices + self.show_envvar = show_envvar + + # Sanity check for stuff we don't support + if __debug__: + if self.nargs < 0: + raise TypeError('Options cannot have nargs < 0') + if self.prompt and self.is_flag and not self.is_bool_flag: + raise TypeError('Cannot prompt for flags that are not bools.') + if not self.is_bool_flag and self.secondary_opts: + raise TypeError('Got secondary option for non boolean flag.') + if self.is_bool_flag and self.hide_input \ + and self.prompt is not None: + raise TypeError('Hidden input does not work with boolean ' + 'flag prompts.') + if self.count: + if self.multiple: + raise TypeError('Options cannot be multiple and count ' + 'at the same time.') + elif self.is_flag: + raise TypeError('Options cannot be count and flags at ' + 'the same time.') + + def _parse_decls(self, decls, expose_value): + opts = [] + secondary_opts = [] + name = None + possible_names = [] + + for decl in decls: + if isidentifier(decl): + if name is not None: + raise TypeError('Name defined twice') + name = decl + else: + split_char = decl[:1] == '/' and ';' or '/' + if split_char in decl: + first, second = decl.split(split_char, 1) + first = first.rstrip() + if first: + possible_names.append(split_opt(first)) + opts.append(first) + second = second.lstrip() + if second: + secondary_opts.append(second.lstrip()) + else: + possible_names.append(split_opt(decl)) + opts.append(decl) + + if name is None and possible_names: + possible_names.sort(key=lambda x: -len(x[0])) # group long options first + name = possible_names[0][1].replace('-', '_').lower() + if not isidentifier(name): + name = None + + if name is None: + if not expose_value: + return None, opts, secondary_opts + raise TypeError('Could not determine name for option') + + if not opts and not secondary_opts: + raise TypeError('No options defined but a name was passed (%s). ' + 'Did you mean to declare an argument instead ' + 'of an option?' % name) + + return name, opts, secondary_opts + + def add_to_parser(self, parser, ctx): + kwargs = { + 'dest': self.name, + 'nargs': self.nargs, + 'obj': self, + } + + if self.multiple: + action = 'append' + elif self.count: + action = 'count' + else: + action = 'store' + + if self.is_flag: + kwargs.pop('nargs', None) + if self.is_bool_flag and self.secondary_opts: + parser.add_option(self.opts, action=action + '_const', + const=True, **kwargs) + parser.add_option(self.secondary_opts, action=action + + '_const', const=False, **kwargs) + else: + parser.add_option(self.opts, action=action + '_const', + const=self.flag_value, + **kwargs) + else: + kwargs['action'] = action + parser.add_option(self.opts, **kwargs) + + def get_help_record(self, ctx): + if self.hidden: + return + any_prefix_is_slash = [] + + def _write_opts(opts): + rv, any_slashes = join_options(opts) + if any_slashes: + any_prefix_is_slash[:] = [True] + if not self.is_flag and not self.count: + rv += ' ' + self.make_metavar() + return rv + + rv = [_write_opts(self.opts)] + if self.secondary_opts: + rv.append(_write_opts(self.secondary_opts)) + + help = self.help or '' + extra = [] + if self.show_envvar: + envvar = self.envvar + if envvar is None: + if self.allow_from_autoenv and \ + ctx.auto_envvar_prefix is not None: + envvar = '%s_%s' % (ctx.auto_envvar_prefix, self.name.upper()) + if envvar is not None: + extra.append('env var: %s' % ( + ', '.join('%s' % d for d in envvar) + if isinstance(envvar, (list, tuple)) + else envvar, )) + if self.default is not None and self.show_default: + if isinstance(self.show_default, string_types): + default_string = '({})'.format(self.show_default) + elif isinstance(self.default, (list, tuple)): + default_string = ', '.join('%s' % d for d in self.default) + elif inspect.isfunction(self.default): + default_string = "(dynamic)" + else: + default_string = self.default + extra.append('default: {}'.format(default_string)) + + if self.required: + extra.append('required') + if extra: + help = '%s[%s]' % (help and help + ' ' or '', '; '.join(extra)) + + return ((any_prefix_is_slash and '; ' or ' / ').join(rv), help) + + def get_default(self, ctx): + # If we're a non boolean flag out default is more complex because + # we need to look at all flags in the same group to figure out + # if we're the the default one in which case we return the flag + # value as default. + if self.is_flag and not self.is_bool_flag: + for param in ctx.command.params: + if param.name == self.name and param.default: + return param.flag_value + return None + return Parameter.get_default(self, ctx) + + def prompt_for_value(self, ctx): + """This is an alternative flow that can be activated in the full + value processing if a value does not exist. It will prompt the + user until a valid value exists and then returns the processed + value as result. + """ + # Calculate the default before prompting anything to be stable. + default = self.get_default(ctx) + + # If this is a prompt for a flag we need to handle this + # differently. + if self.is_bool_flag: + return confirm(self.prompt, default) + + return prompt(self.prompt, default=default, type=self.type, + hide_input=self.hide_input, show_choices=self.show_choices, + confirmation_prompt=self.confirmation_prompt, + value_proc=lambda x: self.process_value(ctx, x)) + + def resolve_envvar_value(self, ctx): + rv = Parameter.resolve_envvar_value(self, ctx) + if rv is not None: + return rv + if self.allow_from_autoenv and \ + ctx.auto_envvar_prefix is not None: + envvar = '%s_%s' % (ctx.auto_envvar_prefix, self.name.upper()) + return os.environ.get(envvar) + + def value_from_envvar(self, ctx): + rv = self.resolve_envvar_value(ctx) + if rv is None: + return None + value_depth = (self.nargs != 1) + bool(self.multiple) + if value_depth > 0 and rv is not None: + rv = self.type.split_envvar_value(rv) + if self.multiple and self.nargs != 1: + rv = batch(rv, self.nargs) + return rv + + def full_process_value(self, ctx, value): + if value is None and self.prompt is not None \ + and not ctx.resilient_parsing: + return self.prompt_for_value(ctx) + return Parameter.full_process_value(self, ctx, value) + + +class Argument(Parameter): + """Arguments are positional parameters to a command. They generally + provide fewer features than options but can have infinite ``nargs`` + and are required by default. + + All parameters are passed onwards to the parameter constructor. + """ + param_type_name = 'argument' + + def __init__(self, param_decls, required=None, **attrs): + if required is None: + if attrs.get('default') is not None: + required = False + else: + required = attrs.get('nargs', 1) > 0 + Parameter.__init__(self, param_decls, required=required, **attrs) + if self.default is not None and self.nargs < 0: + raise TypeError('nargs=-1 in combination with a default value ' + 'is not supported.') + + @property + def human_readable_name(self): + if self.metavar is not None: + return self.metavar + return self.name.upper() + + def make_metavar(self): + if self.metavar is not None: + return self.metavar + var = self.type.get_metavar(self) + if not var: + var = self.name.upper() + if not self.required: + var = '[%s]' % var + if self.nargs != 1: + var += '...' + return var + + def _parse_decls(self, decls, expose_value): + if not decls: + if not expose_value: + return None, [], [] + raise TypeError('Could not determine name for argument') + if len(decls) == 1: + name = arg = decls[0] + name = name.replace('-', '_').lower() + else: + raise TypeError('Arguments take exactly one ' + 'parameter declaration, got %d' % len(decls)) + return name, [arg], [] + + def get_usage_pieces(self, ctx): + return [self.make_metavar()] + + def get_error_hint(self, ctx): + return '"%s"' % self.make_metavar() + + def add_to_parser(self, parser, ctx): + parser.add_argument(dest=self.name, nargs=self.nargs, + obj=self) + + +# Circular dependency between decorators and core +from .decorators import command, group diff --git a/week-0/day-3/my_todo_app/venv/lib/python3.6/site-packages/click/decorators.py b/week-0/day-3/my_todo_app/venv/lib/python3.6/site-packages/click/decorators.py new file mode 100644 index 00000000..c57c5308 --- /dev/null +++ b/week-0/day-3/my_todo_app/venv/lib/python3.6/site-packages/click/decorators.py @@ -0,0 +1,311 @@ +import sys +import inspect + +from functools import update_wrapper + +from ._compat import iteritems +from ._unicodefun import _check_for_unicode_literals +from .utils import echo +from .globals import get_current_context + + +def pass_context(f): + """Marks a callback as wanting to receive the current context + object as first argument. + """ + def new_func(*args, **kwargs): + return f(get_current_context(), *args, **kwargs) + return update_wrapper(new_func, f) + + +def pass_obj(f): + """Similar to :func:`pass_context`, but only pass the object on the + context onwards (:attr:`Context.obj`). This is useful if that object + represents the state of a nested system. + """ + def new_func(*args, **kwargs): + return f(get_current_context().obj, *args, **kwargs) + return update_wrapper(new_func, f) + + +def make_pass_decorator(object_type, ensure=False): + """Given an object type this creates a decorator that will work + similar to :func:`pass_obj` but instead of passing the object of the + current context, it will find the innermost context of type + :func:`object_type`. + + This generates a decorator that works roughly like this:: + + from functools import update_wrapper + + def decorator(f): + @pass_context + def new_func(ctx, *args, **kwargs): + obj = ctx.find_object(object_type) + return ctx.invoke(f, obj, *args, **kwargs) + return update_wrapper(new_func, f) + return decorator + + :param object_type: the type of the object to pass. + :param ensure: if set to `True`, a new object will be created and + remembered on the context if it's not there yet. + """ + def decorator(f): + def new_func(*args, **kwargs): + ctx = get_current_context() + if ensure: + obj = ctx.ensure_object(object_type) + else: + obj = ctx.find_object(object_type) + if obj is None: + raise RuntimeError('Managed to invoke callback without a ' + 'context object of type %r existing' + % object_type.__name__) + return ctx.invoke(f, obj, *args, **kwargs) + return update_wrapper(new_func, f) + return decorator + + +def _make_command(f, name, attrs, cls): + if isinstance(f, Command): + raise TypeError('Attempted to convert a callback into a ' + 'command twice.') + try: + params = f.__click_params__ + params.reverse() + del f.__click_params__ + except AttributeError: + params = [] + help = attrs.get('help') + if help is None: + help = inspect.getdoc(f) + if isinstance(help, bytes): + help = help.decode('utf-8') + else: + help = inspect.cleandoc(help) + attrs['help'] = help + _check_for_unicode_literals() + return cls(name=name or f.__name__.lower().replace('_', '-'), + callback=f, params=params, **attrs) + + +def command(name=None, cls=None, **attrs): + r"""Creates a new :class:`Command` and uses the decorated function as + callback. This will also automatically attach all decorated + :func:`option`\s and :func:`argument`\s as parameters to the command. + + The name of the command defaults to the name of the function. If you + want to change that, you can pass the intended name as the first + argument. + + All keyword arguments are forwarded to the underlying command class. + + Once decorated the function turns into a :class:`Command` instance + that can be invoked as a command line utility or be attached to a + command :class:`Group`. + + :param name: the name of the command. This defaults to the function + name with underscores replaced by dashes. + :param cls: the command class to instantiate. This defaults to + :class:`Command`. + """ + if cls is None: + cls = Command + def decorator(f): + cmd = _make_command(f, name, attrs, cls) + cmd.__doc__ = f.__doc__ + return cmd + return decorator + + +def group(name=None, **attrs): + """Creates a new :class:`Group` with a function as callback. This + works otherwise the same as :func:`command` just that the `cls` + parameter is set to :class:`Group`. + """ + attrs.setdefault('cls', Group) + return command(name, **attrs) + + +def _param_memo(f, param): + if isinstance(f, Command): + f.params.append(param) + else: + if not hasattr(f, '__click_params__'): + f.__click_params__ = [] + f.__click_params__.append(param) + + +def argument(*param_decls, **attrs): + """Attaches an argument to the command. All positional arguments are + passed as parameter declarations to :class:`Argument`; all keyword + arguments are forwarded unchanged (except ``cls``). + This is equivalent to creating an :class:`Argument` instance manually + and attaching it to the :attr:`Command.params` list. + + :param cls: the argument class to instantiate. This defaults to + :class:`Argument`. + """ + def decorator(f): + ArgumentClass = attrs.pop('cls', Argument) + _param_memo(f, ArgumentClass(param_decls, **attrs)) + return f + return decorator + + +def option(*param_decls, **attrs): + """Attaches an option to the command. All positional arguments are + passed as parameter declarations to :class:`Option`; all keyword + arguments are forwarded unchanged (except ``cls``). + This is equivalent to creating an :class:`Option` instance manually + and attaching it to the :attr:`Command.params` list. + + :param cls: the option class to instantiate. This defaults to + :class:`Option`. + """ + def decorator(f): + # Issue 926, copy attrs, so pre-defined options can re-use the same cls= + option_attrs = attrs.copy() + + if 'help' in option_attrs: + option_attrs['help'] = inspect.cleandoc(option_attrs['help']) + OptionClass = option_attrs.pop('cls', Option) + _param_memo(f, OptionClass(param_decls, **option_attrs)) + return f + return decorator + + +def confirmation_option(*param_decls, **attrs): + """Shortcut for confirmation prompts that can be ignored by passing + ``--yes`` as parameter. + + This is equivalent to decorating a function with :func:`option` with + the following parameters:: + + def callback(ctx, param, value): + if not value: + ctx.abort() + + @click.command() + @click.option('--yes', is_flag=True, callback=callback, + expose_value=False, prompt='Do you want to continue?') + def dropdb(): + pass + """ + def decorator(f): + def callback(ctx, param, value): + if not value: + ctx.abort() + attrs.setdefault('is_flag', True) + attrs.setdefault('callback', callback) + attrs.setdefault('expose_value', False) + attrs.setdefault('prompt', 'Do you want to continue?') + attrs.setdefault('help', 'Confirm the action without prompting.') + return option(*(param_decls or ('--yes',)), **attrs)(f) + return decorator + + +def password_option(*param_decls, **attrs): + """Shortcut for password prompts. + + This is equivalent to decorating a function with :func:`option` with + the following parameters:: + + @click.command() + @click.option('--password', prompt=True, confirmation_prompt=True, + hide_input=True) + def changeadmin(password): + pass + """ + def decorator(f): + attrs.setdefault('prompt', True) + attrs.setdefault('confirmation_prompt', True) + attrs.setdefault('hide_input', True) + return option(*(param_decls or ('--password',)), **attrs)(f) + return decorator + + +def version_option(version=None, *param_decls, **attrs): + """Adds a ``--version`` option which immediately ends the program + printing out the version number. This is implemented as an eager + option that prints the version and exits the program in the callback. + + :param version: the version number to show. If not provided Click + attempts an auto discovery via setuptools. + :param prog_name: the name of the program (defaults to autodetection) + :param message: custom message to show instead of the default + (``'%(prog)s, version %(version)s'``) + :param others: everything else is forwarded to :func:`option`. + """ + if version is None: + if hasattr(sys, '_getframe'): + module = sys._getframe(1).f_globals.get('__name__') + else: + module = '' + + def decorator(f): + prog_name = attrs.pop('prog_name', None) + message = attrs.pop('message', '%(prog)s, version %(version)s') + + def callback(ctx, param, value): + if not value or ctx.resilient_parsing: + return + prog = prog_name + if prog is None: + prog = ctx.find_root().info_name + ver = version + if ver is None: + try: + import pkg_resources + except ImportError: + pass + else: + for dist in pkg_resources.working_set: + scripts = dist.get_entry_map().get('console_scripts') or {} + for script_name, entry_point in iteritems(scripts): + if entry_point.module_name == module: + ver = dist.version + break + if ver is None: + raise RuntimeError('Could not determine version') + echo(message % { + 'prog': prog, + 'version': ver, + }, color=ctx.color) + ctx.exit() + + attrs.setdefault('is_flag', True) + attrs.setdefault('expose_value', False) + attrs.setdefault('is_eager', True) + attrs.setdefault('help', 'Show the version and exit.') + attrs['callback'] = callback + return option(*(param_decls or ('--version',)), **attrs)(f) + return decorator + + +def help_option(*param_decls, **attrs): + """Adds a ``--help`` option which immediately ends the program + printing out the help page. This is usually unnecessary to add as + this is added by default to all commands unless suppressed. + + Like :func:`version_option`, this is implemented as eager option that + prints in the callback and exits. + + All arguments are forwarded to :func:`option`. + """ + def decorator(f): + def callback(ctx, param, value): + if value and not ctx.resilient_parsing: + echo(ctx.get_help(), color=ctx.color) + ctx.exit() + attrs.setdefault('is_flag', True) + attrs.setdefault('expose_value', False) + attrs.setdefault('help', 'Show this message and exit.') + attrs.setdefault('is_eager', True) + attrs['callback'] = callback + return option(*(param_decls or ('--help',)), **attrs)(f) + return decorator + + +# Circular dependencies between core and decorators +from .core import Command, Group, Argument, Option diff --git a/week-0/day-3/my_todo_app/venv/lib/python3.6/site-packages/click/exceptions.py b/week-0/day-3/my_todo_app/venv/lib/python3.6/site-packages/click/exceptions.py new file mode 100644 index 00000000..6fa17658 --- /dev/null +++ b/week-0/day-3/my_todo_app/venv/lib/python3.6/site-packages/click/exceptions.py @@ -0,0 +1,235 @@ +from ._compat import PY2, filename_to_ui, get_text_stderr +from .utils import echo + + +def _join_param_hints(param_hint): + if isinstance(param_hint, (tuple, list)): + return ' / '.join('"%s"' % x for x in param_hint) + return param_hint + + +class ClickException(Exception): + """An exception that Click can handle and show to the user.""" + + #: The exit code for this exception + exit_code = 1 + + def __init__(self, message): + ctor_msg = message + if PY2: + if ctor_msg is not None: + ctor_msg = ctor_msg.encode('utf-8') + Exception.__init__(self, ctor_msg) + self.message = message + + def format_message(self): + return self.message + + def __str__(self): + return self.message + + if PY2: + __unicode__ = __str__ + + def __str__(self): + return self.message.encode('utf-8') + + def show(self, file=None): + if file is None: + file = get_text_stderr() + echo('Error: %s' % self.format_message(), file=file) + + +class UsageError(ClickException): + """An internal exception that signals a usage error. This typically + aborts any further handling. + + :param message: the error message to display. + :param ctx: optionally the context that caused this error. Click will + fill in the context automatically in some situations. + """ + exit_code = 2 + + def __init__(self, message, ctx=None): + ClickException.__init__(self, message) + self.ctx = ctx + self.cmd = self.ctx and self.ctx.command or None + + def show(self, file=None): + if file is None: + file = get_text_stderr() + color = None + hint = '' + if (self.cmd is not None and + self.cmd.get_help_option(self.ctx) is not None): + hint = ('Try "%s %s" for help.\n' + % (self.ctx.command_path, self.ctx.help_option_names[0])) + if self.ctx is not None: + color = self.ctx.color + echo(self.ctx.get_usage() + '\n%s' % hint, file=file, color=color) + echo('Error: %s' % self.format_message(), file=file, color=color) + + +class BadParameter(UsageError): + """An exception that formats out a standardized error message for a + bad parameter. This is useful when thrown from a callback or type as + Click will attach contextual information to it (for instance, which + parameter it is). + + .. versionadded:: 2.0 + + :param param: the parameter object that caused this error. This can + be left out, and Click will attach this info itself + if possible. + :param param_hint: a string that shows up as parameter name. This + can be used as alternative to `param` in cases + where custom validation should happen. If it is + a string it's used as such, if it's a list then + each item is quoted and separated. + """ + + def __init__(self, message, ctx=None, param=None, + param_hint=None): + UsageError.__init__(self, message, ctx) + self.param = param + self.param_hint = param_hint + + def format_message(self): + if self.param_hint is not None: + param_hint = self.param_hint + elif self.param is not None: + param_hint = self.param.get_error_hint(self.ctx) + else: + return 'Invalid value: %s' % self.message + param_hint = _join_param_hints(param_hint) + + return 'Invalid value for %s: %s' % (param_hint, self.message) + + +class MissingParameter(BadParameter): + """Raised if click required an option or argument but it was not + provided when invoking the script. + + .. versionadded:: 4.0 + + :param param_type: a string that indicates the type of the parameter. + The default is to inherit the parameter type from + the given `param`. Valid values are ``'parameter'``, + ``'option'`` or ``'argument'``. + """ + + def __init__(self, message=None, ctx=None, param=None, + param_hint=None, param_type=None): + BadParameter.__init__(self, message, ctx, param, param_hint) + self.param_type = param_type + + def format_message(self): + if self.param_hint is not None: + param_hint = self.param_hint + elif self.param is not None: + param_hint = self.param.get_error_hint(self.ctx) + else: + param_hint = None + param_hint = _join_param_hints(param_hint) + + param_type = self.param_type + if param_type is None and self.param is not None: + param_type = self.param.param_type_name + + msg = self.message + if self.param is not None: + msg_extra = self.param.type.get_missing_message(self.param) + if msg_extra: + if msg: + msg += '. ' + msg_extra + else: + msg = msg_extra + + return 'Missing %s%s%s%s' % ( + param_type, + param_hint and ' %s' % param_hint or '', + msg and '. ' or '.', + msg or '', + ) + + +class NoSuchOption(UsageError): + """Raised if click attempted to handle an option that does not + exist. + + .. versionadded:: 4.0 + """ + + def __init__(self, option_name, message=None, possibilities=None, + ctx=None): + if message is None: + message = 'no such option: %s' % option_name + UsageError.__init__(self, message, ctx) + self.option_name = option_name + self.possibilities = possibilities + + def format_message(self): + bits = [self.message] + if self.possibilities: + if len(self.possibilities) == 1: + bits.append('Did you mean %s?' % self.possibilities[0]) + else: + possibilities = sorted(self.possibilities) + bits.append('(Possible options: %s)' % ', '.join(possibilities)) + return ' '.join(bits) + + +class BadOptionUsage(UsageError): + """Raised if an option is generally supplied but the use of the option + was incorrect. This is for instance raised if the number of arguments + for an option is not correct. + + .. versionadded:: 4.0 + + :param option_name: the name of the option being used incorrectly. + """ + + def __init__(self, option_name, message, ctx=None): + UsageError.__init__(self, message, ctx) + self.option_name = option_name + + +class BadArgumentUsage(UsageError): + """Raised if an argument is generally supplied but the use of the argument + was incorrect. This is for instance raised if the number of values + for an argument is not correct. + + .. versionadded:: 6.0 + """ + + def __init__(self, message, ctx=None): + UsageError.__init__(self, message, ctx) + + +class FileError(ClickException): + """Raised if a file cannot be opened.""" + + def __init__(self, filename, hint=None): + ui_filename = filename_to_ui(filename) + if hint is None: + hint = 'unknown error' + ClickException.__init__(self, hint) + self.ui_filename = ui_filename + self.filename = filename + + def format_message(self): + return 'Could not open file %s: %s' % (self.ui_filename, self.message) + + +class Abort(RuntimeError): + """An internal signalling exception that signals Click to abort.""" + + +class Exit(RuntimeError): + """An exception that indicates that the application should exit with some + status code. + + :param code: the status code to exit with. + """ + def __init__(self, code=0): + self.exit_code = code diff --git a/week-0/day-3/my_todo_app/venv/lib/python3.6/site-packages/click/formatting.py b/week-0/day-3/my_todo_app/venv/lib/python3.6/site-packages/click/formatting.py new file mode 100644 index 00000000..a3d6a4d3 --- /dev/null +++ b/week-0/day-3/my_todo_app/venv/lib/python3.6/site-packages/click/formatting.py @@ -0,0 +1,256 @@ +from contextlib import contextmanager +from .termui import get_terminal_size +from .parser import split_opt +from ._compat import term_len + + +# Can force a width. This is used by the test system +FORCED_WIDTH = None + + +def measure_table(rows): + widths = {} + for row in rows: + for idx, col in enumerate(row): + widths[idx] = max(widths.get(idx, 0), term_len(col)) + return tuple(y for x, y in sorted(widths.items())) + + +def iter_rows(rows, col_count): + for row in rows: + row = tuple(row) + yield row + ('',) * (col_count - len(row)) + + +def wrap_text(text, width=78, initial_indent='', subsequent_indent='', + preserve_paragraphs=False): + """A helper function that intelligently wraps text. By default, it + assumes that it operates on a single paragraph of text but if the + `preserve_paragraphs` parameter is provided it will intelligently + handle paragraphs (defined by two empty lines). + + If paragraphs are handled, a paragraph can be prefixed with an empty + line containing the ``\\b`` character (``\\x08``) to indicate that + no rewrapping should happen in that block. + + :param text: the text that should be rewrapped. + :param width: the maximum width for the text. + :param initial_indent: the initial indent that should be placed on the + first line as a string. + :param subsequent_indent: the indent string that should be placed on + each consecutive line. + :param preserve_paragraphs: if this flag is set then the wrapping will + intelligently handle paragraphs. + """ + from ._textwrap import TextWrapper + text = text.expandtabs() + wrapper = TextWrapper(width, initial_indent=initial_indent, + subsequent_indent=subsequent_indent, + replace_whitespace=False) + if not preserve_paragraphs: + return wrapper.fill(text) + + p = [] + buf = [] + indent = None + + def _flush_par(): + if not buf: + return + if buf[0].strip() == '\b': + p.append((indent or 0, True, '\n'.join(buf[1:]))) + else: + p.append((indent or 0, False, ' '.join(buf))) + del buf[:] + + for line in text.splitlines(): + if not line: + _flush_par() + indent = None + else: + if indent is None: + orig_len = term_len(line) + line = line.lstrip() + indent = orig_len - term_len(line) + buf.append(line) + _flush_par() + + rv = [] + for indent, raw, text in p: + with wrapper.extra_indent(' ' * indent): + if raw: + rv.append(wrapper.indent_only(text)) + else: + rv.append(wrapper.fill(text)) + + return '\n\n'.join(rv) + + +class HelpFormatter(object): + """This class helps with formatting text-based help pages. It's + usually just needed for very special internal cases, but it's also + exposed so that developers can write their own fancy outputs. + + At present, it always writes into memory. + + :param indent_increment: the additional increment for each level. + :param width: the width for the text. This defaults to the terminal + width clamped to a maximum of 78. + """ + + def __init__(self, indent_increment=2, width=None, max_width=None): + self.indent_increment = indent_increment + if max_width is None: + max_width = 80 + if width is None: + width = FORCED_WIDTH + if width is None: + width = max(min(get_terminal_size()[0], max_width) - 2, 50) + self.width = width + self.current_indent = 0 + self.buffer = [] + + def write(self, string): + """Writes a unicode string into the internal buffer.""" + self.buffer.append(string) + + def indent(self): + """Increases the indentation.""" + self.current_indent += self.indent_increment + + def dedent(self): + """Decreases the indentation.""" + self.current_indent -= self.indent_increment + + def write_usage(self, prog, args='', prefix='Usage: '): + """Writes a usage line into the buffer. + + :param prog: the program name. + :param args: whitespace separated list of arguments. + :param prefix: the prefix for the first line. + """ + usage_prefix = '%*s%s ' % (self.current_indent, prefix, prog) + text_width = self.width - self.current_indent + + if text_width >= (term_len(usage_prefix) + 20): + # The arguments will fit to the right of the prefix. + indent = ' ' * term_len(usage_prefix) + self.write(wrap_text(args, text_width, + initial_indent=usage_prefix, + subsequent_indent=indent)) + else: + # The prefix is too long, put the arguments on the next line. + self.write(usage_prefix) + self.write('\n') + indent = ' ' * (max(self.current_indent, term_len(prefix)) + 4) + self.write(wrap_text(args, text_width, + initial_indent=indent, + subsequent_indent=indent)) + + self.write('\n') + + def write_heading(self, heading): + """Writes a heading into the buffer.""" + self.write('%*s%s:\n' % (self.current_indent, '', heading)) + + def write_paragraph(self): + """Writes a paragraph into the buffer.""" + if self.buffer: + self.write('\n') + + def write_text(self, text): + """Writes re-indented text into the buffer. This rewraps and + preserves paragraphs. + """ + text_width = max(self.width - self.current_indent, 11) + indent = ' ' * self.current_indent + self.write(wrap_text(text, text_width, + initial_indent=indent, + subsequent_indent=indent, + preserve_paragraphs=True)) + self.write('\n') + + def write_dl(self, rows, col_max=30, col_spacing=2): + """Writes a definition list into the buffer. This is how options + and commands are usually formatted. + + :param rows: a list of two item tuples for the terms and values. + :param col_max: the maximum width of the first column. + :param col_spacing: the number of spaces between the first and + second column. + """ + rows = list(rows) + widths = measure_table(rows) + if len(widths) != 2: + raise TypeError('Expected two columns for definition list') + + first_col = min(widths[0], col_max) + col_spacing + + for first, second in iter_rows(rows, len(widths)): + self.write('%*s%s' % (self.current_indent, '', first)) + if not second: + self.write('\n') + continue + if term_len(first) <= first_col - col_spacing: + self.write(' ' * (first_col - term_len(first))) + else: + self.write('\n') + self.write(' ' * (first_col + self.current_indent)) + + text_width = max(self.width - first_col - 2, 10) + lines = iter(wrap_text(second, text_width).splitlines()) + if lines: + self.write(next(lines) + '\n') + for line in lines: + self.write('%*s%s\n' % ( + first_col + self.current_indent, '', line)) + else: + self.write('\n') + + @contextmanager + def section(self, name): + """Helpful context manager that writes a paragraph, a heading, + and the indents. + + :param name: the section name that is written as heading. + """ + self.write_paragraph() + self.write_heading(name) + self.indent() + try: + yield + finally: + self.dedent() + + @contextmanager + def indentation(self): + """A context manager that increases the indentation.""" + self.indent() + try: + yield + finally: + self.dedent() + + def getvalue(self): + """Returns the buffer contents.""" + return ''.join(self.buffer) + + +def join_options(options): + """Given a list of option strings this joins them in the most appropriate + way and returns them in the form ``(formatted_string, + any_prefix_is_slash)`` where the second item in the tuple is a flag that + indicates if any of the option prefixes was a slash. + """ + rv = [] + any_prefix_is_slash = False + for opt in options: + prefix = split_opt(opt)[0] + if prefix == '/': + any_prefix_is_slash = True + rv.append((len(prefix), opt)) + + rv.sort(key=lambda x: x[0]) + + rv = ', '.join(x[1] for x in rv) + return rv, any_prefix_is_slash diff --git a/week-0/day-3/my_todo_app/venv/lib/python3.6/site-packages/click/globals.py b/week-0/day-3/my_todo_app/venv/lib/python3.6/site-packages/click/globals.py new file mode 100644 index 00000000..843b594a --- /dev/null +++ b/week-0/day-3/my_todo_app/venv/lib/python3.6/site-packages/click/globals.py @@ -0,0 +1,48 @@ +from threading import local + + +_local = local() + + +def get_current_context(silent=False): + """Returns the current click context. This can be used as a way to + access the current context object from anywhere. This is a more implicit + alternative to the :func:`pass_context` decorator. This function is + primarily useful for helpers such as :func:`echo` which might be + interested in changing its behavior based on the current context. + + To push the current context, :meth:`Context.scope` can be used. + + .. versionadded:: 5.0 + + :param silent: is set to `True` the return value is `None` if no context + is available. The default behavior is to raise a + :exc:`RuntimeError`. + """ + try: + return getattr(_local, 'stack')[-1] + except (AttributeError, IndexError): + if not silent: + raise RuntimeError('There is no active click context.') + + +def push_context(ctx): + """Pushes a new context to the current stack.""" + _local.__dict__.setdefault('stack', []).append(ctx) + + +def pop_context(): + """Removes the top level from the stack.""" + _local.stack.pop() + + +def resolve_color_default(color=None): + """"Internal helper to get the default value of the color flag. If a + value is passed it's returned unchanged, otherwise it's looked up from + the current context. + """ + if color is not None: + return color + ctx = get_current_context(silent=True) + if ctx is not None: + return ctx.color diff --git a/week-0/day-3/my_todo_app/venv/lib/python3.6/site-packages/click/parser.py b/week-0/day-3/my_todo_app/venv/lib/python3.6/site-packages/click/parser.py new file mode 100644 index 00000000..1c3ae9c8 --- /dev/null +++ b/week-0/day-3/my_todo_app/venv/lib/python3.6/site-packages/click/parser.py @@ -0,0 +1,427 @@ +# -*- coding: utf-8 -*- +""" +click.parser +~~~~~~~~~~~~ + +This module started out as largely a copy paste from the stdlib's +optparse module with the features removed that we do not need from +optparse because we implement them in Click on a higher level (for +instance type handling, help formatting and a lot more). + +The plan is to remove more and more from here over time. + +The reason this is a different module and not optparse from the stdlib +is that there are differences in 2.x and 3.x about the error messages +generated and optparse in the stdlib uses gettext for no good reason +and might cause us issues. +""" + +import re +from collections import deque +from .exceptions import UsageError, NoSuchOption, BadOptionUsage, \ + BadArgumentUsage + + +def _unpack_args(args, nargs_spec): + """Given an iterable of arguments and an iterable of nargs specifications, + it returns a tuple with all the unpacked arguments at the first index + and all remaining arguments as the second. + + The nargs specification is the number of arguments that should be consumed + or `-1` to indicate that this position should eat up all the remainders. + + Missing items are filled with `None`. + """ + args = deque(args) + nargs_spec = deque(nargs_spec) + rv = [] + spos = None + + def _fetch(c): + try: + if spos is None: + return c.popleft() + else: + return c.pop() + except IndexError: + return None + + while nargs_spec: + nargs = _fetch(nargs_spec) + if nargs == 1: + rv.append(_fetch(args)) + elif nargs > 1: + x = [_fetch(args) for _ in range(nargs)] + # If we're reversed, we're pulling in the arguments in reverse, + # so we need to turn them around. + if spos is not None: + x.reverse() + rv.append(tuple(x)) + elif nargs < 0: + if spos is not None: + raise TypeError('Cannot have two nargs < 0') + spos = len(rv) + rv.append(None) + + # spos is the position of the wildcard (star). If it's not `None`, + # we fill it with the remainder. + if spos is not None: + rv[spos] = tuple(args) + args = [] + rv[spos + 1:] = reversed(rv[spos + 1:]) + + return tuple(rv), list(args) + + +def _error_opt_args(nargs, opt): + if nargs == 1: + raise BadOptionUsage(opt, '%s option requires an argument' % opt) + raise BadOptionUsage(opt, '%s option requires %d arguments' % (opt, nargs)) + + +def split_opt(opt): + first = opt[:1] + if first.isalnum(): + return '', opt + if opt[1:2] == first: + return opt[:2], opt[2:] + return first, opt[1:] + + +def normalize_opt(opt, ctx): + if ctx is None or ctx.token_normalize_func is None: + return opt + prefix, opt = split_opt(opt) + return prefix + ctx.token_normalize_func(opt) + + +def split_arg_string(string): + """Given an argument string this attempts to split it into small parts.""" + rv = [] + for match in re.finditer(r"('([^'\\]*(?:\\.[^'\\]*)*)'" + r'|"([^"\\]*(?:\\.[^"\\]*)*)"' + r'|\S+)\s*', string, re.S): + arg = match.group().strip() + if arg[:1] == arg[-1:] and arg[:1] in '"\'': + arg = arg[1:-1].encode('ascii', 'backslashreplace') \ + .decode('unicode-escape') + try: + arg = type(string)(arg) + except UnicodeError: + pass + rv.append(arg) + return rv + + +class Option(object): + + def __init__(self, opts, dest, action=None, nargs=1, const=None, obj=None): + self._short_opts = [] + self._long_opts = [] + self.prefixes = set() + + for opt in opts: + prefix, value = split_opt(opt) + if not prefix: + raise ValueError('Invalid start character for option (%s)' + % opt) + self.prefixes.add(prefix[0]) + if len(prefix) == 1 and len(value) == 1: + self._short_opts.append(opt) + else: + self._long_opts.append(opt) + self.prefixes.add(prefix) + + if action is None: + action = 'store' + + self.dest = dest + self.action = action + self.nargs = nargs + self.const = const + self.obj = obj + + @property + def takes_value(self): + return self.action in ('store', 'append') + + def process(self, value, state): + if self.action == 'store': + state.opts[self.dest] = value + elif self.action == 'store_const': + state.opts[self.dest] = self.const + elif self.action == 'append': + state.opts.setdefault(self.dest, []).append(value) + elif self.action == 'append_const': + state.opts.setdefault(self.dest, []).append(self.const) + elif self.action == 'count': + state.opts[self.dest] = state.opts.get(self.dest, 0) + 1 + else: + raise ValueError('unknown action %r' % self.action) + state.order.append(self.obj) + + +class Argument(object): + + def __init__(self, dest, nargs=1, obj=None): + self.dest = dest + self.nargs = nargs + self.obj = obj + + def process(self, value, state): + if self.nargs > 1: + holes = sum(1 for x in value if x is None) + if holes == len(value): + value = None + elif holes != 0: + raise BadArgumentUsage('argument %s takes %d values' + % (self.dest, self.nargs)) + state.opts[self.dest] = value + state.order.append(self.obj) + + +class ParsingState(object): + + def __init__(self, rargs): + self.opts = {} + self.largs = [] + self.rargs = rargs + self.order = [] + + +class OptionParser(object): + """The option parser is an internal class that is ultimately used to + parse options and arguments. It's modelled after optparse and brings + a similar but vastly simplified API. It should generally not be used + directly as the high level Click classes wrap it for you. + + It's not nearly as extensible as optparse or argparse as it does not + implement features that are implemented on a higher level (such as + types or defaults). + + :param ctx: optionally the :class:`~click.Context` where this parser + should go with. + """ + + def __init__(self, ctx=None): + #: The :class:`~click.Context` for this parser. This might be + #: `None` for some advanced use cases. + self.ctx = ctx + #: This controls how the parser deals with interspersed arguments. + #: If this is set to `False`, the parser will stop on the first + #: non-option. Click uses this to implement nested subcommands + #: safely. + self.allow_interspersed_args = True + #: This tells the parser how to deal with unknown options. By + #: default it will error out (which is sensible), but there is a + #: second mode where it will ignore it and continue processing + #: after shifting all the unknown options into the resulting args. + self.ignore_unknown_options = False + if ctx is not None: + self.allow_interspersed_args = ctx.allow_interspersed_args + self.ignore_unknown_options = ctx.ignore_unknown_options + self._short_opt = {} + self._long_opt = {} + self._opt_prefixes = set(['-', '--']) + self._args = [] + + def add_option(self, opts, dest, action=None, nargs=1, const=None, + obj=None): + """Adds a new option named `dest` to the parser. The destination + is not inferred (unlike with optparse) and needs to be explicitly + provided. Action can be any of ``store``, ``store_const``, + ``append``, ``appnd_const`` or ``count``. + + The `obj` can be used to identify the option in the order list + that is returned from the parser. + """ + if obj is None: + obj = dest + opts = [normalize_opt(opt, self.ctx) for opt in opts] + option = Option(opts, dest, action=action, nargs=nargs, + const=const, obj=obj) + self._opt_prefixes.update(option.prefixes) + for opt in option._short_opts: + self._short_opt[opt] = option + for opt in option._long_opts: + self._long_opt[opt] = option + + def add_argument(self, dest, nargs=1, obj=None): + """Adds a positional argument named `dest` to the parser. + + The `obj` can be used to identify the option in the order list + that is returned from the parser. + """ + if obj is None: + obj = dest + self._args.append(Argument(dest=dest, nargs=nargs, obj=obj)) + + def parse_args(self, args): + """Parses positional arguments and returns ``(values, args, order)`` + for the parsed options and arguments as well as the leftover + arguments if there are any. The order is a list of objects as they + appear on the command line. If arguments appear multiple times they + will be memorized multiple times as well. + """ + state = ParsingState(args) + try: + self._process_args_for_options(state) + self._process_args_for_args(state) + except UsageError: + if self.ctx is None or not self.ctx.resilient_parsing: + raise + return state.opts, state.largs, state.order + + def _process_args_for_args(self, state): + pargs, args = _unpack_args(state.largs + state.rargs, + [x.nargs for x in self._args]) + + for idx, arg in enumerate(self._args): + arg.process(pargs[idx], state) + + state.largs = args + state.rargs = [] + + def _process_args_for_options(self, state): + while state.rargs: + arg = state.rargs.pop(0) + arglen = len(arg) + # Double dashes always handled explicitly regardless of what + # prefixes are valid. + if arg == '--': + return + elif arg[:1] in self._opt_prefixes and arglen > 1: + self._process_opts(arg, state) + elif self.allow_interspersed_args: + state.largs.append(arg) + else: + state.rargs.insert(0, arg) + return + + # Say this is the original argument list: + # [arg0, arg1, ..., arg(i-1), arg(i), arg(i+1), ..., arg(N-1)] + # ^ + # (we are about to process arg(i)). + # + # Then rargs is [arg(i), ..., arg(N-1)] and largs is a *subset* of + # [arg0, ..., arg(i-1)] (any options and their arguments will have + # been removed from largs). + # + # The while loop will usually consume 1 or more arguments per pass. + # If it consumes 1 (eg. arg is an option that takes no arguments), + # then after _process_arg() is done the situation is: + # + # largs = subset of [arg0, ..., arg(i)] + # rargs = [arg(i+1), ..., arg(N-1)] + # + # If allow_interspersed_args is false, largs will always be + # *empty* -- still a subset of [arg0, ..., arg(i-1)], but + # not a very interesting subset! + + def _match_long_opt(self, opt, explicit_value, state): + if opt not in self._long_opt: + possibilities = [word for word in self._long_opt + if word.startswith(opt)] + raise NoSuchOption(opt, possibilities=possibilities, ctx=self.ctx) + + option = self._long_opt[opt] + if option.takes_value: + # At this point it's safe to modify rargs by injecting the + # explicit value, because no exception is raised in this + # branch. This means that the inserted value will be fully + # consumed. + if explicit_value is not None: + state.rargs.insert(0, explicit_value) + + nargs = option.nargs + if len(state.rargs) < nargs: + _error_opt_args(nargs, opt) + elif nargs == 1: + value = state.rargs.pop(0) + else: + value = tuple(state.rargs[:nargs]) + del state.rargs[:nargs] + + elif explicit_value is not None: + raise BadOptionUsage(opt, '%s option does not take a value' % opt) + + else: + value = None + + option.process(value, state) + + def _match_short_opt(self, arg, state): + stop = False + i = 1 + prefix = arg[0] + unknown_options = [] + + for ch in arg[1:]: + opt = normalize_opt(prefix + ch, self.ctx) + option = self._short_opt.get(opt) + i += 1 + + if not option: + if self.ignore_unknown_options: + unknown_options.append(ch) + continue + raise NoSuchOption(opt, ctx=self.ctx) + if option.takes_value: + # Any characters left in arg? Pretend they're the + # next arg, and stop consuming characters of arg. + if i < len(arg): + state.rargs.insert(0, arg[i:]) + stop = True + + nargs = option.nargs + if len(state.rargs) < nargs: + _error_opt_args(nargs, opt) + elif nargs == 1: + value = state.rargs.pop(0) + else: + value = tuple(state.rargs[:nargs]) + del state.rargs[:nargs] + + else: + value = None + + option.process(value, state) + + if stop: + break + + # If we got any unknown options we re-combinate the string of the + # remaining options and re-attach the prefix, then report that + # to the state as new larg. This way there is basic combinatorics + # that can be achieved while still ignoring unknown arguments. + if self.ignore_unknown_options and unknown_options: + state.largs.append(prefix + ''.join(unknown_options)) + + def _process_opts(self, arg, state): + explicit_value = None + # Long option handling happens in two parts. The first part is + # supporting explicitly attached values. In any case, we will try + # to long match the option first. + if '=' in arg: + long_opt, explicit_value = arg.split('=', 1) + else: + long_opt = arg + norm_long_opt = normalize_opt(long_opt, self.ctx) + + # At this point we will match the (assumed) long option through + # the long option matching code. Note that this allows options + # like "-foo" to be matched as long options. + try: + self._match_long_opt(norm_long_opt, explicit_value, state) + except NoSuchOption: + # At this point the long option matching failed, and we need + # to try with short options. However there is a special rule + # which says, that if we have a two character options prefix + # (applies to "--foo" for instance), we do not dispatch to the + # short option code and will instead raise the no option + # error. + if arg[:2] not in self._opt_prefixes: + return self._match_short_opt(arg, state) + if not self.ignore_unknown_options: + raise + state.largs.append(arg) diff --git a/week-0/day-3/my_todo_app/venv/lib/python3.6/site-packages/click/termui.py b/week-0/day-3/my_todo_app/venv/lib/python3.6/site-packages/click/termui.py new file mode 100644 index 00000000..bf9a3aa1 --- /dev/null +++ b/week-0/day-3/my_todo_app/venv/lib/python3.6/site-packages/click/termui.py @@ -0,0 +1,606 @@ +import os +import sys +import struct +import inspect +import itertools + +from ._compat import raw_input, text_type, string_types, \ + isatty, strip_ansi, get_winterm_size, DEFAULT_COLUMNS, WIN +from .utils import echo +from .exceptions import Abort, UsageError +from .types import convert_type, Choice, Path +from .globals import resolve_color_default + + +# The prompt functions to use. The doc tools currently override these +# functions to customize how they work. +visible_prompt_func = raw_input + +_ansi_colors = { + 'black': 30, + 'red': 31, + 'green': 32, + 'yellow': 33, + 'blue': 34, + 'magenta': 35, + 'cyan': 36, + 'white': 37, + 'reset': 39, + 'bright_black': 90, + 'bright_red': 91, + 'bright_green': 92, + 'bright_yellow': 93, + 'bright_blue': 94, + 'bright_magenta': 95, + 'bright_cyan': 96, + 'bright_white': 97, +} +_ansi_reset_all = '\033[0m' + + +def hidden_prompt_func(prompt): + import getpass + return getpass.getpass(prompt) + + +def _build_prompt(text, suffix, show_default=False, default=None, show_choices=True, type=None): + prompt = text + if type is not None and show_choices and isinstance(type, Choice): + prompt += ' (' + ", ".join(map(str, type.choices)) + ')' + if default is not None and show_default: + prompt = '%s [%s]' % (prompt, default) + return prompt + suffix + + +def prompt(text, default=None, hide_input=False, confirmation_prompt=False, + type=None, value_proc=None, prompt_suffix=': ', show_default=True, + err=False, show_choices=True): + """Prompts a user for input. This is a convenience function that can + be used to prompt a user for input later. + + If the user aborts the input by sending a interrupt signal, this + function will catch it and raise a :exc:`Abort` exception. + + .. versionadded:: 7.0 + Added the show_choices parameter. + + .. versionadded:: 6.0 + Added unicode support for cmd.exe on Windows. + + .. versionadded:: 4.0 + Added the `err` parameter. + + :param text: the text to show for the prompt. + :param default: the default value to use if no input happens. If this + is not given it will prompt until it's aborted. + :param hide_input: if this is set to true then the input value will + be hidden. + :param confirmation_prompt: asks for confirmation for the value. + :param type: the type to use to check the value against. + :param value_proc: if this parameter is provided it's a function that + is invoked instead of the type conversion to + convert a value. + :param prompt_suffix: a suffix that should be added to the prompt. + :param show_default: shows or hides the default value in the prompt. + :param err: if set to true the file defaults to ``stderr`` instead of + ``stdout``, the same as with echo. + :param show_choices: Show or hide choices if the passed type is a Choice. + For example if type is a Choice of either day or week, + show_choices is true and text is "Group by" then the + prompt will be "Group by (day, week): ". + """ + result = None + + def prompt_func(text): + f = hide_input and hidden_prompt_func or visible_prompt_func + try: + # Write the prompt separately so that we get nice + # coloring through colorama on Windows + echo(text, nl=False, err=err) + return f('') + except (KeyboardInterrupt, EOFError): + # getpass doesn't print a newline if the user aborts input with ^C. + # Allegedly this behavior is inherited from getpass(3). + # A doc bug has been filed at https://bugs.python.org/issue24711 + if hide_input: + echo(None, err=err) + raise Abort() + + if value_proc is None: + value_proc = convert_type(type, default) + + prompt = _build_prompt(text, prompt_suffix, show_default, default, show_choices, type) + + while 1: + while 1: + value = prompt_func(prompt) + if value: + break + elif default is not None: + if isinstance(value_proc, Path): + # validate Path default value(exists, dir_okay etc.) + value = default + break + return default + try: + result = value_proc(value) + except UsageError as e: + echo('Error: %s' % e.message, err=err) + continue + if not confirmation_prompt: + return result + while 1: + value2 = prompt_func('Repeat for confirmation: ') + if value2: + break + if value == value2: + return result + echo('Error: the two entered values do not match', err=err) + + +def confirm(text, default=False, abort=False, prompt_suffix=': ', + show_default=True, err=False): + """Prompts for confirmation (yes/no question). + + If the user aborts the input by sending a interrupt signal this + function will catch it and raise a :exc:`Abort` exception. + + .. versionadded:: 4.0 + Added the `err` parameter. + + :param text: the question to ask. + :param default: the default for the prompt. + :param abort: if this is set to `True` a negative answer aborts the + exception by raising :exc:`Abort`. + :param prompt_suffix: a suffix that should be added to the prompt. + :param show_default: shows or hides the default value in the prompt. + :param err: if set to true the file defaults to ``stderr`` instead of + ``stdout``, the same as with echo. + """ + prompt = _build_prompt(text, prompt_suffix, show_default, + default and 'Y/n' or 'y/N') + while 1: + try: + # Write the prompt separately so that we get nice + # coloring through colorama on Windows + echo(prompt, nl=False, err=err) + value = visible_prompt_func('').lower().strip() + except (KeyboardInterrupt, EOFError): + raise Abort() + if value in ('y', 'yes'): + rv = True + elif value in ('n', 'no'): + rv = False + elif value == '': + rv = default + else: + echo('Error: invalid input', err=err) + continue + break + if abort and not rv: + raise Abort() + return rv + + +def get_terminal_size(): + """Returns the current size of the terminal as tuple in the form + ``(width, height)`` in columns and rows. + """ + # If shutil has get_terminal_size() (Python 3.3 and later) use that + if sys.version_info >= (3, 3): + import shutil + shutil_get_terminal_size = getattr(shutil, 'get_terminal_size', None) + if shutil_get_terminal_size: + sz = shutil_get_terminal_size() + return sz.columns, sz.lines + + # We provide a sensible default for get_winterm_size() when being invoked + # inside a subprocess. Without this, it would not provide a useful input. + if get_winterm_size is not None: + size = get_winterm_size() + if size == (0, 0): + return (79, 24) + else: + return size + + def ioctl_gwinsz(fd): + try: + import fcntl + import termios + cr = struct.unpack( + 'hh', fcntl.ioctl(fd, termios.TIOCGWINSZ, '1234')) + except Exception: + return + return cr + + cr = ioctl_gwinsz(0) or ioctl_gwinsz(1) or ioctl_gwinsz(2) + if not cr: + try: + fd = os.open(os.ctermid(), os.O_RDONLY) + try: + cr = ioctl_gwinsz(fd) + finally: + os.close(fd) + except Exception: + pass + if not cr or not cr[0] or not cr[1]: + cr = (os.environ.get('LINES', 25), + os.environ.get('COLUMNS', DEFAULT_COLUMNS)) + return int(cr[1]), int(cr[0]) + + +def echo_via_pager(text_or_generator, color=None): + """This function takes a text and shows it via an environment specific + pager on stdout. + + .. versionchanged:: 3.0 + Added the `color` flag. + + :param text_or_generator: the text to page, or alternatively, a + generator emitting the text to page. + :param color: controls if the pager supports ANSI colors or not. The + default is autodetection. + """ + color = resolve_color_default(color) + + if inspect.isgeneratorfunction(text_or_generator): + i = text_or_generator() + elif isinstance(text_or_generator, string_types): + i = [text_or_generator] + else: + i = iter(text_or_generator) + + # convert every element of i to a text type if necessary + text_generator = (el if isinstance(el, string_types) else text_type(el) + for el in i) + + from ._termui_impl import pager + return pager(itertools.chain(text_generator, "\n"), color) + + +def progressbar(iterable=None, length=None, label=None, show_eta=True, + show_percent=None, show_pos=False, + item_show_func=None, fill_char='#', empty_char='-', + bar_template='%(label)s [%(bar)s] %(info)s', + info_sep=' ', width=36, file=None, color=None): + """This function creates an iterable context manager that can be used + to iterate over something while showing a progress bar. It will + either iterate over the `iterable` or `length` items (that are counted + up). While iteration happens, this function will print a rendered + progress bar to the given `file` (defaults to stdout) and will attempt + to calculate remaining time and more. By default, this progress bar + will not be rendered if the file is not a terminal. + + The context manager creates the progress bar. When the context + manager is entered the progress bar is already displayed. With every + iteration over the progress bar, the iterable passed to the bar is + advanced and the bar is updated. When the context manager exits, + a newline is printed and the progress bar is finalized on screen. + + No printing must happen or the progress bar will be unintentionally + destroyed. + + Example usage:: + + with progressbar(items) as bar: + for item in bar: + do_something_with(item) + + Alternatively, if no iterable is specified, one can manually update the + progress bar through the `update()` method instead of directly + iterating over the progress bar. The update method accepts the number + of steps to increment the bar with:: + + with progressbar(length=chunks.total_bytes) as bar: + for chunk in chunks: + process_chunk(chunk) + bar.update(chunks.bytes) + + .. versionadded:: 2.0 + + .. versionadded:: 4.0 + Added the `color` parameter. Added a `update` method to the + progressbar object. + + :param iterable: an iterable to iterate over. If not provided the length + is required. + :param length: the number of items to iterate over. By default the + progressbar will attempt to ask the iterator about its + length, which might or might not work. If an iterable is + also provided this parameter can be used to override the + length. If an iterable is not provided the progress bar + will iterate over a range of that length. + :param label: the label to show next to the progress bar. + :param show_eta: enables or disables the estimated time display. This is + automatically disabled if the length cannot be + determined. + :param show_percent: enables or disables the percentage display. The + default is `True` if the iterable has a length or + `False` if not. + :param show_pos: enables or disables the absolute position display. The + default is `False`. + :param item_show_func: a function called with the current item which + can return a string to show the current item + next to the progress bar. Note that the current + item can be `None`! + :param fill_char: the character to use to show the filled part of the + progress bar. + :param empty_char: the character to use to show the non-filled part of + the progress bar. + :param bar_template: the format string to use as template for the bar. + The parameters in it are ``label`` for the label, + ``bar`` for the progress bar and ``info`` for the + info section. + :param info_sep: the separator between multiple info items (eta etc.) + :param width: the width of the progress bar in characters, 0 means full + terminal width + :param file: the file to write to. If this is not a terminal then + only the label is printed. + :param color: controls if the terminal supports ANSI colors or not. The + default is autodetection. This is only needed if ANSI + codes are included anywhere in the progress bar output + which is not the case by default. + """ + from ._termui_impl import ProgressBar + color = resolve_color_default(color) + return ProgressBar(iterable=iterable, length=length, show_eta=show_eta, + show_percent=show_percent, show_pos=show_pos, + item_show_func=item_show_func, fill_char=fill_char, + empty_char=empty_char, bar_template=bar_template, + info_sep=info_sep, file=file, label=label, + width=width, color=color) + + +def clear(): + """Clears the terminal screen. This will have the effect of clearing + the whole visible space of the terminal and moving the cursor to the + top left. This does not do anything if not connected to a terminal. + + .. versionadded:: 2.0 + """ + if not isatty(sys.stdout): + return + # If we're on Windows and we don't have colorama available, then we + # clear the screen by shelling out. Otherwise we can use an escape + # sequence. + if WIN: + os.system('cls') + else: + sys.stdout.write('\033[2J\033[1;1H') + + +def style(text, fg=None, bg=None, bold=None, dim=None, underline=None, + blink=None, reverse=None, reset=True): + """Styles a text with ANSI styles and returns the new string. By + default the styling is self contained which means that at the end + of the string a reset code is issued. This can be prevented by + passing ``reset=False``. + + Examples:: + + click.echo(click.style('Hello World!', fg='green')) + click.echo(click.style('ATTENTION!', blink=True)) + click.echo(click.style('Some things', reverse=True, fg='cyan')) + + Supported color names: + + * ``black`` (might be a gray) + * ``red`` + * ``green`` + * ``yellow`` (might be an orange) + * ``blue`` + * ``magenta`` + * ``cyan`` + * ``white`` (might be light gray) + * ``bright_black`` + * ``bright_red`` + * ``bright_green`` + * ``bright_yellow`` + * ``bright_blue`` + * ``bright_magenta`` + * ``bright_cyan`` + * ``bright_white`` + * ``reset`` (reset the color code only) + + .. versionadded:: 2.0 + + .. versionadded:: 7.0 + Added support for bright colors. + + :param text: the string to style with ansi codes. + :param fg: if provided this will become the foreground color. + :param bg: if provided this will become the background color. + :param bold: if provided this will enable or disable bold mode. + :param dim: if provided this will enable or disable dim mode. This is + badly supported. + :param underline: if provided this will enable or disable underline. + :param blink: if provided this will enable or disable blinking. + :param reverse: if provided this will enable or disable inverse + rendering (foreground becomes background and the + other way round). + :param reset: by default a reset-all code is added at the end of the + string which means that styles do not carry over. This + can be disabled to compose styles. + """ + bits = [] + if fg: + try: + bits.append('\033[%dm' % (_ansi_colors[fg])) + except KeyError: + raise TypeError('Unknown color %r' % fg) + if bg: + try: + bits.append('\033[%dm' % (_ansi_colors[bg] + 10)) + except KeyError: + raise TypeError('Unknown color %r' % bg) + if bold is not None: + bits.append('\033[%dm' % (1 if bold else 22)) + if dim is not None: + bits.append('\033[%dm' % (2 if dim else 22)) + if underline is not None: + bits.append('\033[%dm' % (4 if underline else 24)) + if blink is not None: + bits.append('\033[%dm' % (5 if blink else 25)) + if reverse is not None: + bits.append('\033[%dm' % (7 if reverse else 27)) + bits.append(text) + if reset: + bits.append(_ansi_reset_all) + return ''.join(bits) + + +def unstyle(text): + """Removes ANSI styling information from a string. Usually it's not + necessary to use this function as Click's echo function will + automatically remove styling if necessary. + + .. versionadded:: 2.0 + + :param text: the text to remove style information from. + """ + return strip_ansi(text) + + +def secho(message=None, file=None, nl=True, err=False, color=None, **styles): + """This function combines :func:`echo` and :func:`style` into one + call. As such the following two calls are the same:: + + click.secho('Hello World!', fg='green') + click.echo(click.style('Hello World!', fg='green')) + + All keyword arguments are forwarded to the underlying functions + depending on which one they go with. + + .. versionadded:: 2.0 + """ + if message is not None: + message = style(message, **styles) + return echo(message, file=file, nl=nl, err=err, color=color) + + +def edit(text=None, editor=None, env=None, require_save=True, + extension='.txt', filename=None): + r"""Edits the given text in the defined editor. If an editor is given + (should be the full path to the executable but the regular operating + system search path is used for finding the executable) it overrides + the detected editor. Optionally, some environment variables can be + used. If the editor is closed without changes, `None` is returned. In + case a file is edited directly the return value is always `None` and + `require_save` and `extension` are ignored. + + If the editor cannot be opened a :exc:`UsageError` is raised. + + Note for Windows: to simplify cross-platform usage, the newlines are + automatically converted from POSIX to Windows and vice versa. As such, + the message here will have ``\n`` as newline markers. + + :param text: the text to edit. + :param editor: optionally the editor to use. Defaults to automatic + detection. + :param env: environment variables to forward to the editor. + :param require_save: if this is true, then not saving in the editor + will make the return value become `None`. + :param extension: the extension to tell the editor about. This defaults + to `.txt` but changing this might change syntax + highlighting. + :param filename: if provided it will edit this file instead of the + provided text contents. It will not use a temporary + file as an indirection in that case. + """ + from ._termui_impl import Editor + editor = Editor(editor=editor, env=env, require_save=require_save, + extension=extension) + if filename is None: + return editor.edit(text) + editor.edit_file(filename) + + +def launch(url, wait=False, locate=False): + """This function launches the given URL (or filename) in the default + viewer application for this file type. If this is an executable, it + might launch the executable in a new session. The return value is + the exit code of the launched application. Usually, ``0`` indicates + success. + + Examples:: + + click.launch('https://click.palletsprojects.com/') + click.launch('/my/downloaded/file', locate=True) + + .. versionadded:: 2.0 + + :param url: URL or filename of the thing to launch. + :param wait: waits for the program to stop. + :param locate: if this is set to `True` then instead of launching the + application associated with the URL it will attempt to + launch a file manager with the file located. This + might have weird effects if the URL does not point to + the filesystem. + """ + from ._termui_impl import open_url + return open_url(url, wait=wait, locate=locate) + + +# If this is provided, getchar() calls into this instead. This is used +# for unittesting purposes. +_getchar = None + + +def getchar(echo=False): + """Fetches a single character from the terminal and returns it. This + will always return a unicode character and under certain rare + circumstances this might return more than one character. The + situations which more than one character is returned is when for + whatever reason multiple characters end up in the terminal buffer or + standard input was not actually a terminal. + + Note that this will always read from the terminal, even if something + is piped into the standard input. + + Note for Windows: in rare cases when typing non-ASCII characters, this + function might wait for a second character and then return both at once. + This is because certain Unicode characters look like special-key markers. + + .. versionadded:: 2.0 + + :param echo: if set to `True`, the character read will also show up on + the terminal. The default is to not show it. + """ + f = _getchar + if f is None: + from ._termui_impl import getchar as f + return f(echo) + + +def raw_terminal(): + from ._termui_impl import raw_terminal as f + return f() + + +def pause(info='Press any key to continue ...', err=False): + """This command stops execution and waits for the user to press any + key to continue. This is similar to the Windows batch "pause" + command. If the program is not run through a terminal, this command + will instead do nothing. + + .. versionadded:: 2.0 + + .. versionadded:: 4.0 + Added the `err` parameter. + + :param info: the info string to print before pausing. + :param err: if set to message goes to ``stderr`` instead of + ``stdout``, the same as with echo. + """ + if not isatty(sys.stdin) or not isatty(sys.stdout): + return + try: + if info: + echo(info, nl=False, err=err) + try: + getchar() + except (KeyboardInterrupt, EOFError): + pass + finally: + if info: + echo(err=err) diff --git a/week-0/day-3/my_todo_app/venv/lib/python3.6/site-packages/click/testing.py b/week-0/day-3/my_todo_app/venv/lib/python3.6/site-packages/click/testing.py new file mode 100644 index 00000000..1b2924e0 --- /dev/null +++ b/week-0/day-3/my_todo_app/venv/lib/python3.6/site-packages/click/testing.py @@ -0,0 +1,374 @@ +import os +import sys +import shutil +import tempfile +import contextlib +import shlex + +from ._compat import iteritems, PY2, string_types + + +# If someone wants to vendor click, we want to ensure the +# correct package is discovered. Ideally we could use a +# relative import here but unfortunately Python does not +# support that. +clickpkg = sys.modules[__name__.rsplit('.', 1)[0]] + + +if PY2: + from cStringIO import StringIO +else: + import io + from ._compat import _find_binary_reader + + +class EchoingStdin(object): + + def __init__(self, input, output): + self._input = input + self._output = output + + def __getattr__(self, x): + return getattr(self._input, x) + + def _echo(self, rv): + self._output.write(rv) + return rv + + def read(self, n=-1): + return self._echo(self._input.read(n)) + + def readline(self, n=-1): + return self._echo(self._input.readline(n)) + + def readlines(self): + return [self._echo(x) for x in self._input.readlines()] + + def __iter__(self): + return iter(self._echo(x) for x in self._input) + + def __repr__(self): + return repr(self._input) + + +def make_input_stream(input, charset): + # Is already an input stream. + if hasattr(input, 'read'): + if PY2: + return input + rv = _find_binary_reader(input) + if rv is not None: + return rv + raise TypeError('Could not find binary reader for input stream.') + + if input is None: + input = b'' + elif not isinstance(input, bytes): + input = input.encode(charset) + if PY2: + return StringIO(input) + return io.BytesIO(input) + + +class Result(object): + """Holds the captured result of an invoked CLI script.""" + + def __init__(self, runner, stdout_bytes, stderr_bytes, exit_code, + exception, exc_info=None): + #: The runner that created the result + self.runner = runner + #: The standard output as bytes. + self.stdout_bytes = stdout_bytes + #: The standard error as bytes, or False(y) if not available + self.stderr_bytes = stderr_bytes + #: The exit code as integer. + self.exit_code = exit_code + #: The exception that happened if one did. + self.exception = exception + #: The traceback + self.exc_info = exc_info + + @property + def output(self): + """The (standard) output as unicode string.""" + return self.stdout + + @property + def stdout(self): + """The standard output as unicode string.""" + return self.stdout_bytes.decode(self.runner.charset, 'replace') \ + .replace('\r\n', '\n') + + @property + def stderr(self): + """The standard error as unicode string.""" + if not self.stderr_bytes: + raise ValueError("stderr not separately captured") + return self.stderr_bytes.decode(self.runner.charset, 'replace') \ + .replace('\r\n', '\n') + + + def __repr__(self): + return '<%s %s>' % ( + type(self).__name__, + self.exception and repr(self.exception) or 'okay', + ) + + +class CliRunner(object): + """The CLI runner provides functionality to invoke a Click command line + script for unittesting purposes in a isolated environment. This only + works in single-threaded systems without any concurrency as it changes the + global interpreter state. + + :param charset: the character set for the input and output data. This is + UTF-8 by default and should not be changed currently as + the reporting to Click only works in Python 2 properly. + :param env: a dictionary with environment variables for overriding. + :param echo_stdin: if this is set to `True`, then reading from stdin writes + to stdout. This is useful for showing examples in + some circumstances. Note that regular prompts + will automatically echo the input. + :param mix_stderr: if this is set to `False`, then stdout and stderr are + preserved as independent streams. This is useful for + Unix-philosophy apps that have predictable stdout and + noisy stderr, such that each may be measured + independently + """ + + def __init__(self, charset=None, env=None, echo_stdin=False, + mix_stderr=True): + if charset is None: + charset = 'utf-8' + self.charset = charset + self.env = env or {} + self.echo_stdin = echo_stdin + self.mix_stderr = mix_stderr + + def get_default_prog_name(self, cli): + """Given a command object it will return the default program name + for it. The default is the `name` attribute or ``"root"`` if not + set. + """ + return cli.name or 'root' + + def make_env(self, overrides=None): + """Returns the environment overrides for invoking a script.""" + rv = dict(self.env) + if overrides: + rv.update(overrides) + return rv + + @contextlib.contextmanager + def isolation(self, input=None, env=None, color=False): + """A context manager that sets up the isolation for invoking of a + command line tool. This sets up stdin with the given input data + and `os.environ` with the overrides from the given dictionary. + This also rebinds some internals in Click to be mocked (like the + prompt functionality). + + This is automatically done in the :meth:`invoke` method. + + .. versionadded:: 4.0 + The ``color`` parameter was added. + + :param input: the input stream to put into sys.stdin. + :param env: the environment overrides as dictionary. + :param color: whether the output should contain color codes. The + application can still override this explicitly. + """ + input = make_input_stream(input, self.charset) + + old_stdin = sys.stdin + old_stdout = sys.stdout + old_stderr = sys.stderr + old_forced_width = clickpkg.formatting.FORCED_WIDTH + clickpkg.formatting.FORCED_WIDTH = 80 + + env = self.make_env(env) + + if PY2: + bytes_output = StringIO() + if self.echo_stdin: + input = EchoingStdin(input, bytes_output) + sys.stdout = bytes_output + if not self.mix_stderr: + bytes_error = StringIO() + sys.stderr = bytes_error + else: + bytes_output = io.BytesIO() + if self.echo_stdin: + input = EchoingStdin(input, bytes_output) + input = io.TextIOWrapper(input, encoding=self.charset) + sys.stdout = io.TextIOWrapper( + bytes_output, encoding=self.charset) + if not self.mix_stderr: + bytes_error = io.BytesIO() + sys.stderr = io.TextIOWrapper( + bytes_error, encoding=self.charset) + + if self.mix_stderr: + sys.stderr = sys.stdout + + sys.stdin = input + + def visible_input(prompt=None): + sys.stdout.write(prompt or '') + val = input.readline().rstrip('\r\n') + sys.stdout.write(val + '\n') + sys.stdout.flush() + return val + + def hidden_input(prompt=None): + sys.stdout.write((prompt or '') + '\n') + sys.stdout.flush() + return input.readline().rstrip('\r\n') + + def _getchar(echo): + char = sys.stdin.read(1) + if echo: + sys.stdout.write(char) + sys.stdout.flush() + return char + + default_color = color + + def should_strip_ansi(stream=None, color=None): + if color is None: + return not default_color + return not color + + old_visible_prompt_func = clickpkg.termui.visible_prompt_func + old_hidden_prompt_func = clickpkg.termui.hidden_prompt_func + old__getchar_func = clickpkg.termui._getchar + old_should_strip_ansi = clickpkg.utils.should_strip_ansi + clickpkg.termui.visible_prompt_func = visible_input + clickpkg.termui.hidden_prompt_func = hidden_input + clickpkg.termui._getchar = _getchar + clickpkg.utils.should_strip_ansi = should_strip_ansi + + old_env = {} + try: + for key, value in iteritems(env): + old_env[key] = os.environ.get(key) + if value is None: + try: + del os.environ[key] + except Exception: + pass + else: + os.environ[key] = value + yield (bytes_output, not self.mix_stderr and bytes_error) + finally: + for key, value in iteritems(old_env): + if value is None: + try: + del os.environ[key] + except Exception: + pass + else: + os.environ[key] = value + sys.stdout = old_stdout + sys.stderr = old_stderr + sys.stdin = old_stdin + clickpkg.termui.visible_prompt_func = old_visible_prompt_func + clickpkg.termui.hidden_prompt_func = old_hidden_prompt_func + clickpkg.termui._getchar = old__getchar_func + clickpkg.utils.should_strip_ansi = old_should_strip_ansi + clickpkg.formatting.FORCED_WIDTH = old_forced_width + + def invoke(self, cli, args=None, input=None, env=None, + catch_exceptions=True, color=False, mix_stderr=False, **extra): + """Invokes a command in an isolated environment. The arguments are + forwarded directly to the command line script, the `extra` keyword + arguments are passed to the :meth:`~clickpkg.Command.main` function of + the command. + + This returns a :class:`Result` object. + + .. versionadded:: 3.0 + The ``catch_exceptions`` parameter was added. + + .. versionchanged:: 3.0 + The result object now has an `exc_info` attribute with the + traceback if available. + + .. versionadded:: 4.0 + The ``color`` parameter was added. + + :param cli: the command to invoke + :param args: the arguments to invoke. It may be given as an iterable + or a string. When given as string it will be interpreted + as a Unix shell command. More details at + :func:`shlex.split`. + :param input: the input data for `sys.stdin`. + :param env: the environment overrides. + :param catch_exceptions: Whether to catch any other exceptions than + ``SystemExit``. + :param extra: the keyword arguments to pass to :meth:`main`. + :param color: whether the output should contain color codes. The + application can still override this explicitly. + """ + exc_info = None + with self.isolation(input=input, env=env, color=color) as outstreams: + exception = None + exit_code = 0 + + if isinstance(args, string_types): + args = shlex.split(args) + + try: + prog_name = extra.pop("prog_name") + except KeyError: + prog_name = self.get_default_prog_name(cli) + + try: + cli.main(args=args or (), prog_name=prog_name, **extra) + except SystemExit as e: + exc_info = sys.exc_info() + exit_code = e.code + if exit_code is None: + exit_code = 0 + + if exit_code != 0: + exception = e + + if not isinstance(exit_code, int): + sys.stdout.write(str(exit_code)) + sys.stdout.write('\n') + exit_code = 1 + + except Exception as e: + if not catch_exceptions: + raise + exception = e + exit_code = 1 + exc_info = sys.exc_info() + finally: + sys.stdout.flush() + stdout = outstreams[0].getvalue() + stderr = outstreams[1] and outstreams[1].getvalue() + + return Result(runner=self, + stdout_bytes=stdout, + stderr_bytes=stderr, + exit_code=exit_code, + exception=exception, + exc_info=exc_info) + + @contextlib.contextmanager + def isolated_filesystem(self): + """A context manager that creates a temporary folder and changes + the current working directory to it for isolated filesystem tests. + """ + cwd = os.getcwd() + t = tempfile.mkdtemp() + os.chdir(t) + try: + yield t + finally: + os.chdir(cwd) + try: + shutil.rmtree(t) + except (OSError, IOError): + pass diff --git a/week-0/day-3/my_todo_app/venv/lib/python3.6/site-packages/click/types.py b/week-0/day-3/my_todo_app/venv/lib/python3.6/site-packages/click/types.py new file mode 100644 index 00000000..1f88032f --- /dev/null +++ b/week-0/day-3/my_todo_app/venv/lib/python3.6/site-packages/click/types.py @@ -0,0 +1,668 @@ +import os +import stat +from datetime import datetime + +from ._compat import open_stream, text_type, filename_to_ui, \ + get_filesystem_encoding, get_streerror, _get_argv_encoding, PY2 +from .exceptions import BadParameter +from .utils import safecall, LazyFile + + +class ParamType(object): + """Helper for converting values through types. The following is + necessary for a valid type: + + * it needs a name + * it needs to pass through None unchanged + * it needs to convert from a string + * it needs to convert its result type through unchanged + (eg: needs to be idempotent) + * it needs to be able to deal with param and context being `None`. + This can be the case when the object is used with prompt + inputs. + """ + is_composite = False + + #: the descriptive name of this type + name = None + + #: if a list of this type is expected and the value is pulled from a + #: string environment variable, this is what splits it up. `None` + #: means any whitespace. For all parameters the general rule is that + #: whitespace splits them up. The exception are paths and files which + #: are split by ``os.path.pathsep`` by default (":" on Unix and ";" on + #: Windows). + envvar_list_splitter = None + + def __call__(self, value, param=None, ctx=None): + if value is not None: + return self.convert(value, param, ctx) + + def get_metavar(self, param): + """Returns the metavar default for this param if it provides one.""" + + def get_missing_message(self, param): + """Optionally might return extra information about a missing + parameter. + + .. versionadded:: 2.0 + """ + + def convert(self, value, param, ctx): + """Converts the value. This is not invoked for values that are + `None` (the missing value). + """ + return value + + def split_envvar_value(self, rv): + """Given a value from an environment variable this splits it up + into small chunks depending on the defined envvar list splitter. + + If the splitter is set to `None`, which means that whitespace splits, + then leading and trailing whitespace is ignored. Otherwise, leading + and trailing splitters usually lead to empty items being included. + """ + return (rv or '').split(self.envvar_list_splitter) + + def fail(self, message, param=None, ctx=None): + """Helper method to fail with an invalid value message.""" + raise BadParameter(message, ctx=ctx, param=param) + + +class CompositeParamType(ParamType): + is_composite = True + + @property + def arity(self): + raise NotImplementedError() + + +class FuncParamType(ParamType): + + def __init__(self, func): + self.name = func.__name__ + self.func = func + + def convert(self, value, param, ctx): + try: + return self.func(value) + except ValueError: + try: + value = text_type(value) + except UnicodeError: + value = str(value).decode('utf-8', 'replace') + self.fail(value, param, ctx) + + +class UnprocessedParamType(ParamType): + name = 'text' + + def convert(self, value, param, ctx): + return value + + def __repr__(self): + return 'UNPROCESSED' + + +class StringParamType(ParamType): + name = 'text' + + def convert(self, value, param, ctx): + if isinstance(value, bytes): + enc = _get_argv_encoding() + try: + value = value.decode(enc) + except UnicodeError: + fs_enc = get_filesystem_encoding() + if fs_enc != enc: + try: + value = value.decode(fs_enc) + except UnicodeError: + value = value.decode('utf-8', 'replace') + return value + return value + + def __repr__(self): + return 'STRING' + + +class Choice(ParamType): + """The choice type allows a value to be checked against a fixed set + of supported values. All of these values have to be strings. + + You should only pass a list or tuple of choices. Other iterables + (like generators) may lead to surprising results. + + See :ref:`choice-opts` for an example. + + :param case_sensitive: Set to false to make choices case + insensitive. Defaults to true. + """ + + name = 'choice' + + def __init__(self, choices, case_sensitive=True): + self.choices = choices + self.case_sensitive = case_sensitive + + def get_metavar(self, param): + return '[%s]' % '|'.join(self.choices) + + def get_missing_message(self, param): + return 'Choose from:\n\t%s.' % ',\n\t'.join(self.choices) + + def convert(self, value, param, ctx): + # Exact match + if value in self.choices: + return value + + # Match through normalization and case sensitivity + # first do token_normalize_func, then lowercase + # preserve original `value` to produce an accurate message in + # `self.fail` + normed_value = value + normed_choices = self.choices + + if ctx is not None and \ + ctx.token_normalize_func is not None: + normed_value = ctx.token_normalize_func(value) + normed_choices = [ctx.token_normalize_func(choice) for choice in + self.choices] + + if not self.case_sensitive: + normed_value = normed_value.lower() + normed_choices = [choice.lower() for choice in normed_choices] + + if normed_value in normed_choices: + return normed_value + + self.fail('invalid choice: %s. (choose from %s)' % + (value, ', '.join(self.choices)), param, ctx) + + def __repr__(self): + return 'Choice(%r)' % list(self.choices) + + +class DateTime(ParamType): + """The DateTime type converts date strings into `datetime` objects. + + The format strings which are checked are configurable, but default to some + common (non-timezone aware) ISO 8601 formats. + + When specifying *DateTime* formats, you should only pass a list or a tuple. + Other iterables, like generators, may lead to surprising results. + + The format strings are processed using ``datetime.strptime``, and this + consequently defines the format strings which are allowed. + + Parsing is tried using each format, in order, and the first format which + parses successfully is used. + + :param formats: A list or tuple of date format strings, in the order in + which they should be tried. Defaults to + ``'%Y-%m-%d'``, ``'%Y-%m-%dT%H:%M:%S'``, + ``'%Y-%m-%d %H:%M:%S'``. + """ + name = 'datetime' + + def __init__(self, formats=None): + self.formats = formats or [ + '%Y-%m-%d', + '%Y-%m-%dT%H:%M:%S', + '%Y-%m-%d %H:%M:%S' + ] + + def get_metavar(self, param): + return '[{}]'.format('|'.join(self.formats)) + + def _try_to_convert_date(self, value, format): + try: + return datetime.strptime(value, format) + except ValueError: + return None + + def convert(self, value, param, ctx): + # Exact match + for format in self.formats: + dtime = self._try_to_convert_date(value, format) + if dtime: + return dtime + + self.fail( + 'invalid datetime format: {}. (choose from {})'.format( + value, ', '.join(self.formats))) + + def __repr__(self): + return 'DateTime' + + +class IntParamType(ParamType): + name = 'integer' + + def convert(self, value, param, ctx): + try: + return int(value) + except (ValueError, UnicodeError): + self.fail('%s is not a valid integer' % value, param, ctx) + + def __repr__(self): + return 'INT' + + +class IntRange(IntParamType): + """A parameter that works similar to :data:`click.INT` but restricts + the value to fit into a range. The default behavior is to fail if the + value falls outside the range, but it can also be silently clamped + between the two edges. + + See :ref:`ranges` for an example. + """ + name = 'integer range' + + def __init__(self, min=None, max=None, clamp=False): + self.min = min + self.max = max + self.clamp = clamp + + def convert(self, value, param, ctx): + rv = IntParamType.convert(self, value, param, ctx) + if self.clamp: + if self.min is not None and rv < self.min: + return self.min + if self.max is not None and rv > self.max: + return self.max + if self.min is not None and rv < self.min or \ + self.max is not None and rv > self.max: + if self.min is None: + self.fail('%s is bigger than the maximum valid value ' + '%s.' % (rv, self.max), param, ctx) + elif self.max is None: + self.fail('%s is smaller than the minimum valid value ' + '%s.' % (rv, self.min), param, ctx) + else: + self.fail('%s is not in the valid range of %s to %s.' + % (rv, self.min, self.max), param, ctx) + return rv + + def __repr__(self): + return 'IntRange(%r, %r)' % (self.min, self.max) + + +class FloatParamType(ParamType): + name = 'float' + + def convert(self, value, param, ctx): + try: + return float(value) + except (UnicodeError, ValueError): + self.fail('%s is not a valid floating point value' % + value, param, ctx) + + def __repr__(self): + return 'FLOAT' + + +class FloatRange(FloatParamType): + """A parameter that works similar to :data:`click.FLOAT` but restricts + the value to fit into a range. The default behavior is to fail if the + value falls outside the range, but it can also be silently clamped + between the two edges. + + See :ref:`ranges` for an example. + """ + name = 'float range' + + def __init__(self, min=None, max=None, clamp=False): + self.min = min + self.max = max + self.clamp = clamp + + def convert(self, value, param, ctx): + rv = FloatParamType.convert(self, value, param, ctx) + if self.clamp: + if self.min is not None and rv < self.min: + return self.min + if self.max is not None and rv > self.max: + return self.max + if self.min is not None and rv < self.min or \ + self.max is not None and rv > self.max: + if self.min is None: + self.fail('%s is bigger than the maximum valid value ' + '%s.' % (rv, self.max), param, ctx) + elif self.max is None: + self.fail('%s is smaller than the minimum valid value ' + '%s.' % (rv, self.min), param, ctx) + else: + self.fail('%s is not in the valid range of %s to %s.' + % (rv, self.min, self.max), param, ctx) + return rv + + def __repr__(self): + return 'FloatRange(%r, %r)' % (self.min, self.max) + + +class BoolParamType(ParamType): + name = 'boolean' + + def convert(self, value, param, ctx): + if isinstance(value, bool): + return bool(value) + value = value.lower() + if value in ('true', 't', '1', 'yes', 'y'): + return True + elif value in ('false', 'f', '0', 'no', 'n'): + return False + self.fail('%s is not a valid boolean' % value, param, ctx) + + def __repr__(self): + return 'BOOL' + + +class UUIDParameterType(ParamType): + name = 'uuid' + + def convert(self, value, param, ctx): + import uuid + try: + if PY2 and isinstance(value, text_type): + value = value.encode('ascii') + return uuid.UUID(value) + except (UnicodeError, ValueError): + self.fail('%s is not a valid UUID value' % value, param, ctx) + + def __repr__(self): + return 'UUID' + + +class File(ParamType): + """Declares a parameter to be a file for reading or writing. The file + is automatically closed once the context tears down (after the command + finished working). + + Files can be opened for reading or writing. The special value ``-`` + indicates stdin or stdout depending on the mode. + + By default, the file is opened for reading text data, but it can also be + opened in binary mode or for writing. The encoding parameter can be used + to force a specific encoding. + + The `lazy` flag controls if the file should be opened immediately or upon + first IO. The default is to be non-lazy for standard input and output + streams as well as files opened for reading, `lazy` otherwise. When opening a + file lazily for reading, it is still opened temporarily for validation, but + will not be held open until first IO. lazy is mainly useful when opening + for writing to avoid creating the file until it is needed. + + Starting with Click 2.0, files can also be opened atomically in which + case all writes go into a separate file in the same folder and upon + completion the file will be moved over to the original location. This + is useful if a file regularly read by other users is modified. + + See :ref:`file-args` for more information. + """ + name = 'filename' + envvar_list_splitter = os.path.pathsep + + def __init__(self, mode='r', encoding=None, errors='strict', lazy=None, + atomic=False): + self.mode = mode + self.encoding = encoding + self.errors = errors + self.lazy = lazy + self.atomic = atomic + + def resolve_lazy_flag(self, value): + if self.lazy is not None: + return self.lazy + if value == '-': + return False + elif 'w' in self.mode: + return True + return False + + def convert(self, value, param, ctx): + try: + if hasattr(value, 'read') or hasattr(value, 'write'): + return value + + lazy = self.resolve_lazy_flag(value) + + if lazy: + f = LazyFile(value, self.mode, self.encoding, self.errors, + atomic=self.atomic) + if ctx is not None: + ctx.call_on_close(f.close_intelligently) + return f + + f, should_close = open_stream(value, self.mode, + self.encoding, self.errors, + atomic=self.atomic) + # If a context is provided, we automatically close the file + # at the end of the context execution (or flush out). If a + # context does not exist, it's the caller's responsibility to + # properly close the file. This for instance happens when the + # type is used with prompts. + if ctx is not None: + if should_close: + ctx.call_on_close(safecall(f.close)) + else: + ctx.call_on_close(safecall(f.flush)) + return f + except (IOError, OSError) as e: + self.fail('Could not open file: %s: %s' % ( + filename_to_ui(value), + get_streerror(e), + ), param, ctx) + + +class Path(ParamType): + """The path type is similar to the :class:`File` type but it performs + different checks. First of all, instead of returning an open file + handle it returns just the filename. Secondly, it can perform various + basic checks about what the file or directory should be. + + .. versionchanged:: 6.0 + `allow_dash` was added. + + :param exists: if set to true, the file or directory needs to exist for + this value to be valid. If this is not required and a + file does indeed not exist, then all further checks are + silently skipped. + :param file_okay: controls if a file is a possible value. + :param dir_okay: controls if a directory is a possible value. + :param writable: if true, a writable check is performed. + :param readable: if true, a readable check is performed. + :param resolve_path: if this is true, then the path is fully resolved + before the value is passed onwards. This means + that it's absolute and symlinks are resolved. It + will not expand a tilde-prefix, as this is + supposed to be done by the shell only. + :param allow_dash: If this is set to `True`, a single dash to indicate + standard streams is permitted. + :param path_type: optionally a string type that should be used to + represent the path. The default is `None` which + means the return value will be either bytes or + unicode depending on what makes most sense given the + input data Click deals with. + """ + envvar_list_splitter = os.path.pathsep + + def __init__(self, exists=False, file_okay=True, dir_okay=True, + writable=False, readable=True, resolve_path=False, + allow_dash=False, path_type=None): + self.exists = exists + self.file_okay = file_okay + self.dir_okay = dir_okay + self.writable = writable + self.readable = readable + self.resolve_path = resolve_path + self.allow_dash = allow_dash + self.type = path_type + + if self.file_okay and not self.dir_okay: + self.name = 'file' + self.path_type = 'File' + elif self.dir_okay and not self.file_okay: + self.name = 'directory' + self.path_type = 'Directory' + else: + self.name = 'path' + self.path_type = 'Path' + + def coerce_path_result(self, rv): + if self.type is not None and not isinstance(rv, self.type): + if self.type is text_type: + rv = rv.decode(get_filesystem_encoding()) + else: + rv = rv.encode(get_filesystem_encoding()) + return rv + + def convert(self, value, param, ctx): + rv = value + + is_dash = self.file_okay and self.allow_dash and rv in (b'-', '-') + + if not is_dash: + if self.resolve_path: + rv = os.path.realpath(rv) + + try: + st = os.stat(rv) + except OSError: + if not self.exists: + return self.coerce_path_result(rv) + self.fail('%s "%s" does not exist.' % ( + self.path_type, + filename_to_ui(value) + ), param, ctx) + + if not self.file_okay and stat.S_ISREG(st.st_mode): + self.fail('%s "%s" is a file.' % ( + self.path_type, + filename_to_ui(value) + ), param, ctx) + if not self.dir_okay and stat.S_ISDIR(st.st_mode): + self.fail('%s "%s" is a directory.' % ( + self.path_type, + filename_to_ui(value) + ), param, ctx) + if self.writable and not os.access(value, os.W_OK): + self.fail('%s "%s" is not writable.' % ( + self.path_type, + filename_to_ui(value) + ), param, ctx) + if self.readable and not os.access(value, os.R_OK): + self.fail('%s "%s" is not readable.' % ( + self.path_type, + filename_to_ui(value) + ), param, ctx) + + return self.coerce_path_result(rv) + + +class Tuple(CompositeParamType): + """The default behavior of Click is to apply a type on a value directly. + This works well in most cases, except for when `nargs` is set to a fixed + count and different types should be used for different items. In this + case the :class:`Tuple` type can be used. This type can only be used + if `nargs` is set to a fixed number. + + For more information see :ref:`tuple-type`. + + This can be selected by using a Python tuple literal as a type. + + :param types: a list of types that should be used for the tuple items. + """ + + def __init__(self, types): + self.types = [convert_type(ty) for ty in types] + + @property + def name(self): + return "<" + " ".join(ty.name for ty in self.types) + ">" + + @property + def arity(self): + return len(self.types) + + def convert(self, value, param, ctx): + if len(value) != len(self.types): + raise TypeError('It would appear that nargs is set to conflict ' + 'with the composite type arity.') + return tuple(ty(x, param, ctx) for ty, x in zip(self.types, value)) + + +def convert_type(ty, default=None): + """Converts a callable or python ty into the most appropriate param + ty. + """ + guessed_type = False + if ty is None and default is not None: + if isinstance(default, tuple): + ty = tuple(map(type, default)) + else: + ty = type(default) + guessed_type = True + + if isinstance(ty, tuple): + return Tuple(ty) + if isinstance(ty, ParamType): + return ty + if ty is text_type or ty is str or ty is None: + return STRING + if ty is int: + return INT + # Booleans are only okay if not guessed. This is done because for + # flags the default value is actually a bit of a lie in that it + # indicates which of the flags is the one we want. See get_default() + # for more information. + if ty is bool and not guessed_type: + return BOOL + if ty is float: + return FLOAT + if guessed_type: + return STRING + + # Catch a common mistake + if __debug__: + try: + if issubclass(ty, ParamType): + raise AssertionError('Attempted to use an uninstantiated ' + 'parameter type (%s).' % ty) + except TypeError: + pass + return FuncParamType(ty) + + +#: A dummy parameter type that just does nothing. From a user's +#: perspective this appears to just be the same as `STRING` but internally +#: no string conversion takes place. This is necessary to achieve the +#: same bytes/unicode behavior on Python 2/3 in situations where you want +#: to not convert argument types. This is usually useful when working +#: with file paths as they can appear in bytes and unicode. +#: +#: For path related uses the :class:`Path` type is a better choice but +#: there are situations where an unprocessed type is useful which is why +#: it is is provided. +#: +#: .. versionadded:: 4.0 +UNPROCESSED = UnprocessedParamType() + +#: A unicode string parameter type which is the implicit default. This +#: can also be selected by using ``str`` as type. +STRING = StringParamType() + +#: An integer parameter. This can also be selected by using ``int`` as +#: type. +INT = IntParamType() + +#: A floating point value parameter. This can also be selected by using +#: ``float`` as type. +FLOAT = FloatParamType() + +#: A boolean parameter. This is the default for boolean flags. This can +#: also be selected by using ``bool`` as a type. +BOOL = BoolParamType() + +#: A UUID parameter. +UUID = UUIDParameterType() diff --git a/week-0/day-3/my_todo_app/venv/lib/python3.6/site-packages/click/utils.py b/week-0/day-3/my_todo_app/venv/lib/python3.6/site-packages/click/utils.py new file mode 100644 index 00000000..fc84369f --- /dev/null +++ b/week-0/day-3/my_todo_app/venv/lib/python3.6/site-packages/click/utils.py @@ -0,0 +1,440 @@ +import os +import sys + +from .globals import resolve_color_default + +from ._compat import text_type, open_stream, get_filesystem_encoding, \ + get_streerror, string_types, PY2, binary_streams, text_streams, \ + filename_to_ui, auto_wrap_for_ansi, strip_ansi, should_strip_ansi, \ + _default_text_stdout, _default_text_stderr, is_bytes, WIN + +if not PY2: + from ._compat import _find_binary_writer +elif WIN: + from ._winconsole import _get_windows_argv, \ + _hash_py_argv, _initial_argv_hash + + +echo_native_types = string_types + (bytes, bytearray) + + +def _posixify(name): + return '-'.join(name.split()).lower() + + +def safecall(func): + """Wraps a function so that it swallows exceptions.""" + def wrapper(*args, **kwargs): + try: + return func(*args, **kwargs) + except Exception: + pass + return wrapper + + +def make_str(value): + """Converts a value into a valid string.""" + if isinstance(value, bytes): + try: + return value.decode(get_filesystem_encoding()) + except UnicodeError: + return value.decode('utf-8', 'replace') + return text_type(value) + + +def make_default_short_help(help, max_length=45): + """Return a condensed version of help string.""" + words = help.split() + total_length = 0 + result = [] + done = False + + for word in words: + if word[-1:] == '.': + done = True + new_length = result and 1 + len(word) or len(word) + if total_length + new_length > max_length: + result.append('...') + done = True + else: + if result: + result.append(' ') + result.append(word) + if done: + break + total_length += new_length + + return ''.join(result) + + +class LazyFile(object): + """A lazy file works like a regular file but it does not fully open + the file but it does perform some basic checks early to see if the + filename parameter does make sense. This is useful for safely opening + files for writing. + """ + + def __init__(self, filename, mode='r', encoding=None, errors='strict', + atomic=False): + self.name = filename + self.mode = mode + self.encoding = encoding + self.errors = errors + self.atomic = atomic + + if filename == '-': + self._f, self.should_close = open_stream(filename, mode, + encoding, errors) + else: + if 'r' in mode: + # Open and close the file in case we're opening it for + # reading so that we can catch at least some errors in + # some cases early. + open(filename, mode).close() + self._f = None + self.should_close = True + + def __getattr__(self, name): + return getattr(self.open(), name) + + def __repr__(self): + if self._f is not None: + return repr(self._f) + return '' % (self.name, self.mode) + + def open(self): + """Opens the file if it's not yet open. This call might fail with + a :exc:`FileError`. Not handling this error will produce an error + that Click shows. + """ + if self._f is not None: + return self._f + try: + rv, self.should_close = open_stream(self.name, self.mode, + self.encoding, + self.errors, + atomic=self.atomic) + except (IOError, OSError) as e: + from .exceptions import FileError + raise FileError(self.name, hint=get_streerror(e)) + self._f = rv + return rv + + def close(self): + """Closes the underlying file, no matter what.""" + if self._f is not None: + self._f.close() + + def close_intelligently(self): + """This function only closes the file if it was opened by the lazy + file wrapper. For instance this will never close stdin. + """ + if self.should_close: + self.close() + + def __enter__(self): + return self + + def __exit__(self, exc_type, exc_value, tb): + self.close_intelligently() + + def __iter__(self): + self.open() + return iter(self._f) + + +class KeepOpenFile(object): + + def __init__(self, file): + self._file = file + + def __getattr__(self, name): + return getattr(self._file, name) + + def __enter__(self): + return self + + def __exit__(self, exc_type, exc_value, tb): + pass + + def __repr__(self): + return repr(self._file) + + def __iter__(self): + return iter(self._file) + + +def echo(message=None, file=None, nl=True, err=False, color=None): + """Prints a message plus a newline to the given file or stdout. On + first sight, this looks like the print function, but it has improved + support for handling Unicode and binary data that does not fail no + matter how badly configured the system is. + + Primarily it means that you can print binary data as well as Unicode + data on both 2.x and 3.x to the given file in the most appropriate way + possible. This is a very carefree function in that it will try its + best to not fail. As of Click 6.0 this includes support for unicode + output on the Windows console. + + In addition to that, if `colorama`_ is installed, the echo function will + also support clever handling of ANSI codes. Essentially it will then + do the following: + + - add transparent handling of ANSI color codes on Windows. + - hide ANSI codes automatically if the destination file is not a + terminal. + + .. _colorama: https://pypi.org/project/colorama/ + + .. versionchanged:: 6.0 + As of Click 6.0 the echo function will properly support unicode + output on the windows console. Not that click does not modify + the interpreter in any way which means that `sys.stdout` or the + print statement or function will still not provide unicode support. + + .. versionchanged:: 2.0 + Starting with version 2.0 of Click, the echo function will work + with colorama if it's installed. + + .. versionadded:: 3.0 + The `err` parameter was added. + + .. versionchanged:: 4.0 + Added the `color` flag. + + :param message: the message to print + :param file: the file to write to (defaults to ``stdout``) + :param err: if set to true the file defaults to ``stderr`` instead of + ``stdout``. This is faster and easier than calling + :func:`get_text_stderr` yourself. + :param nl: if set to `True` (the default) a newline is printed afterwards. + :param color: controls if the terminal supports ANSI colors or not. The + default is autodetection. + """ + if file is None: + if err: + file = _default_text_stderr() + else: + file = _default_text_stdout() + + # Convert non bytes/text into the native string type. + if message is not None and not isinstance(message, echo_native_types): + message = text_type(message) + + if nl: + message = message or u'' + if isinstance(message, text_type): + message += u'\n' + else: + message += b'\n' + + # If there is a message, and we're in Python 3, and the value looks + # like bytes, we manually need to find the binary stream and write the + # message in there. This is done separately so that most stream + # types will work as you would expect. Eg: you can write to StringIO + # for other cases. + if message and not PY2 and is_bytes(message): + binary_file = _find_binary_writer(file) + if binary_file is not None: + file.flush() + binary_file.write(message) + binary_file.flush() + return + + # ANSI-style support. If there is no message or we are dealing with + # bytes nothing is happening. If we are connected to a file we want + # to strip colors. If we are on windows we either wrap the stream + # to strip the color or we use the colorama support to translate the + # ansi codes to API calls. + if message and not is_bytes(message): + color = resolve_color_default(color) + if should_strip_ansi(file, color): + message = strip_ansi(message) + elif WIN: + if auto_wrap_for_ansi is not None: + file = auto_wrap_for_ansi(file) + elif not color: + message = strip_ansi(message) + + if message: + file.write(message) + file.flush() + + +def get_binary_stream(name): + """Returns a system stream for byte processing. This essentially + returns the stream from the sys module with the given name but it + solves some compatibility issues between different Python versions. + Primarily this function is necessary for getting binary streams on + Python 3. + + :param name: the name of the stream to open. Valid names are ``'stdin'``, + ``'stdout'`` and ``'stderr'`` + """ + opener = binary_streams.get(name) + if opener is None: + raise TypeError('Unknown standard stream %r' % name) + return opener() + + +def get_text_stream(name, encoding=None, errors='strict'): + """Returns a system stream for text processing. This usually returns + a wrapped stream around a binary stream returned from + :func:`get_binary_stream` but it also can take shortcuts on Python 3 + for already correctly configured streams. + + :param name: the name of the stream to open. Valid names are ``'stdin'``, + ``'stdout'`` and ``'stderr'`` + :param encoding: overrides the detected default encoding. + :param errors: overrides the default error mode. + """ + opener = text_streams.get(name) + if opener is None: + raise TypeError('Unknown standard stream %r' % name) + return opener(encoding, errors) + + +def open_file(filename, mode='r', encoding=None, errors='strict', + lazy=False, atomic=False): + """This is similar to how the :class:`File` works but for manual + usage. Files are opened non lazy by default. This can open regular + files as well as stdin/stdout if ``'-'`` is passed. + + If stdin/stdout is returned the stream is wrapped so that the context + manager will not close the stream accidentally. This makes it possible + to always use the function like this without having to worry to + accidentally close a standard stream:: + + with open_file(filename) as f: + ... + + .. versionadded:: 3.0 + + :param filename: the name of the file to open (or ``'-'`` for stdin/stdout). + :param mode: the mode in which to open the file. + :param encoding: the encoding to use. + :param errors: the error handling for this file. + :param lazy: can be flipped to true to open the file lazily. + :param atomic: in atomic mode writes go into a temporary file and it's + moved on close. + """ + if lazy: + return LazyFile(filename, mode, encoding, errors, atomic=atomic) + f, should_close = open_stream(filename, mode, encoding, errors, + atomic=atomic) + if not should_close: + f = KeepOpenFile(f) + return f + + +def get_os_args(): + """This returns the argument part of sys.argv in the most appropriate + form for processing. What this means is that this return value is in + a format that works for Click to process but does not necessarily + correspond well to what's actually standard for the interpreter. + + On most environments the return value is ``sys.argv[:1]`` unchanged. + However if you are on Windows and running Python 2 the return value + will actually be a list of unicode strings instead because the + default behavior on that platform otherwise will not be able to + carry all possible values that sys.argv can have. + + .. versionadded:: 6.0 + """ + # We can only extract the unicode argv if sys.argv has not been + # changed since the startup of the application. + if PY2 and WIN and _initial_argv_hash == _hash_py_argv(): + return _get_windows_argv() + return sys.argv[1:] + + +def format_filename(filename, shorten=False): + """Formats a filename for user display. The main purpose of this + function is to ensure that the filename can be displayed at all. This + will decode the filename to unicode if necessary in a way that it will + not fail. Optionally, it can shorten the filename to not include the + full path to the filename. + + :param filename: formats a filename for UI display. This will also convert + the filename into unicode without failing. + :param shorten: this optionally shortens the filename to strip of the + path that leads up to it. + """ + if shorten: + filename = os.path.basename(filename) + return filename_to_ui(filename) + + +def get_app_dir(app_name, roaming=True, force_posix=False): + r"""Returns the config folder for the application. The default behavior + is to return whatever is most appropriate for the operating system. + + To give you an idea, for an app called ``"Foo Bar"``, something like + the following folders could be returned: + + Mac OS X: + ``~/Library/Application Support/Foo Bar`` + Mac OS X (POSIX): + ``~/.foo-bar`` + Unix: + ``~/.config/foo-bar`` + Unix (POSIX): + ``~/.foo-bar`` + Win XP (roaming): + ``C:\Documents and Settings\\Local Settings\Application Data\Foo Bar`` + Win XP (not roaming): + ``C:\Documents and Settings\\Application Data\Foo Bar`` + Win 7 (roaming): + ``C:\Users\\AppData\Roaming\Foo Bar`` + Win 7 (not roaming): + ``C:\Users\\AppData\Local\Foo Bar`` + + .. versionadded:: 2.0 + + :param app_name: the application name. This should be properly capitalized + and can contain whitespace. + :param roaming: controls if the folder should be roaming or not on Windows. + Has no affect otherwise. + :param force_posix: if this is set to `True` then on any POSIX system the + folder will be stored in the home folder with a leading + dot instead of the XDG config home or darwin's + application support folder. + """ + if WIN: + key = roaming and 'APPDATA' or 'LOCALAPPDATA' + folder = os.environ.get(key) + if folder is None: + folder = os.path.expanduser('~') + return os.path.join(folder, app_name) + if force_posix: + return os.path.join(os.path.expanduser('~/.' + _posixify(app_name))) + if sys.platform == 'darwin': + return os.path.join(os.path.expanduser( + '~/Library/Application Support'), app_name) + return os.path.join( + os.environ.get('XDG_CONFIG_HOME', os.path.expanduser('~/.config')), + _posixify(app_name)) + + +class PacifyFlushWrapper(object): + """This wrapper is used to catch and suppress BrokenPipeErrors resulting + from ``.flush()`` being called on broken pipe during the shutdown/final-GC + of the Python interpreter. Notably ``.flush()`` is always called on + ``sys.stdout`` and ``sys.stderr``. So as to have minimal impact on any + other cleanup code, and the case where the underlying file is not a broken + pipe, all calls and attributes are proxied. + """ + + def __init__(self, wrapped): + self.wrapped = wrapped + + def flush(self): + try: + self.wrapped.flush() + except IOError as e: + import errno + if e.errno != errno.EPIPE: + raise + + def __getattr__(self, attr): + return getattr(self.wrapped, attr) diff --git a/week-0/day-3/my_todo_app/venv/lib/python3.6/site-packages/easy_install.py b/week-0/day-3/my_todo_app/venv/lib/python3.6/site-packages/easy_install.py new file mode 100644 index 00000000..d87e9840 --- /dev/null +++ b/week-0/day-3/my_todo_app/venv/lib/python3.6/site-packages/easy_install.py @@ -0,0 +1,5 @@ +"""Run the EasyInstall command""" + +if __name__ == '__main__': + from setuptools.command.easy_install import main + main() diff --git a/week-0/day-3/my_todo_app/venv/lib/python3.6/site-packages/flask/__init__.py b/week-0/day-3/my_todo_app/venv/lib/python3.6/site-packages/flask/__init__.py new file mode 100644 index 00000000..687475bc --- /dev/null +++ b/week-0/day-3/my_todo_app/venv/lib/python3.6/site-packages/flask/__init__.py @@ -0,0 +1,60 @@ +# -*- coding: utf-8 -*- +""" + flask + ~~~~~ + + A microframework based on Werkzeug. It's extensively documented + and follows best practice patterns. + + :copyright: 2010 Pallets + :license: BSD-3-Clause +""" +# utilities we import from Werkzeug and Jinja2 that are unused +# in the module but are exported as public interface. +from jinja2 import escape +from jinja2 import Markup +from werkzeug.exceptions import abort +from werkzeug.utils import redirect + +from . import json +from ._compat import json_available +from .app import Flask +from .app import Request +from .app import Response +from .blueprints import Blueprint +from .config import Config +from .ctx import after_this_request +from .ctx import copy_current_request_context +from .ctx import has_app_context +from .ctx import has_request_context +from .globals import _app_ctx_stack +from .globals import _request_ctx_stack +from .globals import current_app +from .globals import g +from .globals import request +from .globals import session +from .helpers import flash +from .helpers import get_flashed_messages +from .helpers import get_template_attribute +from .helpers import make_response +from .helpers import safe_join +from .helpers import send_file +from .helpers import send_from_directory +from .helpers import stream_with_context +from .helpers import url_for +from .json import jsonify +from .signals import appcontext_popped +from .signals import appcontext_pushed +from .signals import appcontext_tearing_down +from .signals import before_render_template +from .signals import got_request_exception +from .signals import message_flashed +from .signals import request_finished +from .signals import request_started +from .signals import request_tearing_down +from .signals import signals_available +from .signals import template_rendered +from .templating import render_template +from .templating import render_template_string + +__version__ = "1.1.1" diff --git a/week-0/day-3/my_todo_app/venv/lib/python3.6/site-packages/flask/__main__.py b/week-0/day-3/my_todo_app/venv/lib/python3.6/site-packages/flask/__main__.py new file mode 100644 index 00000000..f61dbc0b --- /dev/null +++ b/week-0/day-3/my_todo_app/venv/lib/python3.6/site-packages/flask/__main__.py @@ -0,0 +1,15 @@ +# -*- coding: utf-8 -*- +""" + flask.__main__ + ~~~~~~~~~~~~~~ + + Alias for flask.run for the command line. + + :copyright: 2010 Pallets + :license: BSD-3-Clause +""" + +if __name__ == "__main__": + from .cli import main + + main(as_module=True) diff --git a/week-0/day-3/my_todo_app/venv/lib/python3.6/site-packages/flask/__pycache__/__init__.cpython-36.pyc b/week-0/day-3/my_todo_app/venv/lib/python3.6/site-packages/flask/__pycache__/__init__.cpython-36.pyc new file mode 100644 index 0000000000000000000000000000000000000000..85606c9790af81292c90b7fee97efdf65af703af GIT binary patch literal 2086 zcmbuAOHU(55XWtd8EmkPF&LKT@Ww2*dF+!!QL-CF${|s-dx+Fh)N0SP?SY=hcK0l> zhkTUW^BwX@e9dXUL6lRf%JyP$%~<^Xo2u&W>Z)#hSt=F(_~-d=T_=;gAfgLp?3!V`8vysMsur|gt?54g#i z#QVT4)*?OtZnHM=A@CVHBR&E?XXnJnz!&U-xB-00E{RWopRs4ePl2Da=ftPLFW3v> zrg|B^Vy}o>z^~bB;5NJR&)#Pm=b!#6y6|+BFgHZM<5ML3&J6=k$6YN#c^m5+wzT1tJif@hEk;b}-7M=|} z=_bNjsUy=Gu6E_c$-NGGeS76zoSmP!zX+wIH8jhWf)SCCSMHnl-#0ItZXzAI{*6 zVkpfWj<58E;UY;UOf@u(W|%OShhg@P8!J4_Z}A~&!a6rz3}%I(Eav7sB;*)rOh8-D zW5fI4Ug}B9=|%cH1i$D>1NJ)Ftqc<-tmM!s9duHQH7JGRM#AzBMKPi)`E?v%O$$aw zKJNxp&f4%r#~~kfAlCN~Q!`de5%Sx>_9u4fq+0QAtRcd|&IDZyuEJhMHRDN~B+`Fu zOiiDRD-)4c3g}Xg`|&MiRqsfc7_*LiY}9C9;92g)5519ho=ohpLX}Z5#>Iiyg>h%P zK@^M@t&DBZ84YJ1!j{ISM@dvo(2InEo==>(>NuBCZZrc-`Z&+}BNLni+~BADc?&*2 zH@+G;9Cqt*&StKI=vrK8{1wnS5LUY#-`6iYG7zY^*KPVZP(2GO3 zqoD z5y~-21LXweDat7bD~`GX71m9(wm=4RoPUIT;CyiYXGXt72g<+gwhfbZ5+uz|8YsW{ zf!{{S-Nmam{X1#n^}1D+vlK2xLb;oJY$ss8}r CN<`xT literal 0 HcmV?d00001 diff --git a/week-0/day-3/my_todo_app/venv/lib/python3.6/site-packages/flask/__pycache__/__main__.cpython-36.pyc b/week-0/day-3/my_todo_app/venv/lib/python3.6/site-packages/flask/__pycache__/__main__.cpython-36.pyc new file mode 100644 index 0000000000000000000000000000000000000000..3c71f8b62121462cce663b40d40cb49763cd5c1e GIT binary patch literal 378 zcmY*V%}T^D5Kh{J=KxuG18Ok*3*XvuRMQHjRTOA<(iEXJpf+NM%T0 zq;>Wo3c8B|Mf(f-UZCht=?~y*pZ2BCMW6beAthguO}Zt);o;1gb3bPeZ%$5D|MKr! zzcHp5`zJea%>%xNC;o@V7-u%)8rK8O)`Yg9bL}+a#-?r?+~kF~%r^U{M8PhKk|=a^ zyDTcAiuc5G7G5=(sBKo|Z#71@C=pgiBOHtqFIlL+V8V$1&WnoDBrmCVotM@782DC# zsqS%mS|b^%!HMpSJ)>YfIJq%v&+*HAg4f<^_9r*v#gX$q94$CS<- zpmf%r6X*Exp$5v+`~-A5&1d*YywCGl`+~SAG(I=f|E$TcA2EK4pMJ~uX<-cw`%-_Y ze@-4di~|aUjL?*q55q<@RPn3Z}obS zOsuvW3vNZB{%s*+A8S#^iv3+Hj;tMl)o?zs*4=GkC6UENPlO`^ zJ>mHs-?Q?4iU#)jNi&mY#fy4<>94IPE7tPTkC&_`ZV-qhR){Ns?};!LE7twh&lYYj zJP6#aSX95Gz;1n~WAqTt>Y_J25Aeh$hCK$;Xsy3uNVQ#QU`h@DX)Y$+-eS-1Ews1% zfG@mqcEaB7^6kaX$$pEk?PK-!)@ z)ZS=&czEVNSZ~sC66t!P?RuMzlh$|qWPN|8VWfJ}OAE>f0NY0lkd~y7t{;o5U>1|- zm{!FtPXIb(>v8y$u>u#eVJ-snAO~jd`(7j8z^->4_yM9-BKlF^E&Ncj6(ajFw>3vp z;iM|umb+|li;Iqx8|;&$cf(Th-LR7O&stF^8Y@*x8PhtncF2rl@6P6C++&VL$IV+9 z)yeYGXuY##l_aX?TZTv=uBimlTZ6(@(pk8TNSJV(ty@tXWmEc zr^GA^uQG)f#r9Z9ih9a)%GdZhhDYoh_KnuT(F?njxt_40@fss#05>|!XG0U!!yH_D zAcdO<%T;CB@=&8DU9jcf~zb6#UhLKUSh#aB6%S36J z6|XUqJHS+@6)Vh|vVpJ9)8oB=p)Z9ZiOKN6E|7vDisEJU_HaiYfTEqtV6AU0~63GLC zC>d@N0#PMPGELIAN8sohyPt~N_q(4L5e5Y`-(|duyuzz^m(Z@4`2<3vmL79H6Fn(B z)E0g}ih@IlKGuzjAg2SG4rZMS`JRDM&z(59HUHJ?dCQNf=gWy%E_%NmKM1V0z)8}L zw$VQN;iv($zIxq+!;76rcHM-^MI5_pLLLXFhN*lmsi#Owc?PJJBW9vh_d^PR9iZk_ z*Q5|Qbwn-1XofiU9T|{Jt$atEkUK13uTjoWeA$Mc7#t<|k47GOvUA}*Ldbh06~$OKkT+6@5TacF9`FZ6Af&M`4^_1N-T`)i72dUhmW9_5&WNQp z62Ni(aESMNA}K>_H7ZBz$_nYCZ2c)g_h}&CP{R^N;Xud;9mPIh1*v?eu3;OGI#N+{ ziseGtq+8O;U?%&g+lZskakpJRaNB_x6qcJy%_Z`1gN{ued7!>T{Ave}jnsJZa@npp zK1Z3x4_;czo2Rsrh~31Y!wUr$RkxNkL~15Z4L?j$Gl;^qbP}LIcIGRU7S7j)QbtnF zfSo)^1J%E@AVE#5I5bnml_!CgR>4MR6nk|rnKU% z=D!W;#DTr3DRzaYPDy+2{?jji`LN|YdHLj}^WfQwFCIO09=>?|OjX#l7_~P@7^>)L z{nI!WlDI3$)583s|uS=Jf@>P$y6iD+x5dXf1mU4XP9*vcS-5^cNk2qtk?1A z8X&Ev)$uNBHJ!e2>ov?(^=hGL?0=Va+{N;o3B0L_uIa#>(TYY*n*uZiNXIy3)Xk~0 F{{=0);#U9w literal 0 HcmV?d00001 diff --git a/week-0/day-3/my_todo_app/venv/lib/python3.6/site-packages/flask/__pycache__/app.cpython-36.pyc b/week-0/day-3/my_todo_app/venv/lib/python3.6/site-packages/flask/__pycache__/app.cpython-36.pyc new file mode 100644 index 0000000000000000000000000000000000000000..fa361b2dce3dcd6b8586d883ba6f5a87fe12206a GIT binary patch literal 74542 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 literal 0 HcmV?d00001 diff --git a/week-0/day-3/my_todo_app/venv/lib/python3.6/site-packages/flask/__pycache__/blueprints.cpython-36.pyc b/week-0/day-3/my_todo_app/venv/lib/python3.6/site-packages/flask/__pycache__/blueprints.cpython-36.pyc new file mode 100644 index 0000000000000000000000000000000000000000..00e1a421dc21cabe615581f56889a351d4053b36 GIT binary patch literal 22883 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 IoRIy007*4t4FCWD literal 0 HcmV?d00001 diff --git a/week-0/day-3/my_todo_app/venv/lib/python3.6/site-packages/flask/__pycache__/config.cpython-36.pyc b/week-0/day-3/my_todo_app/venv/lib/python3.6/site-packages/flask/__pycache__/config.cpython-36.pyc new file mode 100644 index 0000000000000000000000000000000000000000..b449827b593a46a16941c43aa85ce89beff90fe4 GIT binary patch literal 10123 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 Ydl#Qm8N{5C=J03KjXE?~FDzaCA3+s1C;$Ke literal 0 HcmV?d00001 diff --git a/week-0/day-3/my_todo_app/venv/lib/python3.6/site-packages/flask/__pycache__/ctx.cpython-36.pyc b/week-0/day-3/my_todo_app/venv/lib/python3.6/site-packages/flask/__pycache__/ctx.cpython-36.pyc new file mode 100644 index 0000000000000000000000000000000000000000..4efae715fade4cb069e438a5e6779ce75565e528 GIT binary patch literal 14284 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ÐX#Rt6rZz$&M?y0c4h{7* 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 L|K-@@+3Eiekn3NU literal 0 HcmV?d00001 diff --git a/week-0/day-3/my_todo_app/venv/lib/python3.6/site-packages/flask/__pycache__/logging.cpython-36.pyc b/week-0/day-3/my_todo_app/venv/lib/python3.6/site-packages/flask/__pycache__/logging.cpython-36.pyc new file mode 100644 index 0000000000000000000000000000000000000000..0f352896edbb96278ce87c86c34d88e6cc5a6273 GIT binary patch literal 3099 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 literal 0 HcmV?d00001 diff --git a/week-0/day-3/my_todo_app/venv/lib/python3.6/site-packages/flask/__pycache__/signals.cpython-36.pyc b/week-0/day-3/my_todo_app/venv/lib/python3.6/site-packages/flask/__pycache__/signals.cpython-36.pyc new file mode 100644 index 0000000000000000000000000000000000000000..c8b3234b2edfd01ad35c33824a201a89437b0641 GIT binary patch literal 2363 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 literal 0 HcmV?d00001 diff --git a/week-0/day-3/my_todo_app/venv/lib/python3.6/site-packages/flask/__pycache__/testing.cpython-36.pyc b/week-0/day-3/my_todo_app/venv/lib/python3.6/site-packages/flask/__pycache__/testing.cpython-36.pyc new file mode 100644 index 0000000000000000000000000000000000000000..2e1c6274a84a3b8482ed324130d1d231a1455ea3 GIT binary patch literal 8653 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 literal 0 HcmV?d00001 diff --git a/week-0/day-3/my_todo_app/venv/lib/python3.6/site-packages/flask/__pycache__/views.cpython-36.pyc b/week-0/day-3/my_todo_app/venv/lib/python3.6/site-packages/flask/__pycache__/views.cpython-36.pyc new file mode 100644 index 0000000000000000000000000000000000000000..5493093e0bef580cca97e977a069d8dba09aa463 GIT binary patch literal 4759 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 literal 0 HcmV?d00001 diff --git a/week-0/day-3/my_todo_app/venv/lib/python3.6/site-packages/flask/__pycache__/wrappers.cpython-36.pyc b/week-0/day-3/my_todo_app/venv/lib/python3.6/site-packages/flask/__pycache__/wrappers.cpython-36.pyc new file mode 100644 index 0000000000000000000000000000000000000000..2ce6a39c7077f31ed8ef6aef9ef2716fc2fff32a GIT binary patch literal 4252 zcmai1+m74D873)8qO{tB*RA6uMLKCwrz)~qCqaQgC;}hq*xTB2v%7^00tH2JMiO@^ zk{*&?ui_X*)tzdPrX0PemLydQM_l?H8qI=S?J9uB=J-qisQ*=&D+eFVQUqjEDXsezU zU*FUE8_Pd;8J=n2CWnI~>Bg~;iRyZN?&+$&okbjog$UDxrE|fa?LFLK)g<3`;$!L0=IM}qdi#^x?00Suh_qO082FyR;32!W_v@|Cw(bXR zmWb~6u#(o-^X@&D?-sK0);?`oyVWXs-ucbm)6on_0%}gzJ*ALFhu$yI#$&-Qk@h__=u-kM~7z_*?|M`8T()6ciRBu{QD ze{NT<8N|o=jVN@;AWjgu+z)5YR4Mchge5Ihn%>pdjHOabnQ?ISgi*hhTaFXD3*k6< z*KrmR&jM=q9OrrF2E`ZIhDduwtyqkZ>*!I+pQ+ZUkL>#cl*B}3>84Rw953}l7Qcg% zJVI5uitBcR8*rBaR~dFow0VP@Z?qHLw$N_!mTGstpUTR4Rw1UZ`=!(UT33sUBXOc{5;*e;S_F+rwK8mP>Gm%KT~i;%~W9~MdQ!WT!( zm9tExOqmHgkd&~axtr49gk>>v6E^hVw`4eeU1VaZ${1_yOxbaiu_G5k5j|4Gf$J5E zQVw3FG>!M%kR{nfiG`L}lF~8}sZw|7rm3t~E4Ecia@3SDtpz!<7E-Ezg`r6H=?0F3 zJY0%wR-?&ax5(XbEs9i8YQ!>n;d6ocLBOJ^0u|ECpJXX|pOvD>1%8N*ILK(NDa@*L zRzi|kc>dJ)ScD-1)iv@61L&cDN~QZK3GkTGb&b-M>+d2pRTwmupYIBnZ$)8n%#_bc zRmS5dcmLqre>&QKFxqz>KNvmSe>5I5FAAsrj2(*OfxUTo#Heo+ncOM{_I0^}g)c;X zzPWH;Iv9}>GzB7@rSrR_Bqf2?F!kkorQHUX2VT9s8<_Y?I{=d$cH}0t4s>i0rEe_% zMUJbZGo|pWV)jfJA>Q^WRuJo6w3zszoBC16j{J143`<;5#ts?EL2xH92x4s_iiA-i ziftvS%sfOaR!x8vERxKvMF0`tF{I1ycOMra4hiC=Ct|hSoM?vq1+TUQ@t8%;|IdinUz5q`8u`APUBCaj&rmor#Soj0v zwd>6t5qjxyEF2+aBpo$@`(E0&@|9B8du}4~b;VN-iE)$|;zrp)m0JscAxK8voPtvm zyQdg)E&@8c$oDV?8K_c@+86Rp{s?`~P!i%EuwK*DTi`y+=o!m*Dsx>}z2B1?7%Z<* zMJSTD9fwDr<0uc=ojMupYck4G;@3Kya|;`m)KEpqTLj&@3g6|SkVGQw!hO%&9)Gj zZAtUpzatnZK&z8mc{V}P0V)6q|AP*nMe;CVfqy6{-&Jy6lrojk;uOyT?<5jzL^LyZ zUkFeFd$j-LF{_*l=2e19_616OmH8>94ggazB9Fq4(qb}%cv86dteCDOaH20dHUXPF zb)Y107$SD&7npD19tx+@cnq`y8>Q$2u*ou6VFSb>ty|Ifm9$LzzhpsWxwmq%+9g@y zYECYW(f@~(2Ltv3u@9*B=59C>d^lvE3~tvjsm_{77RQlPhIcs!y25H_)&02kV0EY% zlw_csKg~{ISK%@kngX4~%*c`0Idw5F@Ih&(R-p8yBMvE18t-lT)(YQM3YHcr_%Ay2 zg_HP8Q6l}alZuz=_B>q#=MLutoeG}`F$j%M=m@TlfI$}YRA^G-L*DcNN#aZjQugJW zPBo73N1d9#Mt?$Rsp-r2t6Rt5^0*pZNejwiDha{R`Ey5Vqzz!LaX`#qEdP4-`C~|? z8%~IXYtz>Fo~XN;eXagdUAq)e%lAn", + endpoint="static", + host=static_host, + view_func=self.send_static_file, + ) + + # Set the name of the Click group in case someone wants to add + # the app's commands to another CLI tool. + self.cli.name = self.name + + @locked_cached_property + def name(self): + """The name of the application. This is usually the import name + with the difference that it's guessed from the run file if the + import name is main. This name is used as a display name when + Flask needs the name of the application. It can be set and overridden + to change the value. + + .. versionadded:: 0.8 + """ + if self.import_name == "__main__": + fn = getattr(sys.modules["__main__"], "__file__", None) + if fn is None: + return "__main__" + return os.path.splitext(os.path.basename(fn))[0] + return self.import_name + + @property + def propagate_exceptions(self): + """Returns the value of the ``PROPAGATE_EXCEPTIONS`` configuration + value in case it's set, otherwise a sensible default is returned. + + .. versionadded:: 0.7 + """ + rv = self.config["PROPAGATE_EXCEPTIONS"] + if rv is not None: + return rv + return self.testing or self.debug + + @property + def preserve_context_on_exception(self): + """Returns the value of the ``PRESERVE_CONTEXT_ON_EXCEPTION`` + configuration value in case it's set, otherwise a sensible default + is returned. + + .. versionadded:: 0.7 + """ + rv = self.config["PRESERVE_CONTEXT_ON_EXCEPTION"] + if rv is not None: + return rv + return self.debug + + @locked_cached_property + def logger(self): + """A standard Python :class:`~logging.Logger` for the app, with + the same name as :attr:`name`. + + In debug mode, the logger's :attr:`~logging.Logger.level` will + be set to :data:`~logging.DEBUG`. + + If there are no handlers configured, a default handler will be + added. See :doc:`/logging` for more information. + + .. versionchanged:: 1.1.0 + The logger takes the same name as :attr:`name` rather than + hard-coding ``"flask.app"``. + + .. versionchanged:: 1.0.0 + Behavior was simplified. The logger is always named + ``"flask.app"``. The level is only set during configuration, + it doesn't check ``app.debug`` each time. Only one format is + used, not different ones depending on ``app.debug``. No + handlers are removed, and a handler is only added if no + handlers are already configured. + + .. versionadded:: 0.3 + """ + return create_logger(self) + + @locked_cached_property + def jinja_env(self): + """The Jinja environment used to load templates. + + The environment is created the first time this property is + accessed. Changing :attr:`jinja_options` after that will have no + effect. + """ + return self.create_jinja_environment() + + @property + def got_first_request(self): + """This attribute is set to ``True`` if the application started + handling the first request. + + .. versionadded:: 0.8 + """ + return self._got_first_request + + def make_config(self, instance_relative=False): + """Used to create the config attribute by the Flask constructor. + The `instance_relative` parameter is passed in from the constructor + of Flask (there named `instance_relative_config`) and indicates if + the config should be relative to the instance path or the root path + of the application. + + .. versionadded:: 0.8 + """ + root_path = self.root_path + if instance_relative: + root_path = self.instance_path + defaults = dict(self.default_config) + defaults["ENV"] = get_env() + defaults["DEBUG"] = get_debug_flag() + return self.config_class(root_path, defaults) + + def auto_find_instance_path(self): + """Tries to locate the instance path if it was not provided to the + constructor of the application class. It will basically calculate + the path to a folder named ``instance`` next to your main file or + the package. + + .. versionadded:: 0.8 + """ + prefix, package_path = find_package(self.import_name) + if prefix is None: + return os.path.join(package_path, "instance") + return os.path.join(prefix, "var", self.name + "-instance") + + def open_instance_resource(self, resource, mode="rb"): + """Opens a resource from the application's instance folder + (:attr:`instance_path`). Otherwise works like + :meth:`open_resource`. Instance resources can also be opened for + writing. + + :param resource: the name of the resource. To access resources within + subfolders use forward slashes as separator. + :param mode: resource file opening mode, default is 'rb'. + """ + return open(os.path.join(self.instance_path, resource), mode) + + @property + def templates_auto_reload(self): + """Reload templates when they are changed. Used by + :meth:`create_jinja_environment`. + + This attribute can be configured with :data:`TEMPLATES_AUTO_RELOAD`. If + not set, it will be enabled in debug mode. + + .. versionadded:: 1.0 + This property was added but the underlying config and behavior + already existed. + """ + rv = self.config["TEMPLATES_AUTO_RELOAD"] + return rv if rv is not None else self.debug + + @templates_auto_reload.setter + def templates_auto_reload(self, value): + self.config["TEMPLATES_AUTO_RELOAD"] = value + + def create_jinja_environment(self): + """Create the Jinja environment based on :attr:`jinja_options` + and the various Jinja-related methods of the app. Changing + :attr:`jinja_options` after this will have no effect. Also adds + Flask-related globals and filters to the environment. + + .. versionchanged:: 0.11 + ``Environment.auto_reload`` set in accordance with + ``TEMPLATES_AUTO_RELOAD`` configuration option. + + .. versionadded:: 0.5 + """ + options = dict(self.jinja_options) + + if "autoescape" not in options: + options["autoescape"] = self.select_jinja_autoescape + + if "auto_reload" not in options: + options["auto_reload"] = self.templates_auto_reload + + rv = self.jinja_environment(self, **options) + rv.globals.update( + url_for=url_for, + get_flashed_messages=get_flashed_messages, + config=self.config, + # request, session and g are normally added with the + # context processor for efficiency reasons but for imported + # templates we also want the proxies in there. + request=request, + session=session, + g=g, + ) + rv.filters["tojson"] = json.tojson_filter + return rv + + def create_global_jinja_loader(self): + """Creates the loader for the Jinja2 environment. Can be used to + override just the loader and keeping the rest unchanged. It's + discouraged to override this function. Instead one should override + the :meth:`jinja_loader` function instead. + + The global loader dispatches between the loaders of the application + and the individual blueprints. + + .. versionadded:: 0.7 + """ + return DispatchingJinjaLoader(self) + + def select_jinja_autoescape(self, filename): + """Returns ``True`` if autoescaping should be active for the given + template name. If no template name is given, returns `True`. + + .. versionadded:: 0.5 + """ + if filename is None: + return True + return filename.endswith((".html", ".htm", ".xml", ".xhtml")) + + def update_template_context(self, context): + """Update the template context with some commonly used variables. + This injects request, session, config and g into the template + context as well as everything template context processors want + to inject. Note that the as of Flask 0.6, the original values + in the context will not be overridden if a context processor + decides to return a value with the same key. + + :param context: the context as a dictionary that is updated in place + to add extra variables. + """ + funcs = self.template_context_processors[None] + reqctx = _request_ctx_stack.top + if reqctx is not None: + bp = reqctx.request.blueprint + if bp is not None and bp in self.template_context_processors: + funcs = chain(funcs, self.template_context_processors[bp]) + orig_ctx = context.copy() + for func in funcs: + context.update(func()) + # make sure the original values win. This makes it possible to + # easier add new variables in context processors without breaking + # existing views. + context.update(orig_ctx) + + def make_shell_context(self): + """Returns the shell context for an interactive shell for this + application. This runs all the registered shell context + processors. + + .. versionadded:: 0.11 + """ + rv = {"app": self, "g": g} + for processor in self.shell_context_processors: + rv.update(processor()) + return rv + + #: What environment the app is running in. Flask and extensions may + #: enable behaviors based on the environment, such as enabling debug + #: mode. This maps to the :data:`ENV` config key. This is set by the + #: :envvar:`FLASK_ENV` environment variable and may not behave as + #: expected if set in code. + #: + #: **Do not enable development when deploying in production.** + #: + #: Default: ``'production'`` + env = ConfigAttribute("ENV") + + @property + def debug(self): + """Whether debug mode is enabled. When using ``flask run`` to start + the development server, an interactive debugger will be shown for + unhandled exceptions, and the server will be reloaded when code + changes. This maps to the :data:`DEBUG` config key. This is + enabled when :attr:`env` is ``'development'`` and is overridden + by the ``FLASK_DEBUG`` environment variable. It may not behave as + expected if set in code. + + **Do not enable debug mode when deploying in production.** + + Default: ``True`` if :attr:`env` is ``'development'``, or + ``False`` otherwise. + """ + return self.config["DEBUG"] + + @debug.setter + def debug(self, value): + self.config["DEBUG"] = value + self.jinja_env.auto_reload = self.templates_auto_reload + + def run(self, host=None, port=None, debug=None, load_dotenv=True, **options): + """Runs the application on a local development server. + + Do not use ``run()`` in a production setting. It is not intended to + meet security and performance requirements for a production server. + Instead, see :ref:`deployment` for WSGI server recommendations. + + If the :attr:`debug` flag is set the server will automatically reload + for code changes and show a debugger in case an exception happened. + + If you want to run the application in debug mode, but disable the + code execution on the interactive debugger, you can pass + ``use_evalex=False`` as parameter. This will keep the debugger's + traceback screen active, but disable code execution. + + It is not recommended to use this function for development with + automatic reloading as this is badly supported. Instead you should + be using the :command:`flask` command line script's ``run`` support. + + .. admonition:: Keep in Mind + + Flask will suppress any server error with a generic error page + unless it is in debug mode. As such to enable just the + interactive debugger without the code reloading, you have to + invoke :meth:`run` with ``debug=True`` and ``use_reloader=False``. + Setting ``use_debugger`` to ``True`` without being in debug mode + won't catch any exceptions because there won't be any to + catch. + + :param host: the hostname to listen on. Set this to ``'0.0.0.0'`` to + have the server available externally as well. Defaults to + ``'127.0.0.1'`` or the host in the ``SERVER_NAME`` config variable + if present. + :param port: the port of the webserver. Defaults to ``5000`` or the + port defined in the ``SERVER_NAME`` config variable if present. + :param debug: if given, enable or disable debug mode. See + :attr:`debug`. + :param load_dotenv: Load the nearest :file:`.env` and :file:`.flaskenv` + files to set environment variables. Will also change the working + directory to the directory containing the first file found. + :param options: the options to be forwarded to the underlying Werkzeug + server. See :func:`werkzeug.serving.run_simple` for more + information. + + .. versionchanged:: 1.0 + If installed, python-dotenv will be used to load environment + variables from :file:`.env` and :file:`.flaskenv` files. + + If set, the :envvar:`FLASK_ENV` and :envvar:`FLASK_DEBUG` + environment variables will override :attr:`env` and + :attr:`debug`. + + Threaded mode is enabled by default. + + .. versionchanged:: 0.10 + The default port is now picked from the ``SERVER_NAME`` + variable. + """ + # Change this into a no-op if the server is invoked from the + # command line. Have a look at cli.py for more information. + if os.environ.get("FLASK_RUN_FROM_CLI") == "true": + from .debughelpers import explain_ignored_app_run + + explain_ignored_app_run() + return + + if get_load_dotenv(load_dotenv): + cli.load_dotenv() + + # if set, let env vars override previous values + if "FLASK_ENV" in os.environ: + self.env = get_env() + self.debug = get_debug_flag() + elif "FLASK_DEBUG" in os.environ: + self.debug = get_debug_flag() + + # debug passed to method overrides all other sources + if debug is not None: + self.debug = bool(debug) + + _host = "127.0.0.1" + _port = 5000 + server_name = self.config.get("SERVER_NAME") + sn_host, sn_port = None, None + + if server_name: + sn_host, _, sn_port = server_name.partition(":") + + host = host or sn_host or _host + # pick the first value that's not None (0 is allowed) + port = int(next((p for p in (port, sn_port) if p is not None), _port)) + + options.setdefault("use_reloader", self.debug) + options.setdefault("use_debugger", self.debug) + options.setdefault("threaded", True) + + cli.show_server_banner(self.env, self.debug, self.name, False) + + from werkzeug.serving import run_simple + + try: + run_simple(host, port, self, **options) + finally: + # reset the first request information if the development server + # reset normally. This makes it possible to restart the server + # without reloader and that stuff from an interactive shell. + self._got_first_request = False + + def test_client(self, use_cookies=True, **kwargs): + """Creates a test client for this application. For information + about unit testing head over to :ref:`testing`. + + Note that if you are testing for assertions or exceptions in your + application code, you must set ``app.testing = True`` in order for the + exceptions to propagate to the test client. Otherwise, the exception + will be handled by the application (not visible to the test client) and + the only indication of an AssertionError or other exception will be a + 500 status code response to the test client. See the :attr:`testing` + attribute. For example:: + + app.testing = True + client = app.test_client() + + The test client can be used in a ``with`` block to defer the closing down + of the context until the end of the ``with`` block. This is useful if + you want to access the context locals for testing:: + + with app.test_client() as c: + rv = c.get('/?vodka=42') + assert request.args['vodka'] == '42' + + Additionally, you may pass optional keyword arguments that will then + be passed to the application's :attr:`test_client_class` constructor. + For example:: + + from flask.testing import FlaskClient + + class CustomClient(FlaskClient): + def __init__(self, *args, **kwargs): + self._authentication = kwargs.pop("authentication") + super(CustomClient,self).__init__( *args, **kwargs) + + app.test_client_class = CustomClient + client = app.test_client(authentication='Basic ....') + + See :class:`~flask.testing.FlaskClient` for more information. + + .. versionchanged:: 0.4 + added support for ``with`` block usage for the client. + + .. versionadded:: 0.7 + The `use_cookies` parameter was added as well as the ability + to override the client to be used by setting the + :attr:`test_client_class` attribute. + + .. versionchanged:: 0.11 + Added `**kwargs` to support passing additional keyword arguments to + the constructor of :attr:`test_client_class`. + """ + cls = self.test_client_class + if cls is None: + from .testing import FlaskClient as cls + return cls(self, self.response_class, use_cookies=use_cookies, **kwargs) + + def test_cli_runner(self, **kwargs): + """Create a CLI runner for testing CLI commands. + See :ref:`testing-cli`. + + Returns an instance of :attr:`test_cli_runner_class`, by default + :class:`~flask.testing.FlaskCliRunner`. The Flask app object is + passed as the first argument. + + .. versionadded:: 1.0 + """ + cls = self.test_cli_runner_class + + if cls is None: + from .testing import FlaskCliRunner as cls + + return cls(self, **kwargs) + + def open_session(self, request): + """Creates or opens a new session. Default implementation stores all + session data in a signed cookie. This requires that the + :attr:`secret_key` is set. Instead of overriding this method + we recommend replacing the :class:`session_interface`. + + .. deprecated: 1.0 + Will be removed in 1.1. Use ``session_interface.open_session`` + instead. + + :param request: an instance of :attr:`request_class`. + """ + + warnings.warn( + DeprecationWarning( + '"open_session" is deprecated and will be removed in 1.1. Use' + ' "session_interface.open_session" instead.' + ) + ) + return self.session_interface.open_session(self, request) + + def save_session(self, session, response): + """Saves the session if it needs updates. For the default + implementation, check :meth:`open_session`. Instead of overriding this + method we recommend replacing the :class:`session_interface`. + + .. deprecated: 1.0 + Will be removed in 1.1. Use ``session_interface.save_session`` + instead. + + :param session: the session to be saved (a + :class:`~werkzeug.contrib.securecookie.SecureCookie` + object) + :param response: an instance of :attr:`response_class` + """ + + warnings.warn( + DeprecationWarning( + '"save_session" is deprecated and will be removed in 1.1. Use' + ' "session_interface.save_session" instead.' + ) + ) + return self.session_interface.save_session(self, session, response) + + def make_null_session(self): + """Creates a new instance of a missing session. Instead of overriding + this method we recommend replacing the :class:`session_interface`. + + .. deprecated: 1.0 + Will be removed in 1.1. Use ``session_interface.make_null_session`` + instead. + + .. versionadded:: 0.7 + """ + + warnings.warn( + DeprecationWarning( + '"make_null_session" is deprecated and will be removed in 1.1. Use' + ' "session_interface.make_null_session" instead.' + ) + ) + return self.session_interface.make_null_session(self) + + @setupmethod + def register_blueprint(self, blueprint, **options): + """Register a :class:`~flask.Blueprint` on the application. Keyword + arguments passed to this method will override the defaults set on the + blueprint. + + Calls the blueprint's :meth:`~flask.Blueprint.register` method after + recording the blueprint in the application's :attr:`blueprints`. + + :param blueprint: The blueprint to register. + :param url_prefix: Blueprint routes will be prefixed with this. + :param subdomain: Blueprint routes will match on this subdomain. + :param url_defaults: Blueprint routes will use these default values for + view arguments. + :param options: Additional keyword arguments are passed to + :class:`~flask.blueprints.BlueprintSetupState`. They can be + accessed in :meth:`~flask.Blueprint.record` callbacks. + + .. versionadded:: 0.7 + """ + first_registration = False + + if blueprint.name in self.blueprints: + assert self.blueprints[blueprint.name] is blueprint, ( + "A name collision occurred between blueprints %r and %r. Both" + ' share the same name "%s". Blueprints that are created on the' + " fly need unique names." + % (blueprint, self.blueprints[blueprint.name], blueprint.name) + ) + else: + self.blueprints[blueprint.name] = blueprint + self._blueprint_order.append(blueprint) + first_registration = True + + blueprint.register(self, options, first_registration) + + def iter_blueprints(self): + """Iterates over all blueprints by the order they were registered. + + .. versionadded:: 0.11 + """ + return iter(self._blueprint_order) + + @setupmethod + def add_url_rule( + self, + rule, + endpoint=None, + view_func=None, + provide_automatic_options=None, + **options + ): + """Connects a URL rule. Works exactly like the :meth:`route` + decorator. If a view_func is provided it will be registered with the + endpoint. + + Basically this example:: + + @app.route('/') + def index(): + pass + + Is equivalent to the following:: + + def index(): + pass + app.add_url_rule('/', 'index', index) + + If the view_func is not provided you will need to connect the endpoint + to a view function like so:: + + app.view_functions['index'] = index + + Internally :meth:`route` invokes :meth:`add_url_rule` so if you want + to customize the behavior via subclassing you only need to change + this method. + + For more information refer to :ref:`url-route-registrations`. + + .. versionchanged:: 0.2 + `view_func` parameter added. + + .. versionchanged:: 0.6 + ``OPTIONS`` is added automatically as method. + + :param rule: the URL rule as string + :param endpoint: the endpoint for the registered URL rule. Flask + itself assumes the name of the view function as + endpoint + :param view_func: the function to call when serving a request to the + provided endpoint + :param provide_automatic_options: controls whether the ``OPTIONS`` + method should be added automatically. This can also be controlled + by setting the ``view_func.provide_automatic_options = False`` + before adding the rule. + :param options: the options to be forwarded to the underlying + :class:`~werkzeug.routing.Rule` object. A change + to Werkzeug is handling of method options. methods + is a list of methods this rule should be limited + to (``GET``, ``POST`` etc.). By default a rule + just listens for ``GET`` (and implicitly ``HEAD``). + Starting with Flask 0.6, ``OPTIONS`` is implicitly + added and handled by the standard request handling. + """ + if endpoint is None: + endpoint = _endpoint_from_view_func(view_func) + options["endpoint"] = endpoint + methods = options.pop("methods", None) + + # if the methods are not given and the view_func object knows its + # methods we can use that instead. If neither exists, we go with + # a tuple of only ``GET`` as default. + if methods is None: + methods = getattr(view_func, "methods", None) or ("GET",) + if isinstance(methods, string_types): + raise TypeError( + "Allowed methods have to be iterables of strings, " + 'for example: @app.route(..., methods=["POST"])' + ) + methods = set(item.upper() for item in methods) + + # Methods that should always be added + required_methods = set(getattr(view_func, "required_methods", ())) + + # starting with Flask 0.8 the view_func object can disable and + # force-enable the automatic options handling. + if provide_automatic_options is None: + provide_automatic_options = getattr( + view_func, "provide_automatic_options", None + ) + + if provide_automatic_options is None: + if "OPTIONS" not in methods: + provide_automatic_options = True + required_methods.add("OPTIONS") + else: + provide_automatic_options = False + + # Add the required methods now. + methods |= required_methods + + rule = self.url_rule_class(rule, methods=methods, **options) + rule.provide_automatic_options = provide_automatic_options + + self.url_map.add(rule) + if view_func is not None: + old_func = self.view_functions.get(endpoint) + if old_func is not None and old_func != view_func: + raise AssertionError( + "View function mapping is overwriting an " + "existing endpoint function: %s" % endpoint + ) + self.view_functions[endpoint] = view_func + + def route(self, rule, **options): + """A decorator that is used to register a view function for a + given URL rule. This does the same thing as :meth:`add_url_rule` + but is intended for decorator usage:: + + @app.route('/') + def index(): + return 'Hello World' + + For more information refer to :ref:`url-route-registrations`. + + :param rule: the URL rule as string + :param endpoint: the endpoint for the registered URL rule. Flask + itself assumes the name of the view function as + endpoint + :param options: the options to be forwarded to the underlying + :class:`~werkzeug.routing.Rule` object. A change + to Werkzeug is handling of method options. methods + is a list of methods this rule should be limited + to (``GET``, ``POST`` etc.). By default a rule + just listens for ``GET`` (and implicitly ``HEAD``). + Starting with Flask 0.6, ``OPTIONS`` is implicitly + added and handled by the standard request handling. + """ + + def decorator(f): + endpoint = options.pop("endpoint", None) + self.add_url_rule(rule, endpoint, f, **options) + return f + + return decorator + + @setupmethod + def endpoint(self, endpoint): + """A decorator to register a function as an endpoint. + Example:: + + @app.endpoint('example.endpoint') + def example(): + return "example" + + :param endpoint: the name of the endpoint + """ + + def decorator(f): + self.view_functions[endpoint] = f + return f + + return decorator + + @staticmethod + def _get_exc_class_and_code(exc_class_or_code): + """Get the exception class being handled. For HTTP status codes + or ``HTTPException`` subclasses, return both the exception and + status code. + + :param exc_class_or_code: Any exception class, or an HTTP status + code as an integer. + """ + if isinstance(exc_class_or_code, integer_types): + exc_class = default_exceptions[exc_class_or_code] + else: + exc_class = exc_class_or_code + + assert issubclass(exc_class, Exception) + + if issubclass(exc_class, HTTPException): + return exc_class, exc_class.code + else: + return exc_class, None + + @setupmethod + def errorhandler(self, code_or_exception): + """Register a function to handle errors by code or exception class. + + A decorator that is used to register a function given an + error code. Example:: + + @app.errorhandler(404) + def page_not_found(error): + return 'This page does not exist', 404 + + You can also register handlers for arbitrary exceptions:: + + @app.errorhandler(DatabaseError) + def special_exception_handler(error): + return 'Database connection failed', 500 + + .. versionadded:: 0.7 + Use :meth:`register_error_handler` instead of modifying + :attr:`error_handler_spec` directly, for application wide error + handlers. + + .. versionadded:: 0.7 + One can now additionally also register custom exception types + that do not necessarily have to be a subclass of the + :class:`~werkzeug.exceptions.HTTPException` class. + + :param code_or_exception: the code as integer for the handler, or + an arbitrary exception + """ + + def decorator(f): + self._register_error_handler(None, code_or_exception, f) + return f + + return decorator + + @setupmethod + def register_error_handler(self, code_or_exception, f): + """Alternative error attach function to the :meth:`errorhandler` + decorator that is more straightforward to use for non decorator + usage. + + .. versionadded:: 0.7 + """ + self._register_error_handler(None, code_or_exception, f) + + @setupmethod + def _register_error_handler(self, key, code_or_exception, f): + """ + :type key: None|str + :type code_or_exception: int|T<=Exception + :type f: callable + """ + if isinstance(code_or_exception, HTTPException): # old broken behavior + raise ValueError( + "Tried to register a handler for an exception instance {0!r}." + " Handlers can only be registered for exception classes or" + " HTTP error codes.".format(code_or_exception) + ) + + try: + exc_class, code = self._get_exc_class_and_code(code_or_exception) + except KeyError: + raise KeyError( + "'{0}' is not a recognized HTTP error code. Use a subclass of" + " HTTPException with that code instead.".format(code_or_exception) + ) + + handlers = self.error_handler_spec.setdefault(key, {}).setdefault(code, {}) + handlers[exc_class] = f + + @setupmethod + def template_filter(self, name=None): + """A decorator that is used to register custom template filter. + You can specify a name for the filter, otherwise the function + name will be used. Example:: + + @app.template_filter() + def reverse(s): + return s[::-1] + + :param name: the optional name of the filter, otherwise the + function name will be used. + """ + + def decorator(f): + self.add_template_filter(f, name=name) + return f + + return decorator + + @setupmethod + def add_template_filter(self, f, name=None): + """Register a custom template filter. Works exactly like the + :meth:`template_filter` decorator. + + :param name: the optional name of the filter, otherwise the + function name will be used. + """ + self.jinja_env.filters[name or f.__name__] = f + + @setupmethod + def template_test(self, name=None): + """A decorator that is used to register custom template test. + You can specify a name for the test, otherwise the function + name will be used. Example:: + + @app.template_test() + def is_prime(n): + if n == 2: + return True + for i in range(2, int(math.ceil(math.sqrt(n))) + 1): + if n % i == 0: + return False + return True + + .. versionadded:: 0.10 + + :param name: the optional name of the test, otherwise the + function name will be used. + """ + + def decorator(f): + self.add_template_test(f, name=name) + return f + + return decorator + + @setupmethod + def add_template_test(self, f, name=None): + """Register a custom template test. Works exactly like the + :meth:`template_test` decorator. + + .. versionadded:: 0.10 + + :param name: the optional name of the test, otherwise the + function name will be used. + """ + self.jinja_env.tests[name or f.__name__] = f + + @setupmethod + def template_global(self, name=None): + """A decorator that is used to register a custom template global function. + You can specify a name for the global function, otherwise the function + name will be used. Example:: + + @app.template_global() + def double(n): + return 2 * n + + .. versionadded:: 0.10 + + :param name: the optional name of the global function, otherwise the + function name will be used. + """ + + def decorator(f): + self.add_template_global(f, name=name) + return f + + return decorator + + @setupmethod + def add_template_global(self, f, name=None): + """Register a custom template global function. Works exactly like the + :meth:`template_global` decorator. + + .. versionadded:: 0.10 + + :param name: the optional name of the global function, otherwise the + function name will be used. + """ + self.jinja_env.globals[name or f.__name__] = f + + @setupmethod + def before_request(self, f): + """Registers a function to run before each request. + + For example, this can be used to open a database connection, or to load + the logged in user from the session. + + The function will be called without any arguments. If it returns a + non-None value, the value is handled as if it was the return value from + the view, and further request handling is stopped. + """ + self.before_request_funcs.setdefault(None, []).append(f) + return f + + @setupmethod + def before_first_request(self, f): + """Registers a function to be run before the first request to this + instance of the application. + + The function will be called without any arguments and its return + value is ignored. + + .. versionadded:: 0.8 + """ + self.before_first_request_funcs.append(f) + return f + + @setupmethod + def after_request(self, f): + """Register a function to be run after each request. + + Your function must take one parameter, an instance of + :attr:`response_class` and return a new response object or the + same (see :meth:`process_response`). + + As of Flask 0.7 this function might not be executed at the end of the + request in case an unhandled exception occurred. + """ + self.after_request_funcs.setdefault(None, []).append(f) + return f + + @setupmethod + def teardown_request(self, f): + """Register a function to be run at the end of each request, + regardless of whether there was an exception or not. These functions + are executed when the request context is popped, even if not an + actual request was performed. + + Example:: + + ctx = app.test_request_context() + ctx.push() + ... + ctx.pop() + + When ``ctx.pop()`` is executed in the above example, the teardown + functions are called just before the request context moves from the + stack of active contexts. This becomes relevant if you are using + such constructs in tests. + + Generally teardown functions must take every necessary step to avoid + that they will fail. If they do execute code that might fail they + will have to surround the execution of these code by try/except + statements and log occurring errors. + + When a teardown function was called because of an exception it will + be passed an error object. + + The return values of teardown functions are ignored. + + .. admonition:: Debug Note + + In debug mode Flask will not tear down a request on an exception + immediately. Instead it will keep it alive so that the interactive + debugger can still access it. This behavior can be controlled + by the ``PRESERVE_CONTEXT_ON_EXCEPTION`` configuration variable. + """ + self.teardown_request_funcs.setdefault(None, []).append(f) + return f + + @setupmethod + def teardown_appcontext(self, f): + """Registers a function to be called when the application context + ends. These functions are typically also called when the request + context is popped. + + Example:: + + ctx = app.app_context() + ctx.push() + ... + ctx.pop() + + When ``ctx.pop()`` is executed in the above example, the teardown + functions are called just before the app context moves from the + stack of active contexts. This becomes relevant if you are using + such constructs in tests. + + Since a request context typically also manages an application + context it would also be called when you pop a request context. + + When a teardown function was called because of an unhandled exception + it will be passed an error object. If an :meth:`errorhandler` is + registered, it will handle the exception and the teardown will not + receive it. + + The return values of teardown functions are ignored. + + .. versionadded:: 0.9 + """ + self.teardown_appcontext_funcs.append(f) + return f + + @setupmethod + def context_processor(self, f): + """Registers a template context processor function.""" + self.template_context_processors[None].append(f) + return f + + @setupmethod + def shell_context_processor(self, f): + """Registers a shell context processor function. + + .. versionadded:: 0.11 + """ + self.shell_context_processors.append(f) + return f + + @setupmethod + def url_value_preprocessor(self, f): + """Register a URL value preprocessor function for all view + functions in the application. These functions will be called before the + :meth:`before_request` functions. + + The function can modify the values captured from the matched url before + they are passed to the view. For example, this can be used to pop a + common language code value and place it in ``g`` rather than pass it to + every view. + + The function is passed the endpoint name and values dict. The return + value is ignored. + """ + self.url_value_preprocessors.setdefault(None, []).append(f) + return f + + @setupmethod + def url_defaults(self, f): + """Callback function for URL defaults for all view functions of the + application. It's called with the endpoint and values and should + update the values passed in place. + """ + self.url_default_functions.setdefault(None, []).append(f) + return f + + def _find_error_handler(self, e): + """Return a registered error handler for an exception in this order: + blueprint handler for a specific code, app handler for a specific code, + blueprint handler for an exception class, app handler for an exception + class, or ``None`` if a suitable handler is not found. + """ + exc_class, code = self._get_exc_class_and_code(type(e)) + + for name, c in ( + (request.blueprint, code), + (None, code), + (request.blueprint, None), + (None, None), + ): + handler_map = self.error_handler_spec.setdefault(name, {}).get(c) + + if not handler_map: + continue + + for cls in exc_class.__mro__: + handler = handler_map.get(cls) + + if handler is not None: + return handler + + def handle_http_exception(self, e): + """Handles an HTTP exception. By default this will invoke the + registered error handlers and fall back to returning the + exception as response. + + .. versionchanged:: 1.0.3 + ``RoutingException``, used internally for actions such as + slash redirects during routing, is not passed to error + handlers. + + .. versionchanged:: 1.0 + Exceptions are looked up by code *and* by MRO, so + ``HTTPExcpetion`` subclasses can be handled with a catch-all + handler for the base ``HTTPException``. + + .. versionadded:: 0.3 + """ + # Proxy exceptions don't have error codes. We want to always return + # those unchanged as errors + if e.code is None: + return e + + # RoutingExceptions are used internally to trigger routing + # actions, such as slash redirects raising RequestRedirect. They + # are not raised or handled in user code. + if isinstance(e, RoutingException): + return e + + handler = self._find_error_handler(e) + if handler is None: + return e + return handler(e) + + def trap_http_exception(self, e): + """Checks if an HTTP exception should be trapped or not. By default + this will return ``False`` for all exceptions except for a bad request + key error if ``TRAP_BAD_REQUEST_ERRORS`` is set to ``True``. It + also returns ``True`` if ``TRAP_HTTP_EXCEPTIONS`` is set to ``True``. + + This is called for all HTTP exceptions raised by a view function. + If it returns ``True`` for any exception the error handler for this + exception is not called and it shows up as regular exception in the + traceback. This is helpful for debugging implicitly raised HTTP + exceptions. + + .. versionchanged:: 1.0 + Bad request errors are not trapped by default in debug mode. + + .. versionadded:: 0.8 + """ + if self.config["TRAP_HTTP_EXCEPTIONS"]: + return True + + trap_bad_request = self.config["TRAP_BAD_REQUEST_ERRORS"] + + # if unset, trap key errors in debug mode + if ( + trap_bad_request is None + and self.debug + and isinstance(e, BadRequestKeyError) + ): + return True + + if trap_bad_request: + return isinstance(e, BadRequest) + + return False + + def handle_user_exception(self, e): + """This method is called whenever an exception occurs that + should be handled. A special case is :class:`~werkzeug + .exceptions.HTTPException` which is forwarded to the + :meth:`handle_http_exception` method. This function will either + return a response value or reraise the exception with the same + traceback. + + .. versionchanged:: 1.0 + Key errors raised from request data like ``form`` show the + bad key in debug mode rather than a generic bad request + message. + + .. versionadded:: 0.7 + """ + exc_type, exc_value, tb = sys.exc_info() + assert exc_value is e + # ensure not to trash sys.exc_info() at that point in case someone + # wants the traceback preserved in handle_http_exception. Of course + # we cannot prevent users from trashing it themselves in a custom + # trap_http_exception method so that's their fault then. + + if isinstance(e, BadRequestKeyError): + if self.debug or self.config["TRAP_BAD_REQUEST_ERRORS"]: + e.show_exception = True + + # Werkzeug < 0.15 doesn't add the KeyError to the 400 + # message, add it in manually. + # TODO: clean up once Werkzeug >= 0.15.5 is required + if e.args[0] not in e.get_description(): + e.description = "KeyError: '{}'".format(*e.args) + elif not hasattr(BadRequestKeyError, "show_exception"): + e.args = () + + if isinstance(e, HTTPException) and not self.trap_http_exception(e): + return self.handle_http_exception(e) + + handler = self._find_error_handler(e) + + if handler is None: + reraise(exc_type, exc_value, tb) + return handler(e) + + def handle_exception(self, e): + """Handle an exception that did not have an error handler + associated with it, or that was raised from an error handler. + This always causes a 500 ``InternalServerError``. + + Always sends the :data:`got_request_exception` signal. + + If :attr:`propagate_exceptions` is ``True``, such as in debug + mode, the error will be re-raised so that the debugger can + display it. Otherwise, the original exception is logged, and + an :exc:`~werkzeug.exceptions.InternalServerError` is returned. + + If an error handler is registered for ``InternalServerError`` or + ``500``, it will be used. For consistency, the handler will + always receive the ``InternalServerError``. The original + unhandled exception is available as ``e.original_exception``. + + .. note:: + Prior to Werkzeug 1.0.0, ``InternalServerError`` will not + always have an ``original_exception`` attribute. Use + ``getattr(e, "original_exception", None)`` to simulate the + behavior for compatibility. + + .. versionchanged:: 1.1.0 + Always passes the ``InternalServerError`` instance to the + handler, setting ``original_exception`` to the unhandled + error. + + .. versionchanged:: 1.1.0 + ``after_request`` functions and other finalization is done + even for the default 500 response when there is no handler. + + .. versionadded:: 0.3 + """ + exc_type, exc_value, tb = sys.exc_info() + got_request_exception.send(self, exception=e) + + if self.propagate_exceptions: + # if we want to repropagate the exception, we can attempt to + # raise it with the whole traceback in case we can do that + # (the function was actually called from the except part) + # otherwise, we just raise the error again + if exc_value is e: + reraise(exc_type, exc_value, tb) + else: + raise e + + self.log_exception((exc_type, exc_value, tb)) + server_error = InternalServerError() + # TODO: pass as param when Werkzeug>=1.0.0 is required + # TODO: also remove note about this from docstring and docs + server_error.original_exception = e + handler = self._find_error_handler(server_error) + + if handler is not None: + server_error = handler(server_error) + + return self.finalize_request(server_error, from_error_handler=True) + + def log_exception(self, exc_info): + """Logs an exception. This is called by :meth:`handle_exception` + if debugging is disabled and right before the handler is called. + The default implementation logs the exception as error on the + :attr:`logger`. + + .. versionadded:: 0.8 + """ + self.logger.error( + "Exception on %s [%s]" % (request.path, request.method), exc_info=exc_info + ) + + def raise_routing_exception(self, request): + """Exceptions that are recording during routing are reraised with + this method. During debug we are not reraising redirect requests + for non ``GET``, ``HEAD``, or ``OPTIONS`` requests and we're raising + a different error instead to help debug situations. + + :internal: + """ + if ( + not self.debug + or not isinstance(request.routing_exception, RequestRedirect) + or request.method in ("GET", "HEAD", "OPTIONS") + ): + raise request.routing_exception + + from .debughelpers import FormDataRoutingRedirect + + raise FormDataRoutingRedirect(request) + + def dispatch_request(self): + """Does the request dispatching. Matches the URL and returns the + return value of the view or error handler. This does not have to + be a response object. In order to convert the return value to a + proper response object, call :func:`make_response`. + + .. versionchanged:: 0.7 + This no longer does the exception handling, this code was + moved to the new :meth:`full_dispatch_request`. + """ + req = _request_ctx_stack.top.request + if req.routing_exception is not None: + self.raise_routing_exception(req) + rule = req.url_rule + # if we provide automatic options for this URL and the + # request came with the OPTIONS method, reply automatically + if ( + getattr(rule, "provide_automatic_options", False) + and req.method == "OPTIONS" + ): + return self.make_default_options_response() + # otherwise dispatch to the handler for that endpoint + return self.view_functions[rule.endpoint](**req.view_args) + + def full_dispatch_request(self): + """Dispatches the request and on top of that performs request + pre and postprocessing as well as HTTP exception catching and + error handling. + + .. versionadded:: 0.7 + """ + self.try_trigger_before_first_request_functions() + try: + request_started.send(self) + rv = self.preprocess_request() + if rv is None: + rv = self.dispatch_request() + except Exception as e: + rv = self.handle_user_exception(e) + return self.finalize_request(rv) + + def finalize_request(self, rv, from_error_handler=False): + """Given the return value from a view function this finalizes + the request by converting it into a response and invoking the + postprocessing functions. This is invoked for both normal + request dispatching as well as error handlers. + + Because this means that it might be called as a result of a + failure a special safe mode is available which can be enabled + with the `from_error_handler` flag. If enabled, failures in + response processing will be logged and otherwise ignored. + + :internal: + """ + response = self.make_response(rv) + try: + response = self.process_response(response) + request_finished.send(self, response=response) + except Exception: + if not from_error_handler: + raise + self.logger.exception( + "Request finalizing failed with an error while handling an error" + ) + return response + + def try_trigger_before_first_request_functions(self): + """Called before each request and will ensure that it triggers + the :attr:`before_first_request_funcs` and only exactly once per + application instance (which means process usually). + + :internal: + """ + if self._got_first_request: + return + with self._before_request_lock: + if self._got_first_request: + return + for func in self.before_first_request_funcs: + func() + self._got_first_request = True + + def make_default_options_response(self): + """This method is called to create the default ``OPTIONS`` response. + This can be changed through subclassing to change the default + behavior of ``OPTIONS`` responses. + + .. versionadded:: 0.7 + """ + adapter = _request_ctx_stack.top.url_adapter + if hasattr(adapter, "allowed_methods"): + methods = adapter.allowed_methods() + else: + # fallback for Werkzeug < 0.7 + methods = [] + try: + adapter.match(method="--") + except MethodNotAllowed as e: + methods = e.valid_methods + except HTTPException: + pass + rv = self.response_class() + rv.allow.update(methods) + return rv + + def should_ignore_error(self, error): + """This is called to figure out if an error should be ignored + or not as far as the teardown system is concerned. If this + function returns ``True`` then the teardown handlers will not be + passed the error. + + .. versionadded:: 0.10 + """ + return False + + def make_response(self, rv): + """Convert the return value from a view function to an instance of + :attr:`response_class`. + + :param rv: the return value from the view function. The view function + must return a response. Returning ``None``, or the view ending + without returning, is not allowed. The following types are allowed + for ``view_rv``: + + ``str`` (``unicode`` in Python 2) + A response object is created with the string encoded to UTF-8 + as the body. + + ``bytes`` (``str`` in Python 2) + A response object is created with the bytes as the body. + + ``dict`` + A dictionary that will be jsonify'd before being returned. + + ``tuple`` + Either ``(body, status, headers)``, ``(body, status)``, or + ``(body, headers)``, where ``body`` is any of the other types + allowed here, ``status`` is a string or an integer, and + ``headers`` is a dictionary or a list of ``(key, value)`` + tuples. If ``body`` is a :attr:`response_class` instance, + ``status`` overwrites the exiting value and ``headers`` are + extended. + + :attr:`response_class` + The object is returned unchanged. + + other :class:`~werkzeug.wrappers.Response` class + The object is coerced to :attr:`response_class`. + + :func:`callable` + The function is called as a WSGI application. The result is + used to create a response object. + + .. versionchanged:: 0.9 + Previously a tuple was interpreted as the arguments for the + response object. + """ + + status = headers = None + + # unpack tuple returns + if isinstance(rv, tuple): + len_rv = len(rv) + + # a 3-tuple is unpacked directly + if len_rv == 3: + rv, status, headers = rv + # decide if a 2-tuple has status or headers + elif len_rv == 2: + if isinstance(rv[1], (Headers, dict, tuple, list)): + rv, headers = rv + else: + rv, status = rv + # other sized tuples are not allowed + else: + raise TypeError( + "The view function did not return a valid response tuple." + " The tuple must have the form (body, status, headers)," + " (body, status), or (body, headers)." + ) + + # the body must not be None + if rv is None: + raise TypeError( + "The view function did not return a valid response. The" + " function either returned None or ended without a return" + " statement." + ) + + # make sure the body is an instance of the response class + if not isinstance(rv, self.response_class): + if isinstance(rv, (text_type, bytes, bytearray)): + # let the response class set the status and headers instead of + # waiting to do it manually, so that the class can handle any + # special logic + rv = self.response_class(rv, status=status, headers=headers) + status = headers = None + elif isinstance(rv, dict): + rv = jsonify(rv) + elif isinstance(rv, BaseResponse) or callable(rv): + # evaluate a WSGI callable, or coerce a different response + # class to the correct type + try: + rv = self.response_class.force_type(rv, request.environ) + except TypeError as e: + new_error = TypeError( + "{e}\nThe view function did not return a valid" + " response. The return type must be a string, dict, tuple," + " Response instance, or WSGI callable, but it was a" + " {rv.__class__.__name__}.".format(e=e, rv=rv) + ) + reraise(TypeError, new_error, sys.exc_info()[2]) + else: + raise TypeError( + "The view function did not return a valid" + " response. The return type must be a string, dict, tuple," + " Response instance, or WSGI callable, but it was a" + " {rv.__class__.__name__}.".format(rv=rv) + ) + + # prefer the status if it was provided + if status is not None: + if isinstance(status, (text_type, bytes, bytearray)): + rv.status = status + else: + rv.status_code = status + + # extend existing headers with provided headers + if headers: + rv.headers.extend(headers) + + return rv + + def create_url_adapter(self, request): + """Creates a URL adapter for the given request. The URL adapter + is created at a point where the request context is not yet set + up so the request is passed explicitly. + + .. versionadded:: 0.6 + + .. versionchanged:: 0.9 + This can now also be called without a request object when the + URL adapter is created for the application context. + + .. versionchanged:: 1.0 + :data:`SERVER_NAME` no longer implicitly enables subdomain + matching. Use :attr:`subdomain_matching` instead. + """ + if request is not None: + # If subdomain matching is disabled (the default), use the + # default subdomain in all cases. This should be the default + # in Werkzeug but it currently does not have that feature. + subdomain = ( + (self.url_map.default_subdomain or None) + if not self.subdomain_matching + else None + ) + return self.url_map.bind_to_environ( + request.environ, + server_name=self.config["SERVER_NAME"], + subdomain=subdomain, + ) + # We need at the very least the server name to be set for this + # to work. + if self.config["SERVER_NAME"] is not None: + return self.url_map.bind( + self.config["SERVER_NAME"], + script_name=self.config["APPLICATION_ROOT"], + url_scheme=self.config["PREFERRED_URL_SCHEME"], + ) + + def inject_url_defaults(self, endpoint, values): + """Injects the URL defaults for the given endpoint directly into + the values dictionary passed. This is used internally and + automatically called on URL building. + + .. versionadded:: 0.7 + """ + funcs = self.url_default_functions.get(None, ()) + if "." in endpoint: + bp = endpoint.rsplit(".", 1)[0] + funcs = chain(funcs, self.url_default_functions.get(bp, ())) + for func in funcs: + func(endpoint, values) + + def handle_url_build_error(self, error, endpoint, values): + """Handle :class:`~werkzeug.routing.BuildError` on :meth:`url_for`. + """ + exc_type, exc_value, tb = sys.exc_info() + for handler in self.url_build_error_handlers: + try: + rv = handler(error, endpoint, values) + if rv is not None: + return rv + except BuildError as e: + # make error available outside except block (py3) + error = e + + # At this point we want to reraise the exception. If the error is + # still the same one we can reraise it with the original traceback, + # otherwise we raise it from here. + if error is exc_value: + reraise(exc_type, exc_value, tb) + raise error + + def preprocess_request(self): + """Called before the request is dispatched. Calls + :attr:`url_value_preprocessors` registered with the app and the + current blueprint (if any). Then calls :attr:`before_request_funcs` + registered with the app and the blueprint. + + If any :meth:`before_request` handler returns a non-None value, the + value is handled as if it was the return value from the view, and + further request handling is stopped. + """ + + bp = _request_ctx_stack.top.request.blueprint + + funcs = self.url_value_preprocessors.get(None, ()) + if bp is not None and bp in self.url_value_preprocessors: + funcs = chain(funcs, self.url_value_preprocessors[bp]) + for func in funcs: + func(request.endpoint, request.view_args) + + funcs = self.before_request_funcs.get(None, ()) + if bp is not None and bp in self.before_request_funcs: + funcs = chain(funcs, self.before_request_funcs[bp]) + for func in funcs: + rv = func() + if rv is not None: + return rv + + def process_response(self, response): + """Can be overridden in order to modify the response object + before it's sent to the WSGI server. By default this will + call all the :meth:`after_request` decorated functions. + + .. versionchanged:: 0.5 + As of Flask 0.5 the functions registered for after request + execution are called in reverse order of registration. + + :param response: a :attr:`response_class` object. + :return: a new response object or the same, has to be an + instance of :attr:`response_class`. + """ + ctx = _request_ctx_stack.top + bp = ctx.request.blueprint + funcs = ctx._after_request_functions + if bp is not None and bp in self.after_request_funcs: + funcs = chain(funcs, reversed(self.after_request_funcs[bp])) + if None in self.after_request_funcs: + funcs = chain(funcs, reversed(self.after_request_funcs[None])) + for handler in funcs: + response = handler(response) + if not self.session_interface.is_null_session(ctx.session): + self.session_interface.save_session(self, ctx.session, response) + return response + + def do_teardown_request(self, exc=_sentinel): + """Called after the request is dispatched and the response is + returned, right before the request context is popped. + + This calls all functions decorated with + :meth:`teardown_request`, and :meth:`Blueprint.teardown_request` + if a blueprint handled the request. Finally, the + :data:`request_tearing_down` signal is sent. + + This is called by + :meth:`RequestContext.pop() `, + which may be delayed during testing to maintain access to + resources. + + :param exc: An unhandled exception raised while dispatching the + request. Detected from the current exception information if + not passed. Passed to each teardown function. + + .. versionchanged:: 0.9 + Added the ``exc`` argument. + """ + if exc is _sentinel: + exc = sys.exc_info()[1] + funcs = reversed(self.teardown_request_funcs.get(None, ())) + bp = _request_ctx_stack.top.request.blueprint + if bp is not None and bp in self.teardown_request_funcs: + funcs = chain(funcs, reversed(self.teardown_request_funcs[bp])) + for func in funcs: + func(exc) + request_tearing_down.send(self, exc=exc) + + def do_teardown_appcontext(self, exc=_sentinel): + """Called right before the application context is popped. + + When handling a request, the application context is popped + after the request context. See :meth:`do_teardown_request`. + + This calls all functions decorated with + :meth:`teardown_appcontext`. Then the + :data:`appcontext_tearing_down` signal is sent. + + This is called by + :meth:`AppContext.pop() `. + + .. versionadded:: 0.9 + """ + if exc is _sentinel: + exc = sys.exc_info()[1] + for func in reversed(self.teardown_appcontext_funcs): + func(exc) + appcontext_tearing_down.send(self, exc=exc) + + def app_context(self): + """Create an :class:`~flask.ctx.AppContext`. Use as a ``with`` + block to push the context, which will make :data:`current_app` + point at this application. + + An application context is automatically pushed by + :meth:`RequestContext.push() ` + when handling a request, and when running a CLI command. Use + this to manually create a context outside of these situations. + + :: + + with app.app_context(): + init_db() + + See :doc:`/appcontext`. + + .. versionadded:: 0.9 + """ + return AppContext(self) + + def request_context(self, environ): + """Create a :class:`~flask.ctx.RequestContext` representing a + WSGI environment. Use a ``with`` block to push the context, + which will make :data:`request` point at this request. + + See :doc:`/reqcontext`. + + Typically you should not call this from your own code. A request + context is automatically pushed by the :meth:`wsgi_app` when + handling a request. Use :meth:`test_request_context` to create + an environment and context instead of this method. + + :param environ: a WSGI environment + """ + return RequestContext(self, environ) + + def test_request_context(self, *args, **kwargs): + """Create a :class:`~flask.ctx.RequestContext` for a WSGI + environment created from the given values. This is mostly useful + during testing, where you may want to run a function that uses + request data without dispatching a full request. + + See :doc:`/reqcontext`. + + Use a ``with`` block to push the context, which will make + :data:`request` point at the request for the created + environment. :: + + with test_request_context(...): + generate_report() + + When using the shell, it may be easier to push and pop the + context manually to avoid indentation. :: + + ctx = app.test_request_context(...) + ctx.push() + ... + ctx.pop() + + Takes the same arguments as Werkzeug's + :class:`~werkzeug.test.EnvironBuilder`, with some defaults from + the application. See the linked Werkzeug docs for most of the + available arguments. Flask-specific behavior is listed here. + + :param path: URL path being requested. + :param base_url: Base URL where the app is being served, which + ``path`` is relative to. If not given, built from + :data:`PREFERRED_URL_SCHEME`, ``subdomain``, + :data:`SERVER_NAME`, and :data:`APPLICATION_ROOT`. + :param subdomain: Subdomain name to append to + :data:`SERVER_NAME`. + :param url_scheme: Scheme to use instead of + :data:`PREFERRED_URL_SCHEME`. + :param data: The request body, either as a string or a dict of + form keys and values. + :param json: If given, this is serialized as JSON and passed as + ``data``. Also defaults ``content_type`` to + ``application/json``. + :param args: other positional arguments passed to + :class:`~werkzeug.test.EnvironBuilder`. + :param kwargs: other keyword arguments passed to + :class:`~werkzeug.test.EnvironBuilder`. + """ + from .testing import EnvironBuilder + + builder = EnvironBuilder(self, *args, **kwargs) + + try: + return self.request_context(builder.get_environ()) + finally: + builder.close() + + def wsgi_app(self, environ, start_response): + """The actual WSGI application. This is not implemented in + :meth:`__call__` so that middlewares can be applied without + losing a reference to the app object. Instead of doing this:: + + app = MyMiddleware(app) + + It's a better idea to do this instead:: + + app.wsgi_app = MyMiddleware(app.wsgi_app) + + Then you still have the original application object around and + can continue to call methods on it. + + .. versionchanged:: 0.7 + Teardown events for the request and app contexts are called + even if an unhandled error occurs. Other events may not be + called depending on when an error occurs during dispatch. + See :ref:`callbacks-and-errors`. + + :param environ: A WSGI environment. + :param start_response: A callable accepting a status code, + a list of headers, and an optional exception context to + start the response. + """ + ctx = self.request_context(environ) + error = None + try: + try: + ctx.push() + response = self.full_dispatch_request() + except Exception as e: + error = e + response = self.handle_exception(e) + except: # noqa: B001 + error = sys.exc_info()[1] + raise + return response(environ, start_response) + finally: + if self.should_ignore_error(error): + error = None + ctx.auto_pop(error) + + def __call__(self, environ, start_response): + """The WSGI server calls the Flask application object as the + WSGI application. This calls :meth:`wsgi_app` which can be + wrapped to applying middleware.""" + return self.wsgi_app(environ, start_response) + + def __repr__(self): + return "<%s %r>" % (self.__class__.__name__, self.name) diff --git a/week-0/day-3/my_todo_app/venv/lib/python3.6/site-packages/flask/blueprints.py b/week-0/day-3/my_todo_app/venv/lib/python3.6/site-packages/flask/blueprints.py new file mode 100644 index 00000000..8978104d --- /dev/null +++ b/week-0/day-3/my_todo_app/venv/lib/python3.6/site-packages/flask/blueprints.py @@ -0,0 +1,569 @@ +# -*- coding: utf-8 -*- +""" + flask.blueprints + ~~~~~~~~~~~~~~~~ + + Blueprints are the recommended way to implement larger or more + pluggable applications in Flask 0.7 and later. + + :copyright: 2010 Pallets + :license: BSD-3-Clause +""" +from functools import update_wrapper + +from .helpers import _endpoint_from_view_func +from .helpers import _PackageBoundObject + +# a singleton sentinel value for parameter defaults +_sentinel = object() + + +class BlueprintSetupState(object): + """Temporary holder object for registering a blueprint with the + application. An instance of this class is created by the + :meth:`~flask.Blueprint.make_setup_state` method and later passed + to all register callback functions. + """ + + def __init__(self, blueprint, app, options, first_registration): + #: a reference to the current application + self.app = app + + #: a reference to the blueprint that created this setup state. + self.blueprint = blueprint + + #: a dictionary with all options that were passed to the + #: :meth:`~flask.Flask.register_blueprint` method. + self.options = options + + #: as blueprints can be registered multiple times with the + #: application and not everything wants to be registered + #: multiple times on it, this attribute can be used to figure + #: out if the blueprint was registered in the past already. + self.first_registration = first_registration + + subdomain = self.options.get("subdomain") + if subdomain is None: + subdomain = self.blueprint.subdomain + + #: The subdomain that the blueprint should be active for, ``None`` + #: otherwise. + self.subdomain = subdomain + + url_prefix = self.options.get("url_prefix") + if url_prefix is None: + url_prefix = self.blueprint.url_prefix + #: The prefix that should be used for all URLs defined on the + #: blueprint. + self.url_prefix = url_prefix + + #: A dictionary with URL defaults that is added to each and every + #: URL that was defined with the blueprint. + self.url_defaults = dict(self.blueprint.url_values_defaults) + self.url_defaults.update(self.options.get("url_defaults", ())) + + def add_url_rule(self, rule, endpoint=None, view_func=None, **options): + """A helper method to register a rule (and optionally a view function) + to the application. The endpoint is automatically prefixed with the + blueprint's name. + """ + if self.url_prefix is not None: + if rule: + rule = "/".join((self.url_prefix.rstrip("/"), rule.lstrip("/"))) + else: + rule = self.url_prefix + options.setdefault("subdomain", self.subdomain) + if endpoint is None: + endpoint = _endpoint_from_view_func(view_func) + defaults = self.url_defaults + if "defaults" in options: + defaults = dict(defaults, **options.pop("defaults")) + self.app.add_url_rule( + rule, + "%s.%s" % (self.blueprint.name, endpoint), + view_func, + defaults=defaults, + **options + ) + + +class Blueprint(_PackageBoundObject): + """Represents a blueprint, a collection of routes and other + app-related functions that can be registered on a real application + later. + + A blueprint is an object that allows defining application functions + without requiring an application object ahead of time. It uses the + same decorators as :class:`~flask.Flask`, but defers the need for an + application by recording them for later registration. + + Decorating a function with a blueprint creates a deferred function + that is called with :class:`~flask.blueprints.BlueprintSetupState` + when the blueprint is registered on an application. + + See :ref:`blueprints` for more information. + + .. versionchanged:: 1.1.0 + Blueprints have a ``cli`` group to register nested CLI commands. + The ``cli_group`` parameter controls the name of the group under + the ``flask`` command. + + .. versionadded:: 0.7 + + :param name: The name of the blueprint. Will be prepended to each + endpoint name. + :param import_name: The name of the blueprint package, usually + ``__name__``. This helps locate the ``root_path`` for the + blueprint. + :param static_folder: A folder with static files that should be + served by the blueprint's static route. The path is relative to + the blueprint's root path. Blueprint static files are disabled + by default. + :param static_url_path: The url to serve static files from. + Defaults to ``static_folder``. If the blueprint does not have + a ``url_prefix``, the app's static route will take precedence, + and the blueprint's static files won't be accessible. + :param template_folder: A folder with templates that should be added + to the app's template search path. The path is relative to the + blueprint's root path. Blueprint templates are disabled by + default. Blueprint templates have a lower precedence than those + in the app's templates folder. + :param url_prefix: A path to prepend to all of the blueprint's URLs, + to make them distinct from the rest of the app's routes. + :param subdomain: A subdomain that blueprint routes will match on by + default. + :param url_defaults: A dict of default values that blueprint routes + will receive by default. + :param root_path: By default, the blueprint will automatically this + based on ``import_name``. In certain situations this automatic + detection can fail, so the path can be specified manually + instead. + """ + + warn_on_modifications = False + _got_registered_once = False + + #: Blueprint local JSON decoder class to use. + #: Set to ``None`` to use the app's :class:`~flask.app.Flask.json_encoder`. + json_encoder = None + #: Blueprint local JSON decoder class to use. + #: Set to ``None`` to use the app's :class:`~flask.app.Flask.json_decoder`. + json_decoder = None + + # TODO remove the next three attrs when Sphinx :inherited-members: works + # https://github.com/sphinx-doc/sphinx/issues/741 + + #: The name of the package or module that this app belongs to. Do not + #: change this once it is set by the constructor. + import_name = None + + #: Location of the template files to be added to the template lookup. + #: ``None`` if templates should not be added. + template_folder = None + + #: Absolute path to the package on the filesystem. Used to look up + #: resources contained in the package. + root_path = None + + def __init__( + self, + name, + import_name, + static_folder=None, + static_url_path=None, + template_folder=None, + url_prefix=None, + subdomain=None, + url_defaults=None, + root_path=None, + cli_group=_sentinel, + ): + _PackageBoundObject.__init__( + self, import_name, template_folder, root_path=root_path + ) + self.name = name + self.url_prefix = url_prefix + self.subdomain = subdomain + self.static_folder = static_folder + self.static_url_path = static_url_path + self.deferred_functions = [] + if url_defaults is None: + url_defaults = {} + self.url_values_defaults = url_defaults + self.cli_group = cli_group + + def record(self, func): + """Registers a function that is called when the blueprint is + registered on the application. This function is called with the + state as argument as returned by the :meth:`make_setup_state` + method. + """ + if self._got_registered_once and self.warn_on_modifications: + from warnings import warn + + warn( + Warning( + "The blueprint was already registered once " + "but is getting modified now. These changes " + "will not show up." + ) + ) + self.deferred_functions.append(func) + + def record_once(self, func): + """Works like :meth:`record` but wraps the function in another + function that will ensure the function is only called once. If the + blueprint is registered a second time on the application, the + function passed is not called. + """ + + def wrapper(state): + if state.first_registration: + func(state) + + return self.record(update_wrapper(wrapper, func)) + + def make_setup_state(self, app, options, first_registration=False): + """Creates an instance of :meth:`~flask.blueprints.BlueprintSetupState` + object that is later passed to the register callback functions. + Subclasses can override this to return a subclass of the setup state. + """ + return BlueprintSetupState(self, app, options, first_registration) + + def register(self, app, options, first_registration=False): + """Called by :meth:`Flask.register_blueprint` to register all views + and callbacks registered on the blueprint with the application. Creates + a :class:`.BlueprintSetupState` and calls each :meth:`record` callback + with it. + + :param app: The application this blueprint is being registered with. + :param options: Keyword arguments forwarded from + :meth:`~Flask.register_blueprint`. + :param first_registration: Whether this is the first time this + blueprint has been registered on the application. + """ + self._got_registered_once = True + state = self.make_setup_state(app, options, first_registration) + + if self.has_static_folder: + state.add_url_rule( + self.static_url_path + "/", + view_func=self.send_static_file, + endpoint="static", + ) + + for deferred in self.deferred_functions: + deferred(state) + + cli_resolved_group = options.get("cli_group", self.cli_group) + + if not self.cli.commands: + return + + if cli_resolved_group is None: + app.cli.commands.update(self.cli.commands) + elif cli_resolved_group is _sentinel: + self.cli.name = self.name + app.cli.add_command(self.cli) + else: + self.cli.name = cli_resolved_group + app.cli.add_command(self.cli) + + def route(self, rule, **options): + """Like :meth:`Flask.route` but for a blueprint. The endpoint for the + :func:`url_for` function is prefixed with the name of the blueprint. + """ + + def decorator(f): + endpoint = options.pop("endpoint", f.__name__) + self.add_url_rule(rule, endpoint, f, **options) + return f + + return decorator + + def add_url_rule(self, rule, endpoint=None, view_func=None, **options): + """Like :meth:`Flask.add_url_rule` but for a blueprint. The endpoint for + the :func:`url_for` function is prefixed with the name of the blueprint. + """ + if endpoint: + assert "." not in endpoint, "Blueprint endpoints should not contain dots" + if view_func and hasattr(view_func, "__name__"): + assert ( + "." not in view_func.__name__ + ), "Blueprint view function name should not contain dots" + self.record(lambda s: s.add_url_rule(rule, endpoint, view_func, **options)) + + def endpoint(self, endpoint): + """Like :meth:`Flask.endpoint` but for a blueprint. This does not + prefix the endpoint with the blueprint name, this has to be done + explicitly by the user of this method. If the endpoint is prefixed + with a `.` it will be registered to the current blueprint, otherwise + it's an application independent endpoint. + """ + + def decorator(f): + def register_endpoint(state): + state.app.view_functions[endpoint] = f + + self.record_once(register_endpoint) + return f + + return decorator + + def app_template_filter(self, name=None): + """Register a custom template filter, available application wide. Like + :meth:`Flask.template_filter` but for a blueprint. + + :param name: the optional name of the filter, otherwise the + function name will be used. + """ + + def decorator(f): + self.add_app_template_filter(f, name=name) + return f + + return decorator + + def add_app_template_filter(self, f, name=None): + """Register a custom template filter, available application wide. Like + :meth:`Flask.add_template_filter` but for a blueprint. Works exactly + like the :meth:`app_template_filter` decorator. + + :param name: the optional name of the filter, otherwise the + function name will be used. + """ + + def register_template(state): + state.app.jinja_env.filters[name or f.__name__] = f + + self.record_once(register_template) + + def app_template_test(self, name=None): + """Register a custom template test, available application wide. Like + :meth:`Flask.template_test` but for a blueprint. + + .. versionadded:: 0.10 + + :param name: the optional name of the test, otherwise the + function name will be used. + """ + + def decorator(f): + self.add_app_template_test(f, name=name) + return f + + return decorator + + def add_app_template_test(self, f, name=None): + """Register a custom template test, available application wide. Like + :meth:`Flask.add_template_test` but for a blueprint. Works exactly + like the :meth:`app_template_test` decorator. + + .. versionadded:: 0.10 + + :param name: the optional name of the test, otherwise the + function name will be used. + """ + + def register_template(state): + state.app.jinja_env.tests[name or f.__name__] = f + + self.record_once(register_template) + + def app_template_global(self, name=None): + """Register a custom template global, available application wide. Like + :meth:`Flask.template_global` but for a blueprint. + + .. versionadded:: 0.10 + + :param name: the optional name of the global, otherwise the + function name will be used. + """ + + def decorator(f): + self.add_app_template_global(f, name=name) + return f + + return decorator + + def add_app_template_global(self, f, name=None): + """Register a custom template global, available application wide. Like + :meth:`Flask.add_template_global` but for a blueprint. Works exactly + like the :meth:`app_template_global` decorator. + + .. versionadded:: 0.10 + + :param name: the optional name of the global, otherwise the + function name will be used. + """ + + def register_template(state): + state.app.jinja_env.globals[name or f.__name__] = f + + self.record_once(register_template) + + def before_request(self, f): + """Like :meth:`Flask.before_request` but for a blueprint. This function + is only executed before each request that is handled by a function of + that blueprint. + """ + self.record_once( + lambda s: s.app.before_request_funcs.setdefault(self.name, []).append(f) + ) + return f + + def before_app_request(self, f): + """Like :meth:`Flask.before_request`. Such a function is executed + before each request, even if outside of a blueprint. + """ + self.record_once( + lambda s: s.app.before_request_funcs.setdefault(None, []).append(f) + ) + return f + + def before_app_first_request(self, f): + """Like :meth:`Flask.before_first_request`. Such a function is + executed before the first request to the application. + """ + self.record_once(lambda s: s.app.before_first_request_funcs.append(f)) + return f + + def after_request(self, f): + """Like :meth:`Flask.after_request` but for a blueprint. This function + is only executed after each request that is handled by a function of + that blueprint. + """ + self.record_once( + lambda s: s.app.after_request_funcs.setdefault(self.name, []).append(f) + ) + return f + + def after_app_request(self, f): + """Like :meth:`Flask.after_request` but for a blueprint. Such a function + is executed after each request, even if outside of the blueprint. + """ + self.record_once( + lambda s: s.app.after_request_funcs.setdefault(None, []).append(f) + ) + return f + + def teardown_request(self, f): + """Like :meth:`Flask.teardown_request` but for a blueprint. This + function is only executed when tearing down requests handled by a + function of that blueprint. Teardown request functions are executed + when the request context is popped, even when no actual request was + performed. + """ + self.record_once( + lambda s: s.app.teardown_request_funcs.setdefault(self.name, []).append(f) + ) + return f + + def teardown_app_request(self, f): + """Like :meth:`Flask.teardown_request` but for a blueprint. Such a + function is executed when tearing down each request, even if outside of + the blueprint. + """ + self.record_once( + lambda s: s.app.teardown_request_funcs.setdefault(None, []).append(f) + ) + return f + + def context_processor(self, f): + """Like :meth:`Flask.context_processor` but for a blueprint. This + function is only executed for requests handled by a blueprint. + """ + self.record_once( + lambda s: s.app.template_context_processors.setdefault( + self.name, [] + ).append(f) + ) + return f + + def app_context_processor(self, f): + """Like :meth:`Flask.context_processor` but for a blueprint. Such a + function is executed each request, even if outside of the blueprint. + """ + self.record_once( + lambda s: s.app.template_context_processors.setdefault(None, []).append(f) + ) + return f + + def app_errorhandler(self, code): + """Like :meth:`Flask.errorhandler` but for a blueprint. This + handler is used for all requests, even if outside of the blueprint. + """ + + def decorator(f): + self.record_once(lambda s: s.app.errorhandler(code)(f)) + return f + + return decorator + + def url_value_preprocessor(self, f): + """Registers a function as URL value preprocessor for this + blueprint. It's called before the view functions are called and + can modify the url values provided. + """ + self.record_once( + lambda s: s.app.url_value_preprocessors.setdefault(self.name, []).append(f) + ) + return f + + def url_defaults(self, f): + """Callback function for URL defaults for this blueprint. It's called + with the endpoint and values and should update the values passed + in place. + """ + self.record_once( + lambda s: s.app.url_default_functions.setdefault(self.name, []).append(f) + ) + return f + + def app_url_value_preprocessor(self, f): + """Same as :meth:`url_value_preprocessor` but application wide. + """ + self.record_once( + lambda s: s.app.url_value_preprocessors.setdefault(None, []).append(f) + ) + return f + + def app_url_defaults(self, f): + """Same as :meth:`url_defaults` but application wide. + """ + self.record_once( + lambda s: s.app.url_default_functions.setdefault(None, []).append(f) + ) + return f + + def errorhandler(self, code_or_exception): + """Registers an error handler that becomes active for this blueprint + only. Please be aware that routing does not happen local to a + blueprint so an error handler for 404 usually is not handled by + a blueprint unless it is caused inside a view function. Another + special case is the 500 internal server error which is always looked + up from the application. + + Otherwise works as the :meth:`~flask.Flask.errorhandler` decorator + of the :class:`~flask.Flask` object. + """ + + def decorator(f): + self.record_once( + lambda s: s.app._register_error_handler(self.name, code_or_exception, f) + ) + return f + + return decorator + + def register_error_handler(self, code_or_exception, f): + """Non-decorator version of the :meth:`errorhandler` error attach + function, akin to the :meth:`~flask.Flask.register_error_handler` + application-wide function of the :class:`~flask.Flask` object but + for error handlers limited to this blueprint. + + .. versionadded:: 0.11 + """ + self.record_once( + lambda s: s.app._register_error_handler(self.name, code_or_exception, f) + ) diff --git a/week-0/day-3/my_todo_app/venv/lib/python3.6/site-packages/flask/cli.py b/week-0/day-3/my_todo_app/venv/lib/python3.6/site-packages/flask/cli.py new file mode 100644 index 00000000..11585455 --- /dev/null +++ b/week-0/day-3/my_todo_app/venv/lib/python3.6/site-packages/flask/cli.py @@ -0,0 +1,970 @@ +# -*- coding: utf-8 -*- +""" + flask.cli + ~~~~~~~~~ + + A simple command line application to run flask apps. + + :copyright: 2010 Pallets + :license: BSD-3-Clause +""" +from __future__ import print_function + +import ast +import inspect +import os +import platform +import re +import sys +import traceback +from functools import update_wrapper +from operator import attrgetter +from threading import Lock +from threading import Thread + +import click +from werkzeug.utils import import_string + +from ._compat import getargspec +from ._compat import itervalues +from ._compat import reraise +from ._compat import text_type +from .globals import current_app +from .helpers import get_debug_flag +from .helpers import get_env +from .helpers import get_load_dotenv + +try: + import dotenv +except ImportError: + dotenv = None + +try: + import ssl +except ImportError: + ssl = None + + +class NoAppException(click.UsageError): + """Raised if an application cannot be found or loaded.""" + + +def find_best_app(script_info, module): + """Given a module instance this tries to find the best possible + application in the module or raises an exception. + """ + from . import Flask + + # Search for the most common names first. + for attr_name in ("app", "application"): + app = getattr(module, attr_name, None) + + if isinstance(app, Flask): + return app + + # Otherwise find the only object that is a Flask instance. + matches = [v for v in itervalues(module.__dict__) if isinstance(v, Flask)] + + if len(matches) == 1: + return matches[0] + elif len(matches) > 1: + raise NoAppException( + 'Detected multiple Flask applications in module "{module}". Use ' + '"FLASK_APP={module}:name" to specify the correct ' + "one.".format(module=module.__name__) + ) + + # Search for app factory functions. + for attr_name in ("create_app", "make_app"): + app_factory = getattr(module, attr_name, None) + + if inspect.isfunction(app_factory): + try: + app = call_factory(script_info, app_factory) + + if isinstance(app, Flask): + return app + except TypeError: + if not _called_with_wrong_args(app_factory): + raise + raise NoAppException( + 'Detected factory "{factory}" in module "{module}", but ' + "could not call it without arguments. Use " + "\"FLASK_APP='{module}:{factory}(args)'\" to specify " + "arguments.".format(factory=attr_name, module=module.__name__) + ) + + raise NoAppException( + 'Failed to find Flask application or factory in module "{module}". ' + 'Use "FLASK_APP={module}:name to specify one.'.format(module=module.__name__) + ) + + +def call_factory(script_info, app_factory, arguments=()): + """Takes an app factory, a ``script_info` object and optionally a tuple + of arguments. Checks for the existence of a script_info argument and calls + the app_factory depending on that and the arguments provided. + """ + args_spec = getargspec(app_factory) + arg_names = args_spec.args + arg_defaults = args_spec.defaults + + if "script_info" in arg_names: + return app_factory(*arguments, script_info=script_info) + elif arguments: + return app_factory(*arguments) + elif not arguments and len(arg_names) == 1 and arg_defaults is None: + return app_factory(script_info) + + return app_factory() + + +def _called_with_wrong_args(factory): + """Check whether calling a function raised a ``TypeError`` because + the call failed or because something in the factory raised the + error. + + :param factory: the factory function that was called + :return: true if the call failed + """ + tb = sys.exc_info()[2] + + try: + while tb is not None: + if tb.tb_frame.f_code is factory.__code__: + # in the factory, it was called successfully + return False + + tb = tb.tb_next + + # didn't reach the factory + return True + finally: + # explicitly delete tb as it is circular referenced + # https://docs.python.org/2/library/sys.html#sys.exc_info + del tb + + +def find_app_by_string(script_info, module, app_name): + """Checks if the given string is a variable name or a function. If it is a + function, it checks for specified arguments and whether it takes a + ``script_info`` argument and calls the function with the appropriate + arguments. + """ + from . import Flask + + match = re.match(r"^ *([^ ()]+) *(?:\((.*?) *,? *\))? *$", app_name) + + if not match: + raise NoAppException( + '"{name}" is not a valid variable name or function ' + "expression.".format(name=app_name) + ) + + name, args = match.groups() + + try: + attr = getattr(module, name) + except AttributeError as e: + raise NoAppException(e.args[0]) + + if inspect.isfunction(attr): + if args: + try: + args = ast.literal_eval("({args},)".format(args=args)) + except (ValueError, SyntaxError) as e: + raise NoAppException( + "Could not parse the arguments in " + '"{app_name}".'.format(e=e, app_name=app_name) + ) + else: + args = () + + try: + app = call_factory(script_info, attr, args) + except TypeError as e: + if not _called_with_wrong_args(attr): + raise + + raise NoAppException( + '{e}\nThe factory "{app_name}" in module "{module}" could not ' + "be called with the specified arguments.".format( + e=e, app_name=app_name, module=module.__name__ + ) + ) + else: + app = attr + + if isinstance(app, Flask): + return app + + raise NoAppException( + "A valid Flask application was not obtained from " + '"{module}:{app_name}".'.format(module=module.__name__, app_name=app_name) + ) + + +def prepare_import(path): + """Given a filename this will try to calculate the python path, add it + to the search path and return the actual module name that is expected. + """ + path = os.path.realpath(path) + + fname, ext = os.path.splitext(path) + if ext == ".py": + path = fname + + if os.path.basename(path) == "__init__": + path = os.path.dirname(path) + + module_name = [] + + # move up until outside package structure (no __init__.py) + while True: + path, name = os.path.split(path) + module_name.append(name) + + if not os.path.exists(os.path.join(path, "__init__.py")): + break + + if sys.path[0] != path: + sys.path.insert(0, path) + + return ".".join(module_name[::-1]) + + +def locate_app(script_info, module_name, app_name, raise_if_not_found=True): + __traceback_hide__ = True # noqa: F841 + + try: + __import__(module_name) + except ImportError: + # Reraise the ImportError if it occurred within the imported module. + # Determine this by checking whether the trace has a depth > 1. + if sys.exc_info()[-1].tb_next: + raise NoAppException( + 'While importing "{name}", an ImportError was raised:' + "\n\n{tb}".format(name=module_name, tb=traceback.format_exc()) + ) + elif raise_if_not_found: + raise NoAppException('Could not import "{name}".'.format(name=module_name)) + else: + return + + module = sys.modules[module_name] + + if app_name is None: + return find_best_app(script_info, module) + else: + return find_app_by_string(script_info, module, app_name) + + +def get_version(ctx, param, value): + if not value or ctx.resilient_parsing: + return + + import werkzeug + from . import __version__ + + message = "Python %(python)s\nFlask %(flask)s\nWerkzeug %(werkzeug)s" + click.echo( + message + % { + "python": platform.python_version(), + "flask": __version__, + "werkzeug": werkzeug.__version__, + }, + color=ctx.color, + ) + ctx.exit() + + +version_option = click.Option( + ["--version"], + help="Show the flask version", + expose_value=False, + callback=get_version, + is_flag=True, + is_eager=True, +) + + +class DispatchingApp(object): + """Special application that dispatches to a Flask application which + is imported by name in a background thread. If an error happens + it is recorded and shown as part of the WSGI handling which in case + of the Werkzeug debugger means that it shows up in the browser. + """ + + def __init__(self, loader, use_eager_loading=False): + self.loader = loader + self._app = None + self._lock = Lock() + self._bg_loading_exc_info = None + if use_eager_loading: + self._load_unlocked() + else: + self._load_in_background() + + def _load_in_background(self): + def _load_app(): + __traceback_hide__ = True # noqa: F841 + with self._lock: + try: + self._load_unlocked() + except Exception: + self._bg_loading_exc_info = sys.exc_info() + + t = Thread(target=_load_app, args=()) + t.start() + + def _flush_bg_loading_exception(self): + __traceback_hide__ = True # noqa: F841 + exc_info = self._bg_loading_exc_info + if exc_info is not None: + self._bg_loading_exc_info = None + reraise(*exc_info) + + def _load_unlocked(self): + __traceback_hide__ = True # noqa: F841 + self._app = rv = self.loader() + self._bg_loading_exc_info = None + return rv + + def __call__(self, environ, start_response): + __traceback_hide__ = True # noqa: F841 + if self._app is not None: + return self._app(environ, start_response) + self._flush_bg_loading_exception() + with self._lock: + if self._app is not None: + rv = self._app + else: + rv = self._load_unlocked() + return rv(environ, start_response) + + +class ScriptInfo(object): + """Helper object to deal with Flask applications. This is usually not + necessary to interface with as it's used internally in the dispatching + to click. In future versions of Flask this object will most likely play + a bigger role. Typically it's created automatically by the + :class:`FlaskGroup` but you can also manually create it and pass it + onwards as click object. + """ + + def __init__(self, app_import_path=None, create_app=None, set_debug_flag=True): + #: Optionally the import path for the Flask application. + self.app_import_path = app_import_path or os.environ.get("FLASK_APP") + #: Optionally a function that is passed the script info to create + #: the instance of the application. + self.create_app = create_app + #: A dictionary with arbitrary data that can be associated with + #: this script info. + self.data = {} + self.set_debug_flag = set_debug_flag + self._loaded_app = None + + def load_app(self): + """Loads the Flask app (if not yet loaded) and returns it. Calling + this multiple times will just result in the already loaded app to + be returned. + """ + __traceback_hide__ = True # noqa: F841 + + if self._loaded_app is not None: + return self._loaded_app + + app = None + + if self.create_app is not None: + app = call_factory(self, self.create_app) + else: + if self.app_import_path: + path, name = ( + re.split(r":(?![\\/])", self.app_import_path, 1) + [None] + )[:2] + import_name = prepare_import(path) + app = locate_app(self, import_name, name) + else: + for path in ("wsgi.py", "app.py"): + import_name = prepare_import(path) + app = locate_app(self, import_name, None, raise_if_not_found=False) + + if app: + break + + if not app: + raise NoAppException( + "Could not locate a Flask application. You did not provide " + 'the "FLASK_APP" environment variable, and a "wsgi.py" or ' + '"app.py" module was not found in the current directory.' + ) + + if self.set_debug_flag: + # Update the app's debug flag through the descriptor so that + # other values repopulate as well. + app.debug = get_debug_flag() + + self._loaded_app = app + return app + + +pass_script_info = click.make_pass_decorator(ScriptInfo, ensure=True) + + +def with_appcontext(f): + """Wraps a callback so that it's guaranteed to be executed with the + script's application context. If callbacks are registered directly + to the ``app.cli`` object then they are wrapped with this function + by default unless it's disabled. + """ + + @click.pass_context + def decorator(__ctx, *args, **kwargs): + with __ctx.ensure_object(ScriptInfo).load_app().app_context(): + return __ctx.invoke(f, *args, **kwargs) + + return update_wrapper(decorator, f) + + +class AppGroup(click.Group): + """This works similar to a regular click :class:`~click.Group` but it + changes the behavior of the :meth:`command` decorator so that it + automatically wraps the functions in :func:`with_appcontext`. + + Not to be confused with :class:`FlaskGroup`. + """ + + def command(self, *args, **kwargs): + """This works exactly like the method of the same name on a regular + :class:`click.Group` but it wraps callbacks in :func:`with_appcontext` + unless it's disabled by passing ``with_appcontext=False``. + """ + wrap_for_ctx = kwargs.pop("with_appcontext", True) + + def decorator(f): + if wrap_for_ctx: + f = with_appcontext(f) + return click.Group.command(self, *args, **kwargs)(f) + + return decorator + + def group(self, *args, **kwargs): + """This works exactly like the method of the same name on a regular + :class:`click.Group` but it defaults the group class to + :class:`AppGroup`. + """ + kwargs.setdefault("cls", AppGroup) + return click.Group.group(self, *args, **kwargs) + + +class FlaskGroup(AppGroup): + """Special subclass of the :class:`AppGroup` group that supports + loading more commands from the configured Flask app. Normally a + developer does not have to interface with this class but there are + some very advanced use cases for which it makes sense to create an + instance of this. + + For information as of why this is useful see :ref:`custom-scripts`. + + :param add_default_commands: if this is True then the default run and + shell commands will be added. + :param add_version_option: adds the ``--version`` option. + :param create_app: an optional callback that is passed the script info and + returns the loaded app. + :param load_dotenv: Load the nearest :file:`.env` and :file:`.flaskenv` + files to set environment variables. Will also change the working + directory to the directory containing the first file found. + :param set_debug_flag: Set the app's debug flag based on the active + environment + + .. versionchanged:: 1.0 + If installed, python-dotenv will be used to load environment variables + from :file:`.env` and :file:`.flaskenv` files. + """ + + def __init__( + self, + add_default_commands=True, + create_app=None, + add_version_option=True, + load_dotenv=True, + set_debug_flag=True, + **extra + ): + params = list(extra.pop("params", None) or ()) + + if add_version_option: + params.append(version_option) + + AppGroup.__init__(self, params=params, **extra) + self.create_app = create_app + self.load_dotenv = load_dotenv + self.set_debug_flag = set_debug_flag + + if add_default_commands: + self.add_command(run_command) + self.add_command(shell_command) + self.add_command(routes_command) + + self._loaded_plugin_commands = False + + def _load_plugin_commands(self): + if self._loaded_plugin_commands: + return + try: + import pkg_resources + except ImportError: + self._loaded_plugin_commands = True + return + + for ep in pkg_resources.iter_entry_points("flask.commands"): + self.add_command(ep.load(), ep.name) + self._loaded_plugin_commands = True + + def get_command(self, ctx, name): + self._load_plugin_commands() + + # We load built-in commands first as these should always be the + # same no matter what the app does. If the app does want to + # override this it needs to make a custom instance of this group + # and not attach the default commands. + # + # This also means that the script stays functional in case the + # application completely fails. + rv = AppGroup.get_command(self, ctx, name) + if rv is not None: + return rv + + info = ctx.ensure_object(ScriptInfo) + try: + rv = info.load_app().cli.get_command(ctx, name) + if rv is not None: + return rv + except NoAppException: + pass + + def list_commands(self, ctx): + self._load_plugin_commands() + + # The commands available is the list of both the application (if + # available) plus the builtin commands. + rv = set(click.Group.list_commands(self, ctx)) + info = ctx.ensure_object(ScriptInfo) + try: + rv.update(info.load_app().cli.list_commands(ctx)) + except Exception: + # Here we intentionally swallow all exceptions as we don't + # want the help page to break if the app does not exist. + # If someone attempts to use the command we try to create + # the app again and this will give us the error. + # However, we will not do so silently because that would confuse + # users. + traceback.print_exc() + return sorted(rv) + + def main(self, *args, **kwargs): + # Set a global flag that indicates that we were invoked from the + # command line interface. This is detected by Flask.run to make the + # call into a no-op. This is necessary to avoid ugly errors when the + # script that is loaded here also attempts to start a server. + os.environ["FLASK_RUN_FROM_CLI"] = "true" + + if get_load_dotenv(self.load_dotenv): + load_dotenv() + + obj = kwargs.get("obj") + + if obj is None: + obj = ScriptInfo( + create_app=self.create_app, set_debug_flag=self.set_debug_flag + ) + + kwargs["obj"] = obj + kwargs.setdefault("auto_envvar_prefix", "FLASK") + return super(FlaskGroup, self).main(*args, **kwargs) + + +def _path_is_ancestor(path, other): + """Take ``other`` and remove the length of ``path`` from it. Then join it + to ``path``. If it is the original value, ``path`` is an ancestor of + ``other``.""" + return os.path.join(path, other[len(path) :].lstrip(os.sep)) == other + + +def load_dotenv(path=None): + """Load "dotenv" files in order of precedence to set environment variables. + + If an env var is already set it is not overwritten, so earlier files in the + list are preferred over later files. + + Changes the current working directory to the location of the first file + found, with the assumption that it is in the top level project directory + and will be where the Python path should import local packages from. + + This is a no-op if `python-dotenv`_ is not installed. + + .. _python-dotenv: https://github.com/theskumar/python-dotenv#readme + + :param path: Load the file at this location instead of searching. + :return: ``True`` if a file was loaded. + + .. versionchanged:: 1.1.0 + Returns ``False`` when python-dotenv is not installed, or when + the given path isn't a file. + + .. versionadded:: 1.0 + """ + if dotenv is None: + if path or os.path.isfile(".env") or os.path.isfile(".flaskenv"): + click.secho( + " * Tip: There are .env or .flaskenv files present." + ' Do "pip install python-dotenv" to use them.', + fg="yellow", + err=True, + ) + + return False + + # if the given path specifies the actual file then return True, + # else False + if path is not None: + if os.path.isfile(path): + return dotenv.load_dotenv(path) + + return False + + new_dir = None + + for name in (".env", ".flaskenv"): + path = dotenv.find_dotenv(name, usecwd=True) + + if not path: + continue + + if new_dir is None: + new_dir = os.path.dirname(path) + + dotenv.load_dotenv(path) + + if new_dir and os.getcwd() != new_dir: + os.chdir(new_dir) + + return new_dir is not None # at least one file was located and loaded + + +def show_server_banner(env, debug, app_import_path, eager_loading): + """Show extra startup messages the first time the server is run, + ignoring the reloader. + """ + if os.environ.get("WERKZEUG_RUN_MAIN") == "true": + return + + if app_import_path is not None: + message = ' * Serving Flask app "{0}"'.format(app_import_path) + + if not eager_loading: + message += " (lazy loading)" + + click.echo(message) + + click.echo(" * Environment: {0}".format(env)) + + if env == "production": + click.secho( + " WARNING: This is a development server. " + "Do not use it in a production deployment.", + fg="red", + ) + click.secho(" Use a production WSGI server instead.", dim=True) + + if debug is not None: + click.echo(" * Debug mode: {0}".format("on" if debug else "off")) + + +class CertParamType(click.ParamType): + """Click option type for the ``--cert`` option. Allows either an + existing file, the string ``'adhoc'``, or an import for a + :class:`~ssl.SSLContext` object. + """ + + name = "path" + + def __init__(self): + self.path_type = click.Path(exists=True, dir_okay=False, resolve_path=True) + + def convert(self, value, param, ctx): + if ssl is None: + raise click.BadParameter( + 'Using "--cert" requires Python to be compiled with SSL support.', + ctx, + param, + ) + + try: + return self.path_type(value, param, ctx) + except click.BadParameter: + value = click.STRING(value, param, ctx).lower() + + if value == "adhoc": + try: + import OpenSSL # noqa: F401 + except ImportError: + raise click.BadParameter( + "Using ad-hoc certificates requires pyOpenSSL.", ctx, param + ) + + return value + + obj = import_string(value, silent=True) + + if sys.version_info < (2, 7, 9): + if obj: + return obj + else: + if isinstance(obj, ssl.SSLContext): + return obj + + raise + + +def _validate_key(ctx, param, value): + """The ``--key`` option must be specified when ``--cert`` is a file. + Modifies the ``cert`` param to be a ``(cert, key)`` pair if needed. + """ + cert = ctx.params.get("cert") + is_adhoc = cert == "adhoc" + + if sys.version_info < (2, 7, 9): + is_context = cert and not isinstance(cert, (text_type, bytes)) + else: + is_context = isinstance(cert, ssl.SSLContext) + + if value is not None: + if is_adhoc: + raise click.BadParameter( + 'When "--cert" is "adhoc", "--key" is not used.', ctx, param + ) + + if is_context: + raise click.BadParameter( + 'When "--cert" is an SSLContext object, "--key is not used.', ctx, param + ) + + if not cert: + raise click.BadParameter('"--cert" must also be specified.', ctx, param) + + ctx.params["cert"] = cert, value + + else: + if cert and not (is_adhoc or is_context): + raise click.BadParameter('Required when using "--cert".', ctx, param) + + return value + + +class SeparatedPathType(click.Path): + """Click option type that accepts a list of values separated by the + OS's path separator (``:``, ``;`` on Windows). Each value is + validated as a :class:`click.Path` type. + """ + + def convert(self, value, param, ctx): + items = self.split_envvar_value(value) + super_convert = super(SeparatedPathType, self).convert + return [super_convert(item, param, ctx) for item in items] + + +@click.command("run", short_help="Run a development server.") +@click.option("--host", "-h", default="127.0.0.1", help="The interface to bind to.") +@click.option("--port", "-p", default=5000, help="The port to bind to.") +@click.option( + "--cert", type=CertParamType(), help="Specify a certificate file to use HTTPS." +) +@click.option( + "--key", + type=click.Path(exists=True, dir_okay=False, resolve_path=True), + callback=_validate_key, + expose_value=False, + help="The key file to use when specifying a certificate.", +) +@click.option( + "--reload/--no-reload", + default=None, + help="Enable or disable the reloader. By default the reloader " + "is active if debug is enabled.", +) +@click.option( + "--debugger/--no-debugger", + default=None, + help="Enable or disable the debugger. By default the debugger " + "is active if debug is enabled.", +) +@click.option( + "--eager-loading/--lazy-loader", + default=None, + help="Enable or disable eager loading. By default eager " + "loading is enabled if the reloader is disabled.", +) +@click.option( + "--with-threads/--without-threads", + default=True, + help="Enable or disable multithreading.", +) +@click.option( + "--extra-files", + default=None, + type=SeparatedPathType(), + help=( + "Extra files that trigger a reload on change. Multiple paths" + " are separated by '{}'.".format(os.path.pathsep) + ), +) +@pass_script_info +def run_command( + info, host, port, reload, debugger, eager_loading, with_threads, cert, extra_files +): + """Run a local development server. + + This server is for development purposes only. It does not provide + the stability, security, or performance of production WSGI servers. + + The reloader and debugger are enabled by default if + FLASK_ENV=development or FLASK_DEBUG=1. + """ + debug = get_debug_flag() + + if reload is None: + reload = debug + + if debugger is None: + debugger = debug + + if eager_loading is None: + eager_loading = not reload + + show_server_banner(get_env(), debug, info.app_import_path, eager_loading) + app = DispatchingApp(info.load_app, use_eager_loading=eager_loading) + + from werkzeug.serving import run_simple + + run_simple( + host, + port, + app, + use_reloader=reload, + use_debugger=debugger, + threaded=with_threads, + ssl_context=cert, + extra_files=extra_files, + ) + + +@click.command("shell", short_help="Run a shell in the app context.") +@with_appcontext +def shell_command(): + """Run an interactive Python shell in the context of a given + Flask application. The application will populate the default + namespace of this shell according to it's configuration. + + This is useful for executing small snippets of management code + without having to manually configure the application. + """ + import code + from .globals import _app_ctx_stack + + app = _app_ctx_stack.top.app + banner = "Python %s on %s\nApp: %s [%s]\nInstance: %s" % ( + sys.version, + sys.platform, + app.import_name, + app.env, + app.instance_path, + ) + ctx = {} + + # Support the regular Python interpreter startup script if someone + # is using it. + startup = os.environ.get("PYTHONSTARTUP") + if startup and os.path.isfile(startup): + with open(startup, "r") as f: + eval(compile(f.read(), startup, "exec"), ctx) + + ctx.update(app.make_shell_context()) + + code.interact(banner=banner, local=ctx) + + +@click.command("routes", short_help="Show the routes for the app.") +@click.option( + "--sort", + "-s", + type=click.Choice(("endpoint", "methods", "rule", "match")), + default="endpoint", + help=( + 'Method to sort routes by. "match" is the order that Flask will match ' + "routes when dispatching a request." + ), +) +@click.option("--all-methods", is_flag=True, help="Show HEAD and OPTIONS methods.") +@with_appcontext +def routes_command(sort, all_methods): + """Show all registered routes with endpoints and methods.""" + + rules = list(current_app.url_map.iter_rules()) + if not rules: + click.echo("No routes were registered.") + return + + ignored_methods = set(() if all_methods else ("HEAD", "OPTIONS")) + + if sort in ("endpoint", "rule"): + rules = sorted(rules, key=attrgetter(sort)) + elif sort == "methods": + rules = sorted(rules, key=lambda rule: sorted(rule.methods)) + + rule_methods = [", ".join(sorted(rule.methods - ignored_methods)) for rule in rules] + + headers = ("Endpoint", "Methods", "Rule") + widths = ( + max(len(rule.endpoint) for rule in rules), + max(len(methods) for methods in rule_methods), + max(len(rule.rule) for rule in rules), + ) + widths = [max(len(h), w) for h, w in zip(headers, widths)] + row = "{{0:<{0}}} {{1:<{1}}} {{2:<{2}}}".format(*widths) + + click.echo(row.format(*headers).strip()) + click.echo(row.format(*("-" * width for width in widths))) + + for rule, methods in zip(rules, rule_methods): + click.echo(row.format(rule.endpoint, methods, rule.rule).rstrip()) + + +cli = FlaskGroup( + help="""\ +A general utility script for Flask applications. + +Provides commands from Flask, extensions, and the application. Loads the +application defined in the FLASK_APP environment variable, or from a wsgi.py +file. Setting the FLASK_ENV environment variable to 'development' will enable +debug mode. + +\b + {prefix}{cmd} FLASK_APP=hello.py + {prefix}{cmd} FLASK_ENV=development + {prefix}flask run +""".format( + cmd="export" if os.name == "posix" else "set", + prefix="$ " if os.name == "posix" else "> ", + ) +) + + +def main(as_module=False): + cli.main(prog_name="python -m flask" if as_module else None) + + +if __name__ == "__main__": + main(as_module=True) diff --git a/week-0/day-3/my_todo_app/venv/lib/python3.6/site-packages/flask/config.py b/week-0/day-3/my_todo_app/venv/lib/python3.6/site-packages/flask/config.py new file mode 100644 index 00000000..809de336 --- /dev/null +++ b/week-0/day-3/my_todo_app/venv/lib/python3.6/site-packages/flask/config.py @@ -0,0 +1,269 @@ +# -*- coding: utf-8 -*- +""" + flask.config + ~~~~~~~~~~~~ + + Implements the configuration related objects. + + :copyright: 2010 Pallets + :license: BSD-3-Clause +""" +import errno +import os +import types + +from werkzeug.utils import import_string + +from . import json +from ._compat import iteritems +from ._compat import string_types + + +class ConfigAttribute(object): + """Makes an attribute forward to the config""" + + def __init__(self, name, get_converter=None): + self.__name__ = name + self.get_converter = get_converter + + def __get__(self, obj, type=None): + if obj is None: + return self + rv = obj.config[self.__name__] + if self.get_converter is not None: + rv = self.get_converter(rv) + return rv + + def __set__(self, obj, value): + obj.config[self.__name__] = value + + +class Config(dict): + """Works exactly like a dict but provides ways to fill it from files + or special dictionaries. There are two common patterns to populate the + config. + + Either you can fill the config from a config file:: + + app.config.from_pyfile('yourconfig.cfg') + + Or alternatively you can define the configuration options in the + module that calls :meth:`from_object` or provide an import path to + a module that should be loaded. It is also possible to tell it to + use the same module and with that provide the configuration values + just before the call:: + + DEBUG = True + SECRET_KEY = 'development key' + app.config.from_object(__name__) + + In both cases (loading from any Python file or loading from modules), + only uppercase keys are added to the config. This makes it possible to use + lowercase values in the config file for temporary values that are not added + to the config or to define the config keys in the same file that implements + the application. + + Probably the most interesting way to load configurations is from an + environment variable pointing to a file:: + + app.config.from_envvar('YOURAPPLICATION_SETTINGS') + + In this case before launching the application you have to set this + environment variable to the file you want to use. On Linux and OS X + use the export statement:: + + export YOURAPPLICATION_SETTINGS='/path/to/config/file' + + On windows use `set` instead. + + :param root_path: path to which files are read relative from. When the + config object is created by the application, this is + the application's :attr:`~flask.Flask.root_path`. + :param defaults: an optional dictionary of default values + """ + + def __init__(self, root_path, defaults=None): + dict.__init__(self, defaults or {}) + self.root_path = root_path + + def from_envvar(self, variable_name, silent=False): + """Loads a configuration from an environment variable pointing to + a configuration file. This is basically just a shortcut with nicer + error messages for this line of code:: + + app.config.from_pyfile(os.environ['YOURAPPLICATION_SETTINGS']) + + :param variable_name: name of the environment variable + :param silent: set to ``True`` if you want silent failure for missing + files. + :return: bool. ``True`` if able to load config, ``False`` otherwise. + """ + rv = os.environ.get(variable_name) + if not rv: + if silent: + return False + raise RuntimeError( + "The environment variable %r is not set " + "and as such configuration could not be " + "loaded. Set this variable and make it " + "point to a configuration file" % variable_name + ) + return self.from_pyfile(rv, silent=silent) + + def from_pyfile(self, filename, silent=False): + """Updates the values in the config from a Python file. This function + behaves as if the file was imported as module with the + :meth:`from_object` function. + + :param filename: the filename of the config. This can either be an + absolute filename or a filename relative to the + root path. + :param silent: set to ``True`` if you want silent failure for missing + files. + + .. versionadded:: 0.7 + `silent` parameter. + """ + filename = os.path.join(self.root_path, filename) + d = types.ModuleType("config") + d.__file__ = filename + try: + with open(filename, mode="rb") as config_file: + exec(compile(config_file.read(), filename, "exec"), d.__dict__) + except IOError as e: + if silent and e.errno in (errno.ENOENT, errno.EISDIR, errno.ENOTDIR): + return False + e.strerror = "Unable to load configuration file (%s)" % e.strerror + raise + self.from_object(d) + return True + + def from_object(self, obj): + """Updates the values from the given object. An object can be of one + of the following two types: + + - a string: in this case the object with that name will be imported + - an actual object reference: that object is used directly + + Objects are usually either modules or classes. :meth:`from_object` + loads only the uppercase attributes of the module/class. A ``dict`` + object will not work with :meth:`from_object` because the keys of a + ``dict`` are not attributes of the ``dict`` class. + + Example of module-based configuration:: + + app.config.from_object('yourapplication.default_config') + from yourapplication import default_config + app.config.from_object(default_config) + + Nothing is done to the object before loading. If the object is a + class and has ``@property`` attributes, it needs to be + instantiated before being passed to this method. + + You should not use this function to load the actual configuration but + rather configuration defaults. The actual config should be loaded + with :meth:`from_pyfile` and ideally from a location not within the + package because the package might be installed system wide. + + See :ref:`config-dev-prod` for an example of class-based configuration + using :meth:`from_object`. + + :param obj: an import name or object + """ + if isinstance(obj, string_types): + obj = import_string(obj) + for key in dir(obj): + if key.isupper(): + self[key] = getattr(obj, key) + + def from_json(self, filename, silent=False): + """Updates the values in the config from a JSON file. This function + behaves as if the JSON object was a dictionary and passed to the + :meth:`from_mapping` function. + + :param filename: the filename of the JSON file. This can either be an + absolute filename or a filename relative to the + root path. + :param silent: set to ``True`` if you want silent failure for missing + files. + + .. versionadded:: 0.11 + """ + filename = os.path.join(self.root_path, filename) + + try: + with open(filename) as json_file: + obj = json.loads(json_file.read()) + except IOError as e: + if silent and e.errno in (errno.ENOENT, errno.EISDIR): + return False + e.strerror = "Unable to load configuration file (%s)" % e.strerror + raise + return self.from_mapping(obj) + + def from_mapping(self, *mapping, **kwargs): + """Updates the config like :meth:`update` ignoring items with non-upper + keys. + + .. versionadded:: 0.11 + """ + mappings = [] + if len(mapping) == 1: + if hasattr(mapping[0], "items"): + mappings.append(mapping[0].items()) + else: + mappings.append(mapping[0]) + elif len(mapping) > 1: + raise TypeError( + "expected at most 1 positional argument, got %d" % len(mapping) + ) + mappings.append(kwargs.items()) + for mapping in mappings: + for (key, value) in mapping: + if key.isupper(): + self[key] = value + return True + + def get_namespace(self, namespace, lowercase=True, trim_namespace=True): + """Returns a dictionary containing a subset of configuration options + that match the specified namespace/prefix. Example usage:: + + app.config['IMAGE_STORE_TYPE'] = 'fs' + app.config['IMAGE_STORE_PATH'] = '/var/app/images' + app.config['IMAGE_STORE_BASE_URL'] = 'http://img.website.com' + image_store_config = app.config.get_namespace('IMAGE_STORE_') + + The resulting dictionary `image_store_config` would look like:: + + { + 'type': 'fs', + 'path': '/var/app/images', + 'base_url': 'http://img.website.com' + } + + This is often useful when configuration options map directly to + keyword arguments in functions or class constructors. + + :param namespace: a configuration namespace + :param lowercase: a flag indicating if the keys of the resulting + dictionary should be lowercase + :param trim_namespace: a flag indicating if the keys of the resulting + dictionary should not include the namespace + + .. versionadded:: 0.11 + """ + rv = {} + for k, v in iteritems(self): + if not k.startswith(namespace): + continue + if trim_namespace: + key = k[len(namespace) :] + else: + key = k + if lowercase: + key = key.lower() + rv[key] = v + return rv + + def __repr__(self): + return "<%s %s>" % (self.__class__.__name__, dict.__repr__(self)) diff --git a/week-0/day-3/my_todo_app/venv/lib/python3.6/site-packages/flask/ctx.py b/week-0/day-3/my_todo_app/venv/lib/python3.6/site-packages/flask/ctx.py new file mode 100644 index 00000000..172f6a01 --- /dev/null +++ b/week-0/day-3/my_todo_app/venv/lib/python3.6/site-packages/flask/ctx.py @@ -0,0 +1,475 @@ +# -*- coding: utf-8 -*- +""" + flask.ctx + ~~~~~~~~~ + + Implements the objects required to keep the context. + + :copyright: 2010 Pallets + :license: BSD-3-Clause +""" +import sys +from functools import update_wrapper + +from werkzeug.exceptions import HTTPException + +from ._compat import BROKEN_PYPY_CTXMGR_EXIT +from ._compat import reraise +from .globals import _app_ctx_stack +from .globals import _request_ctx_stack +from .signals import appcontext_popped +from .signals import appcontext_pushed + + +# a singleton sentinel value for parameter defaults +_sentinel = object() + + +class _AppCtxGlobals(object): + """A plain object. Used as a namespace for storing data during an + application context. + + Creating an app context automatically creates this object, which is + made available as the :data:`g` proxy. + + .. describe:: 'key' in g + + Check whether an attribute is present. + + .. versionadded:: 0.10 + + .. describe:: iter(g) + + Return an iterator over the attribute names. + + .. versionadded:: 0.10 + """ + + def get(self, name, default=None): + """Get an attribute by name, or a default value. Like + :meth:`dict.get`. + + :param name: Name of attribute to get. + :param default: Value to return if the attribute is not present. + + .. versionadded:: 0.10 + """ + return self.__dict__.get(name, default) + + def pop(self, name, default=_sentinel): + """Get and remove an attribute by name. Like :meth:`dict.pop`. + + :param name: Name of attribute to pop. + :param default: Value to return if the attribute is not present, + instead of raise a ``KeyError``. + + .. versionadded:: 0.11 + """ + if default is _sentinel: + return self.__dict__.pop(name) + else: + return self.__dict__.pop(name, default) + + def setdefault(self, name, default=None): + """Get the value of an attribute if it is present, otherwise + set and return a default value. Like :meth:`dict.setdefault`. + + :param name: Name of attribute to get. + :param: default: Value to set and return if the attribute is not + present. + + .. versionadded:: 0.11 + """ + return self.__dict__.setdefault(name, default) + + def __contains__(self, item): + return item in self.__dict__ + + def __iter__(self): + return iter(self.__dict__) + + def __repr__(self): + top = _app_ctx_stack.top + if top is not None: + return "" % top.app.name + return object.__repr__(self) + + +def after_this_request(f): + """Executes a function after this request. This is useful to modify + response objects. The function is passed the response object and has + to return the same or a new one. + + Example:: + + @app.route('/') + def index(): + @after_this_request + def add_header(response): + response.headers['X-Foo'] = 'Parachute' + return response + return 'Hello World!' + + This is more useful if a function other than the view function wants to + modify a response. For instance think of a decorator that wants to add + some headers without converting the return value into a response object. + + .. versionadded:: 0.9 + """ + _request_ctx_stack.top._after_request_functions.append(f) + return f + + +def copy_current_request_context(f): + """A helper function that decorates a function to retain the current + request context. This is useful when working with greenlets. The moment + the function is decorated a copy of the request context is created and + then pushed when the function is called. The current session is also + included in the copied request context. + + Example:: + + import gevent + from flask import copy_current_request_context + + @app.route('/') + def index(): + @copy_current_request_context + def do_some_work(): + # do some work here, it can access flask.request or + # flask.session like you would otherwise in the view function. + ... + gevent.spawn(do_some_work) + return 'Regular response' + + .. versionadded:: 0.10 + """ + top = _request_ctx_stack.top + if top is None: + raise RuntimeError( + "This decorator can only be used at local scopes " + "when a request context is on the stack. For instance within " + "view functions." + ) + reqctx = top.copy() + + def wrapper(*args, **kwargs): + with reqctx: + return f(*args, **kwargs) + + return update_wrapper(wrapper, f) + + +def has_request_context(): + """If you have code that wants to test if a request context is there or + not this function can be used. For instance, you may want to take advantage + of request information if the request object is available, but fail + silently if it is unavailable. + + :: + + class User(db.Model): + + def __init__(self, username, remote_addr=None): + self.username = username + if remote_addr is None and has_request_context(): + remote_addr = request.remote_addr + self.remote_addr = remote_addr + + Alternatively you can also just test any of the context bound objects + (such as :class:`request` or :class:`g`) for truthness:: + + class User(db.Model): + + def __init__(self, username, remote_addr=None): + self.username = username + if remote_addr is None and request: + remote_addr = request.remote_addr + self.remote_addr = remote_addr + + .. versionadded:: 0.7 + """ + return _request_ctx_stack.top is not None + + +def has_app_context(): + """Works like :func:`has_request_context` but for the application + context. You can also just do a boolean check on the + :data:`current_app` object instead. + + .. versionadded:: 0.9 + """ + return _app_ctx_stack.top is not None + + +class AppContext(object): + """The application context binds an application object implicitly + to the current thread or greenlet, similar to how the + :class:`RequestContext` binds request information. The application + context is also implicitly created if a request context is created + but the application is not on top of the individual application + context. + """ + + def __init__(self, app): + self.app = app + self.url_adapter = app.create_url_adapter(None) + self.g = app.app_ctx_globals_class() + + # Like request context, app contexts can be pushed multiple times + # but there a basic "refcount" is enough to track them. + self._refcnt = 0 + + def push(self): + """Binds the app context to the current context.""" + self._refcnt += 1 + if hasattr(sys, "exc_clear"): + sys.exc_clear() + _app_ctx_stack.push(self) + appcontext_pushed.send(self.app) + + def pop(self, exc=_sentinel): + """Pops the app context.""" + try: + self._refcnt -= 1 + if self._refcnt <= 0: + if exc is _sentinel: + exc = sys.exc_info()[1] + self.app.do_teardown_appcontext(exc) + finally: + rv = _app_ctx_stack.pop() + assert rv is self, "Popped wrong app context. (%r instead of %r)" % (rv, self) + appcontext_popped.send(self.app) + + def __enter__(self): + self.push() + return self + + def __exit__(self, exc_type, exc_value, tb): + self.pop(exc_value) + + if BROKEN_PYPY_CTXMGR_EXIT and exc_type is not None: + reraise(exc_type, exc_value, tb) + + +class RequestContext(object): + """The request context contains all request relevant information. It is + created at the beginning of the request and pushed to the + `_request_ctx_stack` and removed at the end of it. It will create the + URL adapter and request object for the WSGI environment provided. + + Do not attempt to use this class directly, instead use + :meth:`~flask.Flask.test_request_context` and + :meth:`~flask.Flask.request_context` to create this object. + + When the request context is popped, it will evaluate all the + functions registered on the application for teardown execution + (:meth:`~flask.Flask.teardown_request`). + + The request context is automatically popped at the end of the request + for you. In debug mode the request context is kept around if + exceptions happen so that interactive debuggers have a chance to + introspect the data. With 0.4 this can also be forced for requests + that did not fail and outside of ``DEBUG`` mode. By setting + ``'flask._preserve_context'`` to ``True`` on the WSGI environment the + context will not pop itself at the end of the request. This is used by + the :meth:`~flask.Flask.test_client` for example to implement the + deferred cleanup functionality. + + You might find this helpful for unittests where you need the + information from the context local around for a little longer. Make + sure to properly :meth:`~werkzeug.LocalStack.pop` the stack yourself in + that situation, otherwise your unittests will leak memory. + """ + + def __init__(self, app, environ, request=None, session=None): + self.app = app + if request is None: + request = app.request_class(environ) + self.request = request + self.url_adapter = None + try: + self.url_adapter = app.create_url_adapter(self.request) + except HTTPException as e: + self.request.routing_exception = e + self.flashes = None + self.session = session + + # Request contexts can be pushed multiple times and interleaved with + # other request contexts. Now only if the last level is popped we + # get rid of them. Additionally if an application context is missing + # one is created implicitly so for each level we add this information + self._implicit_app_ctx_stack = [] + + # indicator if the context was preserved. Next time another context + # is pushed the preserved context is popped. + self.preserved = False + + # remembers the exception for pop if there is one in case the context + # preservation kicks in. + self._preserved_exc = None + + # Functions that should be executed after the request on the response + # object. These will be called before the regular "after_request" + # functions. + self._after_request_functions = [] + + @property + def g(self): + return _app_ctx_stack.top.g + + @g.setter + def g(self, value): + _app_ctx_stack.top.g = value + + def copy(self): + """Creates a copy of this request context with the same request object. + This can be used to move a request context to a different greenlet. + Because the actual request object is the same this cannot be used to + move a request context to a different thread unless access to the + request object is locked. + + .. versionadded:: 0.10 + + .. versionchanged:: 1.1 + The current session object is used instead of reloading the original + data. This prevents `flask.session` pointing to an out-of-date object. + """ + return self.__class__( + self.app, + environ=self.request.environ, + request=self.request, + session=self.session, + ) + + def match_request(self): + """Can be overridden by a subclass to hook into the matching + of the request. + """ + try: + result = self.url_adapter.match(return_rule=True) + self.request.url_rule, self.request.view_args = result + except HTTPException as e: + self.request.routing_exception = e + + def push(self): + """Binds the request context to the current context.""" + # If an exception occurs in debug mode or if context preservation is + # activated under exception situations exactly one context stays + # on the stack. The rationale is that you want to access that + # information under debug situations. However if someone forgets to + # pop that context again we want to make sure that on the next push + # it's invalidated, otherwise we run at risk that something leaks + # memory. This is usually only a problem in test suite since this + # functionality is not active in production environments. + top = _request_ctx_stack.top + if top is not None and top.preserved: + top.pop(top._preserved_exc) + + # Before we push the request context we have to ensure that there + # is an application context. + app_ctx = _app_ctx_stack.top + if app_ctx is None or app_ctx.app != self.app: + app_ctx = self.app.app_context() + app_ctx.push() + self._implicit_app_ctx_stack.append(app_ctx) + else: + self._implicit_app_ctx_stack.append(None) + + if hasattr(sys, "exc_clear"): + sys.exc_clear() + + _request_ctx_stack.push(self) + + # Open the session at the moment that the request context is available. + # This allows a custom open_session method to use the request context. + # Only open a new session if this is the first time the request was + # pushed, otherwise stream_with_context loses the session. + if self.session is None: + session_interface = self.app.session_interface + self.session = session_interface.open_session(self.app, self.request) + + if self.session is None: + self.session = session_interface.make_null_session(self.app) + + if self.url_adapter is not None: + self.match_request() + + def pop(self, exc=_sentinel): + """Pops the request context and unbinds it by doing that. This will + also trigger the execution of functions registered by the + :meth:`~flask.Flask.teardown_request` decorator. + + .. versionchanged:: 0.9 + Added the `exc` argument. + """ + app_ctx = self._implicit_app_ctx_stack.pop() + + try: + clear_request = False + if not self._implicit_app_ctx_stack: + self.preserved = False + self._preserved_exc = None + if exc is _sentinel: + exc = sys.exc_info()[1] + self.app.do_teardown_request(exc) + + # If this interpreter supports clearing the exception information + # we do that now. This will only go into effect on Python 2.x, + # on 3.x it disappears automatically at the end of the exception + # stack. + if hasattr(sys, "exc_clear"): + sys.exc_clear() + + request_close = getattr(self.request, "close", None) + if request_close is not None: + request_close() + clear_request = True + finally: + rv = _request_ctx_stack.pop() + + # get rid of circular dependencies at the end of the request + # so that we don't require the GC to be active. + if clear_request: + rv.request.environ["werkzeug.request"] = None + + # Get rid of the app as well if necessary. + if app_ctx is not None: + app_ctx.pop(exc) + + assert rv is self, "Popped wrong request context. (%r instead of %r)" % ( + rv, + self, + ) + + def auto_pop(self, exc): + if self.request.environ.get("flask._preserve_context") or ( + exc is not None and self.app.preserve_context_on_exception + ): + self.preserved = True + self._preserved_exc = exc + else: + self.pop(exc) + + def __enter__(self): + self.push() + return self + + def __exit__(self, exc_type, exc_value, tb): + # do not pop the request stack if we are in debug mode and an + # exception happened. This will allow the debugger to still + # access the request object in the interactive shell. Furthermore + # the context can be force kept alive for the test client. + # See flask.testing for how this works. + self.auto_pop(exc_value) + + if BROKEN_PYPY_CTXMGR_EXIT and exc_type is not None: + reraise(exc_type, exc_value, tb) + + def __repr__(self): + return "<%s '%s' [%s] of %s>" % ( + self.__class__.__name__, + self.request.url, + self.request.method, + self.app.name, + ) diff --git a/week-0/day-3/my_todo_app/venv/lib/python3.6/site-packages/flask/debughelpers.py b/week-0/day-3/my_todo_app/venv/lib/python3.6/site-packages/flask/debughelpers.py new file mode 100644 index 00000000..e475bd1a --- /dev/null +++ b/week-0/day-3/my_todo_app/venv/lib/python3.6/site-packages/flask/debughelpers.py @@ -0,0 +1,183 @@ +# -*- coding: utf-8 -*- +""" + flask.debughelpers + ~~~~~~~~~~~~~~~~~~ + + Various helpers to make the development experience better. + + :copyright: 2010 Pallets + :license: BSD-3-Clause +""" +import os +from warnings import warn + +from ._compat import implements_to_string +from ._compat import text_type +from .app import Flask +from .blueprints import Blueprint +from .globals import _request_ctx_stack + + +class UnexpectedUnicodeError(AssertionError, UnicodeError): + """Raised in places where we want some better error reporting for + unexpected unicode or binary data. + """ + + +@implements_to_string +class DebugFilesKeyError(KeyError, AssertionError): + """Raised from request.files during debugging. The idea is that it can + provide a better error message than just a generic KeyError/BadRequest. + """ + + def __init__(self, request, key): + form_matches = request.form.getlist(key) + buf = [ + 'You tried to access the file "%s" in the request.files ' + "dictionary but it does not exist. The mimetype for the request " + 'is "%s" instead of "multipart/form-data" which means that no ' + "file contents were transmitted. To fix this error you should " + 'provide enctype="multipart/form-data" in your form.' + % (key, request.mimetype) + ] + if form_matches: + buf.append( + "\n\nThe browser instead transmitted some file names. " + "This was submitted: %s" % ", ".join('"%s"' % x for x in form_matches) + ) + self.msg = "".join(buf) + + def __str__(self): + return self.msg + + +class FormDataRoutingRedirect(AssertionError): + """This exception is raised by Flask in debug mode if it detects a + redirect caused by the routing system when the request method is not + GET, HEAD or OPTIONS. Reasoning: form data will be dropped. + """ + + def __init__(self, request): + exc = request.routing_exception + buf = [ + "A request was sent to this URL (%s) but a redirect was " + 'issued automatically by the routing system to "%s".' + % (request.url, exc.new_url) + ] + + # In case just a slash was appended we can be extra helpful + if request.base_url + "/" == exc.new_url.split("?")[0]: + buf.append( + " The URL was defined with a trailing slash so " + "Flask will automatically redirect to the URL " + "with the trailing slash if it was accessed " + "without one." + ) + + buf.append( + " Make sure to directly send your %s-request to this URL " + "since we can't make browsers or HTTP clients redirect " + "with form data reliably or without user interaction." % request.method + ) + buf.append("\n\nNote: this exception is only raised in debug mode") + AssertionError.__init__(self, "".join(buf).encode("utf-8")) + + +def attach_enctype_error_multidict(request): + """Since Flask 0.8 we're monkeypatching the files object in case a + request is detected that does not use multipart form data but the files + object is accessed. + """ + oldcls = request.files.__class__ + + class newcls(oldcls): + def __getitem__(self, key): + try: + return oldcls.__getitem__(self, key) + except KeyError: + if key not in request.form: + raise + raise DebugFilesKeyError(request, key) + + newcls.__name__ = oldcls.__name__ + newcls.__module__ = oldcls.__module__ + request.files.__class__ = newcls + + +def _dump_loader_info(loader): + yield "class: %s.%s" % (type(loader).__module__, type(loader).__name__) + for key, value in sorted(loader.__dict__.items()): + if key.startswith("_"): + continue + if isinstance(value, (tuple, list)): + if not all(isinstance(x, (str, text_type)) for x in value): + continue + yield "%s:" % key + for item in value: + yield " - %s" % item + continue + elif not isinstance(value, (str, text_type, int, float, bool)): + continue + yield "%s: %r" % (key, value) + + +def explain_template_loading_attempts(app, template, attempts): + """This should help developers understand what failed""" + info = ['Locating template "%s":' % template] + total_found = 0 + blueprint = None + reqctx = _request_ctx_stack.top + if reqctx is not None and reqctx.request.blueprint is not None: + blueprint = reqctx.request.blueprint + + for idx, (loader, srcobj, triple) in enumerate(attempts): + if isinstance(srcobj, Flask): + src_info = 'application "%s"' % srcobj.import_name + elif isinstance(srcobj, Blueprint): + src_info = 'blueprint "%s" (%s)' % (srcobj.name, srcobj.import_name) + else: + src_info = repr(srcobj) + + info.append("% 5d: trying loader of %s" % (idx + 1, src_info)) + + for line in _dump_loader_info(loader): + info.append(" %s" % line) + + if triple is None: + detail = "no match" + else: + detail = "found (%r)" % (triple[1] or "") + total_found += 1 + info.append(" -> %s" % detail) + + seems_fishy = False + if total_found == 0: + info.append("Error: the template could not be found.") + seems_fishy = True + elif total_found > 1: + info.append("Warning: multiple loaders returned a match for the template.") + seems_fishy = True + + if blueprint is not None and seems_fishy: + info.append( + " The template was looked up from an endpoint that " + 'belongs to the blueprint "%s".' % blueprint + ) + info.append(" Maybe you did not place a template in the right folder?") + info.append(" See http://flask.pocoo.org/docs/blueprints/#templates") + + app.logger.info("\n".join(info)) + + +def explain_ignored_app_run(): + if os.environ.get("WERKZEUG_RUN_MAIN") != "true": + warn( + Warning( + "Silently ignoring app.run() because the " + "application is run from the flask command line " + "executable. Consider putting app.run() behind an " + 'if __name__ == "__main__" guard to silence this ' + "warning." + ), + stacklevel=3, + ) diff --git a/week-0/day-3/my_todo_app/venv/lib/python3.6/site-packages/flask/globals.py b/week-0/day-3/my_todo_app/venv/lib/python3.6/site-packages/flask/globals.py new file mode 100644 index 00000000..6d32dcfd --- /dev/null +++ b/week-0/day-3/my_todo_app/venv/lib/python3.6/site-packages/flask/globals.py @@ -0,0 +1,62 @@ +# -*- coding: utf-8 -*- +""" + flask.globals + ~~~~~~~~~~~~~ + + Defines all the global objects that are proxies to the current + active context. + + :copyright: 2010 Pallets + :license: BSD-3-Clause +""" +from functools import partial + +from werkzeug.local import LocalProxy +from werkzeug.local import LocalStack + + +_request_ctx_err_msg = """\ +Working outside of request context. + +This typically means that you attempted to use functionality that needed +an active HTTP request. Consult the documentation on testing for +information about how to avoid this problem.\ +""" +_app_ctx_err_msg = """\ +Working outside of application context. + +This typically means that you attempted to use functionality that needed +to interface with the current application object in some way. To solve +this, set up an application context with app.app_context(). See the +documentation for more information.\ +""" + + +def _lookup_req_object(name): + top = _request_ctx_stack.top + if top is None: + raise RuntimeError(_request_ctx_err_msg) + return getattr(top, name) + + +def _lookup_app_object(name): + top = _app_ctx_stack.top + if top is None: + raise RuntimeError(_app_ctx_err_msg) + return getattr(top, name) + + +def _find_app(): + top = _app_ctx_stack.top + if top is None: + raise RuntimeError(_app_ctx_err_msg) + return top.app + + +# context locals +_request_ctx_stack = LocalStack() +_app_ctx_stack = LocalStack() +current_app = LocalProxy(_find_app) +request = LocalProxy(partial(_lookup_req_object, "request")) +session = LocalProxy(partial(_lookup_req_object, "session")) +g = LocalProxy(partial(_lookup_app_object, "g")) diff --git a/week-0/day-3/my_todo_app/venv/lib/python3.6/site-packages/flask/helpers.py b/week-0/day-3/my_todo_app/venv/lib/python3.6/site-packages/flask/helpers.py new file mode 100644 index 00000000..3f401a5b --- /dev/null +++ b/week-0/day-3/my_todo_app/venv/lib/python3.6/site-packages/flask/helpers.py @@ -0,0 +1,1153 @@ +# -*- coding: utf-8 -*- +""" + flask.helpers + ~~~~~~~~~~~~~ + + Implements various helpers. + + :copyright: 2010 Pallets + :license: BSD-3-Clause +""" +import io +import mimetypes +import os +import pkgutil +import posixpath +import socket +import sys +import unicodedata +from functools import update_wrapper +from threading import RLock +from time import time +from zlib import adler32 + +from jinja2 import FileSystemLoader +from werkzeug.datastructures import Headers +from werkzeug.exceptions import BadRequest +from werkzeug.exceptions import NotFound +from werkzeug.exceptions import RequestedRangeNotSatisfiable +from werkzeug.routing import BuildError +from werkzeug.urls import url_quote +from werkzeug.wsgi import wrap_file + +from ._compat import fspath +from ._compat import PY2 +from ._compat import string_types +from ._compat import text_type +from .globals import _app_ctx_stack +from .globals import _request_ctx_stack +from .globals import current_app +from .globals import request +from .globals import session +from .signals import message_flashed + +# sentinel +_missing = object() + + +# what separators does this operating system provide that are not a slash? +# this is used by the send_from_directory function to ensure that nobody is +# able to access files from outside the filesystem. +_os_alt_seps = list( + sep for sep in [os.path.sep, os.path.altsep] if sep not in (None, "/") +) + + +def get_env(): + """Get the environment the app is running in, indicated by the + :envvar:`FLASK_ENV` environment variable. The default is + ``'production'``. + """ + return os.environ.get("FLASK_ENV") or "production" + + +def get_debug_flag(): + """Get whether debug mode should be enabled for the app, indicated + by the :envvar:`FLASK_DEBUG` environment variable. The default is + ``True`` if :func:`.get_env` returns ``'development'``, or ``False`` + otherwise. + """ + val = os.environ.get("FLASK_DEBUG") + + if not val: + return get_env() == "development" + + return val.lower() not in ("0", "false", "no") + + +def get_load_dotenv(default=True): + """Get whether the user has disabled loading dotenv files by setting + :envvar:`FLASK_SKIP_DOTENV`. The default is ``True``, load the + files. + + :param default: What to return if the env var isn't set. + """ + val = os.environ.get("FLASK_SKIP_DOTENV") + + if not val: + return default + + return val.lower() in ("0", "false", "no") + + +def _endpoint_from_view_func(view_func): + """Internal helper that returns the default endpoint for a given + function. This always is the function name. + """ + assert view_func is not None, "expected view func if endpoint is not provided." + return view_func.__name__ + + +def stream_with_context(generator_or_function): + """Request contexts disappear when the response is started on the server. + This is done for efficiency reasons and to make it less likely to encounter + memory leaks with badly written WSGI middlewares. The downside is that if + you are using streamed responses, the generator cannot access request bound + information any more. + + This function however can help you keep the context around for longer:: + + from flask import stream_with_context, request, Response + + @app.route('/stream') + def streamed_response(): + @stream_with_context + def generate(): + yield 'Hello ' + yield request.args['name'] + yield '!' + return Response(generate()) + + Alternatively it can also be used around a specific generator:: + + from flask import stream_with_context, request, Response + + @app.route('/stream') + def streamed_response(): + def generate(): + yield 'Hello ' + yield request.args['name'] + yield '!' + return Response(stream_with_context(generate())) + + .. versionadded:: 0.9 + """ + try: + gen = iter(generator_or_function) + except TypeError: + + def decorator(*args, **kwargs): + gen = generator_or_function(*args, **kwargs) + return stream_with_context(gen) + + return update_wrapper(decorator, generator_or_function) + + def generator(): + ctx = _request_ctx_stack.top + if ctx is None: + raise RuntimeError( + "Attempted to stream with context but " + "there was no context in the first place to keep around." + ) + with ctx: + # Dummy sentinel. Has to be inside the context block or we're + # not actually keeping the context around. + yield None + + # The try/finally is here so that if someone passes a WSGI level + # iterator in we're still running the cleanup logic. Generators + # don't need that because they are closed on their destruction + # automatically. + try: + for item in gen: + yield item + finally: + if hasattr(gen, "close"): + gen.close() + + # The trick is to start the generator. Then the code execution runs until + # the first dummy None is yielded at which point the context was already + # pushed. This item is discarded. Then when the iteration continues the + # real generator is executed. + wrapped_g = generator() + next(wrapped_g) + return wrapped_g + + +def make_response(*args): + """Sometimes it is necessary to set additional headers in a view. Because + views do not have to return response objects but can return a value that + is converted into a response object by Flask itself, it becomes tricky to + add headers to it. This function can be called instead of using a return + and you will get a response object which you can use to attach headers. + + If view looked like this and you want to add a new header:: + + def index(): + return render_template('index.html', foo=42) + + You can now do something like this:: + + def index(): + response = make_response(render_template('index.html', foo=42)) + response.headers['X-Parachutes'] = 'parachutes are cool' + return response + + This function accepts the very same arguments you can return from a + view function. This for example creates a response with a 404 error + code:: + + response = make_response(render_template('not_found.html'), 404) + + The other use case of this function is to force the return value of a + view function into a response which is helpful with view + decorators:: + + response = make_response(view_function()) + response.headers['X-Parachutes'] = 'parachutes are cool' + + Internally this function does the following things: + + - if no arguments are passed, it creates a new response argument + - if one argument is passed, :meth:`flask.Flask.make_response` + is invoked with it. + - if more than one argument is passed, the arguments are passed + to the :meth:`flask.Flask.make_response` function as tuple. + + .. versionadded:: 0.6 + """ + if not args: + return current_app.response_class() + if len(args) == 1: + args = args[0] + return current_app.make_response(args) + + +def url_for(endpoint, **values): + """Generates a URL to the given endpoint with the method provided. + + Variable arguments that are unknown to the target endpoint are appended + to the generated URL as query arguments. If the value of a query argument + is ``None``, the whole pair is skipped. In case blueprints are active + you can shortcut references to the same blueprint by prefixing the + local endpoint with a dot (``.``). + + This will reference the index function local to the current blueprint:: + + url_for('.index') + + For more information, head over to the :ref:`Quickstart `. + + Configuration values ``APPLICATION_ROOT`` and ``SERVER_NAME`` are only used when + generating URLs outside of a request context. + + To integrate applications, :class:`Flask` has a hook to intercept URL build + errors through :attr:`Flask.url_build_error_handlers`. The `url_for` + function results in a :exc:`~werkzeug.routing.BuildError` when the current + app does not have a URL for the given endpoint and values. When it does, the + :data:`~flask.current_app` calls its :attr:`~Flask.url_build_error_handlers` if + it is not ``None``, which can return a string to use as the result of + `url_for` (instead of `url_for`'s default to raise the + :exc:`~werkzeug.routing.BuildError` exception) or re-raise the exception. + An example:: + + def external_url_handler(error, endpoint, values): + "Looks up an external URL when `url_for` cannot build a URL." + # This is an example of hooking the build_error_handler. + # Here, lookup_url is some utility function you've built + # which looks up the endpoint in some external URL registry. + url = lookup_url(endpoint, **values) + if url is None: + # External lookup did not have a URL. + # Re-raise the BuildError, in context of original traceback. + exc_type, exc_value, tb = sys.exc_info() + if exc_value is error: + raise exc_type, exc_value, tb + else: + raise error + # url_for will use this result, instead of raising BuildError. + return url + + app.url_build_error_handlers.append(external_url_handler) + + Here, `error` is the instance of :exc:`~werkzeug.routing.BuildError`, and + `endpoint` and `values` are the arguments passed into `url_for`. Note + that this is for building URLs outside the current application, and not for + handling 404 NotFound errors. + + .. versionadded:: 0.10 + The `_scheme` parameter was added. + + .. versionadded:: 0.9 + The `_anchor` and `_method` parameters were added. + + .. versionadded:: 0.9 + Calls :meth:`Flask.handle_build_error` on + :exc:`~werkzeug.routing.BuildError`. + + :param endpoint: the endpoint of the URL (name of the function) + :param values: the variable arguments of the URL rule + :param _external: if set to ``True``, an absolute URL is generated. Server + address can be changed via ``SERVER_NAME`` configuration variable which + falls back to the `Host` header, then to the IP and port of the request. + :param _scheme: a string specifying the desired URL scheme. The `_external` + parameter must be set to ``True`` or a :exc:`ValueError` is raised. The default + behavior uses the same scheme as the current request, or + ``PREFERRED_URL_SCHEME`` from the :ref:`app configuration ` if no + request context is available. As of Werkzeug 0.10, this also can be set + to an empty string to build protocol-relative URLs. + :param _anchor: if provided this is added as anchor to the URL. + :param _method: if provided this explicitly specifies an HTTP method. + """ + appctx = _app_ctx_stack.top + reqctx = _request_ctx_stack.top + + if appctx is None: + raise RuntimeError( + "Attempted to generate a URL without the application context being" + " pushed. This has to be executed when application context is" + " available." + ) + + # If request specific information is available we have some extra + # features that support "relative" URLs. + if reqctx is not None: + url_adapter = reqctx.url_adapter + blueprint_name = request.blueprint + + if endpoint[:1] == ".": + if blueprint_name is not None: + endpoint = blueprint_name + endpoint + else: + endpoint = endpoint[1:] + + external = values.pop("_external", False) + + # Otherwise go with the url adapter from the appctx and make + # the URLs external by default. + else: + url_adapter = appctx.url_adapter + + if url_adapter is None: + raise RuntimeError( + "Application was not able to create a URL adapter for request" + " independent URL generation. You might be able to fix this by" + " setting the SERVER_NAME config variable." + ) + + external = values.pop("_external", True) + + anchor = values.pop("_anchor", None) + method = values.pop("_method", None) + scheme = values.pop("_scheme", None) + appctx.app.inject_url_defaults(endpoint, values) + + # This is not the best way to deal with this but currently the + # underlying Werkzeug router does not support overriding the scheme on + # a per build call basis. + old_scheme = None + if scheme is not None: + if not external: + raise ValueError("When specifying _scheme, _external must be True") + old_scheme = url_adapter.url_scheme + url_adapter.url_scheme = scheme + + try: + try: + rv = url_adapter.build( + endpoint, values, method=method, force_external=external + ) + finally: + if old_scheme is not None: + url_adapter.url_scheme = old_scheme + except BuildError as error: + # We need to inject the values again so that the app callback can + # deal with that sort of stuff. + values["_external"] = external + values["_anchor"] = anchor + values["_method"] = method + values["_scheme"] = scheme + return appctx.app.handle_url_build_error(error, endpoint, values) + + if anchor is not None: + rv += "#" + url_quote(anchor) + return rv + + +def get_template_attribute(template_name, attribute): + """Loads a macro (or variable) a template exports. This can be used to + invoke a macro from within Python code. If you for example have a + template named :file:`_cider.html` with the following contents: + + .. sourcecode:: html+jinja + + {% macro hello(name) %}Hello {{ name }}!{% endmacro %} + + You can access this from Python code like this:: + + hello = get_template_attribute('_cider.html', 'hello') + return hello('World') + + .. versionadded:: 0.2 + + :param template_name: the name of the template + :param attribute: the name of the variable of macro to access + """ + return getattr(current_app.jinja_env.get_template(template_name).module, attribute) + + +def flash(message, category="message"): + """Flashes a message to the next request. In order to remove the + flashed message from the session and to display it to the user, + the template has to call :func:`get_flashed_messages`. + + .. versionchanged:: 0.3 + `category` parameter added. + + :param message: the message to be flashed. + :param category: the category for the message. The following values + are recommended: ``'message'`` for any kind of message, + ``'error'`` for errors, ``'info'`` for information + messages and ``'warning'`` for warnings. However any + kind of string can be used as category. + """ + # Original implementation: + # + # session.setdefault('_flashes', []).append((category, message)) + # + # This assumed that changes made to mutable structures in the session are + # always in sync with the session object, which is not true for session + # implementations that use external storage for keeping their keys/values. + flashes = session.get("_flashes", []) + flashes.append((category, message)) + session["_flashes"] = flashes + message_flashed.send( + current_app._get_current_object(), message=message, category=category + ) + + +def get_flashed_messages(with_categories=False, category_filter=()): + """Pulls all flashed messages from the session and returns them. + Further calls in the same request to the function will return + the same messages. By default just the messages are returned, + but when `with_categories` is set to ``True``, the return value will + be a list of tuples in the form ``(category, message)`` instead. + + Filter the flashed messages to one or more categories by providing those + categories in `category_filter`. This allows rendering categories in + separate html blocks. The `with_categories` and `category_filter` + arguments are distinct: + + * `with_categories` controls whether categories are returned with message + text (``True`` gives a tuple, where ``False`` gives just the message text). + * `category_filter` filters the messages down to only those matching the + provided categories. + + See :ref:`message-flashing-pattern` for examples. + + .. versionchanged:: 0.3 + `with_categories` parameter added. + + .. versionchanged:: 0.9 + `category_filter` parameter added. + + :param with_categories: set to ``True`` to also receive categories. + :param category_filter: whitelist of categories to limit return values + """ + flashes = _request_ctx_stack.top.flashes + if flashes is None: + _request_ctx_stack.top.flashes = flashes = ( + session.pop("_flashes") if "_flashes" in session else [] + ) + if category_filter: + flashes = list(filter(lambda f: f[0] in category_filter, flashes)) + if not with_categories: + return [x[1] for x in flashes] + return flashes + + +def send_file( + filename_or_fp, + mimetype=None, + as_attachment=False, + attachment_filename=None, + add_etags=True, + cache_timeout=None, + conditional=False, + last_modified=None, +): + """Sends the contents of a file to the client. This will use the + most efficient method available and configured. By default it will + try to use the WSGI server's file_wrapper support. Alternatively + you can set the application's :attr:`~Flask.use_x_sendfile` attribute + to ``True`` to directly emit an ``X-Sendfile`` header. This however + requires support of the underlying webserver for ``X-Sendfile``. + + By default it will try to guess the mimetype for you, but you can + also explicitly provide one. For extra security you probably want + to send certain files as attachment (HTML for instance). The mimetype + guessing requires a `filename` or an `attachment_filename` to be + provided. + + ETags will also be attached automatically if a `filename` is provided. You + can turn this off by setting `add_etags=False`. + + If `conditional=True` and `filename` is provided, this method will try to + upgrade the response stream to support range requests. This will allow + the request to be answered with partial content response. + + Please never pass filenames to this function from user sources; + you should use :func:`send_from_directory` instead. + + .. versionadded:: 0.2 + + .. versionadded:: 0.5 + The `add_etags`, `cache_timeout` and `conditional` parameters were + added. The default behavior is now to attach etags. + + .. versionchanged:: 0.7 + mimetype guessing and etag support for file objects was + deprecated because it was unreliable. Pass a filename if you are + able to, otherwise attach an etag yourself. This functionality + will be removed in Flask 1.0 + + .. versionchanged:: 0.9 + cache_timeout pulls its default from application config, when None. + + .. versionchanged:: 0.12 + The filename is no longer automatically inferred from file objects. If + you want to use automatic mimetype and etag support, pass a filepath via + `filename_or_fp` or `attachment_filename`. + + .. versionchanged:: 0.12 + The `attachment_filename` is preferred over `filename` for MIME-type + detection. + + .. versionchanged:: 1.0 + UTF-8 filenames, as specified in `RFC 2231`_, are supported. + + .. _RFC 2231: https://tools.ietf.org/html/rfc2231#section-4 + + .. versionchanged:: 1.0.3 + Filenames are encoded with ASCII instead of Latin-1 for broader + compatibility with WSGI servers. + + .. versionchanged:: 1.1 + Filename may be a :class:`~os.PathLike` object. + + .. versionadded:: 1.1 + Partial content supports :class:`~io.BytesIO`. + + :param filename_or_fp: the filename of the file to send. + This is relative to the :attr:`~Flask.root_path` + if a relative path is specified. + Alternatively a file object might be provided in + which case ``X-Sendfile`` might not work and fall + back to the traditional method. Make sure that the + file pointer is positioned at the start of data to + send before calling :func:`send_file`. + :param mimetype: the mimetype of the file if provided. If a file path is + given, auto detection happens as fallback, otherwise an + error will be raised. + :param as_attachment: set to ``True`` if you want to send this file with + a ``Content-Disposition: attachment`` header. + :param attachment_filename: the filename for the attachment if it + differs from the file's filename. + :param add_etags: set to ``False`` to disable attaching of etags. + :param conditional: set to ``True`` to enable conditional responses. + + :param cache_timeout: the timeout in seconds for the headers. When ``None`` + (default), this value is set by + :meth:`~Flask.get_send_file_max_age` of + :data:`~flask.current_app`. + :param last_modified: set the ``Last-Modified`` header to this value, + a :class:`~datetime.datetime` or timestamp. + If a file was passed, this overrides its mtime. + """ + mtime = None + fsize = None + + if hasattr(filename_or_fp, "__fspath__"): + filename_or_fp = fspath(filename_or_fp) + + if isinstance(filename_or_fp, string_types): + filename = filename_or_fp + if not os.path.isabs(filename): + filename = os.path.join(current_app.root_path, filename) + file = None + if attachment_filename is None: + attachment_filename = os.path.basename(filename) + else: + file = filename_or_fp + filename = None + + if mimetype is None: + if attachment_filename is not None: + mimetype = ( + mimetypes.guess_type(attachment_filename)[0] + or "application/octet-stream" + ) + + if mimetype is None: + raise ValueError( + "Unable to infer MIME-type because no filename is available. " + "Please set either `attachment_filename`, pass a filepath to " + "`filename_or_fp` or set your own MIME-type via `mimetype`." + ) + + headers = Headers() + if as_attachment: + if attachment_filename is None: + raise TypeError("filename unavailable, required for sending as attachment") + + if not isinstance(attachment_filename, text_type): + attachment_filename = attachment_filename.decode("utf-8") + + try: + attachment_filename = attachment_filename.encode("ascii") + except UnicodeEncodeError: + filenames = { + "filename": unicodedata.normalize("NFKD", attachment_filename).encode( + "ascii", "ignore" + ), + "filename*": "UTF-8''%s" % url_quote(attachment_filename, safe=b""), + } + else: + filenames = {"filename": attachment_filename} + + headers.add("Content-Disposition", "attachment", **filenames) + + if current_app.use_x_sendfile and filename: + if file is not None: + file.close() + headers["X-Sendfile"] = filename + fsize = os.path.getsize(filename) + headers["Content-Length"] = fsize + data = None + else: + if file is None: + file = open(filename, "rb") + mtime = os.path.getmtime(filename) + fsize = os.path.getsize(filename) + headers["Content-Length"] = fsize + elif isinstance(file, io.BytesIO): + try: + fsize = file.getbuffer().nbytes + except AttributeError: + # Python 2 doesn't have getbuffer + fsize = len(file.getvalue()) + headers["Content-Length"] = fsize + data = wrap_file(request.environ, file) + + rv = current_app.response_class( + data, mimetype=mimetype, headers=headers, direct_passthrough=True + ) + + if last_modified is not None: + rv.last_modified = last_modified + elif mtime is not None: + rv.last_modified = mtime + + rv.cache_control.public = True + if cache_timeout is None: + cache_timeout = current_app.get_send_file_max_age(filename) + if cache_timeout is not None: + rv.cache_control.max_age = cache_timeout + rv.expires = int(time() + cache_timeout) + + if add_etags and filename is not None: + from warnings import warn + + try: + rv.set_etag( + "%s-%s-%s" + % ( + os.path.getmtime(filename), + os.path.getsize(filename), + adler32( + filename.encode("utf-8") + if isinstance(filename, text_type) + else filename + ) + & 0xFFFFFFFF, + ) + ) + except OSError: + warn( + "Access %s failed, maybe it does not exist, so ignore etags in " + "headers" % filename, + stacklevel=2, + ) + + if conditional: + try: + rv = rv.make_conditional(request, accept_ranges=True, complete_length=fsize) + except RequestedRangeNotSatisfiable: + if file is not None: + file.close() + raise + # make sure we don't send x-sendfile for servers that + # ignore the 304 status code for x-sendfile. + if rv.status_code == 304: + rv.headers.pop("x-sendfile", None) + return rv + + +def safe_join(directory, *pathnames): + """Safely join `directory` and zero or more untrusted `pathnames` + components. + + Example usage:: + + @app.route('/wiki/') + def wiki_page(filename): + filename = safe_join(app.config['WIKI_FOLDER'], filename) + with open(filename, 'rb') as fd: + content = fd.read() # Read and process the file content... + + :param directory: the trusted base directory. + :param pathnames: the untrusted pathnames relative to that directory. + :raises: :class:`~werkzeug.exceptions.NotFound` if one or more passed + paths fall out of its boundaries. + """ + + parts = [directory] + + for filename in pathnames: + if filename != "": + filename = posixpath.normpath(filename) + + if ( + any(sep in filename for sep in _os_alt_seps) + or os.path.isabs(filename) + or filename == ".." + or filename.startswith("../") + ): + raise NotFound() + + parts.append(filename) + + return posixpath.join(*parts) + + +def send_from_directory(directory, filename, **options): + """Send a file from a given directory with :func:`send_file`. This + is a secure way to quickly expose static files from an upload folder + or something similar. + + Example usage:: + + @app.route('/uploads/') + def download_file(filename): + return send_from_directory(app.config['UPLOAD_FOLDER'], + filename, as_attachment=True) + + .. admonition:: Sending files and Performance + + It is strongly recommended to activate either ``X-Sendfile`` support in + your webserver or (if no authentication happens) to tell the webserver + to serve files for the given path on its own without calling into the + web application for improved performance. + + .. versionadded:: 0.5 + + :param directory: the directory where all the files are stored. + :param filename: the filename relative to that directory to + download. + :param options: optional keyword arguments that are directly + forwarded to :func:`send_file`. + """ + filename = fspath(filename) + directory = fspath(directory) + filename = safe_join(directory, filename) + if not os.path.isabs(filename): + filename = os.path.join(current_app.root_path, filename) + try: + if not os.path.isfile(filename): + raise NotFound() + except (TypeError, ValueError): + raise BadRequest() + options.setdefault("conditional", True) + return send_file(filename, **options) + + +def get_root_path(import_name): + """Returns the path to a package or cwd if that cannot be found. This + returns the path of a package or the folder that contains a module. + + Not to be confused with the package path returned by :func:`find_package`. + """ + # Module already imported and has a file attribute. Use that first. + mod = sys.modules.get(import_name) + if mod is not None and hasattr(mod, "__file__"): + return os.path.dirname(os.path.abspath(mod.__file__)) + + # Next attempt: check the loader. + loader = pkgutil.get_loader(import_name) + + # Loader does not exist or we're referring to an unloaded main module + # or a main module without path (interactive sessions), go with the + # current working directory. + if loader is None or import_name == "__main__": + return os.getcwd() + + # For .egg, zipimporter does not have get_filename until Python 2.7. + # Some other loaders might exhibit the same behavior. + if hasattr(loader, "get_filename"): + filepath = loader.get_filename(import_name) + else: + # Fall back to imports. + __import__(import_name) + mod = sys.modules[import_name] + filepath = getattr(mod, "__file__", None) + + # If we don't have a filepath it might be because we are a + # namespace package. In this case we pick the root path from the + # first module that is contained in our package. + if filepath is None: + raise RuntimeError( + "No root path can be found for the provided " + 'module "%s". This can happen because the ' + "module came from an import hook that does " + "not provide file name information or because " + "it's a namespace package. In this case " + "the root path needs to be explicitly " + "provided." % import_name + ) + + # filepath is import_name.py for a module, or __init__.py for a package. + return os.path.dirname(os.path.abspath(filepath)) + + +def _matching_loader_thinks_module_is_package(loader, mod_name): + """Given the loader that loaded a module and the module this function + attempts to figure out if the given module is actually a package. + """ + # If the loader can tell us if something is a package, we can + # directly ask the loader. + if hasattr(loader, "is_package"): + return loader.is_package(mod_name) + # importlib's namespace loaders do not have this functionality but + # all the modules it loads are packages, so we can take advantage of + # this information. + elif ( + loader.__class__.__module__ == "_frozen_importlib" + and loader.__class__.__name__ == "NamespaceLoader" + ): + return True + # Otherwise we need to fail with an error that explains what went + # wrong. + raise AttributeError( + ( + "%s.is_package() method is missing but is required by Flask of " + "PEP 302 import hooks. If you do not use import hooks and " + "you encounter this error please file a bug against Flask." + ) + % loader.__class__.__name__ + ) + + +def _find_package_path(root_mod_name): + """Find the path where the module's root exists in""" + if sys.version_info >= (3, 4): + import importlib.util + + try: + spec = importlib.util.find_spec(root_mod_name) + if spec is None: + raise ValueError("not found") + # ImportError: the machinery told us it does not exist + # ValueError: + # - the module name was invalid + # - the module name is __main__ + # - *we* raised `ValueError` due to `spec` being `None` + except (ImportError, ValueError): + pass # handled below + else: + # namespace package + if spec.origin in {"namespace", None}: + return os.path.dirname(next(iter(spec.submodule_search_locations))) + # a package (with __init__.py) + elif spec.submodule_search_locations: + return os.path.dirname(os.path.dirname(spec.origin)) + # just a normal module + else: + return os.path.dirname(spec.origin) + + # we were unable to find the `package_path` using PEP 451 loaders + loader = pkgutil.get_loader(root_mod_name) + if loader is None or root_mod_name == "__main__": + # import name is not found, or interactive/main module + return os.getcwd() + else: + # For .egg, zipimporter does not have get_filename until Python 2.7. + if hasattr(loader, "get_filename"): + filename = loader.get_filename(root_mod_name) + elif hasattr(loader, "archive"): + # zipimporter's loader.archive points to the .egg or .zip + # archive filename is dropped in call to dirname below. + filename = loader.archive + else: + # At least one loader is missing both get_filename and archive: + # Google App Engine's HardenedModulesHook + # + # Fall back to imports. + __import__(root_mod_name) + filename = sys.modules[root_mod_name].__file__ + package_path = os.path.abspath(os.path.dirname(filename)) + + # In case the root module is a package we need to chop of the + # rightmost part. This needs to go through a helper function + # because of python 3.3 namespace packages. + if _matching_loader_thinks_module_is_package(loader, root_mod_name): + package_path = os.path.dirname(package_path) + + return package_path + + +def find_package(import_name): + """Finds a package and returns the prefix (or None if the package is + not installed) as well as the folder that contains the package or + module as a tuple. The package path returned is the module that would + have to be added to the pythonpath in order to make it possible to + import the module. The prefix is the path below which a UNIX like + folder structure exists (lib, share etc.). + """ + root_mod_name, _, _ = import_name.partition(".") + package_path = _find_package_path(root_mod_name) + site_parent, site_folder = os.path.split(package_path) + py_prefix = os.path.abspath(sys.prefix) + if package_path.startswith(py_prefix): + return py_prefix, package_path + elif site_folder.lower() == "site-packages": + parent, folder = os.path.split(site_parent) + # Windows like installations + if folder.lower() == "lib": + base_dir = parent + # UNIX like installations + elif os.path.basename(parent).lower() == "lib": + base_dir = os.path.dirname(parent) + else: + base_dir = site_parent + return base_dir, package_path + return None, package_path + + +class locked_cached_property(object): + """A decorator that converts a function into a lazy property. The + function wrapped is called the first time to retrieve the result + and then that calculated result is used the next time you access + the value. Works like the one in Werkzeug but has a lock for + thread safety. + """ + + def __init__(self, func, name=None, doc=None): + self.__name__ = name or func.__name__ + self.__module__ = func.__module__ + self.__doc__ = doc or func.__doc__ + self.func = func + self.lock = RLock() + + def __get__(self, obj, type=None): + if obj is None: + return self + with self.lock: + value = obj.__dict__.get(self.__name__, _missing) + if value is _missing: + value = self.func(obj) + obj.__dict__[self.__name__] = value + return value + + +class _PackageBoundObject(object): + #: The name of the package or module that this app belongs to. Do not + #: change this once it is set by the constructor. + import_name = None + + #: Location of the template files to be added to the template lookup. + #: ``None`` if templates should not be added. + template_folder = None + + #: Absolute path to the package on the filesystem. Used to look up + #: resources contained in the package. + root_path = None + + def __init__(self, import_name, template_folder=None, root_path=None): + self.import_name = import_name + self.template_folder = template_folder + + if root_path is None: + root_path = get_root_path(self.import_name) + + self.root_path = root_path + self._static_folder = None + self._static_url_path = None + + # circular import + from .cli import AppGroup + + #: The Click command group for registration of CLI commands + #: on the application and associated blueprints. These commands + #: are accessible via the :command:`flask` command once the + #: application has been discovered and blueprints registered. + self.cli = AppGroup() + + @property + def static_folder(self): + """The absolute path to the configured static folder.""" + if self._static_folder is not None: + return os.path.join(self.root_path, self._static_folder) + + @static_folder.setter + def static_folder(self, value): + self._static_folder = value + + @property + def static_url_path(self): + """The URL prefix that the static route will be accessible from. + + If it was not configured during init, it is derived from + :attr:`static_folder`. + """ + if self._static_url_path is not None: + return self._static_url_path + + if self.static_folder is not None: + basename = os.path.basename(self.static_folder) + return ("/" + basename).rstrip("/") + + @static_url_path.setter + def static_url_path(self, value): + if value is not None: + value = value.rstrip("/") + + self._static_url_path = value + + @property + def has_static_folder(self): + """This is ``True`` if the package bound object's container has a + folder for static files. + + .. versionadded:: 0.5 + """ + return self.static_folder is not None + + @locked_cached_property + def jinja_loader(self): + """The Jinja loader for this package bound object. + + .. versionadded:: 0.5 + """ + if self.template_folder is not None: + return FileSystemLoader(os.path.join(self.root_path, self.template_folder)) + + def get_send_file_max_age(self, filename): + """Provides default cache_timeout for the :func:`send_file` functions. + + By default, this function returns ``SEND_FILE_MAX_AGE_DEFAULT`` from + the configuration of :data:`~flask.current_app`. + + Static file functions such as :func:`send_from_directory` use this + function, and :func:`send_file` calls this function on + :data:`~flask.current_app` when the given cache_timeout is ``None``. If a + cache_timeout is given in :func:`send_file`, that timeout is used; + otherwise, this method is called. + + This allows subclasses to change the behavior when sending files based + on the filename. For example, to set the cache timeout for .js files + to 60 seconds:: + + class MyFlask(flask.Flask): + def get_send_file_max_age(self, name): + if name.lower().endswith('.js'): + return 60 + return flask.Flask.get_send_file_max_age(self, name) + + .. versionadded:: 0.9 + """ + return total_seconds(current_app.send_file_max_age_default) + + def send_static_file(self, filename): + """Function used internally to send static files from the static + folder to the browser. + + .. versionadded:: 0.5 + """ + if not self.has_static_folder: + raise RuntimeError("No static folder for this object") + # Ensure get_send_file_max_age is called in all cases. + # Here, we ensure get_send_file_max_age is called for Blueprints. + cache_timeout = self.get_send_file_max_age(filename) + return send_from_directory( + self.static_folder, filename, cache_timeout=cache_timeout + ) + + def open_resource(self, resource, mode="rb"): + """Opens a resource from the application's resource folder. To see + how this works, consider the following folder structure:: + + /myapplication.py + /schema.sql + /static + /style.css + /templates + /layout.html + /index.html + + If you want to open the :file:`schema.sql` file you would do the + following:: + + with app.open_resource('schema.sql') as f: + contents = f.read() + do_something_with(contents) + + :param resource: the name of the resource. To access resources within + subfolders use forward slashes as separator. + :param mode: Open file in this mode. Only reading is supported, + valid values are "r" (or "rt") and "rb". + """ + if mode not in {"r", "rt", "rb"}: + raise ValueError("Resources can only be opened for reading") + + return open(os.path.join(self.root_path, resource), mode) + + +def total_seconds(td): + """Returns the total seconds from a timedelta object. + + :param timedelta td: the timedelta to be converted in seconds + + :returns: number of seconds + :rtype: int + """ + return td.days * 60 * 60 * 24 + td.seconds + + +def is_ip(value): + """Determine if the given string is an IP address. + + Python 2 on Windows doesn't provide ``inet_pton``, so this only + checks IPv4 addresses in that environment. + + :param value: value to check + :type value: str + + :return: True if string is an IP address + :rtype: bool + """ + if PY2 and os.name == "nt": + try: + socket.inet_aton(value) + return True + except socket.error: + return False + + for family in (socket.AF_INET, socket.AF_INET6): + try: + socket.inet_pton(family, value) + except socket.error: + pass + else: + return True + + return False diff --git a/week-0/day-3/my_todo_app/venv/lib/python3.6/site-packages/flask/json/__init__.py b/week-0/day-3/my_todo_app/venv/lib/python3.6/site-packages/flask/json/__init__.py new file mode 100644 index 00000000..a141068b --- /dev/null +++ b/week-0/day-3/my_todo_app/venv/lib/python3.6/site-packages/flask/json/__init__.py @@ -0,0 +1,376 @@ +# -*- coding: utf-8 -*- +""" +flask.json +~~~~~~~~~~ + +:copyright: 2010 Pallets +:license: BSD-3-Clause +""" +import codecs +import io +import uuid +from datetime import date +from datetime import datetime + +from itsdangerous import json as _json +from jinja2 import Markup +from werkzeug.http import http_date + +from .._compat import PY2 +from .._compat import text_type +from ..globals import current_app +from ..globals import request + +try: + import dataclasses +except ImportError: + dataclasses = None + +# Figure out if simplejson escapes slashes. This behavior was changed +# from one version to another without reason. +_slash_escape = "\\/" not in _json.dumps("/") + + +__all__ = [ + "dump", + "dumps", + "load", + "loads", + "htmlsafe_dump", + "htmlsafe_dumps", + "JSONDecoder", + "JSONEncoder", + "jsonify", +] + + +def _wrap_reader_for_text(fp, encoding): + if isinstance(fp.read(0), bytes): + fp = io.TextIOWrapper(io.BufferedReader(fp), encoding) + return fp + + +def _wrap_writer_for_text(fp, encoding): + try: + fp.write("") + except TypeError: + fp = io.TextIOWrapper(fp, encoding) + return fp + + +class JSONEncoder(_json.JSONEncoder): + """The default Flask JSON encoder. This one extends the default + encoder by also supporting ``datetime``, ``UUID``, ``dataclasses``, + and ``Markup`` objects. + + ``datetime`` objects are serialized as RFC 822 datetime strings. + This is the same as the HTTP date format. + + In order to support more data types, override the :meth:`default` + method. + """ + + def default(self, o): + """Implement this method in a subclass such that it returns a + serializable object for ``o``, or calls the base implementation (to + raise a :exc:`TypeError`). + + For example, to support arbitrary iterators, you could implement + default like this:: + + def default(self, o): + try: + iterable = iter(o) + except TypeError: + pass + else: + return list(iterable) + return JSONEncoder.default(self, o) + """ + if isinstance(o, datetime): + return http_date(o.utctimetuple()) + if isinstance(o, date): + return http_date(o.timetuple()) + if isinstance(o, uuid.UUID): + return str(o) + if dataclasses and dataclasses.is_dataclass(o): + return dataclasses.asdict(o) + if hasattr(o, "__html__"): + return text_type(o.__html__()) + return _json.JSONEncoder.default(self, o) + + +class JSONDecoder(_json.JSONDecoder): + """The default JSON decoder. This one does not change the behavior from + the default simplejson decoder. Consult the :mod:`json` documentation + for more information. This decoder is not only used for the load + functions of this module but also :attr:`~flask.Request`. + """ + + +def _dump_arg_defaults(kwargs, app=None): + """Inject default arguments for dump functions.""" + if app is None: + app = current_app + + if app: + bp = app.blueprints.get(request.blueprint) if request else None + kwargs.setdefault( + "cls", bp.json_encoder if bp and bp.json_encoder else app.json_encoder + ) + + if not app.config["JSON_AS_ASCII"]: + kwargs.setdefault("ensure_ascii", False) + + kwargs.setdefault("sort_keys", app.config["JSON_SORT_KEYS"]) + else: + kwargs.setdefault("sort_keys", True) + kwargs.setdefault("cls", JSONEncoder) + + +def _load_arg_defaults(kwargs, app=None): + """Inject default arguments for load functions.""" + if app is None: + app = current_app + + if app: + bp = app.blueprints.get(request.blueprint) if request else None + kwargs.setdefault( + "cls", bp.json_decoder if bp and bp.json_decoder else app.json_decoder + ) + else: + kwargs.setdefault("cls", JSONDecoder) + + +def detect_encoding(data): + """Detect which UTF codec was used to encode the given bytes. + + The latest JSON standard (:rfc:`8259`) suggests that only UTF-8 is + accepted. Older documents allowed 8, 16, or 32. 16 and 32 can be big + or little endian. Some editors or libraries may prepend a BOM. + + :param data: Bytes in unknown UTF encoding. + :return: UTF encoding name + """ + head = data[:4] + + if head[:3] == codecs.BOM_UTF8: + return "utf-8-sig" + + if b"\x00" not in head: + return "utf-8" + + if head in (codecs.BOM_UTF32_BE, codecs.BOM_UTF32_LE): + return "utf-32" + + if head[:2] in (codecs.BOM_UTF16_BE, codecs.BOM_UTF16_LE): + return "utf-16" + + if len(head) == 4: + if head[:3] == b"\x00\x00\x00": + return "utf-32-be" + + if head[::2] == b"\x00\x00": + return "utf-16-be" + + if head[1:] == b"\x00\x00\x00": + return "utf-32-le" + + if head[1::2] == b"\x00\x00": + return "utf-16-le" + + if len(head) == 2: + return "utf-16-be" if head.startswith(b"\x00") else "utf-16-le" + + return "utf-8" + + +def dumps(obj, app=None, **kwargs): + """Serialize ``obj`` to a JSON-formatted string. If there is an + app context pushed, use the current app's configured encoder + (:attr:`~flask.Flask.json_encoder`), or fall back to the default + :class:`JSONEncoder`. + + Takes the same arguments as the built-in :func:`json.dumps`, and + does some extra configuration based on the application. If the + simplejson package is installed, it is preferred. + + :param obj: Object to serialize to JSON. + :param app: App instance to use to configure the JSON encoder. + Uses ``current_app`` if not given, and falls back to the default + encoder when not in an app context. + :param kwargs: Extra arguments passed to :func:`json.dumps`. + + .. versionchanged:: 1.0.3 + + ``app`` can be passed directly, rather than requiring an app + context for configuration. + """ + _dump_arg_defaults(kwargs, app=app) + encoding = kwargs.pop("encoding", None) + rv = _json.dumps(obj, **kwargs) + if encoding is not None and isinstance(rv, text_type): + rv = rv.encode(encoding) + return rv + + +def dump(obj, fp, app=None, **kwargs): + """Like :func:`dumps` but writes into a file object.""" + _dump_arg_defaults(kwargs, app=app) + encoding = kwargs.pop("encoding", None) + if encoding is not None: + fp = _wrap_writer_for_text(fp, encoding) + _json.dump(obj, fp, **kwargs) + + +def loads(s, app=None, **kwargs): + """Deserialize an object from a JSON-formatted string ``s``. If + there is an app context pushed, use the current app's configured + decoder (:attr:`~flask.Flask.json_decoder`), or fall back to the + default :class:`JSONDecoder`. + + Takes the same arguments as the built-in :func:`json.loads`, and + does some extra configuration based on the application. If the + simplejson package is installed, it is preferred. + + :param s: JSON string to deserialize. + :param app: App instance to use to configure the JSON decoder. + Uses ``current_app`` if not given, and falls back to the default + encoder when not in an app context. + :param kwargs: Extra arguments passed to :func:`json.dumps`. + + .. versionchanged:: 1.0.3 + + ``app`` can be passed directly, rather than requiring an app + context for configuration. + """ + _load_arg_defaults(kwargs, app=app) + if isinstance(s, bytes): + encoding = kwargs.pop("encoding", None) + if encoding is None: + encoding = detect_encoding(s) + s = s.decode(encoding) + return _json.loads(s, **kwargs) + + +def load(fp, app=None, **kwargs): + """Like :func:`loads` but reads from a file object.""" + _load_arg_defaults(kwargs, app=app) + if not PY2: + fp = _wrap_reader_for_text(fp, kwargs.pop("encoding", None) or "utf-8") + return _json.load(fp, **kwargs) + + +def htmlsafe_dumps(obj, **kwargs): + """Works exactly like :func:`dumps` but is safe for use in `` + + + + +

+""" +FOOTER = u"""\ + +
+ +
+
+

Console Locked

+

+ The console is locked and needs to be unlocked by entering the PIN. + You can find the PIN printed out on the standard output of your + shell that runs the server. +

+

PIN: + + +

+
+
+ + +""" + +PAGE_HTML = ( + HEADER + + u"""\ +

%(exception_type)s

+
+

%(exception)s

+
+

Traceback (most recent call last)

+%(summary)s +
+
+

+ + This is the Copy/Paste friendly version of the traceback. You can also paste this traceback into + a gist: + +

+ +
+
+
+ The debugger caught an exception in your WSGI application. You can now + look at the traceback which led to the error. + If you enable JavaScript you can also use additional features such as code + execution (if the evalex feature is enabled), automatic pasting of the + exceptions and much more. +
+""" + + FOOTER + + """ + +""" +) + +CONSOLE_HTML = ( + HEADER + + u"""\ +

Interactive Console

+
+In this console you can execute Python expressions in the context of the +application. The initial namespace was created by the debugger automatically. +
+
The Console requires JavaScript.
+""" + + FOOTER +) + +SUMMARY_HTML = u"""\ +
+ %(title)s +
    %(frames)s
+ %(description)s +
+""" + +FRAME_HTML = u"""\ +
+

File "%(filename)s", + line %(lineno)s, + in %(function_name)s

+
%(lines)s
+
+""" + +SOURCE_LINE_HTML = u"""\ + + %(lineno)s + %(code)s + +""" + + +def render_console_html(secret, evalex_trusted=True): + return CONSOLE_HTML % { + "evalex": "true", + "evalex_trusted": "true" if evalex_trusted else "false", + "console": "true", + "title": "Console", + "secret": secret, + "traceback_id": -1, + } + + +def get_current_traceback( + ignore_system_exceptions=False, show_hidden_frames=False, skip=0 +): + """Get the current exception info as `Traceback` object. Per default + calling this method will reraise system exceptions such as generator exit, + system exit or others. This behavior can be disabled by passing `False` + to the function as first parameter. + """ + exc_type, exc_value, tb = sys.exc_info() + if ignore_system_exceptions and exc_type in system_exceptions: + reraise(exc_type, exc_value, tb) + for _ in range_type(skip): + if tb.tb_next is None: + break + tb = tb.tb_next + tb = Traceback(exc_type, exc_value, tb) + if not show_hidden_frames: + tb.filter_hidden_frames() + return tb + + +class Line(object): + """Helper for the source renderer.""" + + __slots__ = ("lineno", "code", "in_frame", "current") + + def __init__(self, lineno, code): + self.lineno = lineno + self.code = code + self.in_frame = False + self.current = False + + @property + def classes(self): + rv = ["line"] + if self.in_frame: + rv.append("in-frame") + if self.current: + rv.append("current") + return rv + + def render(self): + return SOURCE_LINE_HTML % { + "classes": u" ".join(self.classes), + "lineno": self.lineno, + "code": escape(self.code), + } + + +class Traceback(object): + """Wraps a traceback.""" + + def __init__(self, exc_type, exc_value, tb): + self.exc_type = exc_type + self.exc_value = exc_value + self.tb = tb + + exception_type = exc_type.__name__ + if exc_type.__module__ not in {"builtins", "__builtin__", "exceptions"}: + exception_type = exc_type.__module__ + "." + exception_type + self.exception_type = exception_type + + self.groups = [] + memo = set() + while True: + self.groups.append(Group(exc_type, exc_value, tb)) + memo.add(id(exc_value)) + if PY2: + break + exc_value = exc_value.__cause__ or exc_value.__context__ + if exc_value is None or id(exc_value) in memo: + break + exc_type = type(exc_value) + tb = exc_value.__traceback__ + self.groups.reverse() + self.frames = [frame for group in self.groups for frame in group.frames] + + def filter_hidden_frames(self): + """Remove the frames according to the paste spec.""" + for group in self.groups: + group.filter_hidden_frames() + + self.frames[:] = [frame for group in self.groups for frame in group.frames] + + @property + def is_syntax_error(self): + """Is it a syntax error?""" + return isinstance(self.exc_value, SyntaxError) + + @property + def exception(self): + """String representation of the final exception.""" + return self.groups[-1].exception + + def log(self, logfile=None): + """Log the ASCII traceback into a file object.""" + if logfile is None: + logfile = sys.stderr + tb = self.plaintext.rstrip() + u"\n" + logfile.write(to_native(tb, "utf-8", "replace")) + + def paste(self): + """Create a paste and return the paste id.""" + data = json.dumps( + { + "description": "Werkzeug Internal Server Error", + "public": False, + "files": {"traceback.txt": {"content": self.plaintext}}, + } + ).encode("utf-8") + try: + from urllib2 import urlopen + except ImportError: + from urllib.request import urlopen + rv = urlopen("https://api.github.com/gists", data=data) + resp = json.loads(rv.read().decode("utf-8")) + rv.close() + return {"url": resp["html_url"], "id": resp["id"]} + + def render_summary(self, include_title=True): + """Render the traceback for the interactive console.""" + title = "" + classes = ["traceback"] + if not self.frames: + classes.append("noframe-traceback") + frames = [] + else: + library_frames = sum(frame.is_library for frame in self.frames) + mark_lib = 0 < library_frames < len(self.frames) + frames = [group.render(mark_lib=mark_lib) for group in self.groups] + + if include_title: + if self.is_syntax_error: + title = u"Syntax Error" + else: + title = u"Traceback (most recent call last):" + + if self.is_syntax_error: + description_wrapper = u"
%s
" + else: + description_wrapper = u"
%s
" + + return SUMMARY_HTML % { + "classes": u" ".join(classes), + "title": u"

%s

" % title if title else u"", + "frames": u"\n".join(frames), + "description": description_wrapper % escape(self.exception), + } + + def render_full(self, evalex=False, secret=None, evalex_trusted=True): + """Render the Full HTML page with the traceback info.""" + exc = escape(self.exception) + return PAGE_HTML % { + "evalex": "true" if evalex else "false", + "evalex_trusted": "true" if evalex_trusted else "false", + "console": "false", + "title": exc, + "exception": exc, + "exception_type": escape(self.exception_type), + "summary": self.render_summary(include_title=False), + "plaintext": escape(self.plaintext), + "plaintext_cs": re.sub("-{2,}", "-", self.plaintext), + "traceback_id": self.id, + "secret": secret, + } + + @cached_property + def plaintext(self): + return u"\n".join([group.render_text() for group in self.groups]) + + @property + def id(self): + return id(self) + + +class Group(object): + """A group of frames for an exception in a traceback. On Python 3, + if the exception has a ``__cause__`` or ``__context__``, there are + multiple exception groups. + """ + + def __init__(self, exc_type, exc_value, tb): + self.exc_type = exc_type + self.exc_value = exc_value + self.info = None + if not PY2: + if exc_value.__cause__ is not None: + self.info = ( + u"The above exception was the direct cause of the" + u" following exception" + ) + elif exc_value.__context__ is not None: + self.info = ( + u"During handling of the above exception, another" + u" exception occurred" + ) + + self.frames = [] + while tb is not None: + self.frames.append(Frame(exc_type, exc_value, tb)) + tb = tb.tb_next + + def filter_hidden_frames(self): + new_frames = [] + hidden = False + + for frame in self.frames: + hide = frame.hide + if hide in ("before", "before_and_this"): + new_frames = [] + hidden = False + if hide == "before_and_this": + continue + elif hide in ("reset", "reset_and_this"): + hidden = False + if hide == "reset_and_this": + continue + elif hide in ("after", "after_and_this"): + hidden = True + if hide == "after_and_this": + continue + elif hide or hidden: + continue + new_frames.append(frame) + + # if we only have one frame and that frame is from the codeop + # module, remove it. + if len(new_frames) == 1 and self.frames[0].module == "codeop": + del self.frames[:] + + # if the last frame is missing something went terrible wrong :( + elif self.frames[-1] in new_frames: + self.frames[:] = new_frames + + @property + def exception(self): + """String representation of the exception.""" + buf = traceback.format_exception_only(self.exc_type, self.exc_value) + rv = "".join(buf).strip() + return to_unicode(rv, "utf-8", "replace") + + def render(self, mark_lib=True): + out = [] + if self.info is not None: + out.append(u'
  • %s:
    ' % self.info) + for frame in self.frames: + out.append( + u"%s" + % ( + u' title="%s"' % escape(frame.info) if frame.info else u"", + frame.render(mark_lib=mark_lib), + ) + ) + return u"\n".join(out) + + def render_text(self): + out = [] + if self.info is not None: + out.append(u"\n%s:\n" % self.info) + out.append(u"Traceback (most recent call last):") + for frame in self.frames: + out.append(frame.render_text()) + out.append(self.exception) + return u"\n".join(out) + + +class Frame(object): + """A single frame in a traceback.""" + + def __init__(self, exc_type, exc_value, tb): + self.lineno = tb.tb_lineno + self.function_name = tb.tb_frame.f_code.co_name + self.locals = tb.tb_frame.f_locals + self.globals = tb.tb_frame.f_globals + + fn = inspect.getsourcefile(tb) or inspect.getfile(tb) + if fn[-4:] in (".pyo", ".pyc"): + fn = fn[:-1] + # if it's a file on the file system resolve the real filename. + if os.path.isfile(fn): + fn = os.path.realpath(fn) + self.filename = to_unicode(fn, get_filesystem_encoding()) + self.module = self.globals.get("__name__") + self.loader = self.globals.get("__loader__") + self.code = tb.tb_frame.f_code + + # support for paste's traceback extensions + self.hide = self.locals.get("__traceback_hide__", False) + info = self.locals.get("__traceback_info__") + if info is not None: + info = to_unicode(info, "utf-8", "replace") + self.info = info + + def render(self, mark_lib=True): + """Render a single frame in a traceback.""" + return FRAME_HTML % { + "id": self.id, + "filename": escape(self.filename), + "lineno": self.lineno, + "function_name": escape(self.function_name), + "lines": self.render_line_context(), + "library": "library" if mark_lib and self.is_library else "", + } + + @cached_property + def is_library(self): + return any( + self.filename.startswith(path) for path in sysconfig.get_paths().values() + ) + + def render_text(self): + return u' File "%s", line %s, in %s\n %s' % ( + self.filename, + self.lineno, + self.function_name, + self.current_line.strip(), + ) + + def render_line_context(self): + before, current, after = self.get_context_lines() + rv = [] + + def render_line(line, cls): + line = line.expandtabs().rstrip() + stripped_line = line.strip() + prefix = len(line) - len(stripped_line) + rv.append( + '
    %s%s
    ' + % (cls, " " * prefix, escape(stripped_line) or " ") + ) + + for line in before: + render_line(line, "before") + render_line(current, "current") + for line in after: + render_line(line, "after") + + return "\n".join(rv) + + def get_annotated_lines(self): + """Helper function that returns lines with extra information.""" + lines = [Line(idx + 1, x) for idx, x in enumerate(self.sourcelines)] + + # find function definition and mark lines + if hasattr(self.code, "co_firstlineno"): + lineno = self.code.co_firstlineno - 1 + while lineno > 0: + if _funcdef_re.match(lines[lineno].code): + break + lineno -= 1 + try: + offset = len(inspect.getblock([x.code + "\n" for x in lines[lineno:]])) + except TokenError: + offset = 0 + for line in lines[lineno : lineno + offset]: + line.in_frame = True + + # mark current line + try: + lines[self.lineno - 1].current = True + except IndexError: + pass + + return lines + + def eval(self, code, mode="single"): + """Evaluate code in the context of the frame.""" + if isinstance(code, string_types): + if PY2 and isinstance(code, text_type): # noqa + code = UTF8_COOKIE + code.encode("utf-8") + code = compile(code, "", mode) + return eval(code, self.globals, self.locals) + + @cached_property + def sourcelines(self): + """The sourcecode of the file as list of unicode strings.""" + # get sourcecode from loader or file + source = None + if self.loader is not None: + try: + if hasattr(self.loader, "get_source"): + source = self.loader.get_source(self.module) + elif hasattr(self.loader, "get_source_by_code"): + source = self.loader.get_source_by_code(self.code) + except Exception: + # we munch the exception so that we don't cause troubles + # if the loader is broken. + pass + + if source is None: + try: + f = open(to_native(self.filename, get_filesystem_encoding()), mode="rb") + except IOError: + return [] + try: + source = f.read() + finally: + f.close() + + # already unicode? return right away + if isinstance(source, text_type): + return source.splitlines() + + # yes. it should be ascii, but we don't want to reject too many + # characters in the debugger if something breaks + charset = "utf-8" + if source.startswith(UTF8_COOKIE): + source = source[3:] + else: + for idx, match in enumerate(_line_re.finditer(source)): + match = _coding_re.search(match.group()) + if match is not None: + charset = match.group(1) + break + if idx > 1: + break + + # on broken cookies we fall back to utf-8 too + charset = to_native(charset) + try: + codecs.lookup(charset) + except LookupError: + charset = "utf-8" + + return source.decode(charset, "replace").splitlines() + + def get_context_lines(self, context=5): + before = self.sourcelines[self.lineno - context - 1 : self.lineno - 1] + past = self.sourcelines[self.lineno : self.lineno + context] + return (before, self.current_line, past) + + @property + def current_line(self): + try: + return self.sourcelines[self.lineno - 1] + except IndexError: + return u"" + + @cached_property + def console(self): + return Console(self.globals, self.locals) + + @property + def id(self): + return id(self) diff --git a/week-0/day-3/my_todo_app/venv/lib/python3.6/site-packages/werkzeug/exceptions.py b/week-0/day-3/my_todo_app/venv/lib/python3.6/site-packages/werkzeug/exceptions.py new file mode 100644 index 00000000..bfd20dc1 --- /dev/null +++ b/week-0/day-3/my_todo_app/venv/lib/python3.6/site-packages/werkzeug/exceptions.py @@ -0,0 +1,786 @@ +# -*- coding: utf-8 -*- +""" + werkzeug.exceptions + ~~~~~~~~~~~~~~~~~~~ + + This module implements a number of Python exceptions you can raise from + within your views to trigger a standard non-200 response. + + + Usage Example + ------------- + + :: + + from werkzeug.wrappers import BaseRequest + from werkzeug.wsgi import responder + from werkzeug.exceptions import HTTPException, NotFound + + def view(request): + raise NotFound() + + @responder + def application(environ, start_response): + request = BaseRequest(environ) + try: + return view(request) + except HTTPException as e: + return e + + + As you can see from this example those exceptions are callable WSGI + applications. Because of Python 2.4 compatibility those do not extend + from the response objects but only from the python exception class. + + As a matter of fact they are not Werkzeug response objects. However you + can get a response object by calling ``get_response()`` on a HTTP + exception. + + Keep in mind that you have to pass an environment to ``get_response()`` + because some errors fetch additional information from the WSGI + environment. + + If you want to hook in a different exception page to say, a 404 status + code, you can add a second except for a specific subclass of an error:: + + @responder + def application(environ, start_response): + request = BaseRequest(environ) + try: + return view(request) + except NotFound, e: + return not_found(request) + except HTTPException, e: + return e + + + :copyright: 2007 Pallets + :license: BSD-3-Clause +""" +import sys + +import werkzeug + +# Because of bootstrapping reasons we need to manually patch ourselves +# onto our parent module. +werkzeug.exceptions = sys.modules[__name__] + +from ._compat import implements_to_string +from ._compat import integer_types +from ._compat import iteritems +from ._compat import text_type +from ._internal import _get_environ +from .wrappers import Response + + +@implements_to_string +class HTTPException(Exception): + """Baseclass for all HTTP exceptions. This exception can be called as WSGI + application to render a default error page or you can catch the subclasses + of it independently and render nicer error messages. + """ + + code = None + description = None + + def __init__(self, description=None, response=None): + super(HTTPException, self).__init__() + if description is not None: + self.description = description + self.response = response + + @classmethod + def wrap(cls, exception, name=None): + """Create an exception that is a subclass of the calling HTTP + exception and the ``exception`` argument. + + The first argument to the class will be passed to the + wrapped ``exception``, the rest to the HTTP exception. If + ``e.args`` is not empty and ``e.show_exception`` is ``True``, + the wrapped exception message is added to the HTTP error + description. + + .. versionchanged:: 0.15.5 + The ``show_exception`` attribute controls whether the + description includes the wrapped exception message. + + .. versionchanged:: 0.15.0 + The description includes the wrapped exception message. + """ + + class newcls(cls, exception): + _description = cls.description + show_exception = False + + def __init__(self, arg=None, *args, **kwargs): + super(cls, self).__init__(*args, **kwargs) + + if arg is None: + exception.__init__(self) + else: + exception.__init__(self, arg) + + @property + def description(self): + if self.show_exception: + return "{}\n{}: {}".format( + self._description, exception.__name__, exception.__str__(self) + ) + + return self._description + + @description.setter + def description(self, value): + self._description = value + + newcls.__module__ = sys._getframe(1).f_globals.get("__name__") + name = name or cls.__name__ + exception.__name__ + newcls.__name__ = newcls.__qualname__ = name + return newcls + + @property + def name(self): + """The status name.""" + return HTTP_STATUS_CODES.get(self.code, "Unknown Error") + + def get_description(self, environ=None): + """Get the description.""" + return u"

    %s

    " % escape(self.description).replace("\n", "
    ") + + def get_body(self, environ=None): + """Get the HTML body.""" + return text_type( + ( + u'\n' + u"%(code)s %(name)s\n" + u"

    %(name)s

    \n" + u"%(description)s\n" + ) + % { + "code": self.code, + "name": escape(self.name), + "description": self.get_description(environ), + } + ) + + def get_headers(self, environ=None): + """Get a list of headers.""" + return [("Content-Type", "text/html")] + + def get_response(self, environ=None): + """Get a response object. If one was passed to the exception + it's returned directly. + + :param environ: the optional environ for the request. This + can be used to modify the response depending + on how the request looked like. + :return: a :class:`Response` object or a subclass thereof. + """ + if self.response is not None: + return self.response + if environ is not None: + environ = _get_environ(environ) + headers = self.get_headers(environ) + return Response(self.get_body(environ), self.code, headers) + + def __call__(self, environ, start_response): + """Call the exception as WSGI application. + + :param environ: the WSGI environment. + :param start_response: the response callable provided by the WSGI + server. + """ + response = self.get_response(environ) + return response(environ, start_response) + + def __str__(self): + code = self.code if self.code is not None else "???" + return "%s %s: %s" % (code, self.name, self.description) + + def __repr__(self): + code = self.code if self.code is not None else "???" + return "<%s '%s: %s'>" % (self.__class__.__name__, code, self.name) + + +class BadRequest(HTTPException): + """*400* `Bad Request` + + Raise if the browser sends something to the application the application + or server cannot handle. + """ + + code = 400 + description = ( + "The browser (or proxy) sent a request that this server could " + "not understand." + ) + + +class ClientDisconnected(BadRequest): + """Internal exception that is raised if Werkzeug detects a disconnected + client. Since the client is already gone at that point attempting to + send the error message to the client might not work and might ultimately + result in another exception in the server. Mainly this is here so that + it is silenced by default as far as Werkzeug is concerned. + + Since disconnections cannot be reliably detected and are unspecified + by WSGI to a large extent this might or might not be raised if a client + is gone. + + .. versionadded:: 0.8 + """ + + +class SecurityError(BadRequest): + """Raised if something triggers a security error. This is otherwise + exactly like a bad request error. + + .. versionadded:: 0.9 + """ + + +class BadHost(BadRequest): + """Raised if the submitted host is badly formatted. + + .. versionadded:: 0.11.2 + """ + + +class Unauthorized(HTTPException): + """*401* ``Unauthorized`` + + Raise if the user is not authorized to access a resource. + + The ``www_authenticate`` argument should be used to set the + ``WWW-Authenticate`` header. This is used for HTTP basic auth and + other schemes. Use :class:`~werkzeug.datastructures.WWWAuthenticate` + to create correctly formatted values. Strictly speaking a 401 + response is invalid if it doesn't provide at least one value for + this header, although real clients typically don't care. + + :param description: Override the default message used for the body + of the response. + :param www-authenticate: A single value, or list of values, for the + WWW-Authenticate header. + + .. versionchanged:: 0.15.3 + If the ``www_authenticate`` argument is not set, the + ``WWW-Authenticate`` header is not set. + + .. versionchanged:: 0.15.3 + The ``response`` argument was restored. + + .. versionchanged:: 0.15.1 + ``description`` was moved back as the first argument, restoring + its previous position. + + .. versionchanged:: 0.15.0 + ``www_authenticate`` was added as the first argument, ahead of + ``description``. + """ + + code = 401 + description = ( + "The server could not verify that you are authorized to access" + " the URL requested. You either supplied the wrong credentials" + " (e.g. a bad password), or your browser doesn't understand" + " how to supply the credentials required." + ) + + def __init__(self, description=None, response=None, www_authenticate=None): + HTTPException.__init__(self, description, response) + + if www_authenticate is not None: + if not isinstance(www_authenticate, (tuple, list)): + www_authenticate = (www_authenticate,) + + self.www_authenticate = www_authenticate + + def get_headers(self, environ=None): + headers = HTTPException.get_headers(self, environ) + if self.www_authenticate: + headers.append( + ("WWW-Authenticate", ", ".join([str(x) for x in self.www_authenticate])) + ) + return headers + + +class Forbidden(HTTPException): + """*403* `Forbidden` + + Raise if the user doesn't have the permission for the requested resource + but was authenticated. + """ + + code = 403 + description = ( + "You don't have the permission to access the requested" + " resource. It is either read-protected or not readable by the" + " server." + ) + + +class NotFound(HTTPException): + """*404* `Not Found` + + Raise if a resource does not exist and never existed. + """ + + code = 404 + description = ( + "The requested URL was not found on the server. If you entered" + " the URL manually please check your spelling and try again." + ) + + +class MethodNotAllowed(HTTPException): + """*405* `Method Not Allowed` + + Raise if the server used a method the resource does not handle. For + example `POST` if the resource is view only. Especially useful for REST. + + The first argument for this exception should be a list of allowed methods. + Strictly speaking the response would be invalid if you don't provide valid + methods in the header which you can do with that list. + """ + + code = 405 + description = "The method is not allowed for the requested URL." + + def __init__(self, valid_methods=None, description=None): + """Takes an optional list of valid http methods + starting with werkzeug 0.3 the list will be mandatory.""" + HTTPException.__init__(self, description) + self.valid_methods = valid_methods + + def get_headers(self, environ=None): + headers = HTTPException.get_headers(self, environ) + if self.valid_methods: + headers.append(("Allow", ", ".join(self.valid_methods))) + return headers + + +class NotAcceptable(HTTPException): + """*406* `Not Acceptable` + + Raise if the server can't return any content conforming to the + `Accept` headers of the client. + """ + + code = 406 + + description = ( + "The resource identified by the request is only capable of" + " generating response entities which have content" + " characteristics not acceptable according to the accept" + " headers sent in the request." + ) + + +class RequestTimeout(HTTPException): + """*408* `Request Timeout` + + Raise to signalize a timeout. + """ + + code = 408 + description = ( + "The server closed the network connection because the browser" + " didn't finish the request within the specified time." + ) + + +class Conflict(HTTPException): + """*409* `Conflict` + + Raise to signal that a request cannot be completed because it conflicts + with the current state on the server. + + .. versionadded:: 0.7 + """ + + code = 409 + description = ( + "A conflict happened while processing the request. The" + " resource might have been modified while the request was being" + " processed." + ) + + +class Gone(HTTPException): + """*410* `Gone` + + Raise if a resource existed previously and went away without new location. + """ + + code = 410 + description = ( + "The requested URL is no longer available on this server and" + " there is no forwarding address. If you followed a link from a" + " foreign page, please contact the author of this page." + ) + + +class LengthRequired(HTTPException): + """*411* `Length Required` + + Raise if the browser submitted data but no ``Content-Length`` header which + is required for the kind of processing the server does. + """ + + code = 411 + description = ( + "A request with this method requires a valid Content-" + "Length header." + ) + + +class PreconditionFailed(HTTPException): + """*412* `Precondition Failed` + + Status code used in combination with ``If-Match``, ``If-None-Match``, or + ``If-Unmodified-Since``. + """ + + code = 412 + description = ( + "The precondition on the request for the URL failed positive evaluation." + ) + + +class RequestEntityTooLarge(HTTPException): + """*413* `Request Entity Too Large` + + The status code one should return if the data submitted exceeded a given + limit. + """ + + code = 413 + description = "The data value transmitted exceeds the capacity limit." + + +class RequestURITooLarge(HTTPException): + """*414* `Request URI Too Large` + + Like *413* but for too long URLs. + """ + + code = 414 + description = ( + "The length of the requested URL exceeds the capacity limit for" + " this server. The request cannot be processed." + ) + + +class UnsupportedMediaType(HTTPException): + """*415* `Unsupported Media Type` + + The status code returned if the server is unable to handle the media type + the client transmitted. + """ + + code = 415 + description = ( + "The server does not support the media type transmitted in the request." + ) + + +class RequestedRangeNotSatisfiable(HTTPException): + """*416* `Requested Range Not Satisfiable` + + The client asked for an invalid part of the file. + + .. versionadded:: 0.7 + """ + + code = 416 + description = "The server cannot provide the requested range." + + def __init__(self, length=None, units="bytes", description=None): + """Takes an optional `Content-Range` header value based on ``length`` + parameter. + """ + HTTPException.__init__(self, description) + self.length = length + self.units = units + + def get_headers(self, environ=None): + headers = HTTPException.get_headers(self, environ) + if self.length is not None: + headers.append(("Content-Range", "%s */%d" % (self.units, self.length))) + return headers + + +class ExpectationFailed(HTTPException): + """*417* `Expectation Failed` + + The server cannot meet the requirements of the Expect request-header. + + .. versionadded:: 0.7 + """ + + code = 417 + description = "The server could not meet the requirements of the Expect header" + + +class ImATeapot(HTTPException): + """*418* `I'm a teapot` + + The server should return this if it is a teapot and someone attempted + to brew coffee with it. + + .. versionadded:: 0.7 + """ + + code = 418 + description = "This server is a teapot, not a coffee machine" + + +class UnprocessableEntity(HTTPException): + """*422* `Unprocessable Entity` + + Used if the request is well formed, but the instructions are otherwise + incorrect. + """ + + code = 422 + description = ( + "The request was well-formed but was unable to be followed due" + " to semantic errors." + ) + + +class Locked(HTTPException): + """*423* `Locked` + + Used if the resource that is being accessed is locked. + """ + + code = 423 + description = "The resource that is being accessed is locked." + + +class FailedDependency(HTTPException): + """*424* `Failed Dependency` + + Used if the method could not be performed on the resource + because the requested action depended on another action and that action failed. + """ + + code = 424 + description = ( + "The method could not be performed on the resource because the" + " requested action depended on another action and that action" + " failed." + ) + + +class PreconditionRequired(HTTPException): + """*428* `Precondition Required` + + The server requires this request to be conditional, typically to prevent + the lost update problem, which is a race condition between two or more + clients attempting to update a resource through PUT or DELETE. By requiring + each client to include a conditional header ("If-Match" or "If-Unmodified- + Since") with the proper value retained from a recent GET request, the + server ensures that each client has at least seen the previous revision of + the resource. + """ + + code = 428 + description = ( + "This request is required to be conditional; try using" + ' "If-Match" or "If-Unmodified-Since".' + ) + + +class TooManyRequests(HTTPException): + """*429* `Too Many Requests` + + The server is limiting the rate at which this user receives responses, and + this request exceeds that rate. (The server may use any convenient method + to identify users and their request rates). The server may include a + "Retry-After" header to indicate how long the user should wait before + retrying. + """ + + code = 429 + description = "This user has exceeded an allotted request count. Try again later." + + +class RequestHeaderFieldsTooLarge(HTTPException): + """*431* `Request Header Fields Too Large` + + The server refuses to process the request because the header fields are too + large. One or more individual fields may be too large, or the set of all + headers is too large. + """ + + code = 431 + description = "One or more header fields exceeds the maximum size." + + +class UnavailableForLegalReasons(HTTPException): + """*451* `Unavailable For Legal Reasons` + + This status code indicates that the server is denying access to the + resource as a consequence of a legal demand. + """ + + code = 451 + description = "Unavailable for legal reasons." + + +class InternalServerError(HTTPException): + """*500* `Internal Server Error` + + Raise if an internal server error occurred. This is a good fallback if an + unknown error occurred in the dispatcher. + """ + + code = 500 + description = ( + "The server encountered an internal error and was unable to" + " complete your request. Either the server is overloaded or" + " there is an error in the application." + ) + + +class NotImplemented(HTTPException): + """*501* `Not Implemented` + + Raise if the application does not support the action requested by the + browser. + """ + + code = 501 + description = "The server does not support the action requested by the browser." + + +class BadGateway(HTTPException): + """*502* `Bad Gateway` + + If you do proxying in your application you should return this status code + if you received an invalid response from the upstream server it accessed + in attempting to fulfill the request. + """ + + code = 502 + description = ( + "The proxy server received an invalid response from an upstream server." + ) + + +class ServiceUnavailable(HTTPException): + """*503* `Service Unavailable` + + Status code you should return if a service is temporarily unavailable. + """ + + code = 503 + description = ( + "The server is temporarily unable to service your request due" + " to maintenance downtime or capacity problems. Please try" + " again later." + ) + + +class GatewayTimeout(HTTPException): + """*504* `Gateway Timeout` + + Status code you should return if a connection to an upstream server + times out. + """ + + code = 504 + description = "The connection to an upstream server timed out." + + +class HTTPVersionNotSupported(HTTPException): + """*505* `HTTP Version Not Supported` + + The server does not support the HTTP protocol version used in the request. + """ + + code = 505 + description = ( + "The server does not support the HTTP protocol version used in the request." + ) + + +default_exceptions = {} +__all__ = ["HTTPException"] + + +def _find_exceptions(): + for _name, obj in iteritems(globals()): + try: + is_http_exception = issubclass(obj, HTTPException) + except TypeError: + is_http_exception = False + if not is_http_exception or obj.code is None: + continue + __all__.append(obj.__name__) + old_obj = default_exceptions.get(obj.code, None) + if old_obj is not None and issubclass(obj, old_obj): + continue + default_exceptions[obj.code] = obj + + +_find_exceptions() +del _find_exceptions + + +class Aborter(object): + """When passed a dict of code -> exception items it can be used as + callable that raises exceptions. If the first argument to the + callable is an integer it will be looked up in the mapping, if it's + a WSGI application it will be raised in a proxy exception. + + The rest of the arguments are forwarded to the exception constructor. + """ + + def __init__(self, mapping=None, extra=None): + if mapping is None: + mapping = default_exceptions + self.mapping = dict(mapping) + if extra is not None: + self.mapping.update(extra) + + def __call__(self, code, *args, **kwargs): + if not args and not kwargs and not isinstance(code, integer_types): + raise HTTPException(response=code) + if code not in self.mapping: + raise LookupError("no exception for %r" % code) + raise self.mapping[code](*args, **kwargs) + + +def abort(status, *args, **kwargs): + """Raises an :py:exc:`HTTPException` for the given status code or WSGI + application:: + + abort(404) # 404 Not Found + abort(Response('Hello World')) + + Can be passed a WSGI application or a status code. If a status code is + given it's looked up in the list of exceptions and will raise that + exception, if passed a WSGI application it will wrap it in a proxy WSGI + exception and raise that:: + + abort(404) + abort(Response('Hello World')) + + """ + return _aborter(status, *args, **kwargs) + + +_aborter = Aborter() + + +#: An exception that is used to signal both a :exc:`KeyError` and a +#: :exc:`BadRequest`. Used by many of the datastructures. +BadRequestKeyError = BadRequest.wrap(KeyError) + +# imported here because of circular dependencies of werkzeug.utils +from .http import HTTP_STATUS_CODES +from .utils import escape diff --git a/week-0/day-3/my_todo_app/venv/lib/python3.6/site-packages/werkzeug/filesystem.py b/week-0/day-3/my_todo_app/venv/lib/python3.6/site-packages/werkzeug/filesystem.py new file mode 100644 index 00000000..d016caea --- /dev/null +++ b/week-0/day-3/my_todo_app/venv/lib/python3.6/site-packages/werkzeug/filesystem.py @@ -0,0 +1,64 @@ +# -*- coding: utf-8 -*- +""" + werkzeug.filesystem + ~~~~~~~~~~~~~~~~~~~ + + Various utilities for the local filesystem. + + :copyright: 2007 Pallets + :license: BSD-3-Clause +""" +import codecs +import sys +import warnings + +# We do not trust traditional unixes. +has_likely_buggy_unicode_filesystem = ( + sys.platform.startswith("linux") or "bsd" in sys.platform +) + + +def _is_ascii_encoding(encoding): + """Given an encoding this figures out if the encoding is actually ASCII (which + is something we don't actually want in most cases). This is necessary + because ASCII comes under many names such as ANSI_X3.4-1968. + """ + if encoding is None: + return False + try: + return codecs.lookup(encoding).name == "ascii" + except LookupError: + return False + + +class BrokenFilesystemWarning(RuntimeWarning, UnicodeWarning): + """The warning used by Werkzeug to signal a broken filesystem. Will only be + used once per runtime.""" + + +_warned_about_filesystem_encoding = False + + +def get_filesystem_encoding(): + """Returns the filesystem encoding that should be used. Note that this is + different from the Python understanding of the filesystem encoding which + might be deeply flawed. Do not use this value against Python's unicode APIs + because it might be different. See :ref:`filesystem-encoding` for the exact + behavior. + + The concept of a filesystem encoding in generally is not something you + should rely on. As such if you ever need to use this function except for + writing wrapper code reconsider. + """ + global _warned_about_filesystem_encoding + rv = sys.getfilesystemencoding() + if has_likely_buggy_unicode_filesystem and not rv or _is_ascii_encoding(rv): + if not _warned_about_filesystem_encoding: + warnings.warn( + "Detected a misconfigured UNIX filesystem: Will use" + " UTF-8 as filesystem encoding instead of {0!r}".format(rv), + BrokenFilesystemWarning, + ) + _warned_about_filesystem_encoding = True + return "utf-8" + return rv diff --git a/week-0/day-3/my_todo_app/venv/lib/python3.6/site-packages/werkzeug/formparser.py b/week-0/day-3/my_todo_app/venv/lib/python3.6/site-packages/werkzeug/formparser.py new file mode 100644 index 00000000..0ddc5c8f --- /dev/null +++ b/week-0/day-3/my_todo_app/venv/lib/python3.6/site-packages/werkzeug/formparser.py @@ -0,0 +1,586 @@ +# -*- coding: utf-8 -*- +""" + werkzeug.formparser + ~~~~~~~~~~~~~~~~~~~ + + This module implements the form parsing. It supports url-encoded forms + as well as non-nested multipart uploads. + + :copyright: 2007 Pallets + :license: BSD-3-Clause +""" +import codecs +import re +from functools import update_wrapper +from itertools import chain +from itertools import repeat +from itertools import tee + +from ._compat import BytesIO +from ._compat import text_type +from ._compat import to_native +from .datastructures import FileStorage +from .datastructures import Headers +from .datastructures import MultiDict +from .http import parse_options_header +from .urls import url_decode_stream +from .wsgi import get_content_length +from .wsgi import get_input_stream +from .wsgi import make_line_iter + +# there are some platforms where SpooledTemporaryFile is not available. +# In that case we need to provide a fallback. +try: + from tempfile import SpooledTemporaryFile +except ImportError: + from tempfile import TemporaryFile + + SpooledTemporaryFile = None + + +#: an iterator that yields empty strings +_empty_string_iter = repeat("") + +#: a regular expression for multipart boundaries +_multipart_boundary_re = re.compile("^[ -~]{0,200}[!-~]$") + +#: supported http encodings that are also available in python we support +#: for multipart messages. +_supported_multipart_encodings = frozenset(["base64", "quoted-printable"]) + + +def default_stream_factory( + total_content_length, filename, content_type, content_length=None +): + """The stream factory that is used per default.""" + max_size = 1024 * 500 + if SpooledTemporaryFile is not None: + return SpooledTemporaryFile(max_size=max_size, mode="wb+") + if total_content_length is None or total_content_length > max_size: + return TemporaryFile("wb+") + return BytesIO() + + +def parse_form_data( + environ, + stream_factory=None, + charset="utf-8", + errors="replace", + max_form_memory_size=None, + max_content_length=None, + cls=None, + silent=True, +): + """Parse the form data in the environ and return it as tuple in the form + ``(stream, form, files)``. You should only call this method if the + transport method is `POST`, `PUT`, or `PATCH`. + + If the mimetype of the data transmitted is `multipart/form-data` the + files multidict will be filled with `FileStorage` objects. If the + mimetype is unknown the input stream is wrapped and returned as first + argument, else the stream is empty. + + This is a shortcut for the common usage of :class:`FormDataParser`. + + Have a look at :ref:`dealing-with-request-data` for more details. + + .. versionadded:: 0.5 + The `max_form_memory_size`, `max_content_length` and + `cls` parameters were added. + + .. versionadded:: 0.5.1 + The optional `silent` flag was added. + + :param environ: the WSGI environment to be used for parsing. + :param stream_factory: An optional callable that returns a new read and + writeable file descriptor. This callable works + the same as :meth:`~BaseResponse._get_file_stream`. + :param charset: The character set for URL and url encoded form data. + :param errors: The encoding error behavior. + :param max_form_memory_size: the maximum number of bytes to be accepted for + in-memory stored form data. If the data + exceeds the value specified an + :exc:`~exceptions.RequestEntityTooLarge` + exception is raised. + :param max_content_length: If this is provided and the transmitted data + is longer than this value an + :exc:`~exceptions.RequestEntityTooLarge` + exception is raised. + :param cls: an optional dict class to use. If this is not specified + or `None` the default :class:`MultiDict` is used. + :param silent: If set to False parsing errors will not be caught. + :return: A tuple in the form ``(stream, form, files)``. + """ + return FormDataParser( + stream_factory, + charset, + errors, + max_form_memory_size, + max_content_length, + cls, + silent, + ).parse_from_environ(environ) + + +def exhaust_stream(f): + """Helper decorator for methods that exhausts the stream on return.""" + + def wrapper(self, stream, *args, **kwargs): + try: + return f(self, stream, *args, **kwargs) + finally: + exhaust = getattr(stream, "exhaust", None) + if exhaust is not None: + exhaust() + else: + while 1: + chunk = stream.read(1024 * 64) + if not chunk: + break + + return update_wrapper(wrapper, f) + + +class FormDataParser(object): + """This class implements parsing of form data for Werkzeug. By itself + it can parse multipart and url encoded form data. It can be subclassed + and extended but for most mimetypes it is a better idea to use the + untouched stream and expose it as separate attributes on a request + object. + + .. versionadded:: 0.8 + + :param stream_factory: An optional callable that returns a new read and + writeable file descriptor. This callable works + the same as :meth:`~BaseResponse._get_file_stream`. + :param charset: The character set for URL and url encoded form data. + :param errors: The encoding error behavior. + :param max_form_memory_size: the maximum number of bytes to be accepted for + in-memory stored form data. If the data + exceeds the value specified an + :exc:`~exceptions.RequestEntityTooLarge` + exception is raised. + :param max_content_length: If this is provided and the transmitted data + is longer than this value an + :exc:`~exceptions.RequestEntityTooLarge` + exception is raised. + :param cls: an optional dict class to use. If this is not specified + or `None` the default :class:`MultiDict` is used. + :param silent: If set to False parsing errors will not be caught. + """ + + def __init__( + self, + stream_factory=None, + charset="utf-8", + errors="replace", + max_form_memory_size=None, + max_content_length=None, + cls=None, + silent=True, + ): + if stream_factory is None: + stream_factory = default_stream_factory + self.stream_factory = stream_factory + self.charset = charset + self.errors = errors + self.max_form_memory_size = max_form_memory_size + self.max_content_length = max_content_length + if cls is None: + cls = MultiDict + self.cls = cls + self.silent = silent + + def get_parse_func(self, mimetype, options): + return self.parse_functions.get(mimetype) + + def parse_from_environ(self, environ): + """Parses the information from the environment as form data. + + :param environ: the WSGI environment to be used for parsing. + :return: A tuple in the form ``(stream, form, files)``. + """ + content_type = environ.get("CONTENT_TYPE", "") + content_length = get_content_length(environ) + mimetype, options = parse_options_header(content_type) + return self.parse(get_input_stream(environ), mimetype, content_length, options) + + def parse(self, stream, mimetype, content_length, options=None): + """Parses the information from the given stream, mimetype, + content length and mimetype parameters. + + :param stream: an input stream + :param mimetype: the mimetype of the data + :param content_length: the content length of the incoming data + :param options: optional mimetype parameters (used for + the multipart boundary for instance) + :return: A tuple in the form ``(stream, form, files)``. + """ + if ( + self.max_content_length is not None + and content_length is not None + and content_length > self.max_content_length + ): + raise exceptions.RequestEntityTooLarge() + if options is None: + options = {} + + parse_func = self.get_parse_func(mimetype, options) + if parse_func is not None: + try: + return parse_func(self, stream, mimetype, content_length, options) + except ValueError: + if not self.silent: + raise + + return stream, self.cls(), self.cls() + + @exhaust_stream + def _parse_multipart(self, stream, mimetype, content_length, options): + parser = MultiPartParser( + self.stream_factory, + self.charset, + self.errors, + max_form_memory_size=self.max_form_memory_size, + cls=self.cls, + ) + boundary = options.get("boundary") + if boundary is None: + raise ValueError("Missing boundary") + if isinstance(boundary, text_type): + boundary = boundary.encode("ascii") + form, files = parser.parse(stream, boundary, content_length) + return stream, form, files + + @exhaust_stream + def _parse_urlencoded(self, stream, mimetype, content_length, options): + if ( + self.max_form_memory_size is not None + and content_length is not None + and content_length > self.max_form_memory_size + ): + raise exceptions.RequestEntityTooLarge() + form = url_decode_stream(stream, self.charset, errors=self.errors, cls=self.cls) + return stream, form, self.cls() + + #: mapping of mimetypes to parsing functions + parse_functions = { + "multipart/form-data": _parse_multipart, + "application/x-www-form-urlencoded": _parse_urlencoded, + "application/x-url-encoded": _parse_urlencoded, + } + + +def is_valid_multipart_boundary(boundary): + """Checks if the string given is a valid multipart boundary.""" + return _multipart_boundary_re.match(boundary) is not None + + +def _line_parse(line): + """Removes line ending characters and returns a tuple (`stripped_line`, + `is_terminated`). + """ + if line[-2:] in ["\r\n", b"\r\n"]: + return line[:-2], True + elif line[-1:] in ["\r", "\n", b"\r", b"\n"]: + return line[:-1], True + return line, False + + +def parse_multipart_headers(iterable): + """Parses multipart headers from an iterable that yields lines (including + the trailing newline symbol). The iterable has to be newline terminated. + + The iterable will stop at the line where the headers ended so it can be + further consumed. + + :param iterable: iterable of strings that are newline terminated + """ + result = [] + for line in iterable: + line = to_native(line) + line, line_terminated = _line_parse(line) + if not line_terminated: + raise ValueError("unexpected end of line in multipart header") + if not line: + break + elif line[0] in " \t" and result: + key, value = result[-1] + result[-1] = (key, value + "\n " + line[1:]) + else: + parts = line.split(":", 1) + if len(parts) == 2: + result.append((parts[0].strip(), parts[1].strip())) + + # we link the list to the headers, no need to create a copy, the + # list was not shared anyways. + return Headers(result) + + +_begin_form = "begin_form" +_begin_file = "begin_file" +_cont = "cont" +_end = "end" + + +class MultiPartParser(object): + def __init__( + self, + stream_factory=None, + charset="utf-8", + errors="replace", + max_form_memory_size=None, + cls=None, + buffer_size=64 * 1024, + ): + self.charset = charset + self.errors = errors + self.max_form_memory_size = max_form_memory_size + self.stream_factory = ( + default_stream_factory if stream_factory is None else stream_factory + ) + self.cls = MultiDict if cls is None else cls + + # make sure the buffer size is divisible by four so that we can base64 + # decode chunk by chunk + assert buffer_size % 4 == 0, "buffer size has to be divisible by 4" + # also the buffer size has to be at least 1024 bytes long or long headers + # will freak out the system + assert buffer_size >= 1024, "buffer size has to be at least 1KB" + + self.buffer_size = buffer_size + + def _fix_ie_filename(self, filename): + """Internet Explorer 6 transmits the full file name if a file is + uploaded. This function strips the full path if it thinks the + filename is Windows-like absolute. + """ + if filename[1:3] == ":\\" or filename[:2] == "\\\\": + return filename.split("\\")[-1] + return filename + + def _find_terminator(self, iterator): + """The terminator might have some additional newlines before it. + There is at least one application that sends additional newlines + before headers (the python setuptools package). + """ + for line in iterator: + if not line: + break + line = line.strip() + if line: + return line + return b"" + + def fail(self, message): + raise ValueError(message) + + def get_part_encoding(self, headers): + transfer_encoding = headers.get("content-transfer-encoding") + if ( + transfer_encoding is not None + and transfer_encoding in _supported_multipart_encodings + ): + return transfer_encoding + + def get_part_charset(self, headers): + # Figure out input charset for current part + content_type = headers.get("content-type") + if content_type: + mimetype, ct_params = parse_options_header(content_type) + return ct_params.get("charset", self.charset) + return self.charset + + def start_file_streaming(self, filename, headers, total_content_length): + if isinstance(filename, bytes): + filename = filename.decode(self.charset, self.errors) + filename = self._fix_ie_filename(filename) + content_type = headers.get("content-type") + try: + content_length = int(headers["content-length"]) + except (KeyError, ValueError): + content_length = 0 + container = self.stream_factory( + total_content_length=total_content_length, + filename=filename, + content_type=content_type, + content_length=content_length, + ) + return filename, container + + def in_memory_threshold_reached(self, bytes): + raise exceptions.RequestEntityTooLarge() + + def validate_boundary(self, boundary): + if not boundary: + self.fail("Missing boundary") + if not is_valid_multipart_boundary(boundary): + self.fail("Invalid boundary: %s" % boundary) + if len(boundary) > self.buffer_size: # pragma: no cover + # this should never happen because we check for a minimum size + # of 1024 and boundaries may not be longer than 200. The only + # situation when this happens is for non debug builds where + # the assert is skipped. + self.fail("Boundary longer than buffer size") + + def parse_lines(self, file, boundary, content_length, cap_at_buffer=True): + """Generate parts of + ``('begin_form', (headers, name))`` + ``('begin_file', (headers, name, filename))`` + ``('cont', bytestring)`` + ``('end', None)`` + + Always obeys the grammar + parts = ( begin_form cont* end | + begin_file cont* end )* + """ + next_part = b"--" + boundary + last_part = next_part + b"--" + + iterator = chain( + make_line_iter( + file, + limit=content_length, + buffer_size=self.buffer_size, + cap_at_buffer=cap_at_buffer, + ), + _empty_string_iter, + ) + + terminator = self._find_terminator(iterator) + + if terminator == last_part: + return + elif terminator != next_part: + self.fail("Expected boundary at start of multipart data") + + while terminator != last_part: + headers = parse_multipart_headers(iterator) + + disposition = headers.get("content-disposition") + if disposition is None: + self.fail("Missing Content-Disposition header") + disposition, extra = parse_options_header(disposition) + transfer_encoding = self.get_part_encoding(headers) + name = extra.get("name") + filename = extra.get("filename") + + # if no content type is given we stream into memory. A list is + # used as a temporary container. + if filename is None: + yield _begin_form, (headers, name) + + # otherwise we parse the rest of the headers and ask the stream + # factory for something we can write in. + else: + yield _begin_file, (headers, name, filename) + + buf = b"" + for line in iterator: + if not line: + self.fail("unexpected end of stream") + + if line[:2] == b"--": + terminator = line.rstrip() + if terminator in (next_part, last_part): + break + + if transfer_encoding is not None: + if transfer_encoding == "base64": + transfer_encoding = "base64_codec" + try: + line = codecs.decode(line, transfer_encoding) + except Exception: + self.fail("could not decode transfer encoded chunk") + + # we have something in the buffer from the last iteration. + # this is usually a newline delimiter. + if buf: + yield _cont, buf + buf = b"" + + # If the line ends with windows CRLF we write everything except + # the last two bytes. In all other cases however we write + # everything except the last byte. If it was a newline, that's + # fine, otherwise it does not matter because we will write it + # the next iteration. this ensures we do not write the + # final newline into the stream. That way we do not have to + # truncate the stream. However we do have to make sure that + # if something else than a newline is in there we write it + # out. + if line[-2:] == b"\r\n": + buf = b"\r\n" + cutoff = -2 + else: + buf = line[-1:] + cutoff = -1 + yield _cont, line[:cutoff] + + else: # pragma: no cover + raise ValueError("unexpected end of part") + + # if we have a leftover in the buffer that is not a newline + # character we have to flush it, otherwise we will chop of + # certain values. + if buf not in (b"", b"\r", b"\n", b"\r\n"): + yield _cont, buf + + yield _end, None + + def parse_parts(self, file, boundary, content_length): + """Generate ``('file', (name, val))`` and + ``('form', (name, val))`` parts. + """ + in_memory = 0 + + for ellt, ell in self.parse_lines(file, boundary, content_length): + if ellt == _begin_file: + headers, name, filename = ell + is_file = True + guard_memory = False + filename, container = self.start_file_streaming( + filename, headers, content_length + ) + _write = container.write + + elif ellt == _begin_form: + headers, name = ell + is_file = False + container = [] + _write = container.append + guard_memory = self.max_form_memory_size is not None + + elif ellt == _cont: + _write(ell) + # if we write into memory and there is a memory size limit we + # count the number of bytes in memory and raise an exception if + # there is too much data in memory. + if guard_memory: + in_memory += len(ell) + if in_memory > self.max_form_memory_size: + self.in_memory_threshold_reached(in_memory) + + elif ellt == _end: + if is_file: + container.seek(0) + yield ( + "file", + (name, FileStorage(container, filename, name, headers=headers)), + ) + else: + part_charset = self.get_part_charset(headers) + yield ( + "form", + (name, b"".join(container).decode(part_charset, self.errors)), + ) + + def parse(self, file, boundary, content_length): + formstream, filestream = tee( + self.parse_parts(file, boundary, content_length), 2 + ) + form = (p[1] for p in formstream if p[0] == "form") + files = (p[1] for p in filestream if p[0] == "file") + return self.cls(form), self.cls(files) + + +from . import exceptions diff --git a/week-0/day-3/my_todo_app/venv/lib/python3.6/site-packages/werkzeug/http.py b/week-0/day-3/my_todo_app/venv/lib/python3.6/site-packages/werkzeug/http.py new file mode 100644 index 00000000..af320075 --- /dev/null +++ b/week-0/day-3/my_todo_app/venv/lib/python3.6/site-packages/werkzeug/http.py @@ -0,0 +1,1303 @@ +# -*- coding: utf-8 -*- +""" + werkzeug.http + ~~~~~~~~~~~~~ + + Werkzeug comes with a bunch of utilities that help Werkzeug to deal with + HTTP data. Most of the classes and functions provided by this module are + used by the wrappers, but they are useful on their own, too, especially if + the response and request objects are not used. + + This covers some of the more HTTP centric features of WSGI, some other + utilities such as cookie handling are documented in the `werkzeug.utils` + module. + + + :copyright: 2007 Pallets + :license: BSD-3-Clause +""" +import base64 +import re +import warnings +from datetime import datetime +from datetime import timedelta +from hashlib import md5 +from time import gmtime +from time import time + +from ._compat import integer_types +from ._compat import iteritems +from ._compat import PY2 +from ._compat import string_types +from ._compat import text_type +from ._compat import to_bytes +from ._compat import to_unicode +from ._compat import try_coerce_native +from ._internal import _cookie_parse_impl +from ._internal import _cookie_quote +from ._internal import _make_cookie_domain + +try: + from email.utils import parsedate_tz +except ImportError: + from email.Utils import parsedate_tz + +try: + from urllib.request import parse_http_list as _parse_list_header + from urllib.parse import unquote_to_bytes as _unquote +except ImportError: + from urllib2 import parse_http_list as _parse_list_header + from urllib2 import unquote as _unquote + +_cookie_charset = "latin1" +_basic_auth_charset = "utf-8" +# for explanation of "media-range", etc. see Sections 5.3.{1,2} of RFC 7231 +_accept_re = re.compile( + r""" + ( # media-range capturing-parenthesis + [^\s;,]+ # type/subtype + (?:[ \t]*;[ \t]* # ";" + (?: # parameter non-capturing-parenthesis + [^\s;,q][^\s;,]* # token that doesn't start with "q" + | # or + q[^\s;,=][^\s;,]* # token that is more than just "q" + ) + )* # zero or more parameters + ) # end of media-range + (?:[ \t]*;[ \t]*q= # weight is a "q" parameter + (\d*(?:\.\d+)?) # qvalue capturing-parentheses + [^,]* # "extension" accept params: who cares? + )? # accept params are optional + """, + re.VERBOSE, +) +_token_chars = frozenset( + "!#$%&'*+-.0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ^_`abcdefghijklmnopqrstuvwxyz|~" +) +_etag_re = re.compile(r'([Ww]/)?(?:"(.*?)"|(.*?))(?:\s*,\s*|$)') +_unsafe_header_chars = set('()<>@,;:"/[]?={} \t') +_option_header_piece_re = re.compile( + r""" + ;\s*,?\s* # newlines were replaced with commas + (?P + "[^"\\]*(?:\\.[^"\\]*)*" # quoted string + | + [^\s;,=*]+ # token + ) + (?:\*(?P\d+))? # *1, optional continuation index + \s* + (?: # optionally followed by =value + (?: # equals sign, possibly with encoding + \*\s*=\s* # * indicates extended notation + (?: # optional encoding + (?P[^\s]+?) + '(?P[^\s]*?)' + )? + | + =\s* # basic notation + ) + (?P + "[^"\\]*(?:\\.[^"\\]*)*" # quoted string + | + [^;,]+ # token + )? + )? + \s* + """, + flags=re.VERBOSE, +) +_option_header_start_mime_type = re.compile(r",\s*([^;,\s]+)([;,]\s*.+)?") + +_entity_headers = frozenset( + [ + "allow", + "content-encoding", + "content-language", + "content-length", + "content-location", + "content-md5", + "content-range", + "content-type", + "expires", + "last-modified", + ] +) +_hop_by_hop_headers = frozenset( + [ + "connection", + "keep-alive", + "proxy-authenticate", + "proxy-authorization", + "te", + "trailer", + "transfer-encoding", + "upgrade", + ] +) + + +HTTP_STATUS_CODES = { + 100: "Continue", + 101: "Switching Protocols", + 102: "Processing", + 200: "OK", + 201: "Created", + 202: "Accepted", + 203: "Non Authoritative Information", + 204: "No Content", + 205: "Reset Content", + 206: "Partial Content", + 207: "Multi Status", + 226: "IM Used", # see RFC 3229 + 300: "Multiple Choices", + 301: "Moved Permanently", + 302: "Found", + 303: "See Other", + 304: "Not Modified", + 305: "Use Proxy", + 307: "Temporary Redirect", + 308: "Permanent Redirect", + 400: "Bad Request", + 401: "Unauthorized", + 402: "Payment Required", # unused + 403: "Forbidden", + 404: "Not Found", + 405: "Method Not Allowed", + 406: "Not Acceptable", + 407: "Proxy Authentication Required", + 408: "Request Timeout", + 409: "Conflict", + 410: "Gone", + 411: "Length Required", + 412: "Precondition Failed", + 413: "Request Entity Too Large", + 414: "Request URI Too Long", + 415: "Unsupported Media Type", + 416: "Requested Range Not Satisfiable", + 417: "Expectation Failed", + 418: "I'm a teapot", # see RFC 2324 + 421: "Misdirected Request", # see RFC 7540 + 422: "Unprocessable Entity", + 423: "Locked", + 424: "Failed Dependency", + 426: "Upgrade Required", + 428: "Precondition Required", # see RFC 6585 + 429: "Too Many Requests", + 431: "Request Header Fields Too Large", + 449: "Retry With", # proprietary MS extension + 451: "Unavailable For Legal Reasons", + 500: "Internal Server Error", + 501: "Not Implemented", + 502: "Bad Gateway", + 503: "Service Unavailable", + 504: "Gateway Timeout", + 505: "HTTP Version Not Supported", + 507: "Insufficient Storage", + 510: "Not Extended", +} + + +def wsgi_to_bytes(data): + """coerce wsgi unicode represented bytes to real ones""" + if isinstance(data, bytes): + return data + return data.encode("latin1") # XXX: utf8 fallback? + + +def bytes_to_wsgi(data): + assert isinstance(data, bytes), "data must be bytes" + if isinstance(data, str): + return data + else: + return data.decode("latin1") + + +def quote_header_value(value, extra_chars="", allow_token=True): + """Quote a header value if necessary. + + .. versionadded:: 0.5 + + :param value: the value to quote. + :param extra_chars: a list of extra characters to skip quoting. + :param allow_token: if this is enabled token values are returned + unchanged. + """ + if isinstance(value, bytes): + value = bytes_to_wsgi(value) + value = str(value) + if allow_token: + token_chars = _token_chars | set(extra_chars) + if set(value).issubset(token_chars): + return value + return '"%s"' % value.replace("\\", "\\\\").replace('"', '\\"') + + +def unquote_header_value(value, is_filename=False): + r"""Unquotes a header value. (Reversal of :func:`quote_header_value`). + This does not use the real unquoting but what browsers are actually + using for quoting. + + .. versionadded:: 0.5 + + :param value: the header value to unquote. + """ + if value and value[0] == value[-1] == '"': + # this is not the real unquoting, but fixing this so that the + # RFC is met will result in bugs with internet explorer and + # probably some other browsers as well. IE for example is + # uploading files with "C:\foo\bar.txt" as filename + value = value[1:-1] + + # if this is a filename and the starting characters look like + # a UNC path, then just return the value without quotes. Using the + # replace sequence below on a UNC path has the effect of turning + # the leading double slash into a single slash and then + # _fix_ie_filename() doesn't work correctly. See #458. + if not is_filename or value[:2] != "\\\\": + return value.replace("\\\\", "\\").replace('\\"', '"') + return value + + +def dump_options_header(header, options): + """The reverse function to :func:`parse_options_header`. + + :param header: the header to dump + :param options: a dict of options to append. + """ + segments = [] + if header is not None: + segments.append(header) + for key, value in iteritems(options): + if value is None: + segments.append(key) + else: + segments.append("%s=%s" % (key, quote_header_value(value))) + return "; ".join(segments) + + +def dump_header(iterable, allow_token=True): + """Dump an HTTP header again. This is the reversal of + :func:`parse_list_header`, :func:`parse_set_header` and + :func:`parse_dict_header`. This also quotes strings that include an + equals sign unless you pass it as dict of key, value pairs. + + >>> dump_header({'foo': 'bar baz'}) + 'foo="bar baz"' + >>> dump_header(('foo', 'bar baz')) + 'foo, "bar baz"' + + :param iterable: the iterable or dict of values to quote. + :param allow_token: if set to `False` tokens as values are disallowed. + See :func:`quote_header_value` for more details. + """ + if isinstance(iterable, dict): + items = [] + for key, value in iteritems(iterable): + if value is None: + items.append(key) + else: + items.append( + "%s=%s" % (key, quote_header_value(value, allow_token=allow_token)) + ) + else: + items = [quote_header_value(x, allow_token=allow_token) for x in iterable] + return ", ".join(items) + + +def parse_list_header(value): + """Parse lists as described by RFC 2068 Section 2. + + In particular, parse comma-separated lists where the elements of + the list may include quoted-strings. A quoted-string could + contain a comma. A non-quoted string could have quotes in the + middle. Quotes are removed automatically after parsing. + + It basically works like :func:`parse_set_header` just that items + may appear multiple times and case sensitivity is preserved. + + The return value is a standard :class:`list`: + + >>> parse_list_header('token, "quoted value"') + ['token', 'quoted value'] + + To create a header from the :class:`list` again, use the + :func:`dump_header` function. + + :param value: a string with a list header. + :return: :class:`list` + """ + result = [] + for item in _parse_list_header(value): + if item[:1] == item[-1:] == '"': + item = unquote_header_value(item[1:-1]) + result.append(item) + return result + + +def parse_dict_header(value, cls=dict): + """Parse lists of key, value pairs as described by RFC 2068 Section 2 and + convert them into a python dict (or any other mapping object created from + the type with a dict like interface provided by the `cls` argument): + + >>> d = parse_dict_header('foo="is a fish", bar="as well"') + >>> type(d) is dict + True + >>> sorted(d.items()) + [('bar', 'as well'), ('foo', 'is a fish')] + + If there is no value for a key it will be `None`: + + >>> parse_dict_header('key_without_value') + {'key_without_value': None} + + To create a header from the :class:`dict` again, use the + :func:`dump_header` function. + + .. versionchanged:: 0.9 + Added support for `cls` argument. + + :param value: a string with a dict header. + :param cls: callable to use for storage of parsed results. + :return: an instance of `cls` + """ + result = cls() + if not isinstance(value, text_type): + # XXX: validate + value = bytes_to_wsgi(value) + for item in _parse_list_header(value): + if "=" not in item: + result[item] = None + continue + name, value = item.split("=", 1) + if value[:1] == value[-1:] == '"': + value = unquote_header_value(value[1:-1]) + result[name] = value + return result + + +def parse_options_header(value, multiple=False): + """Parse a ``Content-Type`` like header into a tuple with the content + type and the options: + + >>> parse_options_header('text/html; charset=utf8') + ('text/html', {'charset': 'utf8'}) + + This should not be used to parse ``Cache-Control`` like headers that use + a slightly different format. For these headers use the + :func:`parse_dict_header` function. + + .. versionchanged:: 0.15 + :rfc:`2231` parameter continuations are handled. + + .. versionadded:: 0.5 + + :param value: the header to parse. + :param multiple: Whether try to parse and return multiple MIME types + :return: (mimetype, options) or (mimetype, options, mimetype, options, …) + if multiple=True + """ + if not value: + return "", {} + + result = [] + + value = "," + value.replace("\n", ",") + while value: + match = _option_header_start_mime_type.match(value) + if not match: + break + result.append(match.group(1)) # mimetype + options = {} + # Parse options + rest = match.group(2) + continued_encoding = None + while rest: + optmatch = _option_header_piece_re.match(rest) + if not optmatch: + break + option, count, encoding, language, option_value = optmatch.groups() + # Continuations don't have to supply the encoding after the + # first line. If we're in a continuation, track the current + # encoding to use for subsequent lines. Reset it when the + # continuation ends. + if not count: + continued_encoding = None + else: + if not encoding: + encoding = continued_encoding + continued_encoding = encoding + option = unquote_header_value(option) + if option_value is not None: + option_value = unquote_header_value(option_value, option == "filename") + if encoding is not None: + option_value = _unquote(option_value).decode(encoding) + if count: + # Continuations append to the existing value. For + # simplicity, this ignores the possibility of + # out-of-order indices, which shouldn't happen anyway. + options[option] = options.get(option, "") + option_value + else: + options[option] = option_value + rest = rest[optmatch.end() :] + result.append(options) + if multiple is False: + return tuple(result) + value = rest + + return tuple(result) if result else ("", {}) + + +def parse_accept_header(value, cls=None): + """Parses an HTTP Accept-* header. This does not implement a complete + valid algorithm but one that supports at least value and quality + extraction. + + Returns a new :class:`Accept` object (basically a list of ``(value, quality)`` + tuples sorted by the quality with some additional accessor methods). + + The second parameter can be a subclass of :class:`Accept` that is created + with the parsed values and returned. + + :param value: the accept header string to be parsed. + :param cls: the wrapper class for the return value (can be + :class:`Accept` or a subclass thereof) + :return: an instance of `cls`. + """ + if cls is None: + cls = Accept + + if not value: + return cls(None) + + result = [] + for match in _accept_re.finditer(value): + quality = match.group(2) + if not quality: + quality = 1 + else: + quality = max(min(float(quality), 1), 0) + result.append((match.group(1), quality)) + return cls(result) + + +def parse_cache_control_header(value, on_update=None, cls=None): + """Parse a cache control header. The RFC differs between response and + request cache control, this method does not. It's your responsibility + to not use the wrong control statements. + + .. versionadded:: 0.5 + The `cls` was added. If not specified an immutable + :class:`~werkzeug.datastructures.RequestCacheControl` is returned. + + :param value: a cache control header to be parsed. + :param on_update: an optional callable that is called every time a value + on the :class:`~werkzeug.datastructures.CacheControl` + object is changed. + :param cls: the class for the returned object. By default + :class:`~werkzeug.datastructures.RequestCacheControl` is used. + :return: a `cls` object. + """ + if cls is None: + cls = RequestCacheControl + if not value: + return cls(None, on_update) + return cls(parse_dict_header(value), on_update) + + +def parse_set_header(value, on_update=None): + """Parse a set-like header and return a + :class:`~werkzeug.datastructures.HeaderSet` object: + + >>> hs = parse_set_header('token, "quoted value"') + + The return value is an object that treats the items case-insensitively + and keeps the order of the items: + + >>> 'TOKEN' in hs + True + >>> hs.index('quoted value') + 1 + >>> hs + HeaderSet(['token', 'quoted value']) + + To create a header from the :class:`HeaderSet` again, use the + :func:`dump_header` function. + + :param value: a set header to be parsed. + :param on_update: an optional callable that is called every time a + value on the :class:`~werkzeug.datastructures.HeaderSet` + object is changed. + :return: a :class:`~werkzeug.datastructures.HeaderSet` + """ + if not value: + return HeaderSet(None, on_update) + return HeaderSet(parse_list_header(value), on_update) + + +def parse_authorization_header(value): + """Parse an HTTP basic/digest authorization header transmitted by the web + browser. The return value is either `None` if the header was invalid or + not given, otherwise an :class:`~werkzeug.datastructures.Authorization` + object. + + :param value: the authorization header to parse. + :return: a :class:`~werkzeug.datastructures.Authorization` object or `None`. + """ + if not value: + return + value = wsgi_to_bytes(value) + try: + auth_type, auth_info = value.split(None, 1) + auth_type = auth_type.lower() + except ValueError: + return + if auth_type == b"basic": + try: + username, password = base64.b64decode(auth_info).split(b":", 1) + except Exception: + return + return Authorization( + "basic", + { + "username": to_unicode(username, _basic_auth_charset), + "password": to_unicode(password, _basic_auth_charset), + }, + ) + elif auth_type == b"digest": + auth_map = parse_dict_header(auth_info) + for key in "username", "realm", "nonce", "uri", "response": + if key not in auth_map: + return + if "qop" in auth_map: + if not auth_map.get("nc") or not auth_map.get("cnonce"): + return + return Authorization("digest", auth_map) + + +def parse_www_authenticate_header(value, on_update=None): + """Parse an HTTP WWW-Authenticate header into a + :class:`~werkzeug.datastructures.WWWAuthenticate` object. + + :param value: a WWW-Authenticate header to parse. + :param on_update: an optional callable that is called every time a value + on the :class:`~werkzeug.datastructures.WWWAuthenticate` + object is changed. + :return: a :class:`~werkzeug.datastructures.WWWAuthenticate` object. + """ + if not value: + return WWWAuthenticate(on_update=on_update) + try: + auth_type, auth_info = value.split(None, 1) + auth_type = auth_type.lower() + except (ValueError, AttributeError): + return WWWAuthenticate(value.strip().lower(), on_update=on_update) + return WWWAuthenticate(auth_type, parse_dict_header(auth_info), on_update) + + +def parse_if_range_header(value): + """Parses an if-range header which can be an etag or a date. Returns + a :class:`~werkzeug.datastructures.IfRange` object. + + .. versionadded:: 0.7 + """ + if not value: + return IfRange() + date = parse_date(value) + if date is not None: + return IfRange(date=date) + # drop weakness information + return IfRange(unquote_etag(value)[0]) + + +def parse_range_header(value, make_inclusive=True): + """Parses a range header into a :class:`~werkzeug.datastructures.Range` + object. If the header is missing or malformed `None` is returned. + `ranges` is a list of ``(start, stop)`` tuples where the ranges are + non-inclusive. + + .. versionadded:: 0.7 + """ + if not value or "=" not in value: + return None + + ranges = [] + last_end = 0 + units, rng = value.split("=", 1) + units = units.strip().lower() + + for item in rng.split(","): + item = item.strip() + if "-" not in item: + return None + if item.startswith("-"): + if last_end < 0: + return None + try: + begin = int(item) + except ValueError: + return None + end = None + last_end = -1 + elif "-" in item: + begin, end = item.split("-", 1) + begin = begin.strip() + end = end.strip() + if not begin.isdigit(): + return None + begin = int(begin) + if begin < last_end or last_end < 0: + return None + if end: + if not end.isdigit(): + return None + end = int(end) + 1 + if begin >= end: + return None + else: + end = None + last_end = end + ranges.append((begin, end)) + + return Range(units, ranges) + + +def parse_content_range_header(value, on_update=None): + """Parses a range header into a + :class:`~werkzeug.datastructures.ContentRange` object or `None` if + parsing is not possible. + + .. versionadded:: 0.7 + + :param value: a content range header to be parsed. + :param on_update: an optional callable that is called every time a value + on the :class:`~werkzeug.datastructures.ContentRange` + object is changed. + """ + if value is None: + return None + try: + units, rangedef = (value or "").strip().split(None, 1) + except ValueError: + return None + + if "/" not in rangedef: + return None + rng, length = rangedef.split("/", 1) + if length == "*": + length = None + elif length.isdigit(): + length = int(length) + else: + return None + + if rng == "*": + return ContentRange(units, None, None, length, on_update=on_update) + elif "-" not in rng: + return None + + start, stop = rng.split("-", 1) + try: + start = int(start) + stop = int(stop) + 1 + except ValueError: + return None + + if is_byte_range_valid(start, stop, length): + return ContentRange(units, start, stop, length, on_update=on_update) + + +def quote_etag(etag, weak=False): + """Quote an etag. + + :param etag: the etag to quote. + :param weak: set to `True` to tag it "weak". + """ + if '"' in etag: + raise ValueError("invalid etag") + etag = '"%s"' % etag + if weak: + etag = "W/" + etag + return etag + + +def unquote_etag(etag): + """Unquote a single etag: + + >>> unquote_etag('W/"bar"') + ('bar', True) + >>> unquote_etag('"bar"') + ('bar', False) + + :param etag: the etag identifier to unquote. + :return: a ``(etag, weak)`` tuple. + """ + if not etag: + return None, None + etag = etag.strip() + weak = False + if etag.startswith(("W/", "w/")): + weak = True + etag = etag[2:] + if etag[:1] == etag[-1:] == '"': + etag = etag[1:-1] + return etag, weak + + +def parse_etags(value): + """Parse an etag header. + + :param value: the tag header to parse + :return: an :class:`~werkzeug.datastructures.ETags` object. + """ + if not value: + return ETags() + strong = [] + weak = [] + end = len(value) + pos = 0 + while pos < end: + match = _etag_re.match(value, pos) + if match is None: + break + is_weak, quoted, raw = match.groups() + if raw == "*": + return ETags(star_tag=True) + elif quoted: + raw = quoted + if is_weak: + weak.append(raw) + else: + strong.append(raw) + pos = match.end() + return ETags(strong, weak) + + +def generate_etag(data): + """Generate an etag for some data.""" + return md5(data).hexdigest() + + +def parse_date(value): + """Parse one of the following date formats into a datetime object: + + .. sourcecode:: text + + Sun, 06 Nov 1994 08:49:37 GMT ; RFC 822, updated by RFC 1123 + Sunday, 06-Nov-94 08:49:37 GMT ; RFC 850, obsoleted by RFC 1036 + Sun Nov 6 08:49:37 1994 ; ANSI C's asctime() format + + If parsing fails the return value is `None`. + + :param value: a string with a supported date format. + :return: a :class:`datetime.datetime` object. + """ + if value: + t = parsedate_tz(value.strip()) + if t is not None: + try: + year = t[0] + # unfortunately that function does not tell us if two digit + # years were part of the string, or if they were prefixed + # with two zeroes. So what we do is to assume that 69-99 + # refer to 1900, and everything below to 2000 + if year >= 0 and year <= 68: + year += 2000 + elif year >= 69 and year <= 99: + year += 1900 + return datetime(*((year,) + t[1:7])) - timedelta(seconds=t[-1] or 0) + except (ValueError, OverflowError): + return None + + +def _dump_date(d, delim): + """Used for `http_date` and `cookie_date`.""" + if d is None: + d = gmtime() + elif isinstance(d, datetime): + d = d.utctimetuple() + elif isinstance(d, (integer_types, float)): + d = gmtime(d) + return "%s, %02d%s%s%s%s %02d:%02d:%02d GMT" % ( + ("Mon", "Tue", "Wed", "Thu", "Fri", "Sat", "Sun")[d.tm_wday], + d.tm_mday, + delim, + ( + "Jan", + "Feb", + "Mar", + "Apr", + "May", + "Jun", + "Jul", + "Aug", + "Sep", + "Oct", + "Nov", + "Dec", + )[d.tm_mon - 1], + delim, + str(d.tm_year), + d.tm_hour, + d.tm_min, + d.tm_sec, + ) + + +def cookie_date(expires=None): + """Formats the time to ensure compatibility with Netscape's cookie + standard. + + Accepts a floating point number expressed in seconds since the epoch in, a + datetime object or a timetuple. All times in UTC. The :func:`parse_date` + function can be used to parse such a date. + + Outputs a string in the format ``Wdy, DD-Mon-YYYY HH:MM:SS GMT``. + + :param expires: If provided that date is used, otherwise the current. + """ + return _dump_date(expires, "-") + + +def http_date(timestamp=None): + """Formats the time to match the RFC1123 date format. + + Accepts a floating point number expressed in seconds since the epoch in, a + datetime object or a timetuple. All times in UTC. The :func:`parse_date` + function can be used to parse such a date. + + Outputs a string in the format ``Wdy, DD Mon YYYY HH:MM:SS GMT``. + + :param timestamp: If provided that date is used, otherwise the current. + """ + return _dump_date(timestamp, " ") + + +def parse_age(value=None): + """Parses a base-10 integer count of seconds into a timedelta. + + If parsing fails, the return value is `None`. + + :param value: a string consisting of an integer represented in base-10 + :return: a :class:`datetime.timedelta` object or `None`. + """ + if not value: + return None + try: + seconds = int(value) + except ValueError: + return None + if seconds < 0: + return None + try: + return timedelta(seconds=seconds) + except OverflowError: + return None + + +def dump_age(age=None): + """Formats the duration as a base-10 integer. + + :param age: should be an integer number of seconds, + a :class:`datetime.timedelta` object, or, + if the age is unknown, `None` (default). + """ + if age is None: + return + if isinstance(age, timedelta): + # do the equivalent of Python 2.7's timedelta.total_seconds(), + # but disregarding fractional seconds + age = age.seconds + (age.days * 24 * 3600) + + age = int(age) + if age < 0: + raise ValueError("age cannot be negative") + + return str(age) + + +def is_resource_modified( + environ, etag=None, data=None, last_modified=None, ignore_if_range=True +): + """Convenience method for conditional requests. + + :param environ: the WSGI environment of the request to be checked. + :param etag: the etag for the response for comparison. + :param data: or alternatively the data of the response to automatically + generate an etag using :func:`generate_etag`. + :param last_modified: an optional date of the last modification. + :param ignore_if_range: If `False`, `If-Range` header will be taken into + account. + :return: `True` if the resource was modified, otherwise `False`. + """ + if etag is None and data is not None: + etag = generate_etag(data) + elif data is not None: + raise TypeError("both data and etag given") + if environ["REQUEST_METHOD"] not in ("GET", "HEAD"): + return False + + unmodified = False + if isinstance(last_modified, string_types): + last_modified = parse_date(last_modified) + + # ensure that microsecond is zero because the HTTP spec does not transmit + # that either and we might have some false positives. See issue #39 + if last_modified is not None: + last_modified = last_modified.replace(microsecond=0) + + if_range = None + if not ignore_if_range and "HTTP_RANGE" in environ: + # https://tools.ietf.org/html/rfc7233#section-3.2 + # A server MUST ignore an If-Range header field received in a request + # that does not contain a Range header field. + if_range = parse_if_range_header(environ.get("HTTP_IF_RANGE")) + + if if_range is not None and if_range.date is not None: + modified_since = if_range.date + else: + modified_since = parse_date(environ.get("HTTP_IF_MODIFIED_SINCE")) + + if modified_since and last_modified and last_modified <= modified_since: + unmodified = True + + if etag: + etag, _ = unquote_etag(etag) + if if_range is not None and if_range.etag is not None: + unmodified = parse_etags(if_range.etag).contains(etag) + else: + if_none_match = parse_etags(environ.get("HTTP_IF_NONE_MATCH")) + if if_none_match: + # https://tools.ietf.org/html/rfc7232#section-3.2 + # "A recipient MUST use the weak comparison function when comparing + # entity-tags for If-None-Match" + unmodified = if_none_match.contains_weak(etag) + + # https://tools.ietf.org/html/rfc7232#section-3.1 + # "Origin server MUST use the strong comparison function when + # comparing entity-tags for If-Match" + if_match = parse_etags(environ.get("HTTP_IF_MATCH")) + if if_match: + unmodified = not if_match.is_strong(etag) + + return not unmodified + + +def remove_entity_headers(headers, allowed=("expires", "content-location")): + """Remove all entity headers from a list or :class:`Headers` object. This + operation works in-place. `Expires` and `Content-Location` headers are + by default not removed. The reason for this is :rfc:`2616` section + 10.3.5 which specifies some entity headers that should be sent. + + .. versionchanged:: 0.5 + added `allowed` parameter. + + :param headers: a list or :class:`Headers` object. + :param allowed: a list of headers that should still be allowed even though + they are entity headers. + """ + allowed = set(x.lower() for x in allowed) + headers[:] = [ + (key, value) + for key, value in headers + if not is_entity_header(key) or key.lower() in allowed + ] + + +def remove_hop_by_hop_headers(headers): + """Remove all HTTP/1.1 "Hop-by-Hop" headers from a list or + :class:`Headers` object. This operation works in-place. + + .. versionadded:: 0.5 + + :param headers: a list or :class:`Headers` object. + """ + headers[:] = [ + (key, value) for key, value in headers if not is_hop_by_hop_header(key) + ] + + +def is_entity_header(header): + """Check if a header is an entity header. + + .. versionadded:: 0.5 + + :param header: the header to test. + :return: `True` if it's an entity header, `False` otherwise. + """ + return header.lower() in _entity_headers + + +def is_hop_by_hop_header(header): + """Check if a header is an HTTP/1.1 "Hop-by-Hop" header. + + .. versionadded:: 0.5 + + :param header: the header to test. + :return: `True` if it's an HTTP/1.1 "Hop-by-Hop" header, `False` otherwise. + """ + return header.lower() in _hop_by_hop_headers + + +def parse_cookie(header, charset="utf-8", errors="replace", cls=None): + """Parse a cookie. Either from a string or WSGI environ. + + Per default encoding errors are ignored. If you want a different behavior + you can set `errors` to ``'replace'`` or ``'strict'``. In strict mode a + :exc:`HTTPUnicodeError` is raised. + + .. versionchanged:: 0.5 + This function now returns a :class:`TypeConversionDict` instead of a + regular dict. The `cls` parameter was added. + + :param header: the header to be used to parse the cookie. Alternatively + this can be a WSGI environment. + :param charset: the charset for the cookie values. + :param errors: the error behavior for the charset decoding. + :param cls: an optional dict class to use. If this is not specified + or `None` the default :class:`TypeConversionDict` is + used. + """ + if isinstance(header, dict): + header = header.get("HTTP_COOKIE", "") + elif header is None: + header = "" + + # If the value is an unicode string it's mangled through latin1. This + # is done because on PEP 3333 on Python 3 all headers are assumed latin1 + # which however is incorrect for cookies, which are sent in page encoding. + # As a result we + if isinstance(header, text_type): + header = header.encode("latin1", "replace") + + if cls is None: + cls = TypeConversionDict + + def _parse_pairs(): + for key, val in _cookie_parse_impl(header): + key = to_unicode(key, charset, errors, allow_none_charset=True) + if not key: + continue + val = to_unicode(val, charset, errors, allow_none_charset=True) + yield try_coerce_native(key), val + + return cls(_parse_pairs()) + + +def dump_cookie( + key, + value="", + max_age=None, + expires=None, + path="/", + domain=None, + secure=False, + httponly=False, + charset="utf-8", + sync_expires=True, + max_size=4093, + samesite=None, +): + """Creates a new Set-Cookie header without the ``Set-Cookie`` prefix + The parameters are the same as in the cookie Morsel object in the + Python standard library but it accepts unicode data, too. + + On Python 3 the return value of this function will be a unicode + string, on Python 2 it will be a native string. In both cases the + return value is usually restricted to ascii as the vast majority of + values are properly escaped, but that is no guarantee. If a unicode + string is returned it's tunneled through latin1 as required by + PEP 3333. + + The return value is not ASCII safe if the key contains unicode + characters. This is technically against the specification but + happens in the wild. It's strongly recommended to not use + non-ASCII values for the keys. + + :param max_age: should be a number of seconds, or `None` (default) if + the cookie should last only as long as the client's + browser session. Additionally `timedelta` objects + are accepted, too. + :param expires: should be a `datetime` object or unix timestamp. + :param path: limits the cookie to a given path, per default it will + span the whole domain. + :param domain: Use this if you want to set a cross-domain cookie. For + example, ``domain=".example.com"`` will set a cookie + that is readable by the domain ``www.example.com``, + ``foo.example.com`` etc. Otherwise, a cookie will only + be readable by the domain that set it. + :param secure: The cookie will only be available via HTTPS + :param httponly: disallow JavaScript to access the cookie. This is an + extension to the cookie standard and probably not + supported by all browsers. + :param charset: the encoding for unicode values. + :param sync_expires: automatically set expires if max_age is defined + but expires not. + :param max_size: Warn if the final header value exceeds this size. The + default, 4093, should be safely `supported by most browsers + `_. Set to 0 to disable this check. + :param samesite: Limits the scope of the cookie such that it will only + be attached to requests if those requests are "same-site". + + .. _`cookie`: http://browsercookielimits.squawky.net/ + """ + key = to_bytes(key, charset) + value = to_bytes(value, charset) + + if path is not None: + path = iri_to_uri(path, charset) + domain = _make_cookie_domain(domain) + if isinstance(max_age, timedelta): + max_age = (max_age.days * 60 * 60 * 24) + max_age.seconds + if expires is not None: + if not isinstance(expires, string_types): + expires = cookie_date(expires) + elif max_age is not None and sync_expires: + expires = to_bytes(cookie_date(time() + max_age)) + + samesite = samesite.title() if samesite else None + if samesite not in ("Strict", "Lax", None): + raise ValueError("invalid SameSite value; must be 'Strict', 'Lax' or None") + + buf = [key + b"=" + _cookie_quote(value)] + + # XXX: In theory all of these parameters that are not marked with `None` + # should be quoted. Because stdlib did not quote it before I did not + # want to introduce quoting there now. + for k, v, q in ( + (b"Domain", domain, True), + (b"Expires", expires, False), + (b"Max-Age", max_age, False), + (b"Secure", secure, None), + (b"HttpOnly", httponly, None), + (b"Path", path, False), + (b"SameSite", samesite, False), + ): + if q is None: + if v: + buf.append(k) + continue + + if v is None: + continue + + tmp = bytearray(k) + if not isinstance(v, (bytes, bytearray)): + v = to_bytes(text_type(v), charset) + if q: + v = _cookie_quote(v) + tmp += b"=" + v + buf.append(bytes(tmp)) + + # The return value will be an incorrectly encoded latin1 header on + # Python 3 for consistency with the headers object and a bytestring + # on Python 2 because that's how the API makes more sense. + rv = b"; ".join(buf) + if not PY2: + rv = rv.decode("latin1") + + # Warn if the final value of the cookie is less than the limit. If the + # cookie is too large, then it may be silently ignored, which can be quite + # hard to debug. + cookie_size = len(rv) + + if max_size and cookie_size > max_size: + value_size = len(value) + warnings.warn( + 'The "{key}" cookie is too large: the value was {value_size} bytes' + " but the header required {extra_size} extra bytes. The final size" + " was {cookie_size} bytes but the limit is {max_size} bytes." + " Browsers may silently ignore cookies larger than this.".format( + key=key, + value_size=value_size, + extra_size=cookie_size - value_size, + cookie_size=cookie_size, + max_size=max_size, + ), + stacklevel=2, + ) + + return rv + + +def is_byte_range_valid(start, stop, length): + """Checks if a given byte content range is valid for the given length. + + .. versionadded:: 0.7 + """ + if (start is None) != (stop is None): + return False + elif start is None: + return length is None or length >= 0 + elif length is None: + return 0 <= start < stop + elif start >= stop: + return False + return 0 <= start < length + + +# circular dependency fun +from .datastructures import Accept +from .datastructures import Authorization +from .datastructures import ContentRange +from .datastructures import ETags +from .datastructures import HeaderSet +from .datastructures import IfRange +from .datastructures import Range +from .datastructures import RequestCacheControl +from .datastructures import TypeConversionDict +from .datastructures import WWWAuthenticate +from .urls import iri_to_uri + +# DEPRECATED +from .datastructures import CharsetAccept as _CharsetAccept +from .datastructures import Headers as _Headers +from .datastructures import LanguageAccept as _LanguageAccept +from .datastructures import MIMEAccept as _MIMEAccept + + +class MIMEAccept(_MIMEAccept): + def __init__(self, *args, **kwargs): + warnings.warn( + "'werkzeug.http.MIMEAccept' has moved to 'werkzeug" + ".datastructures.MIMEAccept' as of version 0.5. This old" + " import will be removed in version 1.0.", + DeprecationWarning, + stacklevel=2, + ) + super(MIMEAccept, self).__init__(*args, **kwargs) + + +class CharsetAccept(_CharsetAccept): + def __init__(self, *args, **kwargs): + warnings.warn( + "'werkzeug.http.CharsetAccept' has moved to 'werkzeug" + ".datastructures.CharsetAccept' as of version 0.5. This old" + " import will be removed in version 1.0.", + DeprecationWarning, + stacklevel=2, + ) + super(CharsetAccept, self).__init__(*args, **kwargs) + + +class LanguageAccept(_LanguageAccept): + def __init__(self, *args, **kwargs): + warnings.warn( + "'werkzeug.http.LanguageAccept' has moved to 'werkzeug" + ".datastructures.LanguageAccept' as of version 0.5. This" + " old import will be removed in version 1.0.", + DeprecationWarning, + stacklevel=2, + ) + super(LanguageAccept, self).__init__(*args, **kwargs) + + +class Headers(_Headers): + def __init__(self, *args, **kwargs): + warnings.warn( + "'werkzeug.http.Headers' has moved to 'werkzeug" + ".datastructures.Headers' as of version 0.5. This old" + " import will be removed in version 1.0.", + DeprecationWarning, + stacklevel=2, + ) + super(Headers, self).__init__(*args, **kwargs) diff --git a/week-0/day-3/my_todo_app/venv/lib/python3.6/site-packages/werkzeug/local.py b/week-0/day-3/my_todo_app/venv/lib/python3.6/site-packages/werkzeug/local.py new file mode 100644 index 00000000..9a6088cc --- /dev/null +++ b/week-0/day-3/my_todo_app/venv/lib/python3.6/site-packages/werkzeug/local.py @@ -0,0 +1,421 @@ +# -*- coding: utf-8 -*- +""" + werkzeug.local + ~~~~~~~~~~~~~~ + + This module implements context-local objects. + + :copyright: 2007 Pallets + :license: BSD-3-Clause +""" +import copy +from functools import update_wrapper + +from ._compat import implements_bool +from ._compat import PY2 +from .wsgi import ClosingIterator + +# since each thread has its own greenlet we can just use those as identifiers +# for the context. If greenlets are not available we fall back to the +# current thread ident depending on where it is. +try: + from greenlet import getcurrent as get_ident +except ImportError: + try: + from thread import get_ident + except ImportError: + from _thread import get_ident + + +def release_local(local): + """Releases the contents of the local for the current context. + This makes it possible to use locals without a manager. + + Example:: + + >>> loc = Local() + >>> loc.foo = 42 + >>> release_local(loc) + >>> hasattr(loc, 'foo') + False + + With this function one can release :class:`Local` objects as well + as :class:`LocalStack` objects. However it is not possible to + release data held by proxies that way, one always has to retain + a reference to the underlying local object in order to be able + to release it. + + .. versionadded:: 0.6.1 + """ + local.__release_local__() + + +class Local(object): + __slots__ = ("__storage__", "__ident_func__") + + def __init__(self): + object.__setattr__(self, "__storage__", {}) + object.__setattr__(self, "__ident_func__", get_ident) + + def __iter__(self): + return iter(self.__storage__.items()) + + def __call__(self, proxy): + """Create a proxy for a name.""" + return LocalProxy(self, proxy) + + def __release_local__(self): + self.__storage__.pop(self.__ident_func__(), None) + + def __getattr__(self, name): + try: + return self.__storage__[self.__ident_func__()][name] + except KeyError: + raise AttributeError(name) + + def __setattr__(self, name, value): + ident = self.__ident_func__() + storage = self.__storage__ + try: + storage[ident][name] = value + except KeyError: + storage[ident] = {name: value} + + def __delattr__(self, name): + try: + del self.__storage__[self.__ident_func__()][name] + except KeyError: + raise AttributeError(name) + + +class LocalStack(object): + """This class works similar to a :class:`Local` but keeps a stack + of objects instead. This is best explained with an example:: + + >>> ls = LocalStack() + >>> ls.push(42) + >>> ls.top + 42 + >>> ls.push(23) + >>> ls.top + 23 + >>> ls.pop() + 23 + >>> ls.top + 42 + + They can be force released by using a :class:`LocalManager` or with + the :func:`release_local` function but the correct way is to pop the + item from the stack after using. When the stack is empty it will + no longer be bound to the current context (and as such released). + + By calling the stack without arguments it returns a proxy that resolves to + the topmost item on the stack. + + .. versionadded:: 0.6.1 + """ + + def __init__(self): + self._local = Local() + + def __release_local__(self): + self._local.__release_local__() + + def _get__ident_func__(self): + return self._local.__ident_func__ + + def _set__ident_func__(self, value): + object.__setattr__(self._local, "__ident_func__", value) + + __ident_func__ = property(_get__ident_func__, _set__ident_func__) + del _get__ident_func__, _set__ident_func__ + + def __call__(self): + def _lookup(): + rv = self.top + if rv is None: + raise RuntimeError("object unbound") + return rv + + return LocalProxy(_lookup) + + def push(self, obj): + """Pushes a new item to the stack""" + rv = getattr(self._local, "stack", None) + if rv is None: + self._local.stack = rv = [] + rv.append(obj) + return rv + + def pop(self): + """Removes the topmost item from the stack, will return the + old value or `None` if the stack was already empty. + """ + stack = getattr(self._local, "stack", None) + if stack is None: + return None + elif len(stack) == 1: + release_local(self._local) + return stack[-1] + else: + return stack.pop() + + @property + def top(self): + """The topmost item on the stack. If the stack is empty, + `None` is returned. + """ + try: + return self._local.stack[-1] + except (AttributeError, IndexError): + return None + + +class LocalManager(object): + """Local objects cannot manage themselves. For that you need a local + manager. You can pass a local manager multiple locals or add them later + by appending them to `manager.locals`. Every time the manager cleans up, + it will clean up all the data left in the locals for this context. + + The `ident_func` parameter can be added to override the default ident + function for the wrapped locals. + + .. versionchanged:: 0.6.1 + Instead of a manager the :func:`release_local` function can be used + as well. + + .. versionchanged:: 0.7 + `ident_func` was added. + """ + + def __init__(self, locals=None, ident_func=None): + if locals is None: + self.locals = [] + elif isinstance(locals, Local): + self.locals = [locals] + else: + self.locals = list(locals) + if ident_func is not None: + self.ident_func = ident_func + for local in self.locals: + object.__setattr__(local, "__ident_func__", ident_func) + else: + self.ident_func = get_ident + + def get_ident(self): + """Return the context identifier the local objects use internally for + this context. You cannot override this method to change the behavior + but use it to link other context local objects (such as SQLAlchemy's + scoped sessions) to the Werkzeug locals. + + .. versionchanged:: 0.7 + You can pass a different ident function to the local manager that + will then be propagated to all the locals passed to the + constructor. + """ + return self.ident_func() + + def cleanup(self): + """Manually clean up the data in the locals for this context. Call + this at the end of the request or use `make_middleware()`. + """ + for local in self.locals: + release_local(local) + + def make_middleware(self, app): + """Wrap a WSGI application so that cleaning up happens after + request end. + """ + + def application(environ, start_response): + return ClosingIterator(app(environ, start_response), self.cleanup) + + return application + + def middleware(self, func): + """Like `make_middleware` but for decorating functions. + + Example usage:: + + @manager.middleware + def application(environ, start_response): + ... + + The difference to `make_middleware` is that the function passed + will have all the arguments copied from the inner application + (name, docstring, module). + """ + return update_wrapper(self.make_middleware(func), func) + + def __repr__(self): + return "<%s storages: %d>" % (self.__class__.__name__, len(self.locals)) + + +@implements_bool +class LocalProxy(object): + """Acts as a proxy for a werkzeug local. Forwards all operations to + a proxied object. The only operations not supported for forwarding + are right handed operands and any kind of assignment. + + Example usage:: + + from werkzeug.local import Local + l = Local() + + # these are proxies + request = l('request') + user = l('user') + + + from werkzeug.local import LocalStack + _response_local = LocalStack() + + # this is a proxy + response = _response_local() + + Whenever something is bound to l.user / l.request the proxy objects + will forward all operations. If no object is bound a :exc:`RuntimeError` + will be raised. + + To create proxies to :class:`Local` or :class:`LocalStack` objects, + call the object as shown above. If you want to have a proxy to an + object looked up by a function, you can (as of Werkzeug 0.6.1) pass + a function to the :class:`LocalProxy` constructor:: + + session = LocalProxy(lambda: get_current_request().session) + + .. versionchanged:: 0.6.1 + The class can be instantiated with a callable as well now. + """ + + __slots__ = ("__local", "__dict__", "__name__", "__wrapped__") + + def __init__(self, local, name=None): + object.__setattr__(self, "_LocalProxy__local", local) + object.__setattr__(self, "__name__", name) + if callable(local) and not hasattr(local, "__release_local__"): + # "local" is a callable that is not an instance of Local or + # LocalManager: mark it as a wrapped function. + object.__setattr__(self, "__wrapped__", local) + + def _get_current_object(self): + """Return the current object. This is useful if you want the real + object behind the proxy at a time for performance reasons or because + you want to pass the object into a different context. + """ + if not hasattr(self.__local, "__release_local__"): + return self.__local() + try: + return getattr(self.__local, self.__name__) + except AttributeError: + raise RuntimeError("no object bound to %s" % self.__name__) + + @property + def __dict__(self): + try: + return self._get_current_object().__dict__ + except RuntimeError: + raise AttributeError("__dict__") + + def __repr__(self): + try: + obj = self._get_current_object() + except RuntimeError: + return "<%s unbound>" % self.__class__.__name__ + return repr(obj) + + def __bool__(self): + try: + return bool(self._get_current_object()) + except RuntimeError: + return False + + def __unicode__(self): + try: + return unicode(self._get_current_object()) # noqa + except RuntimeError: + return repr(self) + + def __dir__(self): + try: + return dir(self._get_current_object()) + except RuntimeError: + return [] + + def __getattr__(self, name): + if name == "__members__": + return dir(self._get_current_object()) + return getattr(self._get_current_object(), name) + + def __setitem__(self, key, value): + self._get_current_object()[key] = value + + def __delitem__(self, key): + del self._get_current_object()[key] + + if PY2: + __getslice__ = lambda x, i, j: x._get_current_object()[i:j] + + def __setslice__(self, i, j, seq): + self._get_current_object()[i:j] = seq + + def __delslice__(self, i, j): + del self._get_current_object()[i:j] + + __setattr__ = lambda x, n, v: setattr(x._get_current_object(), n, v) + __delattr__ = lambda x, n: delattr(x._get_current_object(), n) + __str__ = lambda x: str(x._get_current_object()) + __lt__ = lambda x, o: x._get_current_object() < o + __le__ = lambda x, o: x._get_current_object() <= o + __eq__ = lambda x, o: x._get_current_object() == o + __ne__ = lambda x, o: x._get_current_object() != o + __gt__ = lambda x, o: x._get_current_object() > o + __ge__ = lambda x, o: x._get_current_object() >= o + __cmp__ = lambda x, o: cmp(x._get_current_object(), o) # noqa + __hash__ = lambda x: hash(x._get_current_object()) + __call__ = lambda x, *a, **kw: x._get_current_object()(*a, **kw) + __len__ = lambda x: len(x._get_current_object()) + __getitem__ = lambda x, i: x._get_current_object()[i] + __iter__ = lambda x: iter(x._get_current_object()) + __contains__ = lambda x, i: i in x._get_current_object() + __add__ = lambda x, o: x._get_current_object() + o + __sub__ = lambda x, o: x._get_current_object() - o + __mul__ = lambda x, o: x._get_current_object() * o + __floordiv__ = lambda x, o: x._get_current_object() // o + __mod__ = lambda x, o: x._get_current_object() % o + __divmod__ = lambda x, o: x._get_current_object().__divmod__(o) + __pow__ = lambda x, o: x._get_current_object() ** o + __lshift__ = lambda x, o: x._get_current_object() << o + __rshift__ = lambda x, o: x._get_current_object() >> o + __and__ = lambda x, o: x._get_current_object() & o + __xor__ = lambda x, o: x._get_current_object() ^ o + __or__ = lambda x, o: x._get_current_object() | o + __div__ = lambda x, o: x._get_current_object().__div__(o) + __truediv__ = lambda x, o: x._get_current_object().__truediv__(o) + __neg__ = lambda x: -(x._get_current_object()) + __pos__ = lambda x: +(x._get_current_object()) + __abs__ = lambda x: abs(x._get_current_object()) + __invert__ = lambda x: ~(x._get_current_object()) + __complex__ = lambda x: complex(x._get_current_object()) + __int__ = lambda x: int(x._get_current_object()) + __long__ = lambda x: long(x._get_current_object()) # noqa + __float__ = lambda x: float(x._get_current_object()) + __oct__ = lambda x: oct(x._get_current_object()) + __hex__ = lambda x: hex(x._get_current_object()) + __index__ = lambda x: x._get_current_object().__index__() + __coerce__ = lambda x, o: x._get_current_object().__coerce__(x, o) + __enter__ = lambda x: x._get_current_object().__enter__() + __exit__ = lambda x, *a, **kw: x._get_current_object().__exit__(*a, **kw) + __radd__ = lambda x, o: o + x._get_current_object() + __rsub__ = lambda x, o: o - x._get_current_object() + __rmul__ = lambda x, o: o * x._get_current_object() + __rdiv__ = lambda x, o: o / x._get_current_object() + if PY2: + __rtruediv__ = lambda x, o: x._get_current_object().__rtruediv__(o) + else: + __rtruediv__ = __rdiv__ + __rfloordiv__ = lambda x, o: o // x._get_current_object() + __rmod__ = lambda x, o: o % x._get_current_object() + __rdivmod__ = lambda x, o: x._get_current_object().__rdivmod__(o) + __copy__ = lambda x: copy.copy(x._get_current_object()) + __deepcopy__ = lambda x, memo: copy.deepcopy(x._get_current_object(), memo) diff --git a/week-0/day-3/my_todo_app/venv/lib/python3.6/site-packages/werkzeug/middleware/__init__.py b/week-0/day-3/my_todo_app/venv/lib/python3.6/site-packages/werkzeug/middleware/__init__.py new file mode 100644 index 00000000..5e049f5e --- /dev/null +++ b/week-0/day-3/my_todo_app/venv/lib/python3.6/site-packages/werkzeug/middleware/__init__.py @@ -0,0 +1,25 @@ +""" +Middleware +========== + +A WSGI middleware is a WSGI application that wraps another application +in order to observe or change its behavior. Werkzeug provides some +middleware for common use cases. + +.. toctree:: + :maxdepth: 1 + + proxy_fix + shared_data + dispatcher + http_proxy + lint + profiler + +The :doc:`interactive debugger ` is also a middleware that can +be applied manually, although it is typically used automatically with +the :doc:`development server `. + +:copyright: 2007 Pallets +:license: BSD-3-Clause +""" diff --git a/week-0/day-3/my_todo_app/venv/lib/python3.6/site-packages/werkzeug/middleware/__pycache__/__init__.cpython-36.pyc b/week-0/day-3/my_todo_app/venv/lib/python3.6/site-packages/werkzeug/middleware/__pycache__/__init__.cpython-36.pyc new file mode 100644 index 0000000000000000000000000000000000000000..0b6efe04be597e119ab170ba14f6314064e7597f GIT binary patch literal 704 zcmYjP!HN_y5bfEEOJG01i`2!#f-}ADB1*Fkt1gHKMHpd0kW8ji(+Q@Nm{d>C_%Yu7 zrM>zS;>qfsb)7&$)vHvc-m6@koQNO4pM80JR2098gEe9Mig!NdLl>V5Jy{f|N9qw@ z6z{Fp4tteQyu4pRyn>s>+jr33N5N)Ldr-ybY^}%!4`dWUpH$?i4`eXGL0DK1A!!CF zKv-o=8)N`#qkMy4DZ>hl+Srh0aD(aVckCL7DQv993^}wY4q8|bsiAH8-7X{4Dr24r zF`IGuni67F3E)+=YO67lso<#?5iYsi$+g{%UN%fuORY$azP33ks=4{mHAGR48Kdj0 zr_o?&Z5>|{pA15!LtQO7hDp_AnV7~^*ECG_vK-C%aum(wz{(xa7&WVv7c1P0g&JDr zJLTN&2`EPC=wO(Qso)DuS~(q_)zNb&Rd@_ z+&@%?rAmlIo^mZ&tR*j{VVoJ29VC)H?LXLId_ie>$V(;~&4!hEn2wWD6*!!iu=O7i z7|6$2DFw5Vqmk4yE7^}v9y7RiXg0%ei^X}G!ex2JQ_=*lPPHoG16=9XuI%vx$rj>U zXQwbH*(4vcLw+I|4~IN{CNsgd_TV%|&PF95hU-k{ zV=@`y41ErDergbqhL;#{He*^IkEOAW3DtyBz%xUpQY#0U6R9_mTsgOoh-OKBxWD_@ z`uC{MMhf9tH_Tx^P6QiDW)%oF$~8_+Ldp`BjS{f3*5QR(L(VL8O}<_O1VVKNih_+Z z0oQAxb=u$}MR-6ooNdv{8f_wBcI(0)3d4p~XOKL_CpncQHP+!pI!w14h71q%vO5dJ z+nrJC3ma6_;IYnrwE`q`okF_ag|LdCV103ee4{NI=bPv4Fx<&lp>r{giR*~9()y*j&^CGtcj>mj*CG^?XSa8PxhB70u*FmIn9yTF7D+yV=&1sn;DRhTm~~NNwf6OpKp;;|i5iYC zys8z=i6NAhahXimaPnqYAjak<TKJ&GrDQEKS%& z`;eKDU3Ra3f8*B1cEZO-hB122?C~+Xi@#aJOF9D=UC9&fz!%HH7r{$+5Qrtwdg%<7 zgooa=GQB$QMRQ8+=jl*olFgb37|?Vu;I>dTZ?>XM%abQ{LE;=*!K@6BM4)HM z+$fs^NBOlir9c*AwKN^d)&z1$wCoZ-DRH1n2>++Ak%`72&DF?)aZwU85({*f?0U&k zYQ@04F-0EKAzT=;8>Y*4d0}e*3N1(K3`O@k73(5wOoOVmnqEw}&_kn#|2F>SDqfXa zIgwL&#j0{J171MI?X|tBkMO3g+H~8W21X_$O|qJl{Nd;&46p8W%CzVds@NEgRU$Ty zqtmQ7yZKG$snpM&%ke?yw3*B=lTPCydSNk{u0)Z_R2fAZ&}isVbKI8u{ImPbU83jA z*lf0aem&XJ4R4H_%|6X$$s&#C+) zT$Cbs;r$GW^OjhuT2(OeK6K851K+JNe%O?P`mQ%a`GGCNVYvj*>?1L!i+(iAz$aoRHW#u{8A-XN3c!vxdd63V=c zR4LQJ)f@$_GM+^B*(l?wv;fwx78w8xF-kp(zQmXL6fehJbptPS>F0S@+$-J{Zxw4R z{|`>Bff&>xg=8m+rePGNXvhi8SEJ~7%#(|q=L$Tv+{`y78m pUn?tcDzIz4wy!_H(zKNikI?z-;)1Z%RY!Nb_TXDaYA8X0|1U|b&r$#Y literal 0 HcmV?d00001 diff --git a/week-0/day-3/my_todo_app/venv/lib/python3.6/site-packages/werkzeug/middleware/__pycache__/http_proxy.cpython-36.pyc b/week-0/day-3/my_todo_app/venv/lib/python3.6/site-packages/werkzeug/middleware/__pycache__/http_proxy.cpython-36.pyc new file mode 100644 index 0000000000000000000000000000000000000000..cf976e8933caed0a8406b8041306993976fbe1b5 GIT binary patch literal 6350 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 L{CWX8tmgg~oFSv& literal 0 HcmV?d00001 diff --git a/week-0/day-3/my_todo_app/venv/lib/python3.6/site-packages/werkzeug/middleware/__pycache__/lint.cpython-36.pyc b/week-0/day-3/my_todo_app/venv/lib/python3.6/site-packages/werkzeug/middleware/__pycache__/lint.cpython-36.pyc new file mode 100644 index 0000000000000000000000000000000000000000..68e67b9656ba154b8d27d5b6a07c5d78aa879263 GIT binary patch literal 11687 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 literal 0 HcmV?d00001 diff --git a/week-0/day-3/my_todo_app/venv/lib/python3.6/site-packages/werkzeug/middleware/__pycache__/profiler.cpython-36.pyc b/week-0/day-3/my_todo_app/venv/lib/python3.6/site-packages/werkzeug/middleware/__pycache__/profiler.cpython-36.pyc new file mode 100644 index 0000000000000000000000000000000000000000..76a211937aecb50e5e892e2d0569b97f91483edb GIT binary patch literal 4433 zcma)9O>^7E83sV`Ll7m)vQy`y?Q9Qi%&7#qPBV>J+hZqo93LX9kvncU?SLS5DS`$8 zc(IgBnL5!kRt|1^?xFYok^Tr=d&;?&j!%8w1t?LrG81yJ0CwMf_WgL?cNd?mtT_Mt z-=}{$xM&#vF&2JJJm0~U9irhz$KWQnB6DPQER&uqQKe(+d$m*5_gbfhyB*a>jZVWf zCTn=BMoS~7tZ4KhA{nJ)&o{%zQPKVXVCV zI1b2%+vuw9Dqm%IsFy|tBs>3A@o)!M=Ascs#{>r~Zgwid9#*;2H@MBK{i=?biO4tj z(o3UL=Qd)toUfOV@>F;KQr$3~NIyj^p6ot&$QEp8e$3|qA@4KsTm)ks?4+*)YtlQ0$6#l5&WuVGl zxG&-j)-K%MO*3+ftDV!;_y;mnO2kYhEL0l9?<*nC5XUWWOHz3}lxM-uvPpw*U-_({ zAX$<5`!E4(XvP3Q1S*k}4VJ`0i?I}I&RtO0@))ingxDVmMx+GEf^nvjQFsWj-h`!~ z5>c+(oy&RsM2>vb?UKq`kx-Evd(GqIpS*}=da!9Y5) z=ET_x6KVW(`E#Z9I-uFyuK`k&TyVy-)CsrF>rIgo-L8oDLz%?gt_I;@pmc7O_DG?| zGDfK8!7Mr5PJQW*D5Kiio$urqXmxTFf_>#67Lb z*;OQJvxGBHy0SA%Ee??Oa15npVa<85PP_yeAE{k12#h2G&}3f=YL9~6Y2?Sn=IHm5eNoZ^ z`w8tqo4qIro?=5uC&;?ENJNT2UnV1VAmr0SG2U}eH%Pa%U9xbLQUKqr<|q1rbL`eR z0#`B6Dwcv8`$A@jT`=(DJ;9;MHTO54o?z^1?okn(ms)|6%tETv3t>1@QEA60D&7eU zFUfkQ>=jJDHD|6CK2^x){9SeKQs=o9^KE-hr{6fyVm^D3nb4f{eao7HE4fWYB(GA8 zv+cvJd2MuG=t}3lC@WLjz1BY(W$p_S*DpFu0d`gWqq~Lc3tZV%G*feGc*fL1YfdX@ zt*MQ+GOePur!}-yZeY7Mw_CN`_7JeVj^v}AF>iP}6?>C>#apx_Z+Z(6$=AHMINqw~ zb|#{Jr$TVG0v@?p;T74Dy1&)~o_0jbTYsGp~VGBId0M zam!cZEUyoQ&rx3ThIk$z(EX%k~HZ=$;TQFhz?0jPjb=m*wl{%9jN@B%Nv&|?EJF^;Vv zOs1G9WGpvlmb^MOhLst8Dv|ltHfltaWTIuu1}5h<@f@d84hQ&|uauM@qPJys8gP+^ zEnPzJ0}`y4hYEQGZ*r9y%B;cxH93wkp^J`;V98#`a?HbD|0tV_+5e@9`RX_K|M18A zyN|uE??3+P(Y?;n&fUjfc@MY0eDucL%1t-7>2S73vc{di-D%l*tvK)HHkCT)SscnF zC0fgr7jS!HZhpU`UvrxZ#Gyl=ZT8|9@+dcQ)1m71o}@_WX`MPWqQK<#FbQKx*`7D3 zgU&H>gKIB5 za~eMls0obXR`Bp!NN2xAW05KCtTp2O6v0+zj)6)Ouk{)Yakhd^GtMuj5VL zriK{QsTD`dB5;lQr@ZD$zWh+1Z0<{$NJ(DHYe{d2PcFUGdHUszn}xBriA33DG&X$M PfR`J%Tjm-(x?cG|(D@W! literal 0 HcmV?d00001 diff --git a/week-0/day-3/my_todo_app/venv/lib/python3.6/site-packages/werkzeug/middleware/__pycache__/proxy_fix.cpython-36.pyc b/week-0/day-3/my_todo_app/venv/lib/python3.6/site-packages/werkzeug/middleware/__pycache__/proxy_fix.cpython-36.pyc new file mode 100644 index 0000000000000000000000000000000000000000..f02caa9201009f4f0e760f58b0902e2378af66f1 GIT binary patch literal 7621 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 S8zqQ{{_68TMAb8Y_WuLadW"`` (default): + The host header is automatically rewritten to the URL of the + target. + ``None``: + The host header is unmodified from the client request. + Any other value: + The host header is overwritten with the value. + ``headers``: + A dictionary of headers to be sent with the request to the + target. The default is ``{}``. + ``ssl_context``: + A :class:`ssl.SSLContext` defining how to verify requests if the + target is HTTPS. The default is ``None``. + + In the example above, everything under ``"/static/"`` is proxied to + the server on port 5001. The host header is rewritten to the target, + and the ``"/static/"`` prefix is removed from the URLs. + + :param app: The WSGI application to wrap. + :param targets: Proxy target configurations. See description above. + :param chunk_size: Size of chunks to read from input stream and + write to target. + :param timeout: Seconds before an operation to a target fails. + + .. versionadded:: 0.14 + """ + + def __init__(self, app, targets, chunk_size=2 << 13, timeout=10): + def _set_defaults(opts): + opts.setdefault("remove_prefix", False) + opts.setdefault("host", "") + opts.setdefault("headers", {}) + opts.setdefault("ssl_context", None) + return opts + + self.app = app + self.targets = dict( + ("/%s/" % k.strip("/"), _set_defaults(v)) for k, v in targets.items() + ) + self.chunk_size = chunk_size + self.timeout = timeout + + def proxy_to(self, opts, path, prefix): + target = url_parse(opts["target"]) + + def application(environ, start_response): + headers = list(EnvironHeaders(environ).items()) + headers[:] = [ + (k, v) + for k, v in headers + if not is_hop_by_hop_header(k) + and k.lower() not in ("content-length", "host") + ] + headers.append(("Connection", "close")) + + if opts["host"] == "": + headers.append(("Host", target.ascii_host)) + elif opts["host"] is None: + headers.append(("Host", environ["HTTP_HOST"])) + else: + headers.append(("Host", opts["host"])) + + headers.extend(opts["headers"].items()) + remote_path = path + + if opts["remove_prefix"]: + remote_path = "%s/%s" % ( + target.path.rstrip("/"), + remote_path[len(prefix) :].lstrip("/"), + ) + + content_length = environ.get("CONTENT_LENGTH") + chunked = False + + if content_length not in ("", None): + headers.append(("Content-Length", content_length)) + elif content_length is not None: + headers.append(("Transfer-Encoding", "chunked")) + chunked = True + + try: + if target.scheme == "http": + con = client.HTTPConnection( + target.ascii_host, target.port or 80, timeout=self.timeout + ) + elif target.scheme == "https": + con = client.HTTPSConnection( + target.ascii_host, + target.port or 443, + timeout=self.timeout, + context=opts["ssl_context"], + ) + else: + raise RuntimeError( + "Target scheme must be 'http' or 'https', got '{}'.".format( + target.scheme + ) + ) + + con.connect() + remote_url = url_quote(remote_path) + querystring = environ["QUERY_STRING"] + + if querystring: + remote_url = remote_url + "?" + querystring + + con.putrequest(environ["REQUEST_METHOD"], remote_url, skip_host=True) + + for k, v in headers: + if k.lower() == "connection": + v = "close" + + con.putheader(k, v) + + con.endheaders() + stream = get_input_stream(environ) + + while 1: + data = stream.read(self.chunk_size) + + if not data: + break + + if chunked: + con.send(b"%x\r\n%s\r\n" % (len(data), data)) + else: + con.send(data) + + resp = con.getresponse() + except socket.error: + from ..exceptions import BadGateway + + return BadGateway()(environ, start_response) + + start_response( + "%d %s" % (resp.status, resp.reason), + [ + (k.title(), v) + for k, v in resp.getheaders() + if not is_hop_by_hop_header(k) + ], + ) + + def read(): + while 1: + try: + data = resp.read(self.chunk_size) + except socket.error: + break + + if not data: + break + + yield data + + return read() + + return application + + def __call__(self, environ, start_response): + path = environ["PATH_INFO"] + app = self.app + + for prefix, opts in self.targets.items(): + if path.startswith(prefix): + app = self.proxy_to(opts, path, prefix) + break + + return app(environ, start_response) diff --git a/week-0/day-3/my_todo_app/venv/lib/python3.6/site-packages/werkzeug/middleware/lint.py b/week-0/day-3/my_todo_app/venv/lib/python3.6/site-packages/werkzeug/middleware/lint.py new file mode 100644 index 00000000..98f95817 --- /dev/null +++ b/week-0/day-3/my_todo_app/venv/lib/python3.6/site-packages/werkzeug/middleware/lint.py @@ -0,0 +1,408 @@ +""" +WSGI Protocol Linter +==================== + +This module provides a middleware that performs sanity checks on the +behavior of the WSGI server and application. It checks that the +:pep:`3333` WSGI spec is properly implemented. It also warns on some +common HTTP errors such as non-empty responses for 304 status codes. + +.. autoclass:: LintMiddleware + +:copyright: 2007 Pallets +:license: BSD-3-Clause +""" +from warnings import warn + +from .._compat import implements_iterator +from .._compat import PY2 +from .._compat import string_types +from ..datastructures import Headers +from ..http import is_entity_header +from ..wsgi import FileWrapper + +try: + from urllib.parse import urlparse +except ImportError: + from urlparse import urlparse + + +class WSGIWarning(Warning): + """Warning class for WSGI warnings.""" + + +class HTTPWarning(Warning): + """Warning class for HTTP warnings.""" + + +def check_string(context, obj, stacklevel=3): + if type(obj) is not str: + warn( + "'%s' requires strings, got '%s'" % (context, type(obj).__name__), + WSGIWarning, + ) + + +class InputStream(object): + def __init__(self, stream): + self._stream = stream + + def read(self, *args): + if len(args) == 0: + warn( + "WSGI does not guarantee an EOF marker on the input stream, thus making" + " calls to 'wsgi.input.read()' unsafe. Conforming servers may never" + " return from this call.", + WSGIWarning, + stacklevel=2, + ) + elif len(args) != 1: + warn( + "Too many parameters passed to 'wsgi.input.read()'.", + WSGIWarning, + stacklevel=2, + ) + return self._stream.read(*args) + + def readline(self, *args): + if len(args) == 0: + warn( + "Calls to 'wsgi.input.readline()' without arguments are unsafe. Use" + " 'wsgi.input.read()' instead.", + WSGIWarning, + stacklevel=2, + ) + elif len(args) == 1: + warn( + "'wsgi.input.readline()' was called with a size hint. WSGI does not" + " support this, although it's available on all major servers.", + WSGIWarning, + stacklevel=2, + ) + else: + raise TypeError("Too many arguments passed to 'wsgi.input.readline()'.") + return self._stream.readline(*args) + + def __iter__(self): + try: + return iter(self._stream) + except TypeError: + warn("'wsgi.input' is not iterable.", WSGIWarning, stacklevel=2) + return iter(()) + + def close(self): + warn("The application closed the input stream!", WSGIWarning, stacklevel=2) + self._stream.close() + + +class ErrorStream(object): + def __init__(self, stream): + self._stream = stream + + def write(self, s): + check_string("wsgi.error.write()", s) + self._stream.write(s) + + def flush(self): + self._stream.flush() + + def writelines(self, seq): + for line in seq: + self.write(line) + + def close(self): + warn("The application closed the error stream!", WSGIWarning, stacklevel=2) + self._stream.close() + + +class GuardedWrite(object): + def __init__(self, write, chunks): + self._write = write + self._chunks = chunks + + def __call__(self, s): + check_string("write()", s) + self._write.write(s) + self._chunks.append(len(s)) + + +@implements_iterator +class GuardedIterator(object): + def __init__(self, iterator, headers_set, chunks): + self._iterator = iterator + if PY2: + self._next = iter(iterator).next + else: + self._next = iter(iterator).__next__ + self.closed = False + self.headers_set = headers_set + self.chunks = chunks + + def __iter__(self): + return self + + def __next__(self): + if self.closed: + warn("Iterated over closed 'app_iter'.", WSGIWarning, stacklevel=2) + + rv = self._next() + + if not self.headers_set: + warn( + "The application returned before it started the response.", + WSGIWarning, + stacklevel=2, + ) + + check_string("application iterator items", rv) + self.chunks.append(len(rv)) + return rv + + def close(self): + self.closed = True + + if hasattr(self._iterator, "close"): + self._iterator.close() + + if self.headers_set: + status_code, headers = self.headers_set + bytes_sent = sum(self.chunks) + content_length = headers.get("content-length", type=int) + + if status_code == 304: + for key, _value in headers: + key = key.lower() + if key not in ("expires", "content-location") and is_entity_header( + key + ): + warn( + "Entity header %r found in 304 response." % key, HTTPWarning + ) + if bytes_sent: + warn("304 responses must not have a body.", HTTPWarning) + elif 100 <= status_code < 200 or status_code == 204: + if content_length != 0: + warn( + "%r responses must have an empty content length." % status_code, + HTTPWarning, + ) + if bytes_sent: + warn( + "%r responses must not have a body." % status_code, HTTPWarning + ) + elif content_length is not None and content_length != bytes_sent: + warn( + "Content-Length and the number of bytes sent to the client do not" + " match.", + WSGIWarning, + ) + + def __del__(self): + if not self.closed: + try: + warn( + "Iterator was garbage collected before it was closed.", WSGIWarning + ) + except Exception: + pass + + +class LintMiddleware(object): + """Warns about common errors in the WSGI and HTTP behavior of the + server and wrapped application. Some of the issues it check are: + + - invalid status codes + - non-bytestrings sent to the WSGI server + - strings returned from the WSGI application + - non-empty conditional responses + - unquoted etags + - relative URLs in the Location header + - unsafe calls to wsgi.input + - unclosed iterators + + Error information is emitted using the :mod:`warnings` module. + + :param app: The WSGI application to wrap. + + .. code-block:: python + + from werkzeug.middleware.lint import LintMiddleware + app = LintMiddleware(app) + """ + + def __init__(self, app): + self.app = app + + def check_environ(self, environ): + if type(environ) is not dict: + warn( + "WSGI environment is not a standard Python dict.", + WSGIWarning, + stacklevel=4, + ) + for key in ( + "REQUEST_METHOD", + "SERVER_NAME", + "SERVER_PORT", + "wsgi.version", + "wsgi.input", + "wsgi.errors", + "wsgi.multithread", + "wsgi.multiprocess", + "wsgi.run_once", + ): + if key not in environ: + warn( + "Required environment key %r not found" % key, + WSGIWarning, + stacklevel=3, + ) + if environ["wsgi.version"] != (1, 0): + warn("Environ is not a WSGI 1.0 environ.", WSGIWarning, stacklevel=3) + + script_name = environ.get("SCRIPT_NAME", "") + path_info = environ.get("PATH_INFO", "") + + if script_name and script_name[0] != "/": + warn( + "'SCRIPT_NAME' does not start with a slash: %r" % script_name, + WSGIWarning, + stacklevel=3, + ) + + if path_info and path_info[0] != "/": + warn( + "'PATH_INFO' does not start with a slash: %r" % path_info, + WSGIWarning, + stacklevel=3, + ) + + def check_start_response(self, status, headers, exc_info): + check_string("status", status) + status_code = status.split(None, 1)[0] + + if len(status_code) != 3 or not status_code.isdigit(): + warn(WSGIWarning("Status code must be three digits"), stacklevel=3) + + if len(status) < 4 or status[3] != " ": + warn( + WSGIWarning( + "Invalid value for status %r. Valid " + "status strings are three digits, a space " + "and a status explanation" + ), + stacklevel=3, + ) + + status_code = int(status_code) + + if status_code < 100: + warn(WSGIWarning("status code < 100 detected"), stacklevel=3) + + if type(headers) is not list: + warn(WSGIWarning("header list is not a list"), stacklevel=3) + + for item in headers: + if type(item) is not tuple or len(item) != 2: + warn(WSGIWarning("Headers must tuple 2-item tuples"), stacklevel=3) + name, value = item + if type(name) is not str or type(value) is not str: + warn(WSGIWarning("header items must be strings"), stacklevel=3) + if name.lower() == "status": + warn( + WSGIWarning( + "The status header is not supported due to " + "conflicts with the CGI spec." + ), + stacklevel=3, + ) + + if exc_info is not None and not isinstance(exc_info, tuple): + warn(WSGIWarning("invalid value for exc_info"), stacklevel=3) + + headers = Headers(headers) + self.check_headers(headers) + + return status_code, headers + + def check_headers(self, headers): + etag = headers.get("etag") + + if etag is not None: + if etag.startswith(("W/", "w/")): + if etag.startswith("w/"): + warn( + HTTPWarning("weak etag indicator should be upcase."), + stacklevel=4, + ) + + etag = etag[2:] + + if not (etag[:1] == etag[-1:] == '"'): + warn(HTTPWarning("unquoted etag emitted."), stacklevel=4) + + location = headers.get("location") + + if location is not None: + if not urlparse(location).netloc: + warn( + HTTPWarning("absolute URLs required for location header"), + stacklevel=4, + ) + + def check_iterator(self, app_iter): + if isinstance(app_iter, string_types): + warn( + "The application returned astring. The response will send one character" + " at a time to the client, which will kill performance. Return a list" + " or iterable instead.", + WSGIWarning, + stacklevel=3, + ) + + def __call__(self, *args, **kwargs): + if len(args) != 2: + warn("A WSGI app takes two arguments.", WSGIWarning, stacklevel=2) + + if kwargs: + warn( + "A WSGI app does not take keyword arguments.", WSGIWarning, stacklevel=2 + ) + + environ, start_response = args + + self.check_environ(environ) + environ["wsgi.input"] = InputStream(environ["wsgi.input"]) + environ["wsgi.errors"] = ErrorStream(environ["wsgi.errors"]) + + # Hook our own file wrapper in so that applications will always + # iterate to the end and we can check the content length. + environ["wsgi.file_wrapper"] = FileWrapper + + headers_set = [] + chunks = [] + + def checking_start_response(*args, **kwargs): + if len(args) not in (2, 3): + warn( + "Invalid number of arguments: %s, expected 2 or 3." % len(args), + WSGIWarning, + stacklevel=2, + ) + + if kwargs: + warn("'start_response' does not take keyword arguments.", WSGIWarning) + + status, headers = args[:2] + + if len(args) == 3: + exc_info = args[2] + else: + exc_info = None + + headers_set[:] = self.check_start_response(status, headers, exc_info) + return GuardedWrite(start_response(status, headers, exc_info), chunks) + + app_iter = self.app(environ, checking_start_response) + self.check_iterator(app_iter) + return GuardedIterator(app_iter, headers_set, chunks) diff --git a/week-0/day-3/my_todo_app/venv/lib/python3.6/site-packages/werkzeug/middleware/profiler.py b/week-0/day-3/my_todo_app/venv/lib/python3.6/site-packages/werkzeug/middleware/profiler.py new file mode 100644 index 00000000..32a14d9f --- /dev/null +++ b/week-0/day-3/my_todo_app/venv/lib/python3.6/site-packages/werkzeug/middleware/profiler.py @@ -0,0 +1,132 @@ +""" +Application Profiler +==================== + +This module provides a middleware that profiles each request with the +:mod:`cProfile` module. This can help identify bottlenecks in your code +that may be slowing down your application. + +.. autoclass:: ProfilerMiddleware + +:copyright: 2007 Pallets +:license: BSD-3-Clause +""" +from __future__ import print_function + +import os.path +import sys +import time +from pstats import Stats + +try: + from cProfile import Profile +except ImportError: + from profile import Profile + + +class ProfilerMiddleware(object): + """Wrap a WSGI application and profile the execution of each + request. Responses are buffered so that timings are more exact. + + If ``stream`` is given, :class:`pstats.Stats` are written to it + after each request. If ``profile_dir`` is given, :mod:`cProfile` + data files are saved to that directory, one file per request. + + The filename can be customized by passing ``filename_format``. If + it is a string, it will be formatted using :meth:`str.format` with + the following fields available: + + - ``{method}`` - The request method; GET, POST, etc. + - ``{path}`` - The request path or 'root' should one not exist. + - ``{elapsed}`` - The elapsed time of the request. + - ``{time}`` - The time of the request. + + If it is a callable, it will be called with the WSGI ``environ`` + dict and should return a filename. + + :param app: The WSGI application to wrap. + :param stream: Write stats to this stream. Disable with ``None``. + :param sort_by: A tuple of columns to sort stats by. See + :meth:`pstats.Stats.sort_stats`. + :param restrictions: A tuple of restrictions to filter stats by. See + :meth:`pstats.Stats.print_stats`. + :param profile_dir: Save profile data files to this directory. + :param filename_format: Format string for profile data file names, + or a callable returning a name. See explanation above. + + .. code-block:: python + + from werkzeug.middleware.profiler import ProfilerMiddleware + app = ProfilerMiddleware(app) + + .. versionchanged:: 0.15 + Stats are written even if ``profile_dir`` is given, and can be + disable by passing ``stream=None``. + + .. versionadded:: 0.15 + Added ``filename_format``. + + .. versionadded:: 0.9 + Added ``restrictions`` and ``profile_dir``. + """ + + def __init__( + self, + app, + stream=sys.stdout, + sort_by=("time", "calls"), + restrictions=(), + profile_dir=None, + filename_format="{method}.{path}.{elapsed:.0f}ms.{time:.0f}.prof", + ): + self._app = app + self._stream = stream + self._sort_by = sort_by + self._restrictions = restrictions + self._profile_dir = profile_dir + self._filename_format = filename_format + + def __call__(self, environ, start_response): + response_body = [] + + def catching_start_response(status, headers, exc_info=None): + start_response(status, headers, exc_info) + return response_body.append + + def runapp(): + app_iter = self._app(environ, catching_start_response) + response_body.extend(app_iter) + + if hasattr(app_iter, "close"): + app_iter.close() + + profile = Profile() + start = time.time() + profile.runcall(runapp) + body = b"".join(response_body) + elapsed = time.time() - start + + if self._profile_dir is not None: + if callable(self._filename_format): + filename = self._filename_format(environ) + else: + filename = self._filename_format.format( + method=environ["REQUEST_METHOD"], + path=( + environ.get("PATH_INFO").strip("/").replace("/", ".") or "root" + ), + elapsed=elapsed * 1000.0, + time=time.time(), + ) + filename = os.path.join(self._profile_dir, filename) + profile.dump_stats(filename) + + if self._stream is not None: + stats = Stats(profile, stream=self._stream) + stats.sort_stats(*self._sort_by) + print("-" * 80, file=self._stream) + print("PATH: {!r}".format(environ.get("PATH_INFO", "")), file=self._stream) + stats.print_stats(*self._restrictions) + print("-" * 80 + "\n", file=self._stream) + + return [body] diff --git a/week-0/day-3/my_todo_app/venv/lib/python3.6/site-packages/werkzeug/middleware/proxy_fix.py b/week-0/day-3/my_todo_app/venv/lib/python3.6/site-packages/werkzeug/middleware/proxy_fix.py new file mode 100644 index 00000000..dc1dacc8 --- /dev/null +++ b/week-0/day-3/my_todo_app/venv/lib/python3.6/site-packages/werkzeug/middleware/proxy_fix.py @@ -0,0 +1,228 @@ +""" +X-Forwarded-For Proxy Fix +========================= + +This module provides a middleware that adjusts the WSGI environ based on +``X-Forwarded-`` headers that proxies in front of an application may +set. + +When an application is running behind a proxy server, WSGI may see the +request as coming from that server rather than the real client. Proxies +set various headers to track where the request actually came from. + +This middleware should only be applied if the application is actually +behind such a proxy, and should be configured with the number of proxies +that are chained in front of it. Not all proxies set all the headers. +Since incoming headers can be faked, you must set how many proxies are +setting each header so the middleware knows what to trust. + +.. autoclass:: ProxyFix + +:copyright: 2007 Pallets +:license: BSD-3-Clause +""" +import warnings + + +class ProxyFix(object): + """Adjust the WSGI environ based on ``X-Forwarded-`` that proxies in + front of the application may set. + + - ``X-Forwarded-For`` sets ``REMOTE_ADDR``. + - ``X-Forwarded-Proto`` sets ``wsgi.url_scheme``. + - ``X-Forwarded-Host`` sets ``HTTP_HOST``, ``SERVER_NAME``, and + ``SERVER_PORT``. + - ``X-Forwarded-Port`` sets ``HTTP_HOST`` and ``SERVER_PORT``. + - ``X-Forwarded-Prefix`` sets ``SCRIPT_NAME``. + + You must tell the middleware how many proxies set each header so it + knows what values to trust. It is a security issue to trust values + that came from the client rather than a proxy. + + The original values of the headers are stored in the WSGI + environ as ``werkzeug.proxy_fix.orig``, a dict. + + :param app: The WSGI application to wrap. + :param x_for: Number of values to trust for ``X-Forwarded-For``. + :param x_proto: Number of values to trust for ``X-Forwarded-Proto``. + :param x_host: Number of values to trust for ``X-Forwarded-Host``. + :param x_port: Number of values to trust for ``X-Forwarded-Port``. + :param x_prefix: Number of values to trust for + ``X-Forwarded-Prefix``. + :param num_proxies: Deprecated, use ``x_for`` instead. + + .. code-block:: python + + from werkzeug.middleware.proxy_fix import ProxyFix + # App is behind one proxy that sets the -For and -Host headers. + app = ProxyFix(app, x_for=1, x_host=1) + + .. versionchanged:: 0.15 + All headers support multiple values. The ``num_proxies`` + argument is deprecated. Each header is configured with a + separate number of trusted proxies. + + .. versionchanged:: 0.15 + Original WSGI environ values are stored in the + ``werkzeug.proxy_fix.orig`` dict. ``orig_remote_addr``, + ``orig_wsgi_url_scheme``, and ``orig_http_host`` are deprecated + and will be removed in 1.0. + + .. versionchanged:: 0.15 + Support ``X-Forwarded-Port`` and ``X-Forwarded-Prefix``. + + .. versionchanged:: 0.15 + ``X-Fowarded-Host`` and ``X-Forwarded-Port`` modify + ``SERVER_NAME`` and ``SERVER_PORT``. + """ + + def __init__( + self, app, num_proxies=None, x_for=1, x_proto=0, x_host=0, x_port=0, x_prefix=0 + ): + self.app = app + self.x_for = x_for + self.x_proto = x_proto + self.x_host = x_host + self.x_port = x_port + self.x_prefix = x_prefix + self.num_proxies = num_proxies + + @property + def num_proxies(self): + """The number of proxies setting ``X-Forwarded-For`` in front + of the application. + + .. deprecated:: 0.15 + A separate number of trusted proxies is configured for each + header. ``num_proxies`` maps to ``x_for``. This method will + be removed in 1.0. + + :internal: + """ + warnings.warn( + "'num_proxies' is deprecated as of version 0.15 and will be" + " removed in version 1.0. Use 'x_for' instead.", + DeprecationWarning, + stacklevel=2, + ) + return self.x_for + + @num_proxies.setter + def num_proxies(self, value): + if value is not None: + warnings.warn( + "'num_proxies' is deprecated as of version 0.15 and" + " will be removed in version 1.0. Use 'x_for' instead.", + DeprecationWarning, + stacklevel=2, + ) + self.x_for = value + + def get_remote_addr(self, forwarded_for): + """Get the real ``remote_addr`` by looking backwards ``x_for`` + number of values in the ``X-Forwarded-For`` header. + + :param forwarded_for: List of values parsed from the + ``X-Forwarded-For`` header. + :return: The real ``remote_addr``, or ``None`` if there were not + at least ``x_for`` values. + + .. deprecated:: 0.15 + This is handled internally for each header. This method will + be removed in 1.0. + + .. versionchanged:: 0.9 + Use ``num_proxies`` instead of always picking the first + value. + + .. versionadded:: 0.8 + """ + warnings.warn( + "'get_remote_addr' is deprecated as of version 0.15 and" + " will be removed in version 1.0. It is now handled" + " internally for each header.", + DeprecationWarning, + ) + return self._get_trusted_comma(self.x_for, ",".join(forwarded_for)) + + def _get_trusted_comma(self, trusted, value): + """Get the real value from a comma-separated header based on the + configured number of trusted proxies. + + :param trusted: Number of values to trust in the header. + :param value: Header value to parse. + :return: The real value, or ``None`` if there are fewer values + than the number of trusted proxies. + + .. versionadded:: 0.15 + """ + if not (trusted and value): + return + values = [x.strip() for x in value.split(",")] + if len(values) >= trusted: + return values[-trusted] + + def __call__(self, environ, start_response): + """Modify the WSGI environ based on the various ``Forwarded`` + headers before calling the wrapped application. Store the + original environ values in ``werkzeug.proxy_fix.orig_{key}``. + """ + environ_get = environ.get + orig_remote_addr = environ_get("REMOTE_ADDR") + orig_wsgi_url_scheme = environ_get("wsgi.url_scheme") + orig_http_host = environ_get("HTTP_HOST") + environ.update( + { + "werkzeug.proxy_fix.orig": { + "REMOTE_ADDR": orig_remote_addr, + "wsgi.url_scheme": orig_wsgi_url_scheme, + "HTTP_HOST": orig_http_host, + "SERVER_NAME": environ_get("SERVER_NAME"), + "SERVER_PORT": environ_get("SERVER_PORT"), + "SCRIPT_NAME": environ_get("SCRIPT_NAME"), + }, + # todo: remove deprecated keys + "werkzeug.proxy_fix.orig_remote_addr": orig_remote_addr, + "werkzeug.proxy_fix.orig_wsgi_url_scheme": orig_wsgi_url_scheme, + "werkzeug.proxy_fix.orig_http_host": orig_http_host, + } + ) + + x_for = self._get_trusted_comma(self.x_for, environ_get("HTTP_X_FORWARDED_FOR")) + if x_for: + environ["REMOTE_ADDR"] = x_for + + x_proto = self._get_trusted_comma( + self.x_proto, environ_get("HTTP_X_FORWARDED_PROTO") + ) + if x_proto: + environ["wsgi.url_scheme"] = x_proto + + x_host = self._get_trusted_comma( + self.x_host, environ_get("HTTP_X_FORWARDED_HOST") + ) + if x_host: + environ["HTTP_HOST"] = x_host + parts = x_host.split(":", 1) + environ["SERVER_NAME"] = parts[0] + if len(parts) == 2: + environ["SERVER_PORT"] = parts[1] + + x_port = self._get_trusted_comma( + self.x_port, environ_get("HTTP_X_FORWARDED_PORT") + ) + if x_port: + host = environ.get("HTTP_HOST") + if host: + parts = host.split(":", 1) + host = parts[0] if len(parts) == 2 else host + environ["HTTP_HOST"] = "%s:%s" % (host, x_port) + environ["SERVER_PORT"] = x_port + + x_prefix = self._get_trusted_comma( + self.x_prefix, environ_get("HTTP_X_FORWARDED_PREFIX") + ) + if x_prefix: + environ["SCRIPT_NAME"] = x_prefix + + return self.app(environ, start_response) diff --git a/week-0/day-3/my_todo_app/venv/lib/python3.6/site-packages/werkzeug/middleware/shared_data.py b/week-0/day-3/my_todo_app/venv/lib/python3.6/site-packages/werkzeug/middleware/shared_data.py new file mode 100644 index 00000000..088504a9 --- /dev/null +++ b/week-0/day-3/my_todo_app/venv/lib/python3.6/site-packages/werkzeug/middleware/shared_data.py @@ -0,0 +1,253 @@ +""" +Serve Shared Static Files +========================= + +.. autoclass:: SharedDataMiddleware + :members: is_allowed + +:copyright: 2007 Pallets +:license: BSD-3-Clause +""" +import mimetypes +import os +import posixpath +from datetime import datetime +from io import BytesIO +from time import mktime +from time import time +from zlib import adler32 + +from .._compat import PY2 +from .._compat import string_types +from ..filesystem import get_filesystem_encoding +from ..http import http_date +from ..http import is_resource_modified +from ..security import safe_join +from ..wsgi import get_path_info +from ..wsgi import wrap_file + + +class SharedDataMiddleware(object): + + """A WSGI middleware that provides static content for development + environments or simple server setups. Usage is quite simple:: + + import os + from werkzeug.wsgi import SharedDataMiddleware + + app = SharedDataMiddleware(app, { + '/static': os.path.join(os.path.dirname(__file__), 'static') + }) + + The contents of the folder ``./shared`` will now be available on + ``http://example.com/shared/``. This is pretty useful during development + because a standalone media server is not required. One can also mount + files on the root folder and still continue to use the application because + the shared data middleware forwards all unhandled requests to the + application, even if the requests are below one of the shared folders. + + If `pkg_resources` is available you can also tell the middleware to serve + files from package data:: + + app = SharedDataMiddleware(app, { + '/static': ('myapplication', 'static') + }) + + This will then serve the ``static`` folder in the `myapplication` + Python package. + + The optional `disallow` parameter can be a list of :func:`~fnmatch.fnmatch` + rules for files that are not accessible from the web. If `cache` is set to + `False` no caching headers are sent. + + Currently the middleware does not support non ASCII filenames. If the + encoding on the file system happens to be the encoding of the URI it may + work but this could also be by accident. We strongly suggest using ASCII + only file names for static files. + + The middleware will guess the mimetype using the Python `mimetype` + module. If it's unable to figure out the charset it will fall back + to `fallback_mimetype`. + + .. versionchanged:: 0.5 + The cache timeout is configurable now. + + .. versionadded:: 0.6 + The `fallback_mimetype` parameter was added. + + :param app: the application to wrap. If you don't want to wrap an + application you can pass it :exc:`NotFound`. + :param exports: a list or dict of exported files and folders. + :param disallow: a list of :func:`~fnmatch.fnmatch` rules. + :param fallback_mimetype: the fallback mimetype for unknown files. + :param cache: enable or disable caching headers. + :param cache_timeout: the cache timeout in seconds for the headers. + """ + + def __init__( + self, + app, + exports, + disallow=None, + cache=True, + cache_timeout=60 * 60 * 12, + fallback_mimetype="text/plain", + ): + self.app = app + self.exports = [] + self.cache = cache + self.cache_timeout = cache_timeout + + if hasattr(exports, "items"): + exports = exports.items() + + for key, value in exports: + if isinstance(value, tuple): + loader = self.get_package_loader(*value) + elif isinstance(value, string_types): + if os.path.isfile(value): + loader = self.get_file_loader(value) + else: + loader = self.get_directory_loader(value) + else: + raise TypeError("unknown def %r" % value) + + self.exports.append((key, loader)) + + if disallow is not None: + from fnmatch import fnmatch + + self.is_allowed = lambda x: not fnmatch(x, disallow) + + self.fallback_mimetype = fallback_mimetype + + def is_allowed(self, filename): + """Subclasses can override this method to disallow the access to + certain files. However by providing `disallow` in the constructor + this method is overwritten. + """ + return True + + def _opener(self, filename): + return lambda: ( + open(filename, "rb"), + datetime.utcfromtimestamp(os.path.getmtime(filename)), + int(os.path.getsize(filename)), + ) + + def get_file_loader(self, filename): + return lambda x: (os.path.basename(filename), self._opener(filename)) + + def get_package_loader(self, package, package_path): + from pkg_resources import DefaultProvider, ResourceManager, get_provider + + loadtime = datetime.utcnow() + provider = get_provider(package) + manager = ResourceManager() + filesystem_bound = isinstance(provider, DefaultProvider) + + def loader(path): + if path is None: + return None, None + + path = safe_join(package_path, path) + + if not provider.has_resource(path): + return None, None + + basename = posixpath.basename(path) + + if filesystem_bound: + return ( + basename, + self._opener(provider.get_resource_filename(manager, path)), + ) + + s = provider.get_resource_string(manager, path) + return basename, lambda: (BytesIO(s), loadtime, len(s)) + + return loader + + def get_directory_loader(self, directory): + def loader(path): + if path is not None: + path = safe_join(directory, path) + else: + path = directory + + if os.path.isfile(path): + return os.path.basename(path), self._opener(path) + + return None, None + + return loader + + def generate_etag(self, mtime, file_size, real_filename): + if not isinstance(real_filename, bytes): + real_filename = real_filename.encode(get_filesystem_encoding()) + + return "wzsdm-%d-%s-%s" % ( + mktime(mtime.timetuple()), + file_size, + adler32(real_filename) & 0xFFFFFFFF, + ) + + def __call__(self, environ, start_response): + path = get_path_info(environ) + + if PY2: + path = path.encode(get_filesystem_encoding()) + + file_loader = None + + for search_path, loader in self.exports: + if search_path == path: + real_filename, file_loader = loader(None) + + if file_loader is not None: + break + + if not search_path.endswith("/"): + search_path += "/" + + if path.startswith(search_path): + real_filename, file_loader = loader(path[len(search_path) :]) + + if file_loader is not None: + break + + if file_loader is None or not self.is_allowed(real_filename): + return self.app(environ, start_response) + + guessed_type = mimetypes.guess_type(real_filename) + mime_type = guessed_type[0] or self.fallback_mimetype + f, mtime, file_size = file_loader() + + headers = [("Date", http_date())] + + if self.cache: + timeout = self.cache_timeout + etag = self.generate_etag(mtime, file_size, real_filename) + headers += [ + ("Etag", '"%s"' % etag), + ("Cache-Control", "max-age=%d, public" % timeout), + ] + + if not is_resource_modified(environ, etag, last_modified=mtime): + f.close() + start_response("304 Not Modified", headers) + return [] + + headers.append(("Expires", http_date(time() + timeout))) + else: + headers.append(("Cache-Control", "public")) + + headers.extend( + ( + ("Content-Type", mime_type), + ("Content-Length", str(file_size)), + ("Last-Modified", http_date(mtime)), + ) + ) + start_response("200 OK", headers) + return wrap_file(environ, f) diff --git a/week-0/day-3/my_todo_app/venv/lib/python3.6/site-packages/werkzeug/posixemulation.py b/week-0/day-3/my_todo_app/venv/lib/python3.6/site-packages/werkzeug/posixemulation.py new file mode 100644 index 00000000..696b4562 --- /dev/null +++ b/week-0/day-3/my_todo_app/venv/lib/python3.6/site-packages/werkzeug/posixemulation.py @@ -0,0 +1,117 @@ +# -*- coding: utf-8 -*- +r""" + werkzeug.posixemulation + ~~~~~~~~~~~~~~~~~~~~~~~ + + Provides a POSIX emulation for some features that are relevant to + web applications. The main purpose is to simplify support for + systems such as Windows NT that are not 100% POSIX compatible. + + Currently this only implements a :func:`rename` function that + follows POSIX semantics. Eg: if the target file already exists it + will be replaced without asking. + + This module was introduced in 0.6.1 and is not a public interface. + It might become one in later versions of Werkzeug. + + :copyright: 2007 Pallets + :license: BSD-3-Clause +""" +import errno +import os +import random +import sys +import time + +from ._compat import to_unicode +from .filesystem import get_filesystem_encoding + +can_rename_open_file = False + +if os.name == "nt": + try: + import ctypes + + _MOVEFILE_REPLACE_EXISTING = 0x1 + _MOVEFILE_WRITE_THROUGH = 0x8 + _MoveFileEx = ctypes.windll.kernel32.MoveFileExW + + def _rename(src, dst): + src = to_unicode(src, get_filesystem_encoding()) + dst = to_unicode(dst, get_filesystem_encoding()) + if _rename_atomic(src, dst): + return True + retry = 0 + rv = False + while not rv and retry < 100: + rv = _MoveFileEx( + src, dst, _MOVEFILE_REPLACE_EXISTING | _MOVEFILE_WRITE_THROUGH + ) + if not rv: + time.sleep(0.001) + retry += 1 + return rv + + # new in Vista and Windows Server 2008 + _CreateTransaction = ctypes.windll.ktmw32.CreateTransaction + _CommitTransaction = ctypes.windll.ktmw32.CommitTransaction + _MoveFileTransacted = ctypes.windll.kernel32.MoveFileTransactedW + _CloseHandle = ctypes.windll.kernel32.CloseHandle + can_rename_open_file = True + + def _rename_atomic(src, dst): + ta = _CreateTransaction(None, 0, 0, 0, 0, 1000, "Werkzeug rename") + if ta == -1: + return False + try: + retry = 0 + rv = False + while not rv and retry < 100: + rv = _MoveFileTransacted( + src, + dst, + None, + None, + _MOVEFILE_REPLACE_EXISTING | _MOVEFILE_WRITE_THROUGH, + ta, + ) + if rv: + rv = _CommitTransaction(ta) + break + else: + time.sleep(0.001) + retry += 1 + return rv + finally: + _CloseHandle(ta) + + except Exception: + + def _rename(src, dst): + return False + + def _rename_atomic(src, dst): + return False + + def rename(src, dst): + # Try atomic or pseudo-atomic rename + if _rename(src, dst): + return + # Fall back to "move away and replace" + try: + os.rename(src, dst) + except OSError as e: + if e.errno != errno.EEXIST: + raise + old = "%s-%08x" % (dst, random.randint(0, sys.maxsize)) + os.rename(dst, old) + os.rename(src, dst) + try: + os.unlink(old) + except Exception: + pass + + +else: + rename = os.rename + can_rename_open_file = True diff --git a/week-0/day-3/my_todo_app/venv/lib/python3.6/site-packages/werkzeug/routing.py b/week-0/day-3/my_todo_app/venv/lib/python3.6/site-packages/werkzeug/routing.py new file mode 100644 index 00000000..8ff7df18 --- /dev/null +++ b/week-0/day-3/my_todo_app/venv/lib/python3.6/site-packages/werkzeug/routing.py @@ -0,0 +1,2039 @@ +# -*- coding: utf-8 -*- +""" + werkzeug.routing + ~~~~~~~~~~~~~~~~ + + When it comes to combining multiple controller or view functions (however + you want to call them) you need a dispatcher. A simple way would be + applying regular expression tests on the ``PATH_INFO`` and calling + registered callback functions that return the value then. + + This module implements a much more powerful system than simple regular + expression matching because it can also convert values in the URLs and + build URLs. + + Here a simple example that creates an URL map for an application with + two subdomains (www and kb) and some URL rules: + + >>> m = Map([ + ... # Static URLs + ... Rule('/', endpoint='static/index'), + ... Rule('/about', endpoint='static/about'), + ... Rule('/help', endpoint='static/help'), + ... # Knowledge Base + ... Subdomain('kb', [ + ... Rule('/', endpoint='kb/index'), + ... Rule('/browse/', endpoint='kb/browse'), + ... Rule('/browse//', endpoint='kb/browse'), + ... Rule('/browse//', endpoint='kb/browse') + ... ]) + ... ], default_subdomain='www') + + If the application doesn't use subdomains it's perfectly fine to not set + the default subdomain and not use the `Subdomain` rule factory. The endpoint + in the rules can be anything, for example import paths or unique + identifiers. The WSGI application can use those endpoints to get the + handler for that URL. It doesn't have to be a string at all but it's + recommended. + + Now it's possible to create a URL adapter for one of the subdomains and + build URLs: + + >>> c = m.bind('example.com') + >>> c.build("kb/browse", dict(id=42)) + 'http://kb.example.com/browse/42/' + >>> c.build("kb/browse", dict()) + 'http://kb.example.com/browse/' + >>> c.build("kb/browse", dict(id=42, page=3)) + 'http://kb.example.com/browse/42/3' + >>> c.build("static/about") + '/about' + >>> c.build("static/index", force_external=True) + 'http://www.example.com/' + + >>> c = m.bind('example.com', subdomain='kb') + >>> c.build("static/about") + 'http://www.example.com/about' + + The first argument to bind is the server name *without* the subdomain. + Per default it will assume that the script is mounted on the root, but + often that's not the case so you can provide the real mount point as + second argument: + + >>> c = m.bind('example.com', '/applications/example') + + The third argument can be the subdomain, if not given the default + subdomain is used. For more details about binding have a look at the + documentation of the `MapAdapter`. + + And here is how you can match URLs: + + >>> c = m.bind('example.com') + >>> c.match("/") + ('static/index', {}) + >>> c.match("/about") + ('static/about', {}) + >>> c = m.bind('example.com', '/', 'kb') + >>> c.match("/") + ('kb/index', {}) + >>> c.match("/browse/42/23") + ('kb/browse', {'id': 42, 'page': 23}) + + If matching fails you get a `NotFound` exception, if the rule thinks + it's a good idea to redirect (for example because the URL was defined + to have a slash at the end but the request was missing that slash) it + will raise a `RequestRedirect` exception. Both are subclasses of the + `HTTPException` so you can use those errors as responses in the + application. + + If matching succeeded but the URL rule was incompatible to the given + method (for example there were only rules for `GET` and `HEAD` and + routing system tried to match a `POST` request) a `MethodNotAllowed` + exception is raised. + + + :copyright: 2007 Pallets + :license: BSD-3-Clause +""" +import ast +import difflib +import posixpath +import re +import uuid +from pprint import pformat +from threading import Lock + +from ._compat import implements_to_string +from ._compat import iteritems +from ._compat import itervalues +from ._compat import native_string_result +from ._compat import string_types +from ._compat import text_type +from ._compat import to_bytes +from ._compat import to_unicode +from ._compat import wsgi_decoding_dance +from ._internal import _encode_idna +from ._internal import _get_environ +from .datastructures import ImmutableDict +from .datastructures import MultiDict +from .exceptions import BadHost +from .exceptions import HTTPException +from .exceptions import MethodNotAllowed +from .exceptions import NotFound +from .urls import _fast_url_quote +from .urls import url_encode +from .urls import url_join +from .urls import url_quote +from .utils import cached_property +from .utils import format_string +from .utils import redirect +from .wsgi import get_host + +_rule_re = re.compile( + r""" + (?P[^<]*) # static rule data + < + (?: + (?P[a-zA-Z_][a-zA-Z0-9_]*) # converter name + (?:\((?P.*?)\))? # converter arguments + \: # variable delimiter + )? + (?P[a-zA-Z_][a-zA-Z0-9_]*) # variable name + > + """, + re.VERBOSE, +) +_simple_rule_re = re.compile(r"<([^>]+)>") +_converter_args_re = re.compile( + r""" + ((?P\w+)\s*=\s*)? + (?P + True|False| + \d+.\d+| + \d+.| + \d+| + [\w\d_.]+| + [urUR]?(?P"[^"]*?"|'[^']*') + )\s*, + """, + re.VERBOSE | re.UNICODE, +) + + +_PYTHON_CONSTANTS = {"None": None, "True": True, "False": False} + + +def _pythonize(value): + if value in _PYTHON_CONSTANTS: + return _PYTHON_CONSTANTS[value] + for convert in int, float: + try: + return convert(value) + except ValueError: + pass + if value[:1] == value[-1:] and value[0] in "\"'": + value = value[1:-1] + return text_type(value) + + +def parse_converter_args(argstr): + argstr += "," + args = [] + kwargs = {} + + for item in _converter_args_re.finditer(argstr): + value = item.group("stringval") + if value is None: + value = item.group("value") + value = _pythonize(value) + if not item.group("name"): + args.append(value) + else: + name = item.group("name") + kwargs[name] = value + + return tuple(args), kwargs + + +def parse_rule(rule): + """Parse a rule and return it as generator. Each iteration yields tuples + in the form ``(converter, arguments, variable)``. If the converter is + `None` it's a static url part, otherwise it's a dynamic one. + + :internal: + """ + pos = 0 + end = len(rule) + do_match = _rule_re.match + used_names = set() + while pos < end: + m = do_match(rule, pos) + if m is None: + break + data = m.groupdict() + if data["static"]: + yield None, None, data["static"] + variable = data["variable"] + converter = data["converter"] or "default" + if variable in used_names: + raise ValueError("variable name %r used twice." % variable) + used_names.add(variable) + yield converter, data["args"] or None, variable + pos = m.end() + if pos < end: + remaining = rule[pos:] + if ">" in remaining or "<" in remaining: + raise ValueError("malformed url rule: %r" % rule) + yield None, None, remaining + + +class RoutingException(Exception): + """Special exceptions that require the application to redirect, notifying + about missing urls, etc. + + :internal: + """ + + +class RequestRedirect(HTTPException, RoutingException): + """Raise if the map requests a redirect. This is for example the case if + `strict_slashes` are activated and an url that requires a trailing slash. + + The attribute `new_url` contains the absolute destination url. + """ + + code = 308 + + def __init__(self, new_url): + RoutingException.__init__(self, new_url) + self.new_url = new_url + + def get_response(self, environ): + return redirect(self.new_url, self.code) + + +class RequestSlash(RoutingException): + """Internal exception.""" + + +class RequestAliasRedirect(RoutingException): # noqa: B903 + """This rule is an alias and wants to redirect to the canonical URL.""" + + def __init__(self, matched_values): + self.matched_values = matched_values + + +@implements_to_string +class BuildError(RoutingException, LookupError): + """Raised if the build system cannot find a URL for an endpoint with the + values provided. + """ + + def __init__(self, endpoint, values, method, adapter=None): + LookupError.__init__(self, endpoint, values, method) + self.endpoint = endpoint + self.values = values + self.method = method + self.adapter = adapter + + @cached_property + def suggested(self): + return self.closest_rule(self.adapter) + + def closest_rule(self, adapter): + def _score_rule(rule): + return sum( + [ + 0.98 + * difflib.SequenceMatcher( + None, rule.endpoint, self.endpoint + ).ratio(), + 0.01 * bool(set(self.values or ()).issubset(rule.arguments)), + 0.01 * bool(rule.methods and self.method in rule.methods), + ] + ) + + if adapter and adapter.map._rules: + return max(adapter.map._rules, key=_score_rule) + + def __str__(self): + message = [] + message.append("Could not build url for endpoint %r" % self.endpoint) + if self.method: + message.append(" (%r)" % self.method) + if self.values: + message.append(" with values %r" % sorted(self.values.keys())) + message.append(".") + if self.suggested: + if self.endpoint == self.suggested.endpoint: + if self.method and self.method not in self.suggested.methods: + message.append( + " Did you mean to use methods %r?" + % sorted(self.suggested.methods) + ) + missing_values = self.suggested.arguments.union( + set(self.suggested.defaults or ()) + ) - set(self.values.keys()) + if missing_values: + message.append( + " Did you forget to specify values %r?" % sorted(missing_values) + ) + else: + message.append(" Did you mean %r instead?" % self.suggested.endpoint) + return u"".join(message) + + +class ValidationError(ValueError): + """Validation error. If a rule converter raises this exception the rule + does not match the current URL and the next URL is tried. + """ + + +class RuleFactory(object): + """As soon as you have more complex URL setups it's a good idea to use rule + factories to avoid repetitive tasks. Some of them are builtin, others can + be added by subclassing `RuleFactory` and overriding `get_rules`. + """ + + def get_rules(self, map): + """Subclasses of `RuleFactory` have to override this method and return + an iterable of rules.""" + raise NotImplementedError() + + +class Subdomain(RuleFactory): + """All URLs provided by this factory have the subdomain set to a + specific domain. For example if you want to use the subdomain for + the current language this can be a good setup:: + + url_map = Map([ + Rule('/', endpoint='#select_language'), + Subdomain('', [ + Rule('/', endpoint='index'), + Rule('/about', endpoint='about'), + Rule('/help', endpoint='help') + ]) + ]) + + All the rules except for the ``'#select_language'`` endpoint will now + listen on a two letter long subdomain that holds the language code + for the current request. + """ + + def __init__(self, subdomain, rules): + self.subdomain = subdomain + self.rules = rules + + def get_rules(self, map): + for rulefactory in self.rules: + for rule in rulefactory.get_rules(map): + rule = rule.empty() + rule.subdomain = self.subdomain + yield rule + + +class Submount(RuleFactory): + """Like `Subdomain` but prefixes the URL rule with a given string:: + + url_map = Map([ + Rule('/', endpoint='index'), + Submount('/blog', [ + Rule('/', endpoint='blog/index'), + Rule('/entry/', endpoint='blog/show') + ]) + ]) + + Now the rule ``'blog/show'`` matches ``/blog/entry/``. + """ + + def __init__(self, path, rules): + self.path = path.rstrip("/") + self.rules = rules + + def get_rules(self, map): + for rulefactory in self.rules: + for rule in rulefactory.get_rules(map): + rule = rule.empty() + rule.rule = self.path + rule.rule + yield rule + + +class EndpointPrefix(RuleFactory): + """Prefixes all endpoints (which must be strings for this factory) with + another string. This can be useful for sub applications:: + + url_map = Map([ + Rule('/', endpoint='index'), + EndpointPrefix('blog/', [Submount('/blog', [ + Rule('/', endpoint='index'), + Rule('/entry/', endpoint='show') + ])]) + ]) + """ + + def __init__(self, prefix, rules): + self.prefix = prefix + self.rules = rules + + def get_rules(self, map): + for rulefactory in self.rules: + for rule in rulefactory.get_rules(map): + rule = rule.empty() + rule.endpoint = self.prefix + rule.endpoint + yield rule + + +class RuleTemplate(object): + """Returns copies of the rules wrapped and expands string templates in + the endpoint, rule, defaults or subdomain sections. + + Here a small example for such a rule template:: + + from werkzeug.routing import Map, Rule, RuleTemplate + + resource = RuleTemplate([ + Rule('/$name/', endpoint='$name.list'), + Rule('/$name/', endpoint='$name.show') + ]) + + url_map = Map([resource(name='user'), resource(name='page')]) + + When a rule template is called the keyword arguments are used to + replace the placeholders in all the string parameters. + """ + + def __init__(self, rules): + self.rules = list(rules) + + def __call__(self, *args, **kwargs): + return RuleTemplateFactory(self.rules, dict(*args, **kwargs)) + + +class RuleTemplateFactory(RuleFactory): + """A factory that fills in template variables into rules. Used by + `RuleTemplate` internally. + + :internal: + """ + + def __init__(self, rules, context): + self.rules = rules + self.context = context + + def get_rules(self, map): + for rulefactory in self.rules: + for rule in rulefactory.get_rules(map): + new_defaults = subdomain = None + if rule.defaults: + new_defaults = {} + for key, value in iteritems(rule.defaults): + if isinstance(value, string_types): + value = format_string(value, self.context) + new_defaults[key] = value + if rule.subdomain is not None: + subdomain = format_string(rule.subdomain, self.context) + new_endpoint = rule.endpoint + if isinstance(new_endpoint, string_types): + new_endpoint = format_string(new_endpoint, self.context) + yield Rule( + format_string(rule.rule, self.context), + new_defaults, + subdomain, + rule.methods, + rule.build_only, + new_endpoint, + rule.strict_slashes, + ) + + +def _prefix_names(src): + """ast parse and prefix names with `.` to avoid collision with user vars""" + tree = ast.parse(src).body[0] + if isinstance(tree, ast.Expr): + tree = tree.value + for node in ast.walk(tree): + if isinstance(node, ast.Name): + node.id = "." + node.id + return tree + + +_CALL_CONVERTER_CODE_FMT = "self._converters[{elem!r}].to_url()" +_IF_KWARGS_URL_ENCODE_CODE = """\ +if kwargs: + q = '?' + params = self._encode_query_vars(kwargs) +else: + q = params = '' +""" +_IF_KWARGS_URL_ENCODE_AST = _prefix_names(_IF_KWARGS_URL_ENCODE_CODE) +_URL_ENCODE_AST_NAMES = (_prefix_names("q"), _prefix_names("params")) + + +@implements_to_string +class Rule(RuleFactory): + """A Rule represents one URL pattern. There are some options for `Rule` + that change the way it behaves and are passed to the `Rule` constructor. + Note that besides the rule-string all arguments *must* be keyword arguments + in order to not break the application on Werkzeug upgrades. + + `string` + Rule strings basically are just normal URL paths with placeholders in + the format ```` where the converter and the + arguments are optional. If no converter is defined the `default` + converter is used which means `string` in the normal configuration. + + URL rules that end with a slash are branch URLs, others are leaves. + If you have `strict_slashes` enabled (which is the default), all + branch URLs that are matched without a trailing slash will trigger a + redirect to the same URL with the missing slash appended. + + The converters are defined on the `Map`. + + `endpoint` + The endpoint for this rule. This can be anything. A reference to a + function, a string, a number etc. The preferred way is using a string + because the endpoint is used for URL generation. + + `defaults` + An optional dict with defaults for other rules with the same endpoint. + This is a bit tricky but useful if you want to have unique URLs:: + + url_map = Map([ + Rule('/all/', defaults={'page': 1}, endpoint='all_entries'), + Rule('/all/page/', endpoint='all_entries') + ]) + + If a user now visits ``http://example.com/all/page/1`` he will be + redirected to ``http://example.com/all/``. If `redirect_defaults` is + disabled on the `Map` instance this will only affect the URL + generation. + + `subdomain` + The subdomain rule string for this rule. If not specified the rule + only matches for the `default_subdomain` of the map. If the map is + not bound to a subdomain this feature is disabled. + + Can be useful if you want to have user profiles on different subdomains + and all subdomains are forwarded to your application:: + + url_map = Map([ + Rule('/', subdomain='', endpoint='user/homepage'), + Rule('/stats', subdomain='', endpoint='user/stats') + ]) + + `methods` + A sequence of http methods this rule applies to. If not specified, all + methods are allowed. For example this can be useful if you want different + endpoints for `POST` and `GET`. If methods are defined and the path + matches but the method matched against is not in this list or in the + list of another rule for that path the error raised is of the type + `MethodNotAllowed` rather than `NotFound`. If `GET` is present in the + list of methods and `HEAD` is not, `HEAD` is added automatically. + + .. versionchanged:: 0.6.1 + `HEAD` is now automatically added to the methods if `GET` is + present. The reason for this is that existing code often did not + work properly in servers not rewriting `HEAD` to `GET` + automatically and it was not documented how `HEAD` should be + treated. This was considered a bug in Werkzeug because of that. + + `strict_slashes` + Override the `Map` setting for `strict_slashes` only for this rule. If + not specified the `Map` setting is used. + + `build_only` + Set this to True and the rule will never match but will create a URL + that can be build. This is useful if you have resources on a subdomain + or folder that are not handled by the WSGI application (like static data) + + `redirect_to` + If given this must be either a string or callable. In case of a + callable it's called with the url adapter that triggered the match and + the values of the URL as keyword arguments and has to return the target + for the redirect, otherwise it has to be a string with placeholders in + rule syntax:: + + def foo_with_slug(adapter, id): + # ask the database for the slug for the old id. this of + # course has nothing to do with werkzeug. + return 'foo/' + Foo.get_slug_for_id(id) + + url_map = Map([ + Rule('/foo/', endpoint='foo'), + Rule('/some/old/url/', redirect_to='foo/'), + Rule('/other/old/url/', redirect_to=foo_with_slug) + ]) + + When the rule is matched the routing system will raise a + `RequestRedirect` exception with the target for the redirect. + + Keep in mind that the URL will be joined against the URL root of the + script so don't use a leading slash on the target URL unless you + really mean root of that domain. + + `alias` + If enabled this rule serves as an alias for another rule with the same + endpoint and arguments. + + `host` + If provided and the URL map has host matching enabled this can be + used to provide a match rule for the whole host. This also means + that the subdomain feature is disabled. + + .. versionadded:: 0.7 + The `alias` and `host` parameters were added. + """ + + def __init__( + self, + string, + defaults=None, + subdomain=None, + methods=None, + build_only=False, + endpoint=None, + strict_slashes=None, + redirect_to=None, + alias=False, + host=None, + ): + if not string.startswith("/"): + raise ValueError("urls must start with a leading slash") + self.rule = string + self.is_leaf = not string.endswith("/") + + self.map = None + self.strict_slashes = strict_slashes + self.subdomain = subdomain + self.host = host + self.defaults = defaults + self.build_only = build_only + self.alias = alias + if methods is None: + self.methods = None + else: + if isinstance(methods, str): + raise TypeError("param `methods` should be `Iterable[str]`, not `str`") + self.methods = set([x.upper() for x in methods]) + if "HEAD" not in self.methods and "GET" in self.methods: + self.methods.add("HEAD") + self.endpoint = endpoint + self.redirect_to = redirect_to + + if defaults: + self.arguments = set(map(str, defaults)) + else: + self.arguments = set() + self._trace = self._converters = self._regex = self._argument_weights = None + + def empty(self): + """ + Return an unbound copy of this rule. + + This can be useful if want to reuse an already bound URL for another + map. See ``get_empty_kwargs`` to override what keyword arguments are + provided to the new copy. + """ + return type(self)(self.rule, **self.get_empty_kwargs()) + + def get_empty_kwargs(self): + """ + Provides kwargs for instantiating empty copy with empty() + + Use this method to provide custom keyword arguments to the subclass of + ``Rule`` when calling ``some_rule.empty()``. Helpful when the subclass + has custom keyword arguments that are needed at instantiation. + + Must return a ``dict`` that will be provided as kwargs to the new + instance of ``Rule``, following the initial ``self.rule`` value which + is always provided as the first, required positional argument. + """ + defaults = None + if self.defaults: + defaults = dict(self.defaults) + return dict( + defaults=defaults, + subdomain=self.subdomain, + methods=self.methods, + build_only=self.build_only, + endpoint=self.endpoint, + strict_slashes=self.strict_slashes, + redirect_to=self.redirect_to, + alias=self.alias, + host=self.host, + ) + + def get_rules(self, map): + yield self + + def refresh(self): + """Rebinds and refreshes the URL. Call this if you modified the + rule in place. + + :internal: + """ + self.bind(self.map, rebind=True) + + def bind(self, map, rebind=False): + """Bind the url to a map and create a regular expression based on + the information from the rule itself and the defaults from the map. + + :internal: + """ + if self.map is not None and not rebind: + raise RuntimeError("url rule %r already bound to map %r" % (self, self.map)) + self.map = map + if self.strict_slashes is None: + self.strict_slashes = map.strict_slashes + if self.subdomain is None: + self.subdomain = map.default_subdomain + self.compile() + + def get_converter(self, variable_name, converter_name, args, kwargs): + """Looks up the converter for the given parameter. + + .. versionadded:: 0.9 + """ + if converter_name not in self.map.converters: + raise LookupError("the converter %r does not exist" % converter_name) + return self.map.converters[converter_name](self.map, *args, **kwargs) + + def _encode_query_vars(self, query_vars): + return url_encode( + query_vars, + charset=self.map.charset, + sort=self.map.sort_parameters, + key=self.map.sort_key, + ) + + def compile(self): + """Compiles the regular expression and stores it.""" + assert self.map is not None, "rule not bound" + + if self.map.host_matching: + domain_rule = self.host or "" + else: + domain_rule = self.subdomain or "" + + self._trace = [] + self._converters = {} + self._static_weights = [] + self._argument_weights = [] + regex_parts = [] + + def _build_regex(rule): + index = 0 + for converter, arguments, variable in parse_rule(rule): + if converter is None: + regex_parts.append(re.escape(variable)) + self._trace.append((False, variable)) + for part in variable.split("/"): + if part: + self._static_weights.append((index, -len(part))) + else: + if arguments: + c_args, c_kwargs = parse_converter_args(arguments) + else: + c_args = () + c_kwargs = {} + convobj = self.get_converter(variable, converter, c_args, c_kwargs) + regex_parts.append("(?P<%s>%s)" % (variable, convobj.regex)) + self._converters[variable] = convobj + self._trace.append((True, variable)) + self._argument_weights.append(convobj.weight) + self.arguments.add(str(variable)) + index = index + 1 + + _build_regex(domain_rule) + regex_parts.append("\\|") + self._trace.append((False, "|")) + _build_regex(self.rule if self.is_leaf else self.rule.rstrip("/")) + if not self.is_leaf: + self._trace.append((False, "/")) + + self._build = self._compile_builder(False).__get__(self, None) + self._build_unknown = self._compile_builder(True).__get__(self, None) + + if self.build_only: + return + regex = r"^%s%s$" % ( + u"".join(regex_parts), + (not self.is_leaf or not self.strict_slashes) + and "(?/?)" + or "", + ) + self._regex = re.compile(regex, re.UNICODE) + + def match(self, path, method=None): + """Check if the rule matches a given path. Path is a string in the + form ``"subdomain|/path"`` and is assembled by the map. If + the map is doing host matching the subdomain part will be the host + instead. + + If the rule matches a dict with the converted values is returned, + otherwise the return value is `None`. + + :internal: + """ + if not self.build_only: + m = self._regex.search(path) + if m is not None: + groups = m.groupdict() + # we have a folder like part of the url without a trailing + # slash and strict slashes enabled. raise an exception that + # tells the map to redirect to the same url but with a + # trailing slash + if ( + self.strict_slashes + and not self.is_leaf + and not groups.pop("__suffix__") + and ( + method is None or self.methods is None or method in self.methods + ) + ): + raise RequestSlash() + # if we are not in strict slashes mode we have to remove + # a __suffix__ + elif not self.strict_slashes: + del groups["__suffix__"] + + result = {} + for name, value in iteritems(groups): + try: + value = self._converters[name].to_python(value) + except ValidationError: + return + result[str(name)] = value + if self.defaults: + result.update(self.defaults) + + if self.alias and self.map.redirect_defaults: + raise RequestAliasRedirect(result) + + return result + + @staticmethod + def _get_func_code(code, name): + globs, locs = {}, {} + exec(code, globs, locs) + return locs[name] + + def _compile_builder(self, append_unknown=True): + defaults = self.defaults or {} + dom_ops = [] + url_ops = [] + + opl = dom_ops + for is_dynamic, data in self._trace: + if data == "|" and opl is dom_ops: + opl = url_ops + continue + # this seems like a silly case to ever come up but: + # if a default is given for a value that appears in the rule, + # resolve it to a constant ahead of time + if is_dynamic and data in defaults: + data = self._converters[data].to_url(defaults[data]) + opl.append((False, data)) + elif not is_dynamic: + opl.append( + (False, url_quote(to_bytes(data, self.map.charset), safe="/:|+")) + ) + else: + opl.append((True, data)) + + def _convert(elem): + ret = _prefix_names(_CALL_CONVERTER_CODE_FMT.format(elem=elem)) + ret.args = [ast.Name(str(elem), ast.Load())] # str for py2 + return ret + + def _parts(ops): + parts = [ + _convert(elem) if is_dynamic else ast.Str(s=elem) + for is_dynamic, elem in ops + ] + parts = parts or [ast.Str("")] + # constant fold + ret = [parts[0]] + for p in parts[1:]: + if isinstance(p, ast.Str) and isinstance(ret[-1], ast.Str): + ret[-1] = ast.Str(ret[-1].s + p.s) + else: + ret.append(p) + return ret + + dom_parts = _parts(dom_ops) + url_parts = _parts(url_ops) + if not append_unknown: + body = [] + else: + body = [_IF_KWARGS_URL_ENCODE_AST] + url_parts.extend(_URL_ENCODE_AST_NAMES) + + def _join(parts): + if len(parts) == 1: # shortcut + return parts[0] + elif hasattr(ast, "JoinedStr"): # py36+ + return ast.JoinedStr(parts) + else: + call = _prefix_names('"".join()') + call.args = [ast.Tuple(parts, ast.Load())] + return call + + body.append( + ast.Return(ast.Tuple([_join(dom_parts), _join(url_parts)], ast.Load())) + ) + + # str is necessary for python2 + pargs = [ + str(elem) + for is_dynamic, elem in dom_ops + url_ops + if is_dynamic and elem not in defaults + ] + kargs = [str(k) for k in defaults] + + func_ast = _prefix_names("def _(): pass") + func_ast.name = "".format(self.rule) + if hasattr(ast, "arg"): # py3 + func_ast.args.args.append(ast.arg(".self", None)) + for arg in pargs + kargs: + func_ast.args.args.append(ast.arg(arg, None)) + func_ast.args.kwarg = ast.arg(".kwargs", None) + else: + func_ast.args.args.append(ast.Name(".self", ast.Param())) + for arg in pargs + kargs: + func_ast.args.args.append(ast.Name(arg, ast.Param())) + func_ast.args.kwarg = ".kwargs" + for _ in kargs: + func_ast.args.defaults.append(ast.Str("")) + func_ast.body = body + + # use `ast.parse` instead of `ast.Module` for better portability + # python3.8 changes the signature of `ast.Module` + module = ast.parse("") + module.body = [func_ast] + + # mark everything as on line 1, offset 0 + # less error-prone than `ast.fix_missing_locations` + # bad line numbers cause an assert to fail in debug builds + for node in ast.walk(module): + if "lineno" in node._attributes: + node.lineno = 1 + if "col_offset" in node._attributes: + node.col_offset = 0 + + code = compile(module, "", "exec") + return self._get_func_code(code, func_ast.name) + + def build(self, values, append_unknown=True): + """Assembles the relative url for that rule and the subdomain. + If building doesn't work for some reasons `None` is returned. + + :internal: + """ + try: + if append_unknown: + return self._build_unknown(**values) + else: + return self._build(**values) + except ValidationError: + return None + + def provides_defaults_for(self, rule): + """Check if this rule has defaults for a given rule. + + :internal: + """ + return ( + not self.build_only + and self.defaults + and self.endpoint == rule.endpoint + and self != rule + and self.arguments == rule.arguments + ) + + def suitable_for(self, values, method=None): + """Check if the dict of values has enough data for url generation. + + :internal: + """ + # if a method was given explicitly and that method is not supported + # by this rule, this rule is not suitable. + if ( + method is not None + and self.methods is not None + and method not in self.methods + ): + return False + + defaults = self.defaults or () + + # all arguments required must be either in the defaults dict or + # the value dictionary otherwise it's not suitable + for key in self.arguments: + if key not in defaults and key not in values: + return False + + # in case defaults are given we ensure that either the value was + # skipped or the value is the same as the default value. + if defaults: + for key, value in iteritems(defaults): + if key in values and value != values[key]: + return False + + return True + + def match_compare_key(self): + """The match compare key for sorting. + + Current implementation: + + 1. rules without any arguments come first for performance + reasons only as we expect them to match faster and some + common ones usually don't have any arguments (index pages etc.) + 2. rules with more static parts come first so the second argument + is the negative length of the number of the static weights. + 3. we order by static weights, which is a combination of index + and length + 4. The more complex rules come first so the next argument is the + negative length of the number of argument weights. + 5. lastly we order by the actual argument weights. + + :internal: + """ + return ( + bool(self.arguments), + -len(self._static_weights), + self._static_weights, + -len(self._argument_weights), + self._argument_weights, + ) + + def build_compare_key(self): + """The build compare key for sorting. + + :internal: + """ + return 1 if self.alias else 0, -len(self.arguments), -len(self.defaults or ()) + + def __eq__(self, other): + return self.__class__ is other.__class__ and self._trace == other._trace + + __hash__ = None + + def __ne__(self, other): + return not self.__eq__(other) + + def __str__(self): + return self.rule + + @native_string_result + def __repr__(self): + if self.map is None: + return u"<%s (unbound)>" % self.__class__.__name__ + tmp = [] + for is_dynamic, data in self._trace: + if is_dynamic: + tmp.append(u"<%s>" % data) + else: + tmp.append(data) + return u"<%s %s%s -> %s>" % ( + self.__class__.__name__, + repr((u"".join(tmp)).lstrip(u"|")).lstrip(u"u"), + self.methods is not None and u" (%s)" % u", ".join(self.methods) or u"", + self.endpoint, + ) + + +class BaseConverter(object): + """Base class for all converters.""" + + regex = "[^/]+" + weight = 100 + + def __init__(self, map): + self.map = map + + def to_python(self, value): + return value + + def to_url(self, value): + if isinstance(value, (bytes, bytearray)): + return _fast_url_quote(value) + return _fast_url_quote(text_type(value).encode(self.map.charset)) + + +class UnicodeConverter(BaseConverter): + """This converter is the default converter and accepts any string but + only one path segment. Thus the string can not include a slash. + + This is the default validator. + + Example:: + + Rule('/pages/'), + Rule('/') + + :param map: the :class:`Map`. + :param minlength: the minimum length of the string. Must be greater + or equal 1. + :param maxlength: the maximum length of the string. + :param length: the exact length of the string. + """ + + def __init__(self, map, minlength=1, maxlength=None, length=None): + BaseConverter.__init__(self, map) + if length is not None: + length = "{%d}" % int(length) + else: + if maxlength is None: + maxlength = "" + else: + maxlength = int(maxlength) + length = "{%s,%s}" % (int(minlength), maxlength) + self.regex = "[^/]" + length + + +class AnyConverter(BaseConverter): + """Matches one of the items provided. Items can either be Python + identifiers or strings:: + + Rule('/') + + :param map: the :class:`Map`. + :param items: this function accepts the possible items as positional + arguments. + """ + + def __init__(self, map, *items): + BaseConverter.__init__(self, map) + self.regex = "(?:%s)" % "|".join([re.escape(x) for x in items]) + + +class PathConverter(BaseConverter): + """Like the default :class:`UnicodeConverter`, but it also matches + slashes. This is useful for wikis and similar applications:: + + Rule('/') + Rule('//edit') + + :param map: the :class:`Map`. + """ + + regex = "[^/].*?" + weight = 200 + + +class NumberConverter(BaseConverter): + """Baseclass for `IntegerConverter` and `FloatConverter`. + + :internal: + """ + + weight = 50 + + def __init__(self, map, fixed_digits=0, min=None, max=None, signed=False): + if signed: + self.regex = self.signed_regex + BaseConverter.__init__(self, map) + self.fixed_digits = fixed_digits + self.min = min + self.max = max + self.signed = signed + + def to_python(self, value): + if self.fixed_digits and len(value) != self.fixed_digits: + raise ValidationError() + value = self.num_convert(value) + if (self.min is not None and value < self.min) or ( + self.max is not None and value > self.max + ): + raise ValidationError() + return value + + def to_url(self, value): + value = self.num_convert(value) + if self.fixed_digits: + value = ("%%0%sd" % self.fixed_digits) % value + return str(value) + + @property + def signed_regex(self): + return r"-?" + self.regex + + +class IntegerConverter(NumberConverter): + """This converter only accepts integer values:: + + Rule("/page/") + + By default it only accepts unsigned, positive values. The ``signed`` + parameter will enable signed, negative values. :: + + Rule("/page/") + + :param map: The :class:`Map`. + :param fixed_digits: The number of fixed digits in the URL. If you + set this to ``4`` for example, the rule will only match if the + URL looks like ``/0001/``. The default is variable length. + :param min: The minimal value. + :param max: The maximal value. + :param signed: Allow signed (negative) values. + + .. versionadded:: 0.15 + The ``signed`` parameter. + """ + + regex = r"\d+" + num_convert = int + + +class FloatConverter(NumberConverter): + """This converter only accepts floating point values:: + + Rule("/probability/") + + By default it only accepts unsigned, positive values. The ``signed`` + parameter will enable signed, negative values. :: + + Rule("/offset/") + + :param map: The :class:`Map`. + :param min: The minimal value. + :param max: The maximal value. + :param signed: Allow signed (negative) values. + + .. versionadded:: 0.15 + The ``signed`` parameter. + """ + + regex = r"\d+\.\d+" + num_convert = float + + def __init__(self, map, min=None, max=None, signed=False): + NumberConverter.__init__(self, map, min=min, max=max, signed=signed) + + +class UUIDConverter(BaseConverter): + """This converter only accepts UUID strings:: + + Rule('/object/') + + .. versionadded:: 0.10 + + :param map: the :class:`Map`. + """ + + regex = ( + r"[A-Fa-f0-9]{8}-[A-Fa-f0-9]{4}-" + r"[A-Fa-f0-9]{4}-[A-Fa-f0-9]{4}-[A-Fa-f0-9]{12}" + ) + + def to_python(self, value): + return uuid.UUID(value) + + def to_url(self, value): + return str(value) + + +#: the default converter mapping for the map. +DEFAULT_CONVERTERS = { + "default": UnicodeConverter, + "string": UnicodeConverter, + "any": AnyConverter, + "path": PathConverter, + "int": IntegerConverter, + "float": FloatConverter, + "uuid": UUIDConverter, +} + + +class Map(object): + """The map class stores all the URL rules and some configuration + parameters. Some of the configuration values are only stored on the + `Map` instance since those affect all rules, others are just defaults + and can be overridden for each rule. Note that you have to specify all + arguments besides the `rules` as keyword arguments! + + :param rules: sequence of url rules for this map. + :param default_subdomain: The default subdomain for rules without a + subdomain defined. + :param charset: charset of the url. defaults to ``"utf-8"`` + :param strict_slashes: Take care of trailing slashes. + :param redirect_defaults: This will redirect to the default rule if it + wasn't visited that way. This helps creating + unique URLs. + :param converters: A dict of converters that adds additional converters + to the list of converters. If you redefine one + converter this will override the original one. + :param sort_parameters: If set to `True` the url parameters are sorted. + See `url_encode` for more details. + :param sort_key: The sort key function for `url_encode`. + :param encoding_errors: the error method to use for decoding + :param host_matching: if set to `True` it enables the host matching + feature and disables the subdomain one. If + enabled the `host` parameter to rules is used + instead of the `subdomain` one. + + .. versionadded:: 0.5 + `sort_parameters` and `sort_key` was added. + + .. versionadded:: 0.7 + `encoding_errors` and `host_matching` was added. + """ + + #: A dict of default converters to be used. + default_converters = ImmutableDict(DEFAULT_CONVERTERS) + + def __init__( + self, + rules=None, + default_subdomain="", + charset="utf-8", + strict_slashes=True, + redirect_defaults=True, + converters=None, + sort_parameters=False, + sort_key=None, + encoding_errors="replace", + host_matching=False, + ): + self._rules = [] + self._rules_by_endpoint = {} + self._remap = True + self._remap_lock = Lock() + + self.default_subdomain = default_subdomain + self.charset = charset + self.encoding_errors = encoding_errors + self.strict_slashes = strict_slashes + self.redirect_defaults = redirect_defaults + self.host_matching = host_matching + + self.converters = self.default_converters.copy() + if converters: + self.converters.update(converters) + + self.sort_parameters = sort_parameters + self.sort_key = sort_key + + for rulefactory in rules or (): + self.add(rulefactory) + + def is_endpoint_expecting(self, endpoint, *arguments): + """Iterate over all rules and check if the endpoint expects + the arguments provided. This is for example useful if you have + some URLs that expect a language code and others that do not and + you want to wrap the builder a bit so that the current language + code is automatically added if not provided but endpoints expect + it. + + :param endpoint: the endpoint to check. + :param arguments: this function accepts one or more arguments + as positional arguments. Each one of them is + checked. + """ + self.update() + arguments = set(arguments) + for rule in self._rules_by_endpoint[endpoint]: + if arguments.issubset(rule.arguments): + return True + return False + + def iter_rules(self, endpoint=None): + """Iterate over all rules or the rules of an endpoint. + + :param endpoint: if provided only the rules for that endpoint + are returned. + :return: an iterator + """ + self.update() + if endpoint is not None: + return iter(self._rules_by_endpoint[endpoint]) + return iter(self._rules) + + def add(self, rulefactory): + """Add a new rule or factory to the map and bind it. Requires that the + rule is not bound to another map. + + :param rulefactory: a :class:`Rule` or :class:`RuleFactory` + """ + for rule in rulefactory.get_rules(self): + rule.bind(self) + self._rules.append(rule) + self._rules_by_endpoint.setdefault(rule.endpoint, []).append(rule) + self._remap = True + + def bind( + self, + server_name, + script_name=None, + subdomain=None, + url_scheme="http", + default_method="GET", + path_info=None, + query_args=None, + ): + """Return a new :class:`MapAdapter` with the details specified to the + call. Note that `script_name` will default to ``'/'`` if not further + specified or `None`. The `server_name` at least is a requirement + because the HTTP RFC requires absolute URLs for redirects and so all + redirect exceptions raised by Werkzeug will contain the full canonical + URL. + + If no path_info is passed to :meth:`match` it will use the default path + info passed to bind. While this doesn't really make sense for + manual bind calls, it's useful if you bind a map to a WSGI + environment which already contains the path info. + + `subdomain` will default to the `default_subdomain` for this map if + no defined. If there is no `default_subdomain` you cannot use the + subdomain feature. + + .. versionadded:: 0.7 + `query_args` added + + .. versionadded:: 0.8 + `query_args` can now also be a string. + + .. versionchanged:: 0.15 + ``path_info`` defaults to ``'/'`` if ``None``. + """ + server_name = server_name.lower() + if self.host_matching: + if subdomain is not None: + raise RuntimeError("host matching enabled and a subdomain was provided") + elif subdomain is None: + subdomain = self.default_subdomain + if script_name is None: + script_name = "/" + if path_info is None: + path_info = "/" + try: + server_name = _encode_idna(server_name) + except UnicodeError: + raise BadHost() + return MapAdapter( + self, + server_name, + script_name, + subdomain, + url_scheme, + path_info, + default_method, + query_args, + ) + + def bind_to_environ(self, environ, server_name=None, subdomain=None): + """Like :meth:`bind` but you can pass it an WSGI environment and it + will fetch the information from that dictionary. Note that because of + limitations in the protocol there is no way to get the current + subdomain and real `server_name` from the environment. If you don't + provide it, Werkzeug will use `SERVER_NAME` and `SERVER_PORT` (or + `HTTP_HOST` if provided) as used `server_name` with disabled subdomain + feature. + + If `subdomain` is `None` but an environment and a server name is + provided it will calculate the current subdomain automatically. + Example: `server_name` is ``'example.com'`` and the `SERVER_NAME` + in the wsgi `environ` is ``'staging.dev.example.com'`` the calculated + subdomain will be ``'staging.dev'``. + + If the object passed as environ has an environ attribute, the value of + this attribute is used instead. This allows you to pass request + objects. Additionally `PATH_INFO` added as a default of the + :class:`MapAdapter` so that you don't have to pass the path info to + the match method. + + .. versionchanged:: 0.5 + previously this method accepted a bogus `calculate_subdomain` + parameter that did not have any effect. It was removed because + of that. + + .. versionchanged:: 0.8 + This will no longer raise a ValueError when an unexpected server + name was passed. + + :param environ: a WSGI environment. + :param server_name: an optional server name hint (see above). + :param subdomain: optionally the current subdomain (see above). + """ + environ = _get_environ(environ) + + wsgi_server_name = get_host(environ).lower() + + if server_name is None: + server_name = wsgi_server_name + else: + server_name = server_name.lower() + + if subdomain is None and not self.host_matching: + cur_server_name = wsgi_server_name.split(".") + real_server_name = server_name.split(".") + offset = -len(real_server_name) + if cur_server_name[offset:] != real_server_name: + # This can happen even with valid configs if the server was + # accesssed directly by IP address under some situations. + # Instead of raising an exception like in Werkzeug 0.7 or + # earlier we go by an invalid subdomain which will result + # in a 404 error on matching. + subdomain = "" + else: + subdomain = ".".join(filter(None, cur_server_name[:offset])) + + def _get_wsgi_string(name): + val = environ.get(name) + if val is not None: + return wsgi_decoding_dance(val, self.charset) + + script_name = _get_wsgi_string("SCRIPT_NAME") + path_info = _get_wsgi_string("PATH_INFO") + query_args = _get_wsgi_string("QUERY_STRING") + return Map.bind( + self, + server_name, + script_name, + subdomain, + environ["wsgi.url_scheme"], + environ["REQUEST_METHOD"], + path_info, + query_args=query_args, + ) + + def update(self): + """Called before matching and building to keep the compiled rules + in the correct order after things changed. + """ + if not self._remap: + return + + with self._remap_lock: + if not self._remap: + return + + self._rules.sort(key=lambda x: x.match_compare_key()) + for rules in itervalues(self._rules_by_endpoint): + rules.sort(key=lambda x: x.build_compare_key()) + self._remap = False + + def __repr__(self): + rules = self.iter_rules() + return "%s(%s)" % (self.__class__.__name__, pformat(list(rules))) + + +class MapAdapter(object): + + """Returned by :meth:`Map.bind` or :meth:`Map.bind_to_environ` and does + the URL matching and building based on runtime information. + """ + + def __init__( + self, + map, + server_name, + script_name, + subdomain, + url_scheme, + path_info, + default_method, + query_args=None, + ): + self.map = map + self.server_name = to_unicode(server_name) + script_name = to_unicode(script_name) + if not script_name.endswith(u"/"): + script_name += u"/" + self.script_name = script_name + self.subdomain = to_unicode(subdomain) + self.url_scheme = to_unicode(url_scheme) + self.path_info = to_unicode(path_info) + self.default_method = to_unicode(default_method) + self.query_args = query_args + + def dispatch( + self, view_func, path_info=None, method=None, catch_http_exceptions=False + ): + """Does the complete dispatching process. `view_func` is called with + the endpoint and a dict with the values for the view. It should + look up the view function, call it, and return a response object + or WSGI application. http exceptions are not caught by default + so that applications can display nicer error messages by just + catching them by hand. If you want to stick with the default + error messages you can pass it ``catch_http_exceptions=True`` and + it will catch the http exceptions. + + Here a small example for the dispatch usage:: + + from werkzeug.wrappers import Request, Response + from werkzeug.wsgi import responder + from werkzeug.routing import Map, Rule + + def on_index(request): + return Response('Hello from the index') + + url_map = Map([Rule('/', endpoint='index')]) + views = {'index': on_index} + + @responder + def application(environ, start_response): + request = Request(environ) + urls = url_map.bind_to_environ(environ) + return urls.dispatch(lambda e, v: views[e](request, **v), + catch_http_exceptions=True) + + Keep in mind that this method might return exception objects, too, so + use :class:`Response.force_type` to get a response object. + + :param view_func: a function that is called with the endpoint as + first argument and the value dict as second. Has + to dispatch to the actual view function with this + information. (see above) + :param path_info: the path info to use for matching. Overrides the + path info specified on binding. + :param method: the HTTP method used for matching. Overrides the + method specified on binding. + :param catch_http_exceptions: set to `True` to catch any of the + werkzeug :class:`HTTPException`\\s. + """ + try: + try: + endpoint, args = self.match(path_info, method) + except RequestRedirect as e: + return e + return view_func(endpoint, args) + except HTTPException as e: + if catch_http_exceptions: + return e + raise + + def match(self, path_info=None, method=None, return_rule=False, query_args=None): + """The usage is simple: you just pass the match method the current + path info as well as the method (which defaults to `GET`). The + following things can then happen: + + - you receive a `NotFound` exception that indicates that no URL is + matching. A `NotFound` exception is also a WSGI application you + can call to get a default page not found page (happens to be the + same object as `werkzeug.exceptions.NotFound`) + + - you receive a `MethodNotAllowed` exception that indicates that there + is a match for this URL but not for the current request method. + This is useful for RESTful applications. + + - you receive a `RequestRedirect` exception with a `new_url` + attribute. This exception is used to notify you about a request + Werkzeug requests from your WSGI application. This is for example the + case if you request ``/foo`` although the correct URL is ``/foo/`` + You can use the `RequestRedirect` instance as response-like object + similar to all other subclasses of `HTTPException`. + + - you get a tuple in the form ``(endpoint, arguments)`` if there is + a match (unless `return_rule` is True, in which case you get a tuple + in the form ``(rule, arguments)``) + + If the path info is not passed to the match method the default path + info of the map is used (defaults to the root URL if not defined + explicitly). + + All of the exceptions raised are subclasses of `HTTPException` so they + can be used as WSGI responses. They will all render generic error or + redirect pages. + + Here is a small example for matching: + + >>> m = Map([ + ... Rule('/', endpoint='index'), + ... Rule('/downloads/', endpoint='downloads/index'), + ... Rule('/downloads/', endpoint='downloads/show') + ... ]) + >>> urls = m.bind("example.com", "/") + >>> urls.match("/", "GET") + ('index', {}) + >>> urls.match("/downloads/42") + ('downloads/show', {'id': 42}) + + And here is what happens on redirect and missing URLs: + + >>> urls.match("/downloads") + Traceback (most recent call last): + ... + RequestRedirect: http://example.com/downloads/ + >>> urls.match("/missing") + Traceback (most recent call last): + ... + NotFound: 404 Not Found + + :param path_info: the path info to use for matching. Overrides the + path info specified on binding. + :param method: the HTTP method used for matching. Overrides the + method specified on binding. + :param return_rule: return the rule that matched instead of just the + endpoint (defaults to `False`). + :param query_args: optional query arguments that are used for + automatic redirects as string or dictionary. It's + currently not possible to use the query arguments + for URL matching. + + .. versionadded:: 0.6 + `return_rule` was added. + + .. versionadded:: 0.7 + `query_args` was added. + + .. versionchanged:: 0.8 + `query_args` can now also be a string. + """ + self.map.update() + if path_info is None: + path_info = self.path_info + else: + path_info = to_unicode(path_info, self.map.charset) + if query_args is None: + query_args = self.query_args + method = (method or self.default_method).upper() + + path = u"%s|%s" % ( + self.map.host_matching and self.server_name or self.subdomain, + path_info and "/%s" % path_info.lstrip("/"), + ) + + have_match_for = set() + for rule in self.map._rules: + try: + rv = rule.match(path, method) + except RequestSlash: + raise RequestRedirect( + self.make_redirect_url( + url_quote(path_info, self.map.charset, safe="/:|+") + "/", + query_args, + ) + ) + except RequestAliasRedirect as e: + raise RequestRedirect( + self.make_alias_redirect_url( + path, rule.endpoint, e.matched_values, method, query_args + ) + ) + if rv is None: + continue + if rule.methods is not None and method not in rule.methods: + have_match_for.update(rule.methods) + continue + + if self.map.redirect_defaults: + redirect_url = self.get_default_redirect(rule, method, rv, query_args) + if redirect_url is not None: + raise RequestRedirect(redirect_url) + + if rule.redirect_to is not None: + if isinstance(rule.redirect_to, string_types): + + def _handle_match(match): + value = rv[match.group(1)] + return rule._converters[match.group(1)].to_url(value) + + redirect_url = _simple_rule_re.sub(_handle_match, rule.redirect_to) + else: + redirect_url = rule.redirect_to(self, **rv) + raise RequestRedirect( + str( + url_join( + "%s://%s%s%s" + % ( + self.url_scheme or "http", + self.subdomain + "." if self.subdomain else "", + self.server_name, + self.script_name, + ), + redirect_url, + ) + ) + ) + + if return_rule: + return rule, rv + else: + return rule.endpoint, rv + + if have_match_for: + raise MethodNotAllowed(valid_methods=list(have_match_for)) + raise NotFound() + + def test(self, path_info=None, method=None): + """Test if a rule would match. Works like `match` but returns `True` + if the URL matches, or `False` if it does not exist. + + :param path_info: the path info to use for matching. Overrides the + path info specified on binding. + :param method: the HTTP method used for matching. Overrides the + method specified on binding. + """ + try: + self.match(path_info, method) + except RequestRedirect: + pass + except HTTPException: + return False + return True + + def allowed_methods(self, path_info=None): + """Returns the valid methods that match for a given path. + + .. versionadded:: 0.7 + """ + try: + self.match(path_info, method="--") + except MethodNotAllowed as e: + return e.valid_methods + except HTTPException: + pass + return [] + + def get_host(self, domain_part): + """Figures out the full host name for the given domain part. The + domain part is a subdomain in case host matching is disabled or + a full host name. + """ + if self.map.host_matching: + if domain_part is None: + return self.server_name + return to_unicode(domain_part, "ascii") + subdomain = domain_part + if subdomain is None: + subdomain = self.subdomain + else: + subdomain = to_unicode(subdomain, "ascii") + return (subdomain + u"." if subdomain else u"") + self.server_name + + def get_default_redirect(self, rule, method, values, query_args): + """A helper that returns the URL to redirect to if it finds one. + This is used for default redirecting only. + + :internal: + """ + assert self.map.redirect_defaults + for r in self.map._rules_by_endpoint[rule.endpoint]: + # every rule that comes after this one, including ourself + # has a lower priority for the defaults. We order the ones + # with the highest priority up for building. + if r is rule: + break + if r.provides_defaults_for(rule) and r.suitable_for(values, method): + values.update(r.defaults) + domain_part, path = r.build(values) + return self.make_redirect_url(path, query_args, domain_part=domain_part) + + def encode_query_args(self, query_args): + if not isinstance(query_args, string_types): + query_args = url_encode(query_args, self.map.charset) + return query_args + + def make_redirect_url(self, path_info, query_args=None, domain_part=None): + """Creates a redirect URL. + + :internal: + """ + suffix = "" + if query_args: + suffix = "?" + self.encode_query_args(query_args) + return str( + "%s://%s/%s%s" + % ( + self.url_scheme or "http", + self.get_host(domain_part), + posixpath.join( + self.script_name[:-1].lstrip("/"), path_info.lstrip("/") + ), + suffix, + ) + ) + + def make_alias_redirect_url(self, path, endpoint, values, method, query_args): + """Internally called to make an alias redirect URL.""" + url = self.build( + endpoint, values, method, append_unknown=False, force_external=True + ) + if query_args: + url += "?" + self.encode_query_args(query_args) + assert url != path, "detected invalid alias setting. No canonical URL found" + return url + + def _partial_build(self, endpoint, values, method, append_unknown): + """Helper for :meth:`build`. Returns subdomain and path for the + rule that accepts this endpoint, values and method. + + :internal: + """ + # in case the method is none, try with the default method first + if method is None: + rv = self._partial_build( + endpoint, values, self.default_method, append_unknown + ) + if rv is not None: + return rv + + # default method did not match or a specific method is passed, + # check all and go with first result. + for rule in self.map._rules_by_endpoint.get(endpoint, ()): + if rule.suitable_for(values, method): + rv = rule.build(values, append_unknown) + if rv is not None: + return rv + + def build( + self, + endpoint, + values=None, + method=None, + force_external=False, + append_unknown=True, + ): + """Building URLs works pretty much the other way round. Instead of + `match` you call `build` and pass it the endpoint and a dict of + arguments for the placeholders. + + The `build` function also accepts an argument called `force_external` + which, if you set it to `True` will force external URLs. Per default + external URLs (include the server name) will only be used if the + target URL is on a different subdomain. + + >>> m = Map([ + ... Rule('/', endpoint='index'), + ... Rule('/downloads/', endpoint='downloads/index'), + ... Rule('/downloads/', endpoint='downloads/show') + ... ]) + >>> urls = m.bind("example.com", "/") + >>> urls.build("index", {}) + '/' + >>> urls.build("downloads/show", {'id': 42}) + '/downloads/42' + >>> urls.build("downloads/show", {'id': 42}, force_external=True) + 'http://example.com/downloads/42' + + Because URLs cannot contain non ASCII data you will always get + bytestrings back. Non ASCII characters are urlencoded with the + charset defined on the map instance. + + Additional values are converted to unicode and appended to the URL as + URL querystring parameters: + + >>> urls.build("index", {'q': 'My Searchstring'}) + '/?q=My+Searchstring' + + When processing those additional values, lists are furthermore + interpreted as multiple values (as per + :py:class:`werkzeug.datastructures.MultiDict`): + + >>> urls.build("index", {'q': ['a', 'b', 'c']}) + '/?q=a&q=b&q=c' + + Passing a ``MultiDict`` will also add multiple values: + + >>> urls.build("index", MultiDict((('p', 'z'), ('q', 'a'), ('q', 'b')))) + '/?p=z&q=a&q=b' + + If a rule does not exist when building a `BuildError` exception is + raised. + + The build method accepts an argument called `method` which allows you + to specify the method you want to have an URL built for if you have + different methods for the same endpoint specified. + + .. versionadded:: 0.6 + the `append_unknown` parameter was added. + + :param endpoint: the endpoint of the URL to build. + :param values: the values for the URL to build. Unhandled values are + appended to the URL as query parameters. + :param method: the HTTP method for the rule if there are different + URLs for different methods on the same endpoint. + :param force_external: enforce full canonical external URLs. If the URL + scheme is not provided, this will generate + a protocol-relative URL. + :param append_unknown: unknown parameters are appended to the generated + URL as query string argument. Disable this + if you want the builder to ignore those. + """ + self.map.update() + + if values: + if isinstance(values, MultiDict): + temp_values = {} + # iteritems(dict, values) is like `values.lists()` + # without the call or `list()` coercion overhead. + for key, value in iteritems(dict, values): + if not value: + continue + if len(value) == 1: # flatten single item lists + value = value[0] + if value is None: # drop None + continue + temp_values[key] = value + values = temp_values + else: + # drop None + values = dict(i for i in iteritems(values) if i[1] is not None) + else: + values = {} + + rv = self._partial_build(endpoint, values, method, append_unknown) + if rv is None: + raise BuildError(endpoint, values, method, self) + domain_part, path = rv + + host = self.get_host(domain_part) + + # shortcut this. + if not force_external and ( + (self.map.host_matching and host == self.server_name) + or (not self.map.host_matching and domain_part == self.subdomain) + ): + return "%s/%s" % (self.script_name.rstrip("/"), path.lstrip("/")) + return str( + "%s//%s%s/%s" + % ( + self.url_scheme + ":" if self.url_scheme else "", + host, + self.script_name[:-1], + path.lstrip("/"), + ) + ) diff --git a/week-0/day-3/my_todo_app/venv/lib/python3.6/site-packages/werkzeug/security.py b/week-0/day-3/my_todo_app/venv/lib/python3.6/site-packages/werkzeug/security.py new file mode 100644 index 00000000..2308040d --- /dev/null +++ b/week-0/day-3/my_todo_app/venv/lib/python3.6/site-packages/werkzeug/security.py @@ -0,0 +1,249 @@ +# -*- coding: utf-8 -*- +""" + werkzeug.security + ~~~~~~~~~~~~~~~~~ + + Security related helpers such as secure password hashing tools. + + :copyright: 2007 Pallets + :license: BSD-3-Clause +""" +import codecs +import hashlib +import hmac +import os +import posixpath +from random import SystemRandom +from struct import Struct + +from ._compat import izip +from ._compat import PY2 +from ._compat import range_type +from ._compat import text_type +from ._compat import to_bytes +from ._compat import to_native + +SALT_CHARS = "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789" +DEFAULT_PBKDF2_ITERATIONS = 150000 + +_pack_int = Struct(">I").pack +_builtin_safe_str_cmp = getattr(hmac, "compare_digest", None) +_sys_rng = SystemRandom() +_os_alt_seps = list( + sep for sep in [os.path.sep, os.path.altsep] if sep not in (None, "/") +) + + +def pbkdf2_hex( + data, salt, iterations=DEFAULT_PBKDF2_ITERATIONS, keylen=None, hashfunc=None +): + """Like :func:`pbkdf2_bin`, but returns a hex-encoded string. + + .. versionadded:: 0.9 + + :param data: the data to derive. + :param salt: the salt for the derivation. + :param iterations: the number of iterations. + :param keylen: the length of the resulting key. If not provided, + the digest size will be used. + :param hashfunc: the hash function to use. This can either be the + string name of a known hash function, or a function + from the hashlib module. Defaults to sha256. + """ + rv = pbkdf2_bin(data, salt, iterations, keylen, hashfunc) + return to_native(codecs.encode(rv, "hex_codec")) + + +def pbkdf2_bin( + data, salt, iterations=DEFAULT_PBKDF2_ITERATIONS, keylen=None, hashfunc=None +): + """Returns a binary digest for the PBKDF2 hash algorithm of `data` + with the given `salt`. It iterates `iterations` times and produces a + key of `keylen` bytes. By default, SHA-256 is used as hash function; + a different hashlib `hashfunc` can be provided. + + .. versionadded:: 0.9 + + :param data: the data to derive. + :param salt: the salt for the derivation. + :param iterations: the number of iterations. + :param keylen: the length of the resulting key. If not provided + the digest size will be used. + :param hashfunc: the hash function to use. This can either be the + string name of a known hash function or a function + from the hashlib module. Defaults to sha256. + """ + if not hashfunc: + hashfunc = "sha256" + + data = to_bytes(data) + salt = to_bytes(salt) + + if callable(hashfunc): + _test_hash = hashfunc() + hash_name = getattr(_test_hash, "name", None) + else: + hash_name = hashfunc + return hashlib.pbkdf2_hmac(hash_name, data, salt, iterations, keylen) + + +def safe_str_cmp(a, b): + """This function compares strings in somewhat constant time. This + requires that the length of at least one string is known in advance. + + Returns `True` if the two strings are equal, or `False` if they are not. + + .. versionadded:: 0.7 + """ + if isinstance(a, text_type): + a = a.encode("utf-8") + if isinstance(b, text_type): + b = b.encode("utf-8") + + if _builtin_safe_str_cmp is not None: + return _builtin_safe_str_cmp(a, b) + + if len(a) != len(b): + return False + + rv = 0 + if PY2: + for x, y in izip(a, b): + rv |= ord(x) ^ ord(y) + else: + for x, y in izip(a, b): + rv |= x ^ y + + return rv == 0 + + +def gen_salt(length): + """Generate a random string of SALT_CHARS with specified ``length``.""" + if length <= 0: + raise ValueError("Salt length must be positive") + return "".join(_sys_rng.choice(SALT_CHARS) for _ in range_type(length)) + + +def _hash_internal(method, salt, password): + """Internal password hash helper. Supports plaintext without salt, + unsalted and salted passwords. In case salted passwords are used + hmac is used. + """ + if method == "plain": + return password, method + + if isinstance(password, text_type): + password = password.encode("utf-8") + + if method.startswith("pbkdf2:"): + args = method[7:].split(":") + if len(args) not in (1, 2): + raise ValueError("Invalid number of arguments for PBKDF2") + method = args.pop(0) + iterations = args and int(args[0] or 0) or DEFAULT_PBKDF2_ITERATIONS + is_pbkdf2 = True + actual_method = "pbkdf2:%s:%d" % (method, iterations) + else: + is_pbkdf2 = False + actual_method = method + + if is_pbkdf2: + if not salt: + raise ValueError("Salt is required for PBKDF2") + rv = pbkdf2_hex(password, salt, iterations, hashfunc=method) + elif salt: + if isinstance(salt, text_type): + salt = salt.encode("utf-8") + mac = _create_mac(salt, password, method) + rv = mac.hexdigest() + else: + rv = hashlib.new(method, password).hexdigest() + return rv, actual_method + + +def _create_mac(key, msg, method): + if callable(method): + return hmac.HMAC(key, msg, method) + + def hashfunc(d=b""): + return hashlib.new(method, d) + + # Python 2.7 used ``hasattr(digestmod, '__call__')`` + # to detect if hashfunc is callable + hashfunc.__call__ = hashfunc + return hmac.HMAC(key, msg, hashfunc) + + +def generate_password_hash(password, method="pbkdf2:sha256", salt_length=8): + """Hash a password with the given method and salt with a string of + the given length. The format of the string returned includes the method + that was used so that :func:`check_password_hash` can check the hash. + + The format for the hashed string looks like this:: + + method$salt$hash + + This method can **not** generate unsalted passwords but it is possible + to set param method='plain' in order to enforce plaintext passwords. + If a salt is used, hmac is used internally to salt the password. + + If PBKDF2 is wanted it can be enabled by setting the method to + ``pbkdf2:method:iterations`` where iterations is optional:: + + pbkdf2:sha256:80000$salt$hash + pbkdf2:sha256$salt$hash + + :param password: the password to hash. + :param method: the hash method to use (one that hashlib supports). Can + optionally be in the format ``pbkdf2:[:iterations]`` + to enable PBKDF2. + :param salt_length: the length of the salt in letters. + """ + salt = gen_salt(salt_length) if method != "plain" else "" + h, actual_method = _hash_internal(method, salt, password) + return "%s$%s$%s" % (actual_method, salt, h) + + +def check_password_hash(pwhash, password): + """check a password against a given salted and hashed password value. + In order to support unsalted legacy passwords this method supports + plain text passwords, md5 and sha1 hashes (both salted and unsalted). + + Returns `True` if the password matched, `False` otherwise. + + :param pwhash: a hashed string like returned by + :func:`generate_password_hash`. + :param password: the plaintext password to compare against the hash. + """ + if pwhash.count("$") < 2: + return False + method, salt, hashval = pwhash.split("$", 2) + return safe_str_cmp(_hash_internal(method, salt, password)[0], hashval) + + +def safe_join(directory, *pathnames): + """Safely join zero or more untrusted path components to a base + directory to avoid escaping the base directory. + + :param directory: The trusted base directory. + :param pathnames: The untrusted path components relative to the + base directory. + :return: A safe path, otherwise ``None``. + """ + parts = [directory] + + for filename in pathnames: + if filename != "": + filename = posixpath.normpath(filename) + + if ( + any(sep in filename for sep in _os_alt_seps) + or os.path.isabs(filename) + or filename == ".." + or filename.startswith("../") + ): + return None + + parts.append(filename) + + return posixpath.join(*parts) diff --git a/week-0/day-3/my_todo_app/venv/lib/python3.6/site-packages/werkzeug/serving.py b/week-0/day-3/my_todo_app/venv/lib/python3.6/site-packages/werkzeug/serving.py new file mode 100644 index 00000000..ff9f8805 --- /dev/null +++ b/week-0/day-3/my_todo_app/venv/lib/python3.6/site-packages/werkzeug/serving.py @@ -0,0 +1,1074 @@ +# -*- coding: utf-8 -*- +""" + werkzeug.serving + ~~~~~~~~~~~~~~~~ + + There are many ways to serve a WSGI application. While you're developing + it you usually don't want a full blown webserver like Apache but a simple + standalone one. From Python 2.5 onwards there is the `wsgiref`_ server in + the standard library. If you're using older versions of Python you can + download the package from the cheeseshop. + + However there are some caveats. Sourcecode won't reload itself when + changed and each time you kill the server using ``^C`` you get an + `KeyboardInterrupt` error. While the latter is easy to solve the first + one can be a pain in the ass in some situations. + + The easiest way is creating a small ``start-myproject.py`` that runs the + application:: + + #!/usr/bin/env python + # -*- coding: utf-8 -*- + from myproject import make_app + from werkzeug.serving import run_simple + + app = make_app(...) + run_simple('localhost', 8080, app, use_reloader=True) + + You can also pass it a `extra_files` keyword argument with a list of + additional files (like configuration files) you want to observe. + + For bigger applications you should consider using `click` + (http://click.pocoo.org) instead of a simple start file. + + + :copyright: 2007 Pallets + :license: BSD-3-Clause +""" +import io +import os +import signal +import socket +import sys + +import werkzeug +from ._compat import PY2 +from ._compat import reraise +from ._compat import WIN +from ._compat import wsgi_encoding_dance +from ._internal import _log +from .exceptions import InternalServerError +from .urls import uri_to_iri +from .urls import url_parse +from .urls import url_unquote + +try: + import socketserver + from http.server import BaseHTTPRequestHandler + from http.server import HTTPServer +except ImportError: + import SocketServer as socketserver + from BaseHTTPServer import HTTPServer + from BaseHTTPServer import BaseHTTPRequestHandler + +try: + import ssl +except ImportError: + + class _SslDummy(object): + def __getattr__(self, name): + raise RuntimeError("SSL support unavailable") + + ssl = _SslDummy() + +try: + import termcolor +except ImportError: + termcolor = None + + +def _get_openssl_crypto_module(): + try: + from OpenSSL import crypto + except ImportError: + raise TypeError("Using ad-hoc certificates requires the pyOpenSSL library.") + else: + return crypto + + +ThreadingMixIn = socketserver.ThreadingMixIn +can_fork = hasattr(os, "fork") + +if can_fork: + ForkingMixIn = socketserver.ForkingMixIn +else: + + class ForkingMixIn(object): + pass + + +try: + af_unix = socket.AF_UNIX +except AttributeError: + af_unix = None + + +LISTEN_QUEUE = 128 +can_open_by_fd = not WIN and hasattr(socket, "fromfd") + +# On Python 3, ConnectionError represents the same errnos as +# socket.error from Python 2, while socket.error is an alias for the +# more generic OSError. +if PY2: + _ConnectionError = socket.error +else: + _ConnectionError = ConnectionError + + +class DechunkedInput(io.RawIOBase): + """An input stream that handles Transfer-Encoding 'chunked'""" + + def __init__(self, rfile): + self._rfile = rfile + self._done = False + self._len = 0 + + def readable(self): + return True + + def read_chunk_len(self): + try: + line = self._rfile.readline().decode("latin1") + _len = int(line.strip(), 16) + except ValueError: + raise IOError("Invalid chunk header") + if _len < 0: + raise IOError("Negative chunk length not allowed") + return _len + + def readinto(self, buf): + read = 0 + while not self._done and read < len(buf): + if self._len == 0: + # This is the first chunk or we fully consumed the previous + # one. Read the next length of the next chunk + self._len = self.read_chunk_len() + + if self._len == 0: + # Found the final chunk of size 0. The stream is now exhausted, + # but there is still a final newline that should be consumed + self._done = True + + if self._len > 0: + # There is data (left) in this chunk, so append it to the + # buffer. If this operation fully consumes the chunk, this will + # reset self._len to 0. + n = min(len(buf), self._len) + buf[read : read + n] = self._rfile.read(n) + self._len -= n + read += n + + if self._len == 0: + # Skip the terminating newline of a chunk that has been fully + # consumed. This also applies to the 0-sized final chunk + terminator = self._rfile.readline() + if terminator not in (b"\n", b"\r\n", b"\r"): + raise IOError("Missing chunk terminating newline") + + return read + + +class WSGIRequestHandler(BaseHTTPRequestHandler, object): + + """A request handler that implements WSGI dispatching.""" + + @property + def server_version(self): + return "Werkzeug/" + werkzeug.__version__ + + def make_environ(self): + request_url = url_parse(self.path) + + def shutdown_server(): + self.server.shutdown_signal = True + + url_scheme = "http" if self.server.ssl_context is None else "https" + if not self.client_address: + self.client_address = "" + if isinstance(self.client_address, str): + self.client_address = (self.client_address, 0) + else: + pass + path_info = url_unquote(request_url.path) + + environ = { + "wsgi.version": (1, 0), + "wsgi.url_scheme": url_scheme, + "wsgi.input": self.rfile, + "wsgi.errors": sys.stderr, + "wsgi.multithread": self.server.multithread, + "wsgi.multiprocess": self.server.multiprocess, + "wsgi.run_once": False, + "werkzeug.server.shutdown": shutdown_server, + "SERVER_SOFTWARE": self.server_version, + "REQUEST_METHOD": self.command, + "SCRIPT_NAME": "", + "PATH_INFO": wsgi_encoding_dance(path_info), + "QUERY_STRING": wsgi_encoding_dance(request_url.query), + # Non-standard, added by mod_wsgi, uWSGI + "REQUEST_URI": wsgi_encoding_dance(self.path), + # Non-standard, added by gunicorn + "RAW_URI": wsgi_encoding_dance(self.path), + "REMOTE_ADDR": self.address_string(), + "REMOTE_PORT": self.port_integer(), + "SERVER_NAME": self.server.server_address[0], + "SERVER_PORT": str(self.server.server_address[1]), + "SERVER_PROTOCOL": self.request_version, + } + + for key, value in self.get_header_items(): + key = key.upper().replace("-", "_") + value = value.replace("\r\n", "") + if key not in ("CONTENT_TYPE", "CONTENT_LENGTH"): + key = "HTTP_" + key + if key in environ: + value = "{},{}".format(environ[key], value) + environ[key] = value + + if environ.get("HTTP_TRANSFER_ENCODING", "").strip().lower() == "chunked": + environ["wsgi.input_terminated"] = True + environ["wsgi.input"] = DechunkedInput(environ["wsgi.input"]) + + if request_url.scheme and request_url.netloc: + environ["HTTP_HOST"] = request_url.netloc + + return environ + + def run_wsgi(self): + if self.headers.get("Expect", "").lower().strip() == "100-continue": + self.wfile.write(b"HTTP/1.1 100 Continue\r\n\r\n") + + self.environ = environ = self.make_environ() + headers_set = [] + headers_sent = [] + + def write(data): + assert headers_set, "write() before start_response" + if not headers_sent: + status, response_headers = headers_sent[:] = headers_set + try: + code, msg = status.split(None, 1) + except ValueError: + code, msg = status, "" + code = int(code) + self.send_response(code, msg) + header_keys = set() + for key, value in response_headers: + self.send_header(key, value) + key = key.lower() + header_keys.add(key) + if not ( + "content-length" in header_keys + or environ["REQUEST_METHOD"] == "HEAD" + or code < 200 + or code in (204, 304) + ): + self.close_connection = True + self.send_header("Connection", "close") + if "server" not in header_keys: + self.send_header("Server", self.version_string()) + if "date" not in header_keys: + self.send_header("Date", self.date_time_string()) + self.end_headers() + + assert isinstance(data, bytes), "applications must write bytes" + self.wfile.write(data) + self.wfile.flush() + + def start_response(status, response_headers, exc_info=None): + if exc_info: + try: + if headers_sent: + reraise(*exc_info) + finally: + exc_info = None + elif headers_set: + raise AssertionError("Headers already set") + headers_set[:] = [status, response_headers] + return write + + def execute(app): + application_iter = app(environ, start_response) + try: + for data in application_iter: + write(data) + if not headers_sent: + write(b"") + finally: + if hasattr(application_iter, "close"): + application_iter.close() + application_iter = None + + try: + execute(self.server.app) + except (_ConnectionError, socket.timeout) as e: + self.connection_dropped(e, environ) + except Exception: + if self.server.passthrough_errors: + raise + from .debug.tbtools import get_current_traceback + + traceback = get_current_traceback(ignore_system_exceptions=True) + try: + # if we haven't yet sent the headers but they are set + # we roll back to be able to set them again. + if not headers_sent: + del headers_set[:] + execute(InternalServerError()) + except Exception: + pass + self.server.log("error", "Error on request:\n%s", traceback.plaintext) + + def handle(self): + """Handles a request ignoring dropped connections.""" + rv = None + try: + rv = BaseHTTPRequestHandler.handle(self) + except (_ConnectionError, socket.timeout) as e: + self.connection_dropped(e) + except Exception as e: + if self.server.ssl_context is None or not is_ssl_error(e): + raise + if self.server.shutdown_signal: + self.initiate_shutdown() + return rv + + def initiate_shutdown(self): + """A horrible, horrible way to kill the server for Python 2.6 and + later. It's the best we can do. + """ + # Windows does not provide SIGKILL, go with SIGTERM then. + sig = getattr(signal, "SIGKILL", signal.SIGTERM) + # reloader active + if is_running_from_reloader(): + os.kill(os.getpid(), sig) + # python 2.7 + self.server._BaseServer__shutdown_request = True + # python 2.6 + self.server._BaseServer__serving = False + + def connection_dropped(self, error, environ=None): + """Called if the connection was closed by the client. By default + nothing happens. + """ + + def handle_one_request(self): + """Handle a single HTTP request.""" + self.raw_requestline = self.rfile.readline() + if not self.raw_requestline: + self.close_connection = 1 + elif self.parse_request(): + return self.run_wsgi() + + def send_response(self, code, message=None): + """Send the response header and log the response code.""" + self.log_request(code) + if message is None: + message = code in self.responses and self.responses[code][0] or "" + if self.request_version != "HTTP/0.9": + hdr = "%s %d %s\r\n" % (self.protocol_version, code, message) + self.wfile.write(hdr.encode("ascii")) + + def version_string(self): + return BaseHTTPRequestHandler.version_string(self).strip() + + def address_string(self): + if getattr(self, "environ", None): + return self.environ["REMOTE_ADDR"] + elif not self.client_address: + return "" + elif isinstance(self.client_address, str): + return self.client_address + else: + return self.client_address[0] + + def port_integer(self): + return self.client_address[1] + + def log_request(self, code="-", size="-"): + try: + path = uri_to_iri(self.path) + msg = "%s %s %s" % (self.command, path, self.request_version) + except AttributeError: + # path isn't set if the requestline was bad + msg = self.requestline + + code = str(code) + + if termcolor: + color = termcolor.colored + + if code[0] == "1": # 1xx - Informational + msg = color(msg, attrs=["bold"]) + elif code[0] == "2": # 2xx - Success + msg = color(msg, color="white") + elif code == "304": # 304 - Resource Not Modified + msg = color(msg, color="cyan") + elif code[0] == "3": # 3xx - Redirection + msg = color(msg, color="green") + elif code == "404": # 404 - Resource Not Found + msg = color(msg, color="yellow") + elif code[0] == "4": # 4xx - Client Error + msg = color(msg, color="red", attrs=["bold"]) + else: # 5xx, or any other response + msg = color(msg, color="magenta", attrs=["bold"]) + + self.log("info", '"%s" %s %s', msg, code, size) + + def log_error(self, *args): + self.log("error", *args) + + def log_message(self, format, *args): + self.log("info", format, *args) + + def log(self, type, message, *args): + _log( + type, + "%s - - [%s] %s\n" + % (self.address_string(), self.log_date_time_string(), message % args), + ) + + def get_header_items(self): + """ + Get an iterable list of key/value pairs representing headers. + + This function provides Python 2/3 compatibility as related to the + parsing of request headers. Python 2.7 is not compliant with + RFC 3875 Section 4.1.18 which requires multiple values for headers + to be provided or RFC 2616 which allows for folding of multi-line + headers. This function will return a matching list regardless + of Python version. It can be removed once Python 2.7 support + is dropped. + + :return: List of tuples containing header hey/value pairs + """ + if PY2: + # For Python 2, process the headers manually according to + # W3C RFC 2616 Section 4.2. + items = [] + for header in self.headers.headers: + # Remove "\r\n" from the header and split on ":" to get + # the field name and value. + try: + key, value = header[0:-2].split(":", 1) + except ValueError: + # If header could not be slit with : but starts with white + # space and it follows an existing header, it's a folded + # header. + if header[0] in ("\t", " ") and items: + # Pop off the last header + key, value = items.pop() + # Append the current header to the value of the last + # header which will be placed back on the end of the + # list + value = value + header + # Otherwise it's just a bad header and should error + else: + # Re-raise the value error + raise + + # Add the key and the value once stripped of leading + # white space. The specification allows for stripping + # trailing white space but the Python 3 code does not + # strip trailing white space. Therefore, trailing space + # will be left as is to match the Python 3 behavior. + items.append((key, value.lstrip())) + else: + items = self.headers.items() + + return items + + +#: backwards compatible name if someone is subclassing it +BaseRequestHandler = WSGIRequestHandler + + +def generate_adhoc_ssl_pair(cn=None): + from random import random + + crypto = _get_openssl_crypto_module() + + # pretty damn sure that this is not actually accepted by anyone + if cn is None: + cn = "*" + + cert = crypto.X509() + cert.set_serial_number(int(random() * sys.maxsize)) + cert.gmtime_adj_notBefore(0) + cert.gmtime_adj_notAfter(60 * 60 * 24 * 365) + + subject = cert.get_subject() + subject.CN = cn + subject.O = "Dummy Certificate" # noqa: E741 + + issuer = cert.get_issuer() + issuer.CN = subject.CN + issuer.O = subject.O # noqa: E741 + + pkey = crypto.PKey() + pkey.generate_key(crypto.TYPE_RSA, 2048) + cert.set_pubkey(pkey) + cert.sign(pkey, "sha256") + + return cert, pkey + + +def make_ssl_devcert(base_path, host=None, cn=None): + """Creates an SSL key for development. This should be used instead of + the ``'adhoc'`` key which generates a new cert on each server start. + It accepts a path for where it should store the key and cert and + either a host or CN. If a host is given it will use the CN + ``*.host/CN=host``. + + For more information see :func:`run_simple`. + + .. versionadded:: 0.9 + + :param base_path: the path to the certificate and key. The extension + ``.crt`` is added for the certificate, ``.key`` is + added for the key. + :param host: the name of the host. This can be used as an alternative + for the `cn`. + :param cn: the `CN` to use. + """ + from OpenSSL import crypto + + if host is not None: + cn = "*.%s/CN=%s" % (host, host) + cert, pkey = generate_adhoc_ssl_pair(cn=cn) + + cert_file = base_path + ".crt" + pkey_file = base_path + ".key" + + with open(cert_file, "wb") as f: + f.write(crypto.dump_certificate(crypto.FILETYPE_PEM, cert)) + with open(pkey_file, "wb") as f: + f.write(crypto.dump_privatekey(crypto.FILETYPE_PEM, pkey)) + + return cert_file, pkey_file + + +def generate_adhoc_ssl_context(): + """Generates an adhoc SSL context for the development server.""" + crypto = _get_openssl_crypto_module() + import tempfile + import atexit + + cert, pkey = generate_adhoc_ssl_pair() + cert_handle, cert_file = tempfile.mkstemp() + pkey_handle, pkey_file = tempfile.mkstemp() + atexit.register(os.remove, pkey_file) + atexit.register(os.remove, cert_file) + + os.write(cert_handle, crypto.dump_certificate(crypto.FILETYPE_PEM, cert)) + os.write(pkey_handle, crypto.dump_privatekey(crypto.FILETYPE_PEM, pkey)) + os.close(cert_handle) + os.close(pkey_handle) + ctx = load_ssl_context(cert_file, pkey_file) + return ctx + + +def load_ssl_context(cert_file, pkey_file=None, protocol=None): + """Loads SSL context from cert/private key files and optional protocol. + Many parameters are directly taken from the API of + :py:class:`ssl.SSLContext`. + + :param cert_file: Path of the certificate to use. + :param pkey_file: Path of the private key to use. If not given, the key + will be obtained from the certificate file. + :param protocol: One of the ``PROTOCOL_*`` constants in the stdlib ``ssl`` + module. Defaults to ``PROTOCOL_SSLv23``. + """ + if protocol is None: + protocol = ssl.PROTOCOL_SSLv23 + ctx = _SSLContext(protocol) + ctx.load_cert_chain(cert_file, pkey_file) + return ctx + + +class _SSLContext(object): + + """A dummy class with a small subset of Python3's ``ssl.SSLContext``, only + intended to be used with and by Werkzeug.""" + + def __init__(self, protocol): + self._protocol = protocol + self._certfile = None + self._keyfile = None + self._password = None + + def load_cert_chain(self, certfile, keyfile=None, password=None): + self._certfile = certfile + self._keyfile = keyfile or certfile + self._password = password + + def wrap_socket(self, sock, **kwargs): + return ssl.wrap_socket( + sock, + keyfile=self._keyfile, + certfile=self._certfile, + ssl_version=self._protocol, + **kwargs + ) + + +def is_ssl_error(error=None): + """Checks if the given error (or the current one) is an SSL error.""" + exc_types = (ssl.SSLError,) + try: + from OpenSSL.SSL import Error + + exc_types += (Error,) + except ImportError: + pass + + if error is None: + error = sys.exc_info()[1] + return isinstance(error, exc_types) + + +def select_address_family(host, port): + """Return ``AF_INET4``, ``AF_INET6``, or ``AF_UNIX`` depending on + the host and port.""" + # disabled due to problems with current ipv6 implementations + # and various operating systems. Probably this code also is + # not supposed to work, but I can't come up with any other + # ways to implement this. + # try: + # info = socket.getaddrinfo(host, port, socket.AF_UNSPEC, + # socket.SOCK_STREAM, 0, + # socket.AI_PASSIVE) + # if info: + # return info[0][0] + # except socket.gaierror: + # pass + if host.startswith("unix://"): + return socket.AF_UNIX + elif ":" in host and hasattr(socket, "AF_INET6"): + return socket.AF_INET6 + return socket.AF_INET + + +def get_sockaddr(host, port, family): + """Return a fully qualified socket address that can be passed to + :func:`socket.bind`.""" + if family == af_unix: + return host.split("://", 1)[1] + try: + res = socket.getaddrinfo( + host, port, family, socket.SOCK_STREAM, socket.IPPROTO_TCP + ) + except socket.gaierror: + return host, port + return res[0][4] + + +class BaseWSGIServer(HTTPServer, object): + + """Simple single-threaded, single-process WSGI server.""" + + multithread = False + multiprocess = False + request_queue_size = LISTEN_QUEUE + + def __init__( + self, + host, + port, + app, + handler=None, + passthrough_errors=False, + ssl_context=None, + fd=None, + ): + if handler is None: + handler = WSGIRequestHandler + + self.address_family = select_address_family(host, port) + + if fd is not None: + real_sock = socket.fromfd(fd, self.address_family, socket.SOCK_STREAM) + port = 0 + + server_address = get_sockaddr(host, int(port), self.address_family) + + # remove socket file if it already exists + if self.address_family == af_unix and os.path.exists(server_address): + os.unlink(server_address) + HTTPServer.__init__(self, server_address, handler) + + self.app = app + self.passthrough_errors = passthrough_errors + self.shutdown_signal = False + self.host = host + self.port = self.socket.getsockname()[1] + + # Patch in the original socket. + if fd is not None: + self.socket.close() + self.socket = real_sock + self.server_address = self.socket.getsockname() + + if ssl_context is not None: + if isinstance(ssl_context, tuple): + ssl_context = load_ssl_context(*ssl_context) + if ssl_context == "adhoc": + ssl_context = generate_adhoc_ssl_context() + # If we are on Python 2 the return value from socket.fromfd + # is an internal socket object but what we need for ssl wrap + # is the wrapper around it :( + sock = self.socket + if PY2 and not isinstance(sock, socket.socket): + sock = socket.socket(sock.family, sock.type, sock.proto, sock) + self.socket = ssl_context.wrap_socket(sock, server_side=True) + self.ssl_context = ssl_context + else: + self.ssl_context = None + + def log(self, type, message, *args): + _log(type, message, *args) + + def serve_forever(self): + self.shutdown_signal = False + try: + HTTPServer.serve_forever(self) + except KeyboardInterrupt: + pass + finally: + self.server_close() + + def handle_error(self, request, client_address): + if self.passthrough_errors: + raise + # Python 2 still causes a socket.error after the earlier + # handling, so silence it here. + if isinstance(sys.exc_info()[1], _ConnectionError): + return + return HTTPServer.handle_error(self, request, client_address) + + def get_request(self): + con, info = self.socket.accept() + return con, info + + +class ThreadedWSGIServer(ThreadingMixIn, BaseWSGIServer): + + """A WSGI server that does threading.""" + + multithread = True + daemon_threads = True + + +class ForkingWSGIServer(ForkingMixIn, BaseWSGIServer): + + """A WSGI server that does forking.""" + + multiprocess = True + + def __init__( + self, + host, + port, + app, + processes=40, + handler=None, + passthrough_errors=False, + ssl_context=None, + fd=None, + ): + if not can_fork: + raise ValueError("Your platform does not support forking.") + BaseWSGIServer.__init__( + self, host, port, app, handler, passthrough_errors, ssl_context, fd + ) + self.max_children = processes + + +def make_server( + host=None, + port=None, + app=None, + threaded=False, + processes=1, + request_handler=None, + passthrough_errors=False, + ssl_context=None, + fd=None, +): + """Create a new server instance that is either threaded, or forks + or just processes one request after another. + """ + if threaded and processes > 1: + raise ValueError("cannot have a multithreaded and multi process server.") + elif threaded: + return ThreadedWSGIServer( + host, port, app, request_handler, passthrough_errors, ssl_context, fd=fd + ) + elif processes > 1: + return ForkingWSGIServer( + host, + port, + app, + processes, + request_handler, + passthrough_errors, + ssl_context, + fd=fd, + ) + else: + return BaseWSGIServer( + host, port, app, request_handler, passthrough_errors, ssl_context, fd=fd + ) + + +def is_running_from_reloader(): + """Checks if the application is running from within the Werkzeug + reloader subprocess. + + .. versionadded:: 0.10 + """ + return os.environ.get("WERKZEUG_RUN_MAIN") == "true" + + +def run_simple( + hostname, + port, + application, + use_reloader=False, + use_debugger=False, + use_evalex=True, + extra_files=None, + reloader_interval=1, + reloader_type="auto", + threaded=False, + processes=1, + request_handler=None, + static_files=None, + passthrough_errors=False, + ssl_context=None, +): + """Start a WSGI application. Optional features include a reloader, + multithreading and fork support. + + This function has a command-line interface too:: + + python -m werkzeug.serving --help + + .. versionadded:: 0.5 + `static_files` was added to simplify serving of static files as well + as `passthrough_errors`. + + .. versionadded:: 0.6 + support for SSL was added. + + .. versionadded:: 0.8 + Added support for automatically loading a SSL context from certificate + file and private key. + + .. versionadded:: 0.9 + Added command-line interface. + + .. versionadded:: 0.10 + Improved the reloader and added support for changing the backend + through the `reloader_type` parameter. See :ref:`reloader` + for more information. + + .. versionchanged:: 0.15 + Bind to a Unix socket by passing a path that starts with + ``unix://`` as the ``hostname``. + + :param hostname: The host to bind to, for example ``'localhost'``. + If the value is a path that starts with ``unix://`` it will bind + to a Unix socket instead of a TCP socket.. + :param port: The port for the server. eg: ``8080`` + :param application: the WSGI application to execute + :param use_reloader: should the server automatically restart the python + process if modules were changed? + :param use_debugger: should the werkzeug debugging system be used? + :param use_evalex: should the exception evaluation feature be enabled? + :param extra_files: a list of files the reloader should watch + additionally to the modules. For example configuration + files. + :param reloader_interval: the interval for the reloader in seconds. + :param reloader_type: the type of reloader to use. The default is + auto detection. Valid values are ``'stat'`` and + ``'watchdog'``. See :ref:`reloader` for more + information. + :param threaded: should the process handle each request in a separate + thread? + :param processes: if greater than 1 then handle each request in a new process + up to this maximum number of concurrent processes. + :param request_handler: optional parameter that can be used to replace + the default one. You can use this to replace it + with a different + :class:`~BaseHTTPServer.BaseHTTPRequestHandler` + subclass. + :param static_files: a list or dict of paths for static files. This works + exactly like :class:`SharedDataMiddleware`, it's actually + just wrapping the application in that middleware before + serving. + :param passthrough_errors: set this to `True` to disable the error catching. + This means that the server will die on errors but + it can be useful to hook debuggers in (pdb etc.) + :param ssl_context: an SSL context for the connection. Either an + :class:`ssl.SSLContext`, a tuple in the form + ``(cert_file, pkey_file)``, the string ``'adhoc'`` if + the server should automatically create one, or ``None`` + to disable SSL (which is the default). + """ + if not isinstance(port, int): + raise TypeError("port must be an integer") + if use_debugger: + from .debug import DebuggedApplication + + application = DebuggedApplication(application, use_evalex) + if static_files: + from .middleware.shared_data import SharedDataMiddleware + + application = SharedDataMiddleware(application, static_files) + + def log_startup(sock): + display_hostname = hostname if hostname not in ("", "*") else "localhost" + quit_msg = "(Press CTRL+C to quit)" + if sock.family == af_unix: + _log("info", " * Running on %s %s", display_hostname, quit_msg) + else: + if ":" in display_hostname: + display_hostname = "[%s]" % display_hostname + port = sock.getsockname()[1] + _log( + "info", + " * Running on %s://%s:%d/ %s", + "http" if ssl_context is None else "https", + display_hostname, + port, + quit_msg, + ) + + def inner(): + try: + fd = int(os.environ["WERKZEUG_SERVER_FD"]) + except (LookupError, ValueError): + fd = None + srv = make_server( + hostname, + port, + application, + threaded, + processes, + request_handler, + passthrough_errors, + ssl_context, + fd=fd, + ) + if fd is None: + log_startup(srv.socket) + srv.serve_forever() + + if use_reloader: + # If we're not running already in the subprocess that is the + # reloader we want to open up a socket early to make sure the + # port is actually available. + if not is_running_from_reloader(): + if port == 0 and not can_open_by_fd: + raise ValueError( + "Cannot bind to a random port with enabled " + "reloader if the Python interpreter does " + "not support socket opening by fd." + ) + + # Create and destroy a socket so that any exceptions are + # raised before we spawn a separate Python interpreter and + # lose this ability. + address_family = select_address_family(hostname, port) + server_address = get_sockaddr(hostname, port, address_family) + s = socket.socket(address_family, socket.SOCK_STREAM) + s.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEADDR, 1) + s.bind(server_address) + if hasattr(s, "set_inheritable"): + s.set_inheritable(True) + + # If we can open the socket by file descriptor, then we can just + # reuse this one and our socket will survive the restarts. + if can_open_by_fd: + os.environ["WERKZEUG_SERVER_FD"] = str(s.fileno()) + s.listen(LISTEN_QUEUE) + log_startup(s) + else: + s.close() + if address_family == af_unix: + _log("info", "Unlinking %s" % server_address) + os.unlink(server_address) + + # Do not use relative imports, otherwise "python -m werkzeug.serving" + # breaks. + from ._reloader import run_with_reloader + + run_with_reloader(inner, extra_files, reloader_interval, reloader_type) + else: + inner() + + +def run_with_reloader(*args, **kwargs): + # People keep using undocumented APIs. Do not use this function + # please, we do not guarantee that it continues working. + from ._reloader import run_with_reloader + + return run_with_reloader(*args, **kwargs) + + +def main(): + """A simple command-line interface for :py:func:`run_simple`.""" + + # in contrast to argparse, this works at least under Python < 2.7 + import optparse + from .utils import import_string + + parser = optparse.OptionParser(usage="Usage: %prog [options] app_module:app_object") + parser.add_option( + "-b", + "--bind", + dest="address", + help="The hostname:port the app should listen on.", + ) + parser.add_option( + "-d", + "--debug", + dest="use_debugger", + action="store_true", + default=False, + help="Use Werkzeug's debugger.", + ) + parser.add_option( + "-r", + "--reload", + dest="use_reloader", + action="store_true", + default=False, + help="Reload Python process if modules change.", + ) + options, args = parser.parse_args() + + hostname, port = None, None + if options.address: + address = options.address.split(":") + hostname = address[0] + if len(address) > 1: + port = address[1] + + if len(args) != 1: + sys.stdout.write("No application supplied, or too much. See --help\n") + sys.exit(1) + app = import_string(args[0]) + + run_simple( + hostname=(hostname or "127.0.0.1"), + port=int(port or 5000), + application=app, + use_reloader=options.use_reloader, + use_debugger=options.use_debugger, + ) + + +if __name__ == "__main__": + main() diff --git a/week-0/day-3/my_todo_app/venv/lib/python3.6/site-packages/werkzeug/test.py b/week-0/day-3/my_todo_app/venv/lib/python3.6/site-packages/werkzeug/test.py new file mode 100644 index 00000000..61486656 --- /dev/null +++ b/week-0/day-3/my_todo_app/venv/lib/python3.6/site-packages/werkzeug/test.py @@ -0,0 +1,1146 @@ +# -*- coding: utf-8 -*- +""" + werkzeug.test + ~~~~~~~~~~~~~ + + This module implements a client to WSGI applications for testing. + + :copyright: 2007 Pallets + :license: BSD-3-Clause +""" +import mimetypes +import sys +from io import BytesIO +from itertools import chain +from random import random +from tempfile import TemporaryFile +from time import time + +from ._compat import iteritems +from ._compat import iterlists +from ._compat import itervalues +from ._compat import make_literal_wrapper +from ._compat import reraise +from ._compat import string_types +from ._compat import text_type +from ._compat import to_bytes +from ._compat import wsgi_encoding_dance +from ._internal import _get_environ +from .datastructures import CallbackDict +from .datastructures import CombinedMultiDict +from .datastructures import EnvironHeaders +from .datastructures import FileMultiDict +from .datastructures import FileStorage +from .datastructures import Headers +from .datastructures import MultiDict +from .http import dump_cookie +from .http import dump_options_header +from .http import parse_options_header +from .urls import iri_to_uri +from .urls import url_encode +from .urls import url_fix +from .urls import url_parse +from .urls import url_unparse +from .urls import url_unquote +from .utils import get_content_type +from .wrappers import BaseRequest +from .wsgi import ClosingIterator +from .wsgi import get_current_url + +try: + from urllib.request import Request as U2Request +except ImportError: + from urllib2 import Request as U2Request + +try: + from http.cookiejar import CookieJar +except ImportError: + from cookielib import CookieJar + + +def stream_encode_multipart( + values, use_tempfile=True, threshold=1024 * 500, boundary=None, charset="utf-8" +): + """Encode a dict of values (either strings or file descriptors or + :class:`FileStorage` objects.) into a multipart encoded string stored + in a file descriptor. + """ + if boundary is None: + boundary = "---------------WerkzeugFormPart_%s%s" % (time(), random()) + _closure = [BytesIO(), 0, False] + + if use_tempfile: + + def write_binary(string): + stream, total_length, on_disk = _closure + if on_disk: + stream.write(string) + else: + length = len(string) + if length + _closure[1] <= threshold: + stream.write(string) + else: + new_stream = TemporaryFile("wb+") + new_stream.write(stream.getvalue()) + new_stream.write(string) + _closure[0] = new_stream + _closure[2] = True + _closure[1] = total_length + length + + else: + write_binary = _closure[0].write + + def write(string): + write_binary(string.encode(charset)) + + if not isinstance(values, MultiDict): + values = MultiDict(values) + + for key, values in iterlists(values): + for value in values: + write('--%s\r\nContent-Disposition: form-data; name="%s"' % (boundary, key)) + reader = getattr(value, "read", None) + if reader is not None: + filename = getattr(value, "filename", getattr(value, "name", None)) + content_type = getattr(value, "content_type", None) + if content_type is None: + content_type = ( + filename + and mimetypes.guess_type(filename)[0] + or "application/octet-stream" + ) + if filename is not None: + write('; filename="%s"\r\n' % filename) + else: + write("\r\n") + write("Content-Type: %s\r\n\r\n" % content_type) + while 1: + chunk = reader(16384) + if not chunk: + break + write_binary(chunk) + else: + if not isinstance(value, string_types): + value = str(value) + + value = to_bytes(value, charset) + write("\r\n\r\n") + write_binary(value) + write("\r\n") + write("--%s--\r\n" % boundary) + + length = int(_closure[0].tell()) + _closure[0].seek(0) + return _closure[0], length, boundary + + +def encode_multipart(values, boundary=None, charset="utf-8"): + """Like `stream_encode_multipart` but returns a tuple in the form + (``boundary``, ``data``) where data is a bytestring. + """ + stream, length, boundary = stream_encode_multipart( + values, use_tempfile=False, boundary=boundary, charset=charset + ) + return boundary, stream.read() + + +def File(fd, filename=None, mimetype=None): + """Backwards compat. + + .. deprecated:: 0.5 + """ + from warnings import warn + + warn( + "'werkzeug.test.File' is deprecated as of version 0.5 and will" + " be removed in version 1.0. Use 'EnvironBuilder' or" + " 'FileStorage' instead.", + DeprecationWarning, + stacklevel=2, + ) + return FileStorage(fd, filename=filename, content_type=mimetype) + + +class _TestCookieHeaders(object): + + """A headers adapter for cookielib + """ + + def __init__(self, headers): + self.headers = headers + + def getheaders(self, name): + headers = [] + name = name.lower() + for k, v in self.headers: + if k.lower() == name: + headers.append(v) + return headers + + def get_all(self, name, default=None): + rv = [] + for k, v in self.headers: + if k.lower() == name.lower(): + rv.append(v) + return rv or default or [] + + +class _TestCookieResponse(object): + + """Something that looks like a httplib.HTTPResponse, but is actually just an + adapter for our test responses to make them available for cookielib. + """ + + def __init__(self, headers): + self.headers = _TestCookieHeaders(headers) + + def info(self): + return self.headers + + +class _TestCookieJar(CookieJar): + + """A cookielib.CookieJar modified to inject and read cookie headers from + and to wsgi environments, and wsgi application responses. + """ + + def inject_wsgi(self, environ): + """Inject the cookies as client headers into the server's wsgi + environment. + """ + cvals = ["%s=%s" % (c.name, c.value) for c in self] + + if cvals: + environ["HTTP_COOKIE"] = "; ".join(cvals) + else: + environ.pop("HTTP_COOKIE", None) + + def extract_wsgi(self, environ, headers): + """Extract the server's set-cookie headers as cookies into the + cookie jar. + """ + self.extract_cookies( + _TestCookieResponse(headers), U2Request(get_current_url(environ)) + ) + + +def _iter_data(data): + """Iterates over a `dict` or :class:`MultiDict` yielding all keys and + values. + This is used to iterate over the data passed to the + :class:`EnvironBuilder`. + """ + if isinstance(data, MultiDict): + for key, values in iterlists(data): + for value in values: + yield key, value + else: + for key, values in iteritems(data): + if isinstance(values, list): + for value in values: + yield key, value + else: + yield key, values + + +class EnvironBuilder(object): + """This class can be used to conveniently create a WSGI environment + for testing purposes. It can be used to quickly create WSGI environments + or request objects from arbitrary data. + + The signature of this class is also used in some other places as of + Werkzeug 0.5 (:func:`create_environ`, :meth:`BaseResponse.from_values`, + :meth:`Client.open`). Because of this most of the functionality is + available through the constructor alone. + + Files and regular form data can be manipulated independently of each + other with the :attr:`form` and :attr:`files` attributes, but are + passed with the same argument to the constructor: `data`. + + `data` can be any of these values: + + - a `str` or `bytes` object: The object is converted into an + :attr:`input_stream`, the :attr:`content_length` is set and you have to + provide a :attr:`content_type`. + - a `dict` or :class:`MultiDict`: The keys have to be strings. The values + have to be either any of the following objects, or a list of any of the + following objects: + + - a :class:`file`-like object: These are converted into + :class:`FileStorage` objects automatically. + - a `tuple`: The :meth:`~FileMultiDict.add_file` method is called + with the key and the unpacked `tuple` items as positional + arguments. + - a `str`: The string is set as form data for the associated key. + - a file-like object: The object content is loaded in memory and then + handled like a regular `str` or a `bytes`. + + :param path: the path of the request. In the WSGI environment this will + end up as `PATH_INFO`. If the `query_string` is not defined + and there is a question mark in the `path` everything after + it is used as query string. + :param base_url: the base URL is a URL that is used to extract the WSGI + URL scheme, host (server name + server port) and the + script root (`SCRIPT_NAME`). + :param query_string: an optional string or dict with URL parameters. + :param method: the HTTP method to use, defaults to `GET`. + :param input_stream: an optional input stream. Do not specify this and + `data`. As soon as an input stream is set you can't + modify :attr:`args` and :attr:`files` unless you + set the :attr:`input_stream` to `None` again. + :param content_type: The content type for the request. As of 0.5 you + don't have to provide this when specifying files + and form data via `data`. + :param content_length: The content length for the request. You don't + have to specify this when providing data via + `data`. + :param errors_stream: an optional error stream that is used for + `wsgi.errors`. Defaults to :data:`stderr`. + :param multithread: controls `wsgi.multithread`. Defaults to `False`. + :param multiprocess: controls `wsgi.multiprocess`. Defaults to `False`. + :param run_once: controls `wsgi.run_once`. Defaults to `False`. + :param headers: an optional list or :class:`Headers` object of headers. + :param data: a string or dict of form data or a file-object. + See explanation above. + :param json: An object to be serialized and assigned to ``data``. + Defaults the content type to ``"application/json"``. + Serialized with the function assigned to :attr:`json_dumps`. + :param environ_base: an optional dict of environment defaults. + :param environ_overrides: an optional dict of environment overrides. + :param charset: the charset used to encode unicode data. + + .. versionadded:: 0.15 + The ``json`` param and :meth:`json_dumps` method. + + .. versionadded:: 0.15 + The environ has keys ``REQUEST_URI`` and ``RAW_URI`` containing + the path before perecent-decoding. This is not part of the WSGI + PEP, but many WSGI servers include it. + + .. versionchanged:: 0.6 + ``path`` and ``base_url`` can now be unicode strings that are + encoded with :func:`iri_to_uri`. + """ + + #: the server protocol to use. defaults to HTTP/1.1 + server_protocol = "HTTP/1.1" + + #: the wsgi version to use. defaults to (1, 0) + wsgi_version = (1, 0) + + #: the default request class for :meth:`get_request` + request_class = BaseRequest + + import json + + #: The serialization function used when ``json`` is passed. + json_dumps = staticmethod(json.dumps) + del json + + def __init__( + self, + path="/", + base_url=None, + query_string=None, + method="GET", + input_stream=None, + content_type=None, + content_length=None, + errors_stream=None, + multithread=False, + multiprocess=False, + run_once=False, + headers=None, + data=None, + environ_base=None, + environ_overrides=None, + charset="utf-8", + mimetype=None, + json=None, + ): + path_s = make_literal_wrapper(path) + if query_string is not None and path_s("?") in path: + raise ValueError("Query string is defined in the path and as an argument") + if query_string is None and path_s("?") in path: + path, query_string = path.split(path_s("?"), 1) + self.charset = charset + self.path = iri_to_uri(path) + if base_url is not None: + base_url = url_fix(iri_to_uri(base_url, charset), charset) + self.base_url = base_url + if isinstance(query_string, (bytes, text_type)): + self.query_string = query_string + else: + if query_string is None: + query_string = MultiDict() + elif not isinstance(query_string, MultiDict): + query_string = MultiDict(query_string) + self.args = query_string + self.method = method + if headers is None: + headers = Headers() + elif not isinstance(headers, Headers): + headers = Headers(headers) + self.headers = headers + if content_type is not None: + self.content_type = content_type + if errors_stream is None: + errors_stream = sys.stderr + self.errors_stream = errors_stream + self.multithread = multithread + self.multiprocess = multiprocess + self.run_once = run_once + self.environ_base = environ_base + self.environ_overrides = environ_overrides + self.input_stream = input_stream + self.content_length = content_length + self.closed = False + + if json is not None: + if data is not None: + raise TypeError("can't provide both json and data") + + data = self.json_dumps(json) + + if self.content_type is None: + self.content_type = "application/json" + + if data: + if input_stream is not None: + raise TypeError("can't provide input stream and data") + if hasattr(data, "read"): + data = data.read() + if isinstance(data, text_type): + data = data.encode(self.charset) + if isinstance(data, bytes): + self.input_stream = BytesIO(data) + if self.content_length is None: + self.content_length = len(data) + else: + for key, value in _iter_data(data): + if isinstance(value, (tuple, dict)) or hasattr(value, "read"): + self._add_file_from_data(key, value) + else: + self.form.setlistdefault(key).append(value) + + if mimetype is not None: + self.mimetype = mimetype + + @classmethod + def from_environ(cls, environ, **kwargs): + """Turn an environ dict back into a builder. Any extra kwargs + override the args extracted from the environ. + + .. versionadded:: 0.15 + """ + headers = Headers(EnvironHeaders(environ)) + out = { + "path": environ["PATH_INFO"], + "base_url": cls._make_base_url( + environ["wsgi.url_scheme"], headers.pop("Host"), environ["SCRIPT_NAME"] + ), + "query_string": environ["QUERY_STRING"], + "method": environ["REQUEST_METHOD"], + "input_stream": environ["wsgi.input"], + "content_type": headers.pop("Content-Type", None), + "content_length": headers.pop("Content-Length", None), + "errors_stream": environ["wsgi.errors"], + "multithread": environ["wsgi.multithread"], + "multiprocess": environ["wsgi.multiprocess"], + "run_once": environ["wsgi.run_once"], + "headers": headers, + } + out.update(kwargs) + return cls(**out) + + def _add_file_from_data(self, key, value): + """Called in the EnvironBuilder to add files from the data dict.""" + if isinstance(value, tuple): + self.files.add_file(key, *value) + elif isinstance(value, dict): + from warnings import warn + + warn( + "Passing a dict as file data is deprecated as of" + " version 0.5 and will be removed in version 1.0. Use" + " a tuple or 'FileStorage' object instead.", + DeprecationWarning, + stacklevel=2, + ) + value = dict(value) + mimetype = value.pop("mimetype", None) + if mimetype is not None: + value["content_type"] = mimetype + self.files.add_file(key, **value) + else: + self.files.add_file(key, value) + + @staticmethod + def _make_base_url(scheme, host, script_root): + return url_unparse((scheme, host, script_root, "", "")).rstrip("/") + "/" + + @property + def base_url(self): + """The base URL is used to extract the URL scheme, host name, + port, and root path. + """ + return self._make_base_url(self.url_scheme, self.host, self.script_root) + + @base_url.setter + def base_url(self, value): + if value is None: + scheme = "http" + netloc = "localhost" + script_root = "" + else: + scheme, netloc, script_root, qs, anchor = url_parse(value) + if qs or anchor: + raise ValueError("base url must not contain a query string or fragment") + self.script_root = script_root.rstrip("/") + self.host = netloc + self.url_scheme = scheme + + def _get_content_type(self): + ct = self.headers.get("Content-Type") + if ct is None and not self._input_stream: + if self._files: + return "multipart/form-data" + elif self._form: + return "application/x-www-form-urlencoded" + return None + return ct + + def _set_content_type(self, value): + if value is None: + self.headers.pop("Content-Type", None) + else: + self.headers["Content-Type"] = value + + content_type = property( + _get_content_type, + _set_content_type, + doc="""The content type for the request. Reflected from and to + the :attr:`headers`. Do not set if you set :attr:`files` or + :attr:`form` for auto detection.""", + ) + del _get_content_type, _set_content_type + + def _get_content_length(self): + return self.headers.get("Content-Length", type=int) + + def _get_mimetype(self): + ct = self.content_type + if ct: + return ct.split(";")[0].strip() + + def _set_mimetype(self, value): + self.content_type = get_content_type(value, self.charset) + + def _get_mimetype_params(self): + def on_update(d): + self.headers["Content-Type"] = dump_options_header(self.mimetype, d) + + d = parse_options_header(self.headers.get("content-type", ""))[1] + return CallbackDict(d, on_update) + + mimetype = property( + _get_mimetype, + _set_mimetype, + doc="""The mimetype (content type without charset etc.) + + .. versionadded:: 0.14 + """, + ) + mimetype_params = property( + _get_mimetype_params, + doc=""" The mimetype parameters as dict. For example if the + content type is ``text/html; charset=utf-8`` the params would be + ``{'charset': 'utf-8'}``. + + .. versionadded:: 0.14 + """, + ) + del _get_mimetype, _set_mimetype, _get_mimetype_params + + def _set_content_length(self, value): + if value is None: + self.headers.pop("Content-Length", None) + else: + self.headers["Content-Length"] = str(value) + + content_length = property( + _get_content_length, + _set_content_length, + doc="""The content length as integer. Reflected from and to the + :attr:`headers`. Do not set if you set :attr:`files` or + :attr:`form` for auto detection.""", + ) + del _get_content_length, _set_content_length + + def form_property(name, storage, doc): # noqa: B902 + key = "_" + name + + def getter(self): + if self._input_stream is not None: + raise AttributeError("an input stream is defined") + rv = getattr(self, key) + if rv is None: + rv = storage() + setattr(self, key, rv) + + return rv + + def setter(self, value): + self._input_stream = None + setattr(self, key, value) + + return property(getter, setter, doc=doc) + + form = form_property("form", MultiDict, doc="A :class:`MultiDict` of form values.") + files = form_property( + "files", + FileMultiDict, + doc="""A :class:`FileMultiDict` of uploaded files. You can use + the :meth:`~FileMultiDict.add_file` method to add new files to + the dict.""", + ) + del form_property + + def _get_input_stream(self): + return self._input_stream + + def _set_input_stream(self, value): + self._input_stream = value + self._form = self._files = None + + input_stream = property( + _get_input_stream, + _set_input_stream, + doc="""An optional input stream. If you set this it will clear + :attr:`form` and :attr:`files`.""", + ) + del _get_input_stream, _set_input_stream + + def _get_query_string(self): + if self._query_string is None: + if self._args is not None: + return url_encode(self._args, charset=self.charset) + return "" + return self._query_string + + def _set_query_string(self, value): + self._query_string = value + self._args = None + + query_string = property( + _get_query_string, + _set_query_string, + doc="""The query string. If you set this to a string + :attr:`args` will no longer be available.""", + ) + del _get_query_string, _set_query_string + + def _get_args(self): + if self._query_string is not None: + raise AttributeError("a query string is defined") + if self._args is None: + self._args = MultiDict() + return self._args + + def _set_args(self, value): + self._query_string = None + self._args = value + + args = property( + _get_args, _set_args, doc="The URL arguments as :class:`MultiDict`." + ) + del _get_args, _set_args + + @property + def server_name(self): + """The server name (read-only, use :attr:`host` to set)""" + return self.host.split(":", 1)[0] + + @property + def server_port(self): + """The server port as integer (read-only, use :attr:`host` to set)""" + pieces = self.host.split(":", 1) + if len(pieces) == 2 and pieces[1].isdigit(): + return int(pieces[1]) + elif self.url_scheme == "https": + return 443 + return 80 + + def __del__(self): + try: + self.close() + except Exception: + pass + + def close(self): + """Closes all files. If you put real :class:`file` objects into the + :attr:`files` dict you can call this method to automatically close + them all in one go. + """ + if self.closed: + return + try: + files = itervalues(self.files) + except AttributeError: + files = () + for f in files: + try: + f.close() + except Exception: + pass + self.closed = True + + def get_environ(self): + """Return the built environ. + + .. versionchanged:: 0.15 + The content type and length headers are set based on + input stream detection. Previously this only set the WSGI + keys. + """ + input_stream = self.input_stream + content_length = self.content_length + + mimetype = self.mimetype + content_type = self.content_type + + if input_stream is not None: + start_pos = input_stream.tell() + input_stream.seek(0, 2) + end_pos = input_stream.tell() + input_stream.seek(start_pos) + content_length = end_pos - start_pos + elif mimetype == "multipart/form-data": + values = CombinedMultiDict([self.form, self.files]) + input_stream, content_length, boundary = stream_encode_multipart( + values, charset=self.charset + ) + content_type = mimetype + '; boundary="%s"' % boundary + elif mimetype == "application/x-www-form-urlencoded": + # XXX: py2v3 review + values = url_encode(self.form, charset=self.charset) + values = values.encode("ascii") + content_length = len(values) + input_stream = BytesIO(values) + else: + input_stream = BytesIO() + + result = {} + if self.environ_base: + result.update(self.environ_base) + + def _path_encode(x): + return wsgi_encoding_dance(url_unquote(x, self.charset), self.charset) + + qs = wsgi_encoding_dance(self.query_string) + + result.update( + { + "REQUEST_METHOD": self.method, + "SCRIPT_NAME": _path_encode(self.script_root), + "PATH_INFO": _path_encode(self.path), + "QUERY_STRING": qs, + # Non-standard, added by mod_wsgi, uWSGI + "REQUEST_URI": wsgi_encoding_dance(self.path), + # Non-standard, added by gunicorn + "RAW_URI": wsgi_encoding_dance(self.path), + "SERVER_NAME": self.server_name, + "SERVER_PORT": str(self.server_port), + "HTTP_HOST": self.host, + "SERVER_PROTOCOL": self.server_protocol, + "wsgi.version": self.wsgi_version, + "wsgi.url_scheme": self.url_scheme, + "wsgi.input": input_stream, + "wsgi.errors": self.errors_stream, + "wsgi.multithread": self.multithread, + "wsgi.multiprocess": self.multiprocess, + "wsgi.run_once": self.run_once, + } + ) + + headers = self.headers.copy() + + if content_type is not None: + result["CONTENT_TYPE"] = content_type + headers.set("Content-Type", content_type) + + if content_length is not None: + result["CONTENT_LENGTH"] = str(content_length) + headers.set("Content-Length", content_length) + + for key, value in headers.to_wsgi_list(): + result["HTTP_%s" % key.upper().replace("-", "_")] = value + + if self.environ_overrides: + result.update(self.environ_overrides) + + return result + + def get_request(self, cls=None): + """Returns a request with the data. If the request class is not + specified :attr:`request_class` is used. + + :param cls: The request wrapper to use. + """ + if cls is None: + cls = self.request_class + return cls(self.get_environ()) + + +class ClientRedirectError(Exception): + """If a redirect loop is detected when using follow_redirects=True with + the :cls:`Client`, then this exception is raised. + """ + + +class Client(object): + """This class allows you to send requests to a wrapped application. + + The response wrapper can be a class or factory function that takes + three arguments: app_iter, status and headers. The default response + wrapper just returns a tuple. + + Example:: + + class ClientResponse(BaseResponse): + ... + + client = Client(MyApplication(), response_wrapper=ClientResponse) + + The use_cookies parameter indicates whether cookies should be stored and + sent for subsequent requests. This is True by default, but passing False + will disable this behaviour. + + If you want to request some subdomain of your application you may set + `allow_subdomain_redirects` to `True` as if not no external redirects + are allowed. + + .. versionadded:: 0.5 + `use_cookies` is new in this version. Older versions did not provide + builtin cookie support. + + .. versionadded:: 0.14 + The `mimetype` parameter was added. + + .. versionadded:: 0.15 + The ``json`` parameter. + """ + + def __init__( + self, + application, + response_wrapper=None, + use_cookies=True, + allow_subdomain_redirects=False, + ): + self.application = application + self.response_wrapper = response_wrapper + if use_cookies: + self.cookie_jar = _TestCookieJar() + else: + self.cookie_jar = None + self.allow_subdomain_redirects = allow_subdomain_redirects + + def set_cookie( + self, + server_name, + key, + value="", + max_age=None, + expires=None, + path="/", + domain=None, + secure=None, + httponly=False, + charset="utf-8", + ): + """Sets a cookie in the client's cookie jar. The server name + is required and has to match the one that is also passed to + the open call. + """ + assert self.cookie_jar is not None, "cookies disabled" + header = dump_cookie( + key, value, max_age, expires, path, domain, secure, httponly, charset + ) + environ = create_environ(path, base_url="http://" + server_name) + headers = [("Set-Cookie", header)] + self.cookie_jar.extract_wsgi(environ, headers) + + def delete_cookie(self, server_name, key, path="/", domain=None): + """Deletes a cookie in the test client.""" + self.set_cookie( + server_name, key, expires=0, max_age=0, path=path, domain=domain + ) + + def run_wsgi_app(self, environ, buffered=False): + """Runs the wrapped WSGI app with the given environment.""" + if self.cookie_jar is not None: + self.cookie_jar.inject_wsgi(environ) + rv = run_wsgi_app(self.application, environ, buffered=buffered) + if self.cookie_jar is not None: + self.cookie_jar.extract_wsgi(environ, rv[2]) + return rv + + def resolve_redirect(self, response, new_location, environ, buffered=False): + """Perform a new request to the location given by the redirect + response to the previous request. + """ + scheme, netloc, path, qs, anchor = url_parse(new_location) + builder = EnvironBuilder.from_environ(environ, query_string=qs) + + to_name_parts = netloc.split(":", 1)[0].split(".") + from_name_parts = builder.server_name.split(".") + + if to_name_parts != [""]: + # The new location has a host, use it for the base URL. + builder.url_scheme = scheme + builder.host = netloc + else: + # A local redirect with autocorrect_location_header=False + # doesn't have a host, so use the request's host. + to_name_parts = from_name_parts + + # Explain why a redirect to a different server name won't be followed. + if to_name_parts != from_name_parts: + if to_name_parts[-len(from_name_parts) :] == from_name_parts: + if not self.allow_subdomain_redirects: + raise RuntimeError("Following subdomain redirects is not enabled.") + else: + raise RuntimeError("Following external redirects is not supported.") + + path_parts = path.split("/") + root_parts = builder.script_root.split("/") + + if path_parts[: len(root_parts)] == root_parts: + # Strip the script root from the path. + builder.path = path[len(builder.script_root) :] + else: + # The new location is not under the script root, so use the + # whole path and clear the previous root. + builder.path = path + builder.script_root = "" + + status_code = int(response[1].split(None, 1)[0]) + + # Only 307 and 308 preserve all of the original request. + if status_code not in {307, 308}: + # HEAD is preserved, everything else becomes GET. + if builder.method != "HEAD": + builder.method = "GET" + + # Clear the body and the headers that describe it. + builder.input_stream = None + builder.content_type = None + builder.content_length = None + builder.headers.pop("Transfer-Encoding", None) + + # Disable the response wrapper while handling redirects. Not + # thread safe, but the client should not be shared anyway. + old_response_wrapper = self.response_wrapper + self.response_wrapper = None + + try: + return self.open(builder, as_tuple=True, buffered=buffered) + finally: + self.response_wrapper = old_response_wrapper + + def open(self, *args, **kwargs): + """Takes the same arguments as the :class:`EnvironBuilder` class with + some additions: You can provide a :class:`EnvironBuilder` or a WSGI + environment as only argument instead of the :class:`EnvironBuilder` + arguments and two optional keyword arguments (`as_tuple`, `buffered`) + that change the type of the return value or the way the application is + executed. + + .. versionchanged:: 0.5 + If a dict is provided as file in the dict for the `data` parameter + the content type has to be called `content_type` now instead of + `mimetype`. This change was made for consistency with + :class:`werkzeug.FileWrapper`. + + The `follow_redirects` parameter was added to :func:`open`. + + Additional parameters: + + :param as_tuple: Returns a tuple in the form ``(environ, result)`` + :param buffered: Set this to True to buffer the application run. + This will automatically close the application for + you as well. + :param follow_redirects: Set this to True if the `Client` should + follow HTTP redirects. + """ + as_tuple = kwargs.pop("as_tuple", False) + buffered = kwargs.pop("buffered", False) + follow_redirects = kwargs.pop("follow_redirects", False) + environ = None + if not kwargs and len(args) == 1: + if isinstance(args[0], EnvironBuilder): + environ = args[0].get_environ() + elif isinstance(args[0], dict): + environ = args[0] + if environ is None: + builder = EnvironBuilder(*args, **kwargs) + try: + environ = builder.get_environ() + finally: + builder.close() + + response = self.run_wsgi_app(environ.copy(), buffered=buffered) + + # handle redirects + redirect_chain = [] + while 1: + status_code = int(response[1].split(None, 1)[0]) + if ( + status_code not in {301, 302, 303, 305, 307, 308} + or not follow_redirects + ): + break + + # Exhaust intermediate response bodies to ensure middleware + # that returns an iterator runs any cleanup code. + if not buffered: + for _ in response[0]: + pass + + new_location = response[2]["location"] + new_redirect_entry = (new_location, status_code) + if new_redirect_entry in redirect_chain: + raise ClientRedirectError("loop detected") + redirect_chain.append(new_redirect_entry) + environ, response = self.resolve_redirect( + response, new_location, environ, buffered=buffered + ) + + if self.response_wrapper is not None: + response = self.response_wrapper(*response) + if as_tuple: + return environ, response + return response + + def get(self, *args, **kw): + """Like open but method is enforced to GET.""" + kw["method"] = "GET" + return self.open(*args, **kw) + + def patch(self, *args, **kw): + """Like open but method is enforced to PATCH.""" + kw["method"] = "PATCH" + return self.open(*args, **kw) + + def post(self, *args, **kw): + """Like open but method is enforced to POST.""" + kw["method"] = "POST" + return self.open(*args, **kw) + + def head(self, *args, **kw): + """Like open but method is enforced to HEAD.""" + kw["method"] = "HEAD" + return self.open(*args, **kw) + + def put(self, *args, **kw): + """Like open but method is enforced to PUT.""" + kw["method"] = "PUT" + return self.open(*args, **kw) + + def delete(self, *args, **kw): + """Like open but method is enforced to DELETE.""" + kw["method"] = "DELETE" + return self.open(*args, **kw) + + def options(self, *args, **kw): + """Like open but method is enforced to OPTIONS.""" + kw["method"] = "OPTIONS" + return self.open(*args, **kw) + + def trace(self, *args, **kw): + """Like open but method is enforced to TRACE.""" + kw["method"] = "TRACE" + return self.open(*args, **kw) + + def __repr__(self): + return "<%s %r>" % (self.__class__.__name__, self.application) + + +def create_environ(*args, **kwargs): + """Create a new WSGI environ dict based on the values passed. The first + parameter should be the path of the request which defaults to '/'. The + second one can either be an absolute path (in that case the host is + localhost:80) or a full path to the request with scheme, netloc port and + the path to the script. + + This accepts the same arguments as the :class:`EnvironBuilder` + constructor. + + .. versionchanged:: 0.5 + This function is now a thin wrapper over :class:`EnvironBuilder` which + was added in 0.5. The `headers`, `environ_base`, `environ_overrides` + and `charset` parameters were added. + """ + builder = EnvironBuilder(*args, **kwargs) + try: + return builder.get_environ() + finally: + builder.close() + + +def run_wsgi_app(app, environ, buffered=False): + """Return a tuple in the form (app_iter, status, headers) of the + application output. This works best if you pass it an application that + returns an iterator all the time. + + Sometimes applications may use the `write()` callable returned + by the `start_response` function. This tries to resolve such edge + cases automatically. But if you don't get the expected output you + should set `buffered` to `True` which enforces buffering. + + If passed an invalid WSGI application the behavior of this function is + undefined. Never pass non-conforming WSGI applications to this function. + + :param app: the application to execute. + :param buffered: set to `True` to enforce buffering. + :return: tuple in the form ``(app_iter, status, headers)`` + """ + environ = _get_environ(environ) + response = [] + buffer = [] + + def start_response(status, headers, exc_info=None): + if exc_info is not None: + reraise(*exc_info) + response[:] = [status, headers] + return buffer.append + + app_rv = app(environ, start_response) + close_func = getattr(app_rv, "close", None) + app_iter = iter(app_rv) + + # when buffering we emit the close call early and convert the + # application iterator into a regular list + if buffered: + try: + app_iter = list(app_iter) + finally: + if close_func is not None: + close_func() + + # otherwise we iterate the application iter until we have a response, chain + # the already received data with the already collected data and wrap it in + # a new `ClosingIterator` if we need to restore a `close` callable from the + # original return value. + else: + for item in app_iter: + buffer.append(item) + if response: + break + if buffer: + app_iter = chain(buffer, app_iter) + if close_func is not None and app_iter is not app_rv: + app_iter = ClosingIterator(app_iter, close_func) + + return app_iter, response[0], Headers(response[1]) diff --git a/week-0/day-3/my_todo_app/venv/lib/python3.6/site-packages/werkzeug/testapp.py b/week-0/day-3/my_todo_app/venv/lib/python3.6/site-packages/werkzeug/testapp.py new file mode 100644 index 00000000..8ea23bee --- /dev/null +++ b/week-0/day-3/my_todo_app/venv/lib/python3.6/site-packages/werkzeug/testapp.py @@ -0,0 +1,241 @@ +# -*- coding: utf-8 -*- +""" + werkzeug.testapp + ~~~~~~~~~~~~~~~~ + + Provide a small test application that can be used to test a WSGI server + and check it for WSGI compliance. + + :copyright: 2007 Pallets + :license: BSD-3-Clause +""" +import base64 +import os +import sys +from textwrap import wrap + +import werkzeug +from .utils import escape +from .wrappers import BaseRequest as Request +from .wrappers import BaseResponse as Response + +logo = Response( + base64.b64decode( + """ +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 +=""" + ), + mimetype="image/png", +) + + +TEMPLATE = u"""\ + +WSGI Information + +
    + +

    WSGI Information

    +

    + This page displays all available information about the WSGI server and + the underlying Python interpreter. +

    Python Interpreter

    + + + + + + +
    Python Version + %(python_version)s +
    Platform + %(platform)s [%(os)s] +
    API Version + %(api_version)s +
    Byteorder + %(byteorder)s +
    Werkzeug Version + %(werkzeug_version)s +
    +

    WSGI Environment

    + %(wsgi_env)s
    +

    Installed Eggs

    +

    + The following python packages were installed on the system as + Python eggs: +

      %(python_eggs)s
    +

    System Path

    +

    + The following paths are the current contents of the load path. The + following entries are looked up for Python packages. Note that not + all items in this path are folders. Gray and underlined items are + entries pointing to invalid resources or used by custom import hooks + such as the zip importer. +

    + Items with a bright background were expanded for display from a relative + path. If you encounter such paths in the output you might want to check + your setup as relative paths are usually problematic in multithreaded + environments. +

      %(sys_path)s
    +
    +""" + + +def iter_sys_path(): + if os.name == "posix": + + def strip(x): + prefix = os.path.expanduser("~") + if x.startswith(prefix): + x = "~" + x[len(prefix) :] + return x + + else: + + def strip(x): + return x + + cwd = os.path.abspath(os.getcwd()) + for item in sys.path: + path = os.path.join(cwd, item or os.path.curdir) + yield strip(os.path.normpath(path)), not os.path.isdir(path), path != item + + +def render_testapp(req): + try: + import pkg_resources + except ImportError: + eggs = () + else: + eggs = sorted(pkg_resources.working_set, key=lambda x: x.project_name.lower()) + python_eggs = [] + for egg in eggs: + try: + version = egg.version + except (ValueError, AttributeError): + version = "unknown" + python_eggs.append( + "
  • %s [%s]" % (escape(egg.project_name), escape(version)) + ) + + wsgi_env = [] + sorted_environ = sorted(req.environ.items(), key=lambda x: repr(x[0]).lower()) + for key, value in sorted_environ: + wsgi_env.append( + "%s%s" + % (escape(str(key)), " ".join(wrap(escape(repr(value))))) + ) + + sys_path = [] + for item, virtual, expanded in iter_sys_path(): + class_ = [] + if virtual: + class_.append("virtual") + if expanded: + class_.append("exp") + sys_path.append( + "%s" + % (' class="%s"' % " ".join(class_) if class_ else "", escape(item)) + ) + + return ( + TEMPLATE + % { + "python_version": "
    ".join(escape(sys.version).splitlines()), + "platform": escape(sys.platform), + "os": escape(os.name), + "api_version": sys.api_version, + "byteorder": sys.byteorder, + "werkzeug_version": werkzeug.__version__, + "python_eggs": "\n".join(python_eggs), + "wsgi_env": "\n".join(wsgi_env), + "sys_path": "\n".join(sys_path), + } + ).encode("utf-8") + + +def test_app(environ, start_response): + """Simple test application that dumps the environment. You can use + it to check if Werkzeug is working properly: + + .. sourcecode:: pycon + + >>> from werkzeug.serving import run_simple + >>> from werkzeug.testapp import test_app + >>> run_simple('localhost', 3000, test_app) + * Running on http://localhost:3000/ + + The application displays important information from the WSGI environment, + the Python interpreter and the installed libraries. + """ + req = Request(environ, populate_request=False) + if req.args.get("resource") == "logo": + response = logo + else: + response = Response(render_testapp(req), mimetype="text/html") + return response(environ, start_response) + + +if __name__ == "__main__": + from .serving import run_simple + + run_simple("localhost", 5000, test_app, use_reloader=True) diff --git a/week-0/day-3/my_todo_app/venv/lib/python3.6/site-packages/werkzeug/urls.py b/week-0/day-3/my_todo_app/venv/lib/python3.6/site-packages/werkzeug/urls.py new file mode 100644 index 00000000..38e9e5ad --- /dev/null +++ b/week-0/day-3/my_todo_app/venv/lib/python3.6/site-packages/werkzeug/urls.py @@ -0,0 +1,1134 @@ +# -*- coding: utf-8 -*- +""" + werkzeug.urls + ~~~~~~~~~~~~~ + + ``werkzeug.urls`` used to provide several wrapper functions for Python 2 + urlparse, whose main purpose were to work around the behavior of the Py2 + stdlib and its lack of unicode support. While this was already a somewhat + inconvenient situation, it got even more complicated because Python 3's + ``urllib.parse`` actually does handle unicode properly. In other words, + this module would wrap two libraries with completely different behavior. So + now this module contains a 2-and-3-compatible backport of Python 3's + ``urllib.parse``, which is mostly API-compatible. + + :copyright: 2007 Pallets + :license: BSD-3-Clause +""" +import codecs +import os +import re +from collections import namedtuple + +from ._compat import fix_tuple_repr +from ._compat import implements_to_string +from ._compat import make_literal_wrapper +from ._compat import normalize_string_tuple +from ._compat import PY2 +from ._compat import text_type +from ._compat import to_native +from ._compat import to_unicode +from ._compat import try_coerce_native +from ._internal import _decode_idna +from ._internal import _encode_idna +from .datastructures import iter_multi_items +from .datastructures import MultiDict + +# A regular expression for what a valid schema looks like +_scheme_re = re.compile(r"^[a-zA-Z0-9+-.]+$") + +# Characters that are safe in any part of an URL. +_always_safe = frozenset( + bytearray( + b"abcdefghijklmnopqrstuvwxyz" + b"ABCDEFGHIJKLMNOPQRSTUVWXYZ" + b"0123456789" + b"-._~" + ) +) + +_hexdigits = "0123456789ABCDEFabcdef" +_hextobyte = dict( + ((a + b).encode(), int(a + b, 16)) for a in _hexdigits for b in _hexdigits +) +_bytetohex = [("%%%02X" % char).encode("ascii") for char in range(256)] + + +_URLTuple = fix_tuple_repr( + namedtuple("_URLTuple", ["scheme", "netloc", "path", "query", "fragment"]) +) + + +class BaseURL(_URLTuple): + """Superclass of :py:class:`URL` and :py:class:`BytesURL`.""" + + __slots__ = () + + def replace(self, **kwargs): + """Return an URL with the same values, except for those parameters + given new values by whichever keyword arguments are specified.""" + return self._replace(**kwargs) + + @property + def host(self): + """The host part of the URL if available, otherwise `None`. The + host is either the hostname or the IP address mentioned in the + URL. It will not contain the port. + """ + return self._split_host()[0] + + @property + def ascii_host(self): + """Works exactly like :attr:`host` but will return a result that + is restricted to ASCII. If it finds a netloc that is not ASCII + it will attempt to idna decode it. This is useful for socket + operations when the URL might include internationalized characters. + """ + rv = self.host + if rv is not None and isinstance(rv, text_type): + try: + rv = _encode_idna(rv) + except UnicodeError: + rv = rv.encode("ascii", "ignore") + return to_native(rv, "ascii", "ignore") + + @property + def port(self): + """The port in the URL as an integer if it was present, `None` + otherwise. This does not fill in default ports. + """ + try: + rv = int(to_native(self._split_host()[1])) + if 0 <= rv <= 65535: + return rv + except (ValueError, TypeError): + pass + + @property + def auth(self): + """The authentication part in the URL if available, `None` + otherwise. + """ + return self._split_netloc()[0] + + @property + def username(self): + """The username if it was part of the URL, `None` otherwise. + This undergoes URL decoding and will always be a unicode string. + """ + rv = self._split_auth()[0] + if rv is not None: + return _url_unquote_legacy(rv) + + @property + def raw_username(self): + """The username if it was part of the URL, `None` otherwise. + Unlike :attr:`username` this one is not being decoded. + """ + return self._split_auth()[0] + + @property + def password(self): + """The password if it was part of the URL, `None` otherwise. + This undergoes URL decoding and will always be a unicode string. + """ + rv = self._split_auth()[1] + if rv is not None: + return _url_unquote_legacy(rv) + + @property + def raw_password(self): + """The password if it was part of the URL, `None` otherwise. + Unlike :attr:`password` this one is not being decoded. + """ + return self._split_auth()[1] + + def decode_query(self, *args, **kwargs): + """Decodes the query part of the URL. Ths is a shortcut for + calling :func:`url_decode` on the query argument. The arguments and + keyword arguments are forwarded to :func:`url_decode` unchanged. + """ + return url_decode(self.query, *args, **kwargs) + + def join(self, *args, **kwargs): + """Joins this URL with another one. This is just a convenience + function for calling into :meth:`url_join` and then parsing the + return value again. + """ + return url_parse(url_join(self, *args, **kwargs)) + + def to_url(self): + """Returns a URL string or bytes depending on the type of the + information stored. This is just a convenience function + for calling :meth:`url_unparse` for this URL. + """ + return url_unparse(self) + + def decode_netloc(self): + """Decodes the netloc part into a string.""" + rv = _decode_idna(self.host or "") + + if ":" in rv: + rv = "[%s]" % rv + port = self.port + if port is not None: + rv = "%s:%d" % (rv, port) + auth = ":".join( + filter( + None, + [ + _url_unquote_legacy(self.raw_username or "", "/:%@"), + _url_unquote_legacy(self.raw_password or "", "/:%@"), + ], + ) + ) + if auth: + rv = "%s@%s" % (auth, rv) + return rv + + def to_uri_tuple(self): + """Returns a :class:`BytesURL` tuple that holds a URI. This will + encode all the information in the URL properly to ASCII using the + rules a web browser would follow. + + It's usually more interesting to directly call :meth:`iri_to_uri` which + will return a string. + """ + return url_parse(iri_to_uri(self).encode("ascii")) + + def to_iri_tuple(self): + """Returns a :class:`URL` tuple that holds a IRI. This will try + to decode as much information as possible in the URL without + losing information similar to how a web browser does it for the + URL bar. + + It's usually more interesting to directly call :meth:`uri_to_iri` which + will return a string. + """ + return url_parse(uri_to_iri(self)) + + def get_file_location(self, pathformat=None): + """Returns a tuple with the location of the file in the form + ``(server, location)``. If the netloc is empty in the URL or + points to localhost, it's represented as ``None``. + + The `pathformat` by default is autodetection but needs to be set + when working with URLs of a specific system. The supported values + are ``'windows'`` when working with Windows or DOS paths and + ``'posix'`` when working with posix paths. + + If the URL does not point to a local file, the server and location + are both represented as ``None``. + + :param pathformat: The expected format of the path component. + Currently ``'windows'`` and ``'posix'`` are + supported. Defaults to ``None`` which is + autodetect. + """ + if self.scheme != "file": + return None, None + + path = url_unquote(self.path) + host = self.netloc or None + + if pathformat is None: + if os.name == "nt": + pathformat = "windows" + else: + pathformat = "posix" + + if pathformat == "windows": + if path[:1] == "/" and path[1:2].isalpha() and path[2:3] in "|:": + path = path[1:2] + ":" + path[3:] + windows_share = path[:3] in ("\\" * 3, "/" * 3) + import ntpath + + path = ntpath.normpath(path) + # Windows shared drives are represented as ``\\host\\directory``. + # That results in a URL like ``file://///host/directory``, and a + # path like ``///host/directory``. We need to special-case this + # because the path contains the hostname. + if windows_share and host is None: + parts = path.lstrip("\\").split("\\", 1) + if len(parts) == 2: + host, path = parts + else: + host = parts[0] + path = "" + elif pathformat == "posix": + import posixpath + + path = posixpath.normpath(path) + else: + raise TypeError("Invalid path format %s" % repr(pathformat)) + + if host in ("127.0.0.1", "::1", "localhost"): + host = None + + return host, path + + def _split_netloc(self): + if self._at in self.netloc: + return self.netloc.split(self._at, 1) + return None, self.netloc + + def _split_auth(self): + auth = self._split_netloc()[0] + if not auth: + return None, None + if self._colon not in auth: + return auth, None + return auth.split(self._colon, 1) + + def _split_host(self): + rv = self._split_netloc()[1] + if not rv: + return None, None + + if not rv.startswith(self._lbracket): + if self._colon in rv: + return rv.split(self._colon, 1) + return rv, None + + idx = rv.find(self._rbracket) + if idx < 0: + return rv, None + + host = rv[1:idx] + rest = rv[idx + 1 :] + if rest.startswith(self._colon): + return host, rest[1:] + return host, None + + +@implements_to_string +class URL(BaseURL): + """Represents a parsed URL. This behaves like a regular tuple but + also has some extra attributes that give further insight into the + URL. + """ + + __slots__ = () + _at = "@" + _colon = ":" + _lbracket = "[" + _rbracket = "]" + + def __str__(self): + return self.to_url() + + def encode_netloc(self): + """Encodes the netloc part to an ASCII safe URL as bytes.""" + rv = self.ascii_host or "" + if ":" in rv: + rv = "[%s]" % rv + port = self.port + if port is not None: + rv = "%s:%d" % (rv, port) + auth = ":".join( + filter( + None, + [ + url_quote(self.raw_username or "", "utf-8", "strict", "/:%"), + url_quote(self.raw_password or "", "utf-8", "strict", "/:%"), + ], + ) + ) + if auth: + rv = "%s@%s" % (auth, rv) + return to_native(rv) + + def encode(self, charset="utf-8", errors="replace"): + """Encodes the URL to a tuple made out of bytes. The charset is + only being used for the path, query and fragment. + """ + return BytesURL( + self.scheme.encode("ascii"), + self.encode_netloc(), + self.path.encode(charset, errors), + self.query.encode(charset, errors), + self.fragment.encode(charset, errors), + ) + + +class BytesURL(BaseURL): + """Represents a parsed URL in bytes.""" + + __slots__ = () + _at = b"@" + _colon = b":" + _lbracket = b"[" + _rbracket = b"]" + + def __str__(self): + return self.to_url().decode("utf-8", "replace") + + def encode_netloc(self): + """Returns the netloc unchanged as bytes.""" + return self.netloc + + def decode(self, charset="utf-8", errors="replace"): + """Decodes the URL to a tuple made out of strings. The charset is + only being used for the path, query and fragment. + """ + return URL( + self.scheme.decode("ascii"), + self.decode_netloc(), + self.path.decode(charset, errors), + self.query.decode(charset, errors), + self.fragment.decode(charset, errors), + ) + + +_unquote_maps = {frozenset(): _hextobyte} + + +def _unquote_to_bytes(string, unsafe=""): + if isinstance(string, text_type): + string = string.encode("utf-8") + + if isinstance(unsafe, text_type): + unsafe = unsafe.encode("utf-8") + + unsafe = frozenset(bytearray(unsafe)) + groups = iter(string.split(b"%")) + result = bytearray(next(groups, b"")) + + try: + hex_to_byte = _unquote_maps[unsafe] + except KeyError: + hex_to_byte = _unquote_maps[unsafe] = { + h: b for h, b in _hextobyte.items() if b not in unsafe + } + + for group in groups: + code = group[:2] + + if code in hex_to_byte: + result.append(hex_to_byte[code]) + result.extend(group[2:]) + else: + result.append(37) # % + result.extend(group) + + return bytes(result) + + +def _url_encode_impl(obj, charset, encode_keys, sort, key): + iterable = iter_multi_items(obj) + if sort: + iterable = sorted(iterable, key=key) + for key, value in iterable: + if value is None: + continue + if not isinstance(key, bytes): + key = text_type(key).encode(charset) + if not isinstance(value, bytes): + value = text_type(value).encode(charset) + yield _fast_url_quote_plus(key) + "=" + _fast_url_quote_plus(value) + + +def _url_unquote_legacy(value, unsafe=""): + try: + return url_unquote(value, charset="utf-8", errors="strict", unsafe=unsafe) + except UnicodeError: + return url_unquote(value, charset="latin1", unsafe=unsafe) + + +def url_parse(url, scheme=None, allow_fragments=True): + """Parses a URL from a string into a :class:`URL` tuple. If the URL + is lacking a scheme it can be provided as second argument. Otherwise, + it is ignored. Optionally fragments can be stripped from the URL + by setting `allow_fragments` to `False`. + + The inverse of this function is :func:`url_unparse`. + + :param url: the URL to parse. + :param scheme: the default schema to use if the URL is schemaless. + :param allow_fragments: if set to `False` a fragment will be removed + from the URL. + """ + s = make_literal_wrapper(url) + is_text_based = isinstance(url, text_type) + + if scheme is None: + scheme = s("") + netloc = query = fragment = s("") + i = url.find(s(":")) + if i > 0 and _scheme_re.match(to_native(url[:i], errors="replace")): + # make sure "iri" is not actually a port number (in which case + # "scheme" is really part of the path) + rest = url[i + 1 :] + if not rest or any(c not in s("0123456789") for c in rest): + # not a port number + scheme, url = url[:i].lower(), rest + + if url[:2] == s("//"): + delim = len(url) + for c in s("/?#"): + wdelim = url.find(c, 2) + if wdelim >= 0: + delim = min(delim, wdelim) + netloc, url = url[2:delim], url[delim:] + if (s("[") in netloc and s("]") not in netloc) or ( + s("]") in netloc and s("[") not in netloc + ): + raise ValueError("Invalid IPv6 URL") + + if allow_fragments and s("#") in url: + url, fragment = url.split(s("#"), 1) + if s("?") in url: + url, query = url.split(s("?"), 1) + + result_type = URL if is_text_based else BytesURL + return result_type(scheme, netloc, url, query, fragment) + + +def _make_fast_url_quote(charset="utf-8", errors="strict", safe="/:", unsafe=""): + """Precompile the translation table for a URL encoding function. + + Unlike :func:`url_quote`, the generated function only takes the + string to quote. + + :param charset: The charset to encode the result with. + :param errors: How to handle encoding errors. + :param safe: An optional sequence of safe characters to never encode. + :param unsafe: An optional sequence of unsafe characters to always encode. + """ + if isinstance(safe, text_type): + safe = safe.encode(charset, errors) + + if isinstance(unsafe, text_type): + unsafe = unsafe.encode(charset, errors) + + safe = (frozenset(bytearray(safe)) | _always_safe) - frozenset(bytearray(unsafe)) + table = [chr(c) if c in safe else "%%%02X" % c for c in range(256)] + + if not PY2: + + def quote(string): + return "".join([table[c] for c in string]) + + else: + + def quote(string): + return "".join([table[c] for c in bytearray(string)]) + + return quote + + +_fast_url_quote = _make_fast_url_quote() +_fast_quote_plus = _make_fast_url_quote(safe=" ", unsafe="+") + + +def _fast_url_quote_plus(string): + return _fast_quote_plus(string).replace(" ", "+") + + +def url_quote(string, charset="utf-8", errors="strict", safe="/:", unsafe=""): + """URL encode a single string with a given encoding. + + :param s: the string to quote. + :param charset: the charset to be used. + :param safe: an optional sequence of safe characters. + :param unsafe: an optional sequence of unsafe characters. + + .. versionadded:: 0.9.2 + The `unsafe` parameter was added. + """ + if not isinstance(string, (text_type, bytes, bytearray)): + string = text_type(string) + if isinstance(string, text_type): + string = string.encode(charset, errors) + if isinstance(safe, text_type): + safe = safe.encode(charset, errors) + if isinstance(unsafe, text_type): + unsafe = unsafe.encode(charset, errors) + safe = (frozenset(bytearray(safe)) | _always_safe) - frozenset(bytearray(unsafe)) + rv = bytearray() + for char in bytearray(string): + if char in safe: + rv.append(char) + else: + rv.extend(_bytetohex[char]) + return to_native(bytes(rv)) + + +def url_quote_plus(string, charset="utf-8", errors="strict", safe=""): + """URL encode a single string with the given encoding and convert + whitespace to "+". + + :param s: The string to quote. + :param charset: The charset to be used. + :param safe: An optional sequence of safe characters. + """ + return url_quote(string, charset, errors, safe + " ", "+").replace(" ", "+") + + +def url_unparse(components): + """The reverse operation to :meth:`url_parse`. This accepts arbitrary + as well as :class:`URL` tuples and returns a URL as a string. + + :param components: the parsed URL as tuple which should be converted + into a URL string. + """ + scheme, netloc, path, query, fragment = normalize_string_tuple(components) + s = make_literal_wrapper(scheme) + url = s("") + + # We generally treat file:///x and file:/x the same which is also + # what browsers seem to do. This also allows us to ignore a schema + # register for netloc utilization or having to differenciate between + # empty and missing netloc. + if netloc or (scheme and path.startswith(s("/"))): + if path and path[:1] != s("/"): + path = s("/") + path + url = s("//") + (netloc or s("")) + path + elif path: + url += path + if scheme: + url = scheme + s(":") + url + if query: + url = url + s("?") + query + if fragment: + url = url + s("#") + fragment + return url + + +def url_unquote(string, charset="utf-8", errors="replace", unsafe=""): + """URL decode a single string with a given encoding. If the charset + is set to `None` no unicode decoding is performed and raw bytes + are returned. + + :param s: the string to unquote. + :param charset: the charset of the query string. If set to `None` + no unicode decoding will take place. + :param errors: the error handling for the charset decoding. + """ + rv = _unquote_to_bytes(string, unsafe) + if charset is not None: + rv = rv.decode(charset, errors) + return rv + + +def url_unquote_plus(s, charset="utf-8", errors="replace"): + """URL decode a single string with the given `charset` and decode "+" to + whitespace. + + Per default encoding errors are ignored. If you want a different behavior + you can set `errors` to ``'replace'`` or ``'strict'``. In strict mode a + :exc:`HTTPUnicodeError` is raised. + + :param s: The string to unquote. + :param charset: the charset of the query string. If set to `None` + no unicode decoding will take place. + :param errors: The error handling for the `charset` decoding. + """ + if isinstance(s, text_type): + s = s.replace(u"+", u" ") + else: + s = s.replace(b"+", b" ") + return url_unquote(s, charset, errors) + + +def url_fix(s, charset="utf-8"): + r"""Sometimes you get an URL by a user that just isn't a real URL because + it contains unsafe characters like ' ' and so on. This function can fix + some of the problems in a similar way browsers handle data entered by the + user: + + >>> url_fix(u'http://de.wikipedia.org/wiki/Elf (Begriffskl\xe4rung)') + 'http://de.wikipedia.org/wiki/Elf%20(Begriffskl%C3%A4rung)' + + :param s: the string with the URL to fix. + :param charset: The target charset for the URL if the url was given as + unicode string. + """ + # First step is to switch to unicode processing and to convert + # backslashes (which are invalid in URLs anyways) to slashes. This is + # consistent with what Chrome does. + s = to_unicode(s, charset, "replace").replace("\\", "/") + + # For the specific case that we look like a malformed windows URL + # we want to fix this up manually: + if s.startswith("file://") and s[7:8].isalpha() and s[8:10] in (":/", "|/"): + s = "file:///" + s[7:] + + url = url_parse(s) + path = url_quote(url.path, charset, safe="/%+$!*'(),") + qs = url_quote_plus(url.query, charset, safe=":&%=+$!*'(),") + anchor = url_quote_plus(url.fragment, charset, safe=":&%=+$!*'(),") + return to_native(url_unparse((url.scheme, url.encode_netloc(), path, qs, anchor))) + + +# not-unreserved characters remain quoted when unquoting to IRI +_to_iri_unsafe = "".join([chr(c) for c in range(128) if c not in _always_safe]) + + +def _codec_error_url_quote(e): + """Used in :func:`uri_to_iri` after unquoting to re-quote any + invalid bytes. + """ + out = _fast_url_quote(e.object[e.start : e.end]) + + if PY2: + out = out.decode("utf-8") + + return out, e.end + + +codecs.register_error("werkzeug.url_quote", _codec_error_url_quote) + + +def uri_to_iri(uri, charset="utf-8", errors="werkzeug.url_quote"): + """Convert a URI to an IRI. All valid UTF-8 characters are unquoted, + leaving all reserved and invalid characters quoted. If the URL has + a domain, it is decoded from Punycode. + + >>> uri_to_iri("http://xn--n3h.net/p%C3%A5th?q=%C3%A8ry%DF") + 'http://\\u2603.net/p\\xe5th?q=\\xe8ry%DF' + + :param uri: The URI to convert. + :param charset: The encoding to encode unquoted bytes with. + :param errors: Error handler to use during ``bytes.encode``. By + default, invalid bytes are left quoted. + + .. versionchanged:: 0.15 + All reserved and invalid characters remain quoted. Previously, + only some reserved characters were preserved, and invalid bytes + were replaced instead of left quoted. + + .. versionadded:: 0.6 + """ + if isinstance(uri, tuple): + uri = url_unparse(uri) + + uri = url_parse(to_unicode(uri, charset)) + path = url_unquote(uri.path, charset, errors, _to_iri_unsafe) + query = url_unquote(uri.query, charset, errors, _to_iri_unsafe) + fragment = url_unquote(uri.fragment, charset, errors, _to_iri_unsafe) + return url_unparse((uri.scheme, uri.decode_netloc(), path, query, fragment)) + + +# reserved characters remain unquoted when quoting to URI +_to_uri_safe = ":/?#[]@!$&'()*+,;=%" + + +def iri_to_uri(iri, charset="utf-8", errors="strict", safe_conversion=False): + """Convert an IRI to a URI. All non-ASCII and unsafe characters are + quoted. If the URL has a domain, it is encoded to Punycode. + + >>> iri_to_uri('http://\\u2603.net/p\\xe5th?q=\\xe8ry%DF') + 'http://xn--n3h.net/p%C3%A5th?q=%C3%A8ry%DF' + + :param iri: The IRI to convert. + :param charset: The encoding of the IRI. + :param errors: Error handler to use during ``bytes.encode``. + :param safe_conversion: Return the URL unchanged if it only contains + ASCII characters and no whitespace. See the explanation below. + + There is a general problem with IRI conversion with some protocols + that are in violation of the URI specification. Consider the + following two IRIs:: + + magnet:?xt=uri:whatever + itms-services://?action=download-manifest + + After parsing, we don't know if the scheme requires the ``//``, + which is dropped if empty, but conveys different meanings in the + final URL if it's present or not. In this case, you can use + ``safe_conversion``, which will return the URL unchanged if it only + contains ASCII characters and no whitespace. This can result in a + URI with unquoted characters if it was not already quoted correctly, + but preserves the URL's semantics. Werkzeug uses this for the + ``Location`` header for redirects. + + .. versionchanged:: 0.15 + All reserved characters remain unquoted. Previously, only some + reserved characters were left unquoted. + + .. versionchanged:: 0.9.6 + The ``safe_conversion`` parameter was added. + + .. versionadded:: 0.6 + """ + if isinstance(iri, tuple): + iri = url_unparse(iri) + + if safe_conversion: + # If we're not sure if it's safe to convert the URL, and it only + # contains ASCII characters, return it unconverted. + try: + native_iri = to_native(iri) + ascii_iri = native_iri.encode("ascii") + + # Only return if it doesn't have whitespace. (Why?) + if len(ascii_iri.split()) == 1: + return native_iri + except UnicodeError: + pass + + iri = url_parse(to_unicode(iri, charset, errors)) + path = url_quote(iri.path, charset, errors, _to_uri_safe) + query = url_quote(iri.query, charset, errors, _to_uri_safe) + fragment = url_quote(iri.fragment, charset, errors, _to_uri_safe) + return to_native( + url_unparse((iri.scheme, iri.encode_netloc(), path, query, fragment)) + ) + + +def url_decode( + s, + charset="utf-8", + decode_keys=False, + include_empty=True, + errors="replace", + separator="&", + cls=None, +): + """ + Parse a querystring and return it as :class:`MultiDict`. There is a + difference in key decoding on different Python versions. On Python 3 + keys will always be fully decoded whereas on Python 2, keys will + remain bytestrings if they fit into ASCII. On 2.x keys can be forced + to be unicode by setting `decode_keys` to `True`. + + If the charset is set to `None` no unicode decoding will happen and + raw bytes will be returned. + + Per default a missing value for a key will default to an empty key. If + you don't want that behavior you can set `include_empty` to `False`. + + Per default encoding errors are ignored. If you want a different behavior + you can set `errors` to ``'replace'`` or ``'strict'``. In strict mode a + `HTTPUnicodeError` is raised. + + .. versionchanged:: 0.5 + In previous versions ";" and "&" could be used for url decoding. + This changed in 0.5 where only "&" is supported. If you want to + use ";" instead a different `separator` can be provided. + + The `cls` parameter was added. + + :param s: a string with the query string to decode. + :param charset: the charset of the query string. If set to `None` + no unicode decoding will take place. + :param decode_keys: Used on Python 2.x to control whether keys should + be forced to be unicode objects. If set to `True` + then keys will be unicode in all cases. Otherwise, + they remain `str` if they fit into ASCII. + :param include_empty: Set to `False` if you don't want empty values to + appear in the dict. + :param errors: the decoding error behavior. + :param separator: the pair separator to be used, defaults to ``&`` + :param cls: an optional dict class to use. If this is not specified + or `None` the default :class:`MultiDict` is used. + """ + if cls is None: + cls = MultiDict + if isinstance(s, text_type) and not isinstance(separator, text_type): + separator = separator.decode(charset or "ascii") + elif isinstance(s, bytes) and not isinstance(separator, bytes): + separator = separator.encode(charset or "ascii") + return cls( + _url_decode_impl( + s.split(separator), charset, decode_keys, include_empty, errors + ) + ) + + +def url_decode_stream( + stream, + charset="utf-8", + decode_keys=False, + include_empty=True, + errors="replace", + separator="&", + cls=None, + limit=None, + return_iterator=False, +): + """Works like :func:`url_decode` but decodes a stream. The behavior + of stream and limit follows functions like + :func:`~werkzeug.wsgi.make_line_iter`. The generator of pairs is + directly fed to the `cls` so you can consume the data while it's + parsed. + + .. versionadded:: 0.8 + + :param stream: a stream with the encoded querystring + :param charset: the charset of the query string. If set to `None` + no unicode decoding will take place. + :param decode_keys: Used on Python 2.x to control whether keys should + be forced to be unicode objects. If set to `True`, + keys will be unicode in all cases. Otherwise, they + remain `str` if they fit into ASCII. + :param include_empty: Set to `False` if you don't want empty values to + appear in the dict. + :param errors: the decoding error behavior. + :param separator: the pair separator to be used, defaults to ``&`` + :param cls: an optional dict class to use. If this is not specified + or `None` the default :class:`MultiDict` is used. + :param limit: the content length of the URL data. Not necessary if + a limited stream is provided. + :param return_iterator: if set to `True` the `cls` argument is ignored + and an iterator over all decoded pairs is + returned + """ + from .wsgi import make_chunk_iter + + pair_iter = make_chunk_iter(stream, separator, limit) + decoder = _url_decode_impl(pair_iter, charset, decode_keys, include_empty, errors) + + if return_iterator: + return decoder + + if cls is None: + cls = MultiDict + + return cls(decoder) + + +def _url_decode_impl(pair_iter, charset, decode_keys, include_empty, errors): + for pair in pair_iter: + if not pair: + continue + s = make_literal_wrapper(pair) + equal = s("=") + if equal in pair: + key, value = pair.split(equal, 1) + else: + if not include_empty: + continue + key = pair + value = s("") + key = url_unquote_plus(key, charset, errors) + if charset is not None and PY2 and not decode_keys: + key = try_coerce_native(key) + yield key, url_unquote_plus(value, charset, errors) + + +def url_encode( + obj, charset="utf-8", encode_keys=False, sort=False, key=None, separator=b"&" +): + """URL encode a dict/`MultiDict`. If a value is `None` it will not appear + in the result string. Per default only values are encoded into the target + charset strings. If `encode_keys` is set to ``True`` unicode keys are + supported too. + + If `sort` is set to `True` the items are sorted by `key` or the default + sorting algorithm. + + .. versionadded:: 0.5 + `sort`, `key`, and `separator` were added. + + :param obj: the object to encode into a query string. + :param charset: the charset of the query string. + :param encode_keys: set to `True` if you have unicode keys. (Ignored on + Python 3.x) + :param sort: set to `True` if you want parameters to be sorted by `key`. + :param separator: the separator to be used for the pairs. + :param key: an optional function to be used for sorting. For more details + check out the :func:`sorted` documentation. + """ + separator = to_native(separator, "ascii") + return separator.join(_url_encode_impl(obj, charset, encode_keys, sort, key)) + + +def url_encode_stream( + obj, + stream=None, + charset="utf-8", + encode_keys=False, + sort=False, + key=None, + separator=b"&", +): + """Like :meth:`url_encode` but writes the results to a stream + object. If the stream is `None` a generator over all encoded + pairs is returned. + + .. versionadded:: 0.8 + + :param obj: the object to encode into a query string. + :param stream: a stream to write the encoded object into or `None` if + an iterator over the encoded pairs should be returned. In + that case the separator argument is ignored. + :param charset: the charset of the query string. + :param encode_keys: set to `True` if you have unicode keys. (Ignored on + Python 3.x) + :param sort: set to `True` if you want parameters to be sorted by `key`. + :param separator: the separator to be used for the pairs. + :param key: an optional function to be used for sorting. For more details + check out the :func:`sorted` documentation. + """ + separator = to_native(separator, "ascii") + gen = _url_encode_impl(obj, charset, encode_keys, sort, key) + if stream is None: + return gen + for idx, chunk in enumerate(gen): + if idx: + stream.write(separator) + stream.write(chunk) + + +def url_join(base, url, allow_fragments=True): + """Join a base URL and a possibly relative URL to form an absolute + interpretation of the latter. + + :param base: the base URL for the join operation. + :param url: the URL to join. + :param allow_fragments: indicates whether fragments should be allowed. + """ + if isinstance(base, tuple): + base = url_unparse(base) + if isinstance(url, tuple): + url = url_unparse(url) + + base, url = normalize_string_tuple((base, url)) + s = make_literal_wrapper(base) + + if not base: + return url + if not url: + return base + + bscheme, bnetloc, bpath, bquery, bfragment = url_parse( + base, allow_fragments=allow_fragments + ) + scheme, netloc, path, query, fragment = url_parse(url, bscheme, allow_fragments) + if scheme != bscheme: + return url + if netloc: + return url_unparse((scheme, netloc, path, query, fragment)) + netloc = bnetloc + + if path[:1] == s("/"): + segments = path.split(s("/")) + elif not path: + segments = bpath.split(s("/")) + if not query: + query = bquery + else: + segments = bpath.split(s("/"))[:-1] + path.split(s("/")) + + # If the rightmost part is "./" we want to keep the slash but + # remove the dot. + if segments[-1] == s("."): + segments[-1] = s("") + + # Resolve ".." and "." + segments = [segment for segment in segments if segment != s(".")] + while 1: + i = 1 + n = len(segments) - 1 + while i < n: + if segments[i] == s("..") and segments[i - 1] not in (s(""), s("..")): + del segments[i - 1 : i + 1] + break + i += 1 + else: + break + + # Remove trailing ".." if the URL is absolute + unwanted_marker = [s(""), s("..")] + while segments[:2] == unwanted_marker: + del segments[1] + + path = s("/").join(segments) + return url_unparse((scheme, netloc, path, query, fragment)) + + +class Href(object): + """Implements a callable that constructs URLs with the given base. The + function can be called with any number of positional and keyword + arguments which than are used to assemble the URL. Works with URLs + and posix paths. + + Positional arguments are appended as individual segments to + the path of the URL: + + >>> href = Href('/foo') + >>> href('bar', 23) + '/foo/bar/23' + >>> href('foo', bar=23) + '/foo/foo?bar=23' + + If any of the arguments (positional or keyword) evaluates to `None` it + will be skipped. If no keyword arguments are given the last argument + can be a :class:`dict` or :class:`MultiDict` (or any other dict subclass), + otherwise the keyword arguments are used for the query parameters, cutting + off the first trailing underscore of the parameter name: + + >>> href(is_=42) + '/foo?is=42' + >>> href({'foo': 'bar'}) + '/foo?foo=bar' + + Combining of both methods is not allowed: + + >>> href({'foo': 'bar'}, bar=42) + Traceback (most recent call last): + ... + TypeError: keyword arguments and query-dicts can't be combined + + Accessing attributes on the href object creates a new href object with + the attribute name as prefix: + + >>> bar_href = href.bar + >>> bar_href("blub") + '/foo/bar/blub' + + If `sort` is set to `True` the items are sorted by `key` or the default + sorting algorithm: + + >>> href = Href("/", sort=True) + >>> href(a=1, b=2, c=3) + '/?a=1&b=2&c=3' + + .. versionadded:: 0.5 + `sort` and `key` were added. + """ + + def __init__(self, base="./", charset="utf-8", sort=False, key=None): + if not base: + base = "./" + self.base = base + self.charset = charset + self.sort = sort + self.key = key + + def __getattr__(self, name): + if name[:2] == "__": + raise AttributeError(name) + base = self.base + if base[-1:] != "/": + base += "/" + return Href(url_join(base, name), self.charset, self.sort, self.key) + + def __call__(self, *path, **query): + if path and isinstance(path[-1], dict): + if query: + raise TypeError("keyword arguments and query-dicts can't be combined") + query, path = path[-1], path[:-1] + elif query: + query = dict( + [(k.endswith("_") and k[:-1] or k, v) for k, v in query.items()] + ) + path = "/".join( + [ + to_unicode(url_quote(x, self.charset), "ascii") + for x in path + if x is not None + ] + ).lstrip("/") + rv = self.base + if path: + if not rv.endswith("/"): + rv += "/" + rv = url_join(rv, "./" + path) + if query: + rv += "?" + to_unicode( + url_encode(query, self.charset, sort=self.sort, key=self.key), "ascii" + ) + return to_native(rv) diff --git a/week-0/day-3/my_todo_app/venv/lib/python3.6/site-packages/werkzeug/useragents.py b/week-0/day-3/my_todo_app/venv/lib/python3.6/site-packages/werkzeug/useragents.py new file mode 100644 index 00000000..e265e093 --- /dev/null +++ b/week-0/day-3/my_todo_app/venv/lib/python3.6/site-packages/werkzeug/useragents.py @@ -0,0 +1,220 @@ +# -*- coding: utf-8 -*- +""" + werkzeug.useragents + ~~~~~~~~~~~~~~~~~~~ + + This module provides a helper to inspect user agent strings. This module + is far from complete but should work for most of the currently available + browsers. + + + :copyright: 2007 Pallets + :license: BSD-3-Clause +""" +import re +import warnings + + +class UserAgentParser(object): + """A simple user agent parser. Used by the `UserAgent`.""" + + platforms = ( + ("cros", "chromeos"), + ("iphone|ios", "iphone"), + ("ipad", "ipad"), + (r"darwin|mac|os\s*x", "macos"), + ("win", "windows"), + (r"android", "android"), + ("netbsd", "netbsd"), + ("openbsd", "openbsd"), + ("freebsd", "freebsd"), + ("dragonfly", "dragonflybsd"), + ("(sun|i86)os", "solaris"), + (r"x11|lin(\b|ux)?", "linux"), + (r"nintendo\s+wii", "wii"), + ("irix", "irix"), + ("hp-?ux", "hpux"), + ("aix", "aix"), + ("sco|unix_sv", "sco"), + ("bsd", "bsd"), + ("amiga", "amiga"), + ("blackberry|playbook", "blackberry"), + ("symbian", "symbian"), + ) + browsers = ( + ("googlebot", "google"), + ("msnbot", "msn"), + ("yahoo", "yahoo"), + ("ask jeeves", "ask"), + (r"aol|america\s+online\s+browser", "aol"), + ("opera", "opera"), + ("edge", "edge"), + ("chrome|crios", "chrome"), + ("seamonkey", "seamonkey"), + ("firefox|firebird|phoenix|iceweasel", "firefox"), + ("galeon", "galeon"), + ("safari|version", "safari"), + ("webkit", "webkit"), + ("camino", "camino"), + ("konqueror", "konqueror"), + ("k-meleon", "kmeleon"), + ("netscape", "netscape"), + (r"msie|microsoft\s+internet\s+explorer|trident/.+? rv:", "msie"), + ("lynx", "lynx"), + ("links", "links"), + ("Baiduspider", "baidu"), + ("bingbot", "bing"), + ("mozilla", "mozilla"), + ) + + _browser_version_re = r"(?:%s)[/\sa-z(]*(\d+[.\da-z]+)?" + _language_re = re.compile( + r"(?:;\s*|\s+)(\b\w{2}\b(?:-\b\w{2}\b)?)\s*;|" + r"(?:\(|\[|;)\s*(\b\w{2}\b(?:-\b\w{2}\b)?)\s*(?:\]|\)|;)" + ) + + def __init__(self): + self.platforms = [(b, re.compile(a, re.I)) for a, b in self.platforms] + self.browsers = [ + (b, re.compile(self._browser_version_re % a, re.I)) + for a, b in self.browsers + ] + + def __call__(self, user_agent): + for platform, regex in self.platforms: # noqa: B007 + match = regex.search(user_agent) + if match is not None: + break + else: + platform = None + for browser, regex in self.browsers: # noqa: B007 + match = regex.search(user_agent) + if match is not None: + version = match.group(1) + break + else: + browser = version = None + match = self._language_re.search(user_agent) + if match is not None: + language = match.group(1) or match.group(2) + else: + language = None + return platform, browser, version, language + + +class UserAgent(object): + """Represents a user agent. Pass it a WSGI environment or a user agent + string and you can inspect some of the details from the user agent + string via the attributes. The following attributes exist: + + .. attribute:: string + + the raw user agent string + + .. attribute:: platform + + the browser platform. The following platforms are currently + recognized: + + - `aix` + - `amiga` + - `android` + - `blackberry` + - `bsd` + - `chromeos` + - `dragonflybsd` + - `freebsd` + - `hpux` + - `ipad` + - `iphone` + - `irix` + - `linux` + - `macos` + - `netbsd` + - `openbsd` + - `sco` + - `solaris` + - `symbian` + - `wii` + - `windows` + + .. attribute:: browser + + the name of the browser. The following browsers are currently + recognized: + + - `aol` * + - `ask` * + - `baidu` * + - `bing` * + - `camino` + - `chrome` + - `edge` + - `firefox` + - `galeon` + - `google` * + - `kmeleon` + - `konqueror` + - `links` + - `lynx` + - `mozilla` + - `msie` + - `msn` + - `netscape` + - `opera` + - `safari` + - `seamonkey` + - `webkit` + - `yahoo` * + + (Browsers marked with a star (``*``) are crawlers.) + + .. attribute:: version + + the version of the browser + + .. attribute:: language + + the language of the browser + """ + + _parser = UserAgentParser() + + def __init__(self, environ_or_string): + if isinstance(environ_or_string, dict): + environ_or_string = environ_or_string.get("HTTP_USER_AGENT", "") + self.string = environ_or_string + self.platform, self.browser, self.version, self.language = self._parser( + environ_or_string + ) + + def to_header(self): + return self.string + + def __str__(self): + return self.string + + def __nonzero__(self): + return bool(self.browser) + + __bool__ = __nonzero__ + + def __repr__(self): + return "<%s %r/%s>" % (self.__class__.__name__, self.browser, self.version) + + +# DEPRECATED +from .wrappers import UserAgentMixin as _UserAgentMixin + + +class UserAgentMixin(_UserAgentMixin): + @property + def user_agent(self, *args, **kwargs): + warnings.warn( + "'werkzeug.useragents.UserAgentMixin' should be imported" + " from 'werkzeug.wrappers.UserAgentMixin'. This old import" + " will be removed in version 1.0.", + DeprecationWarning, + stacklevel=2, + ) + return super(_UserAgentMixin, self).user_agent diff --git a/week-0/day-3/my_todo_app/venv/lib/python3.6/site-packages/werkzeug/utils.py b/week-0/day-3/my_todo_app/venv/lib/python3.6/site-packages/werkzeug/utils.py new file mode 100644 index 00000000..20620572 --- /dev/null +++ b/week-0/day-3/my_todo_app/venv/lib/python3.6/site-packages/werkzeug/utils.py @@ -0,0 +1,836 @@ +# -*- coding: utf-8 -*- +""" + werkzeug.utils + ~~~~~~~~~~~~~~ + + This module implements various utilities for WSGI applications. Most of + them are used by the request and response wrappers but especially for + middleware development it makes sense to use them without the wrappers. + + :copyright: 2007 Pallets + :license: BSD-3-Clause +""" +import codecs +import os +import pkgutil +import re +import sys +import warnings + +from ._compat import iteritems +from ._compat import PY2 +from ._compat import reraise +from ._compat import string_types +from ._compat import text_type +from ._compat import unichr +from ._internal import _DictAccessorProperty +from ._internal import _missing +from ._internal import _parse_signature + +try: + from html.entities import name2codepoint +except ImportError: + from htmlentitydefs import name2codepoint + + +_format_re = re.compile(r"\$(?:(%s)|\{(%s)\})" % (("[a-zA-Z_][a-zA-Z0-9_]*",) * 2)) +_entity_re = re.compile(r"&([^;]+);") +_filename_ascii_strip_re = re.compile(r"[^A-Za-z0-9_.-]") +_windows_device_files = ( + "CON", + "AUX", + "COM1", + "COM2", + "COM3", + "COM4", + "LPT1", + "LPT2", + "LPT3", + "PRN", + "NUL", +) + + +class cached_property(property): + """A decorator that converts a function into a lazy property. The + function wrapped is called the first time to retrieve the result + and then that calculated result is used the next time you access + the value:: + + class Foo(object): + + @cached_property + def foo(self): + # calculate something important here + return 42 + + The class has to have a `__dict__` in order for this property to + work. + """ + + # implementation detail: A subclass of python's builtin property + # decorator, we override __get__ to check for a cached value. If one + # chooses to invoke __get__ by hand the property will still work as + # expected because the lookup logic is replicated in __get__ for + # manual invocation. + + def __init__(self, func, name=None, doc=None): + self.__name__ = name or func.__name__ + self.__module__ = func.__module__ + self.__doc__ = doc or func.__doc__ + self.func = func + + def __set__(self, obj, value): + obj.__dict__[self.__name__] = value + + def __get__(self, obj, type=None): + if obj is None: + return self + value = obj.__dict__.get(self.__name__, _missing) + if value is _missing: + value = self.func(obj) + obj.__dict__[self.__name__] = value + return value + + +class environ_property(_DictAccessorProperty): + """Maps request attributes to environment variables. This works not only + for the Werzeug request object, but also any other class with an + environ attribute: + + >>> class Test(object): + ... environ = {'key': 'value'} + ... test = environ_property('key') + >>> var = Test() + >>> var.test + 'value' + + If you pass it a second value it's used as default if the key does not + exist, the third one can be a converter that takes a value and converts + it. If it raises :exc:`ValueError` or :exc:`TypeError` the default value + is used. If no default value is provided `None` is used. + + Per default the property is read only. You have to explicitly enable it + by passing ``read_only=False`` to the constructor. + """ + + read_only = True + + def lookup(self, obj): + return obj.environ + + +class header_property(_DictAccessorProperty): + """Like `environ_property` but for headers.""" + + def lookup(self, obj): + return obj.headers + + +class HTMLBuilder(object): + """Helper object for HTML generation. + + Per default there are two instances of that class. The `html` one, and + the `xhtml` one for those two dialects. The class uses keyword parameters + and positional parameters to generate small snippets of HTML. + + Keyword parameters are converted to XML/SGML attributes, positional + arguments are used as children. Because Python accepts positional + arguments before keyword arguments it's a good idea to use a list with the + star-syntax for some children: + + >>> html.p(class_='foo', *[html.a('foo', href='foo.html'), ' ', + ... html.a('bar', href='bar.html')]) + u'

    foo bar

    ' + + This class works around some browser limitations and can not be used for + arbitrary SGML/XML generation. For that purpose lxml and similar + libraries exist. + + Calling the builder escapes the string passed: + + >>> html.p(html("")) + u'

    <foo>

    ' + """ + + _entity_re = re.compile(r"&([^;]+);") + _entities = name2codepoint.copy() + _entities["apos"] = 39 + _empty_elements = { + "area", + "base", + "basefont", + "br", + "col", + "command", + "embed", + "frame", + "hr", + "img", + "input", + "keygen", + "isindex", + "link", + "meta", + "param", + "source", + "wbr", + } + _boolean_attributes = { + "selected", + "checked", + "compact", + "declare", + "defer", + "disabled", + "ismap", + "multiple", + "nohref", + "noresize", + "noshade", + "nowrap", + } + _plaintext_elements = {"textarea"} + _c_like_cdata = {"script", "style"} + + def __init__(self, dialect): + self._dialect = dialect + + def __call__(self, s): + return escape(s) + + def __getattr__(self, tag): + if tag[:2] == "__": + raise AttributeError(tag) + + def proxy(*children, **arguments): + buffer = "<" + tag + for key, value in iteritems(arguments): + if value is None: + continue + if key[-1] == "_": + key = key[:-1] + if key in self._boolean_attributes: + if not value: + continue + if self._dialect == "xhtml": + value = '="' + key + '"' + else: + value = "" + else: + value = '="' + escape(value) + '"' + buffer += " " + key + value + if not children and tag in self._empty_elements: + if self._dialect == "xhtml": + buffer += " />" + else: + buffer += ">" + return buffer + buffer += ">" + + children_as_string = "".join( + [text_type(x) for x in children if x is not None] + ) + + if children_as_string: + if tag in self._plaintext_elements: + children_as_string = escape(children_as_string) + elif tag in self._c_like_cdata and self._dialect == "xhtml": + children_as_string = ( + "/**/" + ) + buffer += children_as_string + "" + return buffer + + return proxy + + def __repr__(self): + return "<%s for %r>" % (self.__class__.__name__, self._dialect) + + +html = HTMLBuilder("html") +xhtml = HTMLBuilder("xhtml") + +# https://cgit.freedesktop.org/xdg/shared-mime-info/tree/freedesktop.org.xml.in +# https://www.iana.org/assignments/media-types/media-types.xhtml +# Types listed in the XDG mime info that have a charset in the IANA registration. +_charset_mimetypes = { + "application/ecmascript", + "application/javascript", + "application/sql", + "application/xml", + "application/xml-dtd", + "application/xml-external-parsed-entity", +} + + +def get_content_type(mimetype, charset): + """Returns the full content type string with charset for a mimetype. + + If the mimetype represents text, the charset parameter will be + appended, otherwise the mimetype is returned unchanged. + + :param mimetype: The mimetype to be used as content type. + :param charset: The charset to be appended for text mimetypes. + :return: The content type. + + .. verionchanged:: 0.15 + Any type that ends with ``+xml`` gets a charset, not just those + that start with ``application/``. Known text types such as + ``application/javascript`` are also given charsets. + """ + if ( + mimetype.startswith("text/") + or mimetype in _charset_mimetypes + or mimetype.endswith("+xml") + ): + mimetype += "; charset=" + charset + + return mimetype + + +def detect_utf_encoding(data): + """Detect which UTF encoding was used to encode the given bytes. + + The latest JSON standard (:rfc:`8259`) suggests that only UTF-8 is + accepted. Older documents allowed 8, 16, or 32. 16 and 32 can be big + or little endian. Some editors or libraries may prepend a BOM. + + :internal: + + :param data: Bytes in unknown UTF encoding. + :return: UTF encoding name + + .. versionadded:: 0.15 + """ + head = data[:4] + + if head[:3] == codecs.BOM_UTF8: + return "utf-8-sig" + + if b"\x00" not in head: + return "utf-8" + + if head in (codecs.BOM_UTF32_BE, codecs.BOM_UTF32_LE): + return "utf-32" + + if head[:2] in (codecs.BOM_UTF16_BE, codecs.BOM_UTF16_LE): + return "utf-16" + + if len(head) == 4: + if head[:3] == b"\x00\x00\x00": + return "utf-32-be" + + if head[::2] == b"\x00\x00": + return "utf-16-be" + + if head[1:] == b"\x00\x00\x00": + return "utf-32-le" + + if head[1::2] == b"\x00\x00": + return "utf-16-le" + + if len(head) == 2: + return "utf-16-be" if head.startswith(b"\x00") else "utf-16-le" + + return "utf-8" + + +def format_string(string, context): + """String-template format a string: + + >>> format_string('$foo and ${foo}s', dict(foo=42)) + '42 and 42s' + + This does not do any attribute lookup etc. For more advanced string + formattings have a look at the `werkzeug.template` module. + + :param string: the format string. + :param context: a dict with the variables to insert. + """ + + def lookup_arg(match): + x = context[match.group(1) or match.group(2)] + if not isinstance(x, string_types): + x = type(string)(x) + return x + + return _format_re.sub(lookup_arg, string) + + +def secure_filename(filename): + r"""Pass it a filename and it will return a secure version of it. This + filename can then safely be stored on a regular file system and passed + to :func:`os.path.join`. The filename returned is an ASCII only string + for maximum portability. + + On windows systems the function also makes sure that the file is not + named after one of the special device files. + + >>> secure_filename("My cool movie.mov") + 'My_cool_movie.mov' + >>> secure_filename("../../../etc/passwd") + 'etc_passwd' + >>> secure_filename(u'i contain cool \xfcml\xe4uts.txt') + 'i_contain_cool_umlauts.txt' + + The function might return an empty filename. It's your responsibility + to ensure that the filename is unique and that you abort or + generate a random filename if the function returned an empty one. + + .. versionadded:: 0.5 + + :param filename: the filename to secure + """ + if isinstance(filename, text_type): + from unicodedata import normalize + + filename = normalize("NFKD", filename).encode("ascii", "ignore") + if not PY2: + filename = filename.decode("ascii") + for sep in os.path.sep, os.path.altsep: + if sep: + filename = filename.replace(sep, " ") + filename = str(_filename_ascii_strip_re.sub("", "_".join(filename.split()))).strip( + "._" + ) + + # on nt a couple of special files are present in each folder. We + # have to ensure that the target file is not such a filename. In + # this case we prepend an underline + if ( + os.name == "nt" + and filename + and filename.split(".")[0].upper() in _windows_device_files + ): + filename = "_" + filename + + return filename + + +def escape(s, quote=None): + """Replace special characters "&", "<", ">" and (") to HTML-safe sequences. + + There is a special handling for `None` which escapes to an empty string. + + .. versionchanged:: 0.9 + `quote` is now implicitly on. + + :param s: the string to escape. + :param quote: ignored. + """ + if s is None: + return "" + elif hasattr(s, "__html__"): + return text_type(s.__html__()) + elif not isinstance(s, string_types): + s = text_type(s) + if quote is not None: + from warnings import warn + + warn( + "The 'quote' parameter is no longer used as of version 0.9" + " and will be removed in version 1.0.", + DeprecationWarning, + stacklevel=2, + ) + s = ( + s.replace("&", "&") + .replace("<", "<") + .replace(">", ">") + .replace('"', """) + ) + return s + + +def unescape(s): + """The reverse function of `escape`. This unescapes all the HTML + entities, not only the XML entities inserted by `escape`. + + :param s: the string to unescape. + """ + + def handle_match(m): + name = m.group(1) + if name in HTMLBuilder._entities: + return unichr(HTMLBuilder._entities[name]) + try: + if name[:2] in ("#x", "#X"): + return unichr(int(name[2:], 16)) + elif name.startswith("#"): + return unichr(int(name[1:])) + except ValueError: + pass + return u"" + + return _entity_re.sub(handle_match, s) + + +def redirect(location, code=302, Response=None): + """Returns a response object (a WSGI application) that, if called, + redirects the client to the target location. Supported codes are + 301, 302, 303, 305, 307, and 308. 300 is not supported because + it's not a real redirect and 304 because it's the answer for a + request with a request with defined If-Modified-Since headers. + + .. versionadded:: 0.6 + The location can now be a unicode string that is encoded using + the :func:`iri_to_uri` function. + + .. versionadded:: 0.10 + The class used for the Response object can now be passed in. + + :param location: the location the response should redirect to. + :param code: the redirect status code. defaults to 302. + :param class Response: a Response class to use when instantiating a + response. The default is :class:`werkzeug.wrappers.Response` if + unspecified. + """ + if Response is None: + from .wrappers import Response + + display_location = escape(location) + if isinstance(location, text_type): + # Safe conversion is necessary here as we might redirect + # to a broken URI scheme (for instance itms-services). + from .urls import iri_to_uri + + location = iri_to_uri(location, safe_conversion=True) + response = Response( + '\n' + "Redirecting...\n" + "

    Redirecting...

    \n" + "

    You should be redirected automatically to target URL: " + '%s. If not click the link.' + % (escape(location), display_location), + code, + mimetype="text/html", + ) + response.headers["Location"] = location + return response + + +def append_slash_redirect(environ, code=301): + """Redirects to the same URL but with a slash appended. The behavior + of this function is undefined if the path ends with a slash already. + + :param environ: the WSGI environment for the request that triggers + the redirect. + :param code: the status code for the redirect. + """ + new_path = environ["PATH_INFO"].strip("/") + "/" + query_string = environ.get("QUERY_STRING") + if query_string: + new_path += "?" + query_string + return redirect(new_path, code) + + +def import_string(import_name, silent=False): + """Imports an object based on a string. This is useful if you want to + use import paths as endpoints or something similar. An import path can + be specified either in dotted notation (``xml.sax.saxutils.escape``) + or with a colon as object delimiter (``xml.sax.saxutils:escape``). + + If `silent` is True the return value will be `None` if the import fails. + + :param import_name: the dotted name for the object to import. + :param silent: if set to `True` import errors are ignored and + `None` is returned instead. + :return: imported object + """ + # force the import name to automatically convert to strings + # __import__ is not able to handle unicode strings in the fromlist + # if the module is a package + import_name = str(import_name).replace(":", ".") + try: + try: + __import__(import_name) + except ImportError: + if "." not in import_name: + raise + else: + return sys.modules[import_name] + + module_name, obj_name = import_name.rsplit(".", 1) + module = __import__(module_name, globals(), locals(), [obj_name]) + try: + return getattr(module, obj_name) + except AttributeError as e: + raise ImportError(e) + + except ImportError as e: + if not silent: + reraise( + ImportStringError, ImportStringError(import_name, e), sys.exc_info()[2] + ) + + +def find_modules(import_path, include_packages=False, recursive=False): + """Finds all the modules below a package. This can be useful to + automatically import all views / controllers so that their metaclasses / + function decorators have a chance to register themselves on the + application. + + Packages are not returned unless `include_packages` is `True`. This can + also recursively list modules but in that case it will import all the + packages to get the correct load path of that module. + + :param import_path: the dotted name for the package to find child modules. + :param include_packages: set to `True` if packages should be returned, too. + :param recursive: set to `True` if recursion should happen. + :return: generator + """ + module = import_string(import_path) + path = getattr(module, "__path__", None) + if path is None: + raise ValueError("%r is not a package" % import_path) + basename = module.__name__ + "." + for _importer, modname, ispkg in pkgutil.iter_modules(path): + modname = basename + modname + if ispkg: + if include_packages: + yield modname + if recursive: + for item in find_modules(modname, include_packages, True): + yield item + else: + yield modname + + +def validate_arguments(func, args, kwargs, drop_extra=True): + """Checks if the function accepts the arguments and keyword arguments. + Returns a new ``(args, kwargs)`` tuple that can safely be passed to + the function without causing a `TypeError` because the function signature + is incompatible. If `drop_extra` is set to `True` (which is the default) + any extra positional or keyword arguments are dropped automatically. + + The exception raised provides three attributes: + + `missing` + A set of argument names that the function expected but where + missing. + + `extra` + A dict of keyword arguments that the function can not handle but + where provided. + + `extra_positional` + A list of values that where given by positional argument but the + function cannot accept. + + This can be useful for decorators that forward user submitted data to + a view function:: + + from werkzeug.utils import ArgumentValidationError, validate_arguments + + def sanitize(f): + def proxy(request): + data = request.values.to_dict() + try: + args, kwargs = validate_arguments(f, (request,), data) + except ArgumentValidationError: + raise BadRequest('The browser failed to transmit all ' + 'the data expected.') + return f(*args, **kwargs) + return proxy + + :param func: the function the validation is performed against. + :param args: a tuple of positional arguments. + :param kwargs: a dict of keyword arguments. + :param drop_extra: set to `False` if you don't want extra arguments + to be silently dropped. + :return: tuple in the form ``(args, kwargs)``. + """ + parser = _parse_signature(func) + args, kwargs, missing, extra, extra_positional = parser(args, kwargs)[:5] + if missing: + raise ArgumentValidationError(tuple(missing)) + elif (extra or extra_positional) and not drop_extra: + raise ArgumentValidationError(None, extra, extra_positional) + return tuple(args), kwargs + + +def bind_arguments(func, args, kwargs): + """Bind the arguments provided into a dict. When passed a function, + a tuple of arguments and a dict of keyword arguments `bind_arguments` + returns a dict of names as the function would see it. This can be useful + to implement a cache decorator that uses the function arguments to build + the cache key based on the values of the arguments. + + :param func: the function the arguments should be bound for. + :param args: tuple of positional arguments. + :param kwargs: a dict of keyword arguments. + :return: a :class:`dict` of bound keyword arguments. + """ + ( + args, + kwargs, + missing, + extra, + extra_positional, + arg_spec, + vararg_var, + kwarg_var, + ) = _parse_signature(func)(args, kwargs) + values = {} + for (name, _has_default, _default), value in zip(arg_spec, args): + values[name] = value + if vararg_var is not None: + values[vararg_var] = tuple(extra_positional) + elif extra_positional: + raise TypeError("too many positional arguments") + if kwarg_var is not None: + multikw = set(extra) & set([x[0] for x in arg_spec]) + if multikw: + raise TypeError( + "got multiple values for keyword argument " + repr(next(iter(multikw))) + ) + values[kwarg_var] = extra + elif extra: + raise TypeError("got unexpected keyword argument " + repr(next(iter(extra)))) + return values + + +class ArgumentValidationError(ValueError): + + """Raised if :func:`validate_arguments` fails to validate""" + + def __init__(self, missing=None, extra=None, extra_positional=None): + self.missing = set(missing or ()) + self.extra = extra or {} + self.extra_positional = extra_positional or [] + ValueError.__init__( + self, + "function arguments invalid. (%d missing, %d additional)" + % (len(self.missing), len(self.extra) + len(self.extra_positional)), + ) + + +class ImportStringError(ImportError): + """Provides information about a failed :func:`import_string` attempt.""" + + #: String in dotted notation that failed to be imported. + import_name = None + #: Wrapped exception. + exception = None + + def __init__(self, import_name, exception): + self.import_name = import_name + self.exception = exception + + msg = ( + "import_string() failed for %r. Possible reasons are:\n\n" + "- missing __init__.py in a package;\n" + "- package or module path not included in sys.path;\n" + "- duplicated package or module name taking precedence in " + "sys.path;\n" + "- missing module, class, function or variable;\n\n" + "Debugged import:\n\n%s\n\n" + "Original exception:\n\n%s: %s" + ) + + name = "" + tracked = [] + for part in import_name.replace(":", ".").split("."): + name += (name and ".") + part + imported = import_string(name, silent=True) + if imported: + tracked.append((name, getattr(imported, "__file__", None))) + else: + track = ["- %r found in %r." % (n, i) for n, i in tracked] + track.append("- %r not found." % name) + msg = msg % ( + import_name, + "\n".join(track), + exception.__class__.__name__, + str(exception), + ) + break + + ImportError.__init__(self, msg) + + def __repr__(self): + return "<%s(%r, %r)>" % ( + self.__class__.__name__, + self.import_name, + self.exception, + ) + + +# DEPRECATED +from .datastructures import CombinedMultiDict as _CombinedMultiDict +from .datastructures import EnvironHeaders as _EnvironHeaders +from .datastructures import Headers as _Headers +from .datastructures import MultiDict as _MultiDict +from .http import dump_cookie as _dump_cookie +from .http import parse_cookie as _parse_cookie + + +class MultiDict(_MultiDict): + def __init__(self, *args, **kwargs): + warnings.warn( + "'werkzeug.utils.MultiDict' has moved to 'werkzeug" + ".datastructures.MultiDict' as of version 0.5. This old" + " import will be removed in version 1.0.", + DeprecationWarning, + stacklevel=2, + ) + super(MultiDict, self).__init__(*args, **kwargs) + + +class CombinedMultiDict(_CombinedMultiDict): + def __init__(self, *args, **kwargs): + warnings.warn( + "'werkzeug.utils.CombinedMultiDict' has moved to 'werkzeug" + ".datastructures.CombinedMultiDict' as of version 0.5. This" + " old import will be removed in version 1.0.", + DeprecationWarning, + stacklevel=2, + ) + super(CombinedMultiDict, self).__init__(*args, **kwargs) + + +class Headers(_Headers): + def __init__(self, *args, **kwargs): + warnings.warn( + "'werkzeug.utils.Headers' has moved to 'werkzeug" + ".datastructures.Headers' as of version 0.5. This old" + " import will be removed in version 1.0.", + DeprecationWarning, + stacklevel=2, + ) + super(Headers, self).__init__(*args, **kwargs) + + +class EnvironHeaders(_EnvironHeaders): + def __init__(self, *args, **kwargs): + warnings.warn( + "'werkzeug.utils.EnvironHeaders' has moved to 'werkzeug" + ".datastructures.EnvironHeaders' as of version 0.5. This" + " old import will be removed in version 1.0.", + DeprecationWarning, + stacklevel=2, + ) + super(EnvironHeaders, self).__init__(*args, **kwargs) + + +def parse_cookie(*args, **kwargs): + warnings.warn( + "'werkzeug.utils.parse_cookie' as moved to 'werkzeug.http" + ".parse_cookie' as of version 0.5. This old import will be" + " removed in version 1.0.", + DeprecationWarning, + stacklevel=2, + ) + return _parse_cookie(*args, **kwargs) + + +def dump_cookie(*args, **kwargs): + warnings.warn( + "'werkzeug.utils.dump_cookie' as moved to 'werkzeug.http" + ".dump_cookie' as of version 0.5. This old import will be" + " removed in version 1.0.", + DeprecationWarning, + stacklevel=2, + ) + return _dump_cookie(*args, **kwargs) diff --git a/week-0/day-3/my_todo_app/venv/lib/python3.6/site-packages/werkzeug/wrappers/__init__.py b/week-0/day-3/my_todo_app/venv/lib/python3.6/site-packages/werkzeug/wrappers/__init__.py new file mode 100644 index 00000000..56c764ab --- /dev/null +++ b/week-0/day-3/my_todo_app/venv/lib/python3.6/site-packages/werkzeug/wrappers/__init__.py @@ -0,0 +1,36 @@ +""" +werkzeug.wrappers +~~~~~~~~~~~~~~~~~ + +The wrappers are simple request and response objects which you can +subclass to do whatever you want them to do. The request object contains +the information transmitted by the client (webbrowser) and the response +object contains all the information sent back to the browser. + +An important detail is that the request object is created with the WSGI +environ and will act as high-level proxy whereas the response object is an +actual WSGI application. + +Like everything else in Werkzeug these objects will work correctly with +unicode data. Incoming form data parsed by the response object will be +decoded into an unicode object if possible and if it makes sense. + +:copyright: 2007 Pallets +:license: BSD-3-Clause +""" +from .accept import AcceptMixin +from .auth import AuthorizationMixin +from .auth import WWWAuthenticateMixin +from .base_request import BaseRequest +from .base_response import BaseResponse +from .common_descriptors import CommonRequestDescriptorsMixin +from .common_descriptors import CommonResponseDescriptorsMixin +from .etag import ETagRequestMixin +from .etag import ETagResponseMixin +from .request import PlainRequest +from .request import Request +from .request import StreamOnlyMixin +from .response import Response +from .response import ResponseStream +from .response import ResponseStreamMixin +from .user_agent import UserAgentMixin diff --git a/week-0/day-3/my_todo_app/venv/lib/python3.6/site-packages/werkzeug/wrappers/__pycache__/__init__.cpython-36.pyc b/week-0/day-3/my_todo_app/venv/lib/python3.6/site-packages/werkzeug/wrappers/__pycache__/__init__.cpython-36.pyc new file mode 100644 index 0000000000000000000000000000000000000000..3d1a2b57b8c023fb713f8e28d124e568ae891eae GIT binary patch literal 1632 zcmaJ>TW=dh6t)v5cGkDpNn3&hI*;VRan%ZeB20>2>S;g#3w(MK#r{_q1AG)S8qf)h7D+?h{3?3ktyxL{l(Kl$?U5 zZ!2mn5Sb%3rILn%N`Io6HBc8UD`2fE$cT(gm1dk616Dz<&`B(PN459YL|U)~6^-)( zz`Zb#H++yOX$g}i!a!j1jnaZxrX*NRq!G+onnSvFJdkllk@Az8rm0r7q59m{=zO8h z=ngLs&VBN2ZsTZDlC4~2E_+LN5k*%LPz0r|D?X=K8wZB%VPih>PWkA{G{vTKsF^K% z$m06z7ZH{3n8r4ohBd<)NQQzMDA=-?any)IsnyLIC8J2--mq(8E4F(vYK)l`;oxWi zhsjyy6~bb_VJiww@3k$MTmt1dC?;XCoxUTzJvvuMt@H|2*BYnE@%31BR7sYpoI*}4 z!7;s%nG%lAO~V_ZB--o-5yTF4`UX=P<X@jW~y9k6v&yi-ek literal 0 HcmV?d00001 diff --git a/week-0/day-3/my_todo_app/venv/lib/python3.6/site-packages/werkzeug/wrappers/__pycache__/accept.cpython-36.pyc b/week-0/day-3/my_todo_app/venv/lib/python3.6/site-packages/werkzeug/wrappers/__pycache__/accept.cpython-36.pyc new file mode 100644 index 0000000000000000000000000000000000000000..e8a27177016f8473083e2a8659ff00ba9515d88c GIT binary patch literal 2161 zcmb_d%WfMt6rG1gFUxk&1l^=Sxofq^C`b^XFoGbesyYU2)ks_v7@(l(AuWwFFOwWA z7K&_?@94fi&@bp$%&I_F{ez;bUUD9i3Kd3xQW)wE$+^7u+;hmMySv?=|9bZ0?@hz_ z!&qw#uwTL>PNAa)HA5pZJ=0XS1-9i`+P1;AJzLw2un{?)qirW_MlG*p8ixjL($)uq zwpe>@^c<5)0Y08*n>k z{Oy8eQ^9h z`sgAHLi*?$&*SvnldlFpl(-El00(nUQXq~P6o|X&ZGNvXah>Bn_!Nq_hO_vrfLK$& z{rAF;MDw~r(=W8}KY+QRsx5flU&9lRUJYNr8CSUSHYCV9sw*_gyUJF87F`dle80@O z3i(qQ6siV>W0{MGThOUiZU^Tce7R1wrKySbYXuF9{e%YbbQ7B*2;m|$uIE9Cq!5o} zJksn|6e64;!Tw_;lnuMY8Z1+FGub1U)ch1;?HFBuc1_6p#zJa)GN z{82*QJiu4vtI=~^bOTa@Dge&$lu`89eOAvxt&U;@b-D?XOjIk&u;x%Ff;gLIA>r$v z+ZQfd0WoYlD(a<^ekX5Z z9FvG)oOdyf5}Jj|?qPhLk+7U;VN4SrV-EMU!FN@+r#f{eaV4HLfoiELmGTyJO3p$_ zxa~BoUaQyXwe|R<-}Ux3?+q<@ovA)f^Ttfdv^Z>?Oa`IQyXVc~TG3v%ZJW2B7g@Ye Mw~5}nXO=(v9}Ln+vH$=8 literal 0 HcmV?d00001 diff --git a/week-0/day-3/my_todo_app/venv/lib/python3.6/site-packages/werkzeug/wrappers/__pycache__/auth.cpython-36.pyc b/week-0/day-3/my_todo_app/venv/lib/python3.6/site-packages/werkzeug/wrappers/__pycache__/auth.cpython-36.pyc new file mode 100644 index 0000000000000000000000000000000000000000..259ae8f7b4102f3b1fc1394b2b94df35279ff635 GIT binary patch literal 1650 zcmbW1L2uhO6vs(PwiVA_y{zaV*Z^U`4jvYH*f5|l(x5>POAkwj%|ieI1I>y|tyGp& zlB!!F?Il6GPqF(B`$D?zv~Mu%wD+jUv$GzC$>1|dQSbfV?us6adv@Ft z{tsll^M?cO#{Or4K<7<8jmIF#t}_VEaHcArS2?2bCMr)7Fpcbmk1C8`e!{+dqAvX~S}vH!SCQnCMxt+L|9mv<+p*NINr zj3+C_3)o9N!E%Si%X+v~_W@>wP!e}Qt6-}jcH6?OU zRJJA+$lzOStivIH816%8`U@}@WI)uOu%VuI)gFcv^d8A}FNpdasHB&~&N&Bgn?P{) zq#8lC`?!N`NvhFJDPyPZHFW7{$K>nFAoANvjj8e>ezSSFZ}kq`DrEtON$#OKd`swv z_Nhm!yYJeBu=UmI2oKUc=BYjm*RK98cI>KM@T_`huof_3m0(TO4jMcTtv)LaGv2!0 z?!XF-kP&at1;#)9Px=6KHH2@}`)F>V8G)(&_L@?76>RW~LX?I21L)aJL-u_NP~*(W v*sr~XF@-(YHk-Ornk3csjMUu*H+ul=2k-J-`v=W|J48Bc-3JtY?r8Wo-a5A0 literal 0 HcmV?d00001 diff --git a/week-0/day-3/my_todo_app/venv/lib/python3.6/site-packages/werkzeug/wrappers/__pycache__/base_request.cpython-36.pyc b/week-0/day-3/my_todo_app/venv/lib/python3.6/site-packages/werkzeug/wrappers/__pycache__/base_request.cpython-36.pyc new file mode 100644 index 0000000000000000000000000000000000000000..e5f44184b17cdc6c9a7d08d06c0c96cf187e43cf GIT binary patch literal 22648 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 literal 0 HcmV?d00001 diff --git a/week-0/day-3/my_todo_app/venv/lib/python3.6/site-packages/werkzeug/wrappers/__pycache__/base_response.cpython-36.pyc b/week-0/day-3/my_todo_app/venv/lib/python3.6/site-packages/werkzeug/wrappers/__pycache__/base_response.cpython-36.pyc new file mode 100644 index 0000000000000000000000000000000000000000..5229914f64127d43c282d09b07b5dcc0c8dec0c3 GIT binary patch literal 23280 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≤~ zJ8lC;G7h4l7&5YYcq0qWyz<2^?)crwA%Q0{l@Fr;Z;lzoF#AMfv{{Z~bD6+JXDfVU z->szM(RK?RWSHv29%Qat$@ayD%7l^4-sK6EH?Da1KDs9kV7t8eu81{eU9Q^S4Ko$z z0c^X0Vn{`6e#olK^aDVmhhq9B6=B&J8FKRc0Hi$wh_n$c12<#lL9ylsPydRhXF`5k z;Wj)>e8{w31RCi}#F-q-)KU)?B;S*mB)}aTzkxOk@SGFep|2>S9EIL;bDTWikBxzF zk+|lrK5)@$t-1BE&QqOMp3D5q;iE-S-m<|}O>6HPsvR%gvO?KB z`C3uby^PD({~DKRDfu4RRUIGM9nbmP(EfnT!UeP?XXcKkkO% zI@CsyrB$>*`48|FwRxE|)uRrc9a>cisSU4A$WrDE$y>Y(uRAHFp%i_=evff!o{6Z5 ziYF_21*LQbuF4?FrNK}fr_YkX;N+GZD7K4l=sThn7A>$^Rli#;qWF$}#tY34tu06} zy793NwdlNcsuInH_D|5-&|v&+lv2B|Z97lYmmpYyNJ_n6^_b-OK4Y&)+IoS^bXMy;LF3)3bZ3=I6Tn$peojK%|C~U z=d*Z3<{A0rEL__ERmb)_TR zFv?(_k?-cthQPT3EgMbo6NlsL5*`!lIhJ?C1YC zJlfAxAPY{$XVb-x?)!8#c;9Mz}71%R4>Eu6$HR!en! zkV`Nbw9dCXnYvy?Kcp_nlhla>Fe62Khf&FVUgX5n|6TO&PSFP(!#IyC2O69Jrr%h+ zINIde3L_p>fwBM;ayv?-ky=D8-kd~fI_jijt5V6JBnW7-qn!|mQ0&E?47MC!gWy23 zsKr6MavUe?C_5c?B7M`*0vgY2w@^knrjhy%B5Pu6Vtnkd2kES{Ozc_iAlX+sFnLn+ z;J9u;>YC2UE+in#x>jxH!#sgn*PYR<|G(4D0Fzp==xJZdbj5<(|^PqY|Zfc0My z&Hp|x#QIhP?;8~%#7&$a3VoQ}_C8G+r=1M3`}|Kx9@HHQ3lu-&ODC%ZwtAOxhJS40 zWDfI0ELHrhe1umQz|Jl)kApcIhe8kI|Mj7M_ZjvP`)WHpDJ3SiBj1KyWt_*<#%AY^ zQ)xZajYmU6;?7X$<lchszUzN zTAYM4`UiNZ)e~;w^wz;2M$p^szjQlRTjGvQ`^0puW_6u^cO~@|SNUIycF^+Lq|ExZ*L2f-U{sJVVm9|p&PoHkCs;H)?II%@K=!i#9Qf5ejL zZB$;P*Lh)fS9AlHbY6~@Yf_JH^YI;C-sRgu{Qz68*_(g^4!N zChwVC8!-QE0S{SFcpyYBB%nFV^O3v!!C=WqeLS(POz(DWSB8X%%Q2Ias^ zYmqAhd&InwNtE-n!eF!xF*95u+I3oiP8&y5&b8`|*PP%*R`N!UR)s7@3tQ36pJFW$ r#U4wPeQ8yj+XCN7OPAKJYYf6MFs$FpxYQtapZKp_tJhA|ur&V{PB`0; literal 0 HcmV?d00001 diff --git a/week-0/day-3/my_todo_app/venv/lib/python3.6/site-packages/werkzeug/wrappers/__pycache__/common_descriptors.cpython-36.pyc b/week-0/day-3/my_todo_app/venv/lib/python3.6/site-packages/werkzeug/wrappers/__pycache__/common_descriptors.cpython-36.pyc new file mode 100644 index 0000000000000000000000000000000000000000..bc34c217b0ebffef934d2d6541cfc89c001b3d95 GIT binary patch literal 12149 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 CaD&_c literal 0 HcmV?d00001 diff --git a/week-0/day-3/my_todo_app/venv/lib/python3.6/site-packages/werkzeug/wrappers/__pycache__/json.cpython-36.pyc b/week-0/day-3/my_todo_app/venv/lib/python3.6/site-packages/werkzeug/wrappers/__pycache__/json.cpython-36.pyc new file mode 100644 index 0000000000000000000000000000000000000000..6c1af6d56e58839ad9f2f2eb510351dfb0de8bf8 GIT binary patch literal 4273 zcmbtXTaz0{6`q@<(MY>qJ0?KY0z(L~<*cO?;SvO8TsU#!P!TD1gB=wxnw@T0vpbrR zyIWpMX!DTu8Ofo+jwqX!3J(%wT3>jLp7j5^W_`-_rkf-)1&*5@%fLSFmQYN>Uxy z`ZY~g6L(zi*G*&A)VsZY>eYCSOCHCT<{{Am}A7pHr@W=!Ydgz}R-$9e_p;N}fQ09?!W{Il{ zKO5pDOh4;()OgaF#FLwc(>P%_9|b4rfGnzc+RH}J0~kbgp&yuvU4P}v^|+Y zQpShjG*OqqNp7PvtfuMe=9x`vesu%9_HuJXw@MEoNb>yxO@1HU!a4#vtafIZ1?>PM zpjD1=HAE}x$X=L3b76fBL|bkz_avW$B2<}>&&<7NW;d^ug5`AyLkf=hOdhl>@l_lm zzJ{*l&`YY^CBA~Gyb_RJd4)~K6WOwJJ4$43XNO0*b$p`1D!Qx0`f5HalObiPX=QJKC`<;Xu&XRGj#Knd%mQU7n9ag~il$c4?6s<*j(76P;Y@KU zszg^AhrM&Ls~3_iWF)mIg-;Xi(i<*H{vE7-7p;`svs}}&&P%R&^^E7HZDD1LZNq$a^162L_(`0GZ^N-aAj(&n50jGI?~)sJ2k^LX;D^$u&29fqnEHp@ zAIDEP^RXR%=pSZkajIj^jq0wuLObbI6~uyKQe zW6PZX^D5qrH)pFlWY?=H7=2Z&4w?TNEgho`}w zFF9_HjIcY1rS|PXt5lHQz5~4Ea>GNeiXHw*tVVtr7yM8>oQ`>_06o1z4}zz=+zr~1 zJQ;3SHW_v95T>_CWgY5j^X-+1wP|Su4=q#E@Vo+o;5micGxOM*_zUw0Y3j_(h=P$* z25C9-Pw$L)bWBL$24I5)OczknXzuwO>Tt1={=XsS!-ik5e&cm*C2JJsI~M_;H#cYI z75xU{k-L-+0at}WNdlOn6Vnue@=fTSTVr(*#ael5?_#|OR+TCRD}>oKoaLTXP9ZcK zXc|!pv$G~)N{D_2^c-Yq6f3V5#mdqcAE0ajvQ`flT8YAF#9LNz%Vd&*vRf&qpfq(+ z&?^BM1Z@ov2ecjSV_PA!X(2IeTl3wu%>TLl?m0-{#n?;sYo*wrdnUnk+~ z>(M^cn!JiNOWt5m4wSvHne~}@>dba9qAcPdpHxt%4WW7!s{h3_POGLde}7?#Il~(G z|B?9r#yYK?x{KPPGDIc{jPw=E))rNIe`Ak(T3=Ka^H{O)c|g+s z4eKS3MFp_h;cK{+4__Qji?Bw{h0u1+q*(@^PcwwHG6MYH0bmaY#B${if~%=Wr9T+- zvXl=78}R|MPzFFf=?}v=k$cNnk)`^I1Im(E4QQ1!L@DVT{qV@PVZ7dGp4)}@veXGVVVhk9vd9uhsjAe10OM4CoG+yRtlDUBt%SA z*WaiAs0h2H8FB=QCdx)jL6%6YIA|r1UJ&rt{$H}yz5=eOyb9@b&Md<@QfR3hWk)$Z zlvK5+>Ktc6Y$LkD1GS5x_Gkv0JJVq2?mI~mPh>2`oA3$oLv(qAf>K$Q=n5nEeoYYT zA~%2e`S;ZFihxtm(DthZGWt+mSBJSJ9_J?S*8%xBOadAO{d%zvqYK_I_8`jd(ByS= z#?BQ~Q=aKqP0KQO@N+;r2wF|c)Bn5FTk|XHaInlK=VF)*UOEI^0iobzN5~3i_~AQ& zKAPpfPF7hsV-P3m+Bnti!hda?T20dB-$*PFys?T=CZy1+=F+LG14>t_Fe6D zWcEcFT$B)~*6}si^?(1yX%8X00`T%Ggu_SDGJ^jMa~JRMCz$&KT9L1-bInW_g6-#9 zQLkm+y?fBw7OxSvYt+&8=d~a}NfZRSh7~`iDR&|=d^M?=Xw$Zp`HHt__#^7bgapa3 zA=kP@ejN)PG)ZZ}tve2ktKMw7b=UH43R-Plruuw1MJz+DE+_{I$|GV69b}5K@g!9G zTQK+5&=&AirV7zbe^T_lb%j@aRy6MEFLCWrTK>FRKwKzDhd)o|-2G`$P~M{APri(< UiPTMBhWNoV=zD3~-uc$Q0TOC$IsgCw literal 0 HcmV?d00001 diff --git a/week-0/day-3/my_todo_app/venv/lib/python3.6/site-packages/werkzeug/wrappers/__pycache__/request.cpython-36.pyc b/week-0/day-3/my_todo_app/venv/lib/python3.6/site-packages/werkzeug/wrappers/__pycache__/request.cpython-36.pyc new file mode 100644 index 0000000000000000000000000000000000000000..b3bdb402e1220b26f322c7c5e9d84693eb3d369d GIT binary patch literal 1767 zcmah~OONA35Vm6{aU3TzT4}XNfYdjL#3U;a5=6UbhsPog42T_sWQ3fKyOQ+MeoS|J zvNPA=z^~xWU-Fd`{{V5Kx}Ah@p{AF*o*D3w`zK?nW1tc=Kr`1X%#pl>|m) z;}t39&mq->XQhA)jqrR)^a{wL5TaO{Rc1m|(=a6XoRMiNs8Z9}Ui>q>EeW*=AuFH^ zBq^y>D19Jw7+)g^nl1^=8A)l1rqd$VvJhm2TjEt6FXyAtP+^V;HAy1e2&)o4PT7>I!Kb7W{@Oxm?T-jDq;92Nvv6jo`&YZ63H7}&iP_ZCf6I~F-6`c#%<)7dQs?D}I8WVD9 zv~BJwW6o-rQmy55w%`KP>^-twqUem6BR;P*D2p!Z$@5BSQp)0*Gaz(dg|cz(Nudp@ z$*NexHKGfRQ?aHu_;XFUFy4-vo*0h_UQh@(${4Welsp`NY&Bm#y%=?*DT53R=^GLu zi63kNNf^~MVY^Wf-(S;QCnogf$n+7ge{s=pL!;;f$(#784w9hjw|v*`9WV21Mnv?j zpnN-$Zht&K91LrYbFI?EbQGsJK=z7){aVsF7hH2t|C7 literal 0 HcmV?d00001 diff --git a/week-0/day-3/my_todo_app/venv/lib/python3.6/site-packages/werkzeug/wrappers/__pycache__/response.cpython-36.pyc b/week-0/day-3/my_todo_app/venv/lib/python3.6/site-packages/werkzeug/wrappers/__pycache__/response.cpython-36.pyc new file mode 100644 index 0000000000000000000000000000000000000000..83aea9f3339ec8b0243213a20cef5dfb4db6800c GIT binary patch literal 3278 zcma)8-EJF26y9HZ zwNsA+?M*1+04l0cJ@XTpqsE%kh<+ot?Y69I`})fiKzj;X#;yeDj_!*kdNLG!YE??`)-UoF>)CeI^1P zW-{fX`r^`qZGTYBtHA)4m_8=7Hlc{0p<i&AVB17PH94_uO$m+7{obtry@(IKv1~yR z%TOKZN16xhf*KG71dQ&(j!`(3uA&x1DeMu(EWx5a2cBwwXuJupfA6fzI9t!cY_*q% z5nbK$_LJ=3^DozT7=Jcq`Cxs2+TeZ$#1ZS2;JTh_-bb9gDyDOd>96s#N2Ik``(7o*MYzd&)z^PBE}F z!RP|k3Q%|Dt>@Cwjw>pU@lCN$AuaD8Ar}ufS4s&6nzTwC)~L*XA?@yScJ?`7GZ)c zEh=eilp$9ShCUZeUa+JCQJB&&8GMGzD*6~_4xCD++iBw&mH099yrSWGaZ2+D+fC2g z%l&9FQ};ZY1~6=a0OM^?tzw8@!`5}I-o^?+~tVEH(a1y+}Xh(_~iW zaX7t%+$AFKsT{`y%ZkhRZNrg$N5qi%<$hu0KPt;+vnkMiuWJAXLe!w89&SXVWWyCV| z&G2S=+90M9m{YQLd}|vrH=iV&sRH7Q(<@GLGjIyOzJOY_QtB&ofFhPTzCO!lh3;A@ z*6q~z`yk41V)X%5A7X`H@(xz#k>X>RxD7=G43dK5$P5WEKsHeXIs5(vxr?ScK zgXqH?eA8#Xge*l*aG2a~!Z?dqjCZ?appfpTQIzguPq|iXG?aT*r*t`UiQ83dV$vTF zKcOVRYa|IEeeyISLl}a@Fql(PS@=XsvikGf4?3vT`>U(Et z-E*IZX)egO+uJ{$y6BbEJK5WLSKU&9`VbgiU4!xZFfmk_)9qO2I{Q2qe*$j1i~d6< zI4zESJc#UEhLKSGC@fry0(7_ jMIyD(d88|xugi1q4pK|J1yxg@{LJOm4TB(wqy<^h zgi`XBNKg7-iS(7X@e^ML??^QG?Lk{ayN9VrGbMSgt6FJ$lR|oDKAfiD<|zb45-LgJ zNt*a7=rK1m8T5GFgAYdO(}gPSS$>_D>z}7m8YbARfjk#jm@#3k&gYF)%vQ{1ifOfK zl(DRuU#iryHp|m2WMFAkT9KE=b=5)}B^e?yhs3H2SD5Rn#iY%IWdOZcC=HE(>_G0( z1rj+)3t`O3>`SZk=e24U6U1|HX0jtc+fteIEI?&vs22JgaPtU)q|!r$??B;OdP^?7 z4Fz5O_2c)jR@!I{3-2+WXoLd64|k&?KMDU+(0GB}P?cA?uFA;k0;7rxm;Fxk5Q=}N zv0c`2o!7_nCNJdiinnEb{p@A@al27`zgpaCQNw+j7zgy~PwJb_&FeoyKr}d$_+xMV zWXH!5$B~?D$cu*^JOKQ0?%X4SB)sPl_BS{N;%gklRm_Nr1!!IKk-T7 rR5yAQ1fI*BM?p7eY+e}mdw0;k2UpueaDWKYjb8OMUZbi8M~?k}BDB~p literal 0 HcmV?d00001 diff --git a/week-0/day-3/my_todo_app/venv/lib/python3.6/site-packages/werkzeug/wrappers/accept.py b/week-0/day-3/my_todo_app/venv/lib/python3.6/site-packages/werkzeug/wrappers/accept.py new file mode 100644 index 00000000..d0620a0a --- /dev/null +++ b/week-0/day-3/my_todo_app/venv/lib/python3.6/site-packages/werkzeug/wrappers/accept.py @@ -0,0 +1,50 @@ +from ..datastructures import CharsetAccept +from ..datastructures import LanguageAccept +from ..datastructures import MIMEAccept +from ..http import parse_accept_header +from ..utils import cached_property + + +class AcceptMixin(object): + """A mixin for classes with an :attr:`~BaseResponse.environ` attribute + to get all the HTTP accept headers as + :class:`~werkzeug.datastructures.Accept` objects (or subclasses + thereof). + """ + + @cached_property + def accept_mimetypes(self): + """List of mimetypes this client supports as + :class:`~werkzeug.datastructures.MIMEAccept` object. + """ + return parse_accept_header(self.environ.get("HTTP_ACCEPT"), MIMEAccept) + + @cached_property + def accept_charsets(self): + """List of charsets this client supports as + :class:`~werkzeug.datastructures.CharsetAccept` object. + """ + return parse_accept_header( + self.environ.get("HTTP_ACCEPT_CHARSET"), CharsetAccept + ) + + @cached_property + def accept_encodings(self): + """List of encodings this client accepts. Encodings in a HTTP term + are compression encodings such as gzip. For charsets have a look at + :attr:`accept_charset`. + """ + return parse_accept_header(self.environ.get("HTTP_ACCEPT_ENCODING")) + + @cached_property + def accept_languages(self): + """List of languages this client accepts as + :class:`~werkzeug.datastructures.LanguageAccept` object. + + .. versionchanged 0.5 + In previous versions this was a regular + :class:`~werkzeug.datastructures.Accept` object. + """ + return parse_accept_header( + self.environ.get("HTTP_ACCEPT_LANGUAGE"), LanguageAccept + ) diff --git a/week-0/day-3/my_todo_app/venv/lib/python3.6/site-packages/werkzeug/wrappers/auth.py b/week-0/day-3/my_todo_app/venv/lib/python3.6/site-packages/werkzeug/wrappers/auth.py new file mode 100644 index 00000000..714f7554 --- /dev/null +++ b/week-0/day-3/my_todo_app/venv/lib/python3.6/site-packages/werkzeug/wrappers/auth.py @@ -0,0 +1,33 @@ +from ..http import parse_authorization_header +from ..http import parse_www_authenticate_header +from ..utils import cached_property + + +class AuthorizationMixin(object): + """Adds an :attr:`authorization` property that represents the parsed + value of the `Authorization` header as + :class:`~werkzeug.datastructures.Authorization` object. + """ + + @cached_property + def authorization(self): + """The `Authorization` object in parsed form.""" + header = self.environ.get("HTTP_AUTHORIZATION") + return parse_authorization_header(header) + + +class WWWAuthenticateMixin(object): + """Adds a :attr:`www_authenticate` property to a response object.""" + + @property + def www_authenticate(self): + """The `WWW-Authenticate` header in a parsed form.""" + + def on_update(www_auth): + if not www_auth and "www-authenticate" in self.headers: + del self.headers["www-authenticate"] + elif www_auth: + self.headers["WWW-Authenticate"] = www_auth.to_header() + + header = self.headers.get("www-authenticate") + return parse_www_authenticate_header(header, on_update) diff --git a/week-0/day-3/my_todo_app/venv/lib/python3.6/site-packages/werkzeug/wrappers/base_request.py b/week-0/day-3/my_todo_app/venv/lib/python3.6/site-packages/werkzeug/wrappers/base_request.py new file mode 100644 index 00000000..05a634ec --- /dev/null +++ b/week-0/day-3/my_todo_app/venv/lib/python3.6/site-packages/werkzeug/wrappers/base_request.py @@ -0,0 +1,695 @@ +import warnings +from functools import update_wrapper +from io import BytesIO + +from .._compat import to_native +from .._compat import to_unicode +from .._compat import wsgi_decoding_dance +from .._compat import wsgi_get_bytes +from ..datastructures import CombinedMultiDict +from ..datastructures import EnvironHeaders +from ..datastructures import ImmutableList +from ..datastructures import ImmutableMultiDict +from ..datastructures import ImmutableTypeConversionDict +from ..datastructures import iter_multi_items +from ..datastructures import MultiDict +from ..formparser import default_stream_factory +from ..formparser import FormDataParser +from ..http import parse_cookie +from ..http import parse_options_header +from ..urls import url_decode +from ..utils import cached_property +from ..utils import environ_property +from ..wsgi import get_content_length +from ..wsgi import get_current_url +from ..wsgi import get_host +from ..wsgi import get_input_stream + + +class BaseRequest(object): + """Very basic request object. This does not implement advanced stuff like + entity tag parsing or cache controls. The request object is created with + the WSGI environment as first argument and will add itself to the WSGI + environment as ``'werkzeug.request'`` unless it's created with + `populate_request` set to False. + + There are a couple of mixins available that add additional functionality + to the request object, there is also a class called `Request` which + subclasses `BaseRequest` and all the important mixins. + + It's a good idea to create a custom subclass of the :class:`BaseRequest` + and add missing functionality either via mixins or direct implementation. + Here an example for such subclasses:: + + from werkzeug.wrappers import BaseRequest, ETagRequestMixin + + class Request(BaseRequest, ETagRequestMixin): + pass + + Request objects are **read only**. As of 0.5 modifications are not + allowed in any place. Unlike the lower level parsing functions the + request object will use immutable objects everywhere possible. + + Per default the request object will assume all the text data is `utf-8` + encoded. Please refer to :doc:`the unicode chapter ` for more + details about customizing the behavior. + + Per default the request object will be added to the WSGI + environment as `werkzeug.request` to support the debugging system. + If you don't want that, set `populate_request` to `False`. + + If `shallow` is `True` the environment is initialized as shallow + object around the environ. Every operation that would modify the + environ in any way (such as consuming form data) raises an exception + unless the `shallow` attribute is explicitly set to `False`. This + is useful for middlewares where you don't want to consume the form + data by accident. A shallow request is not populated to the WSGI + environment. + + .. versionchanged:: 0.5 + read-only mode was enforced by using immutables classes for all + data. + """ + + #: the charset for the request, defaults to utf-8 + charset = "utf-8" + + #: the error handling procedure for errors, defaults to 'replace' + encoding_errors = "replace" + + #: the maximum content length. This is forwarded to the form data + #: parsing function (:func:`parse_form_data`). When set and the + #: :attr:`form` or :attr:`files` attribute is accessed and the + #: parsing fails because more than the specified value is transmitted + #: a :exc:`~werkzeug.exceptions.RequestEntityTooLarge` exception is raised. + #: + #: Have a look at :ref:`dealing-with-request-data` for more details. + #: + #: .. versionadded:: 0.5 + max_content_length = None + + #: the maximum form field size. This is forwarded to the form data + #: parsing function (:func:`parse_form_data`). When set and the + #: :attr:`form` or :attr:`files` attribute is accessed and the + #: data in memory for post data is longer than the specified value a + #: :exc:`~werkzeug.exceptions.RequestEntityTooLarge` exception is raised. + #: + #: Have a look at :ref:`dealing-with-request-data` for more details. + #: + #: .. versionadded:: 0.5 + max_form_memory_size = None + + #: the class to use for `args` and `form`. The default is an + #: :class:`~werkzeug.datastructures.ImmutableMultiDict` which supports + #: multiple values per key. alternatively it makes sense to use an + #: :class:`~werkzeug.datastructures.ImmutableOrderedMultiDict` which + #: preserves order or a :class:`~werkzeug.datastructures.ImmutableDict` + #: which is the fastest but only remembers the last key. It is also + #: possible to use mutable structures, but this is not recommended. + #: + #: .. versionadded:: 0.6 + parameter_storage_class = ImmutableMultiDict + + #: the type to be used for list values from the incoming WSGI environment. + #: By default an :class:`~werkzeug.datastructures.ImmutableList` is used + #: (for example for :attr:`access_list`). + #: + #: .. versionadded:: 0.6 + list_storage_class = ImmutableList + + #: the type to be used for dict values from the incoming WSGI environment. + #: By default an + #: :class:`~werkzeug.datastructures.ImmutableTypeConversionDict` is used + #: (for example for :attr:`cookies`). + #: + #: .. versionadded:: 0.6 + dict_storage_class = ImmutableTypeConversionDict + + #: The form data parser that shoud be used. Can be replaced to customize + #: the form date parsing. + form_data_parser_class = FormDataParser + + #: Optionally a list of hosts that is trusted by this request. By default + #: all hosts are trusted which means that whatever the client sends the + #: host is will be accepted. + #: + #: Because `Host` and `X-Forwarded-Host` headers can be set to any value by + #: a malicious client, it is recommended to either set this property or + #: implement similar validation in the proxy (if application is being run + #: behind one). + #: + #: .. versionadded:: 0.9 + trusted_hosts = None + + #: Indicates whether the data descriptor should be allowed to read and + #: buffer up the input stream. By default it's enabled. + #: + #: .. versionadded:: 0.9 + disable_data_descriptor = False + + def __init__(self, environ, populate_request=True, shallow=False): + self.environ = environ + if populate_request and not shallow: + self.environ["werkzeug.request"] = self + self.shallow = shallow + + def __repr__(self): + # make sure the __repr__ even works if the request was created + # from an invalid WSGI environment. If we display the request + # in a debug session we don't want the repr to blow up. + args = [] + try: + args.append("'%s'" % to_native(self.url, self.url_charset)) + args.append("[%s]" % self.method) + except Exception: + args.append("(invalid WSGI environ)") + + return "<%s %s>" % (self.__class__.__name__, " ".join(args)) + + @property + def url_charset(self): + """The charset that is assumed for URLs. Defaults to the value + of :attr:`charset`. + + .. versionadded:: 0.6 + """ + return self.charset + + @classmethod + def from_values(cls, *args, **kwargs): + """Create a new request object based on the values provided. If + environ is given missing values are filled from there. This method is + useful for small scripts when you need to simulate a request from an URL. + Do not use this method for unittesting, there is a full featured client + object (:class:`Client`) that allows to create multipart requests, + support for cookies etc. + + This accepts the same options as the + :class:`~werkzeug.test.EnvironBuilder`. + + .. versionchanged:: 0.5 + This method now accepts the same arguments as + :class:`~werkzeug.test.EnvironBuilder`. Because of this the + `environ` parameter is now called `environ_overrides`. + + :return: request object + """ + from ..test import EnvironBuilder + + charset = kwargs.pop("charset", cls.charset) + kwargs["charset"] = charset + builder = EnvironBuilder(*args, **kwargs) + try: + return builder.get_request(cls) + finally: + builder.close() + + @classmethod + def application(cls, f): + """Decorate a function as responder that accepts the request as + the last argument. This works like the :func:`responder` + decorator but the function is passed the request object as the + last argument and the request object will be closed + automatically:: + + @Request.application + def my_wsgi_app(request): + return Response('Hello World!') + + As of Werkzeug 0.14 HTTP exceptions are automatically caught and + converted to responses instead of failing. + + :param f: the WSGI callable to decorate + :return: a new WSGI callable + """ + #: return a callable that wraps the -2nd argument with the request + #: and calls the function with all the arguments up to that one and + #: the request. The return value is then called with the latest + #: two arguments. This makes it possible to use this decorator for + #: both standalone WSGI functions as well as bound methods and + #: partially applied functions. + from ..exceptions import HTTPException + + def application(*args): + request = cls(args[-2]) + with request: + try: + resp = f(*args[:-2] + (request,)) + except HTTPException as e: + resp = e.get_response(args[-2]) + return resp(*args[-2:]) + + return update_wrapper(application, f) + + def _get_file_stream( + self, total_content_length, content_type, filename=None, content_length=None + ): + """Called to get a stream for the file upload. + + This must provide a file-like class with `read()`, `readline()` + and `seek()` methods that is both writeable and readable. + + The default implementation returns a temporary file if the total + content length is higher than 500KB. Because many browsers do not + provide a content length for the files only the total content + length matters. + + :param total_content_length: the total content length of all the + data in the request combined. This value + is guaranteed to be there. + :param content_type: the mimetype of the uploaded file. + :param filename: the filename of the uploaded file. May be `None`. + :param content_length: the length of this file. This value is usually + not provided because webbrowsers do not provide + this value. + """ + return default_stream_factory( + total_content_length=total_content_length, + filename=filename, + content_type=content_type, + content_length=content_length, + ) + + @property + def want_form_data_parsed(self): + """Returns True if the request method carries content. As of + Werkzeug 0.9 this will be the case if a content type is transmitted. + + .. versionadded:: 0.8 + """ + return bool(self.environ.get("CONTENT_TYPE")) + + def make_form_data_parser(self): + """Creates the form data parser. Instantiates the + :attr:`form_data_parser_class` with some parameters. + + .. versionadded:: 0.8 + """ + return self.form_data_parser_class( + self._get_file_stream, + self.charset, + self.encoding_errors, + self.max_form_memory_size, + self.max_content_length, + self.parameter_storage_class, + ) + + def _load_form_data(self): + """Method used internally to retrieve submitted data. After calling + this sets `form` and `files` on the request object to multi dicts + filled with the incoming form data. As a matter of fact the input + stream will be empty afterwards. You can also call this method to + force the parsing of the form data. + + .. versionadded:: 0.8 + """ + # abort early if we have already consumed the stream + if "form" in self.__dict__: + return + + _assert_not_shallow(self) + + if self.want_form_data_parsed: + content_type = self.environ.get("CONTENT_TYPE", "") + content_length = get_content_length(self.environ) + mimetype, options = parse_options_header(content_type) + parser = self.make_form_data_parser() + data = parser.parse( + self._get_stream_for_parsing(), mimetype, content_length, options + ) + else: + data = ( + self.stream, + self.parameter_storage_class(), + self.parameter_storage_class(), + ) + + # inject the values into the instance dict so that we bypass + # our cached_property non-data descriptor. + d = self.__dict__ + d["stream"], d["form"], d["files"] = data + + def _get_stream_for_parsing(self): + """This is the same as accessing :attr:`stream` with the difference + that if it finds cached data from calling :meth:`get_data` first it + will create a new stream out of the cached data. + + .. versionadded:: 0.9.3 + """ + cached_data = getattr(self, "_cached_data", None) + if cached_data is not None: + return BytesIO(cached_data) + return self.stream + + def close(self): + """Closes associated resources of this request object. This + closes all file handles explicitly. You can also use the request + object in a with statement which will automatically close it. + + .. versionadded:: 0.9 + """ + files = self.__dict__.get("files") + for _key, value in iter_multi_items(files or ()): + value.close() + + def __enter__(self): + return self + + def __exit__(self, exc_type, exc_value, tb): + self.close() + + @cached_property + def stream(self): + """ + If the incoming form data was not encoded with a known mimetype + the data is stored unmodified in this stream for consumption. Most + of the time it is a better idea to use :attr:`data` which will give + you that data as a string. The stream only returns the data once. + + Unlike :attr:`input_stream` this stream is properly guarded that you + can't accidentally read past the length of the input. Werkzeug will + internally always refer to this stream to read data which makes it + possible to wrap this object with a stream that does filtering. + + .. versionchanged:: 0.9 + This stream is now always available but might be consumed by the + form parser later on. Previously the stream was only set if no + parsing happened. + """ + _assert_not_shallow(self) + return get_input_stream(self.environ) + + input_stream = environ_property( + "wsgi.input", + """The WSGI input stream. + + In general it's a bad idea to use this one because you can + easily read past the boundary. Use the :attr:`stream` + instead.""", + ) + + @cached_property + def args(self): + """The parsed URL parameters (the part in the URL after the question + mark). + + By default an + :class:`~werkzeug.datastructures.ImmutableMultiDict` + is returned from this function. This can be changed by setting + :attr:`parameter_storage_class` to a different type. This might + be necessary if the order of the form data is important. + """ + return url_decode( + wsgi_get_bytes(self.environ.get("QUERY_STRING", "")), + self.url_charset, + errors=self.encoding_errors, + cls=self.parameter_storage_class, + ) + + @cached_property + def data(self): + """ + Contains the incoming request data as string in case it came with + a mimetype Werkzeug does not handle. + """ + + if self.disable_data_descriptor: + raise AttributeError("data descriptor is disabled") + # XXX: this should eventually be deprecated. + + # We trigger form data parsing first which means that the descriptor + # will not cache the data that would otherwise be .form or .files + # data. This restores the behavior that was there in Werkzeug + # before 0.9. New code should use :meth:`get_data` explicitly as + # this will make behavior explicit. + return self.get_data(parse_form_data=True) + + def get_data(self, cache=True, as_text=False, parse_form_data=False): + """This reads the buffered incoming data from the client into one + bytestring. By default this is cached but that behavior can be + changed by setting `cache` to `False`. + + Usually it's a bad idea to call this method without checking the + content length first as a client could send dozens of megabytes or more + to cause memory problems on the server. + + Note that if the form data was already parsed this method will not + return anything as form data parsing does not cache the data like + this method does. To implicitly invoke form data parsing function + set `parse_form_data` to `True`. When this is done the return value + of this method will be an empty string if the form parser handles + the data. This generally is not necessary as if the whole data is + cached (which is the default) the form parser will used the cached + data to parse the form data. Please be generally aware of checking + the content length first in any case before calling this method + to avoid exhausting server memory. + + If `as_text` is set to `True` the return value will be a decoded + unicode string. + + .. versionadded:: 0.9 + """ + rv = getattr(self, "_cached_data", None) + if rv is None: + if parse_form_data: + self._load_form_data() + rv = self.stream.read() + if cache: + self._cached_data = rv + if as_text: + rv = rv.decode(self.charset, self.encoding_errors) + return rv + + @cached_property + def form(self): + """The form parameters. By default an + :class:`~werkzeug.datastructures.ImmutableMultiDict` + is returned from this function. This can be changed by setting + :attr:`parameter_storage_class` to a different type. This might + be necessary if the order of the form data is important. + + Please keep in mind that file uploads will not end up here, but instead + in the :attr:`files` attribute. + + .. versionchanged:: 0.9 + + Previous to Werkzeug 0.9 this would only contain form data for POST + and PUT requests. + """ + self._load_form_data() + return self.form + + @cached_property + def values(self): + """A :class:`werkzeug.datastructures.CombinedMultiDict` that combines + :attr:`args` and :attr:`form`.""" + args = [] + for d in self.args, self.form: + if not isinstance(d, MultiDict): + d = MultiDict(d) + args.append(d) + return CombinedMultiDict(args) + + @cached_property + def files(self): + """:class:`~werkzeug.datastructures.MultiDict` object containing + all uploaded files. Each key in :attr:`files` is the name from the + ````. Each value in :attr:`files` is a + Werkzeug :class:`~werkzeug.datastructures.FileStorage` object. + + It basically behaves like a standard file object you know from Python, + with the difference that it also has a + :meth:`~werkzeug.datastructures.FileStorage.save` function that can + store the file on the filesystem. + + Note that :attr:`files` will only contain data if the request method was + POST, PUT or PATCH and the ``

    `` that posted to the request had + ``enctype="multipart/form-data"``. It will be empty otherwise. + + See the :class:`~werkzeug.datastructures.MultiDict` / + :class:`~werkzeug.datastructures.FileStorage` documentation for + more details about the used data structure. + """ + self._load_form_data() + return self.files + + @cached_property + def cookies(self): + """A :class:`dict` with the contents of all cookies transmitted with + the request.""" + return parse_cookie( + self.environ, + self.charset, + self.encoding_errors, + cls=self.dict_storage_class, + ) + + @cached_property + def headers(self): + """The headers from the WSGI environ as immutable + :class:`~werkzeug.datastructures.EnvironHeaders`. + """ + return EnvironHeaders(self.environ) + + @cached_property + def path(self): + """Requested path as unicode. This works a bit like the regular path + info in the WSGI environment but will always include a leading slash, + even if the URL root is accessed. + """ + raw_path = wsgi_decoding_dance( + self.environ.get("PATH_INFO") or "", self.charset, self.encoding_errors + ) + return "/" + raw_path.lstrip("/") + + @cached_property + def full_path(self): + """Requested path as unicode, including the query string.""" + return self.path + u"?" + to_unicode(self.query_string, self.url_charset) + + @cached_property + def script_root(self): + """The root path of the script without the trailing slash.""" + raw_path = wsgi_decoding_dance( + self.environ.get("SCRIPT_NAME") or "", self.charset, self.encoding_errors + ) + return raw_path.rstrip("/") + + @cached_property + def url(self): + """The reconstructed current URL as IRI. + See also: :attr:`trusted_hosts`. + """ + return get_current_url(self.environ, trusted_hosts=self.trusted_hosts) + + @cached_property + def base_url(self): + """Like :attr:`url` but without the querystring + See also: :attr:`trusted_hosts`. + """ + return get_current_url( + self.environ, strip_querystring=True, trusted_hosts=self.trusted_hosts + ) + + @cached_property + def url_root(self): + """The full URL root (with hostname), this is the application + root as IRI. + See also: :attr:`trusted_hosts`. + """ + return get_current_url(self.environ, True, trusted_hosts=self.trusted_hosts) + + @cached_property + def host_url(self): + """Just the host with scheme as IRI. + See also: :attr:`trusted_hosts`. + """ + return get_current_url( + self.environ, host_only=True, trusted_hosts=self.trusted_hosts + ) + + @cached_property + def host(self): + """Just the host including the port if available. + See also: :attr:`trusted_hosts`. + """ + return get_host(self.environ, trusted_hosts=self.trusted_hosts) + + query_string = environ_property( + "QUERY_STRING", + "", + read_only=True, + load_func=wsgi_get_bytes, + doc="The URL parameters as raw bytestring.", + ) + method = environ_property( + "REQUEST_METHOD", + "GET", + read_only=True, + load_func=lambda x: x.upper(), + doc="The request method. (For example ``'GET'`` or ``'POST'``).", + ) + + @cached_property + def access_route(self): + """If a forwarded header exists this is a list of all ip addresses + from the client ip to the last proxy server. + """ + if "HTTP_X_FORWARDED_FOR" in self.environ: + addr = self.environ["HTTP_X_FORWARDED_FOR"].split(",") + return self.list_storage_class([x.strip() for x in addr]) + elif "REMOTE_ADDR" in self.environ: + return self.list_storage_class([self.environ["REMOTE_ADDR"]]) + return self.list_storage_class() + + @property + def remote_addr(self): + """The remote address of the client.""" + return self.environ.get("REMOTE_ADDR") + + remote_user = environ_property( + "REMOTE_USER", + doc="""If the server supports user authentication, and the + script is protected, this attribute contains the username the + user has authenticated as.""", + ) + + scheme = environ_property( + "wsgi.url_scheme", + doc=""" + URL scheme (http or https). + + .. versionadded:: 0.7""", + ) + + @property + def is_xhr(self): + """True if the request was triggered via a JavaScript XMLHttpRequest. + This only works with libraries that support the ``X-Requested-With`` + header and set it to "XMLHttpRequest". Libraries that do that are + prototype, jQuery and Mochikit and probably some more. + + .. deprecated:: 0.13 + ``X-Requested-With`` is not standard and is unreliable. You + may be able to use :attr:`AcceptMixin.accept_mimetypes` + instead. + """ + warnings.warn( + "'Request.is_xhr' is deprecated as of version 0.13 and will" + " be removed in version 1.0. The 'X-Requested-With' header" + " is not standard and is unreliable. You may be able to use" + " 'accept_mimetypes' instead.", + DeprecationWarning, + stacklevel=2, + ) + return self.environ.get("HTTP_X_REQUESTED_WITH", "").lower() == "xmlhttprequest" + + is_secure = property( + lambda self: self.environ["wsgi.url_scheme"] == "https", + doc="`True` if the request is secure.", + ) + is_multithread = environ_property( + "wsgi.multithread", + doc="""boolean that is `True` if the application is served by a + multithreaded WSGI server.""", + ) + is_multiprocess = environ_property( + "wsgi.multiprocess", + doc="""boolean that is `True` if the application is served by a + WSGI server that spawns multiple processes.""", + ) + is_run_once = environ_property( + "wsgi.run_once", + doc="""boolean that is `True` if the application will be + executed only once in a process lifetime. This is the case for + CGI for example, but it's not guaranteed that the execution only + happens one time.""", + ) + + +def _assert_not_shallow(request): + if request.shallow: + raise RuntimeError( + "A shallow request tried to consume form data. If you really" + " want to do that, set `shallow` to False." + ) diff --git a/week-0/day-3/my_todo_app/venv/lib/python3.6/site-packages/werkzeug/wrappers/base_response.py b/week-0/day-3/my_todo_app/venv/lib/python3.6/site-packages/werkzeug/wrappers/base_response.py new file mode 100644 index 00000000..d944a7d2 --- /dev/null +++ b/week-0/day-3/my_todo_app/venv/lib/python3.6/site-packages/werkzeug/wrappers/base_response.py @@ -0,0 +1,702 @@ +import warnings + +from .._compat import integer_types +from .._compat import string_types +from .._compat import text_type +from .._compat import to_bytes +from .._compat import to_native +from ..datastructures import Headers +from ..http import dump_cookie +from ..http import HTTP_STATUS_CODES +from ..http import remove_entity_headers +from ..urls import iri_to_uri +from ..urls import url_join +from ..utils import get_content_type +from ..wsgi import ClosingIterator +from ..wsgi import get_current_url + + +def _run_wsgi_app(*args): + """This function replaces itself to ensure that the test module is not + imported unless required. DO NOT USE! + """ + global _run_wsgi_app + from ..test import run_wsgi_app as _run_wsgi_app + + return _run_wsgi_app(*args) + + +def _warn_if_string(iterable): + """Helper for the response objects to check if the iterable returned + to the WSGI server is not a string. + """ + if isinstance(iterable, string_types): + warnings.warn( + "Response iterable was set to a string. This will appear to" + " work but means that the server will send the data to the" + " client one character at a time. This is almost never" + " intended behavior, use 'response.data' to assign strings" + " to the response object.", + stacklevel=2, + ) + + +def _iter_encoded(iterable, charset): + for item in iterable: + if isinstance(item, text_type): + yield item.encode(charset) + else: + yield item + + +def _clean_accept_ranges(accept_ranges): + if accept_ranges is True: + return "bytes" + elif accept_ranges is False: + return "none" + elif isinstance(accept_ranges, text_type): + return to_native(accept_ranges) + raise ValueError("Invalid accept_ranges value") + + +class BaseResponse(object): + """Base response class. The most important fact about a response object + is that it's a regular WSGI application. It's initialized with a couple + of response parameters (headers, body, status code etc.) and will start a + valid WSGI response when called with the environ and start response + callable. + + Because it's a WSGI application itself processing usually ends before the + actual response is sent to the server. This helps debugging systems + because they can catch all the exceptions before responses are started. + + Here a small example WSGI application that takes advantage of the + response objects:: + + from werkzeug.wrappers import BaseResponse as Response + + def index(): + return Response('Index page') + + def application(environ, start_response): + path = environ.get('PATH_INFO') or '/' + if path == '/': + response = index() + else: + response = Response('Not Found', status=404) + return response(environ, start_response) + + Like :class:`BaseRequest` which object is lacking a lot of functionality + implemented in mixins. This gives you a better control about the actual + API of your response objects, so you can create subclasses and add custom + functionality. A full featured response object is available as + :class:`Response` which implements a couple of useful mixins. + + To enforce a new type of already existing responses you can use the + :meth:`force_type` method. This is useful if you're working with different + subclasses of response objects and you want to post process them with a + known interface. + + Per default the response object will assume all the text data is `utf-8` + encoded. Please refer to :doc:`the unicode chapter ` for more + details about customizing the behavior. + + Response can be any kind of iterable or string. If it's a string it's + considered being an iterable with one item which is the string passed. + Headers can be a list of tuples or a + :class:`~werkzeug.datastructures.Headers` object. + + Special note for `mimetype` and `content_type`: For most mime types + `mimetype` and `content_type` work the same, the difference affects + only 'text' mimetypes. If the mimetype passed with `mimetype` is a + mimetype starting with `text/`, the charset parameter of the response + object is appended to it. In contrast the `content_type` parameter is + always added as header unmodified. + + .. versionchanged:: 0.5 + the `direct_passthrough` parameter was added. + + :param response: a string or response iterable. + :param status: a string with a status or an integer with the status code. + :param headers: a list of headers or a + :class:`~werkzeug.datastructures.Headers` object. + :param mimetype: the mimetype for the response. See notice above. + :param content_type: the content type for the response. See notice above. + :param direct_passthrough: if set to `True` :meth:`iter_encoded` is not + called before iteration which makes it + possible to pass special iterators through + unchanged (see :func:`wrap_file` for more + details.) + """ + + #: the charset of the response. + charset = "utf-8" + + #: the default status if none is provided. + default_status = 200 + + #: the default mimetype if none is provided. + default_mimetype = "text/plain" + + #: if set to `False` accessing properties on the response object will + #: not try to consume the response iterator and convert it into a list. + #: + #: .. versionadded:: 0.6.2 + #: + #: That attribute was previously called `implicit_seqence_conversion`. + #: (Notice the typo). If you did use this feature, you have to adapt + #: your code to the name change. + implicit_sequence_conversion = True + + #: Should this response object correct the location header to be RFC + #: conformant? This is true by default. + #: + #: .. versionadded:: 0.8 + autocorrect_location_header = True + + #: Should this response object automatically set the content-length + #: header if possible? This is true by default. + #: + #: .. versionadded:: 0.8 + automatically_set_content_length = True + + #: Warn if a cookie header exceeds this size. The default, 4093, should be + #: safely `supported by most browsers `_. A cookie larger than + #: this size will still be sent, but it may be ignored or handled + #: incorrectly by some browsers. Set to 0 to disable this check. + #: + #: .. versionadded:: 0.13 + #: + #: .. _`cookie`: http://browsercookielimits.squawky.net/ + max_cookie_size = 4093 + + def __init__( + self, + response=None, + status=None, + headers=None, + mimetype=None, + content_type=None, + direct_passthrough=False, + ): + if isinstance(headers, Headers): + self.headers = headers + elif not headers: + self.headers = Headers() + else: + self.headers = Headers(headers) + + if content_type is None: + if mimetype is None and "content-type" not in self.headers: + mimetype = self.default_mimetype + if mimetype is not None: + mimetype = get_content_type(mimetype, self.charset) + content_type = mimetype + if content_type is not None: + self.headers["Content-Type"] = content_type + if status is None: + status = self.default_status + if isinstance(status, integer_types): + self.status_code = status + else: + self.status = status + + self.direct_passthrough = direct_passthrough + self._on_close = [] + + # we set the response after the headers so that if a class changes + # the charset attribute, the data is set in the correct charset. + if response is None: + self.response = [] + elif isinstance(response, (text_type, bytes, bytearray)): + self.set_data(response) + else: + self.response = response + + def call_on_close(self, func): + """Adds a function to the internal list of functions that should + be called as part of closing down the response. Since 0.7 this + function also returns the function that was passed so that this + can be used as a decorator. + + .. versionadded:: 0.6 + """ + self._on_close.append(func) + return func + + def __repr__(self): + if self.is_sequence: + body_info = "%d bytes" % sum(map(len, self.iter_encoded())) + else: + body_info = "streamed" if self.is_streamed else "likely-streamed" + return "<%s %s [%s]>" % (self.__class__.__name__, body_info, self.status) + + @classmethod + def force_type(cls, response, environ=None): + """Enforce that the WSGI response is a response object of the current + type. Werkzeug will use the :class:`BaseResponse` internally in many + situations like the exceptions. If you call :meth:`get_response` on an + exception you will get back a regular :class:`BaseResponse` object, even + if you are using a custom subclass. + + This method can enforce a given response type, and it will also + convert arbitrary WSGI callables into response objects if an environ + is provided:: + + # convert a Werkzeug response object into an instance of the + # MyResponseClass subclass. + response = MyResponseClass.force_type(response) + + # convert any WSGI application into a response object + response = MyResponseClass.force_type(response, environ) + + This is especially useful if you want to post-process responses in + the main dispatcher and use functionality provided by your subclass. + + Keep in mind that this will modify response objects in place if + possible! + + :param response: a response object or wsgi application. + :param environ: a WSGI environment object. + :return: a response object. + """ + if not isinstance(response, BaseResponse): + if environ is None: + raise TypeError( + "cannot convert WSGI application into response" + " objects without an environ" + ) + response = BaseResponse(*_run_wsgi_app(response, environ)) + response.__class__ = cls + return response + + @classmethod + def from_app(cls, app, environ, buffered=False): + """Create a new response object from an application output. This + works best if you pass it an application that returns a generator all + the time. Sometimes applications may use the `write()` callable + returned by the `start_response` function. This tries to resolve such + edge cases automatically. But if you don't get the expected output + you should set `buffered` to `True` which enforces buffering. + + :param app: the WSGI application to execute. + :param environ: the WSGI environment to execute against. + :param buffered: set to `True` to enforce buffering. + :return: a response object. + """ + return cls(*_run_wsgi_app(app, environ, buffered)) + + def _get_status_code(self): + return self._status_code + + def _set_status_code(self, code): + self._status_code = code + try: + self._status = "%d %s" % (code, HTTP_STATUS_CODES[code].upper()) + except KeyError: + self._status = "%d UNKNOWN" % code + + status_code = property( + _get_status_code, _set_status_code, doc="The HTTP Status code as number" + ) + del _get_status_code, _set_status_code + + def _get_status(self): + return self._status + + def _set_status(self, value): + try: + self._status = to_native(value) + except AttributeError: + raise TypeError("Invalid status argument") + + try: + self._status_code = int(self._status.split(None, 1)[0]) + except ValueError: + self._status_code = 0 + self._status = "0 %s" % self._status + except IndexError: + raise ValueError("Empty status argument") + + status = property(_get_status, _set_status, doc="The HTTP Status code") + del _get_status, _set_status + + def get_data(self, as_text=False): + """The string representation of the request body. Whenever you call + this property the request iterable is encoded and flattened. This + can lead to unwanted behavior if you stream big data. + + This behavior can be disabled by setting + :attr:`implicit_sequence_conversion` to `False`. + + If `as_text` is set to `True` the return value will be a decoded + unicode string. + + .. versionadded:: 0.9 + """ + self._ensure_sequence() + rv = b"".join(self.iter_encoded()) + if as_text: + rv = rv.decode(self.charset) + return rv + + def set_data(self, value): + """Sets a new string as response. The value set must either by a + unicode or bytestring. If a unicode string is set it's encoded + automatically to the charset of the response (utf-8 by default). + + .. versionadded:: 0.9 + """ + # if an unicode string is set, it's encoded directly so that we + # can set the content length + if isinstance(value, text_type): + value = value.encode(self.charset) + else: + value = bytes(value) + self.response = [value] + if self.automatically_set_content_length: + self.headers["Content-Length"] = str(len(value)) + + data = property( + get_data, + set_data, + doc="A descriptor that calls :meth:`get_data` and :meth:`set_data`.", + ) + + def calculate_content_length(self): + """Returns the content length if available or `None` otherwise.""" + try: + self._ensure_sequence() + except RuntimeError: + return None + return sum(len(x) for x in self.iter_encoded()) + + def _ensure_sequence(self, mutable=False): + """This method can be called by methods that need a sequence. If + `mutable` is true, it will also ensure that the response sequence + is a standard Python list. + + .. versionadded:: 0.6 + """ + if self.is_sequence: + # if we need a mutable object, we ensure it's a list. + if mutable and not isinstance(self.response, list): + self.response = list(self.response) + return + if self.direct_passthrough: + raise RuntimeError( + "Attempted implicit sequence conversion but the" + " response object is in direct passthrough mode." + ) + if not self.implicit_sequence_conversion: + raise RuntimeError( + "The response object required the iterable to be a" + " sequence, but the implicit conversion was disabled." + " Call make_sequence() yourself." + ) + self.make_sequence() + + def make_sequence(self): + """Converts the response iterator in a list. By default this happens + automatically if required. If `implicit_sequence_conversion` is + disabled, this method is not automatically called and some properties + might raise exceptions. This also encodes all the items. + + .. versionadded:: 0.6 + """ + if not self.is_sequence: + # if we consume an iterable we have to ensure that the close + # method of the iterable is called if available when we tear + # down the response + close = getattr(self.response, "close", None) + self.response = list(self.iter_encoded()) + if close is not None: + self.call_on_close(close) + + def iter_encoded(self): + """Iter the response encoded with the encoding of the response. + If the response object is invoked as WSGI application the return + value of this method is used as application iterator unless + :attr:`direct_passthrough` was activated. + """ + if __debug__: + _warn_if_string(self.response) + # Encode in a separate function so that self.response is fetched + # early. This allows us to wrap the response with the return + # value from get_app_iter or iter_encoded. + return _iter_encoded(self.response, self.charset) + + def set_cookie( + self, + key, + value="", + max_age=None, + expires=None, + path="/", + domain=None, + secure=False, + httponly=False, + samesite=None, + ): + """Sets a cookie. The parameters are the same as in the cookie `Morsel` + object in the Python standard library but it accepts unicode data, too. + + A warning is raised if the size of the cookie header exceeds + :attr:`max_cookie_size`, but the header will still be set. + + :param key: the key (name) of the cookie to be set. + :param value: the value of the cookie. + :param max_age: should be a number of seconds, or `None` (default) if + the cookie should last only as long as the client's + browser session. + :param expires: should be a `datetime` object or UNIX timestamp. + :param path: limits the cookie to a given path, per default it will + span the whole domain. + :param domain: if you want to set a cross-domain cookie. For example, + ``domain=".example.com"`` will set a cookie that is + readable by the domain ``www.example.com``, + ``foo.example.com`` etc. Otherwise, a cookie will only + be readable by the domain that set it. + :param secure: If `True`, the cookie will only be available via HTTPS + :param httponly: disallow JavaScript to access the cookie. This is an + extension to the cookie standard and probably not + supported by all browsers. + :param samesite: Limits the scope of the cookie such that it will only + be attached to requests if those requests are + "same-site". + """ + self.headers.add( + "Set-Cookie", + dump_cookie( + key, + value=value, + max_age=max_age, + expires=expires, + path=path, + domain=domain, + secure=secure, + httponly=httponly, + charset=self.charset, + max_size=self.max_cookie_size, + samesite=samesite, + ), + ) + + def delete_cookie(self, key, path="/", domain=None): + """Delete a cookie. Fails silently if key doesn't exist. + + :param key: the key (name) of the cookie to be deleted. + :param path: if the cookie that should be deleted was limited to a + path, the path has to be defined here. + :param domain: if the cookie that should be deleted was limited to a + domain, that domain has to be defined here. + """ + self.set_cookie(key, expires=0, max_age=0, path=path, domain=domain) + + @property + def is_streamed(self): + """If the response is streamed (the response is not an iterable with + a length information) this property is `True`. In this case streamed + means that there is no information about the number of iterations. + This is usually `True` if a generator is passed to the response object. + + This is useful for checking before applying some sort of post + filtering that should not take place for streamed responses. + """ + try: + len(self.response) + except (TypeError, AttributeError): + return True + return False + + @property + def is_sequence(self): + """If the iterator is buffered, this property will be `True`. A + response object will consider an iterator to be buffered if the + response attribute is a list or tuple. + + .. versionadded:: 0.6 + """ + return isinstance(self.response, (tuple, list)) + + def close(self): + """Close the wrapped response if possible. You can also use the object + in a with statement which will automatically close it. + + .. versionadded:: 0.9 + Can now be used in a with statement. + """ + if hasattr(self.response, "close"): + self.response.close() + for func in self._on_close: + func() + + def __enter__(self): + return self + + def __exit__(self, exc_type, exc_value, tb): + self.close() + + def freeze(self): + """Call this method if you want to make your response object ready for + being pickled. This buffers the generator if there is one. It will + also set the `Content-Length` header to the length of the body. + + .. versionchanged:: 0.6 + The `Content-Length` header is now set. + """ + # we explicitly set the length to a list of the *encoded* response + # iterator. Even if the implicit sequence conversion is disabled. + self.response = list(self.iter_encoded()) + self.headers["Content-Length"] = str(sum(map(len, self.response))) + + def get_wsgi_headers(self, environ): + """This is automatically called right before the response is started + and returns headers modified for the given environment. It returns a + copy of the headers from the response with some modifications applied + if necessary. + + For example the location header (if present) is joined with the root + URL of the environment. Also the content length is automatically set + to zero here for certain status codes. + + .. versionchanged:: 0.6 + Previously that function was called `fix_headers` and modified + the response object in place. Also since 0.6, IRIs in location + and content-location headers are handled properly. + + Also starting with 0.6, Werkzeug will attempt to set the content + length if it is able to figure it out on its own. This is the + case if all the strings in the response iterable are already + encoded and the iterable is buffered. + + :param environ: the WSGI environment of the request. + :return: returns a new :class:`~werkzeug.datastructures.Headers` + object. + """ + headers = Headers(self.headers) + location = None + content_location = None + content_length = None + status = self.status_code + + # iterate over the headers to find all values in one go. Because + # get_wsgi_headers is used each response that gives us a tiny + # speedup. + for key, value in headers: + ikey = key.lower() + if ikey == u"location": + location = value + elif ikey == u"content-location": + content_location = value + elif ikey == u"content-length": + content_length = value + + # make sure the location header is an absolute URL + if location is not None: + old_location = location + if isinstance(location, text_type): + # Safe conversion is necessary here as we might redirect + # to a broken URI scheme (for instance itms-services). + location = iri_to_uri(location, safe_conversion=True) + + if self.autocorrect_location_header: + current_url = get_current_url(environ, strip_querystring=True) + if isinstance(current_url, text_type): + current_url = iri_to_uri(current_url) + location = url_join(current_url, location) + if location != old_location: + headers["Location"] = location + + # make sure the content location is a URL + if content_location is not None and isinstance(content_location, text_type): + headers["Content-Location"] = iri_to_uri(content_location) + + if 100 <= status < 200 or status == 204: + # Per section 3.3.2 of RFC 7230, "a server MUST NOT send a + # Content-Length header field in any response with a status + # code of 1xx (Informational) or 204 (No Content)." + headers.remove("Content-Length") + elif status == 304: + remove_entity_headers(headers) + + # if we can determine the content length automatically, we + # should try to do that. But only if this does not involve + # flattening the iterator or encoding of unicode strings in + # the response. We however should not do that if we have a 304 + # response. + if ( + self.automatically_set_content_length + and self.is_sequence + and content_length is None + and status not in (204, 304) + and not (100 <= status < 200) + ): + try: + content_length = sum(len(to_bytes(x, "ascii")) for x in self.response) + except UnicodeError: + # aha, something non-bytestringy in there, too bad, we + # can't safely figure out the length of the response. + pass + else: + headers["Content-Length"] = str(content_length) + + return headers + + def get_app_iter(self, environ): + """Returns the application iterator for the given environ. Depending + on the request method and the current status code the return value + might be an empty response rather than the one from the response. + + If the request method is `HEAD` or the status code is in a range + where the HTTP specification requires an empty response, an empty + iterable is returned. + + .. versionadded:: 0.6 + + :param environ: the WSGI environment of the request. + :return: a response iterable. + """ + status = self.status_code + if ( + environ["REQUEST_METHOD"] == "HEAD" + or 100 <= status < 200 + or status in (204, 304) + ): + iterable = () + elif self.direct_passthrough: + if __debug__: + _warn_if_string(self.response) + return self.response + else: + iterable = self.iter_encoded() + return ClosingIterator(iterable, self.close) + + def get_wsgi_response(self, environ): + """Returns the final WSGI response as tuple. The first item in + the tuple is the application iterator, the second the status and + the third the list of headers. The response returned is created + specially for the given environment. For example if the request + method in the WSGI environment is ``'HEAD'`` the response will + be empty and only the headers and status code will be present. + + .. versionadded:: 0.6 + + :param environ: the WSGI environment of the request. + :return: an ``(app_iter, status, headers)`` tuple. + """ + headers = self.get_wsgi_headers(environ) + app_iter = self.get_app_iter(environ) + return app_iter, self.status, headers.to_wsgi_list() + + def __call__(self, environ, start_response): + """Process this response as WSGI application. + + :param environ: the WSGI environment. + :param start_response: the response callable provided by the WSGI + server. + :return: an application iterator + """ + app_iter, status, headers = self.get_wsgi_response(environ) + start_response(status, headers) + return app_iter diff --git a/week-0/day-3/my_todo_app/venv/lib/python3.6/site-packages/werkzeug/wrappers/common_descriptors.py b/week-0/day-3/my_todo_app/venv/lib/python3.6/site-packages/werkzeug/wrappers/common_descriptors.py new file mode 100644 index 00000000..e4107ee0 --- /dev/null +++ b/week-0/day-3/my_todo_app/venv/lib/python3.6/site-packages/werkzeug/wrappers/common_descriptors.py @@ -0,0 +1,322 @@ +from datetime import datetime +from datetime import timedelta + +from .._compat import string_types +from ..datastructures import CallbackDict +from ..http import dump_age +from ..http import dump_header +from ..http import dump_options_header +from ..http import http_date +from ..http import parse_age +from ..http import parse_date +from ..http import parse_options_header +from ..http import parse_set_header +from ..utils import cached_property +from ..utils import environ_property +from ..utils import get_content_type +from ..utils import header_property +from ..wsgi import get_content_length + + +class CommonRequestDescriptorsMixin(object): + """A mixin for :class:`BaseRequest` subclasses. Request objects that + mix this class in will automatically get descriptors for a couple of + HTTP headers with automatic type conversion. + + .. versionadded:: 0.5 + """ + + content_type = environ_property( + "CONTENT_TYPE", + doc="""The Content-Type entity-header field indicates the media + type of the entity-body sent to the recipient or, in the case of + the HEAD method, the media type that would have been sent had + the request been a GET.""", + ) + + @cached_property + def content_length(self): + """The Content-Length entity-header field indicates the size of the + entity-body in bytes or, in the case of the HEAD method, the size of + the entity-body that would have been sent had the request been a + GET. + """ + return get_content_length(self.environ) + + content_encoding = environ_property( + "HTTP_CONTENT_ENCODING", + doc="""The Content-Encoding entity-header field is used as a + modifier to the media-type. When present, its value indicates + what additional content codings have been applied to the + entity-body, and thus what decoding mechanisms must be applied + in order to obtain the media-type referenced by the Content-Type + header field. + + .. versionadded:: 0.9""", + ) + content_md5 = environ_property( + "HTTP_CONTENT_MD5", + doc="""The Content-MD5 entity-header field, as defined in + RFC 1864, is an MD5 digest of the entity-body for the purpose of + providing an end-to-end message integrity check (MIC) of the + entity-body. (Note: a MIC is good for detecting accidental + modification of the entity-body in transit, but is not proof + against malicious attacks.) + + .. versionadded:: 0.9""", + ) + referrer = environ_property( + "HTTP_REFERER", + doc="""The Referer[sic] request-header field allows the client + to specify, for the server's benefit, the address (URI) of the + resource from which the Request-URI was obtained (the + "referrer", although the header field is misspelled).""", + ) + date = environ_property( + "HTTP_DATE", + None, + parse_date, + doc="""The Date general-header field represents the date and + time at which the message was originated, having the same + semantics as orig-date in RFC 822.""", + ) + max_forwards = environ_property( + "HTTP_MAX_FORWARDS", + None, + int, + doc="""The Max-Forwards request-header field provides a + mechanism with the TRACE and OPTIONS methods to limit the number + of proxies or gateways that can forward the request to the next + inbound server.""", + ) + + def _parse_content_type(self): + if not hasattr(self, "_parsed_content_type"): + self._parsed_content_type = parse_options_header( + self.environ.get("CONTENT_TYPE", "") + ) + + @property + def mimetype(self): + """Like :attr:`content_type`, but without parameters (eg, without + charset, type etc.) and always lowercase. For example if the content + type is ``text/HTML; charset=utf-8`` the mimetype would be + ``'text/html'``. + """ + self._parse_content_type() + return self._parsed_content_type[0].lower() + + @property + def mimetype_params(self): + """The mimetype parameters as dict. For example if the content + type is ``text/html; charset=utf-8`` the params would be + ``{'charset': 'utf-8'}``. + """ + self._parse_content_type() + return self._parsed_content_type[1] + + @cached_property + def pragma(self): + """The Pragma general-header field is used to include + implementation-specific directives that might apply to any recipient + along the request/response chain. All pragma directives specify + optional behavior from the viewpoint of the protocol; however, some + systems MAY require that behavior be consistent with the directives. + """ + return parse_set_header(self.environ.get("HTTP_PRAGMA", "")) + + +class CommonResponseDescriptorsMixin(object): + """A mixin for :class:`BaseResponse` subclasses. Response objects that + mix this class in will automatically get descriptors for a couple of + HTTP headers with automatic type conversion. + """ + + @property + def mimetype(self): + """The mimetype (content type without charset etc.)""" + ct = self.headers.get("content-type") + if ct: + return ct.split(";")[0].strip() + + @mimetype.setter + def mimetype(self, value): + self.headers["Content-Type"] = get_content_type(value, self.charset) + + @property + def mimetype_params(self): + """The mimetype parameters as dict. For example if the + content type is ``text/html; charset=utf-8`` the params would be + ``{'charset': 'utf-8'}``. + + .. versionadded:: 0.5 + """ + + def on_update(d): + self.headers["Content-Type"] = dump_options_header(self.mimetype, d) + + d = parse_options_header(self.headers.get("content-type", ""))[1] + return CallbackDict(d, on_update) + + location = header_property( + "Location", + doc="""The Location response-header field is used to redirect + the recipient to a location other than the Request-URI for + completion of the request or identification of a new + resource.""", + ) + age = header_property( + "Age", + None, + parse_age, + dump_age, + doc="""The Age response-header field conveys the sender's + estimate of the amount of time since the response (or its + revalidation) was generated at the origin server. + + Age values are non-negative decimal integers, representing time + in seconds.""", + ) + content_type = header_property( + "Content-Type", + doc="""The Content-Type entity-header field indicates the media + type of the entity-body sent to the recipient or, in the case of + the HEAD method, the media type that would have been sent had + the request been a GET.""", + ) + content_length = header_property( + "Content-Length", + None, + int, + str, + doc="""The Content-Length entity-header field indicates the size + of the entity-body, in decimal number of OCTETs, sent to the + recipient or, in the case of the HEAD method, the size of the + entity-body that would have been sent had the request been a + GET.""", + ) + content_location = header_property( + "Content-Location", + doc="""The Content-Location entity-header field MAY be used to + supply the resource location for the entity enclosed in the + message when that entity is accessible from a location separate + from the requested resource's URI.""", + ) + content_encoding = header_property( + "Content-Encoding", + doc="""The Content-Encoding entity-header field is used as a + modifier to the media-type. When present, its value indicates + what additional content codings have been applied to the + entity-body, and thus what decoding mechanisms must be applied + in order to obtain the media-type referenced by the Content-Type + header field.""", + ) + content_md5 = header_property( + "Content-MD5", + doc="""The Content-MD5 entity-header field, as defined in + RFC 1864, is an MD5 digest of the entity-body for the purpose of + providing an end-to-end message integrity check (MIC) of the + entity-body. (Note: a MIC is good for detecting accidental + modification of the entity-body in transit, but is not proof + against malicious attacks.)""", + ) + date = header_property( + "Date", + None, + parse_date, + http_date, + doc="""The Date general-header field represents the date and + time at which the message was originated, having the same + semantics as orig-date in RFC 822.""", + ) + expires = header_property( + "Expires", + None, + parse_date, + http_date, + doc="""The Expires entity-header field gives the date/time after + which the response is considered stale. A stale cache entry may + not normally be returned by a cache.""", + ) + last_modified = header_property( + "Last-Modified", + None, + parse_date, + http_date, + doc="""The Last-Modified entity-header field indicates the date + and time at which the origin server believes the variant was + last modified.""", + ) + + @property + def retry_after(self): + """The Retry-After response-header field can be used with a + 503 (Service Unavailable) response to indicate how long the + service is expected to be unavailable to the requesting client. + + Time in seconds until expiration or date. + """ + value = self.headers.get("retry-after") + if value is None: + return + elif value.isdigit(): + return datetime.utcnow() + timedelta(seconds=int(value)) + return parse_date(value) + + @retry_after.setter + def retry_after(self, value): + if value is None: + if "retry-after" in self.headers: + del self.headers["retry-after"] + return + elif isinstance(value, datetime): + value = http_date(value) + else: + value = str(value) + self.headers["Retry-After"] = value + + def _set_property(name, doc=None): # noqa: B902 + def fget(self): + def on_update(header_set): + if not header_set and name in self.headers: + del self.headers[name] + elif header_set: + self.headers[name] = header_set.to_header() + + return parse_set_header(self.headers.get(name), on_update) + + def fset(self, value): + if not value: + del self.headers[name] + elif isinstance(value, string_types): + self.headers[name] = value + else: + self.headers[name] = dump_header(value) + + return property(fget, fset, doc=doc) + + vary = _set_property( + "Vary", + doc="""The Vary field value indicates the set of request-header + fields that fully determines, while the response is fresh, + whether a cache is permitted to use the response to reply to a + subsequent request without revalidation.""", + ) + content_language = _set_property( + "Content-Language", + doc="""The Content-Language entity-header field describes the + natural language(s) of the intended audience for the enclosed + entity. Note that this might not be equivalent to all the + languages used within the entity-body.""", + ) + allow = _set_property( + "Allow", + doc="""The Allow entity-header field lists the set of methods + supported by the resource identified by the Request-URI. The + purpose of this field is strictly to inform the recipient of + valid methods associated with the resource. An Allow header + field MUST be present in a 405 (Method Not Allowed) + response.""", + ) + + del _set_property diff --git a/week-0/day-3/my_todo_app/venv/lib/python3.6/site-packages/werkzeug/wrappers/etag.py b/week-0/day-3/my_todo_app/venv/lib/python3.6/site-packages/werkzeug/wrappers/etag.py new file mode 100644 index 00000000..0733506f --- /dev/null +++ b/week-0/day-3/my_todo_app/venv/lib/python3.6/site-packages/werkzeug/wrappers/etag.py @@ -0,0 +1,304 @@ +from .._compat import string_types +from .._internal import _get_environ +from ..datastructures import ContentRange +from ..datastructures import RequestCacheControl +from ..datastructures import ResponseCacheControl +from ..http import generate_etag +from ..http import http_date +from ..http import is_resource_modified +from ..http import parse_cache_control_header +from ..http import parse_content_range_header +from ..http import parse_date +from ..http import parse_etags +from ..http import parse_if_range_header +from ..http import parse_range_header +from ..http import quote_etag +from ..http import unquote_etag +from ..utils import cached_property +from ..utils import header_property +from ..wrappers.base_response import _clean_accept_ranges +from ..wsgi import _RangeWrapper + + +class ETagRequestMixin(object): + """Add entity tag and cache descriptors to a request object or object with + a WSGI environment available as :attr:`~BaseRequest.environ`. This not + only provides access to etags but also to the cache control header. + """ + + @cached_property + def cache_control(self): + """A :class:`~werkzeug.datastructures.RequestCacheControl` object + for the incoming cache control headers. + """ + cache_control = self.environ.get("HTTP_CACHE_CONTROL") + return parse_cache_control_header(cache_control, None, RequestCacheControl) + + @cached_property + def if_match(self): + """An object containing all the etags in the `If-Match` header. + + :rtype: :class:`~werkzeug.datastructures.ETags` + """ + return parse_etags(self.environ.get("HTTP_IF_MATCH")) + + @cached_property + def if_none_match(self): + """An object containing all the etags in the `If-None-Match` header. + + :rtype: :class:`~werkzeug.datastructures.ETags` + """ + return parse_etags(self.environ.get("HTTP_IF_NONE_MATCH")) + + @cached_property + def if_modified_since(self): + """The parsed `If-Modified-Since` header as datetime object.""" + return parse_date(self.environ.get("HTTP_IF_MODIFIED_SINCE")) + + @cached_property + def if_unmodified_since(self): + """The parsed `If-Unmodified-Since` header as datetime object.""" + return parse_date(self.environ.get("HTTP_IF_UNMODIFIED_SINCE")) + + @cached_property + def if_range(self): + """The parsed `If-Range` header. + + .. versionadded:: 0.7 + + :rtype: :class:`~werkzeug.datastructures.IfRange` + """ + return parse_if_range_header(self.environ.get("HTTP_IF_RANGE")) + + @cached_property + def range(self): + """The parsed `Range` header. + + .. versionadded:: 0.7 + + :rtype: :class:`~werkzeug.datastructures.Range` + """ + return parse_range_header(self.environ.get("HTTP_RANGE")) + + +class ETagResponseMixin(object): + """Adds extra functionality to a response object for etag and cache + handling. This mixin requires an object with at least a `headers` + object that implements a dict like interface similar to + :class:`~werkzeug.datastructures.Headers`. + + If you want the :meth:`freeze` method to automatically add an etag, you + have to mixin this method before the response base class. The default + response class does not do that. + """ + + @property + def cache_control(self): + """The Cache-Control general-header field is used to specify + directives that MUST be obeyed by all caching mechanisms along the + request/response chain. + """ + + def on_update(cache_control): + if not cache_control and "cache-control" in self.headers: + del self.headers["cache-control"] + elif cache_control: + self.headers["Cache-Control"] = cache_control.to_header() + + return parse_cache_control_header( + self.headers.get("cache-control"), on_update, ResponseCacheControl + ) + + def _wrap_response(self, start, length): + """Wrap existing Response in case of Range Request context.""" + if self.status_code == 206: + self.response = _RangeWrapper(self.response, start, length) + + def _is_range_request_processable(self, environ): + """Return ``True`` if `Range` header is present and if underlying + resource is considered unchanged when compared with `If-Range` header. + """ + return ( + "HTTP_IF_RANGE" not in environ + or not is_resource_modified( + environ, + self.headers.get("etag"), + None, + self.headers.get("last-modified"), + ignore_if_range=False, + ) + ) and "HTTP_RANGE" in environ + + def _process_range_request(self, environ, complete_length=None, accept_ranges=None): + """Handle Range Request related headers (RFC7233). If `Accept-Ranges` + header is valid, and Range Request is processable, we set the headers + as described by the RFC, and wrap the underlying response in a + RangeWrapper. + + Returns ``True`` if Range Request can be fulfilled, ``False`` otherwise. + + :raises: :class:`~werkzeug.exceptions.RequestedRangeNotSatisfiable` + if `Range` header could not be parsed or satisfied. + """ + from ..exceptions import RequestedRangeNotSatisfiable + + if accept_ranges is None: + return False + self.headers["Accept-Ranges"] = accept_ranges + if not self._is_range_request_processable(environ) or complete_length is None: + return False + parsed_range = parse_range_header(environ.get("HTTP_RANGE")) + if parsed_range is None: + raise RequestedRangeNotSatisfiable(complete_length) + range_tuple = parsed_range.range_for_length(complete_length) + content_range_header = parsed_range.to_content_range_header(complete_length) + if range_tuple is None or content_range_header is None: + raise RequestedRangeNotSatisfiable(complete_length) + content_length = range_tuple[1] - range_tuple[0] + # Be sure not to send 206 response + # if requested range is the full content. + if content_length != complete_length: + self.headers["Content-Length"] = content_length + self.content_range = content_range_header + self.status_code = 206 + self._wrap_response(range_tuple[0], content_length) + return True + return False + + def make_conditional( + self, request_or_environ, accept_ranges=False, complete_length=None + ): + """Make the response conditional to the request. This method works + best if an etag was defined for the response already. The `add_etag` + method can be used to do that. If called without etag just the date + header is set. + + This does nothing if the request method in the request or environ is + anything but GET or HEAD. + + For optimal performance when handling range requests, it's recommended + that your response data object implements `seekable`, `seek` and `tell` + methods as described by :py:class:`io.IOBase`. Objects returned by + :meth:`~werkzeug.wsgi.wrap_file` automatically implement those methods. + + It does not remove the body of the response because that's something + the :meth:`__call__` function does for us automatically. + + Returns self so that you can do ``return resp.make_conditional(req)`` + but modifies the object in-place. + + :param request_or_environ: a request object or WSGI environment to be + used to make the response conditional + against. + :param accept_ranges: This parameter dictates the value of + `Accept-Ranges` header. If ``False`` (default), + the header is not set. If ``True``, it will be set + to ``"bytes"``. If ``None``, it will be set to + ``"none"``. If it's a string, it will use this + value. + :param complete_length: Will be used only in valid Range Requests. + It will set `Content-Range` complete length + value and compute `Content-Length` real value. + This parameter is mandatory for successful + Range Requests completion. + :raises: :class:`~werkzeug.exceptions.RequestedRangeNotSatisfiable` + if `Range` header could not be parsed or satisfied. + """ + environ = _get_environ(request_or_environ) + if environ["REQUEST_METHOD"] in ("GET", "HEAD"): + # if the date is not in the headers, add it now. We however + # will not override an already existing header. Unfortunately + # this header will be overriden by many WSGI servers including + # wsgiref. + if "date" not in self.headers: + self.headers["Date"] = http_date() + accept_ranges = _clean_accept_ranges(accept_ranges) + is206 = self._process_range_request(environ, complete_length, accept_ranges) + if not is206 and not is_resource_modified( + environ, + self.headers.get("etag"), + None, + self.headers.get("last-modified"), + ): + if parse_etags(environ.get("HTTP_IF_MATCH")): + self.status_code = 412 + else: + self.status_code = 304 + if ( + self.automatically_set_content_length + and "content-length" not in self.headers + ): + length = self.calculate_content_length() + if length is not None: + self.headers["Content-Length"] = length + return self + + def add_etag(self, overwrite=False, weak=False): + """Add an etag for the current response if there is none yet.""" + if overwrite or "etag" not in self.headers: + self.set_etag(generate_etag(self.get_data()), weak) + + def set_etag(self, etag, weak=False): + """Set the etag, and override the old one if there was one.""" + self.headers["ETag"] = quote_etag(etag, weak) + + def get_etag(self): + """Return a tuple in the form ``(etag, is_weak)``. If there is no + ETag the return value is ``(None, None)``. + """ + return unquote_etag(self.headers.get("ETag")) + + def freeze(self, no_etag=False): + """Call this method if you want to make your response object ready for + pickeling. This buffers the generator if there is one. This also + sets the etag unless `no_etag` is set to `True`. + """ + if not no_etag: + self.add_etag() + super(ETagResponseMixin, self).freeze() + + accept_ranges = header_property( + "Accept-Ranges", + doc="""The `Accept-Ranges` header. Even though the name would + indicate that multiple values are supported, it must be one + string token only. + + The values ``'bytes'`` and ``'none'`` are common. + + .. versionadded:: 0.7""", + ) + + def _get_content_range(self): + def on_update(rng): + if not rng: + del self.headers["content-range"] + else: + self.headers["Content-Range"] = rng.to_header() + + rv = parse_content_range_header(self.headers.get("content-range"), on_update) + # always provide a content range object to make the descriptor + # more user friendly. It provides an unset() method that can be + # used to remove the header quickly. + if rv is None: + rv = ContentRange(None, None, None, on_update=on_update) + return rv + + def _set_content_range(self, value): + if not value: + del self.headers["content-range"] + elif isinstance(value, string_types): + self.headers["Content-Range"] = value + else: + self.headers["Content-Range"] = value.to_header() + + content_range = property( + _get_content_range, + _set_content_range, + doc="""The ``Content-Range`` header as + :class:`~werkzeug.datastructures.ContentRange` object. Even if + the header is not set it wil provide such an object for easier + manipulation. + + .. versionadded:: 0.7""", + ) + del _get_content_range, _set_content_range diff --git a/week-0/day-3/my_todo_app/venv/lib/python3.6/site-packages/werkzeug/wrappers/json.py b/week-0/day-3/my_todo_app/venv/lib/python3.6/site-packages/werkzeug/wrappers/json.py new file mode 100644 index 00000000..6d5dc33d --- /dev/null +++ b/week-0/day-3/my_todo_app/venv/lib/python3.6/site-packages/werkzeug/wrappers/json.py @@ -0,0 +1,145 @@ +from __future__ import absolute_import + +import datetime +import uuid + +from .._compat import text_type +from ..exceptions import BadRequest +from ..utils import detect_utf_encoding + +try: + import simplejson as _json +except ImportError: + import json as _json + + +class _JSONModule(object): + @staticmethod + def _default(o): + if isinstance(o, datetime.date): + return o.isoformat() + + if isinstance(o, uuid.UUID): + return str(o) + + if hasattr(o, "__html__"): + return text_type(o.__html__()) + + raise TypeError() + + @classmethod + def dumps(cls, obj, **kw): + kw.setdefault("separators", (",", ":")) + kw.setdefault("default", cls._default) + kw.setdefault("sort_keys", True) + return _json.dumps(obj, **kw) + + @staticmethod + def loads(s, **kw): + if isinstance(s, bytes): + # Needed for Python < 3.6 + encoding = detect_utf_encoding(s) + s = s.decode(encoding) + + return _json.loads(s, **kw) + + +class JSONMixin(object): + """Mixin to parse :attr:`data` as JSON. Can be mixed in for both + :class:`~werkzeug.wrappers.Request` and + :class:`~werkzeug.wrappers.Response` classes. + + If `simplejson`_ is installed it is preferred over Python's built-in + :mod:`json` module. + + .. _simplejson: https://simplejson.readthedocs.io/en/latest/ + """ + + #: A module or other object that has ``dumps`` and ``loads`` + #: functions that match the API of the built-in :mod:`json` module. + json_module = _JSONModule + + @property + def json(self): + """The parsed JSON data if :attr:`mimetype` indicates JSON + (:mimetype:`application/json`, see :meth:`is_json`). + + Calls :meth:`get_json` with default arguments. + """ + return self.get_json() + + @property + def is_json(self): + """Check if the mimetype indicates JSON data, either + :mimetype:`application/json` or :mimetype:`application/*+json`. + """ + mt = self.mimetype + return ( + mt == "application/json" + or mt.startswith("application/") + and mt.endswith("+json") + ) + + def _get_data_for_json(self, cache): + try: + return self.get_data(cache=cache) + except TypeError: + # Response doesn't have cache param. + return self.get_data() + + # Cached values for ``(silent=False, silent=True)``. Initialized + # with sentinel values. + _cached_json = (Ellipsis, Ellipsis) + + def get_json(self, force=False, silent=False, cache=True): + """Parse :attr:`data` as JSON. + + If the mimetype does not indicate JSON + (:mimetype:`application/json`, see :meth:`is_json`), this + returns ``None``. + + If parsing fails, :meth:`on_json_loading_failed` is called and + its return value is used as the return value. + + :param force: Ignore the mimetype and always try to parse JSON. + :param silent: Silence parsing errors and return ``None`` + instead. + :param cache: Store the parsed JSON to return for subsequent + calls. + """ + if cache and self._cached_json[silent] is not Ellipsis: + return self._cached_json[silent] + + if not (force or self.is_json): + return None + + data = self._get_data_for_json(cache=cache) + + try: + rv = self.json_module.loads(data) + except ValueError as e: + if silent: + rv = None + + if cache: + normal_rv, _ = self._cached_json + self._cached_json = (normal_rv, rv) + else: + rv = self.on_json_loading_failed(e) + + if cache: + _, silent_rv = self._cached_json + self._cached_json = (rv, silent_rv) + else: + if cache: + self._cached_json = (rv, rv) + + return rv + + def on_json_loading_failed(self, e): + """Called if :meth:`get_json` parsing fails and isn't silenced. + If this method returns a value, it is used as the return value + for :meth:`get_json`. The default implementation raises + :exc:`~werkzeug.exceptions.BadRequest`. + """ + raise BadRequest("Failed to decode JSON object: {0}".format(e)) diff --git a/week-0/day-3/my_todo_app/venv/lib/python3.6/site-packages/werkzeug/wrappers/request.py b/week-0/day-3/my_todo_app/venv/lib/python3.6/site-packages/werkzeug/wrappers/request.py new file mode 100644 index 00000000..d1c71b64 --- /dev/null +++ b/week-0/day-3/my_todo_app/venv/lib/python3.6/site-packages/werkzeug/wrappers/request.py @@ -0,0 +1,44 @@ +from .accept import AcceptMixin +from .auth import AuthorizationMixin +from .base_request import BaseRequest +from .common_descriptors import CommonRequestDescriptorsMixin +from .etag import ETagRequestMixin +from .user_agent import UserAgentMixin + + +class Request( + BaseRequest, + AcceptMixin, + ETagRequestMixin, + UserAgentMixin, + AuthorizationMixin, + CommonRequestDescriptorsMixin, +): + """Full featured request object implementing the following mixins: + + - :class:`AcceptMixin` for accept header parsing + - :class:`ETagRequestMixin` for etag and cache control handling + - :class:`UserAgentMixin` for user agent introspection + - :class:`AuthorizationMixin` for http auth handling + - :class:`CommonRequestDescriptorsMixin` for common headers + """ + + +class StreamOnlyMixin(object): + """If mixed in before the request object this will change the bahavior + of it to disable handling of form parsing. This disables the + :attr:`files`, :attr:`form` attributes and will just provide a + :attr:`stream` attribute that however is always available. + + .. versionadded:: 0.9 + """ + + disable_data_descriptor = True + want_form_data_parsed = False + + +class PlainRequest(StreamOnlyMixin, Request): + """A request object without special form parsing capabilities. + + .. versionadded:: 0.9 + """ diff --git a/week-0/day-3/my_todo_app/venv/lib/python3.6/site-packages/werkzeug/wrappers/response.py b/week-0/day-3/my_todo_app/venv/lib/python3.6/site-packages/werkzeug/wrappers/response.py new file mode 100644 index 00000000..cd86cacd --- /dev/null +++ b/week-0/day-3/my_todo_app/venv/lib/python3.6/site-packages/werkzeug/wrappers/response.py @@ -0,0 +1,78 @@ +from ..utils import cached_property +from .auth import WWWAuthenticateMixin +from .base_response import BaseResponse +from .common_descriptors import CommonResponseDescriptorsMixin +from .etag import ETagResponseMixin + + +class ResponseStream(object): + """A file descriptor like object used by the :class:`ResponseStreamMixin` to + represent the body of the stream. It directly pushes into the response + iterable of the response object. + """ + + mode = "wb+" + + def __init__(self, response): + self.response = response + self.closed = False + + def write(self, value): + if self.closed: + raise ValueError("I/O operation on closed file") + self.response._ensure_sequence(mutable=True) + self.response.response.append(value) + self.response.headers.pop("Content-Length", None) + return len(value) + + def writelines(self, seq): + for item in seq: + self.write(item) + + def close(self): + self.closed = True + + def flush(self): + if self.closed: + raise ValueError("I/O operation on closed file") + + def isatty(self): + if self.closed: + raise ValueError("I/O operation on closed file") + return False + + def tell(self): + self.response._ensure_sequence() + return sum(map(len, self.response.response)) + + @property + def encoding(self): + return self.response.charset + + +class ResponseStreamMixin(object): + """Mixin for :class:`BaseRequest` subclasses. Classes that inherit from + this mixin will automatically get a :attr:`stream` property that provides + a write-only interface to the response iterable. + """ + + @cached_property + def stream(self): + """The response iterable as write-only stream.""" + return ResponseStream(self) + + +class Response( + BaseResponse, + ETagResponseMixin, + ResponseStreamMixin, + CommonResponseDescriptorsMixin, + WWWAuthenticateMixin, +): + """Full featured response object implementing the following mixins: + + - :class:`ETagResponseMixin` for etag and cache control handling + - :class:`ResponseStreamMixin` to add support for the `stream` property + - :class:`CommonResponseDescriptorsMixin` for various HTTP descriptors + - :class:`WWWAuthenticateMixin` for HTTP authentication support + """ diff --git a/week-0/day-3/my_todo_app/venv/lib/python3.6/site-packages/werkzeug/wrappers/user_agent.py b/week-0/day-3/my_todo_app/venv/lib/python3.6/site-packages/werkzeug/wrappers/user_agent.py new file mode 100644 index 00000000..72588dd9 --- /dev/null +++ b/week-0/day-3/my_todo_app/venv/lib/python3.6/site-packages/werkzeug/wrappers/user_agent.py @@ -0,0 +1,15 @@ +from ..utils import cached_property + + +class UserAgentMixin(object): + """Adds a `user_agent` attribute to the request object which + contains the parsed user agent of the browser that triggered the + request as a :class:`~werkzeug.useragents.UserAgent` object. + """ + + @cached_property + def user_agent(self): + """The current user agent.""" + from ..useragents import UserAgent + + return UserAgent(self.environ) diff --git a/week-0/day-3/my_todo_app/venv/lib/python3.6/site-packages/werkzeug/wsgi.py b/week-0/day-3/my_todo_app/venv/lib/python3.6/site-packages/werkzeug/wsgi.py new file mode 100644 index 00000000..f069f2d8 --- /dev/null +++ b/week-0/day-3/my_todo_app/venv/lib/python3.6/site-packages/werkzeug/wsgi.py @@ -0,0 +1,1067 @@ +# -*- coding: utf-8 -*- +""" + werkzeug.wsgi + ~~~~~~~~~~~~~ + + This module implements WSGI related helpers. + + :copyright: 2007 Pallets + :license: BSD-3-Clause +""" +import io +import re +import warnings +from functools import partial +from functools import update_wrapper +from itertools import chain + +from ._compat import BytesIO +from ._compat import implements_iterator +from ._compat import make_literal_wrapper +from ._compat import string_types +from ._compat import text_type +from ._compat import to_bytes +from ._compat import to_unicode +from ._compat import try_coerce_native +from ._compat import wsgi_get_bytes +from ._internal import _encode_idna +from .urls import uri_to_iri +from .urls import url_join +from .urls import url_parse +from .urls import url_quote + + +def responder(f): + """Marks a function as responder. Decorate a function with it and it + will automatically call the return value as WSGI application. + + Example:: + + @responder + def application(environ, start_response): + return Response('Hello World!') + """ + return update_wrapper(lambda *a: f(*a)(*a[-2:]), f) + + +def get_current_url( + environ, + root_only=False, + strip_querystring=False, + host_only=False, + trusted_hosts=None, +): + """A handy helper function that recreates the full URL as IRI for the + current request or parts of it. Here's an example: + + >>> from werkzeug.test import create_environ + >>> env = create_environ("/?param=foo", "http://localhost/script") + >>> get_current_url(env) + 'http://localhost/script/?param=foo' + >>> get_current_url(env, root_only=True) + 'http://localhost/script/' + >>> get_current_url(env, host_only=True) + 'http://localhost/' + >>> get_current_url(env, strip_querystring=True) + 'http://localhost/script/' + + This optionally it verifies that the host is in a list of trusted hosts. + If the host is not in there it will raise a + :exc:`~werkzeug.exceptions.SecurityError`. + + Note that the string returned might contain unicode characters as the + representation is an IRI not an URI. If you need an ASCII only + representation you can use the :func:`~werkzeug.urls.iri_to_uri` + function: + + >>> from werkzeug.urls import iri_to_uri + >>> iri_to_uri(get_current_url(env)) + 'http://localhost/script/?param=foo' + + :param environ: the WSGI environment to get the current URL from. + :param root_only: set `True` if you only want the root URL. + :param strip_querystring: set to `True` if you don't want the querystring. + :param host_only: set to `True` if the host URL should be returned. + :param trusted_hosts: a list of trusted hosts, see :func:`host_is_trusted` + for more information. + """ + tmp = [environ["wsgi.url_scheme"], "://", get_host(environ, trusted_hosts)] + cat = tmp.append + if host_only: + return uri_to_iri("".join(tmp) + "/") + cat(url_quote(wsgi_get_bytes(environ.get("SCRIPT_NAME", ""))).rstrip("/")) + cat("/") + if not root_only: + cat(url_quote(wsgi_get_bytes(environ.get("PATH_INFO", "")).lstrip(b"/"))) + if not strip_querystring: + qs = get_query_string(environ) + if qs: + cat("?" + qs) + return uri_to_iri("".join(tmp)) + + +def host_is_trusted(hostname, trusted_list): + """Checks if a host is trusted against a list. This also takes care + of port normalization. + + .. versionadded:: 0.9 + + :param hostname: the hostname to check + :param trusted_list: a list of hostnames to check against. If a + hostname starts with a dot it will match against + all subdomains as well. + """ + if not hostname: + return False + + if isinstance(trusted_list, string_types): + trusted_list = [trusted_list] + + def _normalize(hostname): + if ":" in hostname: + hostname = hostname.rsplit(":", 1)[0] + return _encode_idna(hostname) + + try: + hostname = _normalize(hostname) + except UnicodeError: + return False + for ref in trusted_list: + if ref.startswith("."): + ref = ref[1:] + suffix_match = True + else: + suffix_match = False + try: + ref = _normalize(ref) + except UnicodeError: + return False + if ref == hostname: + return True + if suffix_match and hostname.endswith(b"." + ref): + return True + return False + + +def get_host(environ, trusted_hosts=None): + """Return the host for the given WSGI environment. This first checks + the ``Host`` header. If it's not present, then ``SERVER_NAME`` and + ``SERVER_PORT`` are used. The host will only contain the port if it + is different than the standard port for the protocol. + + Optionally, verify that the host is trusted using + :func:`host_is_trusted` and raise a + :exc:`~werkzeug.exceptions.SecurityError` if it is not. + + :param environ: The WSGI environment to get the host from. + :param trusted_hosts: A list of trusted hosts. + :return: Host, with port if necessary. + :raise ~werkzeug.exceptions.SecurityError: If the host is not + trusted. + """ + if "HTTP_HOST" in environ: + rv = environ["HTTP_HOST"] + if environ["wsgi.url_scheme"] == "http" and rv.endswith(":80"): + rv = rv[:-3] + elif environ["wsgi.url_scheme"] == "https" and rv.endswith(":443"): + rv = rv[:-4] + else: + rv = environ["SERVER_NAME"] + if (environ["wsgi.url_scheme"], environ["SERVER_PORT"]) not in ( + ("https", "443"), + ("http", "80"), + ): + rv += ":" + environ["SERVER_PORT"] + if trusted_hosts is not None: + if not host_is_trusted(rv, trusted_hosts): + from .exceptions import SecurityError + + raise SecurityError('Host "%s" is not trusted' % rv) + return rv + + +def get_content_length(environ): + """Returns the content length from the WSGI environment as + integer. If it's not available or chunked transfer encoding is used, + ``None`` is returned. + + .. versionadded:: 0.9 + + :param environ: the WSGI environ to fetch the content length from. + """ + if environ.get("HTTP_TRANSFER_ENCODING", "") == "chunked": + return None + + content_length = environ.get("CONTENT_LENGTH") + if content_length is not None: + try: + return max(0, int(content_length)) + except (ValueError, TypeError): + pass + + +def get_input_stream(environ, safe_fallback=True): + """Returns the input stream from the WSGI environment and wraps it + in the most sensible way possible. The stream returned is not the + raw WSGI stream in most cases but one that is safe to read from + without taking into account the content length. + + If content length is not set, the stream will be empty for safety reasons. + If the WSGI server supports chunked or infinite streams, it should set + the ``wsgi.input_terminated`` value in the WSGI environ to indicate that. + + .. versionadded:: 0.9 + + :param environ: the WSGI environ to fetch the stream from. + :param safe_fallback: use an empty stream as a safe fallback when the + content length is not set. Disabling this allows infinite streams, + which can be a denial-of-service risk. + """ + stream = environ["wsgi.input"] + content_length = get_content_length(environ) + + # A wsgi extension that tells us if the input is terminated. In + # that case we return the stream unchanged as we know we can safely + # read it until the end. + if environ.get("wsgi.input_terminated"): + return stream + + # If the request doesn't specify a content length, returning the stream is + # potentially dangerous because it could be infinite, malicious or not. If + # safe_fallback is true, return an empty stream instead for safety. + if content_length is None: + return BytesIO() if safe_fallback else stream + + # Otherwise limit the stream to the content length + return LimitedStream(stream, content_length) + + +def get_query_string(environ): + """Returns the `QUERY_STRING` from the WSGI environment. This also takes + care about the WSGI decoding dance on Python 3 environments as a + native string. The string returned will be restricted to ASCII + characters. + + .. versionadded:: 0.9 + + :param environ: the WSGI environment object to get the query string from. + """ + qs = wsgi_get_bytes(environ.get("QUERY_STRING", "")) + # QUERY_STRING really should be ascii safe but some browsers + # will send us some unicode stuff (I am looking at you IE). + # In that case we want to urllib quote it badly. + return try_coerce_native(url_quote(qs, safe=":&%=+$!*'(),")) + + +def get_path_info(environ, charset="utf-8", errors="replace"): + """Returns the `PATH_INFO` from the WSGI environment and properly + decodes it. This also takes care about the WSGI decoding dance + on Python 3 environments. if the `charset` is set to `None` a + bytestring is returned. + + .. versionadded:: 0.9 + + :param environ: the WSGI environment object to get the path from. + :param charset: the charset for the path info, or `None` if no + decoding should be performed. + :param errors: the decoding error handling. + """ + path = wsgi_get_bytes(environ.get("PATH_INFO", "")) + return to_unicode(path, charset, errors, allow_none_charset=True) + + +def get_script_name(environ, charset="utf-8", errors="replace"): + """Returns the `SCRIPT_NAME` from the WSGI environment and properly + decodes it. This also takes care about the WSGI decoding dance + on Python 3 environments. if the `charset` is set to `None` a + bytestring is returned. + + .. versionadded:: 0.9 + + :param environ: the WSGI environment object to get the path from. + :param charset: the charset for the path, or `None` if no + decoding should be performed. + :param errors: the decoding error handling. + """ + path = wsgi_get_bytes(environ.get("SCRIPT_NAME", "")) + return to_unicode(path, charset, errors, allow_none_charset=True) + + +def pop_path_info(environ, charset="utf-8", errors="replace"): + """Removes and returns the next segment of `PATH_INFO`, pushing it onto + `SCRIPT_NAME`. Returns `None` if there is nothing left on `PATH_INFO`. + + If the `charset` is set to `None` a bytestring is returned. + + If there are empty segments (``'/foo//bar``) these are ignored but + properly pushed to the `SCRIPT_NAME`: + + >>> env = {'SCRIPT_NAME': '/foo', 'PATH_INFO': '/a/b'} + >>> pop_path_info(env) + 'a' + >>> env['SCRIPT_NAME'] + '/foo/a' + >>> pop_path_info(env) + 'b' + >>> env['SCRIPT_NAME'] + '/foo/a/b' + + .. versionadded:: 0.5 + + .. versionchanged:: 0.9 + The path is now decoded and a charset and encoding + parameter can be provided. + + :param environ: the WSGI environment that is modified. + """ + path = environ.get("PATH_INFO") + if not path: + return None + + script_name = environ.get("SCRIPT_NAME", "") + + # shift multiple leading slashes over + old_path = path + path = path.lstrip("/") + if path != old_path: + script_name += "/" * (len(old_path) - len(path)) + + if "/" not in path: + environ["PATH_INFO"] = "" + environ["SCRIPT_NAME"] = script_name + path + rv = wsgi_get_bytes(path) + else: + segment, path = path.split("/", 1) + environ["PATH_INFO"] = "/" + path + environ["SCRIPT_NAME"] = script_name + segment + rv = wsgi_get_bytes(segment) + + return to_unicode(rv, charset, errors, allow_none_charset=True) + + +def peek_path_info(environ, charset="utf-8", errors="replace"): + """Returns the next segment on the `PATH_INFO` or `None` if there + is none. Works like :func:`pop_path_info` without modifying the + environment: + + >>> env = {'SCRIPT_NAME': '/foo', 'PATH_INFO': '/a/b'} + >>> peek_path_info(env) + 'a' + >>> peek_path_info(env) + 'a' + + If the `charset` is set to `None` a bytestring is returned. + + .. versionadded:: 0.5 + + .. versionchanged:: 0.9 + The path is now decoded and a charset and encoding + parameter can be provided. + + :param environ: the WSGI environment that is checked. + """ + segments = environ.get("PATH_INFO", "").lstrip("/").split("/", 1) + if segments: + return to_unicode( + wsgi_get_bytes(segments[0]), charset, errors, allow_none_charset=True + ) + + +def extract_path_info( + environ_or_baseurl, + path_or_url, + charset="utf-8", + errors="werkzeug.url_quote", + collapse_http_schemes=True, +): + """Extracts the path info from the given URL (or WSGI environment) and + path. The path info returned is a unicode string, not a bytestring + suitable for a WSGI environment. The URLs might also be IRIs. + + If the path info could not be determined, `None` is returned. + + Some examples: + + >>> extract_path_info('http://example.com/app', '/app/hello') + u'/hello' + >>> extract_path_info('http://example.com/app', + ... 'https://example.com/app/hello') + u'/hello' + >>> extract_path_info('http://example.com/app', + ... 'https://example.com/app/hello', + ... collapse_http_schemes=False) is None + True + + Instead of providing a base URL you can also pass a WSGI environment. + + :param environ_or_baseurl: a WSGI environment dict, a base URL or + base IRI. This is the root of the + application. + :param path_or_url: an absolute path from the server root, a + relative path (in which case it's the path info) + or a full URL. Also accepts IRIs and unicode + parameters. + :param charset: the charset for byte data in URLs + :param errors: the error handling on decode + :param collapse_http_schemes: if set to `False` the algorithm does + not assume that http and https on the + same server point to the same + resource. + + .. versionchanged:: 0.15 + The ``errors`` parameter defaults to leaving invalid bytes + quoted instead of replacing them. + + .. versionadded:: 0.6 + """ + + def _normalize_netloc(scheme, netloc): + parts = netloc.split(u"@", 1)[-1].split(u":", 1) + if len(parts) == 2: + netloc, port = parts + if (scheme == u"http" and port == u"80") or ( + scheme == u"https" and port == u"443" + ): + port = None + else: + netloc = parts[0] + port = None + if port is not None: + netloc += u":" + port + return netloc + + # make sure whatever we are working on is a IRI and parse it + path = uri_to_iri(path_or_url, charset, errors) + if isinstance(environ_or_baseurl, dict): + environ_or_baseurl = get_current_url(environ_or_baseurl, root_only=True) + base_iri = uri_to_iri(environ_or_baseurl, charset, errors) + base_scheme, base_netloc, base_path = url_parse(base_iri)[:3] + cur_scheme, cur_netloc, cur_path, = url_parse(url_join(base_iri, path))[:3] + + # normalize the network location + base_netloc = _normalize_netloc(base_scheme, base_netloc) + cur_netloc = _normalize_netloc(cur_scheme, cur_netloc) + + # is that IRI even on a known HTTP scheme? + if collapse_http_schemes: + for scheme in base_scheme, cur_scheme: + if scheme not in (u"http", u"https"): + return None + else: + if not (base_scheme in (u"http", u"https") and base_scheme == cur_scheme): + return None + + # are the netlocs compatible? + if base_netloc != cur_netloc: + return None + + # are we below the application path? + base_path = base_path.rstrip(u"/") + if not cur_path.startswith(base_path): + return None + + return u"/" + cur_path[len(base_path) :].lstrip(u"/") + + +@implements_iterator +class ClosingIterator(object): + """The WSGI specification requires that all middlewares and gateways + respect the `close` callback of the iterable returned by the application. + Because it is useful to add another close action to a returned iterable + and adding a custom iterable is a boring task this class can be used for + that:: + + return ClosingIterator(app(environ, start_response), [cleanup_session, + cleanup_locals]) + + If there is just one close function it can be passed instead of the list. + + A closing iterator is not needed if the application uses response objects + and finishes the processing if the response is started:: + + try: + return response(environ, start_response) + finally: + cleanup_session() + cleanup_locals() + """ + + def __init__(self, iterable, callbacks=None): + iterator = iter(iterable) + self._next = partial(next, iterator) + if callbacks is None: + callbacks = [] + elif callable(callbacks): + callbacks = [callbacks] + else: + callbacks = list(callbacks) + iterable_close = getattr(iterable, "close", None) + if iterable_close: + callbacks.insert(0, iterable_close) + self._callbacks = callbacks + + def __iter__(self): + return self + + def __next__(self): + return self._next() + + def close(self): + for callback in self._callbacks: + callback() + + +def wrap_file(environ, file, buffer_size=8192): + """Wraps a file. This uses the WSGI server's file wrapper if available + or otherwise the generic :class:`FileWrapper`. + + .. versionadded:: 0.5 + + If the file wrapper from the WSGI server is used it's important to not + iterate over it from inside the application but to pass it through + unchanged. If you want to pass out a file wrapper inside a response + object you have to set :attr:`~BaseResponse.direct_passthrough` to `True`. + + More information about file wrappers are available in :pep:`333`. + + :param file: a :class:`file`-like object with a :meth:`~file.read` method. + :param buffer_size: number of bytes for one iteration. + """ + return environ.get("wsgi.file_wrapper", FileWrapper)(file, buffer_size) + + +@implements_iterator +class FileWrapper(object): + """This class can be used to convert a :class:`file`-like object into + an iterable. It yields `buffer_size` blocks until the file is fully + read. + + You should not use this class directly but rather use the + :func:`wrap_file` function that uses the WSGI server's file wrapper + support if it's available. + + .. versionadded:: 0.5 + + If you're using this object together with a :class:`BaseResponse` you have + to use the `direct_passthrough` mode. + + :param file: a :class:`file`-like object with a :meth:`~file.read` method. + :param buffer_size: number of bytes for one iteration. + """ + + def __init__(self, file, buffer_size=8192): + self.file = file + self.buffer_size = buffer_size + + def close(self): + if hasattr(self.file, "close"): + self.file.close() + + def seekable(self): + if hasattr(self.file, "seekable"): + return self.file.seekable() + if hasattr(self.file, "seek"): + return True + return False + + def seek(self, *args): + if hasattr(self.file, "seek"): + self.file.seek(*args) + + def tell(self): + if hasattr(self.file, "tell"): + return self.file.tell() + return None + + def __iter__(self): + return self + + def __next__(self): + data = self.file.read(self.buffer_size) + if data: + return data + raise StopIteration() + + +@implements_iterator +class _RangeWrapper(object): + # private for now, but should we make it public in the future ? + + """This class can be used to convert an iterable object into + an iterable that will only yield a piece of the underlying content. + It yields blocks until the underlying stream range is fully read. + The yielded blocks will have a size that can't exceed the original + iterator defined block size, but that can be smaller. + + If you're using this object together with a :class:`BaseResponse` you have + to use the `direct_passthrough` mode. + + :param iterable: an iterable object with a :meth:`__next__` method. + :param start_byte: byte from which read will start. + :param byte_range: how many bytes to read. + """ + + def __init__(self, iterable, start_byte=0, byte_range=None): + self.iterable = iter(iterable) + self.byte_range = byte_range + self.start_byte = start_byte + self.end_byte = None + if byte_range is not None: + self.end_byte = self.start_byte + self.byte_range + self.read_length = 0 + self.seekable = hasattr(iterable, "seekable") and iterable.seekable() + self.end_reached = False + + def __iter__(self): + return self + + def _next_chunk(self): + try: + chunk = next(self.iterable) + self.read_length += len(chunk) + return chunk + except StopIteration: + self.end_reached = True + raise + + def _first_iteration(self): + chunk = None + if self.seekable: + self.iterable.seek(self.start_byte) + self.read_length = self.iterable.tell() + contextual_read_length = self.read_length + else: + while self.read_length <= self.start_byte: + chunk = self._next_chunk() + if chunk is not None: + chunk = chunk[self.start_byte - self.read_length :] + contextual_read_length = self.start_byte + return chunk, contextual_read_length + + def _next(self): + if self.end_reached: + raise StopIteration() + chunk = None + contextual_read_length = self.read_length + if self.read_length == 0: + chunk, contextual_read_length = self._first_iteration() + if chunk is None: + chunk = self._next_chunk() + if self.end_byte is not None and self.read_length >= self.end_byte: + self.end_reached = True + return chunk[: self.end_byte - contextual_read_length] + return chunk + + def __next__(self): + chunk = self._next() + if chunk: + return chunk + self.end_reached = True + raise StopIteration() + + def close(self): + if hasattr(self.iterable, "close"): + self.iterable.close() + + +def _make_chunk_iter(stream, limit, buffer_size): + """Helper for the line and chunk iter functions.""" + if isinstance(stream, (bytes, bytearray, text_type)): + raise TypeError( + "Passed a string or byte object instead of true iterator or stream." + ) + if not hasattr(stream, "read"): + for item in stream: + if item: + yield item + return + if not isinstance(stream, LimitedStream) and limit is not None: + stream = LimitedStream(stream, limit) + _read = stream.read + while 1: + item = _read(buffer_size) + if not item: + break + yield item + + +def make_line_iter(stream, limit=None, buffer_size=10 * 1024, cap_at_buffer=False): + """Safely iterates line-based over an input stream. If the input stream + is not a :class:`LimitedStream` the `limit` parameter is mandatory. + + This uses the stream's :meth:`~file.read` method internally as opposite + to the :meth:`~file.readline` method that is unsafe and can only be used + in violation of the WSGI specification. The same problem applies to the + `__iter__` function of the input stream which calls :meth:`~file.readline` + without arguments. + + If you need line-by-line processing it's strongly recommended to iterate + over the input stream using this helper function. + + .. versionchanged:: 0.8 + This function now ensures that the limit was reached. + + .. versionadded:: 0.9 + added support for iterators as input stream. + + .. versionadded:: 0.11.10 + added support for the `cap_at_buffer` parameter. + + :param stream: the stream or iterate to iterate over. + :param limit: the limit in bytes for the stream. (Usually + content length. Not necessary if the `stream` + is a :class:`LimitedStream`. + :param buffer_size: The optional buffer size. + :param cap_at_buffer: if this is set chunks are split if they are longer + than the buffer size. Internally this is implemented + that the buffer size might be exhausted by a factor + of two however. + """ + _iter = _make_chunk_iter(stream, limit, buffer_size) + + first_item = next(_iter, "") + if not first_item: + return + + s = make_literal_wrapper(first_item) + empty = s("") + cr = s("\r") + lf = s("\n") + crlf = s("\r\n") + + _iter = chain((first_item,), _iter) + + def _iter_basic_lines(): + _join = empty.join + buffer = [] + while 1: + new_data = next(_iter, "") + if not new_data: + break + new_buf = [] + buf_size = 0 + for item in chain(buffer, new_data.splitlines(True)): + new_buf.append(item) + buf_size += len(item) + if item and item[-1:] in crlf: + yield _join(new_buf) + new_buf = [] + elif cap_at_buffer and buf_size >= buffer_size: + rv = _join(new_buf) + while len(rv) >= buffer_size: + yield rv[:buffer_size] + rv = rv[buffer_size:] + new_buf = [rv] + buffer = new_buf + if buffer: + yield _join(buffer) + + # This hackery is necessary to merge 'foo\r' and '\n' into one item + # of 'foo\r\n' if we were unlucky and we hit a chunk boundary. + previous = empty + for item in _iter_basic_lines(): + if item == lf and previous[-1:] == cr: + previous += item + item = empty + if previous: + yield previous + previous = item + if previous: + yield previous + + +def make_chunk_iter( + stream, separator, limit=None, buffer_size=10 * 1024, cap_at_buffer=False +): + """Works like :func:`make_line_iter` but accepts a separator + which divides chunks. If you want newline based processing + you should use :func:`make_line_iter` instead as it + supports arbitrary newline markers. + + .. versionadded:: 0.8 + + .. versionadded:: 0.9 + added support for iterators as input stream. + + .. versionadded:: 0.11.10 + added support for the `cap_at_buffer` parameter. + + :param stream: the stream or iterate to iterate over. + :param separator: the separator that divides chunks. + :param limit: the limit in bytes for the stream. (Usually + content length. Not necessary if the `stream` + is otherwise already limited). + :param buffer_size: The optional buffer size. + :param cap_at_buffer: if this is set chunks are split if they are longer + than the buffer size. Internally this is implemented + that the buffer size might be exhausted by a factor + of two however. + """ + _iter = _make_chunk_iter(stream, limit, buffer_size) + + first_item = next(_iter, "") + if not first_item: + return + + _iter = chain((first_item,), _iter) + if isinstance(first_item, text_type): + separator = to_unicode(separator) + _split = re.compile(r"(%s)" % re.escape(separator)).split + _join = u"".join + else: + separator = to_bytes(separator) + _split = re.compile(b"(" + re.escape(separator) + b")").split + _join = b"".join + + buffer = [] + while 1: + new_data = next(_iter, "") + if not new_data: + break + chunks = _split(new_data) + new_buf = [] + buf_size = 0 + for item in chain(buffer, chunks): + if item == separator: + yield _join(new_buf) + new_buf = [] + buf_size = 0 + else: + buf_size += len(item) + new_buf.append(item) + + if cap_at_buffer and buf_size >= buffer_size: + rv = _join(new_buf) + while len(rv) >= buffer_size: + yield rv[:buffer_size] + rv = rv[buffer_size:] + new_buf = [rv] + buf_size = len(rv) + + buffer = new_buf + if buffer: + yield _join(buffer) + + +@implements_iterator +class LimitedStream(io.IOBase): + """Wraps a stream so that it doesn't read more than n bytes. If the + stream is exhausted and the caller tries to get more bytes from it + :func:`on_exhausted` is called which by default returns an empty + string. The return value of that function is forwarded + to the reader function. So if it returns an empty string + :meth:`read` will return an empty string as well. + + The limit however must never be higher than what the stream can + output. Otherwise :meth:`readlines` will try to read past the + limit. + + .. admonition:: Note on WSGI compliance + + calls to :meth:`readline` and :meth:`readlines` are not + WSGI compliant because it passes a size argument to the + readline methods. Unfortunately the WSGI PEP is not safely + implementable without a size argument to :meth:`readline` + because there is no EOF marker in the stream. As a result + of that the use of :meth:`readline` is discouraged. + + For the same reason iterating over the :class:`LimitedStream` + is not portable. It internally calls :meth:`readline`. + + We strongly suggest using :meth:`read` only or using the + :func:`make_line_iter` which safely iterates line-based + over a WSGI input stream. + + :param stream: the stream to wrap. + :param limit: the limit for the stream, must not be longer than + what the string can provide if the stream does not + end with `EOF` (like `wsgi.input`) + """ + + def __init__(self, stream, limit): + self._read = stream.read + self._readline = stream.readline + self._pos = 0 + self.limit = limit + + def __iter__(self): + return self + + @property + def is_exhausted(self): + """If the stream is exhausted this attribute is `True`.""" + return self._pos >= self.limit + + def on_exhausted(self): + """This is called when the stream tries to read past the limit. + The return value of this function is returned from the reading + function. + """ + # Read null bytes from the stream so that we get the + # correct end of stream marker. + return self._read(0) + + def on_disconnect(self): + """What should happen if a disconnect is detected? The return + value of this function is returned from read functions in case + the client went away. By default a + :exc:`~werkzeug.exceptions.ClientDisconnected` exception is raised. + """ + from .exceptions import ClientDisconnected + + raise ClientDisconnected() + + def exhaust(self, chunk_size=1024 * 64): + """Exhaust the stream. This consumes all the data left until the + limit is reached. + + :param chunk_size: the size for a chunk. It will read the chunk + until the stream is exhausted and throw away + the results. + """ + to_read = self.limit - self._pos + chunk = chunk_size + while to_read > 0: + chunk = min(to_read, chunk) + self.read(chunk) + to_read -= chunk + + def read(self, size=None): + """Read `size` bytes or if size is not provided everything is read. + + :param size: the number of bytes read. + """ + if self._pos >= self.limit: + return self.on_exhausted() + if size is None or size == -1: # -1 is for consistence with file + size = self.limit + to_read = min(self.limit - self._pos, size) + try: + read = self._read(to_read) + except (IOError, ValueError): + return self.on_disconnect() + if to_read and len(read) != to_read: + return self.on_disconnect() + self._pos += len(read) + return read + + def readline(self, size=None): + """Reads one line from the stream.""" + if self._pos >= self.limit: + return self.on_exhausted() + if size is None: + size = self.limit - self._pos + else: + size = min(size, self.limit - self._pos) + try: + line = self._readline(size) + except (ValueError, IOError): + return self.on_disconnect() + if size and not line: + return self.on_disconnect() + self._pos += len(line) + return line + + def readlines(self, size=None): + """Reads a file into a list of strings. It calls :meth:`readline` + until the file is read to the end. It does support the optional + `size` argument if the underlaying stream supports it for + `readline`. + """ + last_pos = self._pos + result = [] + if size is not None: + end = min(self.limit, last_pos + size) + else: + end = self.limit + while 1: + if size is not None: + size -= last_pos - self._pos + if self._pos >= end: + break + result.append(self.readline(size)) + if size is not None: + last_pos = self._pos + return result + + def tell(self): + """Returns the position of the stream. + + .. versionadded:: 0.9 + """ + return self._pos + + def __next__(self): + line = self.readline() + if not line: + raise StopIteration() + return line + + def readable(self): + return True + + +# DEPRECATED +from .middleware.dispatcher import DispatcherMiddleware as _DispatcherMiddleware +from .middleware.http_proxy import ProxyMiddleware as _ProxyMiddleware +from .middleware.shared_data import SharedDataMiddleware as _SharedDataMiddleware + + +class ProxyMiddleware(_ProxyMiddleware): + """ + .. deprecated:: 0.15 + ``werkzeug.wsgi.ProxyMiddleware`` has moved to + :mod:`werkzeug.middleware.http_proxy`. This import will be + removed in 1.0. + """ + + def __init__(self, *args, **kwargs): + warnings.warn( + "'werkzeug.wsgi.ProxyMiddleware' has moved to 'werkzeug" + ".middleware.http_proxy.ProxyMiddleware'. This import is" + " deprecated as of version 0.15 and will be removed in" + " version 1.0.", + DeprecationWarning, + stacklevel=2, + ) + super(ProxyMiddleware, self).__init__(*args, **kwargs) + + +class SharedDataMiddleware(_SharedDataMiddleware): + """ + .. deprecated:: 0.15 + ``werkzeug.wsgi.SharedDataMiddleware`` has moved to + :mod:`werkzeug.middleware.shared_data`. This import will be + removed in 1.0. + """ + + def __init__(self, *args, **kwargs): + warnings.warn( + "'werkzeug.wsgi.SharedDataMiddleware' has moved to" + " 'werkzeug.middleware.shared_data.SharedDataMiddleware'." + " This import is deprecated as of version 0.15 and will be" + " removed in version 1.0.", + DeprecationWarning, + stacklevel=2, + ) + super(SharedDataMiddleware, self).__init__(*args, **kwargs) + + +class DispatcherMiddleware(_DispatcherMiddleware): + """ + .. deprecated:: 0.15 + ``werkzeug.wsgi.DispatcherMiddleware`` has moved to + :mod:`werkzeug.middleware.dispatcher`. This import will be + removed in 1.0. + """ + + def __init__(self, *args, **kwargs): + warnings.warn( + "'werkzeug.wsgi.DispatcherMiddleware' has moved to" + " 'werkzeug.middleware.dispatcher.DispatcherMiddleware'." + " This import is deprecated as of version 0.15 and will be" + " removed in version 1.0.", + DeprecationWarning, + stacklevel=2, + ) + super(DispatcherMiddleware, self).__init__(*args, **kwargs) diff --git a/week-0/day-3/my_todo_app/venv/lib64 b/week-0/day-3/my_todo_app/venv/lib64 new file mode 120000 index 00000000..7951405f --- /dev/null +++ b/week-0/day-3/my_todo_app/venv/lib64 @@ -0,0 +1 @@ +lib \ No newline at end of file diff --git a/week-0/day-3/my_todo_app/venv/pyvenv.cfg b/week-0/day-3/my_todo_app/venv/pyvenv.cfg new file mode 100644 index 00000000..7f0d9af4 --- /dev/null +++ b/week-0/day-3/my_todo_app/venv/pyvenv.cfg @@ -0,0 +1,3 @@ +home = /usr/bin +include-system-site-packages = false +version = 3.6.8 diff --git a/week-0/day-3/my_todo_app/venv/share/python-wheels/CacheControl-0.11.7-py2.py3-none-any.whl b/week-0/day-3/my_todo_app/venv/share/python-wheels/CacheControl-0.11.7-py2.py3-none-any.whl new file mode 100644 index 0000000000000000000000000000000000000000..36659e5fb7b65436e89d778eda8f3909bed7d4b9 GIT binary patch literal 18720 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 Obo!mrh;t=jUHt)|Z35N+ literal 0 HcmV?d00001 diff --git a/week-0/day-3/my_todo_app/venv/share/python-wheels/appdirs-1.4.3-py2.py3-none-any.whl b/week-0/day-3/my_todo_app/venv/share/python-wheels/appdirs-1.4.3-py2.py3-none-any.whl new file mode 100644 index 0000000000000000000000000000000000000000..4c1abd7ef53f59c2f974ecf2d09b84e31b55f523 GIT binary patch literal 12139 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 Zf<}2MaEO22efzUx{z=z)=>EC;{{Xs7sp9|u literal 0 HcmV?d00001 diff --git a/week-0/day-3/my_todo_app/venv/share/python-wheels/certifi-2018.1.18-py2.py3-none-any.whl b/week-0/day-3/my_todo_app/venv/share/python-wheels/certifi-2018.1.18-py2.py3-none-any.whl new file mode 100644 index 0000000000000000000000000000000000000000..144996e06cc8ba53f4bdea554705883e120be146 GIT binary patch literal 150807 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

    ;>YUS{A#%)2 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

    lOB^utP3PxpPV>|tv2!@#E881e`TlFli&8;1g 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�+DqSWGMREKi0 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�)j`)>% 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 V2Wep1Kj0q+(0{<={^#@6{{!4Pbz=Yk literal 0 HcmV?d00001 diff --git a/week-0/day-3/my_todo_app/venv/share/python-wheels/colorama-0.3.7-py2.py3-none-any.whl b/week-0/day-3/my_todo_app/venv/share/python-wheels/colorama-0.3.7-py2.py3-none-any.whl new file mode 100644 index 0000000000000000000000000000000000000000..75345fcb6c5bc0991ede4e3455948968fe022294 GIT binary patch literal 19915 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 literal 0 HcmV?d00001 diff --git a/week-0/day-3/my_todo_app/venv/share/python-wheels/distlib-0.2.6-py2.py3-none-any.whl b/week-0/day-3/my_todo_app/venv/share/python-wheels/distlib-0.2.6-py2.py3-none-any.whl new file mode 100644 index 0000000000000000000000000000000000000000..161b4c21bb114ba04a707b1da0b0d9d69aba56c8 GIT binary patch literal 141707 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 GjQ$U&0@_vp literal 0 HcmV?d00001 diff --git a/week-0/day-3/my_todo_app/venv/share/python-wheels/html5lib-0.999999999-py2.py3-none-any.whl b/week-0/day-3/my_todo_app/venv/share/python-wheels/html5lib-0.999999999-py2.py3-none-any.whl new file mode 100644 index 0000000000000000000000000000000000000000..d9fda41f3a6a2142d85b014814c1b67937204256 GIT binary patch literal 112620 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 E4>c1E*#H0l literal 0 HcmV?d00001 diff --git a/week-0/day-3/my_todo_app/venv/share/python-wheels/idna-2.6-py2.py3-none-any.whl b/week-0/day-3/my_todo_app/venv/share/python-wheels/idna-2.6-py2.py3-none-any.whl new file mode 100644 index 0000000000000000000000000000000000000000..ab09a80bbe43144c1ef9137bfcba5bfe33f9cf77 GIT binary patch literal 56485 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 Icat|sf;SJ zyee`rbyx{C)c=?68n@CNdnt&`q+4VkUHfrxdI7!CRyT8Q>jYRDxJ1AGK!JRxHxn10 z)^Q>(PL{FSMVS8pUa!o&n1-!5_3u+*G!G(c$r|t`Y6IQn(Dj4dsczs1rrdo&uHFe8F^J$&fi?_tI7|zSIn7YJn@b5xfHf_0{WAhj2-$Wjs+S zDcT{a1zRqzntV~hGZ0Tv1;Zf*X1Fh`U_MbP+&IbHIJP^sKMt{{i?9uwhsHzT#zUeo zK(wC`A<+ZjhY_o`cg-)3aTdDjgl!9iC-7jd*H+q_TP7DS&elMXT^J$Wt*uJoLe{dU z_SRL8LOXgb(kV8MY}GY)^dS-KfBm!>y>`8@@#Zr$y7hCbf2n8BZpBffi`?$TOs0rj zCW5t9jodER=%Yi~M#i?}+5UNwTL+KrG~>o)FeA9{9w-PIiiHzb5}Sn%;ubEfXcqr;5ZuLL{NPlv39eYq^Ht`Qw! zXMb{^S+Q~#3udvR&o`Dd47p&=PYpE+8*y7+_zl4?tpG>iRo3mdwL)56*tK+j_us7A zB=90`WjcutU!bbvuOf$9i|Ej1O;$)f*ccTJ9ik)cK1YQA_e{`oP7PK_6~|fze1*y0 za?afJz{?#!JY1_A2-vM(k64Uufmv5TIlX7hxqN|(ri6VsfITajo$Q1BpDjKR>%G8L z*!ildpzzT~$Bv`&YRyn48I@KjV{DqMvmGHN+ck7<>BC}+&>AD+bizv@l; zX@*Sevv&^izk8XE&urW=+0tp_$25hU(c_qj5HSwSYz_GI4r68m81m^~H){839cxT^ zhzTjGN3BnucQ8v(PYI94d*J5>su5vE3gq(l7!wnF66U+OS%XGlH}9G}TpD|B==_5) zx1;47Y{eiE@?%;}0vj4uh|I{9Y4q?8YQpOs)onY!(Ay(}$wmh)V_+;}B9`$nmhdrZ zcn=!Mhzb|H7d2OW8mC)}mD>pBampvujm)X5FJgU7f9~M!GQKCnb;)1*ur@|VO zh{<3s-?jG~|NM{*LPaI`Dc3JYm6nL-#&vw}W<2{sbP3zYT$ttWLh3rKzr6?I`KkOI zE4@b={RtzfL~0MFADhW5GoWim>^t6=Sa7rVs7HTa;Bxj%**%f{xp3>5ZN|Yb`WmF0}iF+0G8R$d=+jijea7G1RyK;==;#Qf|H}V%-xp4;EblEbwD*} zQ;t)X^4WotksI}R$%djFmAAVoLFIhQllt8CTq2Mk!rhAaOAV!!D%r?>K8;k<$a!8fUPt64P?EfO zvt@d!ybZ0F~^) zGCVA&gJXvYja2b&Ygvem)hN|~cgacr14p^aT=z68xWnrQ98Bf}pI)>;r^D>AJI0?) zEB@prN{(mmuH+XIk=>HSfx-9a^ThZzH@sacGUwZ_L$0C&`mJT1lEi~SoW(4qdW;%j z-l9T=t>C&89_eK6os&d?C3J?~m`g803 z_pvLu$_oz7ReOy!`}#)5vlDid%n+Z17sLp@5>x;LK=;OV=Q^Mpw0q#b0?1tJd=rc)c^y8ZxD7;F3Bx{x+mC|fj)^|AaA5QIw5Wldini) zfBZj;yaiMpO}8dY2m}uhI1nIsAi;yXYjAfB?he5T65QS0-QC>@?(Xg`(9B&MZ442EGIo1k~u>V z?x0EVD1m!wT-ATmX7N*{y^LKGD=Y{q*=+}4d30lQS zPjpi1ICphxtL-%GMl- z#&=gCg{Pfb-!n$UdKz8X27CCf@@B96Zcp$0eCj;lm#jdj6n!+Qjdyd9E6?cV{4K8d zkJ}aQ0)nIkaCqo*s+Ovkdbcl!Fu|?dHz(%aHjbS6n#NVrZus29F2#}K>b2gwz(V2y zsjXc%ymsG;&wRp`bHe^T95X_xKdB$-g8JeO>!~~z^evUmDh^GG?3tDu3yEbV7U)>s zI4=`7REA7owmsAJ+g^E!IA&y!ZcAxgKawNOwtVmhCk7BOmXKdX0bz z|I107;hZI{F|RRqShibwt$MCP0WAT}{jED1P`RXcNO$^+(|hf!&>sI?uWbk~;A;J+ z-aRm%aPR!q@Y~BCd;hnZ1Xne_mj}cv%G2AwYHsLPDEIj_Cekyh4(?wb@Go$GYdbD1 zKlmR6uJ_juPY8E$Yg+AX-Jw)-{PPXWCo`Pfwbj6)!F6fpSUQUAk$zX>l~o^f@00AL zQ{%b{k}KLo;_`C3^4HciQxXhl4{xvp#kHNZ8g#D)ycCte=-9 z=jp}VFWXG0w=p)(zGRFGqr2%cHK`rl-KuzaB$J)QgZr?rjbxG_4!Nb-O*eNyaTNdg z8{!ECzHIQldw%9ph@dwxiy^MFR zzw?tmlC|`|-ICdYyP&*)bOJefFA1y=DsiA)kX*QJH)}c`wA1X@vA*&6@C0`kwI`OM?$nj{Tlh(;2I>l4#=G1?RT<1{OkF!O3@%|p=9%xWc7v#KWFl&fj^bmQU zFXAAQd9B{9MI*j`@T7+w{YMI(NGtafJkt5aN%;dA;YbJ7MOhm;Xs!#=MY$UfW3G$n z28G>0lI%|Be4hm4fD`A)8dYOEKoAi5zO$OJm7dD9%KhWh_ds$(V<9z68w;K(ecJOJa1L zO1N9zwd|k%`r8Kv?y!4j^;}Q6Sc`t#hIg36tWscIs1@6^<`Sx0M=x>7{wc9Aex(ji ziM)ot|2EU@-g>-le348P)`Pw4mhv!-HlV~ydZ^or@5k^~Yq`g#{XBZ&J=3~!ghTpR z@1e+Vbw2tP2OWnm-}0g#GgtNE#tK~e?_1|yY(-<3`&GD`x=vGowt5?-ZG5?MPR5oH|H!mk7eJdADD`N+>F1=Fxtmr57Ursv*H>oM;dWTaXS$z%&xg`Zqz5n z&Me77l6U0b7v|6Q;=jkobhz=d^wYBGy5;!z_iV=}XPp&oXIWwEciDXZsu`XRYSeQ=pD;>&NXY4~aVS2sv zm{#A)9%yMB6@BV(f^sw}+R|voKVC@IJgX;2ppoML!sN8=40Wg(?wEsYBW{m>6hyGj z_Xi=)kM$YBuPvOTfY|7kZ@di_gxRQBukk}>-Jm_jk@<9Y*#S2!^ix6^)hc7aC8EUM)Qte8<(f=4hKEs>W`=;dc-)ybYK2m%hQmR7o88mM~#E zRCz-N&6*=>p-;n)_ML~Cqe$rpX>PxiM^T$!U$oK&+#kg+wO*dm+|OrUAA;IuvvSgk zxbvQtJ=DB=* z^MC$$Sf_hcxdWU7pMD1cf%>1LamE&QHaZrD`nJINI5&BTu!V0ZExSs=$_1hV{{1(# zUdK5mVKIs>{9ixPp@;>fEJ)7BJZ!S-;_!_-*m~Y=a<<(XB+r}0K1F*-|MFB+g?WIL zW#!1IV71E>`skc0j&)MJC|NnG>sAi_8{E z^FuxGsb#}nRv3=Fkc#0X;Xz*4q>knCM-@RM`JF9`8?FSY1|i%xJ)u?{t2Cwno3VjD z=kVTvg+WiGK7eA3E>$1pOyZOJqhwRHV4!X{^bfcqMu{?xmaVl8lRty#crs2f+_py=$8+=)# zRUGt_1W5Uh-Ysj(fBlXfI>e_XC3U%dMTJQm*uKbSm@$s3xrwy2l!3^>O;5BtOEa~z z?fYY$WL1l5R8AyjLOiBVx%crJ7dKIoe9P&~; znK64`WJ}`Q2=bNreOVPJlk9X>S@_Dd;uLP_a&};r_W{~9zL6Hpahhr9CVpm3{L|b2 zvs2*gx@BSlodE=R@b}>U9!R&+(KXdE)Ytm=SM{L(K6Oh@stx&#_=*2i2rKRLqXGgb~NO1d!;*8_LS78*jjnP4rH?{#eM4yqTzlS zoLCOye%(U|<9vRK;(nT^kb07^?Llt6OgVMGZF-G=)tV1{ZN2Ehq$uA=Q+%m^i1?!E zyxstM-AsEqt$wMShF-lNb#%YV0{%2JF(lP?_7vt`z2QgEs`k3LW%=0pn9_&m@uMe9 z)BR}x|C;ln1>eB2*{NF*uOdd+?63Skp{o|&D>4GSn)Y_Y zRRTq1KSp;gK?QUHRsOtJBbCvdS1y&&JS0U}_aJe_g^1ZR*cEfgs&P*|Ufi8}Tt9=j zAB$orL*s%xhBx#Y?qo3XhI+y(>TA`XSb`3RdZfzhE7YGp2PFZpqP|A`i6N+Jdn2v9 zzD4~BF^GMrXRMM%i`qT3r^n{}l9D4Q77uF!}W{-{yf>W(ZfKmcej6vqhCG(AHRrYlThZZ9<%Z(*X_NGH%SF!E!C}|{< zrAcM7tm^VV9A_1@x!QOI^vvUQ$!$?wZn{p3R+nh84#`aUN}0~~pYjVMWhaJW4s1m{ zB#N-#F~VIl>Ay>Ok<`4gYu_=NA(^ZIe=MmYsD!Sd5;5a7K`^OJw?M$IO*ckRttI$3 z?*^)`X1vDms)~426k)M3!b5{u`rCghFN{>2s*5@Pf9OgWyq#8NwT>UAj0rV~!>SSn zC8Sk~Q7T0P#nXBtXH0Dx{Msd75H#aMej2!m0?t88=(Qj6P_FU=4K3_=ZEKEs&eVHz z)!~it-0x!qJ;)`buq6w9QIvI%W@>M0$=bW1GH8R8KXv!VHkS~QVBsv1qZDD43P>D`LZ8^vT9t@74eCO9jb5Q14M z$Ygcme)}SbFSD>V%hc@yj9%)Fuzyt=|ER+Ls&GMTTiCp%mhgazaMle_>Gs>V0jiHS zoL_-dztxcu{;IP6s;=uHA}G9lvz5wGdcvQ+JHu zjm+8hnY`_|!_#Z_vlkI3T3RJ|&T8@f>&)3K!QxA!r?gX9P?7OFLXUD@Pc$2P`Dx@H zH3n~yvLIU%Uu+i*br}l(8}C`DdW>R_YWd+%z{g%n;W)EV+sR?4msw4;@VSu?2c___*Gy~dok_eZWu_&LmmxyC5NptPkR9<>v;etsPw zV=xYS?QyA+KwK*d#5Fi45sIP&4JIq~dwt_ZSxsbJP4tC-jQA*t;dB2+PB=oWKMau(9rw=|lR})$l4;H_#tHMAl#qispjid?#Vg&ash;Qf8de_q@$2^;BxANY18 zMd*USAK4M!Y8oe@1=$e+h`+ZW-@;qHd~|9;Ciy(1u_q1nU1>ZUQu__d~|WsfHH#{UFm4TMFzES$?rpC1BaHpPvdJwJyP6R5PZMF zQq9nlpnkqj*t05x0P)Gf_H`zm|IXX}Z_#IIANXU!!{eL9?gU9bGZ40a&-d}^X0J!r zmgnPpFi_;9wfQxxh)~W*BSd|+;0d92`C|*R3<<7$BP0T$nTe=4M)IN` zLvsPb06kw2uu1~@cLdeb8WPZI!PYeG10cW}2AZXT zNbTowIm8zwz#2SU1Ok`Z1Y09CJIH!QQ2>RP1jYzKphWS2RW@W<2p~#y8ZP6Ybr6|4 zn#+2c8|&&FbInnuw@)I&S+DvPFJHUAVbTtWsCm?m@st+h`he^U{4W*Vs`W8mzi#)D?tfm&tah%tlAc!nqVAl&cq z&c{=`j}9-2!JE*-RhDP(*3DIv=PV6B4MY3OG|9*sx1|}1w&5&^$oTTyR|2~t%W|01 zYIO;IgA?5X;}YpIE-ng!_`W{b^>FvcyJU!ueNJyso}u6HUf~DrMfg76MMC&%lFK7x zwh<9@zr~k=g~blvw}hK;#Fv7D4ZOQ6^i1~;o3|DX?`a}*Cr5awC!A)ey5x(Z{JPQW z3FvUVA-#w!5CPkIT1oiAaMi|+ z6%j8dJ=KZ`ory-@1U+)5&xunIv~l9xaQCDj27@SLU#rQ155r%YD#Se1*1Zb!m~UXM zEHJA2ErQ|8t<}5)rb3vZ=jy3=&8&3OAZEh}$?Ge$JSV9jy>MWl>whB#JQYYG12+m8`FcDFIhf6d+e5$s-Xrb8GS0_ zh#jM*KYXsT*rQ)+EUuhB93jv@AE!=;iSA&0m83zUdro1wq`UK5{gaT_uf4oPN#K98 zgYky9npq1C<*93ATO^WJE=y@RnrPGBHi?6NZ*9lnO-Amjs|JsB&j>CgpKn`(9M5?F zhz6vWki`iGitF77CnVo>TZ0nM_}qxh8{o?Yt0*W84pA0g1a}Uj=pns&xv0OP^m zR8Fd3aJ6U|*k%2EgZ_Mzv|+5?#wpnLoLm2K)>7(^WgA&*kHq|UTK(Nz7Eqo1H*=oS z4GDEiPH-%Q{danO67CwP!P;^b`y@O$0Ma;C`(Z3`Te@em`T@+Um&frTmf^}mRxHr{ipqFhO|o>4 zXEidnWqT_y^|EA}DFs!w%Ft)ZCQ>->A@(ODGb3rwRJ_{8^wLy3ddvR5V0jM=M7z+R zcfmlm3mx|_FzG^%(zgguvW?Q06_0Ho(WJ7q5xjT?@~MNM6Gnf-AP?{QB8_^ zgh?BT<_Hy!c!VAp=+Dbhay5e)ZgJYE9q`4YNP9B7z*mUus@BDPo2P94Q*9$XbVN2! z+32SlWO``IR^*S6b@KpMw%WzmAGKrVa87^G@|t;oJ)1+MSRjda9ZCQG9HLa<0Dm1x zqji*@>}MN`psW#%8i9AawJZxu3S!w7{}Q7+wJfS}Ro^438mK~Nw#{U>%m9r&YZ5wZ z(&C1Z#we*EU}Bf5{tu{^`PbHB>R(%&|JVxsYy1CXQs@3nuyUssur2-`QQSafF*U*= zN_)8nFm=`6dZM#{Z#ynWXQ8Vk0ze~{^uHM=pjcoP_6Mf4QVi{FRsP(a$v1B}>!^&c z;dx9%{zEW1^kkbI2y zM?Rh?C$0{%Jo!{Ryp{bsz674S}ghX%YL;7I_l z4|ovZeIWL9Wg)I;Ngy8T$sr!J`4zfsx>n0Rpj@517?+hFoZUV{dU3haj9_5kzqm{D zjQ5@9n0I1#uOcIqt3iR=z3Q@qvI(`8a#wM{*!u&+dWm=wiCZ)aK7kQ^WfKduoJ6sb zDYlckrARN;b@w6jV`+-x713+1IxH1EX1+pUi>z`X>3&SV(_}Psc^ktJUfy`EkdNrY zTcd2=ODl#A!?+Q^X=4jJRY&?3Y&Qq)JfW={cCiv^9E%ODEc0DD2DTH{oJIGdG0n-~ zWp_2|>1FXFh75y)(t?JR7L%LBB*xq1Va_kMNl6WEMTrTk48sm{Nja-b!!L>m6h5bT zbMCk8+3gr>hZqK)?38A2Pio5F){k|5Ix|N=Xy3$$^~^&mZlZCV98fLotXpcerHUi7 zXmHzBwTLhnl4vwxb)33Tt8ch6r?^}!ny36;beuX_Ta!2KkkrwTqgztD+Axx7eLLRT#&M`$^!rregMR!;=HlSWcb67=9X{(V>St&ZE?)NpQgs5^(F_qGK%zE+20JiEB zkJaV2Kbz;4*MdC+vEzD~IPU1J8AL<_)z7MK#gSo&*0B$!HVKOq#9}2_dKS(uv1|nm z0|zQ5MRGegUi~Ju6@z;kVa*oZJg3fje!gd=!Z)gW0y4Il>G+&BOI$p`GOG8fNo58W zmea*Lj$y;er~kSoi}-}gl!V1&I@?zI|J|83IXVy{fpwQDDt!Ze_oKy|shh5bGu9W@ zgeI{~r#947wtpQ(N%G=oPECrKDSO<^Nfl$|vAXJFLv^jKvH9-A!hdNTG>eX#6&G1k zYHit$r)vGoccm9bGpbYgjoJMsN*g5TO=~&L=u6ouPEX+G?V_xw1L~-*+IFvG9O-PB zRvl;+n)daM&04{((egOge#IPKM#k|hjd@)3%ZuxihaqMK#Vr1=ct*VhBlcHG@ z@0!ETf#2d(dP>8swM$cNiidICG9&I{ea$k9#$u0wIrG7c!%NQbli1>YTy4Nc0e z`brQESO966g8g>Fx=Gw#ohVPPN})#1_VlPx1$UQ;ZPeTjd&Z8r5t%c+#-xjStxiy1;U zwnS@81Apwj>fB~Qm@T4M`hy@i`5epcnqhRK{sH@XNvqmwmj+#;&Z!E46oHwx$|_|z zb6ayB*Fm~oyV8nR8~7XpMnX+^r^FjdI@1u}q(>#a6E}4Pc|A!D3wW(xHAjwLm{wYd zYPyfP6zbmIJaoSY4wHz_&54TDb5 z_8e{;c2pZVTmll%9KXyWSgYylE?u3-zb+SHLN`*i$*CcW)?M-iycuYc!#N^eURnCc z*UVniqkh6fLuF0$XSrbZc-z9m`bIAAW^O2j<)A-GqNLH~x|yer*=d>SDkq6ii|Oln zMU$K%G#i}ml==RJEo8(|kt^ z3A)#^8?i%gYG)37j`a&T^imK!!HnvE{_)}7a5`Cs#NF>8TStOH^eMMBfW41gbgA7f zx;~vlw1sR|gSn9W!bQC)Sy%qHO_?U88T$njr}PqsQT>$JMBwBYr@|u^Cp`$;f?QxK zf1ZHZRxDDQQ#AeGbfX}XfC;piyhO_oz;{TR%l`WbinVVdpS@; z(Gz+!AnoOH+h;d0pg)DFZfVx+8%)XzzK}GVBvHHJGd3Mr9)FmUnY8p=q+Eu%pZ_95 zVFOCvUM&JGYKl+U(AyOfdBl{(mrN<-#&S=kD>%xUH_&4h5gC4?qA80#^cDn1I0r$h ztwD#%41JuARl#(p*OkKs zdB+q=?Djv59?LV1xyz4Z=BQIvjhgtwG9@<<^P}o<`}B(bQeM*SM*Z`Wq$?p27!bYAJG9Ih8b7 zlm{y*3fSkmw6C!1*YxmwdB-Zy8E?;%AhT??3 zLF{|HN|rG4)>62v-6BquT$aO_*du;#KqtG{v1-hEHrNor~sqa9ac zO)_U7QM)!)@yGY5P65>{njsSkMv82&)zK(gcM~B-wPl7MV(zumRlnuWAw>o1Z?j|h z2*t6oVQ2RoN9}&&0gP`E_%eYuW@(NZx0`(zufm|UyP#uHtIyk5BrGueC74CeY0{pY zI`(OcC#hiaeO#Jn3n3iNb!vr1&es7(WHFUMUQ~{eEL0ze9ySH^Wh9@8{ z8j8d{TLR?}A9ZXgu&vnucS znD7GMCd*b>wQp}Plyj!Y%I`<{fQNcU8drgX&3#Byn>?Bl#jUXP_R6JwvA2OwWa!F{ z>~6*)5#0WeVwQO{Azv>HWwfu4uX1VvpRCc9JppA4kp~g9P-HHRx%?J#PCFftG70_u zl8b22C5VXT)c<0ouz!d>v$>Aq;v)3xDQ;kMGx4BH+&`+Uzbavnlap}tZ4#i;9aNK2 zKKJv-pxrLlcTY;qs^l!dX;QSCV~R2UsIf&s&t)Hp6ik_H9)*8anl}671xEZ z7p=`lZ6uWk4g7}obxLp#iIZ{DJ&yu1zZiS|qDiqJY=unf6?|>gsr(Q2=P!tpUduy6 z2OH0{xq>0&GMJ}QbW|qt0gXRB;*DjpM5lTlFU1jVh-r#~Zr=(ChFmBD7K~H}(RGbK zx$#t|$Si?8%qBA>odAQrBn;xM*H|4DBK z3iehi=-qY+^-7wPD#KTBR&$e?yx^?9q+uX|vpQwM{2MQdR{&3Rx~J(Gy@&{`7<DMPe?F>fP`|-slI9AFn-18pE`>*4o4tRZ0z0z_ ziLi*M|1t2vlKJ`@c{$nE73g}^B1cWW`l}@X9=!_vFBD&o75fDRgTP>ni>f?kb1_Au-DPmW;ksglQm6b%)fd)tGYho^BwMQZ`KeH3FB zk*=GZ$H9$BFnq3BX+F38BBPLC??dj(6uzaZUa{qY)N*c!%%9xm>9j^S9Pr&e7f7zg z?&a^EBm=bQ)OKSHx&kUtYqQ7a${-n%0~_E*1(V2S;tomM6$OFHQui=3`N#4ZFAK)j z_|^5=r*SD%={pR0f^^(rXj6V5!6}@511`RBp-5WL~#=Nl6+XZZ<{{V(ZN z@;}T*4#EPHFBIbrZ~Th`f%<8%Na_banYhE59eKg%y5GYV9U2M(PNw}wH$lOG=}h>% zITn`n%hi<+pquT_?qtZ z`-4FOZY3psh2T=0Tc{2EQ$J(XRHDG+s#{dA1h)>4M`H7!NN{~g)ljj_+w%d_#F1)r zblrnx-5))9I(Ci*QPf`HFG>`hk5V@jeD#d1>9DJ`todJIuw{Kt6Fw=*Lk0}dJU3TO zNKH{D6s0T``)jocqPD#-3O+rQ1m0aQqMsjLLu~htP?JArS4Xmr57eQbv)_ z+bPSP;y8Tz%qX=}@fR@wsOm53_70RL%$vG7c#^N-OO7t$9?k6xO|hgaT^l&0>DHKH8vAczv>}3aVCK zd`qG_i7=Otx`YB_F9s1};!)kVH=oK;2>)!Q`^NufWYr_=%o@-^p#7p})7`n#)mn93 zemabIlXC3mX1J@fn!tU;9t6Pq@KZepvkNMOf-yG?*)&Tv5x0}N@COcU!fU5-zJtqf z->F?4ge2t0(V4DRdY3uJTKt=o6d>VC`6(rk-8O$~)O;)1V@iC6!o4*@#uympDcsxq z3riI4ZU2GERgBxMRrlqmW}HXtRX`4pI;-AP~^1VO&<=RA7PD-3*WWG=P|k|cx#e=$Q#yR5m#2T z*+P3(x`?(%Y7AGdW{%;sR2`&w!Frb5oXC0FxPY6(kd@dSK3z{w2%}Mb$Cy$%Tr_Zu zCJo}1IGw}rcIqQL)?d5ALPMf`X30rGOy<|kB+?^%77mPcFKY3TB$R%H!-hS)_eiKX2MD+L+<=#!F# z;(iCzqRe-#Khz_R2YTEpuE`W4My3@7nX05gF`QhhIdO%VQ21804|xoXQySWGBMLIO zx5;HMWab|asL#BVMa4MpQrqqjNSJihK^3`(WR+N(^)yJ>_kJGI6NmyHc4X&QyR)>n zb9fF*N~S;IR0(fZ#0gItXsqm&XsBqm&8j13j~A8-zg{b;2!FWMnUG5Jl0HvU)ULxU z3gn{_1^L9c>>_D!7hGk5(WwK&``ju zGTuU!yzB(?GEJ2Pnhdp_?X9+?=fA(A7vwFdw5ug5EeZZMdY?ou^%Wl5O_sOGg)`{e z=lc~MLglfGYOi`1q+lYN(EOQ}6G7#yi{`)qDw%>n)ny73pNNq(a@f_!NXVvAmeBI> zt?k`tD9p3L&4&_Ysf)mdf%jWVf*mg&CG9?>6&yI!058f>XJ&2>OBV z%!zt6yejkdTNMa)Yjoq7#NYjaRl_u*l2ms^CH$>mOzb*s;=_r+r4_nBa(2*=W@m3J z-MOoFRnZ~K?IH1fyk}P}#^<0YHo9J$u5}*^z)()57&?`;3!7=AuS!tByg=+`jLOj zr1B$ylGegrPKuD!F@v*d-XA&k5X}YSt0~E>ItOgzKayE_4%jW#lY0dzLcmvboQ?DT zi2Y+R5xS^cKwg<7s3gesj^D6&?4G{vUj9?VNZ!WBU+pc7eMKIkw*1S`)a3rCpd~fi z!iO&m`}9*9Yl-5H7LwcGW}?3^$f8g(DWV`U$)F4~DxehCGYVdxW`R%1$C;{CesRloObxj86 z>_1$W^+)aHXTX#5Nr2|^ClhBqD0CAiz0c@otaLmg( zcOB8lOGt7h(v|MOBjL>_ zyB875D}o^C_8X+Fh({8SDpG|!ERv1&3oC+h`?ytKh*WIlQO&?-B6}fNK5<-4uY1C0 zgNQhelmQc`q2Bh_W;HZi*;J8Q_*oc|mnS|W?1h`S%)4_g3zY0fA6}G`sCT@zQdm%b zxXe*LKcaaP%o!qjsi!f*Vw@-QmizA_c?mXaqfl-LdZ(AAVMDpK=%HL)SMrX}QUorH z&yFE_wYpmX3<99m0@Tlg1bc_G?|hkza=cE|))fel-F;9y~fKqiU_JH#>ikt1~1{A^)x0V{oyp_f!FYI(7gCG zWUvoERd~nyDByvY@ww@bq(4ExFM+;Z>0w&r0EqEQNB-WE;}rJhH$#~7RClv5Ia|*b zdP#sXTplBB*>!$^G7BK_Z>Q~macbTdRYab;P~uZInkb}nE>h)W33Q4Py`2( z;6M``@PY#wAh;<6+eM|vKP(jcKP+VWKR8REUe_o99vo|+USBs79hmw7J`eD5fUg65 z7~snQFAwN{6ERO`ZtmvVFL6Cs=SiBM$ZaLYy}wYI4WsB_^SwO42%l)Q@W%;1o+?Nu z4qRGu&6Di;B)8RD$7WBy{U*%hX*DkA%w$SUgWd(;qH&2bu7Q+pVj*6Uhi>72J+O5+qRYQ1c zUahHl)bfrl5!!4sEma4@%MRiSs82mA_8S)LxrMOq8^vsvb+~d0P_I^sDYc8C1>{~@ zEJdRW=6&dn<#$IbD)tkAVf|#LXf1XvTl2O8Q28O*ETn+{j+hWA5`NkT6`%0_6E1WPJi_4sW-5{rXPGP2X^|w z7hK?%09nm7->nw86$GPizXKa`tZg?{VDp`Hp;&iR>+$!36(?6K^^>{HjPZ^x?0{X} zyK@W6JfH|OYs<&S=#C2ja||$Go0?<$e{7tc>+0l|cy|t0>Vb`C9dNHsVW!e2Hx7ls z7RwsgVgmNwX0t8-f#UxSDgOh3-8`Ps>+y|4AbY>XGS0t{b-Uzc@%UIC1l)Vu@`@z* z-v3{SJao2ylcGDq|J^h#f*%a<-k>F=kVqhN6FUHd>jTv|$ww``gt)W(T_@P-WeYZ* zyse?aOIsXb1wjk>mQ5zAz{|N4Mp;n9VEAJXW5XgjyStTQl;*YzJ#r|_pCS~GRdyP- zq334rrIZ;ZP=oVYm}i(R_xwW#E9MUQtd^72Hy_Py4Aeg4P_=JL_l6C&w7MS7yhq5v zWr0ssY%ePAH+9@7TsL1jl>}c@EChAc>xs`cI;9%OmQ-S`*R$#&4=;8lgJ!9kbK#5O z)teu3iIgVA^w8Q`t3_p?>;z;G?RaG%uR=4|eA{9}vMA6WergT9RDufMnoCbXIE%@k z?FD9z7o_4cSbl82JR0W}G*90Q^omQxJyD8&+ftejL5GY8pN9MAl#j{UVXHYay=ar4mdbErO;!9ViOlYRG~~>zYi`aZRA>_htcufRe&RKj~;|p#u7R z_q>EDFg7IJ0Hegsku;RsF(`^6LLzy&OjU@<`o^=BqcWfhW`@kG^?klu3`1nVw{0Q-cNLR)hz(91wxNc-BKFT}Z>^BJkkyrgJL*B$>?L!y_)L>l}P21|~_dX@+24eH53RaNox{vr|VuU+G7Wc<%6GdEz^MgnwJjrk6ojQ}rkbtgBHDogQhs4!dIT^_85wc#@ zojT*=9;l6bbCdV+d>pThicG#Kw(&B>0NOlX)DXRjK@S~)Wz2W67(&CQ zQ=X(CXg8|jKT^FWufB|`F0|v-H~GG9*sniMyL{aq20r?$&gDh+Q9~fWO#6Q$sId~Ef@Xh1`Dw<)`&WT4@x$*q zL~Y)@1*^I)=#;aLmiL%;3vV3R)IZ9d|B&;9#x>la_CwfZBb%sh%Y>=Dn_V5b;i(mndePsbIVE+{U4*Tlw_*hNSs4Eop7N8ZK2WtNK!j zB(AP*kW2M`FNR-G*3LFUIx~6<&%%RFv6;2J+&dOOhjWP<`rrhrRwr51EB!>d;1sIX z9EmrhnHsKY+*rCsL60?+I+FJr?$<#d#nd>m_dgF)XmMnB5cE!AARBl4HEaj<4dd`> z^)d2vJzex{?jU89p)F{2e7fvGTR`qoUfh7QKZrMM{mGYv8{9yZI`tWSCy^%f&{X@# z{JavIawmx<@jYwr8b(<>44;+~LusG#(uR+NE$ykRHJ{q&-~lShd{*s~`wgE3%-$W0 zFAS<3PnSIdN+_5O1H61gY+u(6ESEahZX-I9 z<#6Rgz4?mARRHTk^ZxzU&e0%m@4)iM?X_?svlbRtAyfxaJUls{V;a9P^3KxkuFb&m zFXv~hf^!x>@0tnlq}l7$P_G$*1r)XnlpB)C$oj7u?;%z(I6{}ysR*mv$o-C*2km@2 zs}!O_yB5HE13rr=-|kF7Pf3 zk-@8R@cM3C2OOY+0~sIyMxE3@gjqgtb&3givQq6;Y`>?_&UltGz0YX73X+-ZtU}O4cV0Uac_+Ru>%yrsttvLvZ}m6X1kE z#>0|{+Uy`EHcSzSfqUeuvI0s4 zOiSslQ@@?oPSO+Az1^jc17S|z7oIch!A$@B32~Z^Ed`JvelX|%l88SEPS>CXt0|Dk ze^w8KE6U)R(PdwU_az4BXIw}}p}O(o8G{L!M8sox0q%T-XukwR)8>vW@!yOqYrLdg zCe9qaddf*yct7ZhM-aolVJYsmzZL&o^W*X^QpY@bX(uIMwJ?`_LjZG{ywZk^CWkM6 z&*nQZl-{<%?U9U60CgP0PaegSLowC9h?vKR$X-zY;E3g^TB;OYJBt?_X4%N=U=7%vf`zOJ>@B zRzbg5*G=F32nw(qRqoM=3gEsvmH)`Q?V;?^&XfOyoE7zsZ`*^Vxfd)L)?&fNyjHyW z{2JfIuS3R$b$dBSBIY_mcBoD^Vf zkt7pf7M#|<2b=W;m2s59KJE&NmZNzTLnW1yh?ZxW6@GR#P?z&+(K{6F6z)YLA*>8e z66Mpzs*Coir`wnN&^g%M55eAtjpdV0M@t7wtN%j}g>O(mzy0cWF7UAcW`_B_cm2gp+4R!4RX#_Sgn`i53}20?QkGy+UnYKo9{0 zV^AL%Jb6hbiy&`~0%G3R{OZ6pU@4_|o|KtBLGCPvF0a~S5y$4DEw_UF87O%J=n?)r;sn9PD|9$bkesB4TL?VWFiRK|mM_xr0 z#K@V4+~hvgciS?8pC;5w{L!pyFo=*d<)kQl0_qK`4G54k>0Ky%WL8ia7Y)j45WWWo zh_l_+^Tqo=&d>_R`!^|F`$m5Ug^=-Wwm4-GiKDB#sGyS44PalvXPk58i}DU;2X>$n z>f0zEvdNNOE>e?s3OK50$Pfk(mT?url11?n^Jj}Q6>3=1&efY>RYha0PTas&MHl*u zq0Uevp33?JOn$kg_z`HDLR7pxp{J1ir?nc?MVT`nE_G$VD-HR79&_Zph&uL>V-@KIaH*G7igtA^Kk^Ey}3b z1(hQYuu@=nl?{fHV7T=cN{EIadPT|-d#7hj^%LZOWu$|}E-XO&MnzW1g?$-{R{YW0s5>MkhH;cZFXyQoU*Kz$q0Ia-${~9@$DY(hvc$X2+=%eA_a^$+8B;!@6-9e&8@)uNUKc5WrneEQbGxt?>0;Dl zDmUYK2^u8{Y+Kd)kca(lic5m#X(K6H4-JO?3y6dfip1-cgVQ_)?tEOwO^ENl16(S^ zzHQt1679O!v4tYOoXL>t5@Kg`B=No2-cl5kL;?%3t%AqP_bXfO?WLcNF0C2oAS<+y^D!Z(ICd$%EUKAn?eML2I&6Q{1p z#s!*`X@fH zIL0a-r9On@d#M0!!hS%_pF|b&?2x0rpqBSDST#lJGa}?ngrVq|r=(0vp>@Yn3)Y+? zz1Cc_Nxix+kqBJtq+mDf1ff&ni@#^;ehV-j2y;nz-=}Mu(VcH{J_$>)oKPLM;JlWk zraQePtG#bh{*lzn-B*&C@GvraCh zQBTh6=zBwEcEW7=Qn@!+>*nV5iUwe>Y4*t5GRtvaajZ0x+U&w^Nb#RldT6PJa&*|> z53|uV_4*T9nC>?4fAd5y>EkCv&Lt9VY3ycAuxhSvqblk1rDxLAY(~C7WSfl?Mt!T) z_L*&S9=hXz7~_CVEUr4>RmVxM^fyJROUMA(Ya?$6+orz_p_NnK^^tl0W9c1^YV=1z zqyVS8?Xb>sYxzE*yst#vKgx~7XSo6#1c{K{D|m2}S1VDvTV?tn*;?W2ysQ*>D3_wL z%y@@kspgE!gj@^y-#F~MIwNg2bNvL@`hx;@mfddNxa`3CFQ+BQj~gG7VJYK#Aj0bO z>Iw-aRmGr*x*AcCgr4$W{*)9EOo_n9P;NRilY|iaw4RZP2!=4+YfH$lheS{#-g+Ez zk;z1=qlX8&(<@+MUDvwVg_>y-XK2-EPz9j4q^Ek>_$kUR^H~SDVW9jPJ@Rytb>1wa z?9E=~X6I?zI~Z6o)o19;tWZGj^~~TPr99b?@cZQ0KqBZdhKCV*Jsc4Sv&Cm7F25QR z@WZ$wZj2gf(4)61vkf;x9;5cUm4v9j^UbSCzMI_a%$gk(#9Mb!!~pk<+q&q?JTuxZ z2|XNGHa-i5@hKXdnO_Rj{Gk{8W(dQ>k(otiD2T!CLNb^+tz(3fy+d^Gf@VF^mz7t- zY6^!P>0`oXku(6pg=nD1O1tPh|wV>*XD+2FjJbJHF;Ro zca&BZjklV}7oIZX!Fl&)XHM+Uc1^hBzbXvZT}$2@*e`eea`Poi;4`azo0SzxwJ#KEN?;y_p7 z77{!(Z*T=zax#`Dz}M$qiL8?P1tlZQeW5BZ$}<7Y8Jdmd72*LE^tWg>tBl8Yn-#Gz zJ-m73zUXTOy2=<>=NIRa5Z!b)Q3<(*z=>5eU35t2s@WxR=p}!N?dPmjGd=krgTm_t zJ!-^7CUj^~y9^J_6vEJ-{MQh{PG?$Al+&si?48=t{e_xcumlr5|3? zpD#CqnW-6SY$L57#>XV#k!AD8_lzYv2e9Jpn7^2$N*mx)D5>}UXO}#NiZ*rt3un+6 z3E8c+(T~?)S&*3d_{|u81Da8DR1B)9(>sbcp$DR}LU;>dY5t7$ggl4_jvUSyUB5pb zlKP{s&PyN|wLXnmHzNiTQpr|-2tP0!E8F}T@mHk~&ez)jlY!EP5v1)wED)FL<$P+K z+;FtbU9^_maj8E?q8oSFWM*P9r4!fe)TptaTuJLh_}lDq{$q2-Occ?B>71pAvs7v^ zW$z4h@L{ijib8NnAl5>dd2u#(IkAFq17dM-a-)0M+ZG8qmDu(D%izPS_bLkTYPQP8 zE=NVdjBY-2 zlmvd-xlj>_{PFP;?Kri)7=g|C??_c!Ft_`+eyfbQD{V^cX|ne}6AP}b)Mt8X%_Riw z6IS{!yE#0rY3%i8zIlGJy&_iLY%liRLtH!LEA97EfyTsWU+_?lDiL`xEb!a(#7?9f zhmCRQM@kz7c9Z7xH%Ex=Rl4ft=CU|tr=7@KK|}|4;&&=5A|x4e@a`lOSZ5+4y8Vb> zJT;D9?msDL1M9;_k!WG8n_j<&*8$w@ug}>uojVFjqfU3G%U348tDyVH9xW2dXk#l-Q6sys+NpfVE7WPp2`YIz ze@SRLcWnN%m~#H|Qdsg(R6_%Luk<>8P1rCe-Hca-176Bg?^1zV*!q@KdWz_y2KGV> zYK`fBg=M38^Pa52aI)0KTX&T{l_Aq(pNX`kL^i4GE4tSm4VLAjb)M&wmW|V@Lmgfv zMjVvoVEX-jslom_tgP!}P^!tpQO$R=s8~bC&wVzjYzETK$ALTiid$Z_9Z=sin?S%Lp!+u_Mkq$fC>gL>X~X`%lUC zjzHUKCRm5+kyv0V^MzH<|9(L-kC_#8sN+7II@lRtHb$%jj+loL7cr1OI z2~BN0SO#XX=f#qxwn=&dfVb&yPDV1=2`Cw&`Al}Z=VmPL#DTisR*2fW{qjJ?R(*!K zLFE7;zIK>str(%8v`oRq=*7@|dN-J!;tDGj;)J!_sRR>S3ETp-vKo!9n&{!I3nk$= z$g((c$u0U2+?fOYsDb+>LM#K8aKHWD%1YyhF0J57{66xs9(9T8M!`6Uc0&3eMUuwh zjS8BsZK}JvW21@w!`vIX)L@Q$h6t6n$R*&+HKcu4|F&`XkEL1v7rM}r!0xw^J$ztg zE@sL~#df&L>l&kNHpZ#nUsbKsG2HDM-VQURPuIgr@obM-gb9^fKSa0l#yijsnwx*g zthlV8f(#vUxEMHOqt{`TE+i67EDk9NMI^RlRv;IfY);~^TNr(r!4Cn?fD)3m5tOwo zN0W8ZsrXr@pr^@E$!xUV=+>QCQNf_23ghFd>4jx)<4~e}1`dYGi)2^H-7A)0eLccj zsCBBWI|?ik+16sy@K?)+PgCny8wXO0sc&&PILfh~4KZ%lTk-ZN35^w@8zA-`=0k}f zNL*PsbSnv6TVj5GwbF%i8K~}F^+{Swb8~-Nwy3YS8kz4!g%E$}tW72A!)##0DRk&e5Y9sq?jL>eF?j@ncww7>AQW>Z)18htIQ= zq?EXNbH8y*=x`#EThMH^6s>9O9IegSPr*RmsN1bJy(skBL7vy}cNP`bo-u;BjU6jJzql zsD#7C6U^u+%oz3ipk}qQBbXf%h_(J^qRg^UJ*f)3JO)>`XUTjOjou+l_4RQ_!zeEr zwU^9YlDa#SKqhf`f&Z}@<|b8E?}Yth8)6*qtnP4o&UQHK#j>c)&&n&qx0NrvE^Vu1qQcP|jwtNt`x$bh zvrTVYS8qA^)DZjE0$I!NfhKqkEhKaV-~AdXS7PZi3~f@VGb!y&^iWDUepy3G z5UtPGyNu2DmbO1}%~}`ws!k^kLWX~S$2v7_fGd;2nT}!ErBXUL&gV+we`OUm7zsLT zGC0f$zoz8kMHQpbRjM~Gj_I(Dazp4BeB>B75`R{>5NrYm;l;f^q_C!jTCy&T7fVoG z1YtcZmT~I2Of8~m#HtpjEN#)N?|E300vjK=j20stPUDYezkHAL zGi>BmM?ICPLs*!ubR;ojavM&H1?TF30$f__@^*4pPpmR;K2eXaYV2!;yI+U9v{sL1 zauG>k2cKqzw;17yEnC#T2k*SXqT4qQ51Hqpp%Tr=uA!G*J)nv+{}L^P5vRhO9a)NT zdzI0p^R=!vJA6Qi#h7qdaZ8f=?7knk)YUgL%9zUMBh>N*uQXktgpa0lI8m>HiDTAe z__`$KTXE=@7*S|(TDe5{?723%)Fsf|K8~r ztdAbZP9>DXS{#QYY;!L7fTM(Y{}wZjlT zzSo-^NiPo`7d;dx18*<>Q;Zs}OvIUuKvAbRF6nPj*aJ25HXsYfMQZhJH{P=rVJ@eBeC3N^UGa)b(x2^%Pd7B4RqM7}0D{i5Dr+HX+~;1%`CAmEBn z@L5{!F?ex)_KDI+GyrdQcP$^mE0yG2OBz{%HO>IfQa1dm6wR>m$TAWyAbBd13beNT z5nPbW+FqT7d)6)Quu~^``Yl&#ADanSkru4gH1P z%RIVj~=3tkhM4f4Sk=I4-~DNNdH*~Zvijht-$uaJn}aiZsBBEp5Qh(! z(%zn1MF*E+8hCk4Xq`9RZCJT?P@=iVG|$SDi;eClQ`5aoU#ob)#@MGnb?E+Lhil$= zk^LpR&00A^S*&Rv^YMkrD=$Akzx{-!zPY81;7BS?&O(HhSii-3yUM-7b~yMH*+NC* zN(o`^^i9^RjL^>fg`%f>2TJxi8RuC!GA~j6WE_O|4M2+=h1*{{$(KyeNei+XusYqP z9Y#CJWthx(2P|T!VSy~=np#M?N~C9~GyiCRl5^g;na)0X>ZQn6>Z@Y~|H3ZEmyFS@ zE{a~HqS3>j90H<9V|IrD!(pHceVaVq{!TR7IuR0;d!s^NY(zRB%7`bC>?8bc4`&Cu z`0l6pB=-@oKIwon6jL;7hlw>@8?$CJ>+Q@QH`jv(7p$*W0AzbH~dBm+{5^+ZujJc;Tw zJ3yODGIWbahm|ezQM@w&F`VTx&p^E&0-|!iC}}P*MjO9l4kwk_cNq|mzI6*H{c=7- zDtqK+4Sr!MVq38xZR$_ak1*<24v6~VSywluyoCM${svlCSG|Kv!C6y`Gprm4h{Lni z0Cu)C!eJFh}%LP&$k&vU&1YeKakXu?*#F$lroZ?Vi+_~Atnx3Fcd zqEOhEadP{I%Y;5}xtHMc*w}+E291p|uYix1g#5@(N*v6LXS<3-1e z!j4BAOpq6UF=_w7`8!FWv_JQW(Vxa|^k@)1ZlC95RH)99AE?bj-TldJV^Om_rhB7Z z5*;nA?M;|86D&jR*Hy0$7uRNrA6q}eTxgSGBERfBl-WE-cYYP{eSe4NXp2tOxjVCY zC0@|UgVt~VO4AfqUR7j#mhj5HrM}$yUE1x9*0%kolE9i-(n?hgHRR*f(oj|kbo|0h zkqWx9eZTHY4{mFGM~Cm#@yhll<0DK%i>2HNaZc)CYYOp71p(Mtfd;Hp8zzy`Z7lhu zcq3_uWP(zw8tPy$H=58Dp#zykqoqdk}#iJ*wS`s!rli(-W zb>hjD3Ddz+3e)kfsfb;XUXOk!iR|jotxMX;p>Rg;<9OdsGCdWH;@t$R*dLcJ)QB^O zLv)hA45Du>-f^66S&+Fl*pazHm+9{2`4nM4=R0Mn`o}s%+9Kx0073d*XUw%M;=V z=TYs^^g@IV;q3&97_9d*nq-l!0m6xU4t>j*q>nvW3@>R8K6};aXh1oOb>M;9PVST; zi6%-+aU|Q5%EP=hviW*}Npv$UyVnNMgKCB)Y5eV5xD>G>#uRa<$j2yDQts^%1rd5K zW@*)E1)g@_+ojTmTc!LCW2?y%y~c2o+{QwOTg?i$^j_7RERe9AB*i3Me~{reU8^CT zy8ccZ8@%UX$aIa{H{xN)KM1muEF~4Da}TPd8@}BW{~Kq=;&x60AJkhOi#1G;ocKM+ zF5EFQpVN=8QQb-J+Aj06P_T^A_A58+&U!I@^hRB2W*AK|%Qm|1ar1b6;nLYk!R><0 zGA2E6!8ZXOeFpgh>dp2dzi^pYh5w^djdI&!-2nv>P;>eGU1kT(ReNR!Psx!NY|>48 zw6sZp_iEbA_VxH!N#Y{wM1ORp-e@+FDGCE(Cwc3{|py?@w4s7LsUPs@0lkA?X>UH-JvYwRWH z+tlG!3T0mFzdF;n!*0Hn!gPHZpXp>kckAm7-*9(P;!RuZ@ICQG!{~!6Z3gTww7_vdq?;f-S*`yx3sKL?vBYgJI*3Th}S#=NsOJsyhvbm^ifofsx*~6MSxZ*$79(MLw5l zq#I#19;IvO_wczhWHBClfMTxN@MDCPMv67;(X|APxi_k=?zxCysziZ^t0u9E(kTPVMjP>=aCj|Gap&Y z%t9WfYSZa%<)+;06K|{5#>oj4L?12IzC28|BmXJz!adEnr59&Ym0lymd@MSNp7059 ziTc*Kb3;FKio5E1;V+k9##^NB+B-%^7bz%)Q*8; zdvXw&^t5}spHDM`f%RBB;?!A%;_y1Yuq7YcNTS?=E;q#BIOb|>8UE2?sZnTAz~S|M zfekdHw+a)mcDOwBL`{!9#Ocdj0nqMP4oQNNvk!G#m<+e~Kj2@MW8%rQ)C_LHS6a7a zvkQKns1II5fx@Zqv73M?eihPU{#>P0rb3ge|G3yPe%Cpef=V!Bu-I zTlcbBWYV4f7mCaF)OW%Ek{)_7B{iX{x(==;L??lB$N5z|x5jm--592C@e>m)ry!V^7STvs(sCae!dY&WnxA4cMXVbn+O7@rguf zARM}CuPqqZeC60`cv5oBn#5~)@swOWC6^!>bWa8{F)QX*jj=Du!jIMwL9mMU&=8TWq2+-DJ*K$oZn?NPFxjSBKtA<&&Hx=V}BT#vDkhMB^!G zW>XI(lWQHeB`Y$q>sZmK*n+n~;K&jrt57#F6l%khe zcqt0^AA4()%IbGzN6e6)?c#kBhqwdgUu*Qj15r*xNGp%sQk5@1*Mkd*j)Bw7@GnzQ zng(ZLTgR#Hen#V0zqN477>kO!tH`cjh{k_DyHsl&{<#eM)oXm`I>nqAB;`&v6rySSe~to z$V+yui!E}HW4o~|lFef&&!r=tT-0BxRoWhi{@_we#cuAS)>=|Fb|md&yjon=VP(FP zb-j)1RU&jy<3^M3m+H+Et?Hr-FG_1-Is4}$h1>kKb0XWPwWX-($QCsZ`YV^P2)5}m z=#eIzANOg3I^9t$4GSk!A3ilQ^RX;Oz3b38h2lY^Gz)Mj5`6esYmfdtlSpJJY3Egm z&<0yF*(lo_mw8PM*IAm&tnxML;!eZnby$nmpgVacO*?j1u&s}c$aP zfK)?r!-jEv1^aS`P!r!wJ+(a#7Pb`Em``jr<*>$GJ0$Z6pD(=V>+)^tTO@~R@60zk za6T28^(YTQf?oLdeh|3TT_+KlOrl`TW0RGpK$R#hVa+$fcD6I@B243|B7$fFifHZE z=&FXDs|Pd-b1Zx6blEkK*UD5wTSM#8HA@1?rmKnL<*lwO{qtVQa7Yzy z@zG_eUev-2AODepN?f?h!1C8qq zyPxw>!I(aMjRoU$F9s_}^eE%Yqfux6N%q2B-qB?2i-Tc6FMr-E`Uv z1Wwvzq7g|o*Ma77Y<4N!Fu9J$5i8U~pHke_j2(_q_o)wluwS;OvbPK}%j){bC=4vc zl60K+@RRK}w3op^t$33m%)F!&M01u$+~KDd%)hL}7!}5Xl=k9^#W7-*`PXE`eX^E9 z@VKOi`{5!>)p?St+BJhB`3ufS@(py-rRFE<)kchP6Dotq5*XVz9wS&p+xkFBPqiM+ zO_utL++QiBHfV!1*PBfHHqYPfISH)CnPlRLVwZ)4Q6F)yX|v8ydsbGb~qm*zo7NB zrYaLWGVuf(#_JvzmgK`@7G(U{qZ(Lvg&~w+_cih%1uV3RdyC0puc!w}@%lTc5a7-psS)7bwyiS1fIAbw zzF>~5P4LZaLm@pfd1JuK_+bwxQ(C4!!?pnHnVf1LWtU658R0 z4-LZA=_3uoZKI3$^C^s-XUkI~wo=376TdS@OXuN4hJ$UCzn9KiiU_i>Kw}2)zaMJD z3h=614YZ0&Ok|$wkb524YWwId(*Nb^wX(mq`J=&Kri#Dz?&lji;}p1ITaqPKeQ)HT zQK-GNSoJTwER016MePp_*n)X~;ITjgZaT~RBleW^{gq%V=urR^02l=qR@jM5&$)?= zt38T5B_<&0m^CDoH@)3b&cnEgNqTSrH?2WiG9}`(urL-P+!Dx#^agL>^R+ZsPr}Sm zWh0iWf!mM^DZW{5Btc!mh|dqBv=#%|d@e{_WzdhTTHY?s$%@og@CBReRlo3F$o6V0 z0!zQ7&@c1C3q`z&RO$;E>IQKx^HdkI+o!3urW0-pfd{t)JbkU{IYg1^ghl(1TScvp z3VN26bc=KJBDD-$cR9nJ0Z>H^dz~u5hHu!or1O%9RiO-sM=ta`vI&kAp$yvPOE4{W5R%E6mQt4^42-SY~rS@ad~%yoy4smGt)C zG9jC~%j=Nle*=*r-|rLlI!C|+S0^1v1f5E48gf1b-B3>nQ}amwb>DPA5^xBhNM?BW za%EpSDCY;Va(2PQ?U7vicsol5T{eMINdvdzTHq zN(q0T+djdPzDoXzLlZM9=P^w618wx5Fv<3B?2;WS86nu!9TS#cV;^m6j}4s;`KFX8 zmw#CWu~l8yTWmn8{5-lXPt?&pY}Jp5kPS~>l(ZS~9k#8P1q+3BTsOmUsK4;A4Rr75 z;*Kn=s2Cf~YSJ?e^f^gb2$E1qO0jn6DBY{jlH^G`h-a3);^vv!^G@Omt)rG|(N;S+ zBdVjHV*}Rhbx3nRnI=I)<=ldUdP#L&X=W4sp1n@Z&`Evs{l}q$cY`h3JEp-RaoqP# zc01L3D@3lIO~bN z`0Eh&In`piJ0jem2X=0^(9;t3`lQVjWc)8t9`S_XyAhRDNwMyWC#2 z+-BZS?C`)TW@xG6i+g?407I@RZ|(iQ!_a5n>795%=%O(?orJw~&J6Ym74xTQ5qC?03Kp#MbXJdtWIat9l%na5jdYePb$TN-a! zYXVtBRHXJQtghT}7Y@%mmJVxboK6x<9-4E9&YM}|MxHW%G#MB1p+C%Pq^wpt-VL)` zE(h$x5x1H;o0Gwwm@D=>{c0vb2@WMgcXi9jYsIBfnDdrPUmv`abcD3yobJ!7>A^dV zZ}Pzd6{n0(5^lyB4$g1;v+2h|nt8{FOr1JPw<-=WH2FBaR&;lSzm|rizD|YtSbl&Z z$zTlLjVYBR)U*;*yEVeg zIGu8uv_GOc%}5Hd^LxeDL;DZS(=$7i`)6$meI0rU^zT)+*D6-G+?-B0vfT@YoQSSl z8$-M|a*y`~Q=OaW%UawC3c|oZOx2F2??}n5x-W;pmGZ}^5Lf>9^v~V;R zyIk|zhD75YUf}Ah-z^~*Kc+L|imcFc+t3HM=s5Oj$2zu{4{OIdx9pZS_17u8ZSvWu z%wElru-q3+tPkl@_oJ%eYVX+#9;g54nWbM=YSvbE_K1$MDX3VAITVR{oLs)S;yqSe z|2eHTOuy&PTXYkg^t+xyj$rl8ypEoQc%hyEJE?N9*b79qJtkqHOSk1nv}FMU@vny& ztfc;za`+g{c5;Lmx1R)(J+{t|d53HKiRm~Q$F^yl|waXyhnMih1g6ya+%X|B1t%2JndFD{A6 zBy$T3(zD(7WSINKlO^#3N}qFf%OQ}u6|uK>=}KYFls~6GUf5yxc)fZ{6v@rM_N-{* zoDLWr@QQsqsPFfG-=m8YWjw+FujBLd=?!LN`bObld8fjHre98V1)P{kA4>S3Gybc% zHfBz0LX%I*&I3ORt)qb8H4tzCff*3g;Kq^g9)9pyw-IrD@PDCR}>DyZ$hz z^&vqf7}D#2^q%!qWL8agLV6VukO`#7Xw7N!Dgn_22oylD0b=Wk=mrEDAVdH`Rt1Rf zfWQKT3Ls3Lh#o-T0m9^|j;c&M^Fzk`Im4K5KBCNhvQ(k4JbBDGhq06Dl}fT2&^%lI zY?Vq6p16mxIZC~^WlF%5b`5)epFgaaUk0YUww z&<2DZAie_v=}GZKfWFFW1;jq+ykO9IMNhq13y48LAUzRJ{ap%(;wJ?-07XwnBo`3D zPl_kv>6oPg!tzN04q}lBAYuU_`J{Lvi~tb|2E61=uMpK!wS|gdI4d)eZ9t^g2 zERr&c^BE34qvA`3XYcZautQ^?t1v3=D|L!f$-%zMyTA&K9aLhp*T)|9RpEqJU4Nzi z#o>SHm}8G-sc;5@7|kyZ|2wCq63NT}d$fx>^@|E8a>*wg)pgp^E)DfB|4jks7na)8 zE__YdbriaSPXX~toWes?saacCqvNIC$+{^yHlws?M^ZZce21H3&z8D^NayQ-O=3{Y8OUG}P9YfJ6FbgOLMRR*eSqJ}K{B`7c zxN}-D{&!O-u@>1SAhQ87cH!gNkw_jJmQ6r4O|gSr`C)#HH5$qD1yJiKO>#?EGT6J+_jdw^x0-BIht4^YJ<(v+#K zOg1-Qo9MF4{xb6cxg-cj6_c)%TvPqOE8vu2txqK<(2~UrqbmsNji35pG-Q!owZ%Fy zZ=Y;#&GjFO)dujjWbuJ4v^QQ!)M$t*r)rCu%V=pYr|RfpV&3`I+?vOWwLXoXV5vNs zr9Msa?_7t>%(_K#6qH+na<=-kc7i2Yy)f_-r?-Ae&FJUFOk$(tXd-7E8@a4WSdfy2 z(NE>s|D9U|#QQ+Z9mkdrV*k}0RnRbtkG>iq${=7vrA4dvN+J8G*#(7to(AOR1khp3>sHyl*m_fLzNKolHM|4^RA1HpbE=o7US3aF#A zsPum>1p6!sB6mS#+8{v=h;*d33I&l9Ao71KbfC5x292?R=wYD!e{ri0z^8QrpB6OW z44Q2L?dgDe%0csU;M4xk#Y`@sWf0{6B9=kR|JXg}qAsB)%kd)YF9-x(?*O`f8Fami zko7QdJ!HRz@c}BGhAoV*pjwnE`QZ*dlRMz?97Vono;5h`B0NJ`Y;VQry;I_<>Zv zU&n}<+(;+&&t?o+Zu9V_}rb>XYiV9r`FZi&y@QP{s_K*GM_)027j4QPv%cr z@B*g0oX?w12O+;d*d>YURRNp=FeQuY*#T4moFQ2f*n8=z$pMz*5#l)rc>M?%n z)nfu+`rM14`)3Hyxn{xGI_m=|d`V^`Drumx%GVFj8KSJpN9_4E-WJz?@GFGUGHa&-lmfH@30Do*!uUGPV8Q`H;p*gM)mFPts@kbg|;@@0td zb)2DH2P4j&|CenFW`p92)@$bH^M8mtetk0zu(v2eBV6s@s=fe ziGO#2e|L#rz0!*jY_(qUjr?eHNM3L9v2Wk=(p>netL{SEm5#$3s%N2ouMm3uRp$#o zS_2T6V&7$&-DTR|>33dre!J=%zY<)(eXmV@;hU(u3w>G$LKHwq76=gpAwD4F3hVa$ zG8GUg9r~po`L!SU!7jl=FTo2h!GGEFV_r9#4rmv5oo>cfxst72cI(?SO{qZ&G^J3`hQ?yKO``4(@ z#lqJHnDRs|s0^kgcKQ6r(4@YL&z0f#H@x3t6pDS`hq?O&BTrO;>hesY)f8?W z=Ox+`BL_8edi(3ulgR)j(K;W>t@}7su_|FxQ+R=PV$4CO1Kn>yuHn6wA3@We24fe=1rmu100Fh#VP!44VmVClDmb1q?H=RrlVsOj&t{ zO?alAe44*3xhfwEdfN2rT)ZqD|NLw_z&+8);Qf1B;o4B1lSBMB9~ez?>B|&y$1xPw zC0ENk^2ZL8*Ico8uLl1V^IaFk-YE}yQExeH$EBOOjn%a7Xso6zq>R$u--kHoN8F(7 z{>N=(;B)%ef7;r|KL68g+sY-NJNwjdf3L1Lq$q^T){;R}V&gnmm3ybXm1G{PY&G@H zJ&dZ@{F0F2FkLsrLGQe0Rm5ss{XnK-q{()^wc?LPouq(^(Lu#CGQBMJtP7f0w0+Mn zibCr&(*unnIdRd|J57_${`(9t{g~ED_CLT&jy_&qn7`$JW9=GxNh?O3< z^L3D_UazI=p_lM{8e79G@%S_*fL781QjC(jPh%B9Gii-G8DD4GKpHf&(zv7d_0sB4 zFNkh>-uCMY%fq#=FRTvNg0R`HwDg0%p9p-Fxc3&5{(1d^DQK;Xq`y> zEi9VDVJ8+-AF(w0|F0o95zoEz_{=bzFY&DdNHn-_)qY98W~X=u>SXT1V)}UwU4?6u9i235*^^3!Q zmV7s$KJkJteMq<8gQ-m3Sb`6KR-(~<9z8b0%V4VurOM*f+KxmUv%~(`Y3uIe^O74~ z9Ze`zB{Rog+?B~ZGd)A!EJqW>Rq4*2(>nT)Y5Q0r^Dw!Gb3T>bnl#g0y~R&ND2Iw zyKtzO-+Wro?2%)w@X|jU{8O>O8)bYwBVoH-k^fLh`S0&?>0@-%d41de9mcNvJmz!Y~=tJz5P~Gs@A=215L$xtw1V0=oZ2gU;?m#MI{5FFgx@4t-DS%*(SkHjxSrMO zMA}U}vIGA++pFw*Uxgc-ckSw0Ta(cGGKg=}-U;SPY&c1aaEn32r+N)or>r#2+w%)` zb62=BIK(E!cf<+ygt{-2bgf1w_Jm@5_dbp8V2`XVB~3A;ZA*0r%bIPsC&A|XM2%fk zap~P8&HoQ&@kjyVLz13%_ptgHof~4GMLNTu$2=nzi!>(FC5AsTA=6Fggpq#k3hB^!?)uz+ zBJQ_Dz0yyYGZe<4wE>!Mq_A=yM-9PyqU8+H;^JK0&M5SW2EH!o7t$7q-4Q>Jc~46O zP427ye8O0QPot>;N&aos#XH8J@00KJF@mPPMt`*<6BCZw7@SJf{SZkrM*BQQJhh20 zWI(f>HzY|+^>nML;2UYoXa*d4lH>X-Mto$3OaYTRU0q%TX^0~_OGIhMP{>!mUF$88 zO8MCOGoE3{+q$?RTwjS$dJ^xq^>IUbHP)sg7Hd1_dv=H$CZs6{_FG#NHHja|ahMSH zObxL^V5nkgd^lmHyM9A=$aOVBETqC|DLeW~$;@zKY4AShm6mG@4)zzpZoSxSo1T*? z&*&DXhR2O9xfcpLr55$%YR+s8!jl?UDRsU=jCr>DfnVZC#|=60l^$c0H>?D;ifhb) z+R3w6wDKIQO%%VgD;02YNCvTYyQX8* z_@u43dLMj6K9@m4l4o79EabTP z9{Ud%9mFO4_Q9)p)Om2+b%W7eOO}4VeKb5O>y&I(QE^4B{R6$Yo8AqE6kO2> zjh?{^a#-&eo`TU)h~YzQ1tW%d*xF_<;xK{YAcyV;MR7X48-f*bY>%aqM43Ee+iG`| z5=N@Ulv1M3={F`GTZG;@xl@E_>PXl1YE{P34v2#d_xwRUa^ebHNtySEDNtO=Ak)&| zO37S|AdU;}JW83b6(9IgjR;)S14aP{LB>+KT*b)#Br# zFi1Ht=aJ1$1WR}t-&4oTM`O-f!6f7vuMZNkI)%r6miEU&POmjx zvqENg)S(C0kz)?z-c0x3fO=ow#9@5zm5Uu&+cz4Hwtp#niPvJl6_mATtYlJm{$K1WH3XR1E9#BD}O=V;vMoE?*^n|FuV=|MQ}h|AsiT)Fho3irnJ& zJrtuvH}19X!0O2WIWX1wd?lXg5kcic@0GATBZG|TK8rzU7ZhGf4zL|(`8g}2x|aT& zlIebrk+EoTA!PQe7RTZc16GK^iHd%;g(nhmum;DX3reE$(cxY5&uMIX)3v&by;E&s z_^`Ulms1Y(-mAu2_jI3~62$_)shpmZb3~LsFYV^#Zbb?Gf;(kpxEY3H3mp^P+(W0Y z80~by%9uo9tE&k^IRVZii65@#VfCZ4I1&~J@J(&YQ{gF3`ED>0VNS3VWkQbhR$*ro zcF=fE&+7FIQ7}3_I>PPIc(3fD2vLA^7@X(xYkmZ)j;2AMMnSe!}}FVV1|;9A6Y)zah;?RANvUYbF@*yw+~FWB>&N=e-s_z2TWjxi z&W}GhWXeb16xC78HS6iIQYci}R(?qwoL)k^i9D(@u>Xvy)w|}x;)Bos@c7R}tW56F z-?mvMKaOiC7_rN={kCA_W+SRGdp5;hZrc#Qop`x^75L?v{kzv7uea!sCissry=gB# zvJe^cdX3@beNhm#yEU7nxgGCU2Yqw0HBQF>n=>4K48iG2k~+c89+qYKx8zmYffw+% zqz;EGUDtD>H?=o=HV^%nU4<|d*h`^t{E^YVN$V;2rSDj#PDi?a>{aT)1I)VER`o@+ z=9)r7?!5_{7^z38{6{U{m_PJnQQb#;B`n$>18cce_ag+Vp@pK-Fg;q?8 zZyo+Ai!?s=olZka|1Ym)b+okv3RV-&2tx#}Ly8leLLFkDdvFwV)|q>Ew*^u>Yj)>f zNU^cCZL8t?Mz)_TcE z{)i@4+hj;fX%W9z|7hC|uda?xQPc}lp~K)0(4PDgEzDIXbYoDKQFIwv=vY>3+IHA= zzN1`i!cK;|cm8^|)&e8hV683_ps%(9H87l9Jf2KsIaGHXcO3rOASdZhg5rN=D zoVpDKLFhBU$&~Na=(`Hgn0g9D(}yvxb;(%~@|WgWwxrDHeCf?MB5n|(%W6mN5N$4r zyLIr>6xFE!q2YdfyUdvNZ%(Gf)b{&=O*sDP{d+*jLOqP4O6W7qN*h&We?+@>gSgdP z=U+Ab82HD50qvc0QPHYG-Ll%+AmLiRc-G(`d{m9ir99LjG3M2;oSw_H3MrkOzVMVMq1rniDP8 z^R8C3d&WpsgoMFXm#|@ zuPKR)$F7|%a^e^_i@0CEpoiA$Y)doSU0$8KFlkplTSH2g7jWOddBA`Fp1$zr<=bQr z#|ME|9h?^Cxwq&47@2vIcJ|kWON|SYT_5bgr~89l>3e$o%_ z;_I?pXeUcuhYN!sj4}ind?pkNrYjV7z}?m7fZKAJnW2Y#5}?z7>whNWiCIy`&(qx< zzg(rb`4ANWieZ3a%sx{YT3O{7l|>FAv&h&;CY`oi?Q*{(4h~dS1OHrYo#~1-vFHp^ zH1#+&8p}%f+m1tD1(a?BO1pq-0AI4IjEF@w8xkpk7QrHsu#CjzwM=_H`rS|of+V0j zplzS5D&zhVJD46q4PJqooN%ptwvdVT!u|B{TPGHT7iqe&c!sTLQtwT z1cA(-45a-pHq`_9x<<*rosg literal 0 HcmV?d00001 diff --git a/week-0/day-3/my_todo_app/venv/share/python-wheels/ipaddress-0.0.0-py2.py3-none-any.whl b/week-0/day-3/my_todo_app/venv/share/python-wheels/ipaddress-0.0.0-py2.py3-none-any.whl new file mode 100644 index 0000000000000000000000000000000000000000..aa2a948b7174e381ffdb27805917503a08356df4 GIT binary patch literal 17503 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 Spa=s4I}oY?16bJ!!~+1B^%lzj literal 0 HcmV?d00001 diff --git a/week-0/day-3/my_todo_app/venv/share/python-wheels/lockfile-0.12.2-py2.py3-none-any.whl b/week-0/day-3/my_todo_app/venv/share/python-wheels/lockfile-0.12.2-py2.py3-none-any.whl new file mode 100644 index 0000000000000000000000000000000000000000..c91f5425d5af3f889f74599ab46418b6554dade9 GIT binary patch literal 13506 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�y_7OKmjU)V&Z4k|4`-=aTgNCF#&7N`iKf2U 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 N-uZiS4E}TX{{SU*_^1E? literal 0 HcmV?d00001 diff --git a/week-0/day-3/my_todo_app/venv/share/python-wheels/pip-9.0.1-py2.py3-none-any.whl b/week-0/day-3/my_todo_app/venv/share/python-wheels/pip-9.0.1-py2.py3-none-any.whl new file mode 100644 index 0000000000000000000000000000000000000000..0e229b5d71d7597bb2b9500800069958de10499c GIT binary patch literal 159152 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

    &L9{^2IpaR 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

  • *Ure!7cwK@-=01WnqpzeIY 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�IjIR;4`a+OD`XE=BC_$vI~ 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 jdwB2^$PeuSl}rR literal 0 HcmV?d00001 diff --git a/week-0/day-3/my_todo_app/venv/share/python-wheels/progress-1.2-py2.py3-none-any.whl b/week-0/day-3/my_todo_app/venv/share/python-wheels/progress-1.2-py2.py3-none-any.whl new file mode 100644 index 0000000000000000000000000000000000000000..df711803849fccd7438961472d741fadc954bd8e GIT binary patch literal 9606 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 lm#Y64K=AoU!~aeHuNh^})v4-E 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

    *T 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%0ACv3zp0Ry$ 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 p=U&hb}yZ--KX*!QnQ;zgLh`9G~)k{twov%YFa= literal 0 HcmV?d00001 diff --git a/week-0/day-3/my_todo_app/venv/share/python-wheels/six-1.11.0-py2.py3-none-any.whl b/week-0/day-3/my_todo_app/venv/share/python-wheels/six-1.11.0-py2.py3-none-any.whl new file mode 100644 index 0000000000000000000000000000000000000000..40c26d83dbc95c3fe3738298a2b67eb07343ac02 GIT binary patch literal 10720 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 WWuX4!?gL={oZx>dGD`iQr~d=Z!Mh6p literal 0 HcmV?d00001 diff --git a/week-0/day-3/my_todo_app/venv/share/python-wheels/urllib3-1.22-py2.py3-none-any.whl b/week-0/day-3/my_todo_app/venv/share/python-wheels/urllib3-1.22-py2.py3-none-any.whl new file mode 100644 index 0000000000000000000000000000000000000000..62fca28e15e00b19c91293eec7edc1324f0102fe GIT binary patch literal 124700 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⚩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

    SF3*%0+D3jiw!Rd8_ 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 E0FJf?DgXcg literal 0 HcmV?d00001 diff --git a/week-0/day-3/my_todo_app/venv/share/python-wheels/webencodings-0.5-py2.py3-none-any.whl b/week-0/day-3/my_todo_app/venv/share/python-wheels/webencodings-0.5-py2.py3-none-any.whl new file mode 100644 index 0000000000000000000000000000000000000000..9bbaed0c4f2e61af4b2bd830b59b96d98a2557b1 GIT binary patch literal 11646 zcma)?bx>Sgm+l*P_YQ&J8XSVVySr-|m&V;8Sa5fD3l=Ou(BST_!5xAP-%QQC^YY#M z-g{2%>QnoVU++3+?X}l>>QR(|g2n~_0Puhf=|Fj0u%DP1BmjU04FJ%-&bpczo7tM! znSyLBoIWx!urru~oWLJJw&r$>qGBo{%2JA|QVQ}6j!s}3l@<9VChU$|m5f6nObEzY zTUkhsMrm0QON``*LqbfX{%Gsa@z(Y}eLID^F@~Bl`Z8>u>-*=?^P1?)`re;(jYI5< zjY1ji-a(o!+~_`WwvGq~K1|E?Q7o3$D}24tr5z709c>TN23Zr-qM&yN@6Kx@98%O~ zkQ4}D)pw=`IU5QuZLUk7wGhvvtIW31OC2n|g0m-_u0PBKT5~0csK+8T^=be#nT z!G;U%53PyyFDP8vQFHhrc)7VA#NgvqOiip9Qi1(xe3TU7=LS0$y3IXEv&%8-JEqE* zodkizNdpWJTM1t+6ivx8K0~A-lE;4NqC%=diK<%O1j#nsv6)4)(knsoJUqGBiqeS(_Ux+hWDg*kd6>CAWY1@83!9Oy8fr2K&Jip5{$4l>RZ^cjd zQxV@gY$+cC&(+kdd1>{rvw!OT0@&)wH_aJT*(J?wD$AVCWEz`3|3s^>S@WmG5en&2 z$(rJk-iMTaFKAJln`V`U+5jmLJy7fx=IrNfjE?cCH?qk4^ax7$GIr|ZTxei

    Not Found:Err_404

    diff --git a/week-0/day-3/my_todo_app/todo_app/templates/todo_view.html b/week-0/day-3/my_todo_app/todo_app/templates/todo_view.html new file mode 100644 index 00000000..3dcc2383 --- /dev/null +++ b/week-0/day-3/my_todo_app/todo_app/templates/todo_view.html @@ -0,0 +1,6 @@ +List of todos:
    +{% for todo in todos %} +{{todo}}
    +{% endfor %} + +--LIST ENDS HERE-- diff --git a/week-0/day-3/my_todo_app/venvironment/bin/activate b/week-0/day-3/my_todo_app/venvironment/bin/activate new file mode 100644 index 00000000..a0affed4 --- /dev/null +++ b/week-0/day-3/my_todo_app/venvironment/bin/activate @@ -0,0 +1,76 @@ +# This file must be used with "source bin/activate" *from bash* +# you cannot run it directly + +deactivate () { + # reset old environment variables + if [ -n "${_OLD_VIRTUAL_PATH:-}" ] ; then + PATH="${_OLD_VIRTUAL_PATH:-}" + export PATH + unset _OLD_VIRTUAL_PATH + fi + if [ -n "${_OLD_VIRTUAL_PYTHONHOME:-}" ] ; then + PYTHONHOME="${_OLD_VIRTUAL_PYTHONHOME:-}" + export PYTHONHOME + unset _OLD_VIRTUAL_PYTHONHOME + fi + + # This should detect bash and zsh, which have a hash command that must + # be called to get it to forget past commands. Without forgetting + # past commands the $PATH changes we made may not be respected + if [ -n "${BASH:-}" -o -n "${ZSH_VERSION:-}" ] ; then + hash -r + fi + + if [ -n "${_OLD_VIRTUAL_PS1:-}" ] ; then + PS1="${_OLD_VIRTUAL_PS1:-}" + export PS1 + unset _OLD_VIRTUAL_PS1 + fi + + unset VIRTUAL_ENV + if [ ! "$1" = "nondestructive" ] ; then + # Self destruct! + unset -f deactivate + fi +} + +# unset irrelevant variables +deactivate nondestructive + +VIRTUAL_ENV="/home/piyush-pc/Documents/homework_day3/academy-hackathon/week-0/day-3/my_todo_app/venvironment" +export VIRTUAL_ENV + +_OLD_VIRTUAL_PATH="$PATH" +PATH="$VIRTUAL_ENV/bin:$PATH" +export PATH + +# unset PYTHONHOME if set +# this will fail if PYTHONHOME is set to the empty string (which is bad anyway) +# could use `if (set -u; : $PYTHONHOME) ;` in bash +if [ -n "${PYTHONHOME:-}" ] ; then + _OLD_VIRTUAL_PYTHONHOME="${PYTHONHOME:-}" + unset PYTHONHOME +fi + +if [ -z "${VIRTUAL_ENV_DISABLE_PROMPT:-}" ] ; then + _OLD_VIRTUAL_PS1="${PS1:-}" + if [ "x(venvironment) " != x ] ; then + PS1="(venvironment) ${PS1:-}" + else + if [ "`basename \"$VIRTUAL_ENV\"`" = "__" ] ; then + # special case for Aspen magic directories + # see http://www.zetadev.com/software/aspen/ + PS1="[`basename \`dirname \"$VIRTUAL_ENV\"\``] $PS1" + else + PS1="(`basename \"$VIRTUAL_ENV\"`)$PS1" + fi + fi + export PS1 +fi + +# This should detect bash and zsh, which have a hash command that must +# be called to get it to forget past commands. Without forgetting +# past commands the $PATH changes we made may not be respected +if [ -n "${BASH:-}" -o -n "${ZSH_VERSION:-}" ] ; then + hash -r +fi diff --git a/week-0/day-3/my_todo_app/venvironment/bin/activate.csh b/week-0/day-3/my_todo_app/venvironment/bin/activate.csh new file mode 100644 index 00000000..b3e19a96 --- /dev/null +++ b/week-0/day-3/my_todo_app/venvironment/bin/activate.csh @@ -0,0 +1,37 @@ +# This file must be used with "source bin/activate.csh" *from csh*. +# You cannot run it directly. +# Created by Davide Di Blasi . +# Ported to Python 3.3 venv by Andrew Svetlov + +alias deactivate 'test $?_OLD_VIRTUAL_PATH != 0 && setenv PATH "$_OLD_VIRTUAL_PATH" && unset _OLD_VIRTUAL_PATH; rehash; test $?_OLD_VIRTUAL_PROMPT != 0 && set prompt="$_OLD_VIRTUAL_PROMPT" && unset _OLD_VIRTUAL_PROMPT; unsetenv VIRTUAL_ENV; test "\!:*" != "nondestructive" && unalias deactivate' + +# Unset irrelevant variables. +deactivate nondestructive + +setenv VIRTUAL_ENV "/home/piyush-pc/Documents/homework_day3/academy-hackathon/week-0/day-3/my_todo_app/venvironment" + +set _OLD_VIRTUAL_PATH="$PATH" +setenv PATH "$VIRTUAL_ENV/bin:$PATH" + + +set _OLD_VIRTUAL_PROMPT="$prompt" + +if (! "$?VIRTUAL_ENV_DISABLE_PROMPT") then + if ("venvironment" != "") then + set env_name = "venvironment" + else + if (`basename "VIRTUAL_ENV"` == "__") then + # special case for Aspen magic directories + # see http://www.zetadev.com/software/aspen/ + set env_name = `basename \`dirname "$VIRTUAL_ENV"\`` + else + set env_name = `basename "$VIRTUAL_ENV"` + endif + endif + set prompt = "[$env_name] $prompt" + unset env_name +endif + +alias pydoc python -m pydoc + +rehash diff --git a/week-0/day-3/my_todo_app/venvironment/bin/activate.fish b/week-0/day-3/my_todo_app/venvironment/bin/activate.fish new file mode 100644 index 00000000..07ce00d3 --- /dev/null +++ b/week-0/day-3/my_todo_app/venvironment/bin/activate.fish @@ -0,0 +1,75 @@ +# This file must be used with ". bin/activate.fish" *from fish* (http://fishshell.org) +# you cannot run it directly + +function deactivate -d "Exit virtualenv and return to normal shell environment" + # reset old environment variables + if test -n "$_OLD_VIRTUAL_PATH" + set -gx PATH $_OLD_VIRTUAL_PATH + set -e _OLD_VIRTUAL_PATH + end + if test -n "$_OLD_VIRTUAL_PYTHONHOME" + set -gx PYTHONHOME $_OLD_VIRTUAL_PYTHONHOME + set -e _OLD_VIRTUAL_PYTHONHOME + end + + if test -n "$_OLD_FISH_PROMPT_OVERRIDE" + functions -e fish_prompt + set -e _OLD_FISH_PROMPT_OVERRIDE + functions -c _old_fish_prompt fish_prompt + functions -e _old_fish_prompt + end + + set -e VIRTUAL_ENV + if test "$argv[1]" != "nondestructive" + # Self destruct! + functions -e deactivate + end +end + +# unset irrelevant variables +deactivate nondestructive + +set -gx VIRTUAL_ENV "/home/piyush-pc/Documents/homework_day3/academy-hackathon/week-0/day-3/my_todo_app/venvironment" + +set -gx _OLD_VIRTUAL_PATH $PATH +set -gx PATH "$VIRTUAL_ENV/bin" $PATH + +# unset PYTHONHOME if set +if set -q PYTHONHOME + set -gx _OLD_VIRTUAL_PYTHONHOME $PYTHONHOME + set -e PYTHONHOME +end + +if test -z "$VIRTUAL_ENV_DISABLE_PROMPT" + # fish uses a function instead of an env var to generate the prompt. + + # save the current fish_prompt function as the function _old_fish_prompt + functions -c fish_prompt _old_fish_prompt + + # with the original prompt function renamed, we can override with our own. + function fish_prompt + # Save the return status of the last command + set -l old_status $status + + # Prompt override? + if test -n "(venvironment) " + printf "%s%s" "(venvironment) " (set_color normal) + else + # ...Otherwise, prepend env + set -l _checkbase (basename "$VIRTUAL_ENV") + if test $_checkbase = "__" + # special case for Aspen magic directories + # see http://www.zetadev.com/software/aspen/ + printf "%s[%s]%s " (set_color -b blue white) (basename (dirname "$VIRTUAL_ENV")) (set_color normal) + else + printf "%s(%s)%s" (set_color -b blue white) (basename "$VIRTUAL_ENV") (set_color normal) + end + end + + # Restore the return status of the previous command. + echo "exit $old_status" | . + _old_fish_prompt + end + + set -gx _OLD_FISH_PROMPT_OVERRIDE "$VIRTUAL_ENV" +end diff --git a/week-0/day-3/my_todo_app/venvironment/bin/easy_install b/week-0/day-3/my_todo_app/venvironment/bin/easy_install new file mode 100755 index 00000000..793c4e92 --- /dev/null +++ b/week-0/day-3/my_todo_app/venvironment/bin/easy_install @@ -0,0 +1,11 @@ +#!/home/piyush-pc/Documents/homework_day3/academy-hackathon/week-0/day-3/my_todo_app/venvironment/bin/python3 + +# -*- coding: utf-8 -*- +import re +import sys + +from setuptools.command.easy_install import main + +if __name__ == '__main__': + sys.argv[0] = re.sub(r'(-script\.pyw?|\.exe)?$', '', sys.argv[0]) + sys.exit(main()) diff --git a/week-0/day-3/my_todo_app/venvironment/bin/easy_install-3.6 b/week-0/day-3/my_todo_app/venvironment/bin/easy_install-3.6 new file mode 100755 index 00000000..793c4e92 --- /dev/null +++ b/week-0/day-3/my_todo_app/venvironment/bin/easy_install-3.6 @@ -0,0 +1,11 @@ +#!/home/piyush-pc/Documents/homework_day3/academy-hackathon/week-0/day-3/my_todo_app/venvironment/bin/python3 + +# -*- coding: utf-8 -*- +import re +import sys + +from setuptools.command.easy_install import main + +if __name__ == '__main__': + sys.argv[0] = re.sub(r'(-script\.pyw?|\.exe)?$', '', sys.argv[0]) + sys.exit(main()) diff --git a/week-0/day-3/my_todo_app/venvironment/bin/pip b/week-0/day-3/my_todo_app/venvironment/bin/pip new file mode 100755 index 00000000..66c25842 --- /dev/null +++ b/week-0/day-3/my_todo_app/venvironment/bin/pip @@ -0,0 +1,11 @@ +#!/home/piyush-pc/Documents/homework_day3/academy-hackathon/week-0/day-3/my_todo_app/venvironment/bin/python3 + +# -*- coding: utf-8 -*- +import re +import sys + +from pip import main + +if __name__ == '__main__': + sys.argv[0] = re.sub(r'(-script\.pyw?|\.exe)?$', '', sys.argv[0]) + sys.exit(main()) diff --git a/week-0/day-3/my_todo_app/venvironment/bin/pip3 b/week-0/day-3/my_todo_app/venvironment/bin/pip3 new file mode 100755 index 00000000..66c25842 --- /dev/null +++ b/week-0/day-3/my_todo_app/venvironment/bin/pip3 @@ -0,0 +1,11 @@ +#!/home/piyush-pc/Documents/homework_day3/academy-hackathon/week-0/day-3/my_todo_app/venvironment/bin/python3 + +# -*- coding: utf-8 -*- +import re +import sys + +from pip import main + +if __name__ == '__main__': + sys.argv[0] = re.sub(r'(-script\.pyw?|\.exe)?$', '', sys.argv[0]) + sys.exit(main()) diff --git a/week-0/day-3/my_todo_app/venvironment/bin/pip3.6 b/week-0/day-3/my_todo_app/venvironment/bin/pip3.6 new file mode 100755 index 00000000..66c25842 --- /dev/null +++ b/week-0/day-3/my_todo_app/venvironment/bin/pip3.6 @@ -0,0 +1,11 @@ +#!/home/piyush-pc/Documents/homework_day3/academy-hackathon/week-0/day-3/my_todo_app/venvironment/bin/python3 + +# -*- coding: utf-8 -*- +import re +import sys + +from pip import main + +if __name__ == '__main__': + sys.argv[0] = re.sub(r'(-script\.pyw?|\.exe)?$', '', sys.argv[0]) + sys.exit(main()) diff --git a/week-0/day-3/my_todo_app/venvironment/bin/python b/week-0/day-3/my_todo_app/venvironment/bin/python new file mode 120000 index 00000000..b8a0adbb --- /dev/null +++ b/week-0/day-3/my_todo_app/venvironment/bin/python @@ -0,0 +1 @@ +python3 \ No newline at end of file diff --git a/week-0/day-3/my_todo_app/venvironment/bin/python3 b/week-0/day-3/my_todo_app/venvironment/bin/python3 new file mode 120000 index 00000000..ae65fdaa --- /dev/null +++ b/week-0/day-3/my_todo_app/venvironment/bin/python3 @@ -0,0 +1 @@ +/usr/bin/python3 \ No newline at end of file diff --git a/week-0/day-3/my_todo_app/venvironment/lib/python3.6/site-packages/__pycache__/easy_install.cpython-36.pyc b/week-0/day-3/my_todo_app/venvironment/lib/python3.6/site-packages/__pycache__/easy_install.cpython-36.pyc new file mode 100644 index 0000000000000000000000000000000000000000..e85254706b8ca967f5fd6f62a531ed1b5d5cd2bc GIT binary patch literal 275 zcmYk!y-LJD5C`zt-ROnG!v_#F*rm7x&ca5-#==H8?E*5a*@atfzsPQcv#{}Le5JHk z-78qRQ8^v>&j$>@i`i^?yu5sR1AuMHzG&KRQo?y^0veD+kTva21rKCYFLQ(yw9ZSXsbcbntx6ef#jjz4(^XFb^F;_3^m2HEp|D^iAQ2EV} TUl}KQEw4#p!f0hQCr9K9^ukQ7 literal 0 HcmV?d00001 diff --git a/week-0/day-3/my_todo_app/venvironment/lib/python3.6/site-packages/easy_install.py b/week-0/day-3/my_todo_app/venvironment/lib/python3.6/site-packages/easy_install.py new file mode 100644 index 00000000..d87e9840 --- /dev/null +++ b/week-0/day-3/my_todo_app/venvironment/lib/python3.6/site-packages/easy_install.py @@ -0,0 +1,5 @@ +"""Run the EasyInstall command""" + +if __name__ == '__main__': + from setuptools.command.easy_install import main + main() diff --git a/week-0/day-3/my_todo_app/venvironment/lib/python3.6/site-packages/pip-9.0.1.dist-info/DESCRIPTION.rst b/week-0/day-3/my_todo_app/venvironment/lib/python3.6/site-packages/pip-9.0.1.dist-info/DESCRIPTION.rst new file mode 100644 index 00000000..8ef94c43 --- /dev/null +++ b/week-0/day-3/my_todo_app/venvironment/lib/python3.6/site-packages/pip-9.0.1.dist-info/DESCRIPTION.rst @@ -0,0 +1,39 @@ +pip +=== + +The `PyPA recommended +`_ +tool for installing Python packages. + +* `Installation `_ +* `Documentation `_ +* `Changelog `_ +* `Github Page `_ +* `Issue Tracking `_ +* `User mailing list `_ +* `Dev mailing list `_ +* User IRC: #pypa on Freenode. +* Dev IRC: #pypa-dev on Freenode. + + +.. image:: https://img.shields.io/pypi/v/pip.svg + :target: https://pypi.python.org/pypi/pip + +.. image:: https://img.shields.io/travis/pypa/pip/master.svg + :target: http://travis-ci.org/pypa/pip + +.. image:: https://img.shields.io/appveyor/ci/pypa/pip.svg + :target: https://ci.appveyor.com/project/pypa/pip/history + +.. image:: https://readthedocs.org/projects/pip/badge/?version=stable + :target: https://pip.pypa.io/en/stable + +Code of Conduct +--------------- + +Everyone interacting in the pip project's codebases, issue trackers, chat +rooms, and mailing lists is expected to follow the `PyPA Code of Conduct`_. + +.. _PyPA Code of Conduct: https://www.pypa.io/en/latest/code-of-conduct/ + + diff --git a/week-0/day-3/my_todo_app/venvironment/lib/python3.6/site-packages/pip-9.0.1.dist-info/INSTALLER b/week-0/day-3/my_todo_app/venvironment/lib/python3.6/site-packages/pip-9.0.1.dist-info/INSTALLER new file mode 100644 index 00000000..a1b589e3 --- /dev/null +++ b/week-0/day-3/my_todo_app/venvironment/lib/python3.6/site-packages/pip-9.0.1.dist-info/INSTALLER @@ -0,0 +1 @@ +pip diff --git a/week-0/day-3/my_todo_app/venvironment/lib/python3.6/site-packages/pip-9.0.1.dist-info/METADATA b/week-0/day-3/my_todo_app/venvironment/lib/python3.6/site-packages/pip-9.0.1.dist-info/METADATA new file mode 100644 index 00000000..291a4a0e --- /dev/null +++ b/week-0/day-3/my_todo_app/venvironment/lib/python3.6/site-packages/pip-9.0.1.dist-info/METADATA @@ -0,0 +1,70 @@ +Metadata-Version: 2.0 +Name: pip +Version: 9.0.1 +Summary: The PyPA recommended tool for installing Python packages. +Home-page: https://pip.pypa.io/ +Author: The pip developers +Author-email: python-virtualenv@groups.google.com +License: MIT +Keywords: easy_install distutils setuptools egg virtualenv +Platform: UNKNOWN +Classifier: Development Status :: 5 - Production/Stable +Classifier: Intended Audience :: Developers +Classifier: License :: OSI Approved :: MIT License +Classifier: Topic :: Software Development :: Build Tools +Classifier: Programming Language :: Python :: 2 +Classifier: Programming Language :: Python :: 2.6 +Classifier: Programming Language :: Python :: 2.7 +Classifier: Programming Language :: Python :: 3 +Classifier: Programming Language :: Python :: 3.3 +Classifier: Programming Language :: Python :: 3.4 +Classifier: Programming Language :: Python :: 3.5 +Classifier: Programming Language :: Python :: Implementation :: PyPy +Requires-Python: >=2.6,!=3.0.*,!=3.1.*,!=3.2.* +Provides-Extra: testing +Provides-Extra: testing +Requires-Dist: mock; extra == 'testing' +Requires-Dist: pretend; extra == 'testing' +Requires-Dist: pytest; extra == 'testing' +Requires-Dist: scripttest (>=1.3); extra == 'testing' +Requires-Dist: virtualenv (>=1.10); extra == 'testing' + +pip +=== + +The `PyPA recommended +`_ +tool for installing Python packages. + +* `Installation `_ +* `Documentation `_ +* `Changelog `_ +* `Github Page `_ +* `Issue Tracking `_ +* `User mailing list `_ +* `Dev mailing list `_ +* User IRC: #pypa on Freenode. +* Dev IRC: #pypa-dev on Freenode. + + +.. image:: https://img.shields.io/pypi/v/pip.svg + :target: https://pypi.python.org/pypi/pip + +.. image:: https://img.shields.io/travis/pypa/pip/master.svg + :target: http://travis-ci.org/pypa/pip + +.. image:: https://img.shields.io/appveyor/ci/pypa/pip.svg + :target: https://ci.appveyor.com/project/pypa/pip/history + +.. image:: https://readthedocs.org/projects/pip/badge/?version=stable + :target: https://pip.pypa.io/en/stable + +Code of Conduct +--------------- + +Everyone interacting in the pip project's codebases, issue trackers, chat +rooms, and mailing lists is expected to follow the `PyPA Code of Conduct`_. + +.. _PyPA Code of Conduct: https://www.pypa.io/en/latest/code-of-conduct/ + + diff --git a/week-0/day-3/my_todo_app/venvironment/lib/python3.6/site-packages/pip-9.0.1.dist-info/RECORD b/week-0/day-3/my_todo_app/venvironment/lib/python3.6/site-packages/pip-9.0.1.dist-info/RECORD new file mode 100644 index 00000000..259da757 --- /dev/null +++ b/week-0/day-3/my_todo_app/venvironment/lib/python3.6/site-packages/pip-9.0.1.dist-info/RECORD @@ -0,0 +1,123 @@ +pip/__init__.py,sha256=ds3YAAeZwhX6e8yfxjLCxPlOb37Bh42ew09XEPJjQGE,11537 +pip/__main__.py,sha256=V6Kh-IEDEFpt1cahRE6MajUF_14qJR_Qsvn4MjWZXzE,584 +pip/basecommand.py,sha256=TTlmZesQ4Vuxcto2KqwZGmgmN5ioHEl_DeFev9ie_SA,11910 +pip/baseparser.py,sha256=AKMOeF3fTrRroiv0DmTQbdiLW0DQux2KqGC_dJJB9d0,10465 +pip/cmdoptions.py,sha256=pRptFz05iFEfSW4Flg3x1_P92sYlFvq7elhnwujikNY,16473 +pip/download.py,sha256=rA0wbmqC2n9ejX481YJSidmKgQqQDjdaxkHkHlAN68k,32171 +pip/exceptions.py,sha256=BvqH-Jw3tP2b-2IJ2kjrQemOAPMqKrQMLRIZHZQpJXk,8121 +pip/index.py,sha256=oVFx3dW7KTFL3Ecc1t1Kz04C6ZCSk4T1gnzB7j332hg,39952 +pip/locations.py,sha256=9rJRlgonC6QC2zGDIn_7mXaoZ9_tF_IHM2BQhWVRgbo,5626 +pip/pep425tags.py,sha256=q3kec4f6NHszuGYIhGIbVvs896D06uJAnKFgJ_wce44,10980 +pip/status_codes.py,sha256=F6uDG6Gj7RNKQJUDnd87QKqI16Us-t-B0wPF_4QMpWc,156 +pip/wheel.py,sha256=QSWmGs2ui-n4UMWm0JUY6aMCcwNKungVzbWsxI9KlJQ,32010 +pip/_vendor/__init__.py,sha256=L-0x9jj0HSZen1Fm2U0GUbxfjfwQPIXc4XJ4IAxy8D8,4804 +pip/commands/__init__.py,sha256=2Uq3HCdjchJD9FL1LB7rd5v6UySVAVizX0W3EX3hIoE,2244 +pip/commands/check.py,sha256=-A7GI1-WZBh9a4P6UoH_aR-J7I8Lz8ly7m3wnCjmevs,1382 +pip/commands/completion.py,sha256=kkPgVX7SUcJ_8Juw5GkgWaxHN9_45wmAr9mGs1zXEEs,2453 +pip/commands/download.py,sha256=8RuuPmSYgAq3iEDTqZY_1PDXRqREdUULHNjWJeAv7Mo,7810 +pip/commands/freeze.py,sha256=h6-yFMpjCjbNj8-gOm5UuoF6cg14N5rPV4TCi3_CeuI,2835 +pip/commands/hash.py,sha256=MCt4jEFyfoce0lVeNEz1x49uaTY-VDkKiBvvxrVcHkw,1597 +pip/commands/help.py,sha256=84HWkEdnGP_AEBHnn8gJP2Te0XTXRKFoXqXopbOZTNo,982 +pip/commands/install.py,sha256=o-CR1TKf-b1qaFv47nNlawqsIfDjXyIzv_iJUw1Trag,18069 +pip/commands/list.py,sha256=93bCiFyt2Qut_YHkYHJMZHpXladmxsjS-yOtZeb3uqI,11369 +pip/commands/search.py,sha256=oTs9QNdefnrmCV_JeftG0PGiMuYVmiEDF1OUaYsmDao,4502 +pip/commands/show.py,sha256=ZYM57_7U8KP9MQIIyHKQdZxmiEZByy-DRzB697VFoTY,5891 +pip/commands/uninstall.py,sha256=tz8cXz4WdpUdnt3RvpdQwH6_SNMB50egBIZWa1dwfcc,2884 +pip/commands/wheel.py,sha256=z5SEhws2YRMb0Ml1IEkg6jFZMLRpLl86bHCrQbYt5zo,7729 +pip/compat/__init__.py,sha256=2Xs_IpsmdRgHbQgQO0c8_lPvHJnQXHyGWxPbLbYJL4c,4672 +pip/compat/dictconfig.py,sha256=dRrelPDWrceDSzFT51RTEVY2GuM7UDyc5Igh_tn4Fvk,23096 +pip/models/__init__.py,sha256=0Rs7_RA4DxeOkWT5Cq4CQzDrSEhvYcN3TH2cazr72PE,71 +pip/models/index.py,sha256=pUfbO__v3mD9j-2n_ClwPS8pVyx4l2wIwyvWt8GMCRA,487 +pip/operations/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0 +pip/operations/check.py,sha256=uwUN9cs1sPo7c0Sj6pRrSv7b22Pk29SXUImTelVchMQ,1590 +pip/operations/freeze.py,sha256=k-7w7LsM-RpPv7ERBzHiPpYkH-GuYfHLyR-Cp_1VPL0,5194 +pip/req/__init__.py,sha256=vFwZY8_Vc1WU1zFAespg1My_r_AT3n7cN0W9eX0EFqk,276 +pip/req/req_file.py,sha256=fG9MDsXUNPhmGwxUiwrIXEynyD8Q7s3L47-hLZPDXq0,11926 +pip/req/req_install.py,sha256=gYrH-lwQMmt55VVbav_EtRIPu94cQbHFHm_Kq6AeHbg,46487 +pip/req/req_set.py,sha256=jHspXqcA2FxcF05dgUIAZ5huYPv6bn0wRUX0Z7PKmaA,34462 +pip/req/req_uninstall.py,sha256=fdH2VgCjEC8NRYDS7fRu3ZJaBBUEy-N5muwxDX5MBNM,6897 +pip/utils/__init__.py,sha256=zk1vF2EzHZX1ZKPwgeC9I6yKvs8IJ6NZEfXgp2IP8hI,27912 +pip/utils/appdirs.py,sha256=kj2LK-I2fC5QnEh_A_v-ev_IQMcXaWWF5DE39sNvCLQ,8811 +pip/utils/build.py,sha256=4smLRrfSCmXmjEnVnMFh2tBEpNcSLRe6J0ejZJ-wWJE,1312 +pip/utils/deprecation.py,sha256=X_FMjtDbMJqfqEkdRrki-mYyIdPB6I6DHUTCA_ChY6M,2232 +pip/utils/encoding.py,sha256=NQxGiFS5GbeAveLZTnx92t5r0PYqvt0iRnP2u9SGG1w,971 +pip/utils/filesystem.py,sha256=ZEVBuYM3fqr2_lgOESh4Y7fPFszGD474zVm_M3Mb5Tk,899 +pip/utils/glibc.py,sha256=jcQYjt_oJLPKVZB28Kauy4Sw70zS-wawxoU1HHX36_0,2939 +pip/utils/hashes.py,sha256=oMk7cd3PbJgzpSQyXq1MytMud5f6H5Oa2YY5hYuCq6I,2866 +pip/utils/logging.py,sha256=7yWu4gZw-Qclj7X80QVdpGWkdTWGKT4LiUVKcE04pro,3327 +pip/utils/outdated.py,sha256=fNwOCL5r2EftPGhgCYGMKu032HC8cV-JAr9lp0HmToM,5455 +pip/utils/packaging.py,sha256=qhmli14odw6DIhWJgQYS2Q0RrSbr8nXNcG48f5yTRms,2080 +pip/utils/setuptools_build.py,sha256=0blfscmNJW_iZ5DcswJeDB_PbtTEjfK9RL1R1WEDW2E,278 +pip/utils/ui.py,sha256=pbDkSAeumZ6jdZcOJ2yAbx8iBgeP2zfpqNnLJK1gskQ,11597 +pip/vcs/__init__.py,sha256=WafFliUTHMmsSISV8PHp1M5EXDNSWyJr78zKaQmPLdY,12374 +pip/vcs/bazaar.py,sha256=tYTwc4b4off8mr0O2o8SiGejqBDJxcbDBMSMd9-ISYc,3803 +pip/vcs/git.py,sha256=5LfWryi78A-2ULjEZJvCTarJ_3l8venwXASlwm8hiug,11197 +pip/vcs/mercurial.py,sha256=xG6rDiwHCRytJEs23SIHBXl_SwQo2jkkdD_6rVVP5h4,3472 +pip/vcs/subversion.py,sha256=GAuX2Sk7IZvJyEzENKcVld_wGBrQ3fpXDlXjapZEYdI,9350 +pip-9.0.1.dist-info/DESCRIPTION.rst,sha256=Va8Wj1XBpTbVQ2Z41mZRJdALEeziiS_ZewWn1H2ecY4,1287 +pip-9.0.1.dist-info/METADATA,sha256=LZLdUBpPmFB4Of_9wIHegCXhbmiByzOv6WCGs3rixt0,2553 +pip-9.0.1.dist-info/RECORD,, +pip-9.0.1.dist-info/WHEEL,sha256=kdsN-5OJAZIiHN-iO4Rhl82KyS0bDWf4uBwMbkNafr8,110 +pip-9.0.1.dist-info/entry_points.txt,sha256=Q-fR2tcp9DRdeXoGn1wR67Xecy32o5EyQEnzDghwqqk,68 +pip-9.0.1.dist-info/metadata.json,sha256=eAfMY0s5HjwtLLjIZ9LYDxWocl2her-knzH7qTJ38CU,1565 +pip-9.0.1.dist-info/top_level.txt,sha256=zuuue4knoyJ-UwPPXg8fezS7VCrXJQrAP7zeNuwvFQg,4 +../../../bin/pip,sha256=SXZbQEPir-DIYFyLJ-jgzWkic9uKtn5MDR09IRFQgho,297 +../../../bin/pip3,sha256=SXZbQEPir-DIYFyLJ-jgzWkic9uKtn5MDR09IRFQgho,297 +../../../bin/pip3.6,sha256=SXZbQEPir-DIYFyLJ-jgzWkic9uKtn5MDR09IRFQgho,297 +pip-9.0.1.dist-info/INSTALLER,sha256=zuuue4knoyJ-UwPPXg8fezS7VCrXJQrAP7zeNuwvFQg,4 +pip/models/__pycache__/index.cpython-36.pyc,, +pip/models/__pycache__/__init__.cpython-36.pyc,, +pip/vcs/__pycache__/bazaar.cpython-36.pyc,, +pip/vcs/__pycache__/git.cpython-36.pyc,, +pip/vcs/__pycache__/__init__.cpython-36.pyc,, +pip/vcs/__pycache__/mercurial.cpython-36.pyc,, +pip/vcs/__pycache__/subversion.cpython-36.pyc,, +pip/operations/__pycache__/freeze.cpython-36.pyc,, +pip/operations/__pycache__/__init__.cpython-36.pyc,, +pip/operations/__pycache__/check.cpython-36.pyc,, +pip/req/__pycache__/req_file.cpython-36.pyc,, +pip/req/__pycache__/req_install.cpython-36.pyc,, +pip/req/__pycache__/req_set.cpython-36.pyc,, +pip/req/__pycache__/__init__.cpython-36.pyc,, +pip/req/__pycache__/req_uninstall.cpython-36.pyc,, +pip/commands/__pycache__/help.cpython-36.pyc,, +pip/commands/__pycache__/uninstall.cpython-36.pyc,, +pip/commands/__pycache__/install.cpython-36.pyc,, +pip/commands/__pycache__/download.cpython-36.pyc,, +pip/commands/__pycache__/search.cpython-36.pyc,, +pip/commands/__pycache__/hash.cpython-36.pyc,, +pip/commands/__pycache__/list.cpython-36.pyc,, +pip/commands/__pycache__/completion.cpython-36.pyc,, +pip/commands/__pycache__/freeze.cpython-36.pyc,, +pip/commands/__pycache__/__init__.cpython-36.pyc,, +pip/commands/__pycache__/check.cpython-36.pyc,, +pip/commands/__pycache__/show.cpython-36.pyc,, +pip/commands/__pycache__/wheel.cpython-36.pyc,, +pip/_vendor/__pycache__/__init__.cpython-36.pyc,, +pip/compat/__pycache__/dictconfig.cpython-36.pyc,, +pip/compat/__pycache__/__init__.cpython-36.pyc,, +pip/utils/__pycache__/filesystem.cpython-36.pyc,, +pip/utils/__pycache__/setuptools_build.cpython-36.pyc,, +pip/utils/__pycache__/deprecation.cpython-36.pyc,, +pip/utils/__pycache__/encoding.cpython-36.pyc,, +pip/utils/__pycache__/outdated.cpython-36.pyc,, +pip/utils/__pycache__/glibc.cpython-36.pyc,, +pip/utils/__pycache__/ui.cpython-36.pyc,, +pip/utils/__pycache__/build.cpython-36.pyc,, +pip/utils/__pycache__/packaging.cpython-36.pyc,, +pip/utils/__pycache__/logging.cpython-36.pyc,, +pip/utils/__pycache__/hashes.cpython-36.pyc,, +pip/utils/__pycache__/appdirs.cpython-36.pyc,, +pip/utils/__pycache__/__init__.cpython-36.pyc,, +pip/__pycache__/index.cpython-36.pyc,, +pip/__pycache__/pep425tags.cpython-36.pyc,, +pip/__pycache__/status_codes.cpython-36.pyc,, +pip/__pycache__/download.cpython-36.pyc,, +pip/__pycache__/exceptions.cpython-36.pyc,, +pip/__pycache__/cmdoptions.cpython-36.pyc,, +pip/__pycache__/basecommand.cpython-36.pyc,, +pip/__pycache__/baseparser.cpython-36.pyc,, +pip/__pycache__/__init__.cpython-36.pyc,, +pip/__pycache__/locations.cpython-36.pyc,, +pip/__pycache__/__main__.cpython-36.pyc,, +pip/__pycache__/wheel.cpython-36.pyc,, diff --git a/week-0/day-3/my_todo_app/venvironment/lib/python3.6/site-packages/pip-9.0.1.dist-info/WHEEL b/week-0/day-3/my_todo_app/venvironment/lib/python3.6/site-packages/pip-9.0.1.dist-info/WHEEL new file mode 100644 index 00000000..7332a419 --- /dev/null +++ b/week-0/day-3/my_todo_app/venvironment/lib/python3.6/site-packages/pip-9.0.1.dist-info/WHEEL @@ -0,0 +1,6 @@ +Wheel-Version: 1.0 +Generator: bdist_wheel (0.30.0) +Root-Is-Purelib: true +Tag: py2-none-any +Tag: py3-none-any + diff --git a/week-0/day-3/my_todo_app/venvironment/lib/python3.6/site-packages/pip-9.0.1.dist-info/entry_points.txt b/week-0/day-3/my_todo_app/venvironment/lib/python3.6/site-packages/pip-9.0.1.dist-info/entry_points.txt new file mode 100644 index 00000000..879fd896 --- /dev/null +++ b/week-0/day-3/my_todo_app/venvironment/lib/python3.6/site-packages/pip-9.0.1.dist-info/entry_points.txt @@ -0,0 +1,5 @@ +[console_scripts] +pip = pip:main +pip3 = pip:main +pip3.6 = pip:main + diff --git a/week-0/day-3/my_todo_app/venvironment/lib/python3.6/site-packages/pip-9.0.1.dist-info/metadata.json b/week-0/day-3/my_todo_app/venvironment/lib/python3.6/site-packages/pip-9.0.1.dist-info/metadata.json new file mode 100644 index 00000000..15c01e9c --- /dev/null +++ b/week-0/day-3/my_todo_app/venvironment/lib/python3.6/site-packages/pip-9.0.1.dist-info/metadata.json @@ -0,0 +1 @@ +{"classifiers": ["Development Status :: 5 - Production/Stable", "Intended Audience :: Developers", "License :: OSI Approved :: MIT License", "Topic :: Software Development :: Build Tools", "Programming Language :: Python :: 2", "Programming Language :: Python :: 2.6", "Programming Language :: Python :: 2.7", "Programming Language :: Python :: 3", "Programming Language :: Python :: 3.3", "Programming Language :: Python :: 3.4", "Programming Language :: Python :: 3.5", "Programming Language :: Python :: Implementation :: PyPy"], "extensions": {"python.commands": {"wrap_console": {"pip": "pip:main", "pip3": "pip:main", "pip3.6": "pip:main"}}, "python.details": {"contacts": [{"email": "python-virtualenv@groups.google.com", "name": "The pip developers", "role": "author"}], "document_names": {"description": "DESCRIPTION.rst"}, "project_urls": {"Home": "https://pip.pypa.io/"}}, "python.exports": {"console_scripts": {"pip": "pip:main", "pip3": "pip:main", "pip3.6": "pip:main"}}}, "extras": ["testing"], "generator": "bdist_wheel (0.30.0)", "keywords": ["easy_install", "distutils", "setuptools", "egg", "virtualenv"], "license": "MIT", "metadata_version": "2.0", "name": "pip", "requires_python": ">=2.6,!=3.0.*,!=3.1.*,!=3.2.*", "run_requires": [{"extra": "testing", "requires": ["mock", "pretend", "pytest", "scripttest (>=1.3)", "virtualenv (>=1.10)"]}], "summary": "The PyPA recommended tool for installing Python packages.", "test_requires": [{"requires": ["mock", "pretend", "pytest", "scripttest (>=1.3)", "virtualenv (>=1.10)"]}], "version": "9.0.1"} \ No newline at end of file diff --git a/week-0/day-3/my_todo_app/venvironment/lib/python3.6/site-packages/pip-9.0.1.dist-info/top_level.txt b/week-0/day-3/my_todo_app/venvironment/lib/python3.6/site-packages/pip-9.0.1.dist-info/top_level.txt new file mode 100644 index 00000000..a1b589e3 --- /dev/null +++ b/week-0/day-3/my_todo_app/venvironment/lib/python3.6/site-packages/pip-9.0.1.dist-info/top_level.txt @@ -0,0 +1 @@ +pip diff --git a/week-0/day-3/my_todo_app/venvironment/lib/python3.6/site-packages/pip/__init__.py b/week-0/day-3/my_todo_app/venvironment/lib/python3.6/site-packages/pip/__init__.py new file mode 100644 index 00000000..3b197d6e --- /dev/null +++ b/week-0/day-3/my_todo_app/venvironment/lib/python3.6/site-packages/pip/__init__.py @@ -0,0 +1,338 @@ +#!/usr/bin/env python +from __future__ import absolute_import + +import locale +import logging +import os +import optparse +import warnings + +import sys +import re + +# 2016-06-17 barry@debian.org: urllib3 1.14 added optional support for socks, +# but if invoked (i.e. imported), it will issue a warning to stderr if socks +# isn't available. requests unconditionally imports urllib3's socks contrib +# module, triggering this warning. The warning breaks DEP-8 tests (because of +# the stderr output) and is just plain annoying in normal usage. I don't want +# to add socks as yet another dependency for pip, nor do I want to allow-stder +# in the DEP-8 tests, so just suppress the warning. pdb tells me this has to +# be done before the import of pip.vcs. +try: + from pip._vendor.requests.packages.urllib3.exceptions import DependencyWarning +except ImportError: + from urllib3.exceptions import DependencyWarning +warnings.filterwarnings("ignore", category=DependencyWarning) # noqa + + +from pip.exceptions import InstallationError, CommandError, PipError +from pip.utils import get_installed_distributions, get_prog +from pip.utils import deprecation, dist_is_editable +from pip.vcs import git, mercurial, subversion, bazaar # noqa +from pip.baseparser import ConfigOptionParser, UpdatingDefaultsHelpFormatter +from pip.commands import get_summaries, get_similar_commands +from pip.commands import commands_dict +try: + from pip._vendor.requests.packages.urllib3.exceptions import ( + InsecureRequestWarning, + ) +except ImportError: + from urllib3.exceptions import ( + InsecureRequestWarning, + ) + +# assignment for flake8 to be happy + +# This fixes a peculiarity when importing via __import__ - as we are +# initialising the pip module, "from pip import cmdoptions" is recursive +# and appears not to work properly in that situation. +import pip.cmdoptions +cmdoptions = pip.cmdoptions + +# The version as used in the setup.py and the docs conf.py +__version__ = "9.0.1" + + +logger = logging.getLogger(__name__) + +# Hide the InsecureRequestWarning from urllib3 +warnings.filterwarnings("ignore", category=InsecureRequestWarning) + + +def autocomplete(): + """Command and option completion for the main option parser (and options) + and its subcommands (and options). + + Enable by sourcing one of the completion shell scripts (bash, zsh or fish). + """ + # Don't complete if user hasn't sourced bash_completion file. + if 'PIP_AUTO_COMPLETE' not in os.environ: + return + cwords = os.environ['COMP_WORDS'].split()[1:] + cword = int(os.environ['COMP_CWORD']) + try: + current = cwords[cword - 1] + except IndexError: + current = '' + + subcommands = [cmd for cmd, summary in get_summaries()] + options = [] + # subcommand + try: + subcommand_name = [w for w in cwords if w in subcommands][0] + except IndexError: + subcommand_name = None + + parser = create_main_parser() + # subcommand options + if subcommand_name: + # special case: 'help' subcommand has no options + if subcommand_name == 'help': + sys.exit(1) + # special case: list locally installed dists for uninstall command + if subcommand_name == 'uninstall' and not current.startswith('-'): + installed = [] + lc = current.lower() + for dist in get_installed_distributions(local_only=True): + if dist.key.startswith(lc) and dist.key not in cwords[1:]: + installed.append(dist.key) + # if there are no dists installed, fall back to option completion + if installed: + for dist in installed: + print(dist) + sys.exit(1) + + subcommand = commands_dict[subcommand_name]() + options += [(opt.get_opt_string(), opt.nargs) + for opt in subcommand.parser.option_list_all + if opt.help != optparse.SUPPRESS_HELP] + + # filter out previously specified options from available options + prev_opts = [x.split('=')[0] for x in cwords[1:cword - 1]] + options = [(x, v) for (x, v) in options if x not in prev_opts] + # filter options by current input + options = [(k, v) for k, v in options if k.startswith(current)] + for option in options: + opt_label = option[0] + # append '=' to options which require args + if option[1]: + opt_label += '=' + print(opt_label) + else: + # show main parser options only when necessary + if current.startswith('-') or current.startswith('--'): + opts = [i.option_list for i in parser.option_groups] + opts.append(parser.option_list) + opts = (o for it in opts for o in it) + + subcommands += [i.get_opt_string() for i in opts + if i.help != optparse.SUPPRESS_HELP] + + print(' '.join([x for x in subcommands if x.startswith(current)])) + sys.exit(1) + + +def create_main_parser(): + parser_kw = { + 'usage': '\n%prog [options]', + 'add_help_option': False, + 'formatter': UpdatingDefaultsHelpFormatter(), + 'name': 'global', + 'prog': get_prog(), + } + + parser = ConfigOptionParser(**parser_kw) + parser.disable_interspersed_args() + + pip_pkg_dir = os.path.dirname(os.path.dirname(os.path.abspath(__file__))) + parser.version = 'pip %s from %s (python %s)' % ( + __version__, pip_pkg_dir, sys.version[:3]) + + # add the general options + gen_opts = cmdoptions.make_option_group(cmdoptions.general_group, parser) + parser.add_option_group(gen_opts) + + parser.main = True # so the help formatter knows + + # create command listing for description + command_summaries = get_summaries() + description = [''] + ['%-27s %s' % (i, j) for i, j in command_summaries] + parser.description = '\n'.join(description) + + return parser + + +def parseopts(args): + parser = create_main_parser() + + # Note: parser calls disable_interspersed_args(), so the result of this + # call is to split the initial args into the general options before the + # subcommand and everything else. + # For example: + # args: ['--timeout=5', 'install', '--user', 'INITools'] + # general_options: ['--timeout==5'] + # args_else: ['install', '--user', 'INITools'] + general_options, args_else = parser.parse_args(args) + + # --version + if general_options.version: + sys.stdout.write(parser.version) + sys.stdout.write(os.linesep) + sys.exit() + + # pip || pip help -> print_help() + if not args_else or (args_else[0] == 'help' and len(args_else) == 1): + parser.print_help() + sys.exit() + + # the subcommand name + cmd_name = args_else[0] + + if cmd_name not in commands_dict: + guess = get_similar_commands(cmd_name) + + msg = ['unknown command "%s"' % cmd_name] + if guess: + msg.append('maybe you meant "%s"' % guess) + + raise CommandError(' - '.join(msg)) + + # all the args without the subcommand + cmd_args = args[:] + cmd_args.remove(cmd_name) + + return cmd_name, cmd_args + + +def check_isolated(args): + isolated = False + + if "--isolated" in args: + isolated = True + + return isolated + + +def main(args=None): + if args is None: + args = sys.argv[1:] + + # Configure our deprecation warnings to be sent through loggers + deprecation.install_warning_logger() + + autocomplete() + + try: + cmd_name, cmd_args = parseopts(args) + except PipError as exc: + sys.stderr.write("ERROR: %s" % exc) + sys.stderr.write(os.linesep) + sys.exit(1) + + # Needed for locale.getpreferredencoding(False) to work + # in pip.utils.encoding.auto_decode + try: + locale.setlocale(locale.LC_ALL, '') + except locale.Error as e: + # setlocale can apparently crash if locale are uninitialized + logger.debug("Ignoring error %s when setting locale", e) + command = commands_dict[cmd_name](isolated=check_isolated(cmd_args)) + return command.main(cmd_args) + + +# ########################################################### +# # Writing freeze files + +class FrozenRequirement(object): + + def __init__(self, name, req, editable, comments=()): + self.name = name + self.req = req + self.editable = editable + self.comments = comments + + _rev_re = re.compile(r'-r(\d+)$') + _date_re = re.compile(r'-(20\d\d\d\d\d\d)$') + + @classmethod + def from_dist(cls, dist, dependency_links): + location = os.path.normcase(os.path.abspath(dist.location)) + comments = [] + from pip.vcs import vcs, get_src_requirement + if dist_is_editable(dist) and vcs.get_backend_name(location): + editable = True + try: + req = get_src_requirement(dist, location) + except InstallationError as exc: + logger.warning( + "Error when trying to get requirement for VCS system %s, " + "falling back to uneditable format", exc + ) + req = None + if req is None: + logger.warning( + 'Could not determine repository location of %s', location + ) + comments.append( + '## !! Could not determine repository location' + ) + req = dist.as_requirement() + editable = False + else: + editable = False + req = dist.as_requirement() + specs = req.specs + assert len(specs) == 1 and specs[0][0] in ["==", "==="], \ + 'Expected 1 spec with == or ===; specs = %r; dist = %r' % \ + (specs, dist) + version = specs[0][1] + ver_match = cls._rev_re.search(version) + date_match = cls._date_re.search(version) + if ver_match or date_match: + svn_backend = vcs.get_backend('svn') + if svn_backend: + svn_location = svn_backend().get_location( + dist, + dependency_links, + ) + if not svn_location: + logger.warning( + 'Warning: cannot find svn location for %s', req) + comments.append( + '## FIXME: could not find svn URL in dependency_links ' + 'for this package:' + ) + else: + comments.append( + '# Installing as editable to satisfy requirement %s:' % + req + ) + if ver_match: + rev = ver_match.group(1) + else: + rev = '{%s}' % date_match.group(1) + editable = True + req = '%s@%s#egg=%s' % ( + svn_location, + rev, + cls.egg_name(dist) + ) + return cls(dist.project_name, req, editable, comments) + + @staticmethod + def egg_name(dist): + name = dist.egg_name() + match = re.search(r'-py\d\.\d$', name) + if match: + name = name[:match.start()] + return name + + def __str__(self): + req = self.req + if self.editable: + req = '-e %s' % req + return '\n'.join(list(self.comments) + [str(req)]) + '\n' + + +if __name__ == '__main__': + sys.exit(main()) diff --git a/week-0/day-3/my_todo_app/venvironment/lib/python3.6/site-packages/pip/__main__.py b/week-0/day-3/my_todo_app/venvironment/lib/python3.6/site-packages/pip/__main__.py new file mode 100644 index 00000000..5556539c --- /dev/null +++ b/week-0/day-3/my_todo_app/venvironment/lib/python3.6/site-packages/pip/__main__.py @@ -0,0 +1,19 @@ +from __future__ import absolute_import + +import os +import sys + +# If we are running from a wheel, add the wheel to sys.path +# This allows the usage python pip-*.whl/pip install pip-*.whl +if __package__ == '': + # __file__ is pip-*.whl/pip/__main__.py + # first dirname call strips of '/__main__.py', second strips off '/pip' + # Resulting path is the name of the wheel itself + # Add that to sys.path so we can import pip + path = os.path.dirname(os.path.dirname(__file__)) + sys.path.insert(0, path) + +import pip # noqa + +if __name__ == '__main__': + sys.exit(pip.main()) diff --git a/week-0/day-3/my_todo_app/venvironment/lib/python3.6/site-packages/pip/__pycache__/__init__.cpython-36.pyc b/week-0/day-3/my_todo_app/venvironment/lib/python3.6/site-packages/pip/__pycache__/__init__.cpython-36.pyc new file mode 100644 index 0000000000000000000000000000000000000000..42258b9f5ee4f94321e8ec6d7ba93829fda6fc0d GIT binary patch literal 8498 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 literal 0 HcmV?d00001 diff --git a/week-0/day-3/my_todo_app/venvironment/lib/python3.6/site-packages/pip/__pycache__/__main__.cpython-36.pyc b/week-0/day-3/my_todo_app/venvironment/lib/python3.6/site-packages/pip/__pycache__/__main__.cpython-36.pyc new file mode 100644 index 0000000000000000000000000000000000000000..3179bb9802c3684a8b6c7e0858865beb141d9858 GIT binary patch literal 374 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 literal 0 HcmV?d00001 diff --git a/week-0/day-3/my_todo_app/venvironment/lib/python3.6/site-packages/pip/__pycache__/cmdoptions.cpython-36.pyc b/week-0/day-3/my_todo_app/venvironment/lib/python3.6/site-packages/pip/__pycache__/cmdoptions.cpython-36.pyc new file mode 100644 index 0000000000000000000000000000000000000000..22b650b43f1a7037ca778b6fde7aa7e433c94e63 GIT binary patch literal 12929 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 literal 0 HcmV?d00001 diff --git a/week-0/day-3/my_todo_app/venvironment/lib/python3.6/site-packages/pip/__pycache__/exceptions.cpython-36.pyc b/week-0/day-3/my_todo_app/venvironment/lib/python3.6/site-packages/pip/__pycache__/exceptions.cpython-36.pyc new file mode 100644 index 0000000000000000000000000000000000000000..af3cd49ef679eb6904333dc6813a371412e0e1bf GIT binary patch literal 10483 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 Iv-!;b19y%h($ literal 0 HcmV?d00001 diff --git a/week-0/day-3/my_todo_app/venvironment/lib/python3.6/site-packages/pip/__pycache__/locations.cpython-36.pyc b/week-0/day-3/my_todo_app/venvironment/lib/python3.6/site-packages/pip/__pycache__/locations.cpython-36.pyc new file mode 100644 index 0000000000000000000000000000000000000000..63a6fe800130a7367caa1bc4b2d41fcbb208c90e GIT binary patch literal 3869 zcmai0Uvt~W5x)aK00jStl4aSlV+YP3$4o3LX*#>t8O*(@PCA>3UX6~F0R#<&-fq8>f)?m%2 zWN?wSSR48^w!}KnU*cjx_2x%F0I zy*C%**BOp(>d{;L%{l#n7LU%!Ui_IXj&8EG!L5bF8*pM{&|QqW{1%MfPRIX8|I#`A z%m1qnCwzyQZ2eEhI$>814A}io+D|6Cs(G(eJa%pHCcDmFeTu%njlRD};Jh2`b#{Zj z_LL5K%-kW}H)iiY$f8ijSz7pq`&@AUko!rN9r&Y6_)(UQ;=SUwAE$*3lf*CNbTqo{ za~VBDOm(SR3Wr6OOeGKENuCM04ZM1BTvV!ELpcjw)!6y?)BeML@LB)s9ppd0zkToX z$2-d7M|qgCX~6~PI$@r(SQN_4<9zn7-Tk=mM{&Y^=<_6uIP>*3hsQn$_%egNu^5iP zeYwy5BAbc`4iSR%RC?z`d!F}s3R4m-=3#UY?rEdNG>UjpjHXF)e0ok;M2jt~MHvH= zF`R$MJ;oC*LEzRjO+e2-&ZfTLlkCaDG;X%r^JdpzdmEMT1{&LdQ}IY<;%IMtqOXtKWjd4xdi0;RP8DEk|Ioi-iwU@RvT>i_K_FMGv>Tjxw@BS$Qb;l{L=dR9*Sv{ujZ$ z{)7H*KX`ce(P#Zf!Pfl;{q4IC`^w64o~qg*uBk5mTqUd=fWfITuznq# zXhTD+Hf>UI38)B%r@tBy+S6|XA&Jz!6>apQ1g}dIIPi^)xp`oUo5*Jtc(^uusQvVa z%c)5HT`>jhj38Ftf`}2*G>y|e1Wyb=3H>Lrkkc^X>66?3R+tpr&j6d^FfKTt5N}E~ z1P_xS7km^S?W)EwEcjxy)wPtf9~PmMLYWXr%C5wev&SWJwad;mYj75Id9jONnldhe z7h8A>W(yA*QuC-qSE*$P^wXJNpblshYQKC0g9?GVHKjGK&FP$;R9w4+8liFNK%V|U z%eW=Xix0G~FsE1xG`{4kI7QEZPkab=Kh1nNn&cC|K+G=UvFK^<%&w-{#$J*Q!(;=e zH_oOZa(1`7bRzx(@;&62__i} zKwY)dEU1>#Ixo9+^@THoGs$0p)xw2_*lV;+SE#rNG+da7W*_cCCK_c4T!c;!A%KJ* z@n|X$CK#I|kxl$4OwkWXmhOSz5LMvvde7+}l(Q3wIG2zGhjBV{K&2O_@yta6GwaOi z0r?D}u51y*Vw!CdN;)3C7M64_^COI9!3j9x2H; zE0A)k1Vk|b{nhvu;IAFhwO)8#`&2DeIX*z};uSzrH+t{tYkA3q&%HZIT*xS!P=lAwj}(!$`=4p4gPcuTD_{|0m&=z3}9KLU+1@QoX|($RIBxE16%y3bRgj@fo=ys*7_cHL5WgH281w{^o?k=r!0hrut04W^y~1M4Y{mO1fXVr#P!m^C$$0|D zL05Z4p2U)g7#KdxblX^G3mIrP_fdZfn@^wtcf$J&&dBr*7ssw{Q!Vi$DMHu*=;FOC z%xID_MPp?i@MG1&yo#x>S`sUE72vw^bj}BmTQxi@i$)vKya8aW;m zj>QW=*?_$0kSXW$oeF6dKZ>QkYSl(mRzMFh1X{Y1ofb${*URtR-|efq-dR-)HHoFp zh7thk%EcbJ$_CqoEJP3XqgE2W7e>cH0q<0JAL|pH^3DZ^axnrC{;H$bU(CS@g<3w( z(V?X8?_5dH0MgiT??4TnCj27|(t<&QXhEF7-)Pc~(VOIV0A#cg hS9a4v)Zo_vPFuGY^oSeRMBeGhuH6C~HsFuY{{oWmGhzS$ literal 0 HcmV?d00001 diff --git a/week-0/day-3/my_todo_app/venvironment/lib/python3.6/site-packages/pip/__pycache__/pep425tags.cpython-36.pyc b/week-0/day-3/my_todo_app/venvironment/lib/python3.6/site-packages/pip/__pycache__/pep425tags.cpython-36.pyc new file mode 100644 index 0000000000000000000000000000000000000000..c39efcad467363dad9ae719e6aeaecb068fe6da2 GIT binary patch literal 7464 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 ZnX)puX=~LotrOOq^%ITdJ_D!q{{g#CGUfmP literal 0 HcmV?d00001 diff --git a/week-0/day-3/my_todo_app/venvironment/lib/python3.6/site-packages/pip/__pycache__/status_codes.cpython-36.pyc b/week-0/day-3/my_todo_app/venvironment/lib/python3.6/site-packages/pip/__pycache__/status_codes.cpython-36.pyc new file mode 100644 index 0000000000000000000000000000000000000000..470064cfec16497cb5f232f4d3ad34b25b944be9 GIT binary patch literal 338 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 DZ&GDL literal 0 HcmV?d00001 diff --git a/week-0/day-3/my_todo_app/venvironment/lib/python3.6/site-packages/pip/basecommand.py b/week-0/day-3/my_todo_app/venvironment/lib/python3.6/site-packages/pip/basecommand.py new file mode 100644 index 00000000..54c67067 --- /dev/null +++ b/week-0/day-3/my_todo_app/venvironment/lib/python3.6/site-packages/pip/basecommand.py @@ -0,0 +1,337 @@ +"""Base Command class, and related routines""" +from __future__ import absolute_import + +import logging +import os +import sys +import optparse +import warnings + +from pip import cmdoptions +from pip.index import PackageFinder +from pip.locations import running_under_virtualenv +from pip.download import PipSession +from pip.exceptions import (BadCommand, InstallationError, UninstallationError, + CommandError, PreviousBuildDirError) + +from pip.compat import logging_dictConfig +from pip.baseparser import ConfigOptionParser, UpdatingDefaultsHelpFormatter +from pip.req import InstallRequirement, parse_requirements +from pip.status_codes import ( + SUCCESS, ERROR, UNKNOWN_ERROR, VIRTUALENV_NOT_FOUND, + PREVIOUS_BUILD_DIR_ERROR, +) +from pip.utils import deprecation, get_prog, normalize_path +from pip.utils.logging import IndentingFormatter +from pip.utils.outdated import pip_version_check + + +__all__ = ['Command'] + + +logger = logging.getLogger(__name__) + + +class Command(object): + name = None + usage = None + hidden = False + log_streams = ("ext://sys.stdout", "ext://sys.stderr") + + def __init__(self, isolated=False): + parser_kw = { + 'usage': self.usage, + 'prog': '%s %s' % (get_prog(), self.name), + 'formatter': UpdatingDefaultsHelpFormatter(), + 'add_help_option': False, + 'name': self.name, + 'description': self.__doc__, + 'isolated': isolated, + } + + self.parser = ConfigOptionParser(**parser_kw) + + # Commands should add options to this option group + optgroup_name = '%s Options' % self.name.capitalize() + self.cmd_opts = optparse.OptionGroup(self.parser, optgroup_name) + + # Add the general options + gen_opts = cmdoptions.make_option_group( + cmdoptions.general_group, + self.parser, + ) + self.parser.add_option_group(gen_opts) + + def _build_session(self, options, retries=None, timeout=None): + session = PipSession( + cache=( + normalize_path(os.path.join(options.cache_dir, "http")) + if options.cache_dir else None + ), + retries=retries if retries is not None else options.retries, + insecure_hosts=options.trusted_hosts, + ) + + # Handle custom ca-bundles from the user + if options.cert: + session.verify = options.cert + + # Handle SSL client certificate + if options.client_cert: + session.cert = options.client_cert + + # Handle timeouts + if options.timeout or timeout: + session.timeout = ( + timeout if timeout is not None else options.timeout + ) + + # Handle configured proxies + if options.proxy: + session.proxies = { + "http": options.proxy, + "https": options.proxy, + } + + # Determine if we can prompt the user for authentication or not + session.auth.prompting = not options.no_input + + return session + + def parse_args(self, args): + # factored out for testability + return self.parser.parse_args(args) + + def main(self, args): + options, args = self.parse_args(args) + + if options.quiet: + if options.quiet == 1: + level = "WARNING" + if options.quiet == 2: + level = "ERROR" + else: + level = "CRITICAL" + elif options.verbose: + level = "DEBUG" + else: + level = "INFO" + + # The root logger should match the "console" level *unless* we + # specified "--log" to send debug logs to a file. + root_level = level + if options.log: + root_level = "DEBUG" + + logging_dictConfig({ + "version": 1, + "disable_existing_loggers": False, + "filters": { + "exclude_warnings": { + "()": "pip.utils.logging.MaxLevelFilter", + "level": logging.WARNING, + }, + }, + "formatters": { + "indent": { + "()": IndentingFormatter, + "format": "%(message)s", + }, + }, + "handlers": { + "console": { + "level": level, + "class": "pip.utils.logging.ColorizedStreamHandler", + "stream": self.log_streams[0], + "filters": ["exclude_warnings"], + "formatter": "indent", + }, + "console_errors": { + "level": "WARNING", + "class": "pip.utils.logging.ColorizedStreamHandler", + "stream": self.log_streams[1], + "formatter": "indent", + }, + "user_log": { + "level": "DEBUG", + "class": "pip.utils.logging.BetterRotatingFileHandler", + "filename": options.log or "/dev/null", + "delay": True, + "formatter": "indent", + }, + }, + "root": { + "level": root_level, + "handlers": list(filter(None, [ + "console", + "console_errors", + "user_log" if options.log else None, + ])), + }, + # Disable any logging besides WARNING unless we have DEBUG level + # logging enabled. These use both pip._vendor and the bare names + # for the case where someone unbundles our libraries. + "loggers": dict( + ( + name, + { + "level": ( + "WARNING" + if level in ["INFO", "ERROR"] + else "DEBUG" + ), + }, + ) + for name in ["pip._vendor", "distlib", "requests", "urllib3"] + ), + }) + + if sys.version_info[:2] == (2, 6): + warnings.warn( + "Python 2.6 is no longer supported by the Python core team, " + "please upgrade your Python. A future version of pip will " + "drop support for Python 2.6", + deprecation.Python26DeprecationWarning + ) + + # TODO: try to get these passing down from the command? + # without resorting to os.environ to hold these. + + if options.no_input: + os.environ['PIP_NO_INPUT'] = '1' + + if options.exists_action: + os.environ['PIP_EXISTS_ACTION'] = ' '.join(options.exists_action) + + if options.require_venv: + # If a venv is required check if it can really be found + if not running_under_virtualenv(): + logger.critical( + 'Could not find an activated virtualenv (required).' + ) + sys.exit(VIRTUALENV_NOT_FOUND) + + try: + status = self.run(options, args) + # FIXME: all commands should return an exit status + # and when it is done, isinstance is not needed anymore + if isinstance(status, int): + return status + except PreviousBuildDirError as exc: + logger.critical(str(exc)) + logger.debug('Exception information:', exc_info=True) + + return PREVIOUS_BUILD_DIR_ERROR + except (InstallationError, UninstallationError, BadCommand) as exc: + logger.critical(str(exc)) + logger.debug('Exception information:', exc_info=True) + + return ERROR + except CommandError as exc: + logger.critical('ERROR: %s', exc) + logger.debug('Exception information:', exc_info=True) + + return ERROR + except KeyboardInterrupt: + logger.critical('Operation cancelled by user') + logger.debug('Exception information:', exc_info=True) + + return ERROR + except: + logger.critical('Exception:', exc_info=True) + + return UNKNOWN_ERROR + finally: + # Check if we're using the latest version of pip available + if (not options.disable_pip_version_check and not + getattr(options, "no_index", False)): + with self._build_session( + options, + retries=0, + timeout=min(5, options.timeout)) as session: + pip_version_check(session) + + return SUCCESS + + +class RequirementCommand(Command): + + @staticmethod + def populate_requirement_set(requirement_set, args, options, finder, + session, name, wheel_cache): + """ + Marshal cmd line args into a requirement set. + """ + for filename in options.constraints: + for req in parse_requirements( + filename, + constraint=True, finder=finder, options=options, + session=session, wheel_cache=wheel_cache): + requirement_set.add_requirement(req) + + for req in args: + requirement_set.add_requirement( + InstallRequirement.from_line( + req, None, isolated=options.isolated_mode, + wheel_cache=wheel_cache + ) + ) + + for req in options.editables: + requirement_set.add_requirement( + InstallRequirement.from_editable( + req, + default_vcs=options.default_vcs, + isolated=options.isolated_mode, + wheel_cache=wheel_cache + ) + ) + + found_req_in_file = False + for filename in options.requirements: + for req in parse_requirements( + filename, + finder=finder, options=options, session=session, + wheel_cache=wheel_cache): + found_req_in_file = True + requirement_set.add_requirement(req) + # If --require-hashes was a line in a requirements file, tell + # RequirementSet about it: + requirement_set.require_hashes = options.require_hashes + + if not (args or options.editables or found_req_in_file): + opts = {'name': name} + if options.find_links: + msg = ('You must give at least one requirement to ' + '%(name)s (maybe you meant "pip %(name)s ' + '%(links)s"?)' % + dict(opts, links=' '.join(options.find_links))) + else: + msg = ('You must give at least one requirement ' + 'to %(name)s (see "pip help %(name)s")' % opts) + logger.warning(msg) + + def _build_package_finder(self, options, session, + platform=None, python_versions=None, + abi=None, implementation=None): + """ + Create a package finder appropriate to this requirement command. + """ + index_urls = [options.index_url] + options.extra_index_urls + if options.no_index: + logger.debug('Ignoring indexes: %s', ','.join(index_urls)) + index_urls = [] + + return PackageFinder( + find_links=options.find_links, + format_control=options.format_control, + index_urls=index_urls, + trusted_hosts=options.trusted_hosts, + allow_all_prereleases=options.pre, + process_dependency_links=options.process_dependency_links, + session=session, + platform=platform, + versions=python_versions, + abi=abi, + implementation=implementation, + ) diff --git a/week-0/day-3/my_todo_app/venvironment/lib/python3.6/site-packages/pip/baseparser.py b/week-0/day-3/my_todo_app/venvironment/lib/python3.6/site-packages/pip/baseparser.py new file mode 100644 index 00000000..2dd45330 --- /dev/null +++ b/week-0/day-3/my_todo_app/venvironment/lib/python3.6/site-packages/pip/baseparser.py @@ -0,0 +1,293 @@ +"""Base option parser setup""" +from __future__ import absolute_import + +import sys +import optparse +import os +import re +import textwrap +from distutils.util import strtobool + +from pip._vendor.six import string_types +from pip._vendor.six.moves import configparser +from pip.locations import ( + legacy_config_file, config_basename, running_under_virtualenv, + site_config_files +) +from pip.utils import appdirs, get_terminal_size + + +_environ_prefix_re = re.compile(r"^PIP_", re.I) + + +class PrettyHelpFormatter(optparse.IndentedHelpFormatter): + """A prettier/less verbose help formatter for optparse.""" + + def __init__(self, *args, **kwargs): + # help position must be aligned with __init__.parseopts.description + kwargs['max_help_position'] = 30 + kwargs['indent_increment'] = 1 + kwargs['width'] = get_terminal_size()[0] - 2 + optparse.IndentedHelpFormatter.__init__(self, *args, **kwargs) + + def format_option_strings(self, option): + return self._format_option_strings(option, ' <%s>', ', ') + + def _format_option_strings(self, option, mvarfmt=' <%s>', optsep=', '): + """ + Return a comma-separated list of option strings and metavars. + + :param option: tuple of (short opt, long opt), e.g: ('-f', '--format') + :param mvarfmt: metavar format string - evaluated as mvarfmt % metavar + :param optsep: separator + """ + opts = [] + + if option._short_opts: + opts.append(option._short_opts[0]) + if option._long_opts: + opts.append(option._long_opts[0]) + if len(opts) > 1: + opts.insert(1, optsep) + + if option.takes_value(): + metavar = option.metavar or option.dest.lower() + opts.append(mvarfmt % metavar.lower()) + + return ''.join(opts) + + def format_heading(self, heading): + if heading == 'Options': + return '' + return heading + ':\n' + + def format_usage(self, usage): + """ + Ensure there is only one newline between usage and the first heading + if there is no description. + """ + msg = '\nUsage: %s\n' % self.indent_lines(textwrap.dedent(usage), " ") + return msg + + def format_description(self, description): + # leave full control over description to us + if description: + if hasattr(self.parser, 'main'): + label = 'Commands' + else: + label = 'Description' + # some doc strings have initial newlines, some don't + description = description.lstrip('\n') + # some doc strings have final newlines and spaces, some don't + description = description.rstrip() + # dedent, then reindent + description = self.indent_lines(textwrap.dedent(description), " ") + description = '%s:\n%s\n' % (label, description) + return description + else: + return '' + + def format_epilog(self, epilog): + # leave full control over epilog to us + if epilog: + return epilog + else: + return '' + + def indent_lines(self, text, indent): + new_lines = [indent + line for line in text.split('\n')] + return "\n".join(new_lines) + + +class UpdatingDefaultsHelpFormatter(PrettyHelpFormatter): + """Custom help formatter for use in ConfigOptionParser. + + This is updates the defaults before expanding them, allowing + them to show up correctly in the help listing. + """ + + def expand_default(self, option): + if self.parser is not None: + self.parser._update_defaults(self.parser.defaults) + return optparse.IndentedHelpFormatter.expand_default(self, option) + + +class CustomOptionParser(optparse.OptionParser): + + def insert_option_group(self, idx, *args, **kwargs): + """Insert an OptionGroup at a given position.""" + group = self.add_option_group(*args, **kwargs) + + self.option_groups.pop() + self.option_groups.insert(idx, group) + + return group + + @property + def option_list_all(self): + """Get a list of all options, including those in option groups.""" + res = self.option_list[:] + for i in self.option_groups: + res.extend(i.option_list) + + return res + + +class ConfigOptionParser(CustomOptionParser): + """Custom option parser which updates its defaults by checking the + configuration files and environmental variables""" + + isolated = False + + def __init__(self, *args, **kwargs): + self.config = configparser.RawConfigParser() + self.name = kwargs.pop('name') + self.isolated = kwargs.pop("isolated", False) + self.files = self.get_config_files() + if self.files: + self.config.read(self.files) + assert self.name + optparse.OptionParser.__init__(self, *args, **kwargs) + + def get_config_files(self): + # the files returned by this method will be parsed in order with the + # first files listed being overridden by later files in standard + # ConfigParser fashion + config_file = os.environ.get('PIP_CONFIG_FILE', False) + if config_file == os.devnull: + return [] + + # at the base we have any site-wide configuration + files = list(site_config_files) + + # per-user configuration next + if not self.isolated: + if config_file and os.path.exists(config_file): + files.append(config_file) + else: + # This is the legacy config file, we consider it to be a lower + # priority than the new file location. + files.append(legacy_config_file) + + # This is the new config file, we consider it to be a higher + # priority than the legacy file. + files.append( + os.path.join( + appdirs.user_config_dir("pip"), + config_basename, + ) + ) + + # finally virtualenv configuration first trumping others + if running_under_virtualenv(): + venv_config_file = os.path.join( + sys.prefix, + config_basename, + ) + if os.path.exists(venv_config_file): + files.append(venv_config_file) + + return files + + def check_default(self, option, key, val): + try: + return option.check_value(key, val) + except optparse.OptionValueError as exc: + print("An error occurred during configuration: %s" % exc) + sys.exit(3) + + def _update_defaults(self, defaults): + """Updates the given defaults with values from the config files and + the environ. Does a little special handling for certain types of + options (lists).""" + # Then go and look for the other sources of configuration: + config = {} + # 1. config files + for section in ('global', self.name): + config.update( + self.normalize_keys(self.get_config_section(section)) + ) + # 2. environmental variables + if not self.isolated: + config.update(self.normalize_keys(self.get_environ_vars())) + # Accumulate complex default state. + self.values = optparse.Values(self.defaults) + late_eval = set() + # Then set the options with those values + for key, val in config.items(): + # ignore empty values + if not val: + continue + + option = self.get_option(key) + # Ignore options not present in this parser. E.g. non-globals put + # in [global] by users that want them to apply to all applicable + # commands. + if option is None: + continue + + if option.action in ('store_true', 'store_false', 'count'): + val = strtobool(val) + elif option.action == 'append': + val = val.split() + val = [self.check_default(option, key, v) for v in val] + elif option.action == 'callback': + late_eval.add(option.dest) + opt_str = option.get_opt_string() + val = option.convert_value(opt_str, val) + # From take_action + args = option.callback_args or () + kwargs = option.callback_kwargs or {} + option.callback(option, opt_str, val, self, *args, **kwargs) + else: + val = self.check_default(option, key, val) + + defaults[option.dest] = val + + for key in late_eval: + defaults[key] = getattr(self.values, key) + self.values = None + return defaults + + def normalize_keys(self, items): + """Return a config dictionary with normalized keys regardless of + whether the keys were specified in environment variables or in config + files""" + normalized = {} + for key, val in items: + key = key.replace('_', '-') + if not key.startswith('--'): + key = '--%s' % key # only prefer long opts + normalized[key] = val + return normalized + + def get_config_section(self, name): + """Get a section of a configuration""" + if self.config.has_section(name): + return self.config.items(name) + return [] + + def get_environ_vars(self): + """Returns a generator with all environmental vars with prefix PIP_""" + for key, val in os.environ.items(): + if _environ_prefix_re.search(key): + yield (_environ_prefix_re.sub("", key).lower(), val) + + def get_default_values(self): + """Overriding to make updating the defaults after instantiation of + the option parser possible, _update_defaults() does the dirty work.""" + if not self.process_default_values: + # Old, pre-Optik 1.5 behaviour. + return optparse.Values(self.defaults) + + defaults = self._update_defaults(self.defaults.copy()) # ours + for option in self._get_all_options(): + default = defaults.get(option.dest) + if isinstance(default, string_types): + opt_str = option.get_opt_string() + defaults[option.dest] = option.check_value(opt_str, default) + return optparse.Values(defaults) + + def error(self, msg): + self.print_usage(sys.stderr) + self.exit(2, "%s\n" % msg) diff --git a/week-0/day-3/my_todo_app/venvironment/lib/python3.6/site-packages/pip/cmdoptions.py b/week-0/day-3/my_todo_app/venvironment/lib/python3.6/site-packages/pip/cmdoptions.py new file mode 100644 index 00000000..f75c0930 --- /dev/null +++ b/week-0/day-3/my_todo_app/venvironment/lib/python3.6/site-packages/pip/cmdoptions.py @@ -0,0 +1,633 @@ +""" +shared options and groups + +The principle here is to define options once, but *not* instantiate them +globally. One reason being that options with action='append' can carry state +between parses. pip parses general options twice internally, and shouldn't +pass on state. To be consistent, all options will follow this design. + +""" +from __future__ import absolute_import + +from functools import partial +from optparse import OptionGroup, SUPPRESS_HELP, Option +import warnings + +from pip.index import ( + FormatControl, fmt_ctl_handle_mutual_exclude, fmt_ctl_no_binary, + fmt_ctl_no_use_wheel) +from pip.models import PyPI +from pip.locations import USER_CACHE_DIR, src_prefix +from pip.utils.hashes import STRONG_HASHES + + +def make_option_group(group, parser): + """ + Return an OptionGroup object + group -- assumed to be dict with 'name' and 'options' keys + parser -- an optparse Parser + """ + option_group = OptionGroup(parser, group['name']) + for option in group['options']: + option_group.add_option(option()) + return option_group + + +def resolve_wheel_no_use_binary(options): + if not options.use_wheel: + control = options.format_control + fmt_ctl_no_use_wheel(control) + + +def check_install_build_global(options, check_options=None): + """Disable wheels if per-setup.py call options are set. + + :param options: The OptionParser options to update. + :param check_options: The options to check, if not supplied defaults to + options. + """ + if check_options is None: + check_options = options + + def getname(n): + return getattr(check_options, n, None) + names = ["build_options", "global_options", "install_options"] + if any(map(getname, names)): + control = options.format_control + fmt_ctl_no_binary(control) + warnings.warn( + 'Disabling all use of wheels due to the use of --build-options ' + '/ --global-options / --install-options.', stacklevel=2) + + +########### +# options # +########### + +help_ = partial( + Option, + '-h', '--help', + dest='help', + action='help', + help='Show help.') + +isolated_mode = partial( + Option, + "--isolated", + dest="isolated_mode", + action="store_true", + default=False, + help=( + "Run pip in an isolated mode, ignoring environment variables and user " + "configuration." + ), +) + +require_virtualenv = partial( + Option, + # Run only if inside a virtualenv, bail if not. + '--require-virtualenv', '--require-venv', + dest='require_venv', + action='store_true', + default=False, + help=SUPPRESS_HELP) + +verbose = partial( + Option, + '-v', '--verbose', + dest='verbose', + action='count', + default=0, + help='Give more output. Option is additive, and can be used up to 3 times.' +) + +version = partial( + Option, + '-V', '--version', + dest='version', + action='store_true', + help='Show version and exit.') + +quiet = partial( + Option, + '-q', '--quiet', + dest='quiet', + action='count', + default=0, + help=('Give less output. Option is additive, and can be used up to 3' + ' times (corresponding to WARNING, ERROR, and CRITICAL logging' + ' levels).') +) + +log = partial( + Option, + "--log", "--log-file", "--local-log", + dest="log", + metavar="path", + help="Path to a verbose appending log." +) + +no_input = partial( + Option, + # Don't ask for input + '--no-input', + dest='no_input', + action='store_true', + default=False, + help=SUPPRESS_HELP) + +proxy = partial( + Option, + '--proxy', + dest='proxy', + type='str', + default='', + help="Specify a proxy in the form [user:passwd@]proxy.server:port.") + +retries = partial( + Option, + '--retries', + dest='retries', + type='int', + default=5, + help="Maximum number of retries each connection should attempt " + "(default %default times).") + +timeout = partial( + Option, + '--timeout', '--default-timeout', + metavar='sec', + dest='timeout', + type='float', + default=15, + help='Set the socket timeout (default %default seconds).') + +default_vcs = partial( + Option, + # The default version control system for editables, e.g. 'svn' + '--default-vcs', + dest='default_vcs', + type='str', + default='', + help=SUPPRESS_HELP) + +skip_requirements_regex = partial( + Option, + # A regex to be used to skip requirements + '--skip-requirements-regex', + dest='skip_requirements_regex', + type='str', + default='', + help=SUPPRESS_HELP) + + +def exists_action(): + return Option( + # Option when path already exist + '--exists-action', + dest='exists_action', + type='choice', + choices=['s', 'i', 'w', 'b', 'a'], + default=[], + action='append', + metavar='action', + help="Default action when a path already exists: " + "(s)witch, (i)gnore, (w)ipe, (b)ackup, (a)bort.") + + +cert = partial( + Option, + '--cert', + dest='cert', + type='str', + metavar='path', + help="Path to alternate CA bundle.") + +client_cert = partial( + Option, + '--client-cert', + dest='client_cert', + type='str', + default=None, + metavar='path', + help="Path to SSL client certificate, a single file containing the " + "private key and the certificate in PEM format.") + +index_url = partial( + Option, + '-i', '--index-url', '--pypi-url', + dest='index_url', + metavar='URL', + default=PyPI.simple_url, + help="Base URL of Python Package Index (default %default). " + "This should point to a repository compliant with PEP 503 " + "(the simple repository API) or a local directory laid out " + "in the same format.") + + +def extra_index_url(): + return Option( + '--extra-index-url', + dest='extra_index_urls', + metavar='URL', + action='append', + default=[], + help="Extra URLs of package indexes to use in addition to " + "--index-url. Should follow the same rules as " + "--index-url." + ) + + +no_index = partial( + Option, + '--no-index', + dest='no_index', + action='store_true', + default=False, + help='Ignore package index (only looking at --find-links URLs instead).') + + +def find_links(): + return Option( + '-f', '--find-links', + dest='find_links', + action='append', + default=[], + metavar='url', + help="If a url or path to an html file, then parse for links to " + "archives. If a local path or file:// url that's a directory, " + "then look for archives in the directory listing.") + + +def allow_external(): + return Option( + "--allow-external", + dest="allow_external", + action="append", + default=[], + metavar="PACKAGE", + help=SUPPRESS_HELP, + ) + + +allow_all_external = partial( + Option, + "--allow-all-external", + dest="allow_all_external", + action="store_true", + default=False, + help=SUPPRESS_HELP, +) + + +def trusted_host(): + return Option( + "--trusted-host", + dest="trusted_hosts", + action="append", + metavar="HOSTNAME", + default=[], + help="Mark this host as trusted, even though it does not have valid " + "or any HTTPS.", + ) + + +# Remove after 7.0 +no_allow_external = partial( + Option, + "--no-allow-external", + dest="allow_all_external", + action="store_false", + default=False, + help=SUPPRESS_HELP, +) + + +# Remove --allow-insecure after 7.0 +def allow_unsafe(): + return Option( + "--allow-unverified", "--allow-insecure", + dest="allow_unverified", + action="append", + default=[], + metavar="PACKAGE", + help=SUPPRESS_HELP, + ) + +# Remove after 7.0 +no_allow_unsafe = partial( + Option, + "--no-allow-insecure", + dest="allow_all_insecure", + action="store_false", + default=False, + help=SUPPRESS_HELP +) + +# Remove after 1.5 +process_dependency_links = partial( + Option, + "--process-dependency-links", + dest="process_dependency_links", + action="store_true", + default=False, + help="Enable the processing of dependency links.", +) + + +def constraints(): + return Option( + '-c', '--constraint', + dest='constraints', + action='append', + default=[], + metavar='file', + help='Constrain versions using the given constraints file. ' + 'This option can be used multiple times.') + + +def requirements(): + return Option( + '-r', '--requirement', + dest='requirements', + action='append', + default=[], + metavar='file', + help='Install from the given requirements file. ' + 'This option can be used multiple times.') + + +def editable(): + return Option( + '-e', '--editable', + dest='editables', + action='append', + default=[], + metavar='path/url', + help=('Install a project in editable mode (i.e. setuptools ' + '"develop mode") from a local project path or a VCS url.'), + ) + +src = partial( + Option, + '--src', '--source', '--source-dir', '--source-directory', + dest='src_dir', + metavar='dir', + default=src_prefix, + help='Directory to check out editable projects into. ' + 'The default in a virtualenv is "/src". ' + 'The default for global installs is "/src".' +) + +# XXX: deprecated, remove in 9.0 +use_wheel = partial( + Option, + '--use-wheel', + dest='use_wheel', + action='store_true', + default=True, + help=SUPPRESS_HELP, +) + +# XXX: deprecated, remove in 9.0 +no_use_wheel = partial( + Option, + '--no-use-wheel', + dest='use_wheel', + action='store_false', + default=True, + help=('Do not Find and prefer wheel archives when searching indexes and ' + 'find-links locations. DEPRECATED in favour of --no-binary.'), +) + + +def _get_format_control(values, option): + """Get a format_control object.""" + return getattr(values, option.dest) + + +def _handle_no_binary(option, opt_str, value, parser): + existing = getattr(parser.values, option.dest) + fmt_ctl_handle_mutual_exclude( + value, existing.no_binary, existing.only_binary) + + +def _handle_only_binary(option, opt_str, value, parser): + existing = getattr(parser.values, option.dest) + fmt_ctl_handle_mutual_exclude( + value, existing.only_binary, existing.no_binary) + + +def no_binary(): + return Option( + "--no-binary", dest="format_control", action="callback", + callback=_handle_no_binary, type="str", + default=FormatControl(set(), set()), + help="Do not use binary packages. Can be supplied multiple times, and " + "each time adds to the existing value. Accepts either :all: to " + "disable all binary packages, :none: to empty the set, or one or " + "more package names with commas between them. Note that some " + "packages are tricky to compile and may fail to install when " + "this option is used on them.") + + +def only_binary(): + return Option( + "--only-binary", dest="format_control", action="callback", + callback=_handle_only_binary, type="str", + default=FormatControl(set(), set()), + help="Do not use source packages. Can be supplied multiple times, and " + "each time adds to the existing value. Accepts either :all: to " + "disable all source packages, :none: to empty the set, or one or " + "more package names with commas between them. Packages without " + "binary distributions will fail to install when this option is " + "used on them.") + + +cache_dir = partial( + Option, + "--cache-dir", + dest="cache_dir", + default=USER_CACHE_DIR, + metavar="dir", + help="Store the cache data in ." +) + +no_cache = partial( + Option, + "--no-cache-dir", + dest="cache_dir", + action="store_false", + help="Disable the cache.", +) + +no_deps = partial( + Option, + '--no-deps', '--no-dependencies', + dest='ignore_dependencies', + action='store_true', + default=False, + help="Don't install package dependencies.") + +build_dir = partial( + Option, + '-b', '--build', '--build-dir', '--build-directory', + dest='build_dir', + metavar='dir', + help='Directory to unpack packages into and build in.' +) + +ignore_requires_python = partial( + Option, + '--ignore-requires-python', + dest='ignore_requires_python', + action='store_true', + help='Ignore the Requires-Python information.') + +install_options = partial( + Option, + '--install-option', + dest='install_options', + action='append', + metavar='options', + help="Extra arguments to be supplied to the setup.py install " + "command (use like --install-option=\"--install-scripts=/usr/local/" + "bin\"). Use multiple --install-option options to pass multiple " + "options to setup.py install. If you are using an option with a " + "directory path, be sure to use absolute path.") + +global_options = partial( + Option, + '--global-option', + dest='global_options', + action='append', + metavar='options', + help="Extra global options to be supplied to the setup.py " + "call before the install command.") + +no_clean = partial( + Option, + '--no-clean', + action='store_true', + default=False, + help="Don't clean up build directories.") + +pre = partial( + Option, + '--pre', + action='store_true', + default=False, + help="Include pre-release and development versions. By default, " + "pip only finds stable versions.") + +disable_pip_version_check = partial( + Option, + "--disable-pip-version-check", + dest="disable_pip_version_check", + action="store_true", + default=True, + help="Don't periodically check PyPI to determine whether a new version " + "of pip is available for download. Implied with --no-index.") + +# Deprecated, Remove later +always_unzip = partial( + Option, + '-Z', '--always-unzip', + dest='always_unzip', + action='store_true', + help=SUPPRESS_HELP, +) + + +def _merge_hash(option, opt_str, value, parser): + """Given a value spelled "algo:digest", append the digest to a list + pointed to in a dict by the algo name.""" + if not parser.values.hashes: + parser.values.hashes = {} + try: + algo, digest = value.split(':', 1) + except ValueError: + parser.error('Arguments to %s must be a hash name ' + 'followed by a value, like --hash=sha256:abcde...' % + opt_str) + if algo not in STRONG_HASHES: + parser.error('Allowed hash algorithms for %s are %s.' % + (opt_str, ', '.join(STRONG_HASHES))) + parser.values.hashes.setdefault(algo, []).append(digest) + + +hash = partial( + Option, + '--hash', + # Hash values eventually end up in InstallRequirement.hashes due to + # __dict__ copying in process_line(). + dest='hashes', + action='callback', + callback=_merge_hash, + type='string', + help="Verify that the package's archive matches this " + 'hash before installing. Example: --hash=sha256:abcdef...') + + +require_hashes = partial( + Option, + '--require-hashes', + dest='require_hashes', + action='store_true', + default=False, + help='Require a hash to check each requirement against, for ' + 'repeatable installs. This option is implied when any package in a ' + 'requirements file has a --hash option.') + + +########## +# groups # +########## + +general_group = { + 'name': 'General Options', + 'options': [ + help_, + isolated_mode, + require_virtualenv, + verbose, + version, + quiet, + log, + no_input, + proxy, + retries, + timeout, + default_vcs, + skip_requirements_regex, + exists_action, + trusted_host, + cert, + client_cert, + cache_dir, + no_cache, + disable_pip_version_check, + ] +} + +non_deprecated_index_group = { + 'name': 'Package Index Options', + 'options': [ + index_url, + extra_index_url, + no_index, + find_links, + process_dependency_links, + ] +} + +index_group = { + 'name': 'Package Index Options (including deprecated options)', + 'options': non_deprecated_index_group['options'] + [ + allow_external, + allow_all_external, + no_allow_external, + allow_unsafe, + no_allow_unsafe, + ] +} diff --git a/week-0/day-3/my_todo_app/venvironment/lib/python3.6/site-packages/pip/commands/__init__.py b/week-0/day-3/my_todo_app/venvironment/lib/python3.6/site-packages/pip/commands/__init__.py new file mode 100644 index 00000000..62c64ebe --- /dev/null +++ b/week-0/day-3/my_todo_app/venvironment/lib/python3.6/site-packages/pip/commands/__init__.py @@ -0,0 +1,86 @@ +""" +Package containing all pip commands +""" +from __future__ import absolute_import + +from pip.commands.completion import CompletionCommand +from pip.commands.download import DownloadCommand +from pip.commands.freeze import FreezeCommand +from pip.commands.hash import HashCommand +from pip.commands.help import HelpCommand +from pip.commands.list import ListCommand +from pip.commands.check import CheckCommand +from pip.commands.search import SearchCommand +from pip.commands.show import ShowCommand +from pip.commands.install import InstallCommand +from pip.commands.uninstall import UninstallCommand +from pip.commands.wheel import WheelCommand + + +commands_dict = { + CompletionCommand.name: CompletionCommand, + FreezeCommand.name: FreezeCommand, + HashCommand.name: HashCommand, + HelpCommand.name: HelpCommand, + SearchCommand.name: SearchCommand, + ShowCommand.name: ShowCommand, + InstallCommand.name: InstallCommand, + UninstallCommand.name: UninstallCommand, + DownloadCommand.name: DownloadCommand, + ListCommand.name: ListCommand, + CheckCommand.name: CheckCommand, + WheelCommand.name: WheelCommand, +} + + +commands_order = [ + InstallCommand, + DownloadCommand, + UninstallCommand, + FreezeCommand, + ListCommand, + ShowCommand, + CheckCommand, + SearchCommand, + WheelCommand, + HashCommand, + CompletionCommand, + HelpCommand, +] + + +def get_summaries(ordered=True): + """Yields sorted (command name, command summary) tuples.""" + + if ordered: + cmditems = _sort_commands(commands_dict, commands_order) + else: + cmditems = commands_dict.items() + + for name, command_class in cmditems: + yield (name, command_class.summary) + + +def get_similar_commands(name): + """Command name auto-correct.""" + from difflib import get_close_matches + + name = name.lower() + + close_commands = get_close_matches(name, commands_dict.keys()) + + if close_commands: + return close_commands[0] + else: + return False + + +def _sort_commands(cmddict, order): + def keyfn(key): + try: + return order.index(key[1]) + except ValueError: + # unordered items should come last + return 0xff + + return sorted(cmddict.items(), key=keyfn) diff --git a/week-0/day-3/my_todo_app/venvironment/lib/python3.6/site-packages/pip/commands/__pycache__/__init__.cpython-36.pyc b/week-0/day-3/my_todo_app/venvironment/lib/python3.6/site-packages/pip/commands/__pycache__/__init__.cpython-36.pyc new file mode 100644 index 0000000000000000000000000000000000000000..d3a37b043ed9502d07e02d7ae7292a62325285fb GIT binary patch literal 2028 zcmZux-EP}96ecOzRux%s9M?(RpLqk?)xhdrtlNO0C<>%2HekqFq-!@}g`kLZtc0{Y zQeK+Cxk`ZTW)HIW*i-0sSAB)uZ0FE%Vz-sRPv?g};>VBY^LpK1eg4(!zdb_!Aq&qY z*pH!^JCqPkBEl(Wk}4K4inb#i!ri|v zT;TzF!Uyz402qiSU{kaJTcQov7Mp;Zq6%0QAz&yPfDO?B>|{Z71Nu~+dHJUd3@V{mZS&Cp6I6es7SI=HrneZ zQg+AL7(z-VBX0b+$a9aDtI4j(<)jdCrpCE0AhfoXtFaVCmXE-~?%3~1emIhO!Y@Ph zr&@?(aT!?oHZj9RSIF^#`+a7LOE=gWiuB;pukVONr;EdPhWX)TKKyQE3fRVFr12wc z?VVWgYAD3K&x;gvV;>jLftEruUjs~uZWN@T1v_OYbmSFu-#H~G^v#VaeL`Nheqkr< z#F?_Gv+oYrOG3%7w_btffMIt0#m||L+;k1_C3yF4I%BCjN|g9)PI1>vfIEHE>lPDW z)AYA{l`@QROng4Tl=Zn4^DHgO@WRbC7rLxug;1uf&8Kq9noS5^da2^Gtc%ND%oL|G zG3GC#@$&rp;C`XT_u=60?M^bu?`6Lo3`eOE7_x1?;QcrTp%ii4A0L(VJyFE7H8Wuz zAZI=RaaICN~fd%GEWH*&ZbQFr;O8U zWQTAEnhV5MjyqcmOm>q=k>5*mtwmb&H6A636aOuhxe>8SigYNMr5@8= z@Kc6Sc#wj*&dd#PekTKpRGfJytUw~@DS=Hpe=^vtyM4hQ?ra6xIy7?^;3)iq?85-$ z=M*I8f=~~9{RssbLeYWYKS4Q!Nu2GsIQZ><06hkB8FBHZ^j{`&BEHc&*Fcy9`-e}( z3TI)P6^IW;Kj4~BcL|}4hBRcyH*j~_U}=Bd$w40rheT-*C}hDN7S&s z1HS$g0Tl@SZ2+0os{q^34AMksP@6@1^hNLEvKGfYPvf}s<9IMBCR)U?MsCXu5Nm&a zT4?YqFi6f4Q#p670j$HWrk3%dWm{?xg*xIJ?7QM5yfg-2z^vl-LROgjVqvp!?Qfe|Ud%BLvY}F5GA>vTFXdc1O}3{#UA2=f>=h-0=YDS0S66G6b6CYkc434JHjd4#I?RFyuwd>j2M~)EZpFv_ZCr)`X3PW8QC~VMDg!v z5PX6C(D?xC;H)Z&tfb%`y_4G^JcMl8@SkSEb6$ zF1Le#a|))O!o*O5DM|>%i9<=^QYZ1i_o++04=4$!Z&2v|nK|+X!s_K8O!DzE{&rei zXZbvvFcnX;D;DQfQD+Sw2^LdUvy!qh=S&T?XOXWCqu7q4T2_WO`pcjkN3v~Tc=k4S^g}uXd&*pn~`CSk8@6DVIbZsFn(Bg*+ z)Vbq*l+4R1D8e6OI2o z{(H*vY0OnzR?Qu`!`1ONcba|6H%+%opuzF7YPY=GwBZ*FjIF*uui}xc=B&Iu!wMxH zS8Yj$gFqU|O2fGBLmOr+Z_+X=m=3O(R3IAdfS|N5s>y^&?ecP54I(IliLnlDTBhAh zPL%eH*pz-yaHV)TG0IdRz`W6iyu1^`PTVysv@>T*y|<%d?Pqz@X5wEY9|5xeUz{{W zeNyxKc+_%1kNMSnTIPzGkTuxcTncq!g*B{~+L3K}0BcnY6T*GmClS6+4zP;}en<}O zI|47nE?M2*)%6gTo)1DDrk05`)lr%j6>S9rzn`WHfMz&?uOLlnm4oA2(!5rI{B@vO zz$2IP37l<9*qI)i82oXdJuqc74iEr@F&iK3>A=tp6zY3W;c%2Gc2l7=w^lzi(W+(= zZWmnZp{;t`#Gd&HZo5#nv$_Y}`_1-Feg{kCzM0JFJBSR&(!kQ;&)Yg*8|`ed5ugtD HoyhqLvlU-I literal 0 HcmV?d00001 diff --git a/week-0/day-3/my_todo_app/venvironment/lib/python3.6/site-packages/pip/commands/__pycache__/completion.cpython-36.pyc b/week-0/day-3/my_todo_app/venvironment/lib/python3.6/site-packages/pip/commands/__pycache__/completion.cpython-36.pyc new file mode 100644 index 0000000000000000000000000000000000000000..6bffb1613a089e1a95091e774dce0034b007e598 GIT binary patch literal 2600 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 X+*DCE(zG1Y!RgN*ScBQDxRw6^DeX%u literal 0 HcmV?d00001 diff --git a/week-0/day-3/my_todo_app/venvironment/lib/python3.6/site-packages/pip/commands/__pycache__/freeze.cpython-36.pyc b/week-0/day-3/my_todo_app/venvironment/lib/python3.6/site-packages/pip/commands/__pycache__/freeze.cpython-36.pyc new file mode 100644 index 0000000000000000000000000000000000000000..61611e1513bafea3bb70ea4a24dcadf8c64c82c7 GIT binary patch literal 2582 zcmb7GS#Kl95uTGA4oOLS$47uc5+`9GQb+>iFpR*!uGa_>tdlq!0}K{}(R7m>s^{45 z9%(h8UZMs3wEh_Z@|XHGPx%Xe%2!Ql#r2y>bg`zYyQhw?s`%^iI6nOAZ(rOSI?jKc zy-xuCQ!K?mn8RG*lmxbie%G z7JYlfU+IrePSmBEAr)N8+}(wYLN~xV#8UqT(T;XE&b7DpHtxpz2AJ76YkwUumwC)* z!O~$Nh42kfveO`tEVdfp;vLPH9k4@o#O|=W?B1K++Y|TM11o(9DUi3j=Mnn>r0=o! z*P-rRyAK`q!JEKp`|F5(NV~2*!XuLP!)Kj0mECwc-AjQP?L8>d%bJE)%mj-<@b2ol z;)!1IZJ;R^^sqz*zMDquP5{rOKu&W&)g~9HtCA(JxXg4>EtA^9VwU`URj6c}8>F^M zPI=NQq_b>=E*jjVi;}C^Bs2lzO2ep}@@V>uFEZ>g{gUhKJd-9^anZo5MK_vG7e&RU zqNvUQe&W+D??3$2y6){$d((d9VZv7B3~sJg%D&&#uzNo_15jJ!FYk_`qQbX z^Guj<`x7f&OP*@k@~7SNKQ6XNJujqgGr_BKT#)Hxm8oPY>eEalS)OyHjuTcVRjqfy z*eS&&!TUSKGMfbQ2=J13h}xw>6nuC5WNVN*D;n||Dc`$hFAg6kAF0kePA2}IS!9u<%9spHsM-dFg3jug zC{2s1&}nL-ykse|jjSNJ#8EDTbzM{@dh*#n(!c!a^Dj-W$s{>-kIG!?-L`Zo>$aKr zCQw`~OpwW?GTzw*n%^KzbCD^PrvGui{nd#sn-jFa>1kUCHZ9K2R#mPziR>aw0-x$+ z>-em>lpn&(53tk|5XZgi_1wVqcHhW<=V?zDfq%Qpz2%R*?%_MVaCQ@c{HE7Ncu$P= z7)$*NL_2GD?P>qop>^$D`8wFR>u`gjy$ZBXC4Ch_(pSIPgzHETuF+g{49O5{gf+%G zz&gY_+60@Bxo@JY-m4$!I}2yi`^J6ZytseW*LTz1Ti-;ISIYU7ZPC}AysWf)s`LzUDaGg(V}X#Sv$$*_U&wM zU!ojeQmLOPzk|QzuYBS!@QIn-+_hp?o*j?J-kIl_@r{1JyYu+FXSZEK{wD7|Ht65O zP``uVgwu@VG^7-Dma&jEUn{hluN~U(wK6AnL$~p=49b=iF^`gYT^y+)GyNa#{_<%2K1B1$B7#~8 z9=u5PJlNZ7wxv)oh=A^VxI?gh+IoQ~E!t(NN zCCgdxTUqI}EY!2$7M^e?7>!2DtEa)Dr%)K||AJJbgl=#`yt*)UV5px!Xrk$gtl5IC z=!(6CdRdW$wXiwmj9VJ;(=KAS@U*k07lHLZyvE00bhwYcYld}#NFFTNUcB7e+l#YV zDFJ}obl$0s(xnv3&jG6z)w3l;0zkVNl!d_Xch!pHKlS8263 zsnd+_rO%J%MWO_nnvt{>udX9Sqw1AB2fzLphPnWP&~wzKHf3k;fG#iWgX^X!N2l2& zNFP293{3PM40RvGim8i023b(efD)il+lORD7tV?G^2&ru@CoSMd&x$Sr*t=AnF1XLky=# z;1FYDlavS=QelNwv!|&ooY2AO9by))M~iNiJ!JV~wyjEV@>-oNx+0#Bc`(nb zK=3##*IpW&27O<*ili896G#uhq$!2=-)D?JHT{!jjJs$POZ_>d6N!fosj4|~MN7H*R^ zynV9h+(5{1JvRf0x`h$*qJ~oxX+MfY&Z?Ay-HM`bRh$~Ouydn`AJ`lgdjJ3c literal 0 HcmV?d00001 diff --git a/week-0/day-3/my_todo_app/venvironment/lib/python3.6/site-packages/pip/commands/__pycache__/install.cpython-36.pyc b/week-0/day-3/my_todo_app/venvironment/lib/python3.6/site-packages/pip/commands/__pycache__/install.cpython-36.pyc new file mode 100644 index 0000000000000000000000000000000000000000..0292dd3db1bb4f02489fdad0277d0d75df402f5b GIT binary patch literal 10221 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 literal 0 HcmV?d00001 diff --git a/week-0/day-3/my_todo_app/venvironment/lib/python3.6/site-packages/pip/commands/__pycache__/list.cpython-36.pyc b/week-0/day-3/my_todo_app/venvironment/lib/python3.6/site-packages/pip/commands/__pycache__/list.cpython-36.pyc new file mode 100644 index 0000000000000000000000000000000000000000..dcfe04150e619d62206f5e4194237cbd674273f2 GIT binary patch literal 9685 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 literal 0 HcmV?d00001 diff --git a/week-0/day-3/my_todo_app/venvironment/lib/python3.6/site-packages/pip/commands/__pycache__/show.cpython-36.pyc b/week-0/day-3/my_todo_app/venvironment/lib/python3.6/site-packages/pip/commands/__pycache__/show.cpython-36.pyc new file mode 100644 index 0000000000000000000000000000000000000000..4cddbfa004eb2ba57750d7222b3ca9801785a7c1 GIT binary patch literal 5335 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 F{0j-F-mw4x literal 0 HcmV?d00001 diff --git a/week-0/day-3/my_todo_app/venvironment/lib/python3.6/site-packages/pip/commands/__pycache__/wheel.cpython-36.pyc b/week-0/day-3/my_todo_app/venvironment/lib/python3.6/site-packages/pip/commands/__pycache__/wheel.cpython-36.pyc new file mode 100644 index 0000000000000000000000000000000000000000..5785c897bfcd8faf8bef0f1f3450cad50c83ff48 GIT binary patch literal 5422 zcmd5=Nps`I6~@L@Bt>nbnem1=b`;qnWye)srpA-R9y>KIXUZPCGBF(&3PQIiP#^$z z1JZ~^T})T`l8GnDKgcaP=a^Ft`4N51DL)_=pYpv1C{m7>V?q|1{a*Kb{qXkYOYL@Z z_5D{qdGSfZ_@}Y-aWMZG9{Cpx%wT3@jLm^*(%g!yfu(=#fvta?frDQ=s*J0Hs@~&7 zwQ+q=A2$XK4OgP(cxAAn=hdh+ZV%deUW+>8)xoNs*Q4%uZLp^2jc9$mG1wSy4mLI1 zjJC#C23JgjTcd4$b!HB({lZ`?to6CUTD&^52iKYPfw9~E7vwc|O||MD$Rx@$?uFwt z5!qef*6;C8^HA_HkFz(E@z{^quBBS#^erJ0p|;)={3J|r`9>Z_>~<(L8pNF?;tzO6 zM--gBM0mmvC8teuDjsBsI0I(u9v>$soZX4v3)2^0xbKTNjE6Y3dH;y>=uJO3;;NyG8)Dr(fDW@>>IcXEkQ0}&pY3V71IdV_1TFZXS5+X zbmJt`Oau>-aT-R@RdKRR4zp8VaF^wRko<&;GdGN7=0{QAeH#*v6I$k(A4YP|m7EiM z&Fz#_?Xo10H{7EvOXZFIeU0l2?lbJ7rGA*~^LRh}CIz2j`%W6Bu14&*xrE~A{SH_tGp`U~!NKJZG9F8q*gX`-Dgvg4Bd}Q=lR6Fxnwa{raTA_LoRN){eJ&jD0<=& z5sV*3{JRJ~?s1%R5=a+kkKp)jE~4)zh>`#=Gbc&??C85_ZkE1Cy!S6QPo62v&f2$oGKFjLe)GGizi`&8hV}q_?Rtvd`_QJ#v`IEM_w&tBk4? zP7jgT2%ptP^_elFy#>^`1T`-~D+`E1k;0IY*2BsLb!)K$oZFY6&LwE|64bo}tzClF z7Z7W+4$f?_Ro0!K%GTIA+hCh)>!EWY$HsyNa%>h5W?Oi!Kr7ob>)fH=(N%V3>dY)q z&LNv1W+1I>-!)5%J&r%lphp->Gy^=N8in7n(*W?>8;zX|-UJ@RZsFvSexhkhPq zF0u%LK`sPxwtJe0V+ww3FA{8j*HI2bysFw5fq&u)RV!(gbHt-`(&_am3$b1i5~{5s zuM7}Xn@_5KN||i(+FK7Y;Uo18b1D-!A0fzHnWt$Kaz@~ej^ciLwjA0!5JjxPvBWwC zRrLc(-(nNMWVP2DM#+I6&4uU`;9QEypg6R^x}`|pa5CxQ;&6md1ksRH3!UvOC7K-< z>67Z)g;ZDPq7@=ldc9O|)s!ex+{;AH-=2JQCk~>VaRepr2_A7@B0K9Of5M|AC4IO^ zyOgwK-+kk3Zl*n#@?H{0XGj(?lP;3-LBtn(cWt51-yk7KC4xe7_nN9euUv>WAXWFg zFb*@%Q+1R-(v4J2pXnJ+R8}HY6`la&ixv?ykYbCxs#m{aK!EVCp6?;CfJ6P3xh{I&-zHW3%f1DfnA}L!q zn7Yk3@ko*-L${eB`Oa*U<~HWe%sw|WBxzQeS@JoJF+W51gOpRfJ6Y2iroZI>lV2{E z;<*)dF4@tWcighX_T3K?ckwN>r(cnD{Z=z#(*C+RnGUn=gm zUU$(T=)Q@ne=m#=6P-iQiGJUSy_0Us~Qw0NPVgX zr}MK+>{{X{gnW&LS1yKEY0oyA&ERpw=_nM&%z!mbDzsEOF|&)=)EqgYuZygi)pS`gM|JTtjj=8;4RKFn z>=m{QwO!KyL(;j}iZp`0?(H0{Il z6B*KdiQ2&|36f~f4Kv&Y+$h0Dp^x+9GneDm5M=$yALjx=tp6LKem@r~k5MG4&u0H? zJ#F5hGDaPft{NP7m}liz<{m0Xm7&0A{KMT9@jPNx)ll|ykJe(zX&fa!)6hm)2$%19 zs#_w<9Lbs3B^LD%H*RtTFyoTC1ht}*trzH9?s@?%^A|l3B4cggM_j`&dHQW!--QdXLC9_TszFzQb)blAQPQoZU?twCfo>QJtrRoe64h@O>c2&AE3ac9qv30{%r0D@ K_+n-^?f(Gnfk?jq literal 0 HcmV?d00001 diff --git a/week-0/day-3/my_todo_app/venvironment/lib/python3.6/site-packages/pip/commands/check.py b/week-0/day-3/my_todo_app/venvironment/lib/python3.6/site-packages/pip/commands/check.py new file mode 100644 index 00000000..70458adf --- /dev/null +++ b/week-0/day-3/my_todo_app/venvironment/lib/python3.6/site-packages/pip/commands/check.py @@ -0,0 +1,39 @@ +import logging + +from pip.basecommand import Command +from pip.operations.check import check_requirements +from pip.utils import get_installed_distributions + + +logger = logging.getLogger(__name__) + + +class CheckCommand(Command): + """Verify installed packages have compatible dependencies.""" + name = 'check' + usage = """ + %prog [options]""" + summary = 'Verify installed packages have compatible dependencies.' + + def run(self, options, args): + dists = get_installed_distributions(local_only=False, skip=()) + missing_reqs_dict, incompatible_reqs_dict = check_requirements(dists) + + for dist in dists: + key = '%s==%s' % (dist.project_name, dist.version) + + for requirement in missing_reqs_dict.get(key, []): + logger.info( + "%s %s requires %s, which is not installed.", + dist.project_name, dist.version, requirement.project_name) + + for requirement, actual in incompatible_reqs_dict.get(key, []): + logger.info( + "%s %s has requirement %s, but you have %s %s.", + dist.project_name, dist.version, requirement, + actual.project_name, actual.version) + + if missing_reqs_dict or incompatible_reqs_dict: + return 1 + else: + logger.info("No broken requirements found.") diff --git a/week-0/day-3/my_todo_app/venvironment/lib/python3.6/site-packages/pip/commands/completion.py b/week-0/day-3/my_todo_app/venvironment/lib/python3.6/site-packages/pip/commands/completion.py new file mode 100644 index 00000000..66e41a67 --- /dev/null +++ b/week-0/day-3/my_todo_app/venvironment/lib/python3.6/site-packages/pip/commands/completion.py @@ -0,0 +1,81 @@ +from __future__ import absolute_import + +import sys +from pip.basecommand import Command + +BASE_COMPLETION = """ +# pip %(shell)s completion start%(script)s# pip %(shell)s completion end +""" + +COMPLETION_SCRIPTS = { + 'bash': """ +_pip_completion() +{ + COMPREPLY=( $( COMP_WORDS="${COMP_WORDS[*]}" \\ + COMP_CWORD=$COMP_CWORD \\ + PIP_AUTO_COMPLETE=1 $1 ) ) +} +complete -o default -F _pip_completion pip +""", 'zsh': """ +function _pip_completion { + local words cword + read -Ac words + read -cn cword + reply=( $( COMP_WORDS="$words[*]" \\ + COMP_CWORD=$(( cword-1 )) \\ + PIP_AUTO_COMPLETE=1 $words[1] ) ) +} +compctl -K _pip_completion pip +""", 'fish': """ +function __fish_complete_pip + set -lx COMP_WORDS (commandline -o) "" + set -lx COMP_CWORD (math (contains -i -- (commandline -t) $COMP_WORDS)-1) + set -lx PIP_AUTO_COMPLETE 1 + string split \ -- (eval $COMP_WORDS[1]) +end +complete -fa "(__fish_complete_pip)" -c pip +"""} + + +class CompletionCommand(Command): + """A helper command to be used for command completion.""" + name = 'completion' + summary = 'A helper command used for command completion.' + + def __init__(self, *args, **kw): + super(CompletionCommand, self).__init__(*args, **kw) + + cmd_opts = self.cmd_opts + + cmd_opts.add_option( + '--bash', '-b', + action='store_const', + const='bash', + dest='shell', + help='Emit completion code for bash') + cmd_opts.add_option( + '--zsh', '-z', + action='store_const', + const='zsh', + dest='shell', + help='Emit completion code for zsh') + cmd_opts.add_option( + '--fish', '-f', + action='store_const', + const='fish', + dest='shell', + help='Emit completion code for fish') + + self.parser.insert_option_group(0, cmd_opts) + + def run(self, options, args): + """Prints the completion code of the given shell""" + shells = COMPLETION_SCRIPTS.keys() + shell_options = ['--' + shell for shell in sorted(shells)] + if options.shell in shells: + script = COMPLETION_SCRIPTS.get(options.shell, '') + print(BASE_COMPLETION % {'script': script, 'shell': options.shell}) + else: + sys.stderr.write( + 'ERROR: You must pass %s\n' % ' or '.join(shell_options) + ) diff --git a/week-0/day-3/my_todo_app/venvironment/lib/python3.6/site-packages/pip/commands/download.py b/week-0/day-3/my_todo_app/venvironment/lib/python3.6/site-packages/pip/commands/download.py new file mode 100644 index 00000000..4bc06408 --- /dev/null +++ b/week-0/day-3/my_todo_app/venvironment/lib/python3.6/site-packages/pip/commands/download.py @@ -0,0 +1,212 @@ +from __future__ import absolute_import + +import logging +import os + +from pip.exceptions import CommandError +from pip.index import FormatControl +from pip.req import RequirementSet +from pip.basecommand import RequirementCommand +from pip import cmdoptions +from pip.utils import ensure_dir, normalize_path +from pip.utils.build import BuildDirectory +from pip.utils.filesystem import check_path_owner + + +logger = logging.getLogger(__name__) + + +class DownloadCommand(RequirementCommand): + """ + Download packages from: + + - PyPI (and other indexes) using requirement specifiers. + - VCS project urls. + - Local project directories. + - Local or remote source archives. + + pip also supports downloading from "requirements files", which provide + an easy way to specify a whole environment to be downloaded. + """ + name = 'download' + + usage = """ + %prog [options] [package-index-options] ... + %prog [options] -r [package-index-options] ... + %prog [options] [-e] ... + %prog [options] [-e] ... + %prog [options] ...""" + + summary = 'Download packages.' + + def __init__(self, *args, **kw): + super(DownloadCommand, self).__init__(*args, **kw) + + cmd_opts = self.cmd_opts + + cmd_opts.add_option(cmdoptions.constraints()) + cmd_opts.add_option(cmdoptions.editable()) + cmd_opts.add_option(cmdoptions.requirements()) + cmd_opts.add_option(cmdoptions.build_dir()) + cmd_opts.add_option(cmdoptions.no_deps()) + cmd_opts.add_option(cmdoptions.global_options()) + cmd_opts.add_option(cmdoptions.no_binary()) + cmd_opts.add_option(cmdoptions.only_binary()) + cmd_opts.add_option(cmdoptions.src()) + cmd_opts.add_option(cmdoptions.pre()) + cmd_opts.add_option(cmdoptions.no_clean()) + cmd_opts.add_option(cmdoptions.require_hashes()) + + cmd_opts.add_option( + '-d', '--dest', '--destination-dir', '--destination-directory', + dest='download_dir', + metavar='dir', + default=os.curdir, + help=("Download packages into

    ."), + ) + + cmd_opts.add_option( + '--platform', + dest='platform', + metavar='platform', + default=None, + help=("Only download wheels compatible with . " + "Defaults to the platform of the running system."), + ) + + cmd_opts.add_option( + '--python-version', + dest='python_version', + metavar='python_version', + default=None, + help=("Only download wheels compatible with Python " + "interpreter version . If not specified, then the " + "current system interpreter minor version is used. A major " + "version (e.g. '2') can be specified to match all " + "minor revs of that major version. A minor version " + "(e.g. '34') can also be specified."), + ) + + cmd_opts.add_option( + '--implementation', + dest='implementation', + metavar='implementation', + default=None, + help=("Only download wheels compatible with Python " + "implementation , e.g. 'pp', 'jy', 'cp', " + " or 'ip'. If not specified, then the current " + "interpreter implementation is used. Use 'py' to force " + "implementation-agnostic wheels."), + ) + + cmd_opts.add_option( + '--abi', + dest='abi', + metavar='abi', + default=None, + help=("Only download wheels compatible with Python " + "abi , e.g. 'pypy_41'. If not specified, then the " + "current interpreter abi tag is used. Generally " + "you will need to specify --implementation, " + "--platform, and --python-version when using " + "this option."), + ) + + index_opts = cmdoptions.make_option_group( + cmdoptions.non_deprecated_index_group, + self.parser, + ) + + self.parser.insert_option_group(0, index_opts) + self.parser.insert_option_group(0, cmd_opts) + + def run(self, options, args): + options.ignore_installed = True + + if options.python_version: + python_versions = [options.python_version] + else: + python_versions = None + + dist_restriction_set = any([ + options.python_version, + options.platform, + options.abi, + options.implementation, + ]) + binary_only = FormatControl(set(), set([':all:'])) + if dist_restriction_set and options.format_control != binary_only: + raise CommandError( + "--only-binary=:all: must be set and --no-binary must not " + "be set (or must be set to :none:) when restricting platform " + "and interpreter constraints using --python-version, " + "--platform, --abi, or --implementation." + ) + + options.src_dir = os.path.abspath(options.src_dir) + options.download_dir = normalize_path(options.download_dir) + + ensure_dir(options.download_dir) + + with self._build_session(options) as session: + finder = self._build_package_finder( + options=options, + session=session, + platform=options.platform, + python_versions=python_versions, + abi=options.abi, + implementation=options.implementation, + ) + build_delete = (not (options.no_clean or options.build_dir)) + if options.cache_dir and not check_path_owner(options.cache_dir): + logger.warning( + "The directory '%s' or its parent directory is not owned " + "by the current user and caching wheels has been " + "disabled. check the permissions and owner of that " + "directory. If executing pip with sudo, you may want " + "sudo's -H flag.", + options.cache_dir, + ) + options.cache_dir = None + + with BuildDirectory(options.build_dir, + delete=build_delete) as build_dir: + + requirement_set = RequirementSet( + build_dir=build_dir, + src_dir=options.src_dir, + download_dir=options.download_dir, + ignore_installed=True, + ignore_dependencies=options.ignore_dependencies, + session=session, + isolated=options.isolated_mode, + require_hashes=options.require_hashes + ) + self.populate_requirement_set( + requirement_set, + args, + options, + finder, + session, + self.name, + None + ) + + if not requirement_set.has_requirements: + return + + requirement_set.prepare_files(finder) + + downloaded = ' '.join([ + req.name for req in requirement_set.successfully_downloaded + ]) + if downloaded: + logger.info( + 'Successfully downloaded %s', downloaded + ) + + # Clean up + if not options.no_clean: + requirement_set.cleanup_files() + + return requirement_set diff --git a/week-0/day-3/my_todo_app/venvironment/lib/python3.6/site-packages/pip/commands/freeze.py b/week-0/day-3/my_todo_app/venvironment/lib/python3.6/site-packages/pip/commands/freeze.py new file mode 100644 index 00000000..c1987961 --- /dev/null +++ b/week-0/day-3/my_todo_app/venvironment/lib/python3.6/site-packages/pip/commands/freeze.py @@ -0,0 +1,87 @@ +from __future__ import absolute_import + +import sys + +import pip +from pip.compat import stdlib_pkgs +from pip.basecommand import Command +from pip.operations.freeze import freeze +from pip.wheel import WheelCache + + +DEV_PKGS = ('pip', 'setuptools', 'distribute', 'wheel') + + +class FreezeCommand(Command): + """ + Output installed packages in requirements format. + + packages are listed in a case-insensitive sorted order. + """ + name = 'freeze' + usage = """ + %prog [options]""" + summary = 'Output installed packages in requirements format.' + log_streams = ("ext://sys.stderr", "ext://sys.stderr") + + def __init__(self, *args, **kw): + super(FreezeCommand, self).__init__(*args, **kw) + + self.cmd_opts.add_option( + '-r', '--requirement', + dest='requirements', + action='append', + default=[], + metavar='file', + help="Use the order in the given requirements file and its " + "comments when generating output. This option can be " + "used multiple times.") + self.cmd_opts.add_option( + '-f', '--find-links', + dest='find_links', + action='append', + default=[], + metavar='URL', + help='URL for finding packages, which will be added to the ' + 'output.') + self.cmd_opts.add_option( + '-l', '--local', + dest='local', + action='store_true', + default=False, + help='If in a virtualenv that has global access, do not output ' + 'globally-installed packages.') + self.cmd_opts.add_option( + '--user', + dest='user', + action='store_true', + default=False, + help='Only output packages installed in user-site.') + self.cmd_opts.add_option( + '--all', + dest='freeze_all', + action='store_true', + help='Do not skip these packages in the output:' + ' %s' % ', '.join(DEV_PKGS)) + + self.parser.insert_option_group(0, self.cmd_opts) + + def run(self, options, args): + format_control = pip.index.FormatControl(set(), set()) + wheel_cache = WheelCache(options.cache_dir, format_control) + skip = set(stdlib_pkgs) + if not options.freeze_all: + skip.update(DEV_PKGS) + + freeze_kwargs = dict( + requirement=options.requirements, + find_links=options.find_links, + local_only=options.local, + user_only=options.user, + skip_regex=options.skip_requirements_regex, + isolated=options.isolated_mode, + wheel_cache=wheel_cache, + skip=skip) + + for line in freeze(**freeze_kwargs): + sys.stdout.write(line + '\n') diff --git a/week-0/day-3/my_todo_app/venvironment/lib/python3.6/site-packages/pip/commands/hash.py b/week-0/day-3/my_todo_app/venvironment/lib/python3.6/site-packages/pip/commands/hash.py new file mode 100644 index 00000000..27cca0bf --- /dev/null +++ b/week-0/day-3/my_todo_app/venvironment/lib/python3.6/site-packages/pip/commands/hash.py @@ -0,0 +1,57 @@ +from __future__ import absolute_import + +import hashlib +import logging +import sys + +from pip.basecommand import Command +from pip.status_codes import ERROR +from pip.utils import read_chunks +from pip.utils.hashes import FAVORITE_HASH, STRONG_HASHES + + +logger = logging.getLogger(__name__) + + +class HashCommand(Command): + """ + Compute a hash of a local package archive. + + These can be used with --hash in a requirements file to do repeatable + installs. + + """ + name = 'hash' + usage = '%prog [options] ...' + summary = 'Compute hashes of package archives.' + + def __init__(self, *args, **kw): + super(HashCommand, self).__init__(*args, **kw) + self.cmd_opts.add_option( + '-a', '--algorithm', + dest='algorithm', + choices=STRONG_HASHES, + action='store', + default=FAVORITE_HASH, + help='The hash algorithm to use: one of %s' % + ', '.join(STRONG_HASHES)) + self.parser.insert_option_group(0, self.cmd_opts) + + def run(self, options, args): + if not args: + self.parser.print_usage(sys.stderr) + return ERROR + + algorithm = options.algorithm + for path in args: + logger.info('%s:\n--hash=%s:%s', + path, algorithm, _hash_of_file(path, algorithm)) + + +def _hash_of_file(path, algorithm): + """Return the hash digest of a file.""" + with open(path, 'rb') as archive: + hash = hashlib.new(algorithm) + for chunk in read_chunks(archive): + hash.update(chunk) + return hash.hexdigest() diff --git a/week-0/day-3/my_todo_app/venvironment/lib/python3.6/site-packages/pip/commands/help.py b/week-0/day-3/my_todo_app/venvironment/lib/python3.6/site-packages/pip/commands/help.py new file mode 100644 index 00000000..11722f1e --- /dev/null +++ b/week-0/day-3/my_todo_app/venvironment/lib/python3.6/site-packages/pip/commands/help.py @@ -0,0 +1,35 @@ +from __future__ import absolute_import + +from pip.basecommand import Command, SUCCESS +from pip.exceptions import CommandError + + +class HelpCommand(Command): + """Show help for commands""" + name = 'help' + usage = """ + %prog """ + summary = 'Show help for commands.' + + def run(self, options, args): + from pip.commands import commands_dict, get_similar_commands + + try: + # 'pip help' with no args is handled by pip.__init__.parseopt() + cmd_name = args[0] # the command we need help for + except IndexError: + return SUCCESS + + if cmd_name not in commands_dict: + guess = get_similar_commands(cmd_name) + + msg = ['unknown command "%s"' % cmd_name] + if guess: + msg.append('maybe you meant "%s"' % guess) + + raise CommandError(' - '.join(msg)) + + command = commands_dict[cmd_name]() + command.parser.print_help() + + return SUCCESS diff --git a/week-0/day-3/my_todo_app/venvironment/lib/python3.6/site-packages/pip/commands/install.py b/week-0/day-3/my_todo_app/venvironment/lib/python3.6/site-packages/pip/commands/install.py new file mode 100644 index 00000000..39292b11 --- /dev/null +++ b/week-0/day-3/my_todo_app/venvironment/lib/python3.6/site-packages/pip/commands/install.py @@ -0,0 +1,455 @@ +from __future__ import absolute_import + +import logging +import operator +import os +import tempfile +import shutil +import warnings +try: + import wheel +except ImportError: + wheel = None + +from pip.req import RequirementSet +from pip.basecommand import RequirementCommand +from pip.locations import virtualenv_no_global, distutils_scheme +from pip.exceptions import ( + InstallationError, CommandError, PreviousBuildDirError, +) +from pip import cmdoptions +from pip.utils import ensure_dir, get_installed_version +from pip.utils.build import BuildDirectory +from pip.utils.deprecation import RemovedInPip10Warning +from pip.utils.filesystem import check_path_owner +from pip.wheel import WheelCache, WheelBuilder + +from pip.locations import running_under_virtualenv + +logger = logging.getLogger(__name__) + + +class InstallCommand(RequirementCommand): + """ + Install packages from: + + - PyPI (and other indexes) using requirement specifiers. + - VCS project urls. + - Local project directories. + - Local or remote source archives. + + pip also supports installing from "requirements files", which provide + an easy way to specify a whole environment to be installed. + """ + name = 'install' + + usage = """ + %prog [options] [package-index-options] ... + %prog [options] -r [package-index-options] ... + %prog [options] [-e] ... + %prog [options] [-e] ... + %prog [options] ...""" + + summary = 'Install packages.' + + def __init__(self, *args, **kw): + super(InstallCommand, self).__init__(*args, **kw) + + default_user = True + if running_under_virtualenv(): + default_user = False + if os.geteuid() == 0: + default_user = False + + cmd_opts = self.cmd_opts + + cmd_opts.add_option(cmdoptions.constraints()) + cmd_opts.add_option(cmdoptions.editable()) + cmd_opts.add_option(cmdoptions.requirements()) + cmd_opts.add_option(cmdoptions.build_dir()) + + cmd_opts.add_option( + '-t', '--target', + dest='target_dir', + metavar='dir', + default=None, + help='Install packages into . ' + 'By default this will not replace existing files/folders in ' + '. Use --upgrade to replace existing packages in ' + 'with new versions.' + ) + + cmd_opts.add_option( + '-d', '--download', '--download-dir', '--download-directory', + dest='download_dir', + metavar='dir', + default=None, + help=("Download packages into instead of installing them, " + "regardless of what's already installed."), + ) + + cmd_opts.add_option(cmdoptions.src()) + + cmd_opts.add_option( + '-U', '--upgrade', + dest='upgrade', + action='store_true', + help='Upgrade all specified packages to the newest available ' + 'version. The handling of dependencies depends on the ' + 'upgrade-strategy used.' + ) + + cmd_opts.add_option( + '--upgrade-strategy', + dest='upgrade_strategy', + default='eager', + choices=['only-if-needed', 'eager'], + help='Determines how dependency upgrading should be handled. ' + '"eager" - dependencies are upgraded regardless of ' + 'whether the currently installed version satisfies the ' + 'requirements of the upgraded package(s). ' + '"only-if-needed" - are upgraded only when they do not ' + 'satisfy the requirements of the upgraded package(s).' + ) + + cmd_opts.add_option( + '--force-reinstall', + dest='force_reinstall', + action='store_true', + help='When upgrading, reinstall all packages even if they are ' + 'already up-to-date.') + + cmd_opts.add_option( + '-I', '--ignore-installed', + dest='ignore_installed', + action='store_true', + default=default_user, + help='Ignore the installed packages (reinstalling instead).') + + cmd_opts.add_option(cmdoptions.ignore_requires_python()) + cmd_opts.add_option(cmdoptions.no_deps()) + + cmd_opts.add_option(cmdoptions.install_options()) + cmd_opts.add_option(cmdoptions.global_options()) + + cmd_opts.add_option( + '--user', + dest='use_user_site', + action='store_true', + default=default_user, + help="Install to the Python user install directory for your " + "platform. Typically ~/.local/, or %APPDATA%\Python on " + "Windows. (See the Python documentation for site.USER_BASE " + "for full details.) On Debian systems, this is the " + "default when running outside of a virtual environment " + "and not as root.") + + cmd_opts.add_option( + '--system', + dest='use_user_site', + action='store_false', + help="Install using the system scheme (overrides --user on " + "Debian systems)") + + cmd_opts.add_option( + '--egg', + dest='as_egg', + action='store_true', + help="Install packages as eggs, not 'flat', like pip normally " + "does. This option is not about installing *from* eggs. " + "(WARNING: Because this option overrides pip's normal install" + " logic, requirements files may not behave as expected.)") + + cmd_opts.add_option( + '--root', + dest='root_path', + metavar='dir', + default=None, + help="Install everything relative to this alternate root " + "directory.") + + cmd_opts.add_option( + '--prefix', + dest='prefix_path', + metavar='dir', + default=None, + help="Installation prefix where lib, bin and other top-level " + "folders are placed") + + cmd_opts.add_option( + "--compile", + action="store_true", + dest="compile", + default=True, + help="Compile py files to pyc", + ) + + cmd_opts.add_option( + "--no-compile", + action="store_false", + dest="compile", + help="Do not compile py files to pyc", + ) + + cmd_opts.add_option(cmdoptions.use_wheel()) + cmd_opts.add_option(cmdoptions.no_use_wheel()) + cmd_opts.add_option(cmdoptions.no_binary()) + cmd_opts.add_option(cmdoptions.only_binary()) + cmd_opts.add_option(cmdoptions.pre()) + cmd_opts.add_option(cmdoptions.no_clean()) + cmd_opts.add_option(cmdoptions.require_hashes()) + + index_opts = cmdoptions.make_option_group( + cmdoptions.index_group, + self.parser, + ) + + self.parser.insert_option_group(0, index_opts) + self.parser.insert_option_group(0, cmd_opts) + + def run(self, options, args): + cmdoptions.resolve_wheel_no_use_binary(options) + cmdoptions.check_install_build_global(options) + + if options.as_egg: + warnings.warn( + "--egg has been deprecated and will be removed in the future. " + "This flag is mutually exclusive with large parts of pip, and " + "actually using it invalidates pip's ability to manage the " + "installation process.", + RemovedInPip10Warning, + ) + + if options.allow_external: + warnings.warn( + "--allow-external has been deprecated and will be removed in " + "the future. Due to changes in the repository protocol, it no " + "longer has any effect.", + RemovedInPip10Warning, + ) + + if options.allow_all_external: + warnings.warn( + "--allow-all-external has been deprecated and will be removed " + "in the future. Due to changes in the repository protocol, it " + "no longer has any effect.", + RemovedInPip10Warning, + ) + + if options.allow_unverified: + warnings.warn( + "--allow-unverified has been deprecated and will be removed " + "in the future. Due to changes in the repository protocol, it " + "no longer has any effect.", + RemovedInPip10Warning, + ) + + if options.download_dir: + warnings.warn( + "pip install --download has been deprecated and will be " + "removed in the future. Pip now has a download command that " + "should be used instead.", + RemovedInPip10Warning, + ) + options.ignore_installed = True + + if options.build_dir: + options.build_dir = os.path.abspath(options.build_dir) + + options.src_dir = os.path.abspath(options.src_dir) + install_options = options.install_options or [] + if options.use_user_site: + if options.prefix_path: + raise CommandError( + "Can not combine '--user' and '--prefix' as they imply " + "different installation locations" + ) + if virtualenv_no_global(): + raise InstallationError( + "Can not perform a '--user' install. User site-packages " + "are not visible in this virtualenv." + ) + install_options.append('--user') + install_options.append('--prefix=') + + temp_target_dir = None + if options.target_dir: + options.ignore_installed = True + temp_target_dir = tempfile.mkdtemp() + options.target_dir = os.path.abspath(options.target_dir) + if (os.path.exists(options.target_dir) and not + os.path.isdir(options.target_dir)): + raise CommandError( + "Target path exists but is not a directory, will not " + "continue." + ) + install_options.append('--home=' + temp_target_dir) + + global_options = options.global_options or [] + + with self._build_session(options) as session: + + finder = self._build_package_finder(options, session) + build_delete = (not (options.no_clean or options.build_dir)) + wheel_cache = WheelCache(options.cache_dir, options.format_control) + if options.cache_dir and not check_path_owner(options.cache_dir): + logger.warning( + "The directory '%s' or its parent directory is not owned " + "by the current user and caching wheels has been " + "disabled. check the permissions and owner of that " + "directory. If executing pip with sudo, you may want " + "sudo's -H flag.", + options.cache_dir, + ) + options.cache_dir = None + + with BuildDirectory(options.build_dir, + delete=build_delete) as build_dir: + requirement_set = RequirementSet( + build_dir=build_dir, + src_dir=options.src_dir, + download_dir=options.download_dir, + upgrade=options.upgrade, + upgrade_strategy=options.upgrade_strategy, + as_egg=options.as_egg, + ignore_installed=options.ignore_installed, + ignore_dependencies=options.ignore_dependencies, + ignore_requires_python=options.ignore_requires_python, + force_reinstall=options.force_reinstall, + use_user_site=options.use_user_site, + target_dir=temp_target_dir, + session=session, + pycompile=options.compile, + isolated=options.isolated_mode, + wheel_cache=wheel_cache, + require_hashes=options.require_hashes, + ) + + self.populate_requirement_set( + requirement_set, args, options, finder, session, self.name, + wheel_cache + ) + + if not requirement_set.has_requirements: + return + + try: + if (options.download_dir or not wheel or not + options.cache_dir): + # on -d don't do complex things like building + # wheels, and don't try to build wheels when wheel is + # not installed. + requirement_set.prepare_files(finder) + else: + # build wheels before install. + wb = WheelBuilder( + requirement_set, + finder, + build_options=[], + global_options=[], + ) + # Ignore the result: a failed wheel will be + # installed from the sdist/vcs whatever. + wb.build(autobuilding=True) + + if not options.download_dir: + requirement_set.install( + install_options, + global_options, + root=options.root_path, + prefix=options.prefix_path, + ) + + possible_lib_locations = get_lib_location_guesses( + user=options.use_user_site, + home=temp_target_dir, + root=options.root_path, + prefix=options.prefix_path, + isolated=options.isolated_mode, + ) + reqs = sorted( + requirement_set.successfully_installed, + key=operator.attrgetter('name')) + items = [] + for req in reqs: + item = req.name + try: + installed_version = get_installed_version( + req.name, possible_lib_locations + ) + if installed_version: + item += '-' + installed_version + except Exception: + pass + items.append(item) + installed = ' '.join(items) + if installed: + logger.info('Successfully installed %s', installed) + else: + downloaded = ' '.join([ + req.name + for req in requirement_set.successfully_downloaded + ]) + if downloaded: + logger.info( + 'Successfully downloaded %s', downloaded + ) + except PreviousBuildDirError: + options.no_clean = True + raise + finally: + # Clean up + if not options.no_clean: + requirement_set.cleanup_files() + + if options.target_dir: + ensure_dir(options.target_dir) + + # Checking both purelib and platlib directories for installed + # packages to be moved to target directory + lib_dir_list = [] + + purelib_dir = distutils_scheme('', home=temp_target_dir)['purelib'] + platlib_dir = distutils_scheme('', home=temp_target_dir)['platlib'] + + if os.path.exists(purelib_dir): + lib_dir_list.append(purelib_dir) + if os.path.exists(platlib_dir) and platlib_dir != purelib_dir: + lib_dir_list.append(platlib_dir) + + for lib_dir in lib_dir_list: + for item in os.listdir(lib_dir): + target_item_dir = os.path.join(options.target_dir, item) + if os.path.exists(target_item_dir): + if not options.upgrade: + logger.warning( + 'Target directory %s already exists. Specify ' + '--upgrade to force replacement.', + target_item_dir + ) + continue + if os.path.islink(target_item_dir): + logger.warning( + 'Target directory %s already exists and is ' + 'a link. Pip will not automatically replace ' + 'links, please remove if replacement is ' + 'desired.', + target_item_dir + ) + continue + if os.path.isdir(target_item_dir): + shutil.rmtree(target_item_dir) + else: + os.remove(target_item_dir) + + shutil.move( + os.path.join(lib_dir, item), + target_item_dir + ) + shutil.rmtree(temp_target_dir) + return requirement_set + + +def get_lib_location_guesses(*args, **kwargs): + scheme = distutils_scheme('', *args, **kwargs) + return [scheme['purelib'], scheme['platlib']] diff --git a/week-0/day-3/my_todo_app/venvironment/lib/python3.6/site-packages/pip/commands/list.py b/week-0/day-3/my_todo_app/venvironment/lib/python3.6/site-packages/pip/commands/list.py new file mode 100644 index 00000000..6f6995d7 --- /dev/null +++ b/week-0/day-3/my_todo_app/venvironment/lib/python3.6/site-packages/pip/commands/list.py @@ -0,0 +1,337 @@ +from __future__ import absolute_import + +import json +import logging +import warnings +try: + from itertools import zip_longest +except ImportError: + from itertools import izip_longest as zip_longest + +from pip._vendor import six + +from pip.basecommand import Command +from pip.exceptions import CommandError +from pip.index import PackageFinder +from pip.utils import ( + get_installed_distributions, dist_is_editable) +from pip.utils.deprecation import RemovedInPip10Warning +from pip.cmdoptions import make_option_group, index_group + +logger = logging.getLogger(__name__) + + +class ListCommand(Command): + """ + List installed packages, including editables. + + Packages are listed in a case-insensitive sorted order. + """ + name = 'list' + usage = """ + %prog [options]""" + summary = 'List installed packages.' + + def __init__(self, *args, **kw): + super(ListCommand, self).__init__(*args, **kw) + + cmd_opts = self.cmd_opts + + cmd_opts.add_option( + '-o', '--outdated', + action='store_true', + default=False, + help='List outdated packages') + cmd_opts.add_option( + '-u', '--uptodate', + action='store_true', + default=False, + help='List uptodate packages') + cmd_opts.add_option( + '-e', '--editable', + action='store_true', + default=False, + help='List editable projects.') + cmd_opts.add_option( + '-l', '--local', + action='store_true', + default=False, + help=('If in a virtualenv that has global access, do not list ' + 'globally-installed packages.'), + ) + self.cmd_opts.add_option( + '--user', + dest='user', + action='store_true', + default=False, + help='Only output packages installed in user-site.') + + cmd_opts.add_option( + '--pre', + action='store_true', + default=False, + help=("Include pre-release and development versions. By default, " + "pip only finds stable versions."), + ) + + cmd_opts.add_option( + '--format', + action='store', + dest='list_format', + choices=('legacy', 'columns', 'freeze', 'json'), + help="Select the output format among: legacy (default), columns, " + "freeze or json.", + ) + + cmd_opts.add_option( + '--not-required', + action='store_true', + dest='not_required', + help="List packages that are not dependencies of " + "installed packages.", + ) + + index_opts = make_option_group(index_group, self.parser) + + self.parser.insert_option_group(0, index_opts) + self.parser.insert_option_group(0, cmd_opts) + + def _build_package_finder(self, options, index_urls, session): + """ + Create a package finder appropriate to this list command. + """ + return PackageFinder( + find_links=options.find_links, + index_urls=index_urls, + allow_all_prereleases=options.pre, + trusted_hosts=options.trusted_hosts, + process_dependency_links=options.process_dependency_links, + session=session, + ) + + def run(self, options, args): + if options.allow_external: + warnings.warn( + "--allow-external has been deprecated and will be removed in " + "the future. Due to changes in the repository protocol, it no " + "longer has any effect.", + RemovedInPip10Warning, + ) + + if options.allow_all_external: + warnings.warn( + "--allow-all-external has been deprecated and will be removed " + "in the future. Due to changes in the repository protocol, it " + "no longer has any effect.", + RemovedInPip10Warning, + ) + + if options.allow_unverified: + warnings.warn( + "--allow-unverified has been deprecated and will be removed " + "in the future. Due to changes in the repository protocol, it " + "no longer has any effect.", + RemovedInPip10Warning, + ) + + if options.list_format is None: + warnings.warn( + "The default format will switch to columns in the future. " + "You can use --format=(legacy|columns) (or define a " + "format=(legacy|columns) in your pip.conf under the [list] " + "section) to disable this warning.", + RemovedInPip10Warning, + ) + + if options.outdated and options.uptodate: + raise CommandError( + "Options --outdated and --uptodate cannot be combined.") + + packages = get_installed_distributions( + local_only=options.local, + user_only=options.user, + editables_only=options.editable, + ) + + if options.outdated: + packages = self.get_outdated(packages, options) + elif options.uptodate: + packages = self.get_uptodate(packages, options) + + if options.not_required: + packages = self.get_not_required(packages, options) + + self.output_package_listing(packages, options) + + def get_outdated(self, packages, options): + return [ + dist for dist in self.iter_packages_latest_infos(packages, options) + if dist.latest_version > dist.parsed_version + ] + + def get_uptodate(self, packages, options): + return [ + dist for dist in self.iter_packages_latest_infos(packages, options) + if dist.latest_version == dist.parsed_version + ] + + def get_not_required(self, packages, options): + dep_keys = set() + for dist in packages: + dep_keys.update(requirement.key for requirement in dist.requires()) + return set(pkg for pkg in packages if pkg.key not in dep_keys) + + def iter_packages_latest_infos(self, packages, options): + index_urls = [options.index_url] + options.extra_index_urls + if options.no_index: + logger.debug('Ignoring indexes: %s', ','.join(index_urls)) + index_urls = [] + + dependency_links = [] + for dist in packages: + if dist.has_metadata('dependency_links.txt'): + dependency_links.extend( + dist.get_metadata_lines('dependency_links.txt'), + ) + + with self._build_session(options) as session: + finder = self._build_package_finder(options, index_urls, session) + finder.add_dependency_links(dependency_links) + + for dist in packages: + typ = 'unknown' + all_candidates = finder.find_all_candidates(dist.key) + if not options.pre: + # Remove prereleases + all_candidates = [candidate for candidate in all_candidates + if not candidate.version.is_prerelease] + + if not all_candidates: + continue + best_candidate = max(all_candidates, + key=finder._candidate_sort_key) + remote_version = best_candidate.version + if best_candidate.location.is_wheel: + typ = 'wheel' + else: + typ = 'sdist' + # This is dirty but makes the rest of the code much cleaner + dist.latest_version = remote_version + dist.latest_filetype = typ + yield dist + + def output_legacy(self, dist): + if dist_is_editable(dist): + return '%s (%s, %s)' % ( + dist.project_name, + dist.version, + dist.location, + ) + else: + return '%s (%s)' % (dist.project_name, dist.version) + + def output_legacy_latest(self, dist): + return '%s - Latest: %s [%s]' % ( + self.output_legacy(dist), + dist.latest_version, + dist.latest_filetype, + ) + + def output_package_listing(self, packages, options): + packages = sorted( + packages, + key=lambda dist: dist.project_name.lower(), + ) + if options.list_format == 'columns' and packages: + data, header = format_for_columns(packages, options) + self.output_package_listing_columns(data, header) + elif options.list_format == 'freeze': + for dist in packages: + logger.info("%s==%s", dist.project_name, dist.version) + elif options.list_format == 'json': + logger.info(format_for_json(packages, options)) + else: # legacy + for dist in packages: + if options.outdated: + logger.info(self.output_legacy_latest(dist)) + else: + logger.info(self.output_legacy(dist)) + + def output_package_listing_columns(self, data, header): + # insert the header first: we need to know the size of column names + if len(data) > 0: + data.insert(0, header) + + pkg_strings, sizes = tabulate(data) + + # Create and add a separator. + if len(data) > 0: + pkg_strings.insert(1, " ".join(map(lambda x: '-' * x, sizes))) + + for val in pkg_strings: + logger.info(val) + + +def tabulate(vals): + # From pfmoore on GitHub: + # https://github.com/pypa/pip/issues/3651#issuecomment-216932564 + assert len(vals) > 0 + + sizes = [0] * max(len(x) for x in vals) + for row in vals: + sizes = [max(s, len(str(c))) for s, c in zip_longest(sizes, row)] + + result = [] + for row in vals: + display = " ".join([str(c).ljust(s) if c is not None else '' + for s, c in zip_longest(sizes, row)]) + result.append(display) + + return result, sizes + + +def format_for_columns(pkgs, options): + """ + Convert the package data into something usable + by output_package_listing_columns. + """ + running_outdated = options.outdated + # Adjust the header for the `pip list --outdated` case. + if running_outdated: + header = ["Package", "Version", "Latest", "Type"] + else: + header = ["Package", "Version"] + + data = [] + if any(dist_is_editable(x) for x in pkgs): + header.append("Location") + + for proj in pkgs: + # if we're working on the 'outdated' list, separate out the + # latest_version and type + row = [proj.project_name, proj.version] + + if running_outdated: + row.append(proj.latest_version) + row.append(proj.latest_filetype) + + if dist_is_editable(proj): + row.append(proj.location) + + data.append(row) + + return data, header + + +def format_for_json(packages, options): + data = [] + for dist in packages: + info = { + 'name': dist.project_name, + 'version': six.text_type(dist.version), + } + if options.outdated: + info['latest_version'] = six.text_type(dist.latest_version) + info['latest_filetype'] = dist.latest_filetype + data.append(info) + return json.dumps(data) diff --git a/week-0/day-3/my_todo_app/venvironment/lib/python3.6/site-packages/pip/commands/search.py b/week-0/day-3/my_todo_app/venvironment/lib/python3.6/site-packages/pip/commands/search.py new file mode 100644 index 00000000..bd2ea8ad --- /dev/null +++ b/week-0/day-3/my_todo_app/venvironment/lib/python3.6/site-packages/pip/commands/search.py @@ -0,0 +1,133 @@ +from __future__ import absolute_import + +import logging +import sys +import textwrap + +from pip.basecommand import Command, SUCCESS +from pip.compat import OrderedDict +from pip.download import PipXmlrpcTransport +from pip.models import PyPI +from pip.utils import get_terminal_size +from pip.utils.logging import indent_log +from pip.exceptions import CommandError +from pip.status_codes import NO_MATCHES_FOUND +from pip._vendor.packaging.version import parse as parse_version +from pip._vendor import pkg_resources +from pip._vendor.six.moves import xmlrpc_client + + +logger = logging.getLogger(__name__) + + +class SearchCommand(Command): + """Search for PyPI packages whose name or summary contains .""" + name = 'search' + usage = """ + %prog [options] """ + summary = 'Search PyPI for packages.' + + def __init__(self, *args, **kw): + super(SearchCommand, self).__init__(*args, **kw) + self.cmd_opts.add_option( + '-i', '--index', + dest='index', + metavar='URL', + default=PyPI.pypi_url, + help='Base URL of Python Package Index (default %default)') + + self.parser.insert_option_group(0, self.cmd_opts) + + def run(self, options, args): + if not args: + raise CommandError('Missing required argument (search query).') + query = args + pypi_hits = self.search(query, options) + hits = transform_hits(pypi_hits) + + terminal_width = None + if sys.stdout.isatty(): + terminal_width = get_terminal_size()[0] + + print_results(hits, terminal_width=terminal_width) + if pypi_hits: + return SUCCESS + return NO_MATCHES_FOUND + + def search(self, query, options): + index_url = options.index + with self._build_session(options) as session: + transport = PipXmlrpcTransport(index_url, session) + pypi = xmlrpc_client.ServerProxy(index_url, transport) + hits = pypi.search({'name': query, 'summary': query}, 'or') + return hits + + +def transform_hits(hits): + """ + The list from pypi is really a list of versions. We want a list of + packages with the list of versions stored inline. This converts the + list from pypi into one we can use. + """ + packages = OrderedDict() + for hit in hits: + name = hit['name'] + summary = hit['summary'] + version = hit['version'] + + if name not in packages.keys(): + packages[name] = { + 'name': name, + 'summary': summary, + 'versions': [version], + } + else: + packages[name]['versions'].append(version) + + # if this is the highest version, replace summary and score + if version == highest_version(packages[name]['versions']): + packages[name]['summary'] = summary + + return list(packages.values()) + + +def print_results(hits, name_column_width=None, terminal_width=None): + if not hits: + return + if name_column_width is None: + name_column_width = max([ + len(hit['name']) + len(hit.get('versions', ['-'])[-1]) + for hit in hits + ]) + 4 + + installed_packages = [p.project_name for p in pkg_resources.working_set] + for hit in hits: + name = hit['name'] + summary = hit['summary'] or '' + version = hit.get('versions', ['-'])[-1] + if terminal_width is not None: + target_width = terminal_width - name_column_width - 5 + if target_width > 10: + # wrap and indent summary to fit terminal + summary = textwrap.wrap(summary, target_width) + summary = ('\n' + ' ' * (name_column_width + 3)).join(summary) + + line = '%-*s - %s' % (name_column_width, + '%s (%s)' % (name, version), summary) + try: + logger.info(line) + if name in installed_packages: + dist = pkg_resources.get_distribution(name) + with indent_log(): + latest = highest_version(hit['versions']) + if dist.version == latest: + logger.info('INSTALLED: %s (latest)', dist.version) + else: + logger.info('INSTALLED: %s', dist.version) + logger.info('LATEST: %s', latest) + except UnicodeEncodeError: + pass + + +def highest_version(versions): + return max(versions, key=parse_version) diff --git a/week-0/day-3/my_todo_app/venvironment/lib/python3.6/site-packages/pip/commands/show.py b/week-0/day-3/my_todo_app/venvironment/lib/python3.6/site-packages/pip/commands/show.py new file mode 100644 index 00000000..111c16d1 --- /dev/null +++ b/week-0/day-3/my_todo_app/venvironment/lib/python3.6/site-packages/pip/commands/show.py @@ -0,0 +1,154 @@ +from __future__ import absolute_import + +from email.parser import FeedParser +import logging +import os + +from pip.basecommand import Command +from pip.status_codes import SUCCESS, ERROR +from pip._vendor import pkg_resources +from pip._vendor.packaging.utils import canonicalize_name + + +logger = logging.getLogger(__name__) + + +class ShowCommand(Command): + """Show information about one or more installed packages.""" + name = 'show' + usage = """ + %prog [options] ...""" + summary = 'Show information about installed packages.' + + def __init__(self, *args, **kw): + super(ShowCommand, self).__init__(*args, **kw) + self.cmd_opts.add_option( + '-f', '--files', + dest='files', + action='store_true', + default=False, + help='Show the full list of installed files for each package.') + + self.parser.insert_option_group(0, self.cmd_opts) + + def run(self, options, args): + if not args: + logger.warning('ERROR: Please provide a package name or names.') + return ERROR + query = args + + results = search_packages_info(query) + if not print_results( + results, list_files=options.files, verbose=options.verbose): + return ERROR + return SUCCESS + + +def search_packages_info(query): + """ + Gather details from installed distributions. Print distribution name, + version, location, and installed files. Installed files requires a + pip generated 'installed-files.txt' in the distributions '.egg-info' + directory. + """ + installed = {} + for p in pkg_resources.working_set: + installed[canonicalize_name(p.project_name)] = p + + query_names = [canonicalize_name(name) for name in query] + + for dist in [installed[pkg] for pkg in query_names if pkg in installed]: + package = { + 'name': dist.project_name, + 'version': dist.version, + 'location': dist.location, + 'requires': [dep.project_name for dep in dist.requires()], + } + file_list = None + metadata = None + if isinstance(dist, pkg_resources.DistInfoDistribution): + # RECORDs should be part of .dist-info metadatas + if dist.has_metadata('RECORD'): + lines = dist.get_metadata_lines('RECORD') + paths = [l.split(',')[0] for l in lines] + paths = [os.path.join(dist.location, p) for p in paths] + file_list = [os.path.relpath(p, dist.location) for p in paths] + + if dist.has_metadata('METADATA'): + metadata = dist.get_metadata('METADATA') + else: + # Otherwise use pip's log for .egg-info's + if dist.has_metadata('installed-files.txt'): + paths = dist.get_metadata_lines('installed-files.txt') + paths = [os.path.join(dist.egg_info, p) for p in paths] + file_list = [os.path.relpath(p, dist.location) for p in paths] + + if dist.has_metadata('PKG-INFO'): + metadata = dist.get_metadata('PKG-INFO') + + if dist.has_metadata('entry_points.txt'): + entry_points = dist.get_metadata_lines('entry_points.txt') + package['entry_points'] = entry_points + + if dist.has_metadata('INSTALLER'): + for line in dist.get_metadata_lines('INSTALLER'): + if line.strip(): + package['installer'] = line.strip() + break + + # @todo: Should pkg_resources.Distribution have a + # `get_pkg_info` method? + feed_parser = FeedParser() + feed_parser.feed(metadata) + pkg_info_dict = feed_parser.close() + for key in ('metadata-version', 'summary', + 'home-page', 'author', 'author-email', 'license'): + package[key] = pkg_info_dict.get(key) + + # It looks like FeedParser cannot deal with repeated headers + classifiers = [] + for line in metadata.splitlines(): + if line.startswith('Classifier: '): + classifiers.append(line[len('Classifier: '):]) + package['classifiers'] = classifiers + + if file_list: + package['files'] = sorted(file_list) + yield package + + +def print_results(distributions, list_files=False, verbose=False): + """ + Print the informations from installed distributions found. + """ + results_printed = False + for i, dist in enumerate(distributions): + results_printed = True + if i > 0: + logger.info("---") + logger.info("Name: %s", dist.get('name', '')) + logger.info("Version: %s", dist.get('version', '')) + logger.info("Summary: %s", dist.get('summary', '')) + logger.info("Home-page: %s", dist.get('home-page', '')) + logger.info("Author: %s", dist.get('author', '')) + logger.info("Author-email: %s", dist.get('author-email', '')) + logger.info("License: %s", dist.get('license', '')) + logger.info("Location: %s", dist.get('location', '')) + logger.info("Requires: %s", ', '.join(dist.get('requires', []))) + if verbose: + logger.info("Metadata-Version: %s", + dist.get('metadata-version', '')) + logger.info("Installer: %s", dist.get('installer', '')) + logger.info("Classifiers:") + for classifier in dist.get('classifiers', []): + logger.info(" %s", classifier) + logger.info("Entry-points:") + for entry in dist.get('entry_points', []): + logger.info(" %s", entry.strip()) + if list_files: + logger.info("Files:") + for line in dist.get('files', []): + logger.info(" %s", line.strip()) + if "files" not in dist: + logger.info("Cannot locate installed-files.txt") + return results_printed diff --git a/week-0/day-3/my_todo_app/venvironment/lib/python3.6/site-packages/pip/commands/uninstall.py b/week-0/day-3/my_todo_app/venvironment/lib/python3.6/site-packages/pip/commands/uninstall.py new file mode 100644 index 00000000..8ba1a7c6 --- /dev/null +++ b/week-0/day-3/my_todo_app/venvironment/lib/python3.6/site-packages/pip/commands/uninstall.py @@ -0,0 +1,76 @@ +from __future__ import absolute_import + +import pip +from pip.wheel import WheelCache +from pip.req import InstallRequirement, RequirementSet, parse_requirements +from pip.basecommand import Command +from pip.exceptions import InstallationError + + +class UninstallCommand(Command): + """ + Uninstall packages. + + pip is able to uninstall most installed packages. Known exceptions are: + + - Pure distutils packages installed with ``python setup.py install``, which + leave behind no metadata to determine what files were installed. + - Script wrappers installed by ``python setup.py develop``. + """ + name = 'uninstall' + usage = """ + %prog [options] ... + %prog [options] -r ...""" + summary = 'Uninstall packages.' + + def __init__(self, *args, **kw): + super(UninstallCommand, self).__init__(*args, **kw) + self.cmd_opts.add_option( + '-r', '--requirement', + dest='requirements', + action='append', + default=[], + metavar='file', + help='Uninstall all the packages listed in the given requirements ' + 'file. This option can be used multiple times.', + ) + self.cmd_opts.add_option( + '-y', '--yes', + dest='yes', + action='store_true', + help="Don't ask for confirmation of uninstall deletions.") + + self.parser.insert_option_group(0, self.cmd_opts) + + def run(self, options, args): + with self._build_session(options) as session: + format_control = pip.index.FormatControl(set(), set()) + wheel_cache = WheelCache(options.cache_dir, format_control) + requirement_set = RequirementSet( + build_dir=None, + src_dir=None, + download_dir=None, + isolated=options.isolated_mode, + session=session, + wheel_cache=wheel_cache, + ) + for name in args: + requirement_set.add_requirement( + InstallRequirement.from_line( + name, isolated=options.isolated_mode, + wheel_cache=wheel_cache + ) + ) + for filename in options.requirements: + for req in parse_requirements( + filename, + options=options, + session=session, + wheel_cache=wheel_cache): + requirement_set.add_requirement(req) + if not requirement_set.has_requirements: + raise InstallationError( + 'You must give at least one requirement to %(name)s (see ' + '"pip help %(name)s")' % dict(name=self.name) + ) + requirement_set.uninstall(auto_confirm=options.yes) diff --git a/week-0/day-3/my_todo_app/venvironment/lib/python3.6/site-packages/pip/commands/wheel.py b/week-0/day-3/my_todo_app/venvironment/lib/python3.6/site-packages/pip/commands/wheel.py new file mode 100644 index 00000000..70e95eb8 --- /dev/null +++ b/week-0/day-3/my_todo_app/venvironment/lib/python3.6/site-packages/pip/commands/wheel.py @@ -0,0 +1,208 @@ +# -*- coding: utf-8 -*- +from __future__ import absolute_import + +import logging +import os +import warnings + +from pip.basecommand import RequirementCommand +from pip.exceptions import CommandError, PreviousBuildDirError +from pip.req import RequirementSet +from pip.utils import import_or_raise +from pip.utils.build import BuildDirectory +from pip.utils.deprecation import RemovedInPip10Warning +from pip.wheel import WheelCache, WheelBuilder +from pip import cmdoptions + + +logger = logging.getLogger(__name__) + + +class WheelCommand(RequirementCommand): + """ + Build Wheel archives for your requirements and dependencies. + + Wheel is a built-package format, and offers the advantage of not + recompiling your software during every install. For more details, see the + wheel docs: https://wheel.readthedocs.io/en/latest/ + + Requirements: setuptools>=0.8, and wheel. + + 'pip wheel' uses the bdist_wheel setuptools extension from the wheel + package to build individual wheels. + + """ + + name = 'wheel' + usage = """ + %prog [options] ... + %prog [options] -r ... + %prog [options] [-e] ... + %prog [options] [-e] ... + %prog [options] ...""" + + summary = 'Build wheels from your requirements.' + + def __init__(self, *args, **kw): + super(WheelCommand, self).__init__(*args, **kw) + + cmd_opts = self.cmd_opts + + cmd_opts.add_option( + '-w', '--wheel-dir', + dest='wheel_dir', + metavar='dir', + default=os.curdir, + help=("Build wheels into , where the default is the " + "current working directory."), + ) + cmd_opts.add_option(cmdoptions.use_wheel()) + cmd_opts.add_option(cmdoptions.no_use_wheel()) + cmd_opts.add_option(cmdoptions.no_binary()) + cmd_opts.add_option(cmdoptions.only_binary()) + cmd_opts.add_option( + '--build-option', + dest='build_options', + metavar='options', + action='append', + help="Extra arguments to be supplied to 'setup.py bdist_wheel'.") + cmd_opts.add_option(cmdoptions.constraints()) + cmd_opts.add_option(cmdoptions.editable()) + cmd_opts.add_option(cmdoptions.requirements()) + cmd_opts.add_option(cmdoptions.src()) + cmd_opts.add_option(cmdoptions.ignore_requires_python()) + cmd_opts.add_option(cmdoptions.no_deps()) + cmd_opts.add_option(cmdoptions.build_dir()) + + cmd_opts.add_option( + '--global-option', + dest='global_options', + action='append', + metavar='options', + help="Extra global options to be supplied to the setup.py " + "call before the 'bdist_wheel' command.") + + cmd_opts.add_option( + '--pre', + action='store_true', + default=False, + help=("Include pre-release and development versions. By default, " + "pip only finds stable versions."), + ) + + cmd_opts.add_option(cmdoptions.no_clean()) + cmd_opts.add_option(cmdoptions.require_hashes()) + + index_opts = cmdoptions.make_option_group( + cmdoptions.index_group, + self.parser, + ) + + self.parser.insert_option_group(0, index_opts) + self.parser.insert_option_group(0, cmd_opts) + + def check_required_packages(self): + import_or_raise( + 'wheel.bdist_wheel', + CommandError, + "'pip wheel' requires the 'wheel' package. To fix this, run: " + "pip install wheel" + ) + pkg_resources = import_or_raise( + 'pkg_resources', + CommandError, + "'pip wheel' requires setuptools >= 0.8 for dist-info support." + " To fix this, run: pip install --upgrade setuptools" + ) + if not hasattr(pkg_resources, 'DistInfoDistribution'): + raise CommandError( + "'pip wheel' requires setuptools >= 0.8 for dist-info " + "support. To fix this, run: pip install --upgrade " + "setuptools" + ) + + def run(self, options, args): + self.check_required_packages() + cmdoptions.resolve_wheel_no_use_binary(options) + cmdoptions.check_install_build_global(options) + + if options.allow_external: + warnings.warn( + "--allow-external has been deprecated and will be removed in " + "the future. Due to changes in the repository protocol, it no " + "longer has any effect.", + RemovedInPip10Warning, + ) + + if options.allow_all_external: + warnings.warn( + "--allow-all-external has been deprecated and will be removed " + "in the future. Due to changes in the repository protocol, it " + "no longer has any effect.", + RemovedInPip10Warning, + ) + + if options.allow_unverified: + warnings.warn( + "--allow-unverified has been deprecated and will be removed " + "in the future. Due to changes in the repository protocol, it " + "no longer has any effect.", + RemovedInPip10Warning, + ) + + index_urls = [options.index_url] + options.extra_index_urls + if options.no_index: + logger.debug('Ignoring indexes: %s', ','.join(index_urls)) + index_urls = [] + + if options.build_dir: + options.build_dir = os.path.abspath(options.build_dir) + + options.src_dir = os.path.abspath(options.src_dir) + + with self._build_session(options) as session: + finder = self._build_package_finder(options, session) + build_delete = (not (options.no_clean or options.build_dir)) + wheel_cache = WheelCache(options.cache_dir, options.format_control) + with BuildDirectory(options.build_dir, + delete=build_delete) as build_dir: + requirement_set = RequirementSet( + build_dir=build_dir, + src_dir=options.src_dir, + download_dir=None, + ignore_dependencies=options.ignore_dependencies, + ignore_installed=True, + ignore_requires_python=options.ignore_requires_python, + isolated=options.isolated_mode, + session=session, + wheel_cache=wheel_cache, + wheel_download_dir=options.wheel_dir, + require_hashes=options.require_hashes + ) + + self.populate_requirement_set( + requirement_set, args, options, finder, session, self.name, + wheel_cache + ) + + if not requirement_set.has_requirements: + return + + try: + # build wheels + wb = WheelBuilder( + requirement_set, + finder, + build_options=options.build_options or [], + global_options=options.global_options or [], + ) + if not wb.build(): + raise CommandError( + "Failed to build one or more wheels" + ) + except PreviousBuildDirError: + options.no_clean = True + raise + finally: + if not options.no_clean: + requirement_set.cleanup_files() diff --git a/week-0/day-3/my_todo_app/venvironment/lib/python3.6/site-packages/pip/compat/__init__.py b/week-0/day-3/my_todo_app/venvironment/lib/python3.6/site-packages/pip/compat/__init__.py new file mode 100644 index 00000000..099672cd --- /dev/null +++ b/week-0/day-3/my_todo_app/venvironment/lib/python3.6/site-packages/pip/compat/__init__.py @@ -0,0 +1,164 @@ +"""Stuff that differs in different Python versions and platform +distributions.""" +from __future__ import absolute_import, division + +import os +import sys + +from pip._vendor.six import text_type + +try: + from logging.config import dictConfig as logging_dictConfig +except ImportError: + from pip.compat.dictconfig import dictConfig as logging_dictConfig + +try: + from collections import OrderedDict +except ImportError: + from pip._vendor.ordereddict import OrderedDict + +try: + import ipaddress +except ImportError: + try: + from pip._vendor import ipaddress + except ImportError: + import ipaddr as ipaddress + ipaddress.ip_address = ipaddress.IPAddress + ipaddress.ip_network = ipaddress.IPNetwork + + +try: + import sysconfig + + def get_stdlib(): + paths = [ + sysconfig.get_path("stdlib"), + sysconfig.get_path("platstdlib"), + ] + return set(filter(bool, paths)) +except ImportError: + from distutils import sysconfig + + def get_stdlib(): + paths = [ + sysconfig.get_python_lib(standard_lib=True), + sysconfig.get_python_lib(standard_lib=True, plat_specific=True), + ] + return set(filter(bool, paths)) + + +__all__ = [ + "logging_dictConfig", "ipaddress", "uses_pycache", "console_to_str", + "native_str", "get_path_uid", "stdlib_pkgs", "WINDOWS", "samefile", + "OrderedDict", +] + + +if sys.version_info >= (3, 4): + uses_pycache = True + from importlib.util import cache_from_source +else: + import imp + uses_pycache = hasattr(imp, 'cache_from_source') + if uses_pycache: + cache_from_source = imp.cache_from_source + else: + cache_from_source = None + + +if sys.version_info >= (3,): + def console_to_str(s): + try: + return s.decode(sys.__stdout__.encoding) + except UnicodeDecodeError: + return s.decode('utf_8') + + def native_str(s, replace=False): + if isinstance(s, bytes): + return s.decode('utf-8', 'replace' if replace else 'strict') + return s + +else: + def console_to_str(s): + return s + + def native_str(s, replace=False): + # Replace is ignored -- unicode to UTF-8 can't fail + if isinstance(s, text_type): + return s.encode('utf-8') + return s + + +def total_seconds(td): + if hasattr(td, "total_seconds"): + return td.total_seconds() + else: + val = td.microseconds + (td.seconds + td.days * 24 * 3600) * 10 ** 6 + return val / 10 ** 6 + + +def get_path_uid(path): + """ + Return path's uid. + + Does not follow symlinks: + https://github.com/pypa/pip/pull/935#discussion_r5307003 + + Placed this function in compat due to differences on AIX and + Jython, that should eventually go away. + + :raises OSError: When path is a symlink or can't be read. + """ + if hasattr(os, 'O_NOFOLLOW'): + fd = os.open(path, os.O_RDONLY | os.O_NOFOLLOW) + file_uid = os.fstat(fd).st_uid + os.close(fd) + else: # AIX and Jython + # WARNING: time of check vulnerability, but best we can do w/o NOFOLLOW + if not os.path.islink(path): + # older versions of Jython don't have `os.fstat` + file_uid = os.stat(path).st_uid + else: + # raise OSError for parity with os.O_NOFOLLOW above + raise OSError( + "%s is a symlink; Will not return uid for symlinks" % path + ) + return file_uid + + +def expanduser(path): + """ + Expand ~ and ~user constructions. + + Includes a workaround for http://bugs.python.org/issue14768 + """ + expanded = os.path.expanduser(path) + if path.startswith('~/') and expanded.startswith('//'): + expanded = expanded[1:] + return expanded + + +# packages in the stdlib that may have installation metadata, but should not be +# considered 'installed'. this theoretically could be determined based on +# dist.location (py27:`sysconfig.get_paths()['stdlib']`, +# py26:sysconfig.get_config_vars('LIBDEST')), but fear platform variation may +# make this ineffective, so hard-coding +stdlib_pkgs = ('python', 'wsgiref') +if sys.version_info >= (2, 7): + stdlib_pkgs += ('argparse',) + + +# windows detection, covers cpython and ironpython +WINDOWS = (sys.platform.startswith("win") or + (sys.platform == 'cli' and os.name == 'nt')) + + +def samefile(file1, file2): + """Provide an alternative for os.path.samefile on Windows/Python2""" + if hasattr(os.path, 'samefile'): + return os.path.samefile(file1, file2) + else: + path1 = os.path.normcase(os.path.abspath(file1)) + path2 = os.path.normcase(os.path.abspath(file2)) + return path1 == path2 diff --git a/week-0/day-3/my_todo_app/venvironment/lib/python3.6/site-packages/pip/compat/__pycache__/__init__.cpython-36.pyc b/week-0/day-3/my_todo_app/venvironment/lib/python3.6/site-packages/pip/compat/__pycache__/__init__.cpython-36.pyc new file mode 100644 index 0000000000000000000000000000000000000000..9001a81e0b355742eba42f65faa8508ee4554a80 GIT binary patch literal 3957 zcmai1TW=f372X@k6-80BEZ=Q;V>@x^i|9)nyKZ1OiR0FZOSw^7IST}v)y|MwYPn0y z3?);L{Sc)u1p*j(?+@rpf6%=4NkAWpKK7~KnWYrl4bY|Le&)=%pQGDzbM^V(-~IOC zf@S@~dgHr+`9m}rIF`k%&|)@oGJEKR&d?2Ao7QgTg`OEJVFja?Rfn~(W?PdMR+Y>j z&V+T_TC?)Nv-s?0U3_O-^fRZ8^7I=kcb=Cws@dGI88+X#@zddrYBpbu=7viKL&sqFJ3GVX zLEC%m20O=EKiJ`ge1R=Z_inQDJ?&GXQ@;oT^}ntTHYr+Y&&{B zUYA8SRy<0Fqe3X{vvez^>)p1kXB2;-A~hLtEPx?VpBH&A?PE2&A{ZB(J;EkIrlXiK z!KF+HGkrFihxR#|yns$w1Dn}#fvK_mL-{S-k+aUe;A3eE$Df`4c@|`d}T*9I`^x9LASVu%PE*0`O8iZ|{L-A_L7u^O&<}F?Z2A zVX-RpFQE!nI|C?VE`C?fsY1nBBw+zLll#O`+Ja;4le_N|1?j`j=F1L7RojSVtdtPf zaiSZ;G!e!0uC5(SJQhzR;;f^XcDLf}U0u=LZ_%daRJVO+$u<}d`6P2XecHszv>PrXn8qJaRKET``%plU*@)_oJnh{LiP_qnJj${43 zy$hpkyKx&fQV;Nb&DB`s0manIGJvNq*UkQ;g3BN;RM0E3tk@3ZWSFJ-ro3-X>E?z~ zBYD5m>8EOAyuOS$+ZjzpaT$2WS=Ra0?K>Bdl#;QebQ6g?w{P6NapQK0{~5UfL#|6@ z&>QCoWi3i}Ww;L5mR^2v4C$OOOE3#n*{wL zh_~a(l$-k^P7(Kll~v>T_k*m6i36mv-4HjSRqYf~d&P+7+Fyyjezekk`i;0t z2bCWDABj#X6KX3-20PQ9NrBZ=lH9dtKx$J4;ARgD${y1`#b3JkuIZfy1V@vUAgl(3 ziH6;98&1=8?7DMkf8=LmgC=B9%}V)=>~7D755c=A?22o69U>D-Zo@ti zf{eWU@|gdRtiAw-@6k#(tu~CT1nuf-NroEAlhRaE2(D(b{>bb9uQDUMBW2#?X_G7c?M`BXyd*#wc0mxgT0 zo$$n)uM}muOc%;ZYxa#(T`kM!aOTOgPs=hIiGLJLOKRHgaz)Nyw)1jsYC==q=^3i- zQQBuHzM=>b4nk;5{|`WA3*R|Gd^F19gY`@y5`fk1E`~Erqh=&N~drkYe F`(O7D%JBdI literal 0 HcmV?d00001 diff --git a/week-0/day-3/my_todo_app/venvironment/lib/python3.6/site-packages/pip/compat/__pycache__/dictconfig.cpython-36.pyc b/week-0/day-3/my_todo_app/venvironment/lib/python3.6/site-packages/pip/compat/__pycache__/dictconfig.cpython-36.pyc new file mode 100644 index 0000000000000000000000000000000000000000..ed65492a7004f1a528bea5798bf903071a1bfa4a GIT binary patch literal 13604 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 HX~+IQVF-Wc literal 0 HcmV?d00001 diff --git a/week-0/day-3/my_todo_app/venvironment/lib/python3.6/site-packages/pip/compat/dictconfig.py b/week-0/day-3/my_todo_app/venvironment/lib/python3.6/site-packages/pip/compat/dictconfig.py new file mode 100644 index 00000000..ec684aac --- /dev/null +++ b/week-0/day-3/my_todo_app/venvironment/lib/python3.6/site-packages/pip/compat/dictconfig.py @@ -0,0 +1,565 @@ +# This is a copy of the Python logging.config.dictconfig module, +# reproduced with permission. It is provided here for backwards +# compatibility for Python versions prior to 2.7. +# +# Copyright 2009-2010 by Vinay Sajip. All Rights Reserved. +# +# Permission to use, copy, modify, and distribute this software and its +# documentation for any purpose and without fee is hereby granted, +# provided that the above copyright notice appear in all copies and that +# both that copyright notice and this permission notice appear in +# supporting documentation, and that the name of Vinay Sajip +# not be used in advertising or publicity pertaining to distribution +# of the software without specific, written prior permission. +# VINAY SAJIP DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, INCLUDING +# ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL +# VINAY SAJIP BE LIABLE FOR ANY SPECIAL, INDIRECT OR CONSEQUENTIAL DAMAGES OR +# ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER +# IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT +# OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. +from __future__ import absolute_import + +import logging.handlers +import re +import sys +import types + +from pip._vendor import six + +# flake8: noqa + +IDENTIFIER = re.compile('^[a-z_][a-z0-9_]*$', re.I) + + +def valid_ident(s): + m = IDENTIFIER.match(s) + if not m: + raise ValueError('Not a valid Python identifier: %r' % s) + return True + +# +# This function is defined in logging only in recent versions of Python +# +try: + from logging import _checkLevel +except ImportError: + def _checkLevel(level): + if isinstance(level, int): + rv = level + elif str(level) == level: + if level not in logging._levelNames: + raise ValueError('Unknown level: %r' % level) + rv = logging._levelNames[level] + else: + raise TypeError('Level not an integer or a ' + 'valid string: %r' % level) + return rv + +# The ConvertingXXX classes are wrappers around standard Python containers, +# and they serve to convert any suitable values in the container. The +# conversion converts base dicts, lists and tuples to their wrapped +# equivalents, whereas strings which match a conversion format are converted +# appropriately. +# +# Each wrapper should have a configurator attribute holding the actual +# configurator to use for conversion. + + +class ConvertingDict(dict): + """A converting dictionary wrapper.""" + + def __getitem__(self, key): + value = dict.__getitem__(self, key) + result = self.configurator.convert(value) + # If the converted value is different, save for next time + if value is not result: + self[key] = result + if type(result) in (ConvertingDict, ConvertingList, + ConvertingTuple): + result.parent = self + result.key = key + return result + + def get(self, key, default=None): + value = dict.get(self, key, default) + result = self.configurator.convert(value) + # If the converted value is different, save for next time + if value is not result: + self[key] = result + if type(result) in (ConvertingDict, ConvertingList, + ConvertingTuple): + result.parent = self + result.key = key + return result + + def pop(self, key, default=None): + value = dict.pop(self, key, default) + result = self.configurator.convert(value) + if value is not result: + if type(result) in (ConvertingDict, ConvertingList, + ConvertingTuple): + result.parent = self + result.key = key + return result + + +class ConvertingList(list): + """A converting list wrapper.""" + def __getitem__(self, key): + value = list.__getitem__(self, key) + result = self.configurator.convert(value) + # If the converted value is different, save for next time + if value is not result: + self[key] = result + if type(result) in (ConvertingDict, ConvertingList, + ConvertingTuple): + result.parent = self + result.key = key + return result + + def pop(self, idx=-1): + value = list.pop(self, idx) + result = self.configurator.convert(value) + if value is not result: + if type(result) in (ConvertingDict, ConvertingList, + ConvertingTuple): + result.parent = self + return result + + +class ConvertingTuple(tuple): + """A converting tuple wrapper.""" + def __getitem__(self, key): + value = tuple.__getitem__(self, key) + result = self.configurator.convert(value) + if value is not result: + if type(result) in (ConvertingDict, ConvertingList, + ConvertingTuple): + result.parent = self + result.key = key + return result + + +class BaseConfigurator(object): + """ + The configurator base class which defines some useful defaults. + """ + + CONVERT_PATTERN = re.compile(r'^(?P[a-z]+)://(?P.*)$') + + WORD_PATTERN = re.compile(r'^\s*(\w+)\s*') + DOT_PATTERN = re.compile(r'^\.\s*(\w+)\s*') + INDEX_PATTERN = re.compile(r'^\[\s*(\w+)\s*\]\s*') + DIGIT_PATTERN = re.compile(r'^\d+$') + + value_converters = { + 'ext' : 'ext_convert', + 'cfg' : 'cfg_convert', + } + + # We might want to use a different one, e.g. importlib + importer = __import__ + + def __init__(self, config): + self.config = ConvertingDict(config) + self.config.configurator = self + + def resolve(self, s): + """ + Resolve strings to objects using standard import and attribute + syntax. + """ + name = s.split('.') + used = name.pop(0) + try: + found = self.importer(used) + for frag in name: + used += '.' + frag + try: + found = getattr(found, frag) + except AttributeError: + self.importer(used) + found = getattr(found, frag) + return found + except ImportError: + e, tb = sys.exc_info()[1:] + v = ValueError('Cannot resolve %r: %s' % (s, e)) + v.__cause__, v.__traceback__ = e, tb + raise v + + def ext_convert(self, value): + """Default converter for the ext:// protocol.""" + return self.resolve(value) + + def cfg_convert(self, value): + """Default converter for the cfg:// protocol.""" + rest = value + m = self.WORD_PATTERN.match(rest) + if m is None: + raise ValueError("Unable to convert %r" % value) + else: + rest = rest[m.end():] + d = self.config[m.groups()[0]] + # print d, rest + while rest: + m = self.DOT_PATTERN.match(rest) + if m: + d = d[m.groups()[0]] + else: + m = self.INDEX_PATTERN.match(rest) + if m: + idx = m.groups()[0] + if not self.DIGIT_PATTERN.match(idx): + d = d[idx] + else: + try: + n = int(idx) # try as number first (most likely) + d = d[n] + except TypeError: + d = d[idx] + if m: + rest = rest[m.end():] + else: + raise ValueError('Unable to convert ' + '%r at %r' % (value, rest)) + # rest should be empty + return d + + def convert(self, value): + """ + Convert values to an appropriate type. dicts, lists and tuples are + replaced by their converting alternatives. Strings are checked to + see if they have a conversion format and are converted if they do. + """ + if not isinstance(value, ConvertingDict) and isinstance(value, dict): + value = ConvertingDict(value) + value.configurator = self + elif not isinstance(value, ConvertingList) and isinstance(value, list): + value = ConvertingList(value) + value.configurator = self + elif not isinstance(value, ConvertingTuple) and\ + isinstance(value, tuple): + value = ConvertingTuple(value) + value.configurator = self + elif isinstance(value, six.string_types): # str for py3k + m = self.CONVERT_PATTERN.match(value) + if m: + d = m.groupdict() + prefix = d['prefix'] + converter = self.value_converters.get(prefix, None) + if converter: + suffix = d['suffix'] + converter = getattr(self, converter) + value = converter(suffix) + return value + + def configure_custom(self, config): + """Configure an object with a user-supplied factory.""" + c = config.pop('()') + if not hasattr(c, '__call__') and hasattr(types, 'ClassType') and type(c) != types.ClassType: + c = self.resolve(c) + props = config.pop('.', None) + # Check for valid identifiers + kwargs = dict((k, config[k]) for k in config if valid_ident(k)) + result = c(**kwargs) + if props: + for name, value in props.items(): + setattr(result, name, value) + return result + + def as_tuple(self, value): + """Utility function which converts lists to tuples.""" + if isinstance(value, list): + value = tuple(value) + return value + + +class DictConfigurator(BaseConfigurator): + """ + Configure logging using a dictionary-like object to describe the + configuration. + """ + + def configure(self): + """Do the configuration.""" + + config = self.config + if 'version' not in config: + raise ValueError("dictionary doesn't specify a version") + if config['version'] != 1: + raise ValueError("Unsupported version: %s" % config['version']) + incremental = config.pop('incremental', False) + EMPTY_DICT = {} + logging._acquireLock() + try: + if incremental: + handlers = config.get('handlers', EMPTY_DICT) + # incremental handler config only if handler name + # ties in to logging._handlers (Python 2.7) + if sys.version_info[:2] == (2, 7): + for name in handlers: + if name not in logging._handlers: + raise ValueError('No handler found with ' + 'name %r' % name) + else: + try: + handler = logging._handlers[name] + handler_config = handlers[name] + level = handler_config.get('level', None) + if level: + handler.setLevel(_checkLevel(level)) + except StandardError as e: + raise ValueError('Unable to configure handler ' + '%r: %s' % (name, e)) + loggers = config.get('loggers', EMPTY_DICT) + for name in loggers: + try: + self.configure_logger(name, loggers[name], True) + except StandardError as e: + raise ValueError('Unable to configure logger ' + '%r: %s' % (name, e)) + root = config.get('root', None) + if root: + try: + self.configure_root(root, True) + except StandardError as e: + raise ValueError('Unable to configure root ' + 'logger: %s' % e) + else: + disable_existing = config.pop('disable_existing_loggers', True) + + logging._handlers.clear() + del logging._handlerList[:] + + # Do formatters first - they don't refer to anything else + formatters = config.get('formatters', EMPTY_DICT) + for name in formatters: + try: + formatters[name] = self.configure_formatter( + formatters[name]) + except StandardError as e: + raise ValueError('Unable to configure ' + 'formatter %r: %s' % (name, e)) + # Next, do filters - they don't refer to anything else, either + filters = config.get('filters', EMPTY_DICT) + for name in filters: + try: + filters[name] = self.configure_filter(filters[name]) + except StandardError as e: + raise ValueError('Unable to configure ' + 'filter %r: %s' % (name, e)) + + # Next, do handlers - they refer to formatters and filters + # As handlers can refer to other handlers, sort the keys + # to allow a deterministic order of configuration + handlers = config.get('handlers', EMPTY_DICT) + for name in sorted(handlers): + try: + handler = self.configure_handler(handlers[name]) + handler.name = name + handlers[name] = handler + except StandardError as e: + raise ValueError('Unable to configure handler ' + '%r: %s' % (name, e)) + # Next, do loggers - they refer to handlers and filters + + # we don't want to lose the existing loggers, + # since other threads may have pointers to them. + # existing is set to contain all existing loggers, + # and as we go through the new configuration we + # remove any which are configured. At the end, + # what's left in existing is the set of loggers + # which were in the previous configuration but + # which are not in the new configuration. + root = logging.root + existing = list(root.manager.loggerDict) + # The list needs to be sorted so that we can + # avoid disabling child loggers of explicitly + # named loggers. With a sorted list it is easier + # to find the child loggers. + existing.sort() + # We'll keep the list of existing loggers + # which are children of named loggers here... + child_loggers = [] + # now set up the new ones... + loggers = config.get('loggers', EMPTY_DICT) + for name in loggers: + if name in existing: + i = existing.index(name) + prefixed = name + "." + pflen = len(prefixed) + num_existing = len(existing) + i = i + 1 # look at the entry after name + while (i < num_existing) and\ + (existing[i][:pflen] == prefixed): + child_loggers.append(existing[i]) + i = i + 1 + existing.remove(name) + try: + self.configure_logger(name, loggers[name]) + except StandardError as e: + raise ValueError('Unable to configure logger ' + '%r: %s' % (name, e)) + + # Disable any old loggers. There's no point deleting + # them as other threads may continue to hold references + # and by disabling them, you stop them doing any logging. + # However, don't disable children of named loggers, as that's + # probably not what was intended by the user. + for log in existing: + logger = root.manager.loggerDict[log] + if log in child_loggers: + logger.level = logging.NOTSET + logger.handlers = [] + logger.propagate = True + elif disable_existing: + logger.disabled = True + + # And finally, do the root logger + root = config.get('root', None) + if root: + try: + self.configure_root(root) + except StandardError as e: + raise ValueError('Unable to configure root ' + 'logger: %s' % e) + finally: + logging._releaseLock() + + def configure_formatter(self, config): + """Configure a formatter from a dictionary.""" + if '()' in config: + factory = config['()'] # for use in exception handler + try: + result = self.configure_custom(config) + except TypeError as te: + if "'format'" not in str(te): + raise + # Name of parameter changed from fmt to format. + # Retry with old name. + # This is so that code can be used with older Python versions + #(e.g. by Django) + config['fmt'] = config.pop('format') + config['()'] = factory + result = self.configure_custom(config) + else: + fmt = config.get('format', None) + dfmt = config.get('datefmt', None) + result = logging.Formatter(fmt, dfmt) + return result + + def configure_filter(self, config): + """Configure a filter from a dictionary.""" + if '()' in config: + result = self.configure_custom(config) + else: + name = config.get('name', '') + result = logging.Filter(name) + return result + + def add_filters(self, filterer, filters): + """Add filters to a filterer from a list of names.""" + for f in filters: + try: + filterer.addFilter(self.config['filters'][f]) + except StandardError as e: + raise ValueError('Unable to add filter %r: %s' % (f, e)) + + def configure_handler(self, config): + """Configure a handler from a dictionary.""" + formatter = config.pop('formatter', None) + if formatter: + try: + formatter = self.config['formatters'][formatter] + except StandardError as e: + raise ValueError('Unable to set formatter ' + '%r: %s' % (formatter, e)) + level = config.pop('level', None) + filters = config.pop('filters', None) + if '()' in config: + c = config.pop('()') + if not hasattr(c, '__call__') and hasattr(types, 'ClassType') and type(c) != types.ClassType: + c = self.resolve(c) + factory = c + else: + klass = self.resolve(config.pop('class')) + # Special case for handler which refers to another handler + if issubclass(klass, logging.handlers.MemoryHandler) and\ + 'target' in config: + try: + config['target'] = self.config['handlers'][config['target']] + except StandardError as e: + raise ValueError('Unable to set target handler ' + '%r: %s' % (config['target'], e)) + elif issubclass(klass, logging.handlers.SMTPHandler) and\ + 'mailhost' in config: + config['mailhost'] = self.as_tuple(config['mailhost']) + elif issubclass(klass, logging.handlers.SysLogHandler) and\ + 'address' in config: + config['address'] = self.as_tuple(config['address']) + factory = klass + kwargs = dict((k, config[k]) for k in config if valid_ident(k)) + try: + result = factory(**kwargs) + except TypeError as te: + if "'stream'" not in str(te): + raise + # The argument name changed from strm to stream + # Retry with old name. + # This is so that code can be used with older Python versions + #(e.g. by Django) + kwargs['strm'] = kwargs.pop('stream') + result = factory(**kwargs) + if formatter: + result.setFormatter(formatter) + if level is not None: + result.setLevel(_checkLevel(level)) + if filters: + self.add_filters(result, filters) + return result + + def add_handlers(self, logger, handlers): + """Add handlers to a logger from a list of names.""" + for h in handlers: + try: + logger.addHandler(self.config['handlers'][h]) + except StandardError as e: + raise ValueError('Unable to add handler %r: %s' % (h, e)) + + def common_logger_config(self, logger, config, incremental=False): + """ + Perform configuration which is common to root and non-root loggers. + """ + level = config.get('level', None) + if level is not None: + logger.setLevel(_checkLevel(level)) + if not incremental: + # Remove any existing handlers + for h in logger.handlers[:]: + logger.removeHandler(h) + handlers = config.get('handlers', None) + if handlers: + self.add_handlers(logger, handlers) + filters = config.get('filters', None) + if filters: + self.add_filters(logger, filters) + + def configure_logger(self, name, config, incremental=False): + """Configure a non-root logger from a dictionary.""" + logger = logging.getLogger(name) + self.common_logger_config(logger, config, incremental) + propagate = config.get('propagate', None) + if propagate is not None: + logger.propagate = propagate + + def configure_root(self, config, incremental=False): + """Configure a root logger from a dictionary.""" + root = logging.getLogger() + self.common_logger_config(root, config, incremental) + +dictConfigClass = DictConfigurator + + +def dictConfig(config): + """Configure logging using a dictionary.""" + dictConfigClass(config).configure() diff --git a/week-0/day-3/my_todo_app/venvironment/lib/python3.6/site-packages/pip/download.py b/week-0/day-3/my_todo_app/venvironment/lib/python3.6/site-packages/pip/download.py new file mode 100644 index 00000000..54d3131d --- /dev/null +++ b/week-0/day-3/my_todo_app/venvironment/lib/python3.6/site-packages/pip/download.py @@ -0,0 +1,906 @@ +from __future__ import absolute_import + +import cgi +import email.utils +import getpass +import json +import logging +import mimetypes +import os +import platform +import re +import shutil +import sys +import tempfile + +try: + import ssl # noqa + HAS_TLS = True +except ImportError: + HAS_TLS = False + +from pip._vendor.six.moves.urllib import parse as urllib_parse +from pip._vendor.six.moves.urllib import request as urllib_request + +import pip + +from pip.exceptions import InstallationError, HashMismatch +from pip.models import PyPI +from pip.utils import (splitext, rmtree, format_size, display_path, + backup_dir, ask_path_exists, unpack_file, + ARCHIVE_EXTENSIONS, consume, call_subprocess) +from pip.utils.encoding import auto_decode +from pip.utils.filesystem import check_path_owner +from pip.utils.logging import indent_log +from pip.utils.setuptools_build import SETUPTOOLS_SHIM +from pip.utils.glibc import libc_ver +from pip.utils.ui import DownloadProgressBar, DownloadProgressSpinner +from pip.locations import write_delete_marker_file +from pip.vcs import vcs +from pip._vendor import requests, six +from pip._vendor.requests.adapters import BaseAdapter, HTTPAdapter +from pip._vendor.requests.auth import AuthBase, HTTPBasicAuth +from pip._vendor.requests.models import CONTENT_CHUNK_SIZE, Response +from pip._vendor.requests.utils import get_netrc_auth +from pip._vendor.requests.structures import CaseInsensitiveDict +from pip._vendor.requests.packages import urllib3 +from pip._vendor.cachecontrol import CacheControlAdapter +from pip._vendor.cachecontrol.caches import FileCache +from pip._vendor.lockfile import LockError +from pip._vendor.six.moves import xmlrpc_client + + +__all__ = ['get_file_content', + 'is_url', 'url_to_path', 'path_to_url', + 'is_archive_file', 'unpack_vcs_link', + 'unpack_file_url', 'is_vcs_url', 'is_file_url', + 'unpack_http_url', 'unpack_url'] + + +logger = logging.getLogger(__name__) + + +def user_agent(): + """ + Return a string representing the user agent. + """ + data = { + "installer": {"name": "pip", "version": pip.__version__}, + "python": platform.python_version(), + "implementation": { + "name": platform.python_implementation(), + }, + } + + if data["implementation"]["name"] == 'CPython': + data["implementation"]["version"] = platform.python_version() + elif data["implementation"]["name"] == 'PyPy': + if sys.pypy_version_info.releaselevel == 'final': + pypy_version_info = sys.pypy_version_info[:3] + else: + pypy_version_info = sys.pypy_version_info + data["implementation"]["version"] = ".".join( + [str(x) for x in pypy_version_info] + ) + elif data["implementation"]["name"] == 'Jython': + # Complete Guess + data["implementation"]["version"] = platform.python_version() + elif data["implementation"]["name"] == 'IronPython': + # Complete Guess + data["implementation"]["version"] = platform.python_version() + + if sys.platform.startswith("linux"): + from pip._vendor import distro + distro_infos = dict(filter( + lambda x: x[1], + zip(["name", "version", "id"], distro.linux_distribution()), + )) + libc = dict(filter( + lambda x: x[1], + zip(["lib", "version"], libc_ver()), + )) + if libc: + distro_infos["libc"] = libc + if distro_infos: + data["distro"] = distro_infos + + if sys.platform.startswith("darwin") and platform.mac_ver()[0]: + data["distro"] = {"name": "macOS", "version": platform.mac_ver()[0]} + + if platform.system(): + data.setdefault("system", {})["name"] = platform.system() + + if platform.release(): + data.setdefault("system", {})["release"] = platform.release() + + if platform.machine(): + data["cpu"] = platform.machine() + + # Python 2.6 doesn't have ssl.OPENSSL_VERSION. + if HAS_TLS and sys.version_info[:2] > (2, 6): + data["openssl_version"] = ssl.OPENSSL_VERSION + + return "{data[installer][name]}/{data[installer][version]} {json}".format( + data=data, + json=json.dumps(data, separators=(",", ":"), sort_keys=True), + ) + + +class MultiDomainBasicAuth(AuthBase): + + def __init__(self, prompting=True): + self.prompting = prompting + self.passwords = {} + + def __call__(self, req): + parsed = urllib_parse.urlparse(req.url) + + # Get the netloc without any embedded credentials + netloc = parsed.netloc.rsplit("@", 1)[-1] + + # Set the url of the request to the url without any credentials + req.url = urllib_parse.urlunparse(parsed[:1] + (netloc,) + parsed[2:]) + + # Use any stored credentials that we have for this netloc + username, password = self.passwords.get(netloc, (None, None)) + + # Extract credentials embedded in the url if we have none stored + if username is None: + username, password = self.parse_credentials(parsed.netloc) + + # Get creds from netrc if we still don't have them + if username is None and password is None: + netrc_auth = get_netrc_auth(req.url) + username, password = netrc_auth if netrc_auth else (None, None) + + if username or password: + # Store the username and password + self.passwords[netloc] = (username, password) + + # Send the basic auth with this request + req = HTTPBasicAuth(username or "", password or "")(req) + + # Attach a hook to handle 401 responses + req.register_hook("response", self.handle_401) + + return req + + def handle_401(self, resp, **kwargs): + # We only care about 401 responses, anything else we want to just + # pass through the actual response + if resp.status_code != 401: + return resp + + # We are not able to prompt the user so simply return the response + if not self.prompting: + return resp + + parsed = urllib_parse.urlparse(resp.url) + + # Prompt the user for a new username and password + username = six.moves.input("User for %s: " % parsed.netloc) + password = getpass.getpass("Password: ") + + # Store the new username and password to use for future requests + if username or password: + self.passwords[parsed.netloc] = (username, password) + + # Consume content and release the original connection to allow our new + # request to reuse the same one. + resp.content + resp.raw.release_conn() + + # Add our new username and password to the request + req = HTTPBasicAuth(username or "", password or "")(resp.request) + + # Send our new request + new_resp = resp.connection.send(req, **kwargs) + new_resp.history.append(resp) + + return new_resp + + def parse_credentials(self, netloc): + if "@" in netloc: + userinfo = netloc.rsplit("@", 1)[0] + if ":" in userinfo: + return userinfo.split(":", 1) + return userinfo, None + return None, None + + +class LocalFSAdapter(BaseAdapter): + + def send(self, request, stream=None, timeout=None, verify=None, cert=None, + proxies=None): + pathname = url_to_path(request.url) + + resp = Response() + resp.status_code = 200 + resp.url = request.url + + try: + stats = os.stat(pathname) + except OSError as exc: + resp.status_code = 404 + resp.raw = exc + else: + modified = email.utils.formatdate(stats.st_mtime, usegmt=True) + content_type = mimetypes.guess_type(pathname)[0] or "text/plain" + resp.headers = CaseInsensitiveDict({ + "Content-Type": content_type, + "Content-Length": stats.st_size, + "Last-Modified": modified, + }) + + resp.raw = open(pathname, "rb") + resp.close = resp.raw.close + + return resp + + def close(self): + pass + + +class SafeFileCache(FileCache): + """ + A file based cache which is safe to use even when the target directory may + not be accessible or writable. + """ + + def __init__(self, *args, **kwargs): + super(SafeFileCache, self).__init__(*args, **kwargs) + + # Check to ensure that the directory containing our cache directory + # is owned by the user current executing pip. If it does not exist + # we will check the parent directory until we find one that does exist. + # If it is not owned by the user executing pip then we will disable + # the cache and log a warning. + if not check_path_owner(self.directory): + logger.warning( + "The directory '%s' or its parent directory is not owned by " + "the current user and the cache has been disabled. Please " + "check the permissions and owner of that directory. If " + "executing pip with sudo, you may want sudo's -H flag.", + self.directory, + ) + + # Set our directory to None to disable the Cache + self.directory = None + + def get(self, *args, **kwargs): + # If we don't have a directory, then the cache should be a no-op. + if self.directory is None: + return + + try: + return super(SafeFileCache, self).get(*args, **kwargs) + except (LockError, OSError, IOError): + # We intentionally silence this error, if we can't access the cache + # then we can just skip caching and process the request as if + # caching wasn't enabled. + pass + + def set(self, *args, **kwargs): + # If we don't have a directory, then the cache should be a no-op. + if self.directory is None: + return + + try: + return super(SafeFileCache, self).set(*args, **kwargs) + except (LockError, OSError, IOError): + # We intentionally silence this error, if we can't access the cache + # then we can just skip caching and process the request as if + # caching wasn't enabled. + pass + + def delete(self, *args, **kwargs): + # If we don't have a directory, then the cache should be a no-op. + if self.directory is None: + return + + try: + return super(SafeFileCache, self).delete(*args, **kwargs) + except (LockError, OSError, IOError): + # We intentionally silence this error, if we can't access the cache + # then we can just skip caching and process the request as if + # caching wasn't enabled. + pass + + +class InsecureHTTPAdapter(HTTPAdapter): + + def cert_verify(self, conn, url, verify, cert): + conn.cert_reqs = 'CERT_NONE' + conn.ca_certs = None + + +class PipSession(requests.Session): + + timeout = None + + def __init__(self, *args, **kwargs): + retries = kwargs.pop("retries", 0) + cache = kwargs.pop("cache", None) + insecure_hosts = kwargs.pop("insecure_hosts", []) + + super(PipSession, self).__init__(*args, **kwargs) + + # Attach our User Agent to the request + self.headers["User-Agent"] = user_agent() + + # Attach our Authentication handler to the session + self.auth = MultiDomainBasicAuth() + + # Create our urllib3.Retry instance which will allow us to customize + # how we handle retries. + retries = urllib3.Retry( + # Set the total number of retries that a particular request can + # have. + total=retries, + + # A 503 error from PyPI typically means that the Fastly -> Origin + # connection got interrupted in some way. A 503 error in general + # is typically considered a transient error so we'll go ahead and + # retry it. + status_forcelist=[503], + + # Add a small amount of back off between failed requests in + # order to prevent hammering the service. + backoff_factor=0.25, + ) + + # We want to _only_ cache responses on securely fetched origins. We do + # this because we can't validate the response of an insecurely fetched + # origin, and we don't want someone to be able to poison the cache and + # require manual eviction from the cache to fix it. + if cache: + secure_adapter = CacheControlAdapter( + cache=SafeFileCache(cache, use_dir_lock=True), + max_retries=retries, + ) + else: + secure_adapter = HTTPAdapter(max_retries=retries) + + # Our Insecure HTTPAdapter disables HTTPS validation. It does not + # support caching (see above) so we'll use it for all http:// URLs as + # well as any https:// host that we've marked as ignoring TLS errors + # for. + insecure_adapter = InsecureHTTPAdapter(max_retries=retries) + + self.mount("https://", secure_adapter) + self.mount("http://", insecure_adapter) + + # Enable file:// urls + self.mount("file://", LocalFSAdapter()) + + # We want to use a non-validating adapter for any requests which are + # deemed insecure. + for host in insecure_hosts: + self.mount("https://{0}/".format(host), insecure_adapter) + + def request(self, method, url, *args, **kwargs): + # Allow setting a default timeout on a session + kwargs.setdefault("timeout", self.timeout) + + # Dispatch the actual request + return super(PipSession, self).request(method, url, *args, **kwargs) + + +def get_file_content(url, comes_from=None, session=None): + """Gets the content of a file; it may be a filename, file: URL, or + http: URL. Returns (location, content). Content is unicode.""" + if session is None: + raise TypeError( + "get_file_content() missing 1 required keyword argument: 'session'" + ) + + match = _scheme_re.search(url) + if match: + scheme = match.group(1).lower() + if (scheme == 'file' and comes_from and + comes_from.startswith('http')): + raise InstallationError( + 'Requirements file %s references URL %s, which is local' + % (comes_from, url)) + if scheme == 'file': + path = url.split(':', 1)[1] + path = path.replace('\\', '/') + match = _url_slash_drive_re.match(path) + if match: + path = match.group(1) + ':' + path.split('|', 1)[1] + path = urllib_parse.unquote(path) + if path.startswith('/'): + path = '/' + path.lstrip('/') + url = path + else: + # FIXME: catch some errors + resp = session.get(url) + resp.raise_for_status() + return resp.url, resp.text + try: + with open(url, 'rb') as f: + content = auto_decode(f.read()) + except IOError as exc: + raise InstallationError( + 'Could not open requirements file: %s' % str(exc) + ) + return url, content + + +_scheme_re = re.compile(r'^(http|https|file):', re.I) +_url_slash_drive_re = re.compile(r'/*([a-z])\|', re.I) + + +def is_url(name): + """Returns true if the name looks like a URL""" + if ':' not in name: + return False + scheme = name.split(':', 1)[0].lower() + return scheme in ['http', 'https', 'file', 'ftp'] + vcs.all_schemes + + +def url_to_path(url): + """ + Convert a file: URL to a path. + """ + assert url.startswith('file:'), ( + "You can only turn file: urls into filenames (not %r)" % url) + + _, netloc, path, _, _ = urllib_parse.urlsplit(url) + + # if we have a UNC path, prepend UNC share notation + if netloc: + netloc = '\\\\' + netloc + + path = urllib_request.url2pathname(netloc + path) + return path + + +def path_to_url(path): + """ + Convert a path to a file: URL. The path will be made absolute and have + quoted path parts. + """ + path = os.path.normpath(os.path.abspath(path)) + url = urllib_parse.urljoin('file:', urllib_request.pathname2url(path)) + return url + + +def is_archive_file(name): + """Return True if `name` is a considered as an archive file.""" + ext = splitext(name)[1].lower() + if ext in ARCHIVE_EXTENSIONS: + return True + return False + + +def unpack_vcs_link(link, location): + vcs_backend = _get_used_vcs_backend(link) + vcs_backend.unpack(location) + + +def _get_used_vcs_backend(link): + for backend in vcs.backends: + if link.scheme in backend.schemes: + vcs_backend = backend(link.url) + return vcs_backend + + +def is_vcs_url(link): + return bool(_get_used_vcs_backend(link)) + + +def is_file_url(link): + return link.url.lower().startswith('file:') + + +def is_dir_url(link): + """Return whether a file:// Link points to a directory. + + ``link`` must not have any other scheme but file://. Call is_file_url() + first. + + """ + link_path = url_to_path(link.url_without_fragment) + return os.path.isdir(link_path) + + +def _progress_indicator(iterable, *args, **kwargs): + return iterable + + +def _download_url(resp, link, content_file, hashes): + try: + total_length = int(resp.headers['content-length']) + except (ValueError, KeyError, TypeError): + total_length = 0 + + cached_resp = getattr(resp, "from_cache", False) + + if logger.getEffectiveLevel() > logging.INFO: + show_progress = False + elif cached_resp: + show_progress = False + elif total_length > (40 * 1000): + show_progress = True + elif not total_length: + show_progress = True + else: + show_progress = False + + show_url = link.show_url + + def resp_read(chunk_size): + try: + # Special case for urllib3. + for chunk in resp.raw.stream( + chunk_size, + # We use decode_content=False here because we don't + # want urllib3 to mess with the raw bytes we get + # from the server. If we decompress inside of + # urllib3 then we cannot verify the checksum + # because the checksum will be of the compressed + # file. This breakage will only occur if the + # server adds a Content-Encoding header, which + # depends on how the server was configured: + # - Some servers will notice that the file isn't a + # compressible file and will leave the file alone + # and with an empty Content-Encoding + # - Some servers will notice that the file is + # already compressed and will leave the file + # alone and will add a Content-Encoding: gzip + # header + # - Some servers won't notice anything at all and + # will take a file that's already been compressed + # and compress it again and set the + # Content-Encoding: gzip header + # + # By setting this not to decode automatically we + # hope to eliminate problems with the second case. + decode_content=False): + yield chunk + except AttributeError: + # Standard file-like object. + while True: + chunk = resp.raw.read(chunk_size) + if not chunk: + break + yield chunk + + def written_chunks(chunks): + for chunk in chunks: + content_file.write(chunk) + yield chunk + + progress_indicator = _progress_indicator + + if link.netloc == PyPI.netloc: + url = show_url + else: + url = link.url_without_fragment + + if show_progress: # We don't show progress on cached responses + if total_length: + logger.info("Downloading %s (%s)", url, format_size(total_length)) + progress_indicator = DownloadProgressBar(max=total_length).iter + else: + logger.info("Downloading %s", url) + progress_indicator = DownloadProgressSpinner().iter + elif cached_resp: + logger.info("Using cached %s", url) + else: + logger.info("Downloading %s", url) + + logger.debug('Downloading from URL %s', link) + + downloaded_chunks = written_chunks( + progress_indicator( + resp_read(CONTENT_CHUNK_SIZE), + CONTENT_CHUNK_SIZE + ) + ) + if hashes: + hashes.check_against_chunks(downloaded_chunks) + else: + consume(downloaded_chunks) + + +def _copy_file(filename, location, link): + copy = True + download_location = os.path.join(location, link.filename) + if os.path.exists(download_location): + response = ask_path_exists( + 'The file %s exists. (i)gnore, (w)ipe, (b)ackup, (a)abort' % + display_path(download_location), ('i', 'w', 'b', 'a')) + if response == 'i': + copy = False + elif response == 'w': + logger.warning('Deleting %s', display_path(download_location)) + os.remove(download_location) + elif response == 'b': + dest_file = backup_dir(download_location) + logger.warning( + 'Backing up %s to %s', + display_path(download_location), + display_path(dest_file), + ) + shutil.move(download_location, dest_file) + elif response == 'a': + sys.exit(-1) + if copy: + shutil.copy(filename, download_location) + logger.info('Saved %s', display_path(download_location)) + + +def unpack_http_url(link, location, download_dir=None, + session=None, hashes=None): + if session is None: + raise TypeError( + "unpack_http_url() missing 1 required keyword argument: 'session'" + ) + + temp_dir = tempfile.mkdtemp('-unpack', 'pip-') + + # If a download dir is specified, is the file already downloaded there? + already_downloaded_path = None + if download_dir: + already_downloaded_path = _check_download_dir(link, + download_dir, + hashes) + + if already_downloaded_path: + from_path = already_downloaded_path + content_type = mimetypes.guess_type(from_path)[0] + else: + # let's download to a tmp dir + from_path, content_type = _download_http_url(link, + session, + temp_dir, + hashes) + + # unpack the archive to the build dir location. even when only downloading + # archives, they have to be unpacked to parse dependencies + unpack_file(from_path, location, content_type, link) + + # a download dir is specified; let's copy the archive there + if download_dir and not already_downloaded_path: + _copy_file(from_path, download_dir, link) + + if not already_downloaded_path: + os.unlink(from_path) + rmtree(temp_dir) + + +def unpack_file_url(link, location, download_dir=None, hashes=None): + """Unpack link into location. + + If download_dir is provided and link points to a file, make a copy + of the link file inside download_dir. + """ + link_path = url_to_path(link.url_without_fragment) + + # If it's a url to a local directory + if is_dir_url(link): + if os.path.isdir(location): + rmtree(location) + shutil.copytree(link_path, location, symlinks=True) + if download_dir: + logger.info('Link is a directory, ignoring download_dir') + return + + # If --require-hashes is off, `hashes` is either empty, the + # link's embedded hash, or MissingHashes; it is required to + # match. If --require-hashes is on, we are satisfied by any + # hash in `hashes` matching: a URL-based or an option-based + # one; no internet-sourced hash will be in `hashes`. + if hashes: + hashes.check_against_path(link_path) + + # If a download dir is specified, is the file already there and valid? + already_downloaded_path = None + if download_dir: + already_downloaded_path = _check_download_dir(link, + download_dir, + hashes) + + if already_downloaded_path: + from_path = already_downloaded_path + else: + from_path = link_path + + content_type = mimetypes.guess_type(from_path)[0] + + # unpack the archive to the build dir location. even when only downloading + # archives, they have to be unpacked to parse dependencies + unpack_file(from_path, location, content_type, link) + + # a download dir is specified and not already downloaded + if download_dir and not already_downloaded_path: + _copy_file(from_path, download_dir, link) + + +def _copy_dist_from_dir(link_path, location): + """Copy distribution files in `link_path` to `location`. + + Invoked when user requests to install a local directory. E.g.: + + pip install . + pip install ~/dev/git-repos/python-prompt-toolkit + + """ + + # Note: This is currently VERY SLOW if you have a lot of data in the + # directory, because it copies everything with `shutil.copytree`. + # What it should really do is build an sdist and install that. + # See https://github.com/pypa/pip/issues/2195 + + if os.path.isdir(location): + rmtree(location) + + # build an sdist + setup_py = 'setup.py' + sdist_args = [sys.executable] + sdist_args.append('-c') + sdist_args.append(SETUPTOOLS_SHIM % setup_py) + sdist_args.append('sdist') + sdist_args += ['--dist-dir', location] + logger.info('Running setup.py sdist for %s', link_path) + + with indent_log(): + call_subprocess(sdist_args, cwd=link_path, show_stdout=False) + + # unpack sdist into `location` + sdist = os.path.join(location, os.listdir(location)[0]) + logger.info('Unpacking sdist %s into %s', sdist, location) + unpack_file(sdist, location, content_type=None, link=None) + + +class PipXmlrpcTransport(xmlrpc_client.Transport): + """Provide a `xmlrpclib.Transport` implementation via a `PipSession` + object. + """ + + def __init__(self, index_url, session, use_datetime=False): + xmlrpc_client.Transport.__init__(self, use_datetime) + index_parts = urllib_parse.urlparse(index_url) + self._scheme = index_parts.scheme + self._session = session + + def request(self, host, handler, request_body, verbose=False): + parts = (self._scheme, host, handler, None, None, None) + url = urllib_parse.urlunparse(parts) + try: + headers = {'Content-Type': 'text/xml'} + response = self._session.post(url, data=request_body, + headers=headers, stream=True) + response.raise_for_status() + self.verbose = verbose + return self.parse_response(response.raw) + except requests.HTTPError as exc: + logger.critical( + "HTTP error %s while getting %s", + exc.response.status_code, url, + ) + raise + + +def unpack_url(link, location, download_dir=None, + only_download=False, session=None, hashes=None): + """Unpack link. + If link is a VCS link: + if only_download, export into download_dir and ignore location + else unpack into location + for other types of link: + - unpack into location + - if download_dir, copy the file into download_dir + - if only_download, mark location for deletion + + :param hashes: A Hashes object, one of whose embedded hashes must match, + or HashMismatch will be raised. If the Hashes is empty, no matches are + required, and unhashable types of requirements (like VCS ones, which + would ordinarily raise HashUnsupported) are allowed. + """ + # non-editable vcs urls + if is_vcs_url(link): + unpack_vcs_link(link, location) + + # file urls + elif is_file_url(link): + unpack_file_url(link, location, download_dir, hashes=hashes) + + # http urls + else: + if session is None: + session = PipSession() + + unpack_http_url( + link, + location, + download_dir, + session, + hashes=hashes + ) + if only_download: + write_delete_marker_file(location) + + +def _download_http_url(link, session, temp_dir, hashes): + """Download link url into temp_dir using provided session""" + target_url = link.url.split('#', 1)[0] + try: + resp = session.get( + target_url, + # We use Accept-Encoding: identity here because requests + # defaults to accepting compressed responses. This breaks in + # a variety of ways depending on how the server is configured. + # - Some servers will notice that the file isn't a compressible + # file and will leave the file alone and with an empty + # Content-Encoding + # - Some servers will notice that the file is already + # compressed and will leave the file alone and will add a + # Content-Encoding: gzip header + # - Some servers won't notice anything at all and will take + # a file that's already been compressed and compress it again + # and set the Content-Encoding: gzip header + # By setting this to request only the identity encoding We're + # hoping to eliminate the third case. Hopefully there does not + # exist a server which when given a file will notice it is + # already compressed and that you're not asking for a + # compressed file and will then decompress it before sending + # because if that's the case I don't think it'll ever be + # possible to make this work. + headers={"Accept-Encoding": "identity"}, + stream=True, + ) + resp.raise_for_status() + except requests.HTTPError as exc: + logger.critical( + "HTTP error %s while getting %s", exc.response.status_code, link, + ) + raise + + content_type = resp.headers.get('content-type', '') + filename = link.filename # fallback + # Have a look at the Content-Disposition header for a better guess + content_disposition = resp.headers.get('content-disposition') + if content_disposition: + type, params = cgi.parse_header(content_disposition) + # We use ``or`` here because we don't want to use an "empty" value + # from the filename param. + filename = params.get('filename') or filename + ext = splitext(filename)[1] + if not ext: + ext = mimetypes.guess_extension(content_type) + if ext: + filename += ext + if not ext and link.url != resp.url: + ext = os.path.splitext(resp.url)[1] + if ext: + filename += ext + file_path = os.path.join(temp_dir, filename) + with open(file_path, 'wb') as content_file: + _download_url(resp, link, content_file, hashes) + return file_path, content_type + + +def _check_download_dir(link, download_dir, hashes): + """ Check download_dir for previously downloaded file with correct hash + If a correct file is found return its path else None + """ + download_path = os.path.join(download_dir, link.filename) + if os.path.exists(download_path): + # If already downloaded, does its hash match? + logger.info('File was already downloaded %s', download_path) + if hashes: + try: + hashes.check_against_path(download_path) + except HashMismatch: + logger.warning( + 'Previously-downloaded file %s has bad hash. ' + 'Re-downloading.', + download_path + ) + os.unlink(download_path) + return None + return download_path + return None diff --git a/week-0/day-3/my_todo_app/venvironment/lib/python3.6/site-packages/pip/exceptions.py b/week-0/day-3/my_todo_app/venvironment/lib/python3.6/site-packages/pip/exceptions.py new file mode 100644 index 00000000..50b527f9 --- /dev/null +++ b/week-0/day-3/my_todo_app/venvironment/lib/python3.6/site-packages/pip/exceptions.py @@ -0,0 +1,244 @@ +"""Exceptions used throughout package""" +from __future__ import absolute_import + +from itertools import chain, groupby, repeat + +from pip._vendor.six import iteritems + + +class PipError(Exception): + """Base pip exception""" + + +class InstallationError(PipError): + """General exception during installation""" + + +class UninstallationError(PipError): + """General exception during uninstallation""" + + +class DistributionNotFound(InstallationError): + """Raised when a distribution cannot be found to satisfy a requirement""" + + +class RequirementsFileParseError(InstallationError): + """Raised when a general error occurs parsing a requirements file line.""" + + +class BestVersionAlreadyInstalled(PipError): + """Raised when the most up-to-date version of a package is already + installed.""" + + +class BadCommand(PipError): + """Raised when virtualenv or a command is not found""" + + +class CommandError(PipError): + """Raised when there is an error in command-line arguments""" + + +class PreviousBuildDirError(PipError): + """Raised when there's a previous conflicting build directory""" + + +class InvalidWheelFilename(InstallationError): + """Invalid wheel filename.""" + + +class UnsupportedWheel(InstallationError): + """Unsupported wheel.""" + + +class HashErrors(InstallationError): + """Multiple HashError instances rolled into one for reporting""" + + def __init__(self): + self.errors = [] + + def append(self, error): + self.errors.append(error) + + def __str__(self): + lines = [] + self.errors.sort(key=lambda e: e.order) + for cls, errors_of_cls in groupby(self.errors, lambda e: e.__class__): + lines.append(cls.head) + lines.extend(e.body() for e in errors_of_cls) + if lines: + return '\n'.join(lines) + + def __nonzero__(self): + return bool(self.errors) + + def __bool__(self): + return self.__nonzero__() + + +class HashError(InstallationError): + """ + A failure to verify a package against known-good hashes + + :cvar order: An int sorting hash exception classes by difficulty of + recovery (lower being harder), so the user doesn't bother fretting + about unpinned packages when he has deeper issues, like VCS + dependencies, to deal with. Also keeps error reports in a + deterministic order. + :cvar head: A section heading for display above potentially many + exceptions of this kind + :ivar req: The InstallRequirement that triggered this error. This is + pasted on after the exception is instantiated, because it's not + typically available earlier. + + """ + req = None + head = '' + + def body(self): + """Return a summary of me for display under the heading. + + This default implementation simply prints a description of the + triggering requirement. + + :param req: The InstallRequirement that provoked this error, with + populate_link() having already been called + + """ + return ' %s' % self._requirement_name() + + def __str__(self): + return '%s\n%s' % (self.head, self.body()) + + def _requirement_name(self): + """Return a description of the requirement that triggered me. + + This default implementation returns long description of the req, with + line numbers + + """ + return str(self.req) if self.req else 'unknown package' + + +class VcsHashUnsupported(HashError): + """A hash was provided for a version-control-system-based requirement, but + we don't have a method for hashing those.""" + + order = 0 + head = ("Can't verify hashes for these requirements because we don't " + "have a way to hash version control repositories:") + + +class DirectoryUrlHashUnsupported(HashError): + """A hash was provided for a version-control-system-based requirement, but + we don't have a method for hashing those.""" + + order = 1 + head = ("Can't verify hashes for these file:// requirements because they " + "point to directories:") + + +class HashMissing(HashError): + """A hash was needed for a requirement but is absent.""" + + order = 2 + head = ('Hashes are required in --require-hashes mode, but they are ' + 'missing from some requirements. Here is a list of those ' + 'requirements along with the hashes their downloaded archives ' + 'actually had. Add lines like these to your requirements files to ' + 'prevent tampering. (If you did not enable --require-hashes ' + 'manually, note that it turns on automatically when any package ' + 'has a hash.)') + + def __init__(self, gotten_hash): + """ + :param gotten_hash: The hash of the (possibly malicious) archive we + just downloaded + """ + self.gotten_hash = gotten_hash + + def body(self): + from pip.utils.hashes import FAVORITE_HASH # Dodge circular import. + + package = None + if self.req: + # In the case of URL-based requirements, display the original URL + # seen in the requirements file rather than the package name, + # so the output can be directly copied into the requirements file. + package = (self.req.original_link if self.req.original_link + # In case someone feeds something downright stupid + # to InstallRequirement's constructor. + else getattr(self.req, 'req', None)) + return ' %s --hash=%s:%s' % (package or 'unknown package', + FAVORITE_HASH, + self.gotten_hash) + + +class HashUnpinned(HashError): + """A requirement had a hash specified but was not pinned to a specific + version.""" + + order = 3 + head = ('In --require-hashes mode, all requirements must have their ' + 'versions pinned with ==. These do not:') + + +class HashMismatch(HashError): + """ + Distribution file hash values don't match. + + :ivar package_name: The name of the package that triggered the hash + mismatch. Feel free to write to this after the exception is raise to + improve its error message. + + """ + order = 4 + head = ('THESE PACKAGES DO NOT MATCH THE HASHES FROM THE REQUIREMENTS ' + 'FILE. If you have updated the package versions, please update ' + 'the hashes. Otherwise, examine the package contents carefully; ' + 'someone may have tampered with them.') + + def __init__(self, allowed, gots): + """ + :param allowed: A dict of algorithm names pointing to lists of allowed + hex digests + :param gots: A dict of algorithm names pointing to hashes we + actually got from the files under suspicion + """ + self.allowed = allowed + self.gots = gots + + def body(self): + return ' %s:\n%s' % (self._requirement_name(), + self._hash_comparison()) + + def _hash_comparison(self): + """ + Return a comparison of actual and expected hash values. + + Example:: + + Expected sha256 abcdeabcdeabcdeabcdeabcdeabcdeabcdeabcdeabcde + or 123451234512345123451234512345123451234512345 + Got bcdefbcdefbcdefbcdefbcdefbcdefbcdefbcdefbcdef + + """ + def hash_then_or(hash_name): + # For now, all the decent hashes have 6-char names, so we can get + # away with hard-coding space literals. + return chain([hash_name], repeat(' or')) + + lines = [] + for hash_name, expecteds in iteritems(self.allowed): + prefix = hash_then_or(hash_name) + lines.extend((' Expected %s %s' % (next(prefix), e)) + for e in expecteds) + lines.append(' Got %s\n' % + self.gots[hash_name].hexdigest()) + prefix = ' or' + return '\n'.join(lines) + + +class UnsupportedPythonVersion(InstallationError): + """Unsupported python version according to Requires-Python package + metadata.""" diff --git a/week-0/day-3/my_todo_app/venvironment/lib/python3.6/site-packages/pip/index.py b/week-0/day-3/my_todo_app/venvironment/lib/python3.6/site-packages/pip/index.py new file mode 100644 index 00000000..acd90d6c --- /dev/null +++ b/week-0/day-3/my_todo_app/venvironment/lib/python3.6/site-packages/pip/index.py @@ -0,0 +1,1102 @@ +"""Routines related to PyPI, indexes""" +from __future__ import absolute_import + +import logging +import cgi +from collections import namedtuple +import itertools +import sys +import os +import re +import mimetypes +import posixpath +import warnings + +from pip._vendor.six.moves.urllib import parse as urllib_parse +from pip._vendor.six.moves.urllib import request as urllib_request + +from pip.compat import ipaddress +from pip.utils import ( + cached_property, splitext, normalize_path, + ARCHIVE_EXTENSIONS, SUPPORTED_EXTENSIONS, +) +from pip.utils.deprecation import RemovedInPip10Warning +from pip.utils.logging import indent_log +from pip.utils.packaging import check_requires_python +from pip.exceptions import ( + DistributionNotFound, BestVersionAlreadyInstalled, InvalidWheelFilename, + UnsupportedWheel, +) +from pip.download import HAS_TLS, is_url, path_to_url, url_to_path +from pip.wheel import Wheel, wheel_ext +from pip.pep425tags import get_supported +from pip._vendor import html5lib, requests, six +from pip._vendor.packaging.version import parse as parse_version +from pip._vendor.packaging.utils import canonicalize_name +from pip._vendor.packaging import specifiers +from pip._vendor.requests.exceptions import HTTPError, SSLError +from pip._vendor.distlib.compat import unescape + + +__all__ = ['FormatControl', 'fmt_ctl_handle_mutual_exclude', 'PackageFinder'] + + +SECURE_ORIGINS = [ + # protocol, hostname, port + # Taken from Chrome's list of secure origins (See: http://bit.ly/1qrySKC) + ("https", "*", "*"), + ("*", "localhost", "*"), + ("*", "127.0.0.0/8", "*"), + ("*", "::1/128", "*"), + ("file", "*", None), + # ssh is always secure. + ("ssh", "*", "*"), +] + + +logger = logging.getLogger(__name__) + + +class InstallationCandidate(object): + + def __init__(self, project, version, location): + self.project = project + self.version = parse_version(version) + self.location = location + self._key = (self.project, self.version, self.location) + + def __repr__(self): + return "".format( + self.project, self.version, self.location, + ) + + def __hash__(self): + return hash(self._key) + + def __lt__(self, other): + return self._compare(other, lambda s, o: s < o) + + def __le__(self, other): + return self._compare(other, lambda s, o: s <= o) + + def __eq__(self, other): + return self._compare(other, lambda s, o: s == o) + + def __ge__(self, other): + return self._compare(other, lambda s, o: s >= o) + + def __gt__(self, other): + return self._compare(other, lambda s, o: s > o) + + def __ne__(self, other): + return self._compare(other, lambda s, o: s != o) + + def _compare(self, other, method): + if not isinstance(other, InstallationCandidate): + return NotImplemented + + return method(self._key, other._key) + + +class PackageFinder(object): + """This finds packages. + + This is meant to match easy_install's technique for looking for + packages, by reading pages and looking for appropriate links. + """ + + def __init__(self, find_links, index_urls, allow_all_prereleases=False, + trusted_hosts=None, process_dependency_links=False, + session=None, format_control=None, platform=None, + versions=None, abi=None, implementation=None): + """Create a PackageFinder. + + :param format_control: A FormatControl object or None. Used to control + the selection of source packages / binary packages when consulting + the index and links. + :param platform: A string or None. If None, searches for packages + that are supported by the current system. Otherwise, will find + packages that can be built on the platform passed in. These + packages will only be downloaded for distribution: they will + not be built locally. + :param versions: A list of strings or None. This is passed directly + to pep425tags.py in the get_supported() method. + :param abi: A string or None. This is passed directly + to pep425tags.py in the get_supported() method. + :param implementation: A string or None. This is passed directly + to pep425tags.py in the get_supported() method. + """ + if session is None: + raise TypeError( + "PackageFinder() missing 1 required keyword argument: " + "'session'" + ) + + # Build find_links. If an argument starts with ~, it may be + # a local file relative to a home directory. So try normalizing + # it and if it exists, use the normalized version. + # This is deliberately conservative - it might be fine just to + # blindly normalize anything starting with a ~... + self.find_links = [] + for link in find_links: + if link.startswith('~'): + new_link = normalize_path(link) + if os.path.exists(new_link): + link = new_link + self.find_links.append(link) + + self.index_urls = index_urls + self.dependency_links = [] + + # These are boring links that have already been logged somehow: + self.logged_links = set() + + self.format_control = format_control or FormatControl(set(), set()) + + # Domains that we won't emit warnings for when not using HTTPS + self.secure_origins = [ + ("*", host, "*") + for host in (trusted_hosts if trusted_hosts else []) + ] + + # Do we want to allow _all_ pre-releases? + self.allow_all_prereleases = allow_all_prereleases + + # Do we process dependency links? + self.process_dependency_links = process_dependency_links + + # The Session we'll use to make requests + self.session = session + + # The valid tags to check potential found wheel candidates against + self.valid_tags = get_supported( + versions=versions, + platform=platform, + abi=abi, + impl=implementation, + ) + + # If we don't have TLS enabled, then WARN if anyplace we're looking + # relies on TLS. + if not HAS_TLS: + for link in itertools.chain(self.index_urls, self.find_links): + parsed = urllib_parse.urlparse(link) + if parsed.scheme == "https": + logger.warning( + "pip is configured with locations that require " + "TLS/SSL, however the ssl module in Python is not " + "available." + ) + break + + def add_dependency_links(self, links): + # # FIXME: this shouldn't be global list this, it should only + # # apply to requirements of the package that specifies the + # # dependency_links value + # # FIXME: also, we should track comes_from (i.e., use Link) + if self.process_dependency_links: + warnings.warn( + "Dependency Links processing has been deprecated and will be " + "removed in a future release.", + RemovedInPip10Warning, + ) + self.dependency_links.extend(links) + + @staticmethod + def _sort_locations(locations, expand_dir=False): + """ + Sort locations into "files" (archives) and "urls", and return + a pair of lists (files,urls) + """ + files = [] + urls = [] + + # puts the url for the given file path into the appropriate list + def sort_path(path): + url = path_to_url(path) + if mimetypes.guess_type(url, strict=False)[0] == 'text/html': + urls.append(url) + else: + files.append(url) + + for url in locations: + + is_local_path = os.path.exists(url) + is_file_url = url.startswith('file:') + + if is_local_path or is_file_url: + if is_local_path: + path = url + else: + path = url_to_path(url) + if os.path.isdir(path): + if expand_dir: + path = os.path.realpath(path) + for item in os.listdir(path): + sort_path(os.path.join(path, item)) + elif is_file_url: + urls.append(url) + elif os.path.isfile(path): + sort_path(path) + else: + logger.warning( + "Url '%s' is ignored: it is neither a file " + "nor a directory.", url) + elif is_url(url): + # Only add url with clear scheme + urls.append(url) + else: + logger.warning( + "Url '%s' is ignored. It is either a non-existing " + "path or lacks a specific scheme.", url) + + return files, urls + + def _candidate_sort_key(self, candidate): + """ + Function used to generate link sort key for link tuples. + The greater the return value, the more preferred it is. + If not finding wheels, then sorted by version only. + If finding wheels, then the sort order is by version, then: + 1. existing installs + 2. wheels ordered via Wheel.support_index_min(self.valid_tags) + 3. source archives + Note: it was considered to embed this logic into the Link + comparison operators, but then different sdist links + with the same version, would have to be considered equal + """ + support_num = len(self.valid_tags) + if candidate.location.is_wheel: + # can raise InvalidWheelFilename + wheel = Wheel(candidate.location.filename) + if not wheel.supported(self.valid_tags): + raise UnsupportedWheel( + "%s is not a supported wheel for this platform. It " + "can't be sorted." % wheel.filename + ) + pri = -(wheel.support_index_min(self.valid_tags)) + else: # sdist + pri = -(support_num) + return (candidate.version, pri) + + def _validate_secure_origin(self, logger, location): + # Determine if this url used a secure transport mechanism + parsed = urllib_parse.urlparse(str(location)) + origin = (parsed.scheme, parsed.hostname, parsed.port) + + # The protocol to use to see if the protocol matches. + # Don't count the repository type as part of the protocol: in + # cases such as "git+ssh", only use "ssh". (I.e., Only verify against + # the last scheme.) + protocol = origin[0].rsplit('+', 1)[-1] + + # Determine if our origin is a secure origin by looking through our + # hardcoded list of secure origins, as well as any additional ones + # configured on this PackageFinder instance. + for secure_origin in (SECURE_ORIGINS + self.secure_origins): + if protocol != secure_origin[0] and secure_origin[0] != "*": + continue + + try: + # We need to do this decode dance to ensure that we have a + # unicode object, even on Python 2.x. + addr = ipaddress.ip_address( + origin[1] + if ( + isinstance(origin[1], six.text_type) or + origin[1] is None + ) + else origin[1].decode("utf8") + ) + network = ipaddress.ip_network( + secure_origin[1] + if isinstance(secure_origin[1], six.text_type) + else secure_origin[1].decode("utf8") + ) + except ValueError: + # We don't have both a valid address or a valid network, so + # we'll check this origin against hostnames. + if (origin[1] and + origin[1].lower() != secure_origin[1].lower() and + secure_origin[1] != "*"): + continue + else: + # We have a valid address and network, so see if the address + # is contained within the network. + if addr not in network: + continue + + # Check to see if the port patches + if (origin[2] != secure_origin[2] and + secure_origin[2] != "*" and + secure_origin[2] is not None): + continue + + # If we've gotten here, then this origin matches the current + # secure origin and we should return True + return True + + # If we've gotten to this point, then the origin isn't secure and we + # will not accept it as a valid location to search. We will however + # log a warning that we are ignoring it. + logger.warning( + "The repository located at %s is not a trusted or secure host and " + "is being ignored. If this repository is available via HTTPS it " + "is recommended to use HTTPS instead, otherwise you may silence " + "this warning and allow it anyways with '--trusted-host %s'.", + parsed.hostname, + parsed.hostname, + ) + + return False + + def _get_index_urls_locations(self, project_name): + """Returns the locations found via self.index_urls + + Checks the url_name on the main (first in the list) index and + use this url_name to produce all locations + """ + + def mkurl_pypi_url(url): + loc = posixpath.join( + url, + urllib_parse.quote(canonicalize_name(project_name))) + # For maximum compatibility with easy_install, ensure the path + # ends in a trailing slash. Although this isn't in the spec + # (and PyPI can handle it without the slash) some other index + # implementations might break if they relied on easy_install's + # behavior. + if not loc.endswith('/'): + loc = loc + '/' + return loc + + return [mkurl_pypi_url(url) for url in self.index_urls] + + def find_all_candidates(self, project_name): + """Find all available InstallationCandidate for project_name + + This checks index_urls, find_links and dependency_links. + All versions found are returned as an InstallationCandidate list. + + See _link_package_versions for details on which files are accepted + """ + index_locations = self._get_index_urls_locations(project_name) + index_file_loc, index_url_loc = self._sort_locations(index_locations) + fl_file_loc, fl_url_loc = self._sort_locations( + self.find_links, expand_dir=True) + dep_file_loc, dep_url_loc = self._sort_locations(self.dependency_links) + + file_locations = ( + Link(url) for url in itertools.chain( + index_file_loc, fl_file_loc, dep_file_loc) + ) + + # We trust every url that the user has given us whether it was given + # via --index-url or --find-links + # We explicitly do not trust links that came from dependency_links + # We want to filter out any thing which does not have a secure origin. + url_locations = [ + link for link in itertools.chain( + (Link(url) for url in index_url_loc), + (Link(url) for url in fl_url_loc), + (Link(url) for url in dep_url_loc), + ) + if self._validate_secure_origin(logger, link) + ] + + logger.debug('%d location(s) to search for versions of %s:', + len(url_locations), project_name) + + for location in url_locations: + logger.debug('* %s', location) + + canonical_name = canonicalize_name(project_name) + formats = fmt_ctl_formats(self.format_control, canonical_name) + search = Search(project_name, canonical_name, formats) + find_links_versions = self._package_versions( + # We trust every directly linked archive in find_links + (Link(url, '-f') for url in self.find_links), + search + ) + + page_versions = [] + for page in self._get_pages(url_locations, project_name): + logger.debug('Analyzing links from page %s', page.url) + with indent_log(): + page_versions.extend( + self._package_versions(page.links, search) + ) + + dependency_versions = self._package_versions( + (Link(url) for url in self.dependency_links), search + ) + if dependency_versions: + logger.debug( + 'dependency_links found: %s', + ', '.join([ + version.location.url for version in dependency_versions + ]) + ) + + file_versions = self._package_versions(file_locations, search) + if file_versions: + file_versions.sort(reverse=True) + logger.debug( + 'Local files found: %s', + ', '.join([ + url_to_path(candidate.location.url) + for candidate in file_versions + ]) + ) + + # This is an intentional priority ordering + return ( + file_versions + find_links_versions + page_versions + + dependency_versions + ) + + def find_requirement(self, req, upgrade): + """Try to find a Link matching req + + Expects req, an InstallRequirement and upgrade, a boolean + Returns a Link if found, + Raises DistributionNotFound or BestVersionAlreadyInstalled otherwise + """ + all_candidates = self.find_all_candidates(req.name) + + # Filter out anything which doesn't match our specifier + compatible_versions = set( + req.specifier.filter( + # We turn the version object into a str here because otherwise + # when we're debundled but setuptools isn't, Python will see + # packaging.version.Version and + # pkg_resources._vendor.packaging.version.Version as different + # types. This way we'll use a str as a common data interchange + # format. If we stop using the pkg_resources provided specifier + # and start using our own, we can drop the cast to str(). + [str(c.version) for c in all_candidates], + prereleases=( + self.allow_all_prereleases + if self.allow_all_prereleases else None + ), + ) + ) + applicable_candidates = [ + # Again, converting to str to deal with debundling. + c for c in all_candidates if str(c.version) in compatible_versions + ] + + if applicable_candidates: + best_candidate = max(applicable_candidates, + key=self._candidate_sort_key) + else: + best_candidate = None + + if req.satisfied_by is not None: + installed_version = parse_version(req.satisfied_by.version) + else: + installed_version = None + + if installed_version is None and best_candidate is None: + logger.critical( + 'Could not find a version that satisfies the requirement %s ' + '(from versions: %s)', + req, + ', '.join( + sorted( + set(str(c.version) for c in all_candidates), + key=parse_version, + ) + ) + ) + + raise DistributionNotFound( + 'No matching distribution found for %s' % req + ) + + best_installed = False + if installed_version and ( + best_candidate is None or + best_candidate.version <= installed_version): + best_installed = True + + if not upgrade and installed_version is not None: + if best_installed: + logger.debug( + 'Existing installed version (%s) is most up-to-date and ' + 'satisfies requirement', + installed_version, + ) + else: + logger.debug( + 'Existing installed version (%s) satisfies requirement ' + '(most up-to-date version is %s)', + installed_version, + best_candidate.version, + ) + return None + + if best_installed: + # We have an existing version, and its the best version + logger.debug( + 'Installed version (%s) is most up-to-date (past versions: ' + '%s)', + installed_version, + ', '.join(sorted(compatible_versions, key=parse_version)) or + "none", + ) + raise BestVersionAlreadyInstalled + + logger.debug( + 'Using version %s (newest of versions: %s)', + best_candidate.version, + ', '.join(sorted(compatible_versions, key=parse_version)) + ) + return best_candidate.location + + def _get_pages(self, locations, project_name): + """ + Yields (page, page_url) from the given locations, skipping + locations that have errors. + """ + seen = set() + for location in locations: + if location in seen: + continue + seen.add(location) + + page = self._get_page(location) + if page is None: + continue + + yield page + + _py_version_re = re.compile(r'-py([123]\.?[0-9]?)$') + + def _sort_links(self, links): + """ + Returns elements of links in order, non-egg links first, egg links + second, while eliminating duplicates + """ + eggs, no_eggs = [], [] + seen = set() + for link in links: + if link not in seen: + seen.add(link) + if link.egg_fragment: + eggs.append(link) + else: + no_eggs.append(link) + return no_eggs + eggs + + def _package_versions(self, links, search): + result = [] + for link in self._sort_links(links): + v = self._link_package_versions(link, search) + if v is not None: + result.append(v) + return result + + def _log_skipped_link(self, link, reason): + if link not in self.logged_links: + logger.debug('Skipping link %s; %s', link, reason) + self.logged_links.add(link) + + def _link_package_versions(self, link, search): + """Return an InstallationCandidate or None""" + version = None + if link.egg_fragment: + egg_info = link.egg_fragment + ext = link.ext + else: + egg_info, ext = link.splitext() + if not ext: + self._log_skipped_link(link, 'not a file') + return + if ext not in SUPPORTED_EXTENSIONS: + self._log_skipped_link( + link, 'unsupported archive format: %s' % ext) + return + if "binary" not in search.formats and ext == wheel_ext: + self._log_skipped_link( + link, 'No binaries permitted for %s' % search.supplied) + return + if "macosx10" in link.path and ext == '.zip': + self._log_skipped_link(link, 'macosx10 one') + return + if ext == wheel_ext: + try: + wheel = Wheel(link.filename) + except InvalidWheelFilename: + self._log_skipped_link(link, 'invalid wheel filename') + return + if canonicalize_name(wheel.name) != search.canonical: + self._log_skipped_link( + link, 'wrong project name (not %s)' % search.supplied) + return + + if not wheel.supported(self.valid_tags): + self._log_skipped_link( + link, 'it is not compatible with this Python') + return + + version = wheel.version + + # This should be up by the search.ok_binary check, but see issue 2700. + if "source" not in search.formats and ext != wheel_ext: + self._log_skipped_link( + link, 'No sources permitted for %s' % search.supplied) + return + + if not version: + version = egg_info_matches(egg_info, search.supplied, link) + if version is None: + self._log_skipped_link( + link, 'wrong project name (not %s)' % search.supplied) + return + + match = self._py_version_re.search(version) + if match: + version = version[:match.start()] + py_version = match.group(1) + if py_version != sys.version[:3]: + self._log_skipped_link( + link, 'Python version is incorrect') + return + try: + support_this_python = check_requires_python(link.requires_python) + except specifiers.InvalidSpecifier: + logger.debug("Package %s has an invalid Requires-Python entry: %s", + link.filename, link.requires_python) + support_this_python = True + + if not support_this_python: + logger.debug("The package %s is incompatible with the python" + "version in use. Acceptable python versions are:%s", + link, link.requires_python) + return + logger.debug('Found link %s, version: %s', link, version) + + return InstallationCandidate(search.supplied, version, link) + + def _get_page(self, link): + return HTMLPage.get_page(link, session=self.session) + + +def egg_info_matches( + egg_info, search_name, link, + _egg_info_re=re.compile(r'([a-z0-9_.]+)-([a-z0-9_.!+-]+)', re.I)): + """Pull the version part out of a string. + + :param egg_info: The string to parse. E.g. foo-2.1 + :param search_name: The name of the package this belongs to. None to + infer the name. Note that this cannot unambiguously parse strings + like foo-2-2 which might be foo, 2-2 or foo-2, 2. + :param link: The link the string came from, for logging on failure. + """ + match = _egg_info_re.search(egg_info) + if not match: + logger.debug('Could not parse version from link: %s', link) + return None + if search_name is None: + full_match = match.group(0) + return full_match[full_match.index('-'):] + name = match.group(0).lower() + # To match the "safe" name that pkg_resources creates: + name = name.replace('_', '-') + # project name and version must be separated by a dash + look_for = search_name.lower() + "-" + if name.startswith(look_for): + return match.group(0)[len(look_for):] + else: + return None + + +class HTMLPage(object): + """Represents one page, along with its URL""" + + def __init__(self, content, url, headers=None): + # Determine if we have any encoding information in our headers + encoding = None + if headers and "Content-Type" in headers: + content_type, params = cgi.parse_header(headers["Content-Type"]) + + if "charset" in params: + encoding = params['charset'] + + self.content = content + self.parsed = html5lib.parse( + self.content, + transport_encoding=encoding, + namespaceHTMLElements=False, + ) + self.url = url + self.headers = headers + + def __str__(self): + return self.url + + @classmethod + def get_page(cls, link, skip_archives=True, session=None): + if session is None: + raise TypeError( + "get_page() missing 1 required keyword argument: 'session'" + ) + + url = link.url + url = url.split('#', 1)[0] + + # Check for VCS schemes that do not support lookup as web pages. + from pip.vcs import VcsSupport + for scheme in VcsSupport.schemes: + if url.lower().startswith(scheme) and url[len(scheme)] in '+:': + logger.debug('Cannot look at %s URL %s', scheme, link) + return None + + try: + if skip_archives: + filename = link.filename + for bad_ext in ARCHIVE_EXTENSIONS: + if filename.endswith(bad_ext): + content_type = cls._get_content_type( + url, session=session, + ) + if content_type.lower().startswith('text/html'): + break + else: + logger.debug( + 'Skipping page %s because of Content-Type: %s', + link, + content_type, + ) + return + + logger.debug('Getting page %s', url) + + # Tack index.html onto file:// URLs that point to directories + (scheme, netloc, path, params, query, fragment) = \ + urllib_parse.urlparse(url) + if (scheme == 'file' and + os.path.isdir(urllib_request.url2pathname(path))): + # add trailing slash if not present so urljoin doesn't trim + # final segment + if not url.endswith('/'): + url += '/' + url = urllib_parse.urljoin(url, 'index.html') + logger.debug(' file: URL is directory, getting %s', url) + + resp = session.get( + url, + headers={ + "Accept": "text/html", + "Cache-Control": "max-age=600", + }, + ) + resp.raise_for_status() + + # The check for archives above only works if the url ends with + # something that looks like an archive. However that is not a + # requirement of an url. Unless we issue a HEAD request on every + # url we cannot know ahead of time for sure if something is HTML + # or not. However we can check after we've downloaded it. + content_type = resp.headers.get('Content-Type', 'unknown') + if not content_type.lower().startswith("text/html"): + logger.debug( + 'Skipping page %s because of Content-Type: %s', + link, + content_type, + ) + return + + inst = cls(resp.content, resp.url, resp.headers) + except HTTPError as exc: + cls._handle_fail(link, exc, url) + except SSLError as exc: + reason = ("There was a problem confirming the ssl certificate: " + "%s" % exc) + cls._handle_fail(link, reason, url, meth=logger.info) + except requests.ConnectionError as exc: + cls._handle_fail(link, "connection error: %s" % exc, url) + except requests.Timeout: + cls._handle_fail(link, "timed out", url) + else: + return inst + + @staticmethod + def _handle_fail(link, reason, url, meth=None): + if meth is None: + meth = logger.debug + + meth("Could not fetch URL %s: %s - skipping", link, reason) + + @staticmethod + def _get_content_type(url, session): + """Get the Content-Type of the given url, using a HEAD request""" + scheme, netloc, path, query, fragment = urllib_parse.urlsplit(url) + if scheme not in ('http', 'https'): + # FIXME: some warning or something? + # assertion error? + return '' + + resp = session.head(url, allow_redirects=True) + resp.raise_for_status() + + return resp.headers.get("Content-Type", "") + + @cached_property + def base_url(self): + bases = [ + x for x in self.parsed.findall(".//base") + if x.get("href") is not None + ] + if bases and bases[0].get("href"): + return bases[0].get("href") + else: + return self.url + + @property + def links(self): + """Yields all links in the page""" + for anchor in self.parsed.findall(".//a"): + if anchor.get("href"): + href = anchor.get("href") + url = self.clean_link( + urllib_parse.urljoin(self.base_url, href) + ) + pyrequire = anchor.get('data-requires-python') + pyrequire = unescape(pyrequire) if pyrequire else None + yield Link(url, self, requires_python=pyrequire) + + _clean_re = re.compile(r'[^a-z0-9$&+,/:;=?@.#%_\\|-]', re.I) + + def clean_link(self, url): + """Makes sure a link is fully encoded. That is, if a ' ' shows up in + the link, it will be rewritten to %20 (while not over-quoting + % or other characters).""" + return self._clean_re.sub( + lambda match: '%%%2x' % ord(match.group(0)), url) + + +class Link(object): + + def __init__(self, url, comes_from=None, requires_python=None): + """ + Object representing a parsed link from https://pypi.python.org/simple/* + + url: + url of the resource pointed to (href of the link) + comes_from: + instance of HTMLPage where the link was found, or string. + requires_python: + String containing the `Requires-Python` metadata field, specified + in PEP 345. This may be specified by a data-requires-python + attribute in the HTML link tag, as described in PEP 503. + """ + + # url can be a UNC windows share + if url.startswith('\\\\'): + url = path_to_url(url) + + self.url = url + self.comes_from = comes_from + self.requires_python = requires_python if requires_python else None + + def __str__(self): + if self.requires_python: + rp = ' (requires-python:%s)' % self.requires_python + else: + rp = '' + if self.comes_from: + return '%s (from %s)%s' % (self.url, self.comes_from, rp) + else: + return str(self.url) + + def __repr__(self): + return '' % self + + def __eq__(self, other): + if not isinstance(other, Link): + return NotImplemented + return self.url == other.url + + def __ne__(self, other): + if not isinstance(other, Link): + return NotImplemented + return self.url != other.url + + def __lt__(self, other): + if not isinstance(other, Link): + return NotImplemented + return self.url < other.url + + def __le__(self, other): + if not isinstance(other, Link): + return NotImplemented + return self.url <= other.url + + def __gt__(self, other): + if not isinstance(other, Link): + return NotImplemented + return self.url > other.url + + def __ge__(self, other): + if not isinstance(other, Link): + return NotImplemented + return self.url >= other.url + + def __hash__(self): + return hash(self.url) + + @property + def filename(self): + _, netloc, path, _, _ = urllib_parse.urlsplit(self.url) + name = posixpath.basename(path.rstrip('/')) or netloc + name = urllib_parse.unquote(name) + assert name, ('URL %r produced no filename' % self.url) + return name + + @property + def scheme(self): + return urllib_parse.urlsplit(self.url)[0] + + @property + def netloc(self): + return urllib_parse.urlsplit(self.url)[1] + + @property + def path(self): + return urllib_parse.unquote(urllib_parse.urlsplit(self.url)[2]) + + def splitext(self): + return splitext(posixpath.basename(self.path.rstrip('/'))) + + @property + def ext(self): + return self.splitext()[1] + + @property + def url_without_fragment(self): + scheme, netloc, path, query, fragment = urllib_parse.urlsplit(self.url) + return urllib_parse.urlunsplit((scheme, netloc, path, query, None)) + + _egg_fragment_re = re.compile(r'[#&]egg=([^&]*)') + + @property + def egg_fragment(self): + match = self._egg_fragment_re.search(self.url) + if not match: + return None + return match.group(1) + + _subdirectory_fragment_re = re.compile(r'[#&]subdirectory=([^&]*)') + + @property + def subdirectory_fragment(self): + match = self._subdirectory_fragment_re.search(self.url) + if not match: + return None + return match.group(1) + + _hash_re = re.compile( + r'(sha1|sha224|sha384|sha256|sha512|md5)=([a-f0-9]+)' + ) + + @property + def hash(self): + match = self._hash_re.search(self.url) + if match: + return match.group(2) + return None + + @property + def hash_name(self): + match = self._hash_re.search(self.url) + if match: + return match.group(1) + return None + + @property + def show_url(self): + return posixpath.basename(self.url.split('#', 1)[0].split('?', 1)[0]) + + @property + def is_wheel(self): + return self.ext == wheel_ext + + @property + def is_artifact(self): + """ + Determines if this points to an actual artifact (e.g. a tarball) or if + it points to an "abstract" thing like a path or a VCS location. + """ + from pip.vcs import vcs + + if self.scheme in vcs.all_schemes: + return False + + return True + + +FormatControl = namedtuple('FormatControl', 'no_binary only_binary') +"""This object has two fields, no_binary and only_binary. + +If a field is falsy, it isn't set. If it is {':all:'}, it should match all +packages except those listed in the other field. Only one field can be set +to {':all:'} at a time. The rest of the time exact package name matches +are listed, with any given package only showing up in one field at a time. +""" + + +def fmt_ctl_handle_mutual_exclude(value, target, other): + new = value.split(',') + while ':all:' in new: + other.clear() + target.clear() + target.add(':all:') + del new[:new.index(':all:') + 1] + if ':none:' not in new: + # Without a none, we want to discard everything as :all: covers it + return + for name in new: + if name == ':none:': + target.clear() + continue + name = canonicalize_name(name) + other.discard(name) + target.add(name) + + +def fmt_ctl_formats(fmt_ctl, canonical_name): + result = set(["binary", "source"]) + if canonical_name in fmt_ctl.only_binary: + result.discard('source') + elif canonical_name in fmt_ctl.no_binary: + result.discard('binary') + elif ':all:' in fmt_ctl.only_binary: + result.discard('source') + elif ':all:' in fmt_ctl.no_binary: + result.discard('binary') + return frozenset(result) + + +def fmt_ctl_no_binary(fmt_ctl): + fmt_ctl_handle_mutual_exclude( + ':all:', fmt_ctl.no_binary, fmt_ctl.only_binary) + + +def fmt_ctl_no_use_wheel(fmt_ctl): + fmt_ctl_no_binary(fmt_ctl) + warnings.warn( + '--no-use-wheel is deprecated and will be removed in the future. ' + ' Please use --no-binary :all: instead.', RemovedInPip10Warning, + stacklevel=2) + + +Search = namedtuple('Search', 'supplied canonical formats') +"""Capture key aspects of a search. + +:attribute supplied: The user supplied package. +:attribute canonical: The canonical package name. +:attribute formats: The formats allowed for this package. Should be a set + with 'binary' or 'source' or both in it. +""" diff --git a/week-0/day-3/my_todo_app/venvironment/lib/python3.6/site-packages/pip/locations.py b/week-0/day-3/my_todo_app/venvironment/lib/python3.6/site-packages/pip/locations.py new file mode 100644 index 00000000..e598ef10 --- /dev/null +++ b/week-0/day-3/my_todo_app/venvironment/lib/python3.6/site-packages/pip/locations.py @@ -0,0 +1,182 @@ +"""Locations where we look for configs, install stuff, etc""" +from __future__ import absolute_import + +import os +import os.path +import site +import sys + +from distutils import sysconfig +from distutils.command.install import install, SCHEME_KEYS # noqa + +from pip.compat import WINDOWS, expanduser +from pip.utils import appdirs + + +# Application Directories +USER_CACHE_DIR = appdirs.user_cache_dir("pip") + + +DELETE_MARKER_MESSAGE = '''\ +This file is placed here by pip to indicate the source was put +here by pip. + +Once this package is successfully installed this source code will be +deleted (unless you remove this file). +''' +PIP_DELETE_MARKER_FILENAME = 'pip-delete-this-directory.txt' + + +def write_delete_marker_file(directory): + """ + Write the pip delete marker file into this directory. + """ + filepath = os.path.join(directory, PIP_DELETE_MARKER_FILENAME) + with open(filepath, 'w') as marker_fp: + marker_fp.write(DELETE_MARKER_MESSAGE) + + +def running_under_virtualenv(): + """ + Return True if we're running inside a virtualenv, False otherwise. + + """ + if hasattr(sys, 'real_prefix'): + return True + elif sys.prefix != getattr(sys, "base_prefix", sys.prefix): + return True + + return False + + +def virtualenv_no_global(): + """ + Return True if in a venv and no system site packages. + """ + # this mirrors the logic in virtualenv.py for locating the + # no-global-site-packages.txt file + site_mod_dir = os.path.dirname(os.path.abspath(site.__file__)) + no_global_file = os.path.join(site_mod_dir, 'no-global-site-packages.txt') + if running_under_virtualenv() and os.path.isfile(no_global_file): + return True + + +if running_under_virtualenv(): + src_prefix = os.path.join(sys.prefix, 'src') +else: + # FIXME: keep src in cwd for now (it is not a temporary folder) + try: + src_prefix = os.path.join(os.getcwd(), 'src') + except OSError: + # In case the current working directory has been renamed or deleted + sys.exit( + "The folder you are executing pip from can no longer be found." + ) + +# under macOS + virtualenv sys.prefix is not properly resolved +# it is something like /path/to/python/bin/.. +# Note: using realpath due to tmp dirs on OSX being symlinks +src_prefix = os.path.abspath(src_prefix) + +# FIXME doesn't account for venv linked to global site-packages + +site_packages = sysconfig.get_python_lib() +user_site = site.USER_SITE +user_dir = expanduser('~') +if WINDOWS: + bin_py = os.path.join(sys.prefix, 'Scripts') + bin_user = os.path.join(user_site, 'Scripts') + # buildout uses 'bin' on Windows too? + if not os.path.exists(bin_py): + bin_py = os.path.join(sys.prefix, 'bin') + bin_user = os.path.join(user_site, 'bin') + + config_basename = 'pip.ini' + + legacy_storage_dir = os.path.join(user_dir, 'pip') + legacy_config_file = os.path.join( + legacy_storage_dir, + config_basename, + ) +else: + bin_py = os.path.join(sys.prefix, 'bin') + bin_user = os.path.join(user_site, 'bin') + + config_basename = 'pip.conf' + + legacy_storage_dir = os.path.join(user_dir, '.pip') + legacy_config_file = os.path.join( + legacy_storage_dir, + config_basename, + ) + + # Forcing to use /usr/local/bin for standard macOS framework installs + # Also log to ~/Library/Logs/ for use with the Console.app log viewer + if sys.platform[:6] == 'darwin' and sys.prefix[:16] == '/System/Library/': + bin_py = '/usr/local/bin' + +site_config_files = [ + os.path.join(path, config_basename) + for path in appdirs.site_config_dirs('pip') +] + + +def distutils_scheme(dist_name, user=False, home=None, root=None, + isolated=False, prefix=None): + """ + Return a distutils install scheme + """ + from distutils.dist import Distribution + + scheme = {} + + if isolated: + extra_dist_args = {"script_args": ["--no-user-cfg"]} + else: + extra_dist_args = {} + dist_args = {'name': dist_name} + dist_args.update(extra_dist_args) + + d = Distribution(dist_args) + d.parse_config_files() + i = d.get_command_obj('install', create=True) + # NOTE: setting user or home has the side-effect of creating the home dir + # or user base for installations during finalize_options() + # ideally, we'd prefer a scheme class that has no side-effects. + assert not (user and prefix), "user={0} prefix={1}".format(user, prefix) + i.user = user or i.user + if user: + i.prefix = "" + i.prefix = prefix or i.prefix + i.home = home or i.home + i.root = root or i.root + i.finalize_options() + for key in SCHEME_KEYS: + scheme[key] = getattr(i, 'install_' + key) + + # install_lib specified in setup.cfg should install *everything* + # into there (i.e. it takes precedence over both purelib and + # platlib). Note, i.install_lib is *always* set after + # finalize_options(); we only want to override here if the user + # has explicitly requested it hence going back to the config + if 'install_lib' in d.get_option_dict('install'): + scheme.update(dict(purelib=i.install_lib, platlib=i.install_lib)) + + if running_under_virtualenv(): + scheme['headers'] = os.path.join( + sys.prefix, + 'include', + 'site', + 'python' + sys.version[:3], + dist_name, + ) + + if root is not None: + path_no_drive = os.path.splitdrive( + os.path.abspath(scheme["headers"]))[1] + scheme["headers"] = os.path.join( + root, + path_no_drive[1:], + ) + + return scheme diff --git a/week-0/day-3/my_todo_app/venvironment/lib/python3.6/site-packages/pip/models/__init__.py b/week-0/day-3/my_todo_app/venvironment/lib/python3.6/site-packages/pip/models/__init__.py new file mode 100644 index 00000000..1d727d7e --- /dev/null +++ b/week-0/day-3/my_todo_app/venvironment/lib/python3.6/site-packages/pip/models/__init__.py @@ -0,0 +1,4 @@ +from pip.models.index import Index, PyPI + + +__all__ = ["Index", "PyPI"] diff --git a/week-0/day-3/my_todo_app/venvironment/lib/python3.6/site-packages/pip/models/__pycache__/__init__.cpython-36.pyc b/week-0/day-3/my_todo_app/venvironment/lib/python3.6/site-packages/pip/models/__pycache__/__init__.cpython-36.pyc new file mode 100644 index 0000000000000000000000000000000000000000..40b623f1071ae1464676aa92359dcf44ccd2a562 GIT binary patch literal 223 zcmXr!<>lfJG>>&>U|@I*#Bjg_WH|tFu?&z%VMt-jVaR2SV$5ZVVq#=SVM<|6XNqD@ zVF_l?WPJ%#!Jx@>i`6qPCAH!fOF(6SXAww$5i^kR(`30NP>@-mmz$rGnp3Qo2~vcR zzQrCNpO}*qAHR~Jhz+C%MEo++FUc*?2kO#ID$UGE(akK&&d5tHP6Y{pF~l(a`1s7c c%#!$cy@JYH95z6~(wtN~MxY7BAo~TF0lTO*%m4rY literal 0 HcmV?d00001 diff --git a/week-0/day-3/my_todo_app/venvironment/lib/python3.6/site-packages/pip/models/__pycache__/index.cpython-36.pyc b/week-0/day-3/my_todo_app/venvironment/lib/python3.6/site-packages/pip/models/__pycache__/index.cpython-36.pyc new file mode 100644 index 0000000000000000000000000000000000000000..1ec0aef703fe9029e296053e2137ea0ce0d48259 GIT binary patch literal 827 zcmZuwy>8nu5GF-Q7F^j$whnoKYKSy+C{P4NfDT0#BSkj>1!0?PO_lm7NgJ_|&3T!= z64wqzU!ha)C>U^oQn=%HBz5=QN9px!Hof@x=JPK~$WL-MV!(G`_7ylm1l6RabwtSr zA|k<_iC~f)Sslw*#79~uBKbs$^f#O)1@+0WG*+%LI*kax9hkiaCrM2OsUtx}^h|0d zn22GH$1Fa%?}U6@<109DMtcutZ^1p$C&G!NP4q;Mv|$i|HL-vQa1wA7a2hZRcp?ap zj2Aw&svWfS@vtA%VTQgM)KE3H?~2T`tMtgR27VB80n?wVa_xYnZ&q8S#f{p1+jMIy0~=)2 z_Cjh~Db%AJ_CDiWb;@y`pcYebgr;;(b9fH(AX|Al@{fKDP6qwv032yRr=VU0iqJ*D z%mmi`1c)}h>H^6kGI$tNf))ec(Otr#!O}UH4VOd@S7YrnQ5Hplbh~9MIrme}p_i>j zoOAwtyVT>3xjLmgD}myePzQPA$7s=IG@BS)IlSCBH`upTg<^v+Zqs*VZ@yNGBCW4M zxsvZ>Cwfy_^;ow3PTCTlfJG>>Hfg2x~N1{i@12OutH0TL+;!3>&=ek&P@K*9*(mzjP^Zh?M5W`S-} zX=YA}Zf03_MqYApDo6;7^9xdo5=%1k^NRK3<1_OzOXB183My}L*yQG?l;)(`fy^rg GVg>-xogg#- literal 0 HcmV?d00001 diff --git a/week-0/day-3/my_todo_app/venvironment/lib/python3.6/site-packages/pip/operations/__pycache__/check.cpython-36.pyc b/week-0/day-3/my_todo_app/venvironment/lib/python3.6/site-packages/pip/operations/__pycache__/check.cpython-36.pyc new file mode 100644 index 0000000000000000000000000000000000000000..7dcc0029e9238d5076e5ab2709ff204b0ac32c6e GIT binary patch literal 1424 zcmb7E!EPHj5FK*4lA_9MCvBV-$zkC(E(A1k(E#m5F#ZJTke~H)rMNXZe4Rxa&iV_$uF~cE;^WNL%8ynrtH$NPG-vam>8iV8dC7OAH zlLX1$!S5isjPT2(kTHI_Z2bcLcE)fEjW$}0_9L2^;FQCHq4BHN4qn00Pm4%07fk_; zo$zf~2+M8cA_q&pWQ*9vdgx-uoEQQ|#46HqEuFZQ;}p3_4gvS@6OOm@gPYb<^Ww!* z(~o_x*40#Hc2tgM%C|3-HhEQgQRK$@ty5)3v)q`xJRNCuVf;h#aooyg$nL| z+i&KjvE!mpawIX;`1{Q~^kvp>f0TIZ7nI?nb9L=|%`AWaqlCXeZ(x_+Ki{*ndausw zXOnqe$Y=TG`B|A6MXq2~tu$6xm1ZwHQ`z~TzV;8oiYlJxTFq2xO+Spm@$ay}wcdYBhtlZ+ZoXXS&tOJ!W!?i}aL6c@gSmQry5N3s{|D@5iwNkafbGFe;4=0Epuogm| zAlxCcf|{FxO+X(d3sN8_U81(Shj8`X3hrHmn@>@7QzS&t=Pv3~An?0R zxcG#J_UQXE>|myiof=wFFM*(@ydatw3(o literal 0 HcmV?d00001 diff --git a/week-0/day-3/my_todo_app/venvironment/lib/python3.6/site-packages/pip/operations/__pycache__/freeze.cpython-36.pyc b/week-0/day-3/my_todo_app/venvironment/lib/python3.6/site-packages/pip/operations/__pycache__/freeze.cpython-36.pyc new file mode 100644 index 0000000000000000000000000000000000000000..7f99abd14e1bdbfb804f7b5b30a53ae274a6f5d7 GIT binary patch literal 2881 zcmY*b&2QVt6`vs~N}{Mwf5cyjxpB6Qfzm52lrq-pXK5Vob7*Q>3($);O*NC?Al!?|w-7>LAU zc;mB-zGN(6uR1b<^0xtF6GjI{_Ad>g9H(XvO)){!a&E9ajzXLpGaPEuGT_$uG1o)m z1$zHrTFEP6f#4Ztk8>+D;j1XWW^fJ{kI&HfL5_iMb7~VUw+AMB16-xtR`fSO-&FJ( z(DmHjMBgBgOV3b%rq%H~Ud|z=xlW7^I%s({tz5Ub6;?t!ujJNDo7T=y{K!DOImgE!|3YcwyaicF9{aG_Bv@@t<<^0^Q*E zm(vDc%NsL%ga39uZ35+8-c*#6X)AAq>oa5nU-o*j4mXG?dEvW!gW2=EoI_SD=^Nw| zxn>M_H^C0b=k-AmkXl|3?@3OK@|N814Zf%W*9KWr(tlO!btV0uJDmL^Z;=gx{-SLo z>B+Pe@8m7MMS$}T4Y$eW3{P8pC)@>#h1|@G56Bi+*Q5?b-Tt6Y z*YdTnd81`p5WRh}lQ+OF&}X`e=RVn$-o`H^S6+o(XzaO)^IqQgsYWRQmK=yS@NOf> z8Q8ttIir3jG}9=lEc*xolo_-4zNz z?Rm|0{piZS&fHNv2~xnibK7;hK}=lb4Ish1;<^CPu{&bXyx_Viqf(NyQN}58`$@*< zI}%Qysx$X)M@t<|*QI05{5vfZ&7~6yU=ncuJfc596{9(R3R|rZ+Vw{f_bxk`CqR?STZl57XrAEd(SD;+_L8QzwX51K@Onh&q4#G<)xy(~b{O za{~VJOhu~`QJ*6(uKmZ6b=gMa>IC407vC_jWEUX@- z*P?VB`NMPKKl`&Z2m?*FmegaF!r8NiI%*uZc$l)G!v$u%93OSsY8eTismbpOlZ7vrlQ4yPy zXE6&pUn5xU2Pr9%0BkUl_7^i0U$v7il7Nur2Cz7;tdROH!3Q zq6(-di_}Yfh(hW1Q|X|hB)16OTnKwrn@ZBfbReBF7g;6~Ci^=~s93^=W?)-0G#gvk zzzxm9C0v7b4ZcjQVH<{gTbe{PT+)E9nFSL#Y&9CV0Tig9m8S$+EO<=NzXg0PZAVFK zQj>0g9B9(PI@UC>4r^PjH}!SAr<=gB30m1H_z34=d0uzKM~r$NlRZ!rWgbD!vY){h zJ5ms&;1NVX`yz|K-erbm1G zCmgGP)tJihG8D_}MVgm9mDk|)FQuPyH!DXXI|x(fQaT= (10, 4) + if arch == 'x86_64': + return (major, minor) >= (10, 5) + if arch in groups: + for garch in groups[arch]: + if _supports_arch(major, minor, garch): + return True + return False + + groups = OrderedDict([ + ("fat", ("i386", "ppc")), + ("intel", ("x86_64", "i386")), + ("fat64", ("x86_64", "ppc64")), + ("fat32", ("x86_64", "i386", "ppc")), + ]) + + if _supports_arch(major, minor, machine): + arches.append(machine) + + for garch in groups: + if machine in groups[garch] and _supports_arch(major, minor, garch): + arches.append(garch) + + arches.append('universal') + + return arches + + +def get_supported(versions=None, noarch=False, platform=None, + impl=None, abi=None): + """Return a list of supported tags for each version specified in + `versions`. + + :param versions: a list of string versions, of the form ["33", "32"], + or None. The first version will be assumed to support our ABI. + :param platform: specify the exact platform you want valid + tags for, or None. If None, use the local system platform. + :param impl: specify the exact implementation you want valid + tags for, or None. If None, use the local interpreter impl. + :param abi: specify the exact abi you want valid + tags for, or None. If None, use the local interpreter abi. + """ + supported = [] + + # Versions must be given with respect to the preference + if versions is None: + versions = [] + version_info = get_impl_version_info() + major = version_info[:-1] + # Support all previous minor Python versions. + for minor in range(version_info[-1], -1, -1): + versions.append(''.join(map(str, major + (minor,)))) + + impl = impl or get_abbr_impl() + + abis = [] + + abi = abi or get_abi_tag() + if abi: + abis[0:0] = [abi] + + abi3s = set() + import imp + for suffix in imp.get_suffixes(): + if suffix[0].startswith('.abi'): + abi3s.add(suffix[0].split('.', 2)[1]) + + abis.extend(sorted(list(abi3s))) + + abis.append('none') + + if not noarch: + arch = platform or get_platform() + if arch.startswith('macosx'): + # support macosx-10.6-intel on macosx-10.9-x86_64 + match = _osx_arch_pat.match(arch) + if match: + name, major, minor, actual_arch = match.groups() + tpl = '{0}_{1}_%i_%s'.format(name, major) + arches = [] + for m in reversed(range(int(minor) + 1)): + for a in get_darwin_arches(int(major), m, actual_arch): + arches.append(tpl % (m, a)) + else: + # arch pattern didn't match (?!) + arches = [arch] + elif platform is None and is_manylinux1_compatible(): + arches = [arch.replace('linux', 'manylinux1'), arch] + else: + arches = [arch] + + # Current version, current API (built specifically for our Python): + for abi in abis: + for arch in arches: + supported.append(('%s%s' % (impl, versions[0]), abi, arch)) + + # abi3 modules compatible with older version of Python + for version in versions[1:]: + # abi3 was introduced in Python 3.2 + if version in ('31', '30'): + break + for abi in abi3s: # empty set if not Python 3 + for arch in arches: + supported.append(("%s%s" % (impl, version), abi, arch)) + + # Has binaries, does not use the Python API: + for arch in arches: + supported.append(('py%s' % (versions[0][0]), 'none', arch)) + + # No abi / arch, but requires our implementation: + supported.append(('%s%s' % (impl, versions[0]), 'none', 'any')) + # Tagged specifically as being cross-version compatible + # (with just the major version specified) + supported.append(('%s%s' % (impl, versions[0][0]), 'none', 'any')) + + # No abi / arch, generic Python + for i, version in enumerate(versions): + supported.append(('py%s' % (version,), 'none', 'any')) + if i == 0: + supported.append(('py%s' % (version[0]), 'none', 'any')) + + return supported + +supported_tags = get_supported() +supported_tags_noarch = get_supported(noarch=True) + +implementation_tag = get_impl_tag() diff --git a/week-0/day-3/my_todo_app/venvironment/lib/python3.6/site-packages/pip/req/__init__.py b/week-0/day-3/my_todo_app/venvironment/lib/python3.6/site-packages/pip/req/__init__.py new file mode 100644 index 00000000..00185a43 --- /dev/null +++ b/week-0/day-3/my_todo_app/venvironment/lib/python3.6/site-packages/pip/req/__init__.py @@ -0,0 +1,10 @@ +from __future__ import absolute_import + +from .req_install import InstallRequirement +from .req_set import RequirementSet, Requirements +from .req_file import parse_requirements + +__all__ = [ + "RequirementSet", "Requirements", "InstallRequirement", + "parse_requirements", +] diff --git a/week-0/day-3/my_todo_app/venvironment/lib/python3.6/site-packages/pip/req/__pycache__/__init__.cpython-36.pyc b/week-0/day-3/my_todo_app/venvironment/lib/python3.6/site-packages/pip/req/__pycache__/__init__.cpython-36.pyc new file mode 100644 index 0000000000000000000000000000000000000000..4a21a30fab390cbebe2b88b76db6f75bc20008c2 GIT binary patch literal 404 zcmYjMyH3O~5VZ5YT*4v5Poy|fP|zSmK|_NC*I7cV9QJ{QodnxK;*XBhT#aWnGu6$E)XaO2`j6dI|DdEPIE*38#u^$|xl~;<1W!%;K3RD$yxRb;h!} zPgSl9Rv^!K&I`VHP1u5$8`3QIm_!=tSKZbQYH|Xk9tY$0I6LTP_q}zUQcvPzl16CJ zyC(7{N9{&9Umf)}xW>*{0p?(`CdELL1qf%D9O0oUeF?Ce+++lRiBR)Pbbae!jo;FIEI;F3e~FM@a{8 aF@E{tS`U0u;wIc~ON1(_=qat@jQ#;2M{2GB literal 0 HcmV?d00001 diff --git a/week-0/day-3/my_todo_app/venvironment/lib/python3.6/site-packages/pip/req/__pycache__/req_file.cpython-36.pyc b/week-0/day-3/my_todo_app/venvironment/lib/python3.6/site-packages/pip/req/__pycache__/req_file.cpython-36.pyc new file mode 100644 index 0000000000000000000000000000000000000000..340958aa73a39feecc3331e4e098ad1070486702 GIT binary patch literal 8419 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 MG+CN1oh^<1CyQuFBLDyZ literal 0 HcmV?d00001 diff --git a/week-0/day-3/my_todo_app/venvironment/lib/python3.6/site-packages/pip/req/__pycache__/req_install.cpython-36.pyc b/week-0/day-3/my_todo_app/venvironment/lib/python3.6/site-packages/pip/req/__pycache__/req_install.cpython-36.pyc new file mode 100644 index 0000000000000000000000000000000000000000..0e19eb020166cd0e74da48c866225c19e71dbbc4 GIT binary patch literal 30120 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 YdE`F_Du5%XGO1YZGuGDs-Kos~1p&ViW&i*H literal 0 HcmV?d00001 diff --git a/week-0/day-3/my_todo_app/venvironment/lib/python3.6/site-packages/pip/req/__pycache__/req_set.cpython-36.pyc b/week-0/day-3/my_todo_app/venvironment/lib/python3.6/site-packages/pip/req/__pycache__/req_set.cpython-36.pyc new file mode 100644 index 0000000000000000000000000000000000000000..7a715090bf30447c0ffe2dcc0cb5017c5d35b52f GIT binary patch literal 20967 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 Jrd%%P{~zE_MtlGO literal 0 HcmV?d00001 diff --git a/week-0/day-3/my_todo_app/venvironment/lib/python3.6/site-packages/pip/req/__pycache__/req_uninstall.cpython-36.pyc b/week-0/day-3/my_todo_app/venvironment/lib/python3.6/site-packages/pip/req/__pycache__/req_uninstall.cpython-36.pyc new file mode 100644 index 0000000000000000000000000000000000000000..cfecdccf20229efc0147a74b822c491dbcfcb019 GIT binary patch literal 6282 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 literal 0 HcmV?d00001 diff --git a/week-0/day-3/my_todo_app/venvironment/lib/python3.6/site-packages/pip/req/req_file.py b/week-0/day-3/my_todo_app/venvironment/lib/python3.6/site-packages/pip/req/req_file.py new file mode 100644 index 00000000..821df227 --- /dev/null +++ b/week-0/day-3/my_todo_app/venvironment/lib/python3.6/site-packages/pip/req/req_file.py @@ -0,0 +1,342 @@ +""" +Requirements file parsing +""" + +from __future__ import absolute_import + +import os +import re +import shlex +import sys +import optparse +import warnings + +from pip._vendor.six.moves.urllib import parse as urllib_parse +from pip._vendor.six.moves import filterfalse + +import pip +from pip.download import get_file_content +from pip.req.req_install import InstallRequirement +from pip.exceptions import (RequirementsFileParseError) +from pip.utils.deprecation import RemovedInPip10Warning +from pip import cmdoptions + +__all__ = ['parse_requirements'] + +SCHEME_RE = re.compile(r'^(http|https|file):', re.I) +COMMENT_RE = re.compile(r'(^|\s)+#.*$') + +SUPPORTED_OPTIONS = [ + cmdoptions.constraints, + cmdoptions.editable, + cmdoptions.requirements, + cmdoptions.no_index, + cmdoptions.index_url, + cmdoptions.find_links, + cmdoptions.extra_index_url, + cmdoptions.allow_external, + cmdoptions.allow_all_external, + cmdoptions.no_allow_external, + cmdoptions.allow_unsafe, + cmdoptions.no_allow_unsafe, + cmdoptions.use_wheel, + cmdoptions.no_use_wheel, + cmdoptions.always_unzip, + cmdoptions.no_binary, + cmdoptions.only_binary, + cmdoptions.pre, + cmdoptions.process_dependency_links, + cmdoptions.trusted_host, + cmdoptions.require_hashes, +] + +# options to be passed to requirements +SUPPORTED_OPTIONS_REQ = [ + cmdoptions.install_options, + cmdoptions.global_options, + cmdoptions.hash, +] + +# the 'dest' string values +SUPPORTED_OPTIONS_REQ_DEST = [o().dest for o in SUPPORTED_OPTIONS_REQ] + + +def parse_requirements(filename, finder=None, comes_from=None, options=None, + session=None, constraint=False, wheel_cache=None): + """Parse a requirements file and yield InstallRequirement instances. + + :param filename: Path or url of requirements file. + :param finder: Instance of pip.index.PackageFinder. + :param comes_from: Origin description of requirements. + :param options: cli options. + :param session: Instance of pip.download.PipSession. + :param constraint: If true, parsing a constraint file rather than + requirements file. + :param wheel_cache: Instance of pip.wheel.WheelCache + """ + if session is None: + raise TypeError( + "parse_requirements() missing 1 required keyword argument: " + "'session'" + ) + + _, content = get_file_content( + filename, comes_from=comes_from, session=session + ) + + lines_enum = preprocess(content, options) + + for line_number, line in lines_enum: + req_iter = process_line(line, filename, line_number, finder, + comes_from, options, session, wheel_cache, + constraint=constraint) + for req in req_iter: + yield req + + +def preprocess(content, options): + """Split, filter, and join lines, and return a line iterator + + :param content: the content of the requirements file + :param options: cli options + """ + lines_enum = enumerate(content.splitlines(), start=1) + lines_enum = join_lines(lines_enum) + lines_enum = ignore_comments(lines_enum) + lines_enum = skip_regex(lines_enum, options) + return lines_enum + + +def process_line(line, filename, line_number, finder=None, comes_from=None, + options=None, session=None, wheel_cache=None, + constraint=False): + """Process a single requirements line; This can result in creating/yielding + requirements, or updating the finder. + + For lines that contain requirements, the only options that have an effect + are from SUPPORTED_OPTIONS_REQ, and they are scoped to the + requirement. Other options from SUPPORTED_OPTIONS may be present, but are + ignored. + + For lines that do not contain requirements, the only options that have an + effect are from SUPPORTED_OPTIONS. Options from SUPPORTED_OPTIONS_REQ may + be present, but are ignored. These lines may contain multiple options + (although our docs imply only one is supported), and all our parsed and + affect the finder. + + :param constraint: If True, parsing a constraints file. + :param options: OptionParser options that we may update + """ + parser = build_parser() + defaults = parser.get_default_values() + defaults.index_url = None + if finder: + # `finder.format_control` will be updated during parsing + defaults.format_control = finder.format_control + args_str, options_str = break_args_options(line) + if sys.version_info < (2, 7, 3): + # Prior to 2.7.3, shlex cannot deal with unicode entries + options_str = options_str.encode('utf8') + opts, _ = parser.parse_args(shlex.split(options_str), defaults) + + # preserve for the nested code path + line_comes_from = '%s %s (line %s)' % ( + '-c' if constraint else '-r', filename, line_number) + + # yield a line requirement + if args_str: + isolated = options.isolated_mode if options else False + if options: + cmdoptions.check_install_build_global(options, opts) + # get the options that apply to requirements + req_options = {} + for dest in SUPPORTED_OPTIONS_REQ_DEST: + if dest in opts.__dict__ and opts.__dict__[dest]: + req_options[dest] = opts.__dict__[dest] + yield InstallRequirement.from_line( + args_str, line_comes_from, constraint=constraint, + isolated=isolated, options=req_options, wheel_cache=wheel_cache + ) + + # yield an editable requirement + elif opts.editables: + isolated = options.isolated_mode if options else False + default_vcs = options.default_vcs if options else None + yield InstallRequirement.from_editable( + opts.editables[0], comes_from=line_comes_from, + constraint=constraint, default_vcs=default_vcs, isolated=isolated, + wheel_cache=wheel_cache + ) + + # parse a nested requirements file + elif opts.requirements or opts.constraints: + if opts.requirements: + req_path = opts.requirements[0] + nested_constraint = False + else: + req_path = opts.constraints[0] + nested_constraint = True + # original file is over http + if SCHEME_RE.search(filename): + # do a url join so relative paths work + req_path = urllib_parse.urljoin(filename, req_path) + # original file and nested file are paths + elif not SCHEME_RE.search(req_path): + # do a join so relative paths work + req_path = os.path.join(os.path.dirname(filename), req_path) + # TODO: Why not use `comes_from='-r {} (line {})'` here as well? + parser = parse_requirements( + req_path, finder, comes_from, options, session, + constraint=nested_constraint, wheel_cache=wheel_cache + ) + for req in parser: + yield req + + # percolate hash-checking option upward + elif opts.require_hashes: + options.require_hashes = opts.require_hashes + + # set finder options + elif finder: + if opts.allow_external: + warnings.warn( + "--allow-external has been deprecated and will be removed in " + "the future. Due to changes in the repository protocol, it no " + "longer has any effect.", + RemovedInPip10Warning, + ) + + if opts.allow_all_external: + warnings.warn( + "--allow-all-external has been deprecated and will be removed " + "in the future. Due to changes in the repository protocol, it " + "no longer has any effect.", + RemovedInPip10Warning, + ) + + if opts.allow_unverified: + warnings.warn( + "--allow-unverified has been deprecated and will be removed " + "in the future. Due to changes in the repository protocol, it " + "no longer has any effect.", + RemovedInPip10Warning, + ) + + if opts.index_url: + finder.index_urls = [opts.index_url] + if opts.use_wheel is False: + finder.use_wheel = False + pip.index.fmt_ctl_no_use_wheel(finder.format_control) + if opts.no_index is True: + finder.index_urls = [] + if opts.extra_index_urls: + finder.index_urls.extend(opts.extra_index_urls) + if opts.find_links: + # FIXME: it would be nice to keep track of the source + # of the find_links: support a find-links local path + # relative to a requirements file. + value = opts.find_links[0] + req_dir = os.path.dirname(os.path.abspath(filename)) + relative_to_reqs_file = os.path.join(req_dir, value) + if os.path.exists(relative_to_reqs_file): + value = relative_to_reqs_file + finder.find_links.append(value) + if opts.pre: + finder.allow_all_prereleases = True + if opts.process_dependency_links: + finder.process_dependency_links = True + if opts.trusted_hosts: + finder.secure_origins.extend( + ("*", host, "*") for host in opts.trusted_hosts) + + +def break_args_options(line): + """Break up the line into an args and options string. We only want to shlex + (and then optparse) the options, not the args. args can contain markers + which are corrupted by shlex. + """ + tokens = line.split(' ') + args = [] + options = tokens[:] + for token in tokens: + if token.startswith('-') or token.startswith('--'): + break + else: + args.append(token) + options.pop(0) + return ' '.join(args), ' '.join(options) + + +def build_parser(): + """ + Return a parser for parsing requirement lines + """ + parser = optparse.OptionParser(add_help_option=False) + + option_factories = SUPPORTED_OPTIONS + SUPPORTED_OPTIONS_REQ + for option_factory in option_factories: + option = option_factory() + parser.add_option(option) + + # By default optparse sys.exits on parsing errors. We want to wrap + # that in our own exception. + def parser_exit(self, msg): + raise RequirementsFileParseError(msg) + parser.exit = parser_exit + + return parser + + +def join_lines(lines_enum): + """Joins a line ending in '\' with the previous line (except when following + comments). The joined line takes on the index of the first line. + """ + primary_line_number = None + new_line = [] + for line_number, line in lines_enum: + if not line.endswith('\\') or COMMENT_RE.match(line): + if COMMENT_RE.match(line): + # this ensures comments are always matched later + line = ' ' + line + if new_line: + new_line.append(line) + yield primary_line_number, ''.join(new_line) + new_line = [] + else: + yield line_number, line + else: + if not new_line: + primary_line_number = line_number + new_line.append(line.strip('\\')) + + # last line contains \ + if new_line: + yield primary_line_number, ''.join(new_line) + + # TODO: handle space after '\'. + + +def ignore_comments(lines_enum): + """ + Strips comments and filter empty lines. + """ + for line_number, line in lines_enum: + line = COMMENT_RE.sub('', line) + line = line.strip() + if line: + yield line_number, line + + +def skip_regex(lines_enum, options): + """ + Skip lines that match '--skip-requirements-regex' pattern + + Note: the regex pattern is only built once + """ + skip_regex = options.skip_requirements_regex if options else None + if skip_regex: + pattern = re.compile(skip_regex) + lines_enum = filterfalse( + lambda e: pattern.search(e[1]), + lines_enum) + return lines_enum diff --git a/week-0/day-3/my_todo_app/venvironment/lib/python3.6/site-packages/pip/req/req_install.py b/week-0/day-3/my_todo_app/venvironment/lib/python3.6/site-packages/pip/req/req_install.py new file mode 100644 index 00000000..1a98f377 --- /dev/null +++ b/week-0/day-3/my_todo_app/venvironment/lib/python3.6/site-packages/pip/req/req_install.py @@ -0,0 +1,1204 @@ +from __future__ import absolute_import + +import logging +import os +import re +import shutil +import sys +import tempfile +import traceback +import warnings +import zipfile + +from distutils import sysconfig +from distutils.util import change_root +from email.parser import FeedParser + +from pip._vendor import pkg_resources, six +from pip._vendor.packaging import specifiers +from pip._vendor.packaging.markers import Marker +from pip._vendor.packaging.requirements import InvalidRequirement, Requirement +from pip._vendor.packaging.utils import canonicalize_name +from pip._vendor.packaging.version import Version, parse as parse_version +from pip._vendor.six.moves import configparser + +import pip.wheel + +from pip.compat import native_str, get_stdlib, WINDOWS +from pip.download import is_url, url_to_path, path_to_url, is_archive_file +from pip.exceptions import ( + InstallationError, UninstallationError, +) +from pip.locations import ( + bin_py, running_under_virtualenv, PIP_DELETE_MARKER_FILENAME, bin_user, +) +from pip.utils import ( + display_path, rmtree, ask_path_exists, backup_dir, is_installable_dir, + dist_in_usersite, dist_in_site_packages, egg_link_path, + call_subprocess, read_text_file, FakeFile, _make_build_dir, ensure_dir, + get_installed_version, normalize_path, dist_is_local, +) + +from pip.utils.hashes import Hashes +from pip.utils.deprecation import RemovedInPip10Warning +from pip.utils.logging import indent_log +from pip.utils.setuptools_build import SETUPTOOLS_SHIM +from pip.utils.ui import open_spinner +from pip.req.req_uninstall import UninstallPathSet +from pip.vcs import vcs +from pip.wheel import move_wheel_files, Wheel + + +logger = logging.getLogger(__name__) + +operators = specifiers.Specifier._operators.keys() + + +def _strip_extras(path): + m = re.match(r'^(.+)(\[[^\]]+\])$', path) + extras = None + if m: + path_no_extras = m.group(1) + extras = m.group(2) + else: + path_no_extras = path + + return path_no_extras, extras + + +def _safe_extras(extras): + return set(pkg_resources.safe_extra(extra) for extra in extras) + + +class InstallRequirement(object): + + def __init__(self, req, comes_from, source_dir=None, editable=False, + link=None, as_egg=False, update=True, + pycompile=True, markers=None, isolated=False, options=None, + wheel_cache=None, constraint=False): + self.extras = () + if isinstance(req, six.string_types): + try: + req = Requirement(req) + except InvalidRequirement: + if os.path.sep in req: + add_msg = "It looks like a path. Does it exist ?" + elif '=' in req and not any(op in req for op in operators): + add_msg = "= is not a valid operator. Did you mean == ?" + else: + add_msg = traceback.format_exc() + raise InstallationError( + "Invalid requirement: '%s'\n%s" % (req, add_msg)) + self.extras = _safe_extras(req.extras) + + self.req = req + self.comes_from = comes_from + self.constraint = constraint + self.source_dir = source_dir + self.editable = editable + + self._wheel_cache = wheel_cache + self.link = self.original_link = link + self.as_egg = as_egg + if markers is not None: + self.markers = markers + else: + self.markers = req and req.marker + self._egg_info_path = None + # This holds the pkg_resources.Distribution object if this requirement + # is already available: + self.satisfied_by = None + # This hold the pkg_resources.Distribution object if this requirement + # conflicts with another installed distribution: + self.conflicts_with = None + # Temporary build location + self._temp_build_dir = None + # Used to store the global directory where the _temp_build_dir should + # have been created. Cf _correct_build_location method. + self._ideal_build_dir = None + # True if the editable should be updated: + self.update = update + # Set to True after successful installation + self.install_succeeded = None + # UninstallPathSet of uninstalled distribution (for possible rollback) + self.uninstalled = None + # Set True if a legitimate do-nothing-on-uninstall has happened - e.g. + # system site packages, stdlib packages. + self.nothing_to_uninstall = False + self.use_user_site = False + self.target_dir = None + self.options = options if options else {} + self.pycompile = pycompile + # Set to True after successful preparation of this requirement + self.prepared = False + + self.isolated = isolated + + @classmethod + def from_editable(cls, editable_req, comes_from=None, default_vcs=None, + isolated=False, options=None, wheel_cache=None, + constraint=False): + from pip.index import Link + + name, url, extras_override = parse_editable( + editable_req, default_vcs) + if url.startswith('file:'): + source_dir = url_to_path(url) + else: + source_dir = None + + res = cls(name, comes_from, source_dir=source_dir, + editable=True, + link=Link(url), + constraint=constraint, + isolated=isolated, + options=options if options else {}, + wheel_cache=wheel_cache) + + if extras_override is not None: + res.extras = _safe_extras(extras_override) + + return res + + @classmethod + def from_line( + cls, name, comes_from=None, isolated=False, options=None, + wheel_cache=None, constraint=False): + """Creates an InstallRequirement from a name, which might be a + requirement, directory containing 'setup.py', filename, or URL. + """ + from pip.index import Link + + if is_url(name): + marker_sep = '; ' + else: + marker_sep = ';' + if marker_sep in name: + name, markers = name.split(marker_sep, 1) + markers = markers.strip() + if not markers: + markers = None + else: + markers = Marker(markers) + else: + markers = None + name = name.strip() + req = None + path = os.path.normpath(os.path.abspath(name)) + link = None + extras = None + + if is_url(name): + link = Link(name) + else: + p, extras = _strip_extras(path) + if (os.path.isdir(p) and + (os.path.sep in name or name.startswith('.'))): + + if not is_installable_dir(p): + raise InstallationError( + "Directory %r is not installable. File 'setup.py' " + "not found." % name + ) + link = Link(path_to_url(p)) + elif is_archive_file(p): + if not os.path.isfile(p): + logger.warning( + 'Requirement %r looks like a filename, but the ' + 'file does not exist', + name + ) + link = Link(path_to_url(p)) + + # it's a local file, dir, or url + if link: + # Handle relative file URLs + if link.scheme == 'file' and re.search(r'\.\./', link.url): + link = Link( + path_to_url(os.path.normpath(os.path.abspath(link.path)))) + # wheel file + if link.is_wheel: + wheel = Wheel(link.filename) # can raise InvalidWheelFilename + req = "%s==%s" % (wheel.name, wheel.version) + else: + # set the req to the egg fragment. when it's not there, this + # will become an 'unnamed' requirement + req = link.egg_fragment + + # a requirement specifier + else: + req = name + + options = options if options else {} + res = cls(req, comes_from, link=link, markers=markers, + isolated=isolated, options=options, + wheel_cache=wheel_cache, constraint=constraint) + + if extras: + res.extras = _safe_extras( + Requirement('placeholder' + extras).extras) + + return res + + def __str__(self): + if self.req: + s = str(self.req) + if self.link: + s += ' from %s' % self.link.url + else: + s = self.link.url if self.link else None + if self.satisfied_by is not None: + s += ' in %s' % display_path(self.satisfied_by.location) + if self.comes_from: + if isinstance(self.comes_from, six.string_types): + comes_from = self.comes_from + else: + comes_from = self.comes_from.from_path() + if comes_from: + s += ' (from %s)' % comes_from + return s + + def __repr__(self): + return '<%s object: %s editable=%r>' % ( + self.__class__.__name__, str(self), self.editable) + + def populate_link(self, finder, upgrade, require_hashes): + """Ensure that if a link can be found for this, that it is found. + + Note that self.link may still be None - if Upgrade is False and the + requirement is already installed. + + If require_hashes is True, don't use the wheel cache, because cached + wheels, always built locally, have different hashes than the files + downloaded from the index server and thus throw false hash mismatches. + Furthermore, cached wheels at present have undeterministic contents due + to file modification times. + """ + if self.link is None: + self.link = finder.find_requirement(self, upgrade) + if self._wheel_cache is not None and not require_hashes: + old_link = self.link + self.link = self._wheel_cache.cached_wheel(self.link, self.name) + if old_link != self.link: + logger.debug('Using cached wheel link: %s', self.link) + + @property + def specifier(self): + return self.req.specifier + + @property + def is_pinned(self): + """Return whether I am pinned to an exact version. + + For example, some-package==1.2 is pinned; some-package>1.2 is not. + """ + specifiers = self.specifier + return (len(specifiers) == 1 and + next(iter(specifiers)).operator in ('==', '===')) + + def from_path(self): + if self.req is None: + return None + s = str(self.req) + if self.comes_from: + if isinstance(self.comes_from, six.string_types): + comes_from = self.comes_from + else: + comes_from = self.comes_from.from_path() + if comes_from: + s += '->' + comes_from + return s + + def build_location(self, build_dir): + if self._temp_build_dir is not None: + return self._temp_build_dir + if self.req is None: + # for requirement via a path to a directory: the name of the + # package is not available yet so we create a temp directory + # Once run_egg_info will have run, we'll be able + # to fix it via _correct_build_location + # Some systems have /tmp as a symlink which confuses custom + # builds (such as numpy). Thus, we ensure that the real path + # is returned. + self._temp_build_dir = os.path.realpath( + tempfile.mkdtemp('-build', 'pip-') + ) + self._ideal_build_dir = build_dir + return self._temp_build_dir + if self.editable: + name = self.name.lower() + else: + name = self.name + # FIXME: Is there a better place to create the build_dir? (hg and bzr + # need this) + if not os.path.exists(build_dir): + logger.debug('Creating directory %s', build_dir) + _make_build_dir(build_dir) + return os.path.join(build_dir, name) + + def _correct_build_location(self): + """Move self._temp_build_dir to self._ideal_build_dir/self.req.name + + For some requirements (e.g. a path to a directory), the name of the + package is not available until we run egg_info, so the build_location + will return a temporary directory and store the _ideal_build_dir. + + This is only called by self.egg_info_path to fix the temporary build + directory. + """ + if self.source_dir is not None: + return + assert self.req is not None + assert self._temp_build_dir + assert self._ideal_build_dir + old_location = self._temp_build_dir + self._temp_build_dir = None + new_location = self.build_location(self._ideal_build_dir) + if os.path.exists(new_location): + raise InstallationError( + 'A package already exists in %s; please remove it to continue' + % display_path(new_location)) + logger.debug( + 'Moving package %s from %s to new location %s', + self, display_path(old_location), display_path(new_location), + ) + shutil.move(old_location, new_location) + self._temp_build_dir = new_location + self._ideal_build_dir = None + self.source_dir = new_location + self._egg_info_path = None + + @property + def name(self): + if self.req is None: + return None + return native_str(pkg_resources.safe_name(self.req.name)) + + @property + def setup_py_dir(self): + return os.path.join( + self.source_dir, + self.link and self.link.subdirectory_fragment or '') + + @property + def setup_py(self): + assert self.source_dir, "No source dir for %s" % self + try: + import setuptools # noqa + except ImportError: + if get_installed_version('setuptools') is None: + add_msg = "Please install setuptools." + else: + add_msg = traceback.format_exc() + # Setuptools is not available + raise InstallationError( + "Could not import setuptools which is required to " + "install from a source distribution.\n%s" % add_msg + ) + + setup_py = os.path.join(self.setup_py_dir, 'setup.py') + + # Python2 __file__ should not be unicode + if six.PY2 and isinstance(setup_py, six.text_type): + setup_py = setup_py.encode(sys.getfilesystemencoding()) + + return setup_py + + def run_egg_info(self): + assert self.source_dir + if self.name: + logger.debug( + 'Running setup.py (path:%s) egg_info for package %s', + self.setup_py, self.name, + ) + else: + logger.debug( + 'Running setup.py (path:%s) egg_info for package from %s', + self.setup_py, self.link, + ) + + with indent_log(): + script = SETUPTOOLS_SHIM % self.setup_py + base_cmd = [sys.executable, '-c', script] + if self.isolated: + base_cmd += ["--no-user-cfg"] + egg_info_cmd = base_cmd + ['egg_info'] + # We can't put the .egg-info files at the root, because then the + # source code will be mistaken for an installed egg, causing + # problems + if self.editable: + egg_base_option = [] + else: + egg_info_dir = os.path.join(self.setup_py_dir, 'pip-egg-info') + ensure_dir(egg_info_dir) + egg_base_option = ['--egg-base', 'pip-egg-info'] + call_subprocess( + egg_info_cmd + egg_base_option, + cwd=self.setup_py_dir, + show_stdout=False, + command_desc='python setup.py egg_info') + + if not self.req: + if isinstance(parse_version(self.pkg_info()["Version"]), Version): + op = "==" + else: + op = "===" + self.req = Requirement( + "".join([ + self.pkg_info()["Name"], + op, + self.pkg_info()["Version"], + ]) + ) + self._correct_build_location() + else: + metadata_name = canonicalize_name(self.pkg_info()["Name"]) + if canonicalize_name(self.req.name) != metadata_name: + logger.warning( + 'Running setup.py (path:%s) egg_info for package %s ' + 'produced metadata for project name %s. Fix your ' + '#egg=%s fragments.', + self.setup_py, self.name, metadata_name, self.name + ) + self.req = Requirement(metadata_name) + + def egg_info_data(self, filename): + if self.satisfied_by is not None: + if not self.satisfied_by.has_metadata(filename): + return None + return self.satisfied_by.get_metadata(filename) + assert self.source_dir + filename = self.egg_info_path(filename) + if not os.path.exists(filename): + return None + data = read_text_file(filename) + return data + + def egg_info_path(self, filename): + if self._egg_info_path is None: + if self.editable: + base = self.source_dir + else: + base = os.path.join(self.setup_py_dir, 'pip-egg-info') + filenames = os.listdir(base) + if self.editable: + filenames = [] + for root, dirs, files in os.walk(base): + for dir in vcs.dirnames: + if dir in dirs: + dirs.remove(dir) + # Iterate over a copy of ``dirs``, since mutating + # a list while iterating over it can cause trouble. + # (See https://github.com/pypa/pip/pull/462.) + for dir in list(dirs): + # Don't search in anything that looks like a virtualenv + # environment + if ( + os.path.lexists( + os.path.join(root, dir, 'bin', 'python') + ) or + os.path.exists( + os.path.join( + root, dir, 'Scripts', 'Python.exe' + ) + )): + dirs.remove(dir) + # Also don't search through tests + elif dir == 'test' or dir == 'tests': + dirs.remove(dir) + filenames.extend([os.path.join(root, dir) + for dir in dirs]) + filenames = [f for f in filenames if f.endswith('.egg-info')] + + if not filenames: + raise InstallationError( + 'No files/directories in %s (from %s)' % (base, filename) + ) + assert filenames, \ + "No files/directories in %s (from %s)" % (base, filename) + + # if we have more than one match, we pick the toplevel one. This + # can easily be the case if there is a dist folder which contains + # an extracted tarball for testing purposes. + if len(filenames) > 1: + filenames.sort( + key=lambda x: x.count(os.path.sep) + + (os.path.altsep and x.count(os.path.altsep) or 0) + ) + self._egg_info_path = os.path.join(base, filenames[0]) + return os.path.join(self._egg_info_path, filename) + + def pkg_info(self): + p = FeedParser() + data = self.egg_info_data('PKG-INFO') + if not data: + logger.warning( + 'No PKG-INFO file found in %s', + display_path(self.egg_info_path('PKG-INFO')), + ) + p.feed(data or '') + return p.close() + + _requirements_section_re = re.compile(r'\[(.*?)\]') + + @property + def installed_version(self): + return get_installed_version(self.name) + + def assert_source_matches_version(self): + assert self.source_dir + version = self.pkg_info()['version'] + if self.req.specifier and version not in self.req.specifier: + logger.warning( + 'Requested %s, but installing version %s', + self, + self.installed_version, + ) + else: + logger.debug( + 'Source in %s has version %s, which satisfies requirement %s', + display_path(self.source_dir), + version, + self, + ) + + def update_editable(self, obtain=True): + if not self.link: + logger.debug( + "Cannot update repository at %s; repository location is " + "unknown", + self.source_dir, + ) + return + assert self.editable + assert self.source_dir + if self.link.scheme == 'file': + # Static paths don't get updated + return + assert '+' in self.link.url, "bad url: %r" % self.link.url + if not self.update: + return + vc_type, url = self.link.url.split('+', 1) + backend = vcs.get_backend(vc_type) + if backend: + vcs_backend = backend(self.link.url) + if obtain: + vcs_backend.obtain(self.source_dir) + else: + vcs_backend.export(self.source_dir) + else: + assert 0, ( + 'Unexpected version control type (in %s): %s' + % (self.link, vc_type)) + + def uninstall(self, auto_confirm=False): + """ + Uninstall the distribution currently satisfying this requirement. + + Prompts before removing or modifying files unless + ``auto_confirm`` is True. + + Refuses to delete or modify files outside of ``sys.prefix`` - + thus uninstallation within a virtual environment can only + modify that virtual environment, even if the virtualenv is + linked to global site-packages. + + """ + if not self.check_if_exists(): + raise UninstallationError( + "Cannot uninstall requirement %s, not installed" % (self.name,) + ) + dist = self.satisfied_by or self.conflicts_with + + dist_path = normalize_path(dist.location) + if not dist_is_local(dist): + logger.info( + "Not uninstalling %s at %s, outside environment %s", + dist.key, + dist_path, + sys.prefix, + ) + self.nothing_to_uninstall = True + return + + if dist_path in get_stdlib(): + logger.info( + "Not uninstalling %s at %s, as it is in the standard library.", + dist.key, + dist_path, + ) + self.nothing_to_uninstall = True + return + + paths_to_remove = UninstallPathSet(dist) + develop_egg_link = egg_link_path(dist) + develop_egg_link_egg_info = '{0}.egg-info'.format( + pkg_resources.to_filename(dist.project_name)) + egg_info_exists = dist.egg_info and os.path.exists(dist.egg_info) + # Special case for distutils installed package + distutils_egg_info = getattr(dist._provider, 'path', None) + + # Uninstall cases order do matter as in the case of 2 installs of the + # same package, pip needs to uninstall the currently detected version + if (egg_info_exists and dist.egg_info.endswith('.egg-info') and + not dist.egg_info.endswith(develop_egg_link_egg_info)): + # if dist.egg_info.endswith(develop_egg_link_egg_info), we + # are in fact in the develop_egg_link case + paths_to_remove.add(dist.egg_info) + if dist.has_metadata('installed-files.txt'): + for installed_file in dist.get_metadata( + 'installed-files.txt').splitlines(): + path = os.path.normpath( + os.path.join(dist.egg_info, installed_file) + ) + paths_to_remove.add(path) + # FIXME: need a test for this elif block + # occurs with --single-version-externally-managed/--record outside + # of pip + elif dist.has_metadata('top_level.txt'): + if dist.has_metadata('namespace_packages.txt'): + namespaces = dist.get_metadata('namespace_packages.txt') + else: + namespaces = [] + for top_level_pkg in [ + p for p + in dist.get_metadata('top_level.txt').splitlines() + if p and p not in namespaces]: + path = os.path.join(dist.location, top_level_pkg) + paths_to_remove.add(path) + paths_to_remove.add(path + '.py') + paths_to_remove.add(path + '.pyc') + paths_to_remove.add(path + '.pyo') + + elif distutils_egg_info: + warnings.warn( + "Uninstalling a distutils installed project ({0}) has been " + "deprecated and will be removed in a future version. This is " + "due to the fact that uninstalling a distutils project will " + "only partially uninstall the project.".format(self.name), + RemovedInPip10Warning, + ) + paths_to_remove.add(distutils_egg_info) + + elif dist.location.endswith('.egg'): + # package installed by easy_install + # We cannot match on dist.egg_name because it can slightly vary + # i.e. setuptools-0.6c11-py2.6.egg vs setuptools-0.6rc11-py2.6.egg + paths_to_remove.add(dist.location) + easy_install_egg = os.path.split(dist.location)[1] + easy_install_pth = os.path.join(os.path.dirname(dist.location), + 'easy-install.pth') + paths_to_remove.add_pth(easy_install_pth, './' + easy_install_egg) + + elif egg_info_exists and dist.egg_info.endswith('.dist-info'): + for path in pip.wheel.uninstallation_paths(dist): + paths_to_remove.add(path) + + elif develop_egg_link: + # develop egg + with open(develop_egg_link, 'r') as fh: + link_pointer = os.path.normcase(fh.readline().strip()) + assert (link_pointer == dist.location), ( + 'Egg-link %s does not match installed location of %s ' + '(at %s)' % (link_pointer, self.name, dist.location) + ) + paths_to_remove.add(develop_egg_link) + easy_install_pth = os.path.join(os.path.dirname(develop_egg_link), + 'easy-install.pth') + paths_to_remove.add_pth(easy_install_pth, dist.location) + + else: + logger.debug( + 'Not sure how to uninstall: %s - Check: %s', + dist, dist.location) + + # find distutils scripts= scripts + if dist.has_metadata('scripts') and dist.metadata_isdir('scripts'): + for script in dist.metadata_listdir('scripts'): + if dist_in_usersite(dist): + bin_dir = bin_user + else: + bin_dir = bin_py + paths_to_remove.add(os.path.join(bin_dir, script)) + if WINDOWS: + paths_to_remove.add(os.path.join(bin_dir, script) + '.bat') + + # find console_scripts + if dist.has_metadata('entry_points.txt'): + if six.PY2: + options = {} + else: + options = {"delimiters": ('=', )} + config = configparser.SafeConfigParser(**options) + config.readfp( + FakeFile(dist.get_metadata_lines('entry_points.txt')) + ) + if config.has_section('console_scripts'): + for name, value in config.items('console_scripts'): + if dist_in_usersite(dist): + bin_dir = bin_user + else: + bin_dir = bin_py + paths_to_remove.add(os.path.join(bin_dir, name)) + if WINDOWS: + paths_to_remove.add( + os.path.join(bin_dir, name) + '.exe' + ) + paths_to_remove.add( + os.path.join(bin_dir, name) + '.exe.manifest' + ) + paths_to_remove.add( + os.path.join(bin_dir, name) + '-script.py' + ) + + paths_to_remove.remove(auto_confirm) + self.uninstalled = paths_to_remove + + def rollback_uninstall(self): + if self.uninstalled: + self.uninstalled.rollback() + else: + logger.error( + "Can't rollback %s, nothing uninstalled.", self.name, + ) + + def commit_uninstall(self): + if self.uninstalled: + self.uninstalled.commit() + elif not self.nothing_to_uninstall: + logger.error( + "Can't commit %s, nothing uninstalled.", self.name, + ) + + def archive(self, build_dir): + assert self.source_dir + create_archive = True + archive_name = '%s-%s.zip' % (self.name, self.pkg_info()["version"]) + archive_path = os.path.join(build_dir, archive_name) + if os.path.exists(archive_path): + response = ask_path_exists( + 'The file %s exists. (i)gnore, (w)ipe, (b)ackup, (a)bort ' % + display_path(archive_path), ('i', 'w', 'b', 'a')) + if response == 'i': + create_archive = False + elif response == 'w': + logger.warning('Deleting %s', display_path(archive_path)) + os.remove(archive_path) + elif response == 'b': + dest_file = backup_dir(archive_path) + logger.warning( + 'Backing up %s to %s', + display_path(archive_path), + display_path(dest_file), + ) + shutil.move(archive_path, dest_file) + elif response == 'a': + sys.exit(-1) + if create_archive: + zip = zipfile.ZipFile( + archive_path, 'w', zipfile.ZIP_DEFLATED, + allowZip64=True + ) + dir = os.path.normcase(os.path.abspath(self.setup_py_dir)) + for dirpath, dirnames, filenames in os.walk(dir): + if 'pip-egg-info' in dirnames: + dirnames.remove('pip-egg-info') + for dirname in dirnames: + dirname = os.path.join(dirpath, dirname) + name = self._clean_zip_name(dirname, dir) + zipdir = zipfile.ZipInfo(self.name + '/' + name + '/') + zipdir.external_attr = 0x1ED << 16 # 0o755 + zip.writestr(zipdir, '') + for filename in filenames: + if filename == PIP_DELETE_MARKER_FILENAME: + continue + filename = os.path.join(dirpath, filename) + name = self._clean_zip_name(filename, dir) + zip.write(filename, self.name + '/' + name) + zip.close() + logger.info('Saved %s', display_path(archive_path)) + + def _clean_zip_name(self, name, prefix): + assert name.startswith(prefix + os.path.sep), ( + "name %r doesn't start with prefix %r" % (name, prefix) + ) + name = name[len(prefix) + 1:] + name = name.replace(os.path.sep, '/') + return name + + def match_markers(self, extras_requested=None): + if not extras_requested: + # Provide an extra to safely evaluate the markers + # without matching any extra + extras_requested = ('',) + if self.markers is not None: + return any( + self.markers.evaluate({'extra': extra}) + for extra in extras_requested) + else: + return True + + def install(self, install_options, global_options=[], root=None, + prefix=None): + if self.editable: + self.install_editable( + install_options, global_options, prefix=prefix) + return + if self.is_wheel: + version = pip.wheel.wheel_version(self.source_dir) + pip.wheel.check_compatibility(version, self.name) + + self.move_wheel_files(self.source_dir, root=root, prefix=prefix) + self.install_succeeded = True + return + + # Extend the list of global and install options passed on to + # the setup.py call with the ones from the requirements file. + # Options specified in requirements file override those + # specified on the command line, since the last option given + # to setup.py is the one that is used. + global_options += self.options.get('global_options', []) + install_options += self.options.get('install_options', []) + + if self.isolated: + global_options = list(global_options) + ["--no-user-cfg"] + + temp_location = tempfile.mkdtemp('-record', 'pip-') + record_filename = os.path.join(temp_location, 'install-record.txt') + try: + install_args = self.get_install_args( + global_options, record_filename, root, prefix) + msg = 'Running setup.py install for %s' % (self.name,) + with open_spinner(msg) as spinner: + with indent_log(): + call_subprocess( + install_args + install_options, + cwd=self.setup_py_dir, + show_stdout=False, + spinner=spinner, + ) + + if not os.path.exists(record_filename): + logger.debug('Record file %s not found', record_filename) + return + self.install_succeeded = True + if self.as_egg: + # there's no --always-unzip option we can pass to install + # command so we unable to save the installed-files.txt + return + + def prepend_root(path): + if root is None or not os.path.isabs(path): + return path + else: + return change_root(root, path) + + with open(record_filename) as f: + for line in f: + directory = os.path.dirname(line) + if directory.endswith('.egg-info'): + egg_info_dir = prepend_root(directory) + break + else: + logger.warning( + 'Could not find .egg-info directory in install record' + ' for %s', + self, + ) + # FIXME: put the record somewhere + # FIXME: should this be an error? + return + new_lines = [] + with open(record_filename) as f: + for line in f: + filename = line.strip() + if os.path.isdir(filename): + filename += os.path.sep + new_lines.append( + os.path.relpath( + prepend_root(filename), egg_info_dir) + ) + inst_files_path = os.path.join(egg_info_dir, 'installed-files.txt') + with open(inst_files_path, 'w') as f: + f.write('\n'.join(new_lines) + '\n') + finally: + if os.path.exists(record_filename): + os.remove(record_filename) + rmtree(temp_location) + + def ensure_has_source_dir(self, parent_dir): + """Ensure that a source_dir is set. + + This will create a temporary build dir if the name of the requirement + isn't known yet. + + :param parent_dir: The ideal pip parent_dir for the source_dir. + Generally src_dir for editables and build_dir for sdists. + :return: self.source_dir + """ + if self.source_dir is None: + self.source_dir = self.build_location(parent_dir) + return self.source_dir + + def get_install_args(self, global_options, record_filename, root, prefix): + install_args = [sys.executable, "-u"] + install_args.append('-c') + install_args.append(SETUPTOOLS_SHIM % self.setup_py) + install_args += list(global_options) + \ + ['install', '--record', record_filename] + + if not self.as_egg: + install_args += ['--single-version-externally-managed'] + + if root is not None: + install_args += ['--root', root] + if prefix is not None: + install_args += ['--prefix', prefix] + + if self.pycompile: + install_args += ["--compile"] + else: + install_args += ["--no-compile"] + + if running_under_virtualenv(): + py_ver_str = 'python' + sysconfig.get_python_version() + install_args += ['--install-headers', + os.path.join(sys.prefix, 'include', 'site', + py_ver_str, self.name)] + + return install_args + + def remove_temporary_source(self): + """Remove the source files from this requirement, if they are marked + for deletion""" + if self.source_dir and os.path.exists( + os.path.join(self.source_dir, PIP_DELETE_MARKER_FILENAME)): + logger.debug('Removing source in %s', self.source_dir) + rmtree(self.source_dir) + self.source_dir = None + if self._temp_build_dir and os.path.exists(self._temp_build_dir): + rmtree(self._temp_build_dir) + self._temp_build_dir = None + + def install_editable(self, install_options, + global_options=(), prefix=None): + logger.info('Running setup.py develop for %s', self.name) + + if self.isolated: + global_options = list(global_options) + ["--no-user-cfg"] + + if prefix: + prefix_param = ['--prefix={0}'.format(prefix)] + install_options = list(install_options) + prefix_param + + with indent_log(): + # FIXME: should we do --install-headers here too? + call_subprocess( + [ + sys.executable, + '-c', + SETUPTOOLS_SHIM % self.setup_py + ] + + list(global_options) + + ['develop', '--no-deps'] + + list(install_options), + + cwd=self.setup_py_dir, + show_stdout=False) + + self.install_succeeded = True + + def check_if_exists(self): + """Find an installed distribution that satisfies or conflicts + with this requirement, and set self.satisfied_by or + self.conflicts_with appropriately. + """ + if self.req is None: + return False + try: + # get_distribution() will resolve the entire list of requirements + # anyway, and we've already determined that we need the requirement + # in question, so strip the marker so that we don't try to + # evaluate it. + no_marker = Requirement(str(self.req)) + no_marker.marker = None + self.satisfied_by = pkg_resources.get_distribution(str(no_marker)) + if self.editable and self.satisfied_by: + self.conflicts_with = self.satisfied_by + # when installing editables, nothing pre-existing should ever + # satisfy + self.satisfied_by = None + return True + except pkg_resources.DistributionNotFound: + return False + except pkg_resources.VersionConflict: + existing_dist = pkg_resources.get_distribution( + self.req.name + ) + if self.use_user_site: + if dist_in_usersite(existing_dist): + self.conflicts_with = existing_dist + elif (running_under_virtualenv() and + dist_in_site_packages(existing_dist)): + raise InstallationError( + "Will not install to the user site because it will " + "lack sys.path precedence to %s in %s" % + (existing_dist.project_name, existing_dist.location) + ) + else: + self.conflicts_with = existing_dist + return True + + @property + def is_wheel(self): + return self.link and self.link.is_wheel + + def move_wheel_files(self, wheeldir, root=None, prefix=None): + move_wheel_files( + self.name, self.req, wheeldir, + user=self.use_user_site, + home=self.target_dir, + root=root, + prefix=prefix, + pycompile=self.pycompile, + isolated=self.isolated, + ) + + def get_dist(self): + """Return a pkg_resources.Distribution built from self.egg_info_path""" + egg_info = self.egg_info_path('').rstrip('/') + base_dir = os.path.dirname(egg_info) + metadata = pkg_resources.PathMetadata(base_dir, egg_info) + dist_name = os.path.splitext(os.path.basename(egg_info))[0] + return pkg_resources.Distribution( + os.path.dirname(egg_info), + project_name=dist_name, + metadata=metadata) + + @property + def has_hash_options(self): + """Return whether any known-good hashes are specified as options. + + These activate --require-hashes mode; hashes specified as part of a + URL do not. + + """ + return bool(self.options.get('hashes', {})) + + def hashes(self, trust_internet=True): + """Return a hash-comparer that considers my option- and URL-based + hashes to be known-good. + + Hashes in URLs--ones embedded in the requirements file, not ones + downloaded from an index server--are almost peers with ones from + flags. They satisfy --require-hashes (whether it was implicitly or + explicitly activated) but do not activate it. md5 and sha224 are not + allowed in flags, which should nudge people toward good algos. We + always OR all hashes together, even ones from URLs. + + :param trust_internet: Whether to trust URL-based (#md5=...) hashes + downloaded from the internet, as by populate_link() + + """ + good_hashes = self.options.get('hashes', {}).copy() + link = self.link if trust_internet else self.original_link + if link and link.hash: + good_hashes.setdefault(link.hash_name, []).append(link.hash) + return Hashes(good_hashes) + + +def _strip_postfix(req): + """ + Strip req postfix ( -dev, 0.2, etc ) + """ + # FIXME: use package_to_requirement? + match = re.search(r'^(.*?)(?:-dev|-\d.*)$', req) + if match: + # Strip off -dev, -0.2, etc. + req = match.group(1) + return req + + +def parse_editable(editable_req, default_vcs=None): + """Parses an editable requirement into: + - a requirement name + - an URL + - extras + - editable options + Accepted requirements: + svn+http://blahblah@rev#egg=Foobar[baz]&subdirectory=version_subdir + .[some_extra] + """ + + from pip.index import Link + + url = editable_req + extras = None + + # If a file path is specified with extras, strip off the extras. + m = re.match(r'^(.+)(\[[^\]]+\])$', url) + if m: + url_no_extras = m.group(1) + extras = m.group(2) + else: + url_no_extras = url + + if os.path.isdir(url_no_extras): + if not os.path.exists(os.path.join(url_no_extras, 'setup.py')): + raise InstallationError( + "Directory %r is not installable. File 'setup.py' not found." % + url_no_extras + ) + # Treating it as code that has already been checked out + url_no_extras = path_to_url(url_no_extras) + + if url_no_extras.lower().startswith('file:'): + package_name = Link(url_no_extras).egg_fragment + if extras: + return ( + package_name, + url_no_extras, + Requirement("placeholder" + extras.lower()).extras, + ) + else: + return package_name, url_no_extras, None + + for version_control in vcs: + if url.lower().startswith('%s:' % version_control): + url = '%s+%s' % (version_control, url) + break + + if '+' not in url: + if default_vcs: + warnings.warn( + "--default-vcs has been deprecated and will be removed in " + "the future.", + RemovedInPip10Warning, + ) + url = default_vcs + '+' + url + else: + raise InstallationError( + '%s should either be a path to a local project or a VCS url ' + 'beginning with svn+, git+, hg+, or bzr+' % + editable_req + ) + + vc_type = url.split('+', 1)[0].lower() + + if not vcs.get_backend(vc_type): + error_message = 'For --editable=%s only ' % editable_req + \ + ', '.join([backend.name + '+URL' for backend in vcs.backends]) + \ + ' is currently supported' + raise InstallationError(error_message) + + package_name = Link(url).egg_fragment + if not package_name: + raise InstallationError( + "Could not detect requirement name, please specify one with #egg=" + ) + if not package_name: + raise InstallationError( + '--editable=%s is not the right format; it must have ' + '#egg=Package' % editable_req + ) + return _strip_postfix(package_name), url, None diff --git a/week-0/day-3/my_todo_app/venvironment/lib/python3.6/site-packages/pip/req/req_set.py b/week-0/day-3/my_todo_app/venvironment/lib/python3.6/site-packages/pip/req/req_set.py new file mode 100644 index 00000000..76aec061 --- /dev/null +++ b/week-0/day-3/my_todo_app/venvironment/lib/python3.6/site-packages/pip/req/req_set.py @@ -0,0 +1,798 @@ +from __future__ import absolute_import + +from collections import defaultdict +from itertools import chain +import logging +import os + +from pip._vendor import pkg_resources +from pip._vendor import requests + +from pip.compat import expanduser +from pip.download import (is_file_url, is_dir_url, is_vcs_url, url_to_path, + unpack_url) +from pip.exceptions import (InstallationError, BestVersionAlreadyInstalled, + DistributionNotFound, PreviousBuildDirError, + HashError, HashErrors, HashUnpinned, + DirectoryUrlHashUnsupported, VcsHashUnsupported, + UnsupportedPythonVersion) +from pip.req.req_install import InstallRequirement +from pip.utils import ( + display_path, dist_in_usersite, ensure_dir, normalize_path) +from pip.utils.hashes import MissingHashes +from pip.utils.logging import indent_log +from pip.utils.packaging import check_dist_requires_python +from pip.vcs import vcs +from pip.wheel import Wheel + +logger = logging.getLogger(__name__) + + +class Requirements(object): + + def __init__(self): + self._keys = [] + self._dict = {} + + def keys(self): + return self._keys + + def values(self): + return [self._dict[key] for key in self._keys] + + def __contains__(self, item): + return item in self._keys + + def __setitem__(self, key, value): + if key not in self._keys: + self._keys.append(key) + self._dict[key] = value + + def __getitem__(self, key): + return self._dict[key] + + def __repr__(self): + values = ['%s: %s' % (repr(k), repr(self[k])) for k in self.keys()] + return 'Requirements({%s})' % ', '.join(values) + + +class DistAbstraction(object): + """Abstracts out the wheel vs non-wheel prepare_files logic. + + The requirements for anything installable are as follows: + - we must be able to determine the requirement name + (or we can't correctly handle the non-upgrade case). + - we must be able to generate a list of run-time dependencies + without installing any additional packages (or we would + have to either burn time by doing temporary isolated installs + or alternatively violate pips 'don't start installing unless + all requirements are available' rule - neither of which are + desirable). + - for packages with setup requirements, we must also be able + to determine their requirements without installing additional + packages (for the same reason as run-time dependencies) + - we must be able to create a Distribution object exposing the + above metadata. + """ + + def __init__(self, req_to_install): + self.req_to_install = req_to_install + + def dist(self, finder): + """Return a setuptools Dist object.""" + raise NotImplementedError(self.dist) + + def prep_for_dist(self): + """Ensure that we can get a Dist for this requirement.""" + raise NotImplementedError(self.dist) + + +def make_abstract_dist(req_to_install): + """Factory to make an abstract dist object. + + Preconditions: Either an editable req with a source_dir, or satisfied_by or + a wheel link, or a non-editable req with a source_dir. + + :return: A concrete DistAbstraction. + """ + if req_to_install.editable: + return IsSDist(req_to_install) + elif req_to_install.link and req_to_install.link.is_wheel: + return IsWheel(req_to_install) + else: + return IsSDist(req_to_install) + + +class IsWheel(DistAbstraction): + + def dist(self, finder): + return list(pkg_resources.find_distributions( + self.req_to_install.source_dir))[0] + + def prep_for_dist(self): + # FIXME:https://github.com/pypa/pip/issues/1112 + pass + + +class IsSDist(DistAbstraction): + + def dist(self, finder): + dist = self.req_to_install.get_dist() + # FIXME: shouldn't be globally added: + if dist.has_metadata('dependency_links.txt'): + finder.add_dependency_links( + dist.get_metadata_lines('dependency_links.txt') + ) + return dist + + def prep_for_dist(self): + self.req_to_install.run_egg_info() + self.req_to_install.assert_source_matches_version() + + +class Installed(DistAbstraction): + + def dist(self, finder): + return self.req_to_install.satisfied_by + + def prep_for_dist(self): + pass + + +class RequirementSet(object): + + def __init__(self, build_dir, src_dir, download_dir, upgrade=False, + upgrade_strategy=None, ignore_installed=False, as_egg=False, + target_dir=None, ignore_dependencies=False, + force_reinstall=False, use_user_site=False, session=None, + pycompile=True, isolated=False, wheel_download_dir=None, + wheel_cache=None, require_hashes=False, + ignore_requires_python=False): + """Create a RequirementSet. + + :param wheel_download_dir: Where still-packed .whl files should be + written to. If None they are written to the download_dir parameter. + Separate to download_dir to permit only keeping wheel archives for + pip wheel. + :param download_dir: Where still packed archives should be written to. + If None they are not saved, and are deleted immediately after + unpacking. + :param wheel_cache: The pip wheel cache, for passing to + InstallRequirement. + """ + if session is None: + raise TypeError( + "RequirementSet() missing 1 required keyword argument: " + "'session'" + ) + + self.build_dir = build_dir + self.src_dir = src_dir + # XXX: download_dir and wheel_download_dir overlap semantically and may + # be combined if we're willing to have non-wheel archives present in + # the wheelhouse output by 'pip wheel'. + self.download_dir = download_dir + self.upgrade = upgrade + self.upgrade_strategy = upgrade_strategy + self.ignore_installed = ignore_installed + self.force_reinstall = force_reinstall + self.requirements = Requirements() + # Mapping of alias: real_name + self.requirement_aliases = {} + self.unnamed_requirements = [] + self.ignore_dependencies = ignore_dependencies + self.ignore_requires_python = ignore_requires_python + self.successfully_downloaded = [] + self.successfully_installed = [] + self.reqs_to_cleanup = [] + self.as_egg = as_egg + self.use_user_site = use_user_site + self.target_dir = target_dir # set from --target option + self.session = session + self.pycompile = pycompile + self.isolated = isolated + if wheel_download_dir: + wheel_download_dir = normalize_path(wheel_download_dir) + self.wheel_download_dir = wheel_download_dir + self._wheel_cache = wheel_cache + self.require_hashes = require_hashes + # Maps from install_req -> dependencies_of_install_req + self._dependencies = defaultdict(list) + + def __str__(self): + reqs = [req for req in self.requirements.values() + if not req.comes_from] + reqs.sort(key=lambda req: req.name.lower()) + return ' '.join([str(req.req) for req in reqs]) + + def __repr__(self): + reqs = [req for req in self.requirements.values()] + reqs.sort(key=lambda req: req.name.lower()) + reqs_str = ', '.join([str(req.req) for req in reqs]) + return ('<%s object; %d requirement(s): %s>' + % (self.__class__.__name__, len(reqs), reqs_str)) + + def add_requirement(self, install_req, parent_req_name=None, + extras_requested=None): + """Add install_req as a requirement to install. + + :param parent_req_name: The name of the requirement that needed this + added. The name is used because when multiple unnamed requirements + resolve to the same name, we could otherwise end up with dependency + links that point outside the Requirements set. parent_req must + already be added. Note that None implies that this is a user + supplied requirement, vs an inferred one. + :param extras_requested: an iterable of extras used to evaluate the + environement markers. + :return: Additional requirements to scan. That is either [] if + the requirement is not applicable, or [install_req] if the + requirement is applicable and has just been added. + """ + name = install_req.name + if not install_req.match_markers(extras_requested): + logger.warning("Ignoring %s: markers '%s' don't match your " + "environment", install_req.name, + install_req.markers) + return [] + + # This check has to come after we filter requirements with the + # environment markers. + if install_req.link and install_req.link.is_wheel: + wheel = Wheel(install_req.link.filename) + if not wheel.supported(): + raise InstallationError( + "%s is not a supported wheel on this platform." % + wheel.filename + ) + + install_req.as_egg = self.as_egg + install_req.use_user_site = self.use_user_site + install_req.target_dir = self.target_dir + install_req.pycompile = self.pycompile + install_req.is_direct = (parent_req_name is None) + + if not name: + # url or path requirement w/o an egg fragment + self.unnamed_requirements.append(install_req) + return [install_req] + else: + try: + existing_req = self.get_requirement(name) + except KeyError: + existing_req = None + if (parent_req_name is None and existing_req and not + existing_req.constraint and + existing_req.extras == install_req.extras and not + existing_req.req.specifier == install_req.req.specifier): + raise InstallationError( + 'Double requirement given: %s (already in %s, name=%r)' + % (install_req, existing_req, name)) + if not existing_req: + # Add requirement + self.requirements[name] = install_req + # FIXME: what about other normalizations? E.g., _ vs. -? + if name.lower() != name: + self.requirement_aliases[name.lower()] = name + result = [install_req] + else: + # Assume there's no need to scan, and that we've already + # encountered this for scanning. + result = [] + if not install_req.constraint and existing_req.constraint: + if (install_req.link and not (existing_req.link and + install_req.link.path == existing_req.link.path)): + self.reqs_to_cleanup.append(install_req) + raise InstallationError( + "Could not satisfy constraints for '%s': " + "installation from path or url cannot be " + "constrained to a version" % name) + # If we're now installing a constraint, mark the existing + # object for real installation. + existing_req.constraint = False + existing_req.extras = tuple( + sorted(set(existing_req.extras).union( + set(install_req.extras)))) + logger.debug("Setting %s extras to: %s", + existing_req, existing_req.extras) + # And now we need to scan this. + result = [existing_req] + # Canonicalise to the already-added object for the backref + # check below. + install_req = existing_req + if parent_req_name: + parent_req = self.get_requirement(parent_req_name) + self._dependencies[parent_req].append(install_req) + return result + + def has_requirement(self, project_name): + name = project_name.lower() + if (name in self.requirements and + not self.requirements[name].constraint or + name in self.requirement_aliases and + not self.requirements[self.requirement_aliases[name]].constraint): + return True + return False + + @property + def has_requirements(self): + return list(req for req in self.requirements.values() if not + req.constraint) or self.unnamed_requirements + + @property + def is_download(self): + if self.download_dir: + self.download_dir = expanduser(self.download_dir) + if os.path.exists(self.download_dir): + return True + else: + logger.critical('Could not find download directory') + raise InstallationError( + "Could not find or access download directory '%s'" + % display_path(self.download_dir)) + return False + + def get_requirement(self, project_name): + for name in project_name, project_name.lower(): + if name in self.requirements: + return self.requirements[name] + if name in self.requirement_aliases: + return self.requirements[self.requirement_aliases[name]] + raise KeyError("No project with the name %r" % project_name) + + def uninstall(self, auto_confirm=False): + for req in self.requirements.values(): + if req.constraint: + continue + req.uninstall(auto_confirm=auto_confirm) + req.commit_uninstall() + + def prepare_files(self, finder): + """ + Prepare process. Create temp directories, download and/or unpack files. + """ + # make the wheelhouse + if self.wheel_download_dir: + ensure_dir(self.wheel_download_dir) + + # If any top-level requirement has a hash specified, enter + # hash-checking mode, which requires hashes from all. + root_reqs = self.unnamed_requirements + self.requirements.values() + require_hashes = (self.require_hashes or + any(req.has_hash_options for req in root_reqs)) + if require_hashes and self.as_egg: + raise InstallationError( + '--egg is not allowed with --require-hashes mode, since it ' + 'delegates dependency resolution to setuptools and could thus ' + 'result in installation of unhashed packages.') + + # Actually prepare the files, and collect any exceptions. Most hash + # exceptions cannot be checked ahead of time, because + # req.populate_link() needs to be called before we can make decisions + # based on link type. + discovered_reqs = [] + hash_errors = HashErrors() + for req in chain(root_reqs, discovered_reqs): + try: + discovered_reqs.extend(self._prepare_file( + finder, + req, + require_hashes=require_hashes, + ignore_dependencies=self.ignore_dependencies)) + except HashError as exc: + exc.req = req + hash_errors.append(exc) + + if hash_errors: + raise hash_errors + + def _is_upgrade_allowed(self, req): + return self.upgrade and ( + self.upgrade_strategy == "eager" or ( + self.upgrade_strategy == "only-if-needed" and req.is_direct + ) + ) + + def _check_skip_installed(self, req_to_install, finder): + """Check if req_to_install should be skipped. + + This will check if the req is installed, and whether we should upgrade + or reinstall it, taking into account all the relevant user options. + + After calling this req_to_install will only have satisfied_by set to + None if the req_to_install is to be upgraded/reinstalled etc. Any + other value will be a dist recording the current thing installed that + satisfies the requirement. + + Note that for vcs urls and the like we can't assess skipping in this + routine - we simply identify that we need to pull the thing down, + then later on it is pulled down and introspected to assess upgrade/ + reinstalls etc. + + :return: A text reason for why it was skipped, or None. + """ + # Check whether to upgrade/reinstall this req or not. + req_to_install.check_if_exists() + if req_to_install.satisfied_by: + upgrade_allowed = self._is_upgrade_allowed(req_to_install) + + # Is the best version is installed. + best_installed = False + + if upgrade_allowed: + # For link based requirements we have to pull the + # tree down and inspect to assess the version #, so + # its handled way down. + if not (self.force_reinstall or req_to_install.link): + try: + finder.find_requirement( + req_to_install, upgrade_allowed) + except BestVersionAlreadyInstalled: + best_installed = True + except DistributionNotFound: + # No distribution found, so we squash the + # error - it will be raised later when we + # re-try later to do the install. + # Why don't we just raise here? + pass + + if not best_installed: + # don't uninstall conflict if user install and + # conflict is not user install + if not (self.use_user_site and not + dist_in_usersite(req_to_install.satisfied_by)): + req_to_install.conflicts_with = \ + req_to_install.satisfied_by + req_to_install.satisfied_by = None + + # Figure out a nice message to say why we're skipping this. + if best_installed: + skip_reason = 'already up-to-date' + elif self.upgrade_strategy == "only-if-needed": + skip_reason = 'not upgraded as not directly required' + else: + skip_reason = 'already satisfied' + + return skip_reason + else: + return None + + def _prepare_file(self, + finder, + req_to_install, + require_hashes=False, + ignore_dependencies=False): + """Prepare a single requirements file. + + :return: A list of additional InstallRequirements to also install. + """ + # Tell user what we are doing for this requirement: + # obtain (editable), skipping, processing (local url), collecting + # (remote url or package name) + if req_to_install.constraint or req_to_install.prepared: + return [] + + req_to_install.prepared = True + + # ###################### # + # # print log messages # # + # ###################### # + if req_to_install.editable: + logger.info('Obtaining %s', req_to_install) + else: + # satisfied_by is only evaluated by calling _check_skip_installed, + # so it must be None here. + assert req_to_install.satisfied_by is None + if not self.ignore_installed: + skip_reason = self._check_skip_installed( + req_to_install, finder) + + if req_to_install.satisfied_by: + assert skip_reason is not None, ( + '_check_skip_installed returned None but ' + 'req_to_install.satisfied_by is set to %r' + % (req_to_install.satisfied_by,)) + logger.info( + 'Requirement %s: %s', skip_reason, + req_to_install) + else: + if (req_to_install.link and + req_to_install.link.scheme == 'file'): + path = url_to_path(req_to_install.link.url) + logger.info('Processing %s', display_path(path)) + else: + logger.info('Collecting %s', req_to_install) + + with indent_log(): + # ################################ # + # # vcs update or unpack archive # # + # ################################ # + if req_to_install.editable: + if require_hashes: + raise InstallationError( + 'The editable requirement %s cannot be installed when ' + 'requiring hashes, because there is no single file to ' + 'hash.' % req_to_install) + req_to_install.ensure_has_source_dir(self.src_dir) + req_to_install.update_editable(not self.is_download) + abstract_dist = make_abstract_dist(req_to_install) + abstract_dist.prep_for_dist() + if self.is_download: + req_to_install.archive(self.download_dir) + req_to_install.check_if_exists() + elif req_to_install.satisfied_by: + if require_hashes: + logger.debug( + 'Since it is already installed, we are trusting this ' + 'package without checking its hash. To ensure a ' + 'completely repeatable environment, install into an ' + 'empty virtualenv.') + abstract_dist = Installed(req_to_install) + else: + # @@ if filesystem packages are not marked + # editable in a req, a non deterministic error + # occurs when the script attempts to unpack the + # build directory + req_to_install.ensure_has_source_dir(self.build_dir) + # If a checkout exists, it's unwise to keep going. version + # inconsistencies are logged later, but do not fail the + # installation. + # FIXME: this won't upgrade when there's an existing + # package unpacked in `req_to_install.source_dir` + if os.path.exists( + os.path.join(req_to_install.source_dir, 'setup.py')): + raise PreviousBuildDirError( + "pip can't proceed with requirements '%s' due to a" + " pre-existing build directory (%s). This is " + "likely due to a previous installation that failed" + ". pip is being responsible and not assuming it " + "can delete this. Please delete it and try again." + % (req_to_install, req_to_install.source_dir) + ) + req_to_install.populate_link( + finder, + self._is_upgrade_allowed(req_to_install), + require_hashes + ) + # We can't hit this spot and have populate_link return None. + # req_to_install.satisfied_by is None here (because we're + # guarded) and upgrade has no impact except when satisfied_by + # is not None. + # Then inside find_requirement existing_applicable -> False + # If no new versions are found, DistributionNotFound is raised, + # otherwise a result is guaranteed. + assert req_to_install.link + link = req_to_install.link + + # Now that we have the real link, we can tell what kind of + # requirements we have and raise some more informative errors + # than otherwise. (For example, we can raise VcsHashUnsupported + # for a VCS URL rather than HashMissing.) + if require_hashes: + # We could check these first 2 conditions inside + # unpack_url and save repetition of conditions, but then + # we would report less-useful error messages for + # unhashable requirements, complaining that there's no + # hash provided. + if is_vcs_url(link): + raise VcsHashUnsupported() + elif is_file_url(link) and is_dir_url(link): + raise DirectoryUrlHashUnsupported() + if (not req_to_install.original_link and + not req_to_install.is_pinned): + # Unpinned packages are asking for trouble when a new + # version is uploaded. This isn't a security check, but + # it saves users a surprising hash mismatch in the + # future. + # + # file:/// URLs aren't pinnable, so don't complain + # about them not being pinned. + raise HashUnpinned() + hashes = req_to_install.hashes( + trust_internet=not require_hashes) + if require_hashes and not hashes: + # Known-good hashes are missing for this requirement, so + # shim it with a facade object that will provoke hash + # computation and then raise a HashMissing exception + # showing the user what the hash should be. + hashes = MissingHashes() + + try: + download_dir = self.download_dir + # We always delete unpacked sdists after pip ran. + autodelete_unpacked = True + if req_to_install.link.is_wheel \ + and self.wheel_download_dir: + # when doing 'pip wheel` we download wheels to a + # dedicated dir. + download_dir = self.wheel_download_dir + if req_to_install.link.is_wheel: + if download_dir: + # When downloading, we only unpack wheels to get + # metadata. + autodelete_unpacked = True + else: + # When installing a wheel, we use the unpacked + # wheel. + autodelete_unpacked = False + unpack_url( + req_to_install.link, req_to_install.source_dir, + download_dir, autodelete_unpacked, + session=self.session, hashes=hashes) + except requests.HTTPError as exc: + logger.critical( + 'Could not install requirement %s because ' + 'of error %s', + req_to_install, + exc, + ) + raise InstallationError( + 'Could not install requirement %s because ' + 'of HTTP error %s for URL %s' % + (req_to_install, exc, req_to_install.link) + ) + abstract_dist = make_abstract_dist(req_to_install) + abstract_dist.prep_for_dist() + if self.is_download: + # Make a .zip of the source_dir we already created. + if req_to_install.link.scheme in vcs.all_schemes: + req_to_install.archive(self.download_dir) + # req_to_install.req is only avail after unpack for URL + # pkgs repeat check_if_exists to uninstall-on-upgrade + # (#14) + if not self.ignore_installed: + req_to_install.check_if_exists() + if req_to_install.satisfied_by: + if self.upgrade or self.ignore_installed: + # don't uninstall conflict if user install and + # conflict is not user install + if not (self.use_user_site and not + dist_in_usersite( + req_to_install.satisfied_by)): + req_to_install.conflicts_with = \ + req_to_install.satisfied_by + req_to_install.satisfied_by = None + else: + logger.info( + 'Requirement already satisfied (use ' + '--upgrade to upgrade): %s', + req_to_install, + ) + + # ###################### # + # # parse dependencies # # + # ###################### # + dist = abstract_dist.dist(finder) + try: + check_dist_requires_python(dist) + except UnsupportedPythonVersion as e: + if self.ignore_requires_python: + logger.warning(e.args[0]) + else: + req_to_install.remove_temporary_source() + raise + more_reqs = [] + + def add_req(subreq, extras_requested): + sub_install_req = InstallRequirement( + str(subreq), + req_to_install, + isolated=self.isolated, + wheel_cache=self._wheel_cache, + ) + more_reqs.extend(self.add_requirement( + sub_install_req, req_to_install.name, + extras_requested=extras_requested)) + + # We add req_to_install before its dependencies, so that we + # can refer to it when adding dependencies. + if not self.has_requirement(req_to_install.name): + # 'unnamed' requirements will get added here + self.add_requirement(req_to_install, None) + + if not ignore_dependencies: + if (req_to_install.extras): + logger.debug( + "Installing extra requirements: %r", + ','.join(req_to_install.extras), + ) + missing_requested = sorted( + set(req_to_install.extras) - set(dist.extras) + ) + for missing in missing_requested: + logger.warning( + '%s does not provide the extra \'%s\'', + dist, missing + ) + + available_requested = sorted( + set(dist.extras) & set(req_to_install.extras) + ) + for subreq in dist.requires(available_requested): + add_req(subreq, extras_requested=available_requested) + + # cleanup tmp src + self.reqs_to_cleanup.append(req_to_install) + + if not req_to_install.editable and not req_to_install.satisfied_by: + # XXX: --no-install leads this to report 'Successfully + # downloaded' for only non-editable reqs, even though we took + # action on them. + self.successfully_downloaded.append(req_to_install) + + return more_reqs + + def cleanup_files(self): + """Clean up files, remove builds.""" + logger.debug('Cleaning up...') + with indent_log(): + for req in self.reqs_to_cleanup: + req.remove_temporary_source() + + def _to_install(self): + """Create the installation order. + + The installation order is topological - requirements are installed + before the requiring thing. We break cycles at an arbitrary point, + and make no other guarantees. + """ + # The current implementation, which we may change at any point + # installs the user specified things in the order given, except when + # dependencies must come earlier to achieve topological order. + order = [] + ordered_reqs = set() + + def schedule(req): + if req.satisfied_by or req in ordered_reqs: + return + if req.constraint: + return + ordered_reqs.add(req) + for dep in self._dependencies[req]: + schedule(dep) + order.append(req) + for install_req in self.requirements.values(): + schedule(install_req) + return order + + def install(self, install_options, global_options=(), *args, **kwargs): + """ + Install everything in this set (after having downloaded and unpacked + the packages) + """ + to_install = self._to_install() + + if to_install: + logger.info( + 'Installing collected packages: %s', + ', '.join([req.name for req in to_install]), + ) + + with indent_log(): + for requirement in to_install: + if requirement.conflicts_with: + logger.info( + 'Found existing installation: %s', + requirement.conflicts_with, + ) + with indent_log(): + requirement.uninstall(auto_confirm=True) + try: + requirement.install( + install_options, + global_options, + *args, + **kwargs + ) + except: + # if install did not succeed, rollback previous uninstall + if (requirement.conflicts_with and not + requirement.install_succeeded): + requirement.rollback_uninstall() + raise + else: + if (requirement.conflicts_with and + requirement.install_succeeded): + requirement.commit_uninstall() + requirement.remove_temporary_source() + + self.successfully_installed = to_install diff --git a/week-0/day-3/my_todo_app/venvironment/lib/python3.6/site-packages/pip/req/req_uninstall.py b/week-0/day-3/my_todo_app/venvironment/lib/python3.6/site-packages/pip/req/req_uninstall.py new file mode 100644 index 00000000..5248430a --- /dev/null +++ b/week-0/day-3/my_todo_app/venvironment/lib/python3.6/site-packages/pip/req/req_uninstall.py @@ -0,0 +1,195 @@ +from __future__ import absolute_import + +import logging +import os +import tempfile + +from pip.compat import uses_pycache, WINDOWS, cache_from_source +from pip.exceptions import UninstallationError +from pip.utils import rmtree, ask, is_local, renames, normalize_path +from pip.utils.logging import indent_log + + +logger = logging.getLogger(__name__) + + +class UninstallPathSet(object): + """A set of file paths to be removed in the uninstallation of a + requirement.""" + def __init__(self, dist): + self.paths = set() + self._refuse = set() + self.pth = {} + self.dist = dist + self.save_dir = None + self._moved_paths = [] + + def _permitted(self, path): + """ + Return True if the given path is one we are permitted to + remove/modify, False otherwise. + + """ + return is_local(path) + + def add(self, path): + head, tail = os.path.split(path) + + # we normalize the head to resolve parent directory symlinks, but not + # the tail, since we only want to uninstall symlinks, not their targets + path = os.path.join(normalize_path(head), os.path.normcase(tail)) + + if not os.path.exists(path): + return + if self._permitted(path): + self.paths.add(path) + else: + self._refuse.add(path) + + # __pycache__ files can show up after 'installed-files.txt' is created, + # due to imports + if os.path.splitext(path)[1] == '.py' and uses_pycache: + self.add(cache_from_source(path)) + + def add_pth(self, pth_file, entry): + pth_file = normalize_path(pth_file) + if self._permitted(pth_file): + if pth_file not in self.pth: + self.pth[pth_file] = UninstallPthEntries(pth_file) + self.pth[pth_file].add(entry) + else: + self._refuse.add(pth_file) + + def compact(self, paths): + """Compact a path set to contain the minimal number of paths + necessary to contain all paths in the set. If /a/path/ and + /a/path/to/a/file.txt are both in the set, leave only the + shorter path.""" + short_paths = set() + for path in sorted(paths, key=len): + if not any([ + (path.startswith(shortpath) and + path[len(shortpath.rstrip(os.path.sep))] == os.path.sep) + for shortpath in short_paths]): + short_paths.add(path) + return short_paths + + def _stash(self, path): + return os.path.join( + self.save_dir, os.path.splitdrive(path)[1].lstrip(os.path.sep)) + + def remove(self, auto_confirm=False): + """Remove paths in ``self.paths`` with confirmation (unless + ``auto_confirm`` is True).""" + if not self.paths: + logger.info( + "Can't uninstall '%s'. No files were found to uninstall.", + self.dist.project_name, + ) + return + logger.info( + 'Uninstalling %s-%s:', + self.dist.project_name, self.dist.version + ) + + with indent_log(): + paths = sorted(self.compact(self.paths)) + + if auto_confirm: + response = 'y' + else: + for path in paths: + logger.info(path) + response = ask('Proceed (y/n)? ', ('y', 'n')) + if self._refuse: + logger.info('Not removing or modifying (outside of prefix):') + for path in self.compact(self._refuse): + logger.info(path) + if response == 'y': + self.save_dir = tempfile.mkdtemp(suffix='-uninstall', + prefix='pip-') + for path in paths: + new_path = self._stash(path) + logger.debug('Removing file or directory %s', path) + self._moved_paths.append(path) + renames(path, new_path) + for pth in self.pth.values(): + pth.remove() + logger.info( + 'Successfully uninstalled %s-%s', + self.dist.project_name, self.dist.version + ) + + def rollback(self): + """Rollback the changes previously made by remove().""" + if self.save_dir is None: + logger.error( + "Can't roll back %s; was not uninstalled", + self.dist.project_name, + ) + return False + logger.info('Rolling back uninstall of %s', self.dist.project_name) + for path in self._moved_paths: + tmp_path = self._stash(path) + logger.debug('Replacing %s', path) + renames(tmp_path, path) + for pth in self.pth.values(): + pth.rollback() + + def commit(self): + """Remove temporary save dir: rollback will no longer be possible.""" + if self.save_dir is not None: + rmtree(self.save_dir) + self.save_dir = None + self._moved_paths = [] + + +class UninstallPthEntries(object): + def __init__(self, pth_file): + if not os.path.isfile(pth_file): + raise UninstallationError( + "Cannot remove entries from nonexistent file %s" % pth_file + ) + self.file = pth_file + self.entries = set() + self._saved_lines = None + + def add(self, entry): + entry = os.path.normcase(entry) + # On Windows, os.path.normcase converts the entry to use + # backslashes. This is correct for entries that describe absolute + # paths outside of site-packages, but all the others use forward + # slashes. + if WINDOWS and not os.path.splitdrive(entry)[0]: + entry = entry.replace('\\', '/') + self.entries.add(entry) + + def remove(self): + logger.debug('Removing pth entries from %s:', self.file) + with open(self.file, 'rb') as fh: + # windows uses '\r\n' with py3k, but uses '\n' with py2.x + lines = fh.readlines() + self._saved_lines = lines + if any(b'\r\n' in line for line in lines): + endline = '\r\n' + else: + endline = '\n' + for entry in self.entries: + try: + logger.debug('Removing entry: %s', entry) + lines.remove((entry + endline).encode("utf-8")) + except ValueError: + pass + with open(self.file, 'wb') as fh: + fh.writelines(lines) + + def rollback(self): + if self._saved_lines is None: + logger.error( + 'Cannot roll back changes to %s, none were made', self.file + ) + return False + logger.debug('Rolling %s back to previous state', self.file) + with open(self.file, 'wb') as fh: + fh.writelines(self._saved_lines) + return True diff --git a/week-0/day-3/my_todo_app/venvironment/lib/python3.6/site-packages/pip/status_codes.py b/week-0/day-3/my_todo_app/venvironment/lib/python3.6/site-packages/pip/status_codes.py new file mode 100644 index 00000000..275360a3 --- /dev/null +++ b/week-0/day-3/my_todo_app/venvironment/lib/python3.6/site-packages/pip/status_codes.py @@ -0,0 +1,8 @@ +from __future__ import absolute_import + +SUCCESS = 0 +ERROR = 1 +UNKNOWN_ERROR = 2 +VIRTUALENV_NOT_FOUND = 3 +PREVIOUS_BUILD_DIR_ERROR = 4 +NO_MATCHES_FOUND = 23 diff --git a/week-0/day-3/my_todo_app/venvironment/lib/python3.6/site-packages/pip/utils/__init__.py b/week-0/day-3/my_todo_app/venvironment/lib/python3.6/site-packages/pip/utils/__init__.py new file mode 100644 index 00000000..0d25d917 --- /dev/null +++ b/week-0/day-3/my_todo_app/venvironment/lib/python3.6/site-packages/pip/utils/__init__.py @@ -0,0 +1,870 @@ +from __future__ import absolute_import + +from collections import deque +import contextlib +import errno +import io +import locale +# we have a submodule named 'logging' which would shadow this if we used the +# regular name: +import logging as std_logging +import re +import os +import posixpath +import shutil +import stat +import subprocess +import sys +import tarfile +import zipfile + +from pip.exceptions import InstallationError +from pip.compat import console_to_str, expanduser, stdlib_pkgs +from pip.locations import ( + site_packages, user_site, running_under_virtualenv, virtualenv_no_global, + write_delete_marker_file, +) +from pip._vendor import pkg_resources +from pip._vendor.six.moves import input +from pip._vendor.six import PY2 +from pip._vendor.retrying import retry + +if PY2: + from io import BytesIO as StringIO +else: + from io import StringIO + +__all__ = ['rmtree', 'display_path', 'backup_dir', + 'ask', 'splitext', + 'format_size', 'is_installable_dir', + 'is_svn_page', 'file_contents', + 'split_leading_dir', 'has_leading_dir', + 'normalize_path', + 'renames', 'get_terminal_size', 'get_prog', + 'unzip_file', 'untar_file', 'unpack_file', 'call_subprocess', + 'captured_stdout', 'ensure_dir', + 'ARCHIVE_EXTENSIONS', 'SUPPORTED_EXTENSIONS', + 'get_installed_version'] + + +logger = std_logging.getLogger(__name__) + +BZ2_EXTENSIONS = ('.tar.bz2', '.tbz') +XZ_EXTENSIONS = ('.tar.xz', '.txz', '.tlz', '.tar.lz', '.tar.lzma') +ZIP_EXTENSIONS = ('.zip', '.whl') +TAR_EXTENSIONS = ('.tar.gz', '.tgz', '.tar') +ARCHIVE_EXTENSIONS = ( + ZIP_EXTENSIONS + BZ2_EXTENSIONS + TAR_EXTENSIONS + XZ_EXTENSIONS) +SUPPORTED_EXTENSIONS = ZIP_EXTENSIONS + TAR_EXTENSIONS +try: + import bz2 # noqa + SUPPORTED_EXTENSIONS += BZ2_EXTENSIONS +except ImportError: + logger.debug('bz2 module is not available') + +try: + # Only for Python 3.3+ + import lzma # noqa + SUPPORTED_EXTENSIONS += XZ_EXTENSIONS +except ImportError: + logger.debug('lzma module is not available') + + +def import_or_raise(pkg_or_module_string, ExceptionType, *args, **kwargs): + try: + return __import__(pkg_or_module_string) + except ImportError: + raise ExceptionType(*args, **kwargs) + + +def ensure_dir(path): + """os.path.makedirs without EEXIST.""" + try: + os.makedirs(path) + except OSError as e: + if e.errno != errno.EEXIST: + raise + + +def get_prog(): + try: + if os.path.basename(sys.argv[0]) in ('__main__.py', '-c'): + return "%s -m pip" % sys.executable + except (AttributeError, TypeError, IndexError): + pass + return 'pip' + + +# Retry every half second for up to 3 seconds +@retry(stop_max_delay=3000, wait_fixed=500) +def rmtree(dir, ignore_errors=False): + shutil.rmtree(dir, ignore_errors=ignore_errors, + onerror=rmtree_errorhandler) + + +def rmtree_errorhandler(func, path, exc_info): + """On Windows, the files in .svn are read-only, so when rmtree() tries to + remove them, an exception is thrown. We catch that here, remove the + read-only attribute, and hopefully continue without problems.""" + # if file type currently read only + if os.stat(path).st_mode & stat.S_IREAD: + # convert to read/write + os.chmod(path, stat.S_IWRITE) + # use the original function to repeat the operation + func(path) + return + else: + raise + + +def display_path(path): + """Gives the display value for a given path, making it relative to cwd + if possible.""" + path = os.path.normcase(os.path.abspath(path)) + if sys.version_info[0] == 2: + path = path.decode(sys.getfilesystemencoding(), 'replace') + path = path.encode(sys.getdefaultencoding(), 'replace') + if path.startswith(os.getcwd() + os.path.sep): + path = '.' + path[len(os.getcwd()):] + return path + + +def backup_dir(dir, ext='.bak'): + """Figure out the name of a directory to back up the given dir to + (adding .bak, .bak2, etc)""" + n = 1 + extension = ext + while os.path.exists(dir + extension): + n += 1 + extension = ext + str(n) + return dir + extension + + +def ask_path_exists(message, options): + for action in os.environ.get('PIP_EXISTS_ACTION', '').split(): + if action in options: + return action + return ask(message, options) + + +def ask(message, options): + """Ask the message interactively, with the given possible responses""" + while 1: + if os.environ.get('PIP_NO_INPUT'): + raise Exception( + 'No input was expected ($PIP_NO_INPUT set); question: %s' % + message + ) + response = input(message) + response = response.strip().lower() + if response not in options: + print( + 'Your response (%r) was not one of the expected responses: ' + '%s' % (response, ', '.join(options)) + ) + else: + return response + + +def format_size(bytes): + if bytes > 1000 * 1000: + return '%.1fMB' % (bytes / 1000.0 / 1000) + elif bytes > 10 * 1000: + return '%ikB' % (bytes / 1000) + elif bytes > 1000: + return '%.1fkB' % (bytes / 1000.0) + else: + return '%ibytes' % bytes + + +def is_installable_dir(path): + """Return True if `path` is a directory containing a setup.py file.""" + if not os.path.isdir(path): + return False + setup_py = os.path.join(path, 'setup.py') + if os.path.isfile(setup_py): + return True + return False + + +def is_svn_page(html): + """ + Returns true if the page appears to be the index page of an svn repository + """ + return (re.search(r'[^<]*Revision \d+:', html) and + re.search(r'Powered by (?:<a[^>]*?>)?Subversion', html, re.I)) + + +def file_contents(filename): + with open(filename, 'rb') as fp: + return fp.read().decode('utf-8') + + +def read_chunks(file, size=io.DEFAULT_BUFFER_SIZE): + """Yield pieces of data from a file-like object until EOF.""" + while True: + chunk = file.read(size) + if not chunk: + break + yield chunk + + +def split_leading_dir(path): + path = path.lstrip('/').lstrip('\\') + if '/' in path and (('\\' in path and path.find('/') < path.find('\\')) or + '\\' not in path): + return path.split('/', 1) + elif '\\' in path: + return path.split('\\', 1) + else: + return path, '' + + +def has_leading_dir(paths): + """Returns true if all the paths have the same leading path name + (i.e., everything is in one subdirectory in an archive)""" + common_prefix = None + for path in paths: + prefix, rest = split_leading_dir(path) + if not prefix: + return False + elif common_prefix is None: + common_prefix = prefix + elif prefix != common_prefix: + return False + return True + + +def normalize_path(path, resolve_symlinks=True): + """ + Convert a path to its canonical, case-normalized, absolute version. + + """ + path = expanduser(path) + if resolve_symlinks: + path = os.path.realpath(path) + else: + path = os.path.abspath(path) + return os.path.normcase(path) + + +def splitext(path): + """Like os.path.splitext, but take off .tar too""" + base, ext = posixpath.splitext(path) + if base.lower().endswith('.tar'): + ext = base[-4:] + ext + base = base[:-4] + return base, ext + + +def renames(old, new): + """Like os.renames(), but handles renaming across devices.""" + # Implementation borrowed from os.renames(). + head, tail = os.path.split(new) + if head and tail and not os.path.exists(head): + os.makedirs(head) + + shutil.move(old, new) + + head, tail = os.path.split(old) + if head and tail: + try: + os.removedirs(head) + except OSError: + pass + + +def is_local(path): + """ + Return True if this is a path pip is allowed to modify. + + If we're in a virtualenv, sys.prefix points to the virtualenv's + prefix; only sys.prefix is considered local. + + If we're not in a virtualenv, in general we can modify anything. + However, if the OS vendor has configured distutils to install + somewhere other than sys.prefix (which could be a subdirectory of + sys.prefix, e.g. /usr/local), we consider sys.prefix itself nonlocal + and the domain of the OS vendor. (In other words, everything _other + than_ sys.prefix is considered local.) + + """ + + path = normalize_path(path) + prefix = normalize_path(sys.prefix) + + if running_under_virtualenv(): + return path.startswith(normalize_path(sys.prefix)) + else: + from pip.locations import distutils_scheme + if path.startswith(prefix): + for local_path in distutils_scheme("").values(): + if path.startswith(normalize_path(local_path)): + return True + return False + else: + return True + + +def dist_is_local(dist): + """ + Return True if given Distribution object is installed somewhere pip + is allowed to modify. + + """ + return is_local(dist_location(dist)) + + +def dist_in_usersite(dist): + """ + Return True if given Distribution is installed in user site. + """ + norm_path = normalize_path(dist_location(dist)) + return norm_path.startswith(normalize_path(user_site)) + + +def dist_in_site_packages(dist): + """ + Return True if given Distribution is installed in + distutils.sysconfig.get_python_lib(). + """ + return normalize_path( + dist_location(dist) + ).startswith(normalize_path(site_packages)) + + +def dist_is_editable(dist): + """Is distribution an editable install?""" + for path_item in sys.path: + egg_link = os.path.join(path_item, dist.project_name + '.egg-link') + if os.path.isfile(egg_link): + return True + return False + + +def get_installed_distributions(local_only=True, + skip=stdlib_pkgs, + include_editables=True, + editables_only=False, + user_only=False): + """ + Return a list of installed Distribution objects. + + If ``local_only`` is True (default), only return installations + local to the current virtualenv, if in a virtualenv. + + ``skip`` argument is an iterable of lower-case project names to + ignore; defaults to stdlib_pkgs + + If ``editables`` is False, don't report editables. + + If ``editables_only`` is True , only report editables. + + If ``user_only`` is True , only report installations in the user + site directory. + + """ + if local_only: + local_test = dist_is_local + else: + def local_test(d): + return True + + if include_editables: + def editable_test(d): + return True + else: + def editable_test(d): + return not dist_is_editable(d) + + if editables_only: + def editables_only_test(d): + return dist_is_editable(d) + else: + def editables_only_test(d): + return True + + if user_only: + user_test = dist_in_usersite + else: + def user_test(d): + return True + + return [d for d in pkg_resources.working_set + if local_test(d) and + d.key not in skip and + editable_test(d) and + editables_only_test(d) and + user_test(d) + ] + + +def egg_link_path(dist): + """ + Return the path for the .egg-link file if it exists, otherwise, None. + + There's 3 scenarios: + 1) not in a virtualenv + try to find in site.USER_SITE, then site_packages + 2) in a no-global virtualenv + try to find in site_packages + 3) in a yes-global virtualenv + try to find in site_packages, then site.USER_SITE + (don't look in global location) + + For #1 and #3, there could be odd cases, where there's an egg-link in 2 + locations. + + This method will just return the first one found. + """ + sites = [] + if running_under_virtualenv(): + if virtualenv_no_global(): + sites.append(site_packages) + else: + sites.append(site_packages) + if user_site: + sites.append(user_site) + else: + if user_site: + sites.append(user_site) + sites.append(site_packages) + + for site in sites: + egglink = os.path.join(site, dist.project_name) + '.egg-link' + if os.path.isfile(egglink): + return egglink + + +def dist_location(dist): + """ + Get the site-packages location of this distribution. Generally + this is dist.location, except in the case of develop-installed + packages, where dist.location is the source code location, and we + want to know where the egg-link file is. + + """ + egg_link = egg_link_path(dist) + if egg_link: + return egg_link + return dist.location + + +def get_terminal_size(): + """Returns a tuple (x, y) representing the width(x) and the height(x) + in characters of the terminal window.""" + def ioctl_GWINSZ(fd): + try: + import fcntl + import termios + import struct + cr = struct.unpack( + 'hh', + fcntl.ioctl(fd, termios.TIOCGWINSZ, '1234') + ) + except: + return None + if cr == (0, 0): + return None + return cr + cr = ioctl_GWINSZ(0) or ioctl_GWINSZ(1) or ioctl_GWINSZ(2) + if not cr: + try: + fd = os.open(os.ctermid(), os.O_RDONLY) + cr = ioctl_GWINSZ(fd) + os.close(fd) + except: + pass + if not cr: + cr = (os.environ.get('LINES', 25), os.environ.get('COLUMNS', 80)) + return int(cr[1]), int(cr[0]) + + +def current_umask(): + """Get the current umask which involves having to set it temporarily.""" + mask = os.umask(0) + os.umask(mask) + return mask + + +def unzip_file(filename, location, flatten=True): + """ + Unzip the file (with path `filename`) to the destination `location`. All + files are written based on system defaults and umask (i.e. permissions are + not preserved), except that regular file members with any execute + permissions (user, group, or world) have "chmod +x" applied after being + written. Note that for windows, any execute changes using os.chmod are + no-ops per the python docs. + """ + ensure_dir(location) + zipfp = open(filename, 'rb') + try: + zip = zipfile.ZipFile(zipfp, allowZip64=True) + leading = has_leading_dir(zip.namelist()) and flatten + for info in zip.infolist(): + name = info.filename + data = zip.read(name) + fn = name + if leading: + fn = split_leading_dir(name)[1] + fn = os.path.join(location, fn) + dir = os.path.dirname(fn) + if fn.endswith('/') or fn.endswith('\\'): + # A directory + ensure_dir(fn) + else: + ensure_dir(dir) + fp = open(fn, 'wb') + try: + fp.write(data) + finally: + fp.close() + mode = info.external_attr >> 16 + # if mode and regular file and any execute permissions for + # user/group/world? + if mode and stat.S_ISREG(mode) and mode & 0o111: + # make dest file have execute for user/group/world + # (chmod +x) no-op on windows per python docs + os.chmod(fn, (0o777 - current_umask() | 0o111)) + finally: + zipfp.close() + + +def untar_file(filename, location): + """ + Untar the file (with path `filename`) to the destination `location`. + All files are written based on system defaults and umask (i.e. permissions + are not preserved), except that regular file members with any execute + permissions (user, group, or world) have "chmod +x" applied after being + written. Note that for windows, any execute changes using os.chmod are + no-ops per the python docs. + """ + ensure_dir(location) + if filename.lower().endswith('.gz') or filename.lower().endswith('.tgz'): + mode = 'r:gz' + elif filename.lower().endswith(BZ2_EXTENSIONS): + mode = 'r:bz2' + elif filename.lower().endswith(XZ_EXTENSIONS): + mode = 'r:xz' + elif filename.lower().endswith('.tar'): + mode = 'r' + else: + logger.warning( + 'Cannot determine compression type for file %s', filename, + ) + mode = 'r:*' + tar = tarfile.open(filename, mode) + try: + # note: python<=2.5 doesn't seem to know about pax headers, filter them + leading = has_leading_dir([ + member.name for member in tar.getmembers() + if member.name != 'pax_global_header' + ]) + for member in tar.getmembers(): + fn = member.name + if fn == 'pax_global_header': + continue + if leading: + fn = split_leading_dir(fn)[1] + path = os.path.join(location, fn) + if member.isdir(): + ensure_dir(path) + elif member.issym(): + try: + tar._extract_member(member, path) + except Exception as exc: + # Some corrupt tar files seem to produce this + # (specifically bad symlinks) + logger.warning( + 'In the tar file %s the member %s is invalid: %s', + filename, member.name, exc, + ) + continue + else: + try: + fp = tar.extractfile(member) + except (KeyError, AttributeError) as exc: + # Some corrupt tar files seem to produce this + # (specifically bad symlinks) + logger.warning( + 'In the tar file %s the member %s is invalid: %s', + filename, member.name, exc, + ) + continue + ensure_dir(os.path.dirname(path)) + with open(path, 'wb') as destfp: + shutil.copyfileobj(fp, destfp) + fp.close() + # Update the timestamp (useful for cython compiled files) + tar.utime(member, path) + # member have any execute permissions for user/group/world? + if member.mode & 0o111: + # make dest file have execute for user/group/world + # no-op on windows per python docs + os.chmod(path, (0o777 - current_umask() | 0o111)) + finally: + tar.close() + + +def unpack_file(filename, location, content_type, link): + filename = os.path.realpath(filename) + if (content_type == 'application/zip' or + filename.lower().endswith(ZIP_EXTENSIONS) or + zipfile.is_zipfile(filename)): + unzip_file( + filename, + location, + flatten=not filename.endswith('.whl') + ) + elif (content_type == 'application/x-gzip' or + tarfile.is_tarfile(filename) or + filename.lower().endswith( + TAR_EXTENSIONS + BZ2_EXTENSIONS + XZ_EXTENSIONS)): + untar_file(filename, location) + elif (content_type and content_type.startswith('text/html') and + is_svn_page(file_contents(filename))): + # We don't really care about this + from pip.vcs.subversion import Subversion + Subversion('svn+' + link.url).unpack(location) + else: + # FIXME: handle? + # FIXME: magic signatures? + logger.critical( + 'Cannot unpack file %s (downloaded from %s, content-type: %s); ' + 'cannot detect archive format', + filename, location, content_type, + ) + raise InstallationError( + 'Cannot determine archive format of %s' % location + ) + + +def call_subprocess(cmd, show_stdout=True, cwd=None, + on_returncode='raise', + command_desc=None, + extra_environ=None, spinner=None): + # This function's handling of subprocess output is confusing and I + # previously broke it terribly, so as penance I will write a long comment + # explaining things. + # + # The obvious thing that affects output is the show_stdout= + # kwarg. show_stdout=True means, let the subprocess write directly to our + # stdout. Even though it is nominally the default, it is almost never used + # inside pip (and should not be used in new code without a very good + # reason); as of 2016-02-22 it is only used in a few places inside the VCS + # wrapper code. Ideally we should get rid of it entirely, because it + # creates a lot of complexity here for a rarely used feature. + # + # Most places in pip set show_stdout=False. What this means is: + # - We connect the child stdout to a pipe, which we read. + # - By default, we hide the output but show a spinner -- unless the + # subprocess exits with an error, in which case we show the output. + # - If the --verbose option was passed (= loglevel is DEBUG), then we show + # the output unconditionally. (But in this case we don't want to show + # the output a second time if it turns out that there was an error.) + # + # stderr is always merged with stdout (even if show_stdout=True). + if show_stdout: + stdout = None + else: + stdout = subprocess.PIPE + if command_desc is None: + cmd_parts = [] + for part in cmd: + if ' ' in part or '\n' in part or '"' in part or "'" in part: + part = '"%s"' % part.replace('"', '\\"') + cmd_parts.append(part) + command_desc = ' '.join(cmd_parts) + logger.debug("Running command %s", command_desc) + env = os.environ.copy() + if extra_environ: + env.update(extra_environ) + try: + proc = subprocess.Popen( + cmd, stderr=subprocess.STDOUT, stdin=None, stdout=stdout, + cwd=cwd, env=env) + except Exception as exc: + logger.critical( + "Error %s while executing command %s", exc, command_desc, + ) + raise + if stdout is not None: + all_output = [] + while True: + line = console_to_str(proc.stdout.readline()) + if not line: + break + line = line.rstrip() + all_output.append(line + '\n') + if logger.getEffectiveLevel() <= std_logging.DEBUG: + # Show the line immediately + logger.debug(line) + else: + # Update the spinner + if spinner is not None: + spinner.spin() + proc.wait() + if spinner is not None: + if proc.returncode: + spinner.finish("error") + else: + spinner.finish("done") + if proc.returncode: + if on_returncode == 'raise': + if (logger.getEffectiveLevel() > std_logging.DEBUG and + not show_stdout): + logger.info( + 'Complete output from command %s:', command_desc, + ) + logger.info( + ''.join(all_output) + + '\n----------------------------------------' + ) + raise InstallationError( + 'Command "%s" failed with error code %s in %s' + % (command_desc, proc.returncode, cwd)) + elif on_returncode == 'warn': + logger.warning( + 'Command "%s" had error code %s in %s', + command_desc, proc.returncode, cwd, + ) + elif on_returncode == 'ignore': + pass + else: + raise ValueError('Invalid value: on_returncode=%s' % + repr(on_returncode)) + if not show_stdout: + return ''.join(all_output) + + +def read_text_file(filename): + """Return the contents of *filename*. + + Try to decode the file contents with utf-8, the preferred system encoding + (e.g., cp1252 on some Windows machines), and latin1, in that order. + Decoding a byte string with latin1 will never raise an error. In the worst + case, the returned string will contain some garbage characters. + + """ + with open(filename, 'rb') as fp: + data = fp.read() + + encodings = ['utf-8', locale.getpreferredencoding(False), 'latin1'] + for enc in encodings: + try: + data = data.decode(enc) + except UnicodeDecodeError: + continue + break + + assert type(data) != bytes # Latin1 should have worked. + return data + + +def _make_build_dir(build_dir): + os.makedirs(build_dir) + write_delete_marker_file(build_dir) + + +class FakeFile(object): + """Wrap a list of lines in an object with readline() to make + ConfigParser happy.""" + def __init__(self, lines): + self._gen = (l for l in lines) + + def readline(self): + try: + try: + return next(self._gen) + except NameError: + return self._gen.next() + except StopIteration: + return '' + + def __iter__(self): + return self._gen + + +class StreamWrapper(StringIO): + + @classmethod + def from_stream(cls, orig_stream): + cls.orig_stream = orig_stream + return cls() + + # compileall.compile_dir() needs stdout.encoding to print to stdout + @property + def encoding(self): + return self.orig_stream.encoding + + +@contextlib.contextmanager +def captured_output(stream_name): + """Return a context manager used by captured_stdout/stdin/stderr + that temporarily replaces the sys stream *stream_name* with a StringIO. + + Taken from Lib/support/__init__.py in the CPython repo. + """ + orig_stdout = getattr(sys, stream_name) + setattr(sys, stream_name, StreamWrapper.from_stream(orig_stdout)) + try: + yield getattr(sys, stream_name) + finally: + setattr(sys, stream_name, orig_stdout) + + +def captured_stdout(): + """Capture the output of sys.stdout: + + with captured_stdout() as stdout: + print('hello') + self.assertEqual(stdout.getvalue(), 'hello\n') + + Taken from Lib/support/__init__.py in the CPython repo. + """ + return captured_output('stdout') + + +class cached_property(object): + """A property that is only computed once per instance and then replaces + itself with an ordinary attribute. Deleting the attribute resets the + property. + + Source: https://github.com/bottlepy/bottle/blob/0.11.5/bottle.py#L175 + """ + + def __init__(self, func): + self.__doc__ = getattr(func, '__doc__') + self.func = func + + def __get__(self, obj, cls): + if obj is None: + # We're being accessed from the class itself, not from an object + return self + value = obj.__dict__[self.func.__name__] = self.func(obj) + return value + + +def get_installed_version(dist_name, lookup_dirs=None): + """Get the installed version of dist_name avoiding pkg_resources cache""" + # Create a requirement that we'll look for inside of setuptools. + req = pkg_resources.Requirement.parse(dist_name) + + # We want to avoid having this cached, so we need to construct a new + # working set each time. + if lookup_dirs is None: + working_set = pkg_resources.WorkingSet() + else: + working_set = pkg_resources.WorkingSet(lookup_dirs) + + # Get the installed distribution from our working set + dist = working_set.find(req) + + # Check to see if we got an installed distribution or not, if we did + # we want to return it's version. + return dist.version if dist else None + + +def consume(iterator): + """Consume an iterable at C speed.""" + deque(iterator, maxlen=0) diff --git a/week-0/day-3/my_todo_app/venvironment/lib/python3.6/site-packages/pip/utils/__pycache__/__init__.cpython-36.pyc b/week-0/day-3/my_todo_app/venvironment/lib/python3.6/site-packages/pip/utils/__pycache__/__init__.cpython-36.pyc new file mode 100644 index 0000000000000000000000000000000000000000..8a69889c3654ccb535c609f87be5722ec4bbb5b9 GIT binary patch literal 22743 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 literal 0 HcmV?d00001 diff --git a/week-0/day-3/my_todo_app/venvironment/lib/python3.6/site-packages/pip/utils/__pycache__/appdirs.cpython-36.pyc b/week-0/day-3/my_todo_app/venvironment/lib/python3.6/site-packages/pip/utils/__pycache__/appdirs.cpython-36.pyc new file mode 100644 index 0000000000000000000000000000000000000000..c1316a864bc32f0555b64005f05dba871c229998 GIT binary patch literal 7701 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 literal 0 HcmV?d00001 diff --git a/week-0/day-3/my_todo_app/venvironment/lib/python3.6/site-packages/pip/utils/__pycache__/build.cpython-36.pyc b/week-0/day-3/my_todo_app/venvironment/lib/python3.6/site-packages/pip/utils/__pycache__/build.cpython-36.pyc new file mode 100644 index 0000000000000000000000000000000000000000..ac187fe5d11345c274e97d5eca5dcb27a6bd1cf9 GIT binary patch literal 1315 zcmaJ>O>Yx15VgG@*`z70AQZ%ff`r5#njVng5>*u-aY2y~oK`~CX6>k(?q(O;TlFJ3 zrB{9kf5}%)`~^<TI0>}0sw2;My|aGr&5ZMEbF;Jc>CM;OfRLZ$%J5-*2vZNh2qI`f zN}5oLYgVwtbKXyU@Lmy=VG>gEfe2p&mqY}zweXTiu+Jn8f58bPrgkeG>8faq<at?F z$_!yIRHac;W*D*_9xM)F>epZ-NvI$R6J5cCcS!-*K>%<lT9+gVL?qhaL(vf%;9G(M z=%&5*w#f_eK36g`l{y<{cq|U|sO}w1{SnLz0FEQoo3W)Abk0_L14AZs!i+cZ5&k<} z&^cYj4VG~;!h;zD8wvuz{_x9rr_SrW5yJ1G#9GO5ej2wdtF-m&)EwDJ$+TFmj4bPM zUP#+2j|Dzhf0~xkhC&w7$k?;Kmc>|Y08`Zk^Mj~+;C}b_O<C{%gUU~ikEWTHxaDSJ z@<Q)B9{u{vMx5u<+;EO3>1{B?+onE?f}R(F59#@%>pAPMzsM*?!$6PubGf?@3qdDj z=5hqqTVTD}@Vq^^nD1UZQ}ct^x8b-_Wom4j^Q=g<<{YV@M$Vn8n5s=U%BfnKEqKHr zC2Pg`Q+U!047rWrGUggXWa$`&umE0I7Yf~W7aFjWQzHTHIefH+dwe4ytDp=!2nYJV zcvv39Tfmm<21K>3tdQxnsbk;iw4OZ8Y;ckmjkL^+ZqY4Iu}&}Gv^9~Nm08AI(~UWD zx_c`gYTHoY!xrw|F0<gdCQ?|%JMy7+;QdRO+6kr596SHzVy%h|hjFAHK&<U>URI(h zpt82h`L`x5R&~a9Q%FlaMDqj<LR=A#O|7u<3L)Dtbq7quI=#rlpWBbyh%#<Wqp*Ka zvTaqmkC#bdy%m0G+i(f`?gBWaHmpVy_#<#f+=gkR!IJp_7E?!Hx-6m*>w13xzzraL literal 0 HcmV?d00001 diff --git a/week-0/day-3/my_todo_app/venvironment/lib/python3.6/site-packages/pip/utils/__pycache__/deprecation.cpython-36.pyc b/week-0/day-3/my_todo_app/venvironment/lib/python3.6/site-packages/pip/utils/__pycache__/deprecation.cpython-36.pyc new file mode 100644 index 0000000000000000000000000000000000000000..47491e7cfc572af374e74e2733851db34b3ed27f GIT binary patch literal 1728 zcmbVM-HzKt6rS-ow&Nt55VRF45;9Ve$VGQ4AdnD3t-2MeghD74l_DX_$;@V*I(9lU zZrPQ4mA!-q;SG3}x#fyi;EHeTh8od}fUP-mz8U-cpYzFJ5Dvfl{Kww{LVhQ$rvv^j zmiifllR4p(I~m<LbB9`<Wo*vs-JQE%6YlcPHQ^o6*|E6?>~SC17d~(R9Plo1S9ri( z;E?x#d%_dJ&Yg!i>GJ_j2K5&`&XPVK^CLdIrt<+G@wcwY{D`yf$>i;;X?QQ%6uitt zq%RU3rJHRgHX_$5(nXP_`3id^@??Q8M4~RE7m3VqtfFL5lse*KE5$O=X_2dw@DF%M zCe#d*g(|XAix>h6si#YOv41F-yI86ZBFLN~C=RDE$T7#WbbIz%=95O-bizy!$9b|5 zacsgkZfpkMkK<=$k~KHK66r%^P5%7!RByJY+jM(-QKlKcoj!khkuR07NA)UonyJ&4 z11H-{$?$(@ZF4{ZTH}L__h%yK2oB7Zt~JD_UV4`NZCAsgMu_Z!9AWKsS$wdr<40ms zJQw_7j)>j)=yjkD(QG{&w=`S)KQ-U^Z<>41bfcx&;)6BcoL%aRBLDcaH&)0Yj@yd6 z*-~%u(k940HYqkw_p#JZAeGC>)2_Uw(YDyNCKah@<y5S4tIp1&B%f(oQSIy;xzKFw za=N20J?>O+@}*zjb#V7X<*mKS-%(1QY4Co-=i`4%<OF@drdK1B=}D_N)z$Fq!R*n4 z`}ZC{{C4_9^nscL<~ZKBW2`QU7q5T`Q>DtqGE0=I3)uKsv09-pO?M^qH{gY=tIzoR zUphD`Bt-ffp;WRGCO}t<RUt1;aGquu0UKdFOaze^#<eHLwFqamJk!G-zxugV?l!3C z(w2F*Y<S-RAvD12&@l^H*a`fQ_MN`tQ28$I{!tXRkLs*^2u71N<%l_VIQxZBq8YLi z*etExgz1hZG4h5ex>MtGah{Z!evF~yCEG3fbK;p`A2rig^~8fa8UbLCE(ai{*Rr=Z zr{z)I%C%cJ(p>2z%l27_n^2rVg0deFXXFOdqw;<56K6V|42>VhyjV6<?7Y;a#6**J z*vO$J?|~TqNi+7E<axznEta}Yn6#ZLZPQ3wy0x*5eOARAjSRkQhUHh*J7s&%MVt|N OHgfGdc1OO;!ssugaeX`h literal 0 HcmV?d00001 diff --git a/week-0/day-3/my_todo_app/venvironment/lib/python3.6/site-packages/pip/utils/__pycache__/encoding.cpython-36.pyc b/week-0/day-3/my_todo_app/venvironment/lib/python3.6/site-packages/pip/utils/__pycache__/encoding.cpython-36.pyc new file mode 100644 index 0000000000000000000000000000000000000000..758cbef656a16622e754edcd4cc74ed8a5fd708d GIT binary patch literal 1018 zcmZuwL2uJA6t<HzP19~efY7#6BrYwe9c!gAAwbi%79oue7%-_@Ri&}prgf8GyKJ4h zQ{lo-;2-c?_y@jn+L;?CUedMd0Y`q{_nx1hzh^6zl@)vK-P7hT9iiW7X;{GbV2VB% zf(T})F+<$IiLW&@iuyXyIx!kVPcTJ{1Wl4kFip$^Es{<!L#&S0O*d?+^|K^1#f==X zN%kvhtPp&H3b`9N57m`1lAT?Z0=vC)WhGE-(>Y@_S*nziK&3oi0>-F#02RED_(AvV z*^B16c$7aYo?n!jj|(1-tHUsE=K-Mj0p{|FM2D!EKi97DwKhS0Ji$}U%?XlP%n1Ib zZ9uydZ3;3!o2TgV6J!|#e1eG{ufqPlYki^<gQQ}gm;;U1WU6mYbf~pp{qz(OBd$i$ z)7feBy0udTRds3g;i9H+E?i0G>ia>DdIQIG+G9zDBP563oKDCgw151@k)h*-oKsJ- zu|uc?;>aF#XfV45+jd~oT*lfi)PZysdM=}-E|n3d9SVENJUI_}f)*U+52zDHG{_g6 zFmT?EWiJdW^*`|y+BX_l9@CrHB*BL&<qFUDYXw^wAnQcgLb_av3t#q>&S;=aLO~Hc zo`{$)Rkm6`I6iz`f7N<lRi>aW_j=0g@^BOhWzICJ`~MSJFqA=D=_<V)4wW_6t_<b} z^e5u$AnNb-mK;V~kslS?BcG9?|7Fk%JVE17GDp&9Vr#y+6pdBZ9m%jYQ+W?+h&y1A zv5IZHsjcHpypC5f--K9URhe-wp5S-ERT`(tg05R1Kh$<r=9X>msN90K_N&X@QFW14 zDK8c(<>fT+j;h>_4@i6AF!CAYYv3gkk}j9bMx16nABJSa=*#$Bl3&5X@EM7X8GJe2 G*8c(gDG}QM literal 0 HcmV?d00001 diff --git a/week-0/day-3/my_todo_app/venvironment/lib/python3.6/site-packages/pip/utils/__pycache__/filesystem.cpython-36.pyc b/week-0/day-3/my_todo_app/venvironment/lib/python3.6/site-packages/pip/utils/__pycache__/filesystem.cpython-36.pyc new file mode 100644 index 0000000000000000000000000000000000000000..7188e50e58f8eb1eacc7bd96628a0ac0da3ece31 GIT binary patch literal 583 zcmYjNy>8nu5WXX2OH~!eL#94KHN+k=bSa7gMY{w@5Ga5H1FfNoY%S}zB$dX1yhIuL zDt#rco%#x$a#T8m#QpH@<K1_6c61aTU%mM}aDYGX>@f1*ljzr^1PCl){bX^ptYj5m za|FSK_W)~8U;^>vFQMTgMjL&XX49r-yXkU~p$pTYF7T4%1Bw1c%78(E1Jg6X5~_c| zyS9fO3$E@B?%0m^Frcc*_Xg@!F!g00nTd-Y*b3?s56rX()ir{<!b{)=dghP`)!zBN z)4@QmA19;Fb}!s-M!gOcTTxfX{KEP~SrXf8<>-EjL+fu-of@MoYqa&;G}bTWU9OE* zZWQIVWc|zJqf(8s(=^MZCgf^!d2W4?t2(V@%+=Jvf>z1fyy-M~|M&76)QnR9&X%TX zmu=pje(my7oaVR1w$8M4p;0=MmwNdvFQwjVBdbNbxASZ(v*KyT&CgmYpGxUhq=1L$ zF%LtGSi~7dIKwFhY|hl2vhhSs$XLJ8i*crq+AOlBqQ^MVh#HwaQ^)R0@V071SIT#8 ML)wiMP~C_>0xUs_ga7~l literal 0 HcmV?d00001 diff --git a/week-0/day-3/my_todo_app/venvironment/lib/python3.6/site-packages/pip/utils/__pycache__/glibc.cpython-36.pyc b/week-0/day-3/my_todo_app/venvironment/lib/python3.6/site-packages/pip/utils/__pycache__/glibc.cpython-36.pyc new file mode 100644 index 0000000000000000000000000000000000000000..3904e10d0b83982dc66268c7b223ec1d69b924f2 GIT binary patch literal 1366 zcmZ8hTW=gS6t+E=olKgfEg?dHV1QQYsLck^2UJuFs5C+%T9xLZXrUU-+Rm<bcP`kT zl!VFC@@M!<e&vb3z!T?qgPO*pbJ1t}`13hF^Kfe`-TCRuSAT30@;A9M82I0UnCGAb z5p+o^I;IqTwq#@GZ7>eJ4acFk(Kr%;2>&GGSVSTQI}ihrfK9}PNWpFhc1-fke;_K! zsoN<hrdf7Y7OH9+ZATm@a0DPgiaZ7JBrKUzL09yGoTWXPvkUr?)Vm?E!6Mc7D8WzA zWAZbBm0?edsHZD(!ED?!J6JJu)U$aa7(`$_k_gTpy^yxkwaKPSHR0K*)J8RRW~^5A z^g-6>Y}C{;Qzu#7*sL>vu9pr+E-DRID&KH1w`Z+1E`0j^(UIGo)?G1`w!nzRWkk3A zorRbaxaTvi8|@Na@L8#g)(x~YxZkA;!W&!GT)F@lxL8Qu2$=`&R;wE>jVbD~lBO-W z)G=hmZC-{iVEJD}?*R7i@W58>L95#RNvD=#U!5*yH8&C=FP&9ObKoyLY|nu2RiYRP zF1dj@-vvbmDP=UJ+d&*8G-fGHnZ5-$$MWC^LD2VQ`T?AEnR>Ef7eODGJC@A@!FsYs zY`9`jqTra=s1N3`2v<<fo-SB(c!@+FVT%aL6OYdC-23MF<EorD`pGY!?>~BVKmT>; zAyvPD&cA;4dn>t>;#wJBD?7`+$an)UtCqDjnGZFraQB03+SsqMyXMeE9tMMWK5$G+ z#4Mk=<aMcQNC;FHJ-7X$tF5Z!%Qfr*Ra+NLb<?$ZsJG$zZd=RWI;Ev3)?v3Gtg5=I z@ZlY;e4W<nCT@6#&m><IZ`I*5m@pWQ3~tbn#!!Ng-lqB^KsdH04oo|y-=`jDEW!8Q zLu)P)eH(kh(jHO|eE><%+2}A|SI@`E1N{MP(jTJ2v#t|+cUGRt0@GJoHCf6v#fPxc zB%lb;N`RLB7<`TZ4hn(<J*iK@@uWx({|z9uXX%`+$T2i(Pfnl-1^7S=a){3mDB<IB zNxLlVNuw*5{Qo-PU$OO8imtKMc-D^~Z@969c{ER5S`;T8w7M(`jqEf&ZjH&)pP<@9 rg-83$_#64HR}R7M(!OBH<EjzeQa-`E8ia1J1X2NCki4JVOy2ts>@`r> literal 0 HcmV?d00001 diff --git a/week-0/day-3/my_todo_app/venvironment/lib/python3.6/site-packages/pip/utils/__pycache__/hashes.cpython-36.pyc b/week-0/day-3/my_todo_app/venvironment/lib/python3.6/site-packages/pip/utils/__pycache__/hashes.cpython-36.pyc new file mode 100644 index 0000000000000000000000000000000000000000..61d9f55e7d6ab8f29d2ed7c64b4c2c234b988132 GIT binary patch literal 3242 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 Fe*qBr6np>x literal 0 HcmV?d00001 diff --git a/week-0/day-3/my_todo_app/venvironment/lib/python3.6/site-packages/pip/utils/__pycache__/logging.cpython-36.pyc b/week-0/day-3/my_todo_app/venvironment/lib/python3.6/site-packages/pip/utils/__pycache__/logging.cpython-36.pyc new file mode 100644 index 0000000000000000000000000000000000000000..c8c5c1efa956cd8897c27f78f7040967ad1a8de7 GIT binary patch literal 3898 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 literal 0 HcmV?d00001 diff --git a/week-0/day-3/my_todo_app/venvironment/lib/python3.6/site-packages/pip/utils/__pycache__/outdated.cpython-36.pyc b/week-0/day-3/my_todo_app/venvironment/lib/python3.6/site-packages/pip/utils/__pycache__/outdated.cpython-36.pyc new file mode 100644 index 0000000000000000000000000000000000000000..09514e3b2a84ac88de0d10e8b6257c7d9bd123b9 GIT binary patch literal 4223 zcmb7HTXWmS6~+P}2|^S_(XuV&id+<ztwpy@JDqXeOftSCZX7v@)HvoOgF@Vu1QG<8 z-KAt{sF_ZghrW1{zUK$D|DeC3kA2ua_DOx{5AaL-ouwqoiPLF;*@NB1-f+(O&iU}> z{Cv3Z(Jwx~f6;ON;hejC)Za!?e}mu-XPGl#9mc5cW^Tu|Pp{+Ir{D4Iv(zcuXQflY z)60TEwNtfo{45;Ib!xU=%H{|4PJOV@S+MPL))*{y7Hz$fH3t_u7Y0k6CEE_Ni-Sv@ zOM}au%eGz3mIo`H71YDdbHeXEFJ73i&WrCle2&+?ba+j?H1Rqwqdm{-XxD8!;tRa- zrPFzZFY+dyuX1<8X<azRw>d3l7LqMhWFsx&bTBNWUPoV$72W=JnhDe^dqS$T$Xl+N z*M&~9Scz_tb7d+I?yldu|6l`y{0|R4yo(X_-)!9eIKKJL&G&A{x9)yymgOkV(|ji$ z<y^>kFO_<fWFp_g*ihtZBt^_qX)f*v9jCd%@|ocA>6Xkiy1Sy=kB5ogjf?$U$iwF9 z!?o4H+A7~%eee3}2iI3OI$ipd)5}HWZ4~tagm5~HJ1`jIE<WAk9{2I|c?l{go8?c= z4zwY%?VGgMhEBBTGEAn6R$D;1iK0G(&`yu_T<!II&L-~IiAx7>=<?X<l_u<~<`L7C zUNB}8hBws*aF~yrkDX7Q2TuNy@90p^ZM*$Ye!?8OQ-?-9baMAojKqoD^~2^c9j+-H z#(sFar=a<oaSLU9QiAb&MVcE=9Vk;CO0k_jGIgj;qm~J)C*v1Gkz*jH8b2!%Zc289 zsocGPTgpP3@RKAP30sFDeA>=b&sO=fBT08pesWC@hS%skTcb4NYw2EpH}5JzUAByL znyG8WNOSDZ+rtAB#IRzj<M=t!R}I2pP0wXD_8e=n!&kmf-|f?RU61DAA`H%>SjAsQ zMMGIVMoRzc^&?NaJ#Xyxd=0gaVcc)rF&VeQ%a45qb)PEUsx??QY@a+XOO%eSVohy$ zFicM!ZSx7c`h;D_kg5U%;=X`-LnVfZOmrbt%ayO<2=X<ER#`4l{Q?O@4#)U>G#Hvd zX}PV_fiTUD+xPAO0XN@|Z@sg5JHGS5X3LkP5%~&@uXRUKid@GuT0T$xr0=PCkw*9` z*%Pm$rs@!mTW7u-u(InimmR+Ny-K86>#Y)5Ax{P(j!hWHgMyFX8L_Fw@fQH!^o@K8 z>&hRJnC)$AbO1@3UqMl1hJXd3?dhU%cKts%TY5Juwvz0B!PpiyIK|ir!u*4)x&-6< zK-e-6R_;{@VLIqlR|rAj%-q0P1f0$3nx5bGfV9ufAuW6wY4vZRtS(8}lF%+2BmxrF z%+}y!Yk7&pB8eu6%OsXbkhV<lzBo8R)zse4Fs{}7n;3lpkA{Uu#Fk*$XQ}DC&?sRt zEo`Cj7gV&P5t9H2tD^~1m&omP>FHkPSj|oKc!(Cw38r)4xz!U5Hvq1%H#hbs?8u*K zHuqEK$Oq)0SqnJ^$oab7Te#s&=W-X&T(+|tWB=K3oUL~POdu=57g%7(mr>h1hcs6b z2IMNlQwUs?6j^5GG8N<y^6RO!LVD>znBX4r*c}8$Qx=a>rPUO=GfQ5fp+6uov*{aX zwn{U+$`-x1mbB)c;l)CQF!U=FMF4l)CiDHKS7&v^yi2a{1+0!%$PQPYY1|XY${%5_ zyh>t?#D7O;8$*7IGD9czJcUlmU)Dd!VYM@HWKFXPd4)^TYM-sQJXyti3vNkkJS!NO zWy&GQ`X@OlK1&pzVumV1IIN85B+0AKGACJK4#l40I?kg(q~KFFT=xUHL^Onakg$B@ za`(tP_?Px3@G|Z9eB@K-sKmXo-z)daa*z9`HT$+gE$*#2I+(aeWq4p|TwZo2j9>0M za?if?SDYgce&}MizrwqbeS0+?@M_9<_}D$Fj4QqQ3G(oiKIyt%Ku===`m}<T=xn_H z*u6!oF59*I-s0FBmnQBMJr*Ou*c}Ibr}!tZ(HsZ8X5ago$-2JqwIiSK#!)o~Q#h*X zrQSuph_T+dI<YA#e;twPQa{A#pG~6_#$4u2et|DN#ttXZipbi^;omJciM9(FC3!R& zQpU9{<l=T1M!4>!gH%U)7yVLvF%o(AAS$*ao9<Mki>S!EA{q)A?F-RwM;pW%qEtl+ zDNgW6q?jwCG`FkKI!RZjdm@^#wg}s&x!q%=guJ4nr}<ul#EF%P?QJ_|%1`WaI0&tX z(?+T*)1i)t&9v=1<Dq+f76*<iaGPU_s>e4VO!=K|R}A%GBN+~}w3}$K(QB3%ft~J( z1k6&MxgDh?N?IEzmICe|MSQ-5v;p=&uGVvvKW2Y)zwkGv?%wju;xOs<lN}<eC)CrF zko%P|^QnsQ8B$~-Q33?PZU5M?y>mFBAn+u-ks-Wvi^1@%-_yo)g0kcKhpYIs(>15e zqkRM9I?2>qsGQC*!N~>+T-t*Yj|snr^TPwZTjbH&fE0K5hlj-|N~DNJ3MaL?JUMN& zs;)-6#lAp0n)Q)!lf5L(lC4a%Lz=F3i&4fS5O|eBZ}6lYnQ&TeFHNk8uB<B97#Pp8 zXl-r!-Wu)-W(@{O&fAAS--M@#Xg|UFc_fHaPW_A)B0FbrEv3(n0_)=gHtEkoJnDiX zZWqUY!WX8$MF38JcfINy{~K3pSyIH1MEB$`Nl-*F0Xe&6R^^fI=Ec5EyOwYbErqfH zoU)?v@E;+`eZcRacyf|>Bs0^HNvcE)_}J(*0(mB)CpZW)j9_`3WkaU61v{TwOj2+& z<*eA*5z<ul6G=Zarh5AkIV9ZBl(^U$?X*HuQ9{vgl3D!DZ;Y8c=LFMCXA_CdD-rGB zOQD9QF2$h0f7q!DR%lvxz`x~e@YZkpRE$N`uOXZY$QsCEh~gq7hwc(WGf~F|3z3U_ z+%-1<nM8i_%3jT--nvKOo8Gxz-D}X3$%k02^%^nA?UAPcv{(|h<Q)>0_f|+Rq>oCW z+63omMy5<^Ke>%B$$24dF78~!sZV<_`UG#1kYWvPLK;92O0*<nPL*$a!C^(FriPuT zVFV%4znYRXN@Au;FYGUgq}*d&$t<09w&@26zfD>Uru2cl##G@j_pEuRDfm8hmW!>P z=<0K6k^InV<eV+e*s=+3OiA`zgjz+M1v-Y-?d{f}@dnsH19#2yz0hl{G~Ng*{{b=A B7j6Im literal 0 HcmV?d00001 diff --git a/week-0/day-3/my_todo_app/venvironment/lib/python3.6/site-packages/pip/utils/__pycache__/packaging.cpython-36.pyc b/week-0/day-3/my_todo_app/venvironment/lib/python3.6/site-packages/pip/utils/__pycache__/packaging.cpython-36.pyc new file mode 100644 index 0000000000000000000000000000000000000000..5215cf3c1a3ff7ae49890547b96043dd170d1a29 GIT binary patch literal 1986 zcma)7&2A$_5T2eNdpsG(Nk~@g!eInND<AAgu+rv$Rz$mG6#*fvv#_#+CX<=AJ>&VK zyC;yy*#m}`;KY?z>MN&x1x{4;*j8dLc-7T4)wN$&Ro7Sftlf4x-#z`&vo-B+?aogJ z{R>$9Er>{qNUCLINC@hBs%OT~P`Z(tLlbO9Y7H&e&9sp<hfQ^6fo>0Nr8m-6<_sOB zH`9&G9lAuLX40mcb298icGUV!8*W8Tv;q5e<VJ1ScOqk;bvNHZ3|g1SPH@SKv=Y>h zv$9|UOwKW-(OJMaWvBSbOB%+bm@*Du%`4dBA_uiyPRBl@yr@`6@ywyWgtQcJ%0q(q z@H1dFVLgY%pMjV`;!~Tskv`CbmXMh?C$~iCi4hrzDJ;<t&BTsKWd5!{)aLq}z_~ut zXJp!dz^&jVKsz4%o=<2v_2Q8yCe$mh#iYo+MRZ=Adljc%7Km`7&Mz4Ksfr<5zxKTF zR%!Je1^0@Iisjt9IA;~TSmG`Li_!9myU>&?@C9~8bJ4$#bsVJpe}F{=AmxRq1FlgO z&^_cDI*2(q1i5#TUj=C#4VKS?A^$hcNpMBcJFdOGQNf@pb(p8;lJwu<6Lnk6giX3D zv;h^&LX%ZuD@Zdb;#?Y8P)dUf2I87acTpZc&PPSpke#(E%ZF<Qe^qt4SwDoofcQ&e zyKvn<pB{*;JSgL`cUi@0)QhjClRV@UO=?vlPWeF@gwtRg=i`2PE%!of1?a_lPrMCq z+yS9Ewr&!~@CbVVU#s549>wHUZytgopgRRg^tsNwnFbvRy{9x2wE>)h4LXuN0nJ2h z0OW<PG)|@c&6np#FOJTSZtSzKUiMB-kH76&(usMTa}nerWevDN?!Jh*IDu;6&f-hR zrpTo`3Amq85k!Fqq&uc!^#!~#BlN}U)M5{{4?yh0sxu@manwI$UuB3_Vi{D1e}aM; zD!!4qhOA0}S92Iapc!B>X23zr_13&T6xPg~6Mi8YNi)(RV|!)-M_a-X8^TT6IGUCm z9T^V*_gC_RmLHm$*i1T8hy6jcTZ?EnkHl889a%NP%&L8HY+?0ot+&=2E!W@Fm28~e zbY3mqv3I6Oee-0Wd&{@=YMb|XpFj4XdNu#5Jcm|Tp2ghT=M2WL##$h5o}Q^@p<wl( z(0AFec9jPVX4mM~1JT`4)nwQs(j385lvbD)Kn4R|Nc9rK*(TqAo%5>1@d<-d#r%Ce zC8b-kBB7!1^B|+l#gN)4Hc@m?Y@txx+gc~IY^23_Oqp!{9576<+h8ApyR=uWvVl?g zilM9?$jC%LibKKh;U%GKjUyk`WWk<VXG{<N2mc6!Mr_i6ezIZdAWe|CKGAp7zC~CU zyt?m6$M;7S3{L9%4FAAMmu5kn_Un-9(ls#+2wx>U+yf%_f%SP*FmPMYSe2k2I2(5y zYSI{BsVm)r!hc;C#r9QE;ogto-ug9=6e_YiNh{tUWu*OiRzy`wpCR!%jsjPAb(`3_ N3;aRdG3;I2{ulO0AIks$ literal 0 HcmV?d00001 diff --git a/week-0/day-3/my_todo_app/venvironment/lib/python3.6/site-packages/pip/utils/__pycache__/setuptools_build.cpython-36.pyc b/week-0/day-3/my_todo_app/venvironment/lib/python3.6/site-packages/pip/utils/__pycache__/setuptools_build.cpython-36.pyc new file mode 100644 index 0000000000000000000000000000000000000000..b0dcdacb230ef85e072695df49d6ad84a6daa129 GIT binary patch literal 327 zcmYjN!Ait15KY(1A}o9JoQpJpZhP<`QY&5r1$C9K7g-54nQGXy2}vrtKP3LrUi}MC zriG#d?>%PbF~iK!Y_>nYKYluh5c)>{BIM{iz)b@Q^oT@MB0AZA%EoBxu>;>3ueEXs z_Id-Y+(OP+Efp|U9NN4tUcgu0TQas29BTt@oZwz48QnDJT0l{!7Aiq#5Thy%BwpKf z?~Vi0yiU2&4hYTR9XR2-F=1Cw0SO*Q1#{nxDZQo9ZeCuj9`07l<#ox*%d49&WGCU8 yfqqUh-<Zruvv}^L5)1jZd2P9azBHioQn~E!PB!>b^Rb(rHd=HF&i48T1)yJ~Lt=UW literal 0 HcmV?d00001 diff --git a/week-0/day-3/my_todo_app/venvironment/lib/python3.6/site-packages/pip/utils/__pycache__/ui.cpython-36.pyc b/week-0/day-3/my_todo_app/venvironment/lib/python3.6/site-packages/pip/utils/__pycache__/ui.cpython-36.pyc new file mode 100644 index 0000000000000000000000000000000000000000..f3cae2987697b581b81f628a51c02f37bc46b0b5 GIT binary patch literal 9583 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 literal 0 HcmV?d00001 diff --git a/week-0/day-3/my_todo_app/venvironment/lib/python3.6/site-packages/pip/utils/appdirs.py b/week-0/day-3/my_todo_app/venvironment/lib/python3.6/site-packages/pip/utils/appdirs.py new file mode 100644 index 00000000..9b828014 --- /dev/null +++ b/week-0/day-3/my_todo_app/venvironment/lib/python3.6/site-packages/pip/utils/appdirs.py @@ -0,0 +1,248 @@ +""" +This code was taken from https://github.com/ActiveState/appdirs and modified +to suit our purposes. +""" +from __future__ import absolute_import + +import os +import sys + +from pip.compat import WINDOWS, expanduser +from pip._vendor.six import PY2, text_type + + +def user_cache_dir(appname): + r""" + Return full path to the user-specific cache dir for this application. + + "appname" is the name of application. + + Typical user cache directories are: + macOS: ~/Library/Caches/<AppName> + Unix: ~/.cache/<AppName> (XDG default) + Windows: C:\Users\<username>\AppData\Local\<AppName>\Cache + + On Windows the only suggestion in the MSDN docs is that local settings go + in the `CSIDL_LOCAL_APPDATA` directory. This is identical to the + non-roaming app data dir (the default returned by `user_data_dir`). Apps + typically put cache data somewhere *under* the given dir here. Some + examples: + ...\Mozilla\Firefox\Profiles\<ProfileName>\Cache + ...\Acme\SuperApp\Cache\1.0 + + OPINION: This function appends "Cache" to the `CSIDL_LOCAL_APPDATA` value. + """ + if WINDOWS: + # Get the base path + path = os.path.normpath(_get_win_folder("CSIDL_LOCAL_APPDATA")) + + # When using Python 2, return paths as bytes on Windows like we do on + # other operating systems. See helper function docs for more details. + if PY2 and isinstance(path, text_type): + path = _win_path_to_bytes(path) + + # Add our app name and Cache directory to it + path = os.path.join(path, appname, "Cache") + elif sys.platform == "darwin": + # Get the base path + path = expanduser("~/Library/Caches") + + # Add our app name to it + path = os.path.join(path, appname) + else: + # Get the base path + path = os.getenv("XDG_CACHE_HOME", expanduser("~/.cache")) + + # Add our app name to it + path = os.path.join(path, appname) + + return path + + +def user_data_dir(appname, roaming=False): + """ + Return full path to the user-specific data dir for this application. + + "appname" is the name of application. + If None, just the system directory is returned. + "roaming" (boolean, default False) can be set True to use the Windows + roaming appdata directory. That means that for users on a Windows + network setup for roaming profiles, this user data will be + sync'd on login. See + <http://technet.microsoft.com/en-us/library/cc766489(WS.10).aspx> + for a discussion of issues. + + Typical user data directories are: + macOS: ~/Library/Application Support/<AppName> + Unix: ~/.local/share/<AppName> # or in + $XDG_DATA_HOME, if defined + Win XP (not roaming): C:\Documents and Settings\<username>\ ... + ...Application Data\<AppName> + Win XP (roaming): C:\Documents and Settings\<username>\Local ... + ...Settings\Application Data\<AppName> + Win 7 (not roaming): C:\\Users\<username>\AppData\Local\<AppName> + Win 7 (roaming): C:\\Users\<username>\AppData\Roaming\<AppName> + + For Unix, we follow the XDG spec and support $XDG_DATA_HOME. + That means, by default "~/.local/share/<AppName>". + """ + if WINDOWS: + const = roaming and "CSIDL_APPDATA" or "CSIDL_LOCAL_APPDATA" + path = os.path.join(os.path.normpath(_get_win_folder(const)), appname) + elif sys.platform == "darwin": + path = os.path.join( + expanduser('~/Library/Application Support/'), + appname, + ) + else: + path = os.path.join( + os.getenv('XDG_DATA_HOME', expanduser("~/.local/share")), + appname, + ) + + return path + + +def user_config_dir(appname, roaming=True): + """Return full path to the user-specific config dir for this application. + + "appname" is the name of application. + If None, just the system directory is returned. + "roaming" (boolean, default True) can be set False to not use the + Windows roaming appdata directory. That means that for users on a + Windows network setup for roaming profiles, this user data will be + sync'd on login. See + <http://technet.microsoft.com/en-us/library/cc766489(WS.10).aspx> + for a discussion of issues. + + Typical user data directories are: + macOS: same as user_data_dir + Unix: ~/.config/<AppName> + Win *: same as user_data_dir + + For Unix, we follow the XDG spec and support $XDG_CONFIG_HOME. + That means, by default "~/.config/<AppName>". + """ + if WINDOWS: + path = user_data_dir(appname, roaming=roaming) + elif sys.platform == "darwin": + path = user_data_dir(appname) + else: + path = os.getenv('XDG_CONFIG_HOME', expanduser("~/.config")) + path = os.path.join(path, appname) + + return path + + +# for the discussion regarding site_config_dirs locations +# see <https://github.com/pypa/pip/issues/1733> +def site_config_dirs(appname): + """Return a list of potential user-shared config dirs for this application. + + "appname" is the name of application. + + Typical user config directories are: + macOS: /Library/Application Support/<AppName>/ + Unix: /etc or $XDG_CONFIG_DIRS[i]/<AppName>/ for each value in + $XDG_CONFIG_DIRS + Win XP: C:\Documents and Settings\All Users\Application ... + ...Data\<AppName>\ + Vista: (Fail! "C:\ProgramData" is a hidden *system* directory + on Vista.) + Win 7: Hidden, but writeable on Win 7: + C:\ProgramData\<AppName>\ + """ + if WINDOWS: + path = os.path.normpath(_get_win_folder("CSIDL_COMMON_APPDATA")) + pathlist = [os.path.join(path, appname)] + elif sys.platform == 'darwin': + pathlist = [os.path.join('/Library/Application Support', appname)] + else: + # try looking in $XDG_CONFIG_DIRS + xdg_config_dirs = os.getenv('XDG_CONFIG_DIRS', '/etc/xdg') + if xdg_config_dirs: + pathlist = [ + os.path.join(expanduser(x), appname) + for x in xdg_config_dirs.split(os.pathsep) + ] + else: + pathlist = [] + + # always look in /etc directly as well + pathlist.append('/etc') + + return pathlist + + +# -- Windows support functions -- + +def _get_win_folder_from_registry(csidl_name): + """ + This is a fallback technique at best. I'm not sure if using the + registry for this guarantees us the correct answer for all CSIDL_* + names. + """ + import _winreg + + shell_folder_name = { + "CSIDL_APPDATA": "AppData", + "CSIDL_COMMON_APPDATA": "Common AppData", + "CSIDL_LOCAL_APPDATA": "Local AppData", + }[csidl_name] + + key = _winreg.OpenKey( + _winreg.HKEY_CURRENT_USER, + r"Software\Microsoft\Windows\CurrentVersion\Explorer\Shell Folders" + ) + directory, _type = _winreg.QueryValueEx(key, shell_folder_name) + return directory + + +def _get_win_folder_with_ctypes(csidl_name): + csidl_const = { + "CSIDL_APPDATA": 26, + "CSIDL_COMMON_APPDATA": 35, + "CSIDL_LOCAL_APPDATA": 28, + }[csidl_name] + + buf = ctypes.create_unicode_buffer(1024) + ctypes.windll.shell32.SHGetFolderPathW(None, csidl_const, None, 0, buf) + + # Downgrade to short path name if have highbit chars. See + # <http://bugs.activestate.com/show_bug.cgi?id=85099>. + has_high_char = False + for c in buf: + if ord(c) > 255: + has_high_char = True + break + if has_high_char: + buf2 = ctypes.create_unicode_buffer(1024) + if ctypes.windll.kernel32.GetShortPathNameW(buf.value, buf2, 1024): + buf = buf2 + + return buf.value + +if WINDOWS: + try: + import ctypes + _get_win_folder = _get_win_folder_with_ctypes + except ImportError: + _get_win_folder = _get_win_folder_from_registry + + +def _win_path_to_bytes(path): + """Encode Windows paths to bytes. Only used on Python 2. + + Motivation is to be consistent with other operating systems where paths + are also returned as bytes. This avoids problems mixing bytes and Unicode + elsewhere in the codebase. For more details and discussion see + <https://github.com/pypa/pip/issues/3463>. + + If encoding using ASCII and MBCS fails, return the original Unicode path. + """ + for encoding in ('ASCII', 'MBCS'): + try: + return path.encode(encoding) + except (UnicodeEncodeError, LookupError): + pass + return path diff --git a/week-0/day-3/my_todo_app/venvironment/lib/python3.6/site-packages/pip/utils/build.py b/week-0/day-3/my_todo_app/venvironment/lib/python3.6/site-packages/pip/utils/build.py new file mode 100644 index 00000000..fc65cfab --- /dev/null +++ b/week-0/day-3/my_todo_app/venvironment/lib/python3.6/site-packages/pip/utils/build.py @@ -0,0 +1,42 @@ +from __future__ import absolute_import + +import os.path +import tempfile + +from pip.utils import rmtree + + +class BuildDirectory(object): + + def __init__(self, name=None, delete=None): + # If we were not given an explicit directory, and we were not given an + # explicit delete option, then we'll default to deleting. + if name is None and delete is None: + delete = True + + if name is None: + # We realpath here because some systems have their default tmpdir + # symlinked to another directory. This tends to confuse build + # scripts, so we canonicalize the path by traversing potential + # symlinks here. + name = os.path.realpath(tempfile.mkdtemp(prefix="pip-build-")) + # If we were not given an explicit directory, and we were not given + # an explicit delete option, then we'll default to deleting. + if delete is None: + delete = True + + self.name = name + self.delete = delete + + def __repr__(self): + return "<{} {!r}>".format(self.__class__.__name__, self.name) + + def __enter__(self): + return self.name + + def __exit__(self, exc, value, tb): + self.cleanup() + + def cleanup(self): + if self.delete: + rmtree(self.name) diff --git a/week-0/day-3/my_todo_app/venvironment/lib/python3.6/site-packages/pip/utils/deprecation.py b/week-0/day-3/my_todo_app/venvironment/lib/python3.6/site-packages/pip/utils/deprecation.py new file mode 100644 index 00000000..c3f799e6 --- /dev/null +++ b/week-0/day-3/my_todo_app/venvironment/lib/python3.6/site-packages/pip/utils/deprecation.py @@ -0,0 +1,76 @@ +""" +A module that implements tooling to enable easy warnings about deprecations. +""" +from __future__ import absolute_import + +import logging +import warnings + + +class PipDeprecationWarning(Warning): + pass + + +class Pending(object): + pass + + +class RemovedInPip10Warning(PipDeprecationWarning): + pass + + +class RemovedInPip11Warning(PipDeprecationWarning, Pending): + pass + + +class Python26DeprecationWarning(PipDeprecationWarning): + pass + + +# Warnings <-> Logging Integration + + +_warnings_showwarning = None + + +def _showwarning(message, category, filename, lineno, file=None, line=None): + if file is not None: + if _warnings_showwarning is not None: + _warnings_showwarning( + message, category, filename, lineno, file, line, + ) + else: + if issubclass(category, PipDeprecationWarning): + # We use a specially named logger which will handle all of the + # deprecation messages for pip. + logger = logging.getLogger("pip.deprecations") + + # This is purposely using the % formatter here instead of letting + # the logging module handle the interpolation. This is because we + # want it to appear as if someone typed this entire message out. + log_message = "DEPRECATION: %s" % message + + # PipDeprecationWarnings that are Pending still have at least 2 + # versions to go until they are removed so they can just be + # warnings. Otherwise, they will be removed in the very next + # version of pip. We want these to be more obvious so we use the + # ERROR logging level. + if issubclass(category, Pending): + logger.warning(log_message) + else: + logger.error(log_message) + else: + _warnings_showwarning( + message, category, filename, lineno, file, line, + ) + + +def install_warning_logger(): + # Enable our Deprecation Warnings + warnings.simplefilter("default", PipDeprecationWarning, append=True) + + global _warnings_showwarning + + if _warnings_showwarning is None: + _warnings_showwarning = warnings.showwarning + warnings.showwarning = _showwarning diff --git a/week-0/day-3/my_todo_app/venvironment/lib/python3.6/site-packages/pip/utils/encoding.py b/week-0/day-3/my_todo_app/venvironment/lib/python3.6/site-packages/pip/utils/encoding.py new file mode 100644 index 00000000..24831686 --- /dev/null +++ b/week-0/day-3/my_todo_app/venvironment/lib/python3.6/site-packages/pip/utils/encoding.py @@ -0,0 +1,31 @@ +import codecs +import locale +import re + + +BOMS = [ + (codecs.BOM_UTF8, 'utf8'), + (codecs.BOM_UTF16, 'utf16'), + (codecs.BOM_UTF16_BE, 'utf16-be'), + (codecs.BOM_UTF16_LE, 'utf16-le'), + (codecs.BOM_UTF32, 'utf32'), + (codecs.BOM_UTF32_BE, 'utf32-be'), + (codecs.BOM_UTF32_LE, 'utf32-le'), +] + +ENCODING_RE = re.compile(b'coding[:=]\s*([-\w.]+)') + + +def auto_decode(data): + """Check a bytes string for a BOM to correctly detect the encoding + + Fallback to locale.getpreferredencoding(False) like open() on Python3""" + for bom, encoding in BOMS: + if data.startswith(bom): + return data[len(bom):].decode(encoding) + # Lets check the first two lines as in PEP263 + for line in data.split(b'\n')[:2]: + if line[0:1] == b'#' and ENCODING_RE.search(line): + encoding = ENCODING_RE.search(line).groups()[0].decode('ascii') + return data.decode(encoding) + return data.decode(locale.getpreferredencoding(False)) diff --git a/week-0/day-3/my_todo_app/venvironment/lib/python3.6/site-packages/pip/utils/filesystem.py b/week-0/day-3/my_todo_app/venvironment/lib/python3.6/site-packages/pip/utils/filesystem.py new file mode 100644 index 00000000..25ad5166 --- /dev/null +++ b/week-0/day-3/my_todo_app/venvironment/lib/python3.6/site-packages/pip/utils/filesystem.py @@ -0,0 +1,28 @@ +import os +import os.path + +from pip.compat import get_path_uid + + +def check_path_owner(path): + # If we don't have a way to check the effective uid of this process, then + # we'll just assume that we own the directory. + if not hasattr(os, "geteuid"): + return True + + previous = None + while path != previous: + if os.path.lexists(path): + # Check if path is writable by current user. + if os.geteuid() == 0: + # Special handling for root user in order to handle properly + # cases where users use sudo without -H flag. + try: + path_uid = get_path_uid(path) + except OSError: + return False + return path_uid == 0 + else: + return os.access(path, os.W_OK) + else: + previous, path = path, os.path.dirname(path) diff --git a/week-0/day-3/my_todo_app/venvironment/lib/python3.6/site-packages/pip/utils/glibc.py b/week-0/day-3/my_todo_app/venvironment/lib/python3.6/site-packages/pip/utils/glibc.py new file mode 100644 index 00000000..7847885c --- /dev/null +++ b/week-0/day-3/my_todo_app/venvironment/lib/python3.6/site-packages/pip/utils/glibc.py @@ -0,0 +1,81 @@ +from __future__ import absolute_import + +import re +import ctypes +import platform +import warnings + + +def glibc_version_string(): + "Returns glibc version string, or None if not using glibc." + + # ctypes.CDLL(None) internally calls dlopen(NULL), and as the dlopen + # manpage says, "If filename is NULL, then the returned handle is for the + # main program". This way we can let the linker do the work to figure out + # which libc our process is actually using. + process_namespace = ctypes.CDLL(None) + try: + gnu_get_libc_version = process_namespace.gnu_get_libc_version + except AttributeError: + # Symbol doesn't exist -> therefore, we are not linked to + # glibc. + return None + + # Call gnu_get_libc_version, which returns a string like "2.5" + gnu_get_libc_version.restype = ctypes.c_char_p + version_str = gnu_get_libc_version() + # py2 / py3 compatibility: + if not isinstance(version_str, str): + version_str = version_str.decode("ascii") + + return version_str + + +# Separated out from have_compatible_glibc for easier unit testing +def check_glibc_version(version_str, required_major, minimum_minor): + # Parse string and check against requested version. + # + # We use a regexp instead of str.split because we want to discard any + # random junk that might come after the minor version -- this might happen + # in patched/forked versions of glibc (e.g. Linaro's version of glibc + # uses version strings like "2.20-2014.11"). See gh-3588. + m = re.match(r"(?P<major>[0-9]+)\.(?P<minor>[0-9]+)", version_str) + if not m: + warnings.warn("Expected glibc version with 2 components major.minor," + " got: %s" % version_str, RuntimeWarning) + return False + return (int(m.group("major")) == required_major and + int(m.group("minor")) >= minimum_minor) + + +def have_compatible_glibc(required_major, minimum_minor): + version_str = glibc_version_string() + if version_str is None: + return False + return check_glibc_version(version_str, required_major, minimum_minor) + + +# platform.libc_ver regularly returns completely nonsensical glibc +# versions. E.g. on my computer, platform says: +# +# ~$ python2.7 -c 'import platform; print(platform.libc_ver())' +# ('glibc', '2.7') +# ~$ python3.5 -c 'import platform; print(platform.libc_ver())' +# ('glibc', '2.9') +# +# But the truth is: +# +# ~$ ldd --version +# ldd (Debian GLIBC 2.22-11) 2.22 +# +# This is unfortunate, because it means that the linehaul data on libc +# versions that was generated by pip 8.1.2 and earlier is useless and +# misleading. Solution: instead of using platform, use our code that actually +# works. +def libc_ver(): + glibc_version = glibc_version_string() + if glibc_version is None: + # For non-glibc platforms, fall back on platform.libc_ver + return platform.libc_ver() + else: + return ("glibc", glibc_version) diff --git a/week-0/day-3/my_todo_app/venvironment/lib/python3.6/site-packages/pip/utils/hashes.py b/week-0/day-3/my_todo_app/venvironment/lib/python3.6/site-packages/pip/utils/hashes.py new file mode 100644 index 00000000..96029700 --- /dev/null +++ b/week-0/day-3/my_todo_app/venvironment/lib/python3.6/site-packages/pip/utils/hashes.py @@ -0,0 +1,92 @@ +from __future__ import absolute_import + +import hashlib + +from pip.exceptions import HashMismatch, HashMissing, InstallationError +from pip.utils import read_chunks +from pip._vendor.six import iteritems, iterkeys, itervalues + + +# The recommended hash algo of the moment. Change this whenever the state of +# the art changes; it won't hurt backward compatibility. +FAVORITE_HASH = 'sha256' + + +# Names of hashlib algorithms allowed by the --hash option and ``pip hash`` +# Currently, those are the ones at least as collision-resistant as sha256. +STRONG_HASHES = ['sha256', 'sha384', 'sha512'] + + +class Hashes(object): + """A wrapper that builds multiple hashes at once and checks them against + known-good values + + """ + def __init__(self, hashes=None): + """ + :param hashes: A dict of algorithm names pointing to lists of allowed + hex digests + """ + self._allowed = {} if hashes is None else hashes + + def check_against_chunks(self, chunks): + """Check good hashes against ones built from iterable of chunks of + data. + + Raise HashMismatch if none match. + + """ + gots = {} + for hash_name in iterkeys(self._allowed): + try: + gots[hash_name] = hashlib.new(hash_name) + except (ValueError, TypeError): + raise InstallationError('Unknown hash name: %s' % hash_name) + + for chunk in chunks: + for hash in itervalues(gots): + hash.update(chunk) + + for hash_name, got in iteritems(gots): + if got.hexdigest() in self._allowed[hash_name]: + return + self._raise(gots) + + def _raise(self, gots): + raise HashMismatch(self._allowed, gots) + + def check_against_file(self, file): + """Check good hashes against a file-like object + + Raise HashMismatch if none match. + + """ + return self.check_against_chunks(read_chunks(file)) + + def check_against_path(self, path): + with open(path, 'rb') as file: + return self.check_against_file(file) + + def __nonzero__(self): + """Return whether I know any known-good hashes.""" + return bool(self._allowed) + + def __bool__(self): + return self.__nonzero__() + + +class MissingHashes(Hashes): + """A workalike for Hashes used when we're missing a hash for a requirement + + It computes the actual hash of the requirement and raises a HashMissing + exception showing it to the user. + + """ + def __init__(self): + """Don't offer the ``hashes`` kwarg.""" + # Pass our favorite hash in to generate a "gotten hash". With the + # empty list, it will never match, so an error will always raise. + super(MissingHashes, self).__init__(hashes={FAVORITE_HASH: []}) + + def _raise(self, gots): + raise HashMissing(gots[FAVORITE_HASH].hexdigest()) diff --git a/week-0/day-3/my_todo_app/venvironment/lib/python3.6/site-packages/pip/utils/logging.py b/week-0/day-3/my_todo_app/venvironment/lib/python3.6/site-packages/pip/utils/logging.py new file mode 100644 index 00000000..1c1053ab --- /dev/null +++ b/week-0/day-3/my_todo_app/venvironment/lib/python3.6/site-packages/pip/utils/logging.py @@ -0,0 +1,130 @@ +from __future__ import absolute_import + +import contextlib +import logging +import logging.handlers +import os + +try: + import threading +except ImportError: + import dummy_threading as threading + +from pip.compat import WINDOWS +from pip.utils import ensure_dir + +try: + from pip._vendor import colorama +# Lots of different errors can come from this, including SystemError and +# ImportError. +except Exception: + colorama = None + + +_log_state = threading.local() +_log_state.indentation = 0 + + +@contextlib.contextmanager +def indent_log(num=2): + """ + A context manager which will cause the log output to be indented for any + log messages emitted inside it. + """ + _log_state.indentation += num + try: + yield + finally: + _log_state.indentation -= num + + +def get_indentation(): + return getattr(_log_state, 'indentation', 0) + + +class IndentingFormatter(logging.Formatter): + + def format(self, record): + """ + Calls the standard formatter, but will indent all of the log messages + by our current indentation level. + """ + formatted = logging.Formatter.format(self, record) + formatted = "".join([ + (" " * get_indentation()) + line + for line in formatted.splitlines(True) + ]) + return formatted + + +def _color_wrap(*colors): + def wrapped(inp): + return "".join(list(colors) + [inp, colorama.Style.RESET_ALL]) + return wrapped + + +class ColorizedStreamHandler(logging.StreamHandler): + + # Don't build up a list of colors if we don't have colorama + if colorama: + COLORS = [ + # This needs to be in order from highest logging level to lowest. + (logging.ERROR, _color_wrap(colorama.Fore.RED)), + (logging.WARNING, _color_wrap(colorama.Fore.YELLOW)), + ] + else: + COLORS = [] + + def __init__(self, stream=None): + logging.StreamHandler.__init__(self, stream) + + if WINDOWS and colorama: + self.stream = colorama.AnsiToWin32(self.stream) + + def should_color(self): + # Don't colorize things if we do not have colorama + if not colorama: + return False + + real_stream = ( + self.stream if not isinstance(self.stream, colorama.AnsiToWin32) + else self.stream.wrapped + ) + + # If the stream is a tty we should color it + if hasattr(real_stream, "isatty") and real_stream.isatty(): + return True + + # If we have an ASNI term we should color it + if os.environ.get("TERM") == "ANSI": + return True + + # If anything else we should not color it + return False + + def format(self, record): + msg = logging.StreamHandler.format(self, record) + + if self.should_color(): + for level, color in self.COLORS: + if record.levelno >= level: + msg = color(msg) + break + + return msg + + +class BetterRotatingFileHandler(logging.handlers.RotatingFileHandler): + + def _open(self): + ensure_dir(os.path.dirname(self.baseFilename)) + return logging.handlers.RotatingFileHandler._open(self) + + +class MaxLevelFilter(logging.Filter): + + def __init__(self, level): + self.level = level + + def filter(self, record): + return record.levelno < self.level diff --git a/week-0/day-3/my_todo_app/venvironment/lib/python3.6/site-packages/pip/utils/outdated.py b/week-0/day-3/my_todo_app/venvironment/lib/python3.6/site-packages/pip/utils/outdated.py new file mode 100644 index 00000000..2164cc3c --- /dev/null +++ b/week-0/day-3/my_todo_app/venvironment/lib/python3.6/site-packages/pip/utils/outdated.py @@ -0,0 +1,162 @@ +from __future__ import absolute_import + +import datetime +import json +import logging +import os.path +import sys + +from pip._vendor import lockfile +from pip._vendor.packaging import version as packaging_version + +from pip.compat import total_seconds, WINDOWS +from pip.models import PyPI +from pip.locations import USER_CACHE_DIR, running_under_virtualenv +from pip.utils import ensure_dir, get_installed_version +from pip.utils.filesystem import check_path_owner + + +SELFCHECK_DATE_FMT = "%Y-%m-%dT%H:%M:%SZ" + + +logger = logging.getLogger(__name__) + + +class VirtualenvSelfCheckState(object): + def __init__(self): + self.statefile_path = os.path.join(sys.prefix, "pip-selfcheck.json") + + # Load the existing state + try: + with open(self.statefile_path) as statefile: + self.state = json.load(statefile) + except (IOError, ValueError): + self.state = {} + + def save(self, pypi_version, current_time): + # Attempt to write out our version check file + with open(self.statefile_path, "w") as statefile: + json.dump( + { + "last_check": current_time.strftime(SELFCHECK_DATE_FMT), + "pypi_version": pypi_version, + }, + statefile, + sort_keys=True, + separators=(",", ":") + ) + + +class GlobalSelfCheckState(object): + def __init__(self): + self.statefile_path = os.path.join(USER_CACHE_DIR, "selfcheck.json") + + # Load the existing state + try: + with open(self.statefile_path) as statefile: + self.state = json.load(statefile)[sys.prefix] + except (IOError, ValueError, KeyError): + self.state = {} + + def save(self, pypi_version, current_time): + # Check to make sure that we own the directory + if not check_path_owner(os.path.dirname(self.statefile_path)): + return + + # Now that we've ensured the directory is owned by this user, we'll go + # ahead and make sure that all our directories are created. + ensure_dir(os.path.dirname(self.statefile_path)) + + # Attempt to write out our version check file + with lockfile.LockFile(self.statefile_path): + if os.path.exists(self.statefile_path): + with open(self.statefile_path) as statefile: + state = json.load(statefile) + else: + state = {} + + state[sys.prefix] = { + "last_check": current_time.strftime(SELFCHECK_DATE_FMT), + "pypi_version": pypi_version, + } + + with open(self.statefile_path, "w") as statefile: + json.dump(state, statefile, sort_keys=True, + separators=(",", ":")) + + +def load_selfcheck_statefile(): + if running_under_virtualenv(): + return VirtualenvSelfCheckState() + else: + return GlobalSelfCheckState() + + +def pip_version_check(session): + """Check for an update for pip. + + Limit the frequency of checks to once per week. State is stored either in + the active virtualenv or in the user's USER_CACHE_DIR keyed off the prefix + of the pip script path. + """ + installed_version = get_installed_version("pip") + if installed_version is None: + return + + pip_version = packaging_version.parse(installed_version) + pypi_version = None + + try: + state = load_selfcheck_statefile() + + current_time = datetime.datetime.utcnow() + # Determine if we need to refresh the state + if "last_check" in state.state and "pypi_version" in state.state: + last_check = datetime.datetime.strptime( + state.state["last_check"], + SELFCHECK_DATE_FMT + ) + if total_seconds(current_time - last_check) < 7 * 24 * 60 * 60: + pypi_version = state.state["pypi_version"] + + # Refresh the version if we need to or just see if we need to warn + if pypi_version is None: + resp = session.get( + PyPI.pip_json_url, + headers={"Accept": "application/json"}, + ) + resp.raise_for_status() + pypi_version = [ + v for v in sorted( + list(resp.json()["releases"]), + key=packaging_version.parse, + ) + if not packaging_version.parse(v).is_prerelease + ][-1] + + # save that we've performed a check + state.save(pypi_version, current_time) + + remote_version = packaging_version.parse(pypi_version) + + # Determine if our pypi_version is older + if (pip_version < remote_version and + pip_version.base_version != remote_version.base_version): + # Advise "python -m pip" on Windows to avoid issues + # with overwriting pip.exe. + if WINDOWS: + pip_cmd = "python -m pip" + else: + pip_cmd = "pip" + logger.warning( + "You are using pip version %s, however version %s is " + "available.\nYou should consider upgrading via the " + "'%s install --upgrade pip' command.", + pip_version, pypi_version, pip_cmd + ) + + except Exception: + logger.debug( + "There was an error checking the latest version of pip", + exc_info=True, + ) diff --git a/week-0/day-3/my_todo_app/venvironment/lib/python3.6/site-packages/pip/utils/packaging.py b/week-0/day-3/my_todo_app/venvironment/lib/python3.6/site-packages/pip/utils/packaging.py new file mode 100644 index 00000000..e93b20d1 --- /dev/null +++ b/week-0/day-3/my_todo_app/venvironment/lib/python3.6/site-packages/pip/utils/packaging.py @@ -0,0 +1,63 @@ +from __future__ import absolute_import + +from email.parser import FeedParser + +import logging +import sys + +from pip._vendor.packaging import specifiers +from pip._vendor.packaging import version +from pip._vendor import pkg_resources + +from pip import exceptions + +logger = logging.getLogger(__name__) + + +def check_requires_python(requires_python): + """ + Check if the python version in use match the `requires_python` specifier. + + Returns `True` if the version of python in use matches the requirement. + Returns `False` if the version of python in use does not matches the + requirement. + + Raises an InvalidSpecifier if `requires_python` have an invalid format. + """ + if requires_python is None: + # The package provides no information + return True + requires_python_specifier = specifiers.SpecifierSet(requires_python) + + # We only use major.minor.micro + python_version = version.parse('.'.join(map(str, sys.version_info[:3]))) + return python_version in requires_python_specifier + + +def get_metadata(dist): + if (isinstance(dist, pkg_resources.DistInfoDistribution) and + dist.has_metadata('METADATA')): + return dist.get_metadata('METADATA') + elif dist.has_metadata('PKG-INFO'): + return dist.get_metadata('PKG-INFO') + + +def check_dist_requires_python(dist): + metadata = get_metadata(dist) + feed_parser = FeedParser() + feed_parser.feed(metadata) + pkg_info_dict = feed_parser.close() + requires_python = pkg_info_dict.get('Requires-Python') + try: + if not check_requires_python(requires_python): + raise exceptions.UnsupportedPythonVersion( + "%s requires Python '%s' but the running Python is %s" % ( + dist.project_name, + requires_python, + '.'.join(map(str, sys.version_info[:3])),) + ) + except specifiers.InvalidSpecifier as e: + logger.warning( + "Package %s has an invalid Requires-Python entry %s - %s" % ( + dist.project_name, requires_python, e)) + return diff --git a/week-0/day-3/my_todo_app/venvironment/lib/python3.6/site-packages/pip/utils/setuptools_build.py b/week-0/day-3/my_todo_app/venvironment/lib/python3.6/site-packages/pip/utils/setuptools_build.py new file mode 100644 index 00000000..03973e97 --- /dev/null +++ b/week-0/day-3/my_todo_app/venvironment/lib/python3.6/site-packages/pip/utils/setuptools_build.py @@ -0,0 +1,8 @@ +# Shim to wrap setup.py invocation with setuptools +SETUPTOOLS_SHIM = ( + "import setuptools, tokenize;__file__=%r;" + "f=getattr(tokenize, 'open', open)(__file__);" + "code=f.read().replace('\\r\\n', '\\n');" + "f.close();" + "exec(compile(code, __file__, 'exec'))" +) diff --git a/week-0/day-3/my_todo_app/venvironment/lib/python3.6/site-packages/pip/utils/ui.py b/week-0/day-3/my_todo_app/venvironment/lib/python3.6/site-packages/pip/utils/ui.py new file mode 100644 index 00000000..bba73e3b --- /dev/null +++ b/week-0/day-3/my_todo_app/venvironment/lib/python3.6/site-packages/pip/utils/ui.py @@ -0,0 +1,344 @@ +from __future__ import absolute_import +from __future__ import division + +import itertools +import sys +from signal import signal, SIGINT, default_int_handler +import time +import contextlib +import logging + +from pip.compat import WINDOWS +from pip.utils import format_size +from pip.utils.logging import get_indentation +from pip._vendor import six +from pip._vendor.progress.bar import Bar, IncrementalBar +from pip._vendor.progress.helpers import (WritelnMixin, + HIDE_CURSOR, SHOW_CURSOR) +from pip._vendor.progress.spinner import Spinner + +try: + from pip._vendor import colorama +# Lots of different errors can come from this, including SystemError and +# ImportError. +except Exception: + colorama = None + +logger = logging.getLogger(__name__) + + +def _select_progress_class(preferred, fallback): + encoding = getattr(preferred.file, "encoding", None) + + # If we don't know what encoding this file is in, then we'll just assume + # that it doesn't support unicode and use the ASCII bar. + if not encoding: + return fallback + + # Collect all of the possible characters we want to use with the preferred + # bar. + characters = [ + getattr(preferred, "empty_fill", six.text_type()), + getattr(preferred, "fill", six.text_type()), + ] + characters += list(getattr(preferred, "phases", [])) + + # Try to decode the characters we're using for the bar using the encoding + # of the given file, if this works then we'll assume that we can use the + # fancier bar and if not we'll fall back to the plaintext bar. + try: + six.text_type().join(characters).encode(encoding) + except UnicodeEncodeError: + return fallback + else: + return preferred + + +_BaseBar = _select_progress_class(IncrementalBar, Bar) + + +class InterruptibleMixin(object): + """ + Helper to ensure that self.finish() gets called on keyboard interrupt. + + This allows downloads to be interrupted without leaving temporary state + (like hidden cursors) behind. + + This class is similar to the progress library's existing SigIntMixin + helper, but as of version 1.2, that helper has the following problems: + + 1. It calls sys.exit(). + 2. It discards the existing SIGINT handler completely. + 3. It leaves its own handler in place even after an uninterrupted finish, + which will have unexpected delayed effects if the user triggers an + unrelated keyboard interrupt some time after a progress-displaying + download has already completed, for example. + """ + + def __init__(self, *args, **kwargs): + """ + Save the original SIGINT handler for later. + """ + super(InterruptibleMixin, self).__init__(*args, **kwargs) + + self.original_handler = signal(SIGINT, self.handle_sigint) + + # If signal() returns None, the previous handler was not installed from + # Python, and we cannot restore it. This probably should not happen, + # but if it does, we must restore something sensible instead, at least. + # The least bad option should be Python's default SIGINT handler, which + # just raises KeyboardInterrupt. + if self.original_handler is None: + self.original_handler = default_int_handler + + def finish(self): + """ + Restore the original SIGINT handler after finishing. + + This should happen regardless of whether the progress display finishes + normally, or gets interrupted. + """ + super(InterruptibleMixin, self).finish() + signal(SIGINT, self.original_handler) + + def handle_sigint(self, signum, frame): + """ + Call self.finish() before delegating to the original SIGINT handler. + + This handler should only be in place while the progress display is + active. + """ + self.finish() + self.original_handler(signum, frame) + + +class DownloadProgressMixin(object): + + def __init__(self, *args, **kwargs): + super(DownloadProgressMixin, self).__init__(*args, **kwargs) + self.message = (" " * (get_indentation() + 2)) + self.message + + @property + def downloaded(self): + return format_size(self.index) + + @property + def download_speed(self): + # Avoid zero division errors... + if self.avg == 0.0: + return "..." + return format_size(1 / self.avg) + "/s" + + @property + def pretty_eta(self): + if self.eta: + return "eta %s" % self.eta_td + return "" + + def iter(self, it, n=1): + for x in it: + yield x + self.next(n) + self.finish() + + +class WindowsMixin(object): + + def __init__(self, *args, **kwargs): + # The Windows terminal does not support the hide/show cursor ANSI codes + # even with colorama. So we'll ensure that hide_cursor is False on + # Windows. + # This call neds to go before the super() call, so that hide_cursor + # is set in time. The base progress bar class writes the "hide cursor" + # code to the terminal in its init, so if we don't set this soon + # enough, we get a "hide" with no corresponding "show"... + if WINDOWS and self.hide_cursor: + self.hide_cursor = False + + super(WindowsMixin, self).__init__(*args, **kwargs) + + # Check if we are running on Windows and we have the colorama module, + # if we do then wrap our file with it. + if WINDOWS and colorama: + self.file = colorama.AnsiToWin32(self.file) + # The progress code expects to be able to call self.file.isatty() + # but the colorama.AnsiToWin32() object doesn't have that, so we'll + # add it. + self.file.isatty = lambda: self.file.wrapped.isatty() + # The progress code expects to be able to call self.file.flush() + # but the colorama.AnsiToWin32() object doesn't have that, so we'll + # add it. + self.file.flush = lambda: self.file.wrapped.flush() + + +class DownloadProgressBar(WindowsMixin, InterruptibleMixin, + DownloadProgressMixin, _BaseBar): + + file = sys.stdout + message = "%(percent)d%%" + suffix = "%(downloaded)s %(download_speed)s %(pretty_eta)s" + + +class DownloadProgressSpinner(WindowsMixin, InterruptibleMixin, + DownloadProgressMixin, WritelnMixin, Spinner): + + file = sys.stdout + suffix = "%(downloaded)s %(download_speed)s" + + def next_phase(self): + if not hasattr(self, "_phaser"): + self._phaser = itertools.cycle(self.phases) + return next(self._phaser) + + def update(self): + message = self.message % self + phase = self.next_phase() + suffix = self.suffix % self + line = ''.join([ + message, + " " if message else "", + phase, + " " if suffix else "", + suffix, + ]) + + self.writeln(line) + + +################################################################ +# Generic "something is happening" spinners +# +# We don't even try using progress.spinner.Spinner here because it's actually +# simpler to reimplement from scratch than to coerce their code into doing +# what we need. +################################################################ + +@contextlib.contextmanager +def hidden_cursor(file): + # The Windows terminal does not support the hide/show cursor ANSI codes, + # even via colorama. So don't even try. + if WINDOWS: + yield + # We don't want to clutter the output with control characters if we're + # writing to a file, or if the user is running with --quiet. + # See https://github.com/pypa/pip/issues/3418 + elif not file.isatty() or logger.getEffectiveLevel() > logging.INFO: + yield + else: + file.write(HIDE_CURSOR) + try: + yield + finally: + file.write(SHOW_CURSOR) + + +class RateLimiter(object): + def __init__(self, min_update_interval_seconds): + self._min_update_interval_seconds = min_update_interval_seconds + self._last_update = 0 + + def ready(self): + now = time.time() + delta = now - self._last_update + return delta >= self._min_update_interval_seconds + + def reset(self): + self._last_update = time.time() + + +class InteractiveSpinner(object): + def __init__(self, message, file=None, spin_chars="-\\|/", + # Empirically, 8 updates/second looks nice + min_update_interval_seconds=0.125): + self._message = message + if file is None: + file = sys.stdout + self._file = file + self._rate_limiter = RateLimiter(min_update_interval_seconds) + self._finished = False + + self._spin_cycle = itertools.cycle(spin_chars) + + self._file.write(" " * get_indentation() + self._message + " ... ") + self._width = 0 + + def _write(self, status): + assert not self._finished + # Erase what we wrote before by backspacing to the beginning, writing + # spaces to overwrite the old text, and then backspacing again + backup = "\b" * self._width + self._file.write(backup + " " * self._width + backup) + # Now we have a blank slate to add our status + self._file.write(status) + self._width = len(status) + self._file.flush() + self._rate_limiter.reset() + + def spin(self): + if self._finished: + return + if not self._rate_limiter.ready(): + return + self._write(next(self._spin_cycle)) + + def finish(self, final_status): + if self._finished: + return + self._write(final_status) + self._file.write("\n") + self._file.flush() + self._finished = True + + +# Used for dumb terminals, non-interactive installs (no tty), etc. +# We still print updates occasionally (once every 60 seconds by default) to +# act as a keep-alive for systems like Travis-CI that take lack-of-output as +# an indication that a task has frozen. +class NonInteractiveSpinner(object): + def __init__(self, message, min_update_interval_seconds=60): + self._message = message + self._finished = False + self._rate_limiter = RateLimiter(min_update_interval_seconds) + self._update("started") + + def _update(self, status): + assert not self._finished + self._rate_limiter.reset() + logger.info("%s: %s", self._message, status) + + def spin(self): + if self._finished: + return + if not self._rate_limiter.ready(): + return + self._update("still running...") + + def finish(self, final_status): + if self._finished: + return + self._update("finished with status '%s'" % (final_status,)) + self._finished = True + + +@contextlib.contextmanager +def open_spinner(message): + # Interactive spinner goes directly to sys.stdout rather than being routed + # through the logging system, but it acts like it has level INFO, + # i.e. it's only displayed if we're at level INFO or better. + # Non-interactive spinner goes through the logging system, so it is always + # in sync with logging configuration. + if sys.stdout.isatty() and logger.getEffectiveLevel() <= logging.INFO: + spinner = InteractiveSpinner(message) + else: + spinner = NonInteractiveSpinner(message) + try: + with hidden_cursor(sys.stdout): + yield spinner + except KeyboardInterrupt: + spinner.finish("canceled") + raise + except Exception: + spinner.finish("error") + raise + else: + spinner.finish("done") diff --git a/week-0/day-3/my_todo_app/venvironment/lib/python3.6/site-packages/pip/vcs/__init__.py b/week-0/day-3/my_todo_app/venvironment/lib/python3.6/site-packages/pip/vcs/__init__.py new file mode 100644 index 00000000..8d3dbb27 --- /dev/null +++ b/week-0/day-3/my_todo_app/venvironment/lib/python3.6/site-packages/pip/vcs/__init__.py @@ -0,0 +1,366 @@ +"""Handles all VCS (version control) support""" +from __future__ import absolute_import + +import errno +import logging +import os +import shutil +import sys + +from pip._vendor.six.moves.urllib import parse as urllib_parse + +from pip.exceptions import BadCommand +from pip.utils import (display_path, backup_dir, call_subprocess, + rmtree, ask_path_exists) + + +__all__ = ['vcs', 'get_src_requirement'] + + +logger = logging.getLogger(__name__) + + +class VcsSupport(object): + _registry = {} + schemes = ['ssh', 'git', 'hg', 'bzr', 'sftp', 'svn'] + + def __init__(self): + # Register more schemes with urlparse for various version control + # systems + urllib_parse.uses_netloc.extend(self.schemes) + # Python >= 2.7.4, 3.3 doesn't have uses_fragment + if getattr(urllib_parse, 'uses_fragment', None): + urllib_parse.uses_fragment.extend(self.schemes) + super(VcsSupport, self).__init__() + + def __iter__(self): + return self._registry.__iter__() + + @property + def backends(self): + return list(self._registry.values()) + + @property + def dirnames(self): + return [backend.dirname for backend in self.backends] + + @property + def all_schemes(self): + schemes = [] + for backend in self.backends: + schemes.extend(backend.schemes) + return schemes + + def register(self, cls): + if not hasattr(cls, 'name'): + logger.warning('Cannot register VCS %s', cls.__name__) + return + if cls.name not in self._registry: + self._registry[cls.name] = cls + logger.debug('Registered VCS backend: %s', cls.name) + + def unregister(self, cls=None, name=None): + if name in self._registry: + del self._registry[name] + elif cls in self._registry.values(): + del self._registry[cls.name] + else: + logger.warning('Cannot unregister because no class or name given') + + def get_backend_name(self, location): + """ + Return the name of the version control backend if found at given + location, e.g. vcs.get_backend_name('/path/to/vcs/checkout') + """ + for vc_type in self._registry.values(): + if vc_type.controls_location(location): + logger.debug('Determine that %s uses VCS: %s', + location, vc_type.name) + return vc_type.name + return None + + def get_backend(self, name): + name = name.lower() + if name in self._registry: + return self._registry[name] + + def get_backend_from_location(self, location): + vc_type = self.get_backend_name(location) + if vc_type: + return self.get_backend(vc_type) + return None + + +vcs = VcsSupport() + + +class VersionControl(object): + name = '' + dirname = '' + # List of supported schemes for this Version Control + schemes = () + + def __init__(self, url=None, *args, **kwargs): + self.url = url + super(VersionControl, self).__init__(*args, **kwargs) + + def _is_local_repository(self, repo): + """ + posix absolute paths start with os.path.sep, + win32 ones start with drive (like c:\\folder) + """ + drive, tail = os.path.splitdrive(repo) + return repo.startswith(os.path.sep) or drive + + # See issue #1083 for why this method was introduced: + # https://github.com/pypa/pip/issues/1083 + def translate_egg_surname(self, surname): + # For example, Django has branches of the form "stable/1.7.x". + return surname.replace('/', '_') + + def export(self, location): + """ + Export the repository at the url to the destination location + i.e. only download the files, without vcs informations + """ + raise NotImplementedError + + def get_url_rev(self): + """ + Returns the correct repository URL and revision by parsing the given + repository URL + """ + error_message = ( + "Sorry, '%s' is a malformed VCS url. " + "The format is <vcs>+<protocol>://<url>, " + "e.g. svn+http://myrepo/svn/MyApp#egg=MyApp" + ) + assert '+' in self.url, error_message % self.url + url = self.url.split('+', 1)[1] + scheme, netloc, path, query, frag = urllib_parse.urlsplit(url) + rev = None + if '@' in path: + path, rev = path.rsplit('@', 1) + url = urllib_parse.urlunsplit((scheme, netloc, path, query, '')) + return url, rev + + def get_info(self, location): + """ + Returns (url, revision), where both are strings + """ + assert not location.rstrip('/').endswith(self.dirname), \ + 'Bad directory: %s' % location + return self.get_url(location), self.get_revision(location) + + def normalize_url(self, url): + """ + Normalize a URL for comparison by unquoting it and removing any + trailing slash. + """ + return urllib_parse.unquote(url).rstrip('/') + + def compare_urls(self, url1, url2): + """ + Compare two repo URLs for identity, ignoring incidental differences. + """ + return (self.normalize_url(url1) == self.normalize_url(url2)) + + def obtain(self, dest): + """ + Called when installing or updating an editable package, takes the + source path of the checkout. + """ + raise NotImplementedError + + def switch(self, dest, url, rev_options): + """ + Switch the repo at ``dest`` to point to ``URL``. + """ + raise NotImplementedError + + def update(self, dest, rev_options): + """ + Update an already-existing repo to the given ``rev_options``. + """ + raise NotImplementedError + + def check_version(self, dest, rev_options): + """ + Return True if the version is identical to what exists and + doesn't need to be updated. + """ + raise NotImplementedError + + def check_destination(self, dest, url, rev_options, rev_display): + """ + Prepare a location to receive a checkout/clone. + + Return True if the location is ready for (and requires) a + checkout/clone, False otherwise. + """ + checkout = True + prompt = False + if os.path.exists(dest): + checkout = False + if os.path.exists(os.path.join(dest, self.dirname)): + existing_url = self.get_url(dest) + if self.compare_urls(existing_url, url): + logger.debug( + '%s in %s exists, and has correct URL (%s)', + self.repo_name.title(), + display_path(dest), + url, + ) + if not self.check_version(dest, rev_options): + logger.info( + 'Updating %s %s%s', + display_path(dest), + self.repo_name, + rev_display, + ) + self.update(dest, rev_options) + else: + logger.info( + 'Skipping because already up-to-date.') + else: + logger.warning( + '%s %s in %s exists with URL %s', + self.name, + self.repo_name, + display_path(dest), + existing_url, + ) + prompt = ('(s)witch, (i)gnore, (w)ipe, (b)ackup ', + ('s', 'i', 'w', 'b')) + else: + logger.warning( + 'Directory %s already exists, and is not a %s %s.', + dest, + self.name, + self.repo_name, + ) + prompt = ('(i)gnore, (w)ipe, (b)ackup ', ('i', 'w', 'b')) + if prompt: + logger.warning( + 'The plan is to install the %s repository %s', + self.name, + url, + ) + response = ask_path_exists('What to do? %s' % prompt[0], + prompt[1]) + + if response == 's': + logger.info( + 'Switching %s %s to %s%s', + self.repo_name, + display_path(dest), + url, + rev_display, + ) + self.switch(dest, url, rev_options) + elif response == 'i': + # do nothing + pass + elif response == 'w': + logger.warning('Deleting %s', display_path(dest)) + rmtree(dest) + checkout = True + elif response == 'b': + dest_dir = backup_dir(dest) + logger.warning( + 'Backing up %s to %s', display_path(dest), dest_dir, + ) + shutil.move(dest, dest_dir) + checkout = True + elif response == 'a': + sys.exit(-1) + return checkout + + def unpack(self, location): + """ + Clean up current location and download the url repository + (and vcs infos) into location + """ + if os.path.exists(location): + rmtree(location) + self.obtain(location) + + def get_src_requirement(self, dist, location): + """ + Return a string representing the requirement needed to + redownload the files currently present in location, something + like: + {repository_url}@{revision}#egg={project_name}-{version_identifier} + """ + raise NotImplementedError + + def get_url(self, location): + """ + Return the url used at location + Used in get_info or check_destination + """ + raise NotImplementedError + + def get_revision(self, location): + """ + Return the current revision of the files at location + Used in get_info + """ + raise NotImplementedError + + def run_command(self, cmd, show_stdout=True, cwd=None, + on_returncode='raise', + command_desc=None, + extra_environ=None, spinner=None): + """ + Run a VCS subcommand + This is simply a wrapper around call_subprocess that adds the VCS + command name, and checks that the VCS is available + """ + cmd = [self.name] + cmd + try: + return call_subprocess(cmd, show_stdout, cwd, + on_returncode, + command_desc, extra_environ, + spinner) + except OSError as e: + # errno.ENOENT = no such file or directory + # In other words, the VCS executable isn't available + if e.errno == errno.ENOENT: + raise BadCommand('Cannot find command %r' % self.name) + else: + raise # re-raise exception if a different error occurred + + @classmethod + def controls_location(cls, location): + """ + Check if a location is controlled by the vcs. + It is meant to be overridden to implement smarter detection + mechanisms for specific vcs. + """ + logger.debug('Checking in %s for %s (%s)...', + location, cls.dirname, cls.name) + path = os.path.join(location, cls.dirname) + return os.path.exists(path) + + +def get_src_requirement(dist, location): + version_control = vcs.get_backend_from_location(location) + if version_control: + try: + return version_control().get_src_requirement(dist, + location) + except BadCommand: + logger.warning( + 'cannot determine version of editable source in %s ' + '(%s command not found in path)', + location, + version_control.name, + ) + return dist.as_requirement() + logger.warning( + 'cannot determine version of editable source in %s (is not SVN ' + 'checkout, Git clone, Mercurial clone or Bazaar branch)', + location, + ) + return dist.as_requirement() diff --git a/week-0/day-3/my_todo_app/venvironment/lib/python3.6/site-packages/pip/vcs/__pycache__/__init__.cpython-36.pyc b/week-0/day-3/my_todo_app/venvironment/lib/python3.6/site-packages/pip/vcs/__pycache__/__init__.cpython-36.pyc new file mode 100644 index 0000000000000000000000000000000000000000..8db301d7855330a0c40f789c517149cf702546b3 GIT binary patch literal 11102 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 bVS_FFZ`1(qFPnC$T3UX~DlPv+`{aKCEB596 literal 0 HcmV?d00001 diff --git a/week-0/day-3/my_todo_app/venvironment/lib/python3.6/site-packages/pip/vcs/__pycache__/bazaar.cpython-36.pyc b/week-0/day-3/my_todo_app/venvironment/lib/python3.6/site-packages/pip/vcs/__pycache__/bazaar.cpython-36.pyc new file mode 100644 index 0000000000000000000000000000000000000000..637ec220fe9040dca26a661f14c2b9776668f4dc GIT binary patch literal 3655 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 Z%7!*du<&yogtZoLIh$x3Zq3~c{|n2RZNC5j literal 0 HcmV?d00001 diff --git a/week-0/day-3/my_todo_app/venvironment/lib/python3.6/site-packages/pip/vcs/__pycache__/git.cpython-36.pyc b/week-0/day-3/my_todo_app/venvironment/lib/python3.6/site-packages/pip/vcs/__pycache__/git.cpython-36.pyc new file mode 100644 index 0000000000000000000000000000000000000000..3e520f20cb02f54bc55a67a0151f8f47838de827 GIT binary patch literal 8795 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 literal 0 HcmV?d00001 diff --git a/week-0/day-3/my_todo_app/venvironment/lib/python3.6/site-packages/pip/vcs/__pycache__/mercurial.cpython-36.pyc b/week-0/day-3/my_todo_app/venvironment/lib/python3.6/site-packages/pip/vcs/__pycache__/mercurial.cpython-36.pyc new file mode 100644 index 0000000000000000000000000000000000000000..224a7dcc6b92dcbda2ef38bed8f12e642679e698 GIT binary patch literal 3568 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 Mx~%JV-2RjQ1N!fDssI20 literal 0 HcmV?d00001 diff --git a/week-0/day-3/my_todo_app/venvironment/lib/python3.6/site-packages/pip/vcs/__pycache__/subversion.cpython-36.pyc b/week-0/day-3/my_todo_app/venvironment/lib/python3.6/site-packages/pip/vcs/__pycache__/subversion.cpython-36.pyc new file mode 100644 index 0000000000000000000000000000000000000000..833ef4dea7045338b3ff3dcf071b59d39b9daf2d GIT binary patch literal 7107 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 Q#v9rdyZ#gFhyIoS266b&rT_o{ literal 0 HcmV?d00001 diff --git a/week-0/day-3/my_todo_app/venvironment/lib/python3.6/site-packages/pip/vcs/bazaar.py b/week-0/day-3/my_todo_app/venvironment/lib/python3.6/site-packages/pip/vcs/bazaar.py new file mode 100644 index 00000000..0f095841 --- /dev/null +++ b/week-0/day-3/my_todo_app/venvironment/lib/python3.6/site-packages/pip/vcs/bazaar.py @@ -0,0 +1,116 @@ +from __future__ import absolute_import + +import logging +import os +import tempfile + +# TODO: Get this into six.moves.urllib.parse +try: + from urllib import parse as urllib_parse +except ImportError: + import urlparse as urllib_parse + +from pip.utils import rmtree, display_path +from pip.vcs import vcs, VersionControl +from pip.download import path_to_url + + +logger = logging.getLogger(__name__) + + +class Bazaar(VersionControl): + name = 'bzr' + dirname = '.bzr' + repo_name = 'branch' + schemes = ( + 'bzr', 'bzr+http', 'bzr+https', 'bzr+ssh', 'bzr+sftp', 'bzr+ftp', + 'bzr+lp', + ) + + def __init__(self, url=None, *args, **kwargs): + super(Bazaar, self).__init__(url, *args, **kwargs) + # Python >= 2.7.4, 3.3 doesn't have uses_fragment or non_hierarchical + # Register lp but do not expose as a scheme to support bzr+lp. + if getattr(urllib_parse, 'uses_fragment', None): + urllib_parse.uses_fragment.extend(['lp']) + urllib_parse.non_hierarchical.extend(['lp']) + + def export(self, location): + """ + Export the Bazaar repository at the url to the destination location + """ + temp_dir = tempfile.mkdtemp('-export', 'pip-') + self.unpack(temp_dir) + if os.path.exists(location): + # Remove the location to make sure Bazaar can export it correctly + rmtree(location) + try: + self.run_command(['export', location], cwd=temp_dir, + show_stdout=False) + finally: + rmtree(temp_dir) + + def switch(self, dest, url, rev_options): + self.run_command(['switch', url], cwd=dest) + + def update(self, dest, rev_options): + self.run_command(['pull', '-q'] + rev_options, cwd=dest) + + def obtain(self, dest): + url, rev = self.get_url_rev() + if rev: + rev_options = ['-r', rev] + rev_display = ' (to revision %s)' % rev + else: + rev_options = [] + rev_display = '' + if self.check_destination(dest, url, rev_options, rev_display): + logger.info( + 'Checking out %s%s to %s', + url, + rev_display, + display_path(dest), + ) + self.run_command(['branch', '-q'] + rev_options + [url, dest]) + + def get_url_rev(self): + # hotfix the URL scheme after removing bzr+ from bzr+ssh:// readd it + url, rev = super(Bazaar, self).get_url_rev() + if url.startswith('ssh://'): + url = 'bzr+' + url + return url, rev + + def get_url(self, location): + urls = self.run_command(['info'], show_stdout=False, cwd=location) + for line in urls.splitlines(): + line = line.strip() + for x in ('checkout of branch: ', + 'parent branch: '): + if line.startswith(x): + repo = line.split(x)[1] + if self._is_local_repository(repo): + return path_to_url(repo) + return repo + return None + + def get_revision(self, location): + revision = self.run_command( + ['revno'], show_stdout=False, cwd=location) + return revision.splitlines()[-1] + + def get_src_requirement(self, dist, location): + repo = self.get_url(location) + if not repo: + return None + if not repo.lower().startswith('bzr:'): + repo = 'bzr+' + repo + egg_project_name = dist.egg_name().split('-', 1)[0] + current_rev = self.get_revision(location) + return '%s@%s#egg=%s' % (repo, current_rev, egg_project_name) + + def check_version(self, dest, rev_options): + """Always assume the versions don't match""" + return False + + +vcs.register(Bazaar) diff --git a/week-0/day-3/my_todo_app/venvironment/lib/python3.6/site-packages/pip/vcs/git.py b/week-0/day-3/my_todo_app/venvironment/lib/python3.6/site-packages/pip/vcs/git.py new file mode 100644 index 00000000..2187dd84 --- /dev/null +++ b/week-0/day-3/my_todo_app/venvironment/lib/python3.6/site-packages/pip/vcs/git.py @@ -0,0 +1,300 @@ +from __future__ import absolute_import + +import logging +import tempfile +import os.path + +from pip.compat import samefile +from pip.exceptions import BadCommand +from pip._vendor.six.moves.urllib import parse as urllib_parse +from pip._vendor.six.moves.urllib import request as urllib_request +from pip._vendor.packaging.version import parse as parse_version + +from pip.utils import display_path, rmtree +from pip.vcs import vcs, VersionControl + + +urlsplit = urllib_parse.urlsplit +urlunsplit = urllib_parse.urlunsplit + + +logger = logging.getLogger(__name__) + + +class Git(VersionControl): + name = 'git' + dirname = '.git' + repo_name = 'clone' + schemes = ( + 'git', 'git+http', 'git+https', 'git+ssh', 'git+git', 'git+file', + ) + + def __init__(self, url=None, *args, **kwargs): + + # Works around an apparent Git bug + # (see http://article.gmane.org/gmane.comp.version-control.git/146500) + if url: + scheme, netloc, path, query, fragment = urlsplit(url) + if scheme.endswith('file'): + initial_slashes = path[:-len(path.lstrip('/'))] + newpath = ( + initial_slashes + + urllib_request.url2pathname(path) + .replace('\\', '/').lstrip('/') + ) + url = urlunsplit((scheme, netloc, newpath, query, fragment)) + after_plus = scheme.find('+') + 1 + url = scheme[:after_plus] + urlunsplit( + (scheme[after_plus:], netloc, newpath, query, fragment), + ) + + super(Git, self).__init__(url, *args, **kwargs) + + def get_git_version(self): + VERSION_PFX = 'git version ' + version = self.run_command(['version'], show_stdout=False) + if version.startswith(VERSION_PFX): + version = version[len(VERSION_PFX):] + else: + version = '' + # get first 3 positions of the git version becasue + # on windows it is x.y.z.windows.t, and this parses as + # LegacyVersion which always smaller than a Version. + version = '.'.join(version.split('.')[:3]) + return parse_version(version) + + def export(self, location): + """Export the Git repository at the url to the destination location""" + temp_dir = tempfile.mkdtemp('-export', 'pip-') + self.unpack(temp_dir) + try: + if not location.endswith('/'): + location = location + '/' + self.run_command( + ['checkout-index', '-a', '-f', '--prefix', location], + show_stdout=False, cwd=temp_dir) + finally: + rmtree(temp_dir) + + def check_rev_options(self, rev, dest, rev_options): + """Check the revision options before checkout to compensate that tags + and branches may need origin/ as a prefix. + Returns the SHA1 of the branch or tag if found. + """ + revisions = self.get_short_refs(dest) + + origin_rev = 'origin/%s' % rev + if origin_rev in revisions: + # remote branch + return [revisions[origin_rev]] + elif rev in revisions: + # a local tag or branch name + return [revisions[rev]] + else: + logger.warning( + "Could not find a tag or branch '%s', assuming commit.", rev, + ) + return rev_options + + def check_version(self, dest, rev_options): + """ + Compare the current sha to the ref. ref may be a branch or tag name, + but current rev will always point to a sha. This means that a branch + or tag will never compare as True. So this ultimately only matches + against exact shas. + """ + return self.get_revision(dest).startswith(rev_options[0]) + + def switch(self, dest, url, rev_options): + self.run_command(['config', 'remote.origin.url', url], cwd=dest) + self.run_command(['checkout', '-q'] + rev_options, cwd=dest) + + self.update_submodules(dest) + + def update(self, dest, rev_options): + # First fetch changes from the default remote + if self.get_git_version() >= parse_version('1.9.0'): + # fetch tags in addition to everything else + self.run_command(['fetch', '-q', '--tags'], cwd=dest) + else: + self.run_command(['fetch', '-q'], cwd=dest) + # Then reset to wanted revision (maybe even origin/master) + if rev_options: + rev_options = self.check_rev_options( + rev_options[0], dest, rev_options, + ) + self.run_command(['reset', '--hard', '-q'] + rev_options, cwd=dest) + #: update submodules + self.update_submodules(dest) + + def obtain(self, dest): + url, rev = self.get_url_rev() + if rev: + rev_options = [rev] + rev_display = ' (to %s)' % rev + else: + rev_options = ['origin/master'] + rev_display = '' + if self.check_destination(dest, url, rev_options, rev_display): + logger.info( + 'Cloning %s%s to %s', url, rev_display, display_path(dest), + ) + self.run_command(['clone', '-q', url, dest]) + + if rev: + rev_options = self.check_rev_options(rev, dest, rev_options) + # Only do a checkout if rev_options differs from HEAD + if not self.check_version(dest, rev_options): + self.run_command( + ['checkout', '-q'] + rev_options, + cwd=dest, + ) + #: repo may contain submodules + self.update_submodules(dest) + + def get_url(self, location): + """Return URL of the first remote encountered.""" + remotes = self.run_command( + ['config', '--get-regexp', 'remote\..*\.url'], + show_stdout=False, cwd=location) + remotes = remotes.splitlines() + found_remote = remotes[0] + for remote in remotes: + if remote.startswith('remote.origin.url '): + found_remote = remote + break + url = found_remote.split(' ')[1] + return url.strip() + + def get_revision(self, location): + current_rev = self.run_command( + ['rev-parse', 'HEAD'], show_stdout=False, cwd=location) + return current_rev.strip() + + def get_full_refs(self, location): + """Yields tuples of (commit, ref) for branches and tags""" + output = self.run_command(['show-ref'], + show_stdout=False, cwd=location) + for line in output.strip().splitlines(): + commit, ref = line.split(' ', 1) + yield commit.strip(), ref.strip() + + def is_ref_remote(self, ref): + return ref.startswith('refs/remotes/') + + def is_ref_branch(self, ref): + return ref.startswith('refs/heads/') + + def is_ref_tag(self, ref): + return ref.startswith('refs/tags/') + + def is_ref_commit(self, ref): + """A ref is a commit sha if it is not anything else""" + return not any(( + self.is_ref_remote(ref), + self.is_ref_branch(ref), + self.is_ref_tag(ref), + )) + + # Should deprecate `get_refs` since it's ambiguous + def get_refs(self, location): + return self.get_short_refs(location) + + def get_short_refs(self, location): + """Return map of named refs (branches or tags) to commit hashes.""" + rv = {} + for commit, ref in self.get_full_refs(location): + ref_name = None + if self.is_ref_remote(ref): + ref_name = ref[len('refs/remotes/'):] + elif self.is_ref_branch(ref): + ref_name = ref[len('refs/heads/'):] + elif self.is_ref_tag(ref): + ref_name = ref[len('refs/tags/'):] + if ref_name is not None: + rv[ref_name] = commit + return rv + + def _get_subdirectory(self, location): + """Return the relative path of setup.py to the git repo root.""" + # find the repo root + git_dir = self.run_command(['rev-parse', '--git-dir'], + show_stdout=False, cwd=location).strip() + if not os.path.isabs(git_dir): + git_dir = os.path.join(location, git_dir) + root_dir = os.path.join(git_dir, '..') + # find setup.py + orig_location = location + while not os.path.exists(os.path.join(location, 'setup.py')): + last_location = location + location = os.path.dirname(location) + if location == last_location: + # We've traversed up to the root of the filesystem without + # finding setup.py + logger.warning( + "Could not find setup.py for directory %s (tried all " + "parent directories)", + orig_location, + ) + return None + # relative path of setup.py to repo root + if samefile(root_dir, location): + return None + return os.path.relpath(location, root_dir) + + def get_src_requirement(self, dist, location): + repo = self.get_url(location) + if not repo.lower().startswith('git:'): + repo = 'git+' + repo + egg_project_name = dist.egg_name().split('-', 1)[0] + if not repo: + return None + current_rev = self.get_revision(location) + req = '%s@%s#egg=%s' % (repo, current_rev, egg_project_name) + subdirectory = self._get_subdirectory(location) + if subdirectory: + req += '&subdirectory=' + subdirectory + return req + + def get_url_rev(self): + """ + Prefixes stub URLs like 'user@hostname:user/repo.git' with 'ssh://'. + That's required because although they use SSH they sometimes doesn't + work with a ssh:// scheme (e.g. Github). But we need a scheme for + parsing. Hence we remove it again afterwards and return it as a stub. + """ + if '://' not in self.url: + assert 'file:' not in self.url + self.url = self.url.replace('git+', 'git+ssh://') + url, rev = super(Git, self).get_url_rev() + url = url.replace('ssh://', '') + else: + url, rev = super(Git, self).get_url_rev() + + return url, rev + + def update_submodules(self, location): + if not os.path.exists(os.path.join(location, '.gitmodules')): + return + self.run_command( + ['submodule', 'update', '--init', '--recursive', '-q'], + cwd=location, + ) + + @classmethod + def controls_location(cls, location): + if super(Git, cls).controls_location(location): + return True + try: + r = cls().run_command(['rev-parse'], + cwd=location, + show_stdout=False, + on_returncode='ignore') + return not r + except BadCommand: + logger.debug("could not determine if %s is under git control " + "because git is not available", location) + return False + + +vcs.register(Git) diff --git a/week-0/day-3/my_todo_app/venvironment/lib/python3.6/site-packages/pip/vcs/mercurial.py b/week-0/day-3/my_todo_app/venvironment/lib/python3.6/site-packages/pip/vcs/mercurial.py new file mode 100644 index 00000000..1aa83b91 --- /dev/null +++ b/week-0/day-3/my_todo_app/venvironment/lib/python3.6/site-packages/pip/vcs/mercurial.py @@ -0,0 +1,103 @@ +from __future__ import absolute_import + +import logging +import os +import tempfile + +from pip.utils import display_path, rmtree +from pip.vcs import vcs, VersionControl +from pip.download import path_to_url +from pip._vendor.six.moves import configparser + + +logger = logging.getLogger(__name__) + + +class Mercurial(VersionControl): + name = 'hg' + dirname = '.hg' + repo_name = 'clone' + schemes = ('hg', 'hg+http', 'hg+https', 'hg+ssh', 'hg+static-http') + + def export(self, location): + """Export the Hg repository at the url to the destination location""" + temp_dir = tempfile.mkdtemp('-export', 'pip-') + self.unpack(temp_dir) + try: + self.run_command( + ['archive', location], show_stdout=False, cwd=temp_dir) + finally: + rmtree(temp_dir) + + def switch(self, dest, url, rev_options): + repo_config = os.path.join(dest, self.dirname, 'hgrc') + config = configparser.SafeConfigParser() + try: + config.read(repo_config) + config.set('paths', 'default', url) + with open(repo_config, 'w') as config_file: + config.write(config_file) + except (OSError, configparser.NoSectionError) as exc: + logger.warning( + 'Could not switch Mercurial repository to %s: %s', url, exc, + ) + else: + self.run_command(['update', '-q'] + rev_options, cwd=dest) + + def update(self, dest, rev_options): + self.run_command(['pull', '-q'], cwd=dest) + self.run_command(['update', '-q'] + rev_options, cwd=dest) + + def obtain(self, dest): + url, rev = self.get_url_rev() + if rev: + rev_options = [rev] + rev_display = ' (to revision %s)' % rev + else: + rev_options = [] + rev_display = '' + if self.check_destination(dest, url, rev_options, rev_display): + logger.info( + 'Cloning hg %s%s to %s', + url, + rev_display, + display_path(dest), + ) + self.run_command(['clone', '--noupdate', '-q', url, dest]) + self.run_command(['update', '-q'] + rev_options, cwd=dest) + + def get_url(self, location): + url = self.run_command( + ['showconfig', 'paths.default'], + show_stdout=False, cwd=location).strip() + if self._is_local_repository(url): + url = path_to_url(url) + return url.strip() + + def get_revision(self, location): + current_revision = self.run_command( + ['parents', '--template={rev}'], + show_stdout=False, cwd=location).strip() + return current_revision + + def get_revision_hash(self, location): + current_rev_hash = self.run_command( + ['parents', '--template={node}'], + show_stdout=False, cwd=location).strip() + return current_rev_hash + + def get_src_requirement(self, dist, location): + repo = self.get_url(location) + if not repo.lower().startswith('hg:'): + repo = 'hg+' + repo + egg_project_name = dist.egg_name().split('-', 1)[0] + if not repo: + return None + current_rev_hash = self.get_revision_hash(location) + return '%s@%s#egg=%s' % (repo, current_rev_hash, egg_project_name) + + def check_version(self, dest, rev_options): + """Always assume the versions don't match""" + return False + +vcs.register(Mercurial) diff --git a/week-0/day-3/my_todo_app/venvironment/lib/python3.6/site-packages/pip/vcs/subversion.py b/week-0/day-3/my_todo_app/venvironment/lib/python3.6/site-packages/pip/vcs/subversion.py new file mode 100644 index 00000000..4b231566 --- /dev/null +++ b/week-0/day-3/my_todo_app/venvironment/lib/python3.6/site-packages/pip/vcs/subversion.py @@ -0,0 +1,269 @@ +from __future__ import absolute_import + +import logging +import os +import re + +from pip._vendor.six.moves.urllib import parse as urllib_parse + +from pip.index import Link +from pip.utils import rmtree, display_path +from pip.utils.logging import indent_log +from pip.vcs import vcs, VersionControl + +_svn_xml_url_re = re.compile('url="([^"]+)"') +_svn_rev_re = re.compile('committed-rev="(\d+)"') +_svn_url_re = re.compile(r'URL: (.+)') +_svn_revision_re = re.compile(r'Revision: (.+)') +_svn_info_xml_rev_re = re.compile(r'\s*revision="(\d+)"') +_svn_info_xml_url_re = re.compile(r'<url>(.*)</url>') + + +logger = logging.getLogger(__name__) + + +class Subversion(VersionControl): + name = 'svn' + dirname = '.svn' + repo_name = 'checkout' + schemes = ('svn', 'svn+ssh', 'svn+http', 'svn+https', 'svn+svn') + + def get_info(self, location): + """Returns (url, revision), where both are strings""" + assert not location.rstrip('/').endswith(self.dirname), \ + 'Bad directory: %s' % location + output = self.run_command( + ['info', location], + show_stdout=False, + extra_environ={'LANG': 'C'}, + ) + match = _svn_url_re.search(output) + if not match: + logger.warning( + 'Cannot determine URL of svn checkout %s', + display_path(location), + ) + logger.debug('Output that cannot be parsed: \n%s', output) + return None, None + url = match.group(1).strip() + match = _svn_revision_re.search(output) + if not match: + logger.warning( + 'Cannot determine revision of svn checkout %s', + display_path(location), + ) + logger.debug('Output that cannot be parsed: \n%s', output) + return url, None + return url, match.group(1) + + def export(self, location): + """Export the svn repository at the url to the destination location""" + url, rev = self.get_url_rev() + rev_options = get_rev_options(url, rev) + url = self.remove_auth_from_url(url) + logger.info('Exporting svn repository %s to %s', url, location) + with indent_log(): + if os.path.exists(location): + # Subversion doesn't like to check out over an existing + # directory --force fixes this, but was only added in svn 1.5 + rmtree(location) + self.run_command( + ['export'] + rev_options + [url, location], + show_stdout=False) + + def switch(self, dest, url, rev_options): + self.run_command(['switch'] + rev_options + [url, dest]) + + def update(self, dest, rev_options): + self.run_command(['update'] + rev_options + [dest]) + + def obtain(self, dest): + url, rev = self.get_url_rev() + rev_options = get_rev_options(url, rev) + url = self.remove_auth_from_url(url) + if rev: + rev_display = ' (to revision %s)' % rev + else: + rev_display = '' + if self.check_destination(dest, url, rev_options, rev_display): + logger.info( + 'Checking out %s%s to %s', + url, + rev_display, + display_path(dest), + ) + self.run_command(['checkout', '-q'] + rev_options + [url, dest]) + + def get_location(self, dist, dependency_links): + for url in dependency_links: + egg_fragment = Link(url).egg_fragment + if not egg_fragment: + continue + if '-' in egg_fragment: + # FIXME: will this work when a package has - in the name? + key = '-'.join(egg_fragment.split('-')[:-1]).lower() + else: + key = egg_fragment + if key == dist.key: + return url.split('#', 1)[0] + return None + + def get_revision(self, location): + """ + Return the maximum revision for all files under a given location + """ + # Note: taken from setuptools.command.egg_info + revision = 0 + + for base, dirs, files in os.walk(location): + if self.dirname not in dirs: + dirs[:] = [] + continue # no sense walking uncontrolled subdirs + dirs.remove(self.dirname) + entries_fn = os.path.join(base, self.dirname, 'entries') + if not os.path.exists(entries_fn): + # FIXME: should we warn? + continue + + dirurl, localrev = self._get_svn_url_rev(base) + + if base == location: + base_url = dirurl + '/' # save the root url + elif not dirurl or not dirurl.startswith(base_url): + dirs[:] = [] + continue # not part of the same svn tree, skip it + revision = max(revision, localrev) + return revision + + def get_url_rev(self): + # hotfix the URL scheme after removing svn+ from svn+ssh:// readd it + url, rev = super(Subversion, self).get_url_rev() + if url.startswith('ssh://'): + url = 'svn+' + url + return url, rev + + def get_url(self, location): + # In cases where the source is in a subdirectory, not alongside + # setup.py we have to look up in the location until we find a real + # setup.py + orig_location = location + while not os.path.exists(os.path.join(location, 'setup.py')): + last_location = location + location = os.path.dirname(location) + if location == last_location: + # We've traversed up to the root of the filesystem without + # finding setup.py + logger.warning( + "Could not find setup.py for directory %s (tried all " + "parent directories)", + orig_location, + ) + return None + + return self._get_svn_url_rev(location)[0] + + def _get_svn_url_rev(self, location): + from pip.exceptions import InstallationError + + entries_path = os.path.join(location, self.dirname, 'entries') + if os.path.exists(entries_path): + with open(entries_path) as f: + data = f.read() + else: # subversion >= 1.7 does not have the 'entries' file + data = '' + + if (data.startswith('8') or + data.startswith('9') or + data.startswith('10')): + data = list(map(str.splitlines, data.split('\n\x0c\n'))) + del data[0][0] # get rid of the '8' + url = data[0][3] + revs = [int(d[9]) for d in data if len(d) > 9 and d[9]] + [0] + elif data.startswith('<?xml'): + match = _svn_xml_url_re.search(data) + if not match: + raise ValueError('Badly formatted data: %r' % data) + url = match.group(1) # get repository URL + revs = [int(m.group(1)) for m in _svn_rev_re.finditer(data)] + [0] + else: + try: + # subversion >= 1.7 + xml = self.run_command( + ['info', '--xml', location], + show_stdout=False, + ) + url = _svn_info_xml_url_re.search(xml).group(1) + revs = [ + int(m.group(1)) for m in _svn_info_xml_rev_re.finditer(xml) + ] + except InstallationError: + url, revs = None, [] + + if revs: + rev = max(revs) + else: + rev = 0 + + return url, rev + + def get_src_requirement(self, dist, location): + repo = self.get_url(location) + if repo is None: + return None + # FIXME: why not project name? + egg_project_name = dist.egg_name().split('-', 1)[0] + rev = self.get_revision(location) + return 'svn+%s@%s#egg=%s' % (repo, rev, egg_project_name) + + def check_version(self, dest, rev_options): + """Always assume the versions don't match""" + return False + + @staticmethod + def remove_auth_from_url(url): + # Return a copy of url with 'username:password@' removed. + # username/pass params are passed to subversion through flags + # and are not recognized in the url. + + # parsed url + purl = urllib_parse.urlsplit(url) + stripped_netloc = \ + purl.netloc.split('@')[-1] + + # stripped url + url_pieces = ( + purl.scheme, stripped_netloc, purl.path, purl.query, purl.fragment + ) + surl = urllib_parse.urlunsplit(url_pieces) + return surl + + +def get_rev_options(url, rev): + if rev: + rev_options = ['-r', rev] + else: + rev_options = [] + + r = urllib_parse.urlsplit(url) + if hasattr(r, 'username'): + # >= Python-2.5 + username, password = r.username, r.password + else: + netloc = r[1] + if '@' in netloc: + auth = netloc.split('@')[0] + if ':' in auth: + username, password = auth.split(':', 1) + else: + username, password = auth, None + else: + username, password = None, None + + if username: + rev_options += ['--username', username] + if password: + rev_options += ['--password', password] + return rev_options + + +vcs.register(Subversion) diff --git a/week-0/day-3/my_todo_app/venvironment/lib/python3.6/site-packages/pip/wheel.py b/week-0/day-3/my_todo_app/venvironment/lib/python3.6/site-packages/pip/wheel.py new file mode 100644 index 00000000..9ac9dffe --- /dev/null +++ b/week-0/day-3/my_todo_app/venvironment/lib/python3.6/site-packages/pip/wheel.py @@ -0,0 +1,853 @@ +""" +Support for installing and building the "wheel" binary package format. +""" +from __future__ import absolute_import + +import compileall +import csv +import errno +import functools +import hashlib +import logging +import os +import os.path +import re +import shutil +import stat +import sys +import tempfile +import warnings + +from base64 import urlsafe_b64encode +from email.parser import Parser + +from pip._vendor.six import StringIO + +import pip +from pip.compat import expanduser +from pip.download import path_to_url, unpack_url +from pip.exceptions import ( + InstallationError, InvalidWheelFilename, UnsupportedWheel) +from pip.locations import distutils_scheme, PIP_DELETE_MARKER_FILENAME +from pip import pep425tags +from pip.utils import ( + call_subprocess, ensure_dir, captured_stdout, rmtree, read_chunks, +) +from pip.utils.ui import open_spinner +from pip.utils.logging import indent_log +from pip.utils.setuptools_build import SETUPTOOLS_SHIM +from pip._vendor.distlib.scripts import ScriptMaker +from pip._vendor import pkg_resources +from pip._vendor.packaging.utils import canonicalize_name +from pip._vendor.six.moves import configparser + + +wheel_ext = '.whl' + +VERSION_COMPATIBLE = (1, 0) + + +logger = logging.getLogger(__name__) + + +class WheelCache(object): + """A cache of wheels for future installs.""" + + def __init__(self, cache_dir, format_control): + """Create a wheel cache. + + :param cache_dir: The root of the cache. + :param format_control: A pip.index.FormatControl object to limit + binaries being read from the cache. + """ + self._cache_dir = expanduser(cache_dir) if cache_dir else None + self._format_control = format_control + + def cached_wheel(self, link, package_name): + return cached_wheel( + self._cache_dir, link, self._format_control, package_name) + + +def _cache_for_link(cache_dir, link): + """ + Return a directory to store cached wheels in for link. + + Because there are M wheels for any one sdist, we provide a directory + to cache them in, and then consult that directory when looking up + cache hits. + + We only insert things into the cache if they have plausible version + numbers, so that we don't contaminate the cache with things that were not + unique. E.g. ./package might have dozens of installs done for it and build + a version of 0.0...and if we built and cached a wheel, we'd end up using + the same wheel even if the source has been edited. + + :param cache_dir: The cache_dir being used by pip. + :param link: The link of the sdist for which this will cache wheels. + """ + + # We want to generate an url to use as our cache key, we don't want to just + # re-use the URL because it might have other items in the fragment and we + # don't care about those. + key_parts = [link.url_without_fragment] + if link.hash_name is not None and link.hash is not None: + key_parts.append("=".join([link.hash_name, link.hash])) + key_url = "#".join(key_parts) + + # Encode our key url with sha224, we'll use this because it has similar + # security properties to sha256, but with a shorter total output (and thus + # less secure). However the differences don't make a lot of difference for + # our use case here. + hashed = hashlib.sha224(key_url.encode()).hexdigest() + + # We want to nest the directories some to prevent having a ton of top level + # directories where we might run out of sub directories on some FS. + parts = [hashed[:2], hashed[2:4], hashed[4:6], hashed[6:]] + + # Inside of the base location for cached wheels, expand our parts and join + # them all together. + return os.path.join(cache_dir, "wheels", *parts) + + +def cached_wheel(cache_dir, link, format_control, package_name): + if not cache_dir: + return link + if not link: + return link + if link.is_wheel: + return link + if not link.is_artifact: + return link + if not package_name: + return link + canonical_name = canonicalize_name(package_name) + formats = pip.index.fmt_ctl_formats(format_control, canonical_name) + if "binary" not in formats: + return link + root = _cache_for_link(cache_dir, link) + try: + wheel_names = os.listdir(root) + except OSError as e: + if e.errno in (errno.ENOENT, errno.ENOTDIR): + return link + raise + candidates = [] + for wheel_name in wheel_names: + try: + wheel = Wheel(wheel_name) + except InvalidWheelFilename: + continue + if not wheel.supported(): + # Built for a different python/arch/etc + continue + candidates.append((wheel.support_index_min(), wheel_name)) + if not candidates: + return link + candidates.sort() + path = os.path.join(root, candidates[0][1]) + return pip.index.Link(path_to_url(path)) + + +def rehash(path, algo='sha256', blocksize=1 << 20): + """Return (hash, length) for path using hashlib.new(algo)""" + h = hashlib.new(algo) + length = 0 + with open(path, 'rb') as f: + for block in read_chunks(f, size=blocksize): + length += len(block) + h.update(block) + digest = 'sha256=' + urlsafe_b64encode( + h.digest() + ).decode('latin1').rstrip('=') + return (digest, length) + + +def open_for_csv(name, mode): + if sys.version_info[0] < 3: + nl = {} + bin = 'b' + else: + nl = {'newline': ''} + bin = '' + return open(name, mode + bin, **nl) + + +def fix_script(path): + """Replace #!python with #!/path/to/python + Return True if file was changed.""" + # XXX RECORD hashes will need to be updated + if os.path.isfile(path): + with open(path, 'rb') as script: + firstline = script.readline() + if not firstline.startswith(b'#!python'): + return False + exename = sys.executable.encode(sys.getfilesystemencoding()) + firstline = b'#!' + exename + os.linesep.encode("ascii") + rest = script.read() + with open(path, 'wb') as script: + script.write(firstline) + script.write(rest) + return True + +dist_info_re = re.compile(r"""^(?P<namever>(?P<name>.+?)(-(?P<ver>\d.+?))?) + \.dist-info$""", re.VERBOSE) + + +def root_is_purelib(name, wheeldir): + """ + Return True if the extracted wheel in wheeldir should go into purelib. + """ + name_folded = name.replace("-", "_") + for item in os.listdir(wheeldir): + match = dist_info_re.match(item) + if match and match.group('name') == name_folded: + with open(os.path.join(wheeldir, item, 'WHEEL')) as wheel: + for line in wheel: + line = line.lower().rstrip() + if line == "root-is-purelib: true": + return True + return False + + +def get_entrypoints(filename): + if not os.path.exists(filename): + return {}, {} + + # This is done because you can pass a string to entry_points wrappers which + # means that they may or may not be valid INI files. The attempt here is to + # strip leading and trailing whitespace in order to make them valid INI + # files. + with open(filename) as fp: + data = StringIO() + for line in fp: + data.write(line.strip()) + data.write("\n") + data.seek(0) + + cp = configparser.RawConfigParser() + cp.optionxform = lambda option: option + cp.readfp(data) + + console = {} + gui = {} + if cp.has_section('console_scripts'): + console = dict(cp.items('console_scripts')) + if cp.has_section('gui_scripts'): + gui = dict(cp.items('gui_scripts')) + return console, gui + + +def move_wheel_files(name, req, wheeldir, user=False, home=None, root=None, + pycompile=True, scheme=None, isolated=False, prefix=None): + """Install a wheel""" + + if not scheme: + scheme = distutils_scheme( + name, user=user, home=home, root=root, isolated=isolated, + prefix=prefix, + ) + + if root_is_purelib(name, wheeldir): + lib_dir = scheme['purelib'] + else: + lib_dir = scheme['platlib'] + + info_dir = [] + data_dirs = [] + source = wheeldir.rstrip(os.path.sep) + os.path.sep + + # Record details of the files moved + # installed = files copied from the wheel to the destination + # changed = files changed while installing (scripts #! line typically) + # generated = files newly generated during the install (script wrappers) + installed = {} + changed = set() + generated = [] + + # Compile all of the pyc files that we're going to be installing + if pycompile: + with captured_stdout() as stdout: + with warnings.catch_warnings(): + warnings.filterwarnings('ignore') + compileall.compile_dir(source, force=True, quiet=True) + logger.debug(stdout.getvalue()) + + def normpath(src, p): + return os.path.relpath(src, p).replace(os.path.sep, '/') + + def record_installed(srcfile, destfile, modified=False): + """Map archive RECORD paths to installation RECORD paths.""" + oldpath = normpath(srcfile, wheeldir) + newpath = normpath(destfile, lib_dir) + installed[oldpath] = newpath + if modified: + changed.add(destfile) + + def clobber(source, dest, is_base, fixer=None, filter=None): + ensure_dir(dest) # common for the 'include' path + + for dir, subdirs, files in os.walk(source): + basedir = dir[len(source):].lstrip(os.path.sep) + destdir = os.path.join(dest, basedir) + if is_base and basedir.split(os.path.sep, 1)[0].endswith('.data'): + continue + for s in subdirs: + destsubdir = os.path.join(dest, basedir, s) + if is_base and basedir == '' and destsubdir.endswith('.data'): + data_dirs.append(s) + continue + elif (is_base and + s.endswith('.dist-info') and + canonicalize_name(s).startswith( + canonicalize_name(req.name))): + assert not info_dir, ('Multiple .dist-info directories: ' + + destsubdir + ', ' + + ', '.join(info_dir)) + info_dir.append(destsubdir) + for f in files: + # Skip unwanted files + if filter and filter(f): + continue + srcfile = os.path.join(dir, f) + destfile = os.path.join(dest, basedir, f) + # directory creation is lazy and after the file filtering above + # to ensure we don't install empty dirs; empty dirs can't be + # uninstalled. + ensure_dir(destdir) + + # We use copyfile (not move, copy, or copy2) to be extra sure + # that we are not moving directories over (copyfile fails for + # directories) as well as to ensure that we are not copying + # over any metadata because we want more control over what + # metadata we actually copy over. + shutil.copyfile(srcfile, destfile) + + # Copy over the metadata for the file, currently this only + # includes the atime and mtime. + st = os.stat(srcfile) + if hasattr(os, "utime"): + os.utime(destfile, (st.st_atime, st.st_mtime)) + + # If our file is executable, then make our destination file + # executable. + if os.access(srcfile, os.X_OK): + st = os.stat(srcfile) + permissions = ( + st.st_mode | stat.S_IXUSR | stat.S_IXGRP | stat.S_IXOTH + ) + os.chmod(destfile, permissions) + + changed = False + if fixer: + changed = fixer(destfile) + record_installed(srcfile, destfile, changed) + + clobber(source, lib_dir, True) + + assert info_dir, "%s .dist-info directory not found" % req + + # Get the defined entry points + ep_file = os.path.join(info_dir[0], 'entry_points.txt') + console, gui = get_entrypoints(ep_file) + + def is_entrypoint_wrapper(name): + # EP, EP.exe and EP-script.py are scripts generated for + # entry point EP by setuptools + if name.lower().endswith('.exe'): + matchname = name[:-4] + elif name.lower().endswith('-script.py'): + matchname = name[:-10] + elif name.lower().endswith(".pya"): + matchname = name[:-4] + else: + matchname = name + # Ignore setuptools-generated scripts + return (matchname in console or matchname in gui) + + for datadir in data_dirs: + fixer = None + filter = None + for subdir in os.listdir(os.path.join(wheeldir, datadir)): + fixer = None + if subdir == 'scripts': + fixer = fix_script + filter = is_entrypoint_wrapper + source = os.path.join(wheeldir, datadir, subdir) + dest = scheme[subdir] + clobber(source, dest, False, fixer=fixer, filter=filter) + + maker = ScriptMaker(None, scheme['scripts']) + + # Ensure old scripts are overwritten. + # See https://github.com/pypa/pip/issues/1800 + maker.clobber = True + + # Ensure we don't generate any variants for scripts because this is almost + # never what somebody wants. + # See https://bitbucket.org/pypa/distlib/issue/35/ + maker.variants = set(('', )) + + # This is required because otherwise distlib creates scripts that are not + # executable. + # See https://bitbucket.org/pypa/distlib/issue/32/ + maker.set_mode = True + + # Simplify the script and fix the fact that the default script swallows + # every single stack trace. + # See https://bitbucket.org/pypa/distlib/issue/34/ + # See https://bitbucket.org/pypa/distlib/issue/33/ + def _get_script_text(entry): + if entry.suffix is None: + raise InstallationError( + "Invalid script entry point: %s for req: %s - A callable " + "suffix is required. Cf https://packaging.python.org/en/" + "latest/distributing.html#console-scripts for more " + "information." % (entry, req) + ) + return maker.script_template % { + "module": entry.prefix, + "import_name": entry.suffix.split(".")[0], + "func": entry.suffix, + } + + maker._get_script_text = _get_script_text + maker.script_template = """# -*- coding: utf-8 -*- +import re +import sys + +from %(module)s import %(import_name)s + +if __name__ == '__main__': + sys.argv[0] = re.sub(r'(-script\.pyw?|\.exe)?$', '', sys.argv[0]) + sys.exit(%(func)s()) +""" + + # Special case pip and setuptools to generate versioned wrappers + # + # The issue is that some projects (specifically, pip and setuptools) use + # code in setup.py to create "versioned" entry points - pip2.7 on Python + # 2.7, pip3.3 on Python 3.3, etc. But these entry points are baked into + # the wheel metadata at build time, and so if the wheel is installed with + # a *different* version of Python the entry points will be wrong. The + # correct fix for this is to enhance the metadata to be able to describe + # such versioned entry points, but that won't happen till Metadata 2.0 is + # available. + # In the meantime, projects using versioned entry points will either have + # incorrect versioned entry points, or they will not be able to distribute + # "universal" wheels (i.e., they will need a wheel per Python version). + # + # Because setuptools and pip are bundled with _ensurepip and virtualenv, + # we need to use universal wheels. So, as a stopgap until Metadata 2.0, we + # override the versioned entry points in the wheel and generate the + # correct ones. This code is purely a short-term measure until Metadata 2.0 + # is available. + # + # To add the level of hack in this section of code, in order to support + # ensurepip this code will look for an ``ENSUREPIP_OPTIONS`` environment + # variable which will control which version scripts get installed. + # + # ENSUREPIP_OPTIONS=altinstall + # - Only pipX.Y and easy_install-X.Y will be generated and installed + # ENSUREPIP_OPTIONS=install + # - pipX.Y, pipX, easy_install-X.Y will be generated and installed. Note + # that this option is technically if ENSUREPIP_OPTIONS is set and is + # not altinstall + # DEFAULT + # - The default behavior is to install pip, pipX, pipX.Y, easy_install + # and easy_install-X.Y. + pip_script = console.pop('pip', None) + if pip_script: + if "ENSUREPIP_OPTIONS" not in os.environ: + spec = 'pip = ' + pip_script + generated.extend(maker.make(spec)) + + if os.environ.get("ENSUREPIP_OPTIONS", "") != "altinstall": + spec = 'pip%s = %s' % (sys.version[:1], pip_script) + generated.extend(maker.make(spec)) + + spec = 'pip%s = %s' % (sys.version[:3], pip_script) + generated.extend(maker.make(spec)) + # Delete any other versioned pip entry points + pip_ep = [k for k in console if re.match(r'pip(\d(\.\d)?)?$', k)] + for k in pip_ep: + del console[k] + easy_install_script = console.pop('easy_install', None) + if easy_install_script: + if "ENSUREPIP_OPTIONS" not in os.environ: + spec = 'easy_install = ' + easy_install_script + generated.extend(maker.make(spec)) + + spec = 'easy_install-%s = %s' % (sys.version[:3], easy_install_script) + generated.extend(maker.make(spec)) + # Delete any other versioned easy_install entry points + easy_install_ep = [ + k for k in console if re.match(r'easy_install(-\d\.\d)?$', k) + ] + for k in easy_install_ep: + del console[k] + + # Generate the console and GUI entry points specified in the wheel + if len(console) > 0: + generated.extend( + maker.make_multiple(['%s = %s' % kv for kv in console.items()]) + ) + if len(gui) > 0: + generated.extend( + maker.make_multiple( + ['%s = %s' % kv for kv in gui.items()], + {'gui': True} + ) + ) + + # Record pip as the installer + installer = os.path.join(info_dir[0], 'INSTALLER') + temp_installer = os.path.join(info_dir[0], 'INSTALLER.pip') + with open(temp_installer, 'wb') as installer_file: + installer_file.write(b'pip\n') + shutil.move(temp_installer, installer) + generated.append(installer) + + # Record details of all files installed + record = os.path.join(info_dir[0], 'RECORD') + temp_record = os.path.join(info_dir[0], 'RECORD.pip') + with open_for_csv(record, 'r') as record_in: + with open_for_csv(temp_record, 'w+') as record_out: + reader = csv.reader(record_in) + writer = csv.writer(record_out) + for row in reader: + row[0] = installed.pop(row[0], row[0]) + if row[0] in changed: + row[1], row[2] = rehash(row[0]) + writer.writerow(row) + for f in generated: + h, l = rehash(f) + writer.writerow((normpath(f, lib_dir), h, l)) + for f in installed: + writer.writerow((installed[f], '', '')) + shutil.move(temp_record, record) + + +def _unique(fn): + @functools.wraps(fn) + def unique(*args, **kw): + seen = set() + for item in fn(*args, **kw): + if item not in seen: + seen.add(item) + yield item + return unique + + +# TODO: this goes somewhere besides the wheel module +@_unique +def uninstallation_paths(dist): + """ + Yield all the uninstallation paths for dist based on RECORD-without-.pyc + + Yield paths to all the files in RECORD. For each .py file in RECORD, add + the .pyc in the same directory. + + UninstallPathSet.add() takes care of the __pycache__ .pyc. + """ + from pip.utils import FakeFile # circular import + r = csv.reader(FakeFile(dist.get_metadata_lines('RECORD'))) + for row in r: + path = os.path.join(dist.location, row[0]) + yield path + if path.endswith('.py'): + dn, fn = os.path.split(path) + base = fn[:-3] + path = os.path.join(dn, base + '.pyc') + yield path + + +def wheel_version(source_dir): + """ + Return the Wheel-Version of an extracted wheel, if possible. + + Otherwise, return False if we couldn't parse / extract it. + """ + try: + dist = [d for d in pkg_resources.find_on_path(None, source_dir)][0] + + wheel_data = dist.get_metadata('WHEEL') + wheel_data = Parser().parsestr(wheel_data) + + version = wheel_data['Wheel-Version'].strip() + version = tuple(map(int, version.split('.'))) + return version + except: + return False + + +def check_compatibility(version, name): + """ + Raises errors or warns if called with an incompatible Wheel-Version. + + Pip should refuse to install a Wheel-Version that's a major series + ahead of what it's compatible with (e.g 2.0 > 1.1); and warn when + installing a version only minor version ahead (e.g 1.2 > 1.1). + + version: a 2-tuple representing a Wheel-Version (Major, Minor) + name: name of wheel or package to raise exception about + + :raises UnsupportedWheel: when an incompatible Wheel-Version is given + """ + if not version: + raise UnsupportedWheel( + "%s is in an unsupported or invalid wheel" % name + ) + if version[0] > VERSION_COMPATIBLE[0]: + raise UnsupportedWheel( + "%s's Wheel-Version (%s) is not compatible with this version " + "of pip" % (name, '.'.join(map(str, version))) + ) + elif version > VERSION_COMPATIBLE: + logger.warning( + 'Installing from a newer Wheel-Version (%s)', + '.'.join(map(str, version)), + ) + + +class Wheel(object): + """A wheel file""" + + # TODO: maybe move the install code into this class + + wheel_file_re = re.compile( + r"""^(?P<namever>(?P<name>.+?)-(?P<ver>\d.*?)) + ((-(?P<build>\d.*?))?-(?P<pyver>.+?)-(?P<abi>.+?)-(?P<plat>.+?) + \.whl|\.dist-info)$""", + re.VERBOSE + ) + + def __init__(self, filename): + """ + :raises InvalidWheelFilename: when the filename is invalid for a wheel + """ + wheel_info = self.wheel_file_re.match(filename) + if not wheel_info: + raise InvalidWheelFilename( + "%s is not a valid wheel filename." % filename + ) + self.filename = filename + self.name = wheel_info.group('name').replace('_', '-') + # we'll assume "_" means "-" due to wheel naming scheme + # (https://github.com/pypa/pip/issues/1150) + self.version = wheel_info.group('ver').replace('_', '-') + self.pyversions = wheel_info.group('pyver').split('.') + self.abis = wheel_info.group('abi').split('.') + self.plats = wheel_info.group('plat').split('.') + + # All the tag combinations from this file + self.file_tags = set( + (x, y, z) for x in self.pyversions + for y in self.abis for z in self.plats + ) + + def support_index_min(self, tags=None): + """ + Return the lowest index that one of the wheel's file_tag combinations + achieves in the supported_tags list e.g. if there are 8 supported tags, + and one of the file tags is first in the list, then return 0. Returns + None is the wheel is not supported. + """ + if tags is None: # for mock + tags = pep425tags.supported_tags + indexes = [tags.index(c) for c in self.file_tags if c in tags] + return min(indexes) if indexes else None + + def supported(self, tags=None): + """Is this wheel supported on this system?""" + if tags is None: # for mock + tags = pep425tags.supported_tags + return bool(set(tags).intersection(self.file_tags)) + + +class WheelBuilder(object): + """Build wheels from a RequirementSet.""" + + def __init__(self, requirement_set, finder, build_options=None, + global_options=None): + self.requirement_set = requirement_set + self.finder = finder + self._cache_root = requirement_set._wheel_cache._cache_dir + self._wheel_dir = requirement_set.wheel_download_dir + self.build_options = build_options or [] + self.global_options = global_options or [] + + def _build_one(self, req, output_dir, python_tag=None): + """Build one wheel. + + :return: The filename of the built wheel, or None if the build failed. + """ + tempd = tempfile.mkdtemp('pip-wheel-') + try: + if self.__build_one(req, tempd, python_tag=python_tag): + try: + wheel_name = os.listdir(tempd)[0] + wheel_path = os.path.join(output_dir, wheel_name) + shutil.move(os.path.join(tempd, wheel_name), wheel_path) + logger.info('Stored in directory: %s', output_dir) + return wheel_path + except: + pass + # Ignore return, we can't do anything else useful. + self._clean_one(req) + return None + finally: + rmtree(tempd) + + def _base_setup_args(self, req): + return [ + sys.executable, "-u", '-c', + SETUPTOOLS_SHIM % req.setup_py + ] + list(self.global_options) + + def __build_one(self, req, tempd, python_tag=None): + base_args = self._base_setup_args(req) + + spin_message = 'Running setup.py bdist_wheel for %s' % (req.name,) + with open_spinner(spin_message) as spinner: + logger.debug('Destination directory: %s', tempd) + wheel_args = base_args + ['bdist_wheel', '-d', tempd] \ + + self.build_options + + if python_tag is not None: + wheel_args += ["--python-tag", python_tag] + + try: + call_subprocess(wheel_args, cwd=req.setup_py_dir, + show_stdout=False, spinner=spinner) + return True + except: + spinner.finish("error") + logger.error('Failed building wheel for %s', req.name) + return False + + def _clean_one(self, req): + base_args = self._base_setup_args(req) + + logger.info('Running setup.py clean for %s', req.name) + clean_args = base_args + ['clean', '--all'] + try: + call_subprocess(clean_args, cwd=req.source_dir, show_stdout=False) + return True + except: + logger.error('Failed cleaning build dir for %s', req.name) + return False + + def build(self, autobuilding=False): + """Build wheels. + + :param unpack: If True, replace the sdist we built from with the + newly built wheel, in preparation for installation. + :return: True if all the wheels built correctly. + """ + assert self._wheel_dir or (autobuilding and self._cache_root) + # unpack sdists and constructs req set + self.requirement_set.prepare_files(self.finder) + + reqset = self.requirement_set.requirements.values() + + buildset = [] + for req in reqset: + if req.constraint: + continue + if req.is_wheel: + if not autobuilding: + logger.info( + 'Skipping %s, due to already being wheel.', req.name) + elif autobuilding and req.editable: + pass + elif autobuilding and req.link and not req.link.is_artifact: + pass + elif autobuilding and not req.source_dir: + pass + else: + if autobuilding: + link = req.link + base, ext = link.splitext() + if pip.index.egg_info_matches(base, None, link) is None: + # Doesn't look like a package - don't autobuild a wheel + # because we'll have no way to lookup the result sanely + continue + if "binary" not in pip.index.fmt_ctl_formats( + self.finder.format_control, + canonicalize_name(req.name)): + logger.info( + "Skipping bdist_wheel for %s, due to binaries " + "being disabled for it.", req.name) + continue + buildset.append(req) + + if not buildset: + return True + + # Build the wheels. + logger.info( + 'Building wheels for collected packages: %s', + ', '.join([req.name for req in buildset]), + ) + with indent_log(): + build_success, build_failure = [], [] + for req in buildset: + python_tag = None + if autobuilding: + python_tag = pep425tags.implementation_tag + output_dir = _cache_for_link(self._cache_root, req.link) + try: + ensure_dir(output_dir) + except OSError as e: + logger.warning("Building wheel for %s failed: %s", + req.name, e) + build_failure.append(req) + continue + else: + output_dir = self._wheel_dir + wheel_file = self._build_one( + req, output_dir, + python_tag=python_tag, + ) + if wheel_file: + build_success.append(req) + if autobuilding: + # XXX: This is mildly duplicative with prepare_files, + # but not close enough to pull out to a single common + # method. + # The code below assumes temporary source dirs - + # prevent it doing bad things. + if req.source_dir and not os.path.exists(os.path.join( + req.source_dir, PIP_DELETE_MARKER_FILENAME)): + raise AssertionError( + "bad source dir - missing marker") + # Delete the source we built the wheel from + req.remove_temporary_source() + # set the build directory again - name is known from + # the work prepare_files did. + req.source_dir = req.build_location( + self.requirement_set.build_dir) + # Update the link for this. + req.link = pip.index.Link( + path_to_url(wheel_file)) + assert req.link.is_wheel + # extract the wheel into the dir + unpack_url( + req.link, req.source_dir, None, False, + session=self.requirement_set.session) + else: + build_failure.append(req) + + # notify success/failure + if build_success: + logger.info( + 'Successfully built %s', + ' '.join([req.name for req in build_success]), + ) + if build_failure: + logger.info( + 'Failed to build %s', + ' '.join([req.name for req in build_failure]), + ) + # Return True if all builds were successful + return len(build_failure) == 0 diff --git a/week-0/day-3/my_todo_app/venvironment/lib/python3.6/site-packages/pkg_resources-0.0.0.dist-info/DESCRIPTION.rst b/week-0/day-3/my_todo_app/venvironment/lib/python3.6/site-packages/pkg_resources-0.0.0.dist-info/DESCRIPTION.rst new file mode 100644 index 00000000..e1187231 --- /dev/null +++ b/week-0/day-3/my_todo_app/venvironment/lib/python3.6/site-packages/pkg_resources-0.0.0.dist-info/DESCRIPTION.rst @@ -0,0 +1,3 @@ +UNKNOWN + + diff --git a/week-0/day-3/my_todo_app/venvironment/lib/python3.6/site-packages/pkg_resources-0.0.0.dist-info/INSTALLER b/week-0/day-3/my_todo_app/venvironment/lib/python3.6/site-packages/pkg_resources-0.0.0.dist-info/INSTALLER new file mode 100644 index 00000000..a1b589e3 --- /dev/null +++ b/week-0/day-3/my_todo_app/venvironment/lib/python3.6/site-packages/pkg_resources-0.0.0.dist-info/INSTALLER @@ -0,0 +1 @@ +pip diff --git a/week-0/day-3/my_todo_app/venvironment/lib/python3.6/site-packages/pkg_resources-0.0.0.dist-info/METADATA b/week-0/day-3/my_todo_app/venvironment/lib/python3.6/site-packages/pkg_resources-0.0.0.dist-info/METADATA new file mode 100644 index 00000000..7a504873 --- /dev/null +++ b/week-0/day-3/my_todo_app/venvironment/lib/python3.6/site-packages/pkg_resources-0.0.0.dist-info/METADATA @@ -0,0 +1,13 @@ +Metadata-Version: 2.0 +Name: pkg_resources +Version: 0.0.0 +Summary: UNKNOWN +Home-page: UNKNOWN +Author: UNKNOWN +Author-email: UNKNOWN +License: UNKNOWN +Platform: UNKNOWN + +UNKNOWN + + diff --git a/week-0/day-3/my_todo_app/venvironment/lib/python3.6/site-packages/pkg_resources-0.0.0.dist-info/RECORD b/week-0/day-3/my_todo_app/venvironment/lib/python3.6/site-packages/pkg_resources-0.0.0.dist-info/RECORD new file mode 100644 index 00000000..8dad74db --- /dev/null +++ b/week-0/day-3/my_todo_app/venvironment/lib/python3.6/site-packages/pkg_resources-0.0.0.dist-info/RECORD @@ -0,0 +1,38 @@ +pkg_resources/__init__.py,sha256=YQ4_WQnPztMsUy1yuvp7ZRBPK9IhOyhgosLpvkFso1I,103551 +pkg_resources/py31compat.py,sha256=-ysVqoxLetAnL94uM0kHkomKQTC1JZLN2ZUjqUhMeKE,600 +pkg_resources/_vendor/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0 +pkg_resources/_vendor/appdirs.py,sha256=mExjXejqnz0UifNzjccc-yJ8JS0TfAW0gXuikOdDQLU,22376 +pkg_resources/_vendor/pyparsing.py,sha256=LTlkTtpPBJ0ypOyi---Es1IvmxfI_vh28VJEh27qY8I,229871 +pkg_resources/_vendor/six.py,sha256=A6hdJZVjI3t_geebZ9BzUvwRrIXo0lfwzQlM2LcKyas,30098 +pkg_resources/_vendor/packaging/__about__.py,sha256=zkcCPTN_6TcLW0Nrlg0176-R1QQ_WVPTm8sz1R4-HjM,720 +pkg_resources/_vendor/packaging/__init__.py,sha256=_vNac5TrzwsrzbOFIbF-5cHqc_Y2aPT2D7zrIR06BOo,513 +pkg_resources/_vendor/packaging/_compat.py,sha256=Vi_A0rAQeHbU-a9X0tt1yQm9RqkgQbDSxzRw8WlU9kA,860 +pkg_resources/_vendor/packaging/_structures.py,sha256=RImECJ4c_wTlaTYYwZYLHEiebDMaAJmK1oPARhw1T5o,1416 +pkg_resources/_vendor/packaging/markers.py,sha256=uEcBBtGvzqltgnArqb9c4RrcInXezDLos14zbBHhWJo,8248 +pkg_resources/_vendor/packaging/requirements.py,sha256=SikL2UynbsT0qtY9ltqngndha_sfo0w6XGFhAhoSoaQ,4355 +pkg_resources/_vendor/packaging/specifiers.py,sha256=SAMRerzO3fK2IkFZCaZkuwZaL_EGqHNOz4pni4vhnN0,28025 +pkg_resources/_vendor/packaging/utils.py,sha256=3m6WvPm6NNxE8rkTGmn0r75B_GZSGg7ikafxHsBN1WA,421 +pkg_resources/_vendor/packaging/version.py,sha256=OwGnxYfr2ghNzYx59qWIBkrK3SnB6n-Zfd1XaLpnnM0,11556 +pkg_resources/extern/__init__.py,sha256=JUtlHHvlxHSNuB4pWqNjcx7n6kG-fwXg7qmJ2zNJlIY,2487 +pkg_resources-0.0.0.dist-info/DESCRIPTION.rst,sha256=OCTuuN6LcWulhHS3d5rfjdsQtW22n7HENFRh6jC6ego,10 +pkg_resources-0.0.0.dist-info/METADATA,sha256=FOYDX6cmnDUkWo-yhqWQYtjKIMZR2IW2G1GFZhA6gUQ,177 +pkg_resources-0.0.0.dist-info/RECORD,, +pkg_resources-0.0.0.dist-info/WHEEL,sha256=kdsN-5OJAZIiHN-iO4Rhl82KyS0bDWf4uBwMbkNafr8,110 +pkg_resources-0.0.0.dist-info/metadata.json,sha256=jbGQ09fxsrPQMhbeLboAEDZERlOExjHIGENdQdPS6RU,221 +pkg_resources-0.0.0.dist-info/INSTALLER,sha256=zuuue4knoyJ-UwPPXg8fezS7VCrXJQrAP7zeNuwvFQg,4 +pkg_resources/_vendor/packaging/__pycache__/utils.cpython-36.pyc,, +pkg_resources/_vendor/packaging/__pycache__/_structures.cpython-36.pyc,, +pkg_resources/_vendor/packaging/__pycache__/version.cpython-36.pyc,, +pkg_resources/_vendor/packaging/__pycache__/markers.cpython-36.pyc,, +pkg_resources/_vendor/packaging/__pycache__/_compat.cpython-36.pyc,, +pkg_resources/_vendor/packaging/__pycache__/specifiers.cpython-36.pyc,, +pkg_resources/_vendor/packaging/__pycache__/__about__.cpython-36.pyc,, +pkg_resources/_vendor/packaging/__pycache__/requirements.cpython-36.pyc,, +pkg_resources/_vendor/packaging/__pycache__/__init__.cpython-36.pyc,, +pkg_resources/_vendor/__pycache__/six.cpython-36.pyc,, +pkg_resources/_vendor/__pycache__/pyparsing.cpython-36.pyc,, +pkg_resources/_vendor/__pycache__/appdirs.cpython-36.pyc,, +pkg_resources/_vendor/__pycache__/__init__.cpython-36.pyc,, +pkg_resources/__pycache__/py31compat.cpython-36.pyc,, +pkg_resources/__pycache__/__init__.cpython-36.pyc,, +pkg_resources/extern/__pycache__/__init__.cpython-36.pyc,, diff --git a/week-0/day-3/my_todo_app/venvironment/lib/python3.6/site-packages/pkg_resources-0.0.0.dist-info/WHEEL b/week-0/day-3/my_todo_app/venvironment/lib/python3.6/site-packages/pkg_resources-0.0.0.dist-info/WHEEL new file mode 100644 index 00000000..7332a419 --- /dev/null +++ b/week-0/day-3/my_todo_app/venvironment/lib/python3.6/site-packages/pkg_resources-0.0.0.dist-info/WHEEL @@ -0,0 +1,6 @@ +Wheel-Version: 1.0 +Generator: bdist_wheel (0.30.0) +Root-Is-Purelib: true +Tag: py2-none-any +Tag: py3-none-any + diff --git a/week-0/day-3/my_todo_app/venvironment/lib/python3.6/site-packages/pkg_resources-0.0.0.dist-info/metadata.json b/week-0/day-3/my_todo_app/venvironment/lib/python3.6/site-packages/pkg_resources-0.0.0.dist-info/metadata.json new file mode 100644 index 00000000..1069edb5 --- /dev/null +++ b/week-0/day-3/my_todo_app/venvironment/lib/python3.6/site-packages/pkg_resources-0.0.0.dist-info/metadata.json @@ -0,0 +1 @@ +{"extensions": {"python.details": {"document_names": {"description": "DESCRIPTION.rst"}}}, "generator": "bdist_wheel (0.30.0)", "metadata_version": "2.0", "name": "pkg_resources", "summary": "UNKNOWN", "version": "0.0.0"} \ No newline at end of file diff --git a/week-0/day-3/my_todo_app/venvironment/lib/python3.6/site-packages/pkg_resources/__init__.py b/week-0/day-3/my_todo_app/venvironment/lib/python3.6/site-packages/pkg_resources/__init__.py new file mode 100644 index 00000000..8d95bd29 --- /dev/null +++ b/week-0/day-3/my_todo_app/venvironment/lib/python3.6/site-packages/pkg_resources/__init__.py @@ -0,0 +1,3125 @@ +# coding: utf-8 +""" +Package resource API +-------------------- + +A resource is a logical file contained within a package, or a logical +subdirectory thereof. The package resource API expects resource names +to have their path parts separated with ``/``, *not* whatever the local +path separator is. Do not use os.path operations to manipulate resource +names being passed into the API. + +The package resource API is designed to work with normal filesystem packages, +.egg files, and unpacked .egg files. It can also work in a limited way with +.zip files and with custom PEP 302 loaders that support the ``get_data()`` +method. +""" + +from __future__ import absolute_import + +import sys +import os +import io +import time +import re +import types +import zipfile +import zipimport +import warnings +import stat +import functools +import pkgutil +import operator +import platform +import collections +import plistlib +import email.parser +import errno +import tempfile +import textwrap +import itertools +import inspect +from pkgutil import get_importer + +try: + import _imp +except ImportError: + # Python 3.2 compatibility + import imp as _imp + +from pkg_resources.extern import six +from pkg_resources.extern.six.moves import urllib, map, filter + +# capture these to bypass sandboxing +from os import utime +try: + from os import mkdir, rename, unlink + WRITE_SUPPORT = True +except ImportError: + # no write support, probably under GAE + WRITE_SUPPORT = False + +from os import open as os_open +from os.path import isdir, split + +try: + import importlib.machinery as importlib_machinery + # access attribute to force import under delayed import mechanisms. + importlib_machinery.__name__ +except ImportError: + importlib_machinery = None + +from . import py31compat +from pkg_resources.extern import appdirs +from pkg_resources.extern import packaging +__import__('pkg_resources.extern.packaging.version') +__import__('pkg_resources.extern.packaging.specifiers') +__import__('pkg_resources.extern.packaging.requirements') +__import__('pkg_resources.extern.packaging.markers') + + +if (3, 0) < sys.version_info < (3, 3): + raise RuntimeError("Python 3.3 or later is required") + +if six.PY2: + # Those builtin exceptions are only defined in Python 3 + PermissionError = None + NotADirectoryError = None + +# declare some globals that will be defined later to +# satisfy the linters. +require = None +working_set = None +add_activation_listener = None +resources_stream = None +cleanup_resources = None +resource_dir = None +resource_stream = None +set_extraction_path = None +resource_isdir = None +resource_string = None +iter_entry_points = None +resource_listdir = None +resource_filename = None +resource_exists = None +_distribution_finders = None +_namespace_handlers = None +_namespace_packages = None + + +class PEP440Warning(RuntimeWarning): + """ + Used when there is an issue with a version or specifier not complying with + PEP 440. + """ + + +def parse_version(v): + try: + return packaging.version.Version(v) + except packaging.version.InvalidVersion: + return packaging.version.LegacyVersion(v) + + +_state_vars = {} + + +def _declare_state(vartype, **kw): + globals().update(kw) + _state_vars.update(dict.fromkeys(kw, vartype)) + + +def __getstate__(): + state = {} + g = globals() + for k, v in _state_vars.items(): + state[k] = g['_sget_' + v](g[k]) + return state + + +def __setstate__(state): + g = globals() + for k, v in state.items(): + g['_sset_' + _state_vars[k]](k, g[k], v) + return state + + +def _sget_dict(val): + return val.copy() + + +def _sset_dict(key, ob, state): + ob.clear() + ob.update(state) + + +def _sget_object(val): + return val.__getstate__() + + +def _sset_object(key, ob, state): + ob.__setstate__(state) + + +_sget_none = _sset_none = lambda *args: None + + +def get_supported_platform(): + """Return this platform's maximum compatible version. + + distutils.util.get_platform() normally reports the minimum version + of Mac OS X that would be required to *use* extensions produced by + distutils. But what we want when checking compatibility is to know the + version of Mac OS X that we are *running*. To allow usage of packages that + explicitly require a newer version of Mac OS X, we must also know the + current version of the OS. + + If this condition occurs for any other platform with a version in its + platform strings, this function should be extended accordingly. + """ + plat = get_build_platform() + m = macosVersionString.match(plat) + if m is not None and sys.platform == "darwin": + try: + plat = 'macosx-%s-%s' % ('.'.join(_macosx_vers()[:2]), m.group(3)) + except ValueError: + # not Mac OS X + pass + return plat + + +__all__ = [ + # Basic resource access and distribution/entry point discovery + 'require', 'run_script', 'get_provider', 'get_distribution', + 'load_entry_point', 'get_entry_map', 'get_entry_info', + 'iter_entry_points', + 'resource_string', 'resource_stream', 'resource_filename', + 'resource_listdir', 'resource_exists', 'resource_isdir', + + # Environmental control + 'declare_namespace', 'working_set', 'add_activation_listener', + 'find_distributions', 'set_extraction_path', 'cleanup_resources', + 'get_default_cache', + + # Primary implementation classes + 'Environment', 'WorkingSet', 'ResourceManager', + 'Distribution', 'Requirement', 'EntryPoint', + + # Exceptions + 'ResolutionError', 'VersionConflict', 'DistributionNotFound', + 'UnknownExtra', 'ExtractionError', + + # Warnings + 'PEP440Warning', + + # Parsing functions and string utilities + 'parse_requirements', 'parse_version', 'safe_name', 'safe_version', + 'get_platform', 'compatible_platforms', 'yield_lines', 'split_sections', + 'safe_extra', 'to_filename', 'invalid_marker', 'evaluate_marker', + + # filesystem utilities + 'ensure_directory', 'normalize_path', + + # Distribution "precedence" constants + 'EGG_DIST', 'BINARY_DIST', 'SOURCE_DIST', 'CHECKOUT_DIST', 'DEVELOP_DIST', + + # "Provider" interfaces, implementations, and registration/lookup APIs + 'IMetadataProvider', 'IResourceProvider', 'FileMetadata', + 'PathMetadata', 'EggMetadata', 'EmptyProvider', 'empty_provider', + 'NullProvider', 'EggProvider', 'DefaultProvider', 'ZipProvider', + 'register_finder', 'register_namespace_handler', 'register_loader_type', + 'fixup_namespace_packages', 'get_importer', + + # Deprecated/backward compatibility only + 'run_main', 'AvailableDistributions', +] + + +class ResolutionError(Exception): + """Abstract base for dependency resolution errors""" + + def __repr__(self): + return self.__class__.__name__ + repr(self.args) + + +class VersionConflict(ResolutionError): + """ + An already-installed version conflicts with the requested version. + + Should be initialized with the installed Distribution and the requested + Requirement. + """ + + _template = "{self.dist} is installed but {self.req} is required" + + @property + def dist(self): + return self.args[0] + + @property + def req(self): + return self.args[1] + + def report(self): + return self._template.format(**locals()) + + def with_context(self, required_by): + """ + If required_by is non-empty, return a version of self that is a + ContextualVersionConflict. + """ + if not required_by: + return self + args = self.args + (required_by,) + return ContextualVersionConflict(*args) + + +class ContextualVersionConflict(VersionConflict): + """ + A VersionConflict that accepts a third parameter, the set of the + requirements that required the installed Distribution. + """ + + _template = VersionConflict._template + ' by {self.required_by}' + + @property + def required_by(self): + return self.args[2] + + +class DistributionNotFound(ResolutionError): + """A requested distribution was not found""" + + _template = ("The '{self.req}' distribution was not found " + "and is required by {self.requirers_str}") + + @property + def req(self): + return self.args[0] + + @property + def requirers(self): + return self.args[1] + + @property + def requirers_str(self): + if not self.requirers: + return 'the application' + return ', '.join(self.requirers) + + def report(self): + return self._template.format(**locals()) + + def __str__(self): + return self.report() + + +class UnknownExtra(ResolutionError): + """Distribution doesn't have an "extra feature" of the given name""" + + +_provider_factories = {} + +PY_MAJOR = sys.version[:3] +EGG_DIST = 3 +BINARY_DIST = 2 +SOURCE_DIST = 1 +CHECKOUT_DIST = 0 +DEVELOP_DIST = -1 + + +def register_loader_type(loader_type, provider_factory): + """Register `provider_factory` to make providers for `loader_type` + + `loader_type` is the type or class of a PEP 302 ``module.__loader__``, + and `provider_factory` is a function that, passed a *module* object, + returns an ``IResourceProvider`` for that module. + """ + _provider_factories[loader_type] = provider_factory + + +def get_provider(moduleOrReq): + """Return an IResourceProvider for the named module or requirement""" + if isinstance(moduleOrReq, Requirement): + return working_set.find(moduleOrReq) or require(str(moduleOrReq))[0] + try: + module = sys.modules[moduleOrReq] + except KeyError: + __import__(moduleOrReq) + module = sys.modules[moduleOrReq] + loader = getattr(module, '__loader__', None) + return _find_adapter(_provider_factories, loader)(module) + + +def _macosx_vers(_cache=[]): + if not _cache: + version = platform.mac_ver()[0] + # fallback for MacPorts + if version == '': + plist = '/System/Library/CoreServices/SystemVersion.plist' + if os.path.exists(plist): + if hasattr(plistlib, 'readPlist'): + plist_content = plistlib.readPlist(plist) + if 'ProductVersion' in plist_content: + version = plist_content['ProductVersion'] + + _cache.append(version.split('.')) + return _cache[0] + + +def _macosx_arch(machine): + return {'PowerPC': 'ppc', 'Power_Macintosh': 'ppc'}.get(machine, machine) + + +def get_build_platform(): + """Return this platform's string for platform-specific distributions + + XXX Currently this is the same as ``distutils.util.get_platform()``, but it + needs some hacks for Linux and Mac OS X. + """ + try: + # Python 2.7 or >=3.2 + from sysconfig import get_platform + except ImportError: + from distutils.util import get_platform + + plat = get_platform() + if sys.platform == "darwin" and not plat.startswith('macosx-'): + try: + version = _macosx_vers() + machine = os.uname()[4].replace(" ", "_") + return "macosx-%d.%d-%s" % ( + int(version[0]), int(version[1]), + _macosx_arch(machine), + ) + except ValueError: + # if someone is running a non-Mac darwin system, this will fall + # through to the default implementation + pass + return plat + + +macosVersionString = re.compile(r"macosx-(\d+)\.(\d+)-(.*)") +darwinVersionString = re.compile(r"darwin-(\d+)\.(\d+)\.(\d+)-(.*)") +# XXX backward compat +get_platform = get_build_platform + + +def compatible_platforms(provided, required): + """Can code for the `provided` platform run on the `required` platform? + + Returns true if either platform is ``None``, or the platforms are equal. + + XXX Needs compatibility checks for Linux and other unixy OSes. + """ + if provided is None or required is None or provided == required: + # easy case + return True + + # Mac OS X special cases + reqMac = macosVersionString.match(required) + if reqMac: + provMac = macosVersionString.match(provided) + + # is this a Mac package? + if not provMac: + # this is backwards compatibility for packages built before + # setuptools 0.6. All packages built after this point will + # use the new macosx designation. + provDarwin = darwinVersionString.match(provided) + if provDarwin: + dversion = int(provDarwin.group(1)) + macosversion = "%s.%s" % (reqMac.group(1), reqMac.group(2)) + if dversion == 7 and macosversion >= "10.3" or \ + dversion == 8 and macosversion >= "10.4": + return True + # egg isn't macosx or legacy darwin + return False + + # are they the same major version and machine type? + if provMac.group(1) != reqMac.group(1) or \ + provMac.group(3) != reqMac.group(3): + return False + + # is the required OS major update >= the provided one? + if int(provMac.group(2)) > int(reqMac.group(2)): + return False + + return True + + # XXX Linux and other platforms' special cases should go here + return False + + +def run_script(dist_spec, script_name): + """Locate distribution `dist_spec` and run its `script_name` script""" + ns = sys._getframe(1).f_globals + name = ns['__name__'] + ns.clear() + ns['__name__'] = name + require(dist_spec)[0].run_script(script_name, ns) + + +# backward compatibility +run_main = run_script + + +def get_distribution(dist): + """Return a current distribution object for a Requirement or string""" + if isinstance(dist, six.string_types): + dist = Requirement.parse(dist) + if isinstance(dist, Requirement): + dist = get_provider(dist) + if not isinstance(dist, Distribution): + raise TypeError("Expected string, Requirement, or Distribution", dist) + return dist + + +def load_entry_point(dist, group, name): + """Return `name` entry point of `group` for `dist` or raise ImportError""" + return get_distribution(dist).load_entry_point(group, name) + + +def get_entry_map(dist, group=None): + """Return the entry point map for `group`, or the full entry map""" + return get_distribution(dist).get_entry_map(group) + + +def get_entry_info(dist, group, name): + """Return the EntryPoint object for `group`+`name`, or ``None``""" + return get_distribution(dist).get_entry_info(group, name) + + +class IMetadataProvider: + def has_metadata(name): + """Does the package's distribution contain the named metadata?""" + + def get_metadata(name): + """The named metadata resource as a string""" + + def get_metadata_lines(name): + """Yield named metadata resource as list of non-blank non-comment lines + + Leading and trailing whitespace is stripped from each line, and lines + with ``#`` as the first non-blank character are omitted.""" + + def metadata_isdir(name): + """Is the named metadata a directory? (like ``os.path.isdir()``)""" + + def metadata_listdir(name): + """List of metadata names in the directory (like ``os.listdir()``)""" + + def run_script(script_name, namespace): + """Execute the named script in the supplied namespace dictionary""" + + +class IResourceProvider(IMetadataProvider): + """An object that provides access to package resources""" + + def get_resource_filename(manager, resource_name): + """Return a true filesystem path for `resource_name` + + `manager` must be an ``IResourceManager``""" + + def get_resource_stream(manager, resource_name): + """Return a readable file-like object for `resource_name` + + `manager` must be an ``IResourceManager``""" + + def get_resource_string(manager, resource_name): + """Return a string containing the contents of `resource_name` + + `manager` must be an ``IResourceManager``""" + + def has_resource(resource_name): + """Does the package contain the named resource?""" + + def resource_isdir(resource_name): + """Is the named resource a directory? (like ``os.path.isdir()``)""" + + def resource_listdir(resource_name): + """List of resource names in the directory (like ``os.listdir()``)""" + + +class WorkingSet(object): + """A collection of active distributions on sys.path (or a similar list)""" + + def __init__(self, entries=None): + """Create working set from list of path entries (default=sys.path)""" + self.entries = [] + self.entry_keys = {} + self.by_key = {} + self.callbacks = [] + + if entries is None: + entries = sys.path + + for entry in entries: + self.add_entry(entry) + + @classmethod + def _build_master(cls): + """ + Prepare the master working set. + """ + ws = cls() + try: + from __main__ import __requires__ + except ImportError: + # The main program does not list any requirements + return ws + + # ensure the requirements are met + try: + ws.require(__requires__) + except VersionConflict: + return cls._build_from_requirements(__requires__) + + return ws + + @classmethod + def _build_from_requirements(cls, req_spec): + """ + Build a working set from a requirement spec. Rewrites sys.path. + """ + # try it without defaults already on sys.path + # by starting with an empty path + ws = cls([]) + reqs = parse_requirements(req_spec) + dists = ws.resolve(reqs, Environment()) + for dist in dists: + ws.add(dist) + + # add any missing entries from sys.path + for entry in sys.path: + if entry not in ws.entries: + ws.add_entry(entry) + + # then copy back to sys.path + sys.path[:] = ws.entries + return ws + + def add_entry(self, entry): + """Add a path item to ``.entries``, finding any distributions on it + + ``find_distributions(entry, True)`` is used to find distributions + corresponding to the path entry, and they are added. `entry` is + always appended to ``.entries``, even if it is already present. + (This is because ``sys.path`` can contain the same value more than + once, and the ``.entries`` of the ``sys.path`` WorkingSet should always + equal ``sys.path``.) + """ + self.entry_keys.setdefault(entry, []) + self.entries.append(entry) + for dist in find_distributions(entry, True): + self.add(dist, entry, False) + + def __contains__(self, dist): + """True if `dist` is the active distribution for its project""" + return self.by_key.get(dist.key) == dist + + def find(self, req): + """Find a distribution matching requirement `req` + + If there is an active distribution for the requested project, this + returns it as long as it meets the version requirement specified by + `req`. But, if there is an active distribution for the project and it + does *not* meet the `req` requirement, ``VersionConflict`` is raised. + If there is no active distribution for the requested project, ``None`` + is returned. + """ + dist = self.by_key.get(req.key) + if dist is not None and dist not in req: + # XXX add more info + raise VersionConflict(dist, req) + return dist + + def iter_entry_points(self, group, name=None): + """Yield entry point objects from `group` matching `name` + + If `name` is None, yields all entry points in `group` from all + distributions in the working set, otherwise only ones matching + both `group` and `name` are yielded (in distribution order). + """ + for dist in self: + entries = dist.get_entry_map(group) + if name is None: + for ep in entries.values(): + yield ep + elif name in entries: + yield entries[name] + + def run_script(self, requires, script_name): + """Locate distribution for `requires` and run `script_name` script""" + ns = sys._getframe(1).f_globals + name = ns['__name__'] + ns.clear() + ns['__name__'] = name + self.require(requires)[0].run_script(script_name, ns) + + def __iter__(self): + """Yield distributions for non-duplicate projects in the working set + + The yield order is the order in which the items' path entries were + added to the working set. + """ + seen = {} + for item in self.entries: + if item not in self.entry_keys: + # workaround a cache issue + continue + + for key in self.entry_keys[item]: + if key not in seen: + seen[key] = 1 + yield self.by_key[key] + + def add(self, dist, entry=None, insert=True, replace=False): + """Add `dist` to working set, associated with `entry` + + If `entry` is unspecified, it defaults to the ``.location`` of `dist`. + On exit from this routine, `entry` is added to the end of the working + set's ``.entries`` (if it wasn't already present). + + `dist` is only added to the working set if it's for a project that + doesn't already have a distribution in the set, unless `replace=True`. + If it's added, any callbacks registered with the ``subscribe()`` method + will be called. + """ + if insert: + dist.insert_on(self.entries, entry, replace=replace) + + if entry is None: + entry = dist.location + keys = self.entry_keys.setdefault(entry, []) + keys2 = self.entry_keys.setdefault(dist.location, []) + if not replace and dist.key in self.by_key: + # ignore hidden distros + return + + self.by_key[dist.key] = dist + if dist.key not in keys: + keys.append(dist.key) + if dist.key not in keys2: + keys2.append(dist.key) + self._added_new(dist) + + def resolve(self, requirements, env=None, installer=None, + replace_conflicting=False, extras=None): + """List all distributions needed to (recursively) meet `requirements` + + `requirements` must be a sequence of ``Requirement`` objects. `env`, + if supplied, should be an ``Environment`` instance. If + not supplied, it defaults to all distributions available within any + entry or distribution in the working set. `installer`, if supplied, + will be invoked with each requirement that cannot be met by an + already-installed distribution; it should return a ``Distribution`` or + ``None``. + + Unless `replace_conflicting=True`, raises a VersionConflict exception + if + any requirements are found on the path that have the correct name but + the wrong version. Otherwise, if an `installer` is supplied it will be + invoked to obtain the correct version of the requirement and activate + it. + + `extras` is a list of the extras to be used with these requirements. + This is important because extra requirements may look like `my_req; + extra = "my_extra"`, which would otherwise be interpreted as a purely + optional requirement. Instead, we want to be able to assert that these + requirements are truly required. + """ + + # set up the stack + requirements = list(requirements)[::-1] + # set of processed requirements + processed = {} + # key -> dist + best = {} + to_activate = [] + + req_extras = _ReqExtras() + + # Mapping of requirement to set of distributions that required it; + # useful for reporting info about conflicts. + required_by = collections.defaultdict(set) + + while requirements: + # process dependencies breadth-first + req = requirements.pop(0) + if req in processed: + # Ignore cyclic or redundant dependencies + continue + + if not req_extras.markers_pass(req, extras): + continue + + dist = best.get(req.key) + if dist is None: + # Find the best distribution and add it to the map + dist = self.by_key.get(req.key) + if dist is None or (dist not in req and replace_conflicting): + ws = self + if env is None: + if dist is None: + env = Environment(self.entries) + else: + # Use an empty environment and workingset to avoid + # any further conflicts with the conflicting + # distribution + env = Environment([]) + ws = WorkingSet([]) + dist = best[req.key] = env.best_match( + req, ws, installer, + replace_conflicting=replace_conflicting + ) + if dist is None: + requirers = required_by.get(req, None) + raise DistributionNotFound(req, requirers) + to_activate.append(dist) + if dist not in req: + # Oops, the "best" so far conflicts with a dependency + dependent_req = required_by[req] + raise VersionConflict(dist, req).with_context(dependent_req) + + # push the new requirements onto the stack + new_requirements = dist.requires(req.extras)[::-1] + requirements.extend(new_requirements) + + # Register the new requirements needed by req + for new_requirement in new_requirements: + required_by[new_requirement].add(req.project_name) + req_extras[new_requirement] = req.extras + + processed[req] = True + + # return list of distros to activate + return to_activate + + def find_plugins( + self, plugin_env, full_env=None, installer=None, fallback=True): + """Find all activatable distributions in `plugin_env` + + Example usage:: + + distributions, errors = working_set.find_plugins( + Environment(plugin_dirlist) + ) + # add plugins+libs to sys.path + map(working_set.add, distributions) + # display errors + print('Could not load', errors) + + The `plugin_env` should be an ``Environment`` instance that contains + only distributions that are in the project's "plugin directory" or + directories. The `full_env`, if supplied, should be an ``Environment`` + contains all currently-available distributions. If `full_env` is not + supplied, one is created automatically from the ``WorkingSet`` this + method is called on, which will typically mean that every directory on + ``sys.path`` will be scanned for distributions. + + `installer` is a standard installer callback as used by the + ``resolve()`` method. The `fallback` flag indicates whether we should + attempt to resolve older versions of a plugin if the newest version + cannot be resolved. + + This method returns a 2-tuple: (`distributions`, `error_info`), where + `distributions` is a list of the distributions found in `plugin_env` + that were loadable, along with any other distributions that are needed + to resolve their dependencies. `error_info` is a dictionary mapping + unloadable plugin distributions to an exception instance describing the + error that occurred. Usually this will be a ``DistributionNotFound`` or + ``VersionConflict`` instance. + """ + + plugin_projects = list(plugin_env) + # scan project names in alphabetic order + plugin_projects.sort() + + error_info = {} + distributions = {} + + if full_env is None: + env = Environment(self.entries) + env += plugin_env + else: + env = full_env + plugin_env + + shadow_set = self.__class__([]) + # put all our entries in shadow_set + list(map(shadow_set.add, self)) + + for project_name in plugin_projects: + + for dist in plugin_env[project_name]: + + req = [dist.as_requirement()] + + try: + resolvees = shadow_set.resolve(req, env, installer) + + except ResolutionError as v: + # save error info + error_info[dist] = v + if fallback: + # try the next older version of project + continue + else: + # give up on this project, keep going + break + + else: + list(map(shadow_set.add, resolvees)) + distributions.update(dict.fromkeys(resolvees)) + + # success, no need to try any more versions of this project + break + + distributions = list(distributions) + distributions.sort() + + return distributions, error_info + + def require(self, *requirements): + """Ensure that distributions matching `requirements` are activated + + `requirements` must be a string or a (possibly-nested) sequence + thereof, specifying the distributions and versions required. The + return value is a sequence of the distributions that needed to be + activated to fulfill the requirements; all relevant distributions are + included, even if they were already activated in this working set. + """ + needed = self.resolve(parse_requirements(requirements)) + + for dist in needed: + self.add(dist) + + return needed + + def subscribe(self, callback, existing=True): + """Invoke `callback` for all distributions + + If `existing=True` (default), + call on all existing ones, as well. + """ + if callback in self.callbacks: + return + self.callbacks.append(callback) + if not existing: + return + for dist in self: + callback(dist) + + def _added_new(self, dist): + for callback in self.callbacks: + callback(dist) + + def __getstate__(self): + return ( + self.entries[:], self.entry_keys.copy(), self.by_key.copy(), + self.callbacks[:] + ) + + def __setstate__(self, e_k_b_c): + entries, keys, by_key, callbacks = e_k_b_c + self.entries = entries[:] + self.entry_keys = keys.copy() + self.by_key = by_key.copy() + self.callbacks = callbacks[:] + + +class _ReqExtras(dict): + """ + Map each requirement to the extras that demanded it. + """ + + def markers_pass(self, req, extras=None): + """ + Evaluate markers for req against each extra that + demanded it. + + Return False if the req has a marker and fails + evaluation. Otherwise, return True. + """ + extra_evals = ( + req.marker.evaluate({'extra': extra}) + for extra in self.get(req, ()) + (extras or (None,)) + ) + return not req.marker or any(extra_evals) + + +class Environment(object): + """Searchable snapshot of distributions on a search path""" + + def __init__( + self, search_path=None, platform=get_supported_platform(), + python=PY_MAJOR): + """Snapshot distributions available on a search path + + Any distributions found on `search_path` are added to the environment. + `search_path` should be a sequence of ``sys.path`` items. If not + supplied, ``sys.path`` is used. + + `platform` is an optional string specifying the name of the platform + that platform-specific distributions must be compatible with. If + unspecified, it defaults to the current platform. `python` is an + optional string naming the desired version of Python (e.g. ``'3.3'``); + it defaults to the current version. + + You may explicitly set `platform` (and/or `python`) to ``None`` if you + wish to map *all* distributions, not just those compatible with the + running platform or Python version. + """ + self._distmap = {} + self.platform = platform + self.python = python + self.scan(search_path) + + def can_add(self, dist): + """Is distribution `dist` acceptable for this environment? + + The distribution must match the platform and python version + requirements specified when this environment was created, or False + is returned. + """ + py_compat = ( + self.python is None + or dist.py_version is None + or dist.py_version == self.python + ) + return py_compat and compatible_platforms(dist.platform, self.platform) + + def remove(self, dist): + """Remove `dist` from the environment""" + self._distmap[dist.key].remove(dist) + + def scan(self, search_path=None): + """Scan `search_path` for distributions usable in this environment + + Any distributions found are added to the environment. + `search_path` should be a sequence of ``sys.path`` items. If not + supplied, ``sys.path`` is used. Only distributions conforming to + the platform/python version defined at initialization are added. + """ + if search_path is None: + search_path = sys.path + + for item in search_path: + for dist in find_distributions(item): + self.add(dist) + + def __getitem__(self, project_name): + """Return a newest-to-oldest list of distributions for `project_name` + + Uses case-insensitive `project_name` comparison, assuming all the + project's distributions use their project's name converted to all + lowercase as their key. + + """ + distribution_key = project_name.lower() + return self._distmap.get(distribution_key, []) + + def add(self, dist): + """Add `dist` if we ``can_add()`` it and it has not already been added + """ + if self.can_add(dist) and dist.has_version(): + dists = self._distmap.setdefault(dist.key, []) + if dist not in dists: + dists.append(dist) + dists.sort(key=operator.attrgetter('hashcmp'), reverse=True) + + def best_match( + self, req, working_set, installer=None, replace_conflicting=False): + """Find distribution best matching `req` and usable on `working_set` + + This calls the ``find(req)`` method of the `working_set` to see if a + suitable distribution is already active. (This may raise + ``VersionConflict`` if an unsuitable version of the project is already + active in the specified `working_set`.) If a suitable distribution + isn't active, this method returns the newest distribution in the + environment that meets the ``Requirement`` in `req`. If no suitable + distribution is found, and `installer` is supplied, then the result of + calling the environment's ``obtain(req, installer)`` method will be + returned. + """ + try: + dist = working_set.find(req) + except VersionConflict: + if not replace_conflicting: + raise + dist = None + if dist is not None: + return dist + for dist in self[req.key]: + if dist in req: + return dist + # try to download/install + return self.obtain(req, installer) + + def obtain(self, requirement, installer=None): + """Obtain a distribution matching `requirement` (e.g. via download) + + Obtain a distro that matches requirement (e.g. via download). In the + base ``Environment`` class, this routine just returns + ``installer(requirement)``, unless `installer` is None, in which case + None is returned instead. This method is a hook that allows subclasses + to attempt other ways of obtaining a distribution before falling back + to the `installer` argument.""" + if installer is not None: + return installer(requirement) + + def __iter__(self): + """Yield the unique project names of the available distributions""" + for key in self._distmap.keys(): + if self[key]: + yield key + + def __iadd__(self, other): + """In-place addition of a distribution or environment""" + if isinstance(other, Distribution): + self.add(other) + elif isinstance(other, Environment): + for project in other: + for dist in other[project]: + self.add(dist) + else: + raise TypeError("Can't add %r to environment" % (other,)) + return self + + def __add__(self, other): + """Add an environment or distribution to an environment""" + new = self.__class__([], platform=None, python=None) + for env in self, other: + new += env + return new + + +# XXX backward compatibility +AvailableDistributions = Environment + + +class ExtractionError(RuntimeError): + """An error occurred extracting a resource + + The following attributes are available from instances of this exception: + + manager + The resource manager that raised this exception + + cache_path + The base directory for resource extraction + + original_error + The exception instance that caused extraction to fail + """ + + +class ResourceManager: + """Manage resource extraction and packages""" + extraction_path = None + + def __init__(self): + self.cached_files = {} + + def resource_exists(self, package_or_requirement, resource_name): + """Does the named resource exist?""" + return get_provider(package_or_requirement).has_resource(resource_name) + + def resource_isdir(self, package_or_requirement, resource_name): + """Is the named resource an existing directory?""" + return get_provider(package_or_requirement).resource_isdir( + resource_name + ) + + def resource_filename(self, package_or_requirement, resource_name): + """Return a true filesystem path for specified resource""" + return get_provider(package_or_requirement).get_resource_filename( + self, resource_name + ) + + def resource_stream(self, package_or_requirement, resource_name): + """Return a readable file-like object for specified resource""" + return get_provider(package_or_requirement).get_resource_stream( + self, resource_name + ) + + def resource_string(self, package_or_requirement, resource_name): + """Return specified resource as a string""" + return get_provider(package_or_requirement).get_resource_string( + self, resource_name + ) + + def resource_listdir(self, package_or_requirement, resource_name): + """List the contents of the named resource directory""" + return get_provider(package_or_requirement).resource_listdir( + resource_name + ) + + def extraction_error(self): + """Give an error message for problems extracting file(s)""" + + old_exc = sys.exc_info()[1] + cache_path = self.extraction_path or get_default_cache() + + tmpl = textwrap.dedent(""" + Can't extract file(s) to egg cache + + The following error occurred while trying to extract file(s) + to the Python egg cache: + + {old_exc} + + The Python egg cache directory is currently set to: + + {cache_path} + + Perhaps your account does not have write access to this directory? + You can change the cache directory by setting the PYTHON_EGG_CACHE + environment variable to point to an accessible directory. + """).lstrip() + err = ExtractionError(tmpl.format(**locals())) + err.manager = self + err.cache_path = cache_path + err.original_error = old_exc + raise err + + def get_cache_path(self, archive_name, names=()): + """Return absolute location in cache for `archive_name` and `names` + + The parent directory of the resulting path will be created if it does + not already exist. `archive_name` should be the base filename of the + enclosing egg (which may not be the name of the enclosing zipfile!), + including its ".egg" extension. `names`, if provided, should be a + sequence of path name parts "under" the egg's extraction location. + + This method should only be called by resource providers that need to + obtain an extraction location, and only for names they intend to + extract, as it tracks the generated names for possible cleanup later. + """ + extract_path = self.extraction_path or get_default_cache() + target_path = os.path.join(extract_path, archive_name + '-tmp', *names) + try: + _bypass_ensure_directory(target_path) + except Exception: + self.extraction_error() + + self._warn_unsafe_extraction_path(extract_path) + + self.cached_files[target_path] = 1 + return target_path + + @staticmethod + def _warn_unsafe_extraction_path(path): + """ + If the default extraction path is overridden and set to an insecure + location, such as /tmp, it opens up an opportunity for an attacker to + replace an extracted file with an unauthorized payload. Warn the user + if a known insecure location is used. + + See Distribute #375 for more details. + """ + if os.name == 'nt' and not path.startswith(os.environ['windir']): + # On Windows, permissions are generally restrictive by default + # and temp directories are not writable by other users, so + # bypass the warning. + return + mode = os.stat(path).st_mode + if mode & stat.S_IWOTH or mode & stat.S_IWGRP: + msg = ( + "%s is writable by group/others and vulnerable to attack " + "when " + "used with get_resource_filename. Consider a more secure " + "location (set with .set_extraction_path or the " + "PYTHON_EGG_CACHE environment variable)." % path + ) + warnings.warn(msg, UserWarning) + + def postprocess(self, tempname, filename): + """Perform any platform-specific postprocessing of `tempname` + + This is where Mac header rewrites should be done; other platforms don't + have anything special they should do. + + Resource providers should call this method ONLY after successfully + extracting a compressed resource. They must NOT call it on resources + that are already in the filesystem. + + `tempname` is the current (temporary) name of the file, and `filename` + is the name it will be renamed to by the caller after this routine + returns. + """ + + if os.name == 'posix': + # Make the resource executable + mode = ((os.stat(tempname).st_mode) | 0o555) & 0o7777 + os.chmod(tempname, mode) + + def set_extraction_path(self, path): + """Set the base path where resources will be extracted to, if needed. + + If you do not call this routine before any extractions take place, the + path defaults to the return value of ``get_default_cache()``. (Which + is based on the ``PYTHON_EGG_CACHE`` environment variable, with various + platform-specific fallbacks. See that routine's documentation for more + details.) + + Resources are extracted to subdirectories of this path based upon + information given by the ``IResourceProvider``. You may set this to a + temporary directory, but then you must call ``cleanup_resources()`` to + delete the extracted files when done. There is no guarantee that + ``cleanup_resources()`` will be able to remove all extracted files. + + (Note: you may not change the extraction path for a given resource + manager once resources have been extracted, unless you first call + ``cleanup_resources()``.) + """ + if self.cached_files: + raise ValueError( + "Can't change extraction path, files already extracted" + ) + + self.extraction_path = path + + def cleanup_resources(self, force=False): + """ + Delete all extracted resource files and directories, returning a list + of the file and directory names that could not be successfully removed. + This function does not have any concurrency protection, so it should + generally only be called when the extraction path is a temporary + directory exclusive to a single process. This method is not + automatically called; you must call it explicitly or register it as an + ``atexit`` function if you wish to ensure cleanup of a temporary + directory used for extractions. + """ + # XXX + + +def get_default_cache(): + """ + Return the ``PYTHON_EGG_CACHE`` environment variable + or a platform-relevant user cache dir for an app + named "Python-Eggs". + """ + return ( + os.environ.get('PYTHON_EGG_CACHE') + or appdirs.user_cache_dir(appname='Python-Eggs') + ) + + +def safe_name(name): + """Convert an arbitrary string to a standard distribution name + + Any runs of non-alphanumeric/. characters are replaced with a single '-'. + """ + return re.sub('[^A-Za-z0-9.]+', '-', name) + + +def safe_version(version): + """ + Convert an arbitrary string to a standard version string + """ + try: + # normalize the version + return str(packaging.version.Version(version)) + except packaging.version.InvalidVersion: + version = version.replace(' ', '.') + return re.sub('[^A-Za-z0-9.]+', '-', version) + + +def safe_extra(extra): + """Convert an arbitrary string to a standard 'extra' name + + Any runs of non-alphanumeric characters are replaced with a single '_', + and the result is always lowercased. + """ + return re.sub('[^A-Za-z0-9.-]+', '_', extra).lower() + + +def to_filename(name): + """Convert a project or version name to its filename-escaped form + + Any '-' characters are currently replaced with '_'. + """ + return name.replace('-', '_') + + +def invalid_marker(text): + """ + Validate text as a PEP 508 environment marker; return an exception + if invalid or False otherwise. + """ + try: + evaluate_marker(text) + except SyntaxError as e: + e.filename = None + e.lineno = None + return e + return False + + +def evaluate_marker(text, extra=None): + """ + Evaluate a PEP 508 environment marker. + Return a boolean indicating the marker result in this environment. + Raise SyntaxError if marker is invalid. + + This implementation uses the 'pyparsing' module. + """ + try: + marker = packaging.markers.Marker(text) + return marker.evaluate() + except packaging.markers.InvalidMarker as e: + raise SyntaxError(e) + + +class NullProvider: + """Try to implement resources and metadata for arbitrary PEP 302 loaders""" + + egg_name = None + egg_info = None + loader = None + + def __init__(self, module): + self.loader = getattr(module, '__loader__', None) + self.module_path = os.path.dirname(getattr(module, '__file__', '')) + + def get_resource_filename(self, manager, resource_name): + return self._fn(self.module_path, resource_name) + + def get_resource_stream(self, manager, resource_name): + return io.BytesIO(self.get_resource_string(manager, resource_name)) + + def get_resource_string(self, manager, resource_name): + return self._get(self._fn(self.module_path, resource_name)) + + def has_resource(self, resource_name): + return self._has(self._fn(self.module_path, resource_name)) + + def has_metadata(self, name): + return self.egg_info and self._has(self._fn(self.egg_info, name)) + + def get_metadata(self, name): + if not self.egg_info: + return "" + value = self._get(self._fn(self.egg_info, name)) + return value.decode('utf-8') if six.PY3 else value + + def get_metadata_lines(self, name): + return yield_lines(self.get_metadata(name)) + + def resource_isdir(self, resource_name): + return self._isdir(self._fn(self.module_path, resource_name)) + + def metadata_isdir(self, name): + return self.egg_info and self._isdir(self._fn(self.egg_info, name)) + + def resource_listdir(self, resource_name): + return self._listdir(self._fn(self.module_path, resource_name)) + + def metadata_listdir(self, name): + if self.egg_info: + return self._listdir(self._fn(self.egg_info, name)) + return [] + + def run_script(self, script_name, namespace): + script = 'scripts/' + script_name + if not self.has_metadata(script): + raise ResolutionError( + "Script {script!r} not found in metadata at {self.egg_info!r}" + .format(**locals()), + ) + script_text = self.get_metadata(script).replace('\r\n', '\n') + script_text = script_text.replace('\r', '\n') + script_filename = self._fn(self.egg_info, script) + namespace['__file__'] = script_filename + if os.path.exists(script_filename): + source = open(script_filename).read() + code = compile(source, script_filename, 'exec') + exec(code, namespace, namespace) + else: + from linecache import cache + cache[script_filename] = ( + len(script_text), 0, script_text.split('\n'), script_filename + ) + script_code = compile(script_text, script_filename, 'exec') + exec(script_code, namespace, namespace) + + def _has(self, path): + raise NotImplementedError( + "Can't perform this operation for unregistered loader type" + ) + + def _isdir(self, path): + raise NotImplementedError( + "Can't perform this operation for unregistered loader type" + ) + + def _listdir(self, path): + raise NotImplementedError( + "Can't perform this operation for unregistered loader type" + ) + + def _fn(self, base, resource_name): + if resource_name: + return os.path.join(base, *resource_name.split('/')) + return base + + def _get(self, path): + if hasattr(self.loader, 'get_data'): + return self.loader.get_data(path) + raise NotImplementedError( + "Can't perform this operation for loaders without 'get_data()'" + ) + + +register_loader_type(object, NullProvider) + + +class EggProvider(NullProvider): + """Provider based on a virtual filesystem""" + + def __init__(self, module): + NullProvider.__init__(self, module) + self._setup_prefix() + + def _setup_prefix(self): + # we assume here that our metadata may be nested inside a "basket" + # of multiple eggs; that's why we use module_path instead of .archive + path = self.module_path + old = None + while path != old: + if _is_egg_path(path): + self.egg_name = os.path.basename(path) + self.egg_info = os.path.join(path, 'EGG-INFO') + self.egg_root = path + break + old = path + path, base = os.path.split(path) + + +class DefaultProvider(EggProvider): + """Provides access to package resources in the filesystem""" + + def _has(self, path): + return os.path.exists(path) + + def _isdir(self, path): + return os.path.isdir(path) + + def _listdir(self, path): + return os.listdir(path) + + def get_resource_stream(self, manager, resource_name): + return open(self._fn(self.module_path, resource_name), 'rb') + + def _get(self, path): + with open(path, 'rb') as stream: + return stream.read() + + @classmethod + def _register(cls): + loader_cls = getattr( + importlib_machinery, + 'SourceFileLoader', + type(None), + ) + register_loader_type(loader_cls, cls) + + +DefaultProvider._register() + + +class EmptyProvider(NullProvider): + """Provider that returns nothing for all requests""" + + module_path = None + + _isdir = _has = lambda self, path: False + + def _get(self, path): + return '' + + def _listdir(self, path): + return [] + + def __init__(self): + pass + + +empty_provider = EmptyProvider() + + +class ZipManifests(dict): + """ + zip manifest builder + """ + + @classmethod + def build(cls, path): + """ + Build a dictionary similar to the zipimport directory + caches, except instead of tuples, store ZipInfo objects. + + Use a platform-specific path separator (os.sep) for the path keys + for compatibility with pypy on Windows. + """ + with zipfile.ZipFile(path) as zfile: + items = ( + ( + name.replace('/', os.sep), + zfile.getinfo(name), + ) + for name in zfile.namelist() + ) + return dict(items) + + load = build + + +class MemoizedZipManifests(ZipManifests): + """ + Memoized zipfile manifests. + """ + manifest_mod = collections.namedtuple('manifest_mod', 'manifest mtime') + + def load(self, path): + """ + Load a manifest at path or return a suitable manifest already loaded. + """ + path = os.path.normpath(path) + mtime = os.stat(path).st_mtime + + if path not in self or self[path].mtime != mtime: + manifest = self.build(path) + self[path] = self.manifest_mod(manifest, mtime) + + return self[path].manifest + + +class ZipProvider(EggProvider): + """Resource support for zips and eggs""" + + eagers = None + _zip_manifests = MemoizedZipManifests() + + def __init__(self, module): + EggProvider.__init__(self, module) + self.zip_pre = self.loader.archive + os.sep + + def _zipinfo_name(self, fspath): + # Convert a virtual filename (full path to file) into a zipfile subpath + # usable with the zipimport directory cache for our target archive + fspath = fspath.rstrip(os.sep) + if fspath == self.loader.archive: + return '' + if fspath.startswith(self.zip_pre): + return fspath[len(self.zip_pre):] + raise AssertionError( + "%s is not a subpath of %s" % (fspath, self.zip_pre) + ) + + def _parts(self, zip_path): + # Convert a zipfile subpath into an egg-relative path part list. + # pseudo-fs path + fspath = self.zip_pre + zip_path + if fspath.startswith(self.egg_root + os.sep): + return fspath[len(self.egg_root) + 1:].split(os.sep) + raise AssertionError( + "%s is not a subpath of %s" % (fspath, self.egg_root) + ) + + @property + def zipinfo(self): + return self._zip_manifests.load(self.loader.archive) + + def get_resource_filename(self, manager, resource_name): + if not self.egg_name: + raise NotImplementedError( + "resource_filename() only supported for .egg, not .zip" + ) + # no need to lock for extraction, since we use temp names + zip_path = self._resource_to_zip(resource_name) + eagers = self._get_eager_resources() + if '/'.join(self._parts(zip_path)) in eagers: + for name in eagers: + self._extract_resource(manager, self._eager_to_zip(name)) + return self._extract_resource(manager, zip_path) + + @staticmethod + def _get_date_and_size(zip_stat): + size = zip_stat.file_size + # ymdhms+wday, yday, dst + date_time = zip_stat.date_time + (0, 0, -1) + # 1980 offset already done + timestamp = time.mktime(date_time) + return timestamp, size + + def _extract_resource(self, manager, zip_path): + + if zip_path in self._index(): + for name in self._index()[zip_path]: + last = self._extract_resource( + manager, os.path.join(zip_path, name) + ) + # return the extracted directory name + return os.path.dirname(last) + + timestamp, size = self._get_date_and_size(self.zipinfo[zip_path]) + + if not WRITE_SUPPORT: + raise IOError('"os.rename" and "os.unlink" are not supported ' + 'on this platform') + try: + + real_path = manager.get_cache_path( + self.egg_name, self._parts(zip_path) + ) + + if self._is_current(real_path, zip_path): + return real_path + + outf, tmpnam = _mkstemp( + ".$extract", + dir=os.path.dirname(real_path), + ) + os.write(outf, self.loader.get_data(zip_path)) + os.close(outf) + utime(tmpnam, (timestamp, timestamp)) + manager.postprocess(tmpnam, real_path) + + try: + rename(tmpnam, real_path) + + except os.error: + if os.path.isfile(real_path): + if self._is_current(real_path, zip_path): + # the file became current since it was checked above, + # so proceed. + return real_path + # Windows, del old file and retry + elif os.name == 'nt': + unlink(real_path) + rename(tmpnam, real_path) + return real_path + raise + + except os.error: + # report a user-friendly error + manager.extraction_error() + + return real_path + + def _is_current(self, file_path, zip_path): + """ + Return True if the file_path is current for this zip_path + """ + timestamp, size = self._get_date_and_size(self.zipinfo[zip_path]) + if not os.path.isfile(file_path): + return False + stat = os.stat(file_path) + if stat.st_size != size or stat.st_mtime != timestamp: + return False + # check that the contents match + zip_contents = self.loader.get_data(zip_path) + with open(file_path, 'rb') as f: + file_contents = f.read() + return zip_contents == file_contents + + def _get_eager_resources(self): + if self.eagers is None: + eagers = [] + for name in ('native_libs.txt', 'eager_resources.txt'): + if self.has_metadata(name): + eagers.extend(self.get_metadata_lines(name)) + self.eagers = eagers + return self.eagers + + def _index(self): + try: + return self._dirindex + except AttributeError: + ind = {} + for path in self.zipinfo: + parts = path.split(os.sep) + while parts: + parent = os.sep.join(parts[:-1]) + if parent in ind: + ind[parent].append(parts[-1]) + break + else: + ind[parent] = [parts.pop()] + self._dirindex = ind + return ind + + def _has(self, fspath): + zip_path = self._zipinfo_name(fspath) + return zip_path in self.zipinfo or zip_path in self._index() + + def _isdir(self, fspath): + return self._zipinfo_name(fspath) in self._index() + + def _listdir(self, fspath): + return list(self._index().get(self._zipinfo_name(fspath), ())) + + def _eager_to_zip(self, resource_name): + return self._zipinfo_name(self._fn(self.egg_root, resource_name)) + + def _resource_to_zip(self, resource_name): + return self._zipinfo_name(self._fn(self.module_path, resource_name)) + + +register_loader_type(zipimport.zipimporter, ZipProvider) + + +class FileMetadata(EmptyProvider): + """Metadata handler for standalone PKG-INFO files + + Usage:: + + metadata = FileMetadata("/path/to/PKG-INFO") + + This provider rejects all data and metadata requests except for PKG-INFO, + which is treated as existing, and will be the contents of the file at + the provided location. + """ + + def __init__(self, path): + self.path = path + + def has_metadata(self, name): + return name == 'PKG-INFO' and os.path.isfile(self.path) + + def get_metadata(self, name): + if name != 'PKG-INFO': + raise KeyError("No metadata except PKG-INFO is available") + + with io.open(self.path, encoding='utf-8', errors="replace") as f: + metadata = f.read() + self._warn_on_replacement(metadata) + return metadata + + def _warn_on_replacement(self, metadata): + # Python 2.7 compat for: replacement_char = '�' + replacement_char = b'\xef\xbf\xbd'.decode('utf-8') + if replacement_char in metadata: + tmpl = "{self.path} could not be properly decoded in UTF-8" + msg = tmpl.format(**locals()) + warnings.warn(msg) + + def get_metadata_lines(self, name): + return yield_lines(self.get_metadata(name)) + + +class PathMetadata(DefaultProvider): + """Metadata provider for egg directories + + Usage:: + + # Development eggs: + + egg_info = "/path/to/PackageName.egg-info" + base_dir = os.path.dirname(egg_info) + metadata = PathMetadata(base_dir, egg_info) + dist_name = os.path.splitext(os.path.basename(egg_info))[0] + dist = Distribution(basedir, project_name=dist_name, metadata=metadata) + + # Unpacked egg directories: + + egg_path = "/path/to/PackageName-ver-pyver-etc.egg" + metadata = PathMetadata(egg_path, os.path.join(egg_path,'EGG-INFO')) + dist = Distribution.from_filename(egg_path, metadata=metadata) + """ + + def __init__(self, path, egg_info): + self.module_path = path + self.egg_info = egg_info + + +class EggMetadata(ZipProvider): + """Metadata provider for .egg files""" + + def __init__(self, importer): + """Create a metadata provider from a zipimporter""" + + self.zip_pre = importer.archive + os.sep + self.loader = importer + if importer.prefix: + self.module_path = os.path.join(importer.archive, importer.prefix) + else: + self.module_path = importer.archive + self._setup_prefix() + + +_declare_state('dict', _distribution_finders={}) + + +def register_finder(importer_type, distribution_finder): + """Register `distribution_finder` to find distributions in sys.path items + + `importer_type` is the type or class of a PEP 302 "Importer" (sys.path item + handler), and `distribution_finder` is a callable that, passed a path + item and the importer instance, yields ``Distribution`` instances found on + that path item. See ``pkg_resources.find_on_path`` for an example.""" + _distribution_finders[importer_type] = distribution_finder + + +def find_distributions(path_item, only=False): + """Yield distributions accessible via `path_item`""" + importer = get_importer(path_item) + finder = _find_adapter(_distribution_finders, importer) + return finder(importer, path_item, only) + + +def find_eggs_in_zip(importer, path_item, only=False): + """ + Find eggs in zip files; possibly multiple nested eggs. + """ + if importer.archive.endswith('.whl'): + # wheels are not supported with this finder + # they don't have PKG-INFO metadata, and won't ever contain eggs + return + metadata = EggMetadata(importer) + if metadata.has_metadata('PKG-INFO'): + yield Distribution.from_filename(path_item, metadata=metadata) + if only: + # don't yield nested distros + return + for subitem in metadata.resource_listdir('/'): + if _is_egg_path(subitem): + subpath = os.path.join(path_item, subitem) + dists = find_eggs_in_zip(zipimport.zipimporter(subpath), subpath) + for dist in dists: + yield dist + elif subitem.lower().endswith('.dist-info'): + subpath = os.path.join(path_item, subitem) + submeta = EggMetadata(zipimport.zipimporter(subpath)) + submeta.egg_info = subpath + yield Distribution.from_location(path_item, subitem, submeta) + + +register_finder(zipimport.zipimporter, find_eggs_in_zip) + + +def find_nothing(importer, path_item, only=False): + return () + + +register_finder(object, find_nothing) + + +def _by_version_descending(names): + """ + Given a list of filenames, return them in descending order + by version number. + + >>> names = 'bar', 'foo', 'Python-2.7.10.egg', 'Python-2.7.2.egg' + >>> _by_version_descending(names) + ['Python-2.7.10.egg', 'Python-2.7.2.egg', 'foo', 'bar'] + >>> names = 'Setuptools-1.2.3b1.egg', 'Setuptools-1.2.3.egg' + >>> _by_version_descending(names) + ['Setuptools-1.2.3.egg', 'Setuptools-1.2.3b1.egg'] + >>> names = 'Setuptools-1.2.3b1.egg', 'Setuptools-1.2.3.post1.egg' + >>> _by_version_descending(names) + ['Setuptools-1.2.3.post1.egg', 'Setuptools-1.2.3b1.egg'] + """ + def _by_version(name): + """ + Parse each component of the filename + """ + name, ext = os.path.splitext(name) + parts = itertools.chain(name.split('-'), [ext]) + return [packaging.version.parse(part) for part in parts] + + return sorted(names, key=_by_version, reverse=True) + + +def find_on_path(importer, path_item, only=False): + """Yield distributions accessible on a sys.path directory""" + path_item = _normalize_cached(path_item) + + if _is_unpacked_egg(path_item): + yield Distribution.from_filename( + path_item, metadata=PathMetadata( + path_item, os.path.join(path_item, 'EGG-INFO') + ) + ) + return + + entries = safe_listdir(path_item) + + # for performance, before sorting by version, + # screen entries for only those that will yield + # distributions + filtered = ( + entry + for entry in entries + if dist_factory(path_item, entry, only) + ) + + # scan for .egg and .egg-info in directory + path_item_entries = _by_version_descending(filtered) + for entry in path_item_entries: + fullpath = os.path.join(path_item, entry) + factory = dist_factory(path_item, entry, only) + for dist in factory(fullpath): + yield dist + + +def dist_factory(path_item, entry, only): + """ + Return a dist_factory for a path_item and entry + """ + lower = entry.lower() + is_meta = any(map(lower.endswith, ('.egg-info', '.dist-info'))) + return ( + distributions_from_metadata + if is_meta else + find_distributions + if not only and _is_egg_path(entry) else + resolve_egg_link + if not only and lower.endswith('.egg-link') else + NoDists() + ) + + +class NoDists: + """ + >>> bool(NoDists()) + False + + >>> list(NoDists()('anything')) + [] + """ + def __bool__(self): + return False + if six.PY2: + __nonzero__ = __bool__ + + def __call__(self, fullpath): + return iter(()) + + +def safe_listdir(path): + """ + Attempt to list contents of path, but suppress some exceptions. + """ + try: + return os.listdir(path) + except (PermissionError, NotADirectoryError): + pass + except OSError as e: + # Ignore the directory if does not exist, not a directory or + # permission denied + ignorable = ( + e.errno in (errno.ENOTDIR, errno.EACCES, errno.ENOENT) + # Python 2 on Windows needs to be handled this way :( + or getattr(e, "winerror", None) == 267 + ) + if not ignorable: + raise + return () + + +def distributions_from_metadata(path): + root = os.path.dirname(path) + if os.path.isdir(path): + if len(os.listdir(path)) == 0: + # empty metadata dir; skip + return + metadata = PathMetadata(root, path) + else: + metadata = FileMetadata(path) + entry = os.path.basename(path) + yield Distribution.from_location( + root, entry, metadata, precedence=DEVELOP_DIST, + ) + + +def non_empty_lines(path): + """ + Yield non-empty lines from file at path + """ + with open(path) as f: + for line in f: + line = line.strip() + if line: + yield line + + +def resolve_egg_link(path): + """ + Given a path to an .egg-link, resolve distributions + present in the referenced path. + """ + referenced_paths = non_empty_lines(path) + resolved_paths = ( + os.path.join(os.path.dirname(path), ref) + for ref in referenced_paths + ) + dist_groups = map(find_distributions, resolved_paths) + return next(dist_groups, ()) + + +register_finder(pkgutil.ImpImporter, find_on_path) + +if hasattr(importlib_machinery, 'FileFinder'): + register_finder(importlib_machinery.FileFinder, find_on_path) + +_declare_state('dict', _namespace_handlers={}) +_declare_state('dict', _namespace_packages={}) + + +def register_namespace_handler(importer_type, namespace_handler): + """Register `namespace_handler` to declare namespace packages + + `importer_type` is the type or class of a PEP 302 "Importer" (sys.path item + handler), and `namespace_handler` is a callable like this:: + + def namespace_handler(importer, path_entry, moduleName, module): + # return a path_entry to use for child packages + + Namespace handlers are only called if the importer object has already + agreed that it can handle the relevant path item, and they should only + return a subpath if the module __path__ does not already contain an + equivalent subpath. For an example namespace handler, see + ``pkg_resources.file_ns_handler``. + """ + _namespace_handlers[importer_type] = namespace_handler + + +def _handle_ns(packageName, path_item): + """Ensure that named package includes a subpath of path_item (if needed)""" + + importer = get_importer(path_item) + if importer is None: + return None + loader = importer.find_module(packageName) + if loader is None: + return None + module = sys.modules.get(packageName) + if module is None: + module = sys.modules[packageName] = types.ModuleType(packageName) + module.__path__ = [] + _set_parent_ns(packageName) + elif not hasattr(module, '__path__'): + raise TypeError("Not a package:", packageName) + handler = _find_adapter(_namespace_handlers, importer) + subpath = handler(importer, path_item, packageName, module) + if subpath is not None: + path = module.__path__ + path.append(subpath) + loader.load_module(packageName) + _rebuild_mod_path(path, packageName, module) + return subpath + + +def _rebuild_mod_path(orig_path, package_name, module): + """ + Rebuild module.__path__ ensuring that all entries are ordered + corresponding to their sys.path order + """ + sys_path = [_normalize_cached(p) for p in sys.path] + + def safe_sys_path_index(entry): + """ + Workaround for #520 and #513. + """ + try: + return sys_path.index(entry) + except ValueError: + return float('inf') + + def position_in_sys_path(path): + """ + Return the ordinal of the path based on its position in sys.path + """ + path_parts = path.split(os.sep) + module_parts = package_name.count('.') + 1 + parts = path_parts[:-module_parts] + return safe_sys_path_index(_normalize_cached(os.sep.join(parts))) + + if not isinstance(orig_path, list): + # Is this behavior useful when module.__path__ is not a list? + return + + orig_path.sort(key=position_in_sys_path) + module.__path__[:] = [_normalize_cached(p) for p in orig_path] + + +def declare_namespace(packageName): + """Declare that package 'packageName' is a namespace package""" + + _imp.acquire_lock() + try: + if packageName in _namespace_packages: + return + + path, parent = sys.path, None + if '.' in packageName: + parent = '.'.join(packageName.split('.')[:-1]) + declare_namespace(parent) + if parent not in _namespace_packages: + __import__(parent) + try: + path = sys.modules[parent].__path__ + except AttributeError: + raise TypeError("Not a package:", parent) + + # Track what packages are namespaces, so when new path items are added, + # they can be updated + _namespace_packages.setdefault(parent, []).append(packageName) + _namespace_packages.setdefault(packageName, []) + + for path_item in path: + # Ensure all the parent's path items are reflected in the child, + # if they apply + _handle_ns(packageName, path_item) + + finally: + _imp.release_lock() + + +def fixup_namespace_packages(path_item, parent=None): + """Ensure that previously-declared namespace packages include path_item""" + _imp.acquire_lock() + try: + for package in _namespace_packages.get(parent, ()): + subpath = _handle_ns(package, path_item) + if subpath: + fixup_namespace_packages(subpath, package) + finally: + _imp.release_lock() + + +def file_ns_handler(importer, path_item, packageName, module): + """Compute an ns-package subpath for a filesystem or zipfile importer""" + + subpath = os.path.join(path_item, packageName.split('.')[-1]) + normalized = _normalize_cached(subpath) + for item in module.__path__: + if _normalize_cached(item) == normalized: + break + else: + # Only return the path if it's not already there + return subpath + + +register_namespace_handler(pkgutil.ImpImporter, file_ns_handler) +register_namespace_handler(zipimport.zipimporter, file_ns_handler) + +if hasattr(importlib_machinery, 'FileFinder'): + register_namespace_handler(importlib_machinery.FileFinder, file_ns_handler) + + +def null_ns_handler(importer, path_item, packageName, module): + return None + + +register_namespace_handler(object, null_ns_handler) + + +def normalize_path(filename): + """Normalize a file/dir name for comparison purposes""" + return os.path.normcase(os.path.realpath(filename)) + + +def _normalize_cached(filename, _cache={}): + try: + return _cache[filename] + except KeyError: + _cache[filename] = result = normalize_path(filename) + return result + + +def _is_egg_path(path): + """ + Determine if given path appears to be an egg. + """ + return path.lower().endswith('.egg') + + +def _is_unpacked_egg(path): + """ + Determine if given path appears to be an unpacked egg. + """ + return ( + _is_egg_path(path) and + os.path.isfile(os.path.join(path, 'EGG-INFO', 'PKG-INFO')) + ) + + +def _set_parent_ns(packageName): + parts = packageName.split('.') + name = parts.pop() + if parts: + parent = '.'.join(parts) + setattr(sys.modules[parent], name, sys.modules[packageName]) + + +def yield_lines(strs): + """Yield non-empty/non-comment lines of a string or sequence""" + if isinstance(strs, six.string_types): + for s in strs.splitlines(): + s = s.strip() + # skip blank lines/comments + if s and not s.startswith('#'): + yield s + else: + for ss in strs: + for s in yield_lines(ss): + yield s + + +MODULE = re.compile(r"\w+(\.\w+)*$").match +EGG_NAME = re.compile( + r""" + (?P<name>[^-]+) ( + -(?P<ver>[^-]+) ( + -py(?P<pyver>[^-]+) ( + -(?P<plat>.+) + )? + )? + )? + """, + re.VERBOSE | re.IGNORECASE, +).match + + +class EntryPoint(object): + """Object representing an advertised importable object""" + + def __init__(self, name, module_name, attrs=(), extras=(), dist=None): + if not MODULE(module_name): + raise ValueError("Invalid module name", module_name) + self.name = name + self.module_name = module_name + self.attrs = tuple(attrs) + self.extras = tuple(extras) + self.dist = dist + + def __str__(self): + s = "%s = %s" % (self.name, self.module_name) + if self.attrs: + s += ':' + '.'.join(self.attrs) + if self.extras: + s += ' [%s]' % ','.join(self.extras) + return s + + def __repr__(self): + return "EntryPoint.parse(%r)" % str(self) + + def load(self, require=True, *args, **kwargs): + """ + Require packages for this EntryPoint, then resolve it. + """ + if not require or args or kwargs: + warnings.warn( + "Parameters to load are deprecated. Call .resolve and " + ".require separately.", + DeprecationWarning, + stacklevel=2, + ) + if require: + self.require(*args, **kwargs) + return self.resolve() + + def resolve(self): + """ + Resolve the entry point from its module and attrs. + """ + module = __import__(self.module_name, fromlist=['__name__'], level=0) + try: + return functools.reduce(getattr, self.attrs, module) + except AttributeError as exc: + raise ImportError(str(exc)) + + def require(self, env=None, installer=None): + if self.extras and not self.dist: + raise UnknownExtra("Can't require() without a distribution", self) + + # Get the requirements for this entry point with all its extras and + # then resolve them. We have to pass `extras` along when resolving so + # that the working set knows what extras we want. Otherwise, for + # dist-info distributions, the working set will assume that the + # requirements for that extra are purely optional and skip over them. + reqs = self.dist.requires(self.extras) + items = working_set.resolve(reqs, env, installer, extras=self.extras) + list(map(working_set.add, items)) + + pattern = re.compile( + r'\s*' + r'(?P<name>.+?)\s*' + r'=\s*' + r'(?P<module>[\w.]+)\s*' + r'(:\s*(?P<attr>[\w.]+))?\s*' + r'(?P<extras>\[.*\])?\s*$' + ) + + @classmethod + def parse(cls, src, dist=None): + """Parse a single entry point from string `src` + + Entry point syntax follows the form:: + + name = some.module:some.attr [extra1, extra2] + + The entry name and module name are required, but the ``:attrs`` and + ``[extras]`` parts are optional + """ + m = cls.pattern.match(src) + if not m: + msg = "EntryPoint must be in 'name=module:attrs [extras]' format" + raise ValueError(msg, src) + res = m.groupdict() + extras = cls._parse_extras(res['extras']) + attrs = res['attr'].split('.') if res['attr'] else () + return cls(res['name'], res['module'], attrs, extras, dist) + + @classmethod + def _parse_extras(cls, extras_spec): + if not extras_spec: + return () + req = Requirement.parse('x' + extras_spec) + if req.specs: + raise ValueError() + return req.extras + + @classmethod + def parse_group(cls, group, lines, dist=None): + """Parse an entry point group""" + if not MODULE(group): + raise ValueError("Invalid group name", group) + this = {} + for line in yield_lines(lines): + ep = cls.parse(line, dist) + if ep.name in this: + raise ValueError("Duplicate entry point", group, ep.name) + this[ep.name] = ep + return this + + @classmethod + def parse_map(cls, data, dist=None): + """Parse a map of entry point groups""" + if isinstance(data, dict): + data = data.items() + else: + data = split_sections(data) + maps = {} + for group, lines in data: + if group is None: + if not lines: + continue + raise ValueError("Entry points must be listed in groups") + group = group.strip() + if group in maps: + raise ValueError("Duplicate group name", group) + maps[group] = cls.parse_group(group, lines, dist) + return maps + + +def _remove_md5_fragment(location): + if not location: + return '' + parsed = urllib.parse.urlparse(location) + if parsed[-1].startswith('md5='): + return urllib.parse.urlunparse(parsed[:-1] + ('',)) + return location + + +def _version_from_file(lines): + """ + Given an iterable of lines from a Metadata file, return + the value of the Version field, if present, or None otherwise. + """ + def is_version_line(line): + return line.lower().startswith('version:') + version_lines = filter(is_version_line, lines) + line = next(iter(version_lines), '') + _, _, value = line.partition(':') + return safe_version(value.strip()) or None + + +class Distribution(object): + """Wrap an actual or potential sys.path entry w/metadata""" + PKG_INFO = 'PKG-INFO' + + def __init__( + self, location=None, metadata=None, project_name=None, + version=None, py_version=PY_MAJOR, platform=None, + precedence=EGG_DIST): + self.project_name = safe_name(project_name or 'Unknown') + if version is not None: + self._version = safe_version(version) + self.py_version = py_version + self.platform = platform + self.location = location + self.precedence = precedence + self._provider = metadata or empty_provider + + @classmethod + def from_location(cls, location, basename, metadata=None, **kw): + project_name, version, py_version, platform = [None] * 4 + basename, ext = os.path.splitext(basename) + if ext.lower() in _distributionImpl: + cls = _distributionImpl[ext.lower()] + + match = EGG_NAME(basename) + if match: + project_name, version, py_version, platform = match.group( + 'name', 'ver', 'pyver', 'plat' + ) + return cls( + location, metadata, project_name=project_name, version=version, + py_version=py_version, platform=platform, **kw + )._reload_version() + + def _reload_version(self): + return self + + @property + def hashcmp(self): + return ( + self.parsed_version, + self.precedence, + self.key, + _remove_md5_fragment(self.location), + self.py_version or '', + self.platform or '', + ) + + def __hash__(self): + return hash(self.hashcmp) + + def __lt__(self, other): + return self.hashcmp < other.hashcmp + + def __le__(self, other): + return self.hashcmp <= other.hashcmp + + def __gt__(self, other): + return self.hashcmp > other.hashcmp + + def __ge__(self, other): + return self.hashcmp >= other.hashcmp + + def __eq__(self, other): + if not isinstance(other, self.__class__): + # It's not a Distribution, so they are not equal + return False + return self.hashcmp == other.hashcmp + + def __ne__(self, other): + return not self == other + + # These properties have to be lazy so that we don't have to load any + # metadata until/unless it's actually needed. (i.e., some distributions + # may not know their name or version without loading PKG-INFO) + + @property + def key(self): + try: + return self._key + except AttributeError: + self._key = key = self.project_name.lower() + return key + + @property + def parsed_version(self): + if not hasattr(self, "_parsed_version"): + self._parsed_version = parse_version(self.version) + + return self._parsed_version + + def _warn_legacy_version(self): + LV = packaging.version.LegacyVersion + is_legacy = isinstance(self._parsed_version, LV) + if not is_legacy: + return + + # While an empty version is technically a legacy version and + # is not a valid PEP 440 version, it's also unlikely to + # actually come from someone and instead it is more likely that + # it comes from setuptools attempting to parse a filename and + # including it in the list. So for that we'll gate this warning + # on if the version is anything at all or not. + if not self.version: + return + + tmpl = textwrap.dedent(""" + '{project_name} ({version})' is being parsed as a legacy, + non PEP 440, + version. You may find odd behavior and sort order. + In particular it will be sorted as less than 0.0. It + is recommended to migrate to PEP 440 compatible + versions. + """).strip().replace('\n', ' ') + + warnings.warn(tmpl.format(**vars(self)), PEP440Warning) + + @property + def version(self): + try: + return self._version + except AttributeError: + version = _version_from_file(self._get_metadata(self.PKG_INFO)) + if version is None: + tmpl = "Missing 'Version:' header and/or %s file" + raise ValueError(tmpl % self.PKG_INFO, self) + return version + + @property + def _dep_map(self): + """ + A map of extra to its list of (direct) requirements + for this distribution, including the null extra. + """ + try: + return self.__dep_map + except AttributeError: + self.__dep_map = self._filter_extras(self._build_dep_map()) + return self.__dep_map + + @staticmethod + def _filter_extras(dm): + """ + Given a mapping of extras to dependencies, strip off + environment markers and filter out any dependencies + not matching the markers. + """ + for extra in list(filter(None, dm)): + new_extra = extra + reqs = dm.pop(extra) + new_extra, _, marker = extra.partition(':') + fails_marker = marker and ( + invalid_marker(marker) + or not evaluate_marker(marker) + ) + if fails_marker: + reqs = [] + new_extra = safe_extra(new_extra) or None + + dm.setdefault(new_extra, []).extend(reqs) + return dm + + def _build_dep_map(self): + dm = {} + for name in 'requires.txt', 'depends.txt': + for extra, reqs in split_sections(self._get_metadata(name)): + dm.setdefault(extra, []).extend(parse_requirements(reqs)) + return dm + + def requires(self, extras=()): + """List of Requirements needed for this distro if `extras` are used""" + dm = self._dep_map + deps = [] + deps.extend(dm.get(None, ())) + for ext in extras: + try: + deps.extend(dm[safe_extra(ext)]) + except KeyError: + raise UnknownExtra( + "%s has no such extra feature %r" % (self, ext) + ) + return deps + + def _get_metadata(self, name): + if self.has_metadata(name): + for line in self.get_metadata_lines(name): + yield line + + def activate(self, path=None, replace=False): + """Ensure distribution is importable on `path` (default=sys.path)""" + if path is None: + path = sys.path + self.insert_on(path, replace=replace) + if path is sys.path: + fixup_namespace_packages(self.location) + for pkg in self._get_metadata('namespace_packages.txt'): + if pkg in sys.modules: + declare_namespace(pkg) + + def egg_name(self): + """Return what this distribution's standard .egg filename should be""" + filename = "%s-%s-py%s" % ( + to_filename(self.project_name), to_filename(self.version), + self.py_version or PY_MAJOR + ) + + if self.platform: + filename += '-' + self.platform + return filename + + def __repr__(self): + if self.location: + return "%s (%s)" % (self, self.location) + else: + return str(self) + + def __str__(self): + try: + version = getattr(self, 'version', None) + except ValueError: + version = None + version = version or "[unknown version]" + return "%s %s" % (self.project_name, version) + + def __getattr__(self, attr): + """Delegate all unrecognized public attributes to .metadata provider""" + if attr.startswith('_'): + raise AttributeError(attr) + return getattr(self._provider, attr) + + @classmethod + def from_filename(cls, filename, metadata=None, **kw): + return cls.from_location( + _normalize_cached(filename), os.path.basename(filename), metadata, + **kw + ) + + def as_requirement(self): + """Return a ``Requirement`` that matches this distribution exactly""" + if isinstance(self.parsed_version, packaging.version.Version): + spec = "%s==%s" % (self.project_name, self.parsed_version) + else: + spec = "%s===%s" % (self.project_name, self.parsed_version) + + return Requirement.parse(spec) + + def load_entry_point(self, group, name): + """Return the `name` entry point of `group` or raise ImportError""" + ep = self.get_entry_info(group, name) + if ep is None: + raise ImportError("Entry point %r not found" % ((group, name),)) + return ep.load() + + def get_entry_map(self, group=None): + """Return the entry point map for `group`, or the full entry map""" + try: + ep_map = self._ep_map + except AttributeError: + ep_map = self._ep_map = EntryPoint.parse_map( + self._get_metadata('entry_points.txt'), self + ) + if group is not None: + return ep_map.get(group, {}) + return ep_map + + def get_entry_info(self, group, name): + """Return the EntryPoint object for `group`+`name`, or ``None``""" + return self.get_entry_map(group).get(name) + + def insert_on(self, path, loc=None, replace=False): + """Ensure self.location is on path + + If replace=False (default): + - If location is already in path anywhere, do nothing. + - Else: + - If it's an egg and its parent directory is on path, + insert just ahead of the parent. + - Else: add to the end of path. + If replace=True: + - If location is already on path anywhere (not eggs) + or higher priority than its parent (eggs) + do nothing. + - Else: + - If it's an egg and its parent directory is on path, + insert just ahead of the parent, + removing any lower-priority entries. + - Else: add it to the front of path. + """ + + loc = loc or self.location + if not loc: + return + + nloc = _normalize_cached(loc) + bdir = os.path.dirname(nloc) + npath = [(p and _normalize_cached(p) or p) for p in path] + + for p, item in enumerate(npath): + if item == nloc: + if replace: + break + else: + # don't modify path (even removing duplicates) if + # found and not replace + return + elif item == bdir and self.precedence == EGG_DIST: + # if it's an .egg, give it precedence over its directory + # UNLESS it's already been added to sys.path and replace=False + if (not replace) and nloc in npath[p:]: + return + if path is sys.path: + self.check_version_conflict() + path.insert(p, loc) + npath.insert(p, nloc) + break + else: + if path is sys.path: + self.check_version_conflict() + if replace: + path.insert(0, loc) + else: + path.append(loc) + return + + # p is the spot where we found or inserted loc; now remove duplicates + while True: + try: + np = npath.index(nloc, p + 1) + except ValueError: + break + else: + del npath[np], path[np] + # ha! + p = np + + return + + def check_version_conflict(self): + if self.key == 'setuptools': + # ignore the inevitable setuptools self-conflicts :( + return + + nsp = dict.fromkeys(self._get_metadata('namespace_packages.txt')) + loc = normalize_path(self.location) + for modname in self._get_metadata('top_level.txt'): + if (modname not in sys.modules or modname in nsp + or modname in _namespace_packages): + continue + if modname in ('pkg_resources', 'setuptools', 'site'): + continue + fn = getattr(sys.modules[modname], '__file__', None) + if fn and (normalize_path(fn).startswith(loc) or + fn.startswith(self.location)): + continue + issue_warning( + "Module %s was already imported from %s, but %s is being added" + " to sys.path" % (modname, fn, self.location), + ) + + def has_version(self): + try: + self.version + except ValueError: + issue_warning("Unbuilt egg for " + repr(self)) + return False + return True + + def clone(self, **kw): + """Copy this distribution, substituting in any changed keyword args""" + names = 'project_name version py_version platform location precedence' + for attr in names.split(): + kw.setdefault(attr, getattr(self, attr, None)) + kw.setdefault('metadata', self._provider) + return self.__class__(**kw) + + @property + def extras(self): + return [dep for dep in self._dep_map if dep] + + +class EggInfoDistribution(Distribution): + def _reload_version(self): + """ + Packages installed by distutils (e.g. numpy or scipy), + which uses an old safe_version, and so + their version numbers can get mangled when + converted to filenames (e.g., 1.11.0.dev0+2329eae to + 1.11.0.dev0_2329eae). These distributions will not be + parsed properly + downstream by Distribution and safe_version, so + take an extra step and try to get the version number from + the metadata file itself instead of the filename. + """ + md_version = _version_from_file(self._get_metadata(self.PKG_INFO)) + if md_version: + self._version = md_version + return self + + +class DistInfoDistribution(Distribution): + """ + Wrap an actual or potential sys.path entry + w/metadata, .dist-info style. + """ + PKG_INFO = 'METADATA' + EQEQ = re.compile(r"([\(,])\s*(\d.*?)\s*([,\)])") + + @property + def _parsed_pkg_info(self): + """Parse and cache metadata""" + try: + return self._pkg_info + except AttributeError: + metadata = self.get_metadata(self.PKG_INFO) + self._pkg_info = email.parser.Parser().parsestr(metadata) + return self._pkg_info + + @property + def _dep_map(self): + try: + return self.__dep_map + except AttributeError: + self.__dep_map = self._compute_dependencies() + return self.__dep_map + + def _compute_dependencies(self): + """Recompute this distribution's dependencies.""" + dm = self.__dep_map = {None: []} + + reqs = [] + # Including any condition expressions + for req in self._parsed_pkg_info.get_all('Requires-Dist') or []: + reqs.extend(parse_requirements(req)) + + def reqs_for_extra(extra): + for req in reqs: + if not req.marker or req.marker.evaluate({'extra': extra}): + yield req + + common = frozenset(reqs_for_extra(None)) + dm[None].extend(common) + + for extra in self._parsed_pkg_info.get_all('Provides-Extra') or []: + s_extra = safe_extra(extra.strip()) + dm[s_extra] = list(frozenset(reqs_for_extra(extra)) - common) + + return dm + + +_distributionImpl = { + '.egg': Distribution, + '.egg-info': EggInfoDistribution, + '.dist-info': DistInfoDistribution, +} + + +def issue_warning(*args, **kw): + level = 1 + g = globals() + try: + # find the first stack frame that is *not* code in + # the pkg_resources module, to use for the warning + while sys._getframe(level).f_globals is g: + level += 1 + except ValueError: + pass + warnings.warn(stacklevel=level + 1, *args, **kw) + + +class RequirementParseError(ValueError): + def __str__(self): + return ' '.join(self.args) + + +def parse_requirements(strs): + """Yield ``Requirement`` objects for each specification in `strs` + + `strs` must be a string, or a (possibly-nested) iterable thereof. + """ + # create a steppable iterator, so we can handle \-continuations + lines = iter(yield_lines(strs)) + + for line in lines: + # Drop comments -- a hash without a space may be in a URL. + if ' #' in line: + line = line[:line.find(' #')] + # If there is a line continuation, drop it, and append the next line. + if line.endswith('\\'): + line = line[:-2].strip() + try: + line += next(lines) + except StopIteration: + return + yield Requirement(line) + + +class Requirement(packaging.requirements.Requirement): + def __init__(self, requirement_string): + """DO NOT CALL THIS UNDOCUMENTED METHOD; use Requirement.parse()!""" + try: + super(Requirement, self).__init__(requirement_string) + except packaging.requirements.InvalidRequirement as e: + raise RequirementParseError(str(e)) + self.unsafe_name = self.name + project_name = safe_name(self.name) + self.project_name, self.key = project_name, project_name.lower() + self.specs = [ + (spec.operator, spec.version) for spec in self.specifier] + self.extras = tuple(map(safe_extra, self.extras)) + self.hashCmp = ( + self.key, + self.specifier, + frozenset(self.extras), + str(self.marker) if self.marker else None, + ) + self.__hash = hash(self.hashCmp) + + def __eq__(self, other): + return ( + isinstance(other, Requirement) and + self.hashCmp == other.hashCmp + ) + + def __ne__(self, other): + return not self == other + + def __contains__(self, item): + if isinstance(item, Distribution): + if item.key != self.key: + return False + + item = item.version + + # Allow prereleases always in order to match the previous behavior of + # this method. In the future this should be smarter and follow PEP 440 + # more accurately. + return self.specifier.contains(item, prereleases=True) + + def __hash__(self): + return self.__hash + + def __repr__(self): + return "Requirement.parse(%r)" % str(self) + + @staticmethod + def parse(s): + req, = parse_requirements(s) + return req + + +def _always_object(classes): + """ + Ensure object appears in the mro even + for old-style classes. + """ + if object not in classes: + return classes + (object,) + return classes + + +def _find_adapter(registry, ob): + """Return an adapter factory for `ob` from `registry`""" + types = _always_object(inspect.getmro(getattr(ob, '__class__', type(ob)))) + for t in types: + if t in registry: + return registry[t] + + +def ensure_directory(path): + """Ensure that the parent directory of `path` exists""" + dirname = os.path.dirname(path) + py31compat.makedirs(dirname, exist_ok=True) + + +def _bypass_ensure_directory(path): + """Sandbox-bypassing version of ensure_directory()""" + if not WRITE_SUPPORT: + raise IOError('"os.mkdir" not supported on this platform.') + dirname, filename = split(path) + if dirname and filename and not isdir(dirname): + _bypass_ensure_directory(dirname) + mkdir(dirname, 0o755) + + +def split_sections(s): + """Split a string or iterable thereof into (section, content) pairs + + Each ``section`` is a stripped version of the section header ("[section]") + and each ``content`` is a list of stripped lines excluding blank lines and + comment-only lines. If there are any such lines before the first section + header, they're returned in a first ``section`` of ``None``. + """ + section = None + content = [] + for line in yield_lines(s): + if line.startswith("["): + if line.endswith("]"): + if section or content: + yield section, content + section = line[1:-1].strip() + content = [] + else: + raise ValueError("Invalid section heading", line) + else: + content.append(line) + + # wrap up last segment + yield section, content + + +def _mkstemp(*args, **kw): + old_open = os.open + try: + # temporarily bypass sandboxing + os.open = os_open + return tempfile.mkstemp(*args, **kw) + finally: + # and then put it back + os.open = old_open + + +# Silence the PEP440Warning by default, so that end users don't get hit by it +# randomly just because they use pkg_resources. We want to append the rule +# because we want earlier uses of filterwarnings to take precedence over this +# one. +warnings.filterwarnings("ignore", category=PEP440Warning, append=True) + + +# from jaraco.functools 1.3 +def _call_aside(f, *args, **kwargs): + f(*args, **kwargs) + return f + + +@_call_aside +def _initialize(g=globals()): + "Set up global resource manager (deliberately not state-saved)" + manager = ResourceManager() + g['_manager'] = manager + g.update( + (name, getattr(manager, name)) + for name in dir(manager) + if not name.startswith('_') + ) + + +@_call_aside +def _initialize_master_working_set(): + """ + Prepare the master working set and make the ``require()`` + API available. + + This function has explicit effects on the global state + of pkg_resources. It is intended to be invoked once at + the initialization of this module. + + Invocation by other packages is unsupported and done + at their own risk. + """ + working_set = WorkingSet._build_master() + _declare_state('object', working_set=working_set) + + require = working_set.require + iter_entry_points = working_set.iter_entry_points + add_activation_listener = working_set.subscribe + run_script = working_set.run_script + # backward compatibility + run_main = run_script + # Activate all distributions already on sys.path with replace=False and + # ensure that all distributions added to the working set in the future + # (e.g. by calling ``require()``) will get activated as well, + # with higher priority (replace=True). + tuple( + dist.activate(replace=False) + for dist in working_set + ) + add_activation_listener( + lambda dist: dist.activate(replace=True), + existing=False, + ) + working_set.entries = [] + # match order + list(map(working_set.add_entry, sys.path)) + globals().update(locals()) diff --git a/week-0/day-3/my_todo_app/venvironment/lib/python3.6/site-packages/pkg_resources/__pycache__/__init__.cpython-36.pyc b/week-0/day-3/my_todo_app/venvironment/lib/python3.6/site-packages/pkg_resources/__pycache__/__init__.cpython-36.pyc new file mode 100644 index 0000000000000000000000000000000000000000..ff8510874168beb44b7b751232d02ec8aec8bd41 GIT binary patch literal 95310 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 literal 0 HcmV?d00001 diff --git a/week-0/day-3/my_todo_app/venvironment/lib/python3.6/site-packages/pkg_resources/__pycache__/py31compat.cpython-36.pyc b/week-0/day-3/my_todo_app/venvironment/lib/python3.6/site-packages/pkg_resources/__pycache__/py31compat.cpython-36.pyc new file mode 100644 index 0000000000000000000000000000000000000000..79682a7a78031ce4ec4582b9425bcecb7b60c3e4 GIT binary patch literal 657 zcmYjO&2G~`5T4m}(#Umw+GF0phY*z@xFFODQV9-4C`bfL5Ebu2Y$vug>r_pZasXb2 zSK2ElzXB(ATm@yV`8+e<Xy)75Nw@3w-#z;@7XW|Y;CRkIcV@_e0);Dx9{w0%6N^Zw zV<naM3nQsT>Zu@u^0Vr)?}3C2i*wb>Aom0yGyMZ5QiDAcwRDS?TIQaHv>mk-&LBLg z-CVf3jGeINNQVPwFP)h;4z|4tQry8$MEC&tQx7VU`Sc3mULf2JcNl<qyc4OcWa?#- zp8RliANdll;=7nb?o5FjhF4+Bio)2=`a07pA!Co;&Za~K*_I~C3)`Mf=dWk)LutM8 zx?0+fzD-QEC^9ScZTuU^car{IjH`7yE|YTfWs|JbD7nd&d2IB!%)X6Cn_@$;HXJPu zqV41?F4nH?qjGD5#a_c=a@OX{a%Vt+JsjXEQsAPRw^8$I>J|gn)%;{NItcMHl+<+| z^%(k`6AuZ_?#ZTtce*D}4oLRtloLn9gNO%NX||?OV1pY?CMohol7B61FV|X`|I&%| gH7hxQV{XuSzAn^erC+d6!}2=lKIsQO4sj^{0c*O8<NyEw literal 0 HcmV?d00001 diff --git a/week-0/day-3/my_todo_app/venvironment/lib/python3.6/site-packages/pkg_resources/_vendor/__init__.py b/week-0/day-3/my_todo_app/venvironment/lib/python3.6/site-packages/pkg_resources/_vendor/__init__.py new file mode 100644 index 00000000..e69de29b diff --git a/week-0/day-3/my_todo_app/venvironment/lib/python3.6/site-packages/pkg_resources/_vendor/__pycache__/__init__.cpython-36.pyc b/week-0/day-3/my_todo_app/venvironment/lib/python3.6/site-packages/pkg_resources/_vendor/__pycache__/__init__.cpython-36.pyc new file mode 100644 index 0000000000000000000000000000000000000000..53e45a7eed0a44a2b3e11663ad32edf2c696c82d GIT binary patch literal 154 zcmXr!<>lfJG>>Hfg2x~N1{i@12OutH0TL+;!3>&=ek&P@K*9*(m%DyRZh?M5W`S-} zX=YA}Zf03_MqYAps(wLsx^7Wwaeir0a%wS%7mwh@m!;;V<QM73$7kkcmc+;F6;$5h Su*uC&Da}c>16fcE#0&s>Bqt&O literal 0 HcmV?d00001 diff --git a/week-0/day-3/my_todo_app/venvironment/lib/python3.6/site-packages/pkg_resources/_vendor/__pycache__/appdirs.cpython-36.pyc b/week-0/day-3/my_todo_app/venvironment/lib/python3.6/site-packages/pkg_resources/_vendor/__pycache__/appdirs.cpython-36.pyc new file mode 100644 index 0000000000000000000000000000000000000000..44259eb301c02bf6bc6001b527a22e3a6681f5ee GIT binary patch literal 18580 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 WC`ZGt3o@Wb@SO|4>5Q&N@cmy}CEUjV literal 0 HcmV?d00001 diff --git a/week-0/day-3/my_todo_app/venvironment/lib/python3.6/site-packages/pkg_resources/_vendor/__pycache__/pyparsing.cpython-36.pyc b/week-0/day-3/my_todo_app/venvironment/lib/python3.6/site-packages/pkg_resources/_vendor/__pycache__/pyparsing.cpython-36.pyc new file mode 100644 index 0000000000000000000000000000000000000000..0d628c68d2f237bdef5e103acd4ceab97d9b3cf9 GIT binary patch literal 201076 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⪚@bX#|BH79j$)oBKJ($*&PY_f@1tt_oui8DVz zyvD3+E=lx(4D@3zrU*xI{1v_))+f<5af4wE$)vil2E8WZWFbxRb@y}wA4+O?QS0rF zV>@}jXOExs7L&+7d#)#TCRq=Qi8}crb_q}<vx=d|uF-1AD)kNb^^8`Bt&u*}w__Xp z4R7DJtqJ8CJgK|1=UiFUPv5;OVsv#0go*6C`+@;xT_90g^vdcUZjOa$J(RVfTDU#Z zJ;H$E1r;QVAKmm=Q_gVG#c!ct4x2zPr>m?bQCgecc^@ZhW{JtV5AWtVS&6|C*EDhO zbWXt}MBLDY{{R9YpJWn}up%i%H%`tCny8wx=sF7CLcqNng)t_1cD~ND-l#S)+l0@y zq_<8U4Fj4F2gtxTU-5@nUCo2#uA3NSkq3$}cCgtdok;240sP!SRv!8u^x=e~O|bpE zHt{H`T7+T_7%)&WG9ItcC^P{QcODof%{vGQJg7Lt$yIY~Vi8v~F6L^aCBjn_4#^*& zK+R74CZDJ*<BQ_q^q$^C?m+K)?d2-y9^=rd39+&l;JL;0!n@fEoyZ29=*(*1S8^TO zQ;T{cOc5K#fbBq*Jcfurp^$OMIShKRGP)JgfG;DS^M|-Btr_8U$`HZCf!0mM;)ep5 z^3Oat;p+=<D1&&hN+FFN9<HGJ@Gug{P=^pQ-MHHa6lI)`vpS#P<tx0%PGd>f5$E<F zj?^Z;l`!u2dozQBr%q`%C~{a$27bEua0=7}@3Pl8)w`?N<?5&Sjn3Efn*M%1eU6v^ z#LM6F@(;ZH4_^Ke7rO0%3G5tBg@k(0KlAm!@bV%r|H{k1@j@rP(ke%GQeqbH9e((C zUW850b>3;=<psW@y1ym`sJklapW4~~N(R^SLifemHSEtY1+_c`OE{bOB-4=$F^8vd zJ9qNJwcH_&aQ5?Zh?m2>e3BW2+c|lf;kzzeNJO}&@sQtw^}cm=cfPf~BYzE!4FHU4 zPFX&O5czCr{7a^I#lL(;{$=yK3TyJK^PTyX`4(KW`Q`aM;}_cSv?<?KxEt?pD)i^q z;obp9%!0j8AR#E2<cAReM?6J$b{Tw{NYvJYbj0MHNK`W^bRxWS0k%|X9r&#(4Gt6z z)F97_iZ;-2Lb`?YI!^9P3Gov?BT4)7!RaLW>=zz+AzKT*{h-Twp0R{255SyG|Ahz; z@Bh%c;dz}koGr^W;uMGheNv#win2g`8qIdS7a4@@=x!kzKt#wXeWYEO_pr^Qfk06R z|B9R_a;9-ErD&6o%!r=l!P16#lC2HR7#srYQ#pQaa0<%<hjAA9N%5?DM2k)W->O0} zofH+7`OBVPOd4mB#gGL<9xg0nSvc%t{jzj7xzyM3k3u+be$T0W`}fWpdkS}YYz!Xc zK%zy?d!NMNIE-(Vm>&}RF80rsVOSM6&+tbgWbykPIM6x5z{gPxe9-;Q41E$#AI6Ac zg0#N=y$qQk0<Esh?FtC^zXF)ScN8Q53dn-oRh(c|cgCDI<1sQvWP03*cONA-61GJF ze&v18<vqa4D-i&r6f9DDLR^4{Wl^rnlv<VmLxC&<HZKP(N`C)8Bno`|-wcU_zYrWD zEzb(#0Z0mq{|G;aC|bbp6@aTx2a91L06qd<0DKy6hQJ3sa~y;w*pS2#-E3s(W&;Ef zz)~MQB<ivfRv8{e1nxeGi0oY8gN4&cAd52<e8TAT$K;gbNWVKQipgsU?;z|93PbKg z`>}`Rw9JG(;^pXS<G=|oM`q=L6U{wzFM8sO>>;5r(=@EkLy{BNk#dCz>`3oG0P<Qg z7qO~92NquM@C=#-&uQwlV)CY_*UCGUcEJKnVw);!%HUk?0Up3@&E<_fs5RHpgCnlw zbSp0_I}9y5<G9KBUOYV!Mtj=1rp7gt1~j$8TURv8#YrOj$T`Pf4F*5yyb>K0$fLPx z1`x10Y!^sh(=J%Ll3B`d(1!HjTwdA$R6UoW0t)(ikbw6jYfN^G-iKtJV;qjWEIt@+ z9*?SUcPRSC2}y7{)7*yjK^vyQ3Uu8_E506S#e-}GYtBF3gI18VHKQY~2x^T3##RLS zIF?f?gBh?J5EE1!jbL>()JP4}IJ~2|f*bq_26;uQ=tZjd5Ua@Q@ej}PBcRDDpoP10 z_jVtw^~01Jq{LV^?6`0=wQ(##^FNp%Vl#$b&|h#KvoKV7SeKd>FWhEz9WVmoq~7y2 z&Hq=T&_54qmU7M@93TOLH96?`o^VO(UxZ6dh}u>^mGaFyFs;*L$)}-;fGfaWLG7E< zU9AR6IIOM_-~S}J)@aZFPs3iX4z-T?6t0=46RMs1&Nv05<C&ydOIMtYjP}-}I<Xf6 zIvGtpoqa0tRPw3RQ|YHNPi04Qa^z(miViF0bF=H}*^4Q)Qm(5OQaI!}J)Z-&d;_eM zT41I01#=8^{vsyid`^4brJ6tyKOm%agRz;+MRygOn`d){Hk7T83^i7BF5zCX;+(}D z2o@Z%ssRH*r?YtdBD)j!#N72oOv}k)2|l1^BOF9?g0LW`!_wnU4bi{N85eAS*yjY? zllZv?t+aq3ZCCkfO0|NONU>?M4a6y?V|HCa<(>heK@WoSMNi4&nNc_>Mdb^Fl0AJ8 zo7I7XEEEfu2szCiEn^kJIN$zXIC1&g|ITBVvpAD@7PQwSj!XunS*v=jJYC1;F*{xd z1w2sb#X%|z=10r$x(ErDoHvMEA7P=i-0(U^9lWQ(D~?ucJ_Fc!4QBz`tF0nnxv?JS z$t>A@u>u27_2;>C*Jk9!GhAt~rjpM<YR;7jT|-}^RG?3ruF3G&G^wJ))^pS_(~GQb z!7ryi?3CCDVqEA(r4VKcFDLDB9ZHs(5P`!{%m%FyvH9GMmu*db_}e)a5UI`x!tzH@ zApN%%KleFYX5KYxT?83;QLKZsd+oPCnyyk8(cV31wVZ-ZBfWQM@aOw$6VBcz64hOE z0|cD~01SbJFixYqXHu#K(-x~Vr|-oq9AJ$<k$4DiUYmN@lyosOk#wGAsae?{-44vK z2WE6nBwmfPo*%}K@d0vq?Pc|pCW{Gfe#6+sx}Ve9Gs^4m!pj4h;t1B!8X)F<jB$Y% zg<gc-0z1<y$bn7!IFp=Lv&Ur&T5uFK*$dvvsZtT=b621T&NBgL;mlo+31_9(a?YVi zt+R$h(uFrPzDt2o#LZ_XyrbY`Y%J>=sMe8chu>!$1-W6#;W8P`b?%Y<kHN=#g$dxb z!W}AT2{1dbbOh50Ek}LX0lew9w|XnIk^DYqY(LH{$L`B@9%r)%domexvnddz4WKC? zSXZ=MqeXW`*-zuO9z8O6sCe+m;lr4taQ7zN;Y{E=6lj2{<dkKN%5=Xvr<peBP)D*F z=R4`Rwn!&@2Vm&lES*Pf7szGPaHO4W&*CYY0bK;Q+3T=#$Cs6Wcv?0(E^-RMm`RD^ z_~*VIh&FbDObTZqrH8V1PFsjBB!^n?>>q%fS8voS364D0M<5r>5y)-oDaA8nl0)t4 zq8x&p#K|$M)M}iC(uwtF4era-TD1=M<?33s9`_aMI<*1!mFjwR1MaKT)9OZLA&=E+ zqw2z&Yt)<6Cbb!F)~K7*7Q9)jx>XPE>+VgcUUl<@gu2<jb|F2q-o8%V0w(7RcrWM0 zsD63Bp}HJz26%#u|E7#HW$YUkc#_OkwRJ3olVsj3XUZgpHri{3y3k%ZSq5$2gud8} z@b{}*)om9*KH@Z)XVmTL4%BFi-K~JY)SYTKLOtp(wFmX;wY#w<->vrI-OVP3K6U06 zwNFl+=`*L!^qW&>2GqUkKBU~Lj;L4QzD?b)j^e&uJ)j10-ytW@@I)DX^2{!C^31K~ z<eA&d$uqYree%p5>Mb}2=uwn^Cr-S1969X9={2vx{Vr8f!?^EJBTC_Zx3bkJ?t9gk zI*t4Hskf@K8b``|)P$<w%|11$s<`i0H8q9%0d+<JDGVJPqgz&2)e-lQdR9%Vvv@iz zy2t0#%!T~Wy=qp?A?AJRylUWnM9r($;{FQtI`w+o?^kbAZ%|Jl)lv0!bwNFerw5+G z(lay&#PtIX*N(Z~eZ!!rv8-A2TyIsVSEgk|j_<ERA3r$&8n@8eaX47E0q~(dD|ZY~ zm*$}fT!>SpFXJ;=3-Wgi%c%od2=xYS+UW~7Cp=hO&boC&t@foQH#pDb5-CMrQI06b z>Gou%$o|!Epn_VkDxp@4sQmbj3*urDoT1L59<7d@E?cmzhn!k#m_wQ|tYs7SD5Vql z&KsgMxs8jJxrxoILU9G8tf<-79UDqgrh1gX@nGxnC=LS*k4cn%J5E_$z=r}m`=IWC zhk_&758#ksx2MZ`wB97bc^MlT6R`-?c&l*I{JsZ|o+>_cACx4E2kzT<;-qZCS)C>l z!Mpa76~CLS6zR}JhcQ;Xa$~O&{%G?XjKWD9TW+pb9D-q+N={m@6`n*Z5PRyweD%%} z8+Aw|aQX_B7;2XB=HrAS&>+_<L8-~elq_X}vvgEvALPP;HtG`A|Cdg-mQ<(^+X??@ zqF@q;u@B&W$pdx5S<IG2Vc%D}i#0tC;^iu-8q-DYgQOgK{A6)Csb5|6+4rby!fKko zc-{RX;>dxGzhsYSLnWB#EH!69q6lQ26b{A#!Xrqf4*>d`XUwW4`r&9WS60n!ykf5f zy9LfJkTY7g^aLJoQUoxyf4GeZ@zQdILKoii93P1F>Mc;0O5jWfh6-fF7Te_7Zqj#1 zs8g=XB-U~q#hoawkmr?94@(qRNxrM)%{3BpjnK^5!Bbko1i>MWb6zWQEU!)I%zffd z5=3yRTrtlrn3yM^!|t_dxwK2YL9gJ#NNJxwAE?uvC{Kk*QE-$~#|q>XWRVdp>0LuB zgeV5puRAA8vs$`wXmYBKV_GI`d+HQq30@n}GT8Ztz+`f%7y`D0*M`d2rAdOR@^Iqz zES0eJ`7Pk<IL@Ry=C#W)Ge+n~M{Y={+v0jD$M)Juze6=c8tip2bWj)>r<_^P)6Zj+ zz%4@as6N&N8*;XFiLgKg`UL2DQPL)n%IDZ!hj=wk;REanuL3xA2}C>>asI`?WDj0w z9TV^o003lw(wPet^KtqRbO|G2fW~;*xuc%pQ7_;$=;fcf)WJM|K)dbnjZ;Kj&Df{- zHG=bAU+<Vw6s*3eAox6?y0LVY*@c8>vNJMi3Kt*|2w7;OY&-CbrZrknZW*M9k&@J$ zGB`+3R?!(6&oftz-j_nvJml^;mufx8J(}x*wPpeeQ%FG9KrVG#<0#Bzb$^J$aD4RC zY)@~q=e1aVCa;^fZ`-kps>?ol?CH9{i3BkDKk(h>zeFJqG!+sIGEt~-ZF@q}BWPj6 zN74^K4aU4}a(Q&?{T38DtlM^NyWiSz>uo3}?5(BsO>W)318(M!sL#6X)?0VphWn1& z?%1{S)?K&W7UJJS@#6sr1_#cQZ)`eyo<c++%k*nF5e(1imUUrqKfZ(^x<VK7BvTPS z&tfJz3%tCZm(7@hg29~EA?PE8^vKjAb`n$15FdyM)^eWtv|Mn3F~9I<m^63kWr15= zLH=OpV>W~P0^}{K2Rs7|r-o_$h%}7S$nr>+Mp36=;DJ$r48^T!XjQ-t2FDhZRUga( zCNTX33kvU+vPW=1pl3(I3#WIv(CUUrln$Njt0%Mqo&6?2lEdB&trBn%cEi)2ab)|@ z?w)OMzC186(0g^qt`i6%g<-Ob;`(I|o4-u?2Ar<0?77yU-Z*~8?=+l~^hE;5Qv{X& z$)~sS={Y<ZP+7_=lLtc~srp+9F5Iyt^3<K7a|>hW5&(;d88D2IA|xYrAwW2RSqsEF zTpbqZ!vjn?%@GHCE<?dtBMo!LR6BUvJU<VRlPgg<@{*8)W1whSGD5@;>G=r70mP#8 zw=Q~$Mt_-XqB4$S56y%PZiluboX&%`*SOt~3n6YFJa+03H3~4}byO-p-b|!>^P=UU zd4V!#dfpY(Ua~<>p%ykguvf~|F2qJoFJTb0b6*XmaI?<9>Y6@)*_vvQlYs~=p7%Qe zS_E~V%J8UKsBA+NB(lQDvPcee)S=|7Vav_pv4Mf$1p6M-3EItjM8~r<JPfaQWvE|4 z#t$xHX(m*#GnlZ8nRoR9LqdUprALq_vNi;co(z7}ek*8}KBxA`d5{_8R~F~@_)mM` ze>jM?^ft;TzOi`qnEqLGmhAs6XVC^tA*Q&@fwcS_X_sl%_pBuEC2!VtET??7KGy_r znybpCPK47Sa=3^KIR4M$lOPALlhozDN=3^sapV^m5-uzWn+Q&bL}EkzV?-XJe7Bl@ zaoWLGCgnM|K`5Xo0*S!KsbJy3{09fh2-@z!1MK3sz$73bgYXM1FUT)0v}$fWh)s}} zMIKCvJB?1T9PQx~B_2>-<Z_god;bHXI?T;|xq24(LP$b$+RT(1Hfs+Qpv9(5Ca#%} zSp1`-R~i;e4Pg=p4p9S83aW!*z+@>+9Ilkc=2;9+aOE8WAb2b2)2FrKMKmv1S@2_s zeNF|UTJnbZTZNzK_k*5JR74_3W5FcFaa@rhz*(Rwfq$ZU%1fg;9*<22yBZS`3qc^P z^;%WU-(~na3_T{0j8KBt4#$`vQgvtPQPwg8X`AhQh9gVS40jb6QSF{3I->j8388q; zr1Mr6eWF^*(*^XVpj4Rla=K9G-Go6dRgilS2EEpxN1Y$#H%e=<9p;H|#`PImDFuF# z^%8GPS;AUp2Ji;i1r{xR)YYOI2D=&p8~gbfe(n}rs90HtWS43Rv_}FEiTsedMsR11 z?XRJ5+8_`P2GdYDrQoOo2w14#WlSWsh@J)mv*EHOUF~Civ!5Zo6M}>EmD$kXfM=4S zC7|vKj&+cO$)WbHG`8Q?zcVoUftDEK0BK_lIdFcoiW8rqOVGz{LGOGNh2vA?gN|!r zQBmKJyoiNlY>8t>?DcTUIFQxdGLihjHGZYQK;ybB4OBRA8ai_j-P?FwshtaHc38Qf zc#{R5L>tauWrNinXFFnxi~NGlMmp9K3C&sSW^I=wXtt&Y`cVGJ1n5TThZ0(MH16=g z_jnNGdqjKJrfi7gAew@sxM8ne9-Wnj`dMQ`IV+2(CKC7!XV_@wwSE=k8aZTT6r`@G zA!0i!newn3;#g_4ree;O;j0T9e_2eqZ}s~&1dC&M?VN*J22cIAR1Hf$x)<DHX}h6Y zP|&PCnI*E2`ZfYl8w@%5#*GbZjNO24hDm|&<8cy?96CMU3oHuPFQ5!8oMWH?*}%RF zW6Fvm3)PuM<+Sz%Z6Qmi?UEu<gYl?v^Uc&e0GvY`^w!I%(aFUW6~R2bYPC*j%1HsY zc`en{fxYvxaal@rQ%ZTc^*1HcmtBcda=l7TPKg@~%hD8>zfXAyOzCDjzvgfV39Num z3cUpW>e3u%X^pvPN7FHؗrh7at*=QEvv~J*<{*QuwU=~ZY`n%-s`0c|S^K*s4 z&sJLhTp}FrpG_LCiixM604Hd{)w9UEs<m^{m_ES|8jHq=nU~PPWNI6R{`MW_VdwUc ziQ;@emgU3HQ1}WKQ7;YO>>}`Xglq8v-bn<1X-@;ME@^S|2E_cGfXe8imxU$h#^WI? zEw++VM@v?6z5j$`T)mp7wb~)qb8(W(y=i8u4|+jhW}9{0a4zQF9}M<B_^odSlaOoC z?FOhj8VO3`zK%GklSoD9_r$~8;rL(~JTR#}Q=0UT**kjv$a!u)=lAd$O%n9CbTB*J zd5(k;wG8B&*gcs3cHYakOISF0op8Y#spQ`WU7y<km5}DHk4Fx=9*KlvUxvFoj0-we zl(QF7Pg4O4YH>oBZ>T4$P<4AcF#|srFwnN(8(EauM&YkV<u2sGEQpvCo!J5(Hn5MH z8j?I(m`6Z><x5`y?ZzR({uxK>+1Sy7p=4Gie+}n!zS<!R27#R(AFIV<C(A)l3KvWf z(U!nnz-HTe5K<~^G7dE7(--c2{lqR{Ob(<&RS%p;4<F#^Y$QPDo0oLIonR19<#Q_~ zAU?eW{H0U9^yS|0*MNkCsZNf>$h2F>>2>}WRLz%(8r6TT78)|?g3beRHVRwu3P2l3 zZB+I_ARdLPp(?3%&Uu(o0@fQx3FS@6Y$N4Zp2RVsWIR-6@6rb7BzG3&5@ZmT9z0$B ziuGOMZn732BcY+FLA{1u98`g`+mA(teK4?b_CIM^u>P&RcU!P!1dH1A`rTc0`Xj2X zuvV6wT!|qxR0X}`G;!J^%ZXoZ^ZMExj;|-06GT8j?$Ba%uDI|9L$Di)6IZD1)$udE z7SsN@>j~eWY3XpJUxOx1QVg7XS%I^|0Rs}~Alx!<Mu1zni%D+bxKUn!ma}W=Z8Owg z(@$VSjg51X%J4}aa{^zAUCP6JA!@DAC<jxuNT0D@3ZCAcL&lMvacZix4EslyC@?{c zsU6D&8_wvkhudN-7+fx~TE4*SHu7>KFM`Z@D2V=Um@)6=3&GwW;FIiw)6P%w`Te{+ z$E31RZ;zJuuSDj;hgs2%s)6qhB{fuWy&(K0s~9k0DDC6#0Di&<*4%&D`zA|m_;krF zuh|iB9&-SNl+p~9fa4#oe3&AKiN&yc01drpkLx2zY_LF()kRFeO_A^5B1X+b_PWIR zeUP<+GugavMTy+H-o4abH8yqq-D$8hm7F5WiQdXv=g6vsI1!>@?lrN$(Qw<88LNa+ zS$hmWuvxe+>DDcs%JCBc3XMDj{JPq?YBc*($Ta9GpKo2Qnf;$-9iitX?qHEH+z7{! z@ceu<M+_pF%M{AEWh|?gL(v0Z%FF={eZhjjB!M(CPdc!ma-cQ)X-zO?3XnWs7l+4K z%wTqt>l8S!8A1TgYtl2v8)@g1q93sR<oSW7xMMyud&A5+SYto|9J4+pe!@WJ&8N@Y z@DOx(&p`3Do`N>;QLPOOZQV7{)?I@yP?Z;#;b~|e027F;?Z-I5I5&N#VIemSTG1eK z55t^Mc}W}Me`s?z3*WqDMQR=#p_%}>Htr@ieGT%X<8b&x1ACO}x65&-p6J~5@y=*U z9drkIRz!F*Kab*p&39JfYMKq{3Z(GPeYmFQ)A}Ue`OJ(3j$vj3W~%HQ+7!To;V_h* zK^Mb^dXMP<a1*Hm4&I^k!AIB!ujPfJMltEbr{@tP!dpz8s~h7RD81{E7Z?z{lm}@h z4co@%Yrp9bEYW!!_=sz0n%%^y^AiLdQDWEtBhetCk%IoCHk{We(O}D9fSh--woQQ8 zDwFRBDC|9~3UdrjIS)``5GPhTa?}0Is))2I8TcD)>Wo%l6fL2g;k9D_t+xf=cbW42 zIDr8YLBGo{|Es7q$D4<QxHy>-PUQX@M_bg|`}`-4Fs&nDo1c;MXVP+|5)Y;YTvBEl zxHfQT-|WHJHAqGGc{%Wt(=ui9up8;YRLNngV6o!AI-HBv;XR2<DvlUQEM%TYY8w*7 zeHd{Ii2K*c#C&TqF-InRik<_U&-hQszXgkN>jKs?yh}P?<2Cx0O7^c#DEymmeQoQ* z@FkAlTN;_#KO!c5Qi;pE#Vx?sHn_^%+(_yAO=J=G^d(w#vu+h)K&k%n?W%G{HT4VL zw6g~AGL@ds*E`_mGcn$Y-!lB5;`B^rzJR9{&q7a!eze?=A+%CLSzKQ=dt&A&zXMtA zpKoilN&5@TtC6P<1=Q>F(OjQR)?Tcyg5Ru;`sz{PLHngVn>_P*qO|H^-S^1-gz5br zlpwv2clY?uSM2G*E7UCIJRYlAs`i7Is9EaF<G>|s@0X<X%(aQ=v(yC83GZ1ry$^j^ zkeQs-rV?TXgw;eG_IwFYud&fJ&IL|rE;Y{6yu6v0pX24Dy!;ts3K{iRd=k<3^?Z6G zzy1O*oI+aIHP0X=UYh12Ii{Tya4QW*p79B-QOS=W5@aY;)}opMe2F;VXpeYpnk_8W zgmlVGakQ5P`Qf!<F+L?>O{p~@qYf?l7_1#Ajhwa*5Ft#VcpTu8D&Q!jm7v)=Q*;r; zC4vruZh*060W@3=3&t8qIP}*w@^yJ~0~~O6rq+l<p%fMrN<f&Jj)YbsHjX&NHGI3A zK8f+Jc?FKuDp+#3+_d2*OU_<A%;MNNxW>R#AQR;om|@eh6`+^|8i2zNnOYR`b1A~k zK13JB!t*c)2f@+kS4tjbt=))cJ&GJapMen~^`<V&*PU5eS>DXv<GMh57U3H;ttfuP zSc3wRVh0k=5|`@D0^CPnUaeze>ZwtZ3q86)R9=4=rmV2_6HS-F!*qi2%c!cZG=cDn zm4@)GDwQ6DVb$AManZFv#g}8ybE#$$JsN$4P4xe`eBFbe9OV?6kf;=t`!OEa-((h1 z6c1J*!h}kq5}=DQaX7^MxeAvu1g=!&%m7yxd5jfUHL$e6P=isU&p-fM2haK_E5pE{ zJtKx32E9m?kq}oQhO!bOATXr;!n6#=wj3;6M4lX%i!vD4!RbXF!14m#`c!6~(2;^w zH>Zx*4haZ$<Ip2OD5N_j#e3Mn>?thtJEhx$g}xZ?3?5r0T94sY4K_zHfQi+xL5s2E z9t{dUF<_huv3_#=DC+&Id=9B094}LU@ApzEqz}doS!1R(bsHtb{`NL0-cC>pqO?Vo zk&n+uDs$^g?IC^4UW@YuWbb?$Rq?XiExTSpi+SnLU+;5&joq*u7hlWZ1ttmJYAP<J zdy5%qSL*Laq<67`nrsBcoa#)s<DbyWP5bRj4Jf_hyo06vFfZ@qh51IP!*F<(HD&T6 ze(&Uy&Sz1r!4aek{;p;Uu50Sk!{t$p@&n*U5i;{+_MJu`I`ir<P<%QOn}3*dusen# zgv>yF28o`5nL2$kg>z0kH2HH*zJb#%Gq6P<<a?cgk>LuuP=@>G{cgjw)5qw9(=O<M zmonqJ&@KLqs{=bMfV(r1ac%&f5Ct;>@~OeYz!86i$X*MMcBj`^A0dZxQbQSBk(A+U zD6BVO@fTTdZa1mq00+-6rS32H#QapG54T+kh?eL>Jty;#IoV!3<|s(;6;B*+KEv7d z>%6>xc7{{X-`0J8@h3ey(~;qpNZj7ZRQd?3s;4OSb(o@^Su;g9Ua{gYWp);d0q}g- z?;T9cFQCT%yXPetf{}R%FKAdHvEGfrBp9L&u8^FQdWGZ+O+J-|Xd{@TvVQurl-ltA zEX|2-yuUKGNXVb1*b`tG|KB!Cf7|cFmur@ikZPKxDa_K%oTV4Ftu@dO6qu4E6audk z;KOEQ(u&hAnYk5vv@Slo7EfOdhBU;OEsg@2Is%LFdHf}|OcR8h$ID-)nM}VKq)fQP zq78CidZ{%l*>7<!g;nGF_lK-n1{o2>%)Ru9-5QzLZE(_5v9-nuO;B*O^LIbJGkSVU zm1PBv&+*T(-n70?U=h{}@$y_}Mi%0ib(YI?{;Ut0nBM5L&>IVPA#3qFfS>zsxG1tL zvS4Ni@!o(-!qMz}3%wq^^=n{TU@OecHQ=oU<|;V#1J67s;8XaLZREs$Kc(&WWlsYW z6->=EPw$v-#Wvs$Yy;>%16p$Pa3nXk0qNzm4=_Or<At{fJV#g;h1V9qQT$sR1gzu1 zMhdL9Rx(4z+u)KFn|N$`TjAe-m((B|twFuL(OU0-7Ngf_eIkieO=(YJW1<qTOq}30 zgs357HqFAZgDeC6q4&$3Vk1Cz03#D{tEOpVoMb>x6|r}E5fIXCRqO*DS=3$UQ-omI zNeiu3Veow{hFYY0*IdK9UgIS<+^fmvPIk>{Sb=((2acRP2^T|hmV$<~zhe#`<V9vk zFiqeHaEe@V*`s`ufUp^nI9+(2DbF|M_Lv(z@spdPy8>>PGrqUWkk$zEiLDQuegZ%} zcp#|I4FpJt<XEzvMi@T4SMz;_+^8p0hRFBzEVI(L&X?E~oY5L}{Vt!vhJ>vtK(c1n zr7<rCb00hTxhBdmjP~u<qgpW{pM<7V_zqKHcNdR7rMVS+PUT_c1UO$nm5XV(l@Z^f z@D7O(p0l{;xM_uH#ye1fL!y=HT3u$iyF?}do(A>&%2YqcvEdLzPS(nE6y!ia>kBRz ztklNJBQYTktnXm43^{@Hwl5DcvL9o7r4>-9^QSfadUR2z<%IW`B&RkCALtOPLTUjm zHlDRxv1hC?_)LMj6t`D2?;<kdK;;b|u>Dh7?h$G_LgYiQP|!c4wA``#?HPMyTD<(R zx@gf>Xz7(9^km~kYRVq4tOtU|Qwmap{Yq^#Dj^w$Ga?pLj(AFj?8jsnO2)M>LsUWj zqB$Igv%^UnV%(_q9b)zCW)w-A!Xk7Mf|&lO4&L@1cR&NLpVD<GJ@|S*TF(%5g|ou5 zu%uVfqL8bI;B{^sN@nis4j3TN#oony2iaccC8`N<v2@yw37n80Gm-ArSxNR(67abT zlFzoLOiT(!ZmJ%V+Bi1^>lln0XJNh|s?jP2WTEl|%0ERL4R;DkkJD2k-4bnK^t*AW zk8U8qP$v_jL&%VQ&@{@Od>yTW9986^<N9?y=<V^a*bbr`Xf@;LI;~O)R2qyjKKV5j zRo`faJTp(buQZ3^h36Nd_OKggTQO(M%n}@Jjbau-g{03yYA2eTX%37%pe`!<CNcnG zvJN1kCUBEI%79iqKd!Mqba>IABQX$W83Y&h6MKm2!c*?-NKG`@yEyM4fTvz7+cH+e z5qW$Fst~Oo3_=8_nBwMr#Y<L|v&!T=KqY9uE|Qz7iFO)p6cWcKt<ldH&>C?{?rAe5 z!_XSVkhs&8x>0sU_OaqoLR5()TG0}43*3TEPC==H6$?it8Y}v|v?>Weuz6ggiSRj+ zHKuyRO+!;vgJh>@>&JBtQbRK*4@svg;XCNnh8rD+zB7bf3Z?z!G7BTvBC-OB@U0_O zUIJTNZ3%dtmcF%v2i(j7j-?3rUnHiv!;@9$=glg#fJKumewQL7c)&|0X84qWc!TcD z;9rXGD0{`*th)#1U^$+4G)n;y1WGUsql}iPH>I4jc*o;Fpy@TAskdS^D=dK2qnL_u z`Cb^a+dz@Efg<}LD6$q%WUH~pwL3ouk4~9J%M(cvB0>By-}2fP2#|81#CXD+UjO!E z{R_JMkgNp$9BdNH(=<kA=NOPu)hG;v7)dY?FaRea-LDENc1CFhW!6jI*b6I4AAG#> z1F@#8XA#@9h$g^kOtxVgg$>gaQbd>Q$f(Sgb8rBntE3l0mgIouhm0PtsUv{`U|_~@ z)Wa<@4cctf$Fw;D*DG6T3@_GTn5cZUuTlx^SbA6j78qKtp+J}oVdez+u}HHvYik6m z+H1Y(Lsf;TINuv-h}Q5nrRZ3kt5cQoNVyKoPlQ24gie7j1wHn1GDA6p#YCGFq6&0< zjm!<*8JyU}YT!Det1Hu!RpT{S6#AuczL9u1mgwH*{E=8Z>SBQDHW-yzvc-ZoW4Y>q z;EKa651a?V6FHIv{RicFkTY1gg{lg2HS|%`ctRswTI)figmpn+z?{8`>MiBtSGs6X zp0kS-{0&m(SU&_fr#l1bW?2;c;WXOw5hTv|X4Ha0fa=7^gNl>V6G4Vrhu#nFjh>^6 zBT=+juwI3juW#xS9y380MGwX-SVBchv8IUDBD9QLG?-zY(XoOOFLX4+(Frr_r+yA# zk|3!;QASfh0q`c3jzVM8dKYG7p#&+ixz~ayORq0tPmHq>;<n4(CH@WLhf~P{mqUCP zaVWyI=ZeWm%;<T3H*MAY+#(8nhkScz%y%IbA*>22E&I&D-VVJF`a`ZqPvQcn8-e!= ztvvFCybWiwmhy?zwgXFu)5{Atm)=S!;1Abu5}UYB)YfbHP!Q|o{R%rj&EkHX2|v!< zQ&?MH#aH3hOBO!uFGTnICN6ujhrEvaN1BJxZ(CkuZu(3@Z5E$NLm+zXarRBHhm4Hh z2=|Trqq6e~{J5!f??LHUx}a`{tJvqsBAEJrxqBD*xUT!Y6BrBz0}ucof=EhM<Pj(d z07X(H^{`A!vM7+07?U7P!j?=u;2~!C06~DfGZe`opv0!)Dsf~xY2u`5ns{4((lp++ zo9rg*Pnu-6X*Qen=98wIZ0bz1{@C7RKTSTHG|i^%uG`)0_xC^No_p`i03`KDnu5f| zojd2A_xZmch6IV?>7L2Ri0^x9#KMs1i^Q!ULh@5_PXtdQa`J5-$xK0lSQhlpf&9dg zF85#ksVkpXoX&IIiwlS^a_73R63AUGVNZe02FP*%D+F>;$u;r~2}9N_llsu&ehN)~ z(djPvJ}+d7$<s$ciKGHWF!z5WV#s6t)4!zjqias}C>;-GRev7p9$F&NC?)^Z(i#$r z{<|fj(otUaBl`T&xYmmwHCu#-^Ii49a|85m56GEl`;Co^WQfoA8+so0=((5lti!Jk zI~xxrV8!?Q6HIQ{VaEmb+RibuKAlIXKMTs_e7;1h?}zmR4J%@>5sZmvR;V%flsOeW zp4N*08yHgOoTbekv#3;i7`r)m6G1>2OQQ(lgj=EB$!mmOJglaxDOh5GX`uivlxmE` zVwE`Bb8KPEbrgb|cm|k~qmIoI=abhKISljV3!p~ha%Kts70|T*?t(zLp8z*zI*RL< z<u+=;xDF?2Hr<$IrkEb7>q-1FwP0Ti(GwFg9O^X2PopS09y>gwj>*k<Po<*XhpBW8 zc^~#TMVTSs)POnz%o^Mb6xI`^(b{}v?i2wW=4+L?xpSu;diW8ZoSQrK*n8ePe{QaJ zs`B2)-ZL7S6tr|<Nn8yn2SvWoe)HSKW^S8i4Fq8D)dz>$p#^qeX5812Lbs})AJ@cK zX>6-o0UUi^9@{!jb=&PhDwv6Tq0=j_Cz&LOVH|BCP{KE=?`GyC^TNye$vm+tGEd@; zTG^J;@ppa^I=&Z|DV1CeHz?#*@dkxLoi|lwDD5^zsN2w+>{BGYG;!(_*?EQGqJOE& zbzOwoTqy6a>h2H01kN1E3|WM1B14R3lVtMK-=*Bd+7wP3NFYbE&!20D-oB(Nh2xq7 zKs!5H2Nuwa2r=o#AN=TNDJRc-GX4@U-0-1&0)}-&iUY}J{g80t(=^d_w=f|X(XvV^ z5UgVjWq35g?|>N}DLAZ3DNC7xN)4dqlf4S%ds+pVNh3kUo#7t8Nu#8oL|I0zZkdC0 zUH!2uXM{Y33_+VGUhEN12ujQ;v@_Cp3#Bc65$22$QRDM<xWQ-|Nj<8x>s_Fv+``@V z9E2F1(Q|u7{%mSMoXeX9tbp&5k*lk-(xZ@7rh_8t?`u3)GD&&`w^;`PlW7~5F}aPI zU6WAh?+1=^aBe92wG79Js?T$rm@S(1O<(y`PYR{&zk*!T@D`-MxTIv7mT|G>q4zaT zFcs_SuugCob}+yJbga6=mNnq-qnn(H@ZRx(2|ZN}oSt4ZIoRYiXsd-9knOw!S~MLz ze`3l%&F)~`F65f6PrXGlX-uc@TiX8_WN95WC%F`#rRWQe^=RpY=km$``v{|(*gW5G zId}{9Tl9dyvETU#|0iU|5eY8St^gg-<oQrvAh_9CxJ0#0&xHw1iY-{K4|cA?TsmiF zrmStQ)Xmt!Uhg?El+_wfDnoZ@EE#sFxHIayTmfyRF-j;e_;k6ls*4iSEdQY$b=YT; z<z~@WrXq)esIGPDN6k~zE#GAclq1pmk`5x>6dNqY|9rUupFfX3I_Z*eOTtGhDxH*9 zfk+gby?N#8VsvgtIxg2y=!SZ0iry)_5DwNXzt3~7wIioWM`&$d(%NCQ_DtN`ao5_@ zSDo1RIIZ!@N7Pyvp@Hn_sh~5FzJ$YviVP?xt?g-uZ)8$Hm<aOw`*Iia$5Si=HY1;) zP_vtCef)J7vu^krAAd=pQZ*L38oQ2Wn1hzdOiaffm;JYdJx{t^l*0~T{DA=bpe_xy zGpdVOx|$Q`PwV67^zC<XN9yrYP-4u#)4v%`F(i^=j9dcvUPQt5{pPgfe3-tVN;<Gb z(Z{LyM>QU4zPi?9A=*;_$ZrIc3$zdOE9=uDp9y4*;v6@Ho>nu$mQe>8q1dA!BRtB7 zt7MfjlL)asGWJIM=~DI@OqFTnw*ymqOp1rGQuL_7RQ$6{iYJ)b^J<T06U?Hq{3;6( zmVGalf0+Ei6s!tcYbIhkb=6KP=N4!H3lW0?4^xd24>b!M8$Y3Q?nHnFB~ttc5aMlN z5bz~*v8-0(5JJboO=oDb1xP(x#_$Q{R6|S)V9$~Lo~{Otk}sng&ANEb3WZ203Csu< zFH@W&t^8|>0AleD^fX;Gqp4FvGuA)`fbFpQmATuI$UCf(n*dI6bwE5#i6^Q@4=aWP zsAi#bFtUJg;qxK1dbmu6&(ACped3_=oZT<Gh)8lpG6pAbv5im`kbPlHZ75c=TF_tB ztiP(!o~I-%0mx{(BTsffMs7U@WQHMLT&~1+Fq3!rcV$bII;R~#&hMl^PKym%dU86! zn<?zL46YcgG0HQ69BDV1|7`^r(Hu-S@jt33vdHZk&XJ441B4bg!t@J4NYc+cnxa{L zYtM6m-m|phS1d-8paGWSz=M~zGG(};V5iZ&)VtIty37kAo<!h)4TOCn(aFWl&~KD+ zw40tfJLmEXX{hi_b%7Agq>@94ZOSnYGbybhSjsVFkw^sH*-l9n<k5#PoYSr<5)`w_ zS%*@9l(!}laiWoQiO$t$Ap=iZxmpq_P85uwOe|WUHVZsmsUDAek&-N=mBBtB%Qk6k zRfF#}U@kz3EHRk`Xz?u=J8Q4n{CK@uGU!lGfHpcW`U&6Y!v(_TK*gXqK5}YYm~VV^ z$F}$Fd2stZ?@u2-D=MPEmC;)}Y&OP6rB9I};%x2x?hk_z=`oA)1QO$9xq>WKFVru| z)ZiYfz2Tu&ojSZ$t!~1HP`N$nP`{N<1-Rg-$b4EyMwwD{v?lsftXwf(|K|F(wIk!S zCb!ni3rn{m>6XL)y)^VS9XYe69FhmeonT_ecKIB%K{RRg1|EweVBlzyzqJEg6v(O$ z2NR7r!+eG7wP#@A+8!AiVnbpA$c@-IIq@MU3d#saD&9S9yw5~$8QZ4>=N^<n#(5Se zglu|%t?Lim_COzt!`Zt~Sw{1`mu%2b-i|Idv|DzO0OEm!y#%?bKrBX#o)>;Tbj?Tm zUS<zq8Q@|Ot+qcyUD|A?qbl4)20JMz?&!8ru4$TE5AVr}h0avLiM%`dtZufc_&obA zQ@>%8(zq4fRvO*@BwBK7GvhmNU#GTfN4hxEiqeI>FlLXm6SwJN?d#^A6fSB!Jc)Rb z08o&cClzNk4qOMEks&@w*&PR&AzPh~Rk!5z7zkKWhbgwRk)&T`<2bqgWmdgeBx|k2 zm+W5MSz_7d&~b|h`JDSIV!H;<jP<<KN<(kp*<WZ+n?L%X%(on+iNV(GnT}!2jPVh1 zAhnnEliAZx^We?zY48TxWJJxqjpSgjx|uB;pbSyn{+8^|McXPH|DNf2%7gkXtx5DJ zOxDyyvD0Eif2zs-*SdU}sfhlJyVxV9)4acn?~8=Rar2(f%zKM}6bW}%nfOC*Y2pP; z>cu$}`hXMyG1wA(Fr1_ICD<O|$+mWI;<hvXb)a{}4GHzU9n(H=v(s*SzBw?nU;Q{v zH&$7PW*^z9FP)s38ChX1+RlKLey7fWW$j)43?vI+hE1e>`I~wM;Gt(Co6gb-liz+2 zva>G&UjVL$-`bZsQ2_#Nl>JH$$>Va*!XLzV6=&@3%HSsKO&pCXiGwIuv(kK)0NMmU zz5^>@hl%x#Vd&4f=T=JhdZU{pcdyiY6vae2MD1CgXWvuLyJxTax-nI?Qi5&^->#m7 zdVj+{(W15T8%y2h-i>9>QtmPM?uEPRsNzHe=nX7Jbw_FBp77uc!+cwC6vFi!_Q*(V zP5C$owSYA>Pso5~PwwVP(Vk#CZ5gF=xGwM37+gMSRDe%Yrr*8Ar_XwqCMB^demBxr zo_#MZFhcI?uXp2JXSpet^Tc;8zK&_`Qf`EvrJfhvJtgiAZ~nyVa2fPG^@dU@0(6GT zf5;*Rc+n1bi1O^|7_qK!tu+&wf=XS)<I>jBL+Ip^Xvd*0|NR3d9e|b)J0X+1{XtoY zK`qKe3%g7zg7a9forNfL9Cx|2d%Hwor>lw8U;PqP7D`GiK<CS5+%kFX+WE5!+aNTT zmy-%2Gi-^fr!T2k!p2A|I;}bqjy-h1Q>cterk-#tsw1Ve+V01@b$nr)O2`B!N<EW( zU9FUu1%+u4$%S#K#M|o0)&-{G(6ti?6plpVu$Ra6cp?*QgcruKu&k&Tqu4MJ%nJiQ z*;7HBK>k~123Oy5I^<E(Np*4CLTjf|-5B4guUmSVG`dqoZ@ED~F`0>QZLU7zq~E*Z z$?aIj5qPQWq=f;<iVB{F$@23&9;P4!1hp7lG7(Nf$DB><KNFFO3J}PID_mPF4-d92 zq%wJ*YbkA=xpJ#jWj3Ehz{YOBa`ybC^Ks60&XC#(Ls*=3nc`VrHmVt5F$?L$?LPL5 zm_g+Km&tdS7_qf<fL->gYEPEf#KBW8qo`aX8t*}WATrq>ysM>b^x`oK-7`LRAN-;& z6F!`Kt+DfFUeqh$jR#xb$k2)6Viu~Wor2xWwi{2?s_;F?0CZfP`MNW+MX3Wb0lSMt zp0j=N5|P!|s?M%BRl4!O4V&Dl8aM|#CxY|}RF;Iyk~A1s0=ZP)g?pudET1+5Zk5s) zhLC6aYfdL|gqZH=UA%@BYWD)p*z1(YAr3Noh~4DaW8-g4l>TpN@g-qlp;LKtjN}>* zW+n&np9PwkNyJ*MbrS13a4MIm1$Sf3TC|({=nh?ePZyEL&4CY>=Py-_LUSyN4_hNr zxw!^diil8rESY=|y~H0#u15vxH6)$7?1rHch>)}XZPO_B@uX`+A<mUlLl#AM@+%!_ zkuVH*aW{~=n~)3=rt6m{Xjq5I5~;urn=Qx#u96*CAZsH-{)r7TwqBtE5T%3SjgH1~ zt~>e`om`Fl6bWQiUQoA<vucZt9T&;8D$>VVJ-|&Md)}fjp>Z$(fp!eM6fiI@4zZ?9 zl7z#O#UD5u)#`6Eqt%h??ZjwB67a4z&4n4_oI~laKxdA$?sOIIJl$`d&wcvFd~Ry0 z|AzCqI+k!@Gc(_@!qm6%S5~_7+`p|`eeWt;{pFRm`jP0bZHwP^gDuWPU(rN=@@6O6 zN_U><x4y~u-guLzCi!prCKnX9>HMJ;CcmALU1j#))@?qy$~M1$rEM;g&A+ydE`8Q& zu$+yKR%T}AAFMFfZ4kvuzf&9isT*(f)HMI+u+eQgzqG>Sw{LVe`;bBQqrZV*lHnPo zixIIC-HrXLY}Hp++N$tddl#;zHY-HeX6oh7=lRnj?nWv|AR(zSW@i40hF}y|zST%B zDU{hZq2qT`v&1rF)K(liPw~l&;yT-*A}MOFJVfy@qT^>U{>8P`?4-=VER&f>MrLNh zj8h8KIX*r{R8?zFI5lDir3!r6<Ta&kGKSx2O09}=2@{aB-nVaT>)5iTXvT0##stQ& zwKhU5R)v91c_R79*RcJQ*W`qd3W<(PAdD*8heaG>QU4(rp;r<aB;F~9T(I;T=Z@N< z9?Ibavw{_b82Il*cm$VQR7Wz!I_6vt(`l{XKTVf}insQ_==RZxwsN(_S(v<q#k2r} zL9WouxX-NBR`2*|QW38wKVh~M(D(<%w8%R@hH#b)E~{shTvSsxGxJZiMU5jH7RS;W ziZd>jVH?9HZ8=@9hknFqClTLByG+`o3v5g&rDQPH;;g#-KFtK~KH_ebUNtCsl>t!Z zjG<ogG0S2_>O?$$9fyDr&DEdmU{2-(D<9Be4GR@i-L>Bi$FsL}+;Nf4;}#ocd24|z zb`XoqdFUjTY!>d-hOP*(W~|TPE!(UmB9A?W67@W@L>_RZTE{2c3t~cztrLdpk~7+r z&$%XKLE=75E&qu&d!D7eiaMSPGb<&(%Gkq`iP5N5CV0Tg`t*`Sj%3a=StZg3WtFkF z$zsQGOS-=u<$R4e^*9N5o6(e~yDX<)Wj<B_k86?ey;6NH<S73=ErRSsx(dVtZV7?g zQnoXw6ldmF105f^i*sE0Wo3FAkA+FR$u#rvsj@J@8ixyf`<)t*%f1_3($kg$wE@_W z49ao`|A9uPBhp1qD*bC@)!qUVEw9|%c5D1mhe3JWcp^mOFd-EKH*(%A?L9hlp4tAB ztPN3}Gkw)*(q0H+KOQ7!>9Cy6*$mzb#=n>KYjbL%q>k8-SmvWR$0A<zq88dodEVRZ z54}t6|D^S4c9Bf&SJ+I%GQlMNIq$>xCz-9(5?VS_GP9A;3OG4OM$fr{q;g1E5|fGO zVX2Vkdd~H^$jU@o<NNNe1%<-Icv0nLjE?ezr#@P`90tN-?Q>3#l2v*aCf0+gb%~_O zmQ~$xdIuT27BR0yE;XSOhe)ups1@=DJyaHhj`zi<)h`gn&=!qj{wk<=F*fc-03?kA z%jhbXJkV?>Lw(i>OD+~$O(&}m3I#Ku@I=Q&FMuk8$a*|&T9KIP#6>g45o0u2o+~}L zHS}!jgQfY}xw#5b*e%Ww!iuD<9#m0V2X?qw9G^X2zdB!?bi;hx8prO!bt<tPASifZ zF(Gv097D{yH;sNfsOFmm*V%uk4Qo~rLx>0w6-qQnl>QcBkt-Yw>jW&ro*m`GQul=d zL~icFAh~XOF0gY?5l?Ie<s4U++a}kT4m0NB3dp=0vw6_ODK?1@Ya8dEz-pv@>#@;X z*41QVOk-^LK|#Y0>GGT|7M=Gs?tGv}<wVERZm)&jXbyP?bpLT}P*1oAtx$C>AaY+S zLHZEj)Wu6RkSZ_ER+Q25M&_hz=1ijLsO!jr*jmm%B42ZoF*ZzQto$j+qIY7_j$6t| zY`a&_78yquxuNr0n+Jgqiz86Y0{1dDz%7)gS2xD=tteNcT0L2N>3oNGAR*540<DE4 z-C=gxP9#J&xpw8{m+US1Z(L3s>Gh6tZ?F{}pUCDTNuY@u&U!+RmQT)>aPli%x!Nc_ z_THVT(S<H`wDdh}Hr-)Xh*czi&(hBEUE6kLVTF~1_({r|O%@He0HPJDe26L^&Q=-R zt4l6}&Yu0TlXcR_I6V>_Sb7-yY0M-Ss(W?`Bh2r4BwN`E&Ax|bAL~%EeI!iX&5dN& zF3ryFY^Ap}7G7={%&v#B)vYj^U5}{gN3&&bt?5VFnx?w2Nv0F#1l!olXo1DBum;4C zs9c(5*3j39u8FBD+s)pqs-|d7E?H9cG3q$bdT4||Mb3p6VqBOU*RL#8!&Cs9Ku!nv zTI4+0L?{>D=jr+2i!gcZa%I_+sg8s&emix@;<QbZ*GAo>J}z=YO#GAaZhw5?$#MKs z7OGEfBemH4lM|zf=9KZ<MC_1<4%6Wbi;Z@|&j-JWY6UypGDMrJzFHZ@8iB5mY*UkG zFB9)1lJ1#8t&5dvs`V`lMU|BrHLbMUM3aI?2RGSl2`*Vk5@J$;4e7v{OT-7;F3SO< zSu{XRpI%JptHezVbY?E%H<fE16NIxUU8zp7vQavTh$gocql(QE;%T?sm|>-?7qh0b zB@>Jml<rJk6FHP#Gn2z8m2e`x@DSSsEle9(=t)$+Pg&?kQ-YBLpxZ&X?^c{^=+-eO z&AbpxD;_PzJ8qK@sPQCQ@`TR=eYS|x;({4Y1Z?i`rUV6&M!{N{?opzJ&ZK$tMZS7U ztw~xyfYCOYDH>v=3#wW_`n!T$K}t?JM6J-!m-uQj)lkcTkegR8tk{ywtR3%IVPJ}< zCw_iv8dlF7ey@p;=_uzjU*H33*Q6(o!D|WW#}F~0&{4~fAz?a2kNEhZwqh}Z`HMVn zUBY1^49uQ8M({eK)-5i4AT{Ea<l5PSnU=#0i|Euso`zjfm<f%#F&8%Sq}meDqw53< z2n<Wjb~SbjM80EimoUdyz%pympATNaRs-3LbrcDK)nZBQQbGc)=~{Z@N8B8;I<a+_ zR^sZ`u@~cSr^2Z7ts6Hk61>s0EOLJ_g74$pTqSjfVzw^#5FTT99-BD)&z?+j6(}0j zr-x-N7MH5zT&zu(=!ExS^kh4ysPw#_=Y6uLFO$ZCC{(?3h3Jg=ul1&)Q1!mr>;2a( z0#)NT!yK;~e#*x@ax&Lb;sSvt`YRBV(BDW$%i*!X-+*hzQ(+HX8E>L8kw8U*mM&nF zwE+Of1db(_;jMhD1o&p>iOT{a%m@sUE;PF%LYFo3dLjA()7;Ff4mnHvz@hi@Ffzx* zf(gu<>(rRE<?(=`CWV_r_E<6lv&!f`)yadABs%5=PYu)B3=;ly6>^we4D-7gUq*%d zHLt}@M>D>f;l0d>=;3w!)}G}Oj2uSg|8TB&p`^_6*hQKs;2bMxB?$N&J<47%0RYc> zVY?Jo9cxE#A_H*r+@S{F%)dfUqOWoreM2MdMZ8#z;?ph$k>g;YRZXg7#wOSkR4>lV zoY5d9Z|s6O+{`aB+7|ZE70iq(oO8WtW62FVpq+s;9a+<vnT6`i%!P2$+SpN7AOpEI zgOmK4r<ii@Y1U#Bm0UAVXtOiT+}TQJP%3G(N?<*aYPAiHyCR*($$NgBhMI0TO4$r( zdS6L3*oL93MCbNyeO}d~Cid#8EviI-V4Br6@yzbz#*!Loc9~mQ<Gw*eJVmwx7Ri@( zt4~vcrz|lDWb@iv{w+3F068uxg8^!Sx&h&R4sOv|-oqcl?X*O8a+cG#-fd?`>6t~s zOp2y4Z`x`ifH_OPQ#?=3pPh{$-D-I6P#Z?n8MNWV2?}gyzCZ}?u~)_5)%o71-0WZq zLw7m9Ks(sKbdXdMz|+Wa3rYh~CYn#(jC*Ygh6G_*k7bUC<Ra9|YX%I^fpMG4aBg}i zg;x~~rK+W*(qF05>=oB87PzKnCC$0T_OW3n)u+eMSz@LR!b_W+%$V=Y%L=?oY$6rf zVLh+b#z%MUOtZNhB*Dz-15*S@H&81I$sEOf#PsGsGEY{v1*sY&TGD1T=rWWu7w~p_ zG~a=5b#IwPT4g^Xnl|ujCtl`f3EZsb2%xO+_7>@Jt`Bi2USuXjB@r`l^I_aUu<KqX zaQ<>1zeT)4NqcqWi%Z@62yFGz=Lu&;R1nmjCy5_PjO_~0wl=?1jIJyV43ZXvxY`4x zj)H2r`0Ua^?bVCVR`PReNXSJ9tkVR)Qk_@#5Sx3Dyuyklsf1iZgtsEH#~Zoj!KF34 zKS<K9e5LOVC#vmV{MDtxAYrhe3;v9=wAMmcT>-NXf!RO9=!WX+===X!DK6wH{ma9Z z{L;X=0(R;<Ra<@i($L%n`ou^P{PLtSKx!=itg>cv*GQLq0+xnlOo^Cjvn!(#*>CLm z5COu5oZ%(4F*l1RiCxmaG^DUzBuG<i%b{0?pepv!*AeUM&(qhn^!0wLVVD}$W@;dS z7&WX-)v)%}wT><!QCD~L^`$)5|Ha<MMxVIpx7)0)@xtsr&H2(G(aUY#@xtw2>a(<6 zYs(K|O%b;5jfk2uu9wkSXVq=z7Ag{67oJj_qqyTLh9RLk6>+SVoxUX8GH{3!XpZ4= za9@{0b4Tfe2H8Zpz{g!JT}H%NUko*JWMfd50#E^blr3h7K`_h29eXV%^iJvK0F;CS zsmh!uZ#4~488f2*Hc2#ZAk@u;8c$D6==wVYwir+RlWr;26J+4y*p@MiKHUOeiD`LO zalN&A=TBBEQX0le46n*`BT5>uCf#`7=b)@?*ad14OB+WYcL1Ug43L(G2tE@Va^I!% z7r5;NzRAWZ?XU$2mX&}E9>4@ikc0R;QPZYvU0|cpYnXDaMB<$7rUo&H8A&LRD>_xH z-oK%$lVO2a<llVEH{GdsPA=)@!|TNvb**0EL%JeuXPB#LI;Opp8m4#qW@cT+a|U2y z8ssI~H!hqTOGE$!hD7D6$}pa0F|={4DiLjM4_k2DOXWrO+oVl6Yjj0~*CF#?r&=^2 z846|Jq8AON0*{Z2U!h%kK<`M;n;MQuIV|v`<1oaA#4F-ehN-io1u>dJkRc%sG*tB9 zZVJPo!cAwq>%8!1Jo*jF?-^~j#f2U2>o}Kps7sr`^$(n#s$vJg#MWngY-}u3T5oJY zdL&_$W}wBpM_=m)oZjKJ;2*HkYuh`&cWQnS$)y?S)Mn4ZLlHM{R`N9S)NX6&(H%Q? zS9d?u_Iyj+-J7p!S9SZY-E9>yDOt&_ZT<1l<1U5$s5XY1R;56%&a;0<57?H$y+7Hf zny5E3`#={!e=w?O>mHMMqV3@p=vYLIKr&1Zj8v_hJx$~Y&;5?=XkX{;J322%eNl2- zau{@a>7gCF9^SF*k@vQBfJq}BOX{$=2(6iNw=|EMKK(ejvnS=}#lsuy(bj>zz=M~v zE3+kWXX&(E+qUWpdeT<MEo|LR+x7)}_`vRm+A8*ay1A{~zKvh7M=iDb{hL{m%!e(a z8dltUjK6K)WrHmq*n9BM9yt#>2(GA;MiUUxEa-<GYSn9?Y-;JmE$!s?UA$_at|9K3 zkG;EA0y!uO)5Vr7dUFB}my^-#Y#j~SxR%kZc$`)|N~;c_<D_;{x@Ec%FMW7uk!OX9 zJfRpow-De#>jFp+-3f#3ke8b>D7Yx@G1nTuX807-9BgG`Q;pDuAwYzz%q4<V&z8@h zJqNnS<ckv>O6r^ox5bEQJQ_8A7`dK%?L~{!=IAc3>2i(o#Y5K5S|?p94u+<b0lg&k zMdizJ?+I^00Fe1qiip_9RH!|Mq+`+8jszi0PaTNvhj(n`UR?0pEPvjwCw=1w_D=6T zG-09BzSUi_7@Xhgez{R_C!?`Wf4A>{escfO>4Qh6_LL?zrfe}RmYRi8TY^cAl&qjx zK#LQdy+Ftd#bU7;jc(Vs-=IMkk<Fs7eM--apMG3lSooxS^z0d3EbR1qb+@Q*r?^b4 zb280dBfXp;v(MA6&0<WaHU|y-9&^-Hb1)6yn*-2M@i)boZf^D&O;xM8fH5VSVi5Me z%bE0f^`JwDw`MV>N<J;-ev009J?BJ+3ht?Y$|XF2q*Nh36<fwhPZjZP1OJp<>E7IC zyCZk7{oRPB$T_ZUXfqLwo15sy@{j+RY@t4xcE8<`1W@)Ikw0Hqf!^t83nI#CZ0wG- zrsn*4O>bR;lgOB0R3cwyT_mUI6+MSB_Zd88W)pozAI<3X$94BHJ^TB*BSA!0^pAA0 zB=#0|{HOKN(m}&Ace&iXzo5Hc)oZ`3yZ^yH>S7t5q@#)cXMMB`Pya%97UR{zyZ*L5 z{*Er%Gzc;e?|pve;MBB*2(oB<N{ZeUeXnX!Ae2Z^Iif$;<^R$};*;n<=<*+R`G0l! z|8)6FU8E9=x^>Cv(xXdWmtI{8y7cK%)WtM|!@861Es|c$1+0~#C0eh`W?kN;%U!y> zTbGh9_vm70VHbDJA*7H>FEdN*8|0S3){zrxVrogKElLdO(Yk8i&nLgPa)WCJZy(rH z+*BMMxNBfT@&4jK@m<9s{tXWF6!Qbm77NAVx(&n^+_>%zg_`BrrhIO&*LLCP!0zE^ ziVqBK8s1nODGu7deZ?Ms=ROw(ZY%Z``|aPR;=sTJ-}e-Ii#>ydfsw(Yed5W$ZL{<$ z{Pg&{T8Wz^S@H>&J(XY$uN6<^{}zJO6N*NjkG4_Fn@sIJDQrF~Z)*gSNo4qC2{~<+ z6hMz~nbMYtawKjT!q8wX1?OcZx?cO$CO22tOpW2?<~fqLE2nlhvR%pSd&p_p9lgPJ zK(cqI)=8bSyqi4#JooXc1m%H!xrqR5vGR3zT8YR*vQU&0pH&?{q{|QMVyEsWboa1Y z=)B-+_cqn4Gg0ixcfX}6RtA8E(?#vY4IQHg32Nx3{1o6U%kzkC6gL6UtrNd=p1OOf zCz-nIXp&8#>p~0XE3$;^jg#f6O@L0p&7<WYut9%?=h4S>;*>9b)oFdVCIHBaLT1=0 zeTVm}?{9T-)tPtQcyhN=Y^D8M=|kjMc&+<HukGXlo2M9U;)TYzkqCR;{DQ-cPh^f4 zsyM3Lc#75N4W}4GL!a2Ycgk9wKG0bIp#@t%ljzvulI6(uu)5{aFlXmJvdr(R?dz?Y zqyb)!7XTxMbyJInZJ)$Ryr(nPlEIT%p<pGfR`yi_l6EOAy;s1ajk8$Y)_yupq9Oes z*4_xG!X>8`F4?8daAN38V}0BSlU2&QSs1Tx<)dcEXqEG(Il5mBNR_SgHrUts#NG0y z5b0C?P5N*9!hnMWMb#_7IRsp`W~DN=;<4qDBN^Q>w0GL&D?U=&_!tJgXIfL2xMv}2 ziG55=X>a)Isl~;&Rzt{`5)6`34A!XXc9Gp|YzKhmijPWEmc-G)<^=G*%?y(cU7Mr; z;Z<tB@7_u$yiayo*-$1}U>qDlXbgMk($#sHf+W>0^s9(vYX%<4O}N+9%M|L+wGX%| zEgDPGe*DyfNZX67uKr4QXxQa7ZnEcBrtD;gG!3=@<kevp14w5WEy&iq%X$iZsecOJ zRms)S#Z>Zd^zeBN<p!Nq1o4B0WEXM0d!sC9hAT>Bf~JG}wH4Bt%&fEPdOK!Cm#?(3 zdqK&4+!#&#%ZS;3elE=)sAN!ed;)2drEl~>>nuQ8BR_gyZM4xJSmXl}8yr|MnqDBi z*=sXtf%%(+X9S5HsxCB#EqcabeUy(z^!pS|x%(@mT4ZR!$Q;wD8GI5{NFfMsYqiGe zJ#H$D&PaGt$M;SeallGcw=(96mX@7@88EN&!wwi^1>p7V)FRMDK3Obxhy*1Y1i1+2 zYWJgW6G$`L6rLM+(;Ce6NK2!2wr9O5kQayXC`9iO%72uLMFb@Nq8R$<5j}kqAo0T* za*QB1GswpJcz|ygVALu<5&$DnG6%ENp6C<()DCe;W6Ns3lG_B0R~i0WU8lMYTlSwQ zRMu9Cm45JMpFOpZR40nn{>orw=rvS!Ck70kt^uE}i=_B0zsRw=HP9(FL>cckg9=h< zfr1tC6xpKXRP^?u>CC2Sg+&=T?!xvMs05)VZeNoG8J8=g31OtCjseoL7xgLPkbgEl zdiK;Pk&=wQvb{@35(a(p+Su7sICB!>%5L{ARF0tUILI@v|59BZ;AHAT$V|>p37<LE zrX#s=?WHSE>>9%<6<}+vjbDA@iQN-p&K7kqrluEAWz;Vdj2d&;MZDM0DFF&(bjB-K z4_q=Y8TFRfg=SzT7@`5i^W*?bY92`Oxlq@^C!($iMLY;XycXuv%SA3PULu+_-Z{?N z&E8ZZ9#BK@(@QL=N+SQu(&WJa&<m+X%&Hr80otqC8qS=fGoxluHF~eZHE4AvuL;ix zjSz;*g&bQ2@%Sdx^T}&1Ub`zG<*-=hgn?_S9YF`Na3_^##%P@W>xD7<oU#hPiMJVV zs3720Cy}}(H0qo38?BL>xp(S7hK38sOw4TyGRsxENP>J<owV}Hm|=l*@^wrQFbM#i zrBGWRsO?@*TM=WKmpy7D(-x?0O^n)Nqz35B8$ug2geLWU*UXTivSGWf#SjqWMz*Za z0esgJ-Lh+D1Ib0WTh5{WM^(;~k()t#e(Y}s?cMIso`8~3)6LuW?LV;hLx-kkKCu5I z&mB3oZ)Wn@y~mC_VE%_HB{=UOeka`50ogT+@g8mVT4?v?Q2f9Sd8EYP&4J`-dB>mV zF}3uhF7M;g89!bW6u+N-2|p@1n=oUHBVAY}=R4^mAg}Xtbt7C^pieAeSF~i9&*MWy z7FV8Z;YIN0pD*QN3TTdCSLb?bhdiDn>{Te)i^Cr!4bRT$`$}$e+qcxnJ6sFGw+pYR zoZ;y{Ye#rG2cG`>Y!$+x&XL&$dy@9{e=XfU<<f0`Gif{dhPza|^?v_8HZOs-=}G5^ zUt??GHo@asnkRIzjbSTgNZ;sz_v(u`f&M?C6*a3&*7C0It;iZT5aw!g_x%<=zOg=D z!9WZIww@M^UNxFkL{s{hV?)I8Uh2l7P1efYigRzAr0so^1nyCnHH_G@^2ey7ec!3< z55&}i+jot@xL31_7p{g5v569+^Z`B)$yN@=&Rlw1XOCiElc9+u`l3AZt*7cFed^>x zywQyB4UPCp3|0Ld^;L7zm2cb~_p@_ROxI1oI@pove26L{n<Nu@82f1xw_6kUeqC1K zM%DY5)s;bRitF+?EDqm3Fg(~h%jfW;wbM^+E0;9sWu%oCv~?6zh-55_?9LKaj*uv~ z@uHAUr*U-`z7;r<hHSnnL7SJeNoBFer~#`12E$3u6%gByvq_iaee03{#g&MDFtcmx zhHKqX3EN6jN2aaDbXn&$t#m`)QLmjdPF&e0vrOao=;YyjgtE_K<=OMNY#-iNnmk|G zh0PyIT5~<)k-~qc{v-^v^>us_(`iy=dm8|ld4*~>*<=TH(P?5b)~#AQJA03Elbk(Z z7I~b_w#`th#A_Zo_R80OuGf%b!BAb#R3oo=h$-eQ7Wrs_oybR!r#a}tH#k}(3Wz5@ zyTTsrXIC5dr?d$jgE3-B%Nm<o=JiI{;VEh{NU7cv72NOwfmQefl#aF;uf%gcugpII zfeI-=YLN3OouM}YG=Dk)M|X*1x}$YK0a(68k&>qE$K%F|18pLuz&T0Qn?Amkq8(ra z0I&6*$XEI+g-TyW(l`*wJk<L)#N96;UbLKNoX$jmaSI2<gS$6-P~OZ5iTNk5tDMT1 zV@r}~M<k1$3^hw=k8s2v14S+{y2lIcH9NNZy?t&%9(CU3|D9He?Ig)!*xxbqzk!%@ zj<;6X-yeqV0h5YAo$E5X=YXdh*z?dm?j+=)dnoBn2-jYdBoHCmo*~%@6b2`um^ula zNQyUcCVn|N<{~4~ry`z))TuD-;#-ilYI%Mx9E>7L(w<pOe*E)R4#qr{l&`RL3{3BZ zqm0g)O_uzl6NVjQJLjZ`a0-jJQFFW*^%6lu1wm$D)i|6KXLUk~un6F{^s;AbhP4bc z23B<kEaRj+c@9hVg)b%1T5B>2%v#usCAGIn#4Oyp43p~a#MOc=?aSEC&y~J%*te(* zxL7JqUh|CV6T7e$ZI1+uU5cv(iHJAJr0!WV;bO)wDT#e+gS5*u7&*q>KDnXSjVor5 z?E#0=W7|QYaNket6S11HxAZg};>37yJ#=ywO_$6;1D%i(8zeo}028xby?tR(k#LYq z&<Bho95G?7`ziD`lt~>Wa%%a^zcxOT13<}~K8uh;4XE1qvl~cUl|}Qh$#O!U#OonD zwq)|KI$=e_j61PMtZtL>s+m`(dX0e!YoNH$(s|lIRu%jE;2+7}8Xw&|J<0!P_U@g2 z=9#@IdlD7Rk~*Q}^H$Q4I^!>lWuA|{w5@b)EE&Vtp3)01y!R!Zj>WU2N6AZScI>58 z!uie(Kd&yP8xHb|ly0D<*3!7i+3;Us6?Vy3&}}q=wFJ|wRgIapq$k!bf5}BqSz%_} z9JbGl8)S!>xtWOx4R3MoeQurIanwO@<J+AYUwGq&>rF;BGGd2`L8g~^w|$sx>)<y) zc;0aXJiM)R(|f=Sh%$IwI9$J$0yiObr9B40p&GGkUZ@W3u@Sru1)5B#U?HYRnZ&on znC!hjXd~_;)^=)}+=mt@Ovl6lGVK`ODy)!bK%0YUn9&@{%%LeoO*L&gh?s)dD{AxU z73t(}2%QbnN}?#;08ieyEjg<l2xaBA7nL)~Z|&E)EajH-(wXA4(@WxA5yjkZA`86B zN*{e$PnP>|<SF8O)6XZIZmxW%9D$5jD2Tkaw~&dE?rkSYD2mH#me%lhaCwN_^F!x) zqN7XwxDDaPgL(<~61npbjr{1*u8T*X>sl&GZjW3|<Oi#w8c(Z7!>V^_xYF~uTvBk% z;csqf*hrN=YrRVXmq4nZnif-U8=_f^!AEl-wLtw&91<os`eVKDhAxA=8;$BNp=VMV zot=G{RK<9BO0*h%N%sZTQW=?5V{>hKne}vEyok-7+RS+_(QLDaLd`yp^E#=W|5!^q zPDi>h-zpL`NTM^Db`^4?d{)G9R7*USITxSt8BHyEifpopc#AxRHuA3p(rGiKQ~#{G z7XK9dP3<vmGCakQ@f6}D#8V8zRSY<u0^Q7-${;p51=GCrA@ErnJ;>|j5gIah;*{1h zys;S-)RJzMkdP=u%wrjzBc?Bc$R78jx)%`a^WN=tQaz31DF{{OB={~Zrd-<3N&ykb zDJS^{O$Oye#~NHx&BaQ}4!u?y$L>82WNAb3<dS(BIx3~5IrSO~S<@7!nk0t3k}SBs zcsk2UJ;<y${Efr->G~PeMAOg|vHk#!#w8~g5NWVrG{G+LmvzQhDzyiN9tX*xZa}}| z^dJ+;2hmcK3kqO45Yb|w%~pN}hzF<1k#1@yIH6iL<ERB0#k<@PEu9pN2hC}5qKE~O zjMKWMI*I;RshUV^IiXyU{w!d*3h|q)jw6-NpFMrXLf2VpSIK#-CO5;1M>%=zBunEf zbnBN6Magu@v9;`U_HH*hGkTe`IME)RLQiEf7WpqRBx$UYo;cGmsj!vIBt=LO)`XnV zr(I}O$U2d-+RWCd_MeX|6ROf4@T9n#@KDmvkDN)<QAXexT)Y`;C-{LlVz@nHOw#Gp z8L_JOnll%y3P4h9gEj=zkBk!H*d~0mQ^;g_n~_=8#EgP{pV^n@XqD<Lgkq(_qGNJQ z1e{|eW59Wg36yFyu9!xokHZDY*pZ<2QwQAoScL}_QU~sXMY4W453+Dt70rfD%QTwi z6jjt|_gtUV4HEZ_?%lh0)Sac#%HD{`HqJp04-S`Q*xPfEn;P<nmej4VJhjr;UWw-{ zU2LQ~C6v`^7^{uBb)OEC6jRr&Q=}<P@q=uKHla!ISz<rid8n1hFGw_j%-#r&*4h-Y z_w;sZGo573olH25L)Xwxra#6y%k;A|)hnG!)gC)}wk{j~`3q;tC#x9gre}lGw)gnt z!GpxQVwV%F>#^;-A9+OF6PjJzp$IO4*CU>S?9%h|<xBRYTAz(A#ML+D`}B=S`+bWI z`3y6JL9AUpe{yl2^I%~YYO@%E*ZEXATjrL2la^^)skLqS@!2`o5ZMFj0Sr23-WP~a zk_^>5D(rXC)|7vZQZd_>Nh2ilCQ7sdv3p9|6&zAO2}`Vft~DGV-ATN&haY+LJ&(N? zkuW>Mo;n!9m)m)o(Ajn-U@NG~_rZ`HjH`EQ@+qR-2JM{jIn?3H-cqLL@bZ?@8RQbq z%~F^k-e1y*`*_rGpX@7tWVR=6R`L6#Od3zhY1?UEJ}|aD<!6>^nZUuI22;R;yT^sY z08fTuoYa6|)!L1+GazEO1+_VU_KJ>na;%d{b=CP^j2`^(^M@w)9Zqq#sg|{0Jiwx| zm3EFcU4lNyJQQk}t-Uhi@UL&qya#MI+B*RcK0zu|*TX5J<czpIFl)kbs3rXkdh=h0 z7R_=xuXjZUDhT%z)r_3*<?>D1x?JiztY}{=F6I1pZ5npU&KsxHht}Qcy^9O$jDyk> z>Jy)Y!+q~L8Hx7e;9oe`6@3<iGM`3{r)%8z(SHejk8#;TL1tw$gCu+At>{-t3~irO zvJTa6bz-*z{lC`K59=y$9y9CVNzlVr<n&KHbA6k-&h_Ei{%h8zQp^3Cwd3wox4WaH z-mp)PRo0-t=aV;S8(Da^e!Kfjzg7NJWw5?+Zj*avWf{k*obiSu3wKtA;`dv><Bbix z|HBpWEhD4}bcS*xS2s}KW<9fUZNyIDF6<QUFz5bXb(RViplYMHPmp2w+9`983ED~+ z3FB#{<};hKrLLDYC;{Q?%t6GeDPi_SY$Z&6YHS6{mQPSRa*ERCV4B8qe1}>3zfPI= z3{b0@$aggi_ypcDN!RrFX@UoVWS@Nd`V<`!e`J=op)2oAx{`2njT1f#mLot&wg<gp z^f6FRM6hUCXJQd&sd8~@ConNQWohrX`+^3wp%=iaF5Y}fnROt#mku?0U%0RK(gTgY z`)az`+UVCGcbj|h<iwqh#TUooSbRAbHHXAUOhT2^jv(!Gb`$;KS#u~*qx!npA3jPp zaOHSxiyQrW$5ftOkU^uEOa4X=X_~%E?R`ZTvsaWYd$Ye>^WyU6#+hmjXkI-=s=+JA zgqN)|cnnpK8+qk8-|w;dUD2j|nJ(bQZ5~gE`9H7Pr_|U{E^w-67sRe!Y4#e;A5H5k zt(n(q@W)or7Eju{hqZXq+(;^s$1Xs>viguW$RPT>0a9a$WflACu2_H&8&|fHh1^cw z+JG`3#~T}RIhfmZ_N(wEs0fCH7Q@a=3@K?ek!tK?fSk3i$P&>bKLFYhD1^XYwQ+@d zG6e_LJ(3y_3@k5;9-a}_<T|N4m5kFHcN92RC)(b~At%XIy5A#t1u_VrsZ3&v%YA}j zbN$FMiuHk|;!=S&i&sk2Tm%~aq_4H_T!DN4{>ATkj({J?RB}tbo7Lwvl>F~2Jtk!t zjK0QmLDH|K-u;^Yb_h6gH_$VGPN6+CD&$x)Tv?)p&ve)BbnjXzHy(Q)-EHp^c7#wZ zt#e_uIO&V#VFGDN#Kaz$wqrOk9BJ#c7>+i3aJ6jqo{knTU2q%c4|&CQPjp<H<s-Tr z)8&J@Xah|QxP5j+)&01NoBjPxeZOB9ldISP5vHz12YA>V#%Oi%@_s|9(D<F?CUe?+ z(r$OLnY8`ZvB?H8Pg$3f97R$T1!3OEGr7qr`MRDz+?{7*uFExsZF>dzNe0XfQfm*t zwK|up!)a7&5t@21IvaJM+yQZxGjE1#3-b4QtqV|%mW|&6;;@%-T(Qp}1pO@p1e0G_ zNBkN8ouM2dy1Xq%=nxZUojI-!-OELCyX#o4D8nDQ{qT{I3{6rs_A|d;iup&<b2WMt zc(U7|0e?Qpqn62R4%oc!tpPVat2s3pk4&0#0XaYbrBnGOFEsiIZ+TyB+kLf(M!{|; zViN%anC88<sHIo*#ptjW{0NuWGN7#c)_7@=-g-k_k&j1LY(v%qEGZ0j-<6|dgB~_m z$0iCXiph~pra~-sw44#(ip*ZdI=70Ij7HF_Zix0O?qC-^I<RGy`|uMqi3fO;7Kc^y zRbmKMAfPZg?yIaZvJ9dL;aCw<WHRg`9P78I5|kBFX30a*7?qVj!^{{F*+DqQs1Yl8 z<JOp2cku<=g#nIX-Pb`v=CP|J6ykr|UzMDNc!MON;LF*?(+g)C=+t}|-LnhgOzWki zSL<is!eIzp+6mVlx+>KfI#s<QlV6uXz^Ud8iXcIAtbfG|I3}-+zyIjtD)FQ??lPh> z>VcOwOCOY$V*9JnEA#^)giVmE≷M62o1jg7!^2BPSnrxCj^!L!3BOzwp5Jm)`$k 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≦of2(^Ydy<WMK5qbTQIM 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 j4xmwFar#Gq%Tb;PkY>y`GADC|B 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 CZ^6O< literal 0 HcmV?d00001 diff --git a/week-0/day-3/my_todo_app/venvironment/lib/python3.6/site-packages/pkg_resources/_vendor/__pycache__/six.cpython-36.pyc b/week-0/day-3/my_todo_app/venvironment/lib/python3.6/site-packages/pkg_resources/_vendor/__pycache__/six.cpython-36.pyc new file mode 100644 index 0000000000000000000000000000000000000000..c0a98f5af79b85c97063fc9b31fb12281bf58ea6 GIT binary patch literal 24451 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πr^;w7t^ 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 bPQ`P%+)!={Yd#W7CGbt0B<LpGo3MWma~thU literal 0 HcmV?d00001 diff --git a/week-0/day-3/my_todo_app/venvironment/lib/python3.6/site-packages/pkg_resources/_vendor/appdirs.py b/week-0/day-3/my_todo_app/venvironment/lib/python3.6/site-packages/pkg_resources/_vendor/appdirs.py new file mode 100644 index 00000000..32e7c9f7 --- /dev/null +++ b/week-0/day-3/my_todo_app/venvironment/lib/python3.6/site-packages/pkg_resources/_vendor/appdirs.py @@ -0,0 +1,552 @@ +#!/usr/bin/env python +# -*- coding: utf-8 -*- +# Copyright (c) 2005-2010 ActiveState Software Inc. +# Copyright (c) 2013 Eddy Petrișor + +"""Utilities for determining application-specific dirs. + +See <http://github.com/ActiveState/appdirs> for details and usage. +""" +# Dev Notes: +# - MSDN on where to store app data files: +# http://support.microsoft.com/default.aspx?scid=kb;en-us;310294#XSLTH3194121123120121120120 +# - Mac OS X: http://developer.apple.com/documentation/MacOSX/Conceptual/BPFileSystem/index.html +# - XDG spec for Un*x: http://standards.freedesktop.org/basedir-spec/basedir-spec-latest.html + +__version_info__ = (1, 4, 0) +__version__ = '.'.join(map(str, __version_info__)) + + +import sys +import os + +PY3 = sys.version_info[0] == 3 + +if PY3: + unicode = str + +if sys.platform.startswith('java'): + import platform + os_name = platform.java_ver()[3][0] + if os_name.startswith('Windows'): # "Windows XP", "Windows 7", etc. + system = 'win32' + elif os_name.startswith('Mac'): # "Mac OS X", etc. + system = 'darwin' + else: # "Linux", "SunOS", "FreeBSD", etc. + # Setting this to "linux2" is not ideal, but only Windows or Mac + # are actually checked for and the rest of the module expects + # *sys.platform* style strings. + system = 'linux2' +else: + system = sys.platform + + + +def user_data_dir(appname=None, appauthor=None, version=None, roaming=False): + r"""Return full path to the user-specific data dir for this application. + + "appname" is the name of application. + If None, just the system directory is returned. + "appauthor" (only used on Windows) is the name of the + appauthor or distributing body for this application. Typically + it is the owning company name. This falls back to appname. You may + pass False to disable it. + "version" is an optional version path element to append to the + path. You might want to use this if you want multiple versions + of your app to be able to run independently. If used, this + would typically be "<major>.<minor>". + Only applied when appname is present. + "roaming" (boolean, default False) can be set True to use the Windows + roaming appdata directory. That means that for users on a Windows + network setup for roaming profiles, this user data will be + sync'd on login. See + <http://technet.microsoft.com/en-us/library/cc766489(WS.10).aspx> + for a discussion of issues. + + Typical user data directories are: + Mac OS X: ~/Library/Application Support/<AppName> + Unix: ~/.local/share/<AppName> # or in $XDG_DATA_HOME, if defined + Win XP (not roaming): C:\Documents and Settings\<username>\Application Data\<AppAuthor>\<AppName> + Win XP (roaming): C:\Documents and Settings\<username>\Local Settings\Application Data\<AppAuthor>\<AppName> + Win 7 (not roaming): C:\Users\<username>\AppData\Local\<AppAuthor>\<AppName> + Win 7 (roaming): C:\Users\<username>\AppData\Roaming\<AppAuthor>\<AppName> + + For Unix, we follow the XDG spec and support $XDG_DATA_HOME. + That means, by default "~/.local/share/<AppName>". + """ + if system == "win32": + if appauthor is None: + appauthor = appname + const = roaming and "CSIDL_APPDATA" or "CSIDL_LOCAL_APPDATA" + path = os.path.normpath(_get_win_folder(const)) + if appname: + if appauthor is not False: + path = os.path.join(path, appauthor, appname) + else: + path = os.path.join(path, appname) + elif system == 'darwin': + path = os.path.expanduser('~/Library/Application Support/') + if appname: + path = os.path.join(path, appname) + else: + path = os.getenv('XDG_DATA_HOME', os.path.expanduser("~/.local/share")) + if appname: + path = os.path.join(path, appname) + if appname and version: + path = os.path.join(path, version) + return path + + +def site_data_dir(appname=None, appauthor=None, version=None, multipath=False): + r"""Return full path to the user-shared data dir for this application. + + "appname" is the name of application. + If None, just the system directory is returned. + "appauthor" (only used on Windows) is the name of the + appauthor or distributing body for this application. Typically + it is the owning company name. This falls back to appname. You may + pass False to disable it. + "version" is an optional version path element to append to the + path. You might want to use this if you want multiple versions + of your app to be able to run independently. If used, this + would typically be "<major>.<minor>". + Only applied when appname is present. + "multipath" is an optional parameter only applicable to *nix + which indicates that the entire list of data dirs should be + returned. By default, the first item from XDG_DATA_DIRS is + returned, or '/usr/local/share/<AppName>', + if XDG_DATA_DIRS is not set + + Typical user data directories are: + Mac OS X: /Library/Application Support/<AppName> + Unix: /usr/local/share/<AppName> or /usr/share/<AppName> + Win XP: C:\Documents and Settings\All Users\Application Data\<AppAuthor>\<AppName> + Vista: (Fail! "C:\ProgramData" is a hidden *system* directory on Vista.) + Win 7: C:\ProgramData\<AppAuthor>\<AppName> # Hidden, but writeable on Win 7. + + For Unix, this is using the $XDG_DATA_DIRS[0] default. + + WARNING: Do not use this on Windows. See the Vista-Fail note above for why. + """ + if system == "win32": + if appauthor is None: + appauthor = appname + path = os.path.normpath(_get_win_folder("CSIDL_COMMON_APPDATA")) + if appname: + if appauthor is not False: + path = os.path.join(path, appauthor, appname) + else: + path = os.path.join(path, appname) + elif system == 'darwin': + path = os.path.expanduser('/Library/Application Support') + if appname: + path = os.path.join(path, appname) + else: + # XDG default for $XDG_DATA_DIRS + # only first, if multipath is False + path = os.getenv('XDG_DATA_DIRS', + os.pathsep.join(['/usr/local/share', '/usr/share'])) + pathlist = [os.path.expanduser(x.rstrip(os.sep)) for x in path.split(os.pathsep)] + if appname: + if version: + appname = os.path.join(appname, version) + pathlist = [os.sep.join([x, appname]) for x in pathlist] + + if multipath: + path = os.pathsep.join(pathlist) + else: + path = pathlist[0] + return path + + if appname and version: + path = os.path.join(path, version) + return path + + +def user_config_dir(appname=None, appauthor=None, version=None, roaming=False): + r"""Return full path to the user-specific config dir for this application. + + "appname" is the name of application. + If None, just the system directory is returned. + "appauthor" (only used on Windows) is the name of the + appauthor or distributing body for this application. Typically + it is the owning company name. This falls back to appname. You may + pass False to disable it. + "version" is an optional version path element to append to the + path. You might want to use this if you want multiple versions + of your app to be able to run independently. If used, this + would typically be "<major>.<minor>". + Only applied when appname is present. + "roaming" (boolean, default False) can be set True to use the Windows + roaming appdata directory. That means that for users on a Windows + network setup for roaming profiles, this user data will be + sync'd on login. See + <http://technet.microsoft.com/en-us/library/cc766489(WS.10).aspx> + for a discussion of issues. + + Typical user data directories are: + Mac OS X: same as user_data_dir + Unix: ~/.config/<AppName> # or in $XDG_CONFIG_HOME, if defined + Win *: same as user_data_dir + + For Unix, we follow the XDG spec and support $XDG_CONFIG_HOME. + That means, by deafult "~/.config/<AppName>". + """ + if system in ["win32", "darwin"]: + path = user_data_dir(appname, appauthor, None, roaming) + else: + path = os.getenv('XDG_CONFIG_HOME', os.path.expanduser("~/.config")) + if appname: + path = os.path.join(path, appname) + if appname and version: + path = os.path.join(path, version) + return path + + +def site_config_dir(appname=None, appauthor=None, version=None, multipath=False): + r"""Return full path to the user-shared data dir for this application. + + "appname" is the name of application. + If None, just the system directory is returned. + "appauthor" (only used on Windows) is the name of the + appauthor or distributing body for this application. Typically + it is the owning company name. This falls back to appname. You may + pass False to disable it. + "version" is an optional version path element to append to the + path. You might want to use this if you want multiple versions + of your app to be able to run independently. If used, this + would typically be "<major>.<minor>". + Only applied when appname is present. + "multipath" is an optional parameter only applicable to *nix + which indicates that the entire list of config dirs should be + returned. By default, the first item from XDG_CONFIG_DIRS is + returned, or '/etc/xdg/<AppName>', if XDG_CONFIG_DIRS is not set + + Typical user data directories are: + Mac OS X: same as site_data_dir + Unix: /etc/xdg/<AppName> or $XDG_CONFIG_DIRS[i]/<AppName> for each value in + $XDG_CONFIG_DIRS + Win *: same as site_data_dir + Vista: (Fail! "C:\ProgramData" is a hidden *system* directory on Vista.) + + For Unix, this is using the $XDG_CONFIG_DIRS[0] default, if multipath=False + + WARNING: Do not use this on Windows. See the Vista-Fail note above for why. + """ + if system in ["win32", "darwin"]: + path = site_data_dir(appname, appauthor) + if appname and version: + path = os.path.join(path, version) + else: + # XDG default for $XDG_CONFIG_DIRS + # only first, if multipath is False + path = os.getenv('XDG_CONFIG_DIRS', '/etc/xdg') + pathlist = [os.path.expanduser(x.rstrip(os.sep)) for x in path.split(os.pathsep)] + if appname: + if version: + appname = os.path.join(appname, version) + pathlist = [os.sep.join([x, appname]) for x in pathlist] + + if multipath: + path = os.pathsep.join(pathlist) + else: + path = pathlist[0] + return path + + +def user_cache_dir(appname=None, appauthor=None, version=None, opinion=True): + r"""Return full path to the user-specific cache dir for this application. + + "appname" is the name of application. + If None, just the system directory is returned. + "appauthor" (only used on Windows) is the name of the + appauthor or distributing body for this application. Typically + it is the owning company name. This falls back to appname. You may + pass False to disable it. + "version" is an optional version path element to append to the + path. You might want to use this if you want multiple versions + of your app to be able to run independently. If used, this + would typically be "<major>.<minor>". + Only applied when appname is present. + "opinion" (boolean) can be False to disable the appending of + "Cache" to the base app data dir for Windows. See + discussion below. + + Typical user cache directories are: + Mac OS X: ~/Library/Caches/<AppName> + Unix: ~/.cache/<AppName> (XDG default) + Win XP: C:\Documents and Settings\<username>\Local Settings\Application Data\<AppAuthor>\<AppName>\Cache + Vista: C:\Users\<username>\AppData\Local\<AppAuthor>\<AppName>\Cache + + On Windows the only suggestion in the MSDN docs is that local settings go in + the `CSIDL_LOCAL_APPDATA` directory. This is identical to the non-roaming + app data dir (the default returned by `user_data_dir` above). Apps typically + put cache data somewhere *under* the given dir here. Some examples: + ...\Mozilla\Firefox\Profiles\<ProfileName>\Cache + ...\Acme\SuperApp\Cache\1.0 + OPINION: This function appends "Cache" to the `CSIDL_LOCAL_APPDATA` value. + This can be disabled with the `opinion=False` option. + """ + if system == "win32": + if appauthor is None: + appauthor = appname + path = os.path.normpath(_get_win_folder("CSIDL_LOCAL_APPDATA")) + if appname: + if appauthor is not False: + path = os.path.join(path, appauthor, appname) + else: + path = os.path.join(path, appname) + if opinion: + path = os.path.join(path, "Cache") + elif system == 'darwin': + path = os.path.expanduser('~/Library/Caches') + if appname: + path = os.path.join(path, appname) + else: + path = os.getenv('XDG_CACHE_HOME', os.path.expanduser('~/.cache')) + if appname: + path = os.path.join(path, appname) + if appname and version: + path = os.path.join(path, version) + return path + + +def user_log_dir(appname=None, appauthor=None, version=None, opinion=True): + r"""Return full path to the user-specific log dir for this application. + + "appname" is the name of application. + If None, just the system directory is returned. + "appauthor" (only used on Windows) is the name of the + appauthor or distributing body for this application. Typically + it is the owning company name. This falls back to appname. You may + pass False to disable it. + "version" is an optional version path element to append to the + path. You might want to use this if you want multiple versions + of your app to be able to run independently. If used, this + would typically be "<major>.<minor>". + Only applied when appname is present. + "opinion" (boolean) can be False to disable the appending of + "Logs" to the base app data dir for Windows, and "log" to the + base cache dir for Unix. See discussion below. + + Typical user cache directories are: + Mac OS X: ~/Library/Logs/<AppName> + Unix: ~/.cache/<AppName>/log # or under $XDG_CACHE_HOME if defined + Win XP: C:\Documents and Settings\<username>\Local Settings\Application Data\<AppAuthor>\<AppName>\Logs + Vista: C:\Users\<username>\AppData\Local\<AppAuthor>\<AppName>\Logs + + On Windows the only suggestion in the MSDN docs is that local settings + go in the `CSIDL_LOCAL_APPDATA` directory. (Note: I'm interested in + examples of what some windows apps use for a logs dir.) + + OPINION: This function appends "Logs" to the `CSIDL_LOCAL_APPDATA` + value for Windows and appends "log" to the user cache dir for Unix. + This can be disabled with the `opinion=False` option. + """ + if system == "darwin": + path = os.path.join( + os.path.expanduser('~/Library/Logs'), + appname) + elif system == "win32": + path = user_data_dir(appname, appauthor, version) + version = False + if opinion: + path = os.path.join(path, "Logs") + else: + path = user_cache_dir(appname, appauthor, version) + version = False + if opinion: + path = os.path.join(path, "log") + if appname and version: + path = os.path.join(path, version) + return path + + +class AppDirs(object): + """Convenience wrapper for getting application dirs.""" + def __init__(self, appname, appauthor=None, version=None, roaming=False, + multipath=False): + self.appname = appname + self.appauthor = appauthor + self.version = version + self.roaming = roaming + self.multipath = multipath + + @property + def user_data_dir(self): + return user_data_dir(self.appname, self.appauthor, + version=self.version, roaming=self.roaming) + + @property + def site_data_dir(self): + return site_data_dir(self.appname, self.appauthor, + version=self.version, multipath=self.multipath) + + @property + def user_config_dir(self): + return user_config_dir(self.appname, self.appauthor, + version=self.version, roaming=self.roaming) + + @property + def site_config_dir(self): + return site_config_dir(self.appname, self.appauthor, + version=self.version, multipath=self.multipath) + + @property + def user_cache_dir(self): + return user_cache_dir(self.appname, self.appauthor, + version=self.version) + + @property + def user_log_dir(self): + return user_log_dir(self.appname, self.appauthor, + version=self.version) + + +#---- internal support stuff + +def _get_win_folder_from_registry(csidl_name): + """This is a fallback technique at best. I'm not sure if using the + registry for this guarantees us the correct answer for all CSIDL_* + names. + """ + import _winreg + + shell_folder_name = { + "CSIDL_APPDATA": "AppData", + "CSIDL_COMMON_APPDATA": "Common AppData", + "CSIDL_LOCAL_APPDATA": "Local AppData", + }[csidl_name] + + key = _winreg.OpenKey( + _winreg.HKEY_CURRENT_USER, + r"Software\Microsoft\Windows\CurrentVersion\Explorer\Shell Folders" + ) + dir, type = _winreg.QueryValueEx(key, shell_folder_name) + return dir + + +def _get_win_folder_with_pywin32(csidl_name): + from win32com.shell import shellcon, shell + dir = shell.SHGetFolderPath(0, getattr(shellcon, csidl_name), 0, 0) + # Try to make this a unicode path because SHGetFolderPath does + # not return unicode strings when there is unicode data in the + # path. + try: + dir = unicode(dir) + + # Downgrade to short path name if have highbit chars. See + # <http://bugs.activestate.com/show_bug.cgi?id=85099>. + has_high_char = False + for c in dir: + if ord(c) > 255: + has_high_char = True + break + if has_high_char: + try: + import win32api + dir = win32api.GetShortPathName(dir) + except ImportError: + pass + except UnicodeError: + pass + return dir + + +def _get_win_folder_with_ctypes(csidl_name): + import ctypes + + csidl_const = { + "CSIDL_APPDATA": 26, + "CSIDL_COMMON_APPDATA": 35, + "CSIDL_LOCAL_APPDATA": 28, + }[csidl_name] + + buf = ctypes.create_unicode_buffer(1024) + ctypes.windll.shell32.SHGetFolderPathW(None, csidl_const, None, 0, buf) + + # Downgrade to short path name if have highbit chars. See + # <http://bugs.activestate.com/show_bug.cgi?id=85099>. + has_high_char = False + for c in buf: + if ord(c) > 255: + has_high_char = True + break + if has_high_char: + buf2 = ctypes.create_unicode_buffer(1024) + if ctypes.windll.kernel32.GetShortPathNameW(buf.value, buf2, 1024): + buf = buf2 + + return buf.value + +def _get_win_folder_with_jna(csidl_name): + import array + from com.sun import jna + from com.sun.jna.platform import win32 + + buf_size = win32.WinDef.MAX_PATH * 2 + buf = array.zeros('c', buf_size) + shell = win32.Shell32.INSTANCE + shell.SHGetFolderPath(None, getattr(win32.ShlObj, csidl_name), None, win32.ShlObj.SHGFP_TYPE_CURRENT, buf) + dir = jna.Native.toString(buf.tostring()).rstrip("\0") + + # Downgrade to short path name if have highbit chars. See + # <http://bugs.activestate.com/show_bug.cgi?id=85099>. + has_high_char = False + for c in dir: + if ord(c) > 255: + has_high_char = True + break + if has_high_char: + buf = array.zeros('c', buf_size) + kernel = win32.Kernel32.INSTANCE + if kernal.GetShortPathName(dir, buf, buf_size): + dir = jna.Native.toString(buf.tostring()).rstrip("\0") + + return dir + +if system == "win32": + try: + import win32com.shell + _get_win_folder = _get_win_folder_with_pywin32 + except ImportError: + try: + from ctypes import windll + _get_win_folder = _get_win_folder_with_ctypes + except ImportError: + try: + import com.sun.jna + _get_win_folder = _get_win_folder_with_jna + except ImportError: + _get_win_folder = _get_win_folder_from_registry + + +#---- self test code + +if __name__ == "__main__": + appname = "MyApp" + appauthor = "MyCompany" + + props = ("user_data_dir", "site_data_dir", + "user_config_dir", "site_config_dir", + "user_cache_dir", "user_log_dir") + + print("-- app dirs (with optional 'version')") + dirs = AppDirs(appname, appauthor, version="1.0") + for prop in props: + print("%s: %s" % (prop, getattr(dirs, prop))) + + print("\n-- app dirs (without optional 'version')") + dirs = AppDirs(appname, appauthor) + for prop in props: + print("%s: %s" % (prop, getattr(dirs, prop))) + + print("\n-- app dirs (without optional 'appauthor')") + dirs = AppDirs(appname) + for prop in props: + print("%s: %s" % (prop, getattr(dirs, prop))) + + print("\n-- app dirs (with disabled 'appauthor')") + dirs = AppDirs(appname, appauthor=False) + for prop in props: + print("%s: %s" % (prop, getattr(dirs, prop))) diff --git a/week-0/day-3/my_todo_app/venvironment/lib/python3.6/site-packages/pkg_resources/_vendor/packaging/__about__.py b/week-0/day-3/my_todo_app/venvironment/lib/python3.6/site-packages/pkg_resources/_vendor/packaging/__about__.py new file mode 100644 index 00000000..95d330ef --- /dev/null +++ b/week-0/day-3/my_todo_app/venvironment/lib/python3.6/site-packages/pkg_resources/_vendor/packaging/__about__.py @@ -0,0 +1,21 @@ +# This file is dual licensed under the terms of the Apache License, Version +# 2.0, and the BSD License. See the LICENSE file in the root of this repository +# for complete details. +from __future__ import absolute_import, division, print_function + +__all__ = [ + "__title__", "__summary__", "__uri__", "__version__", "__author__", + "__email__", "__license__", "__copyright__", +] + +__title__ = "packaging" +__summary__ = "Core utilities for Python packages" +__uri__ = "https://github.com/pypa/packaging" + +__version__ = "16.8" + +__author__ = "Donald Stufft and individual contributors" +__email__ = "donald@stufft.io" + +__license__ = "BSD or Apache License, Version 2.0" +__copyright__ = "Copyright 2014-2016 %s" % __author__ diff --git a/week-0/day-3/my_todo_app/venvironment/lib/python3.6/site-packages/pkg_resources/_vendor/packaging/__init__.py b/week-0/day-3/my_todo_app/venvironment/lib/python3.6/site-packages/pkg_resources/_vendor/packaging/__init__.py new file mode 100644 index 00000000..5ee62202 --- /dev/null +++ b/week-0/day-3/my_todo_app/venvironment/lib/python3.6/site-packages/pkg_resources/_vendor/packaging/__init__.py @@ -0,0 +1,14 @@ +# This file is dual licensed under the terms of the Apache License, Version +# 2.0, and the BSD License. See the LICENSE file in the root of this repository +# for complete details. +from __future__ import absolute_import, division, print_function + +from .__about__ import ( + __author__, __copyright__, __email__, __license__, __summary__, __title__, + __uri__, __version__ +) + +__all__ = [ + "__title__", "__summary__", "__uri__", "__version__", "__author__", + "__email__", "__license__", "__copyright__", +] diff --git a/week-0/day-3/my_todo_app/venvironment/lib/python3.6/site-packages/pkg_resources/_vendor/packaging/__pycache__/__about__.cpython-36.pyc b/week-0/day-3/my_todo_app/venvironment/lib/python3.6/site-packages/pkg_resources/_vendor/packaging/__pycache__/__about__.cpython-36.pyc new file mode 100644 index 0000000000000000000000000000000000000000..4c588a1fd0350b2933deef809c36e355f28b1351 GIT binary patch literal 690 zcmYk3%Z}496o!+gmn3bc1xB+rBeAGNo4KF?A%q5ImIw`0VqpncX^xv%O>E1TO3fSb zHmtj4#VfGFo(h#%`E-u;`}myS*W+<I`SSYv&rT5h3jX_I7vH*HKR7@DVI4Ff4x0|{ zG!c%%06Gvs7kbc#0mP7$G44W&doaX(7~uhoaSSIofeB7wiihxoCT9U2!P8|hd-mH^ z4QA1PlCQL=t)YZ9QYf>Jfo+*)g6~hHV%(6m<%RKiLWp6eriAQ=glO9|x!Sp8K!{cB zu)C$opLIz}NN!Cfl#AU-+T^T0Xlhnau6>y?A%&1T#mdTfnaqn#UNT;`=XXL;WDTpC zVN|2FQ0QUj%5iiMQQbbTjFI|nmX*v@cC{!(lgXXTvtya=<;~(vJG&P=uK_KMU9Szw zIUvUUm|*i76@nYZR@Mlm+bKLsZ}p>e!9;uhae0s2?H^p#ilR@4=3k<3he^@Z;-Wpf z`!@x;y10Bbcep_>^yk^w+pxCADmSijPaLSoqwC;(%WLO}>iMm{$H2qCyh=P$kD<rN z;YXmRKKA(YH8YLOB$M-%Wi`y%c2n^}(@bv4xuRNFRZ#6Sa?Hq<auDihQ07`#3G2*X e$lX4E*9fpReec`Trw*r48m3V<bgSc*XZRPZ+|Mrn literal 0 HcmV?d00001 diff --git a/week-0/day-3/my_todo_app/venvironment/lib/python3.6/site-packages/pkg_resources/_vendor/packaging/__pycache__/__init__.cpython-36.pyc b/week-0/day-3/my_todo_app/venvironment/lib/python3.6/site-packages/pkg_resources/_vendor/packaging/__pycache__/__init__.cpython-36.pyc new file mode 100644 index 0000000000000000000000000000000000000000..aba5ba0d52b206e406d8516d518090e2521cea98 GIT binary patch literal 528 zcmYk2&5GMF5XWUZ@n^hCVIN|1NPXy`ms0u!g{6BEl)<sIj)-K5krc=y^_6_>X<wnI zYBtcWKtJX$=HsvV)c5WE)90UA&e(7E?$jy%maczJ5KLs6nT%&9=ea3(kui~rLT}8L zZ%xTdQ}N2wyfzJQOv_u-@y_h{F6C{+R+OR=wP-{uy1C}P*!^Jp{xx-G`(nKxkKXDS zBq-x7hP4*zqP()pdgo9r0bb%Vg`{6Is;Ji%V2t5p5n$~BChM-K=2J+r0gz@?I)xp8 zR+C)3ya^wT8S#2c3My!NuK*&dTf#*mO$ER%&B2ziBlLulKx@H<P$hid-;tM>7$T-- zn3l+}AZ!xI%XqXg*}4@|$-543{of}28$xzQoy`AY_<^zsf1ZY5+~AZu9HY|Wpf2ar zGI=?;^L#+*ZNy1>Qt)5FMJ~eP;Ku1Z&T5$l0JW%O=A*l=^%rAB)bcAC_4Kue{IP7a Ezg0($2mk;8 literal 0 HcmV?d00001 diff --git a/week-0/day-3/my_todo_app/venvironment/lib/python3.6/site-packages/pkg_resources/_vendor/packaging/__pycache__/_compat.cpython-36.pyc b/week-0/day-3/my_todo_app/venvironment/lib/python3.6/site-packages/pkg_resources/_vendor/packaging/__pycache__/_compat.cpython-36.pyc new file mode 100644 index 0000000000000000000000000000000000000000..b36800af8082ea0ebf4ce67c06c0cf909b5deff5 GIT binary patch literal 975 zcmah{OKTf35Y}UDZ(PSdGz9uMxR=5nVncK2C4@o?y@ixQp-YR{tmH)Tz9MNI9MV$) z$zSPT(zU1jg`PSiw@ykA9hlL~Nc!f}jCMCS`=bx9zkcC_{2&j6f&T{7egY$jqy;Hy zN=ufqlBb+vjulZFspzyL$rB>^oTc4$6hYKeJ@Zb*Gn#HxUDd}`c4YUOq>m)~NRr+i zV3UOVQFdhOqIF8>vZ;;pvD6D~bzS*kV|3-jtgUhf@xdJuy92f)r+6C#gAQm9)V>7s zp4^ZdI%ASbb{$K0ORxAh=Ey0%WRlN_CRY)Zk1nSDG00n^GN;Db_$ae#oEMq3<8$p! zAX6%rg~TMB%mI8YSQf=T1*1qxB}v)C!YP+LlzD+@;vQ?SsPn9_`;&Dlj{+1SxS~D= zwF5A>^pf6^OMZn=^x!+t_B=1FkE*OxzVA-76-eBADih{AD?dVLgB|&KICW(+ZFIA9 z)apX+=*9e`%B`9<^Wz<(Y~7k%S&YPeBo?ZYwV5_qKF^MIbvzY$T{fAUG)vzTqEhEV zJV%l^4?-`J|GshZ`_=)xAO;`k3*q}hl(lRN^anzmwOO&+F(beYFG!fdPMFO<2{Q!G zZ>+ob48p)8rUo15M^52C%FI%P=|Nv2w`^3vO!x{ZVB+zAiv;}P-!Iz2B4JFuZEm(9 zN(RV&*1FaJdxMQI_$dsY^4u=1A1su?Z!B~*t35yb{0hx3Y&zoyV4$-CnOWZtgA18} d9#}mvfm6J<YSuoMu$bCnF(1-l6w#P<`7dak_V)k) literal 0 HcmV?d00001 diff --git a/week-0/day-3/my_todo_app/venvironment/lib/python3.6/site-packages/pkg_resources/_vendor/packaging/__pycache__/_structures.cpython-36.pyc b/week-0/day-3/my_todo_app/venvironment/lib/python3.6/site-packages/pkg_resources/_vendor/packaging/__pycache__/_structures.cpython-36.pyc new file mode 100644 index 0000000000000000000000000000000000000000..ab5f6c0dd2abce371b8f9a5def0eecc573b75123 GIT binary patch literal 2832 zcmcImUvJYe5Vw;yO}lRG{=ha6NIaoPY?VL=B+xVj0`XD_v8PJN%3`<6)~1=`RNAz+ z?t!nuSIR3-d<CAkbDOQ55>o!mmG7LK?ce!)_iLUlFV`BMUVQmlCgeMrX(br%Lyz8p z;DpmY8PE<L7#(9^c1%h>5N>eul5kU$#%8B1%45<g!`l)s!`rfcYY7Y9THN|foXQW_ zi8yA`a1WzlKURYIgK#KSVsn4wNB%HKRzm3qign|_Q}FEJinJLp*oPh+fDoiZIq4Xj za^sS8Om6ZLXu#$c=rXTx8??o%yau|$mv|kt&6oKK=qhjUCg>Vp<!hjq_&RvFk=P%D zt{?d7%%cE;4K?<+&?5{Ar!doKO9&YGMjV=yBGK<k3m&!jdC*dWuoe2@&SC8L`Hnw2 zISRZ;w8E3#jug=_mY#_4iCsUjkqG!uwnEoCaeIEyYq3bl*i$jg*$vMUo5Ac*GFC-L zFcyTKucq$qrq(&XO_-$puERhPMK8#hj?sVGc8sKS<VHtH3Ac5qtiYV>Q%D;g5ftYz zh8tvoPOP4G2d1FT3f6nQv14eEq&!qdLf*u(80#y>8Z$_Znd71D&v4{2Y?Xx~7+cFj z0oxqPjSyZy2#@L5NJChIv<)KV2A)W&u(a<+5o6PX<~blv8M~9?0NS!0Sb-Iaqz=@{ z)CJkZQ?7z2Kn>t%TREs`n?udI#Dm#O%sX2TuIYXb3fle?3i$gl4+YPH{$oQucNR5` z8%>&R(Q}nQ5^0j<)If!?K=c@U1Y4yg&`j4r-DzXnsbjGO?f}q}8e@YYkNY^TGj<xg z{fR|l@k%TviPtGH*(K(pTt~5i0y9HyqPU`z$p|Y_vkq2jgsW`BHs^oZ?t$s5VM*>o zzeU!RcVYkhkWUHoyt<P{ZIVctl%pf$pud_^==t`|Yx*0ilQq~;E`i9tWPK%13Q!m1 zy23KiSKpce+sruPLUdOQg$eew2nq{EM;j)h{ypa{L^wLBpBDh%4%g{YdRYLy5aG@J zYh@9hF4$KEPz$kMF%;6mUJ=w{)Tc=zrx1{M-ps&kW#neccoP3k<Ti?XDE^t;kVhUv z&m%Xqx19>|Yd6L(BlzmUgq4`F5<kuoYj}7pJf)AQc`1uU6Z`dqpZ9Q0gv7dGHXm5f Fe*w)V^^E`k literal 0 HcmV?d00001 diff --git a/week-0/day-3/my_todo_app/venvironment/lib/python3.6/site-packages/pkg_resources/_vendor/packaging/__pycache__/markers.cpython-36.pyc b/week-0/day-3/my_todo_app/venvironment/lib/python3.6/site-packages/pkg_resources/_vendor/packaging/__pycache__/markers.cpython-36.pyc new file mode 100644 index 0000000000000000000000000000000000000000..15fc56799c7f1b7d4a717f1a229c12f2b81342ed GIT binary patch literal 8855 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 literal 0 HcmV?d00001 diff --git a/week-0/day-3/my_todo_app/venvironment/lib/python3.6/site-packages/pkg_resources/_vendor/packaging/__pycache__/requirements.cpython-36.pyc b/week-0/day-3/my_todo_app/venvironment/lib/python3.6/site-packages/pkg_resources/_vendor/packaging/__pycache__/requirements.cpython-36.pyc new file mode 100644 index 0000000000000000000000000000000000000000..5772bef8219af6845e9894867db27fed5d9b815f GIT binary patch literal 3851 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 PuQ@XXIc8cDX2JR&RJzz+ literal 0 HcmV?d00001 diff --git a/week-0/day-3/my_todo_app/venvironment/lib/python3.6/site-packages/pkg_resources/_vendor/packaging/__pycache__/specifiers.cpython-36.pyc b/week-0/day-3/my_todo_app/venvironment/lib/python3.6/site-packages/pkg_resources/_vendor/packaging/__pycache__/specifiers.cpython-36.pyc new file mode 100644 index 0000000000000000000000000000000000000000..0403e5a2be2e3f71a44797156de09fa4169285df GIT binary patch literal 19794 zcmeHPTWlQHd7hb_y>PjtD2kG)i=~m|*j!y`#c^#|m1Oy**sVi5mTEh+?Co-ANG`P( z>da6Q*Gnf29Ykpp*DaDF4V)lF`_kuL&;ohrLm&Fk*B0pXv1kCl_N9P;UcT=?GqZP+ zNu3lZy40RMGjryg|91ZKpa1`lzA!P7-}mLG-`%Vm#=jU{pA70(@%4X-!Zlp8X4K6^ zvu-U~_0(d@<UOlqFWT~(UQEkxW-%kb*~P4za_w5KKDIbk&oAcDKINus<MqN~p+2!V zQJ-9#G>tDBZpO`iXt-H#-*#$o3fDPz4A)~`-m};Cd(+z%?jOMYygQEj<K6*W&)~Y? zPT+dNo5A%#chcSWp|N-f_ov+bxW8ZSKjdZCX5Hy+bMdfyz@0&hBkn=>5PpxM<wNc) zTFy$3$6V{WQ9S%9a5ajla9?@JZ`L*fuT-tCH&qbk-0GdGUu`zR$#qq21f}JTMkT=Y z!lx!*vBH8M;K52M*j)GgaPn?7SS{7Ppj@eyeIH$B-}IDpF!8FlQm$;qm+AGg^1TWN zjz8@2D!%>{3eQ+HU1QO5&Bc@enF^;~Y1}E-s_yl5uTovEdaCtu-ofX&hEvr~96x^K z+%5aga&x2Mo^v*QfZ+J6&5fGtC~w(QPSA8-f9ZAS$tN$&OBV}8JIs|zjdI;9mBM_f zRByT)HP#EI((R3MEqanImE2~fRQgjx5lAT>Tz@>MuRp$CT|d9HQLVY>t9Nd#HY&dN z`1-At^UCv^8>-^@yef6BN_V`5+f<LQmn*l*E1=-x3GDv-`lcF3_xnf;3q>v^*FDs- zasMhCd<{iREibiZyQXV>Xn^@?xq>*#RYtDTZbq)Ma+P&+a+Sl?m^<d?<tp#x*T&uP z<cfXncPHG*4^8x1kT<8@eeRT8Pq+n$(1CE``LgdNtf`Qh{P36G7x487vumQc)%r;2 zPWHXw1skg2JHe{wK$yUxb&$zx1Z4`E(_F@rs_!ISJGJU9&uK2Ld6i(^xq)X%R}qhw zyq-?(pfx-3y85UFzE@k;%qI{F!pfo<+PvRkuG$ZfL$Do?l}Zm034D##!5(bqqvyL~ zeJues#=7jRmi<)+g1zBEU?G~LkxgEXp;ZR}OFyuXV|H089Z#S=)DNw0P@!z`!{1>{ zx}A*J0e7j{ta;@|hr*Cu=kBTp`YH$TH=2RaI=I{HqBnV#bf$UdJ7wiL9%t78A1uKv zOgGtUKZ2Q3$-7-DJp!OLGiLhH<KtbC+eqN~g&{{;?1Z2?1RRE-*MR0ZI~qMc-c{6A z2GHwc5@s2+6L{%+U<Lkxi(svArCh5u?|QDYv?=nKbd~6+0gjnNWpNyX#A7^>AauBw zUtMi>Wty9Sa@`C3e!2T>QHq67=4Kz4)L~%rOpMV&C50+K{2exv-bmnn(F;6PuQovR zs@6&?RjdV0HSp>V^jxJ0&4<UX!?m>9&<bHR;Zu65*nD50>Vq`QMLqgg0h^vMefl77 zuqzhdOR%_6zD21KuvK{pVgnUR5O~vdma8>jDLTFG_)XwY4xDDAwi&g#yIQTRCY@0a z?1FZWRDvkgU_b&RLgWC2Ks1yX84cOBgcN<cLq9H>3;Z{!3TUS$SWKb_Q{|;fI0+*u zP~}PhGiSBwsu?~$$b!p*nq|YOxXrq1u6ruj6kx)P?*)KP9b-eP=Pq7}J;BvRO`~9c zK6}ntliA4(zVc_Ag|ux-iwYhlABx>oeElDzh>d}&0n^E$J^G;udsUWx*sHSW!(Nr; z9`@?ETYzPllLg*b9Fv9JSj=O|pT_-hub^#6Ed3LxiyevjB<f;GqQ1}Dw>IS-rd`P^ z_lSEGZ|-+by2spyG4`~3%02F$K<$8-a;L+Y(kl&`mM)Zkvap9nXCBc~AW|>j>yuk; zW6fAI+ps{kQtgy~Jb-1mmg4oc`E|2R8^zi-*V5aD)Kj{?Y_*M2rp+?z8ZbQUh1P6j zMs|$Fi_T;3U)Xvq%#l~+psB*_9c{H1b72NX+lqIOyeq59su*Hn1}k;F9E9l=)!bMQ z(=>wdQ{ps*$=IdQigq+V`AADa8gHVb#DLT`2A1t=qZ*V-ZxCe)o?#YD+nh`l%xSyz z@Gy$O?$GZfs{vPX(oX1h0Tt5CHExZmL!g(5D^RInxz?8HrsNuw3({>c4zx^Z3LQA- zbYXD${R=16mf~{T+II<rntT8AxbglITg5BIj5?3|s>p&WF&x9vMAN@ilF1XMK$>Et zNmJ}~5N#TKrBVrRYqV2`Ogm+p8T^ezTfdW_O_fX31#Qv}$P#t)BQo7uXk`HR`=8$e zBm(L=G${^UvSd2f@K_9Q!)zTJL3l9;hXatu>wyfvO=B0D#0qViTxy4LIpdpM<BnqZ z5Yvr&1;PAPJ+K*=+m^bpIZ1ZQlri5jZeO*HAayIR&Y4)DOe3(b8*dwpDFCX)!t$^3 z9^Of}F_CU@X9&<UVIDich98t06;E+{tUk|zgNBm}&ES>#dd;iDUiVy$pXT;3+eT|h zyeL~d!_1qOIf=g<CEaQr9YN{=bM6;|Fr}XetEY%xFQ)2g-V^rifF5=K*3XQdm~)g~ ze)yZlSNKWukb)FX-L`oc6Lp)MflL=lm1Z5=Xs-m}=2m+J`|co6BI4M@#@ft}=bzPF z@1K4XCA^fhypQo>xj!|W8Qsl$thGez9MM2S2m@=`+P3^df#~TiXc$dlTT^%p4ONZ> zCrkvSdXzW%l*B$@>R}U&O|v)?eg|!QGRP3&X+1I=*4~#!&sB&#NPJkU3PoK4-LS({ z{Ty0+jISn@H9|?n<lpPK<oeFzk~H7#8h5yAifGg`Y+{m<Xhc^t!W8X2LJ?A(f4^%q zXDE@o7K$EmNVG9|OAS-PGSo9_G><4Qef*Y{<de?OJ9G?GsNmv`X;{UAbab#|dUIl9 zw^aIZGJ@GUITX3>);-2?3a`oxy@X2J!UCI9)V9VJOpVA)fw-?(YOZY+3^hlu2cD$x zwYk*dHyzF6YtT5PwPIi4MAh#yAJnh%0p(5RMN!+hN>Gz`dMAn)mVb=aegTDH<;;wo zPeZqkvL9k%B*<|(awb>s^}mh6g}t?6Y{9w`G+{@yE!YpKs=1ZE_iEdG(Rla8tqjmH z+8NkpS=7vScG+yFKQh&+b`~VK*|yeS#r+frakFi&*=%VVw@<k#*m9XSu^8Px^%m?l zJip(z)%|<ZZ5#dO(XW2mdP@tBy>LxPb)%RTYH36I3c%FHN2a{K4!2q{r#GVyCl9il zRj=lHZn$53f?X8$L+jREAue2;bV<6glIa&p+UtLbuTLQ}V42z0jGZ_0)})=m`c<%P zGoQw_Ibt1)wicFHQnJ6mVl&gX#Zb?nZ*_silPrd8F0@RDu;h~MMIs_vluq&8%Pa`& z=&i<SJYB%ocTnUk+saSmCUPnKjpHwsOBZbZP1?Cs{(xd@3P$qDqIMNu{|<_H+d+>l zoY-mC@=_1M{r!-Es|>!`=Z$R(8x7fta2vuc$R`<WIrJ7JA8kR#qb*1w+Ja0(PVC9Z ziM>y6JQlI#z`Q>a?$e&-WFJxfXQ;bmb2<0y>z86xd}Z$P<@U+T?Ms*2S5UUE6pKl_ zoBo-k&UYd;dL_9@H{m<)o%_|Be(~Ki&S~d*6$X*sonzZxc23pA!F{T;uQ(@rVLBe8 z&U*S{fBJKpeowm5D%eoNdAYXX2TpmZxq-5=NhiR{Ip?nD$iBhx(3!qDvODiy#aj== zors-w;Q8<}dw|CAy?XV0rCEbtmA=M$S>1xy&fi$4xBuM8{>o0J)`Stb;?Ue^IH&^k z2r0NMG}vB)t>Cz*Hb(XYV$?NR&}Xw=2T0OaHF%6PjJgDz7>GNu&Mv>hsh0g7nANgT zJQAkGzZQ<c)dsI1wv*w$nuqNNJPwWM#`KEv%Gh>y-y2IBg@x|N#Z1e(e7R+v#P<@u zS1vy=FFi1?^ejOsNc#&E`;Mt2W)2J<y&>(GI;k#GhYqlKaT;Rfh(`N2cB?I$Jd{f7 zM4xQW_gO-T;wDT9Ty$2*8iTcI+l(!FQ$~o^kPxo9CikQPyiaN#FZAiVa56D3g|7cj z$hfLwPjq|;RN4}irh5V^vbKAGQq)C5ftgN#Nf`a03!qaY0ZN+h38=)7pn8p0+mS%c zCO{?9q($yOx<H#730mJvdjc>WTRM9J@Mr>Hw~T8T>86bNd3Gd>gYWGL%*4{$6PO+5 zCL~F9K{uMYN%K7ch0QJZcYBn$gF|VT>4NKXd!pJxaev<$kFA-wlo(SAE#-w-?&GR8 zRNj2)jptvx{!*BK<%<iiz46iu&s~2>J;pg9W&w$*USsh(i!ZaFw@6)Qaf3z29+aB+ z6JNrEf5cZW@)Pu}%%&`Cz4afLd0Fzg?57l4Cwm9ZcbbFLERnWbGw)*$`b}fmlt5z+ zMxWl;r8?d_Hs@;$PxUIvNgBfUVG2V%A;b-iSPR#n6rVy%*$WO#I>h9x<%UL#=!Dt3 zie{cWPF9GjwDPdVT18Ox_C^)k;b;|!890Bb)~u9k{+0RYO}JymB#@0zmLH~hmwV(z z!tf3Y(hhPWH)PD&QGFx8ufv*#c_^*k!+RBclMlDJSMl}#3dPT7AkjGbB)5pn0Bs(@ z!#a*S!>{zV7El*YE$S1fOS~WTNz`Ls?LO3FU+om?hutIc?tb^Edkmi1Y43phuzOtY z&3H3w2i+6#mFs{-C&RIhag|0?I$7R(jjInXxBKiXTwm_8u}0cebI)E(`s`RmH()tc zU3iwN!KM@2a4-`XoD%y5c8BLz%IhA2sBo$3FvHzytu~}Hw+Um)@$SKKADdg+o{D0_ zvFWkd+(6_7Az9=Ih})~y6`t&d4Mrb_l7J_SHobXZ#4O4z5aSP48>}NNLXI29eTKjW zE03mG8JJd_I-;vIwU$*A0ih_wouJPUkz4gENGd3=c%5)q2eKuYjj*X|8`$qSBpw2A zn-bvbrB=tZir<}k_7eDYx#+;UeT~5yO&}eW9>R(NOuB98xYKuFtifK!=d|-yWZU)| zvgg2;Ar|XE|8bw}OWTd0FQZ2iT7sP$2;pGa(x3*TW9jL|wPQ-M!*<Uwqa|^!(QFjO zz8NKs5C<3RR<5vKlul3I9PM;$<03fLq_IyMjM*$M<77Z*wTyfPJaWBdL;)ev$c1na zOdrxyXG%o&G8v6my@o{O7<B7JoB(JhV;2NAcRm9Q7esY1kJ76z^8-K(<M^Ft2bzJZ z?_4<l%)4h#7N6}N)LU<M#R20dx+&hdIj^h5GkA0wDF+g*9@cyOYS-^+1~Epy!-nsi zFWsDfcMw`Wn=7}M+LgAdw9B>iRb0Tg+D3=`-l=+bdu51k@Uv5of=XwPsb6rM;^6qe zJbv2s3w)Z`7mgwVTjIs@5yjdhxyEmf@3jGTTNR^Q8kRvE0L%b&Pdi_MN{qA^a;Y37 z3iJqi8M1nZsUITov3w8dCuqWZ%rp^5x&+QB-F1m`qtmv`nmPi@`gU`j`9IysAu%z4 z+Cc9S`VoErs29_Y)SVV+ccJ3Vv+tD8w?twSIwp6DXCTC<HMT?H=+!7O)HmmEo)IOO z5YOL4sQ(@#=kvSDMK7;<M;Jzr)5wfsR2|#0pephCD7Fa!5-SOFJ8(FkkgkJN9k;rI zoG2_DB>n(a$=t&-wZd4>aJ}+DuTlZ#19}C$4})q@?0!j_<*Wc1i34U3mMGD{W#_Cc z|6bW8gUZgCUJgX^7Bjc&_y3yS=|WAaza%}>KWs7&pWR_{L*A&1hRyC?_U&Z?JqP1X z63`Ok%h!g6HbBepn=N5JAhBf`iAb1D!)MMYyTNVF#|d)Sop9w|^)?-tsa$Vmh#}Lk zN5u}B5DjQy^dLQHC^_G-WGz?k4e3qnFq%w>LidMG?33E8@1EXb%*jj<1EyTV3c*CO z$XN6Tbx1!$_4Vm4;%WovF3ezBF|rc)8(71M&H(hIx^tV2$AZXm#aiRd|F5Z*GXODB zoCEMfo`<0D|H|VtF=F~D``IavjvDE4L+3jyt-6N2zWO4Imsz~R;@4RGI*M?ttd^?C zA5)vfT+8|ZKIUG3vwD?Hzl5Td!e%V-Y|)=WZ^sMx`gBP$#f35UHRQ*;sSlCRL1!-x z4j^yd&3(gSssMAP-1O51ei3kV5qA^6i`8U24yj;rosvN0*g|N|CypPuH6#^*o+Y1Y z4QP)Mx6OjlJS26DQ=pqKwGi4gFvAoyFPt@bWQwT3XYwMh%zIrfDRHIbF4fBQCAWO# z<Jgr3H}~U-e}N8e?Mm)YwBx{u-&JXV)UxK!&_hoOe)?bdAXmj+YgQYfU8@41F=he= z;^P?$U{)d&0w3FC;vVwXYhVN;tWlCy$Nd~;w9f1Y{=g9EzD_)*(Tg!|!=;AAC97cN z?VL4*^rao~N_d;X%jB={b{&<rrKzo64<w9CCmXUT5NLK&5ofI+1&)Iw+5zVp$l?M| z_!MoK^9EVCX>B3Xt1*jS@C?CeYc1=qcKW0=NO%BwaiHd>^!I)GpCn~2%psC0Y!ts7 zD6+9st5y^a%oyqk6k)37HJI#HPC}+(TGpolA6_3B#fSMrl8xa_BbB%Esi|}!J!Mb9 z7nwmwwKY40aIy#Op&98WG@C?)QmLg|<WfAnbe8T4&Fg6NH?c4pR_oZ1v3Ch0Fx=iY zk*WhK-%5fA45sfo`j^q@Z@Wf6HDvU}&#hhe!)ee1LlP(06AW}B|6LahpBn<hULygF z#%n@A+$dh)vSdG4Yfu>KBC;Y(b&*+TOhsf%{@$|GMYhsMeHO0W0Nn_>Vs~L-3ARN% zZ+E3Ab=Kb#8%l*?!@F(TnMrfTw9`X*n^1Q+U4Iju^dMyaEC>P3l;mID9D?%AUX*P; z(<Ye$0*xA3vFa`WP>iteiaA37|4PhdUUg%RL<PbB#4em2P693f1RqJY=5|C3*5b&b zr4<5Z|6Nb*24&a@_asZ94aE}&qlQhtq+zl^aq1__A>~&VB__H~u_oCzCe$C5p6TXq zWz+(GDQ8zHaa;;ngF+n_l?ipq$-8E&1vdvd9K+I9Sa^V?<pG1h2nIjEV*P+iGBu^5 zmcDTfc_{CrqS`E&`KLZ$@l_VLQQ*1c$DZR2#e(TjBGfUNI++`cI%rMFg;EkZvZTv2 zt_(0RgY1%AY8sg)h<8}6gB@04v5JJn?+H{>or`|_d6TeCBz&<Jiii5*Sn4+j=9?_u zV(~VMudwKZtQZkdOl#dGZq;Iw7g<PJ(<#<E^pKhmg;~M}DB)*N$-UPf%VI<;mns}B zoYsjeg~NptxSmyfuXX&rxyU;<2ZJzn@D-zbk0i3ir8rqy2ow^a%zGC_!Y~Jrnsjc< z3ZTDaQH6=6p5QcR;`ug=E~GO};aZks){)x8CBa%yOXv$mN?I(BaDr(_*qG^Ppqj(O zFyq||u<nK#@sIiHS-xTG{G<$y#ck9Ao&EJV9&}Mih{L7%F>*{4A1sk6WFw)pCQVtk z6WJhw3{8n_{1lZH{8>m|gPjP=BeE*x93e8pF)fG`(2JkI;{1^6Abx^(+G2mYHmy$A z&^C&G2kW8@E42TK1^W{g=?ZKW*Y32S6|39MV&oZorI+5eQH#!7owfpdwrza`IHG!r z^<^f_W)~73LxvauhoS(zxYCfj+caotIE2}%FCH;O0hjTxpVBM1_Y^6OU&vLr4K!%1 z?r}`@4fM6ccu&XUNrtLez@d2oxo(sZwZ`HWiyDgnMVLYS3Knpfs+aGD>B=gO72%w# zUGtW4azRyBR)a9l3mjX3B^-{+Eq&3C@CN#Of&d&r1&Q0KBjyqL(&T;AlF}}iitQ?F z5`Q?4uHq}ngh>SScyuZSn-d;L#px7%DkUAAO36eiVc94pEElDOjYTP8QJhmwr^Hdt z32$O;5^+wPb7m~mopleR=Y5D}@;r)(bTKD7kFsB^jFVv@(V#d?rqlA0^^Y42T2wMc zsJZpATFh&h;M4(Pl4A|rO5J;2(jYHx*_+dtBwR_5<H;$5tb51C#6Z^l+dAuBo~PsI zU%~UY@qNpH!H!;eOhpc><f6kWiRggzqLM^hkKtkk0{iX^L+=z@g`EI@f6uy&EC*p8 zB<U>LA=YipUkFXVkE0Lrm$*sdChN)@WGqL>7_DMAO_K8^-9jC|^}sw=98+JzYdGZL zLCVUmD|%Lr21p(O!tAQq@*sr)&e8aYbon~tIIR!G<atYua{EyNr;ehAW66U)uq8F} zHNq>aVrmAtmpnx<jYRO-RNn4d6~WU4{sB4)Te*fLX2a0)F<>PaO-%>IfIZUalQFZG zx(PQYXJ&Zd<O;O6m;gl#rWdy-P>b`xzQDVkg-+D?lep&+McOxpoQ4@dYsmQ*Ds@4N zQ&c+#v||7$T9jA*2^#A6(PDrk)Mfr56cDUQY$3(oljK}jNs(R@I}fn`E}E&2S@gpG zVC>S0*YNJGt1FFIsBEM4ST}9r!_r+c6~6<UsEST;)(Yu}I8O2hxPTlV7#v6vW9#t{ zNJ*O+HbjCWH9Z=4j3Ho$MCCYf+)}^7A$Az<AfB&x4c9Tgw3zjs%AwZdSNQRLR7g!Z zl{2Gr1hFZflzTiNaVkI}OkhEmSXk1c^EXJA#qOzuqgiYCza@}g{x+sKYh${GXPL&O z=;@fc6FtqLhBxHtajD@gSiRp)?&g9l9XU8O7o8)y_JYn(fG${K$hn)6%y9@-of`_L z(|NG-8uDnwp&Um{n#h|_2($b1Sc#qjruyK_N36-2neVYi%E~kd^KbH``%6kSla0b5 zKKw%#y~4y}_ZSmr>q+?IXuuOg{Iji$Ic?3L#%}=*0}Gk%12P~lCq@tXpYY@wE{5>r zQMm_)m^v4b7cyshcy%$r*1AJiJukBTn4d=XGFLPWM6h-^H}nvi|2C1-hMPumQV?w& z=w=7z&cI=)&l;yFG4p?l6ZeeY-6Ku|2inOinLFILfG0h3mA1_ebCqHP&s3@OBaY6V zhNuT=uxIrU@^rP@X-uBpWQuX=kGcl!R}#8K&!`FW<^d+q#5srFEv$cp%9p2I#pVVf zv?_<-A>odCjUQskujp`Y{-MJQ+BoRf;M`yBpuyD-@chqWB%r&`_Q+q?PII{ambH%Z z4tt=nIYN08hCksLWUt=ZW_U=Y<MpFf?Ha3R5);uxIN)OXnU5CzMU0+d?a;Bf6XO-a zl!FxUsx9YldX<%&w)pF$W3zR*hi)TJ62*H>ap?z0jpU{!J~qcp%WoO?v7v(ge+1%T zf6Kg2FWQs$u}Y{X={^cF-!#67?TxJUIkd?p0)pc*JrY8jmIjBMVCk5T_hp3dSdpaA zMzFv*GKtx;v^Kj126e%o&$Y%DtA%p&4>A5o$DHfIKR#$QOlYEYgBw!q^P^N~Q%Ssk zDMT{$+#7oQsRtebg%JOQpooo#-7j5$nH<hRWh^Gu_s+{0w8Zr1ZjhuB8T$z;a`LI? zfS0;>&!JL+E8q}gEIekb9Z0VE9XOqCAJdzDo}9ureQ!~=2ybj<u&88$bdV7iyFpf; znrh(gRu<2)0gi>K;P%TnIh9i%%i*z)+qVCMc6x0rIydz)&QK+FjAKI}{=A*W7ls-H z1$8V@*awK&2FH!&WihX5Dr+%U)6nMs<)W9aKH`(^+V{|ZluEMm!<;_M1QYE!wiJ0F zx%yUcIe7F><OEG^xMJbM;#nyi@Wy{*fYV0cP2RFou;8(I#D8vpvsBacZS^jCLr+dk z_j{u*aD3X%U5BQA$V;xS^4~J3AF=jh7WC?9a-3pq4@aeF(R_)hP`Ywf{$OrQvZf!( z<?)Bi>B4?FCiSpl%i_cQU!;~d@LwC@KWkBV&rsC$it}BaU~!X$?AYH#4Xc(8cxn47 z%ZHD$5HGl}N2bLmyf-c{Joo$yUqV(|n9={Aj{L6>az;z`UXqNg_hWDIo!??X50UKA z1;{RLi8ABl33He9|9y3Zkop8+2ImOn4-u`I)Kq5nnW?WDV^dG&#_;=9<3OIL#g6_r DFvrQO literal 0 HcmV?d00001 diff --git a/week-0/day-3/my_todo_app/venvironment/lib/python3.6/site-packages/pkg_resources/_vendor/packaging/__pycache__/utils.cpython-36.pyc b/week-0/day-3/my_todo_app/venvironment/lib/python3.6/site-packages/pkg_resources/_vendor/packaging/__pycache__/utils.cpython-36.pyc new file mode 100644 index 0000000000000000000000000000000000000000..10cac5b8207ae9f6bd84539c1d30bab8ec68abae GIT binary patch literal 459 zcmY*VPfNov6i?EwE7dtgzeJI)pa(A^g7<-VtBlYkv1Ut?khD{WxA|2(_?2??<X70q zWFX83@0a)g_g*eXqilSCHT#4Be1knf-oEu}FFa5{p#UwcV2di$MpXnu42igkS-cp~ zXalQ+#&qxjsv$)WAWwdLAIKv&uIE;XzGIlTTA9wJl&`quO1dL$xa{y#FG=V9={k8V z@MLyQ{4zTUZ{+pPt3CG6fd!=S9c<77ZGfji(=9AK%PA(cRFacg@HNARHSE<zwx7F! zP%q5n(8aQD*%vUGpR=8oU8_sYbusU`paowopCz%Z)XSzY%&OiHW`pNv{dsuBBvq!= zHCfgTmrdDsT-b?zb0`1k1JhyHIs76(CfIrEGVE{ddc!a_A!EXACidWvVQxrNtGQq% d3E|MQ+jS2PLTP&4D%uNn6B=!(Jws`fMZaP}cdP&a literal 0 HcmV?d00001 diff --git a/week-0/day-3/my_todo_app/venvironment/lib/python3.6/site-packages/pkg_resources/_vendor/packaging/__pycache__/version.cpython-36.pyc b/week-0/day-3/my_todo_app/venvironment/lib/python3.6/site-packages/pkg_resources/_vendor/packaging/__pycache__/version.cpython-36.pyc new file mode 100644 index 0000000000000000000000000000000000000000..a664227069889c8bbbb1fea39089d1a106b7725f GIT binary patch literal 10569 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 br%z6wf|fC-P3M5~rD;sBJ0Fz{XX5_>CaY`g literal 0 HcmV?d00001 diff --git a/week-0/day-3/my_todo_app/venvironment/lib/python3.6/site-packages/pkg_resources/_vendor/packaging/_compat.py b/week-0/day-3/my_todo_app/venvironment/lib/python3.6/site-packages/pkg_resources/_vendor/packaging/_compat.py new file mode 100644 index 00000000..210bb80b --- /dev/null +++ b/week-0/day-3/my_todo_app/venvironment/lib/python3.6/site-packages/pkg_resources/_vendor/packaging/_compat.py @@ -0,0 +1,30 @@ +# This file is dual licensed under the terms of the Apache License, Version +# 2.0, and the BSD License. See the LICENSE file in the root of this repository +# for complete details. +from __future__ import absolute_import, division, print_function + +import sys + + +PY2 = sys.version_info[0] == 2 +PY3 = sys.version_info[0] == 3 + +# flake8: noqa + +if PY3: + string_types = str, +else: + string_types = basestring, + + +def with_metaclass(meta, *bases): + """ + Create a base class with a metaclass. + """ + # This requires a bit of explanation: the basic idea is to make a dummy + # metaclass for one level of class instantiation that replaces itself with + # the actual metaclass. + class metaclass(meta): + def __new__(cls, name, this_bases, d): + return meta(name, bases, d) + return type.__new__(metaclass, 'temporary_class', (), {}) diff --git a/week-0/day-3/my_todo_app/venvironment/lib/python3.6/site-packages/pkg_resources/_vendor/packaging/_structures.py b/week-0/day-3/my_todo_app/venvironment/lib/python3.6/site-packages/pkg_resources/_vendor/packaging/_structures.py new file mode 100644 index 00000000..ccc27861 --- /dev/null +++ b/week-0/day-3/my_todo_app/venvironment/lib/python3.6/site-packages/pkg_resources/_vendor/packaging/_structures.py @@ -0,0 +1,68 @@ +# This file is dual licensed under the terms of the Apache License, Version +# 2.0, and the BSD License. See the LICENSE file in the root of this repository +# for complete details. +from __future__ import absolute_import, division, print_function + + +class Infinity(object): + + def __repr__(self): + return "Infinity" + + def __hash__(self): + return hash(repr(self)) + + def __lt__(self, other): + return False + + def __le__(self, other): + return False + + def __eq__(self, other): + return isinstance(other, self.__class__) + + def __ne__(self, other): + return not isinstance(other, self.__class__) + + def __gt__(self, other): + return True + + def __ge__(self, other): + return True + + def __neg__(self): + return NegativeInfinity + +Infinity = Infinity() + + +class NegativeInfinity(object): + + def __repr__(self): + return "-Infinity" + + def __hash__(self): + return hash(repr(self)) + + def __lt__(self, other): + return True + + def __le__(self, other): + return True + + def __eq__(self, other): + return isinstance(other, self.__class__) + + def __ne__(self, other): + return not isinstance(other, self.__class__) + + def __gt__(self, other): + return False + + def __ge__(self, other): + return False + + def __neg__(self): + return Infinity + +NegativeInfinity = NegativeInfinity() diff --git a/week-0/day-3/my_todo_app/venvironment/lib/python3.6/site-packages/pkg_resources/_vendor/packaging/markers.py b/week-0/day-3/my_todo_app/venvironment/lib/python3.6/site-packages/pkg_resources/_vendor/packaging/markers.py new file mode 100644 index 00000000..892e578e --- /dev/null +++ b/week-0/day-3/my_todo_app/venvironment/lib/python3.6/site-packages/pkg_resources/_vendor/packaging/markers.py @@ -0,0 +1,301 @@ +# This file is dual licensed under the terms of the Apache License, Version +# 2.0, and the BSD License. See the LICENSE file in the root of this repository +# for complete details. +from __future__ import absolute_import, division, print_function + +import operator +import os +import platform +import sys + +from pkg_resources.extern.pyparsing import ParseException, ParseResults, stringStart, stringEnd +from pkg_resources.extern.pyparsing import ZeroOrMore, Group, Forward, QuotedString +from pkg_resources.extern.pyparsing import Literal as L # noqa + +from ._compat import string_types +from .specifiers import Specifier, InvalidSpecifier + + +__all__ = [ + "InvalidMarker", "UndefinedComparison", "UndefinedEnvironmentName", + "Marker", "default_environment", +] + + +class InvalidMarker(ValueError): + """ + An invalid marker was found, users should refer to PEP 508. + """ + + +class UndefinedComparison(ValueError): + """ + An invalid operation was attempted on a value that doesn't support it. + """ + + +class UndefinedEnvironmentName(ValueError): + """ + A name was attempted to be used that does not exist inside of the + environment. + """ + + +class Node(object): + + def __init__(self, value): + self.value = value + + def __str__(self): + return str(self.value) + + def __repr__(self): + return "<{0}({1!r})>".format(self.__class__.__name__, str(self)) + + def serialize(self): + raise NotImplementedError + + +class Variable(Node): + + def serialize(self): + return str(self) + + +class Value(Node): + + def serialize(self): + return '"{0}"'.format(self) + + +class Op(Node): + + def serialize(self): + return str(self) + + +VARIABLE = ( + L("implementation_version") | + L("platform_python_implementation") | + L("implementation_name") | + L("python_full_version") | + L("platform_release") | + L("platform_version") | + L("platform_machine") | + L("platform_system") | + L("python_version") | + L("sys_platform") | + L("os_name") | + L("os.name") | # PEP-345 + L("sys.platform") | # PEP-345 + L("platform.version") | # PEP-345 + L("platform.machine") | # PEP-345 + L("platform.python_implementation") | # PEP-345 + L("python_implementation") | # undocumented setuptools legacy + L("extra") +) +ALIASES = { + 'os.name': 'os_name', + 'sys.platform': 'sys_platform', + 'platform.version': 'platform_version', + 'platform.machine': 'platform_machine', + 'platform.python_implementation': 'platform_python_implementation', + 'python_implementation': 'platform_python_implementation' +} +VARIABLE.setParseAction(lambda s, l, t: Variable(ALIASES.get(t[0], t[0]))) + +VERSION_CMP = ( + L("===") | + L("==") | + L(">=") | + L("<=") | + L("!=") | + L("~=") | + L(">") | + L("<") +) + +MARKER_OP = VERSION_CMP | L("not in") | L("in") +MARKER_OP.setParseAction(lambda s, l, t: Op(t[0])) + +MARKER_VALUE = QuotedString("'") | QuotedString('"') +MARKER_VALUE.setParseAction(lambda s, l, t: Value(t[0])) + +BOOLOP = L("and") | L("or") + +MARKER_VAR = VARIABLE | MARKER_VALUE + +MARKER_ITEM = Group(MARKER_VAR + MARKER_OP + MARKER_VAR) +MARKER_ITEM.setParseAction(lambda s, l, t: tuple(t[0])) + +LPAREN = L("(").suppress() +RPAREN = L(")").suppress() + +MARKER_EXPR = Forward() +MARKER_ATOM = MARKER_ITEM | Group(LPAREN + MARKER_EXPR + RPAREN) +MARKER_EXPR << MARKER_ATOM + ZeroOrMore(BOOLOP + MARKER_EXPR) + +MARKER = stringStart + MARKER_EXPR + stringEnd + + +def _coerce_parse_result(results): + if isinstance(results, ParseResults): + return [_coerce_parse_result(i) for i in results] + else: + return results + + +def _format_marker(marker, first=True): + assert isinstance(marker, (list, tuple, string_types)) + + # Sometimes we have a structure like [[...]] which is a single item list + # where the single item is itself it's own list. In that case we want skip + # the rest of this function so that we don't get extraneous () on the + # outside. + if (isinstance(marker, list) and len(marker) == 1 and + isinstance(marker[0], (list, tuple))): + return _format_marker(marker[0]) + + if isinstance(marker, list): + inner = (_format_marker(m, first=False) for m in marker) + if first: + return " ".join(inner) + else: + return "(" + " ".join(inner) + ")" + elif isinstance(marker, tuple): + return " ".join([m.serialize() for m in marker]) + else: + return marker + + +_operators = { + "in": lambda lhs, rhs: lhs in rhs, + "not in": lambda lhs, rhs: lhs not in rhs, + "<": operator.lt, + "<=": operator.le, + "==": operator.eq, + "!=": operator.ne, + ">=": operator.ge, + ">": operator.gt, +} + + +def _eval_op(lhs, op, rhs): + try: + spec = Specifier("".join([op.serialize(), rhs])) + except InvalidSpecifier: + pass + else: + return spec.contains(lhs) + + oper = _operators.get(op.serialize()) + if oper is None: + raise UndefinedComparison( + "Undefined {0!r} on {1!r} and {2!r}.".format(op, lhs, rhs) + ) + + return oper(lhs, rhs) + + +_undefined = object() + + +def _get_env(environment, name): + value = environment.get(name, _undefined) + + if value is _undefined: + raise UndefinedEnvironmentName( + "{0!r} does not exist in evaluation environment.".format(name) + ) + + return value + + +def _evaluate_markers(markers, environment): + groups = [[]] + + for marker in markers: + assert isinstance(marker, (list, tuple, string_types)) + + if isinstance(marker, list): + groups[-1].append(_evaluate_markers(marker, environment)) + elif isinstance(marker, tuple): + lhs, op, rhs = marker + + if isinstance(lhs, Variable): + lhs_value = _get_env(environment, lhs.value) + rhs_value = rhs.value + else: + lhs_value = lhs.value + rhs_value = _get_env(environment, rhs.value) + + groups[-1].append(_eval_op(lhs_value, op, rhs_value)) + else: + assert marker in ["and", "or"] + if marker == "or": + groups.append([]) + + return any(all(item) for item in groups) + + +def format_full_version(info): + version = '{0.major}.{0.minor}.{0.micro}'.format(info) + kind = info.releaselevel + if kind != 'final': + version += kind[0] + str(info.serial) + return version + + +def default_environment(): + if hasattr(sys, 'implementation'): + iver = format_full_version(sys.implementation.version) + implementation_name = sys.implementation.name + else: + iver = '0' + implementation_name = '' + + return { + "implementation_name": implementation_name, + "implementation_version": iver, + "os_name": os.name, + "platform_machine": platform.machine(), + "platform_release": platform.release(), + "platform_system": platform.system(), + "platform_version": platform.version(), + "python_full_version": platform.python_version(), + "platform_python_implementation": platform.python_implementation(), + "python_version": platform.python_version()[:3], + "sys_platform": sys.platform, + } + + +class Marker(object): + + def __init__(self, marker): + try: + self._markers = _coerce_parse_result(MARKER.parseString(marker)) + except ParseException as e: + err_str = "Invalid marker: {0!r}, parse error at {1!r}".format( + marker, marker[e.loc:e.loc + 8]) + raise InvalidMarker(err_str) + + def __str__(self): + return _format_marker(self._markers) + + def __repr__(self): + return "<Marker({0!r})>".format(str(self)) + + def evaluate(self, environment=None): + """Evaluate a marker. + + Return the boolean from evaluating the given marker against the + environment. environment is an optional argument to override all or + part of the determined environment. + + The environment is determined from the current Python process. + """ + current_environment = default_environment() + if environment is not None: + current_environment.update(environment) + + return _evaluate_markers(self._markers, current_environment) diff --git a/week-0/day-3/my_todo_app/venvironment/lib/python3.6/site-packages/pkg_resources/_vendor/packaging/requirements.py b/week-0/day-3/my_todo_app/venvironment/lib/python3.6/site-packages/pkg_resources/_vendor/packaging/requirements.py new file mode 100644 index 00000000..0c8c4a38 --- /dev/null +++ b/week-0/day-3/my_todo_app/venvironment/lib/python3.6/site-packages/pkg_resources/_vendor/packaging/requirements.py @@ -0,0 +1,127 @@ +# This file is dual licensed under the terms of the Apache License, Version +# 2.0, and the BSD License. See the LICENSE file in the root of this repository +# for complete details. +from __future__ import absolute_import, division, print_function + +import string +import re + +from pkg_resources.extern.pyparsing import stringStart, stringEnd, originalTextFor, ParseException +from pkg_resources.extern.pyparsing import ZeroOrMore, Word, Optional, Regex, Combine +from pkg_resources.extern.pyparsing import Literal as L # noqa +from pkg_resources.extern.six.moves.urllib import parse as urlparse + +from .markers import MARKER_EXPR, Marker +from .specifiers import LegacySpecifier, Specifier, SpecifierSet + + +class InvalidRequirement(ValueError): + """ + An invalid requirement was found, users should refer to PEP 508. + """ + + +ALPHANUM = Word(string.ascii_letters + string.digits) + +LBRACKET = L("[").suppress() +RBRACKET = L("]").suppress() +LPAREN = L("(").suppress() +RPAREN = L(")").suppress() +COMMA = L(",").suppress() +SEMICOLON = L(";").suppress() +AT = L("@").suppress() + +PUNCTUATION = Word("-_.") +IDENTIFIER_END = ALPHANUM | (ZeroOrMore(PUNCTUATION) + ALPHANUM) +IDENTIFIER = Combine(ALPHANUM + ZeroOrMore(IDENTIFIER_END)) + +NAME = IDENTIFIER("name") +EXTRA = IDENTIFIER + +URI = Regex(r'[^ ]+')("url") +URL = (AT + URI) + +EXTRAS_LIST = EXTRA + ZeroOrMore(COMMA + EXTRA) +EXTRAS = (LBRACKET + Optional(EXTRAS_LIST) + RBRACKET)("extras") + +VERSION_PEP440 = Regex(Specifier._regex_str, re.VERBOSE | re.IGNORECASE) +VERSION_LEGACY = Regex(LegacySpecifier._regex_str, re.VERBOSE | re.IGNORECASE) + +VERSION_ONE = VERSION_PEP440 ^ VERSION_LEGACY +VERSION_MANY = Combine(VERSION_ONE + ZeroOrMore(COMMA + VERSION_ONE), + joinString=",", adjacent=False)("_raw_spec") +_VERSION_SPEC = Optional(((LPAREN + VERSION_MANY + RPAREN) | VERSION_MANY)) +_VERSION_SPEC.setParseAction(lambda s, l, t: t._raw_spec or '') + +VERSION_SPEC = originalTextFor(_VERSION_SPEC)("specifier") +VERSION_SPEC.setParseAction(lambda s, l, t: t[1]) + +MARKER_EXPR = originalTextFor(MARKER_EXPR())("marker") +MARKER_EXPR.setParseAction( + lambda s, l, t: Marker(s[t._original_start:t._original_end]) +) +MARKER_SEPERATOR = SEMICOLON +MARKER = MARKER_SEPERATOR + MARKER_EXPR + +VERSION_AND_MARKER = VERSION_SPEC + Optional(MARKER) +URL_AND_MARKER = URL + Optional(MARKER) + +NAMED_REQUIREMENT = \ + NAME + Optional(EXTRAS) + (URL_AND_MARKER | VERSION_AND_MARKER) + +REQUIREMENT = stringStart + NAMED_REQUIREMENT + stringEnd + + +class Requirement(object): + """Parse a requirement. + + Parse a given requirement string into its parts, such as name, specifier, + URL, and extras. Raises InvalidRequirement on a badly-formed requirement + string. + """ + + # TODO: Can we test whether something is contained within a requirement? + # If so how do we do that? Do we need to test against the _name_ of + # the thing as well as the version? What about the markers? + # TODO: Can we normalize the name and extra name? + + def __init__(self, requirement_string): + try: + req = REQUIREMENT.parseString(requirement_string) + except ParseException as e: + raise InvalidRequirement( + "Invalid requirement, parse error at \"{0!r}\"".format( + requirement_string[e.loc:e.loc + 8])) + + self.name = req.name + if req.url: + parsed_url = urlparse.urlparse(req.url) + if not (parsed_url.scheme and parsed_url.netloc) or ( + not parsed_url.scheme and not parsed_url.netloc): + raise InvalidRequirement("Invalid URL given") + self.url = req.url + else: + self.url = None + self.extras = set(req.extras.asList() if req.extras else []) + self.specifier = SpecifierSet(req.specifier) + self.marker = req.marker if req.marker else None + + def __str__(self): + parts = [self.name] + + if self.extras: + parts.append("[{0}]".format(",".join(sorted(self.extras)))) + + if self.specifier: + parts.append(str(self.specifier)) + + if self.url: + parts.append("@ {0}".format(self.url)) + + if self.marker: + parts.append("; {0}".format(self.marker)) + + return "".join(parts) + + def __repr__(self): + return "<Requirement({0!r})>".format(str(self)) diff --git a/week-0/day-3/my_todo_app/venvironment/lib/python3.6/site-packages/pkg_resources/_vendor/packaging/specifiers.py b/week-0/day-3/my_todo_app/venvironment/lib/python3.6/site-packages/pkg_resources/_vendor/packaging/specifiers.py new file mode 100644 index 00000000..7f5a76cf --- /dev/null +++ b/week-0/day-3/my_todo_app/venvironment/lib/python3.6/site-packages/pkg_resources/_vendor/packaging/specifiers.py @@ -0,0 +1,774 @@ +# This file is dual licensed under the terms of the Apache License, Version +# 2.0, and the BSD License. See the LICENSE file in the root of this repository +# for complete details. +from __future__ import absolute_import, division, print_function + +import abc +import functools +import itertools +import re + +from ._compat import string_types, with_metaclass +from .version import Version, LegacyVersion, parse + + +class InvalidSpecifier(ValueError): + """ + An invalid specifier was found, users should refer to PEP 440. + """ + + +class BaseSpecifier(with_metaclass(abc.ABCMeta, object)): + + @abc.abstractmethod + def __str__(self): + """ + Returns the str representation of this Specifier like object. This + should be representative of the Specifier itself. + """ + + @abc.abstractmethod + def __hash__(self): + """ + Returns a hash value for this Specifier like object. + """ + + @abc.abstractmethod + def __eq__(self, other): + """ + Returns a boolean representing whether or not the two Specifier like + objects are equal. + """ + + @abc.abstractmethod + def __ne__(self, other): + """ + Returns a boolean representing whether or not the two Specifier like + objects are not equal. + """ + + @abc.abstractproperty + def prereleases(self): + """ + Returns whether or not pre-releases as a whole are allowed by this + specifier. + """ + + @prereleases.setter + def prereleases(self, value): + """ + Sets whether or not pre-releases as a whole are allowed by this + specifier. + """ + + @abc.abstractmethod + def contains(self, item, prereleases=None): + """ + Determines if the given item is contained within this specifier. + """ + + @abc.abstractmethod + def filter(self, iterable, prereleases=None): + """ + Takes an iterable of items and filters them so that only items which + are contained within this specifier are allowed in it. + """ + + +class _IndividualSpecifier(BaseSpecifier): + + _operators = {} + + def __init__(self, spec="", prereleases=None): + match = self._regex.search(spec) + if not match: + raise InvalidSpecifier("Invalid specifier: '{0}'".format(spec)) + + self._spec = ( + match.group("operator").strip(), + match.group("version").strip(), + ) + + # Store whether or not this Specifier should accept prereleases + self._prereleases = prereleases + + def __repr__(self): + pre = ( + ", prereleases={0!r}".format(self.prereleases) + if self._prereleases is not None + else "" + ) + + return "<{0}({1!r}{2})>".format( + self.__class__.__name__, + str(self), + pre, + ) + + def __str__(self): + return "{0}{1}".format(*self._spec) + + def __hash__(self): + return hash(self._spec) + + def __eq__(self, other): + if isinstance(other, string_types): + try: + other = self.__class__(other) + except InvalidSpecifier: + return NotImplemented + elif not isinstance(other, self.__class__): + return NotImplemented + + return self._spec == other._spec + + def __ne__(self, other): + if isinstance(other, string_types): + try: + other = self.__class__(other) + except InvalidSpecifier: + return NotImplemented + elif not isinstance(other, self.__class__): + return NotImplemented + + return self._spec != other._spec + + def _get_operator(self, op): + return getattr(self, "_compare_{0}".format(self._operators[op])) + + def _coerce_version(self, version): + if not isinstance(version, (LegacyVersion, Version)): + version = parse(version) + return version + + @property + def operator(self): + return self._spec[0] + + @property + def version(self): + return self._spec[1] + + @property + def prereleases(self): + return self._prereleases + + @prereleases.setter + def prereleases(self, value): + self._prereleases = value + + def __contains__(self, item): + return self.contains(item) + + def contains(self, item, prereleases=None): + # Determine if prereleases are to be allowed or not. + if prereleases is None: + prereleases = self.prereleases + + # Normalize item to a Version or LegacyVersion, this allows us to have + # a shortcut for ``"2.0" in Specifier(">=2") + item = self._coerce_version(item) + + # Determine if we should be supporting prereleases in this specifier + # or not, if we do not support prereleases than we can short circuit + # logic if this version is a prereleases. + if item.is_prerelease and not prereleases: + return False + + # Actually do the comparison to determine if this item is contained + # within this Specifier or not. + return self._get_operator(self.operator)(item, self.version) + + def filter(self, iterable, prereleases=None): + yielded = False + found_prereleases = [] + + kw = {"prereleases": prereleases if prereleases is not None else True} + + # Attempt to iterate over all the values in the iterable and if any of + # them match, yield them. + for version in iterable: + parsed_version = self._coerce_version(version) + + if self.contains(parsed_version, **kw): + # If our version is a prerelease, and we were not set to allow + # prereleases, then we'll store it for later incase nothing + # else matches this specifier. + if (parsed_version.is_prerelease and not + (prereleases or self.prereleases)): + found_prereleases.append(version) + # Either this is not a prerelease, or we should have been + # accepting prereleases from the begining. + else: + yielded = True + yield version + + # Now that we've iterated over everything, determine if we've yielded + # any values, and if we have not and we have any prereleases stored up + # then we will go ahead and yield the prereleases. + if not yielded and found_prereleases: + for version in found_prereleases: + yield version + + +class LegacySpecifier(_IndividualSpecifier): + + _regex_str = ( + r""" + (?P<operator>(==|!=|<=|>=|<|>)) + \s* + (?P<version> + [^,;\s)]* # Since this is a "legacy" specifier, and the version + # string can be just about anything, we match everything + # except for whitespace, a semi-colon for marker support, + # a closing paren since versions can be enclosed in + # them, and a comma since it's a version separator. + ) + """ + ) + + _regex = re.compile( + r"^\s*" + _regex_str + r"\s*$", re.VERBOSE | re.IGNORECASE) + + _operators = { + "==": "equal", + "!=": "not_equal", + "<=": "less_than_equal", + ">=": "greater_than_equal", + "<": "less_than", + ">": "greater_than", + } + + def _coerce_version(self, version): + if not isinstance(version, LegacyVersion): + version = LegacyVersion(str(version)) + return version + + def _compare_equal(self, prospective, spec): + return prospective == self._coerce_version(spec) + + def _compare_not_equal(self, prospective, spec): + return prospective != self._coerce_version(spec) + + def _compare_less_than_equal(self, prospective, spec): + return prospective <= self._coerce_version(spec) + + def _compare_greater_than_equal(self, prospective, spec): + return prospective >= self._coerce_version(spec) + + def _compare_less_than(self, prospective, spec): + return prospective < self._coerce_version(spec) + + def _compare_greater_than(self, prospective, spec): + return prospective > self._coerce_version(spec) + + +def _require_version_compare(fn): + @functools.wraps(fn) + def wrapped(self, prospective, spec): + if not isinstance(prospective, Version): + return False + return fn(self, prospective, spec) + return wrapped + + +class Specifier(_IndividualSpecifier): + + _regex_str = ( + r""" + (?P<operator>(~=|==|!=|<=|>=|<|>|===)) + (?P<version> + (?: + # The identity operators allow for an escape hatch that will + # do an exact string match of the version you wish to install. + # This will not be parsed by PEP 440 and we cannot determine + # any semantic meaning from it. This operator is discouraged + # but included entirely as an escape hatch. + (?<====) # Only match for the identity operator + \s* + [^\s]* # We just match everything, except for whitespace + # since we are only testing for strict identity. + ) + | + (?: + # The (non)equality operators allow for wild card and local + # versions to be specified so we have to define these two + # operators separately to enable that. + (?<===|!=) # Only match for equals and not equals + + \s* + v? + (?:[0-9]+!)? # epoch + [0-9]+(?:\.[0-9]+)* # release + (?: # pre release + [-_\.]? + (a|b|c|rc|alpha|beta|pre|preview) + [-_\.]? + [0-9]* + )? + (?: # post release + (?:-[0-9]+)|(?:[-_\.]?(post|rev|r)[-_\.]?[0-9]*) + )? + + # You cannot use a wild card and a dev or local version + # together so group them with a | and make them optional. + (?: + (?:[-_\.]?dev[-_\.]?[0-9]*)? # dev release + (?:\+[a-z0-9]+(?:[-_\.][a-z0-9]+)*)? # local + | + \.\* # Wild card syntax of .* + )? + ) + | + (?: + # The compatible operator requires at least two digits in the + # release segment. + (?<=~=) # Only match for the compatible operator + + \s* + v? + (?:[0-9]+!)? # epoch + [0-9]+(?:\.[0-9]+)+ # release (We have a + instead of a *) + (?: # pre release + [-_\.]? + (a|b|c|rc|alpha|beta|pre|preview) + [-_\.]? + [0-9]* + )? + (?: # post release + (?:-[0-9]+)|(?:[-_\.]?(post|rev|r)[-_\.]?[0-9]*) + )? + (?:[-_\.]?dev[-_\.]?[0-9]*)? # dev release + ) + | + (?: + # All other operators only allow a sub set of what the + # (non)equality operators do. Specifically they do not allow + # local versions to be specified nor do they allow the prefix + # matching wild cards. + (?<!==|!=|~=) # We have special cases for these + # operators so we want to make sure they + # don't match here. + + \s* + v? + (?:[0-9]+!)? # epoch + [0-9]+(?:\.[0-9]+)* # release + (?: # pre release + [-_\.]? + (a|b|c|rc|alpha|beta|pre|preview) + [-_\.]? + [0-9]* + )? + (?: # post release + (?:-[0-9]+)|(?:[-_\.]?(post|rev|r)[-_\.]?[0-9]*) + )? + (?:[-_\.]?dev[-_\.]?[0-9]*)? # dev release + ) + ) + """ + ) + + _regex = re.compile( + r"^\s*" + _regex_str + r"\s*$", re.VERBOSE | re.IGNORECASE) + + _operators = { + "~=": "compatible", + "==": "equal", + "!=": "not_equal", + "<=": "less_than_equal", + ">=": "greater_than_equal", + "<": "less_than", + ">": "greater_than", + "===": "arbitrary", + } + + @_require_version_compare + def _compare_compatible(self, prospective, spec): + # Compatible releases have an equivalent combination of >= and ==. That + # is that ~=2.2 is equivalent to >=2.2,==2.*. This allows us to + # implement this in terms of the other specifiers instead of + # implementing it ourselves. The only thing we need to do is construct + # the other specifiers. + + # We want everything but the last item in the version, but we want to + # ignore post and dev releases and we want to treat the pre-release as + # it's own separate segment. + prefix = ".".join( + list( + itertools.takewhile( + lambda x: (not x.startswith("post") and not + x.startswith("dev")), + _version_split(spec), + ) + )[:-1] + ) + + # Add the prefix notation to the end of our string + prefix += ".*" + + return (self._get_operator(">=")(prospective, spec) and + self._get_operator("==")(prospective, prefix)) + + @_require_version_compare + def _compare_equal(self, prospective, spec): + # We need special logic to handle prefix matching + if spec.endswith(".*"): + # In the case of prefix matching we want to ignore local segment. + prospective = Version(prospective.public) + # Split the spec out by dots, and pretend that there is an implicit + # dot in between a release segment and a pre-release segment. + spec = _version_split(spec[:-2]) # Remove the trailing .* + + # Split the prospective version out by dots, and pretend that there + # is an implicit dot in between a release segment and a pre-release + # segment. + prospective = _version_split(str(prospective)) + + # Shorten the prospective version to be the same length as the spec + # so that we can determine if the specifier is a prefix of the + # prospective version or not. + prospective = prospective[:len(spec)] + + # Pad out our two sides with zeros so that they both equal the same + # length. + spec, prospective = _pad_version(spec, prospective) + else: + # Convert our spec string into a Version + spec = Version(spec) + + # If the specifier does not have a local segment, then we want to + # act as if the prospective version also does not have a local + # segment. + if not spec.local: + prospective = Version(prospective.public) + + return prospective == spec + + @_require_version_compare + def _compare_not_equal(self, prospective, spec): + return not self._compare_equal(prospective, spec) + + @_require_version_compare + def _compare_less_than_equal(self, prospective, spec): + return prospective <= Version(spec) + + @_require_version_compare + def _compare_greater_than_equal(self, prospective, spec): + return prospective >= Version(spec) + + @_require_version_compare + def _compare_less_than(self, prospective, spec): + # Convert our spec to a Version instance, since we'll want to work with + # it as a version. + spec = Version(spec) + + # Check to see if the prospective version is less than the spec + # version. If it's not we can short circuit and just return False now + # instead of doing extra unneeded work. + if not prospective < spec: + return False + + # This special case is here so that, unless the specifier itself + # includes is a pre-release version, that we do not accept pre-release + # versions for the version mentioned in the specifier (e.g. <3.1 should + # not match 3.1.dev0, but should match 3.0.dev0). + if not spec.is_prerelease and prospective.is_prerelease: + if Version(prospective.base_version) == Version(spec.base_version): + return False + + # If we've gotten to here, it means that prospective version is both + # less than the spec version *and* it's not a pre-release of the same + # version in the spec. + return True + + @_require_version_compare + def _compare_greater_than(self, prospective, spec): + # Convert our spec to a Version instance, since we'll want to work with + # it as a version. + spec = Version(spec) + + # Check to see if the prospective version is greater than the spec + # version. If it's not we can short circuit and just return False now + # instead of doing extra unneeded work. + if not prospective > spec: + return False + + # This special case is here so that, unless the specifier itself + # includes is a post-release version, that we do not accept + # post-release versions for the version mentioned in the specifier + # (e.g. >3.1 should not match 3.0.post0, but should match 3.2.post0). + if not spec.is_postrelease and prospective.is_postrelease: + if Version(prospective.base_version) == Version(spec.base_version): + return False + + # Ensure that we do not allow a local version of the version mentioned + # in the specifier, which is techincally greater than, to match. + if prospective.local is not None: + if Version(prospective.base_version) == Version(spec.base_version): + return False + + # If we've gotten to here, it means that prospective version is both + # greater than the spec version *and* it's not a pre-release of the + # same version in the spec. + return True + + def _compare_arbitrary(self, prospective, spec): + return str(prospective).lower() == str(spec).lower() + + @property + def prereleases(self): + # If there is an explicit prereleases set for this, then we'll just + # blindly use that. + if self._prereleases is not None: + return self._prereleases + + # Look at all of our specifiers and determine if they are inclusive + # operators, and if they are if they are including an explicit + # prerelease. + operator, version = self._spec + if operator in ["==", ">=", "<=", "~=", "==="]: + # The == specifier can include a trailing .*, if it does we + # want to remove before parsing. + if operator == "==" and version.endswith(".*"): + version = version[:-2] + + # Parse the version, and if it is a pre-release than this + # specifier allows pre-releases. + if parse(version).is_prerelease: + return True + + return False + + @prereleases.setter + def prereleases(self, value): + self._prereleases = value + + +_prefix_regex = re.compile(r"^([0-9]+)((?:a|b|c|rc)[0-9]+)$") + + +def _version_split(version): + result = [] + for item in version.split("."): + match = _prefix_regex.search(item) + if match: + result.extend(match.groups()) + else: + result.append(item) + return result + + +def _pad_version(left, right): + left_split, right_split = [], [] + + # Get the release segment of our versions + left_split.append(list(itertools.takewhile(lambda x: x.isdigit(), left))) + right_split.append(list(itertools.takewhile(lambda x: x.isdigit(), right))) + + # Get the rest of our versions + left_split.append(left[len(left_split[0]):]) + right_split.append(right[len(right_split[0]):]) + + # Insert our padding + left_split.insert( + 1, + ["0"] * max(0, len(right_split[0]) - len(left_split[0])), + ) + right_split.insert( + 1, + ["0"] * max(0, len(left_split[0]) - len(right_split[0])), + ) + + return ( + list(itertools.chain(*left_split)), + list(itertools.chain(*right_split)), + ) + + +class SpecifierSet(BaseSpecifier): + + def __init__(self, specifiers="", prereleases=None): + # Split on , to break each indidivual specifier into it's own item, and + # strip each item to remove leading/trailing whitespace. + specifiers = [s.strip() for s in specifiers.split(",") if s.strip()] + + # Parsed each individual specifier, attempting first to make it a + # Specifier and falling back to a LegacySpecifier. + parsed = set() + for specifier in specifiers: + try: + parsed.add(Specifier(specifier)) + except InvalidSpecifier: + parsed.add(LegacySpecifier(specifier)) + + # Turn our parsed specifiers into a frozen set and save them for later. + self._specs = frozenset(parsed) + + # Store our prereleases value so we can use it later to determine if + # we accept prereleases or not. + self._prereleases = prereleases + + def __repr__(self): + pre = ( + ", prereleases={0!r}".format(self.prereleases) + if self._prereleases is not None + else "" + ) + + return "<SpecifierSet({0!r}{1})>".format(str(self), pre) + + def __str__(self): + return ",".join(sorted(str(s) for s in self._specs)) + + def __hash__(self): + return hash(self._specs) + + def __and__(self, other): + if isinstance(other, string_types): + other = SpecifierSet(other) + elif not isinstance(other, SpecifierSet): + return NotImplemented + + specifier = SpecifierSet() + specifier._specs = frozenset(self._specs | other._specs) + + if self._prereleases is None and other._prereleases is not None: + specifier._prereleases = other._prereleases + elif self._prereleases is not None and other._prereleases is None: + specifier._prereleases = self._prereleases + elif self._prereleases == other._prereleases: + specifier._prereleases = self._prereleases + else: + raise ValueError( + "Cannot combine SpecifierSets with True and False prerelease " + "overrides." + ) + + return specifier + + def __eq__(self, other): + if isinstance(other, string_types): + other = SpecifierSet(other) + elif isinstance(other, _IndividualSpecifier): + other = SpecifierSet(str(other)) + elif not isinstance(other, SpecifierSet): + return NotImplemented + + return self._specs == other._specs + + def __ne__(self, other): + if isinstance(other, string_types): + other = SpecifierSet(other) + elif isinstance(other, _IndividualSpecifier): + other = SpecifierSet(str(other)) + elif not isinstance(other, SpecifierSet): + return NotImplemented + + return self._specs != other._specs + + def __len__(self): + return len(self._specs) + + def __iter__(self): + return iter(self._specs) + + @property + def prereleases(self): + # If we have been given an explicit prerelease modifier, then we'll + # pass that through here. + if self._prereleases is not None: + return self._prereleases + + # If we don't have any specifiers, and we don't have a forced value, + # then we'll just return None since we don't know if this should have + # pre-releases or not. + if not self._specs: + return None + + # Otherwise we'll see if any of the given specifiers accept + # prereleases, if any of them do we'll return True, otherwise False. + return any(s.prereleases for s in self._specs) + + @prereleases.setter + def prereleases(self, value): + self._prereleases = value + + def __contains__(self, item): + return self.contains(item) + + def contains(self, item, prereleases=None): + # Ensure that our item is a Version or LegacyVersion instance. + if not isinstance(item, (LegacyVersion, Version)): + item = parse(item) + + # Determine if we're forcing a prerelease or not, if we're not forcing + # one for this particular filter call, then we'll use whatever the + # SpecifierSet thinks for whether or not we should support prereleases. + if prereleases is None: + prereleases = self.prereleases + + # We can determine if we're going to allow pre-releases by looking to + # see if any of the underlying items supports them. If none of them do + # and this item is a pre-release then we do not allow it and we can + # short circuit that here. + # Note: This means that 1.0.dev1 would not be contained in something + # like >=1.0.devabc however it would be in >=1.0.debabc,>0.0.dev0 + if not prereleases and item.is_prerelease: + return False + + # We simply dispatch to the underlying specs here to make sure that the + # given version is contained within all of them. + # Note: This use of all() here means that an empty set of specifiers + # will always return True, this is an explicit design decision. + return all( + s.contains(item, prereleases=prereleases) + for s in self._specs + ) + + def filter(self, iterable, prereleases=None): + # Determine if we're forcing a prerelease or not, if we're not forcing + # one for this particular filter call, then we'll use whatever the + # SpecifierSet thinks for whether or not we should support prereleases. + if prereleases is None: + prereleases = self.prereleases + + # If we have any specifiers, then we want to wrap our iterable in the + # filter method for each one, this will act as a logical AND amongst + # each specifier. + if self._specs: + for spec in self._specs: + iterable = spec.filter(iterable, prereleases=bool(prereleases)) + return iterable + # If we do not have any specifiers, then we need to have a rough filter + # which will filter out any pre-releases, unless there are no final + # releases, and which will filter out LegacyVersion in general. + else: + filtered = [] + found_prereleases = [] + + for item in iterable: + # Ensure that we some kind of Version class for this item. + if not isinstance(item, (LegacyVersion, Version)): + parsed_version = parse(item) + else: + parsed_version = item + + # Filter out any item which is parsed as a LegacyVersion + if isinstance(parsed_version, LegacyVersion): + continue + + # Store any item which is a pre-release for later unless we've + # already found a final version or we are accepting prereleases + if parsed_version.is_prerelease and not prereleases: + if not filtered: + found_prereleases.append(item) + else: + filtered.append(item) + + # If we've found no items except for pre-releases, then we'll go + # ahead and use the pre-releases + if not filtered and found_prereleases and prereleases is None: + return found_prereleases + + return filtered diff --git a/week-0/day-3/my_todo_app/venvironment/lib/python3.6/site-packages/pkg_resources/_vendor/packaging/utils.py b/week-0/day-3/my_todo_app/venvironment/lib/python3.6/site-packages/pkg_resources/_vendor/packaging/utils.py new file mode 100644 index 00000000..942387ce --- /dev/null +++ b/week-0/day-3/my_todo_app/venvironment/lib/python3.6/site-packages/pkg_resources/_vendor/packaging/utils.py @@ -0,0 +1,14 @@ +# This file is dual licensed under the terms of the Apache License, Version +# 2.0, and the BSD License. See the LICENSE file in the root of this repository +# for complete details. +from __future__ import absolute_import, division, print_function + +import re + + +_canonicalize_regex = re.compile(r"[-_.]+") + + +def canonicalize_name(name): + # This is taken from PEP 503. + return _canonicalize_regex.sub("-", name).lower() diff --git a/week-0/day-3/my_todo_app/venvironment/lib/python3.6/site-packages/pkg_resources/_vendor/packaging/version.py b/week-0/day-3/my_todo_app/venvironment/lib/python3.6/site-packages/pkg_resources/_vendor/packaging/version.py new file mode 100644 index 00000000..83b5ee8c --- /dev/null +++ b/week-0/day-3/my_todo_app/venvironment/lib/python3.6/site-packages/pkg_resources/_vendor/packaging/version.py @@ -0,0 +1,393 @@ +# This file is dual licensed under the terms of the Apache License, Version +# 2.0, and the BSD License. See the LICENSE file in the root of this repository +# for complete details. +from __future__ import absolute_import, division, print_function + +import collections +import itertools +import re + +from ._structures import Infinity + + +__all__ = [ + "parse", "Version", "LegacyVersion", "InvalidVersion", "VERSION_PATTERN" +] + + +_Version = collections.namedtuple( + "_Version", + ["epoch", "release", "dev", "pre", "post", "local"], +) + + +def parse(version): + """ + Parse the given version string and return either a :class:`Version` object + or a :class:`LegacyVersion` object depending on if the given version is + a valid PEP 440 version or a legacy version. + """ + try: + return Version(version) + except InvalidVersion: + return LegacyVersion(version) + + +class InvalidVersion(ValueError): + """ + An invalid version was found, users should refer to PEP 440. + """ + + +class _BaseVersion(object): + + def __hash__(self): + return hash(self._key) + + def __lt__(self, other): + return self._compare(other, lambda s, o: s < o) + + def __le__(self, other): + return self._compare(other, lambda s, o: s <= o) + + def __eq__(self, other): + return self._compare(other, lambda s, o: s == o) + + def __ge__(self, other): + return self._compare(other, lambda s, o: s >= o) + + def __gt__(self, other): + return self._compare(other, lambda s, o: s > o) + + def __ne__(self, other): + return self._compare(other, lambda s, o: s != o) + + def _compare(self, other, method): + if not isinstance(other, _BaseVersion): + return NotImplemented + + return method(self._key, other._key) + + +class LegacyVersion(_BaseVersion): + + def __init__(self, version): + self._version = str(version) + self._key = _legacy_cmpkey(self._version) + + def __str__(self): + return self._version + + def __repr__(self): + return "<LegacyVersion({0})>".format(repr(str(self))) + + @property + def public(self): + return self._version + + @property + def base_version(self): + return self._version + + @property + def local(self): + return None + + @property + def is_prerelease(self): + return False + + @property + def is_postrelease(self): + return False + + +_legacy_version_component_re = re.compile( + r"(\d+ | [a-z]+ | \.| -)", re.VERBOSE, +) + +_legacy_version_replacement_map = { + "pre": "c", "preview": "c", "-": "final-", "rc": "c", "dev": "@", +} + + +def _parse_version_parts(s): + for part in _legacy_version_component_re.split(s): + part = _legacy_version_replacement_map.get(part, part) + + if not part or part == ".": + continue + + if part[:1] in "0123456789": + # pad for numeric comparison + yield part.zfill(8) + else: + yield "*" + part + + # ensure that alpha/beta/candidate are before final + yield "*final" + + +def _legacy_cmpkey(version): + # We hardcode an epoch of -1 here. A PEP 440 version can only have a epoch + # greater than or equal to 0. This will effectively put the LegacyVersion, + # which uses the defacto standard originally implemented by setuptools, + # as before all PEP 440 versions. + epoch = -1 + + # This scheme is taken from pkg_resources.parse_version setuptools prior to + # it's adoption of the packaging library. + parts = [] + for part in _parse_version_parts(version.lower()): + if part.startswith("*"): + # remove "-" before a prerelease tag + if part < "*final": + while parts and parts[-1] == "*final-": + parts.pop() + + # remove trailing zeros from each series of numeric parts + while parts and parts[-1] == "00000000": + parts.pop() + + parts.append(part) + parts = tuple(parts) + + return epoch, parts + +# Deliberately not anchored to the start and end of the string, to make it +# easier for 3rd party code to reuse +VERSION_PATTERN = r""" + v? + (?: + (?:(?P<epoch>[0-9]+)!)? # epoch + (?P<release>[0-9]+(?:\.[0-9]+)*) # release segment + (?P<pre> # pre-release + [-_\.]? + (?P<pre_l>(a|b|c|rc|alpha|beta|pre|preview)) + [-_\.]? + (?P<pre_n>[0-9]+)? + )? + (?P<post> # post release + (?:-(?P<post_n1>[0-9]+)) + | + (?: + [-_\.]? + (?P<post_l>post|rev|r) + [-_\.]? + (?P<post_n2>[0-9]+)? + ) + )? + (?P<dev> # dev release + [-_\.]? + (?P<dev_l>dev) + [-_\.]? + (?P<dev_n>[0-9]+)? + )? + ) + (?:\+(?P<local>[a-z0-9]+(?:[-_\.][a-z0-9]+)*))? # local version +""" + + +class Version(_BaseVersion): + + _regex = re.compile( + r"^\s*" + VERSION_PATTERN + r"\s*$", + re.VERBOSE | re.IGNORECASE, + ) + + def __init__(self, version): + # Validate the version and parse it into pieces + match = self._regex.search(version) + if not match: + raise InvalidVersion("Invalid version: '{0}'".format(version)) + + # Store the parsed out pieces of the version + self._version = _Version( + epoch=int(match.group("epoch")) if match.group("epoch") else 0, + release=tuple(int(i) for i in match.group("release").split(".")), + pre=_parse_letter_version( + match.group("pre_l"), + match.group("pre_n"), + ), + post=_parse_letter_version( + match.group("post_l"), + match.group("post_n1") or match.group("post_n2"), + ), + dev=_parse_letter_version( + match.group("dev_l"), + match.group("dev_n"), + ), + local=_parse_local_version(match.group("local")), + ) + + # Generate a key which will be used for sorting + self._key = _cmpkey( + self._version.epoch, + self._version.release, + self._version.pre, + self._version.post, + self._version.dev, + self._version.local, + ) + + def __repr__(self): + return "<Version({0})>".format(repr(str(self))) + + def __str__(self): + parts = [] + + # Epoch + if self._version.epoch != 0: + parts.append("{0}!".format(self._version.epoch)) + + # Release segment + parts.append(".".join(str(x) for x in self._version.release)) + + # Pre-release + if self._version.pre is not None: + parts.append("".join(str(x) for x in self._version.pre)) + + # Post-release + if self._version.post is not None: + parts.append(".post{0}".format(self._version.post[1])) + + # Development release + if self._version.dev is not None: + parts.append(".dev{0}".format(self._version.dev[1])) + + # Local version segment + if self._version.local is not None: + parts.append( + "+{0}".format(".".join(str(x) for x in self._version.local)) + ) + + return "".join(parts) + + @property + def public(self): + return str(self).split("+", 1)[0] + + @property + def base_version(self): + parts = [] + + # Epoch + if self._version.epoch != 0: + parts.append("{0}!".format(self._version.epoch)) + + # Release segment + parts.append(".".join(str(x) for x in self._version.release)) + + return "".join(parts) + + @property + def local(self): + version_string = str(self) + if "+" in version_string: + return version_string.split("+", 1)[1] + + @property + def is_prerelease(self): + return bool(self._version.dev or self._version.pre) + + @property + def is_postrelease(self): + return bool(self._version.post) + + +def _parse_letter_version(letter, number): + if letter: + # We consider there to be an implicit 0 in a pre-release if there is + # not a numeral associated with it. + if number is None: + number = 0 + + # We normalize any letters to their lower case form + letter = letter.lower() + + # We consider some words to be alternate spellings of other words and + # in those cases we want to normalize the spellings to our preferred + # spelling. + if letter == "alpha": + letter = "a" + elif letter == "beta": + letter = "b" + elif letter in ["c", "pre", "preview"]: + letter = "rc" + elif letter in ["rev", "r"]: + letter = "post" + + return letter, int(number) + if not letter and number: + # We assume if we are given a number, but we are not given a letter + # then this is using the implicit post release syntax (e.g. 1.0-1) + letter = "post" + + return letter, int(number) + + +_local_version_seperators = re.compile(r"[\._-]") + + +def _parse_local_version(local): + """ + Takes a string like abc.1.twelve and turns it into ("abc", 1, "twelve"). + """ + if local is not None: + return tuple( + part.lower() if not part.isdigit() else int(part) + for part in _local_version_seperators.split(local) + ) + + +def _cmpkey(epoch, release, pre, post, dev, local): + # When we compare a release version, we want to compare it with all of the + # trailing zeros removed. So we'll use a reverse the list, drop all the now + # leading zeros until we come to something non zero, then take the rest + # re-reverse it back into the correct order and make it a tuple and use + # that for our sorting key. + release = tuple( + reversed(list( + itertools.dropwhile( + lambda x: x == 0, + reversed(release), + ) + )) + ) + + # We need to "trick" the sorting algorithm to put 1.0.dev0 before 1.0a0. + # We'll do this by abusing the pre segment, but we _only_ want to do this + # if there is not a pre or a post segment. If we have one of those then + # the normal sorting rules will handle this case correctly. + if pre is None and post is None and dev is not None: + pre = -Infinity + # Versions without a pre-release (except as noted above) should sort after + # those with one. + elif pre is None: + pre = Infinity + + # Versions without a post segment should sort before those with one. + if post is None: + post = -Infinity + + # Versions without a development segment should sort after those with one. + if dev is None: + dev = Infinity + + if local is None: + # Versions without a local segment should sort before those with one. + local = -Infinity + else: + # Versions with a local segment need that segment parsed to implement + # the sorting rules in PEP440. + # - Alpha numeric segments sort before numeric segments + # - Alpha numeric segments sort lexicographically + # - Numeric segments sort numerically + # - Shorter versions sort before longer versions when the prefixes + # match exactly + local = tuple( + (i, "") if isinstance(i, int) else (-Infinity, i) + for i in local + ) + + return epoch, release, pre, post, dev, local diff --git a/week-0/day-3/my_todo_app/venvironment/lib/python3.6/site-packages/pkg_resources/_vendor/pyparsing.py b/week-0/day-3/my_todo_app/venvironment/lib/python3.6/site-packages/pkg_resources/_vendor/pyparsing.py new file mode 100644 index 00000000..38a8d2f5 --- /dev/null +++ b/week-0/day-3/my_todo_app/venvironment/lib/python3.6/site-packages/pkg_resources/_vendor/pyparsing.py @@ -0,0 +1,5696 @@ +# module pyparsing.py +# +# Copyright (c) 2003-2016 Paul T. McGuire +# +# Permission is hereby granted, free of charge, to any person obtaining +# a copy of this software and associated documentation files (the +# "Software"), to deal in the Software without restriction, including +# without limitation the rights to use, copy, modify, merge, publish, +# distribute, sublicense, and/or sell copies of the Software, and to +# permit persons to whom the Software is furnished to do so, subject to +# the following conditions: +# +# The above copyright notice and this permission notice shall be +# included in all copies or substantial portions of the Software. +# +# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, +# EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF +# MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. +# IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY +# CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, +# TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE +# SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. +# + +__doc__ = \ +""" +pyparsing module - Classes and methods to define and execute parsing grammars + +The pyparsing module is an alternative approach to creating and executing simple grammars, +vs. the traditional lex/yacc approach, or the use of regular expressions. With pyparsing, you +don't need to learn a new syntax for defining grammars or matching expressions - the parsing module +provides a library of classes that you use to construct the grammar directly in Python. + +Here is a program to parse "Hello, World!" (or any greeting of the form +C{"<salutation>, <addressee>!"}), built up using L{Word}, L{Literal}, and L{And} elements +(L{'+'<ParserElement.__add__>} operator gives L{And} expressions, strings are auto-converted to +L{Literal} expressions):: + + from pyparsing import Word, alphas + + # define grammar of a greeting + greet = Word(alphas) + "," + Word(alphas) + "!" + + hello = "Hello, World!" + print (hello, "->", greet.parseString(hello)) + +The program outputs the following:: + + Hello, World! -> ['Hello', ',', 'World', '!'] + +The Python representation of the grammar is quite readable, owing to the self-explanatory +class names, and the use of '+', '|' and '^' operators. + +The L{ParseResults} object returned from L{ParserElement.parseString<ParserElement.parseString>} can be accessed as a nested list, a dictionary, or an +object with named attributes. + +The pyparsing module handles some of the problems that are typically vexing when writing text parsers: + - extra or missing whitespace (the above program will also handle "Hello,World!", "Hello , World !", etc.) + - quoted strings + - embedded comments +""" + +__version__ = "2.1.10" +__versionTime__ = "07 Oct 2016 01:31 UTC" +__author__ = "Paul McGuire <ptmcg@users.sourceforge.net>" + +import string +from weakref import ref as wkref +import copy +import sys +import warnings +import re +import sre_constants +import collections +import pprint +import traceback +import types +from datetime import datetime + +try: + from _thread import RLock +except ImportError: + from threading import RLock + +try: + from collections import OrderedDict as _OrderedDict +except ImportError: + try: + from ordereddict import OrderedDict as _OrderedDict + except ImportError: + _OrderedDict = None + +#~ sys.stderr.write( "testing pyparsing module, version %s, %s\n" % (__version__,__versionTime__ ) ) + +__all__ = [ +'And', 'CaselessKeyword', 'CaselessLiteral', 'CharsNotIn', 'Combine', 'Dict', 'Each', 'Empty', +'FollowedBy', 'Forward', 'GoToColumn', 'Group', 'Keyword', 'LineEnd', 'LineStart', 'Literal', +'MatchFirst', 'NoMatch', 'NotAny', 'OneOrMore', 'OnlyOnce', 'Optional', 'Or', +'ParseBaseException', 'ParseElementEnhance', 'ParseException', 'ParseExpression', 'ParseFatalException', +'ParseResults', 'ParseSyntaxException', 'ParserElement', 'QuotedString', 'RecursiveGrammarException', +'Regex', 'SkipTo', 'StringEnd', 'StringStart', 'Suppress', 'Token', 'TokenConverter', +'White', 'Word', 'WordEnd', 'WordStart', 'ZeroOrMore', +'alphanums', 'alphas', 'alphas8bit', 'anyCloseTag', 'anyOpenTag', 'cStyleComment', 'col', +'commaSeparatedList', 'commonHTMLEntity', 'countedArray', 'cppStyleComment', 'dblQuotedString', +'dblSlashComment', 'delimitedList', 'dictOf', 'downcaseTokens', 'empty', 'hexnums', +'htmlComment', 'javaStyleComment', 'line', 'lineEnd', 'lineStart', 'lineno', +'makeHTMLTags', 'makeXMLTags', 'matchOnlyAtCol', 'matchPreviousExpr', 'matchPreviousLiteral', +'nestedExpr', 'nullDebugAction', 'nums', 'oneOf', 'opAssoc', 'operatorPrecedence', 'printables', +'punc8bit', 'pythonStyleComment', 'quotedString', 'removeQuotes', 'replaceHTMLEntity', +'replaceWith', 'restOfLine', 'sglQuotedString', 'srange', 'stringEnd', +'stringStart', 'traceParseAction', 'unicodeString', 'upcaseTokens', 'withAttribute', +'indentedBlock', 'originalTextFor', 'ungroup', 'infixNotation','locatedExpr', 'withClass', +'CloseMatch', 'tokenMap', 'pyparsing_common', +] + +system_version = tuple(sys.version_info)[:3] +PY_3 = system_version[0] == 3 +if PY_3: + _MAX_INT = sys.maxsize + basestring = str + unichr = chr + _ustr = str + + # build list of single arg builtins, that can be used as parse actions + singleArgBuiltins = [sum, len, sorted, reversed, list, tuple, set, any, all, min, max] + +else: + _MAX_INT = sys.maxint + range = xrange + + def _ustr(obj): + """Drop-in replacement for str(obj) that tries to be Unicode friendly. It first tries + str(obj). If that fails with a UnicodeEncodeError, then it tries unicode(obj). It + then < returns the unicode object | encodes it with the default encoding | ... >. + """ + if isinstance(obj,unicode): + return obj + + try: + # If this works, then _ustr(obj) has the same behaviour as str(obj), so + # it won't break any existing code. + return str(obj) + + except UnicodeEncodeError: + # Else encode it + ret = unicode(obj).encode(sys.getdefaultencoding(), 'xmlcharrefreplace') + xmlcharref = Regex(r'&#\d+;') + xmlcharref.setParseAction(lambda t: '\\u' + hex(int(t[0][2:-1]))[2:]) + return xmlcharref.transformString(ret) + + # build list of single arg builtins, tolerant of Python version, that can be used as parse actions + singleArgBuiltins = [] + import __builtin__ + for fname in "sum len sorted reversed list tuple set any all min max".split(): + try: + singleArgBuiltins.append(getattr(__builtin__,fname)) + except AttributeError: + continue + +_generatorType = type((y for y in range(1))) + +def _xml_escape(data): + """Escape &, <, >, ", ', etc. in a string of data.""" + + # ampersand must be replaced first + from_symbols = '&><"\'' + to_symbols = ('&'+s+';' for s in "amp gt lt quot apos".split()) + for from_,to_ in zip(from_symbols, to_symbols): + data = data.replace(from_, to_) + return data + +class _Constants(object): + pass + +alphas = string.ascii_uppercase + string.ascii_lowercase +nums = "0123456789" +hexnums = nums + "ABCDEFabcdef" +alphanums = alphas + nums +_bslash = chr(92) +printables = "".join(c for c in string.printable if c not in string.whitespace) + +class ParseBaseException(Exception): + """base exception class for all parsing runtime exceptions""" + # Performance tuning: we construct a *lot* of these, so keep this + # constructor as small and fast as possible + def __init__( self, pstr, loc=0, msg=None, elem=None ): + self.loc = loc + if msg is None: + self.msg = pstr + self.pstr = "" + else: + self.msg = msg + self.pstr = pstr + self.parserElement = elem + self.args = (pstr, loc, msg) + + @classmethod + def _from_exception(cls, pe): + """ + internal factory method to simplify creating one type of ParseException + from another - avoids having __init__ signature conflicts among subclasses + """ + return cls(pe.pstr, pe.loc, pe.msg, pe.parserElement) + + def __getattr__( self, aname ): + """supported attributes by name are: + - lineno - returns the line number of the exception text + - col - returns the column number of the exception text + - line - returns the line containing the exception text + """ + if( aname == "lineno" ): + return lineno( self.loc, self.pstr ) + elif( aname in ("col", "column") ): + return col( self.loc, self.pstr ) + elif( aname == "line" ): + return line( self.loc, self.pstr ) + else: + raise AttributeError(aname) + + def __str__( self ): + return "%s (at char %d), (line:%d, col:%d)" % \ + ( self.msg, self.loc, self.lineno, self.column ) + def __repr__( self ): + return _ustr(self) + def markInputline( self, markerString = ">!<" ): + """Extracts the exception line from the input string, and marks + the location of the exception with a special symbol. + """ + line_str = self.line + line_column = self.column - 1 + if markerString: + line_str = "".join((line_str[:line_column], + markerString, line_str[line_column:])) + return line_str.strip() + def __dir__(self): + return "lineno col line".split() + dir(type(self)) + +class ParseException(ParseBaseException): + """ + Exception thrown when parse expressions don't match class; + supported attributes by name are: + - lineno - returns the line number of the exception text + - col - returns the column number of the exception text + - line - returns the line containing the exception text + + Example:: + try: + Word(nums).setName("integer").parseString("ABC") + except ParseException as pe: + print(pe) + print("column: {}".format(pe.col)) + + prints:: + Expected integer (at char 0), (line:1, col:1) + column: 1 + """ + pass + +class ParseFatalException(ParseBaseException): + """user-throwable exception thrown when inconsistent parse content + is found; stops all parsing immediately""" + pass + +class ParseSyntaxException(ParseFatalException): + """just like L{ParseFatalException}, but thrown internally when an + L{ErrorStop<And._ErrorStop>} ('-' operator) indicates that parsing is to stop + immediately because an unbacktrackable syntax error has been found""" + pass + +#~ class ReparseException(ParseBaseException): + #~ """Experimental class - parse actions can raise this exception to cause + #~ pyparsing to reparse the input string: + #~ - with a modified input string, and/or + #~ - with a modified start location + #~ Set the values of the ReparseException in the constructor, and raise the + #~ exception in a parse action to cause pyparsing to use the new string/location. + #~ Setting the values as None causes no change to be made. + #~ """ + #~ def __init_( self, newstring, restartLoc ): + #~ self.newParseText = newstring + #~ self.reparseLoc = restartLoc + +class RecursiveGrammarException(Exception): + """exception thrown by L{ParserElement.validate} if the grammar could be improperly recursive""" + def __init__( self, parseElementList ): + self.parseElementTrace = parseElementList + + def __str__( self ): + return "RecursiveGrammarException: %s" % self.parseElementTrace + +class _ParseResultsWithOffset(object): + def __init__(self,p1,p2): + self.tup = (p1,p2) + def __getitem__(self,i): + return self.tup[i] + def __repr__(self): + return repr(self.tup[0]) + def setOffset(self,i): + self.tup = (self.tup[0],i) + +class ParseResults(object): + """ + Structured parse results, to provide multiple means of access to the parsed data: + - as a list (C{len(results)}) + - by list index (C{results[0], results[1]}, etc.) + - by attribute (C{results.<resultsName>} - see L{ParserElement.setResultsName}) + + Example:: + integer = Word(nums) + date_str = (integer.setResultsName("year") + '/' + + integer.setResultsName("month") + '/' + + integer.setResultsName("day")) + # equivalent form: + # date_str = integer("year") + '/' + integer("month") + '/' + integer("day") + + # parseString returns a ParseResults object + result = date_str.parseString("1999/12/31") + + def test(s, fn=repr): + print("%s -> %s" % (s, fn(eval(s)))) + test("list(result)") + test("result[0]") + test("result['month']") + test("result.day") + test("'month' in result") + test("'minutes' in result") + test("result.dump()", str) + prints:: + list(result) -> ['1999', '/', '12', '/', '31'] + result[0] -> '1999' + result['month'] -> '12' + result.day -> '31' + 'month' in result -> True + 'minutes' in result -> False + result.dump() -> ['1999', '/', '12', '/', '31'] + - day: 31 + - month: 12 + - year: 1999 + """ + def __new__(cls, toklist=None, name=None, asList=True, modal=True ): + if isinstance(toklist, cls): + return toklist + retobj = object.__new__(cls) + retobj.__doinit = True + return retobj + + # Performance tuning: we construct a *lot* of these, so keep this + # constructor as small and fast as possible + def __init__( self, toklist=None, name=None, asList=True, modal=True, isinstance=isinstance ): + if self.__doinit: + self.__doinit = False + self.__name = None + self.__parent = None + self.__accumNames = {} + self.__asList = asList + self.__modal = modal + if toklist is None: + toklist = [] + if isinstance(toklist, list): + self.__toklist = toklist[:] + elif isinstance(toklist, _generatorType): + self.__toklist = list(toklist) + else: + self.__toklist = [toklist] + self.__tokdict = dict() + + if name is not None and name: + if not modal: + self.__accumNames[name] = 0 + if isinstance(name,int): + name = _ustr(name) # will always return a str, but use _ustr for consistency + self.__name = name + if not (isinstance(toklist, (type(None), basestring, list)) and toklist in (None,'',[])): + if isinstance(toklist,basestring): + toklist = [ toklist ] + if asList: + if isinstance(toklist,ParseResults): + self[name] = _ParseResultsWithOffset(toklist.copy(),0) + else: + self[name] = _ParseResultsWithOffset(ParseResults(toklist[0]),0) + self[name].__name = name + else: + try: + self[name] = toklist[0] + except (KeyError,TypeError,IndexError): + self[name] = toklist + + def __getitem__( self, i ): + if isinstance( i, (int,slice) ): + return self.__toklist[i] + else: + if i not in self.__accumNames: + return self.__tokdict[i][-1][0] + else: + return ParseResults([ v[0] for v in self.__tokdict[i] ]) + + def __setitem__( self, k, v, isinstance=isinstance ): + if isinstance(v,_ParseResultsWithOffset): + self.__tokdict[k] = self.__tokdict.get(k,list()) + [v] + sub = v[0] + elif isinstance(k,(int,slice)): + self.__toklist[k] = v + sub = v + else: + self.__tokdict[k] = self.__tokdict.get(k,list()) + [_ParseResultsWithOffset(v,0)] + sub = v + if isinstance(sub,ParseResults): + sub.__parent = wkref(self) + + def __delitem__( self, i ): + if isinstance(i,(int,slice)): + mylen = len( self.__toklist ) + del self.__toklist[i] + + # convert int to slice + if isinstance(i, int): + if i < 0: + i += mylen + i = slice(i, i+1) + # get removed indices + removed = list(range(*i.indices(mylen))) + removed.reverse() + # fixup indices in token dictionary + for name,occurrences in self.__tokdict.items(): + for j in removed: + for k, (value, position) in enumerate(occurrences): + occurrences[k] = _ParseResultsWithOffset(value, position - (position > j)) + else: + del self.__tokdict[i] + + def __contains__( self, k ): + return k in self.__tokdict + + def __len__( self ): return len( self.__toklist ) + def __bool__(self): return ( not not self.__toklist ) + __nonzero__ = __bool__ + def __iter__( self ): return iter( self.__toklist ) + def __reversed__( self ): return iter( self.__toklist[::-1] ) + def _iterkeys( self ): + if hasattr(self.__tokdict, "iterkeys"): + return self.__tokdict.iterkeys() + else: + return iter(self.__tokdict) + + def _itervalues( self ): + return (self[k] for k in self._iterkeys()) + + def _iteritems( self ): + return ((k, self[k]) for k in self._iterkeys()) + + if PY_3: + keys = _iterkeys + """Returns an iterator of all named result keys (Python 3.x only).""" + + values = _itervalues + """Returns an iterator of all named result values (Python 3.x only).""" + + items = _iteritems + """Returns an iterator of all named result key-value tuples (Python 3.x only).""" + + else: + iterkeys = _iterkeys + """Returns an iterator of all named result keys (Python 2.x only).""" + + itervalues = _itervalues + """Returns an iterator of all named result values (Python 2.x only).""" + + iteritems = _iteritems + """Returns an iterator of all named result key-value tuples (Python 2.x only).""" + + def keys( self ): + """Returns all named result keys (as a list in Python 2.x, as an iterator in Python 3.x).""" + return list(self.iterkeys()) + + def values( self ): + """Returns all named result values (as a list in Python 2.x, as an iterator in Python 3.x).""" + return list(self.itervalues()) + + def items( self ): + """Returns all named result key-values (as a list of tuples in Python 2.x, as an iterator in Python 3.x).""" + return list(self.iteritems()) + + def haskeys( self ): + """Since keys() returns an iterator, this method is helpful in bypassing + code that looks for the existence of any defined results names.""" + return bool(self.__tokdict) + + def pop( self, *args, **kwargs): + """ + Removes and returns item at specified index (default=C{last}). + Supports both C{list} and C{dict} semantics for C{pop()}. If passed no + argument or an integer argument, it will use C{list} semantics + and pop tokens from the list of parsed tokens. If passed a + non-integer argument (most likely a string), it will use C{dict} + semantics and pop the corresponding value from any defined + results names. A second default return value argument is + supported, just as in C{dict.pop()}. + + Example:: + def remove_first(tokens): + tokens.pop(0) + print(OneOrMore(Word(nums)).parseString("0 123 321")) # -> ['0', '123', '321'] + print(OneOrMore(Word(nums)).addParseAction(remove_first).parseString("0 123 321")) # -> ['123', '321'] + + label = Word(alphas) + patt = label("LABEL") + OneOrMore(Word(nums)) + print(patt.parseString("AAB 123 321").dump()) + + # Use pop() in a parse action to remove named result (note that corresponding value is not + # removed from list form of results) + def remove_LABEL(tokens): + tokens.pop("LABEL") + return tokens + patt.addParseAction(remove_LABEL) + print(patt.parseString("AAB 123 321").dump()) + prints:: + ['AAB', '123', '321'] + - LABEL: AAB + + ['AAB', '123', '321'] + """ + if not args: + args = [-1] + for k,v in kwargs.items(): + if k == 'default': + args = (args[0], v) + else: + raise TypeError("pop() got an unexpected keyword argument '%s'" % k) + if (isinstance(args[0], int) or + len(args) == 1 or + args[0] in self): + index = args[0] + ret = self[index] + del self[index] + return ret + else: + defaultvalue = args[1] + return defaultvalue + + def get(self, key, defaultValue=None): + """ + Returns named result matching the given key, or if there is no + such name, then returns the given C{defaultValue} or C{None} if no + C{defaultValue} is specified. + + Similar to C{dict.get()}. + + Example:: + integer = Word(nums) + date_str = integer("year") + '/' + integer("month") + '/' + integer("day") + + result = date_str.parseString("1999/12/31") + print(result.get("year")) # -> '1999' + print(result.get("hour", "not specified")) # -> 'not specified' + print(result.get("hour")) # -> None + """ + if key in self: + return self[key] + else: + return defaultValue + + def insert( self, index, insStr ): + """ + Inserts new element at location index in the list of parsed tokens. + + Similar to C{list.insert()}. + + Example:: + print(OneOrMore(Word(nums)).parseString("0 123 321")) # -> ['0', '123', '321'] + + # use a parse action to insert the parse location in the front of the parsed results + def insert_locn(locn, tokens): + tokens.insert(0, locn) + print(OneOrMore(Word(nums)).addParseAction(insert_locn).parseString("0 123 321")) # -> [0, '0', '123', '321'] + """ + self.__toklist.insert(index, insStr) + # fixup indices in token dictionary + for name,occurrences in self.__tokdict.items(): + for k, (value, position) in enumerate(occurrences): + occurrences[k] = _ParseResultsWithOffset(value, position + (position > index)) + + def append( self, item ): + """ + Add single element to end of ParseResults list of elements. + + Example:: + print(OneOrMore(Word(nums)).parseString("0 123 321")) # -> ['0', '123', '321'] + + # use a parse action to compute the sum of the parsed integers, and add it to the end + def append_sum(tokens): + tokens.append(sum(map(int, tokens))) + print(OneOrMore(Word(nums)).addParseAction(append_sum).parseString("0 123 321")) # -> ['0', '123', '321', 444] + """ + self.__toklist.append(item) + + def extend( self, itemseq ): + """ + Add sequence of elements to end of ParseResults list of elements. + + Example:: + patt = OneOrMore(Word(alphas)) + + # use a parse action to append the reverse of the matched strings, to make a palindrome + def make_palindrome(tokens): + tokens.extend(reversed([t[::-1] for t in tokens])) + return ''.join(tokens) + print(patt.addParseAction(make_palindrome).parseString("lskdj sdlkjf lksd")) # -> 'lskdjsdlkjflksddsklfjkldsjdksl' + """ + if isinstance(itemseq, ParseResults): + self += itemseq + else: + self.__toklist.extend(itemseq) + + def clear( self ): + """ + Clear all elements and results names. + """ + del self.__toklist[:] + self.__tokdict.clear() + + def __getattr__( self, name ): + try: + return self[name] + except KeyError: + return "" + + if name in self.__tokdict: + if name not in self.__accumNames: + return self.__tokdict[name][-1][0] + else: + return ParseResults([ v[0] for v in self.__tokdict[name] ]) + else: + return "" + + def __add__( self, other ): + ret = self.copy() + ret += other + return ret + + def __iadd__( self, other ): + if other.__tokdict: + offset = len(self.__toklist) + addoffset = lambda a: offset if a<0 else a+offset + otheritems = other.__tokdict.items() + otherdictitems = [(k, _ParseResultsWithOffset(v[0],addoffset(v[1])) ) + for (k,vlist) in otheritems for v in vlist] + for k,v in otherdictitems: + self[k] = v + if isinstance(v[0],ParseResults): + v[0].__parent = wkref(self) + + self.__toklist += other.__toklist + self.__accumNames.update( other.__accumNames ) + return self + + def __radd__(self, other): + if isinstance(other,int) and other == 0: + # useful for merging many ParseResults using sum() builtin + return self.copy() + else: + # this may raise a TypeError - so be it + return other + self + + def __repr__( self ): + return "(%s, %s)" % ( repr( self.__toklist ), repr( self.__tokdict ) ) + + def __str__( self ): + return '[' + ', '.join(_ustr(i) if isinstance(i, ParseResults) else repr(i) for i in self.__toklist) + ']' + + def _asStringList( self, sep='' ): + out = [] + for item in self.__toklist: + if out and sep: + out.append(sep) + if isinstance( item, ParseResults ): + out += item._asStringList() + else: + out.append( _ustr(item) ) + return out + + def asList( self ): + """ + Returns the parse results as a nested list of matching tokens, all converted to strings. + + Example:: + patt = OneOrMore(Word(alphas)) + result = patt.parseString("sldkj lsdkj sldkj") + # even though the result prints in string-like form, it is actually a pyparsing ParseResults + print(type(result), result) # -> <class 'pyparsing.ParseResults'> ['sldkj', 'lsdkj', 'sldkj'] + + # Use asList() to create an actual list + result_list = result.asList() + print(type(result_list), result_list) # -> <class 'list'> ['sldkj', 'lsdkj', 'sldkj'] + """ + return [res.asList() if isinstance(res,ParseResults) else res for res in self.__toklist] + + def asDict( self ): + """ + Returns the named parse results as a nested dictionary. + + Example:: + integer = Word(nums) + date_str = integer("year") + '/' + integer("month") + '/' + integer("day") + + result = date_str.parseString('12/31/1999') + print(type(result), repr(result)) # -> <class 'pyparsing.ParseResults'> (['12', '/', '31', '/', '1999'], {'day': [('1999', 4)], 'year': [('12', 0)], 'month': [('31', 2)]}) + + result_dict = result.asDict() + print(type(result_dict), repr(result_dict)) # -> <class 'dict'> {'day': '1999', 'year': '12', 'month': '31'} + + # even though a ParseResults supports dict-like access, sometime you just need to have a dict + import json + print(json.dumps(result)) # -> Exception: TypeError: ... is not JSON serializable + print(json.dumps(result.asDict())) # -> {"month": "31", "day": "1999", "year": "12"} + """ + if PY_3: + item_fn = self.items + else: + item_fn = self.iteritems + + def toItem(obj): + if isinstance(obj, ParseResults): + if obj.haskeys(): + return obj.asDict() + else: + return [toItem(v) for v in obj] + else: + return obj + + return dict((k,toItem(v)) for k,v in item_fn()) + + def copy( self ): + """ + Returns a new copy of a C{ParseResults} object. + """ + ret = ParseResults( self.__toklist ) + ret.__tokdict = self.__tokdict.copy() + ret.__parent = self.__parent + ret.__accumNames.update( self.__accumNames ) + ret.__name = self.__name + return ret + + def asXML( self, doctag=None, namedItemsOnly=False, indent="", formatted=True ): + """ + (Deprecated) Returns the parse results as XML. Tags are created for tokens and lists that have defined results names. + """ + nl = "\n" + out = [] + namedItems = dict((v[1],k) for (k,vlist) in self.__tokdict.items() + for v in vlist) + nextLevelIndent = indent + " " + + # collapse out indents if formatting is not desired + if not formatted: + indent = "" + nextLevelIndent = "" + nl = "" + + selfTag = None + if doctag is not None: + selfTag = doctag + else: + if self.__name: + selfTag = self.__name + + if not selfTag: + if namedItemsOnly: + return "" + else: + selfTag = "ITEM" + + out += [ nl, indent, "<", selfTag, ">" ] + + for i,res in enumerate(self.__toklist): + if isinstance(res,ParseResults): + if i in namedItems: + out += [ res.asXML(namedItems[i], + namedItemsOnly and doctag is None, + nextLevelIndent, + formatted)] + else: + out += [ res.asXML(None, + namedItemsOnly and doctag is None, + nextLevelIndent, + formatted)] + else: + # individual token, see if there is a name for it + resTag = None + if i in namedItems: + resTag = namedItems[i] + if not resTag: + if namedItemsOnly: + continue + else: + resTag = "ITEM" + xmlBodyText = _xml_escape(_ustr(res)) + out += [ nl, nextLevelIndent, "<", resTag, ">", + xmlBodyText, + "</", resTag, ">" ] + + out += [ nl, indent, "</", selfTag, ">" ] + return "".join(out) + + def __lookup(self,sub): + for k,vlist in self.__tokdict.items(): + for v,loc in vlist: + if sub is v: + return k + return None + + def getName(self): + r""" + Returns the results name for this token expression. Useful when several + different expressions might match at a particular location. + + Example:: + integer = Word(nums) + ssn_expr = Regex(r"\d\d\d-\d\d-\d\d\d\d") + house_number_expr = Suppress('#') + Word(nums, alphanums) + user_data = (Group(house_number_expr)("house_number") + | Group(ssn_expr)("ssn") + | Group(integer)("age")) + user_info = OneOrMore(user_data) + + result = user_info.parseString("22 111-22-3333 #221B") + for item in result: + print(item.getName(), ':', item[0]) + prints:: + age : 22 + ssn : 111-22-3333 + house_number : 221B + """ + if self.__name: + return self.__name + elif self.__parent: + par = self.__parent() + if par: + return par.__lookup(self) + else: + return None + elif (len(self) == 1 and + len(self.__tokdict) == 1 and + next(iter(self.__tokdict.values()))[0][1] in (0,-1)): + return next(iter(self.__tokdict.keys())) + else: + return None + + def dump(self, indent='', depth=0, full=True): + """ + Diagnostic method for listing out the contents of a C{ParseResults}. + Accepts an optional C{indent} argument so that this string can be embedded + in a nested display of other data. + + Example:: + integer = Word(nums) + date_str = integer("year") + '/' + integer("month") + '/' + integer("day") + + result = date_str.parseString('12/31/1999') + print(result.dump()) + prints:: + ['12', '/', '31', '/', '1999'] + - day: 1999 + - month: 31 + - year: 12 + """ + out = [] + NL = '\n' + out.append( indent+_ustr(self.asList()) ) + if full: + if self.haskeys(): + items = sorted((str(k), v) for k,v in self.items()) + for k,v in items: + if out: + out.append(NL) + out.append( "%s%s- %s: " % (indent,(' '*depth), k) ) + if isinstance(v,ParseResults): + if v: + out.append( v.dump(indent,depth+1) ) + else: + out.append(_ustr(v)) + else: + out.append(repr(v)) + elif any(isinstance(vv,ParseResults) for vv in self): + v = self + for i,vv in enumerate(v): + if isinstance(vv,ParseResults): + out.append("\n%s%s[%d]:\n%s%s%s" % (indent,(' '*(depth)),i,indent,(' '*(depth+1)),vv.dump(indent,depth+1) )) + else: + out.append("\n%s%s[%d]:\n%s%s%s" % (indent,(' '*(depth)),i,indent,(' '*(depth+1)),_ustr(vv))) + + return "".join(out) + + def pprint(self, *args, **kwargs): + """ + Pretty-printer for parsed results as a list, using the C{pprint} module. + Accepts additional positional or keyword args as defined for the + C{pprint.pprint} method. (U{http://docs.python.org/3/library/pprint.html#pprint.pprint}) + + Example:: + ident = Word(alphas, alphanums) + num = Word(nums) + func = Forward() + term = ident | num | Group('(' + func + ')') + func <<= ident + Group(Optional(delimitedList(term))) + result = func.parseString("fna a,b,(fnb c,d,200),100") + result.pprint(width=40) + prints:: + ['fna', + ['a', + 'b', + ['(', 'fnb', ['c', 'd', '200'], ')'], + '100']] + """ + pprint.pprint(self.asList(), *args, **kwargs) + + # add support for pickle protocol + def __getstate__(self): + return ( self.__toklist, + ( self.__tokdict.copy(), + self.__parent is not None and self.__parent() or None, + self.__accumNames, + self.__name ) ) + + def __setstate__(self,state): + self.__toklist = state[0] + (self.__tokdict, + par, + inAccumNames, + self.__name) = state[1] + self.__accumNames = {} + self.__accumNames.update(inAccumNames) + if par is not None: + self.__parent = wkref(par) + else: + self.__parent = None + + def __getnewargs__(self): + return self.__toklist, self.__name, self.__asList, self.__modal + + def __dir__(self): + return (dir(type(self)) + list(self.keys())) + +collections.MutableMapping.register(ParseResults) + +def col (loc,strg): + """Returns current column within a string, counting newlines as line separators. + The first column is number 1. + + Note: the default parsing behavior is to expand tabs in the input string + before starting the parsing process. See L{I{ParserElement.parseString}<ParserElement.parseString>} for more information + on parsing strings containing C{<TAB>}s, and suggested methods to maintain a + consistent view of the parsed string, the parse location, and line and column + positions within the parsed string. + """ + s = strg + return 1 if 0<loc<len(s) and s[loc-1] == '\n' else loc - s.rfind("\n", 0, loc) + +def lineno(loc,strg): + """Returns current line number within a string, counting newlines as line separators. + The first line is number 1. + + Note: the default parsing behavior is to expand tabs in the input string + before starting the parsing process. See L{I{ParserElement.parseString}<ParserElement.parseString>} for more information + on parsing strings containing C{<TAB>}s, and suggested methods to maintain a + consistent view of the parsed string, the parse location, and line and column + positions within the parsed string. + """ + return strg.count("\n",0,loc) + 1 + +def line( loc, strg ): + """Returns the line of text containing loc within a string, counting newlines as line separators. + """ + lastCR = strg.rfind("\n", 0, loc) + nextCR = strg.find("\n", loc) + if nextCR >= 0: + return strg[lastCR+1:nextCR] + else: + return strg[lastCR+1:] + +def _defaultStartDebugAction( instring, loc, expr ): + print (("Match " + _ustr(expr) + " at loc " + _ustr(loc) + "(%d,%d)" % ( lineno(loc,instring), col(loc,instring) ))) + +def _defaultSuccessDebugAction( instring, startloc, endloc, expr, toks ): + print ("Matched " + _ustr(expr) + " -> " + str(toks.asList())) + +def _defaultExceptionDebugAction( instring, loc, expr, exc ): + print ("Exception raised:" + _ustr(exc)) + +def nullDebugAction(*args): + """'Do-nothing' debug action, to suppress debugging output during parsing.""" + pass + +# Only works on Python 3.x - nonlocal is toxic to Python 2 installs +#~ 'decorator to trim function calls to match the arity of the target' +#~ def _trim_arity(func, maxargs=3): + #~ if func in singleArgBuiltins: + #~ return lambda s,l,t: func(t) + #~ limit = 0 + #~ foundArity = False + #~ def wrapper(*args): + #~ nonlocal limit,foundArity + #~ while 1: + #~ try: + #~ ret = func(*args[limit:]) + #~ foundArity = True + #~ return ret + #~ except TypeError: + #~ if limit == maxargs or foundArity: + #~ raise + #~ limit += 1 + #~ continue + #~ return wrapper + +# this version is Python 2.x-3.x cross-compatible +'decorator to trim function calls to match the arity of the target' +def _trim_arity(func, maxargs=2): + if func in singleArgBuiltins: + return lambda s,l,t: func(t) + limit = [0] + foundArity = [False] + + # traceback return data structure changed in Py3.5 - normalize back to plain tuples + if system_version[:2] >= (3,5): + def extract_stack(limit=0): + # special handling for Python 3.5.0 - extra deep call stack by 1 + offset = -3 if system_version == (3,5,0) else -2 + frame_summary = traceback.extract_stack(limit=-offset+limit-1)[offset] + return [(frame_summary.filename, frame_summary.lineno)] + def extract_tb(tb, limit=0): + frames = traceback.extract_tb(tb, limit=limit) + frame_summary = frames[-1] + return [(frame_summary.filename, frame_summary.lineno)] + else: + extract_stack = traceback.extract_stack + extract_tb = traceback.extract_tb + + # synthesize what would be returned by traceback.extract_stack at the call to + # user's parse action 'func', so that we don't incur call penalty at parse time + + LINE_DIFF = 6 + # IF ANY CODE CHANGES, EVEN JUST COMMENTS OR BLANK LINES, BETWEEN THE NEXT LINE AND + # THE CALL TO FUNC INSIDE WRAPPER, LINE_DIFF MUST BE MODIFIED!!!! + this_line = extract_stack(limit=2)[-1] + pa_call_line_synth = (this_line[0], this_line[1]+LINE_DIFF) + + def wrapper(*args): + while 1: + try: + ret = func(*args[limit[0]:]) + foundArity[0] = True + return ret + except TypeError: + # re-raise TypeErrors if they did not come from our arity testing + if foundArity[0]: + raise + else: + try: + tb = sys.exc_info()[-1] + if not extract_tb(tb, limit=2)[-1][:2] == pa_call_line_synth: + raise + finally: + del tb + + if limit[0] <= maxargs: + limit[0] += 1 + continue + raise + + # copy func name to wrapper for sensible debug output + func_name = "<parse action>" + try: + func_name = getattr(func, '__name__', + getattr(func, '__class__').__name__) + except Exception: + func_name = str(func) + wrapper.__name__ = func_name + + return wrapper + +class ParserElement(object): + """Abstract base level parser element class.""" + DEFAULT_WHITE_CHARS = " \n\t\r" + verbose_stacktrace = False + + @staticmethod + def setDefaultWhitespaceChars( chars ): + r""" + Overrides the default whitespace chars + + Example:: + # default whitespace chars are space, <TAB> and newline + OneOrMore(Word(alphas)).parseString("abc def\nghi jkl") # -> ['abc', 'def', 'ghi', 'jkl'] + + # change to just treat newline as significant + ParserElement.setDefaultWhitespaceChars(" \t") + OneOrMore(Word(alphas)).parseString("abc def\nghi jkl") # -> ['abc', 'def'] + """ + ParserElement.DEFAULT_WHITE_CHARS = chars + + @staticmethod + def inlineLiteralsUsing(cls): + """ + Set class to be used for inclusion of string literals into a parser. + + Example:: + # default literal class used is Literal + integer = Word(nums) + date_str = integer("year") + '/' + integer("month") + '/' + integer("day") + + date_str.parseString("1999/12/31") # -> ['1999', '/', '12', '/', '31'] + + + # change to Suppress + ParserElement.inlineLiteralsUsing(Suppress) + date_str = integer("year") + '/' + integer("month") + '/' + integer("day") + + date_str.parseString("1999/12/31") # -> ['1999', '12', '31'] + """ + ParserElement._literalStringClass = cls + + def __init__( self, savelist=False ): + self.parseAction = list() + self.failAction = None + #~ self.name = "<unknown>" # don't define self.name, let subclasses try/except upcall + self.strRepr = None + self.resultsName = None + self.saveAsList = savelist + self.skipWhitespace = True + self.whiteChars = ParserElement.DEFAULT_WHITE_CHARS + self.copyDefaultWhiteChars = True + self.mayReturnEmpty = False # used when checking for left-recursion + self.keepTabs = False + self.ignoreExprs = list() + self.debug = False + self.streamlined = False + self.mayIndexError = True # used to optimize exception handling for subclasses that don't advance parse index + self.errmsg = "" + self.modalResults = True # used to mark results names as modal (report only last) or cumulative (list all) + self.debugActions = ( None, None, None ) #custom debug actions + self.re = None + self.callPreparse = True # used to avoid redundant calls to preParse + self.callDuringTry = False + + def copy( self ): + """ + Make a copy of this C{ParserElement}. Useful for defining different parse actions + for the same parsing pattern, using copies of the original parse element. + + Example:: + integer = Word(nums).setParseAction(lambda toks: int(toks[0])) + integerK = integer.copy().addParseAction(lambda toks: toks[0]*1024) + Suppress("K") + integerM = integer.copy().addParseAction(lambda toks: toks[0]*1024*1024) + Suppress("M") + + print(OneOrMore(integerK | integerM | integer).parseString("5K 100 640K 256M")) + prints:: + [5120, 100, 655360, 268435456] + Equivalent form of C{expr.copy()} is just C{expr()}:: + integerM = integer().addParseAction(lambda toks: toks[0]*1024*1024) + Suppress("M") + """ + cpy = copy.copy( self ) + cpy.parseAction = self.parseAction[:] + cpy.ignoreExprs = self.ignoreExprs[:] + if self.copyDefaultWhiteChars: + cpy.whiteChars = ParserElement.DEFAULT_WHITE_CHARS + return cpy + + def setName( self, name ): + """ + Define name for this expression, makes debugging and exception messages clearer. + + Example:: + Word(nums).parseString("ABC") # -> Exception: Expected W:(0123...) (at char 0), (line:1, col:1) + Word(nums).setName("integer").parseString("ABC") # -> Exception: Expected integer (at char 0), (line:1, col:1) + """ + self.name = name + self.errmsg = "Expected " + self.name + if hasattr(self,"exception"): + self.exception.msg = self.errmsg + return self + + def setResultsName( self, name, listAllMatches=False ): + """ + Define name for referencing matching tokens as a nested attribute + of the returned parse results. + NOTE: this returns a *copy* of the original C{ParserElement} object; + this is so that the client can define a basic element, such as an + integer, and reference it in multiple places with different names. + + You can also set results names using the abbreviated syntax, + C{expr("name")} in place of C{expr.setResultsName("name")} - + see L{I{__call__}<__call__>}. + + Example:: + date_str = (integer.setResultsName("year") + '/' + + integer.setResultsName("month") + '/' + + integer.setResultsName("day")) + + # equivalent form: + date_str = integer("year") + '/' + integer("month") + '/' + integer("day") + """ + newself = self.copy() + if name.endswith("*"): + name = name[:-1] + listAllMatches=True + newself.resultsName = name + newself.modalResults = not listAllMatches + return newself + + def setBreak(self,breakFlag = True): + """Method to invoke the Python pdb debugger when this element is + about to be parsed. Set C{breakFlag} to True to enable, False to + disable. + """ + if breakFlag: + _parseMethod = self._parse + def breaker(instring, loc, doActions=True, callPreParse=True): + import pdb + pdb.set_trace() + return _parseMethod( instring, loc, doActions, callPreParse ) + breaker._originalParseMethod = _parseMethod + self._parse = breaker + else: + if hasattr(self._parse,"_originalParseMethod"): + self._parse = self._parse._originalParseMethod + return self + + def setParseAction( self, *fns, **kwargs ): + """ + Define action to perform when successfully matching parse element definition. + Parse action fn is a callable method with 0-3 arguments, called as C{fn(s,loc,toks)}, + C{fn(loc,toks)}, C{fn(toks)}, or just C{fn()}, where: + - s = the original string being parsed (see note below) + - loc = the location of the matching substring + - toks = a list of the matched tokens, packaged as a C{L{ParseResults}} object + If the functions in fns modify the tokens, they can return them as the return + value from fn, and the modified list of tokens will replace the original. + Otherwise, fn does not need to return any value. + + Optional keyword arguments: + - callDuringTry = (default=C{False}) indicate if parse action should be run during lookaheads and alternate testing + + Note: the default parsing behavior is to expand tabs in the input string + before starting the parsing process. See L{I{parseString}<parseString>} for more information + on parsing strings containing C{<TAB>}s, and suggested methods to maintain a + consistent view of the parsed string, the parse location, and line and column + positions within the parsed string. + + Example:: + integer = Word(nums) + date_str = integer + '/' + integer + '/' + integer + + date_str.parseString("1999/12/31") # -> ['1999', '/', '12', '/', '31'] + + # use parse action to convert to ints at parse time + integer = Word(nums).setParseAction(lambda toks: int(toks[0])) + date_str = integer + '/' + integer + '/' + integer + + # note that integer fields are now ints, not strings + date_str.parseString("1999/12/31") # -> [1999, '/', 12, '/', 31] + """ + self.parseAction = list(map(_trim_arity, list(fns))) + self.callDuringTry = kwargs.get("callDuringTry", False) + return self + + def addParseAction( self, *fns, **kwargs ): + """ + Add parse action to expression's list of parse actions. See L{I{setParseAction}<setParseAction>}. + + See examples in L{I{copy}<copy>}. + """ + self.parseAction += list(map(_trim_arity, list(fns))) + self.callDuringTry = self.callDuringTry or kwargs.get("callDuringTry", False) + return self + + def addCondition(self, *fns, **kwargs): + """Add a boolean predicate function to expression's list of parse actions. See + L{I{setParseAction}<setParseAction>} for function call signatures. Unlike C{setParseAction}, + functions passed to C{addCondition} need to return boolean success/fail of the condition. + + Optional keyword arguments: + - message = define a custom message to be used in the raised exception + - fatal = if True, will raise ParseFatalException to stop parsing immediately; otherwise will raise ParseException + + Example:: + integer = Word(nums).setParseAction(lambda toks: int(toks[0])) + year_int = integer.copy() + year_int.addCondition(lambda toks: toks[0] >= 2000, message="Only support years 2000 and later") + date_str = year_int + '/' + integer + '/' + integer + + result = date_str.parseString("1999/12/31") # -> Exception: Only support years 2000 and later (at char 0), (line:1, col:1) + """ + msg = kwargs.get("message", "failed user-defined condition") + exc_type = ParseFatalException if kwargs.get("fatal", False) else ParseException + for fn in fns: + def pa(s,l,t): + if not bool(_trim_arity(fn)(s,l,t)): + raise exc_type(s,l,msg) + self.parseAction.append(pa) + self.callDuringTry = self.callDuringTry or kwargs.get("callDuringTry", False) + return self + + def setFailAction( self, fn ): + """Define action to perform if parsing fails at this expression. + Fail acton fn is a callable function that takes the arguments + C{fn(s,loc,expr,err)} where: + - s = string being parsed + - loc = location where expression match was attempted and failed + - expr = the parse expression that failed + - err = the exception thrown + The function returns no value. It may throw C{L{ParseFatalException}} + if it is desired to stop parsing immediately.""" + self.failAction = fn + return self + + def _skipIgnorables( self, instring, loc ): + exprsFound = True + while exprsFound: + exprsFound = False + for e in self.ignoreExprs: + try: + while 1: + loc,dummy = e._parse( instring, loc ) + exprsFound = True + except ParseException: + pass + return loc + + def preParse( self, instring, loc ): + if self.ignoreExprs: + loc = self._skipIgnorables( instring, loc ) + + if self.skipWhitespace: + wt = self.whiteChars + instrlen = len(instring) + while loc < instrlen and instring[loc] in wt: + loc += 1 + + return loc + + def parseImpl( self, instring, loc, doActions=True ): + return loc, [] + + def postParse( self, instring, loc, tokenlist ): + return tokenlist + + #~ @profile + def _parseNoCache( self, instring, loc, doActions=True, callPreParse=True ): + debugging = ( self.debug ) #and doActions ) + + if debugging or self.failAction: + #~ print ("Match",self,"at loc",loc,"(%d,%d)" % ( lineno(loc,instring), col(loc,instring) )) + if (self.debugActions[0] ): + self.debugActions[0]( instring, loc, self ) + if callPreParse and self.callPreparse: + preloc = self.preParse( instring, loc ) + else: + preloc = loc + tokensStart = preloc + try: + try: + loc,tokens = self.parseImpl( instring, preloc, doActions ) + except IndexError: + raise ParseException( instring, len(instring), self.errmsg, self ) + except ParseBaseException as err: + #~ print ("Exception raised:", err) + if self.debugActions[2]: + self.debugActions[2]( instring, tokensStart, self, err ) + if self.failAction: + self.failAction( instring, tokensStart, self, err ) + raise + else: + if callPreParse and self.callPreparse: + preloc = self.preParse( instring, loc ) + else: + preloc = loc + tokensStart = preloc + if self.mayIndexError or loc >= len(instring): + try: + loc,tokens = self.parseImpl( instring, preloc, doActions ) + except IndexError: + raise ParseException( instring, len(instring), self.errmsg, self ) + else: + loc,tokens = self.parseImpl( instring, preloc, doActions ) + + tokens = self.postParse( instring, loc, tokens ) + + retTokens = ParseResults( tokens, self.resultsName, asList=self.saveAsList, modal=self.modalResults ) + if self.parseAction and (doActions or self.callDuringTry): + if debugging: + try: + for fn in self.parseAction: + tokens = fn( instring, tokensStart, retTokens ) + if tokens is not None: + retTokens = ParseResults( tokens, + self.resultsName, + asList=self.saveAsList and isinstance(tokens,(ParseResults,list)), + modal=self.modalResults ) + except ParseBaseException as err: + #~ print "Exception raised in user parse action:", err + if (self.debugActions[2] ): + self.debugActions[2]( instring, tokensStart, self, err ) + raise + else: + for fn in self.parseAction: + tokens = fn( instring, tokensStart, retTokens ) + if tokens is not None: + retTokens = ParseResults( tokens, + self.resultsName, + asList=self.saveAsList and isinstance(tokens,(ParseResults,list)), + modal=self.modalResults ) + + if debugging: + #~ print ("Matched",self,"->",retTokens.asList()) + if (self.debugActions[1] ): + self.debugActions[1]( instring, tokensStart, loc, self, retTokens ) + + return loc, retTokens + + def tryParse( self, instring, loc ): + try: + return self._parse( instring, loc, doActions=False )[0] + except ParseFatalException: + raise ParseException( instring, loc, self.errmsg, self) + + def canParseNext(self, instring, loc): + try: + self.tryParse(instring, loc) + except (ParseException, IndexError): + return False + else: + return True + + class _UnboundedCache(object): + def __init__(self): + cache = {} + self.not_in_cache = not_in_cache = object() + + def get(self, key): + return cache.get(key, not_in_cache) + + def set(self, key, value): + cache[key] = value + + def clear(self): + cache.clear() + + self.get = types.MethodType(get, self) + self.set = types.MethodType(set, self) + self.clear = types.MethodType(clear, self) + + if _OrderedDict is not None: + class _FifoCache(object): + def __init__(self, size): + self.not_in_cache = not_in_cache = object() + + cache = _OrderedDict() + + def get(self, key): + return cache.get(key, not_in_cache) + + def set(self, key, value): + cache[key] = value + if len(cache) > size: + cache.popitem(False) + + def clear(self): + cache.clear() + + self.get = types.MethodType(get, self) + self.set = types.MethodType(set, self) + self.clear = types.MethodType(clear, self) + + else: + class _FifoCache(object): + def __init__(self, size): + self.not_in_cache = not_in_cache = object() + + cache = {} + key_fifo = collections.deque([], size) + + def get(self, key): + return cache.get(key, not_in_cache) + + def set(self, key, value): + cache[key] = value + if len(cache) > size: + cache.pop(key_fifo.popleft(), None) + key_fifo.append(key) + + def clear(self): + cache.clear() + key_fifo.clear() + + self.get = types.MethodType(get, self) + self.set = types.MethodType(set, self) + self.clear = types.MethodType(clear, self) + + # argument cache for optimizing repeated calls when backtracking through recursive expressions + packrat_cache = {} # this is set later by enabledPackrat(); this is here so that resetCache() doesn't fail + packrat_cache_lock = RLock() + packrat_cache_stats = [0, 0] + + # this method gets repeatedly called during backtracking with the same arguments - + # we can cache these arguments and save ourselves the trouble of re-parsing the contained expression + def _parseCache( self, instring, loc, doActions=True, callPreParse=True ): + HIT, MISS = 0, 1 + lookup = (self, instring, loc, callPreParse, doActions) + with ParserElement.packrat_cache_lock: + cache = ParserElement.packrat_cache + value = cache.get(lookup) + if value is cache.not_in_cache: + ParserElement.packrat_cache_stats[MISS] += 1 + try: + value = self._parseNoCache(instring, loc, doActions, callPreParse) + except ParseBaseException as pe: + # cache a copy of the exception, without the traceback + cache.set(lookup, pe.__class__(*pe.args)) + raise + else: + cache.set(lookup, (value[0], value[1].copy())) + return value + else: + ParserElement.packrat_cache_stats[HIT] += 1 + if isinstance(value, Exception): + raise value + return (value[0], value[1].copy()) + + _parse = _parseNoCache + + @staticmethod + def resetCache(): + ParserElement.packrat_cache.clear() + ParserElement.packrat_cache_stats[:] = [0] * len(ParserElement.packrat_cache_stats) + + _packratEnabled = False + @staticmethod + def enablePackrat(cache_size_limit=128): + """Enables "packrat" parsing, which adds memoizing to the parsing logic. + Repeated parse attempts at the same string location (which happens + often in many complex grammars) can immediately return a cached value, + instead of re-executing parsing/validating code. Memoizing is done of + both valid results and parsing exceptions. + + Parameters: + - cache_size_limit - (default=C{128}) - if an integer value is provided + will limit the size of the packrat cache; if None is passed, then + the cache size will be unbounded; if 0 is passed, the cache will + be effectively disabled. + + This speedup may break existing programs that use parse actions that + have side-effects. For this reason, packrat parsing is disabled when + you first import pyparsing. To activate the packrat feature, your + program must call the class method C{ParserElement.enablePackrat()}. If + your program uses C{psyco} to "compile as you go", you must call + C{enablePackrat} before calling C{psyco.full()}. If you do not do this, + Python will crash. For best results, call C{enablePackrat()} immediately + after importing pyparsing. + + Example:: + import pyparsing + pyparsing.ParserElement.enablePackrat() + """ + if not ParserElement._packratEnabled: + ParserElement._packratEnabled = True + if cache_size_limit is None: + ParserElement.packrat_cache = ParserElement._UnboundedCache() + else: + ParserElement.packrat_cache = ParserElement._FifoCache(cache_size_limit) + ParserElement._parse = ParserElement._parseCache + + def parseString( self, instring, parseAll=False ): + """ + Execute the parse expression with the given string. + This is the main interface to the client code, once the complete + expression has been built. + + If you want the grammar to require that the entire input string be + successfully parsed, then set C{parseAll} to True (equivalent to ending + the grammar with C{L{StringEnd()}}). + + Note: C{parseString} implicitly calls C{expandtabs()} on the input string, + in order to report proper column numbers in parse actions. + If the input string contains tabs and + the grammar uses parse actions that use the C{loc} argument to index into the + string being parsed, you can ensure you have a consistent view of the input + string by: + - calling C{parseWithTabs} on your grammar before calling C{parseString} + (see L{I{parseWithTabs}<parseWithTabs>}) + - define your parse action using the full C{(s,loc,toks)} signature, and + reference the input string using the parse action's C{s} argument + - explictly expand the tabs in your input string before calling + C{parseString} + + Example:: + Word('a').parseString('aaaaabaaa') # -> ['aaaaa'] + Word('a').parseString('aaaaabaaa', parseAll=True) # -> Exception: Expected end of text + """ + ParserElement.resetCache() + if not self.streamlined: + self.streamline() + #~ self.saveAsList = True + for e in self.ignoreExprs: + e.streamline() + if not self.keepTabs: + instring = instring.expandtabs() + try: + loc, tokens = self._parse( instring, 0 ) + if parseAll: + loc = self.preParse( instring, loc ) + se = Empty() + StringEnd() + se._parse( instring, loc ) + except ParseBaseException as exc: + if ParserElement.verbose_stacktrace: + raise + else: + # catch and re-raise exception from here, clears out pyparsing internal stack trace + raise exc + else: + return tokens + + def scanString( self, instring, maxMatches=_MAX_INT, overlap=False ): + """ + Scan the input string for expression matches. Each match will return the + matching tokens, start location, and end location. May be called with optional + C{maxMatches} argument, to clip scanning after 'n' matches are found. If + C{overlap} is specified, then overlapping matches will be reported. + + Note that the start and end locations are reported relative to the string + being parsed. See L{I{parseString}<parseString>} for more information on parsing + strings with embedded tabs. + + Example:: + source = "sldjf123lsdjjkf345sldkjf879lkjsfd987" + print(source) + for tokens,start,end in Word(alphas).scanString(source): + print(' '*start + '^'*(end-start)) + print(' '*start + tokens[0]) + + prints:: + + sldjf123lsdjjkf345sldkjf879lkjsfd987 + ^^^^^ + sldjf + ^^^^^^^ + lsdjjkf + ^^^^^^ + sldkjf + ^^^^^^ + lkjsfd + """ + if not self.streamlined: + self.streamline() + for e in self.ignoreExprs: + e.streamline() + + if not self.keepTabs: + instring = _ustr(instring).expandtabs() + instrlen = len(instring) + loc = 0 + preparseFn = self.preParse + parseFn = self._parse + ParserElement.resetCache() + matches = 0 + try: + while loc <= instrlen and matches < maxMatches: + try: + preloc = preparseFn( instring, loc ) + nextLoc,tokens = parseFn( instring, preloc, callPreParse=False ) + except ParseException: + loc = preloc+1 + else: + if nextLoc > loc: + matches += 1 + yield tokens, preloc, nextLoc + if overlap: + nextloc = preparseFn( instring, loc ) + if nextloc > loc: + loc = nextLoc + else: + loc += 1 + else: + loc = nextLoc + else: + loc = preloc+1 + except ParseBaseException as exc: + if ParserElement.verbose_stacktrace: + raise + else: + # catch and re-raise exception from here, clears out pyparsing internal stack trace + raise exc + + def transformString( self, instring ): + """ + Extension to C{L{scanString}}, to modify matching text with modified tokens that may + be returned from a parse action. To use C{transformString}, define a grammar and + attach a parse action to it that modifies the returned token list. + Invoking C{transformString()} on a target string will then scan for matches, + and replace the matched text patterns according to the logic in the parse + action. C{transformString()} returns the resulting transformed string. + + Example:: + wd = Word(alphas) + wd.setParseAction(lambda toks: toks[0].title()) + + print(wd.transformString("now is the winter of our discontent made glorious summer by this sun of york.")) + Prints:: + Now Is The Winter Of Our Discontent Made Glorious Summer By This Sun Of York. + """ + out = [] + lastE = 0 + # force preservation of <TAB>s, to minimize unwanted transformation of string, and to + # keep string locs straight between transformString and scanString + self.keepTabs = True + try: + for t,s,e in self.scanString( instring ): + out.append( instring[lastE:s] ) + if t: + if isinstance(t,ParseResults): + out += t.asList() + elif isinstance(t,list): + out += t + else: + out.append(t) + lastE = e + out.append(instring[lastE:]) + out = [o for o in out if o] + return "".join(map(_ustr,_flatten(out))) + except ParseBaseException as exc: + if ParserElement.verbose_stacktrace: + raise + else: + # catch and re-raise exception from here, clears out pyparsing internal stack trace + raise exc + + def searchString( self, instring, maxMatches=_MAX_INT ): + """ + Another extension to C{L{scanString}}, simplifying the access to the tokens found + to match the given parse expression. May be called with optional + C{maxMatches} argument, to clip searching after 'n' matches are found. + + Example:: + # a capitalized word starts with an uppercase letter, followed by zero or more lowercase letters + cap_word = Word(alphas.upper(), alphas.lower()) + + print(cap_word.searchString("More than Iron, more than Lead, more than Gold I need Electricity")) + prints:: + ['More', 'Iron', 'Lead', 'Gold', 'I'] + """ + try: + return ParseResults([ t for t,s,e in self.scanString( instring, maxMatches ) ]) + except ParseBaseException as exc: + if ParserElement.verbose_stacktrace: + raise + else: + # catch and re-raise exception from here, clears out pyparsing internal stack trace + raise exc + + def split(self, instring, maxsplit=_MAX_INT, includeSeparators=False): + """ + Generator method to split a string using the given expression as a separator. + May be called with optional C{maxsplit} argument, to limit the number of splits; + and the optional C{includeSeparators} argument (default=C{False}), if the separating + matching text should be included in the split results. + + Example:: + punc = oneOf(list(".,;:/-!?")) + print(list(punc.split("This, this?, this sentence, is badly punctuated!"))) + prints:: + ['This', ' this', '', ' this sentence', ' is badly punctuated', ''] + """ + splits = 0 + last = 0 + for t,s,e in self.scanString(instring, maxMatches=maxsplit): + yield instring[last:s] + if includeSeparators: + yield t[0] + last = e + yield instring[last:] + + def __add__(self, other ): + """ + Implementation of + operator - returns C{L{And}}. Adding strings to a ParserElement + converts them to L{Literal}s by default. + + Example:: + greet = Word(alphas) + "," + Word(alphas) + "!" + hello = "Hello, World!" + print (hello, "->", greet.parseString(hello)) + Prints:: + Hello, World! -> ['Hello', ',', 'World', '!'] + """ + if isinstance( other, basestring ): + other = ParserElement._literalStringClass( other ) + if not isinstance( other, ParserElement ): + warnings.warn("Cannot combine element of type %s with ParserElement" % type(other), + SyntaxWarning, stacklevel=2) + return None + return And( [ self, other ] ) + + def __radd__(self, other ): + """ + Implementation of + operator when left operand is not a C{L{ParserElement}} + """ + if isinstance( other, basestring ): + other = ParserElement._literalStringClass( other ) + if not isinstance( other, ParserElement ): + warnings.warn("Cannot combine element of type %s with ParserElement" % type(other), + SyntaxWarning, stacklevel=2) + return None + return other + self + + def __sub__(self, other): + """ + Implementation of - operator, returns C{L{And}} with error stop + """ + if isinstance( other, basestring ): + other = ParserElement._literalStringClass( other ) + if not isinstance( other, ParserElement ): + warnings.warn("Cannot combine element of type %s with ParserElement" % type(other), + SyntaxWarning, stacklevel=2) + return None + return And( [ self, And._ErrorStop(), other ] ) + + def __rsub__(self, other ): + """ + Implementation of - operator when left operand is not a C{L{ParserElement}} + """ + if isinstance( other, basestring ): + other = ParserElement._literalStringClass( other ) + if not isinstance( other, ParserElement ): + warnings.warn("Cannot combine element of type %s with ParserElement" % type(other), + SyntaxWarning, stacklevel=2) + return None + return other - self + + def __mul__(self,other): + """ + Implementation of * operator, allows use of C{expr * 3} in place of + C{expr + expr + expr}. Expressions may also me multiplied by a 2-integer + tuple, similar to C{{min,max}} multipliers in regular expressions. Tuples + may also include C{None} as in: + - C{expr*(n,None)} or C{expr*(n,)} is equivalent + to C{expr*n + L{ZeroOrMore}(expr)} + (read as "at least n instances of C{expr}") + - C{expr*(None,n)} is equivalent to C{expr*(0,n)} + (read as "0 to n instances of C{expr}") + - C{expr*(None,None)} is equivalent to C{L{ZeroOrMore}(expr)} + - C{expr*(1,None)} is equivalent to C{L{OneOrMore}(expr)} + + Note that C{expr*(None,n)} does not raise an exception if + more than n exprs exist in the input stream; that is, + C{expr*(None,n)} does not enforce a maximum number of expr + occurrences. If this behavior is desired, then write + C{expr*(None,n) + ~expr} + """ + if isinstance(other,int): + minElements, optElements = other,0 + elif isinstance(other,tuple): + other = (other + (None, None))[:2] + if other[0] is None: + other = (0, other[1]) + if isinstance(other[0],int) and other[1] is None: + if other[0] == 0: + return ZeroOrMore(self) + if other[0] == 1: + return OneOrMore(self) + else: + return self*other[0] + ZeroOrMore(self) + elif isinstance(other[0],int) and isinstance(other[1],int): + minElements, optElements = other + optElements -= minElements + else: + raise TypeError("cannot multiply 'ParserElement' and ('%s','%s') objects", type(other[0]),type(other[1])) + else: + raise TypeError("cannot multiply 'ParserElement' and '%s' objects", type(other)) + + if minElements < 0: + raise ValueError("cannot multiply ParserElement by negative value") + if optElements < 0: + raise ValueError("second tuple value must be greater or equal to first tuple value") + if minElements == optElements == 0: + raise ValueError("cannot multiply ParserElement by 0 or (0,0)") + + if (optElements): + def makeOptionalList(n): + if n>1: + return Optional(self + makeOptionalList(n-1)) + else: + return Optional(self) + if minElements: + if minElements == 1: + ret = self + makeOptionalList(optElements) + else: + ret = And([self]*minElements) + makeOptionalList(optElements) + else: + ret = makeOptionalList(optElements) + else: + if minElements == 1: + ret = self + else: + ret = And([self]*minElements) + return ret + + def __rmul__(self, other): + return self.__mul__(other) + + def __or__(self, other ): + """ + Implementation of | operator - returns C{L{MatchFirst}} + """ + if isinstance( other, basestring ): + other = ParserElement._literalStringClass( other ) + if not isinstance( other, ParserElement ): + warnings.warn("Cannot combine element of type %s with ParserElement" % type(other), + SyntaxWarning, stacklevel=2) + return None + return MatchFirst( [ self, other ] ) + + def __ror__(self, other ): + """ + Implementation of | operator when left operand is not a C{L{ParserElement}} + """ + if isinstance( other, basestring ): + other = ParserElement._literalStringClass( other ) + if not isinstance( other, ParserElement ): + warnings.warn("Cannot combine element of type %s with ParserElement" % type(other), + SyntaxWarning, stacklevel=2) + return None + return other | self + + def __xor__(self, other ): + """ + Implementation of ^ operator - returns C{L{Or}} + """ + if isinstance( other, basestring ): + other = ParserElement._literalStringClass( other ) + if not isinstance( other, ParserElement ): + warnings.warn("Cannot combine element of type %s with ParserElement" % type(other), + SyntaxWarning, stacklevel=2) + return None + return Or( [ self, other ] ) + + def __rxor__(self, other ): + """ + Implementation of ^ operator when left operand is not a C{L{ParserElement}} + """ + if isinstance( other, basestring ): + other = ParserElement._literalStringClass( other ) + if not isinstance( other, ParserElement ): + warnings.warn("Cannot combine element of type %s with ParserElement" % type(other), + SyntaxWarning, stacklevel=2) + return None + return other ^ self + + def __and__(self, other ): + """ + Implementation of & operator - returns C{L{Each}} + """ + if isinstance( other, basestring ): + other = ParserElement._literalStringClass( other ) + if not isinstance( other, ParserElement ): + warnings.warn("Cannot combine element of type %s with ParserElement" % type(other), + SyntaxWarning, stacklevel=2) + return None + return Each( [ self, other ] ) + + def __rand__(self, other ): + """ + Implementation of & operator when left operand is not a C{L{ParserElement}} + """ + if isinstance( other, basestring ): + other = ParserElement._literalStringClass( other ) + if not isinstance( other, ParserElement ): + warnings.warn("Cannot combine element of type %s with ParserElement" % type(other), + SyntaxWarning, stacklevel=2) + return None + return other & self + + def __invert__( self ): + """ + Implementation of ~ operator - returns C{L{NotAny}} + """ + return NotAny( self ) + + def __call__(self, name=None): + """ + Shortcut for C{L{setResultsName}}, with C{listAllMatches=False}. + + If C{name} is given with a trailing C{'*'} character, then C{listAllMatches} will be + passed as C{True}. + + If C{name} is omitted, same as calling C{L{copy}}. + + Example:: + # these are equivalent + userdata = Word(alphas).setResultsName("name") + Word(nums+"-").setResultsName("socsecno") + userdata = Word(alphas)("name") + Word(nums+"-")("socsecno") + """ + if name is not None: + return self.setResultsName(name) + else: + return self.copy() + + def suppress( self ): + """ + Suppresses the output of this C{ParserElement}; useful to keep punctuation from + cluttering up returned output. + """ + return Suppress( self ) + + def leaveWhitespace( self ): + """ + Disables the skipping of whitespace before matching the characters in the + C{ParserElement}'s defined pattern. This is normally only used internally by + the pyparsing module, but may be needed in some whitespace-sensitive grammars. + """ + self.skipWhitespace = False + return self + + def setWhitespaceChars( self, chars ): + """ + Overrides the default whitespace chars + """ + self.skipWhitespace = True + self.whiteChars = chars + self.copyDefaultWhiteChars = False + return self + + def parseWithTabs( self ): + """ + Overrides default behavior to expand C{<TAB>}s to spaces before parsing the input string. + Must be called before C{parseString} when the input grammar contains elements that + match C{<TAB>} characters. + """ + self.keepTabs = True + return self + + def ignore( self, other ): + """ + Define expression to be ignored (e.g., comments) while doing pattern + matching; may be called repeatedly, to define multiple comment or other + ignorable patterns. + + Example:: + patt = OneOrMore(Word(alphas)) + patt.parseString('ablaj /* comment */ lskjd') # -> ['ablaj'] + + patt.ignore(cStyleComment) + patt.parseString('ablaj /* comment */ lskjd') # -> ['ablaj', 'lskjd'] + """ + if isinstance(other, basestring): + other = Suppress(other) + + if isinstance( other, Suppress ): + if other not in self.ignoreExprs: + self.ignoreExprs.append(other) + else: + self.ignoreExprs.append( Suppress( other.copy() ) ) + return self + + def setDebugActions( self, startAction, successAction, exceptionAction ): + """ + Enable display of debugging messages while doing pattern matching. + """ + self.debugActions = (startAction or _defaultStartDebugAction, + successAction or _defaultSuccessDebugAction, + exceptionAction or _defaultExceptionDebugAction) + self.debug = True + return self + + def setDebug( self, flag=True ): + """ + Enable display of debugging messages while doing pattern matching. + Set C{flag} to True to enable, False to disable. + + Example:: + wd = Word(alphas).setName("alphaword") + integer = Word(nums).setName("numword") + term = wd | integer + + # turn on debugging for wd + wd.setDebug() + + OneOrMore(term).parseString("abc 123 xyz 890") + + prints:: + Match alphaword at loc 0(1,1) + Matched alphaword -> ['abc'] + Match alphaword at loc 3(1,4) + Exception raised:Expected alphaword (at char 4), (line:1, col:5) + Match alphaword at loc 7(1,8) + Matched alphaword -> ['xyz'] + Match alphaword at loc 11(1,12) + Exception raised:Expected alphaword (at char 12), (line:1, col:13) + Match alphaword at loc 15(1,16) + Exception raised:Expected alphaword (at char 15), (line:1, col:16) + + The output shown is that produced by the default debug actions - custom debug actions can be + specified using L{setDebugActions}. Prior to attempting + to match the C{wd} expression, the debugging message C{"Match <exprname> at loc <n>(<line>,<col>)"} + is shown. Then if the parse succeeds, a C{"Matched"} message is shown, or an C{"Exception raised"} + message is shown. Also note the use of L{setName} to assign a human-readable name to the expression, + which makes debugging and exception messages easier to understand - for instance, the default + name created for the C{Word} expression without calling C{setName} is C{"W:(ABCD...)"}. + """ + if flag: + self.setDebugActions( _defaultStartDebugAction, _defaultSuccessDebugAction, _defaultExceptionDebugAction ) + else: + self.debug = False + return self + + def __str__( self ): + return self.name + + def __repr__( self ): + return _ustr(self) + + def streamline( self ): + self.streamlined = True + self.strRepr = None + return self + + def checkRecursion( self, parseElementList ): + pass + + def validate( self, validateTrace=[] ): + """ + Check defined expressions for valid structure, check for infinite recursive definitions. + """ + self.checkRecursion( [] ) + + def parseFile( self, file_or_filename, parseAll=False ): + """ + Execute the parse expression on the given file or filename. + If a filename is specified (instead of a file object), + the entire file is opened, read, and closed before parsing. + """ + try: + file_contents = file_or_filename.read() + except AttributeError: + with open(file_or_filename, "r") as f: + file_contents = f.read() + try: + return self.parseString(file_contents, parseAll) + except ParseBaseException as exc: + if ParserElement.verbose_stacktrace: + raise + else: + # catch and re-raise exception from here, clears out pyparsing internal stack trace + raise exc + + def __eq__(self,other): + if isinstance(other, ParserElement): + return self is other or vars(self) == vars(other) + elif isinstance(other, basestring): + return self.matches(other) + else: + return super(ParserElement,self)==other + + def __ne__(self,other): + return not (self == other) + + def __hash__(self): + return hash(id(self)) + + def __req__(self,other): + return self == other + + def __rne__(self,other): + return not (self == other) + + def matches(self, testString, parseAll=True): + """ + Method for quick testing of a parser against a test string. Good for simple + inline microtests of sub expressions while building up larger parser. + + Parameters: + - testString - to test against this expression for a match + - parseAll - (default=C{True}) - flag to pass to C{L{parseString}} when running tests + + Example:: + expr = Word(nums) + assert expr.matches("100") + """ + try: + self.parseString(_ustr(testString), parseAll=parseAll) + return True + except ParseBaseException: + return False + + def runTests(self, tests, parseAll=True, comment='#', fullDump=True, printResults=True, failureTests=False): + """ + Execute the parse expression on a series of test strings, showing each + test, the parsed results or where the parse failed. Quick and easy way to + run a parse expression against a list of sample strings. + + Parameters: + - tests - a list of separate test strings, or a multiline string of test strings + - parseAll - (default=C{True}) - flag to pass to C{L{parseString}} when running tests + - comment - (default=C{'#'}) - expression for indicating embedded comments in the test + string; pass None to disable comment filtering + - fullDump - (default=C{True}) - dump results as list followed by results names in nested outline; + if False, only dump nested list + - printResults - (default=C{True}) prints test output to stdout + - failureTests - (default=C{False}) indicates if these tests are expected to fail parsing + + Returns: a (success, results) tuple, where success indicates that all tests succeeded + (or failed if C{failureTests} is True), and the results contain a list of lines of each + test's output + + Example:: + number_expr = pyparsing_common.number.copy() + + result = number_expr.runTests(''' + # unsigned integer + 100 + # negative integer + -100 + # float with scientific notation + 6.02e23 + # integer with scientific notation + 1e-12 + ''') + print("Success" if result[0] else "Failed!") + + result = number_expr.runTests(''' + # stray character + 100Z + # missing leading digit before '.' + -.100 + # too many '.' + 3.14.159 + ''', failureTests=True) + print("Success" if result[0] else "Failed!") + prints:: + # unsigned integer + 100 + [100] + + # negative integer + -100 + [-100] + + # float with scientific notation + 6.02e23 + [6.02e+23] + + # integer with scientific notation + 1e-12 + [1e-12] + + Success + + # stray character + 100Z + ^ + FAIL: Expected end of text (at char 3), (line:1, col:4) + + # missing leading digit before '.' + -.100 + ^ + FAIL: Expected {real number with scientific notation | real number | signed integer} (at char 0), (line:1, col:1) + + # too many '.' + 3.14.159 + ^ + FAIL: Expected end of text (at char 4), (line:1, col:5) + + Success + + Each test string must be on a single line. If you want to test a string that spans multiple + lines, create a test like this:: + + expr.runTest(r"this is a test\\n of strings that spans \\n 3 lines") + + (Note that this is a raw string literal, you must include the leading 'r'.) + """ + if isinstance(tests, basestring): + tests = list(map(str.strip, tests.rstrip().splitlines())) + if isinstance(comment, basestring): + comment = Literal(comment) + allResults = [] + comments = [] + success = True + for t in tests: + if comment is not None and comment.matches(t, False) or comments and not t: + comments.append(t) + continue + if not t: + continue + out = ['\n'.join(comments), t] + comments = [] + try: + t = t.replace(r'\n','\n') + result = self.parseString(t, parseAll=parseAll) + out.append(result.dump(full=fullDump)) + success = success and not failureTests + except ParseBaseException as pe: + fatal = "(FATAL)" if isinstance(pe, ParseFatalException) else "" + if '\n' in t: + out.append(line(pe.loc, t)) + out.append(' '*(col(pe.loc,t)-1) + '^' + fatal) + else: + out.append(' '*pe.loc + '^' + fatal) + out.append("FAIL: " + str(pe)) + success = success and failureTests + result = pe + except Exception as exc: + out.append("FAIL-EXCEPTION: " + str(exc)) + success = success and failureTests + result = exc + + if printResults: + if fullDump: + out.append('') + print('\n'.join(out)) + + allResults.append((t, result)) + + return success, allResults + + +class Token(ParserElement): + """ + Abstract C{ParserElement} subclass, for defining atomic matching patterns. + """ + def __init__( self ): + super(Token,self).__init__( savelist=False ) + + +class Empty(Token): + """ + An empty token, will always match. + """ + def __init__( self ): + super(Empty,self).__init__() + self.name = "Empty" + self.mayReturnEmpty = True + self.mayIndexError = False + + +class NoMatch(Token): + """ + A token that will never match. + """ + def __init__( self ): + super(NoMatch,self).__init__() + self.name = "NoMatch" + self.mayReturnEmpty = True + self.mayIndexError = False + self.errmsg = "Unmatchable token" + + def parseImpl( self, instring, loc, doActions=True ): + raise ParseException(instring, loc, self.errmsg, self) + + +class Literal(Token): + """ + Token to exactly match a specified string. + + Example:: + Literal('blah').parseString('blah') # -> ['blah'] + Literal('blah').parseString('blahfooblah') # -> ['blah'] + Literal('blah').parseString('bla') # -> Exception: Expected "blah" + + For case-insensitive matching, use L{CaselessLiteral}. + + For keyword matching (force word break before and after the matched string), + use L{Keyword} or L{CaselessKeyword}. + """ + def __init__( self, matchString ): + super(Literal,self).__init__() + self.match = matchString + self.matchLen = len(matchString) + try: + self.firstMatchChar = matchString[0] + except IndexError: + warnings.warn("null string passed to Literal; use Empty() instead", + SyntaxWarning, stacklevel=2) + self.__class__ = Empty + self.name = '"%s"' % _ustr(self.match) + self.errmsg = "Expected " + self.name + self.mayReturnEmpty = False + self.mayIndexError = False + + # Performance tuning: this routine gets called a *lot* + # if this is a single character match string and the first character matches, + # short-circuit as quickly as possible, and avoid calling startswith + #~ @profile + def parseImpl( self, instring, loc, doActions=True ): + if (instring[loc] == self.firstMatchChar and + (self.matchLen==1 or instring.startswith(self.match,loc)) ): + return loc+self.matchLen, self.match + raise ParseException(instring, loc, self.errmsg, self) +_L = Literal +ParserElement._literalStringClass = Literal + +class Keyword(Token): + """ + Token to exactly match a specified string as a keyword, that is, it must be + immediately followed by a non-keyword character. Compare with C{L{Literal}}: + - C{Literal("if")} will match the leading C{'if'} in C{'ifAndOnlyIf'}. + - C{Keyword("if")} will not; it will only match the leading C{'if'} in C{'if x=1'}, or C{'if(y==2)'} + Accepts two optional constructor arguments in addition to the keyword string: + - C{identChars} is a string of characters that would be valid identifier characters, + defaulting to all alphanumerics + "_" and "$" + - C{caseless} allows case-insensitive matching, default is C{False}. + + Example:: + Keyword("start").parseString("start") # -> ['start'] + Keyword("start").parseString("starting") # -> Exception + + For case-insensitive matching, use L{CaselessKeyword}. + """ + DEFAULT_KEYWORD_CHARS = alphanums+"_$" + + def __init__( self, matchString, identChars=None, caseless=False ): + super(Keyword,self).__init__() + if identChars is None: + identChars = Keyword.DEFAULT_KEYWORD_CHARS + self.match = matchString + self.matchLen = len(matchString) + try: + self.firstMatchChar = matchString[0] + except IndexError: + warnings.warn("null string passed to Keyword; use Empty() instead", + SyntaxWarning, stacklevel=2) + self.name = '"%s"' % self.match + self.errmsg = "Expected " + self.name + self.mayReturnEmpty = False + self.mayIndexError = False + self.caseless = caseless + if caseless: + self.caselessmatch = matchString.upper() + identChars = identChars.upper() + self.identChars = set(identChars) + + def parseImpl( self, instring, loc, doActions=True ): + if self.caseless: + if ( (instring[ loc:loc+self.matchLen ].upper() == self.caselessmatch) and + (loc >= len(instring)-self.matchLen or instring[loc+self.matchLen].upper() not in self.identChars) and + (loc == 0 or instring[loc-1].upper() not in self.identChars) ): + return loc+self.matchLen, self.match + else: + if (instring[loc] == self.firstMatchChar and + (self.matchLen==1 or instring.startswith(self.match,loc)) and + (loc >= len(instring)-self.matchLen or instring[loc+self.matchLen] not in self.identChars) and + (loc == 0 or instring[loc-1] not in self.identChars) ): + return loc+self.matchLen, self.match + raise ParseException(instring, loc, self.errmsg, self) + + def copy(self): + c = super(Keyword,self).copy() + c.identChars = Keyword.DEFAULT_KEYWORD_CHARS + return c + + @staticmethod + def setDefaultKeywordChars( chars ): + """Overrides the default Keyword chars + """ + Keyword.DEFAULT_KEYWORD_CHARS = chars + +class CaselessLiteral(Literal): + """ + Token to match a specified string, ignoring case of letters. + Note: the matched results will always be in the case of the given + match string, NOT the case of the input text. + + Example:: + OneOrMore(CaselessLiteral("CMD")).parseString("cmd CMD Cmd10") # -> ['CMD', 'CMD', 'CMD'] + + (Contrast with example for L{CaselessKeyword}.) + """ + def __init__( self, matchString ): + super(CaselessLiteral,self).__init__( matchString.upper() ) + # Preserve the defining literal. + self.returnString = matchString + self.name = "'%s'" % self.returnString + self.errmsg = "Expected " + self.name + + def parseImpl( self, instring, loc, doActions=True ): + if instring[ loc:loc+self.matchLen ].upper() == self.match: + return loc+self.matchLen, self.returnString + raise ParseException(instring, loc, self.errmsg, self) + +class CaselessKeyword(Keyword): + """ + Caseless version of L{Keyword}. + + Example:: + OneOrMore(CaselessKeyword("CMD")).parseString("cmd CMD Cmd10") # -> ['CMD', 'CMD'] + + (Contrast with example for L{CaselessLiteral}.) + """ + def __init__( self, matchString, identChars=None ): + super(CaselessKeyword,self).__init__( matchString, identChars, caseless=True ) + + def parseImpl( self, instring, loc, doActions=True ): + if ( (instring[ loc:loc+self.matchLen ].upper() == self.caselessmatch) and + (loc >= len(instring)-self.matchLen or instring[loc+self.matchLen].upper() not in self.identChars) ): + return loc+self.matchLen, self.match + raise ParseException(instring, loc, self.errmsg, self) + +class CloseMatch(Token): + """ + A variation on L{Literal} which matches "close" matches, that is, + strings with at most 'n' mismatching characters. C{CloseMatch} takes parameters: + - C{match_string} - string to be matched + - C{maxMismatches} - (C{default=1}) maximum number of mismatches allowed to count as a match + + The results from a successful parse will contain the matched text from the input string and the following named results: + - C{mismatches} - a list of the positions within the match_string where mismatches were found + - C{original} - the original match_string used to compare against the input string + + If C{mismatches} is an empty list, then the match was an exact match. + + Example:: + patt = CloseMatch("ATCATCGAATGGA") + patt.parseString("ATCATCGAAXGGA") # -> (['ATCATCGAAXGGA'], {'mismatches': [[9]], 'original': ['ATCATCGAATGGA']}) + patt.parseString("ATCAXCGAAXGGA") # -> Exception: Expected 'ATCATCGAATGGA' (with up to 1 mismatches) (at char 0), (line:1, col:1) + + # exact match + patt.parseString("ATCATCGAATGGA") # -> (['ATCATCGAATGGA'], {'mismatches': [[]], 'original': ['ATCATCGAATGGA']}) + + # close match allowing up to 2 mismatches + patt = CloseMatch("ATCATCGAATGGA", maxMismatches=2) + patt.parseString("ATCAXCGAAXGGA") # -> (['ATCAXCGAAXGGA'], {'mismatches': [[4, 9]], 'original': ['ATCATCGAATGGA']}) + """ + def __init__(self, match_string, maxMismatches=1): + super(CloseMatch,self).__init__() + self.name = match_string + self.match_string = match_string + self.maxMismatches = maxMismatches + self.errmsg = "Expected %r (with up to %d mismatches)" % (self.match_string, self.maxMismatches) + self.mayIndexError = False + self.mayReturnEmpty = False + + def parseImpl( self, instring, loc, doActions=True ): + start = loc + instrlen = len(instring) + maxloc = start + len(self.match_string) + + if maxloc <= instrlen: + match_string = self.match_string + match_stringloc = 0 + mismatches = [] + maxMismatches = self.maxMismatches + + for match_stringloc,s_m in enumerate(zip(instring[loc:maxloc], self.match_string)): + src,mat = s_m + if src != mat: + mismatches.append(match_stringloc) + if len(mismatches) > maxMismatches: + break + else: + loc = match_stringloc + 1 + results = ParseResults([instring[start:loc]]) + results['original'] = self.match_string + results['mismatches'] = mismatches + return loc, results + + raise ParseException(instring, loc, self.errmsg, self) + + +class Word(Token): + """ + Token for matching words composed of allowed character sets. + Defined with string containing all allowed initial characters, + an optional string containing allowed body characters (if omitted, + defaults to the initial character set), and an optional minimum, + maximum, and/or exact length. The default value for C{min} is 1 (a + minimum value < 1 is not valid); the default values for C{max} and C{exact} + are 0, meaning no maximum or exact length restriction. An optional + C{excludeChars} parameter can list characters that might be found in + the input C{bodyChars} string; useful to define a word of all printables + except for one or two characters, for instance. + + L{srange} is useful for defining custom character set strings for defining + C{Word} expressions, using range notation from regular expression character sets. + + A common mistake is to use C{Word} to match a specific literal string, as in + C{Word("Address")}. Remember that C{Word} uses the string argument to define + I{sets} of matchable characters. This expression would match "Add", "AAA", + "dAred", or any other word made up of the characters 'A', 'd', 'r', 'e', and 's'. + To match an exact literal string, use L{Literal} or L{Keyword}. + + pyparsing includes helper strings for building Words: + - L{alphas} + - L{nums} + - L{alphanums} + - L{hexnums} + - L{alphas8bit} (alphabetic characters in ASCII range 128-255 - accented, tilded, umlauted, etc.) + - L{punc8bit} (non-alphabetic characters in ASCII range 128-255 - currency, symbols, superscripts, diacriticals, etc.) + - L{printables} (any non-whitespace character) + + Example:: + # a word composed of digits + integer = Word(nums) # equivalent to Word("0123456789") or Word(srange("0-9")) + + # a word with a leading capital, and zero or more lowercase + capital_word = Word(alphas.upper(), alphas.lower()) + + # hostnames are alphanumeric, with leading alpha, and '-' + hostname = Word(alphas, alphanums+'-') + + # roman numeral (not a strict parser, accepts invalid mix of characters) + roman = Word("IVXLCDM") + + # any string of non-whitespace characters, except for ',' + csv_value = Word(printables, excludeChars=",") + """ + def __init__( self, initChars, bodyChars=None, min=1, max=0, exact=0, asKeyword=False, excludeChars=None ): + super(Word,self).__init__() + if excludeChars: + initChars = ''.join(c for c in initChars if c not in excludeChars) + if bodyChars: + bodyChars = ''.join(c for c in bodyChars if c not in excludeChars) + self.initCharsOrig = initChars + self.initChars = set(initChars) + if bodyChars : + self.bodyCharsOrig = bodyChars + self.bodyChars = set(bodyChars) + else: + self.bodyCharsOrig = initChars + self.bodyChars = set(initChars) + + self.maxSpecified = max > 0 + + if min < 1: + raise ValueError("cannot specify a minimum length < 1; use Optional(Word()) if zero-length word is permitted") + + self.minLen = min + + if max > 0: + self.maxLen = max + else: + self.maxLen = _MAX_INT + + if exact > 0: + self.maxLen = exact + self.minLen = exact + + self.name = _ustr(self) + self.errmsg = "Expected " + self.name + self.mayIndexError = False + self.asKeyword = asKeyword + + if ' ' not in self.initCharsOrig+self.bodyCharsOrig and (min==1 and max==0 and exact==0): + if self.bodyCharsOrig == self.initCharsOrig: + self.reString = "[%s]+" % _escapeRegexRangeChars(self.initCharsOrig) + elif len(self.initCharsOrig) == 1: + self.reString = "%s[%s]*" % \ + (re.escape(self.initCharsOrig), + _escapeRegexRangeChars(self.bodyCharsOrig),) + else: + self.reString = "[%s][%s]*" % \ + (_escapeRegexRangeChars(self.initCharsOrig), + _escapeRegexRangeChars(self.bodyCharsOrig),) + if self.asKeyword: + self.reString = r"\b"+self.reString+r"\b" + try: + self.re = re.compile( self.reString ) + except Exception: + self.re = None + + def parseImpl( self, instring, loc, doActions=True ): + if self.re: + result = self.re.match(instring,loc) + if not result: + raise ParseException(instring, loc, self.errmsg, self) + + loc = result.end() + return loc, result.group() + + if not(instring[ loc ] in self.initChars): + raise ParseException(instring, loc, self.errmsg, self) + + start = loc + loc += 1 + instrlen = len(instring) + bodychars = self.bodyChars + maxloc = start + self.maxLen + maxloc = min( maxloc, instrlen ) + while loc < maxloc and instring[loc] in bodychars: + loc += 1 + + throwException = False + if loc - start < self.minLen: + throwException = True + if self.maxSpecified and loc < instrlen and instring[loc] in bodychars: + throwException = True + if self.asKeyword: + if (start>0 and instring[start-1] in bodychars) or (loc<instrlen and instring[loc] in bodychars): + throwException = True + + if throwException: + raise ParseException(instring, loc, self.errmsg, self) + + return loc, instring[start:loc] + + def __str__( self ): + try: + return super(Word,self).__str__() + except Exception: + pass + + + if self.strRepr is None: + + def charsAsStr(s): + if len(s)>4: + return s[:4]+"..." + else: + return s + + if ( self.initCharsOrig != self.bodyCharsOrig ): + self.strRepr = "W:(%s,%s)" % ( charsAsStr(self.initCharsOrig), charsAsStr(self.bodyCharsOrig) ) + else: + self.strRepr = "W:(%s)" % charsAsStr(self.initCharsOrig) + + return self.strRepr + + +class Regex(Token): + r""" + Token for matching strings that match a given regular expression. + Defined with string specifying the regular expression in a form recognized by the inbuilt Python re module. + If the given regex contains named groups (defined using C{(?P<name>...)}), these will be preserved as + named parse results. + + Example:: + realnum = Regex(r"[+-]?\d+\.\d*") + date = Regex(r'(?P<year>\d{4})-(?P<month>\d\d?)-(?P<day>\d\d?)') + # ref: http://stackoverflow.com/questions/267399/how-do-you-match-only-valid-roman-numerals-with-a-regular-expression + roman = Regex(r"M{0,4}(CM|CD|D?C{0,3})(XC|XL|L?X{0,3})(IX|IV|V?I{0,3})") + """ + compiledREtype = type(re.compile("[A-Z]")) + def __init__( self, pattern, flags=0): + """The parameters C{pattern} and C{flags} are passed to the C{re.compile()} function as-is. See the Python C{re} module for an explanation of the acceptable patterns and flags.""" + super(Regex,self).__init__() + + if isinstance(pattern, basestring): + if not pattern: + warnings.warn("null string passed to Regex; use Empty() instead", + SyntaxWarning, stacklevel=2) + + self.pattern = pattern + self.flags = flags + + try: + self.re = re.compile(self.pattern, self.flags) + self.reString = self.pattern + except sre_constants.error: + warnings.warn("invalid pattern (%s) passed to Regex" % pattern, + SyntaxWarning, stacklevel=2) + raise + + elif isinstance(pattern, Regex.compiledREtype): + self.re = pattern + self.pattern = \ + self.reString = str(pattern) + self.flags = flags + + else: + raise ValueError("Regex may only be constructed with a string or a compiled RE object") + + self.name = _ustr(self) + self.errmsg = "Expected " + self.name + self.mayIndexError = False + self.mayReturnEmpty = True + + def parseImpl( self, instring, loc, doActions=True ): + result = self.re.match(instring,loc) + if not result: + raise ParseException(instring, loc, self.errmsg, self) + + loc = result.end() + d = result.groupdict() + ret = ParseResults(result.group()) + if d: + for k in d: + ret[k] = d[k] + return loc,ret + + def __str__( self ): + try: + return super(Regex,self).__str__() + except Exception: + pass + + if self.strRepr is None: + self.strRepr = "Re:(%s)" % repr(self.pattern) + + return self.strRepr + + +class QuotedString(Token): + r""" + Token for matching strings that are delimited by quoting characters. + + Defined with the following parameters: + - quoteChar - string of one or more characters defining the quote delimiting string + - escChar - character to escape quotes, typically backslash (default=C{None}) + - escQuote - special quote sequence to escape an embedded quote string (such as SQL's "" to escape an embedded ") (default=C{None}) + - multiline - boolean indicating whether quotes can span multiple lines (default=C{False}) + - unquoteResults - boolean indicating whether the matched text should be unquoted (default=C{True}) + - endQuoteChar - string of one or more characters defining the end of the quote delimited string (default=C{None} => same as quoteChar) + - convertWhitespaceEscapes - convert escaped whitespace (C{'\t'}, C{'\n'}, etc.) to actual whitespace (default=C{True}) + + Example:: + qs = QuotedString('"') + print(qs.searchString('lsjdf "This is the quote" sldjf')) + complex_qs = QuotedString('{{', endQuoteChar='}}') + print(complex_qs.searchString('lsjdf {{This is the "quote"}} sldjf')) + sql_qs = QuotedString('"', escQuote='""') + print(sql_qs.searchString('lsjdf "This is the quote with ""embedded"" quotes" sldjf')) + prints:: + [['This is the quote']] + [['This is the "quote"']] + [['This is the quote with "embedded" quotes']] + """ + def __init__( self, quoteChar, escChar=None, escQuote=None, multiline=False, unquoteResults=True, endQuoteChar=None, convertWhitespaceEscapes=True): + super(QuotedString,self).__init__() + + # remove white space from quote chars - wont work anyway + quoteChar = quoteChar.strip() + if not quoteChar: + warnings.warn("quoteChar cannot be the empty string",SyntaxWarning,stacklevel=2) + raise SyntaxError() + + if endQuoteChar is None: + endQuoteChar = quoteChar + else: + endQuoteChar = endQuoteChar.strip() + if not endQuoteChar: + warnings.warn("endQuoteChar cannot be the empty string",SyntaxWarning,stacklevel=2) + raise SyntaxError() + + self.quoteChar = quoteChar + self.quoteCharLen = len(quoteChar) + self.firstQuoteChar = quoteChar[0] + self.endQuoteChar = endQuoteChar + self.endQuoteCharLen = len(endQuoteChar) + self.escChar = escChar + self.escQuote = escQuote + self.unquoteResults = unquoteResults + self.convertWhitespaceEscapes = convertWhitespaceEscapes + + if multiline: + self.flags = re.MULTILINE | re.DOTALL + self.pattern = r'%s(?:[^%s%s]' % \ + ( re.escape(self.quoteChar), + _escapeRegexRangeChars(self.endQuoteChar[0]), + (escChar is not None and _escapeRegexRangeChars(escChar) or '') ) + else: + self.flags = 0 + self.pattern = r'%s(?:[^%s\n\r%s]' % \ + ( re.escape(self.quoteChar), + _escapeRegexRangeChars(self.endQuoteChar[0]), + (escChar is not None and _escapeRegexRangeChars(escChar) or '') ) + if len(self.endQuoteChar) > 1: + self.pattern += ( + '|(?:' + ')|(?:'.join("%s[^%s]" % (re.escape(self.endQuoteChar[:i]), + _escapeRegexRangeChars(self.endQuoteChar[i])) + for i in range(len(self.endQuoteChar)-1,0,-1)) + ')' + ) + if escQuote: + self.pattern += (r'|(?:%s)' % re.escape(escQuote)) + if escChar: + self.pattern += (r'|(?:%s.)' % re.escape(escChar)) + self.escCharReplacePattern = re.escape(self.escChar)+"(.)" + self.pattern += (r')*%s' % re.escape(self.endQuoteChar)) + + try: + self.re = re.compile(self.pattern, self.flags) + self.reString = self.pattern + except sre_constants.error: + warnings.warn("invalid pattern (%s) passed to Regex" % self.pattern, + SyntaxWarning, stacklevel=2) + raise + + self.name = _ustr(self) + self.errmsg = "Expected " + self.name + self.mayIndexError = False + self.mayReturnEmpty = True + + def parseImpl( self, instring, loc, doActions=True ): + result = instring[loc] == self.firstQuoteChar and self.re.match(instring,loc) or None + if not result: + raise ParseException(instring, loc, self.errmsg, self) + + loc = result.end() + ret = result.group() + + if self.unquoteResults: + + # strip off quotes + ret = ret[self.quoteCharLen:-self.endQuoteCharLen] + + if isinstance(ret,basestring): + # replace escaped whitespace + if '\\' in ret and self.convertWhitespaceEscapes: + ws_map = { + r'\t' : '\t', + r'\n' : '\n', + r'\f' : '\f', + r'\r' : '\r', + } + for wslit,wschar in ws_map.items(): + ret = ret.replace(wslit, wschar) + + # replace escaped characters + if self.escChar: + ret = re.sub(self.escCharReplacePattern,r"\g<1>",ret) + + # replace escaped quotes + if self.escQuote: + ret = ret.replace(self.escQuote, self.endQuoteChar) + + return loc, ret + + def __str__( self ): + try: + return super(QuotedString,self).__str__() + except Exception: + pass + + if self.strRepr is None: + self.strRepr = "quoted string, starting with %s ending with %s" % (self.quoteChar, self.endQuoteChar) + + return self.strRepr + + +class CharsNotIn(Token): + """ + Token for matching words composed of characters I{not} in a given set (will + include whitespace in matched characters if not listed in the provided exclusion set - see example). + Defined with string containing all disallowed characters, and an optional + minimum, maximum, and/or exact length. The default value for C{min} is 1 (a + minimum value < 1 is not valid); the default values for C{max} and C{exact} + are 0, meaning no maximum or exact length restriction. + + Example:: + # define a comma-separated-value as anything that is not a ',' + csv_value = CharsNotIn(',') + print(delimitedList(csv_value).parseString("dkls,lsdkjf,s12 34,@!#,213")) + prints:: + ['dkls', 'lsdkjf', 's12 34', '@!#', '213'] + """ + def __init__( self, notChars, min=1, max=0, exact=0 ): + super(CharsNotIn,self).__init__() + self.skipWhitespace = False + self.notChars = notChars + + if min < 1: + raise ValueError("cannot specify a minimum length < 1; use Optional(CharsNotIn()) if zero-length char group is permitted") + + self.minLen = min + + if max > 0: + self.maxLen = max + else: + self.maxLen = _MAX_INT + + if exact > 0: + self.maxLen = exact + self.minLen = exact + + self.name = _ustr(self) + self.errmsg = "Expected " + self.name + self.mayReturnEmpty = ( self.minLen == 0 ) + self.mayIndexError = False + + def parseImpl( self, instring, loc, doActions=True ): + if instring[loc] in self.notChars: + raise ParseException(instring, loc, self.errmsg, self) + + start = loc + loc += 1 + notchars = self.notChars + maxlen = min( start+self.maxLen, len(instring) ) + while loc < maxlen and \ + (instring[loc] not in notchars): + loc += 1 + + if loc - start < self.minLen: + raise ParseException(instring, loc, self.errmsg, self) + + return loc, instring[start:loc] + + def __str__( self ): + try: + return super(CharsNotIn, self).__str__() + except Exception: + pass + + if self.strRepr is None: + if len(self.notChars) > 4: + self.strRepr = "!W:(%s...)" % self.notChars[:4] + else: + self.strRepr = "!W:(%s)" % self.notChars + + return self.strRepr + +class White(Token): + """ + Special matching class for matching whitespace. Normally, whitespace is ignored + by pyparsing grammars. This class is included when some whitespace structures + are significant. Define with a string containing the whitespace characters to be + matched; default is C{" \\t\\r\\n"}. Also takes optional C{min}, C{max}, and C{exact} arguments, + as defined for the C{L{Word}} class. + """ + whiteStrs = { + " " : "<SPC>", + "\t": "<TAB>", + "\n": "<LF>", + "\r": "<CR>", + "\f": "<FF>", + } + def __init__(self, ws=" \t\r\n", min=1, max=0, exact=0): + super(White,self).__init__() + self.matchWhite = ws + self.setWhitespaceChars( "".join(c for c in self.whiteChars if c not in self.matchWhite) ) + #~ self.leaveWhitespace() + self.name = ("".join(White.whiteStrs[c] for c in self.matchWhite)) + self.mayReturnEmpty = True + self.errmsg = "Expected " + self.name + + self.minLen = min + + if max > 0: + self.maxLen = max + else: + self.maxLen = _MAX_INT + + if exact > 0: + self.maxLen = exact + self.minLen = exact + + def parseImpl( self, instring, loc, doActions=True ): + if not(instring[ loc ] in self.matchWhite): + raise ParseException(instring, loc, self.errmsg, self) + start = loc + loc += 1 + maxloc = start + self.maxLen + maxloc = min( maxloc, len(instring) ) + while loc < maxloc and instring[loc] in self.matchWhite: + loc += 1 + + if loc - start < self.minLen: + raise ParseException(instring, loc, self.errmsg, self) + + return loc, instring[start:loc] + + +class _PositionToken(Token): + def __init__( self ): + super(_PositionToken,self).__init__() + self.name=self.__class__.__name__ + self.mayReturnEmpty = True + self.mayIndexError = False + +class GoToColumn(_PositionToken): + """ + Token to advance to a specific column of input text; useful for tabular report scraping. + """ + def __init__( self, colno ): + super(GoToColumn,self).__init__() + self.col = colno + + def preParse( self, instring, loc ): + if col(loc,instring) != self.col: + instrlen = len(instring) + if self.ignoreExprs: + loc = self._skipIgnorables( instring, loc ) + while loc < instrlen and instring[loc].isspace() and col( loc, instring ) != self.col : + loc += 1 + return loc + + def parseImpl( self, instring, loc, doActions=True ): + thiscol = col( loc, instring ) + if thiscol > self.col: + raise ParseException( instring, loc, "Text not in expected column", self ) + newloc = loc + self.col - thiscol + ret = instring[ loc: newloc ] + return newloc, ret + + +class LineStart(_PositionToken): + """ + Matches if current position is at the beginning of a line within the parse string + + Example:: + + test = '''\ + AAA this line + AAA and this line + AAA but not this one + B AAA and definitely not this one + ''' + + for t in (LineStart() + 'AAA' + restOfLine).searchString(test): + print(t) + + Prints:: + ['AAA', ' this line'] + ['AAA', ' and this line'] + + """ + def __init__( self ): + super(LineStart,self).__init__() + self.errmsg = "Expected start of line" + + def parseImpl( self, instring, loc, doActions=True ): + if col(loc, instring) == 1: + return loc, [] + raise ParseException(instring, loc, self.errmsg, self) + +class LineEnd(_PositionToken): + """ + Matches if current position is at the end of a line within the parse string + """ + def __init__( self ): + super(LineEnd,self).__init__() + self.setWhitespaceChars( ParserElement.DEFAULT_WHITE_CHARS.replace("\n","") ) + self.errmsg = "Expected end of line" + + def parseImpl( self, instring, loc, doActions=True ): + if loc<len(instring): + if instring[loc] == "\n": + return loc+1, "\n" + else: + raise ParseException(instring, loc, self.errmsg, self) + elif loc == len(instring): + return loc+1, [] + else: + raise ParseException(instring, loc, self.errmsg, self) + +class StringStart(_PositionToken): + """ + Matches if current position is at the beginning of the parse string + """ + def __init__( self ): + super(StringStart,self).__init__() + self.errmsg = "Expected start of text" + + def parseImpl( self, instring, loc, doActions=True ): + if loc != 0: + # see if entire string up to here is just whitespace and ignoreables + if loc != self.preParse( instring, 0 ): + raise ParseException(instring, loc, self.errmsg, self) + return loc, [] + +class StringEnd(_PositionToken): + """ + Matches if current position is at the end of the parse string + """ + def __init__( self ): + super(StringEnd,self).__init__() + self.errmsg = "Expected end of text" + + def parseImpl( self, instring, loc, doActions=True ): + if loc < len(instring): + raise ParseException(instring, loc, self.errmsg, self) + elif loc == len(instring): + return loc+1, [] + elif loc > len(instring): + return loc, [] + else: + raise ParseException(instring, loc, self.errmsg, self) + +class WordStart(_PositionToken): + """ + Matches if the current position is at the beginning of a Word, and + is not preceded by any character in a given set of C{wordChars} + (default=C{printables}). To emulate the C{\b} behavior of regular expressions, + use C{WordStart(alphanums)}. C{WordStart} will also match at the beginning of + the string being parsed, or at the beginning of a line. + """ + def __init__(self, wordChars = printables): + super(WordStart,self).__init__() + self.wordChars = set(wordChars) + self.errmsg = "Not at the start of a word" + + def parseImpl(self, instring, loc, doActions=True ): + if loc != 0: + if (instring[loc-1] in self.wordChars or + instring[loc] not in self.wordChars): + raise ParseException(instring, loc, self.errmsg, self) + return loc, [] + +class WordEnd(_PositionToken): + """ + Matches if the current position is at the end of a Word, and + is not followed by any character in a given set of C{wordChars} + (default=C{printables}). To emulate the C{\b} behavior of regular expressions, + use C{WordEnd(alphanums)}. C{WordEnd} will also match at the end of + the string being parsed, or at the end of a line. + """ + def __init__(self, wordChars = printables): + super(WordEnd,self).__init__() + self.wordChars = set(wordChars) + self.skipWhitespace = False + self.errmsg = "Not at the end of a word" + + def parseImpl(self, instring, loc, doActions=True ): + instrlen = len(instring) + if instrlen>0 and loc<instrlen: + if (instring[loc] in self.wordChars or + instring[loc-1] not in self.wordChars): + raise ParseException(instring, loc, self.errmsg, self) + return loc, [] + + +class ParseExpression(ParserElement): + """ + Abstract subclass of ParserElement, for combining and post-processing parsed tokens. + """ + def __init__( self, exprs, savelist = False ): + super(ParseExpression,self).__init__(savelist) + if isinstance( exprs, _generatorType ): + exprs = list(exprs) + + if isinstance( exprs, basestring ): + self.exprs = [ ParserElement._literalStringClass( exprs ) ] + elif isinstance( exprs, collections.Iterable ): + exprs = list(exprs) + # if sequence of strings provided, wrap with Literal + if all(isinstance(expr, basestring) for expr in exprs): + exprs = map(ParserElement._literalStringClass, exprs) + self.exprs = list(exprs) + else: + try: + self.exprs = list( exprs ) + except TypeError: + self.exprs = [ exprs ] + self.callPreparse = False + + def __getitem__( self, i ): + return self.exprs[i] + + def append( self, other ): + self.exprs.append( other ) + self.strRepr = None + return self + + def leaveWhitespace( self ): + """Extends C{leaveWhitespace} defined in base class, and also invokes C{leaveWhitespace} on + all contained expressions.""" + self.skipWhitespace = False + self.exprs = [ e.copy() for e in self.exprs ] + for e in self.exprs: + e.leaveWhitespace() + return self + + def ignore( self, other ): + if isinstance( other, Suppress ): + if other not in self.ignoreExprs: + super( ParseExpression, self).ignore( other ) + for e in self.exprs: + e.ignore( self.ignoreExprs[-1] ) + else: + super( ParseExpression, self).ignore( other ) + for e in self.exprs: + e.ignore( self.ignoreExprs[-1] ) + return self + + def __str__( self ): + try: + return super(ParseExpression,self).__str__() + except Exception: + pass + + if self.strRepr is None: + self.strRepr = "%s:(%s)" % ( self.__class__.__name__, _ustr(self.exprs) ) + return self.strRepr + + def streamline( self ): + super(ParseExpression,self).streamline() + + for e in self.exprs: + e.streamline() + + # collapse nested And's of the form And( And( And( a,b), c), d) to And( a,b,c,d ) + # but only if there are no parse actions or resultsNames on the nested And's + # (likewise for Or's and MatchFirst's) + if ( len(self.exprs) == 2 ): + other = self.exprs[0] + if ( isinstance( other, self.__class__ ) and + not(other.parseAction) and + other.resultsName is None and + not other.debug ): + self.exprs = other.exprs[:] + [ self.exprs[1] ] + self.strRepr = None + self.mayReturnEmpty |= other.mayReturnEmpty + self.mayIndexError |= other.mayIndexError + + other = self.exprs[-1] + if ( isinstance( other, self.__class__ ) and + not(other.parseAction) and + other.resultsName is None and + not other.debug ): + self.exprs = self.exprs[:-1] + other.exprs[:] + self.strRepr = None + self.mayReturnEmpty |= other.mayReturnEmpty + self.mayIndexError |= other.mayIndexError + + self.errmsg = "Expected " + _ustr(self) + + return self + + def setResultsName( self, name, listAllMatches=False ): + ret = super(ParseExpression,self).setResultsName(name,listAllMatches) + return ret + + def validate( self, validateTrace=[] ): + tmp = validateTrace[:]+[self] + for e in self.exprs: + e.validate(tmp) + self.checkRecursion( [] ) + + def copy(self): + ret = super(ParseExpression,self).copy() + ret.exprs = [e.copy() for e in self.exprs] + return ret + +class And(ParseExpression): + """ + Requires all given C{ParseExpression}s to be found in the given order. + Expressions may be separated by whitespace. + May be constructed using the C{'+'} operator. + May also be constructed using the C{'-'} operator, which will suppress backtracking. + + Example:: + integer = Word(nums) + name_expr = OneOrMore(Word(alphas)) + + expr = And([integer("id"),name_expr("name"),integer("age")]) + # more easily written as: + expr = integer("id") + name_expr("name") + integer("age") + """ + + class _ErrorStop(Empty): + def __init__(self, *args, **kwargs): + super(And._ErrorStop,self).__init__(*args, **kwargs) + self.name = '-' + self.leaveWhitespace() + + def __init__( self, exprs, savelist = True ): + super(And,self).__init__(exprs, savelist) + self.mayReturnEmpty = all(e.mayReturnEmpty for e in self.exprs) + self.setWhitespaceChars( self.exprs[0].whiteChars ) + self.skipWhitespace = self.exprs[0].skipWhitespace + self.callPreparse = True + + def parseImpl( self, instring, loc, doActions=True ): + # pass False as last arg to _parse for first element, since we already + # pre-parsed the string as part of our And pre-parsing + loc, resultlist = self.exprs[0]._parse( instring, loc, doActions, callPreParse=False ) + errorStop = False + for e in self.exprs[1:]: + if isinstance(e, And._ErrorStop): + errorStop = True + continue + if errorStop: + try: + loc, exprtokens = e._parse( instring, loc, doActions ) + except ParseSyntaxException: + raise + except ParseBaseException as pe: + pe.__traceback__ = None + raise ParseSyntaxException._from_exception(pe) + except IndexError: + raise ParseSyntaxException(instring, len(instring), self.errmsg, self) + else: + loc, exprtokens = e._parse( instring, loc, doActions ) + if exprtokens or exprtokens.haskeys(): + resultlist += exprtokens + return loc, resultlist + + def __iadd__(self, other ): + if isinstance( other, basestring ): + other = ParserElement._literalStringClass( other ) + return self.append( other ) #And( [ self, other ] ) + + def checkRecursion( self, parseElementList ): + subRecCheckList = parseElementList[:] + [ self ] + for e in self.exprs: + e.checkRecursion( subRecCheckList ) + if not e.mayReturnEmpty: + break + + def __str__( self ): + if hasattr(self,"name"): + return self.name + + if self.strRepr is None: + self.strRepr = "{" + " ".join(_ustr(e) for e in self.exprs) + "}" + + return self.strRepr + + +class Or(ParseExpression): + """ + Requires that at least one C{ParseExpression} is found. + If two expressions match, the expression that matches the longest string will be used. + May be constructed using the C{'^'} operator. + + Example:: + # construct Or using '^' operator + + number = Word(nums) ^ Combine(Word(nums) + '.' + Word(nums)) + print(number.searchString("123 3.1416 789")) + prints:: + [['123'], ['3.1416'], ['789']] + """ + def __init__( self, exprs, savelist = False ): + super(Or,self).__init__(exprs, savelist) + if self.exprs: + self.mayReturnEmpty = any(e.mayReturnEmpty for e in self.exprs) + else: + self.mayReturnEmpty = True + + def parseImpl( self, instring, loc, doActions=True ): + maxExcLoc = -1 + maxException = None + matches = [] + for e in self.exprs: + try: + loc2 = e.tryParse( instring, loc ) + except ParseException as err: + err.__traceback__ = None + if err.loc > maxExcLoc: + maxException = err + maxExcLoc = err.loc + except IndexError: + if len(instring) > maxExcLoc: + maxException = ParseException(instring,len(instring),e.errmsg,self) + maxExcLoc = len(instring) + else: + # save match among all matches, to retry longest to shortest + matches.append((loc2, e)) + + if matches: + matches.sort(key=lambda x: -x[0]) + for _,e in matches: + try: + return e._parse( instring, loc, doActions ) + except ParseException as err: + err.__traceback__ = None + if err.loc > maxExcLoc: + maxException = err + maxExcLoc = err.loc + + if maxException is not None: + maxException.msg = self.errmsg + raise maxException + else: + raise ParseException(instring, loc, "no defined alternatives to match", self) + + + def __ixor__(self, other ): + if isinstance( other, basestring ): + other = ParserElement._literalStringClass( other ) + return self.append( other ) #Or( [ self, other ] ) + + def __str__( self ): + if hasattr(self,"name"): + return self.name + + if self.strRepr is None: + self.strRepr = "{" + " ^ ".join(_ustr(e) for e in self.exprs) + "}" + + return self.strRepr + + def checkRecursion( self, parseElementList ): + subRecCheckList = parseElementList[:] + [ self ] + for e in self.exprs: + e.checkRecursion( subRecCheckList ) + + +class MatchFirst(ParseExpression): + """ + Requires that at least one C{ParseExpression} is found. + If two expressions match, the first one listed is the one that will match. + May be constructed using the C{'|'} operator. + + Example:: + # construct MatchFirst using '|' operator + + # watch the order of expressions to match + number = Word(nums) | Combine(Word(nums) + '.' + Word(nums)) + print(number.searchString("123 3.1416 789")) # Fail! -> [['123'], ['3'], ['1416'], ['789']] + + # put more selective expression first + number = Combine(Word(nums) + '.' + Word(nums)) | Word(nums) + print(number.searchString("123 3.1416 789")) # Better -> [['123'], ['3.1416'], ['789']] + """ + def __init__( self, exprs, savelist = False ): + super(MatchFirst,self).__init__(exprs, savelist) + if self.exprs: + self.mayReturnEmpty = any(e.mayReturnEmpty for e in self.exprs) + else: + self.mayReturnEmpty = True + + def parseImpl( self, instring, loc, doActions=True ): + maxExcLoc = -1 + maxException = None + for e in self.exprs: + try: + ret = e._parse( instring, loc, doActions ) + return ret + except ParseException as err: + if err.loc > maxExcLoc: + maxException = err + maxExcLoc = err.loc + except IndexError: + if len(instring) > maxExcLoc: + maxException = ParseException(instring,len(instring),e.errmsg,self) + maxExcLoc = len(instring) + + # only got here if no expression matched, raise exception for match that made it the furthest + else: + if maxException is not None: + maxException.msg = self.errmsg + raise maxException + else: + raise ParseException(instring, loc, "no defined alternatives to match", self) + + def __ior__(self, other ): + if isinstance( other, basestring ): + other = ParserElement._literalStringClass( other ) + return self.append( other ) #MatchFirst( [ self, other ] ) + + def __str__( self ): + if hasattr(self,"name"): + return self.name + + if self.strRepr is None: + self.strRepr = "{" + " | ".join(_ustr(e) for e in self.exprs) + "}" + + return self.strRepr + + def checkRecursion( self, parseElementList ): + subRecCheckList = parseElementList[:] + [ self ] + for e in self.exprs: + e.checkRecursion( subRecCheckList ) + + +class Each(ParseExpression): + """ + Requires all given C{ParseExpression}s to be found, but in any order. + Expressions may be separated by whitespace. + May be constructed using the C{'&'} operator. + + Example:: + color = oneOf("RED ORANGE YELLOW GREEN BLUE PURPLE BLACK WHITE BROWN") + shape_type = oneOf("SQUARE CIRCLE TRIANGLE STAR HEXAGON OCTAGON") + integer = Word(nums) + shape_attr = "shape:" + shape_type("shape") + posn_attr = "posn:" + Group(integer("x") + ',' + integer("y"))("posn") + color_attr = "color:" + color("color") + size_attr = "size:" + integer("size") + + # use Each (using operator '&') to accept attributes in any order + # (shape and posn are required, color and size are optional) + shape_spec = shape_attr & posn_attr & Optional(color_attr) & Optional(size_attr) + + shape_spec.runTests(''' + shape: SQUARE color: BLACK posn: 100, 120 + shape: CIRCLE size: 50 color: BLUE posn: 50,80 + color:GREEN size:20 shape:TRIANGLE posn:20,40 + ''' + ) + prints:: + shape: SQUARE color: BLACK posn: 100, 120 + ['shape:', 'SQUARE', 'color:', 'BLACK', 'posn:', ['100', ',', '120']] + - color: BLACK + - posn: ['100', ',', '120'] + - x: 100 + - y: 120 + - shape: SQUARE + + + shape: CIRCLE size: 50 color: BLUE posn: 50,80 + ['shape:', 'CIRCLE', 'size:', '50', 'color:', 'BLUE', 'posn:', ['50', ',', '80']] + - color: BLUE + - posn: ['50', ',', '80'] + - x: 50 + - y: 80 + - shape: CIRCLE + - size: 50 + + + color: GREEN size: 20 shape: TRIANGLE posn: 20,40 + ['color:', 'GREEN', 'size:', '20', 'shape:', 'TRIANGLE', 'posn:', ['20', ',', '40']] + - color: GREEN + - posn: ['20', ',', '40'] + - x: 20 + - y: 40 + - shape: TRIANGLE + - size: 20 + """ + def __init__( self, exprs, savelist = True ): + super(Each,self).__init__(exprs, savelist) + self.mayReturnEmpty = all(e.mayReturnEmpty for e in self.exprs) + self.skipWhitespace = True + self.initExprGroups = True + + def parseImpl( self, instring, loc, doActions=True ): + if self.initExprGroups: + self.opt1map = dict((id(e.expr),e) for e in self.exprs if isinstance(e,Optional)) + opt1 = [ e.expr for e in self.exprs if isinstance(e,Optional) ] + opt2 = [ e for e in self.exprs if e.mayReturnEmpty and not isinstance(e,Optional)] + self.optionals = opt1 + opt2 + self.multioptionals = [ e.expr for e in self.exprs if isinstance(e,ZeroOrMore) ] + self.multirequired = [ e.expr for e in self.exprs if isinstance(e,OneOrMore) ] + self.required = [ e for e in self.exprs if not isinstance(e,(Optional,ZeroOrMore,OneOrMore)) ] + self.required += self.multirequired + self.initExprGroups = False + tmpLoc = loc + tmpReqd = self.required[:] + tmpOpt = self.optionals[:] + matchOrder = [] + + keepMatching = True + while keepMatching: + tmpExprs = tmpReqd + tmpOpt + self.multioptionals + self.multirequired + failed = [] + for e in tmpExprs: + try: + tmpLoc = e.tryParse( instring, tmpLoc ) + except ParseException: + failed.append(e) + else: + matchOrder.append(self.opt1map.get(id(e),e)) + if e in tmpReqd: + tmpReqd.remove(e) + elif e in tmpOpt: + tmpOpt.remove(e) + if len(failed) == len(tmpExprs): + keepMatching = False + + if tmpReqd: + missing = ", ".join(_ustr(e) for e in tmpReqd) + raise ParseException(instring,loc,"Missing one or more required elements (%s)" % missing ) + + # add any unmatched Optionals, in case they have default values defined + matchOrder += [e for e in self.exprs if isinstance(e,Optional) and e.expr in tmpOpt] + + resultlist = [] + for e in matchOrder: + loc,results = e._parse(instring,loc,doActions) + resultlist.append(results) + + finalResults = sum(resultlist, ParseResults([])) + return loc, finalResults + + def __str__( self ): + if hasattr(self,"name"): + return self.name + + if self.strRepr is None: + self.strRepr = "{" + " & ".join(_ustr(e) for e in self.exprs) + "}" + + return self.strRepr + + def checkRecursion( self, parseElementList ): + subRecCheckList = parseElementList[:] + [ self ] + for e in self.exprs: + e.checkRecursion( subRecCheckList ) + + +class ParseElementEnhance(ParserElement): + """ + Abstract subclass of C{ParserElement}, for combining and post-processing parsed tokens. + """ + def __init__( self, expr, savelist=False ): + super(ParseElementEnhance,self).__init__(savelist) + if isinstance( expr, basestring ): + if issubclass(ParserElement._literalStringClass, Token): + expr = ParserElement._literalStringClass(expr) + else: + expr = ParserElement._literalStringClass(Literal(expr)) + self.expr = expr + self.strRepr = None + if expr is not None: + self.mayIndexError = expr.mayIndexError + self.mayReturnEmpty = expr.mayReturnEmpty + self.setWhitespaceChars( expr.whiteChars ) + self.skipWhitespace = expr.skipWhitespace + self.saveAsList = expr.saveAsList + self.callPreparse = expr.callPreparse + self.ignoreExprs.extend(expr.ignoreExprs) + + def parseImpl( self, instring, loc, doActions=True ): + if self.expr is not None: + return self.expr._parse( instring, loc, doActions, callPreParse=False ) + else: + raise ParseException("",loc,self.errmsg,self) + + def leaveWhitespace( self ): + self.skipWhitespace = False + self.expr = self.expr.copy() + if self.expr is not None: + self.expr.leaveWhitespace() + return self + + def ignore( self, other ): + if isinstance( other, Suppress ): + if other not in self.ignoreExprs: + super( ParseElementEnhance, self).ignore( other ) + if self.expr is not None: + self.expr.ignore( self.ignoreExprs[-1] ) + else: + super( ParseElementEnhance, self).ignore( other ) + if self.expr is not None: + self.expr.ignore( self.ignoreExprs[-1] ) + return self + + def streamline( self ): + super(ParseElementEnhance,self).streamline() + if self.expr is not None: + self.expr.streamline() + return self + + def checkRecursion( self, parseElementList ): + if self in parseElementList: + raise RecursiveGrammarException( parseElementList+[self] ) + subRecCheckList = parseElementList[:] + [ self ] + if self.expr is not None: + self.expr.checkRecursion( subRecCheckList ) + + def validate( self, validateTrace=[] ): + tmp = validateTrace[:]+[self] + if self.expr is not None: + self.expr.validate(tmp) + self.checkRecursion( [] ) + + def __str__( self ): + try: + return super(ParseElementEnhance,self).__str__() + except Exception: + pass + + if self.strRepr is None and self.expr is not None: + self.strRepr = "%s:(%s)" % ( self.__class__.__name__, _ustr(self.expr) ) + return self.strRepr + + +class FollowedBy(ParseElementEnhance): + """ + Lookahead matching of the given parse expression. C{FollowedBy} + does I{not} advance the parsing position within the input string, it only + verifies that the specified parse expression matches at the current + position. C{FollowedBy} always returns a null token list. + + Example:: + # use FollowedBy to match a label only if it is followed by a ':' + data_word = Word(alphas) + label = data_word + FollowedBy(':') + attr_expr = Group(label + Suppress(':') + OneOrMore(data_word, stopOn=label).setParseAction(' '.join)) + + OneOrMore(attr_expr).parseString("shape: SQUARE color: BLACK posn: upper left").pprint() + prints:: + [['shape', 'SQUARE'], ['color', 'BLACK'], ['posn', 'upper left']] + """ + def __init__( self, expr ): + super(FollowedBy,self).__init__(expr) + self.mayReturnEmpty = True + + def parseImpl( self, instring, loc, doActions=True ): + self.expr.tryParse( instring, loc ) + return loc, [] + + +class NotAny(ParseElementEnhance): + """ + Lookahead to disallow matching with the given parse expression. C{NotAny} + does I{not} advance the parsing position within the input string, it only + verifies that the specified parse expression does I{not} match at the current + position. Also, C{NotAny} does I{not} skip over leading whitespace. C{NotAny} + always returns a null token list. May be constructed using the '~' operator. + + Example:: + + """ + def __init__( self, expr ): + super(NotAny,self).__init__(expr) + #~ self.leaveWhitespace() + self.skipWhitespace = False # do NOT use self.leaveWhitespace(), don't want to propagate to exprs + self.mayReturnEmpty = True + self.errmsg = "Found unwanted token, "+_ustr(self.expr) + + def parseImpl( self, instring, loc, doActions=True ): + if self.expr.canParseNext(instring, loc): + raise ParseException(instring, loc, self.errmsg, self) + return loc, [] + + def __str__( self ): + if hasattr(self,"name"): + return self.name + + if self.strRepr is None: + self.strRepr = "~{" + _ustr(self.expr) + "}" + + return self.strRepr + +class _MultipleMatch(ParseElementEnhance): + def __init__( self, expr, stopOn=None): + super(_MultipleMatch, self).__init__(expr) + self.saveAsList = True + ender = stopOn + if isinstance(ender, basestring): + ender = ParserElement._literalStringClass(ender) + self.not_ender = ~ender if ender is not None else None + + def parseImpl( self, instring, loc, doActions=True ): + self_expr_parse = self.expr._parse + self_skip_ignorables = self._skipIgnorables + check_ender = self.not_ender is not None + if check_ender: + try_not_ender = self.not_ender.tryParse + + # must be at least one (but first see if we are the stopOn sentinel; + # if so, fail) + if check_ender: + try_not_ender(instring, loc) + loc, tokens = self_expr_parse( instring, loc, doActions, callPreParse=False ) + try: + hasIgnoreExprs = (not not self.ignoreExprs) + while 1: + if check_ender: + try_not_ender(instring, loc) + if hasIgnoreExprs: + preloc = self_skip_ignorables( instring, loc ) + else: + preloc = loc + loc, tmptokens = self_expr_parse( instring, preloc, doActions ) + if tmptokens or tmptokens.haskeys(): + tokens += tmptokens + except (ParseException,IndexError): + pass + + return loc, tokens + +class OneOrMore(_MultipleMatch): + """ + Repetition of one or more of the given expression. + + Parameters: + - expr - expression that must match one or more times + - stopOn - (default=C{None}) - expression for a terminating sentinel + (only required if the sentinel would ordinarily match the repetition + expression) + + Example:: + data_word = Word(alphas) + label = data_word + FollowedBy(':') + attr_expr = Group(label + Suppress(':') + OneOrMore(data_word).setParseAction(' '.join)) + + text = "shape: SQUARE posn: upper left color: BLACK" + OneOrMore(attr_expr).parseString(text).pprint() # Fail! read 'color' as data instead of next label -> [['shape', 'SQUARE color']] + + # use stopOn attribute for OneOrMore to avoid reading label string as part of the data + attr_expr = Group(label + Suppress(':') + OneOrMore(data_word, stopOn=label).setParseAction(' '.join)) + OneOrMore(attr_expr).parseString(text).pprint() # Better -> [['shape', 'SQUARE'], ['posn', 'upper left'], ['color', 'BLACK']] + + # could also be written as + (attr_expr * (1,)).parseString(text).pprint() + """ + + def __str__( self ): + if hasattr(self,"name"): + return self.name + + if self.strRepr is None: + self.strRepr = "{" + _ustr(self.expr) + "}..." + + return self.strRepr + +class ZeroOrMore(_MultipleMatch): + """ + Optional repetition of zero or more of the given expression. + + Parameters: + - expr - expression that must match zero or more times + - stopOn - (default=C{None}) - expression for a terminating sentinel + (only required if the sentinel would ordinarily match the repetition + expression) + + Example: similar to L{OneOrMore} + """ + def __init__( self, expr, stopOn=None): + super(ZeroOrMore,self).__init__(expr, stopOn=stopOn) + self.mayReturnEmpty = True + + def parseImpl( self, instring, loc, doActions=True ): + try: + return super(ZeroOrMore, self).parseImpl(instring, loc, doActions) + except (ParseException,IndexError): + return loc, [] + + def __str__( self ): + if hasattr(self,"name"): + return self.name + + if self.strRepr is None: + self.strRepr = "[" + _ustr(self.expr) + "]..." + + return self.strRepr + +class _NullToken(object): + def __bool__(self): + return False + __nonzero__ = __bool__ + def __str__(self): + return "" + +_optionalNotMatched = _NullToken() +class Optional(ParseElementEnhance): + """ + Optional matching of the given expression. + + Parameters: + - expr - expression that must match zero or more times + - default (optional) - value to be returned if the optional expression is not found. + + Example:: + # US postal code can be a 5-digit zip, plus optional 4-digit qualifier + zip = Combine(Word(nums, exact=5) + Optional('-' + Word(nums, exact=4))) + zip.runTests(''' + # traditional ZIP code + 12345 + + # ZIP+4 form + 12101-0001 + + # invalid ZIP + 98765- + ''') + prints:: + # traditional ZIP code + 12345 + ['12345'] + + # ZIP+4 form + 12101-0001 + ['12101-0001'] + + # invalid ZIP + 98765- + ^ + FAIL: Expected end of text (at char 5), (line:1, col:6) + """ + def __init__( self, expr, default=_optionalNotMatched ): + super(Optional,self).__init__( expr, savelist=False ) + self.saveAsList = self.expr.saveAsList + self.defaultValue = default + self.mayReturnEmpty = True + + def parseImpl( self, instring, loc, doActions=True ): + try: + loc, tokens = self.expr._parse( instring, loc, doActions, callPreParse=False ) + except (ParseException,IndexError): + if self.defaultValue is not _optionalNotMatched: + if self.expr.resultsName: + tokens = ParseResults([ self.defaultValue ]) + tokens[self.expr.resultsName] = self.defaultValue + else: + tokens = [ self.defaultValue ] + else: + tokens = [] + return loc, tokens + + def __str__( self ): + if hasattr(self,"name"): + return self.name + + if self.strRepr is None: + self.strRepr = "[" + _ustr(self.expr) + "]" + + return self.strRepr + +class SkipTo(ParseElementEnhance): + """ + Token for skipping over all undefined text until the matched expression is found. + + Parameters: + - expr - target expression marking the end of the data to be skipped + - include - (default=C{False}) if True, the target expression is also parsed + (the skipped text and target expression are returned as a 2-element list). + - ignore - (default=C{None}) used to define grammars (typically quoted strings and + comments) that might contain false matches to the target expression + - failOn - (default=C{None}) define expressions that are not allowed to be + included in the skipped test; if found before the target expression is found, + the SkipTo is not a match + + Example:: + report = ''' + Outstanding Issues Report - 1 Jan 2000 + + # | Severity | Description | Days Open + -----+----------+-------------------------------------------+----------- + 101 | Critical | Intermittent system crash | 6 + 94 | Cosmetic | Spelling error on Login ('log|n') | 14 + 79 | Minor | System slow when running too many reports | 47 + ''' + integer = Word(nums) + SEP = Suppress('|') + # use SkipTo to simply match everything up until the next SEP + # - ignore quoted strings, so that a '|' character inside a quoted string does not match + # - parse action will call token.strip() for each matched token, i.e., the description body + string_data = SkipTo(SEP, ignore=quotedString) + string_data.setParseAction(tokenMap(str.strip)) + ticket_expr = (integer("issue_num") + SEP + + string_data("sev") + SEP + + string_data("desc") + SEP + + integer("days_open")) + + for tkt in ticket_expr.searchString(report): + print tkt.dump() + prints:: + ['101', 'Critical', 'Intermittent system crash', '6'] + - days_open: 6 + - desc: Intermittent system crash + - issue_num: 101 + - sev: Critical + ['94', 'Cosmetic', "Spelling error on Login ('log|n')", '14'] + - days_open: 14 + - desc: Spelling error on Login ('log|n') + - issue_num: 94 + - sev: Cosmetic + ['79', 'Minor', 'System slow when running too many reports', '47'] + - days_open: 47 + - desc: System slow when running too many reports + - issue_num: 79 + - sev: Minor + """ + def __init__( self, other, include=False, ignore=None, failOn=None ): + super( SkipTo, self ).__init__( other ) + self.ignoreExpr = ignore + self.mayReturnEmpty = True + self.mayIndexError = False + self.includeMatch = include + self.asList = False + if isinstance(failOn, basestring): + self.failOn = ParserElement._literalStringClass(failOn) + else: + self.failOn = failOn + self.errmsg = "No match found for "+_ustr(self.expr) + + def parseImpl( self, instring, loc, doActions=True ): + startloc = loc + instrlen = len(instring) + expr = self.expr + expr_parse = self.expr._parse + self_failOn_canParseNext = self.failOn.canParseNext if self.failOn is not None else None + self_ignoreExpr_tryParse = self.ignoreExpr.tryParse if self.ignoreExpr is not None else None + + tmploc = loc + while tmploc <= instrlen: + if self_failOn_canParseNext is not None: + # break if failOn expression matches + if self_failOn_canParseNext(instring, tmploc): + break + + if self_ignoreExpr_tryParse is not None: + # advance past ignore expressions + while 1: + try: + tmploc = self_ignoreExpr_tryParse(instring, tmploc) + except ParseBaseException: + break + + try: + expr_parse(instring, tmploc, doActions=False, callPreParse=False) + except (ParseException, IndexError): + # no match, advance loc in string + tmploc += 1 + else: + # matched skipto expr, done + break + + else: + # ran off the end of the input string without matching skipto expr, fail + raise ParseException(instring, loc, self.errmsg, self) + + # build up return values + loc = tmploc + skiptext = instring[startloc:loc] + skipresult = ParseResults(skiptext) + + if self.includeMatch: + loc, mat = expr_parse(instring,loc,doActions,callPreParse=False) + skipresult += mat + + return loc, skipresult + +class Forward(ParseElementEnhance): + """ + Forward declaration of an expression to be defined later - + used for recursive grammars, such as algebraic infix notation. + When the expression is known, it is assigned to the C{Forward} variable using the '<<' operator. + + Note: take care when assigning to C{Forward} not to overlook precedence of operators. + Specifically, '|' has a lower precedence than '<<', so that:: + fwdExpr << a | b | c + will actually be evaluated as:: + (fwdExpr << a) | b | c + thereby leaving b and c out as parseable alternatives. It is recommended that you + explicitly group the values inserted into the C{Forward}:: + fwdExpr << (a | b | c) + Converting to use the '<<=' operator instead will avoid this problem. + + See L{ParseResults.pprint} for an example of a recursive parser created using + C{Forward}. + """ + def __init__( self, other=None ): + super(Forward,self).__init__( other, savelist=False ) + + def __lshift__( self, other ): + if isinstance( other, basestring ): + other = ParserElement._literalStringClass(other) + self.expr = other + self.strRepr = None + self.mayIndexError = self.expr.mayIndexError + self.mayReturnEmpty = self.expr.mayReturnEmpty + self.setWhitespaceChars( self.expr.whiteChars ) + self.skipWhitespace = self.expr.skipWhitespace + self.saveAsList = self.expr.saveAsList + self.ignoreExprs.extend(self.expr.ignoreExprs) + return self + + def __ilshift__(self, other): + return self << other + + def leaveWhitespace( self ): + self.skipWhitespace = False + return self + + def streamline( self ): + if not self.streamlined: + self.streamlined = True + if self.expr is not None: + self.expr.streamline() + return self + + def validate( self, validateTrace=[] ): + if self not in validateTrace: + tmp = validateTrace[:]+[self] + if self.expr is not None: + self.expr.validate(tmp) + self.checkRecursion([]) + + def __str__( self ): + if hasattr(self,"name"): + return self.name + return self.__class__.__name__ + ": ..." + + # stubbed out for now - creates awful memory and perf issues + self._revertClass = self.__class__ + self.__class__ = _ForwardNoRecurse + try: + if self.expr is not None: + retString = _ustr(self.expr) + else: + retString = "None" + finally: + self.__class__ = self._revertClass + return self.__class__.__name__ + ": " + retString + + def copy(self): + if self.expr is not None: + return super(Forward,self).copy() + else: + ret = Forward() + ret <<= self + return ret + +class _ForwardNoRecurse(Forward): + def __str__( self ): + return "..." + +class TokenConverter(ParseElementEnhance): + """ + Abstract subclass of C{ParseExpression}, for converting parsed results. + """ + def __init__( self, expr, savelist=False ): + super(TokenConverter,self).__init__( expr )#, savelist ) + self.saveAsList = False + +class Combine(TokenConverter): + """ + Converter to concatenate all matching tokens to a single string. + By default, the matching patterns must also be contiguous in the input string; + this can be disabled by specifying C{'adjacent=False'} in the constructor. + + Example:: + real = Word(nums) + '.' + Word(nums) + print(real.parseString('3.1416')) # -> ['3', '.', '1416'] + # will also erroneously match the following + print(real.parseString('3. 1416')) # -> ['3', '.', '1416'] + + real = Combine(Word(nums) + '.' + Word(nums)) + print(real.parseString('3.1416')) # -> ['3.1416'] + # no match when there are internal spaces + print(real.parseString('3. 1416')) # -> Exception: Expected W:(0123...) + """ + def __init__( self, expr, joinString="", adjacent=True ): + super(Combine,self).__init__( expr ) + # suppress whitespace-stripping in contained parse expressions, but re-enable it on the Combine itself + if adjacent: + self.leaveWhitespace() + self.adjacent = adjacent + self.skipWhitespace = True + self.joinString = joinString + self.callPreparse = True + + def ignore( self, other ): + if self.adjacent: + ParserElement.ignore(self, other) + else: + super( Combine, self).ignore( other ) + return self + + def postParse( self, instring, loc, tokenlist ): + retToks = tokenlist.copy() + del retToks[:] + retToks += ParseResults([ "".join(tokenlist._asStringList(self.joinString)) ], modal=self.modalResults) + + if self.resultsName and retToks.haskeys(): + return [ retToks ] + else: + return retToks + +class Group(TokenConverter): + """ + Converter to return the matched tokens as a list - useful for returning tokens of C{L{ZeroOrMore}} and C{L{OneOrMore}} expressions. + + Example:: + ident = Word(alphas) + num = Word(nums) + term = ident | num + func = ident + Optional(delimitedList(term)) + print(func.parseString("fn a,b,100")) # -> ['fn', 'a', 'b', '100'] + + func = ident + Group(Optional(delimitedList(term))) + print(func.parseString("fn a,b,100")) # -> ['fn', ['a', 'b', '100']] + """ + def __init__( self, expr ): + super(Group,self).__init__( expr ) + self.saveAsList = True + + def postParse( self, instring, loc, tokenlist ): + return [ tokenlist ] + +class Dict(TokenConverter): + """ + Converter to return a repetitive expression as a list, but also as a dictionary. + Each element can also be referenced using the first token in the expression as its key. + Useful for tabular report scraping when the first column can be used as a item key. + + Example:: + data_word = Word(alphas) + label = data_word + FollowedBy(':') + attr_expr = Group(label + Suppress(':') + OneOrMore(data_word).setParseAction(' '.join)) + + text = "shape: SQUARE posn: upper left color: light blue texture: burlap" + attr_expr = (label + Suppress(':') + OneOrMore(data_word, stopOn=label).setParseAction(' '.join)) + + # print attributes as plain groups + print(OneOrMore(attr_expr).parseString(text).dump()) + + # instead of OneOrMore(expr), parse using Dict(OneOrMore(Group(expr))) - Dict will auto-assign names + result = Dict(OneOrMore(Group(attr_expr))).parseString(text) + print(result.dump()) + + # access named fields as dict entries, or output as dict + print(result['shape']) + print(result.asDict()) + prints:: + ['shape', 'SQUARE', 'posn', 'upper left', 'color', 'light blue', 'texture', 'burlap'] + + [['shape', 'SQUARE'], ['posn', 'upper left'], ['color', 'light blue'], ['texture', 'burlap']] + - color: light blue + - posn: upper left + - shape: SQUARE + - texture: burlap + SQUARE + {'color': 'light blue', 'posn': 'upper left', 'texture': 'burlap', 'shape': 'SQUARE'} + See more examples at L{ParseResults} of accessing fields by results name. + """ + def __init__( self, expr ): + super(Dict,self).__init__( expr ) + self.saveAsList = True + + def postParse( self, instring, loc, tokenlist ): + for i,tok in enumerate(tokenlist): + if len(tok) == 0: + continue + ikey = tok[0] + if isinstance(ikey,int): + ikey = _ustr(tok[0]).strip() + if len(tok)==1: + tokenlist[ikey] = _ParseResultsWithOffset("",i) + elif len(tok)==2 and not isinstance(tok[1],ParseResults): + tokenlist[ikey] = _ParseResultsWithOffset(tok[1],i) + else: + dictvalue = tok.copy() #ParseResults(i) + del dictvalue[0] + if len(dictvalue)!= 1 or (isinstance(dictvalue,ParseResults) and dictvalue.haskeys()): + tokenlist[ikey] = _ParseResultsWithOffset(dictvalue,i) + else: + tokenlist[ikey] = _ParseResultsWithOffset(dictvalue[0],i) + + if self.resultsName: + return [ tokenlist ] + else: + return tokenlist + + +class Suppress(TokenConverter): + """ + Converter for ignoring the results of a parsed expression. + + Example:: + source = "a, b, c,d" + wd = Word(alphas) + wd_list1 = wd + ZeroOrMore(',' + wd) + print(wd_list1.parseString(source)) + + # often, delimiters that are useful during parsing are just in the + # way afterward - use Suppress to keep them out of the parsed output + wd_list2 = wd + ZeroOrMore(Suppress(',') + wd) + print(wd_list2.parseString(source)) + prints:: + ['a', ',', 'b', ',', 'c', ',', 'd'] + ['a', 'b', 'c', 'd'] + (See also L{delimitedList}.) + """ + def postParse( self, instring, loc, tokenlist ): + return [] + + def suppress( self ): + return self + + +class OnlyOnce(object): + """ + Wrapper for parse actions, to ensure they are only called once. + """ + def __init__(self, methodCall): + self.callable = _trim_arity(methodCall) + self.called = False + def __call__(self,s,l,t): + if not self.called: + results = self.callable(s,l,t) + self.called = True + return results + raise ParseException(s,l,"") + def reset(self): + self.called = False + +def traceParseAction(f): + """ + Decorator for debugging parse actions. + + When the parse action is called, this decorator will print C{">> entering I{method-name}(line:I{current_source_line}, I{parse_location}, I{matched_tokens})".} + When the parse action completes, the decorator will print C{"<<"} followed by the returned value, or any exception that the parse action raised. + + Example:: + wd = Word(alphas) + + @traceParseAction + def remove_duplicate_chars(tokens): + return ''.join(sorted(set(''.join(tokens))) + + wds = OneOrMore(wd).setParseAction(remove_duplicate_chars) + print(wds.parseString("slkdjs sld sldd sdlf sdljf")) + prints:: + >>entering remove_duplicate_chars(line: 'slkdjs sld sldd sdlf sdljf', 0, (['slkdjs', 'sld', 'sldd', 'sdlf', 'sdljf'], {})) + <<leaving remove_duplicate_chars (ret: 'dfjkls') + ['dfjkls'] + """ + f = _trim_arity(f) + def z(*paArgs): + thisFunc = f.__name__ + s,l,t = paArgs[-3:] + if len(paArgs)>3: + thisFunc = paArgs[0].__class__.__name__ + '.' + thisFunc + sys.stderr.write( ">>entering %s(line: '%s', %d, %r)\n" % (thisFunc,line(l,s),l,t) ) + try: + ret = f(*paArgs) + except Exception as exc: + sys.stderr.write( "<<leaving %s (exception: %s)\n" % (thisFunc,exc) ) + raise + sys.stderr.write( "<<leaving %s (ret: %r)\n" % (thisFunc,ret) ) + return ret + try: + z.__name__ = f.__name__ + except AttributeError: + pass + return z + +# +# global helpers +# +def delimitedList( expr, delim=",", combine=False ): + """ + Helper to define a delimited list of expressions - the delimiter defaults to ','. + By default, the list elements and delimiters can have intervening whitespace, and + comments, but this can be overridden by passing C{combine=True} in the constructor. + If C{combine} is set to C{True}, the matching tokens are returned as a single token + string, with the delimiters included; otherwise, the matching tokens are returned + as a list of tokens, with the delimiters suppressed. + + Example:: + delimitedList(Word(alphas)).parseString("aa,bb,cc") # -> ['aa', 'bb', 'cc'] + delimitedList(Word(hexnums), delim=':', combine=True).parseString("AA:BB:CC:DD:EE") # -> ['AA:BB:CC:DD:EE'] + """ + dlName = _ustr(expr)+" ["+_ustr(delim)+" "+_ustr(expr)+"]..." + if combine: + return Combine( expr + ZeroOrMore( delim + expr ) ).setName(dlName) + else: + return ( expr + ZeroOrMore( Suppress( delim ) + expr ) ).setName(dlName) + +def countedArray( expr, intExpr=None ): + """ + Helper to define a counted list of expressions. + This helper defines a pattern of the form:: + integer expr expr expr... + where the leading integer tells how many expr expressions follow. + The matched tokens returns the array of expr tokens as a list - the leading count token is suppressed. + + If C{intExpr} is specified, it should be a pyparsing expression that produces an integer value. + + Example:: + countedArray(Word(alphas)).parseString('2 ab cd ef') # -> ['ab', 'cd'] + + # in this parser, the leading integer value is given in binary, + # '10' indicating that 2 values are in the array + binaryConstant = Word('01').setParseAction(lambda t: int(t[0], 2)) + countedArray(Word(alphas), intExpr=binaryConstant).parseString('10 ab cd ef') # -> ['ab', 'cd'] + """ + arrayExpr = Forward() + def countFieldParseAction(s,l,t): + n = t[0] + arrayExpr << (n and Group(And([expr]*n)) or Group(empty)) + return [] + if intExpr is None: + intExpr = Word(nums).setParseAction(lambda t:int(t[0])) + else: + intExpr = intExpr.copy() + intExpr.setName("arrayLen") + intExpr.addParseAction(countFieldParseAction, callDuringTry=True) + return ( intExpr + arrayExpr ).setName('(len) ' + _ustr(expr) + '...') + +def _flatten(L): + ret = [] + for i in L: + if isinstance(i,list): + ret.extend(_flatten(i)) + else: + ret.append(i) + return ret + +def matchPreviousLiteral(expr): + """ + Helper to define an expression that is indirectly defined from + the tokens matched in a previous expression, that is, it looks + for a 'repeat' of a previous expression. For example:: + first = Word(nums) + second = matchPreviousLiteral(first) + matchExpr = first + ":" + second + will match C{"1:1"}, but not C{"1:2"}. Because this matches a + previous literal, will also match the leading C{"1:1"} in C{"1:10"}. + If this is not desired, use C{matchPreviousExpr}. + Do I{not} use with packrat parsing enabled. + """ + rep = Forward() + def copyTokenToRepeater(s,l,t): + if t: + if len(t) == 1: + rep << t[0] + else: + # flatten t tokens + tflat = _flatten(t.asList()) + rep << And(Literal(tt) for tt in tflat) + else: + rep << Empty() + expr.addParseAction(copyTokenToRepeater, callDuringTry=True) + rep.setName('(prev) ' + _ustr(expr)) + return rep + +def matchPreviousExpr(expr): + """ + Helper to define an expression that is indirectly defined from + the tokens matched in a previous expression, that is, it looks + for a 'repeat' of a previous expression. For example:: + first = Word(nums) + second = matchPreviousExpr(first) + matchExpr = first + ":" + second + will match C{"1:1"}, but not C{"1:2"}. Because this matches by + expressions, will I{not} match the leading C{"1:1"} in C{"1:10"}; + the expressions are evaluated first, and then compared, so + C{"1"} is compared with C{"10"}. + Do I{not} use with packrat parsing enabled. + """ + rep = Forward() + e2 = expr.copy() + rep <<= e2 + def copyTokenToRepeater(s,l,t): + matchTokens = _flatten(t.asList()) + def mustMatchTheseTokens(s,l,t): + theseTokens = _flatten(t.asList()) + if theseTokens != matchTokens: + raise ParseException("",0,"") + rep.setParseAction( mustMatchTheseTokens, callDuringTry=True ) + expr.addParseAction(copyTokenToRepeater, callDuringTry=True) + rep.setName('(prev) ' + _ustr(expr)) + return rep + +def _escapeRegexRangeChars(s): + #~ escape these chars: ^-] + for c in r"\^-]": + s = s.replace(c,_bslash+c) + s = s.replace("\n",r"\n") + s = s.replace("\t",r"\t") + return _ustr(s) + +def oneOf( strs, caseless=False, useRegex=True ): + """ + Helper to quickly define a set of alternative Literals, and makes sure to do + longest-first testing when there is a conflict, regardless of the input order, + but returns a C{L{MatchFirst}} for best performance. + + Parameters: + - strs - a string of space-delimited literals, or a collection of string literals + - caseless - (default=C{False}) - treat all literals as caseless + - useRegex - (default=C{True}) - as an optimization, will generate a Regex + object; otherwise, will generate a C{MatchFirst} object (if C{caseless=True}, or + if creating a C{Regex} raises an exception) + + Example:: + comp_oper = oneOf("< = > <= >= !=") + var = Word(alphas) + number = Word(nums) + term = var | number + comparison_expr = term + comp_oper + term + print(comparison_expr.searchString("B = 12 AA=23 B<=AA AA>12")) + prints:: + [['B', '=', '12'], ['AA', '=', '23'], ['B', '<=', 'AA'], ['AA', '>', '12']] + """ + if caseless: + isequal = ( lambda a,b: a.upper() == b.upper() ) + masks = ( lambda a,b: b.upper().startswith(a.upper()) ) + parseElementClass = CaselessLiteral + else: + isequal = ( lambda a,b: a == b ) + masks = ( lambda a,b: b.startswith(a) ) + parseElementClass = Literal + + symbols = [] + if isinstance(strs,basestring): + symbols = strs.split() + elif isinstance(strs, collections.Iterable): + symbols = list(strs) + else: + warnings.warn("Invalid argument to oneOf, expected string or iterable", + SyntaxWarning, stacklevel=2) + if not symbols: + return NoMatch() + + i = 0 + while i < len(symbols)-1: + cur = symbols[i] + for j,other in enumerate(symbols[i+1:]): + if ( isequal(other, cur) ): + del symbols[i+j+1] + break + elif ( masks(cur, other) ): + del symbols[i+j+1] + symbols.insert(i,other) + cur = other + break + else: + i += 1 + + if not caseless and useRegex: + #~ print (strs,"->", "|".join( [ _escapeRegexChars(sym) for sym in symbols] )) + try: + if len(symbols)==len("".join(symbols)): + return Regex( "[%s]" % "".join(_escapeRegexRangeChars(sym) for sym in symbols) ).setName(' | '.join(symbols)) + else: + return Regex( "|".join(re.escape(sym) for sym in symbols) ).setName(' | '.join(symbols)) + except Exception: + warnings.warn("Exception creating Regex for oneOf, building MatchFirst", + SyntaxWarning, stacklevel=2) + + + # last resort, just use MatchFirst + return MatchFirst(parseElementClass(sym) for sym in symbols).setName(' | '.join(symbols)) + +def dictOf( key, value ): + """ + Helper to easily and clearly define a dictionary by specifying the respective patterns + for the key and value. Takes care of defining the C{L{Dict}}, C{L{ZeroOrMore}}, and C{L{Group}} tokens + in the proper order. The key pattern can include delimiting markers or punctuation, + as long as they are suppressed, thereby leaving the significant key text. The value + pattern can include named results, so that the C{Dict} results can include named token + fields. + + Example:: + text = "shape: SQUARE posn: upper left color: light blue texture: burlap" + attr_expr = (label + Suppress(':') + OneOrMore(data_word, stopOn=label).setParseAction(' '.join)) + print(OneOrMore(attr_expr).parseString(text).dump()) + + attr_label = label + attr_value = Suppress(':') + OneOrMore(data_word, stopOn=label).setParseAction(' '.join) + + # similar to Dict, but simpler call format + result = dictOf(attr_label, attr_value).parseString(text) + print(result.dump()) + print(result['shape']) + print(result.shape) # object attribute access works too + print(result.asDict()) + prints:: + [['shape', 'SQUARE'], ['posn', 'upper left'], ['color', 'light blue'], ['texture', 'burlap']] + - color: light blue + - posn: upper left + - shape: SQUARE + - texture: burlap + SQUARE + SQUARE + {'color': 'light blue', 'shape': 'SQUARE', 'posn': 'upper left', 'texture': 'burlap'} + """ + return Dict( ZeroOrMore( Group ( key + value ) ) ) + +def originalTextFor(expr, asString=True): + """ + Helper to return the original, untokenized text for a given expression. Useful to + restore the parsed fields of an HTML start tag into the raw tag text itself, or to + revert separate tokens with intervening whitespace back to the original matching + input text. By default, returns astring containing the original parsed text. + + If the optional C{asString} argument is passed as C{False}, then the return value is a + C{L{ParseResults}} containing any results names that were originally matched, and a + single token containing the original matched text from the input string. So if + the expression passed to C{L{originalTextFor}} contains expressions with defined + results names, you must set C{asString} to C{False} if you want to preserve those + results name values. + + Example:: + src = "this is test <b> bold <i>text</i> </b> normal text " + for tag in ("b","i"): + opener,closer = makeHTMLTags(tag) + patt = originalTextFor(opener + SkipTo(closer) + closer) + print(patt.searchString(src)[0]) + prints:: + ['<b> bold <i>text</i> </b>'] + ['<i>text</i>'] + """ + locMarker = Empty().setParseAction(lambda s,loc,t: loc) + endlocMarker = locMarker.copy() + endlocMarker.callPreparse = False + matchExpr = locMarker("_original_start") + expr + endlocMarker("_original_end") + if asString: + extractText = lambda s,l,t: s[t._original_start:t._original_end] + else: + def extractText(s,l,t): + t[:] = [s[t.pop('_original_start'):t.pop('_original_end')]] + matchExpr.setParseAction(extractText) + matchExpr.ignoreExprs = expr.ignoreExprs + return matchExpr + +def ungroup(expr): + """ + Helper to undo pyparsing's default grouping of And expressions, even + if all but one are non-empty. + """ + return TokenConverter(expr).setParseAction(lambda t:t[0]) + +def locatedExpr(expr): + """ + Helper to decorate a returned token with its starting and ending locations in the input string. + This helper adds the following results names: + - locn_start = location where matched expression begins + - locn_end = location where matched expression ends + - value = the actual parsed results + + Be careful if the input text contains C{<TAB>} characters, you may want to call + C{L{ParserElement.parseWithTabs}} + + Example:: + wd = Word(alphas) + for match in locatedExpr(wd).searchString("ljsdf123lksdjjf123lkkjj1222"): + print(match) + prints:: + [[0, 'ljsdf', 5]] + [[8, 'lksdjjf', 15]] + [[18, 'lkkjj', 23]] + """ + locator = Empty().setParseAction(lambda s,l,t: l) + return Group(locator("locn_start") + expr("value") + locator.copy().leaveWhitespace()("locn_end")) + + +# convenience constants for positional expressions +empty = Empty().setName("empty") +lineStart = LineStart().setName("lineStart") +lineEnd = LineEnd().setName("lineEnd") +stringStart = StringStart().setName("stringStart") +stringEnd = StringEnd().setName("stringEnd") + +_escapedPunc = Word( _bslash, r"\[]-*.$+^?()~ ", exact=2 ).setParseAction(lambda s,l,t:t[0][1]) +_escapedHexChar = Regex(r"\\0?[xX][0-9a-fA-F]+").setParseAction(lambda s,l,t:unichr(int(t[0].lstrip(r'\0x'),16))) +_escapedOctChar = Regex(r"\\0[0-7]+").setParseAction(lambda s,l,t:unichr(int(t[0][1:],8))) +_singleChar = _escapedPunc | _escapedHexChar | _escapedOctChar | Word(printables, excludeChars=r'\]', exact=1) | Regex(r"\w", re.UNICODE) +_charRange = Group(_singleChar + Suppress("-") + _singleChar) +_reBracketExpr = Literal("[") + Optional("^").setResultsName("negate") + Group( OneOrMore( _charRange | _singleChar ) ).setResultsName("body") + "]" + +def srange(s): + r""" + Helper to easily define string ranges for use in Word construction. Borrows + syntax from regexp '[]' string range definitions:: + srange("[0-9]") -> "0123456789" + srange("[a-z]") -> "abcdefghijklmnopqrstuvwxyz" + srange("[a-z$_]") -> "abcdefghijklmnopqrstuvwxyz$_" + The input string must be enclosed in []'s, and the returned string is the expanded + character set joined into a single string. + The values enclosed in the []'s may be: + - a single character + - an escaped character with a leading backslash (such as C{\-} or C{\]}) + - an escaped hex character with a leading C{'\x'} (C{\x21}, which is a C{'!'} character) + (C{\0x##} is also supported for backwards compatibility) + - an escaped octal character with a leading C{'\0'} (C{\041}, which is a C{'!'} character) + - a range of any of the above, separated by a dash (C{'a-z'}, etc.) + - any combination of the above (C{'aeiouy'}, C{'a-zA-Z0-9_$'}, etc.) + """ + _expanded = lambda p: p if not isinstance(p,ParseResults) else ''.join(unichr(c) for c in range(ord(p[0]),ord(p[1])+1)) + try: + return "".join(_expanded(part) for part in _reBracketExpr.parseString(s).body) + except Exception: + return "" + +def matchOnlyAtCol(n): + """ + Helper method for defining parse actions that require matching at a specific + column in the input text. + """ + def verifyCol(strg,locn,toks): + if col(locn,strg) != n: + raise ParseException(strg,locn,"matched token not at column %d" % n) + return verifyCol + +def replaceWith(replStr): + """ + Helper method for common parse actions that simply return a literal value. Especially + useful when used with C{L{transformString<ParserElement.transformString>}()}. + + Example:: + num = Word(nums).setParseAction(lambda toks: int(toks[0])) + na = oneOf("N/A NA").setParseAction(replaceWith(math.nan)) + term = na | num + + OneOrMore(term).parseString("324 234 N/A 234") # -> [324, 234, nan, 234] + """ + return lambda s,l,t: [replStr] + +def removeQuotes(s,l,t): + """ + Helper parse action for removing quotation marks from parsed quoted strings. + + Example:: + # by default, quotation marks are included in parsed results + quotedString.parseString("'Now is the Winter of our Discontent'") # -> ["'Now is the Winter of our Discontent'"] + + # use removeQuotes to strip quotation marks from parsed results + quotedString.setParseAction(removeQuotes) + quotedString.parseString("'Now is the Winter of our Discontent'") # -> ["Now is the Winter of our Discontent"] + """ + return t[0][1:-1] + +def tokenMap(func, *args): + """ + Helper to define a parse action by mapping a function to all elements of a ParseResults list.If any additional + args are passed, they are forwarded to the given function as additional arguments after + the token, as in C{hex_integer = Word(hexnums).setParseAction(tokenMap(int, 16))}, which will convert the + parsed data to an integer using base 16. + + Example (compare the last to example in L{ParserElement.transformString}:: + hex_ints = OneOrMore(Word(hexnums)).setParseAction(tokenMap(int, 16)) + hex_ints.runTests(''' + 00 11 22 aa FF 0a 0d 1a + ''') + + upperword = Word(alphas).setParseAction(tokenMap(str.upper)) + OneOrMore(upperword).runTests(''' + my kingdom for a horse + ''') + + wd = Word(alphas).setParseAction(tokenMap(str.title)) + OneOrMore(wd).setParseAction(' '.join).runTests(''' + now is the winter of our discontent made glorious summer by this sun of york + ''') + prints:: + 00 11 22 aa FF 0a 0d 1a + [0, 17, 34, 170, 255, 10, 13, 26] + + my kingdom for a horse + ['MY', 'KINGDOM', 'FOR', 'A', 'HORSE'] + + now is the winter of our discontent made glorious summer by this sun of york + ['Now Is The Winter Of Our Discontent Made Glorious Summer By This Sun Of York'] + """ + def pa(s,l,t): + return [func(tokn, *args) for tokn in t] + + try: + func_name = getattr(func, '__name__', + getattr(func, '__class__').__name__) + except Exception: + func_name = str(func) + pa.__name__ = func_name + + return pa + +upcaseTokens = tokenMap(lambda t: _ustr(t).upper()) +"""(Deprecated) Helper parse action to convert tokens to upper case. Deprecated in favor of L{pyparsing_common.upcaseTokens}""" + +downcaseTokens = tokenMap(lambda t: _ustr(t).lower()) +"""(Deprecated) Helper parse action to convert tokens to lower case. Deprecated in favor of L{pyparsing_common.downcaseTokens}""" + +def _makeTags(tagStr, xml): + """Internal helper to construct opening and closing tag expressions, given a tag name""" + if isinstance(tagStr,basestring): + resname = tagStr + tagStr = Keyword(tagStr, caseless=not xml) + else: + resname = tagStr.name + + tagAttrName = Word(alphas,alphanums+"_-:") + if (xml): + tagAttrValue = dblQuotedString.copy().setParseAction( removeQuotes ) + openTag = Suppress("<") + tagStr("tag") + \ + Dict(ZeroOrMore(Group( tagAttrName + Suppress("=") + tagAttrValue ))) + \ + Optional("/",default=[False]).setResultsName("empty").setParseAction(lambda s,l,t:t[0]=='/') + Suppress(">") + else: + printablesLessRAbrack = "".join(c for c in printables if c not in ">") + tagAttrValue = quotedString.copy().setParseAction( removeQuotes ) | Word(printablesLessRAbrack) + openTag = Suppress("<") + tagStr("tag") + \ + Dict(ZeroOrMore(Group( tagAttrName.setParseAction(downcaseTokens) + \ + Optional( Suppress("=") + tagAttrValue ) ))) + \ + Optional("/",default=[False]).setResultsName("empty").setParseAction(lambda s,l,t:t[0]=='/') + Suppress(">") + closeTag = Combine(_L("</") + tagStr + ">") + + openTag = openTag.setResultsName("start"+"".join(resname.replace(":"," ").title().split())).setName("<%s>" % resname) + closeTag = closeTag.setResultsName("end"+"".join(resname.replace(":"," ").title().split())).setName("</%s>" % resname) + openTag.tag = resname + closeTag.tag = resname + return openTag, closeTag + +def makeHTMLTags(tagStr): + """ + Helper to construct opening and closing tag expressions for HTML, given a tag name. Matches + tags in either upper or lower case, attributes with namespaces and with quoted or unquoted values. + + Example:: + text = '<td>More info at the <a href="http://pyparsing.wikispaces.com">pyparsing</a> wiki page</td>' + # makeHTMLTags returns pyparsing expressions for the opening and closing tags as a 2-tuple + a,a_end = makeHTMLTags("A") + link_expr = a + SkipTo(a_end)("link_text") + a_end + + for link in link_expr.searchString(text): + # attributes in the <A> tag (like "href" shown here) are also accessible as named results + print(link.link_text, '->', link.href) + prints:: + pyparsing -> http://pyparsing.wikispaces.com + """ + return _makeTags( tagStr, False ) + +def makeXMLTags(tagStr): + """ + Helper to construct opening and closing tag expressions for XML, given a tag name. Matches + tags only in the given upper/lower case. + + Example: similar to L{makeHTMLTags} + """ + return _makeTags( tagStr, True ) + +def withAttribute(*args,**attrDict): + """ + Helper to create a validating parse action to be used with start tags created + with C{L{makeXMLTags}} or C{L{makeHTMLTags}}. Use C{withAttribute} to qualify a starting tag + with a required attribute value, to avoid false matches on common tags such as + C{<TD>} or C{<DIV>}. + + Call C{withAttribute} with a series of attribute names and values. Specify the list + of filter attributes names and values as: + - keyword arguments, as in C{(align="right")}, or + - as an explicit dict with C{**} operator, when an attribute name is also a Python + reserved word, as in C{**{"class":"Customer", "align":"right"}} + - a list of name-value tuples, as in ( ("ns1:class", "Customer"), ("ns2:align","right") ) + For attribute names with a namespace prefix, you must use the second form. Attribute + names are matched insensitive to upper/lower case. + + If just testing for C{class} (with or without a namespace), use C{L{withClass}}. + + To verify that the attribute exists, but without specifying a value, pass + C{withAttribute.ANY_VALUE} as the value. + + Example:: + html = ''' + <div> + Some text + <div type="grid">1 4 0 1 0</div> + <div type="graph">1,3 2,3 1,1</div> + <div>this has no type</div> + </div> + + ''' + div,div_end = makeHTMLTags("div") + + # only match div tag having a type attribute with value "grid" + div_grid = div().setParseAction(withAttribute(type="grid")) + grid_expr = div_grid + SkipTo(div | div_end)("body") + for grid_header in grid_expr.searchString(html): + print(grid_header.body) + + # construct a match with any div tag having a type attribute, regardless of the value + div_any_type = div().setParseAction(withAttribute(type=withAttribute.ANY_VALUE)) + div_expr = div_any_type + SkipTo(div | div_end)("body") + for div_header in div_expr.searchString(html): + print(div_header.body) + prints:: + 1 4 0 1 0 + + 1 4 0 1 0 + 1,3 2,3 1,1 + """ + if args: + attrs = args[:] + else: + attrs = attrDict.items() + attrs = [(k,v) for k,v in attrs] + def pa(s,l,tokens): + for attrName,attrValue in attrs: + if attrName not in tokens: + raise ParseException(s,l,"no matching attribute " + attrName) + if attrValue != withAttribute.ANY_VALUE and tokens[attrName] != attrValue: + raise ParseException(s,l,"attribute '%s' has value '%s', must be '%s'" % + (attrName, tokens[attrName], attrValue)) + return pa +withAttribute.ANY_VALUE = object() + +def withClass(classname, namespace=''): + """ + Simplified version of C{L{withAttribute}} when matching on a div class - made + difficult because C{class} is a reserved word in Python. + + Example:: + html = ''' + <div> + Some text + <div class="grid">1 4 0 1 0</div> + <div class="graph">1,3 2,3 1,1</div> + <div>this <div> has no class</div> + </div> + + ''' + div,div_end = makeHTMLTags("div") + div_grid = div().setParseAction(withClass("grid")) + + grid_expr = div_grid + SkipTo(div | div_end)("body") + for grid_header in grid_expr.searchString(html): + print(grid_header.body) + + div_any_type = div().setParseAction(withClass(withAttribute.ANY_VALUE)) + div_expr = div_any_type + SkipTo(div | div_end)("body") + for div_header in div_expr.searchString(html): + print(div_header.body) + prints:: + 1 4 0 1 0 + + 1 4 0 1 0 + 1,3 2,3 1,1 + """ + classattr = "%s:class" % namespace if namespace else "class" + return withAttribute(**{classattr : classname}) + +opAssoc = _Constants() +opAssoc.LEFT = object() +opAssoc.RIGHT = object() + +def infixNotation( baseExpr, opList, lpar=Suppress('('), rpar=Suppress(')') ): + """ + Helper method for constructing grammars of expressions made up of + operators working in a precedence hierarchy. Operators may be unary or + binary, left- or right-associative. Parse actions can also be attached + to operator expressions. The generated parser will also recognize the use + of parentheses to override operator precedences (see example below). + + Note: if you define a deep operator list, you may see performance issues + when using infixNotation. See L{ParserElement.enablePackrat} for a + mechanism to potentially improve your parser performance. + + Parameters: + - baseExpr - expression representing the most basic element for the nested + - opList - list of tuples, one for each operator precedence level in the + expression grammar; each tuple is of the form + (opExpr, numTerms, rightLeftAssoc, parseAction), where: + - opExpr is the pyparsing expression for the operator; + may also be a string, which will be converted to a Literal; + if numTerms is 3, opExpr is a tuple of two expressions, for the + two operators separating the 3 terms + - numTerms is the number of terms for this operator (must + be 1, 2, or 3) + - rightLeftAssoc is the indicator whether the operator is + right or left associative, using the pyparsing-defined + constants C{opAssoc.RIGHT} and C{opAssoc.LEFT}. + - parseAction is the parse action to be associated with + expressions matching this operator expression (the + parse action tuple member may be omitted) + - lpar - expression for matching left-parentheses (default=C{Suppress('(')}) + - rpar - expression for matching right-parentheses (default=C{Suppress(')')}) + + Example:: + # simple example of four-function arithmetic with ints and variable names + integer = pyparsing_common.signed_integer + varname = pyparsing_common.identifier + + arith_expr = infixNotation(integer | varname, + [ + ('-', 1, opAssoc.RIGHT), + (oneOf('* /'), 2, opAssoc.LEFT), + (oneOf('+ -'), 2, opAssoc.LEFT), + ]) + + arith_expr.runTests(''' + 5+3*6 + (5+3)*6 + -2--11 + ''', fullDump=False) + prints:: + 5+3*6 + [[5, '+', [3, '*', 6]]] + + (5+3)*6 + [[[5, '+', 3], '*', 6]] + + -2--11 + [[['-', 2], '-', ['-', 11]]] + """ + ret = Forward() + lastExpr = baseExpr | ( lpar + ret + rpar ) + for i,operDef in enumerate(opList): + opExpr,arity,rightLeftAssoc,pa = (operDef + (None,))[:4] + termName = "%s term" % opExpr if arity < 3 else "%s%s term" % opExpr + if arity == 3: + if opExpr is None or len(opExpr) != 2: + raise ValueError("if numterms=3, opExpr must be a tuple or list of two expressions") + opExpr1, opExpr2 = opExpr + thisExpr = Forward().setName(termName) + if rightLeftAssoc == opAssoc.LEFT: + if arity == 1: + matchExpr = FollowedBy(lastExpr + opExpr) + Group( lastExpr + OneOrMore( opExpr ) ) + elif arity == 2: + if opExpr is not None: + matchExpr = FollowedBy(lastExpr + opExpr + lastExpr) + Group( lastExpr + OneOrMore( opExpr + lastExpr ) ) + else: + matchExpr = FollowedBy(lastExpr+lastExpr) + Group( lastExpr + OneOrMore(lastExpr) ) + elif arity == 3: + matchExpr = FollowedBy(lastExpr + opExpr1 + lastExpr + opExpr2 + lastExpr) + \ + Group( lastExpr + opExpr1 + lastExpr + opExpr2 + lastExpr ) + else: + raise ValueError("operator must be unary (1), binary (2), or ternary (3)") + elif rightLeftAssoc == opAssoc.RIGHT: + if arity == 1: + # try to avoid LR with this extra test + if not isinstance(opExpr, Optional): + opExpr = Optional(opExpr) + matchExpr = FollowedBy(opExpr.expr + thisExpr) + Group( opExpr + thisExpr ) + elif arity == 2: + if opExpr is not None: + matchExpr = FollowedBy(lastExpr + opExpr + thisExpr) + Group( lastExpr + OneOrMore( opExpr + thisExpr ) ) + else: + matchExpr = FollowedBy(lastExpr + thisExpr) + Group( lastExpr + OneOrMore( thisExpr ) ) + elif arity == 3: + matchExpr = FollowedBy(lastExpr + opExpr1 + thisExpr + opExpr2 + thisExpr) + \ + Group( lastExpr + opExpr1 + thisExpr + opExpr2 + thisExpr ) + else: + raise ValueError("operator must be unary (1), binary (2), or ternary (3)") + else: + raise ValueError("operator must indicate right or left associativity") + if pa: + matchExpr.setParseAction( pa ) + thisExpr <<= ( matchExpr.setName(termName) | lastExpr ) + lastExpr = thisExpr + ret <<= lastExpr + return ret + +operatorPrecedence = infixNotation +"""(Deprecated) Former name of C{L{infixNotation}}, will be dropped in a future release.""" + +dblQuotedString = Combine(Regex(r'"(?:[^"\n\r\\]|(?:"")|(?:\\(?:[^x]|x[0-9a-fA-F]+)))*')+'"').setName("string enclosed in double quotes") +sglQuotedString = Combine(Regex(r"'(?:[^'\n\r\\]|(?:'')|(?:\\(?:[^x]|x[0-9a-fA-F]+)))*")+"'").setName("string enclosed in single quotes") +quotedString = Combine(Regex(r'"(?:[^"\n\r\\]|(?:"")|(?:\\(?:[^x]|x[0-9a-fA-F]+)))*')+'"'| + Regex(r"'(?:[^'\n\r\\]|(?:'')|(?:\\(?:[^x]|x[0-9a-fA-F]+)))*")+"'").setName("quotedString using single or double quotes") +unicodeString = Combine(_L('u') + quotedString.copy()).setName("unicode string literal") + +def nestedExpr(opener="(", closer=")", content=None, ignoreExpr=quotedString.copy()): + """ + Helper method for defining nested lists enclosed in opening and closing + delimiters ("(" and ")" are the default). + + Parameters: + - opener - opening character for a nested list (default=C{"("}); can also be a pyparsing expression + - closer - closing character for a nested list (default=C{")"}); can also be a pyparsing expression + - content - expression for items within the nested lists (default=C{None}) + - ignoreExpr - expression for ignoring opening and closing delimiters (default=C{quotedString}) + + If an expression is not provided for the content argument, the nested + expression will capture all whitespace-delimited content between delimiters + as a list of separate values. + + Use the C{ignoreExpr} argument to define expressions that may contain + opening or closing characters that should not be treated as opening + or closing characters for nesting, such as quotedString or a comment + expression. Specify multiple expressions using an C{L{Or}} or C{L{MatchFirst}}. + The default is L{quotedString}, but if no expressions are to be ignored, + then pass C{None} for this argument. + + Example:: + data_type = oneOf("void int short long char float double") + decl_data_type = Combine(data_type + Optional(Word('*'))) + ident = Word(alphas+'_', alphanums+'_') + number = pyparsing_common.number + arg = Group(decl_data_type + ident) + LPAR,RPAR = map(Suppress, "()") + + code_body = nestedExpr('{', '}', ignoreExpr=(quotedString | cStyleComment)) + + c_function = (decl_data_type("type") + + ident("name") + + LPAR + Optional(delimitedList(arg), [])("args") + RPAR + + code_body("body")) + c_function.ignore(cStyleComment) + + source_code = ''' + int is_odd(int x) { + return (x%2); + } + + int dec_to_hex(char hchar) { + if (hchar >= '0' && hchar <= '9') { + return (ord(hchar)-ord('0')); + } else { + return (10+ord(hchar)-ord('A')); + } + } + ''' + for func in c_function.searchString(source_code): + print("%(name)s (%(type)s) args: %(args)s" % func) + + prints:: + is_odd (int) args: [['int', 'x']] + dec_to_hex (int) args: [['char', 'hchar']] + """ + if opener == closer: + raise ValueError("opening and closing strings cannot be the same") + if content is None: + if isinstance(opener,basestring) and isinstance(closer,basestring): + if len(opener) == 1 and len(closer)==1: + if ignoreExpr is not None: + content = (Combine(OneOrMore(~ignoreExpr + + CharsNotIn(opener+closer+ParserElement.DEFAULT_WHITE_CHARS,exact=1)) + ).setParseAction(lambda t:t[0].strip())) + else: + content = (empty.copy()+CharsNotIn(opener+closer+ParserElement.DEFAULT_WHITE_CHARS + ).setParseAction(lambda t:t[0].strip())) + else: + if ignoreExpr is not None: + content = (Combine(OneOrMore(~ignoreExpr + + ~Literal(opener) + ~Literal(closer) + + CharsNotIn(ParserElement.DEFAULT_WHITE_CHARS,exact=1)) + ).setParseAction(lambda t:t[0].strip())) + else: + content = (Combine(OneOrMore(~Literal(opener) + ~Literal(closer) + + CharsNotIn(ParserElement.DEFAULT_WHITE_CHARS,exact=1)) + ).setParseAction(lambda t:t[0].strip())) + else: + raise ValueError("opening and closing arguments must be strings if no content expression is given") + ret = Forward() + if ignoreExpr is not None: + ret <<= Group( Suppress(opener) + ZeroOrMore( ignoreExpr | ret | content ) + Suppress(closer) ) + else: + ret <<= Group( Suppress(opener) + ZeroOrMore( ret | content ) + Suppress(closer) ) + ret.setName('nested %s%s expression' % (opener,closer)) + return ret + +def indentedBlock(blockStatementExpr, indentStack, indent=True): + """ + Helper method for defining space-delimited indentation blocks, such as + those used to define block statements in Python source code. + + Parameters: + - blockStatementExpr - expression defining syntax of statement that + is repeated within the indented block + - indentStack - list created by caller to manage indentation stack + (multiple statementWithIndentedBlock expressions within a single grammar + should share a common indentStack) + - indent - boolean indicating whether block must be indented beyond the + the current level; set to False for block of left-most statements + (default=C{True}) + + A valid block must contain at least one C{blockStatement}. + + Example:: + data = ''' + def A(z): + A1 + B = 100 + G = A2 + A2 + A3 + B + def BB(a,b,c): + BB1 + def BBA(): + bba1 + bba2 + bba3 + C + D + def spam(x,y): + def eggs(z): + pass + ''' + + + indentStack = [1] + stmt = Forward() + + identifier = Word(alphas, alphanums) + funcDecl = ("def" + identifier + Group( "(" + Optional( delimitedList(identifier) ) + ")" ) + ":") + func_body = indentedBlock(stmt, indentStack) + funcDef = Group( funcDecl + func_body ) + + rvalue = Forward() + funcCall = Group(identifier + "(" + Optional(delimitedList(rvalue)) + ")") + rvalue << (funcCall | identifier | Word(nums)) + assignment = Group(identifier + "=" + rvalue) + stmt << ( funcDef | assignment | identifier ) + + module_body = OneOrMore(stmt) + + parseTree = module_body.parseString(data) + parseTree.pprint() + prints:: + [['def', + 'A', + ['(', 'z', ')'], + ':', + [['A1'], [['B', '=', '100']], [['G', '=', 'A2']], ['A2'], ['A3']]], + 'B', + ['def', + 'BB', + ['(', 'a', 'b', 'c', ')'], + ':', + [['BB1'], [['def', 'BBA', ['(', ')'], ':', [['bba1'], ['bba2'], ['bba3']]]]]], + 'C', + 'D', + ['def', + 'spam', + ['(', 'x', 'y', ')'], + ':', + [[['def', 'eggs', ['(', 'z', ')'], ':', [['pass']]]]]]] + """ + def checkPeerIndent(s,l,t): + if l >= len(s): return + curCol = col(l,s) + if curCol != indentStack[-1]: + if curCol > indentStack[-1]: + raise ParseFatalException(s,l,"illegal nesting") + raise ParseException(s,l,"not a peer entry") + + def checkSubIndent(s,l,t): + curCol = col(l,s) + if curCol > indentStack[-1]: + indentStack.append( curCol ) + else: + raise ParseException(s,l,"not a subentry") + + def checkUnindent(s,l,t): + if l >= len(s): return + curCol = col(l,s) + if not(indentStack and curCol < indentStack[-1] and curCol <= indentStack[-2]): + raise ParseException(s,l,"not an unindent") + indentStack.pop() + + NL = OneOrMore(LineEnd().setWhitespaceChars("\t ").suppress()) + INDENT = (Empty() + Empty().setParseAction(checkSubIndent)).setName('INDENT') + PEER = Empty().setParseAction(checkPeerIndent).setName('') + UNDENT = Empty().setParseAction(checkUnindent).setName('UNINDENT') + if indent: + smExpr = Group( Optional(NL) + + #~ FollowedBy(blockStatementExpr) + + INDENT + (OneOrMore( PEER + Group(blockStatementExpr) + Optional(NL) )) + UNDENT) + else: + smExpr = Group( Optional(NL) + + (OneOrMore( PEER + Group(blockStatementExpr) + Optional(NL) )) ) + blockStatementExpr.ignore(_bslash + LineEnd()) + return smExpr.setName('indented block') + +alphas8bit = srange(r"[\0xc0-\0xd6\0xd8-\0xf6\0xf8-\0xff]") +punc8bit = srange(r"[\0xa1-\0xbf\0xd7\0xf7]") + +anyOpenTag,anyCloseTag = makeHTMLTags(Word(alphas,alphanums+"_:").setName('any tag')) +_htmlEntityMap = dict(zip("gt lt amp nbsp quot apos".split(),'><& "\'')) +commonHTMLEntity = Regex('&(?P<entity>' + '|'.join(_htmlEntityMap.keys()) +");").setName("common HTML entity") +def replaceHTMLEntity(t): + """Helper parser action to replace common HTML entities with their special characters""" + return _htmlEntityMap.get(t.entity) + +# it's easy to get these comment structures wrong - they're very common, so may as well make them available +cStyleComment = Combine(Regex(r"/\*(?:[^*]|\*(?!/))*") + '*/').setName("C style comment") +"Comment of the form C{/* ... */}" + +htmlComment = Regex(r"<!--[\s\S]*?-->").setName("HTML comment") +"Comment of the form C{<!-- ... -->}" + +restOfLine = Regex(r".*").leaveWhitespace().setName("rest of line") +dblSlashComment = Regex(r"//(?:\\\n|[^\n])*").setName("// comment") +"Comment of the form C{// ... (to end of line)}" + +cppStyleComment = Combine(Regex(r"/\*(?:[^*]|\*(?!/))*") + '*/'| dblSlashComment).setName("C++ style comment") +"Comment of either form C{L{cStyleComment}} or C{L{dblSlashComment}}" + +javaStyleComment = cppStyleComment +"Same as C{L{cppStyleComment}}" + +pythonStyleComment = Regex(r"#.*").setName("Python style comment") +"Comment of the form C{# ... (to end of line)}" + +_commasepitem = Combine(OneOrMore(Word(printables, excludeChars=',') + + Optional( Word(" \t") + + ~Literal(",") + ~LineEnd() ) ) ).streamline().setName("commaItem") +commaSeparatedList = delimitedList( Optional( quotedString.copy() | _commasepitem, default="") ).setName("commaSeparatedList") +"""(Deprecated) Predefined expression of 1 or more printable words or quoted strings, separated by commas. + This expression is deprecated in favor of L{pyparsing_common.comma_separated_list}.""" + +# some other useful expressions - using lower-case class name since we are really using this as a namespace +class pyparsing_common: + """ + Here are some common low-level expressions that may be useful in jump-starting parser development: + - numeric forms (L{integers<integer>}, L{reals<real>}, L{scientific notation<sci_real>}) + - common L{programming identifiers<identifier>} + - network addresses (L{MAC<mac_address>}, L{IPv4<ipv4_address>}, L{IPv6<ipv6_address>}) + - ISO8601 L{dates<iso8601_date>} and L{datetime<iso8601_datetime>} + - L{UUID<uuid>} + - L{comma-separated list<comma_separated_list>} + Parse actions: + - C{L{convertToInteger}} + - C{L{convertToFloat}} + - C{L{convertToDate}} + - C{L{convertToDatetime}} + - C{L{stripHTMLTags}} + - C{L{upcaseTokens}} + - C{L{downcaseTokens}} + + Example:: + pyparsing_common.number.runTests(''' + # any int or real number, returned as the appropriate type + 100 + -100 + +100 + 3.14159 + 6.02e23 + 1e-12 + ''') + + pyparsing_common.fnumber.runTests(''' + # any int or real number, returned as float + 100 + -100 + +100 + 3.14159 + 6.02e23 + 1e-12 + ''') + + pyparsing_common.hex_integer.runTests(''' + # hex numbers + 100 + FF + ''') + + pyparsing_common.fraction.runTests(''' + # fractions + 1/2 + -3/4 + ''') + + pyparsing_common.mixed_integer.runTests(''' + # mixed fractions + 1 + 1/2 + -3/4 + 1-3/4 + ''') + + import uuid + pyparsing_common.uuid.setParseAction(tokenMap(uuid.UUID)) + pyparsing_common.uuid.runTests(''' + # uuid + 12345678-1234-5678-1234-567812345678 + ''') + prints:: + # any int or real number, returned as the appropriate type + 100 + [100] + + -100 + [-100] + + +100 + [100] + + 3.14159 + [3.14159] + + 6.02e23 + [6.02e+23] + + 1e-12 + [1e-12] + + # any int or real number, returned as float + 100 + [100.0] + + -100 + [-100.0] + + +100 + [100.0] + + 3.14159 + [3.14159] + + 6.02e23 + [6.02e+23] + + 1e-12 + [1e-12] + + # hex numbers + 100 + [256] + + FF + [255] + + # fractions + 1/2 + [0.5] + + -3/4 + [-0.75] + + # mixed fractions + 1 + [1] + + 1/2 + [0.5] + + -3/4 + [-0.75] + + 1-3/4 + [1.75] + + # uuid + 12345678-1234-5678-1234-567812345678 + [UUID('12345678-1234-5678-1234-567812345678')] + """ + + convertToInteger = tokenMap(int) + """ + Parse action for converting parsed integers to Python int + """ + + convertToFloat = tokenMap(float) + """ + Parse action for converting parsed numbers to Python float + """ + + integer = Word(nums).setName("integer").setParseAction(convertToInteger) + """expression that parses an unsigned integer, returns an int""" + + hex_integer = Word(hexnums).setName("hex integer").setParseAction(tokenMap(int,16)) + """expression that parses a hexadecimal integer, returns an int""" + + signed_integer = Regex(r'[+-]?\d+').setName("signed integer").setParseAction(convertToInteger) + """expression that parses an integer with optional leading sign, returns an int""" + + fraction = (signed_integer().setParseAction(convertToFloat) + '/' + signed_integer().setParseAction(convertToFloat)).setName("fraction") + """fractional expression of an integer divided by an integer, returns a float""" + fraction.addParseAction(lambda t: t[0]/t[-1]) + + mixed_integer = (fraction | signed_integer + Optional(Optional('-').suppress() + fraction)).setName("fraction or mixed integer-fraction") + """mixed integer of the form 'integer - fraction', with optional leading integer, returns float""" + mixed_integer.addParseAction(sum) + + real = Regex(r'[+-]?\d+\.\d*').setName("real number").setParseAction(convertToFloat) + """expression that parses a floating point number and returns a float""" + + sci_real = Regex(r'[+-]?\d+([eE][+-]?\d+|\.\d*([eE][+-]?\d+)?)').setName("real number with scientific notation").setParseAction(convertToFloat) + """expression that parses a floating point number with optional scientific notation and returns a float""" + + # streamlining this expression makes the docs nicer-looking + number = (sci_real | real | signed_integer).streamline() + """any numeric expression, returns the corresponding Python type""" + + fnumber = Regex(r'[+-]?\d+\.?\d*([eE][+-]?\d+)?').setName("fnumber").setParseAction(convertToFloat) + """any int or real number, returned as float""" + + identifier = Word(alphas+'_', alphanums+'_').setName("identifier") + """typical code identifier (leading alpha or '_', followed by 0 or more alphas, nums, or '_')""" + + ipv4_address = Regex(r'(25[0-5]|2[0-4][0-9]|1?[0-9]{1,2})(\.(25[0-5]|2[0-4][0-9]|1?[0-9]{1,2})){3}').setName("IPv4 address") + "IPv4 address (C{0.0.0.0 - 255.255.255.255})" + + _ipv6_part = Regex(r'[0-9a-fA-F]{1,4}').setName("hex_integer") + _full_ipv6_address = (_ipv6_part + (':' + _ipv6_part)*7).setName("full IPv6 address") + _short_ipv6_address = (Optional(_ipv6_part + (':' + _ipv6_part)*(0,6)) + "::" + Optional(_ipv6_part + (':' + _ipv6_part)*(0,6))).setName("short IPv6 address") + _short_ipv6_address.addCondition(lambda t: sum(1 for tt in t if pyparsing_common._ipv6_part.matches(tt)) < 8) + _mixed_ipv6_address = ("::ffff:" + ipv4_address).setName("mixed IPv6 address") + ipv6_address = Combine((_full_ipv6_address | _mixed_ipv6_address | _short_ipv6_address).setName("IPv6 address")).setName("IPv6 address") + "IPv6 address (long, short, or mixed form)" + + mac_address = Regex(r'[0-9a-fA-F]{2}([:.-])[0-9a-fA-F]{2}(?:\1[0-9a-fA-F]{2}){4}').setName("MAC address") + "MAC address xx:xx:xx:xx:xx (may also have '-' or '.' delimiters)" + + @staticmethod + def convertToDate(fmt="%Y-%m-%d"): + """ + Helper to create a parse action for converting parsed date string to Python datetime.date + + Params - + - fmt - format to be passed to datetime.strptime (default=C{"%Y-%m-%d"}) + + Example:: + date_expr = pyparsing_common.iso8601_date.copy() + date_expr.setParseAction(pyparsing_common.convertToDate()) + print(date_expr.parseString("1999-12-31")) + prints:: + [datetime.date(1999, 12, 31)] + """ + def cvt_fn(s,l,t): + try: + return datetime.strptime(t[0], fmt).date() + except ValueError as ve: + raise ParseException(s, l, str(ve)) + return cvt_fn + + @staticmethod + def convertToDatetime(fmt="%Y-%m-%dT%H:%M:%S.%f"): + """ + Helper to create a parse action for converting parsed datetime string to Python datetime.datetime + + Params - + - fmt - format to be passed to datetime.strptime (default=C{"%Y-%m-%dT%H:%M:%S.%f"}) + + Example:: + dt_expr = pyparsing_common.iso8601_datetime.copy() + dt_expr.setParseAction(pyparsing_common.convertToDatetime()) + print(dt_expr.parseString("1999-12-31T23:59:59.999")) + prints:: + [datetime.datetime(1999, 12, 31, 23, 59, 59, 999000)] + """ + def cvt_fn(s,l,t): + try: + return datetime.strptime(t[0], fmt) + except ValueError as ve: + raise ParseException(s, l, str(ve)) + return cvt_fn + + iso8601_date = Regex(r'(?P<year>\d{4})(?:-(?P<month>\d\d)(?:-(?P<day>\d\d))?)?').setName("ISO8601 date") + "ISO8601 date (C{yyyy-mm-dd})" + + iso8601_datetime = Regex(r'(?P<year>\d{4})-(?P<month>\d\d)-(?P<day>\d\d)[T ](?P<hour>\d\d):(?P<minute>\d\d)(:(?P<second>\d\d(\.\d*)?)?)?(?P<tz>Z|[+-]\d\d:?\d\d)?').setName("ISO8601 datetime") + "ISO8601 datetime (C{yyyy-mm-ddThh:mm:ss.s(Z|+-00:00)}) - trailing seconds, milliseconds, and timezone optional; accepts separating C{'T'} or C{' '}" + + uuid = Regex(r'[0-9a-fA-F]{8}(-[0-9a-fA-F]{4}){3}-[0-9a-fA-F]{12}').setName("UUID") + "UUID (C{xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx})" + + _html_stripper = anyOpenTag.suppress() | anyCloseTag.suppress() + @staticmethod + def stripHTMLTags(s, l, tokens): + """ + Parse action to remove HTML tags from web page HTML source + + Example:: + # strip HTML links from normal text + text = '<td>More info at the <a href="http://pyparsing.wikispaces.com">pyparsing</a> wiki page</td>' + td,td_end = makeHTMLTags("TD") + table_text = td + SkipTo(td_end).setParseAction(pyparsing_common.stripHTMLTags)("body") + td_end + + print(table_text.parseString(text).body) # -> 'More info at the pyparsing wiki page' + """ + return pyparsing_common._html_stripper.transformString(tokens[0]) + + _commasepitem = Combine(OneOrMore(~Literal(",") + ~LineEnd() + Word(printables, excludeChars=',') + + Optional( White(" \t") ) ) ).streamline().setName("commaItem") + comma_separated_list = delimitedList( Optional( quotedString.copy() | _commasepitem, default="") ).setName("comma separated list") + """Predefined expression of 1 or more printable words or quoted strings, separated by commas.""" + + upcaseTokens = staticmethod(tokenMap(lambda t: _ustr(t).upper())) + """Parse action to convert tokens to upper case.""" + + downcaseTokens = staticmethod(tokenMap(lambda t: _ustr(t).lower())) + """Parse action to convert tokens to lower case.""" + + +if __name__ == "__main__": + + selectToken = CaselessLiteral("select") + fromToken = CaselessLiteral("from") + + ident = Word(alphas, alphanums + "_$") + + columnName = delimitedList(ident, ".", combine=True).setParseAction(upcaseTokens) + columnNameList = Group(delimitedList(columnName)).setName("columns") + columnSpec = ('*' | columnNameList) + + tableName = delimitedList(ident, ".", combine=True).setParseAction(upcaseTokens) + tableNameList = Group(delimitedList(tableName)).setName("tables") + + simpleSQL = selectToken("command") + columnSpec("columns") + fromToken + tableNameList("tables") + + # demo runTests method, including embedded comments in test string + simpleSQL.runTests(""" + # '*' as column list and dotted table name + select * from SYS.XYZZY + + # caseless match on "SELECT", and casts back to "select" + SELECT * from XYZZY, ABC + + # list of column names, and mixed case SELECT keyword + Select AA,BB,CC from Sys.dual + + # multiple tables + Select A, B, C from Sys.dual, Table2 + + # invalid SELECT keyword - should fail + Xelect A, B, C from Sys.dual + + # incomplete command - should fail + Select + + # invalid column name - should fail + Select ^^^ frox Sys.dual + + """) + + pyparsing_common.number.runTests(""" + 100 + -100 + +100 + 3.14159 + 6.02e23 + 1e-12 + """) + + # any int or real number, returned as float + pyparsing_common.fnumber.runTests(""" + 100 + -100 + +100 + 3.14159 + 6.02e23 + 1e-12 + """) + + pyparsing_common.hex_integer.runTests(""" + 100 + FF + """) + + import uuid + pyparsing_common.uuid.setParseAction(tokenMap(uuid.UUID)) + pyparsing_common.uuid.runTests(""" + 12345678-1234-5678-1234-567812345678 + """) diff --git a/week-0/day-3/my_todo_app/venvironment/lib/python3.6/site-packages/pkg_resources/_vendor/six.py b/week-0/day-3/my_todo_app/venvironment/lib/python3.6/site-packages/pkg_resources/_vendor/six.py new file mode 100644 index 00000000..190c0239 --- /dev/null +++ b/week-0/day-3/my_todo_app/venvironment/lib/python3.6/site-packages/pkg_resources/_vendor/six.py @@ -0,0 +1,868 @@ +"""Utilities for writing code that runs on Python 2 and 3""" + +# Copyright (c) 2010-2015 Benjamin Peterson +# +# Permission is hereby granted, free of charge, to any person obtaining a copy +# of this software and associated documentation files (the "Software"), to deal +# in the Software without restriction, including without limitation the rights +# to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +# copies of the Software, and to permit persons to whom the Software is +# furnished to do so, subject to the following conditions: +# +# The above copyright notice and this permission notice shall be included in all +# copies or substantial portions of the Software. +# +# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +# FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +# AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +# LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +# OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +# SOFTWARE. + +from __future__ import absolute_import + +import functools +import itertools +import operator +import sys +import types + +__author__ = "Benjamin Peterson <benjamin@python.org>" +__version__ = "1.10.0" + + +# Useful for very coarse version differentiation. +PY2 = sys.version_info[0] == 2 +PY3 = sys.version_info[0] == 3 +PY34 = sys.version_info[0:2] >= (3, 4) + +if PY3: + string_types = str, + integer_types = int, + class_types = type, + text_type = str + binary_type = bytes + + MAXSIZE = sys.maxsize +else: + string_types = basestring, + integer_types = (int, long) + class_types = (type, types.ClassType) + text_type = unicode + binary_type = str + + if sys.platform.startswith("java"): + # Jython always uses 32 bits. + MAXSIZE = int((1 << 31) - 1) + else: + # It's possible to have sizeof(long) != sizeof(Py_ssize_t). + class X(object): + + def __len__(self): + return 1 << 31 + try: + len(X()) + except OverflowError: + # 32-bit + MAXSIZE = int((1 << 31) - 1) + else: + # 64-bit + MAXSIZE = int((1 << 63) - 1) + del X + + +def _add_doc(func, doc): + """Add documentation to a function.""" + func.__doc__ = doc + + +def _import_module(name): + """Import module, returning the module after the last dot.""" + __import__(name) + return sys.modules[name] + + +class _LazyDescr(object): + + def __init__(self, name): + self.name = name + + def __get__(self, obj, tp): + result = self._resolve() + setattr(obj, self.name, result) # Invokes __set__. + try: + # This is a bit ugly, but it avoids running this again by + # removing this descriptor. + delattr(obj.__class__, self.name) + except AttributeError: + pass + return result + + +class MovedModule(_LazyDescr): + + def __init__(self, name, old, new=None): + super(MovedModule, self).__init__(name) + if PY3: + if new is None: + new = name + self.mod = new + else: + self.mod = old + + def _resolve(self): + return _import_module(self.mod) + + def __getattr__(self, attr): + _module = self._resolve() + value = getattr(_module, attr) + setattr(self, attr, value) + return value + + +class _LazyModule(types.ModuleType): + + def __init__(self, name): + super(_LazyModule, self).__init__(name) + self.__doc__ = self.__class__.__doc__ + + def __dir__(self): + attrs = ["__doc__", "__name__"] + attrs += [attr.name for attr in self._moved_attributes] + return attrs + + # Subclasses should override this + _moved_attributes = [] + + +class MovedAttribute(_LazyDescr): + + def __init__(self, name, old_mod, new_mod, old_attr=None, new_attr=None): + super(MovedAttribute, self).__init__(name) + if PY3: + if new_mod is None: + new_mod = name + self.mod = new_mod + if new_attr is None: + if old_attr is None: + new_attr = name + else: + new_attr = old_attr + self.attr = new_attr + else: + self.mod = old_mod + if old_attr is None: + old_attr = name + self.attr = old_attr + + def _resolve(self): + module = _import_module(self.mod) + return getattr(module, self.attr) + + +class _SixMetaPathImporter(object): + + """ + A meta path importer to import six.moves and its submodules. + + This class implements a PEP302 finder and loader. It should be compatible + with Python 2.5 and all existing versions of Python3 + """ + + def __init__(self, six_module_name): + self.name = six_module_name + self.known_modules = {} + + def _add_module(self, mod, *fullnames): + for fullname in fullnames: + self.known_modules[self.name + "." + fullname] = mod + + def _get_module(self, fullname): + return self.known_modules[self.name + "." + fullname] + + def find_module(self, fullname, path=None): + if fullname in self.known_modules: + return self + return None + + def __get_module(self, fullname): + try: + return self.known_modules[fullname] + except KeyError: + raise ImportError("This loader does not know module " + fullname) + + def load_module(self, fullname): + try: + # in case of a reload + return sys.modules[fullname] + except KeyError: + pass + mod = self.__get_module(fullname) + if isinstance(mod, MovedModule): + mod = mod._resolve() + else: + mod.__loader__ = self + sys.modules[fullname] = mod + return mod + + def is_package(self, fullname): + """ + Return true, if the named module is a package. + + We need this method to get correct spec objects with + Python 3.4 (see PEP451) + """ + return hasattr(self.__get_module(fullname), "__path__") + + def get_code(self, fullname): + """Return None + + Required, if is_package is implemented""" + self.__get_module(fullname) # eventually raises ImportError + return None + get_source = get_code # same as get_code + +_importer = _SixMetaPathImporter(__name__) + + +class _MovedItems(_LazyModule): + + """Lazy loading of moved objects""" + __path__ = [] # mark as package + + +_moved_attributes = [ + MovedAttribute("cStringIO", "cStringIO", "io", "StringIO"), + MovedAttribute("filter", "itertools", "builtins", "ifilter", "filter"), + MovedAttribute("filterfalse", "itertools", "itertools", "ifilterfalse", "filterfalse"), + MovedAttribute("input", "__builtin__", "builtins", "raw_input", "input"), + MovedAttribute("intern", "__builtin__", "sys"), + MovedAttribute("map", "itertools", "builtins", "imap", "map"), + MovedAttribute("getcwd", "os", "os", "getcwdu", "getcwd"), + MovedAttribute("getcwdb", "os", "os", "getcwd", "getcwdb"), + MovedAttribute("range", "__builtin__", "builtins", "xrange", "range"), + MovedAttribute("reload_module", "__builtin__", "importlib" if PY34 else "imp", "reload"), + MovedAttribute("reduce", "__builtin__", "functools"), + MovedAttribute("shlex_quote", "pipes", "shlex", "quote"), + MovedAttribute("StringIO", "StringIO", "io"), + MovedAttribute("UserDict", "UserDict", "collections"), + MovedAttribute("UserList", "UserList", "collections"), + MovedAttribute("UserString", "UserString", "collections"), + MovedAttribute("xrange", "__builtin__", "builtins", "xrange", "range"), + MovedAttribute("zip", "itertools", "builtins", "izip", "zip"), + MovedAttribute("zip_longest", "itertools", "itertools", "izip_longest", "zip_longest"), + MovedModule("builtins", "__builtin__"), + MovedModule("configparser", "ConfigParser"), + MovedModule("copyreg", "copy_reg"), + MovedModule("dbm_gnu", "gdbm", "dbm.gnu"), + MovedModule("_dummy_thread", "dummy_thread", "_dummy_thread"), + MovedModule("http_cookiejar", "cookielib", "http.cookiejar"), + MovedModule("http_cookies", "Cookie", "http.cookies"), + MovedModule("html_entities", "htmlentitydefs", "html.entities"), + MovedModule("html_parser", "HTMLParser", "html.parser"), + MovedModule("http_client", "httplib", "http.client"), + MovedModule("email_mime_multipart", "email.MIMEMultipart", "email.mime.multipart"), + MovedModule("email_mime_nonmultipart", "email.MIMENonMultipart", "email.mime.nonmultipart"), + MovedModule("email_mime_text", "email.MIMEText", "email.mime.text"), + MovedModule("email_mime_base", "email.MIMEBase", "email.mime.base"), + MovedModule("BaseHTTPServer", "BaseHTTPServer", "http.server"), + MovedModule("CGIHTTPServer", "CGIHTTPServer", "http.server"), + MovedModule("SimpleHTTPServer", "SimpleHTTPServer", "http.server"), + MovedModule("cPickle", "cPickle", "pickle"), + MovedModule("queue", "Queue"), + MovedModule("reprlib", "repr"), + MovedModule("socketserver", "SocketServer"), + MovedModule("_thread", "thread", "_thread"), + MovedModule("tkinter", "Tkinter"), + MovedModule("tkinter_dialog", "Dialog", "tkinter.dialog"), + MovedModule("tkinter_filedialog", "FileDialog", "tkinter.filedialog"), + MovedModule("tkinter_scrolledtext", "ScrolledText", "tkinter.scrolledtext"), + MovedModule("tkinter_simpledialog", "SimpleDialog", "tkinter.simpledialog"), + MovedModule("tkinter_tix", "Tix", "tkinter.tix"), + MovedModule("tkinter_ttk", "ttk", "tkinter.ttk"), + MovedModule("tkinter_constants", "Tkconstants", "tkinter.constants"), + MovedModule("tkinter_dnd", "Tkdnd", "tkinter.dnd"), + MovedModule("tkinter_colorchooser", "tkColorChooser", + "tkinter.colorchooser"), + MovedModule("tkinter_commondialog", "tkCommonDialog", + "tkinter.commondialog"), + MovedModule("tkinter_tkfiledialog", "tkFileDialog", "tkinter.filedialog"), + MovedModule("tkinter_font", "tkFont", "tkinter.font"), + MovedModule("tkinter_messagebox", "tkMessageBox", "tkinter.messagebox"), + MovedModule("tkinter_tksimpledialog", "tkSimpleDialog", + "tkinter.simpledialog"), + MovedModule("urllib_parse", __name__ + ".moves.urllib_parse", "urllib.parse"), + MovedModule("urllib_error", __name__ + ".moves.urllib_error", "urllib.error"), + MovedModule("urllib", __name__ + ".moves.urllib", __name__ + ".moves.urllib"), + MovedModule("urllib_robotparser", "robotparser", "urllib.robotparser"), + MovedModule("xmlrpc_client", "xmlrpclib", "xmlrpc.client"), + MovedModule("xmlrpc_server", "SimpleXMLRPCServer", "xmlrpc.server"), +] +# Add windows specific modules. +if sys.platform == "win32": + _moved_attributes += [ + MovedModule("winreg", "_winreg"), + ] + +for attr in _moved_attributes: + setattr(_MovedItems, attr.name, attr) + if isinstance(attr, MovedModule): + _importer._add_module(attr, "moves." + attr.name) +del attr + +_MovedItems._moved_attributes = _moved_attributes + +moves = _MovedItems(__name__ + ".moves") +_importer._add_module(moves, "moves") + + +class Module_six_moves_urllib_parse(_LazyModule): + + """Lazy loading of moved objects in six.moves.urllib_parse""" + + +_urllib_parse_moved_attributes = [ + MovedAttribute("ParseResult", "urlparse", "urllib.parse"), + MovedAttribute("SplitResult", "urlparse", "urllib.parse"), + MovedAttribute("parse_qs", "urlparse", "urllib.parse"), + MovedAttribute("parse_qsl", "urlparse", "urllib.parse"), + MovedAttribute("urldefrag", "urlparse", "urllib.parse"), + MovedAttribute("urljoin", "urlparse", "urllib.parse"), + MovedAttribute("urlparse", "urlparse", "urllib.parse"), + MovedAttribute("urlsplit", "urlparse", "urllib.parse"), + MovedAttribute("urlunparse", "urlparse", "urllib.parse"), + MovedAttribute("urlunsplit", "urlparse", "urllib.parse"), + MovedAttribute("quote", "urllib", "urllib.parse"), + MovedAttribute("quote_plus", "urllib", "urllib.parse"), + MovedAttribute("unquote", "urllib", "urllib.parse"), + MovedAttribute("unquote_plus", "urllib", "urllib.parse"), + MovedAttribute("urlencode", "urllib", "urllib.parse"), + MovedAttribute("splitquery", "urllib", "urllib.parse"), + MovedAttribute("splittag", "urllib", "urllib.parse"), + MovedAttribute("splituser", "urllib", "urllib.parse"), + MovedAttribute("uses_fragment", "urlparse", "urllib.parse"), + MovedAttribute("uses_netloc", "urlparse", "urllib.parse"), + MovedAttribute("uses_params", "urlparse", "urllib.parse"), + MovedAttribute("uses_query", "urlparse", "urllib.parse"), + MovedAttribute("uses_relative", "urlparse", "urllib.parse"), +] +for attr in _urllib_parse_moved_attributes: + setattr(Module_six_moves_urllib_parse, attr.name, attr) +del attr + +Module_six_moves_urllib_parse._moved_attributes = _urllib_parse_moved_attributes + +_importer._add_module(Module_six_moves_urllib_parse(__name__ + ".moves.urllib_parse"), + "moves.urllib_parse", "moves.urllib.parse") + + +class Module_six_moves_urllib_error(_LazyModule): + + """Lazy loading of moved objects in six.moves.urllib_error""" + + +_urllib_error_moved_attributes = [ + MovedAttribute("URLError", "urllib2", "urllib.error"), + MovedAttribute("HTTPError", "urllib2", "urllib.error"), + MovedAttribute("ContentTooShortError", "urllib", "urllib.error"), +] +for attr in _urllib_error_moved_attributes: + setattr(Module_six_moves_urllib_error, attr.name, attr) +del attr + +Module_six_moves_urllib_error._moved_attributes = _urllib_error_moved_attributes + +_importer._add_module(Module_six_moves_urllib_error(__name__ + ".moves.urllib.error"), + "moves.urllib_error", "moves.urllib.error") + + +class Module_six_moves_urllib_request(_LazyModule): + + """Lazy loading of moved objects in six.moves.urllib_request""" + + +_urllib_request_moved_attributes = [ + MovedAttribute("urlopen", "urllib2", "urllib.request"), + MovedAttribute("install_opener", "urllib2", "urllib.request"), + MovedAttribute("build_opener", "urllib2", "urllib.request"), + MovedAttribute("pathname2url", "urllib", "urllib.request"), + MovedAttribute("url2pathname", "urllib", "urllib.request"), + MovedAttribute("getproxies", "urllib", "urllib.request"), + MovedAttribute("Request", "urllib2", "urllib.request"), + MovedAttribute("OpenerDirector", "urllib2", "urllib.request"), + MovedAttribute("HTTPDefaultErrorHandler", "urllib2", "urllib.request"), + MovedAttribute("HTTPRedirectHandler", "urllib2", "urllib.request"), + MovedAttribute("HTTPCookieProcessor", "urllib2", "urllib.request"), + MovedAttribute("ProxyHandler", "urllib2", "urllib.request"), + MovedAttribute("BaseHandler", "urllib2", "urllib.request"), + MovedAttribute("HTTPPasswordMgr", "urllib2", "urllib.request"), + MovedAttribute("HTTPPasswordMgrWithDefaultRealm", "urllib2", "urllib.request"), + MovedAttribute("AbstractBasicAuthHandler", "urllib2", "urllib.request"), + MovedAttribute("HTTPBasicAuthHandler", "urllib2", "urllib.request"), + MovedAttribute("ProxyBasicAuthHandler", "urllib2", "urllib.request"), + MovedAttribute("AbstractDigestAuthHandler", "urllib2", "urllib.request"), + MovedAttribute("HTTPDigestAuthHandler", "urllib2", "urllib.request"), + MovedAttribute("ProxyDigestAuthHandler", "urllib2", "urllib.request"), + MovedAttribute("HTTPHandler", "urllib2", "urllib.request"), + MovedAttribute("HTTPSHandler", "urllib2", "urllib.request"), + MovedAttribute("FileHandler", "urllib2", "urllib.request"), + MovedAttribute("FTPHandler", "urllib2", "urllib.request"), + MovedAttribute("CacheFTPHandler", "urllib2", "urllib.request"), + MovedAttribute("UnknownHandler", "urllib2", "urllib.request"), + MovedAttribute("HTTPErrorProcessor", "urllib2", "urllib.request"), + MovedAttribute("urlretrieve", "urllib", "urllib.request"), + MovedAttribute("urlcleanup", "urllib", "urllib.request"), + MovedAttribute("URLopener", "urllib", "urllib.request"), + MovedAttribute("FancyURLopener", "urllib", "urllib.request"), + MovedAttribute("proxy_bypass", "urllib", "urllib.request"), +] +for attr in _urllib_request_moved_attributes: + setattr(Module_six_moves_urllib_request, attr.name, attr) +del attr + +Module_six_moves_urllib_request._moved_attributes = _urllib_request_moved_attributes + +_importer._add_module(Module_six_moves_urllib_request(__name__ + ".moves.urllib.request"), + "moves.urllib_request", "moves.urllib.request") + + +class Module_six_moves_urllib_response(_LazyModule): + + """Lazy loading of moved objects in six.moves.urllib_response""" + + +_urllib_response_moved_attributes = [ + MovedAttribute("addbase", "urllib", "urllib.response"), + MovedAttribute("addclosehook", "urllib", "urllib.response"), + MovedAttribute("addinfo", "urllib", "urllib.response"), + MovedAttribute("addinfourl", "urllib", "urllib.response"), +] +for attr in _urllib_response_moved_attributes: + setattr(Module_six_moves_urllib_response, attr.name, attr) +del attr + +Module_six_moves_urllib_response._moved_attributes = _urllib_response_moved_attributes + +_importer._add_module(Module_six_moves_urllib_response(__name__ + ".moves.urllib.response"), + "moves.urllib_response", "moves.urllib.response") + + +class Module_six_moves_urllib_robotparser(_LazyModule): + + """Lazy loading of moved objects in six.moves.urllib_robotparser""" + + +_urllib_robotparser_moved_attributes = [ + MovedAttribute("RobotFileParser", "robotparser", "urllib.robotparser"), +] +for attr in _urllib_robotparser_moved_attributes: + setattr(Module_six_moves_urllib_robotparser, attr.name, attr) +del attr + +Module_six_moves_urllib_robotparser._moved_attributes = _urllib_robotparser_moved_attributes + +_importer._add_module(Module_six_moves_urllib_robotparser(__name__ + ".moves.urllib.robotparser"), + "moves.urllib_robotparser", "moves.urllib.robotparser") + + +class Module_six_moves_urllib(types.ModuleType): + + """Create a six.moves.urllib namespace that resembles the Python 3 namespace""" + __path__ = [] # mark as package + parse = _importer._get_module("moves.urllib_parse") + error = _importer._get_module("moves.urllib_error") + request = _importer._get_module("moves.urllib_request") + response = _importer._get_module("moves.urllib_response") + robotparser = _importer._get_module("moves.urllib_robotparser") + + def __dir__(self): + return ['parse', 'error', 'request', 'response', 'robotparser'] + +_importer._add_module(Module_six_moves_urllib(__name__ + ".moves.urllib"), + "moves.urllib") + + +def add_move(move): + """Add an item to six.moves.""" + setattr(_MovedItems, move.name, move) + + +def remove_move(name): + """Remove item from six.moves.""" + try: + delattr(_MovedItems, name) + except AttributeError: + try: + del moves.__dict__[name] + except KeyError: + raise AttributeError("no such move, %r" % (name,)) + + +if PY3: + _meth_func = "__func__" + _meth_self = "__self__" + + _func_closure = "__closure__" + _func_code = "__code__" + _func_defaults = "__defaults__" + _func_globals = "__globals__" +else: + _meth_func = "im_func" + _meth_self = "im_self" + + _func_closure = "func_closure" + _func_code = "func_code" + _func_defaults = "func_defaults" + _func_globals = "func_globals" + + +try: + advance_iterator = next +except NameError: + def advance_iterator(it): + return it.next() +next = advance_iterator + + +try: + callable = callable +except NameError: + def callable(obj): + return any("__call__" in klass.__dict__ for klass in type(obj).__mro__) + + +if PY3: + def get_unbound_function(unbound): + return unbound + + create_bound_method = types.MethodType + + def create_unbound_method(func, cls): + return func + + Iterator = object +else: + def get_unbound_function(unbound): + return unbound.im_func + + def create_bound_method(func, obj): + return types.MethodType(func, obj, obj.__class__) + + def create_unbound_method(func, cls): + return types.MethodType(func, None, cls) + + class Iterator(object): + + def next(self): + return type(self).__next__(self) + + callable = callable +_add_doc(get_unbound_function, + """Get the function out of a possibly unbound function""") + + +get_method_function = operator.attrgetter(_meth_func) +get_method_self = operator.attrgetter(_meth_self) +get_function_closure = operator.attrgetter(_func_closure) +get_function_code = operator.attrgetter(_func_code) +get_function_defaults = operator.attrgetter(_func_defaults) +get_function_globals = operator.attrgetter(_func_globals) + + +if PY3: + def iterkeys(d, **kw): + return iter(d.keys(**kw)) + + def itervalues(d, **kw): + return iter(d.values(**kw)) + + def iteritems(d, **kw): + return iter(d.items(**kw)) + + def iterlists(d, **kw): + return iter(d.lists(**kw)) + + viewkeys = operator.methodcaller("keys") + + viewvalues = operator.methodcaller("values") + + viewitems = operator.methodcaller("items") +else: + def iterkeys(d, **kw): + return d.iterkeys(**kw) + + def itervalues(d, **kw): + return d.itervalues(**kw) + + def iteritems(d, **kw): + return d.iteritems(**kw) + + def iterlists(d, **kw): + return d.iterlists(**kw) + + viewkeys = operator.methodcaller("viewkeys") + + viewvalues = operator.methodcaller("viewvalues") + + viewitems = operator.methodcaller("viewitems") + +_add_doc(iterkeys, "Return an iterator over the keys of a dictionary.") +_add_doc(itervalues, "Return an iterator over the values of a dictionary.") +_add_doc(iteritems, + "Return an iterator over the (key, value) pairs of a dictionary.") +_add_doc(iterlists, + "Return an iterator over the (key, [values]) pairs of a dictionary.") + + +if PY3: + def b(s): + return s.encode("latin-1") + + def u(s): + return s + unichr = chr + import struct + int2byte = struct.Struct(">B").pack + del struct + byte2int = operator.itemgetter(0) + indexbytes = operator.getitem + iterbytes = iter + import io + StringIO = io.StringIO + BytesIO = io.BytesIO + _assertCountEqual = "assertCountEqual" + if sys.version_info[1] <= 1: + _assertRaisesRegex = "assertRaisesRegexp" + _assertRegex = "assertRegexpMatches" + else: + _assertRaisesRegex = "assertRaisesRegex" + _assertRegex = "assertRegex" +else: + def b(s): + return s + # Workaround for standalone backslash + + def u(s): + return unicode(s.replace(r'\\', r'\\\\'), "unicode_escape") + unichr = unichr + int2byte = chr + + def byte2int(bs): + return ord(bs[0]) + + def indexbytes(buf, i): + return ord(buf[i]) + iterbytes = functools.partial(itertools.imap, ord) + import StringIO + StringIO = BytesIO = StringIO.StringIO + _assertCountEqual = "assertItemsEqual" + _assertRaisesRegex = "assertRaisesRegexp" + _assertRegex = "assertRegexpMatches" +_add_doc(b, """Byte literal""") +_add_doc(u, """Text literal""") + + +def assertCountEqual(self, *args, **kwargs): + return getattr(self, _assertCountEqual)(*args, **kwargs) + + +def assertRaisesRegex(self, *args, **kwargs): + return getattr(self, _assertRaisesRegex)(*args, **kwargs) + + +def assertRegex(self, *args, **kwargs): + return getattr(self, _assertRegex)(*args, **kwargs) + + +if PY3: + exec_ = getattr(moves.builtins, "exec") + + def reraise(tp, value, tb=None): + if value is None: + value = tp() + if value.__traceback__ is not tb: + raise value.with_traceback(tb) + raise value + +else: + def exec_(_code_, _globs_=None, _locs_=None): + """Execute code in a namespace.""" + if _globs_ is None: + frame = sys._getframe(1) + _globs_ = frame.f_globals + if _locs_ is None: + _locs_ = frame.f_locals + del frame + elif _locs_ is None: + _locs_ = _globs_ + exec("""exec _code_ in _globs_, _locs_""") + + exec_("""def reraise(tp, value, tb=None): + raise tp, value, tb +""") + + +if sys.version_info[:2] == (3, 2): + exec_("""def raise_from(value, from_value): + if from_value is None: + raise value + raise value from from_value +""") +elif sys.version_info[:2] > (3, 2): + exec_("""def raise_from(value, from_value): + raise value from from_value +""") +else: + def raise_from(value, from_value): + raise value + + +print_ = getattr(moves.builtins, "print", None) +if print_ is None: + def print_(*args, **kwargs): + """The new-style print function for Python 2.4 and 2.5.""" + fp = kwargs.pop("file", sys.stdout) + if fp is None: + return + + def write(data): + if not isinstance(data, basestring): + data = str(data) + # If the file has an encoding, encode unicode with it. + if (isinstance(fp, file) and + isinstance(data, unicode) and + fp.encoding is not None): + errors = getattr(fp, "errors", None) + if errors is None: + errors = "strict" + data = data.encode(fp.encoding, errors) + fp.write(data) + want_unicode = False + sep = kwargs.pop("sep", None) + if sep is not None: + if isinstance(sep, unicode): + want_unicode = True + elif not isinstance(sep, str): + raise TypeError("sep must be None or a string") + end = kwargs.pop("end", None) + if end is not None: + if isinstance(end, unicode): + want_unicode = True + elif not isinstance(end, str): + raise TypeError("end must be None or a string") + if kwargs: + raise TypeError("invalid keyword arguments to print()") + if not want_unicode: + for arg in args: + if isinstance(arg, unicode): + want_unicode = True + break + if want_unicode: + newline = unicode("\n") + space = unicode(" ") + else: + newline = "\n" + space = " " + if sep is None: + sep = space + if end is None: + end = newline + for i, arg in enumerate(args): + if i: + write(sep) + write(arg) + write(end) +if sys.version_info[:2] < (3, 3): + _print = print_ + + def print_(*args, **kwargs): + fp = kwargs.get("file", sys.stdout) + flush = kwargs.pop("flush", False) + _print(*args, **kwargs) + if flush and fp is not None: + fp.flush() + +_add_doc(reraise, """Reraise an exception.""") + +if sys.version_info[0:2] < (3, 4): + def wraps(wrapped, assigned=functools.WRAPPER_ASSIGNMENTS, + updated=functools.WRAPPER_UPDATES): + def wrapper(f): + f = functools.wraps(wrapped, assigned, updated)(f) + f.__wrapped__ = wrapped + return f + return wrapper +else: + wraps = functools.wraps + + +def with_metaclass(meta, *bases): + """Create a base class with a metaclass.""" + # This requires a bit of explanation: the basic idea is to make a dummy + # metaclass for one level of class instantiation that replaces itself with + # the actual metaclass. + class metaclass(meta): + + def __new__(cls, name, this_bases, d): + return meta(name, bases, d) + return type.__new__(metaclass, 'temporary_class', (), {}) + + +def add_metaclass(metaclass): + """Class decorator for creating a class with a metaclass.""" + def wrapper(cls): + orig_vars = cls.__dict__.copy() + slots = orig_vars.get('__slots__') + if slots is not None: + if isinstance(slots, str): + slots = [slots] + for slots_var in slots: + orig_vars.pop(slots_var) + orig_vars.pop('__dict__', None) + orig_vars.pop('__weakref__', None) + return metaclass(cls.__name__, cls.__bases__, orig_vars) + return wrapper + + +def python_2_unicode_compatible(klass): + """ + A decorator that defines __unicode__ and __str__ methods under Python 2. + Under Python 3 it does nothing. + + To support Python 2 and 3 with a single code base, define a __str__ method + returning text and apply this decorator to the class. + """ + if PY2: + if '__str__' not in klass.__dict__: + raise ValueError("@python_2_unicode_compatible cannot be applied " + "to %s because it doesn't define __str__()." % + klass.__name__) + klass.__unicode__ = klass.__str__ + klass.__str__ = lambda self: self.__unicode__().encode('utf-8') + return klass + + +# Complete the moves implementation. +# This code is at the end of this module to speed up module loading. +# Turn this module into a package. +__path__ = [] # required for PEP 302 and PEP 451 +__package__ = __name__ # see PEP 366 @ReservedAssignment +if globals().get("__spec__") is not None: + __spec__.submodule_search_locations = [] # PEP 451 @UndefinedVariable +# Remove other six meta path importers, since they cause problems. This can +# happen if six is removed from sys.modules and then reloaded. (Setuptools does +# this for some reason.) +if sys.meta_path: + for i, importer in enumerate(sys.meta_path): + # Here's some real nastiness: Another "instance" of the six module might + # be floating around. Therefore, we can't use isinstance() to check for + # the six meta path importer, since the other six instance will have + # inserted an importer with different class. + if (type(importer).__name__ == "_SixMetaPathImporter" and + importer.name == __name__): + del sys.meta_path[i] + break + del i, importer +# Finally, add the importer to the meta path import hook. +sys.meta_path.append(_importer) diff --git a/week-0/day-3/my_todo_app/venvironment/lib/python3.6/site-packages/pkg_resources/extern/__init__.py b/week-0/day-3/my_todo_app/venvironment/lib/python3.6/site-packages/pkg_resources/extern/__init__.py new file mode 100644 index 00000000..b4156fec --- /dev/null +++ b/week-0/day-3/my_todo_app/venvironment/lib/python3.6/site-packages/pkg_resources/extern/__init__.py @@ -0,0 +1,73 @@ +import sys + + +class VendorImporter: + """ + A PEP 302 meta path importer for finding optionally-vendored + or otherwise naturally-installed packages from root_name. + """ + + def __init__(self, root_name, vendored_names=(), vendor_pkg=None): + self.root_name = root_name + self.vendored_names = set(vendored_names) + self.vendor_pkg = vendor_pkg or root_name.replace('extern', '_vendor') + + @property + def search_path(self): + """ + Search first the vendor package then as a natural package. + """ + yield self.vendor_pkg + '.' + yield '' + + def find_module(self, fullname, path=None): + """ + Return self when fullname starts with root_name and the + target module is one vendored through this importer. + """ + root, base, target = fullname.partition(self.root_name + '.') + if root: + return + if not any(map(target.startswith, self.vendored_names)): + return + return self + + def load_module(self, fullname): + """ + Iterate over the search path to locate and load fullname. + """ + root, base, target = fullname.partition(self.root_name + '.') + for prefix in self.search_path: + try: + extant = prefix + target + __import__(extant) + mod = sys.modules[extant] + sys.modules[fullname] = mod + # mysterious hack: + # Remove the reference to the extant package/module + # on later Python versions to cause relative imports + # in the vendor package to resolve the same modules + # as those going through this importer. + if sys.version_info > (3, 3): + del sys.modules[extant] + return mod + except ImportError: + pass + else: + raise ImportError( + "The '{target}' package is required; " + "normally this is bundled with this package so if you get " + "this warning, consult the packager of your " + "distribution.".format(**locals()) + ) + + def install(self): + """ + Install this importer into sys.meta_path if not already present. + """ + if self not in sys.meta_path: + sys.meta_path.append(self) + + +names = 'packaging', 'pyparsing', 'six', 'appdirs' +VendorImporter(__name__, names).install() diff --git a/week-0/day-3/my_todo_app/venvironment/lib/python3.6/site-packages/pkg_resources/extern/__pycache__/__init__.cpython-36.pyc b/week-0/day-3/my_todo_app/venvironment/lib/python3.6/site-packages/pkg_resources/extern/__pycache__/__init__.cpython-36.pyc new file mode 100644 index 0000000000000000000000000000000000000000..5b2ebd1c9f1ffa287f95cfc1a4bcee9726ae8762 GIT binary patch literal 2385 zcmZ`)-HsbI6t?Ftli6$vNbJ(0t}G!@4eIWe76}9e714q!P*mEgKtwf~jh)@ePG+XI z(`~}!hOD?k-0=`R0q^2luKEgGagHa+E?w25Irfb0<Ky#v{(Nh5GrIKs$4~!m6Y>u^ zS3GFnfmdAz!wIK3>632=cer~>xVv!rl!tvsP~i$^;f%Zmp)l$ZiQ6w>2I&pZu8Iqd zJMgNzU<84=r0;OrcZc9{2tK)YO8cJhxzB@BvY`EdZ}Juo;ctt#d2~wpA>ZH~sN39u zRl278L=?P~_s3N!wUD#Zh(Y<1J-GLP-MVp;jfGBGmFgpwEr+mSDcLY9cvc*;veH>u zq<KEweQq5IZXLjoQXdI<k}1K8R8OQGlNCxsLvV08I8G0RVnbPunJi146zN#(+1b4T zCJqbMxb3gtRqunTX-yKMY3(eq<<xGqQ`3>lDTf5YACD8*nA<afcmW$KOe<+3i+$5x zuVY*#wCS#5wreZXlA_AffiO|ikyOWrv1dFb@}cx$b=g7#D3ia4+<@xeulM!1+OM)| z_h6Fcd^dZ3d{hjS*oUdRQmAqw2SVXja`x3kwx1+fk?ADatEMJgeMI0@1z-pbXhdh* zPyPqc-fG-{;ut7cJMbb^)E1bUjDSPi<Oy=gvDSr@c(d<pauMH0B9((9Kv62q04LV$ zcZCZ6Dp;ymy25VN)8K<H4Ba!N7gL)Js4#AulE!r4(`+caPJ;ZogyC6O{SKX7d1Y7U z1`ZH!ESLnGV6p!M8h|ryj^gGP^k;YO&b_%`yK)D~tR3yv{>Xz7{sP#cKEl7XWy9>Z z_0}H>AY;K0Qg(vd98U5asmFktQY&_n0om6?VQIlJ9qaip=ul`jF8L%EEK{s3R_Oy; z>mylC4v(OQp4EvtOPcJ$HhOVj+7+yo;n}ggGHzN-jXO>&6E$IA6qapqU{h<tRh-7d zbQ%vsG~Pj~gbA9UE~Fn%Y0^Zx4GSv-h4@?4gXb-HFTika!T>piC4?6zS{QzZ#swH0 z1mZ;niFfXjr;q3U^wZj}y=^iN0Fq!qDbe1@uY=2E-l|)+O>g7BfcwXu>^Hrile+Z? z5ZA5aNLCcsOUX~<+0Kvf{s4cuI|_$Hw-@9Ox}d*O?g6WV*|%$G?!$RcwP59QArUhG z+0xv~mo8ae4zL>$&C8Upk$(lBmq@_bpO3-8wO^Xd&abTw03t5Mvq>fe|BMx-9HX!; z@mB0$QgD<vOCn2xrO+`|vTVqv<%A)9Y}ZLD3lP!kY)}?zk~b%DIUe-Wj+TsPO3UnE zf@In2#g2Rz!m}oh<eS*G%Jc@bOa$s+WjaYf;ijNy4f@J-ASVhufaDBIv(f1NJt<3R z0uc0Zs!f3T$yFRSXZdY(jkJ;Ppt+3xgG!2F_QGmwT4-Qw$uF=DbGu~SdoW4ufFa%% z?NEn?@I*8UBB(vurIF*%z`el3b1p9EoaNyaa9I-#VsPA&TUd`k{E=z)_H<?s&sfpi zIsZSBEGvKzkfA-i;H*F)JVmKlnoE)LDTA#lQRp*r^kP?Dg>_APJ;wxTRe?UgM*mvN z`|b|RYP8P-Mc;Zw`<8=Z+KVH+2T+UvKftm9589n1c{WL{Ou<(xNq9L(61j=dgq18S zA@x)u1texh;!P=IG<Zp!GkB0Co@^9Ws|TUyIbFXKMxF4g?LlqAyBU}X%_#_#!ltVL z_ZDoI!=({>avwe2K=UD*n_yz!=BM%E<2IE106Sk7i3x8vTl@kqF?;KUZuhQ7{{xyV BasvPW literal 0 HcmV?d00001 diff --git a/week-0/day-3/my_todo_app/venvironment/lib/python3.6/site-packages/pkg_resources/py31compat.py b/week-0/day-3/my_todo_app/venvironment/lib/python3.6/site-packages/pkg_resources/py31compat.py new file mode 100644 index 00000000..331a51bb --- /dev/null +++ b/week-0/day-3/my_todo_app/venvironment/lib/python3.6/site-packages/pkg_resources/py31compat.py @@ -0,0 +1,22 @@ +import os +import errno +import sys + + +def _makedirs_31(path, exist_ok=False): + try: + os.makedirs(path) + except OSError as exc: + if not exist_ok or exc.errno != errno.EEXIST: + raise + + +# rely on compatibility behavior until mode considerations +# and exists_ok considerations are disentangled. +# See https://github.com/pypa/setuptools/pull/1083#issuecomment-315168663 +needs_makedirs = ( + sys.version_info < (3, 2, 5) or + (3, 3) <= sys.version_info < (3, 3, 6) or + (3, 4) <= sys.version_info < (3, 4, 1) +) +makedirs = _makedirs_31 if needs_makedirs else os.makedirs diff --git a/week-0/day-3/my_todo_app/venvironment/lib/python3.6/site-packages/setuptools-39.0.1.dist-info/DESCRIPTION.rst b/week-0/day-3/my_todo_app/venvironment/lib/python3.6/site-packages/setuptools-39.0.1.dist-info/DESCRIPTION.rst new file mode 100644 index 00000000..ba3a46bc --- /dev/null +++ b/week-0/day-3/my_todo_app/venvironment/lib/python3.6/site-packages/setuptools-39.0.1.dist-info/DESCRIPTION.rst @@ -0,0 +1,36 @@ +.. image:: https://img.shields.io/pypi/v/setuptools.svg + :target: https://pypi.org/project/setuptools + +.. image:: https://readthedocs.org/projects/setuptools/badge/?version=latest + :target: https://setuptools.readthedocs.io + +.. image:: https://img.shields.io/travis/pypa/setuptools/master.svg?label=Linux%20build%20%40%20Travis%20CI + :target: https://travis-ci.org/pypa/setuptools + +.. image:: https://img.shields.io/appveyor/ci/jaraco/setuptools/master.svg?label=Windows%20build%20%40%20Appveyor + :target: https://ci.appveyor.com/project/jaraco/setuptools/branch/master + +.. image:: https://img.shields.io/pypi/pyversions/setuptools.svg + +See the `Installation Instructions +<https://packaging.python.org/installing/>`_ in the Python Packaging +User's Guide for instructions on installing, upgrading, and uninstalling +Setuptools. + +The project is `maintained at GitHub <https://github.com/pypa/setuptools>`_. + +Questions and comments should be directed to the `distutils-sig +mailing list <http://mail.python.org/pipermail/distutils-sig/>`_. +Bug reports and especially tested patches may be +submitted directly to the `bug tracker +<https://github.com/pypa/setuptools/issues>`_. + + +Code of Conduct +--------------- + +Everyone interacting in the setuptools project's codebases, issue trackers, +chat rooms, and mailing lists is expected to follow the +`PyPA Code of Conduct <https://www.pypa.io/en/latest/code-of-conduct/>`_. + + diff --git a/week-0/day-3/my_todo_app/venvironment/lib/python3.6/site-packages/setuptools-39.0.1.dist-info/INSTALLER b/week-0/day-3/my_todo_app/venvironment/lib/python3.6/site-packages/setuptools-39.0.1.dist-info/INSTALLER new file mode 100644 index 00000000..a1b589e3 --- /dev/null +++ b/week-0/day-3/my_todo_app/venvironment/lib/python3.6/site-packages/setuptools-39.0.1.dist-info/INSTALLER @@ -0,0 +1 @@ +pip diff --git a/week-0/day-3/my_todo_app/venvironment/lib/python3.6/site-packages/setuptools-39.0.1.dist-info/METADATA b/week-0/day-3/my_todo_app/venvironment/lib/python3.6/site-packages/setuptools-39.0.1.dist-info/METADATA new file mode 100644 index 00000000..d80cdcfa --- /dev/null +++ b/week-0/day-3/my_todo_app/venvironment/lib/python3.6/site-packages/setuptools-39.0.1.dist-info/METADATA @@ -0,0 +1,67 @@ +Metadata-Version: 2.0 +Name: setuptools +Version: 39.0.1 +Summary: Easily download, build, install, upgrade, and uninstall Python packages +Home-page: https://github.com/pypa/setuptools +Author: Python Packaging Authority +Author-email: distutils-sig@python.org +License: UNKNOWN +Project-URL: Documentation, https://setuptools.readthedocs.io/ +Keywords: CPAN PyPI distutils eggs package management +Platform: UNKNOWN +Classifier: Development Status :: 5 - Production/Stable +Classifier: Intended Audience :: Developers +Classifier: License :: OSI Approved :: MIT License +Classifier: Operating System :: OS Independent +Classifier: Programming Language :: Python :: 2 +Classifier: Programming Language :: Python :: 2.7 +Classifier: Programming Language :: Python :: 3 +Classifier: Programming Language :: Python :: 3.3 +Classifier: Programming Language :: Python :: 3.4 +Classifier: Programming Language :: Python :: 3.5 +Classifier: Programming Language :: Python :: 3.6 +Classifier: Topic :: Software Development :: Libraries :: Python Modules +Classifier: Topic :: System :: Archiving :: Packaging +Classifier: Topic :: System :: Systems Administration +Classifier: Topic :: Utilities +Requires-Python: >=2.7,!=3.0.*,!=3.1.*,!=3.2.* +Description-Content-Type: text/x-rst; charset=UTF-8 +Provides-Extra: certs +Provides-Extra: ssl + +.. image:: https://img.shields.io/pypi/v/setuptools.svg + :target: https://pypi.org/project/setuptools + +.. image:: https://readthedocs.org/projects/setuptools/badge/?version=latest + :target: https://setuptools.readthedocs.io + +.. image:: https://img.shields.io/travis/pypa/setuptools/master.svg?label=Linux%20build%20%40%20Travis%20CI + :target: https://travis-ci.org/pypa/setuptools + +.. image:: https://img.shields.io/appveyor/ci/jaraco/setuptools/master.svg?label=Windows%20build%20%40%20Appveyor + :target: https://ci.appveyor.com/project/jaraco/setuptools/branch/master + +.. image:: https://img.shields.io/pypi/pyversions/setuptools.svg + +See the `Installation Instructions +<https://packaging.python.org/installing/>`_ in the Python Packaging +User's Guide for instructions on installing, upgrading, and uninstalling +Setuptools. + +The project is `maintained at GitHub <https://github.com/pypa/setuptools>`_. + +Questions and comments should be directed to the `distutils-sig +mailing list <http://mail.python.org/pipermail/distutils-sig/>`_. +Bug reports and especially tested patches may be +submitted directly to the `bug tracker +<https://github.com/pypa/setuptools/issues>`_. + + +Code of Conduct +--------------- + +Everyone interacting in the setuptools project's codebases, issue trackers, +chat rooms, and mailing lists is expected to follow the +`PyPA Code of Conduct <https://www.pypa.io/en/latest/code-of-conduct/>`_. + + diff --git a/week-0/day-3/my_todo_app/venvironment/lib/python3.6/site-packages/setuptools-39.0.1.dist-info/RECORD b/week-0/day-3/my_todo_app/venvironment/lib/python3.6/site-packages/setuptools-39.0.1.dist-info/RECORD new file mode 100644 index 00000000..03b06205 --- /dev/null +++ b/week-0/day-3/my_todo_app/venvironment/lib/python3.6/site-packages/setuptools-39.0.1.dist-info/RECORD @@ -0,0 +1,155 @@ +easy_install.py,sha256=MDC9vt5AxDsXX5qcKlBz2TnW6Tpuv_AobnfhCJ9X3PM,126 +setuptools/__init__.py,sha256=WWIdCbFJnZ9fZoaWDN_x1vDA_Rkm-Sc15iKvPtIYKFs,5700 +setuptools/archive_util.py,sha256=kw8Ib_lKjCcnPKNbS7h8HztRVK0d5RacU3r_KRdVnmM,6592 +setuptools/build_meta.py,sha256=FllaKTr1vSJyiUeRjVJEZmeEaRzhYueNlimtcwaJba8,5671 +setuptools/cli-32.exe,sha256=dfEuovMNnA2HLa3jRfMPVi5tk4R7alCbpTvuxtCyw0Y,65536 +setuptools/cli-64.exe,sha256=KLABu5pyrnokJCv6skjXZ6GsXeyYHGcqOUT3oHI3Xpo,74752 +setuptools/cli.exe,sha256=dfEuovMNnA2HLa3jRfMPVi5tk4R7alCbpTvuxtCyw0Y,65536 +setuptools/config.py,sha256=tVYBM3w1U_uBRRTOZydflxyZ_IrTJT5odlZz3cbuhSw,16381 +setuptools/dep_util.py,sha256=fgixvC1R7sH3r13ktyf7N0FALoqEXL1cBarmNpSEoWg,935 +setuptools/depends.py,sha256=hC8QIDcM3VDpRXvRVA6OfL9AaQfxvhxHcN_w6sAyNq8,5837 +setuptools/dist.py,sha256=1GpYnnbv9Bk6uRIvwYS5TRVTSMf89tGM4PAla0WkUek,42522 +setuptools/extension.py,sha256=uc6nHI-MxwmNCNPbUiBnybSyqhpJqjbhvOQ-emdvt_E,1729 +setuptools/glibc.py,sha256=X64VvGPL2AbURKwYRsWJOXXGAYOiF_v2qixeTkAULuU,3146 +setuptools/glob.py,sha256=Y-fpv8wdHZzv9DPCaGACpMSBWJ6amq_1e0R_i8_el4w,5207 +setuptools/gui-32.exe,sha256=XBr0bHMA6Hpz2s9s9Bzjl-PwXfa9nH4ie0rFn4V2kWA,65536 +setuptools/gui-64.exe,sha256=aYKMhX1IJLn4ULHgWX0sE0yREUt6B3TEHf_jOw6yNyE,75264 +setuptools/gui.exe,sha256=XBr0bHMA6Hpz2s9s9Bzjl-PwXfa9nH4ie0rFn4V2kWA,65536 +setuptools/launch.py,sha256=sd7ejwhBocCDx_wG9rIs0OaZ8HtmmFU8ZC6IR_S0Lvg,787 +setuptools/lib2to3_ex.py,sha256=t5e12hbR2pi9V4ezWDTB4JM-AISUnGOkmcnYHek3xjg,2013 +setuptools/monkey.py,sha256=zZGTH7p0xeXQKLmEwJTPIE4m5m7fJeHoAsxyv5M8e_E,5789 +setuptools/msvc.py,sha256=8EiV9ypb3EQJQssPcH1HZbdNsbRvqsFnJ7wPFEGwFIo,40877 +setuptools/namespaces.py,sha256=F0Nrbv8KCT2OrO7rwa03om4N4GZKAlnce-rr-cgDQa8,3199 +setuptools/package_index.py,sha256=NEsrNXnt_9gGP-nCCYzV-0gk15lXAGO7RghRxpfqLqE,40142 +setuptools/pep425tags.py,sha256=NuGMx1gGif7x6iYemh0LfgBr_FZF5GFORIbgmMdU8J4,10882 +setuptools/py27compat.py,sha256=3mwxRMDk5Q5O1rSXOERbQDXhFqwDJhhUitfMW_qpUCo,536 +setuptools/py31compat.py,sha256=XuU1HCsGE_3zGvBRIhYw2iB-IhCFK4-Pxw_jMiqdNVk,1192 +setuptools/py33compat.py,sha256=NKS84nl4LjLIoad6OQfgmygZn4mMvrok_b1N1tzebew,1182 +setuptools/py36compat.py,sha256=VUDWxmu5rt4QHlGTRtAFu6W5jvfL6WBjeDAzeoBy0OM,2891 +setuptools/sandbox.py,sha256=9UbwfEL5QY436oMI1LtFWohhoZ-UzwHvGyZjUH_qhkw,14276 +setuptools/script (dev).tmpl,sha256=f7MR17dTkzaqkCMSVseyOCMVrPVSMdmTQsaB8cZzfuI,201 +setuptools/script.tmpl,sha256=WGTt5piezO27c-Dbx6l5Q4T3Ff20A5z7872hv3aAhYY,138 +setuptools/site-patch.py,sha256=BVt6yIrDMXJoflA5J6DJIcsJUfW_XEeVhOzelTTFDP4,2307 +setuptools/ssl_support.py,sha256=YBDJsCZjSp62CWjxmSkke9kn9rhHHj25Cus6zhJRW3c,8492 +setuptools/unicode_utils.py,sha256=NOiZ_5hD72A6w-4wVj8awHFM3n51Kmw1Ic_vx15XFqw,996 +setuptools/version.py,sha256=og_cuZQb0QI6ukKZFfZWPlr1HgJBPPn2vO2m_bI9ZTE,144 +setuptools/wheel.py,sha256=yF9usxMvpwnymV-oOo5mfDiv3E8jrKkbDEItT7_kjBs,7230 +setuptools/windows_support.py,sha256=5GrfqSP2-dLGJoZTq2g6dCKkyQxxa2n5IQiXlJCoYEE,714 +setuptools/_vendor/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0 +setuptools/_vendor/pyparsing.py,sha256=PifeLY3-WhIcBVzLtv0U4T_pwDtPruBhBCkg5vLqa28,229867 +setuptools/_vendor/six.py,sha256=A6hdJZVjI3t_geebZ9BzUvwRrIXo0lfwzQlM2LcKyas,30098 +setuptools/_vendor/packaging/__about__.py,sha256=zkcCPTN_6TcLW0Nrlg0176-R1QQ_WVPTm8sz1R4-HjM,720 +setuptools/_vendor/packaging/__init__.py,sha256=_vNac5TrzwsrzbOFIbF-5cHqc_Y2aPT2D7zrIR06BOo,513 +setuptools/_vendor/packaging/_compat.py,sha256=Vi_A0rAQeHbU-a9X0tt1yQm9RqkgQbDSxzRw8WlU9kA,860 +setuptools/_vendor/packaging/_structures.py,sha256=RImECJ4c_wTlaTYYwZYLHEiebDMaAJmK1oPARhw1T5o,1416 +setuptools/_vendor/packaging/markers.py,sha256=Gvpk9EY20yKaMTiKgQZ8yFEEpodqVgVYtfekoic1Yts,8239 +setuptools/_vendor/packaging/requirements.py,sha256=t44M2HVWtr8phIz2OhnILzuGT3rTATaovctV1dpnVIg,4343 +setuptools/_vendor/packaging/specifiers.py,sha256=SAMRerzO3fK2IkFZCaZkuwZaL_EGqHNOz4pni4vhnN0,28025 +setuptools/_vendor/packaging/utils.py,sha256=3m6WvPm6NNxE8rkTGmn0r75B_GZSGg7ikafxHsBN1WA,421 +setuptools/_vendor/packaging/version.py,sha256=OwGnxYfr2ghNzYx59qWIBkrK3SnB6n-Zfd1XaLpnnM0,11556 +setuptools/command/__init__.py,sha256=NWzJ0A1BEengZpVeqUyWLNm2bk4P3F4iL5QUErHy7kA,594 +setuptools/command/alias.py,sha256=KjpE0sz_SDIHv3fpZcIQK-sCkJz-SrC6Gmug6b9Nkc8,2426 +setuptools/command/bdist_egg.py,sha256=RQ9h8BmSVpXKJQST3i_b_sm093Z-aCXbfMBEM2IrI-Q,18185 +setuptools/command/bdist_rpm.py,sha256=B7l0TnzCGb-0nLlm6rS00jWLkojASwVmdhW2w5Qz_Ak,1508 +setuptools/command/bdist_wininst.py,sha256=_6dz3lpB1tY200LxKPLM7qgwTCceOMgaWFF-jW2-pm0,637 +setuptools/command/build_clib.py,sha256=bQ9aBr-5ZSO-9fGsGsDLz0mnnFteHUZnftVLkhvHDq0,4484 +setuptools/command/build_ext.py,sha256=PCRAZ2xYnqyEof7EFNtpKYl0sZzT0qdKUNTH3sUdPqk,13173 +setuptools/command/build_py.py,sha256=yWyYaaS9F3o9JbIczn064A5g1C5_UiKRDxGaTqYbtLE,9596 +setuptools/command/develop.py,sha256=wKbOw2_qUvcDti2lZmtxbDmYb54yAAibExzXIvToz-A,8046 +setuptools/command/dist_info.py,sha256=5t6kOfrdgALT-P3ogss6PF9k-Leyesueycuk3dUyZnI,960 +setuptools/command/easy_install.py,sha256=vRnKfAJ2hgTyt4OOLSna4BFEySfj9-KD4gGIAzfC6i8,89413 +setuptools/command/egg_info.py,sha256=BFs9e2mpws2YAFYtxxekoJaFj5X9N7o5LxpQeMdbyY4,24808 +setuptools/command/install.py,sha256=a0EZpL_A866KEdhicTGbuyD_TYl1sykfzdrri-zazT4,4683 +setuptools/command/install_egg_info.py,sha256=4zq_Ad3jE-EffParuyDEnvxU6efB-Xhrzdr8aB6Ln_8,3195 +setuptools/command/install_lib.py,sha256=n2iLR8f1MlYeGHtV2oFxDpUiL-wyLaQgwSAFX-YIEv4,5012 +setuptools/command/install_scripts.py,sha256=UD0rEZ6861mTYhIdzcsqKnUl8PozocXWl9VBQ1VTWnc,2439 +setuptools/command/launcher manifest.xml,sha256=xlLbjWrB01tKC0-hlVkOKkiSPbzMml2eOPtJ_ucCnbE,628 +setuptools/command/py36compat.py,sha256=SzjZcOxF7zdFUT47Zv2n7AM3H8koDys_0OpS-n9gIfc,4986 +setuptools/command/register.py,sha256=bHlMm1qmBbSdahTOT8w6UhA-EgeQIz7p6cD-qOauaiI,270 +setuptools/command/rotate.py,sha256=co5C1EkI7P0GGT6Tqz-T2SIj2LBJTZXYELpmao6d4KQ,2164 +setuptools/command/saveopts.py,sha256=za7QCBcQimKKriWcoCcbhxPjUz30gSB74zuTL47xpP4,658 +setuptools/command/sdist.py,sha256=obDTe2BmWt2PlnFPZZh7e0LWvemEsbCCO9MzhrTZjm8,6711 +setuptools/command/setopt.py,sha256=NTWDyx-gjDF-txf4dO577s7LOzHVoKR0Mq33rFxaRr8,5085 +setuptools/command/test.py,sha256=MeBAcXUePGjPKqjz4zvTrHatLvNsjlPFcagt3XnFYdk,9214 +setuptools/command/upload.py,sha256=i1gfItZ3nQOn5FKXb8tLC2Kd7eKC8lWO4bdE6NqGpE4,1172 +setuptools/command/upload_docs.py,sha256=oXiGplM_cUKLwE4CWWw98RzCufAu8tBhMC97GegFcms,7311 +setuptools/extern/__init__.py,sha256=2eKMsBMwsZqolIcYBtLZU3t96s6xSTP4PTaNfM5P-I0,2499 +setuptools-39.0.1.dist-info/DESCRIPTION.rst,sha256=It3a3GRjT5701mqhrpMcLyW_YS2Dokv-X8zWoTaMRe0,1422 +setuptools-39.0.1.dist-info/METADATA,sha256=whsT1qR2TE8wd0dsBKl8ZwCU_sfHFOGaHLWsDuaMqkQ,2728 +setuptools-39.0.1.dist-info/RECORD,, +setuptools-39.0.1.dist-info/WHEEL,sha256=kdsN-5OJAZIiHN-iO4Rhl82KyS0bDWf4uBwMbkNafr8,110 +setuptools-39.0.1.dist-info/dependency_links.txt,sha256=HlkCFkoK5TbZ5EMLbLKYhLcY_E31kBWD8TqW2EgmatQ,239 +setuptools-39.0.1.dist-info/entry_points.txt,sha256=s4ibTr5_v_-uWueemgrdzLUIL_ageOMqsgCAKZDkY2E,2934 +setuptools-39.0.1.dist-info/metadata.json,sha256=kbzF0VTLzT0y_Hlf-90rhO8kH_DP02x9lA-6jkrIGsQ,4650 +setuptools-39.0.1.dist-info/top_level.txt,sha256=2HUXVVwA4Pff1xgTFr3GsTXXKaPaO6vlG6oNJ_4u4Tg,38 +setuptools-39.0.1.dist-info/zip-safe,sha256=AbpHGcgLb-kRsJGnwFEktk7uzpZOCcBY74-YBdrKVGs,1 +../../../bin/easy_install,sha256=mwal1H4maungqNIlJTXkL_WGQMvXBgwQfX1b5YyY3h4,325 +../../../bin/easy_install-3.6,sha256=mwal1H4maungqNIlJTXkL_WGQMvXBgwQfX1b5YyY3h4,325 +setuptools-39.0.1.dist-info/INSTALLER,sha256=zuuue4knoyJ-UwPPXg8fezS7VCrXJQrAP7zeNuwvFQg,4 +setuptools/_vendor/packaging/__pycache__/utils.cpython-36.pyc,, +setuptools/_vendor/packaging/__pycache__/_structures.cpython-36.pyc,, +setuptools/_vendor/packaging/__pycache__/version.cpython-36.pyc,, +setuptools/_vendor/packaging/__pycache__/markers.cpython-36.pyc,, +setuptools/_vendor/packaging/__pycache__/_compat.cpython-36.pyc,, +setuptools/_vendor/packaging/__pycache__/specifiers.cpython-36.pyc,, +setuptools/_vendor/packaging/__pycache__/__about__.cpython-36.pyc,, +setuptools/_vendor/packaging/__pycache__/requirements.cpython-36.pyc,, +setuptools/_vendor/packaging/__pycache__/__init__.cpython-36.pyc,, +setuptools/_vendor/__pycache__/six.cpython-36.pyc,, +setuptools/_vendor/__pycache__/pyparsing.cpython-36.pyc,, +setuptools/_vendor/__pycache__/__init__.cpython-36.pyc,, +setuptools/command/__pycache__/install.cpython-36.pyc,, +setuptools/command/__pycache__/register.cpython-36.pyc,, +setuptools/command/__pycache__/bdist_egg.cpython-36.pyc,, +setuptools/command/__pycache__/bdist_rpm.cpython-36.pyc,, +setuptools/command/__pycache__/easy_install.cpython-36.pyc,, +setuptools/command/__pycache__/rotate.cpython-36.pyc,, +setuptools/command/__pycache__/alias.cpython-36.pyc,, +setuptools/command/__pycache__/upload_docs.cpython-36.pyc,, +setuptools/command/__pycache__/install_lib.cpython-36.pyc,, +setuptools/command/__pycache__/setopt.cpython-36.pyc,, +setuptools/command/__pycache__/py36compat.cpython-36.pyc,, +setuptools/command/__pycache__/build_clib.cpython-36.pyc,, +setuptools/command/__pycache__/saveopts.cpython-36.pyc,, +setuptools/command/__pycache__/develop.cpython-36.pyc,, +setuptools/command/__pycache__/install_scripts.cpython-36.pyc,, +setuptools/command/__pycache__/sdist.cpython-36.pyc,, +setuptools/command/__pycache__/install_egg_info.cpython-36.pyc,, +setuptools/command/__pycache__/build_py.cpython-36.pyc,, +setuptools/command/__pycache__/__init__.cpython-36.pyc,, +setuptools/command/__pycache__/bdist_wininst.cpython-36.pyc,, +setuptools/command/__pycache__/test.cpython-36.pyc,, +setuptools/command/__pycache__/dist_info.cpython-36.pyc,, +setuptools/command/__pycache__/egg_info.cpython-36.pyc,, +setuptools/command/__pycache__/build_ext.cpython-36.pyc,, +setuptools/command/__pycache__/upload.cpython-36.pyc,, +setuptools/__pycache__/config.cpython-36.pyc,, +setuptools/__pycache__/version.cpython-36.pyc,, +setuptools/__pycache__/glibc.cpython-36.pyc,, +setuptools/__pycache__/package_index.cpython-36.pyc,, +setuptools/__pycache__/dist.cpython-36.pyc,, +setuptools/__pycache__/pep425tags.cpython-36.pyc,, +setuptools/__pycache__/py33compat.cpython-36.pyc,, +setuptools/__pycache__/monkey.cpython-36.pyc,, +setuptools/__pycache__/site-patch.cpython-36.pyc,, +setuptools/__pycache__/dep_util.cpython-36.pyc,, +setuptools/__pycache__/ssl_support.cpython-36.pyc,, +setuptools/__pycache__/py36compat.cpython-36.pyc,, +setuptools/__pycache__/msvc.cpython-36.pyc,, +setuptools/__pycache__/py31compat.cpython-36.pyc,, +setuptools/__pycache__/sandbox.cpython-36.pyc,, +setuptools/__pycache__/extension.cpython-36.pyc,, +setuptools/__pycache__/__init__.cpython-36.pyc,, +setuptools/__pycache__/launch.cpython-36.pyc,, +setuptools/__pycache__/windows_support.cpython-36.pyc,, +setuptools/__pycache__/unicode_utils.cpython-36.pyc,, +setuptools/__pycache__/archive_util.cpython-36.pyc,, +setuptools/__pycache__/lib2to3_ex.cpython-36.pyc,, +setuptools/__pycache__/build_meta.cpython-36.pyc,, +setuptools/__pycache__/namespaces.cpython-36.pyc,, +setuptools/__pycache__/depends.cpython-36.pyc,, +setuptools/__pycache__/wheel.cpython-36.pyc,, +setuptools/__pycache__/py27compat.cpython-36.pyc,, +setuptools/__pycache__/glob.cpython-36.pyc,, +setuptools/extern/__pycache__/__init__.cpython-36.pyc,, +__pycache__/easy_install.cpython-36.pyc,, diff --git a/week-0/day-3/my_todo_app/venvironment/lib/python3.6/site-packages/setuptools-39.0.1.dist-info/WHEEL b/week-0/day-3/my_todo_app/venvironment/lib/python3.6/site-packages/setuptools-39.0.1.dist-info/WHEEL new file mode 100644 index 00000000..7332a419 --- /dev/null +++ b/week-0/day-3/my_todo_app/venvironment/lib/python3.6/site-packages/setuptools-39.0.1.dist-info/WHEEL @@ -0,0 +1,6 @@ +Wheel-Version: 1.0 +Generator: bdist_wheel (0.30.0) +Root-Is-Purelib: true +Tag: py2-none-any +Tag: py3-none-any + diff --git a/week-0/day-3/my_todo_app/venvironment/lib/python3.6/site-packages/setuptools-39.0.1.dist-info/dependency_links.txt b/week-0/day-3/my_todo_app/venvironment/lib/python3.6/site-packages/setuptools-39.0.1.dist-info/dependency_links.txt new file mode 100644 index 00000000..e87d0210 --- /dev/null +++ b/week-0/day-3/my_todo_app/venvironment/lib/python3.6/site-packages/setuptools-39.0.1.dist-info/dependency_links.txt @@ -0,0 +1,2 @@ +https://files.pythonhosted.org/packages/source/c/certifi/certifi-2016.9.26.tar.gz#md5=baa81e951a29958563689d868ef1064d +https://files.pythonhosted.org/packages/source/w/wincertstore/wincertstore-0.2.zip#md5=ae728f2f007185648d0c7a8679b361e2 diff --git a/week-0/day-3/my_todo_app/venvironment/lib/python3.6/site-packages/setuptools-39.0.1.dist-info/entry_points.txt b/week-0/day-3/my_todo_app/venvironment/lib/python3.6/site-packages/setuptools-39.0.1.dist-info/entry_points.txt new file mode 100644 index 00000000..b429e524 --- /dev/null +++ b/week-0/day-3/my_todo_app/venvironment/lib/python3.6/site-packages/setuptools-39.0.1.dist-info/entry_points.txt @@ -0,0 +1,64 @@ +[console_scripts] +easy_install = setuptools.command.easy_install:main + +[distutils.commands] +alias = setuptools.command.alias:alias +bdist_egg = setuptools.command.bdist_egg:bdist_egg +bdist_rpm = setuptools.command.bdist_rpm:bdist_rpm +bdist_wininst = setuptools.command.bdist_wininst:bdist_wininst +build_clib = setuptools.command.build_clib:build_clib +build_ext = setuptools.command.build_ext:build_ext +build_py = setuptools.command.build_py:build_py +develop = setuptools.command.develop:develop +dist_info = setuptools.command.dist_info:dist_info +easy_install = setuptools.command.easy_install:easy_install +egg_info = setuptools.command.egg_info:egg_info +install = setuptools.command.install:install +install_egg_info = setuptools.command.install_egg_info:install_egg_info +install_lib = setuptools.command.install_lib:install_lib +install_scripts = setuptools.command.install_scripts:install_scripts +register = setuptools.command.register:register +rotate = setuptools.command.rotate:rotate +saveopts = setuptools.command.saveopts:saveopts +sdist = setuptools.command.sdist:sdist +setopt = setuptools.command.setopt:setopt +test = setuptools.command.test:test +upload = setuptools.command.upload:upload +upload_docs = setuptools.command.upload_docs:upload_docs + +[distutils.setup_keywords] +convert_2to3_doctests = setuptools.dist:assert_string_list +dependency_links = setuptools.dist:assert_string_list +eager_resources = setuptools.dist:assert_string_list +entry_points = setuptools.dist:check_entry_points +exclude_package_data = setuptools.dist:check_package_data +extras_require = setuptools.dist:check_extras +include_package_data = setuptools.dist:assert_bool +install_requires = setuptools.dist:check_requirements +namespace_packages = setuptools.dist:check_nsp +package_data = setuptools.dist:check_package_data +packages = setuptools.dist:check_packages +python_requires = setuptools.dist:check_specifier +setup_requires = setuptools.dist:check_requirements +test_loader = setuptools.dist:check_importable +test_runner = setuptools.dist:check_importable +test_suite = setuptools.dist:check_test_suite +tests_require = setuptools.dist:check_requirements +use_2to3 = setuptools.dist:assert_bool +use_2to3_exclude_fixers = setuptools.dist:assert_string_list +use_2to3_fixers = setuptools.dist:assert_string_list +zip_safe = setuptools.dist:assert_bool + +[egg_info.writers] +PKG-INFO = setuptools.command.egg_info:write_pkg_info +dependency_links.txt = setuptools.command.egg_info:overwrite_arg +depends.txt = setuptools.command.egg_info:warn_depends_obsolete +eager_resources.txt = setuptools.command.egg_info:overwrite_arg +entry_points.txt = setuptools.command.egg_info:write_entries +namespace_packages.txt = setuptools.command.egg_info:overwrite_arg +requires.txt = setuptools.command.egg_info:write_requirements +top_level.txt = setuptools.command.egg_info:write_toplevel_names + +[setuptools.installation] +eggsecutable = setuptools.command.easy_install:bootstrap + diff --git a/week-0/day-3/my_todo_app/venvironment/lib/python3.6/site-packages/setuptools-39.0.1.dist-info/metadata.json b/week-0/day-3/my_todo_app/venvironment/lib/python3.6/site-packages/setuptools-39.0.1.dist-info/metadata.json new file mode 100644 index 00000000..494b205f --- /dev/null +++ b/week-0/day-3/my_todo_app/venvironment/lib/python3.6/site-packages/setuptools-39.0.1.dist-info/metadata.json @@ -0,0 +1 @@ +{"classifiers": ["Development Status :: 5 - Production/Stable", "Intended Audience :: Developers", "License :: OSI Approved :: MIT License", "Operating System :: OS Independent", "Programming Language :: Python :: 2", "Programming Language :: Python :: 2.7", "Programming Language :: Python :: 3", "Programming Language :: Python :: 3.3", "Programming Language :: Python :: 3.4", "Programming Language :: Python :: 3.5", "Programming Language :: Python :: 3.6", "Topic :: Software Development :: Libraries :: Python Modules", "Topic :: System :: Archiving :: Packaging", "Topic :: System :: Systems Administration", "Topic :: Utilities"], "description_content_type": "text/x-rst; charset=UTF-8", "extensions": {"python.commands": {"wrap_console": {"easy_install": "setuptools.command.easy_install:main"}}, "python.details": {"contacts": [{"email": "distutils-sig@python.org", "name": "Python Packaging Authority", "role": "author"}], "document_names": {"description": "DESCRIPTION.rst"}, "project_urls": {"Home": "https://github.com/pypa/setuptools"}}, "python.exports": {"console_scripts": {"easy_install": "setuptools.command.easy_install:main"}, "distutils.commands": {"alias": "setuptools.command.alias:alias", "bdist_egg": "setuptools.command.bdist_egg:bdist_egg", "bdist_rpm": "setuptools.command.bdist_rpm:bdist_rpm", "bdist_wininst": "setuptools.command.bdist_wininst:bdist_wininst", "build_clib": "setuptools.command.build_clib:build_clib", "build_ext": "setuptools.command.build_ext:build_ext", "build_py": "setuptools.command.build_py:build_py", "develop": "setuptools.command.develop:develop", "dist_info": "setuptools.command.dist_info:dist_info", "easy_install": "setuptools.command.easy_install:easy_install", "egg_info": "setuptools.command.egg_info:egg_info", "install": "setuptools.command.install:install", "install_egg_info": "setuptools.command.install_egg_info:install_egg_info", "install_lib": "setuptools.command.install_lib:install_lib", "install_scripts": "setuptools.command.install_scripts:install_scripts", "register": "setuptools.command.register:register", "rotate": "setuptools.command.rotate:rotate", "saveopts": "setuptools.command.saveopts:saveopts", "sdist": "setuptools.command.sdist:sdist", "setopt": "setuptools.command.setopt:setopt", "test": "setuptools.command.test:test", "upload": "setuptools.command.upload:upload", "upload_docs": "setuptools.command.upload_docs:upload_docs"}, "distutils.setup_keywords": {"convert_2to3_doctests": "setuptools.dist:assert_string_list", "dependency_links": "setuptools.dist:assert_string_list", "eager_resources": "setuptools.dist:assert_string_list", "entry_points": "setuptools.dist:check_entry_points", "exclude_package_data": "setuptools.dist:check_package_data", "extras_require": "setuptools.dist:check_extras", "include_package_data": "setuptools.dist:assert_bool", "install_requires": "setuptools.dist:check_requirements", "namespace_packages": "setuptools.dist:check_nsp", "package_data": "setuptools.dist:check_package_data", "packages": "setuptools.dist:check_packages", "python_requires": "setuptools.dist:check_specifier", "setup_requires": "setuptools.dist:check_requirements", "test_loader": "setuptools.dist:check_importable", "test_runner": "setuptools.dist:check_importable", "test_suite": "setuptools.dist:check_test_suite", "tests_require": "setuptools.dist:check_requirements", "use_2to3": "setuptools.dist:assert_bool", "use_2to3_exclude_fixers": "setuptools.dist:assert_string_list", "use_2to3_fixers": "setuptools.dist:assert_string_list", "zip_safe": "setuptools.dist:assert_bool"}, "egg_info.writers": {"PKG-INFO": "setuptools.command.egg_info:write_pkg_info", "dependency_links.txt": "setuptools.command.egg_info:overwrite_arg", "depends.txt": "setuptools.command.egg_info:warn_depends_obsolete", "eager_resources.txt": "setuptools.command.egg_info:overwrite_arg", "entry_points.txt": "setuptools.command.egg_info:write_entries", "namespace_packages.txt": "setuptools.command.egg_info:overwrite_arg", "requires.txt": "setuptools.command.egg_info:write_requirements", "top_level.txt": "setuptools.command.egg_info:write_toplevel_names"}, "setuptools.installation": {"eggsecutable": "setuptools.command.easy_install:bootstrap"}}}, "extras": ["certs", "ssl"], "generator": "bdist_wheel (0.30.0)", "keywords": ["CPAN", "PyPI", "distutils", "eggs", "package", "management"], "metadata_version": "2.0", "name": "setuptools", "project_url": "Documentation, https://setuptools.readthedocs.io/", "requires_python": ">=2.7,!=3.0.*,!=3.1.*,!=3.2.*", "summary": "Easily download, build, install, upgrade, and uninstall Python packages", "version": "39.0.1"} \ No newline at end of file diff --git a/week-0/day-3/my_todo_app/venvironment/lib/python3.6/site-packages/setuptools-39.0.1.dist-info/top_level.txt b/week-0/day-3/my_todo_app/venvironment/lib/python3.6/site-packages/setuptools-39.0.1.dist-info/top_level.txt new file mode 100644 index 00000000..4577c6a7 --- /dev/null +++ b/week-0/day-3/my_todo_app/venvironment/lib/python3.6/site-packages/setuptools-39.0.1.dist-info/top_level.txt @@ -0,0 +1,3 @@ +easy_install +pkg_resources +setuptools diff --git a/week-0/day-3/my_todo_app/venvironment/lib/python3.6/site-packages/setuptools-39.0.1.dist-info/zip-safe b/week-0/day-3/my_todo_app/venvironment/lib/python3.6/site-packages/setuptools-39.0.1.dist-info/zip-safe new file mode 100644 index 00000000..8b137891 --- /dev/null +++ b/week-0/day-3/my_todo_app/venvironment/lib/python3.6/site-packages/setuptools-39.0.1.dist-info/zip-safe @@ -0,0 +1 @@ + diff --git a/week-0/day-3/my_todo_app/venvironment/lib/python3.6/site-packages/setuptools/__init__.py b/week-0/day-3/my_todo_app/venvironment/lib/python3.6/site-packages/setuptools/__init__.py new file mode 100644 index 00000000..7da47fbe --- /dev/null +++ b/week-0/day-3/my_todo_app/venvironment/lib/python3.6/site-packages/setuptools/__init__.py @@ -0,0 +1,180 @@ +"""Extensions to the 'distutils' for large or complex distributions""" + +import os +import functools +import distutils.core +import distutils.filelist +from distutils.util import convert_path +from fnmatch import fnmatchcase + +from setuptools.extern.six.moves import filter, map + +import setuptools.version +from setuptools.extension import Extension +from setuptools.dist import Distribution, Feature +from setuptools.depends import Require +from . import monkey + +__all__ = [ + 'setup', 'Distribution', 'Feature', 'Command', 'Extension', 'Require', + 'find_packages', +] + +__version__ = setuptools.version.__version__ + +bootstrap_install_from = None + +# If we run 2to3 on .py files, should we also convert docstrings? +# Default: yes; assume that we can detect doctests reliably +run_2to3_on_doctests = True +# Standard package names for fixer packages +lib2to3_fixer_packages = ['lib2to3.fixes'] + + +class PackageFinder(object): + """ + Generate a list of all Python packages found within a directory + """ + + @classmethod + def find(cls, where='.', exclude=(), include=('*',)): + """Return a list all Python packages found within directory 'where' + + 'where' is the root directory which will be searched for packages. It + should be supplied as a "cross-platform" (i.e. URL-style) path; it will + be converted to the appropriate local path syntax. + + 'exclude' is a sequence of package names to exclude; '*' can be used + as a wildcard in the names, such that 'foo.*' will exclude all + subpackages of 'foo' (but not 'foo' itself). + + 'include' is a sequence of package names to include. If it's + specified, only the named packages will be included. If it's not + specified, all found packages will be included. 'include' can contain + shell style wildcard patterns just like 'exclude'. + """ + + return list(cls._find_packages_iter( + convert_path(where), + cls._build_filter('ez_setup', '*__pycache__', *exclude), + cls._build_filter(*include))) + + @classmethod + def _find_packages_iter(cls, where, exclude, include): + """ + All the packages found in 'where' that pass the 'include' filter, but + not the 'exclude' filter. + """ + for root, dirs, files in os.walk(where, followlinks=True): + # Copy dirs to iterate over it, then empty dirs. + all_dirs = dirs[:] + dirs[:] = [] + + for dir in all_dirs: + full_path = os.path.join(root, dir) + rel_path = os.path.relpath(full_path, where) + package = rel_path.replace(os.path.sep, '.') + + # Skip directory trees that are not valid packages + if ('.' in dir or not cls._looks_like_package(full_path)): + continue + + # Should this package be included? + if include(package) and not exclude(package): + yield package + + # Keep searching subdirectories, as there may be more packages + # down there, even if the parent was excluded. + dirs.append(dir) + + @staticmethod + def _looks_like_package(path): + """Does a directory look like a package?""" + return os.path.isfile(os.path.join(path, '__init__.py')) + + @staticmethod + def _build_filter(*patterns): + """ + Given a list of patterns, return a callable that will be true only if + the input matches at least one of the patterns. + """ + return lambda name: any(fnmatchcase(name, pat=pat) for pat in patterns) + + +class PEP420PackageFinder(PackageFinder): + @staticmethod + def _looks_like_package(path): + return True + + +find_packages = PackageFinder.find + + +def _install_setup_requires(attrs): + # Note: do not use `setuptools.Distribution` directly, as + # our PEP 517 backend patch `distutils.core.Distribution`. + dist = distutils.core.Distribution(dict( + (k, v) for k, v in attrs.items() + if k in ('dependency_links', 'setup_requires') + )) + # Honor setup.cfg's options. + dist.parse_config_files(ignore_option_errors=True) + if dist.setup_requires: + dist.fetch_build_eggs(dist.setup_requires) + + +def setup(**attrs): + # Make sure we have any requirements needed to interpret 'attrs'. + _install_setup_requires(attrs) + return distutils.core.setup(**attrs) + +setup.__doc__ = distutils.core.setup.__doc__ + + +_Command = monkey.get_unpatched(distutils.core.Command) + + +class Command(_Command): + __doc__ = _Command.__doc__ + + command_consumes_arguments = False + + def __init__(self, dist, **kw): + """ + Construct the command for dist, updating + vars(self) with any keyword parameters. + """ + _Command.__init__(self, dist) + vars(self).update(kw) + + def reinitialize_command(self, command, reinit_subcommands=0, **kw): + cmd = _Command.reinitialize_command(self, command, reinit_subcommands) + vars(cmd).update(kw) + return cmd + + +def _find_all_simple(path): + """ + Find all files under 'path' + """ + results = ( + os.path.join(base, file) + for base, dirs, files in os.walk(path, followlinks=True) + for file in files + ) + return filter(os.path.isfile, results) + + +def findall(dir=os.curdir): + """ + Find all files under 'dir' and return the list of full filenames. + Unless dir is '.', return full filenames with dir prepended. + """ + files = _find_all_simple(dir) + if dir == os.curdir: + make_rel = functools.partial(os.path.relpath, start=dir) + files = map(make_rel, files) + return list(files) + + +monkey.patch_all() diff --git a/week-0/day-3/my_todo_app/venvironment/lib/python3.6/site-packages/setuptools/__pycache__/__init__.cpython-36.pyc b/week-0/day-3/my_todo_app/venvironment/lib/python3.6/site-packages/setuptools/__pycache__/__init__.cpython-36.pyc new file mode 100644 index 0000000000000000000000000000000000000000..16b9143c492147048c1043f3a4b5644ce806db12 GIT binary patch literal 6246 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 LnvIiAeYO5?4zfV~ literal 0 HcmV?d00001 diff --git a/week-0/day-3/my_todo_app/venvironment/lib/python3.6/site-packages/setuptools/__pycache__/archive_util.cpython-36.pyc b/week-0/day-3/my_todo_app/venvironment/lib/python3.6/site-packages/setuptools/__pycache__/archive_util.cpython-36.pyc new file mode 100644 index 0000000000000000000000000000000000000000..60ad9a22173fb61bd2c08c31764d6673134ecb37 GIT binary patch literal 5094 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 literal 0 HcmV?d00001 diff --git a/week-0/day-3/my_todo_app/venvironment/lib/python3.6/site-packages/setuptools/__pycache__/build_meta.cpython-36.pyc b/week-0/day-3/my_todo_app/venvironment/lib/python3.6/site-packages/setuptools/__pycache__/build_meta.cpython-36.pyc new file mode 100644 index 0000000000000000000000000000000000000000..f4fbd3d90431057b4edd64f009bb7dd011bf627a GIT binary patch literal 5867 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 V+SqWHtL5rywdB&@Im2{M{tNb0xf%cf literal 0 HcmV?d00001 diff --git a/week-0/day-3/my_todo_app/venvironment/lib/python3.6/site-packages/setuptools/__pycache__/config.cpython-36.pyc b/week-0/day-3/my_todo_app/venvironment/lib/python3.6/site-packages/setuptools/__pycache__/config.cpython-36.pyc new file mode 100644 index 0000000000000000000000000000000000000000..7df0b65a180ac42d604ffc04652757c206b4d54d GIT binary patch literal 14323 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 OUHqo?O>1%Slm83xWV!qR literal 0 HcmV?d00001 diff --git a/week-0/day-3/my_todo_app/venvironment/lib/python3.6/site-packages/setuptools/__pycache__/dep_util.cpython-36.pyc b/week-0/day-3/my_todo_app/venvironment/lib/python3.6/site-packages/setuptools/__pycache__/dep_util.cpython-36.pyc new file mode 100644 index 0000000000000000000000000000000000000000..b76972a4000eb8e14f755312f6c88fd183b8783a GIT binary patch literal 813 zcmY*XOOMkq5VrFuOLx1Vio<f7TQ*X+l|U<mgb?C!MFJ#Ns<f)y*lkT6C)f^!RrW&p zFNnXCD<}Q}T$sdNsq4s-@jSk7X6(m<LI2*nCzn4%LVlCI6`=kCw>?3@38#wWbV@1V z0S|wWX~3foB#r-|m!z~g)M6vdY-x(B%-Y;`#k>6q|5l-Jq$XR6l5XibG$)R7)V|Xt zxejoLUthYw$870qa{1^wa$!yC=pkmbavPX&9ej$sZHv{^A)dSsPoKvZqz>wE5nye> z)xQg-)-W&J3Yb||xzNsn)KD_RloDzLPFN@P6668|%T{2E%47n%Hb7eFy6OWiw_+M3 z=4XX5!j^^RZK6Y9;l}V@xXNe?48f&=VgX88j6U^<)=$QcJXV)vQ`oG85j#?>Y{%!h zJn{%whK!!8Ko5qCoM|UB+hHM7vN!wFG#PjHtMlX*bplLtNIa@dAg`>0x$uZA7odb* zx>XuCA!<$kBU6=lV@zS1*f6~mroGjs$I4P@p2pMTTky8Ivx9E#>e<fKsy9|De-U$t z5PzReTwYE}S)R=+srZ@vvR>)TiiyP;maZt2-B-CNXO)v`Tz+dF_)gmqZ=@A|sJ-@e z4N;KZeR>c^G@?WNj_EKk1GK(P!)D0wHd+)rzQODI=>od4_QVk;H3!e~f>%mBr+Bh$ H??>@}7|HA4 literal 0 HcmV?d00001 diff --git a/week-0/day-3/my_todo_app/venvironment/lib/python3.6/site-packages/setuptools/__pycache__/depends.cpython-36.pyc b/week-0/day-3/my_todo_app/venvironment/lib/python3.6/site-packages/setuptools/__pycache__/depends.cpython-36.pyc new file mode 100644 index 0000000000000000000000000000000000000000..6aa49aef4ab5e4dea26f86db3651b33b2e772520 GIT binary patch literal 5239 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 literal 0 HcmV?d00001 diff --git a/week-0/day-3/my_todo_app/venvironment/lib/python3.6/site-packages/setuptools/__pycache__/dist.cpython-36.pyc b/week-0/day-3/my_todo_app/venvironment/lib/python3.6/site-packages/setuptools/__pycache__/dist.cpython-36.pyc new file mode 100644 index 0000000000000000000000000000000000000000..a11cbea94dad3376803f4d6aea0b98f1b700848a GIT binary patch literal 36818 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�<q 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 YxWS60aqLUDH(44%Xz<5U(Z9<72fZ)P@Bjb+ literal 0 HcmV?d00001 diff --git a/week-0/day-3/my_todo_app/venvironment/lib/python3.6/site-packages/setuptools/__pycache__/extension.cpython-36.pyc b/week-0/day-3/my_todo_app/venvironment/lib/python3.6/site-packages/setuptools/__pycache__/extension.cpython-36.pyc new file mode 100644 index 0000000000000000000000000000000000000000..1fb36476d21878bf0eb0d32dbe9bef2b30631485 GIT binary patch literal 1933 zcmaJ>PmkO*6t|tsOeVWCyR;PoS_wld%BXFM;827BRVow-p+(R=KqM4pW6w@z^AFqE z?u@dh=@mW#cRmJR!{WxNUx5?vC9~PBRFUXCKikjGzxU6dOeX%`508HNYe>jH<jUuQ z{1`|#zyuLABVjkvkhXIcI_>Cg$3Z)?Y?zP25hcPAZsz6Va18Q53}2AYmwvb-$I@Bu zE+-orPQM{yB)k_ycyhXN!U@dB!iTvpCota=^ck7$yaWW~U`DNz$JI*;6Obpz(nNJp z#U@!uk)R5GxVr=N1W11jOwe<(x?xB|1Usg}`Hd|p0CJxZml$^9tNRoVQSvh>*iQfy zE*!2u@;Q7zN>i(XAF5jNbk3iw%%UuK5*Pdk7V@f8Mv9<SUBA=q24AJx)F#bza8#$6 zh~$~E<6Z>Z-dvS=23m(tXO8uws52BrY5-{M`0KMoRwgZr84Y)m_DWRA{v>J)3jcog z(B##_Dy<&0Rv)CNCyOG{@}UN_l_|?iUlrkgS!gg9R4cn1E#gxdbyjyVLQ`PGbtz-} z)TL88qza?ghZDCM&|@IYfk}ed51F8lZ6+MZsw-SEfDv*G!5g6q+dJ2fdXbw&Y<R7u z=68eSE}y3vh-tyAEKVdZ=dfI@&bAwg16SdPF~Lgw9!P%(tZ|o+Qo%N?ArUof=`^IF z4VycS^9O6(-!Zuaa5x8cTCJii%~Qxy6j$lfnQNV@tkeYTK;(OD)`Kh*sfnW5z`9yy zbL$pyF6~H{wMwM6Zmf>AWhc+u9CXYFD{3FuZ6J*xi8H0^YrWav!fJv=i61H<wZ(Y= zf*~8Ce5~?@ENOL3uyfkbCEGyvoG^7qxCIk~b7q{SYX-}q7&dI<oI7S@yaqg9jyG&W zArj-ZQ%38*+iL8Jw~Or71^zrW3yvY?@*+K&o07k>Zx)gp@Ku`LP8Ju(b$l!@j|Kd2 zk!qgHWDyss&Uu_=<#Ww@&A5g}QJwX=s<KsYtWxqpQWmEYJEy<;s5XcMHs?}7p~w#B z7FpL|=+c2DYbUvPZ|w$2RjpZ&tOw}PotfWOt@SP-*a0At%8uuCk+eNwM^&s$8fTU% zX&qf3Sr@xdVRftPz-F#`0|r<Ik3+u;1NN`Fg(}#5mx;HxqOBhh0Eo6wBU46rdIq{0 z`-=>R%%wiPLHFtUgDaKsKZg%yLo7%vz$n58A}>Xqp}ZSKzt(ZK-5EuZC=+-$um;t; z$SyIqQd^-2g9B-J;E6|F<_#6Dz0%@XppStx+IqFcv6bxTyYxuKYPJ62+gcl*r6-cd zT*>1)ixuzvy3a9{_%0b9YtYELW6<Z?$XFaej5*w(-b402vfIdBhx-m}d<vv7K^|2& zpY5xgFsQeI*{SHC+N6Y>j{AAI-;04%3QEylzp`>s{^8BbCo{mNP(`5Avmh@|rEcpY z9Oh+lB3BBVwk@&HZ(q=ArR14)@!mF=Y7Z3<;_G~|-sfEozr;A}H-UL{`?FoP>v(%E I@cp;`0}lxLbpQYW literal 0 HcmV?d00001 diff --git a/week-0/day-3/my_todo_app/venvironment/lib/python3.6/site-packages/setuptools/__pycache__/glibc.cpython-36.pyc b/week-0/day-3/my_todo_app/venvironment/lib/python3.6/site-packages/setuptools/__pycache__/glibc.cpython-36.pyc new file mode 100644 index 0000000000000000000000000000000000000000..f08208299fc0bf3ff3800e488d6a5d18ee63356b GIT binary patch literal 1503 zcmZ8h-EQPG6t<mACY%24E@g!PfhCI6i2fizphe39TDC%{8ZBF-MTJ$A+MXHDByq5v zmR9N2@CG~uujE^<cm=LF_Ozm{BOhDG_UGg8J13v6tz{cOe)0N;RfPUVHyVNYH_*-Z zU^wEqLNz|d*w0Btj!77!<0y>ram*tg|ACGNe83YJ6F%fAj6;5pXE3Im9HD&WA3#Gn zb{pl1QB`L}A?sFYJ7Rvpw+Q+Q^k>k`3osVVFvkmgiO#bg&B!Hwg__M6*=U~WZH)ZK z@e%sj?~Hp~40^mkm&7JLvBL#1hdr6W^?*QnA4GKV_@%I&ZVa7N@`TY-p^a1xHCD@J zvO|@oBh?5h$FxzFb_Tr5t$QOkC=HV`zvmKW&s$+!{Or5KL$^6;x?&=1;Sq}~M7RE} z1<Vt8=X0%<b}1{^wA4lGhFTbZ-enTtjV&7{Tm%uggbSv)$Rqcl)rtvYil(fEX-g(_ z0))7gEBFGo|Aq7h`2PKT-`4GZE8E?ZPF8$Zp3bKYGh*MsQ(LQ4Wo}Nx!}r>Ai2G*1 z9uXd!dG0sCpkamy&hUDaL@7>4hBKlcfS-Ape2by`d63KJ%2KW#Ey!imM`p{CS;R?? z9w8eq2uKwjAv@@!S;FH5$lBvMQ3qF^LGY0I0Axx=7hBt3zj#uYGo_#Y^6~ED*B|A- z?gf`@{&!t`_5Al%Fe~^SInSh>(oZN;kYSBztf2vFulA>R=tS8s>4)aP4T2j6@6U&h zXyJX9O<j6c>IMh_mHo`Ezw8<-Yw>F7c9CqX8%(t7+C0|l@O-zf#c!R|f)`8JHGq|M zR~G@^;X3HGH23|1H`r9Ld2vgJEm$xf4h>gvj1!O`#t*T64?N75rf;5hPk*4^uUO>s zzK7DBr~09<35$E69_j%|&&lW@U#b^y@<_h}hxEJN_`B`~_U5!a6@{m-wDP19%Md?< zohAi?AgmO^((l8Zd53Qpx)1PnP^gCz4MD|6kO4g!Lm~PA^TEZRKk0L773IPT4I~L_ zr{cDhSw^8<7i~!)qbotx_^M(J-G(IIxvt}!o=qj20^qppD(kUD-P-f(-2qHCl$B<A zSEbavYw5U@mDvlcBZoj%Um3s{h35p5<B<FC`&zrD)?MP#>ykQzlS{6Wz!lLSfCv5^ zSy7BT_yvig(4H;rb=1D%^doP4i3O1Yx#84}OMJoWkUQy<TJf$DPa|-JgjppisFFtM K+v)xEt^WYjgn_02 literal 0 HcmV?d00001 diff --git a/week-0/day-3/my_todo_app/venvironment/lib/python3.6/site-packages/setuptools/__pycache__/glob.cpython-36.pyc b/week-0/day-3/my_todo_app/venvironment/lib/python3.6/site-packages/setuptools/__pycache__/glob.cpython-36.pyc new file mode 100644 index 0000000000000000000000000000000000000000..cea0f2d5659a97d9a77835ed3178ff56e6f61961 GIT binary patch literal 3801 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 literal 0 HcmV?d00001 diff --git a/week-0/day-3/my_todo_app/venvironment/lib/python3.6/site-packages/setuptools/__pycache__/launch.cpython-36.pyc b/week-0/day-3/my_todo_app/venvironment/lib/python3.6/site-packages/setuptools/__pycache__/launch.cpython-36.pyc new file mode 100644 index 0000000000000000000000000000000000000000..563700c1de1254abdd77cfe7c5bd8f4242d1c761 GIT binary patch literal 812 zcmYjPO>fjN5cO9!Y1+a8A-XqT7pYqz4!u+r5?53exNTcSZtQm5CU)dFD|VGVEgbnF z{3TyG^)GN@oFGwK^YZMOOx{!G{o!H$^7HA<D~ix>^lTB}A0XN}fJ6%<u_P5<;NeLY zL{iDVqXkt=CXd9uRdk0ilH@CzO*U8gC()U5$^BCC%e7xx!`ss7#&cltvb1$AjO3Lz zii<n1T;3|*HQw5)<+|m!*80{v(KJf(l@?srjdgyWKY<{0QAUhw0+B#`glHXr2N@ne z5Q(Q~i#+W?R22J@Zt-|8=?^j;YiQ(W$TOeF#7}l~OM23y9ezl6XiIzgkjaTmcVx@_ zUeBOc1~rM#`=rM^0){CV-rHQ}9M+d^H22S{2Gi?yF5La<>fH?&;OmZS&zC|D<+n;1 zuFc9mf<+^I=R{Sl=R@uZgO!jKMJ==`ii;VIhdW)VqKM3hI<mAVq%DCk+bFYP*Y4VE z$h8SfeN*LZKO7XrZKo@*O$${N^aK_K1txXrLwc{g@ZN>Yg9@WJ%BAtc%qby5>QqyS zQiT+LR|DU686;<uus=E+RD`{#rEOwe5>*soGNu>%#=5!~4}q0ds$a;xffj#GPkh~+ zG`cyC>g2IrJuXezs+0di@SIk|G|iiJpsq8A(4jp7KncS+Cd1Ci5jnu)c2meX7-=+1 pTpSShB0?TvNX3B}ggk@TFl1-7m0hLI8Jybq0!uQS(d>1G{{lnD+sOa` literal 0 HcmV?d00001 diff --git a/week-0/day-3/my_todo_app/venvironment/lib/python3.6/site-packages/setuptools/__pycache__/lib2to3_ex.cpython-36.pyc b/week-0/day-3/my_todo_app/venvironment/lib/python3.6/site-packages/setuptools/__pycache__/lib2to3_ex.cpython-36.pyc new file mode 100644 index 0000000000000000000000000000000000000000..782bb321dcc67680b4566610328e2cd274099913 GIT binary patch literal 2391 zcmbVNOK%%D5MJ&}tF>$^j$0dU-7eA~fPh#Al0%EOC=4WZ&_mUiffNg*3t6P(UGGCC zDMuFMlYDJ|Lht=c1bXVJe<7#NP^-0UIB8KXI3#z6<jglS-#%Sk_1Ay+^wpm=!}!Zs zYBtOdpo^bDP$M)bp=L@lGqecKt<=t((9v@{b+cMn%e>IjYbULT^%n+pY3<6OHCCHh zp$}`1)?r;|7OYL`{A9HJ$%X%HBxI4r6Gnq?<8honk;T(MjE2L4%g=p3*bBOpip86t zU+|z;<mZgbI3EPG=t(A|@O}U2Bo;wd&{4_)-i-wlK{pS+$?%}BIfs2k9(;cxPhfb` z_WuUQj22P#>Q-1-X)$P-YW+vn@AhQD;fkZ8NY&PW$*3QX85dEX7g;py_D;J4*6HCX zi)O;)0J?Yxf*BzJ;7kPW$_OoLQ5!~^I@E>Hp)~-&Q`^sDAxAP!#jQJgcp5egg$4aP z=wcIuG!il;eKIwFH-9q#asy5xotDW_O*ssmZQ05eEbS{R69Z*;`9LW1^z|PGZ-CO9 zFZN|N+#klnz2i}w(!Kcn^d#>IwlA0*4JG(2mZxcajB$zBxIMg3bwDZ7w``zI+E6li z@HS7{m3rk98jAe|?*9)y*>T=4S{C;}pVv|NDA1L;ScREd!HY5`1VrXNc(JhT;X5rW zH~eqg9LkPIgMT$ngQiutmrQ#%Xj;9~a+McFc{gKGr2HtF=Qzw8QFJ!yrt>d+4Z&!l zz^E)?qftVDxC`PQbb%9(c$R1BcRg5E4dZeET|5F&WpSOF)Vd;&$B@A~k9B!N9(!2G z9FyR%hkLPM&N|SaK^Gjv)JPy}DLJk4Cg$suh;1CDnOJyoVo%A8Y#B2`P}iA3Uc>0> z(d5UnmUujub$I8`$fY&4l9ef(2ao+LP*UEIjbwES=g!QsBAm|Aq;`muG6>#~0Lt2V z&11>J)dgupMV?-?)>MN+4f6OH%CN{oZzNcR*{;ipuY>i<PKr2JyHUjzQKai;&Ivj; zLhUSnX5(HuqO2qh<zLrTxXDMkz5woz7Pja(s1?mI<#`@2SqOq&U97yt?v|~~K{@?6 zWg_$zCn>_0g0JHqfDgOS1*V>1HHfXBO#(RpGne>e!<=kXm$Vmm^ayT%hT+Aa>VO`@ z1Ov)_4B-Igkum;AlEi#&yxP1Z_${%d4k-roZ2P4SYT{A@65y9{02)r>zD4`+WkqQ< zj%M=@L4@xwNNA2x$-qLnY%Ez$Ip!Nj2gCJ61WWXR8Id>?8QuaWynja=+n_42jtl?> z!D*09=xb!MdkxSX`zoxk2r8^Pu#n(AB?Dt-X>0%|jl-iUNi0AD)`-&h!IS_ZJD29v zgtzvo%OB&II8*)o>~V>U*$LNfrWY_o4gOGFDft|MtqOsgiu@BWM`Nm7&a&d1mAn<M zmx{E+EcCBa@iuDB2z~_1>HQg;Dv)Lj01Bb<;hF3#!*z2*r$r81F29e~ApLWsYaXE3 zLGb~KYj(e8Fw8^DhLXYjd)}OSS}Up+VKD(Mu3<UrUuqkrrY8O|Y*O{=%luc_EK{nz ks5Fjon`aW<qKon_JCyh3oQ1!_#L}+YCc54<J*&C$4^VMM4FCWD literal 0 HcmV?d00001 diff --git a/week-0/day-3/my_todo_app/venvironment/lib/python3.6/site-packages/setuptools/__pycache__/monkey.cpython-36.pyc b/week-0/day-3/my_todo_app/venvironment/lib/python3.6/site-packages/setuptools/__pycache__/monkey.cpython-36.pyc new file mode 100644 index 0000000000000000000000000000000000000000..4569969bb397e568278eb511209e23b3e39797c6 GIT binary patch literal 5133 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 QWxaB~Qm(92)+*kA0do;h*8l(j literal 0 HcmV?d00001 diff --git a/week-0/day-3/my_todo_app/venvironment/lib/python3.6/site-packages/setuptools/__pycache__/msvc.cpython-36.pyc b/week-0/day-3/my_todo_app/venvironment/lib/python3.6/site-packages/setuptools/__pycache__/msvc.cpython-36.pyc new file mode 100644 index 0000000000000000000000000000000000000000..d51ae9192df5e66c8b4a14aab5c8c779a460a754 GIT binary patch literal 34498 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 KxIP)X`@aDht~w_G literal 0 HcmV?d00001 diff --git a/week-0/day-3/my_todo_app/venvironment/lib/python3.6/site-packages/setuptools/__pycache__/namespaces.cpython-36.pyc b/week-0/day-3/my_todo_app/venvironment/lib/python3.6/site-packages/setuptools/__pycache__/namespaces.cpython-36.pyc new file mode 100644 index 0000000000000000000000000000000000000000..940e180efafbc6938010e9cd04fc2574c811664c GIT binary patch literal 3636 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 literal 0 HcmV?d00001 diff --git a/week-0/day-3/my_todo_app/venvironment/lib/python3.6/site-packages/setuptools/__pycache__/package_index.cpython-36.pyc b/week-0/day-3/my_todo_app/venvironment/lib/python3.6/site-packages/setuptools/__pycache__/package_index.cpython-36.pyc new file mode 100644 index 0000000000000000000000000000000000000000..ab20bff84e20dd5cb8dd79cac480e69a9c218ccf GIT binary patch literal 32218 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 literal 0 HcmV?d00001 diff --git a/week-0/day-3/my_todo_app/venvironment/lib/python3.6/site-packages/setuptools/__pycache__/pep425tags.cpython-36.pyc b/week-0/day-3/my_todo_app/venvironment/lib/python3.6/site-packages/setuptools/__pycache__/pep425tags.cpython-36.pyc new file mode 100644 index 0000000000000000000000000000000000000000..b51662e3f359022f45a7075805d2e921fa3bb839 GIT binary patch literal 7296 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 bqhVQA5hZVBas_L}GOgp*jP(<Z<tqOJ^(XYT literal 0 HcmV?d00001 diff --git a/week-0/day-3/my_todo_app/venvironment/lib/python3.6/site-packages/setuptools/__pycache__/py27compat.cpython-36.pyc b/week-0/day-3/my_todo_app/venvironment/lib/python3.6/site-packages/setuptools/__pycache__/py27compat.cpython-36.pyc new file mode 100644 index 0000000000000000000000000000000000000000..b06d7b381d473e3d3735f403bca2099300bd2f31 GIT binary patch literal 769 zcma)3J#X7E5G5sBQd9?SI~C}{)j(qd?%<(?Q6NJ-w1JCwsenSD#fwdw`T$7>R^To9 zGx<weJM}Mg>QOdOqf-yKJANGBy?1<nc^UV=O@6%b2>D6Q4EN*{x>;ZlBq4$dPtk;8 z_LZ0WiBE~>i0%_fI^b`*dMJX^j&6cSBEqd#PTfrsLa1jD6@iGv1=e2(@0JYWhjDye z<`uVcDV4M}yWLe)sV%!JHJjIVT^4LSoG@Mp23#u%I{t-h$jyK@zLERPk#y#=^J{by zV>plvInYOnZRo=+W@w+~Jrsz=W{buAD;UF9@Q!J)JB`Omu{Cf3+OVA4Y%Plw<80Nw z*+M;RA+T+@0-Iv>z-z+%2-5gi@Jw`oeSd!#*}NK6vbtLCq!L&1e!DI*10#ctDqEJy zoG+_-JjvP_46C~7pTN@-6{p0s8aq0|_5bO0(}@x31Tye+2jA+h3y$M4gl^?PU!xzJ z(5CxE7Q1~$@yMCW&fBp%kOOf8y=f7!3*G+%*hC){&zFKv-(s~vC%T7W5I13(iZV;n zCaM&-_``Yf>hDa3u(zNK?ZmdM8h`$M+ytgJ7V@O89Iq6om2#6wiN9}k@<QiU1EhxE k!5NWOqmzeh@>1*+OnuxLC$!^5UeAxhfJWUO4g8n%4>we{2><{9 literal 0 HcmV?d00001 diff --git a/week-0/day-3/my_todo_app/venvironment/lib/python3.6/site-packages/setuptools/__pycache__/py31compat.cpython-36.pyc b/week-0/day-3/my_todo_app/venvironment/lib/python3.6/site-packages/setuptools/__pycache__/py31compat.cpython-36.pyc new file mode 100644 index 0000000000000000000000000000000000000000..750f80119611dee8e19617a0cbe0ae1ca5ee8e3c GIT binary patch literal 1508 zcmZ`(Pj4JG6t_LIGqamES<;jXMHmU8j?^ZCB5`O{RRRQDwnC{|7ztUkV`nqFo<G>$ zG!ym2_RNV7QNGe#Iq?-Z@t$`#Neg)7=V$xp_y5g<n>R;$KYaP~n~;z{$+d9{_$M&! z??5DxbjC8$9Y`hvO)HkMD#!v#UXc1;NL08OneQmU4-laqctn&%updbJnq<LGq-H;o zZVdO4j;ka~{Od0^uYbFI9qVB>1XQf!EdG|rL=ImQIaH%nkR@v=GCn5hsNb6@CyJ&% zDQDs=H?~jkpv~RsUtlyznW3;4cE$I*9?`kerWU%K76`zBYXI{rnD!2kS44)3*o+;K z!HWJ$9fcFRU@Ho$2a`T-b?!g{FiWF=x%g<3SBh6l>-bdh%_(mT-yp%90SGn`kd*bK z=eb_0Z;WY-f#8#r_F)YY{vc)u+rJ+kxvD*C%l7_sS!#K|JX@UBg;hsZxn=8`M%(Lb z+dcTKXex02u<g9dD8-^OLKFBv{{AynwT;P5_jPGh;TqFT3IuEiM(PPndl!fz8I>es zl4b#>9g-NzP!3=n$VkSpMlykD49yO}FW!v!W;|D><F>3?t+?B&<Z`Q%L&}^wcf88$ ze5TCd<--@H*4)8k*Knz{a*F3CPMMdvk@xs?>G(@T<k~j8oYjp{{OK{zYl+%QotsNZ z3gc>dQ?KQeO?{>1t)!#NKIsR*NJzUNj?UT2bCQ62bdm-pf!jVoXHH73`nXz1++fnI z(kDJ;YcldkA<DXRLVO52i|Hjaq8A_hI{}AV<Xcu@IeM!wf3L`VV+Zwiq}1%f@w+;Q zLMVu<5#nRGwdfe37kB<s<px-I%K(QfCeiEs9GGt3kvWw79MZpHzEclE;sWUNPuHEg z=|qeZ^KoL6XKC0+_H^k=-AAT!MyYk+;-|;H(9_Uc-pA^^a9yji1ei1I1J5~=7wTQN z5^(DrL-`4qWih&hGP+N9|39E>{3MNgc#J(IL_ZRuYUENQe?y30mbu>C#6rlX5W?(% zXfsA~8wvK$HG-Obp}!A|#d=5vAxpv}@Tcic4}x;7LH^KocKutr`T_Mj-(&ANABX;y zEUm*h*~2R=Cc)g;sxj{Y*GJ8C4xM_<4sX`F$R4dddW_X#(X50qb^wtXv)zcXF>uiN F>>uq`W(oiR literal 0 HcmV?d00001 diff --git a/week-0/day-3/my_todo_app/venvironment/lib/python3.6/site-packages/setuptools/__pycache__/py33compat.cpython-36.pyc b/week-0/day-3/my_todo_app/venvironment/lib/python3.6/site-packages/setuptools/__pycache__/py33compat.cpython-36.pyc new file mode 100644 index 0000000000000000000000000000000000000000..767952d1e2bb10f3a1dae823ab5a0e2704e54d2f GIT binary patch literal 1361 zcmZuxOK;mo5Z(u0qN&&}9K=D2f=Ge50vh??Lk<aoIEj!HXw;XR2Z4g1xoepcMbgVv zU>Ve<%CW~Dddjgtf&QYs_N2eiOFKi=sL^JLnf*ANnVr}2pxgB~zq$9rdy9}i$dwfU zegsti3``I~a}uq08qxNhMQk3lh)4VtDRwO)t%<K5P=b%35r0Dp_8P5NZcm-a0VxqY zcc)(DQ6ky6BP?MrS>!(>!V&H}B3!w#<WV5Ik_b-*fUg1Oq9eWW=8}xJK(Zz1ccka9 zATl!SQN!!(9JY;9J<a1PQMFXY{;E1uqYJ;R(o)DUQKJ;qFBb#w2&n!Tm?W4|!~_-W z9f`Q$!h#(_gJT@C`FO4+dWq9=S|vI~V_di+JprnHU=3|Z3^{@s#lS4I>M>*0GCxrc zX#7T$2iu?b_w}^eud?dy@hr>5-R$k;v`A~YUrRl!bXn&0Rangr4%UbFtGV&wI4d$8 z#~<OrZ8Y>^_dikgFO^aXTDb6FXfwe=)V~AMWDIR;$e51Vk}as_|6sacf-N|Zb^c?+ z8#W>8S4fWEBn!K-wKcXUw)zPrg5MxFF>$CFB4O{48>9iea6snVBMaVII1{FR(eBt2 z9q{5dPU8x9Nq5M?I=fQ@!fW+8>g!HpH_np1gfTk1^9lw5+kNryO(t^@?tNBPpF=-; zdtsGiDm*DwD3kOwEGwxJos~tH6=B=;@^~y$9q!@Fo}tGIOR;JhR&53T$%+HY2*Ba$ zFIYX_*ojifyzQ59(-PV)q~W<N3>R5#y3Y?^4&uXapMC#gFg!BB;Pug9_;m0TMGF0z zZdPbHk}B5oO4bUC-t&};pX_58rrK~>o)}(fWdeDwWg(=9At%Gi%5VTtCohXpYu^sc znsv|vc3*?<_&U7RAuz(XXuvFLF`s!rAq7r-8c>T{fIm1Jt&3sLMt?;zm2qtRIG&bb zmLm@0_-vNs>n{q2TYZ8Ihv*8!h?EU%8>q%aJ?imRV!X?VG~TR`b(&PNx2<;20=3OX zTIM<Q2Rc?83oozP_+na>N)MDORkZ!@UFc(xRMA#9y7fPKAASJ+Y55jvjomaphArSC z<+3flan_Ttj>{cMooKDp?N;~s(Tgv?Zhso;Q;h8c85-}wx-buMcIsVVkS0`?L5;6b Op9M7F0pGeE@V@~+p;V#( literal 0 HcmV?d00001 diff --git a/week-0/day-3/my_todo_app/venvironment/lib/python3.6/site-packages/setuptools/__pycache__/py36compat.cpython-36.pyc b/week-0/day-3/my_todo_app/venvironment/lib/python3.6/site-packages/setuptools/__pycache__/py36compat.cpython-36.pyc new file mode 100644 index 0000000000000000000000000000000000000000..019cb8eeb942afaf7336e5e97c7b5a2d45e3a62c GIT binary patch literal 2165 zcmZuyPjA~c6elHFmK51e(lkSh0TT)gsDU}%nxQSWV(8X%1vV^e_owNM6@o0%4joxi zNIJ6(d55`&T{iT%!w$O+*l~xUUt|EUJM}B{v`4yW60{OXK0ZFa_v7PxkK2t#(7J#9 z(dR1&{fAC{Hqf`Ai3iXTL~w?>dbBb;vbq-5w4K=_r|THn$!a6F>tb{lks5IyBjPTs zZk?i`NBjfCzXHB@!YBA^)DE73ZnWFRYGa29IhHIFUzU;;`5n#+4t!roE{k4KWH71i z-1+3&yQ$uD{JlhZ5jYfeF+p96;I0iAY~nn|U58j;$yIM@3!L@9NRh{7!Uc`fBJZ<7 z+-DgTvwwpKzAxCM!}6%)#StScA4L6v|B!IfNsCdLNY-N+lT*!&`r|y+$`ZqoMbx84 z1<TWHOel$Z(}>W1GR|aF<k7vU+=pR%>-tt;<aUZEFJwdslabt~QCbihfo-|ZM3iQU z5D}fEw1m|n8kZ!I^sG&zB@q!Dl^Gq;T!Ky5PmW!=WdwFp>xH+PFs?zn4Nd%m;aV|V zCmP{7T&J{#HZ<qJ<~OwK^d*uyT$xV-vO+@AAWhO5H0E~h4A9(`waQ-Lxm|(F4?O-& zg@*0|&9SWW9?%|HU0{qV3&LdW7d&?+zg2h#J$f>)fyB>7V!f(uA|vGt{i>#^NxyQ2 z!2*F~ckTkcQn_HI4)UR)yvePq4y!lje&v&Mfc9zSSN1_2MrYWl+{#~A^PuvFO|n7G z0}Yz1pl?-P<=;eyPxsK_?|TSjTMLBIA>Tt}6SS`$xKA+ud-8{-$>s$#Tr((s{T?(x zTLGPDxDFP4z!OeCtwNB0AkS5(3gt!>EO3YxHb(hnz;(fB<7U-gu9~%Q$pLAQ+(Y?0 z4wB~&0?_mqM)L+nv!>jv8Vmdr-b3H%6a(&$jfW_=9-=4s@DiX!5Y88OIb0utoCt55 z7`~_Dna@I&3z=kDr<VviTRonYSt1Q*<(QMP-mG;z(aUEUV@}U7_Gv;W7bjap%2_GJ zi9v|YM7brWeKwh`&<RaD%ZYOKixE}M81N~F7loW%I-QDJucqSV_6KmX27`d+WdYzI z$!1{`aX_I{@@=8KIL?z1jpOIIqj0R;L00sVOx2Gl?-hcoI^olpkMp+0SHV+U$9?+^ z6)scW*yP*=rn1FU@Vcf}w2$H!u>C$SW;7R6s<l4L$(dro9WC!Ad0s#ffYWJc$`jNS z1flAMsbWI422{q&NlaKOl?@D4=M;Pn``{QXXEKge3+l@#0W-%tYfRFSP+?97;D95l z7gQbKBvNv&>z)c8B-xmnQpt6Wx0}ilH0vv0S2XP(u{>gv4f28;72rw%_hiCFdB<{E zv4PHY9aSFKdI48kwU5BFw&1C%L9I)KvPWX@C*tpd?DG$=$WeKvWM!u}W*O<Qql5iC z74!-~9hVX+w>V9f)9q`^Qo2=6)%vTK-vXuLGw2Ww?a*?ui#;4#j^$Y%_ACbnR)7QS z;3o9C>G>)S;ooq=T8Q5S%7R@Ru(ock;&nW`dOF}<Q~O^NgKfOquJI6Hs349<1sP`$ zZ7Pi8!*P-=V^7uNm=tLo^Q$0d+;OUVPxETf>DUrFV7$764d<D@z7*QaPiONjXhK^& zdB-5tEwf{{Z5uFr8`k;zy3^i2)x9*QeJ6A{c({%EH6YqPKL<m1_2gxs`h689YE<)t ztzY0}Y_(39g!aY*6Y&O$3L(dYeneRg&){odDDURdVIS#Z3H|KA73$w^ejHd$=YN|N BWBLF9 literal 0 HcmV?d00001 diff --git a/week-0/day-3/my_todo_app/venvironment/lib/python3.6/site-packages/setuptools/__pycache__/sandbox.cpython-36.pyc b/week-0/day-3/my_todo_app/venvironment/lib/python3.6/site-packages/setuptools/__pycache__/sandbox.cpython-36.pyc new file mode 100644 index 0000000000000000000000000000000000000000..c3fc8746086b1749823e771f4037f01e1ec2976b GIT binary patch literal 15681 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�goR( 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 literal 0 HcmV?d00001 diff --git a/week-0/day-3/my_todo_app/venvironment/lib/python3.6/site-packages/setuptools/__pycache__/site-patch.cpython-36.pyc b/week-0/day-3/my_todo_app/venvironment/lib/python3.6/site-packages/setuptools/__pycache__/site-patch.cpython-36.pyc new file mode 100644 index 0000000000000000000000000000000000000000..ea287d5341b9dc81b5f9867d136eac34d5f97b88 GIT binary patch literal 1464 zcmY*Z&2HO95T0F9Bt=oOEz7P`^q@llLkHVMQ@}uK7%h^b>BV)C0Cv<E49#83lqiy3 zuH_#rFI9T!$-VUz+D8a_>_ZfLZ7;d@m_yN73JFpYJKUZ5X7-yO@P51PFMYRrVl@H& zg7+SZ`!8^nAE98t$V(UkCyY+0*x)b+0^b9(p1{D45m7&DD0{db;wqOh0wWAks1{#R z5k<yyY%w|~6;+hM#4A5jFt(Y6Q6DH8fOs&1ie`bL;|8J~gOsiUW+yPWDhtt`Y$}Yv z;7587DjQMW*q1FtHm+YO`w^V{RyoR1jR`Gh%E6dFUCfj<wv>tHDi`l<ir<wx4p;*< zp7LtVE9H&bMnm8bE@n6Vnti8gs-{6IXGG@oxmEd9s|t=FTem?jO?>eW!CDZwnmvPz z9)t2tUgF=2*=-L!F{1KSO9gYAz!6qb`Qv3%z2o|pBaFe2*AGOlFqe5R!DRRd<^-9w z>&%;sVCEf06olRDbwx45PUXl|lMjJAa&dfwUN(%os<R6eQL?9OM($yh=d@a?mKjtl zSl8}#x`=*qivB(0kM`B7r+R96Lhp$9L#-J0W`|YoB8L^UwI|LUDgS(D`&)I#Ym3{n z9`4uG3Z5tdMEJXS7jpUqId#o#I6K&>J(M^rt%KKQQnY{g?CIlg4-UV4`dBxvlI;Gc zdbNn;d6-O#Tu3g$IEv4?w#!8F+m9dSmnq9OW&bS6SYMv=zTi>X-!#_E{xoNoDUXSX zjE|XI8`l$D_4JOgIw!q~NKjZ+2KSK58U2}F*vN>yHhu%5y=gSzhQokry8Vf^G4}LV z5I&mUe7+;6#ZHkFTc?*v%C?f(<UET@zEg5}S;#z3%l~cBcMD_1=i9~28-FiNN*U+V zVt-&b8G;Vnei(+Qc`mp2(mamRavwKuVY(HDd^Ae3k_#yuL+}G_l{clPd8u8V%@UDk z+8S}Gy&{d|SuUo!Q5I<;wQG_nd7)i2M^XxH8;!P7o@tjQB8#S6dtrE%q&y6D%M>+S z6j8U*JbHJqup7GdP2G~Ogvf<%#A#k)TUZiH(MDd{j~Fv;z_`LS3MVQGo-yq#*bml3 z2i0Q92$T8HDw25UmXaA(!^ZT+xZ>{zwD-3A+A%b^5a#Ejol;`Er()e48jP2*(5*?9 zUu9vPs&?{}6<8R;hBRZt=Hlis!s2B7ss?FNXqpvuHy5H+hhFr+j6nGU1rQJ4fNT(l z1~edD5>TIX2qix1apB3P6!#mbHCRe0?V;A89)1J-BA#~WGO-aEpnuO;NMHr17h8CT lXrMS4EDoj-rXgYY9yc>{q9*9=EgG|5Q#6y{eeDs4{0CtWdTIaw literal 0 HcmV?d00001 diff --git a/week-0/day-3/my_todo_app/venvironment/lib/python3.6/site-packages/setuptools/__pycache__/ssl_support.cpython-36.pyc b/week-0/day-3/my_todo_app/venvironment/lib/python3.6/site-packages/setuptools/__pycache__/ssl_support.cpython-36.pyc new file mode 100644 index 0000000000000000000000000000000000000000..0fc4166be7f3d9abab29606748662b11a088b871 GIT binary patch literal 6744 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 literal 0 HcmV?d00001 diff --git a/week-0/day-3/my_todo_app/venvironment/lib/python3.6/site-packages/setuptools/__pycache__/unicode_utils.cpython-36.pyc b/week-0/day-3/my_todo_app/venvironment/lib/python3.6/site-packages/setuptools/__pycache__/unicode_utils.cpython-36.pyc new file mode 100644 index 0000000000000000000000000000000000000000..0f61d091d8cd33e15a47f47cf6921ee1649dcef9 GIT binary patch literal 1127 zcmZ9LL2uJA6o73fP17tZunmMbpd2PpC$=6qumhTqSUCpJ1nVlHD#Y&UE_H(KY;BdE z%Aesc<q8-60w<o6vQ;?pd-n6Qo%g-xm)qOky^pWH{IU@Gi8dO6@f+ys7z9NWCumS> zJiss~37J|03nOY#`#T!gv_T!v4ceqGXouo6)M@>O-6-tf(o%dDV>5$h^cM8D(A8%U z8Wl+630V>OSX&dD;sUM68Jh1GXwsl$g_r2gz69@yQ(MoG*t3ytUU~8ZhJ!J>K!Wta z1FpBiffc?xT{Ln%Iy~;UrN<Q)N=G7Q(nMIcG@I$6o@cDw$_0;8%4npcvL#YEjS{|K zr9+u9mktw^_CM8rJt<QOk=a?K$3KuX0sT4Y>S@-^cy{<T=LtRJ*H>c^E7ny^=b28^ zL~Rb&R}OQ{6Lpl$%a*xpnx%@lhRqHLgnjr3_CU7bbFkb7>n%(hCO-5EW*-I{Fz*`- z2HXl|PbgmE0#iI9OENnu$SL~rY-!CsgSfC(kS_q~0LZWgd2?`qz8&<TpF_S4&c%fn zK<f#WOBU#Hq(QLYl3z0s7z_bdL5+*Ps9eMMVK2BD!?H*NHp^J784W6uTwDe>sk~B^ z<2pxSrzxQnQI#EOLW9bgtMcI`(<7cR7;85Dw_i4m!_GP(r&XTnwAj*vrGYb2LvSv= zI1-dYW|=B2FjUE^g+W)g*JlswpWg#p&ED~`O?>PUugX9h%UxKDP3@Rw^lc&U!=$2# z3cRL?f#%birg;y2ct^mIEV??EB3Nht4hI)H4WeL_i&*niL`fi1C=J2F4w0rHZe#6L zwOGeWN=Io4IHf6<|3mY%oErvE!p~t@nPU(!<pjYzf-w+pfRb$xg9mqYdIT?nNl|CQ kR9qE$wPoWD6TPe$y051x%@cNFUbiy%UEt>1uJ7*t1<ckB!2kdN literal 0 HcmV?d00001 diff --git a/week-0/day-3/my_todo_app/venvironment/lib/python3.6/site-packages/setuptools/__pycache__/version.cpython-36.pyc b/week-0/day-3/my_todo_app/venvironment/lib/python3.6/site-packages/setuptools/__pycache__/version.cpython-36.pyc new file mode 100644 index 0000000000000000000000000000000000000000..c8100cd153c37d4d4e2843c887d8b311dd279ed1 GIT binary patch literal 286 zcmYj~O-{ow5QWE1P}5X_EV)7#Z7LxF3xwFPMM7Nwkt$1#N3EOGw)|7*nhS6ZuH-E% zuD}WhRltnq>07*c@2n{DllzOs8vuO7`<+pwn|Ss-3I|R)s9|3sYzU{XWJBxZ0pw{4 zn6|l@5$KmEb@Bv~K1Tl>#_4DLg}abjbY459IvWOFwo*OI@lhyryJ7~d@}@x>$`v}s zg>^<Oy%S1?!48e>VZ_)084JVPmj-ojcn33#1wZn2S-GvQw9u2K7agC7UAvZz#p<v8 cKOXX?dLOc@t>V7JYZAk37A2#Ul;oIv12zXyivR!s literal 0 HcmV?d00001 diff --git a/week-0/day-3/my_todo_app/venvironment/lib/python3.6/site-packages/setuptools/__pycache__/wheel.cpython-36.pyc b/week-0/day-3/my_todo_app/venvironment/lib/python3.6/site-packages/setuptools/__pycache__/wheel.cpython-36.pyc new file mode 100644 index 0000000000000000000000000000000000000000..843bb9dd17ff4e76bfab58c827cfbd44ecd9dbe3 GIT binary patch literal 5781 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 literal 0 HcmV?d00001 diff --git a/week-0/day-3/my_todo_app/venvironment/lib/python3.6/site-packages/setuptools/__pycache__/windows_support.cpython-36.pyc b/week-0/day-3/my_todo_app/venvironment/lib/python3.6/site-packages/setuptools/__pycache__/windows_support.cpython-36.pyc new file mode 100644 index 0000000000000000000000000000000000000000..4e3988e248b50de310eb0a510104e07564ae1fef GIT binary patch literal 969 zcmZWo&2G~`5Z<*N$8}o@6(CN?M{;PaHWCO_Rc%SCR*F(+f+AT$uH)ShC;nr1-H<B1 zkluI_UWG^4E2q8!CuSWLB3Nl=zN}}znf-Rs*xa<Y-oN_zLqq5%T3I^aLoogV96<!f z$XiD2VWJWJ7I_-gh(Rj1Xn{SQ;4Z3}caV)bAyxsFiolHCg7IhI1RCQ7uuXLKc*)X5 za|9=ij;!{hlw?yLLSDJlNyXrUaRVGtnYi;E)ih}Y>=T#fWU3-l?UwG>p(~Qy&7*v0 zP((4=iLNH2H00FfR1~?$vY4;J>9VHJi#*SmsOK|j?Z-hfAi+UZ)dfS>&+pT+G@jM> z<17qfegI&Z2<=#T9Ef4Y5^3@o7c{A1X$*@r{M#Bcfl6+yQdLw1wT<uwwlG@<^hZ2( zV|A}myfy#<!YwdH0*|$^J~nPJpvu@ReRZhKv2T@l4UkQ=8`znnxwg=5^tsMY;oJHG zeZ@pqf?t2L9avo|95JHKC?bTWP9Ow}28Ezb20xr(6a!)oi5Lw<#%6W9Jaxjd#2E>Z zzj0kIf^d>uQ8tXTX+6vm_j5tHh_aNsyRTpF?d>)i?(*1W9*EJUlN4My1L_F+Mbt~a z>#b1Ca?0zVP6_VR<9BKs()Rr*QBULh(p)A<Q)w8-(wb0~(zvnbZNoKApx2}O_Icm4 z?zud({jT5bU3isd|NNpUEf|@yh-Vz1pSNX|LAy}hv-(lmVk~1dLmH}8@6ms}^2y0r zyX7DCdKYKMA9^kS^sL!zb)?Ry`1h^XKve204b{W)hv3kfg>AfzZOzbZY+&{j_G$*R jAg~9@snl|Jg{>U#a(t})BqK#k57Zx{932Z=x@G<bMCbS| literal 0 HcmV?d00001 diff --git a/week-0/day-3/my_todo_app/venvironment/lib/python3.6/site-packages/setuptools/_vendor/__init__.py b/week-0/day-3/my_todo_app/venvironment/lib/python3.6/site-packages/setuptools/_vendor/__init__.py new file mode 100644 index 00000000..e69de29b diff --git a/week-0/day-3/my_todo_app/venvironment/lib/python3.6/site-packages/setuptools/_vendor/__pycache__/__init__.cpython-36.pyc b/week-0/day-3/my_todo_app/venvironment/lib/python3.6/site-packages/setuptools/_vendor/__pycache__/__init__.cpython-36.pyc new file mode 100644 index 0000000000000000000000000000000000000000..02cdf114fa0f2014dba8f7e50699893f6e028512 GIT binary patch literal 148 zcmXr!<>lfJG>>Hfg2x~N1{i@12OutH0TL+;!3>&=ek&P@K*9*(m!p13Zh?M5W`S-} zX=YA}Zf03_MqYAps(x{5Nohezetu3dGBds`H7_N<NIyP4GcU6wK3=b&@)n0pZhlH> NPO2Tq=wcvd005JEB^m$# literal 0 HcmV?d00001 diff --git a/week-0/day-3/my_todo_app/venvironment/lib/python3.6/site-packages/setuptools/_vendor/__pycache__/pyparsing.cpython-36.pyc b/week-0/day-3/my_todo_app/venvironment/lib/python3.6/site-packages/setuptools/_vendor/__pycache__/pyparsing.cpython-36.pyc new file mode 100644 index 0000000000000000000000000000000000000000..00de670c51bac7860f6b5580ec4b84cbd060653c GIT binary patch literal 201070 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 r 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 literal 0 HcmV?d00001 diff --git a/week-0/day-3/my_todo_app/venvironment/lib/python3.6/site-packages/setuptools/_vendor/__pycache__/six.cpython-36.pyc b/week-0/day-3/my_todo_app/venvironment/lib/python3.6/site-packages/setuptools/_vendor/__pycache__/six.cpython-36.pyc new file mode 100644 index 0000000000000000000000000000000000000000..e20bc73a4cc736ab86c85d0067dff71be417e069 GIT binary patch literal 24445 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 UEv)%SES11Fagv~$aBsr?J>WL$L;wH) literal 0 HcmV?d00001 diff --git a/week-0/day-3/my_todo_app/venvironment/lib/python3.6/site-packages/setuptools/_vendor/packaging/__about__.py b/week-0/day-3/my_todo_app/venvironment/lib/python3.6/site-packages/setuptools/_vendor/packaging/__about__.py new file mode 100644 index 00000000..95d330ef --- /dev/null +++ b/week-0/day-3/my_todo_app/venvironment/lib/python3.6/site-packages/setuptools/_vendor/packaging/__about__.py @@ -0,0 +1,21 @@ +# This file is dual licensed under the terms of the Apache License, Version +# 2.0, and the BSD License. See the LICENSE file in the root of this repository +# for complete details. +from __future__ import absolute_import, division, print_function + +__all__ = [ + "__title__", "__summary__", "__uri__", "__version__", "__author__", + "__email__", "__license__", "__copyright__", +] + +__title__ = "packaging" +__summary__ = "Core utilities for Python packages" +__uri__ = "https://github.com/pypa/packaging" + +__version__ = "16.8" + +__author__ = "Donald Stufft and individual contributors" +__email__ = "donald@stufft.io" + +__license__ = "BSD or Apache License, Version 2.0" +__copyright__ = "Copyright 2014-2016 %s" % __author__ diff --git a/week-0/day-3/my_todo_app/venvironment/lib/python3.6/site-packages/setuptools/_vendor/packaging/__init__.py b/week-0/day-3/my_todo_app/venvironment/lib/python3.6/site-packages/setuptools/_vendor/packaging/__init__.py new file mode 100644 index 00000000..5ee62202 --- /dev/null +++ b/week-0/day-3/my_todo_app/venvironment/lib/python3.6/site-packages/setuptools/_vendor/packaging/__init__.py @@ -0,0 +1,14 @@ +# This file is dual licensed under the terms of the Apache License, Version +# 2.0, and the BSD License. See the LICENSE file in the root of this repository +# for complete details. +from __future__ import absolute_import, division, print_function + +from .__about__ import ( + __author__, __copyright__, __email__, __license__, __summary__, __title__, + __uri__, __version__ +) + +__all__ = [ + "__title__", "__summary__", "__uri__", "__version__", "__author__", + "__email__", "__license__", "__copyright__", +] diff --git a/week-0/day-3/my_todo_app/venvironment/lib/python3.6/site-packages/setuptools/_vendor/packaging/__pycache__/__about__.cpython-36.pyc b/week-0/day-3/my_todo_app/venvironment/lib/python3.6/site-packages/setuptools/_vendor/packaging/__pycache__/__about__.cpython-36.pyc new file mode 100644 index 0000000000000000000000000000000000000000..2c98966b52f3668fb6a92f04a3b0da211ad77a97 GIT binary patch literal 684 zcmYk3%W4}j6ozL!zKq9q?6x6mHPD5j_9SUZODQF7vJ54~(1oCg@f_JBqLG9y2G1My zZMvRqSAB)9D#esULLcXdU%zyY-b^Oh^xL~1zdBL$J9;uwA7A-p?mQrZm`8Pt<GO=8 zb%K*Pf(|6mg&y=_04WT&DegjsdoaR%7~=s<a0*9w2veNF43FR$9iBvZ49{25{KX&d z8qJe-TC9!a&Qii^CADo+U^`}*6z!4HOjxpUqO>6&5@MO<l#q5rh;emY=)F${ggDI( zyF04GS)XKt6wX#s``DkPb;0;S!&ym%2{sc#N~!jmZ7UmOswnS^Efd@3^jd0)oMoI@ zMh)6Xjqdi|PN0K`n&xF?tui0-e9LU**2_}Xx!S8Df3)eIUoPJ_^BXA&4rpcFW@Awy z05K8D1XplWN?|oyJ1ezmX7C`rG7r)vlg;Uu)eZ8ufA+2wMYo5?zee8=m7<H~S#xsz zzY275cK&wZafx1;uk%T0!^T;seYx6yaio)gu1Dxw!F^A3FKqP#1_9yc^)Mg{7zK<y zenxs0;())mxvf>Mm|CnI<FH`6`%09C=7w6Qtd!h54atrQkovJTxxaiZop1Y6?c4NY ZEx~d6DLl*^dmJZOoF(1Z&yJsg@jtPe%_jf= literal 0 HcmV?d00001 diff --git a/week-0/day-3/my_todo_app/venvironment/lib/python3.6/site-packages/setuptools/_vendor/packaging/__pycache__/__init__.cpython-36.pyc b/week-0/day-3/my_todo_app/venvironment/lib/python3.6/site-packages/setuptools/_vendor/packaging/__pycache__/__init__.cpython-36.pyc new file mode 100644 index 0000000000000000000000000000000000000000..acd5a371c64e1e2a4ea3e8ea8cb0712a5f868aaf GIT binary patch literal 522 zcmYk2&1xGl5XZH<_I`R30(pq|knACcTuRBkP$=z55Qg<iu|+g1p$~%}DX+BGp7IJk zRTD$7KtE>0%zyrx$G&f`e?7fqIb(m>#i>*LoUZ?qAehKB!;EK`^BfCaWK86u&?{W? zHI}@@idR_k8XMkV%UkStha0|0bt|zJrKm(L8qtbwU-MpUezR@=k(AlCSgyyNH#!Ch z3axQrsf9W!ugtt$S*PXzuW_D2%0DvdsFxOCjNxD$z|sRu#-5zoA3{nS0Ewg0DeM5W zn&j-|Iq?y3bf<GsP(jms1rVJ&7aXOdsQ|7^b6iW<5PCvMptZP$P$m4_UXhpA7@|vJ zE-jI{g0M;;FXPU{Wb52aEf)%(`k#}&hLD|6C-d*j-B2~*-;W`n9jvnVyQs9dSI4)* zJb5{I8KMowXnz^PQO?4+!H(10xL5Oj08q0^HXiJ0slTBSQOoaS(bK1H^SiRm{saA# Bi~s-t literal 0 HcmV?d00001 diff --git a/week-0/day-3/my_todo_app/venvironment/lib/python3.6/site-packages/setuptools/_vendor/packaging/__pycache__/_compat.cpython-36.pyc b/week-0/day-3/my_todo_app/venvironment/lib/python3.6/site-packages/setuptools/_vendor/packaging/__pycache__/_compat.cpython-36.pyc new file mode 100644 index 0000000000000000000000000000000000000000..cefaaa7886cc5c7d019c0b101afbdd8db80c70e8 GIT binary patch literal 969 zcmah{OK%e~5cXq}Y(ttHs4DR|gbUIhnn?7(rK*rXLgG+?kdRn`tnJ!q-R=w9n<`Z~ zwNm?6_)ETW%3t8bi~}Kv10&6NW^8}+dB*$O+x^kI=bt}uLcWs?Vc@?2wI9GpB56TN zn$nV`tmG-Dm}5nhMk+e%Nb-P4e$LYFI*K6bsh)YI;u%f1s;=teDm$`!L(+Say(dX; z3D_jzev}>Cx@esex@>CWd@S``TU}Rv*ce?oF>9;bL434CVoP94a*DS>FzA5xK<!g7 zugNXBr86d}WH+&7cl4TnWsaQDD<=7jXmTAv`RH=mAA`I!DsyU_jgK>{#(9xhJHF8F z6f&i9Sx8L6$sEAff@M+cLokY@RFaf!7EZb3q0AFR6MwJ{iaO5<dpKFA@+d$Nf-CBM zP&)u~N3ZA|x#HIdMUTD#ZO`+<`l!lE<@@ebTY<!_r!rx_v+^T^HrSCLZ>Fwnrj2g) zj$2*GJv~1^t#YfTR=KuubzRs^SIku<Ycp-K{5(6+)yY)kb=hQY(ky&Wh)P`u@fhjh zBnZ7s{`<PguUkjJJq90$3*q}hl(lRN^anzGX|rOrV@7}*xF^hD56t%Ogc*Y8x7K}o z1YzJ2Q-dw@Bd72OWo9A5+@K?oTQn+QCVYhyF!A`mMFRft?-%W0kuad%E;qXnB?DwX zYh7!Ay}?Ep{0;_Bd2Sch59Z3?2Nt@T)t<lo_zcZHY&zoyV4$-CnOWZtBMX^;9$0Od Zz$rdhHR}*dSWNA(m=EbNifGKb{3q#}^zQ%w literal 0 HcmV?d00001 diff --git a/week-0/day-3/my_todo_app/venvironment/lib/python3.6/site-packages/setuptools/_vendor/packaging/__pycache__/_structures.cpython-36.pyc b/week-0/day-3/my_todo_app/venvironment/lib/python3.6/site-packages/setuptools/_vendor/packaging/__pycache__/_structures.cpython-36.pyc new file mode 100644 index 0000000000000000000000000000000000000000..7108252ae880651e37338f331564a0f93885e2ef GIT binary patch literal 2826 zcmcImUvJYe5Vw;yO}lRG#`rIgctVlbDuED4AT$I5@lpxFQzc|&vDalwlgxG|G3~8; z;H&VJ^2!rmfhX?V1==Yg<)16xIXT<E^ZD-AJXl@r^xi)D@Tp127c$oxFy4W#UV`9+ z(}+yyh)%4LHL*uFC9es$xP3;rEgDmM)D+Dr88zW;gE!%A)4X+r18*Jfydz%gE9^u( zJMa0sDv2^JSU5=&sdJZy$Ds<7IA2R;7;Cnd#es(B09O>vg24`S^&W&EBg)Ch;*?uw zWMp%jH$Ve6cR)9Ji@Ts5-sT<9Exy9Lpk2Po*Fd*<kM}`$_&VPJy}~bnhnu<kCf*C< zP=5?4fM7$7{RMP|LE#i;T0;o|BcF*!^M(@9o^;^Rh;PGzo}_~`Ot*HkFydR`@!@_P zC^1k%XQ@t-NX-w~v50vh2dN(%`r|Mj517(23v?!h+D<>_E@M)plCd_rfKedyWW8{7 zyRa^JY{MkuaTf-fXnIPfbc&wSp=afdeP8Y84cykFvITQ~`Y&C0L{OZ=7;aDoI<p4G z9hic;EKIM=#-3$B@@As<g}jL6FcxXXdUHs<x#OYj_i*GYY*mIL7~7~q0oww~g%F-X z2oLDgDni(SgpHN<<3QwXSQ`0CF?N2?DhI?7W0xx&KwG&3Yp_C-!htS1cR}{?l<OdB zP-8gSwF*?UEufZN;`{katUB8muIXk43fle=3ix}w3I)%C{$oSEa29<YH=6f{V(jbi zSQJTCQ3EZ;Vligy4s2DFK)+Z6b!Uu2uZzVJ`x8LVJB&>do<%tBGIo^t(aa*TcqJB- z#Osup>=JWPUP7^n0y9HiMe&17W+SXf!#7x|3Rk(7YcKwcJpj{>h9$WJ{Xg=hyaM}I zhy0u>Pug2W)MklPN;xJ%9{OuIg`Ql$cujvob+Q9H$`ughmu#-&UJdG!TvuBr=IRG? zU{_0yxD?&hLt%p5uY<yZG0}#JsDI6QOA(Gq>W4MJ|A*^LDLt-%UW)J*{<X>o&lK#F z8mOgMuO13%;aMHja@1!?qM{Ixc%IL}Tr0`Vg7GB&oyhAbZlL&Uazh@u3%!cm&_489 y$gg`Dei^}64<@X{jFtFVmOIJrfe5rYqT!`77R}wKGk$)CYZMaerrp2gK>rS7Li2?H literal 0 HcmV?d00001 diff --git a/week-0/day-3/my_todo_app/venvironment/lib/python3.6/site-packages/setuptools/_vendor/packaging/__pycache__/markers.cpython-36.pyc b/week-0/day-3/my_todo_app/venvironment/lib/python3.6/site-packages/setuptools/_vendor/packaging/__pycache__/markers.cpython-36.pyc new file mode 100644 index 0000000000000000000000000000000000000000..02cf4f2975a61691edf662e559f00bbfb802876a GIT binary patch literal 8846 zcmcIp&2t+^cAuUZ00R*G5J`)aWXU7y6S4%#Uy?s4TC`1BT1zBNYGv<a9b|-VQUC`t zaL+)NAaJYJ^yZS<N~LO#KI~~LsoGp}Nmc%ZTvIvBH78wCm1B5Gey?XR1R*NBa#eup z&*^^s-s{)zy?*`9=xAyD%j@6F+nV+t+Q6@f`c0(prlDzE<IK}q%wa9v(OZUNFzVAi z(=k<<b8@Q8J9$+WoB~S2vsy)`*eW@t)`&CGDm!I0&qV*IGuj$+##-afcx%F$Q2jad zA8{s8&+~#e)tYvuRo(JlYaMltwq~3ew2QpNM|hc!ZsnZW&ow^Ai$9=O9NRUV<7kib z651uzK7sZGA3=LWwO>d32%kiIQk=y2Q)o}|X|$)sDYV}}`!#+P?W3w~qdmiC(VkW9 z(_)ez+hxd)@3K!clqb^i^|U;hmZ#G4jkL7W@^o6xrRABlJe!v1((-&-UP#M}X<13j zOH?{@{0yJtr}!KEIR0<`n0L;Ix#n4ZnP2%q+hvR}tSWrx(|K3Z@~yOdJ1yTy%XicA zJu01Z;v67cOZ%>?zVqTdR(L;KVS;~v6(;zH>gxq@0bf7LzE1K5wf+tD^`e*)7XY^+ z#zaM&pV35R26#G`#3jsH9GLa-E^EHIt2vjk{>`+0MU11TDlTF6Wl_cKD>NJM=0#P^ zi&1frdUx53wy1&j5jCbfqd8ak6941}&3TJ&@Xz@256pR+-=fv{=adVx`3};%NbezC zL%NRiKEM5=<$S>J@SkDshmaV}`G|kP@1nK9@9`CsH~1=FL%GPm<fAA*hQzG%G9Z_g zgx%!&hE}=%oQ_t-h{xTBVc>NlQERl?fsA5{Hy$^_M&QR|ZQ1an+GfYEM`*89%y?|g zm7!REQWtINip#3KF2ar%h4DxjVaC=*<N{7HX)OC3^Gc48!K%C$ND=2gmqDi;7j6ae zJ6H0!{ADMI1m93|D=aSDZA3!4-g8D6vbdZ8szp!RBCP0faicBjjm?IT@x&efvFkPX ze$QyybI+CA7%=s7pNq|gFZicHtL@502&8AT&Sn2`Lk50J_|b~n5^=si4U=4uR1^CH z>cp`Ak5Idb6iy%$n!~u}=$tu*Vy+=4(cN7x+4wE_b|b;kZYiYf@7&Pd3_3o)Y<EH- zLpyvFbUbcLu_>e-1@_wVn*H9@_p53?vE8cGeBf8B#id%U74VKn^>VHDZO8S}FNIo- z2lZO*A2fLatE+79XY*03J>PD$uRQEDJbtC|c>9rG55;^aqE0&s0xuk_)*cI=2Xemc z*0<d)Y~_4{a#(FYRWuzVnssEB@k;!dB7Uq5^CM_upGl4sOWY_Dtu`dVMu%%-V>`l* z9=Vat0}=WcB0KD~Nkr{Nl(9z65UsP65pME0Wf}cR?RDxS4BkNcDcDbAUiX&?_BOG5 z2w!a3LqU7V_wlv;AhN}iMhJBMu)&2LY~rg>PzJ>6)hQut&SjLC2lj!s<|ci+jBH;n zxei5OaD$sDO`hX<lsR7D7Ro#?LLro5b0y%SP7vrvC8bZ1!V<C`>uEI@S&U^XIF>oJ zK{$_QD7;O13PT1MPdq2FZTO9-R;v;a1(|h6X_;#OOPx*<{ir;!UZnN3CfjAndU|X? z4X9NrOwvXUF9!L?h+6F}eCw}OPS;W&4lHG2lp>9|$yrk^*3=`T2W`De8d6{BmKUB~ z-MRSet<!R+vWR1t-wb5Sg=(wS>Yf{hwOS&6rvc+7Sb+snw1L*U18DVGkbF6S7qLO% zWuX#j-$SwV89ucVM0Z+kPmsD2d|ApszGT%R)Jg-2u`8|*EIX#Sk$qaJ6oyZajnQ(B zG7>O(fwIF6(@A_F2@45JOScUAOX@vb8i~m-N+Sq^YI^{!>^}6w0XAfkkg$O^C1rzr zIkOeMHwdj%)F%6|s{=%v!$iN7%8LN?Q6HS8OKQI|eYppu#||fsj#VOiiabbMZVnPR zhh05`Pls==qEd-SO69m(;ir*U!7@uoien&=+OJHazS=&VzE|G7JAG6%)-A8Le;Q4f z0Oa#NAkakZ_$a)a<m4!W14Ad3k8`T+xe*=fTKj4ADDcS(8W<N(9c(Kz98aZVH#?q} zL7K=QN#O}M6!Csff3^LdmRo-Ww<I3VW`$2f*grU32_F3^W%SqjgW^IEDipe?RLK%` z>3g;Ry_+piP3I5vq)T=)l3~;jBl)$%yK~}6B;88>|8Z$~4O>+=kkOCI9FmfCvha}> zv8LXGpLI-2@?AYWIFj^c#ZX5yE-c->v$V0i5gS_~f{V+-n0Yaa22@#Mo)$c}^^m)Z z4NMM^G)dZ{YuvbTqpMR|L|Q;Pjr6M<du(x!Ep+o_*&BYWH~a&*621!8GAgiM3eN-h zF(r#Y^FvyTREu1oY+uDHSA~%H4oRW3$1d!#xmR9@4)UM1P`AHOY`8v;^+3MrT5%4p zq$mEY)qdSyZI4~tW0eDHBjcZqL1g_S7-Big8F?=~?K5QqdN7B|BpNH(WYU9V&o_`l zGBsNm{!Mv@0SFw3ztg`pHxeepZJDms10n08hTA|WV4Ugd0xw3dUX58}Xe;(g3m!bU zI_?gOe@oD5sl3*`co>lCf)~_XFI+^WKM8<KxJ>zB<ob0X^O#OIoMhE-Xf=5opMOis z&^V2i*qE;R?q^;Z@hCeJe~(7OrwESArm?Gs(~<c-k)81Fc9bK_$=NpGP%qby;Y*}% z>fr3{D4+C@jAnDbPrSs0-#dDbNuTGMg`PTT2!o{c8I2caz;S<0%_Mlgr*GV%;72l> z;AZ<(T9ISGR~^&?J4fV@q=)3XW8Wr|edDl<zttbWFZ@<dE>*Y4>D+9{Fe3MJtd=-q zwd96U(Ipv=n6-wOx>sD-625rSmW#iqRT5$8o<2BzVDI{)_n0kjVTL4IasXr6gcoG3 z2On}*J0NSyQm2T?H3Bts(7!<6ACUTDHTP1a_65q4cQGS2sYfmo&~a*yErsxL=q{!F z!r1VHFIUybX3+4V1@j4`<O+4>8on>&Fg`T?cSs>=Ta8WUkFrTt)**+?WF>tX5;?6a zsF^?#J1Hr}NA|vlGq;^r&YA*`6JU6c!q||HUXXWEbbmxritbN<EDVB_zrZZ%P&UL; z0{M@9kQGbbM7^)E<;T=e3Z0ZYDfPu0auJ=G$|GSMMN;H=s60I$k&DK#z4|V6`WDW? zF55A_()?*ti;V4(tTG5G(|)1(<*&7#(KHipHOe*f$t;XFdk9NzTk>I4;Cj=dyA)28 zvCF<^J&Z@4t{lcntaZ<1(Fyz6Rop!2Hmt57HuSUo>}_;aD@93x2l;?9<-Z<5Ew<`` zAGy#r2oofC>p+I`0~$0%*%@S&oMIjneOoaQ*EfVyVw1)XF%$PUflD4h{WB&i&8jh- z9fvsN^^!iuEVL#J>Edg)dvrJ`DGr`T1-Cee1nF{U6Fp+!!dwK~*fdBvD-NXBt@(sr zy6qphJ==suCkYe`-kd9@q7B3%mXbtyB&q*|P9q)}7#y4AExqKH3O9iwJ^zZi>Z+?j z=!v$nAqDy}+KOn9YF4!U8!B7c7TeLE{0r&3Z~ke=fG#vhzoy#wY^sgX2mSaNJc9f& zt(k+~CE6iLP;O;4N9oU=@k?XJ+{x|a(Pu^l%y}G<teDLrxL4@qo5dZ=pQQFqL483F zzF2@<P>@T#LNC{|NU{ia&*0W}KKvu$fw}=ZQ10o?+!m|?eg8^}MmXXD(AYZJSLLk~ zQ%y}&%FmF!p!}4&K8i0;*JFJ%o2qJP#w0#qxSrS7$|fRu!-`pc2>}0z)K|%8m9$}> zMXJ-oL$vbq|G`f_!Zg6nFszi7R+OZb_m!f&k7k^A+igU(;v+ABSKgx9;Y2P-j>!vp zS}DebH1H+s3dR<NEJOJf!B@KHFR4ZfC@w;~)kr`^T!fBGszWD9HZk(wk-|A-8XX^K z(h@rgjaoukW|p3Z(9P<ok=3X18QTpsvUtVYX!P%lJ5VD{2q3m!-!^0wqM~yHCSFHB zL|{g{u3-$!aK&8do_uz-+H#u#^as@%epai?V24br?|O+NZK@*_m(!b!Cmst=UA*Ib za+8KVF&qA75EuIQ6mz@b^C7b1snkXfUX=a|1f-{|#PT5bD3gzgTqN})b3!gO?QTdq znEZZDC&<Rhg5GGF(5UD`Ew{sbi|adh+95*W_vCTD3QcQQLta#QN#&->M^s+!*WqNC zzfnFBJeS;$BVbg1B_2C?=Zo1@`4>RrIqgGbL|#E5-=yq4$|&9>=P9GDkyk0Bc$d6P z**lcIi>xvl7aqAGf}9eetf!%(S(2MCBg!~3DCID=`j<J9!Q_$%e=)gH=95ce0`(d} zMfk0OEl7|WvW0X){~IZ^k&!!DhOn8;G<4`T6TIL5kFkvXG?pm6i4+ncF9vRg!iXj1 z^f3ey$w-gL*Dxv5nIyOr4OhGQSExLlPVaF_`y-}Ew)7TksR>)^Fl|R?TK5t}Jcs>+ zK*Ne6aeYRkor1PAqC!tu&aYr|v4fcLEB$NDM@nx7-8a)$fHdO%VPZ)y+sfy+!LC5s zh$}0z`kcHLcnY^s-~nK1{fp)GctnldP)`ytgMDQ{?m==i4EXvgA`T;@qLHK;VkY7O zpi>}n=qN}V-|>*Bg(TW!MyJ^XHer@^$M30UfmaWSDo;%Q2H;*2DI#TaoYtfxg^<cv zw$h6MQQC5~M`Ngvf{AdNQj37V)c8U&_oA}Vh=%Hl5C2y*?i>J}99Vsy&Lr-+lF10I zovnWsjR>wZ-92z~Dau*wKO})HR-)KaZ%KF00{U{|8wlG?H@jL=A$A+Tbv$xNpQ7&e zLp*f|*S9xi(8~M?e@lJa!U^*Gk2CHTIZ#m+swX%DenfS!VK+iJWp<$6!d%aG<yMD+ zv-E}&(5a-bKg^&V$P6b4R+K&k*j(VD3yK);27^oN6L24x4}78Z2IeSQh`4%3N?LYJ z#dGYo4C*2bla~d;A5Tb<ltG;Dv^ngnGB1hX7>V@O>FZPqXYkc)NQ`4E^~HouJ4;7L zE0Pi~>6sk&N01xvry|UMgZTqXC<UfsAf!X^2A@TkEs8K#*!{{9J%Md@u(5aolO))Z zL`RaIiLJiZD|^(pL)kNA&WZi^t}5bKLiz}P(HX}ZmsF>k{5n~njEIut>d6viBb3ph zm2@$P+1<E++dm!?qvYmQBL7)EM}~=0u3T}vMquOV!R`UM2Fs*!l)gwj@o55;4<0r} zJyLP=#22BcO%kuP9xScjS^DJevV5P0jsgEQ3Ro<ur`UMp!SedXoz<1vr}x(4VxqKa zt7~yNtv*<~`}5^E|H<m=UG$c+UTC(oe&_!3z1X4`H3TEVIDdC-X?=Mm&aWqBf7tTZ zYx{GS?yugHyM!Yt%j9~gdr_==BG$#Xv5tVIzC|gL-_Qt`vWJuj%E+rp>>f#@vJ;1G zerzoyZ=8#?so@i3)9}aDU!R4_EW=HjFd=s4L>~Xb#JDPF{+gAPZ6o`p!=)N4UPI3` q9I6RQx~0l8=I5b)r}eU76-u*Y1z{D_f626t<PB@YI$>GX%>M#lrn|@h literal 0 HcmV?d00001 diff --git a/week-0/day-3/my_todo_app/venvironment/lib/python3.6/site-packages/setuptools/_vendor/packaging/__pycache__/requirements.cpython-36.pyc b/week-0/day-3/my_todo_app/venvironment/lib/python3.6/site-packages/setuptools/_vendor/packaging/__pycache__/requirements.cpython-36.pyc new file mode 100644 index 0000000000000000000000000000000000000000..fee27e0ea448396d22b7d93e248a3b2a6501569f GIT binary patch literal 3839 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 HEvNq%g2~hm literal 0 HcmV?d00001 diff --git a/week-0/day-3/my_todo_app/venvironment/lib/python3.6/site-packages/setuptools/_vendor/packaging/__pycache__/specifiers.cpython-36.pyc b/week-0/day-3/my_todo_app/venvironment/lib/python3.6/site-packages/setuptools/_vendor/packaging/__pycache__/specifiers.cpython-36.pyc new file mode 100644 index 0000000000000000000000000000000000000000..505823fe9baf007b984ab61ab19acb3e0dd7c1f3 GIT binary patch literal 19788 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 literal 0 HcmV?d00001 diff --git a/week-0/day-3/my_todo_app/venvironment/lib/python3.6/site-packages/setuptools/_vendor/packaging/__pycache__/utils.cpython-36.pyc b/week-0/day-3/my_todo_app/venvironment/lib/python3.6/site-packages/setuptools/_vendor/packaging/__pycache__/utils.cpython-36.pyc new file mode 100644 index 0000000000000000000000000000000000000000..5eb21accdd98118e67550c6ef9c5e9ae39566922 GIT binary patch literal 453 zcmY*VyH3L}6t$hSjRK`0_=yOmkzim!2#JNM5@HLgtTZ;otzWX80u@{N6$XCED-*xa z3A<Cd(mg)D51)H|IUMGrhpXuq1mFkk84CP1xV;EK0D&9`SVMtoB$7ITF@|_rr!-yk zNV0)-pQNPs3F-kskD%!PhCWave$>pY;+><I39XFt8DT4CnUelU8zvoo?quu2eX{O9 zm3TZoZ^JM<i)Rx2F1S4o;J^YB_yIO(fi@t>pve}NLFE*;jZ~7g4QFeL4V}|BpV)5Z zdtALzQ$U}}M$m6y^6<{~zH&lWn(1=ZF-}UhTE58E(#lfTX{Qvo`xLLJB+68}X_w8M z$$8Z|#_d?Y`;&jdQR6U98~+a=6M2#O9EUAkXDG%dW=!15qyaoK)DK!EG~?9tV>tHg Zrrd*rSeji6MLJGzVxx_<XDCbZ<PSxMb)*0Q literal 0 HcmV?d00001 diff --git a/week-0/day-3/my_todo_app/venvironment/lib/python3.6/site-packages/setuptools/_vendor/packaging/__pycache__/version.cpython-36.pyc b/week-0/day-3/my_todo_app/venvironment/lib/python3.6/site-packages/setuptools/_vendor/packaging/__pycache__/version.cpython-36.pyc new file mode 100644 index 0000000000000000000000000000000000000000..e5034039f378f0e153ef37dd7697596be28e8300 GIT binary patch literal 10563 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 SrgOmg(ln;mosUX}Gx7gmmuchx literal 0 HcmV?d00001 diff --git a/week-0/day-3/my_todo_app/venvironment/lib/python3.6/site-packages/setuptools/_vendor/packaging/_compat.py b/week-0/day-3/my_todo_app/venvironment/lib/python3.6/site-packages/setuptools/_vendor/packaging/_compat.py new file mode 100644 index 00000000..210bb80b --- /dev/null +++ b/week-0/day-3/my_todo_app/venvironment/lib/python3.6/site-packages/setuptools/_vendor/packaging/_compat.py @@ -0,0 +1,30 @@ +# This file is dual licensed under the terms of the Apache License, Version +# 2.0, and the BSD License. See the LICENSE file in the root of this repository +# for complete details. +from __future__ import absolute_import, division, print_function + +import sys + + +PY2 = sys.version_info[0] == 2 +PY3 = sys.version_info[0] == 3 + +# flake8: noqa + +if PY3: + string_types = str, +else: + string_types = basestring, + + +def with_metaclass(meta, *bases): + """ + Create a base class with a metaclass. + """ + # This requires a bit of explanation: the basic idea is to make a dummy + # metaclass for one level of class instantiation that replaces itself with + # the actual metaclass. + class metaclass(meta): + def __new__(cls, name, this_bases, d): + return meta(name, bases, d) + return type.__new__(metaclass, 'temporary_class', (), {}) diff --git a/week-0/day-3/my_todo_app/venvironment/lib/python3.6/site-packages/setuptools/_vendor/packaging/_structures.py b/week-0/day-3/my_todo_app/venvironment/lib/python3.6/site-packages/setuptools/_vendor/packaging/_structures.py new file mode 100644 index 00000000..ccc27861 --- /dev/null +++ b/week-0/day-3/my_todo_app/venvironment/lib/python3.6/site-packages/setuptools/_vendor/packaging/_structures.py @@ -0,0 +1,68 @@ +# This file is dual licensed under the terms of the Apache License, Version +# 2.0, and the BSD License. See the LICENSE file in the root of this repository +# for complete details. +from __future__ import absolute_import, division, print_function + + +class Infinity(object): + + def __repr__(self): + return "Infinity" + + def __hash__(self): + return hash(repr(self)) + + def __lt__(self, other): + return False + + def __le__(self, other): + return False + + def __eq__(self, other): + return isinstance(other, self.__class__) + + def __ne__(self, other): + return not isinstance(other, self.__class__) + + def __gt__(self, other): + return True + + def __ge__(self, other): + return True + + def __neg__(self): + return NegativeInfinity + +Infinity = Infinity() + + +class NegativeInfinity(object): + + def __repr__(self): + return "-Infinity" + + def __hash__(self): + return hash(repr(self)) + + def __lt__(self, other): + return True + + def __le__(self, other): + return True + + def __eq__(self, other): + return isinstance(other, self.__class__) + + def __ne__(self, other): + return not isinstance(other, self.__class__) + + def __gt__(self, other): + return False + + def __ge__(self, other): + return False + + def __neg__(self): + return Infinity + +NegativeInfinity = NegativeInfinity() diff --git a/week-0/day-3/my_todo_app/venvironment/lib/python3.6/site-packages/setuptools/_vendor/packaging/markers.py b/week-0/day-3/my_todo_app/venvironment/lib/python3.6/site-packages/setuptools/_vendor/packaging/markers.py new file mode 100644 index 00000000..031332a3 --- /dev/null +++ b/week-0/day-3/my_todo_app/venvironment/lib/python3.6/site-packages/setuptools/_vendor/packaging/markers.py @@ -0,0 +1,301 @@ +# This file is dual licensed under the terms of the Apache License, Version +# 2.0, and the BSD License. See the LICENSE file in the root of this repository +# for complete details. +from __future__ import absolute_import, division, print_function + +import operator +import os +import platform +import sys + +from setuptools.extern.pyparsing import ParseException, ParseResults, stringStart, stringEnd +from setuptools.extern.pyparsing import ZeroOrMore, Group, Forward, QuotedString +from setuptools.extern.pyparsing import Literal as L # noqa + +from ._compat import string_types +from .specifiers import Specifier, InvalidSpecifier + + +__all__ = [ + "InvalidMarker", "UndefinedComparison", "UndefinedEnvironmentName", + "Marker", "default_environment", +] + + +class InvalidMarker(ValueError): + """ + An invalid marker was found, users should refer to PEP 508. + """ + + +class UndefinedComparison(ValueError): + """ + An invalid operation was attempted on a value that doesn't support it. + """ + + +class UndefinedEnvironmentName(ValueError): + """ + A name was attempted to be used that does not exist inside of the + environment. + """ + + +class Node(object): + + def __init__(self, value): + self.value = value + + def __str__(self): + return str(self.value) + + def __repr__(self): + return "<{0}({1!r})>".format(self.__class__.__name__, str(self)) + + def serialize(self): + raise NotImplementedError + + +class Variable(Node): + + def serialize(self): + return str(self) + + +class Value(Node): + + def serialize(self): + return '"{0}"'.format(self) + + +class Op(Node): + + def serialize(self): + return str(self) + + +VARIABLE = ( + L("implementation_version") | + L("platform_python_implementation") | + L("implementation_name") | + L("python_full_version") | + L("platform_release") | + L("platform_version") | + L("platform_machine") | + L("platform_system") | + L("python_version") | + L("sys_platform") | + L("os_name") | + L("os.name") | # PEP-345 + L("sys.platform") | # PEP-345 + L("platform.version") | # PEP-345 + L("platform.machine") | # PEP-345 + L("platform.python_implementation") | # PEP-345 + L("python_implementation") | # undocumented setuptools legacy + L("extra") +) +ALIASES = { + 'os.name': 'os_name', + 'sys.platform': 'sys_platform', + 'platform.version': 'platform_version', + 'platform.machine': 'platform_machine', + 'platform.python_implementation': 'platform_python_implementation', + 'python_implementation': 'platform_python_implementation' +} +VARIABLE.setParseAction(lambda s, l, t: Variable(ALIASES.get(t[0], t[0]))) + +VERSION_CMP = ( + L("===") | + L("==") | + L(">=") | + L("<=") | + L("!=") | + L("~=") | + L(">") | + L("<") +) + +MARKER_OP = VERSION_CMP | L("not in") | L("in") +MARKER_OP.setParseAction(lambda s, l, t: Op(t[0])) + +MARKER_VALUE = QuotedString("'") | QuotedString('"') +MARKER_VALUE.setParseAction(lambda s, l, t: Value(t[0])) + +BOOLOP = L("and") | L("or") + +MARKER_VAR = VARIABLE | MARKER_VALUE + +MARKER_ITEM = Group(MARKER_VAR + MARKER_OP + MARKER_VAR) +MARKER_ITEM.setParseAction(lambda s, l, t: tuple(t[0])) + +LPAREN = L("(").suppress() +RPAREN = L(")").suppress() + +MARKER_EXPR = Forward() +MARKER_ATOM = MARKER_ITEM | Group(LPAREN + MARKER_EXPR + RPAREN) +MARKER_EXPR << MARKER_ATOM + ZeroOrMore(BOOLOP + MARKER_EXPR) + +MARKER = stringStart + MARKER_EXPR + stringEnd + + +def _coerce_parse_result(results): + if isinstance(results, ParseResults): + return [_coerce_parse_result(i) for i in results] + else: + return results + + +def _format_marker(marker, first=True): + assert isinstance(marker, (list, tuple, string_types)) + + # Sometimes we have a structure like [[...]] which is a single item list + # where the single item is itself it's own list. In that case we want skip + # the rest of this function so that we don't get extraneous () on the + # outside. + if (isinstance(marker, list) and len(marker) == 1 and + isinstance(marker[0], (list, tuple))): + return _format_marker(marker[0]) + + if isinstance(marker, list): + inner = (_format_marker(m, first=False) for m in marker) + if first: + return " ".join(inner) + else: + return "(" + " ".join(inner) + ")" + elif isinstance(marker, tuple): + return " ".join([m.serialize() for m in marker]) + else: + return marker + + +_operators = { + "in": lambda lhs, rhs: lhs in rhs, + "not in": lambda lhs, rhs: lhs not in rhs, + "<": operator.lt, + "<=": operator.le, + "==": operator.eq, + "!=": operator.ne, + ">=": operator.ge, + ">": operator.gt, +} + + +def _eval_op(lhs, op, rhs): + try: + spec = Specifier("".join([op.serialize(), rhs])) + except InvalidSpecifier: + pass + else: + return spec.contains(lhs) + + oper = _operators.get(op.serialize()) + if oper is None: + raise UndefinedComparison( + "Undefined {0!r} on {1!r} and {2!r}.".format(op, lhs, rhs) + ) + + return oper(lhs, rhs) + + +_undefined = object() + + +def _get_env(environment, name): + value = environment.get(name, _undefined) + + if value is _undefined: + raise UndefinedEnvironmentName( + "{0!r} does not exist in evaluation environment.".format(name) + ) + + return value + + +def _evaluate_markers(markers, environment): + groups = [[]] + + for marker in markers: + assert isinstance(marker, (list, tuple, string_types)) + + if isinstance(marker, list): + groups[-1].append(_evaluate_markers(marker, environment)) + elif isinstance(marker, tuple): + lhs, op, rhs = marker + + if isinstance(lhs, Variable): + lhs_value = _get_env(environment, lhs.value) + rhs_value = rhs.value + else: + lhs_value = lhs.value + rhs_value = _get_env(environment, rhs.value) + + groups[-1].append(_eval_op(lhs_value, op, rhs_value)) + else: + assert marker in ["and", "or"] + if marker == "or": + groups.append([]) + + return any(all(item) for item in groups) + + +def format_full_version(info): + version = '{0.major}.{0.minor}.{0.micro}'.format(info) + kind = info.releaselevel + if kind != 'final': + version += kind[0] + str(info.serial) + return version + + +def default_environment(): + if hasattr(sys, 'implementation'): + iver = format_full_version(sys.implementation.version) + implementation_name = sys.implementation.name + else: + iver = '0' + implementation_name = '' + + return { + "implementation_name": implementation_name, + "implementation_version": iver, + "os_name": os.name, + "platform_machine": platform.machine(), + "platform_release": platform.release(), + "platform_system": platform.system(), + "platform_version": platform.version(), + "python_full_version": platform.python_version(), + "platform_python_implementation": platform.python_implementation(), + "python_version": platform.python_version()[:3], + "sys_platform": sys.platform, + } + + +class Marker(object): + + def __init__(self, marker): + try: + self._markers = _coerce_parse_result(MARKER.parseString(marker)) + except ParseException as e: + err_str = "Invalid marker: {0!r}, parse error at {1!r}".format( + marker, marker[e.loc:e.loc + 8]) + raise InvalidMarker(err_str) + + def __str__(self): + return _format_marker(self._markers) + + def __repr__(self): + return "<Marker({0!r})>".format(str(self)) + + def evaluate(self, environment=None): + """Evaluate a marker. + + Return the boolean from evaluating the given marker against the + environment. environment is an optional argument to override all or + part of the determined environment. + + The environment is determined from the current Python process. + """ + current_environment = default_environment() + if environment is not None: + current_environment.update(environment) + + return _evaluate_markers(self._markers, current_environment) diff --git a/week-0/day-3/my_todo_app/venvironment/lib/python3.6/site-packages/setuptools/_vendor/packaging/requirements.py b/week-0/day-3/my_todo_app/venvironment/lib/python3.6/site-packages/setuptools/_vendor/packaging/requirements.py new file mode 100644 index 00000000..5b493416 --- /dev/null +++ b/week-0/day-3/my_todo_app/venvironment/lib/python3.6/site-packages/setuptools/_vendor/packaging/requirements.py @@ -0,0 +1,127 @@ +# This file is dual licensed under the terms of the Apache License, Version +# 2.0, and the BSD License. See the LICENSE file in the root of this repository +# for complete details. +from __future__ import absolute_import, division, print_function + +import string +import re + +from setuptools.extern.pyparsing import stringStart, stringEnd, originalTextFor, ParseException +from setuptools.extern.pyparsing import ZeroOrMore, Word, Optional, Regex, Combine +from setuptools.extern.pyparsing import Literal as L # noqa +from setuptools.extern.six.moves.urllib import parse as urlparse + +from .markers import MARKER_EXPR, Marker +from .specifiers import LegacySpecifier, Specifier, SpecifierSet + + +class InvalidRequirement(ValueError): + """ + An invalid requirement was found, users should refer to PEP 508. + """ + + +ALPHANUM = Word(string.ascii_letters + string.digits) + +LBRACKET = L("[").suppress() +RBRACKET = L("]").suppress() +LPAREN = L("(").suppress() +RPAREN = L(")").suppress() +COMMA = L(",").suppress() +SEMICOLON = L(";").suppress() +AT = L("@").suppress() + +PUNCTUATION = Word("-_.") +IDENTIFIER_END = ALPHANUM | (ZeroOrMore(PUNCTUATION) + ALPHANUM) +IDENTIFIER = Combine(ALPHANUM + ZeroOrMore(IDENTIFIER_END)) + +NAME = IDENTIFIER("name") +EXTRA = IDENTIFIER + +URI = Regex(r'[^ ]+')("url") +URL = (AT + URI) + +EXTRAS_LIST = EXTRA + ZeroOrMore(COMMA + EXTRA) +EXTRAS = (LBRACKET + Optional(EXTRAS_LIST) + RBRACKET)("extras") + +VERSION_PEP440 = Regex(Specifier._regex_str, re.VERBOSE | re.IGNORECASE) +VERSION_LEGACY = Regex(LegacySpecifier._regex_str, re.VERBOSE | re.IGNORECASE) + +VERSION_ONE = VERSION_PEP440 ^ VERSION_LEGACY +VERSION_MANY = Combine(VERSION_ONE + ZeroOrMore(COMMA + VERSION_ONE), + joinString=",", adjacent=False)("_raw_spec") +_VERSION_SPEC = Optional(((LPAREN + VERSION_MANY + RPAREN) | VERSION_MANY)) +_VERSION_SPEC.setParseAction(lambda s, l, t: t._raw_spec or '') + +VERSION_SPEC = originalTextFor(_VERSION_SPEC)("specifier") +VERSION_SPEC.setParseAction(lambda s, l, t: t[1]) + +MARKER_EXPR = originalTextFor(MARKER_EXPR())("marker") +MARKER_EXPR.setParseAction( + lambda s, l, t: Marker(s[t._original_start:t._original_end]) +) +MARKER_SEPERATOR = SEMICOLON +MARKER = MARKER_SEPERATOR + MARKER_EXPR + +VERSION_AND_MARKER = VERSION_SPEC + Optional(MARKER) +URL_AND_MARKER = URL + Optional(MARKER) + +NAMED_REQUIREMENT = \ + NAME + Optional(EXTRAS) + (URL_AND_MARKER | VERSION_AND_MARKER) + +REQUIREMENT = stringStart + NAMED_REQUIREMENT + stringEnd + + +class Requirement(object): + """Parse a requirement. + + Parse a given requirement string into its parts, such as name, specifier, + URL, and extras. Raises InvalidRequirement on a badly-formed requirement + string. + """ + + # TODO: Can we test whether something is contained within a requirement? + # If so how do we do that? Do we need to test against the _name_ of + # the thing as well as the version? What about the markers? + # TODO: Can we normalize the name and extra name? + + def __init__(self, requirement_string): + try: + req = REQUIREMENT.parseString(requirement_string) + except ParseException as e: + raise InvalidRequirement( + "Invalid requirement, parse error at \"{0!r}\"".format( + requirement_string[e.loc:e.loc + 8])) + + self.name = req.name + if req.url: + parsed_url = urlparse.urlparse(req.url) + if not (parsed_url.scheme and parsed_url.netloc) or ( + not parsed_url.scheme and not parsed_url.netloc): + raise InvalidRequirement("Invalid URL given") + self.url = req.url + else: + self.url = None + self.extras = set(req.extras.asList() if req.extras else []) + self.specifier = SpecifierSet(req.specifier) + self.marker = req.marker if req.marker else None + + def __str__(self): + parts = [self.name] + + if self.extras: + parts.append("[{0}]".format(",".join(sorted(self.extras)))) + + if self.specifier: + parts.append(str(self.specifier)) + + if self.url: + parts.append("@ {0}".format(self.url)) + + if self.marker: + parts.append("; {0}".format(self.marker)) + + return "".join(parts) + + def __repr__(self): + return "<Requirement({0!r})>".format(str(self)) diff --git a/week-0/day-3/my_todo_app/venvironment/lib/python3.6/site-packages/setuptools/_vendor/packaging/specifiers.py b/week-0/day-3/my_todo_app/venvironment/lib/python3.6/site-packages/setuptools/_vendor/packaging/specifiers.py new file mode 100644 index 00000000..7f5a76cf --- /dev/null +++ b/week-0/day-3/my_todo_app/venvironment/lib/python3.6/site-packages/setuptools/_vendor/packaging/specifiers.py @@ -0,0 +1,774 @@ +# This file is dual licensed under the terms of the Apache License, Version +# 2.0, and the BSD License. See the LICENSE file in the root of this repository +# for complete details. +from __future__ import absolute_import, division, print_function + +import abc +import functools +import itertools +import re + +from ._compat import string_types, with_metaclass +from .version import Version, LegacyVersion, parse + + +class InvalidSpecifier(ValueError): + """ + An invalid specifier was found, users should refer to PEP 440. + """ + + +class BaseSpecifier(with_metaclass(abc.ABCMeta, object)): + + @abc.abstractmethod + def __str__(self): + """ + Returns the str representation of this Specifier like object. This + should be representative of the Specifier itself. + """ + + @abc.abstractmethod + def __hash__(self): + """ + Returns a hash value for this Specifier like object. + """ + + @abc.abstractmethod + def __eq__(self, other): + """ + Returns a boolean representing whether or not the two Specifier like + objects are equal. + """ + + @abc.abstractmethod + def __ne__(self, other): + """ + Returns a boolean representing whether or not the two Specifier like + objects are not equal. + """ + + @abc.abstractproperty + def prereleases(self): + """ + Returns whether or not pre-releases as a whole are allowed by this + specifier. + """ + + @prereleases.setter + def prereleases(self, value): + """ + Sets whether or not pre-releases as a whole are allowed by this + specifier. + """ + + @abc.abstractmethod + def contains(self, item, prereleases=None): + """ + Determines if the given item is contained within this specifier. + """ + + @abc.abstractmethod + def filter(self, iterable, prereleases=None): + """ + Takes an iterable of items and filters them so that only items which + are contained within this specifier are allowed in it. + """ + + +class _IndividualSpecifier(BaseSpecifier): + + _operators = {} + + def __init__(self, spec="", prereleases=None): + match = self._regex.search(spec) + if not match: + raise InvalidSpecifier("Invalid specifier: '{0}'".format(spec)) + + self._spec = ( + match.group("operator").strip(), + match.group("version").strip(), + ) + + # Store whether or not this Specifier should accept prereleases + self._prereleases = prereleases + + def __repr__(self): + pre = ( + ", prereleases={0!r}".format(self.prereleases) + if self._prereleases is not None + else "" + ) + + return "<{0}({1!r}{2})>".format( + self.__class__.__name__, + str(self), + pre, + ) + + def __str__(self): + return "{0}{1}".format(*self._spec) + + def __hash__(self): + return hash(self._spec) + + def __eq__(self, other): + if isinstance(other, string_types): + try: + other = self.__class__(other) + except InvalidSpecifier: + return NotImplemented + elif not isinstance(other, self.__class__): + return NotImplemented + + return self._spec == other._spec + + def __ne__(self, other): + if isinstance(other, string_types): + try: + other = self.__class__(other) + except InvalidSpecifier: + return NotImplemented + elif not isinstance(other, self.__class__): + return NotImplemented + + return self._spec != other._spec + + def _get_operator(self, op): + return getattr(self, "_compare_{0}".format(self._operators[op])) + + def _coerce_version(self, version): + if not isinstance(version, (LegacyVersion, Version)): + version = parse(version) + return version + + @property + def operator(self): + return self._spec[0] + + @property + def version(self): + return self._spec[1] + + @property + def prereleases(self): + return self._prereleases + + @prereleases.setter + def prereleases(self, value): + self._prereleases = value + + def __contains__(self, item): + return self.contains(item) + + def contains(self, item, prereleases=None): + # Determine if prereleases are to be allowed or not. + if prereleases is None: + prereleases = self.prereleases + + # Normalize item to a Version or LegacyVersion, this allows us to have + # a shortcut for ``"2.0" in Specifier(">=2") + item = self._coerce_version(item) + + # Determine if we should be supporting prereleases in this specifier + # or not, if we do not support prereleases than we can short circuit + # logic if this version is a prereleases. + if item.is_prerelease and not prereleases: + return False + + # Actually do the comparison to determine if this item is contained + # within this Specifier or not. + return self._get_operator(self.operator)(item, self.version) + + def filter(self, iterable, prereleases=None): + yielded = False + found_prereleases = [] + + kw = {"prereleases": prereleases if prereleases is not None else True} + + # Attempt to iterate over all the values in the iterable and if any of + # them match, yield them. + for version in iterable: + parsed_version = self._coerce_version(version) + + if self.contains(parsed_version, **kw): + # If our version is a prerelease, and we were not set to allow + # prereleases, then we'll store it for later incase nothing + # else matches this specifier. + if (parsed_version.is_prerelease and not + (prereleases or self.prereleases)): + found_prereleases.append(version) + # Either this is not a prerelease, or we should have been + # accepting prereleases from the begining. + else: + yielded = True + yield version + + # Now that we've iterated over everything, determine if we've yielded + # any values, and if we have not and we have any prereleases stored up + # then we will go ahead and yield the prereleases. + if not yielded and found_prereleases: + for version in found_prereleases: + yield version + + +class LegacySpecifier(_IndividualSpecifier): + + _regex_str = ( + r""" + (?P<operator>(==|!=|<=|>=|<|>)) + \s* + (?P<version> + [^,;\s)]* # Since this is a "legacy" specifier, and the version + # string can be just about anything, we match everything + # except for whitespace, a semi-colon for marker support, + # a closing paren since versions can be enclosed in + # them, and a comma since it's a version separator. + ) + """ + ) + + _regex = re.compile( + r"^\s*" + _regex_str + r"\s*$", re.VERBOSE | re.IGNORECASE) + + _operators = { + "==": "equal", + "!=": "not_equal", + "<=": "less_than_equal", + ">=": "greater_than_equal", + "<": "less_than", + ">": "greater_than", + } + + def _coerce_version(self, version): + if not isinstance(version, LegacyVersion): + version = LegacyVersion(str(version)) + return version + + def _compare_equal(self, prospective, spec): + return prospective == self._coerce_version(spec) + + def _compare_not_equal(self, prospective, spec): + return prospective != self._coerce_version(spec) + + def _compare_less_than_equal(self, prospective, spec): + return prospective <= self._coerce_version(spec) + + def _compare_greater_than_equal(self, prospective, spec): + return prospective >= self._coerce_version(spec) + + def _compare_less_than(self, prospective, spec): + return prospective < self._coerce_version(spec) + + def _compare_greater_than(self, prospective, spec): + return prospective > self._coerce_version(spec) + + +def _require_version_compare(fn): + @functools.wraps(fn) + def wrapped(self, prospective, spec): + if not isinstance(prospective, Version): + return False + return fn(self, prospective, spec) + return wrapped + + +class Specifier(_IndividualSpecifier): + + _regex_str = ( + r""" + (?P<operator>(~=|==|!=|<=|>=|<|>|===)) + (?P<version> + (?: + # The identity operators allow for an escape hatch that will + # do an exact string match of the version you wish to install. + # This will not be parsed by PEP 440 and we cannot determine + # any semantic meaning from it. This operator is discouraged + # but included entirely as an escape hatch. + (?<====) # Only match for the identity operator + \s* + [^\s]* # We just match everything, except for whitespace + # since we are only testing for strict identity. + ) + | + (?: + # The (non)equality operators allow for wild card and local + # versions to be specified so we have to define these two + # operators separately to enable that. + (?<===|!=) # Only match for equals and not equals + + \s* + v? + (?:[0-9]+!)? # epoch + [0-9]+(?:\.[0-9]+)* # release + (?: # pre release + [-_\.]? + (a|b|c|rc|alpha|beta|pre|preview) + [-_\.]? + [0-9]* + )? + (?: # post release + (?:-[0-9]+)|(?:[-_\.]?(post|rev|r)[-_\.]?[0-9]*) + )? + + # You cannot use a wild card and a dev or local version + # together so group them with a | and make them optional. + (?: + (?:[-_\.]?dev[-_\.]?[0-9]*)? # dev release + (?:\+[a-z0-9]+(?:[-_\.][a-z0-9]+)*)? # local + | + \.\* # Wild card syntax of .* + )? + ) + | + (?: + # The compatible operator requires at least two digits in the + # release segment. + (?<=~=) # Only match for the compatible operator + + \s* + v? + (?:[0-9]+!)? # epoch + [0-9]+(?:\.[0-9]+)+ # release (We have a + instead of a *) + (?: # pre release + [-_\.]? + (a|b|c|rc|alpha|beta|pre|preview) + [-_\.]? + [0-9]* + )? + (?: # post release + (?:-[0-9]+)|(?:[-_\.]?(post|rev|r)[-_\.]?[0-9]*) + )? + (?:[-_\.]?dev[-_\.]?[0-9]*)? # dev release + ) + | + (?: + # All other operators only allow a sub set of what the + # (non)equality operators do. Specifically they do not allow + # local versions to be specified nor do they allow the prefix + # matching wild cards. + (?<!==|!=|~=) # We have special cases for these + # operators so we want to make sure they + # don't match here. + + \s* + v? + (?:[0-9]+!)? # epoch + [0-9]+(?:\.[0-9]+)* # release + (?: # pre release + [-_\.]? + (a|b|c|rc|alpha|beta|pre|preview) + [-_\.]? + [0-9]* + )? + (?: # post release + (?:-[0-9]+)|(?:[-_\.]?(post|rev|r)[-_\.]?[0-9]*) + )? + (?:[-_\.]?dev[-_\.]?[0-9]*)? # dev release + ) + ) + """ + ) + + _regex = re.compile( + r"^\s*" + _regex_str + r"\s*$", re.VERBOSE | re.IGNORECASE) + + _operators = { + "~=": "compatible", + "==": "equal", + "!=": "not_equal", + "<=": "less_than_equal", + ">=": "greater_than_equal", + "<": "less_than", + ">": "greater_than", + "===": "arbitrary", + } + + @_require_version_compare + def _compare_compatible(self, prospective, spec): + # Compatible releases have an equivalent combination of >= and ==. That + # is that ~=2.2 is equivalent to >=2.2,==2.*. This allows us to + # implement this in terms of the other specifiers instead of + # implementing it ourselves. The only thing we need to do is construct + # the other specifiers. + + # We want everything but the last item in the version, but we want to + # ignore post and dev releases and we want to treat the pre-release as + # it's own separate segment. + prefix = ".".join( + list( + itertools.takewhile( + lambda x: (not x.startswith("post") and not + x.startswith("dev")), + _version_split(spec), + ) + )[:-1] + ) + + # Add the prefix notation to the end of our string + prefix += ".*" + + return (self._get_operator(">=")(prospective, spec) and + self._get_operator("==")(prospective, prefix)) + + @_require_version_compare + def _compare_equal(self, prospective, spec): + # We need special logic to handle prefix matching + if spec.endswith(".*"): + # In the case of prefix matching we want to ignore local segment. + prospective = Version(prospective.public) + # Split the spec out by dots, and pretend that there is an implicit + # dot in between a release segment and a pre-release segment. + spec = _version_split(spec[:-2]) # Remove the trailing .* + + # Split the prospective version out by dots, and pretend that there + # is an implicit dot in between a release segment and a pre-release + # segment. + prospective = _version_split(str(prospective)) + + # Shorten the prospective version to be the same length as the spec + # so that we can determine if the specifier is a prefix of the + # prospective version or not. + prospective = prospective[:len(spec)] + + # Pad out our two sides with zeros so that they both equal the same + # length. + spec, prospective = _pad_version(spec, prospective) + else: + # Convert our spec string into a Version + spec = Version(spec) + + # If the specifier does not have a local segment, then we want to + # act as if the prospective version also does not have a local + # segment. + if not spec.local: + prospective = Version(prospective.public) + + return prospective == spec + + @_require_version_compare + def _compare_not_equal(self, prospective, spec): + return not self._compare_equal(prospective, spec) + + @_require_version_compare + def _compare_less_than_equal(self, prospective, spec): + return prospective <= Version(spec) + + @_require_version_compare + def _compare_greater_than_equal(self, prospective, spec): + return prospective >= Version(spec) + + @_require_version_compare + def _compare_less_than(self, prospective, spec): + # Convert our spec to a Version instance, since we'll want to work with + # it as a version. + spec = Version(spec) + + # Check to see if the prospective version is less than the spec + # version. If it's not we can short circuit and just return False now + # instead of doing extra unneeded work. + if not prospective < spec: + return False + + # This special case is here so that, unless the specifier itself + # includes is a pre-release version, that we do not accept pre-release + # versions for the version mentioned in the specifier (e.g. <3.1 should + # not match 3.1.dev0, but should match 3.0.dev0). + if not spec.is_prerelease and prospective.is_prerelease: + if Version(prospective.base_version) == Version(spec.base_version): + return False + + # If we've gotten to here, it means that prospective version is both + # less than the spec version *and* it's not a pre-release of the same + # version in the spec. + return True + + @_require_version_compare + def _compare_greater_than(self, prospective, spec): + # Convert our spec to a Version instance, since we'll want to work with + # it as a version. + spec = Version(spec) + + # Check to see if the prospective version is greater than the spec + # version. If it's not we can short circuit and just return False now + # instead of doing extra unneeded work. + if not prospective > spec: + return False + + # This special case is here so that, unless the specifier itself + # includes is a post-release version, that we do not accept + # post-release versions for the version mentioned in the specifier + # (e.g. >3.1 should not match 3.0.post0, but should match 3.2.post0). + if not spec.is_postrelease and prospective.is_postrelease: + if Version(prospective.base_version) == Version(spec.base_version): + return False + + # Ensure that we do not allow a local version of the version mentioned + # in the specifier, which is techincally greater than, to match. + if prospective.local is not None: + if Version(prospective.base_version) == Version(spec.base_version): + return False + + # If we've gotten to here, it means that prospective version is both + # greater than the spec version *and* it's not a pre-release of the + # same version in the spec. + return True + + def _compare_arbitrary(self, prospective, spec): + return str(prospective).lower() == str(spec).lower() + + @property + def prereleases(self): + # If there is an explicit prereleases set for this, then we'll just + # blindly use that. + if self._prereleases is not None: + return self._prereleases + + # Look at all of our specifiers and determine if they are inclusive + # operators, and if they are if they are including an explicit + # prerelease. + operator, version = self._spec + if operator in ["==", ">=", "<=", "~=", "==="]: + # The == specifier can include a trailing .*, if it does we + # want to remove before parsing. + if operator == "==" and version.endswith(".*"): + version = version[:-2] + + # Parse the version, and if it is a pre-release than this + # specifier allows pre-releases. + if parse(version).is_prerelease: + return True + + return False + + @prereleases.setter + def prereleases(self, value): + self._prereleases = value + + +_prefix_regex = re.compile(r"^([0-9]+)((?:a|b|c|rc)[0-9]+)$") + + +def _version_split(version): + result = [] + for item in version.split("."): + match = _prefix_regex.search(item) + if match: + result.extend(match.groups()) + else: + result.append(item) + return result + + +def _pad_version(left, right): + left_split, right_split = [], [] + + # Get the release segment of our versions + left_split.append(list(itertools.takewhile(lambda x: x.isdigit(), left))) + right_split.append(list(itertools.takewhile(lambda x: x.isdigit(), right))) + + # Get the rest of our versions + left_split.append(left[len(left_split[0]):]) + right_split.append(right[len(right_split[0]):]) + + # Insert our padding + left_split.insert( + 1, + ["0"] * max(0, len(right_split[0]) - len(left_split[0])), + ) + right_split.insert( + 1, + ["0"] * max(0, len(left_split[0]) - len(right_split[0])), + ) + + return ( + list(itertools.chain(*left_split)), + list(itertools.chain(*right_split)), + ) + + +class SpecifierSet(BaseSpecifier): + + def __init__(self, specifiers="", prereleases=None): + # Split on , to break each indidivual specifier into it's own item, and + # strip each item to remove leading/trailing whitespace. + specifiers = [s.strip() for s in specifiers.split(",") if s.strip()] + + # Parsed each individual specifier, attempting first to make it a + # Specifier and falling back to a LegacySpecifier. + parsed = set() + for specifier in specifiers: + try: + parsed.add(Specifier(specifier)) + except InvalidSpecifier: + parsed.add(LegacySpecifier(specifier)) + + # Turn our parsed specifiers into a frozen set and save them for later. + self._specs = frozenset(parsed) + + # Store our prereleases value so we can use it later to determine if + # we accept prereleases or not. + self._prereleases = prereleases + + def __repr__(self): + pre = ( + ", prereleases={0!r}".format(self.prereleases) + if self._prereleases is not None + else "" + ) + + return "<SpecifierSet({0!r}{1})>".format(str(self), pre) + + def __str__(self): + return ",".join(sorted(str(s) for s in self._specs)) + + def __hash__(self): + return hash(self._specs) + + def __and__(self, other): + if isinstance(other, string_types): + other = SpecifierSet(other) + elif not isinstance(other, SpecifierSet): + return NotImplemented + + specifier = SpecifierSet() + specifier._specs = frozenset(self._specs | other._specs) + + if self._prereleases is None and other._prereleases is not None: + specifier._prereleases = other._prereleases + elif self._prereleases is not None and other._prereleases is None: + specifier._prereleases = self._prereleases + elif self._prereleases == other._prereleases: + specifier._prereleases = self._prereleases + else: + raise ValueError( + "Cannot combine SpecifierSets with True and False prerelease " + "overrides." + ) + + return specifier + + def __eq__(self, other): + if isinstance(other, string_types): + other = SpecifierSet(other) + elif isinstance(other, _IndividualSpecifier): + other = SpecifierSet(str(other)) + elif not isinstance(other, SpecifierSet): + return NotImplemented + + return self._specs == other._specs + + def __ne__(self, other): + if isinstance(other, string_types): + other = SpecifierSet(other) + elif isinstance(other, _IndividualSpecifier): + other = SpecifierSet(str(other)) + elif not isinstance(other, SpecifierSet): + return NotImplemented + + return self._specs != other._specs + + def __len__(self): + return len(self._specs) + + def __iter__(self): + return iter(self._specs) + + @property + def prereleases(self): + # If we have been given an explicit prerelease modifier, then we'll + # pass that through here. + if self._prereleases is not None: + return self._prereleases + + # If we don't have any specifiers, and we don't have a forced value, + # then we'll just return None since we don't know if this should have + # pre-releases or not. + if not self._specs: + return None + + # Otherwise we'll see if any of the given specifiers accept + # prereleases, if any of them do we'll return True, otherwise False. + return any(s.prereleases for s in self._specs) + + @prereleases.setter + def prereleases(self, value): + self._prereleases = value + + def __contains__(self, item): + return self.contains(item) + + def contains(self, item, prereleases=None): + # Ensure that our item is a Version or LegacyVersion instance. + if not isinstance(item, (LegacyVersion, Version)): + item = parse(item) + + # Determine if we're forcing a prerelease or not, if we're not forcing + # one for this particular filter call, then we'll use whatever the + # SpecifierSet thinks for whether or not we should support prereleases. + if prereleases is None: + prereleases = self.prereleases + + # We can determine if we're going to allow pre-releases by looking to + # see if any of the underlying items supports them. If none of them do + # and this item is a pre-release then we do not allow it and we can + # short circuit that here. + # Note: This means that 1.0.dev1 would not be contained in something + # like >=1.0.devabc however it would be in >=1.0.debabc,>0.0.dev0 + if not prereleases and item.is_prerelease: + return False + + # We simply dispatch to the underlying specs here to make sure that the + # given version is contained within all of them. + # Note: This use of all() here means that an empty set of specifiers + # will always return True, this is an explicit design decision. + return all( + s.contains(item, prereleases=prereleases) + for s in self._specs + ) + + def filter(self, iterable, prereleases=None): + # Determine if we're forcing a prerelease or not, if we're not forcing + # one for this particular filter call, then we'll use whatever the + # SpecifierSet thinks for whether or not we should support prereleases. + if prereleases is None: + prereleases = self.prereleases + + # If we have any specifiers, then we want to wrap our iterable in the + # filter method for each one, this will act as a logical AND amongst + # each specifier. + if self._specs: + for spec in self._specs: + iterable = spec.filter(iterable, prereleases=bool(prereleases)) + return iterable + # If we do not have any specifiers, then we need to have a rough filter + # which will filter out any pre-releases, unless there are no final + # releases, and which will filter out LegacyVersion in general. + else: + filtered = [] + found_prereleases = [] + + for item in iterable: + # Ensure that we some kind of Version class for this item. + if not isinstance(item, (LegacyVersion, Version)): + parsed_version = parse(item) + else: + parsed_version = item + + # Filter out any item which is parsed as a LegacyVersion + if isinstance(parsed_version, LegacyVersion): + continue + + # Store any item which is a pre-release for later unless we've + # already found a final version or we are accepting prereleases + if parsed_version.is_prerelease and not prereleases: + if not filtered: + found_prereleases.append(item) + else: + filtered.append(item) + + # If we've found no items except for pre-releases, then we'll go + # ahead and use the pre-releases + if not filtered and found_prereleases and prereleases is None: + return found_prereleases + + return filtered diff --git a/week-0/day-3/my_todo_app/venvironment/lib/python3.6/site-packages/setuptools/_vendor/packaging/utils.py b/week-0/day-3/my_todo_app/venvironment/lib/python3.6/site-packages/setuptools/_vendor/packaging/utils.py new file mode 100644 index 00000000..942387ce --- /dev/null +++ b/week-0/day-3/my_todo_app/venvironment/lib/python3.6/site-packages/setuptools/_vendor/packaging/utils.py @@ -0,0 +1,14 @@ +# This file is dual licensed under the terms of the Apache License, Version +# 2.0, and the BSD License. See the LICENSE file in the root of this repository +# for complete details. +from __future__ import absolute_import, division, print_function + +import re + + +_canonicalize_regex = re.compile(r"[-_.]+") + + +def canonicalize_name(name): + # This is taken from PEP 503. + return _canonicalize_regex.sub("-", name).lower() diff --git a/week-0/day-3/my_todo_app/venvironment/lib/python3.6/site-packages/setuptools/_vendor/packaging/version.py b/week-0/day-3/my_todo_app/venvironment/lib/python3.6/site-packages/setuptools/_vendor/packaging/version.py new file mode 100644 index 00000000..83b5ee8c --- /dev/null +++ b/week-0/day-3/my_todo_app/venvironment/lib/python3.6/site-packages/setuptools/_vendor/packaging/version.py @@ -0,0 +1,393 @@ +# This file is dual licensed under the terms of the Apache License, Version +# 2.0, and the BSD License. See the LICENSE file in the root of this repository +# for complete details. +from __future__ import absolute_import, division, print_function + +import collections +import itertools +import re + +from ._structures import Infinity + + +__all__ = [ + "parse", "Version", "LegacyVersion", "InvalidVersion", "VERSION_PATTERN" +] + + +_Version = collections.namedtuple( + "_Version", + ["epoch", "release", "dev", "pre", "post", "local"], +) + + +def parse(version): + """ + Parse the given version string and return either a :class:`Version` object + or a :class:`LegacyVersion` object depending on if the given version is + a valid PEP 440 version or a legacy version. + """ + try: + return Version(version) + except InvalidVersion: + return LegacyVersion(version) + + +class InvalidVersion(ValueError): + """ + An invalid version was found, users should refer to PEP 440. + """ + + +class _BaseVersion(object): + + def __hash__(self): + return hash(self._key) + + def __lt__(self, other): + return self._compare(other, lambda s, o: s < o) + + def __le__(self, other): + return self._compare(other, lambda s, o: s <= o) + + def __eq__(self, other): + return self._compare(other, lambda s, o: s == o) + + def __ge__(self, other): + return self._compare(other, lambda s, o: s >= o) + + def __gt__(self, other): + return self._compare(other, lambda s, o: s > o) + + def __ne__(self, other): + return self._compare(other, lambda s, o: s != o) + + def _compare(self, other, method): + if not isinstance(other, _BaseVersion): + return NotImplemented + + return method(self._key, other._key) + + +class LegacyVersion(_BaseVersion): + + def __init__(self, version): + self._version = str(version) + self._key = _legacy_cmpkey(self._version) + + def __str__(self): + return self._version + + def __repr__(self): + return "<LegacyVersion({0})>".format(repr(str(self))) + + @property + def public(self): + return self._version + + @property + def base_version(self): + return self._version + + @property + def local(self): + return None + + @property + def is_prerelease(self): + return False + + @property + def is_postrelease(self): + return False + + +_legacy_version_component_re = re.compile( + r"(\d+ | [a-z]+ | \.| -)", re.VERBOSE, +) + +_legacy_version_replacement_map = { + "pre": "c", "preview": "c", "-": "final-", "rc": "c", "dev": "@", +} + + +def _parse_version_parts(s): + for part in _legacy_version_component_re.split(s): + part = _legacy_version_replacement_map.get(part, part) + + if not part or part == ".": + continue + + if part[:1] in "0123456789": + # pad for numeric comparison + yield part.zfill(8) + else: + yield "*" + part + + # ensure that alpha/beta/candidate are before final + yield "*final" + + +def _legacy_cmpkey(version): + # We hardcode an epoch of -1 here. A PEP 440 version can only have a epoch + # greater than or equal to 0. This will effectively put the LegacyVersion, + # which uses the defacto standard originally implemented by setuptools, + # as before all PEP 440 versions. + epoch = -1 + + # This scheme is taken from pkg_resources.parse_version setuptools prior to + # it's adoption of the packaging library. + parts = [] + for part in _parse_version_parts(version.lower()): + if part.startswith("*"): + # remove "-" before a prerelease tag + if part < "*final": + while parts and parts[-1] == "*final-": + parts.pop() + + # remove trailing zeros from each series of numeric parts + while parts and parts[-1] == "00000000": + parts.pop() + + parts.append(part) + parts = tuple(parts) + + return epoch, parts + +# Deliberately not anchored to the start and end of the string, to make it +# easier for 3rd party code to reuse +VERSION_PATTERN = r""" + v? + (?: + (?:(?P<epoch>[0-9]+)!)? # epoch + (?P<release>[0-9]+(?:\.[0-9]+)*) # release segment + (?P<pre> # pre-release + [-_\.]? + (?P<pre_l>(a|b|c|rc|alpha|beta|pre|preview)) + [-_\.]? + (?P<pre_n>[0-9]+)? + )? + (?P<post> # post release + (?:-(?P<post_n1>[0-9]+)) + | + (?: + [-_\.]? + (?P<post_l>post|rev|r) + [-_\.]? + (?P<post_n2>[0-9]+)? + ) + )? + (?P<dev> # dev release + [-_\.]? + (?P<dev_l>dev) + [-_\.]? + (?P<dev_n>[0-9]+)? + )? + ) + (?:\+(?P<local>[a-z0-9]+(?:[-_\.][a-z0-9]+)*))? # local version +""" + + +class Version(_BaseVersion): + + _regex = re.compile( + r"^\s*" + VERSION_PATTERN + r"\s*$", + re.VERBOSE | re.IGNORECASE, + ) + + def __init__(self, version): + # Validate the version and parse it into pieces + match = self._regex.search(version) + if not match: + raise InvalidVersion("Invalid version: '{0}'".format(version)) + + # Store the parsed out pieces of the version + self._version = _Version( + epoch=int(match.group("epoch")) if match.group("epoch") else 0, + release=tuple(int(i) for i in match.group("release").split(".")), + pre=_parse_letter_version( + match.group("pre_l"), + match.group("pre_n"), + ), + post=_parse_letter_version( + match.group("post_l"), + match.group("post_n1") or match.group("post_n2"), + ), + dev=_parse_letter_version( + match.group("dev_l"), + match.group("dev_n"), + ), + local=_parse_local_version(match.group("local")), + ) + + # Generate a key which will be used for sorting + self._key = _cmpkey( + self._version.epoch, + self._version.release, + self._version.pre, + self._version.post, + self._version.dev, + self._version.local, + ) + + def __repr__(self): + return "<Version({0})>".format(repr(str(self))) + + def __str__(self): + parts = [] + + # Epoch + if self._version.epoch != 0: + parts.append("{0}!".format(self._version.epoch)) + + # Release segment + parts.append(".".join(str(x) for x in self._version.release)) + + # Pre-release + if self._version.pre is not None: + parts.append("".join(str(x) for x in self._version.pre)) + + # Post-release + if self._version.post is not None: + parts.append(".post{0}".format(self._version.post[1])) + + # Development release + if self._version.dev is not None: + parts.append(".dev{0}".format(self._version.dev[1])) + + # Local version segment + if self._version.local is not None: + parts.append( + "+{0}".format(".".join(str(x) for x in self._version.local)) + ) + + return "".join(parts) + + @property + def public(self): + return str(self).split("+", 1)[0] + + @property + def base_version(self): + parts = [] + + # Epoch + if self._version.epoch != 0: + parts.append("{0}!".format(self._version.epoch)) + + # Release segment + parts.append(".".join(str(x) for x in self._version.release)) + + return "".join(parts) + + @property + def local(self): + version_string = str(self) + if "+" in version_string: + return version_string.split("+", 1)[1] + + @property + def is_prerelease(self): + return bool(self._version.dev or self._version.pre) + + @property + def is_postrelease(self): + return bool(self._version.post) + + +def _parse_letter_version(letter, number): + if letter: + # We consider there to be an implicit 0 in a pre-release if there is + # not a numeral associated with it. + if number is None: + number = 0 + + # We normalize any letters to their lower case form + letter = letter.lower() + + # We consider some words to be alternate spellings of other words and + # in those cases we want to normalize the spellings to our preferred + # spelling. + if letter == "alpha": + letter = "a" + elif letter == "beta": + letter = "b" + elif letter in ["c", "pre", "preview"]: + letter = "rc" + elif letter in ["rev", "r"]: + letter = "post" + + return letter, int(number) + if not letter and number: + # We assume if we are given a number, but we are not given a letter + # then this is using the implicit post release syntax (e.g. 1.0-1) + letter = "post" + + return letter, int(number) + + +_local_version_seperators = re.compile(r"[\._-]") + + +def _parse_local_version(local): + """ + Takes a string like abc.1.twelve and turns it into ("abc", 1, "twelve"). + """ + if local is not None: + return tuple( + part.lower() if not part.isdigit() else int(part) + for part in _local_version_seperators.split(local) + ) + + +def _cmpkey(epoch, release, pre, post, dev, local): + # When we compare a release version, we want to compare it with all of the + # trailing zeros removed. So we'll use a reverse the list, drop all the now + # leading zeros until we come to something non zero, then take the rest + # re-reverse it back into the correct order and make it a tuple and use + # that for our sorting key. + release = tuple( + reversed(list( + itertools.dropwhile( + lambda x: x == 0, + reversed(release), + ) + )) + ) + + # We need to "trick" the sorting algorithm to put 1.0.dev0 before 1.0a0. + # We'll do this by abusing the pre segment, but we _only_ want to do this + # if there is not a pre or a post segment. If we have one of those then + # the normal sorting rules will handle this case correctly. + if pre is None and post is None and dev is not None: + pre = -Infinity + # Versions without a pre-release (except as noted above) should sort after + # those with one. + elif pre is None: + pre = Infinity + + # Versions without a post segment should sort before those with one. + if post is None: + post = -Infinity + + # Versions without a development segment should sort after those with one. + if dev is None: + dev = Infinity + + if local is None: + # Versions without a local segment should sort before those with one. + local = -Infinity + else: + # Versions with a local segment need that segment parsed to implement + # the sorting rules in PEP440. + # - Alpha numeric segments sort before numeric segments + # - Alpha numeric segments sort lexicographically + # - Numeric segments sort numerically + # - Shorter versions sort before longer versions when the prefixes + # match exactly + local = tuple( + (i, "") if isinstance(i, int) else (-Infinity, i) + for i in local + ) + + return epoch, release, pre, post, dev, local diff --git a/week-0/day-3/my_todo_app/venvironment/lib/python3.6/site-packages/setuptools/_vendor/pyparsing.py b/week-0/day-3/my_todo_app/venvironment/lib/python3.6/site-packages/setuptools/_vendor/pyparsing.py new file mode 100644 index 00000000..a2122435 --- /dev/null +++ b/week-0/day-3/my_todo_app/venvironment/lib/python3.6/site-packages/setuptools/_vendor/pyparsing.py @@ -0,0 +1,5696 @@ +# module pyparsing.py +# +# Copyright (c) 2003-2016 Paul T. McGuire +# +# Permission is hereby granted, free of charge, to any person obtaining +# a copy of this software and associated documentation files (the +# "Software"), to deal in the Software without restriction, including +# without limitation the rights to use, copy, modify, merge, publish, +# distribute, sublicense, and/or sell copies of the Software, and to +# permit persons to whom the Software is furnished to do so, subject to +# the following conditions: +# +# The above copyright notice and this permission notice shall be +# included in all copies or substantial portions of the Software. +# +# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, +# EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF +# MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. +# IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY +# CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, +# TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE +# SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. +# + +__doc__ = \ +""" +pyparsing module - Classes and methods to define and execute parsing grammars + +The pyparsing module is an alternative approach to creating and executing simple grammars, +vs. the traditional lex/yacc approach, or the use of regular expressions. With pyparsing, you +don't need to learn a new syntax for defining grammars or matching expressions - the parsing module +provides a library of classes that you use to construct the grammar directly in Python. + +Here is a program to parse "Hello, World!" (or any greeting of the form +C{"<salutation>, <addressee>!"}), built up using L{Word}, L{Literal}, and L{And} elements +(L{'+'<ParserElement.__add__>} operator gives L{And} expressions, strings are auto-converted to +L{Literal} expressions):: + + from pyparsing import Word, alphas + + # define grammar of a greeting + greet = Word(alphas) + "," + Word(alphas) + "!" + + hello = "Hello, World!" + print (hello, "->", greet.parseString(hello)) + +The program outputs the following:: + + Hello, World! -> ['Hello', ',', 'World', '!'] + +The Python representation of the grammar is quite readable, owing to the self-explanatory +class names, and the use of '+', '|' and '^' operators. + +The L{ParseResults} object returned from L{ParserElement.parseString<ParserElement.parseString>} can be accessed as a nested list, a dictionary, or an +object with named attributes. + +The pyparsing module handles some of the problems that are typically vexing when writing text parsers: + - extra or missing whitespace (the above program will also handle "Hello,World!", "Hello , World !", etc.) + - quoted strings + - embedded comments +""" + +__version__ = "2.1.10" +__versionTime__ = "07 Oct 2016 01:31 UTC" +__author__ = "Paul McGuire <ptmcg@users.sourceforge.net>" + +import string +from weakref import ref as wkref +import copy +import sys +import warnings +import re +import sre_constants +import collections +import pprint +import traceback +import types +from datetime import datetime + +try: + from _thread import RLock +except ImportError: + from threading import RLock + +try: + from collections import OrderedDict as _OrderedDict +except ImportError: + try: + from ordereddict import OrderedDict as _OrderedDict + except ImportError: + _OrderedDict = None + +#~ sys.stderr.write( "testing pyparsing module, version %s, %s\n" % (__version__,__versionTime__ ) ) + +__all__ = [ +'And', 'CaselessKeyword', 'CaselessLiteral', 'CharsNotIn', 'Combine', 'Dict', 'Each', 'Empty', +'FollowedBy', 'Forward', 'GoToColumn', 'Group', 'Keyword', 'LineEnd', 'LineStart', 'Literal', +'MatchFirst', 'NoMatch', 'NotAny', 'OneOrMore', 'OnlyOnce', 'Optional', 'Or', +'ParseBaseException', 'ParseElementEnhance', 'ParseException', 'ParseExpression', 'ParseFatalException', +'ParseResults', 'ParseSyntaxException', 'ParserElement', 'QuotedString', 'RecursiveGrammarException', +'Regex', 'SkipTo', 'StringEnd', 'StringStart', 'Suppress', 'Token', 'TokenConverter', +'White', 'Word', 'WordEnd', 'WordStart', 'ZeroOrMore', +'alphanums', 'alphas', 'alphas8bit', 'anyCloseTag', 'anyOpenTag', 'cStyleComment', 'col', +'commaSeparatedList', 'commonHTMLEntity', 'countedArray', 'cppStyleComment', 'dblQuotedString', +'dblSlashComment', 'delimitedList', 'dictOf', 'downcaseTokens', 'empty', 'hexnums', +'htmlComment', 'javaStyleComment', 'line', 'lineEnd', 'lineStart', 'lineno', +'makeHTMLTags', 'makeXMLTags', 'matchOnlyAtCol', 'matchPreviousExpr', 'matchPreviousLiteral', +'nestedExpr', 'nullDebugAction', 'nums', 'oneOf', 'opAssoc', 'operatorPrecedence', 'printables', +'punc8bit', 'pythonStyleComment', 'quotedString', 'removeQuotes', 'replaceHTMLEntity', +'replaceWith', 'restOfLine', 'sglQuotedString', 'srange', 'stringEnd', +'stringStart', 'traceParseAction', 'unicodeString', 'upcaseTokens', 'withAttribute', +'indentedBlock', 'originalTextFor', 'ungroup', 'infixNotation','locatedExpr', 'withClass', +'CloseMatch', 'tokenMap', 'pyparsing_common', +] + +system_version = tuple(sys.version_info)[:3] +PY_3 = system_version[0] == 3 +if PY_3: + _MAX_INT = sys.maxsize + basestring = str + unichr = chr + _ustr = str + + # build list of single arg builtins, that can be used as parse actions + singleArgBuiltins = [sum, len, sorted, reversed, list, tuple, set, any, all, min, max] + +else: + _MAX_INT = sys.maxint + range = xrange + + def _ustr(obj): + """Drop-in replacement for str(obj) that tries to be Unicode friendly. It first tries + str(obj). If that fails with a UnicodeEncodeError, then it tries unicode(obj). It + then < returns the unicode object | encodes it with the default encoding | ... >. + """ + if isinstance(obj,unicode): + return obj + + try: + # If this works, then _ustr(obj) has the same behaviour as str(obj), so + # it won't break any existing code. + return str(obj) + + except UnicodeEncodeError: + # Else encode it + ret = unicode(obj).encode(sys.getdefaultencoding(), 'xmlcharrefreplace') + xmlcharref = Regex('&#\d+;') + xmlcharref.setParseAction(lambda t: '\\u' + hex(int(t[0][2:-1]))[2:]) + return xmlcharref.transformString(ret) + + # build list of single arg builtins, tolerant of Python version, that can be used as parse actions + singleArgBuiltins = [] + import __builtin__ + for fname in "sum len sorted reversed list tuple set any all min max".split(): + try: + singleArgBuiltins.append(getattr(__builtin__,fname)) + except AttributeError: + continue + +_generatorType = type((y for y in range(1))) + +def _xml_escape(data): + """Escape &, <, >, ", ', etc. in a string of data.""" + + # ampersand must be replaced first + from_symbols = '&><"\'' + to_symbols = ('&'+s+';' for s in "amp gt lt quot apos".split()) + for from_,to_ in zip(from_symbols, to_symbols): + data = data.replace(from_, to_) + return data + +class _Constants(object): + pass + +alphas = string.ascii_uppercase + string.ascii_lowercase +nums = "0123456789" +hexnums = nums + "ABCDEFabcdef" +alphanums = alphas + nums +_bslash = chr(92) +printables = "".join(c for c in string.printable if c not in string.whitespace) + +class ParseBaseException(Exception): + """base exception class for all parsing runtime exceptions""" + # Performance tuning: we construct a *lot* of these, so keep this + # constructor as small and fast as possible + def __init__( self, pstr, loc=0, msg=None, elem=None ): + self.loc = loc + if msg is None: + self.msg = pstr + self.pstr = "" + else: + self.msg = msg + self.pstr = pstr + self.parserElement = elem + self.args = (pstr, loc, msg) + + @classmethod + def _from_exception(cls, pe): + """ + internal factory method to simplify creating one type of ParseException + from another - avoids having __init__ signature conflicts among subclasses + """ + return cls(pe.pstr, pe.loc, pe.msg, pe.parserElement) + + def __getattr__( self, aname ): + """supported attributes by name are: + - lineno - returns the line number of the exception text + - col - returns the column number of the exception text + - line - returns the line containing the exception text + """ + if( aname == "lineno" ): + return lineno( self.loc, self.pstr ) + elif( aname in ("col", "column") ): + return col( self.loc, self.pstr ) + elif( aname == "line" ): + return line( self.loc, self.pstr ) + else: + raise AttributeError(aname) + + def __str__( self ): + return "%s (at char %d), (line:%d, col:%d)" % \ + ( self.msg, self.loc, self.lineno, self.column ) + def __repr__( self ): + return _ustr(self) + def markInputline( self, markerString = ">!<" ): + """Extracts the exception line from the input string, and marks + the location of the exception with a special symbol. + """ + line_str = self.line + line_column = self.column - 1 + if markerString: + line_str = "".join((line_str[:line_column], + markerString, line_str[line_column:])) + return line_str.strip() + def __dir__(self): + return "lineno col line".split() + dir(type(self)) + +class ParseException(ParseBaseException): + """ + Exception thrown when parse expressions don't match class; + supported attributes by name are: + - lineno - returns the line number of the exception text + - col - returns the column number of the exception text + - line - returns the line containing the exception text + + Example:: + try: + Word(nums).setName("integer").parseString("ABC") + except ParseException as pe: + print(pe) + print("column: {}".format(pe.col)) + + prints:: + Expected integer (at char 0), (line:1, col:1) + column: 1 + """ + pass + +class ParseFatalException(ParseBaseException): + """user-throwable exception thrown when inconsistent parse content + is found; stops all parsing immediately""" + pass + +class ParseSyntaxException(ParseFatalException): + """just like L{ParseFatalException}, but thrown internally when an + L{ErrorStop<And._ErrorStop>} ('-' operator) indicates that parsing is to stop + immediately because an unbacktrackable syntax error has been found""" + pass + +#~ class ReparseException(ParseBaseException): + #~ """Experimental class - parse actions can raise this exception to cause + #~ pyparsing to reparse the input string: + #~ - with a modified input string, and/or + #~ - with a modified start location + #~ Set the values of the ReparseException in the constructor, and raise the + #~ exception in a parse action to cause pyparsing to use the new string/location. + #~ Setting the values as None causes no change to be made. + #~ """ + #~ def __init_( self, newstring, restartLoc ): + #~ self.newParseText = newstring + #~ self.reparseLoc = restartLoc + +class RecursiveGrammarException(Exception): + """exception thrown by L{ParserElement.validate} if the grammar could be improperly recursive""" + def __init__( self, parseElementList ): + self.parseElementTrace = parseElementList + + def __str__( self ): + return "RecursiveGrammarException: %s" % self.parseElementTrace + +class _ParseResultsWithOffset(object): + def __init__(self,p1,p2): + self.tup = (p1,p2) + def __getitem__(self,i): + return self.tup[i] + def __repr__(self): + return repr(self.tup[0]) + def setOffset(self,i): + self.tup = (self.tup[0],i) + +class ParseResults(object): + """ + Structured parse results, to provide multiple means of access to the parsed data: + - as a list (C{len(results)}) + - by list index (C{results[0], results[1]}, etc.) + - by attribute (C{results.<resultsName>} - see L{ParserElement.setResultsName}) + + Example:: + integer = Word(nums) + date_str = (integer.setResultsName("year") + '/' + + integer.setResultsName("month") + '/' + + integer.setResultsName("day")) + # equivalent form: + # date_str = integer("year") + '/' + integer("month") + '/' + integer("day") + + # parseString returns a ParseResults object + result = date_str.parseString("1999/12/31") + + def test(s, fn=repr): + print("%s -> %s" % (s, fn(eval(s)))) + test("list(result)") + test("result[0]") + test("result['month']") + test("result.day") + test("'month' in result") + test("'minutes' in result") + test("result.dump()", str) + prints:: + list(result) -> ['1999', '/', '12', '/', '31'] + result[0] -> '1999' + result['month'] -> '12' + result.day -> '31' + 'month' in result -> True + 'minutes' in result -> False + result.dump() -> ['1999', '/', '12', '/', '31'] + - day: 31 + - month: 12 + - year: 1999 + """ + def __new__(cls, toklist=None, name=None, asList=True, modal=True ): + if isinstance(toklist, cls): + return toklist + retobj = object.__new__(cls) + retobj.__doinit = True + return retobj + + # Performance tuning: we construct a *lot* of these, so keep this + # constructor as small and fast as possible + def __init__( self, toklist=None, name=None, asList=True, modal=True, isinstance=isinstance ): + if self.__doinit: + self.__doinit = False + self.__name = None + self.__parent = None + self.__accumNames = {} + self.__asList = asList + self.__modal = modal + if toklist is None: + toklist = [] + if isinstance(toklist, list): + self.__toklist = toklist[:] + elif isinstance(toklist, _generatorType): + self.__toklist = list(toklist) + else: + self.__toklist = [toklist] + self.__tokdict = dict() + + if name is not None and name: + if not modal: + self.__accumNames[name] = 0 + if isinstance(name,int): + name = _ustr(name) # will always return a str, but use _ustr for consistency + self.__name = name + if not (isinstance(toklist, (type(None), basestring, list)) and toklist in (None,'',[])): + if isinstance(toklist,basestring): + toklist = [ toklist ] + if asList: + if isinstance(toklist,ParseResults): + self[name] = _ParseResultsWithOffset(toklist.copy(),0) + else: + self[name] = _ParseResultsWithOffset(ParseResults(toklist[0]),0) + self[name].__name = name + else: + try: + self[name] = toklist[0] + except (KeyError,TypeError,IndexError): + self[name] = toklist + + def __getitem__( self, i ): + if isinstance( i, (int,slice) ): + return self.__toklist[i] + else: + if i not in self.__accumNames: + return self.__tokdict[i][-1][0] + else: + return ParseResults([ v[0] for v in self.__tokdict[i] ]) + + def __setitem__( self, k, v, isinstance=isinstance ): + if isinstance(v,_ParseResultsWithOffset): + self.__tokdict[k] = self.__tokdict.get(k,list()) + [v] + sub = v[0] + elif isinstance(k,(int,slice)): + self.__toklist[k] = v + sub = v + else: + self.__tokdict[k] = self.__tokdict.get(k,list()) + [_ParseResultsWithOffset(v,0)] + sub = v + if isinstance(sub,ParseResults): + sub.__parent = wkref(self) + + def __delitem__( self, i ): + if isinstance(i,(int,slice)): + mylen = len( self.__toklist ) + del self.__toklist[i] + + # convert int to slice + if isinstance(i, int): + if i < 0: + i += mylen + i = slice(i, i+1) + # get removed indices + removed = list(range(*i.indices(mylen))) + removed.reverse() + # fixup indices in token dictionary + for name,occurrences in self.__tokdict.items(): + for j in removed: + for k, (value, position) in enumerate(occurrences): + occurrences[k] = _ParseResultsWithOffset(value, position - (position > j)) + else: + del self.__tokdict[i] + + def __contains__( self, k ): + return k in self.__tokdict + + def __len__( self ): return len( self.__toklist ) + def __bool__(self): return ( not not self.__toklist ) + __nonzero__ = __bool__ + def __iter__( self ): return iter( self.__toklist ) + def __reversed__( self ): return iter( self.__toklist[::-1] ) + def _iterkeys( self ): + if hasattr(self.__tokdict, "iterkeys"): + return self.__tokdict.iterkeys() + else: + return iter(self.__tokdict) + + def _itervalues( self ): + return (self[k] for k in self._iterkeys()) + + def _iteritems( self ): + return ((k, self[k]) for k in self._iterkeys()) + + if PY_3: + keys = _iterkeys + """Returns an iterator of all named result keys (Python 3.x only).""" + + values = _itervalues + """Returns an iterator of all named result values (Python 3.x only).""" + + items = _iteritems + """Returns an iterator of all named result key-value tuples (Python 3.x only).""" + + else: + iterkeys = _iterkeys + """Returns an iterator of all named result keys (Python 2.x only).""" + + itervalues = _itervalues + """Returns an iterator of all named result values (Python 2.x only).""" + + iteritems = _iteritems + """Returns an iterator of all named result key-value tuples (Python 2.x only).""" + + def keys( self ): + """Returns all named result keys (as a list in Python 2.x, as an iterator in Python 3.x).""" + return list(self.iterkeys()) + + def values( self ): + """Returns all named result values (as a list in Python 2.x, as an iterator in Python 3.x).""" + return list(self.itervalues()) + + def items( self ): + """Returns all named result key-values (as a list of tuples in Python 2.x, as an iterator in Python 3.x).""" + return list(self.iteritems()) + + def haskeys( self ): + """Since keys() returns an iterator, this method is helpful in bypassing + code that looks for the existence of any defined results names.""" + return bool(self.__tokdict) + + def pop( self, *args, **kwargs): + """ + Removes and returns item at specified index (default=C{last}). + Supports both C{list} and C{dict} semantics for C{pop()}. If passed no + argument or an integer argument, it will use C{list} semantics + and pop tokens from the list of parsed tokens. If passed a + non-integer argument (most likely a string), it will use C{dict} + semantics and pop the corresponding value from any defined + results names. A second default return value argument is + supported, just as in C{dict.pop()}. + + Example:: + def remove_first(tokens): + tokens.pop(0) + print(OneOrMore(Word(nums)).parseString("0 123 321")) # -> ['0', '123', '321'] + print(OneOrMore(Word(nums)).addParseAction(remove_first).parseString("0 123 321")) # -> ['123', '321'] + + label = Word(alphas) + patt = label("LABEL") + OneOrMore(Word(nums)) + print(patt.parseString("AAB 123 321").dump()) + + # Use pop() in a parse action to remove named result (note that corresponding value is not + # removed from list form of results) + def remove_LABEL(tokens): + tokens.pop("LABEL") + return tokens + patt.addParseAction(remove_LABEL) + print(patt.parseString("AAB 123 321").dump()) + prints:: + ['AAB', '123', '321'] + - LABEL: AAB + + ['AAB', '123', '321'] + """ + if not args: + args = [-1] + for k,v in kwargs.items(): + if k == 'default': + args = (args[0], v) + else: + raise TypeError("pop() got an unexpected keyword argument '%s'" % k) + if (isinstance(args[0], int) or + len(args) == 1 or + args[0] in self): + index = args[0] + ret = self[index] + del self[index] + return ret + else: + defaultvalue = args[1] + return defaultvalue + + def get(self, key, defaultValue=None): + """ + Returns named result matching the given key, or if there is no + such name, then returns the given C{defaultValue} or C{None} if no + C{defaultValue} is specified. + + Similar to C{dict.get()}. + + Example:: + integer = Word(nums) + date_str = integer("year") + '/' + integer("month") + '/' + integer("day") + + result = date_str.parseString("1999/12/31") + print(result.get("year")) # -> '1999' + print(result.get("hour", "not specified")) # -> 'not specified' + print(result.get("hour")) # -> None + """ + if key in self: + return self[key] + else: + return defaultValue + + def insert( self, index, insStr ): + """ + Inserts new element at location index in the list of parsed tokens. + + Similar to C{list.insert()}. + + Example:: + print(OneOrMore(Word(nums)).parseString("0 123 321")) # -> ['0', '123', '321'] + + # use a parse action to insert the parse location in the front of the parsed results + def insert_locn(locn, tokens): + tokens.insert(0, locn) + print(OneOrMore(Word(nums)).addParseAction(insert_locn).parseString("0 123 321")) # -> [0, '0', '123', '321'] + """ + self.__toklist.insert(index, insStr) + # fixup indices in token dictionary + for name,occurrences in self.__tokdict.items(): + for k, (value, position) in enumerate(occurrences): + occurrences[k] = _ParseResultsWithOffset(value, position + (position > index)) + + def append( self, item ): + """ + Add single element to end of ParseResults list of elements. + + Example:: + print(OneOrMore(Word(nums)).parseString("0 123 321")) # -> ['0', '123', '321'] + + # use a parse action to compute the sum of the parsed integers, and add it to the end + def append_sum(tokens): + tokens.append(sum(map(int, tokens))) + print(OneOrMore(Word(nums)).addParseAction(append_sum).parseString("0 123 321")) # -> ['0', '123', '321', 444] + """ + self.__toklist.append(item) + + def extend( self, itemseq ): + """ + Add sequence of elements to end of ParseResults list of elements. + + Example:: + patt = OneOrMore(Word(alphas)) + + # use a parse action to append the reverse of the matched strings, to make a palindrome + def make_palindrome(tokens): + tokens.extend(reversed([t[::-1] for t in tokens])) + return ''.join(tokens) + print(patt.addParseAction(make_palindrome).parseString("lskdj sdlkjf lksd")) # -> 'lskdjsdlkjflksddsklfjkldsjdksl' + """ + if isinstance(itemseq, ParseResults): + self += itemseq + else: + self.__toklist.extend(itemseq) + + def clear( self ): + """ + Clear all elements and results names. + """ + del self.__toklist[:] + self.__tokdict.clear() + + def __getattr__( self, name ): + try: + return self[name] + except KeyError: + return "" + + if name in self.__tokdict: + if name not in self.__accumNames: + return self.__tokdict[name][-1][0] + else: + return ParseResults([ v[0] for v in self.__tokdict[name] ]) + else: + return "" + + def __add__( self, other ): + ret = self.copy() + ret += other + return ret + + def __iadd__( self, other ): + if other.__tokdict: + offset = len(self.__toklist) + addoffset = lambda a: offset if a<0 else a+offset + otheritems = other.__tokdict.items() + otherdictitems = [(k, _ParseResultsWithOffset(v[0],addoffset(v[1])) ) + for (k,vlist) in otheritems for v in vlist] + for k,v in otherdictitems: + self[k] = v + if isinstance(v[0],ParseResults): + v[0].__parent = wkref(self) + + self.__toklist += other.__toklist + self.__accumNames.update( other.__accumNames ) + return self + + def __radd__(self, other): + if isinstance(other,int) and other == 0: + # useful for merging many ParseResults using sum() builtin + return self.copy() + else: + # this may raise a TypeError - so be it + return other + self + + def __repr__( self ): + return "(%s, %s)" % ( repr( self.__toklist ), repr( self.__tokdict ) ) + + def __str__( self ): + return '[' + ', '.join(_ustr(i) if isinstance(i, ParseResults) else repr(i) for i in self.__toklist) + ']' + + def _asStringList( self, sep='' ): + out = [] + for item in self.__toklist: + if out and sep: + out.append(sep) + if isinstance( item, ParseResults ): + out += item._asStringList() + else: + out.append( _ustr(item) ) + return out + + def asList( self ): + """ + Returns the parse results as a nested list of matching tokens, all converted to strings. + + Example:: + patt = OneOrMore(Word(alphas)) + result = patt.parseString("sldkj lsdkj sldkj") + # even though the result prints in string-like form, it is actually a pyparsing ParseResults + print(type(result), result) # -> <class 'pyparsing.ParseResults'> ['sldkj', 'lsdkj', 'sldkj'] + + # Use asList() to create an actual list + result_list = result.asList() + print(type(result_list), result_list) # -> <class 'list'> ['sldkj', 'lsdkj', 'sldkj'] + """ + return [res.asList() if isinstance(res,ParseResults) else res for res in self.__toklist] + + def asDict( self ): + """ + Returns the named parse results as a nested dictionary. + + Example:: + integer = Word(nums) + date_str = integer("year") + '/' + integer("month") + '/' + integer("day") + + result = date_str.parseString('12/31/1999') + print(type(result), repr(result)) # -> <class 'pyparsing.ParseResults'> (['12', '/', '31', '/', '1999'], {'day': [('1999', 4)], 'year': [('12', 0)], 'month': [('31', 2)]}) + + result_dict = result.asDict() + print(type(result_dict), repr(result_dict)) # -> <class 'dict'> {'day': '1999', 'year': '12', 'month': '31'} + + # even though a ParseResults supports dict-like access, sometime you just need to have a dict + import json + print(json.dumps(result)) # -> Exception: TypeError: ... is not JSON serializable + print(json.dumps(result.asDict())) # -> {"month": "31", "day": "1999", "year": "12"} + """ + if PY_3: + item_fn = self.items + else: + item_fn = self.iteritems + + def toItem(obj): + if isinstance(obj, ParseResults): + if obj.haskeys(): + return obj.asDict() + else: + return [toItem(v) for v in obj] + else: + return obj + + return dict((k,toItem(v)) for k,v in item_fn()) + + def copy( self ): + """ + Returns a new copy of a C{ParseResults} object. + """ + ret = ParseResults( self.__toklist ) + ret.__tokdict = self.__tokdict.copy() + ret.__parent = self.__parent + ret.__accumNames.update( self.__accumNames ) + ret.__name = self.__name + return ret + + def asXML( self, doctag=None, namedItemsOnly=False, indent="", formatted=True ): + """ + (Deprecated) Returns the parse results as XML. Tags are created for tokens and lists that have defined results names. + """ + nl = "\n" + out = [] + namedItems = dict((v[1],k) for (k,vlist) in self.__tokdict.items() + for v in vlist) + nextLevelIndent = indent + " " + + # collapse out indents if formatting is not desired + if not formatted: + indent = "" + nextLevelIndent = "" + nl = "" + + selfTag = None + if doctag is not None: + selfTag = doctag + else: + if self.__name: + selfTag = self.__name + + if not selfTag: + if namedItemsOnly: + return "" + else: + selfTag = "ITEM" + + out += [ nl, indent, "<", selfTag, ">" ] + + for i,res in enumerate(self.__toklist): + if isinstance(res,ParseResults): + if i in namedItems: + out += [ res.asXML(namedItems[i], + namedItemsOnly and doctag is None, + nextLevelIndent, + formatted)] + else: + out += [ res.asXML(None, + namedItemsOnly and doctag is None, + nextLevelIndent, + formatted)] + else: + # individual token, see if there is a name for it + resTag = None + if i in namedItems: + resTag = namedItems[i] + if not resTag: + if namedItemsOnly: + continue + else: + resTag = "ITEM" + xmlBodyText = _xml_escape(_ustr(res)) + out += [ nl, nextLevelIndent, "<", resTag, ">", + xmlBodyText, + "</", resTag, ">" ] + + out += [ nl, indent, "</", selfTag, ">" ] + return "".join(out) + + def __lookup(self,sub): + for k,vlist in self.__tokdict.items(): + for v,loc in vlist: + if sub is v: + return k + return None + + def getName(self): + """ + Returns the results name for this token expression. Useful when several + different expressions might match at a particular location. + + Example:: + integer = Word(nums) + ssn_expr = Regex(r"\d\d\d-\d\d-\d\d\d\d") + house_number_expr = Suppress('#') + Word(nums, alphanums) + user_data = (Group(house_number_expr)("house_number") + | Group(ssn_expr)("ssn") + | Group(integer)("age")) + user_info = OneOrMore(user_data) + + result = user_info.parseString("22 111-22-3333 #221B") + for item in result: + print(item.getName(), ':', item[0]) + prints:: + age : 22 + ssn : 111-22-3333 + house_number : 221B + """ + if self.__name: + return self.__name + elif self.__parent: + par = self.__parent() + if par: + return par.__lookup(self) + else: + return None + elif (len(self) == 1 and + len(self.__tokdict) == 1 and + next(iter(self.__tokdict.values()))[0][1] in (0,-1)): + return next(iter(self.__tokdict.keys())) + else: + return None + + def dump(self, indent='', depth=0, full=True): + """ + Diagnostic method for listing out the contents of a C{ParseResults}. + Accepts an optional C{indent} argument so that this string can be embedded + in a nested display of other data. + + Example:: + integer = Word(nums) + date_str = integer("year") + '/' + integer("month") + '/' + integer("day") + + result = date_str.parseString('12/31/1999') + print(result.dump()) + prints:: + ['12', '/', '31', '/', '1999'] + - day: 1999 + - month: 31 + - year: 12 + """ + out = [] + NL = '\n' + out.append( indent+_ustr(self.asList()) ) + if full: + if self.haskeys(): + items = sorted((str(k), v) for k,v in self.items()) + for k,v in items: + if out: + out.append(NL) + out.append( "%s%s- %s: " % (indent,(' '*depth), k) ) + if isinstance(v,ParseResults): + if v: + out.append( v.dump(indent,depth+1) ) + else: + out.append(_ustr(v)) + else: + out.append(repr(v)) + elif any(isinstance(vv,ParseResults) for vv in self): + v = self + for i,vv in enumerate(v): + if isinstance(vv,ParseResults): + out.append("\n%s%s[%d]:\n%s%s%s" % (indent,(' '*(depth)),i,indent,(' '*(depth+1)),vv.dump(indent,depth+1) )) + else: + out.append("\n%s%s[%d]:\n%s%s%s" % (indent,(' '*(depth)),i,indent,(' '*(depth+1)),_ustr(vv))) + + return "".join(out) + + def pprint(self, *args, **kwargs): + """ + Pretty-printer for parsed results as a list, using the C{pprint} module. + Accepts additional positional or keyword args as defined for the + C{pprint.pprint} method. (U{http://docs.python.org/3/library/pprint.html#pprint.pprint}) + + Example:: + ident = Word(alphas, alphanums) + num = Word(nums) + func = Forward() + term = ident | num | Group('(' + func + ')') + func <<= ident + Group(Optional(delimitedList(term))) + result = func.parseString("fna a,b,(fnb c,d,200),100") + result.pprint(width=40) + prints:: + ['fna', + ['a', + 'b', + ['(', 'fnb', ['c', 'd', '200'], ')'], + '100']] + """ + pprint.pprint(self.asList(), *args, **kwargs) + + # add support for pickle protocol + def __getstate__(self): + return ( self.__toklist, + ( self.__tokdict.copy(), + self.__parent is not None and self.__parent() or None, + self.__accumNames, + self.__name ) ) + + def __setstate__(self,state): + self.__toklist = state[0] + (self.__tokdict, + par, + inAccumNames, + self.__name) = state[1] + self.__accumNames = {} + self.__accumNames.update(inAccumNames) + if par is not None: + self.__parent = wkref(par) + else: + self.__parent = None + + def __getnewargs__(self): + return self.__toklist, self.__name, self.__asList, self.__modal + + def __dir__(self): + return (dir(type(self)) + list(self.keys())) + +collections.MutableMapping.register(ParseResults) + +def col (loc,strg): + """Returns current column within a string, counting newlines as line separators. + The first column is number 1. + + Note: the default parsing behavior is to expand tabs in the input string + before starting the parsing process. See L{I{ParserElement.parseString}<ParserElement.parseString>} for more information + on parsing strings containing C{<TAB>}s, and suggested methods to maintain a + consistent view of the parsed string, the parse location, and line and column + positions within the parsed string. + """ + s = strg + return 1 if 0<loc<len(s) and s[loc-1] == '\n' else loc - s.rfind("\n", 0, loc) + +def lineno(loc,strg): + """Returns current line number within a string, counting newlines as line separators. + The first line is number 1. + + Note: the default parsing behavior is to expand tabs in the input string + before starting the parsing process. See L{I{ParserElement.parseString}<ParserElement.parseString>} for more information + on parsing strings containing C{<TAB>}s, and suggested methods to maintain a + consistent view of the parsed string, the parse location, and line and column + positions within the parsed string. + """ + return strg.count("\n",0,loc) + 1 + +def line( loc, strg ): + """Returns the line of text containing loc within a string, counting newlines as line separators. + """ + lastCR = strg.rfind("\n", 0, loc) + nextCR = strg.find("\n", loc) + if nextCR >= 0: + return strg[lastCR+1:nextCR] + else: + return strg[lastCR+1:] + +def _defaultStartDebugAction( instring, loc, expr ): + print (("Match " + _ustr(expr) + " at loc " + _ustr(loc) + "(%d,%d)" % ( lineno(loc,instring), col(loc,instring) ))) + +def _defaultSuccessDebugAction( instring, startloc, endloc, expr, toks ): + print ("Matched " + _ustr(expr) + " -> " + str(toks.asList())) + +def _defaultExceptionDebugAction( instring, loc, expr, exc ): + print ("Exception raised:" + _ustr(exc)) + +def nullDebugAction(*args): + """'Do-nothing' debug action, to suppress debugging output during parsing.""" + pass + +# Only works on Python 3.x - nonlocal is toxic to Python 2 installs +#~ 'decorator to trim function calls to match the arity of the target' +#~ def _trim_arity(func, maxargs=3): + #~ if func in singleArgBuiltins: + #~ return lambda s,l,t: func(t) + #~ limit = 0 + #~ foundArity = False + #~ def wrapper(*args): + #~ nonlocal limit,foundArity + #~ while 1: + #~ try: + #~ ret = func(*args[limit:]) + #~ foundArity = True + #~ return ret + #~ except TypeError: + #~ if limit == maxargs or foundArity: + #~ raise + #~ limit += 1 + #~ continue + #~ return wrapper + +# this version is Python 2.x-3.x cross-compatible +'decorator to trim function calls to match the arity of the target' +def _trim_arity(func, maxargs=2): + if func in singleArgBuiltins: + return lambda s,l,t: func(t) + limit = [0] + foundArity = [False] + + # traceback return data structure changed in Py3.5 - normalize back to plain tuples + if system_version[:2] >= (3,5): + def extract_stack(limit=0): + # special handling for Python 3.5.0 - extra deep call stack by 1 + offset = -3 if system_version == (3,5,0) else -2 + frame_summary = traceback.extract_stack(limit=-offset+limit-1)[offset] + return [(frame_summary.filename, frame_summary.lineno)] + def extract_tb(tb, limit=0): + frames = traceback.extract_tb(tb, limit=limit) + frame_summary = frames[-1] + return [(frame_summary.filename, frame_summary.lineno)] + else: + extract_stack = traceback.extract_stack + extract_tb = traceback.extract_tb + + # synthesize what would be returned by traceback.extract_stack at the call to + # user's parse action 'func', so that we don't incur call penalty at parse time + + LINE_DIFF = 6 + # IF ANY CODE CHANGES, EVEN JUST COMMENTS OR BLANK LINES, BETWEEN THE NEXT LINE AND + # THE CALL TO FUNC INSIDE WRAPPER, LINE_DIFF MUST BE MODIFIED!!!! + this_line = extract_stack(limit=2)[-1] + pa_call_line_synth = (this_line[0], this_line[1]+LINE_DIFF) + + def wrapper(*args): + while 1: + try: + ret = func(*args[limit[0]:]) + foundArity[0] = True + return ret + except TypeError: + # re-raise TypeErrors if they did not come from our arity testing + if foundArity[0]: + raise + else: + try: + tb = sys.exc_info()[-1] + if not extract_tb(tb, limit=2)[-1][:2] == pa_call_line_synth: + raise + finally: + del tb + + if limit[0] <= maxargs: + limit[0] += 1 + continue + raise + + # copy func name to wrapper for sensible debug output + func_name = "<parse action>" + try: + func_name = getattr(func, '__name__', + getattr(func, '__class__').__name__) + except Exception: + func_name = str(func) + wrapper.__name__ = func_name + + return wrapper + +class ParserElement(object): + """Abstract base level parser element class.""" + DEFAULT_WHITE_CHARS = " \n\t\r" + verbose_stacktrace = False + + @staticmethod + def setDefaultWhitespaceChars( chars ): + r""" + Overrides the default whitespace chars + + Example:: + # default whitespace chars are space, <TAB> and newline + OneOrMore(Word(alphas)).parseString("abc def\nghi jkl") # -> ['abc', 'def', 'ghi', 'jkl'] + + # change to just treat newline as significant + ParserElement.setDefaultWhitespaceChars(" \t") + OneOrMore(Word(alphas)).parseString("abc def\nghi jkl") # -> ['abc', 'def'] + """ + ParserElement.DEFAULT_WHITE_CHARS = chars + + @staticmethod + def inlineLiteralsUsing(cls): + """ + Set class to be used for inclusion of string literals into a parser. + + Example:: + # default literal class used is Literal + integer = Word(nums) + date_str = integer("year") + '/' + integer("month") + '/' + integer("day") + + date_str.parseString("1999/12/31") # -> ['1999', '/', '12', '/', '31'] + + + # change to Suppress + ParserElement.inlineLiteralsUsing(Suppress) + date_str = integer("year") + '/' + integer("month") + '/' + integer("day") + + date_str.parseString("1999/12/31") # -> ['1999', '12', '31'] + """ + ParserElement._literalStringClass = cls + + def __init__( self, savelist=False ): + self.parseAction = list() + self.failAction = None + #~ self.name = "<unknown>" # don't define self.name, let subclasses try/except upcall + self.strRepr = None + self.resultsName = None + self.saveAsList = savelist + self.skipWhitespace = True + self.whiteChars = ParserElement.DEFAULT_WHITE_CHARS + self.copyDefaultWhiteChars = True + self.mayReturnEmpty = False # used when checking for left-recursion + self.keepTabs = False + self.ignoreExprs = list() + self.debug = False + self.streamlined = False + self.mayIndexError = True # used to optimize exception handling for subclasses that don't advance parse index + self.errmsg = "" + self.modalResults = True # used to mark results names as modal (report only last) or cumulative (list all) + self.debugActions = ( None, None, None ) #custom debug actions + self.re = None + self.callPreparse = True # used to avoid redundant calls to preParse + self.callDuringTry = False + + def copy( self ): + """ + Make a copy of this C{ParserElement}. Useful for defining different parse actions + for the same parsing pattern, using copies of the original parse element. + + Example:: + integer = Word(nums).setParseAction(lambda toks: int(toks[0])) + integerK = integer.copy().addParseAction(lambda toks: toks[0]*1024) + Suppress("K") + integerM = integer.copy().addParseAction(lambda toks: toks[0]*1024*1024) + Suppress("M") + + print(OneOrMore(integerK | integerM | integer).parseString("5K 100 640K 256M")) + prints:: + [5120, 100, 655360, 268435456] + Equivalent form of C{expr.copy()} is just C{expr()}:: + integerM = integer().addParseAction(lambda toks: toks[0]*1024*1024) + Suppress("M") + """ + cpy = copy.copy( self ) + cpy.parseAction = self.parseAction[:] + cpy.ignoreExprs = self.ignoreExprs[:] + if self.copyDefaultWhiteChars: + cpy.whiteChars = ParserElement.DEFAULT_WHITE_CHARS + return cpy + + def setName( self, name ): + """ + Define name for this expression, makes debugging and exception messages clearer. + + Example:: + Word(nums).parseString("ABC") # -> Exception: Expected W:(0123...) (at char 0), (line:1, col:1) + Word(nums).setName("integer").parseString("ABC") # -> Exception: Expected integer (at char 0), (line:1, col:1) + """ + self.name = name + self.errmsg = "Expected " + self.name + if hasattr(self,"exception"): + self.exception.msg = self.errmsg + return self + + def setResultsName( self, name, listAllMatches=False ): + """ + Define name for referencing matching tokens as a nested attribute + of the returned parse results. + NOTE: this returns a *copy* of the original C{ParserElement} object; + this is so that the client can define a basic element, such as an + integer, and reference it in multiple places with different names. + + You can also set results names using the abbreviated syntax, + C{expr("name")} in place of C{expr.setResultsName("name")} - + see L{I{__call__}<__call__>}. + + Example:: + date_str = (integer.setResultsName("year") + '/' + + integer.setResultsName("month") + '/' + + integer.setResultsName("day")) + + # equivalent form: + date_str = integer("year") + '/' + integer("month") + '/' + integer("day") + """ + newself = self.copy() + if name.endswith("*"): + name = name[:-1] + listAllMatches=True + newself.resultsName = name + newself.modalResults = not listAllMatches + return newself + + def setBreak(self,breakFlag = True): + """Method to invoke the Python pdb debugger when this element is + about to be parsed. Set C{breakFlag} to True to enable, False to + disable. + """ + if breakFlag: + _parseMethod = self._parse + def breaker(instring, loc, doActions=True, callPreParse=True): + import pdb + pdb.set_trace() + return _parseMethod( instring, loc, doActions, callPreParse ) + breaker._originalParseMethod = _parseMethod + self._parse = breaker + else: + if hasattr(self._parse,"_originalParseMethod"): + self._parse = self._parse._originalParseMethod + return self + + def setParseAction( self, *fns, **kwargs ): + """ + Define action to perform when successfully matching parse element definition. + Parse action fn is a callable method with 0-3 arguments, called as C{fn(s,loc,toks)}, + C{fn(loc,toks)}, C{fn(toks)}, or just C{fn()}, where: + - s = the original string being parsed (see note below) + - loc = the location of the matching substring + - toks = a list of the matched tokens, packaged as a C{L{ParseResults}} object + If the functions in fns modify the tokens, they can return them as the return + value from fn, and the modified list of tokens will replace the original. + Otherwise, fn does not need to return any value. + + Optional keyword arguments: + - callDuringTry = (default=C{False}) indicate if parse action should be run during lookaheads and alternate testing + + Note: the default parsing behavior is to expand tabs in the input string + before starting the parsing process. See L{I{parseString}<parseString>} for more information + on parsing strings containing C{<TAB>}s, and suggested methods to maintain a + consistent view of the parsed string, the parse location, and line and column + positions within the parsed string. + + Example:: + integer = Word(nums) + date_str = integer + '/' + integer + '/' + integer + + date_str.parseString("1999/12/31") # -> ['1999', '/', '12', '/', '31'] + + # use parse action to convert to ints at parse time + integer = Word(nums).setParseAction(lambda toks: int(toks[0])) + date_str = integer + '/' + integer + '/' + integer + + # note that integer fields are now ints, not strings + date_str.parseString("1999/12/31") # -> [1999, '/', 12, '/', 31] + """ + self.parseAction = list(map(_trim_arity, list(fns))) + self.callDuringTry = kwargs.get("callDuringTry", False) + return self + + def addParseAction( self, *fns, **kwargs ): + """ + Add parse action to expression's list of parse actions. See L{I{setParseAction}<setParseAction>}. + + See examples in L{I{copy}<copy>}. + """ + self.parseAction += list(map(_trim_arity, list(fns))) + self.callDuringTry = self.callDuringTry or kwargs.get("callDuringTry", False) + return self + + def addCondition(self, *fns, **kwargs): + """Add a boolean predicate function to expression's list of parse actions. See + L{I{setParseAction}<setParseAction>} for function call signatures. Unlike C{setParseAction}, + functions passed to C{addCondition} need to return boolean success/fail of the condition. + + Optional keyword arguments: + - message = define a custom message to be used in the raised exception + - fatal = if True, will raise ParseFatalException to stop parsing immediately; otherwise will raise ParseException + + Example:: + integer = Word(nums).setParseAction(lambda toks: int(toks[0])) + year_int = integer.copy() + year_int.addCondition(lambda toks: toks[0] >= 2000, message="Only support years 2000 and later") + date_str = year_int + '/' + integer + '/' + integer + + result = date_str.parseString("1999/12/31") # -> Exception: Only support years 2000 and later (at char 0), (line:1, col:1) + """ + msg = kwargs.get("message", "failed user-defined condition") + exc_type = ParseFatalException if kwargs.get("fatal", False) else ParseException + for fn in fns: + def pa(s,l,t): + if not bool(_trim_arity(fn)(s,l,t)): + raise exc_type(s,l,msg) + self.parseAction.append(pa) + self.callDuringTry = self.callDuringTry or kwargs.get("callDuringTry", False) + return self + + def setFailAction( self, fn ): + """Define action to perform if parsing fails at this expression. + Fail acton fn is a callable function that takes the arguments + C{fn(s,loc,expr,err)} where: + - s = string being parsed + - loc = location where expression match was attempted and failed + - expr = the parse expression that failed + - err = the exception thrown + The function returns no value. It may throw C{L{ParseFatalException}} + if it is desired to stop parsing immediately.""" + self.failAction = fn + return self + + def _skipIgnorables( self, instring, loc ): + exprsFound = True + while exprsFound: + exprsFound = False + for e in self.ignoreExprs: + try: + while 1: + loc,dummy = e._parse( instring, loc ) + exprsFound = True + except ParseException: + pass + return loc + + def preParse( self, instring, loc ): + if self.ignoreExprs: + loc = self._skipIgnorables( instring, loc ) + + if self.skipWhitespace: + wt = self.whiteChars + instrlen = len(instring) + while loc < instrlen and instring[loc] in wt: + loc += 1 + + return loc + + def parseImpl( self, instring, loc, doActions=True ): + return loc, [] + + def postParse( self, instring, loc, tokenlist ): + return tokenlist + + #~ @profile + def _parseNoCache( self, instring, loc, doActions=True, callPreParse=True ): + debugging = ( self.debug ) #and doActions ) + + if debugging or self.failAction: + #~ print ("Match",self,"at loc",loc,"(%d,%d)" % ( lineno(loc,instring), col(loc,instring) )) + if (self.debugActions[0] ): + self.debugActions[0]( instring, loc, self ) + if callPreParse and self.callPreparse: + preloc = self.preParse( instring, loc ) + else: + preloc = loc + tokensStart = preloc + try: + try: + loc,tokens = self.parseImpl( instring, preloc, doActions ) + except IndexError: + raise ParseException( instring, len(instring), self.errmsg, self ) + except ParseBaseException as err: + #~ print ("Exception raised:", err) + if self.debugActions[2]: + self.debugActions[2]( instring, tokensStart, self, err ) + if self.failAction: + self.failAction( instring, tokensStart, self, err ) + raise + else: + if callPreParse and self.callPreparse: + preloc = self.preParse( instring, loc ) + else: + preloc = loc + tokensStart = preloc + if self.mayIndexError or loc >= len(instring): + try: + loc,tokens = self.parseImpl( instring, preloc, doActions ) + except IndexError: + raise ParseException( instring, len(instring), self.errmsg, self ) + else: + loc,tokens = self.parseImpl( instring, preloc, doActions ) + + tokens = self.postParse( instring, loc, tokens ) + + retTokens = ParseResults( tokens, self.resultsName, asList=self.saveAsList, modal=self.modalResults ) + if self.parseAction and (doActions or self.callDuringTry): + if debugging: + try: + for fn in self.parseAction: + tokens = fn( instring, tokensStart, retTokens ) + if tokens is not None: + retTokens = ParseResults( tokens, + self.resultsName, + asList=self.saveAsList and isinstance(tokens,(ParseResults,list)), + modal=self.modalResults ) + except ParseBaseException as err: + #~ print "Exception raised in user parse action:", err + if (self.debugActions[2] ): + self.debugActions[2]( instring, tokensStart, self, err ) + raise + else: + for fn in self.parseAction: + tokens = fn( instring, tokensStart, retTokens ) + if tokens is not None: + retTokens = ParseResults( tokens, + self.resultsName, + asList=self.saveAsList and isinstance(tokens,(ParseResults,list)), + modal=self.modalResults ) + + if debugging: + #~ print ("Matched",self,"->",retTokens.asList()) + if (self.debugActions[1] ): + self.debugActions[1]( instring, tokensStart, loc, self, retTokens ) + + return loc, retTokens + + def tryParse( self, instring, loc ): + try: + return self._parse( instring, loc, doActions=False )[0] + except ParseFatalException: + raise ParseException( instring, loc, self.errmsg, self) + + def canParseNext(self, instring, loc): + try: + self.tryParse(instring, loc) + except (ParseException, IndexError): + return False + else: + return True + + class _UnboundedCache(object): + def __init__(self): + cache = {} + self.not_in_cache = not_in_cache = object() + + def get(self, key): + return cache.get(key, not_in_cache) + + def set(self, key, value): + cache[key] = value + + def clear(self): + cache.clear() + + self.get = types.MethodType(get, self) + self.set = types.MethodType(set, self) + self.clear = types.MethodType(clear, self) + + if _OrderedDict is not None: + class _FifoCache(object): + def __init__(self, size): + self.not_in_cache = not_in_cache = object() + + cache = _OrderedDict() + + def get(self, key): + return cache.get(key, not_in_cache) + + def set(self, key, value): + cache[key] = value + if len(cache) > size: + cache.popitem(False) + + def clear(self): + cache.clear() + + self.get = types.MethodType(get, self) + self.set = types.MethodType(set, self) + self.clear = types.MethodType(clear, self) + + else: + class _FifoCache(object): + def __init__(self, size): + self.not_in_cache = not_in_cache = object() + + cache = {} + key_fifo = collections.deque([], size) + + def get(self, key): + return cache.get(key, not_in_cache) + + def set(self, key, value): + cache[key] = value + if len(cache) > size: + cache.pop(key_fifo.popleft(), None) + key_fifo.append(key) + + def clear(self): + cache.clear() + key_fifo.clear() + + self.get = types.MethodType(get, self) + self.set = types.MethodType(set, self) + self.clear = types.MethodType(clear, self) + + # argument cache for optimizing repeated calls when backtracking through recursive expressions + packrat_cache = {} # this is set later by enabledPackrat(); this is here so that resetCache() doesn't fail + packrat_cache_lock = RLock() + packrat_cache_stats = [0, 0] + + # this method gets repeatedly called during backtracking with the same arguments - + # we can cache these arguments and save ourselves the trouble of re-parsing the contained expression + def _parseCache( self, instring, loc, doActions=True, callPreParse=True ): + HIT, MISS = 0, 1 + lookup = (self, instring, loc, callPreParse, doActions) + with ParserElement.packrat_cache_lock: + cache = ParserElement.packrat_cache + value = cache.get(lookup) + if value is cache.not_in_cache: + ParserElement.packrat_cache_stats[MISS] += 1 + try: + value = self._parseNoCache(instring, loc, doActions, callPreParse) + except ParseBaseException as pe: + # cache a copy of the exception, without the traceback + cache.set(lookup, pe.__class__(*pe.args)) + raise + else: + cache.set(lookup, (value[0], value[1].copy())) + return value + else: + ParserElement.packrat_cache_stats[HIT] += 1 + if isinstance(value, Exception): + raise value + return (value[0], value[1].copy()) + + _parse = _parseNoCache + + @staticmethod + def resetCache(): + ParserElement.packrat_cache.clear() + ParserElement.packrat_cache_stats[:] = [0] * len(ParserElement.packrat_cache_stats) + + _packratEnabled = False + @staticmethod + def enablePackrat(cache_size_limit=128): + """Enables "packrat" parsing, which adds memoizing to the parsing logic. + Repeated parse attempts at the same string location (which happens + often in many complex grammars) can immediately return a cached value, + instead of re-executing parsing/validating code. Memoizing is done of + both valid results and parsing exceptions. + + Parameters: + - cache_size_limit - (default=C{128}) - if an integer value is provided + will limit the size of the packrat cache; if None is passed, then + the cache size will be unbounded; if 0 is passed, the cache will + be effectively disabled. + + This speedup may break existing programs that use parse actions that + have side-effects. For this reason, packrat parsing is disabled when + you first import pyparsing. To activate the packrat feature, your + program must call the class method C{ParserElement.enablePackrat()}. If + your program uses C{psyco} to "compile as you go", you must call + C{enablePackrat} before calling C{psyco.full()}. If you do not do this, + Python will crash. For best results, call C{enablePackrat()} immediately + after importing pyparsing. + + Example:: + import pyparsing + pyparsing.ParserElement.enablePackrat() + """ + if not ParserElement._packratEnabled: + ParserElement._packratEnabled = True + if cache_size_limit is None: + ParserElement.packrat_cache = ParserElement._UnboundedCache() + else: + ParserElement.packrat_cache = ParserElement._FifoCache(cache_size_limit) + ParserElement._parse = ParserElement._parseCache + + def parseString( self, instring, parseAll=False ): + """ + Execute the parse expression with the given string. + This is the main interface to the client code, once the complete + expression has been built. + + If you want the grammar to require that the entire input string be + successfully parsed, then set C{parseAll} to True (equivalent to ending + the grammar with C{L{StringEnd()}}). + + Note: C{parseString} implicitly calls C{expandtabs()} on the input string, + in order to report proper column numbers in parse actions. + If the input string contains tabs and + the grammar uses parse actions that use the C{loc} argument to index into the + string being parsed, you can ensure you have a consistent view of the input + string by: + - calling C{parseWithTabs} on your grammar before calling C{parseString} + (see L{I{parseWithTabs}<parseWithTabs>}) + - define your parse action using the full C{(s,loc,toks)} signature, and + reference the input string using the parse action's C{s} argument + - explictly expand the tabs in your input string before calling + C{parseString} + + Example:: + Word('a').parseString('aaaaabaaa') # -> ['aaaaa'] + Word('a').parseString('aaaaabaaa', parseAll=True) # -> Exception: Expected end of text + """ + ParserElement.resetCache() + if not self.streamlined: + self.streamline() + #~ self.saveAsList = True + for e in self.ignoreExprs: + e.streamline() + if not self.keepTabs: + instring = instring.expandtabs() + try: + loc, tokens = self._parse( instring, 0 ) + if parseAll: + loc = self.preParse( instring, loc ) + se = Empty() + StringEnd() + se._parse( instring, loc ) + except ParseBaseException as exc: + if ParserElement.verbose_stacktrace: + raise + else: + # catch and re-raise exception from here, clears out pyparsing internal stack trace + raise exc + else: + return tokens + + def scanString( self, instring, maxMatches=_MAX_INT, overlap=False ): + """ + Scan the input string for expression matches. Each match will return the + matching tokens, start location, and end location. May be called with optional + C{maxMatches} argument, to clip scanning after 'n' matches are found. If + C{overlap} is specified, then overlapping matches will be reported. + + Note that the start and end locations are reported relative to the string + being parsed. See L{I{parseString}<parseString>} for more information on parsing + strings with embedded tabs. + + Example:: + source = "sldjf123lsdjjkf345sldkjf879lkjsfd987" + print(source) + for tokens,start,end in Word(alphas).scanString(source): + print(' '*start + '^'*(end-start)) + print(' '*start + tokens[0]) + + prints:: + + sldjf123lsdjjkf345sldkjf879lkjsfd987 + ^^^^^ + sldjf + ^^^^^^^ + lsdjjkf + ^^^^^^ + sldkjf + ^^^^^^ + lkjsfd + """ + if not self.streamlined: + self.streamline() + for e in self.ignoreExprs: + e.streamline() + + if not self.keepTabs: + instring = _ustr(instring).expandtabs() + instrlen = len(instring) + loc = 0 + preparseFn = self.preParse + parseFn = self._parse + ParserElement.resetCache() + matches = 0 + try: + while loc <= instrlen and matches < maxMatches: + try: + preloc = preparseFn( instring, loc ) + nextLoc,tokens = parseFn( instring, preloc, callPreParse=False ) + except ParseException: + loc = preloc+1 + else: + if nextLoc > loc: + matches += 1 + yield tokens, preloc, nextLoc + if overlap: + nextloc = preparseFn( instring, loc ) + if nextloc > loc: + loc = nextLoc + else: + loc += 1 + else: + loc = nextLoc + else: + loc = preloc+1 + except ParseBaseException as exc: + if ParserElement.verbose_stacktrace: + raise + else: + # catch and re-raise exception from here, clears out pyparsing internal stack trace + raise exc + + def transformString( self, instring ): + """ + Extension to C{L{scanString}}, to modify matching text with modified tokens that may + be returned from a parse action. To use C{transformString}, define a grammar and + attach a parse action to it that modifies the returned token list. + Invoking C{transformString()} on a target string will then scan for matches, + and replace the matched text patterns according to the logic in the parse + action. C{transformString()} returns the resulting transformed string. + + Example:: + wd = Word(alphas) + wd.setParseAction(lambda toks: toks[0].title()) + + print(wd.transformString("now is the winter of our discontent made glorious summer by this sun of york.")) + Prints:: + Now Is The Winter Of Our Discontent Made Glorious Summer By This Sun Of York. + """ + out = [] + lastE = 0 + # force preservation of <TAB>s, to minimize unwanted transformation of string, and to + # keep string locs straight between transformString and scanString + self.keepTabs = True + try: + for t,s,e in self.scanString( instring ): + out.append( instring[lastE:s] ) + if t: + if isinstance(t,ParseResults): + out += t.asList() + elif isinstance(t,list): + out += t + else: + out.append(t) + lastE = e + out.append(instring[lastE:]) + out = [o for o in out if o] + return "".join(map(_ustr,_flatten(out))) + except ParseBaseException as exc: + if ParserElement.verbose_stacktrace: + raise + else: + # catch and re-raise exception from here, clears out pyparsing internal stack trace + raise exc + + def searchString( self, instring, maxMatches=_MAX_INT ): + """ + Another extension to C{L{scanString}}, simplifying the access to the tokens found + to match the given parse expression. May be called with optional + C{maxMatches} argument, to clip searching after 'n' matches are found. + + Example:: + # a capitalized word starts with an uppercase letter, followed by zero or more lowercase letters + cap_word = Word(alphas.upper(), alphas.lower()) + + print(cap_word.searchString("More than Iron, more than Lead, more than Gold I need Electricity")) + prints:: + ['More', 'Iron', 'Lead', 'Gold', 'I'] + """ + try: + return ParseResults([ t for t,s,e in self.scanString( instring, maxMatches ) ]) + except ParseBaseException as exc: + if ParserElement.verbose_stacktrace: + raise + else: + # catch and re-raise exception from here, clears out pyparsing internal stack trace + raise exc + + def split(self, instring, maxsplit=_MAX_INT, includeSeparators=False): + """ + Generator method to split a string using the given expression as a separator. + May be called with optional C{maxsplit} argument, to limit the number of splits; + and the optional C{includeSeparators} argument (default=C{False}), if the separating + matching text should be included in the split results. + + Example:: + punc = oneOf(list(".,;:/-!?")) + print(list(punc.split("This, this?, this sentence, is badly punctuated!"))) + prints:: + ['This', ' this', '', ' this sentence', ' is badly punctuated', ''] + """ + splits = 0 + last = 0 + for t,s,e in self.scanString(instring, maxMatches=maxsplit): + yield instring[last:s] + if includeSeparators: + yield t[0] + last = e + yield instring[last:] + + def __add__(self, other ): + """ + Implementation of + operator - returns C{L{And}}. Adding strings to a ParserElement + converts them to L{Literal}s by default. + + Example:: + greet = Word(alphas) + "," + Word(alphas) + "!" + hello = "Hello, World!" + print (hello, "->", greet.parseString(hello)) + Prints:: + Hello, World! -> ['Hello', ',', 'World', '!'] + """ + if isinstance( other, basestring ): + other = ParserElement._literalStringClass( other ) + if not isinstance( other, ParserElement ): + warnings.warn("Cannot combine element of type %s with ParserElement" % type(other), + SyntaxWarning, stacklevel=2) + return None + return And( [ self, other ] ) + + def __radd__(self, other ): + """ + Implementation of + operator when left operand is not a C{L{ParserElement}} + """ + if isinstance( other, basestring ): + other = ParserElement._literalStringClass( other ) + if not isinstance( other, ParserElement ): + warnings.warn("Cannot combine element of type %s with ParserElement" % type(other), + SyntaxWarning, stacklevel=2) + return None + return other + self + + def __sub__(self, other): + """ + Implementation of - operator, returns C{L{And}} with error stop + """ + if isinstance( other, basestring ): + other = ParserElement._literalStringClass( other ) + if not isinstance( other, ParserElement ): + warnings.warn("Cannot combine element of type %s with ParserElement" % type(other), + SyntaxWarning, stacklevel=2) + return None + return And( [ self, And._ErrorStop(), other ] ) + + def __rsub__(self, other ): + """ + Implementation of - operator when left operand is not a C{L{ParserElement}} + """ + if isinstance( other, basestring ): + other = ParserElement._literalStringClass( other ) + if not isinstance( other, ParserElement ): + warnings.warn("Cannot combine element of type %s with ParserElement" % type(other), + SyntaxWarning, stacklevel=2) + return None + return other - self + + def __mul__(self,other): + """ + Implementation of * operator, allows use of C{expr * 3} in place of + C{expr + expr + expr}. Expressions may also me multiplied by a 2-integer + tuple, similar to C{{min,max}} multipliers in regular expressions. Tuples + may also include C{None} as in: + - C{expr*(n,None)} or C{expr*(n,)} is equivalent + to C{expr*n + L{ZeroOrMore}(expr)} + (read as "at least n instances of C{expr}") + - C{expr*(None,n)} is equivalent to C{expr*(0,n)} + (read as "0 to n instances of C{expr}") + - C{expr*(None,None)} is equivalent to C{L{ZeroOrMore}(expr)} + - C{expr*(1,None)} is equivalent to C{L{OneOrMore}(expr)} + + Note that C{expr*(None,n)} does not raise an exception if + more than n exprs exist in the input stream; that is, + C{expr*(None,n)} does not enforce a maximum number of expr + occurrences. If this behavior is desired, then write + C{expr*(None,n) + ~expr} + """ + if isinstance(other,int): + minElements, optElements = other,0 + elif isinstance(other,tuple): + other = (other + (None, None))[:2] + if other[0] is None: + other = (0, other[1]) + if isinstance(other[0],int) and other[1] is None: + if other[0] == 0: + return ZeroOrMore(self) + if other[0] == 1: + return OneOrMore(self) + else: + return self*other[0] + ZeroOrMore(self) + elif isinstance(other[0],int) and isinstance(other[1],int): + minElements, optElements = other + optElements -= minElements + else: + raise TypeError("cannot multiply 'ParserElement' and ('%s','%s') objects", type(other[0]),type(other[1])) + else: + raise TypeError("cannot multiply 'ParserElement' and '%s' objects", type(other)) + + if minElements < 0: + raise ValueError("cannot multiply ParserElement by negative value") + if optElements < 0: + raise ValueError("second tuple value must be greater or equal to first tuple value") + if minElements == optElements == 0: + raise ValueError("cannot multiply ParserElement by 0 or (0,0)") + + if (optElements): + def makeOptionalList(n): + if n>1: + return Optional(self + makeOptionalList(n-1)) + else: + return Optional(self) + if minElements: + if minElements == 1: + ret = self + makeOptionalList(optElements) + else: + ret = And([self]*minElements) + makeOptionalList(optElements) + else: + ret = makeOptionalList(optElements) + else: + if minElements == 1: + ret = self + else: + ret = And([self]*minElements) + return ret + + def __rmul__(self, other): + return self.__mul__(other) + + def __or__(self, other ): + """ + Implementation of | operator - returns C{L{MatchFirst}} + """ + if isinstance( other, basestring ): + other = ParserElement._literalStringClass( other ) + if not isinstance( other, ParserElement ): + warnings.warn("Cannot combine element of type %s with ParserElement" % type(other), + SyntaxWarning, stacklevel=2) + return None + return MatchFirst( [ self, other ] ) + + def __ror__(self, other ): + """ + Implementation of | operator when left operand is not a C{L{ParserElement}} + """ + if isinstance( other, basestring ): + other = ParserElement._literalStringClass( other ) + if not isinstance( other, ParserElement ): + warnings.warn("Cannot combine element of type %s with ParserElement" % type(other), + SyntaxWarning, stacklevel=2) + return None + return other | self + + def __xor__(self, other ): + """ + Implementation of ^ operator - returns C{L{Or}} + """ + if isinstance( other, basestring ): + other = ParserElement._literalStringClass( other ) + if not isinstance( other, ParserElement ): + warnings.warn("Cannot combine element of type %s with ParserElement" % type(other), + SyntaxWarning, stacklevel=2) + return None + return Or( [ self, other ] ) + + def __rxor__(self, other ): + """ + Implementation of ^ operator when left operand is not a C{L{ParserElement}} + """ + if isinstance( other, basestring ): + other = ParserElement._literalStringClass( other ) + if not isinstance( other, ParserElement ): + warnings.warn("Cannot combine element of type %s with ParserElement" % type(other), + SyntaxWarning, stacklevel=2) + return None + return other ^ self + + def __and__(self, other ): + """ + Implementation of & operator - returns C{L{Each}} + """ + if isinstance( other, basestring ): + other = ParserElement._literalStringClass( other ) + if not isinstance( other, ParserElement ): + warnings.warn("Cannot combine element of type %s with ParserElement" % type(other), + SyntaxWarning, stacklevel=2) + return None + return Each( [ self, other ] ) + + def __rand__(self, other ): + """ + Implementation of & operator when left operand is not a C{L{ParserElement}} + """ + if isinstance( other, basestring ): + other = ParserElement._literalStringClass( other ) + if not isinstance( other, ParserElement ): + warnings.warn("Cannot combine element of type %s with ParserElement" % type(other), + SyntaxWarning, stacklevel=2) + return None + return other & self + + def __invert__( self ): + """ + Implementation of ~ operator - returns C{L{NotAny}} + """ + return NotAny( self ) + + def __call__(self, name=None): + """ + Shortcut for C{L{setResultsName}}, with C{listAllMatches=False}. + + If C{name} is given with a trailing C{'*'} character, then C{listAllMatches} will be + passed as C{True}. + + If C{name} is omitted, same as calling C{L{copy}}. + + Example:: + # these are equivalent + userdata = Word(alphas).setResultsName("name") + Word(nums+"-").setResultsName("socsecno") + userdata = Word(alphas)("name") + Word(nums+"-")("socsecno") + """ + if name is not None: + return self.setResultsName(name) + else: + return self.copy() + + def suppress( self ): + """ + Suppresses the output of this C{ParserElement}; useful to keep punctuation from + cluttering up returned output. + """ + return Suppress( self ) + + def leaveWhitespace( self ): + """ + Disables the skipping of whitespace before matching the characters in the + C{ParserElement}'s defined pattern. This is normally only used internally by + the pyparsing module, but may be needed in some whitespace-sensitive grammars. + """ + self.skipWhitespace = False + return self + + def setWhitespaceChars( self, chars ): + """ + Overrides the default whitespace chars + """ + self.skipWhitespace = True + self.whiteChars = chars + self.copyDefaultWhiteChars = False + return self + + def parseWithTabs( self ): + """ + Overrides default behavior to expand C{<TAB>}s to spaces before parsing the input string. + Must be called before C{parseString} when the input grammar contains elements that + match C{<TAB>} characters. + """ + self.keepTabs = True + return self + + def ignore( self, other ): + """ + Define expression to be ignored (e.g., comments) while doing pattern + matching; may be called repeatedly, to define multiple comment or other + ignorable patterns. + + Example:: + patt = OneOrMore(Word(alphas)) + patt.parseString('ablaj /* comment */ lskjd') # -> ['ablaj'] + + patt.ignore(cStyleComment) + patt.parseString('ablaj /* comment */ lskjd') # -> ['ablaj', 'lskjd'] + """ + if isinstance(other, basestring): + other = Suppress(other) + + if isinstance( other, Suppress ): + if other not in self.ignoreExprs: + self.ignoreExprs.append(other) + else: + self.ignoreExprs.append( Suppress( other.copy() ) ) + return self + + def setDebugActions( self, startAction, successAction, exceptionAction ): + """ + Enable display of debugging messages while doing pattern matching. + """ + self.debugActions = (startAction or _defaultStartDebugAction, + successAction or _defaultSuccessDebugAction, + exceptionAction or _defaultExceptionDebugAction) + self.debug = True + return self + + def setDebug( self, flag=True ): + """ + Enable display of debugging messages while doing pattern matching. + Set C{flag} to True to enable, False to disable. + + Example:: + wd = Word(alphas).setName("alphaword") + integer = Word(nums).setName("numword") + term = wd | integer + + # turn on debugging for wd + wd.setDebug() + + OneOrMore(term).parseString("abc 123 xyz 890") + + prints:: + Match alphaword at loc 0(1,1) + Matched alphaword -> ['abc'] + Match alphaword at loc 3(1,4) + Exception raised:Expected alphaword (at char 4), (line:1, col:5) + Match alphaword at loc 7(1,8) + Matched alphaword -> ['xyz'] + Match alphaword at loc 11(1,12) + Exception raised:Expected alphaword (at char 12), (line:1, col:13) + Match alphaword at loc 15(1,16) + Exception raised:Expected alphaword (at char 15), (line:1, col:16) + + The output shown is that produced by the default debug actions - custom debug actions can be + specified using L{setDebugActions}. Prior to attempting + to match the C{wd} expression, the debugging message C{"Match <exprname> at loc <n>(<line>,<col>)"} + is shown. Then if the parse succeeds, a C{"Matched"} message is shown, or an C{"Exception raised"} + message is shown. Also note the use of L{setName} to assign a human-readable name to the expression, + which makes debugging and exception messages easier to understand - for instance, the default + name created for the C{Word} expression without calling C{setName} is C{"W:(ABCD...)"}. + """ + if flag: + self.setDebugActions( _defaultStartDebugAction, _defaultSuccessDebugAction, _defaultExceptionDebugAction ) + else: + self.debug = False + return self + + def __str__( self ): + return self.name + + def __repr__( self ): + return _ustr(self) + + def streamline( self ): + self.streamlined = True + self.strRepr = None + return self + + def checkRecursion( self, parseElementList ): + pass + + def validate( self, validateTrace=[] ): + """ + Check defined expressions for valid structure, check for infinite recursive definitions. + """ + self.checkRecursion( [] ) + + def parseFile( self, file_or_filename, parseAll=False ): + """ + Execute the parse expression on the given file or filename. + If a filename is specified (instead of a file object), + the entire file is opened, read, and closed before parsing. + """ + try: + file_contents = file_or_filename.read() + except AttributeError: + with open(file_or_filename, "r") as f: + file_contents = f.read() + try: + return self.parseString(file_contents, parseAll) + except ParseBaseException as exc: + if ParserElement.verbose_stacktrace: + raise + else: + # catch and re-raise exception from here, clears out pyparsing internal stack trace + raise exc + + def __eq__(self,other): + if isinstance(other, ParserElement): + return self is other or vars(self) == vars(other) + elif isinstance(other, basestring): + return self.matches(other) + else: + return super(ParserElement,self)==other + + def __ne__(self,other): + return not (self == other) + + def __hash__(self): + return hash(id(self)) + + def __req__(self,other): + return self == other + + def __rne__(self,other): + return not (self == other) + + def matches(self, testString, parseAll=True): + """ + Method for quick testing of a parser against a test string. Good for simple + inline microtests of sub expressions while building up larger parser. + + Parameters: + - testString - to test against this expression for a match + - parseAll - (default=C{True}) - flag to pass to C{L{parseString}} when running tests + + Example:: + expr = Word(nums) + assert expr.matches("100") + """ + try: + self.parseString(_ustr(testString), parseAll=parseAll) + return True + except ParseBaseException: + return False + + def runTests(self, tests, parseAll=True, comment='#', fullDump=True, printResults=True, failureTests=False): + """ + Execute the parse expression on a series of test strings, showing each + test, the parsed results or where the parse failed. Quick and easy way to + run a parse expression against a list of sample strings. + + Parameters: + - tests - a list of separate test strings, or a multiline string of test strings + - parseAll - (default=C{True}) - flag to pass to C{L{parseString}} when running tests + - comment - (default=C{'#'}) - expression for indicating embedded comments in the test + string; pass None to disable comment filtering + - fullDump - (default=C{True}) - dump results as list followed by results names in nested outline; + if False, only dump nested list + - printResults - (default=C{True}) prints test output to stdout + - failureTests - (default=C{False}) indicates if these tests are expected to fail parsing + + Returns: a (success, results) tuple, where success indicates that all tests succeeded + (or failed if C{failureTests} is True), and the results contain a list of lines of each + test's output + + Example:: + number_expr = pyparsing_common.number.copy() + + result = number_expr.runTests(''' + # unsigned integer + 100 + # negative integer + -100 + # float with scientific notation + 6.02e23 + # integer with scientific notation + 1e-12 + ''') + print("Success" if result[0] else "Failed!") + + result = number_expr.runTests(''' + # stray character + 100Z + # missing leading digit before '.' + -.100 + # too many '.' + 3.14.159 + ''', failureTests=True) + print("Success" if result[0] else "Failed!") + prints:: + # unsigned integer + 100 + [100] + + # negative integer + -100 + [-100] + + # float with scientific notation + 6.02e23 + [6.02e+23] + + # integer with scientific notation + 1e-12 + [1e-12] + + Success + + # stray character + 100Z + ^ + FAIL: Expected end of text (at char 3), (line:1, col:4) + + # missing leading digit before '.' + -.100 + ^ + FAIL: Expected {real number with scientific notation | real number | signed integer} (at char 0), (line:1, col:1) + + # too many '.' + 3.14.159 + ^ + FAIL: Expected end of text (at char 4), (line:1, col:5) + + Success + + Each test string must be on a single line. If you want to test a string that spans multiple + lines, create a test like this:: + + expr.runTest(r"this is a test\\n of strings that spans \\n 3 lines") + + (Note that this is a raw string literal, you must include the leading 'r'.) + """ + if isinstance(tests, basestring): + tests = list(map(str.strip, tests.rstrip().splitlines())) + if isinstance(comment, basestring): + comment = Literal(comment) + allResults = [] + comments = [] + success = True + for t in tests: + if comment is not None and comment.matches(t, False) or comments and not t: + comments.append(t) + continue + if not t: + continue + out = ['\n'.join(comments), t] + comments = [] + try: + t = t.replace(r'\n','\n') + result = self.parseString(t, parseAll=parseAll) + out.append(result.dump(full=fullDump)) + success = success and not failureTests + except ParseBaseException as pe: + fatal = "(FATAL)" if isinstance(pe, ParseFatalException) else "" + if '\n' in t: + out.append(line(pe.loc, t)) + out.append(' '*(col(pe.loc,t)-1) + '^' + fatal) + else: + out.append(' '*pe.loc + '^' + fatal) + out.append("FAIL: " + str(pe)) + success = success and failureTests + result = pe + except Exception as exc: + out.append("FAIL-EXCEPTION: " + str(exc)) + success = success and failureTests + result = exc + + if printResults: + if fullDump: + out.append('') + print('\n'.join(out)) + + allResults.append((t, result)) + + return success, allResults + + +class Token(ParserElement): + """ + Abstract C{ParserElement} subclass, for defining atomic matching patterns. + """ + def __init__( self ): + super(Token,self).__init__( savelist=False ) + + +class Empty(Token): + """ + An empty token, will always match. + """ + def __init__( self ): + super(Empty,self).__init__() + self.name = "Empty" + self.mayReturnEmpty = True + self.mayIndexError = False + + +class NoMatch(Token): + """ + A token that will never match. + """ + def __init__( self ): + super(NoMatch,self).__init__() + self.name = "NoMatch" + self.mayReturnEmpty = True + self.mayIndexError = False + self.errmsg = "Unmatchable token" + + def parseImpl( self, instring, loc, doActions=True ): + raise ParseException(instring, loc, self.errmsg, self) + + +class Literal(Token): + """ + Token to exactly match a specified string. + + Example:: + Literal('blah').parseString('blah') # -> ['blah'] + Literal('blah').parseString('blahfooblah') # -> ['blah'] + Literal('blah').parseString('bla') # -> Exception: Expected "blah" + + For case-insensitive matching, use L{CaselessLiteral}. + + For keyword matching (force word break before and after the matched string), + use L{Keyword} or L{CaselessKeyword}. + """ + def __init__( self, matchString ): + super(Literal,self).__init__() + self.match = matchString + self.matchLen = len(matchString) + try: + self.firstMatchChar = matchString[0] + except IndexError: + warnings.warn("null string passed to Literal; use Empty() instead", + SyntaxWarning, stacklevel=2) + self.__class__ = Empty + self.name = '"%s"' % _ustr(self.match) + self.errmsg = "Expected " + self.name + self.mayReturnEmpty = False + self.mayIndexError = False + + # Performance tuning: this routine gets called a *lot* + # if this is a single character match string and the first character matches, + # short-circuit as quickly as possible, and avoid calling startswith + #~ @profile + def parseImpl( self, instring, loc, doActions=True ): + if (instring[loc] == self.firstMatchChar and + (self.matchLen==1 or instring.startswith(self.match,loc)) ): + return loc+self.matchLen, self.match + raise ParseException(instring, loc, self.errmsg, self) +_L = Literal +ParserElement._literalStringClass = Literal + +class Keyword(Token): + """ + Token to exactly match a specified string as a keyword, that is, it must be + immediately followed by a non-keyword character. Compare with C{L{Literal}}: + - C{Literal("if")} will match the leading C{'if'} in C{'ifAndOnlyIf'}. + - C{Keyword("if")} will not; it will only match the leading C{'if'} in C{'if x=1'}, or C{'if(y==2)'} + Accepts two optional constructor arguments in addition to the keyword string: + - C{identChars} is a string of characters that would be valid identifier characters, + defaulting to all alphanumerics + "_" and "$" + - C{caseless} allows case-insensitive matching, default is C{False}. + + Example:: + Keyword("start").parseString("start") # -> ['start'] + Keyword("start").parseString("starting") # -> Exception + + For case-insensitive matching, use L{CaselessKeyword}. + """ + DEFAULT_KEYWORD_CHARS = alphanums+"_$" + + def __init__( self, matchString, identChars=None, caseless=False ): + super(Keyword,self).__init__() + if identChars is None: + identChars = Keyword.DEFAULT_KEYWORD_CHARS + self.match = matchString + self.matchLen = len(matchString) + try: + self.firstMatchChar = matchString[0] + except IndexError: + warnings.warn("null string passed to Keyword; use Empty() instead", + SyntaxWarning, stacklevel=2) + self.name = '"%s"' % self.match + self.errmsg = "Expected " + self.name + self.mayReturnEmpty = False + self.mayIndexError = False + self.caseless = caseless + if caseless: + self.caselessmatch = matchString.upper() + identChars = identChars.upper() + self.identChars = set(identChars) + + def parseImpl( self, instring, loc, doActions=True ): + if self.caseless: + if ( (instring[ loc:loc+self.matchLen ].upper() == self.caselessmatch) and + (loc >= len(instring)-self.matchLen or instring[loc+self.matchLen].upper() not in self.identChars) and + (loc == 0 or instring[loc-1].upper() not in self.identChars) ): + return loc+self.matchLen, self.match + else: + if (instring[loc] == self.firstMatchChar and + (self.matchLen==1 or instring.startswith(self.match,loc)) and + (loc >= len(instring)-self.matchLen or instring[loc+self.matchLen] not in self.identChars) and + (loc == 0 or instring[loc-1] not in self.identChars) ): + return loc+self.matchLen, self.match + raise ParseException(instring, loc, self.errmsg, self) + + def copy(self): + c = super(Keyword,self).copy() + c.identChars = Keyword.DEFAULT_KEYWORD_CHARS + return c + + @staticmethod + def setDefaultKeywordChars( chars ): + """Overrides the default Keyword chars + """ + Keyword.DEFAULT_KEYWORD_CHARS = chars + +class CaselessLiteral(Literal): + """ + Token to match a specified string, ignoring case of letters. + Note: the matched results will always be in the case of the given + match string, NOT the case of the input text. + + Example:: + OneOrMore(CaselessLiteral("CMD")).parseString("cmd CMD Cmd10") # -> ['CMD', 'CMD', 'CMD'] + + (Contrast with example for L{CaselessKeyword}.) + """ + def __init__( self, matchString ): + super(CaselessLiteral,self).__init__( matchString.upper() ) + # Preserve the defining literal. + self.returnString = matchString + self.name = "'%s'" % self.returnString + self.errmsg = "Expected " + self.name + + def parseImpl( self, instring, loc, doActions=True ): + if instring[ loc:loc+self.matchLen ].upper() == self.match: + return loc+self.matchLen, self.returnString + raise ParseException(instring, loc, self.errmsg, self) + +class CaselessKeyword(Keyword): + """ + Caseless version of L{Keyword}. + + Example:: + OneOrMore(CaselessKeyword("CMD")).parseString("cmd CMD Cmd10") # -> ['CMD', 'CMD'] + + (Contrast with example for L{CaselessLiteral}.) + """ + def __init__( self, matchString, identChars=None ): + super(CaselessKeyword,self).__init__( matchString, identChars, caseless=True ) + + def parseImpl( self, instring, loc, doActions=True ): + if ( (instring[ loc:loc+self.matchLen ].upper() == self.caselessmatch) and + (loc >= len(instring)-self.matchLen or instring[loc+self.matchLen].upper() not in self.identChars) ): + return loc+self.matchLen, self.match + raise ParseException(instring, loc, self.errmsg, self) + +class CloseMatch(Token): + """ + A variation on L{Literal} which matches "close" matches, that is, + strings with at most 'n' mismatching characters. C{CloseMatch} takes parameters: + - C{match_string} - string to be matched + - C{maxMismatches} - (C{default=1}) maximum number of mismatches allowed to count as a match + + The results from a successful parse will contain the matched text from the input string and the following named results: + - C{mismatches} - a list of the positions within the match_string where mismatches were found + - C{original} - the original match_string used to compare against the input string + + If C{mismatches} is an empty list, then the match was an exact match. + + Example:: + patt = CloseMatch("ATCATCGAATGGA") + patt.parseString("ATCATCGAAXGGA") # -> (['ATCATCGAAXGGA'], {'mismatches': [[9]], 'original': ['ATCATCGAATGGA']}) + patt.parseString("ATCAXCGAAXGGA") # -> Exception: Expected 'ATCATCGAATGGA' (with up to 1 mismatches) (at char 0), (line:1, col:1) + + # exact match + patt.parseString("ATCATCGAATGGA") # -> (['ATCATCGAATGGA'], {'mismatches': [[]], 'original': ['ATCATCGAATGGA']}) + + # close match allowing up to 2 mismatches + patt = CloseMatch("ATCATCGAATGGA", maxMismatches=2) + patt.parseString("ATCAXCGAAXGGA") # -> (['ATCAXCGAAXGGA'], {'mismatches': [[4, 9]], 'original': ['ATCATCGAATGGA']}) + """ + def __init__(self, match_string, maxMismatches=1): + super(CloseMatch,self).__init__() + self.name = match_string + self.match_string = match_string + self.maxMismatches = maxMismatches + self.errmsg = "Expected %r (with up to %d mismatches)" % (self.match_string, self.maxMismatches) + self.mayIndexError = False + self.mayReturnEmpty = False + + def parseImpl( self, instring, loc, doActions=True ): + start = loc + instrlen = len(instring) + maxloc = start + len(self.match_string) + + if maxloc <= instrlen: + match_string = self.match_string + match_stringloc = 0 + mismatches = [] + maxMismatches = self.maxMismatches + + for match_stringloc,s_m in enumerate(zip(instring[loc:maxloc], self.match_string)): + src,mat = s_m + if src != mat: + mismatches.append(match_stringloc) + if len(mismatches) > maxMismatches: + break + else: + loc = match_stringloc + 1 + results = ParseResults([instring[start:loc]]) + results['original'] = self.match_string + results['mismatches'] = mismatches + return loc, results + + raise ParseException(instring, loc, self.errmsg, self) + + +class Word(Token): + """ + Token for matching words composed of allowed character sets. + Defined with string containing all allowed initial characters, + an optional string containing allowed body characters (if omitted, + defaults to the initial character set), and an optional minimum, + maximum, and/or exact length. The default value for C{min} is 1 (a + minimum value < 1 is not valid); the default values for C{max} and C{exact} + are 0, meaning no maximum or exact length restriction. An optional + C{excludeChars} parameter can list characters that might be found in + the input C{bodyChars} string; useful to define a word of all printables + except for one or two characters, for instance. + + L{srange} is useful for defining custom character set strings for defining + C{Word} expressions, using range notation from regular expression character sets. + + A common mistake is to use C{Word} to match a specific literal string, as in + C{Word("Address")}. Remember that C{Word} uses the string argument to define + I{sets} of matchable characters. This expression would match "Add", "AAA", + "dAred", or any other word made up of the characters 'A', 'd', 'r', 'e', and 's'. + To match an exact literal string, use L{Literal} or L{Keyword}. + + pyparsing includes helper strings for building Words: + - L{alphas} + - L{nums} + - L{alphanums} + - L{hexnums} + - L{alphas8bit} (alphabetic characters in ASCII range 128-255 - accented, tilded, umlauted, etc.) + - L{punc8bit} (non-alphabetic characters in ASCII range 128-255 - currency, symbols, superscripts, diacriticals, etc.) + - L{printables} (any non-whitespace character) + + Example:: + # a word composed of digits + integer = Word(nums) # equivalent to Word("0123456789") or Word(srange("0-9")) + + # a word with a leading capital, and zero or more lowercase + capital_word = Word(alphas.upper(), alphas.lower()) + + # hostnames are alphanumeric, with leading alpha, and '-' + hostname = Word(alphas, alphanums+'-') + + # roman numeral (not a strict parser, accepts invalid mix of characters) + roman = Word("IVXLCDM") + + # any string of non-whitespace characters, except for ',' + csv_value = Word(printables, excludeChars=",") + """ + def __init__( self, initChars, bodyChars=None, min=1, max=0, exact=0, asKeyword=False, excludeChars=None ): + super(Word,self).__init__() + if excludeChars: + initChars = ''.join(c for c in initChars if c not in excludeChars) + if bodyChars: + bodyChars = ''.join(c for c in bodyChars if c not in excludeChars) + self.initCharsOrig = initChars + self.initChars = set(initChars) + if bodyChars : + self.bodyCharsOrig = bodyChars + self.bodyChars = set(bodyChars) + else: + self.bodyCharsOrig = initChars + self.bodyChars = set(initChars) + + self.maxSpecified = max > 0 + + if min < 1: + raise ValueError("cannot specify a minimum length < 1; use Optional(Word()) if zero-length word is permitted") + + self.minLen = min + + if max > 0: + self.maxLen = max + else: + self.maxLen = _MAX_INT + + if exact > 0: + self.maxLen = exact + self.minLen = exact + + self.name = _ustr(self) + self.errmsg = "Expected " + self.name + self.mayIndexError = False + self.asKeyword = asKeyword + + if ' ' not in self.initCharsOrig+self.bodyCharsOrig and (min==1 and max==0 and exact==0): + if self.bodyCharsOrig == self.initCharsOrig: + self.reString = "[%s]+" % _escapeRegexRangeChars(self.initCharsOrig) + elif len(self.initCharsOrig) == 1: + self.reString = "%s[%s]*" % \ + (re.escape(self.initCharsOrig), + _escapeRegexRangeChars(self.bodyCharsOrig),) + else: + self.reString = "[%s][%s]*" % \ + (_escapeRegexRangeChars(self.initCharsOrig), + _escapeRegexRangeChars(self.bodyCharsOrig),) + if self.asKeyword: + self.reString = r"\b"+self.reString+r"\b" + try: + self.re = re.compile( self.reString ) + except Exception: + self.re = None + + def parseImpl( self, instring, loc, doActions=True ): + if self.re: + result = self.re.match(instring,loc) + if not result: + raise ParseException(instring, loc, self.errmsg, self) + + loc = result.end() + return loc, result.group() + + if not(instring[ loc ] in self.initChars): + raise ParseException(instring, loc, self.errmsg, self) + + start = loc + loc += 1 + instrlen = len(instring) + bodychars = self.bodyChars + maxloc = start + self.maxLen + maxloc = min( maxloc, instrlen ) + while loc < maxloc and instring[loc] in bodychars: + loc += 1 + + throwException = False + if loc - start < self.minLen: + throwException = True + if self.maxSpecified and loc < instrlen and instring[loc] in bodychars: + throwException = True + if self.asKeyword: + if (start>0 and instring[start-1] in bodychars) or (loc<instrlen and instring[loc] in bodychars): + throwException = True + + if throwException: + raise ParseException(instring, loc, self.errmsg, self) + + return loc, instring[start:loc] + + def __str__( self ): + try: + return super(Word,self).__str__() + except Exception: + pass + + + if self.strRepr is None: + + def charsAsStr(s): + if len(s)>4: + return s[:4]+"..." + else: + return s + + if ( self.initCharsOrig != self.bodyCharsOrig ): + self.strRepr = "W:(%s,%s)" % ( charsAsStr(self.initCharsOrig), charsAsStr(self.bodyCharsOrig) ) + else: + self.strRepr = "W:(%s)" % charsAsStr(self.initCharsOrig) + + return self.strRepr + + +class Regex(Token): + """ + Token for matching strings that match a given regular expression. + Defined with string specifying the regular expression in a form recognized by the inbuilt Python re module. + If the given regex contains named groups (defined using C{(?P<name>...)}), these will be preserved as + named parse results. + + Example:: + realnum = Regex(r"[+-]?\d+\.\d*") + date = Regex(r'(?P<year>\d{4})-(?P<month>\d\d?)-(?P<day>\d\d?)') + # ref: http://stackoverflow.com/questions/267399/how-do-you-match-only-valid-roman-numerals-with-a-regular-expression + roman = Regex(r"M{0,4}(CM|CD|D?C{0,3})(XC|XL|L?X{0,3})(IX|IV|V?I{0,3})") + """ + compiledREtype = type(re.compile("[A-Z]")) + def __init__( self, pattern, flags=0): + """The parameters C{pattern} and C{flags} are passed to the C{re.compile()} function as-is. See the Python C{re} module for an explanation of the acceptable patterns and flags.""" + super(Regex,self).__init__() + + if isinstance(pattern, basestring): + if not pattern: + warnings.warn("null string passed to Regex; use Empty() instead", + SyntaxWarning, stacklevel=2) + + self.pattern = pattern + self.flags = flags + + try: + self.re = re.compile(self.pattern, self.flags) + self.reString = self.pattern + except sre_constants.error: + warnings.warn("invalid pattern (%s) passed to Regex" % pattern, + SyntaxWarning, stacklevel=2) + raise + + elif isinstance(pattern, Regex.compiledREtype): + self.re = pattern + self.pattern = \ + self.reString = str(pattern) + self.flags = flags + + else: + raise ValueError("Regex may only be constructed with a string or a compiled RE object") + + self.name = _ustr(self) + self.errmsg = "Expected " + self.name + self.mayIndexError = False + self.mayReturnEmpty = True + + def parseImpl( self, instring, loc, doActions=True ): + result = self.re.match(instring,loc) + if not result: + raise ParseException(instring, loc, self.errmsg, self) + + loc = result.end() + d = result.groupdict() + ret = ParseResults(result.group()) + if d: + for k in d: + ret[k] = d[k] + return loc,ret + + def __str__( self ): + try: + return super(Regex,self).__str__() + except Exception: + pass + + if self.strRepr is None: + self.strRepr = "Re:(%s)" % repr(self.pattern) + + return self.strRepr + + +class QuotedString(Token): + r""" + Token for matching strings that are delimited by quoting characters. + + Defined with the following parameters: + - quoteChar - string of one or more characters defining the quote delimiting string + - escChar - character to escape quotes, typically backslash (default=C{None}) + - escQuote - special quote sequence to escape an embedded quote string (such as SQL's "" to escape an embedded ") (default=C{None}) + - multiline - boolean indicating whether quotes can span multiple lines (default=C{False}) + - unquoteResults - boolean indicating whether the matched text should be unquoted (default=C{True}) + - endQuoteChar - string of one or more characters defining the end of the quote delimited string (default=C{None} => same as quoteChar) + - convertWhitespaceEscapes - convert escaped whitespace (C{'\t'}, C{'\n'}, etc.) to actual whitespace (default=C{True}) + + Example:: + qs = QuotedString('"') + print(qs.searchString('lsjdf "This is the quote" sldjf')) + complex_qs = QuotedString('{{', endQuoteChar='}}') + print(complex_qs.searchString('lsjdf {{This is the "quote"}} sldjf')) + sql_qs = QuotedString('"', escQuote='""') + print(sql_qs.searchString('lsjdf "This is the quote with ""embedded"" quotes" sldjf')) + prints:: + [['This is the quote']] + [['This is the "quote"']] + [['This is the quote with "embedded" quotes']] + """ + def __init__( self, quoteChar, escChar=None, escQuote=None, multiline=False, unquoteResults=True, endQuoteChar=None, convertWhitespaceEscapes=True): + super(QuotedString,self).__init__() + + # remove white space from quote chars - wont work anyway + quoteChar = quoteChar.strip() + if not quoteChar: + warnings.warn("quoteChar cannot be the empty string",SyntaxWarning,stacklevel=2) + raise SyntaxError() + + if endQuoteChar is None: + endQuoteChar = quoteChar + else: + endQuoteChar = endQuoteChar.strip() + if not endQuoteChar: + warnings.warn("endQuoteChar cannot be the empty string",SyntaxWarning,stacklevel=2) + raise SyntaxError() + + self.quoteChar = quoteChar + self.quoteCharLen = len(quoteChar) + self.firstQuoteChar = quoteChar[0] + self.endQuoteChar = endQuoteChar + self.endQuoteCharLen = len(endQuoteChar) + self.escChar = escChar + self.escQuote = escQuote + self.unquoteResults = unquoteResults + self.convertWhitespaceEscapes = convertWhitespaceEscapes + + if multiline: + self.flags = re.MULTILINE | re.DOTALL + self.pattern = r'%s(?:[^%s%s]' % \ + ( re.escape(self.quoteChar), + _escapeRegexRangeChars(self.endQuoteChar[0]), + (escChar is not None and _escapeRegexRangeChars(escChar) or '') ) + else: + self.flags = 0 + self.pattern = r'%s(?:[^%s\n\r%s]' % \ + ( re.escape(self.quoteChar), + _escapeRegexRangeChars(self.endQuoteChar[0]), + (escChar is not None and _escapeRegexRangeChars(escChar) or '') ) + if len(self.endQuoteChar) > 1: + self.pattern += ( + '|(?:' + ')|(?:'.join("%s[^%s]" % (re.escape(self.endQuoteChar[:i]), + _escapeRegexRangeChars(self.endQuoteChar[i])) + for i in range(len(self.endQuoteChar)-1,0,-1)) + ')' + ) + if escQuote: + self.pattern += (r'|(?:%s)' % re.escape(escQuote)) + if escChar: + self.pattern += (r'|(?:%s.)' % re.escape(escChar)) + self.escCharReplacePattern = re.escape(self.escChar)+"(.)" + self.pattern += (r')*%s' % re.escape(self.endQuoteChar)) + + try: + self.re = re.compile(self.pattern, self.flags) + self.reString = self.pattern + except sre_constants.error: + warnings.warn("invalid pattern (%s) passed to Regex" % self.pattern, + SyntaxWarning, stacklevel=2) + raise + + self.name = _ustr(self) + self.errmsg = "Expected " + self.name + self.mayIndexError = False + self.mayReturnEmpty = True + + def parseImpl( self, instring, loc, doActions=True ): + result = instring[loc] == self.firstQuoteChar and self.re.match(instring,loc) or None + if not result: + raise ParseException(instring, loc, self.errmsg, self) + + loc = result.end() + ret = result.group() + + if self.unquoteResults: + + # strip off quotes + ret = ret[self.quoteCharLen:-self.endQuoteCharLen] + + if isinstance(ret,basestring): + # replace escaped whitespace + if '\\' in ret and self.convertWhitespaceEscapes: + ws_map = { + r'\t' : '\t', + r'\n' : '\n', + r'\f' : '\f', + r'\r' : '\r', + } + for wslit,wschar in ws_map.items(): + ret = ret.replace(wslit, wschar) + + # replace escaped characters + if self.escChar: + ret = re.sub(self.escCharReplacePattern,"\g<1>",ret) + + # replace escaped quotes + if self.escQuote: + ret = ret.replace(self.escQuote, self.endQuoteChar) + + return loc, ret + + def __str__( self ): + try: + return super(QuotedString,self).__str__() + except Exception: + pass + + if self.strRepr is None: + self.strRepr = "quoted string, starting with %s ending with %s" % (self.quoteChar, self.endQuoteChar) + + return self.strRepr + + +class CharsNotIn(Token): + """ + Token for matching words composed of characters I{not} in a given set (will + include whitespace in matched characters if not listed in the provided exclusion set - see example). + Defined with string containing all disallowed characters, and an optional + minimum, maximum, and/or exact length. The default value for C{min} is 1 (a + minimum value < 1 is not valid); the default values for C{max} and C{exact} + are 0, meaning no maximum or exact length restriction. + + Example:: + # define a comma-separated-value as anything that is not a ',' + csv_value = CharsNotIn(',') + print(delimitedList(csv_value).parseString("dkls,lsdkjf,s12 34,@!#,213")) + prints:: + ['dkls', 'lsdkjf', 's12 34', '@!#', '213'] + """ + def __init__( self, notChars, min=1, max=0, exact=0 ): + super(CharsNotIn,self).__init__() + self.skipWhitespace = False + self.notChars = notChars + + if min < 1: + raise ValueError("cannot specify a minimum length < 1; use Optional(CharsNotIn()) if zero-length char group is permitted") + + self.minLen = min + + if max > 0: + self.maxLen = max + else: + self.maxLen = _MAX_INT + + if exact > 0: + self.maxLen = exact + self.minLen = exact + + self.name = _ustr(self) + self.errmsg = "Expected " + self.name + self.mayReturnEmpty = ( self.minLen == 0 ) + self.mayIndexError = False + + def parseImpl( self, instring, loc, doActions=True ): + if instring[loc] in self.notChars: + raise ParseException(instring, loc, self.errmsg, self) + + start = loc + loc += 1 + notchars = self.notChars + maxlen = min( start+self.maxLen, len(instring) ) + while loc < maxlen and \ + (instring[loc] not in notchars): + loc += 1 + + if loc - start < self.minLen: + raise ParseException(instring, loc, self.errmsg, self) + + return loc, instring[start:loc] + + def __str__( self ): + try: + return super(CharsNotIn, self).__str__() + except Exception: + pass + + if self.strRepr is None: + if len(self.notChars) > 4: + self.strRepr = "!W:(%s...)" % self.notChars[:4] + else: + self.strRepr = "!W:(%s)" % self.notChars + + return self.strRepr + +class White(Token): + """ + Special matching class for matching whitespace. Normally, whitespace is ignored + by pyparsing grammars. This class is included when some whitespace structures + are significant. Define with a string containing the whitespace characters to be + matched; default is C{" \\t\\r\\n"}. Also takes optional C{min}, C{max}, and C{exact} arguments, + as defined for the C{L{Word}} class. + """ + whiteStrs = { + " " : "<SPC>", + "\t": "<TAB>", + "\n": "<LF>", + "\r": "<CR>", + "\f": "<FF>", + } + def __init__(self, ws=" \t\r\n", min=1, max=0, exact=0): + super(White,self).__init__() + self.matchWhite = ws + self.setWhitespaceChars( "".join(c for c in self.whiteChars if c not in self.matchWhite) ) + #~ self.leaveWhitespace() + self.name = ("".join(White.whiteStrs[c] for c in self.matchWhite)) + self.mayReturnEmpty = True + self.errmsg = "Expected " + self.name + + self.minLen = min + + if max > 0: + self.maxLen = max + else: + self.maxLen = _MAX_INT + + if exact > 0: + self.maxLen = exact + self.minLen = exact + + def parseImpl( self, instring, loc, doActions=True ): + if not(instring[ loc ] in self.matchWhite): + raise ParseException(instring, loc, self.errmsg, self) + start = loc + loc += 1 + maxloc = start + self.maxLen + maxloc = min( maxloc, len(instring) ) + while loc < maxloc and instring[loc] in self.matchWhite: + loc += 1 + + if loc - start < self.minLen: + raise ParseException(instring, loc, self.errmsg, self) + + return loc, instring[start:loc] + + +class _PositionToken(Token): + def __init__( self ): + super(_PositionToken,self).__init__() + self.name=self.__class__.__name__ + self.mayReturnEmpty = True + self.mayIndexError = False + +class GoToColumn(_PositionToken): + """ + Token to advance to a specific column of input text; useful for tabular report scraping. + """ + def __init__( self, colno ): + super(GoToColumn,self).__init__() + self.col = colno + + def preParse( self, instring, loc ): + if col(loc,instring) != self.col: + instrlen = len(instring) + if self.ignoreExprs: + loc = self._skipIgnorables( instring, loc ) + while loc < instrlen and instring[loc].isspace() and col( loc, instring ) != self.col : + loc += 1 + return loc + + def parseImpl( self, instring, loc, doActions=True ): + thiscol = col( loc, instring ) + if thiscol > self.col: + raise ParseException( instring, loc, "Text not in expected column", self ) + newloc = loc + self.col - thiscol + ret = instring[ loc: newloc ] + return newloc, ret + + +class LineStart(_PositionToken): + """ + Matches if current position is at the beginning of a line within the parse string + + Example:: + + test = '''\ + AAA this line + AAA and this line + AAA but not this one + B AAA and definitely not this one + ''' + + for t in (LineStart() + 'AAA' + restOfLine).searchString(test): + print(t) + + Prints:: + ['AAA', ' this line'] + ['AAA', ' and this line'] + + """ + def __init__( self ): + super(LineStart,self).__init__() + self.errmsg = "Expected start of line" + + def parseImpl( self, instring, loc, doActions=True ): + if col(loc, instring) == 1: + return loc, [] + raise ParseException(instring, loc, self.errmsg, self) + +class LineEnd(_PositionToken): + """ + Matches if current position is at the end of a line within the parse string + """ + def __init__( self ): + super(LineEnd,self).__init__() + self.setWhitespaceChars( ParserElement.DEFAULT_WHITE_CHARS.replace("\n","") ) + self.errmsg = "Expected end of line" + + def parseImpl( self, instring, loc, doActions=True ): + if loc<len(instring): + if instring[loc] == "\n": + return loc+1, "\n" + else: + raise ParseException(instring, loc, self.errmsg, self) + elif loc == len(instring): + return loc+1, [] + else: + raise ParseException(instring, loc, self.errmsg, self) + +class StringStart(_PositionToken): + """ + Matches if current position is at the beginning of the parse string + """ + def __init__( self ): + super(StringStart,self).__init__() + self.errmsg = "Expected start of text" + + def parseImpl( self, instring, loc, doActions=True ): + if loc != 0: + # see if entire string up to here is just whitespace and ignoreables + if loc != self.preParse( instring, 0 ): + raise ParseException(instring, loc, self.errmsg, self) + return loc, [] + +class StringEnd(_PositionToken): + """ + Matches if current position is at the end of the parse string + """ + def __init__( self ): + super(StringEnd,self).__init__() + self.errmsg = "Expected end of text" + + def parseImpl( self, instring, loc, doActions=True ): + if loc < len(instring): + raise ParseException(instring, loc, self.errmsg, self) + elif loc == len(instring): + return loc+1, [] + elif loc > len(instring): + return loc, [] + else: + raise ParseException(instring, loc, self.errmsg, self) + +class WordStart(_PositionToken): + """ + Matches if the current position is at the beginning of a Word, and + is not preceded by any character in a given set of C{wordChars} + (default=C{printables}). To emulate the C{\b} behavior of regular expressions, + use C{WordStart(alphanums)}. C{WordStart} will also match at the beginning of + the string being parsed, or at the beginning of a line. + """ + def __init__(self, wordChars = printables): + super(WordStart,self).__init__() + self.wordChars = set(wordChars) + self.errmsg = "Not at the start of a word" + + def parseImpl(self, instring, loc, doActions=True ): + if loc != 0: + if (instring[loc-1] in self.wordChars or + instring[loc] not in self.wordChars): + raise ParseException(instring, loc, self.errmsg, self) + return loc, [] + +class WordEnd(_PositionToken): + """ + Matches if the current position is at the end of a Word, and + is not followed by any character in a given set of C{wordChars} + (default=C{printables}). To emulate the C{\b} behavior of regular expressions, + use C{WordEnd(alphanums)}. C{WordEnd} will also match at the end of + the string being parsed, or at the end of a line. + """ + def __init__(self, wordChars = printables): + super(WordEnd,self).__init__() + self.wordChars = set(wordChars) + self.skipWhitespace = False + self.errmsg = "Not at the end of a word" + + def parseImpl(self, instring, loc, doActions=True ): + instrlen = len(instring) + if instrlen>0 and loc<instrlen: + if (instring[loc] in self.wordChars or + instring[loc-1] not in self.wordChars): + raise ParseException(instring, loc, self.errmsg, self) + return loc, [] + + +class ParseExpression(ParserElement): + """ + Abstract subclass of ParserElement, for combining and post-processing parsed tokens. + """ + def __init__( self, exprs, savelist = False ): + super(ParseExpression,self).__init__(savelist) + if isinstance( exprs, _generatorType ): + exprs = list(exprs) + + if isinstance( exprs, basestring ): + self.exprs = [ ParserElement._literalStringClass( exprs ) ] + elif isinstance( exprs, collections.Iterable ): + exprs = list(exprs) + # if sequence of strings provided, wrap with Literal + if all(isinstance(expr, basestring) for expr in exprs): + exprs = map(ParserElement._literalStringClass, exprs) + self.exprs = list(exprs) + else: + try: + self.exprs = list( exprs ) + except TypeError: + self.exprs = [ exprs ] + self.callPreparse = False + + def __getitem__( self, i ): + return self.exprs[i] + + def append( self, other ): + self.exprs.append( other ) + self.strRepr = None + return self + + def leaveWhitespace( self ): + """Extends C{leaveWhitespace} defined in base class, and also invokes C{leaveWhitespace} on + all contained expressions.""" + self.skipWhitespace = False + self.exprs = [ e.copy() for e in self.exprs ] + for e in self.exprs: + e.leaveWhitespace() + return self + + def ignore( self, other ): + if isinstance( other, Suppress ): + if other not in self.ignoreExprs: + super( ParseExpression, self).ignore( other ) + for e in self.exprs: + e.ignore( self.ignoreExprs[-1] ) + else: + super( ParseExpression, self).ignore( other ) + for e in self.exprs: + e.ignore( self.ignoreExprs[-1] ) + return self + + def __str__( self ): + try: + return super(ParseExpression,self).__str__() + except Exception: + pass + + if self.strRepr is None: + self.strRepr = "%s:(%s)" % ( self.__class__.__name__, _ustr(self.exprs) ) + return self.strRepr + + def streamline( self ): + super(ParseExpression,self).streamline() + + for e in self.exprs: + e.streamline() + + # collapse nested And's of the form And( And( And( a,b), c), d) to And( a,b,c,d ) + # but only if there are no parse actions or resultsNames on the nested And's + # (likewise for Or's and MatchFirst's) + if ( len(self.exprs) == 2 ): + other = self.exprs[0] + if ( isinstance( other, self.__class__ ) and + not(other.parseAction) and + other.resultsName is None and + not other.debug ): + self.exprs = other.exprs[:] + [ self.exprs[1] ] + self.strRepr = None + self.mayReturnEmpty |= other.mayReturnEmpty + self.mayIndexError |= other.mayIndexError + + other = self.exprs[-1] + if ( isinstance( other, self.__class__ ) and + not(other.parseAction) and + other.resultsName is None and + not other.debug ): + self.exprs = self.exprs[:-1] + other.exprs[:] + self.strRepr = None + self.mayReturnEmpty |= other.mayReturnEmpty + self.mayIndexError |= other.mayIndexError + + self.errmsg = "Expected " + _ustr(self) + + return self + + def setResultsName( self, name, listAllMatches=False ): + ret = super(ParseExpression,self).setResultsName(name,listAllMatches) + return ret + + def validate( self, validateTrace=[] ): + tmp = validateTrace[:]+[self] + for e in self.exprs: + e.validate(tmp) + self.checkRecursion( [] ) + + def copy(self): + ret = super(ParseExpression,self).copy() + ret.exprs = [e.copy() for e in self.exprs] + return ret + +class And(ParseExpression): + """ + Requires all given C{ParseExpression}s to be found in the given order. + Expressions may be separated by whitespace. + May be constructed using the C{'+'} operator. + May also be constructed using the C{'-'} operator, which will suppress backtracking. + + Example:: + integer = Word(nums) + name_expr = OneOrMore(Word(alphas)) + + expr = And([integer("id"),name_expr("name"),integer("age")]) + # more easily written as: + expr = integer("id") + name_expr("name") + integer("age") + """ + + class _ErrorStop(Empty): + def __init__(self, *args, **kwargs): + super(And._ErrorStop,self).__init__(*args, **kwargs) + self.name = '-' + self.leaveWhitespace() + + def __init__( self, exprs, savelist = True ): + super(And,self).__init__(exprs, savelist) + self.mayReturnEmpty = all(e.mayReturnEmpty for e in self.exprs) + self.setWhitespaceChars( self.exprs[0].whiteChars ) + self.skipWhitespace = self.exprs[0].skipWhitespace + self.callPreparse = True + + def parseImpl( self, instring, loc, doActions=True ): + # pass False as last arg to _parse for first element, since we already + # pre-parsed the string as part of our And pre-parsing + loc, resultlist = self.exprs[0]._parse( instring, loc, doActions, callPreParse=False ) + errorStop = False + for e in self.exprs[1:]: + if isinstance(e, And._ErrorStop): + errorStop = True + continue + if errorStop: + try: + loc, exprtokens = e._parse( instring, loc, doActions ) + except ParseSyntaxException: + raise + except ParseBaseException as pe: + pe.__traceback__ = None + raise ParseSyntaxException._from_exception(pe) + except IndexError: + raise ParseSyntaxException(instring, len(instring), self.errmsg, self) + else: + loc, exprtokens = e._parse( instring, loc, doActions ) + if exprtokens or exprtokens.haskeys(): + resultlist += exprtokens + return loc, resultlist + + def __iadd__(self, other ): + if isinstance( other, basestring ): + other = ParserElement._literalStringClass( other ) + return self.append( other ) #And( [ self, other ] ) + + def checkRecursion( self, parseElementList ): + subRecCheckList = parseElementList[:] + [ self ] + for e in self.exprs: + e.checkRecursion( subRecCheckList ) + if not e.mayReturnEmpty: + break + + def __str__( self ): + if hasattr(self,"name"): + return self.name + + if self.strRepr is None: + self.strRepr = "{" + " ".join(_ustr(e) for e in self.exprs) + "}" + + return self.strRepr + + +class Or(ParseExpression): + """ + Requires that at least one C{ParseExpression} is found. + If two expressions match, the expression that matches the longest string will be used. + May be constructed using the C{'^'} operator. + + Example:: + # construct Or using '^' operator + + number = Word(nums) ^ Combine(Word(nums) + '.' + Word(nums)) + print(number.searchString("123 3.1416 789")) + prints:: + [['123'], ['3.1416'], ['789']] + """ + def __init__( self, exprs, savelist = False ): + super(Or,self).__init__(exprs, savelist) + if self.exprs: + self.mayReturnEmpty = any(e.mayReturnEmpty for e in self.exprs) + else: + self.mayReturnEmpty = True + + def parseImpl( self, instring, loc, doActions=True ): + maxExcLoc = -1 + maxException = None + matches = [] + for e in self.exprs: + try: + loc2 = e.tryParse( instring, loc ) + except ParseException as err: + err.__traceback__ = None + if err.loc > maxExcLoc: + maxException = err + maxExcLoc = err.loc + except IndexError: + if len(instring) > maxExcLoc: + maxException = ParseException(instring,len(instring),e.errmsg,self) + maxExcLoc = len(instring) + else: + # save match among all matches, to retry longest to shortest + matches.append((loc2, e)) + + if matches: + matches.sort(key=lambda x: -x[0]) + for _,e in matches: + try: + return e._parse( instring, loc, doActions ) + except ParseException as err: + err.__traceback__ = None + if err.loc > maxExcLoc: + maxException = err + maxExcLoc = err.loc + + if maxException is not None: + maxException.msg = self.errmsg + raise maxException + else: + raise ParseException(instring, loc, "no defined alternatives to match", self) + + + def __ixor__(self, other ): + if isinstance( other, basestring ): + other = ParserElement._literalStringClass( other ) + return self.append( other ) #Or( [ self, other ] ) + + def __str__( self ): + if hasattr(self,"name"): + return self.name + + if self.strRepr is None: + self.strRepr = "{" + " ^ ".join(_ustr(e) for e in self.exprs) + "}" + + return self.strRepr + + def checkRecursion( self, parseElementList ): + subRecCheckList = parseElementList[:] + [ self ] + for e in self.exprs: + e.checkRecursion( subRecCheckList ) + + +class MatchFirst(ParseExpression): + """ + Requires that at least one C{ParseExpression} is found. + If two expressions match, the first one listed is the one that will match. + May be constructed using the C{'|'} operator. + + Example:: + # construct MatchFirst using '|' operator + + # watch the order of expressions to match + number = Word(nums) | Combine(Word(nums) + '.' + Word(nums)) + print(number.searchString("123 3.1416 789")) # Fail! -> [['123'], ['3'], ['1416'], ['789']] + + # put more selective expression first + number = Combine(Word(nums) + '.' + Word(nums)) | Word(nums) + print(number.searchString("123 3.1416 789")) # Better -> [['123'], ['3.1416'], ['789']] + """ + def __init__( self, exprs, savelist = False ): + super(MatchFirst,self).__init__(exprs, savelist) + if self.exprs: + self.mayReturnEmpty = any(e.mayReturnEmpty for e in self.exprs) + else: + self.mayReturnEmpty = True + + def parseImpl( self, instring, loc, doActions=True ): + maxExcLoc = -1 + maxException = None + for e in self.exprs: + try: + ret = e._parse( instring, loc, doActions ) + return ret + except ParseException as err: + if err.loc > maxExcLoc: + maxException = err + maxExcLoc = err.loc + except IndexError: + if len(instring) > maxExcLoc: + maxException = ParseException(instring,len(instring),e.errmsg,self) + maxExcLoc = len(instring) + + # only got here if no expression matched, raise exception for match that made it the furthest + else: + if maxException is not None: + maxException.msg = self.errmsg + raise maxException + else: + raise ParseException(instring, loc, "no defined alternatives to match", self) + + def __ior__(self, other ): + if isinstance( other, basestring ): + other = ParserElement._literalStringClass( other ) + return self.append( other ) #MatchFirst( [ self, other ] ) + + def __str__( self ): + if hasattr(self,"name"): + return self.name + + if self.strRepr is None: + self.strRepr = "{" + " | ".join(_ustr(e) for e in self.exprs) + "}" + + return self.strRepr + + def checkRecursion( self, parseElementList ): + subRecCheckList = parseElementList[:] + [ self ] + for e in self.exprs: + e.checkRecursion( subRecCheckList ) + + +class Each(ParseExpression): + """ + Requires all given C{ParseExpression}s to be found, but in any order. + Expressions may be separated by whitespace. + May be constructed using the C{'&'} operator. + + Example:: + color = oneOf("RED ORANGE YELLOW GREEN BLUE PURPLE BLACK WHITE BROWN") + shape_type = oneOf("SQUARE CIRCLE TRIANGLE STAR HEXAGON OCTAGON") + integer = Word(nums) + shape_attr = "shape:" + shape_type("shape") + posn_attr = "posn:" + Group(integer("x") + ',' + integer("y"))("posn") + color_attr = "color:" + color("color") + size_attr = "size:" + integer("size") + + # use Each (using operator '&') to accept attributes in any order + # (shape and posn are required, color and size are optional) + shape_spec = shape_attr & posn_attr & Optional(color_attr) & Optional(size_attr) + + shape_spec.runTests(''' + shape: SQUARE color: BLACK posn: 100, 120 + shape: CIRCLE size: 50 color: BLUE posn: 50,80 + color:GREEN size:20 shape:TRIANGLE posn:20,40 + ''' + ) + prints:: + shape: SQUARE color: BLACK posn: 100, 120 + ['shape:', 'SQUARE', 'color:', 'BLACK', 'posn:', ['100', ',', '120']] + - color: BLACK + - posn: ['100', ',', '120'] + - x: 100 + - y: 120 + - shape: SQUARE + + + shape: CIRCLE size: 50 color: BLUE posn: 50,80 + ['shape:', 'CIRCLE', 'size:', '50', 'color:', 'BLUE', 'posn:', ['50', ',', '80']] + - color: BLUE + - posn: ['50', ',', '80'] + - x: 50 + - y: 80 + - shape: CIRCLE + - size: 50 + + + color: GREEN size: 20 shape: TRIANGLE posn: 20,40 + ['color:', 'GREEN', 'size:', '20', 'shape:', 'TRIANGLE', 'posn:', ['20', ',', '40']] + - color: GREEN + - posn: ['20', ',', '40'] + - x: 20 + - y: 40 + - shape: TRIANGLE + - size: 20 + """ + def __init__( self, exprs, savelist = True ): + super(Each,self).__init__(exprs, savelist) + self.mayReturnEmpty = all(e.mayReturnEmpty for e in self.exprs) + self.skipWhitespace = True + self.initExprGroups = True + + def parseImpl( self, instring, loc, doActions=True ): + if self.initExprGroups: + self.opt1map = dict((id(e.expr),e) for e in self.exprs if isinstance(e,Optional)) + opt1 = [ e.expr for e in self.exprs if isinstance(e,Optional) ] + opt2 = [ e for e in self.exprs if e.mayReturnEmpty and not isinstance(e,Optional)] + self.optionals = opt1 + opt2 + self.multioptionals = [ e.expr for e in self.exprs if isinstance(e,ZeroOrMore) ] + self.multirequired = [ e.expr for e in self.exprs if isinstance(e,OneOrMore) ] + self.required = [ e for e in self.exprs if not isinstance(e,(Optional,ZeroOrMore,OneOrMore)) ] + self.required += self.multirequired + self.initExprGroups = False + tmpLoc = loc + tmpReqd = self.required[:] + tmpOpt = self.optionals[:] + matchOrder = [] + + keepMatching = True + while keepMatching: + tmpExprs = tmpReqd + tmpOpt + self.multioptionals + self.multirequired + failed = [] + for e in tmpExprs: + try: + tmpLoc = e.tryParse( instring, tmpLoc ) + except ParseException: + failed.append(e) + else: + matchOrder.append(self.opt1map.get(id(e),e)) + if e in tmpReqd: + tmpReqd.remove(e) + elif e in tmpOpt: + tmpOpt.remove(e) + if len(failed) == len(tmpExprs): + keepMatching = False + + if tmpReqd: + missing = ", ".join(_ustr(e) for e in tmpReqd) + raise ParseException(instring,loc,"Missing one or more required elements (%s)" % missing ) + + # add any unmatched Optionals, in case they have default values defined + matchOrder += [e for e in self.exprs if isinstance(e,Optional) and e.expr in tmpOpt] + + resultlist = [] + for e in matchOrder: + loc,results = e._parse(instring,loc,doActions) + resultlist.append(results) + + finalResults = sum(resultlist, ParseResults([])) + return loc, finalResults + + def __str__( self ): + if hasattr(self,"name"): + return self.name + + if self.strRepr is None: + self.strRepr = "{" + " & ".join(_ustr(e) for e in self.exprs) + "}" + + return self.strRepr + + def checkRecursion( self, parseElementList ): + subRecCheckList = parseElementList[:] + [ self ] + for e in self.exprs: + e.checkRecursion( subRecCheckList ) + + +class ParseElementEnhance(ParserElement): + """ + Abstract subclass of C{ParserElement}, for combining and post-processing parsed tokens. + """ + def __init__( self, expr, savelist=False ): + super(ParseElementEnhance,self).__init__(savelist) + if isinstance( expr, basestring ): + if issubclass(ParserElement._literalStringClass, Token): + expr = ParserElement._literalStringClass(expr) + else: + expr = ParserElement._literalStringClass(Literal(expr)) + self.expr = expr + self.strRepr = None + if expr is not None: + self.mayIndexError = expr.mayIndexError + self.mayReturnEmpty = expr.mayReturnEmpty + self.setWhitespaceChars( expr.whiteChars ) + self.skipWhitespace = expr.skipWhitespace + self.saveAsList = expr.saveAsList + self.callPreparse = expr.callPreparse + self.ignoreExprs.extend(expr.ignoreExprs) + + def parseImpl( self, instring, loc, doActions=True ): + if self.expr is not None: + return self.expr._parse( instring, loc, doActions, callPreParse=False ) + else: + raise ParseException("",loc,self.errmsg,self) + + def leaveWhitespace( self ): + self.skipWhitespace = False + self.expr = self.expr.copy() + if self.expr is not None: + self.expr.leaveWhitespace() + return self + + def ignore( self, other ): + if isinstance( other, Suppress ): + if other not in self.ignoreExprs: + super( ParseElementEnhance, self).ignore( other ) + if self.expr is not None: + self.expr.ignore( self.ignoreExprs[-1] ) + else: + super( ParseElementEnhance, self).ignore( other ) + if self.expr is not None: + self.expr.ignore( self.ignoreExprs[-1] ) + return self + + def streamline( self ): + super(ParseElementEnhance,self).streamline() + if self.expr is not None: + self.expr.streamline() + return self + + def checkRecursion( self, parseElementList ): + if self in parseElementList: + raise RecursiveGrammarException( parseElementList+[self] ) + subRecCheckList = parseElementList[:] + [ self ] + if self.expr is not None: + self.expr.checkRecursion( subRecCheckList ) + + def validate( self, validateTrace=[] ): + tmp = validateTrace[:]+[self] + if self.expr is not None: + self.expr.validate(tmp) + self.checkRecursion( [] ) + + def __str__( self ): + try: + return super(ParseElementEnhance,self).__str__() + except Exception: + pass + + if self.strRepr is None and self.expr is not None: + self.strRepr = "%s:(%s)" % ( self.__class__.__name__, _ustr(self.expr) ) + return self.strRepr + + +class FollowedBy(ParseElementEnhance): + """ + Lookahead matching of the given parse expression. C{FollowedBy} + does I{not} advance the parsing position within the input string, it only + verifies that the specified parse expression matches at the current + position. C{FollowedBy} always returns a null token list. + + Example:: + # use FollowedBy to match a label only if it is followed by a ':' + data_word = Word(alphas) + label = data_word + FollowedBy(':') + attr_expr = Group(label + Suppress(':') + OneOrMore(data_word, stopOn=label).setParseAction(' '.join)) + + OneOrMore(attr_expr).parseString("shape: SQUARE color: BLACK posn: upper left").pprint() + prints:: + [['shape', 'SQUARE'], ['color', 'BLACK'], ['posn', 'upper left']] + """ + def __init__( self, expr ): + super(FollowedBy,self).__init__(expr) + self.mayReturnEmpty = True + + def parseImpl( self, instring, loc, doActions=True ): + self.expr.tryParse( instring, loc ) + return loc, [] + + +class NotAny(ParseElementEnhance): + """ + Lookahead to disallow matching with the given parse expression. C{NotAny} + does I{not} advance the parsing position within the input string, it only + verifies that the specified parse expression does I{not} match at the current + position. Also, C{NotAny} does I{not} skip over leading whitespace. C{NotAny} + always returns a null token list. May be constructed using the '~' operator. + + Example:: + + """ + def __init__( self, expr ): + super(NotAny,self).__init__(expr) + #~ self.leaveWhitespace() + self.skipWhitespace = False # do NOT use self.leaveWhitespace(), don't want to propagate to exprs + self.mayReturnEmpty = True + self.errmsg = "Found unwanted token, "+_ustr(self.expr) + + def parseImpl( self, instring, loc, doActions=True ): + if self.expr.canParseNext(instring, loc): + raise ParseException(instring, loc, self.errmsg, self) + return loc, [] + + def __str__( self ): + if hasattr(self,"name"): + return self.name + + if self.strRepr is None: + self.strRepr = "~{" + _ustr(self.expr) + "}" + + return self.strRepr + +class _MultipleMatch(ParseElementEnhance): + def __init__( self, expr, stopOn=None): + super(_MultipleMatch, self).__init__(expr) + self.saveAsList = True + ender = stopOn + if isinstance(ender, basestring): + ender = ParserElement._literalStringClass(ender) + self.not_ender = ~ender if ender is not None else None + + def parseImpl( self, instring, loc, doActions=True ): + self_expr_parse = self.expr._parse + self_skip_ignorables = self._skipIgnorables + check_ender = self.not_ender is not None + if check_ender: + try_not_ender = self.not_ender.tryParse + + # must be at least one (but first see if we are the stopOn sentinel; + # if so, fail) + if check_ender: + try_not_ender(instring, loc) + loc, tokens = self_expr_parse( instring, loc, doActions, callPreParse=False ) + try: + hasIgnoreExprs = (not not self.ignoreExprs) + while 1: + if check_ender: + try_not_ender(instring, loc) + if hasIgnoreExprs: + preloc = self_skip_ignorables( instring, loc ) + else: + preloc = loc + loc, tmptokens = self_expr_parse( instring, preloc, doActions ) + if tmptokens or tmptokens.haskeys(): + tokens += tmptokens + except (ParseException,IndexError): + pass + + return loc, tokens + +class OneOrMore(_MultipleMatch): + """ + Repetition of one or more of the given expression. + + Parameters: + - expr - expression that must match one or more times + - stopOn - (default=C{None}) - expression for a terminating sentinel + (only required if the sentinel would ordinarily match the repetition + expression) + + Example:: + data_word = Word(alphas) + label = data_word + FollowedBy(':') + attr_expr = Group(label + Suppress(':') + OneOrMore(data_word).setParseAction(' '.join)) + + text = "shape: SQUARE posn: upper left color: BLACK" + OneOrMore(attr_expr).parseString(text).pprint() # Fail! read 'color' as data instead of next label -> [['shape', 'SQUARE color']] + + # use stopOn attribute for OneOrMore to avoid reading label string as part of the data + attr_expr = Group(label + Suppress(':') + OneOrMore(data_word, stopOn=label).setParseAction(' '.join)) + OneOrMore(attr_expr).parseString(text).pprint() # Better -> [['shape', 'SQUARE'], ['posn', 'upper left'], ['color', 'BLACK']] + + # could also be written as + (attr_expr * (1,)).parseString(text).pprint() + """ + + def __str__( self ): + if hasattr(self,"name"): + return self.name + + if self.strRepr is None: + self.strRepr = "{" + _ustr(self.expr) + "}..." + + return self.strRepr + +class ZeroOrMore(_MultipleMatch): + """ + Optional repetition of zero or more of the given expression. + + Parameters: + - expr - expression that must match zero or more times + - stopOn - (default=C{None}) - expression for a terminating sentinel + (only required if the sentinel would ordinarily match the repetition + expression) + + Example: similar to L{OneOrMore} + """ + def __init__( self, expr, stopOn=None): + super(ZeroOrMore,self).__init__(expr, stopOn=stopOn) + self.mayReturnEmpty = True + + def parseImpl( self, instring, loc, doActions=True ): + try: + return super(ZeroOrMore, self).parseImpl(instring, loc, doActions) + except (ParseException,IndexError): + return loc, [] + + def __str__( self ): + if hasattr(self,"name"): + return self.name + + if self.strRepr is None: + self.strRepr = "[" + _ustr(self.expr) + "]..." + + return self.strRepr + +class _NullToken(object): + def __bool__(self): + return False + __nonzero__ = __bool__ + def __str__(self): + return "" + +_optionalNotMatched = _NullToken() +class Optional(ParseElementEnhance): + """ + Optional matching of the given expression. + + Parameters: + - expr - expression that must match zero or more times + - default (optional) - value to be returned if the optional expression is not found. + + Example:: + # US postal code can be a 5-digit zip, plus optional 4-digit qualifier + zip = Combine(Word(nums, exact=5) + Optional('-' + Word(nums, exact=4))) + zip.runTests(''' + # traditional ZIP code + 12345 + + # ZIP+4 form + 12101-0001 + + # invalid ZIP + 98765- + ''') + prints:: + # traditional ZIP code + 12345 + ['12345'] + + # ZIP+4 form + 12101-0001 + ['12101-0001'] + + # invalid ZIP + 98765- + ^ + FAIL: Expected end of text (at char 5), (line:1, col:6) + """ + def __init__( self, expr, default=_optionalNotMatched ): + super(Optional,self).__init__( expr, savelist=False ) + self.saveAsList = self.expr.saveAsList + self.defaultValue = default + self.mayReturnEmpty = True + + def parseImpl( self, instring, loc, doActions=True ): + try: + loc, tokens = self.expr._parse( instring, loc, doActions, callPreParse=False ) + except (ParseException,IndexError): + if self.defaultValue is not _optionalNotMatched: + if self.expr.resultsName: + tokens = ParseResults([ self.defaultValue ]) + tokens[self.expr.resultsName] = self.defaultValue + else: + tokens = [ self.defaultValue ] + else: + tokens = [] + return loc, tokens + + def __str__( self ): + if hasattr(self,"name"): + return self.name + + if self.strRepr is None: + self.strRepr = "[" + _ustr(self.expr) + "]" + + return self.strRepr + +class SkipTo(ParseElementEnhance): + """ + Token for skipping over all undefined text until the matched expression is found. + + Parameters: + - expr - target expression marking the end of the data to be skipped + - include - (default=C{False}) if True, the target expression is also parsed + (the skipped text and target expression are returned as a 2-element list). + - ignore - (default=C{None}) used to define grammars (typically quoted strings and + comments) that might contain false matches to the target expression + - failOn - (default=C{None}) define expressions that are not allowed to be + included in the skipped test; if found before the target expression is found, + the SkipTo is not a match + + Example:: + report = ''' + Outstanding Issues Report - 1 Jan 2000 + + # | Severity | Description | Days Open + -----+----------+-------------------------------------------+----------- + 101 | Critical | Intermittent system crash | 6 + 94 | Cosmetic | Spelling error on Login ('log|n') | 14 + 79 | Minor | System slow when running too many reports | 47 + ''' + integer = Word(nums) + SEP = Suppress('|') + # use SkipTo to simply match everything up until the next SEP + # - ignore quoted strings, so that a '|' character inside a quoted string does not match + # - parse action will call token.strip() for each matched token, i.e., the description body + string_data = SkipTo(SEP, ignore=quotedString) + string_data.setParseAction(tokenMap(str.strip)) + ticket_expr = (integer("issue_num") + SEP + + string_data("sev") + SEP + + string_data("desc") + SEP + + integer("days_open")) + + for tkt in ticket_expr.searchString(report): + print tkt.dump() + prints:: + ['101', 'Critical', 'Intermittent system crash', '6'] + - days_open: 6 + - desc: Intermittent system crash + - issue_num: 101 + - sev: Critical + ['94', 'Cosmetic', "Spelling error on Login ('log|n')", '14'] + - days_open: 14 + - desc: Spelling error on Login ('log|n') + - issue_num: 94 + - sev: Cosmetic + ['79', 'Minor', 'System slow when running too many reports', '47'] + - days_open: 47 + - desc: System slow when running too many reports + - issue_num: 79 + - sev: Minor + """ + def __init__( self, other, include=False, ignore=None, failOn=None ): + super( SkipTo, self ).__init__( other ) + self.ignoreExpr = ignore + self.mayReturnEmpty = True + self.mayIndexError = False + self.includeMatch = include + self.asList = False + if isinstance(failOn, basestring): + self.failOn = ParserElement._literalStringClass(failOn) + else: + self.failOn = failOn + self.errmsg = "No match found for "+_ustr(self.expr) + + def parseImpl( self, instring, loc, doActions=True ): + startloc = loc + instrlen = len(instring) + expr = self.expr + expr_parse = self.expr._parse + self_failOn_canParseNext = self.failOn.canParseNext if self.failOn is not None else None + self_ignoreExpr_tryParse = self.ignoreExpr.tryParse if self.ignoreExpr is not None else None + + tmploc = loc + while tmploc <= instrlen: + if self_failOn_canParseNext is not None: + # break if failOn expression matches + if self_failOn_canParseNext(instring, tmploc): + break + + if self_ignoreExpr_tryParse is not None: + # advance past ignore expressions + while 1: + try: + tmploc = self_ignoreExpr_tryParse(instring, tmploc) + except ParseBaseException: + break + + try: + expr_parse(instring, tmploc, doActions=False, callPreParse=False) + except (ParseException, IndexError): + # no match, advance loc in string + tmploc += 1 + else: + # matched skipto expr, done + break + + else: + # ran off the end of the input string without matching skipto expr, fail + raise ParseException(instring, loc, self.errmsg, self) + + # build up return values + loc = tmploc + skiptext = instring[startloc:loc] + skipresult = ParseResults(skiptext) + + if self.includeMatch: + loc, mat = expr_parse(instring,loc,doActions,callPreParse=False) + skipresult += mat + + return loc, skipresult + +class Forward(ParseElementEnhance): + """ + Forward declaration of an expression to be defined later - + used for recursive grammars, such as algebraic infix notation. + When the expression is known, it is assigned to the C{Forward} variable using the '<<' operator. + + Note: take care when assigning to C{Forward} not to overlook precedence of operators. + Specifically, '|' has a lower precedence than '<<', so that:: + fwdExpr << a | b | c + will actually be evaluated as:: + (fwdExpr << a) | b | c + thereby leaving b and c out as parseable alternatives. It is recommended that you + explicitly group the values inserted into the C{Forward}:: + fwdExpr << (a | b | c) + Converting to use the '<<=' operator instead will avoid this problem. + + See L{ParseResults.pprint} for an example of a recursive parser created using + C{Forward}. + """ + def __init__( self, other=None ): + super(Forward,self).__init__( other, savelist=False ) + + def __lshift__( self, other ): + if isinstance( other, basestring ): + other = ParserElement._literalStringClass(other) + self.expr = other + self.strRepr = None + self.mayIndexError = self.expr.mayIndexError + self.mayReturnEmpty = self.expr.mayReturnEmpty + self.setWhitespaceChars( self.expr.whiteChars ) + self.skipWhitespace = self.expr.skipWhitespace + self.saveAsList = self.expr.saveAsList + self.ignoreExprs.extend(self.expr.ignoreExprs) + return self + + def __ilshift__(self, other): + return self << other + + def leaveWhitespace( self ): + self.skipWhitespace = False + return self + + def streamline( self ): + if not self.streamlined: + self.streamlined = True + if self.expr is not None: + self.expr.streamline() + return self + + def validate( self, validateTrace=[] ): + if self not in validateTrace: + tmp = validateTrace[:]+[self] + if self.expr is not None: + self.expr.validate(tmp) + self.checkRecursion([]) + + def __str__( self ): + if hasattr(self,"name"): + return self.name + return self.__class__.__name__ + ": ..." + + # stubbed out for now - creates awful memory and perf issues + self._revertClass = self.__class__ + self.__class__ = _ForwardNoRecurse + try: + if self.expr is not None: + retString = _ustr(self.expr) + else: + retString = "None" + finally: + self.__class__ = self._revertClass + return self.__class__.__name__ + ": " + retString + + def copy(self): + if self.expr is not None: + return super(Forward,self).copy() + else: + ret = Forward() + ret <<= self + return ret + +class _ForwardNoRecurse(Forward): + def __str__( self ): + return "..." + +class TokenConverter(ParseElementEnhance): + """ + Abstract subclass of C{ParseExpression}, for converting parsed results. + """ + def __init__( self, expr, savelist=False ): + super(TokenConverter,self).__init__( expr )#, savelist ) + self.saveAsList = False + +class Combine(TokenConverter): + """ + Converter to concatenate all matching tokens to a single string. + By default, the matching patterns must also be contiguous in the input string; + this can be disabled by specifying C{'adjacent=False'} in the constructor. + + Example:: + real = Word(nums) + '.' + Word(nums) + print(real.parseString('3.1416')) # -> ['3', '.', '1416'] + # will also erroneously match the following + print(real.parseString('3. 1416')) # -> ['3', '.', '1416'] + + real = Combine(Word(nums) + '.' + Word(nums)) + print(real.parseString('3.1416')) # -> ['3.1416'] + # no match when there are internal spaces + print(real.parseString('3. 1416')) # -> Exception: Expected W:(0123...) + """ + def __init__( self, expr, joinString="", adjacent=True ): + super(Combine,self).__init__( expr ) + # suppress whitespace-stripping in contained parse expressions, but re-enable it on the Combine itself + if adjacent: + self.leaveWhitespace() + self.adjacent = adjacent + self.skipWhitespace = True + self.joinString = joinString + self.callPreparse = True + + def ignore( self, other ): + if self.adjacent: + ParserElement.ignore(self, other) + else: + super( Combine, self).ignore( other ) + return self + + def postParse( self, instring, loc, tokenlist ): + retToks = tokenlist.copy() + del retToks[:] + retToks += ParseResults([ "".join(tokenlist._asStringList(self.joinString)) ], modal=self.modalResults) + + if self.resultsName and retToks.haskeys(): + return [ retToks ] + else: + return retToks + +class Group(TokenConverter): + """ + Converter to return the matched tokens as a list - useful for returning tokens of C{L{ZeroOrMore}} and C{L{OneOrMore}} expressions. + + Example:: + ident = Word(alphas) + num = Word(nums) + term = ident | num + func = ident + Optional(delimitedList(term)) + print(func.parseString("fn a,b,100")) # -> ['fn', 'a', 'b', '100'] + + func = ident + Group(Optional(delimitedList(term))) + print(func.parseString("fn a,b,100")) # -> ['fn', ['a', 'b', '100']] + """ + def __init__( self, expr ): + super(Group,self).__init__( expr ) + self.saveAsList = True + + def postParse( self, instring, loc, tokenlist ): + return [ tokenlist ] + +class Dict(TokenConverter): + """ + Converter to return a repetitive expression as a list, but also as a dictionary. + Each element can also be referenced using the first token in the expression as its key. + Useful for tabular report scraping when the first column can be used as a item key. + + Example:: + data_word = Word(alphas) + label = data_word + FollowedBy(':') + attr_expr = Group(label + Suppress(':') + OneOrMore(data_word).setParseAction(' '.join)) + + text = "shape: SQUARE posn: upper left color: light blue texture: burlap" + attr_expr = (label + Suppress(':') + OneOrMore(data_word, stopOn=label).setParseAction(' '.join)) + + # print attributes as plain groups + print(OneOrMore(attr_expr).parseString(text).dump()) + + # instead of OneOrMore(expr), parse using Dict(OneOrMore(Group(expr))) - Dict will auto-assign names + result = Dict(OneOrMore(Group(attr_expr))).parseString(text) + print(result.dump()) + + # access named fields as dict entries, or output as dict + print(result['shape']) + print(result.asDict()) + prints:: + ['shape', 'SQUARE', 'posn', 'upper left', 'color', 'light blue', 'texture', 'burlap'] + + [['shape', 'SQUARE'], ['posn', 'upper left'], ['color', 'light blue'], ['texture', 'burlap']] + - color: light blue + - posn: upper left + - shape: SQUARE + - texture: burlap + SQUARE + {'color': 'light blue', 'posn': 'upper left', 'texture': 'burlap', 'shape': 'SQUARE'} + See more examples at L{ParseResults} of accessing fields by results name. + """ + def __init__( self, expr ): + super(Dict,self).__init__( expr ) + self.saveAsList = True + + def postParse( self, instring, loc, tokenlist ): + for i,tok in enumerate(tokenlist): + if len(tok) == 0: + continue + ikey = tok[0] + if isinstance(ikey,int): + ikey = _ustr(tok[0]).strip() + if len(tok)==1: + tokenlist[ikey] = _ParseResultsWithOffset("",i) + elif len(tok)==2 and not isinstance(tok[1],ParseResults): + tokenlist[ikey] = _ParseResultsWithOffset(tok[1],i) + else: + dictvalue = tok.copy() #ParseResults(i) + del dictvalue[0] + if len(dictvalue)!= 1 or (isinstance(dictvalue,ParseResults) and dictvalue.haskeys()): + tokenlist[ikey] = _ParseResultsWithOffset(dictvalue,i) + else: + tokenlist[ikey] = _ParseResultsWithOffset(dictvalue[0],i) + + if self.resultsName: + return [ tokenlist ] + else: + return tokenlist + + +class Suppress(TokenConverter): + """ + Converter for ignoring the results of a parsed expression. + + Example:: + source = "a, b, c,d" + wd = Word(alphas) + wd_list1 = wd + ZeroOrMore(',' + wd) + print(wd_list1.parseString(source)) + + # often, delimiters that are useful during parsing are just in the + # way afterward - use Suppress to keep them out of the parsed output + wd_list2 = wd + ZeroOrMore(Suppress(',') + wd) + print(wd_list2.parseString(source)) + prints:: + ['a', ',', 'b', ',', 'c', ',', 'd'] + ['a', 'b', 'c', 'd'] + (See also L{delimitedList}.) + """ + def postParse( self, instring, loc, tokenlist ): + return [] + + def suppress( self ): + return self + + +class OnlyOnce(object): + """ + Wrapper for parse actions, to ensure they are only called once. + """ + def __init__(self, methodCall): + self.callable = _trim_arity(methodCall) + self.called = False + def __call__(self,s,l,t): + if not self.called: + results = self.callable(s,l,t) + self.called = True + return results + raise ParseException(s,l,"") + def reset(self): + self.called = False + +def traceParseAction(f): + """ + Decorator for debugging parse actions. + + When the parse action is called, this decorator will print C{">> entering I{method-name}(line:I{current_source_line}, I{parse_location}, I{matched_tokens})".} + When the parse action completes, the decorator will print C{"<<"} followed by the returned value, or any exception that the parse action raised. + + Example:: + wd = Word(alphas) + + @traceParseAction + def remove_duplicate_chars(tokens): + return ''.join(sorted(set(''.join(tokens))) + + wds = OneOrMore(wd).setParseAction(remove_duplicate_chars) + print(wds.parseString("slkdjs sld sldd sdlf sdljf")) + prints:: + >>entering remove_duplicate_chars(line: 'slkdjs sld sldd sdlf sdljf', 0, (['slkdjs', 'sld', 'sldd', 'sdlf', 'sdljf'], {})) + <<leaving remove_duplicate_chars (ret: 'dfjkls') + ['dfjkls'] + """ + f = _trim_arity(f) + def z(*paArgs): + thisFunc = f.__name__ + s,l,t = paArgs[-3:] + if len(paArgs)>3: + thisFunc = paArgs[0].__class__.__name__ + '.' + thisFunc + sys.stderr.write( ">>entering %s(line: '%s', %d, %r)\n" % (thisFunc,line(l,s),l,t) ) + try: + ret = f(*paArgs) + except Exception as exc: + sys.stderr.write( "<<leaving %s (exception: %s)\n" % (thisFunc,exc) ) + raise + sys.stderr.write( "<<leaving %s (ret: %r)\n" % (thisFunc,ret) ) + return ret + try: + z.__name__ = f.__name__ + except AttributeError: + pass + return z + +# +# global helpers +# +def delimitedList( expr, delim=",", combine=False ): + """ + Helper to define a delimited list of expressions - the delimiter defaults to ','. + By default, the list elements and delimiters can have intervening whitespace, and + comments, but this can be overridden by passing C{combine=True} in the constructor. + If C{combine} is set to C{True}, the matching tokens are returned as a single token + string, with the delimiters included; otherwise, the matching tokens are returned + as a list of tokens, with the delimiters suppressed. + + Example:: + delimitedList(Word(alphas)).parseString("aa,bb,cc") # -> ['aa', 'bb', 'cc'] + delimitedList(Word(hexnums), delim=':', combine=True).parseString("AA:BB:CC:DD:EE") # -> ['AA:BB:CC:DD:EE'] + """ + dlName = _ustr(expr)+" ["+_ustr(delim)+" "+_ustr(expr)+"]..." + if combine: + return Combine( expr + ZeroOrMore( delim + expr ) ).setName(dlName) + else: + return ( expr + ZeroOrMore( Suppress( delim ) + expr ) ).setName(dlName) + +def countedArray( expr, intExpr=None ): + """ + Helper to define a counted list of expressions. + This helper defines a pattern of the form:: + integer expr expr expr... + where the leading integer tells how many expr expressions follow. + The matched tokens returns the array of expr tokens as a list - the leading count token is suppressed. + + If C{intExpr} is specified, it should be a pyparsing expression that produces an integer value. + + Example:: + countedArray(Word(alphas)).parseString('2 ab cd ef') # -> ['ab', 'cd'] + + # in this parser, the leading integer value is given in binary, + # '10' indicating that 2 values are in the array + binaryConstant = Word('01').setParseAction(lambda t: int(t[0], 2)) + countedArray(Word(alphas), intExpr=binaryConstant).parseString('10 ab cd ef') # -> ['ab', 'cd'] + """ + arrayExpr = Forward() + def countFieldParseAction(s,l,t): + n = t[0] + arrayExpr << (n and Group(And([expr]*n)) or Group(empty)) + return [] + if intExpr is None: + intExpr = Word(nums).setParseAction(lambda t:int(t[0])) + else: + intExpr = intExpr.copy() + intExpr.setName("arrayLen") + intExpr.addParseAction(countFieldParseAction, callDuringTry=True) + return ( intExpr + arrayExpr ).setName('(len) ' + _ustr(expr) + '...') + +def _flatten(L): + ret = [] + for i in L: + if isinstance(i,list): + ret.extend(_flatten(i)) + else: + ret.append(i) + return ret + +def matchPreviousLiteral(expr): + """ + Helper to define an expression that is indirectly defined from + the tokens matched in a previous expression, that is, it looks + for a 'repeat' of a previous expression. For example:: + first = Word(nums) + second = matchPreviousLiteral(first) + matchExpr = first + ":" + second + will match C{"1:1"}, but not C{"1:2"}. Because this matches a + previous literal, will also match the leading C{"1:1"} in C{"1:10"}. + If this is not desired, use C{matchPreviousExpr}. + Do I{not} use with packrat parsing enabled. + """ + rep = Forward() + def copyTokenToRepeater(s,l,t): + if t: + if len(t) == 1: + rep << t[0] + else: + # flatten t tokens + tflat = _flatten(t.asList()) + rep << And(Literal(tt) for tt in tflat) + else: + rep << Empty() + expr.addParseAction(copyTokenToRepeater, callDuringTry=True) + rep.setName('(prev) ' + _ustr(expr)) + return rep + +def matchPreviousExpr(expr): + """ + Helper to define an expression that is indirectly defined from + the tokens matched in a previous expression, that is, it looks + for a 'repeat' of a previous expression. For example:: + first = Word(nums) + second = matchPreviousExpr(first) + matchExpr = first + ":" + second + will match C{"1:1"}, but not C{"1:2"}. Because this matches by + expressions, will I{not} match the leading C{"1:1"} in C{"1:10"}; + the expressions are evaluated first, and then compared, so + C{"1"} is compared with C{"10"}. + Do I{not} use with packrat parsing enabled. + """ + rep = Forward() + e2 = expr.copy() + rep <<= e2 + def copyTokenToRepeater(s,l,t): + matchTokens = _flatten(t.asList()) + def mustMatchTheseTokens(s,l,t): + theseTokens = _flatten(t.asList()) + if theseTokens != matchTokens: + raise ParseException("",0,"") + rep.setParseAction( mustMatchTheseTokens, callDuringTry=True ) + expr.addParseAction(copyTokenToRepeater, callDuringTry=True) + rep.setName('(prev) ' + _ustr(expr)) + return rep + +def _escapeRegexRangeChars(s): + #~ escape these chars: ^-] + for c in r"\^-]": + s = s.replace(c,_bslash+c) + s = s.replace("\n",r"\n") + s = s.replace("\t",r"\t") + return _ustr(s) + +def oneOf( strs, caseless=False, useRegex=True ): + """ + Helper to quickly define a set of alternative Literals, and makes sure to do + longest-first testing when there is a conflict, regardless of the input order, + but returns a C{L{MatchFirst}} for best performance. + + Parameters: + - strs - a string of space-delimited literals, or a collection of string literals + - caseless - (default=C{False}) - treat all literals as caseless + - useRegex - (default=C{True}) - as an optimization, will generate a Regex + object; otherwise, will generate a C{MatchFirst} object (if C{caseless=True}, or + if creating a C{Regex} raises an exception) + + Example:: + comp_oper = oneOf("< = > <= >= !=") + var = Word(alphas) + number = Word(nums) + term = var | number + comparison_expr = term + comp_oper + term + print(comparison_expr.searchString("B = 12 AA=23 B<=AA AA>12")) + prints:: + [['B', '=', '12'], ['AA', '=', '23'], ['B', '<=', 'AA'], ['AA', '>', '12']] + """ + if caseless: + isequal = ( lambda a,b: a.upper() == b.upper() ) + masks = ( lambda a,b: b.upper().startswith(a.upper()) ) + parseElementClass = CaselessLiteral + else: + isequal = ( lambda a,b: a == b ) + masks = ( lambda a,b: b.startswith(a) ) + parseElementClass = Literal + + symbols = [] + if isinstance(strs,basestring): + symbols = strs.split() + elif isinstance(strs, collections.Iterable): + symbols = list(strs) + else: + warnings.warn("Invalid argument to oneOf, expected string or iterable", + SyntaxWarning, stacklevel=2) + if not symbols: + return NoMatch() + + i = 0 + while i < len(symbols)-1: + cur = symbols[i] + for j,other in enumerate(symbols[i+1:]): + if ( isequal(other, cur) ): + del symbols[i+j+1] + break + elif ( masks(cur, other) ): + del symbols[i+j+1] + symbols.insert(i,other) + cur = other + break + else: + i += 1 + + if not caseless and useRegex: + #~ print (strs,"->", "|".join( [ _escapeRegexChars(sym) for sym in symbols] )) + try: + if len(symbols)==len("".join(symbols)): + return Regex( "[%s]" % "".join(_escapeRegexRangeChars(sym) for sym in symbols) ).setName(' | '.join(symbols)) + else: + return Regex( "|".join(re.escape(sym) for sym in symbols) ).setName(' | '.join(symbols)) + except Exception: + warnings.warn("Exception creating Regex for oneOf, building MatchFirst", + SyntaxWarning, stacklevel=2) + + + # last resort, just use MatchFirst + return MatchFirst(parseElementClass(sym) for sym in symbols).setName(' | '.join(symbols)) + +def dictOf( key, value ): + """ + Helper to easily and clearly define a dictionary by specifying the respective patterns + for the key and value. Takes care of defining the C{L{Dict}}, C{L{ZeroOrMore}}, and C{L{Group}} tokens + in the proper order. The key pattern can include delimiting markers or punctuation, + as long as they are suppressed, thereby leaving the significant key text. The value + pattern can include named results, so that the C{Dict} results can include named token + fields. + + Example:: + text = "shape: SQUARE posn: upper left color: light blue texture: burlap" + attr_expr = (label + Suppress(':') + OneOrMore(data_word, stopOn=label).setParseAction(' '.join)) + print(OneOrMore(attr_expr).parseString(text).dump()) + + attr_label = label + attr_value = Suppress(':') + OneOrMore(data_word, stopOn=label).setParseAction(' '.join) + + # similar to Dict, but simpler call format + result = dictOf(attr_label, attr_value).parseString(text) + print(result.dump()) + print(result['shape']) + print(result.shape) # object attribute access works too + print(result.asDict()) + prints:: + [['shape', 'SQUARE'], ['posn', 'upper left'], ['color', 'light blue'], ['texture', 'burlap']] + - color: light blue + - posn: upper left + - shape: SQUARE + - texture: burlap + SQUARE + SQUARE + {'color': 'light blue', 'shape': 'SQUARE', 'posn': 'upper left', 'texture': 'burlap'} + """ + return Dict( ZeroOrMore( Group ( key + value ) ) ) + +def originalTextFor(expr, asString=True): + """ + Helper to return the original, untokenized text for a given expression. Useful to + restore the parsed fields of an HTML start tag into the raw tag text itself, or to + revert separate tokens with intervening whitespace back to the original matching + input text. By default, returns astring containing the original parsed text. + + If the optional C{asString} argument is passed as C{False}, then the return value is a + C{L{ParseResults}} containing any results names that were originally matched, and a + single token containing the original matched text from the input string. So if + the expression passed to C{L{originalTextFor}} contains expressions with defined + results names, you must set C{asString} to C{False} if you want to preserve those + results name values. + + Example:: + src = "this is test <b> bold <i>text</i> </b> normal text " + for tag in ("b","i"): + opener,closer = makeHTMLTags(tag) + patt = originalTextFor(opener + SkipTo(closer) + closer) + print(patt.searchString(src)[0]) + prints:: + ['<b> bold <i>text</i> </b>'] + ['<i>text</i>'] + """ + locMarker = Empty().setParseAction(lambda s,loc,t: loc) + endlocMarker = locMarker.copy() + endlocMarker.callPreparse = False + matchExpr = locMarker("_original_start") + expr + endlocMarker("_original_end") + if asString: + extractText = lambda s,l,t: s[t._original_start:t._original_end] + else: + def extractText(s,l,t): + t[:] = [s[t.pop('_original_start'):t.pop('_original_end')]] + matchExpr.setParseAction(extractText) + matchExpr.ignoreExprs = expr.ignoreExprs + return matchExpr + +def ungroup(expr): + """ + Helper to undo pyparsing's default grouping of And expressions, even + if all but one are non-empty. + """ + return TokenConverter(expr).setParseAction(lambda t:t[0]) + +def locatedExpr(expr): + """ + Helper to decorate a returned token with its starting and ending locations in the input string. + This helper adds the following results names: + - locn_start = location where matched expression begins + - locn_end = location where matched expression ends + - value = the actual parsed results + + Be careful if the input text contains C{<TAB>} characters, you may want to call + C{L{ParserElement.parseWithTabs}} + + Example:: + wd = Word(alphas) + for match in locatedExpr(wd).searchString("ljsdf123lksdjjf123lkkjj1222"): + print(match) + prints:: + [[0, 'ljsdf', 5]] + [[8, 'lksdjjf', 15]] + [[18, 'lkkjj', 23]] + """ + locator = Empty().setParseAction(lambda s,l,t: l) + return Group(locator("locn_start") + expr("value") + locator.copy().leaveWhitespace()("locn_end")) + + +# convenience constants for positional expressions +empty = Empty().setName("empty") +lineStart = LineStart().setName("lineStart") +lineEnd = LineEnd().setName("lineEnd") +stringStart = StringStart().setName("stringStart") +stringEnd = StringEnd().setName("stringEnd") + +_escapedPunc = Word( _bslash, r"\[]-*.$+^?()~ ", exact=2 ).setParseAction(lambda s,l,t:t[0][1]) +_escapedHexChar = Regex(r"\\0?[xX][0-9a-fA-F]+").setParseAction(lambda s,l,t:unichr(int(t[0].lstrip(r'\0x'),16))) +_escapedOctChar = Regex(r"\\0[0-7]+").setParseAction(lambda s,l,t:unichr(int(t[0][1:],8))) +_singleChar = _escapedPunc | _escapedHexChar | _escapedOctChar | Word(printables, excludeChars=r'\]', exact=1) | Regex(r"\w", re.UNICODE) +_charRange = Group(_singleChar + Suppress("-") + _singleChar) +_reBracketExpr = Literal("[") + Optional("^").setResultsName("negate") + Group( OneOrMore( _charRange | _singleChar ) ).setResultsName("body") + "]" + +def srange(s): + r""" + Helper to easily define string ranges for use in Word construction. Borrows + syntax from regexp '[]' string range definitions:: + srange("[0-9]") -> "0123456789" + srange("[a-z]") -> "abcdefghijklmnopqrstuvwxyz" + srange("[a-z$_]") -> "abcdefghijklmnopqrstuvwxyz$_" + The input string must be enclosed in []'s, and the returned string is the expanded + character set joined into a single string. + The values enclosed in the []'s may be: + - a single character + - an escaped character with a leading backslash (such as C{\-} or C{\]}) + - an escaped hex character with a leading C{'\x'} (C{\x21}, which is a C{'!'} character) + (C{\0x##} is also supported for backwards compatibility) + - an escaped octal character with a leading C{'\0'} (C{\041}, which is a C{'!'} character) + - a range of any of the above, separated by a dash (C{'a-z'}, etc.) + - any combination of the above (C{'aeiouy'}, C{'a-zA-Z0-9_$'}, etc.) + """ + _expanded = lambda p: p if not isinstance(p,ParseResults) else ''.join(unichr(c) for c in range(ord(p[0]),ord(p[1])+1)) + try: + return "".join(_expanded(part) for part in _reBracketExpr.parseString(s).body) + except Exception: + return "" + +def matchOnlyAtCol(n): + """ + Helper method for defining parse actions that require matching at a specific + column in the input text. + """ + def verifyCol(strg,locn,toks): + if col(locn,strg) != n: + raise ParseException(strg,locn,"matched token not at column %d" % n) + return verifyCol + +def replaceWith(replStr): + """ + Helper method for common parse actions that simply return a literal value. Especially + useful when used with C{L{transformString<ParserElement.transformString>}()}. + + Example:: + num = Word(nums).setParseAction(lambda toks: int(toks[0])) + na = oneOf("N/A NA").setParseAction(replaceWith(math.nan)) + term = na | num + + OneOrMore(term).parseString("324 234 N/A 234") # -> [324, 234, nan, 234] + """ + return lambda s,l,t: [replStr] + +def removeQuotes(s,l,t): + """ + Helper parse action for removing quotation marks from parsed quoted strings. + + Example:: + # by default, quotation marks are included in parsed results + quotedString.parseString("'Now is the Winter of our Discontent'") # -> ["'Now is the Winter of our Discontent'"] + + # use removeQuotes to strip quotation marks from parsed results + quotedString.setParseAction(removeQuotes) + quotedString.parseString("'Now is the Winter of our Discontent'") # -> ["Now is the Winter of our Discontent"] + """ + return t[0][1:-1] + +def tokenMap(func, *args): + """ + Helper to define a parse action by mapping a function to all elements of a ParseResults list.If any additional + args are passed, they are forwarded to the given function as additional arguments after + the token, as in C{hex_integer = Word(hexnums).setParseAction(tokenMap(int, 16))}, which will convert the + parsed data to an integer using base 16. + + Example (compare the last to example in L{ParserElement.transformString}:: + hex_ints = OneOrMore(Word(hexnums)).setParseAction(tokenMap(int, 16)) + hex_ints.runTests(''' + 00 11 22 aa FF 0a 0d 1a + ''') + + upperword = Word(alphas).setParseAction(tokenMap(str.upper)) + OneOrMore(upperword).runTests(''' + my kingdom for a horse + ''') + + wd = Word(alphas).setParseAction(tokenMap(str.title)) + OneOrMore(wd).setParseAction(' '.join).runTests(''' + now is the winter of our discontent made glorious summer by this sun of york + ''') + prints:: + 00 11 22 aa FF 0a 0d 1a + [0, 17, 34, 170, 255, 10, 13, 26] + + my kingdom for a horse + ['MY', 'KINGDOM', 'FOR', 'A', 'HORSE'] + + now is the winter of our discontent made glorious summer by this sun of york + ['Now Is The Winter Of Our Discontent Made Glorious Summer By This Sun Of York'] + """ + def pa(s,l,t): + return [func(tokn, *args) for tokn in t] + + try: + func_name = getattr(func, '__name__', + getattr(func, '__class__').__name__) + except Exception: + func_name = str(func) + pa.__name__ = func_name + + return pa + +upcaseTokens = tokenMap(lambda t: _ustr(t).upper()) +"""(Deprecated) Helper parse action to convert tokens to upper case. Deprecated in favor of L{pyparsing_common.upcaseTokens}""" + +downcaseTokens = tokenMap(lambda t: _ustr(t).lower()) +"""(Deprecated) Helper parse action to convert tokens to lower case. Deprecated in favor of L{pyparsing_common.downcaseTokens}""" + +def _makeTags(tagStr, xml): + """Internal helper to construct opening and closing tag expressions, given a tag name""" + if isinstance(tagStr,basestring): + resname = tagStr + tagStr = Keyword(tagStr, caseless=not xml) + else: + resname = tagStr.name + + tagAttrName = Word(alphas,alphanums+"_-:") + if (xml): + tagAttrValue = dblQuotedString.copy().setParseAction( removeQuotes ) + openTag = Suppress("<") + tagStr("tag") + \ + Dict(ZeroOrMore(Group( tagAttrName + Suppress("=") + tagAttrValue ))) + \ + Optional("/",default=[False]).setResultsName("empty").setParseAction(lambda s,l,t:t[0]=='/') + Suppress(">") + else: + printablesLessRAbrack = "".join(c for c in printables if c not in ">") + tagAttrValue = quotedString.copy().setParseAction( removeQuotes ) | Word(printablesLessRAbrack) + openTag = Suppress("<") + tagStr("tag") + \ + Dict(ZeroOrMore(Group( tagAttrName.setParseAction(downcaseTokens) + \ + Optional( Suppress("=") + tagAttrValue ) ))) + \ + Optional("/",default=[False]).setResultsName("empty").setParseAction(lambda s,l,t:t[0]=='/') + Suppress(">") + closeTag = Combine(_L("</") + tagStr + ">") + + openTag = openTag.setResultsName("start"+"".join(resname.replace(":"," ").title().split())).setName("<%s>" % resname) + closeTag = closeTag.setResultsName("end"+"".join(resname.replace(":"," ").title().split())).setName("</%s>" % resname) + openTag.tag = resname + closeTag.tag = resname + return openTag, closeTag + +def makeHTMLTags(tagStr): + """ + Helper to construct opening and closing tag expressions for HTML, given a tag name. Matches + tags in either upper or lower case, attributes with namespaces and with quoted or unquoted values. + + Example:: + text = '<td>More info at the <a href="http://pyparsing.wikispaces.com">pyparsing</a> wiki page</td>' + # makeHTMLTags returns pyparsing expressions for the opening and closing tags as a 2-tuple + a,a_end = makeHTMLTags("A") + link_expr = a + SkipTo(a_end)("link_text") + a_end + + for link in link_expr.searchString(text): + # attributes in the <A> tag (like "href" shown here) are also accessible as named results + print(link.link_text, '->', link.href) + prints:: + pyparsing -> http://pyparsing.wikispaces.com + """ + return _makeTags( tagStr, False ) + +def makeXMLTags(tagStr): + """ + Helper to construct opening and closing tag expressions for XML, given a tag name. Matches + tags only in the given upper/lower case. + + Example: similar to L{makeHTMLTags} + """ + return _makeTags( tagStr, True ) + +def withAttribute(*args,**attrDict): + """ + Helper to create a validating parse action to be used with start tags created + with C{L{makeXMLTags}} or C{L{makeHTMLTags}}. Use C{withAttribute} to qualify a starting tag + with a required attribute value, to avoid false matches on common tags such as + C{<TD>} or C{<DIV>}. + + Call C{withAttribute} with a series of attribute names and values. Specify the list + of filter attributes names and values as: + - keyword arguments, as in C{(align="right")}, or + - as an explicit dict with C{**} operator, when an attribute name is also a Python + reserved word, as in C{**{"class":"Customer", "align":"right"}} + - a list of name-value tuples, as in ( ("ns1:class", "Customer"), ("ns2:align","right") ) + For attribute names with a namespace prefix, you must use the second form. Attribute + names are matched insensitive to upper/lower case. + + If just testing for C{class} (with or without a namespace), use C{L{withClass}}. + + To verify that the attribute exists, but without specifying a value, pass + C{withAttribute.ANY_VALUE} as the value. + + Example:: + html = ''' + <div> + Some text + <div type="grid">1 4 0 1 0</div> + <div type="graph">1,3 2,3 1,1</div> + <div>this has no type</div> + </div> + + ''' + div,div_end = makeHTMLTags("div") + + # only match div tag having a type attribute with value "grid" + div_grid = div().setParseAction(withAttribute(type="grid")) + grid_expr = div_grid + SkipTo(div | div_end)("body") + for grid_header in grid_expr.searchString(html): + print(grid_header.body) + + # construct a match with any div tag having a type attribute, regardless of the value + div_any_type = div().setParseAction(withAttribute(type=withAttribute.ANY_VALUE)) + div_expr = div_any_type + SkipTo(div | div_end)("body") + for div_header in div_expr.searchString(html): + print(div_header.body) + prints:: + 1 4 0 1 0 + + 1 4 0 1 0 + 1,3 2,3 1,1 + """ + if args: + attrs = args[:] + else: + attrs = attrDict.items() + attrs = [(k,v) for k,v in attrs] + def pa(s,l,tokens): + for attrName,attrValue in attrs: + if attrName not in tokens: + raise ParseException(s,l,"no matching attribute " + attrName) + if attrValue != withAttribute.ANY_VALUE and tokens[attrName] != attrValue: + raise ParseException(s,l,"attribute '%s' has value '%s', must be '%s'" % + (attrName, tokens[attrName], attrValue)) + return pa +withAttribute.ANY_VALUE = object() + +def withClass(classname, namespace=''): + """ + Simplified version of C{L{withAttribute}} when matching on a div class - made + difficult because C{class} is a reserved word in Python. + + Example:: + html = ''' + <div> + Some text + <div class="grid">1 4 0 1 0</div> + <div class="graph">1,3 2,3 1,1</div> + <div>this <div> has no class</div> + </div> + + ''' + div,div_end = makeHTMLTags("div") + div_grid = div().setParseAction(withClass("grid")) + + grid_expr = div_grid + SkipTo(div | div_end)("body") + for grid_header in grid_expr.searchString(html): + print(grid_header.body) + + div_any_type = div().setParseAction(withClass(withAttribute.ANY_VALUE)) + div_expr = div_any_type + SkipTo(div | div_end)("body") + for div_header in div_expr.searchString(html): + print(div_header.body) + prints:: + 1 4 0 1 0 + + 1 4 0 1 0 + 1,3 2,3 1,1 + """ + classattr = "%s:class" % namespace if namespace else "class" + return withAttribute(**{classattr : classname}) + +opAssoc = _Constants() +opAssoc.LEFT = object() +opAssoc.RIGHT = object() + +def infixNotation( baseExpr, opList, lpar=Suppress('('), rpar=Suppress(')') ): + """ + Helper method for constructing grammars of expressions made up of + operators working in a precedence hierarchy. Operators may be unary or + binary, left- or right-associative. Parse actions can also be attached + to operator expressions. The generated parser will also recognize the use + of parentheses to override operator precedences (see example below). + + Note: if you define a deep operator list, you may see performance issues + when using infixNotation. See L{ParserElement.enablePackrat} for a + mechanism to potentially improve your parser performance. + + Parameters: + - baseExpr - expression representing the most basic element for the nested + - opList - list of tuples, one for each operator precedence level in the + expression grammar; each tuple is of the form + (opExpr, numTerms, rightLeftAssoc, parseAction), where: + - opExpr is the pyparsing expression for the operator; + may also be a string, which will be converted to a Literal; + if numTerms is 3, opExpr is a tuple of two expressions, for the + two operators separating the 3 terms + - numTerms is the number of terms for this operator (must + be 1, 2, or 3) + - rightLeftAssoc is the indicator whether the operator is + right or left associative, using the pyparsing-defined + constants C{opAssoc.RIGHT} and C{opAssoc.LEFT}. + - parseAction is the parse action to be associated with + expressions matching this operator expression (the + parse action tuple member may be omitted) + - lpar - expression for matching left-parentheses (default=C{Suppress('(')}) + - rpar - expression for matching right-parentheses (default=C{Suppress(')')}) + + Example:: + # simple example of four-function arithmetic with ints and variable names + integer = pyparsing_common.signed_integer + varname = pyparsing_common.identifier + + arith_expr = infixNotation(integer | varname, + [ + ('-', 1, opAssoc.RIGHT), + (oneOf('* /'), 2, opAssoc.LEFT), + (oneOf('+ -'), 2, opAssoc.LEFT), + ]) + + arith_expr.runTests(''' + 5+3*6 + (5+3)*6 + -2--11 + ''', fullDump=False) + prints:: + 5+3*6 + [[5, '+', [3, '*', 6]]] + + (5+3)*6 + [[[5, '+', 3], '*', 6]] + + -2--11 + [[['-', 2], '-', ['-', 11]]] + """ + ret = Forward() + lastExpr = baseExpr | ( lpar + ret + rpar ) + for i,operDef in enumerate(opList): + opExpr,arity,rightLeftAssoc,pa = (operDef + (None,))[:4] + termName = "%s term" % opExpr if arity < 3 else "%s%s term" % opExpr + if arity == 3: + if opExpr is None or len(opExpr) != 2: + raise ValueError("if numterms=3, opExpr must be a tuple or list of two expressions") + opExpr1, opExpr2 = opExpr + thisExpr = Forward().setName(termName) + if rightLeftAssoc == opAssoc.LEFT: + if arity == 1: + matchExpr = FollowedBy(lastExpr + opExpr) + Group( lastExpr + OneOrMore( opExpr ) ) + elif arity == 2: + if opExpr is not None: + matchExpr = FollowedBy(lastExpr + opExpr + lastExpr) + Group( lastExpr + OneOrMore( opExpr + lastExpr ) ) + else: + matchExpr = FollowedBy(lastExpr+lastExpr) + Group( lastExpr + OneOrMore(lastExpr) ) + elif arity == 3: + matchExpr = FollowedBy(lastExpr + opExpr1 + lastExpr + opExpr2 + lastExpr) + \ + Group( lastExpr + opExpr1 + lastExpr + opExpr2 + lastExpr ) + else: + raise ValueError("operator must be unary (1), binary (2), or ternary (3)") + elif rightLeftAssoc == opAssoc.RIGHT: + if arity == 1: + # try to avoid LR with this extra test + if not isinstance(opExpr, Optional): + opExpr = Optional(opExpr) + matchExpr = FollowedBy(opExpr.expr + thisExpr) + Group( opExpr + thisExpr ) + elif arity == 2: + if opExpr is not None: + matchExpr = FollowedBy(lastExpr + opExpr + thisExpr) + Group( lastExpr + OneOrMore( opExpr + thisExpr ) ) + else: + matchExpr = FollowedBy(lastExpr + thisExpr) + Group( lastExpr + OneOrMore( thisExpr ) ) + elif arity == 3: + matchExpr = FollowedBy(lastExpr + opExpr1 + thisExpr + opExpr2 + thisExpr) + \ + Group( lastExpr + opExpr1 + thisExpr + opExpr2 + thisExpr ) + else: + raise ValueError("operator must be unary (1), binary (2), or ternary (3)") + else: + raise ValueError("operator must indicate right or left associativity") + if pa: + matchExpr.setParseAction( pa ) + thisExpr <<= ( matchExpr.setName(termName) | lastExpr ) + lastExpr = thisExpr + ret <<= lastExpr + return ret + +operatorPrecedence = infixNotation +"""(Deprecated) Former name of C{L{infixNotation}}, will be dropped in a future release.""" + +dblQuotedString = Combine(Regex(r'"(?:[^"\n\r\\]|(?:"")|(?:\\(?:[^x]|x[0-9a-fA-F]+)))*')+'"').setName("string enclosed in double quotes") +sglQuotedString = Combine(Regex(r"'(?:[^'\n\r\\]|(?:'')|(?:\\(?:[^x]|x[0-9a-fA-F]+)))*")+"'").setName("string enclosed in single quotes") +quotedString = Combine(Regex(r'"(?:[^"\n\r\\]|(?:"")|(?:\\(?:[^x]|x[0-9a-fA-F]+)))*')+'"'| + Regex(r"'(?:[^'\n\r\\]|(?:'')|(?:\\(?:[^x]|x[0-9a-fA-F]+)))*")+"'").setName("quotedString using single or double quotes") +unicodeString = Combine(_L('u') + quotedString.copy()).setName("unicode string literal") + +def nestedExpr(opener="(", closer=")", content=None, ignoreExpr=quotedString.copy()): + """ + Helper method for defining nested lists enclosed in opening and closing + delimiters ("(" and ")" are the default). + + Parameters: + - opener - opening character for a nested list (default=C{"("}); can also be a pyparsing expression + - closer - closing character for a nested list (default=C{")"}); can also be a pyparsing expression + - content - expression for items within the nested lists (default=C{None}) + - ignoreExpr - expression for ignoring opening and closing delimiters (default=C{quotedString}) + + If an expression is not provided for the content argument, the nested + expression will capture all whitespace-delimited content between delimiters + as a list of separate values. + + Use the C{ignoreExpr} argument to define expressions that may contain + opening or closing characters that should not be treated as opening + or closing characters for nesting, such as quotedString or a comment + expression. Specify multiple expressions using an C{L{Or}} or C{L{MatchFirst}}. + The default is L{quotedString}, but if no expressions are to be ignored, + then pass C{None} for this argument. + + Example:: + data_type = oneOf("void int short long char float double") + decl_data_type = Combine(data_type + Optional(Word('*'))) + ident = Word(alphas+'_', alphanums+'_') + number = pyparsing_common.number + arg = Group(decl_data_type + ident) + LPAR,RPAR = map(Suppress, "()") + + code_body = nestedExpr('{', '}', ignoreExpr=(quotedString | cStyleComment)) + + c_function = (decl_data_type("type") + + ident("name") + + LPAR + Optional(delimitedList(arg), [])("args") + RPAR + + code_body("body")) + c_function.ignore(cStyleComment) + + source_code = ''' + int is_odd(int x) { + return (x%2); + } + + int dec_to_hex(char hchar) { + if (hchar >= '0' && hchar <= '9') { + return (ord(hchar)-ord('0')); + } else { + return (10+ord(hchar)-ord('A')); + } + } + ''' + for func in c_function.searchString(source_code): + print("%(name)s (%(type)s) args: %(args)s" % func) + + prints:: + is_odd (int) args: [['int', 'x']] + dec_to_hex (int) args: [['char', 'hchar']] + """ + if opener == closer: + raise ValueError("opening and closing strings cannot be the same") + if content is None: + if isinstance(opener,basestring) and isinstance(closer,basestring): + if len(opener) == 1 and len(closer)==1: + if ignoreExpr is not None: + content = (Combine(OneOrMore(~ignoreExpr + + CharsNotIn(opener+closer+ParserElement.DEFAULT_WHITE_CHARS,exact=1)) + ).setParseAction(lambda t:t[0].strip())) + else: + content = (empty.copy()+CharsNotIn(opener+closer+ParserElement.DEFAULT_WHITE_CHARS + ).setParseAction(lambda t:t[0].strip())) + else: + if ignoreExpr is not None: + content = (Combine(OneOrMore(~ignoreExpr + + ~Literal(opener) + ~Literal(closer) + + CharsNotIn(ParserElement.DEFAULT_WHITE_CHARS,exact=1)) + ).setParseAction(lambda t:t[0].strip())) + else: + content = (Combine(OneOrMore(~Literal(opener) + ~Literal(closer) + + CharsNotIn(ParserElement.DEFAULT_WHITE_CHARS,exact=1)) + ).setParseAction(lambda t:t[0].strip())) + else: + raise ValueError("opening and closing arguments must be strings if no content expression is given") + ret = Forward() + if ignoreExpr is not None: + ret <<= Group( Suppress(opener) + ZeroOrMore( ignoreExpr | ret | content ) + Suppress(closer) ) + else: + ret <<= Group( Suppress(opener) + ZeroOrMore( ret | content ) + Suppress(closer) ) + ret.setName('nested %s%s expression' % (opener,closer)) + return ret + +def indentedBlock(blockStatementExpr, indentStack, indent=True): + """ + Helper method for defining space-delimited indentation blocks, such as + those used to define block statements in Python source code. + + Parameters: + - blockStatementExpr - expression defining syntax of statement that + is repeated within the indented block + - indentStack - list created by caller to manage indentation stack + (multiple statementWithIndentedBlock expressions within a single grammar + should share a common indentStack) + - indent - boolean indicating whether block must be indented beyond the + the current level; set to False for block of left-most statements + (default=C{True}) + + A valid block must contain at least one C{blockStatement}. + + Example:: + data = ''' + def A(z): + A1 + B = 100 + G = A2 + A2 + A3 + B + def BB(a,b,c): + BB1 + def BBA(): + bba1 + bba2 + bba3 + C + D + def spam(x,y): + def eggs(z): + pass + ''' + + + indentStack = [1] + stmt = Forward() + + identifier = Word(alphas, alphanums) + funcDecl = ("def" + identifier + Group( "(" + Optional( delimitedList(identifier) ) + ")" ) + ":") + func_body = indentedBlock(stmt, indentStack) + funcDef = Group( funcDecl + func_body ) + + rvalue = Forward() + funcCall = Group(identifier + "(" + Optional(delimitedList(rvalue)) + ")") + rvalue << (funcCall | identifier | Word(nums)) + assignment = Group(identifier + "=" + rvalue) + stmt << ( funcDef | assignment | identifier ) + + module_body = OneOrMore(stmt) + + parseTree = module_body.parseString(data) + parseTree.pprint() + prints:: + [['def', + 'A', + ['(', 'z', ')'], + ':', + [['A1'], [['B', '=', '100']], [['G', '=', 'A2']], ['A2'], ['A3']]], + 'B', + ['def', + 'BB', + ['(', 'a', 'b', 'c', ')'], + ':', + [['BB1'], [['def', 'BBA', ['(', ')'], ':', [['bba1'], ['bba2'], ['bba3']]]]]], + 'C', + 'D', + ['def', + 'spam', + ['(', 'x', 'y', ')'], + ':', + [[['def', 'eggs', ['(', 'z', ')'], ':', [['pass']]]]]]] + """ + def checkPeerIndent(s,l,t): + if l >= len(s): return + curCol = col(l,s) + if curCol != indentStack[-1]: + if curCol > indentStack[-1]: + raise ParseFatalException(s,l,"illegal nesting") + raise ParseException(s,l,"not a peer entry") + + def checkSubIndent(s,l,t): + curCol = col(l,s) + if curCol > indentStack[-1]: + indentStack.append( curCol ) + else: + raise ParseException(s,l,"not a subentry") + + def checkUnindent(s,l,t): + if l >= len(s): return + curCol = col(l,s) + if not(indentStack and curCol < indentStack[-1] and curCol <= indentStack[-2]): + raise ParseException(s,l,"not an unindent") + indentStack.pop() + + NL = OneOrMore(LineEnd().setWhitespaceChars("\t ").suppress()) + INDENT = (Empty() + Empty().setParseAction(checkSubIndent)).setName('INDENT') + PEER = Empty().setParseAction(checkPeerIndent).setName('') + UNDENT = Empty().setParseAction(checkUnindent).setName('UNINDENT') + if indent: + smExpr = Group( Optional(NL) + + #~ FollowedBy(blockStatementExpr) + + INDENT + (OneOrMore( PEER + Group(blockStatementExpr) + Optional(NL) )) + UNDENT) + else: + smExpr = Group( Optional(NL) + + (OneOrMore( PEER + Group(blockStatementExpr) + Optional(NL) )) ) + blockStatementExpr.ignore(_bslash + LineEnd()) + return smExpr.setName('indented block') + +alphas8bit = srange(r"[\0xc0-\0xd6\0xd8-\0xf6\0xf8-\0xff]") +punc8bit = srange(r"[\0xa1-\0xbf\0xd7\0xf7]") + +anyOpenTag,anyCloseTag = makeHTMLTags(Word(alphas,alphanums+"_:").setName('any tag')) +_htmlEntityMap = dict(zip("gt lt amp nbsp quot apos".split(),'><& "\'')) +commonHTMLEntity = Regex('&(?P<entity>' + '|'.join(_htmlEntityMap.keys()) +");").setName("common HTML entity") +def replaceHTMLEntity(t): + """Helper parser action to replace common HTML entities with their special characters""" + return _htmlEntityMap.get(t.entity) + +# it's easy to get these comment structures wrong - they're very common, so may as well make them available +cStyleComment = Combine(Regex(r"/\*(?:[^*]|\*(?!/))*") + '*/').setName("C style comment") +"Comment of the form C{/* ... */}" + +htmlComment = Regex(r"<!--[\s\S]*?-->").setName("HTML comment") +"Comment of the form C{<!-- ... -->}" + +restOfLine = Regex(r".*").leaveWhitespace().setName("rest of line") +dblSlashComment = Regex(r"//(?:\\\n|[^\n])*").setName("// comment") +"Comment of the form C{// ... (to end of line)}" + +cppStyleComment = Combine(Regex(r"/\*(?:[^*]|\*(?!/))*") + '*/'| dblSlashComment).setName("C++ style comment") +"Comment of either form C{L{cStyleComment}} or C{L{dblSlashComment}}" + +javaStyleComment = cppStyleComment +"Same as C{L{cppStyleComment}}" + +pythonStyleComment = Regex(r"#.*").setName("Python style comment") +"Comment of the form C{# ... (to end of line)}" + +_commasepitem = Combine(OneOrMore(Word(printables, excludeChars=',') + + Optional( Word(" \t") + + ~Literal(",") + ~LineEnd() ) ) ).streamline().setName("commaItem") +commaSeparatedList = delimitedList( Optional( quotedString.copy() | _commasepitem, default="") ).setName("commaSeparatedList") +"""(Deprecated) Predefined expression of 1 or more printable words or quoted strings, separated by commas. + This expression is deprecated in favor of L{pyparsing_common.comma_separated_list}.""" + +# some other useful expressions - using lower-case class name since we are really using this as a namespace +class pyparsing_common: + """ + Here are some common low-level expressions that may be useful in jump-starting parser development: + - numeric forms (L{integers<integer>}, L{reals<real>}, L{scientific notation<sci_real>}) + - common L{programming identifiers<identifier>} + - network addresses (L{MAC<mac_address>}, L{IPv4<ipv4_address>}, L{IPv6<ipv6_address>}) + - ISO8601 L{dates<iso8601_date>} and L{datetime<iso8601_datetime>} + - L{UUID<uuid>} + - L{comma-separated list<comma_separated_list>} + Parse actions: + - C{L{convertToInteger}} + - C{L{convertToFloat}} + - C{L{convertToDate}} + - C{L{convertToDatetime}} + - C{L{stripHTMLTags}} + - C{L{upcaseTokens}} + - C{L{downcaseTokens}} + + Example:: + pyparsing_common.number.runTests(''' + # any int or real number, returned as the appropriate type + 100 + -100 + +100 + 3.14159 + 6.02e23 + 1e-12 + ''') + + pyparsing_common.fnumber.runTests(''' + # any int or real number, returned as float + 100 + -100 + +100 + 3.14159 + 6.02e23 + 1e-12 + ''') + + pyparsing_common.hex_integer.runTests(''' + # hex numbers + 100 + FF + ''') + + pyparsing_common.fraction.runTests(''' + # fractions + 1/2 + -3/4 + ''') + + pyparsing_common.mixed_integer.runTests(''' + # mixed fractions + 1 + 1/2 + -3/4 + 1-3/4 + ''') + + import uuid + pyparsing_common.uuid.setParseAction(tokenMap(uuid.UUID)) + pyparsing_common.uuid.runTests(''' + # uuid + 12345678-1234-5678-1234-567812345678 + ''') + prints:: + # any int or real number, returned as the appropriate type + 100 + [100] + + -100 + [-100] + + +100 + [100] + + 3.14159 + [3.14159] + + 6.02e23 + [6.02e+23] + + 1e-12 + [1e-12] + + # any int or real number, returned as float + 100 + [100.0] + + -100 + [-100.0] + + +100 + [100.0] + + 3.14159 + [3.14159] + + 6.02e23 + [6.02e+23] + + 1e-12 + [1e-12] + + # hex numbers + 100 + [256] + + FF + [255] + + # fractions + 1/2 + [0.5] + + -3/4 + [-0.75] + + # mixed fractions + 1 + [1] + + 1/2 + [0.5] + + -3/4 + [-0.75] + + 1-3/4 + [1.75] + + # uuid + 12345678-1234-5678-1234-567812345678 + [UUID('12345678-1234-5678-1234-567812345678')] + """ + + convertToInteger = tokenMap(int) + """ + Parse action for converting parsed integers to Python int + """ + + convertToFloat = tokenMap(float) + """ + Parse action for converting parsed numbers to Python float + """ + + integer = Word(nums).setName("integer").setParseAction(convertToInteger) + """expression that parses an unsigned integer, returns an int""" + + hex_integer = Word(hexnums).setName("hex integer").setParseAction(tokenMap(int,16)) + """expression that parses a hexadecimal integer, returns an int""" + + signed_integer = Regex(r'[+-]?\d+').setName("signed integer").setParseAction(convertToInteger) + """expression that parses an integer with optional leading sign, returns an int""" + + fraction = (signed_integer().setParseAction(convertToFloat) + '/' + signed_integer().setParseAction(convertToFloat)).setName("fraction") + """fractional expression of an integer divided by an integer, returns a float""" + fraction.addParseAction(lambda t: t[0]/t[-1]) + + mixed_integer = (fraction | signed_integer + Optional(Optional('-').suppress() + fraction)).setName("fraction or mixed integer-fraction") + """mixed integer of the form 'integer - fraction', with optional leading integer, returns float""" + mixed_integer.addParseAction(sum) + + real = Regex(r'[+-]?\d+\.\d*').setName("real number").setParseAction(convertToFloat) + """expression that parses a floating point number and returns a float""" + + sci_real = Regex(r'[+-]?\d+([eE][+-]?\d+|\.\d*([eE][+-]?\d+)?)').setName("real number with scientific notation").setParseAction(convertToFloat) + """expression that parses a floating point number with optional scientific notation and returns a float""" + + # streamlining this expression makes the docs nicer-looking + number = (sci_real | real | signed_integer).streamline() + """any numeric expression, returns the corresponding Python type""" + + fnumber = Regex(r'[+-]?\d+\.?\d*([eE][+-]?\d+)?').setName("fnumber").setParseAction(convertToFloat) + """any int or real number, returned as float""" + + identifier = Word(alphas+'_', alphanums+'_').setName("identifier") + """typical code identifier (leading alpha or '_', followed by 0 or more alphas, nums, or '_')""" + + ipv4_address = Regex(r'(25[0-5]|2[0-4][0-9]|1?[0-9]{1,2})(\.(25[0-5]|2[0-4][0-9]|1?[0-9]{1,2})){3}').setName("IPv4 address") + "IPv4 address (C{0.0.0.0 - 255.255.255.255})" + + _ipv6_part = Regex(r'[0-9a-fA-F]{1,4}').setName("hex_integer") + _full_ipv6_address = (_ipv6_part + (':' + _ipv6_part)*7).setName("full IPv6 address") + _short_ipv6_address = (Optional(_ipv6_part + (':' + _ipv6_part)*(0,6)) + "::" + Optional(_ipv6_part + (':' + _ipv6_part)*(0,6))).setName("short IPv6 address") + _short_ipv6_address.addCondition(lambda t: sum(1 for tt in t if pyparsing_common._ipv6_part.matches(tt)) < 8) + _mixed_ipv6_address = ("::ffff:" + ipv4_address).setName("mixed IPv6 address") + ipv6_address = Combine((_full_ipv6_address | _mixed_ipv6_address | _short_ipv6_address).setName("IPv6 address")).setName("IPv6 address") + "IPv6 address (long, short, or mixed form)" + + mac_address = Regex(r'[0-9a-fA-F]{2}([:.-])[0-9a-fA-F]{2}(?:\1[0-9a-fA-F]{2}){4}').setName("MAC address") + "MAC address xx:xx:xx:xx:xx (may also have '-' or '.' delimiters)" + + @staticmethod + def convertToDate(fmt="%Y-%m-%d"): + """ + Helper to create a parse action for converting parsed date string to Python datetime.date + + Params - + - fmt - format to be passed to datetime.strptime (default=C{"%Y-%m-%d"}) + + Example:: + date_expr = pyparsing_common.iso8601_date.copy() + date_expr.setParseAction(pyparsing_common.convertToDate()) + print(date_expr.parseString("1999-12-31")) + prints:: + [datetime.date(1999, 12, 31)] + """ + def cvt_fn(s,l,t): + try: + return datetime.strptime(t[0], fmt).date() + except ValueError as ve: + raise ParseException(s, l, str(ve)) + return cvt_fn + + @staticmethod + def convertToDatetime(fmt="%Y-%m-%dT%H:%M:%S.%f"): + """ + Helper to create a parse action for converting parsed datetime string to Python datetime.datetime + + Params - + - fmt - format to be passed to datetime.strptime (default=C{"%Y-%m-%dT%H:%M:%S.%f"}) + + Example:: + dt_expr = pyparsing_common.iso8601_datetime.copy() + dt_expr.setParseAction(pyparsing_common.convertToDatetime()) + print(dt_expr.parseString("1999-12-31T23:59:59.999")) + prints:: + [datetime.datetime(1999, 12, 31, 23, 59, 59, 999000)] + """ + def cvt_fn(s,l,t): + try: + return datetime.strptime(t[0], fmt) + except ValueError as ve: + raise ParseException(s, l, str(ve)) + return cvt_fn + + iso8601_date = Regex(r'(?P<year>\d{4})(?:-(?P<month>\d\d)(?:-(?P<day>\d\d))?)?').setName("ISO8601 date") + "ISO8601 date (C{yyyy-mm-dd})" + + iso8601_datetime = Regex(r'(?P<year>\d{4})-(?P<month>\d\d)-(?P<day>\d\d)[T ](?P<hour>\d\d):(?P<minute>\d\d)(:(?P<second>\d\d(\.\d*)?)?)?(?P<tz>Z|[+-]\d\d:?\d\d)?').setName("ISO8601 datetime") + "ISO8601 datetime (C{yyyy-mm-ddThh:mm:ss.s(Z|+-00:00)}) - trailing seconds, milliseconds, and timezone optional; accepts separating C{'T'} or C{' '}" + + uuid = Regex(r'[0-9a-fA-F]{8}(-[0-9a-fA-F]{4}){3}-[0-9a-fA-F]{12}').setName("UUID") + "UUID (C{xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx})" + + _html_stripper = anyOpenTag.suppress() | anyCloseTag.suppress() + @staticmethod + def stripHTMLTags(s, l, tokens): + """ + Parse action to remove HTML tags from web page HTML source + + Example:: + # strip HTML links from normal text + text = '<td>More info at the <a href="http://pyparsing.wikispaces.com">pyparsing</a> wiki page</td>' + td,td_end = makeHTMLTags("TD") + table_text = td + SkipTo(td_end).setParseAction(pyparsing_common.stripHTMLTags)("body") + td_end + + print(table_text.parseString(text).body) # -> 'More info at the pyparsing wiki page' + """ + return pyparsing_common._html_stripper.transformString(tokens[0]) + + _commasepitem = Combine(OneOrMore(~Literal(",") + ~LineEnd() + Word(printables, excludeChars=',') + + Optional( White(" \t") ) ) ).streamline().setName("commaItem") + comma_separated_list = delimitedList( Optional( quotedString.copy() | _commasepitem, default="") ).setName("comma separated list") + """Predefined expression of 1 or more printable words or quoted strings, separated by commas.""" + + upcaseTokens = staticmethod(tokenMap(lambda t: _ustr(t).upper())) + """Parse action to convert tokens to upper case.""" + + downcaseTokens = staticmethod(tokenMap(lambda t: _ustr(t).lower())) + """Parse action to convert tokens to lower case.""" + + +if __name__ == "__main__": + + selectToken = CaselessLiteral("select") + fromToken = CaselessLiteral("from") + + ident = Word(alphas, alphanums + "_$") + + columnName = delimitedList(ident, ".", combine=True).setParseAction(upcaseTokens) + columnNameList = Group(delimitedList(columnName)).setName("columns") + columnSpec = ('*' | columnNameList) + + tableName = delimitedList(ident, ".", combine=True).setParseAction(upcaseTokens) + tableNameList = Group(delimitedList(tableName)).setName("tables") + + simpleSQL = selectToken("command") + columnSpec("columns") + fromToken + tableNameList("tables") + + # demo runTests method, including embedded comments in test string + simpleSQL.runTests(""" + # '*' as column list and dotted table name + select * from SYS.XYZZY + + # caseless match on "SELECT", and casts back to "select" + SELECT * from XYZZY, ABC + + # list of column names, and mixed case SELECT keyword + Select AA,BB,CC from Sys.dual + + # multiple tables + Select A, B, C from Sys.dual, Table2 + + # invalid SELECT keyword - should fail + Xelect A, B, C from Sys.dual + + # incomplete command - should fail + Select + + # invalid column name - should fail + Select ^^^ frox Sys.dual + + """) + + pyparsing_common.number.runTests(""" + 100 + -100 + +100 + 3.14159 + 6.02e23 + 1e-12 + """) + + # any int or real number, returned as float + pyparsing_common.fnumber.runTests(""" + 100 + -100 + +100 + 3.14159 + 6.02e23 + 1e-12 + """) + + pyparsing_common.hex_integer.runTests(""" + 100 + FF + """) + + import uuid + pyparsing_common.uuid.setParseAction(tokenMap(uuid.UUID)) + pyparsing_common.uuid.runTests(""" + 12345678-1234-5678-1234-567812345678 + """) diff --git a/week-0/day-3/my_todo_app/venvironment/lib/python3.6/site-packages/setuptools/_vendor/six.py b/week-0/day-3/my_todo_app/venvironment/lib/python3.6/site-packages/setuptools/_vendor/six.py new file mode 100644 index 00000000..190c0239 --- /dev/null +++ b/week-0/day-3/my_todo_app/venvironment/lib/python3.6/site-packages/setuptools/_vendor/six.py @@ -0,0 +1,868 @@ +"""Utilities for writing code that runs on Python 2 and 3""" + +# Copyright (c) 2010-2015 Benjamin Peterson +# +# Permission is hereby granted, free of charge, to any person obtaining a copy +# of this software and associated documentation files (the "Software"), to deal +# in the Software without restriction, including without limitation the rights +# to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +# copies of the Software, and to permit persons to whom the Software is +# furnished to do so, subject to the following conditions: +# +# The above copyright notice and this permission notice shall be included in all +# copies or substantial portions of the Software. +# +# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +# FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +# AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +# LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +# OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +# SOFTWARE. + +from __future__ import absolute_import + +import functools +import itertools +import operator +import sys +import types + +__author__ = "Benjamin Peterson <benjamin@python.org>" +__version__ = "1.10.0" + + +# Useful for very coarse version differentiation. +PY2 = sys.version_info[0] == 2 +PY3 = sys.version_info[0] == 3 +PY34 = sys.version_info[0:2] >= (3, 4) + +if PY3: + string_types = str, + integer_types = int, + class_types = type, + text_type = str + binary_type = bytes + + MAXSIZE = sys.maxsize +else: + string_types = basestring, + integer_types = (int, long) + class_types = (type, types.ClassType) + text_type = unicode + binary_type = str + + if sys.platform.startswith("java"): + # Jython always uses 32 bits. + MAXSIZE = int((1 << 31) - 1) + else: + # It's possible to have sizeof(long) != sizeof(Py_ssize_t). + class X(object): + + def __len__(self): + return 1 << 31 + try: + len(X()) + except OverflowError: + # 32-bit + MAXSIZE = int((1 << 31) - 1) + else: + # 64-bit + MAXSIZE = int((1 << 63) - 1) + del X + + +def _add_doc(func, doc): + """Add documentation to a function.""" + func.__doc__ = doc + + +def _import_module(name): + """Import module, returning the module after the last dot.""" + __import__(name) + return sys.modules[name] + + +class _LazyDescr(object): + + def __init__(self, name): + self.name = name + + def __get__(self, obj, tp): + result = self._resolve() + setattr(obj, self.name, result) # Invokes __set__. + try: + # This is a bit ugly, but it avoids running this again by + # removing this descriptor. + delattr(obj.__class__, self.name) + except AttributeError: + pass + return result + + +class MovedModule(_LazyDescr): + + def __init__(self, name, old, new=None): + super(MovedModule, self).__init__(name) + if PY3: + if new is None: + new = name + self.mod = new + else: + self.mod = old + + def _resolve(self): + return _import_module(self.mod) + + def __getattr__(self, attr): + _module = self._resolve() + value = getattr(_module, attr) + setattr(self, attr, value) + return value + + +class _LazyModule(types.ModuleType): + + def __init__(self, name): + super(_LazyModule, self).__init__(name) + self.__doc__ = self.__class__.__doc__ + + def __dir__(self): + attrs = ["__doc__", "__name__"] + attrs += [attr.name for attr in self._moved_attributes] + return attrs + + # Subclasses should override this + _moved_attributes = [] + + +class MovedAttribute(_LazyDescr): + + def __init__(self, name, old_mod, new_mod, old_attr=None, new_attr=None): + super(MovedAttribute, self).__init__(name) + if PY3: + if new_mod is None: + new_mod = name + self.mod = new_mod + if new_attr is None: + if old_attr is None: + new_attr = name + else: + new_attr = old_attr + self.attr = new_attr + else: + self.mod = old_mod + if old_attr is None: + old_attr = name + self.attr = old_attr + + def _resolve(self): + module = _import_module(self.mod) + return getattr(module, self.attr) + + +class _SixMetaPathImporter(object): + + """ + A meta path importer to import six.moves and its submodules. + + This class implements a PEP302 finder and loader. It should be compatible + with Python 2.5 and all existing versions of Python3 + """ + + def __init__(self, six_module_name): + self.name = six_module_name + self.known_modules = {} + + def _add_module(self, mod, *fullnames): + for fullname in fullnames: + self.known_modules[self.name + "." + fullname] = mod + + def _get_module(self, fullname): + return self.known_modules[self.name + "." + fullname] + + def find_module(self, fullname, path=None): + if fullname in self.known_modules: + return self + return None + + def __get_module(self, fullname): + try: + return self.known_modules[fullname] + except KeyError: + raise ImportError("This loader does not know module " + fullname) + + def load_module(self, fullname): + try: + # in case of a reload + return sys.modules[fullname] + except KeyError: + pass + mod = self.__get_module(fullname) + if isinstance(mod, MovedModule): + mod = mod._resolve() + else: + mod.__loader__ = self + sys.modules[fullname] = mod + return mod + + def is_package(self, fullname): + """ + Return true, if the named module is a package. + + We need this method to get correct spec objects with + Python 3.4 (see PEP451) + """ + return hasattr(self.__get_module(fullname), "__path__") + + def get_code(self, fullname): + """Return None + + Required, if is_package is implemented""" + self.__get_module(fullname) # eventually raises ImportError + return None + get_source = get_code # same as get_code + +_importer = _SixMetaPathImporter(__name__) + + +class _MovedItems(_LazyModule): + + """Lazy loading of moved objects""" + __path__ = [] # mark as package + + +_moved_attributes = [ + MovedAttribute("cStringIO", "cStringIO", "io", "StringIO"), + MovedAttribute("filter", "itertools", "builtins", "ifilter", "filter"), + MovedAttribute("filterfalse", "itertools", "itertools", "ifilterfalse", "filterfalse"), + MovedAttribute("input", "__builtin__", "builtins", "raw_input", "input"), + MovedAttribute("intern", "__builtin__", "sys"), + MovedAttribute("map", "itertools", "builtins", "imap", "map"), + MovedAttribute("getcwd", "os", "os", "getcwdu", "getcwd"), + MovedAttribute("getcwdb", "os", "os", "getcwd", "getcwdb"), + MovedAttribute("range", "__builtin__", "builtins", "xrange", "range"), + MovedAttribute("reload_module", "__builtin__", "importlib" if PY34 else "imp", "reload"), + MovedAttribute("reduce", "__builtin__", "functools"), + MovedAttribute("shlex_quote", "pipes", "shlex", "quote"), + MovedAttribute("StringIO", "StringIO", "io"), + MovedAttribute("UserDict", "UserDict", "collections"), + MovedAttribute("UserList", "UserList", "collections"), + MovedAttribute("UserString", "UserString", "collections"), + MovedAttribute("xrange", "__builtin__", "builtins", "xrange", "range"), + MovedAttribute("zip", "itertools", "builtins", "izip", "zip"), + MovedAttribute("zip_longest", "itertools", "itertools", "izip_longest", "zip_longest"), + MovedModule("builtins", "__builtin__"), + MovedModule("configparser", "ConfigParser"), + MovedModule("copyreg", "copy_reg"), + MovedModule("dbm_gnu", "gdbm", "dbm.gnu"), + MovedModule("_dummy_thread", "dummy_thread", "_dummy_thread"), + MovedModule("http_cookiejar", "cookielib", "http.cookiejar"), + MovedModule("http_cookies", "Cookie", "http.cookies"), + MovedModule("html_entities", "htmlentitydefs", "html.entities"), + MovedModule("html_parser", "HTMLParser", "html.parser"), + MovedModule("http_client", "httplib", "http.client"), + MovedModule("email_mime_multipart", "email.MIMEMultipart", "email.mime.multipart"), + MovedModule("email_mime_nonmultipart", "email.MIMENonMultipart", "email.mime.nonmultipart"), + MovedModule("email_mime_text", "email.MIMEText", "email.mime.text"), + MovedModule("email_mime_base", "email.MIMEBase", "email.mime.base"), + MovedModule("BaseHTTPServer", "BaseHTTPServer", "http.server"), + MovedModule("CGIHTTPServer", "CGIHTTPServer", "http.server"), + MovedModule("SimpleHTTPServer", "SimpleHTTPServer", "http.server"), + MovedModule("cPickle", "cPickle", "pickle"), + MovedModule("queue", "Queue"), + MovedModule("reprlib", "repr"), + MovedModule("socketserver", "SocketServer"), + MovedModule("_thread", "thread", "_thread"), + MovedModule("tkinter", "Tkinter"), + MovedModule("tkinter_dialog", "Dialog", "tkinter.dialog"), + MovedModule("tkinter_filedialog", "FileDialog", "tkinter.filedialog"), + MovedModule("tkinter_scrolledtext", "ScrolledText", "tkinter.scrolledtext"), + MovedModule("tkinter_simpledialog", "SimpleDialog", "tkinter.simpledialog"), + MovedModule("tkinter_tix", "Tix", "tkinter.tix"), + MovedModule("tkinter_ttk", "ttk", "tkinter.ttk"), + MovedModule("tkinter_constants", "Tkconstants", "tkinter.constants"), + MovedModule("tkinter_dnd", "Tkdnd", "tkinter.dnd"), + MovedModule("tkinter_colorchooser", "tkColorChooser", + "tkinter.colorchooser"), + MovedModule("tkinter_commondialog", "tkCommonDialog", + "tkinter.commondialog"), + MovedModule("tkinter_tkfiledialog", "tkFileDialog", "tkinter.filedialog"), + MovedModule("tkinter_font", "tkFont", "tkinter.font"), + MovedModule("tkinter_messagebox", "tkMessageBox", "tkinter.messagebox"), + MovedModule("tkinter_tksimpledialog", "tkSimpleDialog", + "tkinter.simpledialog"), + MovedModule("urllib_parse", __name__ + ".moves.urllib_parse", "urllib.parse"), + MovedModule("urllib_error", __name__ + ".moves.urllib_error", "urllib.error"), + MovedModule("urllib", __name__ + ".moves.urllib", __name__ + ".moves.urllib"), + MovedModule("urllib_robotparser", "robotparser", "urllib.robotparser"), + MovedModule("xmlrpc_client", "xmlrpclib", "xmlrpc.client"), + MovedModule("xmlrpc_server", "SimpleXMLRPCServer", "xmlrpc.server"), +] +# Add windows specific modules. +if sys.platform == "win32": + _moved_attributes += [ + MovedModule("winreg", "_winreg"), + ] + +for attr in _moved_attributes: + setattr(_MovedItems, attr.name, attr) + if isinstance(attr, MovedModule): + _importer._add_module(attr, "moves." + attr.name) +del attr + +_MovedItems._moved_attributes = _moved_attributes + +moves = _MovedItems(__name__ + ".moves") +_importer._add_module(moves, "moves") + + +class Module_six_moves_urllib_parse(_LazyModule): + + """Lazy loading of moved objects in six.moves.urllib_parse""" + + +_urllib_parse_moved_attributes = [ + MovedAttribute("ParseResult", "urlparse", "urllib.parse"), + MovedAttribute("SplitResult", "urlparse", "urllib.parse"), + MovedAttribute("parse_qs", "urlparse", "urllib.parse"), + MovedAttribute("parse_qsl", "urlparse", "urllib.parse"), + MovedAttribute("urldefrag", "urlparse", "urllib.parse"), + MovedAttribute("urljoin", "urlparse", "urllib.parse"), + MovedAttribute("urlparse", "urlparse", "urllib.parse"), + MovedAttribute("urlsplit", "urlparse", "urllib.parse"), + MovedAttribute("urlunparse", "urlparse", "urllib.parse"), + MovedAttribute("urlunsplit", "urlparse", "urllib.parse"), + MovedAttribute("quote", "urllib", "urllib.parse"), + MovedAttribute("quote_plus", "urllib", "urllib.parse"), + MovedAttribute("unquote", "urllib", "urllib.parse"), + MovedAttribute("unquote_plus", "urllib", "urllib.parse"), + MovedAttribute("urlencode", "urllib", "urllib.parse"), + MovedAttribute("splitquery", "urllib", "urllib.parse"), + MovedAttribute("splittag", "urllib", "urllib.parse"), + MovedAttribute("splituser", "urllib", "urllib.parse"), + MovedAttribute("uses_fragment", "urlparse", "urllib.parse"), + MovedAttribute("uses_netloc", "urlparse", "urllib.parse"), + MovedAttribute("uses_params", "urlparse", "urllib.parse"), + MovedAttribute("uses_query", "urlparse", "urllib.parse"), + MovedAttribute("uses_relative", "urlparse", "urllib.parse"), +] +for attr in _urllib_parse_moved_attributes: + setattr(Module_six_moves_urllib_parse, attr.name, attr) +del attr + +Module_six_moves_urllib_parse._moved_attributes = _urllib_parse_moved_attributes + +_importer._add_module(Module_six_moves_urllib_parse(__name__ + ".moves.urllib_parse"), + "moves.urllib_parse", "moves.urllib.parse") + + +class Module_six_moves_urllib_error(_LazyModule): + + """Lazy loading of moved objects in six.moves.urllib_error""" + + +_urllib_error_moved_attributes = [ + MovedAttribute("URLError", "urllib2", "urllib.error"), + MovedAttribute("HTTPError", "urllib2", "urllib.error"), + MovedAttribute("ContentTooShortError", "urllib", "urllib.error"), +] +for attr in _urllib_error_moved_attributes: + setattr(Module_six_moves_urllib_error, attr.name, attr) +del attr + +Module_six_moves_urllib_error._moved_attributes = _urllib_error_moved_attributes + +_importer._add_module(Module_six_moves_urllib_error(__name__ + ".moves.urllib.error"), + "moves.urllib_error", "moves.urllib.error") + + +class Module_six_moves_urllib_request(_LazyModule): + + """Lazy loading of moved objects in six.moves.urllib_request""" + + +_urllib_request_moved_attributes = [ + MovedAttribute("urlopen", "urllib2", "urllib.request"), + MovedAttribute("install_opener", "urllib2", "urllib.request"), + MovedAttribute("build_opener", "urllib2", "urllib.request"), + MovedAttribute("pathname2url", "urllib", "urllib.request"), + MovedAttribute("url2pathname", "urllib", "urllib.request"), + MovedAttribute("getproxies", "urllib", "urllib.request"), + MovedAttribute("Request", "urllib2", "urllib.request"), + MovedAttribute("OpenerDirector", "urllib2", "urllib.request"), + MovedAttribute("HTTPDefaultErrorHandler", "urllib2", "urllib.request"), + MovedAttribute("HTTPRedirectHandler", "urllib2", "urllib.request"), + MovedAttribute("HTTPCookieProcessor", "urllib2", "urllib.request"), + MovedAttribute("ProxyHandler", "urllib2", "urllib.request"), + MovedAttribute("BaseHandler", "urllib2", "urllib.request"), + MovedAttribute("HTTPPasswordMgr", "urllib2", "urllib.request"), + MovedAttribute("HTTPPasswordMgrWithDefaultRealm", "urllib2", "urllib.request"), + MovedAttribute("AbstractBasicAuthHandler", "urllib2", "urllib.request"), + MovedAttribute("HTTPBasicAuthHandler", "urllib2", "urllib.request"), + MovedAttribute("ProxyBasicAuthHandler", "urllib2", "urllib.request"), + MovedAttribute("AbstractDigestAuthHandler", "urllib2", "urllib.request"), + MovedAttribute("HTTPDigestAuthHandler", "urllib2", "urllib.request"), + MovedAttribute("ProxyDigestAuthHandler", "urllib2", "urllib.request"), + MovedAttribute("HTTPHandler", "urllib2", "urllib.request"), + MovedAttribute("HTTPSHandler", "urllib2", "urllib.request"), + MovedAttribute("FileHandler", "urllib2", "urllib.request"), + MovedAttribute("FTPHandler", "urllib2", "urllib.request"), + MovedAttribute("CacheFTPHandler", "urllib2", "urllib.request"), + MovedAttribute("UnknownHandler", "urllib2", "urllib.request"), + MovedAttribute("HTTPErrorProcessor", "urllib2", "urllib.request"), + MovedAttribute("urlretrieve", "urllib", "urllib.request"), + MovedAttribute("urlcleanup", "urllib", "urllib.request"), + MovedAttribute("URLopener", "urllib", "urllib.request"), + MovedAttribute("FancyURLopener", "urllib", "urllib.request"), + MovedAttribute("proxy_bypass", "urllib", "urllib.request"), +] +for attr in _urllib_request_moved_attributes: + setattr(Module_six_moves_urllib_request, attr.name, attr) +del attr + +Module_six_moves_urllib_request._moved_attributes = _urllib_request_moved_attributes + +_importer._add_module(Module_six_moves_urllib_request(__name__ + ".moves.urllib.request"), + "moves.urllib_request", "moves.urllib.request") + + +class Module_six_moves_urllib_response(_LazyModule): + + """Lazy loading of moved objects in six.moves.urllib_response""" + + +_urllib_response_moved_attributes = [ + MovedAttribute("addbase", "urllib", "urllib.response"), + MovedAttribute("addclosehook", "urllib", "urllib.response"), + MovedAttribute("addinfo", "urllib", "urllib.response"), + MovedAttribute("addinfourl", "urllib", "urllib.response"), +] +for attr in _urllib_response_moved_attributes: + setattr(Module_six_moves_urllib_response, attr.name, attr) +del attr + +Module_six_moves_urllib_response._moved_attributes = _urllib_response_moved_attributes + +_importer._add_module(Module_six_moves_urllib_response(__name__ + ".moves.urllib.response"), + "moves.urllib_response", "moves.urllib.response") + + +class Module_six_moves_urllib_robotparser(_LazyModule): + + """Lazy loading of moved objects in six.moves.urllib_robotparser""" + + +_urllib_robotparser_moved_attributes = [ + MovedAttribute("RobotFileParser", "robotparser", "urllib.robotparser"), +] +for attr in _urllib_robotparser_moved_attributes: + setattr(Module_six_moves_urllib_robotparser, attr.name, attr) +del attr + +Module_six_moves_urllib_robotparser._moved_attributes = _urllib_robotparser_moved_attributes + +_importer._add_module(Module_six_moves_urllib_robotparser(__name__ + ".moves.urllib.robotparser"), + "moves.urllib_robotparser", "moves.urllib.robotparser") + + +class Module_six_moves_urllib(types.ModuleType): + + """Create a six.moves.urllib namespace that resembles the Python 3 namespace""" + __path__ = [] # mark as package + parse = _importer._get_module("moves.urllib_parse") + error = _importer._get_module("moves.urllib_error") + request = _importer._get_module("moves.urllib_request") + response = _importer._get_module("moves.urllib_response") + robotparser = _importer._get_module("moves.urllib_robotparser") + + def __dir__(self): + return ['parse', 'error', 'request', 'response', 'robotparser'] + +_importer._add_module(Module_six_moves_urllib(__name__ + ".moves.urllib"), + "moves.urllib") + + +def add_move(move): + """Add an item to six.moves.""" + setattr(_MovedItems, move.name, move) + + +def remove_move(name): + """Remove item from six.moves.""" + try: + delattr(_MovedItems, name) + except AttributeError: + try: + del moves.__dict__[name] + except KeyError: + raise AttributeError("no such move, %r" % (name,)) + + +if PY3: + _meth_func = "__func__" + _meth_self = "__self__" + + _func_closure = "__closure__" + _func_code = "__code__" + _func_defaults = "__defaults__" + _func_globals = "__globals__" +else: + _meth_func = "im_func" + _meth_self = "im_self" + + _func_closure = "func_closure" + _func_code = "func_code" + _func_defaults = "func_defaults" + _func_globals = "func_globals" + + +try: + advance_iterator = next +except NameError: + def advance_iterator(it): + return it.next() +next = advance_iterator + + +try: + callable = callable +except NameError: + def callable(obj): + return any("__call__" in klass.__dict__ for klass in type(obj).__mro__) + + +if PY3: + def get_unbound_function(unbound): + return unbound + + create_bound_method = types.MethodType + + def create_unbound_method(func, cls): + return func + + Iterator = object +else: + def get_unbound_function(unbound): + return unbound.im_func + + def create_bound_method(func, obj): + return types.MethodType(func, obj, obj.__class__) + + def create_unbound_method(func, cls): + return types.MethodType(func, None, cls) + + class Iterator(object): + + def next(self): + return type(self).__next__(self) + + callable = callable +_add_doc(get_unbound_function, + """Get the function out of a possibly unbound function""") + + +get_method_function = operator.attrgetter(_meth_func) +get_method_self = operator.attrgetter(_meth_self) +get_function_closure = operator.attrgetter(_func_closure) +get_function_code = operator.attrgetter(_func_code) +get_function_defaults = operator.attrgetter(_func_defaults) +get_function_globals = operator.attrgetter(_func_globals) + + +if PY3: + def iterkeys(d, **kw): + return iter(d.keys(**kw)) + + def itervalues(d, **kw): + return iter(d.values(**kw)) + + def iteritems(d, **kw): + return iter(d.items(**kw)) + + def iterlists(d, **kw): + return iter(d.lists(**kw)) + + viewkeys = operator.methodcaller("keys") + + viewvalues = operator.methodcaller("values") + + viewitems = operator.methodcaller("items") +else: + def iterkeys(d, **kw): + return d.iterkeys(**kw) + + def itervalues(d, **kw): + return d.itervalues(**kw) + + def iteritems(d, **kw): + return d.iteritems(**kw) + + def iterlists(d, **kw): + return d.iterlists(**kw) + + viewkeys = operator.methodcaller("viewkeys") + + viewvalues = operator.methodcaller("viewvalues") + + viewitems = operator.methodcaller("viewitems") + +_add_doc(iterkeys, "Return an iterator over the keys of a dictionary.") +_add_doc(itervalues, "Return an iterator over the values of a dictionary.") +_add_doc(iteritems, + "Return an iterator over the (key, value) pairs of a dictionary.") +_add_doc(iterlists, + "Return an iterator over the (key, [values]) pairs of a dictionary.") + + +if PY3: + def b(s): + return s.encode("latin-1") + + def u(s): + return s + unichr = chr + import struct + int2byte = struct.Struct(">B").pack + del struct + byte2int = operator.itemgetter(0) + indexbytes = operator.getitem + iterbytes = iter + import io + StringIO = io.StringIO + BytesIO = io.BytesIO + _assertCountEqual = "assertCountEqual" + if sys.version_info[1] <= 1: + _assertRaisesRegex = "assertRaisesRegexp" + _assertRegex = "assertRegexpMatches" + else: + _assertRaisesRegex = "assertRaisesRegex" + _assertRegex = "assertRegex" +else: + def b(s): + return s + # Workaround for standalone backslash + + def u(s): + return unicode(s.replace(r'\\', r'\\\\'), "unicode_escape") + unichr = unichr + int2byte = chr + + def byte2int(bs): + return ord(bs[0]) + + def indexbytes(buf, i): + return ord(buf[i]) + iterbytes = functools.partial(itertools.imap, ord) + import StringIO + StringIO = BytesIO = StringIO.StringIO + _assertCountEqual = "assertItemsEqual" + _assertRaisesRegex = "assertRaisesRegexp" + _assertRegex = "assertRegexpMatches" +_add_doc(b, """Byte literal""") +_add_doc(u, """Text literal""") + + +def assertCountEqual(self, *args, **kwargs): + return getattr(self, _assertCountEqual)(*args, **kwargs) + + +def assertRaisesRegex(self, *args, **kwargs): + return getattr(self, _assertRaisesRegex)(*args, **kwargs) + + +def assertRegex(self, *args, **kwargs): + return getattr(self, _assertRegex)(*args, **kwargs) + + +if PY3: + exec_ = getattr(moves.builtins, "exec") + + def reraise(tp, value, tb=None): + if value is None: + value = tp() + if value.__traceback__ is not tb: + raise value.with_traceback(tb) + raise value + +else: + def exec_(_code_, _globs_=None, _locs_=None): + """Execute code in a namespace.""" + if _globs_ is None: + frame = sys._getframe(1) + _globs_ = frame.f_globals + if _locs_ is None: + _locs_ = frame.f_locals + del frame + elif _locs_ is None: + _locs_ = _globs_ + exec("""exec _code_ in _globs_, _locs_""") + + exec_("""def reraise(tp, value, tb=None): + raise tp, value, tb +""") + + +if sys.version_info[:2] == (3, 2): + exec_("""def raise_from(value, from_value): + if from_value is None: + raise value + raise value from from_value +""") +elif sys.version_info[:2] > (3, 2): + exec_("""def raise_from(value, from_value): + raise value from from_value +""") +else: + def raise_from(value, from_value): + raise value + + +print_ = getattr(moves.builtins, "print", None) +if print_ is None: + def print_(*args, **kwargs): + """The new-style print function for Python 2.4 and 2.5.""" + fp = kwargs.pop("file", sys.stdout) + if fp is None: + return + + def write(data): + if not isinstance(data, basestring): + data = str(data) + # If the file has an encoding, encode unicode with it. + if (isinstance(fp, file) and + isinstance(data, unicode) and + fp.encoding is not None): + errors = getattr(fp, "errors", None) + if errors is None: + errors = "strict" + data = data.encode(fp.encoding, errors) + fp.write(data) + want_unicode = False + sep = kwargs.pop("sep", None) + if sep is not None: + if isinstance(sep, unicode): + want_unicode = True + elif not isinstance(sep, str): + raise TypeError("sep must be None or a string") + end = kwargs.pop("end", None) + if end is not None: + if isinstance(end, unicode): + want_unicode = True + elif not isinstance(end, str): + raise TypeError("end must be None or a string") + if kwargs: + raise TypeError("invalid keyword arguments to print()") + if not want_unicode: + for arg in args: + if isinstance(arg, unicode): + want_unicode = True + break + if want_unicode: + newline = unicode("\n") + space = unicode(" ") + else: + newline = "\n" + space = " " + if sep is None: + sep = space + if end is None: + end = newline + for i, arg in enumerate(args): + if i: + write(sep) + write(arg) + write(end) +if sys.version_info[:2] < (3, 3): + _print = print_ + + def print_(*args, **kwargs): + fp = kwargs.get("file", sys.stdout) + flush = kwargs.pop("flush", False) + _print(*args, **kwargs) + if flush and fp is not None: + fp.flush() + +_add_doc(reraise, """Reraise an exception.""") + +if sys.version_info[0:2] < (3, 4): + def wraps(wrapped, assigned=functools.WRAPPER_ASSIGNMENTS, + updated=functools.WRAPPER_UPDATES): + def wrapper(f): + f = functools.wraps(wrapped, assigned, updated)(f) + f.__wrapped__ = wrapped + return f + return wrapper +else: + wraps = functools.wraps + + +def with_metaclass(meta, *bases): + """Create a base class with a metaclass.""" + # This requires a bit of explanation: the basic idea is to make a dummy + # metaclass for one level of class instantiation that replaces itself with + # the actual metaclass. + class metaclass(meta): + + def __new__(cls, name, this_bases, d): + return meta(name, bases, d) + return type.__new__(metaclass, 'temporary_class', (), {}) + + +def add_metaclass(metaclass): + """Class decorator for creating a class with a metaclass.""" + def wrapper(cls): + orig_vars = cls.__dict__.copy() + slots = orig_vars.get('__slots__') + if slots is not None: + if isinstance(slots, str): + slots = [slots] + for slots_var in slots: + orig_vars.pop(slots_var) + orig_vars.pop('__dict__', None) + orig_vars.pop('__weakref__', None) + return metaclass(cls.__name__, cls.__bases__, orig_vars) + return wrapper + + +def python_2_unicode_compatible(klass): + """ + A decorator that defines __unicode__ and __str__ methods under Python 2. + Under Python 3 it does nothing. + + To support Python 2 and 3 with a single code base, define a __str__ method + returning text and apply this decorator to the class. + """ + if PY2: + if '__str__' not in klass.__dict__: + raise ValueError("@python_2_unicode_compatible cannot be applied " + "to %s because it doesn't define __str__()." % + klass.__name__) + klass.__unicode__ = klass.__str__ + klass.__str__ = lambda self: self.__unicode__().encode('utf-8') + return klass + + +# Complete the moves implementation. +# This code is at the end of this module to speed up module loading. +# Turn this module into a package. +__path__ = [] # required for PEP 302 and PEP 451 +__package__ = __name__ # see PEP 366 @ReservedAssignment +if globals().get("__spec__") is not None: + __spec__.submodule_search_locations = [] # PEP 451 @UndefinedVariable +# Remove other six meta path importers, since they cause problems. This can +# happen if six is removed from sys.modules and then reloaded. (Setuptools does +# this for some reason.) +if sys.meta_path: + for i, importer in enumerate(sys.meta_path): + # Here's some real nastiness: Another "instance" of the six module might + # be floating around. Therefore, we can't use isinstance() to check for + # the six meta path importer, since the other six instance will have + # inserted an importer with different class. + if (type(importer).__name__ == "_SixMetaPathImporter" and + importer.name == __name__): + del sys.meta_path[i] + break + del i, importer +# Finally, add the importer to the meta path import hook. +sys.meta_path.append(_importer) diff --git a/week-0/day-3/my_todo_app/venvironment/lib/python3.6/site-packages/setuptools/archive_util.py b/week-0/day-3/my_todo_app/venvironment/lib/python3.6/site-packages/setuptools/archive_util.py new file mode 100644 index 00000000..81436044 --- /dev/null +++ b/week-0/day-3/my_todo_app/venvironment/lib/python3.6/site-packages/setuptools/archive_util.py @@ -0,0 +1,173 @@ +"""Utilities for extracting common archive formats""" + +import zipfile +import tarfile +import os +import shutil +import posixpath +import contextlib +from distutils.errors import DistutilsError + +from pkg_resources import ensure_directory + +__all__ = [ + "unpack_archive", "unpack_zipfile", "unpack_tarfile", "default_filter", + "UnrecognizedFormat", "extraction_drivers", "unpack_directory", +] + + +class UnrecognizedFormat(DistutilsError): + """Couldn't recognize the archive type""" + + +def default_filter(src, dst): + """The default progress/filter callback; returns True for all files""" + return dst + + +def unpack_archive(filename, extract_dir, progress_filter=default_filter, + drivers=None): + """Unpack `filename` to `extract_dir`, or raise ``UnrecognizedFormat`` + + `progress_filter` is a function taking two arguments: a source path + internal to the archive ('/'-separated), and a filesystem path where it + will be extracted. The callback must return the desired extract path + (which may be the same as the one passed in), or else ``None`` to skip + that file or directory. The callback can thus be used to report on the + progress of the extraction, as well as to filter the items extracted or + alter their extraction paths. + + `drivers`, if supplied, must be a non-empty sequence of functions with the + same signature as this function (minus the `drivers` argument), that raise + ``UnrecognizedFormat`` if they do not support extracting the designated + archive type. The `drivers` are tried in sequence until one is found that + does not raise an error, or until all are exhausted (in which case + ``UnrecognizedFormat`` is raised). If you do not supply a sequence of + drivers, the module's ``extraction_drivers`` constant will be used, which + means that ``unpack_zipfile`` and ``unpack_tarfile`` will be tried, in that + order. + """ + for driver in drivers or extraction_drivers: + try: + driver(filename, extract_dir, progress_filter) + except UnrecognizedFormat: + continue + else: + return + else: + raise UnrecognizedFormat( + "Not a recognized archive type: %s" % filename + ) + + +def unpack_directory(filename, extract_dir, progress_filter=default_filter): + """"Unpack" a directory, using the same interface as for archives + + Raises ``UnrecognizedFormat`` if `filename` is not a directory + """ + if not os.path.isdir(filename): + raise UnrecognizedFormat("%s is not a directory" % filename) + + paths = { + filename: ('', extract_dir), + } + for base, dirs, files in os.walk(filename): + src, dst = paths[base] + for d in dirs: + paths[os.path.join(base, d)] = src + d + '/', os.path.join(dst, d) + for f in files: + target = os.path.join(dst, f) + target = progress_filter(src + f, target) + if not target: + # skip non-files + continue + ensure_directory(target) + f = os.path.join(base, f) + shutil.copyfile(f, target) + shutil.copystat(f, target) + + +def unpack_zipfile(filename, extract_dir, progress_filter=default_filter): + """Unpack zip `filename` to `extract_dir` + + Raises ``UnrecognizedFormat`` if `filename` is not a zipfile (as determined + by ``zipfile.is_zipfile()``). See ``unpack_archive()`` for an explanation + of the `progress_filter` argument. + """ + + if not zipfile.is_zipfile(filename): + raise UnrecognizedFormat("%s is not a zip file" % (filename,)) + + with zipfile.ZipFile(filename) as z: + for info in z.infolist(): + name = info.filename + + # don't extract absolute paths or ones with .. in them + if name.startswith('/') or '..' in name.split('/'): + continue + + target = os.path.join(extract_dir, *name.split('/')) + target = progress_filter(name, target) + if not target: + continue + if name.endswith('/'): + # directory + ensure_directory(target) + else: + # file + ensure_directory(target) + data = z.read(info.filename) + with open(target, 'wb') as f: + f.write(data) + unix_attributes = info.external_attr >> 16 + if unix_attributes: + os.chmod(target, unix_attributes) + + +def unpack_tarfile(filename, extract_dir, progress_filter=default_filter): + """Unpack tar/tar.gz/tar.bz2 `filename` to `extract_dir` + + Raises ``UnrecognizedFormat`` if `filename` is not a tarfile (as determined + by ``tarfile.open()``). See ``unpack_archive()`` for an explanation + of the `progress_filter` argument. + """ + try: + tarobj = tarfile.open(filename) + except tarfile.TarError: + raise UnrecognizedFormat( + "%s is not a compressed or uncompressed tar file" % (filename,) + ) + with contextlib.closing(tarobj): + # don't do any chowning! + tarobj.chown = lambda *args: None + for member in tarobj: + name = member.name + # don't extract absolute paths or ones with .. in them + if not name.startswith('/') and '..' not in name.split('/'): + prelim_dst = os.path.join(extract_dir, *name.split('/')) + + # resolve any links and to extract the link targets as normal + # files + while member is not None and (member.islnk() or member.issym()): + linkpath = member.linkname + if member.issym(): + base = posixpath.dirname(member.name) + linkpath = posixpath.join(base, linkpath) + linkpath = posixpath.normpath(linkpath) + member = tarobj._getmember(linkpath) + + if member is not None and (member.isfile() or member.isdir()): + final_dst = progress_filter(name, prelim_dst) + if final_dst: + if final_dst.endswith(os.sep): + final_dst = final_dst[:-1] + try: + # XXX Ugh + tarobj._extract_member(member, final_dst) + except tarfile.ExtractError: + # chown/chmod/mkfifo/mknode/makedev failed + pass + return True + + +extraction_drivers = unpack_directory, unpack_zipfile, unpack_tarfile diff --git a/week-0/day-3/my_todo_app/venvironment/lib/python3.6/site-packages/setuptools/build_meta.py b/week-0/day-3/my_todo_app/venvironment/lib/python3.6/site-packages/setuptools/build_meta.py new file mode 100644 index 00000000..609ea1e5 --- /dev/null +++ b/week-0/day-3/my_todo_app/venvironment/lib/python3.6/site-packages/setuptools/build_meta.py @@ -0,0 +1,172 @@ +"""A PEP 517 interface to setuptools + +Previously, when a user or a command line tool (let's call it a "frontend") +needed to make a request of setuptools to take a certain action, for +example, generating a list of installation requirements, the frontend would +would call "setup.py egg_info" or "setup.py bdist_wheel" on the command line. + +PEP 517 defines a different method of interfacing with setuptools. Rather +than calling "setup.py" directly, the frontend should: + + 1. Set the current directory to the directory with a setup.py file + 2. Import this module into a safe python interpreter (one in which + setuptools can potentially set global variables or crash hard). + 3. Call one of the functions defined in PEP 517. + +What each function does is defined in PEP 517. However, here is a "casual" +definition of the functions (this definition should not be relied on for +bug reports or API stability): + + - `build_wheel`: build a wheel in the folder and return the basename + - `get_requires_for_build_wheel`: get the `setup_requires` to build + - `prepare_metadata_for_build_wheel`: get the `install_requires` + - `build_sdist`: build an sdist in the folder and return the basename + - `get_requires_for_build_sdist`: get the `setup_requires` to build + +Again, this is not a formal definition! Just a "taste" of the module. +""" + +import os +import sys +import tokenize +import shutil +import contextlib + +import setuptools +import distutils + + +class SetupRequirementsError(BaseException): + def __init__(self, specifiers): + self.specifiers = specifiers + + +class Distribution(setuptools.dist.Distribution): + def fetch_build_eggs(self, specifiers): + raise SetupRequirementsError(specifiers) + + @classmethod + @contextlib.contextmanager + def patch(cls): + """ + Replace + distutils.dist.Distribution with this class + for the duration of this context. + """ + orig = distutils.core.Distribution + distutils.core.Distribution = cls + try: + yield + finally: + distutils.core.Distribution = orig + + +def _run_setup(setup_script='setup.py'): + # Note that we can reuse our build directory between calls + # Correctness comes first, then optimization later + __file__ = setup_script + __name__ = '__main__' + f = getattr(tokenize, 'open', open)(__file__) + code = f.read().replace('\\r\\n', '\\n') + f.close() + exec(compile(code, __file__, 'exec'), locals()) + + +def _fix_config(config_settings): + config_settings = config_settings or {} + config_settings.setdefault('--global-option', []) + return config_settings + + +def _get_build_requires(config_settings): + config_settings = _fix_config(config_settings) + requirements = ['setuptools', 'wheel'] + + sys.argv = sys.argv[:1] + ['egg_info'] + \ + config_settings["--global-option"] + try: + with Distribution.patch(): + _run_setup() + except SetupRequirementsError as e: + requirements += e.specifiers + + return requirements + + +def _get_immediate_subdirectories(a_dir): + return [name for name in os.listdir(a_dir) + if os.path.isdir(os.path.join(a_dir, name))] + + +def get_requires_for_build_wheel(config_settings=None): + config_settings = _fix_config(config_settings) + return _get_build_requires(config_settings) + + +def get_requires_for_build_sdist(config_settings=None): + config_settings = _fix_config(config_settings) + return _get_build_requires(config_settings) + + +def prepare_metadata_for_build_wheel(metadata_directory, config_settings=None): + sys.argv = sys.argv[:1] + ['dist_info', '--egg-base', metadata_directory] + _run_setup() + + dist_info_directory = metadata_directory + while True: + dist_infos = [f for f in os.listdir(dist_info_directory) + if f.endswith('.dist-info')] + + if len(dist_infos) == 0 and \ + len(_get_immediate_subdirectories(dist_info_directory)) == 1: + dist_info_directory = os.path.join( + dist_info_directory, os.listdir(dist_info_directory)[0]) + continue + + assert len(dist_infos) == 1 + break + + # PEP 517 requires that the .dist-info directory be placed in the + # metadata_directory. To comply, we MUST copy the directory to the root + if dist_info_directory != metadata_directory: + shutil.move( + os.path.join(dist_info_directory, dist_infos[0]), + metadata_directory) + shutil.rmtree(dist_info_directory, ignore_errors=True) + + return dist_infos[0] + + +def build_wheel(wheel_directory, config_settings=None, + metadata_directory=None): + config_settings = _fix_config(config_settings) + wheel_directory = os.path.abspath(wheel_directory) + sys.argv = sys.argv[:1] + ['bdist_wheel'] + \ + config_settings["--global-option"] + _run_setup() + if wheel_directory != 'dist': + shutil.rmtree(wheel_directory) + shutil.copytree('dist', wheel_directory) + + wheels = [f for f in os.listdir(wheel_directory) + if f.endswith('.whl')] + + assert len(wheels) == 1 + return wheels[0] + + +def build_sdist(sdist_directory, config_settings=None): + config_settings = _fix_config(config_settings) + sdist_directory = os.path.abspath(sdist_directory) + sys.argv = sys.argv[:1] + ['sdist'] + \ + config_settings["--global-option"] + _run_setup() + if sdist_directory != 'dist': + shutil.rmtree(sdist_directory) + shutil.copytree('dist', sdist_directory) + + sdists = [f for f in os.listdir(sdist_directory) + if f.endswith('.tar.gz')] + + assert len(sdists) == 1 + return sdists[0] diff --git a/week-0/day-3/my_todo_app/venvironment/lib/python3.6/site-packages/setuptools/cli-32.exe b/week-0/day-3/my_todo_app/venvironment/lib/python3.6/site-packages/setuptools/cli-32.exe new file mode 100644 index 0000000000000000000000000000000000000000..b1487b7819e7286577a043c7726fbe0ca1543083 GIT binary patch literal 65536 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[c}i<OXTz6k>I#RErv3nvcIClH@!{vM)zJ_weD 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 literal 0 HcmV?d00001 diff --git a/week-0/day-3/my_todo_app/venvironment/lib/python3.6/site-packages/setuptools/cli-64.exe b/week-0/day-3/my_todo_app/venvironment/lib/python3.6/site-packages/setuptools/cli-64.exe new file mode 100644 index 0000000000000000000000000000000000000000..675e6bf3743f3d3011c238657e7128ee9960ef7f GIT binary patch literal 74752 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 &sjKl@1{;unAiW2w^OujNoW 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 literal 0 HcmV?d00001 diff --git a/week-0/day-3/my_todo_app/venvironment/lib/python3.6/site-packages/setuptools/cli.exe b/week-0/day-3/my_todo_app/venvironment/lib/python3.6/site-packages/setuptools/cli.exe new file mode 100644 index 0000000000000000000000000000000000000000..b1487b7819e7286577a043c7726fbe0ca1543083 GIT binary patch literal 65536 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[c}i<OXTz6k>I#RErv3nvcIClH@!{vM)zJ_weD zu_-L8NU*G<xQC7$Bg`f~d>lC{d0L!!VW10^+~>qmNB~Y8H+F}!P8_d(PpvjzMJQmr z)F<LB!IdzF`7%cck^aLb_J<@DD#CfB0B$E^bzV@-Vr`q!&`=<s^68_Wa_GZ_v^?aY zU=VZGXAzm5x{LcyVkUd8JxnNsqtS!3fw-nje@5tui@0AmI$b-*P5O7)s<z9AVj!{a zusK!aLirXkGmKBs9|=}}+<^)RB1ao<^{^>kX;2B~<|3JfJeWv@IXo~nTtp$}Gjie> zs8UDG*kid(%i5QCBp~MA;#I186PI-nZ&k7!k8BiLJSuR>h7ArSYHD~<iO|JiNP|OD zR=9Lm@@Ua+Eq87EAwAZBPGrH*)zP)xEF>B0I<PUu3WRluor4HwG59U@*GT3C4#)*> z=T6L{zqglekt0JjG5z&|GWb4?+B5+{p^fgTufl_KesA{@I&g7rNq==^SGc5GcM%$N zDBG2)qExz*Z;jGN_-iD-y8i2BCq)p}2lKcspLg>w-;qwg(()HXrZa3jd!}spuwBVX zwmX!iwU<Qo&ds@10tJ4pnneT?LI)M|HS1v7YY$x9Bv-SsJ$Cl+xPAV;6Eqk-srxG9 z{LT5_#k!V#{GO}ibh%Xvw5jxHs@yzGY~@?`(yJD$GqsX;X$pypI5DT^o5eVu9#Z@z zw!tumU}_j8#vZXTB&Vb!;K(WYBw))aIfHo=I@urFFfxYS9PyXWVFQN5U;5Dw%tIz$ zw`nTQR_c;mZr;Y5QwPf3_^KR#GvcZKkFXD~jQGWdi~_bGh!>?#7uoQnunw|OlU~+c z^L5Ak3zWhaA4B^FhMMboO0k*O2GL)lD9_<$5b>czbCvKcSt+u*gA*=%dH>Q-Bc11h zzO7jbXN)&5mBf=w2anK6P$YcJZQoWa2#E!v{hFKxxm7Fc)Fc9iC35{|Lp7bIDjrhC zgMiGf4r2yquH{U7WdMio;XS4Y%Ry{q7#kv#gZ07i`7eo#MMh_o68E*Fd_#nrri^4b zX+slbsv>+8pmck%oLDU<yTk`c&RTk8mVQAOK~qMQ#2raos*zaqlvJZo>L()8NRJ#Z z8DReF_eq2zsjEXGs)yS{k}ykS1B!ZrY0f6O65^lslJv3g&wfpDg-&EwF8wrc=hSwm zPlV&n%%yE_@onOwK?)`GNJ6MQ0drMuBYWCH5dkD)uErh@*k}#GcFl<-;;TN+5vb|b zctkCv;*zL7f)A;QuO%(81r0)&aUz4EQu;kA!k@7i8RZ)koMaWW`5cC6n@{w!!J$5d zx}l)4VP4xL=BKi&c^{n_Qi`q@G{vimblcVR53b#<Dz&@nl0LRIeY=p^I1%{g=J)$y zJ4tny{}tcKG0i7qLLJtU;jl;LnJu8bQak(kB&;UDjom{#=dp=&3s}YXYz3C()*?Ie zpOr>*X$FUOQFm!A8JKahNSiBdY+x3bJZfD8n{--FLUM4+Mx@{vM<W!B9QJEa7>_ep zkk)U=K8R(rhU(X_faI*ZO}cn`5t*O}lx^j8|0rt-)o=Axn^DGcQTi!#7hxLTq?|HQ zB;T6(nrsCeYK0_o%)IO+CP{n#+|;w1ZmvD2c-J{i88bp63RjyKOE!B!D3U{RCs*Zh z&^%65VM(J34230U4bHS}M@SYS9TEK}c%)2<$h1|T;##zRtjRt@#1T%J=kAhOiw+Z% z7DpyWVK@6%9K^uVD9LDKj)dR^aZK6$@Lt)l;sj@`QSzBm{TlLG{JKM_^60Zr2w~nr zr>P-BaV8OjjWm?hQ3$ZCx+lyD%q`~4iNF9xWKi$t&pzBhwN9Dq-o^v9@=abLR#|<P zZAhQVQAqt{KX8b!o72`jV*h~V{I<6~6`|CSYi!tcFRq-OP_ri!l#8;keBk$FyRh37 zh-vx<nho1V<uSlQEH;(ry7_afSZop_PK$8boQKoq+i)shoyMOs4}aFK<j<xGJnq14 zb2)CC*WtE#b4An68qy4#ciQ16Pbjcq3r`~(syir#2qbbvYtKWddcXwdfk_9bi9C9n ze)1pT^3siP-~5MsCpR}_o2eh^LneJBm*p>KZqkLal4YCRR9VNhIM|rBqmzzcImvcx z66fD`zj4}M-A;gyA17cSC-oI$`q?*q&8~)Qv|C#(aSFd|hYbf}FFVB?n3Q?Svt+Td z#AW4x=9X}?aizE|`r{}3l-H&b6-{_j#STR!lD001vu;K>KT;*^ChCevBwCMFpg{JI zv``4YsjK1&142Pl%%A#u3rbGso1<_fngd1`+}!pMu@z5Me_5UFxiPYKqFL4_`WXmY zeWJrZUKzrrMuBcHupOq4Wr12sE*T-*CXh;FA=)Q+BMN(?DJ!kq?%Ww`xlG3e;lz2t zY?tl;i?gHO_79VwJ_cThq^>FqRUPlqS?IuI+CfSbNkv_1l~7eGaCwRmuOF|ic1ac2 z9ldo$TN~LhX~J01P75nyi&d8=Y@QNZ5e<=6v_R3rM}nN}5ae`^LV&sAD<=;*z=!~` zvJ0@i!orMuT*5kyXNzJnxfU!+#FTW(syy@yj7XX8#zD_9TWBSg(;KZ25VO;is;-&R zf(29n3U}agkC`j4sjX{=`D1EkCC@enOA~v{GOLYQKAdPN6+?W+QE4fLMhrW4RG<SI z@?qI-KY>bH5^K(rm4T}`=ra<6GP2}cRBE9K8^r(O+ZvKpJDL~qNguPmwQZp-8m7V@ zN^KFU8@Q*E7UJswZD=OYtct4KqA&NDKSOfc-#M>@o#)4;YLqtENdFS^3K9&dFBr|M z*loqE3X2sMmi8hv#7H5<kgna*Z>rqGc_y=ShEbHT^m7S`?4d%B+(-6dYGI-*t5E+< z^P3gqvBIHjFQNKiDKj-p;Y*MmMAXOK^8{gVhrBn?Un}%9(JqaGPiann?Ll$aX-{n1 z!AnT<v!xN*zo+dH+)yR$d)}fNUUOcJ)Xz$%vH5mur0%L;@p((;IW$raH52Q@7``Z{ z?rO>WyjwZ7y=hrziEYVZVX)-}D^!8a+Bc<5#*3h1xvWqS7I$WL>iwNNvp;P<;TX`| zOF6ZibFB4T(YJC~mj~?Ev*ln|9sgYVFTcLiEi{YE;!ZWj>X*aK9|va;HulW-D`RH9 zw=O#R&of(j+rwMS%oCi;+oFskQ}@q2q4x)O3<fKs&%WtzzFD};-G{Hxx)V?F$WHWF z7(*i07&g=2&}`P4G>k5e6yDx`kLvQs@M`+D)vGA+`X6%Dl9YOA?Qrurfg>XqT9E@^ zgWxOT&hX+yo>7=HCb!3BO$p54I3{j@qbN!+nu>Ti*O~vw`5RU!f_JXS+*x#-zFp@m zr}GGVhgT1=p-TFp#dtAVjM3QdpDoi{l*z?1s=d~(E;Fkn=*i8+oB<M)E&5W?I^M)M zknOw+hdKDcP%Q}tuai)WoEa!7&-Iumsf3KA>cJ3Ib?Vh+rZWNZ$pO`dl8LcBv_cAA zc18lYB|rc<0u%wEdTGEup|%_S`L>@ui4LTkvnNApm<q=y*er!iCv8V>#>+b4WIF<} z^J}=w7L&$J%unXCb|Wy{z3WVlMDNhz3o7S-3)6oqjx)7WX0HTEH<C-Do)>{-=9>q+ zXXtoVPHKfVJMk8bt&h;MII}u~0l79^#`5CdW6Ef!eb|E&Q{UJ$n$yP;^Jd)qhw~ej zB?c~nN*%0zm%$}MD%|<q*x?^2$-sGY)_qDIsjoQeKH{k^*%_~Mm`JG>VZuS8W+Qtf zS+Uu?;oSPL<h#s;p3UgxZ3c;@9(LZhh9?&RH`z;Ufi?^GL|RbrQ|i$u#k>L}G`jMH zn3`(J{6K%B(Gykos(!d}z)Wr!%sjC6=V@s)qG1MJN~uoVlq{jeI#XKPMI;@L^`RBZ z<X%K$e<C_&9&p~HQ%fuI$-p5?U{jDsR}QoVqzzw}E77mP5v&U`27f1F&0F8zlxE2) ze=M@fh-;2;q_!ewec2frY%fKQkh6Y#Ck=~JBu;z6vOFXzd7O1mkt`yaC)8Gn>0Fhm zEI{|uQr0z1gk4W{mj*%4Z*00DBL5ko{4X}2{Dl0wAi#aSmq_r~FBHL|;}P&0k>OU! zhx64h5vSKwffV0W4JQs2dFBrfQx(B{AK=BGc`U!}S&BFnE6QSvw?`~m^}8j(4$IzQ z_WzjR?fD!VI8Aa=N;O96$f<JeDN}@@k24)dnpa7nV{o~|y480HWd%qi09M-w5HA7H z5t)dJA9OeU2(Ddz+nofIxgaM#sfN{v)}n+p872aEFyGb(<(TUTpJ(1Bv9RRP<lWbe zn*X9W;yA^EqlAv1#u2Gg|1wrNw~{@z1W#o_GFNuVYLs|BsZ*hkg_h`Il0YDiCHm+W zmS~Y0wwCC%sMd>IWzW@IV2KtfOm4MwFVU~FM5pwL+-yY-+$4mvEEjvjP+5JUm8n(w zTE>U0(q9W!VAi2soP~_07HUw%Pt_tTYxD^79a6Fw-(PjP4xwLxv3Ycv!%RV}m`xvC zX`nx*(H@IF+EJ)392Ul)-t@Oj>L>VGb7%C~V}eWde6yYkCcYR2>L5_BFiz*D#3I_* zY)|v0XvW#xv=Y0=d;t!!=&NUW2H8t2>2H>>rUwQga=@Hd8s$Z+x+rNk0%K7J*cGvn za#2GFTwHgcx}(hY&AoeJJ>OtvvdouZfGLkWz?5@JX6KrhfDJ0`xz(qU+f2hY)2ykx zl5dMrs#`m^OO;aljpVNpXHI7j?NBazjFr-P<5NZ{lysyym6ILI!i}auR#r=s8-sHH zo|F}x&aDr!mLdRfA3dBON<#lrL!uSm7=o9syd*hDuX`F0HkX``(5Ixonj|KOyUg3^ zQc-Q1zi|oXoEJ7t`z@l)r8HbVnV=3@R147(4T%Z?MF>|u+vhb+dmd}f?PMV8SW8Om zNGeF;<~ukE61hiT7Fejt`7XmU^|R{ev+p#`i$*Qly)%e2TjDu=LV)p<*h6u5gyTBv zF2X}pxW+%<Fj!P}AZas9RZ`k$Jvv1owwn8%W?{}x!+bkqQCghlz9l!;d?w_cXMXg@ z&=}JPT7tF@L2ahnMB72@q!wG|Y3@>;eRIVAvq#45Tg=WlQSFR|)0f>5G`p(9xM7}| zFKtPEbWZkN=1qLjD*3c&W=C5QZ78nOyIt7^bEIKqkTQs5B8y0Tx?-c7F3RU`pPOs` z_?hl<U&@p~CMd0Mfz5AN1#S&Vwsi0NvWloHbK|_KEOMjJm}q8E=E&9JuvOv6IZ8ov zcoQ8$o#cQM?=kPAi}LePW480inT%^k+4bRRjjowT_3NF_?RV~cwfUrD02;pIjR9GK zQO@U%q%4cq2SOIu>A-(AYe*|k@#n%-mt4P66m+?M)nmWXqWP-^>As_PEzQPQQFQR8 z8-h3Q39C3Q91oVz2*#A-KL%2bY;8!cmJ9uHA`|<v{z~0`eQ`+GHZb5=o_|mCd#>C8 z$NX`>3!Xc-34zzMQ(s0p^HbkPL0@}t>MK)QkhQHnsYONA8Y3sjLq95yD8o_vXX;;L z>_rtUVz~Yrx{&>y!BX_$%=h%m(WLsmNbc^@hvIY`rx=`G3p{Y^ZC06YKwy@l-|)Hh zU=6u>PjJFvP!kJ(Tc+sbM_EIjrY|G=W}4NvvWB>k^nM4`K&TNt=8t0byviN1Lph6= zm_yLKL?eam;`vUGWXllNQpvgH+$3sPb_yL=Bg|EjmK*vv&mK-$JqW8%=|ASK>2#&P z_Hr|Y5Dkgu7#^X*C_?v-?p6bh!n7?WmSW!JeSwnSm}M7T5((zV1Sgd@d05#6N@`iq zIof-m%Wyrh&Os_zmvwFpf)UBIy{<8BeDtovo%NaL&_|tBV$bJ-C;E$apFPY)zG1$1 z&owMVml>CDJKAdL5zE6EYkt$pYmLfF?wDG0`I8N*#DQu4-A7E6KcN`U27=18Fz;s6 zgRIKZJ=&bE;>8osoUL9Ryh=TbC>SSDx$a_ae4Sb3Y{(ciQKVJ&x*C=an(TMl4xLH2 zXX$$5{C?<{&`X7#bw|C!?@WU>(wf=M60Egk4C)t`yyBd`(C=(qFld4VoFf6R4+pHN zK8Ll6cJ>?zJRuIOK|)?8A%{uGgm6egv3W?S%i_2=V{%GzdHk`#X)(c}lhxAXtow#+ zFHp)}cHUdTEBD@=-@HTIVx!PQ#~t7^T8*<#^hS~|xc9~6%di^At;m{`IHO;U1JyJ& z?$6LV#Y%45gWjnIu3a5-`VNydN5;meS;L)mKjUK-hMMbbbJA&Cbq9~|S=gw!q$wS} z<Z(t^y7;u%;xGk;LG3lcOw_zt$NHvB?!ZTuJIo+vtIY)W*7UDg7nZYhgoJ`|`U@?# zf&SRW>>!$M`UNJWuIMmgl*gmkLk_ZS(?`c%lMZ(&XFK8NP#)0^vSl6vFEG>}Yt=qY z>WCarV-#iQR(@uObO3d9Zj~Ae<}6f(n;Hky?Oz`=r|lj-I0#^gmZN5;ee)19uN-uf zbLW7xnioz$Qqpv@afoy00q1WU<dahvrqv*^Tb#kb-RY_O47=@EAgz1AjGqJEU%$BD z#{P{%{LcENgC^i$Gs0h&&6#v8aM9Ug50ykMQMk~#qpD^cswS=IIHD-)jLMD@Eu?Zl zXzx^j#tYp#^O##HK)x^gH2Y8oBzw6P^DLtqvNE>|&pEgH8343To6masFPXZZ+i2fw zw(TOJh6NWV1zH#tgBTU7eP2E-U^0`E%lVvRweM3##v6R|Hc)r2ZWu6UP8uu_SKF^7 z5Ei+b&tX|(bW>KeN_C)b7q?VhC2@*pFT<#gaK20zQb%f_ppm8Xf&=AdHBgp?2g=0N zzUt06{THYVS>0fh!O|&%MP5GTWr9DpB_rmtxWJV%cw()<Th-`+9pNw^epR)x<&H5y zNn}p<5E>yvDADh1(g)ek#K;gD6diD^_G>B>y~3*2ri=>?y@k#|fr6r^y=jEkKl3E7 z4M}aqf+KgXac<4$1&vT`xA250AV##H0=5ek@I!)vK3Iwme$0oDmHS)WNy*wIdYTYj zZRu7LFxIS58JMfP!&x-K4>+HK()5vW=nSz9Me#w3T`4{giqU44ixK<NS-`KgQcF~+ z$)Xx~#$%3oPu5N7C1^%ShRb#_>rd!tunBaOeaO;`@Gg0VSi}FyYeUlc*jfuoTFFEd zOR8Z4RTBHrnM_v=qLS_KTIyGvYt1|?i!+C4y??`sV=b9MS0Ju6Q)C6T`W3;Z%o85d ziENh~l0#_RtCgzGELP8JHB9M!#^AHfT3W1T^h?P+q1$V+gEe9y%{FPzuSsRs@Ay-r z&&$%MWa*cg*GZ8R;SHL@d5gHczoSYe+a|;+l&uAZooROH4pP=g`GeNXPLfFzb`#S1 z2_-JE19Kg4B`^wb`OGw9drEbu!t~n%qeIJiU}$Ld55)5#)skz}?aZlPlQ8z#UJ#-| zYO^vmzd2P;V*j5ETWQQ}A;NIjCB|%xCEmF;jXrG6JdLv!xSAK@X@Sdl!B-26nk^;Q zowGGGn&>N2cRRN_tq77S`L(hZ^0u`V19Af$;OpSM*@-NJvG_<B4C7r?o87^iy*8Wb zMrpq6c67@_sMBrzt2>@@hy5J^v<IIiJ1y|!Q!YK$isdqQoTPDML_TG>d5CVZ8v5tF zwQ7lkRx1I6-#=R@`m)Md`q#Na+?08k)vz7fn~b?P7;2Kt8t}>IiMVUrKGxYujGZWb zLanz`MzcgG7IDuLahiX|7e$b)I}hh9p%{<(HOiH54&kp~Ytv~>ArTCn#S8~^$oQ)X zh^?`%yGTMs6NUtL_ntBL;MAmDP#8v#36b}%i_U$y`ln#i)B;*>S*Pvjco$ClL? z%=q~elnuXpj0WVh4c6?B5^b?x@W;C;BYJ#|yQV(-^BV8xS@qdyP_7}XGtF%KKWAjn zLectNCDB|O$s?N`pgU^fn(!runKLO{ZL*IDdN#goZ=z)9FDy|a4b+7tIf&rq{hz40 z&UP~#62@?Yv#|LPJJk&HQ3e)?F*x^tH_b5TT8Z=h%QKll3XntrekU{W1ucz%R_!vl zu6JTwtI@B2wku%k4*@aLHLf+aS<jd)!%M#cTQ)o{<ty6y;vrvlB!}@s{CO0_`ltZs z3fJ>dHs*_rgZ{Wh2W%`KXEPa`u}qU^8Nd`Gtzm`f-1-zBi0iySJ$H?3COIw5Sts}8 z<+Vm%m)h*yTBpLCW?Q^x1F!Vd+Cd-yYm=~2?%cW>C+BZ7&rJ<xIqNRtBg?sU36IuH zGk8uOY8JK)$4P80(iq7HrP*8qcI&NRs5o4XL)iMFv+i5c$~Hy3oMB$wp_-Th?yNKL zAangr28eU(Pbpw+wfW(1ey17vQuDUsxUj8DIfV^QQ0G0jGyEy5^P3)CLis=cawvai z-5gx4GVHJ%DF#_>{WkI2`jH<!Izhz8W}oAaF^s~#^M*_X2XtOm#D*kvo)l8G*-}>+ z<t5PsS#I^dD)cT0YpM^@RaIwOUV(>b9w~ZgNut<T7H`U!4Nfz|w82YY^r-kX#J6>( zRG;4bHiKMr_Jpiv$aIiF9yPwvac%awnv<K8gmQS^5Q443>2~cp8C&!2=C}j(2#tMi zjAaHm5bPpSUwa%RYp-#*{ngfz;(tXArj2S*S=&8{L(57D#>Sy>ye}&aBu|6{WXYoR zJy=+9jhe&f&&Pd^I=}K3&D!?hXM~&KKNL|-rI@I}J}9IBm%CT4Pr(h2lA`RU!W}#z zTt1O71J@X3uEEEm16dpYC#BMwiUd{3p3PQWl4fnzvSl_Q9@M}hNeE;-!hE}nWGGc1 zPd%s4GDneKLvjGcS1HB`9XaviNE~IJ5)rQKQ@w;(FbQa{p*Dyv{NvkHXAi;5a-v(C z`r^gH3Wfzd%G^(xROzgOnu~kNc%v|Y{{$u`D4$wu6mDT|WDAsPz{x$PmVRmi?cZF+ z-U3yHJ4XL3ya%Jx{3B1Os@RU`W_KkhwTO`EP<`_mS~KR8U+7dTIE{Ja&Tt#Gon$nl zE(dWJp-%nLFGR6dIAy<_TXIXDnE(n>ay2-K8OIy5nAx_qmLyOgtQ6Fj%*-=qe@HKi z0nCq$syuW4!}7)5RiQ;?m+>J6id0FQbux>KbU4=#b?)3Fg%G{}A@pSk=NYO@J@Gx( z+{gD5$inzGt&2vIBM=9%&Ys$We)D#=;$X>?T(d~*H3&8|nSsg$L4-o()4BCDnT9d8 zE_0<UD}u4Lw;fd;UFHK1Sw-$AMSfUDn)r(v5hd^Sk`)Y2*Ymsk6l$eaD9LZJB+_ZC z?#wseq9VdWMx##Wq_ehmu!z%RL@#$oFo~*F_DyBDl?uh~G*>`&P_=OS)^ylwt2<5* zvwCk}v{^^0RD(Mo4Ce-R%T811{Z?J%>mVhkZSqsZUab`AH#ms$5NI#mLjx`}s<cDr zd(bT?x#j~c4Ean`t;tA{$e7DliznxUyYchy8+U-d7c;x*N+iTJseQy>ob@d<%w|L( zocFxQ+iwIN$`Lbg(^wA>sk1CDaCHq1dn;88aoAtv)vqavty0V_rw}n1A$&%RTW^fp zY)}2T(vF=bG5SC~B*4=@Q8ksK&3H(1Umvsi=+-mqUO_!8b(bJ>RT_kck`^w4=oz2- zwmQq2dD6<s{fq(TOjQ^`MAUW8j=)Q)pKZQtBiUBnNhi3h<-*+j`^bGNgVvX9{sEGR zNO&hvNz2S>)<X=Yal0`ZAdBD?=G#SKJjZ;G*RVweNW@0_IHN=HbIvdd$%?KtCDDXl zS-puTv{HE}Vwupja?ML6W68l~ZcsT0fl8=k*}`^H<U@)jw_TZWQdA3@6ACGl0(xdK zv6O82hzlWrpNr9j5G_^2VwJ3Rizru3uw+-GLsw+ulN!^ZTID%+Zm>hOs(rtPvK;BG z{Y=ms-NO?H{RW<b%v>f<@R!l@1ap~PGv8k0k3-q__{PCC@7C5Fh^ikPxV*RPmYM_6 z0kfvSzBw?k$ERj&%~qlI8?ow$vto~Q!31rW=wT=8P}xDGS$oy?u<(xFOYiHeWgsP# zT)aFG=O0)ID^^KfcN36{h|5_lk9ol<i^Xs#!VJ1=)5TyRo4{4=Mm$HcD9|-JJ&<fh zkv<f^_enN#g)O(Tku&Sh7?;YX7>2Erhw1%VG`GJQ^J0PAl8jr?Yx*E!U4=K2it(Ud zQ6rhrtZtLI1dW*3;fTHQ-7(GY#w6b|7=sK8vsi6UF!k;QP1I`7T{{)D%r}j9f6JY_ z`axh=-H>^}`P?qy;<rl2GrJD5de^xKlln23Oy<F+EPK<&BrJD#Zc35s&LNx|Ji}&J zXm_K>er7j3=la1cXR(2P^}~G5U@)^Y9R^W~(Yf&ei6pNG>XS)n>Z@{y@SU?&+x_PP zwi4TIm{g4?h9h`GI^_u<CDQ?3teJ-(%{L@AWgch0dr;Ksu;h1GD-v@Vd?KD%8=f^m z;~-ZoK9U+x<NkT(4r1pAmLrJ72_nawwuDKdgr0<*Fp4!2$;P1$QjoiH>ccL{tvDS( zC7i=<#ERSNqK5joFl%3Dof%|KBvEU5qQ@ea%d`kN0xVuIHgfZRyPgfKsk;4%Cssd! zRZy@kcG~O{Xfb=dB)TDUpTCpV$~J|+y5e-hioLf6Tpsh<?=bFK?P5~WABz$q<20L1 zgK^Njk^zL6F8vdO>o_n_hSP(E;qsV|s#j?^8BAB(5Hf@{N#z(eFM>tMXu;~1uk&K# zE;Rzpm%)M=;(^<h1j!5clYZyCd5BydPFZnUI5nru$8oe_LALrZ21JRzsDzD_MOjK( zk00E|rj4;t{uou#?P7|O!p$-N?LHWDp|9zbIyggai<?WN4itPete-Y-G=orT;ji9@ zLZ=ymGJHhw=e8|l=poY$b}_LL$-0_PXX|5f%|!A;LiZHb1)@|=P1CS_a;kCA%$JSh zxHn`U3rtF09;IJZvp#yJae2*p+iYVjBMKEb-&RqNfxq_i50rAjaJMzrB+u3l!Dye9 ziMZoyHmr2-3XD;W@iY-=yLLglF9DNcS7U9=rn>O${@GT2SY*Q<WH6{6fu7s|*TK2< zT3P#Nn0GR%^BYE+f1!axn_2WK8jB`q6;Wudt(Y3NX71&$7WkD1)-24lgPvS-^RHD$ z_24>}7pOi8US|%YNHQuI9Dx}gPKACg9BY2xSRbtn$9iuY9oSBsmKgV3c(wEn=%-nK zD|%o2NhvE{vveJc2sn-K3I^M)_Ob0-oNJyT-AUD_7&*4H{_58PGyIvmsB7>#GLE9O zM_%Yt+6~?L-bud7E~=~mV~m!R6?=_4{MCo0O}Rex{k}23X2mR8`5ssCbIoY$sMFI9 zV=R9en4=k(1bGJ`JxbOSr0X_SY1>&{IxnuM;$(R1rZhlZsNjrRzXB)?&li~var z?B}%klDLWDf^4)nO#Q>nX4L#{frSueKHj{6e&Bw?L>`d{`ZHFsWS3ZmQoc`R>p!Zt z)MWNo*@Q0+(@KUAHQ#)n2!1ZmKjktmg>5tXOlEwvo@l;@bE{CFH1qfBRZ%~VD0^FK zYxkW_5R7B$+uR~XI@m1DA|0`t2h;L9#E9HeM)1wN?ybHta2K0&yD%+>v34#tOPGE6 z`4T2CtnhJRUgKcr&fU(Poo6zxgN->hy>T#X%%RSme-YWd)|AY6<Q>vM0lNYNQ&yn% zUR-P#5K5nU)Yx-dWQHOQ5Jo1y$g%9Mk}!8IeeMr47nESfX>;2=StXRpPm!JqVOg!O zss1JtXWbeChf1w%MT>HGxYweE6iHzp10k|K23P|lvUm(HB!wrCOfHOAC+sN2t35LB zOh)u5<f*#!IgOW4DXvp=1(w6XCDf~{2e47@U+w>B9syRTR=6tT`Fqj2nANt5guo2m zFRo1DZ{oTuaTy*M?|e>p@X=?|N4fNYq|h*m3`rtjb3S)K(tr~W*Ak!p*pjtM&|QE` z1g;w|3YQ_Trwmq5RfH^6ge+BrELDUoRfH^6gsiVr1gXj)W9({XO@BJWxitVf8QE40 zLOB<V*u~}OEb%~M+|m&GzUoKm-f$<4BQ9%Yue(_y!71{a^buyY_Xq#|XDDPs%>2Ws z#?1K7`D%?yj@5<1AMJ1LLKc%*@PGU7yMNKNXMh&qIPd`w1JXJYm<B8WRsu!9-9SC? zFz__+B5(jW4s-yHF5&^nKrT=M+zs3V+z<Q!*a;j0jsd5DGl2bbjG6(Xfr&seun_n< zPy*Z!JPqsx{seRYgCIwZ1g-=!fTchQPzP)SegOOo_$_c4I0bY7age!&1CxR40S|CH zPzG!S?gbtLegW(T4g>E39l%IX`-wm@a3j$7_kLoU_KWm1ZQ4y~+M(s#*}g5UJIHUI zPSYM7*7F_qSY1$D>MeBZ<?cJYy4$<HSa+`~FZ8-sSC+4FS5%g-@>W$%;b7krZdIkX zK=(%axhGU<{MY7`8>NNrvT{ksyGmSfD<~6()x~9nZqEk2sJu*h8hXL)rCx%Nv^H*R zh4Ps~G%44(vEA{?E4*bY)KyihDvK-hDHR(epUO-M>aj|vX=}79ZIxE8Rcc=TP0<Rq zQvT7GTA603_bVh>ZDN^GT57!tV<JYH(52a8w3uj@Ju@@2pZumLX&x2Wo$Og2>(H)C zO3L#<8gjb@-_RT@i&pZ}wDlG1`8fyy(bwVN;ozTqYEO+#*R)Fkeo@gjd%u`iNB_71 z@dF1rU4t(gk}&k*OA?0-A2D*&=rQiGmyR1h;j+soUUB85$yZIeI_a8gr%szb<GSRO znW?j8U;nkV^c&`6WX_$JHUGw&7Gy76<XOBVXDJptm*;=|=37?WdfUo^+gBBOSKm=o zTykgWnzHhWyDF=6W9_>28}9zb#_CO*6`47+OuE!lUR<VoD=E`WTBf!{Tgcx9+EndY zS}cRN1**Im-riy7mR8NJ^m;X(IbJ=tpwv+B^CI5UOH0dFN#shSOfO#Jb$cr-%PZZQ zHjvI;x?oXGj^!esTF(51^CCXAj78b$^B4BGESZrsb=ttV^fGrrMMY`xssg>3AyZUP z<z7?3uq?n`*S%{hbQ!Xx<pm7gBCmUnJDhiE@$Hobl^fi})VZ?KyGk$JFeT1Y>Mf}9 zGO)|^f>p#MMnvkDSGlW<ii+||e7pr~+^Z@4n(|67Y4Ey6m0*f0Jmr`2O&u6_l{>ws z7zSx)=geOaF>~~y;wpDRRh4(m?WG&sg+^s@*&XgOl3FXppd!U(#d>i;Y4P1E`M9ML zo;e~F_7c;5yKx8K?hWNeWn@{WxaaF`g03mA(%q%ScX~-(s#EE$GD>xK`D*v7g3?mS zjFyrzUA3xwO@*4`6R%!XT6u+gwNbW8wW*rn1wDl-tI{itRXUaDzw*o|EzK?{E>m@v zdS5H`R@1wz+_<C2T~$%Aij{)k41fZrb3}thw%0X%+N-<nUaRw#EVbHOFQU-pWvjeX zzIuB|K2o+M$zu*FN%?v*C=B^un=JlDnOb!iIXxlVMc#r6tF)wZ?R8&L$92UK5mmqS z#G7%!cvX7gm&BVc@hS{P+uGtv-6$yS=^*Jzm4TFtIdOruzpcDXmhGz<II?=Hg|)j} z*Q7|io_eeGlzC89PInc0*A}nx_Jj?!k#~Is^M*}9TBc`as&>9cwU0rLp)hM0cEx%T zdqSa%f;;<$zi_*RA{7?s1r%YR)#VY>Qce0w?_GwsN(v*Rd`W15p#xdT))X_L7<AI# zGTe<aqe>cZUBTaR%G35qstwOO?!9I7T6x(TZ<$UVB&=$~^M);`yu*-yRjR=yteQ`& zS;TaiuobdCcdtZ}ge-4fHG(xQyLeS)c~$vp-JM&kYB^`pr0(`uU@dwqPg)%FVak*# z+AQ|&J1SYt$_iMKjj}t-%GZ@$PalSwFjLm(v2k&1q7rPTTO#x0<g^R2zWR;gT^RfF zdm!SyiFdUb;*JiC?svpDyWh7(yu<A4cIU1@_xpDu-eYQN?y0G*VMDgvQ*+OjnuLD+ z*patx-AaLyl4?9P^_oMQczLoXuZI1WP1)nACwuqAn)(`IX>7|yMMVxr?D~p|brlu8 z_G7&NzyG<lzW*kIA6ftU`ke1O3ry+D{?%z;{MS2tt=97|O8aX6B2(C+_56#5xcycB zh2y*bzwdwT3;pj#!{h(q5fD||{SSfXuk;J|pggxk_56#D`fC5e@y|D=|6^`{Z3akA z3H%G^C|^DAE)ntm5B&Ou|7x}E3FXpy-mSN&D47H`wOf33TkrX1eM6)F-llKex9!{a zf9Jd3d*J&IKJ@TEJo1k}_~E15AKUTx6Hor=sUQE3pFI83pZ(J_KmWxqfA#Fn=bnGz z*S~r3rQiN;SM%;Ydw<{3x^Mr1mk<8o&?|?Jyn6JtKfeCPu{Ym(`}jZq>75fN-+k}Y zzx?@qv+Z94r~mDP58FTb_m4Y1Idiu2)4zPy#pTGq`9O5x1J74F5dCM@|35qbzq$SY z+JW@K{^~&bpI!f~teI=p%&Zd9gjUFJvOAlfTV6Ks)3UR#E-bv77k-{>O-lzj6LXGJ zM`vwe`P%OHMVywzImcVUk<<#1Zrov1>6&(<QL56o5nNf)O0TFa7MetMLFK9<o^!po zR~j5t#qY*~GWAM6lD<Z|lBPylk`7QtybY3u#Fw}dN6RVDjmkniB)!UF^|rLgsH_UP z<#`LsyrGY!pwZ%-U0$YqbBxflK$o~0@if9~gp)8D{u+n;5RD~|qiOlN99<oH#C=(n zw{p?#C7cuH_Z*Ui;(_0Sf+{_oGv-=I4i!d)a<jgzWVCE(N(Fa#Zzx}%t}V;STr&0A zDH#hOKaeL`QvwP?c_<b&wAzO%Q*#=CcAz<E6&i;&qN!*xX*hm!7A;(~Z0UGy3TIyV z4%3sS+^&+reNCZqzlFRuaH?3dq`X`*;Fo1R{+IsNT$HXIhC^v1_TlT;X^TN)A3A?h zkaeNtX&N+m^$dT%0qstH;qQHY{9hc`+y7vM|Bol6X)git3&+1V!hhEEG%XE?^zWPh zdoz3cAC8DG@qV7#+dndY@lTy?`OAAO@8NRv&1cv3R=5lKfBdxz`;SUb(^3HWT`2xl z^LqRDE$3%9_V({vzB?Cwx&Kc+J#~9A;{8~k_9|b}6Yd)k?|t)|p5Hsa$aLQRdYbkj zAir>ZBmJ+sIZe9;i1gppryTXS_V$nL*F@;USBGfC;q?2K?~0NO$CrF(miG4V8~^$Z zz5OHem-q{7zuf=oExrBw_UHKT_4e<Z{!8Ega{r~<d;9k-|I1JG_U}6{zx^Z2U*q?O zCwuz5Z#fqHtamzn{fl<@_U~KI0SD5wrJs^X=r>3MojVc!>izt0p32|GQ&|!<&s*lL zgt#=vqLj_iD@!xiLc4)ag`Y0mhdDx04|5>O?0E&n`rPu$94I-ZUTbI6zNgJmypm8b zw#R?6K}3&8G^?PjuoMj96G=6@ywE81&V^XJ5Sk64-_kOLVn3%6QZdB99CllX;qZc@ z7kCTSdcWZQm!4Ftg!43Ql0B!?3odbKG&x8?(hCbA7K8uvi;85TR7l)8<!jbZq6Nie zWZy1jwbFsHBXz%C(#X*ZEk}505=Y9rbVG$#n`QYHK*g*Oq##}U9hg(8msadkf$Qu` z!_>R(7W^M7e*=<zSs3Zivh2&sic|{~X0Bfal11&wPBAgY*eTrwy<d->UzOp7hJJ^) z(nEEn>)w|f1UFHnFHL(gIt%)yVs2=UsdtN!af>R6N2;LxK6<|NfDkslh4af`eF+6m z)0!jQ!9K$7ITAO0jz`lHq%{_0X3P5tN(1MlxKNE5FdyxD`_j@X0$BW%S@IR)qI^x> zyE!eh<x3T@LwX~k^goMeuceCoIv?ET`}REAT8$y?O!NZihau7+qv_X_ImC15+au{^ zg*g?)WmY%e6eSsE_E0u+bm3l9rE9w+&o6pt3oZ~NPph-%6&HHv6cto1EzcH8@eLbv zueSUA=`dO!SN&kk8ci#(=UOyz)dKmp#fG<XgU4H`xH7N_RC$>_CDPVQi&xzl8mB*r zXq(Ugqj7T7_*7`$Qn*y<Rchq&raf$1qL(f!TL+S>{aBS?iP!3mTf-#?^-i5iIkYIy zvkydkGkwAIZ-|;(YE%_T+BX=hS9>d&X@8DhFekg9!fHo)VvMc3EtZyt8%Q%FL(vv# z)_jt-m-$7!IlWy7(<b>ZP|O!=%4zS*IFa1D*?m7zHOeWzo6==yb4tsryrBtvuQggi z>ruM)a71ku8G41G%jkWeSExKKMrK~bDzG86%1Nf!ErdI}rlO$I+g;n--Y%5-n3OSM z9OV{N77Jr0UArlB$->M9oCgX^IV_dgmcUk!bT#ddR-D2`tF7<Lq%A_7EAtph04cpH zgwBAy-GGlqoBj9i|LzvpB?|HQ$<v}xh05y+JtH0nS_#&3!JqgG{P*v_Ti~m<z`{SL z{pRPxewXpD<I>dFDt#B-`T)nMV2ubY{4f4woL&rs$D}RvZs(Z@^aBP0$f0Qcfmk3O zaD<-XCf`y7@e`h0*iX`xxbj3Rhsr~yi?|I2E((F<Jr)r6>41EvhrZ{8zFFW^oFyUm zoY0eHTBV=QQ}SjxR_Uza=>}MEkw-%21CX*xJ)}G}fRwp5^xVQz{C$A<*8x%<xd3<t z@Pp9zcAiqc#{tRjM}UNT4v;z>0>u9fK>QPF6ltGuoAKJcHblus#4r3Eeullm-+iBb z{ri6ZweT1652y2A@9DbW&#J5Yg1`S7ZE<0ygjK%_6UF~))L&|G!66XZ$uBqr-2Zjj zfSUY2J`{?Ef`>)h9gnkNt=zI<%h*uoJo%3Gvi%9`S^L8iUGkQ;sYX4YB7F0Xw|2NK z?=SqVMfO#GX`$z{Uom`oDEv;szw+3r$A)YF@|gM9%~oO&f4kG)v|Ysz-BF9*y7eu$ zcH3JeZ(SP^(t52udhAappr>84$%<L}Zx-!tPAFt}4gW&KztLga@bq3O{H@<o&c0<8 zd)47zQ6Nog|1eFf_$W=QADON_Nd6LDp3>KX=g3d?)=o1`;TQ*b%AWlwPua^IJY^Ce ze?Lv_#ZU7T9HXA+5T3X26r5%}&tW{f{+y-_=ed{X2%h)y6kMT@=V+c8Jjd`n@h@qb zo99zJ$MSsURGP91=Hj`YZ;j^$9_{a?X?OEH!BYm?ah^e*2YDWXzWY^x;iK><NmuF= zT9h<tpA!21!H?6l?*iL^dx3hO4yXav0~J6Ka0}o8vVd7YGB6ED0wx0!f$@MF7zrc- z34jZT2kb!Sztbmx2}t-8JdXi~fxW<sz%#((z@xw;z&2nbPyzI}_w>2+=@jadL7(4y z#b1Zbp`VPADB?+6d4_+|PVRo+k#0QiPsT~)ucpF^-~N%s&+_Cfjr9Hxzk4$Nw)lss zmkZ@sGN!|sN4^W6LqL8q7E^(*12QhY4?GLJ27C+*reTtRg@9a?3CEd<Up}x7cmVhn sa1{7=KrVY;4P*nQ!2j#Nzb3L0-REZu{lfJw?Z8eMa0{>$=sSM?C)~1m4*&oF literal 0 HcmV?d00001 diff --git a/week-0/day-3/my_todo_app/venvironment/lib/python3.6/site-packages/setuptools/command/__init__.py b/week-0/day-3/my_todo_app/venvironment/lib/python3.6/site-packages/setuptools/command/__init__.py new file mode 100644 index 00000000..fe619e2e --- /dev/null +++ b/week-0/day-3/my_todo_app/venvironment/lib/python3.6/site-packages/setuptools/command/__init__.py @@ -0,0 +1,18 @@ +__all__ = [ + 'alias', 'bdist_egg', 'bdist_rpm', 'build_ext', 'build_py', 'develop', + 'easy_install', 'egg_info', 'install', 'install_lib', 'rotate', 'saveopts', + 'sdist', 'setopt', 'test', 'install_egg_info', 'install_scripts', + 'register', 'bdist_wininst', 'upload_docs', 'upload', 'build_clib', + 'dist_info', +] + +from distutils.command.bdist import bdist +import sys + +from setuptools.command import install_scripts + +if 'egg' not in bdist.format_commands: + bdist.format_command['egg'] = ('bdist_egg', "Python .egg file") + bdist.format_commands.append('egg') + +del bdist, sys diff --git a/week-0/day-3/my_todo_app/venvironment/lib/python3.6/site-packages/setuptools/command/__pycache__/__init__.cpython-36.pyc b/week-0/day-3/my_todo_app/venvironment/lib/python3.6/site-packages/setuptools/command/__pycache__/__init__.cpython-36.pyc new file mode 100644 index 0000000000000000000000000000000000000000..2804f1d92df02f265201948c786b3900599faba8 GIT binary patch literal 699 zcmY*W%Wm5+5TqpQVOx%!w27M-EpqiC_MwMff};I_qK_Mcf>6A)!-NtEl6LA|^ELe? zUVG{<<kY1fO)5d;>|keiNBg$d>-4|8`~Ed1<TrWt3=x08&;G;%2t*J=0xd`(gB%KI zLkGH0LJtn04+A)aBX|KX;TTR9LrP!>uVhrmG>!s3l?hGoK9j9Fr73bF9^YnnxiRn> zQ4XU^5}4ZpMh{U$uHvf%PQQ`y8=qEERMxkzL0HH5VzGxt*9ezF0^>iNFSbyxeGYuZ zrP99Sm0dH@SXW8u3)EsTS3ciU-5p?3T>H!@S2<1#Tdla#&id4bo;0)EVeDIuTjvLR z&A)Q}J!5A^1YKeH0)^c8-gfGH(S#h@U23T+V4!B!XWPJcwu8@b2HM`33`73G|4zn{ zPd61ljU&@Xf+pDYaqxNVZd7wV!Qgx@Bp=5H7f8%W(6oKd7#e1b4nw)66Vgs*s;;XB zCYy5R7!!SB*OnfkxuteWJ>_gW_2<gem18@hr3e2LKC86m4g4bJEc6b?<HxD1^;8Re zu`zWaR(Che%<}0|m*;R-d&+Px!Z9|%?G=}`f~Dl|gCiRpl~EaW@XeAkD&jH@xQzb- DfKA;L literal 0 HcmV?d00001 diff --git a/week-0/day-3/my_todo_app/venvironment/lib/python3.6/site-packages/setuptools/command/__pycache__/alias.cpython-36.pyc b/week-0/day-3/my_todo_app/venvironment/lib/python3.6/site-packages/setuptools/command/__pycache__/alias.cpython-36.pyc new file mode 100644 index 0000000000000000000000000000000000000000..1593e5472b76712ffa4cbfeb112ae4623cc2311a GIT binary patch literal 2392 zcmZuz+j87Q5S<xaR(tV<VB**bDM3iEfVESVRKWwJ0x^LX3@KBUDwR_zSu<YC)@402 z3btzfk_~^rPw)qP2v2(DDZk(+x<_lrxoB&8T0Ix_oIc&N_vYq$3s1g&R(A>ck6e0e z&>uomzk%R{(~RUaq!e|QvD^wRqg$DsJE4=ip__NY4%lq&yd<Ib6X7oJyd=CM+^H3I zxyQR;@A2L?3Hq;KR}#=>X){&2(rKoC9qY6#ew4D5V7Kyk99T_X@Ki@hS?r~wreB&V z(Qd3n({GK@UYd!7;%@LTXz2JOXzCjf$2YjMNuDj8(g~fALsz<*OvsdOlOy*jXa{r( zazqa;dH;N5Lcl?{zW<~uweaJ@kL9S!MWOw@Qu<k}h4ja<RB18tcTaq^pNZpjHO^AK z7M#&f&*<l8bmxrT3T)W{7o>**;3cvLB4CXz#aK3uSpu&X?BCGjZz309{OrMo&c_?$ zbUfUx(u@z&=ZE`6qQr(0x*F@U%+zHyDf2uo_(q(iv05LWG##~ngr4JP)c^!xJ?hZ` zod+pDfcFHA=Z^)-Lul$}5Q2o1laO&5TAYP8w?c={kEn1DI?E)4NFI3H9#POe-r*j^ zv&*}@XX4uD1L*sF4&Ym89OF=ZZ&U201;7Y6l~N~__Vs?O{j_*q9t!1`Fb1gRr4;_` zD5}28-(6JBmb`bx?~N-(UOpEMm1oyl)nBU$fGmLT!RHa33z{HZkSc~ItDtBg0@4B* zJs}Y@(&9)2x&?7`U`}%-EmEDrPPK?yCaT7U*eUrT3<GCvC9*ve#8xbVSzZNk6Pj{C z5Za?It*^DgdUwC~d-w$`eC;8SmdQKXg5I7|j?}%Q9nPlo1;h?Kwzgj30qe)VR7(45 zERuBZ#23eLqO%hN-vy!9F0k>7I2VEc$G#~1%20baY;g?S_V|ks$2Sgdj@?+9DC9DH zPa>iLmDf;5CSL*pF}?*&At@1rCCX@hwT0pBeJ?=3Oh(j9nEnL?jtqg~bV?zg0S2|H zfu<NX=q>DzZ%nAkcLo+)+Y>gSQ#NIk9IZWt;BFJ`;7S0_Ib`xL)OYA9gWi>UoSa%m z|KJ*^6ffT1!K}8pJ7HI6RM{rQXSf6JtdLX2y@QVSbk|rMPX1&o1inpAE!_iKpHtY` zN@<F|52hB94Z_vkYB~l8q3VT4Z8rPgBVW-leDkU2O%;GVZz(NT0G8U{D%)4zBo45& zETC9b1ve$@wv<SSGwKI(&45F}mFX_j+_GpEMnccX9Pu>KCX$UamT94z0o1!Z){*f} zUWYB(klP1kT1X4uv7AVZQ{!PFMiMn0E>9v^6_7WE3pa4i6`a$VW%yh4Xe^lhB}`Cv zKoB}$E|e<I(8Oj~wp{pmbdlO@KwT(jtE}#}<bjo2fo1%XOR!je1R@wTUKF7-QPlLJ zC@*=Hp+1PBqbkm3Bb_MXWdi0t7b=mdxn085nUi?yD5(1?I!_nXCc>anLS9sWg<Yt~ zA}-DiCgCL#UgBvk9o6K7sR;-MHig22Q`ywEZ0fNA^Bm7JU?rGN_#nE7waJ1I6uik+ z$PPPYr`CjNxSFRFxO|g?rTEHNAQ!-Lm)l@jH5SKMe&8-xpmZaLf%U-qWx~B>GO?Ct zTy#fSxf^Ho;&9k%!}g-}8ynAE&ku*#Us#>2OyaB|_1tiHPJ!=$aUX-HPz^AD1G}*i za*0f6Tvb*w5%M;?TtdeH^9k4<Lo>ht5#Z;ZHwL#Cj&BA1a1lvt{xz%%{KKG3@d>ZL zz9QGfG2GL|x=N4N@nTShui?t28M8RAg9*yHVX+CY@wsI-#>ag0lA{-4Y`kw<Vm-j@ QQh2!!Ac9Ml*IT^*KTeKLW&i*H literal 0 HcmV?d00001 diff --git a/week-0/day-3/my_todo_app/venvironment/lib/python3.6/site-packages/setuptools/command/__pycache__/bdist_egg.cpython-36.pyc b/week-0/day-3/my_todo_app/venvironment/lib/python3.6/site-packages/setuptools/command/__pycache__/bdist_egg.cpython-36.pyc new file mode 100644 index 0000000000000000000000000000000000000000..b35c6deff2e0556145a60365d9941abd44c69a2c GIT binary patch literal 14373 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 K<V=-p!~EZZ-kS;l literal 0 HcmV?d00001 diff --git a/week-0/day-3/my_todo_app/venvironment/lib/python3.6/site-packages/setuptools/command/__pycache__/bdist_rpm.cpython-36.pyc b/week-0/day-3/my_todo_app/venvironment/lib/python3.6/site-packages/setuptools/command/__pycache__/bdist_rpm.cpython-36.pyc new file mode 100644 index 0000000000000000000000000000000000000000..5b0513cdf9546dc7f47598ab8e2437b590eae17d GIT binary patch literal 1735 zcma)6OOM+&5GE;E)+*j^f}#zY7AR3*oA@B_Hrt{=uvnxIpr>xz<YpisWRbSz(2_z@ zyRl=R93bhjKcjz1*Y=XXu%`|wKepW#s0<DV<ZvF}eB+b-{pjGAub=(dLg){4?ejr@ z3`>6of+LP4n&1iPdp{sfxc3@yPk0lu^7@41r>N_{13Pq{TDkcMD34)j3PPYh=Ez$2 zy~ab|=RR+}M*S8Kz(c#<8}LjUrpjqD#0W(czMn3HQW+Q2j0NRlm{iixtsNbRadMFr zikgD*!Wj(<DT~W2A3chkhc9~cNtIJE8nG-Nf=xk1t}E5J%#*30NzN(6(OHqx1TIQd zltRfFO%s_`GBJYpoUeyH`i;CyW|}H+c|XgwNu<0_D-H2z9NSHbc<n0|FO5(+Sj^&S zk|!g<A-Zz}l|ik^Knk0frddv({QRRmGb$TY1~So2$P-9klrl-7{6vrGWoE{-$~mN) z7LY5vw9stQ&#UPGuILaj83+UMt>aD1w3wEO$p)Fs%&hUB0@CiYyY1L_u=G6;3p9bg zuP{aiIzRCi$m$$HugG~FZUF82^({byfo~|1*M6b0k+Pm@56-)|_O+11-;oO8?CRSi zGcAwGtc(X$CV8A)JRj$&7Drl`sx(C*^>uaa^=RAjUO7_%I68o(ElUxJ$b5fy4>7kj zSwnBVv;@W0G{Gyh#0#j2V@_6NNsKq~CoNmw(&OF&-$lOyzZV2{{06<jL*kekF1+uZ z&BB`mZvhz|+(k>Dx9y8%3r^b$f6-bIj20fC6rNw<xW;UL`w*C$<-0Cz6SOeF=%M#v z>0=NhNb%VNm!2ED6@ezez_}g9#qMtr1Sh|d7d`|D=AS+-DwT@kNA&QOrSmdAe6^;- zvS$)C@BWKHl|!?DtDODK^p5KSU<|x++@|xdZXEp|p3j3r_ip}qv(q@gmfp?iK$Es= zc-|#7=^fX;1jIlO?Edg%y?^Ogr1k)+tLRk1yjV`3ePZ#mU<T1V-f@9VljnlzQlxB{ zNzpr%1&p*l17-8_o#p-f-lju0GNawF?p&YC`qoI84Qi?bua)g!!}x=LM66pGjOxoe z062v*-9WX$wr;OM??>=wx7J}yAkTi(STe}8f9FOvuKF%fmi_9s6&4Bg0SLSFhaeD+ za0h-N4oN2p$$Ox6@cg6ygyp;&)FES*JB-y4W7C3H(&`<?UQ~%(-?SOyMar0)KNquU zhMntOTO1H}Ftwe&aL*@U;Lf^!|6>az{JTlrTMu?`n^oOjA35U&)17Ch*;?!Hv`O#G KHqQ0D<NXDT1Lbo7 literal 0 HcmV?d00001 diff --git a/week-0/day-3/my_todo_app/venvironment/lib/python3.6/site-packages/setuptools/command/__pycache__/bdist_wininst.cpython-36.pyc b/week-0/day-3/my_todo_app/venvironment/lib/python3.6/site-packages/setuptools/command/__pycache__/bdist_wininst.cpython-36.pyc new file mode 100644 index 0000000000000000000000000000000000000000..0358209a2714a569206e5cade342d810eac22e27 GIT binary patch literal 936 zcmZuvOOMkq5VqsAjrxFsI3kEvTzc4s$AO0sS_x^nRYHpdiiE5*4z06!VLPm-vZwB! z;V=2hiNC;!nKUdd+KJ}N7iVVtjmOU>li}_6&p%%}g#09X<^n$f*GB+?2%3?UrcTJ- z5#b1SMFdM&>TFr)2zo|l?k|WVix}~*F(4=4`T;;fLMjME588YhGU1Be6$xF@hkVaY zmO^U7FJvJLZ4`x^7%QNm8su-mwGYsc6!bK-akkDSYp8I~`|7@64dYJ3pk8m24*kx~ z>Z;0;JSmK?5-4wEl*vuP<1){qLinciFG_XpN2;s~ah<j{rg{|w%X+2f)pxTli+QP5 zfz-NAo<4r@<mGjw9iZeW%j~ElJd?}C%uy&>q52uKW9(1KWo=|x*n2lg*@e2+)k*fn z4myGM?k<+=df6>$%i>)8AZi4)f1d^>uYyWe$IDt~;#ht=Ul*}X0-cz;GG&?RecIIs z4h|ezRDCGc1J^?U((6+Xo<7|i9Y)@yJjQvU;TuJ@qk05H(1vibnHso0DQn1<Qt}b6 zl!NP^fWf%f;=}384M$vRuId7=z{<L%k}CxllUN38GpYu_+m3fI#?M;-Q*iA85K!yT zsk6EBpW?b$Kt5`l^{mHv5#<TzcF1{NiaJ9+=KO0NWxGG^QM9%9_QSSRyD5soscHm| t4o9s_Xy75v7zUi_d3Vb510@Pow!vzGtS$Kuu(<VJ?=-zZxf-_`vp--9<<kHF literal 0 HcmV?d00001 diff --git a/week-0/day-3/my_todo_app/venvironment/lib/python3.6/site-packages/setuptools/command/__pycache__/build_clib.cpython-36.pyc b/week-0/day-3/my_todo_app/venvironment/lib/python3.6/site-packages/setuptools/command/__pycache__/build_clib.cpython-36.pyc new file mode 100644 index 0000000000000000000000000000000000000000..ec5ff32a14e2fc6daa5825023d8aeb2176aa063a GIT binary patch literal 2407 zcma)8TaVjB6dsQq$8oaR?FFb1mw7>HDw-7+38_M;s0GAJ0ad8T>S7$vByraExHIG3 z&C20{^tDod1TXND{ECFcU*L%|<J`95p|(6eb9^q}oO9-kKRGz?4}bXV<oPv({z7|~ z1N41(<kv7zM6DFftvL>CpmFMCt)OLTzMZ;RJ7^o)NxiHSbS(4@qAlt^N7QBZ9IxyE zQ|mDrw*LWJ=+V%sZ#+z-Dpiuo$4r&QS3+<BY&+#sc-_p|ITK+KCE`4hESw5n7O~dd zTo{P^@W@**Fcer6X&-<NQ~Nmz9O{6-R_%|=B&A`TCgbP~lzal$cV|q9gfgOLj8Ha- z%2bh^AQ`h+be8Z^5XA}QMr^{<l%FU0^qy~Qd^958W<|;}mManwQPM<{kysD~lvGhx z+#N@fQSeZ(oU%M#5V??wWyS#Dkem!+o)t;TZVw0GiOGDRz*bHeKx{0HjP%DN@+GAt z<ARY>wvZZ`Mn7m^C;5bffh1N5&jG`|jSF&z@bNqZ2$I|-vS4vCS?mxcOp*x~ghla8 z3$j>|H6q$L*73S>saYb4obfWH5GYvs&MV2HqJR(q6EJQeTv0zy)XX545Z{=Q2`oO3 zGROr7wG^s?@X7zHZsQ23N90Ed&LL1)p&+hGXuo<X)0B^+^ffGOMedMzl15VrICml1 zVj&Twi3w{;8ZkgxL{g_<YvRfhbzas%6ipCgU9S2%f~Nz|19;@G7D6wri?hml2=9~h zDPH2GUD<QkY%6Q&R1QU_p8Ql<m7}n-CwPT>NZeNr#T9-Nt*qZHg)2wPs@B}4b_Eg^ zG8P=wUZE9Uwm`cDG?o{j*V^b!(bBD2;K^0k$hASPz40P{-<Q4ksd65olkb;a<xQ<+ zr|QhTs=czn6IiIcwFMt6_*)Bq?^`e$zR_^!ps%TCe?CDKn)~x^<-of~+b{64s}3r+ z>aOq<P0<9O+Al5fvssS^tLzyHw3i2l0*lMOvC(gARK4n;(wsxuec>(-&9|efTVbHC z8Gi4D1HQc{(7K>O96YMqO(Dw5Ns^NR^a&9OD6j$Hh0Z#;-LMv9@PQl*KO}>-{D5R7 z6f10jLNIB%Kn@#p&D)jFD|Id}-!NNNm#el2C9gd$YHzboFQ2|9kd49)$(7B>Cqyj@ zXb}y9duDSDY6Sh&=cOu271Bi1ZWhIY%et53aavNQnX-19Eir5fU9Q5{Ll=gi&n}dR z!h%DG6H{5YC>xj4A#UUjKxBBmwx>+hej<|`r1F^6j^5aH3p#zugx(CohM{(J->Mzm zL24HaLz}E!=pp*;ZMINw)HJ4W(<<bqt3xX-gg&S0_C{C(2(HC~MT&*sTqSX+BisW1 z@ThhqODA<_o8`a*GSvMiSf3Ock#Ip;w6)>he$xrMO>;5rw04`g2A&kL;RJpY8{KS! zBX$AJRxuhj=;bbkqNhQ&*Ze<_co*jXJ~&ocaa<&DYUm^DZgO@y%VWuor9L1P=c(K$ zVZm9H)8pN-H7XYMVKd#X?=7$_e}Ms6*Dc?=Wnl|r&+>4u)rWaAbDX}_Z)nH2T;Ol# zn#L}C^X;4PP2YOvXlc!L^-Rw%-`)fA3W!H=4tt@Aav0Wr7-pQ7DFeC}hR@0<)$xZ} zI}9n0!%(~rcui3DhW9j2XHlm`>ZE&p2RC{3gLmlWcVe^-%xH(lREG|hk**ysl4)?X z(}14=E~F{Ty0c}Q3Jq@TqCbMXhWeMql-wRPoj#%Q)!ygL(!PMsj-&@e&oa0DA0hyw A0ssI2 literal 0 HcmV?d00001 diff --git a/week-0/day-3/my_todo_app/venvironment/lib/python3.6/site-packages/setuptools/command/__pycache__/build_ext.cpython-36.pyc b/week-0/day-3/my_todo_app/venvironment/lib/python3.6/site-packages/setuptools/command/__pycache__/build_ext.cpython-36.pyc new file mode 100644 index 0000000000000000000000000000000000000000..4c79e11861b45d273f35919ae1c3d9b7b882bcdf GIT binary patch literal 10006 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 literal 0 HcmV?d00001 diff --git a/week-0/day-3/my_todo_app/venvironment/lib/python3.6/site-packages/setuptools/command/__pycache__/build_py.cpython-36.pyc b/week-0/day-3/my_todo_app/venvironment/lib/python3.6/site-packages/setuptools/command/__pycache__/build_py.cpython-36.pyc new file mode 100644 index 0000000000000000000000000000000000000000..3757e05bc5595c2aa05bb7c590dc5fe836b79d3a GIT binary patch literal 8531 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 literal 0 HcmV?d00001 diff --git a/week-0/day-3/my_todo_app/venvironment/lib/python3.6/site-packages/setuptools/command/__pycache__/develop.cpython-36.pyc b/week-0/day-3/my_todo_app/venvironment/lib/python3.6/site-packages/setuptools/command/__pycache__/develop.cpython-36.pyc new file mode 100644 index 0000000000000000000000000000000000000000..8a6af7991b81826b85abf87a4630ce16cb5cc6f1 GIT binary patch literal 6385 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 literal 0 HcmV?d00001 diff --git a/week-0/day-3/my_todo_app/venvironment/lib/python3.6/site-packages/setuptools/command/__pycache__/dist_info.cpython-36.pyc b/week-0/day-3/my_todo_app/venvironment/lib/python3.6/site-packages/setuptools/command/__pycache__/dist_info.cpython-36.pyc new file mode 100644 index 0000000000000000000000000000000000000000..bae4fc3e6a20a8c749fd13c072dba6c4bebf0c2c GIT binary patch literal 1352 zcmZuw&5qkP5GF<0l4U!a76`gcT0pndhxG!@AwkguO}9WV#R5TY0t!Ma(q1~UsFGBJ zxZcwy50kgZbMTr|USUt2p?`Kai3AQu!x88EI3FL4$JxP)$A5odgnT47o*4Y!VAv;M z1SyE1BC2UYVP<u-WCf!bi|csVD|(dtNkmWd-xAT6?2;9I5xpdnWc5dOVr1!LUgkns z$5k`a;2BvtZQf+hZ7$?YHB#iN$=$ikU!O}^=eCuVnyIREN;lajz(7tX)F&r;xhxw2 zF01vt!uak11{=gva3lewq=*D9m>A7z5pU2HJ&}m?EdhK3k-?mZA>bVQ!5-b}$7+Xo ziov7Xkgo=EK0i7ut$gaKy!va;C9ibjO4X=lo=-97)_+Rc{3oDVcD4H@ce>5>Ebz6u zGnLGpk#bVeEg7667$-1n21bxI;a~wP#e+zp07nqu$5z&}_rze{)$hk{*&es5Jv!@D zEsoT`ug;sw%3~{C*E+3hd(*8p=XtzmKW*RmZ-InUWvy0{>lQm;?;#LGMCj^=>*OyJ zZ&5%RfdZ;&3qHV{P&0r~@Hb`%pZ+c=;a1s0i0;bXzb^ZE+P)~(!4Zl!;H=34RC-A- zD0p;DIgCYgNhpDtZRc1J*Avkt9g=s^_e8Mo$VKG(i$uhW)D0HdVz`D?eBnRbu?IV{ zHCv2eml)O}xC_{u{^_PO*!tCAuYy%}t)$gB$O~2S@V|?Pes~sm1=)iR@6Dy-JAQ(1 z`(skzV#Z)RGhJiu1h1BjLDl;h>-qjnn`P;Iq^*zJ(w+OHJhSK&D3_nH&LrL(JZ?~o z_b19h#pVEFpLN811F;7%>|HQ~W;6}&Aw7&Ty1L$A3aCye%=943^wA_>CaF(3Z_1_Q z+-ICGwdiW}N1XrDmGyRID5R~73QF^%&PubBof+X)$U7jpfeyuPP&5YnjcMVYq*2WJ zamrE_;*-QDoC{rXZcxJh4pQ!%s_nGWMjDj#=I)1JIL`3r*Gl>H*A0VbSkq!p;wX(q Hbj1D#>VR7M literal 0 HcmV?d00001 diff --git a/week-0/day-3/my_todo_app/venvironment/lib/python3.6/site-packages/setuptools/command/__pycache__/easy_install.cpython-36.pyc b/week-0/day-3/my_todo_app/venvironment/lib/python3.6/site-packages/setuptools/command/__pycache__/easy_install.cpython-36.pyc new file mode 100644 index 0000000000000000000000000000000000000000..101f98817b078cf336a2eb46fa5c761ec9854967 GIT binary patch literal 66239 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 literal 0 HcmV?d00001 diff --git a/week-0/day-3/my_todo_app/venvironment/lib/python3.6/site-packages/setuptools/command/__pycache__/egg_info.cpython-36.pyc b/week-0/day-3/my_todo_app/venvironment/lib/python3.6/site-packages/setuptools/command/__pycache__/egg_info.cpython-36.pyc new file mode 100644 index 0000000000000000000000000000000000000000..d86b02e28469068ab2fcd308681cfe9e198ed649 GIT binary patch literal 20935 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%0D=@4^y(Bd}rmSa<B)|S_rFP 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 literal 0 HcmV?d00001 diff --git a/week-0/day-3/my_todo_app/venvironment/lib/python3.6/site-packages/setuptools/command/__pycache__/install.cpython-36.pyc b/week-0/day-3/my_todo_app/venvironment/lib/python3.6/site-packages/setuptools/command/__pycache__/install.cpython-36.pyc new file mode 100644 index 0000000000000000000000000000000000000000..9c43b4d41a00e528de5f95162aa5d674a6ccafd7 GIT binary patch literal 3932 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 literal 0 HcmV?d00001 diff --git a/week-0/day-3/my_todo_app/venvironment/lib/python3.6/site-packages/setuptools/command/__pycache__/install_egg_info.cpython-36.pyc b/week-0/day-3/my_todo_app/venvironment/lib/python3.6/site-packages/setuptools/command/__pycache__/install_egg_info.cpython-36.pyc new file mode 100644 index 0000000000000000000000000000000000000000..b2b610540829cf5cd2e0d2905964168cbeb6f84e GIT binary patch literal 2916 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 DnFa1- literal 0 HcmV?d00001 diff --git a/week-0/day-3/my_todo_app/venvironment/lib/python3.6/site-packages/setuptools/command/__pycache__/install_lib.cpython-36.pyc b/week-0/day-3/my_todo_app/venvironment/lib/python3.6/site-packages/setuptools/command/__pycache__/install_lib.cpython-36.pyc new file mode 100644 index 0000000000000000000000000000000000000000..98e7a6691989d4d581a533e507a075cd050d90b2 GIT binary patch literal 5050 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 literal 0 HcmV?d00001 diff --git a/week-0/day-3/my_todo_app/venvironment/lib/python3.6/site-packages/setuptools/command/__pycache__/install_scripts.cpython-36.pyc b/week-0/day-3/my_todo_app/venvironment/lib/python3.6/site-packages/setuptools/command/__pycache__/install_scripts.cpython-36.pyc new file mode 100644 index 0000000000000000000000000000000000000000..dabc91a510968090a5023f6ae0a860f76887bbc9 GIT binary patch literal 2237 zcmZuyOOG2x5T5RNdTeJmn<pVCCMY07vMb1e0}+Zul)!-%kVB-AqSko2*E_TGN_RV( zwZ<H9ByRi)F5LMwec-~0J0~ts)wVaw!dTr?Q&X<4$M@CT9}eTKZ$EwhW6yDZcg|cM z$PZzu?_lE&C#6%7gb<WzNej2|65q-}64-l~gm8DusOlxXDo*06pY)0I#Ni(IUpw3v ze&H?M#N+g-GY<X$zs{H#w``{SW7iBG<x0zZGShieo544!KKxqfl&3m1+oD!8DHzYC z$aEu5GW_%AazS_qOMM8Na1z3ugmRL&oO1WI0|(jwAl#UTJbFza;2wm~H(PnFbXt~7 zWioHInt%4F8P$!f(sHy?jn)=-M{PM%qqII5iRqN(^+7W_mTB7xxwcdpf#dPQJB9TH zEOiw&?G&V-owLO9k<MW*ci?=w|9I>fuaWsw24H4(@;cXfTIO@XnilJzj9)iQv`{Bc ziSpnVNA|(;uP^s>)$X-<dv7w!OMWkZd30E3O6)12XRU6UQk@mErmE7K@109`w>^;& zxEsJy*l>po$o%$stN%uInkok4!?LOV2?B@Wmp0u6Bw9cVFlmsy!k2e-P=rOaDnuPj zLC<>dE|w3lARzV8enIu1qs35Pz#Z1slES_X>*CT|xYo`EJ5TR)*j#7nE_|!?K^uTJ z-~kUo8+N3)w1~P;{>&q=A;o2Q^7WPC>JgQ{cK(!rHY%<y9neR`b(D&?I`q?fbsID{ zI=AZ;Z!euCedIj9u!!NDn_c`9bos?^&wvfk$lkuho||X`4KuWD*}%%g;+4o|I-QgP zUU2|AJBF$P_>w-$6_c|Xo~DoIaeJZ<n|c@Q$M2Y1Z@Rg=ZsD#-)d|4Q!q$Xqtr`4F z-3Nc{^c5a=%BygVbQwaxE7ZAQZK7tT5Asqd34_2fSEfR<gS@s_<QrcSnU>frC#ez= zAtQ%qZ*_HAiKLG;cqybp7Kh*_)mkQlr<P#PWUhrwE<MX@-W;p5O5>^%CAZL-HxW>n zopl0CwIX9#nJQ)C1KCupO=Vgo5r&w`sY-gOVuvE-LYl!bp0KX_xG!V$M@60lB4=5} zjfd4pf{DVX#P((FFPI#!bkL7=b4*~}N#okT;$fD4s|{HrufetrOML<x(1*q(A{S^t z0_uTG$+p!ENDR~phzGxb#BM+%cypD^FP$eFHiPKQvJpID0w_O$rG9`72u5)fFZ_xw z0^(>G#N6$WZ2r=P=QYI&0Q-^x0i2> e4<7+9DC&D8fmF{{(VF63V4UITzHdH{7G zowe-&?EvJR5AT5@*Wo=(uK?g4&Of$|glRZ>1MCsPXQZ2vJ`|ggI658JmLOwl{Oqu5 zxEW?MDMhW>tV-3<{Ki)+Km!LxchqL|g0DNukmLMsVAuY5TV90x<@>mOfE&(O<KZYa z{Y@F+Ktmg4ycWJ6#w(h<me<iPz*${$6LNWie3Lk~VEBU4__oauTiGZvj#sGZub9FR z)h5cCT0^|x7{V7xm`~v|A^4kUOrQZDLW2QhWXQpJq}+n@?!&TQ1cz?ZZHo;+3L*yZ z5s~@LO&V*K?w*D7{+P%+;9wk@h}p0hGcjWj(5w_74;XtfOG^wGo<hcWlQCu|yv3=+ z5YB{!!&_Pu<JSjyukdRS5syY*^q!p#<ALcRW#Fq^DqHd7-P7mOp>!^6xr3h3>1xb; wgwjpe%&<M0GAUFulNrn!oF}U(g5CJP&`k7TmEY$$VHMJ008ENVL@&Gl06h+Ap#T5? literal 0 HcmV?d00001 diff --git a/week-0/day-3/my_todo_app/venvironment/lib/python3.6/site-packages/setuptools/command/__pycache__/py36compat.cpython-36.pyc b/week-0/day-3/my_todo_app/venvironment/lib/python3.6/site-packages/setuptools/command/__pycache__/py36compat.cpython-36.pyc new file mode 100644 index 0000000000000000000000000000000000000000..8658ed1655370aa7f728c51be93d82df9e3bc681 GIT binary patch literal 4582 zcmb_g-EJGl72ZECR}@7{j_edk&`w;Z79EQ=YM^P{KuuuBK`$btjsXLNgY9Z(C@#I+ zUC%6Ci6GmeGTJ^sFZ%+0mcGH<_Np(?i(d6RvrAG`+z16CVrI_#oS8X)-<j3@t*zFT zUw`z?^exN!r*-bn1^p?C;;6XA?bPa1>!kMB?%OueZt9HPzH4YN^~Q~U!_bY?A2<6= z+xo)dK5xFZc=OEZ2Vz4sMhzaEIr2A{*;vhR`)jM)`WH^J4!gGYj??@IZ9C4hS3;Iy z5tT#q8;U2Y1mO>ov=lNXhQ;6V!p|`xtiH{yzQgUl%N_2%w)&oEaE~`$TW5CPuddZ^ z@_=t(F5oS`iFSjx`4-w1@9-;VH~BW-LEGk6`CDkW_%1GbO<y$^2_w!!E(XygE!Fhj zEr!1@lau`<V};CLB|OQF*&vs{jU?ZX^D(4Ij*>JfPid45CRto2c@~+GNMUf2ah7Ce zBa(DdCaGe1#=bf&hiLBiKI*m1?4z7zdC3G%N>&a9i*qi(2|7_MP9vq5IEh7p*_=%Z z9+hJKJhKbVOvXhj#v&^Poy?Y}_Smm7Rf>q;VL417lg0jmsmYN!p=b7p?b-m;QhA7? zK0!6JM%EdI(AstD)U8{$Ufnk8)~D7ugA;x1Sk`BpvnWlCh_#{_OfM9Pr9?XDQ7?t6 z9+=CJ1sL0BPd@+b(U+eyD7m6~<w?1=K#6iv^orB9!BVL5E>*WL&d?o-i4+S%jB`Gr zTae;l!Af^#Po`p-6zhi(cXjI`PmHFIPFWGfFQQ`+!ZZ=vJDMaZ4~x_8+J#n(5I(7o zA%@UwR~cX-^S2knywz>gw^u%7Dxb(0GLZHl02UXKELlE)=aeE-kPE&i*+Z;2l95b= zI(Io%c^kZeG+Cd+_INH-cB^D@RK`QF4&gyUs`poNJ&PpvO$Kc5O-Aa{i3{Vf2pS(J zN+FJZ!35k8VE}r04UsB%J#JZ4akLWiu-nvcuf=Dm$|&QAM5V8<Pb|3g?)rFPf=>Tn zeRQRMy|X?8wO!mI4xu}xudOevjY2?2KKyq}UO~A0=i%LQT-+^^V&8bfe)8(YFpHJA zYxGg(d8*En0F*H#x?7yy|5*ht@LJtIk4aZ46g#M_PGGNo(;s~szIx~RmND&tm2lO> z^aBtjVtM4ufT3!e;?(qA>d$RMdo%mYe(ubjxjS<)(wI4C_6r}V=}iBzG~B~TiG4** zRwl0m9IqV0>&Owa7+^LO@rw%Q$hi*=4%izm9LCDzh0rjnz0d?j7_MCHsho)Ak^ko| zy-86Bxz}Co_BevKEw_8z^|g~L?a|$}U)@1Bqa$So8ma)Q>m~&kPh{6a$}%(Z8nmc4 zFec(Mm!~?QP|l*UFiuca+qCA&MFBCWTBxj6+xDEcy=_l#T&|a;EgRsZVr=<05QNW! z%_Ha7ncF9Snc0u5Z~icMN_Xaz9+Gr6gB7_w_fGa^F6P)Amai--?{R1Dq34g9WMSL- z%6fV4nKkp&UojeRmwTg)nR{lx4d1Y>m%B^OKb_|?;{k`4T(8$X!@~mJ;vYVKI=!=q zSp%OY<Cz@!fT>|VNjV!v@E+hVq1M#7!=~@8bKLqs-CD7ATm5DQI$!HHWjdK0A;spI z-mF40Bs=I<0>GhtVxb!Vw^Yb?p{~kOWKiu#aE^>?51BpF-Uz7PZAc2V{>I`0N;`wB z??reT^!?+!43qMLg=G^AAEPLS%Cb9l3qKFPs%_i8<JrEw?X>KUGrj#LTc3~G6~ZlT zPVu|6`OneeHm|IG+gSSstZkL>fRS5zWXCg#TiAHylkH%)PHhkOaJsdYAEz4?Ovi)c zZd1}BlHf+-9cgJlQRLPVDcq9GjF_atyPi>#4wj(XM7-cBm+6MdX%}@AfcX$b5n%zu zTJ}|Y+Pzd4i~X0XAZ7a~#{KC{3o)S%0xnQc!I>p*f^tWIun`_4B>u?*&^}!M-gA#2 zZSKt*CpTsdjJz}V&FW?uj5bECnLG2(Odz~GcxJu4Q>)E6)WI^hZ|ZBuq6AFQlW!_` zSVOpc57*J#!w7(eM@Cq`E{x*jPs|+gRSCOF{kpZvL-KtrSt(!s7+siz+)>^pZnt=G zteZ;4Az(*uRQECD0(+EvhgMS>S|O0!K=&z%YNN8emfNzoy<J#fdh1gCSIKj!eew@- zMx*^df*|eFvrzu-L>k(GP6tRL?#wpe^Qdf4D!~XKW)u)Dr&vk425lgvPBbTX3_RVO zd*JcF<JCN%<&&BRG<crCHoLWL?8EM6rTPx3{+vR4xS;$YD(wO!q)XkUbIT8?%cvs7 z*MYCSq!eS_gjx-l{}fZ&9$Zu@;Ws&-x{k`Cz_wdXV7Kj#ORi1S^utS)ySnO9!4zp! zjDq(-EEP;njqjk^(bwGDAT3<9b_s-N*RM2kg*1Zx(icC(mMe#p`{;I^%Et&-F3P!y zu?dQzkh2V+O>bT*7Y_V>1Zq`29^>`3CXsoMRc~4O9TL$?=b}Uu15=dq5?vk!)dTSR z5o)UvYVmrkEwxFOs>i-dCi)_~DAN|ket$uxy-TfBA9mR7=pZyHGYoYrtX&0kI}Be= zqLktQy=EBlJPt#-gOhX{`LRsmvA_o{H+j{hK}qm#07p`YNb(;^DwlM}bN4n7Meid? zo<#_yc2NaQ&k3%#cY<qyA8ZFZK_h6G6=wGsE0%xsjru8yLABNY3Fw7tI1an6JixsC zB~`TYe;)s5Oe%`H!0xsxgrJ`8tUjaZ6W#!b-dPPUaGwyd|L*E}-=iccvz|&$dSiTc mt17ROq`C<^BU8#ZT}B6=R5{~-gflOGLK6I(w%eJto&N$Gs-@BZ literal 0 HcmV?d00001 diff --git a/week-0/day-3/my_todo_app/venvironment/lib/python3.6/site-packages/setuptools/command/__pycache__/register.cpython-36.pyc b/week-0/day-3/my_todo_app/venvironment/lib/python3.6/site-packages/setuptools/command/__pycache__/register.cpython-36.pyc new file mode 100644 index 0000000000000000000000000000000000000000..3c41a28890c06669c03d79aab887331e86c72792 GIT binary patch literal 552 zcmZ8eJx{|h5Ix&z6G{tv#l)7O&A`BdP!R)LCBzm9StWKuLcXvQBv7~Z&+wPLGVvFf zI42FNIO$$a=X>v-E*F!@==A>b@q_?;!9h4!FEI5vf&f7>NJ&aVb_aqAwgbT=OX-${ zRFDVooo}3jWn{4rip2s`pCL#HiGYwI%Si{}KoCK95Do>iY~v{zC%Tp@LMLt5uT{9k z)Ki2Fr08Qy2-N5#WgD=y0OZr9@njtHq*#|IcC4C$M`fO`3Spd5C9$$fhGE|)#?dlc ze}eL`_j41}c@<PiHG683Ow5wEm**nVGSISas=6#QeOT^QgWm4EdRIf#aWS<$8qg8> z82>%v#-;BXkMm-cOU})R^Sl&IX6rHMugxm!Ueo}|ollo@QAV7%%B{@<IO@mjwsxgQ tJlYa{C!7krVpAuXp6{*BdoRY_ciP!*ojt)nZR1^a2CwZO(Dra+_6xT=ey#uj literal 0 HcmV?d00001 diff --git a/week-0/day-3/my_todo_app/venvironment/lib/python3.6/site-packages/setuptools/command/__pycache__/rotate.cpython-36.pyc b/week-0/day-3/my_todo_app/venvironment/lib/python3.6/site-packages/setuptools/command/__pycache__/rotate.cpython-36.pyc new file mode 100644 index 0000000000000000000000000000000000000000..83812c93861fc1eb969841fe161bf02bfcaffcf5 GIT binary patch literal 2538 zcmZ`*Pj4GV6rY*hwbyGWaon_NprAdpB&LmnKmrMcQmH|l2vn6QSVW8C89VFjzs!u= z#Ii5ANF2EEF}QH%#HZjiS5ABdpLlN^=TB*OHE-U&H}mGrd%t<JA1y5fD^ET-&^{sm zkSmW1{3B@UM<ASVnvj&XDMg+oEOpwB<(<S$y|!n0Hz~DCpm&pUy9~XT_-UnGvAR+c zq}6tnk}nA_bN?mbzNk)}c8$AFNwe}VtU{X9)Vg{0Tu2=i9eo7fPLlVbTic739_lzz zUl%&gvoEB~<v!|Fd<tFpah|4~jCaw@;_-la1WkPkM36S+q|G>OJDjy$euJ;^n|-J4 z^$9p#<4Z3IIK9kQp!a#5uR>qp4RG$3Dal-Sv>3g$ClaAWm?vDwkb_S$J_NV&OpQL| zZ`3^qkA*1WtRL=&nRp?T4tsGT)U1?tbob~pL(|zE*svBdQ=!g7D-O4$I2p!L@aC+7 zYi;vb!dO1L2aM?IT%Lt5j)WAUJ`&fx2|H5EJX{qf9M870VR{H2=e@aUbmf}&xG0Y9 zQV113*fVI4p{ZLyI2n^@P9cuKGfp5jbie5s&-!b8G#P<!#zk9@7FUU+_dAg{!NBbE z9i0|CMO<tj4&#Jx$Ip+CvaS+4O6Xys^E^>k+3q}}JM+-DiZj!QvslNSBp!(<w=ht* z(Y+E7LQC+DHqJ-?f8@2D)nJ0%*)PD1$pH3s?8}CxoKERa6eO@aklY0cL&;fPJ1Cuk zE@IC}cE=^!Jr3kI6hcJ_jB{|@_atNA5$&N(T^f|9OrCO=doS%O1D}_sbdOjoD5=0v zs7x6i5Qt^4KYH@j5Wt}d(T#g&VV(ihWSHiV;w>AGZ6%711Ss<6IY=&Gvn5*nR=C+3 z#l<Gh+H8q_f3rEdd(Gq}5G(>0c^_?TZ)48F6xTl#VJ8dYOpCsd7lA`KU{!bu%?7>? zTR5mss3v1Npi|h^Z|nq4vrTuCNt|FjJR?Pu8P@v1(8B8G1W`2$b`t;%?5%isAMN6t z5*gh;&tosnuI0P6o8;Y2q8<XXm^Y&jjCW|^+<@7zFm{$S1G$Pkx-D-2F%Im?1mAX& zp|CZ?1hI-Ur8`+yNGuqph7M=_NS_r#f%`=gYjYDY8Vxfpz#+jG=xb8BhL#cDmwPhx zSG|4*^fqFI29(i~6Hp)eI$g$>-DacpH|+N!_=s_I&!YBkU=U%5R=^J9PC`>U0siz) zMCl$m_+!F=a|Z4d%JDiGvvmRzs=WcA5;XppO##glhkLvP=yVX36KCuUDpSBS^a1v| zI;iooUK#_sVTOYmn7z!&&uoKCoYOs=d9eEfo46Ctj`qhMA{s`ms9)`Rb&yc`mtGw- zkfY=T<u?}mGjj6ov-t_A>>D3Y8^u{Kmso<ZhV+yC(9riULU9d;cVLjk;Tqy_KnJi% zaFzDhRV+G&<;u8trx?F4bgJW208lnywxPXO5-8sW@yE~>XnglPJ93!44uGRu_qZ+S zTk8B&Vtu`*Mpb)V%s-lIrV8_;^Rg!21N#=7rgpUwTlb=@lM1<oBbq>rJILeA0val6 zF10C30hgo_(y?j`7u=L0n`6Ap<yi!48822?jZ5kXuTHqdQZ0orrD2xD*>STpM=yF} z%I9^&c(yJWswJMsS0ZB^FuMbC6#_vt*I11<=o;YIr#@>~MAx7a*FZB0F5?E*goIxV zA}dG&ARwqBkF{7X%>~QIuOO+TATWMpV-ZCrh@v#-!$bgIi=vZZC&4JeS2>D!-UX)0 zh3Z1F!TZ?Mh7g{`K{YFfaJ`65wh+j5T;wj2T_l$$*m78!WEluLr?8y()MYMX_Vl{U z_xy&{H<!#ZrqBMGw2;oLp1rTF(59$ezZ@j+*G0`sl1(upt-X4A3AV&3{s_#gQE(}j dSOe^;uXES<yYu)w#B-xCl8^&<F)xrM=Rd}enY;i1 literal 0 HcmV?d00001 diff --git a/week-0/day-3/my_todo_app/venvironment/lib/python3.6/site-packages/setuptools/command/__pycache__/saveopts.cpython-36.pyc b/week-0/day-3/my_todo_app/venvironment/lib/python3.6/site-packages/setuptools/command/__pycache__/saveopts.cpython-36.pyc new file mode 100644 index 0000000000000000000000000000000000000000..cf0a0390ba30bc54138955a7c9f8a57789aa85e4 GIT binary patch literal 883 zcmYjP&2G~`5Z)g<F-@wV01`+&SfZC4l2k&XmkNPEaH~K)RI;d6j(3x8>c8x+t2S~@ z=@al4ywYAd@d})nbsdPM8INbi-+c4!zBxQR7<@au`aux-h4vl~;`d<s7#v3&rzpb_ z&PYTs`hqy&^Z{`y$d*QwdlzWr|AtO9BDN>EG%P9dxm?&@Q5sp~Y!+*gxQ5*W10M$* zK_F0sIf@9!07fE@1LOmWeC`8q#|ApS6#%5yuP-19lOoIFoR3qPi|}!P4owlp;asL- zed^jnU6o}j1>bMb!c^rXnJ>aZg@w5m3a}i{=EnrL<ht<gfPDnhCAb<b(FRMjA$MPE zyu_c-)#nYZDaSWNg{$G+TgZ}{Zt;?C5mb-AlZ^-FZ#uQl33Q#*otiAYno6`KwReVA zCzoh7yhO$abf|&vZYc(_VP|@-+zG7v?W&<$brje>m)a;ftDLBI&{kQifgLP_X+Id3 ziLt&kBGdK&7UyCfSE*4>cpEsO@;DQ=%hf$oRX*xkPm6SJJvRa*7skkZp)E}^ZYfN# zRI9|&+c^D+)H6W&^I>YTa$3rAJga2N$MW{(I#0BiHaeT4NcDc$vYqZub5h=03ZtI@ zmL7sbxPv{?Cjlnp2nYBjS@-`nL*u!-3yeA5jM)RmvVvEsi~EeNsyJ;cUB-BkK)T0; zPLyn}pn3rV8s2;Exyw1FooRRG0Wk1LlRF=I(X0QfOj`aENP!%Ukc#dA_CTFB$|2j} P?2+L+ceAup{we(nssr&& literal 0 HcmV?d00001 diff --git a/week-0/day-3/my_todo_app/venvironment/lib/python3.6/site-packages/setuptools/command/__pycache__/sdist.cpython-36.pyc b/week-0/day-3/my_todo_app/venvironment/lib/python3.6/site-packages/setuptools/command/__pycache__/sdist.cpython-36.pyc new file mode 100644 index 0000000000000000000000000000000000000000..3057948a51866dd099d6fdf56c81e6538fc106c9 GIT binary patch literal 6347 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 literal 0 HcmV?d00001 diff --git a/week-0/day-3/my_todo_app/venvironment/lib/python3.6/site-packages/setuptools/command/__pycache__/setopt.cpython-36.pyc b/week-0/day-3/my_todo_app/venvironment/lib/python3.6/site-packages/setuptools/command/__pycache__/setopt.cpython-36.pyc new file mode 100644 index 0000000000000000000000000000000000000000..f7eb5efd66891d197a0a350f952106c8ddf2b330 GIT binary patch literal 4561 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 A-2eap literal 0 HcmV?d00001 diff --git a/week-0/day-3/my_todo_app/venvironment/lib/python3.6/site-packages/setuptools/command/__pycache__/test.cpython-36.pyc b/week-0/day-3/my_todo_app/venvironment/lib/python3.6/site-packages/setuptools/command/__pycache__/test.cpython-36.pyc new file mode 100644 index 0000000000000000000000000000000000000000..32c544030c22b1a42fe7692bf393c2bbae037383 GIT binary patch literal 8120 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 D2^SKf literal 0 HcmV?d00001 diff --git a/week-0/day-3/my_todo_app/venvironment/lib/python3.6/site-packages/setuptools/command/__pycache__/upload.cpython-36.pyc b/week-0/day-3/my_todo_app/venvironment/lib/python3.6/site-packages/setuptools/command/__pycache__/upload.cpython-36.pyc new file mode 100644 index 0000000000000000000000000000000000000000..d7d161cf6ab4874b34e07d322c09181d4b9ac3c2 GIT binary patch literal 1350 zcmaiz&2H2%5XbE#yPGcC(jp{^xL6<|f@q8200+c}5CVi)K)t|9$V%5v>uoj;wo}Ne zoVJg^OYlm$a^e*@G2{JEL3~*9c%0Z{&u{*|y}H^x`{vI3FA*W%$f*W%@({Yc4n`0` zb27j&$muv3gp@obA{5aH5s?f>!89BMg6@)}^&QreenOjeRpvSsL!2*K0M0|`_8J&T z22>E-HwZ-_!V@xxL?l`;wnSTWU~G#RVy+n6H%Yq;+N&dJj1rOwnWa_k*z6d#ClAsi zr44hM={=XKf|aSYAGHyFAIwvBlo};n&2+|u$}(wW;n>Htw%dNqkit3GaKtkoL$`Oq zI5MK6;FwG)CC6kGmYXgbwWi?n5a#XjCfLrD_%Zh1+k(K|X+K$MB5l;ZPoi1RRFURt zBDpS|(uHl}%1TqDW7%}}rNcXW2fsG)B8BD>N0@vu=b6!Cekg0Biv8w1FJW3bo@ujO z0wsv7%(Jh=^dN&D4|d$R+$mMLwO6TJY^kHegJNjqj+L$|oz}TM?GE*LoEBndhIhNH z4NBq+0>N;E_JTI;w%RnNlMC}jzvs5(i7aue=Xnd9deecXrt~vCrXvdMfbA%p2D>C8 zE;{U*8x)E_$vaX6Z$WiHGMv2hMM4oga!x|NSZl<xtTaO`Y>s7{?N()Jq_ynHr=gtT zo)sEnG@bdne$r~XoU3uEjpKaKgEA~BHeDl2ZI#oeHZ8b$v$7191O}5bYiJP4%&elf z0_Gxg+XX|S05Gl7H9EOGNA-_#E~%jkF|4O{6`VQ-9g->N3Mf$*WC4(3zmUQ=7)+im zNxk;MU?2>T|3W=X7t9?<=3M<BNc|)<Z8+I%fN3^f$a+twMm#SZyh2b-LT3nm%N~=y z0^P=7X4#*klS_--|De`>(rIGO@f~oE<rr&G<>>b~|4^m*{7;8-p@*D%HG0Yh4?Bh5 zU&Yq|Rfi?>w}_)Ch}Yt-e}+lqvuZYkvaWI}x7%~Q``;$~OUNd^H@nw;tc}GN5z}7y E6U1jyq5uE@ literal 0 HcmV?d00001 diff --git a/week-0/day-3/my_todo_app/venvironment/lib/python3.6/site-packages/setuptools/command/__pycache__/upload_docs.cpython-36.pyc b/week-0/day-3/my_todo_app/venvironment/lib/python3.6/site-packages/setuptools/command/__pycache__/upload_docs.cpython-36.pyc new file mode 100644 index 0000000000000000000000000000000000000000..9504c774258c34b3ba96ea9d5d3329a26ff3afd5 GIT binary patch literal 6059 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 NcIppWi|D3n{~5KuXJr5Y literal 0 HcmV?d00001 diff --git a/week-0/day-3/my_todo_app/venvironment/lib/python3.6/site-packages/setuptools/command/alias.py b/week-0/day-3/my_todo_app/venvironment/lib/python3.6/site-packages/setuptools/command/alias.py new file mode 100644 index 00000000..4532b1cc --- /dev/null +++ b/week-0/day-3/my_todo_app/venvironment/lib/python3.6/site-packages/setuptools/command/alias.py @@ -0,0 +1,80 @@ +from distutils.errors import DistutilsOptionError + +from setuptools.extern.six.moves import map + +from setuptools.command.setopt import edit_config, option_base, config_file + + +def shquote(arg): + """Quote an argument for later parsing by shlex.split()""" + for c in '"', "'", "\\", "#": + if c in arg: + return repr(arg) + if arg.split() != [arg]: + return repr(arg) + return arg + + +class alias(option_base): + """Define a shortcut that invokes one or more commands""" + + description = "define a shortcut to invoke one or more commands" + command_consumes_arguments = True + + user_options = [ + ('remove', 'r', 'remove (unset) the alias'), + ] + option_base.user_options + + boolean_options = option_base.boolean_options + ['remove'] + + def initialize_options(self): + option_base.initialize_options(self) + self.args = None + self.remove = None + + def finalize_options(self): + option_base.finalize_options(self) + if self.remove and len(self.args) != 1: + raise DistutilsOptionError( + "Must specify exactly one argument (the alias name) when " + "using --remove" + ) + + def run(self): + aliases = self.distribution.get_option_dict('aliases') + + if not self.args: + print("Command Aliases") + print("---------------") + for alias in aliases: + print("setup.py alias", format_alias(alias, aliases)) + return + + elif len(self.args) == 1: + alias, = self.args + if self.remove: + command = None + elif alias in aliases: + print("setup.py alias", format_alias(alias, aliases)) + return + else: + print("No alias definition found for %r" % alias) + return + else: + alias = self.args[0] + command = ' '.join(map(shquote, self.args[1:])) + + edit_config(self.filename, {'aliases': {alias: command}}, self.dry_run) + + +def format_alias(name, aliases): + source, command = aliases[name] + if source == config_file('global'): + source = '--global-config ' + elif source == config_file('user'): + source = '--user-config ' + elif source == config_file('local'): + source = '' + else: + source = '--filename=%r' % source + return source + name + ' ' + command diff --git a/week-0/day-3/my_todo_app/venvironment/lib/python3.6/site-packages/setuptools/command/bdist_egg.py b/week-0/day-3/my_todo_app/venvironment/lib/python3.6/site-packages/setuptools/command/bdist_egg.py new file mode 100644 index 00000000..423b8187 --- /dev/null +++ b/week-0/day-3/my_todo_app/venvironment/lib/python3.6/site-packages/setuptools/command/bdist_egg.py @@ -0,0 +1,502 @@ +"""setuptools.command.bdist_egg + +Build .egg distributions""" + +from distutils.errors import DistutilsSetupError +from distutils.dir_util import remove_tree, mkpath +from distutils import log +from types import CodeType +import sys +import os +import re +import textwrap +import marshal + +from setuptools.extern import six + +from pkg_resources import get_build_platform, Distribution, ensure_directory +from pkg_resources import EntryPoint +from setuptools.extension import Library +from setuptools import Command + +try: + # Python 2.7 or >=3.2 + from sysconfig import get_path, get_python_version + + def _get_purelib(): + return get_path("purelib") +except ImportError: + from distutils.sysconfig import get_python_lib, get_python_version + + def _get_purelib(): + return get_python_lib(False) + + +def strip_module(filename): + if '.' in filename: + filename = os.path.splitext(filename)[0] + if filename.endswith('module'): + filename = filename[:-6] + return filename + + +def sorted_walk(dir): + """Do os.walk in a reproducible way, + independent of indeterministic filesystem readdir order + """ + for base, dirs, files in os.walk(dir): + dirs.sort() + files.sort() + yield base, dirs, files + + +def write_stub(resource, pyfile): + _stub_template = textwrap.dedent(""" + def __bootstrap__(): + global __bootstrap__, __loader__, __file__ + import sys, pkg_resources, imp + __file__ = pkg_resources.resource_filename(__name__, %r) + __loader__ = None; del __bootstrap__, __loader__ + imp.load_dynamic(__name__,__file__) + __bootstrap__() + """).lstrip() + with open(pyfile, 'w') as f: + f.write(_stub_template % resource) + + +class bdist_egg(Command): + description = "create an \"egg\" distribution" + + user_options = [ + ('bdist-dir=', 'b', + "temporary directory for creating the distribution"), + ('plat-name=', 'p', "platform name to embed in generated filenames " + "(default: %s)" % get_build_platform()), + ('exclude-source-files', None, + "remove all .py files from the generated egg"), + ('keep-temp', 'k', + "keep the pseudo-installation tree around after " + + "creating the distribution archive"), + ('dist-dir=', 'd', + "directory to put final built distributions in"), + ('skip-build', None, + "skip rebuilding everything (for testing/debugging)"), + ] + + boolean_options = [ + 'keep-temp', 'skip-build', 'exclude-source-files' + ] + + def initialize_options(self): + self.bdist_dir = None + self.plat_name = None + self.keep_temp = 0 + self.dist_dir = None + self.skip_build = 0 + self.egg_output = None + self.exclude_source_files = None + + def finalize_options(self): + ei_cmd = self.ei_cmd = self.get_finalized_command("egg_info") + self.egg_info = ei_cmd.egg_info + + if self.bdist_dir is None: + bdist_base = self.get_finalized_command('bdist').bdist_base + self.bdist_dir = os.path.join(bdist_base, 'egg') + + if self.plat_name is None: + self.plat_name = get_build_platform() + + self.set_undefined_options('bdist', ('dist_dir', 'dist_dir')) + + if self.egg_output is None: + + # Compute filename of the output egg + basename = Distribution( + None, None, ei_cmd.egg_name, ei_cmd.egg_version, + get_python_version(), + self.distribution.has_ext_modules() and self.plat_name + ).egg_name() + + self.egg_output = os.path.join(self.dist_dir, basename + '.egg') + + def do_install_data(self): + # Hack for packages that install data to install's --install-lib + self.get_finalized_command('install').install_lib = self.bdist_dir + + site_packages = os.path.normcase(os.path.realpath(_get_purelib())) + old, self.distribution.data_files = self.distribution.data_files, [] + + for item in old: + if isinstance(item, tuple) and len(item) == 2: + if os.path.isabs(item[0]): + realpath = os.path.realpath(item[0]) + normalized = os.path.normcase(realpath) + if normalized == site_packages or normalized.startswith( + site_packages + os.sep + ): + item = realpath[len(site_packages) + 1:], item[1] + # XXX else: raise ??? + self.distribution.data_files.append(item) + + try: + log.info("installing package data to %s", self.bdist_dir) + self.call_command('install_data', force=0, root=None) + finally: + self.distribution.data_files = old + + def get_outputs(self): + return [self.egg_output] + + def call_command(self, cmdname, **kw): + """Invoke reinitialized command `cmdname` with keyword args""" + for dirname in INSTALL_DIRECTORY_ATTRS: + kw.setdefault(dirname, self.bdist_dir) + kw.setdefault('skip_build', self.skip_build) + kw.setdefault('dry_run', self.dry_run) + cmd = self.reinitialize_command(cmdname, **kw) + self.run_command(cmdname) + return cmd + + def run(self): + # Generate metadata first + self.run_command("egg_info") + # We run install_lib before install_data, because some data hacks + # pull their data path from the install_lib command. + log.info("installing library code to %s", self.bdist_dir) + instcmd = self.get_finalized_command('install') + old_root = instcmd.root + instcmd.root = None + if self.distribution.has_c_libraries() and not self.skip_build: + self.run_command('build_clib') + cmd = self.call_command('install_lib', warn_dir=0) + instcmd.root = old_root + + all_outputs, ext_outputs = self.get_ext_outputs() + self.stubs = [] + to_compile = [] + for (p, ext_name) in enumerate(ext_outputs): + filename, ext = os.path.splitext(ext_name) + pyfile = os.path.join(self.bdist_dir, strip_module(filename) + + '.py') + self.stubs.append(pyfile) + log.info("creating stub loader for %s", ext_name) + if not self.dry_run: + write_stub(os.path.basename(ext_name), pyfile) + to_compile.append(pyfile) + ext_outputs[p] = ext_name.replace(os.sep, '/') + + if to_compile: + cmd.byte_compile(to_compile) + if self.distribution.data_files: + self.do_install_data() + + # Make the EGG-INFO directory + archive_root = self.bdist_dir + egg_info = os.path.join(archive_root, 'EGG-INFO') + self.mkpath(egg_info) + if self.distribution.scripts: + script_dir = os.path.join(egg_info, 'scripts') + log.info("installing scripts to %s", script_dir) + self.call_command('install_scripts', install_dir=script_dir, + no_ep=1) + + self.copy_metadata_to(egg_info) + native_libs = os.path.join(egg_info, "native_libs.txt") + if all_outputs: + log.info("writing %s", native_libs) + if not self.dry_run: + ensure_directory(native_libs) + libs_file = open(native_libs, 'wt') + libs_file.write('\n'.join(all_outputs)) + libs_file.write('\n') + libs_file.close() + elif os.path.isfile(native_libs): + log.info("removing %s", native_libs) + if not self.dry_run: + os.unlink(native_libs) + + write_safety_flag( + os.path.join(archive_root, 'EGG-INFO'), self.zip_safe() + ) + + if os.path.exists(os.path.join(self.egg_info, 'depends.txt')): + log.warn( + "WARNING: 'depends.txt' will not be used by setuptools 0.6!\n" + "Use the install_requires/extras_require setup() args instead." + ) + + if self.exclude_source_files: + self.zap_pyfiles() + + # Make the archive + make_zipfile(self.egg_output, archive_root, verbose=self.verbose, + dry_run=self.dry_run, mode=self.gen_header()) + if not self.keep_temp: + remove_tree(self.bdist_dir, dry_run=self.dry_run) + + # Add to 'Distribution.dist_files' so that the "upload" command works + getattr(self.distribution, 'dist_files', []).append( + ('bdist_egg', get_python_version(), self.egg_output)) + + def zap_pyfiles(self): + log.info("Removing .py files from temporary directory") + for base, dirs, files in walk_egg(self.bdist_dir): + for name in files: + path = os.path.join(base, name) + + if name.endswith('.py'): + log.debug("Deleting %s", path) + os.unlink(path) + + if base.endswith('__pycache__'): + path_old = path + + pattern = r'(?P<name>.+)\.(?P<magic>[^.]+)\.pyc' + m = re.match(pattern, name) + path_new = os.path.join( + base, os.pardir, m.group('name') + '.pyc') + log.info( + "Renaming file from [%s] to [%s]" + % (path_old, path_new)) + try: + os.remove(path_new) + except OSError: + pass + os.rename(path_old, path_new) + + def zip_safe(self): + safe = getattr(self.distribution, 'zip_safe', None) + if safe is not None: + return safe + log.warn("zip_safe flag not set; analyzing archive contents...") + return analyze_egg(self.bdist_dir, self.stubs) + + def gen_header(self): + epm = EntryPoint.parse_map(self.distribution.entry_points or '') + ep = epm.get('setuptools.installation', {}).get('eggsecutable') + if ep is None: + return 'w' # not an eggsecutable, do it the usual way. + + if not ep.attrs or ep.extras: + raise DistutilsSetupError( + "eggsecutable entry point (%r) cannot have 'extras' " + "or refer to a module" % (ep,) + ) + + pyver = sys.version[:3] + pkg = ep.module_name + full = '.'.join(ep.attrs) + base = ep.attrs[0] + basename = os.path.basename(self.egg_output) + + header = ( + "#!/bin/sh\n" + 'if [ `basename $0` = "%(basename)s" ]\n' + 'then exec python%(pyver)s -c "' + "import sys, os; sys.path.insert(0, os.path.abspath('$0')); " + "from %(pkg)s import %(base)s; sys.exit(%(full)s())" + '" "$@"\n' + 'else\n' + ' echo $0 is not the correct name for this egg file.\n' + ' echo Please rename it back to %(basename)s and try again.\n' + ' exec false\n' + 'fi\n' + ) % locals() + + if not self.dry_run: + mkpath(os.path.dirname(self.egg_output), dry_run=self.dry_run) + f = open(self.egg_output, 'w') + f.write(header) + f.close() + return 'a' + + def copy_metadata_to(self, target_dir): + "Copy metadata (egg info) to the target_dir" + # normalize the path (so that a forward-slash in egg_info will + # match using startswith below) + norm_egg_info = os.path.normpath(self.egg_info) + prefix = os.path.join(norm_egg_info, '') + for path in self.ei_cmd.filelist.files: + if path.startswith(prefix): + target = os.path.join(target_dir, path[len(prefix):]) + ensure_directory(target) + self.copy_file(path, target) + + def get_ext_outputs(self): + """Get a list of relative paths to C extensions in the output distro""" + + all_outputs = [] + ext_outputs = [] + + paths = {self.bdist_dir: ''} + for base, dirs, files in sorted_walk(self.bdist_dir): + for filename in files: + if os.path.splitext(filename)[1].lower() in NATIVE_EXTENSIONS: + all_outputs.append(paths[base] + filename) + for filename in dirs: + paths[os.path.join(base, filename)] = (paths[base] + + filename + '/') + + if self.distribution.has_ext_modules(): + build_cmd = self.get_finalized_command('build_ext') + for ext in build_cmd.extensions: + if isinstance(ext, Library): + continue + fullname = build_cmd.get_ext_fullname(ext.name) + filename = build_cmd.get_ext_filename(fullname) + if not os.path.basename(filename).startswith('dl-'): + if os.path.exists(os.path.join(self.bdist_dir, filename)): + ext_outputs.append(filename) + + return all_outputs, ext_outputs + + +NATIVE_EXTENSIONS = dict.fromkeys('.dll .so .dylib .pyd'.split()) + + +def walk_egg(egg_dir): + """Walk an unpacked egg's contents, skipping the metadata directory""" + walker = sorted_walk(egg_dir) + base, dirs, files = next(walker) + if 'EGG-INFO' in dirs: + dirs.remove('EGG-INFO') + yield base, dirs, files + for bdf in walker: + yield bdf + + +def analyze_egg(egg_dir, stubs): + # check for existing flag in EGG-INFO + for flag, fn in safety_flags.items(): + if os.path.exists(os.path.join(egg_dir, 'EGG-INFO', fn)): + return flag + if not can_scan(): + return False + safe = True + for base, dirs, files in walk_egg(egg_dir): + for name in files: + if name.endswith('.py') or name.endswith('.pyw'): + continue + elif name.endswith('.pyc') or name.endswith('.pyo'): + # always scan, even if we already know we're not safe + safe = scan_module(egg_dir, base, name, stubs) and safe + return safe + + +def write_safety_flag(egg_dir, safe): + # Write or remove zip safety flag file(s) + for flag, fn in safety_flags.items(): + fn = os.path.join(egg_dir, fn) + if os.path.exists(fn): + if safe is None or bool(safe) != flag: + os.unlink(fn) + elif safe is not None and bool(safe) == flag: + f = open(fn, 'wt') + f.write('\n') + f.close() + + +safety_flags = { + True: 'zip-safe', + False: 'not-zip-safe', +} + + +def scan_module(egg_dir, base, name, stubs): + """Check whether module possibly uses unsafe-for-zipfile stuff""" + + filename = os.path.join(base, name) + if filename[:-1] in stubs: + return True # Extension module + pkg = base[len(egg_dir) + 1:].replace(os.sep, '.') + module = pkg + (pkg and '.' or '') + os.path.splitext(name)[0] + if sys.version_info < (3, 3): + skip = 8 # skip magic & date + elif sys.version_info < (3, 7): + skip = 12 # skip magic & date & file size + else: + skip = 16 # skip magic & reserved? & date & file size + f = open(filename, 'rb') + f.read(skip) + code = marshal.load(f) + f.close() + safe = True + symbols = dict.fromkeys(iter_symbols(code)) + for bad in ['__file__', '__path__']: + if bad in symbols: + log.warn("%s: module references %s", module, bad) + safe = False + if 'inspect' in symbols: + for bad in [ + 'getsource', 'getabsfile', 'getsourcefile', 'getfile' + 'getsourcelines', 'findsource', 'getcomments', 'getframeinfo', + 'getinnerframes', 'getouterframes', 'stack', 'trace' + ]: + if bad in symbols: + log.warn("%s: module MAY be using inspect.%s", module, bad) + safe = False + return safe + + +def iter_symbols(code): + """Yield names and strings used by `code` and its nested code objects""" + for name in code.co_names: + yield name + for const in code.co_consts: + if isinstance(const, six.string_types): + yield const + elif isinstance(const, CodeType): + for name in iter_symbols(const): + yield name + + +def can_scan(): + if not sys.platform.startswith('java') and sys.platform != 'cli': + # CPython, PyPy, etc. + return True + log.warn("Unable to analyze compiled code on this platform.") + log.warn("Please ask the author to include a 'zip_safe'" + " setting (either True or False) in the package's setup.py") + + +# Attribute names of options for commands that might need to be convinced to +# install to the egg build directory + +INSTALL_DIRECTORY_ATTRS = [ + 'install_lib', 'install_dir', 'install_data', 'install_base' +] + + +def make_zipfile(zip_filename, base_dir, verbose=0, dry_run=0, compress=True, + mode='w'): + """Create a zip file from all the files under 'base_dir'. The output + zip file will be named 'base_dir' + ".zip". Uses either the "zipfile" + Python module (if available) or the InfoZIP "zip" utility (if installed + and found on the default search path). If neither tool is available, + raises DistutilsExecError. Returns the name of the output zip file. + """ + import zipfile + + mkpath(os.path.dirname(zip_filename), dry_run=dry_run) + log.info("creating '%s' and adding '%s' to it", zip_filename, base_dir) + + def visit(z, dirname, names): + for name in names: + path = os.path.normpath(os.path.join(dirname, name)) + if os.path.isfile(path): + p = path[len(base_dir) + 1:] + if not dry_run: + z.write(path, p) + log.debug("adding '%s'", p) + + compression = zipfile.ZIP_DEFLATED if compress else zipfile.ZIP_STORED + if not dry_run: + z = zipfile.ZipFile(zip_filename, mode, compression=compression) + for dirname, dirs, files in sorted_walk(base_dir): + visit(z, dirname, files) + z.close() + else: + for dirname, dirs, files in sorted_walk(base_dir): + visit(None, dirname, files) + return zip_filename diff --git a/week-0/day-3/my_todo_app/venvironment/lib/python3.6/site-packages/setuptools/command/bdist_rpm.py b/week-0/day-3/my_todo_app/venvironment/lib/python3.6/site-packages/setuptools/command/bdist_rpm.py new file mode 100644 index 00000000..70730927 --- /dev/null +++ b/week-0/day-3/my_todo_app/venvironment/lib/python3.6/site-packages/setuptools/command/bdist_rpm.py @@ -0,0 +1,43 @@ +import distutils.command.bdist_rpm as orig + + +class bdist_rpm(orig.bdist_rpm): + """ + Override the default bdist_rpm behavior to do the following: + + 1. Run egg_info to ensure the name and version are properly calculated. + 2. Always run 'install' using --single-version-externally-managed to + disable eggs in RPM distributions. + 3. Replace dash with underscore in the version numbers for better RPM + compatibility. + """ + + def run(self): + # ensure distro name is up-to-date + self.run_command('egg_info') + + orig.bdist_rpm.run(self) + + def _make_spec_file(self): + version = self.distribution.get_version() + rpmversion = version.replace('-', '_') + spec = orig.bdist_rpm._make_spec_file(self) + line23 = '%define version ' + version + line24 = '%define version ' + rpmversion + spec = [ + line.replace( + "Source0: %{name}-%{version}.tar", + "Source0: %{name}-%{unmangled_version}.tar" + ).replace( + "setup.py install ", + "setup.py install --single-version-externally-managed " + ).replace( + "%setup", + "%setup -n %{name}-%{unmangled_version}" + ).replace(line23, line24) + for line in spec + ] + insert_loc = spec.index(line24) + 1 + unmangled_version = "%define unmangled_version " + version + spec.insert(insert_loc, unmangled_version) + return spec diff --git a/week-0/day-3/my_todo_app/venvironment/lib/python3.6/site-packages/setuptools/command/bdist_wininst.py b/week-0/day-3/my_todo_app/venvironment/lib/python3.6/site-packages/setuptools/command/bdist_wininst.py new file mode 100644 index 00000000..073de97b --- /dev/null +++ b/week-0/day-3/my_todo_app/venvironment/lib/python3.6/site-packages/setuptools/command/bdist_wininst.py @@ -0,0 +1,21 @@ +import distutils.command.bdist_wininst as orig + + +class bdist_wininst(orig.bdist_wininst): + def reinitialize_command(self, command, reinit_subcommands=0): + """ + Supplement reinitialize_command to work around + http://bugs.python.org/issue20819 + """ + cmd = self.distribution.reinitialize_command( + command, reinit_subcommands) + if command in ('install', 'install_lib'): + cmd.install_lib = None + return cmd + + def run(self): + self._is_running = True + try: + orig.bdist_wininst.run(self) + finally: + self._is_running = False diff --git a/week-0/day-3/my_todo_app/venvironment/lib/python3.6/site-packages/setuptools/command/build_clib.py b/week-0/day-3/my_todo_app/venvironment/lib/python3.6/site-packages/setuptools/command/build_clib.py new file mode 100644 index 00000000..09caff6f --- /dev/null +++ b/week-0/day-3/my_todo_app/venvironment/lib/python3.6/site-packages/setuptools/command/build_clib.py @@ -0,0 +1,98 @@ +import distutils.command.build_clib as orig +from distutils.errors import DistutilsSetupError +from distutils import log +from setuptools.dep_util import newer_pairwise_group + + +class build_clib(orig.build_clib): + """ + Override the default build_clib behaviour to do the following: + + 1. Implement a rudimentary timestamp-based dependency system + so 'compile()' doesn't run every time. + 2. Add more keys to the 'build_info' dictionary: + * obj_deps - specify dependencies for each object compiled. + this should be a dictionary mapping a key + with the source filename to a list of + dependencies. Use an empty string for global + dependencies. + * cflags - specify a list of additional flags to pass to + the compiler. + """ + + def build_libraries(self, libraries): + for (lib_name, build_info) in libraries: + sources = build_info.get('sources') + if sources is None or not isinstance(sources, (list, tuple)): + raise DistutilsSetupError( + "in 'libraries' option (library '%s'), " + "'sources' must be present and must be " + "a list of source filenames" % lib_name) + sources = list(sources) + + log.info("building '%s' library", lib_name) + + # Make sure everything is the correct type. + # obj_deps should be a dictionary of keys as sources + # and a list/tuple of files that are its dependencies. + obj_deps = build_info.get('obj_deps', dict()) + if not isinstance(obj_deps, dict): + raise DistutilsSetupError( + "in 'libraries' option (library '%s'), " + "'obj_deps' must be a dictionary of " + "type 'source: list'" % lib_name) + dependencies = [] + + # Get the global dependencies that are specified by the '' key. + # These will go into every source's dependency list. + global_deps = obj_deps.get('', list()) + if not isinstance(global_deps, (list, tuple)): + raise DistutilsSetupError( + "in 'libraries' option (library '%s'), " + "'obj_deps' must be a dictionary of " + "type 'source: list'" % lib_name) + + # Build the list to be used by newer_pairwise_group + # each source will be auto-added to its dependencies. + for source in sources: + src_deps = [source] + src_deps.extend(global_deps) + extra_deps = obj_deps.get(source, list()) + if not isinstance(extra_deps, (list, tuple)): + raise DistutilsSetupError( + "in 'libraries' option (library '%s'), " + "'obj_deps' must be a dictionary of " + "type 'source: list'" % lib_name) + src_deps.extend(extra_deps) + dependencies.append(src_deps) + + expected_objects = self.compiler.object_filenames( + sources, + output_dir=self.build_temp + ) + + if newer_pairwise_group(dependencies, expected_objects) != ([], []): + # First, compile the source code to object files in the library + # directory. (This should probably change to putting object + # files in a temporary build directory.) + macros = build_info.get('macros') + include_dirs = build_info.get('include_dirs') + cflags = build_info.get('cflags') + objects = self.compiler.compile( + sources, + output_dir=self.build_temp, + macros=macros, + include_dirs=include_dirs, + extra_postargs=cflags, + debug=self.debug + ) + + # Now "link" the object files together into a static library. + # (On Unix at least, this isn't really linking -- it just + # builds an archive. Whatever.) + self.compiler.create_static_lib( + expected_objects, + lib_name, + output_dir=self.build_clib, + debug=self.debug + ) diff --git a/week-0/day-3/my_todo_app/venvironment/lib/python3.6/site-packages/setuptools/command/build_ext.py b/week-0/day-3/my_todo_app/venvironment/lib/python3.6/site-packages/setuptools/command/build_ext.py new file mode 100644 index 00000000..ea97b37b --- /dev/null +++ b/week-0/day-3/my_todo_app/venvironment/lib/python3.6/site-packages/setuptools/command/build_ext.py @@ -0,0 +1,331 @@ +import os +import sys +import itertools +import imp +from distutils.command.build_ext import build_ext as _du_build_ext +from distutils.file_util import copy_file +from distutils.ccompiler import new_compiler +from distutils.sysconfig import customize_compiler, get_config_var +from distutils.errors import DistutilsError +from distutils import log + +from setuptools.extension import Library +from setuptools.extern import six + +try: + # Attempt to use Cython for building extensions, if available + from Cython.Distutils.build_ext import build_ext as _build_ext + # Additionally, assert that the compiler module will load + # also. Ref #1229. + __import__('Cython.Compiler.Main') +except ImportError: + _build_ext = _du_build_ext + +# make sure _config_vars is initialized +get_config_var("LDSHARED") +from distutils.sysconfig import _config_vars as _CONFIG_VARS + + +def _customize_compiler_for_shlib(compiler): + if sys.platform == "darwin": + # building .dylib requires additional compiler flags on OSX; here we + # temporarily substitute the pyconfig.h variables so that distutils' + # 'customize_compiler' uses them before we build the shared libraries. + tmp = _CONFIG_VARS.copy() + try: + # XXX Help! I don't have any idea whether these are right... + _CONFIG_VARS['LDSHARED'] = ( + "gcc -Wl,-x -dynamiclib -undefined dynamic_lookup") + _CONFIG_VARS['CCSHARED'] = " -dynamiclib" + _CONFIG_VARS['SO'] = ".dylib" + customize_compiler(compiler) + finally: + _CONFIG_VARS.clear() + _CONFIG_VARS.update(tmp) + else: + customize_compiler(compiler) + + +have_rtld = False +use_stubs = False +libtype = 'shared' + +if sys.platform == "darwin": + use_stubs = True +elif os.name != 'nt': + try: + import dl + use_stubs = have_rtld = hasattr(dl, 'RTLD_NOW') + except ImportError: + pass + +if_dl = lambda s: s if have_rtld else '' + + +def get_abi3_suffix(): + """Return the file extension for an abi3-compliant Extension()""" + for suffix, _, _ in (s for s in imp.get_suffixes() if s[2] == imp.C_EXTENSION): + if '.abi3' in suffix: # Unix + return suffix + elif suffix == '.pyd': # Windows + return suffix + + +class build_ext(_build_ext): + def run(self): + """Build extensions in build directory, then copy if --inplace""" + old_inplace, self.inplace = self.inplace, 0 + _build_ext.run(self) + self.inplace = old_inplace + if old_inplace: + self.copy_extensions_to_source() + + def copy_extensions_to_source(self): + build_py = self.get_finalized_command('build_py') + for ext in self.extensions: + fullname = self.get_ext_fullname(ext.name) + filename = self.get_ext_filename(fullname) + modpath = fullname.split('.') + package = '.'.join(modpath[:-1]) + package_dir = build_py.get_package_dir(package) + dest_filename = os.path.join(package_dir, + os.path.basename(filename)) + src_filename = os.path.join(self.build_lib, filename) + + # Always copy, even if source is older than destination, to ensure + # that the right extensions for the current Python/platform are + # used. + copy_file( + src_filename, dest_filename, verbose=self.verbose, + dry_run=self.dry_run + ) + if ext._needs_stub: + self.write_stub(package_dir or os.curdir, ext, True) + + def get_ext_filename(self, fullname): + filename = _build_ext.get_ext_filename(self, fullname) + if fullname in self.ext_map: + ext = self.ext_map[fullname] + use_abi3 = ( + six.PY3 + and getattr(ext, 'py_limited_api') + and get_abi3_suffix() + ) + if use_abi3: + so_ext = _get_config_var_837('EXT_SUFFIX') + filename = filename[:-len(so_ext)] + filename = filename + get_abi3_suffix() + if isinstance(ext, Library): + fn, ext = os.path.splitext(filename) + return self.shlib_compiler.library_filename(fn, libtype) + elif use_stubs and ext._links_to_dynamic: + d, fn = os.path.split(filename) + return os.path.join(d, 'dl-' + fn) + return filename + + def initialize_options(self): + _build_ext.initialize_options(self) + self.shlib_compiler = None + self.shlibs = [] + self.ext_map = {} + + def finalize_options(self): + _build_ext.finalize_options(self) + self.extensions = self.extensions or [] + self.check_extensions_list(self.extensions) + self.shlibs = [ext for ext in self.extensions + if isinstance(ext, Library)] + if self.shlibs: + self.setup_shlib_compiler() + for ext in self.extensions: + ext._full_name = self.get_ext_fullname(ext.name) + for ext in self.extensions: + fullname = ext._full_name + self.ext_map[fullname] = ext + + # distutils 3.1 will also ask for module names + # XXX what to do with conflicts? + self.ext_map[fullname.split('.')[-1]] = ext + + ltd = self.shlibs and self.links_to_dynamic(ext) or False + ns = ltd and use_stubs and not isinstance(ext, Library) + ext._links_to_dynamic = ltd + ext._needs_stub = ns + filename = ext._file_name = self.get_ext_filename(fullname) + libdir = os.path.dirname(os.path.join(self.build_lib, filename)) + if ltd and libdir not in ext.library_dirs: + ext.library_dirs.append(libdir) + if ltd and use_stubs and os.curdir not in ext.runtime_library_dirs: + ext.runtime_library_dirs.append(os.curdir) + + def setup_shlib_compiler(self): + compiler = self.shlib_compiler = new_compiler( + compiler=self.compiler, dry_run=self.dry_run, force=self.force + ) + _customize_compiler_for_shlib(compiler) + + if self.include_dirs is not None: + compiler.set_include_dirs(self.include_dirs) + if self.define is not None: + # 'define' option is a list of (name,value) tuples + for (name, value) in self.define: + compiler.define_macro(name, value) + if self.undef is not None: + for macro in self.undef: + compiler.undefine_macro(macro) + if self.libraries is not None: + compiler.set_libraries(self.libraries) + if self.library_dirs is not None: + compiler.set_library_dirs(self.library_dirs) + if self.rpath is not None: + compiler.set_runtime_library_dirs(self.rpath) + if self.link_objects is not None: + compiler.set_link_objects(self.link_objects) + + # hack so distutils' build_extension() builds a library instead + compiler.link_shared_object = link_shared_object.__get__(compiler) + + def get_export_symbols(self, ext): + if isinstance(ext, Library): + return ext.export_symbols + return _build_ext.get_export_symbols(self, ext) + + def build_extension(self, ext): + ext._convert_pyx_sources_to_lang() + _compiler = self.compiler + try: + if isinstance(ext, Library): + self.compiler = self.shlib_compiler + _build_ext.build_extension(self, ext) + if ext._needs_stub: + cmd = self.get_finalized_command('build_py').build_lib + self.write_stub(cmd, ext) + finally: + self.compiler = _compiler + + def links_to_dynamic(self, ext): + """Return true if 'ext' links to a dynamic lib in the same package""" + # XXX this should check to ensure the lib is actually being built + # XXX as dynamic, and not just using a locally-found version or a + # XXX static-compiled version + libnames = dict.fromkeys([lib._full_name for lib in self.shlibs]) + pkg = '.'.join(ext._full_name.split('.')[:-1] + ['']) + return any(pkg + libname in libnames for libname in ext.libraries) + + def get_outputs(self): + return _build_ext.get_outputs(self) + self.__get_stubs_outputs() + + def __get_stubs_outputs(self): + # assemble the base name for each extension that needs a stub + ns_ext_bases = ( + os.path.join(self.build_lib, *ext._full_name.split('.')) + for ext in self.extensions + if ext._needs_stub + ) + # pair each base with the extension + pairs = itertools.product(ns_ext_bases, self.__get_output_extensions()) + return list(base + fnext for base, fnext in pairs) + + def __get_output_extensions(self): + yield '.py' + yield '.pyc' + if self.get_finalized_command('build_py').optimize: + yield '.pyo' + + def write_stub(self, output_dir, ext, compile=False): + log.info("writing stub loader for %s to %s", ext._full_name, + output_dir) + stub_file = (os.path.join(output_dir, *ext._full_name.split('.')) + + '.py') + if compile and os.path.exists(stub_file): + raise DistutilsError(stub_file + " already exists! Please delete.") + if not self.dry_run: + f = open(stub_file, 'w') + f.write( + '\n'.join([ + "def __bootstrap__():", + " global __bootstrap__, __file__, __loader__", + " import sys, os, pkg_resources, imp" + if_dl(", dl"), + " __file__ = pkg_resources.resource_filename" + "(__name__,%r)" + % os.path.basename(ext._file_name), + " del __bootstrap__", + " if '__loader__' in globals():", + " del __loader__", + if_dl(" old_flags = sys.getdlopenflags()"), + " old_dir = os.getcwd()", + " try:", + " os.chdir(os.path.dirname(__file__))", + if_dl(" sys.setdlopenflags(dl.RTLD_NOW)"), + " imp.load_dynamic(__name__,__file__)", + " finally:", + if_dl(" sys.setdlopenflags(old_flags)"), + " os.chdir(old_dir)", + "__bootstrap__()", + "" # terminal \n + ]) + ) + f.close() + if compile: + from distutils.util import byte_compile + + byte_compile([stub_file], optimize=0, + force=True, dry_run=self.dry_run) + optimize = self.get_finalized_command('install_lib').optimize + if optimize > 0: + byte_compile([stub_file], optimize=optimize, + force=True, dry_run=self.dry_run) + if os.path.exists(stub_file) and not self.dry_run: + os.unlink(stub_file) + + +if use_stubs or os.name == 'nt': + # Build shared libraries + # + def link_shared_object( + self, objects, output_libname, output_dir=None, libraries=None, + library_dirs=None, runtime_library_dirs=None, export_symbols=None, + debug=0, extra_preargs=None, extra_postargs=None, build_temp=None, + target_lang=None): + self.link( + self.SHARED_LIBRARY, objects, output_libname, + output_dir, libraries, library_dirs, runtime_library_dirs, + export_symbols, debug, extra_preargs, extra_postargs, + build_temp, target_lang + ) +else: + # Build static libraries everywhere else + libtype = 'static' + + def link_shared_object( + self, objects, output_libname, output_dir=None, libraries=None, + library_dirs=None, runtime_library_dirs=None, export_symbols=None, + debug=0, extra_preargs=None, extra_postargs=None, build_temp=None, + target_lang=None): + # XXX we need to either disallow these attrs on Library instances, + # or warn/abort here if set, or something... + # libraries=None, library_dirs=None, runtime_library_dirs=None, + # export_symbols=None, extra_preargs=None, extra_postargs=None, + # build_temp=None + + assert output_dir is None # distutils build_ext doesn't pass this + output_dir, filename = os.path.split(output_libname) + basename, ext = os.path.splitext(filename) + if self.library_filename("x").startswith('lib'): + # strip 'lib' prefix; this is kludgy if some platform uses + # a different prefix + basename = basename[3:] + + self.create_static_lib( + objects, basename, output_dir, debug, target_lang + ) + + +def _get_config_var_837(name): + """ + In https://github.com/pypa/setuptools/pull/837, we discovered + Python 3.3.0 exposes the extension suffix under the name 'SO'. + """ + if sys.version_info < (3, 3, 1): + name = 'SO' + return get_config_var(name) diff --git a/week-0/day-3/my_todo_app/venvironment/lib/python3.6/site-packages/setuptools/command/build_py.py b/week-0/day-3/my_todo_app/venvironment/lib/python3.6/site-packages/setuptools/command/build_py.py new file mode 100644 index 00000000..b0314fd4 --- /dev/null +++ b/week-0/day-3/my_todo_app/venvironment/lib/python3.6/site-packages/setuptools/command/build_py.py @@ -0,0 +1,270 @@ +from glob import glob +from distutils.util import convert_path +import distutils.command.build_py as orig +import os +import fnmatch +import textwrap +import io +import distutils.errors +import itertools + +from setuptools.extern import six +from setuptools.extern.six.moves import map, filter, filterfalse + +try: + from setuptools.lib2to3_ex import Mixin2to3 +except ImportError: + + class Mixin2to3: + def run_2to3(self, files, doctests=True): + "do nothing" + + +class build_py(orig.build_py, Mixin2to3): + """Enhanced 'build_py' command that includes data files with packages + + The data files are specified via a 'package_data' argument to 'setup()'. + See 'setuptools.dist.Distribution' for more details. + + Also, this version of the 'build_py' command allows you to specify both + 'py_modules' and 'packages' in the same setup operation. + """ + + def finalize_options(self): + orig.build_py.finalize_options(self) + self.package_data = self.distribution.package_data + self.exclude_package_data = (self.distribution.exclude_package_data or + {}) + if 'data_files' in self.__dict__: + del self.__dict__['data_files'] + self.__updated_files = [] + self.__doctests_2to3 = [] + + def run(self): + """Build modules, packages, and copy data files to build directory""" + if not self.py_modules and not self.packages: + return + + if self.py_modules: + self.build_modules() + + if self.packages: + self.build_packages() + self.build_package_data() + + self.run_2to3(self.__updated_files, False) + self.run_2to3(self.__updated_files, True) + self.run_2to3(self.__doctests_2to3, True) + + # Only compile actual .py files, using our base class' idea of what our + # output files are. + self.byte_compile(orig.build_py.get_outputs(self, include_bytecode=0)) + + def __getattr__(self, attr): + "lazily compute data files" + if attr == 'data_files': + self.data_files = self._get_data_files() + return self.data_files + return orig.build_py.__getattr__(self, attr) + + def build_module(self, module, module_file, package): + if six.PY2 and isinstance(package, six.string_types): + # avoid errors on Python 2 when unicode is passed (#190) + package = package.split('.') + outfile, copied = orig.build_py.build_module(self, module, module_file, + package) + if copied: + self.__updated_files.append(outfile) + return outfile, copied + + def _get_data_files(self): + """Generate list of '(package,src_dir,build_dir,filenames)' tuples""" + self.analyze_manifest() + return list(map(self._get_pkg_data_files, self.packages or ())) + + def _get_pkg_data_files(self, package): + # Locate package source directory + src_dir = self.get_package_dir(package) + + # Compute package build directory + build_dir = os.path.join(*([self.build_lib] + package.split('.'))) + + # Strip directory from globbed filenames + filenames = [ + os.path.relpath(file, src_dir) + for file in self.find_data_files(package, src_dir) + ] + return package, src_dir, build_dir, filenames + + def find_data_files(self, package, src_dir): + """Return filenames for package's data files in 'src_dir'""" + patterns = self._get_platform_patterns( + self.package_data, + package, + src_dir, + ) + globs_expanded = map(glob, patterns) + # flatten the expanded globs into an iterable of matches + globs_matches = itertools.chain.from_iterable(globs_expanded) + glob_files = filter(os.path.isfile, globs_matches) + files = itertools.chain( + self.manifest_files.get(package, []), + glob_files, + ) + return self.exclude_data_files(package, src_dir, files) + + def build_package_data(self): + """Copy data files into build directory""" + for package, src_dir, build_dir, filenames in self.data_files: + for filename in filenames: + target = os.path.join(build_dir, filename) + self.mkpath(os.path.dirname(target)) + srcfile = os.path.join(src_dir, filename) + outf, copied = self.copy_file(srcfile, target) + srcfile = os.path.abspath(srcfile) + if (copied and + srcfile in self.distribution.convert_2to3_doctests): + self.__doctests_2to3.append(outf) + + def analyze_manifest(self): + self.manifest_files = mf = {} + if not self.distribution.include_package_data: + return + src_dirs = {} + for package in self.packages or (): + # Locate package source directory + src_dirs[assert_relative(self.get_package_dir(package))] = package + + self.run_command('egg_info') + ei_cmd = self.get_finalized_command('egg_info') + for path in ei_cmd.filelist.files: + d, f = os.path.split(assert_relative(path)) + prev = None + oldf = f + while d and d != prev and d not in src_dirs: + prev = d + d, df = os.path.split(d) + f = os.path.join(df, f) + if d in src_dirs: + if path.endswith('.py') and f == oldf: + continue # it's a module, not data + mf.setdefault(src_dirs[d], []).append(path) + + def get_data_files(self): + pass # Lazily compute data files in _get_data_files() function. + + def check_package(self, package, package_dir): + """Check namespace packages' __init__ for declare_namespace""" + try: + return self.packages_checked[package] + except KeyError: + pass + + init_py = orig.build_py.check_package(self, package, package_dir) + self.packages_checked[package] = init_py + + if not init_py or not self.distribution.namespace_packages: + return init_py + + for pkg in self.distribution.namespace_packages: + if pkg == package or pkg.startswith(package + '.'): + break + else: + return init_py + + with io.open(init_py, 'rb') as f: + contents = f.read() + if b'declare_namespace' not in contents: + raise distutils.errors.DistutilsError( + "Namespace package problem: %s is a namespace package, but " + "its\n__init__.py does not call declare_namespace()! Please " + 'fix it.\n(See the setuptools manual under ' + '"Namespace Packages" for details.)\n"' % (package,) + ) + return init_py + + def initialize_options(self): + self.packages_checked = {} + orig.build_py.initialize_options(self) + + def get_package_dir(self, package): + res = orig.build_py.get_package_dir(self, package) + if self.distribution.src_root is not None: + return os.path.join(self.distribution.src_root, res) + return res + + def exclude_data_files(self, package, src_dir, files): + """Filter filenames for package's data files in 'src_dir'""" + files = list(files) + patterns = self._get_platform_patterns( + self.exclude_package_data, + package, + src_dir, + ) + match_groups = ( + fnmatch.filter(files, pattern) + for pattern in patterns + ) + # flatten the groups of matches into an iterable of matches + matches = itertools.chain.from_iterable(match_groups) + bad = set(matches) + keepers = ( + fn + for fn in files + if fn not in bad + ) + # ditch dupes + return list(_unique_everseen(keepers)) + + @staticmethod + def _get_platform_patterns(spec, package, src_dir): + """ + yield platform-specific path patterns (suitable for glob + or fn_match) from a glob-based spec (such as + self.package_data or self.exclude_package_data) + matching package in src_dir. + """ + raw_patterns = itertools.chain( + spec.get('', []), + spec.get(package, []), + ) + return ( + # Each pattern has to be converted to a platform-specific path + os.path.join(src_dir, convert_path(pattern)) + for pattern in raw_patterns + ) + + +# from Python docs +def _unique_everseen(iterable, key=None): + "List unique elements, preserving order. Remember all elements ever seen." + # unique_everseen('AAAABBBCCDAABBB') --> A B C D + # unique_everseen('ABBCcAD', str.lower) --> A B C D + seen = set() + seen_add = seen.add + if key is None: + for element in filterfalse(seen.__contains__, iterable): + seen_add(element) + yield element + else: + for element in iterable: + k = key(element) + if k not in seen: + seen_add(k) + yield element + + +def assert_relative(path): + if not os.path.isabs(path): + return path + from distutils.errors import DistutilsSetupError + + msg = textwrap.dedent(""" + Error: setup script specifies an absolute path: + + %s + + setup() arguments must *always* be /-separated paths relative to the + setup.py directory, *never* absolute paths. + """).lstrip() % path + raise DistutilsSetupError(msg) diff --git a/week-0/day-3/my_todo_app/venvironment/lib/python3.6/site-packages/setuptools/command/develop.py b/week-0/day-3/my_todo_app/venvironment/lib/python3.6/site-packages/setuptools/command/develop.py new file mode 100644 index 00000000..959c932a --- /dev/null +++ b/week-0/day-3/my_todo_app/venvironment/lib/python3.6/site-packages/setuptools/command/develop.py @@ -0,0 +1,216 @@ +from distutils.util import convert_path +from distutils import log +from distutils.errors import DistutilsError, DistutilsOptionError +import os +import glob +import io + +from setuptools.extern import six + +from pkg_resources import Distribution, PathMetadata, normalize_path +from setuptools.command.easy_install import easy_install +from setuptools import namespaces +import setuptools + + +class develop(namespaces.DevelopInstaller, easy_install): + """Set up package for development""" + + description = "install package in 'development mode'" + + user_options = easy_install.user_options + [ + ("uninstall", "u", "Uninstall this source package"), + ("egg-path=", None, "Set the path to be used in the .egg-link file"), + ] + + boolean_options = easy_install.boolean_options + ['uninstall'] + + command_consumes_arguments = False # override base + + def run(self): + if self.uninstall: + self.multi_version = True + self.uninstall_link() + self.uninstall_namespaces() + else: + self.install_for_development() + self.warn_deprecated_options() + + def initialize_options(self): + self.uninstall = None + self.egg_path = None + easy_install.initialize_options(self) + self.setup_path = None + self.always_copy_from = '.' # always copy eggs installed in curdir + + def finalize_options(self): + ei = self.get_finalized_command("egg_info") + if ei.broken_egg_info: + template = "Please rename %r to %r before using 'develop'" + args = ei.egg_info, ei.broken_egg_info + raise DistutilsError(template % args) + self.args = [ei.egg_name] + + easy_install.finalize_options(self) + self.expand_basedirs() + self.expand_dirs() + # pick up setup-dir .egg files only: no .egg-info + self.package_index.scan(glob.glob('*.egg')) + + egg_link_fn = ei.egg_name + '.egg-link' + self.egg_link = os.path.join(self.install_dir, egg_link_fn) + self.egg_base = ei.egg_base + if self.egg_path is None: + self.egg_path = os.path.abspath(ei.egg_base) + + target = normalize_path(self.egg_base) + egg_path = normalize_path(os.path.join(self.install_dir, + self.egg_path)) + if egg_path != target: + raise DistutilsOptionError( + "--egg-path must be a relative path from the install" + " directory to " + target + ) + + # Make a distribution for the package's source + self.dist = Distribution( + target, + PathMetadata(target, os.path.abspath(ei.egg_info)), + project_name=ei.egg_name + ) + + self.setup_path = self._resolve_setup_path( + self.egg_base, + self.install_dir, + self.egg_path, + ) + + @staticmethod + def _resolve_setup_path(egg_base, install_dir, egg_path): + """ + Generate a path from egg_base back to '.' where the + setup script resides and ensure that path points to the + setup path from $install_dir/$egg_path. + """ + path_to_setup = egg_base.replace(os.sep, '/').rstrip('/') + if path_to_setup != os.curdir: + path_to_setup = '../' * (path_to_setup.count('/') + 1) + resolved = normalize_path( + os.path.join(install_dir, egg_path, path_to_setup) + ) + if resolved != normalize_path(os.curdir): + raise DistutilsOptionError( + "Can't get a consistent path to setup script from" + " installation directory", resolved, normalize_path(os.curdir)) + return path_to_setup + + def install_for_development(self): + if six.PY3 and getattr(self.distribution, 'use_2to3', False): + # If we run 2to3 we can not do this inplace: + + # Ensure metadata is up-to-date + self.reinitialize_command('build_py', inplace=0) + self.run_command('build_py') + bpy_cmd = self.get_finalized_command("build_py") + build_path = normalize_path(bpy_cmd.build_lib) + + # Build extensions + self.reinitialize_command('egg_info', egg_base=build_path) + self.run_command('egg_info') + + self.reinitialize_command('build_ext', inplace=0) + self.run_command('build_ext') + + # Fixup egg-link and easy-install.pth + ei_cmd = self.get_finalized_command("egg_info") + self.egg_path = build_path + self.dist.location = build_path + # XXX + self.dist._provider = PathMetadata(build_path, ei_cmd.egg_info) + else: + # Without 2to3 inplace works fine: + self.run_command('egg_info') + + # Build extensions in-place + self.reinitialize_command('build_ext', inplace=1) + self.run_command('build_ext') + + self.install_site_py() # ensure that target dir is site-safe + if setuptools.bootstrap_install_from: + self.easy_install(setuptools.bootstrap_install_from) + setuptools.bootstrap_install_from = None + + self.install_namespaces() + + # create an .egg-link in the installation dir, pointing to our egg + log.info("Creating %s (link to %s)", self.egg_link, self.egg_base) + if not self.dry_run: + with open(self.egg_link, "w") as f: + f.write(self.egg_path + "\n" + self.setup_path) + # postprocess the installed distro, fixing up .pth, installing scripts, + # and handling requirements + self.process_distribution(None, self.dist, not self.no_deps) + + def uninstall_link(self): + if os.path.exists(self.egg_link): + log.info("Removing %s (link to %s)", self.egg_link, self.egg_base) + egg_link_file = open(self.egg_link) + contents = [line.rstrip() for line in egg_link_file] + egg_link_file.close() + if contents not in ([self.egg_path], + [self.egg_path, self.setup_path]): + log.warn("Link points to %s: uninstall aborted", contents) + return + if not self.dry_run: + os.unlink(self.egg_link) + if not self.dry_run: + self.update_pth(self.dist) # remove any .pth link to us + if self.distribution.scripts: + # XXX should also check for entry point scripts! + log.warn("Note: you must uninstall or replace scripts manually!") + + def install_egg_scripts(self, dist): + if dist is not self.dist: + # Installing a dependency, so fall back to normal behavior + return easy_install.install_egg_scripts(self, dist) + + # create wrapper scripts in the script dir, pointing to dist.scripts + + # new-style... + self.install_wrapper_scripts(dist) + + # ...and old-style + for script_name in self.distribution.scripts or []: + script_path = os.path.abspath(convert_path(script_name)) + script_name = os.path.basename(script_path) + with io.open(script_path) as strm: + script_text = strm.read() + self.install_script(dist, script_name, script_text, script_path) + + def install_wrapper_scripts(self, dist): + dist = VersionlessRequirement(dist) + return easy_install.install_wrapper_scripts(self, dist) + + +class VersionlessRequirement(object): + """ + Adapt a pkg_resources.Distribution to simply return the project + name as the 'requirement' so that scripts will work across + multiple versions. + + >>> dist = Distribution(project_name='foo', version='1.0') + >>> str(dist.as_requirement()) + 'foo==1.0' + >>> adapted_dist = VersionlessRequirement(dist) + >>> str(adapted_dist.as_requirement()) + 'foo' + """ + + def __init__(self, dist): + self.__dist = dist + + def __getattr__(self, name): + return getattr(self.__dist, name) + + def as_requirement(self): + return self.project_name diff --git a/week-0/day-3/my_todo_app/venvironment/lib/python3.6/site-packages/setuptools/command/dist_info.py b/week-0/day-3/my_todo_app/venvironment/lib/python3.6/site-packages/setuptools/command/dist_info.py new file mode 100644 index 00000000..c45258fa --- /dev/null +++ b/week-0/day-3/my_todo_app/venvironment/lib/python3.6/site-packages/setuptools/command/dist_info.py @@ -0,0 +1,36 @@ +""" +Create a dist_info directory +As defined in the wheel specification +""" + +import os + +from distutils.core import Command +from distutils import log + + +class dist_info(Command): + + description = 'create a .dist-info directory' + + user_options = [ + ('egg-base=', 'e', "directory containing .egg-info directories" + " (default: top of the source tree)"), + ] + + def initialize_options(self): + self.egg_base = None + + def finalize_options(self): + pass + + def run(self): + egg_info = self.get_finalized_command('egg_info') + egg_info.egg_base = self.egg_base + egg_info.finalize_options() + egg_info.run() + dist_info_dir = egg_info.egg_info[:-len('.egg-info')] + '.dist-info' + log.info("creating '{}'".format(os.path.abspath(dist_info_dir))) + + bdist_wheel = self.get_finalized_command('bdist_wheel') + bdist_wheel.egg2dist(egg_info.egg_info, dist_info_dir) diff --git a/week-0/day-3/my_todo_app/venvironment/lib/python3.6/site-packages/setuptools/command/easy_install.py b/week-0/day-3/my_todo_app/venvironment/lib/python3.6/site-packages/setuptools/command/easy_install.py new file mode 100644 index 00000000..c9fa55d9 --- /dev/null +++ b/week-0/day-3/my_todo_app/venvironment/lib/python3.6/site-packages/setuptools/command/easy_install.py @@ -0,0 +1,2389 @@ +#!/usr/bin/env python +""" +Easy Install +------------ + +A tool for doing automatic download/extract/build of distutils-based Python +packages. For detailed documentation, see the accompanying EasyInstall.txt +file, or visit the `EasyInstall home page`__. + +__ https://setuptools.readthedocs.io/en/latest/easy_install.html + +""" + +from glob import glob +from distutils.util import get_platform +from distutils.util import convert_path, subst_vars +from distutils.errors import ( + DistutilsArgError, DistutilsOptionError, + DistutilsError, DistutilsPlatformError, +) +from distutils.command.install import INSTALL_SCHEMES, SCHEME_KEYS +from distutils import log, dir_util +from distutils.command.build_scripts import first_line_re +from distutils.spawn import find_executable +import sys +import os +import zipimport +import shutil +import tempfile +import zipfile +import re +import stat +import random +import textwrap +import warnings +import site +import struct +import contextlib +import subprocess +import shlex +import io + +from setuptools.extern import six +from setuptools.extern.six.moves import configparser, map + +from setuptools import Command +from setuptools.sandbox import run_setup +from setuptools.py31compat import get_path, get_config_vars +from setuptools.py27compat import rmtree_safe +from setuptools.command import setopt +from setuptools.archive_util import unpack_archive +from setuptools.package_index import ( + PackageIndex, parse_requirement_arg, URL_SCHEME, +) +from setuptools.command import bdist_egg, egg_info +from setuptools.wheel import Wheel +from pkg_resources import ( + yield_lines, normalize_path, resource_string, ensure_directory, + get_distribution, find_distributions, Environment, Requirement, + Distribution, PathMetadata, EggMetadata, WorkingSet, DistributionNotFound, + VersionConflict, DEVELOP_DIST, +) +import pkg_resources.py31compat + +# Turn on PEP440Warnings +warnings.filterwarnings("default", category=pkg_resources.PEP440Warning) + +__all__ = [ + 'samefile', 'easy_install', 'PthDistributions', 'extract_wininst_cfg', + 'main', 'get_exe_prefixes', +] + + +def is_64bit(): + return struct.calcsize("P") == 8 + + +def samefile(p1, p2): + """ + Determine if two paths reference the same file. + + Augments os.path.samefile to work on Windows and + suppresses errors if the path doesn't exist. + """ + both_exist = os.path.exists(p1) and os.path.exists(p2) + use_samefile = hasattr(os.path, 'samefile') and both_exist + if use_samefile: + return os.path.samefile(p1, p2) + norm_p1 = os.path.normpath(os.path.normcase(p1)) + norm_p2 = os.path.normpath(os.path.normcase(p2)) + return norm_p1 == norm_p2 + + +if six.PY2: + + def _to_ascii(s): + return s + + def isascii(s): + try: + six.text_type(s, 'ascii') + return True + except UnicodeError: + return False +else: + + def _to_ascii(s): + return s.encode('ascii') + + def isascii(s): + try: + s.encode('ascii') + return True + except UnicodeError: + return False + + +_one_liner = lambda text: textwrap.dedent(text).strip().replace('\n', '; ') + + +class easy_install(Command): + """Manage a download/build/install process""" + description = "Find/get/install Python packages" + command_consumes_arguments = True + + user_options = [ + ('prefix=', None, "installation prefix"), + ("zip-ok", "z", "install package as a zipfile"), + ("multi-version", "m", "make apps have to require() a version"), + ("upgrade", "U", "force upgrade (searches PyPI for latest versions)"), + ("install-dir=", "d", "install package to DIR"), + ("script-dir=", "s", "install scripts to DIR"), + ("exclude-scripts", "x", "Don't install scripts"), + ("always-copy", "a", "Copy all needed packages to install dir"), + ("index-url=", "i", "base URL of Python Package Index"), + ("find-links=", "f", "additional URL(s) to search for packages"), + ("build-directory=", "b", + "download/extract/build in DIR; keep the results"), + ('optimize=', 'O', + "also compile with optimization: -O1 for \"python -O\", " + "-O2 for \"python -OO\", and -O0 to disable [default: -O0]"), + ('record=', None, + "filename in which to record list of installed files"), + ('always-unzip', 'Z', "don't install as a zipfile, no matter what"), + ('site-dirs=', 'S', "list of directories where .pth files work"), + ('editable', 'e', "Install specified packages in editable form"), + ('no-deps', 'N', "don't install dependencies"), + ('allow-hosts=', 'H', "pattern(s) that hostnames must match"), + ('local-snapshots-ok', 'l', + "allow building eggs from local checkouts"), + ('version', None, "print version information and exit"), + ('install-layout=', None, "installation layout to choose (known values: deb)"), + ('force-installation-into-system-dir', '0', "force installation into /usr"), + ('no-find-links', None, + "Don't load find-links defined in packages being installed") + ] + boolean_options = [ + 'zip-ok', 'multi-version', 'exclude-scripts', 'upgrade', 'always-copy', + 'editable', + 'no-deps', 'local-snapshots-ok', 'version', 'force-installation-into-system-dir' + ] + + if site.ENABLE_USER_SITE: + help_msg = "install in user site-package '%s'" % site.USER_SITE + user_options.append(('user', None, help_msg)) + boolean_options.append('user') + + negative_opt = {'always-unzip': 'zip-ok'} + create_index = PackageIndex + + def initialize_options(self): + # the --user option seems to be an opt-in one, + # so the default should be False. + self.user = 0 + self.zip_ok = self.local_snapshots_ok = None + self.install_dir = self.script_dir = self.exclude_scripts = None + self.index_url = None + self.find_links = None + self.build_directory = None + self.args = None + self.optimize = self.record = None + self.upgrade = self.always_copy = self.multi_version = None + self.editable = self.no_deps = self.allow_hosts = None + self.root = self.prefix = self.no_report = None + self.version = None + self.install_purelib = None # for pure module distributions + self.install_platlib = None # non-pure (dists w/ extensions) + self.install_headers = None # for C/C++ headers + self.install_lib = None # set to either purelib or platlib + self.install_scripts = None + self.install_data = None + self.install_base = None + self.install_platbase = None + if site.ENABLE_USER_SITE: + self.install_userbase = site.USER_BASE + self.install_usersite = site.USER_SITE + else: + self.install_userbase = None + self.install_usersite = None + self.no_find_links = None + + # Options not specifiable via command line + self.package_index = None + self.pth_file = self.always_copy_from = None + self.site_dirs = None + self.installed_projects = {} + self.sitepy_installed = False + # enable custom installation, known values: deb + self.install_layout = None + self.force_installation_into_system_dir = None + self.multiarch = None + + # Always read easy_install options, even if we are subclassed, or have + # an independent instance created. This ensures that defaults will + # always come from the standard configuration file(s)' "easy_install" + # section, even if this is a "develop" or "install" command, or some + # other embedding. + self._dry_run = None + self.verbose = self.distribution.verbose + self.distribution._set_command_options( + self, self.distribution.get_option_dict('easy_install') + ) + + def delete_blockers(self, blockers): + extant_blockers = ( + filename for filename in blockers + if os.path.exists(filename) or os.path.islink(filename) + ) + list(map(self._delete_path, extant_blockers)) + + def _delete_path(self, path): + log.info("Deleting %s", path) + if self.dry_run: + return + + is_tree = os.path.isdir(path) and not os.path.islink(path) + remover = rmtree if is_tree else os.unlink + remover(path) + + @staticmethod + def _render_version(): + """ + Render the Setuptools version and installation details, then exit. + """ + ver = sys.version[:3] + dist = get_distribution('setuptools') + tmpl = 'setuptools {dist.version} from {dist.location} (Python {ver})' + print(tmpl.format(**locals())) + raise SystemExit() + + def finalize_options(self): + self.version and self._render_version() + + py_version = sys.version.split()[0] + prefix, exec_prefix = get_config_vars('prefix', 'exec_prefix') + + self.config_vars = { + 'dist_name': self.distribution.get_name(), + 'dist_version': self.distribution.get_version(), + 'dist_fullname': self.distribution.get_fullname(), + 'py_version': py_version, + 'py_version_short': py_version[0:3], + 'py_version_nodot': py_version[0] + py_version[2], + 'sys_prefix': prefix, + 'prefix': prefix, + 'sys_exec_prefix': exec_prefix, + 'exec_prefix': exec_prefix, + # Only python 3.2+ has abiflags + 'abiflags': getattr(sys, 'abiflags', ''), + } + + if site.ENABLE_USER_SITE: + self.config_vars['userbase'] = self.install_userbase + self.config_vars['usersite'] = self.install_usersite + + self._fix_install_dir_for_user_site() + + self.expand_basedirs() + self.expand_dirs() + + if self.install_layout: + if not self.install_layout.lower() in ['deb']: + raise DistutilsOptionError("unknown value for --install-layout") + self.install_layout = self.install_layout.lower() + + import sysconfig + if sys.version_info[:2] >= (3, 3): + self.multiarch = sysconfig.get_config_var('MULTIARCH') + + self._expand( + 'install_dir', 'script_dir', 'build_directory', + 'site_dirs', + ) + # If a non-default installation directory was specified, default the + # script directory to match it. + if self.script_dir is None: + self.script_dir = self.install_dir + + if self.no_find_links is None: + self.no_find_links = False + + # Let install_dir get set by install_lib command, which in turn + # gets its info from the install command, and takes into account + # --prefix and --home and all that other crud. + self.set_undefined_options( + 'install_lib', ('install_dir', 'install_dir') + ) + # Likewise, set default script_dir from 'install_scripts.install_dir' + self.set_undefined_options( + 'install_scripts', ('install_dir', 'script_dir') + ) + + if self.user and self.install_purelib: + self.install_dir = self.install_purelib + self.script_dir = self.install_scripts + + if self.prefix == '/usr' and not self.force_installation_into_system_dir: + raise DistutilsOptionError("""installation into /usr + +Trying to install into the system managed parts of the file system. Please +consider to install to another location, or use the option +--force-installation-into-system-dir to overwrite this warning. +""") + + # default --record from the install command + self.set_undefined_options('install', ('record', 'record')) + # Should this be moved to the if statement below? It's not used + # elsewhere + normpath = map(normalize_path, sys.path) + self.all_site_dirs = get_site_dirs() + if self.site_dirs is not None: + site_dirs = [ + os.path.expanduser(s.strip()) for s in + self.site_dirs.split(',') + ] + for d in site_dirs: + if not os.path.isdir(d): + log.warn("%s (in --site-dirs) does not exist", d) + elif normalize_path(d) not in normpath: + raise DistutilsOptionError( + d + " (in --site-dirs) is not on sys.path" + ) + else: + self.all_site_dirs.append(normalize_path(d)) + if not self.editable: + self.check_site_dir() + self.index_url = self.index_url or "https://pypi.python.org/simple" + self.shadow_path = self.all_site_dirs[:] + for path_item in self.install_dir, normalize_path(self.script_dir): + if path_item not in self.shadow_path: + self.shadow_path.insert(0, path_item) + + if self.allow_hosts is not None: + hosts = [s.strip() for s in self.allow_hosts.split(',')] + else: + hosts = ['*'] + if self.package_index is None: + self.package_index = self.create_index( + self.index_url, search_path=self.shadow_path, hosts=hosts, + ) + self.local_index = Environment(self.shadow_path + sys.path) + + if self.find_links is not None: + if isinstance(self.find_links, six.string_types): + self.find_links = self.find_links.split() + else: + self.find_links = [] + if self.local_snapshots_ok: + self.package_index.scan_egg_links(self.shadow_path + sys.path) + if not self.no_find_links: + self.package_index.add_find_links(self.find_links) + self.set_undefined_options('install_lib', ('optimize', 'optimize')) + if not isinstance(self.optimize, int): + try: + self.optimize = int(self.optimize) + if not (0 <= self.optimize <= 2): + raise ValueError + except ValueError: + raise DistutilsOptionError("--optimize must be 0, 1, or 2") + + if self.editable and not self.build_directory: + raise DistutilsArgError( + "Must specify a build directory (-b) when using --editable" + ) + if not self.args: + raise DistutilsArgError( + "No urls, filenames, or requirements specified (see --help)") + + self.outputs = [] + + def _fix_install_dir_for_user_site(self): + """ + Fix the install_dir if "--user" was used. + """ + if not self.user or not site.ENABLE_USER_SITE: + return + + self.create_home_path() + if self.install_userbase is None: + msg = "User base directory is not specified" + raise DistutilsPlatformError(msg) + self.install_base = self.install_platbase = self.install_userbase + scheme_name = os.name.replace('posix', 'unix') + '_user' + self.select_scheme(scheme_name) + + def _expand_attrs(self, attrs): + for attr in attrs: + val = getattr(self, attr) + if val is not None: + if os.name == 'posix' or os.name == 'nt': + val = os.path.expanduser(val) + val = subst_vars(val, self.config_vars) + setattr(self, attr, val) + + def expand_basedirs(self): + """Calls `os.path.expanduser` on install_base, install_platbase and + root.""" + self._expand_attrs(['install_base', 'install_platbase', 'root']) + + def expand_dirs(self): + """Calls `os.path.expanduser` on install dirs.""" + dirs = [ + 'install_purelib', + 'install_platlib', + 'install_lib', + 'install_headers', + 'install_scripts', + 'install_data', + ] + self._expand_attrs(dirs) + + def run(self): + if self.verbose != self.distribution.verbose: + log.set_verbosity(self.verbose) + try: + for spec in self.args: + self.easy_install(spec, not self.no_deps) + if self.record: + outputs = list(sorted(self.outputs)) + if self.root: # strip any package prefix + root_len = len(self.root) + for counter in range(len(outputs)): + outputs[counter] = outputs[counter][root_len:] + from distutils import file_util + + self.execute( + file_util.write_file, (self.record, outputs), + "writing list of installed files to '%s'" % + self.record + ) + self.warn_deprecated_options() + finally: + log.set_verbosity(self.distribution.verbose) + + def pseudo_tempname(self): + """Return a pseudo-tempname base in the install directory. + This code is intentionally naive; if a malicious party can write to + the target directory you're already in deep doodoo. + """ + try: + pid = os.getpid() + except Exception: + pid = random.randint(0, sys.maxsize) + return os.path.join(self.install_dir, "test-easy-install-%s" % pid) + + def warn_deprecated_options(self): + pass + + def check_site_dir(self): + """Verify that self.install_dir is .pth-capable dir, if needed""" + + instdir = normalize_path(self.install_dir) + pth_file = os.path.join(instdir, 'easy-install.pth') + + # Is it a configured, PYTHONPATH, implicit, or explicit site dir? + is_site_dir = instdir in self.all_site_dirs + + if not is_site_dir and not self.multi_version: + # No? Then directly test whether it does .pth file processing + is_site_dir = self.check_pth_processing() + else: + # make sure we can write to target dir + testfile = self.pseudo_tempname() + '.write-test' + test_exists = os.path.exists(testfile) + try: + if test_exists: + os.unlink(testfile) + open(testfile, 'w').close() + os.unlink(testfile) + except (OSError, IOError): + self.cant_write_to_target() + + if not is_site_dir and not self.multi_version: + # Can't install non-multi to non-site dir + raise DistutilsError(self.no_default_version_msg()) + + if is_site_dir: + if self.pth_file is None: + self.pth_file = PthDistributions(pth_file, self.all_site_dirs) + else: + self.pth_file = None + + if instdir not in map(normalize_path, _pythonpath()): + # only PYTHONPATH dirs need a site.py, so pretend it's there + self.sitepy_installed = True + elif self.multi_version and not os.path.exists(pth_file): + self.sitepy_installed = True # don't need site.py in this case + self.pth_file = None # and don't create a .pth file + self.install_dir = instdir + + __cant_write_msg = textwrap.dedent(""" + can't create or remove files in install directory + + The following error occurred while trying to add or remove files in the + installation directory: + + %s + + The installation directory you specified (via --install-dir, --prefix, or + the distutils default setting) was: + + %s + """).lstrip() + + __not_exists_id = textwrap.dedent(""" + This directory does not currently exist. Please create it and try again, or + choose a different installation directory (using the -d or --install-dir + option). + """).lstrip() + + __access_msg = textwrap.dedent(""" + Perhaps your account does not have write access to this directory? If the + installation directory is a system-owned directory, you may need to sign in + as the administrator or "root" account. If you do not have administrative + access to this machine, you may wish to choose a different installation + directory, preferably one that is listed in your PYTHONPATH environment + variable. + + For information on other options, you may wish to consult the + documentation at: + + https://setuptools.readthedocs.io/en/latest/easy_install.html + + Please make the appropriate changes for your system and try again. + """).lstrip() + + def cant_write_to_target(self): + msg = self.__cant_write_msg % (sys.exc_info()[1], self.install_dir,) + + if not os.path.exists(self.install_dir): + msg += '\n' + self.__not_exists_id + else: + msg += '\n' + self.__access_msg + raise DistutilsError(msg) + + def check_pth_processing(self): + """Empirically verify whether .pth files are supported in inst. dir""" + instdir = self.install_dir + log.info("Checking .pth file support in %s", instdir) + pth_file = self.pseudo_tempname() + ".pth" + ok_file = pth_file + '.ok' + ok_exists = os.path.exists(ok_file) + tmpl = _one_liner(""" + import os + f = open({ok_file!r}, 'w') + f.write('OK') + f.close() + """) + '\n' + try: + if ok_exists: + os.unlink(ok_file) + dirname = os.path.dirname(ok_file) + pkg_resources.py31compat.makedirs(dirname, exist_ok=True) + f = open(pth_file, 'w') + except (OSError, IOError): + self.cant_write_to_target() + else: + try: + f.write(tmpl.format(**locals())) + f.close() + f = None + executable = sys.executable + if os.name == 'nt': + dirname, basename = os.path.split(executable) + alt = os.path.join(dirname, 'pythonw.exe') + use_alt = ( + basename.lower() == 'python.exe' and + os.path.exists(alt) + ) + if use_alt: + # use pythonw.exe to avoid opening a console window + executable = alt + + from distutils.spawn import spawn + + spawn([executable, '-E', '-c', 'pass'], 0) + + if os.path.exists(ok_file): + log.info( + "TEST PASSED: %s appears to support .pth files", + instdir + ) + return True + finally: + if f: + f.close() + if os.path.exists(ok_file): + os.unlink(ok_file) + if os.path.exists(pth_file): + os.unlink(pth_file) + if not self.multi_version: + log.warn("TEST FAILED: %s does NOT support .pth files", instdir) + return False + + def install_egg_scripts(self, dist): + """Write all the scripts for `dist`, unless scripts are excluded""" + if not self.exclude_scripts and dist.metadata_isdir('scripts'): + for script_name in dist.metadata_listdir('scripts'): + if dist.metadata_isdir('scripts/' + script_name): + # The "script" is a directory, likely a Python 3 + # __pycache__ directory, so skip it. + continue + self.install_script( + dist, script_name, + dist.get_metadata('scripts/' + script_name) + ) + self.install_wrapper_scripts(dist) + + def add_output(self, path): + if os.path.isdir(path): + for base, dirs, files in os.walk(path): + for filename in files: + self.outputs.append(os.path.join(base, filename)) + else: + self.outputs.append(path) + + def not_editable(self, spec): + if self.editable: + raise DistutilsArgError( + "Invalid argument %r: you can't use filenames or URLs " + "with --editable (except via the --find-links option)." + % (spec,) + ) + + def check_editable(self, spec): + if not self.editable: + return + + if os.path.exists(os.path.join(self.build_directory, spec.key)): + raise DistutilsArgError( + "%r already exists in %s; can't do a checkout there" % + (spec.key, self.build_directory) + ) + + @contextlib.contextmanager + def _tmpdir(self): + tmpdir = tempfile.mkdtemp(prefix=six.u("easy_install-")) + try: + # cast to str as workaround for #709 and #710 and #712 + yield str(tmpdir) + finally: + os.path.exists(tmpdir) and rmtree(rmtree_safe(tmpdir)) + + def easy_install(self, spec, deps=False): + if not self.editable: + self.install_site_py() + + with self._tmpdir() as tmpdir: + if not isinstance(spec, Requirement): + if URL_SCHEME(spec): + # It's a url, download it to tmpdir and process + self.not_editable(spec) + dl = self.package_index.download(spec, tmpdir) + return self.install_item(None, dl, tmpdir, deps, True) + + elif os.path.exists(spec): + # Existing file or directory, just process it directly + self.not_editable(spec) + return self.install_item(None, spec, tmpdir, deps, True) + else: + spec = parse_requirement_arg(spec) + + self.check_editable(spec) + dist = self.package_index.fetch_distribution( + spec, tmpdir, self.upgrade, self.editable, + not self.always_copy, self.local_index + ) + if dist is None: + msg = "Could not find suitable distribution for %r" % spec + if self.always_copy: + msg += " (--always-copy skips system and development eggs)" + raise DistutilsError(msg) + elif dist.precedence == DEVELOP_DIST: + # .egg-info dists don't need installing, just process deps + self.process_distribution(spec, dist, deps, "Using") + return dist + else: + return self.install_item(spec, dist.location, tmpdir, deps) + + def install_item(self, spec, download, tmpdir, deps, install_needed=False): + + # Installation is also needed if file in tmpdir or is not an egg + install_needed = install_needed or self.always_copy + install_needed = install_needed or os.path.dirname(download) == tmpdir + install_needed = install_needed or not download.endswith('.egg') + install_needed = install_needed or ( + self.always_copy_from is not None and + os.path.dirname(normalize_path(download)) == + normalize_path(self.always_copy_from) + ) + + if spec and not install_needed: + # at this point, we know it's a local .egg, we just don't know if + # it's already installed. + for dist in self.local_index[spec.project_name]: + if dist.location == download: + break + else: + install_needed = True # it's not in the local index + + log.info("Processing %s", os.path.basename(download)) + + if install_needed: + dists = self.install_eggs(spec, download, tmpdir) + for dist in dists: + self.process_distribution(spec, dist, deps) + else: + dists = [self.egg_distribution(download)] + self.process_distribution(spec, dists[0], deps, "Using") + + if spec is not None: + for dist in dists: + if dist in spec: + return dist + + def select_scheme(self, name): + """Sets the install directories by applying the install schemes.""" + # it's the caller's problem if they supply a bad name! + scheme = INSTALL_SCHEMES[name] + for key in SCHEME_KEYS: + attrname = 'install_' + key + if getattr(self, attrname) is None: + setattr(self, attrname, scheme[key]) + + def process_distribution(self, requirement, dist, deps=True, *info): + self.update_pth(dist) + self.package_index.add(dist) + if dist in self.local_index[dist.key]: + self.local_index.remove(dist) + self.local_index.add(dist) + self.install_egg_scripts(dist) + self.installed_projects[dist.key] = dist + log.info(self.installation_report(requirement, dist, *info)) + if (dist.has_metadata('dependency_links.txt') and + not self.no_find_links): + self.package_index.add_find_links( + dist.get_metadata_lines('dependency_links.txt') + ) + if not deps and not self.always_copy: + return + elif requirement is not None and dist.key != requirement.key: + log.warn("Skipping dependencies for %s", dist) + return # XXX this is not the distribution we were looking for + elif requirement is None or dist not in requirement: + # if we wound up with a different version, resolve what we've got + distreq = dist.as_requirement() + requirement = Requirement(str(distreq)) + log.info("Processing dependencies for %s", requirement) + try: + distros = WorkingSet([]).resolve( + [requirement], self.local_index, self.easy_install + ) + except DistributionNotFound as e: + raise DistutilsError(str(e)) + except VersionConflict as e: + raise DistutilsError(e.report()) + if self.always_copy or self.always_copy_from: + # Force all the relevant distros to be copied or activated + for dist in distros: + if dist.key not in self.installed_projects: + self.easy_install(dist.as_requirement()) + log.info("Finished processing dependencies for %s", requirement) + + def should_unzip(self, dist): + if self.zip_ok is not None: + return not self.zip_ok + if dist.has_metadata('not-zip-safe'): + return True + if not dist.has_metadata('zip-safe'): + return True + return False + + def maybe_move(self, spec, dist_filename, setup_base): + dst = os.path.join(self.build_directory, spec.key) + if os.path.exists(dst): + msg = ( + "%r already exists in %s; build directory %s will not be kept" + ) + log.warn(msg, spec.key, self.build_directory, setup_base) + return setup_base + if os.path.isdir(dist_filename): + setup_base = dist_filename + else: + if os.path.dirname(dist_filename) == setup_base: + os.unlink(dist_filename) # get it out of the tmp dir + contents = os.listdir(setup_base) + if len(contents) == 1: + dist_filename = os.path.join(setup_base, contents[0]) + if os.path.isdir(dist_filename): + # if the only thing there is a directory, move it instead + setup_base = dist_filename + ensure_directory(dst) + shutil.move(setup_base, dst) + return dst + + def install_wrapper_scripts(self, dist): + if self.exclude_scripts: + return + for args in ScriptWriter.best().get_args(dist): + self.write_script(*args) + + def install_script(self, dist, script_name, script_text, dev_path=None): + """Generate a legacy script wrapper and install it""" + spec = str(dist.as_requirement()) + is_script = is_python_script(script_text, script_name) + + if is_script: + body = self._load_template(dev_path) % locals() + script_text = ScriptWriter.get_header(script_text) + body + self.write_script(script_name, _to_ascii(script_text), 'b') + + @staticmethod + def _load_template(dev_path): + """ + There are a couple of template scripts in the package. This + function loads one of them and prepares it for use. + """ + # See https://github.com/pypa/setuptools/issues/134 for info + # on script file naming and downstream issues with SVR4 + name = 'script.tmpl' + if dev_path: + name = name.replace('.tmpl', ' (dev).tmpl') + + raw_bytes = resource_string('setuptools', name) + return raw_bytes.decode('utf-8') + + def write_script(self, script_name, contents, mode="t", blockers=()): + """Write an executable file to the scripts directory""" + self.delete_blockers( # clean up old .py/.pyw w/o a script + [os.path.join(self.script_dir, x) for x in blockers] + ) + log.info("Installing %s script to %s", script_name, self.script_dir) + target = os.path.join(self.script_dir, script_name) + self.add_output(target) + + if self.dry_run: + return + + mask = current_umask() + ensure_directory(target) + if os.path.exists(target): + os.unlink(target) + with open(target, "w" + mode) as f: + f.write(contents) + chmod(target, 0o777 - mask) + + def install_eggs(self, spec, dist_filename, tmpdir): + # .egg dirs or files are already built, so just return them + if dist_filename.lower().endswith('.egg'): + return [self.install_egg(dist_filename, tmpdir)] + elif dist_filename.lower().endswith('.exe'): + return [self.install_exe(dist_filename, tmpdir)] + elif dist_filename.lower().endswith('.whl'): + return [self.install_wheel(dist_filename, tmpdir)] + + # Anything else, try to extract and build + setup_base = tmpdir + if os.path.isfile(dist_filename) and not dist_filename.endswith('.py'): + unpack_archive(dist_filename, tmpdir, self.unpack_progress) + elif os.path.isdir(dist_filename): + setup_base = os.path.abspath(dist_filename) + + if (setup_base.startswith(tmpdir) # something we downloaded + and self.build_directory and spec is not None): + setup_base = self.maybe_move(spec, dist_filename, setup_base) + + # Find the setup.py file + setup_script = os.path.join(setup_base, 'setup.py') + + if not os.path.exists(setup_script): + setups = glob(os.path.join(setup_base, '*', 'setup.py')) + if not setups: + raise DistutilsError( + "Couldn't find a setup script in %s" % + os.path.abspath(dist_filename) + ) + if len(setups) > 1: + raise DistutilsError( + "Multiple setup scripts in %s" % + os.path.abspath(dist_filename) + ) + setup_script = setups[0] + + # Now run it, and return the result + if self.editable: + log.info(self.report_editable(spec, setup_script)) + return [] + else: + return self.build_and_install(setup_script, setup_base) + + def egg_distribution(self, egg_path): + if os.path.isdir(egg_path): + metadata = PathMetadata(egg_path, os.path.join(egg_path, + 'EGG-INFO')) + else: + metadata = EggMetadata(zipimport.zipimporter(egg_path)) + return Distribution.from_filename(egg_path, metadata=metadata) + + def install_egg(self, egg_path, tmpdir): + destination = os.path.join( + self.install_dir, + os.path.basename(egg_path), + ) + destination = os.path.abspath(destination) + if not self.dry_run: + ensure_directory(destination) + + dist = self.egg_distribution(egg_path) + if not samefile(egg_path, destination): + if os.path.isdir(destination) and not os.path.islink(destination): + dir_util.remove_tree(destination, dry_run=self.dry_run) + elif os.path.exists(destination): + self.execute( + os.unlink, + (destination,), + "Removing " + destination, + ) + try: + new_dist_is_zipped = False + if os.path.isdir(egg_path): + if egg_path.startswith(tmpdir): + f, m = shutil.move, "Moving" + else: + f, m = shutil.copytree, "Copying" + elif self.should_unzip(dist): + self.mkpath(destination) + f, m = self.unpack_and_compile, "Extracting" + else: + new_dist_is_zipped = True + if egg_path.startswith(tmpdir): + f, m = shutil.move, "Moving" + else: + f, m = shutil.copy2, "Copying" + self.execute( + f, + (egg_path, destination), + (m + " %s to %s") % ( + os.path.basename(egg_path), + os.path.dirname(destination) + ), + ) + update_dist_caches( + destination, + fix_zipimporter_caches=new_dist_is_zipped, + ) + except Exception: + update_dist_caches(destination, fix_zipimporter_caches=False) + raise + + self.add_output(destination) + return self.egg_distribution(destination) + + def install_exe(self, dist_filename, tmpdir): + # See if it's valid, get data + cfg = extract_wininst_cfg(dist_filename) + if cfg is None: + raise DistutilsError( + "%s is not a valid distutils Windows .exe" % dist_filename + ) + # Create a dummy distribution object until we build the real distro + dist = Distribution( + None, + project_name=cfg.get('metadata', 'name'), + version=cfg.get('metadata', 'version'), platform=get_platform(), + ) + + # Convert the .exe to an unpacked egg + egg_path = os.path.join(tmpdir, dist.egg_name() + '.egg') + dist.location = egg_path + egg_tmp = egg_path + '.tmp' + _egg_info = os.path.join(egg_tmp, 'EGG-INFO') + pkg_inf = os.path.join(_egg_info, 'PKG-INFO') + ensure_directory(pkg_inf) # make sure EGG-INFO dir exists + dist._provider = PathMetadata(egg_tmp, _egg_info) # XXX + self.exe_to_egg(dist_filename, egg_tmp) + + # Write EGG-INFO/PKG-INFO + if not os.path.exists(pkg_inf): + f = open(pkg_inf, 'w') + f.write('Metadata-Version: 1.0\n') + for k, v in cfg.items('metadata'): + if k != 'target_version': + f.write('%s: %s\n' % (k.replace('_', '-').title(), v)) + f.close() + script_dir = os.path.join(_egg_info, 'scripts') + # delete entry-point scripts to avoid duping + self.delete_blockers([ + os.path.join(script_dir, args[0]) + for args in ScriptWriter.get_args(dist) + ]) + # Build .egg file from tmpdir + bdist_egg.make_zipfile( + egg_path, egg_tmp, verbose=self.verbose, dry_run=self.dry_run, + ) + # install the .egg + return self.install_egg(egg_path, tmpdir) + + def exe_to_egg(self, dist_filename, egg_tmp): + """Extract a bdist_wininst to the directories an egg would use""" + # Check for .pth file and set up prefix translations + prefixes = get_exe_prefixes(dist_filename) + to_compile = [] + native_libs = [] + top_level = {} + + def process(src, dst): + s = src.lower() + for old, new in prefixes: + if s.startswith(old): + src = new + src[len(old):] + parts = src.split('/') + dst = os.path.join(egg_tmp, *parts) + dl = dst.lower() + if dl.endswith('.pyd') or dl.endswith('.dll'): + parts[-1] = bdist_egg.strip_module(parts[-1]) + top_level[os.path.splitext(parts[0])[0]] = 1 + native_libs.append(src) + elif dl.endswith('.py') and old != 'SCRIPTS/': + top_level[os.path.splitext(parts[0])[0]] = 1 + to_compile.append(dst) + return dst + if not src.endswith('.pth'): + log.warn("WARNING: can't process %s", src) + return None + + # extract, tracking .pyd/.dll->native_libs and .py -> to_compile + unpack_archive(dist_filename, egg_tmp, process) + stubs = [] + for res in native_libs: + if res.lower().endswith('.pyd'): # create stubs for .pyd's + parts = res.split('/') + resource = parts[-1] + parts[-1] = bdist_egg.strip_module(parts[-1]) + '.py' + pyfile = os.path.join(egg_tmp, *parts) + to_compile.append(pyfile) + stubs.append(pyfile) + bdist_egg.write_stub(resource, pyfile) + self.byte_compile(to_compile) # compile .py's + bdist_egg.write_safety_flag( + os.path.join(egg_tmp, 'EGG-INFO'), + bdist_egg.analyze_egg(egg_tmp, stubs)) # write zip-safety flag + + for name in 'top_level', 'native_libs': + if locals()[name]: + txt = os.path.join(egg_tmp, 'EGG-INFO', name + '.txt') + if not os.path.exists(txt): + f = open(txt, 'w') + f.write('\n'.join(locals()[name]) + '\n') + f.close() + + def install_wheel(self, wheel_path, tmpdir): + wheel = Wheel(wheel_path) + assert wheel.is_compatible() + destination = os.path.join(self.install_dir, wheel.egg_name()) + destination = os.path.abspath(destination) + if not self.dry_run: + ensure_directory(destination) + if os.path.isdir(destination) and not os.path.islink(destination): + dir_util.remove_tree(destination, dry_run=self.dry_run) + elif os.path.exists(destination): + self.execute( + os.unlink, + (destination,), + "Removing " + destination, + ) + try: + self.execute( + wheel.install_as_egg, + (destination,), + ("Installing %s to %s") % ( + os.path.basename(wheel_path), + os.path.dirname(destination) + ), + ) + finally: + update_dist_caches(destination, fix_zipimporter_caches=False) + self.add_output(destination) + return self.egg_distribution(destination) + + __mv_warning = textwrap.dedent(""" + Because this distribution was installed --multi-version, before you can + import modules from this package in an application, you will need to + 'import pkg_resources' and then use a 'require()' call similar to one of + these examples, in order to select the desired version: + + pkg_resources.require("%(name)s") # latest installed version + pkg_resources.require("%(name)s==%(version)s") # this exact version + pkg_resources.require("%(name)s>=%(version)s") # this version or higher + """).lstrip() + + __id_warning = textwrap.dedent(""" + Note also that the installation directory must be on sys.path at runtime for + this to work. (e.g. by being the application's script directory, by being on + PYTHONPATH, or by being added to sys.path by your code.) + """) + + def installation_report(self, req, dist, what="Installed"): + """Helpful installation message for display to package users""" + msg = "\n%(what)s %(eggloc)s%(extras)s" + if self.multi_version and not self.no_report: + msg += '\n' + self.__mv_warning + if self.install_dir not in map(normalize_path, sys.path): + msg += '\n' + self.__id_warning + + eggloc = dist.location + name = dist.project_name + version = dist.version + extras = '' # TODO: self.report_extras(req, dist) + return msg % locals() + + __editable_msg = textwrap.dedent(""" + Extracted editable version of %(spec)s to %(dirname)s + + If it uses setuptools in its setup script, you can activate it in + "development" mode by going to that directory and running:: + + %(python)s setup.py develop + + See the setuptools documentation for the "develop" command for more info. + """).lstrip() + + def report_editable(self, spec, setup_script): + dirname = os.path.dirname(setup_script) + python = sys.executable + return '\n' + self.__editable_msg % locals() + + def run_setup(self, setup_script, setup_base, args): + sys.modules.setdefault('distutils.command.bdist_egg', bdist_egg) + sys.modules.setdefault('distutils.command.egg_info', egg_info) + + args = list(args) + if self.verbose > 2: + v = 'v' * (self.verbose - 1) + args.insert(0, '-' + v) + elif self.verbose < 2: + args.insert(0, '-q') + if self.dry_run: + args.insert(0, '-n') + log.info( + "Running %s %s", setup_script[len(setup_base) + 1:], ' '.join(args) + ) + try: + run_setup(setup_script, args) + except SystemExit as v: + raise DistutilsError("Setup script exited with %s" % (v.args[0],)) + + def build_and_install(self, setup_script, setup_base): + args = ['bdist_egg', '--dist-dir'] + + dist_dir = tempfile.mkdtemp( + prefix='egg-dist-tmp-', dir=os.path.dirname(setup_script) + ) + try: + self._set_fetcher_options(os.path.dirname(setup_script)) + args.append(dist_dir) + + self.run_setup(setup_script, setup_base, args) + all_eggs = Environment([dist_dir]) + eggs = [] + for key in all_eggs: + for dist in all_eggs[key]: + eggs.append(self.install_egg(dist.location, setup_base)) + if not eggs and not self.dry_run: + log.warn("No eggs found in %s (setup script problem?)", + dist_dir) + return eggs + finally: + rmtree(dist_dir) + log.set_verbosity(self.verbose) # restore our log verbosity + + def _set_fetcher_options(self, base): + """ + When easy_install is about to run bdist_egg on a source dist, that + source dist might have 'setup_requires' directives, requiring + additional fetching. Ensure the fetcher options given to easy_install + are available to that command as well. + """ + # find the fetch options from easy_install and write them out + # to the setup.cfg file. + ei_opts = self.distribution.get_option_dict('easy_install').copy() + fetch_directives = ( + 'find_links', 'site_dirs', 'index_url', 'optimize', + 'site_dirs', 'allow_hosts', + ) + fetch_options = {} + for key, val in ei_opts.items(): + if key not in fetch_directives: + continue + fetch_options[key.replace('_', '-')] = val[1] + # create a settings dictionary suitable for `edit_config` + settings = dict(easy_install=fetch_options) + cfg_filename = os.path.join(base, 'setup.cfg') + setopt.edit_config(cfg_filename, settings) + + def update_pth(self, dist): + if self.pth_file is None: + return + + for d in self.pth_file[dist.key]: # drop old entries + if self.multi_version or d.location != dist.location: + log.info("Removing %s from easy-install.pth file", d) + self.pth_file.remove(d) + if d.location in self.shadow_path: + self.shadow_path.remove(d.location) + + if not self.multi_version: + if dist.location in self.pth_file.paths: + log.info( + "%s is already the active version in easy-install.pth", + dist, + ) + else: + log.info("Adding %s to easy-install.pth file", dist) + self.pth_file.add(dist) # add new entry + if dist.location not in self.shadow_path: + self.shadow_path.append(dist.location) + + if not self.dry_run: + + self.pth_file.save() + + if dist.key == 'setuptools': + # Ensure that setuptools itself never becomes unavailable! + # XXX should this check for latest version? + filename = os.path.join(self.install_dir, 'setuptools.pth') + if os.path.islink(filename): + os.unlink(filename) + f = open(filename, 'wt') + f.write(self.pth_file.make_relative(dist.location) + '\n') + f.close() + + def unpack_progress(self, src, dst): + # Progress filter for unpacking + log.debug("Unpacking %s to %s", src, dst) + return dst # only unpack-and-compile skips files for dry run + + def unpack_and_compile(self, egg_path, destination): + to_compile = [] + to_chmod = [] + + def pf(src, dst): + if dst.endswith('.py') and not src.startswith('EGG-INFO/'): + to_compile.append(dst) + elif dst.endswith('.dll') or dst.endswith('.so'): + to_chmod.append(dst) + self.unpack_progress(src, dst) + return not self.dry_run and dst or None + + unpack_archive(egg_path, destination, pf) + self.byte_compile(to_compile) + if not self.dry_run: + for f in to_chmod: + mode = ((os.stat(f)[stat.ST_MODE]) | 0o555) & 0o7755 + chmod(f, mode) + + def byte_compile(self, to_compile): + if sys.dont_write_bytecode: + return + + from distutils.util import byte_compile + + try: + # try to make the byte compile messages quieter + log.set_verbosity(self.verbose - 1) + + byte_compile(to_compile, optimize=0, force=1, dry_run=self.dry_run) + if self.optimize: + byte_compile( + to_compile, optimize=self.optimize, force=1, + dry_run=self.dry_run, + ) + finally: + log.set_verbosity(self.verbose) # restore original verbosity + + __no_default_msg = textwrap.dedent(""" + bad install directory or PYTHONPATH + + You are attempting to install a package to a directory that is not + on PYTHONPATH and which Python does not read ".pth" files from. The + installation directory you specified (via --install-dir, --prefix, or + the distutils default setting) was: + + %s + + and your PYTHONPATH environment variable currently contains: + + %r + + Here are some of your options for correcting the problem: + + * You can choose a different installation directory, i.e., one that is + on PYTHONPATH or supports .pth files + + * You can add the installation directory to the PYTHONPATH environment + variable. (It must then also be on PYTHONPATH whenever you run + Python and want to use the package(s) you are installing.) + + * You can set up the installation directory to support ".pth" files by + using one of the approaches described here: + + https://setuptools.readthedocs.io/en/latest/easy_install.html#custom-installation-locations + + + Please make the appropriate changes for your system and try again.""").lstrip() + + def no_default_version_msg(self): + template = self.__no_default_msg + return template % (self.install_dir, os.environ.get('PYTHONPATH', '')) + + def install_site_py(self): + """Make sure there's a site.py in the target dir, if needed""" + + if self.sitepy_installed: + return # already did it, or don't need to + + sitepy = os.path.join(self.install_dir, "site.py") + source = resource_string("setuptools", "site-patch.py") + source = source.decode('utf-8') + current = "" + + if os.path.exists(sitepy): + log.debug("Checking existing site.py in %s", self.install_dir) + with io.open(sitepy) as strm: + current = strm.read() + + if not current.startswith('def __boot():'): + raise DistutilsError( + "%s is not a setuptools-generated site.py; please" + " remove it." % sitepy + ) + + if current != source: + log.info("Creating %s", sitepy) + if not self.dry_run: + ensure_directory(sitepy) + with io.open(sitepy, 'w', encoding='utf-8') as strm: + strm.write(source) + self.byte_compile([sitepy]) + + self.sitepy_installed = True + + def create_home_path(self): + """Create directories under ~.""" + if not self.user: + return + home = convert_path(os.path.expanduser("~")) + for name, path in six.iteritems(self.config_vars): + if path.startswith(home) and not os.path.isdir(path): + self.debug_print("os.makedirs('%s', 0o700)" % path) + os.makedirs(path, 0o700) + + if sys.version[:3] in ('2.3', '2.4', '2.5') or 'real_prefix' in sys.__dict__: + sitedir_name = 'site-packages' + else: + sitedir_name = 'dist-packages' + + INSTALL_SCHEMES = dict( + posix=dict( + install_dir='$base/lib/python$py_version_short/site-packages', + script_dir='$base/bin', + ), + unix_local = dict( + install_dir = '$base/local/lib/python$py_version_short/%s' % sitedir_name, + script_dir = '$base/local/bin', + ), + posix_local = dict( + install_dir = '$base/local/lib/python$py_version_short/%s' % sitedir_name, + script_dir = '$base/local/bin', + ), + deb_system = dict( + install_dir = '$base/lib/python3/%s' % sitedir_name, + script_dir = '$base/bin', + ), + ) + + DEFAULT_SCHEME = dict( + install_dir='$base/Lib/site-packages', + script_dir='$base/Scripts', + ) + + def _expand(self, *attrs): + config_vars = self.get_finalized_command('install').config_vars + + if self.prefix or self.install_layout: + if self.install_layout and self.install_layout in ['deb']: + scheme_name = "deb_system" + self.prefix = '/usr' + elif self.prefix or 'real_prefix' in sys.__dict__: + scheme_name = os.name + else: + scheme_name = "posix_local" + # Set default install_dir/scripts from --prefix + config_vars = config_vars.copy() + config_vars['base'] = self.prefix + scheme = self.INSTALL_SCHEMES.get(scheme_name,self.DEFAULT_SCHEME) + for attr, val in scheme.items(): + if getattr(self, attr, None) is None: + setattr(self, attr, val) + + from distutils.util import subst_vars + + for attr in attrs: + val = getattr(self, attr) + if val is not None: + val = subst_vars(val, config_vars) + if os.name == 'posix': + val = os.path.expanduser(val) + setattr(self, attr, val) + + +def _pythonpath(): + items = os.environ.get('PYTHONPATH', '').split(os.pathsep) + return filter(None, items) + + +def get_site_dirs(): + """ + Return a list of 'site' dirs + """ + + sitedirs = [] + + # start with PYTHONPATH + sitedirs.extend(_pythonpath()) + + prefixes = [sys.prefix] + if sys.exec_prefix != sys.prefix: + prefixes.append(sys.exec_prefix) + for prefix in prefixes: + if prefix: + if sys.platform in ('os2emx', 'riscos'): + sitedirs.append(os.path.join(prefix, "Lib", "site-packages")) + elif os.sep == '/': + sitedirs.extend([ + os.path.join( + prefix, + "local/lib", + "python" + sys.version[:3], + "dist-packages", + ), + os.path.join( + prefix, + "lib", + "python" + sys.version[:3], + "dist-packages", + ), + os.path.join(prefix, "lib", "site-python"), + ]) + else: + sitedirs.extend([ + prefix, + os.path.join(prefix, "lib", "site-packages"), + ]) + if sys.platform == 'darwin': + # for framework builds *only* we add the standard Apple + # locations. Currently only per-user, but /Library and + # /Network/Library could be added too + if 'Python.framework' in prefix: + home = os.environ.get('HOME') + if home: + home_sp = os.path.join( + home, + 'Library', + 'Python', + sys.version[:3], + 'site-packages', + ) + sitedirs.append(home_sp) + lib_paths = get_path('purelib'), get_path('platlib') + for site_lib in lib_paths: + if site_lib not in sitedirs: + sitedirs.append(site_lib) + + if site.ENABLE_USER_SITE: + sitedirs.append(site.USER_SITE) + + try: + sitedirs.extend(site.getsitepackages()) + except AttributeError: + pass + + sitedirs = list(map(normalize_path, sitedirs)) + + return sitedirs + + +def expand_paths(inputs): + """Yield sys.path directories that might contain "old-style" packages""" + + seen = {} + + for dirname in inputs: + dirname = normalize_path(dirname) + if dirname in seen: + continue + + seen[dirname] = 1 + if not os.path.isdir(dirname): + continue + + files = os.listdir(dirname) + yield dirname, files + + for name in files: + if not name.endswith('.pth'): + # We only care about the .pth files + continue + if name in ('easy-install.pth', 'setuptools.pth'): + # Ignore .pth files that we control + continue + + # Read the .pth file + f = open(os.path.join(dirname, name)) + lines = list(yield_lines(f)) + f.close() + + # Yield existing non-dupe, non-import directory lines from it + for line in lines: + if not line.startswith("import"): + line = normalize_path(line.rstrip()) + if line not in seen: + seen[line] = 1 + if not os.path.isdir(line): + continue + yield line, os.listdir(line) + + +def extract_wininst_cfg(dist_filename): + """Extract configuration data from a bdist_wininst .exe + + Returns a configparser.RawConfigParser, or None + """ + f = open(dist_filename, 'rb') + try: + endrec = zipfile._EndRecData(f) + if endrec is None: + return None + + prepended = (endrec[9] - endrec[5]) - endrec[6] + if prepended < 12: # no wininst data here + return None + f.seek(prepended - 12) + + tag, cfglen, bmlen = struct.unpack("<iii", f.read(12)) + if tag not in (0x1234567A, 0x1234567B): + return None # not a valid tag + + f.seek(prepended - (12 + cfglen)) + init = {'version': '', 'target_version': ''} + cfg = configparser.RawConfigParser(init) + try: + part = f.read(cfglen) + # Read up to the first null byte. + config = part.split(b'\0', 1)[0] + # Now the config is in bytes, but for RawConfigParser, it should + # be text, so decode it. + config = config.decode(sys.getfilesystemencoding()) + cfg.readfp(six.StringIO(config)) + except configparser.Error: + return None + if not cfg.has_section('metadata') or not cfg.has_section('Setup'): + return None + return cfg + + finally: + f.close() + + +def get_exe_prefixes(exe_filename): + """Get exe->egg path translations for a given .exe file""" + + prefixes = [ + ('PURELIB/', ''), + ('PLATLIB/pywin32_system32', ''), + ('PLATLIB/', ''), + ('SCRIPTS/', 'EGG-INFO/scripts/'), + ('DATA/lib/site-packages', ''), + ] + z = zipfile.ZipFile(exe_filename) + try: + for info in z.infolist(): + name = info.filename + parts = name.split('/') + if len(parts) == 3 and parts[2] == 'PKG-INFO': + if parts[1].endswith('.egg-info'): + prefixes.insert(0, ('/'.join(parts[:2]), 'EGG-INFO/')) + break + if len(parts) != 2 or not name.endswith('.pth'): + continue + if name.endswith('-nspkg.pth'): + continue + if parts[0].upper() in ('PURELIB', 'PLATLIB'): + contents = z.read(name) + if six.PY3: + contents = contents.decode() + for pth in yield_lines(contents): + pth = pth.strip().replace('\\', '/') + if not pth.startswith('import'): + prefixes.append((('%s/%s/' % (parts[0], pth)), '')) + finally: + z.close() + prefixes = [(x.lower(), y) for x, y in prefixes] + prefixes.sort() + prefixes.reverse() + return prefixes + + +class PthDistributions(Environment): + """A .pth file with Distribution paths in it""" + + dirty = False + + def __init__(self, filename, sitedirs=()): + self.filename = filename + self.sitedirs = list(map(normalize_path, sitedirs)) + self.basedir = normalize_path(os.path.dirname(self.filename)) + self._load() + Environment.__init__(self, [], None, None) + for path in yield_lines(self.paths): + list(map(self.add, find_distributions(path, True))) + + def _load(self): + self.paths = [] + saw_import = False + seen = dict.fromkeys(self.sitedirs) + if os.path.isfile(self.filename): + f = open(self.filename, 'rt') + for line in f: + if line.startswith('import'): + saw_import = True + continue + path = line.rstrip() + self.paths.append(path) + if not path.strip() or path.strip().startswith('#'): + continue + # skip non-existent paths, in case somebody deleted a package + # manually, and duplicate paths as well + path = self.paths[-1] = normalize_path( + os.path.join(self.basedir, path) + ) + if not os.path.exists(path) or path in seen: + self.paths.pop() # skip it + self.dirty = True # we cleaned up, so we're dirty now :) + continue + seen[path] = 1 + f.close() + + if self.paths and not saw_import: + self.dirty = True # ensure anything we touch has import wrappers + while self.paths and not self.paths[-1].strip(): + self.paths.pop() + + def save(self): + """Write changed .pth file back to disk""" + if not self.dirty: + return + + rel_paths = list(map(self.make_relative, self.paths)) + if rel_paths: + log.debug("Saving %s", self.filename) + lines = self._wrap_lines(rel_paths) + data = '\n'.join(lines) + '\n' + + if os.path.islink(self.filename): + os.unlink(self.filename) + with open(self.filename, 'wt') as f: + f.write(data) + + elif os.path.exists(self.filename): + log.debug("Deleting empty %s", self.filename) + os.unlink(self.filename) + + self.dirty = False + + @staticmethod + def _wrap_lines(lines): + return lines + + def add(self, dist): + """Add `dist` to the distribution map""" + new_path = ( + dist.location not in self.paths and ( + dist.location not in self.sitedirs or + # account for '.' being in PYTHONPATH + dist.location == os.getcwd() + ) + ) + if new_path: + self.paths.append(dist.location) + self.dirty = True + Environment.add(self, dist) + + def remove(self, dist): + """Remove `dist` from the distribution map""" + while dist.location in self.paths: + self.paths.remove(dist.location) + self.dirty = True + Environment.remove(self, dist) + + def make_relative(self, path): + npath, last = os.path.split(normalize_path(path)) + baselen = len(self.basedir) + parts = [last] + sep = os.altsep == '/' and '/' or os.sep + while len(npath) >= baselen: + if npath == self.basedir: + parts.append(os.curdir) + parts.reverse() + return sep.join(parts) + npath, last = os.path.split(npath) + parts.append(last) + else: + return path + + +class RewritePthDistributions(PthDistributions): + @classmethod + def _wrap_lines(cls, lines): + yield cls.prelude + for line in lines: + yield line + yield cls.postlude + + prelude = _one_liner(""" + import sys + sys.__plen = len(sys.path) + """) + postlude = _one_liner(""" + import sys + new = sys.path[sys.__plen:] + del sys.path[sys.__plen:] + p = getattr(sys, '__egginsert', 0) + sys.path[p:p] = new + sys.__egginsert = p + len(new) + """) + + +if os.environ.get('SETUPTOOLS_SYS_PATH_TECHNIQUE', 'raw') == 'rewrite': + PthDistributions = RewritePthDistributions + + +def _first_line_re(): + """ + Return a regular expression based on first_line_re suitable for matching + strings. + """ + if isinstance(first_line_re.pattern, str): + return first_line_re + + # first_line_re in Python >=3.1.4 and >=3.2.1 is a bytes pattern. + return re.compile(first_line_re.pattern.decode()) + + +def auto_chmod(func, arg, exc): + if func in [os.unlink, os.remove] and os.name == 'nt': + chmod(arg, stat.S_IWRITE) + return func(arg) + et, ev, _ = sys.exc_info() + six.reraise(et, (ev[0], ev[1] + (" %s %s" % (func, arg)))) + + +def update_dist_caches(dist_path, fix_zipimporter_caches): + """ + Fix any globally cached `dist_path` related data + + `dist_path` should be a path of a newly installed egg distribution (zipped + or unzipped). + + sys.path_importer_cache contains finder objects that have been cached when + importing data from the original distribution. Any such finders need to be + cleared since the replacement distribution might be packaged differently, + e.g. a zipped egg distribution might get replaced with an unzipped egg + folder or vice versa. Having the old finders cached may then cause Python + to attempt loading modules from the replacement distribution using an + incorrect loader. + + zipimport.zipimporter objects are Python loaders charged with importing + data packaged inside zip archives. If stale loaders referencing the + original distribution, are left behind, they can fail to load modules from + the replacement distribution. E.g. if an old zipimport.zipimporter instance + is used to load data from a new zipped egg archive, it may cause the + operation to attempt to locate the requested data in the wrong location - + one indicated by the original distribution's zip archive directory + information. Such an operation may then fail outright, e.g. report having + read a 'bad local file header', or even worse, it may fail silently & + return invalid data. + + zipimport._zip_directory_cache contains cached zip archive directory + information for all existing zipimport.zipimporter instances and all such + instances connected to the same archive share the same cached directory + information. + + If asked, and the underlying Python implementation allows it, we can fix + all existing zipimport.zipimporter instances instead of having to track + them down and remove them one by one, by updating their shared cached zip + archive directory information. This, of course, assumes that the + replacement distribution is packaged as a zipped egg. + + If not asked to fix existing zipimport.zipimporter instances, we still do + our best to clear any remaining zipimport.zipimporter related cached data + that might somehow later get used when attempting to load data from the new + distribution and thus cause such load operations to fail. Note that when + tracking down such remaining stale data, we can not catch every conceivable + usage from here, and we clear only those that we know of and have found to + cause problems if left alive. Any remaining caches should be updated by + whomever is in charge of maintaining them, i.e. they should be ready to + handle us replacing their zip archives with new distributions at runtime. + + """ + # There are several other known sources of stale zipimport.zipimporter + # instances that we do not clear here, but might if ever given a reason to + # do so: + # * Global setuptools pkg_resources.working_set (a.k.a. 'master working + # set') may contain distributions which may in turn contain their + # zipimport.zipimporter loaders. + # * Several zipimport.zipimporter loaders held by local variables further + # up the function call stack when running the setuptools installation. + # * Already loaded modules may have their __loader__ attribute set to the + # exact loader instance used when importing them. Python 3.4 docs state + # that this information is intended mostly for introspection and so is + # not expected to cause us problems. + normalized_path = normalize_path(dist_path) + _uncache(normalized_path, sys.path_importer_cache) + if fix_zipimporter_caches: + _replace_zip_directory_cache_data(normalized_path) + else: + # Here, even though we do not want to fix existing and now stale + # zipimporter cache information, we still want to remove it. Related to + # Python's zip archive directory information cache, we clear each of + # its stale entries in two phases: + # 1. Clear the entry so attempting to access zip archive information + # via any existing stale zipimport.zipimporter instances fails. + # 2. Remove the entry from the cache so any newly constructed + # zipimport.zipimporter instances do not end up using old stale + # zip archive directory information. + # This whole stale data removal step does not seem strictly necessary, + # but has been left in because it was done before we started replacing + # the zip archive directory information cache content if possible, and + # there are no relevant unit tests that we can depend on to tell us if + # this is really needed. + _remove_and_clear_zip_directory_cache_data(normalized_path) + + +def _collect_zipimporter_cache_entries(normalized_path, cache): + """ + Return zipimporter cache entry keys related to a given normalized path. + + Alternative path spellings (e.g. those using different character case or + those using alternative path separators) related to the same path are + included. Any sub-path entries are included as well, i.e. those + corresponding to zip archives embedded in other zip archives. + + """ + result = [] + prefix_len = len(normalized_path) + for p in cache: + np = normalize_path(p) + if (np.startswith(normalized_path) and + np[prefix_len:prefix_len + 1] in (os.sep, '')): + result.append(p) + return result + + +def _update_zipimporter_cache(normalized_path, cache, updater=None): + """ + Update zipimporter cache data for a given normalized path. + + Any sub-path entries are processed as well, i.e. those corresponding to zip + archives embedded in other zip archives. + + Given updater is a callable taking a cache entry key and the original entry + (after already removing the entry from the cache), and expected to update + the entry and possibly return a new one to be inserted in its place. + Returning None indicates that the entry should not be replaced with a new + one. If no updater is given, the cache entries are simply removed without + any additional processing, the same as if the updater simply returned None. + + """ + for p in _collect_zipimporter_cache_entries(normalized_path, cache): + # N.B. pypy's custom zipimport._zip_directory_cache implementation does + # not support the complete dict interface: + # * Does not support item assignment, thus not allowing this function + # to be used only for removing existing cache entries. + # * Does not support the dict.pop() method, forcing us to use the + # get/del patterns instead. For more detailed information see the + # following links: + # https://github.com/pypa/setuptools/issues/202#issuecomment-202913420 + # http://bit.ly/2h9itJX + old_entry = cache[p] + del cache[p] + new_entry = updater and updater(p, old_entry) + if new_entry is not None: + cache[p] = new_entry + + +def _uncache(normalized_path, cache): + _update_zipimporter_cache(normalized_path, cache) + + +def _remove_and_clear_zip_directory_cache_data(normalized_path): + def clear_and_remove_cached_zip_archive_directory_data(path, old_entry): + old_entry.clear() + + _update_zipimporter_cache( + normalized_path, zipimport._zip_directory_cache, + updater=clear_and_remove_cached_zip_archive_directory_data) + + +# PyPy Python implementation does not allow directly writing to the +# zipimport._zip_directory_cache and so prevents us from attempting to correct +# its content. The best we can do there is clear the problematic cache content +# and have PyPy repopulate it as needed. The downside is that if there are any +# stale zipimport.zipimporter instances laying around, attempting to use them +# will fail due to not having its zip archive directory information available +# instead of being automatically corrected to use the new correct zip archive +# directory information. +if '__pypy__' in sys.builtin_module_names: + _replace_zip_directory_cache_data = \ + _remove_and_clear_zip_directory_cache_data +else: + + def _replace_zip_directory_cache_data(normalized_path): + def replace_cached_zip_archive_directory_data(path, old_entry): + # N.B. In theory, we could load the zip directory information just + # once for all updated path spellings, and then copy it locally and + # update its contained path strings to contain the correct + # spelling, but that seems like a way too invasive move (this cache + # structure is not officially documented anywhere and could in + # theory change with new Python releases) for no significant + # benefit. + old_entry.clear() + zipimport.zipimporter(path) + old_entry.update(zipimport._zip_directory_cache[path]) + return old_entry + + _update_zipimporter_cache( + normalized_path, zipimport._zip_directory_cache, + updater=replace_cached_zip_archive_directory_data) + + +def is_python(text, filename='<string>'): + "Is this string a valid Python script?" + try: + compile(text, filename, 'exec') + except (SyntaxError, TypeError): + return False + else: + return True + + +def is_sh(executable): + """Determine if the specified executable is a .sh (contains a #! line)""" + try: + with io.open(executable, encoding='latin-1') as fp: + magic = fp.read(2) + except (OSError, IOError): + return executable + return magic == '#!' + + +def nt_quote_arg(arg): + """Quote a command line argument according to Windows parsing rules""" + return subprocess.list2cmdline([arg]) + + +def is_python_script(script_text, filename): + """Is this text, as a whole, a Python script? (as opposed to shell/bat/etc. + """ + if filename.endswith('.py') or filename.endswith('.pyw'): + return True # extension says it's Python + if is_python(script_text, filename): + return True # it's syntactically valid Python + if script_text.startswith('#!'): + # It begins with a '#!' line, so check if 'python' is in it somewhere + return 'python' in script_text.splitlines()[0].lower() + + return False # Not any Python I can recognize + + +try: + from os import chmod as _chmod +except ImportError: + # Jython compatibility + def _chmod(*args): + pass + + +def chmod(path, mode): + log.debug("changing mode of %s to %o", path, mode) + try: + _chmod(path, mode) + except os.error as e: + log.debug("chmod failed: %s", e) + + +class CommandSpec(list): + """ + A command spec for a #! header, specified as a list of arguments akin to + those passed to Popen. + """ + + options = [] + split_args = dict() + + @classmethod + def best(cls): + """ + Choose the best CommandSpec class based on environmental conditions. + """ + return cls + + @classmethod + def _sys_executable(cls): + _default = os.path.normpath(sys.executable) + return os.environ.get('__PYVENV_LAUNCHER__', _default) + + @classmethod + def from_param(cls, param): + """ + Construct a CommandSpec from a parameter to build_scripts, which may + be None. + """ + if isinstance(param, cls): + return param + if isinstance(param, list): + return cls(param) + if param is None: + return cls.from_environment() + # otherwise, assume it's a string. + return cls.from_string(param) + + @classmethod + def from_environment(cls): + return cls([cls._sys_executable()]) + + @classmethod + def from_string(cls, string): + """ + Construct a command spec from a simple string representing a command + line parseable by shlex.split. + """ + items = shlex.split(string, **cls.split_args) + return cls(items) + + def install_options(self, script_text): + self.options = shlex.split(self._extract_options(script_text)) + cmdline = subprocess.list2cmdline(self) + if not isascii(cmdline): + self.options[:0] = ['-x'] + + @staticmethod + def _extract_options(orig_script): + """ + Extract any options from the first line of the script. + """ + first = (orig_script + '\n').splitlines()[0] + match = _first_line_re().match(first) + options = match.group(1) or '' if match else '' + return options.strip() + + def as_header(self): + return self._render(self + list(self.options)) + + @staticmethod + def _strip_quotes(item): + _QUOTES = '"\'' + for q in _QUOTES: + if item.startswith(q) and item.endswith(q): + return item[1:-1] + return item + + @staticmethod + def _render(items): + cmdline = subprocess.list2cmdline( + CommandSpec._strip_quotes(item.strip()) for item in items) + return '#!' + cmdline + '\n' + + +# For pbr compat; will be removed in a future version. +sys_executable = CommandSpec._sys_executable() + + +class WindowsCommandSpec(CommandSpec): + split_args = dict(posix=False) + + +class ScriptWriter(object): + """ + Encapsulates behavior around writing entry point scripts for console and + gui apps. + """ + + template = textwrap.dedent(r""" + # EASY-INSTALL-ENTRY-SCRIPT: %(spec)r,%(group)r,%(name)r + __requires__ = %(spec)r + import re + import sys + from pkg_resources import load_entry_point + + if __name__ == '__main__': + sys.argv[0] = re.sub(r'(-script\.pyw?|\.exe)?$', '', sys.argv[0]) + sys.exit( + load_entry_point(%(spec)r, %(group)r, %(name)r)() + ) + """).lstrip() + + command_spec_class = CommandSpec + + @classmethod + def get_script_args(cls, dist, executable=None, wininst=False): + # for backward compatibility + warnings.warn("Use get_args", DeprecationWarning) + writer = (WindowsScriptWriter if wininst else ScriptWriter).best() + header = cls.get_script_header("", executable, wininst) + return writer.get_args(dist, header) + + @classmethod + def get_script_header(cls, script_text, executable=None, wininst=False): + # for backward compatibility + warnings.warn("Use get_header", DeprecationWarning) + if wininst: + executable = "python.exe" + cmd = cls.command_spec_class.best().from_param(executable) + cmd.install_options(script_text) + return cmd.as_header() + + @classmethod + def get_args(cls, dist, header=None): + """ + Yield write_script() argument tuples for a distribution's + console_scripts and gui_scripts entry points. + """ + if header is None: + header = cls.get_header() + spec = str(dist.as_requirement()) + for type_ in 'console', 'gui': + group = type_ + '_scripts' + for name, ep in dist.get_entry_map(group).items(): + cls._ensure_safe_name(name) + script_text = cls.template % locals() + args = cls._get_script_args(type_, name, header, script_text) + for res in args: + yield res + + @staticmethod + def _ensure_safe_name(name): + """ + Prevent paths in *_scripts entry point names. + """ + has_path_sep = re.search(r'[\\/]', name) + if has_path_sep: + raise ValueError("Path separators not allowed in script names") + + @classmethod + def get_writer(cls, force_windows): + # for backward compatibility + warnings.warn("Use best", DeprecationWarning) + return WindowsScriptWriter.best() if force_windows else cls.best() + + @classmethod + def best(cls): + """ + Select the best ScriptWriter for this environment. + """ + if sys.platform == 'win32' or (os.name == 'java' and os._name == 'nt'): + return WindowsScriptWriter.best() + else: + return cls + + @classmethod + def _get_script_args(cls, type_, name, header, script_text): + # Simply write the stub with no extension. + yield (name, header + script_text) + + @classmethod + def get_header(cls, script_text="", executable=None): + """Create a #! line, getting options (if any) from script_text""" + cmd = cls.command_spec_class.best().from_param(executable) + cmd.install_options(script_text) + return cmd.as_header() + + +class WindowsScriptWriter(ScriptWriter): + command_spec_class = WindowsCommandSpec + + @classmethod + def get_writer(cls): + # for backward compatibility + warnings.warn("Use best", DeprecationWarning) + return cls.best() + + @classmethod + def best(cls): + """ + Select the best ScriptWriter suitable for Windows + """ + writer_lookup = dict( + executable=WindowsExecutableLauncherWriter, + natural=cls, + ) + # for compatibility, use the executable launcher by default + launcher = os.environ.get('SETUPTOOLS_LAUNCHER', 'executable') + return writer_lookup[launcher] + + @classmethod + def _get_script_args(cls, type_, name, header, script_text): + "For Windows, add a .py extension" + ext = dict(console='.pya', gui='.pyw')[type_] + if ext not in os.environ['PATHEXT'].lower().split(';'): + msg = ( + "{ext} not listed in PATHEXT; scripts will not be " + "recognized as executables." + ).format(**locals()) + warnings.warn(msg, UserWarning) + old = ['.pya', '.py', '-script.py', '.pyc', '.pyo', '.pyw', '.exe'] + old.remove(ext) + header = cls._adjust_header(type_, header) + blockers = [name + x for x in old] + yield name + ext, header + script_text, 't', blockers + + @classmethod + def _adjust_header(cls, type_, orig_header): + """ + Make sure 'pythonw' is used for gui and and 'python' is used for + console (regardless of what sys.executable is). + """ + pattern = 'pythonw.exe' + repl = 'python.exe' + if type_ == 'gui': + pattern, repl = repl, pattern + pattern_ob = re.compile(re.escape(pattern), re.IGNORECASE) + new_header = pattern_ob.sub(string=orig_header, repl=repl) + return new_header if cls._use_header(new_header) else orig_header + + @staticmethod + def _use_header(new_header): + """ + Should _adjust_header use the replaced header? + + On non-windows systems, always use. On + Windows systems, only use the replaced header if it resolves + to an executable on the system. + """ + clean_header = new_header[2:-1].strip('"') + return sys.platform != 'win32' or find_executable(clean_header) + + +class WindowsExecutableLauncherWriter(WindowsScriptWriter): + @classmethod + def _get_script_args(cls, type_, name, header, script_text): + """ + For Windows, add a .py extension and an .exe launcher + """ + if type_ == 'gui': + launcher_type = 'gui' + ext = '-script.pyw' + old = ['.pyw'] + else: + launcher_type = 'cli' + ext = '-script.py' + old = ['.py', '.pyc', '.pyo'] + hdr = cls._adjust_header(type_, header) + blockers = [name + x for x in old] + yield (name + ext, hdr + script_text, 't', blockers) + yield ( + name + '.exe', get_win_launcher(launcher_type), + 'b' # write in binary mode + ) + if not is_64bit(): + # install a manifest for the launcher to prevent Windows + # from detecting it as an installer (which it will for + # launchers like easy_install.exe). Consider only + # adding a manifest for launchers detected as installers. + # See Distribute #143 for details. + m_name = name + '.exe.manifest' + yield (m_name, load_launcher_manifest(name), 't') + + +# for backward-compatibility +get_script_args = ScriptWriter.get_script_args +get_script_header = ScriptWriter.get_script_header + + +def get_win_launcher(type): + """ + Load the Windows launcher (executable) suitable for launching a script. + + `type` should be either 'cli' or 'gui' + + Returns the executable as a byte string. + """ + launcher_fn = '%s.exe' % type + if is_64bit(): + launcher_fn = launcher_fn.replace(".", "-64.") + else: + launcher_fn = launcher_fn.replace(".", "-32.") + return resource_string('setuptools', launcher_fn) + + +def load_launcher_manifest(name): + manifest = pkg_resources.resource_string(__name__, 'launcher manifest.xml') + if six.PY2: + return manifest % vars() + else: + return manifest.decode('utf-8') % vars() + + +def rmtree(path, ignore_errors=False, onerror=auto_chmod): + return shutil.rmtree(path, ignore_errors, onerror) + + +def current_umask(): + tmp = os.umask(0o022) + os.umask(tmp) + return tmp + + +def bootstrap(): + # This function is called when setuptools*.egg is run using /bin/sh + import setuptools + + argv0 = os.path.dirname(setuptools.__path__[0]) + sys.argv[0] = argv0 + sys.argv.append(argv0) + main() + + +def main(argv=None, **kw): + from setuptools import setup + from setuptools.dist import Distribution + + class DistributionWithoutHelpCommands(Distribution): + common_usage = "" + + def _show_help(self, *args, **kw): + with _patch_usage(): + Distribution._show_help(self, *args, **kw) + + if argv is None: + argv = sys.argv[1:] + + with _patch_usage(): + setup( + script_args=['-q', 'easy_install', '-v'] + argv, + script_name=sys.argv[0] or 'easy_install', + distclass=DistributionWithoutHelpCommands, + **kw + ) + + +@contextlib.contextmanager +def _patch_usage(): + import distutils.core + USAGE = textwrap.dedent(""" + usage: %(script)s [options] requirement_or_url ... + or: %(script)s --help + """).lstrip() + + def gen_usage(script_name): + return USAGE % dict( + script=os.path.basename(script_name), + ) + + saved = distutils.core.gen_usage + distutils.core.gen_usage = gen_usage + try: + yield + finally: + distutils.core.gen_usage = saved diff --git a/week-0/day-3/my_todo_app/venvironment/lib/python3.6/site-packages/setuptools/command/egg_info.py b/week-0/day-3/my_todo_app/venvironment/lib/python3.6/site-packages/setuptools/command/egg_info.py new file mode 100644 index 00000000..8b0f4488 --- /dev/null +++ b/week-0/day-3/my_todo_app/venvironment/lib/python3.6/site-packages/setuptools/command/egg_info.py @@ -0,0 +1,696 @@ +"""setuptools.command.egg_info + +Create a distribution's .egg-info directory and contents""" + +from distutils.filelist import FileList as _FileList +from distutils.errors import DistutilsInternalError +from distutils.util import convert_path +from distutils import log +import distutils.errors +import distutils.filelist +import os +import re +import sys +import io +import warnings +import time +import collections + +from setuptools.extern import six +from setuptools.extern.six.moves import map + +from setuptools import Command +from setuptools.command.sdist import sdist +from setuptools.command.sdist import walk_revctrl +from setuptools.command.setopt import edit_config +from setuptools.command import bdist_egg +from pkg_resources import ( + parse_requirements, safe_name, parse_version, + safe_version, yield_lines, EntryPoint, iter_entry_points, to_filename) +import setuptools.unicode_utils as unicode_utils +from setuptools.glob import glob + +from setuptools.extern import packaging + + +def translate_pattern(glob): + """ + Translate a file path glob like '*.txt' in to a regular expression. + This differs from fnmatch.translate which allows wildcards to match + directory separators. It also knows about '**/' which matches any number of + directories. + """ + pat = '' + + # This will split on '/' within [character classes]. This is deliberate. + chunks = glob.split(os.path.sep) + + sep = re.escape(os.sep) + valid_char = '[^%s]' % (sep,) + + for c, chunk in enumerate(chunks): + last_chunk = c == len(chunks) - 1 + + # Chunks that are a literal ** are globstars. They match anything. + if chunk == '**': + if last_chunk: + # Match anything if this is the last component + pat += '.*' + else: + # Match '(name/)*' + pat += '(?:%s+%s)*' % (valid_char, sep) + continue # Break here as the whole path component has been handled + + # Find any special characters in the remainder + i = 0 + chunk_len = len(chunk) + while i < chunk_len: + char = chunk[i] + if char == '*': + # Match any number of name characters + pat += valid_char + '*' + elif char == '?': + # Match a name character + pat += valid_char + elif char == '[': + # Character class + inner_i = i + 1 + # Skip initial !/] chars + if inner_i < chunk_len and chunk[inner_i] == '!': + inner_i = inner_i + 1 + if inner_i < chunk_len and chunk[inner_i] == ']': + inner_i = inner_i + 1 + + # Loop till the closing ] is found + while inner_i < chunk_len and chunk[inner_i] != ']': + inner_i = inner_i + 1 + + if inner_i >= chunk_len: + # Got to the end of the string without finding a closing ] + # Do not treat this as a matching group, but as a literal [ + pat += re.escape(char) + else: + # Grab the insides of the [brackets] + inner = chunk[i + 1:inner_i] + char_class = '' + + # Class negation + if inner[0] == '!': + char_class = '^' + inner = inner[1:] + + char_class += re.escape(inner) + pat += '[%s]' % (char_class,) + + # Skip to the end ] + i = inner_i + else: + pat += re.escape(char) + i += 1 + + # Join each chunk with the dir separator + if not last_chunk: + pat += sep + + pat += r'\Z' + return re.compile(pat, flags=re.MULTILINE|re.DOTALL) + + +class egg_info(Command): + description = "create a distribution's .egg-info directory" + + user_options = [ + ('egg-base=', 'e', "directory containing .egg-info directories" + " (default: top of the source tree)"), + ('tag-date', 'd', "Add date stamp (e.g. 20050528) to version number"), + ('tag-build=', 'b', "Specify explicit tag to add to version number"), + ('no-date', 'D', "Don't include date stamp [default]"), + ] + + boolean_options = ['tag-date'] + negative_opt = { + 'no-date': 'tag-date', + } + + def initialize_options(self): + self.egg_name = None + self.egg_version = None + self.egg_base = None + self.egg_info = None + self.tag_build = None + self.tag_date = 0 + self.broken_egg_info = False + self.vtags = None + + #################################### + # allow the 'tag_svn_revision' to be detected and + # set, supporting sdists built on older Setuptools. + @property + def tag_svn_revision(self): + pass + + @tag_svn_revision.setter + def tag_svn_revision(self, value): + pass + #################################### + + def save_version_info(self, filename): + """ + Materialize the value of date into the + build tag. Install build keys in a deterministic order + to avoid arbitrary reordering on subsequent builds. + """ + egg_info = collections.OrderedDict() + # follow the order these keys would have been added + # when PYTHONHASHSEED=0 + egg_info['tag_build'] = self.tags() + egg_info['tag_date'] = 0 + edit_config(filename, dict(egg_info=egg_info)) + + def finalize_options(self): + self.egg_name = safe_name(self.distribution.get_name()) + self.vtags = self.tags() + self.egg_version = self.tagged_version() + + parsed_version = parse_version(self.egg_version) + + try: + is_version = isinstance(parsed_version, packaging.version.Version) + spec = ( + "%s==%s" if is_version else "%s===%s" + ) + list( + parse_requirements(spec % (self.egg_name, self.egg_version)) + ) + except ValueError: + raise distutils.errors.DistutilsOptionError( + "Invalid distribution name or version syntax: %s-%s" % + (self.egg_name, self.egg_version) + ) + + if self.egg_base is None: + dirs = self.distribution.package_dir + self.egg_base = (dirs or {}).get('', os.curdir) + + self.ensure_dirname('egg_base') + self.egg_info = to_filename(self.egg_name) + '.egg-info' + if self.egg_base != os.curdir: + self.egg_info = os.path.join(self.egg_base, self.egg_info) + if '-' in self.egg_name: + self.check_broken_egg_info() + + # Set package version for the benefit of dumber commands + # (e.g. sdist, bdist_wininst, etc.) + # + self.distribution.metadata.version = self.egg_version + + # If we bootstrapped around the lack of a PKG-INFO, as might be the + # case in a fresh checkout, make sure that any special tags get added + # to the version info + # + pd = self.distribution._patched_dist + if pd is not None and pd.key == self.egg_name.lower(): + pd._version = self.egg_version + pd._parsed_version = parse_version(self.egg_version) + self.distribution._patched_dist = None + + def write_or_delete_file(self, what, filename, data, force=False): + """Write `data` to `filename` or delete if empty + + If `data` is non-empty, this routine is the same as ``write_file()``. + If `data` is empty but not ``None``, this is the same as calling + ``delete_file(filename)`. If `data` is ``None``, then this is a no-op + unless `filename` exists, in which case a warning is issued about the + orphaned file (if `force` is false), or deleted (if `force` is true). + """ + if data: + self.write_file(what, filename, data) + elif os.path.exists(filename): + if data is None and not force: + log.warn( + "%s not set in setup(), but %s exists", what, filename + ) + return + else: + self.delete_file(filename) + + def write_file(self, what, filename, data): + """Write `data` to `filename` (if not a dry run) after announcing it + + `what` is used in a log message to identify what is being written + to the file. + """ + log.info("writing %s to %s", what, filename) + if six.PY3: + data = data.encode("utf-8") + if not self.dry_run: + f = open(filename, 'wb') + f.write(data) + f.close() + + def delete_file(self, filename): + """Delete `filename` (if not a dry run) after announcing it""" + log.info("deleting %s", filename) + if not self.dry_run: + os.unlink(filename) + + def tagged_version(self): + version = self.distribution.get_version() + # egg_info may be called more than once for a distribution, + # in which case the version string already contains all tags. + if self.vtags and version.endswith(self.vtags): + return safe_version(version) + return safe_version(version + self.vtags) + + def run(self): + self.mkpath(self.egg_info) + installer = self.distribution.fetch_build_egg + for ep in iter_entry_points('egg_info.writers'): + ep.require(installer=installer) + writer = ep.resolve() + writer(self, ep.name, os.path.join(self.egg_info, ep.name)) + + # Get rid of native_libs.txt if it was put there by older bdist_egg + nl = os.path.join(self.egg_info, "native_libs.txt") + if os.path.exists(nl): + self.delete_file(nl) + + self.find_sources() + + def tags(self): + version = '' + if self.tag_build: + version += self.tag_build + if self.tag_date: + version += time.strftime("-%Y%m%d") + return version + + def find_sources(self): + """Generate SOURCES.txt manifest file""" + manifest_filename = os.path.join(self.egg_info, "SOURCES.txt") + mm = manifest_maker(self.distribution) + mm.manifest = manifest_filename + mm.run() + self.filelist = mm.filelist + + def check_broken_egg_info(self): + bei = self.egg_name + '.egg-info' + if self.egg_base != os.curdir: + bei = os.path.join(self.egg_base, bei) + if os.path.exists(bei): + log.warn( + "-" * 78 + '\n' + "Note: Your current .egg-info directory has a '-' in its name;" + '\nthis will not work correctly with "setup.py develop".\n\n' + 'Please rename %s to %s to correct this problem.\n' + '-' * 78, + bei, self.egg_info + ) + self.broken_egg_info = self.egg_info + self.egg_info = bei # make it work for now + + +class FileList(_FileList): + # Implementations of the various MANIFEST.in commands + + def process_template_line(self, line): + # Parse the line: split it up, make sure the right number of words + # is there, and return the relevant words. 'action' is always + # defined: it's the first word of the line. Which of the other + # three are defined depends on the action; it'll be either + # patterns, (dir and patterns), or (dir_pattern). + (action, patterns, dir, dir_pattern) = self._parse_template_line(line) + + # OK, now we know that the action is valid and we have the + # right number of words on the line for that action -- so we + # can proceed with minimal error-checking. + if action == 'include': + self.debug_print("include " + ' '.join(patterns)) + for pattern in patterns: + if not self.include(pattern): + log.warn("warning: no files found matching '%s'", pattern) + + elif action == 'exclude': + self.debug_print("exclude " + ' '.join(patterns)) + for pattern in patterns: + if not self.exclude(pattern): + log.warn(("warning: no previously-included files " + "found matching '%s'"), pattern) + + elif action == 'global-include': + self.debug_print("global-include " + ' '.join(patterns)) + for pattern in patterns: + if not self.global_include(pattern): + log.warn(("warning: no files found matching '%s' " + "anywhere in distribution"), pattern) + + elif action == 'global-exclude': + self.debug_print("global-exclude " + ' '.join(patterns)) + for pattern in patterns: + if not self.global_exclude(pattern): + log.warn(("warning: no previously-included files matching " + "'%s' found anywhere in distribution"), + pattern) + + elif action == 'recursive-include': + self.debug_print("recursive-include %s %s" % + (dir, ' '.join(patterns))) + for pattern in patterns: + if not self.recursive_include(dir, pattern): + log.warn(("warning: no files found matching '%s' " + "under directory '%s'"), + pattern, dir) + + elif action == 'recursive-exclude': + self.debug_print("recursive-exclude %s %s" % + (dir, ' '.join(patterns))) + for pattern in patterns: + if not self.recursive_exclude(dir, pattern): + log.warn(("warning: no previously-included files matching " + "'%s' found under directory '%s'"), + pattern, dir) + + elif action == 'graft': + self.debug_print("graft " + dir_pattern) + if not self.graft(dir_pattern): + log.warn("warning: no directories found matching '%s'", + dir_pattern) + + elif action == 'prune': + self.debug_print("prune " + dir_pattern) + if not self.prune(dir_pattern): + log.warn(("no previously-included directories found " + "matching '%s'"), dir_pattern) + + else: + raise DistutilsInternalError( + "this cannot happen: invalid action '%s'" % action) + + def _remove_files(self, predicate): + """ + Remove all files from the file list that match the predicate. + Return True if any matching files were removed + """ + found = False + for i in range(len(self.files) - 1, -1, -1): + if predicate(self.files[i]): + self.debug_print(" removing " + self.files[i]) + del self.files[i] + found = True + return found + + def include(self, pattern): + """Include files that match 'pattern'.""" + found = [f for f in glob(pattern) if not os.path.isdir(f)] + self.extend(found) + return bool(found) + + def exclude(self, pattern): + """Exclude files that match 'pattern'.""" + match = translate_pattern(pattern) + return self._remove_files(match.match) + + def recursive_include(self, dir, pattern): + """ + Include all files anywhere in 'dir/' that match the pattern. + """ + full_pattern = os.path.join(dir, '**', pattern) + found = [f for f in glob(full_pattern, recursive=True) + if not os.path.isdir(f)] + self.extend(found) + return bool(found) + + def recursive_exclude(self, dir, pattern): + """ + Exclude any file anywhere in 'dir/' that match the pattern. + """ + match = translate_pattern(os.path.join(dir, '**', pattern)) + return self._remove_files(match.match) + + def graft(self, dir): + """Include all files from 'dir/'.""" + found = [ + item + for match_dir in glob(dir) + for item in distutils.filelist.findall(match_dir) + ] + self.extend(found) + return bool(found) + + def prune(self, dir): + """Filter out files from 'dir/'.""" + match = translate_pattern(os.path.join(dir, '**')) + return self._remove_files(match.match) + + def global_include(self, pattern): + """ + Include all files anywhere in the current directory that match the + pattern. This is very inefficient on large file trees. + """ + if self.allfiles is None: + self.findall() + match = translate_pattern(os.path.join('**', pattern)) + found = [f for f in self.allfiles if match.match(f)] + self.extend(found) + return bool(found) + + def global_exclude(self, pattern): + """ + Exclude all files anywhere that match the pattern. + """ + match = translate_pattern(os.path.join('**', pattern)) + return self._remove_files(match.match) + + def append(self, item): + if item.endswith('\r'): # Fix older sdists built on Windows + item = item[:-1] + path = convert_path(item) + + if self._safe_path(path): + self.files.append(path) + + def extend(self, paths): + self.files.extend(filter(self._safe_path, paths)) + + def _repair(self): + """ + Replace self.files with only safe paths + + Because some owners of FileList manipulate the underlying + ``files`` attribute directly, this method must be called to + repair those paths. + """ + self.files = list(filter(self._safe_path, self.files)) + + def _safe_path(self, path): + enc_warn = "'%s' not %s encodable -- skipping" + + # To avoid accidental trans-codings errors, first to unicode + u_path = unicode_utils.filesys_decode(path) + if u_path is None: + log.warn("'%s' in unexpected encoding -- skipping" % path) + return False + + # Must ensure utf-8 encodability + utf8_path = unicode_utils.try_encode(u_path, "utf-8") + if utf8_path is None: + log.warn(enc_warn, path, 'utf-8') + return False + + try: + # accept is either way checks out + if os.path.exists(u_path) or os.path.exists(utf8_path): + return True + # this will catch any encode errors decoding u_path + except UnicodeEncodeError: + log.warn(enc_warn, path, sys.getfilesystemencoding()) + + +class manifest_maker(sdist): + template = "MANIFEST.in" + + def initialize_options(self): + self.use_defaults = 1 + self.prune = 1 + self.manifest_only = 1 + self.force_manifest = 1 + + def finalize_options(self): + pass + + def run(self): + self.filelist = FileList() + if not os.path.exists(self.manifest): + self.write_manifest() # it must exist so it'll get in the list + self.add_defaults() + if os.path.exists(self.template): + self.read_template() + self.prune_file_list() + self.filelist.sort() + self.filelist.remove_duplicates() + self.write_manifest() + + def _manifest_normalize(self, path): + path = unicode_utils.filesys_decode(path) + return path.replace(os.sep, '/') + + def write_manifest(self): + """ + Write the file list in 'self.filelist' to the manifest file + named by 'self.manifest'. + """ + self.filelist._repair() + + # Now _repairs should encodability, but not unicode + files = [self._manifest_normalize(f) for f in self.filelist.files] + msg = "writing manifest file '%s'" % self.manifest + self.execute(write_file, (self.manifest, files), msg) + + def warn(self, msg): + if not self._should_suppress_warning(msg): + sdist.warn(self, msg) + + @staticmethod + def _should_suppress_warning(msg): + """ + suppress missing-file warnings from sdist + """ + return re.match(r"standard file .*not found", msg) + + def add_defaults(self): + sdist.add_defaults(self) + self.filelist.append(self.template) + self.filelist.append(self.manifest) + rcfiles = list(walk_revctrl()) + if rcfiles: + self.filelist.extend(rcfiles) + elif os.path.exists(self.manifest): + self.read_manifest() + ei_cmd = self.get_finalized_command('egg_info') + self.filelist.graft(ei_cmd.egg_info) + + def prune_file_list(self): + build = self.get_finalized_command('build') + base_dir = self.distribution.get_fullname() + self.filelist.prune(build.build_base) + self.filelist.prune(base_dir) + sep = re.escape(os.sep) + self.filelist.exclude_pattern(r'(^|' + sep + r')(RCS|CVS|\.svn)' + sep, + is_regex=1) + + +def write_file(filename, contents): + """Create a file with the specified name and write 'contents' (a + sequence of strings without line terminators) to it. + """ + contents = "\n".join(contents) + + # assuming the contents has been vetted for utf-8 encoding + contents = contents.encode("utf-8") + + with open(filename, "wb") as f: # always write POSIX-style manifest + f.write(contents) + + +def write_pkg_info(cmd, basename, filename): + log.info("writing %s", filename) + if not cmd.dry_run: + metadata = cmd.distribution.metadata + metadata.version, oldver = cmd.egg_version, metadata.version + metadata.name, oldname = cmd.egg_name, metadata.name + + try: + # write unescaped data to PKG-INFO, so older pkg_resources + # can still parse it + metadata.write_pkg_info(cmd.egg_info) + finally: + metadata.name, metadata.version = oldname, oldver + + safe = getattr(cmd.distribution, 'zip_safe', None) + + bdist_egg.write_safety_flag(cmd.egg_info, safe) + + +def warn_depends_obsolete(cmd, basename, filename): + if os.path.exists(filename): + log.warn( + "WARNING: 'depends.txt' is not used by setuptools 0.6!\n" + "Use the install_requires/extras_require setup() args instead." + ) + + +def _write_requirements(stream, reqs): + lines = yield_lines(reqs or ()) + append_cr = lambda line: line + '\n' + lines = map(append_cr, sorted(lines)) + stream.writelines(lines) + + +def write_requirements(cmd, basename, filename): + dist = cmd.distribution + data = six.StringIO() + _write_requirements(data, dist.install_requires) + extras_require = dist.extras_require or {} + for extra in sorted(extras_require): + data.write('\n[{extra}]\n'.format(**vars())) + _write_requirements(data, extras_require[extra]) + cmd.write_or_delete_file("requirements", filename, data.getvalue()) + + +def write_setup_requirements(cmd, basename, filename): + data = io.StringIO() + _write_requirements(data, cmd.distribution.setup_requires) + cmd.write_or_delete_file("setup-requirements", filename, data.getvalue()) + + +def write_toplevel_names(cmd, basename, filename): + pkgs = dict.fromkeys( + [ + k.split('.', 1)[0] + for k in cmd.distribution.iter_distribution_names() + ] + ) + cmd.write_file("top-level names", filename, '\n'.join(sorted(pkgs)) + '\n') + + +def overwrite_arg(cmd, basename, filename): + write_arg(cmd, basename, filename, True) + + +def write_arg(cmd, basename, filename, force=False): + argname = os.path.splitext(basename)[0] + value = getattr(cmd.distribution, argname, None) + if value is not None: + value = '\n'.join(value) + '\n' + cmd.write_or_delete_file(argname, filename, value, force) + + +def write_entries(cmd, basename, filename): + ep = cmd.distribution.entry_points + + if isinstance(ep, six.string_types) or ep is None: + data = ep + elif ep is not None: + data = [] + for section, contents in sorted(ep.items()): + if not isinstance(contents, six.string_types): + contents = EntryPoint.parse_group(section, contents) + contents = '\n'.join(sorted(map(str, contents.values()))) + data.append('[%s]\n%s\n\n' % (section, contents)) + data = ''.join(data) + + cmd.write_or_delete_file('entry points', filename, data, True) + + +def get_pkg_info_revision(): + """ + Get a -r### off of PKG-INFO Version in case this is an sdist of + a subversion revision. + """ + warnings.warn("get_pkg_info_revision is deprecated.", DeprecationWarning) + if os.path.exists('PKG-INFO'): + with io.open('PKG-INFO') as f: + for line in f: + match = re.match(r"Version:.*-r(\d+)\s*$", line) + if match: + return int(match.group(1)) + return 0 diff --git a/week-0/day-3/my_todo_app/venvironment/lib/python3.6/site-packages/setuptools/command/install.py b/week-0/day-3/my_todo_app/venvironment/lib/python3.6/site-packages/setuptools/command/install.py new file mode 100644 index 00000000..31a5ddb5 --- /dev/null +++ b/week-0/day-3/my_todo_app/venvironment/lib/python3.6/site-packages/setuptools/command/install.py @@ -0,0 +1,125 @@ +from distutils.errors import DistutilsArgError +import inspect +import glob +import warnings +import platform +import distutils.command.install as orig + +import setuptools + +# Prior to numpy 1.9, NumPy relies on the '_install' name, so provide it for +# now. See https://github.com/pypa/setuptools/issues/199/ +_install = orig.install + + +class install(orig.install): + """Use easy_install to install the package, w/dependencies""" + + user_options = orig.install.user_options + [ + ('old-and-unmanageable', None, "Try not to use this!"), + ('single-version-externally-managed', None, + "used by system package builders to create 'flat' eggs"), + ] + boolean_options = orig.install.boolean_options + [ + 'old-and-unmanageable', 'single-version-externally-managed', + ] + new_commands = [ + ('install_egg_info', lambda self: True), + ('install_scripts', lambda self: True), + ] + _nc = dict(new_commands) + + def initialize_options(self): + orig.install.initialize_options(self) + self.old_and_unmanageable = None + self.single_version_externally_managed = None + + def finalize_options(self): + orig.install.finalize_options(self) + if self.root: + self.single_version_externally_managed = True + elif self.single_version_externally_managed: + if not self.root and not self.record: + raise DistutilsArgError( + "You must specify --record or --root when building system" + " packages" + ) + + def handle_extra_path(self): + if self.root or self.single_version_externally_managed: + # explicit backward-compatibility mode, allow extra_path to work + return orig.install.handle_extra_path(self) + + # Ignore extra_path when installing an egg (or being run by another + # command without --root or --single-version-externally-managed + self.path_file = None + self.extra_dirs = '' + + def run(self): + # Explicit request for old-style install? Just do it + if self.old_and_unmanageable or self.single_version_externally_managed: + return orig.install.run(self) + + if not self._called_from_setup(inspect.currentframe()): + # Run in backward-compatibility mode to support bdist_* commands. + orig.install.run(self) + else: + self.do_egg_install() + + @staticmethod + def _called_from_setup(run_frame): + """ + Attempt to detect whether run() was called from setup() or by another + command. If called by setup(), the parent caller will be the + 'run_command' method in 'distutils.dist', and *its* caller will be + the 'run_commands' method. If called any other way, the + immediate caller *might* be 'run_command', but it won't have been + called by 'run_commands'. Return True in that case or if a call stack + is unavailable. Return False otherwise. + """ + if run_frame is None: + msg = "Call stack not available. bdist_* commands may fail." + warnings.warn(msg) + if platform.python_implementation() == 'IronPython': + msg = "For best results, pass -X:Frames to enable call stack." + warnings.warn(msg) + return True + res = inspect.getouterframes(run_frame)[2] + caller, = res[:1] + info = inspect.getframeinfo(caller) + caller_module = caller.f_globals.get('__name__', '') + return ( + caller_module == 'distutils.dist' + and info.function == 'run_commands' + ) + + def do_egg_install(self): + + easy_install = self.distribution.get_command_class('easy_install') + + cmd = easy_install( + self.distribution, args="x", root=self.root, record=self.record, + ) + cmd.ensure_finalized() # finalize before bdist_egg munges install cmd + cmd.always_copy_from = '.' # make sure local-dir eggs get installed + + # pick up setup-dir .egg files only: no .egg-info + cmd.package_index.scan(glob.glob('*.egg')) + + self.run_command('bdist_egg') + args = [self.distribution.get_command_obj('bdist_egg').egg_output] + + if setuptools.bootstrap_install_from: + # Bootstrap self-installation of setuptools + args.insert(0, setuptools.bootstrap_install_from) + + cmd.args = args + cmd.run() + setuptools.bootstrap_install_from = None + + +# XXX Python 3.1 doesn't see _nc if this is inside the class +install.sub_commands = ( + [cmd for cmd in orig.install.sub_commands if cmd[0] not in install._nc] + + install.new_commands +) diff --git a/week-0/day-3/my_todo_app/venvironment/lib/python3.6/site-packages/setuptools/command/install_egg_info.py b/week-0/day-3/my_todo_app/venvironment/lib/python3.6/site-packages/setuptools/command/install_egg_info.py new file mode 100644 index 00000000..5f405bca --- /dev/null +++ b/week-0/day-3/my_todo_app/venvironment/lib/python3.6/site-packages/setuptools/command/install_egg_info.py @@ -0,0 +1,82 @@ +from distutils import log, dir_util +import os, sys + +from setuptools import Command +from setuptools import namespaces +from setuptools.archive_util import unpack_archive +import pkg_resources + + +class install_egg_info(namespaces.Installer, Command): + """Install an .egg-info directory for the package""" + + description = "Install an .egg-info directory for the package" + + user_options = [ + ('install-dir=', 'd', "directory to install to"), + ] + + def initialize_options(self): + self.install_dir = None + self.install_layout = None + self.prefix_option = None + + def finalize_options(self): + self.set_undefined_options('install_lib', + ('install_dir', 'install_dir')) + self.set_undefined_options('install',('install_layout','install_layout')) + if sys.hexversion > 0x2060000: + self.set_undefined_options('install',('prefix_option','prefix_option')) + ei_cmd = self.get_finalized_command("egg_info") + basename = pkg_resources.Distribution( + None, None, ei_cmd.egg_name, ei_cmd.egg_version + ).egg_name() + '.egg-info' + + if self.install_layout: + if not self.install_layout.lower() in ['deb']: + raise DistutilsOptionError("unknown value for --install-layout") + self.install_layout = self.install_layout.lower() + basename = basename.replace('-py%s' % pkg_resources.PY_MAJOR, '') + elif self.prefix_option or 'real_prefix' in sys.__dict__: + # don't modify for virtualenv + pass + else: + basename = basename.replace('-py%s' % pkg_resources.PY_MAJOR, '') + + self.source = ei_cmd.egg_info + self.target = os.path.join(self.install_dir, basename) + self.outputs = [] + + def run(self): + self.run_command('egg_info') + if os.path.isdir(self.target) and not os.path.islink(self.target): + dir_util.remove_tree(self.target, dry_run=self.dry_run) + elif os.path.exists(self.target): + self.execute(os.unlink, (self.target,), "Removing " + self.target) + if not self.dry_run: + pkg_resources.ensure_directory(self.target) + self.execute( + self.copytree, (), "Copying %s to %s" % (self.source, self.target) + ) + self.install_namespaces() + + def get_outputs(self): + return self.outputs + + def copytree(self): + # Copy the .egg-info tree to site-packages + def skimmer(src, dst): + # filter out source-control directories; note that 'src' is always + # a '/'-separated path, regardless of platform. 'dst' is a + # platform-specific path. + for skip in '.svn/', 'CVS/': + if src.startswith(skip) or '/' + skip in src: + return None + if self.install_layout and self.install_layout in ['deb'] and src.startswith('SOURCES.txt'): + log.info("Skipping SOURCES.txt") + return None + self.outputs.append(dst) + log.debug("Copying %s to %s", src, dst) + return dst + + unpack_archive(self.source, self.target, skimmer) diff --git a/week-0/day-3/my_todo_app/venvironment/lib/python3.6/site-packages/setuptools/command/install_lib.py b/week-0/day-3/my_todo_app/venvironment/lib/python3.6/site-packages/setuptools/command/install_lib.py new file mode 100644 index 00000000..578e002d --- /dev/null +++ b/week-0/day-3/my_todo_app/venvironment/lib/python3.6/site-packages/setuptools/command/install_lib.py @@ -0,0 +1,148 @@ +import os +import sys +import imp +from itertools import product, starmap +import distutils.command.install_lib as orig + + +class install_lib(orig.install_lib): + """Don't add compiled flags to filenames of non-Python files""" + + def initialize_options(self): + orig.install_lib.initialize_options(self) + self.multiarch = None + self.install_layout = None + + def finalize_options(self): + orig.install_lib.finalize_options(self) + self.set_undefined_options('install',('install_layout','install_layout')) + if self.install_layout == 'deb' and sys.version_info[:2] >= (3, 3): + import sysconfig + self.multiarch = sysconfig.get_config_var('MULTIARCH') + + def run(self): + self.build() + outfiles = self.install() + if outfiles is not None: + # always compile, in case we have any extension stubs to deal with + self.byte_compile(outfiles) + + def get_exclusions(self): + """ + Return a collections.Sized collections.Container of paths to be + excluded for single_version_externally_managed installations. + """ + all_packages = ( + pkg + for ns_pkg in self._get_SVEM_NSPs() + for pkg in self._all_packages(ns_pkg) + ) + + excl_specs = product(all_packages, self._gen_exclusion_paths()) + return set(starmap(self._exclude_pkg_path, excl_specs)) + + def _exclude_pkg_path(self, pkg, exclusion_path): + """ + Given a package name and exclusion path within that package, + compute the full exclusion path. + """ + parts = pkg.split('.') + [exclusion_path] + return os.path.join(self.install_dir, *parts) + + @staticmethod + def _all_packages(pkg_name): + """ + >>> list(install_lib._all_packages('foo.bar.baz')) + ['foo.bar.baz', 'foo.bar', 'foo'] + """ + while pkg_name: + yield pkg_name + pkg_name, sep, child = pkg_name.rpartition('.') + + def _get_SVEM_NSPs(self): + """ + Get namespace packages (list) but only for + single_version_externally_managed installations and empty otherwise. + """ + # TODO: is it necessary to short-circuit here? i.e. what's the cost + # if get_finalized_command is called even when namespace_packages is + # False? + if not self.distribution.namespace_packages: + return [] + + install_cmd = self.get_finalized_command('install') + svem = install_cmd.single_version_externally_managed + + return self.distribution.namespace_packages if svem else [] + + @staticmethod + def _gen_exclusion_paths(): + """ + Generate file paths to be excluded for namespace packages (bytecode + cache files). + """ + # always exclude the package module itself + yield '__init__.py' + + yield '__init__.pyc' + yield '__init__.pyo' + + if not hasattr(imp, 'get_tag'): + return + + base = os.path.join('__pycache__', '__init__.' + imp.get_tag()) + yield base + '.pyc' + yield base + '.pyo' + yield base + '.opt-1.pyc' + yield base + '.opt-2.pyc' + + def copy_tree( + self, infile, outfile, + preserve_mode=1, preserve_times=1, preserve_symlinks=0, level=1 + ): + assert preserve_mode and preserve_times and not preserve_symlinks + exclude = self.get_exclusions() + + if not exclude: + import distutils.dir_util + distutils.dir_util._multiarch = self.multiarch + return orig.install_lib.copy_tree(self, infile, outfile) + + # Exclude namespace package __init__.py* files from the output + + from setuptools.archive_util import unpack_directory + from distutils import log + + outfiles = [] + + if self.multiarch: + import sysconfig + ext_suffix = sysconfig.get_config_var ('EXT_SUFFIX') + if ext_suffix.endswith(self.multiarch + ext_suffix[-3:]): + new_suffix = None + else: + new_suffix = "%s-%s%s" % (ext_suffix[:-3], self.multiarch, ext_suffix[-3:]) + + def pf(src, dst): + if dst in exclude: + log.warn("Skipping installation of %s (namespace package)", + dst) + return False + + if self.multiarch and new_suffix and dst.endswith(ext_suffix) and not dst.endswith(new_suffix): + dst = dst.replace(ext_suffix, new_suffix) + log.info("renaming extension to %s", os.path.basename(dst)) + + log.info("copying %s -> %s", src, os.path.dirname(dst)) + outfiles.append(dst) + return dst + + unpack_directory(infile, outfile, pf) + return outfiles + + def get_outputs(self): + outputs = orig.install_lib.get_outputs(self) + exclude = self.get_exclusions() + if exclude: + return [f for f in outputs if f not in exclude] + return outputs diff --git a/week-0/day-3/my_todo_app/venvironment/lib/python3.6/site-packages/setuptools/command/install_scripts.py b/week-0/day-3/my_todo_app/venvironment/lib/python3.6/site-packages/setuptools/command/install_scripts.py new file mode 100644 index 00000000..16234273 --- /dev/null +++ b/week-0/day-3/my_todo_app/venvironment/lib/python3.6/site-packages/setuptools/command/install_scripts.py @@ -0,0 +1,65 @@ +from distutils import log +import distutils.command.install_scripts as orig +import os +import sys + +from pkg_resources import Distribution, PathMetadata, ensure_directory + + +class install_scripts(orig.install_scripts): + """Do normal script install, plus any egg_info wrapper scripts""" + + def initialize_options(self): + orig.install_scripts.initialize_options(self) + self.no_ep = False + + def run(self): + import setuptools.command.easy_install as ei + + self.run_command("egg_info") + if self.distribution.scripts: + orig.install_scripts.run(self) # run first to set up self.outfiles + else: + self.outfiles = [] + if self.no_ep: + # don't install entry point scripts into .egg file! + return + + ei_cmd = self.get_finalized_command("egg_info") + dist = Distribution( + ei_cmd.egg_base, PathMetadata(ei_cmd.egg_base, ei_cmd.egg_info), + ei_cmd.egg_name, ei_cmd.egg_version, + ) + bs_cmd = self.get_finalized_command('build_scripts') + exec_param = getattr(bs_cmd, 'executable', None) + bw_cmd = self.get_finalized_command("bdist_wininst") + is_wininst = getattr(bw_cmd, '_is_running', False) + writer = ei.ScriptWriter + if is_wininst: + exec_param = "python.exe" + writer = ei.WindowsScriptWriter + if exec_param == sys.executable: + # In case the path to the Python executable contains a space, wrap + # it so it's not split up. + exec_param = [exec_param] + # resolve the writer to the environment + writer = writer.best() + cmd = writer.command_spec_class.best().from_param(exec_param) + for args in writer.get_args(dist, cmd.as_header()): + self.write_script(*args) + + def write_script(self, script_name, contents, mode="t", *ignored): + """Write an executable file to the scripts directory""" + from setuptools.command.easy_install import chmod, current_umask + + log.info("Installing %s script to %s", script_name, self.install_dir) + target = os.path.join(self.install_dir, script_name) + self.outfiles.append(target) + + mask = current_umask() + if not self.dry_run: + ensure_directory(target) + f = open(target, "w" + mode) + f.write(contents) + f.close() + chmod(target, 0o777 - mask) diff --git a/week-0/day-3/my_todo_app/venvironment/lib/python3.6/site-packages/setuptools/command/launcher manifest.xml b/week-0/day-3/my_todo_app/venvironment/lib/python3.6/site-packages/setuptools/command/launcher manifest.xml new file mode 100644 index 00000000..5972a96d --- /dev/null +++ b/week-0/day-3/my_todo_app/venvironment/lib/python3.6/site-packages/setuptools/command/launcher manifest.xml @@ -0,0 +1,15 @@ +<?xml version="1.0" encoding="UTF-8" standalone="yes"?> +<assembly xmlns="urn:schemas-microsoft-com:asm.v1" manifestVersion="1.0"> + <assemblyIdentity version="1.0.0.0" + processorArchitecture="X86" + name="%(name)s" + type="win32"/> + <!-- Identify the application security requirements. --> + <trustInfo xmlns="urn:schemas-microsoft-com:asm.v3"> + <security> + <requestedPrivileges> + <requestedExecutionLevel level="asInvoker" uiAccess="false"/> + </requestedPrivileges> + </security> + </trustInfo> +</assembly> diff --git a/week-0/day-3/my_todo_app/venvironment/lib/python3.6/site-packages/setuptools/command/py36compat.py b/week-0/day-3/my_todo_app/venvironment/lib/python3.6/site-packages/setuptools/command/py36compat.py new file mode 100644 index 00000000..61063e75 --- /dev/null +++ b/week-0/day-3/my_todo_app/venvironment/lib/python3.6/site-packages/setuptools/command/py36compat.py @@ -0,0 +1,136 @@ +import os +from glob import glob +from distutils.util import convert_path +from distutils.command import sdist + +from setuptools.extern.six.moves import filter + + +class sdist_add_defaults: + """ + Mix-in providing forward-compatibility for functionality as found in + distutils on Python 3.7. + + Do not edit the code in this class except to update functionality + as implemented in distutils. Instead, override in the subclass. + """ + + def add_defaults(self): + """Add all the default files to self.filelist: + - README or README.txt + - setup.py + - test/test*.py + - all pure Python modules mentioned in setup script + - all files pointed by package_data (build_py) + - all files defined in data_files. + - all files defined as scripts. + - all C sources listed as part of extensions or C libraries + in the setup script (doesn't catch C headers!) + Warns if (README or README.txt) or setup.py are missing; everything + else is optional. + """ + self._add_defaults_standards() + self._add_defaults_optional() + self._add_defaults_python() + self._add_defaults_data_files() + self._add_defaults_ext() + self._add_defaults_c_libs() + self._add_defaults_scripts() + + @staticmethod + def _cs_path_exists(fspath): + """ + Case-sensitive path existence check + + >>> sdist_add_defaults._cs_path_exists(__file__) + True + >>> sdist_add_defaults._cs_path_exists(__file__.upper()) + False + """ + if not os.path.exists(fspath): + return False + # make absolute so we always have a directory + abspath = os.path.abspath(fspath) + directory, filename = os.path.split(abspath) + return filename in os.listdir(directory) + + def _add_defaults_standards(self): + standards = [self.READMES, self.distribution.script_name] + for fn in standards: + if isinstance(fn, tuple): + alts = fn + got_it = False + for fn in alts: + if self._cs_path_exists(fn): + got_it = True + self.filelist.append(fn) + break + + if not got_it: + self.warn("standard file not found: should have one of " + + ', '.join(alts)) + else: + if self._cs_path_exists(fn): + self.filelist.append(fn) + else: + self.warn("standard file '%s' not found" % fn) + + def _add_defaults_optional(self): + optional = ['test/test*.py', 'setup.cfg'] + for pattern in optional: + files = filter(os.path.isfile, glob(pattern)) + self.filelist.extend(files) + + def _add_defaults_python(self): + # build_py is used to get: + # - python modules + # - files defined in package_data + build_py = self.get_finalized_command('build_py') + + # getting python files + if self.distribution.has_pure_modules(): + self.filelist.extend(build_py.get_source_files()) + + # getting package_data files + # (computed in build_py.data_files by build_py.finalize_options) + for pkg, src_dir, build_dir, filenames in build_py.data_files: + for filename in filenames: + self.filelist.append(os.path.join(src_dir, filename)) + + def _add_defaults_data_files(self): + # getting distribution.data_files + if self.distribution.has_data_files(): + for item in self.distribution.data_files: + if isinstance(item, str): + # plain file + item = convert_path(item) + if os.path.isfile(item): + self.filelist.append(item) + else: + # a (dirname, filenames) tuple + dirname, filenames = item + for f in filenames: + f = convert_path(f) + if os.path.isfile(f): + self.filelist.append(f) + + def _add_defaults_ext(self): + if self.distribution.has_ext_modules(): + build_ext = self.get_finalized_command('build_ext') + self.filelist.extend(build_ext.get_source_files()) + + def _add_defaults_c_libs(self): + if self.distribution.has_c_libraries(): + build_clib = self.get_finalized_command('build_clib') + self.filelist.extend(build_clib.get_source_files()) + + def _add_defaults_scripts(self): + if self.distribution.has_scripts(): + build_scripts = self.get_finalized_command('build_scripts') + self.filelist.extend(build_scripts.get_source_files()) + + +if hasattr(sdist.sdist, '_add_defaults_standards'): + # disable the functionality already available upstream + class sdist_add_defaults: + pass diff --git a/week-0/day-3/my_todo_app/venvironment/lib/python3.6/site-packages/setuptools/command/register.py b/week-0/day-3/my_todo_app/venvironment/lib/python3.6/site-packages/setuptools/command/register.py new file mode 100644 index 00000000..8d6336a1 --- /dev/null +++ b/week-0/day-3/my_todo_app/venvironment/lib/python3.6/site-packages/setuptools/command/register.py @@ -0,0 +1,10 @@ +import distutils.command.register as orig + + +class register(orig.register): + __doc__ = orig.register.__doc__ + + def run(self): + # Make sure that we are using valid current name/version info + self.run_command('egg_info') + orig.register.run(self) diff --git a/week-0/day-3/my_todo_app/venvironment/lib/python3.6/site-packages/setuptools/command/rotate.py b/week-0/day-3/my_todo_app/venvironment/lib/python3.6/site-packages/setuptools/command/rotate.py new file mode 100644 index 00000000..b89353f5 --- /dev/null +++ b/week-0/day-3/my_todo_app/venvironment/lib/python3.6/site-packages/setuptools/command/rotate.py @@ -0,0 +1,66 @@ +from distutils.util import convert_path +from distutils import log +from distutils.errors import DistutilsOptionError +import os +import shutil + +from setuptools.extern import six + +from setuptools import Command + + +class rotate(Command): + """Delete older distributions""" + + description = "delete older distributions, keeping N newest files" + user_options = [ + ('match=', 'm', "patterns to match (required)"), + ('dist-dir=', 'd', "directory where the distributions are"), + ('keep=', 'k', "number of matching distributions to keep"), + ] + + boolean_options = [] + + def initialize_options(self): + self.match = None + self.dist_dir = None + self.keep = None + + def finalize_options(self): + if self.match is None: + raise DistutilsOptionError( + "Must specify one or more (comma-separated) match patterns " + "(e.g. '.zip' or '.egg')" + ) + if self.keep is None: + raise DistutilsOptionError("Must specify number of files to keep") + try: + self.keep = int(self.keep) + except ValueError: + raise DistutilsOptionError("--keep must be an integer") + if isinstance(self.match, six.string_types): + self.match = [ + convert_path(p.strip()) for p in self.match.split(',') + ] + self.set_undefined_options('bdist', ('dist_dir', 'dist_dir')) + + def run(self): + self.run_command("egg_info") + from glob import glob + + for pattern in self.match: + pattern = self.distribution.get_name() + '*' + pattern + files = glob(os.path.join(self.dist_dir, pattern)) + files = [(os.path.getmtime(f), f) for f in files] + files.sort() + files.reverse() + + log.info("%d file(s) matching %s", len(files), pattern) + files = files[self.keep:] + for (t, f) in files: + log.info("Deleting %s", f) + if not self.dry_run: + if os.path.isdir(f): + shutil.rmtree(f) + else: + os.unlink(f) diff --git a/week-0/day-3/my_todo_app/venvironment/lib/python3.6/site-packages/setuptools/command/saveopts.py b/week-0/day-3/my_todo_app/venvironment/lib/python3.6/site-packages/setuptools/command/saveopts.py new file mode 100644 index 00000000..611cec55 --- /dev/null +++ b/week-0/day-3/my_todo_app/venvironment/lib/python3.6/site-packages/setuptools/command/saveopts.py @@ -0,0 +1,22 @@ +from setuptools.command.setopt import edit_config, option_base + + +class saveopts(option_base): + """Save command-line options to a file""" + + description = "save supplied options to setup.cfg or other config file" + + def run(self): + dist = self.distribution + settings = {} + + for cmd in dist.command_options: + + if cmd == 'saveopts': + continue # don't save our own options! + + for opt, (src, val) in dist.get_option_dict(cmd).items(): + if src == "command line": + settings.setdefault(cmd, {})[opt] = val + + edit_config(self.filename, settings, self.dry_run) diff --git a/week-0/day-3/my_todo_app/venvironment/lib/python3.6/site-packages/setuptools/command/sdist.py b/week-0/day-3/my_todo_app/venvironment/lib/python3.6/site-packages/setuptools/command/sdist.py new file mode 100644 index 00000000..bcfae4d8 --- /dev/null +++ b/week-0/day-3/my_todo_app/venvironment/lib/python3.6/site-packages/setuptools/command/sdist.py @@ -0,0 +1,200 @@ +from distutils import log +import distutils.command.sdist as orig +import os +import sys +import io +import contextlib + +from setuptools.extern import six + +from .py36compat import sdist_add_defaults + +import pkg_resources + +_default_revctrl = list + + +def walk_revctrl(dirname=''): + """Find all files under revision control""" + for ep in pkg_resources.iter_entry_points('setuptools.file_finders'): + for item in ep.load()(dirname): + yield item + + +class sdist(sdist_add_defaults, orig.sdist): + """Smart sdist that finds anything supported by revision control""" + + user_options = [ + ('formats=', None, + "formats for source distribution (comma-separated list)"), + ('keep-temp', 'k', + "keep the distribution tree around after creating " + + "archive file(s)"), + ('dist-dir=', 'd', + "directory to put the source distribution archive(s) in " + "[default: dist]"), + ] + + negative_opt = {} + + README_EXTENSIONS = ['', '.rst', '.txt', '.md'] + READMES = tuple('README{0}'.format(ext) for ext in README_EXTENSIONS) + + def run(self): + self.run_command('egg_info') + ei_cmd = self.get_finalized_command('egg_info') + self.filelist = ei_cmd.filelist + self.filelist.append(os.path.join(ei_cmd.egg_info, 'SOURCES.txt')) + self.check_readme() + + # Run sub commands + for cmd_name in self.get_sub_commands(): + self.run_command(cmd_name) + + self.make_distribution() + + dist_files = getattr(self.distribution, 'dist_files', []) + for file in self.archive_files: + data = ('sdist', '', file) + if data not in dist_files: + dist_files.append(data) + + def initialize_options(self): + orig.sdist.initialize_options(self) + + self._default_to_gztar() + + def _default_to_gztar(self): + # only needed on Python prior to 3.6. + if sys.version_info >= (3, 6, 0, 'beta', 1): + return + self.formats = ['gztar'] + + def make_distribution(self): + """ + Workaround for #516 + """ + with self._remove_os_link(): + orig.sdist.make_distribution(self) + + @staticmethod + @contextlib.contextmanager + def _remove_os_link(): + """ + In a context, remove and restore os.link if it exists + """ + + class NoValue: + pass + + orig_val = getattr(os, 'link', NoValue) + try: + del os.link + except Exception: + pass + try: + yield + finally: + if orig_val is not NoValue: + setattr(os, 'link', orig_val) + + def __read_template_hack(self): + # This grody hack closes the template file (MANIFEST.in) if an + # exception occurs during read_template. + # Doing so prevents an error when easy_install attempts to delete the + # file. + try: + orig.sdist.read_template(self) + except Exception: + _, _, tb = sys.exc_info() + tb.tb_next.tb_frame.f_locals['template'].close() + raise + + # Beginning with Python 2.7.2, 3.1.4, and 3.2.1, this leaky file handle + # has been fixed, so only override the method if we're using an earlier + # Python. + has_leaky_handle = ( + sys.version_info < (2, 7, 2) + or (3, 0) <= sys.version_info < (3, 1, 4) + or (3, 2) <= sys.version_info < (3, 2, 1) + ) + if has_leaky_handle: + read_template = __read_template_hack + + def _add_defaults_python(self): + """getting python files""" + if self.distribution.has_pure_modules(): + build_py = self.get_finalized_command('build_py') + self.filelist.extend(build_py.get_source_files()) + # This functionality is incompatible with include_package_data, and + # will in fact create an infinite recursion if include_package_data + # is True. Use of include_package_data will imply that + # distutils-style automatic handling of package_data is disabled + if not self.distribution.include_package_data: + for _, src_dir, _, filenames in build_py.data_files: + self.filelist.extend([os.path.join(src_dir, filename) + for filename in filenames]) + + def _add_defaults_data_files(self): + try: + if six.PY2: + sdist_add_defaults._add_defaults_data_files(self) + else: + super()._add_defaults_data_files() + except TypeError: + log.warn("data_files contains unexpected objects") + + def check_readme(self): + for f in self.READMES: + if os.path.exists(f): + return + else: + self.warn( + "standard file not found: should have one of " + + ', '.join(self.READMES) + ) + + def make_release_tree(self, base_dir, files): + orig.sdist.make_release_tree(self, base_dir, files) + + # Save any egg_info command line options used to create this sdist + dest = os.path.join(base_dir, 'setup.cfg') + if hasattr(os, 'link') and os.path.exists(dest): + # unlink and re-copy, since it might be hard-linked, and + # we don't want to change the source version + os.unlink(dest) + self.copy_file('setup.cfg', dest) + + self.get_finalized_command('egg_info').save_version_info(dest) + + def _manifest_is_not_generated(self): + # check for special comment used in 2.7.1 and higher + if not os.path.isfile(self.manifest): + return False + + with io.open(self.manifest, 'rb') as fp: + first_line = fp.readline() + return (first_line != + '# file GENERATED by distutils, do NOT edit\n'.encode()) + + def read_manifest(self): + """Read the manifest file (named by 'self.manifest') and use it to + fill in 'self.filelist', the list of files to include in the source + distribution. + """ + log.info("reading manifest file '%s'", self.manifest) + manifest = open(self.manifest, 'rb') + for line in manifest: + # The manifest must contain UTF-8. See #303. + if six.PY3: + try: + line = line.decode('UTF-8') + except UnicodeDecodeError: + log.warn("%r not UTF-8 decodable -- skipping" % line) + continue + # ignore comments and blank lines + line = line.strip() + if line.startswith('#') or not line: + continue + self.filelist.append(line) + manifest.close() diff --git a/week-0/day-3/my_todo_app/venvironment/lib/python3.6/site-packages/setuptools/command/setopt.py b/week-0/day-3/my_todo_app/venvironment/lib/python3.6/site-packages/setuptools/command/setopt.py new file mode 100644 index 00000000..7e57cc02 --- /dev/null +++ b/week-0/day-3/my_todo_app/venvironment/lib/python3.6/site-packages/setuptools/command/setopt.py @@ -0,0 +1,149 @@ +from distutils.util import convert_path +from distutils import log +from distutils.errors import DistutilsOptionError +import distutils +import os + +from setuptools.extern.six.moves import configparser + +from setuptools import Command + +__all__ = ['config_file', 'edit_config', 'option_base', 'setopt'] + + +def config_file(kind="local"): + """Get the filename of the distutils, local, global, or per-user config + + `kind` must be one of "local", "global", or "user" + """ + if kind == 'local': + return 'setup.cfg' + if kind == 'global': + return os.path.join( + os.path.dirname(distutils.__file__), 'distutils.cfg' + ) + if kind == 'user': + dot = os.name == 'posix' and '.' or '' + return os.path.expanduser(convert_path("~/%spydistutils.cfg" % dot)) + raise ValueError( + "config_file() type must be 'local', 'global', or 'user'", kind + ) + + +def edit_config(filename, settings, dry_run=False): + """Edit a configuration file to include `settings` + + `settings` is a dictionary of dictionaries or ``None`` values, keyed by + command/section name. A ``None`` value means to delete the entire section, + while a dictionary lists settings to be changed or deleted in that section. + A setting of ``None`` means to delete that setting. + """ + log.debug("Reading configuration from %s", filename) + opts = configparser.RawConfigParser() + opts.read([filename]) + for section, options in settings.items(): + if options is None: + log.info("Deleting section [%s] from %s", section, filename) + opts.remove_section(section) + else: + if not opts.has_section(section): + log.debug("Adding new section [%s] to %s", section, filename) + opts.add_section(section) + for option, value in options.items(): + if value is None: + log.debug( + "Deleting %s.%s from %s", + section, option, filename + ) + opts.remove_option(section, option) + if not opts.options(section): + log.info("Deleting empty [%s] section from %s", + section, filename) + opts.remove_section(section) + else: + log.debug( + "Setting %s.%s to %r in %s", + section, option, value, filename + ) + opts.set(section, option, value) + + log.info("Writing %s", filename) + if not dry_run: + with open(filename, 'w') as f: + opts.write(f) + + +class option_base(Command): + """Abstract base class for commands that mess with config files""" + + user_options = [ + ('global-config', 'g', + "save options to the site-wide distutils.cfg file"), + ('user-config', 'u', + "save options to the current user's pydistutils.cfg file"), + ('filename=', 'f', + "configuration file to use (default=setup.cfg)"), + ] + + boolean_options = [ + 'global-config', 'user-config', + ] + + def initialize_options(self): + self.global_config = None + self.user_config = None + self.filename = None + + def finalize_options(self): + filenames = [] + if self.global_config: + filenames.append(config_file('global')) + if self.user_config: + filenames.append(config_file('user')) + if self.filename is not None: + filenames.append(self.filename) + if not filenames: + filenames.append(config_file('local')) + if len(filenames) > 1: + raise DistutilsOptionError( + "Must specify only one configuration file option", + filenames + ) + self.filename, = filenames + + +class setopt(option_base): + """Save command-line options to a file""" + + description = "set an option in setup.cfg or another config file" + + user_options = [ + ('command=', 'c', 'command to set an option for'), + ('option=', 'o', 'option to set'), + ('set-value=', 's', 'value of the option'), + ('remove', 'r', 'remove (unset) the value'), + ] + option_base.user_options + + boolean_options = option_base.boolean_options + ['remove'] + + def initialize_options(self): + option_base.initialize_options(self) + self.command = None + self.option = None + self.set_value = None + self.remove = None + + def finalize_options(self): + option_base.finalize_options(self) + if self.command is None or self.option is None: + raise DistutilsOptionError("Must specify --command *and* --option") + if self.set_value is None and not self.remove: + raise DistutilsOptionError("Must specify --set-value or --remove") + + def run(self): + edit_config( + self.filename, { + self.command: {self.option.replace('-', '_'): self.set_value} + }, + self.dry_run + ) diff --git a/week-0/day-3/my_todo_app/venvironment/lib/python3.6/site-packages/setuptools/command/test.py b/week-0/day-3/my_todo_app/venvironment/lib/python3.6/site-packages/setuptools/command/test.py new file mode 100644 index 00000000..51aee1f7 --- /dev/null +++ b/week-0/day-3/my_todo_app/venvironment/lib/python3.6/site-packages/setuptools/command/test.py @@ -0,0 +1,268 @@ +import os +import operator +import sys +import contextlib +import itertools +import unittest +from distutils.errors import DistutilsError, DistutilsOptionError +from distutils import log +from unittest import TestLoader + +from setuptools.extern import six +from setuptools.extern.six.moves import map, filter + +from pkg_resources import (resource_listdir, resource_exists, normalize_path, + working_set, _namespace_packages, evaluate_marker, + add_activation_listener, require, EntryPoint) +from setuptools import Command + + +class ScanningLoader(TestLoader): + + def __init__(self): + TestLoader.__init__(self) + self._visited = set() + + def loadTestsFromModule(self, module, pattern=None): + """Return a suite of all tests cases contained in the given module + + If the module is a package, load tests from all the modules in it. + If the module has an ``additional_tests`` function, call it and add + the return value to the tests. + """ + if module in self._visited: + return None + self._visited.add(module) + + tests = [] + tests.append(TestLoader.loadTestsFromModule(self, module)) + + if hasattr(module, "additional_tests"): + tests.append(module.additional_tests()) + + if hasattr(module, '__path__'): + for file in resource_listdir(module.__name__, ''): + if file.endswith('.py') and file != '__init__.py': + submodule = module.__name__ + '.' + file[:-3] + else: + if resource_exists(module.__name__, file + '/__init__.py'): + submodule = module.__name__ + '.' + file + else: + continue + tests.append(self.loadTestsFromName(submodule)) + + if len(tests) != 1: + return self.suiteClass(tests) + else: + return tests[0] # don't create a nested suite for only one return + + +# adapted from jaraco.classes.properties:NonDataProperty +class NonDataProperty(object): + def __init__(self, fget): + self.fget = fget + + def __get__(self, obj, objtype=None): + if obj is None: + return self + return self.fget(obj) + + +class test(Command): + """Command to run unit tests after in-place build""" + + description = "run unit tests after in-place build" + + user_options = [ + ('test-module=', 'm', "Run 'test_suite' in specified module"), + ('test-suite=', 's', + "Run single test, case or suite (e.g. 'module.test_suite')"), + ('test-runner=', 'r', "Test runner to use"), + ] + + def initialize_options(self): + self.test_suite = None + self.test_module = None + self.test_loader = None + self.test_runner = None + + def finalize_options(self): + + if self.test_suite and self.test_module: + msg = "You may specify a module or a suite, but not both" + raise DistutilsOptionError(msg) + + if self.test_suite is None: + if self.test_module is None: + self.test_suite = self.distribution.test_suite + else: + self.test_suite = self.test_module + ".test_suite" + + if self.test_loader is None: + self.test_loader = getattr(self.distribution, 'test_loader', None) + if self.test_loader is None: + self.test_loader = "setuptools.command.test:ScanningLoader" + if self.test_runner is None: + self.test_runner = getattr(self.distribution, 'test_runner', None) + + @NonDataProperty + def test_args(self): + return list(self._test_args()) + + def _test_args(self): + if not self.test_suite and sys.version_info >= (2, 7): + yield 'discover' + if self.verbose: + yield '--verbose' + if self.test_suite: + yield self.test_suite + + def with_project_on_sys_path(self, func): + """ + Backward compatibility for project_on_sys_path context. + """ + with self.project_on_sys_path(): + func() + + @contextlib.contextmanager + def project_on_sys_path(self, include_dists=[]): + with_2to3 = six.PY3 and getattr(self.distribution, 'use_2to3', False) + + if with_2to3: + # If we run 2to3 we can not do this inplace: + + # Ensure metadata is up-to-date + self.reinitialize_command('build_py', inplace=0) + self.run_command('build_py') + bpy_cmd = self.get_finalized_command("build_py") + build_path = normalize_path(bpy_cmd.build_lib) + + # Build extensions + self.reinitialize_command('egg_info', egg_base=build_path) + self.run_command('egg_info') + + self.reinitialize_command('build_ext', inplace=0) + self.run_command('build_ext') + else: + # Without 2to3 inplace works fine: + self.run_command('egg_info') + + # Build extensions in-place + self.reinitialize_command('build_ext', inplace=1) + self.run_command('build_ext') + + ei_cmd = self.get_finalized_command("egg_info") + + old_path = sys.path[:] + old_modules = sys.modules.copy() + + try: + project_path = normalize_path(ei_cmd.egg_base) + sys.path.insert(0, project_path) + working_set.__init__() + add_activation_listener(lambda dist: dist.activate()) + require('%s==%s' % (ei_cmd.egg_name, ei_cmd.egg_version)) + with self.paths_on_pythonpath([project_path]): + yield + finally: + sys.path[:] = old_path + sys.modules.clear() + sys.modules.update(old_modules) + working_set.__init__() + + @staticmethod + @contextlib.contextmanager + def paths_on_pythonpath(paths): + """ + Add the indicated paths to the head of the PYTHONPATH environment + variable so that subprocesses will also see the packages at + these paths. + + Do this in a context that restores the value on exit. + """ + nothing = object() + orig_pythonpath = os.environ.get('PYTHONPATH', nothing) + current_pythonpath = os.environ.get('PYTHONPATH', '') + try: + prefix = os.pathsep.join(paths) + to_join = filter(None, [prefix, current_pythonpath]) + new_path = os.pathsep.join(to_join) + if new_path: + os.environ['PYTHONPATH'] = new_path + yield + finally: + if orig_pythonpath is nothing: + os.environ.pop('PYTHONPATH', None) + else: + os.environ['PYTHONPATH'] = orig_pythonpath + + @staticmethod + def install_dists(dist): + """ + Install the requirements indicated by self.distribution and + return an iterable of the dists that were built. + """ + ir_d = dist.fetch_build_eggs(dist.install_requires) + tr_d = dist.fetch_build_eggs(dist.tests_require or []) + er_d = dist.fetch_build_eggs( + v for k, v in dist.extras_require.items() + if k.startswith(':') and evaluate_marker(k[1:]) + ) + return itertools.chain(ir_d, tr_d, er_d) + + def run(self): + installed_dists = self.install_dists(self.distribution) + + cmd = ' '.join(self._argv) + if self.dry_run: + self.announce('skipping "%s" (dry run)' % cmd) + return + + self.announce('running "%s"' % cmd) + + paths = map(operator.attrgetter('location'), installed_dists) + with self.paths_on_pythonpath(paths): + with self.project_on_sys_path(): + self.run_tests() + + def run_tests(self): + # Purge modules under test from sys.modules. The test loader will + # re-import them from the build location. Required when 2to3 is used + # with namespace packages. + if six.PY3 and getattr(self.distribution, 'use_2to3', False): + module = self.test_suite.split('.')[0] + if module in _namespace_packages: + del_modules = [] + if module in sys.modules: + del_modules.append(module) + module += '.' + for name in sys.modules: + if name.startswith(module): + del_modules.append(name) + list(map(sys.modules.__delitem__, del_modules)) + + test = unittest.main( + None, None, self._argv, + testLoader=self._resolve_as_ep(self.test_loader), + testRunner=self._resolve_as_ep(self.test_runner), + exit=False, + ) + if not test.result.wasSuccessful(): + msg = 'Test failed: %s' % test.result + self.announce(msg, log.ERROR) + raise DistutilsError(msg) + + @property + def _argv(self): + return ['unittest'] + self.test_args + + @staticmethod + def _resolve_as_ep(val): + """ + Load the indicated attribute value, called, as a as if it were + specified as an entry point. + """ + if val is None: + return + parsed = EntryPoint.parse("x=" + val) + return parsed.resolve()() diff --git a/week-0/day-3/my_todo_app/venvironment/lib/python3.6/site-packages/setuptools/command/upload.py b/week-0/day-3/my_todo_app/venvironment/lib/python3.6/site-packages/setuptools/command/upload.py new file mode 100644 index 00000000..a44173a9 --- /dev/null +++ b/week-0/day-3/my_todo_app/venvironment/lib/python3.6/site-packages/setuptools/command/upload.py @@ -0,0 +1,42 @@ +import getpass +from distutils.command import upload as orig + + +class upload(orig.upload): + """ + Override default upload behavior to obtain password + in a variety of different ways. + """ + + def finalize_options(self): + orig.upload.finalize_options(self) + self.username = ( + self.username or + getpass.getuser() + ) + # Attempt to obtain password. Short circuit evaluation at the first + # sign of success. + self.password = ( + self.password or + self._load_password_from_keyring() or + self._prompt_for_password() + ) + + def _load_password_from_keyring(self): + """ + Attempt to load password from keyring. Suppress Exceptions. + """ + try: + keyring = __import__('keyring') + return keyring.get_password(self.repository, self.username) + except Exception: + pass + + def _prompt_for_password(self): + """ + Prompt for a password on the tty. Suppress Exceptions. + """ + try: + return getpass.getpass() + except (Exception, KeyboardInterrupt): + pass diff --git a/week-0/day-3/my_todo_app/venvironment/lib/python3.6/site-packages/setuptools/command/upload_docs.py b/week-0/day-3/my_todo_app/venvironment/lib/python3.6/site-packages/setuptools/command/upload_docs.py new file mode 100644 index 00000000..07aa564a --- /dev/null +++ b/week-0/day-3/my_todo_app/venvironment/lib/python3.6/site-packages/setuptools/command/upload_docs.py @@ -0,0 +1,206 @@ +# -*- coding: utf-8 -*- +"""upload_docs + +Implements a Distutils 'upload_docs' subcommand (upload documentation to +PyPI's pythonhosted.org). +""" + +from base64 import standard_b64encode +from distutils import log +from distutils.errors import DistutilsOptionError +import os +import socket +import zipfile +import tempfile +import shutil +import itertools +import functools + +from setuptools.extern import six +from setuptools.extern.six.moves import http_client, urllib + +from pkg_resources import iter_entry_points +from .upload import upload + + +def _encode(s): + errors = 'surrogateescape' if six.PY3 else 'strict' + return s.encode('utf-8', errors) + + +class upload_docs(upload): + # override the default repository as upload_docs isn't + # supported by Warehouse (and won't be). + DEFAULT_REPOSITORY = 'https://pypi.python.org/pypi/' + + description = 'Upload documentation to PyPI' + + user_options = [ + ('repository=', 'r', + "url of repository [default: %s]" % upload.DEFAULT_REPOSITORY), + ('show-response', None, + 'display full response text from server'), + ('upload-dir=', None, 'directory to upload'), + ] + boolean_options = upload.boolean_options + + def has_sphinx(self): + if self.upload_dir is None: + for ep in iter_entry_points('distutils.commands', 'build_sphinx'): + return True + + sub_commands = [('build_sphinx', has_sphinx)] + + def initialize_options(self): + upload.initialize_options(self) + self.upload_dir = None + self.target_dir = None + + def finalize_options(self): + upload.finalize_options(self) + if self.upload_dir is None: + if self.has_sphinx(): + build_sphinx = self.get_finalized_command('build_sphinx') + self.target_dir = build_sphinx.builder_target_dir + else: + build = self.get_finalized_command('build') + self.target_dir = os.path.join(build.build_base, 'docs') + else: + self.ensure_dirname('upload_dir') + self.target_dir = self.upload_dir + if 'pypi.python.org' in self.repository: + log.warn("Upload_docs command is deprecated. Use RTD instead.") + self.announce('Using upload directory %s' % self.target_dir) + + def create_zipfile(self, filename): + zip_file = zipfile.ZipFile(filename, "w") + try: + self.mkpath(self.target_dir) # just in case + for root, dirs, files in os.walk(self.target_dir): + if root == self.target_dir and not files: + tmpl = "no files found in upload directory '%s'" + raise DistutilsOptionError(tmpl % self.target_dir) + for name in files: + full = os.path.join(root, name) + relative = root[len(self.target_dir):].lstrip(os.path.sep) + dest = os.path.join(relative, name) + zip_file.write(full, dest) + finally: + zip_file.close() + + def run(self): + # Run sub commands + for cmd_name in self.get_sub_commands(): + self.run_command(cmd_name) + + tmp_dir = tempfile.mkdtemp() + name = self.distribution.metadata.get_name() + zip_file = os.path.join(tmp_dir, "%s.zip" % name) + try: + self.create_zipfile(zip_file) + self.upload_file(zip_file) + finally: + shutil.rmtree(tmp_dir) + + @staticmethod + def _build_part(item, sep_boundary): + key, values = item + title = '\nContent-Disposition: form-data; name="%s"' % key + # handle multiple entries for the same name + if not isinstance(values, list): + values = [values] + for value in values: + if isinstance(value, tuple): + title += '; filename="%s"' % value[0] + value = value[1] + else: + value = _encode(value) + yield sep_boundary + yield _encode(title) + yield b"\n\n" + yield value + if value and value[-1:] == b'\r': + yield b'\n' # write an extra newline (lurve Macs) + + @classmethod + def _build_multipart(cls, data): + """ + Build up the MIME payload for the POST data + """ + boundary = b'--------------GHSKFJDLGDS7543FJKLFHRE75642756743254' + sep_boundary = b'\n--' + boundary + end_boundary = sep_boundary + b'--' + end_items = end_boundary, b"\n", + builder = functools.partial( + cls._build_part, + sep_boundary=sep_boundary, + ) + part_groups = map(builder, data.items()) + parts = itertools.chain.from_iterable(part_groups) + body_items = itertools.chain(parts, end_items) + content_type = 'multipart/form-data; boundary=%s' % boundary.decode('ascii') + return b''.join(body_items), content_type + + def upload_file(self, filename): + with open(filename, 'rb') as f: + content = f.read() + meta = self.distribution.metadata + data = { + ':action': 'doc_upload', + 'name': meta.get_name(), + 'content': (os.path.basename(filename), content), + } + # set up the authentication + credentials = _encode(self.username + ':' + self.password) + credentials = standard_b64encode(credentials) + if six.PY3: + credentials = credentials.decode('ascii') + auth = "Basic " + credentials + + body, ct = self._build_multipart(data) + + msg = "Submitting documentation to %s" % (self.repository) + self.announce(msg, log.INFO) + + # build the Request + # We can't use urllib2 since we need to send the Basic + # auth right with the first request + schema, netloc, url, params, query, fragments = \ + urllib.parse.urlparse(self.repository) + assert not params and not query and not fragments + if schema == 'http': + conn = http_client.HTTPConnection(netloc) + elif schema == 'https': + conn = http_client.HTTPSConnection(netloc) + else: + raise AssertionError("unsupported schema " + schema) + + data = '' + try: + conn.connect() + conn.putrequest("POST", url) + content_type = ct + conn.putheader('Content-type', content_type) + conn.putheader('Content-length', str(len(body))) + conn.putheader('Authorization', auth) + conn.endheaders() + conn.send(body) + except socket.error as e: + self.announce(str(e), log.ERROR) + return + + r = conn.getresponse() + if r.status == 200: + msg = 'Server response (%s): %s' % (r.status, r.reason) + self.announce(msg, log.INFO) + elif r.status == 301: + location = r.getheader('Location') + if location is None: + location = 'https://pythonhosted.org/%s/' % meta.get_name() + msg = 'Upload successful. Visit %s' % location + self.announce(msg, log.INFO) + else: + msg = 'Upload failed (%s): %s' % (r.status, r.reason) + self.announce(msg, log.ERROR) + if self.show_response: + print('-' * 75, r.read(), '-' * 75) diff --git a/week-0/day-3/my_todo_app/venvironment/lib/python3.6/site-packages/setuptools/config.py b/week-0/day-3/my_todo_app/venvironment/lib/python3.6/site-packages/setuptools/config.py new file mode 100644 index 00000000..8eddcae8 --- /dev/null +++ b/week-0/day-3/my_todo_app/venvironment/lib/python3.6/site-packages/setuptools/config.py @@ -0,0 +1,556 @@ +from __future__ import absolute_import, unicode_literals +import io +import os +import sys +from collections import defaultdict +from functools import partial +from importlib import import_module + +from distutils.errors import DistutilsOptionError, DistutilsFileError +from setuptools.extern.six import string_types + + +def read_configuration( + filepath, find_others=False, ignore_option_errors=False): + """Read given configuration file and returns options from it as a dict. + + :param str|unicode filepath: Path to configuration file + to get options from. + + :param bool find_others: Whether to search for other configuration files + which could be on in various places. + + :param bool ignore_option_errors: Whether to silently ignore + options, values of which could not be resolved (e.g. due to exceptions + in directives such as file:, attr:, etc.). + If False exceptions are propagated as expected. + + :rtype: dict + """ + from setuptools.dist import Distribution, _Distribution + + filepath = os.path.abspath(filepath) + + if not os.path.isfile(filepath): + raise DistutilsFileError( + 'Configuration file %s does not exist.' % filepath) + + current_directory = os.getcwd() + os.chdir(os.path.dirname(filepath)) + + try: + dist = Distribution() + + filenames = dist.find_config_files() if find_others else [] + if filepath not in filenames: + filenames.append(filepath) + + _Distribution.parse_config_files(dist, filenames=filenames) + + handlers = parse_configuration( + dist, dist.command_options, + ignore_option_errors=ignore_option_errors) + + finally: + os.chdir(current_directory) + + return configuration_to_dict(handlers) + + +def configuration_to_dict(handlers): + """Returns configuration data gathered by given handlers as a dict. + + :param list[ConfigHandler] handlers: Handlers list, + usually from parse_configuration() + + :rtype: dict + """ + config_dict = defaultdict(dict) + + for handler in handlers: + + obj_alias = handler.section_prefix + target_obj = handler.target_obj + + for option in handler.set_options: + getter = getattr(target_obj, 'get_%s' % option, None) + + if getter is None: + value = getattr(target_obj, option) + + else: + value = getter() + + config_dict[obj_alias][option] = value + + return config_dict + + +def parse_configuration( + distribution, command_options, ignore_option_errors=False): + """Performs additional parsing of configuration options + for a distribution. + + Returns a list of used option handlers. + + :param Distribution distribution: + :param dict command_options: + :param bool ignore_option_errors: Whether to silently ignore + options, values of which could not be resolved (e.g. due to exceptions + in directives such as file:, attr:, etc.). + If False exceptions are propagated as expected. + :rtype: list + """ + meta = ConfigMetadataHandler( + distribution.metadata, command_options, ignore_option_errors) + meta.parse() + + options = ConfigOptionsHandler( + distribution, command_options, ignore_option_errors) + options.parse() + + return meta, options + + +class ConfigHandler(object): + """Handles metadata supplied in configuration files.""" + + section_prefix = None + """Prefix for config sections handled by this handler. + Must be provided by class heirs. + + """ + + aliases = {} + """Options aliases. + For compatibility with various packages. E.g.: d2to1 and pbr. + Note: `-` in keys is replaced with `_` by config parser. + + """ + + def __init__(self, target_obj, options, ignore_option_errors=False): + sections = {} + + section_prefix = self.section_prefix + for section_name, section_options in options.items(): + if not section_name.startswith(section_prefix): + continue + + section_name = section_name.replace(section_prefix, '').strip('.') + sections[section_name] = section_options + + self.ignore_option_errors = ignore_option_errors + self.target_obj = target_obj + self.sections = sections + self.set_options = [] + + @property + def parsers(self): + """Metadata item name to parser function mapping.""" + raise NotImplementedError( + '%s must provide .parsers property' % self.__class__.__name__) + + def __setitem__(self, option_name, value): + unknown = tuple() + target_obj = self.target_obj + + # Translate alias into real name. + option_name = self.aliases.get(option_name, option_name) + + current_value = getattr(target_obj, option_name, unknown) + + if current_value is unknown: + raise KeyError(option_name) + + if current_value: + # Already inhabited. Skipping. + return + + skip_option = False + parser = self.parsers.get(option_name) + if parser: + try: + value = parser(value) + + except Exception: + skip_option = True + if not self.ignore_option_errors: + raise + + if skip_option: + return + + setter = getattr(target_obj, 'set_%s' % option_name, None) + if setter is None: + setattr(target_obj, option_name, value) + else: + setter(value) + + self.set_options.append(option_name) + + @classmethod + def _parse_list(cls, value, separator=','): + """Represents value as a list. + + Value is split either by separator (defaults to comma) or by lines. + + :param value: + :param separator: List items separator character. + :rtype: list + """ + if isinstance(value, list): # _get_parser_compound case + return value + + if '\n' in value: + value = value.splitlines() + else: + value = value.split(separator) + + return [chunk.strip() for chunk in value if chunk.strip()] + + @classmethod + def _parse_dict(cls, value): + """Represents value as a dict. + + :param value: + :rtype: dict + """ + separator = '=' + result = {} + for line in cls._parse_list(value): + key, sep, val = line.partition(separator) + if sep != separator: + raise DistutilsOptionError( + 'Unable to parse option value to dict: %s' % value) + result[key.strip()] = val.strip() + + return result + + @classmethod + def _parse_bool(cls, value): + """Represents value as boolean. + + :param value: + :rtype: bool + """ + value = value.lower() + return value in ('1', 'true', 'yes') + + @classmethod + def _parse_file(cls, value): + """Represents value as a string, allowing including text + from nearest files using `file:` directive. + + Directive is sandboxed and won't reach anything outside + directory with setup.py. + + Examples: + file: LICENSE + file: README.rst, CHANGELOG.md, src/file.txt + + :param str value: + :rtype: str + """ + include_directive = 'file:' + + if not isinstance(value, string_types): + return value + + if not value.startswith(include_directive): + return value + + spec = value[len(include_directive):] + filepaths = (os.path.abspath(path.strip()) for path in spec.split(',')) + return '\n'.join( + cls._read_file(path) + for path in filepaths + if (cls._assert_local(path) or True) + and os.path.isfile(path) + ) + + @staticmethod + def _assert_local(filepath): + if not filepath.startswith(os.getcwd()): + raise DistutilsOptionError( + '`file:` directive can not access %s' % filepath) + + @staticmethod + def _read_file(filepath): + with io.open(filepath, encoding='utf-8') as f: + return f.read() + + @classmethod + def _parse_attr(cls, value): + """Represents value as a module attribute. + + Examples: + attr: package.attr + attr: package.module.attr + + :param str value: + :rtype: str + """ + attr_directive = 'attr:' + if not value.startswith(attr_directive): + return value + + attrs_path = value.replace(attr_directive, '').strip().split('.') + attr_name = attrs_path.pop() + + module_name = '.'.join(attrs_path) + module_name = module_name or '__init__' + + sys.path.insert(0, os.getcwd()) + try: + module = import_module(module_name) + value = getattr(module, attr_name) + + finally: + sys.path = sys.path[1:] + + return value + + @classmethod + def _get_parser_compound(cls, *parse_methods): + """Returns parser function to represents value as a list. + + Parses a value applying given methods one after another. + + :param parse_methods: + :rtype: callable + """ + def parse(value): + parsed = value + + for method in parse_methods: + parsed = method(parsed) + + return parsed + + return parse + + @classmethod + def _parse_section_to_dict(cls, section_options, values_parser=None): + """Parses section options into a dictionary. + + Optionally applies a given parser to values. + + :param dict section_options: + :param callable values_parser: + :rtype: dict + """ + value = {} + values_parser = values_parser or (lambda val: val) + for key, (_, val) in section_options.items(): + value[key] = values_parser(val) + return value + + def parse_section(self, section_options): + """Parses configuration file section. + + :param dict section_options: + """ + for (name, (_, value)) in section_options.items(): + try: + self[name] = value + + except KeyError: + pass # Keep silent for a new option may appear anytime. + + def parse(self): + """Parses configuration file items from one + or more related sections. + + """ + for section_name, section_options in self.sections.items(): + + method_postfix = '' + if section_name: # [section.option] variant + method_postfix = '_%s' % section_name + + section_parser_method = getattr( + self, + # Dots in section names are tranlsated into dunderscores. + ('parse_section%s' % method_postfix).replace('.', '__'), + None) + + if section_parser_method is None: + raise DistutilsOptionError( + 'Unsupported distribution option section: [%s.%s]' % ( + self.section_prefix, section_name)) + + section_parser_method(section_options) + + +class ConfigMetadataHandler(ConfigHandler): + + section_prefix = 'metadata' + + aliases = { + 'home_page': 'url', + 'summary': 'description', + 'classifier': 'classifiers', + 'platform': 'platforms', + } + + strict_mode = False + """We need to keep it loose, to be partially compatible with + `pbr` and `d2to1` packages which also uses `metadata` section. + + """ + + @property + def parsers(self): + """Metadata item name to parser function mapping.""" + parse_list = self._parse_list + parse_file = self._parse_file + parse_dict = self._parse_dict + + return { + 'platforms': parse_list, + 'keywords': parse_list, + 'provides': parse_list, + 'requires': parse_list, + 'obsoletes': parse_list, + 'classifiers': self._get_parser_compound(parse_file, parse_list), + 'license': parse_file, + 'description': parse_file, + 'long_description': parse_file, + 'version': self._parse_version, + 'project_urls': parse_dict, + } + + def _parse_version(self, value): + """Parses `version` option value. + + :param value: + :rtype: str + + """ + version = self._parse_attr(value) + + if callable(version): + version = version() + + if not isinstance(version, string_types): + if hasattr(version, '__iter__'): + version = '.'.join(map(str, version)) + else: + version = '%s' % version + + return version + + +class ConfigOptionsHandler(ConfigHandler): + + section_prefix = 'options' + + @property + def parsers(self): + """Metadata item name to parser function mapping.""" + parse_list = self._parse_list + parse_list_semicolon = partial(self._parse_list, separator=';') + parse_bool = self._parse_bool + parse_dict = self._parse_dict + + return { + 'zip_safe': parse_bool, + 'use_2to3': parse_bool, + 'include_package_data': parse_bool, + 'package_dir': parse_dict, + 'use_2to3_fixers': parse_list, + 'use_2to3_exclude_fixers': parse_list, + 'convert_2to3_doctests': parse_list, + 'scripts': parse_list, + 'eager_resources': parse_list, + 'dependency_links': parse_list, + 'namespace_packages': parse_list, + 'install_requires': parse_list_semicolon, + 'setup_requires': parse_list_semicolon, + 'tests_require': parse_list_semicolon, + 'packages': self._parse_packages, + 'entry_points': self._parse_file, + 'py_modules': parse_list, + } + + def _parse_packages(self, value): + """Parses `packages` option value. + + :param value: + :rtype: list + """ + find_directive = 'find:' + + if not value.startswith(find_directive): + return self._parse_list(value) + + # Read function arguments from a dedicated section. + find_kwargs = self.parse_section_packages__find( + self.sections.get('packages.find', {})) + + from setuptools import find_packages + + return find_packages(**find_kwargs) + + def parse_section_packages__find(self, section_options): + """Parses `packages.find` configuration file section. + + To be used in conjunction with _parse_packages(). + + :param dict section_options: + """ + section_data = self._parse_section_to_dict( + section_options, self._parse_list) + + valid_keys = ['where', 'include', 'exclude'] + + find_kwargs = dict( + [(k, v) for k, v in section_data.items() if k in valid_keys and v]) + + where = find_kwargs.get('where') + if where is not None: + find_kwargs['where'] = where[0] # cast list to single val + + return find_kwargs + + def parse_section_entry_points(self, section_options): + """Parses `entry_points` configuration file section. + + :param dict section_options: + """ + parsed = self._parse_section_to_dict(section_options, self._parse_list) + self['entry_points'] = parsed + + def _parse_package_data(self, section_options): + parsed = self._parse_section_to_dict(section_options, self._parse_list) + + root = parsed.get('*') + if root: + parsed[''] = root + del parsed['*'] + + return parsed + + def parse_section_package_data(self, section_options): + """Parses `package_data` configuration file section. + + :param dict section_options: + """ + self['package_data'] = self._parse_package_data(section_options) + + def parse_section_exclude_package_data(self, section_options): + """Parses `exclude_package_data` configuration file section. + + :param dict section_options: + """ + self['exclude_package_data'] = self._parse_package_data( + section_options) + + def parse_section_extras_require(self, section_options): + """Parses `extras_require` configuration file section. + + :param dict section_options: + """ + parse_list = partial(self._parse_list, separator=';') + self['extras_require'] = self._parse_section_to_dict( + section_options, parse_list) diff --git a/week-0/day-3/my_todo_app/venvironment/lib/python3.6/site-packages/setuptools/dep_util.py b/week-0/day-3/my_todo_app/venvironment/lib/python3.6/site-packages/setuptools/dep_util.py new file mode 100644 index 00000000..2931c13e --- /dev/null +++ b/week-0/day-3/my_todo_app/venvironment/lib/python3.6/site-packages/setuptools/dep_util.py @@ -0,0 +1,23 @@ +from distutils.dep_util import newer_group + +# yes, this is was almost entirely copy-pasted from +# 'newer_pairwise()', this is just another convenience +# function. +def newer_pairwise_group(sources_groups, targets): + """Walk both arguments in parallel, testing if each source group is newer + than its corresponding target. Returns a pair of lists (sources_groups, + targets) where sources is newer than target, according to the semantics + of 'newer_group()'. + """ + if len(sources_groups) != len(targets): + raise ValueError("'sources_group' and 'targets' must be the same length") + + # build a pair of lists (sources_groups, targets) where source is newer + n_sources = [] + n_targets = [] + for i in range(len(sources_groups)): + if newer_group(sources_groups[i], targets[i]): + n_sources.append(sources_groups[i]) + n_targets.append(targets[i]) + + return n_sources, n_targets diff --git a/week-0/day-3/my_todo_app/venvironment/lib/python3.6/site-packages/setuptools/depends.py b/week-0/day-3/my_todo_app/venvironment/lib/python3.6/site-packages/setuptools/depends.py new file mode 100644 index 00000000..45e7052d --- /dev/null +++ b/week-0/day-3/my_todo_app/venvironment/lib/python3.6/site-packages/setuptools/depends.py @@ -0,0 +1,186 @@ +import sys +import imp +import marshal +from distutils.version import StrictVersion +from imp import PKG_DIRECTORY, PY_COMPILED, PY_SOURCE, PY_FROZEN + +from .py33compat import Bytecode + + +__all__ = [ + 'Require', 'find_module', 'get_module_constant', 'extract_constant' +] + + +class Require: + """A prerequisite to building or installing a distribution""" + + def __init__(self, name, requested_version, module, homepage='', + attribute=None, format=None): + + if format is None and requested_version is not None: + format = StrictVersion + + if format is not None: + requested_version = format(requested_version) + if attribute is None: + attribute = '__version__' + + self.__dict__.update(locals()) + del self.self + + def full_name(self): + """Return full package/distribution name, w/version""" + if self.requested_version is not None: + return '%s-%s' % (self.name, self.requested_version) + return self.name + + def version_ok(self, version): + """Is 'version' sufficiently up-to-date?""" + return self.attribute is None or self.format is None or \ + str(version) != "unknown" and version >= self.requested_version + + def get_version(self, paths=None, default="unknown"): + """Get version number of installed module, 'None', or 'default' + + Search 'paths' for module. If not found, return 'None'. If found, + return the extracted version attribute, or 'default' if no version + attribute was specified, or the value cannot be determined without + importing the module. The version is formatted according to the + requirement's version format (if any), unless it is 'None' or the + supplied 'default'. + """ + + if self.attribute is None: + try: + f, p, i = find_module(self.module, paths) + if f: + f.close() + return default + except ImportError: + return None + + v = get_module_constant(self.module, self.attribute, default, paths) + + if v is not None and v is not default and self.format is not None: + return self.format(v) + + return v + + def is_present(self, paths=None): + """Return true if dependency is present on 'paths'""" + return self.get_version(paths) is not None + + def is_current(self, paths=None): + """Return true if dependency is present and up-to-date on 'paths'""" + version = self.get_version(paths) + if version is None: + return False + return self.version_ok(version) + + +def find_module(module, paths=None): + """Just like 'imp.find_module()', but with package support""" + + parts = module.split('.') + + while parts: + part = parts.pop(0) + f, path, (suffix, mode, kind) = info = imp.find_module(part, paths) + + if kind == PKG_DIRECTORY: + parts = parts or ['__init__'] + paths = [path] + + elif parts: + raise ImportError("Can't find %r in %s" % (parts, module)) + + return info + + +def get_module_constant(module, symbol, default=-1, paths=None): + """Find 'module' by searching 'paths', and extract 'symbol' + + Return 'None' if 'module' does not exist on 'paths', or it does not define + 'symbol'. If the module defines 'symbol' as a constant, return the + constant. Otherwise, return 'default'.""" + + try: + f, path, (suffix, mode, kind) = find_module(module, paths) + except ImportError: + # Module doesn't exist + return None + + try: + if kind == PY_COMPILED: + f.read(8) # skip magic & date + code = marshal.load(f) + elif kind == PY_FROZEN: + code = imp.get_frozen_object(module) + elif kind == PY_SOURCE: + code = compile(f.read(), path, 'exec') + else: + # Not something we can parse; we'll have to import it. :( + if module not in sys.modules: + imp.load_module(module, f, path, (suffix, mode, kind)) + return getattr(sys.modules[module], symbol, None) + + finally: + if f: + f.close() + + return extract_constant(code, symbol, default) + + +def extract_constant(code, symbol, default=-1): + """Extract the constant value of 'symbol' from 'code' + + If the name 'symbol' is bound to a constant value by the Python code + object 'code', return that value. If 'symbol' is bound to an expression, + return 'default'. Otherwise, return 'None'. + + Return value is based on the first assignment to 'symbol'. 'symbol' must + be a global, or at least a non-"fast" local in the code block. That is, + only 'STORE_NAME' and 'STORE_GLOBAL' opcodes are checked, and 'symbol' + must be present in 'code.co_names'. + """ + if symbol not in code.co_names: + # name's not there, can't possibly be an assignment + return None + + name_idx = list(code.co_names).index(symbol) + + STORE_NAME = 90 + STORE_GLOBAL = 97 + LOAD_CONST = 100 + + const = default + + for byte_code in Bytecode(code): + op = byte_code.opcode + arg = byte_code.arg + + if op == LOAD_CONST: + const = code.co_consts[arg] + elif arg == name_idx and (op == STORE_NAME or op == STORE_GLOBAL): + return const + else: + const = default + + +def _update_globals(): + """ + Patch the globals to remove the objects not available on some platforms. + + XXX it'd be better to test assertions about bytecode instead. + """ + + if not sys.platform.startswith('java') and sys.platform != 'cli': + return + incompatible = 'extract_constant', 'get_module_constant' + for name in incompatible: + del globals()[name] + __all__.remove(name) + + +_update_globals() diff --git a/week-0/day-3/my_todo_app/venvironment/lib/python3.6/site-packages/setuptools/dist.py b/week-0/day-3/my_todo_app/venvironment/lib/python3.6/site-packages/setuptools/dist.py new file mode 100644 index 00000000..5dc696ff --- /dev/null +++ b/week-0/day-3/my_todo_app/venvironment/lib/python3.6/site-packages/setuptools/dist.py @@ -0,0 +1,1070 @@ +# -*- coding: utf-8 -*- +__all__ = ['Distribution'] + +import re +import os +import warnings +import numbers +import distutils.log +import distutils.core +import distutils.cmd +import distutils.dist +import itertools +from collections import defaultdict +from distutils.errors import ( + DistutilsOptionError, DistutilsPlatformError, DistutilsSetupError, +) +from distutils.util import rfc822_escape +from distutils.version import StrictVersion + +from setuptools.extern import six +from setuptools.extern import packaging +from setuptools.extern.six.moves import map, filter, filterfalse + +from setuptools.depends import Require +from setuptools import windows_support +from setuptools.monkey import get_unpatched +from setuptools.config import parse_configuration +import pkg_resources +from .py36compat import Distribution_parse_config_files + +__import__('setuptools.extern.packaging.specifiers') +__import__('setuptools.extern.packaging.version') + + +def _get_unpatched(cls): + warnings.warn("Do not call this function", DeprecationWarning) + return get_unpatched(cls) + + +def get_metadata_version(dist_md): + if dist_md.long_description_content_type or dist_md.provides_extras: + return StrictVersion('2.1') + elif (dist_md.maintainer is not None or + dist_md.maintainer_email is not None or + getattr(dist_md, 'python_requires', None) is not None): + return StrictVersion('1.2') + elif (dist_md.provides or dist_md.requires or dist_md.obsoletes or + dist_md.classifiers or dist_md.download_url): + return StrictVersion('1.1') + + return StrictVersion('1.0') + + +# Based on Python 3.5 version +def write_pkg_file(self, file): + """Write the PKG-INFO format data to a file object. + """ + version = get_metadata_version(self) + + file.write('Metadata-Version: %s\n' % version) + file.write('Name: %s\n' % self.get_name()) + file.write('Version: %s\n' % self.get_version()) + file.write('Summary: %s\n' % self.get_description()) + file.write('Home-page: %s\n' % self.get_url()) + + if version < StrictVersion('1.2'): + file.write('Author: %s\n' % self.get_contact()) + file.write('Author-email: %s\n' % self.get_contact_email()) + else: + optional_fields = ( + ('Author', 'author'), + ('Author-email', 'author_email'), + ('Maintainer', 'maintainer'), + ('Maintainer-email', 'maintainer_email'), + ) + + for field, attr in optional_fields: + attr_val = getattr(self, attr) + if six.PY2: + attr_val = self._encode_field(attr_val) + + if attr_val is not None: + file.write('%s: %s\n' % (field, attr_val)) + + file.write('License: %s\n' % self.get_license()) + if self.download_url: + file.write('Download-URL: %s\n' % self.download_url) + for project_url in self.project_urls.items(): + file.write('Project-URL: %s, %s\n' % project_url) + + long_desc = rfc822_escape(self.get_long_description()) + file.write('Description: %s\n' % long_desc) + + keywords = ','.join(self.get_keywords()) + if keywords: + file.write('Keywords: %s\n' % keywords) + + if version >= StrictVersion('1.2'): + for platform in self.get_platforms(): + file.write('Platform: %s\n' % platform) + else: + self._write_list(file, 'Platform', self.get_platforms()) + + self._write_list(file, 'Classifier', self.get_classifiers()) + + # PEP 314 + self._write_list(file, 'Requires', self.get_requires()) + self._write_list(file, 'Provides', self.get_provides()) + self._write_list(file, 'Obsoletes', self.get_obsoletes()) + + # Setuptools specific for PEP 345 + if hasattr(self, 'python_requires'): + file.write('Requires-Python: %s\n' % self.python_requires) + + # PEP 566 + if self.long_description_content_type: + file.write( + 'Description-Content-Type: %s\n' % + self.long_description_content_type + ) + if self.provides_extras: + for extra in sorted(self.provides_extras): + file.write('Provides-Extra: %s\n' % extra) + + +# from Python 3.4 +def write_pkg_info(self, base_dir): + """Write the PKG-INFO file into the release tree. + """ + with open(os.path.join(base_dir, 'PKG-INFO'), 'w', + encoding='UTF-8') as pkg_info: + self.write_pkg_file(pkg_info) + + +sequence = tuple, list + + +def check_importable(dist, attr, value): + try: + ep = pkg_resources.EntryPoint.parse('x=' + value) + assert not ep.extras + except (TypeError, ValueError, AttributeError, AssertionError): + raise DistutilsSetupError( + "%r must be importable 'module:attrs' string (got %r)" + % (attr, value) + ) + + +def assert_string_list(dist, attr, value): + """Verify that value is a string list or None""" + try: + assert ''.join(value) != value + except (TypeError, ValueError, AttributeError, AssertionError): + raise DistutilsSetupError( + "%r must be a list of strings (got %r)" % (attr, value) + ) + + +def check_nsp(dist, attr, value): + """Verify that namespace packages are valid""" + ns_packages = value + assert_string_list(dist, attr, ns_packages) + for nsp in ns_packages: + if not dist.has_contents_for(nsp): + raise DistutilsSetupError( + "Distribution contains no modules or packages for " + + "namespace package %r" % nsp + ) + parent, sep, child = nsp.rpartition('.') + if parent and parent not in ns_packages: + distutils.log.warn( + "WARNING: %r is declared as a package namespace, but %r" + " is not: please correct this in setup.py", nsp, parent + ) + + +def check_extras(dist, attr, value): + """Verify that extras_require mapping is valid""" + try: + list(itertools.starmap(_check_extra, value.items())) + except (TypeError, ValueError, AttributeError): + raise DistutilsSetupError( + "'extras_require' must be a dictionary whose values are " + "strings or lists of strings containing valid project/version " + "requirement specifiers." + ) + + +def _check_extra(extra, reqs): + name, sep, marker = extra.partition(':') + if marker and pkg_resources.invalid_marker(marker): + raise DistutilsSetupError("Invalid environment marker: " + marker) + list(pkg_resources.parse_requirements(reqs)) + + +def assert_bool(dist, attr, value): + """Verify that value is True, False, 0, or 1""" + if bool(value) != value: + tmpl = "{attr!r} must be a boolean value (got {value!r})" + raise DistutilsSetupError(tmpl.format(attr=attr, value=value)) + + +def check_requirements(dist, attr, value): + """Verify that install_requires is a valid requirements list""" + try: + list(pkg_resources.parse_requirements(value)) + if isinstance(value, (dict, set)): + raise TypeError("Unordered types are not allowed") + except (TypeError, ValueError) as error: + tmpl = ( + "{attr!r} must be a string or list of strings " + "containing valid project/version requirement specifiers; {error}" + ) + raise DistutilsSetupError(tmpl.format(attr=attr, error=error)) + + +def check_specifier(dist, attr, value): + """Verify that value is a valid version specifier""" + try: + packaging.specifiers.SpecifierSet(value) + except packaging.specifiers.InvalidSpecifier as error: + tmpl = ( + "{attr!r} must be a string " + "containing valid version specifiers; {error}" + ) + raise DistutilsSetupError(tmpl.format(attr=attr, error=error)) + + +def check_entry_points(dist, attr, value): + """Verify that entry_points map is parseable""" + try: + pkg_resources.EntryPoint.parse_map(value) + except ValueError as e: + raise DistutilsSetupError(e) + + +def check_test_suite(dist, attr, value): + if not isinstance(value, six.string_types): + raise DistutilsSetupError("test_suite must be a string") + + +def check_package_data(dist, attr, value): + """Verify that value is a dictionary of package names to glob lists""" + if isinstance(value, dict): + for k, v in value.items(): + if not isinstance(k, str): + break + try: + iter(v) + except TypeError: + break + else: + return + raise DistutilsSetupError( + attr + " must be a dictionary mapping package names to lists of " + "wildcard patterns" + ) + + +def check_packages(dist, attr, value): + for pkgname in value: + if not re.match(r'\w+(\.\w+)*', pkgname): + distutils.log.warn( + "WARNING: %r not a valid package name; please use only " + ".-separated package names in setup.py", pkgname + ) + + +_Distribution = get_unpatched(distutils.core.Distribution) + + +class Distribution(Distribution_parse_config_files, _Distribution): + """Distribution with support for features, tests, and package data + + This is an enhanced version of 'distutils.dist.Distribution' that + effectively adds the following new optional keyword arguments to 'setup()': + + 'install_requires' -- a string or sequence of strings specifying project + versions that the distribution requires when installed, in the format + used by 'pkg_resources.require()'. They will be installed + automatically when the package is installed. If you wish to use + packages that are not available in PyPI, or want to give your users an + alternate download location, you can add a 'find_links' option to the + '[easy_install]' section of your project's 'setup.cfg' file, and then + setuptools will scan the listed web pages for links that satisfy the + requirements. + + 'extras_require' -- a dictionary mapping names of optional "extras" to the + additional requirement(s) that using those extras incurs. For example, + this:: + + extras_require = dict(reST = ["docutils>=0.3", "reSTedit"]) + + indicates that the distribution can optionally provide an extra + capability called "reST", but it can only be used if docutils and + reSTedit are installed. If the user installs your package using + EasyInstall and requests one of your extras, the corresponding + additional requirements will be installed if needed. + + 'features' **deprecated** -- a dictionary mapping option names to + 'setuptools.Feature' + objects. Features are a portion of the distribution that can be + included or excluded based on user options, inter-feature dependencies, + and availability on the current system. Excluded features are omitted + from all setup commands, including source and binary distributions, so + you can create multiple distributions from the same source tree. + Feature names should be valid Python identifiers, except that they may + contain the '-' (minus) sign. Features can be included or excluded + via the command line options '--with-X' and '--without-X', where 'X' is + the name of the feature. Whether a feature is included by default, and + whether you are allowed to control this from the command line, is + determined by the Feature object. See the 'Feature' class for more + information. + + 'test_suite' -- the name of a test suite to run for the 'test' command. + If the user runs 'python setup.py test', the package will be installed, + and the named test suite will be run. The format is the same as + would be used on a 'unittest.py' command line. That is, it is the + dotted name of an object to import and call to generate a test suite. + + 'package_data' -- a dictionary mapping package names to lists of filenames + or globs to use to find data files contained in the named packages. + If the dictionary has filenames or globs listed under '""' (the empty + string), those names will be searched for in every package, in addition + to any names for the specific package. Data files found using these + names/globs will be installed along with the package, in the same + location as the package. Note that globs are allowed to reference + the contents of non-package subdirectories, as long as you use '/' as + a path separator. (Globs are automatically converted to + platform-specific paths at runtime.) + + In addition to these new keywords, this class also has several new methods + for manipulating the distribution's contents. For example, the 'include()' + and 'exclude()' methods can be thought of as in-place add and subtract + commands that add or remove packages, modules, extensions, and so on from + the distribution. They are used by the feature subsystem to configure the + distribution for the included and excluded features. + """ + + _patched_dist = None + + def patch_missing_pkg_info(self, attrs): + # Fake up a replacement for the data that would normally come from + # PKG-INFO, but which might not yet be built if this is a fresh + # checkout. + # + if not attrs or 'name' not in attrs or 'version' not in attrs: + return + key = pkg_resources.safe_name(str(attrs['name'])).lower() + dist = pkg_resources.working_set.by_key.get(key) + if dist is not None and not dist.has_metadata('PKG-INFO'): + dist._version = pkg_resources.safe_version(str(attrs['version'])) + self._patched_dist = dist + + def __init__(self, attrs=None): + have_package_data = hasattr(self, "package_data") + if not have_package_data: + self.package_data = {} + attrs = attrs or {} + if 'features' in attrs or 'require_features' in attrs: + Feature.warn_deprecated() + self.require_features = [] + self.features = {} + self.dist_files = [] + self.src_root = attrs.pop("src_root", None) + self.patch_missing_pkg_info(attrs) + self.project_urls = attrs.get('project_urls', {}) + self.dependency_links = attrs.pop('dependency_links', []) + self.setup_requires = attrs.pop('setup_requires', []) + for ep in pkg_resources.iter_entry_points('distutils.setup_keywords'): + vars(self).setdefault(ep.name, None) + _Distribution.__init__(self, attrs) + + # The project_urls attribute may not be supported in distutils, so + # prime it here from our value if not automatically set + self.metadata.project_urls = getattr( + self.metadata, 'project_urls', self.project_urls) + self.metadata.long_description_content_type = attrs.get( + 'long_description_content_type' + ) + self.metadata.provides_extras = getattr( + self.metadata, 'provides_extras', set() + ) + + if isinstance(self.metadata.version, numbers.Number): + # Some people apparently take "version number" too literally :) + self.metadata.version = str(self.metadata.version) + + if self.metadata.version is not None: + try: + ver = packaging.version.Version(self.metadata.version) + normalized_version = str(ver) + if self.metadata.version != normalized_version: + warnings.warn( + "Normalizing '%s' to '%s'" % ( + self.metadata.version, + normalized_version, + ) + ) + self.metadata.version = normalized_version + except (packaging.version.InvalidVersion, TypeError): + warnings.warn( + "The version specified (%r) is an invalid version, this " + "may not work as expected with newer versions of " + "setuptools, pip, and PyPI. Please see PEP 440 for more " + "details." % self.metadata.version + ) + self._finalize_requires() + + def _finalize_requires(self): + """ + Set `metadata.python_requires` and fix environment markers + in `install_requires` and `extras_require`. + """ + if getattr(self, 'python_requires', None): + self.metadata.python_requires = self.python_requires + + if getattr(self, 'extras_require', None): + for extra in self.extras_require.keys(): + # Since this gets called multiple times at points where the + # keys have become 'converted' extras, ensure that we are only + # truly adding extras we haven't seen before here. + extra = extra.split(':')[0] + if extra: + self.metadata.provides_extras.add(extra) + + self._convert_extras_requirements() + self._move_install_requirements_markers() + + def _convert_extras_requirements(self): + """ + Convert requirements in `extras_require` of the form + `"extra": ["barbazquux; {marker}"]` to + `"extra:{marker}": ["barbazquux"]`. + """ + spec_ext_reqs = getattr(self, 'extras_require', None) or {} + self._tmp_extras_require = defaultdict(list) + for section, v in spec_ext_reqs.items(): + # Do not strip empty sections. + self._tmp_extras_require[section] + for r in pkg_resources.parse_requirements(v): + suffix = self._suffix_for(r) + self._tmp_extras_require[section + suffix].append(r) + + @staticmethod + def _suffix_for(req): + """ + For a requirement, return the 'extras_require' suffix for + that requirement. + """ + return ':' + str(req.marker) if req.marker else '' + + def _move_install_requirements_markers(self): + """ + Move requirements in `install_requires` that are using environment + markers `extras_require`. + """ + + # divide the install_requires into two sets, simple ones still + # handled by install_requires and more complex ones handled + # by extras_require. + + def is_simple_req(req): + return not req.marker + + spec_inst_reqs = getattr(self, 'install_requires', None) or () + inst_reqs = list(pkg_resources.parse_requirements(spec_inst_reqs)) + simple_reqs = filter(is_simple_req, inst_reqs) + complex_reqs = filterfalse(is_simple_req, inst_reqs) + self.install_requires = list(map(str, simple_reqs)) + + for r in complex_reqs: + self._tmp_extras_require[':' + str(r.marker)].append(r) + self.extras_require = dict( + (k, [str(r) for r in map(self._clean_req, v)]) + for k, v in self._tmp_extras_require.items() + ) + + def _clean_req(self, req): + """ + Given a Requirement, remove environment markers and return it. + """ + req.marker = None + return req + + def parse_config_files(self, filenames=None, ignore_option_errors=False): + """Parses configuration files from various levels + and loads configuration. + + """ + _Distribution.parse_config_files(self, filenames=filenames) + + parse_configuration(self, self.command_options, + ignore_option_errors=ignore_option_errors) + self._finalize_requires() + + def parse_command_line(self): + """Process features after parsing command line options""" + result = _Distribution.parse_command_line(self) + if self.features: + self._finalize_features() + return result + + def _feature_attrname(self, name): + """Convert feature name to corresponding option attribute name""" + return 'with_' + name.replace('-', '_') + + def fetch_build_eggs(self, requires): + """Resolve pre-setup requirements""" + resolved_dists = pkg_resources.working_set.resolve( + pkg_resources.parse_requirements(requires), + installer=self.fetch_build_egg, + replace_conflicting=True, + ) + for dist in resolved_dists: + pkg_resources.working_set.add(dist, replace=True) + return resolved_dists + + def finalize_options(self): + _Distribution.finalize_options(self) + if self.features: + self._set_global_opts_from_features() + + for ep in pkg_resources.iter_entry_points('distutils.setup_keywords'): + value = getattr(self, ep.name, None) + if value is not None: + ep.require(installer=self.fetch_build_egg) + ep.load()(self, ep.name, value) + if getattr(self, 'convert_2to3_doctests', None): + # XXX may convert to set here when we can rely on set being builtin + self.convert_2to3_doctests = [ + os.path.abspath(p) + for p in self.convert_2to3_doctests + ] + else: + self.convert_2to3_doctests = [] + + def get_egg_cache_dir(self): + egg_cache_dir = os.path.join(os.curdir, '.eggs') + if not os.path.exists(egg_cache_dir): + os.mkdir(egg_cache_dir) + windows_support.hide_file(egg_cache_dir) + readme_txt_filename = os.path.join(egg_cache_dir, 'README.txt') + with open(readme_txt_filename, 'w') as f: + f.write('This directory contains eggs that were downloaded ' + 'by setuptools to build, test, and run plug-ins.\n\n') + f.write('This directory caches those eggs to prevent ' + 'repeated downloads.\n\n') + f.write('However, it is safe to delete this directory.\n\n') + + return egg_cache_dir + + def fetch_build_egg(self, req): + """Fetch an egg needed for building""" + from setuptools.command.easy_install import easy_install + dist = self.__class__({'script_args': ['easy_install']}) + opts = dist.get_option_dict('easy_install') + opts.clear() + opts.update( + (k, v) + for k, v in self.get_option_dict('easy_install').items() + if k in ( + # don't use any other settings + 'find_links', 'site_dirs', 'index_url', + 'optimize', 'site_dirs', 'allow_hosts', + )) + if self.dependency_links: + links = self.dependency_links[:] + if 'find_links' in opts: + links = opts['find_links'][1] + links + opts['find_links'] = ('setup', links) + install_dir = self.get_egg_cache_dir() + cmd = easy_install( + dist, args=["x"], install_dir=install_dir, + exclude_scripts=True, + always_copy=False, build_directory=None, editable=False, + upgrade=False, multi_version=True, no_report=True, user=False + ) + cmd.ensure_finalized() + return cmd.easy_install(req) + + def _set_global_opts_from_features(self): + """Add --with-X/--without-X options based on optional features""" + + go = [] + no = self.negative_opt.copy() + + for name, feature in self.features.items(): + self._set_feature(name, None) + feature.validate(self) + + if feature.optional: + descr = feature.description + incdef = ' (default)' + excdef = '' + if not feature.include_by_default(): + excdef, incdef = incdef, excdef + + new = ( + ('with-' + name, None, 'include ' + descr + incdef), + ('without-' + name, None, 'exclude ' + descr + excdef), + ) + go.extend(new) + no['without-' + name] = 'with-' + name + + self.global_options = self.feature_options = go + self.global_options + self.negative_opt = self.feature_negopt = no + + def _finalize_features(self): + """Add/remove features and resolve dependencies between them""" + + # First, flag all the enabled items (and thus their dependencies) + for name, feature in self.features.items(): + enabled = self.feature_is_included(name) + if enabled or (enabled is None and feature.include_by_default()): + feature.include_in(self) + self._set_feature(name, 1) + + # Then disable the rest, so that off-by-default features don't + # get flagged as errors when they're required by an enabled feature + for name, feature in self.features.items(): + if not self.feature_is_included(name): + feature.exclude_from(self) + self._set_feature(name, 0) + + def get_command_class(self, command): + """Pluggable version of get_command_class()""" + if command in self.cmdclass: + return self.cmdclass[command] + + eps = pkg_resources.iter_entry_points('distutils.commands', command) + for ep in eps: + ep.require(installer=self.fetch_build_egg) + self.cmdclass[command] = cmdclass = ep.load() + return cmdclass + else: + return _Distribution.get_command_class(self, command) + + def print_commands(self): + for ep in pkg_resources.iter_entry_points('distutils.commands'): + if ep.name not in self.cmdclass: + # don't require extras as the commands won't be invoked + cmdclass = ep.resolve() + self.cmdclass[ep.name] = cmdclass + return _Distribution.print_commands(self) + + def get_command_list(self): + for ep in pkg_resources.iter_entry_points('distutils.commands'): + if ep.name not in self.cmdclass: + # don't require extras as the commands won't be invoked + cmdclass = ep.resolve() + self.cmdclass[ep.name] = cmdclass + return _Distribution.get_command_list(self) + + def _set_feature(self, name, status): + """Set feature's inclusion status""" + setattr(self, self._feature_attrname(name), status) + + def feature_is_included(self, name): + """Return 1 if feature is included, 0 if excluded, 'None' if unknown""" + return getattr(self, self._feature_attrname(name)) + + def include_feature(self, name): + """Request inclusion of feature named 'name'""" + + if self.feature_is_included(name) == 0: + descr = self.features[name].description + raise DistutilsOptionError( + descr + " is required, but was excluded or is not available" + ) + self.features[name].include_in(self) + self._set_feature(name, 1) + + def include(self, **attrs): + """Add items to distribution that are named in keyword arguments + + For example, 'dist.exclude(py_modules=["x"])' would add 'x' to + the distribution's 'py_modules' attribute, if it was not already + there. + + Currently, this method only supports inclusion for attributes that are + lists or tuples. If you need to add support for adding to other + attributes in this or a subclass, you can add an '_include_X' method, + where 'X' is the name of the attribute. The method will be called with + the value passed to 'include()'. So, 'dist.include(foo={"bar":"baz"})' + will try to call 'dist._include_foo({"bar":"baz"})', which can then + handle whatever special inclusion logic is needed. + """ + for k, v in attrs.items(): + include = getattr(self, '_include_' + k, None) + if include: + include(v) + else: + self._include_misc(k, v) + + def exclude_package(self, package): + """Remove packages, modules, and extensions in named package""" + + pfx = package + '.' + if self.packages: + self.packages = [ + p for p in self.packages + if p != package and not p.startswith(pfx) + ] + + if self.py_modules: + self.py_modules = [ + p for p in self.py_modules + if p != package and not p.startswith(pfx) + ] + + if self.ext_modules: + self.ext_modules = [ + p for p in self.ext_modules + if p.name != package and not p.name.startswith(pfx) + ] + + def has_contents_for(self, package): + """Return true if 'exclude_package(package)' would do something""" + + pfx = package + '.' + + for p in self.iter_distribution_names(): + if p == package or p.startswith(pfx): + return True + + def _exclude_misc(self, name, value): + """Handle 'exclude()' for list/tuple attrs without a special handler""" + if not isinstance(value, sequence): + raise DistutilsSetupError( + "%s: setting must be a list or tuple (%r)" % (name, value) + ) + try: + old = getattr(self, name) + except AttributeError: + raise DistutilsSetupError( + "%s: No such distribution setting" % name + ) + if old is not None and not isinstance(old, sequence): + raise DistutilsSetupError( + name + ": this setting cannot be changed via include/exclude" + ) + elif old: + setattr(self, name, [item for item in old if item not in value]) + + def _include_misc(self, name, value): + """Handle 'include()' for list/tuple attrs without a special handler""" + + if not isinstance(value, sequence): + raise DistutilsSetupError( + "%s: setting must be a list (%r)" % (name, value) + ) + try: + old = getattr(self, name) + except AttributeError: + raise DistutilsSetupError( + "%s: No such distribution setting" % name + ) + if old is None: + setattr(self, name, value) + elif not isinstance(old, sequence): + raise DistutilsSetupError( + name + ": this setting cannot be changed via include/exclude" + ) + else: + new = [item for item in value if item not in old] + setattr(self, name, old + new) + + def exclude(self, **attrs): + """Remove items from distribution that are named in keyword arguments + + For example, 'dist.exclude(py_modules=["x"])' would remove 'x' from + the distribution's 'py_modules' attribute. Excluding packages uses + the 'exclude_package()' method, so all of the package's contained + packages, modules, and extensions are also excluded. + + Currently, this method only supports exclusion from attributes that are + lists or tuples. If you need to add support for excluding from other + attributes in this or a subclass, you can add an '_exclude_X' method, + where 'X' is the name of the attribute. The method will be called with + the value passed to 'exclude()'. So, 'dist.exclude(foo={"bar":"baz"})' + will try to call 'dist._exclude_foo({"bar":"baz"})', which can then + handle whatever special exclusion logic is needed. + """ + for k, v in attrs.items(): + exclude = getattr(self, '_exclude_' + k, None) + if exclude: + exclude(v) + else: + self._exclude_misc(k, v) + + def _exclude_packages(self, packages): + if not isinstance(packages, sequence): + raise DistutilsSetupError( + "packages: setting must be a list or tuple (%r)" % (packages,) + ) + list(map(self.exclude_package, packages)) + + def _parse_command_opts(self, parser, args): + # Remove --with-X/--without-X options when processing command args + self.global_options = self.__class__.global_options + self.negative_opt = self.__class__.negative_opt + + # First, expand any aliases + command = args[0] + aliases = self.get_option_dict('aliases') + while command in aliases: + src, alias = aliases[command] + del aliases[command] # ensure each alias can expand only once! + import shlex + args[:1] = shlex.split(alias, True) + command = args[0] + + nargs = _Distribution._parse_command_opts(self, parser, args) + + # Handle commands that want to consume all remaining arguments + cmd_class = self.get_command_class(command) + if getattr(cmd_class, 'command_consumes_arguments', None): + self.get_option_dict(command)['args'] = ("command line", nargs) + if nargs is not None: + return [] + + return nargs + + def get_cmdline_options(self): + """Return a '{cmd: {opt:val}}' map of all command-line options + + Option names are all long, but do not include the leading '--', and + contain dashes rather than underscores. If the option doesn't take + an argument (e.g. '--quiet'), the 'val' is 'None'. + + Note that options provided by config files are intentionally excluded. + """ + + d = {} + + for cmd, opts in self.command_options.items(): + + for opt, (src, val) in opts.items(): + + if src != "command line": + continue + + opt = opt.replace('_', '-') + + if val == 0: + cmdobj = self.get_command_obj(cmd) + neg_opt = self.negative_opt.copy() + neg_opt.update(getattr(cmdobj, 'negative_opt', {})) + for neg, pos in neg_opt.items(): + if pos == opt: + opt = neg + val = None + break + else: + raise AssertionError("Shouldn't be able to get here") + + elif val == 1: + val = None + + d.setdefault(cmd, {})[opt] = val + + return d + + def iter_distribution_names(self): + """Yield all packages, modules, and extension names in distribution""" + + for pkg in self.packages or (): + yield pkg + + for module in self.py_modules or (): + yield module + + for ext in self.ext_modules or (): + if isinstance(ext, tuple): + name, buildinfo = ext + else: + name = ext.name + if name.endswith('module'): + name = name[:-6] + yield name + + def handle_display_options(self, option_order): + """If there were any non-global "display-only" options + (--help-commands or the metadata display options) on the command + line, display the requested info and return true; else return + false. + """ + import sys + + if six.PY2 or self.help_commands: + return _Distribution.handle_display_options(self, option_order) + + # Stdout may be StringIO (e.g. in tests) + import io + if not isinstance(sys.stdout, io.TextIOWrapper): + return _Distribution.handle_display_options(self, option_order) + + # Don't wrap stdout if utf-8 is already the encoding. Provides + # workaround for #334. + if sys.stdout.encoding.lower() in ('utf-8', 'utf8'): + return _Distribution.handle_display_options(self, option_order) + + # Print metadata in UTF-8 no matter the platform + encoding = sys.stdout.encoding + errors = sys.stdout.errors + newline = sys.platform != 'win32' and '\n' or None + line_buffering = sys.stdout.line_buffering + + sys.stdout = io.TextIOWrapper( + sys.stdout.detach(), 'utf-8', errors, newline, line_buffering) + try: + return _Distribution.handle_display_options(self, option_order) + finally: + sys.stdout = io.TextIOWrapper( + sys.stdout.detach(), encoding, errors, newline, line_buffering) + + +class Feature: + """ + **deprecated** -- The `Feature` facility was never completely implemented + or supported, `has reported issues + <https://github.com/pypa/setuptools/issues/58>`_ and will be removed in + a future version. + + A subset of the distribution that can be excluded if unneeded/wanted + + Features are created using these keyword arguments: + + 'description' -- a short, human readable description of the feature, to + be used in error messages, and option help messages. + + 'standard' -- if true, the feature is included by default if it is + available on the current system. Otherwise, the feature is only + included if requested via a command line '--with-X' option, or if + another included feature requires it. The default setting is 'False'. + + 'available' -- if true, the feature is available for installation on the + current system. The default setting is 'True'. + + 'optional' -- if true, the feature's inclusion can be controlled from the + command line, using the '--with-X' or '--without-X' options. If + false, the feature's inclusion status is determined automatically, + based on 'availabile', 'standard', and whether any other feature + requires it. The default setting is 'True'. + + 'require_features' -- a string or sequence of strings naming features + that should also be included if this feature is included. Defaults to + empty list. May also contain 'Require' objects that should be + added/removed from the distribution. + + 'remove' -- a string or list of strings naming packages to be removed + from the distribution if this feature is *not* included. If the + feature *is* included, this argument is ignored. This argument exists + to support removing features that "crosscut" a distribution, such as + defining a 'tests' feature that removes all the 'tests' subpackages + provided by other features. The default for this argument is an empty + list. (Note: the named package(s) or modules must exist in the base + distribution when the 'setup()' function is initially called.) + + other keywords -- any other keyword arguments are saved, and passed to + the distribution's 'include()' and 'exclude()' methods when the + feature is included or excluded, respectively. So, for example, you + could pass 'packages=["a","b"]' to cause packages 'a' and 'b' to be + added or removed from the distribution as appropriate. + + A feature must include at least one 'requires', 'remove', or other + keyword argument. Otherwise, it can't affect the distribution in any way. + Note also that you can subclass 'Feature' to create your own specialized + feature types that modify the distribution in other ways when included or + excluded. See the docstrings for the various methods here for more detail. + Aside from the methods, the only feature attributes that distributions look + at are 'description' and 'optional'. + """ + + @staticmethod + def warn_deprecated(): + msg = ( + "Features are deprecated and will be removed in a future " + "version. See https://github.com/pypa/setuptools/issues/65." + ) + warnings.warn(msg, DeprecationWarning, stacklevel=3) + + def __init__( + self, description, standard=False, available=True, + optional=True, require_features=(), remove=(), **extras): + self.warn_deprecated() + + self.description = description + self.standard = standard + self.available = available + self.optional = optional + if isinstance(require_features, (str, Require)): + require_features = require_features, + + self.require_features = [ + r for r in require_features if isinstance(r, str) + ] + er = [r for r in require_features if not isinstance(r, str)] + if er: + extras['require_features'] = er + + if isinstance(remove, str): + remove = remove, + self.remove = remove + self.extras = extras + + if not remove and not require_features and not extras: + raise DistutilsSetupError( + "Feature %s: must define 'require_features', 'remove', or " + "at least one of 'packages', 'py_modules', etc." + ) + + def include_by_default(self): + """Should this feature be included by default?""" + return self.available and self.standard + + def include_in(self, dist): + """Ensure feature and its requirements are included in distribution + + You may override this in a subclass to perform additional operations on + the distribution. Note that this method may be called more than once + per feature, and so should be idempotent. + + """ + + if not self.available: + raise DistutilsPlatformError( + self.description + " is required, " + "but is not available on this platform" + ) + + dist.include(**self.extras) + + for f in self.require_features: + dist.include_feature(f) + + def exclude_from(self, dist): + """Ensure feature is excluded from distribution + + You may override this in a subclass to perform additional operations on + the distribution. This method will be called at most once per + feature, and only after all included features have been asked to + include themselves. + """ + + dist.exclude(**self.extras) + + if self.remove: + for item in self.remove: + dist.exclude_package(item) + + def validate(self, dist): + """Verify that feature makes sense in context of distribution + + This method is called by the distribution just before it parses its + command line. It checks to ensure that the 'remove' attribute, if any, + contains only valid package/module names that are present in the base + distribution when 'setup()' is called. You may override it in a + subclass to perform any other required validation of the feature + against a target distribution. + """ + + for item in self.remove: + if not dist.has_contents_for(item): + raise DistutilsSetupError( + "%s wants to be able to remove %s, but the distribution" + " doesn't contain any packages or modules under %s" + % (self.description, item, item) + ) diff --git a/week-0/day-3/my_todo_app/venvironment/lib/python3.6/site-packages/setuptools/extension.py b/week-0/day-3/my_todo_app/venvironment/lib/python3.6/site-packages/setuptools/extension.py new file mode 100644 index 00000000..29468894 --- /dev/null +++ b/week-0/day-3/my_todo_app/venvironment/lib/python3.6/site-packages/setuptools/extension.py @@ -0,0 +1,57 @@ +import re +import functools +import distutils.core +import distutils.errors +import distutils.extension + +from setuptools.extern.six.moves import map + +from .monkey import get_unpatched + + +def _have_cython(): + """ + Return True if Cython can be imported. + """ + cython_impl = 'Cython.Distutils.build_ext' + try: + # from (cython_impl) import build_ext + __import__(cython_impl, fromlist=['build_ext']).build_ext + return True + except Exception: + pass + return False + + +# for compatibility +have_pyrex = _have_cython + +_Extension = get_unpatched(distutils.core.Extension) + + +class Extension(_Extension): + """Extension that uses '.c' files in place of '.pyx' files""" + + def __init__(self, name, sources, *args, **kw): + # The *args is needed for compatibility as calls may use positional + # arguments. py_limited_api may be set only via keyword. + self.py_limited_api = kw.pop("py_limited_api", False) + _Extension.__init__(self, name, sources, *args, **kw) + + def _convert_pyx_sources_to_lang(self): + """ + Replace sources with .pyx extensions to sources with the target + language extension. This mechanism allows language authors to supply + pre-converted sources but to prefer the .pyx sources. + """ + if _have_cython(): + # the build has Cython, so allow it to compile the .pyx files + return + lang = self.language or '' + target_ext = '.cpp' if lang.lower() == 'c++' else '.c' + sub = functools.partial(re.sub, '.pyx$', target_ext) + self.sources = list(map(sub, self.sources)) + + +class Library(Extension): + """Just like a regular Extension, but built as a library instead""" diff --git a/week-0/day-3/my_todo_app/venvironment/lib/python3.6/site-packages/setuptools/extern/__init__.py b/week-0/day-3/my_todo_app/venvironment/lib/python3.6/site-packages/setuptools/extern/__init__.py new file mode 100644 index 00000000..da3d668d --- /dev/null +++ b/week-0/day-3/my_todo_app/venvironment/lib/python3.6/site-packages/setuptools/extern/__init__.py @@ -0,0 +1,73 @@ +import sys + + +class VendorImporter: + """ + A PEP 302 meta path importer for finding optionally-vendored + or otherwise naturally-installed packages from root_name. + """ + + def __init__(self, root_name, vendored_names=(), vendor_pkg=None): + self.root_name = root_name + self.vendored_names = set(vendored_names) + self.vendor_pkg = vendor_pkg or root_name.replace('extern', '_vendor') + + @property + def search_path(self): + """ + Search first the vendor package then as a natural package. + """ + yield self.vendor_pkg + '.' + yield '' + + def find_module(self, fullname, path=None): + """ + Return self when fullname starts with root_name and the + target module is one vendored through this importer. + """ + root, base, target = fullname.partition(self.root_name + '.') + if root: + return + if not any(map(target.startswith, self.vendored_names)): + return + return self + + def load_module(self, fullname): + """ + Iterate over the search path to locate and load fullname. + """ + root, base, target = fullname.partition(self.root_name + '.') + for prefix in self.search_path: + try: + extant = prefix + target + __import__(extant) + mod = sys.modules[extant] + sys.modules[fullname] = mod + # mysterious hack: + # Remove the reference to the extant package/module + # on later Python versions to cause relative imports + # in the vendor package to resolve the same modules + # as those going through this importer. + if sys.version_info > (3, 3): + del sys.modules[extant] + return mod + except ImportError: + pass + else: + raise ImportError( + "The '{target}' package is required; " + "normally this is bundled with this package so if you get " + "this warning, consult the packager of your " + "distribution.".format(**locals()) + ) + + def install(self): + """ + Install this importer into sys.meta_path if not already present. + """ + if self not in sys.meta_path: + sys.meta_path.append(self) + + +names = 'six', 'packaging', 'pyparsing', +VendorImporter(__name__, names, 'setuptools._vendor').install() diff --git a/week-0/day-3/my_todo_app/venvironment/lib/python3.6/site-packages/setuptools/extern/__pycache__/__init__.cpython-36.pyc b/week-0/day-3/my_todo_app/venvironment/lib/python3.6/site-packages/setuptools/extern/__pycache__/__init__.cpython-36.pyc new file mode 100644 index 0000000000000000000000000000000000000000..c9be198c782d42ad512312422be36a8fb5f34366 GIT binary patch literal 2387 zcmZ`)-HsbI6t?Ftli6$vmDr_4U0Fh+8bq^&B7vZwMYKW{C@O8$LPRy1jh)@ePG+XI z(`~}!hOD?k-0=`R2XEn9uKEgGagHb1-F8(+K6b|T@$vaSf4;T38D0AEv#0;G3Hg_t zD<1UspsF4iPB_iUfP6=|!`&0Y-K8_2JRCTJ3RgJ1wRFecl2DlUki_kmu!i)9XxGJs z&K^{C2aF)FnhYFH2kr=bj=(GTPUyfBKKFTWLY8z8@J-(0A$)D|HjhroAmkgo18ti- zuuIo;AB%#Q^4_E>r51925-}*>u={uKvs*VmVH2TKR;BuoWveM{R7y6=3Z4}QtgLia z7HOW(ZalY+1h)=gN~sTpJkFG0MXIOL&dCa;p(8lB93G_yLa~u7Crp;5PKtCQdUkbx zh^fPZEgt(@sOkeSHLXcPG_9Q__MF<Sc4|6yIpxmMfiE5>a4@%T0`US4RG3!ML>Bv| zeY%fvmC&ZUj@j<5OiPL?Plv)p%|KEe9mJmTl*mWYhuvih4d6`vCUOIs|MqtEq}r{r z>c;*w%lVD$`O#r9RALwWPb*!PxjNr%V%klTtjKhd^s1Q&*MB1Lrvfm91~j7c?Z>Y` z(_7CQQk(+?TL&tVL~Vho$r#wPO&%kQ9BW-jhByDgrWKKWC{j5*1pK7Z3=m??N!NJb zr-G%5rEApIBMma>!qA=}{g~Q3K!b7HWHhD&f6a!n`y|MmOBkL7)bG&w)z?mSZsHJ; z#)3(}1s3(sp#uox;V2$%Nq=z{?!sI6wJUd!#@f+t?T<Z};V*#~>Qnq$TOQ1RKRx;b zKtvV{!DPpH%+WN@k#r15DYat98PNQcA}lR9rsH%yOga#nO-eq^1<MpGi*@>d(E3o8 z(}P23VPt(*&XOj(aEyK&n05twWq4~Wql}vtGviLu%0x{V7=`6o9N5&Fa2==dFrCK3 z5RJE=Dq(^qs0-=G`<XP6Zo|e3K_UJY_273I>IE3iEf^xFu!K-?p@rcO=v;uoK_FgK zka*_~dHQJK&%UVr+S?|J03ZpLloIWY{W`cp7OlEv`}8(`3%Gye$w4#v6{%Yf0dd_r zieyEBy_Eb+p6&bu^$C3C?l>F~-CmME>5~3Nxd*Hc=HH(}a}REMss$^b3yGKk$d=|- zxOB<#a)`r-XkMoL6#3Wid5Hv^|MdtQT>rJn?Be?R0wCg2Jey`x@Gn_W$_Yx^3U9^s zrv*o0vm~-4SV<gHCCf%^R!$kx#||B*vH<z~hz-j^P4ng^uI7Vs+S!uvOlg_zPmwIW ze(cEiAUtd0NWP7It4VJ`&qSaOR-lsvv~31j)}XIU2Xdmo14z!OG#ic5-<7hICIBg) zq}l|SpIpUZbC=&i*GL=rE}ARoKd7V_WiPC%riBK^miz+iFt;n#y$_4j4jAHX(GGQJ z2)~F%K?JQwyEJkf8n_pDc+SNIowGc=3NCA+K@5&satqrr$UZX7zMIbc!5J%>*XGqL z$+7|n0U7Gy(`E$<;VDYZ(p-v^&lnt4i9(-|qaVBS8tiM@r)x}*Ru$;;8}zTWdg=CH zRik|#DEiiG+P9h%(|#P`JAh&Y_yLv;c+l@8$+Kx{WeWbal7yGTB$1mKO<2jY5>n43 zQb1y6B)*X{MuX4OIfEBj;>|{3wR#YGp40U^Vblq)*%2TPAPfS9PczUHx-(EK1>O1O xv-hmGeo$Sxi%xH%`4~*>+blJ{d_0VjAL8Jf;xXav=Ad8WQ)b`3(Cyyw=>M^BbOita literal 0 HcmV?d00001 diff --git a/week-0/day-3/my_todo_app/venvironment/lib/python3.6/site-packages/setuptools/glibc.py b/week-0/day-3/my_todo_app/venvironment/lib/python3.6/site-packages/setuptools/glibc.py new file mode 100644 index 00000000..a134591c --- /dev/null +++ b/week-0/day-3/my_todo_app/venvironment/lib/python3.6/site-packages/setuptools/glibc.py @@ -0,0 +1,86 @@ +# This file originally from pip: +# https://github.com/pypa/pip/blob/8f4f15a5a95d7d5b511ceaee9ed261176c181970/src/pip/_internal/utils/glibc.py +from __future__ import absolute_import + +import ctypes +import re +import warnings + + +def glibc_version_string(): + "Returns glibc version string, or None if not using glibc." + + # ctypes.CDLL(None) internally calls dlopen(NULL), and as the dlopen + # manpage says, "If filename is NULL, then the returned handle is for the + # main program". This way we can let the linker do the work to figure out + # which libc our process is actually using. + process_namespace = ctypes.CDLL(None) + try: + gnu_get_libc_version = process_namespace.gnu_get_libc_version + except AttributeError: + # Symbol doesn't exist -> therefore, we are not linked to + # glibc. + return None + + # Call gnu_get_libc_version, which returns a string like "2.5" + gnu_get_libc_version.restype = ctypes.c_char_p + version_str = gnu_get_libc_version() + # py2 / py3 compatibility: + if not isinstance(version_str, str): + version_str = version_str.decode("ascii") + + return version_str + + +# Separated out from have_compatible_glibc for easier unit testing +def check_glibc_version(version_str, required_major, minimum_minor): + # Parse string and check against requested version. + # + # We use a regexp instead of str.split because we want to discard any + # random junk that might come after the minor version -- this might happen + # in patched/forked versions of glibc (e.g. Linaro's version of glibc + # uses version strings like "2.20-2014.11"). See gh-3588. + m = re.match(r"(?P<major>[0-9]+)\.(?P<minor>[0-9]+)", version_str) + if not m: + warnings.warn("Expected glibc version with 2 components major.minor," + " got: %s" % version_str, RuntimeWarning) + return False + return (int(m.group("major")) == required_major and + int(m.group("minor")) >= minimum_minor) + + +def have_compatible_glibc(required_major, minimum_minor): + version_str = glibc_version_string() + if version_str is None: + return False + return check_glibc_version(version_str, required_major, minimum_minor) + + +# platform.libc_ver regularly returns completely nonsensical glibc +# versions. E.g. on my computer, platform says: +# +# ~$ python2.7 -c 'import platform; print(platform.libc_ver())' +# ('glibc', '2.7') +# ~$ python3.5 -c 'import platform; print(platform.libc_ver())' +# ('glibc', '2.9') +# +# But the truth is: +# +# ~$ ldd --version +# ldd (Debian GLIBC 2.22-11) 2.22 +# +# This is unfortunate, because it means that the linehaul data on libc +# versions that was generated by pip 8.1.2 and earlier is useless and +# misleading. Solution: instead of using platform, use our code that actually +# works. +def libc_ver(): + """Try to determine the glibc version + + Returns a tuple of strings (lib, version) which default to empty strings + in case the lookup fails. + """ + glibc_version = glibc_version_string() + if glibc_version is None: + return ("", "") + else: + return ("glibc", glibc_version) diff --git a/week-0/day-3/my_todo_app/venvironment/lib/python3.6/site-packages/setuptools/glob.py b/week-0/day-3/my_todo_app/venvironment/lib/python3.6/site-packages/setuptools/glob.py new file mode 100644 index 00000000..6c781de3 --- /dev/null +++ b/week-0/day-3/my_todo_app/venvironment/lib/python3.6/site-packages/setuptools/glob.py @@ -0,0 +1,176 @@ +""" +Filename globbing utility. Mostly a copy of `glob` from Python 3.5. + +Changes include: + * `yield from` and PEP3102 `*` removed. + * `bytes` changed to `six.binary_type`. + * Hidden files are not ignored. +""" + +import os +import re +import fnmatch +from setuptools.extern.six import binary_type + +__all__ = ["glob", "iglob", "escape"] + + +def glob(pathname, recursive=False): + """Return a list of paths matching a pathname pattern. + + The pattern may contain simple shell-style wildcards a la + fnmatch. However, unlike fnmatch, filenames starting with a + dot are special cases that are not matched by '*' and '?' + patterns. + + If recursive is true, the pattern '**' will match any files and + zero or more directories and subdirectories. + """ + return list(iglob(pathname, recursive=recursive)) + + +def iglob(pathname, recursive=False): + """Return an iterator which yields the paths matching a pathname pattern. + + The pattern may contain simple shell-style wildcards a la + fnmatch. However, unlike fnmatch, filenames starting with a + dot are special cases that are not matched by '*' and '?' + patterns. + + If recursive is true, the pattern '**' will match any files and + zero or more directories and subdirectories. + """ + it = _iglob(pathname, recursive) + if recursive and _isrecursive(pathname): + s = next(it) # skip empty string + assert not s + return it + + +def _iglob(pathname, recursive): + dirname, basename = os.path.split(pathname) + if not has_magic(pathname): + if basename: + if os.path.lexists(pathname): + yield pathname + else: + # Patterns ending with a slash should match only directories + if os.path.isdir(dirname): + yield pathname + return + if not dirname: + if recursive and _isrecursive(basename): + for x in glob2(dirname, basename): + yield x + else: + for x in glob1(dirname, basename): + yield x + return + # `os.path.split()` returns the argument itself as a dirname if it is a + # drive or UNC path. Prevent an infinite recursion if a drive or UNC path + # contains magic characters (i.e. r'\\?\C:'). + if dirname != pathname and has_magic(dirname): + dirs = _iglob(dirname, recursive) + else: + dirs = [dirname] + if has_magic(basename): + if recursive and _isrecursive(basename): + glob_in_dir = glob2 + else: + glob_in_dir = glob1 + else: + glob_in_dir = glob0 + for dirname in dirs: + for name in glob_in_dir(dirname, basename): + yield os.path.join(dirname, name) + + +# These 2 helper functions non-recursively glob inside a literal directory. +# They return a list of basenames. `glob1` accepts a pattern while `glob0` +# takes a literal basename (so it only has to check for its existence). + + +def glob1(dirname, pattern): + if not dirname: + if isinstance(pattern, binary_type): + dirname = os.curdir.encode('ASCII') + else: + dirname = os.curdir + try: + names = os.listdir(dirname) + except OSError: + return [] + return fnmatch.filter(names, pattern) + + +def glob0(dirname, basename): + if not basename: + # `os.path.split()` returns an empty basename for paths ending with a + # directory separator. 'q*x/' should match only directories. + if os.path.isdir(dirname): + return [basename] + else: + if os.path.lexists(os.path.join(dirname, basename)): + return [basename] + return [] + + +# This helper function recursively yields relative pathnames inside a literal +# directory. + + +def glob2(dirname, pattern): + assert _isrecursive(pattern) + yield pattern[:0] + for x in _rlistdir(dirname): + yield x + + +# Recursively yields relative pathnames inside a literal directory. +def _rlistdir(dirname): + if not dirname: + if isinstance(dirname, binary_type): + dirname = binary_type(os.curdir, 'ASCII') + else: + dirname = os.curdir + try: + names = os.listdir(dirname) + except os.error: + return + for x in names: + yield x + path = os.path.join(dirname, x) if dirname else x + for y in _rlistdir(path): + yield os.path.join(x, y) + + +magic_check = re.compile('([*?[])') +magic_check_bytes = re.compile(b'([*?[])') + + +def has_magic(s): + if isinstance(s, binary_type): + match = magic_check_bytes.search(s) + else: + match = magic_check.search(s) + return match is not None + + +def _isrecursive(pattern): + if isinstance(pattern, binary_type): + return pattern == b'**' + else: + return pattern == '**' + + +def escape(pathname): + """Escape all special characters. + """ + # Escaping is done by wrapping any of "*?[" between square brackets. + # Metacharacters do not work in the drive part and shouldn't be escaped. + drive, pathname = os.path.splitdrive(pathname) + if isinstance(pathname, binary_type): + pathname = magic_check_bytes.sub(br'[\1]', pathname) + else: + pathname = magic_check.sub(r'[\1]', pathname) + return drive + pathname diff --git a/week-0/day-3/my_todo_app/venvironment/lib/python3.6/site-packages/setuptools/gui-32.exe b/week-0/day-3/my_todo_app/venvironment/lib/python3.6/site-packages/setuptools/gui-32.exe new file mode 100644 index 0000000000000000000000000000000000000000..f8d3509653ba8f80ca7f3aa7f95616142ba83a94 GIT binary patch literal 65536 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 literal 0 HcmV?d00001 diff --git a/week-0/day-3/my_todo_app/venvironment/lib/python3.6/site-packages/setuptools/gui-64.exe b/week-0/day-3/my_todo_app/venvironment/lib/python3.6/site-packages/setuptools/gui-64.exe new file mode 100644 index 0000000000000000000000000000000000000000..330c51a5dde15a0bb610a48cd0ca11770c914dae GIT binary patch literal 75264 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 literal 0 HcmV?d00001 diff --git a/week-0/day-3/my_todo_app/venvironment/lib/python3.6/site-packages/setuptools/gui.exe b/week-0/day-3/my_todo_app/venvironment/lib/python3.6/site-packages/setuptools/gui.exe new file mode 100644 index 0000000000000000000000000000000000000000..f8d3509653ba8f80ca7f3aa7f95616142ba83a94 GIT binary patch literal 65536 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 literal 0 HcmV?d00001 diff --git a/week-0/day-3/my_todo_app/venvironment/lib/python3.6/site-packages/setuptools/launch.py b/week-0/day-3/my_todo_app/venvironment/lib/python3.6/site-packages/setuptools/launch.py new file mode 100644 index 00000000..308283ea --- /dev/null +++ b/week-0/day-3/my_todo_app/venvironment/lib/python3.6/site-packages/setuptools/launch.py @@ -0,0 +1,35 @@ +""" +Launch the Python script on the command line after +setuptools is bootstrapped via import. +""" + +# Note that setuptools gets imported implicitly by the +# invocation of this script using python -m setuptools.launch + +import tokenize +import sys + + +def run(): + """ + Run the script in sys.argv[1] as if it had + been invoked naturally. + """ + __builtins__ + script_name = sys.argv[1] + namespace = dict( + __file__=script_name, + __name__='__main__', + __doc__=None, + ) + sys.argv[:] = sys.argv[1:] + + open_ = getattr(tokenize, 'open', open) + script = open_(script_name).read() + norm_script = script.replace('\\r\\n', '\\n') + code = compile(norm_script, script_name, 'exec') + exec(code, namespace) + + +if __name__ == '__main__': + run() diff --git a/week-0/day-3/my_todo_app/venvironment/lib/python3.6/site-packages/setuptools/lib2to3_ex.py b/week-0/day-3/my_todo_app/venvironment/lib/python3.6/site-packages/setuptools/lib2to3_ex.py new file mode 100644 index 00000000..4b1a73fe --- /dev/null +++ b/week-0/day-3/my_todo_app/venvironment/lib/python3.6/site-packages/setuptools/lib2to3_ex.py @@ -0,0 +1,62 @@ +""" +Customized Mixin2to3 support: + + - adds support for converting doctests + + +This module raises an ImportError on Python 2. +""" + +from distutils.util import Mixin2to3 as _Mixin2to3 +from distutils import log +from lib2to3.refactor import RefactoringTool, get_fixers_from_package + +import setuptools + + +class DistutilsRefactoringTool(RefactoringTool): + def log_error(self, msg, *args, **kw): + log.error(msg, *args) + + def log_message(self, msg, *args): + log.info(msg, *args) + + def log_debug(self, msg, *args): + log.debug(msg, *args) + + +class Mixin2to3(_Mixin2to3): + def run_2to3(self, files, doctests=False): + # See of the distribution option has been set, otherwise check the + # setuptools default. + if self.distribution.use_2to3 is not True: + return + if not files: + return + log.info("Fixing " + " ".join(files)) + self.__build_fixer_names() + self.__exclude_fixers() + if doctests: + if setuptools.run_2to3_on_doctests: + r = DistutilsRefactoringTool(self.fixer_names) + r.refactor(files, write=True, doctests_only=True) + else: + _Mixin2to3.run_2to3(self, files) + + def __build_fixer_names(self): + if self.fixer_names: + return + self.fixer_names = [] + for p in setuptools.lib2to3_fixer_packages: + self.fixer_names.extend(get_fixers_from_package(p)) + if self.distribution.use_2to3_fixers is not None: + for p in self.distribution.use_2to3_fixers: + self.fixer_names.extend(get_fixers_from_package(p)) + + def __exclude_fixers(self): + excluded_fixers = getattr(self, 'exclude_fixers', []) + if self.distribution.use_2to3_exclude_fixers is not None: + excluded_fixers.extend(self.distribution.use_2to3_exclude_fixers) + for fixer_name in excluded_fixers: + if fixer_name in self.fixer_names: + self.fixer_names.remove(fixer_name) diff --git a/week-0/day-3/my_todo_app/venvironment/lib/python3.6/site-packages/setuptools/monkey.py b/week-0/day-3/my_todo_app/venvironment/lib/python3.6/site-packages/setuptools/monkey.py new file mode 100644 index 00000000..d9eb7d7b --- /dev/null +++ b/week-0/day-3/my_todo_app/venvironment/lib/python3.6/site-packages/setuptools/monkey.py @@ -0,0 +1,197 @@ +""" +Monkey patching of distutils. +""" + +import sys +import distutils.filelist +import platform +import types +import functools +from importlib import import_module +import inspect + +from setuptools.extern import six + +import setuptools + +__all__ = [] +""" +Everything is private. Contact the project team +if you think you need this functionality. +""" + + +def _get_mro(cls): + """ + Returns the bases classes for cls sorted by the MRO. + + Works around an issue on Jython where inspect.getmro will not return all + base classes if multiple classes share the same name. Instead, this + function will return a tuple containing the class itself, and the contents + of cls.__bases__. See https://github.com/pypa/setuptools/issues/1024. + """ + if platform.python_implementation() == "Jython": + return (cls,) + cls.__bases__ + return inspect.getmro(cls) + + +def get_unpatched(item): + lookup = ( + get_unpatched_class if isinstance(item, six.class_types) else + get_unpatched_function if isinstance(item, types.FunctionType) else + lambda item: None + ) + return lookup(item) + + +def get_unpatched_class(cls): + """Protect against re-patching the distutils if reloaded + + Also ensures that no other distutils extension monkeypatched the distutils + first. + """ + external_bases = ( + cls + for cls in _get_mro(cls) + if not cls.__module__.startswith('setuptools') + ) + base = next(external_bases) + if not base.__module__.startswith('distutils'): + msg = "distutils has already been patched by %r" % cls + raise AssertionError(msg) + return base + + +def patch_all(): + # we can't patch distutils.cmd, alas + distutils.core.Command = setuptools.Command + + has_issue_12885 = sys.version_info <= (3, 5, 3) + + if has_issue_12885: + # fix findall bug in distutils (http://bugs.python.org/issue12885) + distutils.filelist.findall = setuptools.findall + + needs_warehouse = ( + sys.version_info < (2, 7, 13) + or + (3, 0) < sys.version_info < (3, 3, 7) + or + (3, 4) < sys.version_info < (3, 4, 6) + or + (3, 5) < sys.version_info <= (3, 5, 3) + ) + + if needs_warehouse: + warehouse = 'https://upload.pypi.org/legacy/' + distutils.config.PyPIRCCommand.DEFAULT_REPOSITORY = warehouse + + _patch_distribution_metadata_write_pkg_file() + _patch_distribution_metadata_write_pkg_info() + + # Install Distribution throughout the distutils + for module in distutils.dist, distutils.core, distutils.cmd: + module.Distribution = setuptools.dist.Distribution + + # Install the patched Extension + distutils.core.Extension = setuptools.extension.Extension + distutils.extension.Extension = setuptools.extension.Extension + if 'distutils.command.build_ext' in sys.modules: + sys.modules['distutils.command.build_ext'].Extension = ( + setuptools.extension.Extension + ) + + patch_for_msvc_specialized_compiler() + + +def _patch_distribution_metadata_write_pkg_file(): + """Patch write_pkg_file to also write Requires-Python/Requires-External""" + distutils.dist.DistributionMetadata.write_pkg_file = ( + setuptools.dist.write_pkg_file + ) + + +def _patch_distribution_metadata_write_pkg_info(): + """ + Workaround issue #197 - Python 3 prior to 3.2.2 uses an environment-local + encoding to save the pkg_info. Monkey-patch its write_pkg_info method to + correct this undesirable behavior. + """ + environment_local = (3,) <= sys.version_info[:3] < (3, 2, 2) + if not environment_local: + return + + distutils.dist.DistributionMetadata.write_pkg_info = ( + setuptools.dist.write_pkg_info + ) + + +def patch_func(replacement, target_mod, func_name): + """ + Patch func_name in target_mod with replacement + + Important - original must be resolved by name to avoid + patching an already patched function. + """ + original = getattr(target_mod, func_name) + + # set the 'unpatched' attribute on the replacement to + # point to the original. + vars(replacement).setdefault('unpatched', original) + + # replace the function in the original module + setattr(target_mod, func_name, replacement) + + +def get_unpatched_function(candidate): + return getattr(candidate, 'unpatched') + + +def patch_for_msvc_specialized_compiler(): + """ + Patch functions in distutils to use standalone Microsoft Visual C++ + compilers. + """ + # import late to avoid circular imports on Python < 3.5 + msvc = import_module('setuptools.msvc') + + if platform.system() != 'Windows': + # Compilers only availables on Microsoft Windows + return + + def patch_params(mod_name, func_name): + """ + Prepare the parameters for patch_func to patch indicated function. + """ + repl_prefix = 'msvc9_' if 'msvc9' in mod_name else 'msvc14_' + repl_name = repl_prefix + func_name.lstrip('_') + repl = getattr(msvc, repl_name) + mod = import_module(mod_name) + if not hasattr(mod, func_name): + raise ImportError(func_name) + return repl, mod, func_name + + # Python 2.7 to 3.4 + msvc9 = functools.partial(patch_params, 'distutils.msvc9compiler') + + # Python 3.5+ + msvc14 = functools.partial(patch_params, 'distutils._msvccompiler') + + try: + # Patch distutils.msvc9compiler + patch_func(*msvc9('find_vcvarsall')) + patch_func(*msvc9('query_vcvarsall')) + except ImportError: + pass + + try: + # Patch distutils._msvccompiler._get_vc_env + patch_func(*msvc14('_get_vc_env')) + except ImportError: + pass + + try: + # Patch distutils._msvccompiler.gen_lib_options for Numpy + patch_func(*msvc14('gen_lib_options')) + except ImportError: + pass diff --git a/week-0/day-3/my_todo_app/venvironment/lib/python3.6/site-packages/setuptools/msvc.py b/week-0/day-3/my_todo_app/venvironment/lib/python3.6/site-packages/setuptools/msvc.py new file mode 100644 index 00000000..5e20b3f1 --- /dev/null +++ b/week-0/day-3/my_todo_app/venvironment/lib/python3.6/site-packages/setuptools/msvc.py @@ -0,0 +1,1302 @@ +""" +Improved support for Microsoft Visual C++ compilers. + +Known supported compilers: +-------------------------- +Microsoft Visual C++ 9.0: + Microsoft Visual C++ Compiler for Python 2.7 (x86, amd64) + Microsoft Windows SDK 6.1 (x86, x64, ia64) + Microsoft Windows SDK 7.0 (x86, x64, ia64) + +Microsoft Visual C++ 10.0: + Microsoft Windows SDK 7.1 (x86, x64, ia64) + +Microsoft Visual C++ 14.0: + Microsoft Visual C++ Build Tools 2015 (x86, x64, arm) + Microsoft Visual Studio 2017 (x86, x64, arm, arm64) + Microsoft Visual Studio Build Tools 2017 (x86, x64, arm, arm64) +""" + +import os +import sys +import platform +import itertools +import distutils.errors +from setuptools.extern.packaging.version import LegacyVersion + +from setuptools.extern.six.moves import filterfalse + +from .monkey import get_unpatched + +if platform.system() == 'Windows': + from setuptools.extern.six.moves import winreg + safe_env = os.environ +else: + """ + Mock winreg and environ so the module can be imported + on this platform. + """ + + class winreg: + HKEY_USERS = None + HKEY_CURRENT_USER = None + HKEY_LOCAL_MACHINE = None + HKEY_CLASSES_ROOT = None + + safe_env = dict() + +_msvc9_suppress_errors = ( + # msvc9compiler isn't available on some platforms + ImportError, + + # msvc9compiler raises DistutilsPlatformError in some + # environments. See #1118. + distutils.errors.DistutilsPlatformError, +) + +try: + from distutils.msvc9compiler import Reg +except _msvc9_suppress_errors: + pass + + +def msvc9_find_vcvarsall(version): + """ + Patched "distutils.msvc9compiler.find_vcvarsall" to use the standalone + compiler build for Python (VCForPython). Fall back to original behavior + when the standalone compiler is not available. + + Redirect the path of "vcvarsall.bat". + + Known supported compilers + ------------------------- + Microsoft Visual C++ 9.0: + Microsoft Visual C++ Compiler for Python 2.7 (x86, amd64) + + Parameters + ---------- + version: float + Required Microsoft Visual C++ version. + + Return + ------ + vcvarsall.bat path: str + """ + VC_BASE = r'Software\%sMicrosoft\DevDiv\VCForPython\%0.1f' + key = VC_BASE % ('', version) + try: + # Per-user installs register the compiler path here + productdir = Reg.get_value(key, "installdir") + except KeyError: + try: + # All-user installs on a 64-bit system register here + key = VC_BASE % ('Wow6432Node\\', version) + productdir = Reg.get_value(key, "installdir") + except KeyError: + productdir = None + + if productdir: + vcvarsall = os.path.os.path.join(productdir, "vcvarsall.bat") + if os.path.isfile(vcvarsall): + return vcvarsall + + return get_unpatched(msvc9_find_vcvarsall)(version) + + +def msvc9_query_vcvarsall(ver, arch='x86', *args, **kwargs): + """ + Patched "distutils.msvc9compiler.query_vcvarsall" for support extra + compilers. + + Set environment without use of "vcvarsall.bat". + + Known supported compilers + ------------------------- + Microsoft Visual C++ 9.0: + Microsoft Visual C++ Compiler for Python 2.7 (x86, amd64) + Microsoft Windows SDK 6.1 (x86, x64, ia64) + Microsoft Windows SDK 7.0 (x86, x64, ia64) + + Microsoft Visual C++ 10.0: + Microsoft Windows SDK 7.1 (x86, x64, ia64) + + Parameters + ---------- + ver: float + Required Microsoft Visual C++ version. + arch: str + Target architecture. + + Return + ------ + environment: dict + """ + # Try to get environement from vcvarsall.bat (Classical way) + try: + orig = get_unpatched(msvc9_query_vcvarsall) + return orig(ver, arch, *args, **kwargs) + except distutils.errors.DistutilsPlatformError: + # Pass error if Vcvarsall.bat is missing + pass + except ValueError: + # Pass error if environment not set after executing vcvarsall.bat + pass + + # If error, try to set environment directly + try: + return EnvironmentInfo(arch, ver).return_env() + except distutils.errors.DistutilsPlatformError as exc: + _augment_exception(exc, ver, arch) + raise + + +def msvc14_get_vc_env(plat_spec): + """ + Patched "distutils._msvccompiler._get_vc_env" for support extra + compilers. + + Set environment without use of "vcvarsall.bat". + + Known supported compilers + ------------------------- + Microsoft Visual C++ 14.0: + Microsoft Visual C++ Build Tools 2015 (x86, x64, arm) + Microsoft Visual Studio 2017 (x86, x64, arm, arm64) + Microsoft Visual Studio Build Tools 2017 (x86, x64, arm, arm64) + + Parameters + ---------- + plat_spec: str + Target architecture. + + Return + ------ + environment: dict + """ + # Try to get environment from vcvarsall.bat (Classical way) + try: + return get_unpatched(msvc14_get_vc_env)(plat_spec) + except distutils.errors.DistutilsPlatformError: + # Pass error Vcvarsall.bat is missing + pass + + # If error, try to set environment directly + try: + return EnvironmentInfo(plat_spec, vc_min_ver=14.0).return_env() + except distutils.errors.DistutilsPlatformError as exc: + _augment_exception(exc, 14.0) + raise + + +def msvc14_gen_lib_options(*args, **kwargs): + """ + Patched "distutils._msvccompiler.gen_lib_options" for fix + compatibility between "numpy.distutils" and "distutils._msvccompiler" + (for Numpy < 1.11.2) + """ + if "numpy.distutils" in sys.modules: + import numpy as np + if LegacyVersion(np.__version__) < LegacyVersion('1.11.2'): + return np.distutils.ccompiler.gen_lib_options(*args, **kwargs) + return get_unpatched(msvc14_gen_lib_options)(*args, **kwargs) + + +def _augment_exception(exc, version, arch=''): + """ + Add details to the exception message to help guide the user + as to what action will resolve it. + """ + # Error if MSVC++ directory not found or environment not set + message = exc.args[0] + + if "vcvarsall" in message.lower() or "visual c" in message.lower(): + # Special error message if MSVC++ not installed + tmpl = 'Microsoft Visual C++ {version:0.1f} is required.' + message = tmpl.format(**locals()) + msdownload = 'www.microsoft.com/download/details.aspx?id=%d' + if version == 9.0: + if arch.lower().find('ia64') > -1: + # For VC++ 9.0, if IA64 support is needed, redirect user + # to Windows SDK 7.0 + message += ' Get it with "Microsoft Windows SDK 7.0": ' + message += msdownload % 3138 + else: + # For VC++ 9.0 redirect user to Vc++ for Python 2.7 : + # This redirection link is maintained by Microsoft. + # Contact vspython@microsoft.com if it needs updating. + message += ' Get it from http://aka.ms/vcpython27' + elif version == 10.0: + # For VC++ 10.0 Redirect user to Windows SDK 7.1 + message += ' Get it with "Microsoft Windows SDK 7.1": ' + message += msdownload % 8279 + elif version >= 14.0: + # For VC++ 14.0 Redirect user to Visual C++ Build Tools + message += (' Get it with "Microsoft Visual C++ Build Tools": ' + r'http://landinghub.visualstudio.com/' + 'visual-cpp-build-tools') + + exc.args = (message, ) + + +class PlatformInfo: + """ + Current and Target Architectures informations. + + Parameters + ---------- + arch: str + Target architecture. + """ + current_cpu = safe_env.get('processor_architecture', '').lower() + + def __init__(self, arch): + self.arch = arch.lower().replace('x64', 'amd64') + + @property + def target_cpu(self): + return self.arch[self.arch.find('_') + 1:] + + def target_is_x86(self): + return self.target_cpu == 'x86' + + def current_is_x86(self): + return self.current_cpu == 'x86' + + def current_dir(self, hidex86=False, x64=False): + """ + Current platform specific subfolder. + + Parameters + ---------- + hidex86: bool + return '' and not '\x86' if architecture is x86. + x64: bool + return '\x64' and not '\amd64' if architecture is amd64. + + Return + ------ + subfolder: str + '\target', or '' (see hidex86 parameter) + """ + return ( + '' if (self.current_cpu == 'x86' and hidex86) else + r'\x64' if (self.current_cpu == 'amd64' and x64) else + r'\%s' % self.current_cpu + ) + + def target_dir(self, hidex86=False, x64=False): + r""" + Target platform specific subfolder. + + Parameters + ---------- + hidex86: bool + return '' and not '\x86' if architecture is x86. + x64: bool + return '\x64' and not '\amd64' if architecture is amd64. + + Return + ------ + subfolder: str + '\current', or '' (see hidex86 parameter) + """ + return ( + '' if (self.target_cpu == 'x86' and hidex86) else + r'\x64' if (self.target_cpu == 'amd64' and x64) else + r'\%s' % self.target_cpu + ) + + def cross_dir(self, forcex86=False): + r""" + Cross platform specific subfolder. + + Parameters + ---------- + forcex86: bool + Use 'x86' as current architecture even if current acritecture is + not x86. + + Return + ------ + subfolder: str + '' if target architecture is current architecture, + '\current_target' if not. + """ + current = 'x86' if forcex86 else self.current_cpu + return ( + '' if self.target_cpu == current else + self.target_dir().replace('\\', '\\%s_' % current) + ) + + +class RegistryInfo: + """ + Microsoft Visual Studio related registry informations. + + Parameters + ---------- + platform_info: PlatformInfo + "PlatformInfo" instance. + """ + HKEYS = (winreg.HKEY_USERS, + winreg.HKEY_CURRENT_USER, + winreg.HKEY_LOCAL_MACHINE, + winreg.HKEY_CLASSES_ROOT) + + def __init__(self, platform_info): + self.pi = platform_info + + @property + def visualstudio(self): + """ + Microsoft Visual Studio root registry key. + """ + return 'VisualStudio' + + @property + def sxs(self): + """ + Microsoft Visual Studio SxS registry key. + """ + return os.path.join(self.visualstudio, 'SxS') + + @property + def vc(self): + """ + Microsoft Visual C++ VC7 registry key. + """ + return os.path.join(self.sxs, 'VC7') + + @property + def vs(self): + """ + Microsoft Visual Studio VS7 registry key. + """ + return os.path.join(self.sxs, 'VS7') + + @property + def vc_for_python(self): + """ + Microsoft Visual C++ for Python registry key. + """ + return r'DevDiv\VCForPython' + + @property + def microsoft_sdk(self): + """ + Microsoft SDK registry key. + """ + return 'Microsoft SDKs' + + @property + def windows_sdk(self): + """ + Microsoft Windows/Platform SDK registry key. + """ + return os.path.join(self.microsoft_sdk, 'Windows') + + @property + def netfx_sdk(self): + """ + Microsoft .NET Framework SDK registry key. + """ + return os.path.join(self.microsoft_sdk, 'NETFXSDK') + + @property + def windows_kits_roots(self): + """ + Microsoft Windows Kits Roots registry key. + """ + return r'Windows Kits\Installed Roots' + + def microsoft(self, key, x86=False): + """ + Return key in Microsoft software registry. + + Parameters + ---------- + key: str + Registry key path where look. + x86: str + Force x86 software registry. + + Return + ------ + str: value + """ + node64 = '' if self.pi.current_is_x86() or x86 else 'Wow6432Node' + return os.path.join('Software', node64, 'Microsoft', key) + + def lookup(self, key, name): + """ + Look for values in registry in Microsoft software registry. + + Parameters + ---------- + key: str + Registry key path where look. + name: str + Value name to find. + + Return + ------ + str: value + """ + KEY_READ = winreg.KEY_READ + openkey = winreg.OpenKey + ms = self.microsoft + for hkey in self.HKEYS: + try: + bkey = openkey(hkey, ms(key), 0, KEY_READ) + except (OSError, IOError): + if not self.pi.current_is_x86(): + try: + bkey = openkey(hkey, ms(key, True), 0, KEY_READ) + except (OSError, IOError): + continue + else: + continue + try: + return winreg.QueryValueEx(bkey, name)[0] + except (OSError, IOError): + pass + + +class SystemInfo: + """ + Microsoft Windows and Visual Studio related system inormations. + + Parameters + ---------- + registry_info: RegistryInfo + "RegistryInfo" instance. + vc_ver: float + Required Microsoft Visual C++ version. + """ + + # Variables and properties in this class use originals CamelCase variables + # names from Microsoft source files for more easy comparaison. + WinDir = safe_env.get('WinDir', '') + ProgramFiles = safe_env.get('ProgramFiles', '') + ProgramFilesx86 = safe_env.get('ProgramFiles(x86)', ProgramFiles) + + def __init__(self, registry_info, vc_ver=None): + self.ri = registry_info + self.pi = self.ri.pi + self.vc_ver = vc_ver or self._find_latest_available_vc_ver() + + def _find_latest_available_vc_ver(self): + try: + return self.find_available_vc_vers()[-1] + except IndexError: + err = 'No Microsoft Visual C++ version found' + raise distutils.errors.DistutilsPlatformError(err) + + def find_available_vc_vers(self): + """ + Find all available Microsoft Visual C++ versions. + """ + ms = self.ri.microsoft + vckeys = (self.ri.vc, self.ri.vc_for_python, self.ri.vs) + vc_vers = [] + for hkey in self.ri.HKEYS: + for key in vckeys: + try: + bkey = winreg.OpenKey(hkey, ms(key), 0, winreg.KEY_READ) + except (OSError, IOError): + continue + subkeys, values, _ = winreg.QueryInfoKey(bkey) + for i in range(values): + try: + ver = float(winreg.EnumValue(bkey, i)[0]) + if ver not in vc_vers: + vc_vers.append(ver) + except ValueError: + pass + for i in range(subkeys): + try: + ver = float(winreg.EnumKey(bkey, i)) + if ver not in vc_vers: + vc_vers.append(ver) + except ValueError: + pass + return sorted(vc_vers) + + @property + def VSInstallDir(self): + """ + Microsoft Visual Studio directory. + """ + # Default path + name = 'Microsoft Visual Studio %0.1f' % self.vc_ver + default = os.path.join(self.ProgramFilesx86, name) + + # Try to get path from registry, if fail use default path + return self.ri.lookup(self.ri.vs, '%0.1f' % self.vc_ver) or default + + @property + def VCInstallDir(self): + """ + Microsoft Visual C++ directory. + """ + self.VSInstallDir + + guess_vc = self._guess_vc() or self._guess_vc_legacy() + + # Try to get "VC++ for Python" path from registry as default path + reg_path = os.path.join(self.ri.vc_for_python, '%0.1f' % self.vc_ver) + python_vc = self.ri.lookup(reg_path, 'installdir') + default_vc = os.path.join(python_vc, 'VC') if python_vc else guess_vc + + # Try to get path from registry, if fail use default path + path = self.ri.lookup(self.ri.vc, '%0.1f' % self.vc_ver) or default_vc + + if not os.path.isdir(path): + msg = 'Microsoft Visual C++ directory not found' + raise distutils.errors.DistutilsPlatformError(msg) + + return path + + def _guess_vc(self): + """ + Locate Visual C for 2017 + """ + if self.vc_ver <= 14.0: + return + + default = r'VC\Tools\MSVC' + guess_vc = os.path.join(self.VSInstallDir, default) + # Subdir with VC exact version as name + try: + vc_exact_ver = os.listdir(guess_vc)[-1] + return os.path.join(guess_vc, vc_exact_ver) + except (OSError, IOError, IndexError): + pass + + def _guess_vc_legacy(self): + """ + Locate Visual C for versions prior to 2017 + """ + default = r'Microsoft Visual Studio %0.1f\VC' % self.vc_ver + return os.path.join(self.ProgramFilesx86, default) + + @property + def WindowsSdkVersion(self): + """ + Microsoft Windows SDK versions for specified MSVC++ version. + """ + if self.vc_ver <= 9.0: + return ('7.0', '6.1', '6.0a') + elif self.vc_ver == 10.0: + return ('7.1', '7.0a') + elif self.vc_ver == 11.0: + return ('8.0', '8.0a') + elif self.vc_ver == 12.0: + return ('8.1', '8.1a') + elif self.vc_ver >= 14.0: + return ('10.0', '8.1') + + @property + def WindowsSdkLastVersion(self): + """ + Microsoft Windows SDK last version + """ + return self._use_last_dir_name(os.path.join( + self.WindowsSdkDir, 'lib')) + + @property + def WindowsSdkDir(self): + """ + Microsoft Windows SDK directory. + """ + sdkdir = '' + for ver in self.WindowsSdkVersion: + # Try to get it from registry + loc = os.path.join(self.ri.windows_sdk, 'v%s' % ver) + sdkdir = self.ri.lookup(loc, 'installationfolder') + if sdkdir: + break + if not sdkdir or not os.path.isdir(sdkdir): + # Try to get "VC++ for Python" version from registry + path = os.path.join(self.ri.vc_for_python, '%0.1f' % self.vc_ver) + install_base = self.ri.lookup(path, 'installdir') + if install_base: + sdkdir = os.path.join(install_base, 'WinSDK') + if not sdkdir or not os.path.isdir(sdkdir): + # If fail, use default new path + for ver in self.WindowsSdkVersion: + intver = ver[:ver.rfind('.')] + path = r'Microsoft SDKs\Windows Kits\%s' % (intver) + d = os.path.join(self.ProgramFiles, path) + if os.path.isdir(d): + sdkdir = d + if not sdkdir or not os.path.isdir(sdkdir): + # If fail, use default old path + for ver in self.WindowsSdkVersion: + path = r'Microsoft SDKs\Windows\v%s' % ver + d = os.path.join(self.ProgramFiles, path) + if os.path.isdir(d): + sdkdir = d + if not sdkdir: + # If fail, use Platform SDK + sdkdir = os.path.join(self.VCInstallDir, 'PlatformSDK') + return sdkdir + + @property + def WindowsSDKExecutablePath(self): + """ + Microsoft Windows SDK executable directory. + """ + # Find WinSDK NetFx Tools registry dir name + if self.vc_ver <= 11.0: + netfxver = 35 + arch = '' + else: + netfxver = 40 + hidex86 = True if self.vc_ver <= 12.0 else False + arch = self.pi.current_dir(x64=True, hidex86=hidex86) + fx = 'WinSDK-NetFx%dTools%s' % (netfxver, arch.replace('\\', '-')) + + # liste all possibles registry paths + regpaths = [] + if self.vc_ver >= 14.0: + for ver in self.NetFxSdkVersion: + regpaths += [os.path.join(self.ri.netfx_sdk, ver, fx)] + + for ver in self.WindowsSdkVersion: + regpaths += [os.path.join(self.ri.windows_sdk, 'v%sA' % ver, fx)] + + # Return installation folder from the more recent path + for path in regpaths: + execpath = self.ri.lookup(path, 'installationfolder') + if execpath: + break + return execpath + + @property + def FSharpInstallDir(self): + """ + Microsoft Visual F# directory. + """ + path = r'%0.1f\Setup\F#' % self.vc_ver + path = os.path.join(self.ri.visualstudio, path) + return self.ri.lookup(path, 'productdir') or '' + + @property + def UniversalCRTSdkDir(self): + """ + Microsoft Universal CRT SDK directory. + """ + # Set Kit Roots versions for specified MSVC++ version + if self.vc_ver >= 14.0: + vers = ('10', '81') + else: + vers = () + + # Find path of the more recent Kit + for ver in vers: + sdkdir = self.ri.lookup(self.ri.windows_kits_roots, + 'kitsroot%s' % ver) + if sdkdir: + break + return sdkdir or '' + + @property + def UniversalCRTSdkLastVersion(self): + """ + Microsoft Universal C Runtime SDK last version + """ + return self._use_last_dir_name(os.path.join( + self.UniversalCRTSdkDir, 'lib')) + + @property + def NetFxSdkVersion(self): + """ + Microsoft .NET Framework SDK versions. + """ + # Set FxSdk versions for specified MSVC++ version + if self.vc_ver >= 14.0: + return ('4.6.1', '4.6') + else: + return () + + @property + def NetFxSdkDir(self): + """ + Microsoft .NET Framework SDK directory. + """ + for ver in self.NetFxSdkVersion: + loc = os.path.join(self.ri.netfx_sdk, ver) + sdkdir = self.ri.lookup(loc, 'kitsinstallationfolder') + if sdkdir: + break + return sdkdir or '' + + @property + def FrameworkDir32(self): + """ + Microsoft .NET Framework 32bit directory. + """ + # Default path + guess_fw = os.path.join(self.WinDir, r'Microsoft.NET\Framework') + + # Try to get path from registry, if fail use default path + return self.ri.lookup(self.ri.vc, 'frameworkdir32') or guess_fw + + @property + def FrameworkDir64(self): + """ + Microsoft .NET Framework 64bit directory. + """ + # Default path + guess_fw = os.path.join(self.WinDir, r'Microsoft.NET\Framework64') + + # Try to get path from registry, if fail use default path + return self.ri.lookup(self.ri.vc, 'frameworkdir64') or guess_fw + + @property + def FrameworkVersion32(self): + """ + Microsoft .NET Framework 32bit versions. + """ + return self._find_dot_net_versions(32) + + @property + def FrameworkVersion64(self): + """ + Microsoft .NET Framework 64bit versions. + """ + return self._find_dot_net_versions(64) + + def _find_dot_net_versions(self, bits): + """ + Find Microsoft .NET Framework versions. + + Parameters + ---------- + bits: int + Platform number of bits: 32 or 64. + """ + # Find actual .NET version in registry + reg_ver = self.ri.lookup(self.ri.vc, 'frameworkver%d' % bits) + dot_net_dir = getattr(self, 'FrameworkDir%d' % bits) + ver = reg_ver or self._use_last_dir_name(dot_net_dir, 'v') or '' + + # Set .NET versions for specified MSVC++ version + if self.vc_ver >= 12.0: + frameworkver = (ver, 'v4.0') + elif self.vc_ver >= 10.0: + frameworkver = ('v4.0.30319' if ver.lower()[:2] != 'v4' else ver, + 'v3.5') + elif self.vc_ver == 9.0: + frameworkver = ('v3.5', 'v2.0.50727') + if self.vc_ver == 8.0: + frameworkver = ('v3.0', 'v2.0.50727') + return frameworkver + + def _use_last_dir_name(self, path, prefix=''): + """ + Return name of the last dir in path or '' if no dir found. + + Parameters + ---------- + path: str + Use dirs in this path + prefix: str + Use only dirs startings by this prefix + """ + matching_dirs = ( + dir_name + for dir_name in reversed(os.listdir(path)) + if os.path.isdir(os.path.join(path, dir_name)) and + dir_name.startswith(prefix) + ) + return next(matching_dirs, None) or '' + + +class EnvironmentInfo: + """ + Return environment variables for specified Microsoft Visual C++ version + and platform : Lib, Include, Path and libpath. + + This function is compatible with Microsoft Visual C++ 9.0 to 14.0. + + Script created by analysing Microsoft environment configuration files like + "vcvars[...].bat", "SetEnv.Cmd", "vcbuildtools.bat", ... + + Parameters + ---------- + arch: str + Target architecture. + vc_ver: float + Required Microsoft Visual C++ version. If not set, autodetect the last + version. + vc_min_ver: float + Minimum Microsoft Visual C++ version. + """ + + # Variables and properties in this class use originals CamelCase variables + # names from Microsoft source files for more easy comparaison. + + def __init__(self, arch, vc_ver=None, vc_min_ver=0): + self.pi = PlatformInfo(arch) + self.ri = RegistryInfo(self.pi) + self.si = SystemInfo(self.ri, vc_ver) + + if self.vc_ver < vc_min_ver: + err = 'No suitable Microsoft Visual C++ version found' + raise distutils.errors.DistutilsPlatformError(err) + + @property + def vc_ver(self): + """ + Microsoft Visual C++ version. + """ + return self.si.vc_ver + + @property + def VSTools(self): + """ + Microsoft Visual Studio Tools + """ + paths = [r'Common7\IDE', r'Common7\Tools'] + + if self.vc_ver >= 14.0: + arch_subdir = self.pi.current_dir(hidex86=True, x64=True) + paths += [r'Common7\IDE\CommonExtensions\Microsoft\TestWindow'] + paths += [r'Team Tools\Performance Tools'] + paths += [r'Team Tools\Performance Tools%s' % arch_subdir] + + return [os.path.join(self.si.VSInstallDir, path) for path in paths] + + @property + def VCIncludes(self): + """ + Microsoft Visual C++ & Microsoft Foundation Class Includes + """ + return [os.path.join(self.si.VCInstallDir, 'Include'), + os.path.join(self.si.VCInstallDir, r'ATLMFC\Include')] + + @property + def VCLibraries(self): + """ + Microsoft Visual C++ & Microsoft Foundation Class Libraries + """ + if self.vc_ver >= 15.0: + arch_subdir = self.pi.target_dir(x64=True) + else: + arch_subdir = self.pi.target_dir(hidex86=True) + paths = ['Lib%s' % arch_subdir, r'ATLMFC\Lib%s' % arch_subdir] + + if self.vc_ver >= 14.0: + paths += [r'Lib\store%s' % arch_subdir] + + return [os.path.join(self.si.VCInstallDir, path) for path in paths] + + @property + def VCStoreRefs(self): + """ + Microsoft Visual C++ store references Libraries + """ + if self.vc_ver < 14.0: + return [] + return [os.path.join(self.si.VCInstallDir, r'Lib\store\references')] + + @property + def VCTools(self): + """ + Microsoft Visual C++ Tools + """ + si = self.si + tools = [os.path.join(si.VCInstallDir, 'VCPackages')] + + forcex86 = True if self.vc_ver <= 10.0 else False + arch_subdir = self.pi.cross_dir(forcex86) + if arch_subdir: + tools += [os.path.join(si.VCInstallDir, 'Bin%s' % arch_subdir)] + + if self.vc_ver == 14.0: + path = 'Bin%s' % self.pi.current_dir(hidex86=True) + tools += [os.path.join(si.VCInstallDir, path)] + + elif self.vc_ver >= 15.0: + host_dir = (r'bin\HostX86%s' if self.pi.current_is_x86() else + r'bin\HostX64%s') + tools += [os.path.join( + si.VCInstallDir, host_dir % self.pi.target_dir(x64=True))] + + if self.pi.current_cpu != self.pi.target_cpu: + tools += [os.path.join( + si.VCInstallDir, host_dir % self.pi.current_dir(x64=True))] + + else: + tools += [os.path.join(si.VCInstallDir, 'Bin')] + + return tools + + @property + def OSLibraries(self): + """ + Microsoft Windows SDK Libraries + """ + if self.vc_ver <= 10.0: + arch_subdir = self.pi.target_dir(hidex86=True, x64=True) + return [os.path.join(self.si.WindowsSdkDir, 'Lib%s' % arch_subdir)] + + else: + arch_subdir = self.pi.target_dir(x64=True) + lib = os.path.join(self.si.WindowsSdkDir, 'lib') + libver = self._sdk_subdir + return [os.path.join(lib, '%sum%s' % (libver , arch_subdir))] + + @property + def OSIncludes(self): + """ + Microsoft Windows SDK Include + """ + include = os.path.join(self.si.WindowsSdkDir, 'include') + + if self.vc_ver <= 10.0: + return [include, os.path.join(include, 'gl')] + + else: + if self.vc_ver >= 14.0: + sdkver = self._sdk_subdir + else: + sdkver = '' + return [os.path.join(include, '%sshared' % sdkver), + os.path.join(include, '%sum' % sdkver), + os.path.join(include, '%swinrt' % sdkver)] + + @property + def OSLibpath(self): + """ + Microsoft Windows SDK Libraries Paths + """ + ref = os.path.join(self.si.WindowsSdkDir, 'References') + libpath = [] + + if self.vc_ver <= 9.0: + libpath += self.OSLibraries + + if self.vc_ver >= 11.0: + libpath += [os.path.join(ref, r'CommonConfiguration\Neutral')] + + if self.vc_ver >= 14.0: + libpath += [ + ref, + os.path.join(self.si.WindowsSdkDir, 'UnionMetadata'), + os.path.join( + ref, + 'Windows.Foundation.UniversalApiContract', + '1.0.0.0', + ), + os.path.join( + ref, + 'Windows.Foundation.FoundationContract', + '1.0.0.0', + ), + os.path.join( + ref, + 'Windows.Networking.Connectivity.WwanContract', + '1.0.0.0', + ), + os.path.join( + self.si.WindowsSdkDir, + 'ExtensionSDKs', + 'Microsoft.VCLibs', + '%0.1f' % self.vc_ver, + 'References', + 'CommonConfiguration', + 'neutral', + ), + ] + return libpath + + @property + def SdkTools(self): + """ + Microsoft Windows SDK Tools + """ + return list(self._sdk_tools()) + + def _sdk_tools(self): + """ + Microsoft Windows SDK Tools paths generator + """ + if self.vc_ver < 15.0: + bin_dir = 'Bin' if self.vc_ver <= 11.0 else r'Bin\x86' + yield os.path.join(self.si.WindowsSdkDir, bin_dir) + + if not self.pi.current_is_x86(): + arch_subdir = self.pi.current_dir(x64=True) + path = 'Bin%s' % arch_subdir + yield os.path.join(self.si.WindowsSdkDir, path) + + if self.vc_ver == 10.0 or self.vc_ver == 11.0: + if self.pi.target_is_x86(): + arch_subdir = '' + else: + arch_subdir = self.pi.current_dir(hidex86=True, x64=True) + path = r'Bin\NETFX 4.0 Tools%s' % arch_subdir + yield os.path.join(self.si.WindowsSdkDir, path) + + elif self.vc_ver >= 15.0: + path = os.path.join(self.si.WindowsSdkDir, 'Bin') + arch_subdir = self.pi.current_dir(x64=True) + sdkver = self.si.WindowsSdkLastVersion + yield os.path.join(path, '%s%s' % (sdkver, arch_subdir)) + + if self.si.WindowsSDKExecutablePath: + yield self.si.WindowsSDKExecutablePath + + @property + def _sdk_subdir(self): + """ + Microsoft Windows SDK version subdir + """ + ucrtver = self.si.WindowsSdkLastVersion + return ('%s\\' % ucrtver) if ucrtver else '' + + @property + def SdkSetup(self): + """ + Microsoft Windows SDK Setup + """ + if self.vc_ver > 9.0: + return [] + + return [os.path.join(self.si.WindowsSdkDir, 'Setup')] + + @property + def FxTools(self): + """ + Microsoft .NET Framework Tools + """ + pi = self.pi + si = self.si + + if self.vc_ver <= 10.0: + include32 = True + include64 = not pi.target_is_x86() and not pi.current_is_x86() + else: + include32 = pi.target_is_x86() or pi.current_is_x86() + include64 = pi.current_cpu == 'amd64' or pi.target_cpu == 'amd64' + + tools = [] + if include32: + tools += [os.path.join(si.FrameworkDir32, ver) + for ver in si.FrameworkVersion32] + if include64: + tools += [os.path.join(si.FrameworkDir64, ver) + for ver in si.FrameworkVersion64] + return tools + + @property + def NetFxSDKLibraries(self): + """ + Microsoft .Net Framework SDK Libraries + """ + if self.vc_ver < 14.0 or not self.si.NetFxSdkDir: + return [] + + arch_subdir = self.pi.target_dir(x64=True) + return [os.path.join(self.si.NetFxSdkDir, r'lib\um%s' % arch_subdir)] + + @property + def NetFxSDKIncludes(self): + """ + Microsoft .Net Framework SDK Includes + """ + if self.vc_ver < 14.0 or not self.si.NetFxSdkDir: + return [] + + return [os.path.join(self.si.NetFxSdkDir, r'include\um')] + + @property + def VsTDb(self): + """ + Microsoft Visual Studio Team System Database + """ + return [os.path.join(self.si.VSInstallDir, r'VSTSDB\Deploy')] + + @property + def MSBuild(self): + """ + Microsoft Build Engine + """ + if self.vc_ver < 12.0: + return [] + elif self.vc_ver < 15.0: + base_path = self.si.ProgramFilesx86 + arch_subdir = self.pi.current_dir(hidex86=True) + else: + base_path = self.si.VSInstallDir + arch_subdir = '' + + path = r'MSBuild\%0.1f\bin%s' % (self.vc_ver, arch_subdir) + build = [os.path.join(base_path, path)] + + if self.vc_ver >= 15.0: + # Add Roslyn C# & Visual Basic Compiler + build += [os.path.join(base_path, path, 'Roslyn')] + + return build + + @property + def HTMLHelpWorkshop(self): + """ + Microsoft HTML Help Workshop + """ + if self.vc_ver < 11.0: + return [] + + return [os.path.join(self.si.ProgramFilesx86, 'HTML Help Workshop')] + + @property + def UCRTLibraries(self): + """ + Microsoft Universal C Runtime SDK Libraries + """ + if self.vc_ver < 14.0: + return [] + + arch_subdir = self.pi.target_dir(x64=True) + lib = os.path.join(self.si.UniversalCRTSdkDir, 'lib') + ucrtver = self._ucrt_subdir + return [os.path.join(lib, '%sucrt%s' % (ucrtver, arch_subdir))] + + @property + def UCRTIncludes(self): + """ + Microsoft Universal C Runtime SDK Include + """ + if self.vc_ver < 14.0: + return [] + + include = os.path.join(self.si.UniversalCRTSdkDir, 'include') + return [os.path.join(include, '%sucrt' % self._ucrt_subdir)] + + @property + def _ucrt_subdir(self): + """ + Microsoft Universal C Runtime SDK version subdir + """ + ucrtver = self.si.UniversalCRTSdkLastVersion + return ('%s\\' % ucrtver) if ucrtver else '' + + @property + def FSharp(self): + """ + Microsoft Visual F# + """ + if self.vc_ver < 11.0 and self.vc_ver > 12.0: + return [] + + return self.si.FSharpInstallDir + + @property + def VCRuntimeRedist(self): + """ + Microsoft Visual C++ runtime redistribuable dll + """ + arch_subdir = self.pi.target_dir(x64=True) + if self.vc_ver < 15: + redist_path = self.si.VCInstallDir + vcruntime = 'redist%s\\Microsoft.VC%d0.CRT\\vcruntime%d0.dll' + else: + redist_path = self.si.VCInstallDir.replace('\\Tools', '\\Redist') + vcruntime = 'onecore%s\\Microsoft.VC%d0.CRT\\vcruntime%d0.dll' + + # Visual Studio 2017 is still Visual C++ 14.0 + dll_ver = 14.0 if self.vc_ver == 15 else self.vc_ver + + vcruntime = vcruntime % (arch_subdir, self.vc_ver, dll_ver) + return os.path.join(redist_path, vcruntime) + + def return_env(self, exists=True): + """ + Return environment dict. + + Parameters + ---------- + exists: bool + It True, only return existing paths. + """ + env = dict( + include=self._build_paths('include', + [self.VCIncludes, + self.OSIncludes, + self.UCRTIncludes, + self.NetFxSDKIncludes], + exists), + lib=self._build_paths('lib', + [self.VCLibraries, + self.OSLibraries, + self.FxTools, + self.UCRTLibraries, + self.NetFxSDKLibraries], + exists), + libpath=self._build_paths('libpath', + [self.VCLibraries, + self.FxTools, + self.VCStoreRefs, + self.OSLibpath], + exists), + path=self._build_paths('path', + [self.VCTools, + self.VSTools, + self.VsTDb, + self.SdkTools, + self.SdkSetup, + self.FxTools, + self.MSBuild, + self.HTMLHelpWorkshop, + self.FSharp], + exists), + ) + if self.vc_ver >= 14 and os.path.isfile(self.VCRuntimeRedist): + env['py_vcruntime_redist'] = self.VCRuntimeRedist + return env + + def _build_paths(self, name, spec_path_lists, exists): + """ + Given an environment variable name and specified paths, + return a pathsep-separated string of paths containing + unique, extant, directories from those paths and from + the environment variable. Raise an error if no paths + are resolved. + """ + # flatten spec_path_lists + spec_paths = itertools.chain.from_iterable(spec_path_lists) + env_paths = safe_env.get(name, '').split(os.pathsep) + paths = itertools.chain(spec_paths, env_paths) + extant_paths = list(filter(os.path.isdir, paths)) if exists else paths + if not extant_paths: + msg = "%s environment variable is empty" % name.upper() + raise distutils.errors.DistutilsPlatformError(msg) + unique_paths = self._unique_everseen(extant_paths) + return os.pathsep.join(unique_paths) + + # from Python docs + def _unique_everseen(self, iterable, key=None): + """ + List unique elements, preserving order. + Remember all elements ever seen. + + _unique_everseen('AAAABBBCCDAABBB') --> A B C D + + _unique_everseen('ABBCcAD', str.lower) --> A B C D + """ + seen = set() + seen_add = seen.add + if key is None: + for element in filterfalse(seen.__contains__, iterable): + seen_add(element) + yield element + else: + for element in iterable: + k = key(element) + if k not in seen: + seen_add(k) + yield element diff --git a/week-0/day-3/my_todo_app/venvironment/lib/python3.6/site-packages/setuptools/namespaces.py b/week-0/day-3/my_todo_app/venvironment/lib/python3.6/site-packages/setuptools/namespaces.py new file mode 100644 index 00000000..dc16106d --- /dev/null +++ b/week-0/day-3/my_todo_app/venvironment/lib/python3.6/site-packages/setuptools/namespaces.py @@ -0,0 +1,107 @@ +import os +from distutils import log +import itertools + +from setuptools.extern.six.moves import map + + +flatten = itertools.chain.from_iterable + + +class Installer: + + nspkg_ext = '-nspkg.pth' + + def install_namespaces(self): + nsp = self._get_all_ns_packages() + if not nsp: + return + filename, ext = os.path.splitext(self._get_target()) + filename += self.nspkg_ext + self.outputs.append(filename) + log.info("Installing %s", filename) + lines = map(self._gen_nspkg_line, nsp) + + if self.dry_run: + # always generate the lines, even in dry run + list(lines) + return + + with open(filename, 'wt') as f: + f.writelines(lines) + + def uninstall_namespaces(self): + filename, ext = os.path.splitext(self._get_target()) + filename += self.nspkg_ext + if not os.path.exists(filename): + return + log.info("Removing %s", filename) + os.remove(filename) + + def _get_target(self): + return self.target + + _nspkg_tmpl = ( + "import sys, types, os", + "has_mfs = sys.version_info > (3, 5)", + "p = os.path.join(%(root)s, *%(pth)r)", + "importlib = has_mfs and __import__('importlib.util')", + "has_mfs and __import__('importlib.machinery')", + "m = has_mfs and " + "sys.modules.setdefault(%(pkg)r, " + "importlib.util.module_from_spec(" + "importlib.machinery.PathFinder.find_spec(%(pkg)r, " + "[os.path.dirname(p)])))", + "m = m or " + "sys.modules.setdefault(%(pkg)r, types.ModuleType(%(pkg)r))", + "mp = (m or []) and m.__dict__.setdefault('__path__',[])", + "(p not in mp) and mp.append(p)", + ) + "lines for the namespace installer" + + _nspkg_tmpl_multi = ( + 'm and setattr(sys.modules[%(parent)r], %(child)r, m)', + ) + "additional line(s) when a parent package is indicated" + + def _get_root(self): + return "sys._getframe(1).f_locals['sitedir']" + + def _gen_nspkg_line(self, pkg): + # ensure pkg is not a unicode string under Python 2.7 + pkg = str(pkg) + pth = tuple(pkg.split('.')) + root = self._get_root() + tmpl_lines = self._nspkg_tmpl + parent, sep, child = pkg.rpartition('.') + if parent: + tmpl_lines += self._nspkg_tmpl_multi + return ';'.join(tmpl_lines) % locals() + '\n' + + def _get_all_ns_packages(self): + """Return sorted list of all package namespaces""" + pkgs = self.distribution.namespace_packages or [] + return sorted(flatten(map(self._pkg_names, pkgs))) + + @staticmethod + def _pkg_names(pkg): + """ + Given a namespace package, yield the components of that + package. + + >>> names = Installer._pkg_names('a.b.c') + >>> set(names) == set(['a', 'a.b', 'a.b.c']) + True + """ + parts = pkg.split('.') + while parts: + yield '.'.join(parts) + parts.pop() + + +class DevelopInstaller(Installer): + def _get_root(self): + return repr(str(self.egg_path)) + + def _get_target(self): + return self.egg_link diff --git a/week-0/day-3/my_todo_app/venvironment/lib/python3.6/site-packages/setuptools/package_index.py b/week-0/day-3/my_todo_app/venvironment/lib/python3.6/site-packages/setuptools/package_index.py new file mode 100644 index 00000000..914b5e61 --- /dev/null +++ b/week-0/day-3/my_todo_app/venvironment/lib/python3.6/site-packages/setuptools/package_index.py @@ -0,0 +1,1119 @@ +"""PyPI and direct package downloading""" +import sys +import os +import re +import shutil +import socket +import base64 +import hashlib +import itertools +from functools import wraps + +from setuptools.extern import six +from setuptools.extern.six.moves import urllib, http_client, configparser, map + +import setuptools +from pkg_resources import ( + CHECKOUT_DIST, Distribution, BINARY_DIST, normalize_path, SOURCE_DIST, + Environment, find_distributions, safe_name, safe_version, + to_filename, Requirement, DEVELOP_DIST, EGG_DIST, +) +from setuptools import ssl_support +from distutils import log +from distutils.errors import DistutilsError +from fnmatch import translate +from setuptools.py27compat import get_all_headers +from setuptools.py33compat import unescape +from setuptools.wheel import Wheel + +EGG_FRAGMENT = re.compile(r'^egg=([-A-Za-z0-9_.+!]+)$') +HREF = re.compile("""href\\s*=\\s*['"]?([^'"> ]+)""", re.I) +# this is here to fix emacs' cruddy broken syntax highlighting +PYPI_MD5 = re.compile( + '<a href="([^"#]+)">([^<]+)</a>\n\\s+\\(<a (?:title="MD5 hash"\n\\s+)' + 'href="[^?]+\\?:action=show_md5&digest=([0-9a-f]{32})">md5</a>\\)' +) +URL_SCHEME = re.compile('([-+.a-z0-9]{2,}):', re.I).match +EXTENSIONS = ".tar.gz .tar.bz2 .tar .zip .tgz".split() + +__all__ = [ + 'PackageIndex', 'distros_for_url', 'parse_bdist_wininst', + 'interpret_distro_name', +] + +_SOCKET_TIMEOUT = 15 + +_tmpl = "setuptools/{setuptools.__version__} Python-urllib/{py_major}" +user_agent = _tmpl.format(py_major=sys.version[:3], setuptools=setuptools) + + +def parse_requirement_arg(spec): + try: + return Requirement.parse(spec) + except ValueError: + raise DistutilsError( + "Not a URL, existing file, or requirement spec: %r" % (spec,) + ) + + +def parse_bdist_wininst(name): + """Return (base,pyversion) or (None,None) for possible .exe name""" + + lower = name.lower() + base, py_ver, plat = None, None, None + + if lower.endswith('.exe'): + if lower.endswith('.win32.exe'): + base = name[:-10] + plat = 'win32' + elif lower.startswith('.win32-py', -16): + py_ver = name[-7:-4] + base = name[:-16] + plat = 'win32' + elif lower.endswith('.win-amd64.exe'): + base = name[:-14] + plat = 'win-amd64' + elif lower.startswith('.win-amd64-py', -20): + py_ver = name[-7:-4] + base = name[:-20] + plat = 'win-amd64' + return base, py_ver, plat + + +def egg_info_for_url(url): + parts = urllib.parse.urlparse(url) + scheme, server, path, parameters, query, fragment = parts + base = urllib.parse.unquote(path.split('/')[-1]) + if server == 'sourceforge.net' and base == 'download': # XXX Yuck + base = urllib.parse.unquote(path.split('/')[-2]) + if '#' in base: + base, fragment = base.split('#', 1) + return base, fragment + + +def distros_for_url(url, metadata=None): + """Yield egg or source distribution objects that might be found at a URL""" + base, fragment = egg_info_for_url(url) + for dist in distros_for_location(url, base, metadata): + yield dist + if fragment: + match = EGG_FRAGMENT.match(fragment) + if match: + for dist in interpret_distro_name( + url, match.group(1), metadata, precedence=CHECKOUT_DIST + ): + yield dist + + +def distros_for_location(location, basename, metadata=None): + """Yield egg or source distribution objects based on basename""" + if basename.endswith('.egg.zip'): + basename = basename[:-4] # strip the .zip + if basename.endswith('.egg') and '-' in basename: + # only one, unambiguous interpretation + return [Distribution.from_location(location, basename, metadata)] + if basename.endswith('.whl') and '-' in basename: + wheel = Wheel(basename) + if not wheel.is_compatible(): + return [] + return [Distribution( + location=location, + project_name=wheel.project_name, + version=wheel.version, + # Increase priority over eggs. + precedence=EGG_DIST + 1, + )] + if basename.endswith('.exe'): + win_base, py_ver, platform = parse_bdist_wininst(basename) + if win_base is not None: + return interpret_distro_name( + location, win_base, metadata, py_ver, BINARY_DIST, platform + ) + # Try source distro extensions (.zip, .tgz, etc.) + # + for ext in EXTENSIONS: + if basename.endswith(ext): + basename = basename[:-len(ext)] + return interpret_distro_name(location, basename, metadata) + return [] # no extension matched + + +def distros_for_filename(filename, metadata=None): + """Yield possible egg or source distribution objects based on a filename""" + return distros_for_location( + normalize_path(filename), os.path.basename(filename), metadata + ) + + +def interpret_distro_name( + location, basename, metadata, py_version=None, precedence=SOURCE_DIST, + platform=None +): + """Generate alternative interpretations of a source distro name + + Note: if `location` is a filesystem filename, you should call + ``pkg_resources.normalize_path()`` on it before passing it to this + routine! + """ + # Generate alternative interpretations of a source distro name + # Because some packages are ambiguous as to name/versions split + # e.g. "adns-python-1.1.0", "egenix-mx-commercial", etc. + # So, we generate each possible interepretation (e.g. "adns, python-1.1.0" + # "adns-python, 1.1.0", and "adns-python-1.1.0, no version"). In practice, + # the spurious interpretations should be ignored, because in the event + # there's also an "adns" package, the spurious "python-1.1.0" version will + # compare lower than any numeric version number, and is therefore unlikely + # to match a request for it. It's still a potential problem, though, and + # in the long run PyPI and the distutils should go for "safe" names and + # versions in distribution archive names (sdist and bdist). + + parts = basename.split('-') + if not py_version and any(re.match(r'py\d\.\d$', p) for p in parts[2:]): + # it is a bdist_dumb, not an sdist -- bail out + return + + for p in range(1, len(parts) + 1): + yield Distribution( + location, metadata, '-'.join(parts[:p]), '-'.join(parts[p:]), + py_version=py_version, precedence=precedence, + platform=platform + ) + + +# From Python 2.7 docs +def unique_everseen(iterable, key=None): + "List unique elements, preserving order. Remember all elements ever seen." + # unique_everseen('AAAABBBCCDAABBB') --> A B C D + # unique_everseen('ABBCcAD', str.lower) --> A B C D + seen = set() + seen_add = seen.add + if key is None: + for element in six.moves.filterfalse(seen.__contains__, iterable): + seen_add(element) + yield element + else: + for element in iterable: + k = key(element) + if k not in seen: + seen_add(k) + yield element + + +def unique_values(func): + """ + Wrap a function returning an iterable such that the resulting iterable + only ever yields unique items. + """ + + @wraps(func) + def wrapper(*args, **kwargs): + return unique_everseen(func(*args, **kwargs)) + + return wrapper + + +REL = re.compile(r"""<([^>]*\srel\s*=\s*['"]?([^'">]+)[^>]*)>""", re.I) +# this line is here to fix emacs' cruddy broken syntax highlighting + + +@unique_values +def find_external_links(url, page): + """Find rel="homepage" and rel="download" links in `page`, yielding URLs""" + + for match in REL.finditer(page): + tag, rel = match.groups() + rels = set(map(str.strip, rel.lower().split(','))) + if 'homepage' in rels or 'download' in rels: + for match in HREF.finditer(tag): + yield urllib.parse.urljoin(url, htmldecode(match.group(1))) + + for tag in ("<th>Home Page", "<th>Download URL"): + pos = page.find(tag) + if pos != -1: + match = HREF.search(page, pos) + if match: + yield urllib.parse.urljoin(url, htmldecode(match.group(1))) + + +class ContentChecker(object): + """ + A null content checker that defines the interface for checking content + """ + + def feed(self, block): + """ + Feed a block of data to the hash. + """ + return + + def is_valid(self): + """ + Check the hash. Return False if validation fails. + """ + return True + + def report(self, reporter, template): + """ + Call reporter with information about the checker (hash name) + substituted into the template. + """ + return + + +class HashChecker(ContentChecker): + pattern = re.compile( + r'(?P<hash_name>sha1|sha224|sha384|sha256|sha512|md5)=' + r'(?P<expected>[a-f0-9]+)' + ) + + def __init__(self, hash_name, expected): + self.hash_name = hash_name + self.hash = hashlib.new(hash_name) + self.expected = expected + + @classmethod + def from_url(cls, url): + "Construct a (possibly null) ContentChecker from a URL" + fragment = urllib.parse.urlparse(url)[-1] + if not fragment: + return ContentChecker() + match = cls.pattern.search(fragment) + if not match: + return ContentChecker() + return cls(**match.groupdict()) + + def feed(self, block): + self.hash.update(block) + + def is_valid(self): + return self.hash.hexdigest() == self.expected + + def report(self, reporter, template): + msg = template % self.hash_name + return reporter(msg) + + +class PackageIndex(Environment): + """A distribution index that scans web pages for download URLs""" + + def __init__( + self, index_url="https://pypi.python.org/simple", hosts=('*',), + ca_bundle=None, verify_ssl=True, *args, **kw + ): + Environment.__init__(self, *args, **kw) + self.index_url = index_url + "/" [:not index_url.endswith('/')] + self.scanned_urls = {} + self.fetched_urls = {} + self.package_pages = {} + self.allows = re.compile('|'.join(map(translate, hosts))).match + self.to_scan = [] + use_ssl = ( + verify_ssl + and ssl_support.is_available + and (ca_bundle or ssl_support.find_ca_bundle()) + ) + if use_ssl: + self.opener = ssl_support.opener_for(ca_bundle) + else: + self.opener = urllib.request.urlopen + + def process_url(self, url, retrieve=False): + """Evaluate a URL as a possible download, and maybe retrieve it""" + if url in self.scanned_urls and not retrieve: + return + self.scanned_urls[url] = True + if not URL_SCHEME(url): + self.process_filename(url) + return + else: + dists = list(distros_for_url(url)) + if dists: + if not self.url_ok(url): + return + self.debug("Found link: %s", url) + + if dists or not retrieve or url in self.fetched_urls: + list(map(self.add, dists)) + return # don't need the actual page + + if not self.url_ok(url): + self.fetched_urls[url] = True + return + + self.info("Reading %s", url) + self.fetched_urls[url] = True # prevent multiple fetch attempts + tmpl = "Download error on %s: %%s -- Some packages may not be found!" + f = self.open_url(url, tmpl % url) + if f is None: + return + self.fetched_urls[f.url] = True + if 'html' not in f.headers.get('content-type', '').lower(): + f.close() # not html, we can't process it + return + + base = f.url # handle redirects + page = f.read() + if not isinstance(page, str): + # In Python 3 and got bytes but want str. + if isinstance(f, urllib.error.HTTPError): + # Errors have no charset, assume latin1: + charset = 'latin-1' + else: + charset = f.headers.get_param('charset') or 'latin-1' + page = page.decode(charset, "ignore") + f.close() + for match in HREF.finditer(page): + link = urllib.parse.urljoin(base, htmldecode(match.group(1))) + self.process_url(link) + if url.startswith(self.index_url) and getattr(f, 'code', None) != 404: + page = self.process_index(url, page) + + def process_filename(self, fn, nested=False): + # process filenames or directories + if not os.path.exists(fn): + self.warn("Not found: %s", fn) + return + + if os.path.isdir(fn) and not nested: + path = os.path.realpath(fn) + for item in os.listdir(path): + self.process_filename(os.path.join(path, item), True) + + dists = distros_for_filename(fn) + if dists: + self.debug("Found: %s", fn) + list(map(self.add, dists)) + + def url_ok(self, url, fatal=False): + s = URL_SCHEME(url) + is_file = s and s.group(1).lower() == 'file' + if is_file or self.allows(urllib.parse.urlparse(url)[1]): + return True + msg = ( + "\nNote: Bypassing %s (disallowed host; see " + "http://bit.ly/2hrImnY for details).\n") + if fatal: + raise DistutilsError(msg % url) + else: + self.warn(msg, url) + + def scan_egg_links(self, search_path): + dirs = filter(os.path.isdir, search_path) + egg_links = ( + (path, entry) + for path in dirs + for entry in os.listdir(path) + if entry.endswith('.egg-link') + ) + list(itertools.starmap(self.scan_egg_link, egg_links)) + + def scan_egg_link(self, path, entry): + with open(os.path.join(path, entry)) as raw_lines: + # filter non-empty lines + lines = list(filter(None, map(str.strip, raw_lines))) + + if len(lines) != 2: + # format is not recognized; punt + return + + egg_path, setup_path = lines + + for dist in find_distributions(os.path.join(path, egg_path)): + dist.location = os.path.join(path, *lines) + dist.precedence = SOURCE_DIST + self.add(dist) + + def process_index(self, url, page): + """Process the contents of a PyPI page""" + + def scan(link): + # Process a URL to see if it's for a package page + if link.startswith(self.index_url): + parts = list(map( + urllib.parse.unquote, link[len(self.index_url):].split('/') + )) + if len(parts) == 2 and '#' not in parts[1]: + # it's a package page, sanitize and index it + pkg = safe_name(parts[0]) + ver = safe_version(parts[1]) + self.package_pages.setdefault(pkg.lower(), {})[link] = True + return to_filename(pkg), to_filename(ver) + return None, None + + # process an index page into the package-page index + for match in HREF.finditer(page): + try: + scan(urllib.parse.urljoin(url, htmldecode(match.group(1)))) + except ValueError: + pass + + pkg, ver = scan(url) # ensure this page is in the page index + if pkg: + # process individual package page + for new_url in find_external_links(url, page): + # Process the found URL + base, frag = egg_info_for_url(new_url) + if base.endswith('.py') and not frag: + if ver: + new_url += '#egg=%s-%s' % (pkg, ver) + else: + self.need_version_info(url) + self.scan_url(new_url) + + return PYPI_MD5.sub( + lambda m: '<a href="%s#md5=%s">%s</a>' % m.group(1, 3, 2), page + ) + else: + return "" # no sense double-scanning non-package pages + + def need_version_info(self, url): + self.scan_all( + "Page at %s links to .py file(s) without version info; an index " + "scan is required.", url + ) + + def scan_all(self, msg=None, *args): + if self.index_url not in self.fetched_urls: + if msg: + self.warn(msg, *args) + self.info( + "Scanning index of all packages (this may take a while)" + ) + self.scan_url(self.index_url) + + def find_packages(self, requirement): + self.scan_url(self.index_url + requirement.unsafe_name + '/') + + if not self.package_pages.get(requirement.key): + # Fall back to safe version of the name + self.scan_url(self.index_url + requirement.project_name + '/') + + if not self.package_pages.get(requirement.key): + # We couldn't find the target package, so search the index page too + self.not_found_in_index(requirement) + + for url in list(self.package_pages.get(requirement.key, ())): + # scan each page that might be related to the desired package + self.scan_url(url) + + def obtain(self, requirement, installer=None): + self.prescan() + self.find_packages(requirement) + for dist in self[requirement.key]: + if dist in requirement: + return dist + self.debug("%s does not match %s", requirement, dist) + return super(PackageIndex, self).obtain(requirement, installer) + + def check_hash(self, checker, filename, tfp): + """ + checker is a ContentChecker + """ + checker.report( + self.debug, + "Validating %%s checksum for %s" % filename) + if not checker.is_valid(): + tfp.close() + os.unlink(filename) + raise DistutilsError( + "%s validation failed for %s; " + "possible download problem?" + % (checker.hash.name, os.path.basename(filename)) + ) + + def add_find_links(self, urls): + """Add `urls` to the list that will be prescanned for searches""" + for url in urls: + if ( + self.to_scan is None # if we have already "gone online" + or not URL_SCHEME(url) # or it's a local file/directory + or url.startswith('file:') + or list(distros_for_url(url)) # or a direct package link + ): + # then go ahead and process it now + self.scan_url(url) + else: + # otherwise, defer retrieval till later + self.to_scan.append(url) + + def prescan(self): + """Scan urls scheduled for prescanning (e.g. --find-links)""" + if self.to_scan: + list(map(self.scan_url, self.to_scan)) + self.to_scan = None # from now on, go ahead and process immediately + + def not_found_in_index(self, requirement): + if self[requirement.key]: # we've seen at least one distro + meth, msg = self.info, "Couldn't retrieve index page for %r" + else: # no distros seen for this name, might be misspelled + meth, msg = ( + self.warn, + "Couldn't find index page for %r (maybe misspelled?)") + meth(msg, requirement.unsafe_name) + self.scan_all() + + def download(self, spec, tmpdir): + """Locate and/or download `spec` to `tmpdir`, returning a local path + + `spec` may be a ``Requirement`` object, or a string containing a URL, + an existing local filename, or a project/version requirement spec + (i.e. the string form of a ``Requirement`` object). If it is the URL + of a .py file with an unambiguous ``#egg=name-version`` tag (i.e., one + that escapes ``-`` as ``_`` throughout), a trivial ``setup.py`` is + automatically created alongside the downloaded file. + + If `spec` is a ``Requirement`` object or a string containing a + project/version requirement spec, this method returns the location of + a matching distribution (possibly after downloading it to `tmpdir`). + If `spec` is a locally existing file or directory name, it is simply + returned unchanged. If `spec` is a URL, it is downloaded to a subpath + of `tmpdir`, and the local filename is returned. Various errors may be + raised if a problem occurs during downloading. + """ + if not isinstance(spec, Requirement): + scheme = URL_SCHEME(spec) + if scheme: + # It's a url, download it to tmpdir + found = self._download_url(scheme.group(1), spec, tmpdir) + base, fragment = egg_info_for_url(spec) + if base.endswith('.py'): + found = self.gen_setup(found, fragment, tmpdir) + return found + elif os.path.exists(spec): + # Existing file or directory, just return it + return spec + else: + spec = parse_requirement_arg(spec) + return getattr(self.fetch_distribution(spec, tmpdir), 'location', None) + + def fetch_distribution( + self, requirement, tmpdir, force_scan=False, source=False, + develop_ok=False, local_index=None): + """Obtain a distribution suitable for fulfilling `requirement` + + `requirement` must be a ``pkg_resources.Requirement`` instance. + If necessary, or if the `force_scan` flag is set, the requirement is + searched for in the (online) package index as well as the locally + installed packages. If a distribution matching `requirement` is found, + the returned distribution's ``location`` is the value you would have + gotten from calling the ``download()`` method with the matching + distribution's URL or filename. If no matching distribution is found, + ``None`` is returned. + + If the `source` flag is set, only source distributions and source + checkout links will be considered. Unless the `develop_ok` flag is + set, development and system eggs (i.e., those using the ``.egg-info`` + format) will be ignored. + """ + # process a Requirement + self.info("Searching for %s", requirement) + skipped = {} + dist = None + + def find(req, env=None): + if env is None: + env = self + # Find a matching distribution; may be called more than once + + for dist in env[req.key]: + + if dist.precedence == DEVELOP_DIST and not develop_ok: + if dist not in skipped: + self.warn( + "Skipping development or system egg: %s", dist, + ) + skipped[dist] = 1 + continue + + test = ( + dist in req + and (dist.precedence <= SOURCE_DIST or not source) + ) + if test: + loc = self.download(dist.location, tmpdir) + dist.download_location = loc + if os.path.exists(dist.download_location): + return dist + + if force_scan: + self.prescan() + self.find_packages(requirement) + dist = find(requirement) + + if not dist and local_index is not None: + dist = find(requirement, local_index) + + if dist is None: + if self.to_scan is not None: + self.prescan() + dist = find(requirement) + + if dist is None and not force_scan: + self.find_packages(requirement) + dist = find(requirement) + + if dist is None: + self.warn( + "No local packages or working download links found for %s%s", + (source and "a source distribution of " or ""), + requirement, + ) + else: + self.info("Best match: %s", dist) + return dist.clone(location=dist.download_location) + + def fetch(self, requirement, tmpdir, force_scan=False, source=False): + """Obtain a file suitable for fulfilling `requirement` + + DEPRECATED; use the ``fetch_distribution()`` method now instead. For + backward compatibility, this routine is identical but returns the + ``location`` of the downloaded distribution instead of a distribution + object. + """ + dist = self.fetch_distribution(requirement, tmpdir, force_scan, source) + if dist is not None: + return dist.location + return None + + def gen_setup(self, filename, fragment, tmpdir): + match = EGG_FRAGMENT.match(fragment) + dists = match and [ + d for d in + interpret_distro_name(filename, match.group(1), None) if d.version + ] or [] + + if len(dists) == 1: # unambiguous ``#egg`` fragment + basename = os.path.basename(filename) + + # Make sure the file has been downloaded to the temp dir. + if os.path.dirname(filename) != tmpdir: + dst = os.path.join(tmpdir, basename) + from setuptools.command.easy_install import samefile + if not samefile(filename, dst): + shutil.copy2(filename, dst) + filename = dst + + with open(os.path.join(tmpdir, 'setup.py'), 'w') as file: + file.write( + "from setuptools import setup\n" + "setup(name=%r, version=%r, py_modules=[%r])\n" + % ( + dists[0].project_name, dists[0].version, + os.path.splitext(basename)[0] + ) + ) + return filename + + elif match: + raise DistutilsError( + "Can't unambiguously interpret project/version identifier %r; " + "any dashes in the name or version should be escaped using " + "underscores. %r" % (fragment, dists) + ) + else: + raise DistutilsError( + "Can't process plain .py files without an '#egg=name-version'" + " suffix to enable automatic setup script generation." + ) + + dl_blocksize = 8192 + + def _download_to(self, url, filename): + self.info("Downloading %s", url) + # Download the file + fp = None + try: + checker = HashChecker.from_url(url) + fp = self.open_url(url) + if isinstance(fp, urllib.error.HTTPError): + raise DistutilsError( + "Can't download %s: %s %s" % (url, fp.code, fp.msg) + ) + headers = fp.info() + blocknum = 0 + bs = self.dl_blocksize + size = -1 + if "content-length" in headers: + # Some servers return multiple Content-Length headers :( + sizes = get_all_headers(headers, 'Content-Length') + size = max(map(int, sizes)) + self.reporthook(url, filename, blocknum, bs, size) + with open(filename, 'wb') as tfp: + while True: + block = fp.read(bs) + if block: + checker.feed(block) + tfp.write(block) + blocknum += 1 + self.reporthook(url, filename, blocknum, bs, size) + else: + break + self.check_hash(checker, filename, tfp) + return headers + finally: + if fp: + fp.close() + + def reporthook(self, url, filename, blocknum, blksize, size): + pass # no-op + + def open_url(self, url, warning=None): + if url.startswith('file:'): + return local_open(url) + try: + return open_with_auth(url, self.opener) + except (ValueError, http_client.InvalidURL) as v: + msg = ' '.join([str(arg) for arg in v.args]) + if warning: + self.warn(warning, msg) + else: + raise DistutilsError('%s %s' % (url, msg)) + except urllib.error.HTTPError as v: + return v + except urllib.error.URLError as v: + if warning: + self.warn(warning, v.reason) + else: + raise DistutilsError("Download error for %s: %s" + % (url, v.reason)) + except http_client.BadStatusLine as v: + if warning: + self.warn(warning, v.line) + else: + raise DistutilsError( + '%s returned a bad status line. The server might be ' + 'down, %s' % + (url, v.line) + ) + except (http_client.HTTPException, socket.error) as v: + if warning: + self.warn(warning, v) + else: + raise DistutilsError("Download error for %s: %s" + % (url, v)) + + def _download_url(self, scheme, url, tmpdir): + # Determine download filename + # + name, fragment = egg_info_for_url(url) + if name: + while '..' in name: + name = name.replace('..', '.').replace('\\', '_') + else: + name = "__downloaded__" # default if URL has no path contents + + if name.endswith('.egg.zip'): + name = name[:-4] # strip the extra .zip before download + + filename = os.path.join(tmpdir, name) + + # Download the file + # + if scheme == 'svn' or scheme.startswith('svn+'): + return self._download_svn(url, filename) + elif scheme == 'git' or scheme.startswith('git+'): + return self._download_git(url, filename) + elif scheme.startswith('hg+'): + return self._download_hg(url, filename) + elif scheme == 'file': + return urllib.request.url2pathname(urllib.parse.urlparse(url)[2]) + else: + self.url_ok(url, True) # raises error if not allowed + return self._attempt_download(url, filename) + + def scan_url(self, url): + self.process_url(url, True) + + def _attempt_download(self, url, filename): + headers = self._download_to(url, filename) + if 'html' in headers.get('content-type', '').lower(): + return self._download_html(url, headers, filename) + else: + return filename + + def _download_html(self, url, headers, filename): + file = open(filename) + for line in file: + if line.strip(): + # Check for a subversion index page + if re.search(r'<title>([^- ]+ - )?Revision \d+:', line): + # it's a subversion index page: + file.close() + os.unlink(filename) + return self._download_svn(url, filename) + break # not an index page + file.close() + os.unlink(filename) + raise DistutilsError("Unexpected HTML page found at " + url) + + def _download_svn(self, url, filename): + url = url.split('#', 1)[0] # remove any fragment for svn's sake + creds = '' + if url.lower().startswith('svn:') and '@' in url: + scheme, netloc, path, p, q, f = urllib.parse.urlparse(url) + if not netloc and path.startswith('//') and '/' in path[2:]: + netloc, path = path[2:].split('/', 1) + auth, host = urllib.parse.splituser(netloc) + if auth: + if ':' in auth: + user, pw = auth.split(':', 1) + creds = " --username=%s --password=%s" % (user, pw) + else: + creds = " --username=" + auth + netloc = host + parts = scheme, netloc, url, p, q, f + url = urllib.parse.urlunparse(parts) + self.info("Doing subversion checkout from %s to %s", url, filename) + os.system("svn checkout%s -q %s %s" % (creds, url, filename)) + return filename + + @staticmethod + def _vcs_split_rev_from_url(url, pop_prefix=False): + scheme, netloc, path, query, frag = urllib.parse.urlsplit(url) + + scheme = scheme.split('+', 1)[-1] + + # Some fragment identification fails + path = path.split('#', 1)[0] + + rev = None + if '@' in path: + path, rev = path.rsplit('@', 1) + + # Also, discard fragment + url = urllib.parse.urlunsplit((scheme, netloc, path, query, '')) + + return url, rev + + def _download_git(self, url, filename): + filename = filename.split('#', 1)[0] + url, rev = self._vcs_split_rev_from_url(url, pop_prefix=True) + + self.info("Doing git clone from %s to %s", url, filename) + os.system("git clone --quiet %s %s" % (url, filename)) + + if rev is not None: + self.info("Checking out %s", rev) + os.system("(cd %s && git checkout --quiet %s)" % ( + filename, + rev, + )) + + return filename + + def _download_hg(self, url, filename): + filename = filename.split('#', 1)[0] + url, rev = self._vcs_split_rev_from_url(url, pop_prefix=True) + + self.info("Doing hg clone from %s to %s", url, filename) + os.system("hg clone --quiet %s %s" % (url, filename)) + + if rev is not None: + self.info("Updating to %s", rev) + os.system("(cd %s && hg up -C -r %s -q)" % ( + filename, + rev, + )) + + return filename + + def debug(self, msg, *args): + log.debug(msg, *args) + + def info(self, msg, *args): + log.info(msg, *args) + + def warn(self, msg, *args): + log.warn(msg, *args) + + +# This pattern matches a character entity reference (a decimal numeric +# references, a hexadecimal numeric reference, or a named reference). +entity_sub = re.compile(r'&(#(\d+|x[\da-fA-F]+)|[\w.:-]+);?').sub + + +def decode_entity(match): + what = match.group(1) + return unescape(what) + + +def htmldecode(text): + """Decode HTML entities in the given text.""" + return entity_sub(decode_entity, text) + + +def socket_timeout(timeout=15): + def _socket_timeout(func): + def _socket_timeout(*args, **kwargs): + old_timeout = socket.getdefaulttimeout() + socket.setdefaulttimeout(timeout) + try: + return func(*args, **kwargs) + finally: + socket.setdefaulttimeout(old_timeout) + + return _socket_timeout + + return _socket_timeout + + +def _encode_auth(auth): + """ + A function compatible with Python 2.3-3.3 that will encode + auth from a URL suitable for an HTTP header. + >>> str(_encode_auth('username%3Apassword')) + 'dXNlcm5hbWU6cGFzc3dvcmQ=' + + Long auth strings should not cause a newline to be inserted. + >>> long_auth = 'username:' + 'password'*10 + >>> chr(10) in str(_encode_auth(long_auth)) + False + """ + auth_s = urllib.parse.unquote(auth) + # convert to bytes + auth_bytes = auth_s.encode() + # use the legacy interface for Python 2.3 support + encoded_bytes = base64.encodestring(auth_bytes) + # convert back to a string + encoded = encoded_bytes.decode() + # strip the trailing carriage return + return encoded.replace('\n', '') + + +class Credential(object): + """ + A username/password pair. Use like a namedtuple. + """ + + def __init__(self, username, password): + self.username = username + self.password = password + + def __iter__(self): + yield self.username + yield self.password + + def __str__(self): + return '%(username)s:%(password)s' % vars(self) + + +class PyPIConfig(configparser.RawConfigParser): + def __init__(self): + """ + Load from ~/.pypirc + """ + defaults = dict.fromkeys(['username', 'password', 'repository'], '') + configparser.RawConfigParser.__init__(self, defaults) + + rc = os.path.join(os.path.expanduser('~'), '.pypirc') + if os.path.exists(rc): + self.read(rc) + + @property + def creds_by_repository(self): + sections_with_repositories = [ + section for section in self.sections() + if self.get(section, 'repository').strip() + ] + + return dict(map(self._get_repo_cred, sections_with_repositories)) + + def _get_repo_cred(self, section): + repo = self.get(section, 'repository').strip() + return repo, Credential( + self.get(section, 'username').strip(), + self.get(section, 'password').strip(), + ) + + def find_credential(self, url): + """ + If the URL indicated appears to be a repository defined in this + config, return the credential for that repository. + """ + for repository, cred in self.creds_by_repository.items(): + if url.startswith(repository): + return cred + + +def open_with_auth(url, opener=urllib.request.urlopen): + """Open a urllib2 request, handling HTTP authentication""" + + scheme, netloc, path, params, query, frag = urllib.parse.urlparse(url) + + # Double scheme does not raise on Mac OS X as revealed by a + # failing test. We would expect "nonnumeric port". Refs #20. + if netloc.endswith(':'): + raise http_client.InvalidURL("nonnumeric port: ''") + + if scheme in ('http', 'https'): + auth, host = urllib.parse.splituser(netloc) + else: + auth = None + + if not auth: + cred = PyPIConfig().find_credential(url) + if cred: + auth = str(cred) + info = cred.username, url + log.info('Authenticating as %s for %s (from .pypirc)', *info) + + if auth: + auth = "Basic " + _encode_auth(auth) + parts = scheme, host, path, params, query, frag + new_url = urllib.parse.urlunparse(parts) + request = urllib.request.Request(new_url) + request.add_header("Authorization", auth) + else: + request = urllib.request.Request(url) + + request.add_header('User-Agent', user_agent) + fp = opener(request) + + if auth: + # Put authentication info back into request URL if same host, + # so that links found on the page will work + s2, h2, path2, param2, query2, frag2 = urllib.parse.urlparse(fp.url) + if s2 == scheme and h2 == host: + parts = s2, netloc, path2, param2, query2, frag2 + fp.url = urllib.parse.urlunparse(parts) + + return fp + + +# adding a timeout to avoid freezing package_index +open_with_auth = socket_timeout(_SOCKET_TIMEOUT)(open_with_auth) + + +def fix_sf_url(url): + return url # backward compatibility + + +def local_open(url): + """Read a local path, with special support for directories""" + scheme, server, path, param, query, frag = urllib.parse.urlparse(url) + filename = urllib.request.url2pathname(path) + if os.path.isfile(filename): + return urllib.request.urlopen(url) + elif path.endswith('/') and os.path.isdir(filename): + files = [] + for f in os.listdir(filename): + filepath = os.path.join(filename, f) + if f == 'index.html': + with open(filepath, 'r') as fp: + body = fp.read() + break + elif os.path.isdir(filepath): + f += '/' + files.append('<a href="{name}">{name}</a>'.format(name=f)) + else: + tmpl = ( + "<html><head><title>{url}" + "{files}") + body = tmpl.format(url=url, files='\n'.join(files)) + status, message = 200, "OK" + else: + status, message, body = 404, "Path not found", "Not found" + + headers = {'content-type': 'text/html'} + body_stream = six.StringIO(body) + return urllib.error.HTTPError(url, status, message, headers, body_stream) diff --git a/week-0/day-3/my_todo_app/venvironment/lib/python3.6/site-packages/setuptools/pep425tags.py b/week-0/day-3/my_todo_app/venvironment/lib/python3.6/site-packages/setuptools/pep425tags.py new file mode 100644 index 00000000..dfe55d58 --- /dev/null +++ b/week-0/day-3/my_todo_app/venvironment/lib/python3.6/site-packages/setuptools/pep425tags.py @@ -0,0 +1,316 @@ +# This file originally from pip: +# https://github.com/pypa/pip/blob/8f4f15a5a95d7d5b511ceaee9ed261176c181970/src/pip/_internal/pep425tags.py +"""Generate and work with PEP 425 Compatibility Tags.""" +from __future__ import absolute_import + +import distutils.util +import platform +import re +import sys +import sysconfig +import warnings +from collections import OrderedDict + +from . import glibc + +_osx_arch_pat = re.compile(r'(.+)_(\d+)_(\d+)_(.+)') + + +def get_config_var(var): + try: + return sysconfig.get_config_var(var) + except IOError as e: # Issue #1074 + warnings.warn("{}".format(e), RuntimeWarning) + return None + + +def get_abbr_impl(): + """Return abbreviated implementation name.""" + if hasattr(sys, 'pypy_version_info'): + pyimpl = 'pp' + elif sys.platform.startswith('java'): + pyimpl = 'jy' + elif sys.platform == 'cli': + pyimpl = 'ip' + else: + pyimpl = 'cp' + return pyimpl + + +def get_impl_ver(): + """Return implementation version.""" + impl_ver = get_config_var("py_version_nodot") + if not impl_ver or get_abbr_impl() == 'pp': + impl_ver = ''.join(map(str, get_impl_version_info())) + return impl_ver + + +def get_impl_version_info(): + """Return sys.version_info-like tuple for use in decrementing the minor + version.""" + if get_abbr_impl() == 'pp': + # as per https://github.com/pypa/pip/issues/2882 + return (sys.version_info[0], sys.pypy_version_info.major, + sys.pypy_version_info.minor) + else: + return sys.version_info[0], sys.version_info[1] + + +def get_impl_tag(): + """ + Returns the Tag for this specific implementation. + """ + return "{}{}".format(get_abbr_impl(), get_impl_ver()) + + +def get_flag(var, fallback, expected=True, warn=True): + """Use a fallback method for determining SOABI flags if the needed config + var is unset or unavailable.""" + val = get_config_var(var) + if val is None: + if warn: + warnings.warn("Config variable '{0}' is unset, Python ABI tag may " + "be incorrect".format(var), RuntimeWarning, 2) + return fallback() + return val == expected + + +def get_abi_tag(): + """Return the ABI tag based on SOABI (if available) or emulate SOABI + (CPython 2, PyPy).""" + soabi = get_config_var('SOABI') + impl = get_abbr_impl() + if not soabi and impl in {'cp', 'pp'} and hasattr(sys, 'maxunicode'): + d = '' + m = '' + u = '' + if get_flag('Py_DEBUG', + lambda: hasattr(sys, 'gettotalrefcount'), + warn=(impl == 'cp')): + d = 'd' + if get_flag('WITH_PYMALLOC', + lambda: impl == 'cp', + warn=(impl == 'cp')): + m = 'm' + if get_flag('Py_UNICODE_SIZE', + lambda: sys.maxunicode == 0x10ffff, + expected=4, + warn=(impl == 'cp' and + sys.version_info < (3, 3))) \ + and sys.version_info < (3, 3): + u = 'u' + abi = '%s%s%s%s%s' % (impl, get_impl_ver(), d, m, u) + elif soabi and soabi.startswith('cpython-'): + abi = 'cp' + soabi.split('-')[1] + elif soabi: + abi = soabi.replace('.', '_').replace('-', '_') + else: + abi = None + return abi + + +def _is_running_32bit(): + return sys.maxsize == 2147483647 + + +def get_platform(): + """Return our platform name 'win32', 'linux_x86_64'""" + if sys.platform == 'darwin': + # distutils.util.get_platform() returns the release based on the value + # of MACOSX_DEPLOYMENT_TARGET on which Python was built, which may + # be significantly older than the user's current machine. + release, _, machine = platform.mac_ver() + split_ver = release.split('.') + + if machine == "x86_64" and _is_running_32bit(): + machine = "i386" + elif machine == "ppc64" and _is_running_32bit(): + machine = "ppc" + + return 'macosx_{}_{}_{}'.format(split_ver[0], split_ver[1], machine) + + # XXX remove distutils dependency + result = distutils.util.get_platform().replace('.', '_').replace('-', '_') + if result == "linux_x86_64" and _is_running_32bit(): + # 32 bit Python program (running on a 64 bit Linux): pip should only + # install and run 32 bit compiled extensions in that case. + result = "linux_i686" + + return result + + +def is_manylinux1_compatible(): + # Only Linux, and only x86-64 / i686 + if get_platform() not in {"linux_x86_64", "linux_i686"}: + return False + + # Check for presence of _manylinux module + try: + import _manylinux + return bool(_manylinux.manylinux1_compatible) + except (ImportError, AttributeError): + # Fall through to heuristic check below + pass + + # Check glibc version. CentOS 5 uses glibc 2.5. + return glibc.have_compatible_glibc(2, 5) + + +def get_darwin_arches(major, minor, machine): + """Return a list of supported arches (including group arches) for + the given major, minor and machine architecture of an macOS machine. + """ + arches = [] + + def _supports_arch(major, minor, arch): + # Looking at the application support for macOS versions in the chart + # provided by https://en.wikipedia.org/wiki/OS_X#Versions it appears + # our timeline looks roughly like: + # + # 10.0 - Introduces ppc support. + # 10.4 - Introduces ppc64, i386, and x86_64 support, however the ppc64 + # and x86_64 support is CLI only, and cannot be used for GUI + # applications. + # 10.5 - Extends ppc64 and x86_64 support to cover GUI applications. + # 10.6 - Drops support for ppc64 + # 10.7 - Drops support for ppc + # + # Given that we do not know if we're installing a CLI or a GUI + # application, we must be conservative and assume it might be a GUI + # application and behave as if ppc64 and x86_64 support did not occur + # until 10.5. + # + # Note: The above information is taken from the "Application support" + # column in the chart not the "Processor support" since I believe + # that we care about what instruction sets an application can use + # not which processors the OS supports. + if arch == 'ppc': + return (major, minor) <= (10, 5) + if arch == 'ppc64': + return (major, minor) == (10, 5) + if arch == 'i386': + return (major, minor) >= (10, 4) + if arch == 'x86_64': + return (major, minor) >= (10, 5) + if arch in groups: + for garch in groups[arch]: + if _supports_arch(major, minor, garch): + return True + return False + + groups = OrderedDict([ + ("fat", ("i386", "ppc")), + ("intel", ("x86_64", "i386")), + ("fat64", ("x86_64", "ppc64")), + ("fat32", ("x86_64", "i386", "ppc")), + ]) + + if _supports_arch(major, minor, machine): + arches.append(machine) + + for garch in groups: + if machine in groups[garch] and _supports_arch(major, minor, garch): + arches.append(garch) + + arches.append('universal') + + return arches + + +def get_supported(versions=None, noarch=False, platform=None, + impl=None, abi=None): + """Return a list of supported tags for each version specified in + `versions`. + + :param versions: a list of string versions, of the form ["33", "32"], + or None. The first version will be assumed to support our ABI. + :param platform: specify the exact platform you want valid + tags for, or None. If None, use the local system platform. + :param impl: specify the exact implementation you want valid + tags for, or None. If None, use the local interpreter impl. + :param abi: specify the exact abi you want valid + tags for, or None. If None, use the local interpreter abi. + """ + supported = [] + + # Versions must be given with respect to the preference + if versions is None: + versions = [] + version_info = get_impl_version_info() + major = version_info[:-1] + # Support all previous minor Python versions. + for minor in range(version_info[-1], -1, -1): + versions.append(''.join(map(str, major + (minor,)))) + + impl = impl or get_abbr_impl() + + abis = [] + + abi = abi or get_abi_tag() + if abi: + abis[0:0] = [abi] + + abi3s = set() + import imp + for suffix in imp.get_suffixes(): + if suffix[0].startswith('.abi'): + abi3s.add(suffix[0].split('.', 2)[1]) + + abis.extend(sorted(list(abi3s))) + + abis.append('none') + + if not noarch: + arch = platform or get_platform() + if arch.startswith('macosx'): + # support macosx-10.6-intel on macosx-10.9-x86_64 + match = _osx_arch_pat.match(arch) + if match: + name, major, minor, actual_arch = match.groups() + tpl = '{}_{}_%i_%s'.format(name, major) + arches = [] + for m in reversed(range(int(minor) + 1)): + for a in get_darwin_arches(int(major), m, actual_arch): + arches.append(tpl % (m, a)) + else: + # arch pattern didn't match (?!) + arches = [arch] + elif platform is None and is_manylinux1_compatible(): + arches = [arch.replace('linux', 'manylinux1'), arch] + else: + arches = [arch] + + # Current version, current API (built specifically for our Python): + for abi in abis: + for arch in arches: + supported.append(('%s%s' % (impl, versions[0]), abi, arch)) + + # abi3 modules compatible with older version of Python + for version in versions[1:]: + # abi3 was introduced in Python 3.2 + if version in {'31', '30'}: + break + for abi in abi3s: # empty set if not Python 3 + for arch in arches: + supported.append(("%s%s" % (impl, version), abi, arch)) + + # Has binaries, does not use the Python API: + for arch in arches: + supported.append(('py%s' % (versions[0][0]), 'none', arch)) + + # No abi / arch, but requires our implementation: + supported.append(('%s%s' % (impl, versions[0]), 'none', 'any')) + # Tagged specifically as being cross-version compatible + # (with just the major version specified) + supported.append(('%s%s' % (impl, versions[0][0]), 'none', 'any')) + + # No abi / arch, generic Python + for i, version in enumerate(versions): + supported.append(('py%s' % (version,), 'none', 'any')) + if i == 0: + supported.append(('py%s' % (version[0]), 'none', 'any')) + + return supported + + +implementation_tag = get_impl_tag() diff --git a/week-0/day-3/my_todo_app/venvironment/lib/python3.6/site-packages/setuptools/py27compat.py b/week-0/day-3/my_todo_app/venvironment/lib/python3.6/site-packages/setuptools/py27compat.py new file mode 100644 index 00000000..2985011b --- /dev/null +++ b/week-0/day-3/my_todo_app/venvironment/lib/python3.6/site-packages/setuptools/py27compat.py @@ -0,0 +1,28 @@ +""" +Compatibility Support for Python 2.7 and earlier +""" + +import platform + +from setuptools.extern import six + + +def get_all_headers(message, key): + """ + Given an HTTPMessage, return all headers matching a given key. + """ + return message.get_all(key) + + +if six.PY2: + def get_all_headers(message, key): + return message.getheaders(key) + + +linux_py2_ascii = ( + platform.system() == 'Linux' and + six.PY2 +) + +rmtree_safe = str if linux_py2_ascii else lambda x: x +"""Workaround for http://bugs.python.org/issue24672""" diff --git a/week-0/day-3/my_todo_app/venvironment/lib/python3.6/site-packages/setuptools/py31compat.py b/week-0/day-3/my_todo_app/venvironment/lib/python3.6/site-packages/setuptools/py31compat.py new file mode 100644 index 00000000..4ea95320 --- /dev/null +++ b/week-0/day-3/my_todo_app/venvironment/lib/python3.6/site-packages/setuptools/py31compat.py @@ -0,0 +1,41 @@ +__all__ = ['get_config_vars', 'get_path'] + +try: + # Python 2.7 or >=3.2 + from sysconfig import get_config_vars, get_path +except ImportError: + from distutils.sysconfig import get_config_vars, get_python_lib + + def get_path(name): + if name not in ('platlib', 'purelib'): + raise ValueError("Name must be purelib or platlib") + return get_python_lib(name == 'platlib') + + +try: + # Python >=3.2 + from tempfile import TemporaryDirectory +except ImportError: + import shutil + import tempfile + + class TemporaryDirectory(object): + """ + Very simple temporary directory context manager. + Will try to delete afterward, but will also ignore OS and similar + errors on deletion. + """ + + def __init__(self): + self.name = None # Handle mkdtemp raising an exception + self.name = tempfile.mkdtemp() + + def __enter__(self): + return self.name + + def __exit__(self, exctype, excvalue, exctrace): + try: + shutil.rmtree(self.name, True) + except OSError: # removal errors are not the only possible + pass + self.name = None diff --git a/week-0/day-3/my_todo_app/venvironment/lib/python3.6/site-packages/setuptools/py33compat.py b/week-0/day-3/my_todo_app/venvironment/lib/python3.6/site-packages/setuptools/py33compat.py new file mode 100644 index 00000000..2a73ebb3 --- /dev/null +++ b/week-0/day-3/my_todo_app/venvironment/lib/python3.6/site-packages/setuptools/py33compat.py @@ -0,0 +1,54 @@ +import dis +import array +import collections + +try: + import html +except ImportError: + html = None + +from setuptools.extern import six +from setuptools.extern.six.moves import html_parser + + +OpArg = collections.namedtuple('OpArg', 'opcode arg') + + +class Bytecode_compat(object): + def __init__(self, code): + self.code = code + + def __iter__(self): + """Yield '(op,arg)' pair for each operation in code object 'code'""" + + bytes = array.array('b', self.code.co_code) + eof = len(self.code.co_code) + + ptr = 0 + extended_arg = 0 + + while ptr < eof: + + op = bytes[ptr] + + if op >= dis.HAVE_ARGUMENT: + + arg = bytes[ptr + 1] + bytes[ptr + 2] * 256 + extended_arg + ptr += 3 + + if op == dis.EXTENDED_ARG: + long_type = six.integer_types[-1] + extended_arg = arg * long_type(65536) + continue + + else: + arg = None + ptr += 1 + + yield OpArg(op, arg) + + +Bytecode = getattr(dis, 'Bytecode', Bytecode_compat) + + +unescape = getattr(html, 'unescape', html_parser.HTMLParser().unescape) diff --git a/week-0/day-3/my_todo_app/venvironment/lib/python3.6/site-packages/setuptools/py36compat.py b/week-0/day-3/my_todo_app/venvironment/lib/python3.6/site-packages/setuptools/py36compat.py new file mode 100644 index 00000000..f5279696 --- /dev/null +++ b/week-0/day-3/my_todo_app/venvironment/lib/python3.6/site-packages/setuptools/py36compat.py @@ -0,0 +1,82 @@ +import sys +from distutils.errors import DistutilsOptionError +from distutils.util import strtobool +from distutils.debug import DEBUG + + +class Distribution_parse_config_files: + """ + Mix-in providing forward-compatibility for functionality to be + included by default on Python 3.7. + + Do not edit the code in this class except to update functionality + as implemented in distutils. + """ + def parse_config_files(self, filenames=None): + from configparser import ConfigParser + + # Ignore install directory options if we have a venv + if sys.prefix != sys.base_prefix: + ignore_options = [ + 'install-base', 'install-platbase', 'install-lib', + 'install-platlib', 'install-purelib', 'install-headers', + 'install-scripts', 'install-data', 'prefix', 'exec-prefix', + 'home', 'user', 'root'] + else: + ignore_options = [] + + ignore_options = frozenset(ignore_options) + + if filenames is None: + filenames = self.find_config_files() + + if DEBUG: + self.announce("Distribution.parse_config_files():") + + parser = ConfigParser(interpolation=None) + for filename in filenames: + if DEBUG: + self.announce(" reading %s" % filename) + parser.read(filename) + for section in parser.sections(): + options = parser.options(section) + opt_dict = self.get_option_dict(section) + + for opt in options: + if opt != '__name__' and opt not in ignore_options: + val = parser.get(section,opt) + opt = opt.replace('-', '_') + opt_dict[opt] = (filename, val) + + # Make the ConfigParser forget everything (so we retain + # the original filenames that options come from) + parser.__init__() + + # If there was a "global" section in the config file, use it + # to set Distribution options. + + if 'global' in self.command_options: + for (opt, (src, val)) in self.command_options['global'].items(): + alias = self.negative_opt.get(opt) + try: + if alias: + setattr(self, alias, not strtobool(val)) + elif opt in ('verbose', 'dry_run'): # ugh! + setattr(self, opt, strtobool(val)) + else: + setattr(self, opt, val) + except ValueError as msg: + raise DistutilsOptionError(msg) + + +if sys.version_info < (3,): + # Python 2 behavior is sufficient + class Distribution_parse_config_files: + pass + + +if False: + # When updated behavior is available upstream, + # disable override here. + class Distribution_parse_config_files: + pass diff --git a/week-0/day-3/my_todo_app/venvironment/lib/python3.6/site-packages/setuptools/sandbox.py b/week-0/day-3/my_todo_app/venvironment/lib/python3.6/site-packages/setuptools/sandbox.py new file mode 100644 index 00000000..685f3f72 --- /dev/null +++ b/week-0/day-3/my_todo_app/venvironment/lib/python3.6/site-packages/setuptools/sandbox.py @@ -0,0 +1,491 @@ +import os +import sys +import tempfile +import operator +import functools +import itertools +import re +import contextlib +import pickle +import textwrap + +from setuptools.extern import six +from setuptools.extern.six.moves import builtins, map + +import pkg_resources.py31compat + +if sys.platform.startswith('java'): + import org.python.modules.posix.PosixModule as _os +else: + _os = sys.modules[os.name] +try: + _file = file +except NameError: + _file = None +_open = open +from distutils.errors import DistutilsError +from pkg_resources import working_set + + +__all__ = [ + "AbstractSandbox", "DirectorySandbox", "SandboxViolation", "run_setup", +] + + +def _execfile(filename, globals, locals=None): + """ + Python 3 implementation of execfile. + """ + mode = 'rb' + with open(filename, mode) as stream: + script = stream.read() + if locals is None: + locals = globals + code = compile(script, filename, 'exec') + exec(code, globals, locals) + + +@contextlib.contextmanager +def save_argv(repl=None): + saved = sys.argv[:] + if repl is not None: + sys.argv[:] = repl + try: + yield saved + finally: + sys.argv[:] = saved + + +@contextlib.contextmanager +def save_path(): + saved = sys.path[:] + try: + yield saved + finally: + sys.path[:] = saved + + +@contextlib.contextmanager +def override_temp(replacement): + """ + Monkey-patch tempfile.tempdir with replacement, ensuring it exists + """ + pkg_resources.py31compat.makedirs(replacement, exist_ok=True) + + saved = tempfile.tempdir + + tempfile.tempdir = replacement + + try: + yield + finally: + tempfile.tempdir = saved + + +@contextlib.contextmanager +def pushd(target): + saved = os.getcwd() + os.chdir(target) + try: + yield saved + finally: + os.chdir(saved) + + +class UnpickleableException(Exception): + """ + An exception representing another Exception that could not be pickled. + """ + + @staticmethod + def dump(type, exc): + """ + Always return a dumped (pickled) type and exc. If exc can't be pickled, + wrap it in UnpickleableException first. + """ + try: + return pickle.dumps(type), pickle.dumps(exc) + except Exception: + # get UnpickleableException inside the sandbox + from setuptools.sandbox import UnpickleableException as cls + return cls.dump(cls, cls(repr(exc))) + + +class ExceptionSaver: + """ + A Context Manager that will save an exception, serialized, and restore it + later. + """ + + def __enter__(self): + return self + + def __exit__(self, type, exc, tb): + if not exc: + return + + # dump the exception + self._saved = UnpickleableException.dump(type, exc) + self._tb = tb + + # suppress the exception + return True + + def resume(self): + "restore and re-raise any exception" + + if '_saved' not in vars(self): + return + + type, exc = map(pickle.loads, self._saved) + six.reraise(type, exc, self._tb) + + +@contextlib.contextmanager +def save_modules(): + """ + Context in which imported modules are saved. + + Translates exceptions internal to the context into the equivalent exception + outside the context. + """ + saved = sys.modules.copy() + with ExceptionSaver() as saved_exc: + yield saved + + sys.modules.update(saved) + # remove any modules imported since + del_modules = ( + mod_name for mod_name in sys.modules + if mod_name not in saved + # exclude any encodings modules. See #285 + and not mod_name.startswith('encodings.') + ) + _clear_modules(del_modules) + + saved_exc.resume() + + +def _clear_modules(module_names): + for mod_name in list(module_names): + del sys.modules[mod_name] + + +@contextlib.contextmanager +def save_pkg_resources_state(): + saved = pkg_resources.__getstate__() + try: + yield saved + finally: + pkg_resources.__setstate__(saved) + + +@contextlib.contextmanager +def setup_context(setup_dir): + temp_dir = os.path.join(setup_dir, 'temp') + with save_pkg_resources_state(): + with save_modules(): + hide_setuptools() + with save_path(): + with save_argv(): + with override_temp(temp_dir): + with pushd(setup_dir): + # ensure setuptools commands are available + __import__('setuptools') + yield + + +def _needs_hiding(mod_name): + """ + >>> _needs_hiding('setuptools') + True + >>> _needs_hiding('pkg_resources') + True + >>> _needs_hiding('setuptools_plugin') + False + >>> _needs_hiding('setuptools.__init__') + True + >>> _needs_hiding('distutils') + True + >>> _needs_hiding('os') + False + >>> _needs_hiding('Cython') + True + """ + pattern = re.compile(r'(setuptools|pkg_resources|distutils|Cython)(\.|$)') + return bool(pattern.match(mod_name)) + + +def hide_setuptools(): + """ + Remove references to setuptools' modules from sys.modules to allow the + invocation to import the most appropriate setuptools. This technique is + necessary to avoid issues such as #315 where setuptools upgrading itself + would fail to find a function declared in the metadata. + """ + modules = filter(_needs_hiding, sys.modules) + _clear_modules(modules) + + +def run_setup(setup_script, args): + """Run a distutils setup script, sandboxed in its directory""" + setup_dir = os.path.abspath(os.path.dirname(setup_script)) + with setup_context(setup_dir): + try: + sys.argv[:] = [setup_script] + list(args) + sys.path.insert(0, setup_dir) + # reset to include setup dir, w/clean callback list + working_set.__init__() + working_set.callbacks.append(lambda dist: dist.activate()) + + # __file__ should be a byte string on Python 2 (#712) + dunder_file = ( + setup_script + if isinstance(setup_script, str) else + setup_script.encode(sys.getfilesystemencoding()) + ) + + with DirectorySandbox(setup_dir): + ns = dict(__file__=dunder_file, __name__='__main__') + _execfile(setup_script, ns) + except SystemExit as v: + if v.args and v.args[0]: + raise + # Normal exit, just return + + +class AbstractSandbox: + """Wrap 'os' module and 'open()' builtin for virtualizing setup scripts""" + + _active = False + + def __init__(self): + self._attrs = [ + name for name in dir(_os) + if not name.startswith('_') and hasattr(self, name) + ] + + def _copy(self, source): + for name in self._attrs: + setattr(os, name, getattr(source, name)) + + def __enter__(self): + self._copy(self) + if _file: + builtins.file = self._file + builtins.open = self._open + self._active = True + + def __exit__(self, exc_type, exc_value, traceback): + self._active = False + if _file: + builtins.file = _file + builtins.open = _open + self._copy(_os) + + def run(self, func): + """Run 'func' under os sandboxing""" + with self: + return func() + + def _mk_dual_path_wrapper(name): + original = getattr(_os, name) + + def wrap(self, src, dst, *args, **kw): + if self._active: + src, dst = self._remap_pair(name, src, dst, *args, **kw) + return original(src, dst, *args, **kw) + + return wrap + + for name in ["rename", "link", "symlink"]: + if hasattr(_os, name): + locals()[name] = _mk_dual_path_wrapper(name) + + def _mk_single_path_wrapper(name, original=None): + original = original or getattr(_os, name) + + def wrap(self, path, *args, **kw): + if self._active: + path = self._remap_input(name, path, *args, **kw) + return original(path, *args, **kw) + + return wrap + + if _file: + _file = _mk_single_path_wrapper('file', _file) + _open = _mk_single_path_wrapper('open', _open) + for name in [ + "stat", "listdir", "chdir", "open", "chmod", "chown", "mkdir", + "remove", "unlink", "rmdir", "utime", "lchown", "chroot", "lstat", + "startfile", "mkfifo", "mknod", "pathconf", "access" + ]: + if hasattr(_os, name): + locals()[name] = _mk_single_path_wrapper(name) + + def _mk_single_with_return(name): + original = getattr(_os, name) + + def wrap(self, path, *args, **kw): + if self._active: + path = self._remap_input(name, path, *args, **kw) + return self._remap_output(name, original(path, *args, **kw)) + return original(path, *args, **kw) + + return wrap + + for name in ['readlink', 'tempnam']: + if hasattr(_os, name): + locals()[name] = _mk_single_with_return(name) + + def _mk_query(name): + original = getattr(_os, name) + + def wrap(self, *args, **kw): + retval = original(*args, **kw) + if self._active: + return self._remap_output(name, retval) + return retval + + return wrap + + for name in ['getcwd', 'tmpnam']: + if hasattr(_os, name): + locals()[name] = _mk_query(name) + + def _validate_path(self, path): + """Called to remap or validate any path, whether input or output""" + return path + + def _remap_input(self, operation, path, *args, **kw): + """Called for path inputs""" + return self._validate_path(path) + + def _remap_output(self, operation, path): + """Called for path outputs""" + return self._validate_path(path) + + def _remap_pair(self, operation, src, dst, *args, **kw): + """Called for path pairs like rename, link, and symlink operations""" + return ( + self._remap_input(operation + '-from', src, *args, **kw), + self._remap_input(operation + '-to', dst, *args, **kw) + ) + + +if hasattr(os, 'devnull'): + _EXCEPTIONS = [os.devnull,] +else: + _EXCEPTIONS = [] + + +class DirectorySandbox(AbstractSandbox): + """Restrict operations to a single subdirectory - pseudo-chroot""" + + write_ops = dict.fromkeys([ + "open", "chmod", "chown", "mkdir", "remove", "unlink", "rmdir", + "utime", "lchown", "chroot", "mkfifo", "mknod", "tempnam", + ]) + + _exception_patterns = [ + # Allow lib2to3 to attempt to save a pickled grammar object (#121) + r'.*lib2to3.*\.pickle$', + ] + "exempt writing to paths that match the pattern" + + def __init__(self, sandbox, exceptions=_EXCEPTIONS): + self._sandbox = os.path.normcase(os.path.realpath(sandbox)) + self._prefix = os.path.join(self._sandbox, '') + self._exceptions = [ + os.path.normcase(os.path.realpath(path)) + for path in exceptions + ] + AbstractSandbox.__init__(self) + + def _violation(self, operation, *args, **kw): + from setuptools.sandbox import SandboxViolation + raise SandboxViolation(operation, args, kw) + + if _file: + + def _file(self, path, mode='r', *args, **kw): + if mode not in ('r', 'rt', 'rb', 'rU', 'U') and not self._ok(path): + self._violation("file", path, mode, *args, **kw) + return _file(path, mode, *args, **kw) + + def _open(self, path, mode='r', *args, **kw): + if mode not in ('r', 'rt', 'rb', 'rU', 'U') and not self._ok(path): + self._violation("open", path, mode, *args, **kw) + return _open(path, mode, *args, **kw) + + def tmpnam(self): + self._violation("tmpnam") + + def _ok(self, path): + active = self._active + try: + self._active = False + realpath = os.path.normcase(os.path.realpath(path)) + return ( + self._exempted(realpath) + or realpath == self._sandbox + or realpath.startswith(self._prefix) + ) + finally: + self._active = active + + def _exempted(self, filepath): + start_matches = ( + filepath.startswith(exception) + for exception in self._exceptions + ) + pattern_matches = ( + re.match(pattern, filepath) + for pattern in self._exception_patterns + ) + candidates = itertools.chain(start_matches, pattern_matches) + return any(candidates) + + def _remap_input(self, operation, path, *args, **kw): + """Called for path inputs""" + if operation in self.write_ops and not self._ok(path): + self._violation(operation, os.path.realpath(path), *args, **kw) + return path + + def _remap_pair(self, operation, src, dst, *args, **kw): + """Called for path pairs like rename, link, and symlink operations""" + if not self._ok(src) or not self._ok(dst): + self._violation(operation, src, dst, *args, **kw) + return (src, dst) + + def open(self, file, flags, mode=0o777, *args, **kw): + """Called for low-level os.open()""" + if flags & WRITE_FLAGS and not self._ok(file): + self._violation("os.open", file, flags, mode, *args, **kw) + return _os.open(file, flags, mode, *args, **kw) + + +WRITE_FLAGS = functools.reduce( + operator.or_, [getattr(_os, a, 0) for a in + "O_WRONLY O_RDWR O_APPEND O_CREAT O_TRUNC O_TEMPORARY".split()] +) + + +class SandboxViolation(DistutilsError): + """A setup script attempted to modify the filesystem outside the sandbox""" + + tmpl = textwrap.dedent(""" + SandboxViolation: {cmd}{args!r} {kwargs} + + The package setup script has attempted to modify files on your system + that are not within the EasyInstall build area, and has been aborted. + + This package cannot be safely installed by EasyInstall, and may not + support alternate installation locations even if you run its setup + script by hand. Please inform the package's author and the EasyInstall + maintainers to find out if a fix or workaround is available. + """).lstrip() + + def __str__(self): + cmd, args, kwargs = self.args + return self.tmpl.format(**locals()) diff --git a/week-0/day-3/my_todo_app/venvironment/lib/python3.6/site-packages/setuptools/script (dev).tmpl b/week-0/day-3/my_todo_app/venvironment/lib/python3.6/site-packages/setuptools/script (dev).tmpl new file mode 100644 index 00000000..d58b1bb5 --- /dev/null +++ b/week-0/day-3/my_todo_app/venvironment/lib/python3.6/site-packages/setuptools/script (dev).tmpl @@ -0,0 +1,5 @@ +# EASY-INSTALL-DEV-SCRIPT: %(spec)r,%(script_name)r +__requires__ = %(spec)r +__import__('pkg_resources').require(%(spec)r) +__file__ = %(dev_path)r +exec(compile(open(__file__).read(), __file__, 'exec')) diff --git a/week-0/day-3/my_todo_app/venvironment/lib/python3.6/site-packages/setuptools/script.tmpl b/week-0/day-3/my_todo_app/venvironment/lib/python3.6/site-packages/setuptools/script.tmpl new file mode 100644 index 00000000..ff5efbca --- /dev/null +++ b/week-0/day-3/my_todo_app/venvironment/lib/python3.6/site-packages/setuptools/script.tmpl @@ -0,0 +1,3 @@ +# EASY-INSTALL-SCRIPT: %(spec)r,%(script_name)r +__requires__ = %(spec)r +__import__('pkg_resources').run_script(%(spec)r, %(script_name)r) diff --git a/week-0/day-3/my_todo_app/venvironment/lib/python3.6/site-packages/setuptools/site-patch.py b/week-0/day-3/my_todo_app/venvironment/lib/python3.6/site-packages/setuptools/site-patch.py new file mode 100644 index 00000000..0d2d2ff8 --- /dev/null +++ b/week-0/day-3/my_todo_app/venvironment/lib/python3.6/site-packages/setuptools/site-patch.py @@ -0,0 +1,74 @@ +def __boot(): + import sys + import os + PYTHONPATH = os.environ.get('PYTHONPATH') + if PYTHONPATH is None or (sys.platform == 'win32' and not PYTHONPATH): + PYTHONPATH = [] + else: + PYTHONPATH = PYTHONPATH.split(os.pathsep) + + pic = getattr(sys, 'path_importer_cache', {}) + stdpath = sys.path[len(PYTHONPATH):] + mydir = os.path.dirname(__file__) + + for item in stdpath: + if item == mydir or not item: + continue # skip if current dir. on Windows, or my own directory + importer = pic.get(item) + if importer is not None: + loader = importer.find_module('site') + if loader is not None: + # This should actually reload the current module + loader.load_module('site') + break + else: + try: + import imp # Avoid import loop in Python >= 3.3 + stream, path, descr = imp.find_module('site', [item]) + except ImportError: + continue + if stream is None: + continue + try: + # This should actually reload the current module + imp.load_module('site', stream, path, descr) + finally: + stream.close() + break + else: + raise ImportError("Couldn't find the real 'site' module") + + known_paths = dict([(makepath(item)[1], 1) for item in sys.path]) # 2.2 comp + + oldpos = getattr(sys, '__egginsert', 0) # save old insertion position + sys.__egginsert = 0 # and reset the current one + + for item in PYTHONPATH: + addsitedir(item) + + sys.__egginsert += oldpos # restore effective old position + + d, nd = makepath(stdpath[0]) + insert_at = None + new_path = [] + + for item in sys.path: + p, np = makepath(item) + + if np == nd and insert_at is None: + # We've hit the first 'system' path entry, so added entries go here + insert_at = len(new_path) + + if np in known_paths or insert_at is None: + new_path.append(item) + else: + # new path after the insert point, back-insert it + new_path.insert(insert_at, item) + insert_at += 1 + + sys.path[:] = new_path + + +if __name__ == 'site': + __boot() + del __boot diff --git a/week-0/day-3/my_todo_app/venvironment/lib/python3.6/site-packages/setuptools/ssl_support.py b/week-0/day-3/my_todo_app/venvironment/lib/python3.6/site-packages/setuptools/ssl_support.py new file mode 100644 index 00000000..6362f1f4 --- /dev/null +++ b/week-0/day-3/my_todo_app/venvironment/lib/python3.6/site-packages/setuptools/ssl_support.py @@ -0,0 +1,260 @@ +import os +import socket +import atexit +import re +import functools + +from setuptools.extern.six.moves import urllib, http_client, map, filter + +from pkg_resources import ResolutionError, ExtractionError + +try: + import ssl +except ImportError: + ssl = None + +__all__ = [ + 'VerifyingHTTPSHandler', 'find_ca_bundle', 'is_available', 'cert_paths', + 'opener_for' +] + +cert_paths = """ +/etc/pki/tls/certs/ca-bundle.crt +/etc/ssl/certs/ca-certificates.crt +/usr/share/ssl/certs/ca-bundle.crt +/usr/local/share/certs/ca-root.crt +/etc/ssl/cert.pem +/System/Library/OpenSSL/certs/cert.pem +/usr/local/share/certs/ca-root-nss.crt +/etc/ssl/ca-bundle.pem +""".strip().split() + +try: + HTTPSHandler = urllib.request.HTTPSHandler + HTTPSConnection = http_client.HTTPSConnection +except AttributeError: + HTTPSHandler = HTTPSConnection = object + +is_available = ssl is not None and object not in (HTTPSHandler, HTTPSConnection) + + +try: + from ssl import CertificateError, match_hostname +except ImportError: + try: + from backports.ssl_match_hostname import CertificateError + from backports.ssl_match_hostname import match_hostname + except ImportError: + CertificateError = None + match_hostname = None + +if not CertificateError: + + class CertificateError(ValueError): + pass + + +if not match_hostname: + + def _dnsname_match(dn, hostname, max_wildcards=1): + """Matching according to RFC 6125, section 6.4.3 + + http://tools.ietf.org/html/rfc6125#section-6.4.3 + """ + pats = [] + if not dn: + return False + + # Ported from python3-syntax: + # leftmost, *remainder = dn.split(r'.') + parts = dn.split(r'.') + leftmost = parts[0] + remainder = parts[1:] + + wildcards = leftmost.count('*') + if wildcards > max_wildcards: + # Issue #17980: avoid denials of service by refusing more + # than one wildcard per fragment. A survey of established + # policy among SSL implementations showed it to be a + # reasonable choice. + raise CertificateError( + "too many wildcards in certificate DNS name: " + repr(dn)) + + # speed up common case w/o wildcards + if not wildcards: + return dn.lower() == hostname.lower() + + # RFC 6125, section 6.4.3, subitem 1. + # The client SHOULD NOT attempt to match a presented identifier in which + # the wildcard character comprises a label other than the left-most label. + if leftmost == '*': + # When '*' is a fragment by itself, it matches a non-empty dotless + # fragment. + pats.append('[^.]+') + elif leftmost.startswith('xn--') or hostname.startswith('xn--'): + # RFC 6125, section 6.4.3, subitem 3. + # The client SHOULD NOT attempt to match a presented identifier + # where the wildcard character is embedded within an A-label or + # U-label of an internationalized domain name. + pats.append(re.escape(leftmost)) + else: + # Otherwise, '*' matches any dotless string, e.g. www* + pats.append(re.escape(leftmost).replace(r'\*', '[^.]*')) + + # add the remaining fragments, ignore any wildcards + for frag in remainder: + pats.append(re.escape(frag)) + + pat = re.compile(r'\A' + r'\.'.join(pats) + r'\Z', re.IGNORECASE) + return pat.match(hostname) + + def match_hostname(cert, hostname): + """Verify that *cert* (in decoded format as returned by + SSLSocket.getpeercert()) matches the *hostname*. RFC 2818 and RFC 6125 + rules are followed, but IP addresses are not accepted for *hostname*. + + CertificateError is raised on failure. On success, the function + returns nothing. + """ + if not cert: + raise ValueError("empty or no certificate") + dnsnames = [] + san = cert.get('subjectAltName', ()) + for key, value in san: + if key == 'DNS': + if _dnsname_match(value, hostname): + return + dnsnames.append(value) + if not dnsnames: + # The subject is only checked when there is no dNSName entry + # in subjectAltName + for sub in cert.get('subject', ()): + for key, value in sub: + # XXX according to RFC 2818, the most specific Common Name + # must be used. + if key == 'commonName': + if _dnsname_match(value, hostname): + return + dnsnames.append(value) + if len(dnsnames) > 1: + raise CertificateError("hostname %r " + "doesn't match either of %s" + % (hostname, ', '.join(map(repr, dnsnames)))) + elif len(dnsnames) == 1: + raise CertificateError("hostname %r " + "doesn't match %r" + % (hostname, dnsnames[0])) + else: + raise CertificateError("no appropriate commonName or " + "subjectAltName fields were found") + + +class VerifyingHTTPSHandler(HTTPSHandler): + """Simple verifying handler: no auth, subclasses, timeouts, etc.""" + + def __init__(self, ca_bundle): + self.ca_bundle = ca_bundle + HTTPSHandler.__init__(self) + + def https_open(self, req): + return self.do_open( + lambda host, **kw: VerifyingHTTPSConn(host, self.ca_bundle, **kw), req + ) + + +class VerifyingHTTPSConn(HTTPSConnection): + """Simple verifying connection: no auth, subclasses, timeouts, etc.""" + + def __init__(self, host, ca_bundle, **kw): + HTTPSConnection.__init__(self, host, **kw) + self.ca_bundle = ca_bundle + + def connect(self): + sock = socket.create_connection( + (self.host, self.port), getattr(self, 'source_address', None) + ) + + # Handle the socket if a (proxy) tunnel is present + if hasattr(self, '_tunnel') and getattr(self, '_tunnel_host', None): + self.sock = sock + self._tunnel() + # http://bugs.python.org/issue7776: Python>=3.4.1 and >=2.7.7 + # change self.host to mean the proxy server host when tunneling is + # being used. Adapt, since we are interested in the destination + # host for the match_hostname() comparison. + actual_host = self._tunnel_host + else: + actual_host = self.host + + if hasattr(ssl, 'create_default_context'): + ctx = ssl.create_default_context(cafile=self.ca_bundle) + self.sock = ctx.wrap_socket(sock, server_hostname=actual_host) + else: + # This is for python < 2.7.9 and < 3.4? + self.sock = ssl.wrap_socket( + sock, cert_reqs=ssl.CERT_REQUIRED, ca_certs=self.ca_bundle + ) + try: + match_hostname(self.sock.getpeercert(), actual_host) + except CertificateError: + self.sock.shutdown(socket.SHUT_RDWR) + self.sock.close() + raise + + +def opener_for(ca_bundle=None): + """Get a urlopen() replacement that uses ca_bundle for verification""" + return urllib.request.build_opener( + VerifyingHTTPSHandler(ca_bundle or find_ca_bundle()) + ).open + + +# from jaraco.functools +def once(func): + @functools.wraps(func) + def wrapper(*args, **kwargs): + if not hasattr(func, 'always_returns'): + func.always_returns = func(*args, **kwargs) + return func.always_returns + return wrapper + + +@once +def get_win_certfile(): + try: + import wincertstore + except ImportError: + return None + + class CertFile(wincertstore.CertFile): + def __init__(self): + super(CertFile, self).__init__() + atexit.register(self.close) + + def close(self): + try: + super(CertFile, self).close() + except OSError: + pass + + _wincerts = CertFile() + _wincerts.addstore('CA') + _wincerts.addstore('ROOT') + return _wincerts.name + + +def find_ca_bundle(): + """Return an existing CA bundle path, or None""" + extant_cert_paths = filter(os.path.isfile, cert_paths) + return ( + get_win_certfile() + or next(extant_cert_paths, None) + or _certifi_where() + ) + + +def _certifi_where(): + try: + return __import__('certifi').where() + except (ImportError, ResolutionError, ExtractionError): + pass diff --git a/week-0/day-3/my_todo_app/venvironment/lib/python3.6/site-packages/setuptools/unicode_utils.py b/week-0/day-3/my_todo_app/venvironment/lib/python3.6/site-packages/setuptools/unicode_utils.py new file mode 100644 index 00000000..7c63efd2 --- /dev/null +++ b/week-0/day-3/my_todo_app/venvironment/lib/python3.6/site-packages/setuptools/unicode_utils.py @@ -0,0 +1,44 @@ +import unicodedata +import sys + +from setuptools.extern import six + + +# HFS Plus uses decomposed UTF-8 +def decompose(path): + if isinstance(path, six.text_type): + return unicodedata.normalize('NFD', path) + try: + path = path.decode('utf-8') + path = unicodedata.normalize('NFD', path) + path = path.encode('utf-8') + except UnicodeError: + pass # Not UTF-8 + return path + + +def filesys_decode(path): + """ + Ensure that the given path is decoded, + NONE when no expected encoding works + """ + + if isinstance(path, six.text_type): + return path + + fs_enc = sys.getfilesystemencoding() or 'utf-8' + candidates = fs_enc, 'utf-8' + + for enc in candidates: + try: + return path.decode(enc) + except UnicodeDecodeError: + continue + + +def try_encode(string, enc): + "turn unicode encoding into a functional routine" + try: + return string.encode(enc) + except UnicodeEncodeError: + return None diff --git a/week-0/day-3/my_todo_app/venvironment/lib/python3.6/site-packages/setuptools/version.py b/week-0/day-3/my_todo_app/venvironment/lib/python3.6/site-packages/setuptools/version.py new file mode 100644 index 00000000..95e18696 --- /dev/null +++ b/week-0/day-3/my_todo_app/venvironment/lib/python3.6/site-packages/setuptools/version.py @@ -0,0 +1,6 @@ +import pkg_resources + +try: + __version__ = pkg_resources.get_distribution('setuptools').version +except Exception: + __version__ = 'unknown' diff --git a/week-0/day-3/my_todo_app/venvironment/lib/python3.6/site-packages/setuptools/wheel.py b/week-0/day-3/my_todo_app/venvironment/lib/python3.6/site-packages/setuptools/wheel.py new file mode 100644 index 00000000..37dfa531 --- /dev/null +++ b/week-0/day-3/my_todo_app/venvironment/lib/python3.6/site-packages/setuptools/wheel.py @@ -0,0 +1,163 @@ +'''Wheels support.''' + +from distutils.util import get_platform +import email +import itertools +import os +import re +import zipfile + +from pkg_resources import Distribution, PathMetadata, parse_version +from setuptools.extern.six import PY3 +from setuptools import Distribution as SetuptoolsDistribution +from setuptools import pep425tags +from setuptools.command.egg_info import write_requirements + + +WHEEL_NAME = re.compile( + r"""^(?P.+?)-(?P\d.*?) + ((-(?P\d.*?))?-(?P.+?)-(?P.+?)-(?P.+?) + )\.whl$""", +re.VERBOSE).match + +NAMESPACE_PACKAGE_INIT = '''\ +try: + __import__('pkg_resources').declare_namespace(__name__) +except ImportError: + __path__ = __import__('pkgutil').extend_path(__path__, __name__) +''' + + +def unpack(src_dir, dst_dir): + '''Move everything under `src_dir` to `dst_dir`, and delete the former.''' + for dirpath, dirnames, filenames in os.walk(src_dir): + subdir = os.path.relpath(dirpath, src_dir) + for f in filenames: + src = os.path.join(dirpath, f) + dst = os.path.join(dst_dir, subdir, f) + os.renames(src, dst) + for n, d in reversed(list(enumerate(dirnames))): + src = os.path.join(dirpath, d) + dst = os.path.join(dst_dir, subdir, d) + if not os.path.exists(dst): + # Directory does not exist in destination, + # rename it and prune it from os.walk list. + os.renames(src, dst) + del dirnames[n] + # Cleanup. + for dirpath, dirnames, filenames in os.walk(src_dir, topdown=True): + assert not filenames + os.rmdir(dirpath) + + +class Wheel(object): + + def __init__(self, filename): + match = WHEEL_NAME(os.path.basename(filename)) + if match is None: + raise ValueError('invalid wheel name: %r' % filename) + self.filename = filename + for k, v in match.groupdict().items(): + setattr(self, k, v) + + def tags(self): + '''List tags (py_version, abi, platform) supported by this wheel.''' + return itertools.product(self.py_version.split('.'), + self.abi.split('.'), + self.platform.split('.')) + + def is_compatible(self): + '''Is the wheel is compatible with the current platform?''' + supported_tags = pep425tags.get_supported() + return next((True for t in self.tags() if t in supported_tags), False) + + def egg_name(self): + return Distribution( + project_name=self.project_name, version=self.version, + platform=(None if self.platform == 'any' else get_platform()), + ).egg_name() + '.egg' + + def install_as_egg(self, destination_eggdir): + '''Install wheel as an egg directory.''' + with zipfile.ZipFile(self.filename) as zf: + dist_basename = '%s-%s' % (self.project_name, self.version) + dist_info = '%s.dist-info' % dist_basename + dist_data = '%s.data' % dist_basename + def get_metadata(name): + with zf.open('%s/%s' % (dist_info, name)) as fp: + value = fp.read().decode('utf-8') if PY3 else fp.read() + return email.parser.Parser().parsestr(value) + wheel_metadata = get_metadata('WHEEL') + dist_metadata = get_metadata('METADATA') + # Check wheel format version is supported. + wheel_version = parse_version(wheel_metadata.get('Wheel-Version')) + if not parse_version('1.0') <= wheel_version < parse_version('2.0dev0'): + raise ValueError('unsupported wheel format version: %s' % wheel_version) + # Extract to target directory. + os.mkdir(destination_eggdir) + zf.extractall(destination_eggdir) + # Convert metadata. + dist_info = os.path.join(destination_eggdir, dist_info) + dist = Distribution.from_location( + destination_eggdir, dist_info, + metadata=PathMetadata(destination_eggdir, dist_info) + ) + # Note: we need to evaluate and strip markers now, + # as we can't easily convert back from the syntax: + # foobar; "linux" in sys_platform and extra == 'test' + def raw_req(req): + req.marker = None + return str(req) + install_requires = list(sorted(map(raw_req, dist.requires()))) + extras_require = { + extra: list(sorted( + req + for req in map(raw_req, dist.requires((extra,))) + if req not in install_requires + )) + for extra in dist.extras + } + egg_info = os.path.join(destination_eggdir, 'EGG-INFO') + os.rename(dist_info, egg_info) + os.rename(os.path.join(egg_info, 'METADATA'), + os.path.join(egg_info, 'PKG-INFO')) + setup_dist = SetuptoolsDistribution(attrs=dict( + install_requires=install_requires, + extras_require=extras_require, + )) + write_requirements(setup_dist.get_command_obj('egg_info'), + None, os.path.join(egg_info, 'requires.txt')) + # Move data entries to their correct location. + dist_data = os.path.join(destination_eggdir, dist_data) + dist_data_scripts = os.path.join(dist_data, 'scripts') + if os.path.exists(dist_data_scripts): + egg_info_scripts = os.path.join(destination_eggdir, + 'EGG-INFO', 'scripts') + os.mkdir(egg_info_scripts) + for entry in os.listdir(dist_data_scripts): + # Remove bytecode, as it's not properly handled + # during easy_install scripts install phase. + if entry.endswith('.pyc'): + os.unlink(os.path.join(dist_data_scripts, entry)) + else: + os.rename(os.path.join(dist_data_scripts, entry), + os.path.join(egg_info_scripts, entry)) + os.rmdir(dist_data_scripts) + for subdir in filter(os.path.exists, ( + os.path.join(dist_data, d) + for d in ('data', 'headers', 'purelib', 'platlib') + )): + unpack(subdir, destination_eggdir) + if os.path.exists(dist_data): + os.rmdir(dist_data) + # Fix namespace packages. + namespace_packages = os.path.join(egg_info, 'namespace_packages.txt') + if os.path.exists(namespace_packages): + with open(namespace_packages) as fp: + namespace_packages = fp.read().split() + for mod in namespace_packages: + mod_dir = os.path.join(destination_eggdir, *mod.split('.')) + mod_init = os.path.join(mod_dir, '__init__.py') + if os.path.exists(mod_dir) and not os.path.exists(mod_init): + with open(mod_init, 'w') as fp: + fp.write(NAMESPACE_PACKAGE_INIT) diff --git a/week-0/day-3/my_todo_app/venvironment/lib/python3.6/site-packages/setuptools/windows_support.py b/week-0/day-3/my_todo_app/venvironment/lib/python3.6/site-packages/setuptools/windows_support.py new file mode 100644 index 00000000..cb977cff --- /dev/null +++ b/week-0/day-3/my_todo_app/venvironment/lib/python3.6/site-packages/setuptools/windows_support.py @@ -0,0 +1,29 @@ +import platform +import ctypes + + +def windows_only(func): + if platform.system() != 'Windows': + return lambda *args, **kwargs: None + return func + + +@windows_only +def hide_file(path): + """ + Set the hidden attribute on a file or directory. + + From http://stackoverflow.com/questions/19622133/ + + `path` must be text. + """ + __import__('ctypes.wintypes') + SetFileAttributes = ctypes.windll.kernel32.SetFileAttributesW + SetFileAttributes.argtypes = ctypes.wintypes.LPWSTR, ctypes.wintypes.DWORD + SetFileAttributes.restype = ctypes.wintypes.BOOL + + FILE_ATTRIBUTE_HIDDEN = 0x02 + + ret = SetFileAttributes(path, FILE_ATTRIBUTE_HIDDEN) + if not ret: + raise ctypes.WinError() diff --git a/week-0/day-3/my_todo_app/venvironment/lib64 b/week-0/day-3/my_todo_app/venvironment/lib64 new file mode 120000 index 00000000..7951405f --- /dev/null +++ b/week-0/day-3/my_todo_app/venvironment/lib64 @@ -0,0 +1 @@ +lib \ No newline at end of file diff --git a/week-0/day-3/my_todo_app/venvironment/pyvenv.cfg b/week-0/day-3/my_todo_app/venvironment/pyvenv.cfg new file mode 100644 index 00000000..7f0d9af4 --- /dev/null +++ b/week-0/day-3/my_todo_app/venvironment/pyvenv.cfg @@ -0,0 +1,3 @@ +home = /usr/bin +include-system-site-packages = false +version = 3.6.8 diff --git a/week-0/day-3/my_todo_app/venvironment/share/python-wheels/CacheControl-0.11.7-py2.py3-none-any.whl b/week-0/day-3/my_todo_app/venvironment/share/python-wheels/CacheControl-0.11.7-py2.py3-none-any.whl new file mode 100644 index 0000000000000000000000000000000000000000..36659e5fb7b65436e89d778eda8f3909bed7d4b9 GIT binary patch literal 18720 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 Obo!mrh;t=jUHt)|Z35N+ literal 0 HcmV?d00001 diff --git a/week-0/day-3/my_todo_app/venvironment/share/python-wheels/appdirs-1.4.3-py2.py3-none-any.whl b/week-0/day-3/my_todo_app/venvironment/share/python-wheels/appdirs-1.4.3-py2.py3-none-any.whl new file mode 100644 index 0000000000000000000000000000000000000000..4c1abd7ef53f59c2f974ecf2d09b84e31b55f523 GIT binary patch literal 12139 zcma*N1B@r#+OOT7wr#ur-P5*h+qP}nc2C>3ZQGhQrj2QT^StMKv(KJn@0_YsO39U# ztd+`Dzx$S#0tG__0s?{r+LsKH{k~erzX=5dWQ7L=MDgdTfxW%4g`*SQcK|bh31DpD zF8I;;zT zmawT{L@lfzR*$mrAoGCey|m-glWG|~#uk@do`G4jbZPDA?J2_xCQ8D}i^#!CRo6<- znI8);TOw}CoGr!@WmNWL-H5Boj$)du#=I>EFJ?7Jm<0*ljXm-tuQ~yOh`WLX$%0fh zXOR&>zXbRR+=va(fyRVaEub+)P%oydR4l<}X;^@DDraI8;O`Et=#m zYNa&pdJM_Vtfc|}g0p1(v9k`9J>wS_d!+276Y~^BoPyMf+&ME*Aioj2^YiFiZbUaB zkQVJb(Y-nytX7a~`QAvw*I}b_X0Ym7+MvwU-1F@y-g7yHexjCKjcToEHruamUz0xdr+#~MN5K{04CJ1 zURqpk)Hdm=g?bgvUay{Zj{POYk6~$~s{M^SJSv!A6dYWs9v*O=0z|z}9BBy*#tZ_n z_zd_WlB1+k)X%PWM>nl~sKk~b*ij$aqvTynfBERf!$xZ5JIRxD6*p@6eVa&y}*50a96xrZ57!}uOuV`>^@VweP-x+`h`WLmqvk@p3xfdDc<)KIX zV2goGC05e(Epif1|C~1sg?W$NN%UJT+jgB@9yStEms+_d?$=h`e}&s ziyHkD);g`4uo4O`zSbF|9mZR8CyudR`#j&G`j}DuO5H8Fl4ODkq8$HZ7JsTZ=3!Y? z7=afd+#P$B*Du;a>Ya<)*5;|%P*Qjfo(+g?RKq_uS9YmI+$M6 z9b)(PH~uC!p+Vm{W5b(7+E1KApNGRZ@plLcz8Cp}dZ9k0k55<*u*hW-i}%qz{bWJ{ z7RW2KG0}}A&^BgIXN*ESIdIU_l=2ktRtXHDXU81}nrDf(W7K)3kjn+T-Hmx4rEwFV0 zcrq6}3w0PuyLw1?v%0k0m0$oBD}m3d%+^Dt!8a-q0HkaP{*1sG4nYcM^Yv3&r=CJ@ z)=hg^f1qvIj!jv4`TXPTHjDXW;7MxcLpdZnAn}17;O}op8@gyI?)PnJ`6!n2 zAZ1tK9=|1%!#H3j+#mjPFrUd>_^QS_l>U=m96R6^L2wbTDmSL=&7B8LB^SXrh6Wxv zcNT1IOLRHWoXH!@_S@hU0-JwrDZ#p&oo*i6bJ(vNmUxzv@@Onu&#pc+p?4LK-r-R=LzgX?8C}OC<-z?tD=x+^)oajv9 z&bgT47cD!5zRs69Y$?B1g|y2?ybhvO|{R!!L6n3*x2K zmu{%sv0fGdx^?P5=F?rGA=q~_Y4%=$f-kZ~8OmVg`{3Nic9-&TulzRLJ|gbjL@}43 zUos0&xS-vK;ZnvhnwRbA(-Z`+Mk~6KQ)!QaUS+!kv?S-%?g}ek^$%Re5157d;f$CHOIub%B?ca-IeHmuS zV)({jCH0W93O0J6JF#td$_?;VV`MG_v7b`l>_$dZ?`N~_TLhKv!o9oLhb`hy85VOW z2M^iDwpnj-(Q!p7+QNP>MS$;_eC+|8C&-?6c9iGR zAt2|wuzR|kg&PV6Cv!w0v%ba&G(nyjAHhnB`_CS{iL>3`7gUTYd z3(9Z}eLo)oIdO?wY&%T7#^!%{>4;OzOira5t=0%`L0Ir}&e^Uwh|!G7r^t}4$EvNozA!(Z z`B53X!9UKJ@DW9}L6E|@WP*f~Ry_c5dPDMrP>Q@{DMa+l=>rQKRA!otQ4!M_Wk1S3 zsrpE{DB<+XD=~caE#r2D9&(0umASGcyi!Ic=%JeJ(gzBzRoA))(!ua|Sq~}40A~&* zodY-9MQTkI7)sm$D+&NTD!$XsCA4R`edlB%VNMNyjRv4F+jgsvJ3+-M*B0)ULYR^M!o*l3vu}?%{ky(jngaqx=tAShnl$U|W6y5cw znmLKeika7b<6d-W!K{1ksA86WdlL?R@LRt~LWy>o534@;k;Fh~aZY)3F*N|W-!|E_ zzD}@|F=;)y%{;|wyjtI5fNo{6W?Y2S&Ui?iKP5|+_4yBf>W*1J^BAocec`6srQoFd2+Lca&4?Y$ z>1Sj&3LD#HP+*s(lv)Pj1#Yj-?$RQ921iwN(MWrauPLa0)%42*DGi!x!qp4Y`f z82!r5t>ZM_+n>t|&3b|w`UCx6c(bcJ^)+^K3*1OxQV4dfthBuu;|Y4!x9!Rtj9}>W zOEEh3beg3Fa^|__HN^~YSJyh|i~@*%yq@X^K93u=Aq+_&U&NdxPiis7xa{E}pBwpj zomv0)Bi*W!LE72Lc#eR+L!UzhIRk@x<12W7Et4(IS>Kd$!cdiRNJ+4OME{X&kjmW_ zBgW^LtZh1gF->M%5Pu%{y;{gCC=#yh?W6DPU2XQQ_!17=C$6dk@jrd|vDOA8d7uZ+h7RonB(D#>7=)1+3K_JMs0e7T4 zl6bnx)vw>J2YH~>zEb%khJ0e{kakUo^$e}5NANl*wqR{-n(LmY1&)wLgBda?W$OW+ zm1|*89_?oGx57+o{qEWV&fGQ4^8>;m<^@e3FoBa;(!D9h`*1DsWbXBZdF)Qu+?986 zChi>8bacjvU`z>z!RqMK$sj8pE7ov7{L-2y_%^ZQ&W2gK+eV^p-8)MnlwC8QWX z0Xa0Sbc~*j1&qi#5=z9~Z6x#aO=O%E-^dgb>?Q`CWRMW$-3^l)QwYIV*ewfOa}>~G zE0k03Ptji{`=X=AX(c1o<2UFTPEvbmP;7MPeLvS+Ln8A)eg&44Svrz4XJI^kZFKgP$0$Uof=FLlV_+wj3LTAmfSkpZB zNDIhmhqT;s(|96?21a7qSGstCZFKfiVS<{UaLNE0q+aw5Y)|1lNzY4kFns02SeBGd zIDPzce-ag7Un z($XQ*IN6%X!17GAU#sFLJq=S896`74UoZ`tx%UU3>HJE4Y%qOcAP{>>7a}ktwqANe z^KM(~0x8?t@g2N%_g1_#+9zSzAkwmL1S$zCb~|*CxJ@*9HU z^x|>mXdY(8Y~QSZflKf(d}hr(09DqCE*W*Lh@_kZ>ET5dV$GI-SYH)diX48c-#-2$ z>APVBYi{&<+RM*jA2;BCBt7CEN#`E@Bk3A#NCvcyTi>YT$K(d|zqDS)flKPQ-7#9o zu6bx*-hyaY#gUu+<+m)8f&t(#P`YiRI0jK$)G6s?9H?XwBOMN6w8$C6b-^Q3Nnsul ztK3!qz%ga>uqN#A7NdBo{M#X*4rWvaecrOO0Gg0rjMjW2R9^bSsc<$d#$#Y`cPR6 za)d|8C}?RclQd5PMV9bFrJ0+8nksWCSTD>+%;N>+8LL^kuBQtzpbQ&C^oA&}RQ7bz zzn=Fo~WXDxw*+O|x%zN{@TSG5XACZ z@YLc7;J#Fjb5Z1)*aL*+vv2p(3%`T5emv0Ck57JV)|KyH1!1e6bUaz8h!3_j>~A;L zt9{+xS!(1{c?f_0ubF344j$DVUjMI|b3bS7!)La(?Ef+I8aC~Eqkqg?%Wb+*2b<}VB_noI2SY6L`0B~B^qQ1{aEA2sJIW~QP;uK8#+gxvaFiGke!?Qqs! zjpN4fvp`kGLi4tpNzL_V3uQBBSB-pOLs5}_+pXDA{5nsw8dhb(JyA%yLrYS*b*Ywx zfbSgv-Z|Fo{P6hg+2h&E{N95n1Fm8VM4sqJr9^7fCgo$}o!Aq-vt7s^F^Bpi=5GI& zm~%Av^NsVLlhLjd!emf2hDU?bAQotBnqxK?8baq-CG)Q4%^UnEZx`&-U3UISt+q($b4})@#y{9?);TMv9*wDzMk=OWj8aTC z<PFl>nA_*^|R*UGv2w#AA3Isxi841SKq_L)rK7&wDs@S|;!jOGVg z?;hYjm_#0|Ht(Ges>vv^OoIL>yzFY*Oc2`of2mtudEPQ$s)t5b9^m$8uJt&F81%uL-t$*R03j4NOlvn1P2(<4F-@i+_(FH`m zDKHQa69^Cx{(q5jMG+x6MPZ-$$;1K%ppbnZwZ|+lh(!Ih2M{vJLuBx!6*zDZl0bj3 zo4beZbVt{x&!uO2*{v3fd8l?DAcx3&))&Vp>#aEhVHIbM#=eEXc4ApmESc^k6Q1Xg z`g6e{K?EkC?+Qz^alZ+O%NbJ>ve66DB023o)0xv>tkD>+#&b^fzy*&pX0Y4>8?oHW zmDo2v9Gq+bSTK89YkVr4O#}gn z>7BR;i&mU;Q6;`-N-5}4vDxNtt%5l2?I)@)=`_EbTGiu% z<|;p`>s!L&9{}=5!PhT67KPL}jgnW_UteXvUd12Rk3D~UIyT^~aD5Y#;8^OPc(}`4 z3$qFwl-*RqIL#yYYlfb-7kc#m%#7`y<4>~wA7gbjaS;(|m|1a|>3KLQI_jCJ*+xZ% zC8j+`xoIgnN!oGx21RknaauqG{kL+3IfgkV);XrRL+FWF`uRuN6*x*d$?0+F21QCL zYMCQw3F%fv$};AK>B(8CWtpkU;0R0-;kLhi=;+c}1BCvp8)|SMAhQ25G8+?T17ibc z1AwKIoo$Y?Lfi%e>?e(C9_tyPu5**TALi0_fwP~#Z_`$gh=ojSL0AG>DEy1J^N19` zl82?aclHx^lf!Ic4D(UdD105r*Nons|DbD_x}R}eSqu|)59(?khdg6jAXN>j5(EZw zHDpAR2(*SdRxmz7RegBmyVfzo6K@;n_fx;j+P!nr!)Qvzvx?v&D)J^ea7W2K4yhDO z7K9qu1%dt#ixX;I9_Qc)dYu5hPGADA0b#L_xB{o4(we?mod7&~iq;)M zIY^h9<|(=R#V^M^Es9088LQ!z;?0smSjg4`@u!F#Ff8VgtRG5hOAtm+VIX^YnbYC{ z9_h0gc8CQ(#+OT2sKm-uEJHuC^U1#9HKI}m;ibIOCpQXFx@;_GDZq9hrZlk!w=yhH zMINeCXQj6p5=%F4AQ(uj<-pd(mnXh$OfUrJwQUa!EdOfzW`>dX$hg{aiK9#fg%%2~LOGR9^^RTQS~hlBMfgoYN>; zVu>^@ro66g7QNOwfR>D5nccZP6A5q$m{nkR#)N&n2zaPHPf_jHxcC*I<8L;`z|aR{ zSEcPoa5VCUP^u4)2>$&G*4p}y&m2l?mtZ>!MR&R);j#MQ(a;Oy=!MN26@PD_0Z z^4F3My*F4=Kn4Qx(FX$h2m1flumJWRzqBu0H`xWZ1p&K zbJljo&Whxc3*}Kszn6&931})_XL!W<6#7(EQv;C-C}42ey1A`d>3t?S;me-7>&Z<5*icMYS8u!a%&yM!ae9?cufgp~jjeuwjl=9j~lkJv}W} zZ~w}%aXlT`fwLQyozkGW97Un{c}Z*kEAcy**JaUaR=pIy*v{9d9Ht6&s!4Yg&u$bC zK%FmIJ#Lg6+XI-PFZ*`wS)1Z%Kwm1l{o;`)?XgRIEk!cQ>B$gt^x(tPX>WM2$f|R{ zEW@Z2YOwxZN@n%eyFdHKDDpmRTZ|KE(&&3=PS|&hw>HnG5*P280e_iLTy*3x=^-L* zAi5PN!>~slJy#RyX+YvFd$gg~VY>n)KiH6X+;h%QoQ+s?=@(+nDp%XpXU;dRh~IBJ zGf!9d6gUK$wY9pxesTLXGcg7NTs34eqnkNmg&JBmM+6>j9S`QR*_=r)$cCZBUVwqqC4tyd@WDtQTa};jU}mAZbYHUNGW|@9QuU;P zCF^$FRY(B}I|*qD{3y|wTlJ^IH3|da=#z_D(7TtsFgp?h=%#+^>oBjjX3XU()9-#G zdySeQ3Ux z*eGXK^{CPB9ah{AV4l%O2WvV}{j-G88LJ1eyZYN;&gj3HO41-zzfB!M8l2i|H))+7 z!MA%&dl_e+Hr>WILefTu_;lchbPt_G%k}>@Oek!~P`e)ap5G(abMa zi*Dg2tLukmX8}XNcVR$v?t8G>i=cc9x@Xvfi$<0O31C+2O;M=OQ#j?<$HC3!WJqeL zfef6}!lzK^dyTkmtVcmm2yGM0rown;cuk@}Jfr9ulbbu@16 zYUD{k^pX~lZ}DqXPe9s|+FVJZciL-)j| zhN=RyDaR4arPQJ7%#7K`mL4KJ8uo0k7aRvII9P)+WoCmFWc0x#Q(twcRTz?#Wqo6j zUK{&99)m}ONd?^rVkL`FH5TPmsWw5z!37L6I+lB2RV=0Am}lg!dhgJ5U@r^1rc^Jm z?)Y;I32G)bIw)!ON6J+kVWm6b=Ogz3A)4ZB_#K-3X`m3%fjt%(@F1AKG?3Wml<08b z2sU$sfGILLZ(RjhjB^zR$%zzZcaxq!(%@IBg)l~$-vUZH5a}%cB*rik#ApbI(|}SB zQ0O9@P#%{+P}v91|l47CJ}+f+?qfXTz&Mt9^rl5nPiM`QzVz5`s}k84g~A7L8O zLpG0Yu61pgTf`2JB<3;sQ=tx29cQ z)j4rP-jpKYH*f$x+`S1`Z=g}UC{8?Nr)S7U!)kN6&Z@mr(1fY$bBw^8cjW#E*?|m zHR!V&+{YN{a3IBf`0c7Ju+1Bk2hIBVE7%=cN$u9`8QBw`Fh^-5g&mTN$Ri4N;N~G1 z_np9+P$K>dbVPKLCC`xN1i-)8z|58O(ouHTBJ`DE!)c@?Iy{lG;>l!0!*aQXT=G5a zL)7P?^*QTwkG&jWs=CD(z85v4{V=oKz8q!tV-1%lfC#Y3=X)r$A6h7L^?qs@hIU*u z#x|c*p~gxj-?J=CkBc;>q5#fiO`wFx(;}R&1$13!WlWeQGW2^2l`OA+Y>zitPYPH&pI5ci$I$Ljr*f}TAMv6B0N%uE#0@IEOTjM z-5|VEZyvTml_`Rs&A5~isKLw?XjpPnsM&}}7DMo8?K#YDc6P>Z!)%lY zOBfrefl#WGlvq@1Loh;L@8SI>R0%N$)(j!+_X@Zb^c|i~mxq%>u3^vD^Qle7?5FOU zO;8KA=cYfp5w>X!3AjmQL{q=?0XubIaveOOaApXi`8(AWIKd>icQ#Bh5Jja1VukNS z23%}WonIesDx|xmSUA%Ni+K>#xr^pCD%;$WivQAq=7_+@A}0h#82w}3Odxnl*(P{X zyFOF~Zb>;dAKLGct2}BCRi$NGrugKhl7#P!*T9x#R~3^_zs>fHl~kXjd&_^o;&k`0 zx$h-5WIrGU@fqIOfd=uRr<`5K(Ndcc9l4sA2so&ums(w*CL9Hueyq_F66j>-<$g4E z1$Su(c4rrJt*|*sS5?`gr#02JK}Gv1tGD*kMvPa5A3@rdfi!y5TqNi#t{j^Ni zp4KZtbR89bSBLhJ9*nb4hrZ62GSHZ5&ofMiwz5hdbiZUR?H1^PEs@eAPaqqv-87cY zNsLbP@o2V+Whr6n=a}L3%yYz>BWnjG?sf3)6V;XP$fH}JoGzTi>fQ}p^<*i3uV}1D zZa+$^f6Iqfu`<10ILOfEq@Juiiuf+(tm3F$nW<H}Xs5&t(KDZ>hzaz(I0ytRz6q5T zl7(~dDo+ZZ<<)wnf|T@b?ogt1LOzgTO|jFrz;sO-&g-qCf*NuEUGruqntVh7B?X=rsf`c=*^Z*yMbNq zUAK+Wx;9^SkumX*#wQpTl@cLb_tRMS&Xi~mFztz_r`T?~6h{wNUss2o+5scvwj$Uw zn}SpAqXqJ@DjF_+k@osK-EeUH5@y_*djgN&W@rpwO<@_w_g1?@8m6&I#ZjB_iYxYc z2+iXRFLiPCczF2ToEnPlmFIQZA26s_l=x8ICl>(-bLKN*?5~hwy>RTW?!Kaaeupm_ z*b1sYFPr728YmLas@3lUYPUEvF3xYxjjN3swDO_@WMe&6K@WgsVuXMz$%tU$?}j>` zF7cZea7y|n;_Cc3R!SBW`%^)tA*uzSF|Fg|jB0e@w7nlvtEFJPk0!xOetb5a*sV{f z@3_o3K+>O)|x`P zdpFKGPr94kT*{4q(NfFJWKWoiRL+w>!9CNpxWx(Y_0oV|b*fdNB6g1xp&}LuDSwPq zWO+Xw;pM6{#E;?V*+4k1p3v-g4U%Q+Z?AI%GnaKd)6a+EQ8%QK&*YzYrL|Y#8Lhie zeU}n16EygdhAGtHO60Ipd`i3gjyhCXk7lPn7i&nG}%Hbqt zz?n;cDhq*;Vw#$4B3>@_L+K@AIjBBt<&H~`Vs*4A()L=U0Nu6MKaC0%Ow<__f{pve zeJ>C}#Jqn&^xOF$9tSKTUu_{A0+L24C`}AkPUfC3Ur4}(enUg`59WK3S*d*jStGNs zis9E{+Zhb@qvmz8#hebttjC$}K5?toGqTkPjH)KiFBG;0?x?ehP#K|d2Tqd;o|)H1 zrR3%Si*YS5jx6pmdPW+fqg7SCq1qQ=0gm2#pR1Hz>5q~&j5}>_ao>n!nC`2w=MM=_ zvQ?ArPuK<7pd&^DoSZA_3&xf-rZg3=GzK$QPxj-7PZubw7l50QHLzAn4BhXfc<5H? z4picwMZ0NUmjeoN-w3=fguVTAU=mSwA3R)%MB9bgH}c_2EKA}zv~MbsLNZKjm@`lQ zjMXl|Rt?g7tSV~mj~$d?2+z)aU)zuGaS5v$2NBAH%fXom-O*orG(3jSDZ2q17uBS{ zCI>a(dH@!U>{14Ni%f!VTD$6d3tQ#-y?^#}e?s5rI6Q}hSF|Ir;3SSi;vW?SR&z3w zF<2J1o8mq0n#Y^NH$aCxGO(vzYCDv3!Ck{9njs9AQ6jWp-q?B(-QDg=<+W`c^rS^; zsLX3SSj>6{`WuyRdu%5BN&+=x{=GrZ|LDsAKL>cf}mHtfCEVxb!C-yW? zFra}<;MS{$hxwda0~^xGM;qm*ah|ox96(n04KDrY-{bjSXI+ zUDc&B#@U-Eh=!^>mGQLker0+8WnN;%1kfqrwE`uJ@J!#K2Q4A%I_1W%S(=tpsYfrz zoGWh|usH4>CdlqKSM-bBS^=GeWh7tPqS;f2ugIpkwYt||4D01YfZMY9=~nJl#u9|j zijC2lf12zq^_Y-2r_c^?W|f>N#~U>nE^0gNB@=nT$Zy5@yxN{b)a3o4kfnoMy^ann1L+f5t@vIoojlg?`L(QOqx+4&Y%MszG|egViC9vmPM< zaK2aAjcaF7__ihl=5|1l$iOGTP);YiUJ7##9RLf`oA4Gf7AXh7W|9WjP{>t|EF~DH|y_M z`(G?IjQ`B~pOE`+)ZaPuzfiaT1@&*K^xw$8L&bj~-LU`j=>9EY{2TdqwD>RN(7%v> Zf<}2MaEO22efzUx{z=z)=>EC;{{Xs7sp9|u literal 0 HcmV?d00001 diff --git a/week-0/day-3/my_todo_app/venvironment/share/python-wheels/certifi-2018.1.18-py2.py3-none-any.whl b/week-0/day-3/my_todo_app/venvironment/share/python-wheels/certifi-2018.1.18-py2.py3-none-any.whl new file mode 100644 index 0000000000000000000000000000000000000000..144996e06cc8ba53f4bdea554705883e120be146 GIT binary patch literal 150807 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

    ;>YUS{A#%)2 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

    lOB^utP3PxpPV>|tv2!@#E881e`TlFli&8;1g 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�+DqSWGMREKi0 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�)j`)>% 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 V2Wep1Kj0q+(0{<={^#@6{{!4Pbz=Yk literal 0 HcmV?d00001 diff --git a/week-0/day-3/my_todo_app/venvironment/share/python-wheels/colorama-0.3.7-py2.py3-none-any.whl b/week-0/day-3/my_todo_app/venvironment/share/python-wheels/colorama-0.3.7-py2.py3-none-any.whl new file mode 100644 index 0000000000000000000000000000000000000000..75345fcb6c5bc0991ede4e3455948968fe022294 GIT binary patch literal 19915 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 literal 0 HcmV?d00001 diff --git a/week-0/day-3/my_todo_app/venvironment/share/python-wheels/distlib-0.2.6-py2.py3-none-any.whl b/week-0/day-3/my_todo_app/venvironment/share/python-wheels/distlib-0.2.6-py2.py3-none-any.whl new file mode 100644 index 0000000000000000000000000000000000000000..161b4c21bb114ba04a707b1da0b0d9d69aba56c8 GIT binary patch literal 141707 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 GjQ$U&0@_vp literal 0 HcmV?d00001 diff --git a/week-0/day-3/my_todo_app/venvironment/share/python-wheels/html5lib-0.999999999-py2.py3-none-any.whl b/week-0/day-3/my_todo_app/venvironment/share/python-wheels/html5lib-0.999999999-py2.py3-none-any.whl new file mode 100644 index 0000000000000000000000000000000000000000..d9fda41f3a6a2142d85b014814c1b67937204256 GIT binary patch literal 112620 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 E4>c1E*#H0l literal 0 HcmV?d00001 diff --git a/week-0/day-3/my_todo_app/venvironment/share/python-wheels/idna-2.6-py2.py3-none-any.whl b/week-0/day-3/my_todo_app/venvironment/share/python-wheels/idna-2.6-py2.py3-none-any.whl new file mode 100644 index 0000000000000000000000000000000000000000..ab09a80bbe43144c1ef9137bfcba5bfe33f9cf77 GIT binary patch literal 56485 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 Icat|sf;SJ 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 literal 0 HcmV?d00001 diff --git a/week-0/day-3/my_todo_app/venvironment/share/python-wheels/ipaddress-0.0.0-py2.py3-none-any.whl b/week-0/day-3/my_todo_app/venvironment/share/python-wheels/ipaddress-0.0.0-py2.py3-none-any.whl new file mode 100644 index 0000000000000000000000000000000000000000..aa2a948b7174e381ffdb27805917503a08356df4 GIT binary patch literal 17503 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 Spa=s4I}oY?16bJ!!~+1B^%lzj literal 0 HcmV?d00001 diff --git a/week-0/day-3/my_todo_app/venvironment/share/python-wheels/lockfile-0.12.2-py2.py3-none-any.whl b/week-0/day-3/my_todo_app/venvironment/share/python-wheels/lockfile-0.12.2-py2.py3-none-any.whl new file mode 100644 index 0000000000000000000000000000000000000000..c91f5425d5af3f889f74599ab46418b6554dade9 GIT binary patch literal 13506 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�y_7OKmjU)V&Z4k|4`-=aTgNCF#&7N`iKf2U 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 N-uZiS4E}TX{{SU*_^1E? literal 0 HcmV?d00001 diff --git a/week-0/day-3/my_todo_app/venvironment/share/python-wheels/pip-9.0.1-py2.py3-none-any.whl b/week-0/day-3/my_todo_app/venvironment/share/python-wheels/pip-9.0.1-py2.py3-none-any.whl new file mode 100644 index 0000000000000000000000000000000000000000..0e229b5d71d7597bb2b9500800069958de10499c GIT binary patch literal 159152 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

    &L9{^2IpaR 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

  • *Ure!7cwK@-=01WnqpzeIY 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�IjIR;4`a+OD`XE=BC_$vI~ zr>R^+dN7H`dXvKUHj%cJDcWuFAX8AzhyGR}lBh zds!WfwN!F3erLfR<&31pbN%v-8f_(WB7J7-^>j!}aofv=;B%Gt?rODJ^Q;Iq(EF+Z z;f?d#Y+dLb07vqQlgzcEoI|OQTC ze@h<*HJtkb3W8^jjW_RI3b{r)Hu6=s!4C(P^hF6)RVM(4Mm`Zyzm`aAn!*}T7%>z} z$~ow<;5tIIzTmB_e&}jo1{Y0E1nNlTGa{sDH?%86xcw7LsZSF`24p~-KE+G;v@Y!d zqw_G&kg8e$#CgiTT_R~J#QcuiMT04C@*3+=ZWAQj?JB|tc3!t% zTXM|~zR-#0x7E_JrBOB=e@;V(ZfS(H?D|&k#O*}8=Hat^Kq*3iV#_}g!=azorv6Od z|KVL-0Kio8BX20<9;usu_;6O5)*@kz+obQiWW!d~UF^=K7Rl7VbEan<9a`s0HQKd? zb$Y#Rf>K^GXtYzkXs00k&rKWQ z1~Mcunu2{WO7E9Z=*iQw*zdKv`SVfO{r<0cZG2;?8$W8G+6-sLQG8fxu&Rd zF063aXb=}Mx5{sVA=APr=~+xtnDbHO@F3!cu79-`&MBJgQ#_Rgw7$t8(ic18jXDXk ze&#u}Njcw_IB;@jlfX?)7U&)|9f6EpS}96%D$)`NEbyB<@j!wB8iY*;N!+|D56km) zLn(L<5$9+hrq=$$??4n|n#7t7~p! z?xd^xISbpM0*uY%K<;>`rgBE)pCK+Eqnj3P3&q>7#j#dt5k|S@pSJE_>SIe2D1W;s ztp(1qkhT3FYA}-&p% z=sA)jKX4%(v4ZLMOn&e6sp#XZ9-K0H!>w{Mx6+wD25*-U6Hn`EdumMC`{>oZY(Y(! z{#F0Vo;tRTX>QRFYSJ#=vzNP?mH97V!f!Vs#QkR4d&#*}(??;v<5Pe-x^W%Jz_X_< zFm@sKU*yQI=MbuDIG z@^Z3t%DDP=Knd3@Jgj2=ia=>9CE^wr{tt`~K?f-p;b3u5qm| zwFvx<6(C%FZeI(ce~J&Zqj?iVCo^fq-2YOJ61h^8=APv^5W&6*Y=0%fcI}I~gx<$( z;8Inr=-~isC+DJw<_na@9IJ!OBT;aw#*1=&o4-B_Rkz`*&n=}#E(`aFpJAp3d`zAMe?pdc@G2mW z)(QbfsCA-bH-AUE_>rB_j3ge+=)%k`@l`BC29p(WHod)gehSA8>S-LrCW6)2i?!rk zwNc?kixMiw;*__K_i01JaM8qL<>!Hr5@PkU(j`Va|Bx#5OK146(;T(r4--?#aJWca zD2Z=dbf=3JD@!r#mign|y}7s>)%r#uy)Yx#6t*m2c9=GL5JzJAtVKHj*7?5NZ9xg- z`dKi)^%sp-FddR4Xh^(B2LEu1j`@)YBL@EoPx#%NA^Z_% zB{8(_qQi5N@1)h9&yO^35Wb`7yfrT-2pJYhZs9se(v!N*X=O-m9Ket+cqG#w$`Uj! z2@tznPrdy^^?L?VhDGVJc95cL(PgLOhN$#=OX4j^1zgj47jo5LAcNai(ZDN{o12!m z-*wNI3TU;PFm5dP9B`hhbyXYY1wv5V6}#$=oePlGxh}BS`Vus^QQJ|aM3p%GrK-MF zfw#~R%2uE2w&eQ9mPiEA1%=AVIFIET+ESepi!F@=u~sNJOsUK@3=?jx(||1Uk?^H0 zY-fiz^A?wMe1q42Ja_- z&pY_YJNPC}iV_aR5PL%?dTWL81jQ4h`3fp01p@j7>>tT2I&{7>@Sjx=`&sBd%YR&j z{{Qy$m(&(IM*4rdjm#aL=*(?QY#D?_6onKdQP`B~_X^l3-`f2M+nkgS66 z---9@Grx5|2{xaF^e;pOh<`;?6&Dea{yUJhr+KdE6SV$WX#N7c{+B>&V<&wheJ6c- z3rAaJ(Ycnk7xlK$7u?;jYz|4m=|FK+^f|I3#`|HRLProU9- zeQ(Eo+I8}+~7IyyNx8#+0E zCZ_$9YG!;yTZ8&+@*G5em$@M3U$d?C9W0IisrrgS@K?P)jS=kAAQ=84^L6UK<~kVL zJDWQgTN~Rr{WGDxL;|B?u>b&f>%Y6Iww!+rceFD$G&eE-=W_QSQzD^!)^*Wmq56y5 z$<6;7?d)W3_0I%Gyco#SNBDG9pN{pfmT}thuc3{NUO#cb*?+K0nfh_cgNeB5KJi@=HH~!sb{~nnCgB02HchY|k)BjHU jdwB2^$PeuSl}rR literal 0 HcmV?d00001 diff --git a/week-0/day-3/my_todo_app/venvironment/share/python-wheels/progress-1.2-py2.py3-none-any.whl b/week-0/day-3/my_todo_app/venvironment/share/python-wheels/progress-1.2-py2.py3-none-any.whl new file mode 100644 index 0000000000000000000000000000000000000000..df711803849fccd7438961472d741fadc954bd8e GIT binary patch literal 9606 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 lm#Y64K=AoU!~aeHuNh^})v4-E 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

    *T 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%0ACv3zp0Ry$ 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 p=U&hb}yZ--KX*!QnQ;zgLh`9G~)k{twov%YFa= literal 0 HcmV?d00001 diff --git a/week-0/day-3/my_todo_app/venvironment/share/python-wheels/six-1.11.0-py2.py3-none-any.whl b/week-0/day-3/my_todo_app/venvironment/share/python-wheels/six-1.11.0-py2.py3-none-any.whl new file mode 100644 index 0000000000000000000000000000000000000000..40c26d83dbc95c3fe3738298a2b67eb07343ac02 GIT binary patch literal 10720 zcma)?Wo#YWwxze3nVDl|#~9n&%(TtS%*@Q}#LUdh?3kHjW~P{#;&kqNYF(YEkJMEv zm8yPxTGAY|<|>V$C<6hB2><|K0lU({@`5(48wB70fHWikK>6pbv!w?kD-$a#6AP1x zrLzm8rJb2Qv#6M|2uMm%MM^=Q$;sIzRCzsWodwl*S$)zNfdH>%HXKOXWJ5MfVB!yK z8M$R>7)~CRdVeBXWwmj$#F4FvInp^YvJQkkcKjZ$XR@J=g|u~)!_u^huD<^TMl#zW3dxw zA>y>+(vv`iG@w^VN(VB=u(;6Yam@?no63@sL-6oMEq$ghoq&yWXL4HE<-suR1#jx1 z+angz6V>Vr=9h&_Gz5U$#1w}Crn--CJ&%KMUfGBt(wTD)NT1&3VlDSeECuyg!1$N% zih;6PI2-Hn*6!HmbfRe5hw5uAKWEgcPHA?COrX&%vhXEhoH=!9 z2v@|-)L#75x7`dF9hbq83|>Kom?@?j-xoGhRQ6su18*CvndgqTU0wv+G?J^>4$o4CaPM#w{~<22oI1G2 zKjN~41^|fuOvlhYsJ`2^X%Y!_a?yjqRFK615j2*?m>zoT#^$qn zlb5`G{xdPmp$@d9Vv+32?9S8A{GT>YiW=i_$vxHkJwG&Tn}^WJeO29$8sE=j_&fWw zh=$SahMS&{r-eG9bAT7NwHT@}C(xoTO?Z8;l0S$H-0uFVu1_f<<6+5y7{r|A%zNXK#+DTZXcGyUcCU2s1) zYtSAN6pW;Uh?HMhx})v^-1jDargX!TC9iQOXghh^LCMmRFRZytOw!&~W(4EgE-6HA zTWaZot=Ct=azXX-%Y598<4-;Ys;zVu#@nQh@aJ0^$@`gIk-i_^%+dmA5|N2Yc*wRy zo|zY^xS@RW(iS;FYh<6SgO3q67T?U(BvQhf-kP`hsXh$zq`8Q&&Gf8?>8CpaPCmGG zB`gJ1cz*tFQdPp!$6}w}vvPj%>h!K&i0c6tn|;cSPk+X94v+)i&BTwHP>P*JuEDmH z7=jP8=vMGnBAy@zu2FC-wBU-Wf3>F~!uv4M_aZ(@jB_wKNi4iu3$R~gWx3F?gsbum zK3|q1t%XGb@1(nYapn)}6p;chK6|0oTlT?$|L{s7<7sbS9nIYbd8OBl9se54zw(tt z(`Yh$FGu*Ebf7nVS9<66$z&sfa2rxell^v?x5{d4ha!TQMyMK(8~jX?P^EFBH0!|d zUIZ04w_cv-OWR>~oj2mb#gD<+0+>UeJ?c6USrFaM29JN)LNoh2Y-u6FvZZQ<1$R*k zn(l2Cb2w8?8u<7qVtC)XoaUEj#DvwaF17{gI)x7q6o(Hm2WR#kr~1$_i6Ef5pX9AD z45tize){ra{y^RoMVel9BJPpQ)Dmg^T`e1?zhbwBf0yNpeKS3!v<8!WB~5V;*gqRa zP=|cL2n+xq{L?f9|JE=dF%bojsOxNJTp;dS2Aofbm5b`;5nE8@{j^b>?B9vo7FShm>b&K$MhrTUg!;%|6}YfOxQ98;^fI` zQvLS)d^)3$k53;*6jEM}f{#)*7a4o zg$GV99C(;QT#!K}Gt?FWF_zj}<7x--zkiqB8x(VpWes*mzM5cB8aHfgXZRMe@AavE z<2v+;W*>($h+yr&i0<(FsNU6-aphk!n8#Y;^h=JQrjCj?hyMo14tQZQ^6- zrX&V&n)wPQXPYo*9wZ~ln-MVFDeN5=4%Gr?;qg+}rCmdudLHI(gdXWZFM;=3-+-=| z{t8*IX?fo2mShmQgU{zs8@1%bqv2E4mZRKae`B6Egr9)DLzFnT%wLY*AiDa%({1Nb z6O>&VXFjLt>)ZI^om<=bVwFA=(m;W8af!u&Ek_92dR5-$H%f~a&qw<7mRsc?|IL$R ztj5?M3b{ZSzOOLpli^JZOxaMaBPW6RK0=%}3N;y=ZUmZ)H!W7h9*`aBreyWm$HA(9 zWy&r98Ki5o7m@cQsMUZfU4Ma@0unDk8{HXZ)I)~NDf*v zOLeiJ>XEClr9{WJMPHC6UrI6<(~7lWPLIc39Y_}C*9FH$!0LxYFFb-Xw_&t6^Lv8Lp`mJDnt?Tdy)Z!sMF{cFiw2vKW86Op6SaS zm0GU5O+KU7gb(6q!l%QT@v;FKEGGQJ>LrWftH6*@+Dfr;2+=W@F!BwQsVX3yiPd*I zHt;lfGs8q`%rb?D2FMW6gUm(ZE z!dF+%kDkyHUb#ElfgL2w$42BepYAeO$BrAvbaZ@k^mX+V0z;KaeONo6xx>9mj(URcFMP_)M{+&@W$Ebs63G2^dn)eJ@r5s2_$Zv#f$PPA^Kd-R zlG;3R^+hsEewzBbEZk4@69WXa1W!zT0XbHTpIN=%6Ejy2p*W8YZuiWP$IzNw{Sqns z({&XjjM#E@3pE6$nP=+LX*7D4h+Ca3k?5pfr+^5W9hd-?oUrjA~nBgmxLN(~C73 z7-c-H7bs?zDeny(G_x)rR6f`cvN#ZbiJE&DluF}~l{I9C)yq?7cF}B#vYkFKOiTyF z<67}y|H>G{5M)wWnnAnaL*DPqeGPa79OmuDJlVZpZay(0K2ue-9tfzWGs) zOBg%&Miya13%C!@2@vE^>&q5H2X1f>EA_x|zRM4Lf)%y*-t>_luRc$_l>122W|k{% z^&^~n6guN%Viw0h9Vc$rnE&QdovgVi9ek5{EXo}fufcXB=c!C@2Xmr+XK5qgyyhnT z)Sfs(t>FR@KY+iixsz|k=@56Z8oelk`yH~J54ny^@AIEpKY8VVYZbtA9SRKw|F?% z)Z_mhqxveIu1V)KdfNby$Y8VF+tfuA%uL?!d@`9$!fDHDvEo=pjMj3dPKLuFa?&D0C}e9n>ie#Pak7y z3Y8=o%CD8 zAj&$7vI!0ahEXy|hJ6GRA|lO`ZYOErV?D%R?j;P1U88Odz&2Jv{={#sq~aCWS?v`h zfGHfk^ts;eH4f$xSwYD^{>05nt3#XO6MjESHt$q zk!&btU;pG}XxN`u!8{_g+WMd5w`Ao z0HP*nYH?xX;%qgiD|gYxNlWh3)5(>uOXe2zzo19Fe%M8;3_4zi-`EC2&0XowlL)2N z@pgEyR#BQ*3Z`zahL0O%QQj#rLomWY6bFwM*v1MV9wFu_A&#%dmpXW8`7(Rk_c~c0 zW(C}jC1HX2nLju3;@RNIa)fooPh5XA&1zX*zs%2sRuRejBv0T8n76fqnfF0efuML+ zZ-qum>!|Qz=dgt8Z2W3z_3#LNh-wR}zU^F0I(#f$OtX~y4BtegMX>KP*+SDwyS(*- zCqQ@gG|CrM(-pcYo)yg+5MoKITMmWqMUk&pMYZ(<7e-0=C-1elqdxG3$hbsQnROXK zvPV=Mp8BZrba8H7r2ZZpN0PjQWbGPO=3E7370OPhD&NT^G!oxy@5RXJoyeZ_ML@P% zPgq8wnW>-~HjHnaV1d&jA4|GQEqp{dkZxcDX4g0`YA)ve=eD@*i2?qmxV8+%4VMP@ zt0XNeooHj}-Q4{l3sQ$x#hrEE*|wPfM)>c~Obo>J;=yDtOVWszv#*4&T^Uilb^4h< zaldk^GLj%NH*P*yO@OnsRXW9lROXzv3@_=7J}%+dF4m1#zlCpbaJ$rBP=TipI^ z#UbhWp6~LQgwo)vL{Z$7i^3X%XlCr;F23>B^$epKiVP&k8f(W=4X_hv-fFFe(53dF z`puCS&U6nVIFQVJg}}!QBhk`KWz&5AJ_c8*?F`g=erj4hCii*|j*0VIMhW`m&gLYsag%tHp_j^wEdP6S#{HfagwTX22>;Nnd}6A-&b@|@#WLzaBiLN}`~%<`~8 z`X)1rxhj>j{8RG<(PQIFxYhPjnw3<(dASaC$(yZgW15r*fjKj7!9n6#9AnBWgQt_? z*Y;+jZ3<^;3q}1xc9~Hu!ImqXAM)$x=$kj7euSIfU(C6!2KBuJI8t^Vuo*sK;~flG zlmvl`^SjP#t+Du7Lrz4(7p2?eUqC6P+0yS)$!Zah ztoLPakbjgCMv$yYN*P~TlaB4rKVkbe6M8AIgJYpO_S=_Un#p6VzK`Z3v1`8Ej=i!Y zC=17b(a247U?CxCD}!1m^h{P-3Hmb#Z_1Aq&C_P&Pu{+{QEF?7U9(?*{aoR-T{@71F69DQ(;7q-PfGHOQYKee<2s*HsZQ z2XMu;+?z3|wnpWm#I_7Rc0tZK)<2mH1^_e92!h6wR^Y80Hr-nqr*tWt>A_YVh_j+b z$t7r$@w?sBzw3<6P%*gi$pVM=3p@})LqY@Nu?~u$Tradex>D$LCiCv0vl73UX9YK* z)4uNgn0i@N%^|-p>o!jF+z!U)7%5J1mcl5}SSOyqxA&T6m2}yaXWrLQ*DIbhm+OKQ*B>r;HvJBSFCzt6fsXe;iiPHDsEc#{CDO`3$Neg zRJvh-pyBwJL~_)YNppNxBx~?AJ?#AX9A|ldSeZ2wpet8p#pbE6=J$2eR@Lps6&Su@ zWx<4{O82#;BHar|C}G1o!C5iTUWy2{6jHvFQ%AN5PW^NPGSj{TT1n`>vJ~C$|?=_(uD0pg3R|d41ea=j-l>{}0Hmj}lYDY%Cj2seG zXDmI0cboN;sjx4R;D=Ya6!eGFE1IN>*yS>^^YYJ*fDXZ8B!Jx@s80KgxhMm9F4l#e z6+6tyW`QdB`CoJCtAdHCJFjn~5Qq##MsIcs2ZF-PD;SF*{!Dg3ds`S>2znrA>~mfB zp7Z>#w6kl^XB`Hft>z?GlfvIO~=z7IabmEkuU;5o%k;httK4VKbW>jI z8*7{QDGpEb+WqGX>t;PUm92k%Z|_?e_H4Z}nHMr7Z5G!xf;^??)qm)S)mC-VIlEs# zb+LRCY6L%{)0z=7wB38dMo(bm?Fxm=iEU#h3kcs`X%7c%m3?SmgPkevQfr z6h7|Vf>f8w$!r+%_^Q8>K+ggjZ+M=w-3=ehtk(hh^*OcW`&RUk$=9O#i=tV9nRJuW zv*K7EEa3&+T4AZytA&BP)n$vFpNa+8J;ch)L*M=2z%~^9&^{)f1?#hueaK>Gz;us% z%5lf+dL}_&Dhy;)B##+^fbpARB9l3Rm7Q)i^KEmNLL%-=9HriNX9xt3F3t`dfoi*x zgUzSMEXnlY?)N)GF8nD!m(1hlOzP^or`uvIyHc*r;Z5gXryG&B4`uZITSv;)*A?p7 ziK~6J@&zm&LqtY$b!VE+mzOo4Bb2v~EEKI(C8FiQYxct zII*=%ntvJ?-1AF7P}t)kGa?H3f3Z0HiHmA#X-|R%-y=ZDk$+)az+LX$ZD^SFkt`vu zRQI-%MuFaeHuS3^8<|KOvnDu{$h9V~E_V&; zNksKkc@T8=;JkcsoppwItr+Fki<4e5wy!^-dSpYdWKY!b;mfk^hbd4U^}0mDzj5l3 zTdb9;(-f=K4hMTf zDy0OCmh;l+0A`qyfhf*&yH+&ka@_^<-rBrH!1ATN&2mOZNUPd_e6szuI`!;@h8}@8 zq!uUBU_Ze8cox=ugvBtfLrf(r)a?Hdv+(cUf z=^WL#(byr~*Ftv4p8A2IYZWGE&tuA6r|ds_#FyRvN2~~GQqdbV&33r04B|{JfY|fO z5`cYkA?VB8QV2*~hG3FIezjd-vZGTd*ODe}Dzn#6e%Z@3!77!PIMgp&wF^J@qnuOYjtckEpeL(@FAGsH6ROPlZ#&S=L)KJO7anmHaS zM*W=q#S-kgdwn#Z(K9$% zlS;oK7OIFV^g~CAvIr$*RaR3A8RR#mMc{}YP=lZ7QR_2LJk`Pi#BdCh+Hah6r+Wca zIuwPA8-n*TEdaKE z)|{cR6L8?04j)Ou^m^c_+rMHK|D{p{ck?9P+!e-{pu67M+#nEJ%K@Ze(C}C^N8Zd0?Frmt=3vZuaDG|A`DfFAwI;YlPxus2~1#$pC zQ6$__q+VCHz{A4biNEQRJzqtccEM1d;fKtyPrdEzh__5%>(!)~_ELlp9`2h%C^E#m z0v>OW48A$C#Oz(rJ*xep;}_9UBK;pTdB1;ze>lV-Sg9u37m$sU?PQz<>*gU|YP;6* zI2>YZuCng}poQ?j^F9LvGIhMjitn`>VA0}SqoM>zOPG}4+~QebRkCt=Wi#Y|Puh^^ z9#|23&!6>s&^8@)YTxYFdzkBVnr-li;igUSy{Mpau>BEUA-Ig-miJnfR?>~Q58S>tpVg4goFqvXFI)Tyc^Jk{rNYq>v6cu50Rtq`! z0U@kTmDIV7ZhCeLo5~B*ho&V1dGK2)-V`*ggeQl4?;}!QNR|tK2FpgX1aT{Af=Cyo z*d~>A;vhPn2t#WPcA|Zj*qAiFPjn0k*RP?X5P|twJS9pU7O;#mol-F&O4jgQLLD?1 zT)?~cVjP2jR5slyJ>nl!_GiM!YUd_pr-wL&j zCGU;6ylleCZ&EUh8bwp<;c1|qkuE1dUe`4n9&)>BeIqj6X656#tF~8ss(Q15F3E_~ zCn`GUu&>&Z$0k^X!+HfS(4@%kSPX`|O@=ItdM%jvTf!mPm~BN}RisoadWGLGz491T ze#pkNHpTOVJ?>tILvPh_BDC7WRPg$=thn0jAX8)<0;Ys*<{c>FpP~@Rr()?X1)Jk} zYwLXlyY=q$LKU24FMENiX5D&_Kg`xFDc}lb_(Vm{Jwices8zXl)|~Ao;Mc+Mfj;k? zQd~VIF-8zD*~MQtcD>={Jh(q0C>c&GxlyH^aDZbndO-qBgCg(ve902 z%d>&Vt0%?#bjlFHg;X(yl$@gFi)mybbZ=2Ue8X(`);aefD)pzY@o{zNB9RH%0>?)g z%ElJuH@pLxM@?_3qPhSqKfArEFM^5r6*SaeWu=AE9!OApHy%{O6-Q5bWk86S zQB`~4QZ^5^fjwwMEDrRHshH$>OHPm*^@o7hHAd=hd@Y1LoB4-|a9o|1Tdbp=V7MwX zL*4jYt_%RGePH!-H9m)PuwgpGtsQ5>-X1C64Uwl*^V-jT$TTLyOLE0utr5k(_H1j@ zl(y|Hk9!sd zpa^Agon9;Z${MYlXY??JJo#yOFvQmrQ9-;5_OoQvHQir=pAzHnVd)ag$gse25nmmm8Ez{!w*-GxLYgj*DaZOI89SlX@%`rHZmt13 zF8Ad65jQ!-C`Bla&&EkE@{>Lc8jpd{lX*ql3@%-=*eogmvj>Ozir)Il;Abl)Uu-A> z?j^?Yb$)c1@s_1qD>!nVO61e^aL-$JE ztBo<tdjSFnwl9^scfqHR7IqNu^yFv^AnJoXgFZ1{5^ zIu;Bsm_8&$_%Xd4`Qz#&U;ov{$><)vB9JJG9g(!ai*H=$sM1*t%KpZL=-g* z9lN1qU{8FocQ0m?VAOl;hmQOf_lIo0p?edoMdMvvlc`f49k0Pvn^$q^So|-nC-5YS zH)jcE*b(FenzqT&Qfgf#{n+G>*WOnyI8tu66iLR#9pF=P%D4gdWwd>V<*C~V?A+pe z!A$(!7jnJegE(&No^HK1PO+g6p^@R~a)68#t7k&-g#GWgyrOo|C;ljCzJ*`0>B_BDZ@MdvbG!%&1Ibysrx}4PHCILte*UiH0ubvll zwHfj+xMx;gRM)|1WoFOsAD!+YLZcx``q)D|n}km~gucJKpFNpqZIbxNm?5>p^itLo zpoG36z&XWIZpjcXT@)}89P78%p<9kjM{z2@tfyvJ4rM;$g;UZ+zEu)=yYQXFD&hzk zs`OjPb(MzITIUr%fOkMMas^>AM~U?6QyVX0xB;5fEPTKlj(`zeC_OVXT(Z%yPiNY> zY>Iuqi}|pFtrbHebSUO6-(P9JeM%&%p$b@obMd>JpeS4rWI$`K8HFfF#m1p}o`<;; z7}Fr8^h6Svyn0?mPNx)%km@x${TW$W`<+@k$S7NLpGy`gh$SU;_EV1O=_I--WHTVx zpoiFUcEF=}S6kLnWI@%OD%;y8Qi!>>W{Fw6757&uZ4lIh?<*)*2oc^iX1jSP6HE(a zVs&>VoS~+q3B2ux#`jChM2ym3!gTA|Zi7nMZakVv#T+PPi~M2Pvudc{eaoO%Rfe{3 z;_@CwXMYz+B>4GJ{|nYbtDBau9QkSNN4fn!4ady?;u@B2ST zQQ&`W|3A6DzlndxxBiz002Br4{z)7BKZ*Z0%=I_w?_kS+QE^cJg8JW>%io~CV;KJh z(Zc)-=zl^Pe{=rMP5hVB`){0oq$vL8{cYU;mlqHBFYEe;jsG|AZwvpwyv6_J{W0_v WWuX4!?gL={oZx>dGD`iQr~d=Z!Mh6p literal 0 HcmV?d00001 diff --git a/week-0/day-3/my_todo_app/venvironment/share/python-wheels/urllib3-1.22-py2.py3-none-any.whl b/week-0/day-3/my_todo_app/venvironment/share/python-wheels/urllib3-1.22-py2.py3-none-any.whl new file mode 100644 index 0000000000000000000000000000000000000000..62fca28e15e00b19c91293eec7edc1324f0102fe GIT binary patch literal 124700 zcmZ_UQ*b3vwYQ`y-p4tr=F@l> z`hLoSL!g6zfIx%n$pkA9x-Umm(}93AxPgFB{)@Ug+1OYbu`#ePva&LoSUS5fSlXG{ zGl>IK#FV9fs!A&=FgiKAwD_)jZD=MP_vC?H<=DwGqV87?v(3&kM7j1Gp+}*D;jrK_QOeXh<;)waPI9EW{PpuUIW*&(~wI8qMnpiqs?0>89 z#m5ajM63mfe!bc-&{Dg&zq)f&6IYa8&!aTdqmP?3ef;(1qca(8_}2V-P#n>CcE3eS zTh-1D{n*#0q}_wySDEaBnWCn;Y?@#`0FHD_SXpRQ9$l|P>BvhrL@pG! za#7}yj5WGwa&cv>MWp_j%b{1j>OX@0p&>oVh8DW$vAV z^YsPUEo*k)^2>!^K#zR6G4IkKqz0gO+zf^L&~>p`z%ps{=I?NPG0n^4XH|bl`|i~c zv6Gt%&zoCgx@Biq2VQdh#bG$*&{L7-NjVzA)7w&da&qF3w5ruY^U#?wGKJ-o23%Ym zZGSEL5|A;w={)H%v~Qmd-@f?JXmutf=;Tie+~`~oT3NOtk3UQK4p3CTqp#4o2?_Ze zXV~uGrcgK zy*o5CWXmjnHcFdu0;!ZKjpb8WHc6Zh1$2kH*Ah0@wL7J)4WfpWwF~Nune3OtFl{nO zUKQz>vhGY%%L{kINhTe~G_8+nlxJp0qRo`BWR8#QfyFJ*mQX{+aIBY^NFszk2J{Y2 zb!LHg?yu9+nt>vyi#I>tUk!-xd1xBph~P{gSfMRIrF*8$=K{C1PdsJB?#jBm+%l&k zN^XP*g?zf9h$x)3A@hdWgs3d>moC`j%}j6QuqZT_EmNzD3SswSuyse@k;|-k87b9J zG=_gnGVJ#)yAa4y4$#LjH^2`rF`O>JM!>>5=+~`!k~Hgmrd2=X^4Pf;mu`@Lcf!cr zI1<9g@A&tAj(YPiUb%b;29QISdYKQ6%x4FmwC$H~&QN9N=g#+Xqf#$Sp-3IsxlmGtjj=+_eJwFRxdCTJ4+%cFKg00hS)A(mIq zTeyTZd2tpO>6rAV3TgL=^!;fL3gy|%T{5>nWuFCUirA;~cYcgEac}&4zVGhx7C9=< z{rzqG?OdE8p~V~-ES?u-?!G}RN>;Wd2@4fTTqk4>mejDkaez8G=q4QMVvT_Y~nyQh5ab<=G(3**~E1B zSNtH;6Znny3uC;vHcN6uijjGn_->{N*)WEo?{30yBAyaT%oyZIQxp{NI59w9+Lco0sQt|a^(1zNY3*TyV;bG=qS=A> z>@{Fmw-l;>z4&W2jK!rswn}Kkc)TEHj3E?dSXJrWd>(zMmbLX zhKJmri%RNyBYs5i1wY^&pizo-q2$Y*9c}4LC8c;iWC^$Lo#x#uJn$7~u4#%5-gtHX zYJztg3)ts%c9ob3DR0yX!Q#tS16K;`J95FtDHDhJqf?|XnKGy3?NJHC3SI6NZQF^= zDEy05K_MRhEVHK4B&j$=OA}Jz;gcou8y5osEboEuLcTYysZnm{M=^`kkU5+7#gwo_ zK;~V$Tra2F)`k0-se?GzC2k&eD_;)*|DN-(05x*5Qc7yIAR1wO;1t_XzNNSqCvm2{ zD78Wn!UMt`SUVdc<(thAx{P!%x0rxHRPas@9lDeY3aUv@K(0{@c(I-kQ z3Jd!^9}*(BqNKG@)o%;RnG zs3u2O@X$;&8_BS5B){1$JMsOtZT2{{IYi;21)>#9x1)dc}#|p z%tP>ztkH`lBn}gCI^XwWZ@oKAS49lzVhpz@yzviCM#0xu9>rSt z6(^|-aw`5Qn^Y*kqfKHH{7=F+m1xbiMwk%B_Utvp8h%61k=xV)z-LS2evU+q+HW?j zCVom*FY_INJuO@vT;4a%AWHlml03a(Ab>4X?>Bs|j6_@bh&QF0{ExYy2ASwOxKdmJ z!NqVF%U{ifAqoMu#TipFfcoyxI_Ys){P-Trr>A3Imgt_0Y1Jw@!}x{y**8X5Orm)t z6;wIX^MJ~Xp_Y!13m+dZjbeZb=Ei@m40MA-$1;kcs4u_cPwGcte% zhaP(W2xlt<9*bMv&-fxy75xz%&ZC9jLhGmDy)z9_3h<3CBM!7q&7b^Mgqel$jWg-T zB$k%)2!oGYV};&0JYK0lspaBdIy7Q`GKBq8X+mvCS5DJ<7UM>|1=kr~+A>}V1=o$O z2LUG;=u14mS*1a$7=L{te|6gQ=h72)_rPqc5Nu6qL&tEaRF67YjmfGei;cvRN?EP%2elVe~vfFaD)7__piA znx3S^ZV*2yE<{pXU8Vh2#gtEz(F|}4)DEWV`;J-@%gPr|V+F7W)x?hPYv&^gQ#0sZ z{tUDrRILQzq2%-6QKq~WsYmXlWS<-=NNFV8B{X=dzkeq)F|%D$lUv&L?7qJ1#*{6H z*Y*o*@6~{U*coaVxmYk{&`Ym81+r-K8nf*aEU|hM|Bpv^5lvw&c7cO{9ww1X4=NA4sv0z z^0~dmERX}bnLP0*Fv>h#bS}r0sQu)MM>>=* z+A$a%97QK@q8~J$SIIM2!Nm$<*Hhg^0h>rv;*&5(-Ixod%+sO)HTQh(Bt-!0H&kVe z6~EwhHQL4^v++YtiHoLIll#K+fpuAxLP+Y-O6fJaAi7GE5KcLAkY-H<(0_AB+!iI4 z`;-?i64nsK2&n)3ZSpyX(()=_`g7(hBj{O5^ziSrFWTMf(lrtw!fh6#BEPwdTtcxo zc!_D{qADh)cx@MtgpdG4$zB00yFdi|*i-d%U3x1e_lt1+%9>^uGfdCMwS@`WkRcL9 zYsqZj_l7-W@ODRn(b^eb@z5iwv4hk_HmcRb1d4(& z(Df@|5xN&GAMM;!pUGdX;gKV092rl}#gCHTB*%6a#LGsT-1^BmYJsGi5N%&tW|Q*y zZlUMR>4gQPLe|~q#N0`P(Sx}x(Li$NY(xyyF$mjBx3<2?@lcbiiJD=uWlJyDQi?PQvqGhLt1&h zNUevJCwefRcx&`L*-MnG8;#q7xTDR7+ zDd4h~(vm%T_@^vAQRu*svTN`w((x@+!oEl4VvI?A)`Jb9Jg1u@t$h(pdq$jZ9{stf zPD`m&-(fxUHbXI(I5Yfu`v^0s-{V0We30hQ(83k1%!qqX z7Q9(u*Psogvd<7$Wc#s+A@nf7RETLy{#gPbIW##Xo)iR5J&!`3DrB0=q{HzV-*jx% zJWOg?Y7yVb)iz_tRWYXs=s++zoQ#`T(~n65oTN~k9g&h>d^qlTX1qdbxfI9C9yyzO z5#WfYeVFKIJgdG5+Qs z;bOxLlDFSEU$@lQ6t{=Cu^`o%O;m!Eh)*S(K#P*(VhzrbBXJ3RZ+h4~Z{U2ui~arL0tsWcRWHkUz`&rg5n^pDmU&m;z_1#BIvkBIt1ua8tPve!xEy z$DGaD1vgJwsy$PHdz_h}Ir7)La3(wnp7x?-lS+d~$IHTTAy)qqec{t* zg3$>CC!X5hV4aozs@L9j(h+r-$HGmTjtFN-Gg<1=Fz_#1+;Ow&ZSGUe{|c{M|= z^|KcZb?D2>zOqocLZ^#{1$YjAYX`&+o6o)DW-)HbEi)mV?|YH_b;2WD zUJ%g$0;Lcb%w;EWxB^*`U%wZNMRwol)dT)M!#UoVre-W8XIzPPtv(QljpBR^O1$q& zl_tSJ%agV@9(|Yr>{8IXEFdpo2HCxwtQTHPZmR)R*cue!=)VRokGT3FA7dL@e}OV7 z5qL2yFW=IME^U6;i(;2WG&Tqw{asen_p=-a^z^>HHEAtIzAtrANrd*Ft`~_K5C*{7 zXb*ZB&z$7*LnRenM41TSkUVxXRq(=QKTsW-$Bf3`nX%7GBu`5n(kX4U>pF&2VH36% z>qHVzCHns1xF?DViCGS_I=6|uvQ0#&!skJ~6bf-*RjG)q^pYi`fj*8W4W`zcafUIJ zp||x6njuUK1>&TiTN2b1j(QYpD&#hsF+W*hXPTno<(xb+**JaEp@bbup?F?!-vvvW zHjZ%*NFd9o2*F8!(ocXwibyQfb6Ed6T9M5yaH?=VuM5f#jw!eW zUNG9Qd=I%O;^HVk%}MTWpsT(tgFGXewsv&cnp`(n za~#ZR;BS6C4292f_33SH>Fj(uDe`&AjNKoQhnAH~6_zqDzD_{(dn|lv4Q2|B+?un@ zJrH5JKC{^WagwW<&~!+24JN}dgan_#D>MgES%&Vzz<@gBEQV@W5p5(i)eicv-tGo? zI;>qk|LO5nf^jwP#n8wzVZokx<#V^A61dsSxtQj%f%k4^@E%*x+)bMAr(F`&@NVHr zo8!JvaceLJ_wA|ZhWzRJE$@pmWoGscZi64`6V%TsbERljzWh>(>$4a^5bsVN{}-^Y zi@d|r)jN(0NXq0=J2Bxa5J^V77J8QK+twA*iM6Y<+eVXYBpZ|spQ2yPeOSK z;fMOE{dLuFFy5hOY!Mdrju|Q9kr<;#-fg(odu2;`W9?)3tbuya?N3~tsOKCgFWZ49 z<*P$xH=qwoCp?QR2Hejs9Wp0cz+D-GSIBQ>OrIf(!ivI#0>q%DPuXHKKGuC#YE`>g z1~bg|v*Yef#6pV?^oTW+?6*q$vMf9qb;xU^aFH4--HIu`ftEfC&fexK%cK4D5OtJ{ zHq+23O^EoLqm;OcuLu0J1dGlw&2QIb$RUoZ?&kA#a%)|DV$x(`0xDZcWtW#0BqUAR zy)AT)$mEy$?-_He!FV4~`E{2F%t0w=Skt1$TtY|$Hblgn#EGMg&lHE8$PVtt?P-%I zK}N=mYK%2>cD=t%{$2K#pc^w&s>Qm`&W@L>^<{q2n6g76*d|7;hTAvIiWdAqme376 z*^t_QI$GWuI=w#6@73AS?eV`V>Pqb=+^iAz*vWY^;}LK^ zGYqm3tZ(;GzFTfS*wKJ6fy+=&~L{Fz7J_B|Bo zkrdoE_5i?bv&?CQ4|yCH9>8UlCBqL_L*nchog~4IkHre-`ZqjWV-c>X(B<(yQTQ~=6_{YmTAy~jvY>V6o18$abAhiBtH~>SyM&*K^bMKG$v9;&m(gas z>HLG(5C_PHI$@|ztz3mGmn6W-h@AO#bUx4*UHCEvM99ZDdsD}<2gX08#8>;vzeSaZ%<*6T<{4GZBt1cr+eiLMEh#wGZrJ{;^wFx?3Vic`nQO+-zWp9bjGYu%` ztLD7G&QpGcVOls31Bo8oO!Lsa6TJI5VoGB@U4CmCZR}MQJXo5X+dh4Q_=g?mPpTtp z?5Ih*#v8jLg0)wh$t0a!p?A*j^E8k=VwP;A;fEy)G8jF)vR)N=Q`?>qa-|EU5{b+jofXCN9#m& zxksBqSavnDyy+L}Gji;N>2Z6m#$s_)g4c5Q*$ANy{4iEE`GFZn1K|)#3*>IlyhYV^ zo0-D$Ezo1h{T53H!4qDXs^GLAarPPu^; zTvBrZJ9am|JnXR!#AQrK^62L44LyC-QrdReDN@l)CI}2f>j8pWU~|Jslhk z@pYv$j5Hczlij7>q_IJxl_hqOQcy3vd4j3|(+uWz83+>#@(~RGk%p@)8GBuu1X2)2 zUR}WzX^g96`5>Xu7&bz?oIW_t3)rk}v!NRhzti~R5ae+K9|b(T_dc-Ttcp2U=x-01 znjk$To^ea)+U=jGZirR*g!&;v2eA#<56cGnaE|C$v810nbzcZ@Klt|b z0<4-=Zwn^?Ggp{D*!8_9`O=TJ?B11;Si-7d%J4Vw&eZT}4jSjs>&+`A^pt&Mu{I+; zoGL+L9>d6_?LqY4NDxHJsjY3)dJz6C3gD@h&19Qi!zwG;|44%0u@i)Yt0gn-WsRNd zV$GB_4GQTWR`ygW^xR?dV!%sk+E6Ho|N6oX+e@4!8>+pFcV^8{p(y2i^y|X6D933` z!`aD-{Pxy4be~$AGVj7?9?Cn$$%gL$%|YGDHITVO+5B4wlzZ=(R?H;VG2dkoRZN*J z%TXza#!fA{Ofv@I*O#3r4+cqs+C!Lov6ji1jR ztHPTf!nSTI{=hNYB}g6T3YqO|ij=8FQMh$2ZLPhStBc8q=j3dc@KnXqQU_bBRl=qPRD(^ zd*g13iZ$Jhhxw$BAJ3v%aQ{m0LCUjOak=PUF8OD&?CE!3tD9W^IS%S=i7Wa}lfKXg zy(_{uW5&j1cWVyDurOLip4q<4LL@%^IdZRb@t@Zl5S%r4g#;hmLhrq`&Lv$N=W!v& znYfb?bFJRqEi~|nS1YK!eB=wiGf&cCp$u2~?wbmrY|X&}Bo`x8>4N}CNu=a`X%d*gdx0Emn<1Zhnj4t~hD1&G&2iBE2m+0TSi z`@3etDZ3N$kYyKv2`9!o49O>cuOKuBJ2aH;aD>b4?UBj1m@oe|?rEeX-s7`Ss=fY` zhuXcBygl{Cdbi_PzWn@Isq?esMV7S*a*j$$B-g0xo7};-^9HZN`!r1b!z8EivxwIj zvf*1Go2NWTD5FG=wk`J`hB&8Q6pBm>TV3+kAhsO+bZvU6pJaKK>qKq``=Hw{xSiWd zx1^q+`wN@-kV{0*j}Y*V@7^M5HGnWJEB<~PS@v4avcx!GzW}-^FjeW%^7dV^4p2+x z4{9aBnnr1vA|Ue=`Z}(kt@*sMDp?>x8cQp8q@XcQqcK*R8FcwuJ2^A3j9iTyy$%O= zu6TpbgL!{sC{90+fN6mhsabO&^^enAldO(tT$p%%$8mf%4)Fj9{MUVQWPn9)uDI~m zG8Rb>iIHv(+FO(TeX!wRCNL+#W?zZzkO@0KbM!gdF?^GcfE_|vbJ%j?xT#7D$D2WE ziK`M4m1~H&e%l=}OErH-wK`A;%E8MEmH%a>p~eBQY)I_}vm2k$v@RtMN35 zqeAW*TVsFd5^ErMZZLL)8!{PSYlFQ$UG{!+zY_H*P-)H^Lo8ePvK9LjcpM0!#d(j^ z*ha2T)5^+_$}UOH#}P8xYu%5IY>S@1!fFhjNZV?O5Tp0wsC~_^nyA(Br`i3em?$l0 zD=^M(9>h2E4#;E^z}ZFb%H0l-&jevjhCb_v;2-(<_-FTc3E9mkR(dCE)a2gy1COT z;D$V7vY7sHzl6ZS#DvWIoV@b(-jsT_Qp2(AK682u6nJ{eMy@O6uAa+Nz*URT4d|p0 z68dBIRIgiD!GA8c!TQn70slFOXS1Y(0zuN;z4WjpR>7}P@<_EL!yQJ-kmAY5!qKaLQqu(g< z(E0cy3J*59jrJdgpdx9vq-)Ej<(Lo|8!yU5G|+J-ccQmJ++YQPuP2Ch5Bv!eaWRIwcvvy&(SVc*PdnLYJC)7xIX#be!a^Fjwk~ z5D4&>p-D4oinnxxf{nT6ozt?Q@u|40+%xzT-&U9A7LIOFcJ&$wbQy3e2|@PSMyeX? zY!PqWKJciM-Zs%dC`*N#2lw!=xiDz3LABbi7+CQ#HTHIkcdATIDdnK#)}z{$@rw+R)ES{w zGUeJ6ZGdI92R(uymLLy1u)S*@jW0#6^!}u!_W0}Ai!QRKO(?O7kAHnyQmM&y#73Qy zXGC0d+-o-mrx+_Nw&%?XR$9Iw-KX4$VU=SMUhQ$rbP<)(#5m64d*YC^R}}K4Dtneo zqi%4Q&`2VcO%At)Lqd=yp47M;@Cr+^toNO|1e1No5%3G>e0>Z2*_>Atr_tG;755{n zXmB}`5o-GeSh&pW&xx=Gv{j+Jh_zEb2mXx7JQB}b)v<>8`Pmy!8Zxx8@i+7}n)09Cys z=g`#B_et~j7-!?sJO<4lE9UjRN9Z-Ro*xJvUE4ACv!&FgH~&Y17nMje@#PuAZ>~p7 z1DWf2MZ-*RYpw{*wkVyL*K_Q>s&(B0Yjm$;NCdCk?YRy|C9f#MY+)13U~{&*yhFn34D#v# z?i;NU6oOibg6yZyZNIm_KoU;ElY+p6*oOupTqrBD7Z9eoTS^=W3PM}XR5(r)GEq&% zE*E0LF5(*XrDQE@ifsefdDvlfoMk0TFki&2x#4}rMDc=a25U*e%J*pu>8t__2?**?wYUvvn9JRKC5bE1+hvXwHmYwqBhTL zh+#5yZ;rs10Y6_FT)wWj=w9g6lGPEg8!N28bD3j#8omkxCpME+3-jI4CoBh zKIZ}}XC{^D8Z;zyX;tOz8JLOOex6^VegfbcgY$q3ciak?33t0=i6+Gn$_pp+Hptk` zOuGy{CZ<}%S3{p#%5eD7iX&4sz2h{sT0bR?(FIAN&`O)21nt3~p-pO&3n2)f*@9mm2Z>^9qWx}|6x`9X@yURvVCc}+Y}DJo!hdcXIUyM zxY$lkWx|N&C>uAr`o-6Jfh{-NxO#qJGiqx;=#e zQA9a0qnwaydZYxnIno^7l_y#L(G2jrU)9~~|-vq0B9n3qqPs`YUkk$2Y*ED4K;pq8U{s(>gyO_$?6 zJ?rjvz=+GD!Wll??8UHh2njta7p3h%cwW9;Q?7o5S&Lp*(lre#%o2)arFrKjii-wD zFx5-dG%wc4tsk!S7b%sD(@K;JNHw|Wc!v=5oYi2>1wy65fm({=G<(fUU`*{OssMLx#Ydj+R2nzhuTmgLNws8rU>2FGcQI;^RG`+_YVl zfpZoI*T$i-1r-kROrK_ms%j%k3(kt)akUgIB zWR5UAZ%#^kEu1Ywu{O00%8*YO9`+dVT30p==EePTGnYJp+d;II@hn{!?P6l4K~4X$ zS}&{$1vf6==)zAHxgYz-C7FnHqZ0kT?KbY>nNKlF?J$SULL?I_K52N4IznoHA$#x@ z80a#GT+dL!5^HgwezAF%VTa^Zg$ue@nfR^cuYu-(s!WyL*8`VJ$ByG_Nz%xOyr&;y zsi_~1h+zB+-S(p4asnxq52ZzDiXm}aV5>#R`VdEUjQi|lXK1O_c+xi4v zt@tE{83Ev%bRt|ndlnOHU^I7IgC8GR#z7>Hx`whbkEE02&R)ReyyrC&UJaM7OUmM` z!a{aowI|vN7AwxlLCl8;#DZ_J%Sx1UUK6wMA(VxK*khH}!D<%6&a}(C@D0w8ug1|P zfg%IKjT{l8p`)6d)7Ydyc2kt=I=W8$^~yBSzhas-K2|p-XE`!sTV%x0kD40on_?m# z%LO;Tz>+yD;l2a`){McPX>moG6cBqAZ(Q5a#iC{3sAVRXBf}?E5zQ( zlP<%dK+yn??~)dSbZTI!t7ipH$&n-9rK*;+E@8mcIBcvxpwVZ9UW)SU+61M|=K^Fu z^y^SPR;hEF+Phm=$og+=Gkj^=7uV1K%lndhfaTdUfPn1zfPfJF|9f9~fU1bNh^k17 z?}itiw9~ObexXE@UZQ|7ie#S66MVK&TRWK&yL9Xd-!l|?0EFg{C`Kt_@f?;PsQwk& zCEYcd%_mBtmKHH_OLy19`j-4}TBO886o34?fs}cA+M;KDIX$437v|&O%(iPYySYdz zl{Ej^O-Eg)VO^WM21B}1uOQs^*3J&Zqp*TMBGA8?Ec-2Qw zTWQAe9qgpFzKNyfLZfe=-h5kr?YGb0yN9Rk{ONa|N%K$&a3;j>H2HhN1|pmAzT{;n zK;jz0%@(;5&+NUaz&QXF1Hd1TaJA3s8}&f1yRbR1u64UE_Zg2HuV)y_#s)W2rDd~F zF#u;joh;pmL7;G;wMCWp>fw%&Q>QKt?e!GnZr5kmeV_OvQbya+p^Z_dDaGA#B~#0A zJ9c^VaGf+hO}6`1PzDQwfKabPYf+?l=Z^ZT>g8WIBf0Z;v~r@v4}6HtA@$!gVo1{IX7)ci#m3!?UH>3zjcLBwA_Xf6thm zKC5I$f3Ok#kO%l_6D6R%uENg-__&wNlr$GHELF36wwvCm;x3Ed83A}=%E{|3tbJo+ z^J8>-qIIW1>GyfC>etEGxINV)KKuJDBAjg^`VB?j(Z}9`jW5(cWb0`H*phw$?(p(- zYtDL0-Q90k#HcRq^ylHUO%_LuoXfMH2n7FqmGs678?Es##Ax$76pG6l+V5EP_Ex9r zPW-;Q3N=J#BI&WdlfU5~26*F!YxQ!YqgUQgd42#($;n1a8w0N;z&NAgAt1aALitn-iB244$QKZJTZJF%a-aHatoFKBc7`wQuz%AvKmSS9C-hg>{zwvGEWsq`w{K$Ls$wS(1z-q62}l_uD*qwyGH8 z^QX9_PVI(s(&8Dt);IB~V-^s3KO|ArJ7gf->K)m{IY`S)kpni@m86|qra$T8H?5rE z9*x+zt2*ScnEHGReG|RQWX54}Nt6LjiFMMkBaUJbc?O;l6KW8dA~Hgo-B5 zJO-AgP*#`WMXi)s^y8#Bo{bG_s26xpaD#p)f(0lnrhZ2Mi7sm_@-T4J)$o^_n|{e+ z?@}M6yQ$d#;4hr-!kSy`(J}e-884<>P-f(R zk?-lVC8z(8Z;cvtEyjQ38@KN9zsNVGGQR$b$ezGV@ZMclJeGg&5Zji*2@#kSSkRl( zf5`X7Kk_Z7T79PKU|}vUczYTz^dw^k~8UqDDufbdxDaPu$QU*u@>4l7Sz*6pw=&R4QQ-|87* z8{g=a-pOxI7!!M;f4W<=aPa)Ub$8B>|LE@M_|?^Pte1bf`_n-A#Ht`%dP;ALp8(QI z9zv1D1joNQNC)XGBC3#e;HIlb?*^pFH$qBE*v-bnMtnM8Ys7d#FWocm=)e&>;h8LM z_5hHR#Q4-#l==HPzmPkUvUufn8EHQK7d&t_AP#`u5l$n6JTKPZ4VceGx?m!C8+}>ZbgWXoK|CU}aj**x7vm z&)|Tv&l#)SL;-d5aV=roV0ItgqLvwY6Nn6)_~=(z_da_?5O{7 z-3i%{Yfx2XZ4FYHV7+zbjj$xhB#@!s7NVk*bgb)VYP+oJ-HTpD^lp z@d7w{9l|q3#ILF9`?EyE-UtiGWKSkEodWQOq4AN*5n+M9pr)&Op5T} z(FDc4Gdf7ZpYjJCDF4|tL(}7Y^@dA+DY>L;)8kn+DGbWAr5Gm6e%|;=JJ4t96Vtxr zO%GKF)uJR@owC#h<&%Z74uphjW z@o+d{!0-_w%{n+VrLL7AIg7|M2{Ifg)DjVjkS%-~)D?L(H({J+4zG`+oxxOscEWB| z0+!p6am121&-ZbSGP|(5P@iT`W-&OA1YDFA(_v3OgPfSFD0cBC93J}rqTCt(C^xy7 z+0hj5yCt0deo#6$q4(nX#q@^}mbYMbg?i>7VM$T`gDyI~V4+Ycc}7%Y1<{YuXVWY{ z8%Inx%BcVrT6Ng$!9=OPm{Ovf84q*yf0nzzV?ySmIfBGJqA-OX6XLEh#ZEK|E(h4x z_#{OO>lFprtxecWU(Wp2m4F1h|4AV?8n9aFkNQfSVFBA4TRhMRz{M&JjhE(Blg%`o zZXRW~?equ0AKI4$M&=zBnEotL`GLnq*+rpyQe5OzX?&#Gwk5DdQWnzRyZ3@W>@)a! zQ#BMXb2Pa17;`-1s8WLr4mV7Heft~r##Q9}BhY{p8LvqZ3<;2+J_&QkA#Rwqpmi8v zz`=xpfO+onCM;MZ^%>z3PMox84q7mXRw+mft4Jh3cU*El?k_CYV(GQhVX(%5C2I{FUdgL+0Kc}7L(kb@?w6jC` z0%Q{8nWLxhcnrt44Rkg$+(xgFMFN1I92oCqn1F~g_6p4NoAFYWTapn~Td^(@USthb z$eOAZ9(IBneL}0-{lwdS`59WN)xr@dq#I-_@f=(xdG*x&P87$efh#+4{>9VT#0W4^ zh*v$qQ8@03z@i}CB*po@JU z8F(9LLL065<&3AnQ@TumR|wm?`nT}-YXMnOJDUo%vA>*xH#y1u^LuTihmX}u zIH`D7S=3VeA6?WU$sOVIld5G?8HuEZSBVHoDB-2-3@^I{uL%YJ@Wba8 zbO$&wrq<3sCo%Pe5&!sh>HqNUivRHKRjKeZs61+VIOK`Q%3{@$T$5;z^A!)?=2K_s z(=>G3uQ5a!9k7#6&@vPsDnY8H$zHv$N|Q5diew7TjMGPPk1^hje$Yp3sEgrQ8kz9h zP7)v*R=fP=L5cUn*|RT*GS<^wZr+$K&&hyQECk=XIu{{q#D-9PdYn1}VdP@e4H9?M zdL(9sndOEVm?{klhoR!-EEfk{ex94hglv+XHKt{utVLjp{c0X`Ghf^^{Q>GiR*0~Y zJQ1!_YH2R^N_T3ZO1?ms7+uW2x{g*J`zu+PxA)*M{Q+oO+ z*X_oGDqa8csBtH{4V$1$a%DB*8`&rhWNJ4S!9f$`$c#faniG6IVtnE&W{1GkZL5a)nuT&zThv zeYSRTS2!^Yz$x!h-GvWC)@$E0EyE~-87aNe%97zDA;wn*xdR&0SD*Gi) z%N;{)5#Et~C`n+weEW*W$8*cnhlx}=fqAnvQ*bfXlgG18YFbB-#uJ}X!tDL_y2S-4 zM+>#A7|X*_8w3dphj9T3$7%Vwr)`{^(XRZ2;jMIz@Jq&l-8kM?j9m;~9&>Y(mRn31 zM5ZOw5n4!iah}};DFQ>QakL#9#Xg4IM1;6jcvtXtOGGY6*r+j3JOMOY{QUueyPUa23+jc_2_9NS{cWfv|H=r?GNmWXAS4{ zEOjFXug5z04#MB5zcb3+wxBBLG47@K;l=FAJN= z&|)1)(wMqgETa<~$cUcAfCYt^cBg4uOR3S!g>iA()TcP_RwfXu)ow zy33Bu+#XzCD%6FLL|UZQkxsu`k}VIs>t7fbUh%H`kg$m&2PGF^WZ2}cw}aU-cPUem z2PZFxyTL3Dk(Eu?m(PPa9{GEYz+WyR*%lYoJjqnn1bJ~V7?uPoWb@|_dUQ2xDl6fR zA7}N%Fwr7&6f-5WQ}l|a6LIHrz}l&^@vF^s6%!rudoH+s>C{2WF4H{8uSh(7jA48?4TrJUg5}#g}k+XVGMt zGL*#Zk-HONH`y2+YRZ>|81+=pi|6C9(mP25O{g_Sx~cfeHjqu}J0MtdTq}R2M^1tu#rJ`zO5Am^B1a4$2;|9$XlF71!vYssR;wUc?$21CCUAy+-(|-`QwrfWH zFS31~@!w=S;!6I1lkLX;lWa%-hirrXBimOV|3$XjIT@E1d9@|t&HjsQyZs~Enwh3( zcviD#`s;^ZT%_CPR3j6o_geY`Z`ZOBuO`+X}PLtN){+p zNoKTqP9kSNs|y6z1jHe4tZVe^hi&$x^^f_FAgQZ4m@4pj6Vz2_zURQ69b zQ5`Tzzc~z-h2)u$99z3Cs*q6ozVVML#*jFvqO|9wnv=dlhQg)<+-gek-&qHy`!@SN zJpR6YKEI#8r}O<$(xtmaKXP0`H^bHUgu+(L5{l({7{&df|Kas@P&l(~F8?d8LQNZv z(aFxCn3UeI-&5?d`jxyUL5PF|B+j|>R_00!%V|aJ^+uZzpBV{pV@t2AjgGe9dWy~Q zNE$QvC}wB*#BJ$erpB%3EiBeFzSS5>3l~m@6<0Hq_w>A$a}*WV+;@u6&E|I*gb`38mwuc{*#Vv+qTuQZQHhO z+v-lo#vhv<+crD4vwO{&nLTT;uYFMGbx>7rReg6o-~LVdL4A*OC+r@t$ug%_p(M*) z$r+v<1)Jqu-{#xr$=$``$KlD*?JK<#881nvY2^Op%~7R)KQXqG!iWo?_^^lHosVbH z25xdjahrr0iZOXMCX|zIqowQOz%Pz*;#1r>_X#nSea?oV?o{X!LYYt_Qs+9OA7+Mi z5J}v3-u3xhM7s|stM4>Lbx7m_c?i}kCWK@uO6G_I4)eA4t3<2H-YNwC|CiQgn7*$5 zpISR#?H^iO3htj;8~?A?rt9MMb9HW5{D;;aANq&ZjvQ~^Q{K1@^NULpko)Q%cC12q zTvK@GD*TJJn`)L+$*@+LV?k|@wWjf-D3bG>K&CT7`)tB(k|Z(6SO^SAhR+^vj}<&J z9I&g2a>Uy7M;sgkSlZnC7N#>d@p(Fh$TTqr$JsFb;KYf%qNX{M2LHs2ufNS+9DWaI zZ}0MbTa)mU7>LJtFz7j)X7;n~=|&o}IcaroLD}_lS;{$lE|Nz?HNA@;I@H;N#_2)< z5C|zD5k@5rL(HpzOA&2r-%iDLVnLbNUzxoEpMCm0=_SX{p!PEm4^;JUNxyJ`*#!pgbdX<{b-J~1e8tzO z`IO`pVdzKAgMXr*q9T+TWVEcr!x(j}OFVd}Y%ptg6JXB~(RT zSpoRBh-tnEI}j$pCvjjr-l5|24a7#7N0B%L)IfAlXPZgKT}M$Vilqa$-Df@gs>!Of z-O;FhkO*C$b)dP;6NCp`rd7QFeahfFX|Qwl=O&WIfYAKk`)}sD-N4#v8>$A$UO5p+ z846qL^4DiGOPYg_A5PjqcWo z^3sfE@vAbI7A5C}^*}RMt1jcY$sPf#coO6|2%D>GDs12vp<2s9;!x>u9Z&WKmndT7jq+UU;(+KB? zLZcggt1qtqEOZ`o)UDxUi*YEckS_FNLsFP`;!`{G5pz9EFv22u=3_b6{^FtxS*#db3g5Cz{|3)4vc$ZfmG>Nw$=6}_+gxD% zC=mORZFOyv~L_R2oz-|K-<&FsxW_hVh$M`Z0=%Xocn8>Uj^1qFh+<@p_BIp7)Ss zabMTC2OEM-WAe>KaU9CIRyos3XvFZQmx!zzG+No{auX1iqq|*P_lM`6?<)EH+4mIs z+~bOKYX+X$)>#vlMM30a$Eh%(CSik+>n8bQku+!t3OU8~R>g9ZMHNfsWYm6`!h^*`wC z3ML*6Xm*ZZ!XJjJ%+-_I7fxvU8}p#>?j8_<->)7KodfSwS41oTafTV#F(I?PVA42G zgob*%Tp;&lsZH%%{vPzkbKT}fGV!k2h_O2WBN{dvEfQr5Tuxa^i1>L?{Nci9pCUg) zQ%G<8`-j#+@g4LC#ySeF2S4(9T z>nc$l@QSP0kC3`T@k=h{qt^`RpR>k$Oz27fYoBoZ9|GBxQQpSUG5g&RIl|3D~!0yT2S_O+Fr<&Z? zL$XMSb(#?!p})rCfKmi;Z3+yKP=Z{p2^K?E_;Z3|2%;2)Yq&PS9^BVgJgk8J-=#M2 zA5y!+YQ5GEW#)J#uOnyVGX-WOyeR|`totaun(~-ZZi(FkjqPz(3HHmDtHMAXxVFbF zZX)?o?`13q2qObcT3Uuf=nr56bbTmyPie7IN#3`3ZZMg1x}fwsx8oFJXFNw2dK2*X zL34RTL2V6SxI5VIANs0)6=LV7Q4m>8@^xKP;XV6qHEpZ`H>5F^mO5|Nj*nTBy6#m);wnZ(@_xPPl$QBDX!0w0iNr9nNVOffiuxWW8G9aNb#ep>V-{*NEaP2ZNN{gQ z2Fo@!GobkPVNcb<(qoX78JTN8MrQfGV9A575JXRDC{jV*zPTHJKa5r7!GZL>LT0_ zB{7-UW9Vy6u*_H@aIkgrlQ^+|jtn|y+HG=d#U|=k_h?)wSzYpS0?Yvzl^BKFM=Wu`p6W-bZE-z;2iwrj$i2VoS`@*-x&E|STLr_*9vSg3j z9p_n+%10}yQg#UNJM9bFQkx|huAmJcUC~^CSddby&r`y$5e;^Nwv*t zz(+9tNwp_4JL55;hzWQVFe1CZ)8+k>YR@&tK;)7BgKE1uBM#{IGBtu-|5^3>a=O0y z2i2bYFI1ZldYFHIsd@0+JdK<@3H+?kQsN1dlkO$1sU?x8dob$f<3QZmJ(*soc7dLqaSHiAsJ2$Ej!lJwO<@k|)55WXNN4t5ov06w zl`642$XWXPyJg1WfO}NQZ5g87!1>)0(>1I^osy3jQs~UB@^lE~Hdp)D3n`qoJD&3N zaJ2rbZg?a6rIO6E7(uZb%HfooMNkk_XE===O{d_k^askX?yJpeI{q-5D(u>}i1a^kz|TRvkI`^m!o6{72{ zFm+o?6qonr#hZl?R=A^P7uJz$NRLOkLOIp1oMUadxM3#@eZP0=y{q~_sdQ<#d|I;> zD`R9|hpk2&WndI8BhTW3?i7I)*UV6^Np+LbV`vTl>JF>+taCD4tgOvEj?1A7D^3zn zNd5B}g4=dQMR$7XbvK_8{LSYKs_X%x%tQeXABZXc=dxT~iwL`KxKtZnY2kmd+AuU?_5G8M*XQwe*EhRy^qomV z3RlNv-MP2#?H;}LAS>E@+2am^+f;E0V5?WT&Ett!mJNMGPxCpD@mw}#f>vf%c9YN} z*KzslMMlkO0(4KUFKcQ!l2?2>P}|xE3NL)o*w@V`%*9enY{^oqAg3~gyp2{?a%xKw z7tp*%BWRXb^jIeq#S?Tn=#7Lqjv^mxZ5j4xRULcUKRx|kXy7i1%vHGuie|M<4pMHZ zSi-eKYmt;M9t@=N>hKM|wYFusL{NtRTEuhfoC9BSXPd!8ubHZH+4+#C(}uspTo07n z;1KK7{zFkL4>y!)C7$XvIaHFsz>lQAxU-2#$!;e{#?2?jP-RfAZO;2y|^rsBUqxV$~oRjx${KuR_e*LKb64#AK zUu5m}TZjSlxX1?ZBs&I9&1UTI%?eQNfhG#upT7m_E#d&ud_eGlM!;eyS4)83#812E zmzy5NbTfG|{FZ=8xb1RG(2-k9}^R20eeqYFXyg< zn@T66I|+bAMUH|$0@~l{1)k7)mhBG!?b@O^uFI0S)gb_;Pda)heIQg|wXQNXE4yl> zM!_i(9PKzwTq;+O$1y)W7WjX4ZBlPbS)fpI9j15PzUFLZbNg1*2J=FU;P4na%FB3k zdHYt1kx0Zvy9T{CpWKah3`y!ac$vp6ZIsv7OEy6B29gbJHqjeLDX14A!nc3Gm$mQ$ z4qgh1e)b|xIx>-DNu8CriU8&9taK$Tjm+LuC)-p?L|2hI8Vh&Z3(qmUBQmpGXKEZ9RWUGKD7UdwGsXUYp?vp+O|FMS-(09 z!@3FY6+m-N26?9o!G9S*>L;wg6K&lKT+M$Ci1wyFPlh#2cFD50$nz1UhJSo`Zo!3=Z~;!m}XNHNm?FQtyddZ2YQe z9MwQU|NQU_O2Ea>?))!xi zwl>CH7;3^_1 zw9oj=^dfh#9_JG(cd8Qg1eOL(6R>!;EGhdGXSv;G{U+xoz9YtHIq-zrayY)FME zC^g#lA%XMojI-B>Pk=O$@;Wjc!jnn z=sbfk`^nvDwJlq8FCp3tQy~w&UY@;)L>Z^%{EkrLJHloCqKD zMS)>$x_vHObIv?ZNaqA!Wosdk@t<1T@_*6V7XL+ShySP6=F6~P9aR)~gH(5KCTC}; zO55I`717R7v(o!Nw07P#oa;LKyz_vs#L=ksg`g4l(zg$Smhp8A!6%at zf*hxEm7G4EI}fL9F%w++Q=7ZazItVVJ@1`kExY~(iCMceduoAk(%|X!(hp{l#ro^i2$<&n};{-%8vR&--x;o4GN|a5qW8_{!I@s@GKpVjA zVk4ID3b`a+9Uzw~)BkajN1^2GKpa2DK-(buN9^6|HL*}h|FinvtTuIDw%@;7Z4u~V zt$6Wdz+{Fm8%fcgfLnDnV)j-ZuROn*h_`^n6%U2;cQ`P{s(g#(dSObW8i#>5vxtgq?Hf?99oOI+b$lZ~aVl(1kxSw#qv`ruKcY z7pJfre@@&=j2c^_i4K-rm(&S35&eC&X)9wbOS;xN%j3aUvL3Qkp)RL`5sHDJ}83&vHUIqHu)Sq z*_&*|OdVa(j2UGg9>L#li_|@OSZ&xJCJbE!7ROuYZifdVo}|bl-_s0^ab*-R{IQ=(@G2y z04RV50Pz2BtF0_1qM$6=ls-CDsEHExME{VpLw95}3(I846ao^$Y>Q-`Z}H9l^+?0R zTv@(Um8RUiIkek{M1HW%<7}M8hbX{PU)`ec*w048P|^=;;A>zg{kKZ^b*yi`bRAP- zT`;!1ZOmxb2p$rQhBh?EJtzuD=3rvLm(42zY<5FzFtg2>5hNN3r!LMhXp#vhA?@VS zG=5AHl!aDCrww*nFkemnMHn3bDwOJ;lG*a?HJ}$CvA9+P%lDB)Exv+BV~|>41Iv0= zMT3v;5Akl_S>H|TBMtzn#PJrj)-Kz5ICT@_JgF*^PZmoyA_e{|^$aFoElgkDI0N4g zK>%}6EDr=sMCqB5RXe!MuXdGReTjR&oRk$VuLiuug)Y-!b zG+C&La>7X4B{-Y~LuYZlfH^R$Fgc2BA;55Mb`h5+wN=F~7em8RpDsoYaKT|=KrCSG}V zj6pDl8mf4gOQ|FKqf%hdd>{54(Q6#3je9E+JeCG3d#>3RG#`B5}GT~PS7FNv(J|svj(%Z@`9c8ih5oSDyWqE zjJ{SgN#Tz5sA|qFQu)h?3r{}9ap}6#74zlrrh=N^7TFi?EQdI4-8KdgY8P`$>mC_g zp749CmUH~I>!YTi%Ml;vkI^r%$hMi+$#$5%wF!6hw}}u-g~R<&Gt6oL64JK<#A^zw z$Bw%>JQ-yaMu3gjmFJS!T91u$+S5N`WF|uD^qBmzNz>vzHdoO9x zNS*Rc7^5|@_B5!weU537sK?fTHN`h3Q9ScEnwzb!TfGh{p*etr>AeT77>l_8orOmc~PSrlKiuBvT{Vp_S zOKEJ69yMJ{M%BEdHnkpphyjUYou|;Uji=PyuJ^dXT5RnAxny5^+**t2O6ZG)U+zK~ zuJW#>g|r4^Ox2@hw&NOm_Ebu7u#|!J*m=t-180g?k<75`!pX3)bC9qumEI~BAQ6~ zBr;L(KPX0KEW4+zLLg}3k(@`h%gZcQ9%~rGFIs8Z$LbkQf#%XCoB9zAcp1}-d7N&r zqbxXrj%RuY5xjKWM+Hi~zcQ*+&mF6I2J6+IZxWlki1}N2!*5PZ;()(F4Z*w|4wf5g zd2{~;3QJd>X`_^n3^MuJGbPo}`X80|rCiIiC|Ix&1EaT&;7RK_w~+k0F0=g!WwWU& zYPqL1Cx(U=Q!Opo>Tqb{Gv2IA=zR`$o;~*soQnWVUJTXQ&u6eAhe5rL^3l& zRF4+^7*_}stm^LdM~lCh3@Usuzm5@Nk!?GgsEbWDdW2DdHz}A-Anyo<-VU5C)#i9m zxRkKj8x57V*Ve!s^dX}BggV#Tezbu66CY0rwe+zXxFU;)XEEd4Pj8Y%=PU=Skq1R` z;v|_^3A#h|f{^oJ%P9A>Hse$0d1MnsJgJL*P%`kSK`*h2WOv(C#)DHZ0=eq@a^v!a zIKzqciD5qAIdaze5^`80A+jKQ^UMEF#0_tNJG8jH@)$*dVrsF9K~mym6(h2fB5$hs zd^r>dDyzCj^MaVWe-GhLM~cZgijO=z)iAvYpoWg$Z&4>t@m)11AD#wXr24;)1k337 zX~T?Y0H8`-4>}Ef_>2&+fS!+D3@-Uke|uzvGmws4D~$=TheSO^QhF&(?b@A?CKFd< z^FyUF|BVy?SWr)x`s_)>=SjeLM9F8;!^@v2);*xbO>pGoGM${b+GbU#(M~$1ZP z=4pgou5AMD`O_v&&f^#6pVoJ#5S4}wI7DR!2(?1QY8tsi7%ABn zWvVi^xykWqnMJvY%Frk*Qqfkxzjmw@yZvuKGys4K0RWKw-yO3vb2TzGay4SGc5$#z zQ@wInV?z4S;0v%OH>dg_FR;^IRHxB~oHg7VP$f>m8?-U@Y5q1&^ZB&NZS-p`!t4i> z$JJ%tkL{PR(y)8|YILq?iF4eZWu3!V1|dieoOS6?wRob5KGq-0*Qv7%`s%zWJS?6B9h=MIj;k2;zRKw3KHf0Cp<ai4mAs4UL-KVT>^q(zW+pRaGFWtObO0>(?VZu#) zcBwvaUs>w>_BDt#sGQ~V(AS+k@l(|jaDz}!+h?(rwS4fzH0+>crCd#vn?wBJEQ&7{oJgN`Fl zJ^yX{i~FVA3-fn$L;Y?4AEVsW!O_6h%-zhE!PV21mVRt>RF>rk^uNuRWPyhWH!uKz z9QN<5`G02&qk(~yy_Kth0fVDgn!1j|ItQBnaxIr5(#Rzq$T$H67*t)=pLBqnAsfRZ z)y!PdWEhE>{$53oe?*bxXw>{KZ>WBkm#K^W0t=wlQ6rM?9jAUIW|h!>7^^E)1NPthZ*}@qv;C@h&Gg=Nc`I03lT=5HanC7;n|v#&Zu4u} z-&g{o&iNLC+ZWzl-T^bUl0AGQgbLK+b#sLos_M;>Nhlot)pd6q=89~(hNZFmSR>Ml zn$7Z>Tg-Oj;-}5#>F|#Nv*}XJVtKm0Fi%R2p=s&{Zv*9brObIy1+%WH0Ez&E*-{~n zOs;Y8RX-;#^Q8t#IuAC&1#@fh-ci$-<_#rgm8L^_8V^CO;e98(%D1Ag14OO#ygpLx zvU;NhXe8^72e=hva4nyst8(-t_f0p;@}9p|rUN z(W{>LorWs9tipG;q!*l9TrHb(BQZUtX(o$ZP1oJ$h}C)rYXix~nA~@;+C*_I{Hv=a z{YTk>+gP{;gP8GgK2anRNs{@yW!347!lRo;>;Co-%lDZ zG(@vT(sAHzX8GW?FuAb4;!b%?U$584#{m%L&*+%$2+<5kx&xTQm6WqSnRO_;vvX6n z4#P1<9#F__fzuGUl$|CRTCGmZ(il^0P^HDt45t|Nzh8Th^Vj#Nl32B8Hw0q_XK=`j z?R-bzFHoeYifCjQ+UUoB{pkwlL7Pztu#~YT>A{~VbB68=x(7o7NLd%xhx1bkO34@? z2bQcW@gvt83)Bl3Uwcp>!>Onh9xC-5NvMYjy>TjqYVo#B6q0@a!K(5S*39HcaC{UJ zrV{g8(H}O25hDe!)EBECublcoA^~+aUe!qZ?!Ba@92btnO1`?^G64KoRGX{DAOf0l zzfL3OSKt$97T7YnsFYLVdFN0Zl2r_7mx5}0kViG^W8M$8KRh_d#Ro+{vkNpBmL-!c zEAJHxn&}dQ!bYD$E!@YVw2#s^YKdZ9rr{Z)^xFuz?7r~l-F8}71#r;Cz6Ade{%);- zE*XkG+bMzf7C|hnni;l?xz_#rzmD}UTvSR!ipMI>I<=qK5FCEqa?$74qFCBbpeAv5 zd_0PX!y4_LARTyPJ^D5gu!Ku?pQHlYP;Y{EgdxM(DvpP&4;oyZ@eZMcb3VvlXrGmI zmzEvM`K>4uujHIZO0?Tg7UKL{KQ~D?TXyw0Wtd^!wQ4N`A+{TM$(zl@0=QhUGM%+#3JQ$PLm20bLK134Jh`FlY;B@XJ*Hy~I!PeHy#MR2d-sSH~ zRjsY#u)%@h|5Qt4i#AupDx53;#>CWT?y?GDw?-sI2(ygkLKZ)%-4cm6EsOcK{lrT~ zo|Mez-d>4mLw0+;G3^oGX;l$it)5f8#bMm^H}kwwoV8nBt$WefEZ~Q&rIz+#n`Bd! z^kU6h?;q{-WtT^z$`>BY%cm%Ngkws$jMXv+oIX}QhZeurHfaZiK>_q8^Q%cSY- zO{1cu4V)~CD%mGb6zo$6%fjSon+;=i7SXXM#4$`KzmC7z!(G=OhlVL^!flsKWnD7&cjK-@ByL=OkrcYGRAyz(T z@k|nw2>)F+4{vYlPk-AA-YjUW#Vn74XK^MJhoo^GkS1;(TMyECT=gADenndyRy}MI z4Gr*Z+Lw&hc4IO+`blu)D)$3t-(kdOa!rQTxtQPeZ7abF9Y*vBYFY46Gt<8!i&Nc4bW+vBE&g;`=0io_>i*8Y<7py| zv$U3#P0(FEc(5qiIouvS>PwO*?~$&ADbUGT^=AYZfeVaJEb<^Tgx-YQD)UHw%1qI& zGPEH+Jf2}pZaW4&}4IwG4ydrPK{Vhs-jfN2rqkBDaSU+ zIJUHqpP?H$v{aUNxO1O27Kj2veGkU(Qdr1$@ugol$)wGD1i`VYE^L{onQ6UygGcES9d_#yqV0fH>$b7~@9sc6GhN2%-2H5p++Za_3p zMHpTZ_#5F`m(g)mtaTjgA6s4KjQL;JY({=Ni}af09@~OMcF^tzBYHd7GlVxZp4L|I z3hZl+x?d%dxs|lFG$PJ!fipg+ryURqX=)UC6K=E!s0J;3Klu8_%(B7fTw$|$7sVBo z=usaLY`s(I>3{INhAUg0WED$NjcVzuHKkyr zao+P&DtT?%aT$oE_D_H_G0SRhwBYQrIThM9UZ|TuEOq^&%{}%nn-{l^ z?F0=2(Sv6y0IX`VjUOs=t@hm!%}aEANZ4uk*6?ymIxJ5LIummTI1=q3g|WCnw^f}bL{Q1}Fk{|V!BbN+sdyF;`kknPYSyeTr~w0}{8 z#!hrOk7~dxjou)=KO5{c3dcJlCC=)- zEpFB5iC0n%WKU!dM?D^#pZ>d$Lmk<7ed2+J2n$=LH97+HS9!Xjl%`bwHaN zcFCsD4}2|P%loWS?krY)8SAD{RZT!3IjyInn;O zeigHgi?wC`As1$iAb!$PEOhZ0uJ?^Dbt=YvLF|JJq2zDIR(b6h$`1{NHjEHt%7R_& zCNPK>Gn5N{_9tA1f(2XJwE~6B5#D|=b^Ost8YZlX1w7fJMDLZFHQ`xf1-S@(N+lPu zz}3Ahde`0g7u`M^SJAn#+xVlHMrbO%gO3LLwJm-BAGYDdABMy7**XugG-a&J<s zX?D7AvFfD_nWVFX+%$Q1@`ze@lAa;B&LV79)D8`!MFPow+0ROCZ&x6$IK)jpHjKT< z*?8HS!)PuS2NQwb&t~LkacMj!_Em>Gv+#1TUhyV;KYMv%d!i>LnD|C9T5oX6g?rhwa)HWvq)94HCbQ;7Bj77dbyb3!BMy9 z`zrKh^oxkVcOOP0tCcuH=lQh|`d4i!S4 zQ970=2ge;iXg!Iq{8% zQ$@GJ!N4iO`IqL6ol|!v-72ESM|U&r8Avtp)XH}+X%102b|5AFGRntJAJv`sAD#>w zAj;9%pI<<|H&A!MXh{bop?MoJzl(E1{@as5dG*f&IUgiHHp033l`iCm1!lWa|#Zpp1;QoB2@`*$$ncu#|1}?&M={$798t5K0Lr`R}_ZJ z#DV5^QF)~e&-Z%DmuPdTZ8D0DaZ@q>|Jpk1Ca*`~EHdA5b29cp(r zK#fR(T^qSSZhs{63lSgw*vQq((rC3wFvcRIFl>vr>YnIZvckQ@odovo@7&FwY8h^P z&$d#SFV%DrUoJ>>hHVj(Zg_biR~E!+HEF=O$YJrh{Ik9S28VM0_jiMTJ&jz^ZXQ!1 z0RUwz008=bIgOY&*xUc}F!J{-GO6?Bu-=UFwHW|z5Yp#-Ok*|Il*hbJ%;?l&td+dn zN*i9IXd2brH1dl=+UY&~z7vrv;Px|5e6;m4b>y;dYVY_OS{IyfR| zx~;QPDxI!mk~%r!!kZxHu+iwa>A<89jd~@SPL>AoWXcA60!jP+pGMi`AQ z^*lV=;+e->(m>U0UO)pre2asQWoLCpfq?Dipl>_UhvCCb>qsb-g0Ir+<1g6$5k$sAMl9ltEWe`e?2_HF;Ms@k|21$%Ml6wIX^<^tf2C;fC5*GsUakA_> znIJm9JrL2L`{I%3z^y{I)VbaBT^atu+0gb~#)$k7bNS^CXLwctC47WH3OdAz&!~}M z+wll+3nRRNUvDy$@a62CdXxq&Kw*q}jM6ZXUFVxszYA0pRe=s>AoQ% zXGclqh!t(H8iv+&ihUGxg>H2i4WdohUK>lyy!&ENu=v)zOswT&WaKQDqA&;@&-swZ zaIi3+9eBKxTs!%gDCXq?fzEZuD1!%L`ea(=YlXqzhJVt`v1#RkC5=db{_G)6vO_)! z+Bz-_qEAhtw0_L`gi)PSWtZ{^`RE8Y1DCzN0fT?j&LABmLwF26*na z8rH*_HXi+Kp?(V~!r6PomtPq#bh=|G*j)vt-0V#E?F4q|+{LPK3*z8h=B%!sI}_yo zn6fYlhYG~dfjNnI;~Ld$L$@6s5N4?-yNj>*CFm$9iw9(iF%l8bO~RyLW~#$mdcJZ$ zM!zu2QUK2gi|i`?ww)OAz⚩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

    SF3*%0+D3jiw!Rd8_ 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 E0FJf?DgXcg literal 0 HcmV?d00001 diff --git a/week-0/day-3/my_todo_app/venvironment/share/python-wheels/webencodings-0.5-py2.py3-none-any.whl b/week-0/day-3/my_todo_app/venvironment/share/python-wheels/webencodings-0.5-py2.py3-none-any.whl new file mode 100644 index 0000000000000000000000000000000000000000..9bbaed0c4f2e61af4b2bd830b59b96d98a2557b1 GIT binary patch literal 11646 zcma)?bx>Sgm+l*P_YQ&J8XSVVySr-|m&V;8Sa5fD3l=Ou(BST_!5xAP-%QQC^YY#M z-g{2%>QnoVU++3+?X}l>>QR(|g2n~_0Puhf=|Fj0u%DP1BmjU04FJ%-&bpczo7tM! znSyLBoIWx!urru~oWLJJw&r$>qGBo{%2JA|QVQ}6j!s}3l@<9VChU$|m5f6nObEzY zTUkhsMrm0QON``*LqbfX{%Gsa@z(Y}eLID^F@~Bl`Z8>u>-*=?^P1?)`re;(jYI5< zjY1ji-a(o!+~_`WwvGq~K1|E?Q7o3$D}24tr5z709c>TN23Zr-qM&yN@6Kx@98%O~ zkQ4}D)pw=`IU5QuZLUk7wGhvvtIW31OC2n|g0m-_u0PBKT5~0csK+8T^=be#nT z!G;U%53PyyFDP8vQFHhrc)7VA#NgvqOiip9Qi1(xe3TU7=LS0$y3IXEv&%8-JEqE* zodkizNdpWJTM1t+6ivx8K0~A-lE;4NqC%=diK<%O1j#nsv6)4)(knsoJUqGBiqeS(_Ux+hWDg*kd6>CAWY1@83!9Oy8fr2K&Jip5{$4l>RZ^cjd zQxV@gY$+cC&(+kdd1>{rvw!OT0@&)wH_aJT*(J?wD$AVCWEz`3|3s^>S@WmG5en&2 z$(rJk-iMTaFKAJln`V`U+5jmLJy7fx=IrNfjE?cCH?qk4^ax7$GIr|ZTxei

    ." +) + +no_cache = partial( + Option, + "--no-cache-dir", + dest="cache_dir", + action="store_false", + help="Disable the cache.", +) + +no_deps = partial( + Option, + '--no-deps', '--no-dependencies', + dest='ignore_dependencies', + action='store_true', + default=False, + help="Don't install package dependencies.") + +build_dir = partial( + Option, + '-b', '--build', '--build-dir', '--build-directory', + dest='build_dir', + metavar='dir', + help='Directory to unpack packages into and build in.' +) + +ignore_requires_python = partial( + Option, + '--ignore-requires-python', + dest='ignore_requires_python', + action='store_true', + help='Ignore the Requires-Python information.') + +install_options = partial( + Option, + '--install-option', + dest='install_options', + action='append', + metavar='options', + help="Extra arguments to be supplied to the setup.py install " + "command (use like --install-option=\"--install-scripts=/usr/local/" + "bin\"). Use multiple --install-option options to pass multiple " + "options to setup.py install. If you are using an option with a " + "directory path, be sure to use absolute path.") + +global_options = partial( + Option, + '--global-option', + dest='global_options', + action='append', + metavar='options', + help="Extra global options to be supplied to the setup.py " + "call before the install command.") + +no_clean = partial( + Option, + '--no-clean', + action='store_true', + default=False, + help="Don't clean up build directories.") + +pre = partial( + Option, + '--pre', + action='store_true', + default=False, + help="Include pre-release and development versions. By default, " + "pip only finds stable versions.") + +disable_pip_version_check = partial( + Option, + "--disable-pip-version-check", + dest="disable_pip_version_check", + action="store_true", + default=True, + help="Don't periodically check PyPI to determine whether a new version " + "of pip is available for download. Implied with --no-index.") + +# Deprecated, Remove later +always_unzip = partial( + Option, + '-Z', '--always-unzip', + dest='always_unzip', + action='store_true', + help=SUPPRESS_HELP, +) + + +def _merge_hash(option, opt_str, value, parser): + """Given a value spelled "algo:digest", append the digest to a list + pointed to in a dict by the algo name.""" + if not parser.values.hashes: + parser.values.hashes = {} + try: + algo, digest = value.split(':', 1) + except ValueError: + parser.error('Arguments to %s must be a hash name ' + 'followed by a value, like --hash=sha256:abcde...' % + opt_str) + if algo not in STRONG_HASHES: + parser.error('Allowed hash algorithms for %s are %s.' % + (opt_str, ', '.join(STRONG_HASHES))) + parser.values.hashes.setdefault(algo, []).append(digest) + + +hash = partial( + Option, + '--hash', + # Hash values eventually end up in InstallRequirement.hashes due to + # __dict__ copying in process_line(). + dest='hashes', + action='callback', + callback=_merge_hash, + type='string', + help="Verify that the package's archive matches this " + 'hash before installing. Example: --hash=sha256:abcdef...') + + +require_hashes = partial( + Option, + '--require-hashes', + dest='require_hashes', + action='store_true', + default=False, + help='Require a hash to check each requirement against, for ' + 'repeatable installs. This option is implied when any package in a ' + 'requirements file has a --hash option.') + + +########## +# groups # +########## + +general_group = { + 'name': 'General Options', + 'options': [ + help_, + isolated_mode, + require_virtualenv, + verbose, + version, + quiet, + log, + no_input, + proxy, + retries, + timeout, + default_vcs, + skip_requirements_regex, + exists_action, + trusted_host, + cert, + client_cert, + cache_dir, + no_cache, + disable_pip_version_check, + ] +} + +non_deprecated_index_group = { + 'name': 'Package Index Options', + 'options': [ + index_url, + extra_index_url, + no_index, + find_links, + process_dependency_links, + ] +} + +index_group = { + 'name': 'Package Index Options (including deprecated options)', + 'options': non_deprecated_index_group['options'] + [ + allow_external, + allow_all_external, + no_allow_external, + allow_unsafe, + no_allow_unsafe, + ] +} diff --git a/week-0/day-3/venv/lib/python3.6/site-packages/pip/commands/__init__.py b/week-0/day-3/venv/lib/python3.6/site-packages/pip/commands/__init__.py new file mode 100644 index 00000000..62c64ebe --- /dev/null +++ b/week-0/day-3/venv/lib/python3.6/site-packages/pip/commands/__init__.py @@ -0,0 +1,86 @@ +""" +Package containing all pip commands +""" +from __future__ import absolute_import + +from pip.commands.completion import CompletionCommand +from pip.commands.download import DownloadCommand +from pip.commands.freeze import FreezeCommand +from pip.commands.hash import HashCommand +from pip.commands.help import HelpCommand +from pip.commands.list import ListCommand +from pip.commands.check import CheckCommand +from pip.commands.search import SearchCommand +from pip.commands.show import ShowCommand +from pip.commands.install import InstallCommand +from pip.commands.uninstall import UninstallCommand +from pip.commands.wheel import WheelCommand + + +commands_dict = { + CompletionCommand.name: CompletionCommand, + FreezeCommand.name: FreezeCommand, + HashCommand.name: HashCommand, + HelpCommand.name: HelpCommand, + SearchCommand.name: SearchCommand, + ShowCommand.name: ShowCommand, + InstallCommand.name: InstallCommand, + UninstallCommand.name: UninstallCommand, + DownloadCommand.name: DownloadCommand, + ListCommand.name: ListCommand, + CheckCommand.name: CheckCommand, + WheelCommand.name: WheelCommand, +} + + +commands_order = [ + InstallCommand, + DownloadCommand, + UninstallCommand, + FreezeCommand, + ListCommand, + ShowCommand, + CheckCommand, + SearchCommand, + WheelCommand, + HashCommand, + CompletionCommand, + HelpCommand, +] + + +def get_summaries(ordered=True): + """Yields sorted (command name, command summary) tuples.""" + + if ordered: + cmditems = _sort_commands(commands_dict, commands_order) + else: + cmditems = commands_dict.items() + + for name, command_class in cmditems: + yield (name, command_class.summary) + + +def get_similar_commands(name): + """Command name auto-correct.""" + from difflib import get_close_matches + + name = name.lower() + + close_commands = get_close_matches(name, commands_dict.keys()) + + if close_commands: + return close_commands[0] + else: + return False + + +def _sort_commands(cmddict, order): + def keyfn(key): + try: + return order.index(key[1]) + except ValueError: + # unordered items should come last + return 0xff + + return sorted(cmddict.items(), key=keyfn) diff --git a/week-0/day-3/venv/lib/python3.6/site-packages/pip/commands/__pycache__/__init__.cpython-36.pyc b/week-0/day-3/venv/lib/python3.6/site-packages/pip/commands/__pycache__/__init__.cpython-36.pyc new file mode 100644 index 0000000000000000000000000000000000000000..2edbd1b75ff76ab9a907640542ab988d8840ce91 GIT binary patch literal 2028 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 literal 0 HcmV?d00001 diff --git a/week-0/day-3/venv/lib/python3.6/site-packages/pip/commands/__pycache__/hash.cpython-36.pyc b/week-0/day-3/venv/lib/python3.6/site-packages/pip/commands/__pycache__/hash.cpython-36.pyc new file mode 100644 index 0000000000000000000000000000000000000000..d8fdf894696c4e3dd3289bd58387bfab4d086d94 GIT binary patch literal 1923 zcmZ8hUylxH9PS{m07Jtl;%|_ z^#Rzt2W6he1qao6G#($0LD`Zb=20@Qi|1;{O#i$4KOc_2fAT2WzkjrE`bSU3hX;?F z$)lqL&pv&ujiPRWB1lL%flMi6$sj{3bhsV5Z^)E#hr6%+&}*X({WruWVFzOEn63R- z%{M_U-*y9dU{*oYK^)9sEhwj;Wn~g)K@}&@;~A{TWS;&eM%~8$$y_KABykZ;L{KZi zgBPiu2YY+X_OyWQQXJQ*6uBt03Z`i$0$m2Y1bZc79ZxdRoRk(y$62N}2OAqtSYF<( zWH}3dEi0Xtg?bj;!4vKUqtR%2?KD{Q6bgg=Uyy2)&<#$AR~N<(4D|yDO*CDRHCwP1 zU9q=NFDtUJ7B;7xaZ3Y!+C}UZo_5ysBC!64*ZBC04)@V_&9F`o$%7@^i<3{&O6mnx|Cx18DQ0-dbWf}0BE;^vJe>lu3EC|!O$@_7fKs1nU`rIlyTz((>ER$ z)40wwfFrU>Vs68(aa3IiDSen3KZ?>K)lp>pBy zu~b5u^8mk)8aIGjG?Qgr4J~6Ukxh*q%b7Cl`3or6P820stW*^JMgINjhR&-SRa)&$ z>NMkf>R7#;)X6P0H6v*&Ufn>7M%62M4u1VH40Qnnq35VeZOYEx0bO3$2iHwej!v^l zkUo4I7?|h-80sO26;l_146>k_0VP1AwvWh)E}RqV<<%8?NS<9j0V)?Brz?A9X&>d9 zt!+wo=b$I6`!D=CF|l#P}DXE0_bd0 zo4K?LNG*5X#|Hd>d?37ta{+{RqbM(VouS@~qT@QwHY;8f@iGCkjRxbixp=CE>qxeo z$j|ZL{SCQ^$g(JU7uk@?k6>M5fK8nZKv6vqzGp*-@UmX7SxFdJ@j<2#oHM30G#ICA z_UH8zrYW}FngU0cwY6ev3OsF}05c1FWh0Bn!BYb4u%F17{6fI)tg+Rs<(09}wJZXC z+D$y2L9?`16#_moOim7luCdEXK+hlC(z=cFWr$Gx;gb zcA!Z{lURvOlSm7#1GK_TsB0A^C0qkdnVAlnYn^7QO`&mX<|E7x+_0&e_BNfF&_6Z> sDZfDD6%^PsO?2;N(o|kkbpD;TbnfAm()4DJ`4nEr4Bvs(wFcMz1LxoL8~^|S literal 0 HcmV?d00001 diff --git a/week-0/day-3/venv/lib/python3.6/site-packages/pip/commands/__pycache__/help.cpython-36.pyc b/week-0/day-3/venv/lib/python3.6/site-packages/pip/commands/__pycache__/help.cpython-36.pyc new file mode 100644 index 0000000000000000000000000000000000000000..bd3e8282508bf3865df6420fd4db034d74547ddf GIT binary patch literal 1074 zcmZuwy>8nu5ay5mqBu?l!)bsHLeLBz;sj`cE5_&nbB3tr{(%grhxL9uQh8dHJW527 z%d$tbJIIBIGp60)r@`QQIE2qyYu~k$xg49=%_3l2fv8uYI0`XCAz?VAjD!}Wq0Ow& zVK#G~5n#K3?djbco)+tj^X~9_{uq1*PjHvZV7vlX+A^+r*AJR?QpkJ~T&zzo=ZF7~ z>W`sj&DsII3o-yv&!8BF8bQ4lRFDPKXx6HM=Mh@ipHbGaP)YB7d5)2JN^6L|pxUnK zy(`n&s_i9SIE>bI7ftZOtsVKTcBgQ++UcStbfAPgPTksF;wAopYxwdAEz!cOy{R|d zS*~;ToLh;33siY;bJ2(;<5G7fyo^*Lk~Egl=4jrjvimH5%r;dCj!)F_yd&b-hzGO0 z3Iva{a^) zej$^rj7$T1JK9n_z0+=9lu4dJUt&2?TZz4~U{MweuI)+1mC{tGiFVf%ej<4Y0DsTV zN>Q8vx6@ITr0i5ZsHagieq&sXY$%@@)P6D3R90CVLe)!92p^p^8((7ItnFv3v}MwW43Cc*3=- zDj0t`lScsCkl#`-jL!k(f+!!92TUwtr12YUK)kEUN&<#7zlYv8JsHJ{uP-UhkgmGW lHb?wv%vaTIy3r)s0yPDc23dO-tE*g^AyS4%iyYt<{Revc7L5P^ literal 0 HcmV?d00001 diff --git a/week-0/day-3/venv/lib/python3.6/site-packages/pip/commands/__pycache__/install.cpython-36.pyc b/week-0/day-3/venv/lib/python3.6/site-packages/pip/commands/__pycache__/install.cpython-36.pyc new file mode 100644 index 0000000000000000000000000000000000000000..15afb732fe5544d8aab0a782af3919d05b362af2 GIT binary patch literal 10221 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 literal 0 HcmV?d00001 diff --git a/week-0/day-3/venv/lib/python3.6/site-packages/pip/commands/__pycache__/search.cpython-36.pyc b/week-0/day-3/venv/lib/python3.6/site-packages/pip/commands/__pycache__/search.cpython-36.pyc new file mode 100644 index 0000000000000000000000000000000000000000..0b05b48eaef541c8c4043506ab3f1158de40a430 GIT binary patch literal 4164 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 SK(0Lo-Vz|WpjTeCxBmrHr8!Rk literal 0 HcmV?d00001 diff --git a/week-0/day-3/venv/lib/python3.6/site-packages/pip/commands/__pycache__/uninstall.cpython-36.pyc b/week-0/day-3/venv/lib/python3.6/site-packages/pip/commands/__pycache__/uninstall.cpython-36.pyc new file mode 100644 index 0000000000000000000000000000000000000000..9f5cab42986527895a3ace9b0319126261e45f6b GIT binary patch literal 2560 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 K#TPTXY5xb4WJu8f literal 0 HcmV?d00001 diff --git a/week-0/day-3/venv/lib/python3.6/site-packages/pip/commands/check.py b/week-0/day-3/venv/lib/python3.6/site-packages/pip/commands/check.py new file mode 100644 index 00000000..70458adf --- /dev/null +++ b/week-0/day-3/venv/lib/python3.6/site-packages/pip/commands/check.py @@ -0,0 +1,39 @@ +import logging + +from pip.basecommand import Command +from pip.operations.check import check_requirements +from pip.utils import get_installed_distributions + + +logger = logging.getLogger(__name__) + + +class CheckCommand(Command): + """Verify installed packages have compatible dependencies.""" + name = 'check' + usage = """ + %prog [options]""" + summary = 'Verify installed packages have compatible dependencies.' + + def run(self, options, args): + dists = get_installed_distributions(local_only=False, skip=()) + missing_reqs_dict, incompatible_reqs_dict = check_requirements(dists) + + for dist in dists: + key = '%s==%s' % (dist.project_name, dist.version) + + for requirement in missing_reqs_dict.get(key, []): + logger.info( + "%s %s requires %s, which is not installed.", + dist.project_name, dist.version, requirement.project_name) + + for requirement, actual in incompatible_reqs_dict.get(key, []): + logger.info( + "%s %s has requirement %s, but you have %s %s.", + dist.project_name, dist.version, requirement, + actual.project_name, actual.version) + + if missing_reqs_dict or incompatible_reqs_dict: + return 1 + else: + logger.info("No broken requirements found.") diff --git a/week-0/day-3/venv/lib/python3.6/site-packages/pip/commands/completion.py b/week-0/day-3/venv/lib/python3.6/site-packages/pip/commands/completion.py new file mode 100644 index 00000000..66e41a67 --- /dev/null +++ b/week-0/day-3/venv/lib/python3.6/site-packages/pip/commands/completion.py @@ -0,0 +1,81 @@ +from __future__ import absolute_import + +import sys +from pip.basecommand import Command + +BASE_COMPLETION = """ +# pip %(shell)s completion start%(script)s# pip %(shell)s completion end +""" + +COMPLETION_SCRIPTS = { + 'bash': """ +_pip_completion() +{ + COMPREPLY=( $( COMP_WORDS="${COMP_WORDS[*]}" \\ + COMP_CWORD=$COMP_CWORD \\ + PIP_AUTO_COMPLETE=1 $1 ) ) +} +complete -o default -F _pip_completion pip +""", 'zsh': """ +function _pip_completion { + local words cword + read -Ac words + read -cn cword + reply=( $( COMP_WORDS="$words[*]" \\ + COMP_CWORD=$(( cword-1 )) \\ + PIP_AUTO_COMPLETE=1 $words[1] ) ) +} +compctl -K _pip_completion pip +""", 'fish': """ +function __fish_complete_pip + set -lx COMP_WORDS (commandline -o) "" + set -lx COMP_CWORD (math (contains -i -- (commandline -t) $COMP_WORDS)-1) + set -lx PIP_AUTO_COMPLETE 1 + string split \ -- (eval $COMP_WORDS[1]) +end +complete -fa "(__fish_complete_pip)" -c pip +"""} + + +class CompletionCommand(Command): + """A helper command to be used for command completion.""" + name = 'completion' + summary = 'A helper command used for command completion.' + + def __init__(self, *args, **kw): + super(CompletionCommand, self).__init__(*args, **kw) + + cmd_opts = self.cmd_opts + + cmd_opts.add_option( + '--bash', '-b', + action='store_const', + const='bash', + dest='shell', + help='Emit completion code for bash') + cmd_opts.add_option( + '--zsh', '-z', + action='store_const', + const='zsh', + dest='shell', + help='Emit completion code for zsh') + cmd_opts.add_option( + '--fish', '-f', + action='store_const', + const='fish', + dest='shell', + help='Emit completion code for fish') + + self.parser.insert_option_group(0, cmd_opts) + + def run(self, options, args): + """Prints the completion code of the given shell""" + shells = COMPLETION_SCRIPTS.keys() + shell_options = ['--' + shell for shell in sorted(shells)] + if options.shell in shells: + script = COMPLETION_SCRIPTS.get(options.shell, '') + print(BASE_COMPLETION % {'script': script, 'shell': options.shell}) + else: + sys.stderr.write( + 'ERROR: You must pass %s\n' % ' or '.join(shell_options) + ) diff --git a/week-0/day-3/venv/lib/python3.6/site-packages/pip/commands/download.py b/week-0/day-3/venv/lib/python3.6/site-packages/pip/commands/download.py new file mode 100644 index 00000000..4bc06408 --- /dev/null +++ b/week-0/day-3/venv/lib/python3.6/site-packages/pip/commands/download.py @@ -0,0 +1,212 @@ +from __future__ import absolute_import + +import logging +import os + +from pip.exceptions import CommandError +from pip.index import FormatControl +from pip.req import RequirementSet +from pip.basecommand import RequirementCommand +from pip import cmdoptions +from pip.utils import ensure_dir, normalize_path +from pip.utils.build import BuildDirectory +from pip.utils.filesystem import check_path_owner + + +logger = logging.getLogger(__name__) + + +class DownloadCommand(RequirementCommand): + """ + Download packages from: + + - PyPI (and other indexes) using requirement specifiers. + - VCS project urls. + - Local project directories. + - Local or remote source archives. + + pip also supports downloading from "requirements files", which provide + an easy way to specify a whole environment to be downloaded. + """ + name = 'download' + + usage = """ + %prog [options] [package-index-options] ... + %prog [options] -r [package-index-options] ... + %prog [options] [-e] ... + %prog [options] [-e] ... + %prog [options] ...""" + + summary = 'Download packages.' + + def __init__(self, *args, **kw): + super(DownloadCommand, self).__init__(*args, **kw) + + cmd_opts = self.cmd_opts + + cmd_opts.add_option(cmdoptions.constraints()) + cmd_opts.add_option(cmdoptions.editable()) + cmd_opts.add_option(cmdoptions.requirements()) + cmd_opts.add_option(cmdoptions.build_dir()) + cmd_opts.add_option(cmdoptions.no_deps()) + cmd_opts.add_option(cmdoptions.global_options()) + cmd_opts.add_option(cmdoptions.no_binary()) + cmd_opts.add_option(cmdoptions.only_binary()) + cmd_opts.add_option(cmdoptions.src()) + cmd_opts.add_option(cmdoptions.pre()) + cmd_opts.add_option(cmdoptions.no_clean()) + cmd_opts.add_option(cmdoptions.require_hashes()) + + cmd_opts.add_option( + '-d', '--dest', '--destination-dir', '--destination-directory', + dest='download_dir', + metavar='dir', + default=os.curdir, + help=("Download packages into ."), + ) + + cmd_opts.add_option( + '--platform', + dest='platform', + metavar='platform', + default=None, + help=("Only download wheels compatible with . " + "Defaults to the platform of the running system."), + ) + + cmd_opts.add_option( + '--python-version', + dest='python_version', + metavar='python_version', + default=None, + help=("Only download wheels compatible with Python " + "interpreter version . If not specified, then the " + "current system interpreter minor version is used. A major " + "version (e.g. '2') can be specified to match all " + "minor revs of that major version. A minor version " + "(e.g. '34') can also be specified."), + ) + + cmd_opts.add_option( + '--implementation', + dest='implementation', + metavar='implementation', + default=None, + help=("Only download wheels compatible with Python " + "implementation , e.g. 'pp', 'jy', 'cp', " + " or 'ip'. If not specified, then the current " + "interpreter implementation is used. Use 'py' to force " + "implementation-agnostic wheels."), + ) + + cmd_opts.add_option( + '--abi', + dest='abi', + metavar='abi', + default=None, + help=("Only download wheels compatible with Python " + "abi , e.g. 'pypy_41'. If not specified, then the " + "current interpreter abi tag is used. Generally " + "you will need to specify --implementation, " + "--platform, and --python-version when using " + "this option."), + ) + + index_opts = cmdoptions.make_option_group( + cmdoptions.non_deprecated_index_group, + self.parser, + ) + + self.parser.insert_option_group(0, index_opts) + self.parser.insert_option_group(0, cmd_opts) + + def run(self, options, args): + options.ignore_installed = True + + if options.python_version: + python_versions = [options.python_version] + else: + python_versions = None + + dist_restriction_set = any([ + options.python_version, + options.platform, + options.abi, + options.implementation, + ]) + binary_only = FormatControl(set(), set([':all:'])) + if dist_restriction_set and options.format_control != binary_only: + raise CommandError( + "--only-binary=:all: must be set and --no-binary must not " + "be set (or must be set to :none:) when restricting platform " + "and interpreter constraints using --python-version, " + "--platform, --abi, or --implementation." + ) + + options.src_dir = os.path.abspath(options.src_dir) + options.download_dir = normalize_path(options.download_dir) + + ensure_dir(options.download_dir) + + with self._build_session(options) as session: + finder = self._build_package_finder( + options=options, + session=session, + platform=options.platform, + python_versions=python_versions, + abi=options.abi, + implementation=options.implementation, + ) + build_delete = (not (options.no_clean or options.build_dir)) + if options.cache_dir and not check_path_owner(options.cache_dir): + logger.warning( + "The directory '%s' or its parent directory is not owned " + "by the current user and caching wheels has been " + "disabled. check the permissions and owner of that " + "directory. If executing pip with sudo, you may want " + "sudo's -H flag.", + options.cache_dir, + ) + options.cache_dir = None + + with BuildDirectory(options.build_dir, + delete=build_delete) as build_dir: + + requirement_set = RequirementSet( + build_dir=build_dir, + src_dir=options.src_dir, + download_dir=options.download_dir, + ignore_installed=True, + ignore_dependencies=options.ignore_dependencies, + session=session, + isolated=options.isolated_mode, + require_hashes=options.require_hashes + ) + self.populate_requirement_set( + requirement_set, + args, + options, + finder, + session, + self.name, + None + ) + + if not requirement_set.has_requirements: + return + + requirement_set.prepare_files(finder) + + downloaded = ' '.join([ + req.name for req in requirement_set.successfully_downloaded + ]) + if downloaded: + logger.info( + 'Successfully downloaded %s', downloaded + ) + + # Clean up + if not options.no_clean: + requirement_set.cleanup_files() + + return requirement_set diff --git a/week-0/day-3/venv/lib/python3.6/site-packages/pip/commands/freeze.py b/week-0/day-3/venv/lib/python3.6/site-packages/pip/commands/freeze.py new file mode 100644 index 00000000..c1987961 --- /dev/null +++ b/week-0/day-3/venv/lib/python3.6/site-packages/pip/commands/freeze.py @@ -0,0 +1,87 @@ +from __future__ import absolute_import + +import sys + +import pip +from pip.compat import stdlib_pkgs +from pip.basecommand import Command +from pip.operations.freeze import freeze +from pip.wheel import WheelCache + + +DEV_PKGS = ('pip', 'setuptools', 'distribute', 'wheel') + + +class FreezeCommand(Command): + """ + Output installed packages in requirements format. + + packages are listed in a case-insensitive sorted order. + """ + name = 'freeze' + usage = """ + %prog [options]""" + summary = 'Output installed packages in requirements format.' + log_streams = ("ext://sys.stderr", "ext://sys.stderr") + + def __init__(self, *args, **kw): + super(FreezeCommand, self).__init__(*args, **kw) + + self.cmd_opts.add_option( + '-r', '--requirement', + dest='requirements', + action='append', + default=[], + metavar='file', + help="Use the order in the given requirements file and its " + "comments when generating output. This option can be " + "used multiple times.") + self.cmd_opts.add_option( + '-f', '--find-links', + dest='find_links', + action='append', + default=[], + metavar='URL', + help='URL for finding packages, which will be added to the ' + 'output.') + self.cmd_opts.add_option( + '-l', '--local', + dest='local', + action='store_true', + default=False, + help='If in a virtualenv that has global access, do not output ' + 'globally-installed packages.') + self.cmd_opts.add_option( + '--user', + dest='user', + action='store_true', + default=False, + help='Only output packages installed in user-site.') + self.cmd_opts.add_option( + '--all', + dest='freeze_all', + action='store_true', + help='Do not skip these packages in the output:' + ' %s' % ', '.join(DEV_PKGS)) + + self.parser.insert_option_group(0, self.cmd_opts) + + def run(self, options, args): + format_control = pip.index.FormatControl(set(), set()) + wheel_cache = WheelCache(options.cache_dir, format_control) + skip = set(stdlib_pkgs) + if not options.freeze_all: + skip.update(DEV_PKGS) + + freeze_kwargs = dict( + requirement=options.requirements, + find_links=options.find_links, + local_only=options.local, + user_only=options.user, + skip_regex=options.skip_requirements_regex, + isolated=options.isolated_mode, + wheel_cache=wheel_cache, + skip=skip) + + for line in freeze(**freeze_kwargs): + sys.stdout.write(line + '\n') diff --git a/week-0/day-3/venv/lib/python3.6/site-packages/pip/commands/hash.py b/week-0/day-3/venv/lib/python3.6/site-packages/pip/commands/hash.py new file mode 100644 index 00000000..27cca0bf --- /dev/null +++ b/week-0/day-3/venv/lib/python3.6/site-packages/pip/commands/hash.py @@ -0,0 +1,57 @@ +from __future__ import absolute_import + +import hashlib +import logging +import sys + +from pip.basecommand import Command +from pip.status_codes import ERROR +from pip.utils import read_chunks +from pip.utils.hashes import FAVORITE_HASH, STRONG_HASHES + + +logger = logging.getLogger(__name__) + + +class HashCommand(Command): + """ + Compute a hash of a local package archive. + + These can be used with --hash in a requirements file to do repeatable + installs. + + """ + name = 'hash' + usage = '%prog [options] ...' + summary = 'Compute hashes of package archives.' + + def __init__(self, *args, **kw): + super(HashCommand, self).__init__(*args, **kw) + self.cmd_opts.add_option( + '-a', '--algorithm', + dest='algorithm', + choices=STRONG_HASHES, + action='store', + default=FAVORITE_HASH, + help='The hash algorithm to use: one of %s' % + ', '.join(STRONG_HASHES)) + self.parser.insert_option_group(0, self.cmd_opts) + + def run(self, options, args): + if not args: + self.parser.print_usage(sys.stderr) + return ERROR + + algorithm = options.algorithm + for path in args: + logger.info('%s:\n--hash=%s:%s', + path, algorithm, _hash_of_file(path, algorithm)) + + +def _hash_of_file(path, algorithm): + """Return the hash digest of a file.""" + with open(path, 'rb') as archive: + hash = hashlib.new(algorithm) + for chunk in read_chunks(archive): + hash.update(chunk) + return hash.hexdigest() diff --git a/week-0/day-3/venv/lib/python3.6/site-packages/pip/commands/help.py b/week-0/day-3/venv/lib/python3.6/site-packages/pip/commands/help.py new file mode 100644 index 00000000..11722f1e --- /dev/null +++ b/week-0/day-3/venv/lib/python3.6/site-packages/pip/commands/help.py @@ -0,0 +1,35 @@ +from __future__ import absolute_import + +from pip.basecommand import Command, SUCCESS +from pip.exceptions import CommandError + + +class HelpCommand(Command): + """Show help for commands""" + name = 'help' + usage = """ + %prog """ + summary = 'Show help for commands.' + + def run(self, options, args): + from pip.commands import commands_dict, get_similar_commands + + try: + # 'pip help' with no args is handled by pip.__init__.parseopt() + cmd_name = args[0] # the command we need help for + except IndexError: + return SUCCESS + + if cmd_name not in commands_dict: + guess = get_similar_commands(cmd_name) + + msg = ['unknown command "%s"' % cmd_name] + if guess: + msg.append('maybe you meant "%s"' % guess) + + raise CommandError(' - '.join(msg)) + + command = commands_dict[cmd_name]() + command.parser.print_help() + + return SUCCESS diff --git a/week-0/day-3/venv/lib/python3.6/site-packages/pip/commands/install.py b/week-0/day-3/venv/lib/python3.6/site-packages/pip/commands/install.py new file mode 100644 index 00000000..39292b11 --- /dev/null +++ b/week-0/day-3/venv/lib/python3.6/site-packages/pip/commands/install.py @@ -0,0 +1,455 @@ +from __future__ import absolute_import + +import logging +import operator +import os +import tempfile +import shutil +import warnings +try: + import wheel +except ImportError: + wheel = None + +from pip.req import RequirementSet +from pip.basecommand import RequirementCommand +from pip.locations import virtualenv_no_global, distutils_scheme +from pip.exceptions import ( + InstallationError, CommandError, PreviousBuildDirError, +) +from pip import cmdoptions +from pip.utils import ensure_dir, get_installed_version +from pip.utils.build import BuildDirectory +from pip.utils.deprecation import RemovedInPip10Warning +from pip.utils.filesystem import check_path_owner +from pip.wheel import WheelCache, WheelBuilder + +from pip.locations import running_under_virtualenv + +logger = logging.getLogger(__name__) + + +class InstallCommand(RequirementCommand): + """ + Install packages from: + + - PyPI (and other indexes) using requirement specifiers. + - VCS project urls. + - Local project directories. + - Local or remote source archives. + + pip also supports installing from "requirements files", which provide + an easy way to specify a whole environment to be installed. + """ + name = 'install' + + usage = """ + %prog [options] [package-index-options] ... + %prog [options] -r [package-index-options] ... + %prog [options] [-e] ... + %prog [options] [-e] ... + %prog [options] ...""" + + summary = 'Install packages.' + + def __init__(self, *args, **kw): + super(InstallCommand, self).__init__(*args, **kw) + + default_user = True + if running_under_virtualenv(): + default_user = False + if os.geteuid() == 0: + default_user = False + + cmd_opts = self.cmd_opts + + cmd_opts.add_option(cmdoptions.constraints()) + cmd_opts.add_option(cmdoptions.editable()) + cmd_opts.add_option(cmdoptions.requirements()) + cmd_opts.add_option(cmdoptions.build_dir()) + + cmd_opts.add_option( + '-t', '--target', + dest='target_dir', + metavar='dir', + default=None, + help='Install packages into . ' + 'By default this will not replace existing files/folders in ' + '. Use --upgrade to replace existing packages in ' + 'with new versions.' + ) + + cmd_opts.add_option( + '-d', '--download', '--download-dir', '--download-directory', + dest='download_dir', + metavar='dir', + default=None, + help=("Download packages into instead of installing them, " + "regardless of what's already installed."), + ) + + cmd_opts.add_option(cmdoptions.src()) + + cmd_opts.add_option( + '-U', '--upgrade', + dest='upgrade', + action='store_true', + help='Upgrade all specified packages to the newest available ' + 'version. The handling of dependencies depends on the ' + 'upgrade-strategy used.' + ) + + cmd_opts.add_option( + '--upgrade-strategy', + dest='upgrade_strategy', + default='eager', + choices=['only-if-needed', 'eager'], + help='Determines how dependency upgrading should be handled. ' + '"eager" - dependencies are upgraded regardless of ' + 'whether the currently installed version satisfies the ' + 'requirements of the upgraded package(s). ' + '"only-if-needed" - are upgraded only when they do not ' + 'satisfy the requirements of the upgraded package(s).' + ) + + cmd_opts.add_option( + '--force-reinstall', + dest='force_reinstall', + action='store_true', + help='When upgrading, reinstall all packages even if they are ' + 'already up-to-date.') + + cmd_opts.add_option( + '-I', '--ignore-installed', + dest='ignore_installed', + action='store_true', + default=default_user, + help='Ignore the installed packages (reinstalling instead).') + + cmd_opts.add_option(cmdoptions.ignore_requires_python()) + cmd_opts.add_option(cmdoptions.no_deps()) + + cmd_opts.add_option(cmdoptions.install_options()) + cmd_opts.add_option(cmdoptions.global_options()) + + cmd_opts.add_option( + '--user', + dest='use_user_site', + action='store_true', + default=default_user, + help="Install to the Python user install directory for your " + "platform. Typically ~/.local/, or %APPDATA%\Python on " + "Windows. (See the Python documentation for site.USER_BASE " + "for full details.) On Debian systems, this is the " + "default when running outside of a virtual environment " + "and not as root.") + + cmd_opts.add_option( + '--system', + dest='use_user_site', + action='store_false', + help="Install using the system scheme (overrides --user on " + "Debian systems)") + + cmd_opts.add_option( + '--egg', + dest='as_egg', + action='store_true', + help="Install packages as eggs, not 'flat', like pip normally " + "does. This option is not about installing *from* eggs. " + "(WARNING: Because this option overrides pip's normal install" + " logic, requirements files may not behave as expected.)") + + cmd_opts.add_option( + '--root', + dest='root_path', + metavar='dir', + default=None, + help="Install everything relative to this alternate root " + "directory.") + + cmd_opts.add_option( + '--prefix', + dest='prefix_path', + metavar='dir', + default=None, + help="Installation prefix where lib, bin and other top-level " + "folders are placed") + + cmd_opts.add_option( + "--compile", + action="store_true", + dest="compile", + default=True, + help="Compile py files to pyc", + ) + + cmd_opts.add_option( + "--no-compile", + action="store_false", + dest="compile", + help="Do not compile py files to pyc", + ) + + cmd_opts.add_option(cmdoptions.use_wheel()) + cmd_opts.add_option(cmdoptions.no_use_wheel()) + cmd_opts.add_option(cmdoptions.no_binary()) + cmd_opts.add_option(cmdoptions.only_binary()) + cmd_opts.add_option(cmdoptions.pre()) + cmd_opts.add_option(cmdoptions.no_clean()) + cmd_opts.add_option(cmdoptions.require_hashes()) + + index_opts = cmdoptions.make_option_group( + cmdoptions.index_group, + self.parser, + ) + + self.parser.insert_option_group(0, index_opts) + self.parser.insert_option_group(0, cmd_opts) + + def run(self, options, args): + cmdoptions.resolve_wheel_no_use_binary(options) + cmdoptions.check_install_build_global(options) + + if options.as_egg: + warnings.warn( + "--egg has been deprecated and will be removed in the future. " + "This flag is mutually exclusive with large parts of pip, and " + "actually using it invalidates pip's ability to manage the " + "installation process.", + RemovedInPip10Warning, + ) + + if options.allow_external: + warnings.warn( + "--allow-external has been deprecated and will be removed in " + "the future. Due to changes in the repository protocol, it no " + "longer has any effect.", + RemovedInPip10Warning, + ) + + if options.allow_all_external: + warnings.warn( + "--allow-all-external has been deprecated and will be removed " + "in the future. Due to changes in the repository protocol, it " + "no longer has any effect.", + RemovedInPip10Warning, + ) + + if options.allow_unverified: + warnings.warn( + "--allow-unverified has been deprecated and will be removed " + "in the future. Due to changes in the repository protocol, it " + "no longer has any effect.", + RemovedInPip10Warning, + ) + + if options.download_dir: + warnings.warn( + "pip install --download has been deprecated and will be " + "removed in the future. Pip now has a download command that " + "should be used instead.", + RemovedInPip10Warning, + ) + options.ignore_installed = True + + if options.build_dir: + options.build_dir = os.path.abspath(options.build_dir) + + options.src_dir = os.path.abspath(options.src_dir) + install_options = options.install_options or [] + if options.use_user_site: + if options.prefix_path: + raise CommandError( + "Can not combine '--user' and '--prefix' as they imply " + "different installation locations" + ) + if virtualenv_no_global(): + raise InstallationError( + "Can not perform a '--user' install. User site-packages " + "are not visible in this virtualenv." + ) + install_options.append('--user') + install_options.append('--prefix=') + + temp_target_dir = None + if options.target_dir: + options.ignore_installed = True + temp_target_dir = tempfile.mkdtemp() + options.target_dir = os.path.abspath(options.target_dir) + if (os.path.exists(options.target_dir) and not + os.path.isdir(options.target_dir)): + raise CommandError( + "Target path exists but is not a directory, will not " + "continue." + ) + install_options.append('--home=' + temp_target_dir) + + global_options = options.global_options or [] + + with self._build_session(options) as session: + + finder = self._build_package_finder(options, session) + build_delete = (not (options.no_clean or options.build_dir)) + wheel_cache = WheelCache(options.cache_dir, options.format_control) + if options.cache_dir and not check_path_owner(options.cache_dir): + logger.warning( + "The directory '%s' or its parent directory is not owned " + "by the current user and caching wheels has been " + "disabled. check the permissions and owner of that " + "directory. If executing pip with sudo, you may want " + "sudo's -H flag.", + options.cache_dir, + ) + options.cache_dir = None + + with BuildDirectory(options.build_dir, + delete=build_delete) as build_dir: + requirement_set = RequirementSet( + build_dir=build_dir, + src_dir=options.src_dir, + download_dir=options.download_dir, + upgrade=options.upgrade, + upgrade_strategy=options.upgrade_strategy, + as_egg=options.as_egg, + ignore_installed=options.ignore_installed, + ignore_dependencies=options.ignore_dependencies, + ignore_requires_python=options.ignore_requires_python, + force_reinstall=options.force_reinstall, + use_user_site=options.use_user_site, + target_dir=temp_target_dir, + session=session, + pycompile=options.compile, + isolated=options.isolated_mode, + wheel_cache=wheel_cache, + require_hashes=options.require_hashes, + ) + + self.populate_requirement_set( + requirement_set, args, options, finder, session, self.name, + wheel_cache + ) + + if not requirement_set.has_requirements: + return + + try: + if (options.download_dir or not wheel or not + options.cache_dir): + # on -d don't do complex things like building + # wheels, and don't try to build wheels when wheel is + # not installed. + requirement_set.prepare_files(finder) + else: + # build wheels before install. + wb = WheelBuilder( + requirement_set, + finder, + build_options=[], + global_options=[], + ) + # Ignore the result: a failed wheel will be + # installed from the sdist/vcs whatever. + wb.build(autobuilding=True) + + if not options.download_dir: + requirement_set.install( + install_options, + global_options, + root=options.root_path, + prefix=options.prefix_path, + ) + + possible_lib_locations = get_lib_location_guesses( + user=options.use_user_site, + home=temp_target_dir, + root=options.root_path, + prefix=options.prefix_path, + isolated=options.isolated_mode, + ) + reqs = sorted( + requirement_set.successfully_installed, + key=operator.attrgetter('name')) + items = [] + for req in reqs: + item = req.name + try: + installed_version = get_installed_version( + req.name, possible_lib_locations + ) + if installed_version: + item += '-' + installed_version + except Exception: + pass + items.append(item) + installed = ' '.join(items) + if installed: + logger.info('Successfully installed %s', installed) + else: + downloaded = ' '.join([ + req.name + for req in requirement_set.successfully_downloaded + ]) + if downloaded: + logger.info( + 'Successfully downloaded %s', downloaded + ) + except PreviousBuildDirError: + options.no_clean = True + raise + finally: + # Clean up + if not options.no_clean: + requirement_set.cleanup_files() + + if options.target_dir: + ensure_dir(options.target_dir) + + # Checking both purelib and platlib directories for installed + # packages to be moved to target directory + lib_dir_list = [] + + purelib_dir = distutils_scheme('', home=temp_target_dir)['purelib'] + platlib_dir = distutils_scheme('', home=temp_target_dir)['platlib'] + + if os.path.exists(purelib_dir): + lib_dir_list.append(purelib_dir) + if os.path.exists(platlib_dir) and platlib_dir != purelib_dir: + lib_dir_list.append(platlib_dir) + + for lib_dir in lib_dir_list: + for item in os.listdir(lib_dir): + target_item_dir = os.path.join(options.target_dir, item) + if os.path.exists(target_item_dir): + if not options.upgrade: + logger.warning( + 'Target directory %s already exists. Specify ' + '--upgrade to force replacement.', + target_item_dir + ) + continue + if os.path.islink(target_item_dir): + logger.warning( + 'Target directory %s already exists and is ' + 'a link. Pip will not automatically replace ' + 'links, please remove if replacement is ' + 'desired.', + target_item_dir + ) + continue + if os.path.isdir(target_item_dir): + shutil.rmtree(target_item_dir) + else: + os.remove(target_item_dir) + + shutil.move( + os.path.join(lib_dir, item), + target_item_dir + ) + shutil.rmtree(temp_target_dir) + return requirement_set + + +def get_lib_location_guesses(*args, **kwargs): + scheme = distutils_scheme('', *args, **kwargs) + return [scheme['purelib'], scheme['platlib']] diff --git a/week-0/day-3/venv/lib/python3.6/site-packages/pip/commands/list.py b/week-0/day-3/venv/lib/python3.6/site-packages/pip/commands/list.py new file mode 100644 index 00000000..6f6995d7 --- /dev/null +++ b/week-0/day-3/venv/lib/python3.6/site-packages/pip/commands/list.py @@ -0,0 +1,337 @@ +from __future__ import absolute_import + +import json +import logging +import warnings +try: + from itertools import zip_longest +except ImportError: + from itertools import izip_longest as zip_longest + +from pip._vendor import six + +from pip.basecommand import Command +from pip.exceptions import CommandError +from pip.index import PackageFinder +from pip.utils import ( + get_installed_distributions, dist_is_editable) +from pip.utils.deprecation import RemovedInPip10Warning +from pip.cmdoptions import make_option_group, index_group + +logger = logging.getLogger(__name__) + + +class ListCommand(Command): + """ + List installed packages, including editables. + + Packages are listed in a case-insensitive sorted order. + """ + name = 'list' + usage = """ + %prog [options]""" + summary = 'List installed packages.' + + def __init__(self, *args, **kw): + super(ListCommand, self).__init__(*args, **kw) + + cmd_opts = self.cmd_opts + + cmd_opts.add_option( + '-o', '--outdated', + action='store_true', + default=False, + help='List outdated packages') + cmd_opts.add_option( + '-u', '--uptodate', + action='store_true', + default=False, + help='List uptodate packages') + cmd_opts.add_option( + '-e', '--editable', + action='store_true', + default=False, + help='List editable projects.') + cmd_opts.add_option( + '-l', '--local', + action='store_true', + default=False, + help=('If in a virtualenv that has global access, do not list ' + 'globally-installed packages.'), + ) + self.cmd_opts.add_option( + '--user', + dest='user', + action='store_true', + default=False, + help='Only output packages installed in user-site.') + + cmd_opts.add_option( + '--pre', + action='store_true', + default=False, + help=("Include pre-release and development versions. By default, " + "pip only finds stable versions."), + ) + + cmd_opts.add_option( + '--format', + action='store', + dest='list_format', + choices=('legacy', 'columns', 'freeze', 'json'), + help="Select the output format among: legacy (default), columns, " + "freeze or json.", + ) + + cmd_opts.add_option( + '--not-required', + action='store_true', + dest='not_required', + help="List packages that are not dependencies of " + "installed packages.", + ) + + index_opts = make_option_group(index_group, self.parser) + + self.parser.insert_option_group(0, index_opts) + self.parser.insert_option_group(0, cmd_opts) + + def _build_package_finder(self, options, index_urls, session): + """ + Create a package finder appropriate to this list command. + """ + return PackageFinder( + find_links=options.find_links, + index_urls=index_urls, + allow_all_prereleases=options.pre, + trusted_hosts=options.trusted_hosts, + process_dependency_links=options.process_dependency_links, + session=session, + ) + + def run(self, options, args): + if options.allow_external: + warnings.warn( + "--allow-external has been deprecated and will be removed in " + "the future. Due to changes in the repository protocol, it no " + "longer has any effect.", + RemovedInPip10Warning, + ) + + if options.allow_all_external: + warnings.warn( + "--allow-all-external has been deprecated and will be removed " + "in the future. Due to changes in the repository protocol, it " + "no longer has any effect.", + RemovedInPip10Warning, + ) + + if options.allow_unverified: + warnings.warn( + "--allow-unverified has been deprecated and will be removed " + "in the future. Due to changes in the repository protocol, it " + "no longer has any effect.", + RemovedInPip10Warning, + ) + + if options.list_format is None: + warnings.warn( + "The default format will switch to columns in the future. " + "You can use --format=(legacy|columns) (or define a " + "format=(legacy|columns) in your pip.conf under the [list] " + "section) to disable this warning.", + RemovedInPip10Warning, + ) + + if options.outdated and options.uptodate: + raise CommandError( + "Options --outdated and --uptodate cannot be combined.") + + packages = get_installed_distributions( + local_only=options.local, + user_only=options.user, + editables_only=options.editable, + ) + + if options.outdated: + packages = self.get_outdated(packages, options) + elif options.uptodate: + packages = self.get_uptodate(packages, options) + + if options.not_required: + packages = self.get_not_required(packages, options) + + self.output_package_listing(packages, options) + + def get_outdated(self, packages, options): + return [ + dist for dist in self.iter_packages_latest_infos(packages, options) + if dist.latest_version > dist.parsed_version + ] + + def get_uptodate(self, packages, options): + return [ + dist for dist in self.iter_packages_latest_infos(packages, options) + if dist.latest_version == dist.parsed_version + ] + + def get_not_required(self, packages, options): + dep_keys = set() + for dist in packages: + dep_keys.update(requirement.key for requirement in dist.requires()) + return set(pkg for pkg in packages if pkg.key not in dep_keys) + + def iter_packages_latest_infos(self, packages, options): + index_urls = [options.index_url] + options.extra_index_urls + if options.no_index: + logger.debug('Ignoring indexes: %s', ','.join(index_urls)) + index_urls = [] + + dependency_links = [] + for dist in packages: + if dist.has_metadata('dependency_links.txt'): + dependency_links.extend( + dist.get_metadata_lines('dependency_links.txt'), + ) + + with self._build_session(options) as session: + finder = self._build_package_finder(options, index_urls, session) + finder.add_dependency_links(dependency_links) + + for dist in packages: + typ = 'unknown' + all_candidates = finder.find_all_candidates(dist.key) + if not options.pre: + # Remove prereleases + all_candidates = [candidate for candidate in all_candidates + if not candidate.version.is_prerelease] + + if not all_candidates: + continue + best_candidate = max(all_candidates, + key=finder._candidate_sort_key) + remote_version = best_candidate.version + if best_candidate.location.is_wheel: + typ = 'wheel' + else: + typ = 'sdist' + # This is dirty but makes the rest of the code much cleaner + dist.latest_version = remote_version + dist.latest_filetype = typ + yield dist + + def output_legacy(self, dist): + if dist_is_editable(dist): + return '%s (%s, %s)' % ( + dist.project_name, + dist.version, + dist.location, + ) + else: + return '%s (%s)' % (dist.project_name, dist.version) + + def output_legacy_latest(self, dist): + return '%s - Latest: %s [%s]' % ( + self.output_legacy(dist), + dist.latest_version, + dist.latest_filetype, + ) + + def output_package_listing(self, packages, options): + packages = sorted( + packages, + key=lambda dist: dist.project_name.lower(), + ) + if options.list_format == 'columns' and packages: + data, header = format_for_columns(packages, options) + self.output_package_listing_columns(data, header) + elif options.list_format == 'freeze': + for dist in packages: + logger.info("%s==%s", dist.project_name, dist.version) + elif options.list_format == 'json': + logger.info(format_for_json(packages, options)) + else: # legacy + for dist in packages: + if options.outdated: + logger.info(self.output_legacy_latest(dist)) + else: + logger.info(self.output_legacy(dist)) + + def output_package_listing_columns(self, data, header): + # insert the header first: we need to know the size of column names + if len(data) > 0: + data.insert(0, header) + + pkg_strings, sizes = tabulate(data) + + # Create and add a separator. + if len(data) > 0: + pkg_strings.insert(1, " ".join(map(lambda x: '-' * x, sizes))) + + for val in pkg_strings: + logger.info(val) + + +def tabulate(vals): + # From pfmoore on GitHub: + # https://github.com/pypa/pip/issues/3651#issuecomment-216932564 + assert len(vals) > 0 + + sizes = [0] * max(len(x) for x in vals) + for row in vals: + sizes = [max(s, len(str(c))) for s, c in zip_longest(sizes, row)] + + result = [] + for row in vals: + display = " ".join([str(c).ljust(s) if c is not None else '' + for s, c in zip_longest(sizes, row)]) + result.append(display) + + return result, sizes + + +def format_for_columns(pkgs, options): + """ + Convert the package data into something usable + by output_package_listing_columns. + """ + running_outdated = options.outdated + # Adjust the header for the `pip list --outdated` case. + if running_outdated: + header = ["Package", "Version", "Latest", "Type"] + else: + header = ["Package", "Version"] + + data = [] + if any(dist_is_editable(x) for x in pkgs): + header.append("Location") + + for proj in pkgs: + # if we're working on the 'outdated' list, separate out the + # latest_version and type + row = [proj.project_name, proj.version] + + if running_outdated: + row.append(proj.latest_version) + row.append(proj.latest_filetype) + + if dist_is_editable(proj): + row.append(proj.location) + + data.append(row) + + return data, header + + +def format_for_json(packages, options): + data = [] + for dist in packages: + info = { + 'name': dist.project_name, + 'version': six.text_type(dist.version), + } + if options.outdated: + info['latest_version'] = six.text_type(dist.latest_version) + info['latest_filetype'] = dist.latest_filetype + data.append(info) + return json.dumps(data) diff --git a/week-0/day-3/venv/lib/python3.6/site-packages/pip/commands/search.py b/week-0/day-3/venv/lib/python3.6/site-packages/pip/commands/search.py new file mode 100644 index 00000000..bd2ea8ad --- /dev/null +++ b/week-0/day-3/venv/lib/python3.6/site-packages/pip/commands/search.py @@ -0,0 +1,133 @@ +from __future__ import absolute_import + +import logging +import sys +import textwrap + +from pip.basecommand import Command, SUCCESS +from pip.compat import OrderedDict +from pip.download import PipXmlrpcTransport +from pip.models import PyPI +from pip.utils import get_terminal_size +from pip.utils.logging import indent_log +from pip.exceptions import CommandError +from pip.status_codes import NO_MATCHES_FOUND +from pip._vendor.packaging.version import parse as parse_version +from pip._vendor import pkg_resources +from pip._vendor.six.moves import xmlrpc_client + + +logger = logging.getLogger(__name__) + + +class SearchCommand(Command): + """Search for PyPI packages whose name or summary contains .""" + name = 'search' + usage = """ + %prog [options] """ + summary = 'Search PyPI for packages.' + + def __init__(self, *args, **kw): + super(SearchCommand, self).__init__(*args, **kw) + self.cmd_opts.add_option( + '-i', '--index', + dest='index', + metavar='URL', + default=PyPI.pypi_url, + help='Base URL of Python Package Index (default %default)') + + self.parser.insert_option_group(0, self.cmd_opts) + + def run(self, options, args): + if not args: + raise CommandError('Missing required argument (search query).') + query = args + pypi_hits = self.search(query, options) + hits = transform_hits(pypi_hits) + + terminal_width = None + if sys.stdout.isatty(): + terminal_width = get_terminal_size()[0] + + print_results(hits, terminal_width=terminal_width) + if pypi_hits: + return SUCCESS + return NO_MATCHES_FOUND + + def search(self, query, options): + index_url = options.index + with self._build_session(options) as session: + transport = PipXmlrpcTransport(index_url, session) + pypi = xmlrpc_client.ServerProxy(index_url, transport) + hits = pypi.search({'name': query, 'summary': query}, 'or') + return hits + + +def transform_hits(hits): + """ + The list from pypi is really a list of versions. We want a list of + packages with the list of versions stored inline. This converts the + list from pypi into one we can use. + """ + packages = OrderedDict() + for hit in hits: + name = hit['name'] + summary = hit['summary'] + version = hit['version'] + + if name not in packages.keys(): + packages[name] = { + 'name': name, + 'summary': summary, + 'versions': [version], + } + else: + packages[name]['versions'].append(version) + + # if this is the highest version, replace summary and score + if version == highest_version(packages[name]['versions']): + packages[name]['summary'] = summary + + return list(packages.values()) + + +def print_results(hits, name_column_width=None, terminal_width=None): + if not hits: + return + if name_column_width is None: + name_column_width = max([ + len(hit['name']) + len(hit.get('versions', ['-'])[-1]) + for hit in hits + ]) + 4 + + installed_packages = [p.project_name for p in pkg_resources.working_set] + for hit in hits: + name = hit['name'] + summary = hit['summary'] or '' + version = hit.get('versions', ['-'])[-1] + if terminal_width is not None: + target_width = terminal_width - name_column_width - 5 + if target_width > 10: + # wrap and indent summary to fit terminal + summary = textwrap.wrap(summary, target_width) + summary = ('\n' + ' ' * (name_column_width + 3)).join(summary) + + line = '%-*s - %s' % (name_column_width, + '%s (%s)' % (name, version), summary) + try: + logger.info(line) + if name in installed_packages: + dist = pkg_resources.get_distribution(name) + with indent_log(): + latest = highest_version(hit['versions']) + if dist.version == latest: + logger.info('INSTALLED: %s (latest)', dist.version) + else: + logger.info('INSTALLED: %s', dist.version) + logger.info('LATEST: %s', latest) + except UnicodeEncodeError: + pass + + +def highest_version(versions): + return max(versions, key=parse_version) diff --git a/week-0/day-3/venv/lib/python3.6/site-packages/pip/commands/show.py b/week-0/day-3/venv/lib/python3.6/site-packages/pip/commands/show.py new file mode 100644 index 00000000..111c16d1 --- /dev/null +++ b/week-0/day-3/venv/lib/python3.6/site-packages/pip/commands/show.py @@ -0,0 +1,154 @@ +from __future__ import absolute_import + +from email.parser import FeedParser +import logging +import os + +from pip.basecommand import Command +from pip.status_codes import SUCCESS, ERROR +from pip._vendor import pkg_resources +from pip._vendor.packaging.utils import canonicalize_name + + +logger = logging.getLogger(__name__) + + +class ShowCommand(Command): + """Show information about one or more installed packages.""" + name = 'show' + usage = """ + %prog [options] ...""" + summary = 'Show information about installed packages.' + + def __init__(self, *args, **kw): + super(ShowCommand, self).__init__(*args, **kw) + self.cmd_opts.add_option( + '-f', '--files', + dest='files', + action='store_true', + default=False, + help='Show the full list of installed files for each package.') + + self.parser.insert_option_group(0, self.cmd_opts) + + def run(self, options, args): + if not args: + logger.warning('ERROR: Please provide a package name or names.') + return ERROR + query = args + + results = search_packages_info(query) + if not print_results( + results, list_files=options.files, verbose=options.verbose): + return ERROR + return SUCCESS + + +def search_packages_info(query): + """ + Gather details from installed distributions. Print distribution name, + version, location, and installed files. Installed files requires a + pip generated 'installed-files.txt' in the distributions '.egg-info' + directory. + """ + installed = {} + for p in pkg_resources.working_set: + installed[canonicalize_name(p.project_name)] = p + + query_names = [canonicalize_name(name) for name in query] + + for dist in [installed[pkg] for pkg in query_names if pkg in installed]: + package = { + 'name': dist.project_name, + 'version': dist.version, + 'location': dist.location, + 'requires': [dep.project_name for dep in dist.requires()], + } + file_list = None + metadata = None + if isinstance(dist, pkg_resources.DistInfoDistribution): + # RECORDs should be part of .dist-info metadatas + if dist.has_metadata('RECORD'): + lines = dist.get_metadata_lines('RECORD') + paths = [l.split(',')[0] for l in lines] + paths = [os.path.join(dist.location, p) for p in paths] + file_list = [os.path.relpath(p, dist.location) for p in paths] + + if dist.has_metadata('METADATA'): + metadata = dist.get_metadata('METADATA') + else: + # Otherwise use pip's log for .egg-info's + if dist.has_metadata('installed-files.txt'): + paths = dist.get_metadata_lines('installed-files.txt') + paths = [os.path.join(dist.egg_info, p) for p in paths] + file_list = [os.path.relpath(p, dist.location) for p in paths] + + if dist.has_metadata('PKG-INFO'): + metadata = dist.get_metadata('PKG-INFO') + + if dist.has_metadata('entry_points.txt'): + entry_points = dist.get_metadata_lines('entry_points.txt') + package['entry_points'] = entry_points + + if dist.has_metadata('INSTALLER'): + for line in dist.get_metadata_lines('INSTALLER'): + if line.strip(): + package['installer'] = line.strip() + break + + # @todo: Should pkg_resources.Distribution have a + # `get_pkg_info` method? + feed_parser = FeedParser() + feed_parser.feed(metadata) + pkg_info_dict = feed_parser.close() + for key in ('metadata-version', 'summary', + 'home-page', 'author', 'author-email', 'license'): + package[key] = pkg_info_dict.get(key) + + # It looks like FeedParser cannot deal with repeated headers + classifiers = [] + for line in metadata.splitlines(): + if line.startswith('Classifier: '): + classifiers.append(line[len('Classifier: '):]) + package['classifiers'] = classifiers + + if file_list: + package['files'] = sorted(file_list) + yield package + + +def print_results(distributions, list_files=False, verbose=False): + """ + Print the informations from installed distributions found. + """ + results_printed = False + for i, dist in enumerate(distributions): + results_printed = True + if i > 0: + logger.info("---") + logger.info("Name: %s", dist.get('name', '')) + logger.info("Version: %s", dist.get('version', '')) + logger.info("Summary: %s", dist.get('summary', '')) + logger.info("Home-page: %s", dist.get('home-page', '')) + logger.info("Author: %s", dist.get('author', '')) + logger.info("Author-email: %s", dist.get('author-email', '')) + logger.info("License: %s", dist.get('license', '')) + logger.info("Location: %s", dist.get('location', '')) + logger.info("Requires: %s", ', '.join(dist.get('requires', []))) + if verbose: + logger.info("Metadata-Version: %s", + dist.get('metadata-version', '')) + logger.info("Installer: %s", dist.get('installer', '')) + logger.info("Classifiers:") + for classifier in dist.get('classifiers', []): + logger.info(" %s", classifier) + logger.info("Entry-points:") + for entry in dist.get('entry_points', []): + logger.info(" %s", entry.strip()) + if list_files: + logger.info("Files:") + for line in dist.get('files', []): + logger.info(" %s", line.strip()) + if "files" not in dist: + logger.info("Cannot locate installed-files.txt") + return results_printed diff --git a/week-0/day-3/venv/lib/python3.6/site-packages/pip/commands/uninstall.py b/week-0/day-3/venv/lib/python3.6/site-packages/pip/commands/uninstall.py new file mode 100644 index 00000000..8ba1a7c6 --- /dev/null +++ b/week-0/day-3/venv/lib/python3.6/site-packages/pip/commands/uninstall.py @@ -0,0 +1,76 @@ +from __future__ import absolute_import + +import pip +from pip.wheel import WheelCache +from pip.req import InstallRequirement, RequirementSet, parse_requirements +from pip.basecommand import Command +from pip.exceptions import InstallationError + + +class UninstallCommand(Command): + """ + Uninstall packages. + + pip is able to uninstall most installed packages. Known exceptions are: + + - Pure distutils packages installed with ``python setup.py install``, which + leave behind no metadata to determine what files were installed. + - Script wrappers installed by ``python setup.py develop``. + """ + name = 'uninstall' + usage = """ + %prog [options] ... + %prog [options] -r ...""" + summary = 'Uninstall packages.' + + def __init__(self, *args, **kw): + super(UninstallCommand, self).__init__(*args, **kw) + self.cmd_opts.add_option( + '-r', '--requirement', + dest='requirements', + action='append', + default=[], + metavar='file', + help='Uninstall all the packages listed in the given requirements ' + 'file. This option can be used multiple times.', + ) + self.cmd_opts.add_option( + '-y', '--yes', + dest='yes', + action='store_true', + help="Don't ask for confirmation of uninstall deletions.") + + self.parser.insert_option_group(0, self.cmd_opts) + + def run(self, options, args): + with self._build_session(options) as session: + format_control = pip.index.FormatControl(set(), set()) + wheel_cache = WheelCache(options.cache_dir, format_control) + requirement_set = RequirementSet( + build_dir=None, + src_dir=None, + download_dir=None, + isolated=options.isolated_mode, + session=session, + wheel_cache=wheel_cache, + ) + for name in args: + requirement_set.add_requirement( + InstallRequirement.from_line( + name, isolated=options.isolated_mode, + wheel_cache=wheel_cache + ) + ) + for filename in options.requirements: + for req in parse_requirements( + filename, + options=options, + session=session, + wheel_cache=wheel_cache): + requirement_set.add_requirement(req) + if not requirement_set.has_requirements: + raise InstallationError( + 'You must give at least one requirement to %(name)s (see ' + '"pip help %(name)s")' % dict(name=self.name) + ) + requirement_set.uninstall(auto_confirm=options.yes) diff --git a/week-0/day-3/venv/lib/python3.6/site-packages/pip/commands/wheel.py b/week-0/day-3/venv/lib/python3.6/site-packages/pip/commands/wheel.py new file mode 100644 index 00000000..70e95eb8 --- /dev/null +++ b/week-0/day-3/venv/lib/python3.6/site-packages/pip/commands/wheel.py @@ -0,0 +1,208 @@ +# -*- coding: utf-8 -*- +from __future__ import absolute_import + +import logging +import os +import warnings + +from pip.basecommand import RequirementCommand +from pip.exceptions import CommandError, PreviousBuildDirError +from pip.req import RequirementSet +from pip.utils import import_or_raise +from pip.utils.build import BuildDirectory +from pip.utils.deprecation import RemovedInPip10Warning +from pip.wheel import WheelCache, WheelBuilder +from pip import cmdoptions + + +logger = logging.getLogger(__name__) + + +class WheelCommand(RequirementCommand): + """ + Build Wheel archives for your requirements and dependencies. + + Wheel is a built-package format, and offers the advantage of not + recompiling your software during every install. For more details, see the + wheel docs: https://wheel.readthedocs.io/en/latest/ + + Requirements: setuptools>=0.8, and wheel. + + 'pip wheel' uses the bdist_wheel setuptools extension from the wheel + package to build individual wheels. + + """ + + name = 'wheel' + usage = """ + %prog [options] ... + %prog [options] -r ... + %prog [options] [-e] ... + %prog [options] [-e] ... + %prog [options] ...""" + + summary = 'Build wheels from your requirements.' + + def __init__(self, *args, **kw): + super(WheelCommand, self).__init__(*args, **kw) + + cmd_opts = self.cmd_opts + + cmd_opts.add_option( + '-w', '--wheel-dir', + dest='wheel_dir', + metavar='dir', + default=os.curdir, + help=("Build wheels into , where the default is the " + "current working directory."), + ) + cmd_opts.add_option(cmdoptions.use_wheel()) + cmd_opts.add_option(cmdoptions.no_use_wheel()) + cmd_opts.add_option(cmdoptions.no_binary()) + cmd_opts.add_option(cmdoptions.only_binary()) + cmd_opts.add_option( + '--build-option', + dest='build_options', + metavar='options', + action='append', + help="Extra arguments to be supplied to 'setup.py bdist_wheel'.") + cmd_opts.add_option(cmdoptions.constraints()) + cmd_opts.add_option(cmdoptions.editable()) + cmd_opts.add_option(cmdoptions.requirements()) + cmd_opts.add_option(cmdoptions.src()) + cmd_opts.add_option(cmdoptions.ignore_requires_python()) + cmd_opts.add_option(cmdoptions.no_deps()) + cmd_opts.add_option(cmdoptions.build_dir()) + + cmd_opts.add_option( + '--global-option', + dest='global_options', + action='append', + metavar='options', + help="Extra global options to be supplied to the setup.py " + "call before the 'bdist_wheel' command.") + + cmd_opts.add_option( + '--pre', + action='store_true', + default=False, + help=("Include pre-release and development versions. By default, " + "pip only finds stable versions."), + ) + + cmd_opts.add_option(cmdoptions.no_clean()) + cmd_opts.add_option(cmdoptions.require_hashes()) + + index_opts = cmdoptions.make_option_group( + cmdoptions.index_group, + self.parser, + ) + + self.parser.insert_option_group(0, index_opts) + self.parser.insert_option_group(0, cmd_opts) + + def check_required_packages(self): + import_or_raise( + 'wheel.bdist_wheel', + CommandError, + "'pip wheel' requires the 'wheel' package. To fix this, run: " + "pip install wheel" + ) + pkg_resources = import_or_raise( + 'pkg_resources', + CommandError, + "'pip wheel' requires setuptools >= 0.8 for dist-info support." + " To fix this, run: pip install --upgrade setuptools" + ) + if not hasattr(pkg_resources, 'DistInfoDistribution'): + raise CommandError( + "'pip wheel' requires setuptools >= 0.8 for dist-info " + "support. To fix this, run: pip install --upgrade " + "setuptools" + ) + + def run(self, options, args): + self.check_required_packages() + cmdoptions.resolve_wheel_no_use_binary(options) + cmdoptions.check_install_build_global(options) + + if options.allow_external: + warnings.warn( + "--allow-external has been deprecated and will be removed in " + "the future. Due to changes in the repository protocol, it no " + "longer has any effect.", + RemovedInPip10Warning, + ) + + if options.allow_all_external: + warnings.warn( + "--allow-all-external has been deprecated and will be removed " + "in the future. Due to changes in the repository protocol, it " + "no longer has any effect.", + RemovedInPip10Warning, + ) + + if options.allow_unverified: + warnings.warn( + "--allow-unverified has been deprecated and will be removed " + "in the future. Due to changes in the repository protocol, it " + "no longer has any effect.", + RemovedInPip10Warning, + ) + + index_urls = [options.index_url] + options.extra_index_urls + if options.no_index: + logger.debug('Ignoring indexes: %s', ','.join(index_urls)) + index_urls = [] + + if options.build_dir: + options.build_dir = os.path.abspath(options.build_dir) + + options.src_dir = os.path.abspath(options.src_dir) + + with self._build_session(options) as session: + finder = self._build_package_finder(options, session) + build_delete = (not (options.no_clean or options.build_dir)) + wheel_cache = WheelCache(options.cache_dir, options.format_control) + with BuildDirectory(options.build_dir, + delete=build_delete) as build_dir: + requirement_set = RequirementSet( + build_dir=build_dir, + src_dir=options.src_dir, + download_dir=None, + ignore_dependencies=options.ignore_dependencies, + ignore_installed=True, + ignore_requires_python=options.ignore_requires_python, + isolated=options.isolated_mode, + session=session, + wheel_cache=wheel_cache, + wheel_download_dir=options.wheel_dir, + require_hashes=options.require_hashes + ) + + self.populate_requirement_set( + requirement_set, args, options, finder, session, self.name, + wheel_cache + ) + + if not requirement_set.has_requirements: + return + + try: + # build wheels + wb = WheelBuilder( + requirement_set, + finder, + build_options=options.build_options or [], + global_options=options.global_options or [], + ) + if not wb.build(): + raise CommandError( + "Failed to build one or more wheels" + ) + except PreviousBuildDirError: + options.no_clean = True + raise + finally: + if not options.no_clean: + requirement_set.cleanup_files() diff --git a/week-0/day-3/venv/lib/python3.6/site-packages/pip/compat/__init__.py b/week-0/day-3/venv/lib/python3.6/site-packages/pip/compat/__init__.py new file mode 100644 index 00000000..099672cd --- /dev/null +++ b/week-0/day-3/venv/lib/python3.6/site-packages/pip/compat/__init__.py @@ -0,0 +1,164 @@ +"""Stuff that differs in different Python versions and platform +distributions.""" +from __future__ import absolute_import, division + +import os +import sys + +from pip._vendor.six import text_type + +try: + from logging.config import dictConfig as logging_dictConfig +except ImportError: + from pip.compat.dictconfig import dictConfig as logging_dictConfig + +try: + from collections import OrderedDict +except ImportError: + from pip._vendor.ordereddict import OrderedDict + +try: + import ipaddress +except ImportError: + try: + from pip._vendor import ipaddress + except ImportError: + import ipaddr as ipaddress + ipaddress.ip_address = ipaddress.IPAddress + ipaddress.ip_network = ipaddress.IPNetwork + + +try: + import sysconfig + + def get_stdlib(): + paths = [ + sysconfig.get_path("stdlib"), + sysconfig.get_path("platstdlib"), + ] + return set(filter(bool, paths)) +except ImportError: + from distutils import sysconfig + + def get_stdlib(): + paths = [ + sysconfig.get_python_lib(standard_lib=True), + sysconfig.get_python_lib(standard_lib=True, plat_specific=True), + ] + return set(filter(bool, paths)) + + +__all__ = [ + "logging_dictConfig", "ipaddress", "uses_pycache", "console_to_str", + "native_str", "get_path_uid", "stdlib_pkgs", "WINDOWS", "samefile", + "OrderedDict", +] + + +if sys.version_info >= (3, 4): + uses_pycache = True + from importlib.util import cache_from_source +else: + import imp + uses_pycache = hasattr(imp, 'cache_from_source') + if uses_pycache: + cache_from_source = imp.cache_from_source + else: + cache_from_source = None + + +if sys.version_info >= (3,): + def console_to_str(s): + try: + return s.decode(sys.__stdout__.encoding) + except UnicodeDecodeError: + return s.decode('utf_8') + + def native_str(s, replace=False): + if isinstance(s, bytes): + return s.decode('utf-8', 'replace' if replace else 'strict') + return s + +else: + def console_to_str(s): + return s + + def native_str(s, replace=False): + # Replace is ignored -- unicode to UTF-8 can't fail + if isinstance(s, text_type): + return s.encode('utf-8') + return s + + +def total_seconds(td): + if hasattr(td, "total_seconds"): + return td.total_seconds() + else: + val = td.microseconds + (td.seconds + td.days * 24 * 3600) * 10 ** 6 + return val / 10 ** 6 + + +def get_path_uid(path): + """ + Return path's uid. + + Does not follow symlinks: + https://github.com/pypa/pip/pull/935#discussion_r5307003 + + Placed this function in compat due to differences on AIX and + Jython, that should eventually go away. + + :raises OSError: When path is a symlink or can't be read. + """ + if hasattr(os, 'O_NOFOLLOW'): + fd = os.open(path, os.O_RDONLY | os.O_NOFOLLOW) + file_uid = os.fstat(fd).st_uid + os.close(fd) + else: # AIX and Jython + # WARNING: time of check vulnerability, but best we can do w/o NOFOLLOW + if not os.path.islink(path): + # older versions of Jython don't have `os.fstat` + file_uid = os.stat(path).st_uid + else: + # raise OSError for parity with os.O_NOFOLLOW above + raise OSError( + "%s is a symlink; Will not return uid for symlinks" % path + ) + return file_uid + + +def expanduser(path): + """ + Expand ~ and ~user constructions. + + Includes a workaround for http://bugs.python.org/issue14768 + """ + expanded = os.path.expanduser(path) + if path.startswith('~/') and expanded.startswith('//'): + expanded = expanded[1:] + return expanded + + +# packages in the stdlib that may have installation metadata, but should not be +# considered 'installed'. this theoretically could be determined based on +# dist.location (py27:`sysconfig.get_paths()['stdlib']`, +# py26:sysconfig.get_config_vars('LIBDEST')), but fear platform variation may +# make this ineffective, so hard-coding +stdlib_pkgs = ('python', 'wsgiref') +if sys.version_info >= (2, 7): + stdlib_pkgs += ('argparse',) + + +# windows detection, covers cpython and ironpython +WINDOWS = (sys.platform.startswith("win") or + (sys.platform == 'cli' and os.name == 'nt')) + + +def samefile(file1, file2): + """Provide an alternative for os.path.samefile on Windows/Python2""" + if hasattr(os.path, 'samefile'): + return os.path.samefile(file1, file2) + else: + path1 = os.path.normcase(os.path.abspath(file1)) + path2 = os.path.normcase(os.path.abspath(file2)) + return path1 == path2 diff --git a/week-0/day-3/venv/lib/python3.6/site-packages/pip/compat/__pycache__/__init__.cpython-36.pyc b/week-0/day-3/venv/lib/python3.6/site-packages/pip/compat/__pycache__/__init__.cpython-36.pyc new file mode 100644 index 0000000000000000000000000000000000000000..048aa4299690132b9f32d94193cb3929165abaed GIT binary patch literal 3957 zcmai1TW=f372X@k6-80BBHwL!6DM})i|A|Yx{GupODT>Upi9mD%$ajPN4FOinjfv*`|86b z%le1)%69|v57A`cSQfKFi`mS{?6DI%V>fhdTDzGSdSG?eKOWtvXN%S8>_*GH+zC6t z|M?96zbk0-ej__J#;L(}ZFc_8BW!NA6n1!L^ak%l%NUPiJW*ku;a@iRPlhL%&*r|f z!c%zXN`>bKTiiOr)XYwg0R^t+E4b=DYq15^W{a%DjT|kbmJ9Mu5mY=7uW-`U|?`4U^1?cHP-sy!C4Hvx5#y~U1Ue4AZlZ)1Fi-3l)mY_|=zfALG~ z&OOWQT^_y5uI$@CIFltnTxM6dogbWHiF>0iySD9wSJ-v73>;UPyKZ&w?tZqe%E2H| zTd@jQIv8*vgEXH_d9H$IQ?*s(!E+p>MJ|IlXTc1L_uX!U^Xu zcvBWxsd$u*CxuYjXX*2luJ^mPo>TmViqv$%u>gideNyCubcogbnqXXT_7Ix{nNDKH z1eY=)%=Fo49@-~p@-1}A8rjU=x6SD6+e7E2r5xodZ_nDt8ce!85TH<<-1f z({pkv6Z5wAhg?OISZ!%na;58oG*et?Z?h;eP*S5K`8P{+@Z^7P_0)LMo1~NLn`N4@ z>+(*y@Uw_A>Y3tL@VG%@^)&l)xi zpYLK)@yVR;D^9^PbH8_ffm^Ttdl1}`3W|yai@1IWi**4 zak9mA8zP5!@JJO9h|tYER_SwY=B-0DL}kkKd?l}FvOSc#vGJt;aBX8<`!XJL=!XlE z;eksXnFO(Y%sdedL@|zJQHq3%07nU#4Sh7uqZzTTVlr*-StCo?BWL82v3Qp95bxft zq6D3hajjclAeO?EoW8D=Y7pIr_0$mK~DYq!0ZSC_M2M~l_`a_-)%tHhD zNQgp!NL#)x%~PP{H)zsFXW5S3#_w^02yQ+aiA_UwW%PTXdEXH$pwMCVo-Ix>CwG{; z@2p#UM5))`B}%W~*A2m;_k@!Z2y!e}H{pyqSqOG(n^VQ5AhfWP%NPXN+v_Br#@_GH zDuvrkd)fY(R7tXiK2n9D!0sCyFd&2UH3K4+*9o6t(*9*$2}l8(;dQyo)Evc^_pzYoVFK_{Ja6xVW+DU4Me~@mY%zD) zI%%;w^)I0c);J3&V=jJQFQ`JrStMZrIgp5C!RnA1_uNjH4?v-u}~1Q z;qyIm1`_$mMe{yJ6n$x9R@;LkjOs5P%o{XE+Pj3gKbk|NwdFI+n=~Vsyrt$Du$;j9 zTYC>i*>&SCY@`|B`<$y%0*Bhp4tK3{gob64fleh}JWtR1Rb^Go`B&DR3lx`w%_x6o@H*Van@INCrV90f; z30lH{&E1Jal=05|) zs_kY*P>)_rs3iHu6eiyw(?Fa^FiMn0zjCIHCwY>U4C;u3okDEKq9}2TL`F6RliDnY z5{a6Moz+4Nd#RKqzj^20d-u&VyUsVgU8mPOpg`B}dg4CDN+3;cNT8>66Cx8z?!Z0~ zf{eWU>X`qJtR4Zww`i4{)>}qaf_8PiB1AWKw2|hl*pa=elDs9(gQ$MDZVdD%F`8}d z=O`UNRV{`U9o~A~{s{M9(Ikae%W2tdXBl#ZE>^G>7tkRg z(Y$LvrawpgmJXiKjw3#$`Df--Jf-29ZbT6)5~Ovc_(6%l#iK}&Is{3%qW>ah;UcQP z)d-WSB7lL zo$%zVuM}0eOc$z3YyOo}U9ZaLaPG;okE${niGLE!N^08fb4AWzw)1LkYC==q={c(I zQQBuHzM=>b4nkB0Y`@;B`);%0`~G?Vn1=}Fdu{uK F`(Jp0%L4!a literal 0 HcmV?d00001 diff --git a/week-0/day-3/venv/lib/python3.6/site-packages/pip/compat/__pycache__/dictconfig.cpython-36.pyc b/week-0/day-3/venv/lib/python3.6/site-packages/pip/compat/__pycache__/dictconfig.cpython-36.pyc new file mode 100644 index 0000000000000000000000000000000000000000..ad6211ed3811c56726cb867bd58a8bc3c9a9823e GIT binary patch literal 13604 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 H(~kXrRj_~g literal 0 HcmV?d00001 diff --git a/week-0/day-3/venv/lib/python3.6/site-packages/pip/compat/dictconfig.py b/week-0/day-3/venv/lib/python3.6/site-packages/pip/compat/dictconfig.py new file mode 100644 index 00000000..ec684aac --- /dev/null +++ b/week-0/day-3/venv/lib/python3.6/site-packages/pip/compat/dictconfig.py @@ -0,0 +1,565 @@ +# This is a copy of the Python logging.config.dictconfig module, +# reproduced with permission. It is provided here for backwards +# compatibility for Python versions prior to 2.7. +# +# Copyright 2009-2010 by Vinay Sajip. All Rights Reserved. +# +# Permission to use, copy, modify, and distribute this software and its +# documentation for any purpose and without fee is hereby granted, +# provided that the above copyright notice appear in all copies and that +# both that copyright notice and this permission notice appear in +# supporting documentation, and that the name of Vinay Sajip +# not be used in advertising or publicity pertaining to distribution +# of the software without specific, written prior permission. +# VINAY SAJIP DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, INCLUDING +# ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL +# VINAY SAJIP BE LIABLE FOR ANY SPECIAL, INDIRECT OR CONSEQUENTIAL DAMAGES OR +# ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER +# IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT +# OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. +from __future__ import absolute_import + +import logging.handlers +import re +import sys +import types + +from pip._vendor import six + +# flake8: noqa + +IDENTIFIER = re.compile('^[a-z_][a-z0-9_]*$', re.I) + + +def valid_ident(s): + m = IDENTIFIER.match(s) + if not m: + raise ValueError('Not a valid Python identifier: %r' % s) + return True + +# +# This function is defined in logging only in recent versions of Python +# +try: + from logging import _checkLevel +except ImportError: + def _checkLevel(level): + if isinstance(level, int): + rv = level + elif str(level) == level: + if level not in logging._levelNames: + raise ValueError('Unknown level: %r' % level) + rv = logging._levelNames[level] + else: + raise TypeError('Level not an integer or a ' + 'valid string: %r' % level) + return rv + +# The ConvertingXXX classes are wrappers around standard Python containers, +# and they serve to convert any suitable values in the container. The +# conversion converts base dicts, lists and tuples to their wrapped +# equivalents, whereas strings which match a conversion format are converted +# appropriately. +# +# Each wrapper should have a configurator attribute holding the actual +# configurator to use for conversion. + + +class ConvertingDict(dict): + """A converting dictionary wrapper.""" + + def __getitem__(self, key): + value = dict.__getitem__(self, key) + result = self.configurator.convert(value) + # If the converted value is different, save for next time + if value is not result: + self[key] = result + if type(result) in (ConvertingDict, ConvertingList, + ConvertingTuple): + result.parent = self + result.key = key + return result + + def get(self, key, default=None): + value = dict.get(self, key, default) + result = self.configurator.convert(value) + # If the converted value is different, save for next time + if value is not result: + self[key] = result + if type(result) in (ConvertingDict, ConvertingList, + ConvertingTuple): + result.parent = self + result.key = key + return result + + def pop(self, key, default=None): + value = dict.pop(self, key, default) + result = self.configurator.convert(value) + if value is not result: + if type(result) in (ConvertingDict, ConvertingList, + ConvertingTuple): + result.parent = self + result.key = key + return result + + +class ConvertingList(list): + """A converting list wrapper.""" + def __getitem__(self, key): + value = list.__getitem__(self, key) + result = self.configurator.convert(value) + # If the converted value is different, save for next time + if value is not result: + self[key] = result + if type(result) in (ConvertingDict, ConvertingList, + ConvertingTuple): + result.parent = self + result.key = key + return result + + def pop(self, idx=-1): + value = list.pop(self, idx) + result = self.configurator.convert(value) + if value is not result: + if type(result) in (ConvertingDict, ConvertingList, + ConvertingTuple): + result.parent = self + return result + + +class ConvertingTuple(tuple): + """A converting tuple wrapper.""" + def __getitem__(self, key): + value = tuple.__getitem__(self, key) + result = self.configurator.convert(value) + if value is not result: + if type(result) in (ConvertingDict, ConvertingList, + ConvertingTuple): + result.parent = self + result.key = key + return result + + +class BaseConfigurator(object): + """ + The configurator base class which defines some useful defaults. + """ + + CONVERT_PATTERN = re.compile(r'^(?P[a-z]+)://(?P.*)$') + + WORD_PATTERN = re.compile(r'^\s*(\w+)\s*') + DOT_PATTERN = re.compile(r'^\.\s*(\w+)\s*') + INDEX_PATTERN = re.compile(r'^\[\s*(\w+)\s*\]\s*') + DIGIT_PATTERN = re.compile(r'^\d+$') + + value_converters = { + 'ext' : 'ext_convert', + 'cfg' : 'cfg_convert', + } + + # We might want to use a different one, e.g. importlib + importer = __import__ + + def __init__(self, config): + self.config = ConvertingDict(config) + self.config.configurator = self + + def resolve(self, s): + """ + Resolve strings to objects using standard import and attribute + syntax. + """ + name = s.split('.') + used = name.pop(0) + try: + found = self.importer(used) + for frag in name: + used += '.' + frag + try: + found = getattr(found, frag) + except AttributeError: + self.importer(used) + found = getattr(found, frag) + return found + except ImportError: + e, tb = sys.exc_info()[1:] + v = ValueError('Cannot resolve %r: %s' % (s, e)) + v.__cause__, v.__traceback__ = e, tb + raise v + + def ext_convert(self, value): + """Default converter for the ext:// protocol.""" + return self.resolve(value) + + def cfg_convert(self, value): + """Default converter for the cfg:// protocol.""" + rest = value + m = self.WORD_PATTERN.match(rest) + if m is None: + raise ValueError("Unable to convert %r" % value) + else: + rest = rest[m.end():] + d = self.config[m.groups()[0]] + # print d, rest + while rest: + m = self.DOT_PATTERN.match(rest) + if m: + d = d[m.groups()[0]] + else: + m = self.INDEX_PATTERN.match(rest) + if m: + idx = m.groups()[0] + if not self.DIGIT_PATTERN.match(idx): + d = d[idx] + else: + try: + n = int(idx) # try as number first (most likely) + d = d[n] + except TypeError: + d = d[idx] + if m: + rest = rest[m.end():] + else: + raise ValueError('Unable to convert ' + '%r at %r' % (value, rest)) + # rest should be empty + return d + + def convert(self, value): + """ + Convert values to an appropriate type. dicts, lists and tuples are + replaced by their converting alternatives. Strings are checked to + see if they have a conversion format and are converted if they do. + """ + if not isinstance(value, ConvertingDict) and isinstance(value, dict): + value = ConvertingDict(value) + value.configurator = self + elif not isinstance(value, ConvertingList) and isinstance(value, list): + value = ConvertingList(value) + value.configurator = self + elif not isinstance(value, ConvertingTuple) and\ + isinstance(value, tuple): + value = ConvertingTuple(value) + value.configurator = self + elif isinstance(value, six.string_types): # str for py3k + m = self.CONVERT_PATTERN.match(value) + if m: + d = m.groupdict() + prefix = d['prefix'] + converter = self.value_converters.get(prefix, None) + if converter: + suffix = d['suffix'] + converter = getattr(self, converter) + value = converter(suffix) + return value + + def configure_custom(self, config): + """Configure an object with a user-supplied factory.""" + c = config.pop('()') + if not hasattr(c, '__call__') and hasattr(types, 'ClassType') and type(c) != types.ClassType: + c = self.resolve(c) + props = config.pop('.', None) + # Check for valid identifiers + kwargs = dict((k, config[k]) for k in config if valid_ident(k)) + result = c(**kwargs) + if props: + for name, value in props.items(): + setattr(result, name, value) + return result + + def as_tuple(self, value): + """Utility function which converts lists to tuples.""" + if isinstance(value, list): + value = tuple(value) + return value + + +class DictConfigurator(BaseConfigurator): + """ + Configure logging using a dictionary-like object to describe the + configuration. + """ + + def configure(self): + """Do the configuration.""" + + config = self.config + if 'version' not in config: + raise ValueError("dictionary doesn't specify a version") + if config['version'] != 1: + raise ValueError("Unsupported version: %s" % config['version']) + incremental = config.pop('incremental', False) + EMPTY_DICT = {} + logging._acquireLock() + try: + if incremental: + handlers = config.get('handlers', EMPTY_DICT) + # incremental handler config only if handler name + # ties in to logging._handlers (Python 2.7) + if sys.version_info[:2] == (2, 7): + for name in handlers: + if name not in logging._handlers: + raise ValueError('No handler found with ' + 'name %r' % name) + else: + try: + handler = logging._handlers[name] + handler_config = handlers[name] + level = handler_config.get('level', None) + if level: + handler.setLevel(_checkLevel(level)) + except StandardError as e: + raise ValueError('Unable to configure handler ' + '%r: %s' % (name, e)) + loggers = config.get('loggers', EMPTY_DICT) + for name in loggers: + try: + self.configure_logger(name, loggers[name], True) + except StandardError as e: + raise ValueError('Unable to configure logger ' + '%r: %s' % (name, e)) + root = config.get('root', None) + if root: + try: + self.configure_root(root, True) + except StandardError as e: + raise ValueError('Unable to configure root ' + 'logger: %s' % e) + else: + disable_existing = config.pop('disable_existing_loggers', True) + + logging._handlers.clear() + del logging._handlerList[:] + + # Do formatters first - they don't refer to anything else + formatters = config.get('formatters', EMPTY_DICT) + for name in formatters: + try: + formatters[name] = self.configure_formatter( + formatters[name]) + except StandardError as e: + raise ValueError('Unable to configure ' + 'formatter %r: %s' % (name, e)) + # Next, do filters - they don't refer to anything else, either + filters = config.get('filters', EMPTY_DICT) + for name in filters: + try: + filters[name] = self.configure_filter(filters[name]) + except StandardError as e: + raise ValueError('Unable to configure ' + 'filter %r: %s' % (name, e)) + + # Next, do handlers - they refer to formatters and filters + # As handlers can refer to other handlers, sort the keys + # to allow a deterministic order of configuration + handlers = config.get('handlers', EMPTY_DICT) + for name in sorted(handlers): + try: + handler = self.configure_handler(handlers[name]) + handler.name = name + handlers[name] = handler + except StandardError as e: + raise ValueError('Unable to configure handler ' + '%r: %s' % (name, e)) + # Next, do loggers - they refer to handlers and filters + + # we don't want to lose the existing loggers, + # since other threads may have pointers to them. + # existing is set to contain all existing loggers, + # and as we go through the new configuration we + # remove any which are configured. At the end, + # what's left in existing is the set of loggers + # which were in the previous configuration but + # which are not in the new configuration. + root = logging.root + existing = list(root.manager.loggerDict) + # The list needs to be sorted so that we can + # avoid disabling child loggers of explicitly + # named loggers. With a sorted list it is easier + # to find the child loggers. + existing.sort() + # We'll keep the list of existing loggers + # which are children of named loggers here... + child_loggers = [] + # now set up the new ones... + loggers = config.get('loggers', EMPTY_DICT) + for name in loggers: + if name in existing: + i = existing.index(name) + prefixed = name + "." + pflen = len(prefixed) + num_existing = len(existing) + i = i + 1 # look at the entry after name + while (i < num_existing) and\ + (existing[i][:pflen] == prefixed): + child_loggers.append(existing[i]) + i = i + 1 + existing.remove(name) + try: + self.configure_logger(name, loggers[name]) + except StandardError as e: + raise ValueError('Unable to configure logger ' + '%r: %s' % (name, e)) + + # Disable any old loggers. There's no point deleting + # them as other threads may continue to hold references + # and by disabling them, you stop them doing any logging. + # However, don't disable children of named loggers, as that's + # probably not what was intended by the user. + for log in existing: + logger = root.manager.loggerDict[log] + if log in child_loggers: + logger.level = logging.NOTSET + logger.handlers = [] + logger.propagate = True + elif disable_existing: + logger.disabled = True + + # And finally, do the root logger + root = config.get('root', None) + if root: + try: + self.configure_root(root) + except StandardError as e: + raise ValueError('Unable to configure root ' + 'logger: %s' % e) + finally: + logging._releaseLock() + + def configure_formatter(self, config): + """Configure a formatter from a dictionary.""" + if '()' in config: + factory = config['()'] # for use in exception handler + try: + result = self.configure_custom(config) + except TypeError as te: + if "'format'" not in str(te): + raise + # Name of parameter changed from fmt to format. + # Retry with old name. + # This is so that code can be used with older Python versions + #(e.g. by Django) + config['fmt'] = config.pop('format') + config['()'] = factory + result = self.configure_custom(config) + else: + fmt = config.get('format', None) + dfmt = config.get('datefmt', None) + result = logging.Formatter(fmt, dfmt) + return result + + def configure_filter(self, config): + """Configure a filter from a dictionary.""" + if '()' in config: + result = self.configure_custom(config) + else: + name = config.get('name', '') + result = logging.Filter(name) + return result + + def add_filters(self, filterer, filters): + """Add filters to a filterer from a list of names.""" + for f in filters: + try: + filterer.addFilter(self.config['filters'][f]) + except StandardError as e: + raise ValueError('Unable to add filter %r: %s' % (f, e)) + + def configure_handler(self, config): + """Configure a handler from a dictionary.""" + formatter = config.pop('formatter', None) + if formatter: + try: + formatter = self.config['formatters'][formatter] + except StandardError as e: + raise ValueError('Unable to set formatter ' + '%r: %s' % (formatter, e)) + level = config.pop('level', None) + filters = config.pop('filters', None) + if '()' in config: + c = config.pop('()') + if not hasattr(c, '__call__') and hasattr(types, 'ClassType') and type(c) != types.ClassType: + c = self.resolve(c) + factory = c + else: + klass = self.resolve(config.pop('class')) + # Special case for handler which refers to another handler + if issubclass(klass, logging.handlers.MemoryHandler) and\ + 'target' in config: + try: + config['target'] = self.config['handlers'][config['target']] + except StandardError as e: + raise ValueError('Unable to set target handler ' + '%r: %s' % (config['target'], e)) + elif issubclass(klass, logging.handlers.SMTPHandler) and\ + 'mailhost' in config: + config['mailhost'] = self.as_tuple(config['mailhost']) + elif issubclass(klass, logging.handlers.SysLogHandler) and\ + 'address' in config: + config['address'] = self.as_tuple(config['address']) + factory = klass + kwargs = dict((k, config[k]) for k in config if valid_ident(k)) + try: + result = factory(**kwargs) + except TypeError as te: + if "'stream'" not in str(te): + raise + # The argument name changed from strm to stream + # Retry with old name. + # This is so that code can be used with older Python versions + #(e.g. by Django) + kwargs['strm'] = kwargs.pop('stream') + result = factory(**kwargs) + if formatter: + result.setFormatter(formatter) + if level is not None: + result.setLevel(_checkLevel(level)) + if filters: + self.add_filters(result, filters) + return result + + def add_handlers(self, logger, handlers): + """Add handlers to a logger from a list of names.""" + for h in handlers: + try: + logger.addHandler(self.config['handlers'][h]) + except StandardError as e: + raise ValueError('Unable to add handler %r: %s' % (h, e)) + + def common_logger_config(self, logger, config, incremental=False): + """ + Perform configuration which is common to root and non-root loggers. + """ + level = config.get('level', None) + if level is not None: + logger.setLevel(_checkLevel(level)) + if not incremental: + # Remove any existing handlers + for h in logger.handlers[:]: + logger.removeHandler(h) + handlers = config.get('handlers', None) + if handlers: + self.add_handlers(logger, handlers) + filters = config.get('filters', None) + if filters: + self.add_filters(logger, filters) + + def configure_logger(self, name, config, incremental=False): + """Configure a non-root logger from a dictionary.""" + logger = logging.getLogger(name) + self.common_logger_config(logger, config, incremental) + propagate = config.get('propagate', None) + if propagate is not None: + logger.propagate = propagate + + def configure_root(self, config, incremental=False): + """Configure a root logger from a dictionary.""" + root = logging.getLogger() + self.common_logger_config(root, config, incremental) + +dictConfigClass = DictConfigurator + + +def dictConfig(config): + """Configure logging using a dictionary.""" + dictConfigClass(config).configure() diff --git a/week-0/day-3/venv/lib/python3.6/site-packages/pip/download.py b/week-0/day-3/venv/lib/python3.6/site-packages/pip/download.py new file mode 100644 index 00000000..54d3131d --- /dev/null +++ b/week-0/day-3/venv/lib/python3.6/site-packages/pip/download.py @@ -0,0 +1,906 @@ +from __future__ import absolute_import + +import cgi +import email.utils +import getpass +import json +import logging +import mimetypes +import os +import platform +import re +import shutil +import sys +import tempfile + +try: + import ssl # noqa + HAS_TLS = True +except ImportError: + HAS_TLS = False + +from pip._vendor.six.moves.urllib import parse as urllib_parse +from pip._vendor.six.moves.urllib import request as urllib_request + +import pip + +from pip.exceptions import InstallationError, HashMismatch +from pip.models import PyPI +from pip.utils import (splitext, rmtree, format_size, display_path, + backup_dir, ask_path_exists, unpack_file, + ARCHIVE_EXTENSIONS, consume, call_subprocess) +from pip.utils.encoding import auto_decode +from pip.utils.filesystem import check_path_owner +from pip.utils.logging import indent_log +from pip.utils.setuptools_build import SETUPTOOLS_SHIM +from pip.utils.glibc import libc_ver +from pip.utils.ui import DownloadProgressBar, DownloadProgressSpinner +from pip.locations import write_delete_marker_file +from pip.vcs import vcs +from pip._vendor import requests, six +from pip._vendor.requests.adapters import BaseAdapter, HTTPAdapter +from pip._vendor.requests.auth import AuthBase, HTTPBasicAuth +from pip._vendor.requests.models import CONTENT_CHUNK_SIZE, Response +from pip._vendor.requests.utils import get_netrc_auth +from pip._vendor.requests.structures import CaseInsensitiveDict +from pip._vendor.requests.packages import urllib3 +from pip._vendor.cachecontrol import CacheControlAdapter +from pip._vendor.cachecontrol.caches import FileCache +from pip._vendor.lockfile import LockError +from pip._vendor.six.moves import xmlrpc_client + + +__all__ = ['get_file_content', + 'is_url', 'url_to_path', 'path_to_url', + 'is_archive_file', 'unpack_vcs_link', + 'unpack_file_url', 'is_vcs_url', 'is_file_url', + 'unpack_http_url', 'unpack_url'] + + +logger = logging.getLogger(__name__) + + +def user_agent(): + """ + Return a string representing the user agent. + """ + data = { + "installer": {"name": "pip", "version": pip.__version__}, + "python": platform.python_version(), + "implementation": { + "name": platform.python_implementation(), + }, + } + + if data["implementation"]["name"] == 'CPython': + data["implementation"]["version"] = platform.python_version() + elif data["implementation"]["name"] == 'PyPy': + if sys.pypy_version_info.releaselevel == 'final': + pypy_version_info = sys.pypy_version_info[:3] + else: + pypy_version_info = sys.pypy_version_info + data["implementation"]["version"] = ".".join( + [str(x) for x in pypy_version_info] + ) + elif data["implementation"]["name"] == 'Jython': + # Complete Guess + data["implementation"]["version"] = platform.python_version() + elif data["implementation"]["name"] == 'IronPython': + # Complete Guess + data["implementation"]["version"] = platform.python_version() + + if sys.platform.startswith("linux"): + from pip._vendor import distro + distro_infos = dict(filter( + lambda x: x[1], + zip(["name", "version", "id"], distro.linux_distribution()), + )) + libc = dict(filter( + lambda x: x[1], + zip(["lib", "version"], libc_ver()), + )) + if libc: + distro_infos["libc"] = libc + if distro_infos: + data["distro"] = distro_infos + + if sys.platform.startswith("darwin") and platform.mac_ver()[0]: + data["distro"] = {"name": "macOS", "version": platform.mac_ver()[0]} + + if platform.system(): + data.setdefault("system", {})["name"] = platform.system() + + if platform.release(): + data.setdefault("system", {})["release"] = platform.release() + + if platform.machine(): + data["cpu"] = platform.machine() + + # Python 2.6 doesn't have ssl.OPENSSL_VERSION. + if HAS_TLS and sys.version_info[:2] > (2, 6): + data["openssl_version"] = ssl.OPENSSL_VERSION + + return "{data[installer][name]}/{data[installer][version]} {json}".format( + data=data, + json=json.dumps(data, separators=(",", ":"), sort_keys=True), + ) + + +class MultiDomainBasicAuth(AuthBase): + + def __init__(self, prompting=True): + self.prompting = prompting + self.passwords = {} + + def __call__(self, req): + parsed = urllib_parse.urlparse(req.url) + + # Get the netloc without any embedded credentials + netloc = parsed.netloc.rsplit("@", 1)[-1] + + # Set the url of the request to the url without any credentials + req.url = urllib_parse.urlunparse(parsed[:1] + (netloc,) + parsed[2:]) + + # Use any stored credentials that we have for this netloc + username, password = self.passwords.get(netloc, (None, None)) + + # Extract credentials embedded in the url if we have none stored + if username is None: + username, password = self.parse_credentials(parsed.netloc) + + # Get creds from netrc if we still don't have them + if username is None and password is None: + netrc_auth = get_netrc_auth(req.url) + username, password = netrc_auth if netrc_auth else (None, None) + + if username or password: + # Store the username and password + self.passwords[netloc] = (username, password) + + # Send the basic auth with this request + req = HTTPBasicAuth(username or "", password or "")(req) + + # Attach a hook to handle 401 responses + req.register_hook("response", self.handle_401) + + return req + + def handle_401(self, resp, **kwargs): + # We only care about 401 responses, anything else we want to just + # pass through the actual response + if resp.status_code != 401: + return resp + + # We are not able to prompt the user so simply return the response + if not self.prompting: + return resp + + parsed = urllib_parse.urlparse(resp.url) + + # Prompt the user for a new username and password + username = six.moves.input("User for %s: " % parsed.netloc) + password = getpass.getpass("Password: ") + + # Store the new username and password to use for future requests + if username or password: + self.passwords[parsed.netloc] = (username, password) + + # Consume content and release the original connection to allow our new + # request to reuse the same one. + resp.content + resp.raw.release_conn() + + # Add our new username and password to the request + req = HTTPBasicAuth(username or "", password or "")(resp.request) + + # Send our new request + new_resp = resp.connection.send(req, **kwargs) + new_resp.history.append(resp) + + return new_resp + + def parse_credentials(self, netloc): + if "@" in netloc: + userinfo = netloc.rsplit("@", 1)[0] + if ":" in userinfo: + return userinfo.split(":", 1) + return userinfo, None + return None, None + + +class LocalFSAdapter(BaseAdapter): + + def send(self, request, stream=None, timeout=None, verify=None, cert=None, + proxies=None): + pathname = url_to_path(request.url) + + resp = Response() + resp.status_code = 200 + resp.url = request.url + + try: + stats = os.stat(pathname) + except OSError as exc: + resp.status_code = 404 + resp.raw = exc + else: + modified = email.utils.formatdate(stats.st_mtime, usegmt=True) + content_type = mimetypes.guess_type(pathname)[0] or "text/plain" + resp.headers = CaseInsensitiveDict({ + "Content-Type": content_type, + "Content-Length": stats.st_size, + "Last-Modified": modified, + }) + + resp.raw = open(pathname, "rb") + resp.close = resp.raw.close + + return resp + + def close(self): + pass + + +class SafeFileCache(FileCache): + """ + A file based cache which is safe to use even when the target directory may + not be accessible or writable. + """ + + def __init__(self, *args, **kwargs): + super(SafeFileCache, self).__init__(*args, **kwargs) + + # Check to ensure that the directory containing our cache directory + # is owned by the user current executing pip. If it does not exist + # we will check the parent directory until we find one that does exist. + # If it is not owned by the user executing pip then we will disable + # the cache and log a warning. + if not check_path_owner(self.directory): + logger.warning( + "The directory '%s' or its parent directory is not owned by " + "the current user and the cache has been disabled. Please " + "check the permissions and owner of that directory. If " + "executing pip with sudo, you may want sudo's -H flag.", + self.directory, + ) + + # Set our directory to None to disable the Cache + self.directory = None + + def get(self, *args, **kwargs): + # If we don't have a directory, then the cache should be a no-op. + if self.directory is None: + return + + try: + return super(SafeFileCache, self).get(*args, **kwargs) + except (LockError, OSError, IOError): + # We intentionally silence this error, if we can't access the cache + # then we can just skip caching and process the request as if + # caching wasn't enabled. + pass + + def set(self, *args, **kwargs): + # If we don't have a directory, then the cache should be a no-op. + if self.directory is None: + return + + try: + return super(SafeFileCache, self).set(*args, **kwargs) + except (LockError, OSError, IOError): + # We intentionally silence this error, if we can't access the cache + # then we can just skip caching and process the request as if + # caching wasn't enabled. + pass + + def delete(self, *args, **kwargs): + # If we don't have a directory, then the cache should be a no-op. + if self.directory is None: + return + + try: + return super(SafeFileCache, self).delete(*args, **kwargs) + except (LockError, OSError, IOError): + # We intentionally silence this error, if we can't access the cache + # then we can just skip caching and process the request as if + # caching wasn't enabled. + pass + + +class InsecureHTTPAdapter(HTTPAdapter): + + def cert_verify(self, conn, url, verify, cert): + conn.cert_reqs = 'CERT_NONE' + conn.ca_certs = None + + +class PipSession(requests.Session): + + timeout = None + + def __init__(self, *args, **kwargs): + retries = kwargs.pop("retries", 0) + cache = kwargs.pop("cache", None) + insecure_hosts = kwargs.pop("insecure_hosts", []) + + super(PipSession, self).__init__(*args, **kwargs) + + # Attach our User Agent to the request + self.headers["User-Agent"] = user_agent() + + # Attach our Authentication handler to the session + self.auth = MultiDomainBasicAuth() + + # Create our urllib3.Retry instance which will allow us to customize + # how we handle retries. + retries = urllib3.Retry( + # Set the total number of retries that a particular request can + # have. + total=retries, + + # A 503 error from PyPI typically means that the Fastly -> Origin + # connection got interrupted in some way. A 503 error in general + # is typically considered a transient error so we'll go ahead and + # retry it. + status_forcelist=[503], + + # Add a small amount of back off between failed requests in + # order to prevent hammering the service. + backoff_factor=0.25, + ) + + # We want to _only_ cache responses on securely fetched origins. We do + # this because we can't validate the response of an insecurely fetched + # origin, and we don't want someone to be able to poison the cache and + # require manual eviction from the cache to fix it. + if cache: + secure_adapter = CacheControlAdapter( + cache=SafeFileCache(cache, use_dir_lock=True), + max_retries=retries, + ) + else: + secure_adapter = HTTPAdapter(max_retries=retries) + + # Our Insecure HTTPAdapter disables HTTPS validation. It does not + # support caching (see above) so we'll use it for all http:// URLs as + # well as any https:// host that we've marked as ignoring TLS errors + # for. + insecure_adapter = InsecureHTTPAdapter(max_retries=retries) + + self.mount("https://", secure_adapter) + self.mount("http://", insecure_adapter) + + # Enable file:// urls + self.mount("file://", LocalFSAdapter()) + + # We want to use a non-validating adapter for any requests which are + # deemed insecure. + for host in insecure_hosts: + self.mount("https://{0}/".format(host), insecure_adapter) + + def request(self, method, url, *args, **kwargs): + # Allow setting a default timeout on a session + kwargs.setdefault("timeout", self.timeout) + + # Dispatch the actual request + return super(PipSession, self).request(method, url, *args, **kwargs) + + +def get_file_content(url, comes_from=None, session=None): + """Gets the content of a file; it may be a filename, file: URL, or + http: URL. Returns (location, content). Content is unicode.""" + if session is None: + raise TypeError( + "get_file_content() missing 1 required keyword argument: 'session'" + ) + + match = _scheme_re.search(url) + if match: + scheme = match.group(1).lower() + if (scheme == 'file' and comes_from and + comes_from.startswith('http')): + raise InstallationError( + 'Requirements file %s references URL %s, which is local' + % (comes_from, url)) + if scheme == 'file': + path = url.split(':', 1)[1] + path = path.replace('\\', '/') + match = _url_slash_drive_re.match(path) + if match: + path = match.group(1) + ':' + path.split('|', 1)[1] + path = urllib_parse.unquote(path) + if path.startswith('/'): + path = '/' + path.lstrip('/') + url = path + else: + # FIXME: catch some errors + resp = session.get(url) + resp.raise_for_status() + return resp.url, resp.text + try: + with open(url, 'rb') as f: + content = auto_decode(f.read()) + except IOError as exc: + raise InstallationError( + 'Could not open requirements file: %s' % str(exc) + ) + return url, content + + +_scheme_re = re.compile(r'^(http|https|file):', re.I) +_url_slash_drive_re = re.compile(r'/*([a-z])\|', re.I) + + +def is_url(name): + """Returns true if the name looks like a URL""" + if ':' not in name: + return False + scheme = name.split(':', 1)[0].lower() + return scheme in ['http', 'https', 'file', 'ftp'] + vcs.all_schemes + + +def url_to_path(url): + """ + Convert a file: URL to a path. + """ + assert url.startswith('file:'), ( + "You can only turn file: urls into filenames (not %r)" % url) + + _, netloc, path, _, _ = urllib_parse.urlsplit(url) + + # if we have a UNC path, prepend UNC share notation + if netloc: + netloc = '\\\\' + netloc + + path = urllib_request.url2pathname(netloc + path) + return path + + +def path_to_url(path): + """ + Convert a path to a file: URL. The path will be made absolute and have + quoted path parts. + """ + path = os.path.normpath(os.path.abspath(path)) + url = urllib_parse.urljoin('file:', urllib_request.pathname2url(path)) + return url + + +def is_archive_file(name): + """Return True if `name` is a considered as an archive file.""" + ext = splitext(name)[1].lower() + if ext in ARCHIVE_EXTENSIONS: + return True + return False + + +def unpack_vcs_link(link, location): + vcs_backend = _get_used_vcs_backend(link) + vcs_backend.unpack(location) + + +def _get_used_vcs_backend(link): + for backend in vcs.backends: + if link.scheme in backend.schemes: + vcs_backend = backend(link.url) + return vcs_backend + + +def is_vcs_url(link): + return bool(_get_used_vcs_backend(link)) + + +def is_file_url(link): + return link.url.lower().startswith('file:') + + +def is_dir_url(link): + """Return whether a file:// Link points to a directory. + + ``link`` must not have any other scheme but file://. Call is_file_url() + first. + + """ + link_path = url_to_path(link.url_without_fragment) + return os.path.isdir(link_path) + + +def _progress_indicator(iterable, *args, **kwargs): + return iterable + + +def _download_url(resp, link, content_file, hashes): + try: + total_length = int(resp.headers['content-length']) + except (ValueError, KeyError, TypeError): + total_length = 0 + + cached_resp = getattr(resp, "from_cache", False) + + if logger.getEffectiveLevel() > logging.INFO: + show_progress = False + elif cached_resp: + show_progress = False + elif total_length > (40 * 1000): + show_progress = True + elif not total_length: + show_progress = True + else: + show_progress = False + + show_url = link.show_url + + def resp_read(chunk_size): + try: + # Special case for urllib3. + for chunk in resp.raw.stream( + chunk_size, + # We use decode_content=False here because we don't + # want urllib3 to mess with the raw bytes we get + # from the server. If we decompress inside of + # urllib3 then we cannot verify the checksum + # because the checksum will be of the compressed + # file. This breakage will only occur if the + # server adds a Content-Encoding header, which + # depends on how the server was configured: + # - Some servers will notice that the file isn't a + # compressible file and will leave the file alone + # and with an empty Content-Encoding + # - Some servers will notice that the file is + # already compressed and will leave the file + # alone and will add a Content-Encoding: gzip + # header + # - Some servers won't notice anything at all and + # will take a file that's already been compressed + # and compress it again and set the + # Content-Encoding: gzip header + # + # By setting this not to decode automatically we + # hope to eliminate problems with the second case. + decode_content=False): + yield chunk + except AttributeError: + # Standard file-like object. + while True: + chunk = resp.raw.read(chunk_size) + if not chunk: + break + yield chunk + + def written_chunks(chunks): + for chunk in chunks: + content_file.write(chunk) + yield chunk + + progress_indicator = _progress_indicator + + if link.netloc == PyPI.netloc: + url = show_url + else: + url = link.url_without_fragment + + if show_progress: # We don't show progress on cached responses + if total_length: + logger.info("Downloading %s (%s)", url, format_size(total_length)) + progress_indicator = DownloadProgressBar(max=total_length).iter + else: + logger.info("Downloading %s", url) + progress_indicator = DownloadProgressSpinner().iter + elif cached_resp: + logger.info("Using cached %s", url) + else: + logger.info("Downloading %s", url) + + logger.debug('Downloading from URL %s', link) + + downloaded_chunks = written_chunks( + progress_indicator( + resp_read(CONTENT_CHUNK_SIZE), + CONTENT_CHUNK_SIZE + ) + ) + if hashes: + hashes.check_against_chunks(downloaded_chunks) + else: + consume(downloaded_chunks) + + +def _copy_file(filename, location, link): + copy = True + download_location = os.path.join(location, link.filename) + if os.path.exists(download_location): + response = ask_path_exists( + 'The file %s exists. (i)gnore, (w)ipe, (b)ackup, (a)abort' % + display_path(download_location), ('i', 'w', 'b', 'a')) + if response == 'i': + copy = False + elif response == 'w': + logger.warning('Deleting %s', display_path(download_location)) + os.remove(download_location) + elif response == 'b': + dest_file = backup_dir(download_location) + logger.warning( + 'Backing up %s to %s', + display_path(download_location), + display_path(dest_file), + ) + shutil.move(download_location, dest_file) + elif response == 'a': + sys.exit(-1) + if copy: + shutil.copy(filename, download_location) + logger.info('Saved %s', display_path(download_location)) + + +def unpack_http_url(link, location, download_dir=None, + session=None, hashes=None): + if session is None: + raise TypeError( + "unpack_http_url() missing 1 required keyword argument: 'session'" + ) + + temp_dir = tempfile.mkdtemp('-unpack', 'pip-') + + # If a download dir is specified, is the file already downloaded there? + already_downloaded_path = None + if download_dir: + already_downloaded_path = _check_download_dir(link, + download_dir, + hashes) + + if already_downloaded_path: + from_path = already_downloaded_path + content_type = mimetypes.guess_type(from_path)[0] + else: + # let's download to a tmp dir + from_path, content_type = _download_http_url(link, + session, + temp_dir, + hashes) + + # unpack the archive to the build dir location. even when only downloading + # archives, they have to be unpacked to parse dependencies + unpack_file(from_path, location, content_type, link) + + # a download dir is specified; let's copy the archive there + if download_dir and not already_downloaded_path: + _copy_file(from_path, download_dir, link) + + if not already_downloaded_path: + os.unlink(from_path) + rmtree(temp_dir) + + +def unpack_file_url(link, location, download_dir=None, hashes=None): + """Unpack link into location. + + If download_dir is provided and link points to a file, make a copy + of the link file inside download_dir. + """ + link_path = url_to_path(link.url_without_fragment) + + # If it's a url to a local directory + if is_dir_url(link): + if os.path.isdir(location): + rmtree(location) + shutil.copytree(link_path, location, symlinks=True) + if download_dir: + logger.info('Link is a directory, ignoring download_dir') + return + + # If --require-hashes is off, `hashes` is either empty, the + # link's embedded hash, or MissingHashes; it is required to + # match. If --require-hashes is on, we are satisfied by any + # hash in `hashes` matching: a URL-based or an option-based + # one; no internet-sourced hash will be in `hashes`. + if hashes: + hashes.check_against_path(link_path) + + # If a download dir is specified, is the file already there and valid? + already_downloaded_path = None + if download_dir: + already_downloaded_path = _check_download_dir(link, + download_dir, + hashes) + + if already_downloaded_path: + from_path = already_downloaded_path + else: + from_path = link_path + + content_type = mimetypes.guess_type(from_path)[0] + + # unpack the archive to the build dir location. even when only downloading + # archives, they have to be unpacked to parse dependencies + unpack_file(from_path, location, content_type, link) + + # a download dir is specified and not already downloaded + if download_dir and not already_downloaded_path: + _copy_file(from_path, download_dir, link) + + +def _copy_dist_from_dir(link_path, location): + """Copy distribution files in `link_path` to `location`. + + Invoked when user requests to install a local directory. E.g.: + + pip install . + pip install ~/dev/git-repos/python-prompt-toolkit + + """ + + # Note: This is currently VERY SLOW if you have a lot of data in the + # directory, because it copies everything with `shutil.copytree`. + # What it should really do is build an sdist and install that. + # See https://github.com/pypa/pip/issues/2195 + + if os.path.isdir(location): + rmtree(location) + + # build an sdist + setup_py = 'setup.py' + sdist_args = [sys.executable] + sdist_args.append('-c') + sdist_args.append(SETUPTOOLS_SHIM % setup_py) + sdist_args.append('sdist') + sdist_args += ['--dist-dir', location] + logger.info('Running setup.py sdist for %s', link_path) + + with indent_log(): + call_subprocess(sdist_args, cwd=link_path, show_stdout=False) + + # unpack sdist into `location` + sdist = os.path.join(location, os.listdir(location)[0]) + logger.info('Unpacking sdist %s into %s', sdist, location) + unpack_file(sdist, location, content_type=None, link=None) + + +class PipXmlrpcTransport(xmlrpc_client.Transport): + """Provide a `xmlrpclib.Transport` implementation via a `PipSession` + object. + """ + + def __init__(self, index_url, session, use_datetime=False): + xmlrpc_client.Transport.__init__(self, use_datetime) + index_parts = urllib_parse.urlparse(index_url) + self._scheme = index_parts.scheme + self._session = session + + def request(self, host, handler, request_body, verbose=False): + parts = (self._scheme, host, handler, None, None, None) + url = urllib_parse.urlunparse(parts) + try: + headers = {'Content-Type': 'text/xml'} + response = self._session.post(url, data=request_body, + headers=headers, stream=True) + response.raise_for_status() + self.verbose = verbose + return self.parse_response(response.raw) + except requests.HTTPError as exc: + logger.critical( + "HTTP error %s while getting %s", + exc.response.status_code, url, + ) + raise + + +def unpack_url(link, location, download_dir=None, + only_download=False, session=None, hashes=None): + """Unpack link. + If link is a VCS link: + if only_download, export into download_dir and ignore location + else unpack into location + for other types of link: + - unpack into location + - if download_dir, copy the file into download_dir + - if only_download, mark location for deletion + + :param hashes: A Hashes object, one of whose embedded hashes must match, + or HashMismatch will be raised. If the Hashes is empty, no matches are + required, and unhashable types of requirements (like VCS ones, which + would ordinarily raise HashUnsupported) are allowed. + """ + # non-editable vcs urls + if is_vcs_url(link): + unpack_vcs_link(link, location) + + # file urls + elif is_file_url(link): + unpack_file_url(link, location, download_dir, hashes=hashes) + + # http urls + else: + if session is None: + session = PipSession() + + unpack_http_url( + link, + location, + download_dir, + session, + hashes=hashes + ) + if only_download: + write_delete_marker_file(location) + + +def _download_http_url(link, session, temp_dir, hashes): + """Download link url into temp_dir using provided session""" + target_url = link.url.split('#', 1)[0] + try: + resp = session.get( + target_url, + # We use Accept-Encoding: identity here because requests + # defaults to accepting compressed responses. This breaks in + # a variety of ways depending on how the server is configured. + # - Some servers will notice that the file isn't a compressible + # file and will leave the file alone and with an empty + # Content-Encoding + # - Some servers will notice that the file is already + # compressed and will leave the file alone and will add a + # Content-Encoding: gzip header + # - Some servers won't notice anything at all and will take + # a file that's already been compressed and compress it again + # and set the Content-Encoding: gzip header + # By setting this to request only the identity encoding We're + # hoping to eliminate the third case. Hopefully there does not + # exist a server which when given a file will notice it is + # already compressed and that you're not asking for a + # compressed file and will then decompress it before sending + # because if that's the case I don't think it'll ever be + # possible to make this work. + headers={"Accept-Encoding": "identity"}, + stream=True, + ) + resp.raise_for_status() + except requests.HTTPError as exc: + logger.critical( + "HTTP error %s while getting %s", exc.response.status_code, link, + ) + raise + + content_type = resp.headers.get('content-type', '') + filename = link.filename # fallback + # Have a look at the Content-Disposition header for a better guess + content_disposition = resp.headers.get('content-disposition') + if content_disposition: + type, params = cgi.parse_header(content_disposition) + # We use ``or`` here because we don't want to use an "empty" value + # from the filename param. + filename = params.get('filename') or filename + ext = splitext(filename)[1] + if not ext: + ext = mimetypes.guess_extension(content_type) + if ext: + filename += ext + if not ext and link.url != resp.url: + ext = os.path.splitext(resp.url)[1] + if ext: + filename += ext + file_path = os.path.join(temp_dir, filename) + with open(file_path, 'wb') as content_file: + _download_url(resp, link, content_file, hashes) + return file_path, content_type + + +def _check_download_dir(link, download_dir, hashes): + """ Check download_dir for previously downloaded file with correct hash + If a correct file is found return its path else None + """ + download_path = os.path.join(download_dir, link.filename) + if os.path.exists(download_path): + # If already downloaded, does its hash match? + logger.info('File was already downloaded %s', download_path) + if hashes: + try: + hashes.check_against_path(download_path) + except HashMismatch: + logger.warning( + 'Previously-downloaded file %s has bad hash. ' + 'Re-downloading.', + download_path + ) + os.unlink(download_path) + return None + return download_path + return None diff --git a/week-0/day-3/venv/lib/python3.6/site-packages/pip/exceptions.py b/week-0/day-3/venv/lib/python3.6/site-packages/pip/exceptions.py new file mode 100644 index 00000000..50b527f9 --- /dev/null +++ b/week-0/day-3/venv/lib/python3.6/site-packages/pip/exceptions.py @@ -0,0 +1,244 @@ +"""Exceptions used throughout package""" +from __future__ import absolute_import + +from itertools import chain, groupby, repeat + +from pip._vendor.six import iteritems + + +class PipError(Exception): + """Base pip exception""" + + +class InstallationError(PipError): + """General exception during installation""" + + +class UninstallationError(PipError): + """General exception during uninstallation""" + + +class DistributionNotFound(InstallationError): + """Raised when a distribution cannot be found to satisfy a requirement""" + + +class RequirementsFileParseError(InstallationError): + """Raised when a general error occurs parsing a requirements file line.""" + + +class BestVersionAlreadyInstalled(PipError): + """Raised when the most up-to-date version of a package is already + installed.""" + + +class BadCommand(PipError): + """Raised when virtualenv or a command is not found""" + + +class CommandError(PipError): + """Raised when there is an error in command-line arguments""" + + +class PreviousBuildDirError(PipError): + """Raised when there's a previous conflicting build directory""" + + +class InvalidWheelFilename(InstallationError): + """Invalid wheel filename.""" + + +class UnsupportedWheel(InstallationError): + """Unsupported wheel.""" + + +class HashErrors(InstallationError): + """Multiple HashError instances rolled into one for reporting""" + + def __init__(self): + self.errors = [] + + def append(self, error): + self.errors.append(error) + + def __str__(self): + lines = [] + self.errors.sort(key=lambda e: e.order) + for cls, errors_of_cls in groupby(self.errors, lambda e: e.__class__): + lines.append(cls.head) + lines.extend(e.body() for e in errors_of_cls) + if lines: + return '\n'.join(lines) + + def __nonzero__(self): + return bool(self.errors) + + def __bool__(self): + return self.__nonzero__() + + +class HashError(InstallationError): + """ + A failure to verify a package against known-good hashes + + :cvar order: An int sorting hash exception classes by difficulty of + recovery (lower being harder), so the user doesn't bother fretting + about unpinned packages when he has deeper issues, like VCS + dependencies, to deal with. Also keeps error reports in a + deterministic order. + :cvar head: A section heading for display above potentially many + exceptions of this kind + :ivar req: The InstallRequirement that triggered this error. This is + pasted on after the exception is instantiated, because it's not + typically available earlier. + + """ + req = None + head = '' + + def body(self): + """Return a summary of me for display under the heading. + + This default implementation simply prints a description of the + triggering requirement. + + :param req: The InstallRequirement that provoked this error, with + populate_link() having already been called + + """ + return ' %s' % self._requirement_name() + + def __str__(self): + return '%s\n%s' % (self.head, self.body()) + + def _requirement_name(self): + """Return a description of the requirement that triggered me. + + This default implementation returns long description of the req, with + line numbers + + """ + return str(self.req) if self.req else 'unknown package' + + +class VcsHashUnsupported(HashError): + """A hash was provided for a version-control-system-based requirement, but + we don't have a method for hashing those.""" + + order = 0 + head = ("Can't verify hashes for these requirements because we don't " + "have a way to hash version control repositories:") + + +class DirectoryUrlHashUnsupported(HashError): + """A hash was provided for a version-control-system-based requirement, but + we don't have a method for hashing those.""" + + order = 1 + head = ("Can't verify hashes for these file:// requirements because they " + "point to directories:") + + +class HashMissing(HashError): + """A hash was needed for a requirement but is absent.""" + + order = 2 + head = ('Hashes are required in --require-hashes mode, but they are ' + 'missing from some requirements. Here is a list of those ' + 'requirements along with the hashes their downloaded archives ' + 'actually had. Add lines like these to your requirements files to ' + 'prevent tampering. (If you did not enable --require-hashes ' + 'manually, note that it turns on automatically when any package ' + 'has a hash.)') + + def __init__(self, gotten_hash): + """ + :param gotten_hash: The hash of the (possibly malicious) archive we + just downloaded + """ + self.gotten_hash = gotten_hash + + def body(self): + from pip.utils.hashes import FAVORITE_HASH # Dodge circular import. + + package = None + if self.req: + # In the case of URL-based requirements, display the original URL + # seen in the requirements file rather than the package name, + # so the output can be directly copied into the requirements file. + package = (self.req.original_link if self.req.original_link + # In case someone feeds something downright stupid + # to InstallRequirement's constructor. + else getattr(self.req, 'req', None)) + return ' %s --hash=%s:%s' % (package or 'unknown package', + FAVORITE_HASH, + self.gotten_hash) + + +class HashUnpinned(HashError): + """A requirement had a hash specified but was not pinned to a specific + version.""" + + order = 3 + head = ('In --require-hashes mode, all requirements must have their ' + 'versions pinned with ==. These do not:') + + +class HashMismatch(HashError): + """ + Distribution file hash values don't match. + + :ivar package_name: The name of the package that triggered the hash + mismatch. Feel free to write to this after the exception is raise to + improve its error message. + + """ + order = 4 + head = ('THESE PACKAGES DO NOT MATCH THE HASHES FROM THE REQUIREMENTS ' + 'FILE. If you have updated the package versions, please update ' + 'the hashes. Otherwise, examine the package contents carefully; ' + 'someone may have tampered with them.') + + def __init__(self, allowed, gots): + """ + :param allowed: A dict of algorithm names pointing to lists of allowed + hex digests + :param gots: A dict of algorithm names pointing to hashes we + actually got from the files under suspicion + """ + self.allowed = allowed + self.gots = gots + + def body(self): + return ' %s:\n%s' % (self._requirement_name(), + self._hash_comparison()) + + def _hash_comparison(self): + """ + Return a comparison of actual and expected hash values. + + Example:: + + Expected sha256 abcdeabcdeabcdeabcdeabcdeabcdeabcdeabcdeabcde + or 123451234512345123451234512345123451234512345 + Got bcdefbcdefbcdefbcdefbcdefbcdefbcdefbcdefbcdef + + """ + def hash_then_or(hash_name): + # For now, all the decent hashes have 6-char names, so we can get + # away with hard-coding space literals. + return chain([hash_name], repeat(' or')) + + lines = [] + for hash_name, expecteds in iteritems(self.allowed): + prefix = hash_then_or(hash_name) + lines.extend((' Expected %s %s' % (next(prefix), e)) + for e in expecteds) + lines.append(' Got %s\n' % + self.gots[hash_name].hexdigest()) + prefix = ' or' + return '\n'.join(lines) + + +class UnsupportedPythonVersion(InstallationError): + """Unsupported python version according to Requires-Python package + metadata.""" diff --git a/week-0/day-3/venv/lib/python3.6/site-packages/pip/index.py b/week-0/day-3/venv/lib/python3.6/site-packages/pip/index.py new file mode 100644 index 00000000..acd90d6c --- /dev/null +++ b/week-0/day-3/venv/lib/python3.6/site-packages/pip/index.py @@ -0,0 +1,1102 @@ +"""Routines related to PyPI, indexes""" +from __future__ import absolute_import + +import logging +import cgi +from collections import namedtuple +import itertools +import sys +import os +import re +import mimetypes +import posixpath +import warnings + +from pip._vendor.six.moves.urllib import parse as urllib_parse +from pip._vendor.six.moves.urllib import request as urllib_request + +from pip.compat import ipaddress +from pip.utils import ( + cached_property, splitext, normalize_path, + ARCHIVE_EXTENSIONS, SUPPORTED_EXTENSIONS, +) +from pip.utils.deprecation import RemovedInPip10Warning +from pip.utils.logging import indent_log +from pip.utils.packaging import check_requires_python +from pip.exceptions import ( + DistributionNotFound, BestVersionAlreadyInstalled, InvalidWheelFilename, + UnsupportedWheel, +) +from pip.download import HAS_TLS, is_url, path_to_url, url_to_path +from pip.wheel import Wheel, wheel_ext +from pip.pep425tags import get_supported +from pip._vendor import html5lib, requests, six +from pip._vendor.packaging.version import parse as parse_version +from pip._vendor.packaging.utils import canonicalize_name +from pip._vendor.packaging import specifiers +from pip._vendor.requests.exceptions import HTTPError, SSLError +from pip._vendor.distlib.compat import unescape + + +__all__ = ['FormatControl', 'fmt_ctl_handle_mutual_exclude', 'PackageFinder'] + + +SECURE_ORIGINS = [ + # protocol, hostname, port + # Taken from Chrome's list of secure origins (See: http://bit.ly/1qrySKC) + ("https", "*", "*"), + ("*", "localhost", "*"), + ("*", "127.0.0.0/8", "*"), + ("*", "::1/128", "*"), + ("file", "*", None), + # ssh is always secure. + ("ssh", "*", "*"), +] + + +logger = logging.getLogger(__name__) + + +class InstallationCandidate(object): + + def __init__(self, project, version, location): + self.project = project + self.version = parse_version(version) + self.location = location + self._key = (self.project, self.version, self.location) + + def __repr__(self): + return "".format( + self.project, self.version, self.location, + ) + + def __hash__(self): + return hash(self._key) + + def __lt__(self, other): + return self._compare(other, lambda s, o: s < o) + + def __le__(self, other): + return self._compare(other, lambda s, o: s <= o) + + def __eq__(self, other): + return self._compare(other, lambda s, o: s == o) + + def __ge__(self, other): + return self._compare(other, lambda s, o: s >= o) + + def __gt__(self, other): + return self._compare(other, lambda s, o: s > o) + + def __ne__(self, other): + return self._compare(other, lambda s, o: s != o) + + def _compare(self, other, method): + if not isinstance(other, InstallationCandidate): + return NotImplemented + + return method(self._key, other._key) + + +class PackageFinder(object): + """This finds packages. + + This is meant to match easy_install's technique for looking for + packages, by reading pages and looking for appropriate links. + """ + + def __init__(self, find_links, index_urls, allow_all_prereleases=False, + trusted_hosts=None, process_dependency_links=False, + session=None, format_control=None, platform=None, + versions=None, abi=None, implementation=None): + """Create a PackageFinder. + + :param format_control: A FormatControl object or None. Used to control + the selection of source packages / binary packages when consulting + the index and links. + :param platform: A string or None. If None, searches for packages + that are supported by the current system. Otherwise, will find + packages that can be built on the platform passed in. These + packages will only be downloaded for distribution: they will + not be built locally. + :param versions: A list of strings or None. This is passed directly + to pep425tags.py in the get_supported() method. + :param abi: A string or None. This is passed directly + to pep425tags.py in the get_supported() method. + :param implementation: A string or None. This is passed directly + to pep425tags.py in the get_supported() method. + """ + if session is None: + raise TypeError( + "PackageFinder() missing 1 required keyword argument: " + "'session'" + ) + + # Build find_links. If an argument starts with ~, it may be + # a local file relative to a home directory. So try normalizing + # it and if it exists, use the normalized version. + # This is deliberately conservative - it might be fine just to + # blindly normalize anything starting with a ~... + self.find_links = [] + for link in find_links: + if link.startswith('~'): + new_link = normalize_path(link) + if os.path.exists(new_link): + link = new_link + self.find_links.append(link) + + self.index_urls = index_urls + self.dependency_links = [] + + # These are boring links that have already been logged somehow: + self.logged_links = set() + + self.format_control = format_control or FormatControl(set(), set()) + + # Domains that we won't emit warnings for when not using HTTPS + self.secure_origins = [ + ("*", host, "*") + for host in (trusted_hosts if trusted_hosts else []) + ] + + # Do we want to allow _all_ pre-releases? + self.allow_all_prereleases = allow_all_prereleases + + # Do we process dependency links? + self.process_dependency_links = process_dependency_links + + # The Session we'll use to make requests + self.session = session + + # The valid tags to check potential found wheel candidates against + self.valid_tags = get_supported( + versions=versions, + platform=platform, + abi=abi, + impl=implementation, + ) + + # If we don't have TLS enabled, then WARN if anyplace we're looking + # relies on TLS. + if not HAS_TLS: + for link in itertools.chain(self.index_urls, self.find_links): + parsed = urllib_parse.urlparse(link) + if parsed.scheme == "https": + logger.warning( + "pip is configured with locations that require " + "TLS/SSL, however the ssl module in Python is not " + "available." + ) + break + + def add_dependency_links(self, links): + # # FIXME: this shouldn't be global list this, it should only + # # apply to requirements of the package that specifies the + # # dependency_links value + # # FIXME: also, we should track comes_from (i.e., use Link) + if self.process_dependency_links: + warnings.warn( + "Dependency Links processing has been deprecated and will be " + "removed in a future release.", + RemovedInPip10Warning, + ) + self.dependency_links.extend(links) + + @staticmethod + def _sort_locations(locations, expand_dir=False): + """ + Sort locations into "files" (archives) and "urls", and return + a pair of lists (files,urls) + """ + files = [] + urls = [] + + # puts the url for the given file path into the appropriate list + def sort_path(path): + url = path_to_url(path) + if mimetypes.guess_type(url, strict=False)[0] == 'text/html': + urls.append(url) + else: + files.append(url) + + for url in locations: + + is_local_path = os.path.exists(url) + is_file_url = url.startswith('file:') + + if is_local_path or is_file_url: + if is_local_path: + path = url + else: + path = url_to_path(url) + if os.path.isdir(path): + if expand_dir: + path = os.path.realpath(path) + for item in os.listdir(path): + sort_path(os.path.join(path, item)) + elif is_file_url: + urls.append(url) + elif os.path.isfile(path): + sort_path(path) + else: + logger.warning( + "Url '%s' is ignored: it is neither a file " + "nor a directory.", url) + elif is_url(url): + # Only add url with clear scheme + urls.append(url) + else: + logger.warning( + "Url '%s' is ignored. It is either a non-existing " + "path or lacks a specific scheme.", url) + + return files, urls + + def _candidate_sort_key(self, candidate): + """ + Function used to generate link sort key for link tuples. + The greater the return value, the more preferred it is. + If not finding wheels, then sorted by version only. + If finding wheels, then the sort order is by version, then: + 1. existing installs + 2. wheels ordered via Wheel.support_index_min(self.valid_tags) + 3. source archives + Note: it was considered to embed this logic into the Link + comparison operators, but then different sdist links + with the same version, would have to be considered equal + """ + support_num = len(self.valid_tags) + if candidate.location.is_wheel: + # can raise InvalidWheelFilename + wheel = Wheel(candidate.location.filename) + if not wheel.supported(self.valid_tags): + raise UnsupportedWheel( + "%s is not a supported wheel for this platform. It " + "can't be sorted." % wheel.filename + ) + pri = -(wheel.support_index_min(self.valid_tags)) + else: # sdist + pri = -(support_num) + return (candidate.version, pri) + + def _validate_secure_origin(self, logger, location): + # Determine if this url used a secure transport mechanism + parsed = urllib_parse.urlparse(str(location)) + origin = (parsed.scheme, parsed.hostname, parsed.port) + + # The protocol to use to see if the protocol matches. + # Don't count the repository type as part of the protocol: in + # cases such as "git+ssh", only use "ssh". (I.e., Only verify against + # the last scheme.) + protocol = origin[0].rsplit('+', 1)[-1] + + # Determine if our origin is a secure origin by looking through our + # hardcoded list of secure origins, as well as any additional ones + # configured on this PackageFinder instance. + for secure_origin in (SECURE_ORIGINS + self.secure_origins): + if protocol != secure_origin[0] and secure_origin[0] != "*": + continue + + try: + # We need to do this decode dance to ensure that we have a + # unicode object, even on Python 2.x. + addr = ipaddress.ip_address( + origin[1] + if ( + isinstance(origin[1], six.text_type) or + origin[1] is None + ) + else origin[1].decode("utf8") + ) + network = ipaddress.ip_network( + secure_origin[1] + if isinstance(secure_origin[1], six.text_type) + else secure_origin[1].decode("utf8") + ) + except ValueError: + # We don't have both a valid address or a valid network, so + # we'll check this origin against hostnames. + if (origin[1] and + origin[1].lower() != secure_origin[1].lower() and + secure_origin[1] != "*"): + continue + else: + # We have a valid address and network, so see if the address + # is contained within the network. + if addr not in network: + continue + + # Check to see if the port patches + if (origin[2] != secure_origin[2] and + secure_origin[2] != "*" and + secure_origin[2] is not None): + continue + + # If we've gotten here, then this origin matches the current + # secure origin and we should return True + return True + + # If we've gotten to this point, then the origin isn't secure and we + # will not accept it as a valid location to search. We will however + # log a warning that we are ignoring it. + logger.warning( + "The repository located at %s is not a trusted or secure host and " + "is being ignored. If this repository is available via HTTPS it " + "is recommended to use HTTPS instead, otherwise you may silence " + "this warning and allow it anyways with '--trusted-host %s'.", + parsed.hostname, + parsed.hostname, + ) + + return False + + def _get_index_urls_locations(self, project_name): + """Returns the locations found via self.index_urls + + Checks the url_name on the main (first in the list) index and + use this url_name to produce all locations + """ + + def mkurl_pypi_url(url): + loc = posixpath.join( + url, + urllib_parse.quote(canonicalize_name(project_name))) + # For maximum compatibility with easy_install, ensure the path + # ends in a trailing slash. Although this isn't in the spec + # (and PyPI can handle it without the slash) some other index + # implementations might break if they relied on easy_install's + # behavior. + if not loc.endswith('/'): + loc = loc + '/' + return loc + + return [mkurl_pypi_url(url) for url in self.index_urls] + + def find_all_candidates(self, project_name): + """Find all available InstallationCandidate for project_name + + This checks index_urls, find_links and dependency_links. + All versions found are returned as an InstallationCandidate list. + + See _link_package_versions for details on which files are accepted + """ + index_locations = self._get_index_urls_locations(project_name) + index_file_loc, index_url_loc = self._sort_locations(index_locations) + fl_file_loc, fl_url_loc = self._sort_locations( + self.find_links, expand_dir=True) + dep_file_loc, dep_url_loc = self._sort_locations(self.dependency_links) + + file_locations = ( + Link(url) for url in itertools.chain( + index_file_loc, fl_file_loc, dep_file_loc) + ) + + # We trust every url that the user has given us whether it was given + # via --index-url or --find-links + # We explicitly do not trust links that came from dependency_links + # We want to filter out any thing which does not have a secure origin. + url_locations = [ + link for link in itertools.chain( + (Link(url) for url in index_url_loc), + (Link(url) for url in fl_url_loc), + (Link(url) for url in dep_url_loc), + ) + if self._validate_secure_origin(logger, link) + ] + + logger.debug('%d location(s) to search for versions of %s:', + len(url_locations), project_name) + + for location in url_locations: + logger.debug('* %s', location) + + canonical_name = canonicalize_name(project_name) + formats = fmt_ctl_formats(self.format_control, canonical_name) + search = Search(project_name, canonical_name, formats) + find_links_versions = self._package_versions( + # We trust every directly linked archive in find_links + (Link(url, '-f') for url in self.find_links), + search + ) + + page_versions = [] + for page in self._get_pages(url_locations, project_name): + logger.debug('Analyzing links from page %s', page.url) + with indent_log(): + page_versions.extend( + self._package_versions(page.links, search) + ) + + dependency_versions = self._package_versions( + (Link(url) for url in self.dependency_links), search + ) + if dependency_versions: + logger.debug( + 'dependency_links found: %s', + ', '.join([ + version.location.url for version in dependency_versions + ]) + ) + + file_versions = self._package_versions(file_locations, search) + if file_versions: + file_versions.sort(reverse=True) + logger.debug( + 'Local files found: %s', + ', '.join([ + url_to_path(candidate.location.url) + for candidate in file_versions + ]) + ) + + # This is an intentional priority ordering + return ( + file_versions + find_links_versions + page_versions + + dependency_versions + ) + + def find_requirement(self, req, upgrade): + """Try to find a Link matching req + + Expects req, an InstallRequirement and upgrade, a boolean + Returns a Link if found, + Raises DistributionNotFound or BestVersionAlreadyInstalled otherwise + """ + all_candidates = self.find_all_candidates(req.name) + + # Filter out anything which doesn't match our specifier + compatible_versions = set( + req.specifier.filter( + # We turn the version object into a str here because otherwise + # when we're debundled but setuptools isn't, Python will see + # packaging.version.Version and + # pkg_resources._vendor.packaging.version.Version as different + # types. This way we'll use a str as a common data interchange + # format. If we stop using the pkg_resources provided specifier + # and start using our own, we can drop the cast to str(). + [str(c.version) for c in all_candidates], + prereleases=( + self.allow_all_prereleases + if self.allow_all_prereleases else None + ), + ) + ) + applicable_candidates = [ + # Again, converting to str to deal with debundling. + c for c in all_candidates if str(c.version) in compatible_versions + ] + + if applicable_candidates: + best_candidate = max(applicable_candidates, + key=self._candidate_sort_key) + else: + best_candidate = None + + if req.satisfied_by is not None: + installed_version = parse_version(req.satisfied_by.version) + else: + installed_version = None + + if installed_version is None and best_candidate is None: + logger.critical( + 'Could not find a version that satisfies the requirement %s ' + '(from versions: %s)', + req, + ', '.join( + sorted( + set(str(c.version) for c in all_candidates), + key=parse_version, + ) + ) + ) + + raise DistributionNotFound( + 'No matching distribution found for %s' % req + ) + + best_installed = False + if installed_version and ( + best_candidate is None or + best_candidate.version <= installed_version): + best_installed = True + + if not upgrade and installed_version is not None: + if best_installed: + logger.debug( + 'Existing installed version (%s) is most up-to-date and ' + 'satisfies requirement', + installed_version, + ) + else: + logger.debug( + 'Existing installed version (%s) satisfies requirement ' + '(most up-to-date version is %s)', + installed_version, + best_candidate.version, + ) + return None + + if best_installed: + # We have an existing version, and its the best version + logger.debug( + 'Installed version (%s) is most up-to-date (past versions: ' + '%s)', + installed_version, + ', '.join(sorted(compatible_versions, key=parse_version)) or + "none", + ) + raise BestVersionAlreadyInstalled + + logger.debug( + 'Using version %s (newest of versions: %s)', + best_candidate.version, + ', '.join(sorted(compatible_versions, key=parse_version)) + ) + return best_candidate.location + + def _get_pages(self, locations, project_name): + """ + Yields (page, page_url) from the given locations, skipping + locations that have errors. + """ + seen = set() + for location in locations: + if location in seen: + continue + seen.add(location) + + page = self._get_page(location) + if page is None: + continue + + yield page + + _py_version_re = re.compile(r'-py([123]\.?[0-9]?)$') + + def _sort_links(self, links): + """ + Returns elements of links in order, non-egg links first, egg links + second, while eliminating duplicates + """ + eggs, no_eggs = [], [] + seen = set() + for link in links: + if link not in seen: + seen.add(link) + if link.egg_fragment: + eggs.append(link) + else: + no_eggs.append(link) + return no_eggs + eggs + + def _package_versions(self, links, search): + result = [] + for link in self._sort_links(links): + v = self._link_package_versions(link, search) + if v is not None: + result.append(v) + return result + + def _log_skipped_link(self, link, reason): + if link not in self.logged_links: + logger.debug('Skipping link %s; %s', link, reason) + self.logged_links.add(link) + + def _link_package_versions(self, link, search): + """Return an InstallationCandidate or None""" + version = None + if link.egg_fragment: + egg_info = link.egg_fragment + ext = link.ext + else: + egg_info, ext = link.splitext() + if not ext: + self._log_skipped_link(link, 'not a file') + return + if ext not in SUPPORTED_EXTENSIONS: + self._log_skipped_link( + link, 'unsupported archive format: %s' % ext) + return + if "binary" not in search.formats and ext == wheel_ext: + self._log_skipped_link( + link, 'No binaries permitted for %s' % search.supplied) + return + if "macosx10" in link.path and ext == '.zip': + self._log_skipped_link(link, 'macosx10 one') + return + if ext == wheel_ext: + try: + wheel = Wheel(link.filename) + except InvalidWheelFilename: + self._log_skipped_link(link, 'invalid wheel filename') + return + if canonicalize_name(wheel.name) != search.canonical: + self._log_skipped_link( + link, 'wrong project name (not %s)' % search.supplied) + return + + if not wheel.supported(self.valid_tags): + self._log_skipped_link( + link, 'it is not compatible with this Python') + return + + version = wheel.version + + # This should be up by the search.ok_binary check, but see issue 2700. + if "source" not in search.formats and ext != wheel_ext: + self._log_skipped_link( + link, 'No sources permitted for %s' % search.supplied) + return + + if not version: + version = egg_info_matches(egg_info, search.supplied, link) + if version is None: + self._log_skipped_link( + link, 'wrong project name (not %s)' % search.supplied) + return + + match = self._py_version_re.search(version) + if match: + version = version[:match.start()] + py_version = match.group(1) + if py_version != sys.version[:3]: + self._log_skipped_link( + link, 'Python version is incorrect') + return + try: + support_this_python = check_requires_python(link.requires_python) + except specifiers.InvalidSpecifier: + logger.debug("Package %s has an invalid Requires-Python entry: %s", + link.filename, link.requires_python) + support_this_python = True + + if not support_this_python: + logger.debug("The package %s is incompatible with the python" + "version in use. Acceptable python versions are:%s", + link, link.requires_python) + return + logger.debug('Found link %s, version: %s', link, version) + + return InstallationCandidate(search.supplied, version, link) + + def _get_page(self, link): + return HTMLPage.get_page(link, session=self.session) + + +def egg_info_matches( + egg_info, search_name, link, + _egg_info_re=re.compile(r'([a-z0-9_.]+)-([a-z0-9_.!+-]+)', re.I)): + """Pull the version part out of a string. + + :param egg_info: The string to parse. E.g. foo-2.1 + :param search_name: The name of the package this belongs to. None to + infer the name. Note that this cannot unambiguously parse strings + like foo-2-2 which might be foo, 2-2 or foo-2, 2. + :param link: The link the string came from, for logging on failure. + """ + match = _egg_info_re.search(egg_info) + if not match: + logger.debug('Could not parse version from link: %s', link) + return None + if search_name is None: + full_match = match.group(0) + return full_match[full_match.index('-'):] + name = match.group(0).lower() + # To match the "safe" name that pkg_resources creates: + name = name.replace('_', '-') + # project name and version must be separated by a dash + look_for = search_name.lower() + "-" + if name.startswith(look_for): + return match.group(0)[len(look_for):] + else: + return None + + +class HTMLPage(object): + """Represents one page, along with its URL""" + + def __init__(self, content, url, headers=None): + # Determine if we have any encoding information in our headers + encoding = None + if headers and "Content-Type" in headers: + content_type, params = cgi.parse_header(headers["Content-Type"]) + + if "charset" in params: + encoding = params['charset'] + + self.content = content + self.parsed = html5lib.parse( + self.content, + transport_encoding=encoding, + namespaceHTMLElements=False, + ) + self.url = url + self.headers = headers + + def __str__(self): + return self.url + + @classmethod + def get_page(cls, link, skip_archives=True, session=None): + if session is None: + raise TypeError( + "get_page() missing 1 required keyword argument: 'session'" + ) + + url = link.url + url = url.split('#', 1)[0] + + # Check for VCS schemes that do not support lookup as web pages. + from pip.vcs import VcsSupport + for scheme in VcsSupport.schemes: + if url.lower().startswith(scheme) and url[len(scheme)] in '+:': + logger.debug('Cannot look at %s URL %s', scheme, link) + return None + + try: + if skip_archives: + filename = link.filename + for bad_ext in ARCHIVE_EXTENSIONS: + if filename.endswith(bad_ext): + content_type = cls._get_content_type( + url, session=session, + ) + if content_type.lower().startswith('text/html'): + break + else: + logger.debug( + 'Skipping page %s because of Content-Type: %s', + link, + content_type, + ) + return + + logger.debug('Getting page %s', url) + + # Tack index.html onto file:// URLs that point to directories + (scheme, netloc, path, params, query, fragment) = \ + urllib_parse.urlparse(url) + if (scheme == 'file' and + os.path.isdir(urllib_request.url2pathname(path))): + # add trailing slash if not present so urljoin doesn't trim + # final segment + if not url.endswith('/'): + url += '/' + url = urllib_parse.urljoin(url, 'index.html') + logger.debug(' file: URL is directory, getting %s', url) + + resp = session.get( + url, + headers={ + "Accept": "text/html", + "Cache-Control": "max-age=600", + }, + ) + resp.raise_for_status() + + # The check for archives above only works if the url ends with + # something that looks like an archive. However that is not a + # requirement of an url. Unless we issue a HEAD request on every + # url we cannot know ahead of time for sure if something is HTML + # or not. However we can check after we've downloaded it. + content_type = resp.headers.get('Content-Type', 'unknown') + if not content_type.lower().startswith("text/html"): + logger.debug( + 'Skipping page %s because of Content-Type: %s', + link, + content_type, + ) + return + + inst = cls(resp.content, resp.url, resp.headers) + except HTTPError as exc: + cls._handle_fail(link, exc, url) + except SSLError as exc: + reason = ("There was a problem confirming the ssl certificate: " + "%s" % exc) + cls._handle_fail(link, reason, url, meth=logger.info) + except requests.ConnectionError as exc: + cls._handle_fail(link, "connection error: %s" % exc, url) + except requests.Timeout: + cls._handle_fail(link, "timed out", url) + else: + return inst + + @staticmethod + def _handle_fail(link, reason, url, meth=None): + if meth is None: + meth = logger.debug + + meth("Could not fetch URL %s: %s - skipping", link, reason) + + @staticmethod + def _get_content_type(url, session): + """Get the Content-Type of the given url, using a HEAD request""" + scheme, netloc, path, query, fragment = urllib_parse.urlsplit(url) + if scheme not in ('http', 'https'): + # FIXME: some warning or something? + # assertion error? + return '' + + resp = session.head(url, allow_redirects=True) + resp.raise_for_status() + + return resp.headers.get("Content-Type", "") + + @cached_property + def base_url(self): + bases = [ + x for x in self.parsed.findall(".//base") + if x.get("href") is not None + ] + if bases and bases[0].get("href"): + return bases[0].get("href") + else: + return self.url + + @property + def links(self): + """Yields all links in the page""" + for anchor in self.parsed.findall(".//a"): + if anchor.get("href"): + href = anchor.get("href") + url = self.clean_link( + urllib_parse.urljoin(self.base_url, href) + ) + pyrequire = anchor.get('data-requires-python') + pyrequire = unescape(pyrequire) if pyrequire else None + yield Link(url, self, requires_python=pyrequire) + + _clean_re = re.compile(r'[^a-z0-9$&+,/:;=?@.#%_\\|-]', re.I) + + def clean_link(self, url): + """Makes sure a link is fully encoded. That is, if a ' ' shows up in + the link, it will be rewritten to %20 (while not over-quoting + % or other characters).""" + return self._clean_re.sub( + lambda match: '%%%2x' % ord(match.group(0)), url) + + +class Link(object): + + def __init__(self, url, comes_from=None, requires_python=None): + """ + Object representing a parsed link from https://pypi.python.org/simple/* + + url: + url of the resource pointed to (href of the link) + comes_from: + instance of HTMLPage where the link was found, or string. + requires_python: + String containing the `Requires-Python` metadata field, specified + in PEP 345. This may be specified by a data-requires-python + attribute in the HTML link tag, as described in PEP 503. + """ + + # url can be a UNC windows share + if url.startswith('\\\\'): + url = path_to_url(url) + + self.url = url + self.comes_from = comes_from + self.requires_python = requires_python if requires_python else None + + def __str__(self): + if self.requires_python: + rp = ' (requires-python:%s)' % self.requires_python + else: + rp = '' + if self.comes_from: + return '%s (from %s)%s' % (self.url, self.comes_from, rp) + else: + return str(self.url) + + def __repr__(self): + return '' % self + + def __eq__(self, other): + if not isinstance(other, Link): + return NotImplemented + return self.url == other.url + + def __ne__(self, other): + if not isinstance(other, Link): + return NotImplemented + return self.url != other.url + + def __lt__(self, other): + if not isinstance(other, Link): + return NotImplemented + return self.url < other.url + + def __le__(self, other): + if not isinstance(other, Link): + return NotImplemented + return self.url <= other.url + + def __gt__(self, other): + if not isinstance(other, Link): + return NotImplemented + return self.url > other.url + + def __ge__(self, other): + if not isinstance(other, Link): + return NotImplemented + return self.url >= other.url + + def __hash__(self): + return hash(self.url) + + @property + def filename(self): + _, netloc, path, _, _ = urllib_parse.urlsplit(self.url) + name = posixpath.basename(path.rstrip('/')) or netloc + name = urllib_parse.unquote(name) + assert name, ('URL %r produced no filename' % self.url) + return name + + @property + def scheme(self): + return urllib_parse.urlsplit(self.url)[0] + + @property + def netloc(self): + return urllib_parse.urlsplit(self.url)[1] + + @property + def path(self): + return urllib_parse.unquote(urllib_parse.urlsplit(self.url)[2]) + + def splitext(self): + return splitext(posixpath.basename(self.path.rstrip('/'))) + + @property + def ext(self): + return self.splitext()[1] + + @property + def url_without_fragment(self): + scheme, netloc, path, query, fragment = urllib_parse.urlsplit(self.url) + return urllib_parse.urlunsplit((scheme, netloc, path, query, None)) + + _egg_fragment_re = re.compile(r'[#&]egg=([^&]*)') + + @property + def egg_fragment(self): + match = self._egg_fragment_re.search(self.url) + if not match: + return None + return match.group(1) + + _subdirectory_fragment_re = re.compile(r'[#&]subdirectory=([^&]*)') + + @property + def subdirectory_fragment(self): + match = self._subdirectory_fragment_re.search(self.url) + if not match: + return None + return match.group(1) + + _hash_re = re.compile( + r'(sha1|sha224|sha384|sha256|sha512|md5)=([a-f0-9]+)' + ) + + @property + def hash(self): + match = self._hash_re.search(self.url) + if match: + return match.group(2) + return None + + @property + def hash_name(self): + match = self._hash_re.search(self.url) + if match: + return match.group(1) + return None + + @property + def show_url(self): + return posixpath.basename(self.url.split('#', 1)[0].split('?', 1)[0]) + + @property + def is_wheel(self): + return self.ext == wheel_ext + + @property + def is_artifact(self): + """ + Determines if this points to an actual artifact (e.g. a tarball) or if + it points to an "abstract" thing like a path or a VCS location. + """ + from pip.vcs import vcs + + if self.scheme in vcs.all_schemes: + return False + + return True + + +FormatControl = namedtuple('FormatControl', 'no_binary only_binary') +"""This object has two fields, no_binary and only_binary. + +If a field is falsy, it isn't set. If it is {':all:'}, it should match all +packages except those listed in the other field. Only one field can be set +to {':all:'} at a time. The rest of the time exact package name matches +are listed, with any given package only showing up in one field at a time. +""" + + +def fmt_ctl_handle_mutual_exclude(value, target, other): + new = value.split(',') + while ':all:' in new: + other.clear() + target.clear() + target.add(':all:') + del new[:new.index(':all:') + 1] + if ':none:' not in new: + # Without a none, we want to discard everything as :all: covers it + return + for name in new: + if name == ':none:': + target.clear() + continue + name = canonicalize_name(name) + other.discard(name) + target.add(name) + + +def fmt_ctl_formats(fmt_ctl, canonical_name): + result = set(["binary", "source"]) + if canonical_name in fmt_ctl.only_binary: + result.discard('source') + elif canonical_name in fmt_ctl.no_binary: + result.discard('binary') + elif ':all:' in fmt_ctl.only_binary: + result.discard('source') + elif ':all:' in fmt_ctl.no_binary: + result.discard('binary') + return frozenset(result) + + +def fmt_ctl_no_binary(fmt_ctl): + fmt_ctl_handle_mutual_exclude( + ':all:', fmt_ctl.no_binary, fmt_ctl.only_binary) + + +def fmt_ctl_no_use_wheel(fmt_ctl): + fmt_ctl_no_binary(fmt_ctl) + warnings.warn( + '--no-use-wheel is deprecated and will be removed in the future. ' + ' Please use --no-binary :all: instead.', RemovedInPip10Warning, + stacklevel=2) + + +Search = namedtuple('Search', 'supplied canonical formats') +"""Capture key aspects of a search. + +:attribute supplied: The user supplied package. +:attribute canonical: The canonical package name. +:attribute formats: The formats allowed for this package. Should be a set + with 'binary' or 'source' or both in it. +""" diff --git a/week-0/day-3/venv/lib/python3.6/site-packages/pip/locations.py b/week-0/day-3/venv/lib/python3.6/site-packages/pip/locations.py new file mode 100644 index 00000000..e598ef10 --- /dev/null +++ b/week-0/day-3/venv/lib/python3.6/site-packages/pip/locations.py @@ -0,0 +1,182 @@ +"""Locations where we look for configs, install stuff, etc""" +from __future__ import absolute_import + +import os +import os.path +import site +import sys + +from distutils import sysconfig +from distutils.command.install import install, SCHEME_KEYS # noqa + +from pip.compat import WINDOWS, expanduser +from pip.utils import appdirs + + +# Application Directories +USER_CACHE_DIR = appdirs.user_cache_dir("pip") + + +DELETE_MARKER_MESSAGE = '''\ +This file is placed here by pip to indicate the source was put +here by pip. + +Once this package is successfully installed this source code will be +deleted (unless you remove this file). +''' +PIP_DELETE_MARKER_FILENAME = 'pip-delete-this-directory.txt' + + +def write_delete_marker_file(directory): + """ + Write the pip delete marker file into this directory. + """ + filepath = os.path.join(directory, PIP_DELETE_MARKER_FILENAME) + with open(filepath, 'w') as marker_fp: + marker_fp.write(DELETE_MARKER_MESSAGE) + + +def running_under_virtualenv(): + """ + Return True if we're running inside a virtualenv, False otherwise. + + """ + if hasattr(sys, 'real_prefix'): + return True + elif sys.prefix != getattr(sys, "base_prefix", sys.prefix): + return True + + return False + + +def virtualenv_no_global(): + """ + Return True if in a venv and no system site packages. + """ + # this mirrors the logic in virtualenv.py for locating the + # no-global-site-packages.txt file + site_mod_dir = os.path.dirname(os.path.abspath(site.__file__)) + no_global_file = os.path.join(site_mod_dir, 'no-global-site-packages.txt') + if running_under_virtualenv() and os.path.isfile(no_global_file): + return True + + +if running_under_virtualenv(): + src_prefix = os.path.join(sys.prefix, 'src') +else: + # FIXME: keep src in cwd for now (it is not a temporary folder) + try: + src_prefix = os.path.join(os.getcwd(), 'src') + except OSError: + # In case the current working directory has been renamed or deleted + sys.exit( + "The folder you are executing pip from can no longer be found." + ) + +# under macOS + virtualenv sys.prefix is not properly resolved +# it is something like /path/to/python/bin/.. +# Note: using realpath due to tmp dirs on OSX being symlinks +src_prefix = os.path.abspath(src_prefix) + +# FIXME doesn't account for venv linked to global site-packages + +site_packages = sysconfig.get_python_lib() +user_site = site.USER_SITE +user_dir = expanduser('~') +if WINDOWS: + bin_py = os.path.join(sys.prefix, 'Scripts') + bin_user = os.path.join(user_site, 'Scripts') + # buildout uses 'bin' on Windows too? + if not os.path.exists(bin_py): + bin_py = os.path.join(sys.prefix, 'bin') + bin_user = os.path.join(user_site, 'bin') + + config_basename = 'pip.ini' + + legacy_storage_dir = os.path.join(user_dir, 'pip') + legacy_config_file = os.path.join( + legacy_storage_dir, + config_basename, + ) +else: + bin_py = os.path.join(sys.prefix, 'bin') + bin_user = os.path.join(user_site, 'bin') + + config_basename = 'pip.conf' + + legacy_storage_dir = os.path.join(user_dir, '.pip') + legacy_config_file = os.path.join( + legacy_storage_dir, + config_basename, + ) + + # Forcing to use /usr/local/bin for standard macOS framework installs + # Also log to ~/Library/Logs/ for use with the Console.app log viewer + if sys.platform[:6] == 'darwin' and sys.prefix[:16] == '/System/Library/': + bin_py = '/usr/local/bin' + +site_config_files = [ + os.path.join(path, config_basename) + for path in appdirs.site_config_dirs('pip') +] + + +def distutils_scheme(dist_name, user=False, home=None, root=None, + isolated=False, prefix=None): + """ + Return a distutils install scheme + """ + from distutils.dist import Distribution + + scheme = {} + + if isolated: + extra_dist_args = {"script_args": ["--no-user-cfg"]} + else: + extra_dist_args = {} + dist_args = {'name': dist_name} + dist_args.update(extra_dist_args) + + d = Distribution(dist_args) + d.parse_config_files() + i = d.get_command_obj('install', create=True) + # NOTE: setting user or home has the side-effect of creating the home dir + # or user base for installations during finalize_options() + # ideally, we'd prefer a scheme class that has no side-effects. + assert not (user and prefix), "user={0} prefix={1}".format(user, prefix) + i.user = user or i.user + if user: + i.prefix = "" + i.prefix = prefix or i.prefix + i.home = home or i.home + i.root = root or i.root + i.finalize_options() + for key in SCHEME_KEYS: + scheme[key] = getattr(i, 'install_' + key) + + # install_lib specified in setup.cfg should install *everything* + # into there (i.e. it takes precedence over both purelib and + # platlib). Note, i.install_lib is *always* set after + # finalize_options(); we only want to override here if the user + # has explicitly requested it hence going back to the config + if 'install_lib' in d.get_option_dict('install'): + scheme.update(dict(purelib=i.install_lib, platlib=i.install_lib)) + + if running_under_virtualenv(): + scheme['headers'] = os.path.join( + sys.prefix, + 'include', + 'site', + 'python' + sys.version[:3], + dist_name, + ) + + if root is not None: + path_no_drive = os.path.splitdrive( + os.path.abspath(scheme["headers"]))[1] + scheme["headers"] = os.path.join( + root, + path_no_drive[1:], + ) + + return scheme diff --git a/week-0/day-3/venv/lib/python3.6/site-packages/pip/models/__init__.py b/week-0/day-3/venv/lib/python3.6/site-packages/pip/models/__init__.py new file mode 100644 index 00000000..1d727d7e --- /dev/null +++ b/week-0/day-3/venv/lib/python3.6/site-packages/pip/models/__init__.py @@ -0,0 +1,4 @@ +from pip.models.index import Index, PyPI + + +__all__ = ["Index", "PyPI"] diff --git a/week-0/day-3/venv/lib/python3.6/site-packages/pip/models/__pycache__/__init__.cpython-36.pyc b/week-0/day-3/venv/lib/python3.6/site-packages/pip/models/__pycache__/__init__.cpython-36.pyc new file mode 100644 index 0000000000000000000000000000000000000000..fc45b9a88688ba546953a68bb346baec3c1f3c7b GIT binary patch literal 223 zcmXr!<>hkpH;;8^U|@I*#Bjg_WH|tFu?&z%VMt-jVaR2SV$5ZVVq#=SVM<|6XNqD@ zVF_l?WPJ%#!Jx@>i`6qPCAH!fOF(6SXAww$5i^kR(`30NP>@-mmz$rGnp3Qo2~vcR zzQrCNpO}*qAHR~Jhz+C%MEo++FUc*?2kO#ID$UGE(Jd}4u1G3PHUSBNF~l(a`1s7c c%#!$cy@JYH95z6~(wtN~MxY7BAo~TF0pENz-T(jq literal 0 HcmV?d00001 diff --git a/week-0/day-3/venv/lib/python3.6/site-packages/pip/models/__pycache__/index.cpython-36.pyc b/week-0/day-3/venv/lib/python3.6/site-packages/pip/models/__pycache__/index.cpython-36.pyc new file mode 100644 index 0000000000000000000000000000000000000000..1fc9706d4da66d6f7bbb444661a01b4b6582598b GIT binary patch literal 827 zcmZuw&5GMF5SA?4F{zX8-g?*vs1Iu&S}2sI?9xNoOS;gTp@_s%8yWwtq%29uE&DQk zC0%oV`AN=32>2Gvyap$Tpbcqh8Bp?x zh(NGsBA8@HR)#VZ;gOb+h`x|4{tc%|MqM;4wUHG@rx5_S1v6LRBq^yNWgw^so=M3B z6Cupun8ii+osioKU%`Ph+D9;R1MWZ%gcD2a;6RVGW)OkZp@0Z*@o9rA_$NS z7cMrc9UAGvVK=D#41F=Ep{PyYWr<@O-MAE7qgLE^;u46=&?xKTPTHog+zVLYwugPY zcGEE-#}^Y!=TQndIp)MD3tVVq^G(Olzz?Ed!t|#oY&&4->(xdz;@Ui#?P^oK^=yz) z+Y8y4LZKe{uyYCLs#BKp2(_4kBQ&OSn!>Z6d)e~Sk$?1KaMJ5H2VhAJI(hX1P=qcr zrYErOCP1|ARp&`&fyTq2613>~j_v{$HI`1njK3thzZ`3yiL%Hdq}wf9$+??y4!vv| z#3|>Gn`JZZ=*v^Ovl1wd_H~dqevAfPLX(NcmHn%=wS#$I6eu(>_o3~qqce5KS`4VH@HxZgvV~>~XO DP;AKp literal 0 HcmV?d00001 diff --git a/week-0/day-3/venv/lib/python3.6/site-packages/pip/models/index.py b/week-0/day-3/venv/lib/python3.6/site-packages/pip/models/index.py new file mode 100644 index 00000000..be991198 --- /dev/null +++ b/week-0/day-3/venv/lib/python3.6/site-packages/pip/models/index.py @@ -0,0 +1,16 @@ +from pip._vendor.six.moves.urllib import parse as urllib_parse + + +class Index(object): + def __init__(self, url): + self.url = url + self.netloc = urllib_parse.urlsplit(url).netloc + self.simple_url = self.url_to_path('simple') + self.pypi_url = self.url_to_path('pypi') + self.pip_json_url = self.url_to_path('pypi/pip/json') + + def url_to_path(self, path): + return urllib_parse.urljoin(self.url, path) + + +PyPI = Index('https://pypi.python.org/') diff --git a/week-0/day-3/venv/lib/python3.6/site-packages/pip/operations/__init__.py b/week-0/day-3/venv/lib/python3.6/site-packages/pip/operations/__init__.py new file mode 100644 index 00000000..e69de29b diff --git a/week-0/day-3/venv/lib/python3.6/site-packages/pip/operations/__pycache__/__init__.cpython-36.pyc b/week-0/day-3/venv/lib/python3.6/site-packages/pip/operations/__pycache__/__init__.cpython-36.pyc new file mode 100644 index 0000000000000000000000000000000000000000..45ba2f2bd929eb4de0666b0ca919bc8e391192ee GIT binary patch literal 137 zcmXr!<>hkpH;-iig2x~N1{i@12OutH0TL+;!3>&=ek&P@K*9*(mzjP^Zh?M5W`S-} zX=YA}ZgF98MN(<92}lTx^9xdo5=%1k^NRK3<1_OzOXB183My}L*yQG?l;)(`fy^rg GVg>-_6(B|c literal 0 HcmV?d00001 diff --git a/week-0/day-3/venv/lib/python3.6/site-packages/pip/operations/__pycache__/check.cpython-36.pyc b/week-0/day-3/venv/lib/python3.6/site-packages/pip/operations/__pycache__/check.cpython-36.pyc new file mode 100644 index 0000000000000000000000000000000000000000..aa2effce7020cfd11aecdbdfbad759e90118bd78 GIT binary patch literal 1424 zcmb7E-)|!|5FUHINiL*&yil1AHP0+(E|7j8iV8d8#MDN zP7)-03%`TpGQuyDLdN*zvh@q}+Zn?xG}>q}+IMJXf>RDlhQ=2^Id}!f-!CJ{Tr>qV zcFK2PDJ-{!FJsb7BY>5$j0HwRGZIj#K0^IRf0nPdVPs53gH~&C8dM zO+WU%T31t**-<&3Dc^prw8^W|iy}AHZ=WeUn&rmi<=IH9OXDArCoi*VR*!8yDO7Ox z+x~7|8apluB}Wodjlb8-Ltke7&U=YBenA;Nx=>fX*Ua+w-b?rs^cHsM-Lri=tM}`? zelnTog?wTz&0;doo|7wBRV$4ZR;Ag`&Q*3XsIUC}u%e3RxmGh(S`$& zO~+c5U)Z$P%HU(tyzHhpPBx%88FYhxO*(oFnIWUcJ2>86GRLN&=1>!tfEBUBKG(!m z9~addrTg6T!B?KifWpm`VEEmg;h8GcqSgnW(4lm?fa}jT`7;<6RW>fn!C<}r5J?yr zWqs%Nr6ydcx9QesEM-5|cW|vyZqTF|5!U#J4Z^HZ^&d34wo$4Uc+L)*>EQ(Nebz$A z6NEcN)=<-Rv^7BeD=va6cL?a?WJwC-q)XIR_XrkG*KqG4+o%ZI~$bkpib_&OgUR{d6^ z)gNxqXf(OH`AH=I4(N|59seVNghBnAEhpK0j%J7}5RfP%VMedC*Dz20?jl=Kufz literal 0 HcmV?d00001 diff --git a/week-0/day-3/venv/lib/python3.6/site-packages/pip/operations/__pycache__/freeze.cpython-36.pyc b/week-0/day-3/venv/lib/python3.6/site-packages/pip/operations/__pycache__/freeze.cpython-36.pyc new file mode 100644 index 0000000000000000000000000000000000000000..51c175c35b1276e009e86f200ccb2263956c5f92 GIT binary patch literal 2881 zcmY*b&2QVt6`vs~N}?!Pl0V|F#N0UB#z5(y=mLu_oFK&}0a|3esk5z96#+qUMlxxN zq=zG07AT;owwGdq`jm5z?SIfeqo*F`+SA^9(y4Do@>(lmhQr_coHy^i(J$(C>sMcY z{{A;>2>ll={i?8j4kP~v6F~&WXn;Ey%e5A39ZkLUj;`KD$AGsUmj-6XR6Isp9#lFN zwJycgfz`3p+Kg)hyJM?$Ij#>HorYRh;*~+O)5M5sQH!>xxU)*MrKd`?9_m$zMQY#T z&Kl9)q67PT@C_YcvEq00G#+y5g@Y_*{1~wIualhnaeP8Ah9RQ^ns7j^FTeiktCz>$ zcqcF6Yo|}S7tZ-8@kp3+7Iud`Op_eQ_3XUwF`B1C7ElSa0zXNUF!1AWOufV(PypAL zEWGhqPG2&XvR8qOp!}`F*nknh$p57wRN&0)qX{NxQY{R&%Ta_2V~QhfQU%-^J?463 zyg=_COln0fDiJ)z>~Ud5CVZ9U*A&j-;_)dOJt#2nZA@&U752Hw-T+snuoe9c&^Hvl z0d&2vH_-19$YrM}M3egH9j_J;(?Tc42OYG$n$)h_+=^j+(ZJVgb%(by$#Ptj!M29N$!pcm){ zzrUO``D)Re;v4+8?xY2jcSTE4jwkJ+9j#4~4Sf0Q`8rxBrsRe1>J4Vki)sN`v7oP$ zPvn|0;N1W_AYZJUmjP)ME73j4iBZv(`@O*z4d7ZQt4jK>YQ3hU|8s}4e-v%9PS9Vp zEhIgew3F?k%{K{f-l5SJ*_h%Qhc5mH>-&;pbi_X?>e0g~A`i&kw}?0&G&uD~lQq6y ztVOLUE-K3Qcc343eXIFKyZBD(gL->-JYFL-qY0r&aP7rma-JXZ5g(WKX}|w;TylHP zr}=>{tT=@l@zNx|7Dj#^W}-UGDO13B@5^);6DLWzlgV;%*jaPNAxE_ijfE9WB?TBhLIgEo054V+&vsa=#nX@1cs(3_pdf)(GwS!_jih}zW|rLhu1D;^r6ms5=ZklaLx|Mwzb~`;)oV z!|YmAj$(h%CH}KNOM@`bcymELQYoB2JG^B9bNV^GKCoFG_*g?uD{^YesU@ejoL1!o zw<%(>@iW=^**!UJ!gTORXpD+-kPb39Xkq4Xq`?_8fd)B~vU7-5Zz zzAzynq3lFkURbxNEI^tI)6Zl{vXa!H!+u5U6-&o7Svpfu?Xh$)zu+p8&y3T4pE6Ni zq=2xY93mQUb*r&GrAzu@K;RNlk{4qpEVxk_&#yv$CQLTRbU0C=$G~L93Sqhwt}BDL z1+%a(9cIQ{_pmFBFzKa22Pp^yT-#7L=A|DGY0k>Pbg(XJO9><_S?BYv!{p`4YEqLW z`wQICeL7-068)jln9QIBecImeXd6s^3E5AY#yS%$mDsN2pw#T6*>qxIOe69 zN*+-M)RRT(Wj;iqa{H-tP*IUv1aB^cy{t_o>3rIkPMPy8lL?dm9VS$+U_&#otr?n) zEo|VXX5k8Mz`6lnCf2YGL%uCdA{wq}K-bKY2^_W>P220WB6hCg|S;zP7fl zq&2BYH$V0lje8d!(5t=1d*8s61S;Mf4I>;!y-^RPUxH{?S`J&(yAD9SRAAZOW6 z;ENq92vYD6BB1i1(_DN>M8$1>{#6OXAFVi_=WR`XdzX;MDVtZr&JuDsZ#iIRAtTeH zv-Km6<-cl7<#-i}<@G$xE1t@0@cQS{Pq~|=Bat11sdK3u4N@|U=`-1dat9_GqAVkA O-#xlzK+GU+^7%jNaxMk{ literal 0 HcmV?d00001 diff --git a/week-0/day-3/venv/lib/python3.6/site-packages/pip/operations/check.py b/week-0/day-3/venv/lib/python3.6/site-packages/pip/operations/check.py new file mode 100644 index 00000000..2cf67aae --- /dev/null +++ b/week-0/day-3/venv/lib/python3.6/site-packages/pip/operations/check.py @@ -0,0 +1,49 @@ + + +def check_requirements(installed_dists): + missing_reqs_dict = {} + incompatible_reqs_dict = {} + + for dist in installed_dists: + key = '%s==%s' % (dist.project_name, dist.version) + + missing_reqs = list(get_missing_reqs(dist, installed_dists)) + if missing_reqs: + missing_reqs_dict[key] = missing_reqs + + incompatible_reqs = list(get_incompatible_reqs( + dist, installed_dists)) + if incompatible_reqs: + incompatible_reqs_dict[key] = incompatible_reqs + + return (missing_reqs_dict, incompatible_reqs_dict) + + +def get_missing_reqs(dist, installed_dists): + """Return all of the requirements of `dist` that aren't present in + `installed_dists`. + + """ + installed_names = set(d.project_name.lower() for d in installed_dists) + missing_requirements = set() + + for requirement in dist.requires(): + if requirement.project_name.lower() not in installed_names: + missing_requirements.add(requirement) + yield requirement + + +def get_incompatible_reqs(dist, installed_dists): + """Return all of the requirements of `dist` that are present in + `installed_dists`, but have incompatible versions. + + """ + installed_dists_by_name = {} + for installed_dist in installed_dists: + installed_dists_by_name[installed_dist.project_name] = installed_dist + + for requirement in dist.requires(): + present_dist = installed_dists_by_name.get(requirement.project_name) + + if present_dist and present_dist not in requirement: + yield (requirement, present_dist) diff --git a/week-0/day-3/venv/lib/python3.6/site-packages/pip/operations/freeze.py b/week-0/day-3/venv/lib/python3.6/site-packages/pip/operations/freeze.py new file mode 100644 index 00000000..920c2c12 --- /dev/null +++ b/week-0/day-3/venv/lib/python3.6/site-packages/pip/operations/freeze.py @@ -0,0 +1,132 @@ +from __future__ import absolute_import + +import logging +import re + +import pip +from pip.req import InstallRequirement +from pip.req.req_file import COMMENT_RE +from pip.utils import get_installed_distributions +from pip._vendor import pkg_resources +from pip._vendor.packaging.utils import canonicalize_name +from pip._vendor.pkg_resources import RequirementParseError + + +logger = logging.getLogger(__name__) + + +def freeze( + requirement=None, + find_links=None, local_only=None, user_only=None, skip_regex=None, + default_vcs=None, + isolated=False, + wheel_cache=None, + skip=()): + find_links = find_links or [] + skip_match = None + + if skip_regex: + skip_match = re.compile(skip_regex).search + + dependency_links = [] + + for dist in pkg_resources.working_set: + if dist.has_metadata('dependency_links.txt'): + dependency_links.extend( + dist.get_metadata_lines('dependency_links.txt') + ) + for link in find_links: + if '#egg=' in link: + dependency_links.append(link) + for link in find_links: + yield '-f %s' % link + installations = {} + for dist in get_installed_distributions(local_only=local_only, + skip=(), + user_only=user_only): + try: + req = pip.FrozenRequirement.from_dist( + dist, + dependency_links + ) + except RequirementParseError: + logger.warning( + "Could not parse requirement: %s", + dist.project_name + ) + continue + installations[req.name] = req + + if requirement: + # the options that don't get turned into an InstallRequirement + # should only be emitted once, even if the same option is in multiple + # requirements files, so we need to keep track of what has been emitted + # so that we don't emit it again if it's seen again + emitted_options = set() + for req_file_path in requirement: + with open(req_file_path) as req_file: + for line in req_file: + if (not line.strip() or + line.strip().startswith('#') or + (skip_match and skip_match(line)) or + line.startswith(( + '-r', '--requirement', + '-Z', '--always-unzip', + '-f', '--find-links', + '-i', '--index-url', + '--pre', + '--trusted-host', + '--process-dependency-links', + '--extra-index-url'))): + line = line.rstrip() + if line not in emitted_options: + emitted_options.add(line) + yield line + continue + + if line.startswith('-e') or line.startswith('--editable'): + if line.startswith('-e'): + line = line[2:].strip() + else: + line = line[len('--editable'):].strip().lstrip('=') + line_req = InstallRequirement.from_editable( + line, + default_vcs=default_vcs, + isolated=isolated, + wheel_cache=wheel_cache, + ) + else: + line_req = InstallRequirement.from_line( + COMMENT_RE.sub('', line).strip(), + isolated=isolated, + wheel_cache=wheel_cache, + ) + + if not line_req.name: + logger.info( + "Skipping line in requirement file [%s] because " + "it's not clear what it would install: %s", + req_file_path, line.strip(), + ) + logger.info( + " (add #egg=PackageName to the URL to avoid" + " this warning)" + ) + elif line_req.name not in installations: + logger.warning( + "Requirement file [%s] contains %s, but that " + "package is not installed", + req_file_path, COMMENT_RE.sub('', line).strip(), + ) + else: + yield str(installations[line_req.name]).rstrip() + del installations[line_req.name] + + yield( + '## The following requirements were added by ' + 'pip freeze:' + ) + for installation in sorted( + installations.values(), key=lambda x: x.name.lower()): + if canonicalize_name(installation.name) not in skip: + yield str(installation).rstrip() diff --git a/week-0/day-3/venv/lib/python3.6/site-packages/pip/pep425tags.py b/week-0/day-3/venv/lib/python3.6/site-packages/pip/pep425tags.py new file mode 100644 index 00000000..ad202ef3 --- /dev/null +++ b/week-0/day-3/venv/lib/python3.6/site-packages/pip/pep425tags.py @@ -0,0 +1,324 @@ +"""Generate and work with PEP 425 Compatibility Tags.""" +from __future__ import absolute_import + +import re +import sys +import warnings +import platform +import logging + +try: + import sysconfig +except ImportError: # pragma nocover + # Python < 2.7 + import distutils.sysconfig as sysconfig +import distutils.util + +from pip.compat import OrderedDict +import pip.utils.glibc + +logger = logging.getLogger(__name__) + +_osx_arch_pat = re.compile(r'(.+)_(\d+)_(\d+)_(.+)') + + +def get_config_var(var): + try: + return sysconfig.get_config_var(var) + except IOError as e: # Issue #1074 + warnings.warn("{0}".format(e), RuntimeWarning) + return None + + +def get_abbr_impl(): + """Return abbreviated implementation name.""" + if hasattr(sys, 'pypy_version_info'): + pyimpl = 'pp' + elif sys.platform.startswith('java'): + pyimpl = 'jy' + elif sys.platform == 'cli': + pyimpl = 'ip' + else: + pyimpl = 'cp' + return pyimpl + + +def get_impl_ver(): + """Return implementation version.""" + impl_ver = get_config_var("py_version_nodot") + if not impl_ver or get_abbr_impl() == 'pp': + impl_ver = ''.join(map(str, get_impl_version_info())) + return impl_ver + + +def get_impl_version_info(): + """Return sys.version_info-like tuple for use in decrementing the minor + version.""" + if get_abbr_impl() == 'pp': + # as per https://github.com/pypa/pip/issues/2882 + return (sys.version_info[0], sys.pypy_version_info.major, + sys.pypy_version_info.minor) + else: + return sys.version_info[0], sys.version_info[1] + + +def get_impl_tag(): + """ + Returns the Tag for this specific implementation. + """ + return "{0}{1}".format(get_abbr_impl(), get_impl_ver()) + + +def get_flag(var, fallback, expected=True, warn=True): + """Use a fallback method for determining SOABI flags if the needed config + var is unset or unavailable.""" + val = get_config_var(var) + if val is None: + if warn: + logger.debug("Config variable '%s' is unset, Python ABI tag may " + "be incorrect", var) + return fallback() + return val == expected + + +def get_abi_tag(): + """Return the ABI tag based on SOABI (if available) or emulate SOABI + (CPython 2, PyPy).""" + soabi = get_config_var('SOABI') + impl = get_abbr_impl() + if not soabi and impl in ('cp', 'pp') and hasattr(sys, 'maxunicode'): + d = '' + m = '' + u = '' + if get_flag('Py_DEBUG', + lambda: hasattr(sys, 'gettotalrefcount'), + warn=(impl == 'cp')): + d = 'd' + if get_flag('WITH_PYMALLOC', + lambda: impl == 'cp', + warn=(impl == 'cp')): + m = 'm' + if get_flag('Py_UNICODE_SIZE', + lambda: sys.maxunicode == 0x10ffff, + expected=4, + warn=(impl == 'cp' and + sys.version_info < (3, 3))) \ + and sys.version_info < (3, 3): + u = 'u' + abi = '%s%s%s%s%s' % (impl, get_impl_ver(), d, m, u) + elif soabi and soabi.startswith('cpython-'): + abi = 'cp' + soabi.split('-')[1] + elif soabi: + abi = soabi.replace('.', '_').replace('-', '_') + else: + abi = None + return abi + + +def _is_running_32bit(): + return sys.maxsize == 2147483647 + + +def get_platform(): + """Return our platform name 'win32', 'linux_x86_64'""" + if sys.platform == 'darwin': + # distutils.util.get_platform() returns the release based on the value + # of MACOSX_DEPLOYMENT_TARGET on which Python was built, which may + # be significantly older than the user's current machine. + release, _, machine = platform.mac_ver() + split_ver = release.split('.') + + if machine == "x86_64" and _is_running_32bit(): + machine = "i386" + elif machine == "ppc64" and _is_running_32bit(): + machine = "ppc" + + return 'macosx_{0}_{1}_{2}'.format(split_ver[0], split_ver[1], machine) + + # XXX remove distutils dependency + result = distutils.util.get_platform().replace('.', '_').replace('-', '_') + if result == "linux_x86_64" and _is_running_32bit(): + # 32 bit Python program (running on a 64 bit Linux): pip should only + # install and run 32 bit compiled extensions in that case. + result = "linux_i686" + + return result + + +def is_manylinux1_compatible(): + # Only Linux, and only x86-64 / i686 + if get_platform() not in ("linux_x86_64", "linux_i686"): + return False + + # Check for presence of _manylinux module + try: + import _manylinux + return bool(_manylinux.manylinux1_compatible) + except (ImportError, AttributeError): + # Fall through to heuristic check below + pass + + # Check glibc version. CentOS 5 uses glibc 2.5. + return pip.utils.glibc.have_compatible_glibc(2, 5) + + +def get_darwin_arches(major, minor, machine): + """Return a list of supported arches (including group arches) for + the given major, minor and machine architecture of an macOS machine. + """ + arches = [] + + def _supports_arch(major, minor, arch): + # Looking at the application support for macOS versions in the chart + # provided by https://en.wikipedia.org/wiki/OS_X#Versions it appears + # our timeline looks roughly like: + # + # 10.0 - Introduces ppc support. + # 10.4 - Introduces ppc64, i386, and x86_64 support, however the ppc64 + # and x86_64 support is CLI only, and cannot be used for GUI + # applications. + # 10.5 - Extends ppc64 and x86_64 support to cover GUI applications. + # 10.6 - Drops support for ppc64 + # 10.7 - Drops support for ppc + # + # Given that we do not know if we're installing a CLI or a GUI + # application, we must be conservative and assume it might be a GUI + # application and behave as if ppc64 and x86_64 support did not occur + # until 10.5. + # + # Note: The above information is taken from the "Application support" + # column in the chart not the "Processor support" since I believe + # that we care about what instruction sets an application can use + # not which processors the OS supports. + if arch == 'ppc': + return (major, minor) <= (10, 5) + if arch == 'ppc64': + return (major, minor) == (10, 5) + if arch == 'i386': + return (major, minor) >= (10, 4) + if arch == 'x86_64': + return (major, minor) >= (10, 5) + if arch in groups: + for garch in groups[arch]: + if _supports_arch(major, minor, garch): + return True + return False + + groups = OrderedDict([ + ("fat", ("i386", "ppc")), + ("intel", ("x86_64", "i386")), + ("fat64", ("x86_64", "ppc64")), + ("fat32", ("x86_64", "i386", "ppc")), + ]) + + if _supports_arch(major, minor, machine): + arches.append(machine) + + for garch in groups: + if machine in groups[garch] and _supports_arch(major, minor, garch): + arches.append(garch) + + arches.append('universal') + + return arches + + +def get_supported(versions=None, noarch=False, platform=None, + impl=None, abi=None): + """Return a list of supported tags for each version specified in + `versions`. + + :param versions: a list of string versions, of the form ["33", "32"], + or None. The first version will be assumed to support our ABI. + :param platform: specify the exact platform you want valid + tags for, or None. If None, use the local system platform. + :param impl: specify the exact implementation you want valid + tags for, or None. If None, use the local interpreter impl. + :param abi: specify the exact abi you want valid + tags for, or None. If None, use the local interpreter abi. + """ + supported = [] + + # Versions must be given with respect to the preference + if versions is None: + versions = [] + version_info = get_impl_version_info() + major = version_info[:-1] + # Support all previous minor Python versions. + for minor in range(version_info[-1], -1, -1): + versions.append(''.join(map(str, major + (minor,)))) + + impl = impl or get_abbr_impl() + + abis = [] + + abi = abi or get_abi_tag() + if abi: + abis[0:0] = [abi] + + abi3s = set() + import imp + for suffix in imp.get_suffixes(): + if suffix[0].startswith('.abi'): + abi3s.add(suffix[0].split('.', 2)[1]) + + abis.extend(sorted(list(abi3s))) + + abis.append('none') + + if not noarch: + arch = platform or get_platform() + if arch.startswith('macosx'): + # support macosx-10.6-intel on macosx-10.9-x86_64 + match = _osx_arch_pat.match(arch) + if match: + name, major, minor, actual_arch = match.groups() + tpl = '{0}_{1}_%i_%s'.format(name, major) + arches = [] + for m in reversed(range(int(minor) + 1)): + for a in get_darwin_arches(int(major), m, actual_arch): + arches.append(tpl % (m, a)) + else: + # arch pattern didn't match (?!) + arches = [arch] + elif platform is None and is_manylinux1_compatible(): + arches = [arch.replace('linux', 'manylinux1'), arch] + else: + arches = [arch] + + # Current version, current API (built specifically for our Python): + for abi in abis: + for arch in arches: + supported.append(('%s%s' % (impl, versions[0]), abi, arch)) + + # abi3 modules compatible with older version of Python + for version in versions[1:]: + # abi3 was introduced in Python 3.2 + if version in ('31', '30'): + break + for abi in abi3s: # empty set if not Python 3 + for arch in arches: + supported.append(("%s%s" % (impl, version), abi, arch)) + + # Has binaries, does not use the Python API: + for arch in arches: + supported.append(('py%s' % (versions[0][0]), 'none', arch)) + + # No abi / arch, but requires our implementation: + supported.append(('%s%s' % (impl, versions[0]), 'none', 'any')) + # Tagged specifically as being cross-version compatible + # (with just the major version specified) + supported.append(('%s%s' % (impl, versions[0][0]), 'none', 'any')) + + # No abi / arch, generic Python + for i, version in enumerate(versions): + supported.append(('py%s' % (version,), 'none', 'any')) + if i == 0: + supported.append(('py%s' % (version[0]), 'none', 'any')) + + return supported + +supported_tags = get_supported() +supported_tags_noarch = get_supported(noarch=True) + +implementation_tag = get_impl_tag() diff --git a/week-0/day-3/venv/lib/python3.6/site-packages/pip/req/__init__.py b/week-0/day-3/venv/lib/python3.6/site-packages/pip/req/__init__.py new file mode 100644 index 00000000..00185a43 --- /dev/null +++ b/week-0/day-3/venv/lib/python3.6/site-packages/pip/req/__init__.py @@ -0,0 +1,10 @@ +from __future__ import absolute_import + +from .req_install import InstallRequirement +from .req_set import RequirementSet, Requirements +from .req_file import parse_requirements + +__all__ = [ + "RequirementSet", "Requirements", "InstallRequirement", + "parse_requirements", +] diff --git a/week-0/day-3/venv/lib/python3.6/site-packages/pip/req/__pycache__/__init__.cpython-36.pyc b/week-0/day-3/venv/lib/python3.6/site-packages/pip/req/__pycache__/__init__.cpython-36.pyc new file mode 100644 index 0000000000000000000000000000000000000000..7b2b0cc0dada2ef0fa7677d488840cb494dc84e2 GIT binary patch literal 404 zcmYjMO-sZu5Ka2M-Bv~X6FsawD0mT3@Zv?my%l6=O;!TQwwn*opX6W4)zkh3PfqG# zH!zPkkGwZCS9M)JyxhE9P(psl(MyouW0^+;Mi`Yu(T-BWA{NU?#a%q}L?$ZjQk8Yt z+@~^EMOPrtSk4Nz_(-}1E7zo1?lFlp)Svc)8KtuvgqlWe_c%M~=TBQ>dnsS}&I!#G z-`XbfCr9m?TVEaZCb*_v8xHzlGCIXTodpPI=p5m>DSZjBan@-Lpd-}$5?vtvr_Nt} z9u&jvA;K3y+6c+#9G?T=jsV|8*C9N>Z`)cmwUd}ugA literal 0 HcmV?d00001 diff --git a/week-0/day-3/venv/lib/python3.6/site-packages/pip/req/__pycache__/req_file.cpython-36.pyc b/week-0/day-3/venv/lib/python3.6/site-packages/pip/req/__pycache__/req_file.cpython-36.pyc new file mode 100644 index 0000000000000000000000000000000000000000..54abf58d784f78efa6874281c69deef2f622153c GIT binary patch literal 8419 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 Y^T>Y=Q~*a%Wm2)+XRNLNyHlC}3j)FscmMzZ literal 0 HcmV?d00001 diff --git a/week-0/day-3/venv/lib/python3.6/site-packages/pip/req/__pycache__/req_set.cpython-36.pyc b/week-0/day-3/venv/lib/python3.6/site-packages/pip/req/__pycache__/req_set.cpython-36.pyc new file mode 100644 index 0000000000000000000000000000000000000000..c522ed2c7da2d58f9510868e4b1b95355ee50d5e GIT binary patch literal 20967 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 KJX0>0^ZySixJHfu literal 0 HcmV?d00001 diff --git a/week-0/day-3/venv/lib/python3.6/site-packages/pip/req/__pycache__/req_uninstall.cpython-36.pyc b/week-0/day-3/venv/lib/python3.6/site-packages/pip/req/__pycache__/req_uninstall.cpython-36.pyc new file mode 100644 index 0000000000000000000000000000000000000000..7791defe86719fc870c0ebb0ba7e3d5fe80e5e31 GIT binary patch literal 6282 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 literal 0 HcmV?d00001 diff --git a/week-0/day-3/venv/lib/python3.6/site-packages/pip/req/req_file.py b/week-0/day-3/venv/lib/python3.6/site-packages/pip/req/req_file.py new file mode 100644 index 00000000..821df227 --- /dev/null +++ b/week-0/day-3/venv/lib/python3.6/site-packages/pip/req/req_file.py @@ -0,0 +1,342 @@ +""" +Requirements file parsing +""" + +from __future__ import absolute_import + +import os +import re +import shlex +import sys +import optparse +import warnings + +from pip._vendor.six.moves.urllib import parse as urllib_parse +from pip._vendor.six.moves import filterfalse + +import pip +from pip.download import get_file_content +from pip.req.req_install import InstallRequirement +from pip.exceptions import (RequirementsFileParseError) +from pip.utils.deprecation import RemovedInPip10Warning +from pip import cmdoptions + +__all__ = ['parse_requirements'] + +SCHEME_RE = re.compile(r'^(http|https|file):', re.I) +COMMENT_RE = re.compile(r'(^|\s)+#.*$') + +SUPPORTED_OPTIONS = [ + cmdoptions.constraints, + cmdoptions.editable, + cmdoptions.requirements, + cmdoptions.no_index, + cmdoptions.index_url, + cmdoptions.find_links, + cmdoptions.extra_index_url, + cmdoptions.allow_external, + cmdoptions.allow_all_external, + cmdoptions.no_allow_external, + cmdoptions.allow_unsafe, + cmdoptions.no_allow_unsafe, + cmdoptions.use_wheel, + cmdoptions.no_use_wheel, + cmdoptions.always_unzip, + cmdoptions.no_binary, + cmdoptions.only_binary, + cmdoptions.pre, + cmdoptions.process_dependency_links, + cmdoptions.trusted_host, + cmdoptions.require_hashes, +] + +# options to be passed to requirements +SUPPORTED_OPTIONS_REQ = [ + cmdoptions.install_options, + cmdoptions.global_options, + cmdoptions.hash, +] + +# the 'dest' string values +SUPPORTED_OPTIONS_REQ_DEST = [o().dest for o in SUPPORTED_OPTIONS_REQ] + + +def parse_requirements(filename, finder=None, comes_from=None, options=None, + session=None, constraint=False, wheel_cache=None): + """Parse a requirements file and yield InstallRequirement instances. + + :param filename: Path or url of requirements file. + :param finder: Instance of pip.index.PackageFinder. + :param comes_from: Origin description of requirements. + :param options: cli options. + :param session: Instance of pip.download.PipSession. + :param constraint: If true, parsing a constraint file rather than + requirements file. + :param wheel_cache: Instance of pip.wheel.WheelCache + """ + if session is None: + raise TypeError( + "parse_requirements() missing 1 required keyword argument: " + "'session'" + ) + + _, content = get_file_content( + filename, comes_from=comes_from, session=session + ) + + lines_enum = preprocess(content, options) + + for line_number, line in lines_enum: + req_iter = process_line(line, filename, line_number, finder, + comes_from, options, session, wheel_cache, + constraint=constraint) + for req in req_iter: + yield req + + +def preprocess(content, options): + """Split, filter, and join lines, and return a line iterator + + :param content: the content of the requirements file + :param options: cli options + """ + lines_enum = enumerate(content.splitlines(), start=1) + lines_enum = join_lines(lines_enum) + lines_enum = ignore_comments(lines_enum) + lines_enum = skip_regex(lines_enum, options) + return lines_enum + + +def process_line(line, filename, line_number, finder=None, comes_from=None, + options=None, session=None, wheel_cache=None, + constraint=False): + """Process a single requirements line; This can result in creating/yielding + requirements, or updating the finder. + + For lines that contain requirements, the only options that have an effect + are from SUPPORTED_OPTIONS_REQ, and they are scoped to the + requirement. Other options from SUPPORTED_OPTIONS may be present, but are + ignored. + + For lines that do not contain requirements, the only options that have an + effect are from SUPPORTED_OPTIONS. Options from SUPPORTED_OPTIONS_REQ may + be present, but are ignored. These lines may contain multiple options + (although our docs imply only one is supported), and all our parsed and + affect the finder. + + :param constraint: If True, parsing a constraints file. + :param options: OptionParser options that we may update + """ + parser = build_parser() + defaults = parser.get_default_values() + defaults.index_url = None + if finder: + # `finder.format_control` will be updated during parsing + defaults.format_control = finder.format_control + args_str, options_str = break_args_options(line) + if sys.version_info < (2, 7, 3): + # Prior to 2.7.3, shlex cannot deal with unicode entries + options_str = options_str.encode('utf8') + opts, _ = parser.parse_args(shlex.split(options_str), defaults) + + # preserve for the nested code path + line_comes_from = '%s %s (line %s)' % ( + '-c' if constraint else '-r', filename, line_number) + + # yield a line requirement + if args_str: + isolated = options.isolated_mode if options else False + if options: + cmdoptions.check_install_build_global(options, opts) + # get the options that apply to requirements + req_options = {} + for dest in SUPPORTED_OPTIONS_REQ_DEST: + if dest in opts.__dict__ and opts.__dict__[dest]: + req_options[dest] = opts.__dict__[dest] + yield InstallRequirement.from_line( + args_str, line_comes_from, constraint=constraint, + isolated=isolated, options=req_options, wheel_cache=wheel_cache + ) + + # yield an editable requirement + elif opts.editables: + isolated = options.isolated_mode if options else False + default_vcs = options.default_vcs if options else None + yield InstallRequirement.from_editable( + opts.editables[0], comes_from=line_comes_from, + constraint=constraint, default_vcs=default_vcs, isolated=isolated, + wheel_cache=wheel_cache + ) + + # parse a nested requirements file + elif opts.requirements or opts.constraints: + if opts.requirements: + req_path = opts.requirements[0] + nested_constraint = False + else: + req_path = opts.constraints[0] + nested_constraint = True + # original file is over http + if SCHEME_RE.search(filename): + # do a url join so relative paths work + req_path = urllib_parse.urljoin(filename, req_path) + # original file and nested file are paths + elif not SCHEME_RE.search(req_path): + # do a join so relative paths work + req_path = os.path.join(os.path.dirname(filename), req_path) + # TODO: Why not use `comes_from='-r {} (line {})'` here as well? + parser = parse_requirements( + req_path, finder, comes_from, options, session, + constraint=nested_constraint, wheel_cache=wheel_cache + ) + for req in parser: + yield req + + # percolate hash-checking option upward + elif opts.require_hashes: + options.require_hashes = opts.require_hashes + + # set finder options + elif finder: + if opts.allow_external: + warnings.warn( + "--allow-external has been deprecated and will be removed in " + "the future. Due to changes in the repository protocol, it no " + "longer has any effect.", + RemovedInPip10Warning, + ) + + if opts.allow_all_external: + warnings.warn( + "--allow-all-external has been deprecated and will be removed " + "in the future. Due to changes in the repository protocol, it " + "no longer has any effect.", + RemovedInPip10Warning, + ) + + if opts.allow_unverified: + warnings.warn( + "--allow-unverified has been deprecated and will be removed " + "in the future. Due to changes in the repository protocol, it " + "no longer has any effect.", + RemovedInPip10Warning, + ) + + if opts.index_url: + finder.index_urls = [opts.index_url] + if opts.use_wheel is False: + finder.use_wheel = False + pip.index.fmt_ctl_no_use_wheel(finder.format_control) + if opts.no_index is True: + finder.index_urls = [] + if opts.extra_index_urls: + finder.index_urls.extend(opts.extra_index_urls) + if opts.find_links: + # FIXME: it would be nice to keep track of the source + # of the find_links: support a find-links local path + # relative to a requirements file. + value = opts.find_links[0] + req_dir = os.path.dirname(os.path.abspath(filename)) + relative_to_reqs_file = os.path.join(req_dir, value) + if os.path.exists(relative_to_reqs_file): + value = relative_to_reqs_file + finder.find_links.append(value) + if opts.pre: + finder.allow_all_prereleases = True + if opts.process_dependency_links: + finder.process_dependency_links = True + if opts.trusted_hosts: + finder.secure_origins.extend( + ("*", host, "*") for host in opts.trusted_hosts) + + +def break_args_options(line): + """Break up the line into an args and options string. We only want to shlex + (and then optparse) the options, not the args. args can contain markers + which are corrupted by shlex. + """ + tokens = line.split(' ') + args = [] + options = tokens[:] + for token in tokens: + if token.startswith('-') or token.startswith('--'): + break + else: + args.append(token) + options.pop(0) + return ' '.join(args), ' '.join(options) + + +def build_parser(): + """ + Return a parser for parsing requirement lines + """ + parser = optparse.OptionParser(add_help_option=False) + + option_factories = SUPPORTED_OPTIONS + SUPPORTED_OPTIONS_REQ + for option_factory in option_factories: + option = option_factory() + parser.add_option(option) + + # By default optparse sys.exits on parsing errors. We want to wrap + # that in our own exception. + def parser_exit(self, msg): + raise RequirementsFileParseError(msg) + parser.exit = parser_exit + + return parser + + +def join_lines(lines_enum): + """Joins a line ending in '\' with the previous line (except when following + comments). The joined line takes on the index of the first line. + """ + primary_line_number = None + new_line = [] + for line_number, line in lines_enum: + if not line.endswith('\\') or COMMENT_RE.match(line): + if COMMENT_RE.match(line): + # this ensures comments are always matched later + line = ' ' + line + if new_line: + new_line.append(line) + yield primary_line_number, ''.join(new_line) + new_line = [] + else: + yield line_number, line + else: + if not new_line: + primary_line_number = line_number + new_line.append(line.strip('\\')) + + # last line contains \ + if new_line: + yield primary_line_number, ''.join(new_line) + + # TODO: handle space after '\'. + + +def ignore_comments(lines_enum): + """ + Strips comments and filter empty lines. + """ + for line_number, line in lines_enum: + line = COMMENT_RE.sub('', line) + line = line.strip() + if line: + yield line_number, line + + +def skip_regex(lines_enum, options): + """ + Skip lines that match '--skip-requirements-regex' pattern + + Note: the regex pattern is only built once + """ + skip_regex = options.skip_requirements_regex if options else None + if skip_regex: + pattern = re.compile(skip_regex) + lines_enum = filterfalse( + lambda e: pattern.search(e[1]), + lines_enum) + return lines_enum diff --git a/week-0/day-3/venv/lib/python3.6/site-packages/pip/req/req_install.py b/week-0/day-3/venv/lib/python3.6/site-packages/pip/req/req_install.py new file mode 100644 index 00000000..1a98f377 --- /dev/null +++ b/week-0/day-3/venv/lib/python3.6/site-packages/pip/req/req_install.py @@ -0,0 +1,1204 @@ +from __future__ import absolute_import + +import logging +import os +import re +import shutil +import sys +import tempfile +import traceback +import warnings +import zipfile + +from distutils import sysconfig +from distutils.util import change_root +from email.parser import FeedParser + +from pip._vendor import pkg_resources, six +from pip._vendor.packaging import specifiers +from pip._vendor.packaging.markers import Marker +from pip._vendor.packaging.requirements import InvalidRequirement, Requirement +from pip._vendor.packaging.utils import canonicalize_name +from pip._vendor.packaging.version import Version, parse as parse_version +from pip._vendor.six.moves import configparser + +import pip.wheel + +from pip.compat import native_str, get_stdlib, WINDOWS +from pip.download import is_url, url_to_path, path_to_url, is_archive_file +from pip.exceptions import ( + InstallationError, UninstallationError, +) +from pip.locations import ( + bin_py, running_under_virtualenv, PIP_DELETE_MARKER_FILENAME, bin_user, +) +from pip.utils import ( + display_path, rmtree, ask_path_exists, backup_dir, is_installable_dir, + dist_in_usersite, dist_in_site_packages, egg_link_path, + call_subprocess, read_text_file, FakeFile, _make_build_dir, ensure_dir, + get_installed_version, normalize_path, dist_is_local, +) + +from pip.utils.hashes import Hashes +from pip.utils.deprecation import RemovedInPip10Warning +from pip.utils.logging import indent_log +from pip.utils.setuptools_build import SETUPTOOLS_SHIM +from pip.utils.ui import open_spinner +from pip.req.req_uninstall import UninstallPathSet +from pip.vcs import vcs +from pip.wheel import move_wheel_files, Wheel + + +logger = logging.getLogger(__name__) + +operators = specifiers.Specifier._operators.keys() + + +def _strip_extras(path): + m = re.match(r'^(.+)(\[[^\]]+\])$', path) + extras = None + if m: + path_no_extras = m.group(1) + extras = m.group(2) + else: + path_no_extras = path + + return path_no_extras, extras + + +def _safe_extras(extras): + return set(pkg_resources.safe_extra(extra) for extra in extras) + + +class InstallRequirement(object): + + def __init__(self, req, comes_from, source_dir=None, editable=False, + link=None, as_egg=False, update=True, + pycompile=True, markers=None, isolated=False, options=None, + wheel_cache=None, constraint=False): + self.extras = () + if isinstance(req, six.string_types): + try: + req = Requirement(req) + except InvalidRequirement: + if os.path.sep in req: + add_msg = "It looks like a path. Does it exist ?" + elif '=' in req and not any(op in req for op in operators): + add_msg = "= is not a valid operator. Did you mean == ?" + else: + add_msg = traceback.format_exc() + raise InstallationError( + "Invalid requirement: '%s'\n%s" % (req, add_msg)) + self.extras = _safe_extras(req.extras) + + self.req = req + self.comes_from = comes_from + self.constraint = constraint + self.source_dir = source_dir + self.editable = editable + + self._wheel_cache = wheel_cache + self.link = self.original_link = link + self.as_egg = as_egg + if markers is not None: + self.markers = markers + else: + self.markers = req and req.marker + self._egg_info_path = None + # This holds the pkg_resources.Distribution object if this requirement + # is already available: + self.satisfied_by = None + # This hold the pkg_resources.Distribution object if this requirement + # conflicts with another installed distribution: + self.conflicts_with = None + # Temporary build location + self._temp_build_dir = None + # Used to store the global directory where the _temp_build_dir should + # have been created. Cf _correct_build_location method. + self._ideal_build_dir = None + # True if the editable should be updated: + self.update = update + # Set to True after successful installation + self.install_succeeded = None + # UninstallPathSet of uninstalled distribution (for possible rollback) + self.uninstalled = None + # Set True if a legitimate do-nothing-on-uninstall has happened - e.g. + # system site packages, stdlib packages. + self.nothing_to_uninstall = False + self.use_user_site = False + self.target_dir = None + self.options = options if options else {} + self.pycompile = pycompile + # Set to True after successful preparation of this requirement + self.prepared = False + + self.isolated = isolated + + @classmethod + def from_editable(cls, editable_req, comes_from=None, default_vcs=None, + isolated=False, options=None, wheel_cache=None, + constraint=False): + from pip.index import Link + + name, url, extras_override = parse_editable( + editable_req, default_vcs) + if url.startswith('file:'): + source_dir = url_to_path(url) + else: + source_dir = None + + res = cls(name, comes_from, source_dir=source_dir, + editable=True, + link=Link(url), + constraint=constraint, + isolated=isolated, + options=options if options else {}, + wheel_cache=wheel_cache) + + if extras_override is not None: + res.extras = _safe_extras(extras_override) + + return res + + @classmethod + def from_line( + cls, name, comes_from=None, isolated=False, options=None, + wheel_cache=None, constraint=False): + """Creates an InstallRequirement from a name, which might be a + requirement, directory containing 'setup.py', filename, or URL. + """ + from pip.index import Link + + if is_url(name): + marker_sep = '; ' + else: + marker_sep = ';' + if marker_sep in name: + name, markers = name.split(marker_sep, 1) + markers = markers.strip() + if not markers: + markers = None + else: + markers = Marker(markers) + else: + markers = None + name = name.strip() + req = None + path = os.path.normpath(os.path.abspath(name)) + link = None + extras = None + + if is_url(name): + link = Link(name) + else: + p, extras = _strip_extras(path) + if (os.path.isdir(p) and + (os.path.sep in name or name.startswith('.'))): + + if not is_installable_dir(p): + raise InstallationError( + "Directory %r is not installable. File 'setup.py' " + "not found." % name + ) + link = Link(path_to_url(p)) + elif is_archive_file(p): + if not os.path.isfile(p): + logger.warning( + 'Requirement %r looks like a filename, but the ' + 'file does not exist', + name + ) + link = Link(path_to_url(p)) + + # it's a local file, dir, or url + if link: + # Handle relative file URLs + if link.scheme == 'file' and re.search(r'\.\./', link.url): + link = Link( + path_to_url(os.path.normpath(os.path.abspath(link.path)))) + # wheel file + if link.is_wheel: + wheel = Wheel(link.filename) # can raise InvalidWheelFilename + req = "%s==%s" % (wheel.name, wheel.version) + else: + # set the req to the egg fragment. when it's not there, this + # will become an 'unnamed' requirement + req = link.egg_fragment + + # a requirement specifier + else: + req = name + + options = options if options else {} + res = cls(req, comes_from, link=link, markers=markers, + isolated=isolated, options=options, + wheel_cache=wheel_cache, constraint=constraint) + + if extras: + res.extras = _safe_extras( + Requirement('placeholder' + extras).extras) + + return res + + def __str__(self): + if self.req: + s = str(self.req) + if self.link: + s += ' from %s' % self.link.url + else: + s = self.link.url if self.link else None + if self.satisfied_by is not None: + s += ' in %s' % display_path(self.satisfied_by.location) + if self.comes_from: + if isinstance(self.comes_from, six.string_types): + comes_from = self.comes_from + else: + comes_from = self.comes_from.from_path() + if comes_from: + s += ' (from %s)' % comes_from + return s + + def __repr__(self): + return '<%s object: %s editable=%r>' % ( + self.__class__.__name__, str(self), self.editable) + + def populate_link(self, finder, upgrade, require_hashes): + """Ensure that if a link can be found for this, that it is found. + + Note that self.link may still be None - if Upgrade is False and the + requirement is already installed. + + If require_hashes is True, don't use the wheel cache, because cached + wheels, always built locally, have different hashes than the files + downloaded from the index server and thus throw false hash mismatches. + Furthermore, cached wheels at present have undeterministic contents due + to file modification times. + """ + if self.link is None: + self.link = finder.find_requirement(self, upgrade) + if self._wheel_cache is not None and not require_hashes: + old_link = self.link + self.link = self._wheel_cache.cached_wheel(self.link, self.name) + if old_link != self.link: + logger.debug('Using cached wheel link: %s', self.link) + + @property + def specifier(self): + return self.req.specifier + + @property + def is_pinned(self): + """Return whether I am pinned to an exact version. + + For example, some-package==1.2 is pinned; some-package>1.2 is not. + """ + specifiers = self.specifier + return (len(specifiers) == 1 and + next(iter(specifiers)).operator in ('==', '===')) + + def from_path(self): + if self.req is None: + return None + s = str(self.req) + if self.comes_from: + if isinstance(self.comes_from, six.string_types): + comes_from = self.comes_from + else: + comes_from = self.comes_from.from_path() + if comes_from: + s += '->' + comes_from + return s + + def build_location(self, build_dir): + if self._temp_build_dir is not None: + return self._temp_build_dir + if self.req is None: + # for requirement via a path to a directory: the name of the + # package is not available yet so we create a temp directory + # Once run_egg_info will have run, we'll be able + # to fix it via _correct_build_location + # Some systems have /tmp as a symlink which confuses custom + # builds (such as numpy). Thus, we ensure that the real path + # is returned. + self._temp_build_dir = os.path.realpath( + tempfile.mkdtemp('-build', 'pip-') + ) + self._ideal_build_dir = build_dir + return self._temp_build_dir + if self.editable: + name = self.name.lower() + else: + name = self.name + # FIXME: Is there a better place to create the build_dir? (hg and bzr + # need this) + if not os.path.exists(build_dir): + logger.debug('Creating directory %s', build_dir) + _make_build_dir(build_dir) + return os.path.join(build_dir, name) + + def _correct_build_location(self): + """Move self._temp_build_dir to self._ideal_build_dir/self.req.name + + For some requirements (e.g. a path to a directory), the name of the + package is not available until we run egg_info, so the build_location + will return a temporary directory and store the _ideal_build_dir. + + This is only called by self.egg_info_path to fix the temporary build + directory. + """ + if self.source_dir is not None: + return + assert self.req is not None + assert self._temp_build_dir + assert self._ideal_build_dir + old_location = self._temp_build_dir + self._temp_build_dir = None + new_location = self.build_location(self._ideal_build_dir) + if os.path.exists(new_location): + raise InstallationError( + 'A package already exists in %s; please remove it to continue' + % display_path(new_location)) + logger.debug( + 'Moving package %s from %s to new location %s', + self, display_path(old_location), display_path(new_location), + ) + shutil.move(old_location, new_location) + self._temp_build_dir = new_location + self._ideal_build_dir = None + self.source_dir = new_location + self._egg_info_path = None + + @property + def name(self): + if self.req is None: + return None + return native_str(pkg_resources.safe_name(self.req.name)) + + @property + def setup_py_dir(self): + return os.path.join( + self.source_dir, + self.link and self.link.subdirectory_fragment or '') + + @property + def setup_py(self): + assert self.source_dir, "No source dir for %s" % self + try: + import setuptools # noqa + except ImportError: + if get_installed_version('setuptools') is None: + add_msg = "Please install setuptools." + else: + add_msg = traceback.format_exc() + # Setuptools is not available + raise InstallationError( + "Could not import setuptools which is required to " + "install from a source distribution.\n%s" % add_msg + ) + + setup_py = os.path.join(self.setup_py_dir, 'setup.py') + + # Python2 __file__ should not be unicode + if six.PY2 and isinstance(setup_py, six.text_type): + setup_py = setup_py.encode(sys.getfilesystemencoding()) + + return setup_py + + def run_egg_info(self): + assert self.source_dir + if self.name: + logger.debug( + 'Running setup.py (path:%s) egg_info for package %s', + self.setup_py, self.name, + ) + else: + logger.debug( + 'Running setup.py (path:%s) egg_info for package from %s', + self.setup_py, self.link, + ) + + with indent_log(): + script = SETUPTOOLS_SHIM % self.setup_py + base_cmd = [sys.executable, '-c', script] + if self.isolated: + base_cmd += ["--no-user-cfg"] + egg_info_cmd = base_cmd + ['egg_info'] + # We can't put the .egg-info files at the root, because then the + # source code will be mistaken for an installed egg, causing + # problems + if self.editable: + egg_base_option = [] + else: + egg_info_dir = os.path.join(self.setup_py_dir, 'pip-egg-info') + ensure_dir(egg_info_dir) + egg_base_option = ['--egg-base', 'pip-egg-info'] + call_subprocess( + egg_info_cmd + egg_base_option, + cwd=self.setup_py_dir, + show_stdout=False, + command_desc='python setup.py egg_info') + + if not self.req: + if isinstance(parse_version(self.pkg_info()["Version"]), Version): + op = "==" + else: + op = "===" + self.req = Requirement( + "".join([ + self.pkg_info()["Name"], + op, + self.pkg_info()["Version"], + ]) + ) + self._correct_build_location() + else: + metadata_name = canonicalize_name(self.pkg_info()["Name"]) + if canonicalize_name(self.req.name) != metadata_name: + logger.warning( + 'Running setup.py (path:%s) egg_info for package %s ' + 'produced metadata for project name %s. Fix your ' + '#egg=%s fragments.', + self.setup_py, self.name, metadata_name, self.name + ) + self.req = Requirement(metadata_name) + + def egg_info_data(self, filename): + if self.satisfied_by is not None: + if not self.satisfied_by.has_metadata(filename): + return None + return self.satisfied_by.get_metadata(filename) + assert self.source_dir + filename = self.egg_info_path(filename) + if not os.path.exists(filename): + return None + data = read_text_file(filename) + return data + + def egg_info_path(self, filename): + if self._egg_info_path is None: + if self.editable: + base = self.source_dir + else: + base = os.path.join(self.setup_py_dir, 'pip-egg-info') + filenames = os.listdir(base) + if self.editable: + filenames = [] + for root, dirs, files in os.walk(base): + for dir in vcs.dirnames: + if dir in dirs: + dirs.remove(dir) + # Iterate over a copy of ``dirs``, since mutating + # a list while iterating over it can cause trouble. + # (See https://github.com/pypa/pip/pull/462.) + for dir in list(dirs): + # Don't search in anything that looks like a virtualenv + # environment + if ( + os.path.lexists( + os.path.join(root, dir, 'bin', 'python') + ) or + os.path.exists( + os.path.join( + root, dir, 'Scripts', 'Python.exe' + ) + )): + dirs.remove(dir) + # Also don't search through tests + elif dir == 'test' or dir == 'tests': + dirs.remove(dir) + filenames.extend([os.path.join(root, dir) + for dir in dirs]) + filenames = [f for f in filenames if f.endswith('.egg-info')] + + if not filenames: + raise InstallationError( + 'No files/directories in %s (from %s)' % (base, filename) + ) + assert filenames, \ + "No files/directories in %s (from %s)" % (base, filename) + + # if we have more than one match, we pick the toplevel one. This + # can easily be the case if there is a dist folder which contains + # an extracted tarball for testing purposes. + if len(filenames) > 1: + filenames.sort( + key=lambda x: x.count(os.path.sep) + + (os.path.altsep and x.count(os.path.altsep) or 0) + ) + self._egg_info_path = os.path.join(base, filenames[0]) + return os.path.join(self._egg_info_path, filename) + + def pkg_info(self): + p = FeedParser() + data = self.egg_info_data('PKG-INFO') + if not data: + logger.warning( + 'No PKG-INFO file found in %s', + display_path(self.egg_info_path('PKG-INFO')), + ) + p.feed(data or '') + return p.close() + + _requirements_section_re = re.compile(r'\[(.*?)\]') + + @property + def installed_version(self): + return get_installed_version(self.name) + + def assert_source_matches_version(self): + assert self.source_dir + version = self.pkg_info()['version'] + if self.req.specifier and version not in self.req.specifier: + logger.warning( + 'Requested %s, but installing version %s', + self, + self.installed_version, + ) + else: + logger.debug( + 'Source in %s has version %s, which satisfies requirement %s', + display_path(self.source_dir), + version, + self, + ) + + def update_editable(self, obtain=True): + if not self.link: + logger.debug( + "Cannot update repository at %s; repository location is " + "unknown", + self.source_dir, + ) + return + assert self.editable + assert self.source_dir + if self.link.scheme == 'file': + # Static paths don't get updated + return + assert '+' in self.link.url, "bad url: %r" % self.link.url + if not self.update: + return + vc_type, url = self.link.url.split('+', 1) + backend = vcs.get_backend(vc_type) + if backend: + vcs_backend = backend(self.link.url) + if obtain: + vcs_backend.obtain(self.source_dir) + else: + vcs_backend.export(self.source_dir) + else: + assert 0, ( + 'Unexpected version control type (in %s): %s' + % (self.link, vc_type)) + + def uninstall(self, auto_confirm=False): + """ + Uninstall the distribution currently satisfying this requirement. + + Prompts before removing or modifying files unless + ``auto_confirm`` is True. + + Refuses to delete or modify files outside of ``sys.prefix`` - + thus uninstallation within a virtual environment can only + modify that virtual environment, even if the virtualenv is + linked to global site-packages. + + """ + if not self.check_if_exists(): + raise UninstallationError( + "Cannot uninstall requirement %s, not installed" % (self.name,) + ) + dist = self.satisfied_by or self.conflicts_with + + dist_path = normalize_path(dist.location) + if not dist_is_local(dist): + logger.info( + "Not uninstalling %s at %s, outside environment %s", + dist.key, + dist_path, + sys.prefix, + ) + self.nothing_to_uninstall = True + return + + if dist_path in get_stdlib(): + logger.info( + "Not uninstalling %s at %s, as it is in the standard library.", + dist.key, + dist_path, + ) + self.nothing_to_uninstall = True + return + + paths_to_remove = UninstallPathSet(dist) + develop_egg_link = egg_link_path(dist) + develop_egg_link_egg_info = '{0}.egg-info'.format( + pkg_resources.to_filename(dist.project_name)) + egg_info_exists = dist.egg_info and os.path.exists(dist.egg_info) + # Special case for distutils installed package + distutils_egg_info = getattr(dist._provider, 'path', None) + + # Uninstall cases order do matter as in the case of 2 installs of the + # same package, pip needs to uninstall the currently detected version + if (egg_info_exists and dist.egg_info.endswith('.egg-info') and + not dist.egg_info.endswith(develop_egg_link_egg_info)): + # if dist.egg_info.endswith(develop_egg_link_egg_info), we + # are in fact in the develop_egg_link case + paths_to_remove.add(dist.egg_info) + if dist.has_metadata('installed-files.txt'): + for installed_file in dist.get_metadata( + 'installed-files.txt').splitlines(): + path = os.path.normpath( + os.path.join(dist.egg_info, installed_file) + ) + paths_to_remove.add(path) + # FIXME: need a test for this elif block + # occurs with --single-version-externally-managed/--record outside + # of pip + elif dist.has_metadata('top_level.txt'): + if dist.has_metadata('namespace_packages.txt'): + namespaces = dist.get_metadata('namespace_packages.txt') + else: + namespaces = [] + for top_level_pkg in [ + p for p + in dist.get_metadata('top_level.txt').splitlines() + if p and p not in namespaces]: + path = os.path.join(dist.location, top_level_pkg) + paths_to_remove.add(path) + paths_to_remove.add(path + '.py') + paths_to_remove.add(path + '.pyc') + paths_to_remove.add(path + '.pyo') + + elif distutils_egg_info: + warnings.warn( + "Uninstalling a distutils installed project ({0}) has been " + "deprecated and will be removed in a future version. This is " + "due to the fact that uninstalling a distutils project will " + "only partially uninstall the project.".format(self.name), + RemovedInPip10Warning, + ) + paths_to_remove.add(distutils_egg_info) + + elif dist.location.endswith('.egg'): + # package installed by easy_install + # We cannot match on dist.egg_name because it can slightly vary + # i.e. setuptools-0.6c11-py2.6.egg vs setuptools-0.6rc11-py2.6.egg + paths_to_remove.add(dist.location) + easy_install_egg = os.path.split(dist.location)[1] + easy_install_pth = os.path.join(os.path.dirname(dist.location), + 'easy-install.pth') + paths_to_remove.add_pth(easy_install_pth, './' + easy_install_egg) + + elif egg_info_exists and dist.egg_info.endswith('.dist-info'): + for path in pip.wheel.uninstallation_paths(dist): + paths_to_remove.add(path) + + elif develop_egg_link: + # develop egg + with open(develop_egg_link, 'r') as fh: + link_pointer = os.path.normcase(fh.readline().strip()) + assert (link_pointer == dist.location), ( + 'Egg-link %s does not match installed location of %s ' + '(at %s)' % (link_pointer, self.name, dist.location) + ) + paths_to_remove.add(develop_egg_link) + easy_install_pth = os.path.join(os.path.dirname(develop_egg_link), + 'easy-install.pth') + paths_to_remove.add_pth(easy_install_pth, dist.location) + + else: + logger.debug( + 'Not sure how to uninstall: %s - Check: %s', + dist, dist.location) + + # find distutils scripts= scripts + if dist.has_metadata('scripts') and dist.metadata_isdir('scripts'): + for script in dist.metadata_listdir('scripts'): + if dist_in_usersite(dist): + bin_dir = bin_user + else: + bin_dir = bin_py + paths_to_remove.add(os.path.join(bin_dir, script)) + if WINDOWS: + paths_to_remove.add(os.path.join(bin_dir, script) + '.bat') + + # find console_scripts + if dist.has_metadata('entry_points.txt'): + if six.PY2: + options = {} + else: + options = {"delimiters": ('=', )} + config = configparser.SafeConfigParser(**options) + config.readfp( + FakeFile(dist.get_metadata_lines('entry_points.txt')) + ) + if config.has_section('console_scripts'): + for name, value in config.items('console_scripts'): + if dist_in_usersite(dist): + bin_dir = bin_user + else: + bin_dir = bin_py + paths_to_remove.add(os.path.join(bin_dir, name)) + if WINDOWS: + paths_to_remove.add( + os.path.join(bin_dir, name) + '.exe' + ) + paths_to_remove.add( + os.path.join(bin_dir, name) + '.exe.manifest' + ) + paths_to_remove.add( + os.path.join(bin_dir, name) + '-script.py' + ) + + paths_to_remove.remove(auto_confirm) + self.uninstalled = paths_to_remove + + def rollback_uninstall(self): + if self.uninstalled: + self.uninstalled.rollback() + else: + logger.error( + "Can't rollback %s, nothing uninstalled.", self.name, + ) + + def commit_uninstall(self): + if self.uninstalled: + self.uninstalled.commit() + elif not self.nothing_to_uninstall: + logger.error( + "Can't commit %s, nothing uninstalled.", self.name, + ) + + def archive(self, build_dir): + assert self.source_dir + create_archive = True + archive_name = '%s-%s.zip' % (self.name, self.pkg_info()["version"]) + archive_path = os.path.join(build_dir, archive_name) + if os.path.exists(archive_path): + response = ask_path_exists( + 'The file %s exists. (i)gnore, (w)ipe, (b)ackup, (a)bort ' % + display_path(archive_path), ('i', 'w', 'b', 'a')) + if response == 'i': + create_archive = False + elif response == 'w': + logger.warning('Deleting %s', display_path(archive_path)) + os.remove(archive_path) + elif response == 'b': + dest_file = backup_dir(archive_path) + logger.warning( + 'Backing up %s to %s', + display_path(archive_path), + display_path(dest_file), + ) + shutil.move(archive_path, dest_file) + elif response == 'a': + sys.exit(-1) + if create_archive: + zip = zipfile.ZipFile( + archive_path, 'w', zipfile.ZIP_DEFLATED, + allowZip64=True + ) + dir = os.path.normcase(os.path.abspath(self.setup_py_dir)) + for dirpath, dirnames, filenames in os.walk(dir): + if 'pip-egg-info' in dirnames: + dirnames.remove('pip-egg-info') + for dirname in dirnames: + dirname = os.path.join(dirpath, dirname) + name = self._clean_zip_name(dirname, dir) + zipdir = zipfile.ZipInfo(self.name + '/' + name + '/') + zipdir.external_attr = 0x1ED << 16 # 0o755 + zip.writestr(zipdir, '') + for filename in filenames: + if filename == PIP_DELETE_MARKER_FILENAME: + continue + filename = os.path.join(dirpath, filename) + name = self._clean_zip_name(filename, dir) + zip.write(filename, self.name + '/' + name) + zip.close() + logger.info('Saved %s', display_path(archive_path)) + + def _clean_zip_name(self, name, prefix): + assert name.startswith(prefix + os.path.sep), ( + "name %r doesn't start with prefix %r" % (name, prefix) + ) + name = name[len(prefix) + 1:] + name = name.replace(os.path.sep, '/') + return name + + def match_markers(self, extras_requested=None): + if not extras_requested: + # Provide an extra to safely evaluate the markers + # without matching any extra + extras_requested = ('',) + if self.markers is not None: + return any( + self.markers.evaluate({'extra': extra}) + for extra in extras_requested) + else: + return True + + def install(self, install_options, global_options=[], root=None, + prefix=None): + if self.editable: + self.install_editable( + install_options, global_options, prefix=prefix) + return + if self.is_wheel: + version = pip.wheel.wheel_version(self.source_dir) + pip.wheel.check_compatibility(version, self.name) + + self.move_wheel_files(self.source_dir, root=root, prefix=prefix) + self.install_succeeded = True + return + + # Extend the list of global and install options passed on to + # the setup.py call with the ones from the requirements file. + # Options specified in requirements file override those + # specified on the command line, since the last option given + # to setup.py is the one that is used. + global_options += self.options.get('global_options', []) + install_options += self.options.get('install_options', []) + + if self.isolated: + global_options = list(global_options) + ["--no-user-cfg"] + + temp_location = tempfile.mkdtemp('-record', 'pip-') + record_filename = os.path.join(temp_location, 'install-record.txt') + try: + install_args = self.get_install_args( + global_options, record_filename, root, prefix) + msg = 'Running setup.py install for %s' % (self.name,) + with open_spinner(msg) as spinner: + with indent_log(): + call_subprocess( + install_args + install_options, + cwd=self.setup_py_dir, + show_stdout=False, + spinner=spinner, + ) + + if not os.path.exists(record_filename): + logger.debug('Record file %s not found', record_filename) + return + self.install_succeeded = True + if self.as_egg: + # there's no --always-unzip option we can pass to install + # command so we unable to save the installed-files.txt + return + + def prepend_root(path): + if root is None or not os.path.isabs(path): + return path + else: + return change_root(root, path) + + with open(record_filename) as f: + for line in f: + directory = os.path.dirname(line) + if directory.endswith('.egg-info'): + egg_info_dir = prepend_root(directory) + break + else: + logger.warning( + 'Could not find .egg-info directory in install record' + ' for %s', + self, + ) + # FIXME: put the record somewhere + # FIXME: should this be an error? + return + new_lines = [] + with open(record_filename) as f: + for line in f: + filename = line.strip() + if os.path.isdir(filename): + filename += os.path.sep + new_lines.append( + os.path.relpath( + prepend_root(filename), egg_info_dir) + ) + inst_files_path = os.path.join(egg_info_dir, 'installed-files.txt') + with open(inst_files_path, 'w') as f: + f.write('\n'.join(new_lines) + '\n') + finally: + if os.path.exists(record_filename): + os.remove(record_filename) + rmtree(temp_location) + + def ensure_has_source_dir(self, parent_dir): + """Ensure that a source_dir is set. + + This will create a temporary build dir if the name of the requirement + isn't known yet. + + :param parent_dir: The ideal pip parent_dir for the source_dir. + Generally src_dir for editables and build_dir for sdists. + :return: self.source_dir + """ + if self.source_dir is None: + self.source_dir = self.build_location(parent_dir) + return self.source_dir + + def get_install_args(self, global_options, record_filename, root, prefix): + install_args = [sys.executable, "-u"] + install_args.append('-c') + install_args.append(SETUPTOOLS_SHIM % self.setup_py) + install_args += list(global_options) + \ + ['install', '--record', record_filename] + + if not self.as_egg: + install_args += ['--single-version-externally-managed'] + + if root is not None: + install_args += ['--root', root] + if prefix is not None: + install_args += ['--prefix', prefix] + + if self.pycompile: + install_args += ["--compile"] + else: + install_args += ["--no-compile"] + + if running_under_virtualenv(): + py_ver_str = 'python' + sysconfig.get_python_version() + install_args += ['--install-headers', + os.path.join(sys.prefix, 'include', 'site', + py_ver_str, self.name)] + + return install_args + + def remove_temporary_source(self): + """Remove the source files from this requirement, if they are marked + for deletion""" + if self.source_dir and os.path.exists( + os.path.join(self.source_dir, PIP_DELETE_MARKER_FILENAME)): + logger.debug('Removing source in %s', self.source_dir) + rmtree(self.source_dir) + self.source_dir = None + if self._temp_build_dir and os.path.exists(self._temp_build_dir): + rmtree(self._temp_build_dir) + self._temp_build_dir = None + + def install_editable(self, install_options, + global_options=(), prefix=None): + logger.info('Running setup.py develop for %s', self.name) + + if self.isolated: + global_options = list(global_options) + ["--no-user-cfg"] + + if prefix: + prefix_param = ['--prefix={0}'.format(prefix)] + install_options = list(install_options) + prefix_param + + with indent_log(): + # FIXME: should we do --install-headers here too? + call_subprocess( + [ + sys.executable, + '-c', + SETUPTOOLS_SHIM % self.setup_py + ] + + list(global_options) + + ['develop', '--no-deps'] + + list(install_options), + + cwd=self.setup_py_dir, + show_stdout=False) + + self.install_succeeded = True + + def check_if_exists(self): + """Find an installed distribution that satisfies or conflicts + with this requirement, and set self.satisfied_by or + self.conflicts_with appropriately. + """ + if self.req is None: + return False + try: + # get_distribution() will resolve the entire list of requirements + # anyway, and we've already determined that we need the requirement + # in question, so strip the marker so that we don't try to + # evaluate it. + no_marker = Requirement(str(self.req)) + no_marker.marker = None + self.satisfied_by = pkg_resources.get_distribution(str(no_marker)) + if self.editable and self.satisfied_by: + self.conflicts_with = self.satisfied_by + # when installing editables, nothing pre-existing should ever + # satisfy + self.satisfied_by = None + return True + except pkg_resources.DistributionNotFound: + return False + except pkg_resources.VersionConflict: + existing_dist = pkg_resources.get_distribution( + self.req.name + ) + if self.use_user_site: + if dist_in_usersite(existing_dist): + self.conflicts_with = existing_dist + elif (running_under_virtualenv() and + dist_in_site_packages(existing_dist)): + raise InstallationError( + "Will not install to the user site because it will " + "lack sys.path precedence to %s in %s" % + (existing_dist.project_name, existing_dist.location) + ) + else: + self.conflicts_with = existing_dist + return True + + @property + def is_wheel(self): + return self.link and self.link.is_wheel + + def move_wheel_files(self, wheeldir, root=None, prefix=None): + move_wheel_files( + self.name, self.req, wheeldir, + user=self.use_user_site, + home=self.target_dir, + root=root, + prefix=prefix, + pycompile=self.pycompile, + isolated=self.isolated, + ) + + def get_dist(self): + """Return a pkg_resources.Distribution built from self.egg_info_path""" + egg_info = self.egg_info_path('').rstrip('/') + base_dir = os.path.dirname(egg_info) + metadata = pkg_resources.PathMetadata(base_dir, egg_info) + dist_name = os.path.splitext(os.path.basename(egg_info))[0] + return pkg_resources.Distribution( + os.path.dirname(egg_info), + project_name=dist_name, + metadata=metadata) + + @property + def has_hash_options(self): + """Return whether any known-good hashes are specified as options. + + These activate --require-hashes mode; hashes specified as part of a + URL do not. + + """ + return bool(self.options.get('hashes', {})) + + def hashes(self, trust_internet=True): + """Return a hash-comparer that considers my option- and URL-based + hashes to be known-good. + + Hashes in URLs--ones embedded in the requirements file, not ones + downloaded from an index server--are almost peers with ones from + flags. They satisfy --require-hashes (whether it was implicitly or + explicitly activated) but do not activate it. md5 and sha224 are not + allowed in flags, which should nudge people toward good algos. We + always OR all hashes together, even ones from URLs. + + :param trust_internet: Whether to trust URL-based (#md5=...) hashes + downloaded from the internet, as by populate_link() + + """ + good_hashes = self.options.get('hashes', {}).copy() + link = self.link if trust_internet else self.original_link + if link and link.hash: + good_hashes.setdefault(link.hash_name, []).append(link.hash) + return Hashes(good_hashes) + + +def _strip_postfix(req): + """ + Strip req postfix ( -dev, 0.2, etc ) + """ + # FIXME: use package_to_requirement? + match = re.search(r'^(.*?)(?:-dev|-\d.*)$', req) + if match: + # Strip off -dev, -0.2, etc. + req = match.group(1) + return req + + +def parse_editable(editable_req, default_vcs=None): + """Parses an editable requirement into: + - a requirement name + - an URL + - extras + - editable options + Accepted requirements: + svn+http://blahblah@rev#egg=Foobar[baz]&subdirectory=version_subdir + .[some_extra] + """ + + from pip.index import Link + + url = editable_req + extras = None + + # If a file path is specified with extras, strip off the extras. + m = re.match(r'^(.+)(\[[^\]]+\])$', url) + if m: + url_no_extras = m.group(1) + extras = m.group(2) + else: + url_no_extras = url + + if os.path.isdir(url_no_extras): + if not os.path.exists(os.path.join(url_no_extras, 'setup.py')): + raise InstallationError( + "Directory %r is not installable. File 'setup.py' not found." % + url_no_extras + ) + # Treating it as code that has already been checked out + url_no_extras = path_to_url(url_no_extras) + + if url_no_extras.lower().startswith('file:'): + package_name = Link(url_no_extras).egg_fragment + if extras: + return ( + package_name, + url_no_extras, + Requirement("placeholder" + extras.lower()).extras, + ) + else: + return package_name, url_no_extras, None + + for version_control in vcs: + if url.lower().startswith('%s:' % version_control): + url = '%s+%s' % (version_control, url) + break + + if '+' not in url: + if default_vcs: + warnings.warn( + "--default-vcs has been deprecated and will be removed in " + "the future.", + RemovedInPip10Warning, + ) + url = default_vcs + '+' + url + else: + raise InstallationError( + '%s should either be a path to a local project or a VCS url ' + 'beginning with svn+, git+, hg+, or bzr+' % + editable_req + ) + + vc_type = url.split('+', 1)[0].lower() + + if not vcs.get_backend(vc_type): + error_message = 'For --editable=%s only ' % editable_req + \ + ', '.join([backend.name + '+URL' for backend in vcs.backends]) + \ + ' is currently supported' + raise InstallationError(error_message) + + package_name = Link(url).egg_fragment + if not package_name: + raise InstallationError( + "Could not detect requirement name, please specify one with #egg=" + ) + if not package_name: + raise InstallationError( + '--editable=%s is not the right format; it must have ' + '#egg=Package' % editable_req + ) + return _strip_postfix(package_name), url, None diff --git a/week-0/day-3/venv/lib/python3.6/site-packages/pip/req/req_set.py b/week-0/day-3/venv/lib/python3.6/site-packages/pip/req/req_set.py new file mode 100644 index 00000000..76aec061 --- /dev/null +++ b/week-0/day-3/venv/lib/python3.6/site-packages/pip/req/req_set.py @@ -0,0 +1,798 @@ +from __future__ import absolute_import + +from collections import defaultdict +from itertools import chain +import logging +import os + +from pip._vendor import pkg_resources +from pip._vendor import requests + +from pip.compat import expanduser +from pip.download import (is_file_url, is_dir_url, is_vcs_url, url_to_path, + unpack_url) +from pip.exceptions import (InstallationError, BestVersionAlreadyInstalled, + DistributionNotFound, PreviousBuildDirError, + HashError, HashErrors, HashUnpinned, + DirectoryUrlHashUnsupported, VcsHashUnsupported, + UnsupportedPythonVersion) +from pip.req.req_install import InstallRequirement +from pip.utils import ( + display_path, dist_in_usersite, ensure_dir, normalize_path) +from pip.utils.hashes import MissingHashes +from pip.utils.logging import indent_log +from pip.utils.packaging import check_dist_requires_python +from pip.vcs import vcs +from pip.wheel import Wheel + +logger = logging.getLogger(__name__) + + +class Requirements(object): + + def __init__(self): + self._keys = [] + self._dict = {} + + def keys(self): + return self._keys + + def values(self): + return [self._dict[key] for key in self._keys] + + def __contains__(self, item): + return item in self._keys + + def __setitem__(self, key, value): + if key not in self._keys: + self._keys.append(key) + self._dict[key] = value + + def __getitem__(self, key): + return self._dict[key] + + def __repr__(self): + values = ['%s: %s' % (repr(k), repr(self[k])) for k in self.keys()] + return 'Requirements({%s})' % ', '.join(values) + + +class DistAbstraction(object): + """Abstracts out the wheel vs non-wheel prepare_files logic. + + The requirements for anything installable are as follows: + - we must be able to determine the requirement name + (or we can't correctly handle the non-upgrade case). + - we must be able to generate a list of run-time dependencies + without installing any additional packages (or we would + have to either burn time by doing temporary isolated installs + or alternatively violate pips 'don't start installing unless + all requirements are available' rule - neither of which are + desirable). + - for packages with setup requirements, we must also be able + to determine their requirements without installing additional + packages (for the same reason as run-time dependencies) + - we must be able to create a Distribution object exposing the + above metadata. + """ + + def __init__(self, req_to_install): + self.req_to_install = req_to_install + + def dist(self, finder): + """Return a setuptools Dist object.""" + raise NotImplementedError(self.dist) + + def prep_for_dist(self): + """Ensure that we can get a Dist for this requirement.""" + raise NotImplementedError(self.dist) + + +def make_abstract_dist(req_to_install): + """Factory to make an abstract dist object. + + Preconditions: Either an editable req with a source_dir, or satisfied_by or + a wheel link, or a non-editable req with a source_dir. + + :return: A concrete DistAbstraction. + """ + if req_to_install.editable: + return IsSDist(req_to_install) + elif req_to_install.link and req_to_install.link.is_wheel: + return IsWheel(req_to_install) + else: + return IsSDist(req_to_install) + + +class IsWheel(DistAbstraction): + + def dist(self, finder): + return list(pkg_resources.find_distributions( + self.req_to_install.source_dir))[0] + + def prep_for_dist(self): + # FIXME:https://github.com/pypa/pip/issues/1112 + pass + + +class IsSDist(DistAbstraction): + + def dist(self, finder): + dist = self.req_to_install.get_dist() + # FIXME: shouldn't be globally added: + if dist.has_metadata('dependency_links.txt'): + finder.add_dependency_links( + dist.get_metadata_lines('dependency_links.txt') + ) + return dist + + def prep_for_dist(self): + self.req_to_install.run_egg_info() + self.req_to_install.assert_source_matches_version() + + +class Installed(DistAbstraction): + + def dist(self, finder): + return self.req_to_install.satisfied_by + + def prep_for_dist(self): + pass + + +class RequirementSet(object): + + def __init__(self, build_dir, src_dir, download_dir, upgrade=False, + upgrade_strategy=None, ignore_installed=False, as_egg=False, + target_dir=None, ignore_dependencies=False, + force_reinstall=False, use_user_site=False, session=None, + pycompile=True, isolated=False, wheel_download_dir=None, + wheel_cache=None, require_hashes=False, + ignore_requires_python=False): + """Create a RequirementSet. + + :param wheel_download_dir: Where still-packed .whl files should be + written to. If None they are written to the download_dir parameter. + Separate to download_dir to permit only keeping wheel archives for + pip wheel. + :param download_dir: Where still packed archives should be written to. + If None they are not saved, and are deleted immediately after + unpacking. + :param wheel_cache: The pip wheel cache, for passing to + InstallRequirement. + """ + if session is None: + raise TypeError( + "RequirementSet() missing 1 required keyword argument: " + "'session'" + ) + + self.build_dir = build_dir + self.src_dir = src_dir + # XXX: download_dir and wheel_download_dir overlap semantically and may + # be combined if we're willing to have non-wheel archives present in + # the wheelhouse output by 'pip wheel'. + self.download_dir = download_dir + self.upgrade = upgrade + self.upgrade_strategy = upgrade_strategy + self.ignore_installed = ignore_installed + self.force_reinstall = force_reinstall + self.requirements = Requirements() + # Mapping of alias: real_name + self.requirement_aliases = {} + self.unnamed_requirements = [] + self.ignore_dependencies = ignore_dependencies + self.ignore_requires_python = ignore_requires_python + self.successfully_downloaded = [] + self.successfully_installed = [] + self.reqs_to_cleanup = [] + self.as_egg = as_egg + self.use_user_site = use_user_site + self.target_dir = target_dir # set from --target option + self.session = session + self.pycompile = pycompile + self.isolated = isolated + if wheel_download_dir: + wheel_download_dir = normalize_path(wheel_download_dir) + self.wheel_download_dir = wheel_download_dir + self._wheel_cache = wheel_cache + self.require_hashes = require_hashes + # Maps from install_req -> dependencies_of_install_req + self._dependencies = defaultdict(list) + + def __str__(self): + reqs = [req for req in self.requirements.values() + if not req.comes_from] + reqs.sort(key=lambda req: req.name.lower()) + return ' '.join([str(req.req) for req in reqs]) + + def __repr__(self): + reqs = [req for req in self.requirements.values()] + reqs.sort(key=lambda req: req.name.lower()) + reqs_str = ', '.join([str(req.req) for req in reqs]) + return ('<%s object; %d requirement(s): %s>' + % (self.__class__.__name__, len(reqs), reqs_str)) + + def add_requirement(self, install_req, parent_req_name=None, + extras_requested=None): + """Add install_req as a requirement to install. + + :param parent_req_name: The name of the requirement that needed this + added. The name is used because when multiple unnamed requirements + resolve to the same name, we could otherwise end up with dependency + links that point outside the Requirements set. parent_req must + already be added. Note that None implies that this is a user + supplied requirement, vs an inferred one. + :param extras_requested: an iterable of extras used to evaluate the + environement markers. + :return: Additional requirements to scan. That is either [] if + the requirement is not applicable, or [install_req] if the + requirement is applicable and has just been added. + """ + name = install_req.name + if not install_req.match_markers(extras_requested): + logger.warning("Ignoring %s: markers '%s' don't match your " + "environment", install_req.name, + install_req.markers) + return [] + + # This check has to come after we filter requirements with the + # environment markers. + if install_req.link and install_req.link.is_wheel: + wheel = Wheel(install_req.link.filename) + if not wheel.supported(): + raise InstallationError( + "%s is not a supported wheel on this platform." % + wheel.filename + ) + + install_req.as_egg = self.as_egg + install_req.use_user_site = self.use_user_site + install_req.target_dir = self.target_dir + install_req.pycompile = self.pycompile + install_req.is_direct = (parent_req_name is None) + + if not name: + # url or path requirement w/o an egg fragment + self.unnamed_requirements.append(install_req) + return [install_req] + else: + try: + existing_req = self.get_requirement(name) + except KeyError: + existing_req = None + if (parent_req_name is None and existing_req and not + existing_req.constraint and + existing_req.extras == install_req.extras and not + existing_req.req.specifier == install_req.req.specifier): + raise InstallationError( + 'Double requirement given: %s (already in %s, name=%r)' + % (install_req, existing_req, name)) + if not existing_req: + # Add requirement + self.requirements[name] = install_req + # FIXME: what about other normalizations? E.g., _ vs. -? + if name.lower() != name: + self.requirement_aliases[name.lower()] = name + result = [install_req] + else: + # Assume there's no need to scan, and that we've already + # encountered this for scanning. + result = [] + if not install_req.constraint and existing_req.constraint: + if (install_req.link and not (existing_req.link and + install_req.link.path == existing_req.link.path)): + self.reqs_to_cleanup.append(install_req) + raise InstallationError( + "Could not satisfy constraints for '%s': " + "installation from path or url cannot be " + "constrained to a version" % name) + # If we're now installing a constraint, mark the existing + # object for real installation. + existing_req.constraint = False + existing_req.extras = tuple( + sorted(set(existing_req.extras).union( + set(install_req.extras)))) + logger.debug("Setting %s extras to: %s", + existing_req, existing_req.extras) + # And now we need to scan this. + result = [existing_req] + # Canonicalise to the already-added object for the backref + # check below. + install_req = existing_req + if parent_req_name: + parent_req = self.get_requirement(parent_req_name) + self._dependencies[parent_req].append(install_req) + return result + + def has_requirement(self, project_name): + name = project_name.lower() + if (name in self.requirements and + not self.requirements[name].constraint or + name in self.requirement_aliases and + not self.requirements[self.requirement_aliases[name]].constraint): + return True + return False + + @property + def has_requirements(self): + return list(req for req in self.requirements.values() if not + req.constraint) or self.unnamed_requirements + + @property + def is_download(self): + if self.download_dir: + self.download_dir = expanduser(self.download_dir) + if os.path.exists(self.download_dir): + return True + else: + logger.critical('Could not find download directory') + raise InstallationError( + "Could not find or access download directory '%s'" + % display_path(self.download_dir)) + return False + + def get_requirement(self, project_name): + for name in project_name, project_name.lower(): + if name in self.requirements: + return self.requirements[name] + if name in self.requirement_aliases: + return self.requirements[self.requirement_aliases[name]] + raise KeyError("No project with the name %r" % project_name) + + def uninstall(self, auto_confirm=False): + for req in self.requirements.values(): + if req.constraint: + continue + req.uninstall(auto_confirm=auto_confirm) + req.commit_uninstall() + + def prepare_files(self, finder): + """ + Prepare process. Create temp directories, download and/or unpack files. + """ + # make the wheelhouse + if self.wheel_download_dir: + ensure_dir(self.wheel_download_dir) + + # If any top-level requirement has a hash specified, enter + # hash-checking mode, which requires hashes from all. + root_reqs = self.unnamed_requirements + self.requirements.values() + require_hashes = (self.require_hashes or + any(req.has_hash_options for req in root_reqs)) + if require_hashes and self.as_egg: + raise InstallationError( + '--egg is not allowed with --require-hashes mode, since it ' + 'delegates dependency resolution to setuptools and could thus ' + 'result in installation of unhashed packages.') + + # Actually prepare the files, and collect any exceptions. Most hash + # exceptions cannot be checked ahead of time, because + # req.populate_link() needs to be called before we can make decisions + # based on link type. + discovered_reqs = [] + hash_errors = HashErrors() + for req in chain(root_reqs, discovered_reqs): + try: + discovered_reqs.extend(self._prepare_file( + finder, + req, + require_hashes=require_hashes, + ignore_dependencies=self.ignore_dependencies)) + except HashError as exc: + exc.req = req + hash_errors.append(exc) + + if hash_errors: + raise hash_errors + + def _is_upgrade_allowed(self, req): + return self.upgrade and ( + self.upgrade_strategy == "eager" or ( + self.upgrade_strategy == "only-if-needed" and req.is_direct + ) + ) + + def _check_skip_installed(self, req_to_install, finder): + """Check if req_to_install should be skipped. + + This will check if the req is installed, and whether we should upgrade + or reinstall it, taking into account all the relevant user options. + + After calling this req_to_install will only have satisfied_by set to + None if the req_to_install is to be upgraded/reinstalled etc. Any + other value will be a dist recording the current thing installed that + satisfies the requirement. + + Note that for vcs urls and the like we can't assess skipping in this + routine - we simply identify that we need to pull the thing down, + then later on it is pulled down and introspected to assess upgrade/ + reinstalls etc. + + :return: A text reason for why it was skipped, or None. + """ + # Check whether to upgrade/reinstall this req or not. + req_to_install.check_if_exists() + if req_to_install.satisfied_by: + upgrade_allowed = self._is_upgrade_allowed(req_to_install) + + # Is the best version is installed. + best_installed = False + + if upgrade_allowed: + # For link based requirements we have to pull the + # tree down and inspect to assess the version #, so + # its handled way down. + if not (self.force_reinstall or req_to_install.link): + try: + finder.find_requirement( + req_to_install, upgrade_allowed) + except BestVersionAlreadyInstalled: + best_installed = True + except DistributionNotFound: + # No distribution found, so we squash the + # error - it will be raised later when we + # re-try later to do the install. + # Why don't we just raise here? + pass + + if not best_installed: + # don't uninstall conflict if user install and + # conflict is not user install + if not (self.use_user_site and not + dist_in_usersite(req_to_install.satisfied_by)): + req_to_install.conflicts_with = \ + req_to_install.satisfied_by + req_to_install.satisfied_by = None + + # Figure out a nice message to say why we're skipping this. + if best_installed: + skip_reason = 'already up-to-date' + elif self.upgrade_strategy == "only-if-needed": + skip_reason = 'not upgraded as not directly required' + else: + skip_reason = 'already satisfied' + + return skip_reason + else: + return None + + def _prepare_file(self, + finder, + req_to_install, + require_hashes=False, + ignore_dependencies=False): + """Prepare a single requirements file. + + :return: A list of additional InstallRequirements to also install. + """ + # Tell user what we are doing for this requirement: + # obtain (editable), skipping, processing (local url), collecting + # (remote url or package name) + if req_to_install.constraint or req_to_install.prepared: + return [] + + req_to_install.prepared = True + + # ###################### # + # # print log messages # # + # ###################### # + if req_to_install.editable: + logger.info('Obtaining %s', req_to_install) + else: + # satisfied_by is only evaluated by calling _check_skip_installed, + # so it must be None here. + assert req_to_install.satisfied_by is None + if not self.ignore_installed: + skip_reason = self._check_skip_installed( + req_to_install, finder) + + if req_to_install.satisfied_by: + assert skip_reason is not None, ( + '_check_skip_installed returned None but ' + 'req_to_install.satisfied_by is set to %r' + % (req_to_install.satisfied_by,)) + logger.info( + 'Requirement %s: %s', skip_reason, + req_to_install) + else: + if (req_to_install.link and + req_to_install.link.scheme == 'file'): + path = url_to_path(req_to_install.link.url) + logger.info('Processing %s', display_path(path)) + else: + logger.info('Collecting %s', req_to_install) + + with indent_log(): + # ################################ # + # # vcs update or unpack archive # # + # ################################ # + if req_to_install.editable: + if require_hashes: + raise InstallationError( + 'The editable requirement %s cannot be installed when ' + 'requiring hashes, because there is no single file to ' + 'hash.' % req_to_install) + req_to_install.ensure_has_source_dir(self.src_dir) + req_to_install.update_editable(not self.is_download) + abstract_dist = make_abstract_dist(req_to_install) + abstract_dist.prep_for_dist() + if self.is_download: + req_to_install.archive(self.download_dir) + req_to_install.check_if_exists() + elif req_to_install.satisfied_by: + if require_hashes: + logger.debug( + 'Since it is already installed, we are trusting this ' + 'package without checking its hash. To ensure a ' + 'completely repeatable environment, install into an ' + 'empty virtualenv.') + abstract_dist = Installed(req_to_install) + else: + # @@ if filesystem packages are not marked + # editable in a req, a non deterministic error + # occurs when the script attempts to unpack the + # build directory + req_to_install.ensure_has_source_dir(self.build_dir) + # If a checkout exists, it's unwise to keep going. version + # inconsistencies are logged later, but do not fail the + # installation. + # FIXME: this won't upgrade when there's an existing + # package unpacked in `req_to_install.source_dir` + if os.path.exists( + os.path.join(req_to_install.source_dir, 'setup.py')): + raise PreviousBuildDirError( + "pip can't proceed with requirements '%s' due to a" + " pre-existing build directory (%s). This is " + "likely due to a previous installation that failed" + ". pip is being responsible and not assuming it " + "can delete this. Please delete it and try again." + % (req_to_install, req_to_install.source_dir) + ) + req_to_install.populate_link( + finder, + self._is_upgrade_allowed(req_to_install), + require_hashes + ) + # We can't hit this spot and have populate_link return None. + # req_to_install.satisfied_by is None here (because we're + # guarded) and upgrade has no impact except when satisfied_by + # is not None. + # Then inside find_requirement existing_applicable -> False + # If no new versions are found, DistributionNotFound is raised, + # otherwise a result is guaranteed. + assert req_to_install.link + link = req_to_install.link + + # Now that we have the real link, we can tell what kind of + # requirements we have and raise some more informative errors + # than otherwise. (For example, we can raise VcsHashUnsupported + # for a VCS URL rather than HashMissing.) + if require_hashes: + # We could check these first 2 conditions inside + # unpack_url and save repetition of conditions, but then + # we would report less-useful error messages for + # unhashable requirements, complaining that there's no + # hash provided. + if is_vcs_url(link): + raise VcsHashUnsupported() + elif is_file_url(link) and is_dir_url(link): + raise DirectoryUrlHashUnsupported() + if (not req_to_install.original_link and + not req_to_install.is_pinned): + # Unpinned packages are asking for trouble when a new + # version is uploaded. This isn't a security check, but + # it saves users a surprising hash mismatch in the + # future. + # + # file:/// URLs aren't pinnable, so don't complain + # about them not being pinned. + raise HashUnpinned() + hashes = req_to_install.hashes( + trust_internet=not require_hashes) + if require_hashes and not hashes: + # Known-good hashes are missing for this requirement, so + # shim it with a facade object that will provoke hash + # computation and then raise a HashMissing exception + # showing the user what the hash should be. + hashes = MissingHashes() + + try: + download_dir = self.download_dir + # We always delete unpacked sdists after pip ran. + autodelete_unpacked = True + if req_to_install.link.is_wheel \ + and self.wheel_download_dir: + # when doing 'pip wheel` we download wheels to a + # dedicated dir. + download_dir = self.wheel_download_dir + if req_to_install.link.is_wheel: + if download_dir: + # When downloading, we only unpack wheels to get + # metadata. + autodelete_unpacked = True + else: + # When installing a wheel, we use the unpacked + # wheel. + autodelete_unpacked = False + unpack_url( + req_to_install.link, req_to_install.source_dir, + download_dir, autodelete_unpacked, + session=self.session, hashes=hashes) + except requests.HTTPError as exc: + logger.critical( + 'Could not install requirement %s because ' + 'of error %s', + req_to_install, + exc, + ) + raise InstallationError( + 'Could not install requirement %s because ' + 'of HTTP error %s for URL %s' % + (req_to_install, exc, req_to_install.link) + ) + abstract_dist = make_abstract_dist(req_to_install) + abstract_dist.prep_for_dist() + if self.is_download: + # Make a .zip of the source_dir we already created. + if req_to_install.link.scheme in vcs.all_schemes: + req_to_install.archive(self.download_dir) + # req_to_install.req is only avail after unpack for URL + # pkgs repeat check_if_exists to uninstall-on-upgrade + # (#14) + if not self.ignore_installed: + req_to_install.check_if_exists() + if req_to_install.satisfied_by: + if self.upgrade or self.ignore_installed: + # don't uninstall conflict if user install and + # conflict is not user install + if not (self.use_user_site and not + dist_in_usersite( + req_to_install.satisfied_by)): + req_to_install.conflicts_with = \ + req_to_install.satisfied_by + req_to_install.satisfied_by = None + else: + logger.info( + 'Requirement already satisfied (use ' + '--upgrade to upgrade): %s', + req_to_install, + ) + + # ###################### # + # # parse dependencies # # + # ###################### # + dist = abstract_dist.dist(finder) + try: + check_dist_requires_python(dist) + except UnsupportedPythonVersion as e: + if self.ignore_requires_python: + logger.warning(e.args[0]) + else: + req_to_install.remove_temporary_source() + raise + more_reqs = [] + + def add_req(subreq, extras_requested): + sub_install_req = InstallRequirement( + str(subreq), + req_to_install, + isolated=self.isolated, + wheel_cache=self._wheel_cache, + ) + more_reqs.extend(self.add_requirement( + sub_install_req, req_to_install.name, + extras_requested=extras_requested)) + + # We add req_to_install before its dependencies, so that we + # can refer to it when adding dependencies. + if not self.has_requirement(req_to_install.name): + # 'unnamed' requirements will get added here + self.add_requirement(req_to_install, None) + + if not ignore_dependencies: + if (req_to_install.extras): + logger.debug( + "Installing extra requirements: %r", + ','.join(req_to_install.extras), + ) + missing_requested = sorted( + set(req_to_install.extras) - set(dist.extras) + ) + for missing in missing_requested: + logger.warning( + '%s does not provide the extra \'%s\'', + dist, missing + ) + + available_requested = sorted( + set(dist.extras) & set(req_to_install.extras) + ) + for subreq in dist.requires(available_requested): + add_req(subreq, extras_requested=available_requested) + + # cleanup tmp src + self.reqs_to_cleanup.append(req_to_install) + + if not req_to_install.editable and not req_to_install.satisfied_by: + # XXX: --no-install leads this to report 'Successfully + # downloaded' for only non-editable reqs, even though we took + # action on them. + self.successfully_downloaded.append(req_to_install) + + return more_reqs + + def cleanup_files(self): + """Clean up files, remove builds.""" + logger.debug('Cleaning up...') + with indent_log(): + for req in self.reqs_to_cleanup: + req.remove_temporary_source() + + def _to_install(self): + """Create the installation order. + + The installation order is topological - requirements are installed + before the requiring thing. We break cycles at an arbitrary point, + and make no other guarantees. + """ + # The current implementation, which we may change at any point + # installs the user specified things in the order given, except when + # dependencies must come earlier to achieve topological order. + order = [] + ordered_reqs = set() + + def schedule(req): + if req.satisfied_by or req in ordered_reqs: + return + if req.constraint: + return + ordered_reqs.add(req) + for dep in self._dependencies[req]: + schedule(dep) + order.append(req) + for install_req in self.requirements.values(): + schedule(install_req) + return order + + def install(self, install_options, global_options=(), *args, **kwargs): + """ + Install everything in this set (after having downloaded and unpacked + the packages) + """ + to_install = self._to_install() + + if to_install: + logger.info( + 'Installing collected packages: %s', + ', '.join([req.name for req in to_install]), + ) + + with indent_log(): + for requirement in to_install: + if requirement.conflicts_with: + logger.info( + 'Found existing installation: %s', + requirement.conflicts_with, + ) + with indent_log(): + requirement.uninstall(auto_confirm=True) + try: + requirement.install( + install_options, + global_options, + *args, + **kwargs + ) + except: + # if install did not succeed, rollback previous uninstall + if (requirement.conflicts_with and not + requirement.install_succeeded): + requirement.rollback_uninstall() + raise + else: + if (requirement.conflicts_with and + requirement.install_succeeded): + requirement.commit_uninstall() + requirement.remove_temporary_source() + + self.successfully_installed = to_install diff --git a/week-0/day-3/venv/lib/python3.6/site-packages/pip/req/req_uninstall.py b/week-0/day-3/venv/lib/python3.6/site-packages/pip/req/req_uninstall.py new file mode 100644 index 00000000..5248430a --- /dev/null +++ b/week-0/day-3/venv/lib/python3.6/site-packages/pip/req/req_uninstall.py @@ -0,0 +1,195 @@ +from __future__ import absolute_import + +import logging +import os +import tempfile + +from pip.compat import uses_pycache, WINDOWS, cache_from_source +from pip.exceptions import UninstallationError +from pip.utils import rmtree, ask, is_local, renames, normalize_path +from pip.utils.logging import indent_log + + +logger = logging.getLogger(__name__) + + +class UninstallPathSet(object): + """A set of file paths to be removed in the uninstallation of a + requirement.""" + def __init__(self, dist): + self.paths = set() + self._refuse = set() + self.pth = {} + self.dist = dist + self.save_dir = None + self._moved_paths = [] + + def _permitted(self, path): + """ + Return True if the given path is one we are permitted to + remove/modify, False otherwise. + + """ + return is_local(path) + + def add(self, path): + head, tail = os.path.split(path) + + # we normalize the head to resolve parent directory symlinks, but not + # the tail, since we only want to uninstall symlinks, not their targets + path = os.path.join(normalize_path(head), os.path.normcase(tail)) + + if not os.path.exists(path): + return + if self._permitted(path): + self.paths.add(path) + else: + self._refuse.add(path) + + # __pycache__ files can show up after 'installed-files.txt' is created, + # due to imports + if os.path.splitext(path)[1] == '.py' and uses_pycache: + self.add(cache_from_source(path)) + + def add_pth(self, pth_file, entry): + pth_file = normalize_path(pth_file) + if self._permitted(pth_file): + if pth_file not in self.pth: + self.pth[pth_file] = UninstallPthEntries(pth_file) + self.pth[pth_file].add(entry) + else: + self._refuse.add(pth_file) + + def compact(self, paths): + """Compact a path set to contain the minimal number of paths + necessary to contain all paths in the set. If /a/path/ and + /a/path/to/a/file.txt are both in the set, leave only the + shorter path.""" + short_paths = set() + for path in sorted(paths, key=len): + if not any([ + (path.startswith(shortpath) and + path[len(shortpath.rstrip(os.path.sep))] == os.path.sep) + for shortpath in short_paths]): + short_paths.add(path) + return short_paths + + def _stash(self, path): + return os.path.join( + self.save_dir, os.path.splitdrive(path)[1].lstrip(os.path.sep)) + + def remove(self, auto_confirm=False): + """Remove paths in ``self.paths`` with confirmation (unless + ``auto_confirm`` is True).""" + if not self.paths: + logger.info( + "Can't uninstall '%s'. No files were found to uninstall.", + self.dist.project_name, + ) + return + logger.info( + 'Uninstalling %s-%s:', + self.dist.project_name, self.dist.version + ) + + with indent_log(): + paths = sorted(self.compact(self.paths)) + + if auto_confirm: + response = 'y' + else: + for path in paths: + logger.info(path) + response = ask('Proceed (y/n)? ', ('y', 'n')) + if self._refuse: + logger.info('Not removing or modifying (outside of prefix):') + for path in self.compact(self._refuse): + logger.info(path) + if response == 'y': + self.save_dir = tempfile.mkdtemp(suffix='-uninstall', + prefix='pip-') + for path in paths: + new_path = self._stash(path) + logger.debug('Removing file or directory %s', path) + self._moved_paths.append(path) + renames(path, new_path) + for pth in self.pth.values(): + pth.remove() + logger.info( + 'Successfully uninstalled %s-%s', + self.dist.project_name, self.dist.version + ) + + def rollback(self): + """Rollback the changes previously made by remove().""" + if self.save_dir is None: + logger.error( + "Can't roll back %s; was not uninstalled", + self.dist.project_name, + ) + return False + logger.info('Rolling back uninstall of %s', self.dist.project_name) + for path in self._moved_paths: + tmp_path = self._stash(path) + logger.debug('Replacing %s', path) + renames(tmp_path, path) + for pth in self.pth.values(): + pth.rollback() + + def commit(self): + """Remove temporary save dir: rollback will no longer be possible.""" + if self.save_dir is not None: + rmtree(self.save_dir) + self.save_dir = None + self._moved_paths = [] + + +class UninstallPthEntries(object): + def __init__(self, pth_file): + if not os.path.isfile(pth_file): + raise UninstallationError( + "Cannot remove entries from nonexistent file %s" % pth_file + ) + self.file = pth_file + self.entries = set() + self._saved_lines = None + + def add(self, entry): + entry = os.path.normcase(entry) + # On Windows, os.path.normcase converts the entry to use + # backslashes. This is correct for entries that describe absolute + # paths outside of site-packages, but all the others use forward + # slashes. + if WINDOWS and not os.path.splitdrive(entry)[0]: + entry = entry.replace('\\', '/') + self.entries.add(entry) + + def remove(self): + logger.debug('Removing pth entries from %s:', self.file) + with open(self.file, 'rb') as fh: + # windows uses '\r\n' with py3k, but uses '\n' with py2.x + lines = fh.readlines() + self._saved_lines = lines + if any(b'\r\n' in line for line in lines): + endline = '\r\n' + else: + endline = '\n' + for entry in self.entries: + try: + logger.debug('Removing entry: %s', entry) + lines.remove((entry + endline).encode("utf-8")) + except ValueError: + pass + with open(self.file, 'wb') as fh: + fh.writelines(lines) + + def rollback(self): + if self._saved_lines is None: + logger.error( + 'Cannot roll back changes to %s, none were made', self.file + ) + return False + logger.debug('Rolling %s back to previous state', self.file) + with open(self.file, 'wb') as fh: + fh.writelines(self._saved_lines) + return True diff --git a/week-0/day-3/venv/lib/python3.6/site-packages/pip/status_codes.py b/week-0/day-3/venv/lib/python3.6/site-packages/pip/status_codes.py new file mode 100644 index 00000000..275360a3 --- /dev/null +++ b/week-0/day-3/venv/lib/python3.6/site-packages/pip/status_codes.py @@ -0,0 +1,8 @@ +from __future__ import absolute_import + +SUCCESS = 0 +ERROR = 1 +UNKNOWN_ERROR = 2 +VIRTUALENV_NOT_FOUND = 3 +PREVIOUS_BUILD_DIR_ERROR = 4 +NO_MATCHES_FOUND = 23 diff --git a/week-0/day-3/venv/lib/python3.6/site-packages/pip/utils/__init__.py b/week-0/day-3/venv/lib/python3.6/site-packages/pip/utils/__init__.py new file mode 100644 index 00000000..0d25d917 --- /dev/null +++ b/week-0/day-3/venv/lib/python3.6/site-packages/pip/utils/__init__.py @@ -0,0 +1,870 @@ +from __future__ import absolute_import + +from collections import deque +import contextlib +import errno +import io +import locale +# we have a submodule named 'logging' which would shadow this if we used the +# regular name: +import logging as std_logging +import re +import os +import posixpath +import shutil +import stat +import subprocess +import sys +import tarfile +import zipfile + +from pip.exceptions import InstallationError +from pip.compat import console_to_str, expanduser, stdlib_pkgs +from pip.locations import ( + site_packages, user_site, running_under_virtualenv, virtualenv_no_global, + write_delete_marker_file, +) +from pip._vendor import pkg_resources +from pip._vendor.six.moves import input +from pip._vendor.six import PY2 +from pip._vendor.retrying import retry + +if PY2: + from io import BytesIO as StringIO +else: + from io import StringIO + +__all__ = ['rmtree', 'display_path', 'backup_dir', + 'ask', 'splitext', + 'format_size', 'is_installable_dir', + 'is_svn_page', 'file_contents', + 'split_leading_dir', 'has_leading_dir', + 'normalize_path', + 'renames', 'get_terminal_size', 'get_prog', + 'unzip_file', 'untar_file', 'unpack_file', 'call_subprocess', + 'captured_stdout', 'ensure_dir', + 'ARCHIVE_EXTENSIONS', 'SUPPORTED_EXTENSIONS', + 'get_installed_version'] + + +logger = std_logging.getLogger(__name__) + +BZ2_EXTENSIONS = ('.tar.bz2', '.tbz') +XZ_EXTENSIONS = ('.tar.xz', '.txz', '.tlz', '.tar.lz', '.tar.lzma') +ZIP_EXTENSIONS = ('.zip', '.whl') +TAR_EXTENSIONS = ('.tar.gz', '.tgz', '.tar') +ARCHIVE_EXTENSIONS = ( + ZIP_EXTENSIONS + BZ2_EXTENSIONS + TAR_EXTENSIONS + XZ_EXTENSIONS) +SUPPORTED_EXTENSIONS = ZIP_EXTENSIONS + TAR_EXTENSIONS +try: + import bz2 # noqa + SUPPORTED_EXTENSIONS += BZ2_EXTENSIONS +except ImportError: + logger.debug('bz2 module is not available') + +try: + # Only for Python 3.3+ + import lzma # noqa + SUPPORTED_EXTENSIONS += XZ_EXTENSIONS +except ImportError: + logger.debug('lzma module is not available') + + +def import_or_raise(pkg_or_module_string, ExceptionType, *args, **kwargs): + try: + return __import__(pkg_or_module_string) + except ImportError: + raise ExceptionType(*args, **kwargs) + + +def ensure_dir(path): + """os.path.makedirs without EEXIST.""" + try: + os.makedirs(path) + except OSError as e: + if e.errno != errno.EEXIST: + raise + + +def get_prog(): + try: + if os.path.basename(sys.argv[0]) in ('__main__.py', '-c'): + return "%s -m pip" % sys.executable + except (AttributeError, TypeError, IndexError): + pass + return 'pip' + + +# Retry every half second for up to 3 seconds +@retry(stop_max_delay=3000, wait_fixed=500) +def rmtree(dir, ignore_errors=False): + shutil.rmtree(dir, ignore_errors=ignore_errors, + onerror=rmtree_errorhandler) + + +def rmtree_errorhandler(func, path, exc_info): + """On Windows, the files in .svn are read-only, so when rmtree() tries to + remove them, an exception is thrown. We catch that here, remove the + read-only attribute, and hopefully continue without problems.""" + # if file type currently read only + if os.stat(path).st_mode & stat.S_IREAD: + # convert to read/write + os.chmod(path, stat.S_IWRITE) + # use the original function to repeat the operation + func(path) + return + else: + raise + + +def display_path(path): + """Gives the display value for a given path, making it relative to cwd + if possible.""" + path = os.path.normcase(os.path.abspath(path)) + if sys.version_info[0] == 2: + path = path.decode(sys.getfilesystemencoding(), 'replace') + path = path.encode(sys.getdefaultencoding(), 'replace') + if path.startswith(os.getcwd() + os.path.sep): + path = '.' + path[len(os.getcwd()):] + return path + + +def backup_dir(dir, ext='.bak'): + """Figure out the name of a directory to back up the given dir to + (adding .bak, .bak2, etc)""" + n = 1 + extension = ext + while os.path.exists(dir + extension): + n += 1 + extension = ext + str(n) + return dir + extension + + +def ask_path_exists(message, options): + for action in os.environ.get('PIP_EXISTS_ACTION', '').split(): + if action in options: + return action + return ask(message, options) + + +def ask(message, options): + """Ask the message interactively, with the given possible responses""" + while 1: + if os.environ.get('PIP_NO_INPUT'): + raise Exception( + 'No input was expected ($PIP_NO_INPUT set); question: %s' % + message + ) + response = input(message) + response = response.strip().lower() + if response not in options: + print( + 'Your response (%r) was not one of the expected responses: ' + '%s' % (response, ', '.join(options)) + ) + else: + return response + + +def format_size(bytes): + if bytes > 1000 * 1000: + return '%.1fMB' % (bytes / 1000.0 / 1000) + elif bytes > 10 * 1000: + return '%ikB' % (bytes / 1000) + elif bytes > 1000: + return '%.1fkB' % (bytes / 1000.0) + else: + return '%ibytes' % bytes + + +def is_installable_dir(path): + """Return True if `path` is a directory containing a setup.py file.""" + if not os.path.isdir(path): + return False + setup_py = os.path.join(path, 'setup.py') + if os.path.isfile(setup_py): + return True + return False + + +def is_svn_page(html): + """ + Returns true if the page appears to be the index page of an svn repository + """ + return (re.search(r'[^<]*Revision \d+:', html) and + re.search(r'Powered by (?:<a[^>]*?>)?Subversion', html, re.I)) + + +def file_contents(filename): + with open(filename, 'rb') as fp: + return fp.read().decode('utf-8') + + +def read_chunks(file, size=io.DEFAULT_BUFFER_SIZE): + """Yield pieces of data from a file-like object until EOF.""" + while True: + chunk = file.read(size) + if not chunk: + break + yield chunk + + +def split_leading_dir(path): + path = path.lstrip('/').lstrip('\\') + if '/' in path and (('\\' in path and path.find('/') < path.find('\\')) or + '\\' not in path): + return path.split('/', 1) + elif '\\' in path: + return path.split('\\', 1) + else: + return path, '' + + +def has_leading_dir(paths): + """Returns true if all the paths have the same leading path name + (i.e., everything is in one subdirectory in an archive)""" + common_prefix = None + for path in paths: + prefix, rest = split_leading_dir(path) + if not prefix: + return False + elif common_prefix is None: + common_prefix = prefix + elif prefix != common_prefix: + return False + return True + + +def normalize_path(path, resolve_symlinks=True): + """ + Convert a path to its canonical, case-normalized, absolute version. + + """ + path = expanduser(path) + if resolve_symlinks: + path = os.path.realpath(path) + else: + path = os.path.abspath(path) + return os.path.normcase(path) + + +def splitext(path): + """Like os.path.splitext, but take off .tar too""" + base, ext = posixpath.splitext(path) + if base.lower().endswith('.tar'): + ext = base[-4:] + ext + base = base[:-4] + return base, ext + + +def renames(old, new): + """Like os.renames(), but handles renaming across devices.""" + # Implementation borrowed from os.renames(). + head, tail = os.path.split(new) + if head and tail and not os.path.exists(head): + os.makedirs(head) + + shutil.move(old, new) + + head, tail = os.path.split(old) + if head and tail: + try: + os.removedirs(head) + except OSError: + pass + + +def is_local(path): + """ + Return True if this is a path pip is allowed to modify. + + If we're in a virtualenv, sys.prefix points to the virtualenv's + prefix; only sys.prefix is considered local. + + If we're not in a virtualenv, in general we can modify anything. + However, if the OS vendor has configured distutils to install + somewhere other than sys.prefix (which could be a subdirectory of + sys.prefix, e.g. /usr/local), we consider sys.prefix itself nonlocal + and the domain of the OS vendor. (In other words, everything _other + than_ sys.prefix is considered local.) + + """ + + path = normalize_path(path) + prefix = normalize_path(sys.prefix) + + if running_under_virtualenv(): + return path.startswith(normalize_path(sys.prefix)) + else: + from pip.locations import distutils_scheme + if path.startswith(prefix): + for local_path in distutils_scheme("").values(): + if path.startswith(normalize_path(local_path)): + return True + return False + else: + return True + + +def dist_is_local(dist): + """ + Return True if given Distribution object is installed somewhere pip + is allowed to modify. + + """ + return is_local(dist_location(dist)) + + +def dist_in_usersite(dist): + """ + Return True if given Distribution is installed in user site. + """ + norm_path = normalize_path(dist_location(dist)) + return norm_path.startswith(normalize_path(user_site)) + + +def dist_in_site_packages(dist): + """ + Return True if given Distribution is installed in + distutils.sysconfig.get_python_lib(). + """ + return normalize_path( + dist_location(dist) + ).startswith(normalize_path(site_packages)) + + +def dist_is_editable(dist): + """Is distribution an editable install?""" + for path_item in sys.path: + egg_link = os.path.join(path_item, dist.project_name + '.egg-link') + if os.path.isfile(egg_link): + return True + return False + + +def get_installed_distributions(local_only=True, + skip=stdlib_pkgs, + include_editables=True, + editables_only=False, + user_only=False): + """ + Return a list of installed Distribution objects. + + If ``local_only`` is True (default), only return installations + local to the current virtualenv, if in a virtualenv. + + ``skip`` argument is an iterable of lower-case project names to + ignore; defaults to stdlib_pkgs + + If ``editables`` is False, don't report editables. + + If ``editables_only`` is True , only report editables. + + If ``user_only`` is True , only report installations in the user + site directory. + + """ + if local_only: + local_test = dist_is_local + else: + def local_test(d): + return True + + if include_editables: + def editable_test(d): + return True + else: + def editable_test(d): + return not dist_is_editable(d) + + if editables_only: + def editables_only_test(d): + return dist_is_editable(d) + else: + def editables_only_test(d): + return True + + if user_only: + user_test = dist_in_usersite + else: + def user_test(d): + return True + + return [d for d in pkg_resources.working_set + if local_test(d) and + d.key not in skip and + editable_test(d) and + editables_only_test(d) and + user_test(d) + ] + + +def egg_link_path(dist): + """ + Return the path for the .egg-link file if it exists, otherwise, None. + + There's 3 scenarios: + 1) not in a virtualenv + try to find in site.USER_SITE, then site_packages + 2) in a no-global virtualenv + try to find in site_packages + 3) in a yes-global virtualenv + try to find in site_packages, then site.USER_SITE + (don't look in global location) + + For #1 and #3, there could be odd cases, where there's an egg-link in 2 + locations. + + This method will just return the first one found. + """ + sites = [] + if running_under_virtualenv(): + if virtualenv_no_global(): + sites.append(site_packages) + else: + sites.append(site_packages) + if user_site: + sites.append(user_site) + else: + if user_site: + sites.append(user_site) + sites.append(site_packages) + + for site in sites: + egglink = os.path.join(site, dist.project_name) + '.egg-link' + if os.path.isfile(egglink): + return egglink + + +def dist_location(dist): + """ + Get the site-packages location of this distribution. Generally + this is dist.location, except in the case of develop-installed + packages, where dist.location is the source code location, and we + want to know where the egg-link file is. + + """ + egg_link = egg_link_path(dist) + if egg_link: + return egg_link + return dist.location + + +def get_terminal_size(): + """Returns a tuple (x, y) representing the width(x) and the height(x) + in characters of the terminal window.""" + def ioctl_GWINSZ(fd): + try: + import fcntl + import termios + import struct + cr = struct.unpack( + 'hh', + fcntl.ioctl(fd, termios.TIOCGWINSZ, '1234') + ) + except: + return None + if cr == (0, 0): + return None + return cr + cr = ioctl_GWINSZ(0) or ioctl_GWINSZ(1) or ioctl_GWINSZ(2) + if not cr: + try: + fd = os.open(os.ctermid(), os.O_RDONLY) + cr = ioctl_GWINSZ(fd) + os.close(fd) + except: + pass + if not cr: + cr = (os.environ.get('LINES', 25), os.environ.get('COLUMNS', 80)) + return int(cr[1]), int(cr[0]) + + +def current_umask(): + """Get the current umask which involves having to set it temporarily.""" + mask = os.umask(0) + os.umask(mask) + return mask + + +def unzip_file(filename, location, flatten=True): + """ + Unzip the file (with path `filename`) to the destination `location`. All + files are written based on system defaults and umask (i.e. permissions are + not preserved), except that regular file members with any execute + permissions (user, group, or world) have "chmod +x" applied after being + written. Note that for windows, any execute changes using os.chmod are + no-ops per the python docs. + """ + ensure_dir(location) + zipfp = open(filename, 'rb') + try: + zip = zipfile.ZipFile(zipfp, allowZip64=True) + leading = has_leading_dir(zip.namelist()) and flatten + for info in zip.infolist(): + name = info.filename + data = zip.read(name) + fn = name + if leading: + fn = split_leading_dir(name)[1] + fn = os.path.join(location, fn) + dir = os.path.dirname(fn) + if fn.endswith('/') or fn.endswith('\\'): + # A directory + ensure_dir(fn) + else: + ensure_dir(dir) + fp = open(fn, 'wb') + try: + fp.write(data) + finally: + fp.close() + mode = info.external_attr >> 16 + # if mode and regular file and any execute permissions for + # user/group/world? + if mode and stat.S_ISREG(mode) and mode & 0o111: + # make dest file have execute for user/group/world + # (chmod +x) no-op on windows per python docs + os.chmod(fn, (0o777 - current_umask() | 0o111)) + finally: + zipfp.close() + + +def untar_file(filename, location): + """ + Untar the file (with path `filename`) to the destination `location`. + All files are written based on system defaults and umask (i.e. permissions + are not preserved), except that regular file members with any execute + permissions (user, group, or world) have "chmod +x" applied after being + written. Note that for windows, any execute changes using os.chmod are + no-ops per the python docs. + """ + ensure_dir(location) + if filename.lower().endswith('.gz') or filename.lower().endswith('.tgz'): + mode = 'r:gz' + elif filename.lower().endswith(BZ2_EXTENSIONS): + mode = 'r:bz2' + elif filename.lower().endswith(XZ_EXTENSIONS): + mode = 'r:xz' + elif filename.lower().endswith('.tar'): + mode = 'r' + else: + logger.warning( + 'Cannot determine compression type for file %s', filename, + ) + mode = 'r:*' + tar = tarfile.open(filename, mode) + try: + # note: python<=2.5 doesn't seem to know about pax headers, filter them + leading = has_leading_dir([ + member.name for member in tar.getmembers() + if member.name != 'pax_global_header' + ]) + for member in tar.getmembers(): + fn = member.name + if fn == 'pax_global_header': + continue + if leading: + fn = split_leading_dir(fn)[1] + path = os.path.join(location, fn) + if member.isdir(): + ensure_dir(path) + elif member.issym(): + try: + tar._extract_member(member, path) + except Exception as exc: + # Some corrupt tar files seem to produce this + # (specifically bad symlinks) + logger.warning( + 'In the tar file %s the member %s is invalid: %s', + filename, member.name, exc, + ) + continue + else: + try: + fp = tar.extractfile(member) + except (KeyError, AttributeError) as exc: + # Some corrupt tar files seem to produce this + # (specifically bad symlinks) + logger.warning( + 'In the tar file %s the member %s is invalid: %s', + filename, member.name, exc, + ) + continue + ensure_dir(os.path.dirname(path)) + with open(path, 'wb') as destfp: + shutil.copyfileobj(fp, destfp) + fp.close() + # Update the timestamp (useful for cython compiled files) + tar.utime(member, path) + # member have any execute permissions for user/group/world? + if member.mode & 0o111: + # make dest file have execute for user/group/world + # no-op on windows per python docs + os.chmod(path, (0o777 - current_umask() | 0o111)) + finally: + tar.close() + + +def unpack_file(filename, location, content_type, link): + filename = os.path.realpath(filename) + if (content_type == 'application/zip' or + filename.lower().endswith(ZIP_EXTENSIONS) or + zipfile.is_zipfile(filename)): + unzip_file( + filename, + location, + flatten=not filename.endswith('.whl') + ) + elif (content_type == 'application/x-gzip' or + tarfile.is_tarfile(filename) or + filename.lower().endswith( + TAR_EXTENSIONS + BZ2_EXTENSIONS + XZ_EXTENSIONS)): + untar_file(filename, location) + elif (content_type and content_type.startswith('text/html') and + is_svn_page(file_contents(filename))): + # We don't really care about this + from pip.vcs.subversion import Subversion + Subversion('svn+' + link.url).unpack(location) + else: + # FIXME: handle? + # FIXME: magic signatures? + logger.critical( + 'Cannot unpack file %s (downloaded from %s, content-type: %s); ' + 'cannot detect archive format', + filename, location, content_type, + ) + raise InstallationError( + 'Cannot determine archive format of %s' % location + ) + + +def call_subprocess(cmd, show_stdout=True, cwd=None, + on_returncode='raise', + command_desc=None, + extra_environ=None, spinner=None): + # This function's handling of subprocess output is confusing and I + # previously broke it terribly, so as penance I will write a long comment + # explaining things. + # + # The obvious thing that affects output is the show_stdout= + # kwarg. show_stdout=True means, let the subprocess write directly to our + # stdout. Even though it is nominally the default, it is almost never used + # inside pip (and should not be used in new code without a very good + # reason); as of 2016-02-22 it is only used in a few places inside the VCS + # wrapper code. Ideally we should get rid of it entirely, because it + # creates a lot of complexity here for a rarely used feature. + # + # Most places in pip set show_stdout=False. What this means is: + # - We connect the child stdout to a pipe, which we read. + # - By default, we hide the output but show a spinner -- unless the + # subprocess exits with an error, in which case we show the output. + # - If the --verbose option was passed (= loglevel is DEBUG), then we show + # the output unconditionally. (But in this case we don't want to show + # the output a second time if it turns out that there was an error.) + # + # stderr is always merged with stdout (even if show_stdout=True). + if show_stdout: + stdout = None + else: + stdout = subprocess.PIPE + if command_desc is None: + cmd_parts = [] + for part in cmd: + if ' ' in part or '\n' in part or '"' in part or "'" in part: + part = '"%s"' % part.replace('"', '\\"') + cmd_parts.append(part) + command_desc = ' '.join(cmd_parts) + logger.debug("Running command %s", command_desc) + env = os.environ.copy() + if extra_environ: + env.update(extra_environ) + try: + proc = subprocess.Popen( + cmd, stderr=subprocess.STDOUT, stdin=None, stdout=stdout, + cwd=cwd, env=env) + except Exception as exc: + logger.critical( + "Error %s while executing command %s", exc, command_desc, + ) + raise + if stdout is not None: + all_output = [] + while True: + line = console_to_str(proc.stdout.readline()) + if not line: + break + line = line.rstrip() + all_output.append(line + '\n') + if logger.getEffectiveLevel() <= std_logging.DEBUG: + # Show the line immediately + logger.debug(line) + else: + # Update the spinner + if spinner is not None: + spinner.spin() + proc.wait() + if spinner is not None: + if proc.returncode: + spinner.finish("error") + else: + spinner.finish("done") + if proc.returncode: + if on_returncode == 'raise': + if (logger.getEffectiveLevel() > std_logging.DEBUG and + not show_stdout): + logger.info( + 'Complete output from command %s:', command_desc, + ) + logger.info( + ''.join(all_output) + + '\n----------------------------------------' + ) + raise InstallationError( + 'Command "%s" failed with error code %s in %s' + % (command_desc, proc.returncode, cwd)) + elif on_returncode == 'warn': + logger.warning( + 'Command "%s" had error code %s in %s', + command_desc, proc.returncode, cwd, + ) + elif on_returncode == 'ignore': + pass + else: + raise ValueError('Invalid value: on_returncode=%s' % + repr(on_returncode)) + if not show_stdout: + return ''.join(all_output) + + +def read_text_file(filename): + """Return the contents of *filename*. + + Try to decode the file contents with utf-8, the preferred system encoding + (e.g., cp1252 on some Windows machines), and latin1, in that order. + Decoding a byte string with latin1 will never raise an error. In the worst + case, the returned string will contain some garbage characters. + + """ + with open(filename, 'rb') as fp: + data = fp.read() + + encodings = ['utf-8', locale.getpreferredencoding(False), 'latin1'] + for enc in encodings: + try: + data = data.decode(enc) + except UnicodeDecodeError: + continue + break + + assert type(data) != bytes # Latin1 should have worked. + return data + + +def _make_build_dir(build_dir): + os.makedirs(build_dir) + write_delete_marker_file(build_dir) + + +class FakeFile(object): + """Wrap a list of lines in an object with readline() to make + ConfigParser happy.""" + def __init__(self, lines): + self._gen = (l for l in lines) + + def readline(self): + try: + try: + return next(self._gen) + except NameError: + return self._gen.next() + except StopIteration: + return '' + + def __iter__(self): + return self._gen + + +class StreamWrapper(StringIO): + + @classmethod + def from_stream(cls, orig_stream): + cls.orig_stream = orig_stream + return cls() + + # compileall.compile_dir() needs stdout.encoding to print to stdout + @property + def encoding(self): + return self.orig_stream.encoding + + +@contextlib.contextmanager +def captured_output(stream_name): + """Return a context manager used by captured_stdout/stdin/stderr + that temporarily replaces the sys stream *stream_name* with a StringIO. + + Taken from Lib/support/__init__.py in the CPython repo. + """ + orig_stdout = getattr(sys, stream_name) + setattr(sys, stream_name, StreamWrapper.from_stream(orig_stdout)) + try: + yield getattr(sys, stream_name) + finally: + setattr(sys, stream_name, orig_stdout) + + +def captured_stdout(): + """Capture the output of sys.stdout: + + with captured_stdout() as stdout: + print('hello') + self.assertEqual(stdout.getvalue(), 'hello\n') + + Taken from Lib/support/__init__.py in the CPython repo. + """ + return captured_output('stdout') + + +class cached_property(object): + """A property that is only computed once per instance and then replaces + itself with an ordinary attribute. Deleting the attribute resets the + property. + + Source: https://github.com/bottlepy/bottle/blob/0.11.5/bottle.py#L175 + """ + + def __init__(self, func): + self.__doc__ = getattr(func, '__doc__') + self.func = func + + def __get__(self, obj, cls): + if obj is None: + # We're being accessed from the class itself, not from an object + return self + value = obj.__dict__[self.func.__name__] = self.func(obj) + return value + + +def get_installed_version(dist_name, lookup_dirs=None): + """Get the installed version of dist_name avoiding pkg_resources cache""" + # Create a requirement that we'll look for inside of setuptools. + req = pkg_resources.Requirement.parse(dist_name) + + # We want to avoid having this cached, so we need to construct a new + # working set each time. + if lookup_dirs is None: + working_set = pkg_resources.WorkingSet() + else: + working_set = pkg_resources.WorkingSet(lookup_dirs) + + # Get the installed distribution from our working set + dist = working_set.find(req) + + # Check to see if we got an installed distribution or not, if we did + # we want to return it's version. + return dist.version if dist else None + + +def consume(iterator): + """Consume an iterable at C speed.""" + deque(iterator, maxlen=0) diff --git a/week-0/day-3/venv/lib/python3.6/site-packages/pip/utils/__pycache__/__init__.cpython-36.pyc b/week-0/day-3/venv/lib/python3.6/site-packages/pip/utils/__pycache__/__init__.cpython-36.pyc new file mode 100644 index 0000000000000000000000000000000000000000..5bd7d55bbac49e4af7bc25cff27b621a1a252fba GIT binary patch literal 22743 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 literal 0 HcmV?d00001 diff --git a/week-0/day-3/venv/lib/python3.6/site-packages/pip/utils/__pycache__/appdirs.cpython-36.pyc b/week-0/day-3/venv/lib/python3.6/site-packages/pip/utils/__pycache__/appdirs.cpython-36.pyc new file mode 100644 index 0000000000000000000000000000000000000000..df6b864bbec5296a1b506ed6ce8f866b38bd9c7f GIT binary patch literal 7701 zcmeHM&2JpXmGAEP<cMFQCB=yyZ-p@ujX(_**|D>PAeiBY#Y7?*4Q1Kf@s69*HNz%* zx<^&rCWjaX0Tf^t2y)0}FS~~zKn}U=W&eu&3w_PW|3WUw@4fyQ4nsLwVE3@V&S1KG zs;gdAy?XEWUj6F5nVH(^&WE2LFB-<5j0>M@c>V}K{hzov#=ha0j^&wsYu_^Ix!@J{ z3w$r`7jZ9orG9z8+^_6c_<hN%_NVrz`nCNU{+FG~FOB_c&Mjxksr}O2pLV|COgl4p znsH{GIlP;7=AG-f&p8Xu8@SKQvijX{o_n~ye_hV+FFZH=H;aaR<G7}NYZ~;GbNdUQ z8NT(Y;oNX;qSXzj&@}3Ao;kI>LsyGV;7D;|YZ2PV(idG7^u=Kq4)n_Ma?cG9qk~2# z=r6B!LibDA4DC=Z+k=7QDlKf^5&gh%yRLL<VIXwmh9ZcR7({9iXsH{uub>&DZpL%= zfeySVlx?>^2voRTx8ln4t?l)l=gqh#PX~|{X{k_L*!}E&JQd2*upJHuvSX46d@THm z_^sime}PMAs0X2WWE~YkX!j+)=Vn+^cf#_>3@a}!JXJ?YDb<=9nIproUKY+x|D&*W zbj>LoTk4;~X{X37^Exjr)OZJyXPgq=mLVA>+!M>7e<Kq*tk^#+7)DLt^HheBg7zZM z69YRu6i`QaC<V>wuEs2&q>kv=9h5<Lq8li@hx(yQ&+XWu8~BYHiz0E0DE95XTokB6 za_El;x>r=+8xGLk<DSMH$W9n2S3<s$E4kRd-PvibPzOT%eEG3^plmf<UZYXz<p-;S z!8W>im{))1yQgVwRB!O;$JNB`PuD*dj_lfz7uNGe&t2aMPBgb$TWLLm0(9#E>4E0( zu!UaM?a*#L4lwFg-f4?Rk!WDY7pWAUd*FLR*jBG6HK|FsJ{Lb}u5Sw`=;%a8b|^d& zDYOhj*Y9c33wTgz^)J?%TkDV8k9XEqAGcR`ch^_<R==RNU{wtpg1rIib{*-5tkPr+ zS%@F_cU55bA(+-cIG6%2<ZW7=R0%?{6-Y-M48<2T<u=u8qmwV{4S|_!76!8>`Iyxp z3bQpMfja2RlS8SbxD)w~RCjoyJvg4vozbg?XrdO&k*9Wl;7L7R;6|g-dJ>$uo@ci< zF|}@R+S*k?*F~+?gY=0PIn{S!3qnxC)lOfwn$bWij5K-Q`a$Dfx+c3@+gm%^D~X!A zkq<n;T0j@lceGgK<y*|m{%U1^X?u}u@X+Hou2_z^#8Tq2W2+O_Kbya7qwy?EuD!Op z_GqL1Xy?hsSv51u`mBO08nG4VxJV8dSN%Zs`Dw1*lVKYI+ugu}R#k~=)?DrSI<)<c zRAnky;40Lj9R}@#VJIQ$C~*C_pocoH4m>-A+x8WKP+W#g>3>Nu1|5)Tt7(+~!BDqw z`}4i!us>KHxP!X~k?T2k^$UG^5Ov<CBK}38>*)+h8-rmy%l5)PMg}trDVjtXH;dMM zan`IB7R;JeEzILPYpFN!X0t<>NFN#!&5E({5D&n{rID$o9dj`2Sm#!XlZ0`_ur#s= zEk_2Btl<ABEFV=E3xAT<suCimZ@-ndoB|qF6EsZTjVO*(>?S(qHGMq{%suCS1OhYr zrTbP_YzMwv5=W5^*>kXNq3n;HoRA{((Zmj^-D2w4i{kb{5O~t|mvWEZv^_2B@KIkJ zNP-rzry@yaj^*M$Qlw%HkTm*SK#FX-W0V0<_0b36Ivz<2wDMYzH)XgtA<dWJNuZ9Y z_h`TkGWmnlwU;0ZQzJPEGMxYcFyIL>dgyn)?@%{h&~ts@h@7nOfWkhaekePK=(Evx zJ1WpYH{=9B`gbF}?4>cI)A{g&58nULKi+=cZ2aI}y<zLY={RtZ4rpQok-8IUO;Ca8 z<!T*KR>0$$2wW3t`r5cfva`<^AAnd{7!`mpN-@TfDp$kBfR@RiJ5YpU$Fe>|yc{>A zci$D5i0kJvsO+lGy97-XR2Z3-gxe(}a($#mS#_9-_;gp?_Jc4pkvhdmgvs@w6ZH{y zlBBAchOmoqlOQ^mlu5jNN1cnBSf@anhuFMzHjdPccnl=zwZ_45`*jDCPvkX6^`W>@ zJI}~LE-C}!cy5=Hh>01JtSe^tN?A{n@P0vGEN&CaPj<5;P9%)l^MVuhdrE#NvEwXQ zCnhH*jUZXCJ#usQ_$A5<vRq;DRYtd%G>d1F2$`lTssdD3Q@EVH^YvyQ&rDe2+3aLT z^%_S?MVl86S?W4H&CrE{j#{A08+4(lqHf?)FRGik#g$Z_aj6p^b|%d!NO90p-=I1( zghF}V^AJTz7<;Q|PMdF=HM5LwwNN%^&2m9~8}Ik>Fh(IfPw^k&55m|&h)^^#9rM=+ zWB&aR>AqtjasM8bBXPHosuzz+P9ZE)*g{CN@V|0Y9a$WvtdWH<RkCT;uNR>(x31gc zgzNuAjG~A%5u!L~QH&y>!E%tj=B`1Gp2n;UgeZ%f0AS9BGpoHSPF*SO|Krrf{T1ms z`)Jy|VT(QC8o3U?CMqSSI1Wg88-nmV+1@Pc2KTFb;%5JSAY0qn-rV|_<JsSZvdbe) zQLJvNx8TPNT=5)d?_;57Q<T25x7DW-R3bdMfItjVgg^-vQHITMRWC3gC9=8n5(>?+ zsuS6iP9LGACU`S$6oEW7q|);y(&&FcNzO13^biEmFJl-0GnW_!`d=EE|BCFnNAU9r z=g$O5KjylCqWs+oN{~%ECCao%1?B&X(KVUrsg4RqQ+Qi@X|5+QR_qz)04wkk)t9De zFl<fPze0+i!j>&O7l|$Ms6l|eN9d-z{=1yDIAC%z+|rzV{crFKc^7}5V95D}i?RQ2 za<k>!q%XR`vJ5+vcX2#T&2W9|Y4e}l&&STN%(IkWF9h!_UzMd@7Lxav<UxrSy*l?< zMJoM_6OfA&c~v%s^2w|#bIwn&c6REqw>NFq`wlkEE3`ZBDZ5W?nC!8|q3eKw5O<Qz z%boG=B_DStlI}>XS#o27fe|03Jw0M!NIXC^oG3Sx_JIc?i3t`|x>DrisK)sabr;`A zvXZr(Cr@^^Gae<$OWyvv6`yc^TFSF3E%NfI)64yjcC)mLrQ}1ugG<jC8K2(*_huZy z>%s!DdE{Hav0fCLNz#GT<WeR>UW{$I)wma%r@$Y|T*mpypKA}ui$G}(9{!&Cp-#)@ z*}EFbX^#OzHy-eoKtIGo*5Is2W3EqM&Y;H06X#On42qyDE@|vd!ni`zf|i50jBpFm zBu%O~i2}QTm())@2aQ}D2M;})24`6FmxuZ*ng<aA#(dG7H^CE_3x#R3Xwkh`sDTN^ zyIjr0cH~*s3jTmVwmjn;gf&5xQ~r;_$oM9Kk$D87^T={QrUJgqBS09a1FL177tc#0 zEJ3|`_U~*%8F^-lE{LrIyK^jf8|l8lZW)=x0l2${*!q5-a}pha;=%?g0tM5{vlAtI zP=Fea!K)Y9%JxGE9y3aK&`zL;utU<VPq5kLO(y&^G0HnU6yjpA$0Tc2#2s(P6*w+A z*xBq_(C@?ev;Q;6W+wfMpz=-BSAs5-Zl8VB#P0V5Tf)|pY%knObEno?gpv5+C)k-_ zciY-H9e9C~s?|J{7|<p&O}bu;D?}?{YH?);tNv3tjITfX>BeX6wP#PCZfx(hpEWn0 z#?wEGq#Axg{Mg26y&Ts%+I74((@IMiNqk+C*p$HH^0;seSyMTI8JCzYPb{6IAsfrL zFOgquBKX^xs{aeJH5sW<t`;oQqU78vnnhgaP4z>RPgo6E&KiCk9LZ|PVp3~iCq<w` zNQAp0OFt?)l(*wx12$8_0Y~M$aQe>3S|^t#5(?S6Q#~%K6=&+auxq?nd2S#?o{_V& zoD$0cIfbBD9hFdqx1$mV$trBGw*A$&Fqp5tOP9BC`I`lF$<EmbHoy7{D(uy#;&O*h z6?A;Fqa+S9+L7<l5lH(W>UO1y%UCVP^Wq9C{Js0}eDl%AGECNU7f$*-E(FSntH&U; zrH2aF@w#~k!hzlrxB5ITaXhM*)jf0?UrQDf*aG)1pr3f=(AMokw|Cg?fN+S-PFzIs z{mX0j*5$Q3!FfzO8UG(4SqoeYD_ggkd8=52@5A%4j`VZ`7@%k$m9HY99ibJk;s<y* zz2_9LBDc@YVQpj_VZ~nJXrpL^W@vRS93w3y$4H+UFUp_dhcz;w`=b4C@U0D>PmfZU z;DZmiX@G4m$kT?{A>tm17?V!B!|)KUcRyu+o&-2g;$sh{@6kq50;7Qd@G3zw6#@1w zN(3OJQ4v6qL_{qTik#t;-5d@oz|#dew@0~lItB(N`^&%uNe#LT(XX#X-#sOHT!r`V z$USH#EKP#(OL|C84(QE+t--ug3f+g7V-p`Df+u9n1&T|jj2bg(mk!Vd!-37rZ$g4C zzxVzJ?>$VF0p?PYDrry&CayNuwzha^Pky}C1gN67rF4EwKj3r+Bpx!rbm*-7lsPDI z>$pfw>z3NWGOM59QZK}1?nlN8X|rSnH<SugeC=@%97hBGgJzUg$JK0Hmuyqb<1HQT zX{u(_YQPRe8~pf9-Q293d-a<@zc!9&+U>a3Zg(S`k;!&jkr5_Qn<8ag11C-tBNj9X ztQ4H~=cu%elMg3Q4eg#XYtKwQbKlGyaQe={jj@VNT~S11CL_MK#b=E?As*I+NsJM) u`T%E`ktZKgxB6XNz*JaOvkC~DFI4Z<mTKRr-mc!NzFEX1QBM1Z!e0Tn&{rS; literal 0 HcmV?d00001 diff --git a/week-0/day-3/venv/lib/python3.6/site-packages/pip/utils/__pycache__/build.cpython-36.pyc b/week-0/day-3/venv/lib/python3.6/site-packages/pip/utils/__pycache__/build.cpython-36.pyc new file mode 100644 index 0000000000000000000000000000000000000000..4c1393e028eef0bc53d0d7263cb830366d975933 GIT binary patch literal 1315 zcmaJ>OK%e~5VpOKY|`{02nBJWAR)1brUwvQqN+S3E+`z}v=Xv5Ye#Iln`~__O55a= zUil&XC0{x57dSEFB+$~Tjy&V_&ieblnQ@+PZnj>3eD!57Amk^xG<;Ye!PGr4f(TlW zk|vbmniVYZoc9wSyjKKen1qzPC&CxO1rdR4EW9KV>=TK@UvL76sohQodQ#Lz^1Q4j z%Jg9`RHac;W*D*_9xRSv>X%?7NvI$R6K%nScR>NzK>%<l8W$u9L?oKvL(vi&;2VMh z=%(FzQ|E<vmn)f>i8}3Pcq|U|sO~LH{Q=Aj0FEQonX#o8bk0_LJwrxx#Educ5&k<} z&^cYj^_Fon!h;zD8wvuze*g1XtIDhW0mAR2#7fCwK8+ieO|<o^)O@v(l4-GA8Ch1t zypXn09t(W1{x~hA4TUVEk+EleEsLSr0H&%9<_A$*;C^=xOj#ZLgVHB@I;gW3xaDST z@<Jat9^LBHMx5v4+;EO3=^Ze{+o3*-f{qt~59!(ct2yhgzsM*?!$6PubGf?%3qeO@ z=5hqqTVTCe|E$?NpYNSNR`bKyx8ZQ2%GB5<=UI_z%{fv*jhs7GF;$yzlvA}d+wh1% zN>+;VNARQ>7;+QCWy}?Z$kH(kVFA3bE)=@$HZ))-$3_C&6ZmKi_uyJWRzVqd5DxTz z@vuCIw}36z4Tx$RSs~MLUB$lBX+1g3Z162DYH67n+@M=du})9nv^A0Im08AI(TzEB zx;rZ#YR6FE!xrw|F0<gdCQ?|%Tk@fH;r%n1+6kr59J~MJVy%kx`*Ec1Lac3ZUQR?^ zKxJ*4^OHI)R&~a9Q%FnQL-P;~LR=D$O|7u<3L%>?bqh?yTAj$lpWBa{h%&5At+0Pk zvTaOs7cY~-dMo_WHsKO<-34$;Z8#Z>;E%u^aTBJEdQ0YqSWF#(X|sq%tnK{)Qt%*- literal 0 HcmV?d00001 diff --git a/week-0/day-3/venv/lib/python3.6/site-packages/pip/utils/__pycache__/deprecation.cpython-36.pyc b/week-0/day-3/venv/lib/python3.6/site-packages/pip/utils/__pycache__/deprecation.cpython-36.pyc new file mode 100644 index 0000000000000000000000000000000000000000..6c0e694a24bdad4a2cd68d0c9acdcc1a51393ebd GIT binary patch literal 1728 zcmbVM-HzKt6rS-ow&Nt55VRF45;9Ve$VGQ4R3IUQy6RS_5=x^|Q7IC#oXl+2!LhS5 zW7=K0SJ_K=5Z-`inOm-S1+MtUZm1ExSg<u`&NpM9|8qVY48oHqU;OY}K*;Z;^>n~L zz*0Yha55*Hawnr3XYNqTvy9DIy}NVw8^T@QxhA|LIy*M^fIaR5`@#nffCJtI?g|gM z3mozua8Gz5*tzo%Cw)G^$)NtC$63<nV}8Jg*K|JMBmT}cnICZW9htm)H4RUqO~K1d zMEX3@QM%b?Vk2^`B3%?&ny;`&B2O0hLL}-kdXdN+$0|w|MX4h$wo)t;off$|3jctI zWJ1j_S*Ri_wTL0Gkb1hb7yE~Td4Q$*AcD*(g5q!rgB)`>OSh+QWIk`SO()C*ahxX` z5yvKs<Hlz2{W!iTldQS<l}H~VYx3v)W4+lPZ`1AFMVV&&uDVb!7v=K4J*ro!(@Y(= z95~uuN{0VKYnuZS&>G*^cz-5xj^Myt=~_c<>ZNDN-*z<|YJ|ux$N|<~m&G^Mb@)_l zik}33oFiiQK6w+Un`pKkj$4{7{-2uf{Wr}$Xu8$XZ1IgX-=1CS^CJKB^S4&WO&qrs zce|zD;-yWHeQZ)}o*rVUmmrnP$&X!mN26`AYfUOr(aNb<<yM`YM@c@@w4&PCIdY-d z+U0adUwPcA;N&a6zU$!b`^sB;mA|8uTxjrq!{_6FOXLK7z@}Ftl<85cIMvng^wI3; zqlYKY9zU6W8GWQCfjNx#?HH@`;>BxV!c?hpvCI;s>H;=?R;*SiOw(Nn{VjMQ>*_Q9 z{+A9;3JH<^Mktl6gbC2qVpYgX6P%?PM!-fG4--M;g>mhPaV^4GEzk6@$FF~GmAefp zy0m599UI>FKnM-+I&{oJ7Ip$Zq<yFFI8?rmyMGjg?V~y?AA`|kO*vxD9nOAXlxT+R z1U5@+H(|P?NsPQ9itg0-T%09krk`ObdC7K*{+xIw*hkIuRXy?Gjz$0&q{{(_>9y>w z&1rd5w{q>)tu$9U$+CSG;wBWQkf7`b#2L8(^{D(1{KT0~Cqv`MF)x<Q6gw+*DKXKc z9X4`k$p;|Df8LC}CV5`5Sc|2u6DDn^O4~HjmTqlqW1m&=RwIM2nqm31^-kH|a}j4m Po{e1lj@^;(vM~A!PgH$Q literal 0 HcmV?d00001 diff --git a/week-0/day-3/venv/lib/python3.6/site-packages/pip/utils/__pycache__/encoding.cpython-36.pyc b/week-0/day-3/venv/lib/python3.6/site-packages/pip/utils/__pycache__/encoding.cpython-36.pyc new file mode 100644 index 0000000000000000000000000000000000000000..ded40c8ee786414346b5aa5073cb56c6adef8525 GIT binary patch literal 1018 zcmZuwL2uJA6t<HzP19~5Kxo@35|<X#jkRb@2+-KpBBaqF22AQ!RcY+D>D(r>U2UDZ zQ{lo-;2-c?_y@jn+L;?Cp3}AJ0Y`q{_nx1hzh^7ur6u>x;q%5X6QSQ|VK~5dV2U0X zf(T})K1E!|iEq>mih3q7+8QllCYT~tf;LGdm?n0D4oN4NAx_)qr0Xs<dRda0;Cha@ zB>NTBmk2&Wh1?CChib|i%J#NOf!*A?auO)E=!`L%ER{=1pj?_Q0b^7=gbG1K!a?Wc z#jD1tc$_~eo?fgso)iMCtHZEv=N_Q=0p{|lMEj_bKQ*rLwJ}CLJjN5u?J<&uW(0pT zR-xUoF#(z9_A$Er0$COTpI~C@RoK6CZH`T1k(Bm{eP-~gO!e%s3AN^|m!2SE>1rfB znVvSQTRlcl)s#*TE@}ej!j)vMzVCHuaOU}5Yb2@ggyhhh*N!-Zb`RfsGV+3ma~eoC z@(7hcJlUll9Zavmbv+nWpRtw?bs(KZfzRlAhsv1KHif-pmYjz?K?@!W&!`v0bdWE2 z(ZKsKlHF)fuKm$h=-wD$xu!STB*8~2<%=K;s|8nCAnQoELi${ai%@oz$>>1Ygn}Y? zJQ1@{s%)jUcewwq_O|)4qHIBZ9(0x6;n6S_%ARUe5B?{zU@43E(pP3H>MLiaU0Ey~ z(4UB}fT+Kl8?qm7#9>@)4MRqX;#^#|hQTu(O6E|8Ol-_Hug4>m^@lQQPF3EA8saV( zWG!PCuNf<N4X@y3%-0}RSXQ>~B@p}`xXR#EInZ_U^QY>z%G|QeEtQ+o=5A%tJE+Xl z%BA^2xwM!D-a&=C`hav0_2ZCHeh0inLek}eS=DLI%YH<LjK0?IlKct|hR;f@X7J@q G*Zc>ZCK2rb literal 0 HcmV?d00001 diff --git a/week-0/day-3/venv/lib/python3.6/site-packages/pip/utils/__pycache__/filesystem.cpython-36.pyc b/week-0/day-3/venv/lib/python3.6/site-packages/pip/utils/__pycache__/filesystem.cpython-36.pyc new file mode 100644 index 0000000000000000000000000000000000000000..942854f46448958d29d9c0e6c1fa2ade23dbdf00 GIT binary patch literal 583 zcmYjNy>8nu5WXX2OH~!uL#94KG{hcKpi5CC2->B9Jt%+!1FfNmY%N=|6q0IfKwhd2 zeU-iv*G_$fPB|(WLgIdS_wnw#yEr)sujX$*cO2j^JUfj1OA>uXN`SxumX8*D%L-QV zB}Wikc)wuj2}~d!{3A5XVzkjWX;yV=)~hBL8M-hX>H;rGu1WN7QU(kP?3f-2mQej8 z?&}s>+;a8P;D&8@3mvK*`Cdo8woH9FL}uWkN49|7sRw4b4b=^TyTVK07Fy<z3Dw^C zt<ynAulv*9XPX!9H=|xhiY=(CV?MJ!QI^E^Mmf44<Iwu+RHw!$%PMU>H;wfRxzDxH z%8jDjmaIQdJ}6ZwJ4~}oYC<kn^H0_nx!R?rjJX;*SWqkZJ+B%~-qT+GfErQi|Hagl z^|a3G^SdT5#JRrL`@1H4<3hbOCNK2#YhFlw&_<S%`e4V|T4vkF9alegQu$O$za|Ad zM2~qGV#FfOFv1ZIF<@h+#*~c*YCy*Nm7er7h16z}RV6+8iF#De?3sGyz69^eN;HLh N?>3~}SOL|I_ydJ!ik1KX literal 0 HcmV?d00001 diff --git a/week-0/day-3/venv/lib/python3.6/site-packages/pip/utils/__pycache__/glibc.cpython-36.pyc b/week-0/day-3/venv/lib/python3.6/site-packages/pip/utils/__pycache__/glibc.cpython-36.pyc new file mode 100644 index 0000000000000000000000000000000000000000..d5bbcf488635e5cc651f760440f80890fcc98307 GIT binary patch literal 1366 zcmZ8hTW=gS6t+E=olKhTg%DMM$^b>`sLcjZB-E-Ds?rFFXsMcqqNUYn)^>JhcW$*k zZ4)L>%b(#d`IRUB0#BUdP1Q6Wor^x($DhyfnY&wC@uT0qfBEMoA^(tbgMt4Oh<*x6 z5J5{)(FvvKvyx4iv);sW)}Q#!29rQ|!vBj*LJ^1%>_7}e1U3>IA_lu5*da+b|AnX| zrS@_@)lJzMnH5#rC^P0bfx`m<Qsgm+BVovb3c8}F<T&ohf}PUmq~7+4@s_c=MG1a_ z9+KY)tn_=D1wCDnQ)a@RnZb(bgPtuS!5{+bk%V`0@0m26s&z6eiz!cDOQnmZPP9=) zJ-d@MDj7GmOp2qVZcNf?K-Wu0V;kg}7e%^ZLvD^+sjdI`=Ys>gJ*&HHCQXJBv$KeH z_{c!aDctjkQjM|^&-gr7S!)MMYTR$*0>W#P*IZf;7}!uq-Uyj`_G+sdF160;ypp=j zxl|!!#crO3&tUoAL|q2#ztNtl+P$`Dcc)!Zie3FmznymcJA|BcrYQBEyYQ$z2EONs zVkEfa2IhPl6dA;n(U=as(2HouVj44b6>yH_!Qq3T@5=NGIO{U?WW`Rs-qSY?TX=%? zWQQ1k#h^sqAu&PkEkfb1pqxEjvS$Ab2^_+f0hA{kpWM9l<I@LKzG&3LKfc+$_wsi7 zV&tHreh;1e@Z@bPxsl>R8Q&CUo_w3|23}SzYoikvYE<FwJISmu_mi*nz6~4<2Jv)Y znUaVZKDW`ET-A^es4jYT_^hi<QOW0P*m^~6Y%o(z*QUN2!u9P?$yZ&Wq{!A`w;*g$ zbyeoVTUxm~t<@FW@DZO&zRW(T!&fk&F&r6OqCO3w1U|h+)eS&6wk8ftJEq^I9%l@} z_ufNmE+cgfd%@5iQV)FqNl)2$KV4VP#YsK&DQr@op~AB+68m_bzm^%MFE_=slxvE2 zVWo~h5ug<TE%iD09042@1PMA)UxMREkskgVKx)U(1zV9rXw;q@K@$q_ff(cvpCM4f z$7Q3o%*|1wDjU6fo$#;N`XEIY*eX2hSCIGISi~Hf#x~BfqYheKW|=~E3Lm$^<f$)E t?V!S=U1r>k+}3l4V0S53u;@Y6h^~|m@va)7ODuv^z~@DuL|3Bg{{w|WQ0f2x literal 0 HcmV?d00001 diff --git a/week-0/day-3/venv/lib/python3.6/site-packages/pip/utils/__pycache__/hashes.cpython-36.pyc b/week-0/day-3/venv/lib/python3.6/site-packages/pip/utils/__pycache__/hashes.cpython-36.pyc new file mode 100644 index 0000000000000000000000000000000000000000..b364bab884c6b96210ab7e3c40e8b36864369cc3 GIT binary patch literal 3242 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 Gz5fAAvJ{R0 literal 0 HcmV?d00001 diff --git a/week-0/day-3/venv/lib/python3.6/site-packages/pip/utils/__pycache__/logging.cpython-36.pyc b/week-0/day-3/venv/lib/python3.6/site-packages/pip/utils/__pycache__/logging.cpython-36.pyc new file mode 100644 index 0000000000000000000000000000000000000000..66a0b55b0f3af20e133ab2451d49e326e518de17 GIT binary patch literal 3898 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 literal 0 HcmV?d00001 diff --git a/week-0/day-3/venv/lib/python3.6/site-packages/pip/utils/__pycache__/outdated.cpython-36.pyc b/week-0/day-3/venv/lib/python3.6/site-packages/pip/utils/__pycache__/outdated.cpython-36.pyc new file mode 100644 index 0000000000000000000000000000000000000000..17aa87541310bb4d3883729b65cbfa308cbf524a GIT binary patch literal 4223 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 C2p50= literal 0 HcmV?d00001 diff --git a/week-0/day-3/venv/lib/python3.6/site-packages/pip/utils/__pycache__/packaging.cpython-36.pyc b/week-0/day-3/venv/lib/python3.6/site-packages/pip/utils/__pycache__/packaging.cpython-36.pyc new file mode 100644 index 0000000000000000000000000000000000000000..7f86535c085264131e8a7c241b01b2720fcd535e GIT binary patch literal 1986 zcma)7&2HO95a#knqG-ypT{~#f9*DL^po3(fH4q<)phi*$Mq9^--82wT&@{P{NbxVb zOE)&;9IEyudg`^WwAY^U3O#jZDG9cEse+vy&Q89anVoO^RlDsRzI^htXKUKu+MS;c z`Zuundk~QpkyOjbfDqL6RL_iop>!iP2PW8z)EZc@n`t9!4w~xB0^J_iN^hjC%o#XJ zZ>DRRJ8+3c&7@7&XJpWc?5OpdHrR-qXbtww$c@^tZ$-wL)?NPqF=$;PJHaI{(n?T2 z&dP!bFgZt*MyCPel%3!wFKHMLW6C&uHLqZgiyYK;IT`tk@}goP#WRP#3u!6fl!pZI z;b*{V!g>aaKLs&`#3wd$BmGPhT0*AUjNB5TCq`r>rm#dqG!r`_k@>s+P@Cy90_XZv zpOQ%f0=I$}0PT42dp4%w#EXZX7*nsj7ULrK=Fxd^?p2(6Ss=o(I=^7_Z52bbe(ibT zEz{~d3hosZ70bDIan34wvA|sb7Q@9AccCd);B)MZ=AwTe>nKS1{{V{$K*|eI2VA2n zpnJ$QbP#iJ2y*W@zY5YgI$JyshWy_&$H5gv@3{8%h6RJF)M1{SOVa;<Pt<KO6E^8C z(axw~7MiRQTS1yh5$Dp#f>Ih>Fc8;Vy7Th*aXu`%hU~0VSw37b_{*xx_4*<FImBNY z+lK4@`EpNW<z5+=y~`?2qaJ_D-(6PWKAP03M4a-yG6*NZD9%Uy@>=eM*b2~#_nvqY z;J5=qb8Outj^PpZ0KS&Ji9L$RtKK{SML>57lISy?c~cEK5_(T*CTeGJ3O49Swhx+# z+8K}+y3#n2_7C5lA3i@kKfJL|zkAU;J~?{XwWJgCIOihBL&_R(gWP@|b8!sS!kxvJ zkWG<GcN}m(qaug`5lDAL#qtYyWk%?W)v3h}YM+4Eg;i%rT;iyI%D&7Huf#H_4F3cL zGgN#dGYwgl0Iy~+f<QCCVoZU9nCq>1eITr<IV1c+G?HedL&o;h1dg_ZBi4kQv~e^o zI65>Q0Pe5kCoMlPHL;#_CJy_9Xtx&8ZXSt^WHYjAgsD~g;@HCK-CFOhH(IX0sVmty zx#_%`zhm!Ik@{wTmwSu1^=g~<c$Yu+pn5g`syv5QSe(V&+vN<#uf|#+Zl0W~W}#s9 zpwM^OuyU0L3})Bp*8|brQq^SGBhnngRFqbj7C;6AUP$#4!`UW3{xRoOiQ^Lnr;7P? zJtd`EvLd0O@be&}%*Bw}DArMQP;8)3+}l_sv}~lsXhfN8{t_@uu-jmtg1fYrt+Iwu z`HG>e9>~Z<KZ--a@Zlw)D~%%`)nvh*T4hWR{s;dIghp)AfPS)J=^#yzxW3T0)V@Jj z7reS3Nyqnx6%0=5`waiUNtb3poc8OG>e4ka4G3Q)JlFvu_ks0!R4{Ox(^!?D9yn`v z9BR@SV5uwJg2I1a7sd8fQQ_Xt;okZ+kQ6GiJ4q|vAZ4Webyh@GN}nR}IgSEXcXgZC Ox(ob4-7)NK+x{2j(I4Fa literal 0 HcmV?d00001 diff --git a/week-0/day-3/venv/lib/python3.6/site-packages/pip/utils/__pycache__/setuptools_build.cpython-36.pyc b/week-0/day-3/venv/lib/python3.6/site-packages/pip/utils/__pycache__/setuptools_build.cpython-36.pyc new file mode 100644 index 0000000000000000000000000000000000000000..9261191901ad2f6055df07736c1e4e1b75b4f590 GIT binary patch literal 327 zcmYjN!Ait15KY(1A}roK_aaT8+a44|YDEu%f?A>LMOH#LnMyF-#3Y4ve@OhLz4{lP zObSH@-h0f<V}_aI*=+x+I(<2e5c)>{!sqDH!%jVM^o)2^BQn{3icTxzVhgU<PAO^A z*r_*Ii!BtCwn74><&i1c@)ca;oWWx|jT5C|ouqLPf=4$gnBq{jnSq95;zi4b0Zx`? z8Qh6yQnVS9$^s?@Y=B{=I_-CP<&ehXC~pqkgpdak?GEbe#na=Ws_tr9-`w7RAv5vU z4D@rByH4j?==rJ_lF#kC-K=_c5=sMlC#22)?xce+(;vI(d8c?U;bJd5$OHWX+W}&X literal 0 HcmV?d00001 diff --git a/week-0/day-3/venv/lib/python3.6/site-packages/pip/utils/__pycache__/ui.cpython-36.pyc b/week-0/day-3/venv/lib/python3.6/site-packages/pip/utils/__pycache__/ui.cpython-36.pyc new file mode 100644 index 0000000000000000000000000000000000000000..1757987b28ddb4d6f180bb7a42b911088311ba9e GIT binary patch literal 9583 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 literal 0 HcmV?d00001 diff --git a/week-0/day-3/venv/lib/python3.6/site-packages/pip/utils/appdirs.py b/week-0/day-3/venv/lib/python3.6/site-packages/pip/utils/appdirs.py new file mode 100644 index 00000000..9b828014 --- /dev/null +++ b/week-0/day-3/venv/lib/python3.6/site-packages/pip/utils/appdirs.py @@ -0,0 +1,248 @@ +""" +This code was taken from https://github.com/ActiveState/appdirs and modified +to suit our purposes. +""" +from __future__ import absolute_import + +import os +import sys + +from pip.compat import WINDOWS, expanduser +from pip._vendor.six import PY2, text_type + + +def user_cache_dir(appname): + r""" + Return full path to the user-specific cache dir for this application. + + "appname" is the name of application. + + Typical user cache directories are: + macOS: ~/Library/Caches/<AppName> + Unix: ~/.cache/<AppName> (XDG default) + Windows: C:\Users\<username>\AppData\Local\<AppName>\Cache + + On Windows the only suggestion in the MSDN docs is that local settings go + in the `CSIDL_LOCAL_APPDATA` directory. This is identical to the + non-roaming app data dir (the default returned by `user_data_dir`). Apps + typically put cache data somewhere *under* the given dir here. Some + examples: + ...\Mozilla\Firefox\Profiles\<ProfileName>\Cache + ...\Acme\SuperApp\Cache\1.0 + + OPINION: This function appends "Cache" to the `CSIDL_LOCAL_APPDATA` value. + """ + if WINDOWS: + # Get the base path + path = os.path.normpath(_get_win_folder("CSIDL_LOCAL_APPDATA")) + + # When using Python 2, return paths as bytes on Windows like we do on + # other operating systems. See helper function docs for more details. + if PY2 and isinstance(path, text_type): + path = _win_path_to_bytes(path) + + # Add our app name and Cache directory to it + path = os.path.join(path, appname, "Cache") + elif sys.platform == "darwin": + # Get the base path + path = expanduser("~/Library/Caches") + + # Add our app name to it + path = os.path.join(path, appname) + else: + # Get the base path + path = os.getenv("XDG_CACHE_HOME", expanduser("~/.cache")) + + # Add our app name to it + path = os.path.join(path, appname) + + return path + + +def user_data_dir(appname, roaming=False): + """ + Return full path to the user-specific data dir for this application. + + "appname" is the name of application. + If None, just the system directory is returned. + "roaming" (boolean, default False) can be set True to use the Windows + roaming appdata directory. That means that for users on a Windows + network setup for roaming profiles, this user data will be + sync'd on login. See + <http://technet.microsoft.com/en-us/library/cc766489(WS.10).aspx> + for a discussion of issues. + + Typical user data directories are: + macOS: ~/Library/Application Support/<AppName> + Unix: ~/.local/share/<AppName> # or in + $XDG_DATA_HOME, if defined + Win XP (not roaming): C:\Documents and Settings\<username>\ ... + ...Application Data\<AppName> + Win XP (roaming): C:\Documents and Settings\<username>\Local ... + ...Settings\Application Data\<AppName> + Win 7 (not roaming): C:\\Users\<username>\AppData\Local\<AppName> + Win 7 (roaming): C:\\Users\<username>\AppData\Roaming\<AppName> + + For Unix, we follow the XDG spec and support $XDG_DATA_HOME. + That means, by default "~/.local/share/<AppName>". + """ + if WINDOWS: + const = roaming and "CSIDL_APPDATA" or "CSIDL_LOCAL_APPDATA" + path = os.path.join(os.path.normpath(_get_win_folder(const)), appname) + elif sys.platform == "darwin": + path = os.path.join( + expanduser('~/Library/Application Support/'), + appname, + ) + else: + path = os.path.join( + os.getenv('XDG_DATA_HOME', expanduser("~/.local/share")), + appname, + ) + + return path + + +def user_config_dir(appname, roaming=True): + """Return full path to the user-specific config dir for this application. + + "appname" is the name of application. + If None, just the system directory is returned. + "roaming" (boolean, default True) can be set False to not use the + Windows roaming appdata directory. That means that for users on a + Windows network setup for roaming profiles, this user data will be + sync'd on login. See + <http://technet.microsoft.com/en-us/library/cc766489(WS.10).aspx> + for a discussion of issues. + + Typical user data directories are: + macOS: same as user_data_dir + Unix: ~/.config/<AppName> + Win *: same as user_data_dir + + For Unix, we follow the XDG spec and support $XDG_CONFIG_HOME. + That means, by default "~/.config/<AppName>". + """ + if WINDOWS: + path = user_data_dir(appname, roaming=roaming) + elif sys.platform == "darwin": + path = user_data_dir(appname) + else: + path = os.getenv('XDG_CONFIG_HOME', expanduser("~/.config")) + path = os.path.join(path, appname) + + return path + + +# for the discussion regarding site_config_dirs locations +# see <https://github.com/pypa/pip/issues/1733> +def site_config_dirs(appname): + """Return a list of potential user-shared config dirs for this application. + + "appname" is the name of application. + + Typical user config directories are: + macOS: /Library/Application Support/<AppName>/ + Unix: /etc or $XDG_CONFIG_DIRS[i]/<AppName>/ for each value in + $XDG_CONFIG_DIRS + Win XP: C:\Documents and Settings\All Users\Application ... + ...Data\<AppName>\ + Vista: (Fail! "C:\ProgramData" is a hidden *system* directory + on Vista.) + Win 7: Hidden, but writeable on Win 7: + C:\ProgramData\<AppName>\ + """ + if WINDOWS: + path = os.path.normpath(_get_win_folder("CSIDL_COMMON_APPDATA")) + pathlist = [os.path.join(path, appname)] + elif sys.platform == 'darwin': + pathlist = [os.path.join('/Library/Application Support', appname)] + else: + # try looking in $XDG_CONFIG_DIRS + xdg_config_dirs = os.getenv('XDG_CONFIG_DIRS', '/etc/xdg') + if xdg_config_dirs: + pathlist = [ + os.path.join(expanduser(x), appname) + for x in xdg_config_dirs.split(os.pathsep) + ] + else: + pathlist = [] + + # always look in /etc directly as well + pathlist.append('/etc') + + return pathlist + + +# -- Windows support functions -- + +def _get_win_folder_from_registry(csidl_name): + """ + This is a fallback technique at best. I'm not sure if using the + registry for this guarantees us the correct answer for all CSIDL_* + names. + """ + import _winreg + + shell_folder_name = { + "CSIDL_APPDATA": "AppData", + "CSIDL_COMMON_APPDATA": "Common AppData", + "CSIDL_LOCAL_APPDATA": "Local AppData", + }[csidl_name] + + key = _winreg.OpenKey( + _winreg.HKEY_CURRENT_USER, + r"Software\Microsoft\Windows\CurrentVersion\Explorer\Shell Folders" + ) + directory, _type = _winreg.QueryValueEx(key, shell_folder_name) + return directory + + +def _get_win_folder_with_ctypes(csidl_name): + csidl_const = { + "CSIDL_APPDATA": 26, + "CSIDL_COMMON_APPDATA": 35, + "CSIDL_LOCAL_APPDATA": 28, + }[csidl_name] + + buf = ctypes.create_unicode_buffer(1024) + ctypes.windll.shell32.SHGetFolderPathW(None, csidl_const, None, 0, buf) + + # Downgrade to short path name if have highbit chars. See + # <http://bugs.activestate.com/show_bug.cgi?id=85099>. + has_high_char = False + for c in buf: + if ord(c) > 255: + has_high_char = True + break + if has_high_char: + buf2 = ctypes.create_unicode_buffer(1024) + if ctypes.windll.kernel32.GetShortPathNameW(buf.value, buf2, 1024): + buf = buf2 + + return buf.value + +if WINDOWS: + try: + import ctypes + _get_win_folder = _get_win_folder_with_ctypes + except ImportError: + _get_win_folder = _get_win_folder_from_registry + + +def _win_path_to_bytes(path): + """Encode Windows paths to bytes. Only used on Python 2. + + Motivation is to be consistent with other operating systems where paths + are also returned as bytes. This avoids problems mixing bytes and Unicode + elsewhere in the codebase. For more details and discussion see + <https://github.com/pypa/pip/issues/3463>. + + If encoding using ASCII and MBCS fails, return the original Unicode path. + """ + for encoding in ('ASCII', 'MBCS'): + try: + return path.encode(encoding) + except (UnicodeEncodeError, LookupError): + pass + return path diff --git a/week-0/day-3/venv/lib/python3.6/site-packages/pip/utils/build.py b/week-0/day-3/venv/lib/python3.6/site-packages/pip/utils/build.py new file mode 100644 index 00000000..fc65cfab --- /dev/null +++ b/week-0/day-3/venv/lib/python3.6/site-packages/pip/utils/build.py @@ -0,0 +1,42 @@ +from __future__ import absolute_import + +import os.path +import tempfile + +from pip.utils import rmtree + + +class BuildDirectory(object): + + def __init__(self, name=None, delete=None): + # If we were not given an explicit directory, and we were not given an + # explicit delete option, then we'll default to deleting. + if name is None and delete is None: + delete = True + + if name is None: + # We realpath here because some systems have their default tmpdir + # symlinked to another directory. This tends to confuse build + # scripts, so we canonicalize the path by traversing potential + # symlinks here. + name = os.path.realpath(tempfile.mkdtemp(prefix="pip-build-")) + # If we were not given an explicit directory, and we were not given + # an explicit delete option, then we'll default to deleting. + if delete is None: + delete = True + + self.name = name + self.delete = delete + + def __repr__(self): + return "<{} {!r}>".format(self.__class__.__name__, self.name) + + def __enter__(self): + return self.name + + def __exit__(self, exc, value, tb): + self.cleanup() + + def cleanup(self): + if self.delete: + rmtree(self.name) diff --git a/week-0/day-3/venv/lib/python3.6/site-packages/pip/utils/deprecation.py b/week-0/day-3/venv/lib/python3.6/site-packages/pip/utils/deprecation.py new file mode 100644 index 00000000..c3f799e6 --- /dev/null +++ b/week-0/day-3/venv/lib/python3.6/site-packages/pip/utils/deprecation.py @@ -0,0 +1,76 @@ +""" +A module that implements tooling to enable easy warnings about deprecations. +""" +from __future__ import absolute_import + +import logging +import warnings + + +class PipDeprecationWarning(Warning): + pass + + +class Pending(object): + pass + + +class RemovedInPip10Warning(PipDeprecationWarning): + pass + + +class RemovedInPip11Warning(PipDeprecationWarning, Pending): + pass + + +class Python26DeprecationWarning(PipDeprecationWarning): + pass + + +# Warnings <-> Logging Integration + + +_warnings_showwarning = None + + +def _showwarning(message, category, filename, lineno, file=None, line=None): + if file is not None: + if _warnings_showwarning is not None: + _warnings_showwarning( + message, category, filename, lineno, file, line, + ) + else: + if issubclass(category, PipDeprecationWarning): + # We use a specially named logger which will handle all of the + # deprecation messages for pip. + logger = logging.getLogger("pip.deprecations") + + # This is purposely using the % formatter here instead of letting + # the logging module handle the interpolation. This is because we + # want it to appear as if someone typed this entire message out. + log_message = "DEPRECATION: %s" % message + + # PipDeprecationWarnings that are Pending still have at least 2 + # versions to go until they are removed so they can just be + # warnings. Otherwise, they will be removed in the very next + # version of pip. We want these to be more obvious so we use the + # ERROR logging level. + if issubclass(category, Pending): + logger.warning(log_message) + else: + logger.error(log_message) + else: + _warnings_showwarning( + message, category, filename, lineno, file, line, + ) + + +def install_warning_logger(): + # Enable our Deprecation Warnings + warnings.simplefilter("default", PipDeprecationWarning, append=True) + + global _warnings_showwarning + + if _warnings_showwarning is None: + _warnings_showwarning = warnings.showwarning + warnings.showwarning = _showwarning diff --git a/week-0/day-3/venv/lib/python3.6/site-packages/pip/utils/encoding.py b/week-0/day-3/venv/lib/python3.6/site-packages/pip/utils/encoding.py new file mode 100644 index 00000000..24831686 --- /dev/null +++ b/week-0/day-3/venv/lib/python3.6/site-packages/pip/utils/encoding.py @@ -0,0 +1,31 @@ +import codecs +import locale +import re + + +BOMS = [ + (codecs.BOM_UTF8, 'utf8'), + (codecs.BOM_UTF16, 'utf16'), + (codecs.BOM_UTF16_BE, 'utf16-be'), + (codecs.BOM_UTF16_LE, 'utf16-le'), + (codecs.BOM_UTF32, 'utf32'), + (codecs.BOM_UTF32_BE, 'utf32-be'), + (codecs.BOM_UTF32_LE, 'utf32-le'), +] + +ENCODING_RE = re.compile(b'coding[:=]\s*([-\w.]+)') + + +def auto_decode(data): + """Check a bytes string for a BOM to correctly detect the encoding + + Fallback to locale.getpreferredencoding(False) like open() on Python3""" + for bom, encoding in BOMS: + if data.startswith(bom): + return data[len(bom):].decode(encoding) + # Lets check the first two lines as in PEP263 + for line in data.split(b'\n')[:2]: + if line[0:1] == b'#' and ENCODING_RE.search(line): + encoding = ENCODING_RE.search(line).groups()[0].decode('ascii') + return data.decode(encoding) + return data.decode(locale.getpreferredencoding(False)) diff --git a/week-0/day-3/venv/lib/python3.6/site-packages/pip/utils/filesystem.py b/week-0/day-3/venv/lib/python3.6/site-packages/pip/utils/filesystem.py new file mode 100644 index 00000000..25ad5166 --- /dev/null +++ b/week-0/day-3/venv/lib/python3.6/site-packages/pip/utils/filesystem.py @@ -0,0 +1,28 @@ +import os +import os.path + +from pip.compat import get_path_uid + + +def check_path_owner(path): + # If we don't have a way to check the effective uid of this process, then + # we'll just assume that we own the directory. + if not hasattr(os, "geteuid"): + return True + + previous = None + while path != previous: + if os.path.lexists(path): + # Check if path is writable by current user. + if os.geteuid() == 0: + # Special handling for root user in order to handle properly + # cases where users use sudo without -H flag. + try: + path_uid = get_path_uid(path) + except OSError: + return False + return path_uid == 0 + else: + return os.access(path, os.W_OK) + else: + previous, path = path, os.path.dirname(path) diff --git a/week-0/day-3/venv/lib/python3.6/site-packages/pip/utils/glibc.py b/week-0/day-3/venv/lib/python3.6/site-packages/pip/utils/glibc.py new file mode 100644 index 00000000..7847885c --- /dev/null +++ b/week-0/day-3/venv/lib/python3.6/site-packages/pip/utils/glibc.py @@ -0,0 +1,81 @@ +from __future__ import absolute_import + +import re +import ctypes +import platform +import warnings + + +def glibc_version_string(): + "Returns glibc version string, or None if not using glibc." + + # ctypes.CDLL(None) internally calls dlopen(NULL), and as the dlopen + # manpage says, "If filename is NULL, then the returned handle is for the + # main program". This way we can let the linker do the work to figure out + # which libc our process is actually using. + process_namespace = ctypes.CDLL(None) + try: + gnu_get_libc_version = process_namespace.gnu_get_libc_version + except AttributeError: + # Symbol doesn't exist -> therefore, we are not linked to + # glibc. + return None + + # Call gnu_get_libc_version, which returns a string like "2.5" + gnu_get_libc_version.restype = ctypes.c_char_p + version_str = gnu_get_libc_version() + # py2 / py3 compatibility: + if not isinstance(version_str, str): + version_str = version_str.decode("ascii") + + return version_str + + +# Separated out from have_compatible_glibc for easier unit testing +def check_glibc_version(version_str, required_major, minimum_minor): + # Parse string and check against requested version. + # + # We use a regexp instead of str.split because we want to discard any + # random junk that might come after the minor version -- this might happen + # in patched/forked versions of glibc (e.g. Linaro's version of glibc + # uses version strings like "2.20-2014.11"). See gh-3588. + m = re.match(r"(?P<major>[0-9]+)\.(?P<minor>[0-9]+)", version_str) + if not m: + warnings.warn("Expected glibc version with 2 components major.minor," + " got: %s" % version_str, RuntimeWarning) + return False + return (int(m.group("major")) == required_major and + int(m.group("minor")) >= minimum_minor) + + +def have_compatible_glibc(required_major, minimum_minor): + version_str = glibc_version_string() + if version_str is None: + return False + return check_glibc_version(version_str, required_major, minimum_minor) + + +# platform.libc_ver regularly returns completely nonsensical glibc +# versions. E.g. on my computer, platform says: +# +# ~$ python2.7 -c 'import platform; print(platform.libc_ver())' +# ('glibc', '2.7') +# ~$ python3.5 -c 'import platform; print(platform.libc_ver())' +# ('glibc', '2.9') +# +# But the truth is: +# +# ~$ ldd --version +# ldd (Debian GLIBC 2.22-11) 2.22 +# +# This is unfortunate, because it means that the linehaul data on libc +# versions that was generated by pip 8.1.2 and earlier is useless and +# misleading. Solution: instead of using platform, use our code that actually +# works. +def libc_ver(): + glibc_version = glibc_version_string() + if glibc_version is None: + # For non-glibc platforms, fall back on platform.libc_ver + return platform.libc_ver() + else: + return ("glibc", glibc_version) diff --git a/week-0/day-3/venv/lib/python3.6/site-packages/pip/utils/hashes.py b/week-0/day-3/venv/lib/python3.6/site-packages/pip/utils/hashes.py new file mode 100644 index 00000000..96029700 --- /dev/null +++ b/week-0/day-3/venv/lib/python3.6/site-packages/pip/utils/hashes.py @@ -0,0 +1,92 @@ +from __future__ import absolute_import + +import hashlib + +from pip.exceptions import HashMismatch, HashMissing, InstallationError +from pip.utils import read_chunks +from pip._vendor.six import iteritems, iterkeys, itervalues + + +# The recommended hash algo of the moment. Change this whenever the state of +# the art changes; it won't hurt backward compatibility. +FAVORITE_HASH = 'sha256' + + +# Names of hashlib algorithms allowed by the --hash option and ``pip hash`` +# Currently, those are the ones at least as collision-resistant as sha256. +STRONG_HASHES = ['sha256', 'sha384', 'sha512'] + + +class Hashes(object): + """A wrapper that builds multiple hashes at once and checks them against + known-good values + + """ + def __init__(self, hashes=None): + """ + :param hashes: A dict of algorithm names pointing to lists of allowed + hex digests + """ + self._allowed = {} if hashes is None else hashes + + def check_against_chunks(self, chunks): + """Check good hashes against ones built from iterable of chunks of + data. + + Raise HashMismatch if none match. + + """ + gots = {} + for hash_name in iterkeys(self._allowed): + try: + gots[hash_name] = hashlib.new(hash_name) + except (ValueError, TypeError): + raise InstallationError('Unknown hash name: %s' % hash_name) + + for chunk in chunks: + for hash in itervalues(gots): + hash.update(chunk) + + for hash_name, got in iteritems(gots): + if got.hexdigest() in self._allowed[hash_name]: + return + self._raise(gots) + + def _raise(self, gots): + raise HashMismatch(self._allowed, gots) + + def check_against_file(self, file): + """Check good hashes against a file-like object + + Raise HashMismatch if none match. + + """ + return self.check_against_chunks(read_chunks(file)) + + def check_against_path(self, path): + with open(path, 'rb') as file: + return self.check_against_file(file) + + def __nonzero__(self): + """Return whether I know any known-good hashes.""" + return bool(self._allowed) + + def __bool__(self): + return self.__nonzero__() + + +class MissingHashes(Hashes): + """A workalike for Hashes used when we're missing a hash for a requirement + + It computes the actual hash of the requirement and raises a HashMissing + exception showing it to the user. + + """ + def __init__(self): + """Don't offer the ``hashes`` kwarg.""" + # Pass our favorite hash in to generate a "gotten hash". With the + # empty list, it will never match, so an error will always raise. + super(MissingHashes, self).__init__(hashes={FAVORITE_HASH: []}) + + def _raise(self, gots): + raise HashMissing(gots[FAVORITE_HASH].hexdigest()) diff --git a/week-0/day-3/venv/lib/python3.6/site-packages/pip/utils/logging.py b/week-0/day-3/venv/lib/python3.6/site-packages/pip/utils/logging.py new file mode 100644 index 00000000..1c1053ab --- /dev/null +++ b/week-0/day-3/venv/lib/python3.6/site-packages/pip/utils/logging.py @@ -0,0 +1,130 @@ +from __future__ import absolute_import + +import contextlib +import logging +import logging.handlers +import os + +try: + import threading +except ImportError: + import dummy_threading as threading + +from pip.compat import WINDOWS +from pip.utils import ensure_dir + +try: + from pip._vendor import colorama +# Lots of different errors can come from this, including SystemError and +# ImportError. +except Exception: + colorama = None + + +_log_state = threading.local() +_log_state.indentation = 0 + + +@contextlib.contextmanager +def indent_log(num=2): + """ + A context manager which will cause the log output to be indented for any + log messages emitted inside it. + """ + _log_state.indentation += num + try: + yield + finally: + _log_state.indentation -= num + + +def get_indentation(): + return getattr(_log_state, 'indentation', 0) + + +class IndentingFormatter(logging.Formatter): + + def format(self, record): + """ + Calls the standard formatter, but will indent all of the log messages + by our current indentation level. + """ + formatted = logging.Formatter.format(self, record) + formatted = "".join([ + (" " * get_indentation()) + line + for line in formatted.splitlines(True) + ]) + return formatted + + +def _color_wrap(*colors): + def wrapped(inp): + return "".join(list(colors) + [inp, colorama.Style.RESET_ALL]) + return wrapped + + +class ColorizedStreamHandler(logging.StreamHandler): + + # Don't build up a list of colors if we don't have colorama + if colorama: + COLORS = [ + # This needs to be in order from highest logging level to lowest. + (logging.ERROR, _color_wrap(colorama.Fore.RED)), + (logging.WARNING, _color_wrap(colorama.Fore.YELLOW)), + ] + else: + COLORS = [] + + def __init__(self, stream=None): + logging.StreamHandler.__init__(self, stream) + + if WINDOWS and colorama: + self.stream = colorama.AnsiToWin32(self.stream) + + def should_color(self): + # Don't colorize things if we do not have colorama + if not colorama: + return False + + real_stream = ( + self.stream if not isinstance(self.stream, colorama.AnsiToWin32) + else self.stream.wrapped + ) + + # If the stream is a tty we should color it + if hasattr(real_stream, "isatty") and real_stream.isatty(): + return True + + # If we have an ASNI term we should color it + if os.environ.get("TERM") == "ANSI": + return True + + # If anything else we should not color it + return False + + def format(self, record): + msg = logging.StreamHandler.format(self, record) + + if self.should_color(): + for level, color in self.COLORS: + if record.levelno >= level: + msg = color(msg) + break + + return msg + + +class BetterRotatingFileHandler(logging.handlers.RotatingFileHandler): + + def _open(self): + ensure_dir(os.path.dirname(self.baseFilename)) + return logging.handlers.RotatingFileHandler._open(self) + + +class MaxLevelFilter(logging.Filter): + + def __init__(self, level): + self.level = level + + def filter(self, record): + return record.levelno < self.level diff --git a/week-0/day-3/venv/lib/python3.6/site-packages/pip/utils/outdated.py b/week-0/day-3/venv/lib/python3.6/site-packages/pip/utils/outdated.py new file mode 100644 index 00000000..2164cc3c --- /dev/null +++ b/week-0/day-3/venv/lib/python3.6/site-packages/pip/utils/outdated.py @@ -0,0 +1,162 @@ +from __future__ import absolute_import + +import datetime +import json +import logging +import os.path +import sys + +from pip._vendor import lockfile +from pip._vendor.packaging import version as packaging_version + +from pip.compat import total_seconds, WINDOWS +from pip.models import PyPI +from pip.locations import USER_CACHE_DIR, running_under_virtualenv +from pip.utils import ensure_dir, get_installed_version +from pip.utils.filesystem import check_path_owner + + +SELFCHECK_DATE_FMT = "%Y-%m-%dT%H:%M:%SZ" + + +logger = logging.getLogger(__name__) + + +class VirtualenvSelfCheckState(object): + def __init__(self): + self.statefile_path = os.path.join(sys.prefix, "pip-selfcheck.json") + + # Load the existing state + try: + with open(self.statefile_path) as statefile: + self.state = json.load(statefile) + except (IOError, ValueError): + self.state = {} + + def save(self, pypi_version, current_time): + # Attempt to write out our version check file + with open(self.statefile_path, "w") as statefile: + json.dump( + { + "last_check": current_time.strftime(SELFCHECK_DATE_FMT), + "pypi_version": pypi_version, + }, + statefile, + sort_keys=True, + separators=(",", ":") + ) + + +class GlobalSelfCheckState(object): + def __init__(self): + self.statefile_path = os.path.join(USER_CACHE_DIR, "selfcheck.json") + + # Load the existing state + try: + with open(self.statefile_path) as statefile: + self.state = json.load(statefile)[sys.prefix] + except (IOError, ValueError, KeyError): + self.state = {} + + def save(self, pypi_version, current_time): + # Check to make sure that we own the directory + if not check_path_owner(os.path.dirname(self.statefile_path)): + return + + # Now that we've ensured the directory is owned by this user, we'll go + # ahead and make sure that all our directories are created. + ensure_dir(os.path.dirname(self.statefile_path)) + + # Attempt to write out our version check file + with lockfile.LockFile(self.statefile_path): + if os.path.exists(self.statefile_path): + with open(self.statefile_path) as statefile: + state = json.load(statefile) + else: + state = {} + + state[sys.prefix] = { + "last_check": current_time.strftime(SELFCHECK_DATE_FMT), + "pypi_version": pypi_version, + } + + with open(self.statefile_path, "w") as statefile: + json.dump(state, statefile, sort_keys=True, + separators=(",", ":")) + + +def load_selfcheck_statefile(): + if running_under_virtualenv(): + return VirtualenvSelfCheckState() + else: + return GlobalSelfCheckState() + + +def pip_version_check(session): + """Check for an update for pip. + + Limit the frequency of checks to once per week. State is stored either in + the active virtualenv or in the user's USER_CACHE_DIR keyed off the prefix + of the pip script path. + """ + installed_version = get_installed_version("pip") + if installed_version is None: + return + + pip_version = packaging_version.parse(installed_version) + pypi_version = None + + try: + state = load_selfcheck_statefile() + + current_time = datetime.datetime.utcnow() + # Determine if we need to refresh the state + if "last_check" in state.state and "pypi_version" in state.state: + last_check = datetime.datetime.strptime( + state.state["last_check"], + SELFCHECK_DATE_FMT + ) + if total_seconds(current_time - last_check) < 7 * 24 * 60 * 60: + pypi_version = state.state["pypi_version"] + + # Refresh the version if we need to or just see if we need to warn + if pypi_version is None: + resp = session.get( + PyPI.pip_json_url, + headers={"Accept": "application/json"}, + ) + resp.raise_for_status() + pypi_version = [ + v for v in sorted( + list(resp.json()["releases"]), + key=packaging_version.parse, + ) + if not packaging_version.parse(v).is_prerelease + ][-1] + + # save that we've performed a check + state.save(pypi_version, current_time) + + remote_version = packaging_version.parse(pypi_version) + + # Determine if our pypi_version is older + if (pip_version < remote_version and + pip_version.base_version != remote_version.base_version): + # Advise "python -m pip" on Windows to avoid issues + # with overwriting pip.exe. + if WINDOWS: + pip_cmd = "python -m pip" + else: + pip_cmd = "pip" + logger.warning( + "You are using pip version %s, however version %s is " + "available.\nYou should consider upgrading via the " + "'%s install --upgrade pip' command.", + pip_version, pypi_version, pip_cmd + ) + + except Exception: + logger.debug( + "There was an error checking the latest version of pip", + exc_info=True, + ) diff --git a/week-0/day-3/venv/lib/python3.6/site-packages/pip/utils/packaging.py b/week-0/day-3/venv/lib/python3.6/site-packages/pip/utils/packaging.py new file mode 100644 index 00000000..e93b20d1 --- /dev/null +++ b/week-0/day-3/venv/lib/python3.6/site-packages/pip/utils/packaging.py @@ -0,0 +1,63 @@ +from __future__ import absolute_import + +from email.parser import FeedParser + +import logging +import sys + +from pip._vendor.packaging import specifiers +from pip._vendor.packaging import version +from pip._vendor import pkg_resources + +from pip import exceptions + +logger = logging.getLogger(__name__) + + +def check_requires_python(requires_python): + """ + Check if the python version in use match the `requires_python` specifier. + + Returns `True` if the version of python in use matches the requirement. + Returns `False` if the version of python in use does not matches the + requirement. + + Raises an InvalidSpecifier if `requires_python` have an invalid format. + """ + if requires_python is None: + # The package provides no information + return True + requires_python_specifier = specifiers.SpecifierSet(requires_python) + + # We only use major.minor.micro + python_version = version.parse('.'.join(map(str, sys.version_info[:3]))) + return python_version in requires_python_specifier + + +def get_metadata(dist): + if (isinstance(dist, pkg_resources.DistInfoDistribution) and + dist.has_metadata('METADATA')): + return dist.get_metadata('METADATA') + elif dist.has_metadata('PKG-INFO'): + return dist.get_metadata('PKG-INFO') + + +def check_dist_requires_python(dist): + metadata = get_metadata(dist) + feed_parser = FeedParser() + feed_parser.feed(metadata) + pkg_info_dict = feed_parser.close() + requires_python = pkg_info_dict.get('Requires-Python') + try: + if not check_requires_python(requires_python): + raise exceptions.UnsupportedPythonVersion( + "%s requires Python '%s' but the running Python is %s" % ( + dist.project_name, + requires_python, + '.'.join(map(str, sys.version_info[:3])),) + ) + except specifiers.InvalidSpecifier as e: + logger.warning( + "Package %s has an invalid Requires-Python entry %s - %s" % ( + dist.project_name, requires_python, e)) + return diff --git a/week-0/day-3/venv/lib/python3.6/site-packages/pip/utils/setuptools_build.py b/week-0/day-3/venv/lib/python3.6/site-packages/pip/utils/setuptools_build.py new file mode 100644 index 00000000..03973e97 --- /dev/null +++ b/week-0/day-3/venv/lib/python3.6/site-packages/pip/utils/setuptools_build.py @@ -0,0 +1,8 @@ +# Shim to wrap setup.py invocation with setuptools +SETUPTOOLS_SHIM = ( + "import setuptools, tokenize;__file__=%r;" + "f=getattr(tokenize, 'open', open)(__file__);" + "code=f.read().replace('\\r\\n', '\\n');" + "f.close();" + "exec(compile(code, __file__, 'exec'))" +) diff --git a/week-0/day-3/venv/lib/python3.6/site-packages/pip/utils/ui.py b/week-0/day-3/venv/lib/python3.6/site-packages/pip/utils/ui.py new file mode 100644 index 00000000..bba73e3b --- /dev/null +++ b/week-0/day-3/venv/lib/python3.6/site-packages/pip/utils/ui.py @@ -0,0 +1,344 @@ +from __future__ import absolute_import +from __future__ import division + +import itertools +import sys +from signal import signal, SIGINT, default_int_handler +import time +import contextlib +import logging + +from pip.compat import WINDOWS +from pip.utils import format_size +from pip.utils.logging import get_indentation +from pip._vendor import six +from pip._vendor.progress.bar import Bar, IncrementalBar +from pip._vendor.progress.helpers import (WritelnMixin, + HIDE_CURSOR, SHOW_CURSOR) +from pip._vendor.progress.spinner import Spinner + +try: + from pip._vendor import colorama +# Lots of different errors can come from this, including SystemError and +# ImportError. +except Exception: + colorama = None + +logger = logging.getLogger(__name__) + + +def _select_progress_class(preferred, fallback): + encoding = getattr(preferred.file, "encoding", None) + + # If we don't know what encoding this file is in, then we'll just assume + # that it doesn't support unicode and use the ASCII bar. + if not encoding: + return fallback + + # Collect all of the possible characters we want to use with the preferred + # bar. + characters = [ + getattr(preferred, "empty_fill", six.text_type()), + getattr(preferred, "fill", six.text_type()), + ] + characters += list(getattr(preferred, "phases", [])) + + # Try to decode the characters we're using for the bar using the encoding + # of the given file, if this works then we'll assume that we can use the + # fancier bar and if not we'll fall back to the plaintext bar. + try: + six.text_type().join(characters).encode(encoding) + except UnicodeEncodeError: + return fallback + else: + return preferred + + +_BaseBar = _select_progress_class(IncrementalBar, Bar) + + +class InterruptibleMixin(object): + """ + Helper to ensure that self.finish() gets called on keyboard interrupt. + + This allows downloads to be interrupted without leaving temporary state + (like hidden cursors) behind. + + This class is similar to the progress library's existing SigIntMixin + helper, but as of version 1.2, that helper has the following problems: + + 1. It calls sys.exit(). + 2. It discards the existing SIGINT handler completely. + 3. It leaves its own handler in place even after an uninterrupted finish, + which will have unexpected delayed effects if the user triggers an + unrelated keyboard interrupt some time after a progress-displaying + download has already completed, for example. + """ + + def __init__(self, *args, **kwargs): + """ + Save the original SIGINT handler for later. + """ + super(InterruptibleMixin, self).__init__(*args, **kwargs) + + self.original_handler = signal(SIGINT, self.handle_sigint) + + # If signal() returns None, the previous handler was not installed from + # Python, and we cannot restore it. This probably should not happen, + # but if it does, we must restore something sensible instead, at least. + # The least bad option should be Python's default SIGINT handler, which + # just raises KeyboardInterrupt. + if self.original_handler is None: + self.original_handler = default_int_handler + + def finish(self): + """ + Restore the original SIGINT handler after finishing. + + This should happen regardless of whether the progress display finishes + normally, or gets interrupted. + """ + super(InterruptibleMixin, self).finish() + signal(SIGINT, self.original_handler) + + def handle_sigint(self, signum, frame): + """ + Call self.finish() before delegating to the original SIGINT handler. + + This handler should only be in place while the progress display is + active. + """ + self.finish() + self.original_handler(signum, frame) + + +class DownloadProgressMixin(object): + + def __init__(self, *args, **kwargs): + super(DownloadProgressMixin, self).__init__(*args, **kwargs) + self.message = (" " * (get_indentation() + 2)) + self.message + + @property + def downloaded(self): + return format_size(self.index) + + @property + def download_speed(self): + # Avoid zero division errors... + if self.avg == 0.0: + return "..." + return format_size(1 / self.avg) + "/s" + + @property + def pretty_eta(self): + if self.eta: + return "eta %s" % self.eta_td + return "" + + def iter(self, it, n=1): + for x in it: + yield x + self.next(n) + self.finish() + + +class WindowsMixin(object): + + def __init__(self, *args, **kwargs): + # The Windows terminal does not support the hide/show cursor ANSI codes + # even with colorama. So we'll ensure that hide_cursor is False on + # Windows. + # This call neds to go before the super() call, so that hide_cursor + # is set in time. The base progress bar class writes the "hide cursor" + # code to the terminal in its init, so if we don't set this soon + # enough, we get a "hide" with no corresponding "show"... + if WINDOWS and self.hide_cursor: + self.hide_cursor = False + + super(WindowsMixin, self).__init__(*args, **kwargs) + + # Check if we are running on Windows and we have the colorama module, + # if we do then wrap our file with it. + if WINDOWS and colorama: + self.file = colorama.AnsiToWin32(self.file) + # The progress code expects to be able to call self.file.isatty() + # but the colorama.AnsiToWin32() object doesn't have that, so we'll + # add it. + self.file.isatty = lambda: self.file.wrapped.isatty() + # The progress code expects to be able to call self.file.flush() + # but the colorama.AnsiToWin32() object doesn't have that, so we'll + # add it. + self.file.flush = lambda: self.file.wrapped.flush() + + +class DownloadProgressBar(WindowsMixin, InterruptibleMixin, + DownloadProgressMixin, _BaseBar): + + file = sys.stdout + message = "%(percent)d%%" + suffix = "%(downloaded)s %(download_speed)s %(pretty_eta)s" + + +class DownloadProgressSpinner(WindowsMixin, InterruptibleMixin, + DownloadProgressMixin, WritelnMixin, Spinner): + + file = sys.stdout + suffix = "%(downloaded)s %(download_speed)s" + + def next_phase(self): + if not hasattr(self, "_phaser"): + self._phaser = itertools.cycle(self.phases) + return next(self._phaser) + + def update(self): + message = self.message % self + phase = self.next_phase() + suffix = self.suffix % self + line = ''.join([ + message, + " " if message else "", + phase, + " " if suffix else "", + suffix, + ]) + + self.writeln(line) + + +################################################################ +# Generic "something is happening" spinners +# +# We don't even try using progress.spinner.Spinner here because it's actually +# simpler to reimplement from scratch than to coerce their code into doing +# what we need. +################################################################ + +@contextlib.contextmanager +def hidden_cursor(file): + # The Windows terminal does not support the hide/show cursor ANSI codes, + # even via colorama. So don't even try. + if WINDOWS: + yield + # We don't want to clutter the output with control characters if we're + # writing to a file, or if the user is running with --quiet. + # See https://github.com/pypa/pip/issues/3418 + elif not file.isatty() or logger.getEffectiveLevel() > logging.INFO: + yield + else: + file.write(HIDE_CURSOR) + try: + yield + finally: + file.write(SHOW_CURSOR) + + +class RateLimiter(object): + def __init__(self, min_update_interval_seconds): + self._min_update_interval_seconds = min_update_interval_seconds + self._last_update = 0 + + def ready(self): + now = time.time() + delta = now - self._last_update + return delta >= self._min_update_interval_seconds + + def reset(self): + self._last_update = time.time() + + +class InteractiveSpinner(object): + def __init__(self, message, file=None, spin_chars="-\\|/", + # Empirically, 8 updates/second looks nice + min_update_interval_seconds=0.125): + self._message = message + if file is None: + file = sys.stdout + self._file = file + self._rate_limiter = RateLimiter(min_update_interval_seconds) + self._finished = False + + self._spin_cycle = itertools.cycle(spin_chars) + + self._file.write(" " * get_indentation() + self._message + " ... ") + self._width = 0 + + def _write(self, status): + assert not self._finished + # Erase what we wrote before by backspacing to the beginning, writing + # spaces to overwrite the old text, and then backspacing again + backup = "\b" * self._width + self._file.write(backup + " " * self._width + backup) + # Now we have a blank slate to add our status + self._file.write(status) + self._width = len(status) + self._file.flush() + self._rate_limiter.reset() + + def spin(self): + if self._finished: + return + if not self._rate_limiter.ready(): + return + self._write(next(self._spin_cycle)) + + def finish(self, final_status): + if self._finished: + return + self._write(final_status) + self._file.write("\n") + self._file.flush() + self._finished = True + + +# Used for dumb terminals, non-interactive installs (no tty), etc. +# We still print updates occasionally (once every 60 seconds by default) to +# act as a keep-alive for systems like Travis-CI that take lack-of-output as +# an indication that a task has frozen. +class NonInteractiveSpinner(object): + def __init__(self, message, min_update_interval_seconds=60): + self._message = message + self._finished = False + self._rate_limiter = RateLimiter(min_update_interval_seconds) + self._update("started") + + def _update(self, status): + assert not self._finished + self._rate_limiter.reset() + logger.info("%s: %s", self._message, status) + + def spin(self): + if self._finished: + return + if not self._rate_limiter.ready(): + return + self._update("still running...") + + def finish(self, final_status): + if self._finished: + return + self._update("finished with status '%s'" % (final_status,)) + self._finished = True + + +@contextlib.contextmanager +def open_spinner(message): + # Interactive spinner goes directly to sys.stdout rather than being routed + # through the logging system, but it acts like it has level INFO, + # i.e. it's only displayed if we're at level INFO or better. + # Non-interactive spinner goes through the logging system, so it is always + # in sync with logging configuration. + if sys.stdout.isatty() and logger.getEffectiveLevel() <= logging.INFO: + spinner = InteractiveSpinner(message) + else: + spinner = NonInteractiveSpinner(message) + try: + with hidden_cursor(sys.stdout): + yield spinner + except KeyboardInterrupt: + spinner.finish("canceled") + raise + except Exception: + spinner.finish("error") + raise + else: + spinner.finish("done") diff --git a/week-0/day-3/venv/lib/python3.6/site-packages/pip/vcs/__init__.py b/week-0/day-3/venv/lib/python3.6/site-packages/pip/vcs/__init__.py new file mode 100644 index 00000000..8d3dbb27 --- /dev/null +++ b/week-0/day-3/venv/lib/python3.6/site-packages/pip/vcs/__init__.py @@ -0,0 +1,366 @@ +"""Handles all VCS (version control) support""" +from __future__ import absolute_import + +import errno +import logging +import os +import shutil +import sys + +from pip._vendor.six.moves.urllib import parse as urllib_parse + +from pip.exceptions import BadCommand +from pip.utils import (display_path, backup_dir, call_subprocess, + rmtree, ask_path_exists) + + +__all__ = ['vcs', 'get_src_requirement'] + + +logger = logging.getLogger(__name__) + + +class VcsSupport(object): + _registry = {} + schemes = ['ssh', 'git', 'hg', 'bzr', 'sftp', 'svn'] + + def __init__(self): + # Register more schemes with urlparse for various version control + # systems + urllib_parse.uses_netloc.extend(self.schemes) + # Python >= 2.7.4, 3.3 doesn't have uses_fragment + if getattr(urllib_parse, 'uses_fragment', None): + urllib_parse.uses_fragment.extend(self.schemes) + super(VcsSupport, self).__init__() + + def __iter__(self): + return self._registry.__iter__() + + @property + def backends(self): + return list(self._registry.values()) + + @property + def dirnames(self): + return [backend.dirname for backend in self.backends] + + @property + def all_schemes(self): + schemes = [] + for backend in self.backends: + schemes.extend(backend.schemes) + return schemes + + def register(self, cls): + if not hasattr(cls, 'name'): + logger.warning('Cannot register VCS %s', cls.__name__) + return + if cls.name not in self._registry: + self._registry[cls.name] = cls + logger.debug('Registered VCS backend: %s', cls.name) + + def unregister(self, cls=None, name=None): + if name in self._registry: + del self._registry[name] + elif cls in self._registry.values(): + del self._registry[cls.name] + else: + logger.warning('Cannot unregister because no class or name given') + + def get_backend_name(self, location): + """ + Return the name of the version control backend if found at given + location, e.g. vcs.get_backend_name('/path/to/vcs/checkout') + """ + for vc_type in self._registry.values(): + if vc_type.controls_location(location): + logger.debug('Determine that %s uses VCS: %s', + location, vc_type.name) + return vc_type.name + return None + + def get_backend(self, name): + name = name.lower() + if name in self._registry: + return self._registry[name] + + def get_backend_from_location(self, location): + vc_type = self.get_backend_name(location) + if vc_type: + return self.get_backend(vc_type) + return None + + +vcs = VcsSupport() + + +class VersionControl(object): + name = '' + dirname = '' + # List of supported schemes for this Version Control + schemes = () + + def __init__(self, url=None, *args, **kwargs): + self.url = url + super(VersionControl, self).__init__(*args, **kwargs) + + def _is_local_repository(self, repo): + """ + posix absolute paths start with os.path.sep, + win32 ones start with drive (like c:\\folder) + """ + drive, tail = os.path.splitdrive(repo) + return repo.startswith(os.path.sep) or drive + + # See issue #1083 for why this method was introduced: + # https://github.com/pypa/pip/issues/1083 + def translate_egg_surname(self, surname): + # For example, Django has branches of the form "stable/1.7.x". + return surname.replace('/', '_') + + def export(self, location): + """ + Export the repository at the url to the destination location + i.e. only download the files, without vcs informations + """ + raise NotImplementedError + + def get_url_rev(self): + """ + Returns the correct repository URL and revision by parsing the given + repository URL + """ + error_message = ( + "Sorry, '%s' is a malformed VCS url. " + "The format is <vcs>+<protocol>://<url>, " + "e.g. svn+http://myrepo/svn/MyApp#egg=MyApp" + ) + assert '+' in self.url, error_message % self.url + url = self.url.split('+', 1)[1] + scheme, netloc, path, query, frag = urllib_parse.urlsplit(url) + rev = None + if '@' in path: + path, rev = path.rsplit('@', 1) + url = urllib_parse.urlunsplit((scheme, netloc, path, query, '')) + return url, rev + + def get_info(self, location): + """ + Returns (url, revision), where both are strings + """ + assert not location.rstrip('/').endswith(self.dirname), \ + 'Bad directory: %s' % location + return self.get_url(location), self.get_revision(location) + + def normalize_url(self, url): + """ + Normalize a URL for comparison by unquoting it and removing any + trailing slash. + """ + return urllib_parse.unquote(url).rstrip('/') + + def compare_urls(self, url1, url2): + """ + Compare two repo URLs for identity, ignoring incidental differences. + """ + return (self.normalize_url(url1) == self.normalize_url(url2)) + + def obtain(self, dest): + """ + Called when installing or updating an editable package, takes the + source path of the checkout. + """ + raise NotImplementedError + + def switch(self, dest, url, rev_options): + """ + Switch the repo at ``dest`` to point to ``URL``. + """ + raise NotImplementedError + + def update(self, dest, rev_options): + """ + Update an already-existing repo to the given ``rev_options``. + """ + raise NotImplementedError + + def check_version(self, dest, rev_options): + """ + Return True if the version is identical to what exists and + doesn't need to be updated. + """ + raise NotImplementedError + + def check_destination(self, dest, url, rev_options, rev_display): + """ + Prepare a location to receive a checkout/clone. + + Return True if the location is ready for (and requires) a + checkout/clone, False otherwise. + """ + checkout = True + prompt = False + if os.path.exists(dest): + checkout = False + if os.path.exists(os.path.join(dest, self.dirname)): + existing_url = self.get_url(dest) + if self.compare_urls(existing_url, url): + logger.debug( + '%s in %s exists, and has correct URL (%s)', + self.repo_name.title(), + display_path(dest), + url, + ) + if not self.check_version(dest, rev_options): + logger.info( + 'Updating %s %s%s', + display_path(dest), + self.repo_name, + rev_display, + ) + self.update(dest, rev_options) + else: + logger.info( + 'Skipping because already up-to-date.') + else: + logger.warning( + '%s %s in %s exists with URL %s', + self.name, + self.repo_name, + display_path(dest), + existing_url, + ) + prompt = ('(s)witch, (i)gnore, (w)ipe, (b)ackup ', + ('s', 'i', 'w', 'b')) + else: + logger.warning( + 'Directory %s already exists, and is not a %s %s.', + dest, + self.name, + self.repo_name, + ) + prompt = ('(i)gnore, (w)ipe, (b)ackup ', ('i', 'w', 'b')) + if prompt: + logger.warning( + 'The plan is to install the %s repository %s', + self.name, + url, + ) + response = ask_path_exists('What to do? %s' % prompt[0], + prompt[1]) + + if response == 's': + logger.info( + 'Switching %s %s to %s%s', + self.repo_name, + display_path(dest), + url, + rev_display, + ) + self.switch(dest, url, rev_options) + elif response == 'i': + # do nothing + pass + elif response == 'w': + logger.warning('Deleting %s', display_path(dest)) + rmtree(dest) + checkout = True + elif response == 'b': + dest_dir = backup_dir(dest) + logger.warning( + 'Backing up %s to %s', display_path(dest), dest_dir, + ) + shutil.move(dest, dest_dir) + checkout = True + elif response == 'a': + sys.exit(-1) + return checkout + + def unpack(self, location): + """ + Clean up current location and download the url repository + (and vcs infos) into location + """ + if os.path.exists(location): + rmtree(location) + self.obtain(location) + + def get_src_requirement(self, dist, location): + """ + Return a string representing the requirement needed to + redownload the files currently present in location, something + like: + {repository_url}@{revision}#egg={project_name}-{version_identifier} + """ + raise NotImplementedError + + def get_url(self, location): + """ + Return the url used at location + Used in get_info or check_destination + """ + raise NotImplementedError + + def get_revision(self, location): + """ + Return the current revision of the files at location + Used in get_info + """ + raise NotImplementedError + + def run_command(self, cmd, show_stdout=True, cwd=None, + on_returncode='raise', + command_desc=None, + extra_environ=None, spinner=None): + """ + Run a VCS subcommand + This is simply a wrapper around call_subprocess that adds the VCS + command name, and checks that the VCS is available + """ + cmd = [self.name] + cmd + try: + return call_subprocess(cmd, show_stdout, cwd, + on_returncode, + command_desc, extra_environ, + spinner) + except OSError as e: + # errno.ENOENT = no such file or directory + # In other words, the VCS executable isn't available + if e.errno == errno.ENOENT: + raise BadCommand('Cannot find command %r' % self.name) + else: + raise # re-raise exception if a different error occurred + + @classmethod + def controls_location(cls, location): + """ + Check if a location is controlled by the vcs. + It is meant to be overridden to implement smarter detection + mechanisms for specific vcs. + """ + logger.debug('Checking in %s for %s (%s)...', + location, cls.dirname, cls.name) + path = os.path.join(location, cls.dirname) + return os.path.exists(path) + + +def get_src_requirement(dist, location): + version_control = vcs.get_backend_from_location(location) + if version_control: + try: + return version_control().get_src_requirement(dist, + location) + except BadCommand: + logger.warning( + 'cannot determine version of editable source in %s ' + '(%s command not found in path)', + location, + version_control.name, + ) + return dist.as_requirement() + logger.warning( + 'cannot determine version of editable source in %s (is not SVN ' + 'checkout, Git clone, Mercurial clone or Bazaar branch)', + location, + ) + return dist.as_requirement() diff --git a/week-0/day-3/venv/lib/python3.6/site-packages/pip/vcs/__pycache__/__init__.cpython-36.pyc b/week-0/day-3/venv/lib/python3.6/site-packages/pip/vcs/__pycache__/__init__.cpython-36.pyc new file mode 100644 index 0000000000000000000000000000000000000000..71c4298efbea41a2134c2167c22fe6d28b84b5ee GIT binary patch literal 11102 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 bFl?}e|BV{p{Uy^bRZB~6TcxEx(LViOnziN+ literal 0 HcmV?d00001 diff --git a/week-0/day-3/venv/lib/python3.6/site-packages/pip/vcs/__pycache__/bazaar.cpython-36.pyc b/week-0/day-3/venv/lib/python3.6/site-packages/pip/vcs/__pycache__/bazaar.cpython-36.pyc new file mode 100644 index 0000000000000000000000000000000000000000..1f5f9ef4adb06a748d47119fdd64cb23715a900b GIT binary patch literal 3655 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 aVwDYTlwjfKItXhm-f}k3Hr$%K5&j=3-EGkT literal 0 HcmV?d00001 diff --git a/week-0/day-3/venv/lib/python3.6/site-packages/pip/vcs/__pycache__/git.cpython-36.pyc b/week-0/day-3/venv/lib/python3.6/site-packages/pip/vcs/__pycache__/git.cpython-36.pyc new file mode 100644 index 0000000000000000000000000000000000000000..4eab32864da6267c75aec4ffe129ffdbb3266e53 GIT binary patch literal 8795 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 literal 0 HcmV?d00001 diff --git a/week-0/day-3/venv/lib/python3.6/site-packages/pip/vcs/__pycache__/mercurial.cpython-36.pyc b/week-0/day-3/venv/lib/python3.6/site-packages/pip/vcs/__pycache__/mercurial.cpython-36.pyc new file mode 100644 index 0000000000000000000000000000000000000000..f11d671c61914805ccc39a8f883866a77b8de655 GIT binary patch literal 3568 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 N#iYx+ZpZCE{y$L{bi4on literal 0 HcmV?d00001 diff --git a/week-0/day-3/venv/lib/python3.6/site-packages/pip/vcs/__pycache__/subversion.cpython-36.pyc b/week-0/day-3/venv/lib/python3.6/site-packages/pip/vcs/__pycache__/subversion.cpython-36.pyc new file mode 100644 index 0000000000000000000000000000000000000000..e45f5875eb90d6b7925f92082bdae4e3825c146b GIT binary patch literal 7107 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 RgT@=$6}$dp>j(a&{{{u^(YOEr literal 0 HcmV?d00001 diff --git a/week-0/day-3/venv/lib/python3.6/site-packages/pip/vcs/bazaar.py b/week-0/day-3/venv/lib/python3.6/site-packages/pip/vcs/bazaar.py new file mode 100644 index 00000000..0f095841 --- /dev/null +++ b/week-0/day-3/venv/lib/python3.6/site-packages/pip/vcs/bazaar.py @@ -0,0 +1,116 @@ +from __future__ import absolute_import + +import logging +import os +import tempfile + +# TODO: Get this into six.moves.urllib.parse +try: + from urllib import parse as urllib_parse +except ImportError: + import urlparse as urllib_parse + +from pip.utils import rmtree, display_path +from pip.vcs import vcs, VersionControl +from pip.download import path_to_url + + +logger = logging.getLogger(__name__) + + +class Bazaar(VersionControl): + name = 'bzr' + dirname = '.bzr' + repo_name = 'branch' + schemes = ( + 'bzr', 'bzr+http', 'bzr+https', 'bzr+ssh', 'bzr+sftp', 'bzr+ftp', + 'bzr+lp', + ) + + def __init__(self, url=None, *args, **kwargs): + super(Bazaar, self).__init__(url, *args, **kwargs) + # Python >= 2.7.4, 3.3 doesn't have uses_fragment or non_hierarchical + # Register lp but do not expose as a scheme to support bzr+lp. + if getattr(urllib_parse, 'uses_fragment', None): + urllib_parse.uses_fragment.extend(['lp']) + urllib_parse.non_hierarchical.extend(['lp']) + + def export(self, location): + """ + Export the Bazaar repository at the url to the destination location + """ + temp_dir = tempfile.mkdtemp('-export', 'pip-') + self.unpack(temp_dir) + if os.path.exists(location): + # Remove the location to make sure Bazaar can export it correctly + rmtree(location) + try: + self.run_command(['export', location], cwd=temp_dir, + show_stdout=False) + finally: + rmtree(temp_dir) + + def switch(self, dest, url, rev_options): + self.run_command(['switch', url], cwd=dest) + + def update(self, dest, rev_options): + self.run_command(['pull', '-q'] + rev_options, cwd=dest) + + def obtain(self, dest): + url, rev = self.get_url_rev() + if rev: + rev_options = ['-r', rev] + rev_display = ' (to revision %s)' % rev + else: + rev_options = [] + rev_display = '' + if self.check_destination(dest, url, rev_options, rev_display): + logger.info( + 'Checking out %s%s to %s', + url, + rev_display, + display_path(dest), + ) + self.run_command(['branch', '-q'] + rev_options + [url, dest]) + + def get_url_rev(self): + # hotfix the URL scheme after removing bzr+ from bzr+ssh:// readd it + url, rev = super(Bazaar, self).get_url_rev() + if url.startswith('ssh://'): + url = 'bzr+' + url + return url, rev + + def get_url(self, location): + urls = self.run_command(['info'], show_stdout=False, cwd=location) + for line in urls.splitlines(): + line = line.strip() + for x in ('checkout of branch: ', + 'parent branch: '): + if line.startswith(x): + repo = line.split(x)[1] + if self._is_local_repository(repo): + return path_to_url(repo) + return repo + return None + + def get_revision(self, location): + revision = self.run_command( + ['revno'], show_stdout=False, cwd=location) + return revision.splitlines()[-1] + + def get_src_requirement(self, dist, location): + repo = self.get_url(location) + if not repo: + return None + if not repo.lower().startswith('bzr:'): + repo = 'bzr+' + repo + egg_project_name = dist.egg_name().split('-', 1)[0] + current_rev = self.get_revision(location) + return '%s@%s#egg=%s' % (repo, current_rev, egg_project_name) + + def check_version(self, dest, rev_options): + """Always assume the versions don't match""" + return False + + +vcs.register(Bazaar) diff --git a/week-0/day-3/venv/lib/python3.6/site-packages/pip/vcs/git.py b/week-0/day-3/venv/lib/python3.6/site-packages/pip/vcs/git.py new file mode 100644 index 00000000..2187dd84 --- /dev/null +++ b/week-0/day-3/venv/lib/python3.6/site-packages/pip/vcs/git.py @@ -0,0 +1,300 @@ +from __future__ import absolute_import + +import logging +import tempfile +import os.path + +from pip.compat import samefile +from pip.exceptions import BadCommand +from pip._vendor.six.moves.urllib import parse as urllib_parse +from pip._vendor.six.moves.urllib import request as urllib_request +from pip._vendor.packaging.version import parse as parse_version + +from pip.utils import display_path, rmtree +from pip.vcs import vcs, VersionControl + + +urlsplit = urllib_parse.urlsplit +urlunsplit = urllib_parse.urlunsplit + + +logger = logging.getLogger(__name__) + + +class Git(VersionControl): + name = 'git' + dirname = '.git' + repo_name = 'clone' + schemes = ( + 'git', 'git+http', 'git+https', 'git+ssh', 'git+git', 'git+file', + ) + + def __init__(self, url=None, *args, **kwargs): + + # Works around an apparent Git bug + # (see http://article.gmane.org/gmane.comp.version-control.git/146500) + if url: + scheme, netloc, path, query, fragment = urlsplit(url) + if scheme.endswith('file'): + initial_slashes = path[:-len(path.lstrip('/'))] + newpath = ( + initial_slashes + + urllib_request.url2pathname(path) + .replace('\\', '/').lstrip('/') + ) + url = urlunsplit((scheme, netloc, newpath, query, fragment)) + after_plus = scheme.find('+') + 1 + url = scheme[:after_plus] + urlunsplit( + (scheme[after_plus:], netloc, newpath, query, fragment), + ) + + super(Git, self).__init__(url, *args, **kwargs) + + def get_git_version(self): + VERSION_PFX = 'git version ' + version = self.run_command(['version'], show_stdout=False) + if version.startswith(VERSION_PFX): + version = version[len(VERSION_PFX):] + else: + version = '' + # get first 3 positions of the git version becasue + # on windows it is x.y.z.windows.t, and this parses as + # LegacyVersion which always smaller than a Version. + version = '.'.join(version.split('.')[:3]) + return parse_version(version) + + def export(self, location): + """Export the Git repository at the url to the destination location""" + temp_dir = tempfile.mkdtemp('-export', 'pip-') + self.unpack(temp_dir) + try: + if not location.endswith('/'): + location = location + '/' + self.run_command( + ['checkout-index', '-a', '-f', '--prefix', location], + show_stdout=False, cwd=temp_dir) + finally: + rmtree(temp_dir) + + def check_rev_options(self, rev, dest, rev_options): + """Check the revision options before checkout to compensate that tags + and branches may need origin/ as a prefix. + Returns the SHA1 of the branch or tag if found. + """ + revisions = self.get_short_refs(dest) + + origin_rev = 'origin/%s' % rev + if origin_rev in revisions: + # remote branch + return [revisions[origin_rev]] + elif rev in revisions: + # a local tag or branch name + return [revisions[rev]] + else: + logger.warning( + "Could not find a tag or branch '%s', assuming commit.", rev, + ) + return rev_options + + def check_version(self, dest, rev_options): + """ + Compare the current sha to the ref. ref may be a branch or tag name, + but current rev will always point to a sha. This means that a branch + or tag will never compare as True. So this ultimately only matches + against exact shas. + """ + return self.get_revision(dest).startswith(rev_options[0]) + + def switch(self, dest, url, rev_options): + self.run_command(['config', 'remote.origin.url', url], cwd=dest) + self.run_command(['checkout', '-q'] + rev_options, cwd=dest) + + self.update_submodules(dest) + + def update(self, dest, rev_options): + # First fetch changes from the default remote + if self.get_git_version() >= parse_version('1.9.0'): + # fetch tags in addition to everything else + self.run_command(['fetch', '-q', '--tags'], cwd=dest) + else: + self.run_command(['fetch', '-q'], cwd=dest) + # Then reset to wanted revision (maybe even origin/master) + if rev_options: + rev_options = self.check_rev_options( + rev_options[0], dest, rev_options, + ) + self.run_command(['reset', '--hard', '-q'] + rev_options, cwd=dest) + #: update submodules + self.update_submodules(dest) + + def obtain(self, dest): + url, rev = self.get_url_rev() + if rev: + rev_options = [rev] + rev_display = ' (to %s)' % rev + else: + rev_options = ['origin/master'] + rev_display = '' + if self.check_destination(dest, url, rev_options, rev_display): + logger.info( + 'Cloning %s%s to %s', url, rev_display, display_path(dest), + ) + self.run_command(['clone', '-q', url, dest]) + + if rev: + rev_options = self.check_rev_options(rev, dest, rev_options) + # Only do a checkout if rev_options differs from HEAD + if not self.check_version(dest, rev_options): + self.run_command( + ['checkout', '-q'] + rev_options, + cwd=dest, + ) + #: repo may contain submodules + self.update_submodules(dest) + + def get_url(self, location): + """Return URL of the first remote encountered.""" + remotes = self.run_command( + ['config', '--get-regexp', 'remote\..*\.url'], + show_stdout=False, cwd=location) + remotes = remotes.splitlines() + found_remote = remotes[0] + for remote in remotes: + if remote.startswith('remote.origin.url '): + found_remote = remote + break + url = found_remote.split(' ')[1] + return url.strip() + + def get_revision(self, location): + current_rev = self.run_command( + ['rev-parse', 'HEAD'], show_stdout=False, cwd=location) + return current_rev.strip() + + def get_full_refs(self, location): + """Yields tuples of (commit, ref) for branches and tags""" + output = self.run_command(['show-ref'], + show_stdout=False, cwd=location) + for line in output.strip().splitlines(): + commit, ref = line.split(' ', 1) + yield commit.strip(), ref.strip() + + def is_ref_remote(self, ref): + return ref.startswith('refs/remotes/') + + def is_ref_branch(self, ref): + return ref.startswith('refs/heads/') + + def is_ref_tag(self, ref): + return ref.startswith('refs/tags/') + + def is_ref_commit(self, ref): + """A ref is a commit sha if it is not anything else""" + return not any(( + self.is_ref_remote(ref), + self.is_ref_branch(ref), + self.is_ref_tag(ref), + )) + + # Should deprecate `get_refs` since it's ambiguous + def get_refs(self, location): + return self.get_short_refs(location) + + def get_short_refs(self, location): + """Return map of named refs (branches or tags) to commit hashes.""" + rv = {} + for commit, ref in self.get_full_refs(location): + ref_name = None + if self.is_ref_remote(ref): + ref_name = ref[len('refs/remotes/'):] + elif self.is_ref_branch(ref): + ref_name = ref[len('refs/heads/'):] + elif self.is_ref_tag(ref): + ref_name = ref[len('refs/tags/'):] + if ref_name is not None: + rv[ref_name] = commit + return rv + + def _get_subdirectory(self, location): + """Return the relative path of setup.py to the git repo root.""" + # find the repo root + git_dir = self.run_command(['rev-parse', '--git-dir'], + show_stdout=False, cwd=location).strip() + if not os.path.isabs(git_dir): + git_dir = os.path.join(location, git_dir) + root_dir = os.path.join(git_dir, '..') + # find setup.py + orig_location = location + while not os.path.exists(os.path.join(location, 'setup.py')): + last_location = location + location = os.path.dirname(location) + if location == last_location: + # We've traversed up to the root of the filesystem without + # finding setup.py + logger.warning( + "Could not find setup.py for directory %s (tried all " + "parent directories)", + orig_location, + ) + return None + # relative path of setup.py to repo root + if samefile(root_dir, location): + return None + return os.path.relpath(location, root_dir) + + def get_src_requirement(self, dist, location): + repo = self.get_url(location) + if not repo.lower().startswith('git:'): + repo = 'git+' + repo + egg_project_name = dist.egg_name().split('-', 1)[0] + if not repo: + return None + current_rev = self.get_revision(location) + req = '%s@%s#egg=%s' % (repo, current_rev, egg_project_name) + subdirectory = self._get_subdirectory(location) + if subdirectory: + req += '&subdirectory=' + subdirectory + return req + + def get_url_rev(self): + """ + Prefixes stub URLs like 'user@hostname:user/repo.git' with 'ssh://'. + That's required because although they use SSH they sometimes doesn't + work with a ssh:// scheme (e.g. Github). But we need a scheme for + parsing. Hence we remove it again afterwards and return it as a stub. + """ + if '://' not in self.url: + assert 'file:' not in self.url + self.url = self.url.replace('git+', 'git+ssh://') + url, rev = super(Git, self).get_url_rev() + url = url.replace('ssh://', '') + else: + url, rev = super(Git, self).get_url_rev() + + return url, rev + + def update_submodules(self, location): + if not os.path.exists(os.path.join(location, '.gitmodules')): + return + self.run_command( + ['submodule', 'update', '--init', '--recursive', '-q'], + cwd=location, + ) + + @classmethod + def controls_location(cls, location): + if super(Git, cls).controls_location(location): + return True + try: + r = cls().run_command(['rev-parse'], + cwd=location, + show_stdout=False, + on_returncode='ignore') + return not r + except BadCommand: + logger.debug("could not determine if %s is under git control " + "because git is not available", location) + return False + + +vcs.register(Git) diff --git a/week-0/day-3/venv/lib/python3.6/site-packages/pip/vcs/mercurial.py b/week-0/day-3/venv/lib/python3.6/site-packages/pip/vcs/mercurial.py new file mode 100644 index 00000000..1aa83b91 --- /dev/null +++ b/week-0/day-3/venv/lib/python3.6/site-packages/pip/vcs/mercurial.py @@ -0,0 +1,103 @@ +from __future__ import absolute_import + +import logging +import os +import tempfile + +from pip.utils import display_path, rmtree +from pip.vcs import vcs, VersionControl +from pip.download import path_to_url +from pip._vendor.six.moves import configparser + + +logger = logging.getLogger(__name__) + + +class Mercurial(VersionControl): + name = 'hg' + dirname = '.hg' + repo_name = 'clone' + schemes = ('hg', 'hg+http', 'hg+https', 'hg+ssh', 'hg+static-http') + + def export(self, location): + """Export the Hg repository at the url to the destination location""" + temp_dir = tempfile.mkdtemp('-export', 'pip-') + self.unpack(temp_dir) + try: + self.run_command( + ['archive', location], show_stdout=False, cwd=temp_dir) + finally: + rmtree(temp_dir) + + def switch(self, dest, url, rev_options): + repo_config = os.path.join(dest, self.dirname, 'hgrc') + config = configparser.SafeConfigParser() + try: + config.read(repo_config) + config.set('paths', 'default', url) + with open(repo_config, 'w') as config_file: + config.write(config_file) + except (OSError, configparser.NoSectionError) as exc: + logger.warning( + 'Could not switch Mercurial repository to %s: %s', url, exc, + ) + else: + self.run_command(['update', '-q'] + rev_options, cwd=dest) + + def update(self, dest, rev_options): + self.run_command(['pull', '-q'], cwd=dest) + self.run_command(['update', '-q'] + rev_options, cwd=dest) + + def obtain(self, dest): + url, rev = self.get_url_rev() + if rev: + rev_options = [rev] + rev_display = ' (to revision %s)' % rev + else: + rev_options = [] + rev_display = '' + if self.check_destination(dest, url, rev_options, rev_display): + logger.info( + 'Cloning hg %s%s to %s', + url, + rev_display, + display_path(dest), + ) + self.run_command(['clone', '--noupdate', '-q', url, dest]) + self.run_command(['update', '-q'] + rev_options, cwd=dest) + + def get_url(self, location): + url = self.run_command( + ['showconfig', 'paths.default'], + show_stdout=False, cwd=location).strip() + if self._is_local_repository(url): + url = path_to_url(url) + return url.strip() + + def get_revision(self, location): + current_revision = self.run_command( + ['parents', '--template={rev}'], + show_stdout=False, cwd=location).strip() + return current_revision + + def get_revision_hash(self, location): + current_rev_hash = self.run_command( + ['parents', '--template={node}'], + show_stdout=False, cwd=location).strip() + return current_rev_hash + + def get_src_requirement(self, dist, location): + repo = self.get_url(location) + if not repo.lower().startswith('hg:'): + repo = 'hg+' + repo + egg_project_name = dist.egg_name().split('-', 1)[0] + if not repo: + return None + current_rev_hash = self.get_revision_hash(location) + return '%s@%s#egg=%s' % (repo, current_rev_hash, egg_project_name) + + def check_version(self, dest, rev_options): + """Always assume the versions don't match""" + return False + +vcs.register(Mercurial) diff --git a/week-0/day-3/venv/lib/python3.6/site-packages/pip/vcs/subversion.py b/week-0/day-3/venv/lib/python3.6/site-packages/pip/vcs/subversion.py new file mode 100644 index 00000000..4b231566 --- /dev/null +++ b/week-0/day-3/venv/lib/python3.6/site-packages/pip/vcs/subversion.py @@ -0,0 +1,269 @@ +from __future__ import absolute_import + +import logging +import os +import re + +from pip._vendor.six.moves.urllib import parse as urllib_parse + +from pip.index import Link +from pip.utils import rmtree, display_path +from pip.utils.logging import indent_log +from pip.vcs import vcs, VersionControl + +_svn_xml_url_re = re.compile('url="([^"]+)"') +_svn_rev_re = re.compile('committed-rev="(\d+)"') +_svn_url_re = re.compile(r'URL: (.+)') +_svn_revision_re = re.compile(r'Revision: (.+)') +_svn_info_xml_rev_re = re.compile(r'\s*revision="(\d+)"') +_svn_info_xml_url_re = re.compile(r'<url>(.*)</url>') + + +logger = logging.getLogger(__name__) + + +class Subversion(VersionControl): + name = 'svn' + dirname = '.svn' + repo_name = 'checkout' + schemes = ('svn', 'svn+ssh', 'svn+http', 'svn+https', 'svn+svn') + + def get_info(self, location): + """Returns (url, revision), where both are strings""" + assert not location.rstrip('/').endswith(self.dirname), \ + 'Bad directory: %s' % location + output = self.run_command( + ['info', location], + show_stdout=False, + extra_environ={'LANG': 'C'}, + ) + match = _svn_url_re.search(output) + if not match: + logger.warning( + 'Cannot determine URL of svn checkout %s', + display_path(location), + ) + logger.debug('Output that cannot be parsed: \n%s', output) + return None, None + url = match.group(1).strip() + match = _svn_revision_re.search(output) + if not match: + logger.warning( + 'Cannot determine revision of svn checkout %s', + display_path(location), + ) + logger.debug('Output that cannot be parsed: \n%s', output) + return url, None + return url, match.group(1) + + def export(self, location): + """Export the svn repository at the url to the destination location""" + url, rev = self.get_url_rev() + rev_options = get_rev_options(url, rev) + url = self.remove_auth_from_url(url) + logger.info('Exporting svn repository %s to %s', url, location) + with indent_log(): + if os.path.exists(location): + # Subversion doesn't like to check out over an existing + # directory --force fixes this, but was only added in svn 1.5 + rmtree(location) + self.run_command( + ['export'] + rev_options + [url, location], + show_stdout=False) + + def switch(self, dest, url, rev_options): + self.run_command(['switch'] + rev_options + [url, dest]) + + def update(self, dest, rev_options): + self.run_command(['update'] + rev_options + [dest]) + + def obtain(self, dest): + url, rev = self.get_url_rev() + rev_options = get_rev_options(url, rev) + url = self.remove_auth_from_url(url) + if rev: + rev_display = ' (to revision %s)' % rev + else: + rev_display = '' + if self.check_destination(dest, url, rev_options, rev_display): + logger.info( + 'Checking out %s%s to %s', + url, + rev_display, + display_path(dest), + ) + self.run_command(['checkout', '-q'] + rev_options + [url, dest]) + + def get_location(self, dist, dependency_links): + for url in dependency_links: + egg_fragment = Link(url).egg_fragment + if not egg_fragment: + continue + if '-' in egg_fragment: + # FIXME: will this work when a package has - in the name? + key = '-'.join(egg_fragment.split('-')[:-1]).lower() + else: + key = egg_fragment + if key == dist.key: + return url.split('#', 1)[0] + return None + + def get_revision(self, location): + """ + Return the maximum revision for all files under a given location + """ + # Note: taken from setuptools.command.egg_info + revision = 0 + + for base, dirs, files in os.walk(location): + if self.dirname not in dirs: + dirs[:] = [] + continue # no sense walking uncontrolled subdirs + dirs.remove(self.dirname) + entries_fn = os.path.join(base, self.dirname, 'entries') + if not os.path.exists(entries_fn): + # FIXME: should we warn? + continue + + dirurl, localrev = self._get_svn_url_rev(base) + + if base == location: + base_url = dirurl + '/' # save the root url + elif not dirurl or not dirurl.startswith(base_url): + dirs[:] = [] + continue # not part of the same svn tree, skip it + revision = max(revision, localrev) + return revision + + def get_url_rev(self): + # hotfix the URL scheme after removing svn+ from svn+ssh:// readd it + url, rev = super(Subversion, self).get_url_rev() + if url.startswith('ssh://'): + url = 'svn+' + url + return url, rev + + def get_url(self, location): + # In cases where the source is in a subdirectory, not alongside + # setup.py we have to look up in the location until we find a real + # setup.py + orig_location = location + while not os.path.exists(os.path.join(location, 'setup.py')): + last_location = location + location = os.path.dirname(location) + if location == last_location: + # We've traversed up to the root of the filesystem without + # finding setup.py + logger.warning( + "Could not find setup.py for directory %s (tried all " + "parent directories)", + orig_location, + ) + return None + + return self._get_svn_url_rev(location)[0] + + def _get_svn_url_rev(self, location): + from pip.exceptions import InstallationError + + entries_path = os.path.join(location, self.dirname, 'entries') + if os.path.exists(entries_path): + with open(entries_path) as f: + data = f.read() + else: # subversion >= 1.7 does not have the 'entries' file + data = '' + + if (data.startswith('8') or + data.startswith('9') or + data.startswith('10')): + data = list(map(str.splitlines, data.split('\n\x0c\n'))) + del data[0][0] # get rid of the '8' + url = data[0][3] + revs = [int(d[9]) for d in data if len(d) > 9 and d[9]] + [0] + elif data.startswith('<?xml'): + match = _svn_xml_url_re.search(data) + if not match: + raise ValueError('Badly formatted data: %r' % data) + url = match.group(1) # get repository URL + revs = [int(m.group(1)) for m in _svn_rev_re.finditer(data)] + [0] + else: + try: + # subversion >= 1.7 + xml = self.run_command( + ['info', '--xml', location], + show_stdout=False, + ) + url = _svn_info_xml_url_re.search(xml).group(1) + revs = [ + int(m.group(1)) for m in _svn_info_xml_rev_re.finditer(xml) + ] + except InstallationError: + url, revs = None, [] + + if revs: + rev = max(revs) + else: + rev = 0 + + return url, rev + + def get_src_requirement(self, dist, location): + repo = self.get_url(location) + if repo is None: + return None + # FIXME: why not project name? + egg_project_name = dist.egg_name().split('-', 1)[0] + rev = self.get_revision(location) + return 'svn+%s@%s#egg=%s' % (repo, rev, egg_project_name) + + def check_version(self, dest, rev_options): + """Always assume the versions don't match""" + return False + + @staticmethod + def remove_auth_from_url(url): + # Return a copy of url with 'username:password@' removed. + # username/pass params are passed to subversion through flags + # and are not recognized in the url. + + # parsed url + purl = urllib_parse.urlsplit(url) + stripped_netloc = \ + purl.netloc.split('@')[-1] + + # stripped url + url_pieces = ( + purl.scheme, stripped_netloc, purl.path, purl.query, purl.fragment + ) + surl = urllib_parse.urlunsplit(url_pieces) + return surl + + +def get_rev_options(url, rev): + if rev: + rev_options = ['-r', rev] + else: + rev_options = [] + + r = urllib_parse.urlsplit(url) + if hasattr(r, 'username'): + # >= Python-2.5 + username, password = r.username, r.password + else: + netloc = r[1] + if '@' in netloc: + auth = netloc.split('@')[0] + if ':' in auth: + username, password = auth.split(':', 1) + else: + username, password = auth, None + else: + username, password = None, None + + if username: + rev_options += ['--username', username] + if password: + rev_options += ['--password', password] + return rev_options + + +vcs.register(Subversion) diff --git a/week-0/day-3/venv/lib/python3.6/site-packages/pip/wheel.py b/week-0/day-3/venv/lib/python3.6/site-packages/pip/wheel.py new file mode 100644 index 00000000..9ac9dffe --- /dev/null +++ b/week-0/day-3/venv/lib/python3.6/site-packages/pip/wheel.py @@ -0,0 +1,853 @@ +""" +Support for installing and building the "wheel" binary package format. +""" +from __future__ import absolute_import + +import compileall +import csv +import errno +import functools +import hashlib +import logging +import os +import os.path +import re +import shutil +import stat +import sys +import tempfile +import warnings + +from base64 import urlsafe_b64encode +from email.parser import Parser + +from pip._vendor.six import StringIO + +import pip +from pip.compat import expanduser +from pip.download import path_to_url, unpack_url +from pip.exceptions import ( + InstallationError, InvalidWheelFilename, UnsupportedWheel) +from pip.locations import distutils_scheme, PIP_DELETE_MARKER_FILENAME +from pip import pep425tags +from pip.utils import ( + call_subprocess, ensure_dir, captured_stdout, rmtree, read_chunks, +) +from pip.utils.ui import open_spinner +from pip.utils.logging import indent_log +from pip.utils.setuptools_build import SETUPTOOLS_SHIM +from pip._vendor.distlib.scripts import ScriptMaker +from pip._vendor import pkg_resources +from pip._vendor.packaging.utils import canonicalize_name +from pip._vendor.six.moves import configparser + + +wheel_ext = '.whl' + +VERSION_COMPATIBLE = (1, 0) + + +logger = logging.getLogger(__name__) + + +class WheelCache(object): + """A cache of wheels for future installs.""" + + def __init__(self, cache_dir, format_control): + """Create a wheel cache. + + :param cache_dir: The root of the cache. + :param format_control: A pip.index.FormatControl object to limit + binaries being read from the cache. + """ + self._cache_dir = expanduser(cache_dir) if cache_dir else None + self._format_control = format_control + + def cached_wheel(self, link, package_name): + return cached_wheel( + self._cache_dir, link, self._format_control, package_name) + + +def _cache_for_link(cache_dir, link): + """ + Return a directory to store cached wheels in for link. + + Because there are M wheels for any one sdist, we provide a directory + to cache them in, and then consult that directory when looking up + cache hits. + + We only insert things into the cache if they have plausible version + numbers, so that we don't contaminate the cache with things that were not + unique. E.g. ./package might have dozens of installs done for it and build + a version of 0.0...and if we built and cached a wheel, we'd end up using + the same wheel even if the source has been edited. + + :param cache_dir: The cache_dir being used by pip. + :param link: The link of the sdist for which this will cache wheels. + """ + + # We want to generate an url to use as our cache key, we don't want to just + # re-use the URL because it might have other items in the fragment and we + # don't care about those. + key_parts = [link.url_without_fragment] + if link.hash_name is not None and link.hash is not None: + key_parts.append("=".join([link.hash_name, link.hash])) + key_url = "#".join(key_parts) + + # Encode our key url with sha224, we'll use this because it has similar + # security properties to sha256, but with a shorter total output (and thus + # less secure). However the differences don't make a lot of difference for + # our use case here. + hashed = hashlib.sha224(key_url.encode()).hexdigest() + + # We want to nest the directories some to prevent having a ton of top level + # directories where we might run out of sub directories on some FS. + parts = [hashed[:2], hashed[2:4], hashed[4:6], hashed[6:]] + + # Inside of the base location for cached wheels, expand our parts and join + # them all together. + return os.path.join(cache_dir, "wheels", *parts) + + +def cached_wheel(cache_dir, link, format_control, package_name): + if not cache_dir: + return link + if not link: + return link + if link.is_wheel: + return link + if not link.is_artifact: + return link + if not package_name: + return link + canonical_name = canonicalize_name(package_name) + formats = pip.index.fmt_ctl_formats(format_control, canonical_name) + if "binary" not in formats: + return link + root = _cache_for_link(cache_dir, link) + try: + wheel_names = os.listdir(root) + except OSError as e: + if e.errno in (errno.ENOENT, errno.ENOTDIR): + return link + raise + candidates = [] + for wheel_name in wheel_names: + try: + wheel = Wheel(wheel_name) + except InvalidWheelFilename: + continue + if not wheel.supported(): + # Built for a different python/arch/etc + continue + candidates.append((wheel.support_index_min(), wheel_name)) + if not candidates: + return link + candidates.sort() + path = os.path.join(root, candidates[0][1]) + return pip.index.Link(path_to_url(path)) + + +def rehash(path, algo='sha256', blocksize=1 << 20): + """Return (hash, length) for path using hashlib.new(algo)""" + h = hashlib.new(algo) + length = 0 + with open(path, 'rb') as f: + for block in read_chunks(f, size=blocksize): + length += len(block) + h.update(block) + digest = 'sha256=' + urlsafe_b64encode( + h.digest() + ).decode('latin1').rstrip('=') + return (digest, length) + + +def open_for_csv(name, mode): + if sys.version_info[0] < 3: + nl = {} + bin = 'b' + else: + nl = {'newline': ''} + bin = '' + return open(name, mode + bin, **nl) + + +def fix_script(path): + """Replace #!python with #!/path/to/python + Return True if file was changed.""" + # XXX RECORD hashes will need to be updated + if os.path.isfile(path): + with open(path, 'rb') as script: + firstline = script.readline() + if not firstline.startswith(b'#!python'): + return False + exename = sys.executable.encode(sys.getfilesystemencoding()) + firstline = b'#!' + exename + os.linesep.encode("ascii") + rest = script.read() + with open(path, 'wb') as script: + script.write(firstline) + script.write(rest) + return True + +dist_info_re = re.compile(r"""^(?P<namever>(?P<name>.+?)(-(?P<ver>\d.+?))?) + \.dist-info$""", re.VERBOSE) + + +def root_is_purelib(name, wheeldir): + """ + Return True if the extracted wheel in wheeldir should go into purelib. + """ + name_folded = name.replace("-", "_") + for item in os.listdir(wheeldir): + match = dist_info_re.match(item) + if match and match.group('name') == name_folded: + with open(os.path.join(wheeldir, item, 'WHEEL')) as wheel: + for line in wheel: + line = line.lower().rstrip() + if line == "root-is-purelib: true": + return True + return False + + +def get_entrypoints(filename): + if not os.path.exists(filename): + return {}, {} + + # This is done because you can pass a string to entry_points wrappers which + # means that they may or may not be valid INI files. The attempt here is to + # strip leading and trailing whitespace in order to make them valid INI + # files. + with open(filename) as fp: + data = StringIO() + for line in fp: + data.write(line.strip()) + data.write("\n") + data.seek(0) + + cp = configparser.RawConfigParser() + cp.optionxform = lambda option: option + cp.readfp(data) + + console = {} + gui = {} + if cp.has_section('console_scripts'): + console = dict(cp.items('console_scripts')) + if cp.has_section('gui_scripts'): + gui = dict(cp.items('gui_scripts')) + return console, gui + + +def move_wheel_files(name, req, wheeldir, user=False, home=None, root=None, + pycompile=True, scheme=None, isolated=False, prefix=None): + """Install a wheel""" + + if not scheme: + scheme = distutils_scheme( + name, user=user, home=home, root=root, isolated=isolated, + prefix=prefix, + ) + + if root_is_purelib(name, wheeldir): + lib_dir = scheme['purelib'] + else: + lib_dir = scheme['platlib'] + + info_dir = [] + data_dirs = [] + source = wheeldir.rstrip(os.path.sep) + os.path.sep + + # Record details of the files moved + # installed = files copied from the wheel to the destination + # changed = files changed while installing (scripts #! line typically) + # generated = files newly generated during the install (script wrappers) + installed = {} + changed = set() + generated = [] + + # Compile all of the pyc files that we're going to be installing + if pycompile: + with captured_stdout() as stdout: + with warnings.catch_warnings(): + warnings.filterwarnings('ignore') + compileall.compile_dir(source, force=True, quiet=True) + logger.debug(stdout.getvalue()) + + def normpath(src, p): + return os.path.relpath(src, p).replace(os.path.sep, '/') + + def record_installed(srcfile, destfile, modified=False): + """Map archive RECORD paths to installation RECORD paths.""" + oldpath = normpath(srcfile, wheeldir) + newpath = normpath(destfile, lib_dir) + installed[oldpath] = newpath + if modified: + changed.add(destfile) + + def clobber(source, dest, is_base, fixer=None, filter=None): + ensure_dir(dest) # common for the 'include' path + + for dir, subdirs, files in os.walk(source): + basedir = dir[len(source):].lstrip(os.path.sep) + destdir = os.path.join(dest, basedir) + if is_base and basedir.split(os.path.sep, 1)[0].endswith('.data'): + continue + for s in subdirs: + destsubdir = os.path.join(dest, basedir, s) + if is_base and basedir == '' and destsubdir.endswith('.data'): + data_dirs.append(s) + continue + elif (is_base and + s.endswith('.dist-info') and + canonicalize_name(s).startswith( + canonicalize_name(req.name))): + assert not info_dir, ('Multiple .dist-info directories: ' + + destsubdir + ', ' + + ', '.join(info_dir)) + info_dir.append(destsubdir) + for f in files: + # Skip unwanted files + if filter and filter(f): + continue + srcfile = os.path.join(dir, f) + destfile = os.path.join(dest, basedir, f) + # directory creation is lazy and after the file filtering above + # to ensure we don't install empty dirs; empty dirs can't be + # uninstalled. + ensure_dir(destdir) + + # We use copyfile (not move, copy, or copy2) to be extra sure + # that we are not moving directories over (copyfile fails for + # directories) as well as to ensure that we are not copying + # over any metadata because we want more control over what + # metadata we actually copy over. + shutil.copyfile(srcfile, destfile) + + # Copy over the metadata for the file, currently this only + # includes the atime and mtime. + st = os.stat(srcfile) + if hasattr(os, "utime"): + os.utime(destfile, (st.st_atime, st.st_mtime)) + + # If our file is executable, then make our destination file + # executable. + if os.access(srcfile, os.X_OK): + st = os.stat(srcfile) + permissions = ( + st.st_mode | stat.S_IXUSR | stat.S_IXGRP | stat.S_IXOTH + ) + os.chmod(destfile, permissions) + + changed = False + if fixer: + changed = fixer(destfile) + record_installed(srcfile, destfile, changed) + + clobber(source, lib_dir, True) + + assert info_dir, "%s .dist-info directory not found" % req + + # Get the defined entry points + ep_file = os.path.join(info_dir[0], 'entry_points.txt') + console, gui = get_entrypoints(ep_file) + + def is_entrypoint_wrapper(name): + # EP, EP.exe and EP-script.py are scripts generated for + # entry point EP by setuptools + if name.lower().endswith('.exe'): + matchname = name[:-4] + elif name.lower().endswith('-script.py'): + matchname = name[:-10] + elif name.lower().endswith(".pya"): + matchname = name[:-4] + else: + matchname = name + # Ignore setuptools-generated scripts + return (matchname in console or matchname in gui) + + for datadir in data_dirs: + fixer = None + filter = None + for subdir in os.listdir(os.path.join(wheeldir, datadir)): + fixer = None + if subdir == 'scripts': + fixer = fix_script + filter = is_entrypoint_wrapper + source = os.path.join(wheeldir, datadir, subdir) + dest = scheme[subdir] + clobber(source, dest, False, fixer=fixer, filter=filter) + + maker = ScriptMaker(None, scheme['scripts']) + + # Ensure old scripts are overwritten. + # See https://github.com/pypa/pip/issues/1800 + maker.clobber = True + + # Ensure we don't generate any variants for scripts because this is almost + # never what somebody wants. + # See https://bitbucket.org/pypa/distlib/issue/35/ + maker.variants = set(('', )) + + # This is required because otherwise distlib creates scripts that are not + # executable. + # See https://bitbucket.org/pypa/distlib/issue/32/ + maker.set_mode = True + + # Simplify the script and fix the fact that the default script swallows + # every single stack trace. + # See https://bitbucket.org/pypa/distlib/issue/34/ + # See https://bitbucket.org/pypa/distlib/issue/33/ + def _get_script_text(entry): + if entry.suffix is None: + raise InstallationError( + "Invalid script entry point: %s for req: %s - A callable " + "suffix is required. Cf https://packaging.python.org/en/" + "latest/distributing.html#console-scripts for more " + "information." % (entry, req) + ) + return maker.script_template % { + "module": entry.prefix, + "import_name": entry.suffix.split(".")[0], + "func": entry.suffix, + } + + maker._get_script_text = _get_script_text + maker.script_template = """# -*- coding: utf-8 -*- +import re +import sys + +from %(module)s import %(import_name)s + +if __name__ == '__main__': + sys.argv[0] = re.sub(r'(-script\.pyw?|\.exe)?$', '', sys.argv[0]) + sys.exit(%(func)s()) +""" + + # Special case pip and setuptools to generate versioned wrappers + # + # The issue is that some projects (specifically, pip and setuptools) use + # code in setup.py to create "versioned" entry points - pip2.7 on Python + # 2.7, pip3.3 on Python 3.3, etc. But these entry points are baked into + # the wheel metadata at build time, and so if the wheel is installed with + # a *different* version of Python the entry points will be wrong. The + # correct fix for this is to enhance the metadata to be able to describe + # such versioned entry points, but that won't happen till Metadata 2.0 is + # available. + # In the meantime, projects using versioned entry points will either have + # incorrect versioned entry points, or they will not be able to distribute + # "universal" wheels (i.e., they will need a wheel per Python version). + # + # Because setuptools and pip are bundled with _ensurepip and virtualenv, + # we need to use universal wheels. So, as a stopgap until Metadata 2.0, we + # override the versioned entry points in the wheel and generate the + # correct ones. This code is purely a short-term measure until Metadata 2.0 + # is available. + # + # To add the level of hack in this section of code, in order to support + # ensurepip this code will look for an ``ENSUREPIP_OPTIONS`` environment + # variable which will control which version scripts get installed. + # + # ENSUREPIP_OPTIONS=altinstall + # - Only pipX.Y and easy_install-X.Y will be generated and installed + # ENSUREPIP_OPTIONS=install + # - pipX.Y, pipX, easy_install-X.Y will be generated and installed. Note + # that this option is technically if ENSUREPIP_OPTIONS is set and is + # not altinstall + # DEFAULT + # - The default behavior is to install pip, pipX, pipX.Y, easy_install + # and easy_install-X.Y. + pip_script = console.pop('pip', None) + if pip_script: + if "ENSUREPIP_OPTIONS" not in os.environ: + spec = 'pip = ' + pip_script + generated.extend(maker.make(spec)) + + if os.environ.get("ENSUREPIP_OPTIONS", "") != "altinstall": + spec = 'pip%s = %s' % (sys.version[:1], pip_script) + generated.extend(maker.make(spec)) + + spec = 'pip%s = %s' % (sys.version[:3], pip_script) + generated.extend(maker.make(spec)) + # Delete any other versioned pip entry points + pip_ep = [k for k in console if re.match(r'pip(\d(\.\d)?)?$', k)] + for k in pip_ep: + del console[k] + easy_install_script = console.pop('easy_install', None) + if easy_install_script: + if "ENSUREPIP_OPTIONS" not in os.environ: + spec = 'easy_install = ' + easy_install_script + generated.extend(maker.make(spec)) + + spec = 'easy_install-%s = %s' % (sys.version[:3], easy_install_script) + generated.extend(maker.make(spec)) + # Delete any other versioned easy_install entry points + easy_install_ep = [ + k for k in console if re.match(r'easy_install(-\d\.\d)?$', k) + ] + for k in easy_install_ep: + del console[k] + + # Generate the console and GUI entry points specified in the wheel + if len(console) > 0: + generated.extend( + maker.make_multiple(['%s = %s' % kv for kv in console.items()]) + ) + if len(gui) > 0: + generated.extend( + maker.make_multiple( + ['%s = %s' % kv for kv in gui.items()], + {'gui': True} + ) + ) + + # Record pip as the installer + installer = os.path.join(info_dir[0], 'INSTALLER') + temp_installer = os.path.join(info_dir[0], 'INSTALLER.pip') + with open(temp_installer, 'wb') as installer_file: + installer_file.write(b'pip\n') + shutil.move(temp_installer, installer) + generated.append(installer) + + # Record details of all files installed + record = os.path.join(info_dir[0], 'RECORD') + temp_record = os.path.join(info_dir[0], 'RECORD.pip') + with open_for_csv(record, 'r') as record_in: + with open_for_csv(temp_record, 'w+') as record_out: + reader = csv.reader(record_in) + writer = csv.writer(record_out) + for row in reader: + row[0] = installed.pop(row[0], row[0]) + if row[0] in changed: + row[1], row[2] = rehash(row[0]) + writer.writerow(row) + for f in generated: + h, l = rehash(f) + writer.writerow((normpath(f, lib_dir), h, l)) + for f in installed: + writer.writerow((installed[f], '', '')) + shutil.move(temp_record, record) + + +def _unique(fn): + @functools.wraps(fn) + def unique(*args, **kw): + seen = set() + for item in fn(*args, **kw): + if item not in seen: + seen.add(item) + yield item + return unique + + +# TODO: this goes somewhere besides the wheel module +@_unique +def uninstallation_paths(dist): + """ + Yield all the uninstallation paths for dist based on RECORD-without-.pyc + + Yield paths to all the files in RECORD. For each .py file in RECORD, add + the .pyc in the same directory. + + UninstallPathSet.add() takes care of the __pycache__ .pyc. + """ + from pip.utils import FakeFile # circular import + r = csv.reader(FakeFile(dist.get_metadata_lines('RECORD'))) + for row in r: + path = os.path.join(dist.location, row[0]) + yield path + if path.endswith('.py'): + dn, fn = os.path.split(path) + base = fn[:-3] + path = os.path.join(dn, base + '.pyc') + yield path + + +def wheel_version(source_dir): + """ + Return the Wheel-Version of an extracted wheel, if possible. + + Otherwise, return False if we couldn't parse / extract it. + """ + try: + dist = [d for d in pkg_resources.find_on_path(None, source_dir)][0] + + wheel_data = dist.get_metadata('WHEEL') + wheel_data = Parser().parsestr(wheel_data) + + version = wheel_data['Wheel-Version'].strip() + version = tuple(map(int, version.split('.'))) + return version + except: + return False + + +def check_compatibility(version, name): + """ + Raises errors or warns if called with an incompatible Wheel-Version. + + Pip should refuse to install a Wheel-Version that's a major series + ahead of what it's compatible with (e.g 2.0 > 1.1); and warn when + installing a version only minor version ahead (e.g 1.2 > 1.1). + + version: a 2-tuple representing a Wheel-Version (Major, Minor) + name: name of wheel or package to raise exception about + + :raises UnsupportedWheel: when an incompatible Wheel-Version is given + """ + if not version: + raise UnsupportedWheel( + "%s is in an unsupported or invalid wheel" % name + ) + if version[0] > VERSION_COMPATIBLE[0]: + raise UnsupportedWheel( + "%s's Wheel-Version (%s) is not compatible with this version " + "of pip" % (name, '.'.join(map(str, version))) + ) + elif version > VERSION_COMPATIBLE: + logger.warning( + 'Installing from a newer Wheel-Version (%s)', + '.'.join(map(str, version)), + ) + + +class Wheel(object): + """A wheel file""" + + # TODO: maybe move the install code into this class + + wheel_file_re = re.compile( + r"""^(?P<namever>(?P<name>.+?)-(?P<ver>\d.*?)) + ((-(?P<build>\d.*?))?-(?P<pyver>.+?)-(?P<abi>.+?)-(?P<plat>.+?) + \.whl|\.dist-info)$""", + re.VERBOSE + ) + + def __init__(self, filename): + """ + :raises InvalidWheelFilename: when the filename is invalid for a wheel + """ + wheel_info = self.wheel_file_re.match(filename) + if not wheel_info: + raise InvalidWheelFilename( + "%s is not a valid wheel filename." % filename + ) + self.filename = filename + self.name = wheel_info.group('name').replace('_', '-') + # we'll assume "_" means "-" due to wheel naming scheme + # (https://github.com/pypa/pip/issues/1150) + self.version = wheel_info.group('ver').replace('_', '-') + self.pyversions = wheel_info.group('pyver').split('.') + self.abis = wheel_info.group('abi').split('.') + self.plats = wheel_info.group('plat').split('.') + + # All the tag combinations from this file + self.file_tags = set( + (x, y, z) for x in self.pyversions + for y in self.abis for z in self.plats + ) + + def support_index_min(self, tags=None): + """ + Return the lowest index that one of the wheel's file_tag combinations + achieves in the supported_tags list e.g. if there are 8 supported tags, + and one of the file tags is first in the list, then return 0. Returns + None is the wheel is not supported. + """ + if tags is None: # for mock + tags = pep425tags.supported_tags + indexes = [tags.index(c) for c in self.file_tags if c in tags] + return min(indexes) if indexes else None + + def supported(self, tags=None): + """Is this wheel supported on this system?""" + if tags is None: # for mock + tags = pep425tags.supported_tags + return bool(set(tags).intersection(self.file_tags)) + + +class WheelBuilder(object): + """Build wheels from a RequirementSet.""" + + def __init__(self, requirement_set, finder, build_options=None, + global_options=None): + self.requirement_set = requirement_set + self.finder = finder + self._cache_root = requirement_set._wheel_cache._cache_dir + self._wheel_dir = requirement_set.wheel_download_dir + self.build_options = build_options or [] + self.global_options = global_options or [] + + def _build_one(self, req, output_dir, python_tag=None): + """Build one wheel. + + :return: The filename of the built wheel, or None if the build failed. + """ + tempd = tempfile.mkdtemp('pip-wheel-') + try: + if self.__build_one(req, tempd, python_tag=python_tag): + try: + wheel_name = os.listdir(tempd)[0] + wheel_path = os.path.join(output_dir, wheel_name) + shutil.move(os.path.join(tempd, wheel_name), wheel_path) + logger.info('Stored in directory: %s', output_dir) + return wheel_path + except: + pass + # Ignore return, we can't do anything else useful. + self._clean_one(req) + return None + finally: + rmtree(tempd) + + def _base_setup_args(self, req): + return [ + sys.executable, "-u", '-c', + SETUPTOOLS_SHIM % req.setup_py + ] + list(self.global_options) + + def __build_one(self, req, tempd, python_tag=None): + base_args = self._base_setup_args(req) + + spin_message = 'Running setup.py bdist_wheel for %s' % (req.name,) + with open_spinner(spin_message) as spinner: + logger.debug('Destination directory: %s', tempd) + wheel_args = base_args + ['bdist_wheel', '-d', tempd] \ + + self.build_options + + if python_tag is not None: + wheel_args += ["--python-tag", python_tag] + + try: + call_subprocess(wheel_args, cwd=req.setup_py_dir, + show_stdout=False, spinner=spinner) + return True + except: + spinner.finish("error") + logger.error('Failed building wheel for %s', req.name) + return False + + def _clean_one(self, req): + base_args = self._base_setup_args(req) + + logger.info('Running setup.py clean for %s', req.name) + clean_args = base_args + ['clean', '--all'] + try: + call_subprocess(clean_args, cwd=req.source_dir, show_stdout=False) + return True + except: + logger.error('Failed cleaning build dir for %s', req.name) + return False + + def build(self, autobuilding=False): + """Build wheels. + + :param unpack: If True, replace the sdist we built from with the + newly built wheel, in preparation for installation. + :return: True if all the wheels built correctly. + """ + assert self._wheel_dir or (autobuilding and self._cache_root) + # unpack sdists and constructs req set + self.requirement_set.prepare_files(self.finder) + + reqset = self.requirement_set.requirements.values() + + buildset = [] + for req in reqset: + if req.constraint: + continue + if req.is_wheel: + if not autobuilding: + logger.info( + 'Skipping %s, due to already being wheel.', req.name) + elif autobuilding and req.editable: + pass + elif autobuilding and req.link and not req.link.is_artifact: + pass + elif autobuilding and not req.source_dir: + pass + else: + if autobuilding: + link = req.link + base, ext = link.splitext() + if pip.index.egg_info_matches(base, None, link) is None: + # Doesn't look like a package - don't autobuild a wheel + # because we'll have no way to lookup the result sanely + continue + if "binary" not in pip.index.fmt_ctl_formats( + self.finder.format_control, + canonicalize_name(req.name)): + logger.info( + "Skipping bdist_wheel for %s, due to binaries " + "being disabled for it.", req.name) + continue + buildset.append(req) + + if not buildset: + return True + + # Build the wheels. + logger.info( + 'Building wheels for collected packages: %s', + ', '.join([req.name for req in buildset]), + ) + with indent_log(): + build_success, build_failure = [], [] + for req in buildset: + python_tag = None + if autobuilding: + python_tag = pep425tags.implementation_tag + output_dir = _cache_for_link(self._cache_root, req.link) + try: + ensure_dir(output_dir) + except OSError as e: + logger.warning("Building wheel for %s failed: %s", + req.name, e) + build_failure.append(req) + continue + else: + output_dir = self._wheel_dir + wheel_file = self._build_one( + req, output_dir, + python_tag=python_tag, + ) + if wheel_file: + build_success.append(req) + if autobuilding: + # XXX: This is mildly duplicative with prepare_files, + # but not close enough to pull out to a single common + # method. + # The code below assumes temporary source dirs - + # prevent it doing bad things. + if req.source_dir and not os.path.exists(os.path.join( + req.source_dir, PIP_DELETE_MARKER_FILENAME)): + raise AssertionError( + "bad source dir - missing marker") + # Delete the source we built the wheel from + req.remove_temporary_source() + # set the build directory again - name is known from + # the work prepare_files did. + req.source_dir = req.build_location( + self.requirement_set.build_dir) + # Update the link for this. + req.link = pip.index.Link( + path_to_url(wheel_file)) + assert req.link.is_wheel + # extract the wheel into the dir + unpack_url( + req.link, req.source_dir, None, False, + session=self.requirement_set.session) + else: + build_failure.append(req) + + # notify success/failure + if build_success: + logger.info( + 'Successfully built %s', + ' '.join([req.name for req in build_success]), + ) + if build_failure: + logger.info( + 'Failed to build %s', + ' '.join([req.name for req in build_failure]), + ) + # Return True if all builds were successful + return len(build_failure) == 0 diff --git a/week-0/day-3/venv/lib/python3.6/site-packages/pkg_resources-0.0.0.dist-info/DESCRIPTION.rst b/week-0/day-3/venv/lib/python3.6/site-packages/pkg_resources-0.0.0.dist-info/DESCRIPTION.rst new file mode 100644 index 00000000..e1187231 --- /dev/null +++ b/week-0/day-3/venv/lib/python3.6/site-packages/pkg_resources-0.0.0.dist-info/DESCRIPTION.rst @@ -0,0 +1,3 @@ +UNKNOWN + + diff --git a/week-0/day-3/venv/lib/python3.6/site-packages/pkg_resources-0.0.0.dist-info/INSTALLER b/week-0/day-3/venv/lib/python3.6/site-packages/pkg_resources-0.0.0.dist-info/INSTALLER new file mode 100644 index 00000000..a1b589e3 --- /dev/null +++ b/week-0/day-3/venv/lib/python3.6/site-packages/pkg_resources-0.0.0.dist-info/INSTALLER @@ -0,0 +1 @@ +pip diff --git a/week-0/day-3/venv/lib/python3.6/site-packages/pkg_resources-0.0.0.dist-info/METADATA b/week-0/day-3/venv/lib/python3.6/site-packages/pkg_resources-0.0.0.dist-info/METADATA new file mode 100644 index 00000000..7a504873 --- /dev/null +++ b/week-0/day-3/venv/lib/python3.6/site-packages/pkg_resources-0.0.0.dist-info/METADATA @@ -0,0 +1,13 @@ +Metadata-Version: 2.0 +Name: pkg_resources +Version: 0.0.0 +Summary: UNKNOWN +Home-page: UNKNOWN +Author: UNKNOWN +Author-email: UNKNOWN +License: UNKNOWN +Platform: UNKNOWN + +UNKNOWN + + diff --git a/week-0/day-3/venv/lib/python3.6/site-packages/pkg_resources-0.0.0.dist-info/RECORD b/week-0/day-3/venv/lib/python3.6/site-packages/pkg_resources-0.0.0.dist-info/RECORD new file mode 100644 index 00000000..8dad74db --- /dev/null +++ b/week-0/day-3/venv/lib/python3.6/site-packages/pkg_resources-0.0.0.dist-info/RECORD @@ -0,0 +1,38 @@ +pkg_resources/__init__.py,sha256=YQ4_WQnPztMsUy1yuvp7ZRBPK9IhOyhgosLpvkFso1I,103551 +pkg_resources/py31compat.py,sha256=-ysVqoxLetAnL94uM0kHkomKQTC1JZLN2ZUjqUhMeKE,600 +pkg_resources/_vendor/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0 +pkg_resources/_vendor/appdirs.py,sha256=mExjXejqnz0UifNzjccc-yJ8JS0TfAW0gXuikOdDQLU,22376 +pkg_resources/_vendor/pyparsing.py,sha256=LTlkTtpPBJ0ypOyi---Es1IvmxfI_vh28VJEh27qY8I,229871 +pkg_resources/_vendor/six.py,sha256=A6hdJZVjI3t_geebZ9BzUvwRrIXo0lfwzQlM2LcKyas,30098 +pkg_resources/_vendor/packaging/__about__.py,sha256=zkcCPTN_6TcLW0Nrlg0176-R1QQ_WVPTm8sz1R4-HjM,720 +pkg_resources/_vendor/packaging/__init__.py,sha256=_vNac5TrzwsrzbOFIbF-5cHqc_Y2aPT2D7zrIR06BOo,513 +pkg_resources/_vendor/packaging/_compat.py,sha256=Vi_A0rAQeHbU-a9X0tt1yQm9RqkgQbDSxzRw8WlU9kA,860 +pkg_resources/_vendor/packaging/_structures.py,sha256=RImECJ4c_wTlaTYYwZYLHEiebDMaAJmK1oPARhw1T5o,1416 +pkg_resources/_vendor/packaging/markers.py,sha256=uEcBBtGvzqltgnArqb9c4RrcInXezDLos14zbBHhWJo,8248 +pkg_resources/_vendor/packaging/requirements.py,sha256=SikL2UynbsT0qtY9ltqngndha_sfo0w6XGFhAhoSoaQ,4355 +pkg_resources/_vendor/packaging/specifiers.py,sha256=SAMRerzO3fK2IkFZCaZkuwZaL_EGqHNOz4pni4vhnN0,28025 +pkg_resources/_vendor/packaging/utils.py,sha256=3m6WvPm6NNxE8rkTGmn0r75B_GZSGg7ikafxHsBN1WA,421 +pkg_resources/_vendor/packaging/version.py,sha256=OwGnxYfr2ghNzYx59qWIBkrK3SnB6n-Zfd1XaLpnnM0,11556 +pkg_resources/extern/__init__.py,sha256=JUtlHHvlxHSNuB4pWqNjcx7n6kG-fwXg7qmJ2zNJlIY,2487 +pkg_resources-0.0.0.dist-info/DESCRIPTION.rst,sha256=OCTuuN6LcWulhHS3d5rfjdsQtW22n7HENFRh6jC6ego,10 +pkg_resources-0.0.0.dist-info/METADATA,sha256=FOYDX6cmnDUkWo-yhqWQYtjKIMZR2IW2G1GFZhA6gUQ,177 +pkg_resources-0.0.0.dist-info/RECORD,, +pkg_resources-0.0.0.dist-info/WHEEL,sha256=kdsN-5OJAZIiHN-iO4Rhl82KyS0bDWf4uBwMbkNafr8,110 +pkg_resources-0.0.0.dist-info/metadata.json,sha256=jbGQ09fxsrPQMhbeLboAEDZERlOExjHIGENdQdPS6RU,221 +pkg_resources-0.0.0.dist-info/INSTALLER,sha256=zuuue4knoyJ-UwPPXg8fezS7VCrXJQrAP7zeNuwvFQg,4 +pkg_resources/_vendor/packaging/__pycache__/utils.cpython-36.pyc,, +pkg_resources/_vendor/packaging/__pycache__/_structures.cpython-36.pyc,, +pkg_resources/_vendor/packaging/__pycache__/version.cpython-36.pyc,, +pkg_resources/_vendor/packaging/__pycache__/markers.cpython-36.pyc,, +pkg_resources/_vendor/packaging/__pycache__/_compat.cpython-36.pyc,, +pkg_resources/_vendor/packaging/__pycache__/specifiers.cpython-36.pyc,, +pkg_resources/_vendor/packaging/__pycache__/__about__.cpython-36.pyc,, +pkg_resources/_vendor/packaging/__pycache__/requirements.cpython-36.pyc,, +pkg_resources/_vendor/packaging/__pycache__/__init__.cpython-36.pyc,, +pkg_resources/_vendor/__pycache__/six.cpython-36.pyc,, +pkg_resources/_vendor/__pycache__/pyparsing.cpython-36.pyc,, +pkg_resources/_vendor/__pycache__/appdirs.cpython-36.pyc,, +pkg_resources/_vendor/__pycache__/__init__.cpython-36.pyc,, +pkg_resources/__pycache__/py31compat.cpython-36.pyc,, +pkg_resources/__pycache__/__init__.cpython-36.pyc,, +pkg_resources/extern/__pycache__/__init__.cpython-36.pyc,, diff --git a/week-0/day-3/venv/lib/python3.6/site-packages/pkg_resources-0.0.0.dist-info/WHEEL b/week-0/day-3/venv/lib/python3.6/site-packages/pkg_resources-0.0.0.dist-info/WHEEL new file mode 100644 index 00000000..7332a419 --- /dev/null +++ b/week-0/day-3/venv/lib/python3.6/site-packages/pkg_resources-0.0.0.dist-info/WHEEL @@ -0,0 +1,6 @@ +Wheel-Version: 1.0 +Generator: bdist_wheel (0.30.0) +Root-Is-Purelib: true +Tag: py2-none-any +Tag: py3-none-any + diff --git a/week-0/day-3/venv/lib/python3.6/site-packages/pkg_resources-0.0.0.dist-info/metadata.json b/week-0/day-3/venv/lib/python3.6/site-packages/pkg_resources-0.0.0.dist-info/metadata.json new file mode 100644 index 00000000..1069edb5 --- /dev/null +++ b/week-0/day-3/venv/lib/python3.6/site-packages/pkg_resources-0.0.0.dist-info/metadata.json @@ -0,0 +1 @@ +{"extensions": {"python.details": {"document_names": {"description": "DESCRIPTION.rst"}}}, "generator": "bdist_wheel (0.30.0)", "metadata_version": "2.0", "name": "pkg_resources", "summary": "UNKNOWN", "version": "0.0.0"} \ No newline at end of file diff --git a/week-0/day-3/venv/lib/python3.6/site-packages/pkg_resources/__init__.py b/week-0/day-3/venv/lib/python3.6/site-packages/pkg_resources/__init__.py new file mode 100644 index 00000000..8d95bd29 --- /dev/null +++ b/week-0/day-3/venv/lib/python3.6/site-packages/pkg_resources/__init__.py @@ -0,0 +1,3125 @@ +# coding: utf-8 +""" +Package resource API +-------------------- + +A resource is a logical file contained within a package, or a logical +subdirectory thereof. The package resource API expects resource names +to have their path parts separated with ``/``, *not* whatever the local +path separator is. Do not use os.path operations to manipulate resource +names being passed into the API. + +The package resource API is designed to work with normal filesystem packages, +.egg files, and unpacked .egg files. It can also work in a limited way with +.zip files and with custom PEP 302 loaders that support the ``get_data()`` +method. +""" + +from __future__ import absolute_import + +import sys +import os +import io +import time +import re +import types +import zipfile +import zipimport +import warnings +import stat +import functools +import pkgutil +import operator +import platform +import collections +import plistlib +import email.parser +import errno +import tempfile +import textwrap +import itertools +import inspect +from pkgutil import get_importer + +try: + import _imp +except ImportError: + # Python 3.2 compatibility + import imp as _imp + +from pkg_resources.extern import six +from pkg_resources.extern.six.moves import urllib, map, filter + +# capture these to bypass sandboxing +from os import utime +try: + from os import mkdir, rename, unlink + WRITE_SUPPORT = True +except ImportError: + # no write support, probably under GAE + WRITE_SUPPORT = False + +from os import open as os_open +from os.path import isdir, split + +try: + import importlib.machinery as importlib_machinery + # access attribute to force import under delayed import mechanisms. + importlib_machinery.__name__ +except ImportError: + importlib_machinery = None + +from . import py31compat +from pkg_resources.extern import appdirs +from pkg_resources.extern import packaging +__import__('pkg_resources.extern.packaging.version') +__import__('pkg_resources.extern.packaging.specifiers') +__import__('pkg_resources.extern.packaging.requirements') +__import__('pkg_resources.extern.packaging.markers') + + +if (3, 0) < sys.version_info < (3, 3): + raise RuntimeError("Python 3.3 or later is required") + +if six.PY2: + # Those builtin exceptions are only defined in Python 3 + PermissionError = None + NotADirectoryError = None + +# declare some globals that will be defined later to +# satisfy the linters. +require = None +working_set = None +add_activation_listener = None +resources_stream = None +cleanup_resources = None +resource_dir = None +resource_stream = None +set_extraction_path = None +resource_isdir = None +resource_string = None +iter_entry_points = None +resource_listdir = None +resource_filename = None +resource_exists = None +_distribution_finders = None +_namespace_handlers = None +_namespace_packages = None + + +class PEP440Warning(RuntimeWarning): + """ + Used when there is an issue with a version or specifier not complying with + PEP 440. + """ + + +def parse_version(v): + try: + return packaging.version.Version(v) + except packaging.version.InvalidVersion: + return packaging.version.LegacyVersion(v) + + +_state_vars = {} + + +def _declare_state(vartype, **kw): + globals().update(kw) + _state_vars.update(dict.fromkeys(kw, vartype)) + + +def __getstate__(): + state = {} + g = globals() + for k, v in _state_vars.items(): + state[k] = g['_sget_' + v](g[k]) + return state + + +def __setstate__(state): + g = globals() + for k, v in state.items(): + g['_sset_' + _state_vars[k]](k, g[k], v) + return state + + +def _sget_dict(val): + return val.copy() + + +def _sset_dict(key, ob, state): + ob.clear() + ob.update(state) + + +def _sget_object(val): + return val.__getstate__() + + +def _sset_object(key, ob, state): + ob.__setstate__(state) + + +_sget_none = _sset_none = lambda *args: None + + +def get_supported_platform(): + """Return this platform's maximum compatible version. + + distutils.util.get_platform() normally reports the minimum version + of Mac OS X that would be required to *use* extensions produced by + distutils. But what we want when checking compatibility is to know the + version of Mac OS X that we are *running*. To allow usage of packages that + explicitly require a newer version of Mac OS X, we must also know the + current version of the OS. + + If this condition occurs for any other platform with a version in its + platform strings, this function should be extended accordingly. + """ + plat = get_build_platform() + m = macosVersionString.match(plat) + if m is not None and sys.platform == "darwin": + try: + plat = 'macosx-%s-%s' % ('.'.join(_macosx_vers()[:2]), m.group(3)) + except ValueError: + # not Mac OS X + pass + return plat + + +__all__ = [ + # Basic resource access and distribution/entry point discovery + 'require', 'run_script', 'get_provider', 'get_distribution', + 'load_entry_point', 'get_entry_map', 'get_entry_info', + 'iter_entry_points', + 'resource_string', 'resource_stream', 'resource_filename', + 'resource_listdir', 'resource_exists', 'resource_isdir', + + # Environmental control + 'declare_namespace', 'working_set', 'add_activation_listener', + 'find_distributions', 'set_extraction_path', 'cleanup_resources', + 'get_default_cache', + + # Primary implementation classes + 'Environment', 'WorkingSet', 'ResourceManager', + 'Distribution', 'Requirement', 'EntryPoint', + + # Exceptions + 'ResolutionError', 'VersionConflict', 'DistributionNotFound', + 'UnknownExtra', 'ExtractionError', + + # Warnings + 'PEP440Warning', + + # Parsing functions and string utilities + 'parse_requirements', 'parse_version', 'safe_name', 'safe_version', + 'get_platform', 'compatible_platforms', 'yield_lines', 'split_sections', + 'safe_extra', 'to_filename', 'invalid_marker', 'evaluate_marker', + + # filesystem utilities + 'ensure_directory', 'normalize_path', + + # Distribution "precedence" constants + 'EGG_DIST', 'BINARY_DIST', 'SOURCE_DIST', 'CHECKOUT_DIST', 'DEVELOP_DIST', + + # "Provider" interfaces, implementations, and registration/lookup APIs + 'IMetadataProvider', 'IResourceProvider', 'FileMetadata', + 'PathMetadata', 'EggMetadata', 'EmptyProvider', 'empty_provider', + 'NullProvider', 'EggProvider', 'DefaultProvider', 'ZipProvider', + 'register_finder', 'register_namespace_handler', 'register_loader_type', + 'fixup_namespace_packages', 'get_importer', + + # Deprecated/backward compatibility only + 'run_main', 'AvailableDistributions', +] + + +class ResolutionError(Exception): + """Abstract base for dependency resolution errors""" + + def __repr__(self): + return self.__class__.__name__ + repr(self.args) + + +class VersionConflict(ResolutionError): + """ + An already-installed version conflicts with the requested version. + + Should be initialized with the installed Distribution and the requested + Requirement. + """ + + _template = "{self.dist} is installed but {self.req} is required" + + @property + def dist(self): + return self.args[0] + + @property + def req(self): + return self.args[1] + + def report(self): + return self._template.format(**locals()) + + def with_context(self, required_by): + """ + If required_by is non-empty, return a version of self that is a + ContextualVersionConflict. + """ + if not required_by: + return self + args = self.args + (required_by,) + return ContextualVersionConflict(*args) + + +class ContextualVersionConflict(VersionConflict): + """ + A VersionConflict that accepts a third parameter, the set of the + requirements that required the installed Distribution. + """ + + _template = VersionConflict._template + ' by {self.required_by}' + + @property + def required_by(self): + return self.args[2] + + +class DistributionNotFound(ResolutionError): + """A requested distribution was not found""" + + _template = ("The '{self.req}' distribution was not found " + "and is required by {self.requirers_str}") + + @property + def req(self): + return self.args[0] + + @property + def requirers(self): + return self.args[1] + + @property + def requirers_str(self): + if not self.requirers: + return 'the application' + return ', '.join(self.requirers) + + def report(self): + return self._template.format(**locals()) + + def __str__(self): + return self.report() + + +class UnknownExtra(ResolutionError): + """Distribution doesn't have an "extra feature" of the given name""" + + +_provider_factories = {} + +PY_MAJOR = sys.version[:3] +EGG_DIST = 3 +BINARY_DIST = 2 +SOURCE_DIST = 1 +CHECKOUT_DIST = 0 +DEVELOP_DIST = -1 + + +def register_loader_type(loader_type, provider_factory): + """Register `provider_factory` to make providers for `loader_type` + + `loader_type` is the type or class of a PEP 302 ``module.__loader__``, + and `provider_factory` is a function that, passed a *module* object, + returns an ``IResourceProvider`` for that module. + """ + _provider_factories[loader_type] = provider_factory + + +def get_provider(moduleOrReq): + """Return an IResourceProvider for the named module or requirement""" + if isinstance(moduleOrReq, Requirement): + return working_set.find(moduleOrReq) or require(str(moduleOrReq))[0] + try: + module = sys.modules[moduleOrReq] + except KeyError: + __import__(moduleOrReq) + module = sys.modules[moduleOrReq] + loader = getattr(module, '__loader__', None) + return _find_adapter(_provider_factories, loader)(module) + + +def _macosx_vers(_cache=[]): + if not _cache: + version = platform.mac_ver()[0] + # fallback for MacPorts + if version == '': + plist = '/System/Library/CoreServices/SystemVersion.plist' + if os.path.exists(plist): + if hasattr(plistlib, 'readPlist'): + plist_content = plistlib.readPlist(plist) + if 'ProductVersion' in plist_content: + version = plist_content['ProductVersion'] + + _cache.append(version.split('.')) + return _cache[0] + + +def _macosx_arch(machine): + return {'PowerPC': 'ppc', 'Power_Macintosh': 'ppc'}.get(machine, machine) + + +def get_build_platform(): + """Return this platform's string for platform-specific distributions + + XXX Currently this is the same as ``distutils.util.get_platform()``, but it + needs some hacks for Linux and Mac OS X. + """ + try: + # Python 2.7 or >=3.2 + from sysconfig import get_platform + except ImportError: + from distutils.util import get_platform + + plat = get_platform() + if sys.platform == "darwin" and not plat.startswith('macosx-'): + try: + version = _macosx_vers() + machine = os.uname()[4].replace(" ", "_") + return "macosx-%d.%d-%s" % ( + int(version[0]), int(version[1]), + _macosx_arch(machine), + ) + except ValueError: + # if someone is running a non-Mac darwin system, this will fall + # through to the default implementation + pass + return plat + + +macosVersionString = re.compile(r"macosx-(\d+)\.(\d+)-(.*)") +darwinVersionString = re.compile(r"darwin-(\d+)\.(\d+)\.(\d+)-(.*)") +# XXX backward compat +get_platform = get_build_platform + + +def compatible_platforms(provided, required): + """Can code for the `provided` platform run on the `required` platform? + + Returns true if either platform is ``None``, or the platforms are equal. + + XXX Needs compatibility checks for Linux and other unixy OSes. + """ + if provided is None or required is None or provided == required: + # easy case + return True + + # Mac OS X special cases + reqMac = macosVersionString.match(required) + if reqMac: + provMac = macosVersionString.match(provided) + + # is this a Mac package? + if not provMac: + # this is backwards compatibility for packages built before + # setuptools 0.6. All packages built after this point will + # use the new macosx designation. + provDarwin = darwinVersionString.match(provided) + if provDarwin: + dversion = int(provDarwin.group(1)) + macosversion = "%s.%s" % (reqMac.group(1), reqMac.group(2)) + if dversion == 7 and macosversion >= "10.3" or \ + dversion == 8 and macosversion >= "10.4": + return True + # egg isn't macosx or legacy darwin + return False + + # are they the same major version and machine type? + if provMac.group(1) != reqMac.group(1) or \ + provMac.group(3) != reqMac.group(3): + return False + + # is the required OS major update >= the provided one? + if int(provMac.group(2)) > int(reqMac.group(2)): + return False + + return True + + # XXX Linux and other platforms' special cases should go here + return False + + +def run_script(dist_spec, script_name): + """Locate distribution `dist_spec` and run its `script_name` script""" + ns = sys._getframe(1).f_globals + name = ns['__name__'] + ns.clear() + ns['__name__'] = name + require(dist_spec)[0].run_script(script_name, ns) + + +# backward compatibility +run_main = run_script + + +def get_distribution(dist): + """Return a current distribution object for a Requirement or string""" + if isinstance(dist, six.string_types): + dist = Requirement.parse(dist) + if isinstance(dist, Requirement): + dist = get_provider(dist) + if not isinstance(dist, Distribution): + raise TypeError("Expected string, Requirement, or Distribution", dist) + return dist + + +def load_entry_point(dist, group, name): + """Return `name` entry point of `group` for `dist` or raise ImportError""" + return get_distribution(dist).load_entry_point(group, name) + + +def get_entry_map(dist, group=None): + """Return the entry point map for `group`, or the full entry map""" + return get_distribution(dist).get_entry_map(group) + + +def get_entry_info(dist, group, name): + """Return the EntryPoint object for `group`+`name`, or ``None``""" + return get_distribution(dist).get_entry_info(group, name) + + +class IMetadataProvider: + def has_metadata(name): + """Does the package's distribution contain the named metadata?""" + + def get_metadata(name): + """The named metadata resource as a string""" + + def get_metadata_lines(name): + """Yield named metadata resource as list of non-blank non-comment lines + + Leading and trailing whitespace is stripped from each line, and lines + with ``#`` as the first non-blank character are omitted.""" + + def metadata_isdir(name): + """Is the named metadata a directory? (like ``os.path.isdir()``)""" + + def metadata_listdir(name): + """List of metadata names in the directory (like ``os.listdir()``)""" + + def run_script(script_name, namespace): + """Execute the named script in the supplied namespace dictionary""" + + +class IResourceProvider(IMetadataProvider): + """An object that provides access to package resources""" + + def get_resource_filename(manager, resource_name): + """Return a true filesystem path for `resource_name` + + `manager` must be an ``IResourceManager``""" + + def get_resource_stream(manager, resource_name): + """Return a readable file-like object for `resource_name` + + `manager` must be an ``IResourceManager``""" + + def get_resource_string(manager, resource_name): + """Return a string containing the contents of `resource_name` + + `manager` must be an ``IResourceManager``""" + + def has_resource(resource_name): + """Does the package contain the named resource?""" + + def resource_isdir(resource_name): + """Is the named resource a directory? (like ``os.path.isdir()``)""" + + def resource_listdir(resource_name): + """List of resource names in the directory (like ``os.listdir()``)""" + + +class WorkingSet(object): + """A collection of active distributions on sys.path (or a similar list)""" + + def __init__(self, entries=None): + """Create working set from list of path entries (default=sys.path)""" + self.entries = [] + self.entry_keys = {} + self.by_key = {} + self.callbacks = [] + + if entries is None: + entries = sys.path + + for entry in entries: + self.add_entry(entry) + + @classmethod + def _build_master(cls): + """ + Prepare the master working set. + """ + ws = cls() + try: + from __main__ import __requires__ + except ImportError: + # The main program does not list any requirements + return ws + + # ensure the requirements are met + try: + ws.require(__requires__) + except VersionConflict: + return cls._build_from_requirements(__requires__) + + return ws + + @classmethod + def _build_from_requirements(cls, req_spec): + """ + Build a working set from a requirement spec. Rewrites sys.path. + """ + # try it without defaults already on sys.path + # by starting with an empty path + ws = cls([]) + reqs = parse_requirements(req_spec) + dists = ws.resolve(reqs, Environment()) + for dist in dists: + ws.add(dist) + + # add any missing entries from sys.path + for entry in sys.path: + if entry not in ws.entries: + ws.add_entry(entry) + + # then copy back to sys.path + sys.path[:] = ws.entries + return ws + + def add_entry(self, entry): + """Add a path item to ``.entries``, finding any distributions on it + + ``find_distributions(entry, True)`` is used to find distributions + corresponding to the path entry, and they are added. `entry` is + always appended to ``.entries``, even if it is already present. + (This is because ``sys.path`` can contain the same value more than + once, and the ``.entries`` of the ``sys.path`` WorkingSet should always + equal ``sys.path``.) + """ + self.entry_keys.setdefault(entry, []) + self.entries.append(entry) + for dist in find_distributions(entry, True): + self.add(dist, entry, False) + + def __contains__(self, dist): + """True if `dist` is the active distribution for its project""" + return self.by_key.get(dist.key) == dist + + def find(self, req): + """Find a distribution matching requirement `req` + + If there is an active distribution for the requested project, this + returns it as long as it meets the version requirement specified by + `req`. But, if there is an active distribution for the project and it + does *not* meet the `req` requirement, ``VersionConflict`` is raised. + If there is no active distribution for the requested project, ``None`` + is returned. + """ + dist = self.by_key.get(req.key) + if dist is not None and dist not in req: + # XXX add more info + raise VersionConflict(dist, req) + return dist + + def iter_entry_points(self, group, name=None): + """Yield entry point objects from `group` matching `name` + + If `name` is None, yields all entry points in `group` from all + distributions in the working set, otherwise only ones matching + both `group` and `name` are yielded (in distribution order). + """ + for dist in self: + entries = dist.get_entry_map(group) + if name is None: + for ep in entries.values(): + yield ep + elif name in entries: + yield entries[name] + + def run_script(self, requires, script_name): + """Locate distribution for `requires` and run `script_name` script""" + ns = sys._getframe(1).f_globals + name = ns['__name__'] + ns.clear() + ns['__name__'] = name + self.require(requires)[0].run_script(script_name, ns) + + def __iter__(self): + """Yield distributions for non-duplicate projects in the working set + + The yield order is the order in which the items' path entries were + added to the working set. + """ + seen = {} + for item in self.entries: + if item not in self.entry_keys: + # workaround a cache issue + continue + + for key in self.entry_keys[item]: + if key not in seen: + seen[key] = 1 + yield self.by_key[key] + + def add(self, dist, entry=None, insert=True, replace=False): + """Add `dist` to working set, associated with `entry` + + If `entry` is unspecified, it defaults to the ``.location`` of `dist`. + On exit from this routine, `entry` is added to the end of the working + set's ``.entries`` (if it wasn't already present). + + `dist` is only added to the working set if it's for a project that + doesn't already have a distribution in the set, unless `replace=True`. + If it's added, any callbacks registered with the ``subscribe()`` method + will be called. + """ + if insert: + dist.insert_on(self.entries, entry, replace=replace) + + if entry is None: + entry = dist.location + keys = self.entry_keys.setdefault(entry, []) + keys2 = self.entry_keys.setdefault(dist.location, []) + if not replace and dist.key in self.by_key: + # ignore hidden distros + return + + self.by_key[dist.key] = dist + if dist.key not in keys: + keys.append(dist.key) + if dist.key not in keys2: + keys2.append(dist.key) + self._added_new(dist) + + def resolve(self, requirements, env=None, installer=None, + replace_conflicting=False, extras=None): + """List all distributions needed to (recursively) meet `requirements` + + `requirements` must be a sequence of ``Requirement`` objects. `env`, + if supplied, should be an ``Environment`` instance. If + not supplied, it defaults to all distributions available within any + entry or distribution in the working set. `installer`, if supplied, + will be invoked with each requirement that cannot be met by an + already-installed distribution; it should return a ``Distribution`` or + ``None``. + + Unless `replace_conflicting=True`, raises a VersionConflict exception + if + any requirements are found on the path that have the correct name but + the wrong version. Otherwise, if an `installer` is supplied it will be + invoked to obtain the correct version of the requirement and activate + it. + + `extras` is a list of the extras to be used with these requirements. + This is important because extra requirements may look like `my_req; + extra = "my_extra"`, which would otherwise be interpreted as a purely + optional requirement. Instead, we want to be able to assert that these + requirements are truly required. + """ + + # set up the stack + requirements = list(requirements)[::-1] + # set of processed requirements + processed = {} + # key -> dist + best = {} + to_activate = [] + + req_extras = _ReqExtras() + + # Mapping of requirement to set of distributions that required it; + # useful for reporting info about conflicts. + required_by = collections.defaultdict(set) + + while requirements: + # process dependencies breadth-first + req = requirements.pop(0) + if req in processed: + # Ignore cyclic or redundant dependencies + continue + + if not req_extras.markers_pass(req, extras): + continue + + dist = best.get(req.key) + if dist is None: + # Find the best distribution and add it to the map + dist = self.by_key.get(req.key) + if dist is None or (dist not in req and replace_conflicting): + ws = self + if env is None: + if dist is None: + env = Environment(self.entries) + else: + # Use an empty environment and workingset to avoid + # any further conflicts with the conflicting + # distribution + env = Environment([]) + ws = WorkingSet([]) + dist = best[req.key] = env.best_match( + req, ws, installer, + replace_conflicting=replace_conflicting + ) + if dist is None: + requirers = required_by.get(req, None) + raise DistributionNotFound(req, requirers) + to_activate.append(dist) + if dist not in req: + # Oops, the "best" so far conflicts with a dependency + dependent_req = required_by[req] + raise VersionConflict(dist, req).with_context(dependent_req) + + # push the new requirements onto the stack + new_requirements = dist.requires(req.extras)[::-1] + requirements.extend(new_requirements) + + # Register the new requirements needed by req + for new_requirement in new_requirements: + required_by[new_requirement].add(req.project_name) + req_extras[new_requirement] = req.extras + + processed[req] = True + + # return list of distros to activate + return to_activate + + def find_plugins( + self, plugin_env, full_env=None, installer=None, fallback=True): + """Find all activatable distributions in `plugin_env` + + Example usage:: + + distributions, errors = working_set.find_plugins( + Environment(plugin_dirlist) + ) + # add plugins+libs to sys.path + map(working_set.add, distributions) + # display errors + print('Could not load', errors) + + The `plugin_env` should be an ``Environment`` instance that contains + only distributions that are in the project's "plugin directory" or + directories. The `full_env`, if supplied, should be an ``Environment`` + contains all currently-available distributions. If `full_env` is not + supplied, one is created automatically from the ``WorkingSet`` this + method is called on, which will typically mean that every directory on + ``sys.path`` will be scanned for distributions. + + `installer` is a standard installer callback as used by the + ``resolve()`` method. The `fallback` flag indicates whether we should + attempt to resolve older versions of a plugin if the newest version + cannot be resolved. + + This method returns a 2-tuple: (`distributions`, `error_info`), where + `distributions` is a list of the distributions found in `plugin_env` + that were loadable, along with any other distributions that are needed + to resolve their dependencies. `error_info` is a dictionary mapping + unloadable plugin distributions to an exception instance describing the + error that occurred. Usually this will be a ``DistributionNotFound`` or + ``VersionConflict`` instance. + """ + + plugin_projects = list(plugin_env) + # scan project names in alphabetic order + plugin_projects.sort() + + error_info = {} + distributions = {} + + if full_env is None: + env = Environment(self.entries) + env += plugin_env + else: + env = full_env + plugin_env + + shadow_set = self.__class__([]) + # put all our entries in shadow_set + list(map(shadow_set.add, self)) + + for project_name in plugin_projects: + + for dist in plugin_env[project_name]: + + req = [dist.as_requirement()] + + try: + resolvees = shadow_set.resolve(req, env, installer) + + except ResolutionError as v: + # save error info + error_info[dist] = v + if fallback: + # try the next older version of project + continue + else: + # give up on this project, keep going + break + + else: + list(map(shadow_set.add, resolvees)) + distributions.update(dict.fromkeys(resolvees)) + + # success, no need to try any more versions of this project + break + + distributions = list(distributions) + distributions.sort() + + return distributions, error_info + + def require(self, *requirements): + """Ensure that distributions matching `requirements` are activated + + `requirements` must be a string or a (possibly-nested) sequence + thereof, specifying the distributions and versions required. The + return value is a sequence of the distributions that needed to be + activated to fulfill the requirements; all relevant distributions are + included, even if they were already activated in this working set. + """ + needed = self.resolve(parse_requirements(requirements)) + + for dist in needed: + self.add(dist) + + return needed + + def subscribe(self, callback, existing=True): + """Invoke `callback` for all distributions + + If `existing=True` (default), + call on all existing ones, as well. + """ + if callback in self.callbacks: + return + self.callbacks.append(callback) + if not existing: + return + for dist in self: + callback(dist) + + def _added_new(self, dist): + for callback in self.callbacks: + callback(dist) + + def __getstate__(self): + return ( + self.entries[:], self.entry_keys.copy(), self.by_key.copy(), + self.callbacks[:] + ) + + def __setstate__(self, e_k_b_c): + entries, keys, by_key, callbacks = e_k_b_c + self.entries = entries[:] + self.entry_keys = keys.copy() + self.by_key = by_key.copy() + self.callbacks = callbacks[:] + + +class _ReqExtras(dict): + """ + Map each requirement to the extras that demanded it. + """ + + def markers_pass(self, req, extras=None): + """ + Evaluate markers for req against each extra that + demanded it. + + Return False if the req has a marker and fails + evaluation. Otherwise, return True. + """ + extra_evals = ( + req.marker.evaluate({'extra': extra}) + for extra in self.get(req, ()) + (extras or (None,)) + ) + return not req.marker or any(extra_evals) + + +class Environment(object): + """Searchable snapshot of distributions on a search path""" + + def __init__( + self, search_path=None, platform=get_supported_platform(), + python=PY_MAJOR): + """Snapshot distributions available on a search path + + Any distributions found on `search_path` are added to the environment. + `search_path` should be a sequence of ``sys.path`` items. If not + supplied, ``sys.path`` is used. + + `platform` is an optional string specifying the name of the platform + that platform-specific distributions must be compatible with. If + unspecified, it defaults to the current platform. `python` is an + optional string naming the desired version of Python (e.g. ``'3.3'``); + it defaults to the current version. + + You may explicitly set `platform` (and/or `python`) to ``None`` if you + wish to map *all* distributions, not just those compatible with the + running platform or Python version. + """ + self._distmap = {} + self.platform = platform + self.python = python + self.scan(search_path) + + def can_add(self, dist): + """Is distribution `dist` acceptable for this environment? + + The distribution must match the platform and python version + requirements specified when this environment was created, or False + is returned. + """ + py_compat = ( + self.python is None + or dist.py_version is None + or dist.py_version == self.python + ) + return py_compat and compatible_platforms(dist.platform, self.platform) + + def remove(self, dist): + """Remove `dist` from the environment""" + self._distmap[dist.key].remove(dist) + + def scan(self, search_path=None): + """Scan `search_path` for distributions usable in this environment + + Any distributions found are added to the environment. + `search_path` should be a sequence of ``sys.path`` items. If not + supplied, ``sys.path`` is used. Only distributions conforming to + the platform/python version defined at initialization are added. + """ + if search_path is None: + search_path = sys.path + + for item in search_path: + for dist in find_distributions(item): + self.add(dist) + + def __getitem__(self, project_name): + """Return a newest-to-oldest list of distributions for `project_name` + + Uses case-insensitive `project_name` comparison, assuming all the + project's distributions use their project's name converted to all + lowercase as their key. + + """ + distribution_key = project_name.lower() + return self._distmap.get(distribution_key, []) + + def add(self, dist): + """Add `dist` if we ``can_add()`` it and it has not already been added + """ + if self.can_add(dist) and dist.has_version(): + dists = self._distmap.setdefault(dist.key, []) + if dist not in dists: + dists.append(dist) + dists.sort(key=operator.attrgetter('hashcmp'), reverse=True) + + def best_match( + self, req, working_set, installer=None, replace_conflicting=False): + """Find distribution best matching `req` and usable on `working_set` + + This calls the ``find(req)`` method of the `working_set` to see if a + suitable distribution is already active. (This may raise + ``VersionConflict`` if an unsuitable version of the project is already + active in the specified `working_set`.) If a suitable distribution + isn't active, this method returns the newest distribution in the + environment that meets the ``Requirement`` in `req`. If no suitable + distribution is found, and `installer` is supplied, then the result of + calling the environment's ``obtain(req, installer)`` method will be + returned. + """ + try: + dist = working_set.find(req) + except VersionConflict: + if not replace_conflicting: + raise + dist = None + if dist is not None: + return dist + for dist in self[req.key]: + if dist in req: + return dist + # try to download/install + return self.obtain(req, installer) + + def obtain(self, requirement, installer=None): + """Obtain a distribution matching `requirement` (e.g. via download) + + Obtain a distro that matches requirement (e.g. via download). In the + base ``Environment`` class, this routine just returns + ``installer(requirement)``, unless `installer` is None, in which case + None is returned instead. This method is a hook that allows subclasses + to attempt other ways of obtaining a distribution before falling back + to the `installer` argument.""" + if installer is not None: + return installer(requirement) + + def __iter__(self): + """Yield the unique project names of the available distributions""" + for key in self._distmap.keys(): + if self[key]: + yield key + + def __iadd__(self, other): + """In-place addition of a distribution or environment""" + if isinstance(other, Distribution): + self.add(other) + elif isinstance(other, Environment): + for project in other: + for dist in other[project]: + self.add(dist) + else: + raise TypeError("Can't add %r to environment" % (other,)) + return self + + def __add__(self, other): + """Add an environment or distribution to an environment""" + new = self.__class__([], platform=None, python=None) + for env in self, other: + new += env + return new + + +# XXX backward compatibility +AvailableDistributions = Environment + + +class ExtractionError(RuntimeError): + """An error occurred extracting a resource + + The following attributes are available from instances of this exception: + + manager + The resource manager that raised this exception + + cache_path + The base directory for resource extraction + + original_error + The exception instance that caused extraction to fail + """ + + +class ResourceManager: + """Manage resource extraction and packages""" + extraction_path = None + + def __init__(self): + self.cached_files = {} + + def resource_exists(self, package_or_requirement, resource_name): + """Does the named resource exist?""" + return get_provider(package_or_requirement).has_resource(resource_name) + + def resource_isdir(self, package_or_requirement, resource_name): + """Is the named resource an existing directory?""" + return get_provider(package_or_requirement).resource_isdir( + resource_name + ) + + def resource_filename(self, package_or_requirement, resource_name): + """Return a true filesystem path for specified resource""" + return get_provider(package_or_requirement).get_resource_filename( + self, resource_name + ) + + def resource_stream(self, package_or_requirement, resource_name): + """Return a readable file-like object for specified resource""" + return get_provider(package_or_requirement).get_resource_stream( + self, resource_name + ) + + def resource_string(self, package_or_requirement, resource_name): + """Return specified resource as a string""" + return get_provider(package_or_requirement).get_resource_string( + self, resource_name + ) + + def resource_listdir(self, package_or_requirement, resource_name): + """List the contents of the named resource directory""" + return get_provider(package_or_requirement).resource_listdir( + resource_name + ) + + def extraction_error(self): + """Give an error message for problems extracting file(s)""" + + old_exc = sys.exc_info()[1] + cache_path = self.extraction_path or get_default_cache() + + tmpl = textwrap.dedent(""" + Can't extract file(s) to egg cache + + The following error occurred while trying to extract file(s) + to the Python egg cache: + + {old_exc} + + The Python egg cache directory is currently set to: + + {cache_path} + + Perhaps your account does not have write access to this directory? + You can change the cache directory by setting the PYTHON_EGG_CACHE + environment variable to point to an accessible directory. + """).lstrip() + err = ExtractionError(tmpl.format(**locals())) + err.manager = self + err.cache_path = cache_path + err.original_error = old_exc + raise err + + def get_cache_path(self, archive_name, names=()): + """Return absolute location in cache for `archive_name` and `names` + + The parent directory of the resulting path will be created if it does + not already exist. `archive_name` should be the base filename of the + enclosing egg (which may not be the name of the enclosing zipfile!), + including its ".egg" extension. `names`, if provided, should be a + sequence of path name parts "under" the egg's extraction location. + + This method should only be called by resource providers that need to + obtain an extraction location, and only for names they intend to + extract, as it tracks the generated names for possible cleanup later. + """ + extract_path = self.extraction_path or get_default_cache() + target_path = os.path.join(extract_path, archive_name + '-tmp', *names) + try: + _bypass_ensure_directory(target_path) + except Exception: + self.extraction_error() + + self._warn_unsafe_extraction_path(extract_path) + + self.cached_files[target_path] = 1 + return target_path + + @staticmethod + def _warn_unsafe_extraction_path(path): + """ + If the default extraction path is overridden and set to an insecure + location, such as /tmp, it opens up an opportunity for an attacker to + replace an extracted file with an unauthorized payload. Warn the user + if a known insecure location is used. + + See Distribute #375 for more details. + """ + if os.name == 'nt' and not path.startswith(os.environ['windir']): + # On Windows, permissions are generally restrictive by default + # and temp directories are not writable by other users, so + # bypass the warning. + return + mode = os.stat(path).st_mode + if mode & stat.S_IWOTH or mode & stat.S_IWGRP: + msg = ( + "%s is writable by group/others and vulnerable to attack " + "when " + "used with get_resource_filename. Consider a more secure " + "location (set with .set_extraction_path or the " + "PYTHON_EGG_CACHE environment variable)." % path + ) + warnings.warn(msg, UserWarning) + + def postprocess(self, tempname, filename): + """Perform any platform-specific postprocessing of `tempname` + + This is where Mac header rewrites should be done; other platforms don't + have anything special they should do. + + Resource providers should call this method ONLY after successfully + extracting a compressed resource. They must NOT call it on resources + that are already in the filesystem. + + `tempname` is the current (temporary) name of the file, and `filename` + is the name it will be renamed to by the caller after this routine + returns. + """ + + if os.name == 'posix': + # Make the resource executable + mode = ((os.stat(tempname).st_mode) | 0o555) & 0o7777 + os.chmod(tempname, mode) + + def set_extraction_path(self, path): + """Set the base path where resources will be extracted to, if needed. + + If you do not call this routine before any extractions take place, the + path defaults to the return value of ``get_default_cache()``. (Which + is based on the ``PYTHON_EGG_CACHE`` environment variable, with various + platform-specific fallbacks. See that routine's documentation for more + details.) + + Resources are extracted to subdirectories of this path based upon + information given by the ``IResourceProvider``. You may set this to a + temporary directory, but then you must call ``cleanup_resources()`` to + delete the extracted files when done. There is no guarantee that + ``cleanup_resources()`` will be able to remove all extracted files. + + (Note: you may not change the extraction path for a given resource + manager once resources have been extracted, unless you first call + ``cleanup_resources()``.) + """ + if self.cached_files: + raise ValueError( + "Can't change extraction path, files already extracted" + ) + + self.extraction_path = path + + def cleanup_resources(self, force=False): + """ + Delete all extracted resource files and directories, returning a list + of the file and directory names that could not be successfully removed. + This function does not have any concurrency protection, so it should + generally only be called when the extraction path is a temporary + directory exclusive to a single process. This method is not + automatically called; you must call it explicitly or register it as an + ``atexit`` function if you wish to ensure cleanup of a temporary + directory used for extractions. + """ + # XXX + + +def get_default_cache(): + """ + Return the ``PYTHON_EGG_CACHE`` environment variable + or a platform-relevant user cache dir for an app + named "Python-Eggs". + """ + return ( + os.environ.get('PYTHON_EGG_CACHE') + or appdirs.user_cache_dir(appname='Python-Eggs') + ) + + +def safe_name(name): + """Convert an arbitrary string to a standard distribution name + + Any runs of non-alphanumeric/. characters are replaced with a single '-'. + """ + return re.sub('[^A-Za-z0-9.]+', '-', name) + + +def safe_version(version): + """ + Convert an arbitrary string to a standard version string + """ + try: + # normalize the version + return str(packaging.version.Version(version)) + except packaging.version.InvalidVersion: + version = version.replace(' ', '.') + return re.sub('[^A-Za-z0-9.]+', '-', version) + + +def safe_extra(extra): + """Convert an arbitrary string to a standard 'extra' name + + Any runs of non-alphanumeric characters are replaced with a single '_', + and the result is always lowercased. + """ + return re.sub('[^A-Za-z0-9.-]+', '_', extra).lower() + + +def to_filename(name): + """Convert a project or version name to its filename-escaped form + + Any '-' characters are currently replaced with '_'. + """ + return name.replace('-', '_') + + +def invalid_marker(text): + """ + Validate text as a PEP 508 environment marker; return an exception + if invalid or False otherwise. + """ + try: + evaluate_marker(text) + except SyntaxError as e: + e.filename = None + e.lineno = None + return e + return False + + +def evaluate_marker(text, extra=None): + """ + Evaluate a PEP 508 environment marker. + Return a boolean indicating the marker result in this environment. + Raise SyntaxError if marker is invalid. + + This implementation uses the 'pyparsing' module. + """ + try: + marker = packaging.markers.Marker(text) + return marker.evaluate() + except packaging.markers.InvalidMarker as e: + raise SyntaxError(e) + + +class NullProvider: + """Try to implement resources and metadata for arbitrary PEP 302 loaders""" + + egg_name = None + egg_info = None + loader = None + + def __init__(self, module): + self.loader = getattr(module, '__loader__', None) + self.module_path = os.path.dirname(getattr(module, '__file__', '')) + + def get_resource_filename(self, manager, resource_name): + return self._fn(self.module_path, resource_name) + + def get_resource_stream(self, manager, resource_name): + return io.BytesIO(self.get_resource_string(manager, resource_name)) + + def get_resource_string(self, manager, resource_name): + return self._get(self._fn(self.module_path, resource_name)) + + def has_resource(self, resource_name): + return self._has(self._fn(self.module_path, resource_name)) + + def has_metadata(self, name): + return self.egg_info and self._has(self._fn(self.egg_info, name)) + + def get_metadata(self, name): + if not self.egg_info: + return "" + value = self._get(self._fn(self.egg_info, name)) + return value.decode('utf-8') if six.PY3 else value + + def get_metadata_lines(self, name): + return yield_lines(self.get_metadata(name)) + + def resource_isdir(self, resource_name): + return self._isdir(self._fn(self.module_path, resource_name)) + + def metadata_isdir(self, name): + return self.egg_info and self._isdir(self._fn(self.egg_info, name)) + + def resource_listdir(self, resource_name): + return self._listdir(self._fn(self.module_path, resource_name)) + + def metadata_listdir(self, name): + if self.egg_info: + return self._listdir(self._fn(self.egg_info, name)) + return [] + + def run_script(self, script_name, namespace): + script = 'scripts/' + script_name + if not self.has_metadata(script): + raise ResolutionError( + "Script {script!r} not found in metadata at {self.egg_info!r}" + .format(**locals()), + ) + script_text = self.get_metadata(script).replace('\r\n', '\n') + script_text = script_text.replace('\r', '\n') + script_filename = self._fn(self.egg_info, script) + namespace['__file__'] = script_filename + if os.path.exists(script_filename): + source = open(script_filename).read() + code = compile(source, script_filename, 'exec') + exec(code, namespace, namespace) + else: + from linecache import cache + cache[script_filename] = ( + len(script_text), 0, script_text.split('\n'), script_filename + ) + script_code = compile(script_text, script_filename, 'exec') + exec(script_code, namespace, namespace) + + def _has(self, path): + raise NotImplementedError( + "Can't perform this operation for unregistered loader type" + ) + + def _isdir(self, path): + raise NotImplementedError( + "Can't perform this operation for unregistered loader type" + ) + + def _listdir(self, path): + raise NotImplementedError( + "Can't perform this operation for unregistered loader type" + ) + + def _fn(self, base, resource_name): + if resource_name: + return os.path.join(base, *resource_name.split('/')) + return base + + def _get(self, path): + if hasattr(self.loader, 'get_data'): + return self.loader.get_data(path) + raise NotImplementedError( + "Can't perform this operation for loaders without 'get_data()'" + ) + + +register_loader_type(object, NullProvider) + + +class EggProvider(NullProvider): + """Provider based on a virtual filesystem""" + + def __init__(self, module): + NullProvider.__init__(self, module) + self._setup_prefix() + + def _setup_prefix(self): + # we assume here that our metadata may be nested inside a "basket" + # of multiple eggs; that's why we use module_path instead of .archive + path = self.module_path + old = None + while path != old: + if _is_egg_path(path): + self.egg_name = os.path.basename(path) + self.egg_info = os.path.join(path, 'EGG-INFO') + self.egg_root = path + break + old = path + path, base = os.path.split(path) + + +class DefaultProvider(EggProvider): + """Provides access to package resources in the filesystem""" + + def _has(self, path): + return os.path.exists(path) + + def _isdir(self, path): + return os.path.isdir(path) + + def _listdir(self, path): + return os.listdir(path) + + def get_resource_stream(self, manager, resource_name): + return open(self._fn(self.module_path, resource_name), 'rb') + + def _get(self, path): + with open(path, 'rb') as stream: + return stream.read() + + @classmethod + def _register(cls): + loader_cls = getattr( + importlib_machinery, + 'SourceFileLoader', + type(None), + ) + register_loader_type(loader_cls, cls) + + +DefaultProvider._register() + + +class EmptyProvider(NullProvider): + """Provider that returns nothing for all requests""" + + module_path = None + + _isdir = _has = lambda self, path: False + + def _get(self, path): + return '' + + def _listdir(self, path): + return [] + + def __init__(self): + pass + + +empty_provider = EmptyProvider() + + +class ZipManifests(dict): + """ + zip manifest builder + """ + + @classmethod + def build(cls, path): + """ + Build a dictionary similar to the zipimport directory + caches, except instead of tuples, store ZipInfo objects. + + Use a platform-specific path separator (os.sep) for the path keys + for compatibility with pypy on Windows. + """ + with zipfile.ZipFile(path) as zfile: + items = ( + ( + name.replace('/', os.sep), + zfile.getinfo(name), + ) + for name in zfile.namelist() + ) + return dict(items) + + load = build + + +class MemoizedZipManifests(ZipManifests): + """ + Memoized zipfile manifests. + """ + manifest_mod = collections.namedtuple('manifest_mod', 'manifest mtime') + + def load(self, path): + """ + Load a manifest at path or return a suitable manifest already loaded. + """ + path = os.path.normpath(path) + mtime = os.stat(path).st_mtime + + if path not in self or self[path].mtime != mtime: + manifest = self.build(path) + self[path] = self.manifest_mod(manifest, mtime) + + return self[path].manifest + + +class ZipProvider(EggProvider): + """Resource support for zips and eggs""" + + eagers = None + _zip_manifests = MemoizedZipManifests() + + def __init__(self, module): + EggProvider.__init__(self, module) + self.zip_pre = self.loader.archive + os.sep + + def _zipinfo_name(self, fspath): + # Convert a virtual filename (full path to file) into a zipfile subpath + # usable with the zipimport directory cache for our target archive + fspath = fspath.rstrip(os.sep) + if fspath == self.loader.archive: + return '' + if fspath.startswith(self.zip_pre): + return fspath[len(self.zip_pre):] + raise AssertionError( + "%s is not a subpath of %s" % (fspath, self.zip_pre) + ) + + def _parts(self, zip_path): + # Convert a zipfile subpath into an egg-relative path part list. + # pseudo-fs path + fspath = self.zip_pre + zip_path + if fspath.startswith(self.egg_root + os.sep): + return fspath[len(self.egg_root) + 1:].split(os.sep) + raise AssertionError( + "%s is not a subpath of %s" % (fspath, self.egg_root) + ) + + @property + def zipinfo(self): + return self._zip_manifests.load(self.loader.archive) + + def get_resource_filename(self, manager, resource_name): + if not self.egg_name: + raise NotImplementedError( + "resource_filename() only supported for .egg, not .zip" + ) + # no need to lock for extraction, since we use temp names + zip_path = self._resource_to_zip(resource_name) + eagers = self._get_eager_resources() + if '/'.join(self._parts(zip_path)) in eagers: + for name in eagers: + self._extract_resource(manager, self._eager_to_zip(name)) + return self._extract_resource(manager, zip_path) + + @staticmethod + def _get_date_and_size(zip_stat): + size = zip_stat.file_size + # ymdhms+wday, yday, dst + date_time = zip_stat.date_time + (0, 0, -1) + # 1980 offset already done + timestamp = time.mktime(date_time) + return timestamp, size + + def _extract_resource(self, manager, zip_path): + + if zip_path in self._index(): + for name in self._index()[zip_path]: + last = self._extract_resource( + manager, os.path.join(zip_path, name) + ) + # return the extracted directory name + return os.path.dirname(last) + + timestamp, size = self._get_date_and_size(self.zipinfo[zip_path]) + + if not WRITE_SUPPORT: + raise IOError('"os.rename" and "os.unlink" are not supported ' + 'on this platform') + try: + + real_path = manager.get_cache_path( + self.egg_name, self._parts(zip_path) + ) + + if self._is_current(real_path, zip_path): + return real_path + + outf, tmpnam = _mkstemp( + ".$extract", + dir=os.path.dirname(real_path), + ) + os.write(outf, self.loader.get_data(zip_path)) + os.close(outf) + utime(tmpnam, (timestamp, timestamp)) + manager.postprocess(tmpnam, real_path) + + try: + rename(tmpnam, real_path) + + except os.error: + if os.path.isfile(real_path): + if self._is_current(real_path, zip_path): + # the file became current since it was checked above, + # so proceed. + return real_path + # Windows, del old file and retry + elif os.name == 'nt': + unlink(real_path) + rename(tmpnam, real_path) + return real_path + raise + + except os.error: + # report a user-friendly error + manager.extraction_error() + + return real_path + + def _is_current(self, file_path, zip_path): + """ + Return True if the file_path is current for this zip_path + """ + timestamp, size = self._get_date_and_size(self.zipinfo[zip_path]) + if not os.path.isfile(file_path): + return False + stat = os.stat(file_path) + if stat.st_size != size or stat.st_mtime != timestamp: + return False + # check that the contents match + zip_contents = self.loader.get_data(zip_path) + with open(file_path, 'rb') as f: + file_contents = f.read() + return zip_contents == file_contents + + def _get_eager_resources(self): + if self.eagers is None: + eagers = [] + for name in ('native_libs.txt', 'eager_resources.txt'): + if self.has_metadata(name): + eagers.extend(self.get_metadata_lines(name)) + self.eagers = eagers + return self.eagers + + def _index(self): + try: + return self._dirindex + except AttributeError: + ind = {} + for path in self.zipinfo: + parts = path.split(os.sep) + while parts: + parent = os.sep.join(parts[:-1]) + if parent in ind: + ind[parent].append(parts[-1]) + break + else: + ind[parent] = [parts.pop()] + self._dirindex = ind + return ind + + def _has(self, fspath): + zip_path = self._zipinfo_name(fspath) + return zip_path in self.zipinfo or zip_path in self._index() + + def _isdir(self, fspath): + return self._zipinfo_name(fspath) in self._index() + + def _listdir(self, fspath): + return list(self._index().get(self._zipinfo_name(fspath), ())) + + def _eager_to_zip(self, resource_name): + return self._zipinfo_name(self._fn(self.egg_root, resource_name)) + + def _resource_to_zip(self, resource_name): + return self._zipinfo_name(self._fn(self.module_path, resource_name)) + + +register_loader_type(zipimport.zipimporter, ZipProvider) + + +class FileMetadata(EmptyProvider): + """Metadata handler for standalone PKG-INFO files + + Usage:: + + metadata = FileMetadata("/path/to/PKG-INFO") + + This provider rejects all data and metadata requests except for PKG-INFO, + which is treated as existing, and will be the contents of the file at + the provided location. + """ + + def __init__(self, path): + self.path = path + + def has_metadata(self, name): + return name == 'PKG-INFO' and os.path.isfile(self.path) + + def get_metadata(self, name): + if name != 'PKG-INFO': + raise KeyError("No metadata except PKG-INFO is available") + + with io.open(self.path, encoding='utf-8', errors="replace") as f: + metadata = f.read() + self._warn_on_replacement(metadata) + return metadata + + def _warn_on_replacement(self, metadata): + # Python 2.7 compat for: replacement_char = '�' + replacement_char = b'\xef\xbf\xbd'.decode('utf-8') + if replacement_char in metadata: + tmpl = "{self.path} could not be properly decoded in UTF-8" + msg = tmpl.format(**locals()) + warnings.warn(msg) + + def get_metadata_lines(self, name): + return yield_lines(self.get_metadata(name)) + + +class PathMetadata(DefaultProvider): + """Metadata provider for egg directories + + Usage:: + + # Development eggs: + + egg_info = "/path/to/PackageName.egg-info" + base_dir = os.path.dirname(egg_info) + metadata = PathMetadata(base_dir, egg_info) + dist_name = os.path.splitext(os.path.basename(egg_info))[0] + dist = Distribution(basedir, project_name=dist_name, metadata=metadata) + + # Unpacked egg directories: + + egg_path = "/path/to/PackageName-ver-pyver-etc.egg" + metadata = PathMetadata(egg_path, os.path.join(egg_path,'EGG-INFO')) + dist = Distribution.from_filename(egg_path, metadata=metadata) + """ + + def __init__(self, path, egg_info): + self.module_path = path + self.egg_info = egg_info + + +class EggMetadata(ZipProvider): + """Metadata provider for .egg files""" + + def __init__(self, importer): + """Create a metadata provider from a zipimporter""" + + self.zip_pre = importer.archive + os.sep + self.loader = importer + if importer.prefix: + self.module_path = os.path.join(importer.archive, importer.prefix) + else: + self.module_path = importer.archive + self._setup_prefix() + + +_declare_state('dict', _distribution_finders={}) + + +def register_finder(importer_type, distribution_finder): + """Register `distribution_finder` to find distributions in sys.path items + + `importer_type` is the type or class of a PEP 302 "Importer" (sys.path item + handler), and `distribution_finder` is a callable that, passed a path + item and the importer instance, yields ``Distribution`` instances found on + that path item. See ``pkg_resources.find_on_path`` for an example.""" + _distribution_finders[importer_type] = distribution_finder + + +def find_distributions(path_item, only=False): + """Yield distributions accessible via `path_item`""" + importer = get_importer(path_item) + finder = _find_adapter(_distribution_finders, importer) + return finder(importer, path_item, only) + + +def find_eggs_in_zip(importer, path_item, only=False): + """ + Find eggs in zip files; possibly multiple nested eggs. + """ + if importer.archive.endswith('.whl'): + # wheels are not supported with this finder + # they don't have PKG-INFO metadata, and won't ever contain eggs + return + metadata = EggMetadata(importer) + if metadata.has_metadata('PKG-INFO'): + yield Distribution.from_filename(path_item, metadata=metadata) + if only: + # don't yield nested distros + return + for subitem in metadata.resource_listdir('/'): + if _is_egg_path(subitem): + subpath = os.path.join(path_item, subitem) + dists = find_eggs_in_zip(zipimport.zipimporter(subpath), subpath) + for dist in dists: + yield dist + elif subitem.lower().endswith('.dist-info'): + subpath = os.path.join(path_item, subitem) + submeta = EggMetadata(zipimport.zipimporter(subpath)) + submeta.egg_info = subpath + yield Distribution.from_location(path_item, subitem, submeta) + + +register_finder(zipimport.zipimporter, find_eggs_in_zip) + + +def find_nothing(importer, path_item, only=False): + return () + + +register_finder(object, find_nothing) + + +def _by_version_descending(names): + """ + Given a list of filenames, return them in descending order + by version number. + + >>> names = 'bar', 'foo', 'Python-2.7.10.egg', 'Python-2.7.2.egg' + >>> _by_version_descending(names) + ['Python-2.7.10.egg', 'Python-2.7.2.egg', 'foo', 'bar'] + >>> names = 'Setuptools-1.2.3b1.egg', 'Setuptools-1.2.3.egg' + >>> _by_version_descending(names) + ['Setuptools-1.2.3.egg', 'Setuptools-1.2.3b1.egg'] + >>> names = 'Setuptools-1.2.3b1.egg', 'Setuptools-1.2.3.post1.egg' + >>> _by_version_descending(names) + ['Setuptools-1.2.3.post1.egg', 'Setuptools-1.2.3b1.egg'] + """ + def _by_version(name): + """ + Parse each component of the filename + """ + name, ext = os.path.splitext(name) + parts = itertools.chain(name.split('-'), [ext]) + return [packaging.version.parse(part) for part in parts] + + return sorted(names, key=_by_version, reverse=True) + + +def find_on_path(importer, path_item, only=False): + """Yield distributions accessible on a sys.path directory""" + path_item = _normalize_cached(path_item) + + if _is_unpacked_egg(path_item): + yield Distribution.from_filename( + path_item, metadata=PathMetadata( + path_item, os.path.join(path_item, 'EGG-INFO') + ) + ) + return + + entries = safe_listdir(path_item) + + # for performance, before sorting by version, + # screen entries for only those that will yield + # distributions + filtered = ( + entry + for entry in entries + if dist_factory(path_item, entry, only) + ) + + # scan for .egg and .egg-info in directory + path_item_entries = _by_version_descending(filtered) + for entry in path_item_entries: + fullpath = os.path.join(path_item, entry) + factory = dist_factory(path_item, entry, only) + for dist in factory(fullpath): + yield dist + + +def dist_factory(path_item, entry, only): + """ + Return a dist_factory for a path_item and entry + """ + lower = entry.lower() + is_meta = any(map(lower.endswith, ('.egg-info', '.dist-info'))) + return ( + distributions_from_metadata + if is_meta else + find_distributions + if not only and _is_egg_path(entry) else + resolve_egg_link + if not only and lower.endswith('.egg-link') else + NoDists() + ) + + +class NoDists: + """ + >>> bool(NoDists()) + False + + >>> list(NoDists()('anything')) + [] + """ + def __bool__(self): + return False + if six.PY2: + __nonzero__ = __bool__ + + def __call__(self, fullpath): + return iter(()) + + +def safe_listdir(path): + """ + Attempt to list contents of path, but suppress some exceptions. + """ + try: + return os.listdir(path) + except (PermissionError, NotADirectoryError): + pass + except OSError as e: + # Ignore the directory if does not exist, not a directory or + # permission denied + ignorable = ( + e.errno in (errno.ENOTDIR, errno.EACCES, errno.ENOENT) + # Python 2 on Windows needs to be handled this way :( + or getattr(e, "winerror", None) == 267 + ) + if not ignorable: + raise + return () + + +def distributions_from_metadata(path): + root = os.path.dirname(path) + if os.path.isdir(path): + if len(os.listdir(path)) == 0: + # empty metadata dir; skip + return + metadata = PathMetadata(root, path) + else: + metadata = FileMetadata(path) + entry = os.path.basename(path) + yield Distribution.from_location( + root, entry, metadata, precedence=DEVELOP_DIST, + ) + + +def non_empty_lines(path): + """ + Yield non-empty lines from file at path + """ + with open(path) as f: + for line in f: + line = line.strip() + if line: + yield line + + +def resolve_egg_link(path): + """ + Given a path to an .egg-link, resolve distributions + present in the referenced path. + """ + referenced_paths = non_empty_lines(path) + resolved_paths = ( + os.path.join(os.path.dirname(path), ref) + for ref in referenced_paths + ) + dist_groups = map(find_distributions, resolved_paths) + return next(dist_groups, ()) + + +register_finder(pkgutil.ImpImporter, find_on_path) + +if hasattr(importlib_machinery, 'FileFinder'): + register_finder(importlib_machinery.FileFinder, find_on_path) + +_declare_state('dict', _namespace_handlers={}) +_declare_state('dict', _namespace_packages={}) + + +def register_namespace_handler(importer_type, namespace_handler): + """Register `namespace_handler` to declare namespace packages + + `importer_type` is the type or class of a PEP 302 "Importer" (sys.path item + handler), and `namespace_handler` is a callable like this:: + + def namespace_handler(importer, path_entry, moduleName, module): + # return a path_entry to use for child packages + + Namespace handlers are only called if the importer object has already + agreed that it can handle the relevant path item, and they should only + return a subpath if the module __path__ does not already contain an + equivalent subpath. For an example namespace handler, see + ``pkg_resources.file_ns_handler``. + """ + _namespace_handlers[importer_type] = namespace_handler + + +def _handle_ns(packageName, path_item): + """Ensure that named package includes a subpath of path_item (if needed)""" + + importer = get_importer(path_item) + if importer is None: + return None + loader = importer.find_module(packageName) + if loader is None: + return None + module = sys.modules.get(packageName) + if module is None: + module = sys.modules[packageName] = types.ModuleType(packageName) + module.__path__ = [] + _set_parent_ns(packageName) + elif not hasattr(module, '__path__'): + raise TypeError("Not a package:", packageName) + handler = _find_adapter(_namespace_handlers, importer) + subpath = handler(importer, path_item, packageName, module) + if subpath is not None: + path = module.__path__ + path.append(subpath) + loader.load_module(packageName) + _rebuild_mod_path(path, packageName, module) + return subpath + + +def _rebuild_mod_path(orig_path, package_name, module): + """ + Rebuild module.__path__ ensuring that all entries are ordered + corresponding to their sys.path order + """ + sys_path = [_normalize_cached(p) for p in sys.path] + + def safe_sys_path_index(entry): + """ + Workaround for #520 and #513. + """ + try: + return sys_path.index(entry) + except ValueError: + return float('inf') + + def position_in_sys_path(path): + """ + Return the ordinal of the path based on its position in sys.path + """ + path_parts = path.split(os.sep) + module_parts = package_name.count('.') + 1 + parts = path_parts[:-module_parts] + return safe_sys_path_index(_normalize_cached(os.sep.join(parts))) + + if not isinstance(orig_path, list): + # Is this behavior useful when module.__path__ is not a list? + return + + orig_path.sort(key=position_in_sys_path) + module.__path__[:] = [_normalize_cached(p) for p in orig_path] + + +def declare_namespace(packageName): + """Declare that package 'packageName' is a namespace package""" + + _imp.acquire_lock() + try: + if packageName in _namespace_packages: + return + + path, parent = sys.path, None + if '.' in packageName: + parent = '.'.join(packageName.split('.')[:-1]) + declare_namespace(parent) + if parent not in _namespace_packages: + __import__(parent) + try: + path = sys.modules[parent].__path__ + except AttributeError: + raise TypeError("Not a package:", parent) + + # Track what packages are namespaces, so when new path items are added, + # they can be updated + _namespace_packages.setdefault(parent, []).append(packageName) + _namespace_packages.setdefault(packageName, []) + + for path_item in path: + # Ensure all the parent's path items are reflected in the child, + # if they apply + _handle_ns(packageName, path_item) + + finally: + _imp.release_lock() + + +def fixup_namespace_packages(path_item, parent=None): + """Ensure that previously-declared namespace packages include path_item""" + _imp.acquire_lock() + try: + for package in _namespace_packages.get(parent, ()): + subpath = _handle_ns(package, path_item) + if subpath: + fixup_namespace_packages(subpath, package) + finally: + _imp.release_lock() + + +def file_ns_handler(importer, path_item, packageName, module): + """Compute an ns-package subpath for a filesystem or zipfile importer""" + + subpath = os.path.join(path_item, packageName.split('.')[-1]) + normalized = _normalize_cached(subpath) + for item in module.__path__: + if _normalize_cached(item) == normalized: + break + else: + # Only return the path if it's not already there + return subpath + + +register_namespace_handler(pkgutil.ImpImporter, file_ns_handler) +register_namespace_handler(zipimport.zipimporter, file_ns_handler) + +if hasattr(importlib_machinery, 'FileFinder'): + register_namespace_handler(importlib_machinery.FileFinder, file_ns_handler) + + +def null_ns_handler(importer, path_item, packageName, module): + return None + + +register_namespace_handler(object, null_ns_handler) + + +def normalize_path(filename): + """Normalize a file/dir name for comparison purposes""" + return os.path.normcase(os.path.realpath(filename)) + + +def _normalize_cached(filename, _cache={}): + try: + return _cache[filename] + except KeyError: + _cache[filename] = result = normalize_path(filename) + return result + + +def _is_egg_path(path): + """ + Determine if given path appears to be an egg. + """ + return path.lower().endswith('.egg') + + +def _is_unpacked_egg(path): + """ + Determine if given path appears to be an unpacked egg. + """ + return ( + _is_egg_path(path) and + os.path.isfile(os.path.join(path, 'EGG-INFO', 'PKG-INFO')) + ) + + +def _set_parent_ns(packageName): + parts = packageName.split('.') + name = parts.pop() + if parts: + parent = '.'.join(parts) + setattr(sys.modules[parent], name, sys.modules[packageName]) + + +def yield_lines(strs): + """Yield non-empty/non-comment lines of a string or sequence""" + if isinstance(strs, six.string_types): + for s in strs.splitlines(): + s = s.strip() + # skip blank lines/comments + if s and not s.startswith('#'): + yield s + else: + for ss in strs: + for s in yield_lines(ss): + yield s + + +MODULE = re.compile(r"\w+(\.\w+)*$").match +EGG_NAME = re.compile( + r""" + (?P<name>[^-]+) ( + -(?P<ver>[^-]+) ( + -py(?P<pyver>[^-]+) ( + -(?P<plat>.+) + )? + )? + )? + """, + re.VERBOSE | re.IGNORECASE, +).match + + +class EntryPoint(object): + """Object representing an advertised importable object""" + + def __init__(self, name, module_name, attrs=(), extras=(), dist=None): + if not MODULE(module_name): + raise ValueError("Invalid module name", module_name) + self.name = name + self.module_name = module_name + self.attrs = tuple(attrs) + self.extras = tuple(extras) + self.dist = dist + + def __str__(self): + s = "%s = %s" % (self.name, self.module_name) + if self.attrs: + s += ':' + '.'.join(self.attrs) + if self.extras: + s += ' [%s]' % ','.join(self.extras) + return s + + def __repr__(self): + return "EntryPoint.parse(%r)" % str(self) + + def load(self, require=True, *args, **kwargs): + """ + Require packages for this EntryPoint, then resolve it. + """ + if not require or args or kwargs: + warnings.warn( + "Parameters to load are deprecated. Call .resolve and " + ".require separately.", + DeprecationWarning, + stacklevel=2, + ) + if require: + self.require(*args, **kwargs) + return self.resolve() + + def resolve(self): + """ + Resolve the entry point from its module and attrs. + """ + module = __import__(self.module_name, fromlist=['__name__'], level=0) + try: + return functools.reduce(getattr, self.attrs, module) + except AttributeError as exc: + raise ImportError(str(exc)) + + def require(self, env=None, installer=None): + if self.extras and not self.dist: + raise UnknownExtra("Can't require() without a distribution", self) + + # Get the requirements for this entry point with all its extras and + # then resolve them. We have to pass `extras` along when resolving so + # that the working set knows what extras we want. Otherwise, for + # dist-info distributions, the working set will assume that the + # requirements for that extra are purely optional and skip over them. + reqs = self.dist.requires(self.extras) + items = working_set.resolve(reqs, env, installer, extras=self.extras) + list(map(working_set.add, items)) + + pattern = re.compile( + r'\s*' + r'(?P<name>.+?)\s*' + r'=\s*' + r'(?P<module>[\w.]+)\s*' + r'(:\s*(?P<attr>[\w.]+))?\s*' + r'(?P<extras>\[.*\])?\s*$' + ) + + @classmethod + def parse(cls, src, dist=None): + """Parse a single entry point from string `src` + + Entry point syntax follows the form:: + + name = some.module:some.attr [extra1, extra2] + + The entry name and module name are required, but the ``:attrs`` and + ``[extras]`` parts are optional + """ + m = cls.pattern.match(src) + if not m: + msg = "EntryPoint must be in 'name=module:attrs [extras]' format" + raise ValueError(msg, src) + res = m.groupdict() + extras = cls._parse_extras(res['extras']) + attrs = res['attr'].split('.') if res['attr'] else () + return cls(res['name'], res['module'], attrs, extras, dist) + + @classmethod + def _parse_extras(cls, extras_spec): + if not extras_spec: + return () + req = Requirement.parse('x' + extras_spec) + if req.specs: + raise ValueError() + return req.extras + + @classmethod + def parse_group(cls, group, lines, dist=None): + """Parse an entry point group""" + if not MODULE(group): + raise ValueError("Invalid group name", group) + this = {} + for line in yield_lines(lines): + ep = cls.parse(line, dist) + if ep.name in this: + raise ValueError("Duplicate entry point", group, ep.name) + this[ep.name] = ep + return this + + @classmethod + def parse_map(cls, data, dist=None): + """Parse a map of entry point groups""" + if isinstance(data, dict): + data = data.items() + else: + data = split_sections(data) + maps = {} + for group, lines in data: + if group is None: + if not lines: + continue + raise ValueError("Entry points must be listed in groups") + group = group.strip() + if group in maps: + raise ValueError("Duplicate group name", group) + maps[group] = cls.parse_group(group, lines, dist) + return maps + + +def _remove_md5_fragment(location): + if not location: + return '' + parsed = urllib.parse.urlparse(location) + if parsed[-1].startswith('md5='): + return urllib.parse.urlunparse(parsed[:-1] + ('',)) + return location + + +def _version_from_file(lines): + """ + Given an iterable of lines from a Metadata file, return + the value of the Version field, if present, or None otherwise. + """ + def is_version_line(line): + return line.lower().startswith('version:') + version_lines = filter(is_version_line, lines) + line = next(iter(version_lines), '') + _, _, value = line.partition(':') + return safe_version(value.strip()) or None + + +class Distribution(object): + """Wrap an actual or potential sys.path entry w/metadata""" + PKG_INFO = 'PKG-INFO' + + def __init__( + self, location=None, metadata=None, project_name=None, + version=None, py_version=PY_MAJOR, platform=None, + precedence=EGG_DIST): + self.project_name = safe_name(project_name or 'Unknown') + if version is not None: + self._version = safe_version(version) + self.py_version = py_version + self.platform = platform + self.location = location + self.precedence = precedence + self._provider = metadata or empty_provider + + @classmethod + def from_location(cls, location, basename, metadata=None, **kw): + project_name, version, py_version, platform = [None] * 4 + basename, ext = os.path.splitext(basename) + if ext.lower() in _distributionImpl: + cls = _distributionImpl[ext.lower()] + + match = EGG_NAME(basename) + if match: + project_name, version, py_version, platform = match.group( + 'name', 'ver', 'pyver', 'plat' + ) + return cls( + location, metadata, project_name=project_name, version=version, + py_version=py_version, platform=platform, **kw + )._reload_version() + + def _reload_version(self): + return self + + @property + def hashcmp(self): + return ( + self.parsed_version, + self.precedence, + self.key, + _remove_md5_fragment(self.location), + self.py_version or '', + self.platform or '', + ) + + def __hash__(self): + return hash(self.hashcmp) + + def __lt__(self, other): + return self.hashcmp < other.hashcmp + + def __le__(self, other): + return self.hashcmp <= other.hashcmp + + def __gt__(self, other): + return self.hashcmp > other.hashcmp + + def __ge__(self, other): + return self.hashcmp >= other.hashcmp + + def __eq__(self, other): + if not isinstance(other, self.__class__): + # It's not a Distribution, so they are not equal + return False + return self.hashcmp == other.hashcmp + + def __ne__(self, other): + return not self == other + + # These properties have to be lazy so that we don't have to load any + # metadata until/unless it's actually needed. (i.e., some distributions + # may not know their name or version without loading PKG-INFO) + + @property + def key(self): + try: + return self._key + except AttributeError: + self._key = key = self.project_name.lower() + return key + + @property + def parsed_version(self): + if not hasattr(self, "_parsed_version"): + self._parsed_version = parse_version(self.version) + + return self._parsed_version + + def _warn_legacy_version(self): + LV = packaging.version.LegacyVersion + is_legacy = isinstance(self._parsed_version, LV) + if not is_legacy: + return + + # While an empty version is technically a legacy version and + # is not a valid PEP 440 version, it's also unlikely to + # actually come from someone and instead it is more likely that + # it comes from setuptools attempting to parse a filename and + # including it in the list. So for that we'll gate this warning + # on if the version is anything at all or not. + if not self.version: + return + + tmpl = textwrap.dedent(""" + '{project_name} ({version})' is being parsed as a legacy, + non PEP 440, + version. You may find odd behavior and sort order. + In particular it will be sorted as less than 0.0. It + is recommended to migrate to PEP 440 compatible + versions. + """).strip().replace('\n', ' ') + + warnings.warn(tmpl.format(**vars(self)), PEP440Warning) + + @property + def version(self): + try: + return self._version + except AttributeError: + version = _version_from_file(self._get_metadata(self.PKG_INFO)) + if version is None: + tmpl = "Missing 'Version:' header and/or %s file" + raise ValueError(tmpl % self.PKG_INFO, self) + return version + + @property + def _dep_map(self): + """ + A map of extra to its list of (direct) requirements + for this distribution, including the null extra. + """ + try: + return self.__dep_map + except AttributeError: + self.__dep_map = self._filter_extras(self._build_dep_map()) + return self.__dep_map + + @staticmethod + def _filter_extras(dm): + """ + Given a mapping of extras to dependencies, strip off + environment markers and filter out any dependencies + not matching the markers. + """ + for extra in list(filter(None, dm)): + new_extra = extra + reqs = dm.pop(extra) + new_extra, _, marker = extra.partition(':') + fails_marker = marker and ( + invalid_marker(marker) + or not evaluate_marker(marker) + ) + if fails_marker: + reqs = [] + new_extra = safe_extra(new_extra) or None + + dm.setdefault(new_extra, []).extend(reqs) + return dm + + def _build_dep_map(self): + dm = {} + for name in 'requires.txt', 'depends.txt': + for extra, reqs in split_sections(self._get_metadata(name)): + dm.setdefault(extra, []).extend(parse_requirements(reqs)) + return dm + + def requires(self, extras=()): + """List of Requirements needed for this distro if `extras` are used""" + dm = self._dep_map + deps = [] + deps.extend(dm.get(None, ())) + for ext in extras: + try: + deps.extend(dm[safe_extra(ext)]) + except KeyError: + raise UnknownExtra( + "%s has no such extra feature %r" % (self, ext) + ) + return deps + + def _get_metadata(self, name): + if self.has_metadata(name): + for line in self.get_metadata_lines(name): + yield line + + def activate(self, path=None, replace=False): + """Ensure distribution is importable on `path` (default=sys.path)""" + if path is None: + path = sys.path + self.insert_on(path, replace=replace) + if path is sys.path: + fixup_namespace_packages(self.location) + for pkg in self._get_metadata('namespace_packages.txt'): + if pkg in sys.modules: + declare_namespace(pkg) + + def egg_name(self): + """Return what this distribution's standard .egg filename should be""" + filename = "%s-%s-py%s" % ( + to_filename(self.project_name), to_filename(self.version), + self.py_version or PY_MAJOR + ) + + if self.platform: + filename += '-' + self.platform + return filename + + def __repr__(self): + if self.location: + return "%s (%s)" % (self, self.location) + else: + return str(self) + + def __str__(self): + try: + version = getattr(self, 'version', None) + except ValueError: + version = None + version = version or "[unknown version]" + return "%s %s" % (self.project_name, version) + + def __getattr__(self, attr): + """Delegate all unrecognized public attributes to .metadata provider""" + if attr.startswith('_'): + raise AttributeError(attr) + return getattr(self._provider, attr) + + @classmethod + def from_filename(cls, filename, metadata=None, **kw): + return cls.from_location( + _normalize_cached(filename), os.path.basename(filename), metadata, + **kw + ) + + def as_requirement(self): + """Return a ``Requirement`` that matches this distribution exactly""" + if isinstance(self.parsed_version, packaging.version.Version): + spec = "%s==%s" % (self.project_name, self.parsed_version) + else: + spec = "%s===%s" % (self.project_name, self.parsed_version) + + return Requirement.parse(spec) + + def load_entry_point(self, group, name): + """Return the `name` entry point of `group` or raise ImportError""" + ep = self.get_entry_info(group, name) + if ep is None: + raise ImportError("Entry point %r not found" % ((group, name),)) + return ep.load() + + def get_entry_map(self, group=None): + """Return the entry point map for `group`, or the full entry map""" + try: + ep_map = self._ep_map + except AttributeError: + ep_map = self._ep_map = EntryPoint.parse_map( + self._get_metadata('entry_points.txt'), self + ) + if group is not None: + return ep_map.get(group, {}) + return ep_map + + def get_entry_info(self, group, name): + """Return the EntryPoint object for `group`+`name`, or ``None``""" + return self.get_entry_map(group).get(name) + + def insert_on(self, path, loc=None, replace=False): + """Ensure self.location is on path + + If replace=False (default): + - If location is already in path anywhere, do nothing. + - Else: + - If it's an egg and its parent directory is on path, + insert just ahead of the parent. + - Else: add to the end of path. + If replace=True: + - If location is already on path anywhere (not eggs) + or higher priority than its parent (eggs) + do nothing. + - Else: + - If it's an egg and its parent directory is on path, + insert just ahead of the parent, + removing any lower-priority entries. + - Else: add it to the front of path. + """ + + loc = loc or self.location + if not loc: + return + + nloc = _normalize_cached(loc) + bdir = os.path.dirname(nloc) + npath = [(p and _normalize_cached(p) or p) for p in path] + + for p, item in enumerate(npath): + if item == nloc: + if replace: + break + else: + # don't modify path (even removing duplicates) if + # found and not replace + return + elif item == bdir and self.precedence == EGG_DIST: + # if it's an .egg, give it precedence over its directory + # UNLESS it's already been added to sys.path and replace=False + if (not replace) and nloc in npath[p:]: + return + if path is sys.path: + self.check_version_conflict() + path.insert(p, loc) + npath.insert(p, nloc) + break + else: + if path is sys.path: + self.check_version_conflict() + if replace: + path.insert(0, loc) + else: + path.append(loc) + return + + # p is the spot where we found or inserted loc; now remove duplicates + while True: + try: + np = npath.index(nloc, p + 1) + except ValueError: + break + else: + del npath[np], path[np] + # ha! + p = np + + return + + def check_version_conflict(self): + if self.key == 'setuptools': + # ignore the inevitable setuptools self-conflicts :( + return + + nsp = dict.fromkeys(self._get_metadata('namespace_packages.txt')) + loc = normalize_path(self.location) + for modname in self._get_metadata('top_level.txt'): + if (modname not in sys.modules or modname in nsp + or modname in _namespace_packages): + continue + if modname in ('pkg_resources', 'setuptools', 'site'): + continue + fn = getattr(sys.modules[modname], '__file__', None) + if fn and (normalize_path(fn).startswith(loc) or + fn.startswith(self.location)): + continue + issue_warning( + "Module %s was already imported from %s, but %s is being added" + " to sys.path" % (modname, fn, self.location), + ) + + def has_version(self): + try: + self.version + except ValueError: + issue_warning("Unbuilt egg for " + repr(self)) + return False + return True + + def clone(self, **kw): + """Copy this distribution, substituting in any changed keyword args""" + names = 'project_name version py_version platform location precedence' + for attr in names.split(): + kw.setdefault(attr, getattr(self, attr, None)) + kw.setdefault('metadata', self._provider) + return self.__class__(**kw) + + @property + def extras(self): + return [dep for dep in self._dep_map if dep] + + +class EggInfoDistribution(Distribution): + def _reload_version(self): + """ + Packages installed by distutils (e.g. numpy or scipy), + which uses an old safe_version, and so + their version numbers can get mangled when + converted to filenames (e.g., 1.11.0.dev0+2329eae to + 1.11.0.dev0_2329eae). These distributions will not be + parsed properly + downstream by Distribution and safe_version, so + take an extra step and try to get the version number from + the metadata file itself instead of the filename. + """ + md_version = _version_from_file(self._get_metadata(self.PKG_INFO)) + if md_version: + self._version = md_version + return self + + +class DistInfoDistribution(Distribution): + """ + Wrap an actual or potential sys.path entry + w/metadata, .dist-info style. + """ + PKG_INFO = 'METADATA' + EQEQ = re.compile(r"([\(,])\s*(\d.*?)\s*([,\)])") + + @property + def _parsed_pkg_info(self): + """Parse and cache metadata""" + try: + return self._pkg_info + except AttributeError: + metadata = self.get_metadata(self.PKG_INFO) + self._pkg_info = email.parser.Parser().parsestr(metadata) + return self._pkg_info + + @property + def _dep_map(self): + try: + return self.__dep_map + except AttributeError: + self.__dep_map = self._compute_dependencies() + return self.__dep_map + + def _compute_dependencies(self): + """Recompute this distribution's dependencies.""" + dm = self.__dep_map = {None: []} + + reqs = [] + # Including any condition expressions + for req in self._parsed_pkg_info.get_all('Requires-Dist') or []: + reqs.extend(parse_requirements(req)) + + def reqs_for_extra(extra): + for req in reqs: + if not req.marker or req.marker.evaluate({'extra': extra}): + yield req + + common = frozenset(reqs_for_extra(None)) + dm[None].extend(common) + + for extra in self._parsed_pkg_info.get_all('Provides-Extra') or []: + s_extra = safe_extra(extra.strip()) + dm[s_extra] = list(frozenset(reqs_for_extra(extra)) - common) + + return dm + + +_distributionImpl = { + '.egg': Distribution, + '.egg-info': EggInfoDistribution, + '.dist-info': DistInfoDistribution, +} + + +def issue_warning(*args, **kw): + level = 1 + g = globals() + try: + # find the first stack frame that is *not* code in + # the pkg_resources module, to use for the warning + while sys._getframe(level).f_globals is g: + level += 1 + except ValueError: + pass + warnings.warn(stacklevel=level + 1, *args, **kw) + + +class RequirementParseError(ValueError): + def __str__(self): + return ' '.join(self.args) + + +def parse_requirements(strs): + """Yield ``Requirement`` objects for each specification in `strs` + + `strs` must be a string, or a (possibly-nested) iterable thereof. + """ + # create a steppable iterator, so we can handle \-continuations + lines = iter(yield_lines(strs)) + + for line in lines: + # Drop comments -- a hash without a space may be in a URL. + if ' #' in line: + line = line[:line.find(' #')] + # If there is a line continuation, drop it, and append the next line. + if line.endswith('\\'): + line = line[:-2].strip() + try: + line += next(lines) + except StopIteration: + return + yield Requirement(line) + + +class Requirement(packaging.requirements.Requirement): + def __init__(self, requirement_string): + """DO NOT CALL THIS UNDOCUMENTED METHOD; use Requirement.parse()!""" + try: + super(Requirement, self).__init__(requirement_string) + except packaging.requirements.InvalidRequirement as e: + raise RequirementParseError(str(e)) + self.unsafe_name = self.name + project_name = safe_name(self.name) + self.project_name, self.key = project_name, project_name.lower() + self.specs = [ + (spec.operator, spec.version) for spec in self.specifier] + self.extras = tuple(map(safe_extra, self.extras)) + self.hashCmp = ( + self.key, + self.specifier, + frozenset(self.extras), + str(self.marker) if self.marker else None, + ) + self.__hash = hash(self.hashCmp) + + def __eq__(self, other): + return ( + isinstance(other, Requirement) and + self.hashCmp == other.hashCmp + ) + + def __ne__(self, other): + return not self == other + + def __contains__(self, item): + if isinstance(item, Distribution): + if item.key != self.key: + return False + + item = item.version + + # Allow prereleases always in order to match the previous behavior of + # this method. In the future this should be smarter and follow PEP 440 + # more accurately. + return self.specifier.contains(item, prereleases=True) + + def __hash__(self): + return self.__hash + + def __repr__(self): + return "Requirement.parse(%r)" % str(self) + + @staticmethod + def parse(s): + req, = parse_requirements(s) + return req + + +def _always_object(classes): + """ + Ensure object appears in the mro even + for old-style classes. + """ + if object not in classes: + return classes + (object,) + return classes + + +def _find_adapter(registry, ob): + """Return an adapter factory for `ob` from `registry`""" + types = _always_object(inspect.getmro(getattr(ob, '__class__', type(ob)))) + for t in types: + if t in registry: + return registry[t] + + +def ensure_directory(path): + """Ensure that the parent directory of `path` exists""" + dirname = os.path.dirname(path) + py31compat.makedirs(dirname, exist_ok=True) + + +def _bypass_ensure_directory(path): + """Sandbox-bypassing version of ensure_directory()""" + if not WRITE_SUPPORT: + raise IOError('"os.mkdir" not supported on this platform.') + dirname, filename = split(path) + if dirname and filename and not isdir(dirname): + _bypass_ensure_directory(dirname) + mkdir(dirname, 0o755) + + +def split_sections(s): + """Split a string or iterable thereof into (section, content) pairs + + Each ``section`` is a stripped version of the section header ("[section]") + and each ``content`` is a list of stripped lines excluding blank lines and + comment-only lines. If there are any such lines before the first section + header, they're returned in a first ``section`` of ``None``. + """ + section = None + content = [] + for line in yield_lines(s): + if line.startswith("["): + if line.endswith("]"): + if section or content: + yield section, content + section = line[1:-1].strip() + content = [] + else: + raise ValueError("Invalid section heading", line) + else: + content.append(line) + + # wrap up last segment + yield section, content + + +def _mkstemp(*args, **kw): + old_open = os.open + try: + # temporarily bypass sandboxing + os.open = os_open + return tempfile.mkstemp(*args, **kw) + finally: + # and then put it back + os.open = old_open + + +# Silence the PEP440Warning by default, so that end users don't get hit by it +# randomly just because they use pkg_resources. We want to append the rule +# because we want earlier uses of filterwarnings to take precedence over this +# one. +warnings.filterwarnings("ignore", category=PEP440Warning, append=True) + + +# from jaraco.functools 1.3 +def _call_aside(f, *args, **kwargs): + f(*args, **kwargs) + return f + + +@_call_aside +def _initialize(g=globals()): + "Set up global resource manager (deliberately not state-saved)" + manager = ResourceManager() + g['_manager'] = manager + g.update( + (name, getattr(manager, name)) + for name in dir(manager) + if not name.startswith('_') + ) + + +@_call_aside +def _initialize_master_working_set(): + """ + Prepare the master working set and make the ``require()`` + API available. + + This function has explicit effects on the global state + of pkg_resources. It is intended to be invoked once at + the initialization of this module. + + Invocation by other packages is unsupported and done + at their own risk. + """ + working_set = WorkingSet._build_master() + _declare_state('object', working_set=working_set) + + require = working_set.require + iter_entry_points = working_set.iter_entry_points + add_activation_listener = working_set.subscribe + run_script = working_set.run_script + # backward compatibility + run_main = run_script + # Activate all distributions already on sys.path with replace=False and + # ensure that all distributions added to the working set in the future + # (e.g. by calling ``require()``) will get activated as well, + # with higher priority (replace=True). + tuple( + dist.activate(replace=False) + for dist in working_set + ) + add_activation_listener( + lambda dist: dist.activate(replace=True), + existing=False, + ) + working_set.entries = [] + # match order + list(map(working_set.add_entry, sys.path)) + globals().update(locals()) diff --git a/week-0/day-3/venv/lib/python3.6/site-packages/pkg_resources/__pycache__/__init__.cpython-36.pyc b/week-0/day-3/venv/lib/python3.6/site-packages/pkg_resources/__pycache__/__init__.cpython-36.pyc new file mode 100644 index 0000000000000000000000000000000000000000..4d4668745b40083ea0b836ab2739f3a9e2e01b8c GIT binary patch literal 95310 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 literal 0 HcmV?d00001 diff --git a/week-0/day-3/venv/lib/python3.6/site-packages/pkg_resources/__pycache__/py31compat.cpython-36.pyc b/week-0/day-3/venv/lib/python3.6/site-packages/pkg_resources/__pycache__/py31compat.cpython-36.pyc new file mode 100644 index 0000000000000000000000000000000000000000..88855a60ba6419726da54f7f3cb8884efcfe7394 GIT binary patch literal 657 zcmYjO!EVz)5S`g|(kOM@w8#8`4<Rb4;DS&qNF_M5haeFwfz^5!YCEybtb>v&<pBH) zzqD6Q{sm6#qzcMf^E@+eH1l?L-0O8OuAhIL34lMacRc5xJ2T`!fx<aNkAIAC8;eM& zLnW2>3nQsT<|#ji>XYiR?}3CI%X1avP<R56nWH@>QvDqhwRDT_v@ARgSvzVgoI-fq zxVdn3nK)tFBOUggy>e#WI#>raWVnH!i0~eYXCBld@6v082Z3-u*q{&Q=|*I-mYJ7J zI{V@3KJX=6#dk4-!kGd$46nkL6{WGA#Z9hNO2!^sPbWkr*_I|MO52`HW^bnNLTSC~ zroOWsy-H0Tm${XCmHY<kI!S*oM)jf^RcST6U8Zw2G+)i?cA1=ws{G54v?-UAXv0yw z7p=#qNx5)spHyq>$2$%2__WQJ<<5Wt1MK4olJBC1x6$xwnid1sHT+}^ItcMHl+<$` z1q?@=6OReb?#OKg?{r5V?~&}&2`3JS2N4gl(yYx^f%U&>GHF@FY4N$VL7}xW|D_Y_ g+pc5}4!J?+#iCTpxqit)4a@7G`()Se;s6KYAH$-H_5c6? literal 0 HcmV?d00001 diff --git a/week-0/day-3/venv/lib/python3.6/site-packages/pkg_resources/_vendor/__init__.py b/week-0/day-3/venv/lib/python3.6/site-packages/pkg_resources/_vendor/__init__.py new file mode 100644 index 00000000..e69de29b diff --git a/week-0/day-3/venv/lib/python3.6/site-packages/pkg_resources/_vendor/__pycache__/__init__.cpython-36.pyc b/week-0/day-3/venv/lib/python3.6/site-packages/pkg_resources/_vendor/__pycache__/__init__.cpython-36.pyc new file mode 100644 index 0000000000000000000000000000000000000000..f8bd10b3f21c5e037600103ab8659a02799231c2 GIT binary patch literal 154 zcmXr!<>hkpH;-iig2x~N1{i@12OutH0TL+;!3>&=ek&P@K*9*(m%DyRZh?M5W`S-} zX=YA}ZgF98MN(<9iGD$Lx^7Wwaeir0a%wS%7mwh@m!;;V<QM73$7kkcmc+;F6;$5h Su*uC&Da}c>16fcE#0&tA&L=bg literal 0 HcmV?d00001 diff --git a/week-0/day-3/venv/lib/python3.6/site-packages/pkg_resources/_vendor/__pycache__/appdirs.cpython-36.pyc b/week-0/day-3/venv/lib/python3.6/site-packages/pkg_resources/_vendor/__pycache__/appdirs.cpython-36.pyc new file mode 100644 index 0000000000000000000000000000000000000000..14caf30c67d53c0baa0f047cdf45cfaf70d57a29 GIT binary patch literal 18580 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 Xeke!7t_w1t$MKyDzv+ywhw%Mh@BiG{ literal 0 HcmV?d00001 diff --git a/week-0/day-3/venv/lib/python3.6/site-packages/pkg_resources/_vendor/__pycache__/pyparsing.cpython-36.pyc b/week-0/day-3/venv/lib/python3.6/site-packages/pkg_resources/_vendor/__pycache__/pyparsing.cpython-36.pyc new file mode 100644 index 0000000000000000000000000000000000000000..c1f8fd19dd85d18d66e9068423c465e9eeb67d93 GIT binary patch literal 201076 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⪚@bX#|BH79j$)oBKJ($*&PY_f@1tt_oui8DVz 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ؗ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≷M62o1jg7!^2BPSnrxCj^!L!3BOzwp5Jm)`$k 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≦of2(^Ydy<WMK5qbTQIM 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 j4xmwFar#Gq%Tb;PkY>y`GADC|B zAf#C=`w<=yA8toR{OMcO&^!@0h1_uKVS=p58bKm-ST~dA#?*WXsjfT|$udTklT3$n zIBrv??&V_Ba#uVpSlZa(Fi_PpHLD#GRGtM)&Y}99K<f%MN7@m4<Ng-9CT@#9r=$Nn z`cCTcW*^+eE~R7WkJ*e`bJ)^<B%g=ub37_#aW})_N|b0j&7k`0s#Tz+S%|9Vl}FYL z%FL`rs?KIl?b7*Zlu{GxJL)_0>P%DD-8L2}KKmHcvFgQ&51D#IT7c%@xoY)-Ni~@J zW|1Po#DtPQg(SXOajMb2^KNaT@7It&pneS!GORrBJp*i-Q1kv5`r2ko3ZpwUTSw`m zGIwt@O(_ZB?Vog}NHin~%qceJ2%iSLHgz50Mx7UhJnu;-&$sJ(Hd9V-uOst!V>k<? z!hX<36-=MxxAqj5x69%x7Qx;B4jzW1@#f+%yxWs9?||^_18Sy4_%@hs?mq#s+qC-V z#I7cGyUqI7DsVINu>Kn;Ex*Vva7JOP=qp8^ek~SC79U|}76x{$q^+E%a7NNLlCcFN zCt0P>ByHXn%)XU9Ske1-TaGaDgDX5YR$-^*y}hooo_7YU?1sv1ltq4rWNr}2+{Wl` znrxJfgXrkJ?M=mE|81gDzYPxDg7gOMe}tP9D`HfkIc3WL_^CQsXXpCrB;Sd4>rRF< z%Q8XHQ%m+{#-p-fC+0KPHPU>Oob9vFEjXExpt&0wQfc41NX?^E&QNju#YmFGZ{2h2 z`MaLKr0kiov^{epe7a4gV!in7&azt5<k$=|*!?OWn*%_uODE0eHD#x|O(k#F#k{l4 zX3;#rj4)|2#9juhn18f$njGe1%%j-bD|<@6tbMFrIZtVMN6Rd?0L0Tjd5Y;@<F2DJ z$@Sj%`xnkA)N5d@65W+Rn@)v+H{o+;j5%N~<sO)raN`>P25z=>j7p(=q3JW4qG0E& zNObsF*%-`z=1s)Ux{#dIf$ou9<J&roBoMk8Kn<>NBiYK0^LwVR=G)9l%e33=ll$!{ z$p~fVZ^lUn=(U;1Ti1V=*CX?HaQ>UEN+^Bxin{55p3HINjMv!GsjDp>#Q_$ov*AEU z)fUL_r(r~3RB-HFXm!)&IT1cso(0`y9eWqH-BfAs)a%^5Z_=UHj)8e&X?`I0KCc;C zulqKCeid8R<ZPf!?8~c_lqVyuVct*CQD5=S?BLHE=0==U0xaC3$rF@W7-beP&JGKS zVYYW*vmTq*nDuxiKU|ggZgtkN{R%O}I(m=AY!^YCu{))fPCs!M?esj&gC(F0JnTj- z<&rtaT6!0DUF<gN{21xB+lf!=4(}X;fHCapi8N$)ip(&_d)*|4IW0EuD)i}OKNihM zjB$*1+K*YB7q(+&ERSj|oqFwH!#KUB->%o(w|QRLDM~yqegEZo8GTxpmj0{cXOmUf zz#3px)DeWWIbO1WiR<@=`EX0F-|~|;gU9HoIe{DA(KDBn5vU<ADIlN1U9~!a+aCL( zmMU=qw~^1&DMv(@W&BE;Pp|%{hRrW0C3XTIA*OpAb|Sk4<E$a_qm(<zXVvx(>GH$6 zBz}};T$Q*`+Bq-_D_axm@+!28#&tsd(g`;2$qfUAVjsSfx@J8mwQcls>+w}J=<>g1 z<&6kAw77V#e5P8iIJ-^b+Au~B{*DIlQwBIYN?5ZWSafN*p1$hhwN(~T?fA@MA-p+N z=w;Q26!vVLU~K6K$}Y?~hnoW1N@ry#KY!J_1dBv^5E+xo*j-(*wAwr(c8#!Wsyo3J z-k0=I>#Ux*)z&U!v3j|DwMMYG`lV<APtelBB^0CPp+k_iT74BWc*T)RMjy;wsbju; zvN~^rC=pqj@tB3bPhX}Wc%`vDiOQ%_u9s&nqgh2)Wy(YEMrj={@#Cs{qLdVTAl2|V zbtRfFskvhBOs6b#Z$D5v?p;8wJo>^T!FMy%tE7C37mh4EVecr=bKRiVUQDkR$pwaW z{@mi(g;ZMT(8r{<(1VtQU>OBVMxW!gIP?!ws`=`v`Y5kDORN?2QJ9fgby5j<?UGsb zn@U0toqEZhN$jsjN%gU2DZpJ0K)@rGAtOO`qI<osCg{#!&~%L7bb1_ND*7_U$R5`j z{4p47obyjm_RBiYqV_~LHf~Gy&I&}K&h;d}-fT7|1+U|K7J}n}ZF3GwN!CEmj4C)H z;Ahr9D+Sv9g`_WV-Xp2L*s+R3x%b@wzO4emG&}!Lt%$ZQV(G9_RA`aBY0k^IC5T+O zr93{}Efx;OKVi6qUF&9EEDOxqE=-^oHji<-zyy+6mdP8yGNQHZUHI#VV`&h2-po5! zhiH3=P^o<KzWb&0`?YgtFO(!{k_(c{uNiVYDcWUv$Tx(ArP8W?>tnAbrm8E#O<SwZ zCr>s&E1W#|of$lXaS?^&_F+U~r5NJOjRzJl5%}oR!etUkff@{cZ!5)#N3>DgK{ftD zr_}`oF-pNAgLra!<-_~y+RBbXU5D@r#nf6icPkuT2{7&OijJh$qSZvL<%nd93L?$H zr4O@b+<rk_d=re@Z^Z{rp*jIF>wF)>q0aDX0l+9m)rvy39TnuzqQEro6%zTd7UDnU zx`>71S9rIPd-d81*7l;l3_!u97;I{xJHN>HUsbQu!Yf$L;V`=<EfcZTIVz_ht4k@N zs#c3gp>6O_)s&X8H~>WI8(1MO=Qt$-OzH~|ssBU|%0CB@@&<`|nS_4w<{ZZ3_beGr zP3Afkyx|4yHOu;~9pKV=f1@cR$ovxfoBgrF<SnSE<o{|c*5gY(Ye~{>a+YGiLOu-A ze<NbvCcz{cK}M3uMVkE!i}e`-iB+Q*L1>>h3l7^8NzT4%<04h*H#J`pqzPw9x@*kY zrtEk-909$eUpoT7%#Aw&1e;{zU|0*!sG*@CEkyU~6W&~X-0vpivmFy~9I}0RRmr{1 z`>q$So}g^+AXTF_{dUTqOqK7CBC?~{+sgwB<YZhPusTRz<~`TfEUl@1KPu7!UgOjF zdaaQX^5XP!U8qtwqe?~KbxNLRSiS0>iyufIc*;8WOvOSL3}_8>n0!UKWTKzdDww$c zx<1N1+?`*U-{S4s0WIUAT%A8<#M+FV&*q3d5Xhb}X53;OH`f@q=+>_}RFAICgyoF> zTdm{pnR4ym=>=kBn2<mESv~AW=I<TNTTYxX<{xWWB`#AiT<7Ri%xiH+V1XpE*F6UW z@w~!+twU&llhfvwWe-qALG?JGg;r`IIh(5x3fjQmP=9n-;G2t)p3JIq@eiN7p5oU6 zHHLFZ_9f?+2c01Hus4z-tbCn%49k%BT~PwXY~U4<RzUGFAq5h53Fp&c?;a(!;Q1=H z{c)6$?Z#<f5Rw#kOv(96xQsY7oo=Fj_I%alIpiI8(6~uOv!0^#@<g^m$#=`-h>1u> zh!-8~QVsPO(W6{KW_SU9#>E}Mu{a%*I1J;9e8JM?#Y^)f!H7Wi<wyZjT;EiNd{Oa) z*dSef$$%!@16`c~RC{Qcz$^T<Gb^jHCt-AoSx-;B&1Gzo=PZE|h9JX@jE0wQ$kSLv z{J^S|a0qdZE(obA-q>wS>6bNWm^<Q8#B=uEf_mlnGUpT1!pyk-h)oH7aTb<-9|a>y zQwW4^nwjM*i)Sk=w4?Q08;-G7M>w!B*KWh8Q=$66v@uzK1#DyJ@_1-C%PqFd?3S#f zP0MsSN1IN3p3DkcdBT^%pu>$^+I48+_)1BLp-?30XlZL{eAl*#)%t61y)%@SQ(5Mh zl{2?3KEut>TK5o?sFl`QAJzj*ZsgV!m3NYCeGvegk{l-dtsrlosx~0LIiJhGZ#~pc z?J+JH`0aFKu|2!9ZkMJ_c?yE24UL&NzQIVWV)-)o%Vzk<1;KVQ-KO9go4Zks7K5q5 zI|S)7ZTx2i>ap}Ze^$u_;i3;+3md};_Y%Ukhn3K(>aXd-(uA!-{=WeUWO*Q+*rW#n zA^JJ+c#xiGEmP7HFP}EDO6A&>8X_hhjkj1AluF~a6D+k0K-Pf-Rrf@KS{EfvzdDlb zWN_Gr_BOI_r?;W=@ywq`($2Pnw&``6Nb9o6b&WMM(ypV#rM>fdYtR2*-n&P~eWv$) zzzi+}5CkELqA0Ca9)YAVAOVm7DN2MuN+3vTxl2)6ky=RvDeM3<AVK0n{bnGNL%`0O zyIa}LZtZh&JIy9;ZJ)$VeA34CIc@xh?fRU$wVkGR-8lBtO&rJeIqSN1le+ftwr=|Q zKJWXx%?wCtz3cR(kocS5<-K2?_qji6ydxnqG+!?I5*>(;sc#eDc!n0#I<9`xfaBE` zfMaK({Sjl_P{BVht)`(q5RO-F8?yV3{xsJ+!U^*vjbVxu5ie)US#UyA`UH-MM(e8g z&Ru}Ddr6+nQzOi<I4VW!rPNN^%!RX|>dTMtE&=cE=<$!Zd|FLY3-C_;cw8{6aDHuV z8HYzIRe$<zRf7dceo!rfw67;>*_o=v1L-D&TWt$oqe5qm6l4A|r2Z+IeNF{;krp{M zD1M-KtpT?7O+2^^Y-2E)kU<B~Hi!2R%YbW{9`y!Nr7RZNe`#=S2x*gaAx1+z@93LC z!M6s?VLb3csJA8D8&TGJS)dNLI8Fv2qi=^Gh3S$QzmI6+-St?vnsMa4`L{2Mr(NY} zT39RL=CO#AZfsTZFN~I!t|1SoE!`T)-&$U;;55gdVMqO^57vvz5_tqxxKMEtgOxQ| zHIL9PqMx65L7oo7qp&bEn)06$COSHtVA@mQ*2XJ)^SC}M8P!DdFQ0qUx)3!+4Z?}e z(HBy0QV)BT>)=u0rYorr;}heD$43tzK0Ka!oqE^{o^0|(6_WaL{G}I<y)c@3h4so7 z0)mJ1BHaVCNk94m0Vt!=TlS$v`;|59R62jFZnWq^-bHWFu%4YhcYZQ|CX7%CQ^rtr z(F$On7BwmV!thAGAa}x(<7jZMEl(bE0}wHsbl64b@)!@vBhNS~k{%ep#RRJvuASb} zK!;t2@i?UWaw&{aVhYhl$=l&<TqfM|q@4!Yrz~%qk3MCshM-*Mwz*h)EL^fJPHyo| zBj%A9T6dqJ$)1CnVhG^?X!R0|8)?dladXR`;BYH(PuLS&w|rf}`{q`><C?UXOqvX1 zNF{bnwSBP69bYy(Ry)u~#~ILS2EF;vjbMW5lS?ptA_O4NP}Cov3pX-sOXC5eWN8km z2WdX|gB>IdVi_@S8V?uY2{jGYF7inp{S0`5e9XXv$@JoFrnWO0xW5RDA^4=`^qZnI zK2kRtxVi&T<0Ew863nz#q{dHkCOQ1jFfOA!9>7J?D*bG@%5sD7t-5;qTc2s-dnM1b zk_*BjH+?;z4ZYr>aHpMQU2KYNf%w72e~Xs^gAj&980{@yokDLr5sPeUkwYl%u7nWU zx$CfRkSD`@u~U!N@i~`p{AR^&ec%y}mw*?^tSiMpE_|)z5K>TyaT?rlW=$)X97r1l ztS&6Ca~7p|P-mfd#f0L-yA-UKor}5V$~g6mG`0m-%12NVUX-z(Gzejbi-4`>5{mfm zjm}pX5ykw(s8{|rG5fG%z0o?Sg_LflXO+p3oz7}E!1-%%=oki+$1&htT43<+=08|p zll;eVJgA1oBw9=82vax5AXVxFD@)g|16S8pt3_;47c~}smdtsTy4KW_a5$w${l;p` zX8PvE^X#=3GzM^P8Or6g+pZ@d1&QYQDFOj;UZ(vFTFmH|HAjYafJtz&(zI61i<Z<# zvS1~>$Ru4_(|2ow>*!WoJ|9^AgyK{u8ko<&v0eqOSv5i8IaDyw%z(?PAoQd8@%*R3 zb0#?7<8xH!8h?B7wsNs7Wsd4yZcmp9S-)hMkNdvmbt9iYE&Yr)h_8}r$f*7f+O_dE ze!0b6B3l}tz)EzS=FQMdttW2JAx?xDD~HqgRlExaZzaDF6f4)8T1-pBzhkME=JUso zs?fCx{N$wtZZF;{FLQ=p%bRmp7}NRlYeX2&7lxMCu5GMhFCG5Hg^nL>DD=hSl=S)% zTz@5|P}jH$YYT7V_{YXP*<zMg*W`x{+kH2w71D-(M_)`8nw)HJ>J8%A!k+!&nK$_m zE0k;`6i^(a(yul)E9`_@5ffTV;I0CvU(2uGO29^Ah*E0QoV_t5NN;IWRMy<?MTrL2 zNXb}|l_lU?F%1KpFkDOC;BTq|17~?~Xs3<@@D>mO!ayR93547t1iD!AWf``I@Y_D4 zr8HI^bMUg1Sk3cmC8xNgA$Cw`&R{abWgD<SFUf4uniH;T7ftUeR^drxYt+E8x?eBe zDv-vtFoD*yxNeq_^I_=0?8Ht2q$*vW!#$EY3((v}qYy3x_lrXUYl^iPj|AlpKV}Y% z#KW^hUIa?)Z1AQsehT8=M{U!<S8tl<iA2xRo<H4^ZWVrBS;tE2D@>u4*z61xd-HMW z1%<m^_gijveZ)&u)VNVjTHpA|e7xUz%@9m(4K@-5MAIVU^q3+-SXBOSGJ-)-hS{Ox zN3FRYj&MKtP(U(Bv&WBa)$RmL2^;><5~KETQitnm5(t-g@7nL18NHt!dhxj0Zy-xI zj|{Ms_~?sUbs_=7qE0+2D2y7H>dcGB6Ys4v)@FNo_QHaQ6aDE|)Rz8LKF=jdX_>Ku z;?5zx7M*3BP>b+GbV$)$NSZe~sy&GN&sK?ox6y$`Dn=8lT_Q~8`cQQ-!wIkI5=O7P zbhh^Rg)kbe!v?fX!q9QTQVnIsJ|dC_n{QVOgj4VH7={rj!7nOxD|G=g5_@B{QANfR zF^`Gf>GmbL@E|`6s@|IJ`|n~>M(P9Mf4v0Okp_)}i7hC=e%cmMfFsn1Fuy|@-Oz7R z9%whqYP7b^rWzJAwB88sQ6rF^#HOr_olfy7-QDQ2w>?q`xbwA*-i^+i?ZK~Z<SgHH z6am_?ZO#PO-^9_Zz5Cjo12}e-6*KQQdvSOlKxKBvUccUyeRY68uizc{%BF<S3wdp- z3hh!S$df)-?J=tKmpoP4Tgswv&`Zwq@3!H~{5%%Ts+$END{cAx+UO-(7%po!GGEFN zq-k3fl?D2&uuXkfTkmt~4n_lac%=v|wKuj?E<v6)`b<%w6CyqnnCf5T`kwjGJsQiu zqj@)a{crIi(BuWCZ}c;|GaUwb!H?A!EEuVoB?kYsX1c#6HT#wd`_FVy+0N6w*K62g zdJPU`o`V?%p;IYefIO<ZFY#i<@BUr;YUYi&Zms7koSP!0>b<&izV(AotEn+})A+I? z6aT5!+Z3&rTQX@j<S<d(4U5wSG|Xgj1Tu6=-U?|56F$?Q?dllF%I#||Ba=m<cMte= zX$XR;LT1liFt+xeLmyI`^9R&C<GUV%qrH7W4GsUqwb5T?o=b{6ecbeqLK&H~k6OeR z^-*sysb6fj$T#goz)@ULi-5yBMHNljpX~~0Ok43Yz%K{d)`Htbl#okh%&G`H<JBfW z>0?U9b4o)BSHZV&erVZ^I1?};*tb09<Ek+v(7@T&L7+tTEnh3o2Su>prPalyJ0eA_ zB1iqbBeYetN}@vOm7A+;w^vOqTy!Yb#Mg|v78)pb>StZMH{s<5OVXI}F3I(EXlklS zCGi3j;v|IKP4Q)+qYPPg#Tr4qmMl|<BS@?iD3{TW4?~$_$Ym-eK0=R=l*-|`0PEH$ zQO+!|QxtRZsDnf91<9;XpR3lk2%DXZW7#a;E}anyH#J4pjr=_S7Hovg_bAvZ3}O&! zNXN3c*GvI|>!h3WLb8P6R1u6xP(}e=_E75Vyiv#t`87OzIrV@_*@iIb$QhmabEd-1 z%o+i$Q0_)R-(6d`mN8$;OAAX?nsrSMs%&PAwJtADM4&ZSs;dlSddgb&x)62Sp>8v4 zs|>$s!%%{>?)}uBi04+-n0AF5BvXQb&OqZKSYt`7c#*=zav7nf0T^%N?6o&G4bQi= zUW8t;*)1lPvOxlZ=b~7lzL<|I>w3KY+#0@+Qf-Ymu~I!u;s+ro)&z`>#c1}1Stn@J z&a{I(R4Uh@+xmokasZG4Gz8++2K-)#4%Ad**yv8sb%UG8&@CAX#GxwE@6;LFArF>w z{NoPKCHSc%Frz*77<!}koLUMw$Q=P&6m0NDpR7K4HXkHr;D-FPzZIV0&Y(vy(!8%j z#q2W^MsE$!AMxJYa^?EcBC&d&){yMBA(6JCkPiJi!!nd&cgDjMW=Rc{MstRLCaaY> z*-0k`cH+7Rv|$_0Bf}Dh67zzpzrj|`OZYt{A&hDiyEHVKgz<<Zl3AD1GC#&bZaDK~ zUvxk<+37(?YfpxCHQGE<i2dm|s&5|;OjjE^N}7D#JEOR~?h;mgnG2V&j{TBm!cYg9 zGi}i(eHv4n9Pc+A{&?7-G9PHgchVY#6<;@@eYUoMJFJF(i!I<@h})er#yd7}(XKMN zRAazFg*mXrqE@%kp+?a)^CSxhkF*3pk`6Cn4A7uP#(*j;UpvsKMzfmf?)2K!os)UQ z^z{z$J!_ds>9PMQrMpNhkzrfCZ!Qo+r8=|B@l}6p&d>aXH5as|>}Kjq<n&;q-UAQz zqS5#b+b0lveM+4V_YDTMSyO@)?h4w3<Y7m+v^?)VTEbdRf-d@3k<dvqV|etQD$ZiS zZ0YBHdWho~0x^Q$wtdEa85Os+&`Y*uWudeT`pNz`gnnPteUo~!QoJ6|m!l~#yY35{ zsQ`=8-gtnK-Y?Mf;1_i<OFb=J7v0dr4XWWm3gv2Ohgz_co7_%Nx@>McK@K}G(d*7V zw!quyPh<2d|4gtGqjyeSp`?JH9l<{#Q8cJDrKRRTEz8<)pr|!WP}4uBR;fx(g{PVp z25^WyI5#It-3HN%^*aVKvD$#z_I6k*QQxessv!I`2*g8WkW1V_baWA<fPZ@YHPV{z z3Pwp-`>Y+K5AuH?Y{*5zi98@g2!Wl;(sxwEt(F1nqjmW-wIz?>Cc7@#pWFIVyPV`{ zQ&29cnY6W2fU6oC2ZcFeo-`4W$6N>!3E;Oda`MUFq_pvqQGE}PZ>dr5g>}dvG_|^- z!9PZ_)ZjY>J1^U^iI93-u7!Htwm<;8_&+hx4z+Q37pN;}7gCZ1Kp$GkuvlS|8aLG8 z%Wz9gUQ&eDyLt`W$#D@KK6L7?#5F}`$1zKze7Dg2BvuIFGNnHqYF<hhvvh5J4b2EI z1WDS4zHIF>yw0ms$j%G=uA~^76+^%8s!=odhKi*dL~vWJo-i5L&}LX3HPAjnZmtnn z)5>dB;NW;#&L=tFXjn7`CbF#Jn>s^9WpU9`9DFT=5r&3`k$y<acj$;1S!235m-kT# zIPqU%NNo%x5?C$M|A=QUWOvbwZ0T8)XX{$?R{8^~jmq%dY|<=|LP=wHV+QTkH8)o5 zz2Han?Nz84TL6yeGHS#;xQZoA+?ZwNkV*4u^A8-`bT6a8FA4pLcP0ym(eseLo3+3+ zuF_sNBG@3c)JE8_kqxAE;5<}_l}DT>t|1do_s#-MsFC-Gs14*GhmMnaE?k6$!qt0a zJnNQ+IUWJt{D?Bx$@j}-2!4r6^Fe327ux#$q{a>hc7|9R`mZ+NXD@;<DNHu%pqLLj zl!IL^5Gjl_^gvbzB5xHiog7lnL1YS#YD%zA%`=}91{l@7@Jwz^ktpqknwlf297Ofw za-!BBHqtSA7D8wx7OMWu@XuUI5#_H941q9DB`||8WlmrOB#(}GXCROs9e_=Gzx^6x z4|gx~l?+@j>2Y)gpW1*%!KjDdYpC#TU=HF*E1P!4^dD0P(_}~bAoqcJ-Fj9Bz773H zx-*Rp+3qxJZ2UNH>)qf_K=w)__Vi!y@xHn(o~2A`dfNx(6DCu8EbO}U!Hn=^0Og|P zf#z&B<SO(**oQ&uaI9ru+uz%l4s@sK*Plg`Or8pM4umGQ7M}2OtnJVh$hT(kPpRHE zPIQXt9B@K>qrhz^ixnVwnK(0fSRI(mBf5h~UtC`{n%ZSZoD^te&)hqIFV-C0+%ztP zUdHOin+YZm=ejkd8BineLoU08**p@j@DsO{7=lTp%NLh<1B?GyO>J>~RW765r-WKv zsl1F@G^GD|I#^Hv36Yh9h{~Ee0R|WGT|F{Cg6m-fToQuYF|cUX=tZ3a^L7~E_Bf$= z*3bfHj1g+hU_R8`j<{prL_=nW8d~CHT&<zVLs6(mxmznJfkHjhy7q5s9UEAX)oQ=> zItFPWywESJ(!mR{Q8%*M?Eox?4>##zYty#ct3Rmf096!M+u<sU_vZt6ybs%w>h@Pu zw()q0khGP}yWsK1*pMPJi|<hAmK(Cj&UD6I=@>cDu5@nv4acx|r6rSl7lXSFQIjvW z&>y2ItcECAP+o*-2*=a2y=?EhKuNaqL&Pe<w55V2oI2ht`?BAT!9le+zb@+nC%Mg| z2U0ZsDdWN#s$;Q_P;FdaS+#b+=rrE4wVExs;>z6uB1qW&{|#pv-v;}%Wm8z1H<e{1 zBI^N+?D_Rzxp*r!T8j*-0Aq!}7~dbnX~J_0NPO(upUJwlEUhZz2R9;g5txsys#=*- zIq`iA-fYT+a!W}#GNy|Q(+WgC)@VY<qRpRXl^5a^4w_mzAo8ev_Q>~ob#2s10W55M z++;^vGMX*RiiR5n>lE}i3%01mA<`@|)vG16>{oFC^cNK^Y)?zXw<<4}>|oVq&2!WR zxWXBcZ4(T8#l~Wo^{Hhwp^KEOkvdV!WMjpOb<Ce<*3hIhAuNXDD)!^w!q$%Ok)>U{ zPIbU(Bv`6;;MrnL9(P-La%oXR+QUnt4*SremZZ9dwQUmoL@IyULD67@p7UdK(8Q;d z)0)J4Ut75SqAzZUqQ`rFOeXU~am^YC>mG08N|PhS2e+;D(iuDQ$`8M@#F8Y#eCc8Y zAb|zTq}m|b*p!IMEhwR1el<ZTdv1xXG6($syvM!Hr;l^o|6J<0->wDNeA<hI(1~x< zfec&j{B!uL_(i~5`2TnXeE<Tuwr}7itR%1G`45olE7WNi$R2tADSRr}yZh~U6Vn%$ zK12HVt8%T6ugi_>hP1$Y{kIOjeHET1^u<$1{O`-r^;ZcTYtPB_8-%r|OrnUD+E28R zyPK9|Ze}Y#N$zgt41NLM>OD{;zd-)(WL`b1t;u)zQ%4IR_<e`dY`_sT3I?9AP#y~e z=8T3u;1QMN-_u)@<(m%2x*o;r4SrmgpVGzX9HV$d(-?IF3G^fS6sw{ej`Xv<t7kdS z>m5rR+w~rS6_en#LZ5y?)3=W-3IVLpUm|#%pMYm@GAQEoS;*Ag@{@um51Za^34Wz@ z_CpbVwYLes5=!?f|0;PdN&G7I6M&Mpq~}uW?hX!;toS){*^Z3~okc*b(W*wbz<>$2 zjCPbeV3La5Thb?$we<i|F$U;G@GmSjMoRHXeS1rXU$;whBBaL2NTP%Jm{uydSU<N* z@#*1?mM}}|406>2*&~3o7nlGSZv>{CBP39tHc_r5;ht(Mty}nT9i!^LzT6Ox&N1W? zMd3LuU!*vvH(*p>q!cPzQ9h`JEv}e+*<0dzj;%YuqQZRhCtCD4Rx=$zGxi`OvPIt~ zTK8QDLyJ?*$Q}zHVpN#jEePJ)T`8e%mL!oZMfkBGAZ%#z`Fr7b8iBa!SxyTAU;5K; zM7ZeTniG3`OtR&Vwe+>dAzOBa<1!ZQtgS@{UJmQ3Yb`bCpxi%Al>b;%euYDd^<TNL z1?Sp`B4tm2idb%-E%vXXEsKmKmt9Z~!asHARsJ>cD4Mq{eCxK$MBiZR;`@d?wR5(B z-hqaY>p1ONhx|F6UQi`gA-oB&53NI1D>vpnLpmB@STMEAElxnS$xa;^;W(``xP6>6 zT+uG0ehFr?L4`T3=Tw%M(Dg1?YA9^$Mc@1ST4{#QiIFi?C2{oHAr?K!i);-O{N=lE zBpn1ti$@$Xtr=_47&n{~*j#fpk5aN?CZdVjW_&N_U8<B(+zrnIyX2T)+2EgPmVQ+i z*)N4muJ7YMcvmOHhq{v^_{IijdDo!^i|J&1Jz#uCy4mV|gXJr^T(gzUH8C2#c56** z8FIao1y`>2sz#N;dhd@0$Ua>FdN+u!Vlj$Z8~nO1tt44mIe(@VDFj236eM<C(cV#Y zI%cx`t4wmKwtdugzx{jKjAzCP|Ha&9``tbwq%it(NOV^fbY8Y+N1c|Rw;vN<B3rCb zjIGhr=+2;2#R}CbEtTijuc7jfJ4|z8>DTL6-qN~79V$a5Q^<V7Eiy?{ctBap7i%H} zgLAOg22Y+8xq!U|Rh+x$7UHO=icM!dc<!F}jydPf2+kY4(TtGRs+&Xe&J?rkm1p$L zIY!^+@ZgxkK_h*wR1+80gpU&7E!2*0-NLD<K`GtDPBBINJ7ysp(@+nibY!_uzN6T2 zQb@D2N-0xSqEUuv(3Yog^FeDPtb^fIj9nMXZ)y^zjUN(yL25;F6r^FUv@Z1~Bwur~ zHmDTbI5cRTd&cOHbCFq4`1*3Gz#=9*oO#U*vn7w?+mLrB5}r6Y+Zt8=TeqS42&|+| zzro7#&C-oZzJga1{&6WSFY0n*F;up1IulQxjFwF6O5M_dBH6NR&QBuS6`&a{iIFeM zCI91oX@@<lDRSI$Z!^J3otg?Y(^|J6UtpLag-VMzZZ206RwuLJE6=`U-`by|t4KKi zB>yTu!G(P*&4V^<{E#m^)pjMjiSIRZi+N|1L`U!vU-^P=hVyoZZU&)8&@4vgfJ-uP zcl@s#-O#bvL42e3_BO$Tjkd40ZFT|=UIHFSQ}{n3rf^q#TkRR2SFXvr7Beo#ccUZx z9vD8l%3a^t^{&~R`gC2S>kQLv$az8TLa;{LjS#4}kJZ@T(NyiPgwwLW!ocn)MB@Hn zxVQGncr5p0A{T9;$vmM}dTURnKijY>UvPzU03yL)t5FxGZ}MGKFMn~kkPGUa@{dyv zUQ?6Sl)Ss%b*nfXT&oai1gLZtPI%C8sC-e0Kc~d)!IKeW)?rx3XS?9MROEEBh@#j9 z{g9E#D|h;@_KC)Q8V6UZ`GeRs`R`K*2e4J~FT#4lI_>P8C&hMEXwtMNu&mv#s^r1{ z8|@=;jBXvdI(qHc{X92P?$Hu?(xU`8LqxI1y>*Teao8uKlci*bFsn}b`w*Wv^1Cmw z6z?HP5n*lkZ{Zi`zpVJ*(qe-^pDHg4qXB*K)`Z0fV=p-&3+Qyrajn415>yPaP@OO) zbT`2~C~a$Dyh&@K7(6nTj0(^>vx@#I++-8ZepohRvfGjK&=Co3tgQfiv#N9)=A?99 zYO}#o2_cQ-^S8ua<2;(VM~->Un-j7*Z7rA=Y(6JJkxxo0fEgyRjL6JA%h#Y!;DEAW zc+n|hEMu>fVBf91PCa4798jl6O-cu5C0lwqzs7h5w>eiHUXPV(b=iQ5&@qu%>ncKY z`T+-4I15hNl=KOm<}nTykuS}UEXe4}OP7jHoMSZ2!a{<IX;J3&@*NY5d1~+kj-=&O zAfB6s+NP%`Po0{anVCF&dh*PfxX$!@UuP|opAGi0o}JGb`Oq=$gfKz#;}m?qFwTQK zA_tcUyxwVTtatk+)VoT{7eHAONStlpSIKf*8`xyb+xLNoKAnj;Si;-1bq#;J!A%v3 zvaq-RfPimOy9Iwk*j>ur%ms&~ou=(sG8rg#7VWFpV<2TV?KI#$zGiWk(2gc-Mpof+ zYP8X=D1ChEsdj(FR%Yw>YLf$}w-qNte6Pg@#>bdBrwtcLV*9%7c}W=Eb+_}~wwFlN zE6SKJ2(~!r<4QtrTATA4kV1vU7nB}sQ6g1wq)+7iH%wo}1eMA#7B$<@D7#a%s(8#S zY*%O(9SM8g78CEF%$5sa1bBGlmwrkbtVE&rVH*UO$hNenEwvf6=j~z}pN5{HPj2Ho z#riU58_rWI*UecQav=uit`I>%m3TBAl8EAWX&q)dV9Fqv2Fb9>Ezv|jKhx??Ve3sd zG?6dP=NI7rEXq<h+;?uri8Ww-P-i5jpfOCUVXJ|IB;iPeGhvO=Sh#51WC1oJmK#Zw zgRSBag~60_ULg$)o^bu4hs?2K&bYaVGP;6bYsqFil9LZ%_t=DHE*DqkOT|3M740fi zXAgs#O(Zb0EeD4waWi!yU0WJ<(1C}Hng%TLViKOc76HykUbZf*-7IKUmSYii>qk-p z$?js~-EY73Ja5>@Ct<P}XC>p9reFrZiMBw}*kFbWkfs4I`6HnunR<^cVl6nQjT7-N z>Q7kD&q@@NAQR>Ue^jiLJqFur2b1Fy<0dWhUWjN->NYrK@&BYcB4k1xHE0rcqCF6A z7aYc@^O&MFV0f2LB{hcMw%W6;n=$2P_aq8QTHNQ$s|48!{xa3qx(dtX)#1D;m4fz} z>g^$l3f|J?3%VEs*?{#Ak;9-k18Wc)GeFy=!S6(<Rwnpu-RrZ987FJ3^J*a^H^?|D zK^>S`!6cSOel!%o&6vp{vKv<{?RQY|hS^`(%rGz+i{DuQ7|R_svn|jJ(;sl{f}nhW zncjxLu<0+=C?oh4U1T{B{H`v2T!ypt_Va<Eqd%*!4dbbFH`Q9F$>aPTD>|K(5H*)B z#;43N9>P-wMOV)waQqpmz3S9}?#Prn<wx70gnC0$yNU-W$~J8CiIKLvlE(_5grES1 zII^{IX9RM>V9jZ;2+(>wC{)e?E&wIb6JL@}Weg+*i>yEcsj_Wy5>Ig_u&kFdL9vQ` zjq$sivttu<mXu!jlsJ!^Vn9-NGJ-}Gcom?SC!7l4o4(NVA|;B;1<M$dwbp*^N7B18 z59S9g2)!%DN;RH`r4-L&d~$pceg(nh&BcYinHb!psi(>dMVQ+T7Q2xFYFZJ|&@8)l z2xkj*F<r^Y(<`h+;MUzArUEO7L(4!tQzWA??7*2O4lLC>bI*zjyR2^cT&LH<SSd<p zF$&Otya}hs&I~))R!zgz)sljcf|3Ry-{i(953XJu_AHPxBQjPn@q_cwBpF$AfZ_l{ zi8n26Y+$Ji*sC<Fy}SqU(S0a*3Mkiz&eXcsRu#DMVJWWmyTF|H+tcB6+bt3swAhzP zThE{y(6H4$;{Eq%tGUfoJDnONzb=xn^w!-=!mBS~-=NirTJ@CpRLhl<V^d*-UC>OU zT5Z4oA~iVRPZYpr;9u{oE@Hw+T+l4*-8D}@wf?v)2O8@7?j%rvT+H^h@5$7N3|d{d z9!~6|v^j#j-36_^;XG%OL0to`24;mPGj0Y#f1kmzmI1K;SKS-be}fcNHOSbp+p*Q? z?T2uVrYVG`HdSYp*pOg>B%!vfjrPwNQXGM+4BrTWl>k@h?L(_Jf~$-FKL=OZyMOVp zYTh{&iNQC_RfAJL(9$D9s!)GEX<_To$JmtAfUObtz%vMUh%vBNL9)u40Xo6GK|{;K zPY!PBeFP1^HE`{Kty~}%tG0m!pZ&;`g2VOdAy#YfxGz<VqACzNSZJitgQfO_q{K<s z!2x9U5yKFZmNepy^=%ALrEGAb0ub3|v)~>Rz+{&U99|cgxD+S<VQpTAKPp^g?R*N3 zXpzORtpzZOKej471Tm>Dd_jF`>_YH|Y-bNy`1ykfzzFR8C&@PUb=1Z_UK_(!)FMFF z=>VPKlMT?$<CB^4M9>=IU7-2juLc>{uHVJl?CVZJJ=z>|>|~C2=b2JF_#<J}fo{M& zPC@bGGMjB5beXyZ9J~?%wl_h$VfMlV&^^36R-2Hs3$>0b?~h&$o@YVSGFMiEyHvqV zm681_<=4CC<|`QAU3W-v#t|2Pn=g%L-P>gRu?S#eOt%Y`V_$oq_m`qoD`+mf)4=vG zQ0Yc{@U-ERkUlK+%oovjuL8JNchOiq0i^v~BvhcxooalQE(K@llK2>%tIyjzd|>eQ ziu@qThX$(uxf?yDuBv&v`$`tRMrY;2>NZ*Fl?cmm=c^lC)jrd%>D|+Ivkl)9If83+ zL4<YRS;aXC_u_k$wuy^wIyo26$;oZ@z#Z>F7bX+@lG1GC9Dn45{9XJQel5B;dieHZ z>2K)L^pln^w4-OUTWOgfYCyxk>w^s;_I+x@k8Wgiy?foYt=d=WyRk#9ypIkLUoKY% zaDKo$7lwDE(;+zGx!-uKG!Uk}*had?NVQYJdc#zWY2f8Q4=;b`&0b3WJ5IW1qxN__ zYEIf$buJoqQ5vJ<>P*)+{6z78W?Bt`#+W`K92Rayn0&ryEKcFv%V0N(00H~eBNae= zF=$utTL352B-${C9Y|hYTfJ7UR7V}6jOfjb<wKQPaR-3%GT~Z8j)fssP`-wz2b9L} zKkIzmIx8!JMwA1`cMujGGI@$1u;=d?2s<n7Tom?2Cd^Y$9xk;wQWo0QaXz4u8zX1H zaTSM}?wReWDm6o&(TFJtPus`<dT9g*>Uzr%Io=0_&laY!L8QEeB7Q~GiIzSM;fQ14 zB-66xsC2QV!dzh~Al`4mLc5bL#aPTz5fxvT_#ucNSC(of6ZJ>0Fi!CFGTpNLt~{|Z z@@w-qXncx?Y^QZ1%S>`SeFl7X8Oz&u%dy8bAc>+$VNM7{8E9Ut>dm}KK&_>bpvP<d zG#gFm*p}NZkydL20bDE$PH}rOKgH!l{<#x_F&TzW4L&8AVNqLP9nV`CEgZx#m$I-> zZnLi-VU*8d4NH}^)zDR$r9NnwhHKYB3xN{la2iex`O=QS22WAl_(VQGJ$+*0NdDB+ ziRo$XPmWJ)Degq`^pqr#Cv+K~a6u%dr=wRBN8Bq*G-avy3R`S;$fY_NX7n;g9Y6Zh zul`-+pD{gjxZDSV>3UOvgkVs#2UDa0%YPg&UvHmpJTS!9`Nuji_-(5_Y4a4H`XNIn z;(Dj*l)%%~hK_>OZO0k4W~|oWcwBYxZ@6z&`F|f)-ntI)-YwFu>yMS-d$VPczx3cD zb^58<{`9p$dX$#_a#(Eb*g5Yz8h5Gdl1af0aZ6l&uwf$0cSi_=(C`z;L2)PefSQ?+ z|Bb1Ll`StAE?DcB-CwyH5mp-KEdL&f{?*~mm>B(=t=wH{9A*)~|3-~hsU2;#J&m&* z61BA~+vpqZ8?BqMhuj-&R|iCfODUz15YGhPtB$=Bw<h>MxNp^(KT5Rb#mJ~KhByvT z3iw-7#cWwxHfNym>Cn{3BO0&Wu95HxM0_?hF<d<wDQg?p^kc>|_rcT6!+~qC(Z3qG z|0{0m@UB4X(S?3D#^0~$@h|K0^XmIo)Zbsx;~(hp4|Vz9b$L?njA8J5y6e@uf2g}5 zU5px+gga34hkNTCI>~~UDXpFh&kcN`Rfxq@T&{Pn6e~9?^=_tmer>rD{4AO3St;85 zfl8Cbr0Z#W@PDd7)|HEV`U!RAJU4Am%Cr;xS=ghw_Ku8WKN8s-O<Kj{>f#L^s*sM0 zd8)7dV3B%H2zvZk?P)J$3P{bn+6OvP`?iy^XZUB{2gE)XPH4z5bK#&v@i$0hFgM0e z%EgKzND1*+KyDEvQ59(jb3P-fXfVDO!welQZ8zaBp`o`Gt)-*y=onk6P9l@fUoy1D z{4s$X7-Lf>oRSLnkOuK4yuC)lL5CCRtyy+}m{d*jYIS*$2!bG;b%xu(3xo)>+C#CL z#N1x$8%n=bv-~R){7cx#Ez}usx}?rJ+z6CF7?)538tAkNW2vr5c~V}M)C+m7GT%@D zC3Ri~1im#k2G-(MZE~g{jHetNME;`u$k@1Ou=UX-_F-3CHX98$@McT0rR+=1;RJoe zI9ahRgZ1Ozu^o~_58jBv8OJ6$DU~R7ad>On8_VVFrB1lmTsCe(=j@Xc(<Qy$5_TDN z<hb6*^o&`0q%g`!Nns-DjwaQyvCVfbYga0NCipGJrao@cnKSJ}aJabrYzhT|wg#uA za5e-{x7@h7a+<~^`7tyBx*Fq!$<JeEp<<#?hxo>ZVBY+Mm~_ESsiHV?MPr&O;9(|6 zVFN(alF^?3{jd>wRFk1bJ0J$*QLTuax+YAEZ5#nk`GONixJgcD(jV$=19N_wcYhY1 zux-yphlzMrLV)Zrd7m3`mhl-Sp_dp7@Q@{E5W8X{JBOUEgvq|Nop4zRnT{$Q`cJ{D zCA^@*zUW-dxv()f_3Qw5Aq5No7#ABIbNmBU?kRo+F^8?$_*im;slmXtfPgA^jzG|Y ze>tQBOEqvj17|vGie9Q7b4~%eZ##3;s#}e00Mv3N9P(PFk>Q;P@zwmNF1>!94Xwy| z)#5ctyPX@mpm^I}SY4RA63f$w*Qi*zW`dvxj}evV4kpJcrHpdWq*0ZhNAe?#RV@ko z<%DINNHzqHOjnI#`J`u+h*I~+Eu_AD+J{GIRG8sZZg?1n5E9t0$*-t4j7KwbuUNTg z<T~d0Avz5oL0VjlFlQgG?~uJnYnTQ*$Blks9IP~^gO#lV8n%E4Z9AzrrxPu7zRBGY zrejN|Ds($O6XRh3@i6YA_|U>eimvfV-L7Pj%_A5s3S^}=z)8O{jKxJ<<1e~Gl{sE7 zVTVoe?EJlOC@(PwXV-$bCrROI#Z9x9&)N_;FzYNkImYpv=p5fjr!6_uR*f51HAv|c z(^|^{aS^T*!Kkn*s5tw@WT{>oWXmJI63DZ`U?`*%mnc6qe=-lMTFOr?oz$wDI<y2E z;1F-|E5Cw27F*o0$&#UOwh8iu!TG_F!KJ|lHE6l>hKIDUOcTXA5Wh-0=u+_-iqpkw z@eyLD04EiR8U~dJO)7-L)%js9xYBgm`nz!DstkXW2zN^J1nBTEdMvI+J8#l<ty^|J zp*1%<lo%QRK4RAj4gx<Np)X;q*FJDae%5h=e~|ZEYHqv)sV-8ot@d2Q7&O!RXX`uW z!bG_50v^@3$1jKhl4_UQCep$)Ab`rqgKxBpS?d@Onc)8x4f1DPI2anVVj2zuF(Xcd zO-)s!URyQKa|1;|HONyWY=*Ud->O4R2b&pbTTeN`a`r-^>h_?UA$(X1>f2bHXzEwB z?Ost!Xtu0E_Jt$j_hUS4i44euCI3xmvwWY9z5A-T%PF$tLSR?#L8Sb;A^-J01~q=_ zF#sgdOz{6`<Qm548a3qAG7H?ZXFyaOv>G&;InT?*!dWdDP0tMf%yXPmA&w7GCMa9G zWotY>^N1@02nf~PhGhC-8otiLUXY&SY8ucOgD&6<{sC95AYh4*NU?Px-A!d|b!~OD zOps{rq#>f))jkcc&8y?{NGFL_d5xryh}}vb>C@p-sXev6Y7PM6X$d)3;2!2??F&={ z>&0Z<4I_G;PiLaJ?u^=}wrSnj_#Ne@0R<6li+-oj4j~_)9%y)iq;%YGb0~-t?iBx1 z3ThZ+Z%!kgt~<(fYzV9H=Qc!^?K};)jv*F^ZbNICmQKr@;zm-pvsl9HL#IsS)+-|6 z?ELe-fJasCs@v)S$*>an&f;YB$6;c+VaS6DdB+7lvqA$sN><WE8AD1(Eo95V*)Uxc zhQc2=j&3>S{3pxL4~t8QW9%e6i-jaiU79|1k^>*p8A^ku_NN~@qv6RW`o?A=LKFhe z_;D26J4@B;mx}Y1%}rNzGf%tO#K(>XE;_PotfaGJV^}u-$^~a@Qw$caJ2a;-xO}5h zTEu18^36)=#tnCO^Tv(wi3zyKv4iIL%&~H}I$vh7gc-6T;S;|=Ea$LAv$HShi>rih z<LQs%?kg4ZZQ_W}n1Z_6p|(4>I&@-VzJ@&|NdEa~dww!89?e^{-W#t!qY>&kd%;>s zK~#|vPDxNs&)C@7%=K<7do5^$lQ&3xUM*1D+jhy@&z0G$qX)+J9en?l!ti(Ifd;db zlj^Xxylr<$M>$RaN78K)piG*_tFsR~N&*eR&2R|pskZCNmBX*h-g)=x?BUVl#nHv- z(X&?%rWz2z8!=nWQ=Bydojy)EiI5GZbhyUUvR4k@`MT5{Q8w&aUtL<b9+(biy=z$r z`mIN5<8s)>S`W>mWiK|gDdOopooW*zZL@4@Y?XNs_`2XZQ`DVh&P=WJQO^FAs41B% zSIK>z`LIbs7JfVUemy<IoCo{4t9Pv;U96Vt9g2lx;o~C6t#vCBl*-#Gr?@z>@q60P zWyJHFSy)OFKj)m(Ni*NcQZEAVs~y->O*tv7{G}3|*Npg!zd>;gaNP4P9ReP5{DY#T zqy`YAYzH`y<Vv85Nx>l`{5=SPQ!LrF+YT63?m|Z0G5tzlA2PyQ`JvgXL#YBivr@T} z=w-!fD-3EyUBy%)FXvx_a!7deg<~(ibUenXqm;$bTAZ>tzd-A+U0=e`ZDn=s)(6O4 z*FU^{=WeZa&V6&rt2(yMxo^(py%fP}twzo-bHO<e)r0j5c)JB4qn|)(9dZKg(P`*& zK-=jxBSH!vWG;g6CdHPoLn{f&rP#_ds9Ir14U|)&UKOjl0ornMADx9!8BsM3pdz6~ zPqwm9R0O){n>(-ZM^`46DLoWvZJHYSLKur+=H8W2T%-gXQCF^Rdb%W48ul?;mxzne zD|c`!S|IzKiE*f4Y@=|YWmGR8pW|E9oMA^<+6kZxhwtp&yJ<<631=nVv6+k7+Eh~& zhyi}CRIjQ_^GgW6?}kOBTDZ1gF=oS~wXxS~<6+;%!$%+1#%Mf|CbLsa_ZQ<^&`Qlo zaUN?fIGdiIVIEg8N>eB_dNjo19byd1)dlbSK%#SU(+AlFXnUkea+%6#CEry(SHkq@ zWwy)QzH~_`@X-y_u%l0E<wBgL6<+C=g9EvVls?ZFQGk)=VyQ!lDR$SXyHclge?owQ zc8>}8qSAp~4lwbX5LZzL1WluAtKcVq&;(Yk^nE^}kS_{qs#HXK2i-1jK4cSbLTO(t zg5;PrY1SZxII-04a#zm+wvdpudzDo?;!T#Mqs?mN7jfcNb++#J5%MJZ{SYx-y#rp7 zRA+l6#Wx_}PI_yIy8q=w_n&HNO4wQ1h5bWP*ZXm1ehLhc5N2mYWBrB>lx+;NGcj#< zB&wb8?ZFPcx0>e28>l8pkK1<UFdNM$?FzzKC4-}dlV<!zuV-tHsqRTFXDe?z(T)#6 z4`ZA8KyjWs6(I6M!P}vhN+V4Zv|3yQ5Zg-Lhn*Kg#mI4kCbwFqqx^BTP&2I+hYUPp zN{Y|QniO&du_;PSp-YF%h1#<r0pREp>73I9U+4Z3i}N^TIX@5C;G9sh4xw+sC2qm7 zWcU)#SiJ{s<<jEanYHErP@`$c8RJ-c&Z?2`h3P6E<K-Hqchq3U6}VFq<0r{#ut|EI zmV9qiY-e9K+H^F+Hl0n6kh^$#gxnSX5ebrKdt!EgEGqz&7IWi64ti#!oRUh=zwAyM zj`%Y+P0$=ps}^KHM2x9RabI#!RHO(jht&!M#L7iGC#Q^u8IdLpUr%lphSBP`);1F; zXv;u|#i}xmX8xi56?Pcj1dBUyuVRMTYEi5*r?7M3&~*O7^k9=27kcc=I5ZH!RAA<= zkF6G06Gbo%Y6c~x-JUwo&+!yXvy?O~JsLbRaTJ2&XkL}`8ySG|UX%(KYO_195u;hv zpMEvdw!|et_^2)Ax3duk1+3s{_trAQ9xqWt)&FCyA_{1$eKOJ2cvXh%g>Vf%o>-4| zZ|m_21^gA2B<RrAm%{Yb)*1de#+fHIN?Ff1>nJ`!p5%&5u0Mks=D9!+LD3!E!6#ud zh^JW3mb{dXQMt8$+r1L4dq&SlQ-RLz&lxNWo%LmhRC-8nCZkNIB%*^u7qI{IsN6dy zl+YQC&nkQ!R>Yx4g=Q$4=0{APGJq7K?OZv0R*`uDo}fD-ftos#9GwUD0FJrsL+7sp zhY<47;YyG9%D1e~k1#@mZnek9cAypNR$$}GcFQ?Fu`iSIhY~AMyF`D2zXFFscPi3- zPTMcv-Gf&e=uW%h!wv=c>}D2y)n}lS<csE%*H%SMUM4@@Ck^7bIk>Sv*3RN<&DtKG zT=EXi{CTGpxPpHrJLB^5PHecGuzL83k@En_%JMcZZ+UG5nK_T0lL!qBiBgG>x+se* zJ46_PlCwK-(j=20IXw!Xt&m@!Ff|D8bXKuZy~v#sg@uACUdj)d?Mr2{GZE^=7;-cB zK;((P;0&cb5DsnM8{x3!RD@O1!<soZJRD*6rozdtFu5MJSZ#jKS&UbWNo;IvF`^(m z*a73m(&s|H;FK9@D2+vd+~hmnm`*#{i_5k;YBm!FcfN0FKQeaCgk5YpB%1pe!T+$d zF`@@wLPAu*drdk5^x?z#@$viwM$pCl*|Yh>#r)w?e%u+;g%F24@m7q=HeZ)$0yMh4 z+j0s36l0btae~DMR8-vX){R}cn^%<d5`b5Hz#<0kNFk#ZslC?L=uHzJ@qvx267sCv zvT-dO`3w<LK}7KbnoFR&5FFo5fn&m4cyP>KEU_t;k$cFXv$Brw4OFpFD3YCdW!<Q( zyQo`4U5YxXn<g>X!=_VQ%<&gT@;cqeU*uupg%`Nf+ao+2OF;XF4EF5M>+eZp_A}=$ zymtDH*L8dLjkok;I=7#C<E@KllGgLzmcf{{Bkx?r)WH0a_r@Y&&67u7{&kJ<YvCAQ zbYqOX-I(|n8Dp}%#~8N~2nv5NJV$b%B-Gw8($iR$5&A3qBf|Z~#=8bZdvzyDlIU?R zg7g3F%valfAoBs55b??3>CSow`*@XyA0}V$9w&!OVi?Xp=iM)d=So*w%{iX}uEnU* ztzvvXC15R>bh7oawM8v|mr8#rtOaS@t`M@sB?BM-n%XBXLYN<|s+sm;O?Ml7;;l8_ zx}g#SousZE$<A57R><(5t41>>&-Z6D<}s)rQl%>s4J-Lgf;Gdh8FGgbw)<ikn;!I+ z_~cZux3;VQ4OK+CbWA4A*+UAhcUs6tsI09-Wd9;6TE*#4j9LA&qGcTwGB*M|{b2x~ z5gFJAljAFxC=n)@$Rxb&sCMGV7B@r~E@e@y`5V=4d8NJ4Q|;y4@2GA|%E79A)$P^( zjVy0X6=#FUW77VVjI6o?m7MNt?ecMQW1!Rn@3p7YTiPb29=>iX5zi0hozB%Sm$qZs z(l5K2>Q2W@!LRP)ajh_1y6(51lBH71+G*P^*fKj@D_k2M(vE@Vc2u9J?k+v%REtV| z%8w`BPFlWG?L+?jWa;tJE-<4#jK)(kA5@wfPnVw9Fb`ZP9Ced=_d`-Y=~H(TTeoxW z6I{EwlGozw?y0?XPO3b@YpzEgn<9oX$~4YvlDMeitO|#c4iOv^P~3`G#v>lVDcT2# z|5!CrFs^0iMkj*;3jx2p#cSVaKk<$BLy88N)$Y(LNs%pDMi=>K%RQ8kn6W`9A=#4+ zch$p?Qn8W#FkGOuPs~Y&L;4%>u8zp8VKqkKOrpJ~hES8!kQYdE01XyK8}a;*%z9Q@ zJ3BEGD8CQh@DOg=zgB}(INY>nS~V%;D1BRp<&UFb$xIyz&d{E3v`>0BM^pPNCxa`z zs&!5s;(qv<MAS?2`S^Y2T|;8);D|0Kb@_E&zMzW;g5aPoX<fbG6MFYoHQZvC1)tO9 zJzY-eBJNi`Gk4yZC3YHO;`HB5hkZ9QGMpo(a`758bv=7$Wmyz<Me7YS*5b8kG)6Dz zq0c{jj?l8@dbd_EQ(u3=5C<7cRL-+<-<l?h@4`)dpGsapg7|bYwj5l+aMAphMr@Gg zwPE$xfmi4*oM|Xh-lfd0_T3#<a0N2fJ_Z!;BDyurj204IwS_dpuW|PT5K%4>`I0H- zNopugtReBS_MPE_QcP;zfMcBhSnK*QRE&pF5oK5^U|NQCN^0PO`YwRpLubT+56p#w zN%1X`6$F9jCpn5#IoDVHy_0^VNrMDtZ@O0}h!b2boqSyyio{HY!hlwQXqW<*B{Ii} z!RyuPt;s`&BF&Jo+e<f>To|n}PV~W((U+-1#gp*1ZZ5$nxK^GzM6oeyzZb+Z*3|Oy z9<=>Jg_9)AvawSmwt#O?WBi|=7_H(sGsd=yBgHwVkC3dYFbEqfLRN7@dNVW&E28h^ z6~HXxFcNxw*0{iwIGDG$QP${2n7$H<kc!F!k57pDRYZeCe{XUYJ<oP(`lNwnJS-9| zdQbyCDECvh@r;KK#;~c;m;-3<W}p3`zH9ztZ3*Gs;h$4`R;$LMzJLLb%9hODstz|C zO{jW27l`>DGVL}PIxV!N_<4q(hCLd5hK==aL#W#J*rRQ{+D}^1f1X|U?jvqGbJXl- z!f^p?^BszJUc=Tw%DA$m;4%>6=W)3buV<$KEsOLAjE4+xc7nP)u3+~9kM_sV86c9E zj>=11Hjp?76qQWB4Qp)qjBC4(UA7ZHeT37Z$X$WSv!xad*y<`yf#Nj|psZ9`HeydN z!AB61U|fZe0Yh()&BmPRNEaCiq2+aM7!C4>Ypsqm#z18hW}JYtVKnfG^EPaWnS073 z(7%LU7@ioZNrp_w0ccL7=mZ3`CR+tXK!Zs>O7VVijCGheKqrg5y(qn40E$6TSk{sP zidS#2)XQJ3NNES1MmdNb%kAlNpF0_H&}YP5YHFZw0;;71LNNhl*m&D>KpnuX2dnvu zCX5kf437o+#%hF5wYVhf>bUt{DL0XqJsioMG1f7jMZ{`~*-8b5>e}jwK~&JM1Cd}9 zg{Hd5KGhZhO$&@}MjD}9;lKepj7gHbK}%|kb{R>dGsJol$%bL7-9_KmDe*Zd!nrLq zV9phIDRFBK9Jn{Qph&>DNt(gs#2So&!4dQU)JWdBR-!^>rO-kf6b+)l)u@eH-XON* z{&waS@`b_G%J`%!ma?L93A3Y56O*p=k#G$14tAYoLem}cD$zwZPdXc=&%C&FC!q^1 zX0ayAJBk91uOO|7)~7Yxj#h)aZh1*pp@NHd*o)GPCO*7e!KYw^hrN~^ex$`R2yNtb zR^Vh*!-go|mKSgIOMn7~C_2gMu$rg+rLQxVBV4SP*78mqM)Upo9QVF_hqcF$O7$`< z*vSbkRH^Ozb&v?LLamJrtA1?y!h3U{n?C>c85HrI+J((k1MrLW)2>%n6uq>OaW_?3 z`tYQid_N)=St6$4oqDTu`Rd(U<r9O~aNat2ay)-D57RGyc<NA75vjz*Th~cFawI>& zzwwdrEz+MfR@HT#ldyQHs8zb=s?_MHp~=qCs1g3P#4UIab`fPG`~{Ls2btKD^b=|f zC%2Bdt+phVt*r*PE!;>%#i%xo4WrC$p^3q&oYAr^B*rqqD^&gv(}~K95FWK{LxrnX zAU@KiN}x$vwpPG(^jm;soRU#_X-r3pp#jrzI7lM<m`aavu&A4Rf!kg;imhP#&A~9S z^wq)#j9x1z6E>Dn>FOK>&Dp3w`aq_}Hr^YFk+o5S!gjM0*YR-%S7pRw8<zNpLmOvK zjBFD+7j3I}dB(5&4rLcbyU7ObLWHGdK|~}aGNOMEH^w>~zz2(ru#oaBW||m>S*Nh_ zTci&D7hOyc6-%SUHT-Od0l_tVE<M<>x3!2}7!ljzVv2o5?zYPNT<*LpH0bJ^Gzj<V za+wbKkDpGb&9IS$9fLN5!n@ueXi|WK-HogQBI(|zQfMasb}{R;ALO^k2eqi}4x<U% z?u`(E+QAt14&f7>{atZ5L0*p|k+z$j(8QE)r=ZNG-V;Gulv2J=uT78kzl0LSb0!sB z5QW^MyU&R{MoitQ2OkdB7?fgQzNI0Q^sWuIWDaxe-CS!=Z84a)ilC)mCoygLVSZdy zG6D^Z8|t+w3QV|Dc~M(G5mhk(EseD}cHrHSkzTkqW=L6imJ6K0KEiLb@5ax3DI<59 zi>T3Vv@NxNReYFi@n4a}7TColqBmfu40^$lCKi=2gz(s#4o4Zp(hwH|3L1aXp$!I1 zu(K59FUcva#M08@;?e>J%3!h14P$iRBC#lfPbSbAK{AK%d|Qt<Yvd!JZ&B)xb-+Ep zTz#1VdHx!XVEkcc1%2C3yAXB=3<=6V=#-if9#e3~TLOeeKsq{AJTSHLJ`NyF95dgh zQ%c=@lyk&&HN6Sr4IdwWDo+gBe;<#JT5f;EVe|D)Ta17nffMx9d+b^GZoMbMdi`4g zxyG~NCfTkC3Yn@{et_T!h2RF<&jowISJ?$ff5D*8m-!+)9mVSg@*sK85rCAS^ZPS* zJ}<{?@*(#9nX7McV02kjy={07!>rh%bacqG*k<qMwv8S<x3>kCh{TZtnst>r^}E?; z?=!(i8#$r@<|=oPm*i0S?BY22OSn5FHXnygj<UCJ_M5#>#|9FO%^e%PRXn4a@30bO z<cR+FbNEQ3RLKjfc=M|Es3bih{}@>P8mV0RXRWRte1j41!{ykJifNR~Jw-X6u~f+v zCWZ0ko_0MjA7(0TJ0nEejehs*N^O2?ZOYNZ9`$hb_pLv@^e00sbn6c#{=Mq9ja;?w zJ|5C4U&V78{n^aXn%s@;8#{c9bM7wH#|->>ji>tf+fg6G95ymxF5e5+$7G5fiLnd& zm<di=Y3d_st&dS2>tpI|Lm$;!q+87AHhTH_jRAbeZ8O919o*ZzZgie%`%D|NyJNHS zgTZ$|D>gcLb|&S0#jo|GxiBfM!q6IkL+u)#%+TF3PD4UwV`m$LCMTl-%8;0c#ziQs z(~wilye<<oS&@_T*Owsou{631J^O|y{X-3R_`&j_;#mjY_dAN~i`7x_MT~4$WZJcb zC744WmMOyYY$APBc`z|1BwQkPDsh~>LO#@R*t8`3cFcs|5|_v@z2ulpB6{JtSUI?t zUc*~S%~9hbdtEmdl@ygQxv?}&E+5~+7{SKQ5KZs<Ow5@|Sr!5oo|Lm6w%xE(eYMgq zpbmznqcd@iG>=LO85lKMXl86Jrs5bou?6IA4i-se-81RE?xq`hm<kkbns;M)h3IS4 zrYW08<u?&v&}iq&&grkLl+oB<U8-Oqj;$pPT&*riO*9Wu6wq0jWBU+u{KQT1xC+w( z_=L9<bC0C{b4G{BXkrFHdCZoZ(pf9wc&x0U0z}%Sg;1j^;<2xyh2!UwLe_4bXH2-! z&<HaN88$NN6jfMO81HBR<LO{QeOSg)&+PR5@g6VfaHYTO@>`)|L8$_ory=)wu+3I~ zQ1x72xrB-+j160%=UK1QTBJVyveV9kYr@nJrrPJW9@uzLxJr(B+KI-fANm+}!?~?> zXpO8wqQ&kFaYEAzTfuAss8;D{v9y`SV*b2S|4o*{vJ2a<ZXSViXWcTkn;TQ>`)$Gp z(%VQ@>suD~h9*@>61Efl8)qF6PU{i4D-2PXd^A<5dgy)VX_%GJPr3%)1BrY=wmD$| z)JONm(YrBE6GtMXWwc=u)DM;KLq;&3Oam{{<4UST$u^CGI08Lznj(NB&R5u@XufdW zxF`dkL;=Puz*m8cKG$y9Vi<et+-sk@1m6m_Z2a>4nX{L?|8sgo{AIa@a0@1ExV=g< zz{3`a@d<w=QE_659GAkiHaU!Ol6--2NMugeB!N|arEH!JodHsQZDpy-TJmGf&Lann zPL!xs5fMTLxJeSh$%5D4Ju!3dBFsrGrovERXgD@G3LaddI{_YA<ggWKJ!@7!-z(XO z`WC`tmfRx1Y&2G^B&OGOpcf!W!^_fPA{{$DSd!q^@j|1KlYW|Fs+@@T@SJ1wkIC0n zxfE(#Mmg{XDa5i>jwO!Cs;JH&X7NS&ifUPik|P6+!Ml_+tq~g#_*QrvG)3TIHY!6; zg`rWXe|Ar5aSo@m6r6(n(1HA+A)uEwnqSIVwOb@Um>+$3;)M64s9AB>w$@>M;oy-2 z$D$n85nc^9yc?Yu9UUJ}C4)ygg2L|d^6B-JTPMt?h+D)>tf+Jqv$JUU4IL!&EP!$7 z05`|3Vul<QUTCO)HqLS6YMdj^(9k&2+f+;_vF5}*j*qJrb?`#)dB_Eec~|S+4=4jT z)_V3={H^(Gti9@hxB<=+F$5278BwUQ%`AWxo|S2EZU(WnV-ctgb2@yiFwXQlY%E`x z;GTl0%W$>Ak>T1zI-iHMXuDg4`DQRG6TbEf!#kW0Z1XnwI}k^~pTID3js`FBSntp> z3*_Y5g|2x@FFOs4I&Biu12K0AU*Oa5WA$8!W7NAGc7UA^z@pwEuwsEuu-it(_zVY` zb4e(zj^K28Q5p0WE*4wtZoNN!k{kPph<*&dF}}#A)Z@|$(anU5_Gjg0vNX7Xo47># z?u$Zvi<`EW@kt0HY!Ckt{)K-8-s3;#%dofo`HXxT?rwhuEfM)U)R$*?llo$j#d`^K zpxm{igN0WnXWt*ZvU(-Ba^>m<PlJQQ`nht&zTCOGaVKffJv=;o;2Z6OHIFu=%uY*d z>w<BnnNg`79kK$35=EoZ{LrF@S{Ch{6#1eLIOPx2aCAz!lhvnS(WIJDZ(pzNmihP^ z>Zr1sAcMDMiiqq^hBhLyzs6b;e-$EjpekJ%5lJxoZss813bG_4N>XNRMC7*ac$;@2 zX&|aI!QbJYJnkNUU74Fb5YMO>Ze(|~5%!XjQ3XW75W?KT+K6;CML`0kNl|b!v%0U^ zdjlup>C~2{+oge+%dFn<rT<=3dY`<$?!ZqN<SAv^U6<-=s3{lKbkvj|eZGg}f@JsY z%P}rSJXW_GGs1ewILyO|?yv4pE2;zVojXp!rZ~kDE!v?Lsjng-SNEk-5__msD!iFJ zR@$Z!ivoFez-a9&e&^Ptr(sl@V~6q^*h<?*vv19(myTtxPiXKmbfXQWS{N)0+Oa)2 z%r8nqLIXVp0{Lah-)yE+R5FLJ2n<(6WV&oPDS}WVLmVhgU^LXWIsCGDo{X{b2uVyJ zN$&8#XSZ_<<!;p3N3Cf1<5uL%mzps(r~xo-;W&;MN_LI$i?Ou}paL<H22O(xmVjN0 zBK1w32}dt6K@9#fYAHa`RN+Y|KqWRj2&bLSfG0SF49l)lv?mx6e(7`uF`r=CqD`4! z=jPb#XM8`bq%zHPM2jQqv5v3GWxSLs;t-w*_v>Ma^X2O8G71TCqpdt7D6zUgXaXK8 zTDZnbp+s$)xfhRA!gCyyn5}Q~84wawWI$XlJX`hSu+AzA2a(Q(O0&@-5m`eP9|BN= z13_ed-WeWR>GQgBTISanYB4iiShKG~Et4%d8#?HVG{}OQHjE~`mr$!@1&PLz!>Gft zu6S_HBuZfNhP=a3nC@SfE{u1c@0cK$;(e)kK7TLS22@F;E+7miMS;2<ZTdiNluHhK zW#DE0hb#P<d$w$2N-|s{Tgp?+ZK)T+I^=iIlz70cHO}}jG-tP(g8bt08l&$Hsf0Kh zw@J%$$#P~~5Ya;X4o9ipv!DyD2wKT;Y{M&z&j<i0gLhDAL9ON%0+WM7bD)NH51DL_ zae7ZUw;(>;m#AR6PqF45n5~^^=0R6$T<G~Xr{5ZRiwik0c`JnE8j3H4;iMXY4&*rr z%}MA0qu@ee=pGFo+T;>%ffI$~ydu+IxLCcrTxNjepPUhhTDmY7(PAeAhLUY93~GW< zdW=$Q(BePe6;yH{uo4p!r_kNOyn4t_G!@}CcY$UZEAZUetLPhWTQMC=8;&h&jRqpr zP>2UJ?#`GSjY7KTQJK+=k3?_SPP6)omg7=oZmm=j)tA3BoWIvR8s6l)aA*Gnr&3h1 zI`8$KbnE|8pH(JfPK<lx{&xzt+OO-{vK}^O!M-YB!Vs}JpMO5@o{6C_bR5UPEgGk4 z!v<=ZyW&T6OA*734Oa3^*nz;+hZHt`_+Vps(<(33L04SrRXij~bs7Oktwiw(6O)+I zpG{0vOXZTm{ROSWVUE20rvEZrk+SSHY}@x2^gCP`%<s2q{0?ZMN!?r%5`$ghvqCoV zq&;?LDB({lp0>u+nm;ACkq)!e#=-+8c}hF<+I(n-rwRbNLMJX5ors{!yi$Q-+n;`+ zQJwmQWc^YIC1^Y%F6pQH_@nK?kMoJVTiF2}$4ab15^Ne`K+<ey5ovvVi>jRptNm6N zeCpd(@Y%57+8eE=k2Pfh9}ud*FBMV{PN+LWL;NOz7;)&DRxx@c4!1S_LY!cDr=!hl z%ueuYx){AKON&5Mc>pHg7VOid%CtE1jTt?fHOCXWlghB8;}7a?LKhii40nq57Rp`k zau~6qUK>&u{ES#1UsTEldRkE)|3vikQEu8MMFWds7CkLmxi7QFG(kFeLv*RkZoA40 zWpDd|%szz&gh;o)ZCvGsLC=-n<`R3|*v#6!!b9dZJM3P>U5?07a<!u<rpQv|PZ4sj zO93PG?*{IhMIznkDoM83?cd>pkvB*tkv6(iNIZE10Y;oC5uDvfSg{t{=!VQ{Lq=)Q zskpbdPI9`@qu<S5NK2o3tCUKGT^zP=YN>MJOuCo)kPaI0)%ys<S7Trz7&{!)&X2=9 z4peR;@kpvLn=@YNhMKg&<G7ZPC5U`Y$Gj=iI<*#}=&c6`uXM_7O^#Xqi(z&l7ipry zsu98AJ(R)CjVdz?IR)og=}4TUW$sw#p6+oy<DJ#!a*Rr3K#QpxU({aA<h9IYWh_sP z(1~F4$l$Od@yXrr(1eAw-7(S&k0nRVdk4bnoYhe-ozi$Fh{T92D~1lkyaYDY9gqCu z4_y?EVd`ifCED$gkgzXwV}5N7PhgfP451wgMBG$`P$M3b@?8b11+h-mEeb~gJs2V< zQG3~(oiQH9Up2JbmB^HsD8NK}QSXxi7dX-}vFYMXIc#uRlofhAiKcn_2>C9h%3pxw zeKYqg1#{(=S*VWO%>EZ14z8L!=BYYAU8tpw@9881*&-?(KAh<OYZNg(k$91QI1+t1 z72T<pQ>O~Wk@=B@R8^-=CF^p@rVFVg2)pKs$yD|tS--uAtDT9eJssVtWVZB5;m*k2 zhSEil=F8XcOPwACVM_c(`q+BV$i=97Vy!VGv*V6yt#p;@iX2*>bzUqA3G_Z8;z*G> z2@)qpo`rv%h613d!XV8Y1ZhtcaL^Mp&?Wj3q4N>h?(q3I2T^88Czg=?P9{hMRTa`Q z;p#u7eOXXnAZ22B(Ad63n&&7h!{n^N2kq7snCN}r^r({~qv6t@8erBQVPSEz)#h{$ z(*%nvb=dbUZl14gYARodO5aEh;6}m|Q=AR@8B)dKMzwCs35~X|G+JRc<*LdL!XiXo zqNG&4i4j>@E3Gd_ROA~`^b!@9NCpod1Iqv{258baOUjRrc6Z#1D90GWM(|}8p@z8$ z!3LXVWep|8U-HBd^$YPCVoI>*nl8gcK1+NWnoOr8Cfc~gMoR@%JA4?V8;Wvv=rxt$ zVyF>mP49-L!;ovlS>sJyxWcl<Pc2$`DwQB?W>Hnl>$31j4F&@F7TYl7hfbZ6BMRSX z^*66xs`Y|HmR5JZ+1y#f8`?gTZ2QpZ<Wq~D2r?y;gtgyM5AHrnH+-S_Apx?u`O%z3 zeGoX)K<m#@#t}Lwg+2WPw{*^ikPbl45K^-<7?8HL<OT9b=R)VouOe!7pH>*%5}p-r zcA(Cc5w9C(xaf3CqF@fVLvM9>S_~+<wgU|#e8Vn>{I}YGNG%kl%AgdSsKH(5IY|T& zULg$KKF)pcoG#MSZVF%v`n(?Cmkw3zZ3#%_P-iJ**LR=}wQ%!IsyJtm><2|iNWRwA z-q)rGT9QKbwb!0c0l%08YslVu(1h4CWXVB7nVo?d{750$z=H{}-j^ICQ)0(ounkPV z8;8pJd^`$hgInMGL|e4%dvF^39oq5?KZy?aTZ=EQ&%6HqUG-O*`E9PRncDsb^)$-Y zx}$PMwe{-wsBP`2tqQG>@LnsVy>iNTKC2bNpg=(QIP-pWIHB$i8;MnP;#?!$g19P@ zDY+m_XTRIMjTQBc$ZkC-+ig(Z_ND#<jfqpxcWVIZiC6*;8kaC@Ez^^)cb&U%`pkt( z=J=qVd;5ZWto4TlILvK$o1+u8t%5F5bsf5F*W(v-G1GkWo^3+ioWA~RF2mdEJJXn* zC;&IlqgoDUHRG@8@+n<j)w^@t)jQribLOpj*W1>-dRJw|GI|RFTPJ3uut@En)fha( zP1}XOTwixz_b%who&49)p2>_LX?+HHZEf!?zG@c^k8&*?)8!@IF6wsC-7a3OJ*h;+ zaebLz<WhQ3pI^LM%gjyIx@9bcp-^qlHE>t9`^v5S>U_mHfXf#NVN~lnIrV&gaH!Vz zeBqThr`Q4rqfZ8Z#7NXK!!Or%I<*oPh{t_xVq4765AW&4VqQ9b-0iiuyrHrkitzO# z=Vjh|U`Rb!kRK~shNY$e1FF9iIFFuyEU}WvjT8r6>HayHRh_Yh;!`L1O=_=qxu$Kw z?3pFW&uhr(6`Z5mu0vN2n2h<r)eYS}cL?EhEpy;dZO05)BrM`k1X0^D_1x&_?3K!u zi&qc4GCF#))@QBNs8D4sGj^cXheXBH0kI)3*B(1`$b{fmRyStfzp{Fjf_o1gipqOz z=HS7GDzbYiWLHR`CTpiV^7dWJ<a<yCr^@0vhz;ImS#%5POZX=#^sD@<{3z+mZI|0i zZI^MMcsX0{C`0yN?&25L!R1`Jrwjw&#x}W5ztLBQ{J*@Ncm4KGEQ3DfAan!YFYhQ1 z$XN}kN#|2PR(=eYLtj}6-Y^d0Cm0ah#DKWGv%K@h<0Tx}Nb1|(R^C~Dth}qdON@XU zPu%C(u@+7#J!;^Wcb9kHc)a|ir6qv0)u;AY9hdje2Gp2II}p8ls{B-W&nfDrjHmCn zUH$}V9<ww%qcqRZt5235r-jeziZhyRxTI;n{2ioy!qV>MDbEu%^KB1L&y}AmJym`V z3H#H#U}5m~6TBUy_2K)IdQZ=vrQG=KEAFl3_zrUHE$_Xtuapl*p!8fhZ{G&_w!i#* zd9b{n*6+0u*lSY!Z6$s$57C-^)|&l170Sb<S4%^s!WWT%Up~Oobm>6ppgkQV<%p#m z<=Y5PWA=22r%|2`+tWBtW936O>W6hb)pmKDawbYgG&h$gXv>lE(b7@L{L3%gZ<FMo zaXVHzT6*CtI5wh>FP4ruCq>pyMw?N2k-RUJkMni%#>>p;OQ+gOFO`meMQdtXX_Bu~ z<>7Ki>18(pJfE=Vsp$D+=>$xnQ^6{0w)hWV>lx1ZDaF<hW1%ABSPywnT^@D%voU+n zOCr6JAp9Q-gt3Zw@ye}H==~rz<VUST%C~E`v|l5`as*YFu`h^afIPZz{vNoxl-Vj% z{^lf7!1MR8@L#S>>FS;<3rhktm{dtNY>byF-r+r2DLff~c%7{ZSLFOXgvZ825w|F& ztf(YXxjX6Q0H~)T{Y8U4kB3ExXn}+@>-FiGsg>fwoPX(Baqi6zk4`P!`tWGe>tlL- zEPfre=-kCOUOIMooF+l9lxaX^P0x}WmT>_fX1x1Er0sI*t6s#7Jb&-)x6hrPT3=r( zC0`nB8VzOBCDT-xvX^tw%Q<O+`AjH5AX#w-LaeVXSuMO4sSjUTJLe`OHknU-Ju6x0 z7T-?Orw4pehti+Lt-ck;$x44(za=L#mn^Pn`b!B%B&lz<f}6QNkv>MKpy_0!TdN%6 z3xz|QWhn8r7M533mQgQy1oG>T&|JJQ9D@>G6$Md6xI;u4(`}HP<0<YDn!b%M4mQ3x zGB$p6{DtGGQjU!so+wYmTpkL}kC#Ws(~KY(G)byCbXyblc=21)Ws`rWTG!Zve}{ea zzB>g&9yGNi^V6ATMmF~3?AcUDA2z_kj<6PeP|b@zO+&qh(la@F<j~QNQ}fEwomkoU zLDgGAyfFJcpQ<CxW*mQ5lg1y?NOY~GI3XAnRnxQ!^%aZqlsDthfnvcv3eY8#BwClS zrKi@t>H2No`0yj_o+C#`6^JCh3qzAc4ORx5b=@?vkG=&kBDvybc}S=jr?%0oo)RBZ zV51>pBLtcCFA~`s0m`hsI7q0an8TX}FthfU`21*{PeY5w-i{@^)ZE|H=cXQ~zWzn^ zxfSF{^=jgUq(9gM0GY*WY-;$LcVTkR%^n_0CQog)+0nyeFDAd@xl9nC#m0^|wOI7g zy8fnXO7HsF@y2$fwtKjp;tdwxh2Nqk&1$C?hQjx8%J?q)HZ<&{4TPO{=t*sx=EXk* zU9bUax!HrGS6{hOI#}y>wiwZ8If1O_!qHEW(R^{Hx^k`Rv>CX<#`=Ub8hmIg<5wm8 zn{Tbz@MQ$xV&t{eo@#<yk^4x6j;alY%@MZY=F<0OH2hNA9`@+U*p<?O+O`BzQac!a zE6kS9Tn!&KEM@A|@GHZ$eTkfo&ToNG*FG7Ra%GHRJkU@|z1yP`!QZ0&_1+kju6?F3 z@d7I6FI?T2;OD3X6uY`H{)&Zxx;H*Du{m70GWPI9!}pGC*7}5HhsbzsAfd`mNk=#9 zn)uMlCU}bZ`?_fG+GDc$$dmV2nAf?cUxZ?>WhN(UJDplzGDYi^u$$tfN3K}S8*Qhd z*PuJIH{E)OvM>ftlYn36ZKCb!?oC+8H*oDC)#)HpYD;<j6w~tp3{H_=_1-xn7~s%U zgMUdAy?f)}>y+E50`U<Uen<;Tb>awgWXq)$GjOLu$DlzELj>nS{E02NG<U=D`E9Fp zPfjlK$AGz2nH(^ioM?b+lgY`M*euLWj*VU=`fL<V?jA2OOc+nU8oqaQv$hQiE1aos z<o3Tex_@PKf2nDBwLi`6aY9)GzC3#~Tl_V~EdnM9-+U}~b1i4=uaNsC1uswIh$ysg za0-;t8yO(Z_Pijy6}2*^n;3*bJQX2YN25BCu`eR|<SOf2b7zkZj${r%X6gQh<xm59 zppe!H+4o@BXH>l7I-2Pi;UOw0v;}LL{3J<<^UGUzz3fXF^%rGsM7x?wifF*o)K^I0 zU@FFm)#Acz1TUI>MqzOL`0?XF?a?FSgNbZS=#$EsRT0tX7L*hFG)&HpjC&xjR4GQh zxWy)>k+Z_PyR^rgv)_-zULx?iMas((0pe^sLD<{dYP%Hx3zj`b9Bf~h@9(s|hYOt& zU%xZ^F8*MMqo)lWs;qSdT4?oLI8pTuwbH3V8Qb0a>`t@Y>zNPb4kybZNQff37Cx-b zEw26}?N}#*$e@%2TY2ok10HW)SAZ1>T)0Zpg7<atENy#XVxH}(8T)&xQ6jCj9etg( zXCGYKH+F^V@6!HHP40hva{tA#{fi%K|2+;!iT1)bzyEAwJa`W(NxVnCP5Ur84v(@Y ztB<rJZKb!`l`i|o+mkA6i+$;f+hSK<nm97~!g2l|W4nFKEozk}w<!jqSRTH>w$(oh zJbd`@L$~gyv~{u1N^V`-wmxu+-?k=2W%EATw(YcS8(h}rFq6Wq_iAv3L>z#&c}&O9 zghJX^|3h-84rr%NJb3TeoJM}Z9(lJumfEc<<Y!VlcJSe~)?Spb=q_G;PhKf;j1F_W zj_MU`&+2vFUBPdje^n~pbuYjGU*Y8ToJaw-+Ls%OX)ME@qXK3x<*zCO?jcn#bxc~F zORG3g^_AKi=fl$8fbfAss_Nlal(<?ud3i$!rt(jMUsB2|wSi=-G$J)&kYP01doOJk zMw8EU7!)z}YJ6g|-XTIFIx(10!^~#*HPpf5WQb)H5K&OS*qsDjz>|n6s$<&)S8|d! zbKYuEnr@fpIoeVFGdYw~XpCV}>vJ0ebg?*H7I`}M@vtzQT7kc4zOEw(s$=gj)cdtn zSQ@F~kr6hutUqGk!G*y~rxW^8mQ?oe=7*ZJ)e=fU-cPkFpvfO((`vS{2-&@ndq>J~ z1*8Td_25vCYE*wp56HY)JC}p`y@~}p)Z{iiY6-NDcLW~$05>urM9ZCwlj!5j8s@^m zce95079aa^i`Rgk*SDuS_M6(%EU&h<?JdsWRMOx#Ne4^{WsSjSS-U1*=Ot)NTWy!| z@<R_BV3p$KM~5^iOda1=x+MEffrYqO!fo0wfINJOw-1Z>@keSg>DoSa!B5cM2M`s1 z5*DnMsIh^lvDAHg@SZE<^ZI$kMM?SVO8Pf+`AJ<A{=`L+9*7|5ImZU5cN)8?-XDE1 z0YzZp2HsLWQ#bg6?%tw?;I!^Or@JBU>Yh^&(UTYTMR7=6<N>KJ)VCWQ6eSTMg_$|> z0nkM+f(rf_S%?9>E*BcXB^7d16&=y#Z651=NwHDzu3qiL^l5q7(ScsfRDXQVsMOTU z;73*X<8!_l2|1GsfS{ry(Nld}LTVLE(AHp1%_+J@B&1LEfh6G|*jw)qFDH0WjXtJ} zKx$CZ<taTfn{9#ca2JPRjJx`FlQkf!xg`tJ;8lHnPnTcUSGRl{L{ULW-%sgc=Wu+n z6ItZ(*QGOXft%cSwRLx7a-F%(UD>CzyRw6s{>)&eH?u3dt7CxYJ=y+jKjr`vxPt6& ze}<<_d*2iK$9w)8Xz$z6(f(5Vv)KXe>$y21G%T&o&7mbi5VwVDy+g1am5qHtov~sq z|CXi~vxMdKmDNh{0}TCT0!RS)Dte11z-p=Z8PY@mYOkC{NHXN|IAdYS^-62<pn?`i z=td;U;_A*HfO|)bu8Z$o9DDb@%a`AaPZNC5GNjZgcUjm_%F*QD#WUy6%v{2`wOR0> z4qeGBYO+qOL04iNB-^D8Yp~Ks^3$hgl2wEbB7D1Lx`dX$3U`FRnvnMed4J$h4=&p1 z<)^1dPMsQ=neiRDTNx|iNj+IfqzdoGu&IEN{3+rfr}K~GFKNsslI1L|I_>audmz2N zUi@NlX*nwVUEjJ^g{KQ;MzLmv2jHi6ivnGD(^*}65`*`^y!rRve_y@4lfT$BO0`&% zI>}g0amQ1<@J7~mBX2*=$FJq1fk_shU{u#)Pb(qAHD<xacj33FIJV0NY*GNa4l)8S z0OxTR)2@&Me^Vd0`z?dv^=)%=-m@y3Z%6cS39!S9-nqHrIyNQ2++6TAGS<6qmy0*? zlpauSTktP+5kLvPOP4=jQwHCwONr0H&+BelmpNU2Mi*cfh0Ik6EKw{4qKWI<&Y5`X z41w;0dXM`8Cn%6FiQvB>)8%d06QT$~)J6b9H%$UM&jo+Xr+Q!5cts-#-d7d-^uBwg zc&CETxZsFdA|`<uP1Umt*Mp#2kkbxeof%HE^JV4A1!zWqbC!Z%QI4NhaVK>7s?xou z%Vk|wcz3yrD&P#)yY5(k^1y;&Go175c=Q)6vxqkwgxbJ?DNb6vvA?gP|0`YosV;v- zm!H$+uX3sHC~|f!&6(eLZS?Skg_+O`cYxUuYG<Y$Wzy4gfvbBAC(|}{hrybf|49{Z zB-nGh+pEj-y8M(bgIwzUudf><K!HrbH8m91KxsHNk1Nfmb$Lyf&#J(;b$LgZ&+1)8 zcl&fVqKoMiKB+r9nV!~g-&T^HdMDOPAl7iOtczg;I`f15x|kW8POv~eIs<Y40}dU3 zz8%orurA}e9M&bTOP4Ov9}L7L4uo?Bay9IH*X+^VPpG`7bT^^PPwDZebuo3vg5H^d z+&|H~Q9YV*op@ZqHeC+tq8L)aye_ZmGNsG!s&8-TPDf+#whFkYyJ=mn>2h6{8@d?Y zGo!n6x`_M^in@GWmoIRs_sx|n_(&+1-ozMzP3fOLRlYNW-e3IUjfJYc=tk#r=8e;5 z*v!s%i@oigla}CH#Z@Hm7O81K^Dw7cUf1P{E*9X)@VNN!-=}n+(bx03ly%v!cQ<u+ zNtZ)<Jgm!-9^cmGq%QC4@}4dWy1c2&qAoA!@{TSq>SAcjuj=kAy1b#H{!Di->mv2U z;3Zwo=+dbHy{fxcbUC5RSzX@MMJQhIp$eGPqtFz?RxfXJhp*|XT<+14ZnyPLlaO5Q zbw|VncIRc#RN)o6KhLTUzsbA8<sRD?mTY@;YpHsi7qg3>Js*s#iOXt)A(@8AuIq7L zml%_>yE`<oo`W?Yn~Rg`PUSc0L`S9rbyu(|)PH3}nf|XYlYs-$-@eoTx~G9o@kRPk zrtY<??xaBOp7fUc>`tx<X=UYSpUHBU$vx3Q4gEx@7Y}qGvpbXP9mw{P#?`w!Gw{;D z6O{k>KyILS;Jezw|GN7!x$U{WTyHLG|9ztG)x_5@Rf$~N26hZQ-$5wEf$4!K2X+pe zAYFdo9M|4~*9MLZbPqf|@a(`YQtjmW<iM?g^8;@ToF3R1c%3i#f#(PI4t&QzH?Epq z9jFX^cA$eYM`+VDUk7p{eUJBjN3JLL4FBc&&gJ&@?ay`Ro^lHGTrohE0`c?o?{Fr! zhxYdK-$-A!FPr;h?s0OylFRh%?NWa;yKi=6cZ09?p?3UiX3ypRfU(Quc~fZb?R+M? zldn6o`D_Pw1B}_>_I#)HdRHGVqIxp})V7OXu9?AX$L?IFt2>wFU#2UYV@7u}3jZ(h CH^I~Z literal 0 HcmV?d00001 diff --git a/week-0/day-3/venv/lib/python3.6/site-packages/pkg_resources/_vendor/__pycache__/six.cpython-36.pyc b/week-0/day-3/venv/lib/python3.6/site-packages/pkg_resources/_vendor/__pycache__/six.cpython-36.pyc new file mode 100644 index 0000000000000000000000000000000000000000..49455edf7bdba9bb7377fd9749ef05732c897195 GIT binary patch literal 24451 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πr^;w7t^ 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 bbSj?9<%V+GSo4usDuHj}BtbXf-h};o1yt=` literal 0 HcmV?d00001 diff --git a/week-0/day-3/venv/lib/python3.6/site-packages/pkg_resources/_vendor/appdirs.py b/week-0/day-3/venv/lib/python3.6/site-packages/pkg_resources/_vendor/appdirs.py new file mode 100644 index 00000000..32e7c9f7 --- /dev/null +++ b/week-0/day-3/venv/lib/python3.6/site-packages/pkg_resources/_vendor/appdirs.py @@ -0,0 +1,552 @@ +#!/usr/bin/env python +# -*- coding: utf-8 -*- +# Copyright (c) 2005-2010 ActiveState Software Inc. +# Copyright (c) 2013 Eddy Petrișor + +"""Utilities for determining application-specific dirs. + +See <http://github.com/ActiveState/appdirs> for details and usage. +""" +# Dev Notes: +# - MSDN on where to store app data files: +# http://support.microsoft.com/default.aspx?scid=kb;en-us;310294#XSLTH3194121123120121120120 +# - Mac OS X: http://developer.apple.com/documentation/MacOSX/Conceptual/BPFileSystem/index.html +# - XDG spec for Un*x: http://standards.freedesktop.org/basedir-spec/basedir-spec-latest.html + +__version_info__ = (1, 4, 0) +__version__ = '.'.join(map(str, __version_info__)) + + +import sys +import os + +PY3 = sys.version_info[0] == 3 + +if PY3: + unicode = str + +if sys.platform.startswith('java'): + import platform + os_name = platform.java_ver()[3][0] + if os_name.startswith('Windows'): # "Windows XP", "Windows 7", etc. + system = 'win32' + elif os_name.startswith('Mac'): # "Mac OS X", etc. + system = 'darwin' + else: # "Linux", "SunOS", "FreeBSD", etc. + # Setting this to "linux2" is not ideal, but only Windows or Mac + # are actually checked for and the rest of the module expects + # *sys.platform* style strings. + system = 'linux2' +else: + system = sys.platform + + + +def user_data_dir(appname=None, appauthor=None, version=None, roaming=False): + r"""Return full path to the user-specific data dir for this application. + + "appname" is the name of application. + If None, just the system directory is returned. + "appauthor" (only used on Windows) is the name of the + appauthor or distributing body for this application. Typically + it is the owning company name. This falls back to appname. You may + pass False to disable it. + "version" is an optional version path element to append to the + path. You might want to use this if you want multiple versions + of your app to be able to run independently. If used, this + would typically be "<major>.<minor>". + Only applied when appname is present. + "roaming" (boolean, default False) can be set True to use the Windows + roaming appdata directory. That means that for users on a Windows + network setup for roaming profiles, this user data will be + sync'd on login. See + <http://technet.microsoft.com/en-us/library/cc766489(WS.10).aspx> + for a discussion of issues. + + Typical user data directories are: + Mac OS X: ~/Library/Application Support/<AppName> + Unix: ~/.local/share/<AppName> # or in $XDG_DATA_HOME, if defined + Win XP (not roaming): C:\Documents and Settings\<username>\Application Data\<AppAuthor>\<AppName> + Win XP (roaming): C:\Documents and Settings\<username>\Local Settings\Application Data\<AppAuthor>\<AppName> + Win 7 (not roaming): C:\Users\<username>\AppData\Local\<AppAuthor>\<AppName> + Win 7 (roaming): C:\Users\<username>\AppData\Roaming\<AppAuthor>\<AppName> + + For Unix, we follow the XDG spec and support $XDG_DATA_HOME. + That means, by default "~/.local/share/<AppName>". + """ + if system == "win32": + if appauthor is None: + appauthor = appname + const = roaming and "CSIDL_APPDATA" or "CSIDL_LOCAL_APPDATA" + path = os.path.normpath(_get_win_folder(const)) + if appname: + if appauthor is not False: + path = os.path.join(path, appauthor, appname) + else: + path = os.path.join(path, appname) + elif system == 'darwin': + path = os.path.expanduser('~/Library/Application Support/') + if appname: + path = os.path.join(path, appname) + else: + path = os.getenv('XDG_DATA_HOME', os.path.expanduser("~/.local/share")) + if appname: + path = os.path.join(path, appname) + if appname and version: + path = os.path.join(path, version) + return path + + +def site_data_dir(appname=None, appauthor=None, version=None, multipath=False): + r"""Return full path to the user-shared data dir for this application. + + "appname" is the name of application. + If None, just the system directory is returned. + "appauthor" (only used on Windows) is the name of the + appauthor or distributing body for this application. Typically + it is the owning company name. This falls back to appname. You may + pass False to disable it. + "version" is an optional version path element to append to the + path. You might want to use this if you want multiple versions + of your app to be able to run independently. If used, this + would typically be "<major>.<minor>". + Only applied when appname is present. + "multipath" is an optional parameter only applicable to *nix + which indicates that the entire list of data dirs should be + returned. By default, the first item from XDG_DATA_DIRS is + returned, or '/usr/local/share/<AppName>', + if XDG_DATA_DIRS is not set + + Typical user data directories are: + Mac OS X: /Library/Application Support/<AppName> + Unix: /usr/local/share/<AppName> or /usr/share/<AppName> + Win XP: C:\Documents and Settings\All Users\Application Data\<AppAuthor>\<AppName> + Vista: (Fail! "C:\ProgramData" is a hidden *system* directory on Vista.) + Win 7: C:\ProgramData\<AppAuthor>\<AppName> # Hidden, but writeable on Win 7. + + For Unix, this is using the $XDG_DATA_DIRS[0] default. + + WARNING: Do not use this on Windows. See the Vista-Fail note above for why. + """ + if system == "win32": + if appauthor is None: + appauthor = appname + path = os.path.normpath(_get_win_folder("CSIDL_COMMON_APPDATA")) + if appname: + if appauthor is not False: + path = os.path.join(path, appauthor, appname) + else: + path = os.path.join(path, appname) + elif system == 'darwin': + path = os.path.expanduser('/Library/Application Support') + if appname: + path = os.path.join(path, appname) + else: + # XDG default for $XDG_DATA_DIRS + # only first, if multipath is False + path = os.getenv('XDG_DATA_DIRS', + os.pathsep.join(['/usr/local/share', '/usr/share'])) + pathlist = [os.path.expanduser(x.rstrip(os.sep)) for x in path.split(os.pathsep)] + if appname: + if version: + appname = os.path.join(appname, version) + pathlist = [os.sep.join([x, appname]) for x in pathlist] + + if multipath: + path = os.pathsep.join(pathlist) + else: + path = pathlist[0] + return path + + if appname and version: + path = os.path.join(path, version) + return path + + +def user_config_dir(appname=None, appauthor=None, version=None, roaming=False): + r"""Return full path to the user-specific config dir for this application. + + "appname" is the name of application. + If None, just the system directory is returned. + "appauthor" (only used on Windows) is the name of the + appauthor or distributing body for this application. Typically + it is the owning company name. This falls back to appname. You may + pass False to disable it. + "version" is an optional version path element to append to the + path. You might want to use this if you want multiple versions + of your app to be able to run independently. If used, this + would typically be "<major>.<minor>". + Only applied when appname is present. + "roaming" (boolean, default False) can be set True to use the Windows + roaming appdata directory. That means that for users on a Windows + network setup for roaming profiles, this user data will be + sync'd on login. See + <http://technet.microsoft.com/en-us/library/cc766489(WS.10).aspx> + for a discussion of issues. + + Typical user data directories are: + Mac OS X: same as user_data_dir + Unix: ~/.config/<AppName> # or in $XDG_CONFIG_HOME, if defined + Win *: same as user_data_dir + + For Unix, we follow the XDG spec and support $XDG_CONFIG_HOME. + That means, by deafult "~/.config/<AppName>". + """ + if system in ["win32", "darwin"]: + path = user_data_dir(appname, appauthor, None, roaming) + else: + path = os.getenv('XDG_CONFIG_HOME', os.path.expanduser("~/.config")) + if appname: + path = os.path.join(path, appname) + if appname and version: + path = os.path.join(path, version) + return path + + +def site_config_dir(appname=None, appauthor=None, version=None, multipath=False): + r"""Return full path to the user-shared data dir for this application. + + "appname" is the name of application. + If None, just the system directory is returned. + "appauthor" (only used on Windows) is the name of the + appauthor or distributing body for this application. Typically + it is the owning company name. This falls back to appname. You may + pass False to disable it. + "version" is an optional version path element to append to the + path. You might want to use this if you want multiple versions + of your app to be able to run independently. If used, this + would typically be "<major>.<minor>". + Only applied when appname is present. + "multipath" is an optional parameter only applicable to *nix + which indicates that the entire list of config dirs should be + returned. By default, the first item from XDG_CONFIG_DIRS is + returned, or '/etc/xdg/<AppName>', if XDG_CONFIG_DIRS is not set + + Typical user data directories are: + Mac OS X: same as site_data_dir + Unix: /etc/xdg/<AppName> or $XDG_CONFIG_DIRS[i]/<AppName> for each value in + $XDG_CONFIG_DIRS + Win *: same as site_data_dir + Vista: (Fail! "C:\ProgramData" is a hidden *system* directory on Vista.) + + For Unix, this is using the $XDG_CONFIG_DIRS[0] default, if multipath=False + + WARNING: Do not use this on Windows. See the Vista-Fail note above for why. + """ + if system in ["win32", "darwin"]: + path = site_data_dir(appname, appauthor) + if appname and version: + path = os.path.join(path, version) + else: + # XDG default for $XDG_CONFIG_DIRS + # only first, if multipath is False + path = os.getenv('XDG_CONFIG_DIRS', '/etc/xdg') + pathlist = [os.path.expanduser(x.rstrip(os.sep)) for x in path.split(os.pathsep)] + if appname: + if version: + appname = os.path.join(appname, version) + pathlist = [os.sep.join([x, appname]) for x in pathlist] + + if multipath: + path = os.pathsep.join(pathlist) + else: + path = pathlist[0] + return path + + +def user_cache_dir(appname=None, appauthor=None, version=None, opinion=True): + r"""Return full path to the user-specific cache dir for this application. + + "appname" is the name of application. + If None, just the system directory is returned. + "appauthor" (only used on Windows) is the name of the + appauthor or distributing body for this application. Typically + it is the owning company name. This falls back to appname. You may + pass False to disable it. + "version" is an optional version path element to append to the + path. You might want to use this if you want multiple versions + of your app to be able to run independently. If used, this + would typically be "<major>.<minor>". + Only applied when appname is present. + "opinion" (boolean) can be False to disable the appending of + "Cache" to the base app data dir for Windows. See + discussion below. + + Typical user cache directories are: + Mac OS X: ~/Library/Caches/<AppName> + Unix: ~/.cache/<AppName> (XDG default) + Win XP: C:\Documents and Settings\<username>\Local Settings\Application Data\<AppAuthor>\<AppName>\Cache + Vista: C:\Users\<username>\AppData\Local\<AppAuthor>\<AppName>\Cache + + On Windows the only suggestion in the MSDN docs is that local settings go in + the `CSIDL_LOCAL_APPDATA` directory. This is identical to the non-roaming + app data dir (the default returned by `user_data_dir` above). Apps typically + put cache data somewhere *under* the given dir here. Some examples: + ...\Mozilla\Firefox\Profiles\<ProfileName>\Cache + ...\Acme\SuperApp\Cache\1.0 + OPINION: This function appends "Cache" to the `CSIDL_LOCAL_APPDATA` value. + This can be disabled with the `opinion=False` option. + """ + if system == "win32": + if appauthor is None: + appauthor = appname + path = os.path.normpath(_get_win_folder("CSIDL_LOCAL_APPDATA")) + if appname: + if appauthor is not False: + path = os.path.join(path, appauthor, appname) + else: + path = os.path.join(path, appname) + if opinion: + path = os.path.join(path, "Cache") + elif system == 'darwin': + path = os.path.expanduser('~/Library/Caches') + if appname: + path = os.path.join(path, appname) + else: + path = os.getenv('XDG_CACHE_HOME', os.path.expanduser('~/.cache')) + if appname: + path = os.path.join(path, appname) + if appname and version: + path = os.path.join(path, version) + return path + + +def user_log_dir(appname=None, appauthor=None, version=None, opinion=True): + r"""Return full path to the user-specific log dir for this application. + + "appname" is the name of application. + If None, just the system directory is returned. + "appauthor" (only used on Windows) is the name of the + appauthor or distributing body for this application. Typically + it is the owning company name. This falls back to appname. You may + pass False to disable it. + "version" is an optional version path element to append to the + path. You might want to use this if you want multiple versions + of your app to be able to run independently. If used, this + would typically be "<major>.<minor>". + Only applied when appname is present. + "opinion" (boolean) can be False to disable the appending of + "Logs" to the base app data dir for Windows, and "log" to the + base cache dir for Unix. See discussion below. + + Typical user cache directories are: + Mac OS X: ~/Library/Logs/<AppName> + Unix: ~/.cache/<AppName>/log # or under $XDG_CACHE_HOME if defined + Win XP: C:\Documents and Settings\<username>\Local Settings\Application Data\<AppAuthor>\<AppName>\Logs + Vista: C:\Users\<username>\AppData\Local\<AppAuthor>\<AppName>\Logs + + On Windows the only suggestion in the MSDN docs is that local settings + go in the `CSIDL_LOCAL_APPDATA` directory. (Note: I'm interested in + examples of what some windows apps use for a logs dir.) + + OPINION: This function appends "Logs" to the `CSIDL_LOCAL_APPDATA` + value for Windows and appends "log" to the user cache dir for Unix. + This can be disabled with the `opinion=False` option. + """ + if system == "darwin": + path = os.path.join( + os.path.expanduser('~/Library/Logs'), + appname) + elif system == "win32": + path = user_data_dir(appname, appauthor, version) + version = False + if opinion: + path = os.path.join(path, "Logs") + else: + path = user_cache_dir(appname, appauthor, version) + version = False + if opinion: + path = os.path.join(path, "log") + if appname and version: + path = os.path.join(path, version) + return path + + +class AppDirs(object): + """Convenience wrapper for getting application dirs.""" + def __init__(self, appname, appauthor=None, version=None, roaming=False, + multipath=False): + self.appname = appname + self.appauthor = appauthor + self.version = version + self.roaming = roaming + self.multipath = multipath + + @property + def user_data_dir(self): + return user_data_dir(self.appname, self.appauthor, + version=self.version, roaming=self.roaming) + + @property + def site_data_dir(self): + return site_data_dir(self.appname, self.appauthor, + version=self.version, multipath=self.multipath) + + @property + def user_config_dir(self): + return user_config_dir(self.appname, self.appauthor, + version=self.version, roaming=self.roaming) + + @property + def site_config_dir(self): + return site_config_dir(self.appname, self.appauthor, + version=self.version, multipath=self.multipath) + + @property + def user_cache_dir(self): + return user_cache_dir(self.appname, self.appauthor, + version=self.version) + + @property + def user_log_dir(self): + return user_log_dir(self.appname, self.appauthor, + version=self.version) + + +#---- internal support stuff + +def _get_win_folder_from_registry(csidl_name): + """This is a fallback technique at best. I'm not sure if using the + registry for this guarantees us the correct answer for all CSIDL_* + names. + """ + import _winreg + + shell_folder_name = { + "CSIDL_APPDATA": "AppData", + "CSIDL_COMMON_APPDATA": "Common AppData", + "CSIDL_LOCAL_APPDATA": "Local AppData", + }[csidl_name] + + key = _winreg.OpenKey( + _winreg.HKEY_CURRENT_USER, + r"Software\Microsoft\Windows\CurrentVersion\Explorer\Shell Folders" + ) + dir, type = _winreg.QueryValueEx(key, shell_folder_name) + return dir + + +def _get_win_folder_with_pywin32(csidl_name): + from win32com.shell import shellcon, shell + dir = shell.SHGetFolderPath(0, getattr(shellcon, csidl_name), 0, 0) + # Try to make this a unicode path because SHGetFolderPath does + # not return unicode strings when there is unicode data in the + # path. + try: + dir = unicode(dir) + + # Downgrade to short path name if have highbit chars. See + # <http://bugs.activestate.com/show_bug.cgi?id=85099>. + has_high_char = False + for c in dir: + if ord(c) > 255: + has_high_char = True + break + if has_high_char: + try: + import win32api + dir = win32api.GetShortPathName(dir) + except ImportError: + pass + except UnicodeError: + pass + return dir + + +def _get_win_folder_with_ctypes(csidl_name): + import ctypes + + csidl_const = { + "CSIDL_APPDATA": 26, + "CSIDL_COMMON_APPDATA": 35, + "CSIDL_LOCAL_APPDATA": 28, + }[csidl_name] + + buf = ctypes.create_unicode_buffer(1024) + ctypes.windll.shell32.SHGetFolderPathW(None, csidl_const, None, 0, buf) + + # Downgrade to short path name if have highbit chars. See + # <http://bugs.activestate.com/show_bug.cgi?id=85099>. + has_high_char = False + for c in buf: + if ord(c) > 255: + has_high_char = True + break + if has_high_char: + buf2 = ctypes.create_unicode_buffer(1024) + if ctypes.windll.kernel32.GetShortPathNameW(buf.value, buf2, 1024): + buf = buf2 + + return buf.value + +def _get_win_folder_with_jna(csidl_name): + import array + from com.sun import jna + from com.sun.jna.platform import win32 + + buf_size = win32.WinDef.MAX_PATH * 2 + buf = array.zeros('c', buf_size) + shell = win32.Shell32.INSTANCE + shell.SHGetFolderPath(None, getattr(win32.ShlObj, csidl_name), None, win32.ShlObj.SHGFP_TYPE_CURRENT, buf) + dir = jna.Native.toString(buf.tostring()).rstrip("\0") + + # Downgrade to short path name if have highbit chars. See + # <http://bugs.activestate.com/show_bug.cgi?id=85099>. + has_high_char = False + for c in dir: + if ord(c) > 255: + has_high_char = True + break + if has_high_char: + buf = array.zeros('c', buf_size) + kernel = win32.Kernel32.INSTANCE + if kernal.GetShortPathName(dir, buf, buf_size): + dir = jna.Native.toString(buf.tostring()).rstrip("\0") + + return dir + +if system == "win32": + try: + import win32com.shell + _get_win_folder = _get_win_folder_with_pywin32 + except ImportError: + try: + from ctypes import windll + _get_win_folder = _get_win_folder_with_ctypes + except ImportError: + try: + import com.sun.jna + _get_win_folder = _get_win_folder_with_jna + except ImportError: + _get_win_folder = _get_win_folder_from_registry + + +#---- self test code + +if __name__ == "__main__": + appname = "MyApp" + appauthor = "MyCompany" + + props = ("user_data_dir", "site_data_dir", + "user_config_dir", "site_config_dir", + "user_cache_dir", "user_log_dir") + + print("-- app dirs (with optional 'version')") + dirs = AppDirs(appname, appauthor, version="1.0") + for prop in props: + print("%s: %s" % (prop, getattr(dirs, prop))) + + print("\n-- app dirs (without optional 'version')") + dirs = AppDirs(appname, appauthor) + for prop in props: + print("%s: %s" % (prop, getattr(dirs, prop))) + + print("\n-- app dirs (without optional 'appauthor')") + dirs = AppDirs(appname) + for prop in props: + print("%s: %s" % (prop, getattr(dirs, prop))) + + print("\n-- app dirs (with disabled 'appauthor')") + dirs = AppDirs(appname, appauthor=False) + for prop in props: + print("%s: %s" % (prop, getattr(dirs, prop))) diff --git a/week-0/day-3/venv/lib/python3.6/site-packages/pkg_resources/_vendor/packaging/__about__.py b/week-0/day-3/venv/lib/python3.6/site-packages/pkg_resources/_vendor/packaging/__about__.py new file mode 100644 index 00000000..95d330ef --- /dev/null +++ b/week-0/day-3/venv/lib/python3.6/site-packages/pkg_resources/_vendor/packaging/__about__.py @@ -0,0 +1,21 @@ +# This file is dual licensed under the terms of the Apache License, Version +# 2.0, and the BSD License. See the LICENSE file in the root of this repository +# for complete details. +from __future__ import absolute_import, division, print_function + +__all__ = [ + "__title__", "__summary__", "__uri__", "__version__", "__author__", + "__email__", "__license__", "__copyright__", +] + +__title__ = "packaging" +__summary__ = "Core utilities for Python packages" +__uri__ = "https://github.com/pypa/packaging" + +__version__ = "16.8" + +__author__ = "Donald Stufft and individual contributors" +__email__ = "donald@stufft.io" + +__license__ = "BSD or Apache License, Version 2.0" +__copyright__ = "Copyright 2014-2016 %s" % __author__ diff --git a/week-0/day-3/venv/lib/python3.6/site-packages/pkg_resources/_vendor/packaging/__init__.py b/week-0/day-3/venv/lib/python3.6/site-packages/pkg_resources/_vendor/packaging/__init__.py new file mode 100644 index 00000000..5ee62202 --- /dev/null +++ b/week-0/day-3/venv/lib/python3.6/site-packages/pkg_resources/_vendor/packaging/__init__.py @@ -0,0 +1,14 @@ +# This file is dual licensed under the terms of the Apache License, Version +# 2.0, and the BSD License. See the LICENSE file in the root of this repository +# for complete details. +from __future__ import absolute_import, division, print_function + +from .__about__ import ( + __author__, __copyright__, __email__, __license__, __summary__, __title__, + __uri__, __version__ +) + +__all__ = [ + "__title__", "__summary__", "__uri__", "__version__", "__author__", + "__email__", "__license__", "__copyright__", +] diff --git a/week-0/day-3/venv/lib/python3.6/site-packages/pkg_resources/_vendor/packaging/__pycache__/__about__.cpython-36.pyc b/week-0/day-3/venv/lib/python3.6/site-packages/pkg_resources/_vendor/packaging/__pycache__/__about__.cpython-36.pyc new file mode 100644 index 0000000000000000000000000000000000000000..cdf7379c6909621fdcaed14b623348dde3f86560 GIT binary patch literal 690 zcmYk3%Z}496o#Fqmo#l>3XEoLMq*KkHgnT}5JEG|ED?;T#KID?k{ma&CW(zN70ny* zHmtj4#VfGFo(h#%`E-u;`}myS7n4bR^Xb*spB;pLq5r<f#n<lF_YQy{s8Ah{pze@P z9g;9W(18%T(1Sh<AcA2LkuJof2P4vlF&V&wL~uZca7bd9k`X*%!(&9o@N|i0&wjhA zXcle{(@cxX8b*07g)-X+_?l}jn(cv9yfJiTo80((NU7nbVw7%2lxkbosoJ<?K&e%H zx4UM_pLI!0X=+U=l#AU-R;Rq$X)2zxM*A`oN^>DMiWjBvGMVNNX~CPKJ-HQ%VQYBB z4QCp!gu?e5SFXW35!3DS(io}VBuT+dX|qKx>O^j2n(WJT&#o4)+u5CH(hBg>*wxD5 zv;oW;KPK3;!ntUS;+Zu<>2?Z_(rf)FU2xH!ykFj7cl(X2S~C1$*ZfQTWj854U!1nb zxBsTV=ci|vbB8PZLVui1ybUXBta9Tj_ryqr9$g3TTUt3!RL^hqJq8~B<<-z5_857L z9eyA+^|8mF&xxsJBDtJrmRB&>-}Lv)=9h_lDCUZ3VO7qw&*(m*Yu12JdxH|!LME&; fe<3&9=xr^)R_vW`PaioPg>evv-N3DmTb{vRA#=|` literal 0 HcmV?d00001 diff --git a/week-0/day-3/venv/lib/python3.6/site-packages/pkg_resources/_vendor/packaging/__pycache__/__init__.cpython-36.pyc b/week-0/day-3/venv/lib/python3.6/site-packages/pkg_resources/_vendor/packaging/__pycache__/__init__.cpython-36.pyc new file mode 100644 index 0000000000000000000000000000000000000000..356101bbc8ea96a402803e1bd17246c7af33b97f GIT binary patch literal 528 zcmYk2&2H2%5XYTlH=mm#Bp#xB*yhkmTo8g603kS8LZfW#rdI9PjO`WsNW4<6ocao! z@N^}pCI2*kYd-#-+rDo<et!Es%NhI4UYt6`AJX;T5(E>OW+vmA$$4%HUSv$<qR<<& z<y%wo(p0=MHLp#>8`JXEbi6Y=zDs!<u@$ALL@gT8if*oXFLqzqzJE%c*}hm`jYn^F z3=))a7Q<Q#by8m0WxaB!mH_v0nL^S}8CBG43oyp;U=d*L0VeCtsOE=|WCI}0sB{WD z0IepuczF>%8Z+Ygk`z?X^j-l(RF{O4M4AeKU7CX}VMpi*C4tt04WUZ-w7()R_c26F z%`h#IVL{j=keBgjW3qKArji#Op8G#f`Zt8^j5?YB#qc#{6aIV|f^maW?r@Asi-Z5+ ze;(s>H@L_7fYRHDlk}wEzk-uogvG&))8ja+WgY<3qLP^#cV6pv#)_!rdot?jYj5)F Hvd#Vit}%`p literal 0 HcmV?d00001 diff --git a/week-0/day-3/venv/lib/python3.6/site-packages/pkg_resources/_vendor/packaging/__pycache__/_compat.cpython-36.pyc b/week-0/day-3/venv/lib/python3.6/site-packages/pkg_resources/_vendor/packaging/__pycache__/_compat.cpython-36.pyc new file mode 100644 index 0000000000000000000000000000000000000000..caba8963025e3ec6a3133ceba9fff7388c578a40 GIT binary patch literal 975 zcmah{OK%e~5cXq}Y(ttJs4DR|gbUIhnn<(~m#PAR#I009LShB7oVC+#yRX{bmQ>}` zO6_0aFZs%;e}NM-4x~jK7-_~cWBZ%WGu~QV?Z1Bi^2=vV$PaQ)82GP1?ME<*C|Zz` zrnF=!D|yN(=2#J>k&cc!iaa8UAG5T(j3S77x@X?%ct+Ees;m3Bs*dVjk@SILA4t-> z1#FUVzb2=)E?TEWUN*IHK34f@Zu7eG!^Y&56SKC;9K?IKNbDBal8oYQ5DYq?Jy81` z%sX;TuIY>^s@PSm*bTkp-<Tsu^nxiqBRRQ@pnP;b>5o9(7%iP1$<b6=J<1Ac?dU9b zhma|?lOZt<Co=$F3YJB&kHKh?QbkgBzi`SG4`rSqnz+N-De6oXc6Yo?Wl?}41Xt9D zpmqS}hF;Jca=|YVitc>}+MZ{H^-(2D?fdR9w*rY<PgTNvXW>T(ZLlLh_b0AwCQaUK zPTRatoA$(hownKbq&Ys=G}_j!$+X2t+(qJ4SE@FXMrOzIAg>N4BCE?rx^Xl2Js~Q6 zCd5-DiSr=zJo)b%$G>mw!3$#WfxZyFFGN|Zwm^R%#7QfQ#g176-0*^g8SI2v{gW_5 z@chcMdru$?JYs6FaemEd{72HvMVKD+C35pd2h4;okOC$i|F=lMAO8KKbu1Fb)Z5@@ z1EOSr>}RcO4X`)Z2!o%(;3?1T-1@<(Hu#N2Ud?LH_dmTrvjv;Z_yHK`tUzYg_ru^q fCZGpa_e|gv?<|_NizO_k)>+JlbQnc6W?lXZ=s5QY literal 0 HcmV?d00001 diff --git a/week-0/day-3/venv/lib/python3.6/site-packages/pkg_resources/_vendor/packaging/__pycache__/_structures.cpython-36.pyc b/week-0/day-3/venv/lib/python3.6/site-packages/pkg_resources/_vendor/packaging/__pycache__/_structures.cpython-36.pyc new file mode 100644 index 0000000000000000000000000000000000000000..b37ca14e3a925f3aaf00b9f4e80fd3331ef3d63f GIT binary patch literal 2832 zcmcImPjAyO6t|N$O}lRGV6Y7Y5+@XitrC9(5@^~40&yt^cB+J|EcUu=ZJOE61QWOJ zz*pfb<;sb#z=`+VWoxH|lz*=Lo|9+$_x$|cuX(h%*w}gZ^uw1bA>YVUtH5|0x_SkI z6HW(YNPBc>^{k=YvnhE)xW(-=!fjC*+r6r&j!CZyZ!5eCZ>#35BOG|^aOXYoYTsce z;@N4--&3POq6G_w@kr{_<>5)F!cmki#WIXE+fSlE!*hTuvSz_x8@k#BAxMvM(z7__ z)*0#9+~yU~fXyAyRbJyRXouH%19Xiq@Fr-NFY+bOb>8A_&<(!KuYq3R*TKV;)O{Q6 zhf%0M1r$KAp~n6ay27Av3Nx*)gn*H+#G`3NiNU^f;L(U5yB$4@J8>9q>?PrVZ>VGS zaW4rTcjBY|h7@X)$UrE3VwX?sL_~ZfJFy=e`Ta2JcbL*L33LK;HsepJ%V2ga8LOis z7z;vAmos-aGwY1sHcT>pH({WOrk}}}j?sVG^{ljV;H!hQg4=pj)?m)%DWnUJ2#RwU z!wvF4C)U8Y15;4v1?#oh*s}~sS{>;FA+KUNj14qnttq6|)bY^vdpL3tw#q{hj9n{2 z0ox49l@NZ05FXO8m4&bYX&Wi+M}bJ|uyo)n#n|~liyRQgjNK@30B!jWEWrv*G6$OE z+y&XjQ!axjL5<*OYXzuin?cRH#NFvjEIL~suIY9G3fle=3ix}s2nElA{$oQua~6Fb zH=4G)qVMbQL}W=;Py;o_BGG5;9&DABKs#Flb!UuSuZhJH`9nZY8;lJ{JQ?7)$=Gq? z4<;6g#VfIxBwnY)WS5wW@;ZtY6qp%u6~zUmOh#CdhIOz~6|QnE*Pi_udjO`3h9$WT z{Xep%yb1dkhy0u{PwN|5)Fz3POF1S&9{OuIg`Tcoy{12*I@y37<pPNOOEy>XpagYJ zt}87QbM>7mu+^L+&P8|SP?%s3%b>7eOtfJl>R)r-T!dqi`bi1!|KU1QO3zB5=OVnB zf2};iGX?v+1ZpnUD~Cc_*eZjXkNONr6chpy&(0LgT25|ej3@E$M6RQ_h2pQt4SD1~ z^dfRYd)KQWzwRgaWdvV6n6MHvR^rE5>WuadMWD?Q4KL-fXzIS0@bea~QAn&ScKeP4 F{U^SI^`8I$ literal 0 HcmV?d00001 diff --git a/week-0/day-3/venv/lib/python3.6/site-packages/pkg_resources/_vendor/packaging/__pycache__/markers.cpython-36.pyc b/week-0/day-3/venv/lib/python3.6/site-packages/pkg_resources/_vendor/packaging/__pycache__/markers.cpython-36.pyc new file mode 100644 index 0000000000000000000000000000000000000000..562df03f2d3874299d9bf44f5e51dc521147455c GIT binary patch literal 8855 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 literal 0 HcmV?d00001 diff --git a/week-0/day-3/venv/lib/python3.6/site-packages/pkg_resources/_vendor/packaging/__pycache__/requirements.cpython-36.pyc b/week-0/day-3/venv/lib/python3.6/site-packages/pkg_resources/_vendor/packaging/__pycache__/requirements.cpython-36.pyc new file mode 100644 index 0000000000000000000000000000000000000000..999003f548c380b72412dd56d2b5f88302e82833 GIT binary patch literal 3851 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 PUUOy&a?G?Q%!2hl=&jgr literal 0 HcmV?d00001 diff --git a/week-0/day-3/venv/lib/python3.6/site-packages/pkg_resources/_vendor/packaging/__pycache__/specifiers.cpython-36.pyc b/week-0/day-3/venv/lib/python3.6/site-packages/pkg_resources/_vendor/packaging/__pycache__/specifiers.cpython-36.pyc new file mode 100644 index 0000000000000000000000000000000000000000..ba433faecdc3c8a8faa5ae63d817651b0937d2de GIT binary patch literal 19794 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 E0q8Qxy#N3J literal 0 HcmV?d00001 diff --git a/week-0/day-3/venv/lib/python3.6/site-packages/pkg_resources/_vendor/packaging/__pycache__/utils.cpython-36.pyc b/week-0/day-3/venv/lib/python3.6/site-packages/pkg_resources/_vendor/packaging/__pycache__/utils.cpython-36.pyc new file mode 100644 index 0000000000000000000000000000000000000000..046701cde903cf88d5d886a250ad58807af64e9a GIT binary patch literal 459 zcmY*Vy-ve05VoB(jRNII@DdS9BLNZ%LLl}sumx3C5}U}a6B|1&rD7|u!oVweW#Sb& zVOK&bC*9}!|L%M-8YOoRSJO`jz&F?t<m_9g`rH8l1ai>A0=B3?ZBPWz#}E&TkcP7X z3D&TPNJs`BpcoSL2-4`s^?@|7hh?P&H$BCyl|uD4CTzhp6P-Pfigi7HHeKC2f3k|6 zGCZE1)oz)s_&0ER?^GW-=)nvU_zu=+hStE*pveYij^zZ`WhXjTmz=FAR<xl@8)#G6 z0T-`SrO<|5+0rkd5;tcv$@^C3lF6(xjFU{i=w)T<%UsTzOi?Y2s;Ty#oAu}61?`AX zxh(5>*|4t3P0zR<%Qt)ckKQxw`<?wS0;Ig1#x}w3*4`+JvGN(^Z&RTIixjoPTC|dJ fsv;luJ=<M(V9%Gv*R3Fi(;MHYeeEfVgCzI`q6>Gv literal 0 HcmV?d00001 diff --git a/week-0/day-3/venv/lib/python3.6/site-packages/pkg_resources/_vendor/packaging/__pycache__/version.cpython-36.pyc b/week-0/day-3/venv/lib/python3.6/site-packages/pkg_resources/_vendor/packaging/__pycache__/version.cpython-36.pyc new file mode 100644 index 0000000000000000000000000000000000000000..ac2954b0d1b9863463a04c0980e3924e4591fd01 GIT binary patch literal 10569 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 bYx>0WNoW~!+O%ivZ%t!*!~U#j*c1N`Y~*YH literal 0 HcmV?d00001 diff --git a/week-0/day-3/venv/lib/python3.6/site-packages/pkg_resources/_vendor/packaging/_compat.py b/week-0/day-3/venv/lib/python3.6/site-packages/pkg_resources/_vendor/packaging/_compat.py new file mode 100644 index 00000000..210bb80b --- /dev/null +++ b/week-0/day-3/venv/lib/python3.6/site-packages/pkg_resources/_vendor/packaging/_compat.py @@ -0,0 +1,30 @@ +# This file is dual licensed under the terms of the Apache License, Version +# 2.0, and the BSD License. See the LICENSE file in the root of this repository +# for complete details. +from __future__ import absolute_import, division, print_function + +import sys + + +PY2 = sys.version_info[0] == 2 +PY3 = sys.version_info[0] == 3 + +# flake8: noqa + +if PY3: + string_types = str, +else: + string_types = basestring, + + +def with_metaclass(meta, *bases): + """ + Create a base class with a metaclass. + """ + # This requires a bit of explanation: the basic idea is to make a dummy + # metaclass for one level of class instantiation that replaces itself with + # the actual metaclass. + class metaclass(meta): + def __new__(cls, name, this_bases, d): + return meta(name, bases, d) + return type.__new__(metaclass, 'temporary_class', (), {}) diff --git a/week-0/day-3/venv/lib/python3.6/site-packages/pkg_resources/_vendor/packaging/_structures.py b/week-0/day-3/venv/lib/python3.6/site-packages/pkg_resources/_vendor/packaging/_structures.py new file mode 100644 index 00000000..ccc27861 --- /dev/null +++ b/week-0/day-3/venv/lib/python3.6/site-packages/pkg_resources/_vendor/packaging/_structures.py @@ -0,0 +1,68 @@ +# This file is dual licensed under the terms of the Apache License, Version +# 2.0, and the BSD License. See the LICENSE file in the root of this repository +# for complete details. +from __future__ import absolute_import, division, print_function + + +class Infinity(object): + + def __repr__(self): + return "Infinity" + + def __hash__(self): + return hash(repr(self)) + + def __lt__(self, other): + return False + + def __le__(self, other): + return False + + def __eq__(self, other): + return isinstance(other, self.__class__) + + def __ne__(self, other): + return not isinstance(other, self.__class__) + + def __gt__(self, other): + return True + + def __ge__(self, other): + return True + + def __neg__(self): + return NegativeInfinity + +Infinity = Infinity() + + +class NegativeInfinity(object): + + def __repr__(self): + return "-Infinity" + + def __hash__(self): + return hash(repr(self)) + + def __lt__(self, other): + return True + + def __le__(self, other): + return True + + def __eq__(self, other): + return isinstance(other, self.__class__) + + def __ne__(self, other): + return not isinstance(other, self.__class__) + + def __gt__(self, other): + return False + + def __ge__(self, other): + return False + + def __neg__(self): + return Infinity + +NegativeInfinity = NegativeInfinity() diff --git a/week-0/day-3/venv/lib/python3.6/site-packages/pkg_resources/_vendor/packaging/markers.py b/week-0/day-3/venv/lib/python3.6/site-packages/pkg_resources/_vendor/packaging/markers.py new file mode 100644 index 00000000..892e578e --- /dev/null +++ b/week-0/day-3/venv/lib/python3.6/site-packages/pkg_resources/_vendor/packaging/markers.py @@ -0,0 +1,301 @@ +# This file is dual licensed under the terms of the Apache License, Version +# 2.0, and the BSD License. See the LICENSE file in the root of this repository +# for complete details. +from __future__ import absolute_import, division, print_function + +import operator +import os +import platform +import sys + +from pkg_resources.extern.pyparsing import ParseException, ParseResults, stringStart, stringEnd +from pkg_resources.extern.pyparsing import ZeroOrMore, Group, Forward, QuotedString +from pkg_resources.extern.pyparsing import Literal as L # noqa + +from ._compat import string_types +from .specifiers import Specifier, InvalidSpecifier + + +__all__ = [ + "InvalidMarker", "UndefinedComparison", "UndefinedEnvironmentName", + "Marker", "default_environment", +] + + +class InvalidMarker(ValueError): + """ + An invalid marker was found, users should refer to PEP 508. + """ + + +class UndefinedComparison(ValueError): + """ + An invalid operation was attempted on a value that doesn't support it. + """ + + +class UndefinedEnvironmentName(ValueError): + """ + A name was attempted to be used that does not exist inside of the + environment. + """ + + +class Node(object): + + def __init__(self, value): + self.value = value + + def __str__(self): + return str(self.value) + + def __repr__(self): + return "<{0}({1!r})>".format(self.__class__.__name__, str(self)) + + def serialize(self): + raise NotImplementedError + + +class Variable(Node): + + def serialize(self): + return str(self) + + +class Value(Node): + + def serialize(self): + return '"{0}"'.format(self) + + +class Op(Node): + + def serialize(self): + return str(self) + + +VARIABLE = ( + L("implementation_version") | + L("platform_python_implementation") | + L("implementation_name") | + L("python_full_version") | + L("platform_release") | + L("platform_version") | + L("platform_machine") | + L("platform_system") | + L("python_version") | + L("sys_platform") | + L("os_name") | + L("os.name") | # PEP-345 + L("sys.platform") | # PEP-345 + L("platform.version") | # PEP-345 + L("platform.machine") | # PEP-345 + L("platform.python_implementation") | # PEP-345 + L("python_implementation") | # undocumented setuptools legacy + L("extra") +) +ALIASES = { + 'os.name': 'os_name', + 'sys.platform': 'sys_platform', + 'platform.version': 'platform_version', + 'platform.machine': 'platform_machine', + 'platform.python_implementation': 'platform_python_implementation', + 'python_implementation': 'platform_python_implementation' +} +VARIABLE.setParseAction(lambda s, l, t: Variable(ALIASES.get(t[0], t[0]))) + +VERSION_CMP = ( + L("===") | + L("==") | + L(">=") | + L("<=") | + L("!=") | + L("~=") | + L(">") | + L("<") +) + +MARKER_OP = VERSION_CMP | L("not in") | L("in") +MARKER_OP.setParseAction(lambda s, l, t: Op(t[0])) + +MARKER_VALUE = QuotedString("'") | QuotedString('"') +MARKER_VALUE.setParseAction(lambda s, l, t: Value(t[0])) + +BOOLOP = L("and") | L("or") + +MARKER_VAR = VARIABLE | MARKER_VALUE + +MARKER_ITEM = Group(MARKER_VAR + MARKER_OP + MARKER_VAR) +MARKER_ITEM.setParseAction(lambda s, l, t: tuple(t[0])) + +LPAREN = L("(").suppress() +RPAREN = L(")").suppress() + +MARKER_EXPR = Forward() +MARKER_ATOM = MARKER_ITEM | Group(LPAREN + MARKER_EXPR + RPAREN) +MARKER_EXPR << MARKER_ATOM + ZeroOrMore(BOOLOP + MARKER_EXPR) + +MARKER = stringStart + MARKER_EXPR + stringEnd + + +def _coerce_parse_result(results): + if isinstance(results, ParseResults): + return [_coerce_parse_result(i) for i in results] + else: + return results + + +def _format_marker(marker, first=True): + assert isinstance(marker, (list, tuple, string_types)) + + # Sometimes we have a structure like [[...]] which is a single item list + # where the single item is itself it's own list. In that case we want skip + # the rest of this function so that we don't get extraneous () on the + # outside. + if (isinstance(marker, list) and len(marker) == 1 and + isinstance(marker[0], (list, tuple))): + return _format_marker(marker[0]) + + if isinstance(marker, list): + inner = (_format_marker(m, first=False) for m in marker) + if first: + return " ".join(inner) + else: + return "(" + " ".join(inner) + ")" + elif isinstance(marker, tuple): + return " ".join([m.serialize() for m in marker]) + else: + return marker + + +_operators = { + "in": lambda lhs, rhs: lhs in rhs, + "not in": lambda lhs, rhs: lhs not in rhs, + "<": operator.lt, + "<=": operator.le, + "==": operator.eq, + "!=": operator.ne, + ">=": operator.ge, + ">": operator.gt, +} + + +def _eval_op(lhs, op, rhs): + try: + spec = Specifier("".join([op.serialize(), rhs])) + except InvalidSpecifier: + pass + else: + return spec.contains(lhs) + + oper = _operators.get(op.serialize()) + if oper is None: + raise UndefinedComparison( + "Undefined {0!r} on {1!r} and {2!r}.".format(op, lhs, rhs) + ) + + return oper(lhs, rhs) + + +_undefined = object() + + +def _get_env(environment, name): + value = environment.get(name, _undefined) + + if value is _undefined: + raise UndefinedEnvironmentName( + "{0!r} does not exist in evaluation environment.".format(name) + ) + + return value + + +def _evaluate_markers(markers, environment): + groups = [[]] + + for marker in markers: + assert isinstance(marker, (list, tuple, string_types)) + + if isinstance(marker, list): + groups[-1].append(_evaluate_markers(marker, environment)) + elif isinstance(marker, tuple): + lhs, op, rhs = marker + + if isinstance(lhs, Variable): + lhs_value = _get_env(environment, lhs.value) + rhs_value = rhs.value + else: + lhs_value = lhs.value + rhs_value = _get_env(environment, rhs.value) + + groups[-1].append(_eval_op(lhs_value, op, rhs_value)) + else: + assert marker in ["and", "or"] + if marker == "or": + groups.append([]) + + return any(all(item) for item in groups) + + +def format_full_version(info): + version = '{0.major}.{0.minor}.{0.micro}'.format(info) + kind = info.releaselevel + if kind != 'final': + version += kind[0] + str(info.serial) + return version + + +def default_environment(): + if hasattr(sys, 'implementation'): + iver = format_full_version(sys.implementation.version) + implementation_name = sys.implementation.name + else: + iver = '0' + implementation_name = '' + + return { + "implementation_name": implementation_name, + "implementation_version": iver, + "os_name": os.name, + "platform_machine": platform.machine(), + "platform_release": platform.release(), + "platform_system": platform.system(), + "platform_version": platform.version(), + "python_full_version": platform.python_version(), + "platform_python_implementation": platform.python_implementation(), + "python_version": platform.python_version()[:3], + "sys_platform": sys.platform, + } + + +class Marker(object): + + def __init__(self, marker): + try: + self._markers = _coerce_parse_result(MARKER.parseString(marker)) + except ParseException as e: + err_str = "Invalid marker: {0!r}, parse error at {1!r}".format( + marker, marker[e.loc:e.loc + 8]) + raise InvalidMarker(err_str) + + def __str__(self): + return _format_marker(self._markers) + + def __repr__(self): + return "<Marker({0!r})>".format(str(self)) + + def evaluate(self, environment=None): + """Evaluate a marker. + + Return the boolean from evaluating the given marker against the + environment. environment is an optional argument to override all or + part of the determined environment. + + The environment is determined from the current Python process. + """ + current_environment = default_environment() + if environment is not None: + current_environment.update(environment) + + return _evaluate_markers(self._markers, current_environment) diff --git a/week-0/day-3/venv/lib/python3.6/site-packages/pkg_resources/_vendor/packaging/requirements.py b/week-0/day-3/venv/lib/python3.6/site-packages/pkg_resources/_vendor/packaging/requirements.py new file mode 100644 index 00000000..0c8c4a38 --- /dev/null +++ b/week-0/day-3/venv/lib/python3.6/site-packages/pkg_resources/_vendor/packaging/requirements.py @@ -0,0 +1,127 @@ +# This file is dual licensed under the terms of the Apache License, Version +# 2.0, and the BSD License. See the LICENSE file in the root of this repository +# for complete details. +from __future__ import absolute_import, division, print_function + +import string +import re + +from pkg_resources.extern.pyparsing import stringStart, stringEnd, originalTextFor, ParseException +from pkg_resources.extern.pyparsing import ZeroOrMore, Word, Optional, Regex, Combine +from pkg_resources.extern.pyparsing import Literal as L # noqa +from pkg_resources.extern.six.moves.urllib import parse as urlparse + +from .markers import MARKER_EXPR, Marker +from .specifiers import LegacySpecifier, Specifier, SpecifierSet + + +class InvalidRequirement(ValueError): + """ + An invalid requirement was found, users should refer to PEP 508. + """ + + +ALPHANUM = Word(string.ascii_letters + string.digits) + +LBRACKET = L("[").suppress() +RBRACKET = L("]").suppress() +LPAREN = L("(").suppress() +RPAREN = L(")").suppress() +COMMA = L(",").suppress() +SEMICOLON = L(";").suppress() +AT = L("@").suppress() + +PUNCTUATION = Word("-_.") +IDENTIFIER_END = ALPHANUM | (ZeroOrMore(PUNCTUATION) + ALPHANUM) +IDENTIFIER = Combine(ALPHANUM + ZeroOrMore(IDENTIFIER_END)) + +NAME = IDENTIFIER("name") +EXTRA = IDENTIFIER + +URI = Regex(r'[^ ]+')("url") +URL = (AT + URI) + +EXTRAS_LIST = EXTRA + ZeroOrMore(COMMA + EXTRA) +EXTRAS = (LBRACKET + Optional(EXTRAS_LIST) + RBRACKET)("extras") + +VERSION_PEP440 = Regex(Specifier._regex_str, re.VERBOSE | re.IGNORECASE) +VERSION_LEGACY = Regex(LegacySpecifier._regex_str, re.VERBOSE | re.IGNORECASE) + +VERSION_ONE = VERSION_PEP440 ^ VERSION_LEGACY +VERSION_MANY = Combine(VERSION_ONE + ZeroOrMore(COMMA + VERSION_ONE), + joinString=",", adjacent=False)("_raw_spec") +_VERSION_SPEC = Optional(((LPAREN + VERSION_MANY + RPAREN) | VERSION_MANY)) +_VERSION_SPEC.setParseAction(lambda s, l, t: t._raw_spec or '') + +VERSION_SPEC = originalTextFor(_VERSION_SPEC)("specifier") +VERSION_SPEC.setParseAction(lambda s, l, t: t[1]) + +MARKER_EXPR = originalTextFor(MARKER_EXPR())("marker") +MARKER_EXPR.setParseAction( + lambda s, l, t: Marker(s[t._original_start:t._original_end]) +) +MARKER_SEPERATOR = SEMICOLON +MARKER = MARKER_SEPERATOR + MARKER_EXPR + +VERSION_AND_MARKER = VERSION_SPEC + Optional(MARKER) +URL_AND_MARKER = URL + Optional(MARKER) + +NAMED_REQUIREMENT = \ + NAME + Optional(EXTRAS) + (URL_AND_MARKER | VERSION_AND_MARKER) + +REQUIREMENT = stringStart + NAMED_REQUIREMENT + stringEnd + + +class Requirement(object): + """Parse a requirement. + + Parse a given requirement string into its parts, such as name, specifier, + URL, and extras. Raises InvalidRequirement on a badly-formed requirement + string. + """ + + # TODO: Can we test whether something is contained within a requirement? + # If so how do we do that? Do we need to test against the _name_ of + # the thing as well as the version? What about the markers? + # TODO: Can we normalize the name and extra name? + + def __init__(self, requirement_string): + try: + req = REQUIREMENT.parseString(requirement_string) + except ParseException as e: + raise InvalidRequirement( + "Invalid requirement, parse error at \"{0!r}\"".format( + requirement_string[e.loc:e.loc + 8])) + + self.name = req.name + if req.url: + parsed_url = urlparse.urlparse(req.url) + if not (parsed_url.scheme and parsed_url.netloc) or ( + not parsed_url.scheme and not parsed_url.netloc): + raise InvalidRequirement("Invalid URL given") + self.url = req.url + else: + self.url = None + self.extras = set(req.extras.asList() if req.extras else []) + self.specifier = SpecifierSet(req.specifier) + self.marker = req.marker if req.marker else None + + def __str__(self): + parts = [self.name] + + if self.extras: + parts.append("[{0}]".format(",".join(sorted(self.extras)))) + + if self.specifier: + parts.append(str(self.specifier)) + + if self.url: + parts.append("@ {0}".format(self.url)) + + if self.marker: + parts.append("; {0}".format(self.marker)) + + return "".join(parts) + + def __repr__(self): + return "<Requirement({0!r})>".format(str(self)) diff --git a/week-0/day-3/venv/lib/python3.6/site-packages/pkg_resources/_vendor/packaging/specifiers.py b/week-0/day-3/venv/lib/python3.6/site-packages/pkg_resources/_vendor/packaging/specifiers.py new file mode 100644 index 00000000..7f5a76cf --- /dev/null +++ b/week-0/day-3/venv/lib/python3.6/site-packages/pkg_resources/_vendor/packaging/specifiers.py @@ -0,0 +1,774 @@ +# This file is dual licensed under the terms of the Apache License, Version +# 2.0, and the BSD License. See the LICENSE file in the root of this repository +# for complete details. +from __future__ import absolute_import, division, print_function + +import abc +import functools +import itertools +import re + +from ._compat import string_types, with_metaclass +from .version import Version, LegacyVersion, parse + + +class InvalidSpecifier(ValueError): + """ + An invalid specifier was found, users should refer to PEP 440. + """ + + +class BaseSpecifier(with_metaclass(abc.ABCMeta, object)): + + @abc.abstractmethod + def __str__(self): + """ + Returns the str representation of this Specifier like object. This + should be representative of the Specifier itself. + """ + + @abc.abstractmethod + def __hash__(self): + """ + Returns a hash value for this Specifier like object. + """ + + @abc.abstractmethod + def __eq__(self, other): + """ + Returns a boolean representing whether or not the two Specifier like + objects are equal. + """ + + @abc.abstractmethod + def __ne__(self, other): + """ + Returns a boolean representing whether or not the two Specifier like + objects are not equal. + """ + + @abc.abstractproperty + def prereleases(self): + """ + Returns whether or not pre-releases as a whole are allowed by this + specifier. + """ + + @prereleases.setter + def prereleases(self, value): + """ + Sets whether or not pre-releases as a whole are allowed by this + specifier. + """ + + @abc.abstractmethod + def contains(self, item, prereleases=None): + """ + Determines if the given item is contained within this specifier. + """ + + @abc.abstractmethod + def filter(self, iterable, prereleases=None): + """ + Takes an iterable of items and filters them so that only items which + are contained within this specifier are allowed in it. + """ + + +class _IndividualSpecifier(BaseSpecifier): + + _operators = {} + + def __init__(self, spec="", prereleases=None): + match = self._regex.search(spec) + if not match: + raise InvalidSpecifier("Invalid specifier: '{0}'".format(spec)) + + self._spec = ( + match.group("operator").strip(), + match.group("version").strip(), + ) + + # Store whether or not this Specifier should accept prereleases + self._prereleases = prereleases + + def __repr__(self): + pre = ( + ", prereleases={0!r}".format(self.prereleases) + if self._prereleases is not None + else "" + ) + + return "<{0}({1!r}{2})>".format( + self.__class__.__name__, + str(self), + pre, + ) + + def __str__(self): + return "{0}{1}".format(*self._spec) + + def __hash__(self): + return hash(self._spec) + + def __eq__(self, other): + if isinstance(other, string_types): + try: + other = self.__class__(other) + except InvalidSpecifier: + return NotImplemented + elif not isinstance(other, self.__class__): + return NotImplemented + + return self._spec == other._spec + + def __ne__(self, other): + if isinstance(other, string_types): + try: + other = self.__class__(other) + except InvalidSpecifier: + return NotImplemented + elif not isinstance(other, self.__class__): + return NotImplemented + + return self._spec != other._spec + + def _get_operator(self, op): + return getattr(self, "_compare_{0}".format(self._operators[op])) + + def _coerce_version(self, version): + if not isinstance(version, (LegacyVersion, Version)): + version = parse(version) + return version + + @property + def operator(self): + return self._spec[0] + + @property + def version(self): + return self._spec[1] + + @property + def prereleases(self): + return self._prereleases + + @prereleases.setter + def prereleases(self, value): + self._prereleases = value + + def __contains__(self, item): + return self.contains(item) + + def contains(self, item, prereleases=None): + # Determine if prereleases are to be allowed or not. + if prereleases is None: + prereleases = self.prereleases + + # Normalize item to a Version or LegacyVersion, this allows us to have + # a shortcut for ``"2.0" in Specifier(">=2") + item = self._coerce_version(item) + + # Determine if we should be supporting prereleases in this specifier + # or not, if we do not support prereleases than we can short circuit + # logic if this version is a prereleases. + if item.is_prerelease and not prereleases: + return False + + # Actually do the comparison to determine if this item is contained + # within this Specifier or not. + return self._get_operator(self.operator)(item, self.version) + + def filter(self, iterable, prereleases=None): + yielded = False + found_prereleases = [] + + kw = {"prereleases": prereleases if prereleases is not None else True} + + # Attempt to iterate over all the values in the iterable and if any of + # them match, yield them. + for version in iterable: + parsed_version = self._coerce_version(version) + + if self.contains(parsed_version, **kw): + # If our version is a prerelease, and we were not set to allow + # prereleases, then we'll store it for later incase nothing + # else matches this specifier. + if (parsed_version.is_prerelease and not + (prereleases or self.prereleases)): + found_prereleases.append(version) + # Either this is not a prerelease, or we should have been + # accepting prereleases from the begining. + else: + yielded = True + yield version + + # Now that we've iterated over everything, determine if we've yielded + # any values, and if we have not and we have any prereleases stored up + # then we will go ahead and yield the prereleases. + if not yielded and found_prereleases: + for version in found_prereleases: + yield version + + +class LegacySpecifier(_IndividualSpecifier): + + _regex_str = ( + r""" + (?P<operator>(==|!=|<=|>=|<|>)) + \s* + (?P<version> + [^,;\s)]* # Since this is a "legacy" specifier, and the version + # string can be just about anything, we match everything + # except for whitespace, a semi-colon for marker support, + # a closing paren since versions can be enclosed in + # them, and a comma since it's a version separator. + ) + """ + ) + + _regex = re.compile( + r"^\s*" + _regex_str + r"\s*$", re.VERBOSE | re.IGNORECASE) + + _operators = { + "==": "equal", + "!=": "not_equal", + "<=": "less_than_equal", + ">=": "greater_than_equal", + "<": "less_than", + ">": "greater_than", + } + + def _coerce_version(self, version): + if not isinstance(version, LegacyVersion): + version = LegacyVersion(str(version)) + return version + + def _compare_equal(self, prospective, spec): + return prospective == self._coerce_version(spec) + + def _compare_not_equal(self, prospective, spec): + return prospective != self._coerce_version(spec) + + def _compare_less_than_equal(self, prospective, spec): + return prospective <= self._coerce_version(spec) + + def _compare_greater_than_equal(self, prospective, spec): + return prospective >= self._coerce_version(spec) + + def _compare_less_than(self, prospective, spec): + return prospective < self._coerce_version(spec) + + def _compare_greater_than(self, prospective, spec): + return prospective > self._coerce_version(spec) + + +def _require_version_compare(fn): + @functools.wraps(fn) + def wrapped(self, prospective, spec): + if not isinstance(prospective, Version): + return False + return fn(self, prospective, spec) + return wrapped + + +class Specifier(_IndividualSpecifier): + + _regex_str = ( + r""" + (?P<operator>(~=|==|!=|<=|>=|<|>|===)) + (?P<version> + (?: + # The identity operators allow for an escape hatch that will + # do an exact string match of the version you wish to install. + # This will not be parsed by PEP 440 and we cannot determine + # any semantic meaning from it. This operator is discouraged + # but included entirely as an escape hatch. + (?<====) # Only match for the identity operator + \s* + [^\s]* # We just match everything, except for whitespace + # since we are only testing for strict identity. + ) + | + (?: + # The (non)equality operators allow for wild card and local + # versions to be specified so we have to define these two + # operators separately to enable that. + (?<===|!=) # Only match for equals and not equals + + \s* + v? + (?:[0-9]+!)? # epoch + [0-9]+(?:\.[0-9]+)* # release + (?: # pre release + [-_\.]? + (a|b|c|rc|alpha|beta|pre|preview) + [-_\.]? + [0-9]* + )? + (?: # post release + (?:-[0-9]+)|(?:[-_\.]?(post|rev|r)[-_\.]?[0-9]*) + )? + + # You cannot use a wild card and a dev or local version + # together so group them with a | and make them optional. + (?: + (?:[-_\.]?dev[-_\.]?[0-9]*)? # dev release + (?:\+[a-z0-9]+(?:[-_\.][a-z0-9]+)*)? # local + | + \.\* # Wild card syntax of .* + )? + ) + | + (?: + # The compatible operator requires at least two digits in the + # release segment. + (?<=~=) # Only match for the compatible operator + + \s* + v? + (?:[0-9]+!)? # epoch + [0-9]+(?:\.[0-9]+)+ # release (We have a + instead of a *) + (?: # pre release + [-_\.]? + (a|b|c|rc|alpha|beta|pre|preview) + [-_\.]? + [0-9]* + )? + (?: # post release + (?:-[0-9]+)|(?:[-_\.]?(post|rev|r)[-_\.]?[0-9]*) + )? + (?:[-_\.]?dev[-_\.]?[0-9]*)? # dev release + ) + | + (?: + # All other operators only allow a sub set of what the + # (non)equality operators do. Specifically they do not allow + # local versions to be specified nor do they allow the prefix + # matching wild cards. + (?<!==|!=|~=) # We have special cases for these + # operators so we want to make sure they + # don't match here. + + \s* + v? + (?:[0-9]+!)? # epoch + [0-9]+(?:\.[0-9]+)* # release + (?: # pre release + [-_\.]? + (a|b|c|rc|alpha|beta|pre|preview) + [-_\.]? + [0-9]* + )? + (?: # post release + (?:-[0-9]+)|(?:[-_\.]?(post|rev|r)[-_\.]?[0-9]*) + )? + (?:[-_\.]?dev[-_\.]?[0-9]*)? # dev release + ) + ) + """ + ) + + _regex = re.compile( + r"^\s*" + _regex_str + r"\s*$", re.VERBOSE | re.IGNORECASE) + + _operators = { + "~=": "compatible", + "==": "equal", + "!=": "not_equal", + "<=": "less_than_equal", + ">=": "greater_than_equal", + "<": "less_than", + ">": "greater_than", + "===": "arbitrary", + } + + @_require_version_compare + def _compare_compatible(self, prospective, spec): + # Compatible releases have an equivalent combination of >= and ==. That + # is that ~=2.2 is equivalent to >=2.2,==2.*. This allows us to + # implement this in terms of the other specifiers instead of + # implementing it ourselves. The only thing we need to do is construct + # the other specifiers. + + # We want everything but the last item in the version, but we want to + # ignore post and dev releases and we want to treat the pre-release as + # it's own separate segment. + prefix = ".".join( + list( + itertools.takewhile( + lambda x: (not x.startswith("post") and not + x.startswith("dev")), + _version_split(spec), + ) + )[:-1] + ) + + # Add the prefix notation to the end of our string + prefix += ".*" + + return (self._get_operator(">=")(prospective, spec) and + self._get_operator("==")(prospective, prefix)) + + @_require_version_compare + def _compare_equal(self, prospective, spec): + # We need special logic to handle prefix matching + if spec.endswith(".*"): + # In the case of prefix matching we want to ignore local segment. + prospective = Version(prospective.public) + # Split the spec out by dots, and pretend that there is an implicit + # dot in between a release segment and a pre-release segment. + spec = _version_split(spec[:-2]) # Remove the trailing .* + + # Split the prospective version out by dots, and pretend that there + # is an implicit dot in between a release segment and a pre-release + # segment. + prospective = _version_split(str(prospective)) + + # Shorten the prospective version to be the same length as the spec + # so that we can determine if the specifier is a prefix of the + # prospective version or not. + prospective = prospective[:len(spec)] + + # Pad out our two sides with zeros so that they both equal the same + # length. + spec, prospective = _pad_version(spec, prospective) + else: + # Convert our spec string into a Version + spec = Version(spec) + + # If the specifier does not have a local segment, then we want to + # act as if the prospective version also does not have a local + # segment. + if not spec.local: + prospective = Version(prospective.public) + + return prospective == spec + + @_require_version_compare + def _compare_not_equal(self, prospective, spec): + return not self._compare_equal(prospective, spec) + + @_require_version_compare + def _compare_less_than_equal(self, prospective, spec): + return prospective <= Version(spec) + + @_require_version_compare + def _compare_greater_than_equal(self, prospective, spec): + return prospective >= Version(spec) + + @_require_version_compare + def _compare_less_than(self, prospective, spec): + # Convert our spec to a Version instance, since we'll want to work with + # it as a version. + spec = Version(spec) + + # Check to see if the prospective version is less than the spec + # version. If it's not we can short circuit and just return False now + # instead of doing extra unneeded work. + if not prospective < spec: + return False + + # This special case is here so that, unless the specifier itself + # includes is a pre-release version, that we do not accept pre-release + # versions for the version mentioned in the specifier (e.g. <3.1 should + # not match 3.1.dev0, but should match 3.0.dev0). + if not spec.is_prerelease and prospective.is_prerelease: + if Version(prospective.base_version) == Version(spec.base_version): + return False + + # If we've gotten to here, it means that prospective version is both + # less than the spec version *and* it's not a pre-release of the same + # version in the spec. + return True + + @_require_version_compare + def _compare_greater_than(self, prospective, spec): + # Convert our spec to a Version instance, since we'll want to work with + # it as a version. + spec = Version(spec) + + # Check to see if the prospective version is greater than the spec + # version. If it's not we can short circuit and just return False now + # instead of doing extra unneeded work. + if not prospective > spec: + return False + + # This special case is here so that, unless the specifier itself + # includes is a post-release version, that we do not accept + # post-release versions for the version mentioned in the specifier + # (e.g. >3.1 should not match 3.0.post0, but should match 3.2.post0). + if not spec.is_postrelease and prospective.is_postrelease: + if Version(prospective.base_version) == Version(spec.base_version): + return False + + # Ensure that we do not allow a local version of the version mentioned + # in the specifier, which is techincally greater than, to match. + if prospective.local is not None: + if Version(prospective.base_version) == Version(spec.base_version): + return False + + # If we've gotten to here, it means that prospective version is both + # greater than the spec version *and* it's not a pre-release of the + # same version in the spec. + return True + + def _compare_arbitrary(self, prospective, spec): + return str(prospective).lower() == str(spec).lower() + + @property + def prereleases(self): + # If there is an explicit prereleases set for this, then we'll just + # blindly use that. + if self._prereleases is not None: + return self._prereleases + + # Look at all of our specifiers and determine if they are inclusive + # operators, and if they are if they are including an explicit + # prerelease. + operator, version = self._spec + if operator in ["==", ">=", "<=", "~=", "==="]: + # The == specifier can include a trailing .*, if it does we + # want to remove before parsing. + if operator == "==" and version.endswith(".*"): + version = version[:-2] + + # Parse the version, and if it is a pre-release than this + # specifier allows pre-releases. + if parse(version).is_prerelease: + return True + + return False + + @prereleases.setter + def prereleases(self, value): + self._prereleases = value + + +_prefix_regex = re.compile(r"^([0-9]+)((?:a|b|c|rc)[0-9]+)$") + + +def _version_split(version): + result = [] + for item in version.split("."): + match = _prefix_regex.search(item) + if match: + result.extend(match.groups()) + else: + result.append(item) + return result + + +def _pad_version(left, right): + left_split, right_split = [], [] + + # Get the release segment of our versions + left_split.append(list(itertools.takewhile(lambda x: x.isdigit(), left))) + right_split.append(list(itertools.takewhile(lambda x: x.isdigit(), right))) + + # Get the rest of our versions + left_split.append(left[len(left_split[0]):]) + right_split.append(right[len(right_split[0]):]) + + # Insert our padding + left_split.insert( + 1, + ["0"] * max(0, len(right_split[0]) - len(left_split[0])), + ) + right_split.insert( + 1, + ["0"] * max(0, len(left_split[0]) - len(right_split[0])), + ) + + return ( + list(itertools.chain(*left_split)), + list(itertools.chain(*right_split)), + ) + + +class SpecifierSet(BaseSpecifier): + + def __init__(self, specifiers="", prereleases=None): + # Split on , to break each indidivual specifier into it's own item, and + # strip each item to remove leading/trailing whitespace. + specifiers = [s.strip() for s in specifiers.split(",") if s.strip()] + + # Parsed each individual specifier, attempting first to make it a + # Specifier and falling back to a LegacySpecifier. + parsed = set() + for specifier in specifiers: + try: + parsed.add(Specifier(specifier)) + except InvalidSpecifier: + parsed.add(LegacySpecifier(specifier)) + + # Turn our parsed specifiers into a frozen set and save them for later. + self._specs = frozenset(parsed) + + # Store our prereleases value so we can use it later to determine if + # we accept prereleases or not. + self._prereleases = prereleases + + def __repr__(self): + pre = ( + ", prereleases={0!r}".format(self.prereleases) + if self._prereleases is not None + else "" + ) + + return "<SpecifierSet({0!r}{1})>".format(str(self), pre) + + def __str__(self): + return ",".join(sorted(str(s) for s in self._specs)) + + def __hash__(self): + return hash(self._specs) + + def __and__(self, other): + if isinstance(other, string_types): + other = SpecifierSet(other) + elif not isinstance(other, SpecifierSet): + return NotImplemented + + specifier = SpecifierSet() + specifier._specs = frozenset(self._specs | other._specs) + + if self._prereleases is None and other._prereleases is not None: + specifier._prereleases = other._prereleases + elif self._prereleases is not None and other._prereleases is None: + specifier._prereleases = self._prereleases + elif self._prereleases == other._prereleases: + specifier._prereleases = self._prereleases + else: + raise ValueError( + "Cannot combine SpecifierSets with True and False prerelease " + "overrides." + ) + + return specifier + + def __eq__(self, other): + if isinstance(other, string_types): + other = SpecifierSet(other) + elif isinstance(other, _IndividualSpecifier): + other = SpecifierSet(str(other)) + elif not isinstance(other, SpecifierSet): + return NotImplemented + + return self._specs == other._specs + + def __ne__(self, other): + if isinstance(other, string_types): + other = SpecifierSet(other) + elif isinstance(other, _IndividualSpecifier): + other = SpecifierSet(str(other)) + elif not isinstance(other, SpecifierSet): + return NotImplemented + + return self._specs != other._specs + + def __len__(self): + return len(self._specs) + + def __iter__(self): + return iter(self._specs) + + @property + def prereleases(self): + # If we have been given an explicit prerelease modifier, then we'll + # pass that through here. + if self._prereleases is not None: + return self._prereleases + + # If we don't have any specifiers, and we don't have a forced value, + # then we'll just return None since we don't know if this should have + # pre-releases or not. + if not self._specs: + return None + + # Otherwise we'll see if any of the given specifiers accept + # prereleases, if any of them do we'll return True, otherwise False. + return any(s.prereleases for s in self._specs) + + @prereleases.setter + def prereleases(self, value): + self._prereleases = value + + def __contains__(self, item): + return self.contains(item) + + def contains(self, item, prereleases=None): + # Ensure that our item is a Version or LegacyVersion instance. + if not isinstance(item, (LegacyVersion, Version)): + item = parse(item) + + # Determine if we're forcing a prerelease or not, if we're not forcing + # one for this particular filter call, then we'll use whatever the + # SpecifierSet thinks for whether or not we should support prereleases. + if prereleases is None: + prereleases = self.prereleases + + # We can determine if we're going to allow pre-releases by looking to + # see if any of the underlying items supports them. If none of them do + # and this item is a pre-release then we do not allow it and we can + # short circuit that here. + # Note: This means that 1.0.dev1 would not be contained in something + # like >=1.0.devabc however it would be in >=1.0.debabc,>0.0.dev0 + if not prereleases and item.is_prerelease: + return False + + # We simply dispatch to the underlying specs here to make sure that the + # given version is contained within all of them. + # Note: This use of all() here means that an empty set of specifiers + # will always return True, this is an explicit design decision. + return all( + s.contains(item, prereleases=prereleases) + for s in self._specs + ) + + def filter(self, iterable, prereleases=None): + # Determine if we're forcing a prerelease or not, if we're not forcing + # one for this particular filter call, then we'll use whatever the + # SpecifierSet thinks for whether or not we should support prereleases. + if prereleases is None: + prereleases = self.prereleases + + # If we have any specifiers, then we want to wrap our iterable in the + # filter method for each one, this will act as a logical AND amongst + # each specifier. + if self._specs: + for spec in self._specs: + iterable = spec.filter(iterable, prereleases=bool(prereleases)) + return iterable + # If we do not have any specifiers, then we need to have a rough filter + # which will filter out any pre-releases, unless there are no final + # releases, and which will filter out LegacyVersion in general. + else: + filtered = [] + found_prereleases = [] + + for item in iterable: + # Ensure that we some kind of Version class for this item. + if not isinstance(item, (LegacyVersion, Version)): + parsed_version = parse(item) + else: + parsed_version = item + + # Filter out any item which is parsed as a LegacyVersion + if isinstance(parsed_version, LegacyVersion): + continue + + # Store any item which is a pre-release for later unless we've + # already found a final version or we are accepting prereleases + if parsed_version.is_prerelease and not prereleases: + if not filtered: + found_prereleases.append(item) + else: + filtered.append(item) + + # If we've found no items except for pre-releases, then we'll go + # ahead and use the pre-releases + if not filtered and found_prereleases and prereleases is None: + return found_prereleases + + return filtered diff --git a/week-0/day-3/venv/lib/python3.6/site-packages/pkg_resources/_vendor/packaging/utils.py b/week-0/day-3/venv/lib/python3.6/site-packages/pkg_resources/_vendor/packaging/utils.py new file mode 100644 index 00000000..942387ce --- /dev/null +++ b/week-0/day-3/venv/lib/python3.6/site-packages/pkg_resources/_vendor/packaging/utils.py @@ -0,0 +1,14 @@ +# This file is dual licensed under the terms of the Apache License, Version +# 2.0, and the BSD License. See the LICENSE file in the root of this repository +# for complete details. +from __future__ import absolute_import, division, print_function + +import re + + +_canonicalize_regex = re.compile(r"[-_.]+") + + +def canonicalize_name(name): + # This is taken from PEP 503. + return _canonicalize_regex.sub("-", name).lower() diff --git a/week-0/day-3/venv/lib/python3.6/site-packages/pkg_resources/_vendor/packaging/version.py b/week-0/day-3/venv/lib/python3.6/site-packages/pkg_resources/_vendor/packaging/version.py new file mode 100644 index 00000000..83b5ee8c --- /dev/null +++ b/week-0/day-3/venv/lib/python3.6/site-packages/pkg_resources/_vendor/packaging/version.py @@ -0,0 +1,393 @@ +# This file is dual licensed under the terms of the Apache License, Version +# 2.0, and the BSD License. See the LICENSE file in the root of this repository +# for complete details. +from __future__ import absolute_import, division, print_function + +import collections +import itertools +import re + +from ._structures import Infinity + + +__all__ = [ + "parse", "Version", "LegacyVersion", "InvalidVersion", "VERSION_PATTERN" +] + + +_Version = collections.namedtuple( + "_Version", + ["epoch", "release", "dev", "pre", "post", "local"], +) + + +def parse(version): + """ + Parse the given version string and return either a :class:`Version` object + or a :class:`LegacyVersion` object depending on if the given version is + a valid PEP 440 version or a legacy version. + """ + try: + return Version(version) + except InvalidVersion: + return LegacyVersion(version) + + +class InvalidVersion(ValueError): + """ + An invalid version was found, users should refer to PEP 440. + """ + + +class _BaseVersion(object): + + def __hash__(self): + return hash(self._key) + + def __lt__(self, other): + return self._compare(other, lambda s, o: s < o) + + def __le__(self, other): + return self._compare(other, lambda s, o: s <= o) + + def __eq__(self, other): + return self._compare(other, lambda s, o: s == o) + + def __ge__(self, other): + return self._compare(other, lambda s, o: s >= o) + + def __gt__(self, other): + return self._compare(other, lambda s, o: s > o) + + def __ne__(self, other): + return self._compare(other, lambda s, o: s != o) + + def _compare(self, other, method): + if not isinstance(other, _BaseVersion): + return NotImplemented + + return method(self._key, other._key) + + +class LegacyVersion(_BaseVersion): + + def __init__(self, version): + self._version = str(version) + self._key = _legacy_cmpkey(self._version) + + def __str__(self): + return self._version + + def __repr__(self): + return "<LegacyVersion({0})>".format(repr(str(self))) + + @property + def public(self): + return self._version + + @property + def base_version(self): + return self._version + + @property + def local(self): + return None + + @property + def is_prerelease(self): + return False + + @property + def is_postrelease(self): + return False + + +_legacy_version_component_re = re.compile( + r"(\d+ | [a-z]+ | \.| -)", re.VERBOSE, +) + +_legacy_version_replacement_map = { + "pre": "c", "preview": "c", "-": "final-", "rc": "c", "dev": "@", +} + + +def _parse_version_parts(s): + for part in _legacy_version_component_re.split(s): + part = _legacy_version_replacement_map.get(part, part) + + if not part or part == ".": + continue + + if part[:1] in "0123456789": + # pad for numeric comparison + yield part.zfill(8) + else: + yield "*" + part + + # ensure that alpha/beta/candidate are before final + yield "*final" + + +def _legacy_cmpkey(version): + # We hardcode an epoch of -1 here. A PEP 440 version can only have a epoch + # greater than or equal to 0. This will effectively put the LegacyVersion, + # which uses the defacto standard originally implemented by setuptools, + # as before all PEP 440 versions. + epoch = -1 + + # This scheme is taken from pkg_resources.parse_version setuptools prior to + # it's adoption of the packaging library. + parts = [] + for part in _parse_version_parts(version.lower()): + if part.startswith("*"): + # remove "-" before a prerelease tag + if part < "*final": + while parts and parts[-1] == "*final-": + parts.pop() + + # remove trailing zeros from each series of numeric parts + while parts and parts[-1] == "00000000": + parts.pop() + + parts.append(part) + parts = tuple(parts) + + return epoch, parts + +# Deliberately not anchored to the start and end of the string, to make it +# easier for 3rd party code to reuse +VERSION_PATTERN = r""" + v? + (?: + (?:(?P<epoch>[0-9]+)!)? # epoch + (?P<release>[0-9]+(?:\.[0-9]+)*) # release segment + (?P<pre> # pre-release + [-_\.]? + (?P<pre_l>(a|b|c|rc|alpha|beta|pre|preview)) + [-_\.]? + (?P<pre_n>[0-9]+)? + )? + (?P<post> # post release + (?:-(?P<post_n1>[0-9]+)) + | + (?: + [-_\.]? + (?P<post_l>post|rev|r) + [-_\.]? + (?P<post_n2>[0-9]+)? + ) + )? + (?P<dev> # dev release + [-_\.]? + (?P<dev_l>dev) + [-_\.]? + (?P<dev_n>[0-9]+)? + )? + ) + (?:\+(?P<local>[a-z0-9]+(?:[-_\.][a-z0-9]+)*))? # local version +""" + + +class Version(_BaseVersion): + + _regex = re.compile( + r"^\s*" + VERSION_PATTERN + r"\s*$", + re.VERBOSE | re.IGNORECASE, + ) + + def __init__(self, version): + # Validate the version and parse it into pieces + match = self._regex.search(version) + if not match: + raise InvalidVersion("Invalid version: '{0}'".format(version)) + + # Store the parsed out pieces of the version + self._version = _Version( + epoch=int(match.group("epoch")) if match.group("epoch") else 0, + release=tuple(int(i) for i in match.group("release").split(".")), + pre=_parse_letter_version( + match.group("pre_l"), + match.group("pre_n"), + ), + post=_parse_letter_version( + match.group("post_l"), + match.group("post_n1") or match.group("post_n2"), + ), + dev=_parse_letter_version( + match.group("dev_l"), + match.group("dev_n"), + ), + local=_parse_local_version(match.group("local")), + ) + + # Generate a key which will be used for sorting + self._key = _cmpkey( + self._version.epoch, + self._version.release, + self._version.pre, + self._version.post, + self._version.dev, + self._version.local, + ) + + def __repr__(self): + return "<Version({0})>".format(repr(str(self))) + + def __str__(self): + parts = [] + + # Epoch + if self._version.epoch != 0: + parts.append("{0}!".format(self._version.epoch)) + + # Release segment + parts.append(".".join(str(x) for x in self._version.release)) + + # Pre-release + if self._version.pre is not None: + parts.append("".join(str(x) for x in self._version.pre)) + + # Post-release + if self._version.post is not None: + parts.append(".post{0}".format(self._version.post[1])) + + # Development release + if self._version.dev is not None: + parts.append(".dev{0}".format(self._version.dev[1])) + + # Local version segment + if self._version.local is not None: + parts.append( + "+{0}".format(".".join(str(x) for x in self._version.local)) + ) + + return "".join(parts) + + @property + def public(self): + return str(self).split("+", 1)[0] + + @property + def base_version(self): + parts = [] + + # Epoch + if self._version.epoch != 0: + parts.append("{0}!".format(self._version.epoch)) + + # Release segment + parts.append(".".join(str(x) for x in self._version.release)) + + return "".join(parts) + + @property + def local(self): + version_string = str(self) + if "+" in version_string: + return version_string.split("+", 1)[1] + + @property + def is_prerelease(self): + return bool(self._version.dev or self._version.pre) + + @property + def is_postrelease(self): + return bool(self._version.post) + + +def _parse_letter_version(letter, number): + if letter: + # We consider there to be an implicit 0 in a pre-release if there is + # not a numeral associated with it. + if number is None: + number = 0 + + # We normalize any letters to their lower case form + letter = letter.lower() + + # We consider some words to be alternate spellings of other words and + # in those cases we want to normalize the spellings to our preferred + # spelling. + if letter == "alpha": + letter = "a" + elif letter == "beta": + letter = "b" + elif letter in ["c", "pre", "preview"]: + letter = "rc" + elif letter in ["rev", "r"]: + letter = "post" + + return letter, int(number) + if not letter and number: + # We assume if we are given a number, but we are not given a letter + # then this is using the implicit post release syntax (e.g. 1.0-1) + letter = "post" + + return letter, int(number) + + +_local_version_seperators = re.compile(r"[\._-]") + + +def _parse_local_version(local): + """ + Takes a string like abc.1.twelve and turns it into ("abc", 1, "twelve"). + """ + if local is not None: + return tuple( + part.lower() if not part.isdigit() else int(part) + for part in _local_version_seperators.split(local) + ) + + +def _cmpkey(epoch, release, pre, post, dev, local): + # When we compare a release version, we want to compare it with all of the + # trailing zeros removed. So we'll use a reverse the list, drop all the now + # leading zeros until we come to something non zero, then take the rest + # re-reverse it back into the correct order and make it a tuple and use + # that for our sorting key. + release = tuple( + reversed(list( + itertools.dropwhile( + lambda x: x == 0, + reversed(release), + ) + )) + ) + + # We need to "trick" the sorting algorithm to put 1.0.dev0 before 1.0a0. + # We'll do this by abusing the pre segment, but we _only_ want to do this + # if there is not a pre or a post segment. If we have one of those then + # the normal sorting rules will handle this case correctly. + if pre is None and post is None and dev is not None: + pre = -Infinity + # Versions without a pre-release (except as noted above) should sort after + # those with one. + elif pre is None: + pre = Infinity + + # Versions without a post segment should sort before those with one. + if post is None: + post = -Infinity + + # Versions without a development segment should sort after those with one. + if dev is None: + dev = Infinity + + if local is None: + # Versions without a local segment should sort before those with one. + local = -Infinity + else: + # Versions with a local segment need that segment parsed to implement + # the sorting rules in PEP440. + # - Alpha numeric segments sort before numeric segments + # - Alpha numeric segments sort lexicographically + # - Numeric segments sort numerically + # - Shorter versions sort before longer versions when the prefixes + # match exactly + local = tuple( + (i, "") if isinstance(i, int) else (-Infinity, i) + for i in local + ) + + return epoch, release, pre, post, dev, local diff --git a/week-0/day-3/venv/lib/python3.6/site-packages/pkg_resources/_vendor/pyparsing.py b/week-0/day-3/venv/lib/python3.6/site-packages/pkg_resources/_vendor/pyparsing.py new file mode 100644 index 00000000..38a8d2f5 --- /dev/null +++ b/week-0/day-3/venv/lib/python3.6/site-packages/pkg_resources/_vendor/pyparsing.py @@ -0,0 +1,5696 @@ +# module pyparsing.py +# +# Copyright (c) 2003-2016 Paul T. McGuire +# +# Permission is hereby granted, free of charge, to any person obtaining +# a copy of this software and associated documentation files (the +# "Software"), to deal in the Software without restriction, including +# without limitation the rights to use, copy, modify, merge, publish, +# distribute, sublicense, and/or sell copies of the Software, and to +# permit persons to whom the Software is furnished to do so, subject to +# the following conditions: +# +# The above copyright notice and this permission notice shall be +# included in all copies or substantial portions of the Software. +# +# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, +# EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF +# MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. +# IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY +# CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, +# TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE +# SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. +# + +__doc__ = \ +""" +pyparsing module - Classes and methods to define and execute parsing grammars + +The pyparsing module is an alternative approach to creating and executing simple grammars, +vs. the traditional lex/yacc approach, or the use of regular expressions. With pyparsing, you +don't need to learn a new syntax for defining grammars or matching expressions - the parsing module +provides a library of classes that you use to construct the grammar directly in Python. + +Here is a program to parse "Hello, World!" (or any greeting of the form +C{"<salutation>, <addressee>!"}), built up using L{Word}, L{Literal}, and L{And} elements +(L{'+'<ParserElement.__add__>} operator gives L{And} expressions, strings are auto-converted to +L{Literal} expressions):: + + from pyparsing import Word, alphas + + # define grammar of a greeting + greet = Word(alphas) + "," + Word(alphas) + "!" + + hello = "Hello, World!" + print (hello, "->", greet.parseString(hello)) + +The program outputs the following:: + + Hello, World! -> ['Hello', ',', 'World', '!'] + +The Python representation of the grammar is quite readable, owing to the self-explanatory +class names, and the use of '+', '|' and '^' operators. + +The L{ParseResults} object returned from L{ParserElement.parseString<ParserElement.parseString>} can be accessed as a nested list, a dictionary, or an +object with named attributes. + +The pyparsing module handles some of the problems that are typically vexing when writing text parsers: + - extra or missing whitespace (the above program will also handle "Hello,World!", "Hello , World !", etc.) + - quoted strings + - embedded comments +""" + +__version__ = "2.1.10" +__versionTime__ = "07 Oct 2016 01:31 UTC" +__author__ = "Paul McGuire <ptmcg@users.sourceforge.net>" + +import string +from weakref import ref as wkref +import copy +import sys +import warnings +import re +import sre_constants +import collections +import pprint +import traceback +import types +from datetime import datetime + +try: + from _thread import RLock +except ImportError: + from threading import RLock + +try: + from collections import OrderedDict as _OrderedDict +except ImportError: + try: + from ordereddict import OrderedDict as _OrderedDict + except ImportError: + _OrderedDict = None + +#~ sys.stderr.write( "testing pyparsing module, version %s, %s\n" % (__version__,__versionTime__ ) ) + +__all__ = [ +'And', 'CaselessKeyword', 'CaselessLiteral', 'CharsNotIn', 'Combine', 'Dict', 'Each', 'Empty', +'FollowedBy', 'Forward', 'GoToColumn', 'Group', 'Keyword', 'LineEnd', 'LineStart', 'Literal', +'MatchFirst', 'NoMatch', 'NotAny', 'OneOrMore', 'OnlyOnce', 'Optional', 'Or', +'ParseBaseException', 'ParseElementEnhance', 'ParseException', 'ParseExpression', 'ParseFatalException', +'ParseResults', 'ParseSyntaxException', 'ParserElement', 'QuotedString', 'RecursiveGrammarException', +'Regex', 'SkipTo', 'StringEnd', 'StringStart', 'Suppress', 'Token', 'TokenConverter', +'White', 'Word', 'WordEnd', 'WordStart', 'ZeroOrMore', +'alphanums', 'alphas', 'alphas8bit', 'anyCloseTag', 'anyOpenTag', 'cStyleComment', 'col', +'commaSeparatedList', 'commonHTMLEntity', 'countedArray', 'cppStyleComment', 'dblQuotedString', +'dblSlashComment', 'delimitedList', 'dictOf', 'downcaseTokens', 'empty', 'hexnums', +'htmlComment', 'javaStyleComment', 'line', 'lineEnd', 'lineStart', 'lineno', +'makeHTMLTags', 'makeXMLTags', 'matchOnlyAtCol', 'matchPreviousExpr', 'matchPreviousLiteral', +'nestedExpr', 'nullDebugAction', 'nums', 'oneOf', 'opAssoc', 'operatorPrecedence', 'printables', +'punc8bit', 'pythonStyleComment', 'quotedString', 'removeQuotes', 'replaceHTMLEntity', +'replaceWith', 'restOfLine', 'sglQuotedString', 'srange', 'stringEnd', +'stringStart', 'traceParseAction', 'unicodeString', 'upcaseTokens', 'withAttribute', +'indentedBlock', 'originalTextFor', 'ungroup', 'infixNotation','locatedExpr', 'withClass', +'CloseMatch', 'tokenMap', 'pyparsing_common', +] + +system_version = tuple(sys.version_info)[:3] +PY_3 = system_version[0] == 3 +if PY_3: + _MAX_INT = sys.maxsize + basestring = str + unichr = chr + _ustr = str + + # build list of single arg builtins, that can be used as parse actions + singleArgBuiltins = [sum, len, sorted, reversed, list, tuple, set, any, all, min, max] + +else: + _MAX_INT = sys.maxint + range = xrange + + def _ustr(obj): + """Drop-in replacement for str(obj) that tries to be Unicode friendly. It first tries + str(obj). If that fails with a UnicodeEncodeError, then it tries unicode(obj). It + then < returns the unicode object | encodes it with the default encoding | ... >. + """ + if isinstance(obj,unicode): + return obj + + try: + # If this works, then _ustr(obj) has the same behaviour as str(obj), so + # it won't break any existing code. + return str(obj) + + except UnicodeEncodeError: + # Else encode it + ret = unicode(obj).encode(sys.getdefaultencoding(), 'xmlcharrefreplace') + xmlcharref = Regex(r'&#\d+;') + xmlcharref.setParseAction(lambda t: '\\u' + hex(int(t[0][2:-1]))[2:]) + return xmlcharref.transformString(ret) + + # build list of single arg builtins, tolerant of Python version, that can be used as parse actions + singleArgBuiltins = [] + import __builtin__ + for fname in "sum len sorted reversed list tuple set any all min max".split(): + try: + singleArgBuiltins.append(getattr(__builtin__,fname)) + except AttributeError: + continue + +_generatorType = type((y for y in range(1))) + +def _xml_escape(data): + """Escape &, <, >, ", ', etc. in a string of data.""" + + # ampersand must be replaced first + from_symbols = '&><"\'' + to_symbols = ('&'+s+';' for s in "amp gt lt quot apos".split()) + for from_,to_ in zip(from_symbols, to_symbols): + data = data.replace(from_, to_) + return data + +class _Constants(object): + pass + +alphas = string.ascii_uppercase + string.ascii_lowercase +nums = "0123456789" +hexnums = nums + "ABCDEFabcdef" +alphanums = alphas + nums +_bslash = chr(92) +printables = "".join(c for c in string.printable if c not in string.whitespace) + +class ParseBaseException(Exception): + """base exception class for all parsing runtime exceptions""" + # Performance tuning: we construct a *lot* of these, so keep this + # constructor as small and fast as possible + def __init__( self, pstr, loc=0, msg=None, elem=None ): + self.loc = loc + if msg is None: + self.msg = pstr + self.pstr = "" + else: + self.msg = msg + self.pstr = pstr + self.parserElement = elem + self.args = (pstr, loc, msg) + + @classmethod + def _from_exception(cls, pe): + """ + internal factory method to simplify creating one type of ParseException + from another - avoids having __init__ signature conflicts among subclasses + """ + return cls(pe.pstr, pe.loc, pe.msg, pe.parserElement) + + def __getattr__( self, aname ): + """supported attributes by name are: + - lineno - returns the line number of the exception text + - col - returns the column number of the exception text + - line - returns the line containing the exception text + """ + if( aname == "lineno" ): + return lineno( self.loc, self.pstr ) + elif( aname in ("col", "column") ): + return col( self.loc, self.pstr ) + elif( aname == "line" ): + return line( self.loc, self.pstr ) + else: + raise AttributeError(aname) + + def __str__( self ): + return "%s (at char %d), (line:%d, col:%d)" % \ + ( self.msg, self.loc, self.lineno, self.column ) + def __repr__( self ): + return _ustr(self) + def markInputline( self, markerString = ">!<" ): + """Extracts the exception line from the input string, and marks + the location of the exception with a special symbol. + """ + line_str = self.line + line_column = self.column - 1 + if markerString: + line_str = "".join((line_str[:line_column], + markerString, line_str[line_column:])) + return line_str.strip() + def __dir__(self): + return "lineno col line".split() + dir(type(self)) + +class ParseException(ParseBaseException): + """ + Exception thrown when parse expressions don't match class; + supported attributes by name are: + - lineno - returns the line number of the exception text + - col - returns the column number of the exception text + - line - returns the line containing the exception text + + Example:: + try: + Word(nums).setName("integer").parseString("ABC") + except ParseException as pe: + print(pe) + print("column: {}".format(pe.col)) + + prints:: + Expected integer (at char 0), (line:1, col:1) + column: 1 + """ + pass + +class ParseFatalException(ParseBaseException): + """user-throwable exception thrown when inconsistent parse content + is found; stops all parsing immediately""" + pass + +class ParseSyntaxException(ParseFatalException): + """just like L{ParseFatalException}, but thrown internally when an + L{ErrorStop<And._ErrorStop>} ('-' operator) indicates that parsing is to stop + immediately because an unbacktrackable syntax error has been found""" + pass + +#~ class ReparseException(ParseBaseException): + #~ """Experimental class - parse actions can raise this exception to cause + #~ pyparsing to reparse the input string: + #~ - with a modified input string, and/or + #~ - with a modified start location + #~ Set the values of the ReparseException in the constructor, and raise the + #~ exception in a parse action to cause pyparsing to use the new string/location. + #~ Setting the values as None causes no change to be made. + #~ """ + #~ def __init_( self, newstring, restartLoc ): + #~ self.newParseText = newstring + #~ self.reparseLoc = restartLoc + +class RecursiveGrammarException(Exception): + """exception thrown by L{ParserElement.validate} if the grammar could be improperly recursive""" + def __init__( self, parseElementList ): + self.parseElementTrace = parseElementList + + def __str__( self ): + return "RecursiveGrammarException: %s" % self.parseElementTrace + +class _ParseResultsWithOffset(object): + def __init__(self,p1,p2): + self.tup = (p1,p2) + def __getitem__(self,i): + return self.tup[i] + def __repr__(self): + return repr(self.tup[0]) + def setOffset(self,i): + self.tup = (self.tup[0],i) + +class ParseResults(object): + """ + Structured parse results, to provide multiple means of access to the parsed data: + - as a list (C{len(results)}) + - by list index (C{results[0], results[1]}, etc.) + - by attribute (C{results.<resultsName>} - see L{ParserElement.setResultsName}) + + Example:: + integer = Word(nums) + date_str = (integer.setResultsName("year") + '/' + + integer.setResultsName("month") + '/' + + integer.setResultsName("day")) + # equivalent form: + # date_str = integer("year") + '/' + integer("month") + '/' + integer("day") + + # parseString returns a ParseResults object + result = date_str.parseString("1999/12/31") + + def test(s, fn=repr): + print("%s -> %s" % (s, fn(eval(s)))) + test("list(result)") + test("result[0]") + test("result['month']") + test("result.day") + test("'month' in result") + test("'minutes' in result") + test("result.dump()", str) + prints:: + list(result) -> ['1999', '/', '12', '/', '31'] + result[0] -> '1999' + result['month'] -> '12' + result.day -> '31' + 'month' in result -> True + 'minutes' in result -> False + result.dump() -> ['1999', '/', '12', '/', '31'] + - day: 31 + - month: 12 + - year: 1999 + """ + def __new__(cls, toklist=None, name=None, asList=True, modal=True ): + if isinstance(toklist, cls): + return toklist + retobj = object.__new__(cls) + retobj.__doinit = True + return retobj + + # Performance tuning: we construct a *lot* of these, so keep this + # constructor as small and fast as possible + def __init__( self, toklist=None, name=None, asList=True, modal=True, isinstance=isinstance ): + if self.__doinit: + self.__doinit = False + self.__name = None + self.__parent = None + self.__accumNames = {} + self.__asList = asList + self.__modal = modal + if toklist is None: + toklist = [] + if isinstance(toklist, list): + self.__toklist = toklist[:] + elif isinstance(toklist, _generatorType): + self.__toklist = list(toklist) + else: + self.__toklist = [toklist] + self.__tokdict = dict() + + if name is not None and name: + if not modal: + self.__accumNames[name] = 0 + if isinstance(name,int): + name = _ustr(name) # will always return a str, but use _ustr for consistency + self.__name = name + if not (isinstance(toklist, (type(None), basestring, list)) and toklist in (None,'',[])): + if isinstance(toklist,basestring): + toklist = [ toklist ] + if asList: + if isinstance(toklist,ParseResults): + self[name] = _ParseResultsWithOffset(toklist.copy(),0) + else: + self[name] = _ParseResultsWithOffset(ParseResults(toklist[0]),0) + self[name].__name = name + else: + try: + self[name] = toklist[0] + except (KeyError,TypeError,IndexError): + self[name] = toklist + + def __getitem__( self, i ): + if isinstance( i, (int,slice) ): + return self.__toklist[i] + else: + if i not in self.__accumNames: + return self.__tokdict[i][-1][0] + else: + return ParseResults([ v[0] for v in self.__tokdict[i] ]) + + def __setitem__( self, k, v, isinstance=isinstance ): + if isinstance(v,_ParseResultsWithOffset): + self.__tokdict[k] = self.__tokdict.get(k,list()) + [v] + sub = v[0] + elif isinstance(k,(int,slice)): + self.__toklist[k] = v + sub = v + else: + self.__tokdict[k] = self.__tokdict.get(k,list()) + [_ParseResultsWithOffset(v,0)] + sub = v + if isinstance(sub,ParseResults): + sub.__parent = wkref(self) + + def __delitem__( self, i ): + if isinstance(i,(int,slice)): + mylen = len( self.__toklist ) + del self.__toklist[i] + + # convert int to slice + if isinstance(i, int): + if i < 0: + i += mylen + i = slice(i, i+1) + # get removed indices + removed = list(range(*i.indices(mylen))) + removed.reverse() + # fixup indices in token dictionary + for name,occurrences in self.__tokdict.items(): + for j in removed: + for k, (value, position) in enumerate(occurrences): + occurrences[k] = _ParseResultsWithOffset(value, position - (position > j)) + else: + del self.__tokdict[i] + + def __contains__( self, k ): + return k in self.__tokdict + + def __len__( self ): return len( self.__toklist ) + def __bool__(self): return ( not not self.__toklist ) + __nonzero__ = __bool__ + def __iter__( self ): return iter( self.__toklist ) + def __reversed__( self ): return iter( self.__toklist[::-1] ) + def _iterkeys( self ): + if hasattr(self.__tokdict, "iterkeys"): + return self.__tokdict.iterkeys() + else: + return iter(self.__tokdict) + + def _itervalues( self ): + return (self[k] for k in self._iterkeys()) + + def _iteritems( self ): + return ((k, self[k]) for k in self._iterkeys()) + + if PY_3: + keys = _iterkeys + """Returns an iterator of all named result keys (Python 3.x only).""" + + values = _itervalues + """Returns an iterator of all named result values (Python 3.x only).""" + + items = _iteritems + """Returns an iterator of all named result key-value tuples (Python 3.x only).""" + + else: + iterkeys = _iterkeys + """Returns an iterator of all named result keys (Python 2.x only).""" + + itervalues = _itervalues + """Returns an iterator of all named result values (Python 2.x only).""" + + iteritems = _iteritems + """Returns an iterator of all named result key-value tuples (Python 2.x only).""" + + def keys( self ): + """Returns all named result keys (as a list in Python 2.x, as an iterator in Python 3.x).""" + return list(self.iterkeys()) + + def values( self ): + """Returns all named result values (as a list in Python 2.x, as an iterator in Python 3.x).""" + return list(self.itervalues()) + + def items( self ): + """Returns all named result key-values (as a list of tuples in Python 2.x, as an iterator in Python 3.x).""" + return list(self.iteritems()) + + def haskeys( self ): + """Since keys() returns an iterator, this method is helpful in bypassing + code that looks for the existence of any defined results names.""" + return bool(self.__tokdict) + + def pop( self, *args, **kwargs): + """ + Removes and returns item at specified index (default=C{last}). + Supports both C{list} and C{dict} semantics for C{pop()}. If passed no + argument or an integer argument, it will use C{list} semantics + and pop tokens from the list of parsed tokens. If passed a + non-integer argument (most likely a string), it will use C{dict} + semantics and pop the corresponding value from any defined + results names. A second default return value argument is + supported, just as in C{dict.pop()}. + + Example:: + def remove_first(tokens): + tokens.pop(0) + print(OneOrMore(Word(nums)).parseString("0 123 321")) # -> ['0', '123', '321'] + print(OneOrMore(Word(nums)).addParseAction(remove_first).parseString("0 123 321")) # -> ['123', '321'] + + label = Word(alphas) + patt = label("LABEL") + OneOrMore(Word(nums)) + print(patt.parseString("AAB 123 321").dump()) + + # Use pop() in a parse action to remove named result (note that corresponding value is not + # removed from list form of results) + def remove_LABEL(tokens): + tokens.pop("LABEL") + return tokens + patt.addParseAction(remove_LABEL) + print(patt.parseString("AAB 123 321").dump()) + prints:: + ['AAB', '123', '321'] + - LABEL: AAB + + ['AAB', '123', '321'] + """ + if not args: + args = [-1] + for k,v in kwargs.items(): + if k == 'default': + args = (args[0], v) + else: + raise TypeError("pop() got an unexpected keyword argument '%s'" % k) + if (isinstance(args[0], int) or + len(args) == 1 or + args[0] in self): + index = args[0] + ret = self[index] + del self[index] + return ret + else: + defaultvalue = args[1] + return defaultvalue + + def get(self, key, defaultValue=None): + """ + Returns named result matching the given key, or if there is no + such name, then returns the given C{defaultValue} or C{None} if no + C{defaultValue} is specified. + + Similar to C{dict.get()}. + + Example:: + integer = Word(nums) + date_str = integer("year") + '/' + integer("month") + '/' + integer("day") + + result = date_str.parseString("1999/12/31") + print(result.get("year")) # -> '1999' + print(result.get("hour", "not specified")) # -> 'not specified' + print(result.get("hour")) # -> None + """ + if key in self: + return self[key] + else: + return defaultValue + + def insert( self, index, insStr ): + """ + Inserts new element at location index in the list of parsed tokens. + + Similar to C{list.insert()}. + + Example:: + print(OneOrMore(Word(nums)).parseString("0 123 321")) # -> ['0', '123', '321'] + + # use a parse action to insert the parse location in the front of the parsed results + def insert_locn(locn, tokens): + tokens.insert(0, locn) + print(OneOrMore(Word(nums)).addParseAction(insert_locn).parseString("0 123 321")) # -> [0, '0', '123', '321'] + """ + self.__toklist.insert(index, insStr) + # fixup indices in token dictionary + for name,occurrences in self.__tokdict.items(): + for k, (value, position) in enumerate(occurrences): + occurrences[k] = _ParseResultsWithOffset(value, position + (position > index)) + + def append( self, item ): + """ + Add single element to end of ParseResults list of elements. + + Example:: + print(OneOrMore(Word(nums)).parseString("0 123 321")) # -> ['0', '123', '321'] + + # use a parse action to compute the sum of the parsed integers, and add it to the end + def append_sum(tokens): + tokens.append(sum(map(int, tokens))) + print(OneOrMore(Word(nums)).addParseAction(append_sum).parseString("0 123 321")) # -> ['0', '123', '321', 444] + """ + self.__toklist.append(item) + + def extend( self, itemseq ): + """ + Add sequence of elements to end of ParseResults list of elements. + + Example:: + patt = OneOrMore(Word(alphas)) + + # use a parse action to append the reverse of the matched strings, to make a palindrome + def make_palindrome(tokens): + tokens.extend(reversed([t[::-1] for t in tokens])) + return ''.join(tokens) + print(patt.addParseAction(make_palindrome).parseString("lskdj sdlkjf lksd")) # -> 'lskdjsdlkjflksddsklfjkldsjdksl' + """ + if isinstance(itemseq, ParseResults): + self += itemseq + else: + self.__toklist.extend(itemseq) + + def clear( self ): + """ + Clear all elements and results names. + """ + del self.__toklist[:] + self.__tokdict.clear() + + def __getattr__( self, name ): + try: + return self[name] + except KeyError: + return "" + + if name in self.__tokdict: + if name not in self.__accumNames: + return self.__tokdict[name][-1][0] + else: + return ParseResults([ v[0] for v in self.__tokdict[name] ]) + else: + return "" + + def __add__( self, other ): + ret = self.copy() + ret += other + return ret + + def __iadd__( self, other ): + if other.__tokdict: + offset = len(self.__toklist) + addoffset = lambda a: offset if a<0 else a+offset + otheritems = other.__tokdict.items() + otherdictitems = [(k, _ParseResultsWithOffset(v[0],addoffset(v[1])) ) + for (k,vlist) in otheritems for v in vlist] + for k,v in otherdictitems: + self[k] = v + if isinstance(v[0],ParseResults): + v[0].__parent = wkref(self) + + self.__toklist += other.__toklist + self.__accumNames.update( other.__accumNames ) + return self + + def __radd__(self, other): + if isinstance(other,int) and other == 0: + # useful for merging many ParseResults using sum() builtin + return self.copy() + else: + # this may raise a TypeError - so be it + return other + self + + def __repr__( self ): + return "(%s, %s)" % ( repr( self.__toklist ), repr( self.__tokdict ) ) + + def __str__( self ): + return '[' + ', '.join(_ustr(i) if isinstance(i, ParseResults) else repr(i) for i in self.__toklist) + ']' + + def _asStringList( self, sep='' ): + out = [] + for item in self.__toklist: + if out and sep: + out.append(sep) + if isinstance( item, ParseResults ): + out += item._asStringList() + else: + out.append( _ustr(item) ) + return out + + def asList( self ): + """ + Returns the parse results as a nested list of matching tokens, all converted to strings. + + Example:: + patt = OneOrMore(Word(alphas)) + result = patt.parseString("sldkj lsdkj sldkj") + # even though the result prints in string-like form, it is actually a pyparsing ParseResults + print(type(result), result) # -> <class 'pyparsing.ParseResults'> ['sldkj', 'lsdkj', 'sldkj'] + + # Use asList() to create an actual list + result_list = result.asList() + print(type(result_list), result_list) # -> <class 'list'> ['sldkj', 'lsdkj', 'sldkj'] + """ + return [res.asList() if isinstance(res,ParseResults) else res for res in self.__toklist] + + def asDict( self ): + """ + Returns the named parse results as a nested dictionary. + + Example:: + integer = Word(nums) + date_str = integer("year") + '/' + integer("month") + '/' + integer("day") + + result = date_str.parseString('12/31/1999') + print(type(result), repr(result)) # -> <class 'pyparsing.ParseResults'> (['12', '/', '31', '/', '1999'], {'day': [('1999', 4)], 'year': [('12', 0)], 'month': [('31', 2)]}) + + result_dict = result.asDict() + print(type(result_dict), repr(result_dict)) # -> <class 'dict'> {'day': '1999', 'year': '12', 'month': '31'} + + # even though a ParseResults supports dict-like access, sometime you just need to have a dict + import json + print(json.dumps(result)) # -> Exception: TypeError: ... is not JSON serializable + print(json.dumps(result.asDict())) # -> {"month": "31", "day": "1999", "year": "12"} + """ + if PY_3: + item_fn = self.items + else: + item_fn = self.iteritems + + def toItem(obj): + if isinstance(obj, ParseResults): + if obj.haskeys(): + return obj.asDict() + else: + return [toItem(v) for v in obj] + else: + return obj + + return dict((k,toItem(v)) for k,v in item_fn()) + + def copy( self ): + """ + Returns a new copy of a C{ParseResults} object. + """ + ret = ParseResults( self.__toklist ) + ret.__tokdict = self.__tokdict.copy() + ret.__parent = self.__parent + ret.__accumNames.update( self.__accumNames ) + ret.__name = self.__name + return ret + + def asXML( self, doctag=None, namedItemsOnly=False, indent="", formatted=True ): + """ + (Deprecated) Returns the parse results as XML. Tags are created for tokens and lists that have defined results names. + """ + nl = "\n" + out = [] + namedItems = dict((v[1],k) for (k,vlist) in self.__tokdict.items() + for v in vlist) + nextLevelIndent = indent + " " + + # collapse out indents if formatting is not desired + if not formatted: + indent = "" + nextLevelIndent = "" + nl = "" + + selfTag = None + if doctag is not None: + selfTag = doctag + else: + if self.__name: + selfTag = self.__name + + if not selfTag: + if namedItemsOnly: + return "" + else: + selfTag = "ITEM" + + out += [ nl, indent, "<", selfTag, ">" ] + + for i,res in enumerate(self.__toklist): + if isinstance(res,ParseResults): + if i in namedItems: + out += [ res.asXML(namedItems[i], + namedItemsOnly and doctag is None, + nextLevelIndent, + formatted)] + else: + out += [ res.asXML(None, + namedItemsOnly and doctag is None, + nextLevelIndent, + formatted)] + else: + # individual token, see if there is a name for it + resTag = None + if i in namedItems: + resTag = namedItems[i] + if not resTag: + if namedItemsOnly: + continue + else: + resTag = "ITEM" + xmlBodyText = _xml_escape(_ustr(res)) + out += [ nl, nextLevelIndent, "<", resTag, ">", + xmlBodyText, + "</", resTag, ">" ] + + out += [ nl, indent, "</", selfTag, ">" ] + return "".join(out) + + def __lookup(self,sub): + for k,vlist in self.__tokdict.items(): + for v,loc in vlist: + if sub is v: + return k + return None + + def getName(self): + r""" + Returns the results name for this token expression. Useful when several + different expressions might match at a particular location. + + Example:: + integer = Word(nums) + ssn_expr = Regex(r"\d\d\d-\d\d-\d\d\d\d") + house_number_expr = Suppress('#') + Word(nums, alphanums) + user_data = (Group(house_number_expr)("house_number") + | Group(ssn_expr)("ssn") + | Group(integer)("age")) + user_info = OneOrMore(user_data) + + result = user_info.parseString("22 111-22-3333 #221B") + for item in result: + print(item.getName(), ':', item[0]) + prints:: + age : 22 + ssn : 111-22-3333 + house_number : 221B + """ + if self.__name: + return self.__name + elif self.__parent: + par = self.__parent() + if par: + return par.__lookup(self) + else: + return None + elif (len(self) == 1 and + len(self.__tokdict) == 1 and + next(iter(self.__tokdict.values()))[0][1] in (0,-1)): + return next(iter(self.__tokdict.keys())) + else: + return None + + def dump(self, indent='', depth=0, full=True): + """ + Diagnostic method for listing out the contents of a C{ParseResults}. + Accepts an optional C{indent} argument so that this string can be embedded + in a nested display of other data. + + Example:: + integer = Word(nums) + date_str = integer("year") + '/' + integer("month") + '/' + integer("day") + + result = date_str.parseString('12/31/1999') + print(result.dump()) + prints:: + ['12', '/', '31', '/', '1999'] + - day: 1999 + - month: 31 + - year: 12 + """ + out = [] + NL = '\n' + out.append( indent+_ustr(self.asList()) ) + if full: + if self.haskeys(): + items = sorted((str(k), v) for k,v in self.items()) + for k,v in items: + if out: + out.append(NL) + out.append( "%s%s- %s: " % (indent,(' '*depth), k) ) + if isinstance(v,ParseResults): + if v: + out.append( v.dump(indent,depth+1) ) + else: + out.append(_ustr(v)) + else: + out.append(repr(v)) + elif any(isinstance(vv,ParseResults) for vv in self): + v = self + for i,vv in enumerate(v): + if isinstance(vv,ParseResults): + out.append("\n%s%s[%d]:\n%s%s%s" % (indent,(' '*(depth)),i,indent,(' '*(depth+1)),vv.dump(indent,depth+1) )) + else: + out.append("\n%s%s[%d]:\n%s%s%s" % (indent,(' '*(depth)),i,indent,(' '*(depth+1)),_ustr(vv))) + + return "".join(out) + + def pprint(self, *args, **kwargs): + """ + Pretty-printer for parsed results as a list, using the C{pprint} module. + Accepts additional positional or keyword args as defined for the + C{pprint.pprint} method. (U{http://docs.python.org/3/library/pprint.html#pprint.pprint}) + + Example:: + ident = Word(alphas, alphanums) + num = Word(nums) + func = Forward() + term = ident | num | Group('(' + func + ')') + func <<= ident + Group(Optional(delimitedList(term))) + result = func.parseString("fna a,b,(fnb c,d,200),100") + result.pprint(width=40) + prints:: + ['fna', + ['a', + 'b', + ['(', 'fnb', ['c', 'd', '200'], ')'], + '100']] + """ + pprint.pprint(self.asList(), *args, **kwargs) + + # add support for pickle protocol + def __getstate__(self): + return ( self.__toklist, + ( self.__tokdict.copy(), + self.__parent is not None and self.__parent() or None, + self.__accumNames, + self.__name ) ) + + def __setstate__(self,state): + self.__toklist = state[0] + (self.__tokdict, + par, + inAccumNames, + self.__name) = state[1] + self.__accumNames = {} + self.__accumNames.update(inAccumNames) + if par is not None: + self.__parent = wkref(par) + else: + self.__parent = None + + def __getnewargs__(self): + return self.__toklist, self.__name, self.__asList, self.__modal + + def __dir__(self): + return (dir(type(self)) + list(self.keys())) + +collections.MutableMapping.register(ParseResults) + +def col (loc,strg): + """Returns current column within a string, counting newlines as line separators. + The first column is number 1. + + Note: the default parsing behavior is to expand tabs in the input string + before starting the parsing process. See L{I{ParserElement.parseString}<ParserElement.parseString>} for more information + on parsing strings containing C{<TAB>}s, and suggested methods to maintain a + consistent view of the parsed string, the parse location, and line and column + positions within the parsed string. + """ + s = strg + return 1 if 0<loc<len(s) and s[loc-1] == '\n' else loc - s.rfind("\n", 0, loc) + +def lineno(loc,strg): + """Returns current line number within a string, counting newlines as line separators. + The first line is number 1. + + Note: the default parsing behavior is to expand tabs in the input string + before starting the parsing process. See L{I{ParserElement.parseString}<ParserElement.parseString>} for more information + on parsing strings containing C{<TAB>}s, and suggested methods to maintain a + consistent view of the parsed string, the parse location, and line and column + positions within the parsed string. + """ + return strg.count("\n",0,loc) + 1 + +def line( loc, strg ): + """Returns the line of text containing loc within a string, counting newlines as line separators. + """ + lastCR = strg.rfind("\n", 0, loc) + nextCR = strg.find("\n", loc) + if nextCR >= 0: + return strg[lastCR+1:nextCR] + else: + return strg[lastCR+1:] + +def _defaultStartDebugAction( instring, loc, expr ): + print (("Match " + _ustr(expr) + " at loc " + _ustr(loc) + "(%d,%d)" % ( lineno(loc,instring), col(loc,instring) ))) + +def _defaultSuccessDebugAction( instring, startloc, endloc, expr, toks ): + print ("Matched " + _ustr(expr) + " -> " + str(toks.asList())) + +def _defaultExceptionDebugAction( instring, loc, expr, exc ): + print ("Exception raised:" + _ustr(exc)) + +def nullDebugAction(*args): + """'Do-nothing' debug action, to suppress debugging output during parsing.""" + pass + +# Only works on Python 3.x - nonlocal is toxic to Python 2 installs +#~ 'decorator to trim function calls to match the arity of the target' +#~ def _trim_arity(func, maxargs=3): + #~ if func in singleArgBuiltins: + #~ return lambda s,l,t: func(t) + #~ limit = 0 + #~ foundArity = False + #~ def wrapper(*args): + #~ nonlocal limit,foundArity + #~ while 1: + #~ try: + #~ ret = func(*args[limit:]) + #~ foundArity = True + #~ return ret + #~ except TypeError: + #~ if limit == maxargs or foundArity: + #~ raise + #~ limit += 1 + #~ continue + #~ return wrapper + +# this version is Python 2.x-3.x cross-compatible +'decorator to trim function calls to match the arity of the target' +def _trim_arity(func, maxargs=2): + if func in singleArgBuiltins: + return lambda s,l,t: func(t) + limit = [0] + foundArity = [False] + + # traceback return data structure changed in Py3.5 - normalize back to plain tuples + if system_version[:2] >= (3,5): + def extract_stack(limit=0): + # special handling for Python 3.5.0 - extra deep call stack by 1 + offset = -3 if system_version == (3,5,0) else -2 + frame_summary = traceback.extract_stack(limit=-offset+limit-1)[offset] + return [(frame_summary.filename, frame_summary.lineno)] + def extract_tb(tb, limit=0): + frames = traceback.extract_tb(tb, limit=limit) + frame_summary = frames[-1] + return [(frame_summary.filename, frame_summary.lineno)] + else: + extract_stack = traceback.extract_stack + extract_tb = traceback.extract_tb + + # synthesize what would be returned by traceback.extract_stack at the call to + # user's parse action 'func', so that we don't incur call penalty at parse time + + LINE_DIFF = 6 + # IF ANY CODE CHANGES, EVEN JUST COMMENTS OR BLANK LINES, BETWEEN THE NEXT LINE AND + # THE CALL TO FUNC INSIDE WRAPPER, LINE_DIFF MUST BE MODIFIED!!!! + this_line = extract_stack(limit=2)[-1] + pa_call_line_synth = (this_line[0], this_line[1]+LINE_DIFF) + + def wrapper(*args): + while 1: + try: + ret = func(*args[limit[0]:]) + foundArity[0] = True + return ret + except TypeError: + # re-raise TypeErrors if they did not come from our arity testing + if foundArity[0]: + raise + else: + try: + tb = sys.exc_info()[-1] + if not extract_tb(tb, limit=2)[-1][:2] == pa_call_line_synth: + raise + finally: + del tb + + if limit[0] <= maxargs: + limit[0] += 1 + continue + raise + + # copy func name to wrapper for sensible debug output + func_name = "<parse action>" + try: + func_name = getattr(func, '__name__', + getattr(func, '__class__').__name__) + except Exception: + func_name = str(func) + wrapper.__name__ = func_name + + return wrapper + +class ParserElement(object): + """Abstract base level parser element class.""" + DEFAULT_WHITE_CHARS = " \n\t\r" + verbose_stacktrace = False + + @staticmethod + def setDefaultWhitespaceChars( chars ): + r""" + Overrides the default whitespace chars + + Example:: + # default whitespace chars are space, <TAB> and newline + OneOrMore(Word(alphas)).parseString("abc def\nghi jkl") # -> ['abc', 'def', 'ghi', 'jkl'] + + # change to just treat newline as significant + ParserElement.setDefaultWhitespaceChars(" \t") + OneOrMore(Word(alphas)).parseString("abc def\nghi jkl") # -> ['abc', 'def'] + """ + ParserElement.DEFAULT_WHITE_CHARS = chars + + @staticmethod + def inlineLiteralsUsing(cls): + """ + Set class to be used for inclusion of string literals into a parser. + + Example:: + # default literal class used is Literal + integer = Word(nums) + date_str = integer("year") + '/' + integer("month") + '/' + integer("day") + + date_str.parseString("1999/12/31") # -> ['1999', '/', '12', '/', '31'] + + + # change to Suppress + ParserElement.inlineLiteralsUsing(Suppress) + date_str = integer("year") + '/' + integer("month") + '/' + integer("day") + + date_str.parseString("1999/12/31") # -> ['1999', '12', '31'] + """ + ParserElement._literalStringClass = cls + + def __init__( self, savelist=False ): + self.parseAction = list() + self.failAction = None + #~ self.name = "<unknown>" # don't define self.name, let subclasses try/except upcall + self.strRepr = None + self.resultsName = None + self.saveAsList = savelist + self.skipWhitespace = True + self.whiteChars = ParserElement.DEFAULT_WHITE_CHARS + self.copyDefaultWhiteChars = True + self.mayReturnEmpty = False # used when checking for left-recursion + self.keepTabs = False + self.ignoreExprs = list() + self.debug = False + self.streamlined = False + self.mayIndexError = True # used to optimize exception handling for subclasses that don't advance parse index + self.errmsg = "" + self.modalResults = True # used to mark results names as modal (report only last) or cumulative (list all) + self.debugActions = ( None, None, None ) #custom debug actions + self.re = None + self.callPreparse = True # used to avoid redundant calls to preParse + self.callDuringTry = False + + def copy( self ): + """ + Make a copy of this C{ParserElement}. Useful for defining different parse actions + for the same parsing pattern, using copies of the original parse element. + + Example:: + integer = Word(nums).setParseAction(lambda toks: int(toks[0])) + integerK = integer.copy().addParseAction(lambda toks: toks[0]*1024) + Suppress("K") + integerM = integer.copy().addParseAction(lambda toks: toks[0]*1024*1024) + Suppress("M") + + print(OneOrMore(integerK | integerM | integer).parseString("5K 100 640K 256M")) + prints:: + [5120, 100, 655360, 268435456] + Equivalent form of C{expr.copy()} is just C{expr()}:: + integerM = integer().addParseAction(lambda toks: toks[0]*1024*1024) + Suppress("M") + """ + cpy = copy.copy( self ) + cpy.parseAction = self.parseAction[:] + cpy.ignoreExprs = self.ignoreExprs[:] + if self.copyDefaultWhiteChars: + cpy.whiteChars = ParserElement.DEFAULT_WHITE_CHARS + return cpy + + def setName( self, name ): + """ + Define name for this expression, makes debugging and exception messages clearer. + + Example:: + Word(nums).parseString("ABC") # -> Exception: Expected W:(0123...) (at char 0), (line:1, col:1) + Word(nums).setName("integer").parseString("ABC") # -> Exception: Expected integer (at char 0), (line:1, col:1) + """ + self.name = name + self.errmsg = "Expected " + self.name + if hasattr(self,"exception"): + self.exception.msg = self.errmsg + return self + + def setResultsName( self, name, listAllMatches=False ): + """ + Define name for referencing matching tokens as a nested attribute + of the returned parse results. + NOTE: this returns a *copy* of the original C{ParserElement} object; + this is so that the client can define a basic element, such as an + integer, and reference it in multiple places with different names. + + You can also set results names using the abbreviated syntax, + C{expr("name")} in place of C{expr.setResultsName("name")} - + see L{I{__call__}<__call__>}. + + Example:: + date_str = (integer.setResultsName("year") + '/' + + integer.setResultsName("month") + '/' + + integer.setResultsName("day")) + + # equivalent form: + date_str = integer("year") + '/' + integer("month") + '/' + integer("day") + """ + newself = self.copy() + if name.endswith("*"): + name = name[:-1] + listAllMatches=True + newself.resultsName = name + newself.modalResults = not listAllMatches + return newself + + def setBreak(self,breakFlag = True): + """Method to invoke the Python pdb debugger when this element is + about to be parsed. Set C{breakFlag} to True to enable, False to + disable. + """ + if breakFlag: + _parseMethod = self._parse + def breaker(instring, loc, doActions=True, callPreParse=True): + import pdb + pdb.set_trace() + return _parseMethod( instring, loc, doActions, callPreParse ) + breaker._originalParseMethod = _parseMethod + self._parse = breaker + else: + if hasattr(self._parse,"_originalParseMethod"): + self._parse = self._parse._originalParseMethod + return self + + def setParseAction( self, *fns, **kwargs ): + """ + Define action to perform when successfully matching parse element definition. + Parse action fn is a callable method with 0-3 arguments, called as C{fn(s,loc,toks)}, + C{fn(loc,toks)}, C{fn(toks)}, or just C{fn()}, where: + - s = the original string being parsed (see note below) + - loc = the location of the matching substring + - toks = a list of the matched tokens, packaged as a C{L{ParseResults}} object + If the functions in fns modify the tokens, they can return them as the return + value from fn, and the modified list of tokens will replace the original. + Otherwise, fn does not need to return any value. + + Optional keyword arguments: + - callDuringTry = (default=C{False}) indicate if parse action should be run during lookaheads and alternate testing + + Note: the default parsing behavior is to expand tabs in the input string + before starting the parsing process. See L{I{parseString}<parseString>} for more information + on parsing strings containing C{<TAB>}s, and suggested methods to maintain a + consistent view of the parsed string, the parse location, and line and column + positions within the parsed string. + + Example:: + integer = Word(nums) + date_str = integer + '/' + integer + '/' + integer + + date_str.parseString("1999/12/31") # -> ['1999', '/', '12', '/', '31'] + + # use parse action to convert to ints at parse time + integer = Word(nums).setParseAction(lambda toks: int(toks[0])) + date_str = integer + '/' + integer + '/' + integer + + # note that integer fields are now ints, not strings + date_str.parseString("1999/12/31") # -> [1999, '/', 12, '/', 31] + """ + self.parseAction = list(map(_trim_arity, list(fns))) + self.callDuringTry = kwargs.get("callDuringTry", False) + return self + + def addParseAction( self, *fns, **kwargs ): + """ + Add parse action to expression's list of parse actions. See L{I{setParseAction}<setParseAction>}. + + See examples in L{I{copy}<copy>}. + """ + self.parseAction += list(map(_trim_arity, list(fns))) + self.callDuringTry = self.callDuringTry or kwargs.get("callDuringTry", False) + return self + + def addCondition(self, *fns, **kwargs): + """Add a boolean predicate function to expression's list of parse actions. See + L{I{setParseAction}<setParseAction>} for function call signatures. Unlike C{setParseAction}, + functions passed to C{addCondition} need to return boolean success/fail of the condition. + + Optional keyword arguments: + - message = define a custom message to be used in the raised exception + - fatal = if True, will raise ParseFatalException to stop parsing immediately; otherwise will raise ParseException + + Example:: + integer = Word(nums).setParseAction(lambda toks: int(toks[0])) + year_int = integer.copy() + year_int.addCondition(lambda toks: toks[0] >= 2000, message="Only support years 2000 and later") + date_str = year_int + '/' + integer + '/' + integer + + result = date_str.parseString("1999/12/31") # -> Exception: Only support years 2000 and later (at char 0), (line:1, col:1) + """ + msg = kwargs.get("message", "failed user-defined condition") + exc_type = ParseFatalException if kwargs.get("fatal", False) else ParseException + for fn in fns: + def pa(s,l,t): + if not bool(_trim_arity(fn)(s,l,t)): + raise exc_type(s,l,msg) + self.parseAction.append(pa) + self.callDuringTry = self.callDuringTry or kwargs.get("callDuringTry", False) + return self + + def setFailAction( self, fn ): + """Define action to perform if parsing fails at this expression. + Fail acton fn is a callable function that takes the arguments + C{fn(s,loc,expr,err)} where: + - s = string being parsed + - loc = location where expression match was attempted and failed + - expr = the parse expression that failed + - err = the exception thrown + The function returns no value. It may throw C{L{ParseFatalException}} + if it is desired to stop parsing immediately.""" + self.failAction = fn + return self + + def _skipIgnorables( self, instring, loc ): + exprsFound = True + while exprsFound: + exprsFound = False + for e in self.ignoreExprs: + try: + while 1: + loc,dummy = e._parse( instring, loc ) + exprsFound = True + except ParseException: + pass + return loc + + def preParse( self, instring, loc ): + if self.ignoreExprs: + loc = self._skipIgnorables( instring, loc ) + + if self.skipWhitespace: + wt = self.whiteChars + instrlen = len(instring) + while loc < instrlen and instring[loc] in wt: + loc += 1 + + return loc + + def parseImpl( self, instring, loc, doActions=True ): + return loc, [] + + def postParse( self, instring, loc, tokenlist ): + return tokenlist + + #~ @profile + def _parseNoCache( self, instring, loc, doActions=True, callPreParse=True ): + debugging = ( self.debug ) #and doActions ) + + if debugging or self.failAction: + #~ print ("Match",self,"at loc",loc,"(%d,%d)" % ( lineno(loc,instring), col(loc,instring) )) + if (self.debugActions[0] ): + self.debugActions[0]( instring, loc, self ) + if callPreParse and self.callPreparse: + preloc = self.preParse( instring, loc ) + else: + preloc = loc + tokensStart = preloc + try: + try: + loc,tokens = self.parseImpl( instring, preloc, doActions ) + except IndexError: + raise ParseException( instring, len(instring), self.errmsg, self ) + except ParseBaseException as err: + #~ print ("Exception raised:", err) + if self.debugActions[2]: + self.debugActions[2]( instring, tokensStart, self, err ) + if self.failAction: + self.failAction( instring, tokensStart, self, err ) + raise + else: + if callPreParse and self.callPreparse: + preloc = self.preParse( instring, loc ) + else: + preloc = loc + tokensStart = preloc + if self.mayIndexError or loc >= len(instring): + try: + loc,tokens = self.parseImpl( instring, preloc, doActions ) + except IndexError: + raise ParseException( instring, len(instring), self.errmsg, self ) + else: + loc,tokens = self.parseImpl( instring, preloc, doActions ) + + tokens = self.postParse( instring, loc, tokens ) + + retTokens = ParseResults( tokens, self.resultsName, asList=self.saveAsList, modal=self.modalResults ) + if self.parseAction and (doActions or self.callDuringTry): + if debugging: + try: + for fn in self.parseAction: + tokens = fn( instring, tokensStart, retTokens ) + if tokens is not None: + retTokens = ParseResults( tokens, + self.resultsName, + asList=self.saveAsList and isinstance(tokens,(ParseResults,list)), + modal=self.modalResults ) + except ParseBaseException as err: + #~ print "Exception raised in user parse action:", err + if (self.debugActions[2] ): + self.debugActions[2]( instring, tokensStart, self, err ) + raise + else: + for fn in self.parseAction: + tokens = fn( instring, tokensStart, retTokens ) + if tokens is not None: + retTokens = ParseResults( tokens, + self.resultsName, + asList=self.saveAsList and isinstance(tokens,(ParseResults,list)), + modal=self.modalResults ) + + if debugging: + #~ print ("Matched",self,"->",retTokens.asList()) + if (self.debugActions[1] ): + self.debugActions[1]( instring, tokensStart, loc, self, retTokens ) + + return loc, retTokens + + def tryParse( self, instring, loc ): + try: + return self._parse( instring, loc, doActions=False )[0] + except ParseFatalException: + raise ParseException( instring, loc, self.errmsg, self) + + def canParseNext(self, instring, loc): + try: + self.tryParse(instring, loc) + except (ParseException, IndexError): + return False + else: + return True + + class _UnboundedCache(object): + def __init__(self): + cache = {} + self.not_in_cache = not_in_cache = object() + + def get(self, key): + return cache.get(key, not_in_cache) + + def set(self, key, value): + cache[key] = value + + def clear(self): + cache.clear() + + self.get = types.MethodType(get, self) + self.set = types.MethodType(set, self) + self.clear = types.MethodType(clear, self) + + if _OrderedDict is not None: + class _FifoCache(object): + def __init__(self, size): + self.not_in_cache = not_in_cache = object() + + cache = _OrderedDict() + + def get(self, key): + return cache.get(key, not_in_cache) + + def set(self, key, value): + cache[key] = value + if len(cache) > size: + cache.popitem(False) + + def clear(self): + cache.clear() + + self.get = types.MethodType(get, self) + self.set = types.MethodType(set, self) + self.clear = types.MethodType(clear, self) + + else: + class _FifoCache(object): + def __init__(self, size): + self.not_in_cache = not_in_cache = object() + + cache = {} + key_fifo = collections.deque([], size) + + def get(self, key): + return cache.get(key, not_in_cache) + + def set(self, key, value): + cache[key] = value + if len(cache) > size: + cache.pop(key_fifo.popleft(), None) + key_fifo.append(key) + + def clear(self): + cache.clear() + key_fifo.clear() + + self.get = types.MethodType(get, self) + self.set = types.MethodType(set, self) + self.clear = types.MethodType(clear, self) + + # argument cache for optimizing repeated calls when backtracking through recursive expressions + packrat_cache = {} # this is set later by enabledPackrat(); this is here so that resetCache() doesn't fail + packrat_cache_lock = RLock() + packrat_cache_stats = [0, 0] + + # this method gets repeatedly called during backtracking with the same arguments - + # we can cache these arguments and save ourselves the trouble of re-parsing the contained expression + def _parseCache( self, instring, loc, doActions=True, callPreParse=True ): + HIT, MISS = 0, 1 + lookup = (self, instring, loc, callPreParse, doActions) + with ParserElement.packrat_cache_lock: + cache = ParserElement.packrat_cache + value = cache.get(lookup) + if value is cache.not_in_cache: + ParserElement.packrat_cache_stats[MISS] += 1 + try: + value = self._parseNoCache(instring, loc, doActions, callPreParse) + except ParseBaseException as pe: + # cache a copy of the exception, without the traceback + cache.set(lookup, pe.__class__(*pe.args)) + raise + else: + cache.set(lookup, (value[0], value[1].copy())) + return value + else: + ParserElement.packrat_cache_stats[HIT] += 1 + if isinstance(value, Exception): + raise value + return (value[0], value[1].copy()) + + _parse = _parseNoCache + + @staticmethod + def resetCache(): + ParserElement.packrat_cache.clear() + ParserElement.packrat_cache_stats[:] = [0] * len(ParserElement.packrat_cache_stats) + + _packratEnabled = False + @staticmethod + def enablePackrat(cache_size_limit=128): + """Enables "packrat" parsing, which adds memoizing to the parsing logic. + Repeated parse attempts at the same string location (which happens + often in many complex grammars) can immediately return a cached value, + instead of re-executing parsing/validating code. Memoizing is done of + both valid results and parsing exceptions. + + Parameters: + - cache_size_limit - (default=C{128}) - if an integer value is provided + will limit the size of the packrat cache; if None is passed, then + the cache size will be unbounded; if 0 is passed, the cache will + be effectively disabled. + + This speedup may break existing programs that use parse actions that + have side-effects. For this reason, packrat parsing is disabled when + you first import pyparsing. To activate the packrat feature, your + program must call the class method C{ParserElement.enablePackrat()}. If + your program uses C{psyco} to "compile as you go", you must call + C{enablePackrat} before calling C{psyco.full()}. If you do not do this, + Python will crash. For best results, call C{enablePackrat()} immediately + after importing pyparsing. + + Example:: + import pyparsing + pyparsing.ParserElement.enablePackrat() + """ + if not ParserElement._packratEnabled: + ParserElement._packratEnabled = True + if cache_size_limit is None: + ParserElement.packrat_cache = ParserElement._UnboundedCache() + else: + ParserElement.packrat_cache = ParserElement._FifoCache(cache_size_limit) + ParserElement._parse = ParserElement._parseCache + + def parseString( self, instring, parseAll=False ): + """ + Execute the parse expression with the given string. + This is the main interface to the client code, once the complete + expression has been built. + + If you want the grammar to require that the entire input string be + successfully parsed, then set C{parseAll} to True (equivalent to ending + the grammar with C{L{StringEnd()}}). + + Note: C{parseString} implicitly calls C{expandtabs()} on the input string, + in order to report proper column numbers in parse actions. + If the input string contains tabs and + the grammar uses parse actions that use the C{loc} argument to index into the + string being parsed, you can ensure you have a consistent view of the input + string by: + - calling C{parseWithTabs} on your grammar before calling C{parseString} + (see L{I{parseWithTabs}<parseWithTabs>}) + - define your parse action using the full C{(s,loc,toks)} signature, and + reference the input string using the parse action's C{s} argument + - explictly expand the tabs in your input string before calling + C{parseString} + + Example:: + Word('a').parseString('aaaaabaaa') # -> ['aaaaa'] + Word('a').parseString('aaaaabaaa', parseAll=True) # -> Exception: Expected end of text + """ + ParserElement.resetCache() + if not self.streamlined: + self.streamline() + #~ self.saveAsList = True + for e in self.ignoreExprs: + e.streamline() + if not self.keepTabs: + instring = instring.expandtabs() + try: + loc, tokens = self._parse( instring, 0 ) + if parseAll: + loc = self.preParse( instring, loc ) + se = Empty() + StringEnd() + se._parse( instring, loc ) + except ParseBaseException as exc: + if ParserElement.verbose_stacktrace: + raise + else: + # catch and re-raise exception from here, clears out pyparsing internal stack trace + raise exc + else: + return tokens + + def scanString( self, instring, maxMatches=_MAX_INT, overlap=False ): + """ + Scan the input string for expression matches. Each match will return the + matching tokens, start location, and end location. May be called with optional + C{maxMatches} argument, to clip scanning after 'n' matches are found. If + C{overlap} is specified, then overlapping matches will be reported. + + Note that the start and end locations are reported relative to the string + being parsed. See L{I{parseString}<parseString>} for more information on parsing + strings with embedded tabs. + + Example:: + source = "sldjf123lsdjjkf345sldkjf879lkjsfd987" + print(source) + for tokens,start,end in Word(alphas).scanString(source): + print(' '*start + '^'*(end-start)) + print(' '*start + tokens[0]) + + prints:: + + sldjf123lsdjjkf345sldkjf879lkjsfd987 + ^^^^^ + sldjf + ^^^^^^^ + lsdjjkf + ^^^^^^ + sldkjf + ^^^^^^ + lkjsfd + """ + if not self.streamlined: + self.streamline() + for e in self.ignoreExprs: + e.streamline() + + if not self.keepTabs: + instring = _ustr(instring).expandtabs() + instrlen = len(instring) + loc = 0 + preparseFn = self.preParse + parseFn = self._parse + ParserElement.resetCache() + matches = 0 + try: + while loc <= instrlen and matches < maxMatches: + try: + preloc = preparseFn( instring, loc ) + nextLoc,tokens = parseFn( instring, preloc, callPreParse=False ) + except ParseException: + loc = preloc+1 + else: + if nextLoc > loc: + matches += 1 + yield tokens, preloc, nextLoc + if overlap: + nextloc = preparseFn( instring, loc ) + if nextloc > loc: + loc = nextLoc + else: + loc += 1 + else: + loc = nextLoc + else: + loc = preloc+1 + except ParseBaseException as exc: + if ParserElement.verbose_stacktrace: + raise + else: + # catch and re-raise exception from here, clears out pyparsing internal stack trace + raise exc + + def transformString( self, instring ): + """ + Extension to C{L{scanString}}, to modify matching text with modified tokens that may + be returned from a parse action. To use C{transformString}, define a grammar and + attach a parse action to it that modifies the returned token list. + Invoking C{transformString()} on a target string will then scan for matches, + and replace the matched text patterns according to the logic in the parse + action. C{transformString()} returns the resulting transformed string. + + Example:: + wd = Word(alphas) + wd.setParseAction(lambda toks: toks[0].title()) + + print(wd.transformString("now is the winter of our discontent made glorious summer by this sun of york.")) + Prints:: + Now Is The Winter Of Our Discontent Made Glorious Summer By This Sun Of York. + """ + out = [] + lastE = 0 + # force preservation of <TAB>s, to minimize unwanted transformation of string, and to + # keep string locs straight between transformString and scanString + self.keepTabs = True + try: + for t,s,e in self.scanString( instring ): + out.append( instring[lastE:s] ) + if t: + if isinstance(t,ParseResults): + out += t.asList() + elif isinstance(t,list): + out += t + else: + out.append(t) + lastE = e + out.append(instring[lastE:]) + out = [o for o in out if o] + return "".join(map(_ustr,_flatten(out))) + except ParseBaseException as exc: + if ParserElement.verbose_stacktrace: + raise + else: + # catch and re-raise exception from here, clears out pyparsing internal stack trace + raise exc + + def searchString( self, instring, maxMatches=_MAX_INT ): + """ + Another extension to C{L{scanString}}, simplifying the access to the tokens found + to match the given parse expression. May be called with optional + C{maxMatches} argument, to clip searching after 'n' matches are found. + + Example:: + # a capitalized word starts with an uppercase letter, followed by zero or more lowercase letters + cap_word = Word(alphas.upper(), alphas.lower()) + + print(cap_word.searchString("More than Iron, more than Lead, more than Gold I need Electricity")) + prints:: + ['More', 'Iron', 'Lead', 'Gold', 'I'] + """ + try: + return ParseResults([ t for t,s,e in self.scanString( instring, maxMatches ) ]) + except ParseBaseException as exc: + if ParserElement.verbose_stacktrace: + raise + else: + # catch and re-raise exception from here, clears out pyparsing internal stack trace + raise exc + + def split(self, instring, maxsplit=_MAX_INT, includeSeparators=False): + """ + Generator method to split a string using the given expression as a separator. + May be called with optional C{maxsplit} argument, to limit the number of splits; + and the optional C{includeSeparators} argument (default=C{False}), if the separating + matching text should be included in the split results. + + Example:: + punc = oneOf(list(".,;:/-!?")) + print(list(punc.split("This, this?, this sentence, is badly punctuated!"))) + prints:: + ['This', ' this', '', ' this sentence', ' is badly punctuated', ''] + """ + splits = 0 + last = 0 + for t,s,e in self.scanString(instring, maxMatches=maxsplit): + yield instring[last:s] + if includeSeparators: + yield t[0] + last = e + yield instring[last:] + + def __add__(self, other ): + """ + Implementation of + operator - returns C{L{And}}. Adding strings to a ParserElement + converts them to L{Literal}s by default. + + Example:: + greet = Word(alphas) + "," + Word(alphas) + "!" + hello = "Hello, World!" + print (hello, "->", greet.parseString(hello)) + Prints:: + Hello, World! -> ['Hello', ',', 'World', '!'] + """ + if isinstance( other, basestring ): + other = ParserElement._literalStringClass( other ) + if not isinstance( other, ParserElement ): + warnings.warn("Cannot combine element of type %s with ParserElement" % type(other), + SyntaxWarning, stacklevel=2) + return None + return And( [ self, other ] ) + + def __radd__(self, other ): + """ + Implementation of + operator when left operand is not a C{L{ParserElement}} + """ + if isinstance( other, basestring ): + other = ParserElement._literalStringClass( other ) + if not isinstance( other, ParserElement ): + warnings.warn("Cannot combine element of type %s with ParserElement" % type(other), + SyntaxWarning, stacklevel=2) + return None + return other + self + + def __sub__(self, other): + """ + Implementation of - operator, returns C{L{And}} with error stop + """ + if isinstance( other, basestring ): + other = ParserElement._literalStringClass( other ) + if not isinstance( other, ParserElement ): + warnings.warn("Cannot combine element of type %s with ParserElement" % type(other), + SyntaxWarning, stacklevel=2) + return None + return And( [ self, And._ErrorStop(), other ] ) + + def __rsub__(self, other ): + """ + Implementation of - operator when left operand is not a C{L{ParserElement}} + """ + if isinstance( other, basestring ): + other = ParserElement._literalStringClass( other ) + if not isinstance( other, ParserElement ): + warnings.warn("Cannot combine element of type %s with ParserElement" % type(other), + SyntaxWarning, stacklevel=2) + return None + return other - self + + def __mul__(self,other): + """ + Implementation of * operator, allows use of C{expr * 3} in place of + C{expr + expr + expr}. Expressions may also me multiplied by a 2-integer + tuple, similar to C{{min,max}} multipliers in regular expressions. Tuples + may also include C{None} as in: + - C{expr*(n,None)} or C{expr*(n,)} is equivalent + to C{expr*n + L{ZeroOrMore}(expr)} + (read as "at least n instances of C{expr}") + - C{expr*(None,n)} is equivalent to C{expr*(0,n)} + (read as "0 to n instances of C{expr}") + - C{expr*(None,None)} is equivalent to C{L{ZeroOrMore}(expr)} + - C{expr*(1,None)} is equivalent to C{L{OneOrMore}(expr)} + + Note that C{expr*(None,n)} does not raise an exception if + more than n exprs exist in the input stream; that is, + C{expr*(None,n)} does not enforce a maximum number of expr + occurrences. If this behavior is desired, then write + C{expr*(None,n) + ~expr} + """ + if isinstance(other,int): + minElements, optElements = other,0 + elif isinstance(other,tuple): + other = (other + (None, None))[:2] + if other[0] is None: + other = (0, other[1]) + if isinstance(other[0],int) and other[1] is None: + if other[0] == 0: + return ZeroOrMore(self) + if other[0] == 1: + return OneOrMore(self) + else: + return self*other[0] + ZeroOrMore(self) + elif isinstance(other[0],int) and isinstance(other[1],int): + minElements, optElements = other + optElements -= minElements + else: + raise TypeError("cannot multiply 'ParserElement' and ('%s','%s') objects", type(other[0]),type(other[1])) + else: + raise TypeError("cannot multiply 'ParserElement' and '%s' objects", type(other)) + + if minElements < 0: + raise ValueError("cannot multiply ParserElement by negative value") + if optElements < 0: + raise ValueError("second tuple value must be greater or equal to first tuple value") + if minElements == optElements == 0: + raise ValueError("cannot multiply ParserElement by 0 or (0,0)") + + if (optElements): + def makeOptionalList(n): + if n>1: + return Optional(self + makeOptionalList(n-1)) + else: + return Optional(self) + if minElements: + if minElements == 1: + ret = self + makeOptionalList(optElements) + else: + ret = And([self]*minElements) + makeOptionalList(optElements) + else: + ret = makeOptionalList(optElements) + else: + if minElements == 1: + ret = self + else: + ret = And([self]*minElements) + return ret + + def __rmul__(self, other): + return self.__mul__(other) + + def __or__(self, other ): + """ + Implementation of | operator - returns C{L{MatchFirst}} + """ + if isinstance( other, basestring ): + other = ParserElement._literalStringClass( other ) + if not isinstance( other, ParserElement ): + warnings.warn("Cannot combine element of type %s with ParserElement" % type(other), + SyntaxWarning, stacklevel=2) + return None + return MatchFirst( [ self, other ] ) + + def __ror__(self, other ): + """ + Implementation of | operator when left operand is not a C{L{ParserElement}} + """ + if isinstance( other, basestring ): + other = ParserElement._literalStringClass( other ) + if not isinstance( other, ParserElement ): + warnings.warn("Cannot combine element of type %s with ParserElement" % type(other), + SyntaxWarning, stacklevel=2) + return None + return other | self + + def __xor__(self, other ): + """ + Implementation of ^ operator - returns C{L{Or}} + """ + if isinstance( other, basestring ): + other = ParserElement._literalStringClass( other ) + if not isinstance( other, ParserElement ): + warnings.warn("Cannot combine element of type %s with ParserElement" % type(other), + SyntaxWarning, stacklevel=2) + return None + return Or( [ self, other ] ) + + def __rxor__(self, other ): + """ + Implementation of ^ operator when left operand is not a C{L{ParserElement}} + """ + if isinstance( other, basestring ): + other = ParserElement._literalStringClass( other ) + if not isinstance( other, ParserElement ): + warnings.warn("Cannot combine element of type %s with ParserElement" % type(other), + SyntaxWarning, stacklevel=2) + return None + return other ^ self + + def __and__(self, other ): + """ + Implementation of & operator - returns C{L{Each}} + """ + if isinstance( other, basestring ): + other = ParserElement._literalStringClass( other ) + if not isinstance( other, ParserElement ): + warnings.warn("Cannot combine element of type %s with ParserElement" % type(other), + SyntaxWarning, stacklevel=2) + return None + return Each( [ self, other ] ) + + def __rand__(self, other ): + """ + Implementation of & operator when left operand is not a C{L{ParserElement}} + """ + if isinstance( other, basestring ): + other = ParserElement._literalStringClass( other ) + if not isinstance( other, ParserElement ): + warnings.warn("Cannot combine element of type %s with ParserElement" % type(other), + SyntaxWarning, stacklevel=2) + return None + return other & self + + def __invert__( self ): + """ + Implementation of ~ operator - returns C{L{NotAny}} + """ + return NotAny( self ) + + def __call__(self, name=None): + """ + Shortcut for C{L{setResultsName}}, with C{listAllMatches=False}. + + If C{name} is given with a trailing C{'*'} character, then C{listAllMatches} will be + passed as C{True}. + + If C{name} is omitted, same as calling C{L{copy}}. + + Example:: + # these are equivalent + userdata = Word(alphas).setResultsName("name") + Word(nums+"-").setResultsName("socsecno") + userdata = Word(alphas)("name") + Word(nums+"-")("socsecno") + """ + if name is not None: + return self.setResultsName(name) + else: + return self.copy() + + def suppress( self ): + """ + Suppresses the output of this C{ParserElement}; useful to keep punctuation from + cluttering up returned output. + """ + return Suppress( self ) + + def leaveWhitespace( self ): + """ + Disables the skipping of whitespace before matching the characters in the + C{ParserElement}'s defined pattern. This is normally only used internally by + the pyparsing module, but may be needed in some whitespace-sensitive grammars. + """ + self.skipWhitespace = False + return self + + def setWhitespaceChars( self, chars ): + """ + Overrides the default whitespace chars + """ + self.skipWhitespace = True + self.whiteChars = chars + self.copyDefaultWhiteChars = False + return self + + def parseWithTabs( self ): + """ + Overrides default behavior to expand C{<TAB>}s to spaces before parsing the input string. + Must be called before C{parseString} when the input grammar contains elements that + match C{<TAB>} characters. + """ + self.keepTabs = True + return self + + def ignore( self, other ): + """ + Define expression to be ignored (e.g., comments) while doing pattern + matching; may be called repeatedly, to define multiple comment or other + ignorable patterns. + + Example:: + patt = OneOrMore(Word(alphas)) + patt.parseString('ablaj /* comment */ lskjd') # -> ['ablaj'] + + patt.ignore(cStyleComment) + patt.parseString('ablaj /* comment */ lskjd') # -> ['ablaj', 'lskjd'] + """ + if isinstance(other, basestring): + other = Suppress(other) + + if isinstance( other, Suppress ): + if other not in self.ignoreExprs: + self.ignoreExprs.append(other) + else: + self.ignoreExprs.append( Suppress( other.copy() ) ) + return self + + def setDebugActions( self, startAction, successAction, exceptionAction ): + """ + Enable display of debugging messages while doing pattern matching. + """ + self.debugActions = (startAction or _defaultStartDebugAction, + successAction or _defaultSuccessDebugAction, + exceptionAction or _defaultExceptionDebugAction) + self.debug = True + return self + + def setDebug( self, flag=True ): + """ + Enable display of debugging messages while doing pattern matching. + Set C{flag} to True to enable, False to disable. + + Example:: + wd = Word(alphas).setName("alphaword") + integer = Word(nums).setName("numword") + term = wd | integer + + # turn on debugging for wd + wd.setDebug() + + OneOrMore(term).parseString("abc 123 xyz 890") + + prints:: + Match alphaword at loc 0(1,1) + Matched alphaword -> ['abc'] + Match alphaword at loc 3(1,4) + Exception raised:Expected alphaword (at char 4), (line:1, col:5) + Match alphaword at loc 7(1,8) + Matched alphaword -> ['xyz'] + Match alphaword at loc 11(1,12) + Exception raised:Expected alphaword (at char 12), (line:1, col:13) + Match alphaword at loc 15(1,16) + Exception raised:Expected alphaword (at char 15), (line:1, col:16) + + The output shown is that produced by the default debug actions - custom debug actions can be + specified using L{setDebugActions}. Prior to attempting + to match the C{wd} expression, the debugging message C{"Match <exprname> at loc <n>(<line>,<col>)"} + is shown. Then if the parse succeeds, a C{"Matched"} message is shown, or an C{"Exception raised"} + message is shown. Also note the use of L{setName} to assign a human-readable name to the expression, + which makes debugging and exception messages easier to understand - for instance, the default + name created for the C{Word} expression without calling C{setName} is C{"W:(ABCD...)"}. + """ + if flag: + self.setDebugActions( _defaultStartDebugAction, _defaultSuccessDebugAction, _defaultExceptionDebugAction ) + else: + self.debug = False + return self + + def __str__( self ): + return self.name + + def __repr__( self ): + return _ustr(self) + + def streamline( self ): + self.streamlined = True + self.strRepr = None + return self + + def checkRecursion( self, parseElementList ): + pass + + def validate( self, validateTrace=[] ): + """ + Check defined expressions for valid structure, check for infinite recursive definitions. + """ + self.checkRecursion( [] ) + + def parseFile( self, file_or_filename, parseAll=False ): + """ + Execute the parse expression on the given file or filename. + If a filename is specified (instead of a file object), + the entire file is opened, read, and closed before parsing. + """ + try: + file_contents = file_or_filename.read() + except AttributeError: + with open(file_or_filename, "r") as f: + file_contents = f.read() + try: + return self.parseString(file_contents, parseAll) + except ParseBaseException as exc: + if ParserElement.verbose_stacktrace: + raise + else: + # catch and re-raise exception from here, clears out pyparsing internal stack trace + raise exc + + def __eq__(self,other): + if isinstance(other, ParserElement): + return self is other or vars(self) == vars(other) + elif isinstance(other, basestring): + return self.matches(other) + else: + return super(ParserElement,self)==other + + def __ne__(self,other): + return not (self == other) + + def __hash__(self): + return hash(id(self)) + + def __req__(self,other): + return self == other + + def __rne__(self,other): + return not (self == other) + + def matches(self, testString, parseAll=True): + """ + Method for quick testing of a parser against a test string. Good for simple + inline microtests of sub expressions while building up larger parser. + + Parameters: + - testString - to test against this expression for a match + - parseAll - (default=C{True}) - flag to pass to C{L{parseString}} when running tests + + Example:: + expr = Word(nums) + assert expr.matches("100") + """ + try: + self.parseString(_ustr(testString), parseAll=parseAll) + return True + except ParseBaseException: + return False + + def runTests(self, tests, parseAll=True, comment='#', fullDump=True, printResults=True, failureTests=False): + """ + Execute the parse expression on a series of test strings, showing each + test, the parsed results or where the parse failed. Quick and easy way to + run a parse expression against a list of sample strings. + + Parameters: + - tests - a list of separate test strings, or a multiline string of test strings + - parseAll - (default=C{True}) - flag to pass to C{L{parseString}} when running tests + - comment - (default=C{'#'}) - expression for indicating embedded comments in the test + string; pass None to disable comment filtering + - fullDump - (default=C{True}) - dump results as list followed by results names in nested outline; + if False, only dump nested list + - printResults - (default=C{True}) prints test output to stdout + - failureTests - (default=C{False}) indicates if these tests are expected to fail parsing + + Returns: a (success, results) tuple, where success indicates that all tests succeeded + (or failed if C{failureTests} is True), and the results contain a list of lines of each + test's output + + Example:: + number_expr = pyparsing_common.number.copy() + + result = number_expr.runTests(''' + # unsigned integer + 100 + # negative integer + -100 + # float with scientific notation + 6.02e23 + # integer with scientific notation + 1e-12 + ''') + print("Success" if result[0] else "Failed!") + + result = number_expr.runTests(''' + # stray character + 100Z + # missing leading digit before '.' + -.100 + # too many '.' + 3.14.159 + ''', failureTests=True) + print("Success" if result[0] else "Failed!") + prints:: + # unsigned integer + 100 + [100] + + # negative integer + -100 + [-100] + + # float with scientific notation + 6.02e23 + [6.02e+23] + + # integer with scientific notation + 1e-12 + [1e-12] + + Success + + # stray character + 100Z + ^ + FAIL: Expected end of text (at char 3), (line:1, col:4) + + # missing leading digit before '.' + -.100 + ^ + FAIL: Expected {real number with scientific notation | real number | signed integer} (at char 0), (line:1, col:1) + + # too many '.' + 3.14.159 + ^ + FAIL: Expected end of text (at char 4), (line:1, col:5) + + Success + + Each test string must be on a single line. If you want to test a string that spans multiple + lines, create a test like this:: + + expr.runTest(r"this is a test\\n of strings that spans \\n 3 lines") + + (Note that this is a raw string literal, you must include the leading 'r'.) + """ + if isinstance(tests, basestring): + tests = list(map(str.strip, tests.rstrip().splitlines())) + if isinstance(comment, basestring): + comment = Literal(comment) + allResults = [] + comments = [] + success = True + for t in tests: + if comment is not None and comment.matches(t, False) or comments and not t: + comments.append(t) + continue + if not t: + continue + out = ['\n'.join(comments), t] + comments = [] + try: + t = t.replace(r'\n','\n') + result = self.parseString(t, parseAll=parseAll) + out.append(result.dump(full=fullDump)) + success = success and not failureTests + except ParseBaseException as pe: + fatal = "(FATAL)" if isinstance(pe, ParseFatalException) else "" + if '\n' in t: + out.append(line(pe.loc, t)) + out.append(' '*(col(pe.loc,t)-1) + '^' + fatal) + else: + out.append(' '*pe.loc + '^' + fatal) + out.append("FAIL: " + str(pe)) + success = success and failureTests + result = pe + except Exception as exc: + out.append("FAIL-EXCEPTION: " + str(exc)) + success = success and failureTests + result = exc + + if printResults: + if fullDump: + out.append('') + print('\n'.join(out)) + + allResults.append((t, result)) + + return success, allResults + + +class Token(ParserElement): + """ + Abstract C{ParserElement} subclass, for defining atomic matching patterns. + """ + def __init__( self ): + super(Token,self).__init__( savelist=False ) + + +class Empty(Token): + """ + An empty token, will always match. + """ + def __init__( self ): + super(Empty,self).__init__() + self.name = "Empty" + self.mayReturnEmpty = True + self.mayIndexError = False + + +class NoMatch(Token): + """ + A token that will never match. + """ + def __init__( self ): + super(NoMatch,self).__init__() + self.name = "NoMatch" + self.mayReturnEmpty = True + self.mayIndexError = False + self.errmsg = "Unmatchable token" + + def parseImpl( self, instring, loc, doActions=True ): + raise ParseException(instring, loc, self.errmsg, self) + + +class Literal(Token): + """ + Token to exactly match a specified string. + + Example:: + Literal('blah').parseString('blah') # -> ['blah'] + Literal('blah').parseString('blahfooblah') # -> ['blah'] + Literal('blah').parseString('bla') # -> Exception: Expected "blah" + + For case-insensitive matching, use L{CaselessLiteral}. + + For keyword matching (force word break before and after the matched string), + use L{Keyword} or L{CaselessKeyword}. + """ + def __init__( self, matchString ): + super(Literal,self).__init__() + self.match = matchString + self.matchLen = len(matchString) + try: + self.firstMatchChar = matchString[0] + except IndexError: + warnings.warn("null string passed to Literal; use Empty() instead", + SyntaxWarning, stacklevel=2) + self.__class__ = Empty + self.name = '"%s"' % _ustr(self.match) + self.errmsg = "Expected " + self.name + self.mayReturnEmpty = False + self.mayIndexError = False + + # Performance tuning: this routine gets called a *lot* + # if this is a single character match string and the first character matches, + # short-circuit as quickly as possible, and avoid calling startswith + #~ @profile + def parseImpl( self, instring, loc, doActions=True ): + if (instring[loc] == self.firstMatchChar and + (self.matchLen==1 or instring.startswith(self.match,loc)) ): + return loc+self.matchLen, self.match + raise ParseException(instring, loc, self.errmsg, self) +_L = Literal +ParserElement._literalStringClass = Literal + +class Keyword(Token): + """ + Token to exactly match a specified string as a keyword, that is, it must be + immediately followed by a non-keyword character. Compare with C{L{Literal}}: + - C{Literal("if")} will match the leading C{'if'} in C{'ifAndOnlyIf'}. + - C{Keyword("if")} will not; it will only match the leading C{'if'} in C{'if x=1'}, or C{'if(y==2)'} + Accepts two optional constructor arguments in addition to the keyword string: + - C{identChars} is a string of characters that would be valid identifier characters, + defaulting to all alphanumerics + "_" and "$" + - C{caseless} allows case-insensitive matching, default is C{False}. + + Example:: + Keyword("start").parseString("start") # -> ['start'] + Keyword("start").parseString("starting") # -> Exception + + For case-insensitive matching, use L{CaselessKeyword}. + """ + DEFAULT_KEYWORD_CHARS = alphanums+"_$" + + def __init__( self, matchString, identChars=None, caseless=False ): + super(Keyword,self).__init__() + if identChars is None: + identChars = Keyword.DEFAULT_KEYWORD_CHARS + self.match = matchString + self.matchLen = len(matchString) + try: + self.firstMatchChar = matchString[0] + except IndexError: + warnings.warn("null string passed to Keyword; use Empty() instead", + SyntaxWarning, stacklevel=2) + self.name = '"%s"' % self.match + self.errmsg = "Expected " + self.name + self.mayReturnEmpty = False + self.mayIndexError = False + self.caseless = caseless + if caseless: + self.caselessmatch = matchString.upper() + identChars = identChars.upper() + self.identChars = set(identChars) + + def parseImpl( self, instring, loc, doActions=True ): + if self.caseless: + if ( (instring[ loc:loc+self.matchLen ].upper() == self.caselessmatch) and + (loc >= len(instring)-self.matchLen or instring[loc+self.matchLen].upper() not in self.identChars) and + (loc == 0 or instring[loc-1].upper() not in self.identChars) ): + return loc+self.matchLen, self.match + else: + if (instring[loc] == self.firstMatchChar and + (self.matchLen==1 or instring.startswith(self.match,loc)) and + (loc >= len(instring)-self.matchLen or instring[loc+self.matchLen] not in self.identChars) and + (loc == 0 or instring[loc-1] not in self.identChars) ): + return loc+self.matchLen, self.match + raise ParseException(instring, loc, self.errmsg, self) + + def copy(self): + c = super(Keyword,self).copy() + c.identChars = Keyword.DEFAULT_KEYWORD_CHARS + return c + + @staticmethod + def setDefaultKeywordChars( chars ): + """Overrides the default Keyword chars + """ + Keyword.DEFAULT_KEYWORD_CHARS = chars + +class CaselessLiteral(Literal): + """ + Token to match a specified string, ignoring case of letters. + Note: the matched results will always be in the case of the given + match string, NOT the case of the input text. + + Example:: + OneOrMore(CaselessLiteral("CMD")).parseString("cmd CMD Cmd10") # -> ['CMD', 'CMD', 'CMD'] + + (Contrast with example for L{CaselessKeyword}.) + """ + def __init__( self, matchString ): + super(CaselessLiteral,self).__init__( matchString.upper() ) + # Preserve the defining literal. + self.returnString = matchString + self.name = "'%s'" % self.returnString + self.errmsg = "Expected " + self.name + + def parseImpl( self, instring, loc, doActions=True ): + if instring[ loc:loc+self.matchLen ].upper() == self.match: + return loc+self.matchLen, self.returnString + raise ParseException(instring, loc, self.errmsg, self) + +class CaselessKeyword(Keyword): + """ + Caseless version of L{Keyword}. + + Example:: + OneOrMore(CaselessKeyword("CMD")).parseString("cmd CMD Cmd10") # -> ['CMD', 'CMD'] + + (Contrast with example for L{CaselessLiteral}.) + """ + def __init__( self, matchString, identChars=None ): + super(CaselessKeyword,self).__init__( matchString, identChars, caseless=True ) + + def parseImpl( self, instring, loc, doActions=True ): + if ( (instring[ loc:loc+self.matchLen ].upper() == self.caselessmatch) and + (loc >= len(instring)-self.matchLen or instring[loc+self.matchLen].upper() not in self.identChars) ): + return loc+self.matchLen, self.match + raise ParseException(instring, loc, self.errmsg, self) + +class CloseMatch(Token): + """ + A variation on L{Literal} which matches "close" matches, that is, + strings with at most 'n' mismatching characters. C{CloseMatch} takes parameters: + - C{match_string} - string to be matched + - C{maxMismatches} - (C{default=1}) maximum number of mismatches allowed to count as a match + + The results from a successful parse will contain the matched text from the input string and the following named results: + - C{mismatches} - a list of the positions within the match_string where mismatches were found + - C{original} - the original match_string used to compare against the input string + + If C{mismatches} is an empty list, then the match was an exact match. + + Example:: + patt = CloseMatch("ATCATCGAATGGA") + patt.parseString("ATCATCGAAXGGA") # -> (['ATCATCGAAXGGA'], {'mismatches': [[9]], 'original': ['ATCATCGAATGGA']}) + patt.parseString("ATCAXCGAAXGGA") # -> Exception: Expected 'ATCATCGAATGGA' (with up to 1 mismatches) (at char 0), (line:1, col:1) + + # exact match + patt.parseString("ATCATCGAATGGA") # -> (['ATCATCGAATGGA'], {'mismatches': [[]], 'original': ['ATCATCGAATGGA']}) + + # close match allowing up to 2 mismatches + patt = CloseMatch("ATCATCGAATGGA", maxMismatches=2) + patt.parseString("ATCAXCGAAXGGA") # -> (['ATCAXCGAAXGGA'], {'mismatches': [[4, 9]], 'original': ['ATCATCGAATGGA']}) + """ + def __init__(self, match_string, maxMismatches=1): + super(CloseMatch,self).__init__() + self.name = match_string + self.match_string = match_string + self.maxMismatches = maxMismatches + self.errmsg = "Expected %r (with up to %d mismatches)" % (self.match_string, self.maxMismatches) + self.mayIndexError = False + self.mayReturnEmpty = False + + def parseImpl( self, instring, loc, doActions=True ): + start = loc + instrlen = len(instring) + maxloc = start + len(self.match_string) + + if maxloc <= instrlen: + match_string = self.match_string + match_stringloc = 0 + mismatches = [] + maxMismatches = self.maxMismatches + + for match_stringloc,s_m in enumerate(zip(instring[loc:maxloc], self.match_string)): + src,mat = s_m + if src != mat: + mismatches.append(match_stringloc) + if len(mismatches) > maxMismatches: + break + else: + loc = match_stringloc + 1 + results = ParseResults([instring[start:loc]]) + results['original'] = self.match_string + results['mismatches'] = mismatches + return loc, results + + raise ParseException(instring, loc, self.errmsg, self) + + +class Word(Token): + """ + Token for matching words composed of allowed character sets. + Defined with string containing all allowed initial characters, + an optional string containing allowed body characters (if omitted, + defaults to the initial character set), and an optional minimum, + maximum, and/or exact length. The default value for C{min} is 1 (a + minimum value < 1 is not valid); the default values for C{max} and C{exact} + are 0, meaning no maximum or exact length restriction. An optional + C{excludeChars} parameter can list characters that might be found in + the input C{bodyChars} string; useful to define a word of all printables + except for one or two characters, for instance. + + L{srange} is useful for defining custom character set strings for defining + C{Word} expressions, using range notation from regular expression character sets. + + A common mistake is to use C{Word} to match a specific literal string, as in + C{Word("Address")}. Remember that C{Word} uses the string argument to define + I{sets} of matchable characters. This expression would match "Add", "AAA", + "dAred", or any other word made up of the characters 'A', 'd', 'r', 'e', and 's'. + To match an exact literal string, use L{Literal} or L{Keyword}. + + pyparsing includes helper strings for building Words: + - L{alphas} + - L{nums} + - L{alphanums} + - L{hexnums} + - L{alphas8bit} (alphabetic characters in ASCII range 128-255 - accented, tilded, umlauted, etc.) + - L{punc8bit} (non-alphabetic characters in ASCII range 128-255 - currency, symbols, superscripts, diacriticals, etc.) + - L{printables} (any non-whitespace character) + + Example:: + # a word composed of digits + integer = Word(nums) # equivalent to Word("0123456789") or Word(srange("0-9")) + + # a word with a leading capital, and zero or more lowercase + capital_word = Word(alphas.upper(), alphas.lower()) + + # hostnames are alphanumeric, with leading alpha, and '-' + hostname = Word(alphas, alphanums+'-') + + # roman numeral (not a strict parser, accepts invalid mix of characters) + roman = Word("IVXLCDM") + + # any string of non-whitespace characters, except for ',' + csv_value = Word(printables, excludeChars=",") + """ + def __init__( self, initChars, bodyChars=None, min=1, max=0, exact=0, asKeyword=False, excludeChars=None ): + super(Word,self).__init__() + if excludeChars: + initChars = ''.join(c for c in initChars if c not in excludeChars) + if bodyChars: + bodyChars = ''.join(c for c in bodyChars if c not in excludeChars) + self.initCharsOrig = initChars + self.initChars = set(initChars) + if bodyChars : + self.bodyCharsOrig = bodyChars + self.bodyChars = set(bodyChars) + else: + self.bodyCharsOrig = initChars + self.bodyChars = set(initChars) + + self.maxSpecified = max > 0 + + if min < 1: + raise ValueError("cannot specify a minimum length < 1; use Optional(Word()) if zero-length word is permitted") + + self.minLen = min + + if max > 0: + self.maxLen = max + else: + self.maxLen = _MAX_INT + + if exact > 0: + self.maxLen = exact + self.minLen = exact + + self.name = _ustr(self) + self.errmsg = "Expected " + self.name + self.mayIndexError = False + self.asKeyword = asKeyword + + if ' ' not in self.initCharsOrig+self.bodyCharsOrig and (min==1 and max==0 and exact==0): + if self.bodyCharsOrig == self.initCharsOrig: + self.reString = "[%s]+" % _escapeRegexRangeChars(self.initCharsOrig) + elif len(self.initCharsOrig) == 1: + self.reString = "%s[%s]*" % \ + (re.escape(self.initCharsOrig), + _escapeRegexRangeChars(self.bodyCharsOrig),) + else: + self.reString = "[%s][%s]*" % \ + (_escapeRegexRangeChars(self.initCharsOrig), + _escapeRegexRangeChars(self.bodyCharsOrig),) + if self.asKeyword: + self.reString = r"\b"+self.reString+r"\b" + try: + self.re = re.compile( self.reString ) + except Exception: + self.re = None + + def parseImpl( self, instring, loc, doActions=True ): + if self.re: + result = self.re.match(instring,loc) + if not result: + raise ParseException(instring, loc, self.errmsg, self) + + loc = result.end() + return loc, result.group() + + if not(instring[ loc ] in self.initChars): + raise ParseException(instring, loc, self.errmsg, self) + + start = loc + loc += 1 + instrlen = len(instring) + bodychars = self.bodyChars + maxloc = start + self.maxLen + maxloc = min( maxloc, instrlen ) + while loc < maxloc and instring[loc] in bodychars: + loc += 1 + + throwException = False + if loc - start < self.minLen: + throwException = True + if self.maxSpecified and loc < instrlen and instring[loc] in bodychars: + throwException = True + if self.asKeyword: + if (start>0 and instring[start-1] in bodychars) or (loc<instrlen and instring[loc] in bodychars): + throwException = True + + if throwException: + raise ParseException(instring, loc, self.errmsg, self) + + return loc, instring[start:loc] + + def __str__( self ): + try: + return super(Word,self).__str__() + except Exception: + pass + + + if self.strRepr is None: + + def charsAsStr(s): + if len(s)>4: + return s[:4]+"..." + else: + return s + + if ( self.initCharsOrig != self.bodyCharsOrig ): + self.strRepr = "W:(%s,%s)" % ( charsAsStr(self.initCharsOrig), charsAsStr(self.bodyCharsOrig) ) + else: + self.strRepr = "W:(%s)" % charsAsStr(self.initCharsOrig) + + return self.strRepr + + +class Regex(Token): + r""" + Token for matching strings that match a given regular expression. + Defined with string specifying the regular expression in a form recognized by the inbuilt Python re module. + If the given regex contains named groups (defined using C{(?P<name>...)}), these will be preserved as + named parse results. + + Example:: + realnum = Regex(r"[+-]?\d+\.\d*") + date = Regex(r'(?P<year>\d{4})-(?P<month>\d\d?)-(?P<day>\d\d?)') + # ref: http://stackoverflow.com/questions/267399/how-do-you-match-only-valid-roman-numerals-with-a-regular-expression + roman = Regex(r"M{0,4}(CM|CD|D?C{0,3})(XC|XL|L?X{0,3})(IX|IV|V?I{0,3})") + """ + compiledREtype = type(re.compile("[A-Z]")) + def __init__( self, pattern, flags=0): + """The parameters C{pattern} and C{flags} are passed to the C{re.compile()} function as-is. See the Python C{re} module for an explanation of the acceptable patterns and flags.""" + super(Regex,self).__init__() + + if isinstance(pattern, basestring): + if not pattern: + warnings.warn("null string passed to Regex; use Empty() instead", + SyntaxWarning, stacklevel=2) + + self.pattern = pattern + self.flags = flags + + try: + self.re = re.compile(self.pattern, self.flags) + self.reString = self.pattern + except sre_constants.error: + warnings.warn("invalid pattern (%s) passed to Regex" % pattern, + SyntaxWarning, stacklevel=2) + raise + + elif isinstance(pattern, Regex.compiledREtype): + self.re = pattern + self.pattern = \ + self.reString = str(pattern) + self.flags = flags + + else: + raise ValueError("Regex may only be constructed with a string or a compiled RE object") + + self.name = _ustr(self) + self.errmsg = "Expected " + self.name + self.mayIndexError = False + self.mayReturnEmpty = True + + def parseImpl( self, instring, loc, doActions=True ): + result = self.re.match(instring,loc) + if not result: + raise ParseException(instring, loc, self.errmsg, self) + + loc = result.end() + d = result.groupdict() + ret = ParseResults(result.group()) + if d: + for k in d: + ret[k] = d[k] + return loc,ret + + def __str__( self ): + try: + return super(Regex,self).__str__() + except Exception: + pass + + if self.strRepr is None: + self.strRepr = "Re:(%s)" % repr(self.pattern) + + return self.strRepr + + +class QuotedString(Token): + r""" + Token for matching strings that are delimited by quoting characters. + + Defined with the following parameters: + - quoteChar - string of one or more characters defining the quote delimiting string + - escChar - character to escape quotes, typically backslash (default=C{None}) + - escQuote - special quote sequence to escape an embedded quote string (such as SQL's "" to escape an embedded ") (default=C{None}) + - multiline - boolean indicating whether quotes can span multiple lines (default=C{False}) + - unquoteResults - boolean indicating whether the matched text should be unquoted (default=C{True}) + - endQuoteChar - string of one or more characters defining the end of the quote delimited string (default=C{None} => same as quoteChar) + - convertWhitespaceEscapes - convert escaped whitespace (C{'\t'}, C{'\n'}, etc.) to actual whitespace (default=C{True}) + + Example:: + qs = QuotedString('"') + print(qs.searchString('lsjdf "This is the quote" sldjf')) + complex_qs = QuotedString('{{', endQuoteChar='}}') + print(complex_qs.searchString('lsjdf {{This is the "quote"}} sldjf')) + sql_qs = QuotedString('"', escQuote='""') + print(sql_qs.searchString('lsjdf "This is the quote with ""embedded"" quotes" sldjf')) + prints:: + [['This is the quote']] + [['This is the "quote"']] + [['This is the quote with "embedded" quotes']] + """ + def __init__( self, quoteChar, escChar=None, escQuote=None, multiline=False, unquoteResults=True, endQuoteChar=None, convertWhitespaceEscapes=True): + super(QuotedString,self).__init__() + + # remove white space from quote chars - wont work anyway + quoteChar = quoteChar.strip() + if not quoteChar: + warnings.warn("quoteChar cannot be the empty string",SyntaxWarning,stacklevel=2) + raise SyntaxError() + + if endQuoteChar is None: + endQuoteChar = quoteChar + else: + endQuoteChar = endQuoteChar.strip() + if not endQuoteChar: + warnings.warn("endQuoteChar cannot be the empty string",SyntaxWarning,stacklevel=2) + raise SyntaxError() + + self.quoteChar = quoteChar + self.quoteCharLen = len(quoteChar) + self.firstQuoteChar = quoteChar[0] + self.endQuoteChar = endQuoteChar + self.endQuoteCharLen = len(endQuoteChar) + self.escChar = escChar + self.escQuote = escQuote + self.unquoteResults = unquoteResults + self.convertWhitespaceEscapes = convertWhitespaceEscapes + + if multiline: + self.flags = re.MULTILINE | re.DOTALL + self.pattern = r'%s(?:[^%s%s]' % \ + ( re.escape(self.quoteChar), + _escapeRegexRangeChars(self.endQuoteChar[0]), + (escChar is not None and _escapeRegexRangeChars(escChar) or '') ) + else: + self.flags = 0 + self.pattern = r'%s(?:[^%s\n\r%s]' % \ + ( re.escape(self.quoteChar), + _escapeRegexRangeChars(self.endQuoteChar[0]), + (escChar is not None and _escapeRegexRangeChars(escChar) or '') ) + if len(self.endQuoteChar) > 1: + self.pattern += ( + '|(?:' + ')|(?:'.join("%s[^%s]" % (re.escape(self.endQuoteChar[:i]), + _escapeRegexRangeChars(self.endQuoteChar[i])) + for i in range(len(self.endQuoteChar)-1,0,-1)) + ')' + ) + if escQuote: + self.pattern += (r'|(?:%s)' % re.escape(escQuote)) + if escChar: + self.pattern += (r'|(?:%s.)' % re.escape(escChar)) + self.escCharReplacePattern = re.escape(self.escChar)+"(.)" + self.pattern += (r')*%s' % re.escape(self.endQuoteChar)) + + try: + self.re = re.compile(self.pattern, self.flags) + self.reString = self.pattern + except sre_constants.error: + warnings.warn("invalid pattern (%s) passed to Regex" % self.pattern, + SyntaxWarning, stacklevel=2) + raise + + self.name = _ustr(self) + self.errmsg = "Expected " + self.name + self.mayIndexError = False + self.mayReturnEmpty = True + + def parseImpl( self, instring, loc, doActions=True ): + result = instring[loc] == self.firstQuoteChar and self.re.match(instring,loc) or None + if not result: + raise ParseException(instring, loc, self.errmsg, self) + + loc = result.end() + ret = result.group() + + if self.unquoteResults: + + # strip off quotes + ret = ret[self.quoteCharLen:-self.endQuoteCharLen] + + if isinstance(ret,basestring): + # replace escaped whitespace + if '\\' in ret and self.convertWhitespaceEscapes: + ws_map = { + r'\t' : '\t', + r'\n' : '\n', + r'\f' : '\f', + r'\r' : '\r', + } + for wslit,wschar in ws_map.items(): + ret = ret.replace(wslit, wschar) + + # replace escaped characters + if self.escChar: + ret = re.sub(self.escCharReplacePattern,r"\g<1>",ret) + + # replace escaped quotes + if self.escQuote: + ret = ret.replace(self.escQuote, self.endQuoteChar) + + return loc, ret + + def __str__( self ): + try: + return super(QuotedString,self).__str__() + except Exception: + pass + + if self.strRepr is None: + self.strRepr = "quoted string, starting with %s ending with %s" % (self.quoteChar, self.endQuoteChar) + + return self.strRepr + + +class CharsNotIn(Token): + """ + Token for matching words composed of characters I{not} in a given set (will + include whitespace in matched characters if not listed in the provided exclusion set - see example). + Defined with string containing all disallowed characters, and an optional + minimum, maximum, and/or exact length. The default value for C{min} is 1 (a + minimum value < 1 is not valid); the default values for C{max} and C{exact} + are 0, meaning no maximum or exact length restriction. + + Example:: + # define a comma-separated-value as anything that is not a ',' + csv_value = CharsNotIn(',') + print(delimitedList(csv_value).parseString("dkls,lsdkjf,s12 34,@!#,213")) + prints:: + ['dkls', 'lsdkjf', 's12 34', '@!#', '213'] + """ + def __init__( self, notChars, min=1, max=0, exact=0 ): + super(CharsNotIn,self).__init__() + self.skipWhitespace = False + self.notChars = notChars + + if min < 1: + raise ValueError("cannot specify a minimum length < 1; use Optional(CharsNotIn()) if zero-length char group is permitted") + + self.minLen = min + + if max > 0: + self.maxLen = max + else: + self.maxLen = _MAX_INT + + if exact > 0: + self.maxLen = exact + self.minLen = exact + + self.name = _ustr(self) + self.errmsg = "Expected " + self.name + self.mayReturnEmpty = ( self.minLen == 0 ) + self.mayIndexError = False + + def parseImpl( self, instring, loc, doActions=True ): + if instring[loc] in self.notChars: + raise ParseException(instring, loc, self.errmsg, self) + + start = loc + loc += 1 + notchars = self.notChars + maxlen = min( start+self.maxLen, len(instring) ) + while loc < maxlen and \ + (instring[loc] not in notchars): + loc += 1 + + if loc - start < self.minLen: + raise ParseException(instring, loc, self.errmsg, self) + + return loc, instring[start:loc] + + def __str__( self ): + try: + return super(CharsNotIn, self).__str__() + except Exception: + pass + + if self.strRepr is None: + if len(self.notChars) > 4: + self.strRepr = "!W:(%s...)" % self.notChars[:4] + else: + self.strRepr = "!W:(%s)" % self.notChars + + return self.strRepr + +class White(Token): + """ + Special matching class for matching whitespace. Normally, whitespace is ignored + by pyparsing grammars. This class is included when some whitespace structures + are significant. Define with a string containing the whitespace characters to be + matched; default is C{" \\t\\r\\n"}. Also takes optional C{min}, C{max}, and C{exact} arguments, + as defined for the C{L{Word}} class. + """ + whiteStrs = { + " " : "<SPC>", + "\t": "<TAB>", + "\n": "<LF>", + "\r": "<CR>", + "\f": "<FF>", + } + def __init__(self, ws=" \t\r\n", min=1, max=0, exact=0): + super(White,self).__init__() + self.matchWhite = ws + self.setWhitespaceChars( "".join(c for c in self.whiteChars if c not in self.matchWhite) ) + #~ self.leaveWhitespace() + self.name = ("".join(White.whiteStrs[c] for c in self.matchWhite)) + self.mayReturnEmpty = True + self.errmsg = "Expected " + self.name + + self.minLen = min + + if max > 0: + self.maxLen = max + else: + self.maxLen = _MAX_INT + + if exact > 0: + self.maxLen = exact + self.minLen = exact + + def parseImpl( self, instring, loc, doActions=True ): + if not(instring[ loc ] in self.matchWhite): + raise ParseException(instring, loc, self.errmsg, self) + start = loc + loc += 1 + maxloc = start + self.maxLen + maxloc = min( maxloc, len(instring) ) + while loc < maxloc and instring[loc] in self.matchWhite: + loc += 1 + + if loc - start < self.minLen: + raise ParseException(instring, loc, self.errmsg, self) + + return loc, instring[start:loc] + + +class _PositionToken(Token): + def __init__( self ): + super(_PositionToken,self).__init__() + self.name=self.__class__.__name__ + self.mayReturnEmpty = True + self.mayIndexError = False + +class GoToColumn(_PositionToken): + """ + Token to advance to a specific column of input text; useful for tabular report scraping. + """ + def __init__( self, colno ): + super(GoToColumn,self).__init__() + self.col = colno + + def preParse( self, instring, loc ): + if col(loc,instring) != self.col: + instrlen = len(instring) + if self.ignoreExprs: + loc = self._skipIgnorables( instring, loc ) + while loc < instrlen and instring[loc].isspace() and col( loc, instring ) != self.col : + loc += 1 + return loc + + def parseImpl( self, instring, loc, doActions=True ): + thiscol = col( loc, instring ) + if thiscol > self.col: + raise ParseException( instring, loc, "Text not in expected column", self ) + newloc = loc + self.col - thiscol + ret = instring[ loc: newloc ] + return newloc, ret + + +class LineStart(_PositionToken): + """ + Matches if current position is at the beginning of a line within the parse string + + Example:: + + test = '''\ + AAA this line + AAA and this line + AAA but not this one + B AAA and definitely not this one + ''' + + for t in (LineStart() + 'AAA' + restOfLine).searchString(test): + print(t) + + Prints:: + ['AAA', ' this line'] + ['AAA', ' and this line'] + + """ + def __init__( self ): + super(LineStart,self).__init__() + self.errmsg = "Expected start of line" + + def parseImpl( self, instring, loc, doActions=True ): + if col(loc, instring) == 1: + return loc, [] + raise ParseException(instring, loc, self.errmsg, self) + +class LineEnd(_PositionToken): + """ + Matches if current position is at the end of a line within the parse string + """ + def __init__( self ): + super(LineEnd,self).__init__() + self.setWhitespaceChars( ParserElement.DEFAULT_WHITE_CHARS.replace("\n","") ) + self.errmsg = "Expected end of line" + + def parseImpl( self, instring, loc, doActions=True ): + if loc<len(instring): + if instring[loc] == "\n": + return loc+1, "\n" + else: + raise ParseException(instring, loc, self.errmsg, self) + elif loc == len(instring): + return loc+1, [] + else: + raise ParseException(instring, loc, self.errmsg, self) + +class StringStart(_PositionToken): + """ + Matches if current position is at the beginning of the parse string + """ + def __init__( self ): + super(StringStart,self).__init__() + self.errmsg = "Expected start of text" + + def parseImpl( self, instring, loc, doActions=True ): + if loc != 0: + # see if entire string up to here is just whitespace and ignoreables + if loc != self.preParse( instring, 0 ): + raise ParseException(instring, loc, self.errmsg, self) + return loc, [] + +class StringEnd(_PositionToken): + """ + Matches if current position is at the end of the parse string + """ + def __init__( self ): + super(StringEnd,self).__init__() + self.errmsg = "Expected end of text" + + def parseImpl( self, instring, loc, doActions=True ): + if loc < len(instring): + raise ParseException(instring, loc, self.errmsg, self) + elif loc == len(instring): + return loc+1, [] + elif loc > len(instring): + return loc, [] + else: + raise ParseException(instring, loc, self.errmsg, self) + +class WordStart(_PositionToken): + """ + Matches if the current position is at the beginning of a Word, and + is not preceded by any character in a given set of C{wordChars} + (default=C{printables}). To emulate the C{\b} behavior of regular expressions, + use C{WordStart(alphanums)}. C{WordStart} will also match at the beginning of + the string being parsed, or at the beginning of a line. + """ + def __init__(self, wordChars = printables): + super(WordStart,self).__init__() + self.wordChars = set(wordChars) + self.errmsg = "Not at the start of a word" + + def parseImpl(self, instring, loc, doActions=True ): + if loc != 0: + if (instring[loc-1] in self.wordChars or + instring[loc] not in self.wordChars): + raise ParseException(instring, loc, self.errmsg, self) + return loc, [] + +class WordEnd(_PositionToken): + """ + Matches if the current position is at the end of a Word, and + is not followed by any character in a given set of C{wordChars} + (default=C{printables}). To emulate the C{\b} behavior of regular expressions, + use C{WordEnd(alphanums)}. C{WordEnd} will also match at the end of + the string being parsed, or at the end of a line. + """ + def __init__(self, wordChars = printables): + super(WordEnd,self).__init__() + self.wordChars = set(wordChars) + self.skipWhitespace = False + self.errmsg = "Not at the end of a word" + + def parseImpl(self, instring, loc, doActions=True ): + instrlen = len(instring) + if instrlen>0 and loc<instrlen: + if (instring[loc] in self.wordChars or + instring[loc-1] not in self.wordChars): + raise ParseException(instring, loc, self.errmsg, self) + return loc, [] + + +class ParseExpression(ParserElement): + """ + Abstract subclass of ParserElement, for combining and post-processing parsed tokens. + """ + def __init__( self, exprs, savelist = False ): + super(ParseExpression,self).__init__(savelist) + if isinstance( exprs, _generatorType ): + exprs = list(exprs) + + if isinstance( exprs, basestring ): + self.exprs = [ ParserElement._literalStringClass( exprs ) ] + elif isinstance( exprs, collections.Iterable ): + exprs = list(exprs) + # if sequence of strings provided, wrap with Literal + if all(isinstance(expr, basestring) for expr in exprs): + exprs = map(ParserElement._literalStringClass, exprs) + self.exprs = list(exprs) + else: + try: + self.exprs = list( exprs ) + except TypeError: + self.exprs = [ exprs ] + self.callPreparse = False + + def __getitem__( self, i ): + return self.exprs[i] + + def append( self, other ): + self.exprs.append( other ) + self.strRepr = None + return self + + def leaveWhitespace( self ): + """Extends C{leaveWhitespace} defined in base class, and also invokes C{leaveWhitespace} on + all contained expressions.""" + self.skipWhitespace = False + self.exprs = [ e.copy() for e in self.exprs ] + for e in self.exprs: + e.leaveWhitespace() + return self + + def ignore( self, other ): + if isinstance( other, Suppress ): + if other not in self.ignoreExprs: + super( ParseExpression, self).ignore( other ) + for e in self.exprs: + e.ignore( self.ignoreExprs[-1] ) + else: + super( ParseExpression, self).ignore( other ) + for e in self.exprs: + e.ignore( self.ignoreExprs[-1] ) + return self + + def __str__( self ): + try: + return super(ParseExpression,self).__str__() + except Exception: + pass + + if self.strRepr is None: + self.strRepr = "%s:(%s)" % ( self.__class__.__name__, _ustr(self.exprs) ) + return self.strRepr + + def streamline( self ): + super(ParseExpression,self).streamline() + + for e in self.exprs: + e.streamline() + + # collapse nested And's of the form And( And( And( a,b), c), d) to And( a,b,c,d ) + # but only if there are no parse actions or resultsNames on the nested And's + # (likewise for Or's and MatchFirst's) + if ( len(self.exprs) == 2 ): + other = self.exprs[0] + if ( isinstance( other, self.__class__ ) and + not(other.parseAction) and + other.resultsName is None and + not other.debug ): + self.exprs = other.exprs[:] + [ self.exprs[1] ] + self.strRepr = None + self.mayReturnEmpty |= other.mayReturnEmpty + self.mayIndexError |= other.mayIndexError + + other = self.exprs[-1] + if ( isinstance( other, self.__class__ ) and + not(other.parseAction) and + other.resultsName is None and + not other.debug ): + self.exprs = self.exprs[:-1] + other.exprs[:] + self.strRepr = None + self.mayReturnEmpty |= other.mayReturnEmpty + self.mayIndexError |= other.mayIndexError + + self.errmsg = "Expected " + _ustr(self) + + return self + + def setResultsName( self, name, listAllMatches=False ): + ret = super(ParseExpression,self).setResultsName(name,listAllMatches) + return ret + + def validate( self, validateTrace=[] ): + tmp = validateTrace[:]+[self] + for e in self.exprs: + e.validate(tmp) + self.checkRecursion( [] ) + + def copy(self): + ret = super(ParseExpression,self).copy() + ret.exprs = [e.copy() for e in self.exprs] + return ret + +class And(ParseExpression): + """ + Requires all given C{ParseExpression}s to be found in the given order. + Expressions may be separated by whitespace. + May be constructed using the C{'+'} operator. + May also be constructed using the C{'-'} operator, which will suppress backtracking. + + Example:: + integer = Word(nums) + name_expr = OneOrMore(Word(alphas)) + + expr = And([integer("id"),name_expr("name"),integer("age")]) + # more easily written as: + expr = integer("id") + name_expr("name") + integer("age") + """ + + class _ErrorStop(Empty): + def __init__(self, *args, **kwargs): + super(And._ErrorStop,self).__init__(*args, **kwargs) + self.name = '-' + self.leaveWhitespace() + + def __init__( self, exprs, savelist = True ): + super(And,self).__init__(exprs, savelist) + self.mayReturnEmpty = all(e.mayReturnEmpty for e in self.exprs) + self.setWhitespaceChars( self.exprs[0].whiteChars ) + self.skipWhitespace = self.exprs[0].skipWhitespace + self.callPreparse = True + + def parseImpl( self, instring, loc, doActions=True ): + # pass False as last arg to _parse for first element, since we already + # pre-parsed the string as part of our And pre-parsing + loc, resultlist = self.exprs[0]._parse( instring, loc, doActions, callPreParse=False ) + errorStop = False + for e in self.exprs[1:]: + if isinstance(e, And._ErrorStop): + errorStop = True + continue + if errorStop: + try: + loc, exprtokens = e._parse( instring, loc, doActions ) + except ParseSyntaxException: + raise + except ParseBaseException as pe: + pe.__traceback__ = None + raise ParseSyntaxException._from_exception(pe) + except IndexError: + raise ParseSyntaxException(instring, len(instring), self.errmsg, self) + else: + loc, exprtokens = e._parse( instring, loc, doActions ) + if exprtokens or exprtokens.haskeys(): + resultlist += exprtokens + return loc, resultlist + + def __iadd__(self, other ): + if isinstance( other, basestring ): + other = ParserElement._literalStringClass( other ) + return self.append( other ) #And( [ self, other ] ) + + def checkRecursion( self, parseElementList ): + subRecCheckList = parseElementList[:] + [ self ] + for e in self.exprs: + e.checkRecursion( subRecCheckList ) + if not e.mayReturnEmpty: + break + + def __str__( self ): + if hasattr(self,"name"): + return self.name + + if self.strRepr is None: + self.strRepr = "{" + " ".join(_ustr(e) for e in self.exprs) + "}" + + return self.strRepr + + +class Or(ParseExpression): + """ + Requires that at least one C{ParseExpression} is found. + If two expressions match, the expression that matches the longest string will be used. + May be constructed using the C{'^'} operator. + + Example:: + # construct Or using '^' operator + + number = Word(nums) ^ Combine(Word(nums) + '.' + Word(nums)) + print(number.searchString("123 3.1416 789")) + prints:: + [['123'], ['3.1416'], ['789']] + """ + def __init__( self, exprs, savelist = False ): + super(Or,self).__init__(exprs, savelist) + if self.exprs: + self.mayReturnEmpty = any(e.mayReturnEmpty for e in self.exprs) + else: + self.mayReturnEmpty = True + + def parseImpl( self, instring, loc, doActions=True ): + maxExcLoc = -1 + maxException = None + matches = [] + for e in self.exprs: + try: + loc2 = e.tryParse( instring, loc ) + except ParseException as err: + err.__traceback__ = None + if err.loc > maxExcLoc: + maxException = err + maxExcLoc = err.loc + except IndexError: + if len(instring) > maxExcLoc: + maxException = ParseException(instring,len(instring),e.errmsg,self) + maxExcLoc = len(instring) + else: + # save match among all matches, to retry longest to shortest + matches.append((loc2, e)) + + if matches: + matches.sort(key=lambda x: -x[0]) + for _,e in matches: + try: + return e._parse( instring, loc, doActions ) + except ParseException as err: + err.__traceback__ = None + if err.loc > maxExcLoc: + maxException = err + maxExcLoc = err.loc + + if maxException is not None: + maxException.msg = self.errmsg + raise maxException + else: + raise ParseException(instring, loc, "no defined alternatives to match", self) + + + def __ixor__(self, other ): + if isinstance( other, basestring ): + other = ParserElement._literalStringClass( other ) + return self.append( other ) #Or( [ self, other ] ) + + def __str__( self ): + if hasattr(self,"name"): + return self.name + + if self.strRepr is None: + self.strRepr = "{" + " ^ ".join(_ustr(e) for e in self.exprs) + "}" + + return self.strRepr + + def checkRecursion( self, parseElementList ): + subRecCheckList = parseElementList[:] + [ self ] + for e in self.exprs: + e.checkRecursion( subRecCheckList ) + + +class MatchFirst(ParseExpression): + """ + Requires that at least one C{ParseExpression} is found. + If two expressions match, the first one listed is the one that will match. + May be constructed using the C{'|'} operator. + + Example:: + # construct MatchFirst using '|' operator + + # watch the order of expressions to match + number = Word(nums) | Combine(Word(nums) + '.' + Word(nums)) + print(number.searchString("123 3.1416 789")) # Fail! -> [['123'], ['3'], ['1416'], ['789']] + + # put more selective expression first + number = Combine(Word(nums) + '.' + Word(nums)) | Word(nums) + print(number.searchString("123 3.1416 789")) # Better -> [['123'], ['3.1416'], ['789']] + """ + def __init__( self, exprs, savelist = False ): + super(MatchFirst,self).__init__(exprs, savelist) + if self.exprs: + self.mayReturnEmpty = any(e.mayReturnEmpty for e in self.exprs) + else: + self.mayReturnEmpty = True + + def parseImpl( self, instring, loc, doActions=True ): + maxExcLoc = -1 + maxException = None + for e in self.exprs: + try: + ret = e._parse( instring, loc, doActions ) + return ret + except ParseException as err: + if err.loc > maxExcLoc: + maxException = err + maxExcLoc = err.loc + except IndexError: + if len(instring) > maxExcLoc: + maxException = ParseException(instring,len(instring),e.errmsg,self) + maxExcLoc = len(instring) + + # only got here if no expression matched, raise exception for match that made it the furthest + else: + if maxException is not None: + maxException.msg = self.errmsg + raise maxException + else: + raise ParseException(instring, loc, "no defined alternatives to match", self) + + def __ior__(self, other ): + if isinstance( other, basestring ): + other = ParserElement._literalStringClass( other ) + return self.append( other ) #MatchFirst( [ self, other ] ) + + def __str__( self ): + if hasattr(self,"name"): + return self.name + + if self.strRepr is None: + self.strRepr = "{" + " | ".join(_ustr(e) for e in self.exprs) + "}" + + return self.strRepr + + def checkRecursion( self, parseElementList ): + subRecCheckList = parseElementList[:] + [ self ] + for e in self.exprs: + e.checkRecursion( subRecCheckList ) + + +class Each(ParseExpression): + """ + Requires all given C{ParseExpression}s to be found, but in any order. + Expressions may be separated by whitespace. + May be constructed using the C{'&'} operator. + + Example:: + color = oneOf("RED ORANGE YELLOW GREEN BLUE PURPLE BLACK WHITE BROWN") + shape_type = oneOf("SQUARE CIRCLE TRIANGLE STAR HEXAGON OCTAGON") + integer = Word(nums) + shape_attr = "shape:" + shape_type("shape") + posn_attr = "posn:" + Group(integer("x") + ',' + integer("y"))("posn") + color_attr = "color:" + color("color") + size_attr = "size:" + integer("size") + + # use Each (using operator '&') to accept attributes in any order + # (shape and posn are required, color and size are optional) + shape_spec = shape_attr & posn_attr & Optional(color_attr) & Optional(size_attr) + + shape_spec.runTests(''' + shape: SQUARE color: BLACK posn: 100, 120 + shape: CIRCLE size: 50 color: BLUE posn: 50,80 + color:GREEN size:20 shape:TRIANGLE posn:20,40 + ''' + ) + prints:: + shape: SQUARE color: BLACK posn: 100, 120 + ['shape:', 'SQUARE', 'color:', 'BLACK', 'posn:', ['100', ',', '120']] + - color: BLACK + - posn: ['100', ',', '120'] + - x: 100 + - y: 120 + - shape: SQUARE + + + shape: CIRCLE size: 50 color: BLUE posn: 50,80 + ['shape:', 'CIRCLE', 'size:', '50', 'color:', 'BLUE', 'posn:', ['50', ',', '80']] + - color: BLUE + - posn: ['50', ',', '80'] + - x: 50 + - y: 80 + - shape: CIRCLE + - size: 50 + + + color: GREEN size: 20 shape: TRIANGLE posn: 20,40 + ['color:', 'GREEN', 'size:', '20', 'shape:', 'TRIANGLE', 'posn:', ['20', ',', '40']] + - color: GREEN + - posn: ['20', ',', '40'] + - x: 20 + - y: 40 + - shape: TRIANGLE + - size: 20 + """ + def __init__( self, exprs, savelist = True ): + super(Each,self).__init__(exprs, savelist) + self.mayReturnEmpty = all(e.mayReturnEmpty for e in self.exprs) + self.skipWhitespace = True + self.initExprGroups = True + + def parseImpl( self, instring, loc, doActions=True ): + if self.initExprGroups: + self.opt1map = dict((id(e.expr),e) for e in self.exprs if isinstance(e,Optional)) + opt1 = [ e.expr for e in self.exprs if isinstance(e,Optional) ] + opt2 = [ e for e in self.exprs if e.mayReturnEmpty and not isinstance(e,Optional)] + self.optionals = opt1 + opt2 + self.multioptionals = [ e.expr for e in self.exprs if isinstance(e,ZeroOrMore) ] + self.multirequired = [ e.expr for e in self.exprs if isinstance(e,OneOrMore) ] + self.required = [ e for e in self.exprs if not isinstance(e,(Optional,ZeroOrMore,OneOrMore)) ] + self.required += self.multirequired + self.initExprGroups = False + tmpLoc = loc + tmpReqd = self.required[:] + tmpOpt = self.optionals[:] + matchOrder = [] + + keepMatching = True + while keepMatching: + tmpExprs = tmpReqd + tmpOpt + self.multioptionals + self.multirequired + failed = [] + for e in tmpExprs: + try: + tmpLoc = e.tryParse( instring, tmpLoc ) + except ParseException: + failed.append(e) + else: + matchOrder.append(self.opt1map.get(id(e),e)) + if e in tmpReqd: + tmpReqd.remove(e) + elif e in tmpOpt: + tmpOpt.remove(e) + if len(failed) == len(tmpExprs): + keepMatching = False + + if tmpReqd: + missing = ", ".join(_ustr(e) for e in tmpReqd) + raise ParseException(instring,loc,"Missing one or more required elements (%s)" % missing ) + + # add any unmatched Optionals, in case they have default values defined + matchOrder += [e for e in self.exprs if isinstance(e,Optional) and e.expr in tmpOpt] + + resultlist = [] + for e in matchOrder: + loc,results = e._parse(instring,loc,doActions) + resultlist.append(results) + + finalResults = sum(resultlist, ParseResults([])) + return loc, finalResults + + def __str__( self ): + if hasattr(self,"name"): + return self.name + + if self.strRepr is None: + self.strRepr = "{" + " & ".join(_ustr(e) for e in self.exprs) + "}" + + return self.strRepr + + def checkRecursion( self, parseElementList ): + subRecCheckList = parseElementList[:] + [ self ] + for e in self.exprs: + e.checkRecursion( subRecCheckList ) + + +class ParseElementEnhance(ParserElement): + """ + Abstract subclass of C{ParserElement}, for combining and post-processing parsed tokens. + """ + def __init__( self, expr, savelist=False ): + super(ParseElementEnhance,self).__init__(savelist) + if isinstance( expr, basestring ): + if issubclass(ParserElement._literalStringClass, Token): + expr = ParserElement._literalStringClass(expr) + else: + expr = ParserElement._literalStringClass(Literal(expr)) + self.expr = expr + self.strRepr = None + if expr is not None: + self.mayIndexError = expr.mayIndexError + self.mayReturnEmpty = expr.mayReturnEmpty + self.setWhitespaceChars( expr.whiteChars ) + self.skipWhitespace = expr.skipWhitespace + self.saveAsList = expr.saveAsList + self.callPreparse = expr.callPreparse + self.ignoreExprs.extend(expr.ignoreExprs) + + def parseImpl( self, instring, loc, doActions=True ): + if self.expr is not None: + return self.expr._parse( instring, loc, doActions, callPreParse=False ) + else: + raise ParseException("",loc,self.errmsg,self) + + def leaveWhitespace( self ): + self.skipWhitespace = False + self.expr = self.expr.copy() + if self.expr is not None: + self.expr.leaveWhitespace() + return self + + def ignore( self, other ): + if isinstance( other, Suppress ): + if other not in self.ignoreExprs: + super( ParseElementEnhance, self).ignore( other ) + if self.expr is not None: + self.expr.ignore( self.ignoreExprs[-1] ) + else: + super( ParseElementEnhance, self).ignore( other ) + if self.expr is not None: + self.expr.ignore( self.ignoreExprs[-1] ) + return self + + def streamline( self ): + super(ParseElementEnhance,self).streamline() + if self.expr is not None: + self.expr.streamline() + return self + + def checkRecursion( self, parseElementList ): + if self in parseElementList: + raise RecursiveGrammarException( parseElementList+[self] ) + subRecCheckList = parseElementList[:] + [ self ] + if self.expr is not None: + self.expr.checkRecursion( subRecCheckList ) + + def validate( self, validateTrace=[] ): + tmp = validateTrace[:]+[self] + if self.expr is not None: + self.expr.validate(tmp) + self.checkRecursion( [] ) + + def __str__( self ): + try: + return super(ParseElementEnhance,self).__str__() + except Exception: + pass + + if self.strRepr is None and self.expr is not None: + self.strRepr = "%s:(%s)" % ( self.__class__.__name__, _ustr(self.expr) ) + return self.strRepr + + +class FollowedBy(ParseElementEnhance): + """ + Lookahead matching of the given parse expression. C{FollowedBy} + does I{not} advance the parsing position within the input string, it only + verifies that the specified parse expression matches at the current + position. C{FollowedBy} always returns a null token list. + + Example:: + # use FollowedBy to match a label only if it is followed by a ':' + data_word = Word(alphas) + label = data_word + FollowedBy(':') + attr_expr = Group(label + Suppress(':') + OneOrMore(data_word, stopOn=label).setParseAction(' '.join)) + + OneOrMore(attr_expr).parseString("shape: SQUARE color: BLACK posn: upper left").pprint() + prints:: + [['shape', 'SQUARE'], ['color', 'BLACK'], ['posn', 'upper left']] + """ + def __init__( self, expr ): + super(FollowedBy,self).__init__(expr) + self.mayReturnEmpty = True + + def parseImpl( self, instring, loc, doActions=True ): + self.expr.tryParse( instring, loc ) + return loc, [] + + +class NotAny(ParseElementEnhance): + """ + Lookahead to disallow matching with the given parse expression. C{NotAny} + does I{not} advance the parsing position within the input string, it only + verifies that the specified parse expression does I{not} match at the current + position. Also, C{NotAny} does I{not} skip over leading whitespace. C{NotAny} + always returns a null token list. May be constructed using the '~' operator. + + Example:: + + """ + def __init__( self, expr ): + super(NotAny,self).__init__(expr) + #~ self.leaveWhitespace() + self.skipWhitespace = False # do NOT use self.leaveWhitespace(), don't want to propagate to exprs + self.mayReturnEmpty = True + self.errmsg = "Found unwanted token, "+_ustr(self.expr) + + def parseImpl( self, instring, loc, doActions=True ): + if self.expr.canParseNext(instring, loc): + raise ParseException(instring, loc, self.errmsg, self) + return loc, [] + + def __str__( self ): + if hasattr(self,"name"): + return self.name + + if self.strRepr is None: + self.strRepr = "~{" + _ustr(self.expr) + "}" + + return self.strRepr + +class _MultipleMatch(ParseElementEnhance): + def __init__( self, expr, stopOn=None): + super(_MultipleMatch, self).__init__(expr) + self.saveAsList = True + ender = stopOn + if isinstance(ender, basestring): + ender = ParserElement._literalStringClass(ender) + self.not_ender = ~ender if ender is not None else None + + def parseImpl( self, instring, loc, doActions=True ): + self_expr_parse = self.expr._parse + self_skip_ignorables = self._skipIgnorables + check_ender = self.not_ender is not None + if check_ender: + try_not_ender = self.not_ender.tryParse + + # must be at least one (but first see if we are the stopOn sentinel; + # if so, fail) + if check_ender: + try_not_ender(instring, loc) + loc, tokens = self_expr_parse( instring, loc, doActions, callPreParse=False ) + try: + hasIgnoreExprs = (not not self.ignoreExprs) + while 1: + if check_ender: + try_not_ender(instring, loc) + if hasIgnoreExprs: + preloc = self_skip_ignorables( instring, loc ) + else: + preloc = loc + loc, tmptokens = self_expr_parse( instring, preloc, doActions ) + if tmptokens or tmptokens.haskeys(): + tokens += tmptokens + except (ParseException,IndexError): + pass + + return loc, tokens + +class OneOrMore(_MultipleMatch): + """ + Repetition of one or more of the given expression. + + Parameters: + - expr - expression that must match one or more times + - stopOn - (default=C{None}) - expression for a terminating sentinel + (only required if the sentinel would ordinarily match the repetition + expression) + + Example:: + data_word = Word(alphas) + label = data_word + FollowedBy(':') + attr_expr = Group(label + Suppress(':') + OneOrMore(data_word).setParseAction(' '.join)) + + text = "shape: SQUARE posn: upper left color: BLACK" + OneOrMore(attr_expr).parseString(text).pprint() # Fail! read 'color' as data instead of next label -> [['shape', 'SQUARE color']] + + # use stopOn attribute for OneOrMore to avoid reading label string as part of the data + attr_expr = Group(label + Suppress(':') + OneOrMore(data_word, stopOn=label).setParseAction(' '.join)) + OneOrMore(attr_expr).parseString(text).pprint() # Better -> [['shape', 'SQUARE'], ['posn', 'upper left'], ['color', 'BLACK']] + + # could also be written as + (attr_expr * (1,)).parseString(text).pprint() + """ + + def __str__( self ): + if hasattr(self,"name"): + return self.name + + if self.strRepr is None: + self.strRepr = "{" + _ustr(self.expr) + "}..." + + return self.strRepr + +class ZeroOrMore(_MultipleMatch): + """ + Optional repetition of zero or more of the given expression. + + Parameters: + - expr - expression that must match zero or more times + - stopOn - (default=C{None}) - expression for a terminating sentinel + (only required if the sentinel would ordinarily match the repetition + expression) + + Example: similar to L{OneOrMore} + """ + def __init__( self, expr, stopOn=None): + super(ZeroOrMore,self).__init__(expr, stopOn=stopOn) + self.mayReturnEmpty = True + + def parseImpl( self, instring, loc, doActions=True ): + try: + return super(ZeroOrMore, self).parseImpl(instring, loc, doActions) + except (ParseException,IndexError): + return loc, [] + + def __str__( self ): + if hasattr(self,"name"): + return self.name + + if self.strRepr is None: + self.strRepr = "[" + _ustr(self.expr) + "]..." + + return self.strRepr + +class _NullToken(object): + def __bool__(self): + return False + __nonzero__ = __bool__ + def __str__(self): + return "" + +_optionalNotMatched = _NullToken() +class Optional(ParseElementEnhance): + """ + Optional matching of the given expression. + + Parameters: + - expr - expression that must match zero or more times + - default (optional) - value to be returned if the optional expression is not found. + + Example:: + # US postal code can be a 5-digit zip, plus optional 4-digit qualifier + zip = Combine(Word(nums, exact=5) + Optional('-' + Word(nums, exact=4))) + zip.runTests(''' + # traditional ZIP code + 12345 + + # ZIP+4 form + 12101-0001 + + # invalid ZIP + 98765- + ''') + prints:: + # traditional ZIP code + 12345 + ['12345'] + + # ZIP+4 form + 12101-0001 + ['12101-0001'] + + # invalid ZIP + 98765- + ^ + FAIL: Expected end of text (at char 5), (line:1, col:6) + """ + def __init__( self, expr, default=_optionalNotMatched ): + super(Optional,self).__init__( expr, savelist=False ) + self.saveAsList = self.expr.saveAsList + self.defaultValue = default + self.mayReturnEmpty = True + + def parseImpl( self, instring, loc, doActions=True ): + try: + loc, tokens = self.expr._parse( instring, loc, doActions, callPreParse=False ) + except (ParseException,IndexError): + if self.defaultValue is not _optionalNotMatched: + if self.expr.resultsName: + tokens = ParseResults([ self.defaultValue ]) + tokens[self.expr.resultsName] = self.defaultValue + else: + tokens = [ self.defaultValue ] + else: + tokens = [] + return loc, tokens + + def __str__( self ): + if hasattr(self,"name"): + return self.name + + if self.strRepr is None: + self.strRepr = "[" + _ustr(self.expr) + "]" + + return self.strRepr + +class SkipTo(ParseElementEnhance): + """ + Token for skipping over all undefined text until the matched expression is found. + + Parameters: + - expr - target expression marking the end of the data to be skipped + - include - (default=C{False}) if True, the target expression is also parsed + (the skipped text and target expression are returned as a 2-element list). + - ignore - (default=C{None}) used to define grammars (typically quoted strings and + comments) that might contain false matches to the target expression + - failOn - (default=C{None}) define expressions that are not allowed to be + included in the skipped test; if found before the target expression is found, + the SkipTo is not a match + + Example:: + report = ''' + Outstanding Issues Report - 1 Jan 2000 + + # | Severity | Description | Days Open + -----+----------+-------------------------------------------+----------- + 101 | Critical | Intermittent system crash | 6 + 94 | Cosmetic | Spelling error on Login ('log|n') | 14 + 79 | Minor | System slow when running too many reports | 47 + ''' + integer = Word(nums) + SEP = Suppress('|') + # use SkipTo to simply match everything up until the next SEP + # - ignore quoted strings, so that a '|' character inside a quoted string does not match + # - parse action will call token.strip() for each matched token, i.e., the description body + string_data = SkipTo(SEP, ignore=quotedString) + string_data.setParseAction(tokenMap(str.strip)) + ticket_expr = (integer("issue_num") + SEP + + string_data("sev") + SEP + + string_data("desc") + SEP + + integer("days_open")) + + for tkt in ticket_expr.searchString(report): + print tkt.dump() + prints:: + ['101', 'Critical', 'Intermittent system crash', '6'] + - days_open: 6 + - desc: Intermittent system crash + - issue_num: 101 + - sev: Critical + ['94', 'Cosmetic', "Spelling error on Login ('log|n')", '14'] + - days_open: 14 + - desc: Spelling error on Login ('log|n') + - issue_num: 94 + - sev: Cosmetic + ['79', 'Minor', 'System slow when running too many reports', '47'] + - days_open: 47 + - desc: System slow when running too many reports + - issue_num: 79 + - sev: Minor + """ + def __init__( self, other, include=False, ignore=None, failOn=None ): + super( SkipTo, self ).__init__( other ) + self.ignoreExpr = ignore + self.mayReturnEmpty = True + self.mayIndexError = False + self.includeMatch = include + self.asList = False + if isinstance(failOn, basestring): + self.failOn = ParserElement._literalStringClass(failOn) + else: + self.failOn = failOn + self.errmsg = "No match found for "+_ustr(self.expr) + + def parseImpl( self, instring, loc, doActions=True ): + startloc = loc + instrlen = len(instring) + expr = self.expr + expr_parse = self.expr._parse + self_failOn_canParseNext = self.failOn.canParseNext if self.failOn is not None else None + self_ignoreExpr_tryParse = self.ignoreExpr.tryParse if self.ignoreExpr is not None else None + + tmploc = loc + while tmploc <= instrlen: + if self_failOn_canParseNext is not None: + # break if failOn expression matches + if self_failOn_canParseNext(instring, tmploc): + break + + if self_ignoreExpr_tryParse is not None: + # advance past ignore expressions + while 1: + try: + tmploc = self_ignoreExpr_tryParse(instring, tmploc) + except ParseBaseException: + break + + try: + expr_parse(instring, tmploc, doActions=False, callPreParse=False) + except (ParseException, IndexError): + # no match, advance loc in string + tmploc += 1 + else: + # matched skipto expr, done + break + + else: + # ran off the end of the input string without matching skipto expr, fail + raise ParseException(instring, loc, self.errmsg, self) + + # build up return values + loc = tmploc + skiptext = instring[startloc:loc] + skipresult = ParseResults(skiptext) + + if self.includeMatch: + loc, mat = expr_parse(instring,loc,doActions,callPreParse=False) + skipresult += mat + + return loc, skipresult + +class Forward(ParseElementEnhance): + """ + Forward declaration of an expression to be defined later - + used for recursive grammars, such as algebraic infix notation. + When the expression is known, it is assigned to the C{Forward} variable using the '<<' operator. + + Note: take care when assigning to C{Forward} not to overlook precedence of operators. + Specifically, '|' has a lower precedence than '<<', so that:: + fwdExpr << a | b | c + will actually be evaluated as:: + (fwdExpr << a) | b | c + thereby leaving b and c out as parseable alternatives. It is recommended that you + explicitly group the values inserted into the C{Forward}:: + fwdExpr << (a | b | c) + Converting to use the '<<=' operator instead will avoid this problem. + + See L{ParseResults.pprint} for an example of a recursive parser created using + C{Forward}. + """ + def __init__( self, other=None ): + super(Forward,self).__init__( other, savelist=False ) + + def __lshift__( self, other ): + if isinstance( other, basestring ): + other = ParserElement._literalStringClass(other) + self.expr = other + self.strRepr = None + self.mayIndexError = self.expr.mayIndexError + self.mayReturnEmpty = self.expr.mayReturnEmpty + self.setWhitespaceChars( self.expr.whiteChars ) + self.skipWhitespace = self.expr.skipWhitespace + self.saveAsList = self.expr.saveAsList + self.ignoreExprs.extend(self.expr.ignoreExprs) + return self + + def __ilshift__(self, other): + return self << other + + def leaveWhitespace( self ): + self.skipWhitespace = False + return self + + def streamline( self ): + if not self.streamlined: + self.streamlined = True + if self.expr is not None: + self.expr.streamline() + return self + + def validate( self, validateTrace=[] ): + if self not in validateTrace: + tmp = validateTrace[:]+[self] + if self.expr is not None: + self.expr.validate(tmp) + self.checkRecursion([]) + + def __str__( self ): + if hasattr(self,"name"): + return self.name + return self.__class__.__name__ + ": ..." + + # stubbed out for now - creates awful memory and perf issues + self._revertClass = self.__class__ + self.__class__ = _ForwardNoRecurse + try: + if self.expr is not None: + retString = _ustr(self.expr) + else: + retString = "None" + finally: + self.__class__ = self._revertClass + return self.__class__.__name__ + ": " + retString + + def copy(self): + if self.expr is not None: + return super(Forward,self).copy() + else: + ret = Forward() + ret <<= self + return ret + +class _ForwardNoRecurse(Forward): + def __str__( self ): + return "..." + +class TokenConverter(ParseElementEnhance): + """ + Abstract subclass of C{ParseExpression}, for converting parsed results. + """ + def __init__( self, expr, savelist=False ): + super(TokenConverter,self).__init__( expr )#, savelist ) + self.saveAsList = False + +class Combine(TokenConverter): + """ + Converter to concatenate all matching tokens to a single string. + By default, the matching patterns must also be contiguous in the input string; + this can be disabled by specifying C{'adjacent=False'} in the constructor. + + Example:: + real = Word(nums) + '.' + Word(nums) + print(real.parseString('3.1416')) # -> ['3', '.', '1416'] + # will also erroneously match the following + print(real.parseString('3. 1416')) # -> ['3', '.', '1416'] + + real = Combine(Word(nums) + '.' + Word(nums)) + print(real.parseString('3.1416')) # -> ['3.1416'] + # no match when there are internal spaces + print(real.parseString('3. 1416')) # -> Exception: Expected W:(0123...) + """ + def __init__( self, expr, joinString="", adjacent=True ): + super(Combine,self).__init__( expr ) + # suppress whitespace-stripping in contained parse expressions, but re-enable it on the Combine itself + if adjacent: + self.leaveWhitespace() + self.adjacent = adjacent + self.skipWhitespace = True + self.joinString = joinString + self.callPreparse = True + + def ignore( self, other ): + if self.adjacent: + ParserElement.ignore(self, other) + else: + super( Combine, self).ignore( other ) + return self + + def postParse( self, instring, loc, tokenlist ): + retToks = tokenlist.copy() + del retToks[:] + retToks += ParseResults([ "".join(tokenlist._asStringList(self.joinString)) ], modal=self.modalResults) + + if self.resultsName and retToks.haskeys(): + return [ retToks ] + else: + return retToks + +class Group(TokenConverter): + """ + Converter to return the matched tokens as a list - useful for returning tokens of C{L{ZeroOrMore}} and C{L{OneOrMore}} expressions. + + Example:: + ident = Word(alphas) + num = Word(nums) + term = ident | num + func = ident + Optional(delimitedList(term)) + print(func.parseString("fn a,b,100")) # -> ['fn', 'a', 'b', '100'] + + func = ident + Group(Optional(delimitedList(term))) + print(func.parseString("fn a,b,100")) # -> ['fn', ['a', 'b', '100']] + """ + def __init__( self, expr ): + super(Group,self).__init__( expr ) + self.saveAsList = True + + def postParse( self, instring, loc, tokenlist ): + return [ tokenlist ] + +class Dict(TokenConverter): + """ + Converter to return a repetitive expression as a list, but also as a dictionary. + Each element can also be referenced using the first token in the expression as its key. + Useful for tabular report scraping when the first column can be used as a item key. + + Example:: + data_word = Word(alphas) + label = data_word + FollowedBy(':') + attr_expr = Group(label + Suppress(':') + OneOrMore(data_word).setParseAction(' '.join)) + + text = "shape: SQUARE posn: upper left color: light blue texture: burlap" + attr_expr = (label + Suppress(':') + OneOrMore(data_word, stopOn=label).setParseAction(' '.join)) + + # print attributes as plain groups + print(OneOrMore(attr_expr).parseString(text).dump()) + + # instead of OneOrMore(expr), parse using Dict(OneOrMore(Group(expr))) - Dict will auto-assign names + result = Dict(OneOrMore(Group(attr_expr))).parseString(text) + print(result.dump()) + + # access named fields as dict entries, or output as dict + print(result['shape']) + print(result.asDict()) + prints:: + ['shape', 'SQUARE', 'posn', 'upper left', 'color', 'light blue', 'texture', 'burlap'] + + [['shape', 'SQUARE'], ['posn', 'upper left'], ['color', 'light blue'], ['texture', 'burlap']] + - color: light blue + - posn: upper left + - shape: SQUARE + - texture: burlap + SQUARE + {'color': 'light blue', 'posn': 'upper left', 'texture': 'burlap', 'shape': 'SQUARE'} + See more examples at L{ParseResults} of accessing fields by results name. + """ + def __init__( self, expr ): + super(Dict,self).__init__( expr ) + self.saveAsList = True + + def postParse( self, instring, loc, tokenlist ): + for i,tok in enumerate(tokenlist): + if len(tok) == 0: + continue + ikey = tok[0] + if isinstance(ikey,int): + ikey = _ustr(tok[0]).strip() + if len(tok)==1: + tokenlist[ikey] = _ParseResultsWithOffset("",i) + elif len(tok)==2 and not isinstance(tok[1],ParseResults): + tokenlist[ikey] = _ParseResultsWithOffset(tok[1],i) + else: + dictvalue = tok.copy() #ParseResults(i) + del dictvalue[0] + if len(dictvalue)!= 1 or (isinstance(dictvalue,ParseResults) and dictvalue.haskeys()): + tokenlist[ikey] = _ParseResultsWithOffset(dictvalue,i) + else: + tokenlist[ikey] = _ParseResultsWithOffset(dictvalue[0],i) + + if self.resultsName: + return [ tokenlist ] + else: + return tokenlist + + +class Suppress(TokenConverter): + """ + Converter for ignoring the results of a parsed expression. + + Example:: + source = "a, b, c,d" + wd = Word(alphas) + wd_list1 = wd + ZeroOrMore(',' + wd) + print(wd_list1.parseString(source)) + + # often, delimiters that are useful during parsing are just in the + # way afterward - use Suppress to keep them out of the parsed output + wd_list2 = wd + ZeroOrMore(Suppress(',') + wd) + print(wd_list2.parseString(source)) + prints:: + ['a', ',', 'b', ',', 'c', ',', 'd'] + ['a', 'b', 'c', 'd'] + (See also L{delimitedList}.) + """ + def postParse( self, instring, loc, tokenlist ): + return [] + + def suppress( self ): + return self + + +class OnlyOnce(object): + """ + Wrapper for parse actions, to ensure they are only called once. + """ + def __init__(self, methodCall): + self.callable = _trim_arity(methodCall) + self.called = False + def __call__(self,s,l,t): + if not self.called: + results = self.callable(s,l,t) + self.called = True + return results + raise ParseException(s,l,"") + def reset(self): + self.called = False + +def traceParseAction(f): + """ + Decorator for debugging parse actions. + + When the parse action is called, this decorator will print C{">> entering I{method-name}(line:I{current_source_line}, I{parse_location}, I{matched_tokens})".} + When the parse action completes, the decorator will print C{"<<"} followed by the returned value, or any exception that the parse action raised. + + Example:: + wd = Word(alphas) + + @traceParseAction + def remove_duplicate_chars(tokens): + return ''.join(sorted(set(''.join(tokens))) + + wds = OneOrMore(wd).setParseAction(remove_duplicate_chars) + print(wds.parseString("slkdjs sld sldd sdlf sdljf")) + prints:: + >>entering remove_duplicate_chars(line: 'slkdjs sld sldd sdlf sdljf', 0, (['slkdjs', 'sld', 'sldd', 'sdlf', 'sdljf'], {})) + <<leaving remove_duplicate_chars (ret: 'dfjkls') + ['dfjkls'] + """ + f = _trim_arity(f) + def z(*paArgs): + thisFunc = f.__name__ + s,l,t = paArgs[-3:] + if len(paArgs)>3: + thisFunc = paArgs[0].__class__.__name__ + '.' + thisFunc + sys.stderr.write( ">>entering %s(line: '%s', %d, %r)\n" % (thisFunc,line(l,s),l,t) ) + try: + ret = f(*paArgs) + except Exception as exc: + sys.stderr.write( "<<leaving %s (exception: %s)\n" % (thisFunc,exc) ) + raise + sys.stderr.write( "<<leaving %s (ret: %r)\n" % (thisFunc,ret) ) + return ret + try: + z.__name__ = f.__name__ + except AttributeError: + pass + return z + +# +# global helpers +# +def delimitedList( expr, delim=",", combine=False ): + """ + Helper to define a delimited list of expressions - the delimiter defaults to ','. + By default, the list elements and delimiters can have intervening whitespace, and + comments, but this can be overridden by passing C{combine=True} in the constructor. + If C{combine} is set to C{True}, the matching tokens are returned as a single token + string, with the delimiters included; otherwise, the matching tokens are returned + as a list of tokens, with the delimiters suppressed. + + Example:: + delimitedList(Word(alphas)).parseString("aa,bb,cc") # -> ['aa', 'bb', 'cc'] + delimitedList(Word(hexnums), delim=':', combine=True).parseString("AA:BB:CC:DD:EE") # -> ['AA:BB:CC:DD:EE'] + """ + dlName = _ustr(expr)+" ["+_ustr(delim)+" "+_ustr(expr)+"]..." + if combine: + return Combine( expr + ZeroOrMore( delim + expr ) ).setName(dlName) + else: + return ( expr + ZeroOrMore( Suppress( delim ) + expr ) ).setName(dlName) + +def countedArray( expr, intExpr=None ): + """ + Helper to define a counted list of expressions. + This helper defines a pattern of the form:: + integer expr expr expr... + where the leading integer tells how many expr expressions follow. + The matched tokens returns the array of expr tokens as a list - the leading count token is suppressed. + + If C{intExpr} is specified, it should be a pyparsing expression that produces an integer value. + + Example:: + countedArray(Word(alphas)).parseString('2 ab cd ef') # -> ['ab', 'cd'] + + # in this parser, the leading integer value is given in binary, + # '10' indicating that 2 values are in the array + binaryConstant = Word('01').setParseAction(lambda t: int(t[0], 2)) + countedArray(Word(alphas), intExpr=binaryConstant).parseString('10 ab cd ef') # -> ['ab', 'cd'] + """ + arrayExpr = Forward() + def countFieldParseAction(s,l,t): + n = t[0] + arrayExpr << (n and Group(And([expr]*n)) or Group(empty)) + return [] + if intExpr is None: + intExpr = Word(nums).setParseAction(lambda t:int(t[0])) + else: + intExpr = intExpr.copy() + intExpr.setName("arrayLen") + intExpr.addParseAction(countFieldParseAction, callDuringTry=True) + return ( intExpr + arrayExpr ).setName('(len) ' + _ustr(expr) + '...') + +def _flatten(L): + ret = [] + for i in L: + if isinstance(i,list): + ret.extend(_flatten(i)) + else: + ret.append(i) + return ret + +def matchPreviousLiteral(expr): + """ + Helper to define an expression that is indirectly defined from + the tokens matched in a previous expression, that is, it looks + for a 'repeat' of a previous expression. For example:: + first = Word(nums) + second = matchPreviousLiteral(first) + matchExpr = first + ":" + second + will match C{"1:1"}, but not C{"1:2"}. Because this matches a + previous literal, will also match the leading C{"1:1"} in C{"1:10"}. + If this is not desired, use C{matchPreviousExpr}. + Do I{not} use with packrat parsing enabled. + """ + rep = Forward() + def copyTokenToRepeater(s,l,t): + if t: + if len(t) == 1: + rep << t[0] + else: + # flatten t tokens + tflat = _flatten(t.asList()) + rep << And(Literal(tt) for tt in tflat) + else: + rep << Empty() + expr.addParseAction(copyTokenToRepeater, callDuringTry=True) + rep.setName('(prev) ' + _ustr(expr)) + return rep + +def matchPreviousExpr(expr): + """ + Helper to define an expression that is indirectly defined from + the tokens matched in a previous expression, that is, it looks + for a 'repeat' of a previous expression. For example:: + first = Word(nums) + second = matchPreviousExpr(first) + matchExpr = first + ":" + second + will match C{"1:1"}, but not C{"1:2"}. Because this matches by + expressions, will I{not} match the leading C{"1:1"} in C{"1:10"}; + the expressions are evaluated first, and then compared, so + C{"1"} is compared with C{"10"}. + Do I{not} use with packrat parsing enabled. + """ + rep = Forward() + e2 = expr.copy() + rep <<= e2 + def copyTokenToRepeater(s,l,t): + matchTokens = _flatten(t.asList()) + def mustMatchTheseTokens(s,l,t): + theseTokens = _flatten(t.asList()) + if theseTokens != matchTokens: + raise ParseException("",0,"") + rep.setParseAction( mustMatchTheseTokens, callDuringTry=True ) + expr.addParseAction(copyTokenToRepeater, callDuringTry=True) + rep.setName('(prev) ' + _ustr(expr)) + return rep + +def _escapeRegexRangeChars(s): + #~ escape these chars: ^-] + for c in r"\^-]": + s = s.replace(c,_bslash+c) + s = s.replace("\n",r"\n") + s = s.replace("\t",r"\t") + return _ustr(s) + +def oneOf( strs, caseless=False, useRegex=True ): + """ + Helper to quickly define a set of alternative Literals, and makes sure to do + longest-first testing when there is a conflict, regardless of the input order, + but returns a C{L{MatchFirst}} for best performance. + + Parameters: + - strs - a string of space-delimited literals, or a collection of string literals + - caseless - (default=C{False}) - treat all literals as caseless + - useRegex - (default=C{True}) - as an optimization, will generate a Regex + object; otherwise, will generate a C{MatchFirst} object (if C{caseless=True}, or + if creating a C{Regex} raises an exception) + + Example:: + comp_oper = oneOf("< = > <= >= !=") + var = Word(alphas) + number = Word(nums) + term = var | number + comparison_expr = term + comp_oper + term + print(comparison_expr.searchString("B = 12 AA=23 B<=AA AA>12")) + prints:: + [['B', '=', '12'], ['AA', '=', '23'], ['B', '<=', 'AA'], ['AA', '>', '12']] + """ + if caseless: + isequal = ( lambda a,b: a.upper() == b.upper() ) + masks = ( lambda a,b: b.upper().startswith(a.upper()) ) + parseElementClass = CaselessLiteral + else: + isequal = ( lambda a,b: a == b ) + masks = ( lambda a,b: b.startswith(a) ) + parseElementClass = Literal + + symbols = [] + if isinstance(strs,basestring): + symbols = strs.split() + elif isinstance(strs, collections.Iterable): + symbols = list(strs) + else: + warnings.warn("Invalid argument to oneOf, expected string or iterable", + SyntaxWarning, stacklevel=2) + if not symbols: + return NoMatch() + + i = 0 + while i < len(symbols)-1: + cur = symbols[i] + for j,other in enumerate(symbols[i+1:]): + if ( isequal(other, cur) ): + del symbols[i+j+1] + break + elif ( masks(cur, other) ): + del symbols[i+j+1] + symbols.insert(i,other) + cur = other + break + else: + i += 1 + + if not caseless and useRegex: + #~ print (strs,"->", "|".join( [ _escapeRegexChars(sym) for sym in symbols] )) + try: + if len(symbols)==len("".join(symbols)): + return Regex( "[%s]" % "".join(_escapeRegexRangeChars(sym) for sym in symbols) ).setName(' | '.join(symbols)) + else: + return Regex( "|".join(re.escape(sym) for sym in symbols) ).setName(' | '.join(symbols)) + except Exception: + warnings.warn("Exception creating Regex for oneOf, building MatchFirst", + SyntaxWarning, stacklevel=2) + + + # last resort, just use MatchFirst + return MatchFirst(parseElementClass(sym) for sym in symbols).setName(' | '.join(symbols)) + +def dictOf( key, value ): + """ + Helper to easily and clearly define a dictionary by specifying the respective patterns + for the key and value. Takes care of defining the C{L{Dict}}, C{L{ZeroOrMore}}, and C{L{Group}} tokens + in the proper order. The key pattern can include delimiting markers or punctuation, + as long as they are suppressed, thereby leaving the significant key text. The value + pattern can include named results, so that the C{Dict} results can include named token + fields. + + Example:: + text = "shape: SQUARE posn: upper left color: light blue texture: burlap" + attr_expr = (label + Suppress(':') + OneOrMore(data_word, stopOn=label).setParseAction(' '.join)) + print(OneOrMore(attr_expr).parseString(text).dump()) + + attr_label = label + attr_value = Suppress(':') + OneOrMore(data_word, stopOn=label).setParseAction(' '.join) + + # similar to Dict, but simpler call format + result = dictOf(attr_label, attr_value).parseString(text) + print(result.dump()) + print(result['shape']) + print(result.shape) # object attribute access works too + print(result.asDict()) + prints:: + [['shape', 'SQUARE'], ['posn', 'upper left'], ['color', 'light blue'], ['texture', 'burlap']] + - color: light blue + - posn: upper left + - shape: SQUARE + - texture: burlap + SQUARE + SQUARE + {'color': 'light blue', 'shape': 'SQUARE', 'posn': 'upper left', 'texture': 'burlap'} + """ + return Dict( ZeroOrMore( Group ( key + value ) ) ) + +def originalTextFor(expr, asString=True): + """ + Helper to return the original, untokenized text for a given expression. Useful to + restore the parsed fields of an HTML start tag into the raw tag text itself, or to + revert separate tokens with intervening whitespace back to the original matching + input text. By default, returns astring containing the original parsed text. + + If the optional C{asString} argument is passed as C{False}, then the return value is a + C{L{ParseResults}} containing any results names that were originally matched, and a + single token containing the original matched text from the input string. So if + the expression passed to C{L{originalTextFor}} contains expressions with defined + results names, you must set C{asString} to C{False} if you want to preserve those + results name values. + + Example:: + src = "this is test <b> bold <i>text</i> </b> normal text " + for tag in ("b","i"): + opener,closer = makeHTMLTags(tag) + patt = originalTextFor(opener + SkipTo(closer) + closer) + print(patt.searchString(src)[0]) + prints:: + ['<b> bold <i>text</i> </b>'] + ['<i>text</i>'] + """ + locMarker = Empty().setParseAction(lambda s,loc,t: loc) + endlocMarker = locMarker.copy() + endlocMarker.callPreparse = False + matchExpr = locMarker("_original_start") + expr + endlocMarker("_original_end") + if asString: + extractText = lambda s,l,t: s[t._original_start:t._original_end] + else: + def extractText(s,l,t): + t[:] = [s[t.pop('_original_start'):t.pop('_original_end')]] + matchExpr.setParseAction(extractText) + matchExpr.ignoreExprs = expr.ignoreExprs + return matchExpr + +def ungroup(expr): + """ + Helper to undo pyparsing's default grouping of And expressions, even + if all but one are non-empty. + """ + return TokenConverter(expr).setParseAction(lambda t:t[0]) + +def locatedExpr(expr): + """ + Helper to decorate a returned token with its starting and ending locations in the input string. + This helper adds the following results names: + - locn_start = location where matched expression begins + - locn_end = location where matched expression ends + - value = the actual parsed results + + Be careful if the input text contains C{<TAB>} characters, you may want to call + C{L{ParserElement.parseWithTabs}} + + Example:: + wd = Word(alphas) + for match in locatedExpr(wd).searchString("ljsdf123lksdjjf123lkkjj1222"): + print(match) + prints:: + [[0, 'ljsdf', 5]] + [[8, 'lksdjjf', 15]] + [[18, 'lkkjj', 23]] + """ + locator = Empty().setParseAction(lambda s,l,t: l) + return Group(locator("locn_start") + expr("value") + locator.copy().leaveWhitespace()("locn_end")) + + +# convenience constants for positional expressions +empty = Empty().setName("empty") +lineStart = LineStart().setName("lineStart") +lineEnd = LineEnd().setName("lineEnd") +stringStart = StringStart().setName("stringStart") +stringEnd = StringEnd().setName("stringEnd") + +_escapedPunc = Word( _bslash, r"\[]-*.$+^?()~ ", exact=2 ).setParseAction(lambda s,l,t:t[0][1]) +_escapedHexChar = Regex(r"\\0?[xX][0-9a-fA-F]+").setParseAction(lambda s,l,t:unichr(int(t[0].lstrip(r'\0x'),16))) +_escapedOctChar = Regex(r"\\0[0-7]+").setParseAction(lambda s,l,t:unichr(int(t[0][1:],8))) +_singleChar = _escapedPunc | _escapedHexChar | _escapedOctChar | Word(printables, excludeChars=r'\]', exact=1) | Regex(r"\w", re.UNICODE) +_charRange = Group(_singleChar + Suppress("-") + _singleChar) +_reBracketExpr = Literal("[") + Optional("^").setResultsName("negate") + Group( OneOrMore( _charRange | _singleChar ) ).setResultsName("body") + "]" + +def srange(s): + r""" + Helper to easily define string ranges for use in Word construction. Borrows + syntax from regexp '[]' string range definitions:: + srange("[0-9]") -> "0123456789" + srange("[a-z]") -> "abcdefghijklmnopqrstuvwxyz" + srange("[a-z$_]") -> "abcdefghijklmnopqrstuvwxyz$_" + The input string must be enclosed in []'s, and the returned string is the expanded + character set joined into a single string. + The values enclosed in the []'s may be: + - a single character + - an escaped character with a leading backslash (such as C{\-} or C{\]}) + - an escaped hex character with a leading C{'\x'} (C{\x21}, which is a C{'!'} character) + (C{\0x##} is also supported for backwards compatibility) + - an escaped octal character with a leading C{'\0'} (C{\041}, which is a C{'!'} character) + - a range of any of the above, separated by a dash (C{'a-z'}, etc.) + - any combination of the above (C{'aeiouy'}, C{'a-zA-Z0-9_$'}, etc.) + """ + _expanded = lambda p: p if not isinstance(p,ParseResults) else ''.join(unichr(c) for c in range(ord(p[0]),ord(p[1])+1)) + try: + return "".join(_expanded(part) for part in _reBracketExpr.parseString(s).body) + except Exception: + return "" + +def matchOnlyAtCol(n): + """ + Helper method for defining parse actions that require matching at a specific + column in the input text. + """ + def verifyCol(strg,locn,toks): + if col(locn,strg) != n: + raise ParseException(strg,locn,"matched token not at column %d" % n) + return verifyCol + +def replaceWith(replStr): + """ + Helper method for common parse actions that simply return a literal value. Especially + useful when used with C{L{transformString<ParserElement.transformString>}()}. + + Example:: + num = Word(nums).setParseAction(lambda toks: int(toks[0])) + na = oneOf("N/A NA").setParseAction(replaceWith(math.nan)) + term = na | num + + OneOrMore(term).parseString("324 234 N/A 234") # -> [324, 234, nan, 234] + """ + return lambda s,l,t: [replStr] + +def removeQuotes(s,l,t): + """ + Helper parse action for removing quotation marks from parsed quoted strings. + + Example:: + # by default, quotation marks are included in parsed results + quotedString.parseString("'Now is the Winter of our Discontent'") # -> ["'Now is the Winter of our Discontent'"] + + # use removeQuotes to strip quotation marks from parsed results + quotedString.setParseAction(removeQuotes) + quotedString.parseString("'Now is the Winter of our Discontent'") # -> ["Now is the Winter of our Discontent"] + """ + return t[0][1:-1] + +def tokenMap(func, *args): + """ + Helper to define a parse action by mapping a function to all elements of a ParseResults list.If any additional + args are passed, they are forwarded to the given function as additional arguments after + the token, as in C{hex_integer = Word(hexnums).setParseAction(tokenMap(int, 16))}, which will convert the + parsed data to an integer using base 16. + + Example (compare the last to example in L{ParserElement.transformString}:: + hex_ints = OneOrMore(Word(hexnums)).setParseAction(tokenMap(int, 16)) + hex_ints.runTests(''' + 00 11 22 aa FF 0a 0d 1a + ''') + + upperword = Word(alphas).setParseAction(tokenMap(str.upper)) + OneOrMore(upperword).runTests(''' + my kingdom for a horse + ''') + + wd = Word(alphas).setParseAction(tokenMap(str.title)) + OneOrMore(wd).setParseAction(' '.join).runTests(''' + now is the winter of our discontent made glorious summer by this sun of york + ''') + prints:: + 00 11 22 aa FF 0a 0d 1a + [0, 17, 34, 170, 255, 10, 13, 26] + + my kingdom for a horse + ['MY', 'KINGDOM', 'FOR', 'A', 'HORSE'] + + now is the winter of our discontent made glorious summer by this sun of york + ['Now Is The Winter Of Our Discontent Made Glorious Summer By This Sun Of York'] + """ + def pa(s,l,t): + return [func(tokn, *args) for tokn in t] + + try: + func_name = getattr(func, '__name__', + getattr(func, '__class__').__name__) + except Exception: + func_name = str(func) + pa.__name__ = func_name + + return pa + +upcaseTokens = tokenMap(lambda t: _ustr(t).upper()) +"""(Deprecated) Helper parse action to convert tokens to upper case. Deprecated in favor of L{pyparsing_common.upcaseTokens}""" + +downcaseTokens = tokenMap(lambda t: _ustr(t).lower()) +"""(Deprecated) Helper parse action to convert tokens to lower case. Deprecated in favor of L{pyparsing_common.downcaseTokens}""" + +def _makeTags(tagStr, xml): + """Internal helper to construct opening and closing tag expressions, given a tag name""" + if isinstance(tagStr,basestring): + resname = tagStr + tagStr = Keyword(tagStr, caseless=not xml) + else: + resname = tagStr.name + + tagAttrName = Word(alphas,alphanums+"_-:") + if (xml): + tagAttrValue = dblQuotedString.copy().setParseAction( removeQuotes ) + openTag = Suppress("<") + tagStr("tag") + \ + Dict(ZeroOrMore(Group( tagAttrName + Suppress("=") + tagAttrValue ))) + \ + Optional("/",default=[False]).setResultsName("empty").setParseAction(lambda s,l,t:t[0]=='/') + Suppress(">") + else: + printablesLessRAbrack = "".join(c for c in printables if c not in ">") + tagAttrValue = quotedString.copy().setParseAction( removeQuotes ) | Word(printablesLessRAbrack) + openTag = Suppress("<") + tagStr("tag") + \ + Dict(ZeroOrMore(Group( tagAttrName.setParseAction(downcaseTokens) + \ + Optional( Suppress("=") + tagAttrValue ) ))) + \ + Optional("/",default=[False]).setResultsName("empty").setParseAction(lambda s,l,t:t[0]=='/') + Suppress(">") + closeTag = Combine(_L("</") + tagStr + ">") + + openTag = openTag.setResultsName("start"+"".join(resname.replace(":"," ").title().split())).setName("<%s>" % resname) + closeTag = closeTag.setResultsName("end"+"".join(resname.replace(":"," ").title().split())).setName("</%s>" % resname) + openTag.tag = resname + closeTag.tag = resname + return openTag, closeTag + +def makeHTMLTags(tagStr): + """ + Helper to construct opening and closing tag expressions for HTML, given a tag name. Matches + tags in either upper or lower case, attributes with namespaces and with quoted or unquoted values. + + Example:: + text = '<td>More info at the <a href="http://pyparsing.wikispaces.com">pyparsing</a> wiki page</td>' + # makeHTMLTags returns pyparsing expressions for the opening and closing tags as a 2-tuple + a,a_end = makeHTMLTags("A") + link_expr = a + SkipTo(a_end)("link_text") + a_end + + for link in link_expr.searchString(text): + # attributes in the <A> tag (like "href" shown here) are also accessible as named results + print(link.link_text, '->', link.href) + prints:: + pyparsing -> http://pyparsing.wikispaces.com + """ + return _makeTags( tagStr, False ) + +def makeXMLTags(tagStr): + """ + Helper to construct opening and closing tag expressions for XML, given a tag name. Matches + tags only in the given upper/lower case. + + Example: similar to L{makeHTMLTags} + """ + return _makeTags( tagStr, True ) + +def withAttribute(*args,**attrDict): + """ + Helper to create a validating parse action to be used with start tags created + with C{L{makeXMLTags}} or C{L{makeHTMLTags}}. Use C{withAttribute} to qualify a starting tag + with a required attribute value, to avoid false matches on common tags such as + C{<TD>} or C{<DIV>}. + + Call C{withAttribute} with a series of attribute names and values. Specify the list + of filter attributes names and values as: + - keyword arguments, as in C{(align="right")}, or + - as an explicit dict with C{**} operator, when an attribute name is also a Python + reserved word, as in C{**{"class":"Customer", "align":"right"}} + - a list of name-value tuples, as in ( ("ns1:class", "Customer"), ("ns2:align","right") ) + For attribute names with a namespace prefix, you must use the second form. Attribute + names are matched insensitive to upper/lower case. + + If just testing for C{class} (with or without a namespace), use C{L{withClass}}. + + To verify that the attribute exists, but without specifying a value, pass + C{withAttribute.ANY_VALUE} as the value. + + Example:: + html = ''' + <div> + Some text + <div type="grid">1 4 0 1 0</div> + <div type="graph">1,3 2,3 1,1</div> + <div>this has no type</div> + </div> + + ''' + div,div_end = makeHTMLTags("div") + + # only match div tag having a type attribute with value "grid" + div_grid = div().setParseAction(withAttribute(type="grid")) + grid_expr = div_grid + SkipTo(div | div_end)("body") + for grid_header in grid_expr.searchString(html): + print(grid_header.body) + + # construct a match with any div tag having a type attribute, regardless of the value + div_any_type = div().setParseAction(withAttribute(type=withAttribute.ANY_VALUE)) + div_expr = div_any_type + SkipTo(div | div_end)("body") + for div_header in div_expr.searchString(html): + print(div_header.body) + prints:: + 1 4 0 1 0 + + 1 4 0 1 0 + 1,3 2,3 1,1 + """ + if args: + attrs = args[:] + else: + attrs = attrDict.items() + attrs = [(k,v) for k,v in attrs] + def pa(s,l,tokens): + for attrName,attrValue in attrs: + if attrName not in tokens: + raise ParseException(s,l,"no matching attribute " + attrName) + if attrValue != withAttribute.ANY_VALUE and tokens[attrName] != attrValue: + raise ParseException(s,l,"attribute '%s' has value '%s', must be '%s'" % + (attrName, tokens[attrName], attrValue)) + return pa +withAttribute.ANY_VALUE = object() + +def withClass(classname, namespace=''): + """ + Simplified version of C{L{withAttribute}} when matching on a div class - made + difficult because C{class} is a reserved word in Python. + + Example:: + html = ''' + <div> + Some text + <div class="grid">1 4 0 1 0</div> + <div class="graph">1,3 2,3 1,1</div> + <div>this <div> has no class</div> + </div> + + ''' + div,div_end = makeHTMLTags("div") + div_grid = div().setParseAction(withClass("grid")) + + grid_expr = div_grid + SkipTo(div | div_end)("body") + for grid_header in grid_expr.searchString(html): + print(grid_header.body) + + div_any_type = div().setParseAction(withClass(withAttribute.ANY_VALUE)) + div_expr = div_any_type + SkipTo(div | div_end)("body") + for div_header in div_expr.searchString(html): + print(div_header.body) + prints:: + 1 4 0 1 0 + + 1 4 0 1 0 + 1,3 2,3 1,1 + """ + classattr = "%s:class" % namespace if namespace else "class" + return withAttribute(**{classattr : classname}) + +opAssoc = _Constants() +opAssoc.LEFT = object() +opAssoc.RIGHT = object() + +def infixNotation( baseExpr, opList, lpar=Suppress('('), rpar=Suppress(')') ): + """ + Helper method for constructing grammars of expressions made up of + operators working in a precedence hierarchy. Operators may be unary or + binary, left- or right-associative. Parse actions can also be attached + to operator expressions. The generated parser will also recognize the use + of parentheses to override operator precedences (see example below). + + Note: if you define a deep operator list, you may see performance issues + when using infixNotation. See L{ParserElement.enablePackrat} for a + mechanism to potentially improve your parser performance. + + Parameters: + - baseExpr - expression representing the most basic element for the nested + - opList - list of tuples, one for each operator precedence level in the + expression grammar; each tuple is of the form + (opExpr, numTerms, rightLeftAssoc, parseAction), where: + - opExpr is the pyparsing expression for the operator; + may also be a string, which will be converted to a Literal; + if numTerms is 3, opExpr is a tuple of two expressions, for the + two operators separating the 3 terms + - numTerms is the number of terms for this operator (must + be 1, 2, or 3) + - rightLeftAssoc is the indicator whether the operator is + right or left associative, using the pyparsing-defined + constants C{opAssoc.RIGHT} and C{opAssoc.LEFT}. + - parseAction is the parse action to be associated with + expressions matching this operator expression (the + parse action tuple member may be omitted) + - lpar - expression for matching left-parentheses (default=C{Suppress('(')}) + - rpar - expression for matching right-parentheses (default=C{Suppress(')')}) + + Example:: + # simple example of four-function arithmetic with ints and variable names + integer = pyparsing_common.signed_integer + varname = pyparsing_common.identifier + + arith_expr = infixNotation(integer | varname, + [ + ('-', 1, opAssoc.RIGHT), + (oneOf('* /'), 2, opAssoc.LEFT), + (oneOf('+ -'), 2, opAssoc.LEFT), + ]) + + arith_expr.runTests(''' + 5+3*6 + (5+3)*6 + -2--11 + ''', fullDump=False) + prints:: + 5+3*6 + [[5, '+', [3, '*', 6]]] + + (5+3)*6 + [[[5, '+', 3], '*', 6]] + + -2--11 + [[['-', 2], '-', ['-', 11]]] + """ + ret = Forward() + lastExpr = baseExpr | ( lpar + ret + rpar ) + for i,operDef in enumerate(opList): + opExpr,arity,rightLeftAssoc,pa = (operDef + (None,))[:4] + termName = "%s term" % opExpr if arity < 3 else "%s%s term" % opExpr + if arity == 3: + if opExpr is None or len(opExpr) != 2: + raise ValueError("if numterms=3, opExpr must be a tuple or list of two expressions") + opExpr1, opExpr2 = opExpr + thisExpr = Forward().setName(termName) + if rightLeftAssoc == opAssoc.LEFT: + if arity == 1: + matchExpr = FollowedBy(lastExpr + opExpr) + Group( lastExpr + OneOrMore( opExpr ) ) + elif arity == 2: + if opExpr is not None: + matchExpr = FollowedBy(lastExpr + opExpr + lastExpr) + Group( lastExpr + OneOrMore( opExpr + lastExpr ) ) + else: + matchExpr = FollowedBy(lastExpr+lastExpr) + Group( lastExpr + OneOrMore(lastExpr) ) + elif arity == 3: + matchExpr = FollowedBy(lastExpr + opExpr1 + lastExpr + opExpr2 + lastExpr) + \ + Group( lastExpr + opExpr1 + lastExpr + opExpr2 + lastExpr ) + else: + raise ValueError("operator must be unary (1), binary (2), or ternary (3)") + elif rightLeftAssoc == opAssoc.RIGHT: + if arity == 1: + # try to avoid LR with this extra test + if not isinstance(opExpr, Optional): + opExpr = Optional(opExpr) + matchExpr = FollowedBy(opExpr.expr + thisExpr) + Group( opExpr + thisExpr ) + elif arity == 2: + if opExpr is not None: + matchExpr = FollowedBy(lastExpr + opExpr + thisExpr) + Group( lastExpr + OneOrMore( opExpr + thisExpr ) ) + else: + matchExpr = FollowedBy(lastExpr + thisExpr) + Group( lastExpr + OneOrMore( thisExpr ) ) + elif arity == 3: + matchExpr = FollowedBy(lastExpr + opExpr1 + thisExpr + opExpr2 + thisExpr) + \ + Group( lastExpr + opExpr1 + thisExpr + opExpr2 + thisExpr ) + else: + raise ValueError("operator must be unary (1), binary (2), or ternary (3)") + else: + raise ValueError("operator must indicate right or left associativity") + if pa: + matchExpr.setParseAction( pa ) + thisExpr <<= ( matchExpr.setName(termName) | lastExpr ) + lastExpr = thisExpr + ret <<= lastExpr + return ret + +operatorPrecedence = infixNotation +"""(Deprecated) Former name of C{L{infixNotation}}, will be dropped in a future release.""" + +dblQuotedString = Combine(Regex(r'"(?:[^"\n\r\\]|(?:"")|(?:\\(?:[^x]|x[0-9a-fA-F]+)))*')+'"').setName("string enclosed in double quotes") +sglQuotedString = Combine(Regex(r"'(?:[^'\n\r\\]|(?:'')|(?:\\(?:[^x]|x[0-9a-fA-F]+)))*")+"'").setName("string enclosed in single quotes") +quotedString = Combine(Regex(r'"(?:[^"\n\r\\]|(?:"")|(?:\\(?:[^x]|x[0-9a-fA-F]+)))*')+'"'| + Regex(r"'(?:[^'\n\r\\]|(?:'')|(?:\\(?:[^x]|x[0-9a-fA-F]+)))*")+"'").setName("quotedString using single or double quotes") +unicodeString = Combine(_L('u') + quotedString.copy()).setName("unicode string literal") + +def nestedExpr(opener="(", closer=")", content=None, ignoreExpr=quotedString.copy()): + """ + Helper method for defining nested lists enclosed in opening and closing + delimiters ("(" and ")" are the default). + + Parameters: + - opener - opening character for a nested list (default=C{"("}); can also be a pyparsing expression + - closer - closing character for a nested list (default=C{")"}); can also be a pyparsing expression + - content - expression for items within the nested lists (default=C{None}) + - ignoreExpr - expression for ignoring opening and closing delimiters (default=C{quotedString}) + + If an expression is not provided for the content argument, the nested + expression will capture all whitespace-delimited content between delimiters + as a list of separate values. + + Use the C{ignoreExpr} argument to define expressions that may contain + opening or closing characters that should not be treated as opening + or closing characters for nesting, such as quotedString or a comment + expression. Specify multiple expressions using an C{L{Or}} or C{L{MatchFirst}}. + The default is L{quotedString}, but if no expressions are to be ignored, + then pass C{None} for this argument. + + Example:: + data_type = oneOf("void int short long char float double") + decl_data_type = Combine(data_type + Optional(Word('*'))) + ident = Word(alphas+'_', alphanums+'_') + number = pyparsing_common.number + arg = Group(decl_data_type + ident) + LPAR,RPAR = map(Suppress, "()") + + code_body = nestedExpr('{', '}', ignoreExpr=(quotedString | cStyleComment)) + + c_function = (decl_data_type("type") + + ident("name") + + LPAR + Optional(delimitedList(arg), [])("args") + RPAR + + code_body("body")) + c_function.ignore(cStyleComment) + + source_code = ''' + int is_odd(int x) { + return (x%2); + } + + int dec_to_hex(char hchar) { + if (hchar >= '0' && hchar <= '9') { + return (ord(hchar)-ord('0')); + } else { + return (10+ord(hchar)-ord('A')); + } + } + ''' + for func in c_function.searchString(source_code): + print("%(name)s (%(type)s) args: %(args)s" % func) + + prints:: + is_odd (int) args: [['int', 'x']] + dec_to_hex (int) args: [['char', 'hchar']] + """ + if opener == closer: + raise ValueError("opening and closing strings cannot be the same") + if content is None: + if isinstance(opener,basestring) and isinstance(closer,basestring): + if len(opener) == 1 and len(closer)==1: + if ignoreExpr is not None: + content = (Combine(OneOrMore(~ignoreExpr + + CharsNotIn(opener+closer+ParserElement.DEFAULT_WHITE_CHARS,exact=1)) + ).setParseAction(lambda t:t[0].strip())) + else: + content = (empty.copy()+CharsNotIn(opener+closer+ParserElement.DEFAULT_WHITE_CHARS + ).setParseAction(lambda t:t[0].strip())) + else: + if ignoreExpr is not None: + content = (Combine(OneOrMore(~ignoreExpr + + ~Literal(opener) + ~Literal(closer) + + CharsNotIn(ParserElement.DEFAULT_WHITE_CHARS,exact=1)) + ).setParseAction(lambda t:t[0].strip())) + else: + content = (Combine(OneOrMore(~Literal(opener) + ~Literal(closer) + + CharsNotIn(ParserElement.DEFAULT_WHITE_CHARS,exact=1)) + ).setParseAction(lambda t:t[0].strip())) + else: + raise ValueError("opening and closing arguments must be strings if no content expression is given") + ret = Forward() + if ignoreExpr is not None: + ret <<= Group( Suppress(opener) + ZeroOrMore( ignoreExpr | ret | content ) + Suppress(closer) ) + else: + ret <<= Group( Suppress(opener) + ZeroOrMore( ret | content ) + Suppress(closer) ) + ret.setName('nested %s%s expression' % (opener,closer)) + return ret + +def indentedBlock(blockStatementExpr, indentStack, indent=True): + """ + Helper method for defining space-delimited indentation blocks, such as + those used to define block statements in Python source code. + + Parameters: + - blockStatementExpr - expression defining syntax of statement that + is repeated within the indented block + - indentStack - list created by caller to manage indentation stack + (multiple statementWithIndentedBlock expressions within a single grammar + should share a common indentStack) + - indent - boolean indicating whether block must be indented beyond the + the current level; set to False for block of left-most statements + (default=C{True}) + + A valid block must contain at least one C{blockStatement}. + + Example:: + data = ''' + def A(z): + A1 + B = 100 + G = A2 + A2 + A3 + B + def BB(a,b,c): + BB1 + def BBA(): + bba1 + bba2 + bba3 + C + D + def spam(x,y): + def eggs(z): + pass + ''' + + + indentStack = [1] + stmt = Forward() + + identifier = Word(alphas, alphanums) + funcDecl = ("def" + identifier + Group( "(" + Optional( delimitedList(identifier) ) + ")" ) + ":") + func_body = indentedBlock(stmt, indentStack) + funcDef = Group( funcDecl + func_body ) + + rvalue = Forward() + funcCall = Group(identifier + "(" + Optional(delimitedList(rvalue)) + ")") + rvalue << (funcCall | identifier | Word(nums)) + assignment = Group(identifier + "=" + rvalue) + stmt << ( funcDef | assignment | identifier ) + + module_body = OneOrMore(stmt) + + parseTree = module_body.parseString(data) + parseTree.pprint() + prints:: + [['def', + 'A', + ['(', 'z', ')'], + ':', + [['A1'], [['B', '=', '100']], [['G', '=', 'A2']], ['A2'], ['A3']]], + 'B', + ['def', + 'BB', + ['(', 'a', 'b', 'c', ')'], + ':', + [['BB1'], [['def', 'BBA', ['(', ')'], ':', [['bba1'], ['bba2'], ['bba3']]]]]], + 'C', + 'D', + ['def', + 'spam', + ['(', 'x', 'y', ')'], + ':', + [[['def', 'eggs', ['(', 'z', ')'], ':', [['pass']]]]]]] + """ + def checkPeerIndent(s,l,t): + if l >= len(s): return + curCol = col(l,s) + if curCol != indentStack[-1]: + if curCol > indentStack[-1]: + raise ParseFatalException(s,l,"illegal nesting") + raise ParseException(s,l,"not a peer entry") + + def checkSubIndent(s,l,t): + curCol = col(l,s) + if curCol > indentStack[-1]: + indentStack.append( curCol ) + else: + raise ParseException(s,l,"not a subentry") + + def checkUnindent(s,l,t): + if l >= len(s): return + curCol = col(l,s) + if not(indentStack and curCol < indentStack[-1] and curCol <= indentStack[-2]): + raise ParseException(s,l,"not an unindent") + indentStack.pop() + + NL = OneOrMore(LineEnd().setWhitespaceChars("\t ").suppress()) + INDENT = (Empty() + Empty().setParseAction(checkSubIndent)).setName('INDENT') + PEER = Empty().setParseAction(checkPeerIndent).setName('') + UNDENT = Empty().setParseAction(checkUnindent).setName('UNINDENT') + if indent: + smExpr = Group( Optional(NL) + + #~ FollowedBy(blockStatementExpr) + + INDENT + (OneOrMore( PEER + Group(blockStatementExpr) + Optional(NL) )) + UNDENT) + else: + smExpr = Group( Optional(NL) + + (OneOrMore( PEER + Group(blockStatementExpr) + Optional(NL) )) ) + blockStatementExpr.ignore(_bslash + LineEnd()) + return smExpr.setName('indented block') + +alphas8bit = srange(r"[\0xc0-\0xd6\0xd8-\0xf6\0xf8-\0xff]") +punc8bit = srange(r"[\0xa1-\0xbf\0xd7\0xf7]") + +anyOpenTag,anyCloseTag = makeHTMLTags(Word(alphas,alphanums+"_:").setName('any tag')) +_htmlEntityMap = dict(zip("gt lt amp nbsp quot apos".split(),'><& "\'')) +commonHTMLEntity = Regex('&(?P<entity>' + '|'.join(_htmlEntityMap.keys()) +");").setName("common HTML entity") +def replaceHTMLEntity(t): + """Helper parser action to replace common HTML entities with their special characters""" + return _htmlEntityMap.get(t.entity) + +# it's easy to get these comment structures wrong - they're very common, so may as well make them available +cStyleComment = Combine(Regex(r"/\*(?:[^*]|\*(?!/))*") + '*/').setName("C style comment") +"Comment of the form C{/* ... */}" + +htmlComment = Regex(r"<!--[\s\S]*?-->").setName("HTML comment") +"Comment of the form C{<!-- ... -->}" + +restOfLine = Regex(r".*").leaveWhitespace().setName("rest of line") +dblSlashComment = Regex(r"//(?:\\\n|[^\n])*").setName("// comment") +"Comment of the form C{// ... (to end of line)}" + +cppStyleComment = Combine(Regex(r"/\*(?:[^*]|\*(?!/))*") + '*/'| dblSlashComment).setName("C++ style comment") +"Comment of either form C{L{cStyleComment}} or C{L{dblSlashComment}}" + +javaStyleComment = cppStyleComment +"Same as C{L{cppStyleComment}}" + +pythonStyleComment = Regex(r"#.*").setName("Python style comment") +"Comment of the form C{# ... (to end of line)}" + +_commasepitem = Combine(OneOrMore(Word(printables, excludeChars=',') + + Optional( Word(" \t") + + ~Literal(",") + ~LineEnd() ) ) ).streamline().setName("commaItem") +commaSeparatedList = delimitedList( Optional( quotedString.copy() | _commasepitem, default="") ).setName("commaSeparatedList") +"""(Deprecated) Predefined expression of 1 or more printable words or quoted strings, separated by commas. + This expression is deprecated in favor of L{pyparsing_common.comma_separated_list}.""" + +# some other useful expressions - using lower-case class name since we are really using this as a namespace +class pyparsing_common: + """ + Here are some common low-level expressions that may be useful in jump-starting parser development: + - numeric forms (L{integers<integer>}, L{reals<real>}, L{scientific notation<sci_real>}) + - common L{programming identifiers<identifier>} + - network addresses (L{MAC<mac_address>}, L{IPv4<ipv4_address>}, L{IPv6<ipv6_address>}) + - ISO8601 L{dates<iso8601_date>} and L{datetime<iso8601_datetime>} + - L{UUID<uuid>} + - L{comma-separated list<comma_separated_list>} + Parse actions: + - C{L{convertToInteger}} + - C{L{convertToFloat}} + - C{L{convertToDate}} + - C{L{convertToDatetime}} + - C{L{stripHTMLTags}} + - C{L{upcaseTokens}} + - C{L{downcaseTokens}} + + Example:: + pyparsing_common.number.runTests(''' + # any int or real number, returned as the appropriate type + 100 + -100 + +100 + 3.14159 + 6.02e23 + 1e-12 + ''') + + pyparsing_common.fnumber.runTests(''' + # any int or real number, returned as float + 100 + -100 + +100 + 3.14159 + 6.02e23 + 1e-12 + ''') + + pyparsing_common.hex_integer.runTests(''' + # hex numbers + 100 + FF + ''') + + pyparsing_common.fraction.runTests(''' + # fractions + 1/2 + -3/4 + ''') + + pyparsing_common.mixed_integer.runTests(''' + # mixed fractions + 1 + 1/2 + -3/4 + 1-3/4 + ''') + + import uuid + pyparsing_common.uuid.setParseAction(tokenMap(uuid.UUID)) + pyparsing_common.uuid.runTests(''' + # uuid + 12345678-1234-5678-1234-567812345678 + ''') + prints:: + # any int or real number, returned as the appropriate type + 100 + [100] + + -100 + [-100] + + +100 + [100] + + 3.14159 + [3.14159] + + 6.02e23 + [6.02e+23] + + 1e-12 + [1e-12] + + # any int or real number, returned as float + 100 + [100.0] + + -100 + [-100.0] + + +100 + [100.0] + + 3.14159 + [3.14159] + + 6.02e23 + [6.02e+23] + + 1e-12 + [1e-12] + + # hex numbers + 100 + [256] + + FF + [255] + + # fractions + 1/2 + [0.5] + + -3/4 + [-0.75] + + # mixed fractions + 1 + [1] + + 1/2 + [0.5] + + -3/4 + [-0.75] + + 1-3/4 + [1.75] + + # uuid + 12345678-1234-5678-1234-567812345678 + [UUID('12345678-1234-5678-1234-567812345678')] + """ + + convertToInteger = tokenMap(int) + """ + Parse action for converting parsed integers to Python int + """ + + convertToFloat = tokenMap(float) + """ + Parse action for converting parsed numbers to Python float + """ + + integer = Word(nums).setName("integer").setParseAction(convertToInteger) + """expression that parses an unsigned integer, returns an int""" + + hex_integer = Word(hexnums).setName("hex integer").setParseAction(tokenMap(int,16)) + """expression that parses a hexadecimal integer, returns an int""" + + signed_integer = Regex(r'[+-]?\d+').setName("signed integer").setParseAction(convertToInteger) + """expression that parses an integer with optional leading sign, returns an int""" + + fraction = (signed_integer().setParseAction(convertToFloat) + '/' + signed_integer().setParseAction(convertToFloat)).setName("fraction") + """fractional expression of an integer divided by an integer, returns a float""" + fraction.addParseAction(lambda t: t[0]/t[-1]) + + mixed_integer = (fraction | signed_integer + Optional(Optional('-').suppress() + fraction)).setName("fraction or mixed integer-fraction") + """mixed integer of the form 'integer - fraction', with optional leading integer, returns float""" + mixed_integer.addParseAction(sum) + + real = Regex(r'[+-]?\d+\.\d*').setName("real number").setParseAction(convertToFloat) + """expression that parses a floating point number and returns a float""" + + sci_real = Regex(r'[+-]?\d+([eE][+-]?\d+|\.\d*([eE][+-]?\d+)?)').setName("real number with scientific notation").setParseAction(convertToFloat) + """expression that parses a floating point number with optional scientific notation and returns a float""" + + # streamlining this expression makes the docs nicer-looking + number = (sci_real | real | signed_integer).streamline() + """any numeric expression, returns the corresponding Python type""" + + fnumber = Regex(r'[+-]?\d+\.?\d*([eE][+-]?\d+)?').setName("fnumber").setParseAction(convertToFloat) + """any int or real number, returned as float""" + + identifier = Word(alphas+'_', alphanums+'_').setName("identifier") + """typical code identifier (leading alpha or '_', followed by 0 or more alphas, nums, or '_')""" + + ipv4_address = Regex(r'(25[0-5]|2[0-4][0-9]|1?[0-9]{1,2})(\.(25[0-5]|2[0-4][0-9]|1?[0-9]{1,2})){3}').setName("IPv4 address") + "IPv4 address (C{0.0.0.0 - 255.255.255.255})" + + _ipv6_part = Regex(r'[0-9a-fA-F]{1,4}').setName("hex_integer") + _full_ipv6_address = (_ipv6_part + (':' + _ipv6_part)*7).setName("full IPv6 address") + _short_ipv6_address = (Optional(_ipv6_part + (':' + _ipv6_part)*(0,6)) + "::" + Optional(_ipv6_part + (':' + _ipv6_part)*(0,6))).setName("short IPv6 address") + _short_ipv6_address.addCondition(lambda t: sum(1 for tt in t if pyparsing_common._ipv6_part.matches(tt)) < 8) + _mixed_ipv6_address = ("::ffff:" + ipv4_address).setName("mixed IPv6 address") + ipv6_address = Combine((_full_ipv6_address | _mixed_ipv6_address | _short_ipv6_address).setName("IPv6 address")).setName("IPv6 address") + "IPv6 address (long, short, or mixed form)" + + mac_address = Regex(r'[0-9a-fA-F]{2}([:.-])[0-9a-fA-F]{2}(?:\1[0-9a-fA-F]{2}){4}').setName("MAC address") + "MAC address xx:xx:xx:xx:xx (may also have '-' or '.' delimiters)" + + @staticmethod + def convertToDate(fmt="%Y-%m-%d"): + """ + Helper to create a parse action for converting parsed date string to Python datetime.date + + Params - + - fmt - format to be passed to datetime.strptime (default=C{"%Y-%m-%d"}) + + Example:: + date_expr = pyparsing_common.iso8601_date.copy() + date_expr.setParseAction(pyparsing_common.convertToDate()) + print(date_expr.parseString("1999-12-31")) + prints:: + [datetime.date(1999, 12, 31)] + """ + def cvt_fn(s,l,t): + try: + return datetime.strptime(t[0], fmt).date() + except ValueError as ve: + raise ParseException(s, l, str(ve)) + return cvt_fn + + @staticmethod + def convertToDatetime(fmt="%Y-%m-%dT%H:%M:%S.%f"): + """ + Helper to create a parse action for converting parsed datetime string to Python datetime.datetime + + Params - + - fmt - format to be passed to datetime.strptime (default=C{"%Y-%m-%dT%H:%M:%S.%f"}) + + Example:: + dt_expr = pyparsing_common.iso8601_datetime.copy() + dt_expr.setParseAction(pyparsing_common.convertToDatetime()) + print(dt_expr.parseString("1999-12-31T23:59:59.999")) + prints:: + [datetime.datetime(1999, 12, 31, 23, 59, 59, 999000)] + """ + def cvt_fn(s,l,t): + try: + return datetime.strptime(t[0], fmt) + except ValueError as ve: + raise ParseException(s, l, str(ve)) + return cvt_fn + + iso8601_date = Regex(r'(?P<year>\d{4})(?:-(?P<month>\d\d)(?:-(?P<day>\d\d))?)?').setName("ISO8601 date") + "ISO8601 date (C{yyyy-mm-dd})" + + iso8601_datetime = Regex(r'(?P<year>\d{4})-(?P<month>\d\d)-(?P<day>\d\d)[T ](?P<hour>\d\d):(?P<minute>\d\d)(:(?P<second>\d\d(\.\d*)?)?)?(?P<tz>Z|[+-]\d\d:?\d\d)?').setName("ISO8601 datetime") + "ISO8601 datetime (C{yyyy-mm-ddThh:mm:ss.s(Z|+-00:00)}) - trailing seconds, milliseconds, and timezone optional; accepts separating C{'T'} or C{' '}" + + uuid = Regex(r'[0-9a-fA-F]{8}(-[0-9a-fA-F]{4}){3}-[0-9a-fA-F]{12}').setName("UUID") + "UUID (C{xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx})" + + _html_stripper = anyOpenTag.suppress() | anyCloseTag.suppress() + @staticmethod + def stripHTMLTags(s, l, tokens): + """ + Parse action to remove HTML tags from web page HTML source + + Example:: + # strip HTML links from normal text + text = '<td>More info at the <a href="http://pyparsing.wikispaces.com">pyparsing</a> wiki page</td>' + td,td_end = makeHTMLTags("TD") + table_text = td + SkipTo(td_end).setParseAction(pyparsing_common.stripHTMLTags)("body") + td_end + + print(table_text.parseString(text).body) # -> 'More info at the pyparsing wiki page' + """ + return pyparsing_common._html_stripper.transformString(tokens[0]) + + _commasepitem = Combine(OneOrMore(~Literal(",") + ~LineEnd() + Word(printables, excludeChars=',') + + Optional( White(" \t") ) ) ).streamline().setName("commaItem") + comma_separated_list = delimitedList( Optional( quotedString.copy() | _commasepitem, default="") ).setName("comma separated list") + """Predefined expression of 1 or more printable words or quoted strings, separated by commas.""" + + upcaseTokens = staticmethod(tokenMap(lambda t: _ustr(t).upper())) + """Parse action to convert tokens to upper case.""" + + downcaseTokens = staticmethod(tokenMap(lambda t: _ustr(t).lower())) + """Parse action to convert tokens to lower case.""" + + +if __name__ == "__main__": + + selectToken = CaselessLiteral("select") + fromToken = CaselessLiteral("from") + + ident = Word(alphas, alphanums + "_$") + + columnName = delimitedList(ident, ".", combine=True).setParseAction(upcaseTokens) + columnNameList = Group(delimitedList(columnName)).setName("columns") + columnSpec = ('*' | columnNameList) + + tableName = delimitedList(ident, ".", combine=True).setParseAction(upcaseTokens) + tableNameList = Group(delimitedList(tableName)).setName("tables") + + simpleSQL = selectToken("command") + columnSpec("columns") + fromToken + tableNameList("tables") + + # demo runTests method, including embedded comments in test string + simpleSQL.runTests(""" + # '*' as column list and dotted table name + select * from SYS.XYZZY + + # caseless match on "SELECT", and casts back to "select" + SELECT * from XYZZY, ABC + + # list of column names, and mixed case SELECT keyword + Select AA,BB,CC from Sys.dual + + # multiple tables + Select A, B, C from Sys.dual, Table2 + + # invalid SELECT keyword - should fail + Xelect A, B, C from Sys.dual + + # incomplete command - should fail + Select + + # invalid column name - should fail + Select ^^^ frox Sys.dual + + """) + + pyparsing_common.number.runTests(""" + 100 + -100 + +100 + 3.14159 + 6.02e23 + 1e-12 + """) + + # any int or real number, returned as float + pyparsing_common.fnumber.runTests(""" + 100 + -100 + +100 + 3.14159 + 6.02e23 + 1e-12 + """) + + pyparsing_common.hex_integer.runTests(""" + 100 + FF + """) + + import uuid + pyparsing_common.uuid.setParseAction(tokenMap(uuid.UUID)) + pyparsing_common.uuid.runTests(""" + 12345678-1234-5678-1234-567812345678 + """) diff --git a/week-0/day-3/venv/lib/python3.6/site-packages/pkg_resources/_vendor/six.py b/week-0/day-3/venv/lib/python3.6/site-packages/pkg_resources/_vendor/six.py new file mode 100644 index 00000000..190c0239 --- /dev/null +++ b/week-0/day-3/venv/lib/python3.6/site-packages/pkg_resources/_vendor/six.py @@ -0,0 +1,868 @@ +"""Utilities for writing code that runs on Python 2 and 3""" + +# Copyright (c) 2010-2015 Benjamin Peterson +# +# Permission is hereby granted, free of charge, to any person obtaining a copy +# of this software and associated documentation files (the "Software"), to deal +# in the Software without restriction, including without limitation the rights +# to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +# copies of the Software, and to permit persons to whom the Software is +# furnished to do so, subject to the following conditions: +# +# The above copyright notice and this permission notice shall be included in all +# copies or substantial portions of the Software. +# +# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +# FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +# AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +# LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +# OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +# SOFTWARE. + +from __future__ import absolute_import + +import functools +import itertools +import operator +import sys +import types + +__author__ = "Benjamin Peterson <benjamin@python.org>" +__version__ = "1.10.0" + + +# Useful for very coarse version differentiation. +PY2 = sys.version_info[0] == 2 +PY3 = sys.version_info[0] == 3 +PY34 = sys.version_info[0:2] >= (3, 4) + +if PY3: + string_types = str, + integer_types = int, + class_types = type, + text_type = str + binary_type = bytes + + MAXSIZE = sys.maxsize +else: + string_types = basestring, + integer_types = (int, long) + class_types = (type, types.ClassType) + text_type = unicode + binary_type = str + + if sys.platform.startswith("java"): + # Jython always uses 32 bits. + MAXSIZE = int((1 << 31) - 1) + else: + # It's possible to have sizeof(long) != sizeof(Py_ssize_t). + class X(object): + + def __len__(self): + return 1 << 31 + try: + len(X()) + except OverflowError: + # 32-bit + MAXSIZE = int((1 << 31) - 1) + else: + # 64-bit + MAXSIZE = int((1 << 63) - 1) + del X + + +def _add_doc(func, doc): + """Add documentation to a function.""" + func.__doc__ = doc + + +def _import_module(name): + """Import module, returning the module after the last dot.""" + __import__(name) + return sys.modules[name] + + +class _LazyDescr(object): + + def __init__(self, name): + self.name = name + + def __get__(self, obj, tp): + result = self._resolve() + setattr(obj, self.name, result) # Invokes __set__. + try: + # This is a bit ugly, but it avoids running this again by + # removing this descriptor. + delattr(obj.__class__, self.name) + except AttributeError: + pass + return result + + +class MovedModule(_LazyDescr): + + def __init__(self, name, old, new=None): + super(MovedModule, self).__init__(name) + if PY3: + if new is None: + new = name + self.mod = new + else: + self.mod = old + + def _resolve(self): + return _import_module(self.mod) + + def __getattr__(self, attr): + _module = self._resolve() + value = getattr(_module, attr) + setattr(self, attr, value) + return value + + +class _LazyModule(types.ModuleType): + + def __init__(self, name): + super(_LazyModule, self).__init__(name) + self.__doc__ = self.__class__.__doc__ + + def __dir__(self): + attrs = ["__doc__", "__name__"] + attrs += [attr.name for attr in self._moved_attributes] + return attrs + + # Subclasses should override this + _moved_attributes = [] + + +class MovedAttribute(_LazyDescr): + + def __init__(self, name, old_mod, new_mod, old_attr=None, new_attr=None): + super(MovedAttribute, self).__init__(name) + if PY3: + if new_mod is None: + new_mod = name + self.mod = new_mod + if new_attr is None: + if old_attr is None: + new_attr = name + else: + new_attr = old_attr + self.attr = new_attr + else: + self.mod = old_mod + if old_attr is None: + old_attr = name + self.attr = old_attr + + def _resolve(self): + module = _import_module(self.mod) + return getattr(module, self.attr) + + +class _SixMetaPathImporter(object): + + """ + A meta path importer to import six.moves and its submodules. + + This class implements a PEP302 finder and loader. It should be compatible + with Python 2.5 and all existing versions of Python3 + """ + + def __init__(self, six_module_name): + self.name = six_module_name + self.known_modules = {} + + def _add_module(self, mod, *fullnames): + for fullname in fullnames: + self.known_modules[self.name + "." + fullname] = mod + + def _get_module(self, fullname): + return self.known_modules[self.name + "." + fullname] + + def find_module(self, fullname, path=None): + if fullname in self.known_modules: + return self + return None + + def __get_module(self, fullname): + try: + return self.known_modules[fullname] + except KeyError: + raise ImportError("This loader does not know module " + fullname) + + def load_module(self, fullname): + try: + # in case of a reload + return sys.modules[fullname] + except KeyError: + pass + mod = self.__get_module(fullname) + if isinstance(mod, MovedModule): + mod = mod._resolve() + else: + mod.__loader__ = self + sys.modules[fullname] = mod + return mod + + def is_package(self, fullname): + """ + Return true, if the named module is a package. + + We need this method to get correct spec objects with + Python 3.4 (see PEP451) + """ + return hasattr(self.__get_module(fullname), "__path__") + + def get_code(self, fullname): + """Return None + + Required, if is_package is implemented""" + self.__get_module(fullname) # eventually raises ImportError + return None + get_source = get_code # same as get_code + +_importer = _SixMetaPathImporter(__name__) + + +class _MovedItems(_LazyModule): + + """Lazy loading of moved objects""" + __path__ = [] # mark as package + + +_moved_attributes = [ + MovedAttribute("cStringIO", "cStringIO", "io", "StringIO"), + MovedAttribute("filter", "itertools", "builtins", "ifilter", "filter"), + MovedAttribute("filterfalse", "itertools", "itertools", "ifilterfalse", "filterfalse"), + MovedAttribute("input", "__builtin__", "builtins", "raw_input", "input"), + MovedAttribute("intern", "__builtin__", "sys"), + MovedAttribute("map", "itertools", "builtins", "imap", "map"), + MovedAttribute("getcwd", "os", "os", "getcwdu", "getcwd"), + MovedAttribute("getcwdb", "os", "os", "getcwd", "getcwdb"), + MovedAttribute("range", "__builtin__", "builtins", "xrange", "range"), + MovedAttribute("reload_module", "__builtin__", "importlib" if PY34 else "imp", "reload"), + MovedAttribute("reduce", "__builtin__", "functools"), + MovedAttribute("shlex_quote", "pipes", "shlex", "quote"), + MovedAttribute("StringIO", "StringIO", "io"), + MovedAttribute("UserDict", "UserDict", "collections"), + MovedAttribute("UserList", "UserList", "collections"), + MovedAttribute("UserString", "UserString", "collections"), + MovedAttribute("xrange", "__builtin__", "builtins", "xrange", "range"), + MovedAttribute("zip", "itertools", "builtins", "izip", "zip"), + MovedAttribute("zip_longest", "itertools", "itertools", "izip_longest", "zip_longest"), + MovedModule("builtins", "__builtin__"), + MovedModule("configparser", "ConfigParser"), + MovedModule("copyreg", "copy_reg"), + MovedModule("dbm_gnu", "gdbm", "dbm.gnu"), + MovedModule("_dummy_thread", "dummy_thread", "_dummy_thread"), + MovedModule("http_cookiejar", "cookielib", "http.cookiejar"), + MovedModule("http_cookies", "Cookie", "http.cookies"), + MovedModule("html_entities", "htmlentitydefs", "html.entities"), + MovedModule("html_parser", "HTMLParser", "html.parser"), + MovedModule("http_client", "httplib", "http.client"), + MovedModule("email_mime_multipart", "email.MIMEMultipart", "email.mime.multipart"), + MovedModule("email_mime_nonmultipart", "email.MIMENonMultipart", "email.mime.nonmultipart"), + MovedModule("email_mime_text", "email.MIMEText", "email.mime.text"), + MovedModule("email_mime_base", "email.MIMEBase", "email.mime.base"), + MovedModule("BaseHTTPServer", "BaseHTTPServer", "http.server"), + MovedModule("CGIHTTPServer", "CGIHTTPServer", "http.server"), + MovedModule("SimpleHTTPServer", "SimpleHTTPServer", "http.server"), + MovedModule("cPickle", "cPickle", "pickle"), + MovedModule("queue", "Queue"), + MovedModule("reprlib", "repr"), + MovedModule("socketserver", "SocketServer"), + MovedModule("_thread", "thread", "_thread"), + MovedModule("tkinter", "Tkinter"), + MovedModule("tkinter_dialog", "Dialog", "tkinter.dialog"), + MovedModule("tkinter_filedialog", "FileDialog", "tkinter.filedialog"), + MovedModule("tkinter_scrolledtext", "ScrolledText", "tkinter.scrolledtext"), + MovedModule("tkinter_simpledialog", "SimpleDialog", "tkinter.simpledialog"), + MovedModule("tkinter_tix", "Tix", "tkinter.tix"), + MovedModule("tkinter_ttk", "ttk", "tkinter.ttk"), + MovedModule("tkinter_constants", "Tkconstants", "tkinter.constants"), + MovedModule("tkinter_dnd", "Tkdnd", "tkinter.dnd"), + MovedModule("tkinter_colorchooser", "tkColorChooser", + "tkinter.colorchooser"), + MovedModule("tkinter_commondialog", "tkCommonDialog", + "tkinter.commondialog"), + MovedModule("tkinter_tkfiledialog", "tkFileDialog", "tkinter.filedialog"), + MovedModule("tkinter_font", "tkFont", "tkinter.font"), + MovedModule("tkinter_messagebox", "tkMessageBox", "tkinter.messagebox"), + MovedModule("tkinter_tksimpledialog", "tkSimpleDialog", + "tkinter.simpledialog"), + MovedModule("urllib_parse", __name__ + ".moves.urllib_parse", "urllib.parse"), + MovedModule("urllib_error", __name__ + ".moves.urllib_error", "urllib.error"), + MovedModule("urllib", __name__ + ".moves.urllib", __name__ + ".moves.urllib"), + MovedModule("urllib_robotparser", "robotparser", "urllib.robotparser"), + MovedModule("xmlrpc_client", "xmlrpclib", "xmlrpc.client"), + MovedModule("xmlrpc_server", "SimpleXMLRPCServer", "xmlrpc.server"), +] +# Add windows specific modules. +if sys.platform == "win32": + _moved_attributes += [ + MovedModule("winreg", "_winreg"), + ] + +for attr in _moved_attributes: + setattr(_MovedItems, attr.name, attr) + if isinstance(attr, MovedModule): + _importer._add_module(attr, "moves." + attr.name) +del attr + +_MovedItems._moved_attributes = _moved_attributes + +moves = _MovedItems(__name__ + ".moves") +_importer._add_module(moves, "moves") + + +class Module_six_moves_urllib_parse(_LazyModule): + + """Lazy loading of moved objects in six.moves.urllib_parse""" + + +_urllib_parse_moved_attributes = [ + MovedAttribute("ParseResult", "urlparse", "urllib.parse"), + MovedAttribute("SplitResult", "urlparse", "urllib.parse"), + MovedAttribute("parse_qs", "urlparse", "urllib.parse"), + MovedAttribute("parse_qsl", "urlparse", "urllib.parse"), + MovedAttribute("urldefrag", "urlparse", "urllib.parse"), + MovedAttribute("urljoin", "urlparse", "urllib.parse"), + MovedAttribute("urlparse", "urlparse", "urllib.parse"), + MovedAttribute("urlsplit", "urlparse", "urllib.parse"), + MovedAttribute("urlunparse", "urlparse", "urllib.parse"), + MovedAttribute("urlunsplit", "urlparse", "urllib.parse"), + MovedAttribute("quote", "urllib", "urllib.parse"), + MovedAttribute("quote_plus", "urllib", "urllib.parse"), + MovedAttribute("unquote", "urllib", "urllib.parse"), + MovedAttribute("unquote_plus", "urllib", "urllib.parse"), + MovedAttribute("urlencode", "urllib", "urllib.parse"), + MovedAttribute("splitquery", "urllib", "urllib.parse"), + MovedAttribute("splittag", "urllib", "urllib.parse"), + MovedAttribute("splituser", "urllib", "urllib.parse"), + MovedAttribute("uses_fragment", "urlparse", "urllib.parse"), + MovedAttribute("uses_netloc", "urlparse", "urllib.parse"), + MovedAttribute("uses_params", "urlparse", "urllib.parse"), + MovedAttribute("uses_query", "urlparse", "urllib.parse"), + MovedAttribute("uses_relative", "urlparse", "urllib.parse"), +] +for attr in _urllib_parse_moved_attributes: + setattr(Module_six_moves_urllib_parse, attr.name, attr) +del attr + +Module_six_moves_urllib_parse._moved_attributes = _urllib_parse_moved_attributes + +_importer._add_module(Module_six_moves_urllib_parse(__name__ + ".moves.urllib_parse"), + "moves.urllib_parse", "moves.urllib.parse") + + +class Module_six_moves_urllib_error(_LazyModule): + + """Lazy loading of moved objects in six.moves.urllib_error""" + + +_urllib_error_moved_attributes = [ + MovedAttribute("URLError", "urllib2", "urllib.error"), + MovedAttribute("HTTPError", "urllib2", "urllib.error"), + MovedAttribute("ContentTooShortError", "urllib", "urllib.error"), +] +for attr in _urllib_error_moved_attributes: + setattr(Module_six_moves_urllib_error, attr.name, attr) +del attr + +Module_six_moves_urllib_error._moved_attributes = _urllib_error_moved_attributes + +_importer._add_module(Module_six_moves_urllib_error(__name__ + ".moves.urllib.error"), + "moves.urllib_error", "moves.urllib.error") + + +class Module_six_moves_urllib_request(_LazyModule): + + """Lazy loading of moved objects in six.moves.urllib_request""" + + +_urllib_request_moved_attributes = [ + MovedAttribute("urlopen", "urllib2", "urllib.request"), + MovedAttribute("install_opener", "urllib2", "urllib.request"), + MovedAttribute("build_opener", "urllib2", "urllib.request"), + MovedAttribute("pathname2url", "urllib", "urllib.request"), + MovedAttribute("url2pathname", "urllib", "urllib.request"), + MovedAttribute("getproxies", "urllib", "urllib.request"), + MovedAttribute("Request", "urllib2", "urllib.request"), + MovedAttribute("OpenerDirector", "urllib2", "urllib.request"), + MovedAttribute("HTTPDefaultErrorHandler", "urllib2", "urllib.request"), + MovedAttribute("HTTPRedirectHandler", "urllib2", "urllib.request"), + MovedAttribute("HTTPCookieProcessor", "urllib2", "urllib.request"), + MovedAttribute("ProxyHandler", "urllib2", "urllib.request"), + MovedAttribute("BaseHandler", "urllib2", "urllib.request"), + MovedAttribute("HTTPPasswordMgr", "urllib2", "urllib.request"), + MovedAttribute("HTTPPasswordMgrWithDefaultRealm", "urllib2", "urllib.request"), + MovedAttribute("AbstractBasicAuthHandler", "urllib2", "urllib.request"), + MovedAttribute("HTTPBasicAuthHandler", "urllib2", "urllib.request"), + MovedAttribute("ProxyBasicAuthHandler", "urllib2", "urllib.request"), + MovedAttribute("AbstractDigestAuthHandler", "urllib2", "urllib.request"), + MovedAttribute("HTTPDigestAuthHandler", "urllib2", "urllib.request"), + MovedAttribute("ProxyDigestAuthHandler", "urllib2", "urllib.request"), + MovedAttribute("HTTPHandler", "urllib2", "urllib.request"), + MovedAttribute("HTTPSHandler", "urllib2", "urllib.request"), + MovedAttribute("FileHandler", "urllib2", "urllib.request"), + MovedAttribute("FTPHandler", "urllib2", "urllib.request"), + MovedAttribute("CacheFTPHandler", "urllib2", "urllib.request"), + MovedAttribute("UnknownHandler", "urllib2", "urllib.request"), + MovedAttribute("HTTPErrorProcessor", "urllib2", "urllib.request"), + MovedAttribute("urlretrieve", "urllib", "urllib.request"), + MovedAttribute("urlcleanup", "urllib", "urllib.request"), + MovedAttribute("URLopener", "urllib", "urllib.request"), + MovedAttribute("FancyURLopener", "urllib", "urllib.request"), + MovedAttribute("proxy_bypass", "urllib", "urllib.request"), +] +for attr in _urllib_request_moved_attributes: + setattr(Module_six_moves_urllib_request, attr.name, attr) +del attr + +Module_six_moves_urllib_request._moved_attributes = _urllib_request_moved_attributes + +_importer._add_module(Module_six_moves_urllib_request(__name__ + ".moves.urllib.request"), + "moves.urllib_request", "moves.urllib.request") + + +class Module_six_moves_urllib_response(_LazyModule): + + """Lazy loading of moved objects in six.moves.urllib_response""" + + +_urllib_response_moved_attributes = [ + MovedAttribute("addbase", "urllib", "urllib.response"), + MovedAttribute("addclosehook", "urllib", "urllib.response"), + MovedAttribute("addinfo", "urllib", "urllib.response"), + MovedAttribute("addinfourl", "urllib", "urllib.response"), +] +for attr in _urllib_response_moved_attributes: + setattr(Module_six_moves_urllib_response, attr.name, attr) +del attr + +Module_six_moves_urllib_response._moved_attributes = _urllib_response_moved_attributes + +_importer._add_module(Module_six_moves_urllib_response(__name__ + ".moves.urllib.response"), + "moves.urllib_response", "moves.urllib.response") + + +class Module_six_moves_urllib_robotparser(_LazyModule): + + """Lazy loading of moved objects in six.moves.urllib_robotparser""" + + +_urllib_robotparser_moved_attributes = [ + MovedAttribute("RobotFileParser", "robotparser", "urllib.robotparser"), +] +for attr in _urllib_robotparser_moved_attributes: + setattr(Module_six_moves_urllib_robotparser, attr.name, attr) +del attr + +Module_six_moves_urllib_robotparser._moved_attributes = _urllib_robotparser_moved_attributes + +_importer._add_module(Module_six_moves_urllib_robotparser(__name__ + ".moves.urllib.robotparser"), + "moves.urllib_robotparser", "moves.urllib.robotparser") + + +class Module_six_moves_urllib(types.ModuleType): + + """Create a six.moves.urllib namespace that resembles the Python 3 namespace""" + __path__ = [] # mark as package + parse = _importer._get_module("moves.urllib_parse") + error = _importer._get_module("moves.urllib_error") + request = _importer._get_module("moves.urllib_request") + response = _importer._get_module("moves.urllib_response") + robotparser = _importer._get_module("moves.urllib_robotparser") + + def __dir__(self): + return ['parse', 'error', 'request', 'response', 'robotparser'] + +_importer._add_module(Module_six_moves_urllib(__name__ + ".moves.urllib"), + "moves.urllib") + + +def add_move(move): + """Add an item to six.moves.""" + setattr(_MovedItems, move.name, move) + + +def remove_move(name): + """Remove item from six.moves.""" + try: + delattr(_MovedItems, name) + except AttributeError: + try: + del moves.__dict__[name] + except KeyError: + raise AttributeError("no such move, %r" % (name,)) + + +if PY3: + _meth_func = "__func__" + _meth_self = "__self__" + + _func_closure = "__closure__" + _func_code = "__code__" + _func_defaults = "__defaults__" + _func_globals = "__globals__" +else: + _meth_func = "im_func" + _meth_self = "im_self" + + _func_closure = "func_closure" + _func_code = "func_code" + _func_defaults = "func_defaults" + _func_globals = "func_globals" + + +try: + advance_iterator = next +except NameError: + def advance_iterator(it): + return it.next() +next = advance_iterator + + +try: + callable = callable +except NameError: + def callable(obj): + return any("__call__" in klass.__dict__ for klass in type(obj).__mro__) + + +if PY3: + def get_unbound_function(unbound): + return unbound + + create_bound_method = types.MethodType + + def create_unbound_method(func, cls): + return func + + Iterator = object +else: + def get_unbound_function(unbound): + return unbound.im_func + + def create_bound_method(func, obj): + return types.MethodType(func, obj, obj.__class__) + + def create_unbound_method(func, cls): + return types.MethodType(func, None, cls) + + class Iterator(object): + + def next(self): + return type(self).__next__(self) + + callable = callable +_add_doc(get_unbound_function, + """Get the function out of a possibly unbound function""") + + +get_method_function = operator.attrgetter(_meth_func) +get_method_self = operator.attrgetter(_meth_self) +get_function_closure = operator.attrgetter(_func_closure) +get_function_code = operator.attrgetter(_func_code) +get_function_defaults = operator.attrgetter(_func_defaults) +get_function_globals = operator.attrgetter(_func_globals) + + +if PY3: + def iterkeys(d, **kw): + return iter(d.keys(**kw)) + + def itervalues(d, **kw): + return iter(d.values(**kw)) + + def iteritems(d, **kw): + return iter(d.items(**kw)) + + def iterlists(d, **kw): + return iter(d.lists(**kw)) + + viewkeys = operator.methodcaller("keys") + + viewvalues = operator.methodcaller("values") + + viewitems = operator.methodcaller("items") +else: + def iterkeys(d, **kw): + return d.iterkeys(**kw) + + def itervalues(d, **kw): + return d.itervalues(**kw) + + def iteritems(d, **kw): + return d.iteritems(**kw) + + def iterlists(d, **kw): + return d.iterlists(**kw) + + viewkeys = operator.methodcaller("viewkeys") + + viewvalues = operator.methodcaller("viewvalues") + + viewitems = operator.methodcaller("viewitems") + +_add_doc(iterkeys, "Return an iterator over the keys of a dictionary.") +_add_doc(itervalues, "Return an iterator over the values of a dictionary.") +_add_doc(iteritems, + "Return an iterator over the (key, value) pairs of a dictionary.") +_add_doc(iterlists, + "Return an iterator over the (key, [values]) pairs of a dictionary.") + + +if PY3: + def b(s): + return s.encode("latin-1") + + def u(s): + return s + unichr = chr + import struct + int2byte = struct.Struct(">B").pack + del struct + byte2int = operator.itemgetter(0) + indexbytes = operator.getitem + iterbytes = iter + import io + StringIO = io.StringIO + BytesIO = io.BytesIO + _assertCountEqual = "assertCountEqual" + if sys.version_info[1] <= 1: + _assertRaisesRegex = "assertRaisesRegexp" + _assertRegex = "assertRegexpMatches" + else: + _assertRaisesRegex = "assertRaisesRegex" + _assertRegex = "assertRegex" +else: + def b(s): + return s + # Workaround for standalone backslash + + def u(s): + return unicode(s.replace(r'\\', r'\\\\'), "unicode_escape") + unichr = unichr + int2byte = chr + + def byte2int(bs): + return ord(bs[0]) + + def indexbytes(buf, i): + return ord(buf[i]) + iterbytes = functools.partial(itertools.imap, ord) + import StringIO + StringIO = BytesIO = StringIO.StringIO + _assertCountEqual = "assertItemsEqual" + _assertRaisesRegex = "assertRaisesRegexp" + _assertRegex = "assertRegexpMatches" +_add_doc(b, """Byte literal""") +_add_doc(u, """Text literal""") + + +def assertCountEqual(self, *args, **kwargs): + return getattr(self, _assertCountEqual)(*args, **kwargs) + + +def assertRaisesRegex(self, *args, **kwargs): + return getattr(self, _assertRaisesRegex)(*args, **kwargs) + + +def assertRegex(self, *args, **kwargs): + return getattr(self, _assertRegex)(*args, **kwargs) + + +if PY3: + exec_ = getattr(moves.builtins, "exec") + + def reraise(tp, value, tb=None): + if value is None: + value = tp() + if value.__traceback__ is not tb: + raise value.with_traceback(tb) + raise value + +else: + def exec_(_code_, _globs_=None, _locs_=None): + """Execute code in a namespace.""" + if _globs_ is None: + frame = sys._getframe(1) + _globs_ = frame.f_globals + if _locs_ is None: + _locs_ = frame.f_locals + del frame + elif _locs_ is None: + _locs_ = _globs_ + exec("""exec _code_ in _globs_, _locs_""") + + exec_("""def reraise(tp, value, tb=None): + raise tp, value, tb +""") + + +if sys.version_info[:2] == (3, 2): + exec_("""def raise_from(value, from_value): + if from_value is None: + raise value + raise value from from_value +""") +elif sys.version_info[:2] > (3, 2): + exec_("""def raise_from(value, from_value): + raise value from from_value +""") +else: + def raise_from(value, from_value): + raise value + + +print_ = getattr(moves.builtins, "print", None) +if print_ is None: + def print_(*args, **kwargs): + """The new-style print function for Python 2.4 and 2.5.""" + fp = kwargs.pop("file", sys.stdout) + if fp is None: + return + + def write(data): + if not isinstance(data, basestring): + data = str(data) + # If the file has an encoding, encode unicode with it. + if (isinstance(fp, file) and + isinstance(data, unicode) and + fp.encoding is not None): + errors = getattr(fp, "errors", None) + if errors is None: + errors = "strict" + data = data.encode(fp.encoding, errors) + fp.write(data) + want_unicode = False + sep = kwargs.pop("sep", None) + if sep is not None: + if isinstance(sep, unicode): + want_unicode = True + elif not isinstance(sep, str): + raise TypeError("sep must be None or a string") + end = kwargs.pop("end", None) + if end is not None: + if isinstance(end, unicode): + want_unicode = True + elif not isinstance(end, str): + raise TypeError("end must be None or a string") + if kwargs: + raise TypeError("invalid keyword arguments to print()") + if not want_unicode: + for arg in args: + if isinstance(arg, unicode): + want_unicode = True + break + if want_unicode: + newline = unicode("\n") + space = unicode(" ") + else: + newline = "\n" + space = " " + if sep is None: + sep = space + if end is None: + end = newline + for i, arg in enumerate(args): + if i: + write(sep) + write(arg) + write(end) +if sys.version_info[:2] < (3, 3): + _print = print_ + + def print_(*args, **kwargs): + fp = kwargs.get("file", sys.stdout) + flush = kwargs.pop("flush", False) + _print(*args, **kwargs) + if flush and fp is not None: + fp.flush() + +_add_doc(reraise, """Reraise an exception.""") + +if sys.version_info[0:2] < (3, 4): + def wraps(wrapped, assigned=functools.WRAPPER_ASSIGNMENTS, + updated=functools.WRAPPER_UPDATES): + def wrapper(f): + f = functools.wraps(wrapped, assigned, updated)(f) + f.__wrapped__ = wrapped + return f + return wrapper +else: + wraps = functools.wraps + + +def with_metaclass(meta, *bases): + """Create a base class with a metaclass.""" + # This requires a bit of explanation: the basic idea is to make a dummy + # metaclass for one level of class instantiation that replaces itself with + # the actual metaclass. + class metaclass(meta): + + def __new__(cls, name, this_bases, d): + return meta(name, bases, d) + return type.__new__(metaclass, 'temporary_class', (), {}) + + +def add_metaclass(metaclass): + """Class decorator for creating a class with a metaclass.""" + def wrapper(cls): + orig_vars = cls.__dict__.copy() + slots = orig_vars.get('__slots__') + if slots is not None: + if isinstance(slots, str): + slots = [slots] + for slots_var in slots: + orig_vars.pop(slots_var) + orig_vars.pop('__dict__', None) + orig_vars.pop('__weakref__', None) + return metaclass(cls.__name__, cls.__bases__, orig_vars) + return wrapper + + +def python_2_unicode_compatible(klass): + """ + A decorator that defines __unicode__ and __str__ methods under Python 2. + Under Python 3 it does nothing. + + To support Python 2 and 3 with a single code base, define a __str__ method + returning text and apply this decorator to the class. + """ + if PY2: + if '__str__' not in klass.__dict__: + raise ValueError("@python_2_unicode_compatible cannot be applied " + "to %s because it doesn't define __str__()." % + klass.__name__) + klass.__unicode__ = klass.__str__ + klass.__str__ = lambda self: self.__unicode__().encode('utf-8') + return klass + + +# Complete the moves implementation. +# This code is at the end of this module to speed up module loading. +# Turn this module into a package. +__path__ = [] # required for PEP 302 and PEP 451 +__package__ = __name__ # see PEP 366 @ReservedAssignment +if globals().get("__spec__") is not None: + __spec__.submodule_search_locations = [] # PEP 451 @UndefinedVariable +# Remove other six meta path importers, since they cause problems. This can +# happen if six is removed from sys.modules and then reloaded. (Setuptools does +# this for some reason.) +if sys.meta_path: + for i, importer in enumerate(sys.meta_path): + # Here's some real nastiness: Another "instance" of the six module might + # be floating around. Therefore, we can't use isinstance() to check for + # the six meta path importer, since the other six instance will have + # inserted an importer with different class. + if (type(importer).__name__ == "_SixMetaPathImporter" and + importer.name == __name__): + del sys.meta_path[i] + break + del i, importer +# Finally, add the importer to the meta path import hook. +sys.meta_path.append(_importer) diff --git a/week-0/day-3/venv/lib/python3.6/site-packages/pkg_resources/extern/__init__.py b/week-0/day-3/venv/lib/python3.6/site-packages/pkg_resources/extern/__init__.py new file mode 100644 index 00000000..b4156fec --- /dev/null +++ b/week-0/day-3/venv/lib/python3.6/site-packages/pkg_resources/extern/__init__.py @@ -0,0 +1,73 @@ +import sys + + +class VendorImporter: + """ + A PEP 302 meta path importer for finding optionally-vendored + or otherwise naturally-installed packages from root_name. + """ + + def __init__(self, root_name, vendored_names=(), vendor_pkg=None): + self.root_name = root_name + self.vendored_names = set(vendored_names) + self.vendor_pkg = vendor_pkg or root_name.replace('extern', '_vendor') + + @property + def search_path(self): + """ + Search first the vendor package then as a natural package. + """ + yield self.vendor_pkg + '.' + yield '' + + def find_module(self, fullname, path=None): + """ + Return self when fullname starts with root_name and the + target module is one vendored through this importer. + """ + root, base, target = fullname.partition(self.root_name + '.') + if root: + return + if not any(map(target.startswith, self.vendored_names)): + return + return self + + def load_module(self, fullname): + """ + Iterate over the search path to locate and load fullname. + """ + root, base, target = fullname.partition(self.root_name + '.') + for prefix in self.search_path: + try: + extant = prefix + target + __import__(extant) + mod = sys.modules[extant] + sys.modules[fullname] = mod + # mysterious hack: + # Remove the reference to the extant package/module + # on later Python versions to cause relative imports + # in the vendor package to resolve the same modules + # as those going through this importer. + if sys.version_info > (3, 3): + del sys.modules[extant] + return mod + except ImportError: + pass + else: + raise ImportError( + "The '{target}' package is required; " + "normally this is bundled with this package so if you get " + "this warning, consult the packager of your " + "distribution.".format(**locals()) + ) + + def install(self): + """ + Install this importer into sys.meta_path if not already present. + """ + if self not in sys.meta_path: + sys.meta_path.append(self) + + +names = 'packaging', 'pyparsing', 'six', 'appdirs' +VendorImporter(__name__, names).install() diff --git a/week-0/day-3/venv/lib/python3.6/site-packages/pkg_resources/extern/__pycache__/__init__.cpython-36.pyc b/week-0/day-3/venv/lib/python3.6/site-packages/pkg_resources/extern/__pycache__/__init__.cpython-36.pyc new file mode 100644 index 0000000000000000000000000000000000000000..0c7cfcdf8b8438bd1c252d1972b4b4b904ca3138 GIT binary patch literal 2385 zcmZ`)-EP}96ejg&S#i7{V9DB{0f7N4G&D)q7TB<LLyNT=iVa@T7TIR35EPS6<k*rz z(oO8iH*>J7VRw6oJ;C0Ex4Y^q>}uywwv#p}1szf%d3bofj~{QZuSfTP`1JWdO+x-9 z7m5e%d+@3oU^wA)NV?=(!X56O5$?{NF6Cj@5mdOsnL7h-PAH6eO5)~Am_a%{w9Dc` z;~u=~0T@AGF6la)cHKUB?1NA4ozbo*eD3q$jLc~_;Oo4>L-^a^O&*<*Zphbo3+g6! zV3oFM?}?lj^3kX)q!w~|7BMLI+2e<g+3lOR*huJ<m8m{t*<uLm7n1d}oM-s~D@vUe zc{&_UwqICBf?EeLq|k>#o@7d}Jk?`q$7H$E&=4G4_Kwm6p;%uQBPNSNCwV#&J9c)b zhl#_2HE#QBc-2Q>Dq4|*Xj(aQY&n%%ZdG*Pa>^lr@W<l>Hs*FrAWmUJxoISIWU+6W zt96X4gf{JE%yw;M8d8+Qv?okdcO>P}LF^e%iD6&*u)1uZ0hGz#M6N;g-#5E@RPL5p zxxGKmhJ0HctJD2)@6Ikv-IhWXW7!i5zmoH>I<nm)$?{Am$xb;j;qoH_uPOjTXh0)6 z-Q0Txpq=Ho9>p<Guy)`@s;CVx6&V1BHpw1x$+6ajlz7wcZE_Lcry`ZTLqJg~%>XA> z?{|p`{>oXZSh~b+*;C_#E)3l<q!Uw{4X7|~o08hJ;M1%ryH0}qc?-j{u=*`Jz53d& zE)47;-dHdRIKg8788iTA+#JQt&FL@h%$<2NzjEakl36?2t^9!pBm6nAL*2o@m1V>9 z_tn;)2q0t55K?x6+w6~rL!=%9YD%rxNd{zJ5rw5W$8@ab!=MA9*{I;-p<tO}MZQcQ z&{`kLVtjB2HS{b`%z4se8@ADj1Jf*FtqjkO<&|;Md}7>DTAHX11Ea8Pivycl6E5R4 z9;VZH7^3m^QzcAL2X!g^cuJEx(oI-cAt=P(pdLK$!g~pZ3ln<CDJ&tpIMKrJ2Q)6h z;2;pEB_!T?K%PIF`IFBpzw$Q8EC5J?Ii*B<1HTHckXfT@*fzb3{{rqGd9qvgeo3mv zQ$Sodjv`r7U@s*<ljE(Q;QbN)a(58+iEhrxpL9-tquc{l2h;CX&^&_ko@&907eXRt z0J5dIl`mbeVbQ~GM08lBe1-gL_`E~{PXBra4zB-NXLfddc>oY`DUQdP6#NU87jlHc zw!mAl{c+Aw-YkhM2^K=fRKc=7n-pV)^s!whsmwt{Z?ImGtMRZtiHq@|pLVolJX2a` z`(q@_PA7Kc2N0e$aU|ctwpFILp=Baa2P@M_0tz<)MXS+QrUf}s-~lA3UzoL8?;lE8 zNE3jdk5X*{%+FB8VSSe0L)S<f`97K}=szf>=x3)^Thm+vV+($Xb(q@)>pp}@Y6}eU zHfW1FG=wLjQ4m4x(Kd}7hX(E?9$s*9N#`sNuY${pXb^*=hTOn<0OF5Kv$v-+eR9r< z`p$XvNU|&kLO_Og@Pe}fh4AEsX6aChlusCJRf$}mlcN*6@*1pbnyWb`NXruR`3?Hl zSloB_U{<Yt9w_?8YudLM6w^)|;XQz21o#1#HF(f&CCTwPwK4@?jU?ekFG=J&MiZ8@ zD23D$i4>5S8HqQgjM3mFb;004mUyyJSgjs}p69gvRv5LyYqkfq3GZfLCNw7?R0^A} z0^A$0T@IH<?8#m9bQ8@dXl{XteVd=!i;vq-@?-3LQzRz5TW|3zyu|FS7rN~S9{nGG C%W@R} literal 0 HcmV?d00001 diff --git a/week-0/day-3/venv/lib/python3.6/site-packages/pkg_resources/py31compat.py b/week-0/day-3/venv/lib/python3.6/site-packages/pkg_resources/py31compat.py new file mode 100644 index 00000000..331a51bb --- /dev/null +++ b/week-0/day-3/venv/lib/python3.6/site-packages/pkg_resources/py31compat.py @@ -0,0 +1,22 @@ +import os +import errno +import sys + + +def _makedirs_31(path, exist_ok=False): + try: + os.makedirs(path) + except OSError as exc: + if not exist_ok or exc.errno != errno.EEXIST: + raise + + +# rely on compatibility behavior until mode considerations +# and exists_ok considerations are disentangled. +# See https://github.com/pypa/setuptools/pull/1083#issuecomment-315168663 +needs_makedirs = ( + sys.version_info < (3, 2, 5) or + (3, 3) <= sys.version_info < (3, 3, 6) or + (3, 4) <= sys.version_info < (3, 4, 1) +) +makedirs = _makedirs_31 if needs_makedirs else os.makedirs diff --git a/week-0/day-3/venv/lib/python3.6/site-packages/setuptools-39.0.1.dist-info/DESCRIPTION.rst b/week-0/day-3/venv/lib/python3.6/site-packages/setuptools-39.0.1.dist-info/DESCRIPTION.rst new file mode 100644 index 00000000..ba3a46bc --- /dev/null +++ b/week-0/day-3/venv/lib/python3.6/site-packages/setuptools-39.0.1.dist-info/DESCRIPTION.rst @@ -0,0 +1,36 @@ +.. image:: https://img.shields.io/pypi/v/setuptools.svg + :target: https://pypi.org/project/setuptools + +.. image:: https://readthedocs.org/projects/setuptools/badge/?version=latest + :target: https://setuptools.readthedocs.io + +.. image:: https://img.shields.io/travis/pypa/setuptools/master.svg?label=Linux%20build%20%40%20Travis%20CI + :target: https://travis-ci.org/pypa/setuptools + +.. image:: https://img.shields.io/appveyor/ci/jaraco/setuptools/master.svg?label=Windows%20build%20%40%20Appveyor + :target: https://ci.appveyor.com/project/jaraco/setuptools/branch/master + +.. image:: https://img.shields.io/pypi/pyversions/setuptools.svg + +See the `Installation Instructions +<https://packaging.python.org/installing/>`_ in the Python Packaging +User's Guide for instructions on installing, upgrading, and uninstalling +Setuptools. + +The project is `maintained at GitHub <https://github.com/pypa/setuptools>`_. + +Questions and comments should be directed to the `distutils-sig +mailing list <http://mail.python.org/pipermail/distutils-sig/>`_. +Bug reports and especially tested patches may be +submitted directly to the `bug tracker +<https://github.com/pypa/setuptools/issues>`_. + + +Code of Conduct +--------------- + +Everyone interacting in the setuptools project's codebases, issue trackers, +chat rooms, and mailing lists is expected to follow the +`PyPA Code of Conduct <https://www.pypa.io/en/latest/code-of-conduct/>`_. + + diff --git a/week-0/day-3/venv/lib/python3.6/site-packages/setuptools-39.0.1.dist-info/INSTALLER b/week-0/day-3/venv/lib/python3.6/site-packages/setuptools-39.0.1.dist-info/INSTALLER new file mode 100644 index 00000000..a1b589e3 --- /dev/null +++ b/week-0/day-3/venv/lib/python3.6/site-packages/setuptools-39.0.1.dist-info/INSTALLER @@ -0,0 +1 @@ +pip diff --git a/week-0/day-3/venv/lib/python3.6/site-packages/setuptools-39.0.1.dist-info/METADATA b/week-0/day-3/venv/lib/python3.6/site-packages/setuptools-39.0.1.dist-info/METADATA new file mode 100644 index 00000000..d80cdcfa --- /dev/null +++ b/week-0/day-3/venv/lib/python3.6/site-packages/setuptools-39.0.1.dist-info/METADATA @@ -0,0 +1,67 @@ +Metadata-Version: 2.0 +Name: setuptools +Version: 39.0.1 +Summary: Easily download, build, install, upgrade, and uninstall Python packages +Home-page: https://github.com/pypa/setuptools +Author: Python Packaging Authority +Author-email: distutils-sig@python.org +License: UNKNOWN +Project-URL: Documentation, https://setuptools.readthedocs.io/ +Keywords: CPAN PyPI distutils eggs package management +Platform: UNKNOWN +Classifier: Development Status :: 5 - Production/Stable +Classifier: Intended Audience :: Developers +Classifier: License :: OSI Approved :: MIT License +Classifier: Operating System :: OS Independent +Classifier: Programming Language :: Python :: 2 +Classifier: Programming Language :: Python :: 2.7 +Classifier: Programming Language :: Python :: 3 +Classifier: Programming Language :: Python :: 3.3 +Classifier: Programming Language :: Python :: 3.4 +Classifier: Programming Language :: Python :: 3.5 +Classifier: Programming Language :: Python :: 3.6 +Classifier: Topic :: Software Development :: Libraries :: Python Modules +Classifier: Topic :: System :: Archiving :: Packaging +Classifier: Topic :: System :: Systems Administration +Classifier: Topic :: Utilities +Requires-Python: >=2.7,!=3.0.*,!=3.1.*,!=3.2.* +Description-Content-Type: text/x-rst; charset=UTF-8 +Provides-Extra: certs +Provides-Extra: ssl + +.. image:: https://img.shields.io/pypi/v/setuptools.svg + :target: https://pypi.org/project/setuptools + +.. image:: https://readthedocs.org/projects/setuptools/badge/?version=latest + :target: https://setuptools.readthedocs.io + +.. image:: https://img.shields.io/travis/pypa/setuptools/master.svg?label=Linux%20build%20%40%20Travis%20CI + :target: https://travis-ci.org/pypa/setuptools + +.. image:: https://img.shields.io/appveyor/ci/jaraco/setuptools/master.svg?label=Windows%20build%20%40%20Appveyor + :target: https://ci.appveyor.com/project/jaraco/setuptools/branch/master + +.. image:: https://img.shields.io/pypi/pyversions/setuptools.svg + +See the `Installation Instructions +<https://packaging.python.org/installing/>`_ in the Python Packaging +User's Guide for instructions on installing, upgrading, and uninstalling +Setuptools. + +The project is `maintained at GitHub <https://github.com/pypa/setuptools>`_. + +Questions and comments should be directed to the `distutils-sig +mailing list <http://mail.python.org/pipermail/distutils-sig/>`_. +Bug reports and especially tested patches may be +submitted directly to the `bug tracker +<https://github.com/pypa/setuptools/issues>`_. + + +Code of Conduct +--------------- + +Everyone interacting in the setuptools project's codebases, issue trackers, +chat rooms, and mailing lists is expected to follow the +`PyPA Code of Conduct <https://www.pypa.io/en/latest/code-of-conduct/>`_. + + diff --git a/week-0/day-3/venv/lib/python3.6/site-packages/setuptools-39.0.1.dist-info/RECORD b/week-0/day-3/venv/lib/python3.6/site-packages/setuptools-39.0.1.dist-info/RECORD new file mode 100644 index 00000000..61106bbd --- /dev/null +++ b/week-0/day-3/venv/lib/python3.6/site-packages/setuptools-39.0.1.dist-info/RECORD @@ -0,0 +1,155 @@ +easy_install.py,sha256=MDC9vt5AxDsXX5qcKlBz2TnW6Tpuv_AobnfhCJ9X3PM,126 +setuptools/__init__.py,sha256=WWIdCbFJnZ9fZoaWDN_x1vDA_Rkm-Sc15iKvPtIYKFs,5700 +setuptools/archive_util.py,sha256=kw8Ib_lKjCcnPKNbS7h8HztRVK0d5RacU3r_KRdVnmM,6592 +setuptools/build_meta.py,sha256=FllaKTr1vSJyiUeRjVJEZmeEaRzhYueNlimtcwaJba8,5671 +setuptools/cli-32.exe,sha256=dfEuovMNnA2HLa3jRfMPVi5tk4R7alCbpTvuxtCyw0Y,65536 +setuptools/cli-64.exe,sha256=KLABu5pyrnokJCv6skjXZ6GsXeyYHGcqOUT3oHI3Xpo,74752 +setuptools/cli.exe,sha256=dfEuovMNnA2HLa3jRfMPVi5tk4R7alCbpTvuxtCyw0Y,65536 +setuptools/config.py,sha256=tVYBM3w1U_uBRRTOZydflxyZ_IrTJT5odlZz3cbuhSw,16381 +setuptools/dep_util.py,sha256=fgixvC1R7sH3r13ktyf7N0FALoqEXL1cBarmNpSEoWg,935 +setuptools/depends.py,sha256=hC8QIDcM3VDpRXvRVA6OfL9AaQfxvhxHcN_w6sAyNq8,5837 +setuptools/dist.py,sha256=1GpYnnbv9Bk6uRIvwYS5TRVTSMf89tGM4PAla0WkUek,42522 +setuptools/extension.py,sha256=uc6nHI-MxwmNCNPbUiBnybSyqhpJqjbhvOQ-emdvt_E,1729 +setuptools/glibc.py,sha256=X64VvGPL2AbURKwYRsWJOXXGAYOiF_v2qixeTkAULuU,3146 +setuptools/glob.py,sha256=Y-fpv8wdHZzv9DPCaGACpMSBWJ6amq_1e0R_i8_el4w,5207 +setuptools/gui-32.exe,sha256=XBr0bHMA6Hpz2s9s9Bzjl-PwXfa9nH4ie0rFn4V2kWA,65536 +setuptools/gui-64.exe,sha256=aYKMhX1IJLn4ULHgWX0sE0yREUt6B3TEHf_jOw6yNyE,75264 +setuptools/gui.exe,sha256=XBr0bHMA6Hpz2s9s9Bzjl-PwXfa9nH4ie0rFn4V2kWA,65536 +setuptools/launch.py,sha256=sd7ejwhBocCDx_wG9rIs0OaZ8HtmmFU8ZC6IR_S0Lvg,787 +setuptools/lib2to3_ex.py,sha256=t5e12hbR2pi9V4ezWDTB4JM-AISUnGOkmcnYHek3xjg,2013 +setuptools/monkey.py,sha256=zZGTH7p0xeXQKLmEwJTPIE4m5m7fJeHoAsxyv5M8e_E,5789 +setuptools/msvc.py,sha256=8EiV9ypb3EQJQssPcH1HZbdNsbRvqsFnJ7wPFEGwFIo,40877 +setuptools/namespaces.py,sha256=F0Nrbv8KCT2OrO7rwa03om4N4GZKAlnce-rr-cgDQa8,3199 +setuptools/package_index.py,sha256=NEsrNXnt_9gGP-nCCYzV-0gk15lXAGO7RghRxpfqLqE,40142 +setuptools/pep425tags.py,sha256=NuGMx1gGif7x6iYemh0LfgBr_FZF5GFORIbgmMdU8J4,10882 +setuptools/py27compat.py,sha256=3mwxRMDk5Q5O1rSXOERbQDXhFqwDJhhUitfMW_qpUCo,536 +setuptools/py31compat.py,sha256=XuU1HCsGE_3zGvBRIhYw2iB-IhCFK4-Pxw_jMiqdNVk,1192 +setuptools/py33compat.py,sha256=NKS84nl4LjLIoad6OQfgmygZn4mMvrok_b1N1tzebew,1182 +setuptools/py36compat.py,sha256=VUDWxmu5rt4QHlGTRtAFu6W5jvfL6WBjeDAzeoBy0OM,2891 +setuptools/sandbox.py,sha256=9UbwfEL5QY436oMI1LtFWohhoZ-UzwHvGyZjUH_qhkw,14276 +setuptools/script (dev).tmpl,sha256=f7MR17dTkzaqkCMSVseyOCMVrPVSMdmTQsaB8cZzfuI,201 +setuptools/script.tmpl,sha256=WGTt5piezO27c-Dbx6l5Q4T3Ff20A5z7872hv3aAhYY,138 +setuptools/site-patch.py,sha256=BVt6yIrDMXJoflA5J6DJIcsJUfW_XEeVhOzelTTFDP4,2307 +setuptools/ssl_support.py,sha256=YBDJsCZjSp62CWjxmSkke9kn9rhHHj25Cus6zhJRW3c,8492 +setuptools/unicode_utils.py,sha256=NOiZ_5hD72A6w-4wVj8awHFM3n51Kmw1Ic_vx15XFqw,996 +setuptools/version.py,sha256=og_cuZQb0QI6ukKZFfZWPlr1HgJBPPn2vO2m_bI9ZTE,144 +setuptools/wheel.py,sha256=yF9usxMvpwnymV-oOo5mfDiv3E8jrKkbDEItT7_kjBs,7230 +setuptools/windows_support.py,sha256=5GrfqSP2-dLGJoZTq2g6dCKkyQxxa2n5IQiXlJCoYEE,714 +setuptools/_vendor/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0 +setuptools/_vendor/pyparsing.py,sha256=PifeLY3-WhIcBVzLtv0U4T_pwDtPruBhBCkg5vLqa28,229867 +setuptools/_vendor/six.py,sha256=A6hdJZVjI3t_geebZ9BzUvwRrIXo0lfwzQlM2LcKyas,30098 +setuptools/_vendor/packaging/__about__.py,sha256=zkcCPTN_6TcLW0Nrlg0176-R1QQ_WVPTm8sz1R4-HjM,720 +setuptools/_vendor/packaging/__init__.py,sha256=_vNac5TrzwsrzbOFIbF-5cHqc_Y2aPT2D7zrIR06BOo,513 +setuptools/_vendor/packaging/_compat.py,sha256=Vi_A0rAQeHbU-a9X0tt1yQm9RqkgQbDSxzRw8WlU9kA,860 +setuptools/_vendor/packaging/_structures.py,sha256=RImECJ4c_wTlaTYYwZYLHEiebDMaAJmK1oPARhw1T5o,1416 +setuptools/_vendor/packaging/markers.py,sha256=Gvpk9EY20yKaMTiKgQZ8yFEEpodqVgVYtfekoic1Yts,8239 +setuptools/_vendor/packaging/requirements.py,sha256=t44M2HVWtr8phIz2OhnILzuGT3rTATaovctV1dpnVIg,4343 +setuptools/_vendor/packaging/specifiers.py,sha256=SAMRerzO3fK2IkFZCaZkuwZaL_EGqHNOz4pni4vhnN0,28025 +setuptools/_vendor/packaging/utils.py,sha256=3m6WvPm6NNxE8rkTGmn0r75B_GZSGg7ikafxHsBN1WA,421 +setuptools/_vendor/packaging/version.py,sha256=OwGnxYfr2ghNzYx59qWIBkrK3SnB6n-Zfd1XaLpnnM0,11556 +setuptools/command/__init__.py,sha256=NWzJ0A1BEengZpVeqUyWLNm2bk4P3F4iL5QUErHy7kA,594 +setuptools/command/alias.py,sha256=KjpE0sz_SDIHv3fpZcIQK-sCkJz-SrC6Gmug6b9Nkc8,2426 +setuptools/command/bdist_egg.py,sha256=RQ9h8BmSVpXKJQST3i_b_sm093Z-aCXbfMBEM2IrI-Q,18185 +setuptools/command/bdist_rpm.py,sha256=B7l0TnzCGb-0nLlm6rS00jWLkojASwVmdhW2w5Qz_Ak,1508 +setuptools/command/bdist_wininst.py,sha256=_6dz3lpB1tY200LxKPLM7qgwTCceOMgaWFF-jW2-pm0,637 +setuptools/command/build_clib.py,sha256=bQ9aBr-5ZSO-9fGsGsDLz0mnnFteHUZnftVLkhvHDq0,4484 +setuptools/command/build_ext.py,sha256=PCRAZ2xYnqyEof7EFNtpKYl0sZzT0qdKUNTH3sUdPqk,13173 +setuptools/command/build_py.py,sha256=yWyYaaS9F3o9JbIczn064A5g1C5_UiKRDxGaTqYbtLE,9596 +setuptools/command/develop.py,sha256=wKbOw2_qUvcDti2lZmtxbDmYb54yAAibExzXIvToz-A,8046 +setuptools/command/dist_info.py,sha256=5t6kOfrdgALT-P3ogss6PF9k-Leyesueycuk3dUyZnI,960 +setuptools/command/easy_install.py,sha256=vRnKfAJ2hgTyt4OOLSna4BFEySfj9-KD4gGIAzfC6i8,89413 +setuptools/command/egg_info.py,sha256=BFs9e2mpws2YAFYtxxekoJaFj5X9N7o5LxpQeMdbyY4,24808 +setuptools/command/install.py,sha256=a0EZpL_A866KEdhicTGbuyD_TYl1sykfzdrri-zazT4,4683 +setuptools/command/install_egg_info.py,sha256=4zq_Ad3jE-EffParuyDEnvxU6efB-Xhrzdr8aB6Ln_8,3195 +setuptools/command/install_lib.py,sha256=n2iLR8f1MlYeGHtV2oFxDpUiL-wyLaQgwSAFX-YIEv4,5012 +setuptools/command/install_scripts.py,sha256=UD0rEZ6861mTYhIdzcsqKnUl8PozocXWl9VBQ1VTWnc,2439 +setuptools/command/launcher manifest.xml,sha256=xlLbjWrB01tKC0-hlVkOKkiSPbzMml2eOPtJ_ucCnbE,628 +setuptools/command/py36compat.py,sha256=SzjZcOxF7zdFUT47Zv2n7AM3H8koDys_0OpS-n9gIfc,4986 +setuptools/command/register.py,sha256=bHlMm1qmBbSdahTOT8w6UhA-EgeQIz7p6cD-qOauaiI,270 +setuptools/command/rotate.py,sha256=co5C1EkI7P0GGT6Tqz-T2SIj2LBJTZXYELpmao6d4KQ,2164 +setuptools/command/saveopts.py,sha256=za7QCBcQimKKriWcoCcbhxPjUz30gSB74zuTL47xpP4,658 +setuptools/command/sdist.py,sha256=obDTe2BmWt2PlnFPZZh7e0LWvemEsbCCO9MzhrTZjm8,6711 +setuptools/command/setopt.py,sha256=NTWDyx-gjDF-txf4dO577s7LOzHVoKR0Mq33rFxaRr8,5085 +setuptools/command/test.py,sha256=MeBAcXUePGjPKqjz4zvTrHatLvNsjlPFcagt3XnFYdk,9214 +setuptools/command/upload.py,sha256=i1gfItZ3nQOn5FKXb8tLC2Kd7eKC8lWO4bdE6NqGpE4,1172 +setuptools/command/upload_docs.py,sha256=oXiGplM_cUKLwE4CWWw98RzCufAu8tBhMC97GegFcms,7311 +setuptools/extern/__init__.py,sha256=2eKMsBMwsZqolIcYBtLZU3t96s6xSTP4PTaNfM5P-I0,2499 +setuptools-39.0.1.dist-info/DESCRIPTION.rst,sha256=It3a3GRjT5701mqhrpMcLyW_YS2Dokv-X8zWoTaMRe0,1422 +setuptools-39.0.1.dist-info/METADATA,sha256=whsT1qR2TE8wd0dsBKl8ZwCU_sfHFOGaHLWsDuaMqkQ,2728 +setuptools-39.0.1.dist-info/RECORD,, +setuptools-39.0.1.dist-info/WHEEL,sha256=kdsN-5OJAZIiHN-iO4Rhl82KyS0bDWf4uBwMbkNafr8,110 +setuptools-39.0.1.dist-info/dependency_links.txt,sha256=HlkCFkoK5TbZ5EMLbLKYhLcY_E31kBWD8TqW2EgmatQ,239 +setuptools-39.0.1.dist-info/entry_points.txt,sha256=s4ibTr5_v_-uWueemgrdzLUIL_ageOMqsgCAKZDkY2E,2934 +setuptools-39.0.1.dist-info/metadata.json,sha256=kbzF0VTLzT0y_Hlf-90rhO8kH_DP02x9lA-6jkrIGsQ,4650 +setuptools-39.0.1.dist-info/top_level.txt,sha256=2HUXVVwA4Pff1xgTFr3GsTXXKaPaO6vlG6oNJ_4u4Tg,38 +setuptools-39.0.1.dist-info/zip-safe,sha256=AbpHGcgLb-kRsJGnwFEktk7uzpZOCcBY74-YBdrKVGs,1 +../../../bin/easy_install,sha256=r5Oh9EV_JEgs4UVNtNJiuI0vIzBjWtSR7vHadpilw5c,305 +../../../bin/easy_install-3.6,sha256=r5Oh9EV_JEgs4UVNtNJiuI0vIzBjWtSR7vHadpilw5c,305 +setuptools-39.0.1.dist-info/INSTALLER,sha256=zuuue4knoyJ-UwPPXg8fezS7VCrXJQrAP7zeNuwvFQg,4 +setuptools/_vendor/packaging/__pycache__/utils.cpython-36.pyc,, +setuptools/_vendor/packaging/__pycache__/_structures.cpython-36.pyc,, +setuptools/_vendor/packaging/__pycache__/version.cpython-36.pyc,, +setuptools/_vendor/packaging/__pycache__/markers.cpython-36.pyc,, +setuptools/_vendor/packaging/__pycache__/_compat.cpython-36.pyc,, +setuptools/_vendor/packaging/__pycache__/specifiers.cpython-36.pyc,, +setuptools/_vendor/packaging/__pycache__/__about__.cpython-36.pyc,, +setuptools/_vendor/packaging/__pycache__/requirements.cpython-36.pyc,, +setuptools/_vendor/packaging/__pycache__/__init__.cpython-36.pyc,, +setuptools/_vendor/__pycache__/six.cpython-36.pyc,, +setuptools/_vendor/__pycache__/pyparsing.cpython-36.pyc,, +setuptools/_vendor/__pycache__/__init__.cpython-36.pyc,, +setuptools/command/__pycache__/install.cpython-36.pyc,, +setuptools/command/__pycache__/register.cpython-36.pyc,, +setuptools/command/__pycache__/bdist_egg.cpython-36.pyc,, +setuptools/command/__pycache__/bdist_rpm.cpython-36.pyc,, +setuptools/command/__pycache__/easy_install.cpython-36.pyc,, +setuptools/command/__pycache__/rotate.cpython-36.pyc,, +setuptools/command/__pycache__/alias.cpython-36.pyc,, +setuptools/command/__pycache__/upload_docs.cpython-36.pyc,, +setuptools/command/__pycache__/install_lib.cpython-36.pyc,, +setuptools/command/__pycache__/setopt.cpython-36.pyc,, +setuptools/command/__pycache__/py36compat.cpython-36.pyc,, +setuptools/command/__pycache__/build_clib.cpython-36.pyc,, +setuptools/command/__pycache__/saveopts.cpython-36.pyc,, +setuptools/command/__pycache__/develop.cpython-36.pyc,, +setuptools/command/__pycache__/install_scripts.cpython-36.pyc,, +setuptools/command/__pycache__/sdist.cpython-36.pyc,, +setuptools/command/__pycache__/install_egg_info.cpython-36.pyc,, +setuptools/command/__pycache__/build_py.cpython-36.pyc,, +setuptools/command/__pycache__/__init__.cpython-36.pyc,, +setuptools/command/__pycache__/bdist_wininst.cpython-36.pyc,, +setuptools/command/__pycache__/test.cpython-36.pyc,, +setuptools/command/__pycache__/dist_info.cpython-36.pyc,, +setuptools/command/__pycache__/egg_info.cpython-36.pyc,, +setuptools/command/__pycache__/build_ext.cpython-36.pyc,, +setuptools/command/__pycache__/upload.cpython-36.pyc,, +setuptools/__pycache__/config.cpython-36.pyc,, +setuptools/__pycache__/version.cpython-36.pyc,, +setuptools/__pycache__/glibc.cpython-36.pyc,, +setuptools/__pycache__/package_index.cpython-36.pyc,, +setuptools/__pycache__/dist.cpython-36.pyc,, +setuptools/__pycache__/pep425tags.cpython-36.pyc,, +setuptools/__pycache__/py33compat.cpython-36.pyc,, +setuptools/__pycache__/monkey.cpython-36.pyc,, +setuptools/__pycache__/site-patch.cpython-36.pyc,, +setuptools/__pycache__/dep_util.cpython-36.pyc,, +setuptools/__pycache__/ssl_support.cpython-36.pyc,, +setuptools/__pycache__/py36compat.cpython-36.pyc,, +setuptools/__pycache__/msvc.cpython-36.pyc,, +setuptools/__pycache__/py31compat.cpython-36.pyc,, +setuptools/__pycache__/sandbox.cpython-36.pyc,, +setuptools/__pycache__/extension.cpython-36.pyc,, +setuptools/__pycache__/__init__.cpython-36.pyc,, +setuptools/__pycache__/launch.cpython-36.pyc,, +setuptools/__pycache__/windows_support.cpython-36.pyc,, +setuptools/__pycache__/unicode_utils.cpython-36.pyc,, +setuptools/__pycache__/archive_util.cpython-36.pyc,, +setuptools/__pycache__/lib2to3_ex.cpython-36.pyc,, +setuptools/__pycache__/build_meta.cpython-36.pyc,, +setuptools/__pycache__/namespaces.cpython-36.pyc,, +setuptools/__pycache__/depends.cpython-36.pyc,, +setuptools/__pycache__/wheel.cpython-36.pyc,, +setuptools/__pycache__/py27compat.cpython-36.pyc,, +setuptools/__pycache__/glob.cpython-36.pyc,, +setuptools/extern/__pycache__/__init__.cpython-36.pyc,, +__pycache__/easy_install.cpython-36.pyc,, diff --git a/week-0/day-3/venv/lib/python3.6/site-packages/setuptools-39.0.1.dist-info/WHEEL b/week-0/day-3/venv/lib/python3.6/site-packages/setuptools-39.0.1.dist-info/WHEEL new file mode 100644 index 00000000..7332a419 --- /dev/null +++ b/week-0/day-3/venv/lib/python3.6/site-packages/setuptools-39.0.1.dist-info/WHEEL @@ -0,0 +1,6 @@ +Wheel-Version: 1.0 +Generator: bdist_wheel (0.30.0) +Root-Is-Purelib: true +Tag: py2-none-any +Tag: py3-none-any + diff --git a/week-0/day-3/venv/lib/python3.6/site-packages/setuptools-39.0.1.dist-info/dependency_links.txt b/week-0/day-3/venv/lib/python3.6/site-packages/setuptools-39.0.1.dist-info/dependency_links.txt new file mode 100644 index 00000000..e87d0210 --- /dev/null +++ b/week-0/day-3/venv/lib/python3.6/site-packages/setuptools-39.0.1.dist-info/dependency_links.txt @@ -0,0 +1,2 @@ +https://files.pythonhosted.org/packages/source/c/certifi/certifi-2016.9.26.tar.gz#md5=baa81e951a29958563689d868ef1064d +https://files.pythonhosted.org/packages/source/w/wincertstore/wincertstore-0.2.zip#md5=ae728f2f007185648d0c7a8679b361e2 diff --git a/week-0/day-3/venv/lib/python3.6/site-packages/setuptools-39.0.1.dist-info/entry_points.txt b/week-0/day-3/venv/lib/python3.6/site-packages/setuptools-39.0.1.dist-info/entry_points.txt new file mode 100644 index 00000000..b429e524 --- /dev/null +++ b/week-0/day-3/venv/lib/python3.6/site-packages/setuptools-39.0.1.dist-info/entry_points.txt @@ -0,0 +1,64 @@ +[console_scripts] +easy_install = setuptools.command.easy_install:main + +[distutils.commands] +alias = setuptools.command.alias:alias +bdist_egg = setuptools.command.bdist_egg:bdist_egg +bdist_rpm = setuptools.command.bdist_rpm:bdist_rpm +bdist_wininst = setuptools.command.bdist_wininst:bdist_wininst +build_clib = setuptools.command.build_clib:build_clib +build_ext = setuptools.command.build_ext:build_ext +build_py = setuptools.command.build_py:build_py +develop = setuptools.command.develop:develop +dist_info = setuptools.command.dist_info:dist_info +easy_install = setuptools.command.easy_install:easy_install +egg_info = setuptools.command.egg_info:egg_info +install = setuptools.command.install:install +install_egg_info = setuptools.command.install_egg_info:install_egg_info +install_lib = setuptools.command.install_lib:install_lib +install_scripts = setuptools.command.install_scripts:install_scripts +register = setuptools.command.register:register +rotate = setuptools.command.rotate:rotate +saveopts = setuptools.command.saveopts:saveopts +sdist = setuptools.command.sdist:sdist +setopt = setuptools.command.setopt:setopt +test = setuptools.command.test:test +upload = setuptools.command.upload:upload +upload_docs = setuptools.command.upload_docs:upload_docs + +[distutils.setup_keywords] +convert_2to3_doctests = setuptools.dist:assert_string_list +dependency_links = setuptools.dist:assert_string_list +eager_resources = setuptools.dist:assert_string_list +entry_points = setuptools.dist:check_entry_points +exclude_package_data = setuptools.dist:check_package_data +extras_require = setuptools.dist:check_extras +include_package_data = setuptools.dist:assert_bool +install_requires = setuptools.dist:check_requirements +namespace_packages = setuptools.dist:check_nsp +package_data = setuptools.dist:check_package_data +packages = setuptools.dist:check_packages +python_requires = setuptools.dist:check_specifier +setup_requires = setuptools.dist:check_requirements +test_loader = setuptools.dist:check_importable +test_runner = setuptools.dist:check_importable +test_suite = setuptools.dist:check_test_suite +tests_require = setuptools.dist:check_requirements +use_2to3 = setuptools.dist:assert_bool +use_2to3_exclude_fixers = setuptools.dist:assert_string_list +use_2to3_fixers = setuptools.dist:assert_string_list +zip_safe = setuptools.dist:assert_bool + +[egg_info.writers] +PKG-INFO = setuptools.command.egg_info:write_pkg_info +dependency_links.txt = setuptools.command.egg_info:overwrite_arg +depends.txt = setuptools.command.egg_info:warn_depends_obsolete +eager_resources.txt = setuptools.command.egg_info:overwrite_arg +entry_points.txt = setuptools.command.egg_info:write_entries +namespace_packages.txt = setuptools.command.egg_info:overwrite_arg +requires.txt = setuptools.command.egg_info:write_requirements +top_level.txt = setuptools.command.egg_info:write_toplevel_names + +[setuptools.installation] +eggsecutable = setuptools.command.easy_install:bootstrap + diff --git a/week-0/day-3/venv/lib/python3.6/site-packages/setuptools-39.0.1.dist-info/metadata.json b/week-0/day-3/venv/lib/python3.6/site-packages/setuptools-39.0.1.dist-info/metadata.json new file mode 100644 index 00000000..494b205f --- /dev/null +++ b/week-0/day-3/venv/lib/python3.6/site-packages/setuptools-39.0.1.dist-info/metadata.json @@ -0,0 +1 @@ +{"classifiers": ["Development Status :: 5 - Production/Stable", "Intended Audience :: Developers", "License :: OSI Approved :: MIT License", "Operating System :: OS Independent", "Programming Language :: Python :: 2", "Programming Language :: Python :: 2.7", "Programming Language :: Python :: 3", "Programming Language :: Python :: 3.3", "Programming Language :: Python :: 3.4", "Programming Language :: Python :: 3.5", "Programming Language :: Python :: 3.6", "Topic :: Software Development :: Libraries :: Python Modules", "Topic :: System :: Archiving :: Packaging", "Topic :: System :: Systems Administration", "Topic :: Utilities"], "description_content_type": "text/x-rst; charset=UTF-8", "extensions": {"python.commands": {"wrap_console": {"easy_install": "setuptools.command.easy_install:main"}}, "python.details": {"contacts": [{"email": "distutils-sig@python.org", "name": "Python Packaging Authority", "role": "author"}], "document_names": {"description": "DESCRIPTION.rst"}, "project_urls": {"Home": "https://github.com/pypa/setuptools"}}, "python.exports": {"console_scripts": {"easy_install": "setuptools.command.easy_install:main"}, "distutils.commands": {"alias": "setuptools.command.alias:alias", "bdist_egg": "setuptools.command.bdist_egg:bdist_egg", "bdist_rpm": "setuptools.command.bdist_rpm:bdist_rpm", "bdist_wininst": "setuptools.command.bdist_wininst:bdist_wininst", "build_clib": "setuptools.command.build_clib:build_clib", "build_ext": "setuptools.command.build_ext:build_ext", "build_py": "setuptools.command.build_py:build_py", "develop": "setuptools.command.develop:develop", "dist_info": "setuptools.command.dist_info:dist_info", "easy_install": "setuptools.command.easy_install:easy_install", "egg_info": "setuptools.command.egg_info:egg_info", "install": "setuptools.command.install:install", "install_egg_info": "setuptools.command.install_egg_info:install_egg_info", "install_lib": "setuptools.command.install_lib:install_lib", "install_scripts": "setuptools.command.install_scripts:install_scripts", "register": "setuptools.command.register:register", "rotate": "setuptools.command.rotate:rotate", "saveopts": "setuptools.command.saveopts:saveopts", "sdist": "setuptools.command.sdist:sdist", "setopt": "setuptools.command.setopt:setopt", "test": "setuptools.command.test:test", "upload": "setuptools.command.upload:upload", "upload_docs": "setuptools.command.upload_docs:upload_docs"}, "distutils.setup_keywords": {"convert_2to3_doctests": "setuptools.dist:assert_string_list", "dependency_links": "setuptools.dist:assert_string_list", "eager_resources": "setuptools.dist:assert_string_list", "entry_points": "setuptools.dist:check_entry_points", "exclude_package_data": "setuptools.dist:check_package_data", "extras_require": "setuptools.dist:check_extras", "include_package_data": "setuptools.dist:assert_bool", "install_requires": "setuptools.dist:check_requirements", "namespace_packages": "setuptools.dist:check_nsp", "package_data": "setuptools.dist:check_package_data", "packages": "setuptools.dist:check_packages", "python_requires": "setuptools.dist:check_specifier", "setup_requires": "setuptools.dist:check_requirements", "test_loader": "setuptools.dist:check_importable", "test_runner": "setuptools.dist:check_importable", "test_suite": "setuptools.dist:check_test_suite", "tests_require": "setuptools.dist:check_requirements", "use_2to3": "setuptools.dist:assert_bool", "use_2to3_exclude_fixers": "setuptools.dist:assert_string_list", "use_2to3_fixers": "setuptools.dist:assert_string_list", "zip_safe": "setuptools.dist:assert_bool"}, "egg_info.writers": {"PKG-INFO": "setuptools.command.egg_info:write_pkg_info", "dependency_links.txt": "setuptools.command.egg_info:overwrite_arg", "depends.txt": "setuptools.command.egg_info:warn_depends_obsolete", "eager_resources.txt": "setuptools.command.egg_info:overwrite_arg", "entry_points.txt": "setuptools.command.egg_info:write_entries", "namespace_packages.txt": "setuptools.command.egg_info:overwrite_arg", "requires.txt": "setuptools.command.egg_info:write_requirements", "top_level.txt": "setuptools.command.egg_info:write_toplevel_names"}, "setuptools.installation": {"eggsecutable": "setuptools.command.easy_install:bootstrap"}}}, "extras": ["certs", "ssl"], "generator": "bdist_wheel (0.30.0)", "keywords": ["CPAN", "PyPI", "distutils", "eggs", "package", "management"], "metadata_version": "2.0", "name": "setuptools", "project_url": "Documentation, https://setuptools.readthedocs.io/", "requires_python": ">=2.7,!=3.0.*,!=3.1.*,!=3.2.*", "summary": "Easily download, build, install, upgrade, and uninstall Python packages", "version": "39.0.1"} \ No newline at end of file diff --git a/week-0/day-3/venv/lib/python3.6/site-packages/setuptools-39.0.1.dist-info/top_level.txt b/week-0/day-3/venv/lib/python3.6/site-packages/setuptools-39.0.1.dist-info/top_level.txt new file mode 100644 index 00000000..4577c6a7 --- /dev/null +++ b/week-0/day-3/venv/lib/python3.6/site-packages/setuptools-39.0.1.dist-info/top_level.txt @@ -0,0 +1,3 @@ +easy_install +pkg_resources +setuptools diff --git a/week-0/day-3/venv/lib/python3.6/site-packages/setuptools-39.0.1.dist-info/zip-safe b/week-0/day-3/venv/lib/python3.6/site-packages/setuptools-39.0.1.dist-info/zip-safe new file mode 100644 index 00000000..8b137891 --- /dev/null +++ b/week-0/day-3/venv/lib/python3.6/site-packages/setuptools-39.0.1.dist-info/zip-safe @@ -0,0 +1 @@ + diff --git a/week-0/day-3/venv/lib/python3.6/site-packages/setuptools/__init__.py b/week-0/day-3/venv/lib/python3.6/site-packages/setuptools/__init__.py new file mode 100644 index 00000000..7da47fbe --- /dev/null +++ b/week-0/day-3/venv/lib/python3.6/site-packages/setuptools/__init__.py @@ -0,0 +1,180 @@ +"""Extensions to the 'distutils' for large or complex distributions""" + +import os +import functools +import distutils.core +import distutils.filelist +from distutils.util import convert_path +from fnmatch import fnmatchcase + +from setuptools.extern.six.moves import filter, map + +import setuptools.version +from setuptools.extension import Extension +from setuptools.dist import Distribution, Feature +from setuptools.depends import Require +from . import monkey + +__all__ = [ + 'setup', 'Distribution', 'Feature', 'Command', 'Extension', 'Require', + 'find_packages', +] + +__version__ = setuptools.version.__version__ + +bootstrap_install_from = None + +# If we run 2to3 on .py files, should we also convert docstrings? +# Default: yes; assume that we can detect doctests reliably +run_2to3_on_doctests = True +# Standard package names for fixer packages +lib2to3_fixer_packages = ['lib2to3.fixes'] + + +class PackageFinder(object): + """ + Generate a list of all Python packages found within a directory + """ + + @classmethod + def find(cls, where='.', exclude=(), include=('*',)): + """Return a list all Python packages found within directory 'where' + + 'where' is the root directory which will be searched for packages. It + should be supplied as a "cross-platform" (i.e. URL-style) path; it will + be converted to the appropriate local path syntax. + + 'exclude' is a sequence of package names to exclude; '*' can be used + as a wildcard in the names, such that 'foo.*' will exclude all + subpackages of 'foo' (but not 'foo' itself). + + 'include' is a sequence of package names to include. If it's + specified, only the named packages will be included. If it's not + specified, all found packages will be included. 'include' can contain + shell style wildcard patterns just like 'exclude'. + """ + + return list(cls._find_packages_iter( + convert_path(where), + cls._build_filter('ez_setup', '*__pycache__', *exclude), + cls._build_filter(*include))) + + @classmethod + def _find_packages_iter(cls, where, exclude, include): + """ + All the packages found in 'where' that pass the 'include' filter, but + not the 'exclude' filter. + """ + for root, dirs, files in os.walk(where, followlinks=True): + # Copy dirs to iterate over it, then empty dirs. + all_dirs = dirs[:] + dirs[:] = [] + + for dir in all_dirs: + full_path = os.path.join(root, dir) + rel_path = os.path.relpath(full_path, where) + package = rel_path.replace(os.path.sep, '.') + + # Skip directory trees that are not valid packages + if ('.' in dir or not cls._looks_like_package(full_path)): + continue + + # Should this package be included? + if include(package) and not exclude(package): + yield package + + # Keep searching subdirectories, as there may be more packages + # down there, even if the parent was excluded. + dirs.append(dir) + + @staticmethod + def _looks_like_package(path): + """Does a directory look like a package?""" + return os.path.isfile(os.path.join(path, '__init__.py')) + + @staticmethod + def _build_filter(*patterns): + """ + Given a list of patterns, return a callable that will be true only if + the input matches at least one of the patterns. + """ + return lambda name: any(fnmatchcase(name, pat=pat) for pat in patterns) + + +class PEP420PackageFinder(PackageFinder): + @staticmethod + def _looks_like_package(path): + return True + + +find_packages = PackageFinder.find + + +def _install_setup_requires(attrs): + # Note: do not use `setuptools.Distribution` directly, as + # our PEP 517 backend patch `distutils.core.Distribution`. + dist = distutils.core.Distribution(dict( + (k, v) for k, v in attrs.items() + if k in ('dependency_links', 'setup_requires') + )) + # Honor setup.cfg's options. + dist.parse_config_files(ignore_option_errors=True) + if dist.setup_requires: + dist.fetch_build_eggs(dist.setup_requires) + + +def setup(**attrs): + # Make sure we have any requirements needed to interpret 'attrs'. + _install_setup_requires(attrs) + return distutils.core.setup(**attrs) + +setup.__doc__ = distutils.core.setup.__doc__ + + +_Command = monkey.get_unpatched(distutils.core.Command) + + +class Command(_Command): + __doc__ = _Command.__doc__ + + command_consumes_arguments = False + + def __init__(self, dist, **kw): + """ + Construct the command for dist, updating + vars(self) with any keyword parameters. + """ + _Command.__init__(self, dist) + vars(self).update(kw) + + def reinitialize_command(self, command, reinit_subcommands=0, **kw): + cmd = _Command.reinitialize_command(self, command, reinit_subcommands) + vars(cmd).update(kw) + return cmd + + +def _find_all_simple(path): + """ + Find all files under 'path' + """ + results = ( + os.path.join(base, file) + for base, dirs, files in os.walk(path, followlinks=True) + for file in files + ) + return filter(os.path.isfile, results) + + +def findall(dir=os.curdir): + """ + Find all files under 'dir' and return the list of full filenames. + Unless dir is '.', return full filenames with dir prepended. + """ + files = _find_all_simple(dir) + if dir == os.curdir: + make_rel = functools.partial(os.path.relpath, start=dir) + files = map(make_rel, files) + return list(files) + + +monkey.patch_all() diff --git a/week-0/day-3/venv/lib/python3.6/site-packages/setuptools/__pycache__/__init__.cpython-36.pyc b/week-0/day-3/venv/lib/python3.6/site-packages/setuptools/__pycache__/__init__.cpython-36.pyc new file mode 100644 index 0000000000000000000000000000000000000000..7624f8733cb894dbbcb56657ad9de97b358ab01b GIT binary patch literal 6246 zcmb7I-E-T<5yuxnP@-gplI{2-G2%F(>DYAYq>a<Kj#E2!)250iO`0ht84QFwil9J% zx&v*AL*+&8G@Ys4mrkBKo#{)bo#|hM*FNQ6$WwoNAVEq|)0P|@?hbc*dwaXT-Mu$f zR+irT=&djAozk>_X$!w9>UZ$S8@i@3&C{69j9B+{^)@_1y-m+j?}~bxu|24IRh`CK zu`{T7HC3;~OM_)^c~JN2s%^w8-YUk}@rgmhYpA|z{M?}FH3w_nnrb`o`rxE@67?Ee zicbwrd#6!fW_7m0R@n*GV9#w;z32IA|4jd^ca|C6Io9;fv$ZYVd*Ok`*4fD?8av5f zJTScrXrE%I(LT*DpzZPt{g=Fp?0I(PiRQh`&a!2^FLA5?O8-({<ClDmpYFe^+N}fK zyNvng*ed3)^2?atV&~Zln9=5X|4LV9FR}|ybni9Hxq6_1OXF8s+a2F|e>dZajM7B9 zS?Xpz?zUJYvr!hsvgLMD;l_d3;w~y-IvB=$*QM_w+Qbmd`i72Uqpj!lFijqDk@>?Q z>!H2eO$I?0_QF8&wvpT2D9*UZ%|S54*IKzQzSZw7P|U0Md610+$EfPZd}kC1{tb>- zL)#vt$u{51E0SlUp`haz4vM^bHysRugbACvYSgvTjS>cC!tG#-%TLBDakP0OOW){p zqg^gT3@LvWYIpF+pP}Fy)JG%L@l0+pqpPu%uE{J`d7?wi74+Gx`b0zB=2hmfnyNdf zFVPX9zsBki?rOgBuvq;*IN@Ua!IF#L1D<dZWZVth7~6K!t{cR$`*1JorHMP^7m^<( z%zYeXy(qy@1}TJDD)tnOT<_%im5}(RAH8Ygck#$qQDoXg>+6{@0mrDB%$yj1F`iMc zIWeDU2j+ne4y~YOYTCz;rJywwJO7oJk`uS}xW@%=Eh(00Yts%lf-XUkM4D!E#@)xg zDC}WJ*z6{EB@aZ{<4md8Y}Xyv{U9sJ$zD2&nHoGA4&w-e0|`Dah9Z^n+At0>=;z>~ zdpYXxj{E7yA6}E$Ud-E&V%B@djWV@bNe`<|brh7Q${q}dA{~l|4kS*)AXal-xtC<Y zZf9X@d^e0ojJIfW0l428@g#&<bZ1BACc%I!Bbp9<$8B9{xnYpd4n~r*k`c8F2!e%y zU@p#=q@|``b>#>`%6dWOwz_HB0R<(oDNRz9l8hW}&ICt%(D;^n8FuL=5PZ>$GRfm^ zdvPaG@;~onI+Tv33vssOeC;6*qb`o*s+%V9UbzD{6NfBMdP;=NsStn1Q6k+d^uFBJ zOkEa;w8{;TY;mGl5G8YRJq{{L4~T<8#Lx#|4<N2Tg2lzrHc)PMpq+AR?(ng%kmcL@ z72hB3g#k3w_uGbO!l=X=inf(oWGDHWe+Xav2nz@UBk~o0bA*NQod6FL%rKUDMHx$8 zoi3YKr@Q!vCeC5jw{Kt12E*&aXn0M{z9x6%?&c_b^SWXvOVd~`R((H8qRjU@!@b-h zPFf%$2@AERt=oECA2%N^q7Ps%VI^YJF|L9q#3TQSV)t(u5M!bo=TqaJ_Qjt*H}|dm z%Dz3RFyO~;jWgPQbxWJIZfU#2NfqOI`wnIrz!hua92omG)v_ivV2`oCG+F9bRFBOp zw3iu1ZQJrDkf=JT9q4sUe7SRTVosJ1bn*4Xpf~!yo-F?wPHIx=JD{rT+Rn|-w4KIh z8Z&`gm2m-sggNiww8?x*jVTleMm0ktWlY0B7N9iOp5lD2x-ghh1;}ue51eU-Ta213 z$tTLSrE#1-j-zB-ZioiN*RJJ8Ds$^`5O3!e!B1}W(<sTSg2$?f3IHqQxheS&+7qYg zw)9CAXFe*o0Y*Gw?YcM(lHz$P&QNg{MQ#zC<`&==$^@>s^c)zBuR2VWd96D_Tdn3` z*`ijR3Px#JQJg25CsEwSBWW4UK5NwVy0N6M;@>dWb;E4xwl#j~unrxg^C7ur`q7&l z(Oo<eff}4pU+){LG$)9*4h-dVjPWb?QUK+GPXqF%+l5&Mvx9thyu6^}ZA)ALN%0bj z+>RveUtC0^t*gGHyCWy);gMvKn)#i5d{_Ep3F=4tF!4}uA<0gDry+VmT=~R->Y3v| zmdf%Vdc;e=sT@IpGFM$ObE$ABaj+Tl0?}t+mWdHO2f=34Evb>(MadB8t->af5TJ?& z6e1+b(G+T4tT9)}?;HTZ)bs%6tbe87Lu8^3z}zUOkaP$J-k>R@WfSd-=Dwb3Uul2> z?WsXVxPwp#J2#;CCX@@Yo*?-kZZkTsi`S{D=N7rIxq5wDyS0TlXLl%WbD~WPS=#u{ z5p`Mw%FZq2f8}jdg25&Ws6rl@dS=9khalMl3pa{&9dM+eecB~RxpQYmLM@ISZG7$j zT3YP{B!7shhw939NV|PJg?8EFbKgUo#PuA;wwH3p_en~=pD+3TAZ4SN>UH1W83pn5 zOV#&T8lrnSi~(5#j;N4{7l;kA*t{;YAdA9jKdHGOZWi>Pyor*6IDs13h|*%mv<yRU zo~oa(SJanM;W0uf{2dxfXfTU_xvA8iB3et~u9dGneE;E_H(o!q-%^{%a_G5Bga`@> zz1jF=CPA{^1x}SLX$uieP?l<pTgR->IR-5^+7<B@(Yr~-+f>}5LWxAlU|y(&euA$( zJZd3F7t}6UFZ6TD`W<|kg4a|6@K)A=R#?!1z7IdyC$DHdg=a$D7PnAVsYbqvY2>5k zRz}uB;*j*vfxybnes1jR`v}mPxor!)Cq{Q>ZIqc=d4qBC28c5E;3nW{@>LZI_@c;( z<ObprLU8de6|~#7DSm)gu5ai1qoaZ*8z13OCu3>0KE8q&0_p^xahUKib_cKLtw&o) zD!88xDe?0W?xaGtoxE1&i@6nIfJ)2AQH5DvL0B}9d2<*D$$i9X-DryfBQ6!!UZcyA zB2EJ)zO^NRDiv5Xd>jZM%{+XF`RV__@(yim358}l`YEf92uOT@R;lDORR0AHEWFbM zimhuId{p1;;!K_q%IO<$H8fNFlnPR1K~4Zx{DA6*`B9&~M86WMW;lAeAUfw(bs3Gh zRrM{{6EaC=FcS&7jU2MVY$WGZRs{<+v4Y|ELuC+CDx^Y+^%qeg-JC%04h*nw&^8c# z!MQ^76i|=*rBk_!3?1GkETS4D@RTI0l#8T$)g28P;3U~9Cp^MIT~;XrqUWsV0&HDm z+>cWvDmX;I7tmJDy${3%T$^U!gm6Vznp;FDw-tTfHgk(;3d*l@WBc(@G1Ata;VHye zLGap`lI+YV3Od1%<Ul`iT4Yj6CN3&7nLrMRTOk!oNd<W>EYzAE?9VYWUl*L1jDk2C zlTH>F2Or{-_$3P9$_5RqPQT>MV!V%ZYuY8nM>N6=2khuh9^%8-c%+R&Q{mM3{A@4B zElmD_w$^rz!Wl6uevHC9J6)FyNRE(Y`nZz8JISOV2?$zsffJ>q3iL>meve0G299nU zmf<*uP>&=@TCVO53cN35sqoDp%tJsxVVv2wNarBS%J>zfFm$h>E-#ctyST96!fjCi z+EU-kg=i6a6arpF1qgTv2?h{w9~TlxBi3<fDqaK<B2iFrM+1=uK`Cs~oQHpc5EO@` zkj~n~?UHDtM_fTcsSpCgBSuQd_g6dx^68E~ez^!_74$`PsdYT$39>dUr9w{^bwN5; z1f19DlTieui0$Pl#$g;@IBy(X=FgZ^Xhy}>o2K{-?NUgj+eBZT#*a{;TO8$W6i96w zqLbka09cj2O#$^&W8cWC$eC~|I3ow|!v6p8J*R_2p#`gEvlx|v%Go^><qwqbaCH|^ z82P6Oz*^EZ4&8jTI;}FgJv_RA3mP^=rbCX46$B8nRp4br24JK8Drx3+I1<yGCBeNG zvfCV)iXf{j<ohxWC7luLD4+nZQJoIia|QvjCS*8A<z1y57l-<Hj4HfA#nG4aCLZxQ zQMsn<sW?wc5AxO0cXgEOBGAv9^G*_mO7|BA($#2@=~t&$oGKpn&doFR4#%ykNIEjw z?F`aK@ODaZXggkWVHoa9>FPCKn)i9@^SUCVE@#!frgviDlk$$`1?VBFMc^QdYfw!r z)1DAllD7MKb+#tbt7+Buy;GY=F5xMHVd-GIA{}_^VwCuFYwE+}BQVXl%%pc}dX)<G z-sNJJzXI;l%|31^Rd}i5t0Hh+1p|doB~Pk+s<*PmGk=r-E9eqXc|4&2PpQanXdIoG zS5qU1_l3hQ@eP4~5l7!92$cku0617U{VAbspjFo!R5uY6n2uptmSLNX`wbhd6{k`+ MSIx$nQ(vwB8<!|S4*&oF literal 0 HcmV?d00001 diff --git a/week-0/day-3/venv/lib/python3.6/site-packages/setuptools/__pycache__/archive_util.cpython-36.pyc b/week-0/day-3/venv/lib/python3.6/site-packages/setuptools/__pycache__/archive_util.cpython-36.pyc new file mode 100644 index 0000000000000000000000000000000000000000..ace9d06c23f302e885cb2f21eab83354d4fa7d02 GIT binary patch literal 5094 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 literal 0 HcmV?d00001 diff --git a/week-0/day-3/venv/lib/python3.6/site-packages/setuptools/__pycache__/build_meta.cpython-36.pyc b/week-0/day-3/venv/lib/python3.6/site-packages/setuptools/__pycache__/build_meta.cpython-36.pyc new file mode 100644 index 0000000000000000000000000000000000000000..3364f8fa5c1280b0ad84a9251370eda43784ec94 GIT binary patch literal 5867 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 Wt+cV>E?3Ld)oRJ5zq5wvp8OYGXSpl@ literal 0 HcmV?d00001 diff --git a/week-0/day-3/venv/lib/python3.6/site-packages/setuptools/__pycache__/config.cpython-36.pyc b/week-0/day-3/venv/lib/python3.6/site-packages/setuptools/__pycache__/config.cpython-36.pyc new file mode 100644 index 0000000000000000000000000000000000000000..fb6df2daab18341286db0906a3ae946a73c69835 GIT binary patch literal 14323 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 Pqs!m4zG*Elf8u`umPxt} literal 0 HcmV?d00001 diff --git a/week-0/day-3/venv/lib/python3.6/site-packages/setuptools/__pycache__/dep_util.cpython-36.pyc b/week-0/day-3/venv/lib/python3.6/site-packages/setuptools/__pycache__/dep_util.cpython-36.pyc new file mode 100644 index 0000000000000000000000000000000000000000..238e1ec6a180581e0d0254560f77b15791146c56 GIT binary patch literal 813 zcmY*XOK%e~5VrRbO4?K?;!tjL+pd%*5>O!|gm_*-0*OkIs>oS8iK*ASwY^HIwim*G zLHwn?a^f$*h1qo~rCxb<Jdf|28T-j#(0~2$+4;|qkl$oy1*pHmZI4iJ!l@!Tol;78 zz{4M88t~{dN#j50B`Iz8wO9)?TbiOOvo^O~@piw(zf~w4smX?-q#Jq>nj=R!YTxOS z+yuD8t2Zw2F&p}hoIk#aTv(GjdW0FR+yrJ^2VWy^+h8?yh$rvE)8+V#)Il9C0<0~# z{&&XI1<VV#0%n#~F0`{CHI&RSrGy%R6V^$+1i1jgvK82(GMRv`4UiVPuKIw>t(XRh z`B`C%uw|ino9GZ&xG{VZt}@yJLvU%JSb&liqmMnJ^^>t9kJTmF6xJ(Y#Fi8*+wyrX zk30gFA*1Ii(1YP3XWGfkc38-i?9Bc+O~#%5`ZT#iodDAu5|3&V$Sdn$E<7U31t_7H zZk5JOh+5PC!c-;R8&jAjHcT&tX>YaZv9c7Jr}6ag4!mvdZK0d{dbV}7>aCT^U&QPq z#NX!=mzR@LmM8N{Dt=-w?bW=>o=z;zuyjSC?5@g1Ijfvh<MLbc(0AI7crC5)L+!P% zYlwpM9?-ooq7fb9cSwhU8KCt;8a6|Yx6z{5@hx80PZ!XYwIdENso8sx7rav9CB>6% Idq0T(1D)aP@&Et; literal 0 HcmV?d00001 diff --git a/week-0/day-3/venv/lib/python3.6/site-packages/setuptools/__pycache__/depends.cpython-36.pyc b/week-0/day-3/venv/lib/python3.6/site-packages/setuptools/__pycache__/depends.cpython-36.pyc new file mode 100644 index 0000000000000000000000000000000000000000..7a6625321ca0c486434d1a888591bab32344d3af GIT binary patch literal 5239 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 literal 0 HcmV?d00001 diff --git a/week-0/day-3/venv/lib/python3.6/site-packages/setuptools/__pycache__/dist.cpython-36.pyc b/week-0/day-3/venv/lib/python3.6/site-packages/setuptools/__pycache__/dist.cpython-36.pyc new file mode 100644 index 0000000000000000000000000000000000000000..07252873fd25e141a38acea789d16b2c2fab0291 GIT binary patch literal 36818 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 Yfg7w?8ppnbdy}ORga&^!75%IHe^F}C0ssI2 literal 0 HcmV?d00001 diff --git a/week-0/day-3/venv/lib/python3.6/site-packages/setuptools/__pycache__/extension.cpython-36.pyc b/week-0/day-3/venv/lib/python3.6/site-packages/setuptools/__pycache__/extension.cpython-36.pyc new file mode 100644 index 0000000000000000000000000000000000000000..594a7516d7676a9404d8a75a34a82034f0d9d732 GIT binary patch literal 1933 zcmaJ>Uys~05VxJ|ZZ>zjJ=zKZt%RW!Wz{xCfK-G46%~qv&{b;h0V1I&7kh8Bmw&aL z_I8zf+P=a^;GK`b*RXiwsb7I7W|F<!RjNod<FP#+|K^`Rn@s#~AK(A=uOT7-kPDv+ z@&h2<024&ejD+1tL)y++=(MA|9S7~mvSB_7N0bOhxS5xa!!gJMF?>lvU;5#W97|`p zyPRxjIQ@Z$k?>v;;mPU72`4Zg3m@jboWT5&pijwc=M^9z`!i~tJg#0*n1DPvk|wH) zDmKYNiUd{g!`&UAhd}yMV1k~K)m1|pBG?fX&Tni<0g(HYxWuqyU)`Z_h>~AO!F~py zaN%(MiO=DCB2BFdexPc}(>Z^*GK;d{NnG$lSjekV87YERb^Ttq8+?~)Q=2r?!C{?d zB9bS@j(ZVsdvjIh8E73mnmN{wqRvnhsR5w1<L^%rS(&sfW;EPM+AC2d`;(|KDE#~7 zJ(E}Ws<gV>TD_~E>661c`TU*+w3R8#OkWh?epzTR7gQ^|8!h7JGU}}EVuYr^i0e|u z_NYszbVwCOuMa0~GoS}Rngf#rvmY`+A=^wikX2W>VgMuL7=kxK7q)k<@Ao1%i`ej5 zOU-Wu$t^xlGZ52)S6Q4$Ud~~;TAge+5(lor4`YIr_!vlk46JdNkW#@mtRWFKZ0R(l zp$(fmjq?X<+}|;|1aLU}c3Q2XEX`BMQWRI|qnT@+s;txm>_FsuY}SJ;6sd`#*}%G5 zW^?NnaW3shm$gcywr;GBv}MOH+8lJu2P<k1*bN|!Ac-@j>&v~_;LK`*MTs9OA+^Q1 z4}u{ZqI|6KhAe4yS+G;u&?VbI_Z%~IQ@8~agHvXlrE3Pup%^x7<D5EXWV{AEUye6y zLm?95wo^vyzuRi;inojG)&>3|H4Ba*=JG5(nwyfpwr>`a8}L<{-cA-5M|FH8&yNNC zV3BH`%VZH3sm^(vW#tRad(F6pMp2#hx~j5OZ>&=CZc-M{C3a4K^<ixg32e@#f<loU z&MmU8!O*3BOV&<u`}W!mlB!y>AXyL4qnk6oty=4yL9hcrB$XY{>mq4;!j7s~nKaHU zQ_?!RKC~`&p~C7`SAfl2^%e}U3?7Gm7Y6KKbsbf(`OXt>uSZ)yA^;F=p+=^R@bnCH zHTD-74w*}RdX?_c^+y*f<9`nC&xTl#Sb$N44@6#yIzxFkik{VRw%r*;kth>*H?RiP z`^e5Qwo+T62!jJ@c;JagUFHoHuD#acSfCGpG}?N-#j%y_=%@5h#cH+w`o~%uo~6f< z$6U#yI*S$W{kp?3mG~|h9&6CZx?|Ai+Q?Y!LyS4xpgutMA+j6D-h}%mY<vNvF+m<x zIG^pQYcQyHf!V3(pW38^oR0f>xYvt;R0>MbUb(PxR{r6&^CvUFrcgzo(~}@CpG)1= zML5jM;#jT}Hf>vCq2Ios)k?_|>*Bp_Fx4egK!|Vh#d=?LIs69WtltLa(e2N6*{<VV Ja)Ix?^B>G4`iB4j literal 0 HcmV?d00001 diff --git a/week-0/day-3/venv/lib/python3.6/site-packages/setuptools/__pycache__/glibc.cpython-36.pyc b/week-0/day-3/venv/lib/python3.6/site-packages/setuptools/__pycache__/glibc.cpython-36.pyc new file mode 100644 index 0000000000000000000000000000000000000000..e1c9fe3f8315113b5c5697f620833a1af48dd14f GIT binary patch literal 1503 zcmZ8h-EJH;6t+FHv(w2>e+U%<1eOR=MkE^q6{x5bs?rFdXsH^cqJ?TSYkPNRcV;}b zJxw>7TrF?FQ}9Z@<%(C}ieqmgl6d4}>)8H${C(%lms?xOlb^qS_0uLof1@jn!2EmY z`bRJvaa^Jbk1%#~Qj!tzV=xN*7>+_7@bC{b>hT_rV2pU5$1wK!EuO#_b8>>xjeh_Q zrP$ui$6A)H5m`|+Qkfxh3$6vwH=sX-uAhT3XpT8v;d8W1Iy5Ke_$8`$LS%wPqV_Oy zAIB%?SGP0laMtVa3Y`-Zb;R^nL?3r#4%Y($>0A)O*~1sYw5ry0S{7qQ-w34(SyOFP zQBU`&RCFk7L5m5krJ=0`?|SQCXnVP4MUmdJ5i`q1Xd6EL;rQ6@OzSqA3X?g+>;lnl zKQVwghIc+wN-7((jLmYDHMXyWcIRzU0K7JN&4djg0vmC`Bo}F5?>0&@p><a0mC#Mj zgo=O=yKw=Z!S=t9x(&X6zdAHkbJ!Hk!MH6-exP6Lx8s&QIMnde#z<M}t5g5*L9>Lo zuLkT8;jxM1eg_QdCz#*_ZwFBj<A@|UA?hypnUl%25W1Utxm>QS<?7IioCjT?cMX{b zoOI|uGU1AVRKW={y)KwXJY0dS9bOQ5bm8fF4_Wj;rf7J!yZ7DmM^!$T>hW)%A3S{Z zS^E3HyNddM*V(tv-Zp|6!EeZUT9_IAf-(siR*Twb>Y)aeJH1b*(tJZd)kn7H-7q+R z+P6dr=QC_(<I`N#KnSSpW_J5UTbrU1FV}7x6t%IvsgiAzhH4w0Z?~0r-4;slYz?~w zutn8YnTNNy@_Mb!9e3azHWO@-UDII~7PNyy{Y@O=2qXycJ*++g4|ApInxoy(@2Phy z2D!ZNpfne;y60-b;0~yVdH~W>GCWGx>Uo?rP#?e{^`SHFuA70qJImjQ%+Z&dVqA)K zh!0?=j=>-ZD~7Pt$1rEk;TneS0=ym+>Yzk@P~iz=K!+w!h%UgiclPHmYDtZxTo|E% zBtgwgT$eIQD74F>%_(GbDX5%WRIH|Zki`3!b)3@ES;1xiILX`6IBZchW_h{WgB3Mp zxnAE@O1WqoI?0Pt5B%!TB9PTp1~5k9Io_n$=RW+twyvplleqY@q>ka_nybijMbszY zfqzGmWs??uK_bhPV@o+5m8&>)-x*h8UL;ShKXv62SMbW`PW-5nye-A!09-y{Hc1Ss M#6kRid?$YIKXyZbxBvhE literal 0 HcmV?d00001 diff --git a/week-0/day-3/venv/lib/python3.6/site-packages/setuptools/__pycache__/glob.cpython-36.pyc b/week-0/day-3/venv/lib/python3.6/site-packages/setuptools/__pycache__/glob.cpython-36.pyc new file mode 100644 index 0000000000000000000000000000000000000000..6ff83d32ccb9812afd091c16edbc220961262635 GIT binary patch literal 3801 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 literal 0 HcmV?d00001 diff --git a/week-0/day-3/venv/lib/python3.6/site-packages/setuptools/__pycache__/launch.cpython-36.pyc b/week-0/day-3/venv/lib/python3.6/site-packages/setuptools/__pycache__/launch.cpython-36.pyc new file mode 100644 index 0000000000000000000000000000000000000000..93fddfb803e4eff0e8830c19514513c3e73e037a GIT binary patch literal 812 zcmYjPO>fjN5cO9!Y1(o@i1y~|B6TYSQZE$(aYdzq+qPBYjoq%>#0j=jbywNb!jT`s zU-Fex{{kn*2@<t6FVCLI<UM8H?C<9vKA&7YrwIK<PZk0G9>UE4B$^|MC8_Wn4^J{D zl1la+&8cECxg++KqFaQKBwx{VvcAYaiO!Tu?w5+6ul%wx+?7_ho&$@QWmDI}NM329 zxVZMp=1%#p^-WVbt{q=Ajd$LPwpEhfYr%EhHrCJbM-YV0%7}4IAQFg=5Y7U4km2zy zk@yg8kf%L}iei7#4Ib|${Xq`L8XEa2^2{eP@slmxke>8ti*M5{+R&cfW^y9aE!i-? z(=+ImK~3WGKI!q6fME)Tch=`QhxMf!&Hb~g!Su?_guS`HczwkM_`2rW^QDkO`9dkf zwYhKZz@ibpv!be2vmy70!Ai)Aq88c|#o3g`!?mtdQAB1$9a&lwvMGVErd4LmF72gR zlS>nrdQjzbH|!O~qSKYv#z7SYJ%L3*fk|EZklrXSytg6qpu*_2vT6J<vr5R2TGdvf zR3U}m)xx)J2Fd9p?2Zlx6=5f8ac!(iqKYC+#`JvGG`23rLttei)h}dULW@5q$G&cl zTiqT-b@Ir4a}SHIe0%(V2%gevn5J2~3e<LHA3C@L0F*GCV>0ZF9FRRcZhHth3nPuD piH!qdpGC+c45>IUgODc>8;0z(Ze&-fcMMK0zQB?UXEb|};lIga+uHyD literal 0 HcmV?d00001 diff --git a/week-0/day-3/venv/lib/python3.6/site-packages/setuptools/__pycache__/lib2to3_ex.cpython-36.pyc b/week-0/day-3/venv/lib/python3.6/site-packages/setuptools/__pycache__/lib2to3_ex.cpython-36.pyc new file mode 100644 index 0000000000000000000000000000000000000000..43c0698e2f83eab5e7c5735f5d3b58670d5b1670 GIT binary patch literal 2391 zcmbVNUvC>l5Wl^DK3|-~O#_Jnfm5j}S!x`qMFIgrK`p6xz(o+L=%jM8y=(U__s7{? zw~pmJIj`^$c;_pv#1l_^g+4K}K407@Er>ns?C#y{?#ypye)n*F-T&t4XV3qv8OC46 zO0!{p1YP_Lf*PSg2{luanW05+Zl!kSgpQuushicpTIPkGUOQ<$tUocROKX<~t+CqN z3Vm36v<~Y!vtVsf=O?4(PtW~FV<C$yo-!JIA5Y@^fh-;dVmulZTz=vE!9mcaR4m^F zgMtVBB7e!ajPqeYi@sz+3g7onUc@5E3OY_%z`L<vBIxG9cNre^E$6VW$b%ow<qH@d zwEe%qF{4FPy}A_^R$2^OrrP|G4Z3|<aJb^6C{ndEWHK7W6UId};6)aVy8YAckahZa z%Cea-If5?kf?!5S05}tYyEH<JTGWQorVe#sbZ89#@YL?(Sje%AQ*rIiKAwgRLt#OG z3SDf2kVZmgWI$%-@8)j?KyJWEq|-7vswsz|vn^ZMf~5mxWn!r8E*}bIp1%6S;0;iE z{pF#|Mu($#bkG~eDLoKpV$vJ;KRpyojz<!F7OT@V?qOUaHffK}RUJ@@^etOxlQxu0 z@4U^EcBNkVgoa{&g8To2Pj;LSik8Ja(C2j&J_>YYA=Y80*6^Z?2?3FL4_+)SyZcVd z$_@Y9Hixp_c=)fzY0$Ll?uu#e22HDXTCVb<DDP%0ij*HkiyVh}BZ|((-E{GVZy*>= z6d08iY&1#;5O+b`f-Z345zq20{jLwos$pD?po@DTsw}QklUkPq@)$B$=dmtt$YT!+ znPU<h_i-;a%vlHeBj|#Im>CIVEhVRQ-o$*J5wVM-G!qL?PV5<(lO1DD2<kd>$ZHr~ zJ(|2HYl+8mS%-K2oLpElD_NVtdGOf30wv`Q*+|xBaPHhJE5hlVOl!wTDZ}73381W< zS3H(1Twjt#ROIP-YeO|C)F6+0P=-YwdSk&N%ywN)d=so!c2dN-+K(!(h$3A#3r^6n z5o&MsGn@3&F=ZubDF3Ri!figz^#yQ$w6sOXL9J<yDbMqG$wCnH>SE<BceiX^4$2wC zDHEZ$JV_D05_}!^0DRboE->{Bt3ho2Y!k=<n7PC!Tjq4Dx}?3lqfc-HGz>2WRR^>O z6AUQ#F@!^yN5<qMNfPt1@qGJ&;J3t*I;0rTv)yMpsEJDrNPu4^0cbdh`xfovXBDN@ zIGW8r1QEW!B%uXHB?AlPvWa9l<(O|A9Sk>@5iHRMW<=spWONOf@b(RHY=f%6Ix+wl z1gAl^p>L4s{uMws?5nWCBB-$Hz(RuelnjlzrLh5=G!FM>B(VSqSR+c4J2L`^>|K~M z6W-dVF29ds;>`5-v->43W+&WuGrfQzYVe2ZO34=p>{JN6smMP8b2O&P<t!^+vXZyL z%~Fw;n1%jTDqcse8NrWWHN8KFQw7qD0YD*CK0MRCRk+^V&}ot5mdkIWHAw#)>6!;9 z_E3C);)>m`7!30ev!P@#|CYC)p4OVGMOaKgiyK(Z`j^^9si}#744YKF`m*>{Hp`T1 lFDs2>+!mRHx9Fn0$qwaxwP4||F|oAkwu!DcP0wns{R1{YMIQhF literal 0 HcmV?d00001 diff --git a/week-0/day-3/venv/lib/python3.6/site-packages/setuptools/__pycache__/monkey.cpython-36.pyc b/week-0/day-3/venv/lib/python3.6/site-packages/setuptools/__pycache__/monkey.cpython-36.pyc new file mode 100644 index 0000000000000000000000000000000000000000..4b2ba63ed7180995a445e7f5cd0f8b4084635e80 GIT binary patch literal 5133 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 QE9;eaD&@*bWv$}<7dnej=>Px# literal 0 HcmV?d00001 diff --git a/week-0/day-3/venv/lib/python3.6/site-packages/setuptools/__pycache__/msvc.cpython-36.pyc b/week-0/day-3/venv/lib/python3.6/site-packages/setuptools/__pycache__/msvc.cpython-36.pyc new file mode 100644 index 0000000000000000000000000000000000000000..858f6d73d981a70dbb0412a54dc072324dfe5007 GIT binary patch literal 34498 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 KaeXp&_kRN)S~@uZ literal 0 HcmV?d00001 diff --git a/week-0/day-3/venv/lib/python3.6/site-packages/setuptools/__pycache__/namespaces.cpython-36.pyc b/week-0/day-3/venv/lib/python3.6/site-packages/setuptools/__pycache__/namespaces.cpython-36.pyc new file mode 100644 index 0000000000000000000000000000000000000000..4e451fa7e28823e11a118a970a8bcc74dde26dd7 GIT binary patch literal 3636 zcmai1Pjef$6<_QhYDrPD>d1CutLe6}LT)P4lg1ez(x_^kIO!p3<9N~z70u3ySV~JT zch>-@NE&i_pbx$E+>g*t(>ty`^(*Mq-@{U*B&!WIc);QT55RlB_eUSEtTcZ2$EW*$ zZCcj9txG=_;~g~l0)$(fWmcDZJ7Yt;YqM(3={lHmGI!{8J!U1&pf*_Q`d?by<=z{M zdsDkx$5)Ln;cF?WPn~Xqvu~}?{}1F^yCKs~Rvc0{jLRO)UHs}8?4Ze)Ac@sw-0Iq# z;Y6D|Z>+9coze9w>D?NC&|TsiU7z3P?|@(D>--M-2EWVip<hm#{HOfgH`bJOSNMJ0 z;b*%3hg_;S%Mx+cc$CZX)nTVpM?HoU=~qLeYdk}fe*+m?18Ztc*qF&RZhdPhHn0Z{ zX5A^oes53gi8HqG?LD<7)I%L(d&-!l{6U>FjG;Q!0B3p3ruM|es42Kw8N0N~$Xp%U z9P9qRHu1*Z;8w-?GkD)vFRZ_qHKDV6wlceWnjZ$6QrkbMa80jAhlz^tq9~V98TVer zhY5Iv)NUE8BkjvFOI32B^s-s0Vu201Zr&cz{8BMe<w!|gi_0>}xv=qW?WTFZ5DpD* zVPg*QP*#+sd7_uNIE}<8*KU?drQHJCbmIqsbBHg)ns#N9^|gad+V7`XlE=eDJ9M09 zmT1=hrzP$~{Q0Mk)v$bArsbo9QJV2b^0hoU81<e!mWdjbswgsfc}S8Z9-7Ebd8%)x zl|7@y^eqULB-vs<bMd#%8mviwcFo3&-DGDQa~O2q7BEKxy`Gvu!&ew6YXJMhg3iqP z3^r%@c42*HxE`#`WXISQSO5ZGbs)eR_{6C!9@@KS%P*2)aa`FltcxXx7d{cfpJ)(S z2GO<T1WK01Dq_{l2-=y1j##HvcZu91LXWP<1B~?gD1ZBLzW_(V_o1CiFD^85_TEAt zH*K10g#3h>(Fi#U-VUz_8Toas!dA$tdtJSac~OWRlHg^rvpb6;F9GxXPC6_Lp#pg- zw*qxqCg=)z{{B%cqhVhLpAn~XoCui~c|;%$wuAP^Tfryc`NI<I0=NM1JA)$4+na4s z6e@&_4>#Lz^iYK7PpT8L^Z=_b#Kt)fqNw6TQM)x?(;2BWYlY{JethLH?i~UC;uOpO zF}x<6ZapmcC<AT*Y@YPvQKoP~cvUF2f~yD4mPUP13?o@4z4n4XKc@31yz_aQ^F(y| z=&FTtiF+5C;He<*XqVxB7>4K1=xW2D5Jr>#?@mVjov+QUU&0g@w}p_WL(+BIh}qi@ z1Jd8H6Gc4jsVKVq!d8T^q>iGfwS|S}@3qSyFI14`!LXd|D?3%>!41!!42>+PC{{|e zFR5)0FN;Nzt5EE31)FUsJL9CfVR$n>DWjRx18;jsf(U1QL8|yD?DV6o=*5}bYe~c{ z=%}@CeCKBP>be0bp~+x>2I6<FftdI`!^7F+&GYc_9X^yrApn5_L1BQ*Hl;7S3MWV- z2qQ=jY~T^+duQTJYLlh0Cw@Psq)|hNak-83g2bWxsdX25_#Qc*yQ^8}oPDZUBdlvj zDxp0@&MeWM3I5_&I2+-=ir@&gnQjQEQl$z$q<?aW5e)&#RJ-Inx>hMD^o>7j2S^1$ zPI2j(-3CcA2?432vJ4JSO6?iTT#H76!t!%8xdvh(5U(OU*Vq~Ybc3C}dqt6#v(4PL zq*f2j=s&=KV$Xn;jYEpPwsI7yiQ+Hv@03aocDD5bIYi`vL`X?^K<O$d`T^2qFw2#} zB5@#XH91y@^Z-s@<lWnI-XgQsDp7i=p8=prUZu!JM9I-C5A8}_E@tF)B~Zxx22Bz+ zEy_ffBCkQ%wM>5H^`wCw?cM^R*Aq}C>||ri#0Q)WDA%y>5TFTOQ}nN!s3L4=!a4g_ zBbfcZOplX1h!+pPP{meonkE?!)KL=j3WVVt&L&A;>L^z8{WHaN8uOX$?d?h$Lc%3G z&Q;QG#hrsruN7X|0T*vq8Vf!{RL9p|D{gHCw0PEG&;DZ5OEF635(MdB7dh}F^x_i` zV6!Np{iihc2;Xn1e+MjbL`kk`H5$MlOt5~_op+IwDOZYL5_zA<Ln50*J|NN}(k4P_ z4PoO$>Q=QM86ZTFZbVTPUNLS)(d$v1(SxJNWOlJZdw)*EWcy#!=m`<>SK}{&@S>Zj zSXJ5^ChDl*VuzTE+-gRY?gc@LDh5gS^ljJnZ~MOQ0tOd<o@HCi^<39?{AJ%WI|xtn z9|3F!P14mC6*#w1O*`D-E_&4Y08~w{eV!aASy9fFH-{<}2oBmal0+4YLfH(s&fOAb zLkvkuAs&O<^^?OxlOt{py+$2}B#W+x%HjU?lTBccOzfqz=|?>^a|hBQxeJ8^DpbsY zC_`WUj|0gZ1GI|+H*P+#DtC56PkfHW;tL|ri5UACo8Dxnudt+#W@3QPd`HksxNJ&5 zU8e{{HAhwP={k~=Fhy|p0eoau5O+{XCnE32^aQ2CaU!cQgvc8saIcuMfi}hm_)q7z gbSFZGIp`+rX#Y1AP`62ErabiF8NS_gd}np<zd_fdYybcN literal 0 HcmV?d00001 diff --git a/week-0/day-3/venv/lib/python3.6/site-packages/setuptools/__pycache__/package_index.cpython-36.pyc b/week-0/day-3/venv/lib/python3.6/site-packages/setuptools/__pycache__/package_index.cpython-36.pyc new file mode 100644 index 0000000000000000000000000000000000000000..3348bb70d3c3392d3c196d2b154ab596a6434343 GIT binary patch literal 32218 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 literal 0 HcmV?d00001 diff --git a/week-0/day-3/venv/lib/python3.6/site-packages/setuptools/__pycache__/pep425tags.cpython-36.pyc b/week-0/day-3/venv/lib/python3.6/site-packages/setuptools/__pycache__/pep425tags.cpython-36.pyc new file mode 100644 index 0000000000000000000000000000000000000000..4b5137b10f9f6198c57df409b67bc22c4c8989d3 GIT binary patch literal 7296 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 Z%d(0nc`K7ESj(1aov>!CA8RaE`5!y!^v3`I literal 0 HcmV?d00001 diff --git a/week-0/day-3/venv/lib/python3.6/site-packages/setuptools/__pycache__/py27compat.cpython-36.pyc b/week-0/day-3/venv/lib/python3.6/site-packages/setuptools/__pycache__/py27compat.cpython-36.pyc new file mode 100644 index 0000000000000000000000000000000000000000..6faac6a81891a488d62233c46713242569a2d20e GIT binary patch literal 769 zcma)3OOMkq5VrH)(A5GbBrd*2VpFLg^#H0sd!PqcDs3-BLXjJLTX&rYwu72gZ_A(I zFXhUKzrcxcT8WAiBh8E-<8Qui{PO%fe)nnm<(Y%fPjq6iM{mLP5&}aRVwgD+XBe_8 zozl%*jF`v#?<n)QyY*Gdg5wTvg9pUIJExx6n=Is^n)9d%Sj5ht{){;{D2eYU@l{<m z)QFXk!gS=OZJJsca$761=**_B$RwQ-S~0?@l7g%F7qCIs3GQ7jc7-Kr&1UOY;5vq| zM_aVV4;b3u`*}>j-ivR%0xU9LE*BrU)^yEZ5XDWa;8;qs;goTuNl8ty5!ISdvL4>t z@h%-8pl!J3CWq?8>BI5>(z{Ub1E~P|{(e0+WixI>bGd4TWS9D@-mTi=)mTHL#?-ac zr^}|BOp9R#Y18!=NAUbe#VXN*Mo&es{y)8TIx!#}K@vxK@K*UYSdNDf+LZ-;3VvvU zd;f!|+FgO+$ePX8hp}3aJ+cG69uS}l-u(mEM{gu8SB%b{L$wA+Y6KyP`!LU0UF3Nm zHIf?m;WB&jcP1&{8Lld2#SW}`cky}B2fEXSm)V81ymFXUPIVy!{Jv4yBUKv3d9LX# kKOr(`wDN#WS+iF1nF~8@g?dipjNB*;aO970;6BEG0GB$p8vp<R literal 0 HcmV?d00001 diff --git a/week-0/day-3/venv/lib/python3.6/site-packages/setuptools/__pycache__/py31compat.cpython-36.pyc b/week-0/day-3/venv/lib/python3.6/site-packages/setuptools/__pycache__/py31compat.cpython-36.pyc new file mode 100644 index 0000000000000000000000000000000000000000..0a02ffb7058a613f5fe2c30c3044e111beaa08bb GIT binary patch literal 1508 zcmZ`(Pj4JG6t_LIGqamEUDCjXB8-GkM`{y6D{%m!B0#`pb4b;~NXVKUJDb^f{?zug znW!hWXHI;G@|EVwiLbzk_q@AFTEHVeKifaQ|8E}LygB*$=<{D*hlKn|u8rHkKZ0q0 z2O^223zm_7UoshJTCt2(K^9Q*l+^b^qQbL@`GFGr01@huM?_f!`;nxtNEZA|YW5T9 zr*I$XxJt6bzkaxR{oCd1SdX(Ypkf_o@%Ka~a{P+Ov6`%cELlsD@i9p!!>xsKqG;-q zav`4Q#tsP{w7EO|3ydZyGZYrXuJ~csBYJn*)Iyi@0s%O14Pbr))7}B{lF0BZHd9Ar zu%f?GN8yB?u@wc?quCI*I(Hxen9e9*E<T*)mEu)r9iJ<{IpvMv8zh)B0>LH%lCoj) zB-fq#&X~p+2tG;a5Y`~!4`Rl!{rihUSG9+2+1{UbrIz>YGkZSoiid|*xvq6hqwRIJ z?H_zvG!;01(DvSClwwgCp$U8-fA6uX+Q#Ij|F$%$aE<9_1p>AMBlQTTy$eK<j7pL* zNwWac4oM7UC`Yi4WF%u)Bbh)n#%2fL7q2ILGoC2Zb6ZxeR@`k>a=F#XA!SaTJ6`2= zzEI}i^5N4`YwqB&Yq(TeImPo6r_77o$a{R=IsO6>xwZ{27j<J4KRV`lEm2#kb8{(4 zVO%Y5>b0D*sjsxWk#uy~Cw(6n327I^(Is1XP7-jB&eFgna62UE%t@)$5LagsH<&c5 z^odW|noK-Wh_Wu75FfzKVtNUU=*9d0PQbwy`G!?kj@~NF-%GOG*g?G=DK)!r{I<@q z5DMaIg!l+<EjmW%#hw3Dxd9g5GQi=AN%T5D1E$||WC<m|g!HeN@6`Q}xB&Y6lXa(V zIuYZ<e4N<qaT*ShJ?&hnhsadUD76k;e01y!Jq^9(L#)mV*S9K5fO(F6;5ldVLcQ%) z0&bmSC_e_XEJl}5M)&CM{|9u9pQZ5tkFlqO7$!ngjqEh?H-vcB<$7}y3n80A2y+WW zn<<iakzoH^BdFOI`g_1wtcPS2vLs9bf12(LASl-w<d1D{*T1E!AJDM#Ble#2aTspP z(mITjJ-EVR63mUQ8uJctL)6Td(5ct#@Mf)x?8~)BUtzUaG%I0@?L%ayY&T+T3LJDk F`v-~bW*h(j literal 0 HcmV?d00001 diff --git a/week-0/day-3/venv/lib/python3.6/site-packages/setuptools/__pycache__/py33compat.cpython-36.pyc b/week-0/day-3/venv/lib/python3.6/site-packages/setuptools/__pycache__/py33compat.cpython-36.pyc new file mode 100644 index 0000000000000000000000000000000000000000..2cf0e924370c64666a82c1b0b92310722820348c GIT binary patch literal 1361 zcmZux&2QX96rT@&t>bMI6x388WEH7lCAvAJQV*@F2D)mI=oUffhb3frJ(H~+ukDOy zQ8w~k*d94@;KUILiN9#Boc3Sf0`GZ=h@fM=H$OkW_vU?#5Bq)p==r_xez6GogIrkw z;735sPrw8bv>?%DrxESmS;Q7Whj_$al5)=?(mM6k14{4_G~%yG$zGuqE9{vQIUps1 z7w*i9JW3?Xd%_a-ibehtA{^nqCBl_kD;@>1FNyGE0QeeUE_%|-udhhH4U%m^zaayE z4Uv)YfEwOp=df+P(X%416V*s%?C157nqK%-omN7IiJGRUez_QcM?lSoz$C$xA||L{ zZ%M=j7Z&Ug8XV)8>z^&OL@#k#&FVy_Xp9SYq|bpGA6QFU5<`w)Mlmo8tp?0kjVw-- z0~)^(<-zvn{R2I#59+MGGnr?FxYL|9=aYGQ_n?t_UhAqVnyav093E~CAJz-w#c@_< zI*#ANgS%+x#om9S99}A=6tr;R!O&)cg=l^Urb!NMYDrFWwqi@F`9GL0nP5u}WS#%e z@|K+v^(!RDZ<3|m+S<zPQ(OIr62Whfo0vG%43V&R$qmv1UOFIi?vW+$ESyuOe%5a8 zi5_@yTc>q}yP~^fX`S6J1L1Z09QAdtwOeP!UceZg-F^v!fbG6`_&Sq?2=_m!>QAAc zgZ;2hG8LXwDwIk3Cah|y5}j3Ln3ZAI^=gvKREPWcvTx`_VJX%f!>X;pKUs4?838z6 z{{?H{8#_@dS#<p}ZdyUxg*3d7rQsrLO#kW8i&1>^^^<R(jmF0&7`-|kjUSI5qe!7& z)6YsRr&7gwQOibQ(FdM#@smA)VQLJQ)rsM?Rwj_=T9!hJ7;-YKstpGa^@^&TcJ|%C zY*-IHVD~lnj^Bs3CIm+KHVv3XE#@;1D5SutPXlUk3-CK<qjNDH*yyiJW-^YAAIGyw z%nQUp9G}gTV)I4eaI24y;SgP67?HAp?Ep2Hs7F2CNsM<nk;a>svPqL#4tCToTA;Ss zN~@xP{y@hXW8vjBTVKrTO6ieOm5O%$y$eGuk}A9EMj!l7K7=2@a8`W}wZ?85AHx=K zkqX%r-#D8|*u>>drB1X~>Q<-w^!VAAUv)nX^)bfwjtq_WU{jcfI6KWAFh~<B%b>>B OsLui#@PKdM3i#j6*Hp9s literal 0 HcmV?d00001 diff --git a/week-0/day-3/venv/lib/python3.6/site-packages/setuptools/__pycache__/py36compat.cpython-36.pyc b/week-0/day-3/venv/lib/python3.6/site-packages/setuptools/__pycache__/py36compat.cpython-36.pyc new file mode 100644 index 0000000000000000000000000000000000000000..91707973354faccda0e8bc33417f5946b6a02849 GIT binary patch literal 2165 zcmZuy&2QT_6elHFmK53fXqutLfC&W#)WDK%P0<!xF|=#C0vnbN`)E32g&>QxLr0br zlFDpD-eK-xmkmAcu*0qccHCj;KQe&Vo%%2Iv`4yW60{OXK0ZFa_v7PxkK3(QaOc5| z$Dc1D^dCC)*+AchCLTgZ5WyMh>e0&Z$m&{H({^T$oUUVNCu@w{u8YxqL>k0>f`~h} zx=o6P9`O$l{|flt37_DvQ73o~y3uY2tMwfwWF=W99+Z+5`901H4t!roE{k4KWH4#$ z-23F)`>Eb@{JlbX5jYfeF+p96;I0iAY~nn@U58j;$yM)Y3!L@9NRh{7!Uc`fBJZ<7 z+-DgT(|>~qzAxB#ljTv#iz7x@K8X4S{~_UIGc87CB3X}ROina6>Q{NHl_iEFi>OD9 z3YMo?MJS1SlZeoMQe`qK^61Nn+=pR%>&8}K<aUZEFJwdslabt~QCbihfo-|ZM3iQU z5D^`xw1m|ns!Ebbde)}Vl8A_n%8ZU^F2N@3C&#YbG6K7)_0n5y7+0a)g(m*NaIF}w z6OHf;u2Wh=8=7-q^PAdr`VvVKuFNL^St226kv3T#v}Shh4A9J$joO~$nO%d+4?O-& zjfU<V&9H3p9?%|HnPZG<3&Lde7d&&uztwmLJ$^cCfW*&6Vy$j$AS2}r{koy4aldwk z!5o2Pcjf}URJ&lM3G$(#yz%Y239C0}e(jTUfc9DK*Y-gZMrYWn-P)g9v!M2eZL&_z z0}Yz%pl{V)?cYL&&-T#a?|TSjm*)thL%xT|254V7aGzrS_xKM@lZ^{#xN1=R`aNiX zwgfuSa1AW@fG3=MT8AM2P@bz%9m@4OnBx%5ZH)5Efa`+M#?7j~ST$?mf&<bZxrg%i z93;;l1fc0JjAkv2rfs=Vx90dKyobKiDF)mhTaQp~Jwi|M;Uz$eAe=Ama=1POIT7A9 zG5n>DXFd&CE@YBro4rKP>B{k}%o1rhOUImy^`^_m6TN(vQE_^Pu}>31xj5M(QqD># zP7FeHCdw^2?X&T8iH>QyxtJ(tzZg;FRDe%8yeQ=K(&<#(dOZ~{cRqxZwHO36FAD$% zNj43mhyx0plJ5%T#c`gDXdJ)5n+nIu9b`o>$yD=*@?IgRY7#z)d6jo8z5<@&I_^7f zsc@0<#wO=3FqJJPf;Tm_q<s{>gzfivF{QbnQmyt`PR<ky?r3>0$@2n=0Gv)kQ=Xuv zAPChgOcfJqc|c{nn8bvoQrW;zO-{k*un&&Gawg+gEkk`7C1B=wXM;&P5-QB;032{c z^@3^woJ2~_b=_0J!z8PyDV1F3c&Du#L9@Q{bw$(u5sM?X*&r{tQ30+La8D*&ly@wr z6&vVW*HPtxt(S1MRr?4$YYU#L2GqJlD0?IZe<J=q$iDdKiX4?!N>*<6DwdH=aVW;U zD!q0EpjM@X$}LWl<z)N%qLglx6SemG<u8L$@fmaohjwVW*u@?WEywaK4||q_11rD* zc5oYd-Sm6~hw!gEVI#zE17*Rkby!=oR`430UOgRfZ>armh`|ot?KF4@FjNr7qk>c! zM4JlZ_^?W{MeM0&9FroAV}2Fnj5|(sA81|!Ivra=2aMNru;Dz{*Ox+j_33QB4NYi^ zC+`@fx@C6kc5DNNZ^JsjraSHZQ{5|b+IK>SgNHkqUk9S&^K&qCS596As^3>(qDHk( z*!l%t#Mbf&lh9r@FcEK{s1R~Y=tq?0@C?2IhVpJL9QLt3me9`*T%rE$_MO0LJO2am CZ)6Mr literal 0 HcmV?d00001 diff --git a/week-0/day-3/venv/lib/python3.6/site-packages/setuptools/__pycache__/sandbox.cpython-36.pyc b/week-0/day-3/venv/lib/python3.6/site-packages/setuptools/__pycache__/sandbox.cpython-36.pyc new file mode 100644 index 0000000000000000000000000000000000000000..68b643985fbb4e7ba635c762668068fdb8e2d910 GIT binary patch literal 15681 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 literal 0 HcmV?d00001 diff --git a/week-0/day-3/venv/lib/python3.6/site-packages/setuptools/__pycache__/site-patch.cpython-36.pyc b/week-0/day-3/venv/lib/python3.6/site-packages/setuptools/__pycache__/site-patch.cpython-36.pyc new file mode 100644 index 0000000000000000000000000000000000000000..c390d961cd4f5b5d7f1c4e7d150c069c4b1b75fb GIT binary patch literal 1464 zcmY*ZPjA~c6elTJl4aRR94AYL9efxN_>g2+3k2wbU`0EuyQBeHAgR|tRYb;-EK4%U zIDbH0=I*jncH39jK0>kMKE%N5cIkD;9)>;2XwgaF6ZzinJ^tPw=w7?+KYY4(YBdr1 z3w`tu*nbU6d<KFdieIB4VwjRK;TsIi5k}u5YCS^(I|fAktby#odIU=>Lj;N`%22iV z;tDIAlGLJPjw_-FMPpCgS17fq1yLU;5+MFygesB;ilhxdI|eCTg{YmNxm8(!_GD8* z1d4tno2aq@<)yxC0kU!ZM%j<i>2H;z9Mu>TF;fo2{AoH<R%$5|%~dYk+vLA1Hw|b5 zG@kNm%^T&VZKJ{H2u)`<{hEEJYO1C|Drbb}<fT>lRjUe)QNC^?xit3qKNxC((ben) z%E<{*zR8RKJDuJ3z!M@WU$s;)w=p_~N-95HHq|?+Z#jk-6nOoB<qCDF_ZpcDAEP-2 zX6-ujCdH6>hhl}o?)ADNkYT5C<f_RBqdPo3IR-BqrCrt8Lj+K=r)-KhA<9cqEmg}D zRVz@}?sc|^etHJ}J>w7d)vBj@YI#iVF#kiX81`ldRqg_Z6|l9(&K(wiez5(my6M{D z_PhuCb+rN~f)OD6J-7=v{Q{i2<~Eoe=+r()n3dMyTQe!zKYH=}$<xE5htHqr##NHv z`%<r#k-P|#Nm+2oco;|V1=F@jB)k3mQE{2kd`tGvlbrVD1?zJbW&JH<-Re&YdYQ2p zo5=8($+clUgH=!O2&!}1tFS~0s!Gu&a5*PGlc^1i@LS_Iz}lNcV`exEh$cH<Xd7Zr zens2|^SiHh<)qv#lXCm)GRf$+n2PJO%lQ7TVDhq*MUjdBZNYaNV#OCb<;^>PKTCv+ zi%EGfFq{lQ2i<-ehG#_~clNU)jxuoooA)r?3PUy;CAnZ+a>o$-L|fuUXi^C6vV4~C zBG=Z4N$r(cB+m;z(G5{%iPWx1La<W1V2-5Z+BO<(Wh~b&O?VznnD)Z(JjqxX>Xs>L zxG17-WkvMiU_m!@>$|!o-*8@V-H5Y7KwD@MOWp=v+K(tTZGgDkH3}yxOO{jZEZ7g$ zcn8#c$q1AA&?=L7=n6><t6^huV_f0)gS7X)``R%y80Y5aqa7ik-4niU4h_mg%yny= z7gu>$r>dPIqa_pu(;>;}u(`N7jG#C<yQ)DNmzv~d-OYt))u9(XFe4ydfk4=UH^3X% zApr?+7YD@09ZawfdRTC>34#3vXbqNNLVBQehzH*QzJMnkvW#s&2H@W_793as==nC> m!5bhB2aAJgglR|^e#Fhp9Ipv_`-{dL)D+Dmc;9;1!T$j%6?%LC literal 0 HcmV?d00001 diff --git a/week-0/day-3/venv/lib/python3.6/site-packages/setuptools/__pycache__/ssl_support.cpython-36.pyc b/week-0/day-3/venv/lib/python3.6/site-packages/setuptools/__pycache__/ssl_support.cpython-36.pyc new file mode 100644 index 0000000000000000000000000000000000000000..f3dccf1a3ea5c7fe6eaa1a346144765a7a3be3c6 GIT binary patch literal 6744 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 literal 0 HcmV?d00001 diff --git a/week-0/day-3/venv/lib/python3.6/site-packages/setuptools/__pycache__/unicode_utils.cpython-36.pyc b/week-0/day-3/venv/lib/python3.6/site-packages/setuptools/__pycache__/unicode_utils.cpython-36.pyc new file mode 100644 index 0000000000000000000000000000000000000000..82541295701aaeccefc2522b93db0e58ac363421 GIT binary patch literal 1127 zcmZ9LL2uJA6o73fP17u^U>gW=KsijHBDNktVh1#VSUF}$6RfK=RaxwA?oubS9oAOq zsr(uKQm$~}FL2^HDO-gjzh^%`+j-x6e!aQreK>x5{>wt>Ct7O+#_yr40}vEZoS;Fi z@c_e|BxGU@ER3i{?eAz{(*|`wH)xZ(pdE@&P^a}9cB8O^OH1)-jLi(1(Hqb|LRViw zXjCAL$7D(56K#!ciVL(PCup`?pmBqeC0?L=`vSbjPHjC!V#h|hdF{#17!Jnh3<=T) z54he62Uhs$Xx_;6Xz!romL6AJC>@EINfTk&(rl`SdX}+rBNseQDWj2&%9cpwBue<4 zl@4XbTsllt+W%7f^`uNCL}q7^zWRZr3FyyZS5LBT#<RVPoF{Zo-KgnB9>3`-rt?gv zX`<GLt1E}O=84+RW@XD<Hpx=OT*GDy1j0Ui1bZOc@Htp+g7prj4HF-F1+x!>HJA?! z1_N%1vZoX;aDgcvkp-FV7vu<?KVMig&mb<WCFBc0Ish`PLEgSRLpLw`&`%-X2Iu_D z3!wFc$|Vc*Rir_%;F5o1A}|;Nu7VmDeO0-J$6+tHy@F+t25g$KSTh<_B)PZ@Zc}-! zD#ulh!cJ2{DWWPn(u4+;GgIZGOQuIWVKCNg@^8Ov8i%b_LXN6D)oHP%2TKEIq=w*J zdT}Huhs-inT41P>RSSczY_HB9)<3@kwwk@;W1INcC0><*HkRA47Mt2J&FH&A-i1j; z6BT$x69dg>HBIv#`tXi`Bbj$~E=91){yh#ZbQ(m#C>OEjsfdz5rcfG!g&iVILEOdK zt7@^1m6VRs5^zdWF8_z-X*n|tpoCw*vNFdYV#*1Ec?@G9-T)=rAO;Wb>vSJp29u)B lgsHeH^lHo69VU8NF?8QeQkp01(7bMC@Vmgxw_V@e{tHF-4buPs literal 0 HcmV?d00001 diff --git a/week-0/day-3/venv/lib/python3.6/site-packages/setuptools/__pycache__/version.cpython-36.pyc b/week-0/day-3/venv/lib/python3.6/site-packages/setuptools/__pycache__/version.cpython-36.pyc new file mode 100644 index 0000000000000000000000000000000000000000..2abd5f7104c721504ab6ead52fb36f50be4c5c65 GIT binary patch literal 286 zcmYj~u};G<5QfiAP}5XF8F_^cB}gD(KnMm_7#N_Dkfp>{<tDX_&xUs91$Yf!$tx4D zz=VS;%AM}lH~jbi$3>A}-<>_Z1HfmzznMh3iif9BIB?QK4VzNHl5qM)mb6YDKpmtY z(k{101cv2Foy<Ye$LPO@Y5Em^;Wp$boHtJE9>d71PU%-Q-3x{37R(CN-nIfmxe$(V ziO$N#JE>I|y$Fi~Oc>iDV_|%=ZiN{PA7IC^;8(uSE4MP0k!IF-+4C7b<GS(fNwq8g ckK4RMvkBS7N^{?fOA^B{i;_`FO0rLW0Axc^od5s; literal 0 HcmV?d00001 diff --git a/week-0/day-3/venv/lib/python3.6/site-packages/setuptools/__pycache__/wheel.cpython-36.pyc b/week-0/day-3/venv/lib/python3.6/site-packages/setuptools/__pycache__/wheel.cpython-36.pyc new file mode 100644 index 0000000000000000000000000000000000000000..3832845d58ae23686bb231760833107b3cfef3c0 GIT binary patch literal 5781 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 literal 0 HcmV?d00001 diff --git a/week-0/day-3/venv/lib/python3.6/site-packages/setuptools/__pycache__/windows_support.cpython-36.pyc b/week-0/day-3/venv/lib/python3.6/site-packages/setuptools/__pycache__/windows_support.cpython-36.pyc new file mode 100644 index 0000000000000000000000000000000000000000..b81c65abcc4a08c02e91fd5929ae52637722c270 GIT binary patch literal 969 zcmZWo&2G~`5Z<*N$8}qNDnOi&kL1u;Z4d}lRc%SCR*DkT21T-j+{C*fPVB6^yCzMQ zUPx~|39rH<?3GhrffKWi3K6U{Ghf!T-^_kHscmk$hwV3?ei#V-L@Ub#d;lh1f+L9F z1O>~8156BJ-lD*u2C+!#7A<gK5`2y-_8nxSR)lqcr6Vw-_h8~VIEhAh0c>NFKUuPz zqd9_;R!fz;@r1Cch#;?6`lMzE!Gr~l=uF)Djw*(-di=9c_IRoz*X<VW*MTq7%+KO% zyPwAi*%p`Ls-H)%d_iTNNyZYf3a87Op~$n0aaqk~%GpbLX`l4=%epQYx_)t=#wN+E zx|gu1mxz4;%S33$$&#KNFrF$~%!H(A1uJWiPolrAaT}=A#wt}wSJ2xCZ(s-WbwGc_ z(>K=lD#U97kRaRwV<hp&7?~sM1_LUM?827^#vF%Ef!6@J#JGW-Ihq>_<Hnqu;sm~} zFVI&^OfC5JH`jx8PNgS@)EmZx(23WRlE?jAQjft8ZxAPdxJP16Bgy!z>K3PtIZM5v zl-WDq7qS<P*%!(O37b|Umim`D6*6WM;qSbCy}P?ptNF`g7g<jZFT6At((6-C(kodl z_^uyDa+Xn11$7E=rysvn*-&m6#;JaqFjV$3N!eP%BvH<o@(E39yTKM*;~089yl-E0 z1LvMAu$v#c=bf{lRPVOW>dJwUDT)NvQM=t#We)8^^}y-IlLqIES1e`eR)fd?@v5iC zr_Dxq*y)^|9)0XI!jsc_z0p!8r}E#oUIS5Ss5R6ND;|MEYYukt7IqEGaIuB?GuW$G k+=0L!Xs1()-4(WCyo>R1_EJXjgzoD<Mlm`Lc1*|q4Wt?PKL7v# literal 0 HcmV?d00001 diff --git a/week-0/day-3/venv/lib/python3.6/site-packages/setuptools/_vendor/__init__.py b/week-0/day-3/venv/lib/python3.6/site-packages/setuptools/_vendor/__init__.py new file mode 100644 index 00000000..e69de29b diff --git a/week-0/day-3/venv/lib/python3.6/site-packages/setuptools/_vendor/__pycache__/__init__.cpython-36.pyc b/week-0/day-3/venv/lib/python3.6/site-packages/setuptools/_vendor/__pycache__/__init__.cpython-36.pyc new file mode 100644 index 0000000000000000000000000000000000000000..fa81a146d22769736a895ace3e411f1332e53828 GIT binary patch literal 148 zcmXr!<>hkpH;-iig2x~N1{i@12OutH0TL+;!3>&=ek&P@K*9*(m!p13Zh?M5W`S-} zX=YA}ZgF98MN(<9iGFcvNohezetu3dGBds`H7_N<NIyP4GcU6wK3=b&@)n0pZhlH> NPO2Tq=wcvd005`BB`g2{ literal 0 HcmV?d00001 diff --git a/week-0/day-3/venv/lib/python3.6/site-packages/setuptools/_vendor/__pycache__/pyparsing.cpython-36.pyc b/week-0/day-3/venv/lib/python3.6/site-packages/setuptools/_vendor/__pycache__/pyparsing.cpython-36.pyc new file mode 100644 index 0000000000000000000000000000000000000000..4dcd22db568853b6c475acabb03b5d4d18365a2e GIT binary patch literal 201070 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 r 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 literal 0 HcmV?d00001 diff --git a/week-0/day-3/venv/lib/python3.6/site-packages/setuptools/_vendor/__pycache__/six.cpython-36.pyc b/week-0/day-3/venv/lib/python3.6/site-packages/setuptools/_vendor/__pycache__/six.cpython-36.pyc new file mode 100644 index 0000000000000000000000000000000000000000..273730be21a73ee07f5dcca1be550dfb6e2efe9c GIT binary patch literal 24445 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 VZDY+xVyOhaiIW7~gnJYA?*VcH>s9~& literal 0 HcmV?d00001 diff --git a/week-0/day-3/venv/lib/python3.6/site-packages/setuptools/_vendor/packaging/__about__.py b/week-0/day-3/venv/lib/python3.6/site-packages/setuptools/_vendor/packaging/__about__.py new file mode 100644 index 00000000..95d330ef --- /dev/null +++ b/week-0/day-3/venv/lib/python3.6/site-packages/setuptools/_vendor/packaging/__about__.py @@ -0,0 +1,21 @@ +# This file is dual licensed under the terms of the Apache License, Version +# 2.0, and the BSD License. See the LICENSE file in the root of this repository +# for complete details. +from __future__ import absolute_import, division, print_function + +__all__ = [ + "__title__", "__summary__", "__uri__", "__version__", "__author__", + "__email__", "__license__", "__copyright__", +] + +__title__ = "packaging" +__summary__ = "Core utilities for Python packages" +__uri__ = "https://github.com/pypa/packaging" + +__version__ = "16.8" + +__author__ = "Donald Stufft and individual contributors" +__email__ = "donald@stufft.io" + +__license__ = "BSD or Apache License, Version 2.0" +__copyright__ = "Copyright 2014-2016 %s" % __author__ diff --git a/week-0/day-3/venv/lib/python3.6/site-packages/setuptools/_vendor/packaging/__init__.py b/week-0/day-3/venv/lib/python3.6/site-packages/setuptools/_vendor/packaging/__init__.py new file mode 100644 index 00000000..5ee62202 --- /dev/null +++ b/week-0/day-3/venv/lib/python3.6/site-packages/setuptools/_vendor/packaging/__init__.py @@ -0,0 +1,14 @@ +# This file is dual licensed under the terms of the Apache License, Version +# 2.0, and the BSD License. See the LICENSE file in the root of this repository +# for complete details. +from __future__ import absolute_import, division, print_function + +from .__about__ import ( + __author__, __copyright__, __email__, __license__, __summary__, __title__, + __uri__, __version__ +) + +__all__ = [ + "__title__", "__summary__", "__uri__", "__version__", "__author__", + "__email__", "__license__", "__copyright__", +] diff --git a/week-0/day-3/venv/lib/python3.6/site-packages/setuptools/_vendor/packaging/__pycache__/__about__.cpython-36.pyc b/week-0/day-3/venv/lib/python3.6/site-packages/setuptools/_vendor/packaging/__pycache__/__about__.cpython-36.pyc new file mode 100644 index 0000000000000000000000000000000000000000..c39f93c0437b4cfbc8968e1eae826ca0bda81a55 GIT binary patch literal 684 zcmYk3%W4}j6oxe(U&doQaoUiz8tB4Mdy+IHrIeC1S%x-X=t5A$%pBPk(Tr4GOg(SZ zx9Qs3uKEgHRf;Kzgg(v@zkcZ)y&a9x>o1qzezg$#jh>Cf$5(!tdk;Vm2~<TSs#>H~ z#Uzdpv>=8ybf618NT9z=NE=epfdT2lkn~_g64)bs*e5BB$p8*m{|J#GyqKfO%Rk-~ zP2%l-UKlByWt3M+YP(H<uesr}-tH;QYfBfdE^WyBlv-{DqjWo<)VQk3^~NVXN}cAr z-8IwUtWQ!(b7xml``DjkRnEmuBY4Sb6KqD5mQrmrU#@JBsl0s1m%Ls!$2U?l>?{}D za%S*CYJ9)(b~WCKm}y?EtX1ZHmMytmxnfqzDpMPkXHPcm(~H@=W^ya*TmYV1w^&%5 z*MNB)$^@4ST*}&NUN|eYX~ys<y)uu|8JErRr}-`Rw_khL6~lMC$G^c}ca`F^*-3MB z^S=swc5-??^|-*V&F9G|v|-__)4p8ozZmH_pzRU*mJ8n#-3eRWfL=iOdEF040|o&@ zkDo}7Lmcq;F0+-&6j#&2aRF2F-TWwAd7c?&ow8C2^E{+$R)f?}t;zi5g>=5{Gqu?! bA1Vn>u#e$k=FsCXPNOt#M}D^a42=E(CdJJ; literal 0 HcmV?d00001 diff --git a/week-0/day-3/venv/lib/python3.6/site-packages/setuptools/_vendor/packaging/__pycache__/__init__.cpython-36.pyc b/week-0/day-3/venv/lib/python3.6/site-packages/setuptools/_vendor/packaging/__pycache__/__init__.cpython-36.pyc new file mode 100644 index 0000000000000000000000000000000000000000..a17d9c6817ed08f71fbe7031e3c78ffe320b7078 GIT binary patch literal 522 zcmYk2&1&2*5XWVE*PrW@LLVY~NPK9amr|N@Avv@sK^bhz*@$W^RUb?Ck@`x$=CrSn zQ#88}R-hj<V&*@8&F8kQ?;gJXNm9mM*u^Ph{3BlXJ3=s#D2547Fy$#`JWH5JMW$A` z=4;G(js-8U<Rw<T!kX9E@CG-06YExDEpkzaQdFWA&93CF*!*JK_867fHd{XQgVQSb z2_zbA{Zb0Kmrm+=xiVJH9v;Iy`j{UR>L`~Qpb!2@TY#kn7_~WAxqI?4tpFzMrHWw# zpyW8sZaOC}AolifF7nbVdM^NimFI%}WN9jZZQ>kT6E=jFkP~PvwjvY}_uDJ-@)&%u zQOw3AGMf=r5#*&GbcnXj&D3(CaMC|bdLKe|dKJz8XZ9mi6JCFI9!+PYxfy~~;>P`R z&qEl$bZ+v&c&(MY3}HXbLfg*t<KKQK=UoRNXBlnWn!{3lLoI@uzLP~qpZb(u=XLT1 DRw0ZM literal 0 HcmV?d00001 diff --git a/week-0/day-3/venv/lib/python3.6/site-packages/setuptools/_vendor/packaging/__pycache__/_compat.cpython-36.pyc b/week-0/day-3/venv/lib/python3.6/site-packages/setuptools/_vendor/packaging/__pycache__/_compat.cpython-36.pyc new file mode 100644 index 0000000000000000000000000000000000000000..2b929e89a542d552f01b58e969fed03c686e10af GIT binary patch literal 969 zcmah{OK%e~5cXq}Y(ttJs4DR|gbUIhnn)ChOI3kDLgG-6kdRn`ENAVs+wQBjw<T3M zwNm?6_)ETW>R;f*i~}Kv10&6NW^8}+dB!{I>-`sRpMCzs3HeS|gn|DY)P4Y?h@u54 zX-Z3$vXZBqVvZG28tLe$qsTp?_%Tbn%P4}Vr+em=j%PGotGc?6tLmuk6-n<X_MRlY zTfim>_ZxC*>!Nj9<YiME=VO(h<~FY@KWt21IWcRi%t5?=i^Oh$Ey*a}2Em{M+5@$Z z!MrBd<eJWyqKaL`irvsl{*^g$L@$`)Gm?|b2+Bw2ll}<grP0#qksM8>)uXJC){f3{ zcL<qMI~fw=a54k%rC?bUdmoG@DODt8tA$gpcqsD-(ZnCD-J;H9VfV(%R2Bs&LU2XB z3u*^oZs-NQAs74-q3HfMpzV29SRYlg)V}Wyb1RUz^;9LycNTtx&;~p5<ITjC&7{ej z?P;4AYTKUJFVi-AI<eZdjjQXzuDaq>SE@FXMrOzIAg>N4BCE?rx^Xl2Js~Q6Cd5Oe zhm#=mJo)eI#=mau1NRtwATEUO3sKgpEzlnbanj0Sv12v>H*imw!5*0P-w87W&#x`} z_5i}bBc=vh<~N+iA0*9Ogt<XSA~$bzz)bi8DPZF9e~SeC;omRX#3Erpy)ACGAW8<v ze%89y0DFUtF!&t|p7Pwztsk6fgCAJr)vWgX-Nz?rc3{&PKL7)r70Ar`ei&KE1oXga b#RN|A?xI<HSi)jzlf`^Uhfzdh*5y9|Xxa4v literal 0 HcmV?d00001 diff --git a/week-0/day-3/venv/lib/python3.6/site-packages/setuptools/_vendor/packaging/__pycache__/_structures.cpython-36.pyc b/week-0/day-3/venv/lib/python3.6/site-packages/setuptools/_vendor/packaging/__pycache__/_structures.cpython-36.pyc new file mode 100644 index 0000000000000000000000000000000000000000..1f343ed80c109ddfd5ebb60476c2fc06236ecacb GIT binary patch literal 2826 zcmcImOK;Oa5Z<*D$4S#ReE=;8Bu>Z@B@z#T1VTk15SMVEr$}h!dbg>;vEAKu1r@h& z;IHtPeC5Pn;Ka<PE=gtM@Y-l+)}Gz{W@l%<_|Ecj=gF)4Z$38(`ATM51ID}1)iV&B za2k;@9n!Hiw8r+(rsM_T7PmhUZi~jm9yUdDLWWIv+u%)j+ca+-;lNvmJFkh?`UX1@ z&(2r<eU(I+7Azd6iPX8v!{bneNt~~wGK@7l$l^f5bAT&~X2D<=y4nLF$dGa}v^eF~ zCo;6T%^RQrn>(PJyv1G64sY`g=oVk%UC=IH<}0Ave3kb=cla7#2ff5Mz{AbleHkBw zai~886hN?{#{Lw#!k};pGp&JyfRQi6qj^J#=s-H~XvFtHUysv%8m2q@Ss3vhb)??! zXTjaR5;{wDl0<5D$c{zK6WLGw;GI7T<58a}EweypQm9+$humdMic~VzMi(#&gr2Mw zj@~M)a~|6;$#~p_fhL-MBojJ8&*{Lk^2VXB4)X?X>rvT)IY0fEE<7SA&S4BUC<C2Z z1LF=%L0uN6=VoKiG9Y;~(T75w$8s2pG-InXNUJl)L)-7+$Yt273`H=uUWEd-Ih1oD z{0Jd@OD9$l!VV;Cth65oB5%Xe$XAN7(}PwyAdVQjP~iaD${kpN6`B+dbjhg;vWKT! z15tw-!_l@XP|-GrT6T$hvzJ(Pwh>&@l?oKJ{Ua3c_gWPSo(28KhI;NS`ZR7d?+wJr z*Ws}!lB}WzT8zbF#MpJ%swjb8u?FhS7zbV#izW8QfSz|48z(%AaNK3=DD$JKMPl(v zEGCK9DKXh4=Azs{v55jRLta90Mkdn{R;1w@tW<@oT+6lRf5skw>8xQ%?n3{Md?_!& z{?#ErrOK1`P7$?fB9&5(iI9i>8cv}n+vl(8PpD3IU`M$GqWqH0mE5dBU6AW)%fwuL ze+KMQ$q^T#yLu>0u-kP|STH8qFcI~yId37tF-d)|2KfJQohhXUHP8zY-rT=d8R40N zeOLpv5bM=LAuT+vgIbLG3`tZJ0us-Y8JMk-+$<PR;@^qfMsXR%Uy~d1$PMUK<c9Wv z*Ft_h$neVuzIrfWC1$L|&$8S}_TP#?n<E-tDr3>yeKh6g$GAozv2NPEs}A%ZR5SCJ literal 0 HcmV?d00001 diff --git a/week-0/day-3/venv/lib/python3.6/site-packages/setuptools/_vendor/packaging/__pycache__/markers.cpython-36.pyc b/week-0/day-3/venv/lib/python3.6/site-packages/setuptools/_vendor/packaging/__pycache__/markers.cpython-36.pyc new file mode 100644 index 0000000000000000000000000000000000000000..ea453b70bdb419ca811555fce1412a725c09c8f7 GIT binary patch literal 8846 zcmcIp&2t+^cAuUZ00R*G5J`)aWXU7y6S4%#wk-LBqD9-3rL{!TqE_}!)<K5oCIx6P z1N97K2?DojO>Zu#tyHS^=)<12lB&%mmsI6n$TgM2TyxSTRXK*2<o9|8LlB~}D^~@m z{+#aD@4bHg-s{)zjgFR<R<C_KZ)@6rXam0@>Nk+W8-}KFjWbVcF^9EuM{gO9!KhF7 zOvhAZ&dI4V@8nfka0)05&uSH&VyonoS|iR#tL&83JQMw+&S-1Q8EcI@<E;s2LiOj+ zf5@3cJ<ki?RBPIqR&~pJqjlIh+?sJ_&@S>4AK_&_x|MTgztH#?FaCgDab(AEj-oxz zOK6u=`xx32d<5+g)qWH0LwpkLNpT$GPoO=;r_r7kC(wQi?Kk*gv=6JcjrI(mMSE7Y zPl`!?WQQR?y2C!zP##OmH`DTXTAoPDx6;y1%adt2mzJl}@^o6BNz1coc`hx_r)4EA zFHq^s@l$+`pWtutqxir5W8OI>=9;JZMSkfAZHF<!u&VH#Pv>1u%XiZ9-L!l!Ew7~I z`&2q-#2G-in)Y2&eP_j4tnfj$!UX>iD@^c@)Yo(39KL>>eVybBYW?f#>v=IJ&H-*k zjERakJEMup4DfU=hzpptI56vz9oBq%M{_P>{Tpfhk{Cx%Rb0UAi=v9zmuNQN&5Np- z7o*}l_3p44ZBYa5BWg@}MsqInCI0CTn)41{=b!WCADHtlze%g{FDMsg^F5?1Nbe(E zMY@Lc0l)R5<$TC*^PgevN01oJ`Ivvn@1V87@A4It*ZC@6L%GPm;-e@(fyCV7Wk4<~ z3A@4db**y$1s$!55s$kYVc>NlQERl?fsA5{H=Z=YM&QR|ZQ1an+GfYEM`*89%y?|g zm7!RES{H5Vip#2fPlO#W3geM5!i=r;$OW8Y(pdI6=9L^FgH?GqkRr}~A%jjkF5C>{ zcdq1d`KwM43BIo8R#;rP(};w0y%&ryWN|qGREwUqMOe|};(A-u8=DOw<B8k;6W43- zy`Isu=dLRsVZhYSeJ(Z|zTlq)t+p#0A&{QUI+y(?4H@_?;YTZOOT_v9G)!_qQcdg) zs1w8bKSJ#WQaFK3Xb$6=qjTmMin)fIM0a<&WaGEw+l>TEyQPq_zjH%-GwAsIqTLCF z4DIk?(DAq}#io#U6xeIaYxet>Kd7qt#CEGz^MPNj7ME(ZR=_(R)yuWo<Bsd4UkbGv z59+nrKWOq8R#(~X&*r06d%oRhU)tz2Jbo#B96sIX)UV8kBI>lGAn?M$YVC>ec_8Q8 zZvBzFg{_=VP!6l@XNsmHM6-^}GG2=xQ^b$8VSWT{>@&%cVu>3?qSb~Z*ywO=Y-~r^ z(L*<~c_2dnTx5rxHi@X+h%(m58KQNTGQv$Br7WXAsl7>kguz=#KLz_~%<KL#!QLiz z58;a~+Yq#ud=FpS4<cJUZG=GA4;x(A!6v>61!X|2UY`=e=1fM3xo;n6Yi`iDi^%rm zlIu_e1~<5g(&RawN15XVZlTQcA{0U?Hdg{J>I8v)R8sm3DJ&uDv7T0gk;PcHf@7Ie z8-(*{hQiyFCop7y@x*fy+lJqWYPBi>QIJ`8l$NRXztrg@(T~b~>qS~mYqA}dtf$8Y z)PP#0!X$0v@M4gEjHuP#!MFZe<#a9eVc$|FMk&&Wo18V(Vog0VdeGK8q#^Z{Zh7JP z<?Zv&-#IC_D~mXW`OQGKT&T8Mt?s#DSgR%CcM>pOffZOFMH^^c89=Mgg5=9Syoe17 zFAJ4O`yPs=&+w_0AiCXZdxF%J;LB15@)fHVp;j7Dj9qbUVA(OnjqKA(r7(PYY>bw3 zl#zhRbCex)n2zHENmxi&TDoP>UsCVE(nw5xSsFnYRNDh+Wp~39``D04Lc#{xl#~tf z)y!7-UMI9tQJd_;t_~1w4io)KD$fJd$9-^?E~)+6^yMCq9y^#gI#!A7De@q3xj9JO z9Cq~-J{`Qdib^FSDV5`Dg`Y-Z1<NcUDUN|eYQHv#`fB@N`d)kUZue2qShu{|{%JH_ z0FW>GfIt(q<HPW7l9Qth4h)@CKF*1@=SFm_Ywc&z!@wsmXkc7CwZE;*a6FZc-RyW? z25BOLB!ws3P{eyZ{nhq*T5kOz+>&@an-x9_VgKNCC3y6wl+j=74~h#xs8HylQYA~& zrSH}L_ina8HJv}ulP=lKNQO~Ah~zg8?#_v)k#sBh|Hq}}Rcuw=Kt?|*b4W_o$-+lk z#F}~!e%28!$#?Yh;7HP&6+<1-xUh8R_R{+DdTeZo2re!QW9G#y8c=14d0Oz?)&_SM z8<-p-X_B-@*SLQDdRM2kh_rxo66sghciG}DTj=J=vN!x#Z}|IgC43dGWmI6j6rTI= zV@ei*=0~&^sTR3F*`A73t_mUX9g;$6mz~>XbFaM+9ppc2p>BVn*l>Lw>w$dTwc;FH zNl*M)tNpsa+Acf4%PRZSM#euIgUI?vFvN0}GxA<~+ULp!^k5E^Ni<fn$)pF#p06W? zWNNlB{M+(20}wb6f2Th-*AphgZJDms10n08hTA|WV4Ugd0xw3dUXEE~Xe)M03m!bU zI_?gOe@oD5sl3)be-M!Bf)~_XFI+^WKM8<KxJ>zB<ob0X^O#OIoMhE-Xf=5YpMOis z&^V2i*qE;R?q^;Z@hCeJe~(7OrwESArm>@k(~<c-k)81FR+J;l$=M^op<b>Z!Iwzi z)WO+XQ9kJ*8O`Q=pLmH0zqj=slRnQi3q5tx5C%!>Ga4_<faCt0no00}Pv5vj!H;A% z!Oixov?9lVuR5svc8<s)Ne{_&$G%M_`^I4zf2%)$U-(#0E>$<l>D+9{Fe3MJtd=-q zwd96U(Ipv=n6-wOx?5b>625ramW#iqRT5$8p4>luVDI{)cbP43VumDJvJYe0gqLKk z2On}r+b3(vQm2T?H3Bts(7#0AACUTDHTO!S_5{k3cQ7M1sYfmo&~a*yErsxL=q{!F z!r1VHFIUybX3+4V1@j4`<O+4>8on>&Fg`T?cSs>=Ta8WU53@;D)**+?WF>tX5;?6a zsF^?#J1Hr}NA|vlGxsR3oHYd=C&2I?hOr?Zz9jFY=>CYL6y2WySr`N<e}P%jp=^ky z1o9vIAS;%<fqGwK%TK7G6gnw)QtFG><sv#Wl}ExjiloT#P<eJVA{UKed-WaY^evo& z9ky+Jt@+cY78#F9vdSQ&O#6lAm%q_^M$=5Z)hO4@C$li#>>(`q$dVgTf$L3+?ov2W z#t!?Q^)McFx^fsRvDQ76MJMd%mvQr;+pxNV*wD}R^LNoztrR5%9^?bcl>d4Nwb-f$ ze&j;iAWV?ltpgd#4{6X8Wv7r;a*BCS^limJT;C8*iA@?m#7x}Z1TJ|1_0O27G^@sR zb`;`}*Gu{sv(TC_q>HcF?$P0(q&RpM72M(=5~RzaP4tL?3v&@{W78nztT>Qfx8@Ui z>9)V`_G}Xtog`2&cyq3piZ&37SV|J*k)-|;I*oW_U~p`bxAclzD%=E$^!zL4s;jOB zp(onPh7{<_Xe**Ys#($YZ>Vf(TWni@`Y)vKzWt|d1G>;4{hDgy)2TK_AN1qr@Cfop zv}O)^muQD1LAjOH9Hl>d#xIR+b33=4N1quLFy~1`vSK!i;9jAZZx**Lf0EkU1@#3z z_+kNaK|wC{3cXy<BFQ4yJ%d}1^5Gu|57Z6VfpSl8=C)uJ==;}NG{O-NfX3FzzAA5} zm}+XGQhtu?CFQ5o^<jL0x*qGB*;G|SGbZr?!}YwrRyGmQ8&=HnD**UUq`pc%t)vb6 zEK;2w9-x(9{11NeA*KO#hGC_ww4x-fyr&f9eKg~|+ioMO6(4#Dyz&;+4kvO!a!g*( zvq~{8q=7G4S1`6HWEsk@3BJ-je@Qh`KyeY;twsVW;v#fhQXM);vWb!Zjug%z)9Cm> zla|<FXw(wQGPCqNgl<+xjjTS6&)9CDk;N<CMWcUb+=d!yLIAP-`XfVDAu2jIVB&T3 zLj-2DYZ}JD3|GvR?(yfBt1Y(~Kz~rJ;b*nF47SO%`mUEa(xy5>aXG!oc;boh)Wti_ zCpT%>6SLuO263T(Pca`gd_F{WJeAt$!Hd#=fq?Xsl~^9+9%k|hk&C2$WKPJ1rrixm z2b15==>*w0S<o9z6B-qLsO7eqZ*hGaPdh{?{GL3{SD|U`Xvm8yFR9#A`H0HP{W_cs z^Eb*Tg6ER^aRiLYuf${f?|d=4EdK&%yr6xkjL1tU<lB_JPZ`CV<UD1xHS#iL6z`H3 zDSMByE66INap9pGBFHHb%6b+mnkBjUGNOzlgHjG-tACjz8B8vT@E4OCWj?tiCQz>u zRD|Ce*n$M9AzMf%^uLip8yUHiWeA(eOhbomGr{}4{}{{IPh*MF8%QA$@^av2D2!NA zP9H-ck&N_+d;^m*ok@aA(Qvh!e}&4k>GU3_v_E2sWJ_<tmYT4o4%4=Ergbks#B<nB z2sErH64z%m+9_x|BP#Ti<@_2p7dwa<ztX?ae5CYd(0x071xO?AA0?LbqOE*>8|(_C zjkvNht1rlFfv0c_1s(vF?tQs@FCI}N*VU5*%wS&`kb96E4FkTuiipDqsc0mrhM0-C z0O%Bm96Acp#&<j<Y9Wa>nbB!BflZiY-SNBXS>W|UqRJDKzX7;cM2bk+9HlksNFk&$ zmaX)1K$Nyz?a>%2q+lYPrqm)JFg3oA%ssDcG@_xp;=}(HjXMKC#|Kv5qce$nu4FPo zYiH}9Mk9hNO?MC6T#9lQ`wvMVi<Kz0)LYWs(}2F5_y)pu)6K4yREXWi?;ajGq)$<I zdjn4$!u9P<8MHEg!rxNgws3;{{^N|hMGjPyh3W~;fFDsEY}kzuPMIC3w=mbUUAfhv z;4Ho21avAX><=?&2QtG6f)%At0X7$S=z=1~yTRZRdj#AE<^x}7y@5H379y_Rk&>2O zQ}G<TErYrU!{lXw@W&I9BxMliJ8cg8s?19wI7TA9b^1D$!Wn$^8WQ8!N_{b5)6UY- z(Tb$ROL`{9{So8_{HX}@-(dd05=w!o7zpVQyuoJ?W{V=s6?VU}L{DIw9c(O~z$6K_ zB+-$iXJV`G^~xUgZBzCfnR9IKy{n2imXJPzUv$Rt#wFFMCcjP=C?ldIxq7lh*$8EH zXeC_?Vs<Ak;P#Kl#3;FWmB@cq&yiu`lq**puMyaIda!#yuE8>?9HlQ3Pkfp{<%5l; zs7ESpp7<gZwMpWY)`O*cx0gP>vn)TLp<}>*jRF=+>M1rJd9ZwM{r2ig?X$aUaWPR^ zwbiw_oK_z!-TC=)od0xn^$vPVSuZqOTEBgN`EG2{iyDFvVVu9SwsdcKCC=YV%KotB zZ`StaEZtwdD|ZM-QkKc}Qum@*_e89V$FYuproKfflHbw@m$D7Y1ZCvaBzBLaQQ3)u zHb1r&k~hvp+SKqVvT69^>aWj2WtQP4O_&fnb0Uv_VPagBGk?uW%C?bx)8SH$6|bUa r8V=P2CEZeG8T0c{zteizunMJFvVyRR>Az%Jhw_FsVjZ(AYvz9eaA&*P literal 0 HcmV?d00001 diff --git a/week-0/day-3/venv/lib/python3.6/site-packages/setuptools/_vendor/packaging/__pycache__/requirements.cpython-36.pyc b/week-0/day-3/venv/lib/python3.6/site-packages/setuptools/_vendor/packaging/__pycache__/requirements.cpython-36.pyc new file mode 100644 index 0000000000000000000000000000000000000000..50a2826cf30e5e436f40f112488a4cdcd5bc449c GIT binary patch literal 3839 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 H<@Emo74y^~ literal 0 HcmV?d00001 diff --git a/week-0/day-3/venv/lib/python3.6/site-packages/setuptools/_vendor/packaging/__pycache__/specifiers.cpython-36.pyc b/week-0/day-3/venv/lib/python3.6/site-packages/setuptools/_vendor/packaging/__pycache__/specifiers.cpython-36.pyc new file mode 100644 index 0000000000000000000000000000000000000000..8278a5a05c0c9a20fccca5bd9c4092ffbf4d301a GIT binary patch literal 19788 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 literal 0 HcmV?d00001 diff --git a/week-0/day-3/venv/lib/python3.6/site-packages/setuptools/_vendor/packaging/__pycache__/utils.cpython-36.pyc b/week-0/day-3/venv/lib/python3.6/site-packages/setuptools/_vendor/packaging/__pycache__/utils.cpython-36.pyc new file mode 100644 index 0000000000000000000000000000000000000000..e23bce2348aa209a388d3349d01c6f4f59d48e9c GIT binary patch literal 453 zcmY*VyH3L}6t$f+jRNH%_=yOmkpPJWArK2w8Q6j<D~V0z;>5-eC>2}z6$XCED-*xa z3A<Cd(mg)D51)H|HX3C&_ZQPI2*3~6GUWNScYW%C00KGaU<Er=p)RT-7-ERWRZQdg zfJ7@;B_t+;Pf!gBdH{Ly>-#_+x&6A)f?Go|>!eV|rG&jQ%|!3^q+-3nPquH3zfYFQ zV}ZxhlhzNjv2aG-Z@udS4+hL3fgfOn=4b`H44SNA;Z=@sTlb=8ZOz$|Vnt_k;UaAt zH{jxpsvNqwuRHn;ROa7V-<775rDU>bEaRlmFM83~_Po^8SZRdddYj@`+7qElS+~#i zjP<k98piclzPrPJ!a-v<OdI|WAQgC?x(xd*ja3w56*4MprD6{bDe8u;=p^G*B_SMo aHdAiFPAE+;J3%a`SD{gd+GCVPS@Z{l<#o0I literal 0 HcmV?d00001 diff --git a/week-0/day-3/venv/lib/python3.6/site-packages/setuptools/_vendor/packaging/__pycache__/version.cpython-36.pyc b/week-0/day-3/venv/lib/python3.6/site-packages/setuptools/_vendor/packaging/__pycache__/version.cpython-36.pyc new file mode 100644 index 0000000000000000000000000000000000000000..400ec16e0f87f3a4297da0910352a4ec548f5193 GIT binary patch literal 10563 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 TZQ3*Tx27?@VSiRM?1}#eretaM literal 0 HcmV?d00001 diff --git a/week-0/day-3/venv/lib/python3.6/site-packages/setuptools/_vendor/packaging/_compat.py b/week-0/day-3/venv/lib/python3.6/site-packages/setuptools/_vendor/packaging/_compat.py new file mode 100644 index 00000000..210bb80b --- /dev/null +++ b/week-0/day-3/venv/lib/python3.6/site-packages/setuptools/_vendor/packaging/_compat.py @@ -0,0 +1,30 @@ +# This file is dual licensed under the terms of the Apache License, Version +# 2.0, and the BSD License. See the LICENSE file in the root of this repository +# for complete details. +from __future__ import absolute_import, division, print_function + +import sys + + +PY2 = sys.version_info[0] == 2 +PY3 = sys.version_info[0] == 3 + +# flake8: noqa + +if PY3: + string_types = str, +else: + string_types = basestring, + + +def with_metaclass(meta, *bases): + """ + Create a base class with a metaclass. + """ + # This requires a bit of explanation: the basic idea is to make a dummy + # metaclass for one level of class instantiation that replaces itself with + # the actual metaclass. + class metaclass(meta): + def __new__(cls, name, this_bases, d): + return meta(name, bases, d) + return type.__new__(metaclass, 'temporary_class', (), {}) diff --git a/week-0/day-3/venv/lib/python3.6/site-packages/setuptools/_vendor/packaging/_structures.py b/week-0/day-3/venv/lib/python3.6/site-packages/setuptools/_vendor/packaging/_structures.py new file mode 100644 index 00000000..ccc27861 --- /dev/null +++ b/week-0/day-3/venv/lib/python3.6/site-packages/setuptools/_vendor/packaging/_structures.py @@ -0,0 +1,68 @@ +# This file is dual licensed under the terms of the Apache License, Version +# 2.0, and the BSD License. See the LICENSE file in the root of this repository +# for complete details. +from __future__ import absolute_import, division, print_function + + +class Infinity(object): + + def __repr__(self): + return "Infinity" + + def __hash__(self): + return hash(repr(self)) + + def __lt__(self, other): + return False + + def __le__(self, other): + return False + + def __eq__(self, other): + return isinstance(other, self.__class__) + + def __ne__(self, other): + return not isinstance(other, self.__class__) + + def __gt__(self, other): + return True + + def __ge__(self, other): + return True + + def __neg__(self): + return NegativeInfinity + +Infinity = Infinity() + + +class NegativeInfinity(object): + + def __repr__(self): + return "-Infinity" + + def __hash__(self): + return hash(repr(self)) + + def __lt__(self, other): + return True + + def __le__(self, other): + return True + + def __eq__(self, other): + return isinstance(other, self.__class__) + + def __ne__(self, other): + return not isinstance(other, self.__class__) + + def __gt__(self, other): + return False + + def __ge__(self, other): + return False + + def __neg__(self): + return Infinity + +NegativeInfinity = NegativeInfinity() diff --git a/week-0/day-3/venv/lib/python3.6/site-packages/setuptools/_vendor/packaging/markers.py b/week-0/day-3/venv/lib/python3.6/site-packages/setuptools/_vendor/packaging/markers.py new file mode 100644 index 00000000..031332a3 --- /dev/null +++ b/week-0/day-3/venv/lib/python3.6/site-packages/setuptools/_vendor/packaging/markers.py @@ -0,0 +1,301 @@ +# This file is dual licensed under the terms of the Apache License, Version +# 2.0, and the BSD License. See the LICENSE file in the root of this repository +# for complete details. +from __future__ import absolute_import, division, print_function + +import operator +import os +import platform +import sys + +from setuptools.extern.pyparsing import ParseException, ParseResults, stringStart, stringEnd +from setuptools.extern.pyparsing import ZeroOrMore, Group, Forward, QuotedString +from setuptools.extern.pyparsing import Literal as L # noqa + +from ._compat import string_types +from .specifiers import Specifier, InvalidSpecifier + + +__all__ = [ + "InvalidMarker", "UndefinedComparison", "UndefinedEnvironmentName", + "Marker", "default_environment", +] + + +class InvalidMarker(ValueError): + """ + An invalid marker was found, users should refer to PEP 508. + """ + + +class UndefinedComparison(ValueError): + """ + An invalid operation was attempted on a value that doesn't support it. + """ + + +class UndefinedEnvironmentName(ValueError): + """ + A name was attempted to be used that does not exist inside of the + environment. + """ + + +class Node(object): + + def __init__(self, value): + self.value = value + + def __str__(self): + return str(self.value) + + def __repr__(self): + return "<{0}({1!r})>".format(self.__class__.__name__, str(self)) + + def serialize(self): + raise NotImplementedError + + +class Variable(Node): + + def serialize(self): + return str(self) + + +class Value(Node): + + def serialize(self): + return '"{0}"'.format(self) + + +class Op(Node): + + def serialize(self): + return str(self) + + +VARIABLE = ( + L("implementation_version") | + L("platform_python_implementation") | + L("implementation_name") | + L("python_full_version") | + L("platform_release") | + L("platform_version") | + L("platform_machine") | + L("platform_system") | + L("python_version") | + L("sys_platform") | + L("os_name") | + L("os.name") | # PEP-345 + L("sys.platform") | # PEP-345 + L("platform.version") | # PEP-345 + L("platform.machine") | # PEP-345 + L("platform.python_implementation") | # PEP-345 + L("python_implementation") | # undocumented setuptools legacy + L("extra") +) +ALIASES = { + 'os.name': 'os_name', + 'sys.platform': 'sys_platform', + 'platform.version': 'platform_version', + 'platform.machine': 'platform_machine', + 'platform.python_implementation': 'platform_python_implementation', + 'python_implementation': 'platform_python_implementation' +} +VARIABLE.setParseAction(lambda s, l, t: Variable(ALIASES.get(t[0], t[0]))) + +VERSION_CMP = ( + L("===") | + L("==") | + L(">=") | + L("<=") | + L("!=") | + L("~=") | + L(">") | + L("<") +) + +MARKER_OP = VERSION_CMP | L("not in") | L("in") +MARKER_OP.setParseAction(lambda s, l, t: Op(t[0])) + +MARKER_VALUE = QuotedString("'") | QuotedString('"') +MARKER_VALUE.setParseAction(lambda s, l, t: Value(t[0])) + +BOOLOP = L("and") | L("or") + +MARKER_VAR = VARIABLE | MARKER_VALUE + +MARKER_ITEM = Group(MARKER_VAR + MARKER_OP + MARKER_VAR) +MARKER_ITEM.setParseAction(lambda s, l, t: tuple(t[0])) + +LPAREN = L("(").suppress() +RPAREN = L(")").suppress() + +MARKER_EXPR = Forward() +MARKER_ATOM = MARKER_ITEM | Group(LPAREN + MARKER_EXPR + RPAREN) +MARKER_EXPR << MARKER_ATOM + ZeroOrMore(BOOLOP + MARKER_EXPR) + +MARKER = stringStart + MARKER_EXPR + stringEnd + + +def _coerce_parse_result(results): + if isinstance(results, ParseResults): + return [_coerce_parse_result(i) for i in results] + else: + return results + + +def _format_marker(marker, first=True): + assert isinstance(marker, (list, tuple, string_types)) + + # Sometimes we have a structure like [[...]] which is a single item list + # where the single item is itself it's own list. In that case we want skip + # the rest of this function so that we don't get extraneous () on the + # outside. + if (isinstance(marker, list) and len(marker) == 1 and + isinstance(marker[0], (list, tuple))): + return _format_marker(marker[0]) + + if isinstance(marker, list): + inner = (_format_marker(m, first=False) for m in marker) + if first: + return " ".join(inner) + else: + return "(" + " ".join(inner) + ")" + elif isinstance(marker, tuple): + return " ".join([m.serialize() for m in marker]) + else: + return marker + + +_operators = { + "in": lambda lhs, rhs: lhs in rhs, + "not in": lambda lhs, rhs: lhs not in rhs, + "<": operator.lt, + "<=": operator.le, + "==": operator.eq, + "!=": operator.ne, + ">=": operator.ge, + ">": operator.gt, +} + + +def _eval_op(lhs, op, rhs): + try: + spec = Specifier("".join([op.serialize(), rhs])) + except InvalidSpecifier: + pass + else: + return spec.contains(lhs) + + oper = _operators.get(op.serialize()) + if oper is None: + raise UndefinedComparison( + "Undefined {0!r} on {1!r} and {2!r}.".format(op, lhs, rhs) + ) + + return oper(lhs, rhs) + + +_undefined = object() + + +def _get_env(environment, name): + value = environment.get(name, _undefined) + + if value is _undefined: + raise UndefinedEnvironmentName( + "{0!r} does not exist in evaluation environment.".format(name) + ) + + return value + + +def _evaluate_markers(markers, environment): + groups = [[]] + + for marker in markers: + assert isinstance(marker, (list, tuple, string_types)) + + if isinstance(marker, list): + groups[-1].append(_evaluate_markers(marker, environment)) + elif isinstance(marker, tuple): + lhs, op, rhs = marker + + if isinstance(lhs, Variable): + lhs_value = _get_env(environment, lhs.value) + rhs_value = rhs.value + else: + lhs_value = lhs.value + rhs_value = _get_env(environment, rhs.value) + + groups[-1].append(_eval_op(lhs_value, op, rhs_value)) + else: + assert marker in ["and", "or"] + if marker == "or": + groups.append([]) + + return any(all(item) for item in groups) + + +def format_full_version(info): + version = '{0.major}.{0.minor}.{0.micro}'.format(info) + kind = info.releaselevel + if kind != 'final': + version += kind[0] + str(info.serial) + return version + + +def default_environment(): + if hasattr(sys, 'implementation'): + iver = format_full_version(sys.implementation.version) + implementation_name = sys.implementation.name + else: + iver = '0' + implementation_name = '' + + return { + "implementation_name": implementation_name, + "implementation_version": iver, + "os_name": os.name, + "platform_machine": platform.machine(), + "platform_release": platform.release(), + "platform_system": platform.system(), + "platform_version": platform.version(), + "python_full_version": platform.python_version(), + "platform_python_implementation": platform.python_implementation(), + "python_version": platform.python_version()[:3], + "sys_platform": sys.platform, + } + + +class Marker(object): + + def __init__(self, marker): + try: + self._markers = _coerce_parse_result(MARKER.parseString(marker)) + except ParseException as e: + err_str = "Invalid marker: {0!r}, parse error at {1!r}".format( + marker, marker[e.loc:e.loc + 8]) + raise InvalidMarker(err_str) + + def __str__(self): + return _format_marker(self._markers) + + def __repr__(self): + return "<Marker({0!r})>".format(str(self)) + + def evaluate(self, environment=None): + """Evaluate a marker. + + Return the boolean from evaluating the given marker against the + environment. environment is an optional argument to override all or + part of the determined environment. + + The environment is determined from the current Python process. + """ + current_environment = default_environment() + if environment is not None: + current_environment.update(environment) + + return _evaluate_markers(self._markers, current_environment) diff --git a/week-0/day-3/venv/lib/python3.6/site-packages/setuptools/_vendor/packaging/requirements.py b/week-0/day-3/venv/lib/python3.6/site-packages/setuptools/_vendor/packaging/requirements.py new file mode 100644 index 00000000..5b493416 --- /dev/null +++ b/week-0/day-3/venv/lib/python3.6/site-packages/setuptools/_vendor/packaging/requirements.py @@ -0,0 +1,127 @@ +# This file is dual licensed under the terms of the Apache License, Version +# 2.0, and the BSD License. See the LICENSE file in the root of this repository +# for complete details. +from __future__ import absolute_import, division, print_function + +import string +import re + +from setuptools.extern.pyparsing import stringStart, stringEnd, originalTextFor, ParseException +from setuptools.extern.pyparsing import ZeroOrMore, Word, Optional, Regex, Combine +from setuptools.extern.pyparsing import Literal as L # noqa +from setuptools.extern.six.moves.urllib import parse as urlparse + +from .markers import MARKER_EXPR, Marker +from .specifiers import LegacySpecifier, Specifier, SpecifierSet + + +class InvalidRequirement(ValueError): + """ + An invalid requirement was found, users should refer to PEP 508. + """ + + +ALPHANUM = Word(string.ascii_letters + string.digits) + +LBRACKET = L("[").suppress() +RBRACKET = L("]").suppress() +LPAREN = L("(").suppress() +RPAREN = L(")").suppress() +COMMA = L(",").suppress() +SEMICOLON = L(";").suppress() +AT = L("@").suppress() + +PUNCTUATION = Word("-_.") +IDENTIFIER_END = ALPHANUM | (ZeroOrMore(PUNCTUATION) + ALPHANUM) +IDENTIFIER = Combine(ALPHANUM + ZeroOrMore(IDENTIFIER_END)) + +NAME = IDENTIFIER("name") +EXTRA = IDENTIFIER + +URI = Regex(r'[^ ]+')("url") +URL = (AT + URI) + +EXTRAS_LIST = EXTRA + ZeroOrMore(COMMA + EXTRA) +EXTRAS = (LBRACKET + Optional(EXTRAS_LIST) + RBRACKET)("extras") + +VERSION_PEP440 = Regex(Specifier._regex_str, re.VERBOSE | re.IGNORECASE) +VERSION_LEGACY = Regex(LegacySpecifier._regex_str, re.VERBOSE | re.IGNORECASE) + +VERSION_ONE = VERSION_PEP440 ^ VERSION_LEGACY +VERSION_MANY = Combine(VERSION_ONE + ZeroOrMore(COMMA + VERSION_ONE), + joinString=",", adjacent=False)("_raw_spec") +_VERSION_SPEC = Optional(((LPAREN + VERSION_MANY + RPAREN) | VERSION_MANY)) +_VERSION_SPEC.setParseAction(lambda s, l, t: t._raw_spec or '') + +VERSION_SPEC = originalTextFor(_VERSION_SPEC)("specifier") +VERSION_SPEC.setParseAction(lambda s, l, t: t[1]) + +MARKER_EXPR = originalTextFor(MARKER_EXPR())("marker") +MARKER_EXPR.setParseAction( + lambda s, l, t: Marker(s[t._original_start:t._original_end]) +) +MARKER_SEPERATOR = SEMICOLON +MARKER = MARKER_SEPERATOR + MARKER_EXPR + +VERSION_AND_MARKER = VERSION_SPEC + Optional(MARKER) +URL_AND_MARKER = URL + Optional(MARKER) + +NAMED_REQUIREMENT = \ + NAME + Optional(EXTRAS) + (URL_AND_MARKER | VERSION_AND_MARKER) + +REQUIREMENT = stringStart + NAMED_REQUIREMENT + stringEnd + + +class Requirement(object): + """Parse a requirement. + + Parse a given requirement string into its parts, such as name, specifier, + URL, and extras. Raises InvalidRequirement on a badly-formed requirement + string. + """ + + # TODO: Can we test whether something is contained within a requirement? + # If so how do we do that? Do we need to test against the _name_ of + # the thing as well as the version? What about the markers? + # TODO: Can we normalize the name and extra name? + + def __init__(self, requirement_string): + try: + req = REQUIREMENT.parseString(requirement_string) + except ParseException as e: + raise InvalidRequirement( + "Invalid requirement, parse error at \"{0!r}\"".format( + requirement_string[e.loc:e.loc + 8])) + + self.name = req.name + if req.url: + parsed_url = urlparse.urlparse(req.url) + if not (parsed_url.scheme and parsed_url.netloc) or ( + not parsed_url.scheme and not parsed_url.netloc): + raise InvalidRequirement("Invalid URL given") + self.url = req.url + else: + self.url = None + self.extras = set(req.extras.asList() if req.extras else []) + self.specifier = SpecifierSet(req.specifier) + self.marker = req.marker if req.marker else None + + def __str__(self): + parts = [self.name] + + if self.extras: + parts.append("[{0}]".format(",".join(sorted(self.extras)))) + + if self.specifier: + parts.append(str(self.specifier)) + + if self.url: + parts.append("@ {0}".format(self.url)) + + if self.marker: + parts.append("; {0}".format(self.marker)) + + return "".join(parts) + + def __repr__(self): + return "<Requirement({0!r})>".format(str(self)) diff --git a/week-0/day-3/venv/lib/python3.6/site-packages/setuptools/_vendor/packaging/specifiers.py b/week-0/day-3/venv/lib/python3.6/site-packages/setuptools/_vendor/packaging/specifiers.py new file mode 100644 index 00000000..7f5a76cf --- /dev/null +++ b/week-0/day-3/venv/lib/python3.6/site-packages/setuptools/_vendor/packaging/specifiers.py @@ -0,0 +1,774 @@ +# This file is dual licensed under the terms of the Apache License, Version +# 2.0, and the BSD License. See the LICENSE file in the root of this repository +# for complete details. +from __future__ import absolute_import, division, print_function + +import abc +import functools +import itertools +import re + +from ._compat import string_types, with_metaclass +from .version import Version, LegacyVersion, parse + + +class InvalidSpecifier(ValueError): + """ + An invalid specifier was found, users should refer to PEP 440. + """ + + +class BaseSpecifier(with_metaclass(abc.ABCMeta, object)): + + @abc.abstractmethod + def __str__(self): + """ + Returns the str representation of this Specifier like object. This + should be representative of the Specifier itself. + """ + + @abc.abstractmethod + def __hash__(self): + """ + Returns a hash value for this Specifier like object. + """ + + @abc.abstractmethod + def __eq__(self, other): + """ + Returns a boolean representing whether or not the two Specifier like + objects are equal. + """ + + @abc.abstractmethod + def __ne__(self, other): + """ + Returns a boolean representing whether or not the two Specifier like + objects are not equal. + """ + + @abc.abstractproperty + def prereleases(self): + """ + Returns whether or not pre-releases as a whole are allowed by this + specifier. + """ + + @prereleases.setter + def prereleases(self, value): + """ + Sets whether or not pre-releases as a whole are allowed by this + specifier. + """ + + @abc.abstractmethod + def contains(self, item, prereleases=None): + """ + Determines if the given item is contained within this specifier. + """ + + @abc.abstractmethod + def filter(self, iterable, prereleases=None): + """ + Takes an iterable of items and filters them so that only items which + are contained within this specifier are allowed in it. + """ + + +class _IndividualSpecifier(BaseSpecifier): + + _operators = {} + + def __init__(self, spec="", prereleases=None): + match = self._regex.search(spec) + if not match: + raise InvalidSpecifier("Invalid specifier: '{0}'".format(spec)) + + self._spec = ( + match.group("operator").strip(), + match.group("version").strip(), + ) + + # Store whether or not this Specifier should accept prereleases + self._prereleases = prereleases + + def __repr__(self): + pre = ( + ", prereleases={0!r}".format(self.prereleases) + if self._prereleases is not None + else "" + ) + + return "<{0}({1!r}{2})>".format( + self.__class__.__name__, + str(self), + pre, + ) + + def __str__(self): + return "{0}{1}".format(*self._spec) + + def __hash__(self): + return hash(self._spec) + + def __eq__(self, other): + if isinstance(other, string_types): + try: + other = self.__class__(other) + except InvalidSpecifier: + return NotImplemented + elif not isinstance(other, self.__class__): + return NotImplemented + + return self._spec == other._spec + + def __ne__(self, other): + if isinstance(other, string_types): + try: + other = self.__class__(other) + except InvalidSpecifier: + return NotImplemented + elif not isinstance(other, self.__class__): + return NotImplemented + + return self._spec != other._spec + + def _get_operator(self, op): + return getattr(self, "_compare_{0}".format(self._operators[op])) + + def _coerce_version(self, version): + if not isinstance(version, (LegacyVersion, Version)): + version = parse(version) + return version + + @property + def operator(self): + return self._spec[0] + + @property + def version(self): + return self._spec[1] + + @property + def prereleases(self): + return self._prereleases + + @prereleases.setter + def prereleases(self, value): + self._prereleases = value + + def __contains__(self, item): + return self.contains(item) + + def contains(self, item, prereleases=None): + # Determine if prereleases are to be allowed or not. + if prereleases is None: + prereleases = self.prereleases + + # Normalize item to a Version or LegacyVersion, this allows us to have + # a shortcut for ``"2.0" in Specifier(">=2") + item = self._coerce_version(item) + + # Determine if we should be supporting prereleases in this specifier + # or not, if we do not support prereleases than we can short circuit + # logic if this version is a prereleases. + if item.is_prerelease and not prereleases: + return False + + # Actually do the comparison to determine if this item is contained + # within this Specifier or not. + return self._get_operator(self.operator)(item, self.version) + + def filter(self, iterable, prereleases=None): + yielded = False + found_prereleases = [] + + kw = {"prereleases": prereleases if prereleases is not None else True} + + # Attempt to iterate over all the values in the iterable and if any of + # them match, yield them. + for version in iterable: + parsed_version = self._coerce_version(version) + + if self.contains(parsed_version, **kw): + # If our version is a prerelease, and we were not set to allow + # prereleases, then we'll store it for later incase nothing + # else matches this specifier. + if (parsed_version.is_prerelease and not + (prereleases or self.prereleases)): + found_prereleases.append(version) + # Either this is not a prerelease, or we should have been + # accepting prereleases from the begining. + else: + yielded = True + yield version + + # Now that we've iterated over everything, determine if we've yielded + # any values, and if we have not and we have any prereleases stored up + # then we will go ahead and yield the prereleases. + if not yielded and found_prereleases: + for version in found_prereleases: + yield version + + +class LegacySpecifier(_IndividualSpecifier): + + _regex_str = ( + r""" + (?P<operator>(==|!=|<=|>=|<|>)) + \s* + (?P<version> + [^,;\s)]* # Since this is a "legacy" specifier, and the version + # string can be just about anything, we match everything + # except for whitespace, a semi-colon for marker support, + # a closing paren since versions can be enclosed in + # them, and a comma since it's a version separator. + ) + """ + ) + + _regex = re.compile( + r"^\s*" + _regex_str + r"\s*$", re.VERBOSE | re.IGNORECASE) + + _operators = { + "==": "equal", + "!=": "not_equal", + "<=": "less_than_equal", + ">=": "greater_than_equal", + "<": "less_than", + ">": "greater_than", + } + + def _coerce_version(self, version): + if not isinstance(version, LegacyVersion): + version = LegacyVersion(str(version)) + return version + + def _compare_equal(self, prospective, spec): + return prospective == self._coerce_version(spec) + + def _compare_not_equal(self, prospective, spec): + return prospective != self._coerce_version(spec) + + def _compare_less_than_equal(self, prospective, spec): + return prospective <= self._coerce_version(spec) + + def _compare_greater_than_equal(self, prospective, spec): + return prospective >= self._coerce_version(spec) + + def _compare_less_than(self, prospective, spec): + return prospective < self._coerce_version(spec) + + def _compare_greater_than(self, prospective, spec): + return prospective > self._coerce_version(spec) + + +def _require_version_compare(fn): + @functools.wraps(fn) + def wrapped(self, prospective, spec): + if not isinstance(prospective, Version): + return False + return fn(self, prospective, spec) + return wrapped + + +class Specifier(_IndividualSpecifier): + + _regex_str = ( + r""" + (?P<operator>(~=|==|!=|<=|>=|<|>|===)) + (?P<version> + (?: + # The identity operators allow for an escape hatch that will + # do an exact string match of the version you wish to install. + # This will not be parsed by PEP 440 and we cannot determine + # any semantic meaning from it. This operator is discouraged + # but included entirely as an escape hatch. + (?<====) # Only match for the identity operator + \s* + [^\s]* # We just match everything, except for whitespace + # since we are only testing for strict identity. + ) + | + (?: + # The (non)equality operators allow for wild card and local + # versions to be specified so we have to define these two + # operators separately to enable that. + (?<===|!=) # Only match for equals and not equals + + \s* + v? + (?:[0-9]+!)? # epoch + [0-9]+(?:\.[0-9]+)* # release + (?: # pre release + [-_\.]? + (a|b|c|rc|alpha|beta|pre|preview) + [-_\.]? + [0-9]* + )? + (?: # post release + (?:-[0-9]+)|(?:[-_\.]?(post|rev|r)[-_\.]?[0-9]*) + )? + + # You cannot use a wild card and a dev or local version + # together so group them with a | and make them optional. + (?: + (?:[-_\.]?dev[-_\.]?[0-9]*)? # dev release + (?:\+[a-z0-9]+(?:[-_\.][a-z0-9]+)*)? # local + | + \.\* # Wild card syntax of .* + )? + ) + | + (?: + # The compatible operator requires at least two digits in the + # release segment. + (?<=~=) # Only match for the compatible operator + + \s* + v? + (?:[0-9]+!)? # epoch + [0-9]+(?:\.[0-9]+)+ # release (We have a + instead of a *) + (?: # pre release + [-_\.]? + (a|b|c|rc|alpha|beta|pre|preview) + [-_\.]? + [0-9]* + )? + (?: # post release + (?:-[0-9]+)|(?:[-_\.]?(post|rev|r)[-_\.]?[0-9]*) + )? + (?:[-_\.]?dev[-_\.]?[0-9]*)? # dev release + ) + | + (?: + # All other operators only allow a sub set of what the + # (non)equality operators do. Specifically they do not allow + # local versions to be specified nor do they allow the prefix + # matching wild cards. + (?<!==|!=|~=) # We have special cases for these + # operators so we want to make sure they + # don't match here. + + \s* + v? + (?:[0-9]+!)? # epoch + [0-9]+(?:\.[0-9]+)* # release + (?: # pre release + [-_\.]? + (a|b|c|rc|alpha|beta|pre|preview) + [-_\.]? + [0-9]* + )? + (?: # post release + (?:-[0-9]+)|(?:[-_\.]?(post|rev|r)[-_\.]?[0-9]*) + )? + (?:[-_\.]?dev[-_\.]?[0-9]*)? # dev release + ) + ) + """ + ) + + _regex = re.compile( + r"^\s*" + _regex_str + r"\s*$", re.VERBOSE | re.IGNORECASE) + + _operators = { + "~=": "compatible", + "==": "equal", + "!=": "not_equal", + "<=": "less_than_equal", + ">=": "greater_than_equal", + "<": "less_than", + ">": "greater_than", + "===": "arbitrary", + } + + @_require_version_compare + def _compare_compatible(self, prospective, spec): + # Compatible releases have an equivalent combination of >= and ==. That + # is that ~=2.2 is equivalent to >=2.2,==2.*. This allows us to + # implement this in terms of the other specifiers instead of + # implementing it ourselves. The only thing we need to do is construct + # the other specifiers. + + # We want everything but the last item in the version, but we want to + # ignore post and dev releases and we want to treat the pre-release as + # it's own separate segment. + prefix = ".".join( + list( + itertools.takewhile( + lambda x: (not x.startswith("post") and not + x.startswith("dev")), + _version_split(spec), + ) + )[:-1] + ) + + # Add the prefix notation to the end of our string + prefix += ".*" + + return (self._get_operator(">=")(prospective, spec) and + self._get_operator("==")(prospective, prefix)) + + @_require_version_compare + def _compare_equal(self, prospective, spec): + # We need special logic to handle prefix matching + if spec.endswith(".*"): + # In the case of prefix matching we want to ignore local segment. + prospective = Version(prospective.public) + # Split the spec out by dots, and pretend that there is an implicit + # dot in between a release segment and a pre-release segment. + spec = _version_split(spec[:-2]) # Remove the trailing .* + + # Split the prospective version out by dots, and pretend that there + # is an implicit dot in between a release segment and a pre-release + # segment. + prospective = _version_split(str(prospective)) + + # Shorten the prospective version to be the same length as the spec + # so that we can determine if the specifier is a prefix of the + # prospective version or not. + prospective = prospective[:len(spec)] + + # Pad out our two sides with zeros so that they both equal the same + # length. + spec, prospective = _pad_version(spec, prospective) + else: + # Convert our spec string into a Version + spec = Version(spec) + + # If the specifier does not have a local segment, then we want to + # act as if the prospective version also does not have a local + # segment. + if not spec.local: + prospective = Version(prospective.public) + + return prospective == spec + + @_require_version_compare + def _compare_not_equal(self, prospective, spec): + return not self._compare_equal(prospective, spec) + + @_require_version_compare + def _compare_less_than_equal(self, prospective, spec): + return prospective <= Version(spec) + + @_require_version_compare + def _compare_greater_than_equal(self, prospective, spec): + return prospective >= Version(spec) + + @_require_version_compare + def _compare_less_than(self, prospective, spec): + # Convert our spec to a Version instance, since we'll want to work with + # it as a version. + spec = Version(spec) + + # Check to see if the prospective version is less than the spec + # version. If it's not we can short circuit and just return False now + # instead of doing extra unneeded work. + if not prospective < spec: + return False + + # This special case is here so that, unless the specifier itself + # includes is a pre-release version, that we do not accept pre-release + # versions for the version mentioned in the specifier (e.g. <3.1 should + # not match 3.1.dev0, but should match 3.0.dev0). + if not spec.is_prerelease and prospective.is_prerelease: + if Version(prospective.base_version) == Version(spec.base_version): + return False + + # If we've gotten to here, it means that prospective version is both + # less than the spec version *and* it's not a pre-release of the same + # version in the spec. + return True + + @_require_version_compare + def _compare_greater_than(self, prospective, spec): + # Convert our spec to a Version instance, since we'll want to work with + # it as a version. + spec = Version(spec) + + # Check to see if the prospective version is greater than the spec + # version. If it's not we can short circuit and just return False now + # instead of doing extra unneeded work. + if not prospective > spec: + return False + + # This special case is here so that, unless the specifier itself + # includes is a post-release version, that we do not accept + # post-release versions for the version mentioned in the specifier + # (e.g. >3.1 should not match 3.0.post0, but should match 3.2.post0). + if not spec.is_postrelease and prospective.is_postrelease: + if Version(prospective.base_version) == Version(spec.base_version): + return False + + # Ensure that we do not allow a local version of the version mentioned + # in the specifier, which is techincally greater than, to match. + if prospective.local is not None: + if Version(prospective.base_version) == Version(spec.base_version): + return False + + # If we've gotten to here, it means that prospective version is both + # greater than the spec version *and* it's not a pre-release of the + # same version in the spec. + return True + + def _compare_arbitrary(self, prospective, spec): + return str(prospective).lower() == str(spec).lower() + + @property + def prereleases(self): + # If there is an explicit prereleases set for this, then we'll just + # blindly use that. + if self._prereleases is not None: + return self._prereleases + + # Look at all of our specifiers and determine if they are inclusive + # operators, and if they are if they are including an explicit + # prerelease. + operator, version = self._spec + if operator in ["==", ">=", "<=", "~=", "==="]: + # The == specifier can include a trailing .*, if it does we + # want to remove before parsing. + if operator == "==" and version.endswith(".*"): + version = version[:-2] + + # Parse the version, and if it is a pre-release than this + # specifier allows pre-releases. + if parse(version).is_prerelease: + return True + + return False + + @prereleases.setter + def prereleases(self, value): + self._prereleases = value + + +_prefix_regex = re.compile(r"^([0-9]+)((?:a|b|c|rc)[0-9]+)$") + + +def _version_split(version): + result = [] + for item in version.split("."): + match = _prefix_regex.search(item) + if match: + result.extend(match.groups()) + else: + result.append(item) + return result + + +def _pad_version(left, right): + left_split, right_split = [], [] + + # Get the release segment of our versions + left_split.append(list(itertools.takewhile(lambda x: x.isdigit(), left))) + right_split.append(list(itertools.takewhile(lambda x: x.isdigit(), right))) + + # Get the rest of our versions + left_split.append(left[len(left_split[0]):]) + right_split.append(right[len(right_split[0]):]) + + # Insert our padding + left_split.insert( + 1, + ["0"] * max(0, len(right_split[0]) - len(left_split[0])), + ) + right_split.insert( + 1, + ["0"] * max(0, len(left_split[0]) - len(right_split[0])), + ) + + return ( + list(itertools.chain(*left_split)), + list(itertools.chain(*right_split)), + ) + + +class SpecifierSet(BaseSpecifier): + + def __init__(self, specifiers="", prereleases=None): + # Split on , to break each indidivual specifier into it's own item, and + # strip each item to remove leading/trailing whitespace. + specifiers = [s.strip() for s in specifiers.split(",") if s.strip()] + + # Parsed each individual specifier, attempting first to make it a + # Specifier and falling back to a LegacySpecifier. + parsed = set() + for specifier in specifiers: + try: + parsed.add(Specifier(specifier)) + except InvalidSpecifier: + parsed.add(LegacySpecifier(specifier)) + + # Turn our parsed specifiers into a frozen set and save them for later. + self._specs = frozenset(parsed) + + # Store our prereleases value so we can use it later to determine if + # we accept prereleases or not. + self._prereleases = prereleases + + def __repr__(self): + pre = ( + ", prereleases={0!r}".format(self.prereleases) + if self._prereleases is not None + else "" + ) + + return "<SpecifierSet({0!r}{1})>".format(str(self), pre) + + def __str__(self): + return ",".join(sorted(str(s) for s in self._specs)) + + def __hash__(self): + return hash(self._specs) + + def __and__(self, other): + if isinstance(other, string_types): + other = SpecifierSet(other) + elif not isinstance(other, SpecifierSet): + return NotImplemented + + specifier = SpecifierSet() + specifier._specs = frozenset(self._specs | other._specs) + + if self._prereleases is None and other._prereleases is not None: + specifier._prereleases = other._prereleases + elif self._prereleases is not None and other._prereleases is None: + specifier._prereleases = self._prereleases + elif self._prereleases == other._prereleases: + specifier._prereleases = self._prereleases + else: + raise ValueError( + "Cannot combine SpecifierSets with True and False prerelease " + "overrides." + ) + + return specifier + + def __eq__(self, other): + if isinstance(other, string_types): + other = SpecifierSet(other) + elif isinstance(other, _IndividualSpecifier): + other = SpecifierSet(str(other)) + elif not isinstance(other, SpecifierSet): + return NotImplemented + + return self._specs == other._specs + + def __ne__(self, other): + if isinstance(other, string_types): + other = SpecifierSet(other) + elif isinstance(other, _IndividualSpecifier): + other = SpecifierSet(str(other)) + elif not isinstance(other, SpecifierSet): + return NotImplemented + + return self._specs != other._specs + + def __len__(self): + return len(self._specs) + + def __iter__(self): + return iter(self._specs) + + @property + def prereleases(self): + # If we have been given an explicit prerelease modifier, then we'll + # pass that through here. + if self._prereleases is not None: + return self._prereleases + + # If we don't have any specifiers, and we don't have a forced value, + # then we'll just return None since we don't know if this should have + # pre-releases or not. + if not self._specs: + return None + + # Otherwise we'll see if any of the given specifiers accept + # prereleases, if any of them do we'll return True, otherwise False. + return any(s.prereleases for s in self._specs) + + @prereleases.setter + def prereleases(self, value): + self._prereleases = value + + def __contains__(self, item): + return self.contains(item) + + def contains(self, item, prereleases=None): + # Ensure that our item is a Version or LegacyVersion instance. + if not isinstance(item, (LegacyVersion, Version)): + item = parse(item) + + # Determine if we're forcing a prerelease or not, if we're not forcing + # one for this particular filter call, then we'll use whatever the + # SpecifierSet thinks for whether or not we should support prereleases. + if prereleases is None: + prereleases = self.prereleases + + # We can determine if we're going to allow pre-releases by looking to + # see if any of the underlying items supports them. If none of them do + # and this item is a pre-release then we do not allow it and we can + # short circuit that here. + # Note: This means that 1.0.dev1 would not be contained in something + # like >=1.0.devabc however it would be in >=1.0.debabc,>0.0.dev0 + if not prereleases and item.is_prerelease: + return False + + # We simply dispatch to the underlying specs here to make sure that the + # given version is contained within all of them. + # Note: This use of all() here means that an empty set of specifiers + # will always return True, this is an explicit design decision. + return all( + s.contains(item, prereleases=prereleases) + for s in self._specs + ) + + def filter(self, iterable, prereleases=None): + # Determine if we're forcing a prerelease or not, if we're not forcing + # one for this particular filter call, then we'll use whatever the + # SpecifierSet thinks for whether or not we should support prereleases. + if prereleases is None: + prereleases = self.prereleases + + # If we have any specifiers, then we want to wrap our iterable in the + # filter method for each one, this will act as a logical AND amongst + # each specifier. + if self._specs: + for spec in self._specs: + iterable = spec.filter(iterable, prereleases=bool(prereleases)) + return iterable + # If we do not have any specifiers, then we need to have a rough filter + # which will filter out any pre-releases, unless there are no final + # releases, and which will filter out LegacyVersion in general. + else: + filtered = [] + found_prereleases = [] + + for item in iterable: + # Ensure that we some kind of Version class for this item. + if not isinstance(item, (LegacyVersion, Version)): + parsed_version = parse(item) + else: + parsed_version = item + + # Filter out any item which is parsed as a LegacyVersion + if isinstance(parsed_version, LegacyVersion): + continue + + # Store any item which is a pre-release for later unless we've + # already found a final version or we are accepting prereleases + if parsed_version.is_prerelease and not prereleases: + if not filtered: + found_prereleases.append(item) + else: + filtered.append(item) + + # If we've found no items except for pre-releases, then we'll go + # ahead and use the pre-releases + if not filtered and found_prereleases and prereleases is None: + return found_prereleases + + return filtered diff --git a/week-0/day-3/venv/lib/python3.6/site-packages/setuptools/_vendor/packaging/utils.py b/week-0/day-3/venv/lib/python3.6/site-packages/setuptools/_vendor/packaging/utils.py new file mode 100644 index 00000000..942387ce --- /dev/null +++ b/week-0/day-3/venv/lib/python3.6/site-packages/setuptools/_vendor/packaging/utils.py @@ -0,0 +1,14 @@ +# This file is dual licensed under the terms of the Apache License, Version +# 2.0, and the BSD License. See the LICENSE file in the root of this repository +# for complete details. +from __future__ import absolute_import, division, print_function + +import re + + +_canonicalize_regex = re.compile(r"[-_.]+") + + +def canonicalize_name(name): + # This is taken from PEP 503. + return _canonicalize_regex.sub("-", name).lower() diff --git a/week-0/day-3/venv/lib/python3.6/site-packages/setuptools/_vendor/packaging/version.py b/week-0/day-3/venv/lib/python3.6/site-packages/setuptools/_vendor/packaging/version.py new file mode 100644 index 00000000..83b5ee8c --- /dev/null +++ b/week-0/day-3/venv/lib/python3.6/site-packages/setuptools/_vendor/packaging/version.py @@ -0,0 +1,393 @@ +# This file is dual licensed under the terms of the Apache License, Version +# 2.0, and the BSD License. See the LICENSE file in the root of this repository +# for complete details. +from __future__ import absolute_import, division, print_function + +import collections +import itertools +import re + +from ._structures import Infinity + + +__all__ = [ + "parse", "Version", "LegacyVersion", "InvalidVersion", "VERSION_PATTERN" +] + + +_Version = collections.namedtuple( + "_Version", + ["epoch", "release", "dev", "pre", "post", "local"], +) + + +def parse(version): + """ + Parse the given version string and return either a :class:`Version` object + or a :class:`LegacyVersion` object depending on if the given version is + a valid PEP 440 version or a legacy version. + """ + try: + return Version(version) + except InvalidVersion: + return LegacyVersion(version) + + +class InvalidVersion(ValueError): + """ + An invalid version was found, users should refer to PEP 440. + """ + + +class _BaseVersion(object): + + def __hash__(self): + return hash(self._key) + + def __lt__(self, other): + return self._compare(other, lambda s, o: s < o) + + def __le__(self, other): + return self._compare(other, lambda s, o: s <= o) + + def __eq__(self, other): + return self._compare(other, lambda s, o: s == o) + + def __ge__(self, other): + return self._compare(other, lambda s, o: s >= o) + + def __gt__(self, other): + return self._compare(other, lambda s, o: s > o) + + def __ne__(self, other): + return self._compare(other, lambda s, o: s != o) + + def _compare(self, other, method): + if not isinstance(other, _BaseVersion): + return NotImplemented + + return method(self._key, other._key) + + +class LegacyVersion(_BaseVersion): + + def __init__(self, version): + self._version = str(version) + self._key = _legacy_cmpkey(self._version) + + def __str__(self): + return self._version + + def __repr__(self): + return "<LegacyVersion({0})>".format(repr(str(self))) + + @property + def public(self): + return self._version + + @property + def base_version(self): + return self._version + + @property + def local(self): + return None + + @property + def is_prerelease(self): + return False + + @property + def is_postrelease(self): + return False + + +_legacy_version_component_re = re.compile( + r"(\d+ | [a-z]+ | \.| -)", re.VERBOSE, +) + +_legacy_version_replacement_map = { + "pre": "c", "preview": "c", "-": "final-", "rc": "c", "dev": "@", +} + + +def _parse_version_parts(s): + for part in _legacy_version_component_re.split(s): + part = _legacy_version_replacement_map.get(part, part) + + if not part or part == ".": + continue + + if part[:1] in "0123456789": + # pad for numeric comparison + yield part.zfill(8) + else: + yield "*" + part + + # ensure that alpha/beta/candidate are before final + yield "*final" + + +def _legacy_cmpkey(version): + # We hardcode an epoch of -1 here. A PEP 440 version can only have a epoch + # greater than or equal to 0. This will effectively put the LegacyVersion, + # which uses the defacto standard originally implemented by setuptools, + # as before all PEP 440 versions. + epoch = -1 + + # This scheme is taken from pkg_resources.parse_version setuptools prior to + # it's adoption of the packaging library. + parts = [] + for part in _parse_version_parts(version.lower()): + if part.startswith("*"): + # remove "-" before a prerelease tag + if part < "*final": + while parts and parts[-1] == "*final-": + parts.pop() + + # remove trailing zeros from each series of numeric parts + while parts and parts[-1] == "00000000": + parts.pop() + + parts.append(part) + parts = tuple(parts) + + return epoch, parts + +# Deliberately not anchored to the start and end of the string, to make it +# easier for 3rd party code to reuse +VERSION_PATTERN = r""" + v? + (?: + (?:(?P<epoch>[0-9]+)!)? # epoch + (?P<release>[0-9]+(?:\.[0-9]+)*) # release segment + (?P<pre> # pre-release + [-_\.]? + (?P<pre_l>(a|b|c|rc|alpha|beta|pre|preview)) + [-_\.]? + (?P<pre_n>[0-9]+)? + )? + (?P<post> # post release + (?:-(?P<post_n1>[0-9]+)) + | + (?: + [-_\.]? + (?P<post_l>post|rev|r) + [-_\.]? + (?P<post_n2>[0-9]+)? + ) + )? + (?P<dev> # dev release + [-_\.]? + (?P<dev_l>dev) + [-_\.]? + (?P<dev_n>[0-9]+)? + )? + ) + (?:\+(?P<local>[a-z0-9]+(?:[-_\.][a-z0-9]+)*))? # local version +""" + + +class Version(_BaseVersion): + + _regex = re.compile( + r"^\s*" + VERSION_PATTERN + r"\s*$", + re.VERBOSE | re.IGNORECASE, + ) + + def __init__(self, version): + # Validate the version and parse it into pieces + match = self._regex.search(version) + if not match: + raise InvalidVersion("Invalid version: '{0}'".format(version)) + + # Store the parsed out pieces of the version + self._version = _Version( + epoch=int(match.group("epoch")) if match.group("epoch") else 0, + release=tuple(int(i) for i in match.group("release").split(".")), + pre=_parse_letter_version( + match.group("pre_l"), + match.group("pre_n"), + ), + post=_parse_letter_version( + match.group("post_l"), + match.group("post_n1") or match.group("post_n2"), + ), + dev=_parse_letter_version( + match.group("dev_l"), + match.group("dev_n"), + ), + local=_parse_local_version(match.group("local")), + ) + + # Generate a key which will be used for sorting + self._key = _cmpkey( + self._version.epoch, + self._version.release, + self._version.pre, + self._version.post, + self._version.dev, + self._version.local, + ) + + def __repr__(self): + return "<Version({0})>".format(repr(str(self))) + + def __str__(self): + parts = [] + + # Epoch + if self._version.epoch != 0: + parts.append("{0}!".format(self._version.epoch)) + + # Release segment + parts.append(".".join(str(x) for x in self._version.release)) + + # Pre-release + if self._version.pre is not None: + parts.append("".join(str(x) for x in self._version.pre)) + + # Post-release + if self._version.post is not None: + parts.append(".post{0}".format(self._version.post[1])) + + # Development release + if self._version.dev is not None: + parts.append(".dev{0}".format(self._version.dev[1])) + + # Local version segment + if self._version.local is not None: + parts.append( + "+{0}".format(".".join(str(x) for x in self._version.local)) + ) + + return "".join(parts) + + @property + def public(self): + return str(self).split("+", 1)[0] + + @property + def base_version(self): + parts = [] + + # Epoch + if self._version.epoch != 0: + parts.append("{0}!".format(self._version.epoch)) + + # Release segment + parts.append(".".join(str(x) for x in self._version.release)) + + return "".join(parts) + + @property + def local(self): + version_string = str(self) + if "+" in version_string: + return version_string.split("+", 1)[1] + + @property + def is_prerelease(self): + return bool(self._version.dev or self._version.pre) + + @property + def is_postrelease(self): + return bool(self._version.post) + + +def _parse_letter_version(letter, number): + if letter: + # We consider there to be an implicit 0 in a pre-release if there is + # not a numeral associated with it. + if number is None: + number = 0 + + # We normalize any letters to their lower case form + letter = letter.lower() + + # We consider some words to be alternate spellings of other words and + # in those cases we want to normalize the spellings to our preferred + # spelling. + if letter == "alpha": + letter = "a" + elif letter == "beta": + letter = "b" + elif letter in ["c", "pre", "preview"]: + letter = "rc" + elif letter in ["rev", "r"]: + letter = "post" + + return letter, int(number) + if not letter and number: + # We assume if we are given a number, but we are not given a letter + # then this is using the implicit post release syntax (e.g. 1.0-1) + letter = "post" + + return letter, int(number) + + +_local_version_seperators = re.compile(r"[\._-]") + + +def _parse_local_version(local): + """ + Takes a string like abc.1.twelve and turns it into ("abc", 1, "twelve"). + """ + if local is not None: + return tuple( + part.lower() if not part.isdigit() else int(part) + for part in _local_version_seperators.split(local) + ) + + +def _cmpkey(epoch, release, pre, post, dev, local): + # When we compare a release version, we want to compare it with all of the + # trailing zeros removed. So we'll use a reverse the list, drop all the now + # leading zeros until we come to something non zero, then take the rest + # re-reverse it back into the correct order and make it a tuple and use + # that for our sorting key. + release = tuple( + reversed(list( + itertools.dropwhile( + lambda x: x == 0, + reversed(release), + ) + )) + ) + + # We need to "trick" the sorting algorithm to put 1.0.dev0 before 1.0a0. + # We'll do this by abusing the pre segment, but we _only_ want to do this + # if there is not a pre or a post segment. If we have one of those then + # the normal sorting rules will handle this case correctly. + if pre is None and post is None and dev is not None: + pre = -Infinity + # Versions without a pre-release (except as noted above) should sort after + # those with one. + elif pre is None: + pre = Infinity + + # Versions without a post segment should sort before those with one. + if post is None: + post = -Infinity + + # Versions without a development segment should sort after those with one. + if dev is None: + dev = Infinity + + if local is None: + # Versions without a local segment should sort before those with one. + local = -Infinity + else: + # Versions with a local segment need that segment parsed to implement + # the sorting rules in PEP440. + # - Alpha numeric segments sort before numeric segments + # - Alpha numeric segments sort lexicographically + # - Numeric segments sort numerically + # - Shorter versions sort before longer versions when the prefixes + # match exactly + local = tuple( + (i, "") if isinstance(i, int) else (-Infinity, i) + for i in local + ) + + return epoch, release, pre, post, dev, local diff --git a/week-0/day-3/venv/lib/python3.6/site-packages/setuptools/_vendor/pyparsing.py b/week-0/day-3/venv/lib/python3.6/site-packages/setuptools/_vendor/pyparsing.py new file mode 100644 index 00000000..a2122435 --- /dev/null +++ b/week-0/day-3/venv/lib/python3.6/site-packages/setuptools/_vendor/pyparsing.py @@ -0,0 +1,5696 @@ +# module pyparsing.py +# +# Copyright (c) 2003-2016 Paul T. McGuire +# +# Permission is hereby granted, free of charge, to any person obtaining +# a copy of this software and associated documentation files (the +# "Software"), to deal in the Software without restriction, including +# without limitation the rights to use, copy, modify, merge, publish, +# distribute, sublicense, and/or sell copies of the Software, and to +# permit persons to whom the Software is furnished to do so, subject to +# the following conditions: +# +# The above copyright notice and this permission notice shall be +# included in all copies or substantial portions of the Software. +# +# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, +# EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF +# MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. +# IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY +# CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, +# TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE +# SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. +# + +__doc__ = \ +""" +pyparsing module - Classes and methods to define and execute parsing grammars + +The pyparsing module is an alternative approach to creating and executing simple grammars, +vs. the traditional lex/yacc approach, or the use of regular expressions. With pyparsing, you +don't need to learn a new syntax for defining grammars or matching expressions - the parsing module +provides a library of classes that you use to construct the grammar directly in Python. + +Here is a program to parse "Hello, World!" (or any greeting of the form +C{"<salutation>, <addressee>!"}), built up using L{Word}, L{Literal}, and L{And} elements +(L{'+'<ParserElement.__add__>} operator gives L{And} expressions, strings are auto-converted to +L{Literal} expressions):: + + from pyparsing import Word, alphas + + # define grammar of a greeting + greet = Word(alphas) + "," + Word(alphas) + "!" + + hello = "Hello, World!" + print (hello, "->", greet.parseString(hello)) + +The program outputs the following:: + + Hello, World! -> ['Hello', ',', 'World', '!'] + +The Python representation of the grammar is quite readable, owing to the self-explanatory +class names, and the use of '+', '|' and '^' operators. + +The L{ParseResults} object returned from L{ParserElement.parseString<ParserElement.parseString>} can be accessed as a nested list, a dictionary, or an +object with named attributes. + +The pyparsing module handles some of the problems that are typically vexing when writing text parsers: + - extra or missing whitespace (the above program will also handle "Hello,World!", "Hello , World !", etc.) + - quoted strings + - embedded comments +""" + +__version__ = "2.1.10" +__versionTime__ = "07 Oct 2016 01:31 UTC" +__author__ = "Paul McGuire <ptmcg@users.sourceforge.net>" + +import string +from weakref import ref as wkref +import copy +import sys +import warnings +import re +import sre_constants +import collections +import pprint +import traceback +import types +from datetime import datetime + +try: + from _thread import RLock +except ImportError: + from threading import RLock + +try: + from collections import OrderedDict as _OrderedDict +except ImportError: + try: + from ordereddict import OrderedDict as _OrderedDict + except ImportError: + _OrderedDict = None + +#~ sys.stderr.write( "testing pyparsing module, version %s, %s\n" % (__version__,__versionTime__ ) ) + +__all__ = [ +'And', 'CaselessKeyword', 'CaselessLiteral', 'CharsNotIn', 'Combine', 'Dict', 'Each', 'Empty', +'FollowedBy', 'Forward', 'GoToColumn', 'Group', 'Keyword', 'LineEnd', 'LineStart', 'Literal', +'MatchFirst', 'NoMatch', 'NotAny', 'OneOrMore', 'OnlyOnce', 'Optional', 'Or', +'ParseBaseException', 'ParseElementEnhance', 'ParseException', 'ParseExpression', 'ParseFatalException', +'ParseResults', 'ParseSyntaxException', 'ParserElement', 'QuotedString', 'RecursiveGrammarException', +'Regex', 'SkipTo', 'StringEnd', 'StringStart', 'Suppress', 'Token', 'TokenConverter', +'White', 'Word', 'WordEnd', 'WordStart', 'ZeroOrMore', +'alphanums', 'alphas', 'alphas8bit', 'anyCloseTag', 'anyOpenTag', 'cStyleComment', 'col', +'commaSeparatedList', 'commonHTMLEntity', 'countedArray', 'cppStyleComment', 'dblQuotedString', +'dblSlashComment', 'delimitedList', 'dictOf', 'downcaseTokens', 'empty', 'hexnums', +'htmlComment', 'javaStyleComment', 'line', 'lineEnd', 'lineStart', 'lineno', +'makeHTMLTags', 'makeXMLTags', 'matchOnlyAtCol', 'matchPreviousExpr', 'matchPreviousLiteral', +'nestedExpr', 'nullDebugAction', 'nums', 'oneOf', 'opAssoc', 'operatorPrecedence', 'printables', +'punc8bit', 'pythonStyleComment', 'quotedString', 'removeQuotes', 'replaceHTMLEntity', +'replaceWith', 'restOfLine', 'sglQuotedString', 'srange', 'stringEnd', +'stringStart', 'traceParseAction', 'unicodeString', 'upcaseTokens', 'withAttribute', +'indentedBlock', 'originalTextFor', 'ungroup', 'infixNotation','locatedExpr', 'withClass', +'CloseMatch', 'tokenMap', 'pyparsing_common', +] + +system_version = tuple(sys.version_info)[:3] +PY_3 = system_version[0] == 3 +if PY_3: + _MAX_INT = sys.maxsize + basestring = str + unichr = chr + _ustr = str + + # build list of single arg builtins, that can be used as parse actions + singleArgBuiltins = [sum, len, sorted, reversed, list, tuple, set, any, all, min, max] + +else: + _MAX_INT = sys.maxint + range = xrange + + def _ustr(obj): + """Drop-in replacement for str(obj) that tries to be Unicode friendly. It first tries + str(obj). If that fails with a UnicodeEncodeError, then it tries unicode(obj). It + then < returns the unicode object | encodes it with the default encoding | ... >. + """ + if isinstance(obj,unicode): + return obj + + try: + # If this works, then _ustr(obj) has the same behaviour as str(obj), so + # it won't break any existing code. + return str(obj) + + except UnicodeEncodeError: + # Else encode it + ret = unicode(obj).encode(sys.getdefaultencoding(), 'xmlcharrefreplace') + xmlcharref = Regex('&#\d+;') + xmlcharref.setParseAction(lambda t: '\\u' + hex(int(t[0][2:-1]))[2:]) + return xmlcharref.transformString(ret) + + # build list of single arg builtins, tolerant of Python version, that can be used as parse actions + singleArgBuiltins = [] + import __builtin__ + for fname in "sum len sorted reversed list tuple set any all min max".split(): + try: + singleArgBuiltins.append(getattr(__builtin__,fname)) + except AttributeError: + continue + +_generatorType = type((y for y in range(1))) + +def _xml_escape(data): + """Escape &, <, >, ", ', etc. in a string of data.""" + + # ampersand must be replaced first + from_symbols = '&><"\'' + to_symbols = ('&'+s+';' for s in "amp gt lt quot apos".split()) + for from_,to_ in zip(from_symbols, to_symbols): + data = data.replace(from_, to_) + return data + +class _Constants(object): + pass + +alphas = string.ascii_uppercase + string.ascii_lowercase +nums = "0123456789" +hexnums = nums + "ABCDEFabcdef" +alphanums = alphas + nums +_bslash = chr(92) +printables = "".join(c for c in string.printable if c not in string.whitespace) + +class ParseBaseException(Exception): + """base exception class for all parsing runtime exceptions""" + # Performance tuning: we construct a *lot* of these, so keep this + # constructor as small and fast as possible + def __init__( self, pstr, loc=0, msg=None, elem=None ): + self.loc = loc + if msg is None: + self.msg = pstr + self.pstr = "" + else: + self.msg = msg + self.pstr = pstr + self.parserElement = elem + self.args = (pstr, loc, msg) + + @classmethod + def _from_exception(cls, pe): + """ + internal factory method to simplify creating one type of ParseException + from another - avoids having __init__ signature conflicts among subclasses + """ + return cls(pe.pstr, pe.loc, pe.msg, pe.parserElement) + + def __getattr__( self, aname ): + """supported attributes by name are: + - lineno - returns the line number of the exception text + - col - returns the column number of the exception text + - line - returns the line containing the exception text + """ + if( aname == "lineno" ): + return lineno( self.loc, self.pstr ) + elif( aname in ("col", "column") ): + return col( self.loc, self.pstr ) + elif( aname == "line" ): + return line( self.loc, self.pstr ) + else: + raise AttributeError(aname) + + def __str__( self ): + return "%s (at char %d), (line:%d, col:%d)" % \ + ( self.msg, self.loc, self.lineno, self.column ) + def __repr__( self ): + return _ustr(self) + def markInputline( self, markerString = ">!<" ): + """Extracts the exception line from the input string, and marks + the location of the exception with a special symbol. + """ + line_str = self.line + line_column = self.column - 1 + if markerString: + line_str = "".join((line_str[:line_column], + markerString, line_str[line_column:])) + return line_str.strip() + def __dir__(self): + return "lineno col line".split() + dir(type(self)) + +class ParseException(ParseBaseException): + """ + Exception thrown when parse expressions don't match class; + supported attributes by name are: + - lineno - returns the line number of the exception text + - col - returns the column number of the exception text + - line - returns the line containing the exception text + + Example:: + try: + Word(nums).setName("integer").parseString("ABC") + except ParseException as pe: + print(pe) + print("column: {}".format(pe.col)) + + prints:: + Expected integer (at char 0), (line:1, col:1) + column: 1 + """ + pass + +class ParseFatalException(ParseBaseException): + """user-throwable exception thrown when inconsistent parse content + is found; stops all parsing immediately""" + pass + +class ParseSyntaxException(ParseFatalException): + """just like L{ParseFatalException}, but thrown internally when an + L{ErrorStop<And._ErrorStop>} ('-' operator) indicates that parsing is to stop + immediately because an unbacktrackable syntax error has been found""" + pass + +#~ class ReparseException(ParseBaseException): + #~ """Experimental class - parse actions can raise this exception to cause + #~ pyparsing to reparse the input string: + #~ - with a modified input string, and/or + #~ - with a modified start location + #~ Set the values of the ReparseException in the constructor, and raise the + #~ exception in a parse action to cause pyparsing to use the new string/location. + #~ Setting the values as None causes no change to be made. + #~ """ + #~ def __init_( self, newstring, restartLoc ): + #~ self.newParseText = newstring + #~ self.reparseLoc = restartLoc + +class RecursiveGrammarException(Exception): + """exception thrown by L{ParserElement.validate} if the grammar could be improperly recursive""" + def __init__( self, parseElementList ): + self.parseElementTrace = parseElementList + + def __str__( self ): + return "RecursiveGrammarException: %s" % self.parseElementTrace + +class _ParseResultsWithOffset(object): + def __init__(self,p1,p2): + self.tup = (p1,p2) + def __getitem__(self,i): + return self.tup[i] + def __repr__(self): + return repr(self.tup[0]) + def setOffset(self,i): + self.tup = (self.tup[0],i) + +class ParseResults(object): + """ + Structured parse results, to provide multiple means of access to the parsed data: + - as a list (C{len(results)}) + - by list index (C{results[0], results[1]}, etc.) + - by attribute (C{results.<resultsName>} - see L{ParserElement.setResultsName}) + + Example:: + integer = Word(nums) + date_str = (integer.setResultsName("year") + '/' + + integer.setResultsName("month") + '/' + + integer.setResultsName("day")) + # equivalent form: + # date_str = integer("year") + '/' + integer("month") + '/' + integer("day") + + # parseString returns a ParseResults object + result = date_str.parseString("1999/12/31") + + def test(s, fn=repr): + print("%s -> %s" % (s, fn(eval(s)))) + test("list(result)") + test("result[0]") + test("result['month']") + test("result.day") + test("'month' in result") + test("'minutes' in result") + test("result.dump()", str) + prints:: + list(result) -> ['1999', '/', '12', '/', '31'] + result[0] -> '1999' + result['month'] -> '12' + result.day -> '31' + 'month' in result -> True + 'minutes' in result -> False + result.dump() -> ['1999', '/', '12', '/', '31'] + - day: 31 + - month: 12 + - year: 1999 + """ + def __new__(cls, toklist=None, name=None, asList=True, modal=True ): + if isinstance(toklist, cls): + return toklist + retobj = object.__new__(cls) + retobj.__doinit = True + return retobj + + # Performance tuning: we construct a *lot* of these, so keep this + # constructor as small and fast as possible + def __init__( self, toklist=None, name=None, asList=True, modal=True, isinstance=isinstance ): + if self.__doinit: + self.__doinit = False + self.__name = None + self.__parent = None + self.__accumNames = {} + self.__asList = asList + self.__modal = modal + if toklist is None: + toklist = [] + if isinstance(toklist, list): + self.__toklist = toklist[:] + elif isinstance(toklist, _generatorType): + self.__toklist = list(toklist) + else: + self.__toklist = [toklist] + self.__tokdict = dict() + + if name is not None and name: + if not modal: + self.__accumNames[name] = 0 + if isinstance(name,int): + name = _ustr(name) # will always return a str, but use _ustr for consistency + self.__name = name + if not (isinstance(toklist, (type(None), basestring, list)) and toklist in (None,'',[])): + if isinstance(toklist,basestring): + toklist = [ toklist ] + if asList: + if isinstance(toklist,ParseResults): + self[name] = _ParseResultsWithOffset(toklist.copy(),0) + else: + self[name] = _ParseResultsWithOffset(ParseResults(toklist[0]),0) + self[name].__name = name + else: + try: + self[name] = toklist[0] + except (KeyError,TypeError,IndexError): + self[name] = toklist + + def __getitem__( self, i ): + if isinstance( i, (int,slice) ): + return self.__toklist[i] + else: + if i not in self.__accumNames: + return self.__tokdict[i][-1][0] + else: + return ParseResults([ v[0] for v in self.__tokdict[i] ]) + + def __setitem__( self, k, v, isinstance=isinstance ): + if isinstance(v,_ParseResultsWithOffset): + self.__tokdict[k] = self.__tokdict.get(k,list()) + [v] + sub = v[0] + elif isinstance(k,(int,slice)): + self.__toklist[k] = v + sub = v + else: + self.__tokdict[k] = self.__tokdict.get(k,list()) + [_ParseResultsWithOffset(v,0)] + sub = v + if isinstance(sub,ParseResults): + sub.__parent = wkref(self) + + def __delitem__( self, i ): + if isinstance(i,(int,slice)): + mylen = len( self.__toklist ) + del self.__toklist[i] + + # convert int to slice + if isinstance(i, int): + if i < 0: + i += mylen + i = slice(i, i+1) + # get removed indices + removed = list(range(*i.indices(mylen))) + removed.reverse() + # fixup indices in token dictionary + for name,occurrences in self.__tokdict.items(): + for j in removed: + for k, (value, position) in enumerate(occurrences): + occurrences[k] = _ParseResultsWithOffset(value, position - (position > j)) + else: + del self.__tokdict[i] + + def __contains__( self, k ): + return k in self.__tokdict + + def __len__( self ): return len( self.__toklist ) + def __bool__(self): return ( not not self.__toklist ) + __nonzero__ = __bool__ + def __iter__( self ): return iter( self.__toklist ) + def __reversed__( self ): return iter( self.__toklist[::-1] ) + def _iterkeys( self ): + if hasattr(self.__tokdict, "iterkeys"): + return self.__tokdict.iterkeys() + else: + return iter(self.__tokdict) + + def _itervalues( self ): + return (self[k] for k in self._iterkeys()) + + def _iteritems( self ): + return ((k, self[k]) for k in self._iterkeys()) + + if PY_3: + keys = _iterkeys + """Returns an iterator of all named result keys (Python 3.x only).""" + + values = _itervalues + """Returns an iterator of all named result values (Python 3.x only).""" + + items = _iteritems + """Returns an iterator of all named result key-value tuples (Python 3.x only).""" + + else: + iterkeys = _iterkeys + """Returns an iterator of all named result keys (Python 2.x only).""" + + itervalues = _itervalues + """Returns an iterator of all named result values (Python 2.x only).""" + + iteritems = _iteritems + """Returns an iterator of all named result key-value tuples (Python 2.x only).""" + + def keys( self ): + """Returns all named result keys (as a list in Python 2.x, as an iterator in Python 3.x).""" + return list(self.iterkeys()) + + def values( self ): + """Returns all named result values (as a list in Python 2.x, as an iterator in Python 3.x).""" + return list(self.itervalues()) + + def items( self ): + """Returns all named result key-values (as a list of tuples in Python 2.x, as an iterator in Python 3.x).""" + return list(self.iteritems()) + + def haskeys( self ): + """Since keys() returns an iterator, this method is helpful in bypassing + code that looks for the existence of any defined results names.""" + return bool(self.__tokdict) + + def pop( self, *args, **kwargs): + """ + Removes and returns item at specified index (default=C{last}). + Supports both C{list} and C{dict} semantics for C{pop()}. If passed no + argument or an integer argument, it will use C{list} semantics + and pop tokens from the list of parsed tokens. If passed a + non-integer argument (most likely a string), it will use C{dict} + semantics and pop the corresponding value from any defined + results names. A second default return value argument is + supported, just as in C{dict.pop()}. + + Example:: + def remove_first(tokens): + tokens.pop(0) + print(OneOrMore(Word(nums)).parseString("0 123 321")) # -> ['0', '123', '321'] + print(OneOrMore(Word(nums)).addParseAction(remove_first).parseString("0 123 321")) # -> ['123', '321'] + + label = Word(alphas) + patt = label("LABEL") + OneOrMore(Word(nums)) + print(patt.parseString("AAB 123 321").dump()) + + # Use pop() in a parse action to remove named result (note that corresponding value is not + # removed from list form of results) + def remove_LABEL(tokens): + tokens.pop("LABEL") + return tokens + patt.addParseAction(remove_LABEL) + print(patt.parseString("AAB 123 321").dump()) + prints:: + ['AAB', '123', '321'] + - LABEL: AAB + + ['AAB', '123', '321'] + """ + if not args: + args = [-1] + for k,v in kwargs.items(): + if k == 'default': + args = (args[0], v) + else: + raise TypeError("pop() got an unexpected keyword argument '%s'" % k) + if (isinstance(args[0], int) or + len(args) == 1 or + args[0] in self): + index = args[0] + ret = self[index] + del self[index] + return ret + else: + defaultvalue = args[1] + return defaultvalue + + def get(self, key, defaultValue=None): + """ + Returns named result matching the given key, or if there is no + such name, then returns the given C{defaultValue} or C{None} if no + C{defaultValue} is specified. + + Similar to C{dict.get()}. + + Example:: + integer = Word(nums) + date_str = integer("year") + '/' + integer("month") + '/' + integer("day") + + result = date_str.parseString("1999/12/31") + print(result.get("year")) # -> '1999' + print(result.get("hour", "not specified")) # -> 'not specified' + print(result.get("hour")) # -> None + """ + if key in self: + return self[key] + else: + return defaultValue + + def insert( self, index, insStr ): + """ + Inserts new element at location index in the list of parsed tokens. + + Similar to C{list.insert()}. + + Example:: + print(OneOrMore(Word(nums)).parseString("0 123 321")) # -> ['0', '123', '321'] + + # use a parse action to insert the parse location in the front of the parsed results + def insert_locn(locn, tokens): + tokens.insert(0, locn) + print(OneOrMore(Word(nums)).addParseAction(insert_locn).parseString("0 123 321")) # -> [0, '0', '123', '321'] + """ + self.__toklist.insert(index, insStr) + # fixup indices in token dictionary + for name,occurrences in self.__tokdict.items(): + for k, (value, position) in enumerate(occurrences): + occurrences[k] = _ParseResultsWithOffset(value, position + (position > index)) + + def append( self, item ): + """ + Add single element to end of ParseResults list of elements. + + Example:: + print(OneOrMore(Word(nums)).parseString("0 123 321")) # -> ['0', '123', '321'] + + # use a parse action to compute the sum of the parsed integers, and add it to the end + def append_sum(tokens): + tokens.append(sum(map(int, tokens))) + print(OneOrMore(Word(nums)).addParseAction(append_sum).parseString("0 123 321")) # -> ['0', '123', '321', 444] + """ + self.__toklist.append(item) + + def extend( self, itemseq ): + """ + Add sequence of elements to end of ParseResults list of elements. + + Example:: + patt = OneOrMore(Word(alphas)) + + # use a parse action to append the reverse of the matched strings, to make a palindrome + def make_palindrome(tokens): + tokens.extend(reversed([t[::-1] for t in tokens])) + return ''.join(tokens) + print(patt.addParseAction(make_palindrome).parseString("lskdj sdlkjf lksd")) # -> 'lskdjsdlkjflksddsklfjkldsjdksl' + """ + if isinstance(itemseq, ParseResults): + self += itemseq + else: + self.__toklist.extend(itemseq) + + def clear( self ): + """ + Clear all elements and results names. + """ + del self.__toklist[:] + self.__tokdict.clear() + + def __getattr__( self, name ): + try: + return self[name] + except KeyError: + return "" + + if name in self.__tokdict: + if name not in self.__accumNames: + return self.__tokdict[name][-1][0] + else: + return ParseResults([ v[0] for v in self.__tokdict[name] ]) + else: + return "" + + def __add__( self, other ): + ret = self.copy() + ret += other + return ret + + def __iadd__( self, other ): + if other.__tokdict: + offset = len(self.__toklist) + addoffset = lambda a: offset if a<0 else a+offset + otheritems = other.__tokdict.items() + otherdictitems = [(k, _ParseResultsWithOffset(v[0],addoffset(v[1])) ) + for (k,vlist) in otheritems for v in vlist] + for k,v in otherdictitems: + self[k] = v + if isinstance(v[0],ParseResults): + v[0].__parent = wkref(self) + + self.__toklist += other.__toklist + self.__accumNames.update( other.__accumNames ) + return self + + def __radd__(self, other): + if isinstance(other,int) and other == 0: + # useful for merging many ParseResults using sum() builtin + return self.copy() + else: + # this may raise a TypeError - so be it + return other + self + + def __repr__( self ): + return "(%s, %s)" % ( repr( self.__toklist ), repr( self.__tokdict ) ) + + def __str__( self ): + return '[' + ', '.join(_ustr(i) if isinstance(i, ParseResults) else repr(i) for i in self.__toklist) + ']' + + def _asStringList( self, sep='' ): + out = [] + for item in self.__toklist: + if out and sep: + out.append(sep) + if isinstance( item, ParseResults ): + out += item._asStringList() + else: + out.append( _ustr(item) ) + return out + + def asList( self ): + """ + Returns the parse results as a nested list of matching tokens, all converted to strings. + + Example:: + patt = OneOrMore(Word(alphas)) + result = patt.parseString("sldkj lsdkj sldkj") + # even though the result prints in string-like form, it is actually a pyparsing ParseResults + print(type(result), result) # -> <class 'pyparsing.ParseResults'> ['sldkj', 'lsdkj', 'sldkj'] + + # Use asList() to create an actual list + result_list = result.asList() + print(type(result_list), result_list) # -> <class 'list'> ['sldkj', 'lsdkj', 'sldkj'] + """ + return [res.asList() if isinstance(res,ParseResults) else res for res in self.__toklist] + + def asDict( self ): + """ + Returns the named parse results as a nested dictionary. + + Example:: + integer = Word(nums) + date_str = integer("year") + '/' + integer("month") + '/' + integer("day") + + result = date_str.parseString('12/31/1999') + print(type(result), repr(result)) # -> <class 'pyparsing.ParseResults'> (['12', '/', '31', '/', '1999'], {'day': [('1999', 4)], 'year': [('12', 0)], 'month': [('31', 2)]}) + + result_dict = result.asDict() + print(type(result_dict), repr(result_dict)) # -> <class 'dict'> {'day': '1999', 'year': '12', 'month': '31'} + + # even though a ParseResults supports dict-like access, sometime you just need to have a dict + import json + print(json.dumps(result)) # -> Exception: TypeError: ... is not JSON serializable + print(json.dumps(result.asDict())) # -> {"month": "31", "day": "1999", "year": "12"} + """ + if PY_3: + item_fn = self.items + else: + item_fn = self.iteritems + + def toItem(obj): + if isinstance(obj, ParseResults): + if obj.haskeys(): + return obj.asDict() + else: + return [toItem(v) for v in obj] + else: + return obj + + return dict((k,toItem(v)) for k,v in item_fn()) + + def copy( self ): + """ + Returns a new copy of a C{ParseResults} object. + """ + ret = ParseResults( self.__toklist ) + ret.__tokdict = self.__tokdict.copy() + ret.__parent = self.__parent + ret.__accumNames.update( self.__accumNames ) + ret.__name = self.__name + return ret + + def asXML( self, doctag=None, namedItemsOnly=False, indent="", formatted=True ): + """ + (Deprecated) Returns the parse results as XML. Tags are created for tokens and lists that have defined results names. + """ + nl = "\n" + out = [] + namedItems = dict((v[1],k) for (k,vlist) in self.__tokdict.items() + for v in vlist) + nextLevelIndent = indent + " " + + # collapse out indents if formatting is not desired + if not formatted: + indent = "" + nextLevelIndent = "" + nl = "" + + selfTag = None + if doctag is not None: + selfTag = doctag + else: + if self.__name: + selfTag = self.__name + + if not selfTag: + if namedItemsOnly: + return "" + else: + selfTag = "ITEM" + + out += [ nl, indent, "<", selfTag, ">" ] + + for i,res in enumerate(self.__toklist): + if isinstance(res,ParseResults): + if i in namedItems: + out += [ res.asXML(namedItems[i], + namedItemsOnly and doctag is None, + nextLevelIndent, + formatted)] + else: + out += [ res.asXML(None, + namedItemsOnly and doctag is None, + nextLevelIndent, + formatted)] + else: + # individual token, see if there is a name for it + resTag = None + if i in namedItems: + resTag = namedItems[i] + if not resTag: + if namedItemsOnly: + continue + else: + resTag = "ITEM" + xmlBodyText = _xml_escape(_ustr(res)) + out += [ nl, nextLevelIndent, "<", resTag, ">", + xmlBodyText, + "</", resTag, ">" ] + + out += [ nl, indent, "</", selfTag, ">" ] + return "".join(out) + + def __lookup(self,sub): + for k,vlist in self.__tokdict.items(): + for v,loc in vlist: + if sub is v: + return k + return None + + def getName(self): + """ + Returns the results name for this token expression. Useful when several + different expressions might match at a particular location. + + Example:: + integer = Word(nums) + ssn_expr = Regex(r"\d\d\d-\d\d-\d\d\d\d") + house_number_expr = Suppress('#') + Word(nums, alphanums) + user_data = (Group(house_number_expr)("house_number") + | Group(ssn_expr)("ssn") + | Group(integer)("age")) + user_info = OneOrMore(user_data) + + result = user_info.parseString("22 111-22-3333 #221B") + for item in result: + print(item.getName(), ':', item[0]) + prints:: + age : 22 + ssn : 111-22-3333 + house_number : 221B + """ + if self.__name: + return self.__name + elif self.__parent: + par = self.__parent() + if par: + return par.__lookup(self) + else: + return None + elif (len(self) == 1 and + len(self.__tokdict) == 1 and + next(iter(self.__tokdict.values()))[0][1] in (0,-1)): + return next(iter(self.__tokdict.keys())) + else: + return None + + def dump(self, indent='', depth=0, full=True): + """ + Diagnostic method for listing out the contents of a C{ParseResults}. + Accepts an optional C{indent} argument so that this string can be embedded + in a nested display of other data. + + Example:: + integer = Word(nums) + date_str = integer("year") + '/' + integer("month") + '/' + integer("day") + + result = date_str.parseString('12/31/1999') + print(result.dump()) + prints:: + ['12', '/', '31', '/', '1999'] + - day: 1999 + - month: 31 + - year: 12 + """ + out = [] + NL = '\n' + out.append( indent+_ustr(self.asList()) ) + if full: + if self.haskeys(): + items = sorted((str(k), v) for k,v in self.items()) + for k,v in items: + if out: + out.append(NL) + out.append( "%s%s- %s: " % (indent,(' '*depth), k) ) + if isinstance(v,ParseResults): + if v: + out.append( v.dump(indent,depth+1) ) + else: + out.append(_ustr(v)) + else: + out.append(repr(v)) + elif any(isinstance(vv,ParseResults) for vv in self): + v = self + for i,vv in enumerate(v): + if isinstance(vv,ParseResults): + out.append("\n%s%s[%d]:\n%s%s%s" % (indent,(' '*(depth)),i,indent,(' '*(depth+1)),vv.dump(indent,depth+1) )) + else: + out.append("\n%s%s[%d]:\n%s%s%s" % (indent,(' '*(depth)),i,indent,(' '*(depth+1)),_ustr(vv))) + + return "".join(out) + + def pprint(self, *args, **kwargs): + """ + Pretty-printer for parsed results as a list, using the C{pprint} module. + Accepts additional positional or keyword args as defined for the + C{pprint.pprint} method. (U{http://docs.python.org/3/library/pprint.html#pprint.pprint}) + + Example:: + ident = Word(alphas, alphanums) + num = Word(nums) + func = Forward() + term = ident | num | Group('(' + func + ')') + func <<= ident + Group(Optional(delimitedList(term))) + result = func.parseString("fna a,b,(fnb c,d,200),100") + result.pprint(width=40) + prints:: + ['fna', + ['a', + 'b', + ['(', 'fnb', ['c', 'd', '200'], ')'], + '100']] + """ + pprint.pprint(self.asList(), *args, **kwargs) + + # add support for pickle protocol + def __getstate__(self): + return ( self.__toklist, + ( self.__tokdict.copy(), + self.__parent is not None and self.__parent() or None, + self.__accumNames, + self.__name ) ) + + def __setstate__(self,state): + self.__toklist = state[0] + (self.__tokdict, + par, + inAccumNames, + self.__name) = state[1] + self.__accumNames = {} + self.__accumNames.update(inAccumNames) + if par is not None: + self.__parent = wkref(par) + else: + self.__parent = None + + def __getnewargs__(self): + return self.__toklist, self.__name, self.__asList, self.__modal + + def __dir__(self): + return (dir(type(self)) + list(self.keys())) + +collections.MutableMapping.register(ParseResults) + +def col (loc,strg): + """Returns current column within a string, counting newlines as line separators. + The first column is number 1. + + Note: the default parsing behavior is to expand tabs in the input string + before starting the parsing process. See L{I{ParserElement.parseString}<ParserElement.parseString>} for more information + on parsing strings containing C{<TAB>}s, and suggested methods to maintain a + consistent view of the parsed string, the parse location, and line and column + positions within the parsed string. + """ + s = strg + return 1 if 0<loc<len(s) and s[loc-1] == '\n' else loc - s.rfind("\n", 0, loc) + +def lineno(loc,strg): + """Returns current line number within a string, counting newlines as line separators. + The first line is number 1. + + Note: the default parsing behavior is to expand tabs in the input string + before starting the parsing process. See L{I{ParserElement.parseString}<ParserElement.parseString>} for more information + on parsing strings containing C{<TAB>}s, and suggested methods to maintain a + consistent view of the parsed string, the parse location, and line and column + positions within the parsed string. + """ + return strg.count("\n",0,loc) + 1 + +def line( loc, strg ): + """Returns the line of text containing loc within a string, counting newlines as line separators. + """ + lastCR = strg.rfind("\n", 0, loc) + nextCR = strg.find("\n", loc) + if nextCR >= 0: + return strg[lastCR+1:nextCR] + else: + return strg[lastCR+1:] + +def _defaultStartDebugAction( instring, loc, expr ): + print (("Match " + _ustr(expr) + " at loc " + _ustr(loc) + "(%d,%d)" % ( lineno(loc,instring), col(loc,instring) ))) + +def _defaultSuccessDebugAction( instring, startloc, endloc, expr, toks ): + print ("Matched " + _ustr(expr) + " -> " + str(toks.asList())) + +def _defaultExceptionDebugAction( instring, loc, expr, exc ): + print ("Exception raised:" + _ustr(exc)) + +def nullDebugAction(*args): + """'Do-nothing' debug action, to suppress debugging output during parsing.""" + pass + +# Only works on Python 3.x - nonlocal is toxic to Python 2 installs +#~ 'decorator to trim function calls to match the arity of the target' +#~ def _trim_arity(func, maxargs=3): + #~ if func in singleArgBuiltins: + #~ return lambda s,l,t: func(t) + #~ limit = 0 + #~ foundArity = False + #~ def wrapper(*args): + #~ nonlocal limit,foundArity + #~ while 1: + #~ try: + #~ ret = func(*args[limit:]) + #~ foundArity = True + #~ return ret + #~ except TypeError: + #~ if limit == maxargs or foundArity: + #~ raise + #~ limit += 1 + #~ continue + #~ return wrapper + +# this version is Python 2.x-3.x cross-compatible +'decorator to trim function calls to match the arity of the target' +def _trim_arity(func, maxargs=2): + if func in singleArgBuiltins: + return lambda s,l,t: func(t) + limit = [0] + foundArity = [False] + + # traceback return data structure changed in Py3.5 - normalize back to plain tuples + if system_version[:2] >= (3,5): + def extract_stack(limit=0): + # special handling for Python 3.5.0 - extra deep call stack by 1 + offset = -3 if system_version == (3,5,0) else -2 + frame_summary = traceback.extract_stack(limit=-offset+limit-1)[offset] + return [(frame_summary.filename, frame_summary.lineno)] + def extract_tb(tb, limit=0): + frames = traceback.extract_tb(tb, limit=limit) + frame_summary = frames[-1] + return [(frame_summary.filename, frame_summary.lineno)] + else: + extract_stack = traceback.extract_stack + extract_tb = traceback.extract_tb + + # synthesize what would be returned by traceback.extract_stack at the call to + # user's parse action 'func', so that we don't incur call penalty at parse time + + LINE_DIFF = 6 + # IF ANY CODE CHANGES, EVEN JUST COMMENTS OR BLANK LINES, BETWEEN THE NEXT LINE AND + # THE CALL TO FUNC INSIDE WRAPPER, LINE_DIFF MUST BE MODIFIED!!!! + this_line = extract_stack(limit=2)[-1] + pa_call_line_synth = (this_line[0], this_line[1]+LINE_DIFF) + + def wrapper(*args): + while 1: + try: + ret = func(*args[limit[0]:]) + foundArity[0] = True + return ret + except TypeError: + # re-raise TypeErrors if they did not come from our arity testing + if foundArity[0]: + raise + else: + try: + tb = sys.exc_info()[-1] + if not extract_tb(tb, limit=2)[-1][:2] == pa_call_line_synth: + raise + finally: + del tb + + if limit[0] <= maxargs: + limit[0] += 1 + continue + raise + + # copy func name to wrapper for sensible debug output + func_name = "<parse action>" + try: + func_name = getattr(func, '__name__', + getattr(func, '__class__').__name__) + except Exception: + func_name = str(func) + wrapper.__name__ = func_name + + return wrapper + +class ParserElement(object): + """Abstract base level parser element class.""" + DEFAULT_WHITE_CHARS = " \n\t\r" + verbose_stacktrace = False + + @staticmethod + def setDefaultWhitespaceChars( chars ): + r""" + Overrides the default whitespace chars + + Example:: + # default whitespace chars are space, <TAB> and newline + OneOrMore(Word(alphas)).parseString("abc def\nghi jkl") # -> ['abc', 'def', 'ghi', 'jkl'] + + # change to just treat newline as significant + ParserElement.setDefaultWhitespaceChars(" \t") + OneOrMore(Word(alphas)).parseString("abc def\nghi jkl") # -> ['abc', 'def'] + """ + ParserElement.DEFAULT_WHITE_CHARS = chars + + @staticmethod + def inlineLiteralsUsing(cls): + """ + Set class to be used for inclusion of string literals into a parser. + + Example:: + # default literal class used is Literal + integer = Word(nums) + date_str = integer("year") + '/' + integer("month") + '/' + integer("day") + + date_str.parseString("1999/12/31") # -> ['1999', '/', '12', '/', '31'] + + + # change to Suppress + ParserElement.inlineLiteralsUsing(Suppress) + date_str = integer("year") + '/' + integer("month") + '/' + integer("day") + + date_str.parseString("1999/12/31") # -> ['1999', '12', '31'] + """ + ParserElement._literalStringClass = cls + + def __init__( self, savelist=False ): + self.parseAction = list() + self.failAction = None + #~ self.name = "<unknown>" # don't define self.name, let subclasses try/except upcall + self.strRepr = None + self.resultsName = None + self.saveAsList = savelist + self.skipWhitespace = True + self.whiteChars = ParserElement.DEFAULT_WHITE_CHARS + self.copyDefaultWhiteChars = True + self.mayReturnEmpty = False # used when checking for left-recursion + self.keepTabs = False + self.ignoreExprs = list() + self.debug = False + self.streamlined = False + self.mayIndexError = True # used to optimize exception handling for subclasses that don't advance parse index + self.errmsg = "" + self.modalResults = True # used to mark results names as modal (report only last) or cumulative (list all) + self.debugActions = ( None, None, None ) #custom debug actions + self.re = None + self.callPreparse = True # used to avoid redundant calls to preParse + self.callDuringTry = False + + def copy( self ): + """ + Make a copy of this C{ParserElement}. Useful for defining different parse actions + for the same parsing pattern, using copies of the original parse element. + + Example:: + integer = Word(nums).setParseAction(lambda toks: int(toks[0])) + integerK = integer.copy().addParseAction(lambda toks: toks[0]*1024) + Suppress("K") + integerM = integer.copy().addParseAction(lambda toks: toks[0]*1024*1024) + Suppress("M") + + print(OneOrMore(integerK | integerM | integer).parseString("5K 100 640K 256M")) + prints:: + [5120, 100, 655360, 268435456] + Equivalent form of C{expr.copy()} is just C{expr()}:: + integerM = integer().addParseAction(lambda toks: toks[0]*1024*1024) + Suppress("M") + """ + cpy = copy.copy( self ) + cpy.parseAction = self.parseAction[:] + cpy.ignoreExprs = self.ignoreExprs[:] + if self.copyDefaultWhiteChars: + cpy.whiteChars = ParserElement.DEFAULT_WHITE_CHARS + return cpy + + def setName( self, name ): + """ + Define name for this expression, makes debugging and exception messages clearer. + + Example:: + Word(nums).parseString("ABC") # -> Exception: Expected W:(0123...) (at char 0), (line:1, col:1) + Word(nums).setName("integer").parseString("ABC") # -> Exception: Expected integer (at char 0), (line:1, col:1) + """ + self.name = name + self.errmsg = "Expected " + self.name + if hasattr(self,"exception"): + self.exception.msg = self.errmsg + return self + + def setResultsName( self, name, listAllMatches=False ): + """ + Define name for referencing matching tokens as a nested attribute + of the returned parse results. + NOTE: this returns a *copy* of the original C{ParserElement} object; + this is so that the client can define a basic element, such as an + integer, and reference it in multiple places with different names. + + You can also set results names using the abbreviated syntax, + C{expr("name")} in place of C{expr.setResultsName("name")} - + see L{I{__call__}<__call__>}. + + Example:: + date_str = (integer.setResultsName("year") + '/' + + integer.setResultsName("month") + '/' + + integer.setResultsName("day")) + + # equivalent form: + date_str = integer("year") + '/' + integer("month") + '/' + integer("day") + """ + newself = self.copy() + if name.endswith("*"): + name = name[:-1] + listAllMatches=True + newself.resultsName = name + newself.modalResults = not listAllMatches + return newself + + def setBreak(self,breakFlag = True): + """Method to invoke the Python pdb debugger when this element is + about to be parsed. Set C{breakFlag} to True to enable, False to + disable. + """ + if breakFlag: + _parseMethod = self._parse + def breaker(instring, loc, doActions=True, callPreParse=True): + import pdb + pdb.set_trace() + return _parseMethod( instring, loc, doActions, callPreParse ) + breaker._originalParseMethod = _parseMethod + self._parse = breaker + else: + if hasattr(self._parse,"_originalParseMethod"): + self._parse = self._parse._originalParseMethod + return self + + def setParseAction( self, *fns, **kwargs ): + """ + Define action to perform when successfully matching parse element definition. + Parse action fn is a callable method with 0-3 arguments, called as C{fn(s,loc,toks)}, + C{fn(loc,toks)}, C{fn(toks)}, or just C{fn()}, where: + - s = the original string being parsed (see note below) + - loc = the location of the matching substring + - toks = a list of the matched tokens, packaged as a C{L{ParseResults}} object + If the functions in fns modify the tokens, they can return them as the return + value from fn, and the modified list of tokens will replace the original. + Otherwise, fn does not need to return any value. + + Optional keyword arguments: + - callDuringTry = (default=C{False}) indicate if parse action should be run during lookaheads and alternate testing + + Note: the default parsing behavior is to expand tabs in the input string + before starting the parsing process. See L{I{parseString}<parseString>} for more information + on parsing strings containing C{<TAB>}s, and suggested methods to maintain a + consistent view of the parsed string, the parse location, and line and column + positions within the parsed string. + + Example:: + integer = Word(nums) + date_str = integer + '/' + integer + '/' + integer + + date_str.parseString("1999/12/31") # -> ['1999', '/', '12', '/', '31'] + + # use parse action to convert to ints at parse time + integer = Word(nums).setParseAction(lambda toks: int(toks[0])) + date_str = integer + '/' + integer + '/' + integer + + # note that integer fields are now ints, not strings + date_str.parseString("1999/12/31") # -> [1999, '/', 12, '/', 31] + """ + self.parseAction = list(map(_trim_arity, list(fns))) + self.callDuringTry = kwargs.get("callDuringTry", False) + return self + + def addParseAction( self, *fns, **kwargs ): + """ + Add parse action to expression's list of parse actions. See L{I{setParseAction}<setParseAction>}. + + See examples in L{I{copy}<copy>}. + """ + self.parseAction += list(map(_trim_arity, list(fns))) + self.callDuringTry = self.callDuringTry or kwargs.get("callDuringTry", False) + return self + + def addCondition(self, *fns, **kwargs): + """Add a boolean predicate function to expression's list of parse actions. See + L{I{setParseAction}<setParseAction>} for function call signatures. Unlike C{setParseAction}, + functions passed to C{addCondition} need to return boolean success/fail of the condition. + + Optional keyword arguments: + - message = define a custom message to be used in the raised exception + - fatal = if True, will raise ParseFatalException to stop parsing immediately; otherwise will raise ParseException + + Example:: + integer = Word(nums).setParseAction(lambda toks: int(toks[0])) + year_int = integer.copy() + year_int.addCondition(lambda toks: toks[0] >= 2000, message="Only support years 2000 and later") + date_str = year_int + '/' + integer + '/' + integer + + result = date_str.parseString("1999/12/31") # -> Exception: Only support years 2000 and later (at char 0), (line:1, col:1) + """ + msg = kwargs.get("message", "failed user-defined condition") + exc_type = ParseFatalException if kwargs.get("fatal", False) else ParseException + for fn in fns: + def pa(s,l,t): + if not bool(_trim_arity(fn)(s,l,t)): + raise exc_type(s,l,msg) + self.parseAction.append(pa) + self.callDuringTry = self.callDuringTry or kwargs.get("callDuringTry", False) + return self + + def setFailAction( self, fn ): + """Define action to perform if parsing fails at this expression. + Fail acton fn is a callable function that takes the arguments + C{fn(s,loc,expr,err)} where: + - s = string being parsed + - loc = location where expression match was attempted and failed + - expr = the parse expression that failed + - err = the exception thrown + The function returns no value. It may throw C{L{ParseFatalException}} + if it is desired to stop parsing immediately.""" + self.failAction = fn + return self + + def _skipIgnorables( self, instring, loc ): + exprsFound = True + while exprsFound: + exprsFound = False + for e in self.ignoreExprs: + try: + while 1: + loc,dummy = e._parse( instring, loc ) + exprsFound = True + except ParseException: + pass + return loc + + def preParse( self, instring, loc ): + if self.ignoreExprs: + loc = self._skipIgnorables( instring, loc ) + + if self.skipWhitespace: + wt = self.whiteChars + instrlen = len(instring) + while loc < instrlen and instring[loc] in wt: + loc += 1 + + return loc + + def parseImpl( self, instring, loc, doActions=True ): + return loc, [] + + def postParse( self, instring, loc, tokenlist ): + return tokenlist + + #~ @profile + def _parseNoCache( self, instring, loc, doActions=True, callPreParse=True ): + debugging = ( self.debug ) #and doActions ) + + if debugging or self.failAction: + #~ print ("Match",self,"at loc",loc,"(%d,%d)" % ( lineno(loc,instring), col(loc,instring) )) + if (self.debugActions[0] ): + self.debugActions[0]( instring, loc, self ) + if callPreParse and self.callPreparse: + preloc = self.preParse( instring, loc ) + else: + preloc = loc + tokensStart = preloc + try: + try: + loc,tokens = self.parseImpl( instring, preloc, doActions ) + except IndexError: + raise ParseException( instring, len(instring), self.errmsg, self ) + except ParseBaseException as err: + #~ print ("Exception raised:", err) + if self.debugActions[2]: + self.debugActions[2]( instring, tokensStart, self, err ) + if self.failAction: + self.failAction( instring, tokensStart, self, err ) + raise + else: + if callPreParse and self.callPreparse: + preloc = self.preParse( instring, loc ) + else: + preloc = loc + tokensStart = preloc + if self.mayIndexError or loc >= len(instring): + try: + loc,tokens = self.parseImpl( instring, preloc, doActions ) + except IndexError: + raise ParseException( instring, len(instring), self.errmsg, self ) + else: + loc,tokens = self.parseImpl( instring, preloc, doActions ) + + tokens = self.postParse( instring, loc, tokens ) + + retTokens = ParseResults( tokens, self.resultsName, asList=self.saveAsList, modal=self.modalResults ) + if self.parseAction and (doActions or self.callDuringTry): + if debugging: + try: + for fn in self.parseAction: + tokens = fn( instring, tokensStart, retTokens ) + if tokens is not None: + retTokens = ParseResults( tokens, + self.resultsName, + asList=self.saveAsList and isinstance(tokens,(ParseResults,list)), + modal=self.modalResults ) + except ParseBaseException as err: + #~ print "Exception raised in user parse action:", err + if (self.debugActions[2] ): + self.debugActions[2]( instring, tokensStart, self, err ) + raise + else: + for fn in self.parseAction: + tokens = fn( instring, tokensStart, retTokens ) + if tokens is not None: + retTokens = ParseResults( tokens, + self.resultsName, + asList=self.saveAsList and isinstance(tokens,(ParseResults,list)), + modal=self.modalResults ) + + if debugging: + #~ print ("Matched",self,"->",retTokens.asList()) + if (self.debugActions[1] ): + self.debugActions[1]( instring, tokensStart, loc, self, retTokens ) + + return loc, retTokens + + def tryParse( self, instring, loc ): + try: + return self._parse( instring, loc, doActions=False )[0] + except ParseFatalException: + raise ParseException( instring, loc, self.errmsg, self) + + def canParseNext(self, instring, loc): + try: + self.tryParse(instring, loc) + except (ParseException, IndexError): + return False + else: + return True + + class _UnboundedCache(object): + def __init__(self): + cache = {} + self.not_in_cache = not_in_cache = object() + + def get(self, key): + return cache.get(key, not_in_cache) + + def set(self, key, value): + cache[key] = value + + def clear(self): + cache.clear() + + self.get = types.MethodType(get, self) + self.set = types.MethodType(set, self) + self.clear = types.MethodType(clear, self) + + if _OrderedDict is not None: + class _FifoCache(object): + def __init__(self, size): + self.not_in_cache = not_in_cache = object() + + cache = _OrderedDict() + + def get(self, key): + return cache.get(key, not_in_cache) + + def set(self, key, value): + cache[key] = value + if len(cache) > size: + cache.popitem(False) + + def clear(self): + cache.clear() + + self.get = types.MethodType(get, self) + self.set = types.MethodType(set, self) + self.clear = types.MethodType(clear, self) + + else: + class _FifoCache(object): + def __init__(self, size): + self.not_in_cache = not_in_cache = object() + + cache = {} + key_fifo = collections.deque([], size) + + def get(self, key): + return cache.get(key, not_in_cache) + + def set(self, key, value): + cache[key] = value + if len(cache) > size: + cache.pop(key_fifo.popleft(), None) + key_fifo.append(key) + + def clear(self): + cache.clear() + key_fifo.clear() + + self.get = types.MethodType(get, self) + self.set = types.MethodType(set, self) + self.clear = types.MethodType(clear, self) + + # argument cache for optimizing repeated calls when backtracking through recursive expressions + packrat_cache = {} # this is set later by enabledPackrat(); this is here so that resetCache() doesn't fail + packrat_cache_lock = RLock() + packrat_cache_stats = [0, 0] + + # this method gets repeatedly called during backtracking with the same arguments - + # we can cache these arguments and save ourselves the trouble of re-parsing the contained expression + def _parseCache( self, instring, loc, doActions=True, callPreParse=True ): + HIT, MISS = 0, 1 + lookup = (self, instring, loc, callPreParse, doActions) + with ParserElement.packrat_cache_lock: + cache = ParserElement.packrat_cache + value = cache.get(lookup) + if value is cache.not_in_cache: + ParserElement.packrat_cache_stats[MISS] += 1 + try: + value = self._parseNoCache(instring, loc, doActions, callPreParse) + except ParseBaseException as pe: + # cache a copy of the exception, without the traceback + cache.set(lookup, pe.__class__(*pe.args)) + raise + else: + cache.set(lookup, (value[0], value[1].copy())) + return value + else: + ParserElement.packrat_cache_stats[HIT] += 1 + if isinstance(value, Exception): + raise value + return (value[0], value[1].copy()) + + _parse = _parseNoCache + + @staticmethod + def resetCache(): + ParserElement.packrat_cache.clear() + ParserElement.packrat_cache_stats[:] = [0] * len(ParserElement.packrat_cache_stats) + + _packratEnabled = False + @staticmethod + def enablePackrat(cache_size_limit=128): + """Enables "packrat" parsing, which adds memoizing to the parsing logic. + Repeated parse attempts at the same string location (which happens + often in many complex grammars) can immediately return a cached value, + instead of re-executing parsing/validating code. Memoizing is done of + both valid results and parsing exceptions. + + Parameters: + - cache_size_limit - (default=C{128}) - if an integer value is provided + will limit the size of the packrat cache; if None is passed, then + the cache size will be unbounded; if 0 is passed, the cache will + be effectively disabled. + + This speedup may break existing programs that use parse actions that + have side-effects. For this reason, packrat parsing is disabled when + you first import pyparsing. To activate the packrat feature, your + program must call the class method C{ParserElement.enablePackrat()}. If + your program uses C{psyco} to "compile as you go", you must call + C{enablePackrat} before calling C{psyco.full()}. If you do not do this, + Python will crash. For best results, call C{enablePackrat()} immediately + after importing pyparsing. + + Example:: + import pyparsing + pyparsing.ParserElement.enablePackrat() + """ + if not ParserElement._packratEnabled: + ParserElement._packratEnabled = True + if cache_size_limit is None: + ParserElement.packrat_cache = ParserElement._UnboundedCache() + else: + ParserElement.packrat_cache = ParserElement._FifoCache(cache_size_limit) + ParserElement._parse = ParserElement._parseCache + + def parseString( self, instring, parseAll=False ): + """ + Execute the parse expression with the given string. + This is the main interface to the client code, once the complete + expression has been built. + + If you want the grammar to require that the entire input string be + successfully parsed, then set C{parseAll} to True (equivalent to ending + the grammar with C{L{StringEnd()}}). + + Note: C{parseString} implicitly calls C{expandtabs()} on the input string, + in order to report proper column numbers in parse actions. + If the input string contains tabs and + the grammar uses parse actions that use the C{loc} argument to index into the + string being parsed, you can ensure you have a consistent view of the input + string by: + - calling C{parseWithTabs} on your grammar before calling C{parseString} + (see L{I{parseWithTabs}<parseWithTabs>}) + - define your parse action using the full C{(s,loc,toks)} signature, and + reference the input string using the parse action's C{s} argument + - explictly expand the tabs in your input string before calling + C{parseString} + + Example:: + Word('a').parseString('aaaaabaaa') # -> ['aaaaa'] + Word('a').parseString('aaaaabaaa', parseAll=True) # -> Exception: Expected end of text + """ + ParserElement.resetCache() + if not self.streamlined: + self.streamline() + #~ self.saveAsList = True + for e in self.ignoreExprs: + e.streamline() + if not self.keepTabs: + instring = instring.expandtabs() + try: + loc, tokens = self._parse( instring, 0 ) + if parseAll: + loc = self.preParse( instring, loc ) + se = Empty() + StringEnd() + se._parse( instring, loc ) + except ParseBaseException as exc: + if ParserElement.verbose_stacktrace: + raise + else: + # catch and re-raise exception from here, clears out pyparsing internal stack trace + raise exc + else: + return tokens + + def scanString( self, instring, maxMatches=_MAX_INT, overlap=False ): + """ + Scan the input string for expression matches. Each match will return the + matching tokens, start location, and end location. May be called with optional + C{maxMatches} argument, to clip scanning after 'n' matches are found. If + C{overlap} is specified, then overlapping matches will be reported. + + Note that the start and end locations are reported relative to the string + being parsed. See L{I{parseString}<parseString>} for more information on parsing + strings with embedded tabs. + + Example:: + source = "sldjf123lsdjjkf345sldkjf879lkjsfd987" + print(source) + for tokens,start,end in Word(alphas).scanString(source): + print(' '*start + '^'*(end-start)) + print(' '*start + tokens[0]) + + prints:: + + sldjf123lsdjjkf345sldkjf879lkjsfd987 + ^^^^^ + sldjf + ^^^^^^^ + lsdjjkf + ^^^^^^ + sldkjf + ^^^^^^ + lkjsfd + """ + if not self.streamlined: + self.streamline() + for e in self.ignoreExprs: + e.streamline() + + if not self.keepTabs: + instring = _ustr(instring).expandtabs() + instrlen = len(instring) + loc = 0 + preparseFn = self.preParse + parseFn = self._parse + ParserElement.resetCache() + matches = 0 + try: + while loc <= instrlen and matches < maxMatches: + try: + preloc = preparseFn( instring, loc ) + nextLoc,tokens = parseFn( instring, preloc, callPreParse=False ) + except ParseException: + loc = preloc+1 + else: + if nextLoc > loc: + matches += 1 + yield tokens, preloc, nextLoc + if overlap: + nextloc = preparseFn( instring, loc ) + if nextloc > loc: + loc = nextLoc + else: + loc += 1 + else: + loc = nextLoc + else: + loc = preloc+1 + except ParseBaseException as exc: + if ParserElement.verbose_stacktrace: + raise + else: + # catch and re-raise exception from here, clears out pyparsing internal stack trace + raise exc + + def transformString( self, instring ): + """ + Extension to C{L{scanString}}, to modify matching text with modified tokens that may + be returned from a parse action. To use C{transformString}, define a grammar and + attach a parse action to it that modifies the returned token list. + Invoking C{transformString()} on a target string will then scan for matches, + and replace the matched text patterns according to the logic in the parse + action. C{transformString()} returns the resulting transformed string. + + Example:: + wd = Word(alphas) + wd.setParseAction(lambda toks: toks[0].title()) + + print(wd.transformString("now is the winter of our discontent made glorious summer by this sun of york.")) + Prints:: + Now Is The Winter Of Our Discontent Made Glorious Summer By This Sun Of York. + """ + out = [] + lastE = 0 + # force preservation of <TAB>s, to minimize unwanted transformation of string, and to + # keep string locs straight between transformString and scanString + self.keepTabs = True + try: + for t,s,e in self.scanString( instring ): + out.append( instring[lastE:s] ) + if t: + if isinstance(t,ParseResults): + out += t.asList() + elif isinstance(t,list): + out += t + else: + out.append(t) + lastE = e + out.append(instring[lastE:]) + out = [o for o in out if o] + return "".join(map(_ustr,_flatten(out))) + except ParseBaseException as exc: + if ParserElement.verbose_stacktrace: + raise + else: + # catch and re-raise exception from here, clears out pyparsing internal stack trace + raise exc + + def searchString( self, instring, maxMatches=_MAX_INT ): + """ + Another extension to C{L{scanString}}, simplifying the access to the tokens found + to match the given parse expression. May be called with optional + C{maxMatches} argument, to clip searching after 'n' matches are found. + + Example:: + # a capitalized word starts with an uppercase letter, followed by zero or more lowercase letters + cap_word = Word(alphas.upper(), alphas.lower()) + + print(cap_word.searchString("More than Iron, more than Lead, more than Gold I need Electricity")) + prints:: + ['More', 'Iron', 'Lead', 'Gold', 'I'] + """ + try: + return ParseResults([ t for t,s,e in self.scanString( instring, maxMatches ) ]) + except ParseBaseException as exc: + if ParserElement.verbose_stacktrace: + raise + else: + # catch and re-raise exception from here, clears out pyparsing internal stack trace + raise exc + + def split(self, instring, maxsplit=_MAX_INT, includeSeparators=False): + """ + Generator method to split a string using the given expression as a separator. + May be called with optional C{maxsplit} argument, to limit the number of splits; + and the optional C{includeSeparators} argument (default=C{False}), if the separating + matching text should be included in the split results. + + Example:: + punc = oneOf(list(".,;:/-!?")) + print(list(punc.split("This, this?, this sentence, is badly punctuated!"))) + prints:: + ['This', ' this', '', ' this sentence', ' is badly punctuated', ''] + """ + splits = 0 + last = 0 + for t,s,e in self.scanString(instring, maxMatches=maxsplit): + yield instring[last:s] + if includeSeparators: + yield t[0] + last = e + yield instring[last:] + + def __add__(self, other ): + """ + Implementation of + operator - returns C{L{And}}. Adding strings to a ParserElement + converts them to L{Literal}s by default. + + Example:: + greet = Word(alphas) + "," + Word(alphas) + "!" + hello = "Hello, World!" + print (hello, "->", greet.parseString(hello)) + Prints:: + Hello, World! -> ['Hello', ',', 'World', '!'] + """ + if isinstance( other, basestring ): + other = ParserElement._literalStringClass( other ) + if not isinstance( other, ParserElement ): + warnings.warn("Cannot combine element of type %s with ParserElement" % type(other), + SyntaxWarning, stacklevel=2) + return None + return And( [ self, other ] ) + + def __radd__(self, other ): + """ + Implementation of + operator when left operand is not a C{L{ParserElement}} + """ + if isinstance( other, basestring ): + other = ParserElement._literalStringClass( other ) + if not isinstance( other, ParserElement ): + warnings.warn("Cannot combine element of type %s with ParserElement" % type(other), + SyntaxWarning, stacklevel=2) + return None + return other + self + + def __sub__(self, other): + """ + Implementation of - operator, returns C{L{And}} with error stop + """ + if isinstance( other, basestring ): + other = ParserElement._literalStringClass( other ) + if not isinstance( other, ParserElement ): + warnings.warn("Cannot combine element of type %s with ParserElement" % type(other), + SyntaxWarning, stacklevel=2) + return None + return And( [ self, And._ErrorStop(), other ] ) + + def __rsub__(self, other ): + """ + Implementation of - operator when left operand is not a C{L{ParserElement}} + """ + if isinstance( other, basestring ): + other = ParserElement._literalStringClass( other ) + if not isinstance( other, ParserElement ): + warnings.warn("Cannot combine element of type %s with ParserElement" % type(other), + SyntaxWarning, stacklevel=2) + return None + return other - self + + def __mul__(self,other): + """ + Implementation of * operator, allows use of C{expr * 3} in place of + C{expr + expr + expr}. Expressions may also me multiplied by a 2-integer + tuple, similar to C{{min,max}} multipliers in regular expressions. Tuples + may also include C{None} as in: + - C{expr*(n,None)} or C{expr*(n,)} is equivalent + to C{expr*n + L{ZeroOrMore}(expr)} + (read as "at least n instances of C{expr}") + - C{expr*(None,n)} is equivalent to C{expr*(0,n)} + (read as "0 to n instances of C{expr}") + - C{expr*(None,None)} is equivalent to C{L{ZeroOrMore}(expr)} + - C{expr*(1,None)} is equivalent to C{L{OneOrMore}(expr)} + + Note that C{expr*(None,n)} does not raise an exception if + more than n exprs exist in the input stream; that is, + C{expr*(None,n)} does not enforce a maximum number of expr + occurrences. If this behavior is desired, then write + C{expr*(None,n) + ~expr} + """ + if isinstance(other,int): + minElements, optElements = other,0 + elif isinstance(other,tuple): + other = (other + (None, None))[:2] + if other[0] is None: + other = (0, other[1]) + if isinstance(other[0],int) and other[1] is None: + if other[0] == 0: + return ZeroOrMore(self) + if other[0] == 1: + return OneOrMore(self) + else: + return self*other[0] + ZeroOrMore(self) + elif isinstance(other[0],int) and isinstance(other[1],int): + minElements, optElements = other + optElements -= minElements + else: + raise TypeError("cannot multiply 'ParserElement' and ('%s','%s') objects", type(other[0]),type(other[1])) + else: + raise TypeError("cannot multiply 'ParserElement' and '%s' objects", type(other)) + + if minElements < 0: + raise ValueError("cannot multiply ParserElement by negative value") + if optElements < 0: + raise ValueError("second tuple value must be greater or equal to first tuple value") + if minElements == optElements == 0: + raise ValueError("cannot multiply ParserElement by 0 or (0,0)") + + if (optElements): + def makeOptionalList(n): + if n>1: + return Optional(self + makeOptionalList(n-1)) + else: + return Optional(self) + if minElements: + if minElements == 1: + ret = self + makeOptionalList(optElements) + else: + ret = And([self]*minElements) + makeOptionalList(optElements) + else: + ret = makeOptionalList(optElements) + else: + if minElements == 1: + ret = self + else: + ret = And([self]*minElements) + return ret + + def __rmul__(self, other): + return self.__mul__(other) + + def __or__(self, other ): + """ + Implementation of | operator - returns C{L{MatchFirst}} + """ + if isinstance( other, basestring ): + other = ParserElement._literalStringClass( other ) + if not isinstance( other, ParserElement ): + warnings.warn("Cannot combine element of type %s with ParserElement" % type(other), + SyntaxWarning, stacklevel=2) + return None + return MatchFirst( [ self, other ] ) + + def __ror__(self, other ): + """ + Implementation of | operator when left operand is not a C{L{ParserElement}} + """ + if isinstance( other, basestring ): + other = ParserElement._literalStringClass( other ) + if not isinstance( other, ParserElement ): + warnings.warn("Cannot combine element of type %s with ParserElement" % type(other), + SyntaxWarning, stacklevel=2) + return None + return other | self + + def __xor__(self, other ): + """ + Implementation of ^ operator - returns C{L{Or}} + """ + if isinstance( other, basestring ): + other = ParserElement._literalStringClass( other ) + if not isinstance( other, ParserElement ): + warnings.warn("Cannot combine element of type %s with ParserElement" % type(other), + SyntaxWarning, stacklevel=2) + return None + return Or( [ self, other ] ) + + def __rxor__(self, other ): + """ + Implementation of ^ operator when left operand is not a C{L{ParserElement}} + """ + if isinstance( other, basestring ): + other = ParserElement._literalStringClass( other ) + if not isinstance( other, ParserElement ): + warnings.warn("Cannot combine element of type %s with ParserElement" % type(other), + SyntaxWarning, stacklevel=2) + return None + return other ^ self + + def __and__(self, other ): + """ + Implementation of & operator - returns C{L{Each}} + """ + if isinstance( other, basestring ): + other = ParserElement._literalStringClass( other ) + if not isinstance( other, ParserElement ): + warnings.warn("Cannot combine element of type %s with ParserElement" % type(other), + SyntaxWarning, stacklevel=2) + return None + return Each( [ self, other ] ) + + def __rand__(self, other ): + """ + Implementation of & operator when left operand is not a C{L{ParserElement}} + """ + if isinstance( other, basestring ): + other = ParserElement._literalStringClass( other ) + if not isinstance( other, ParserElement ): + warnings.warn("Cannot combine element of type %s with ParserElement" % type(other), + SyntaxWarning, stacklevel=2) + return None + return other & self + + def __invert__( self ): + """ + Implementation of ~ operator - returns C{L{NotAny}} + """ + return NotAny( self ) + + def __call__(self, name=None): + """ + Shortcut for C{L{setResultsName}}, with C{listAllMatches=False}. + + If C{name} is given with a trailing C{'*'} character, then C{listAllMatches} will be + passed as C{True}. + + If C{name} is omitted, same as calling C{L{copy}}. + + Example:: + # these are equivalent + userdata = Word(alphas).setResultsName("name") + Word(nums+"-").setResultsName("socsecno") + userdata = Word(alphas)("name") + Word(nums+"-")("socsecno") + """ + if name is not None: + return self.setResultsName(name) + else: + return self.copy() + + def suppress( self ): + """ + Suppresses the output of this C{ParserElement}; useful to keep punctuation from + cluttering up returned output. + """ + return Suppress( self ) + + def leaveWhitespace( self ): + """ + Disables the skipping of whitespace before matching the characters in the + C{ParserElement}'s defined pattern. This is normally only used internally by + the pyparsing module, but may be needed in some whitespace-sensitive grammars. + """ + self.skipWhitespace = False + return self + + def setWhitespaceChars( self, chars ): + """ + Overrides the default whitespace chars + """ + self.skipWhitespace = True + self.whiteChars = chars + self.copyDefaultWhiteChars = False + return self + + def parseWithTabs( self ): + """ + Overrides default behavior to expand C{<TAB>}s to spaces before parsing the input string. + Must be called before C{parseString} when the input grammar contains elements that + match C{<TAB>} characters. + """ + self.keepTabs = True + return self + + def ignore( self, other ): + """ + Define expression to be ignored (e.g., comments) while doing pattern + matching; may be called repeatedly, to define multiple comment or other + ignorable patterns. + + Example:: + patt = OneOrMore(Word(alphas)) + patt.parseString('ablaj /* comment */ lskjd') # -> ['ablaj'] + + patt.ignore(cStyleComment) + patt.parseString('ablaj /* comment */ lskjd') # -> ['ablaj', 'lskjd'] + """ + if isinstance(other, basestring): + other = Suppress(other) + + if isinstance( other, Suppress ): + if other not in self.ignoreExprs: + self.ignoreExprs.append(other) + else: + self.ignoreExprs.append( Suppress( other.copy() ) ) + return self + + def setDebugActions( self, startAction, successAction, exceptionAction ): + """ + Enable display of debugging messages while doing pattern matching. + """ + self.debugActions = (startAction or _defaultStartDebugAction, + successAction or _defaultSuccessDebugAction, + exceptionAction or _defaultExceptionDebugAction) + self.debug = True + return self + + def setDebug( self, flag=True ): + """ + Enable display of debugging messages while doing pattern matching. + Set C{flag} to True to enable, False to disable. + + Example:: + wd = Word(alphas).setName("alphaword") + integer = Word(nums).setName("numword") + term = wd | integer + + # turn on debugging for wd + wd.setDebug() + + OneOrMore(term).parseString("abc 123 xyz 890") + + prints:: + Match alphaword at loc 0(1,1) + Matched alphaword -> ['abc'] + Match alphaword at loc 3(1,4) + Exception raised:Expected alphaword (at char 4), (line:1, col:5) + Match alphaword at loc 7(1,8) + Matched alphaword -> ['xyz'] + Match alphaword at loc 11(1,12) + Exception raised:Expected alphaword (at char 12), (line:1, col:13) + Match alphaword at loc 15(1,16) + Exception raised:Expected alphaword (at char 15), (line:1, col:16) + + The output shown is that produced by the default debug actions - custom debug actions can be + specified using L{setDebugActions}. Prior to attempting + to match the C{wd} expression, the debugging message C{"Match <exprname> at loc <n>(<line>,<col>)"} + is shown. Then if the parse succeeds, a C{"Matched"} message is shown, or an C{"Exception raised"} + message is shown. Also note the use of L{setName} to assign a human-readable name to the expression, + which makes debugging and exception messages easier to understand - for instance, the default + name created for the C{Word} expression without calling C{setName} is C{"W:(ABCD...)"}. + """ + if flag: + self.setDebugActions( _defaultStartDebugAction, _defaultSuccessDebugAction, _defaultExceptionDebugAction ) + else: + self.debug = False + return self + + def __str__( self ): + return self.name + + def __repr__( self ): + return _ustr(self) + + def streamline( self ): + self.streamlined = True + self.strRepr = None + return self + + def checkRecursion( self, parseElementList ): + pass + + def validate( self, validateTrace=[] ): + """ + Check defined expressions for valid structure, check for infinite recursive definitions. + """ + self.checkRecursion( [] ) + + def parseFile( self, file_or_filename, parseAll=False ): + """ + Execute the parse expression on the given file or filename. + If a filename is specified (instead of a file object), + the entire file is opened, read, and closed before parsing. + """ + try: + file_contents = file_or_filename.read() + except AttributeError: + with open(file_or_filename, "r") as f: + file_contents = f.read() + try: + return self.parseString(file_contents, parseAll) + except ParseBaseException as exc: + if ParserElement.verbose_stacktrace: + raise + else: + # catch and re-raise exception from here, clears out pyparsing internal stack trace + raise exc + + def __eq__(self,other): + if isinstance(other, ParserElement): + return self is other or vars(self) == vars(other) + elif isinstance(other, basestring): + return self.matches(other) + else: + return super(ParserElement,self)==other + + def __ne__(self,other): + return not (self == other) + + def __hash__(self): + return hash(id(self)) + + def __req__(self,other): + return self == other + + def __rne__(self,other): + return not (self == other) + + def matches(self, testString, parseAll=True): + """ + Method for quick testing of a parser against a test string. Good for simple + inline microtests of sub expressions while building up larger parser. + + Parameters: + - testString - to test against this expression for a match + - parseAll - (default=C{True}) - flag to pass to C{L{parseString}} when running tests + + Example:: + expr = Word(nums) + assert expr.matches("100") + """ + try: + self.parseString(_ustr(testString), parseAll=parseAll) + return True + except ParseBaseException: + return False + + def runTests(self, tests, parseAll=True, comment='#', fullDump=True, printResults=True, failureTests=False): + """ + Execute the parse expression on a series of test strings, showing each + test, the parsed results or where the parse failed. Quick and easy way to + run a parse expression against a list of sample strings. + + Parameters: + - tests - a list of separate test strings, or a multiline string of test strings + - parseAll - (default=C{True}) - flag to pass to C{L{parseString}} when running tests + - comment - (default=C{'#'}) - expression for indicating embedded comments in the test + string; pass None to disable comment filtering + - fullDump - (default=C{True}) - dump results as list followed by results names in nested outline; + if False, only dump nested list + - printResults - (default=C{True}) prints test output to stdout + - failureTests - (default=C{False}) indicates if these tests are expected to fail parsing + + Returns: a (success, results) tuple, where success indicates that all tests succeeded + (or failed if C{failureTests} is True), and the results contain a list of lines of each + test's output + + Example:: + number_expr = pyparsing_common.number.copy() + + result = number_expr.runTests(''' + # unsigned integer + 100 + # negative integer + -100 + # float with scientific notation + 6.02e23 + # integer with scientific notation + 1e-12 + ''') + print("Success" if result[0] else "Failed!") + + result = number_expr.runTests(''' + # stray character + 100Z + # missing leading digit before '.' + -.100 + # too many '.' + 3.14.159 + ''', failureTests=True) + print("Success" if result[0] else "Failed!") + prints:: + # unsigned integer + 100 + [100] + + # negative integer + -100 + [-100] + + # float with scientific notation + 6.02e23 + [6.02e+23] + + # integer with scientific notation + 1e-12 + [1e-12] + + Success + + # stray character + 100Z + ^ + FAIL: Expected end of text (at char 3), (line:1, col:4) + + # missing leading digit before '.' + -.100 + ^ + FAIL: Expected {real number with scientific notation | real number | signed integer} (at char 0), (line:1, col:1) + + # too many '.' + 3.14.159 + ^ + FAIL: Expected end of text (at char 4), (line:1, col:5) + + Success + + Each test string must be on a single line. If you want to test a string that spans multiple + lines, create a test like this:: + + expr.runTest(r"this is a test\\n of strings that spans \\n 3 lines") + + (Note that this is a raw string literal, you must include the leading 'r'.) + """ + if isinstance(tests, basestring): + tests = list(map(str.strip, tests.rstrip().splitlines())) + if isinstance(comment, basestring): + comment = Literal(comment) + allResults = [] + comments = [] + success = True + for t in tests: + if comment is not None and comment.matches(t, False) or comments and not t: + comments.append(t) + continue + if not t: + continue + out = ['\n'.join(comments), t] + comments = [] + try: + t = t.replace(r'\n','\n') + result = self.parseString(t, parseAll=parseAll) + out.append(result.dump(full=fullDump)) + success = success and not failureTests + except ParseBaseException as pe: + fatal = "(FATAL)" if isinstance(pe, ParseFatalException) else "" + if '\n' in t: + out.append(line(pe.loc, t)) + out.append(' '*(col(pe.loc,t)-1) + '^' + fatal) + else: + out.append(' '*pe.loc + '^' + fatal) + out.append("FAIL: " + str(pe)) + success = success and failureTests + result = pe + except Exception as exc: + out.append("FAIL-EXCEPTION: " + str(exc)) + success = success and failureTests + result = exc + + if printResults: + if fullDump: + out.append('') + print('\n'.join(out)) + + allResults.append((t, result)) + + return success, allResults + + +class Token(ParserElement): + """ + Abstract C{ParserElement} subclass, for defining atomic matching patterns. + """ + def __init__( self ): + super(Token,self).__init__( savelist=False ) + + +class Empty(Token): + """ + An empty token, will always match. + """ + def __init__( self ): + super(Empty,self).__init__() + self.name = "Empty" + self.mayReturnEmpty = True + self.mayIndexError = False + + +class NoMatch(Token): + """ + A token that will never match. + """ + def __init__( self ): + super(NoMatch,self).__init__() + self.name = "NoMatch" + self.mayReturnEmpty = True + self.mayIndexError = False + self.errmsg = "Unmatchable token" + + def parseImpl( self, instring, loc, doActions=True ): + raise ParseException(instring, loc, self.errmsg, self) + + +class Literal(Token): + """ + Token to exactly match a specified string. + + Example:: + Literal('blah').parseString('blah') # -> ['blah'] + Literal('blah').parseString('blahfooblah') # -> ['blah'] + Literal('blah').parseString('bla') # -> Exception: Expected "blah" + + For case-insensitive matching, use L{CaselessLiteral}. + + For keyword matching (force word break before and after the matched string), + use L{Keyword} or L{CaselessKeyword}. + """ + def __init__( self, matchString ): + super(Literal,self).__init__() + self.match = matchString + self.matchLen = len(matchString) + try: + self.firstMatchChar = matchString[0] + except IndexError: + warnings.warn("null string passed to Literal; use Empty() instead", + SyntaxWarning, stacklevel=2) + self.__class__ = Empty + self.name = '"%s"' % _ustr(self.match) + self.errmsg = "Expected " + self.name + self.mayReturnEmpty = False + self.mayIndexError = False + + # Performance tuning: this routine gets called a *lot* + # if this is a single character match string and the first character matches, + # short-circuit as quickly as possible, and avoid calling startswith + #~ @profile + def parseImpl( self, instring, loc, doActions=True ): + if (instring[loc] == self.firstMatchChar and + (self.matchLen==1 or instring.startswith(self.match,loc)) ): + return loc+self.matchLen, self.match + raise ParseException(instring, loc, self.errmsg, self) +_L = Literal +ParserElement._literalStringClass = Literal + +class Keyword(Token): + """ + Token to exactly match a specified string as a keyword, that is, it must be + immediately followed by a non-keyword character. Compare with C{L{Literal}}: + - C{Literal("if")} will match the leading C{'if'} in C{'ifAndOnlyIf'}. + - C{Keyword("if")} will not; it will only match the leading C{'if'} in C{'if x=1'}, or C{'if(y==2)'} + Accepts two optional constructor arguments in addition to the keyword string: + - C{identChars} is a string of characters that would be valid identifier characters, + defaulting to all alphanumerics + "_" and "$" + - C{caseless} allows case-insensitive matching, default is C{False}. + + Example:: + Keyword("start").parseString("start") # -> ['start'] + Keyword("start").parseString("starting") # -> Exception + + For case-insensitive matching, use L{CaselessKeyword}. + """ + DEFAULT_KEYWORD_CHARS = alphanums+"_$" + + def __init__( self, matchString, identChars=None, caseless=False ): + super(Keyword,self).__init__() + if identChars is None: + identChars = Keyword.DEFAULT_KEYWORD_CHARS + self.match = matchString + self.matchLen = len(matchString) + try: + self.firstMatchChar = matchString[0] + except IndexError: + warnings.warn("null string passed to Keyword; use Empty() instead", + SyntaxWarning, stacklevel=2) + self.name = '"%s"' % self.match + self.errmsg = "Expected " + self.name + self.mayReturnEmpty = False + self.mayIndexError = False + self.caseless = caseless + if caseless: + self.caselessmatch = matchString.upper() + identChars = identChars.upper() + self.identChars = set(identChars) + + def parseImpl( self, instring, loc, doActions=True ): + if self.caseless: + if ( (instring[ loc:loc+self.matchLen ].upper() == self.caselessmatch) and + (loc >= len(instring)-self.matchLen or instring[loc+self.matchLen].upper() not in self.identChars) and + (loc == 0 or instring[loc-1].upper() not in self.identChars) ): + return loc+self.matchLen, self.match + else: + if (instring[loc] == self.firstMatchChar and + (self.matchLen==1 or instring.startswith(self.match,loc)) and + (loc >= len(instring)-self.matchLen or instring[loc+self.matchLen] not in self.identChars) and + (loc == 0 or instring[loc-1] not in self.identChars) ): + return loc+self.matchLen, self.match + raise ParseException(instring, loc, self.errmsg, self) + + def copy(self): + c = super(Keyword,self).copy() + c.identChars = Keyword.DEFAULT_KEYWORD_CHARS + return c + + @staticmethod + def setDefaultKeywordChars( chars ): + """Overrides the default Keyword chars + """ + Keyword.DEFAULT_KEYWORD_CHARS = chars + +class CaselessLiteral(Literal): + """ + Token to match a specified string, ignoring case of letters. + Note: the matched results will always be in the case of the given + match string, NOT the case of the input text. + + Example:: + OneOrMore(CaselessLiteral("CMD")).parseString("cmd CMD Cmd10") # -> ['CMD', 'CMD', 'CMD'] + + (Contrast with example for L{CaselessKeyword}.) + """ + def __init__( self, matchString ): + super(CaselessLiteral,self).__init__( matchString.upper() ) + # Preserve the defining literal. + self.returnString = matchString + self.name = "'%s'" % self.returnString + self.errmsg = "Expected " + self.name + + def parseImpl( self, instring, loc, doActions=True ): + if instring[ loc:loc+self.matchLen ].upper() == self.match: + return loc+self.matchLen, self.returnString + raise ParseException(instring, loc, self.errmsg, self) + +class CaselessKeyword(Keyword): + """ + Caseless version of L{Keyword}. + + Example:: + OneOrMore(CaselessKeyword("CMD")).parseString("cmd CMD Cmd10") # -> ['CMD', 'CMD'] + + (Contrast with example for L{CaselessLiteral}.) + """ + def __init__( self, matchString, identChars=None ): + super(CaselessKeyword,self).__init__( matchString, identChars, caseless=True ) + + def parseImpl( self, instring, loc, doActions=True ): + if ( (instring[ loc:loc+self.matchLen ].upper() == self.caselessmatch) and + (loc >= len(instring)-self.matchLen or instring[loc+self.matchLen].upper() not in self.identChars) ): + return loc+self.matchLen, self.match + raise ParseException(instring, loc, self.errmsg, self) + +class CloseMatch(Token): + """ + A variation on L{Literal} which matches "close" matches, that is, + strings with at most 'n' mismatching characters. C{CloseMatch} takes parameters: + - C{match_string} - string to be matched + - C{maxMismatches} - (C{default=1}) maximum number of mismatches allowed to count as a match + + The results from a successful parse will contain the matched text from the input string and the following named results: + - C{mismatches} - a list of the positions within the match_string where mismatches were found + - C{original} - the original match_string used to compare against the input string + + If C{mismatches} is an empty list, then the match was an exact match. + + Example:: + patt = CloseMatch("ATCATCGAATGGA") + patt.parseString("ATCATCGAAXGGA") # -> (['ATCATCGAAXGGA'], {'mismatches': [[9]], 'original': ['ATCATCGAATGGA']}) + patt.parseString("ATCAXCGAAXGGA") # -> Exception: Expected 'ATCATCGAATGGA' (with up to 1 mismatches) (at char 0), (line:1, col:1) + + # exact match + patt.parseString("ATCATCGAATGGA") # -> (['ATCATCGAATGGA'], {'mismatches': [[]], 'original': ['ATCATCGAATGGA']}) + + # close match allowing up to 2 mismatches + patt = CloseMatch("ATCATCGAATGGA", maxMismatches=2) + patt.parseString("ATCAXCGAAXGGA") # -> (['ATCAXCGAAXGGA'], {'mismatches': [[4, 9]], 'original': ['ATCATCGAATGGA']}) + """ + def __init__(self, match_string, maxMismatches=1): + super(CloseMatch,self).__init__() + self.name = match_string + self.match_string = match_string + self.maxMismatches = maxMismatches + self.errmsg = "Expected %r (with up to %d mismatches)" % (self.match_string, self.maxMismatches) + self.mayIndexError = False + self.mayReturnEmpty = False + + def parseImpl( self, instring, loc, doActions=True ): + start = loc + instrlen = len(instring) + maxloc = start + len(self.match_string) + + if maxloc <= instrlen: + match_string = self.match_string + match_stringloc = 0 + mismatches = [] + maxMismatches = self.maxMismatches + + for match_stringloc,s_m in enumerate(zip(instring[loc:maxloc], self.match_string)): + src,mat = s_m + if src != mat: + mismatches.append(match_stringloc) + if len(mismatches) > maxMismatches: + break + else: + loc = match_stringloc + 1 + results = ParseResults([instring[start:loc]]) + results['original'] = self.match_string + results['mismatches'] = mismatches + return loc, results + + raise ParseException(instring, loc, self.errmsg, self) + + +class Word(Token): + """ + Token for matching words composed of allowed character sets. + Defined with string containing all allowed initial characters, + an optional string containing allowed body characters (if omitted, + defaults to the initial character set), and an optional minimum, + maximum, and/or exact length. The default value for C{min} is 1 (a + minimum value < 1 is not valid); the default values for C{max} and C{exact} + are 0, meaning no maximum or exact length restriction. An optional + C{excludeChars} parameter can list characters that might be found in + the input C{bodyChars} string; useful to define a word of all printables + except for one or two characters, for instance. + + L{srange} is useful for defining custom character set strings for defining + C{Word} expressions, using range notation from regular expression character sets. + + A common mistake is to use C{Word} to match a specific literal string, as in + C{Word("Address")}. Remember that C{Word} uses the string argument to define + I{sets} of matchable characters. This expression would match "Add", "AAA", + "dAred", or any other word made up of the characters 'A', 'd', 'r', 'e', and 's'. + To match an exact literal string, use L{Literal} or L{Keyword}. + + pyparsing includes helper strings for building Words: + - L{alphas} + - L{nums} + - L{alphanums} + - L{hexnums} + - L{alphas8bit} (alphabetic characters in ASCII range 128-255 - accented, tilded, umlauted, etc.) + - L{punc8bit} (non-alphabetic characters in ASCII range 128-255 - currency, symbols, superscripts, diacriticals, etc.) + - L{printables} (any non-whitespace character) + + Example:: + # a word composed of digits + integer = Word(nums) # equivalent to Word("0123456789") or Word(srange("0-9")) + + # a word with a leading capital, and zero or more lowercase + capital_word = Word(alphas.upper(), alphas.lower()) + + # hostnames are alphanumeric, with leading alpha, and '-' + hostname = Word(alphas, alphanums+'-') + + # roman numeral (not a strict parser, accepts invalid mix of characters) + roman = Word("IVXLCDM") + + # any string of non-whitespace characters, except for ',' + csv_value = Word(printables, excludeChars=",") + """ + def __init__( self, initChars, bodyChars=None, min=1, max=0, exact=0, asKeyword=False, excludeChars=None ): + super(Word,self).__init__() + if excludeChars: + initChars = ''.join(c for c in initChars if c not in excludeChars) + if bodyChars: + bodyChars = ''.join(c for c in bodyChars if c not in excludeChars) + self.initCharsOrig = initChars + self.initChars = set(initChars) + if bodyChars : + self.bodyCharsOrig = bodyChars + self.bodyChars = set(bodyChars) + else: + self.bodyCharsOrig = initChars + self.bodyChars = set(initChars) + + self.maxSpecified = max > 0 + + if min < 1: + raise ValueError("cannot specify a minimum length < 1; use Optional(Word()) if zero-length word is permitted") + + self.minLen = min + + if max > 0: + self.maxLen = max + else: + self.maxLen = _MAX_INT + + if exact > 0: + self.maxLen = exact + self.minLen = exact + + self.name = _ustr(self) + self.errmsg = "Expected " + self.name + self.mayIndexError = False + self.asKeyword = asKeyword + + if ' ' not in self.initCharsOrig+self.bodyCharsOrig and (min==1 and max==0 and exact==0): + if self.bodyCharsOrig == self.initCharsOrig: + self.reString = "[%s]+" % _escapeRegexRangeChars(self.initCharsOrig) + elif len(self.initCharsOrig) == 1: + self.reString = "%s[%s]*" % \ + (re.escape(self.initCharsOrig), + _escapeRegexRangeChars(self.bodyCharsOrig),) + else: + self.reString = "[%s][%s]*" % \ + (_escapeRegexRangeChars(self.initCharsOrig), + _escapeRegexRangeChars(self.bodyCharsOrig),) + if self.asKeyword: + self.reString = r"\b"+self.reString+r"\b" + try: + self.re = re.compile( self.reString ) + except Exception: + self.re = None + + def parseImpl( self, instring, loc, doActions=True ): + if self.re: + result = self.re.match(instring,loc) + if not result: + raise ParseException(instring, loc, self.errmsg, self) + + loc = result.end() + return loc, result.group() + + if not(instring[ loc ] in self.initChars): + raise ParseException(instring, loc, self.errmsg, self) + + start = loc + loc += 1 + instrlen = len(instring) + bodychars = self.bodyChars + maxloc = start + self.maxLen + maxloc = min( maxloc, instrlen ) + while loc < maxloc and instring[loc] in bodychars: + loc += 1 + + throwException = False + if loc - start < self.minLen: + throwException = True + if self.maxSpecified and loc < instrlen and instring[loc] in bodychars: + throwException = True + if self.asKeyword: + if (start>0 and instring[start-1] in bodychars) or (loc<instrlen and instring[loc] in bodychars): + throwException = True + + if throwException: + raise ParseException(instring, loc, self.errmsg, self) + + return loc, instring[start:loc] + + def __str__( self ): + try: + return super(Word,self).__str__() + except Exception: + pass + + + if self.strRepr is None: + + def charsAsStr(s): + if len(s)>4: + return s[:4]+"..." + else: + return s + + if ( self.initCharsOrig != self.bodyCharsOrig ): + self.strRepr = "W:(%s,%s)" % ( charsAsStr(self.initCharsOrig), charsAsStr(self.bodyCharsOrig) ) + else: + self.strRepr = "W:(%s)" % charsAsStr(self.initCharsOrig) + + return self.strRepr + + +class Regex(Token): + """ + Token for matching strings that match a given regular expression. + Defined with string specifying the regular expression in a form recognized by the inbuilt Python re module. + If the given regex contains named groups (defined using C{(?P<name>...)}), these will be preserved as + named parse results. + + Example:: + realnum = Regex(r"[+-]?\d+\.\d*") + date = Regex(r'(?P<year>\d{4})-(?P<month>\d\d?)-(?P<day>\d\d?)') + # ref: http://stackoverflow.com/questions/267399/how-do-you-match-only-valid-roman-numerals-with-a-regular-expression + roman = Regex(r"M{0,4}(CM|CD|D?C{0,3})(XC|XL|L?X{0,3})(IX|IV|V?I{0,3})") + """ + compiledREtype = type(re.compile("[A-Z]")) + def __init__( self, pattern, flags=0): + """The parameters C{pattern} and C{flags} are passed to the C{re.compile()} function as-is. See the Python C{re} module for an explanation of the acceptable patterns and flags.""" + super(Regex,self).__init__() + + if isinstance(pattern, basestring): + if not pattern: + warnings.warn("null string passed to Regex; use Empty() instead", + SyntaxWarning, stacklevel=2) + + self.pattern = pattern + self.flags = flags + + try: + self.re = re.compile(self.pattern, self.flags) + self.reString = self.pattern + except sre_constants.error: + warnings.warn("invalid pattern (%s) passed to Regex" % pattern, + SyntaxWarning, stacklevel=2) + raise + + elif isinstance(pattern, Regex.compiledREtype): + self.re = pattern + self.pattern = \ + self.reString = str(pattern) + self.flags = flags + + else: + raise ValueError("Regex may only be constructed with a string or a compiled RE object") + + self.name = _ustr(self) + self.errmsg = "Expected " + self.name + self.mayIndexError = False + self.mayReturnEmpty = True + + def parseImpl( self, instring, loc, doActions=True ): + result = self.re.match(instring,loc) + if not result: + raise ParseException(instring, loc, self.errmsg, self) + + loc = result.end() + d = result.groupdict() + ret = ParseResults(result.group()) + if d: + for k in d: + ret[k] = d[k] + return loc,ret + + def __str__( self ): + try: + return super(Regex,self).__str__() + except Exception: + pass + + if self.strRepr is None: + self.strRepr = "Re:(%s)" % repr(self.pattern) + + return self.strRepr + + +class QuotedString(Token): + r""" + Token for matching strings that are delimited by quoting characters. + + Defined with the following parameters: + - quoteChar - string of one or more characters defining the quote delimiting string + - escChar - character to escape quotes, typically backslash (default=C{None}) + - escQuote - special quote sequence to escape an embedded quote string (such as SQL's "" to escape an embedded ") (default=C{None}) + - multiline - boolean indicating whether quotes can span multiple lines (default=C{False}) + - unquoteResults - boolean indicating whether the matched text should be unquoted (default=C{True}) + - endQuoteChar - string of one or more characters defining the end of the quote delimited string (default=C{None} => same as quoteChar) + - convertWhitespaceEscapes - convert escaped whitespace (C{'\t'}, C{'\n'}, etc.) to actual whitespace (default=C{True}) + + Example:: + qs = QuotedString('"') + print(qs.searchString('lsjdf "This is the quote" sldjf')) + complex_qs = QuotedString('{{', endQuoteChar='}}') + print(complex_qs.searchString('lsjdf {{This is the "quote"}} sldjf')) + sql_qs = QuotedString('"', escQuote='""') + print(sql_qs.searchString('lsjdf "This is the quote with ""embedded"" quotes" sldjf')) + prints:: + [['This is the quote']] + [['This is the "quote"']] + [['This is the quote with "embedded" quotes']] + """ + def __init__( self, quoteChar, escChar=None, escQuote=None, multiline=False, unquoteResults=True, endQuoteChar=None, convertWhitespaceEscapes=True): + super(QuotedString,self).__init__() + + # remove white space from quote chars - wont work anyway + quoteChar = quoteChar.strip() + if not quoteChar: + warnings.warn("quoteChar cannot be the empty string",SyntaxWarning,stacklevel=2) + raise SyntaxError() + + if endQuoteChar is None: + endQuoteChar = quoteChar + else: + endQuoteChar = endQuoteChar.strip() + if not endQuoteChar: + warnings.warn("endQuoteChar cannot be the empty string",SyntaxWarning,stacklevel=2) + raise SyntaxError() + + self.quoteChar = quoteChar + self.quoteCharLen = len(quoteChar) + self.firstQuoteChar = quoteChar[0] + self.endQuoteChar = endQuoteChar + self.endQuoteCharLen = len(endQuoteChar) + self.escChar = escChar + self.escQuote = escQuote + self.unquoteResults = unquoteResults + self.convertWhitespaceEscapes = convertWhitespaceEscapes + + if multiline: + self.flags = re.MULTILINE | re.DOTALL + self.pattern = r'%s(?:[^%s%s]' % \ + ( re.escape(self.quoteChar), + _escapeRegexRangeChars(self.endQuoteChar[0]), + (escChar is not None and _escapeRegexRangeChars(escChar) or '') ) + else: + self.flags = 0 + self.pattern = r'%s(?:[^%s\n\r%s]' % \ + ( re.escape(self.quoteChar), + _escapeRegexRangeChars(self.endQuoteChar[0]), + (escChar is not None and _escapeRegexRangeChars(escChar) or '') ) + if len(self.endQuoteChar) > 1: + self.pattern += ( + '|(?:' + ')|(?:'.join("%s[^%s]" % (re.escape(self.endQuoteChar[:i]), + _escapeRegexRangeChars(self.endQuoteChar[i])) + for i in range(len(self.endQuoteChar)-1,0,-1)) + ')' + ) + if escQuote: + self.pattern += (r'|(?:%s)' % re.escape(escQuote)) + if escChar: + self.pattern += (r'|(?:%s.)' % re.escape(escChar)) + self.escCharReplacePattern = re.escape(self.escChar)+"(.)" + self.pattern += (r')*%s' % re.escape(self.endQuoteChar)) + + try: + self.re = re.compile(self.pattern, self.flags) + self.reString = self.pattern + except sre_constants.error: + warnings.warn("invalid pattern (%s) passed to Regex" % self.pattern, + SyntaxWarning, stacklevel=2) + raise + + self.name = _ustr(self) + self.errmsg = "Expected " + self.name + self.mayIndexError = False + self.mayReturnEmpty = True + + def parseImpl( self, instring, loc, doActions=True ): + result = instring[loc] == self.firstQuoteChar and self.re.match(instring,loc) or None + if not result: + raise ParseException(instring, loc, self.errmsg, self) + + loc = result.end() + ret = result.group() + + if self.unquoteResults: + + # strip off quotes + ret = ret[self.quoteCharLen:-self.endQuoteCharLen] + + if isinstance(ret,basestring): + # replace escaped whitespace + if '\\' in ret and self.convertWhitespaceEscapes: + ws_map = { + r'\t' : '\t', + r'\n' : '\n', + r'\f' : '\f', + r'\r' : '\r', + } + for wslit,wschar in ws_map.items(): + ret = ret.replace(wslit, wschar) + + # replace escaped characters + if self.escChar: + ret = re.sub(self.escCharReplacePattern,"\g<1>",ret) + + # replace escaped quotes + if self.escQuote: + ret = ret.replace(self.escQuote, self.endQuoteChar) + + return loc, ret + + def __str__( self ): + try: + return super(QuotedString,self).__str__() + except Exception: + pass + + if self.strRepr is None: + self.strRepr = "quoted string, starting with %s ending with %s" % (self.quoteChar, self.endQuoteChar) + + return self.strRepr + + +class CharsNotIn(Token): + """ + Token for matching words composed of characters I{not} in a given set (will + include whitespace in matched characters if not listed in the provided exclusion set - see example). + Defined with string containing all disallowed characters, and an optional + minimum, maximum, and/or exact length. The default value for C{min} is 1 (a + minimum value < 1 is not valid); the default values for C{max} and C{exact} + are 0, meaning no maximum or exact length restriction. + + Example:: + # define a comma-separated-value as anything that is not a ',' + csv_value = CharsNotIn(',') + print(delimitedList(csv_value).parseString("dkls,lsdkjf,s12 34,@!#,213")) + prints:: + ['dkls', 'lsdkjf', 's12 34', '@!#', '213'] + """ + def __init__( self, notChars, min=1, max=0, exact=0 ): + super(CharsNotIn,self).__init__() + self.skipWhitespace = False + self.notChars = notChars + + if min < 1: + raise ValueError("cannot specify a minimum length < 1; use Optional(CharsNotIn()) if zero-length char group is permitted") + + self.minLen = min + + if max > 0: + self.maxLen = max + else: + self.maxLen = _MAX_INT + + if exact > 0: + self.maxLen = exact + self.minLen = exact + + self.name = _ustr(self) + self.errmsg = "Expected " + self.name + self.mayReturnEmpty = ( self.minLen == 0 ) + self.mayIndexError = False + + def parseImpl( self, instring, loc, doActions=True ): + if instring[loc] in self.notChars: + raise ParseException(instring, loc, self.errmsg, self) + + start = loc + loc += 1 + notchars = self.notChars + maxlen = min( start+self.maxLen, len(instring) ) + while loc < maxlen and \ + (instring[loc] not in notchars): + loc += 1 + + if loc - start < self.minLen: + raise ParseException(instring, loc, self.errmsg, self) + + return loc, instring[start:loc] + + def __str__( self ): + try: + return super(CharsNotIn, self).__str__() + except Exception: + pass + + if self.strRepr is None: + if len(self.notChars) > 4: + self.strRepr = "!W:(%s...)" % self.notChars[:4] + else: + self.strRepr = "!W:(%s)" % self.notChars + + return self.strRepr + +class White(Token): + """ + Special matching class for matching whitespace. Normally, whitespace is ignored + by pyparsing grammars. This class is included when some whitespace structures + are significant. Define with a string containing the whitespace characters to be + matched; default is C{" \\t\\r\\n"}. Also takes optional C{min}, C{max}, and C{exact} arguments, + as defined for the C{L{Word}} class. + """ + whiteStrs = { + " " : "<SPC>", + "\t": "<TAB>", + "\n": "<LF>", + "\r": "<CR>", + "\f": "<FF>", + } + def __init__(self, ws=" \t\r\n", min=1, max=0, exact=0): + super(White,self).__init__() + self.matchWhite = ws + self.setWhitespaceChars( "".join(c for c in self.whiteChars if c not in self.matchWhite) ) + #~ self.leaveWhitespace() + self.name = ("".join(White.whiteStrs[c] for c in self.matchWhite)) + self.mayReturnEmpty = True + self.errmsg = "Expected " + self.name + + self.minLen = min + + if max > 0: + self.maxLen = max + else: + self.maxLen = _MAX_INT + + if exact > 0: + self.maxLen = exact + self.minLen = exact + + def parseImpl( self, instring, loc, doActions=True ): + if not(instring[ loc ] in self.matchWhite): + raise ParseException(instring, loc, self.errmsg, self) + start = loc + loc += 1 + maxloc = start + self.maxLen + maxloc = min( maxloc, len(instring) ) + while loc < maxloc and instring[loc] in self.matchWhite: + loc += 1 + + if loc - start < self.minLen: + raise ParseException(instring, loc, self.errmsg, self) + + return loc, instring[start:loc] + + +class _PositionToken(Token): + def __init__( self ): + super(_PositionToken,self).__init__() + self.name=self.__class__.__name__ + self.mayReturnEmpty = True + self.mayIndexError = False + +class GoToColumn(_PositionToken): + """ + Token to advance to a specific column of input text; useful for tabular report scraping. + """ + def __init__( self, colno ): + super(GoToColumn,self).__init__() + self.col = colno + + def preParse( self, instring, loc ): + if col(loc,instring) != self.col: + instrlen = len(instring) + if self.ignoreExprs: + loc = self._skipIgnorables( instring, loc ) + while loc < instrlen and instring[loc].isspace() and col( loc, instring ) != self.col : + loc += 1 + return loc + + def parseImpl( self, instring, loc, doActions=True ): + thiscol = col( loc, instring ) + if thiscol > self.col: + raise ParseException( instring, loc, "Text not in expected column", self ) + newloc = loc + self.col - thiscol + ret = instring[ loc: newloc ] + return newloc, ret + + +class LineStart(_PositionToken): + """ + Matches if current position is at the beginning of a line within the parse string + + Example:: + + test = '''\ + AAA this line + AAA and this line + AAA but not this one + B AAA and definitely not this one + ''' + + for t in (LineStart() + 'AAA' + restOfLine).searchString(test): + print(t) + + Prints:: + ['AAA', ' this line'] + ['AAA', ' and this line'] + + """ + def __init__( self ): + super(LineStart,self).__init__() + self.errmsg = "Expected start of line" + + def parseImpl( self, instring, loc, doActions=True ): + if col(loc, instring) == 1: + return loc, [] + raise ParseException(instring, loc, self.errmsg, self) + +class LineEnd(_PositionToken): + """ + Matches if current position is at the end of a line within the parse string + """ + def __init__( self ): + super(LineEnd,self).__init__() + self.setWhitespaceChars( ParserElement.DEFAULT_WHITE_CHARS.replace("\n","") ) + self.errmsg = "Expected end of line" + + def parseImpl( self, instring, loc, doActions=True ): + if loc<len(instring): + if instring[loc] == "\n": + return loc+1, "\n" + else: + raise ParseException(instring, loc, self.errmsg, self) + elif loc == len(instring): + return loc+1, [] + else: + raise ParseException(instring, loc, self.errmsg, self) + +class StringStart(_PositionToken): + """ + Matches if current position is at the beginning of the parse string + """ + def __init__( self ): + super(StringStart,self).__init__() + self.errmsg = "Expected start of text" + + def parseImpl( self, instring, loc, doActions=True ): + if loc != 0: + # see if entire string up to here is just whitespace and ignoreables + if loc != self.preParse( instring, 0 ): + raise ParseException(instring, loc, self.errmsg, self) + return loc, [] + +class StringEnd(_PositionToken): + """ + Matches if current position is at the end of the parse string + """ + def __init__( self ): + super(StringEnd,self).__init__() + self.errmsg = "Expected end of text" + + def parseImpl( self, instring, loc, doActions=True ): + if loc < len(instring): + raise ParseException(instring, loc, self.errmsg, self) + elif loc == len(instring): + return loc+1, [] + elif loc > len(instring): + return loc, [] + else: + raise ParseException(instring, loc, self.errmsg, self) + +class WordStart(_PositionToken): + """ + Matches if the current position is at the beginning of a Word, and + is not preceded by any character in a given set of C{wordChars} + (default=C{printables}). To emulate the C{\b} behavior of regular expressions, + use C{WordStart(alphanums)}. C{WordStart} will also match at the beginning of + the string being parsed, or at the beginning of a line. + """ + def __init__(self, wordChars = printables): + super(WordStart,self).__init__() + self.wordChars = set(wordChars) + self.errmsg = "Not at the start of a word" + + def parseImpl(self, instring, loc, doActions=True ): + if loc != 0: + if (instring[loc-1] in self.wordChars or + instring[loc] not in self.wordChars): + raise ParseException(instring, loc, self.errmsg, self) + return loc, [] + +class WordEnd(_PositionToken): + """ + Matches if the current position is at the end of a Word, and + is not followed by any character in a given set of C{wordChars} + (default=C{printables}). To emulate the C{\b} behavior of regular expressions, + use C{WordEnd(alphanums)}. C{WordEnd} will also match at the end of + the string being parsed, or at the end of a line. + """ + def __init__(self, wordChars = printables): + super(WordEnd,self).__init__() + self.wordChars = set(wordChars) + self.skipWhitespace = False + self.errmsg = "Not at the end of a word" + + def parseImpl(self, instring, loc, doActions=True ): + instrlen = len(instring) + if instrlen>0 and loc<instrlen: + if (instring[loc] in self.wordChars or + instring[loc-1] not in self.wordChars): + raise ParseException(instring, loc, self.errmsg, self) + return loc, [] + + +class ParseExpression(ParserElement): + """ + Abstract subclass of ParserElement, for combining and post-processing parsed tokens. + """ + def __init__( self, exprs, savelist = False ): + super(ParseExpression,self).__init__(savelist) + if isinstance( exprs, _generatorType ): + exprs = list(exprs) + + if isinstance( exprs, basestring ): + self.exprs = [ ParserElement._literalStringClass( exprs ) ] + elif isinstance( exprs, collections.Iterable ): + exprs = list(exprs) + # if sequence of strings provided, wrap with Literal + if all(isinstance(expr, basestring) for expr in exprs): + exprs = map(ParserElement._literalStringClass, exprs) + self.exprs = list(exprs) + else: + try: + self.exprs = list( exprs ) + except TypeError: + self.exprs = [ exprs ] + self.callPreparse = False + + def __getitem__( self, i ): + return self.exprs[i] + + def append( self, other ): + self.exprs.append( other ) + self.strRepr = None + return self + + def leaveWhitespace( self ): + """Extends C{leaveWhitespace} defined in base class, and also invokes C{leaveWhitespace} on + all contained expressions.""" + self.skipWhitespace = False + self.exprs = [ e.copy() for e in self.exprs ] + for e in self.exprs: + e.leaveWhitespace() + return self + + def ignore( self, other ): + if isinstance( other, Suppress ): + if other not in self.ignoreExprs: + super( ParseExpression, self).ignore( other ) + for e in self.exprs: + e.ignore( self.ignoreExprs[-1] ) + else: + super( ParseExpression, self).ignore( other ) + for e in self.exprs: + e.ignore( self.ignoreExprs[-1] ) + return self + + def __str__( self ): + try: + return super(ParseExpression,self).__str__() + except Exception: + pass + + if self.strRepr is None: + self.strRepr = "%s:(%s)" % ( self.__class__.__name__, _ustr(self.exprs) ) + return self.strRepr + + def streamline( self ): + super(ParseExpression,self).streamline() + + for e in self.exprs: + e.streamline() + + # collapse nested And's of the form And( And( And( a,b), c), d) to And( a,b,c,d ) + # but only if there are no parse actions or resultsNames on the nested And's + # (likewise for Or's and MatchFirst's) + if ( len(self.exprs) == 2 ): + other = self.exprs[0] + if ( isinstance( other, self.__class__ ) and + not(other.parseAction) and + other.resultsName is None and + not other.debug ): + self.exprs = other.exprs[:] + [ self.exprs[1] ] + self.strRepr = None + self.mayReturnEmpty |= other.mayReturnEmpty + self.mayIndexError |= other.mayIndexError + + other = self.exprs[-1] + if ( isinstance( other, self.__class__ ) and + not(other.parseAction) and + other.resultsName is None and + not other.debug ): + self.exprs = self.exprs[:-1] + other.exprs[:] + self.strRepr = None + self.mayReturnEmpty |= other.mayReturnEmpty + self.mayIndexError |= other.mayIndexError + + self.errmsg = "Expected " + _ustr(self) + + return self + + def setResultsName( self, name, listAllMatches=False ): + ret = super(ParseExpression,self).setResultsName(name,listAllMatches) + return ret + + def validate( self, validateTrace=[] ): + tmp = validateTrace[:]+[self] + for e in self.exprs: + e.validate(tmp) + self.checkRecursion( [] ) + + def copy(self): + ret = super(ParseExpression,self).copy() + ret.exprs = [e.copy() for e in self.exprs] + return ret + +class And(ParseExpression): + """ + Requires all given C{ParseExpression}s to be found in the given order. + Expressions may be separated by whitespace. + May be constructed using the C{'+'} operator. + May also be constructed using the C{'-'} operator, which will suppress backtracking. + + Example:: + integer = Word(nums) + name_expr = OneOrMore(Word(alphas)) + + expr = And([integer("id"),name_expr("name"),integer("age")]) + # more easily written as: + expr = integer("id") + name_expr("name") + integer("age") + """ + + class _ErrorStop(Empty): + def __init__(self, *args, **kwargs): + super(And._ErrorStop,self).__init__(*args, **kwargs) + self.name = '-' + self.leaveWhitespace() + + def __init__( self, exprs, savelist = True ): + super(And,self).__init__(exprs, savelist) + self.mayReturnEmpty = all(e.mayReturnEmpty for e in self.exprs) + self.setWhitespaceChars( self.exprs[0].whiteChars ) + self.skipWhitespace = self.exprs[0].skipWhitespace + self.callPreparse = True + + def parseImpl( self, instring, loc, doActions=True ): + # pass False as last arg to _parse for first element, since we already + # pre-parsed the string as part of our And pre-parsing + loc, resultlist = self.exprs[0]._parse( instring, loc, doActions, callPreParse=False ) + errorStop = False + for e in self.exprs[1:]: + if isinstance(e, And._ErrorStop): + errorStop = True + continue + if errorStop: + try: + loc, exprtokens = e._parse( instring, loc, doActions ) + except ParseSyntaxException: + raise + except ParseBaseException as pe: + pe.__traceback__ = None + raise ParseSyntaxException._from_exception(pe) + except IndexError: + raise ParseSyntaxException(instring, len(instring), self.errmsg, self) + else: + loc, exprtokens = e._parse( instring, loc, doActions ) + if exprtokens or exprtokens.haskeys(): + resultlist += exprtokens + return loc, resultlist + + def __iadd__(self, other ): + if isinstance( other, basestring ): + other = ParserElement._literalStringClass( other ) + return self.append( other ) #And( [ self, other ] ) + + def checkRecursion( self, parseElementList ): + subRecCheckList = parseElementList[:] + [ self ] + for e in self.exprs: + e.checkRecursion( subRecCheckList ) + if not e.mayReturnEmpty: + break + + def __str__( self ): + if hasattr(self,"name"): + return self.name + + if self.strRepr is None: + self.strRepr = "{" + " ".join(_ustr(e) for e in self.exprs) + "}" + + return self.strRepr + + +class Or(ParseExpression): + """ + Requires that at least one C{ParseExpression} is found. + If two expressions match, the expression that matches the longest string will be used. + May be constructed using the C{'^'} operator. + + Example:: + # construct Or using '^' operator + + number = Word(nums) ^ Combine(Word(nums) + '.' + Word(nums)) + print(number.searchString("123 3.1416 789")) + prints:: + [['123'], ['3.1416'], ['789']] + """ + def __init__( self, exprs, savelist = False ): + super(Or,self).__init__(exprs, savelist) + if self.exprs: + self.mayReturnEmpty = any(e.mayReturnEmpty for e in self.exprs) + else: + self.mayReturnEmpty = True + + def parseImpl( self, instring, loc, doActions=True ): + maxExcLoc = -1 + maxException = None + matches = [] + for e in self.exprs: + try: + loc2 = e.tryParse( instring, loc ) + except ParseException as err: + err.__traceback__ = None + if err.loc > maxExcLoc: + maxException = err + maxExcLoc = err.loc + except IndexError: + if len(instring) > maxExcLoc: + maxException = ParseException(instring,len(instring),e.errmsg,self) + maxExcLoc = len(instring) + else: + # save match among all matches, to retry longest to shortest + matches.append((loc2, e)) + + if matches: + matches.sort(key=lambda x: -x[0]) + for _,e in matches: + try: + return e._parse( instring, loc, doActions ) + except ParseException as err: + err.__traceback__ = None + if err.loc > maxExcLoc: + maxException = err + maxExcLoc = err.loc + + if maxException is not None: + maxException.msg = self.errmsg + raise maxException + else: + raise ParseException(instring, loc, "no defined alternatives to match", self) + + + def __ixor__(self, other ): + if isinstance( other, basestring ): + other = ParserElement._literalStringClass( other ) + return self.append( other ) #Or( [ self, other ] ) + + def __str__( self ): + if hasattr(self,"name"): + return self.name + + if self.strRepr is None: + self.strRepr = "{" + " ^ ".join(_ustr(e) for e in self.exprs) + "}" + + return self.strRepr + + def checkRecursion( self, parseElementList ): + subRecCheckList = parseElementList[:] + [ self ] + for e in self.exprs: + e.checkRecursion( subRecCheckList ) + + +class MatchFirst(ParseExpression): + """ + Requires that at least one C{ParseExpression} is found. + If two expressions match, the first one listed is the one that will match. + May be constructed using the C{'|'} operator. + + Example:: + # construct MatchFirst using '|' operator + + # watch the order of expressions to match + number = Word(nums) | Combine(Word(nums) + '.' + Word(nums)) + print(number.searchString("123 3.1416 789")) # Fail! -> [['123'], ['3'], ['1416'], ['789']] + + # put more selective expression first + number = Combine(Word(nums) + '.' + Word(nums)) | Word(nums) + print(number.searchString("123 3.1416 789")) # Better -> [['123'], ['3.1416'], ['789']] + """ + def __init__( self, exprs, savelist = False ): + super(MatchFirst,self).__init__(exprs, savelist) + if self.exprs: + self.mayReturnEmpty = any(e.mayReturnEmpty for e in self.exprs) + else: + self.mayReturnEmpty = True + + def parseImpl( self, instring, loc, doActions=True ): + maxExcLoc = -1 + maxException = None + for e in self.exprs: + try: + ret = e._parse( instring, loc, doActions ) + return ret + except ParseException as err: + if err.loc > maxExcLoc: + maxException = err + maxExcLoc = err.loc + except IndexError: + if len(instring) > maxExcLoc: + maxException = ParseException(instring,len(instring),e.errmsg,self) + maxExcLoc = len(instring) + + # only got here if no expression matched, raise exception for match that made it the furthest + else: + if maxException is not None: + maxException.msg = self.errmsg + raise maxException + else: + raise ParseException(instring, loc, "no defined alternatives to match", self) + + def __ior__(self, other ): + if isinstance( other, basestring ): + other = ParserElement._literalStringClass( other ) + return self.append( other ) #MatchFirst( [ self, other ] ) + + def __str__( self ): + if hasattr(self,"name"): + return self.name + + if self.strRepr is None: + self.strRepr = "{" + " | ".join(_ustr(e) for e in self.exprs) + "}" + + return self.strRepr + + def checkRecursion( self, parseElementList ): + subRecCheckList = parseElementList[:] + [ self ] + for e in self.exprs: + e.checkRecursion( subRecCheckList ) + + +class Each(ParseExpression): + """ + Requires all given C{ParseExpression}s to be found, but in any order. + Expressions may be separated by whitespace. + May be constructed using the C{'&'} operator. + + Example:: + color = oneOf("RED ORANGE YELLOW GREEN BLUE PURPLE BLACK WHITE BROWN") + shape_type = oneOf("SQUARE CIRCLE TRIANGLE STAR HEXAGON OCTAGON") + integer = Word(nums) + shape_attr = "shape:" + shape_type("shape") + posn_attr = "posn:" + Group(integer("x") + ',' + integer("y"))("posn") + color_attr = "color:" + color("color") + size_attr = "size:" + integer("size") + + # use Each (using operator '&') to accept attributes in any order + # (shape and posn are required, color and size are optional) + shape_spec = shape_attr & posn_attr & Optional(color_attr) & Optional(size_attr) + + shape_spec.runTests(''' + shape: SQUARE color: BLACK posn: 100, 120 + shape: CIRCLE size: 50 color: BLUE posn: 50,80 + color:GREEN size:20 shape:TRIANGLE posn:20,40 + ''' + ) + prints:: + shape: SQUARE color: BLACK posn: 100, 120 + ['shape:', 'SQUARE', 'color:', 'BLACK', 'posn:', ['100', ',', '120']] + - color: BLACK + - posn: ['100', ',', '120'] + - x: 100 + - y: 120 + - shape: SQUARE + + + shape: CIRCLE size: 50 color: BLUE posn: 50,80 + ['shape:', 'CIRCLE', 'size:', '50', 'color:', 'BLUE', 'posn:', ['50', ',', '80']] + - color: BLUE + - posn: ['50', ',', '80'] + - x: 50 + - y: 80 + - shape: CIRCLE + - size: 50 + + + color: GREEN size: 20 shape: TRIANGLE posn: 20,40 + ['color:', 'GREEN', 'size:', '20', 'shape:', 'TRIANGLE', 'posn:', ['20', ',', '40']] + - color: GREEN + - posn: ['20', ',', '40'] + - x: 20 + - y: 40 + - shape: TRIANGLE + - size: 20 + """ + def __init__( self, exprs, savelist = True ): + super(Each,self).__init__(exprs, savelist) + self.mayReturnEmpty = all(e.mayReturnEmpty for e in self.exprs) + self.skipWhitespace = True + self.initExprGroups = True + + def parseImpl( self, instring, loc, doActions=True ): + if self.initExprGroups: + self.opt1map = dict((id(e.expr),e) for e in self.exprs if isinstance(e,Optional)) + opt1 = [ e.expr for e in self.exprs if isinstance(e,Optional) ] + opt2 = [ e for e in self.exprs if e.mayReturnEmpty and not isinstance(e,Optional)] + self.optionals = opt1 + opt2 + self.multioptionals = [ e.expr for e in self.exprs if isinstance(e,ZeroOrMore) ] + self.multirequired = [ e.expr for e in self.exprs if isinstance(e,OneOrMore) ] + self.required = [ e for e in self.exprs if not isinstance(e,(Optional,ZeroOrMore,OneOrMore)) ] + self.required += self.multirequired + self.initExprGroups = False + tmpLoc = loc + tmpReqd = self.required[:] + tmpOpt = self.optionals[:] + matchOrder = [] + + keepMatching = True + while keepMatching: + tmpExprs = tmpReqd + tmpOpt + self.multioptionals + self.multirequired + failed = [] + for e in tmpExprs: + try: + tmpLoc = e.tryParse( instring, tmpLoc ) + except ParseException: + failed.append(e) + else: + matchOrder.append(self.opt1map.get(id(e),e)) + if e in tmpReqd: + tmpReqd.remove(e) + elif e in tmpOpt: + tmpOpt.remove(e) + if len(failed) == len(tmpExprs): + keepMatching = False + + if tmpReqd: + missing = ", ".join(_ustr(e) for e in tmpReqd) + raise ParseException(instring,loc,"Missing one or more required elements (%s)" % missing ) + + # add any unmatched Optionals, in case they have default values defined + matchOrder += [e for e in self.exprs if isinstance(e,Optional) and e.expr in tmpOpt] + + resultlist = [] + for e in matchOrder: + loc,results = e._parse(instring,loc,doActions) + resultlist.append(results) + + finalResults = sum(resultlist, ParseResults([])) + return loc, finalResults + + def __str__( self ): + if hasattr(self,"name"): + return self.name + + if self.strRepr is None: + self.strRepr = "{" + " & ".join(_ustr(e) for e in self.exprs) + "}" + + return self.strRepr + + def checkRecursion( self, parseElementList ): + subRecCheckList = parseElementList[:] + [ self ] + for e in self.exprs: + e.checkRecursion( subRecCheckList ) + + +class ParseElementEnhance(ParserElement): + """ + Abstract subclass of C{ParserElement}, for combining and post-processing parsed tokens. + """ + def __init__( self, expr, savelist=False ): + super(ParseElementEnhance,self).__init__(savelist) + if isinstance( expr, basestring ): + if issubclass(ParserElement._literalStringClass, Token): + expr = ParserElement._literalStringClass(expr) + else: + expr = ParserElement._literalStringClass(Literal(expr)) + self.expr = expr + self.strRepr = None + if expr is not None: + self.mayIndexError = expr.mayIndexError + self.mayReturnEmpty = expr.mayReturnEmpty + self.setWhitespaceChars( expr.whiteChars ) + self.skipWhitespace = expr.skipWhitespace + self.saveAsList = expr.saveAsList + self.callPreparse = expr.callPreparse + self.ignoreExprs.extend(expr.ignoreExprs) + + def parseImpl( self, instring, loc, doActions=True ): + if self.expr is not None: + return self.expr._parse( instring, loc, doActions, callPreParse=False ) + else: + raise ParseException("",loc,self.errmsg,self) + + def leaveWhitespace( self ): + self.skipWhitespace = False + self.expr = self.expr.copy() + if self.expr is not None: + self.expr.leaveWhitespace() + return self + + def ignore( self, other ): + if isinstance( other, Suppress ): + if other not in self.ignoreExprs: + super( ParseElementEnhance, self).ignore( other ) + if self.expr is not None: + self.expr.ignore( self.ignoreExprs[-1] ) + else: + super( ParseElementEnhance, self).ignore( other ) + if self.expr is not None: + self.expr.ignore( self.ignoreExprs[-1] ) + return self + + def streamline( self ): + super(ParseElementEnhance,self).streamline() + if self.expr is not None: + self.expr.streamline() + return self + + def checkRecursion( self, parseElementList ): + if self in parseElementList: + raise RecursiveGrammarException( parseElementList+[self] ) + subRecCheckList = parseElementList[:] + [ self ] + if self.expr is not None: + self.expr.checkRecursion( subRecCheckList ) + + def validate( self, validateTrace=[] ): + tmp = validateTrace[:]+[self] + if self.expr is not None: + self.expr.validate(tmp) + self.checkRecursion( [] ) + + def __str__( self ): + try: + return super(ParseElementEnhance,self).__str__() + except Exception: + pass + + if self.strRepr is None and self.expr is not None: + self.strRepr = "%s:(%s)" % ( self.__class__.__name__, _ustr(self.expr) ) + return self.strRepr + + +class FollowedBy(ParseElementEnhance): + """ + Lookahead matching of the given parse expression. C{FollowedBy} + does I{not} advance the parsing position within the input string, it only + verifies that the specified parse expression matches at the current + position. C{FollowedBy} always returns a null token list. + + Example:: + # use FollowedBy to match a label only if it is followed by a ':' + data_word = Word(alphas) + label = data_word + FollowedBy(':') + attr_expr = Group(label + Suppress(':') + OneOrMore(data_word, stopOn=label).setParseAction(' '.join)) + + OneOrMore(attr_expr).parseString("shape: SQUARE color: BLACK posn: upper left").pprint() + prints:: + [['shape', 'SQUARE'], ['color', 'BLACK'], ['posn', 'upper left']] + """ + def __init__( self, expr ): + super(FollowedBy,self).__init__(expr) + self.mayReturnEmpty = True + + def parseImpl( self, instring, loc, doActions=True ): + self.expr.tryParse( instring, loc ) + return loc, [] + + +class NotAny(ParseElementEnhance): + """ + Lookahead to disallow matching with the given parse expression. C{NotAny} + does I{not} advance the parsing position within the input string, it only + verifies that the specified parse expression does I{not} match at the current + position. Also, C{NotAny} does I{not} skip over leading whitespace. C{NotAny} + always returns a null token list. May be constructed using the '~' operator. + + Example:: + + """ + def __init__( self, expr ): + super(NotAny,self).__init__(expr) + #~ self.leaveWhitespace() + self.skipWhitespace = False # do NOT use self.leaveWhitespace(), don't want to propagate to exprs + self.mayReturnEmpty = True + self.errmsg = "Found unwanted token, "+_ustr(self.expr) + + def parseImpl( self, instring, loc, doActions=True ): + if self.expr.canParseNext(instring, loc): + raise ParseException(instring, loc, self.errmsg, self) + return loc, [] + + def __str__( self ): + if hasattr(self,"name"): + return self.name + + if self.strRepr is None: + self.strRepr = "~{" + _ustr(self.expr) + "}" + + return self.strRepr + +class _MultipleMatch(ParseElementEnhance): + def __init__( self, expr, stopOn=None): + super(_MultipleMatch, self).__init__(expr) + self.saveAsList = True + ender = stopOn + if isinstance(ender, basestring): + ender = ParserElement._literalStringClass(ender) + self.not_ender = ~ender if ender is not None else None + + def parseImpl( self, instring, loc, doActions=True ): + self_expr_parse = self.expr._parse + self_skip_ignorables = self._skipIgnorables + check_ender = self.not_ender is not None + if check_ender: + try_not_ender = self.not_ender.tryParse + + # must be at least one (but first see if we are the stopOn sentinel; + # if so, fail) + if check_ender: + try_not_ender(instring, loc) + loc, tokens = self_expr_parse( instring, loc, doActions, callPreParse=False ) + try: + hasIgnoreExprs = (not not self.ignoreExprs) + while 1: + if check_ender: + try_not_ender(instring, loc) + if hasIgnoreExprs: + preloc = self_skip_ignorables( instring, loc ) + else: + preloc = loc + loc, tmptokens = self_expr_parse( instring, preloc, doActions ) + if tmptokens or tmptokens.haskeys(): + tokens += tmptokens + except (ParseException,IndexError): + pass + + return loc, tokens + +class OneOrMore(_MultipleMatch): + """ + Repetition of one or more of the given expression. + + Parameters: + - expr - expression that must match one or more times + - stopOn - (default=C{None}) - expression for a terminating sentinel + (only required if the sentinel would ordinarily match the repetition + expression) + + Example:: + data_word = Word(alphas) + label = data_word + FollowedBy(':') + attr_expr = Group(label + Suppress(':') + OneOrMore(data_word).setParseAction(' '.join)) + + text = "shape: SQUARE posn: upper left color: BLACK" + OneOrMore(attr_expr).parseString(text).pprint() # Fail! read 'color' as data instead of next label -> [['shape', 'SQUARE color']] + + # use stopOn attribute for OneOrMore to avoid reading label string as part of the data + attr_expr = Group(label + Suppress(':') + OneOrMore(data_word, stopOn=label).setParseAction(' '.join)) + OneOrMore(attr_expr).parseString(text).pprint() # Better -> [['shape', 'SQUARE'], ['posn', 'upper left'], ['color', 'BLACK']] + + # could also be written as + (attr_expr * (1,)).parseString(text).pprint() + """ + + def __str__( self ): + if hasattr(self,"name"): + return self.name + + if self.strRepr is None: + self.strRepr = "{" + _ustr(self.expr) + "}..." + + return self.strRepr + +class ZeroOrMore(_MultipleMatch): + """ + Optional repetition of zero or more of the given expression. + + Parameters: + - expr - expression that must match zero or more times + - stopOn - (default=C{None}) - expression for a terminating sentinel + (only required if the sentinel would ordinarily match the repetition + expression) + + Example: similar to L{OneOrMore} + """ + def __init__( self, expr, stopOn=None): + super(ZeroOrMore,self).__init__(expr, stopOn=stopOn) + self.mayReturnEmpty = True + + def parseImpl( self, instring, loc, doActions=True ): + try: + return super(ZeroOrMore, self).parseImpl(instring, loc, doActions) + except (ParseException,IndexError): + return loc, [] + + def __str__( self ): + if hasattr(self,"name"): + return self.name + + if self.strRepr is None: + self.strRepr = "[" + _ustr(self.expr) + "]..." + + return self.strRepr + +class _NullToken(object): + def __bool__(self): + return False + __nonzero__ = __bool__ + def __str__(self): + return "" + +_optionalNotMatched = _NullToken() +class Optional(ParseElementEnhance): + """ + Optional matching of the given expression. + + Parameters: + - expr - expression that must match zero or more times + - default (optional) - value to be returned if the optional expression is not found. + + Example:: + # US postal code can be a 5-digit zip, plus optional 4-digit qualifier + zip = Combine(Word(nums, exact=5) + Optional('-' + Word(nums, exact=4))) + zip.runTests(''' + # traditional ZIP code + 12345 + + # ZIP+4 form + 12101-0001 + + # invalid ZIP + 98765- + ''') + prints:: + # traditional ZIP code + 12345 + ['12345'] + + # ZIP+4 form + 12101-0001 + ['12101-0001'] + + # invalid ZIP + 98765- + ^ + FAIL: Expected end of text (at char 5), (line:1, col:6) + """ + def __init__( self, expr, default=_optionalNotMatched ): + super(Optional,self).__init__( expr, savelist=False ) + self.saveAsList = self.expr.saveAsList + self.defaultValue = default + self.mayReturnEmpty = True + + def parseImpl( self, instring, loc, doActions=True ): + try: + loc, tokens = self.expr._parse( instring, loc, doActions, callPreParse=False ) + except (ParseException,IndexError): + if self.defaultValue is not _optionalNotMatched: + if self.expr.resultsName: + tokens = ParseResults([ self.defaultValue ]) + tokens[self.expr.resultsName] = self.defaultValue + else: + tokens = [ self.defaultValue ] + else: + tokens = [] + return loc, tokens + + def __str__( self ): + if hasattr(self,"name"): + return self.name + + if self.strRepr is None: + self.strRepr = "[" + _ustr(self.expr) + "]" + + return self.strRepr + +class SkipTo(ParseElementEnhance): + """ + Token for skipping over all undefined text until the matched expression is found. + + Parameters: + - expr - target expression marking the end of the data to be skipped + - include - (default=C{False}) if True, the target expression is also parsed + (the skipped text and target expression are returned as a 2-element list). + - ignore - (default=C{None}) used to define grammars (typically quoted strings and + comments) that might contain false matches to the target expression + - failOn - (default=C{None}) define expressions that are not allowed to be + included in the skipped test; if found before the target expression is found, + the SkipTo is not a match + + Example:: + report = ''' + Outstanding Issues Report - 1 Jan 2000 + + # | Severity | Description | Days Open + -----+----------+-------------------------------------------+----------- + 101 | Critical | Intermittent system crash | 6 + 94 | Cosmetic | Spelling error on Login ('log|n') | 14 + 79 | Minor | System slow when running too many reports | 47 + ''' + integer = Word(nums) + SEP = Suppress('|') + # use SkipTo to simply match everything up until the next SEP + # - ignore quoted strings, so that a '|' character inside a quoted string does not match + # - parse action will call token.strip() for each matched token, i.e., the description body + string_data = SkipTo(SEP, ignore=quotedString) + string_data.setParseAction(tokenMap(str.strip)) + ticket_expr = (integer("issue_num") + SEP + + string_data("sev") + SEP + + string_data("desc") + SEP + + integer("days_open")) + + for tkt in ticket_expr.searchString(report): + print tkt.dump() + prints:: + ['101', 'Critical', 'Intermittent system crash', '6'] + - days_open: 6 + - desc: Intermittent system crash + - issue_num: 101 + - sev: Critical + ['94', 'Cosmetic', "Spelling error on Login ('log|n')", '14'] + - days_open: 14 + - desc: Spelling error on Login ('log|n') + - issue_num: 94 + - sev: Cosmetic + ['79', 'Minor', 'System slow when running too many reports', '47'] + - days_open: 47 + - desc: System slow when running too many reports + - issue_num: 79 + - sev: Minor + """ + def __init__( self, other, include=False, ignore=None, failOn=None ): + super( SkipTo, self ).__init__( other ) + self.ignoreExpr = ignore + self.mayReturnEmpty = True + self.mayIndexError = False + self.includeMatch = include + self.asList = False + if isinstance(failOn, basestring): + self.failOn = ParserElement._literalStringClass(failOn) + else: + self.failOn = failOn + self.errmsg = "No match found for "+_ustr(self.expr) + + def parseImpl( self, instring, loc, doActions=True ): + startloc = loc + instrlen = len(instring) + expr = self.expr + expr_parse = self.expr._parse + self_failOn_canParseNext = self.failOn.canParseNext if self.failOn is not None else None + self_ignoreExpr_tryParse = self.ignoreExpr.tryParse if self.ignoreExpr is not None else None + + tmploc = loc + while tmploc <= instrlen: + if self_failOn_canParseNext is not None: + # break if failOn expression matches + if self_failOn_canParseNext(instring, tmploc): + break + + if self_ignoreExpr_tryParse is not None: + # advance past ignore expressions + while 1: + try: + tmploc = self_ignoreExpr_tryParse(instring, tmploc) + except ParseBaseException: + break + + try: + expr_parse(instring, tmploc, doActions=False, callPreParse=False) + except (ParseException, IndexError): + # no match, advance loc in string + tmploc += 1 + else: + # matched skipto expr, done + break + + else: + # ran off the end of the input string without matching skipto expr, fail + raise ParseException(instring, loc, self.errmsg, self) + + # build up return values + loc = tmploc + skiptext = instring[startloc:loc] + skipresult = ParseResults(skiptext) + + if self.includeMatch: + loc, mat = expr_parse(instring,loc,doActions,callPreParse=False) + skipresult += mat + + return loc, skipresult + +class Forward(ParseElementEnhance): + """ + Forward declaration of an expression to be defined later - + used for recursive grammars, such as algebraic infix notation. + When the expression is known, it is assigned to the C{Forward} variable using the '<<' operator. + + Note: take care when assigning to C{Forward} not to overlook precedence of operators. + Specifically, '|' has a lower precedence than '<<', so that:: + fwdExpr << a | b | c + will actually be evaluated as:: + (fwdExpr << a) | b | c + thereby leaving b and c out as parseable alternatives. It is recommended that you + explicitly group the values inserted into the C{Forward}:: + fwdExpr << (a | b | c) + Converting to use the '<<=' operator instead will avoid this problem. + + See L{ParseResults.pprint} for an example of a recursive parser created using + C{Forward}. + """ + def __init__( self, other=None ): + super(Forward,self).__init__( other, savelist=False ) + + def __lshift__( self, other ): + if isinstance( other, basestring ): + other = ParserElement._literalStringClass(other) + self.expr = other + self.strRepr = None + self.mayIndexError = self.expr.mayIndexError + self.mayReturnEmpty = self.expr.mayReturnEmpty + self.setWhitespaceChars( self.expr.whiteChars ) + self.skipWhitespace = self.expr.skipWhitespace + self.saveAsList = self.expr.saveAsList + self.ignoreExprs.extend(self.expr.ignoreExprs) + return self + + def __ilshift__(self, other): + return self << other + + def leaveWhitespace( self ): + self.skipWhitespace = False + return self + + def streamline( self ): + if not self.streamlined: + self.streamlined = True + if self.expr is not None: + self.expr.streamline() + return self + + def validate( self, validateTrace=[] ): + if self not in validateTrace: + tmp = validateTrace[:]+[self] + if self.expr is not None: + self.expr.validate(tmp) + self.checkRecursion([]) + + def __str__( self ): + if hasattr(self,"name"): + return self.name + return self.__class__.__name__ + ": ..." + + # stubbed out for now - creates awful memory and perf issues + self._revertClass = self.__class__ + self.__class__ = _ForwardNoRecurse + try: + if self.expr is not None: + retString = _ustr(self.expr) + else: + retString = "None" + finally: + self.__class__ = self._revertClass + return self.__class__.__name__ + ": " + retString + + def copy(self): + if self.expr is not None: + return super(Forward,self).copy() + else: + ret = Forward() + ret <<= self + return ret + +class _ForwardNoRecurse(Forward): + def __str__( self ): + return "..." + +class TokenConverter(ParseElementEnhance): + """ + Abstract subclass of C{ParseExpression}, for converting parsed results. + """ + def __init__( self, expr, savelist=False ): + super(TokenConverter,self).__init__( expr )#, savelist ) + self.saveAsList = False + +class Combine(TokenConverter): + """ + Converter to concatenate all matching tokens to a single string. + By default, the matching patterns must also be contiguous in the input string; + this can be disabled by specifying C{'adjacent=False'} in the constructor. + + Example:: + real = Word(nums) + '.' + Word(nums) + print(real.parseString('3.1416')) # -> ['3', '.', '1416'] + # will also erroneously match the following + print(real.parseString('3. 1416')) # -> ['3', '.', '1416'] + + real = Combine(Word(nums) + '.' + Word(nums)) + print(real.parseString('3.1416')) # -> ['3.1416'] + # no match when there are internal spaces + print(real.parseString('3. 1416')) # -> Exception: Expected W:(0123...) + """ + def __init__( self, expr, joinString="", adjacent=True ): + super(Combine,self).__init__( expr ) + # suppress whitespace-stripping in contained parse expressions, but re-enable it on the Combine itself + if adjacent: + self.leaveWhitespace() + self.adjacent = adjacent + self.skipWhitespace = True + self.joinString = joinString + self.callPreparse = True + + def ignore( self, other ): + if self.adjacent: + ParserElement.ignore(self, other) + else: + super( Combine, self).ignore( other ) + return self + + def postParse( self, instring, loc, tokenlist ): + retToks = tokenlist.copy() + del retToks[:] + retToks += ParseResults([ "".join(tokenlist._asStringList(self.joinString)) ], modal=self.modalResults) + + if self.resultsName and retToks.haskeys(): + return [ retToks ] + else: + return retToks + +class Group(TokenConverter): + """ + Converter to return the matched tokens as a list - useful for returning tokens of C{L{ZeroOrMore}} and C{L{OneOrMore}} expressions. + + Example:: + ident = Word(alphas) + num = Word(nums) + term = ident | num + func = ident + Optional(delimitedList(term)) + print(func.parseString("fn a,b,100")) # -> ['fn', 'a', 'b', '100'] + + func = ident + Group(Optional(delimitedList(term))) + print(func.parseString("fn a,b,100")) # -> ['fn', ['a', 'b', '100']] + """ + def __init__( self, expr ): + super(Group,self).__init__( expr ) + self.saveAsList = True + + def postParse( self, instring, loc, tokenlist ): + return [ tokenlist ] + +class Dict(TokenConverter): + """ + Converter to return a repetitive expression as a list, but also as a dictionary. + Each element can also be referenced using the first token in the expression as its key. + Useful for tabular report scraping when the first column can be used as a item key. + + Example:: + data_word = Word(alphas) + label = data_word + FollowedBy(':') + attr_expr = Group(label + Suppress(':') + OneOrMore(data_word).setParseAction(' '.join)) + + text = "shape: SQUARE posn: upper left color: light blue texture: burlap" + attr_expr = (label + Suppress(':') + OneOrMore(data_word, stopOn=label).setParseAction(' '.join)) + + # print attributes as plain groups + print(OneOrMore(attr_expr).parseString(text).dump()) + + # instead of OneOrMore(expr), parse using Dict(OneOrMore(Group(expr))) - Dict will auto-assign names + result = Dict(OneOrMore(Group(attr_expr))).parseString(text) + print(result.dump()) + + # access named fields as dict entries, or output as dict + print(result['shape']) + print(result.asDict()) + prints:: + ['shape', 'SQUARE', 'posn', 'upper left', 'color', 'light blue', 'texture', 'burlap'] + + [['shape', 'SQUARE'], ['posn', 'upper left'], ['color', 'light blue'], ['texture', 'burlap']] + - color: light blue + - posn: upper left + - shape: SQUARE + - texture: burlap + SQUARE + {'color': 'light blue', 'posn': 'upper left', 'texture': 'burlap', 'shape': 'SQUARE'} + See more examples at L{ParseResults} of accessing fields by results name. + """ + def __init__( self, expr ): + super(Dict,self).__init__( expr ) + self.saveAsList = True + + def postParse( self, instring, loc, tokenlist ): + for i,tok in enumerate(tokenlist): + if len(tok) == 0: + continue + ikey = tok[0] + if isinstance(ikey,int): + ikey = _ustr(tok[0]).strip() + if len(tok)==1: + tokenlist[ikey] = _ParseResultsWithOffset("",i) + elif len(tok)==2 and not isinstance(tok[1],ParseResults): + tokenlist[ikey] = _ParseResultsWithOffset(tok[1],i) + else: + dictvalue = tok.copy() #ParseResults(i) + del dictvalue[0] + if len(dictvalue)!= 1 or (isinstance(dictvalue,ParseResults) and dictvalue.haskeys()): + tokenlist[ikey] = _ParseResultsWithOffset(dictvalue,i) + else: + tokenlist[ikey] = _ParseResultsWithOffset(dictvalue[0],i) + + if self.resultsName: + return [ tokenlist ] + else: + return tokenlist + + +class Suppress(TokenConverter): + """ + Converter for ignoring the results of a parsed expression. + + Example:: + source = "a, b, c,d" + wd = Word(alphas) + wd_list1 = wd + ZeroOrMore(',' + wd) + print(wd_list1.parseString(source)) + + # often, delimiters that are useful during parsing are just in the + # way afterward - use Suppress to keep them out of the parsed output + wd_list2 = wd + ZeroOrMore(Suppress(',') + wd) + print(wd_list2.parseString(source)) + prints:: + ['a', ',', 'b', ',', 'c', ',', 'd'] + ['a', 'b', 'c', 'd'] + (See also L{delimitedList}.) + """ + def postParse( self, instring, loc, tokenlist ): + return [] + + def suppress( self ): + return self + + +class OnlyOnce(object): + """ + Wrapper for parse actions, to ensure they are only called once. + """ + def __init__(self, methodCall): + self.callable = _trim_arity(methodCall) + self.called = False + def __call__(self,s,l,t): + if not self.called: + results = self.callable(s,l,t) + self.called = True + return results + raise ParseException(s,l,"") + def reset(self): + self.called = False + +def traceParseAction(f): + """ + Decorator for debugging parse actions. + + When the parse action is called, this decorator will print C{">> entering I{method-name}(line:I{current_source_line}, I{parse_location}, I{matched_tokens})".} + When the parse action completes, the decorator will print C{"<<"} followed by the returned value, or any exception that the parse action raised. + + Example:: + wd = Word(alphas) + + @traceParseAction + def remove_duplicate_chars(tokens): + return ''.join(sorted(set(''.join(tokens))) + + wds = OneOrMore(wd).setParseAction(remove_duplicate_chars) + print(wds.parseString("slkdjs sld sldd sdlf sdljf")) + prints:: + >>entering remove_duplicate_chars(line: 'slkdjs sld sldd sdlf sdljf', 0, (['slkdjs', 'sld', 'sldd', 'sdlf', 'sdljf'], {})) + <<leaving remove_duplicate_chars (ret: 'dfjkls') + ['dfjkls'] + """ + f = _trim_arity(f) + def z(*paArgs): + thisFunc = f.__name__ + s,l,t = paArgs[-3:] + if len(paArgs)>3: + thisFunc = paArgs[0].__class__.__name__ + '.' + thisFunc + sys.stderr.write( ">>entering %s(line: '%s', %d, %r)\n" % (thisFunc,line(l,s),l,t) ) + try: + ret = f(*paArgs) + except Exception as exc: + sys.stderr.write( "<<leaving %s (exception: %s)\n" % (thisFunc,exc) ) + raise + sys.stderr.write( "<<leaving %s (ret: %r)\n" % (thisFunc,ret) ) + return ret + try: + z.__name__ = f.__name__ + except AttributeError: + pass + return z + +# +# global helpers +# +def delimitedList( expr, delim=",", combine=False ): + """ + Helper to define a delimited list of expressions - the delimiter defaults to ','. + By default, the list elements and delimiters can have intervening whitespace, and + comments, but this can be overridden by passing C{combine=True} in the constructor. + If C{combine} is set to C{True}, the matching tokens are returned as a single token + string, with the delimiters included; otherwise, the matching tokens are returned + as a list of tokens, with the delimiters suppressed. + + Example:: + delimitedList(Word(alphas)).parseString("aa,bb,cc") # -> ['aa', 'bb', 'cc'] + delimitedList(Word(hexnums), delim=':', combine=True).parseString("AA:BB:CC:DD:EE") # -> ['AA:BB:CC:DD:EE'] + """ + dlName = _ustr(expr)+" ["+_ustr(delim)+" "+_ustr(expr)+"]..." + if combine: + return Combine( expr + ZeroOrMore( delim + expr ) ).setName(dlName) + else: + return ( expr + ZeroOrMore( Suppress( delim ) + expr ) ).setName(dlName) + +def countedArray( expr, intExpr=None ): + """ + Helper to define a counted list of expressions. + This helper defines a pattern of the form:: + integer expr expr expr... + where the leading integer tells how many expr expressions follow. + The matched tokens returns the array of expr tokens as a list - the leading count token is suppressed. + + If C{intExpr} is specified, it should be a pyparsing expression that produces an integer value. + + Example:: + countedArray(Word(alphas)).parseString('2 ab cd ef') # -> ['ab', 'cd'] + + # in this parser, the leading integer value is given in binary, + # '10' indicating that 2 values are in the array + binaryConstant = Word('01').setParseAction(lambda t: int(t[0], 2)) + countedArray(Word(alphas), intExpr=binaryConstant).parseString('10 ab cd ef') # -> ['ab', 'cd'] + """ + arrayExpr = Forward() + def countFieldParseAction(s,l,t): + n = t[0] + arrayExpr << (n and Group(And([expr]*n)) or Group(empty)) + return [] + if intExpr is None: + intExpr = Word(nums).setParseAction(lambda t:int(t[0])) + else: + intExpr = intExpr.copy() + intExpr.setName("arrayLen") + intExpr.addParseAction(countFieldParseAction, callDuringTry=True) + return ( intExpr + arrayExpr ).setName('(len) ' + _ustr(expr) + '...') + +def _flatten(L): + ret = [] + for i in L: + if isinstance(i,list): + ret.extend(_flatten(i)) + else: + ret.append(i) + return ret + +def matchPreviousLiteral(expr): + """ + Helper to define an expression that is indirectly defined from + the tokens matched in a previous expression, that is, it looks + for a 'repeat' of a previous expression. For example:: + first = Word(nums) + second = matchPreviousLiteral(first) + matchExpr = first + ":" + second + will match C{"1:1"}, but not C{"1:2"}. Because this matches a + previous literal, will also match the leading C{"1:1"} in C{"1:10"}. + If this is not desired, use C{matchPreviousExpr}. + Do I{not} use with packrat parsing enabled. + """ + rep = Forward() + def copyTokenToRepeater(s,l,t): + if t: + if len(t) == 1: + rep << t[0] + else: + # flatten t tokens + tflat = _flatten(t.asList()) + rep << And(Literal(tt) for tt in tflat) + else: + rep << Empty() + expr.addParseAction(copyTokenToRepeater, callDuringTry=True) + rep.setName('(prev) ' + _ustr(expr)) + return rep + +def matchPreviousExpr(expr): + """ + Helper to define an expression that is indirectly defined from + the tokens matched in a previous expression, that is, it looks + for a 'repeat' of a previous expression. For example:: + first = Word(nums) + second = matchPreviousExpr(first) + matchExpr = first + ":" + second + will match C{"1:1"}, but not C{"1:2"}. Because this matches by + expressions, will I{not} match the leading C{"1:1"} in C{"1:10"}; + the expressions are evaluated first, and then compared, so + C{"1"} is compared with C{"10"}. + Do I{not} use with packrat parsing enabled. + """ + rep = Forward() + e2 = expr.copy() + rep <<= e2 + def copyTokenToRepeater(s,l,t): + matchTokens = _flatten(t.asList()) + def mustMatchTheseTokens(s,l,t): + theseTokens = _flatten(t.asList()) + if theseTokens != matchTokens: + raise ParseException("",0,"") + rep.setParseAction( mustMatchTheseTokens, callDuringTry=True ) + expr.addParseAction(copyTokenToRepeater, callDuringTry=True) + rep.setName('(prev) ' + _ustr(expr)) + return rep + +def _escapeRegexRangeChars(s): + #~ escape these chars: ^-] + for c in r"\^-]": + s = s.replace(c,_bslash+c) + s = s.replace("\n",r"\n") + s = s.replace("\t",r"\t") + return _ustr(s) + +def oneOf( strs, caseless=False, useRegex=True ): + """ + Helper to quickly define a set of alternative Literals, and makes sure to do + longest-first testing when there is a conflict, regardless of the input order, + but returns a C{L{MatchFirst}} for best performance. + + Parameters: + - strs - a string of space-delimited literals, or a collection of string literals + - caseless - (default=C{False}) - treat all literals as caseless + - useRegex - (default=C{True}) - as an optimization, will generate a Regex + object; otherwise, will generate a C{MatchFirst} object (if C{caseless=True}, or + if creating a C{Regex} raises an exception) + + Example:: + comp_oper = oneOf("< = > <= >= !=") + var = Word(alphas) + number = Word(nums) + term = var | number + comparison_expr = term + comp_oper + term + print(comparison_expr.searchString("B = 12 AA=23 B<=AA AA>12")) + prints:: + [['B', '=', '12'], ['AA', '=', '23'], ['B', '<=', 'AA'], ['AA', '>', '12']] + """ + if caseless: + isequal = ( lambda a,b: a.upper() == b.upper() ) + masks = ( lambda a,b: b.upper().startswith(a.upper()) ) + parseElementClass = CaselessLiteral + else: + isequal = ( lambda a,b: a == b ) + masks = ( lambda a,b: b.startswith(a) ) + parseElementClass = Literal + + symbols = [] + if isinstance(strs,basestring): + symbols = strs.split() + elif isinstance(strs, collections.Iterable): + symbols = list(strs) + else: + warnings.warn("Invalid argument to oneOf, expected string or iterable", + SyntaxWarning, stacklevel=2) + if not symbols: + return NoMatch() + + i = 0 + while i < len(symbols)-1: + cur = symbols[i] + for j,other in enumerate(symbols[i+1:]): + if ( isequal(other, cur) ): + del symbols[i+j+1] + break + elif ( masks(cur, other) ): + del symbols[i+j+1] + symbols.insert(i,other) + cur = other + break + else: + i += 1 + + if not caseless and useRegex: + #~ print (strs,"->", "|".join( [ _escapeRegexChars(sym) for sym in symbols] )) + try: + if len(symbols)==len("".join(symbols)): + return Regex( "[%s]" % "".join(_escapeRegexRangeChars(sym) for sym in symbols) ).setName(' | '.join(symbols)) + else: + return Regex( "|".join(re.escape(sym) for sym in symbols) ).setName(' | '.join(symbols)) + except Exception: + warnings.warn("Exception creating Regex for oneOf, building MatchFirst", + SyntaxWarning, stacklevel=2) + + + # last resort, just use MatchFirst + return MatchFirst(parseElementClass(sym) for sym in symbols).setName(' | '.join(symbols)) + +def dictOf( key, value ): + """ + Helper to easily and clearly define a dictionary by specifying the respective patterns + for the key and value. Takes care of defining the C{L{Dict}}, C{L{ZeroOrMore}}, and C{L{Group}} tokens + in the proper order. The key pattern can include delimiting markers or punctuation, + as long as they are suppressed, thereby leaving the significant key text. The value + pattern can include named results, so that the C{Dict} results can include named token + fields. + + Example:: + text = "shape: SQUARE posn: upper left color: light blue texture: burlap" + attr_expr = (label + Suppress(':') + OneOrMore(data_word, stopOn=label).setParseAction(' '.join)) + print(OneOrMore(attr_expr).parseString(text).dump()) + + attr_label = label + attr_value = Suppress(':') + OneOrMore(data_word, stopOn=label).setParseAction(' '.join) + + # similar to Dict, but simpler call format + result = dictOf(attr_label, attr_value).parseString(text) + print(result.dump()) + print(result['shape']) + print(result.shape) # object attribute access works too + print(result.asDict()) + prints:: + [['shape', 'SQUARE'], ['posn', 'upper left'], ['color', 'light blue'], ['texture', 'burlap']] + - color: light blue + - posn: upper left + - shape: SQUARE + - texture: burlap + SQUARE + SQUARE + {'color': 'light blue', 'shape': 'SQUARE', 'posn': 'upper left', 'texture': 'burlap'} + """ + return Dict( ZeroOrMore( Group ( key + value ) ) ) + +def originalTextFor(expr, asString=True): + """ + Helper to return the original, untokenized text for a given expression. Useful to + restore the parsed fields of an HTML start tag into the raw tag text itself, or to + revert separate tokens with intervening whitespace back to the original matching + input text. By default, returns astring containing the original parsed text. + + If the optional C{asString} argument is passed as C{False}, then the return value is a + C{L{ParseResults}} containing any results names that were originally matched, and a + single token containing the original matched text from the input string. So if + the expression passed to C{L{originalTextFor}} contains expressions with defined + results names, you must set C{asString} to C{False} if you want to preserve those + results name values. + + Example:: + src = "this is test <b> bold <i>text</i> </b> normal text " + for tag in ("b","i"): + opener,closer = makeHTMLTags(tag) + patt = originalTextFor(opener + SkipTo(closer) + closer) + print(patt.searchString(src)[0]) + prints:: + ['<b> bold <i>text</i> </b>'] + ['<i>text</i>'] + """ + locMarker = Empty().setParseAction(lambda s,loc,t: loc) + endlocMarker = locMarker.copy() + endlocMarker.callPreparse = False + matchExpr = locMarker("_original_start") + expr + endlocMarker("_original_end") + if asString: + extractText = lambda s,l,t: s[t._original_start:t._original_end] + else: + def extractText(s,l,t): + t[:] = [s[t.pop('_original_start'):t.pop('_original_end')]] + matchExpr.setParseAction(extractText) + matchExpr.ignoreExprs = expr.ignoreExprs + return matchExpr + +def ungroup(expr): + """ + Helper to undo pyparsing's default grouping of And expressions, even + if all but one are non-empty. + """ + return TokenConverter(expr).setParseAction(lambda t:t[0]) + +def locatedExpr(expr): + """ + Helper to decorate a returned token with its starting and ending locations in the input string. + This helper adds the following results names: + - locn_start = location where matched expression begins + - locn_end = location where matched expression ends + - value = the actual parsed results + + Be careful if the input text contains C{<TAB>} characters, you may want to call + C{L{ParserElement.parseWithTabs}} + + Example:: + wd = Word(alphas) + for match in locatedExpr(wd).searchString("ljsdf123lksdjjf123lkkjj1222"): + print(match) + prints:: + [[0, 'ljsdf', 5]] + [[8, 'lksdjjf', 15]] + [[18, 'lkkjj', 23]] + """ + locator = Empty().setParseAction(lambda s,l,t: l) + return Group(locator("locn_start") + expr("value") + locator.copy().leaveWhitespace()("locn_end")) + + +# convenience constants for positional expressions +empty = Empty().setName("empty") +lineStart = LineStart().setName("lineStart") +lineEnd = LineEnd().setName("lineEnd") +stringStart = StringStart().setName("stringStart") +stringEnd = StringEnd().setName("stringEnd") + +_escapedPunc = Word( _bslash, r"\[]-*.$+^?()~ ", exact=2 ).setParseAction(lambda s,l,t:t[0][1]) +_escapedHexChar = Regex(r"\\0?[xX][0-9a-fA-F]+").setParseAction(lambda s,l,t:unichr(int(t[0].lstrip(r'\0x'),16))) +_escapedOctChar = Regex(r"\\0[0-7]+").setParseAction(lambda s,l,t:unichr(int(t[0][1:],8))) +_singleChar = _escapedPunc | _escapedHexChar | _escapedOctChar | Word(printables, excludeChars=r'\]', exact=1) | Regex(r"\w", re.UNICODE) +_charRange = Group(_singleChar + Suppress("-") + _singleChar) +_reBracketExpr = Literal("[") + Optional("^").setResultsName("negate") + Group( OneOrMore( _charRange | _singleChar ) ).setResultsName("body") + "]" + +def srange(s): + r""" + Helper to easily define string ranges for use in Word construction. Borrows + syntax from regexp '[]' string range definitions:: + srange("[0-9]") -> "0123456789" + srange("[a-z]") -> "abcdefghijklmnopqrstuvwxyz" + srange("[a-z$_]") -> "abcdefghijklmnopqrstuvwxyz$_" + The input string must be enclosed in []'s, and the returned string is the expanded + character set joined into a single string. + The values enclosed in the []'s may be: + - a single character + - an escaped character with a leading backslash (such as C{\-} or C{\]}) + - an escaped hex character with a leading C{'\x'} (C{\x21}, which is a C{'!'} character) + (C{\0x##} is also supported for backwards compatibility) + - an escaped octal character with a leading C{'\0'} (C{\041}, which is a C{'!'} character) + - a range of any of the above, separated by a dash (C{'a-z'}, etc.) + - any combination of the above (C{'aeiouy'}, C{'a-zA-Z0-9_$'}, etc.) + """ + _expanded = lambda p: p if not isinstance(p,ParseResults) else ''.join(unichr(c) for c in range(ord(p[0]),ord(p[1])+1)) + try: + return "".join(_expanded(part) for part in _reBracketExpr.parseString(s).body) + except Exception: + return "" + +def matchOnlyAtCol(n): + """ + Helper method for defining parse actions that require matching at a specific + column in the input text. + """ + def verifyCol(strg,locn,toks): + if col(locn,strg) != n: + raise ParseException(strg,locn,"matched token not at column %d" % n) + return verifyCol + +def replaceWith(replStr): + """ + Helper method for common parse actions that simply return a literal value. Especially + useful when used with C{L{transformString<ParserElement.transformString>}()}. + + Example:: + num = Word(nums).setParseAction(lambda toks: int(toks[0])) + na = oneOf("N/A NA").setParseAction(replaceWith(math.nan)) + term = na | num + + OneOrMore(term).parseString("324 234 N/A 234") # -> [324, 234, nan, 234] + """ + return lambda s,l,t: [replStr] + +def removeQuotes(s,l,t): + """ + Helper parse action for removing quotation marks from parsed quoted strings. + + Example:: + # by default, quotation marks are included in parsed results + quotedString.parseString("'Now is the Winter of our Discontent'") # -> ["'Now is the Winter of our Discontent'"] + + # use removeQuotes to strip quotation marks from parsed results + quotedString.setParseAction(removeQuotes) + quotedString.parseString("'Now is the Winter of our Discontent'") # -> ["Now is the Winter of our Discontent"] + """ + return t[0][1:-1] + +def tokenMap(func, *args): + """ + Helper to define a parse action by mapping a function to all elements of a ParseResults list.If any additional + args are passed, they are forwarded to the given function as additional arguments after + the token, as in C{hex_integer = Word(hexnums).setParseAction(tokenMap(int, 16))}, which will convert the + parsed data to an integer using base 16. + + Example (compare the last to example in L{ParserElement.transformString}:: + hex_ints = OneOrMore(Word(hexnums)).setParseAction(tokenMap(int, 16)) + hex_ints.runTests(''' + 00 11 22 aa FF 0a 0d 1a + ''') + + upperword = Word(alphas).setParseAction(tokenMap(str.upper)) + OneOrMore(upperword).runTests(''' + my kingdom for a horse + ''') + + wd = Word(alphas).setParseAction(tokenMap(str.title)) + OneOrMore(wd).setParseAction(' '.join).runTests(''' + now is the winter of our discontent made glorious summer by this sun of york + ''') + prints:: + 00 11 22 aa FF 0a 0d 1a + [0, 17, 34, 170, 255, 10, 13, 26] + + my kingdom for a horse + ['MY', 'KINGDOM', 'FOR', 'A', 'HORSE'] + + now is the winter of our discontent made glorious summer by this sun of york + ['Now Is The Winter Of Our Discontent Made Glorious Summer By This Sun Of York'] + """ + def pa(s,l,t): + return [func(tokn, *args) for tokn in t] + + try: + func_name = getattr(func, '__name__', + getattr(func, '__class__').__name__) + except Exception: + func_name = str(func) + pa.__name__ = func_name + + return pa + +upcaseTokens = tokenMap(lambda t: _ustr(t).upper()) +"""(Deprecated) Helper parse action to convert tokens to upper case. Deprecated in favor of L{pyparsing_common.upcaseTokens}""" + +downcaseTokens = tokenMap(lambda t: _ustr(t).lower()) +"""(Deprecated) Helper parse action to convert tokens to lower case. Deprecated in favor of L{pyparsing_common.downcaseTokens}""" + +def _makeTags(tagStr, xml): + """Internal helper to construct opening and closing tag expressions, given a tag name""" + if isinstance(tagStr,basestring): + resname = tagStr + tagStr = Keyword(tagStr, caseless=not xml) + else: + resname = tagStr.name + + tagAttrName = Word(alphas,alphanums+"_-:") + if (xml): + tagAttrValue = dblQuotedString.copy().setParseAction( removeQuotes ) + openTag = Suppress("<") + tagStr("tag") + \ + Dict(ZeroOrMore(Group( tagAttrName + Suppress("=") + tagAttrValue ))) + \ + Optional("/",default=[False]).setResultsName("empty").setParseAction(lambda s,l,t:t[0]=='/') + Suppress(">") + else: + printablesLessRAbrack = "".join(c for c in printables if c not in ">") + tagAttrValue = quotedString.copy().setParseAction( removeQuotes ) | Word(printablesLessRAbrack) + openTag = Suppress("<") + tagStr("tag") + \ + Dict(ZeroOrMore(Group( tagAttrName.setParseAction(downcaseTokens) + \ + Optional( Suppress("=") + tagAttrValue ) ))) + \ + Optional("/",default=[False]).setResultsName("empty").setParseAction(lambda s,l,t:t[0]=='/') + Suppress(">") + closeTag = Combine(_L("</") + tagStr + ">") + + openTag = openTag.setResultsName("start"+"".join(resname.replace(":"," ").title().split())).setName("<%s>" % resname) + closeTag = closeTag.setResultsName("end"+"".join(resname.replace(":"," ").title().split())).setName("</%s>" % resname) + openTag.tag = resname + closeTag.tag = resname + return openTag, closeTag + +def makeHTMLTags(tagStr): + """ + Helper to construct opening and closing tag expressions for HTML, given a tag name. Matches + tags in either upper or lower case, attributes with namespaces and with quoted or unquoted values. + + Example:: + text = '<td>More info at the <a href="http://pyparsing.wikispaces.com">pyparsing</a> wiki page</td>' + # makeHTMLTags returns pyparsing expressions for the opening and closing tags as a 2-tuple + a,a_end = makeHTMLTags("A") + link_expr = a + SkipTo(a_end)("link_text") + a_end + + for link in link_expr.searchString(text): + # attributes in the <A> tag (like "href" shown here) are also accessible as named results + print(link.link_text, '->', link.href) + prints:: + pyparsing -> http://pyparsing.wikispaces.com + """ + return _makeTags( tagStr, False ) + +def makeXMLTags(tagStr): + """ + Helper to construct opening and closing tag expressions for XML, given a tag name. Matches + tags only in the given upper/lower case. + + Example: similar to L{makeHTMLTags} + """ + return _makeTags( tagStr, True ) + +def withAttribute(*args,**attrDict): + """ + Helper to create a validating parse action to be used with start tags created + with C{L{makeXMLTags}} or C{L{makeHTMLTags}}. Use C{withAttribute} to qualify a starting tag + with a required attribute value, to avoid false matches on common tags such as + C{<TD>} or C{<DIV>}. + + Call C{withAttribute} with a series of attribute names and values. Specify the list + of filter attributes names and values as: + - keyword arguments, as in C{(align="right")}, or + - as an explicit dict with C{**} operator, when an attribute name is also a Python + reserved word, as in C{**{"class":"Customer", "align":"right"}} + - a list of name-value tuples, as in ( ("ns1:class", "Customer"), ("ns2:align","right") ) + For attribute names with a namespace prefix, you must use the second form. Attribute + names are matched insensitive to upper/lower case. + + If just testing for C{class} (with or without a namespace), use C{L{withClass}}. + + To verify that the attribute exists, but without specifying a value, pass + C{withAttribute.ANY_VALUE} as the value. + + Example:: + html = ''' + <div> + Some text + <div type="grid">1 4 0 1 0</div> + <div type="graph">1,3 2,3 1,1</div> + <div>this has no type</div> + </div> + + ''' + div,div_end = makeHTMLTags("div") + + # only match div tag having a type attribute with value "grid" + div_grid = div().setParseAction(withAttribute(type="grid")) + grid_expr = div_grid + SkipTo(div | div_end)("body") + for grid_header in grid_expr.searchString(html): + print(grid_header.body) + + # construct a match with any div tag having a type attribute, regardless of the value + div_any_type = div().setParseAction(withAttribute(type=withAttribute.ANY_VALUE)) + div_expr = div_any_type + SkipTo(div | div_end)("body") + for div_header in div_expr.searchString(html): + print(div_header.body) + prints:: + 1 4 0 1 0 + + 1 4 0 1 0 + 1,3 2,3 1,1 + """ + if args: + attrs = args[:] + else: + attrs = attrDict.items() + attrs = [(k,v) for k,v in attrs] + def pa(s,l,tokens): + for attrName,attrValue in attrs: + if attrName not in tokens: + raise ParseException(s,l,"no matching attribute " + attrName) + if attrValue != withAttribute.ANY_VALUE and tokens[attrName] != attrValue: + raise ParseException(s,l,"attribute '%s' has value '%s', must be '%s'" % + (attrName, tokens[attrName], attrValue)) + return pa +withAttribute.ANY_VALUE = object() + +def withClass(classname, namespace=''): + """ + Simplified version of C{L{withAttribute}} when matching on a div class - made + difficult because C{class} is a reserved word in Python. + + Example:: + html = ''' + <div> + Some text + <div class="grid">1 4 0 1 0</div> + <div class="graph">1,3 2,3 1,1</div> + <div>this <div> has no class</div> + </div> + + ''' + div,div_end = makeHTMLTags("div") + div_grid = div().setParseAction(withClass("grid")) + + grid_expr = div_grid + SkipTo(div | div_end)("body") + for grid_header in grid_expr.searchString(html): + print(grid_header.body) + + div_any_type = div().setParseAction(withClass(withAttribute.ANY_VALUE)) + div_expr = div_any_type + SkipTo(div | div_end)("body") + for div_header in div_expr.searchString(html): + print(div_header.body) + prints:: + 1 4 0 1 0 + + 1 4 0 1 0 + 1,3 2,3 1,1 + """ + classattr = "%s:class" % namespace if namespace else "class" + return withAttribute(**{classattr : classname}) + +opAssoc = _Constants() +opAssoc.LEFT = object() +opAssoc.RIGHT = object() + +def infixNotation( baseExpr, opList, lpar=Suppress('('), rpar=Suppress(')') ): + """ + Helper method for constructing grammars of expressions made up of + operators working in a precedence hierarchy. Operators may be unary or + binary, left- or right-associative. Parse actions can also be attached + to operator expressions. The generated parser will also recognize the use + of parentheses to override operator precedences (see example below). + + Note: if you define a deep operator list, you may see performance issues + when using infixNotation. See L{ParserElement.enablePackrat} for a + mechanism to potentially improve your parser performance. + + Parameters: + - baseExpr - expression representing the most basic element for the nested + - opList - list of tuples, one for each operator precedence level in the + expression grammar; each tuple is of the form + (opExpr, numTerms, rightLeftAssoc, parseAction), where: + - opExpr is the pyparsing expression for the operator; + may also be a string, which will be converted to a Literal; + if numTerms is 3, opExpr is a tuple of two expressions, for the + two operators separating the 3 terms + - numTerms is the number of terms for this operator (must + be 1, 2, or 3) + - rightLeftAssoc is the indicator whether the operator is + right or left associative, using the pyparsing-defined + constants C{opAssoc.RIGHT} and C{opAssoc.LEFT}. + - parseAction is the parse action to be associated with + expressions matching this operator expression (the + parse action tuple member may be omitted) + - lpar - expression for matching left-parentheses (default=C{Suppress('(')}) + - rpar - expression for matching right-parentheses (default=C{Suppress(')')}) + + Example:: + # simple example of four-function arithmetic with ints and variable names + integer = pyparsing_common.signed_integer + varname = pyparsing_common.identifier + + arith_expr = infixNotation(integer | varname, + [ + ('-', 1, opAssoc.RIGHT), + (oneOf('* /'), 2, opAssoc.LEFT), + (oneOf('+ -'), 2, opAssoc.LEFT), + ]) + + arith_expr.runTests(''' + 5+3*6 + (5+3)*6 + -2--11 + ''', fullDump=False) + prints:: + 5+3*6 + [[5, '+', [3, '*', 6]]] + + (5+3)*6 + [[[5, '+', 3], '*', 6]] + + -2--11 + [[['-', 2], '-', ['-', 11]]] + """ + ret = Forward() + lastExpr = baseExpr | ( lpar + ret + rpar ) + for i,operDef in enumerate(opList): + opExpr,arity,rightLeftAssoc,pa = (operDef + (None,))[:4] + termName = "%s term" % opExpr if arity < 3 else "%s%s term" % opExpr + if arity == 3: + if opExpr is None or len(opExpr) != 2: + raise ValueError("if numterms=3, opExpr must be a tuple or list of two expressions") + opExpr1, opExpr2 = opExpr + thisExpr = Forward().setName(termName) + if rightLeftAssoc == opAssoc.LEFT: + if arity == 1: + matchExpr = FollowedBy(lastExpr + opExpr) + Group( lastExpr + OneOrMore( opExpr ) ) + elif arity == 2: + if opExpr is not None: + matchExpr = FollowedBy(lastExpr + opExpr + lastExpr) + Group( lastExpr + OneOrMore( opExpr + lastExpr ) ) + else: + matchExpr = FollowedBy(lastExpr+lastExpr) + Group( lastExpr + OneOrMore(lastExpr) ) + elif arity == 3: + matchExpr = FollowedBy(lastExpr + opExpr1 + lastExpr + opExpr2 + lastExpr) + \ + Group( lastExpr + opExpr1 + lastExpr + opExpr2 + lastExpr ) + else: + raise ValueError("operator must be unary (1), binary (2), or ternary (3)") + elif rightLeftAssoc == opAssoc.RIGHT: + if arity == 1: + # try to avoid LR with this extra test + if not isinstance(opExpr, Optional): + opExpr = Optional(opExpr) + matchExpr = FollowedBy(opExpr.expr + thisExpr) + Group( opExpr + thisExpr ) + elif arity == 2: + if opExpr is not None: + matchExpr = FollowedBy(lastExpr + opExpr + thisExpr) + Group( lastExpr + OneOrMore( opExpr + thisExpr ) ) + else: + matchExpr = FollowedBy(lastExpr + thisExpr) + Group( lastExpr + OneOrMore( thisExpr ) ) + elif arity == 3: + matchExpr = FollowedBy(lastExpr + opExpr1 + thisExpr + opExpr2 + thisExpr) + \ + Group( lastExpr + opExpr1 + thisExpr + opExpr2 + thisExpr ) + else: + raise ValueError("operator must be unary (1), binary (2), or ternary (3)") + else: + raise ValueError("operator must indicate right or left associativity") + if pa: + matchExpr.setParseAction( pa ) + thisExpr <<= ( matchExpr.setName(termName) | lastExpr ) + lastExpr = thisExpr + ret <<= lastExpr + return ret + +operatorPrecedence = infixNotation +"""(Deprecated) Former name of C{L{infixNotation}}, will be dropped in a future release.""" + +dblQuotedString = Combine(Regex(r'"(?:[^"\n\r\\]|(?:"")|(?:\\(?:[^x]|x[0-9a-fA-F]+)))*')+'"').setName("string enclosed in double quotes") +sglQuotedString = Combine(Regex(r"'(?:[^'\n\r\\]|(?:'')|(?:\\(?:[^x]|x[0-9a-fA-F]+)))*")+"'").setName("string enclosed in single quotes") +quotedString = Combine(Regex(r'"(?:[^"\n\r\\]|(?:"")|(?:\\(?:[^x]|x[0-9a-fA-F]+)))*')+'"'| + Regex(r"'(?:[^'\n\r\\]|(?:'')|(?:\\(?:[^x]|x[0-9a-fA-F]+)))*")+"'").setName("quotedString using single or double quotes") +unicodeString = Combine(_L('u') + quotedString.copy()).setName("unicode string literal") + +def nestedExpr(opener="(", closer=")", content=None, ignoreExpr=quotedString.copy()): + """ + Helper method for defining nested lists enclosed in opening and closing + delimiters ("(" and ")" are the default). + + Parameters: + - opener - opening character for a nested list (default=C{"("}); can also be a pyparsing expression + - closer - closing character for a nested list (default=C{")"}); can also be a pyparsing expression + - content - expression for items within the nested lists (default=C{None}) + - ignoreExpr - expression for ignoring opening and closing delimiters (default=C{quotedString}) + + If an expression is not provided for the content argument, the nested + expression will capture all whitespace-delimited content between delimiters + as a list of separate values. + + Use the C{ignoreExpr} argument to define expressions that may contain + opening or closing characters that should not be treated as opening + or closing characters for nesting, such as quotedString or a comment + expression. Specify multiple expressions using an C{L{Or}} or C{L{MatchFirst}}. + The default is L{quotedString}, but if no expressions are to be ignored, + then pass C{None} for this argument. + + Example:: + data_type = oneOf("void int short long char float double") + decl_data_type = Combine(data_type + Optional(Word('*'))) + ident = Word(alphas+'_', alphanums+'_') + number = pyparsing_common.number + arg = Group(decl_data_type + ident) + LPAR,RPAR = map(Suppress, "()") + + code_body = nestedExpr('{', '}', ignoreExpr=(quotedString | cStyleComment)) + + c_function = (decl_data_type("type") + + ident("name") + + LPAR + Optional(delimitedList(arg), [])("args") + RPAR + + code_body("body")) + c_function.ignore(cStyleComment) + + source_code = ''' + int is_odd(int x) { + return (x%2); + } + + int dec_to_hex(char hchar) { + if (hchar >= '0' && hchar <= '9') { + return (ord(hchar)-ord('0')); + } else { + return (10+ord(hchar)-ord('A')); + } + } + ''' + for func in c_function.searchString(source_code): + print("%(name)s (%(type)s) args: %(args)s" % func) + + prints:: + is_odd (int) args: [['int', 'x']] + dec_to_hex (int) args: [['char', 'hchar']] + """ + if opener == closer: + raise ValueError("opening and closing strings cannot be the same") + if content is None: + if isinstance(opener,basestring) and isinstance(closer,basestring): + if len(opener) == 1 and len(closer)==1: + if ignoreExpr is not None: + content = (Combine(OneOrMore(~ignoreExpr + + CharsNotIn(opener+closer+ParserElement.DEFAULT_WHITE_CHARS,exact=1)) + ).setParseAction(lambda t:t[0].strip())) + else: + content = (empty.copy()+CharsNotIn(opener+closer+ParserElement.DEFAULT_WHITE_CHARS + ).setParseAction(lambda t:t[0].strip())) + else: + if ignoreExpr is not None: + content = (Combine(OneOrMore(~ignoreExpr + + ~Literal(opener) + ~Literal(closer) + + CharsNotIn(ParserElement.DEFAULT_WHITE_CHARS,exact=1)) + ).setParseAction(lambda t:t[0].strip())) + else: + content = (Combine(OneOrMore(~Literal(opener) + ~Literal(closer) + + CharsNotIn(ParserElement.DEFAULT_WHITE_CHARS,exact=1)) + ).setParseAction(lambda t:t[0].strip())) + else: + raise ValueError("opening and closing arguments must be strings if no content expression is given") + ret = Forward() + if ignoreExpr is not None: + ret <<= Group( Suppress(opener) + ZeroOrMore( ignoreExpr | ret | content ) + Suppress(closer) ) + else: + ret <<= Group( Suppress(opener) + ZeroOrMore( ret | content ) + Suppress(closer) ) + ret.setName('nested %s%s expression' % (opener,closer)) + return ret + +def indentedBlock(blockStatementExpr, indentStack, indent=True): + """ + Helper method for defining space-delimited indentation blocks, such as + those used to define block statements in Python source code. + + Parameters: + - blockStatementExpr - expression defining syntax of statement that + is repeated within the indented block + - indentStack - list created by caller to manage indentation stack + (multiple statementWithIndentedBlock expressions within a single grammar + should share a common indentStack) + - indent - boolean indicating whether block must be indented beyond the + the current level; set to False for block of left-most statements + (default=C{True}) + + A valid block must contain at least one C{blockStatement}. + + Example:: + data = ''' + def A(z): + A1 + B = 100 + G = A2 + A2 + A3 + B + def BB(a,b,c): + BB1 + def BBA(): + bba1 + bba2 + bba3 + C + D + def spam(x,y): + def eggs(z): + pass + ''' + + + indentStack = [1] + stmt = Forward() + + identifier = Word(alphas, alphanums) + funcDecl = ("def" + identifier + Group( "(" + Optional( delimitedList(identifier) ) + ")" ) + ":") + func_body = indentedBlock(stmt, indentStack) + funcDef = Group( funcDecl + func_body ) + + rvalue = Forward() + funcCall = Group(identifier + "(" + Optional(delimitedList(rvalue)) + ")") + rvalue << (funcCall | identifier | Word(nums)) + assignment = Group(identifier + "=" + rvalue) + stmt << ( funcDef | assignment | identifier ) + + module_body = OneOrMore(stmt) + + parseTree = module_body.parseString(data) + parseTree.pprint() + prints:: + [['def', + 'A', + ['(', 'z', ')'], + ':', + [['A1'], [['B', '=', '100']], [['G', '=', 'A2']], ['A2'], ['A3']]], + 'B', + ['def', + 'BB', + ['(', 'a', 'b', 'c', ')'], + ':', + [['BB1'], [['def', 'BBA', ['(', ')'], ':', [['bba1'], ['bba2'], ['bba3']]]]]], + 'C', + 'D', + ['def', + 'spam', + ['(', 'x', 'y', ')'], + ':', + [[['def', 'eggs', ['(', 'z', ')'], ':', [['pass']]]]]]] + """ + def checkPeerIndent(s,l,t): + if l >= len(s): return + curCol = col(l,s) + if curCol != indentStack[-1]: + if curCol > indentStack[-1]: + raise ParseFatalException(s,l,"illegal nesting") + raise ParseException(s,l,"not a peer entry") + + def checkSubIndent(s,l,t): + curCol = col(l,s) + if curCol > indentStack[-1]: + indentStack.append( curCol ) + else: + raise ParseException(s,l,"not a subentry") + + def checkUnindent(s,l,t): + if l >= len(s): return + curCol = col(l,s) + if not(indentStack and curCol < indentStack[-1] and curCol <= indentStack[-2]): + raise ParseException(s,l,"not an unindent") + indentStack.pop() + + NL = OneOrMore(LineEnd().setWhitespaceChars("\t ").suppress()) + INDENT = (Empty() + Empty().setParseAction(checkSubIndent)).setName('INDENT') + PEER = Empty().setParseAction(checkPeerIndent).setName('') + UNDENT = Empty().setParseAction(checkUnindent).setName('UNINDENT') + if indent: + smExpr = Group( Optional(NL) + + #~ FollowedBy(blockStatementExpr) + + INDENT + (OneOrMore( PEER + Group(blockStatementExpr) + Optional(NL) )) + UNDENT) + else: + smExpr = Group( Optional(NL) + + (OneOrMore( PEER + Group(blockStatementExpr) + Optional(NL) )) ) + blockStatementExpr.ignore(_bslash + LineEnd()) + return smExpr.setName('indented block') + +alphas8bit = srange(r"[\0xc0-\0xd6\0xd8-\0xf6\0xf8-\0xff]") +punc8bit = srange(r"[\0xa1-\0xbf\0xd7\0xf7]") + +anyOpenTag,anyCloseTag = makeHTMLTags(Word(alphas,alphanums+"_:").setName('any tag')) +_htmlEntityMap = dict(zip("gt lt amp nbsp quot apos".split(),'><& "\'')) +commonHTMLEntity = Regex('&(?P<entity>' + '|'.join(_htmlEntityMap.keys()) +");").setName("common HTML entity") +def replaceHTMLEntity(t): + """Helper parser action to replace common HTML entities with their special characters""" + return _htmlEntityMap.get(t.entity) + +# it's easy to get these comment structures wrong - they're very common, so may as well make them available +cStyleComment = Combine(Regex(r"/\*(?:[^*]|\*(?!/))*") + '*/').setName("C style comment") +"Comment of the form C{/* ... */}" + +htmlComment = Regex(r"<!--[\s\S]*?-->").setName("HTML comment") +"Comment of the form C{<!-- ... -->}" + +restOfLine = Regex(r".*").leaveWhitespace().setName("rest of line") +dblSlashComment = Regex(r"//(?:\\\n|[^\n])*").setName("// comment") +"Comment of the form C{// ... (to end of line)}" + +cppStyleComment = Combine(Regex(r"/\*(?:[^*]|\*(?!/))*") + '*/'| dblSlashComment).setName("C++ style comment") +"Comment of either form C{L{cStyleComment}} or C{L{dblSlashComment}}" + +javaStyleComment = cppStyleComment +"Same as C{L{cppStyleComment}}" + +pythonStyleComment = Regex(r"#.*").setName("Python style comment") +"Comment of the form C{# ... (to end of line)}" + +_commasepitem = Combine(OneOrMore(Word(printables, excludeChars=',') + + Optional( Word(" \t") + + ~Literal(",") + ~LineEnd() ) ) ).streamline().setName("commaItem") +commaSeparatedList = delimitedList( Optional( quotedString.copy() | _commasepitem, default="") ).setName("commaSeparatedList") +"""(Deprecated) Predefined expression of 1 or more printable words or quoted strings, separated by commas. + This expression is deprecated in favor of L{pyparsing_common.comma_separated_list}.""" + +# some other useful expressions - using lower-case class name since we are really using this as a namespace +class pyparsing_common: + """ + Here are some common low-level expressions that may be useful in jump-starting parser development: + - numeric forms (L{integers<integer>}, L{reals<real>}, L{scientific notation<sci_real>}) + - common L{programming identifiers<identifier>} + - network addresses (L{MAC<mac_address>}, L{IPv4<ipv4_address>}, L{IPv6<ipv6_address>}) + - ISO8601 L{dates<iso8601_date>} and L{datetime<iso8601_datetime>} + - L{UUID<uuid>} + - L{comma-separated list<comma_separated_list>} + Parse actions: + - C{L{convertToInteger}} + - C{L{convertToFloat}} + - C{L{convertToDate}} + - C{L{convertToDatetime}} + - C{L{stripHTMLTags}} + - C{L{upcaseTokens}} + - C{L{downcaseTokens}} + + Example:: + pyparsing_common.number.runTests(''' + # any int or real number, returned as the appropriate type + 100 + -100 + +100 + 3.14159 + 6.02e23 + 1e-12 + ''') + + pyparsing_common.fnumber.runTests(''' + # any int or real number, returned as float + 100 + -100 + +100 + 3.14159 + 6.02e23 + 1e-12 + ''') + + pyparsing_common.hex_integer.runTests(''' + # hex numbers + 100 + FF + ''') + + pyparsing_common.fraction.runTests(''' + # fractions + 1/2 + -3/4 + ''') + + pyparsing_common.mixed_integer.runTests(''' + # mixed fractions + 1 + 1/2 + -3/4 + 1-3/4 + ''') + + import uuid + pyparsing_common.uuid.setParseAction(tokenMap(uuid.UUID)) + pyparsing_common.uuid.runTests(''' + # uuid + 12345678-1234-5678-1234-567812345678 + ''') + prints:: + # any int or real number, returned as the appropriate type + 100 + [100] + + -100 + [-100] + + +100 + [100] + + 3.14159 + [3.14159] + + 6.02e23 + [6.02e+23] + + 1e-12 + [1e-12] + + # any int or real number, returned as float + 100 + [100.0] + + -100 + [-100.0] + + +100 + [100.0] + + 3.14159 + [3.14159] + + 6.02e23 + [6.02e+23] + + 1e-12 + [1e-12] + + # hex numbers + 100 + [256] + + FF + [255] + + # fractions + 1/2 + [0.5] + + -3/4 + [-0.75] + + # mixed fractions + 1 + [1] + + 1/2 + [0.5] + + -3/4 + [-0.75] + + 1-3/4 + [1.75] + + # uuid + 12345678-1234-5678-1234-567812345678 + [UUID('12345678-1234-5678-1234-567812345678')] + """ + + convertToInteger = tokenMap(int) + """ + Parse action for converting parsed integers to Python int + """ + + convertToFloat = tokenMap(float) + """ + Parse action for converting parsed numbers to Python float + """ + + integer = Word(nums).setName("integer").setParseAction(convertToInteger) + """expression that parses an unsigned integer, returns an int""" + + hex_integer = Word(hexnums).setName("hex integer").setParseAction(tokenMap(int,16)) + """expression that parses a hexadecimal integer, returns an int""" + + signed_integer = Regex(r'[+-]?\d+').setName("signed integer").setParseAction(convertToInteger) + """expression that parses an integer with optional leading sign, returns an int""" + + fraction = (signed_integer().setParseAction(convertToFloat) + '/' + signed_integer().setParseAction(convertToFloat)).setName("fraction") + """fractional expression of an integer divided by an integer, returns a float""" + fraction.addParseAction(lambda t: t[0]/t[-1]) + + mixed_integer = (fraction | signed_integer + Optional(Optional('-').suppress() + fraction)).setName("fraction or mixed integer-fraction") + """mixed integer of the form 'integer - fraction', with optional leading integer, returns float""" + mixed_integer.addParseAction(sum) + + real = Regex(r'[+-]?\d+\.\d*').setName("real number").setParseAction(convertToFloat) + """expression that parses a floating point number and returns a float""" + + sci_real = Regex(r'[+-]?\d+([eE][+-]?\d+|\.\d*([eE][+-]?\d+)?)').setName("real number with scientific notation").setParseAction(convertToFloat) + """expression that parses a floating point number with optional scientific notation and returns a float""" + + # streamlining this expression makes the docs nicer-looking + number = (sci_real | real | signed_integer).streamline() + """any numeric expression, returns the corresponding Python type""" + + fnumber = Regex(r'[+-]?\d+\.?\d*([eE][+-]?\d+)?').setName("fnumber").setParseAction(convertToFloat) + """any int or real number, returned as float""" + + identifier = Word(alphas+'_', alphanums+'_').setName("identifier") + """typical code identifier (leading alpha or '_', followed by 0 or more alphas, nums, or '_')""" + + ipv4_address = Regex(r'(25[0-5]|2[0-4][0-9]|1?[0-9]{1,2})(\.(25[0-5]|2[0-4][0-9]|1?[0-9]{1,2})){3}').setName("IPv4 address") + "IPv4 address (C{0.0.0.0 - 255.255.255.255})" + + _ipv6_part = Regex(r'[0-9a-fA-F]{1,4}').setName("hex_integer") + _full_ipv6_address = (_ipv6_part + (':' + _ipv6_part)*7).setName("full IPv6 address") + _short_ipv6_address = (Optional(_ipv6_part + (':' + _ipv6_part)*(0,6)) + "::" + Optional(_ipv6_part + (':' + _ipv6_part)*(0,6))).setName("short IPv6 address") + _short_ipv6_address.addCondition(lambda t: sum(1 for tt in t if pyparsing_common._ipv6_part.matches(tt)) < 8) + _mixed_ipv6_address = ("::ffff:" + ipv4_address).setName("mixed IPv6 address") + ipv6_address = Combine((_full_ipv6_address | _mixed_ipv6_address | _short_ipv6_address).setName("IPv6 address")).setName("IPv6 address") + "IPv6 address (long, short, or mixed form)" + + mac_address = Regex(r'[0-9a-fA-F]{2}([:.-])[0-9a-fA-F]{2}(?:\1[0-9a-fA-F]{2}){4}').setName("MAC address") + "MAC address xx:xx:xx:xx:xx (may also have '-' or '.' delimiters)" + + @staticmethod + def convertToDate(fmt="%Y-%m-%d"): + """ + Helper to create a parse action for converting parsed date string to Python datetime.date + + Params - + - fmt - format to be passed to datetime.strptime (default=C{"%Y-%m-%d"}) + + Example:: + date_expr = pyparsing_common.iso8601_date.copy() + date_expr.setParseAction(pyparsing_common.convertToDate()) + print(date_expr.parseString("1999-12-31")) + prints:: + [datetime.date(1999, 12, 31)] + """ + def cvt_fn(s,l,t): + try: + return datetime.strptime(t[0], fmt).date() + except ValueError as ve: + raise ParseException(s, l, str(ve)) + return cvt_fn + + @staticmethod + def convertToDatetime(fmt="%Y-%m-%dT%H:%M:%S.%f"): + """ + Helper to create a parse action for converting parsed datetime string to Python datetime.datetime + + Params - + - fmt - format to be passed to datetime.strptime (default=C{"%Y-%m-%dT%H:%M:%S.%f"}) + + Example:: + dt_expr = pyparsing_common.iso8601_datetime.copy() + dt_expr.setParseAction(pyparsing_common.convertToDatetime()) + print(dt_expr.parseString("1999-12-31T23:59:59.999")) + prints:: + [datetime.datetime(1999, 12, 31, 23, 59, 59, 999000)] + """ + def cvt_fn(s,l,t): + try: + return datetime.strptime(t[0], fmt) + except ValueError as ve: + raise ParseException(s, l, str(ve)) + return cvt_fn + + iso8601_date = Regex(r'(?P<year>\d{4})(?:-(?P<month>\d\d)(?:-(?P<day>\d\d))?)?').setName("ISO8601 date") + "ISO8601 date (C{yyyy-mm-dd})" + + iso8601_datetime = Regex(r'(?P<year>\d{4})-(?P<month>\d\d)-(?P<day>\d\d)[T ](?P<hour>\d\d):(?P<minute>\d\d)(:(?P<second>\d\d(\.\d*)?)?)?(?P<tz>Z|[+-]\d\d:?\d\d)?').setName("ISO8601 datetime") + "ISO8601 datetime (C{yyyy-mm-ddThh:mm:ss.s(Z|+-00:00)}) - trailing seconds, milliseconds, and timezone optional; accepts separating C{'T'} or C{' '}" + + uuid = Regex(r'[0-9a-fA-F]{8}(-[0-9a-fA-F]{4}){3}-[0-9a-fA-F]{12}').setName("UUID") + "UUID (C{xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx})" + + _html_stripper = anyOpenTag.suppress() | anyCloseTag.suppress() + @staticmethod + def stripHTMLTags(s, l, tokens): + """ + Parse action to remove HTML tags from web page HTML source + + Example:: + # strip HTML links from normal text + text = '<td>More info at the <a href="http://pyparsing.wikispaces.com">pyparsing</a> wiki page</td>' + td,td_end = makeHTMLTags("TD") + table_text = td + SkipTo(td_end).setParseAction(pyparsing_common.stripHTMLTags)("body") + td_end + + print(table_text.parseString(text).body) # -> 'More info at the pyparsing wiki page' + """ + return pyparsing_common._html_stripper.transformString(tokens[0]) + + _commasepitem = Combine(OneOrMore(~Literal(",") + ~LineEnd() + Word(printables, excludeChars=',') + + Optional( White(" \t") ) ) ).streamline().setName("commaItem") + comma_separated_list = delimitedList( Optional( quotedString.copy() | _commasepitem, default="") ).setName("comma separated list") + """Predefined expression of 1 or more printable words or quoted strings, separated by commas.""" + + upcaseTokens = staticmethod(tokenMap(lambda t: _ustr(t).upper())) + """Parse action to convert tokens to upper case.""" + + downcaseTokens = staticmethod(tokenMap(lambda t: _ustr(t).lower())) + """Parse action to convert tokens to lower case.""" + + +if __name__ == "__main__": + + selectToken = CaselessLiteral("select") + fromToken = CaselessLiteral("from") + + ident = Word(alphas, alphanums + "_$") + + columnName = delimitedList(ident, ".", combine=True).setParseAction(upcaseTokens) + columnNameList = Group(delimitedList(columnName)).setName("columns") + columnSpec = ('*' | columnNameList) + + tableName = delimitedList(ident, ".", combine=True).setParseAction(upcaseTokens) + tableNameList = Group(delimitedList(tableName)).setName("tables") + + simpleSQL = selectToken("command") + columnSpec("columns") + fromToken + tableNameList("tables") + + # demo runTests method, including embedded comments in test string + simpleSQL.runTests(""" + # '*' as column list and dotted table name + select * from SYS.XYZZY + + # caseless match on "SELECT", and casts back to "select" + SELECT * from XYZZY, ABC + + # list of column names, and mixed case SELECT keyword + Select AA,BB,CC from Sys.dual + + # multiple tables + Select A, B, C from Sys.dual, Table2 + + # invalid SELECT keyword - should fail + Xelect A, B, C from Sys.dual + + # incomplete command - should fail + Select + + # invalid column name - should fail + Select ^^^ frox Sys.dual + + """) + + pyparsing_common.number.runTests(""" + 100 + -100 + +100 + 3.14159 + 6.02e23 + 1e-12 + """) + + # any int or real number, returned as float + pyparsing_common.fnumber.runTests(""" + 100 + -100 + +100 + 3.14159 + 6.02e23 + 1e-12 + """) + + pyparsing_common.hex_integer.runTests(""" + 100 + FF + """) + + import uuid + pyparsing_common.uuid.setParseAction(tokenMap(uuid.UUID)) + pyparsing_common.uuid.runTests(""" + 12345678-1234-5678-1234-567812345678 + """) diff --git a/week-0/day-3/venv/lib/python3.6/site-packages/setuptools/_vendor/six.py b/week-0/day-3/venv/lib/python3.6/site-packages/setuptools/_vendor/six.py new file mode 100644 index 00000000..190c0239 --- /dev/null +++ b/week-0/day-3/venv/lib/python3.6/site-packages/setuptools/_vendor/six.py @@ -0,0 +1,868 @@ +"""Utilities for writing code that runs on Python 2 and 3""" + +# Copyright (c) 2010-2015 Benjamin Peterson +# +# Permission is hereby granted, free of charge, to any person obtaining a copy +# of this software and associated documentation files (the "Software"), to deal +# in the Software without restriction, including without limitation the rights +# to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +# copies of the Software, and to permit persons to whom the Software is +# furnished to do so, subject to the following conditions: +# +# The above copyright notice and this permission notice shall be included in all +# copies or substantial portions of the Software. +# +# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +# FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +# AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +# LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +# OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +# SOFTWARE. + +from __future__ import absolute_import + +import functools +import itertools +import operator +import sys +import types + +__author__ = "Benjamin Peterson <benjamin@python.org>" +__version__ = "1.10.0" + + +# Useful for very coarse version differentiation. +PY2 = sys.version_info[0] == 2 +PY3 = sys.version_info[0] == 3 +PY34 = sys.version_info[0:2] >= (3, 4) + +if PY3: + string_types = str, + integer_types = int, + class_types = type, + text_type = str + binary_type = bytes + + MAXSIZE = sys.maxsize +else: + string_types = basestring, + integer_types = (int, long) + class_types = (type, types.ClassType) + text_type = unicode + binary_type = str + + if sys.platform.startswith("java"): + # Jython always uses 32 bits. + MAXSIZE = int((1 << 31) - 1) + else: + # It's possible to have sizeof(long) != sizeof(Py_ssize_t). + class X(object): + + def __len__(self): + return 1 << 31 + try: + len(X()) + except OverflowError: + # 32-bit + MAXSIZE = int((1 << 31) - 1) + else: + # 64-bit + MAXSIZE = int((1 << 63) - 1) + del X + + +def _add_doc(func, doc): + """Add documentation to a function.""" + func.__doc__ = doc + + +def _import_module(name): + """Import module, returning the module after the last dot.""" + __import__(name) + return sys.modules[name] + + +class _LazyDescr(object): + + def __init__(self, name): + self.name = name + + def __get__(self, obj, tp): + result = self._resolve() + setattr(obj, self.name, result) # Invokes __set__. + try: + # This is a bit ugly, but it avoids running this again by + # removing this descriptor. + delattr(obj.__class__, self.name) + except AttributeError: + pass + return result + + +class MovedModule(_LazyDescr): + + def __init__(self, name, old, new=None): + super(MovedModule, self).__init__(name) + if PY3: + if new is None: + new = name + self.mod = new + else: + self.mod = old + + def _resolve(self): + return _import_module(self.mod) + + def __getattr__(self, attr): + _module = self._resolve() + value = getattr(_module, attr) + setattr(self, attr, value) + return value + + +class _LazyModule(types.ModuleType): + + def __init__(self, name): + super(_LazyModule, self).__init__(name) + self.__doc__ = self.__class__.__doc__ + + def __dir__(self): + attrs = ["__doc__", "__name__"] + attrs += [attr.name for attr in self._moved_attributes] + return attrs + + # Subclasses should override this + _moved_attributes = [] + + +class MovedAttribute(_LazyDescr): + + def __init__(self, name, old_mod, new_mod, old_attr=None, new_attr=None): + super(MovedAttribute, self).__init__(name) + if PY3: + if new_mod is None: + new_mod = name + self.mod = new_mod + if new_attr is None: + if old_attr is None: + new_attr = name + else: + new_attr = old_attr + self.attr = new_attr + else: + self.mod = old_mod + if old_attr is None: + old_attr = name + self.attr = old_attr + + def _resolve(self): + module = _import_module(self.mod) + return getattr(module, self.attr) + + +class _SixMetaPathImporter(object): + + """ + A meta path importer to import six.moves and its submodules. + + This class implements a PEP302 finder and loader. It should be compatible + with Python 2.5 and all existing versions of Python3 + """ + + def __init__(self, six_module_name): + self.name = six_module_name + self.known_modules = {} + + def _add_module(self, mod, *fullnames): + for fullname in fullnames: + self.known_modules[self.name + "." + fullname] = mod + + def _get_module(self, fullname): + return self.known_modules[self.name + "." + fullname] + + def find_module(self, fullname, path=None): + if fullname in self.known_modules: + return self + return None + + def __get_module(self, fullname): + try: + return self.known_modules[fullname] + except KeyError: + raise ImportError("This loader does not know module " + fullname) + + def load_module(self, fullname): + try: + # in case of a reload + return sys.modules[fullname] + except KeyError: + pass + mod = self.__get_module(fullname) + if isinstance(mod, MovedModule): + mod = mod._resolve() + else: + mod.__loader__ = self + sys.modules[fullname] = mod + return mod + + def is_package(self, fullname): + """ + Return true, if the named module is a package. + + We need this method to get correct spec objects with + Python 3.4 (see PEP451) + """ + return hasattr(self.__get_module(fullname), "__path__") + + def get_code(self, fullname): + """Return None + + Required, if is_package is implemented""" + self.__get_module(fullname) # eventually raises ImportError + return None + get_source = get_code # same as get_code + +_importer = _SixMetaPathImporter(__name__) + + +class _MovedItems(_LazyModule): + + """Lazy loading of moved objects""" + __path__ = [] # mark as package + + +_moved_attributes = [ + MovedAttribute("cStringIO", "cStringIO", "io", "StringIO"), + MovedAttribute("filter", "itertools", "builtins", "ifilter", "filter"), + MovedAttribute("filterfalse", "itertools", "itertools", "ifilterfalse", "filterfalse"), + MovedAttribute("input", "__builtin__", "builtins", "raw_input", "input"), + MovedAttribute("intern", "__builtin__", "sys"), + MovedAttribute("map", "itertools", "builtins", "imap", "map"), + MovedAttribute("getcwd", "os", "os", "getcwdu", "getcwd"), + MovedAttribute("getcwdb", "os", "os", "getcwd", "getcwdb"), + MovedAttribute("range", "__builtin__", "builtins", "xrange", "range"), + MovedAttribute("reload_module", "__builtin__", "importlib" if PY34 else "imp", "reload"), + MovedAttribute("reduce", "__builtin__", "functools"), + MovedAttribute("shlex_quote", "pipes", "shlex", "quote"), + MovedAttribute("StringIO", "StringIO", "io"), + MovedAttribute("UserDict", "UserDict", "collections"), + MovedAttribute("UserList", "UserList", "collections"), + MovedAttribute("UserString", "UserString", "collections"), + MovedAttribute("xrange", "__builtin__", "builtins", "xrange", "range"), + MovedAttribute("zip", "itertools", "builtins", "izip", "zip"), + MovedAttribute("zip_longest", "itertools", "itertools", "izip_longest", "zip_longest"), + MovedModule("builtins", "__builtin__"), + MovedModule("configparser", "ConfigParser"), + MovedModule("copyreg", "copy_reg"), + MovedModule("dbm_gnu", "gdbm", "dbm.gnu"), + MovedModule("_dummy_thread", "dummy_thread", "_dummy_thread"), + MovedModule("http_cookiejar", "cookielib", "http.cookiejar"), + MovedModule("http_cookies", "Cookie", "http.cookies"), + MovedModule("html_entities", "htmlentitydefs", "html.entities"), + MovedModule("html_parser", "HTMLParser", "html.parser"), + MovedModule("http_client", "httplib", "http.client"), + MovedModule("email_mime_multipart", "email.MIMEMultipart", "email.mime.multipart"), + MovedModule("email_mime_nonmultipart", "email.MIMENonMultipart", "email.mime.nonmultipart"), + MovedModule("email_mime_text", "email.MIMEText", "email.mime.text"), + MovedModule("email_mime_base", "email.MIMEBase", "email.mime.base"), + MovedModule("BaseHTTPServer", "BaseHTTPServer", "http.server"), + MovedModule("CGIHTTPServer", "CGIHTTPServer", "http.server"), + MovedModule("SimpleHTTPServer", "SimpleHTTPServer", "http.server"), + MovedModule("cPickle", "cPickle", "pickle"), + MovedModule("queue", "Queue"), + MovedModule("reprlib", "repr"), + MovedModule("socketserver", "SocketServer"), + MovedModule("_thread", "thread", "_thread"), + MovedModule("tkinter", "Tkinter"), + MovedModule("tkinter_dialog", "Dialog", "tkinter.dialog"), + MovedModule("tkinter_filedialog", "FileDialog", "tkinter.filedialog"), + MovedModule("tkinter_scrolledtext", "ScrolledText", "tkinter.scrolledtext"), + MovedModule("tkinter_simpledialog", "SimpleDialog", "tkinter.simpledialog"), + MovedModule("tkinter_tix", "Tix", "tkinter.tix"), + MovedModule("tkinter_ttk", "ttk", "tkinter.ttk"), + MovedModule("tkinter_constants", "Tkconstants", "tkinter.constants"), + MovedModule("tkinter_dnd", "Tkdnd", "tkinter.dnd"), + MovedModule("tkinter_colorchooser", "tkColorChooser", + "tkinter.colorchooser"), + MovedModule("tkinter_commondialog", "tkCommonDialog", + "tkinter.commondialog"), + MovedModule("tkinter_tkfiledialog", "tkFileDialog", "tkinter.filedialog"), + MovedModule("tkinter_font", "tkFont", "tkinter.font"), + MovedModule("tkinter_messagebox", "tkMessageBox", "tkinter.messagebox"), + MovedModule("tkinter_tksimpledialog", "tkSimpleDialog", + "tkinter.simpledialog"), + MovedModule("urllib_parse", __name__ + ".moves.urllib_parse", "urllib.parse"), + MovedModule("urllib_error", __name__ + ".moves.urllib_error", "urllib.error"), + MovedModule("urllib", __name__ + ".moves.urllib", __name__ + ".moves.urllib"), + MovedModule("urllib_robotparser", "robotparser", "urllib.robotparser"), + MovedModule("xmlrpc_client", "xmlrpclib", "xmlrpc.client"), + MovedModule("xmlrpc_server", "SimpleXMLRPCServer", "xmlrpc.server"), +] +# Add windows specific modules. +if sys.platform == "win32": + _moved_attributes += [ + MovedModule("winreg", "_winreg"), + ] + +for attr in _moved_attributes: + setattr(_MovedItems, attr.name, attr) + if isinstance(attr, MovedModule): + _importer._add_module(attr, "moves." + attr.name) +del attr + +_MovedItems._moved_attributes = _moved_attributes + +moves = _MovedItems(__name__ + ".moves") +_importer._add_module(moves, "moves") + + +class Module_six_moves_urllib_parse(_LazyModule): + + """Lazy loading of moved objects in six.moves.urllib_parse""" + + +_urllib_parse_moved_attributes = [ + MovedAttribute("ParseResult", "urlparse", "urllib.parse"), + MovedAttribute("SplitResult", "urlparse", "urllib.parse"), + MovedAttribute("parse_qs", "urlparse", "urllib.parse"), + MovedAttribute("parse_qsl", "urlparse", "urllib.parse"), + MovedAttribute("urldefrag", "urlparse", "urllib.parse"), + MovedAttribute("urljoin", "urlparse", "urllib.parse"), + MovedAttribute("urlparse", "urlparse", "urllib.parse"), + MovedAttribute("urlsplit", "urlparse", "urllib.parse"), + MovedAttribute("urlunparse", "urlparse", "urllib.parse"), + MovedAttribute("urlunsplit", "urlparse", "urllib.parse"), + MovedAttribute("quote", "urllib", "urllib.parse"), + MovedAttribute("quote_plus", "urllib", "urllib.parse"), + MovedAttribute("unquote", "urllib", "urllib.parse"), + MovedAttribute("unquote_plus", "urllib", "urllib.parse"), + MovedAttribute("urlencode", "urllib", "urllib.parse"), + MovedAttribute("splitquery", "urllib", "urllib.parse"), + MovedAttribute("splittag", "urllib", "urllib.parse"), + MovedAttribute("splituser", "urllib", "urllib.parse"), + MovedAttribute("uses_fragment", "urlparse", "urllib.parse"), + MovedAttribute("uses_netloc", "urlparse", "urllib.parse"), + MovedAttribute("uses_params", "urlparse", "urllib.parse"), + MovedAttribute("uses_query", "urlparse", "urllib.parse"), + MovedAttribute("uses_relative", "urlparse", "urllib.parse"), +] +for attr in _urllib_parse_moved_attributes: + setattr(Module_six_moves_urllib_parse, attr.name, attr) +del attr + +Module_six_moves_urllib_parse._moved_attributes = _urllib_parse_moved_attributes + +_importer._add_module(Module_six_moves_urllib_parse(__name__ + ".moves.urllib_parse"), + "moves.urllib_parse", "moves.urllib.parse") + + +class Module_six_moves_urllib_error(_LazyModule): + + """Lazy loading of moved objects in six.moves.urllib_error""" + + +_urllib_error_moved_attributes = [ + MovedAttribute("URLError", "urllib2", "urllib.error"), + MovedAttribute("HTTPError", "urllib2", "urllib.error"), + MovedAttribute("ContentTooShortError", "urllib", "urllib.error"), +] +for attr in _urllib_error_moved_attributes: + setattr(Module_six_moves_urllib_error, attr.name, attr) +del attr + +Module_six_moves_urllib_error._moved_attributes = _urllib_error_moved_attributes + +_importer._add_module(Module_six_moves_urllib_error(__name__ + ".moves.urllib.error"), + "moves.urllib_error", "moves.urllib.error") + + +class Module_six_moves_urllib_request(_LazyModule): + + """Lazy loading of moved objects in six.moves.urllib_request""" + + +_urllib_request_moved_attributes = [ + MovedAttribute("urlopen", "urllib2", "urllib.request"), + MovedAttribute("install_opener", "urllib2", "urllib.request"), + MovedAttribute("build_opener", "urllib2", "urllib.request"), + MovedAttribute("pathname2url", "urllib", "urllib.request"), + MovedAttribute("url2pathname", "urllib", "urllib.request"), + MovedAttribute("getproxies", "urllib", "urllib.request"), + MovedAttribute("Request", "urllib2", "urllib.request"), + MovedAttribute("OpenerDirector", "urllib2", "urllib.request"), + MovedAttribute("HTTPDefaultErrorHandler", "urllib2", "urllib.request"), + MovedAttribute("HTTPRedirectHandler", "urllib2", "urllib.request"), + MovedAttribute("HTTPCookieProcessor", "urllib2", "urllib.request"), + MovedAttribute("ProxyHandler", "urllib2", "urllib.request"), + MovedAttribute("BaseHandler", "urllib2", "urllib.request"), + MovedAttribute("HTTPPasswordMgr", "urllib2", "urllib.request"), + MovedAttribute("HTTPPasswordMgrWithDefaultRealm", "urllib2", "urllib.request"), + MovedAttribute("AbstractBasicAuthHandler", "urllib2", "urllib.request"), + MovedAttribute("HTTPBasicAuthHandler", "urllib2", "urllib.request"), + MovedAttribute("ProxyBasicAuthHandler", "urllib2", "urllib.request"), + MovedAttribute("AbstractDigestAuthHandler", "urllib2", "urllib.request"), + MovedAttribute("HTTPDigestAuthHandler", "urllib2", "urllib.request"), + MovedAttribute("ProxyDigestAuthHandler", "urllib2", "urllib.request"), + MovedAttribute("HTTPHandler", "urllib2", "urllib.request"), + MovedAttribute("HTTPSHandler", "urllib2", "urllib.request"), + MovedAttribute("FileHandler", "urllib2", "urllib.request"), + MovedAttribute("FTPHandler", "urllib2", "urllib.request"), + MovedAttribute("CacheFTPHandler", "urllib2", "urllib.request"), + MovedAttribute("UnknownHandler", "urllib2", "urllib.request"), + MovedAttribute("HTTPErrorProcessor", "urllib2", "urllib.request"), + MovedAttribute("urlretrieve", "urllib", "urllib.request"), + MovedAttribute("urlcleanup", "urllib", "urllib.request"), + MovedAttribute("URLopener", "urllib", "urllib.request"), + MovedAttribute("FancyURLopener", "urllib", "urllib.request"), + MovedAttribute("proxy_bypass", "urllib", "urllib.request"), +] +for attr in _urllib_request_moved_attributes: + setattr(Module_six_moves_urllib_request, attr.name, attr) +del attr + +Module_six_moves_urllib_request._moved_attributes = _urllib_request_moved_attributes + +_importer._add_module(Module_six_moves_urllib_request(__name__ + ".moves.urllib.request"), + "moves.urllib_request", "moves.urllib.request") + + +class Module_six_moves_urllib_response(_LazyModule): + + """Lazy loading of moved objects in six.moves.urllib_response""" + + +_urllib_response_moved_attributes = [ + MovedAttribute("addbase", "urllib", "urllib.response"), + MovedAttribute("addclosehook", "urllib", "urllib.response"), + MovedAttribute("addinfo", "urllib", "urllib.response"), + MovedAttribute("addinfourl", "urllib", "urllib.response"), +] +for attr in _urllib_response_moved_attributes: + setattr(Module_six_moves_urllib_response, attr.name, attr) +del attr + +Module_six_moves_urllib_response._moved_attributes = _urllib_response_moved_attributes + +_importer._add_module(Module_six_moves_urllib_response(__name__ + ".moves.urllib.response"), + "moves.urllib_response", "moves.urllib.response") + + +class Module_six_moves_urllib_robotparser(_LazyModule): + + """Lazy loading of moved objects in six.moves.urllib_robotparser""" + + +_urllib_robotparser_moved_attributes = [ + MovedAttribute("RobotFileParser", "robotparser", "urllib.robotparser"), +] +for attr in _urllib_robotparser_moved_attributes: + setattr(Module_six_moves_urllib_robotparser, attr.name, attr) +del attr + +Module_six_moves_urllib_robotparser._moved_attributes = _urllib_robotparser_moved_attributes + +_importer._add_module(Module_six_moves_urllib_robotparser(__name__ + ".moves.urllib.robotparser"), + "moves.urllib_robotparser", "moves.urllib.robotparser") + + +class Module_six_moves_urllib(types.ModuleType): + + """Create a six.moves.urllib namespace that resembles the Python 3 namespace""" + __path__ = [] # mark as package + parse = _importer._get_module("moves.urllib_parse") + error = _importer._get_module("moves.urllib_error") + request = _importer._get_module("moves.urllib_request") + response = _importer._get_module("moves.urllib_response") + robotparser = _importer._get_module("moves.urllib_robotparser") + + def __dir__(self): + return ['parse', 'error', 'request', 'response', 'robotparser'] + +_importer._add_module(Module_six_moves_urllib(__name__ + ".moves.urllib"), + "moves.urllib") + + +def add_move(move): + """Add an item to six.moves.""" + setattr(_MovedItems, move.name, move) + + +def remove_move(name): + """Remove item from six.moves.""" + try: + delattr(_MovedItems, name) + except AttributeError: + try: + del moves.__dict__[name] + except KeyError: + raise AttributeError("no such move, %r" % (name,)) + + +if PY3: + _meth_func = "__func__" + _meth_self = "__self__" + + _func_closure = "__closure__" + _func_code = "__code__" + _func_defaults = "__defaults__" + _func_globals = "__globals__" +else: + _meth_func = "im_func" + _meth_self = "im_self" + + _func_closure = "func_closure" + _func_code = "func_code" + _func_defaults = "func_defaults" + _func_globals = "func_globals" + + +try: + advance_iterator = next +except NameError: + def advance_iterator(it): + return it.next() +next = advance_iterator + + +try: + callable = callable +except NameError: + def callable(obj): + return any("__call__" in klass.__dict__ for klass in type(obj).__mro__) + + +if PY3: + def get_unbound_function(unbound): + return unbound + + create_bound_method = types.MethodType + + def create_unbound_method(func, cls): + return func + + Iterator = object +else: + def get_unbound_function(unbound): + return unbound.im_func + + def create_bound_method(func, obj): + return types.MethodType(func, obj, obj.__class__) + + def create_unbound_method(func, cls): + return types.MethodType(func, None, cls) + + class Iterator(object): + + def next(self): + return type(self).__next__(self) + + callable = callable +_add_doc(get_unbound_function, + """Get the function out of a possibly unbound function""") + + +get_method_function = operator.attrgetter(_meth_func) +get_method_self = operator.attrgetter(_meth_self) +get_function_closure = operator.attrgetter(_func_closure) +get_function_code = operator.attrgetter(_func_code) +get_function_defaults = operator.attrgetter(_func_defaults) +get_function_globals = operator.attrgetter(_func_globals) + + +if PY3: + def iterkeys(d, **kw): + return iter(d.keys(**kw)) + + def itervalues(d, **kw): + return iter(d.values(**kw)) + + def iteritems(d, **kw): + return iter(d.items(**kw)) + + def iterlists(d, **kw): + return iter(d.lists(**kw)) + + viewkeys = operator.methodcaller("keys") + + viewvalues = operator.methodcaller("values") + + viewitems = operator.methodcaller("items") +else: + def iterkeys(d, **kw): + return d.iterkeys(**kw) + + def itervalues(d, **kw): + return d.itervalues(**kw) + + def iteritems(d, **kw): + return d.iteritems(**kw) + + def iterlists(d, **kw): + return d.iterlists(**kw) + + viewkeys = operator.methodcaller("viewkeys") + + viewvalues = operator.methodcaller("viewvalues") + + viewitems = operator.methodcaller("viewitems") + +_add_doc(iterkeys, "Return an iterator over the keys of a dictionary.") +_add_doc(itervalues, "Return an iterator over the values of a dictionary.") +_add_doc(iteritems, + "Return an iterator over the (key, value) pairs of a dictionary.") +_add_doc(iterlists, + "Return an iterator over the (key, [values]) pairs of a dictionary.") + + +if PY3: + def b(s): + return s.encode("latin-1") + + def u(s): + return s + unichr = chr + import struct + int2byte = struct.Struct(">B").pack + del struct + byte2int = operator.itemgetter(0) + indexbytes = operator.getitem + iterbytes = iter + import io + StringIO = io.StringIO + BytesIO = io.BytesIO + _assertCountEqual = "assertCountEqual" + if sys.version_info[1] <= 1: + _assertRaisesRegex = "assertRaisesRegexp" + _assertRegex = "assertRegexpMatches" + else: + _assertRaisesRegex = "assertRaisesRegex" + _assertRegex = "assertRegex" +else: + def b(s): + return s + # Workaround for standalone backslash + + def u(s): + return unicode(s.replace(r'\\', r'\\\\'), "unicode_escape") + unichr = unichr + int2byte = chr + + def byte2int(bs): + return ord(bs[0]) + + def indexbytes(buf, i): + return ord(buf[i]) + iterbytes = functools.partial(itertools.imap, ord) + import StringIO + StringIO = BytesIO = StringIO.StringIO + _assertCountEqual = "assertItemsEqual" + _assertRaisesRegex = "assertRaisesRegexp" + _assertRegex = "assertRegexpMatches" +_add_doc(b, """Byte literal""") +_add_doc(u, """Text literal""") + + +def assertCountEqual(self, *args, **kwargs): + return getattr(self, _assertCountEqual)(*args, **kwargs) + + +def assertRaisesRegex(self, *args, **kwargs): + return getattr(self, _assertRaisesRegex)(*args, **kwargs) + + +def assertRegex(self, *args, **kwargs): + return getattr(self, _assertRegex)(*args, **kwargs) + + +if PY3: + exec_ = getattr(moves.builtins, "exec") + + def reraise(tp, value, tb=None): + if value is None: + value = tp() + if value.__traceback__ is not tb: + raise value.with_traceback(tb) + raise value + +else: + def exec_(_code_, _globs_=None, _locs_=None): + """Execute code in a namespace.""" + if _globs_ is None: + frame = sys._getframe(1) + _globs_ = frame.f_globals + if _locs_ is None: + _locs_ = frame.f_locals + del frame + elif _locs_ is None: + _locs_ = _globs_ + exec("""exec _code_ in _globs_, _locs_""") + + exec_("""def reraise(tp, value, tb=None): + raise tp, value, tb +""") + + +if sys.version_info[:2] == (3, 2): + exec_("""def raise_from(value, from_value): + if from_value is None: + raise value + raise value from from_value +""") +elif sys.version_info[:2] > (3, 2): + exec_("""def raise_from(value, from_value): + raise value from from_value +""") +else: + def raise_from(value, from_value): + raise value + + +print_ = getattr(moves.builtins, "print", None) +if print_ is None: + def print_(*args, **kwargs): + """The new-style print function for Python 2.4 and 2.5.""" + fp = kwargs.pop("file", sys.stdout) + if fp is None: + return + + def write(data): + if not isinstance(data, basestring): + data = str(data) + # If the file has an encoding, encode unicode with it. + if (isinstance(fp, file) and + isinstance(data, unicode) and + fp.encoding is not None): + errors = getattr(fp, "errors", None) + if errors is None: + errors = "strict" + data = data.encode(fp.encoding, errors) + fp.write(data) + want_unicode = False + sep = kwargs.pop("sep", None) + if sep is not None: + if isinstance(sep, unicode): + want_unicode = True + elif not isinstance(sep, str): + raise TypeError("sep must be None or a string") + end = kwargs.pop("end", None) + if end is not None: + if isinstance(end, unicode): + want_unicode = True + elif not isinstance(end, str): + raise TypeError("end must be None or a string") + if kwargs: + raise TypeError("invalid keyword arguments to print()") + if not want_unicode: + for arg in args: + if isinstance(arg, unicode): + want_unicode = True + break + if want_unicode: + newline = unicode("\n") + space = unicode(" ") + else: + newline = "\n" + space = " " + if sep is None: + sep = space + if end is None: + end = newline + for i, arg in enumerate(args): + if i: + write(sep) + write(arg) + write(end) +if sys.version_info[:2] < (3, 3): + _print = print_ + + def print_(*args, **kwargs): + fp = kwargs.get("file", sys.stdout) + flush = kwargs.pop("flush", False) + _print(*args, **kwargs) + if flush and fp is not None: + fp.flush() + +_add_doc(reraise, """Reraise an exception.""") + +if sys.version_info[0:2] < (3, 4): + def wraps(wrapped, assigned=functools.WRAPPER_ASSIGNMENTS, + updated=functools.WRAPPER_UPDATES): + def wrapper(f): + f = functools.wraps(wrapped, assigned, updated)(f) + f.__wrapped__ = wrapped + return f + return wrapper +else: + wraps = functools.wraps + + +def with_metaclass(meta, *bases): + """Create a base class with a metaclass.""" + # This requires a bit of explanation: the basic idea is to make a dummy + # metaclass for one level of class instantiation that replaces itself with + # the actual metaclass. + class metaclass(meta): + + def __new__(cls, name, this_bases, d): + return meta(name, bases, d) + return type.__new__(metaclass, 'temporary_class', (), {}) + + +def add_metaclass(metaclass): + """Class decorator for creating a class with a metaclass.""" + def wrapper(cls): + orig_vars = cls.__dict__.copy() + slots = orig_vars.get('__slots__') + if slots is not None: + if isinstance(slots, str): + slots = [slots] + for slots_var in slots: + orig_vars.pop(slots_var) + orig_vars.pop('__dict__', None) + orig_vars.pop('__weakref__', None) + return metaclass(cls.__name__, cls.__bases__, orig_vars) + return wrapper + + +def python_2_unicode_compatible(klass): + """ + A decorator that defines __unicode__ and __str__ methods under Python 2. + Under Python 3 it does nothing. + + To support Python 2 and 3 with a single code base, define a __str__ method + returning text and apply this decorator to the class. + """ + if PY2: + if '__str__' not in klass.__dict__: + raise ValueError("@python_2_unicode_compatible cannot be applied " + "to %s because it doesn't define __str__()." % + klass.__name__) + klass.__unicode__ = klass.__str__ + klass.__str__ = lambda self: self.__unicode__().encode('utf-8') + return klass + + +# Complete the moves implementation. +# This code is at the end of this module to speed up module loading. +# Turn this module into a package. +__path__ = [] # required for PEP 302 and PEP 451 +__package__ = __name__ # see PEP 366 @ReservedAssignment +if globals().get("__spec__") is not None: + __spec__.submodule_search_locations = [] # PEP 451 @UndefinedVariable +# Remove other six meta path importers, since they cause problems. This can +# happen if six is removed from sys.modules and then reloaded. (Setuptools does +# this for some reason.) +if sys.meta_path: + for i, importer in enumerate(sys.meta_path): + # Here's some real nastiness: Another "instance" of the six module might + # be floating around. Therefore, we can't use isinstance() to check for + # the six meta path importer, since the other six instance will have + # inserted an importer with different class. + if (type(importer).__name__ == "_SixMetaPathImporter" and + importer.name == __name__): + del sys.meta_path[i] + break + del i, importer +# Finally, add the importer to the meta path import hook. +sys.meta_path.append(_importer) diff --git a/week-0/day-3/venv/lib/python3.6/site-packages/setuptools/archive_util.py b/week-0/day-3/venv/lib/python3.6/site-packages/setuptools/archive_util.py new file mode 100644 index 00000000..81436044 --- /dev/null +++ b/week-0/day-3/venv/lib/python3.6/site-packages/setuptools/archive_util.py @@ -0,0 +1,173 @@ +"""Utilities for extracting common archive formats""" + +import zipfile +import tarfile +import os +import shutil +import posixpath +import contextlib +from distutils.errors import DistutilsError + +from pkg_resources import ensure_directory + +__all__ = [ + "unpack_archive", "unpack_zipfile", "unpack_tarfile", "default_filter", + "UnrecognizedFormat", "extraction_drivers", "unpack_directory", +] + + +class UnrecognizedFormat(DistutilsError): + """Couldn't recognize the archive type""" + + +def default_filter(src, dst): + """The default progress/filter callback; returns True for all files""" + return dst + + +def unpack_archive(filename, extract_dir, progress_filter=default_filter, + drivers=None): + """Unpack `filename` to `extract_dir`, or raise ``UnrecognizedFormat`` + + `progress_filter` is a function taking two arguments: a source path + internal to the archive ('/'-separated), and a filesystem path where it + will be extracted. The callback must return the desired extract path + (which may be the same as the one passed in), or else ``None`` to skip + that file or directory. The callback can thus be used to report on the + progress of the extraction, as well as to filter the items extracted or + alter their extraction paths. + + `drivers`, if supplied, must be a non-empty sequence of functions with the + same signature as this function (minus the `drivers` argument), that raise + ``UnrecognizedFormat`` if they do not support extracting the designated + archive type. The `drivers` are tried in sequence until one is found that + does not raise an error, or until all are exhausted (in which case + ``UnrecognizedFormat`` is raised). If you do not supply a sequence of + drivers, the module's ``extraction_drivers`` constant will be used, which + means that ``unpack_zipfile`` and ``unpack_tarfile`` will be tried, in that + order. + """ + for driver in drivers or extraction_drivers: + try: + driver(filename, extract_dir, progress_filter) + except UnrecognizedFormat: + continue + else: + return + else: + raise UnrecognizedFormat( + "Not a recognized archive type: %s" % filename + ) + + +def unpack_directory(filename, extract_dir, progress_filter=default_filter): + """"Unpack" a directory, using the same interface as for archives + + Raises ``UnrecognizedFormat`` if `filename` is not a directory + """ + if not os.path.isdir(filename): + raise UnrecognizedFormat("%s is not a directory" % filename) + + paths = { + filename: ('', extract_dir), + } + for base, dirs, files in os.walk(filename): + src, dst = paths[base] + for d in dirs: + paths[os.path.join(base, d)] = src + d + '/', os.path.join(dst, d) + for f in files: + target = os.path.join(dst, f) + target = progress_filter(src + f, target) + if not target: + # skip non-files + continue + ensure_directory(target) + f = os.path.join(base, f) + shutil.copyfile(f, target) + shutil.copystat(f, target) + + +def unpack_zipfile(filename, extract_dir, progress_filter=default_filter): + """Unpack zip `filename` to `extract_dir` + + Raises ``UnrecognizedFormat`` if `filename` is not a zipfile (as determined + by ``zipfile.is_zipfile()``). See ``unpack_archive()`` for an explanation + of the `progress_filter` argument. + """ + + if not zipfile.is_zipfile(filename): + raise UnrecognizedFormat("%s is not a zip file" % (filename,)) + + with zipfile.ZipFile(filename) as z: + for info in z.infolist(): + name = info.filename + + # don't extract absolute paths or ones with .. in them + if name.startswith('/') or '..' in name.split('/'): + continue + + target = os.path.join(extract_dir, *name.split('/')) + target = progress_filter(name, target) + if not target: + continue + if name.endswith('/'): + # directory + ensure_directory(target) + else: + # file + ensure_directory(target) + data = z.read(info.filename) + with open(target, 'wb') as f: + f.write(data) + unix_attributes = info.external_attr >> 16 + if unix_attributes: + os.chmod(target, unix_attributes) + + +def unpack_tarfile(filename, extract_dir, progress_filter=default_filter): + """Unpack tar/tar.gz/tar.bz2 `filename` to `extract_dir` + + Raises ``UnrecognizedFormat`` if `filename` is not a tarfile (as determined + by ``tarfile.open()``). See ``unpack_archive()`` for an explanation + of the `progress_filter` argument. + """ + try: + tarobj = tarfile.open(filename) + except tarfile.TarError: + raise UnrecognizedFormat( + "%s is not a compressed or uncompressed tar file" % (filename,) + ) + with contextlib.closing(tarobj): + # don't do any chowning! + tarobj.chown = lambda *args: None + for member in tarobj: + name = member.name + # don't extract absolute paths or ones with .. in them + if not name.startswith('/') and '..' not in name.split('/'): + prelim_dst = os.path.join(extract_dir, *name.split('/')) + + # resolve any links and to extract the link targets as normal + # files + while member is not None and (member.islnk() or member.issym()): + linkpath = member.linkname + if member.issym(): + base = posixpath.dirname(member.name) + linkpath = posixpath.join(base, linkpath) + linkpath = posixpath.normpath(linkpath) + member = tarobj._getmember(linkpath) + + if member is not None and (member.isfile() or member.isdir()): + final_dst = progress_filter(name, prelim_dst) + if final_dst: + if final_dst.endswith(os.sep): + final_dst = final_dst[:-1] + try: + # XXX Ugh + tarobj._extract_member(member, final_dst) + except tarfile.ExtractError: + # chown/chmod/mkfifo/mknode/makedev failed + pass + return True + + +extraction_drivers = unpack_directory, unpack_zipfile, unpack_tarfile diff --git a/week-0/day-3/venv/lib/python3.6/site-packages/setuptools/build_meta.py b/week-0/day-3/venv/lib/python3.6/site-packages/setuptools/build_meta.py new file mode 100644 index 00000000..609ea1e5 --- /dev/null +++ b/week-0/day-3/venv/lib/python3.6/site-packages/setuptools/build_meta.py @@ -0,0 +1,172 @@ +"""A PEP 517 interface to setuptools + +Previously, when a user or a command line tool (let's call it a "frontend") +needed to make a request of setuptools to take a certain action, for +example, generating a list of installation requirements, the frontend would +would call "setup.py egg_info" or "setup.py bdist_wheel" on the command line. + +PEP 517 defines a different method of interfacing with setuptools. Rather +than calling "setup.py" directly, the frontend should: + + 1. Set the current directory to the directory with a setup.py file + 2. Import this module into a safe python interpreter (one in which + setuptools can potentially set global variables or crash hard). + 3. Call one of the functions defined in PEP 517. + +What each function does is defined in PEP 517. However, here is a "casual" +definition of the functions (this definition should not be relied on for +bug reports or API stability): + + - `build_wheel`: build a wheel in the folder and return the basename + - `get_requires_for_build_wheel`: get the `setup_requires` to build + - `prepare_metadata_for_build_wheel`: get the `install_requires` + - `build_sdist`: build an sdist in the folder and return the basename + - `get_requires_for_build_sdist`: get the `setup_requires` to build + +Again, this is not a formal definition! Just a "taste" of the module. +""" + +import os +import sys +import tokenize +import shutil +import contextlib + +import setuptools +import distutils + + +class SetupRequirementsError(BaseException): + def __init__(self, specifiers): + self.specifiers = specifiers + + +class Distribution(setuptools.dist.Distribution): + def fetch_build_eggs(self, specifiers): + raise SetupRequirementsError(specifiers) + + @classmethod + @contextlib.contextmanager + def patch(cls): + """ + Replace + distutils.dist.Distribution with this class + for the duration of this context. + """ + orig = distutils.core.Distribution + distutils.core.Distribution = cls + try: + yield + finally: + distutils.core.Distribution = orig + + +def _run_setup(setup_script='setup.py'): + # Note that we can reuse our build directory between calls + # Correctness comes first, then optimization later + __file__ = setup_script + __name__ = '__main__' + f = getattr(tokenize, 'open', open)(__file__) + code = f.read().replace('\\r\\n', '\\n') + f.close() + exec(compile(code, __file__, 'exec'), locals()) + + +def _fix_config(config_settings): + config_settings = config_settings or {} + config_settings.setdefault('--global-option', []) + return config_settings + + +def _get_build_requires(config_settings): + config_settings = _fix_config(config_settings) + requirements = ['setuptools', 'wheel'] + + sys.argv = sys.argv[:1] + ['egg_info'] + \ + config_settings["--global-option"] + try: + with Distribution.patch(): + _run_setup() + except SetupRequirementsError as e: + requirements += e.specifiers + + return requirements + + +def _get_immediate_subdirectories(a_dir): + return [name for name in os.listdir(a_dir) + if os.path.isdir(os.path.join(a_dir, name))] + + +def get_requires_for_build_wheel(config_settings=None): + config_settings = _fix_config(config_settings) + return _get_build_requires(config_settings) + + +def get_requires_for_build_sdist(config_settings=None): + config_settings = _fix_config(config_settings) + return _get_build_requires(config_settings) + + +def prepare_metadata_for_build_wheel(metadata_directory, config_settings=None): + sys.argv = sys.argv[:1] + ['dist_info', '--egg-base', metadata_directory] + _run_setup() + + dist_info_directory = metadata_directory + while True: + dist_infos = [f for f in os.listdir(dist_info_directory) + if f.endswith('.dist-info')] + + if len(dist_infos) == 0 and \ + len(_get_immediate_subdirectories(dist_info_directory)) == 1: + dist_info_directory = os.path.join( + dist_info_directory, os.listdir(dist_info_directory)[0]) + continue + + assert len(dist_infos) == 1 + break + + # PEP 517 requires that the .dist-info directory be placed in the + # metadata_directory. To comply, we MUST copy the directory to the root + if dist_info_directory != metadata_directory: + shutil.move( + os.path.join(dist_info_directory, dist_infos[0]), + metadata_directory) + shutil.rmtree(dist_info_directory, ignore_errors=True) + + return dist_infos[0] + + +def build_wheel(wheel_directory, config_settings=None, + metadata_directory=None): + config_settings = _fix_config(config_settings) + wheel_directory = os.path.abspath(wheel_directory) + sys.argv = sys.argv[:1] + ['bdist_wheel'] + \ + config_settings["--global-option"] + _run_setup() + if wheel_directory != 'dist': + shutil.rmtree(wheel_directory) + shutil.copytree('dist', wheel_directory) + + wheels = [f for f in os.listdir(wheel_directory) + if f.endswith('.whl')] + + assert len(wheels) == 1 + return wheels[0] + + +def build_sdist(sdist_directory, config_settings=None): + config_settings = _fix_config(config_settings) + sdist_directory = os.path.abspath(sdist_directory) + sys.argv = sys.argv[:1] + ['sdist'] + \ + config_settings["--global-option"] + _run_setup() + if sdist_directory != 'dist': + shutil.rmtree(sdist_directory) + shutil.copytree('dist', sdist_directory) + + sdists = [f for f in os.listdir(sdist_directory) + if f.endswith('.tar.gz')] + + assert len(sdists) == 1 + return sdists[0] diff --git a/week-0/day-3/venv/lib/python3.6/site-packages/setuptools/cli-32.exe b/week-0/day-3/venv/lib/python3.6/site-packages/setuptools/cli-32.exe new file mode 100644 index 0000000000000000000000000000000000000000..b1487b7819e7286577a043c7726fbe0ca1543083 GIT binary patch literal 65536 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[c}i<OXTz6k>I#RErv3nvcIClH@!{vM)zJ_weD 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 literal 0 HcmV?d00001 diff --git a/week-0/day-3/venv/lib/python3.6/site-packages/setuptools/cli-64.exe b/week-0/day-3/venv/lib/python3.6/site-packages/setuptools/cli-64.exe new file mode 100644 index 0000000000000000000000000000000000000000..675e6bf3743f3d3011c238657e7128ee9960ef7f GIT binary patch literal 74752 zcmeFad3;nw);Hdr?j}u==7yyqfJg%kqCtqpC80t4LPu^(N8=-ER75n&prFR&UceDB z@phavWskhi=#1m|%%F}lj?UsZGsvQt5J<wlxB%iv+^cPuAew~rzTZ>Todne9_xygp zKi+>{KBRBmT2Gxib?VePr|Op8w9@9V*=$byS(eSV22c7I6u<xdPaBf^ja=8y_RqdM zMy;_&c8r=e|E_9ZWz~H@sk-eRU&U?r-g}?!yZugIm2t1{u6uo<tFQIlbKf0zPV{)P z{Hdx3p3OZsJoLz%^k3!LlXGT?_n*zl!t?Wj+&S0c89qN_PPKRroO6qKy5>w4&mnWJ z$MZk#s+do8oC$GRiOqJ$BTifH-`O?kw07GVTXsfYo9!LM+%035<l~tu!a+MdD4b!l zx#$P~(ob6@QVCi32fWp!3#G~;R#uXJP`*?Q1#MsC+HK=SDD^YfZaV=`{(t{#x7k)o zP=BzhiTa&Obfld17JdjI>U*jm2#J3_n{DpIsylAeZ?oA}or@^cX*&;p@8Yl5zaYqC zqReLd_+ljZfRn*^ItAvsb0S~E#7db_^bvivWg&Uk_wpg@|NZxW0s~rXw%@JA7W#9w znC{QhVoUu#b(VUadc9_T;ft^jG;@np*brtX*3qDS^H;5NPdwDuuEig)w2D?9%(2-D zI|{#yRD9iR8?D95?Ge^qXDz=|8CgU9QI*v>6KammHk?*-@|>EZqYYnO$MQiT*8IwB zjcsG6_)Vxma~#U=Xm-rjtfpi}VFwC1Cur7YyoLi`)=#&Vu0f#zy$X$$g*3L%uW3y8 zmuYONzr5Kox_P?Yrm@-nV3;*)<|dyyN4-Uz-LyUZkNTT;gI4>+ToAv;T(1p4{=!XK zEb1>4F$Xl(sI2a*v18FK`oNW%)lhSElHqI)TC-QUqg#xxw0P7X1TG@+NBu#}xJW$Y z4{GsQ{sQzzi-r6?etCazhNb=jn^N~z-~hqkY$f^}g8yCNU9xZn3QMGGaTEl`MFX9C zG^<s!wrGyln&R1p8$mpEuS^ZJR%JJ%CnC~F_JWC^1fz-owidt!7;Jo($7U15xt3-u zUy3=Y#UB^>k^_1rR8RtYQ(Z&ZG}fxIF8)$B1zR-ss6<%dcHRYkqOqs_HH5(0O@!H7 z(-{Bn=}Th=WLG2XbB!I3m$?Ojp&R@&FvUVkV@K53GMlm?8)Q{d_^}qt<JSQ}bq%^# z85y!6Wu_fu!h<5xXjfL}<24xlQolK<Y}moa%gnBlx{vj6u;wHYVoUM>LZgkr!HyQY z(XX%piOS;*!3)0(v9>){ouv<muoj}vo%}U`p*cDWEvoX_VEsf5bo|t5S$>_)(%i?U zS|zq{MF|F?IUKvFnF@^q@cbE|2r&0wnTB_zh%nk~0w9tZmW7^zXwRVMAE05(%JFqu zi~-E^@F=^jZj0_N+-rF+c@HZ$%}<d0_%!MT$rJu_iQe0gTG&7sJ)p%S{>o5%#{9y) zvDf^><cadi=%<{1=JIB@%@)4_lic$tKm*-W&POiG`_)0B_u0q`nyieVZjA~AiER|o zPeDoHmXg8-5KZA0ypAW5Be*Q@ODI~`V2tOVyU<?T`_lXL(B|^nK`vC{X@3_%QoE@Q zk6W7<;LupaUuJH#Vy-7pi{-r)b%;2kR)X8|hSJskLRLE=U2XP{R2!8YKC`*r{Gk^= zyn%S3<b(-Hsq3jbVRkZH!9lBme{1X;utZF+Nc<Z6vSC-UDO+X6Z~hv#8j%!o?1=<+ zEd4ZGu@z|HN~Y-k_J7-KrED`MRfM(i3<Z%XMtf3Li#p?XS<4C{%=vz}Vh1qx1d4<m z+xgr52n$o*mjyuWV$Osd2|%-S_Zf5)W}5^X1QQf<GI;F`>h&rSL^*gD7~pzOHv=pn zZpOX|VMKkAilc(3scUTLaN!oqd+b0OM&e5aa-zmVIg^N-3ba7uqC91!t)^(Ao-0Z= zBRe=&VB_K>f*4`+Pn0a&i?Yl$8QqaZV>2w}Ro8`hpBI~vsjPOLi(vhXzC8J=&Bped zU6wJL|AUwqsICB*_!{IcXlEQCj!$<ajsQlYi2^( &sjKl@1{;unAiW2w^OujNoW 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 literal 0 HcmV?d00001 diff --git a/week-0/day-3/venv/lib/python3.6/site-packages/setuptools/cli.exe b/week-0/day-3/venv/lib/python3.6/site-packages/setuptools/cli.exe new file mode 100644 index 0000000000000000000000000000000000000000..b1487b7819e7286577a043c7726fbe0ca1543083 GIT binary patch literal 65536 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[c}i<OXTz6k>I#RErv3nvcIClH@!{vM)zJ_weD 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 literal 0 HcmV?d00001 diff --git a/week-0/day-3/venv/lib/python3.6/site-packages/setuptools/command/__init__.py b/week-0/day-3/venv/lib/python3.6/site-packages/setuptools/command/__init__.py new file mode 100644 index 00000000..fe619e2e --- /dev/null +++ b/week-0/day-3/venv/lib/python3.6/site-packages/setuptools/command/__init__.py @@ -0,0 +1,18 @@ +__all__ = [ + 'alias', 'bdist_egg', 'bdist_rpm', 'build_ext', 'build_py', 'develop', + 'easy_install', 'egg_info', 'install', 'install_lib', 'rotate', 'saveopts', + 'sdist', 'setopt', 'test', 'install_egg_info', 'install_scripts', + 'register', 'bdist_wininst', 'upload_docs', 'upload', 'build_clib', + 'dist_info', +] + +from distutils.command.bdist import bdist +import sys + +from setuptools.command import install_scripts + +if 'egg' not in bdist.format_commands: + bdist.format_command['egg'] = ('bdist_egg', "Python .egg file") + bdist.format_commands.append('egg') + +del bdist, sys diff --git a/week-0/day-3/venv/lib/python3.6/site-packages/setuptools/command/__pycache__/__init__.cpython-36.pyc b/week-0/day-3/venv/lib/python3.6/site-packages/setuptools/command/__pycache__/__init__.cpython-36.pyc new file mode 100644 index 0000000000000000000000000000000000000000..f982c34e4e4b79472d6c450aad56c01d9ca63248 GIT binary patch literal 699 zcmY*WO>@&Q5S8utBZ<?5LL1r)Os_dKIlv5;4nzL{FmO|c(KuNpsK}8j$)(}Sui-E0 z%89?w6RUjCVvnV_Z}#o(^S<i!I+q{beEAd;@|!$*hKS$cXMf-U1R{tbffl5YK@J79 zp#xngp$7-hhXFi+LwE|$;0TVFLrP!>&t+7{G>!s3kqJ%kK9#LHr73bF9$#nQa%12H zq8vsSBrw+njDAKDxr(n6IQdM*FMV1`QCZ)ffv}G8<#G>=t`Rmu0^@hi7h9;;J_mlw zrP99Sm0dHjvaXWS7pTQxp?tolx;wz6nEA{oS2<1#TitS{o%N{=J!xjS!`QbRx6Tjt znt$c`d&bU<2)e@XB?`Imz3tTB#VX{`Zlk5DfPtD@pKSx**$zI(8EAWBG7R|#|2r8+ zKHXG!KaNZv37TNn`@zSx`>IxF6AaE4Lh^BJaDl`e2Tj}OjG<x1=rELPoRD@hS9M*j zV6rJ^jxf<Dc5Ue)nrpOE>LF*_slQOBt{mG5Ej{?3@L8obU%@Y8PDAf-++R*zt*2V( z^Np!<dt>ir&HVNBq03{qt37477vUJ2;P#4(T0tZE+u+CsM`ct-9elH-jEcC711{sg D`A6L* literal 0 HcmV?d00001 diff --git a/week-0/day-3/venv/lib/python3.6/site-packages/setuptools/command/__pycache__/alias.cpython-36.pyc b/week-0/day-3/venv/lib/python3.6/site-packages/setuptools/command/__pycache__/alias.cpython-36.pyc new file mode 100644 index 0000000000000000000000000000000000000000..3f84af9e21592a2844b4f4a8f2a5d28db0832314 GIT binary patch literal 2392 zcmZuz+j87Q5S<xaR(tV<VB**bDM3iEfVEQ<SHT0M5@G@`I8df4RjQ;^vSz%Nt;>35 z6l~S{B^&;LpWqMp5T5kP6Tjdmx<_lrxoB&8T0Ix_oIc&N_vYq$51)MfyzUb6FS+#C zpg(}7egVM=ry0p<NGa+pW4RStMz=CMcS0w3LpSe)9kAKlc|}6+N5Wm+c|~|fxKk_a za*ubx-s8O;67>IrT}eQjrL9!yN~f86GS+EX{2*m1!EWX8IIx<&;Hi$1ve-*UO}{i# zqTN`Drr#Q)y)+XE#ogdx(9rQm(9|~|j&E>hi#%UCr4u?Khpu!rnUE>nAxG|0&<^Mn z<cJ<xa`Sv-Lcl?{-u$&HweaJ@kL9S!MWOw@Qu<k}h4ja<RB18tcTaq^pNZpjHO^AK z7M#&f&*<l8^w}A`71*)^E=Ugrz)NHgM8Fzbim_}Qvjko(*uSC4Uqmjz_}TpposT!h z>3FzXr5PWpBXzu6C7T;c=xVIXGE<k;q|EcU;2Uw4#%g_h(sb1R5qgfFRRa)&^{7V& zbRMMq0NxWco<9~S51^@^KnN02PC~|MXmJ+W+zK5&Kcd1t=q!^EB6;9(dqhF^c!zrs z&o1xso{4Lp51{Y!Ie>4Wag0Oty)Chq762pQR7#yx+SmKB_S51;c_@@$!Wf{Mms0q% zqp12We|J$iTk_r&zcsEDdHF&#RGwXHRe!B20I~qS2cJiDE@*;uL8=&<tb(F}2uKTL z^n^srNQ)y8=r+XBfjP~Uv`BRdJJlj;nW!2YVyEPXFbtfvmB{u?5L>YbW_cCFO=!vm zL1>S<w7%8`>)rj{@8K7)@U@3PS|;yk3wnD>Ia2qIb~u~Tmk>Mf*xLRN4_H6`xl-C! zW09nLC%!n26P=wH_$~;&c7csw#JLFk-}gn~SBBcdVT)tnw#Q$DIKFXsbL_^-L?M^q zdlC^1sJw<cGWik+i196G3Q36|EKx@5t1S#~?|T6PW-_8?!t@U)aAXJ+r&9{~3^1rI z4K&5DL2qGyd}BgQzB91c+Mcipow6yT<Y?_F1b2sM2Uh}c&LNY3qW+AYGU#2o$H}R6 z^f#`7O7ZgT9n5NryAyVGMwJ~>e1<#l&I&nY+&k!KPj`*Q;p7jtLg3r<)Y3h$^*M!| zt(2zd`(SDz*&tlq?WSXZ5UO5y)Mm5)5c!IR;hRrAZ>j*~c}r=z0<hHncG<rACUJnJ zWdX&iD!3_Gx1~fvoKZiRYX%$&u1t5K=9WdXFcNx3=7^_>Hj!+cu}lly44~fSv5t&) z@;YqMhTJ|V(?VMKj^#vRoEi@cF_Nh1aCs8Rs(`#PT)2UAuHc-`EW_WTM`OY4FJXeZ z1A@>2bD>muh9)+{vgN|hql?sL1L{IKTV-{(B@e9J4lLuBT!O{&BM`x$@uCQwiK3<# zMS01q4D~@29aV8Q8|g$5FB35LxloBr&FvDd&YZ+sM?u|J(RsS4HW3Du67r$~EbKx> z7IATIFbOY_@DfjR>8K_rOie&AuqhNCoXV!QWmAt0nCEz&0V~0D!UxestW6e#px{lm zLY}cxc4|$ShO2o>fy*~JSc<QV1#$r_cexFgRbz3C<$Lae1xhz^7+4RyUnbmJCKGFU z#zl9OmAi3PFAj&THf%3izp?S$_55&%{e{)Z$|TMjQqK*C=M?x3822%F3e^DfH?SKU zA(zO6##Ln{6CrQI%O!LSFrR?!F*E}V5CMMfd1G*U;rMpY4;PWd=3m3Qz&{Mi6rb?= z>nn0y9K$_btgG~R9WMrD_!_QUnlX#>I+&oG8y1@Y8=qTdV|>g<FFAS<#>V@$CDwh+ RE`^u-03x_#dA-HW{{bjnPIv$S literal 0 HcmV?d00001 diff --git a/week-0/day-3/venv/lib/python3.6/site-packages/setuptools/command/__pycache__/bdist_egg.cpython-36.pyc b/week-0/day-3/venv/lib/python3.6/site-packages/setuptools/command/__pycache__/bdist_egg.cpython-36.pyc new file mode 100644 index 0000000000000000000000000000000000000000..027ee1ab64632e6648a40abe24d548e1b5d514ba GIT binary patch literal 14373 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 LC1<K+8|ME8&ZL_h literal 0 HcmV?d00001 diff --git a/week-0/day-3/venv/lib/python3.6/site-packages/setuptools/command/__pycache__/bdist_rpm.cpython-36.pyc b/week-0/day-3/venv/lib/python3.6/site-packages/setuptools/command/__pycache__/bdist_rpm.cpython-36.pyc new file mode 100644 index 0000000000000000000000000000000000000000..b58aff11ed7259bcdb7cd8f2f0d948c779478282 GIT binary patch literal 1735 zcma)6PjA~c6elTJR#azgF>J-U0V4)voey%dro(_D2-<DHPD_XOW}qNsk#^+Kl0s5V z?Aj+6Xm{Ml*jLhZyYwsMv`0#gvt<J&gO3m7<NNb_zvsi<-RSAFZ(sh|LFf;3?ejr@ z0!x1Zf+LP4n&K%LdOspgxc3HePk2+Z_J)Mx7pU*Q2Rn3<TDkcMC{JK%3PPYE=EzzP zy~e}P=RWVeLBkFYz(cp*8SzXTrpj3|#t20ezGtt5QW+Q2oC?atIH{zeS9WwHPLo$z zp{OY+FPzc1kg_<>^2y`KdH8xjpI12*lL^c6G1wGT<hoLg%RHG0n&g~99Gw+8P2i$b zMJbe=(=?H3B@-j~!1;POpikv_GS^gr%LiGmO(Nw3T4{(!<JfLe#I3JbTo|Epu$afQ zBu^%SLv-f|DuY^+krXyDO|zUn|M@3-W>hw+3}m94kcW`IC}omD`H4QI=b1UBRn8&Z zw18aUrG;jbeqPN+a7D*}$w(N8Zyj%9rp2sGOg747X6B9m6p(hG-EGIdho$d>SfVNP zeT^|P(D|viL{{erdPPp^a06)HuWtbw417b8y!H!~O_cRidvM;zwXcO7|Bh4$XP4jY zn_0PEW@S98GRb3orY}ZS`e<JZQ<bJDq`t1UUiYtBJ}BoZ07tiBY0FYXBC^=s-b2i* znyjJME-gW^HBIpvt?&|R;+T^)SrOw+{b|S6xAM5R#P`sz!0#o29lu3y@t8QKhD+}U zXS4LC!8<^P2lvp*=Uw|^)q&IQ(qDGg1f!(~D1|4NIIb~U+}Q)>X8E>DR|#5}VD!+3 zu=D|l38eV)E0>-dyETC(z`(g3#>MXM5CkW`kux8H1dGpK6qQQF!DG7j+R}Ly@4as6 zuo{>|E&BgrQ034p;3{W-GrjA&02l+W9JlG>n;S>}hv$o6&%IlG+3YmVucdc0I?$x6 z8lLw_O$G<GF99*o1G_&wZ1+cwMQR72x{Qt_%!}pp@n;r43uX{4;w=~0Ecrz+U5b>A zGbsi~vVf7+$DnLpzPG$z+~0KQMrO1h*1hX<S>Kunvq4Su;I*<HY#4w09}(+L2BUgW z2LPu~rXQ#-*w)<^^kD>lcC8L$0(lOj#*#s%!@D=Kan<*Uvg}uPtguL^k3iU^KL&wt zgnRG{aY%YmNIn3qhZmpxCoCuZpbi<c++nPa7@HNml2-3Ac2*^_z3DQ>i<B`pe=cUz z3_I7`wm2Z{U}`&k;f_zjz@7E|;incz_;-_f&<^(CDyzEN9y#L%)2(Nx*;?!Hs7deG KHqQ0D=lumx;N^t? literal 0 HcmV?d00001 diff --git a/week-0/day-3/venv/lib/python3.6/site-packages/setuptools/command/__pycache__/bdist_wininst.cpython-36.pyc b/week-0/day-3/venv/lib/python3.6/site-packages/setuptools/command/__pycache__/bdist_wininst.cpython-36.pyc new file mode 100644 index 0000000000000000000000000000000000000000..f9655aa78f918ee66c7aa8e98e1d3eecff491e61 GIT binary patch literal 936 zcmZuvOK;Oa5Z?7ViIoQmh$Dii;*vvSUJ?%>RD@J+;ZP({B($=<Cf(Gp?n8yhJ*9t! zzqD6Q`~^<TIHn}1W6kH!>zUbacJ}FL)PMWo`Ik$Nke_77eBejm`T#%>K{K+VD{sNx z6X6MVMFdOP%G<DoC+G>8`oAEK%oD`F#(*4w>-zvHSx`YBy4U2>1rxsLT#<z@x{x2Z zQ7oi3{6ZG8&_+?nNw5MMszLq^Tu%UMvI0Fdt-XzR$!aS6v#z=)Sk1UsGpN^DulkeL zPHa_WX`U8lqEaYtWR%Hu%9AqBqe4tfIk_m+*(6e>EyQ)&sWH{7FpTX|&#Ld{v@B+& zT82_<n?8B;;_=JtNY_KjQI@$uOL!*Z`P5S=TA}(Wb3^P;$=DiM7Vhp%QnsPK^L3hi zb-h-gyR(hu+Q#jYb}Y%o526N8`}c8Z@+z!kbr@Tji9>y^zr{9r7V6a4%9LfMcWGNA z+&ge+QFWnM2VD07NT*8!c)E0bupfDo@&xCFhHn(rjOrl}L2JUvdTikOtXNGpl#)+) zr952!3=GD_<{yuz{$jwT=E@du1(wb)m0T*gn8Yzyn^M&S-gLZ$A%5Nh7=!BofPh+$ zj=lBm{}kI|4*95U+HnErMU<zUyFTZ6DQt#($oaXAvhAPdD4N<k`(azE*%U?LR5e0C t`-4U%H1Ggt3<J*etUcw~o)U#Bn_x9U)|C7QSlk7#x0>FdT#Z`|*&o@1<>deX literal 0 HcmV?d00001 diff --git a/week-0/day-3/venv/lib/python3.6/site-packages/setuptools/command/__pycache__/build_clib.cpython-36.pyc b/week-0/day-3/venv/lib/python3.6/site-packages/setuptools/command/__pycache__/build_clib.cpython-36.pyc new file mode 100644 index 0000000000000000000000000000000000000000..b0acfd8d7c280965f8d1deb91f7c74695b75ac85 GIT binary patch literal 2407 zcma)8OOM<{5N@|0<MGUFHV+^|Jo<tr6OmZ~k&q&U5+#7RBuEhovJ#BP-81Wn?RL7` zyE`in2PW4@`4L>;C;5tm#9!b<b$ebLafmIqtIPHHx~jU`UknDpy+>a@dwCh5ztG<0 z0DTu8`7I0-Q7c1pYmP%3Xq-8@8@iU}+nJYl!j7Sx%+I@F*FxVR>Qe6|q8_v7cx8u} zT947F^AFfU4@XvW^+76CrP543W~wT`5rPX~+Zmt1>srB1nTX0b6{o3W(M<5FOtkLi z!a&@GM_z}4q0pj8`v7#9+AmS)PzU_EO)#m_j7CY8PT~_#3J6?}PM8oWWkek_LfJH~ zGDUWRWWtW)layD2C{8FhVpE=F{4_0QcLHPMvoZNTFEf_2LXnt=il&;3#eyiHq>A(M z)+CmUf`^h7loiQ>$c0oaHwFNQ<Ybueyi7B8V>AR$Ocp~0whF=kVryw^q(2{%dz6x# z3r3!^h1AG2`e6$@Ev6g{q=`y-0T}LVT#%cDPv#LokmMGTB}>xjVuvVYl1#ZEEKZKK zAWIZkBciQi9j^<QI!+~#$GplY1PYeE^Gfo#EFna|1dLk<7t~Kvb!?DJh;PEk6c%5^ zIpl(aS_V}?`1Jo(w{Zm2WAdW}=Mbp8R1jAsv|qiHS;i-E_7)blA~#7g&ElB^oVyTh zv5=V3)Pyx7tr#FJW2sZHHF05yIxp)WiZ+OeE?0dW!qbK4K0NYQ3!&H6*-33ZfcLZP zDPH2GUE6cmY%6Q&)DA_@eR*41wWF}Ir+9_?NZeHp#Wj8xt*qZHg=<I4DtGQty9Nmh z84Hf;tk4QCUC?%c#_|mG+>PE0Exp<WPoBa?t^;zNjTia*zU<jgwetWy`(f$V{>)l- z>+amIJ1Yx3frZ*%TL{2Hu(j~_z6GNZ7!7X@`kH$2=Mz+;c`)zQ4!rxc^9nC}YEXN1 zZ-r-QhNk$r{n`>goAvmx%D$mMdpR%^SX>?$8wah8x?c}!&ACK-ue{|Y^X;(i)flMD zhTnhXfN%c^v@U26gNIG0Ekt=fO$#!FJ|SWO1vVtS)LADtTGoOLKas=Hr)0R6ACkO+ zVudYG3MNe#C}4xGdAss?qt4~|J7&x3a@7{0<h92|<8Suq`O~)qvQgL}xv&}el&D1s zEuuwm$84@)gP^|#yi#SQBASZE%i~0F+4R#Q$tub;Q#M|^B}T5$<thR_^k4`N*qIV> zRC4HWVkR4xvPm@?;Z|+{BBLvfJ!7f~QkfPYRV1u&^u}&n==2#AdNT+chQ`r-t8sJ( zX*@6tZL;y8hv>Jz*+SuA+nAzFtB{+n4z08l`kZPy8(|F~yqpLYD;9xsl_rsnunYXr zVdF@aO`GmE%b^csr29{}J}ERJ;eoX1Xv6*erW5ws=3?4u<F#=OeJK*d34=B^y4i+@ z><pT%Vl-;e%UujbUxVzd`F|ksA<X~1f28vAs7&G1&_~uS`9hves^s>O)CZ*EJd^t* zEI5w~dbB&X#^s{9)K0hSdk-wjUtmDi6)Ui=TiC+bw|v}p4`ANT9Ou9~XlW;~Jm7EV zn#LY{3+!v~P2YOvXlc#$^i0ps-`@lB28f4n4*QXbauhW|6y=;&83Vc>MK7v2)A5H{ zCyFRfqDXuUcui3DhL1E)XHlm`>ZJPz4sP=rgdfn&@5Fc=nDGvesSX`1Bi%S$q_gmF zrvX0$Tu4)vO?S&S6&haMMSl!=jr1>zDY-ppI(<UpYy7X;rF{*Z9Z4UCzGZIvKd;ZD A6aWAK literal 0 HcmV?d00001 diff --git a/week-0/day-3/venv/lib/python3.6/site-packages/setuptools/command/__pycache__/build_ext.cpython-36.pyc b/week-0/day-3/venv/lib/python3.6/site-packages/setuptools/command/__pycache__/build_ext.cpython-36.pyc new file mode 100644 index 0000000000000000000000000000000000000000..91285d72b5839288cee8a11e0838ddb0f4c67381 GIT binary patch literal 10006 zcmaJ{TWlLwdY&7};YAcJ(X!-=JXYe`Of5Q%(<YmEy}rd8XR~zHPGe`9WI*wZBvQkR z&kSRUpt``yyGa(<BHM0@J`_RQx4!ftC>DL_OZ(J^qAx{JV1V{z(TAYGJ{NguzyCkO zAuT&AVa}Y}oXday%lH3>m*(aQ*Y3RX;qa2C{YsnpJC6KSJmF(q(}X7UKy%ewcXcis zuEB59HSsnAtDAANI`uJwT-SDO&RapgTW|}U&jiJ8$t`u~+&M01gK~G?o#%WmsC19G zM>uZ>3*AL`k@NYW+CAzX)wR84o@EKM9Md&_SriU*UAwRKmMzU+*(u1s(>40{v+l9? zwVv@n^XEj7`rx|~W<KtoKz>e?A8YPOG4Gzjvnnd?X<zR+;>eC6e=Qc=)!r3f>zomb zJLc!Qys&p1U+ck|yXHUVuZik`VQKEFdkXU|sd>@s1vRspRU8#dnBjSGOf2Jl_Pd%` z5yu~E;<$h8z;rYI>gRg+Q8I^tuRG$5I3Z3x*4^LgmBlIdv{)0Xsw_?m2V<NQ`aP}o z+*fowjhY_kH-_y%c>Zogg;syC=WVtFAB9rSf8@3L-2sZSX2c7vVHowh?UA3>#^o(P zLaDde-ts<fN_<tm*$$&&)DFTor0i3T8T7aC%Dvs*kWINqHDP;qRK2kmZTEZi8_5jy z?>F1M*na!wy*IDjed8v&m1af`TVNgjGmsYX+`tpMNFuGH3mqhHL`KIv(DwDw^TLP> zVP4jRg?9$;EZ(`xT4aqib<{#b@5})X8Sm^^r`iWv&z|%U8pvcf;;d-ONA2F|#jRG$ zS-&4#Sl@Nl#a^%3ZMTB<hO<8G34gQQ^M#YtdO^RxGaN`-<ft^;Iks=yP`evt>tYX| z$Hu)owHyet7smD=XhxfT*~P|h+-cmp{ax?9Yj^L(79EPrV6-^X3jC&wv%`UCMn2BO zo}5o?M%}^RXmT0dzP^4Dg^PpsV4V+lJ$xAMZVX#5Ukv?dIEecFAe_x&jBc|hE~cDN zAMC}ayr+-b!|J?n8|yxWX~HTJO)prsZkV=C|0ToL%Z4O*zvX7b?WXjFoI~l|*yu&E zefQnBZ+eY8_tV3qL#2lgvxH2fNqY>^GnX2TSOXvAx0@gPo{R#4f*$f7RkDIFV*7H? z>~4tWl`ANPcr@uCX;F^;h+!-|JO}mJeO2hfc+8A*pxp#R+|)i?`@q}>>+I{o9BVsS z`2wwC3<d&YRVn|ldS4S6FhzFs`d!db_MB+jcSu+qNRQtO+x?yc3OUW5)7)rZTBoxK z+Ra|%yfJA%UrV=6%QErMibDs<So?5!UmrsuuJF<@u`$-)1AQJEiX30jHw_%S+3pVF z;tlVO2k*YoxOe*w)fx2{<!Q7ZBG1?P%UgcW-yO&+OaMiV(HaRZt<npJo15+3`sJYC zY6jtzdfI)IsZ)oM1$GdaL9Su+xI`bSZ~PF`W>r4cy+aen^M|ImhR?$S63tizuUL3w z4W;y;sEH_Y6;Jpv5?>?p0Mo$71=C;(3o6VK8Ii?1BXYvVJ1g>{fOk$5MG0>^QOtQU zFDfV(#1XN8cTp^gD&D0;t<EKC6^c?E7bl=J=fz1J@Tw#tJ#kP}!Q`tWGuArbPXpXC z);ulJJBCs!V=j-O!_fnZ2o}P?aOUXs>!f3+ToO9%p2O1Sh_>`wQD5#|Aa3e8B<oIl z(^+3{_n;42z9jKz)GRlbRKx`@71Y?2!(P0?T07;z(2M$B*dNLkX$ULygH5;ChmN0& zNIGIFKk~Ox{2rd<Y|45;&*F4ObLlj7%#xCWPB4du$?><yC~_P?bauZ$o`mTa`ydI( zLi$+Whd_0#G3AhUGQvO(DYR||1~L0%V+A6(4;|dejkCz*BD<4Et9lp4)`5Ot?AuAL z)+wUK*w06$aefSC(V4?j7S_)!UBis?aslPaI5+qLUmO`j{~wr;p#_L9>GWJ9w$;v{ z<@EYjL|@P;_pvWG`k^1^gxvG6;dj6KKm64e;-kdJ(D2OwrcaRVBW)QMrUZ{G)CFa4 za~K3L4SsBKI<1G6;F?Sbl@P^Nr{C_mEFpttYp1#8d*FoF=!da2Xhz#uVlz}<BnBEv zSCVkZ-=X9sByrK}`MwA}*xQY`@JO~JU*)r{p~P^tf?TK0#Iv!9<;8ZoKAZFwt;o%F z`+}#;B`b-GGfQ&kgdfuOlisCJw$joeiI*2J(LFrjDiT-*y@dY){ul7TGU%0zfp@{k z>Z9kT-1Uv@+aj@}KO0Y~!heYZ+5E8vt8IYOkn0#w*<aFotgmSMW@L7({>xEjYzp*2 zE(=^>jV<|6lvDf%zR)6joH@{o8gU@TF{sxu<f8o8j0y*a{7F>ol)zu$*bj{TEOT<X zGe6Eol>>-&bOdvnodx+N_ghT*<@U2&u8wmsCfQ>e^&OKcuo`X|04r#BaaO`>4%%@6 zI^4VW`?qf0elRjcuwFYVU%&?Ct4QJ;@l>}tkR)`m`Of>7;v8758AXy+XT0bU=S=~a z_v)or0J!{KTxf^wUKlldP$795@O4Tq(>ONsAn`+)jXAM2gS@yxTn3Dmo^YH)O|&=g z<NPpG+!e-0uz}tVtC<Ay$Zyf$uOX?~iswi>$eWa0N8;M_HCYp&f<8$~Y;5*oT^!~h z+I1UGxQ0Yi+yicbMl#4=5FZuv3OI?<1$}gU%0;ONCajt&EE4cke>*5B=22)K8r;}| z3iHf1r539Qy-~~XDZ~ryUOQ^D<a_-=1PdR^I~W3Hk6=(J-$bFNt34mmtM8%d5AlS= zy(A4;{EtpfSN!zY>6%Hw65?Ye`x16AT{AKHV1d_6N|ux>*b}yfjU<%_(a>Iyx8!xC z40Cr+s<sao$Ziqj?c~r;_w0vn-Pd;iC29R9f*>6`5v%;zxC}8v8*-h3fD#wk6%BPX z_Fp0`5_BH?wa7p?%>FN<5}vuS9+eM_5{aCN8Ro|p(h7P*9UthHwx2<HAzJKIJ4ZQP zLfbJ2BbkOQ#`)hdt#5fJ2cO2KTxW$$0~EX|x1$oC#m;fmpV-OCZF+ZBsD^qx+)fpJ zN=`a{A}1>+LZ?JNB1DAEMbHou3;en9(7LA#Bf!r0(TfEK`R6H5e0+#qzb;%3;O&t3 zT=^8uA?c{BX6U2(^pq!-W5Pc(NGttVUZlZaL~=`BLRvei*spT<WBI#ib&s~T{nieN zkwTpz1Tu`|eYC|@#`p@Qr-Chi4^8qFYA>*j@<{bF^RnoY;2)CcyYxj$1WA;W-=TyR z6GnlUsZpkiB?qI!1Cu6@1hwPRM5CZ7jI+(b!0!opjhd=3vQfM1WARGqP?uUx$r4kW zxZgE{NWgmtS(~_7bVk2J2O-}_&&PN|GC>o|vjEKjp9FfM1j#E{Rimm`SqdxqGW16Y zrCAMfnAj=%5bLDU_-hovHf(?h`E_7oerAHFS>|AJ*p)<mR%knU`6{?GM<wQ7tz&cT z#_lTWY(S+d42uET(MiGpk_>P#<Pog}?)j75Wy+&x8PcRP_#rNjxKD}u`~~U>1eKCG z%3S*;YUfc~PHHP$`_HI7g4#+_yTG;oh1x~bE>LX*sia*%Mysq3jYiFsOW3!<9T_+| zz?Msr*nL_rTT~?N$PQp!YWG^fP%yFy-3s^;2y~_<tNdobarU2K=UTGwX4s#0%M-U+ zRmXY7ByB%*=V+v~C_PN5MxW&)HzNtuxXaY}S&Zg_GkZH;f1?BZoh)y*CSKr@@?n#1 zan56V>%lxQvSOOBSY<wL21DP?@Fos(r;8>26`t@s5=}SsWy3ZI9TkiU_>gjB(FiN0 zk2zYM>X2v2bPA40xtVy_R-8m8RcaNSD!~+hAqAEILD;sXavhi98TKVSy1niO!UBoa zQ?_)r0a}oE{0uE9JDBqy@Pt_;%FxZ4xu*w9mre|n#&SMD0Sng1aRMvq`^M;M1Uwf( zDC8PyunA9(GB90?{Ll-cCErGi4U`7~VtiI0lS5)eW&k3EZyqS*Z!{PR*NW~*XvQ7@ zf8-7Jb`xKT@l4R{Z7GgUNu)TMFj+jGo`}-BN+G_CCRTRxDsnYzN+>s<YT(#xb)P~z zJLvz9c#=qp4c%mb2S{gS@l=e_N;>1zqNur38q)C-9f<|PcaW%f7zH>$83qFf`ez8F z0xIYo3;q`waZBV0^@{A44t%PArbpRNv`_R+M9JV&lgZ5yj5wfRVPW*0Nx(x6eezDv z!StMSNI*g->O0Lz=nGXF<l9nUB!q==5>F!4q!V6cL%e{+vLP-o=FnyhurB`qt%>ag zqJ@b#1g{>T{on9}G-g(tHMzVn@`4k1`i&;H!8TV?H0!A)k{u2SD=4J!Db(RH?Nfw? zl86lXl6r$zHCZNsWwL*8C+#E~#^zvWORb%vRq`y7f2X0<xs6naj%<1TH!OP+!cpkJ zjxEt{kvk{*-5q}~WYf?1o5`kZy4mdQNgq=^CA+BT(^>|U@Ty4m{uPfB;mnfmJYg9R zuPh}Nkm(d#(|JyCDzP3pQ%d8QO0N`274(PEU>Jo6Fs8h%v?{r=;iUN+Fm;3}{)5&@ z)YJ6Q(R7UZ%-HGjNG2vvNEql7Z4<F#$cFtXf;hzCz<?CM(NRXohWyFMLY#@DCy^a& z!D^&K(!_)Xm^}!wfj!PE{*?v|)iE)YwMi%%s!CvrFN{CZX2W=l_8LGsjHgogq|T2} z)ASG%&SLQS1W8g}`cL#{+-X5~j9#45;~7Mqk%I|CrTa?BMB`1^9@qqG82H~fHrc@} z+nbDxV~b)HZe|lv#^|t=61)G3hE(hh!$}A>&cpwe9Egr{1KAftaPyhN452t>2Ij^V z;ap%5GDU8w7gC!?vxjkJ&;)!`;+XhjL?d_c8FYwgLF|>8@F%T`K05Uq>6Q{{!tN~^ zU=4}j_^dGKc){|}vamzCToo48FnG!|MkXSt97b)i0pe^QM@yC?w#l!gTa_oymz5oF z;F#LLQ^ff1bQ26|OZw={;Y~dC&8-$$3i_knQ~dr0p0JL6DXRe|564aMG6D@9fLSmy z>cGfw&4`hOi3kbYI{6m&$We3-d3$ULi!8~H*jWt!K0@3Mkv9XbUZztNS=b#|7J;Z8 zUA7(5M3KKoY=r>o60X%KYKzu+Sf>g_Y>{6?zABC)w}c!n!NkfIASy%GOlO{v0$r`W zK=E6;^xMa!AzVjmOGgbkym@ho<AQ*;VijkzxSvB*=J<}qjwSa*d8X%dS2Qk-P|_%e z`YP=;In~pRkwX!;c5lle#pMM3rtl@l|Ie~fJR7o{tHVF-Gy~~3#U6sdVBzqL^A2uu zLf;X7;75Kv)*r=sVN?Yac06yR-;dzWH3yz|zV_N^-Eo|)puf=!o@~2-BD-N8<<tT^ zZ*&&jaX$c5=iplDg44$X8{|n}1%**W^T@j3h+y;@I!{J%zWrps`s9l=9CY4em(TMq zoRzgv72jh0PcCYNN`?s26`dnUpf(WFevVQX{Hbr#bw7tH3R7<e&8-k?!Qx4&i=Ypm zkt@&FM$1Vj_<-or=N_#`0xdbTL~`%7(RpMrQdn<oqt|(4$P=g|PqrCbP&BL6M$dCk zng;-Tb{-MbCs$RqWIT|pPD`C&iYY150Y^oQ$4+E`WvqSE;OQP~qb2S$T`G2uW!6UX zhj@Sy3f~0Kwdlqk0=-Gh?p<iZF=SXdUoRmS7dh@11mq(jnn;o!TkRg4HiA^sIH0mO z-=gNM;z~(jC*|W=MD#erLFG8p-t<HuzfG+lQh(e-QmDKvz{`BsTc=e1kUB6NrX}H; zvPZxn2?@r9L>*y=Y|r9cvIjR$62!+6>zis6-qRt(cNK&F4<1Ij%FkGa?juK@LWCCn z4F=GLQRbY1da9YcRjGi>O2BJeRjTkby_fY-b*eq5p>*7k->Ow&d&2h!pLmFu4-xzD za82ty95y-L?|FQU!Vz$ekjVG2P!3B-^8VOIl7#mqK`lu*Mh+?2qvR?j)7_@ZpD&`` zLL*yb+_2jAl6}<9+NbOjcE+Bw^R{Uh?X0@6nnOqWqjwn(>vnQE$ui*qB%u%kf^iw> z$Q<rY^5ep|I4&LVPbd^r!;KLgnp;*E)!y5;uiw3P_x;)&8{IgUILvW5In4y;%Fi$l zqfK_mWs`~&$&E9@-xzMia|8~W-T+!qZiVD`a<PvPHI)mB`jJl;n^Z+UJ~?Aks*p95 zn@CQ<T!j=7*D@3orhl$SY#E{PcB?fZL<L>QCuKr>gbc0&v>iJvMcR)T_Q55BSp&*3 z_vaY9S>rh_m-i`hl3}-!O`m*oTm~#uR|RFX<v`3bh-rg-nZzhqjac86T}<?qiKJ%7 z<!fOGpo6$E{~BUO_(<+#gOYcU#08>56h3MrW^tqiBJo`g?S{p;qMXXlssGO@`6hD9 zKc?0{q2w2o{3#`WM#)V|ScI=r?iqBwKy)R>(TZ?B>EA3N?EVD$A^gDPTtbF1gSDec zkY*phqo8Y0a8YLT(*h~B+dXGHiU#3p7cXvMU&D<$1peY+Z_u3m^}zsFW*2d7alv^6 zbJz}BeK_X6;1S;8pNKe@>X+&-!g3CvbYNTIT!MR&3wL$>>`=H!auX?e=iI$J=juF! z{BtZ+xq0)*L0xi1T8j!|lemOg=>{J$DridL8sISs?Hs1m_fU6}D8<o^4Cx(7b+tl+ z{?vUfGEbGytJA01<ReN5K)NTUIuz8Qo5iW8&tmP)d15$)#_{6x12$x=d5PU-TUv=~ zl^mm+ZGp8@*G2q`65gm=nGWgGk9I;f1aUsCW+URN&@!X;dU^mHBX^H*glgI(dwgZ( z9#4Mcb2Bv*sg_kPA@r%jD$u9J+l*S2q|lE+Bzcq^Oq8pXyGzLrC^<q22i^=3#JTNe z$ai8trs^6cq$l`TW{!_pp0o&lGNP3D6`Z5`5s^|O$|Ml;!!#K57)HtD=p2kj$+W9v lWGuw)C_Y1XnG5KfHK2v_l^<$9Sg?Tl@n6bYrpgtn{|~z9y1@Vd literal 0 HcmV?d00001 diff --git a/week-0/day-3/venv/lib/python3.6/site-packages/setuptools/command/__pycache__/build_py.cpython-36.pyc b/week-0/day-3/venv/lib/python3.6/site-packages/setuptools/command/__pycache__/build_py.cpython-36.pyc new file mode 100644 index 0000000000000000000000000000000000000000..9595c810929c36ef56beb411b39ab2d1f9faa435 GIT binary patch literal 8531 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 literal 0 HcmV?d00001 diff --git a/week-0/day-3/venv/lib/python3.6/site-packages/setuptools/command/__pycache__/develop.cpython-36.pyc b/week-0/day-3/venv/lib/python3.6/site-packages/setuptools/command/__pycache__/develop.cpython-36.pyc new file mode 100644 index 0000000000000000000000000000000000000000..19c75fc7905c34ca893de9f85163bf1612c47242 GIT binary patch literal 6385 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 literal 0 HcmV?d00001 diff --git a/week-0/day-3/venv/lib/python3.6/site-packages/setuptools/command/__pycache__/dist_info.cpython-36.pyc b/week-0/day-3/venv/lib/python3.6/site-packages/setuptools/command/__pycache__/dist_info.cpython-36.pyc new file mode 100644 index 0000000000000000000000000000000000000000..e58be00a7683ab47c724fc55fdca3be2a5e8702b GIT binary patch literal 1352 zcmZuw&2Hm15GF<0l4U#HE)X>R19VG$hy!#N=%Q$gO;ezkB0cmbpde(Cc4Ww+LQ-hs zIwxlzX5V6;gV&z=3ORL#{z;rx0*9mFi1U4%kFSQq<l@(Fe*eG-`I|g>Lh#?hFmJ#J zk`X~gP|=LS%&K6)GDa~LR^g(Pbtw6nh>qyq6Va7y&9bftej}r3`BQSKWo~7fr=m2L zm-SSEr)6Q4zD+JnD&(}RrAW&<wbwHJ<66opHH|FFX<6j9RCV$XU?5i`>Y_`vSmd<; zmsM(3V0`xggAL*_IFbNTk_CchObli;3pePpj)+8jPXJ#}Brr#!4>*Uew@0`9ve+RW zWAN+{@<UI~W@nS!$nPDM55MfWq=l+&Ue;wjOUIaV@LwrS`V~;k+sb~MTGga#>iHVg z>O!VgOF1g&mJH4Tj7u0M0VBwYaIk=t;z7hvfFlU-LnEu{d!jM#;m32kXwI9mIh(X) zCC<!^`E$}1ug{INZDW<H%u~16oagzT{kXYxFM)(D^Qv4*t{UusIYuCeh|uL1kIDZ{ zJfMIyJOxzK7QBZ!qPhnm?{7>WKHUpY!a>;+i0;aM_E`3L+P)~(!QqS6;H=0TRJx{j z6g;}39L79Y6G~ua+c^}(c0{nIeey2&lnC|-xeIJ}9*J-s+ul5x_gAorFZ_o)c3?-g zV)Fs)62e*lcL96Tz1nmJTfgk>Rj^DRm9!jsd7(;9|GGPM{fX!0We++$o=MAh`~=_j zN5{ZL55YL5+gcxauadP!)w>Yux$acyMQ&Z7j0>CGUb`rt7<4j}%hy<E6mAY4H^_$j z6Xl>{{Sm~Tbwqy*vCm<c7hniYXzbq;dJ-gb`MALtP+g6f?m(9AqKUwaVi$8>=L^ZX zOE_OB(N^dWIKOH0YP-@G(iFP%N^^tONWGJt9^h8U+aq~`4#lofG#dMjY5tzXLCCsc z%wp!_qsT>^3srEgQNr#BDYv$)%(zfmYLxWm?)#uWPXFism2&ZS8wNjMO@loNgE$z_ G0s9w%ky{J^ literal 0 HcmV?d00001 diff --git a/week-0/day-3/venv/lib/python3.6/site-packages/setuptools/command/__pycache__/easy_install.cpython-36.pyc b/week-0/day-3/venv/lib/python3.6/site-packages/setuptools/command/__pycache__/easy_install.cpython-36.pyc new file mode 100644 index 0000000000000000000000000000000000000000..08d18e5bb379750823b00becc94a1ed158df356e GIT binary patch literal 66239 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ξz?1_p!D#=zY!o9z=);}q_8%)fCyIn)+jKxfk97% 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 literal 0 HcmV?d00001 diff --git a/week-0/day-3/venv/lib/python3.6/site-packages/setuptools/command/__pycache__/egg_info.cpython-36.pyc b/week-0/day-3/venv/lib/python3.6/site-packages/setuptools/command/__pycache__/egg_info.cpython-36.pyc new file mode 100644 index 0000000000000000000000000000000000000000..24d5dcbf7a57e80760527eac9a8ffec90d9e6e03 GIT binary patch literal 20935 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 literal 0 HcmV?d00001 diff --git a/week-0/day-3/venv/lib/python3.6/site-packages/setuptools/command/__pycache__/install.cpython-36.pyc b/week-0/day-3/venv/lib/python3.6/site-packages/setuptools/command/__pycache__/install.cpython-36.pyc new file mode 100644 index 0000000000000000000000000000000000000000..99c0e85aa55cfaf69ac7827f49454b54b9267ab1 GIT binary patch literal 3932 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 literal 0 HcmV?d00001 diff --git a/week-0/day-3/venv/lib/python3.6/site-packages/setuptools/command/__pycache__/install_egg_info.cpython-36.pyc b/week-0/day-3/venv/lib/python3.6/site-packages/setuptools/command/__pycache__/install_egg_info.cpython-36.pyc new file mode 100644 index 0000000000000000000000000000000000000000..ae1eb9dd21a8a1fd838ed8eb328e56de45a2b560 GIT binary patch literal 2916 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 E1*M+ub^rhX literal 0 HcmV?d00001 diff --git a/week-0/day-3/venv/lib/python3.6/site-packages/setuptools/command/__pycache__/install_lib.cpython-36.pyc b/week-0/day-3/venv/lib/python3.6/site-packages/setuptools/command/__pycache__/install_lib.cpython-36.pyc new file mode 100644 index 0000000000000000000000000000000000000000..7d3d1e0f4b6cf2b3c643cb0455d85f6d14ad6b64 GIT binary patch literal 5050 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 literal 0 HcmV?d00001 diff --git a/week-0/day-3/venv/lib/python3.6/site-packages/setuptools/command/__pycache__/install_scripts.cpython-36.pyc b/week-0/day-3/venv/lib/python3.6/site-packages/setuptools/command/__pycache__/install_scripts.cpython-36.pyc new file mode 100644 index 0000000000000000000000000000000000000000..f5eaa79e99b520ce5319148e26839205d86317f1 GIT binary patch literal 2237 zcmZuyOOG2x5T5RNdTb}o=1B;`1O;SBb_GG=K!k#b5;(9Ra)>li)EZCsdS^1Pbhp{8 zHRgaLapPBT;m)t=0~b!*IdOriw!K*v#_FD$nsRkLzOUx)a2S8~^~X<t>^aWw&Z)}- z`93W5Eo|K3q;x8h5P~u-Y2g-L;#)aL0(%dW5bkanRlTHF#YtTClRj}CIo#v^ONaZy zFT9nTc$_|VCcz)z*O?IGmd$K`;+nyOTxpq4=Q?j{Gx#RehhGVu@>Hj0Bx*I6g7I96 zOgHj4!#{5?7liw;)O)ZACn4NPC?|=_DR*BwaG(tU!i{;zqn88%?m-BBb3U(?PRo+1 zOy;dti%%Xj<GPVmT8`JM@y6ozxGm>uoYu!<F`KcxK4`{AGHqKSH<l_Ra6Ddkr?5VU zrLMrHoq`m!b5>YB(mBlK4xCT-A5J{uH8P*c0L;uzUgtVb%X}eN(_$Tz@#}_(7V6|F zQ6Bu_$Ua#9^~Ij9+PyY!?@Z@;$?vG=>cw=PeYB^9p0~PbN_ASynyN}`zIP_w-S${U z;BEj*VZ$9VAd8!4t^OO;Nvar(56h<dCkPyhU)pq+kZ1udz@$O)3SZvVK@k?wx)60R z13l}(yI9`Cf`HUV`z6(bjuu0G4tH4RR}}UUtP3k|=~_D%>^!~GVRN08yY#Kr2W<e_ zfCoGTZP=0G;xg(&`7@8eh7_0J$=8>QE6=F>wex2Lv{7+&<$yjauAx-C)}f!?i<_Xi z-nm_`czxxp=mY2Jxn&IJ-00$;pv%vHdjf2LM)vk4_S{5UXqcgG%NAB97B56L*Xgtr z@QMS_*%4F~z?bw{u9%$H@HBh4h}&a**wnjVKY7Ev`Kp_{n-=bhR2>8SENo4<(VD@( z)P3;BPF~@0C%g(bNS7f5yhfc1)+TD^`XDcbk}wDyb9p8-JIHH`MZWbVk!gv|a+)e3 z5i)X!_EuM?l}P$ngYSe?$l?&(q*}{l@YoXUiOjW-$;Bsm&6^{2T4`K$tmJug=1m0@ zW@nQCQ?1BYR;Egs_&_!lYg3t4NrWM$a;B1As@S1OxsYaXgePq3KIzLC{ZWx8fyh}_ zapPe%l3=RvDY1Ro_zR{-YaR4s(;O36chb1_uXvcH-+DvV$g8l8V5tvb1NzXIMC2R| zNI*T1DH&PafW$zpfOzl=NbCkQf;U&l;^JAdVKa!%EE~ZiCV=uISn3DZfM66y@zSs8 zG9ZqILCoC_$>y(Ic-~N~0I;tp5Wp#VMcjp!hJl4S&`f;~6tg-#>_YB!?o|NzvIkHH z(plRc&<;S}`S2bnat+?Y^a=p(;o<|^NSKD>SHK=4e8##N>qD^}iQ|)jZ3!}=#?KC` zhMQqFmr~T4&8t*BTU`Hg4QSxN_?Fs^Uhs8G8FG~W4eZ*VjN}E#U%rFeySU+uH6D&) z)8Cd64m7k;#%tmGVZ5TrYk3Xr0-V(~HzAkD$Tx{&3x+Q!jc?lwv6YPylX#7q{+cNa zQEj5EsWrq4jv;)Jg!v3U6N0~r#snJhAv733Mur@mMar9S-d$Msi{Q`^9a(GuQV=nK zkBBU8Y}44VboVrz_a{W&0tb`OM9hZ8n28yKfaawDdBE87d0Jw?@Dwt}n~X6#;Vn)j zhHxq@9NyBR7{5Nqdxc+vh<G&eqPOjIm<&u0DFa{SQrU_pZ=F1!45c$+%N_KLPS<1R weUxs%W`^yv8IwXabD6=c!FjTtBG`@p3(Z9L*7<#k6ILM|2Ee3<MD&vT4-idhvj6}9 literal 0 HcmV?d00001 diff --git a/week-0/day-3/venv/lib/python3.6/site-packages/setuptools/command/__pycache__/py36compat.cpython-36.pyc b/week-0/day-3/venv/lib/python3.6/site-packages/setuptools/command/__pycache__/py36compat.cpython-36.pyc new file mode 100644 index 0000000000000000000000000000000000000000..d4ac02138e2e72bb8c0a2ead7faf76f38597c267 GIT binary patch literal 4582 zcmb_g-EJGl72erhl1qxBB}aCOBxonDQ;Uv88+Fk%ZlK1n<DwT)1IK^?!oha6vy_%z z?yhE*E=7=SQ5kI?pqG7tK1<(VZhO@i=tZyko!KQR%5H=L5iv7oe$LFCzwgZI{^n-u z;jcgWX8Mk0{nI-4=YakkMF~{G5-hR$)Y=Ifu|8u&JBdAV`i`O9#2wZ8HAB~u`l!)w zFzc6=sEfvHOEk{xz85v4+OQ_PGh6-!GtJeEU|(C^*1vF)b<kznJxa1ewCylUUq!O; z^Po6Jzota23J~={oD`7^iDB`#yzmQ*L{^^(t8WX|cZ4mR*H+(+YQhz@*VY;9*UM}5 z8^RM!%z2_EHqbUjTWq3jiH^8}c0+85ZM1E1RlI|CQ|#cP*Ys6$5kC;Z7ttUXCxx2+ zyT$SMWjxu7Q=ZH0RV?E4hz~OP+dzuFFdIRN_%Kf5;*>`DV4Q|UoTY&o2^0p$so-&H zHX=#KMVu&}rTnYY;uy{S-Y315nSGq`G%I){;(`~)5f3vFffIDBc$frA@n{l8Ic76H z&P7l}>*twWaArKplV}vBMMNj_<*7aXt5g+HAnx!CCXn%B|A?#cp*f*v_6S*J0BWf` zLQ$Wgnps2Z3`1yH)!J3-RIOXJwW_UCYn;IjKD90Dp%6Ss5+h=zXb#gyio{Y;GU!n+ zfvO&u%a8>)-{Viec=-6sFF2H3QoUkQtSwMcG0uDW>Dpissp2kGw=d4n9rCe^7KRvQ zVobLn#leE5?#!NCg)+|94<qjK)_E2iO&^}}JP2O~N0ATH1bp{!94ErhPrGXuS}{WS zxH^Uye6w9?fQ8I&E{1u_+o(5JKH@4H%Mdb<_8<Tj=YcGEHh||8QK}#pd{6R6SaB!= z8As~e<#_3B@CMRkbq?PZS)|fi1rLKFJO=AAJSdXt!<Agm1Brd(0pER_k-Bu^!Z<vD z#z(PIh@+qL2yTcl0KL3Mlqh&TZkd;Hv=Z~6+tBZ>#iy@|AQgy2rLV6~EV%W~`gm@F zPJeHGbftd1y*>lAUECt{p*y9otuL&MLO@48{C7)ULAd<q(cNN{-_7HE&v?V0I#H9u zarl$FMju6%CF(p0Kp8=zyZPz;pO)YPuhs4Im~@pwv4hI$cx?5X{@_jc>Ye9X#<UAo z!c`N~4?q-%<)J+ThN>-!Q`2{-KWBz^XY7o<u;=#NnK>A#&FnMwvJTX=r~g<Q?optk zJw;Ad#IGVaUU3YsBS%a_fZ1^rzASN$oO^$NpTFh8eyB`d@C~Ed^-WOt{>s&!$#Jwi z^8ehWH_r1&?siwZJqh4#%k7?Y>)OtgcIocAUfw}Bf<t8nYAOe+>jnjvh-KGB$}%(Z z8nmdJ7>mLplc(CFP)>tUWSpR^wrI_jivnU$wNP2DHgoMZ+hWrjm+NI|%NjVT7+d}g z1mQDb^UyxB=WOzq8GCGf^M|=zI5WF&k)+cZtSH#ro$SsW%<(xaUs_b&6ZYIiuRd&$ zg_-r0b#m{yHFMQpG3p6NxWnemIb-j_H<)#@v*i5Kc`h^V33$o%YTa`@EZ{BmgD20X zcNQ^g;L~J0lOrE+b)1b8!H)xY5Ac^zYii%&(+}1;ZhfR~t=PJ)exn4PuXUR;os18W zVzX3llp*Pp9ds)O;Ltu{q-y}TB$Dq#U8SYSpt>HwIZ~lrWcF0ML!f%MCMnSR&BX<j zwg+k74e&JR*N?KokBbWymJKj`ilR6wi*;BFKNr8UZL_-VvO3$cTdZSGZ@<mf=c9Io za7&w0{4Q<&Gjs$KrL}JxYu|vitpXk}bPAX3ct&vx8xQMbJJ_vL*~2-QZm#9WX|sgs zaB$RZNIFCk+(^75EnSZlxwS+Jw<I?sCaH+7Yt*E@CFnK~FL=tOx@L0PMICuyK0r}K zSOBpWyUM2BOLei>f2j&mb{)mIKfP%oCe%T|1qv!Sv*b-s&JYkb#Dj#ypF99vhwI;a z;S!|H-Fa<tV^+h+d-J+k-6*_abJ&_Wv-+6{gp>W}*2$epZT5lombraHUptBlz!W|C zrjhU~2$vt=I(q9k0HEQK;a9H<qd55^Ge>-7!Y)(4Zmsf={18i4%9lSx7bYQhl(&i7 z$zLAnhLWKV*wM}MK89RikCN}vYDz;Z1d>g3pP{HWD$8v-Ew<(Ezyi}-m+HSvo=feM ze~>d8?f(%3X`h~j@^=$yXd5~mAc;6LX29ohQKM9X5kSn)BU(<el5`E)KuVQpCU*=x z-JHANalzwOJfP*%iU%}!p29Xem2KETccWB&hg5$~p*>tsejk-~020!n?$WvCN7Ut1 zk>abs*KS-yBi(>n4VeEJQ<@Dfs+91XoKIaxWl><WmhG`N>p0}vL`^@wRJp6GE)`6X zM#U(27sOJ*<ka{MsvLdIy$#aBMJty;h<59xMy`-X&|muE$Jlb^ka7>*u3h>V;mSoh zH!wCvQ515P0krAOOXb3W-;F@6(#J!*zSbl%@3HbNE5Ah|dg)x0h+<%ha$cg#!=QWs zem6pGmO?FFkCml1$WqnVx5-3bWEW-H#MtjI$h3Q@m8!!Ix*hHLCT04*Zuym~fNuN# z$v8+T4$y1(zQ{t~m)kf=w~-%<I2=XzpcN*snlva0-VNYL3K2>EBT40w?s)Fr2BPSF zB+0V~q0|m4ui@I>_4c-R&8vG`-nLisYG#GmJ;aLTAAO^Kj$%-4^?w3-p&E{Zt|Rv` zFMmN5t^A+I{~42tqRwO8R*4YQ)1B34G=0Jw0MXm4!3FLUBKF^3J@0#zBxTxD@uWAx nXSXWzDoLsvuro5HeA{KT_gR@U_DMMN;wL1*&u%-NS=;_E2C}8( literal 0 HcmV?d00001 diff --git a/week-0/day-3/venv/lib/python3.6/site-packages/setuptools/command/__pycache__/register.cpython-36.pyc b/week-0/day-3/venv/lib/python3.6/site-packages/setuptools/command/__pycache__/register.cpython-36.pyc new file mode 100644 index 0000000000000000000000000000000000000000..2825f8b7075960b26809d6a8bf80a20f155585a5 GIT binary patch literal 552 zcmZ8eJx{|h5Ix%|38m!+R7`9c+6*AEAk>P1tqg3Dkk!U+lqg@d6A4ha_RsK_yfX0@ zm^dd5syOLhPUm~?o-Q}z@o@2c_j*YHzThMrtml~e8bN>{8KfkoA$tNr1v`LXlBIOd zLMq4$_|7-Z!7{Sg2gPEJsjm<ughW6{k>#X=a3F}F2MEsuvuxuj87I1yDnci1*soQ1 z#MBdn9i-@EPYBfLBxO6WwE*PPrSW7O^Q736D0ZQmf=6YZuL@zDQYEpnN`_(IC&tk- z+kArZu=leF>bwf7q?)dqBokA;)o<%2x(&3fo2o9$OrMrV)u6XKtKQWa>bRKN9u4S_ ze2o5{apTf=jmLSh$|dJ!$a!9hCbRX3^KG-rx)(J-a_7_KT$B;#t#WJg1kU?0yRBX6 u5s$V+-w7uIuh`T{re{a1v)+qwkDYe5TW3%3PuqC+oxunD2eduhi2VZoyMDj` literal 0 HcmV?d00001 diff --git a/week-0/day-3/venv/lib/python3.6/site-packages/setuptools/command/__pycache__/rotate.cpython-36.pyc b/week-0/day-3/venv/lib/python3.6/site-packages/setuptools/command/__pycache__/rotate.cpython-36.pyc new file mode 100644 index 0000000000000000000000000000000000000000..afe26930a4b9c98165d7cb5ec193e8ec074bc8ca GIT binary patch literal 2538 zcmZ`*PjeeJ6qmHS_ImB4j+-_Ol+GSn64S<EfPon%lrjy&i4>+Y6g*@W+mfAi_Fp8K zCLZU4%M1rDd<-s}Iq@kt>B@<(;1lo3asHHccl7l3J?ZJ`y`P@;{iUVgvnL<zYoCyR z$fd^x{t-0w0}xI)O-M@Hlp@a(mO5?6@=oHWUfZ+0o0Qrm(7Q>wU54IE{It@pSY0Uz z(rUX($rpr|x&MN2UsR_~yT;w8q*?hFRv}GlYP~%BQAiyX9en`bPLdCxTiuP79_cty zPYNC9+2>N`au4+?K8CLRI8W0~#(QXH@p!;If~GzOB1oHZ(q^2t9nRV=zs^_rje*nl z1_Ye0@ue38oL=VFp!a#5uRven4RG$JDal-Sv>3m!D-xkam?vDwkb_S$?t)u+rpE8_ z*XkaGhe8x_HVF5^OgtA#hy6GaYF0`+x_9u2q3P^4Y*-7KsZi&k6^ENr9F1Zrcym_4 zwYGRHVJx5B14i_8E>FVe2SSQaABd~ogdHhn9<B-#4riO$DD8sBd4FyiUAf{tE{daj z6heg$_6*u%XzC^qP9`LpQ-~w*j1!0r-D^6=v;G<%O-A6GanTl}#Z@Bd|4!r$FfjXc zTc^c#5f@wCQJnBCb)=5FquvMGO6XCc^E^?P+1@;(+w;)3iWAd_vslNSBp!<>w=ht* z(7h56LQC+D*Uv`(f8>>&)nJ0%*)PCM$Po5*=*xztoKERa6eO@aklY0cL&-^9J1Cuk zE@IC}cH1S|Jq+Ym6hcJ_jB{|@cO+xq678W)T^g3BOdfNWdoS!NL!XzXbeC8wD5=0v zs7x6i5Qt^4H~#v|5r9J#q8Im1!aM`0$uP|!#hW%BTS^oi2~gzCGmxCaW>d5Vt#G3? zj*AVPwb2rT!A5g@_ln62AXo%0@;+YQ+QOWLDX!lYVJ8dYOpAe#=Yc~wU{!bu%?5q| zTiCCkQcWgwNT;x^-`EkHW}EINlQ_Y6ct(mQGpzNlp@r4W38HEi>?8mh*jw@NKH9}O zB{IH$mdAdaUCDQAC&_!AL_Gv%F>gj67_V#L+<@7zFm{$S1G$1cx-G8*F%Im?1mAR$ zk+3zy1hI-Ur8`+qNGuqph7M<gNS_o!f%`=gYjXoI8jUh8z#+jG=xb8Bik1=H7ke`G zm%V-q^fqFI29(i~6Hp)eI$g$>-D2al*X;K^_=s_I&!YBkU=U%5R=^J9PC`?93jFb( zh|*oM|Hml<&KbH>D93AL!qx~#sP=|{O3?TdHU%`FI^5$WK&OMKJas0{urdWaLmyzT ztHT;E>!k^x8)i7Df!WKP{LI$LsdK!GGxvACXQ%F|XGi-J4-pNcuBl(`dUcRc`IlZ9 zHjty_2<6uo{4;WN=h^%ORQ8MysEy*RpGz!3SVIO$-Zk`{^H5yD;cXaXakz>&9MU0d z5?rNyb{UI~VYxCc-YLc(2%YLU6#$fVm~CkPr3A`1LHr@K1sd<1Wk-&(R{?N*^B%Va zeN&yCO02K<)VOM|i}^=$)l^}AbXL~n+hE^<)6_0kV(VU%by6WWaYPe{aff-FSwKTY z&80SFDd3V+LONEB;ewk|WOIy{xjczrE#t)st8qyk;MEDYSgNHErZmcuI6G{X=IBLF zO!=&i7|+%PL$$>7_)=ty17^2Du0kM)<{GQf23-Xl`_yL*i|86u;u>hi!A0EQnvn2| zL1YC<00ab8<gpgZrMX}k`D;k(C<u%n*;qu838E;?`6v;<*P`fX)JZT(@Kuf?p7(&M za-n)qZ16rdwGo78aZt^*E?h67lPv^t4HvnKWCzK`3AP-TCRql8&M7P>K6RPPm_5BN z^F6;|_01)-jOnw#CM~4%s%P(OE3_$U*DnSM{B=?Dl4MhiNNcZLT!Jlej6VYNY7|_^ eCDs7D>Z{x}{?0r;5Aob6j3nd$Ud#(*$@ve&5Sh*Z literal 0 HcmV?d00001 diff --git a/week-0/day-3/venv/lib/python3.6/site-packages/setuptools/command/__pycache__/saveopts.cpython-36.pyc b/week-0/day-3/venv/lib/python3.6/site-packages/setuptools/command/__pycache__/saveopts.cpython-36.pyc new file mode 100644 index 0000000000000000000000000000000000000000..a5db8d51b985f2396c43c48ce22c068461f552c8 GIT binary patch literal 883 zcmYjP&2G~`5Z)g<F-fYT01`+&SfZC4np6VOONFRFa0^I1RI;d6j&~C__%FNbDvg{| z`UJcMue4WAyaFd?69-~x#^agsH{X1_ua1s7SD!C#e-MOzp@YYR_#K!&1;-J`Davq! zGZGPuJ|RvxeL$QFvY`>>-ZdKdzo8Qii0uk44NHoADrdG^ltvago5Wfqu3`Vcz}<io z2n32SM-kx|z)0kAfP6ra&wT)H*+9p40)X`D<uycMQe;`2^RrauBHRtop((;RoXS+J zE?j%4tFla`;D-%bn5rBm(^*)kurS|*0xZXK`(uI|a&36Gz}|!D5?qbuXpJRWljWBh z&+!Lz`*BTc%JFxi!bN}i2C}548$72Q1l7~8WbJ|Z>sIY^0$t~It0r@=rV?#P?Ome9 z`3+k1Z;<f;9ctj)8;U_}*qM%%JAqZNSv7R44g%ZbQX3^Fl@rw-H&xbXV2@|QG#`x1 z#8_V%k!jn3#krWqRce$I-Ud#nJkEq|b9K*Dl@Hq1(;}T(&y4`dg)uUpX-kugTM82_ z)he;{E>3?U^#oA<T#Zatj!IdcO)8o4GriEuNtL`FZFM$9k?O;+VLRHN=CHiC6h=P+ zEZql(a0`2+M*>X92@ddcvg-Y7hQ_hG3yeA5jM)xjS;4E+#XZIrRh%}JHe<X<Al>Cc zCrWOwpn3)aw!9DAQ<rl}JJasW17P5hZEig9q8I;H88-ZfkODcjLMplkH~@9pD2Hr= P%N@hF?q+GH{A2nTE#UEA literal 0 HcmV?d00001 diff --git a/week-0/day-3/venv/lib/python3.6/site-packages/setuptools/command/__pycache__/sdist.cpython-36.pyc b/week-0/day-3/venv/lib/python3.6/site-packages/setuptools/command/__pycache__/sdist.cpython-36.pyc new file mode 100644 index 0000000000000000000000000000000000000000..f2bb7be6876957cd316edb6543a044f887b4a181 GIT binary patch literal 6347 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 literal 0 HcmV?d00001 diff --git a/week-0/day-3/venv/lib/python3.6/site-packages/setuptools/command/__pycache__/setopt.cpython-36.pyc b/week-0/day-3/venv/lib/python3.6/site-packages/setuptools/command/__pycache__/setopt.cpython-36.pyc new file mode 100644 index 0000000000000000000000000000000000000000..10b6ec784fc58d69244ee62f119707268e8b832f GIT binary patch literal 4561 zcmaJ_OLH5?5#HGs77OqpQr07pTpKww1%;sE*opFxY{`1%Wy%&6%R!_9mzX8E<N^!L zEcifyDLd35H~VkoujG_d4pWs=PQK-gQ@);EfCQ~FRXf`=)7{(C)BSZr@6XKm_nzE( z`JY9@_^)y5&jx)LkNgG$H#kd-4r?$*w3(P4t6^!{O6-o)a5QZvX2Zn3owyAbZzm~r zyoRUu+@##`8$Rd~_jsB6ZM#w7=XjNuUb9A(FYsCJftq=2@Ht+7ZSZpBA6t!C%;&j} zxgX79KF95Kqqg`htTJj$Ra<FyFA`a^7iQa-TS?l+>->XQX8kNq<da?&r`?A_q++e$ z--_G4P{>GNUb>%lI$@Wq3KU_ZxfLgoszf}_n)!;Vq*_IDGnA2XWt3sAoFr|9NsEyg z_%rd4$L`~i+ZcxM*sdw6+*~Kx0=<$MJ8Z|)qm|h^&N1WmalY?hzkwZ>yP!VirQQSX z9Wl*Y%HXddyI>r%W43N&@ZHcjHvh(W1)iu5zIq&GLAD(QWO_I3L_xZx=X~sgl|Wm& z610<aGfY;3R0O?9)cf#3ke|}`1N?35#$CP<bow$2Hle4hbzRfa*H(gSxjZN+xJJ^~ zw3w*i#Dg+i)9<aew%W?g83!{H6ZEo8BFgEdGCojjRT+cDzusJuy~8QC!L3tQalIB~ zhrMWG(z3Q?c_moRKLHB1ER*8pwVJQYR4SWdLD@TL+*KtW3-XC7PrjkNroQE7Q`vgU zj}CeW0n#DpB9;GnnDiqZGc{A$<P>G`H2a4ku3&%k(ao&WyV;9-_04{q@Va~@4>tR) z4{mA?WNDhn(_||TF<L_Cto9B?30h|H$nzKs$7440n9CMSk1eqC%w&&R7VY4#Ts%6m zRuOL$6P!^5Fe5W}tYhQI8d^K{&}bt*m~rs$Awz5#4~&=pd|@8hN6ygU=B_86>G-mS z;5<g|LZ&pdN#fNF&>qopPiwbN@sx9(gW=FAwDzFYJt_@LTI;{GgaZi|dTp)Ory1D? zy%nwZfBM_*DZS%wf2rj$gM0}ZfFzKr=5w<1)tAp<;d45-%f0;EL-QLZZ)7vbtn#t> z_56_snc1O7r+E&1`pkH0e1SLe!w>%qr#(bI2VoKGeGw8S=zIyXG>E&cq|c*Z0~eIV z-L~8)vSBh0VhL#;w@5A&hm>KHSsY1<!HtbI<jclJut&ioSAyN>Fyg`Hp-z#L7|=Qb z3cS@IxOYY@=tN;xl2JTLqAb#R9Cfo;M1hR7=!(|2zl~&{wkbinOK|09ARS2I)^^x! z!weXhYvedCw1(MO->TMkZ!Abhn;hl4)@V8Xg<NiM^=TAxIPI)&McN6L<l5ls13CyX z6!r&yS&}b<t$crQ^&Z#K-DrQB0p>5s!G($Rl3ZPq6R~$D>rtnd9p*a69~kStyq^04 zib$3;3OYUX`p-qIjarh5?bqgng)~zRk2d>l;SfFdG~B<hOTwqRRw!HGpvsA}r~`<J zyIZN66;UVMi<-rURb@MrCzFu#$z-PB%u9(X<!`AhT$i%bUes02K1_;gW#x@=TzTWm z1dNHprs#KxH<PMVd{JB{Q{6(Vqa#nTEsaw7a1{)~!|)?K@|PG4uL`iK0%$xo%c`c2 z(bqE@z~h@$%v|CyX<juiV8sQ0i)6=t<f6NH<j*ifMuTw!m7g^%)arA5p=~v6ZgQt> zHXL5z)z=34ff+uFcZttY{T764gWLBuWhTNFstt;3&`LsyJ4UP)>4Hn6NbN*e-jB2G zBFJ>+%F#?-0_sJbX6?~WWw?iurR%l6a4L%uZmsXfNbpGsplYO*j4Fis6Ak^*tv6|C z^@TtZ2D-|~;7q;B6_v-gc1OIAqm2rkXR!t<g6llm3j0ZR2iKby%-W=ppoW5K(0x4e z0tSxup_z|xGH5hda3EW&S*mcrq){RJiiuc(EczQ;M#<TDPz!Mv(H|!9AZixQdO_cF zF&MaPmkr*|*LBmg`d#*ky<{upj<$CXMB6w*aoRD&C6pnSAt<PA0jL{0mRKp)%*mR~ zjoq^NnAX9e%h8a@X9b^?^JUHuI=H=Si=E8nG(-C{WG^7oga-J-T@zJ&UChux?Z~&} z$-&J}sFjhus1<JkwYv!o2sEA8Q+Jb}w^kCjA*bB1hn(cPP>VaHll+P9GU^KI^J=E} zkQOGlF3;qgn%|1MQyvb%FR6VnQ0-kL9X&o0%ce9$s+r6+2Ukw}{j3Vyx%dDI#LsE? z1qLkKBAOCg{3>7gHPIA<;y1M5QNKgw2K|oTY<5!KPl&EIo3Hv|QtXtPO`f)BSqD)O z6>4r1%?wJ?I84Mxr1t?0bd*zr1{zB0KjP7S4Z0f3z^U@bwLQyora*+k?JjZu9>Wxf zn1GK9{35@^FSqT;*>NudK=3Z{YMX%ui12xUiAP|AcbPBp^LYFGEyThPgb#&-ch(6E z3M8o~F*UO%$PntZ9lVDe48m@)L)BrDlvFdrZVCt)H_3UXdxgq7inT^piV0PhX;px+ zQGxT|Oh+^M#|y@h5AM1KZ0yR>q9(_kd(NudylN;WMwfCjxZdwV5KS?FO^Zx2aSA!! zg#)OuLc4_A8{-DD#nLo#2DCFq5?7<KzFSo)4kX@#3PnAAQ-4Q1!@S0H*q^<23W~4r zNb<X(>xTxB%aF!Vz7Id9tfsg+u^M;)tlRbE+k_oNiFY%b@C3PU?7(`g+y&)U4RIGc zKo$HbA~dkp21`?!Uk4oP-+93ebow`fdOdgX;Kyg!CbvSjU$5t02P#lx=W+j>C~}Sl z0`Ub=-{TuP)8Fw-d~+VPb%6~o7QQ)~<5TxZ8KRN(28fI>lumBqLBr1(PE52DvzXRh zYL|=ik62x?CJd+Aufa=93|A!)^^&j^<;Jgq<INYVEVLY7V_T9I%43^dG6xj8bgkGV zMEV1^1ZBPW1Opb<h<-xDr}@HXL_eirJzpSyi9gZsIW1JgL!uwi@R)|*Vo((x$(D$9 z%I5z69qkcVoPr@LT&LnuqmsrVibY8eRZ(D(X<LM`bOz6?nqJ8(;nY+rYV1*MUd^6# z2lO8Y`j?=13){LkY|Ni*<7Z+jWPbhUz|i<19MbRU-+immK^BSbDt_UvQg0~pZjxM9 za0t3o1-uQDq}j|XjJ_ltVr2E3j-$NWIdXqU8KcisMb)5Ij!uJrmcQu#WPbVoJQBX| literal 0 HcmV?d00001 diff --git a/week-0/day-3/venv/lib/python3.6/site-packages/setuptools/command/__pycache__/test.cpython-36.pyc b/week-0/day-3/venv/lib/python3.6/site-packages/setuptools/command/__pycache__/test.cpython-36.pyc new file mode 100644 index 0000000000000000000000000000000000000000..6528f274dd798a80287c0f0a679fb899fe78250c GIT binary patch literal 8120 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 E2bUWXvj6}9 literal 0 HcmV?d00001 diff --git a/week-0/day-3/venv/lib/python3.6/site-packages/setuptools/command/__pycache__/upload.cpython-36.pyc b/week-0/day-3/venv/lib/python3.6/site-packages/setuptools/command/__pycache__/upload.cpython-36.pyc new file mode 100644 index 0000000000000000000000000000000000000000..7ce23828a0cde44b3ca9bd0ba57589a2eb1b3b70 GIT binary patch literal 1350 zcmaiz&2H2%5XbE#yPGcCszpc?^<sg92%;?lBsd^wg%BXbg47GFgskk^X|v77sqM7Q zs+_iuz)SE-xpLwaI5Fe>P^tK^<ncJM$DZH({cw4?z5D+0=dS@F-^qmrbFu^7+yx_u zpc(1m=w)=|^?XWR5#fvAoQOdBLvP~uJVEzJ)c67GNjIW(vn(<diviB(%>!o#y14^J zk{%TV_w{_?3ICk*0uhJ?j1AEgEf||3gqTYj_l@H=gZBPdYMlzngiPWxvut_{>&t`q zI8~Zi#Z=$MY0iq+m=mRi+XwTQ9mhJAwqhz_B25yhWp3F?T$wGmW<cQ_Y&hbXFQA(z zU@RHZp?5|ml#(+t^ow;H3>y>hxexPZaUX1JLfja-?@dAA?z9^%)q&FKzDuHBP0~Eh z(y`>Ku&K&T9hOGwJRZrqwJ$B+**W;N4(BP<8ysQs`J5+OjrgIgbeiwi*LVTb!tzAv z#S$n%U}TnjBf0|_{CvJ`N5yuL7MuMt&BUfTGN=7=@MzmeTNYNS%v^K_YBY*-u|37R zRa6=!aRq^3I6^yKleQa88q)Fg*`mw2EqEeJ-0FBf0H<2Fps5M{LeJ=s0y|(k^e5gP z35X32+xi}bB2e;)<laY69gy_L?_7~k1iRKs$QNskSQeFLh=t9tY_YwvD6}+&y*wSr zDeh^ZF-F~*t?NdOy3KhyDwMXI_c~C91;x6pWuZ)Jm9BIHZeA}ff<>Ojr1T0JgfcbD z=q-V{0o}C0kiY{>t8|5qZ_ZHtqnrzBs6q_usNDvq3PFct0=fc9)Ov{rq}Xqy@C|z7 z*9%e~oG=&&1LQwf4^ug_2a;J^{RdJv@^uqV)@xwuwYReBt5}OSxrJ8<s)^_n!KLgm z>08iE2xgl7RXX07=l%z^cB57ua*pqSb1cV5i84dK!}(DeXR|*o&V?Fq?$qcgYdq`% zes>jD15_QB%-tdk0xw(%+wK`gfy=616REMKO*6AK)4Thv{lA2)!>7}GJ;T}<d=Vk- G_`d*OU{bUI literal 0 HcmV?d00001 diff --git a/week-0/day-3/venv/lib/python3.6/site-packages/setuptools/command/__pycache__/upload_docs.cpython-36.pyc b/week-0/day-3/venv/lib/python3.6/site-packages/setuptools/command/__pycache__/upload_docs.cpython-36.pyc new file mode 100644 index 0000000000000000000000000000000000000000..65b053e6cf2ff97805f2bf1c1ecbc148142f779c GIT binary patch literal 6059 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 N*_l6REux#Q{lBKDXLkSq literal 0 HcmV?d00001 diff --git a/week-0/day-3/venv/lib/python3.6/site-packages/setuptools/command/alias.py b/week-0/day-3/venv/lib/python3.6/site-packages/setuptools/command/alias.py new file mode 100644 index 00000000..4532b1cc --- /dev/null +++ b/week-0/day-3/venv/lib/python3.6/site-packages/setuptools/command/alias.py @@ -0,0 +1,80 @@ +from distutils.errors import DistutilsOptionError + +from setuptools.extern.six.moves import map + +from setuptools.command.setopt import edit_config, option_base, config_file + + +def shquote(arg): + """Quote an argument for later parsing by shlex.split()""" + for c in '"', "'", "\\", "#": + if c in arg: + return repr(arg) + if arg.split() != [arg]: + return repr(arg) + return arg + + +class alias(option_base): + """Define a shortcut that invokes one or more commands""" + + description = "define a shortcut to invoke one or more commands" + command_consumes_arguments = True + + user_options = [ + ('remove', 'r', 'remove (unset) the alias'), + ] + option_base.user_options + + boolean_options = option_base.boolean_options + ['remove'] + + def initialize_options(self): + option_base.initialize_options(self) + self.args = None + self.remove = None + + def finalize_options(self): + option_base.finalize_options(self) + if self.remove and len(self.args) != 1: + raise DistutilsOptionError( + "Must specify exactly one argument (the alias name) when " + "using --remove" + ) + + def run(self): + aliases = self.distribution.get_option_dict('aliases') + + if not self.args: + print("Command Aliases") + print("---------------") + for alias in aliases: + print("setup.py alias", format_alias(alias, aliases)) + return + + elif len(self.args) == 1: + alias, = self.args + if self.remove: + command = None + elif alias in aliases: + print("setup.py alias", format_alias(alias, aliases)) + return + else: + print("No alias definition found for %r" % alias) + return + else: + alias = self.args[0] + command = ' '.join(map(shquote, self.args[1:])) + + edit_config(self.filename, {'aliases': {alias: command}}, self.dry_run) + + +def format_alias(name, aliases): + source, command = aliases[name] + if source == config_file('global'): + source = '--global-config ' + elif source == config_file('user'): + source = '--user-config ' + elif source == config_file('local'): + source = '' + else: + source = '--filename=%r' % source + return source + name + ' ' + command diff --git a/week-0/day-3/venv/lib/python3.6/site-packages/setuptools/command/bdist_egg.py b/week-0/day-3/venv/lib/python3.6/site-packages/setuptools/command/bdist_egg.py new file mode 100644 index 00000000..423b8187 --- /dev/null +++ b/week-0/day-3/venv/lib/python3.6/site-packages/setuptools/command/bdist_egg.py @@ -0,0 +1,502 @@ +"""setuptools.command.bdist_egg + +Build .egg distributions""" + +from distutils.errors import DistutilsSetupError +from distutils.dir_util import remove_tree, mkpath +from distutils import log +from types import CodeType +import sys +import os +import re +import textwrap +import marshal + +from setuptools.extern import six + +from pkg_resources import get_build_platform, Distribution, ensure_directory +from pkg_resources import EntryPoint +from setuptools.extension import Library +from setuptools import Command + +try: + # Python 2.7 or >=3.2 + from sysconfig import get_path, get_python_version + + def _get_purelib(): + return get_path("purelib") +except ImportError: + from distutils.sysconfig import get_python_lib, get_python_version + + def _get_purelib(): + return get_python_lib(False) + + +def strip_module(filename): + if '.' in filename: + filename = os.path.splitext(filename)[0] + if filename.endswith('module'): + filename = filename[:-6] + return filename + + +def sorted_walk(dir): + """Do os.walk in a reproducible way, + independent of indeterministic filesystem readdir order + """ + for base, dirs, files in os.walk(dir): + dirs.sort() + files.sort() + yield base, dirs, files + + +def write_stub(resource, pyfile): + _stub_template = textwrap.dedent(""" + def __bootstrap__(): + global __bootstrap__, __loader__, __file__ + import sys, pkg_resources, imp + __file__ = pkg_resources.resource_filename(__name__, %r) + __loader__ = None; del __bootstrap__, __loader__ + imp.load_dynamic(__name__,__file__) + __bootstrap__() + """).lstrip() + with open(pyfile, 'w') as f: + f.write(_stub_template % resource) + + +class bdist_egg(Command): + description = "create an \"egg\" distribution" + + user_options = [ + ('bdist-dir=', 'b', + "temporary directory for creating the distribution"), + ('plat-name=', 'p', "platform name to embed in generated filenames " + "(default: %s)" % get_build_platform()), + ('exclude-source-files', None, + "remove all .py files from the generated egg"), + ('keep-temp', 'k', + "keep the pseudo-installation tree around after " + + "creating the distribution archive"), + ('dist-dir=', 'd', + "directory to put final built distributions in"), + ('skip-build', None, + "skip rebuilding everything (for testing/debugging)"), + ] + + boolean_options = [ + 'keep-temp', 'skip-build', 'exclude-source-files' + ] + + def initialize_options(self): + self.bdist_dir = None + self.plat_name = None + self.keep_temp = 0 + self.dist_dir = None + self.skip_build = 0 + self.egg_output = None + self.exclude_source_files = None + + def finalize_options(self): + ei_cmd = self.ei_cmd = self.get_finalized_command("egg_info") + self.egg_info = ei_cmd.egg_info + + if self.bdist_dir is None: + bdist_base = self.get_finalized_command('bdist').bdist_base + self.bdist_dir = os.path.join(bdist_base, 'egg') + + if self.plat_name is None: + self.plat_name = get_build_platform() + + self.set_undefined_options('bdist', ('dist_dir', 'dist_dir')) + + if self.egg_output is None: + + # Compute filename of the output egg + basename = Distribution( + None, None, ei_cmd.egg_name, ei_cmd.egg_version, + get_python_version(), + self.distribution.has_ext_modules() and self.plat_name + ).egg_name() + + self.egg_output = os.path.join(self.dist_dir, basename + '.egg') + + def do_install_data(self): + # Hack for packages that install data to install's --install-lib + self.get_finalized_command('install').install_lib = self.bdist_dir + + site_packages = os.path.normcase(os.path.realpath(_get_purelib())) + old, self.distribution.data_files = self.distribution.data_files, [] + + for item in old: + if isinstance(item, tuple) and len(item) == 2: + if os.path.isabs(item[0]): + realpath = os.path.realpath(item[0]) + normalized = os.path.normcase(realpath) + if normalized == site_packages or normalized.startswith( + site_packages + os.sep + ): + item = realpath[len(site_packages) + 1:], item[1] + # XXX else: raise ??? + self.distribution.data_files.append(item) + + try: + log.info("installing package data to %s", self.bdist_dir) + self.call_command('install_data', force=0, root=None) + finally: + self.distribution.data_files = old + + def get_outputs(self): + return [self.egg_output] + + def call_command(self, cmdname, **kw): + """Invoke reinitialized command `cmdname` with keyword args""" + for dirname in INSTALL_DIRECTORY_ATTRS: + kw.setdefault(dirname, self.bdist_dir) + kw.setdefault('skip_build', self.skip_build) + kw.setdefault('dry_run', self.dry_run) + cmd = self.reinitialize_command(cmdname, **kw) + self.run_command(cmdname) + return cmd + + def run(self): + # Generate metadata first + self.run_command("egg_info") + # We run install_lib before install_data, because some data hacks + # pull their data path from the install_lib command. + log.info("installing library code to %s", self.bdist_dir) + instcmd = self.get_finalized_command('install') + old_root = instcmd.root + instcmd.root = None + if self.distribution.has_c_libraries() and not self.skip_build: + self.run_command('build_clib') + cmd = self.call_command('install_lib', warn_dir=0) + instcmd.root = old_root + + all_outputs, ext_outputs = self.get_ext_outputs() + self.stubs = [] + to_compile = [] + for (p, ext_name) in enumerate(ext_outputs): + filename, ext = os.path.splitext(ext_name) + pyfile = os.path.join(self.bdist_dir, strip_module(filename) + + '.py') + self.stubs.append(pyfile) + log.info("creating stub loader for %s", ext_name) + if not self.dry_run: + write_stub(os.path.basename(ext_name), pyfile) + to_compile.append(pyfile) + ext_outputs[p] = ext_name.replace(os.sep, '/') + + if to_compile: + cmd.byte_compile(to_compile) + if self.distribution.data_files: + self.do_install_data() + + # Make the EGG-INFO directory + archive_root = self.bdist_dir + egg_info = os.path.join(archive_root, 'EGG-INFO') + self.mkpath(egg_info) + if self.distribution.scripts: + script_dir = os.path.join(egg_info, 'scripts') + log.info("installing scripts to %s", script_dir) + self.call_command('install_scripts', install_dir=script_dir, + no_ep=1) + + self.copy_metadata_to(egg_info) + native_libs = os.path.join(egg_info, "native_libs.txt") + if all_outputs: + log.info("writing %s", native_libs) + if not self.dry_run: + ensure_directory(native_libs) + libs_file = open(native_libs, 'wt') + libs_file.write('\n'.join(all_outputs)) + libs_file.write('\n') + libs_file.close() + elif os.path.isfile(native_libs): + log.info("removing %s", native_libs) + if not self.dry_run: + os.unlink(native_libs) + + write_safety_flag( + os.path.join(archive_root, 'EGG-INFO'), self.zip_safe() + ) + + if os.path.exists(os.path.join(self.egg_info, 'depends.txt')): + log.warn( + "WARNING: 'depends.txt' will not be used by setuptools 0.6!\n" + "Use the install_requires/extras_require setup() args instead." + ) + + if self.exclude_source_files: + self.zap_pyfiles() + + # Make the archive + make_zipfile(self.egg_output, archive_root, verbose=self.verbose, + dry_run=self.dry_run, mode=self.gen_header()) + if not self.keep_temp: + remove_tree(self.bdist_dir, dry_run=self.dry_run) + + # Add to 'Distribution.dist_files' so that the "upload" command works + getattr(self.distribution, 'dist_files', []).append( + ('bdist_egg', get_python_version(), self.egg_output)) + + def zap_pyfiles(self): + log.info("Removing .py files from temporary directory") + for base, dirs, files in walk_egg(self.bdist_dir): + for name in files: + path = os.path.join(base, name) + + if name.endswith('.py'): + log.debug("Deleting %s", path) + os.unlink(path) + + if base.endswith('__pycache__'): + path_old = path + + pattern = r'(?P<name>.+)\.(?P<magic>[^.]+)\.pyc' + m = re.match(pattern, name) + path_new = os.path.join( + base, os.pardir, m.group('name') + '.pyc') + log.info( + "Renaming file from [%s] to [%s]" + % (path_old, path_new)) + try: + os.remove(path_new) + except OSError: + pass + os.rename(path_old, path_new) + + def zip_safe(self): + safe = getattr(self.distribution, 'zip_safe', None) + if safe is not None: + return safe + log.warn("zip_safe flag not set; analyzing archive contents...") + return analyze_egg(self.bdist_dir, self.stubs) + + def gen_header(self): + epm = EntryPoint.parse_map(self.distribution.entry_points or '') + ep = epm.get('setuptools.installation', {}).get('eggsecutable') + if ep is None: + return 'w' # not an eggsecutable, do it the usual way. + + if not ep.attrs or ep.extras: + raise DistutilsSetupError( + "eggsecutable entry point (%r) cannot have 'extras' " + "or refer to a module" % (ep,) + ) + + pyver = sys.version[:3] + pkg = ep.module_name + full = '.'.join(ep.attrs) + base = ep.attrs[0] + basename = os.path.basename(self.egg_output) + + header = ( + "#!/bin/sh\n" + 'if [ `basename $0` = "%(basename)s" ]\n' + 'then exec python%(pyver)s -c "' + "import sys, os; sys.path.insert(0, os.path.abspath('$0')); " + "from %(pkg)s import %(base)s; sys.exit(%(full)s())" + '" "$@"\n' + 'else\n' + ' echo $0 is not the correct name for this egg file.\n' + ' echo Please rename it back to %(basename)s and try again.\n' + ' exec false\n' + 'fi\n' + ) % locals() + + if not self.dry_run: + mkpath(os.path.dirname(self.egg_output), dry_run=self.dry_run) + f = open(self.egg_output, 'w') + f.write(header) + f.close() + return 'a' + + def copy_metadata_to(self, target_dir): + "Copy metadata (egg info) to the target_dir" + # normalize the path (so that a forward-slash in egg_info will + # match using startswith below) + norm_egg_info = os.path.normpath(self.egg_info) + prefix = os.path.join(norm_egg_info, '') + for path in self.ei_cmd.filelist.files: + if path.startswith(prefix): + target = os.path.join(target_dir, path[len(prefix):]) + ensure_directory(target) + self.copy_file(path, target) + + def get_ext_outputs(self): + """Get a list of relative paths to C extensions in the output distro""" + + all_outputs = [] + ext_outputs = [] + + paths = {self.bdist_dir: ''} + for base, dirs, files in sorted_walk(self.bdist_dir): + for filename in files: + if os.path.splitext(filename)[1].lower() in NATIVE_EXTENSIONS: + all_outputs.append(paths[base] + filename) + for filename in dirs: + paths[os.path.join(base, filename)] = (paths[base] + + filename + '/') + + if self.distribution.has_ext_modules(): + build_cmd = self.get_finalized_command('build_ext') + for ext in build_cmd.extensions: + if isinstance(ext, Library): + continue + fullname = build_cmd.get_ext_fullname(ext.name) + filename = build_cmd.get_ext_filename(fullname) + if not os.path.basename(filename).startswith('dl-'): + if os.path.exists(os.path.join(self.bdist_dir, filename)): + ext_outputs.append(filename) + + return all_outputs, ext_outputs + + +NATIVE_EXTENSIONS = dict.fromkeys('.dll .so .dylib .pyd'.split()) + + +def walk_egg(egg_dir): + """Walk an unpacked egg's contents, skipping the metadata directory""" + walker = sorted_walk(egg_dir) + base, dirs, files = next(walker) + if 'EGG-INFO' in dirs: + dirs.remove('EGG-INFO') + yield base, dirs, files + for bdf in walker: + yield bdf + + +def analyze_egg(egg_dir, stubs): + # check for existing flag in EGG-INFO + for flag, fn in safety_flags.items(): + if os.path.exists(os.path.join(egg_dir, 'EGG-INFO', fn)): + return flag + if not can_scan(): + return False + safe = True + for base, dirs, files in walk_egg(egg_dir): + for name in files: + if name.endswith('.py') or name.endswith('.pyw'): + continue + elif name.endswith('.pyc') or name.endswith('.pyo'): + # always scan, even if we already know we're not safe + safe = scan_module(egg_dir, base, name, stubs) and safe + return safe + + +def write_safety_flag(egg_dir, safe): + # Write or remove zip safety flag file(s) + for flag, fn in safety_flags.items(): + fn = os.path.join(egg_dir, fn) + if os.path.exists(fn): + if safe is None or bool(safe) != flag: + os.unlink(fn) + elif safe is not None and bool(safe) == flag: + f = open(fn, 'wt') + f.write('\n') + f.close() + + +safety_flags = { + True: 'zip-safe', + False: 'not-zip-safe', +} + + +def scan_module(egg_dir, base, name, stubs): + """Check whether module possibly uses unsafe-for-zipfile stuff""" + + filename = os.path.join(base, name) + if filename[:-1] in stubs: + return True # Extension module + pkg = base[len(egg_dir) + 1:].replace(os.sep, '.') + module = pkg + (pkg and '.' or '') + os.path.splitext(name)[0] + if sys.version_info < (3, 3): + skip = 8 # skip magic & date + elif sys.version_info < (3, 7): + skip = 12 # skip magic & date & file size + else: + skip = 16 # skip magic & reserved? & date & file size + f = open(filename, 'rb') + f.read(skip) + code = marshal.load(f) + f.close() + safe = True + symbols = dict.fromkeys(iter_symbols(code)) + for bad in ['__file__', '__path__']: + if bad in symbols: + log.warn("%s: module references %s", module, bad) + safe = False + if 'inspect' in symbols: + for bad in [ + 'getsource', 'getabsfile', 'getsourcefile', 'getfile' + 'getsourcelines', 'findsource', 'getcomments', 'getframeinfo', + 'getinnerframes', 'getouterframes', 'stack', 'trace' + ]: + if bad in symbols: + log.warn("%s: module MAY be using inspect.%s", module, bad) + safe = False + return safe + + +def iter_symbols(code): + """Yield names and strings used by `code` and its nested code objects""" + for name in code.co_names: + yield name + for const in code.co_consts: + if isinstance(const, six.string_types): + yield const + elif isinstance(const, CodeType): + for name in iter_symbols(const): + yield name + + +def can_scan(): + if not sys.platform.startswith('java') and sys.platform != 'cli': + # CPython, PyPy, etc. + return True + log.warn("Unable to analyze compiled code on this platform.") + log.warn("Please ask the author to include a 'zip_safe'" + " setting (either True or False) in the package's setup.py") + + +# Attribute names of options for commands that might need to be convinced to +# install to the egg build directory + +INSTALL_DIRECTORY_ATTRS = [ + 'install_lib', 'install_dir', 'install_data', 'install_base' +] + + +def make_zipfile(zip_filename, base_dir, verbose=0, dry_run=0, compress=True, + mode='w'): + """Create a zip file from all the files under 'base_dir'. The output + zip file will be named 'base_dir' + ".zip". Uses either the "zipfile" + Python module (if available) or the InfoZIP "zip" utility (if installed + and found on the default search path). If neither tool is available, + raises DistutilsExecError. Returns the name of the output zip file. + """ + import zipfile + + mkpath(os.path.dirname(zip_filename), dry_run=dry_run) + log.info("creating '%s' and adding '%s' to it", zip_filename, base_dir) + + def visit(z, dirname, names): + for name in names: + path = os.path.normpath(os.path.join(dirname, name)) + if os.path.isfile(path): + p = path[len(base_dir) + 1:] + if not dry_run: + z.write(path, p) + log.debug("adding '%s'", p) + + compression = zipfile.ZIP_DEFLATED if compress else zipfile.ZIP_STORED + if not dry_run: + z = zipfile.ZipFile(zip_filename, mode, compression=compression) + for dirname, dirs, files in sorted_walk(base_dir): + visit(z, dirname, files) + z.close() + else: + for dirname, dirs, files in sorted_walk(base_dir): + visit(None, dirname, files) + return zip_filename diff --git a/week-0/day-3/venv/lib/python3.6/site-packages/setuptools/command/bdist_rpm.py b/week-0/day-3/venv/lib/python3.6/site-packages/setuptools/command/bdist_rpm.py new file mode 100644 index 00000000..70730927 --- /dev/null +++ b/week-0/day-3/venv/lib/python3.6/site-packages/setuptools/command/bdist_rpm.py @@ -0,0 +1,43 @@ +import distutils.command.bdist_rpm as orig + + +class bdist_rpm(orig.bdist_rpm): + """ + Override the default bdist_rpm behavior to do the following: + + 1. Run egg_info to ensure the name and version are properly calculated. + 2. Always run 'install' using --single-version-externally-managed to + disable eggs in RPM distributions. + 3. Replace dash with underscore in the version numbers for better RPM + compatibility. + """ + + def run(self): + # ensure distro name is up-to-date + self.run_command('egg_info') + + orig.bdist_rpm.run(self) + + def _make_spec_file(self): + version = self.distribution.get_version() + rpmversion = version.replace('-', '_') + spec = orig.bdist_rpm._make_spec_file(self) + line23 = '%define version ' + version + line24 = '%define version ' + rpmversion + spec = [ + line.replace( + "Source0: %{name}-%{version}.tar", + "Source0: %{name}-%{unmangled_version}.tar" + ).replace( + "setup.py install ", + "setup.py install --single-version-externally-managed " + ).replace( + "%setup", + "%setup -n %{name}-%{unmangled_version}" + ).replace(line23, line24) + for line in spec + ] + insert_loc = spec.index(line24) + 1 + unmangled_version = "%define unmangled_version " + version + spec.insert(insert_loc, unmangled_version) + return spec diff --git a/week-0/day-3/venv/lib/python3.6/site-packages/setuptools/command/bdist_wininst.py b/week-0/day-3/venv/lib/python3.6/site-packages/setuptools/command/bdist_wininst.py new file mode 100644 index 00000000..073de97b --- /dev/null +++ b/week-0/day-3/venv/lib/python3.6/site-packages/setuptools/command/bdist_wininst.py @@ -0,0 +1,21 @@ +import distutils.command.bdist_wininst as orig + + +class bdist_wininst(orig.bdist_wininst): + def reinitialize_command(self, command, reinit_subcommands=0): + """ + Supplement reinitialize_command to work around + http://bugs.python.org/issue20819 + """ + cmd = self.distribution.reinitialize_command( + command, reinit_subcommands) + if command in ('install', 'install_lib'): + cmd.install_lib = None + return cmd + + def run(self): + self._is_running = True + try: + orig.bdist_wininst.run(self) + finally: + self._is_running = False diff --git a/week-0/day-3/venv/lib/python3.6/site-packages/setuptools/command/build_clib.py b/week-0/day-3/venv/lib/python3.6/site-packages/setuptools/command/build_clib.py new file mode 100644 index 00000000..09caff6f --- /dev/null +++ b/week-0/day-3/venv/lib/python3.6/site-packages/setuptools/command/build_clib.py @@ -0,0 +1,98 @@ +import distutils.command.build_clib as orig +from distutils.errors import DistutilsSetupError +from distutils import log +from setuptools.dep_util import newer_pairwise_group + + +class build_clib(orig.build_clib): + """ + Override the default build_clib behaviour to do the following: + + 1. Implement a rudimentary timestamp-based dependency system + so 'compile()' doesn't run every time. + 2. Add more keys to the 'build_info' dictionary: + * obj_deps - specify dependencies for each object compiled. + this should be a dictionary mapping a key + with the source filename to a list of + dependencies. Use an empty string for global + dependencies. + * cflags - specify a list of additional flags to pass to + the compiler. + """ + + def build_libraries(self, libraries): + for (lib_name, build_info) in libraries: + sources = build_info.get('sources') + if sources is None or not isinstance(sources, (list, tuple)): + raise DistutilsSetupError( + "in 'libraries' option (library '%s'), " + "'sources' must be present and must be " + "a list of source filenames" % lib_name) + sources = list(sources) + + log.info("building '%s' library", lib_name) + + # Make sure everything is the correct type. + # obj_deps should be a dictionary of keys as sources + # and a list/tuple of files that are its dependencies. + obj_deps = build_info.get('obj_deps', dict()) + if not isinstance(obj_deps, dict): + raise DistutilsSetupError( + "in 'libraries' option (library '%s'), " + "'obj_deps' must be a dictionary of " + "type 'source: list'" % lib_name) + dependencies = [] + + # Get the global dependencies that are specified by the '' key. + # These will go into every source's dependency list. + global_deps = obj_deps.get('', list()) + if not isinstance(global_deps, (list, tuple)): + raise DistutilsSetupError( + "in 'libraries' option (library '%s'), " + "'obj_deps' must be a dictionary of " + "type 'source: list'" % lib_name) + + # Build the list to be used by newer_pairwise_group + # each source will be auto-added to its dependencies. + for source in sources: + src_deps = [source] + src_deps.extend(global_deps) + extra_deps = obj_deps.get(source, list()) + if not isinstance(extra_deps, (list, tuple)): + raise DistutilsSetupError( + "in 'libraries' option (library '%s'), " + "'obj_deps' must be a dictionary of " + "type 'source: list'" % lib_name) + src_deps.extend(extra_deps) + dependencies.append(src_deps) + + expected_objects = self.compiler.object_filenames( + sources, + output_dir=self.build_temp + ) + + if newer_pairwise_group(dependencies, expected_objects) != ([], []): + # First, compile the source code to object files in the library + # directory. (This should probably change to putting object + # files in a temporary build directory.) + macros = build_info.get('macros') + include_dirs = build_info.get('include_dirs') + cflags = build_info.get('cflags') + objects = self.compiler.compile( + sources, + output_dir=self.build_temp, + macros=macros, + include_dirs=include_dirs, + extra_postargs=cflags, + debug=self.debug + ) + + # Now "link" the object files together into a static library. + # (On Unix at least, this isn't really linking -- it just + # builds an archive. Whatever.) + self.compiler.create_static_lib( + expected_objects, + lib_name, + output_dir=self.build_clib, + debug=self.debug + ) diff --git a/week-0/day-3/venv/lib/python3.6/site-packages/setuptools/command/build_ext.py b/week-0/day-3/venv/lib/python3.6/site-packages/setuptools/command/build_ext.py new file mode 100644 index 00000000..ea97b37b --- /dev/null +++ b/week-0/day-3/venv/lib/python3.6/site-packages/setuptools/command/build_ext.py @@ -0,0 +1,331 @@ +import os +import sys +import itertools +import imp +from distutils.command.build_ext import build_ext as _du_build_ext +from distutils.file_util import copy_file +from distutils.ccompiler import new_compiler +from distutils.sysconfig import customize_compiler, get_config_var +from distutils.errors import DistutilsError +from distutils import log + +from setuptools.extension import Library +from setuptools.extern import six + +try: + # Attempt to use Cython for building extensions, if available + from Cython.Distutils.build_ext import build_ext as _build_ext + # Additionally, assert that the compiler module will load + # also. Ref #1229. + __import__('Cython.Compiler.Main') +except ImportError: + _build_ext = _du_build_ext + +# make sure _config_vars is initialized +get_config_var("LDSHARED") +from distutils.sysconfig import _config_vars as _CONFIG_VARS + + +def _customize_compiler_for_shlib(compiler): + if sys.platform == "darwin": + # building .dylib requires additional compiler flags on OSX; here we + # temporarily substitute the pyconfig.h variables so that distutils' + # 'customize_compiler' uses them before we build the shared libraries. + tmp = _CONFIG_VARS.copy() + try: + # XXX Help! I don't have any idea whether these are right... + _CONFIG_VARS['LDSHARED'] = ( + "gcc -Wl,-x -dynamiclib -undefined dynamic_lookup") + _CONFIG_VARS['CCSHARED'] = " -dynamiclib" + _CONFIG_VARS['SO'] = ".dylib" + customize_compiler(compiler) + finally: + _CONFIG_VARS.clear() + _CONFIG_VARS.update(tmp) + else: + customize_compiler(compiler) + + +have_rtld = False +use_stubs = False +libtype = 'shared' + +if sys.platform == "darwin": + use_stubs = True +elif os.name != 'nt': + try: + import dl + use_stubs = have_rtld = hasattr(dl, 'RTLD_NOW') + except ImportError: + pass + +if_dl = lambda s: s if have_rtld else '' + + +def get_abi3_suffix(): + """Return the file extension for an abi3-compliant Extension()""" + for suffix, _, _ in (s for s in imp.get_suffixes() if s[2] == imp.C_EXTENSION): + if '.abi3' in suffix: # Unix + return suffix + elif suffix == '.pyd': # Windows + return suffix + + +class build_ext(_build_ext): + def run(self): + """Build extensions in build directory, then copy if --inplace""" + old_inplace, self.inplace = self.inplace, 0 + _build_ext.run(self) + self.inplace = old_inplace + if old_inplace: + self.copy_extensions_to_source() + + def copy_extensions_to_source(self): + build_py = self.get_finalized_command('build_py') + for ext in self.extensions: + fullname = self.get_ext_fullname(ext.name) + filename = self.get_ext_filename(fullname) + modpath = fullname.split('.') + package = '.'.join(modpath[:-1]) + package_dir = build_py.get_package_dir(package) + dest_filename = os.path.join(package_dir, + os.path.basename(filename)) + src_filename = os.path.join(self.build_lib, filename) + + # Always copy, even if source is older than destination, to ensure + # that the right extensions for the current Python/platform are + # used. + copy_file( + src_filename, dest_filename, verbose=self.verbose, + dry_run=self.dry_run + ) + if ext._needs_stub: + self.write_stub(package_dir or os.curdir, ext, True) + + def get_ext_filename(self, fullname): + filename = _build_ext.get_ext_filename(self, fullname) + if fullname in self.ext_map: + ext = self.ext_map[fullname] + use_abi3 = ( + six.PY3 + and getattr(ext, 'py_limited_api') + and get_abi3_suffix() + ) + if use_abi3: + so_ext = _get_config_var_837('EXT_SUFFIX') + filename = filename[:-len(so_ext)] + filename = filename + get_abi3_suffix() + if isinstance(ext, Library): + fn, ext = os.path.splitext(filename) + return self.shlib_compiler.library_filename(fn, libtype) + elif use_stubs and ext._links_to_dynamic: + d, fn = os.path.split(filename) + return os.path.join(d, 'dl-' + fn) + return filename + + def initialize_options(self): + _build_ext.initialize_options(self) + self.shlib_compiler = None + self.shlibs = [] + self.ext_map = {} + + def finalize_options(self): + _build_ext.finalize_options(self) + self.extensions = self.extensions or [] + self.check_extensions_list(self.extensions) + self.shlibs = [ext for ext in self.extensions + if isinstance(ext, Library)] + if self.shlibs: + self.setup_shlib_compiler() + for ext in self.extensions: + ext._full_name = self.get_ext_fullname(ext.name) + for ext in self.extensions: + fullname = ext._full_name + self.ext_map[fullname] = ext + + # distutils 3.1 will also ask for module names + # XXX what to do with conflicts? + self.ext_map[fullname.split('.')[-1]] = ext + + ltd = self.shlibs and self.links_to_dynamic(ext) or False + ns = ltd and use_stubs and not isinstance(ext, Library) + ext._links_to_dynamic = ltd + ext._needs_stub = ns + filename = ext._file_name = self.get_ext_filename(fullname) + libdir = os.path.dirname(os.path.join(self.build_lib, filename)) + if ltd and libdir not in ext.library_dirs: + ext.library_dirs.append(libdir) + if ltd and use_stubs and os.curdir not in ext.runtime_library_dirs: + ext.runtime_library_dirs.append(os.curdir) + + def setup_shlib_compiler(self): + compiler = self.shlib_compiler = new_compiler( + compiler=self.compiler, dry_run=self.dry_run, force=self.force + ) + _customize_compiler_for_shlib(compiler) + + if self.include_dirs is not None: + compiler.set_include_dirs(self.include_dirs) + if self.define is not None: + # 'define' option is a list of (name,value) tuples + for (name, value) in self.define: + compiler.define_macro(name, value) + if self.undef is not None: + for macro in self.undef: + compiler.undefine_macro(macro) + if self.libraries is not None: + compiler.set_libraries(self.libraries) + if self.library_dirs is not None: + compiler.set_library_dirs(self.library_dirs) + if self.rpath is not None: + compiler.set_runtime_library_dirs(self.rpath) + if self.link_objects is not None: + compiler.set_link_objects(self.link_objects) + + # hack so distutils' build_extension() builds a library instead + compiler.link_shared_object = link_shared_object.__get__(compiler) + + def get_export_symbols(self, ext): + if isinstance(ext, Library): + return ext.export_symbols + return _build_ext.get_export_symbols(self, ext) + + def build_extension(self, ext): + ext._convert_pyx_sources_to_lang() + _compiler = self.compiler + try: + if isinstance(ext, Library): + self.compiler = self.shlib_compiler + _build_ext.build_extension(self, ext) + if ext._needs_stub: + cmd = self.get_finalized_command('build_py').build_lib + self.write_stub(cmd, ext) + finally: + self.compiler = _compiler + + def links_to_dynamic(self, ext): + """Return true if 'ext' links to a dynamic lib in the same package""" + # XXX this should check to ensure the lib is actually being built + # XXX as dynamic, and not just using a locally-found version or a + # XXX static-compiled version + libnames = dict.fromkeys([lib._full_name for lib in self.shlibs]) + pkg = '.'.join(ext._full_name.split('.')[:-1] + ['']) + return any(pkg + libname in libnames for libname in ext.libraries) + + def get_outputs(self): + return _build_ext.get_outputs(self) + self.__get_stubs_outputs() + + def __get_stubs_outputs(self): + # assemble the base name for each extension that needs a stub + ns_ext_bases = ( + os.path.join(self.build_lib, *ext._full_name.split('.')) + for ext in self.extensions + if ext._needs_stub + ) + # pair each base with the extension + pairs = itertools.product(ns_ext_bases, self.__get_output_extensions()) + return list(base + fnext for base, fnext in pairs) + + def __get_output_extensions(self): + yield '.py' + yield '.pyc' + if self.get_finalized_command('build_py').optimize: + yield '.pyo' + + def write_stub(self, output_dir, ext, compile=False): + log.info("writing stub loader for %s to %s", ext._full_name, + output_dir) + stub_file = (os.path.join(output_dir, *ext._full_name.split('.')) + + '.py') + if compile and os.path.exists(stub_file): + raise DistutilsError(stub_file + " already exists! Please delete.") + if not self.dry_run: + f = open(stub_file, 'w') + f.write( + '\n'.join([ + "def __bootstrap__():", + " global __bootstrap__, __file__, __loader__", + " import sys, os, pkg_resources, imp" + if_dl(", dl"), + " __file__ = pkg_resources.resource_filename" + "(__name__,%r)" + % os.path.basename(ext._file_name), + " del __bootstrap__", + " if '__loader__' in globals():", + " del __loader__", + if_dl(" old_flags = sys.getdlopenflags()"), + " old_dir = os.getcwd()", + " try:", + " os.chdir(os.path.dirname(__file__))", + if_dl(" sys.setdlopenflags(dl.RTLD_NOW)"), + " imp.load_dynamic(__name__,__file__)", + " finally:", + if_dl(" sys.setdlopenflags(old_flags)"), + " os.chdir(old_dir)", + "__bootstrap__()", + "" # terminal \n + ]) + ) + f.close() + if compile: + from distutils.util import byte_compile + + byte_compile([stub_file], optimize=0, + force=True, dry_run=self.dry_run) + optimize = self.get_finalized_command('install_lib').optimize + if optimize > 0: + byte_compile([stub_file], optimize=optimize, + force=True, dry_run=self.dry_run) + if os.path.exists(stub_file) and not self.dry_run: + os.unlink(stub_file) + + +if use_stubs or os.name == 'nt': + # Build shared libraries + # + def link_shared_object( + self, objects, output_libname, output_dir=None, libraries=None, + library_dirs=None, runtime_library_dirs=None, export_symbols=None, + debug=0, extra_preargs=None, extra_postargs=None, build_temp=None, + target_lang=None): + self.link( + self.SHARED_LIBRARY, objects, output_libname, + output_dir, libraries, library_dirs, runtime_library_dirs, + export_symbols, debug, extra_preargs, extra_postargs, + build_temp, target_lang + ) +else: + # Build static libraries everywhere else + libtype = 'static' + + def link_shared_object( + self, objects, output_libname, output_dir=None, libraries=None, + library_dirs=None, runtime_library_dirs=None, export_symbols=None, + debug=0, extra_preargs=None, extra_postargs=None, build_temp=None, + target_lang=None): + # XXX we need to either disallow these attrs on Library instances, + # or warn/abort here if set, or something... + # libraries=None, library_dirs=None, runtime_library_dirs=None, + # export_symbols=None, extra_preargs=None, extra_postargs=None, + # build_temp=None + + assert output_dir is None # distutils build_ext doesn't pass this + output_dir, filename = os.path.split(output_libname) + basename, ext = os.path.splitext(filename) + if self.library_filename("x").startswith('lib'): + # strip 'lib' prefix; this is kludgy if some platform uses + # a different prefix + basename = basename[3:] + + self.create_static_lib( + objects, basename, output_dir, debug, target_lang + ) + + +def _get_config_var_837(name): + """ + In https://github.com/pypa/setuptools/pull/837, we discovered + Python 3.3.0 exposes the extension suffix under the name 'SO'. + """ + if sys.version_info < (3, 3, 1): + name = 'SO' + return get_config_var(name) diff --git a/week-0/day-3/venv/lib/python3.6/site-packages/setuptools/command/build_py.py b/week-0/day-3/venv/lib/python3.6/site-packages/setuptools/command/build_py.py new file mode 100644 index 00000000..b0314fd4 --- /dev/null +++ b/week-0/day-3/venv/lib/python3.6/site-packages/setuptools/command/build_py.py @@ -0,0 +1,270 @@ +from glob import glob +from distutils.util import convert_path +import distutils.command.build_py as orig +import os +import fnmatch +import textwrap +import io +import distutils.errors +import itertools + +from setuptools.extern import six +from setuptools.extern.six.moves import map, filter, filterfalse + +try: + from setuptools.lib2to3_ex import Mixin2to3 +except ImportError: + + class Mixin2to3: + def run_2to3(self, files, doctests=True): + "do nothing" + + +class build_py(orig.build_py, Mixin2to3): + """Enhanced 'build_py' command that includes data files with packages + + The data files are specified via a 'package_data' argument to 'setup()'. + See 'setuptools.dist.Distribution' for more details. + + Also, this version of the 'build_py' command allows you to specify both + 'py_modules' and 'packages' in the same setup operation. + """ + + def finalize_options(self): + orig.build_py.finalize_options(self) + self.package_data = self.distribution.package_data + self.exclude_package_data = (self.distribution.exclude_package_data or + {}) + if 'data_files' in self.__dict__: + del self.__dict__['data_files'] + self.__updated_files = [] + self.__doctests_2to3 = [] + + def run(self): + """Build modules, packages, and copy data files to build directory""" + if not self.py_modules and not self.packages: + return + + if self.py_modules: + self.build_modules() + + if self.packages: + self.build_packages() + self.build_package_data() + + self.run_2to3(self.__updated_files, False) + self.run_2to3(self.__updated_files, True) + self.run_2to3(self.__doctests_2to3, True) + + # Only compile actual .py files, using our base class' idea of what our + # output files are. + self.byte_compile(orig.build_py.get_outputs(self, include_bytecode=0)) + + def __getattr__(self, attr): + "lazily compute data files" + if attr == 'data_files': + self.data_files = self._get_data_files() + return self.data_files + return orig.build_py.__getattr__(self, attr) + + def build_module(self, module, module_file, package): + if six.PY2 and isinstance(package, six.string_types): + # avoid errors on Python 2 when unicode is passed (#190) + package = package.split('.') + outfile, copied = orig.build_py.build_module(self, module, module_file, + package) + if copied: + self.__updated_files.append(outfile) + return outfile, copied + + def _get_data_files(self): + """Generate list of '(package,src_dir,build_dir,filenames)' tuples""" + self.analyze_manifest() + return list(map(self._get_pkg_data_files, self.packages or ())) + + def _get_pkg_data_files(self, package): + # Locate package source directory + src_dir = self.get_package_dir(package) + + # Compute package build directory + build_dir = os.path.join(*([self.build_lib] + package.split('.'))) + + # Strip directory from globbed filenames + filenames = [ + os.path.relpath(file, src_dir) + for file in self.find_data_files(package, src_dir) + ] + return package, src_dir, build_dir, filenames + + def find_data_files(self, package, src_dir): + """Return filenames for package's data files in 'src_dir'""" + patterns = self._get_platform_patterns( + self.package_data, + package, + src_dir, + ) + globs_expanded = map(glob, patterns) + # flatten the expanded globs into an iterable of matches + globs_matches = itertools.chain.from_iterable(globs_expanded) + glob_files = filter(os.path.isfile, globs_matches) + files = itertools.chain( + self.manifest_files.get(package, []), + glob_files, + ) + return self.exclude_data_files(package, src_dir, files) + + def build_package_data(self): + """Copy data files into build directory""" + for package, src_dir, build_dir, filenames in self.data_files: + for filename in filenames: + target = os.path.join(build_dir, filename) + self.mkpath(os.path.dirname(target)) + srcfile = os.path.join(src_dir, filename) + outf, copied = self.copy_file(srcfile, target) + srcfile = os.path.abspath(srcfile) + if (copied and + srcfile in self.distribution.convert_2to3_doctests): + self.__doctests_2to3.append(outf) + + def analyze_manifest(self): + self.manifest_files = mf = {} + if not self.distribution.include_package_data: + return + src_dirs = {} + for package in self.packages or (): + # Locate package source directory + src_dirs[assert_relative(self.get_package_dir(package))] = package + + self.run_command('egg_info') + ei_cmd = self.get_finalized_command('egg_info') + for path in ei_cmd.filelist.files: + d, f = os.path.split(assert_relative(path)) + prev = None + oldf = f + while d and d != prev and d not in src_dirs: + prev = d + d, df = os.path.split(d) + f = os.path.join(df, f) + if d in src_dirs: + if path.endswith('.py') and f == oldf: + continue # it's a module, not data + mf.setdefault(src_dirs[d], []).append(path) + + def get_data_files(self): + pass # Lazily compute data files in _get_data_files() function. + + def check_package(self, package, package_dir): + """Check namespace packages' __init__ for declare_namespace""" + try: + return self.packages_checked[package] + except KeyError: + pass + + init_py = orig.build_py.check_package(self, package, package_dir) + self.packages_checked[package] = init_py + + if not init_py or not self.distribution.namespace_packages: + return init_py + + for pkg in self.distribution.namespace_packages: + if pkg == package or pkg.startswith(package + '.'): + break + else: + return init_py + + with io.open(init_py, 'rb') as f: + contents = f.read() + if b'declare_namespace' not in contents: + raise distutils.errors.DistutilsError( + "Namespace package problem: %s is a namespace package, but " + "its\n__init__.py does not call declare_namespace()! Please " + 'fix it.\n(See the setuptools manual under ' + '"Namespace Packages" for details.)\n"' % (package,) + ) + return init_py + + def initialize_options(self): + self.packages_checked = {} + orig.build_py.initialize_options(self) + + def get_package_dir(self, package): + res = orig.build_py.get_package_dir(self, package) + if self.distribution.src_root is not None: + return os.path.join(self.distribution.src_root, res) + return res + + def exclude_data_files(self, package, src_dir, files): + """Filter filenames for package's data files in 'src_dir'""" + files = list(files) + patterns = self._get_platform_patterns( + self.exclude_package_data, + package, + src_dir, + ) + match_groups = ( + fnmatch.filter(files, pattern) + for pattern in patterns + ) + # flatten the groups of matches into an iterable of matches + matches = itertools.chain.from_iterable(match_groups) + bad = set(matches) + keepers = ( + fn + for fn in files + if fn not in bad + ) + # ditch dupes + return list(_unique_everseen(keepers)) + + @staticmethod + def _get_platform_patterns(spec, package, src_dir): + """ + yield platform-specific path patterns (suitable for glob + or fn_match) from a glob-based spec (such as + self.package_data or self.exclude_package_data) + matching package in src_dir. + """ + raw_patterns = itertools.chain( + spec.get('', []), + spec.get(package, []), + ) + return ( + # Each pattern has to be converted to a platform-specific path + os.path.join(src_dir, convert_path(pattern)) + for pattern in raw_patterns + ) + + +# from Python docs +def _unique_everseen(iterable, key=None): + "List unique elements, preserving order. Remember all elements ever seen." + # unique_everseen('AAAABBBCCDAABBB') --> A B C D + # unique_everseen('ABBCcAD', str.lower) --> A B C D + seen = set() + seen_add = seen.add + if key is None: + for element in filterfalse(seen.__contains__, iterable): + seen_add(element) + yield element + else: + for element in iterable: + k = key(element) + if k not in seen: + seen_add(k) + yield element + + +def assert_relative(path): + if not os.path.isabs(path): + return path + from distutils.errors import DistutilsSetupError + + msg = textwrap.dedent(""" + Error: setup script specifies an absolute path: + + %s + + setup() arguments must *always* be /-separated paths relative to the + setup.py directory, *never* absolute paths. + """).lstrip() % path + raise DistutilsSetupError(msg) diff --git a/week-0/day-3/venv/lib/python3.6/site-packages/setuptools/command/develop.py b/week-0/day-3/venv/lib/python3.6/site-packages/setuptools/command/develop.py new file mode 100644 index 00000000..959c932a --- /dev/null +++ b/week-0/day-3/venv/lib/python3.6/site-packages/setuptools/command/develop.py @@ -0,0 +1,216 @@ +from distutils.util import convert_path +from distutils import log +from distutils.errors import DistutilsError, DistutilsOptionError +import os +import glob +import io + +from setuptools.extern import six + +from pkg_resources import Distribution, PathMetadata, normalize_path +from setuptools.command.easy_install import easy_install +from setuptools import namespaces +import setuptools + + +class develop(namespaces.DevelopInstaller, easy_install): + """Set up package for development""" + + description = "install package in 'development mode'" + + user_options = easy_install.user_options + [ + ("uninstall", "u", "Uninstall this source package"), + ("egg-path=", None, "Set the path to be used in the .egg-link file"), + ] + + boolean_options = easy_install.boolean_options + ['uninstall'] + + command_consumes_arguments = False # override base + + def run(self): + if self.uninstall: + self.multi_version = True + self.uninstall_link() + self.uninstall_namespaces() + else: + self.install_for_development() + self.warn_deprecated_options() + + def initialize_options(self): + self.uninstall = None + self.egg_path = None + easy_install.initialize_options(self) + self.setup_path = None + self.always_copy_from = '.' # always copy eggs installed in curdir + + def finalize_options(self): + ei = self.get_finalized_command("egg_info") + if ei.broken_egg_info: + template = "Please rename %r to %r before using 'develop'" + args = ei.egg_info, ei.broken_egg_info + raise DistutilsError(template % args) + self.args = [ei.egg_name] + + easy_install.finalize_options(self) + self.expand_basedirs() + self.expand_dirs() + # pick up setup-dir .egg files only: no .egg-info + self.package_index.scan(glob.glob('*.egg')) + + egg_link_fn = ei.egg_name + '.egg-link' + self.egg_link = os.path.join(self.install_dir, egg_link_fn) + self.egg_base = ei.egg_base + if self.egg_path is None: + self.egg_path = os.path.abspath(ei.egg_base) + + target = normalize_path(self.egg_base) + egg_path = normalize_path(os.path.join(self.install_dir, + self.egg_path)) + if egg_path != target: + raise DistutilsOptionError( + "--egg-path must be a relative path from the install" + " directory to " + target + ) + + # Make a distribution for the package's source + self.dist = Distribution( + target, + PathMetadata(target, os.path.abspath(ei.egg_info)), + project_name=ei.egg_name + ) + + self.setup_path = self._resolve_setup_path( + self.egg_base, + self.install_dir, + self.egg_path, + ) + + @staticmethod + def _resolve_setup_path(egg_base, install_dir, egg_path): + """ + Generate a path from egg_base back to '.' where the + setup script resides and ensure that path points to the + setup path from $install_dir/$egg_path. + """ + path_to_setup = egg_base.replace(os.sep, '/').rstrip('/') + if path_to_setup != os.curdir: + path_to_setup = '../' * (path_to_setup.count('/') + 1) + resolved = normalize_path( + os.path.join(install_dir, egg_path, path_to_setup) + ) + if resolved != normalize_path(os.curdir): + raise DistutilsOptionError( + "Can't get a consistent path to setup script from" + " installation directory", resolved, normalize_path(os.curdir)) + return path_to_setup + + def install_for_development(self): + if six.PY3 and getattr(self.distribution, 'use_2to3', False): + # If we run 2to3 we can not do this inplace: + + # Ensure metadata is up-to-date + self.reinitialize_command('build_py', inplace=0) + self.run_command('build_py') + bpy_cmd = self.get_finalized_command("build_py") + build_path = normalize_path(bpy_cmd.build_lib) + + # Build extensions + self.reinitialize_command('egg_info', egg_base=build_path) + self.run_command('egg_info') + + self.reinitialize_command('build_ext', inplace=0) + self.run_command('build_ext') + + # Fixup egg-link and easy-install.pth + ei_cmd = self.get_finalized_command("egg_info") + self.egg_path = build_path + self.dist.location = build_path + # XXX + self.dist._provider = PathMetadata(build_path, ei_cmd.egg_info) + else: + # Without 2to3 inplace works fine: + self.run_command('egg_info') + + # Build extensions in-place + self.reinitialize_command('build_ext', inplace=1) + self.run_command('build_ext') + + self.install_site_py() # ensure that target dir is site-safe + if setuptools.bootstrap_install_from: + self.easy_install(setuptools.bootstrap_install_from) + setuptools.bootstrap_install_from = None + + self.install_namespaces() + + # create an .egg-link in the installation dir, pointing to our egg + log.info("Creating %s (link to %s)", self.egg_link, self.egg_base) + if not self.dry_run: + with open(self.egg_link, "w") as f: + f.write(self.egg_path + "\n" + self.setup_path) + # postprocess the installed distro, fixing up .pth, installing scripts, + # and handling requirements + self.process_distribution(None, self.dist, not self.no_deps) + + def uninstall_link(self): + if os.path.exists(self.egg_link): + log.info("Removing %s (link to %s)", self.egg_link, self.egg_base) + egg_link_file = open(self.egg_link) + contents = [line.rstrip() for line in egg_link_file] + egg_link_file.close() + if contents not in ([self.egg_path], + [self.egg_path, self.setup_path]): + log.warn("Link points to %s: uninstall aborted", contents) + return + if not self.dry_run: + os.unlink(self.egg_link) + if not self.dry_run: + self.update_pth(self.dist) # remove any .pth link to us + if self.distribution.scripts: + # XXX should also check for entry point scripts! + log.warn("Note: you must uninstall or replace scripts manually!") + + def install_egg_scripts(self, dist): + if dist is not self.dist: + # Installing a dependency, so fall back to normal behavior + return easy_install.install_egg_scripts(self, dist) + + # create wrapper scripts in the script dir, pointing to dist.scripts + + # new-style... + self.install_wrapper_scripts(dist) + + # ...and old-style + for script_name in self.distribution.scripts or []: + script_path = os.path.abspath(convert_path(script_name)) + script_name = os.path.basename(script_path) + with io.open(script_path) as strm: + script_text = strm.read() + self.install_script(dist, script_name, script_text, script_path) + + def install_wrapper_scripts(self, dist): + dist = VersionlessRequirement(dist) + return easy_install.install_wrapper_scripts(self, dist) + + +class VersionlessRequirement(object): + """ + Adapt a pkg_resources.Distribution to simply return the project + name as the 'requirement' so that scripts will work across + multiple versions. + + >>> dist = Distribution(project_name='foo', version='1.0') + >>> str(dist.as_requirement()) + 'foo==1.0' + >>> adapted_dist = VersionlessRequirement(dist) + >>> str(adapted_dist.as_requirement()) + 'foo' + """ + + def __init__(self, dist): + self.__dist = dist + + def __getattr__(self, name): + return getattr(self.__dist, name) + + def as_requirement(self): + return self.project_name diff --git a/week-0/day-3/venv/lib/python3.6/site-packages/setuptools/command/dist_info.py b/week-0/day-3/venv/lib/python3.6/site-packages/setuptools/command/dist_info.py new file mode 100644 index 00000000..c45258fa --- /dev/null +++ b/week-0/day-3/venv/lib/python3.6/site-packages/setuptools/command/dist_info.py @@ -0,0 +1,36 @@ +""" +Create a dist_info directory +As defined in the wheel specification +""" + +import os + +from distutils.core import Command +from distutils import log + + +class dist_info(Command): + + description = 'create a .dist-info directory' + + user_options = [ + ('egg-base=', 'e', "directory containing .egg-info directories" + " (default: top of the source tree)"), + ] + + def initialize_options(self): + self.egg_base = None + + def finalize_options(self): + pass + + def run(self): + egg_info = self.get_finalized_command('egg_info') + egg_info.egg_base = self.egg_base + egg_info.finalize_options() + egg_info.run() + dist_info_dir = egg_info.egg_info[:-len('.egg-info')] + '.dist-info' + log.info("creating '{}'".format(os.path.abspath(dist_info_dir))) + + bdist_wheel = self.get_finalized_command('bdist_wheel') + bdist_wheel.egg2dist(egg_info.egg_info, dist_info_dir) diff --git a/week-0/day-3/venv/lib/python3.6/site-packages/setuptools/command/easy_install.py b/week-0/day-3/venv/lib/python3.6/site-packages/setuptools/command/easy_install.py new file mode 100644 index 00000000..c9fa55d9 --- /dev/null +++ b/week-0/day-3/venv/lib/python3.6/site-packages/setuptools/command/easy_install.py @@ -0,0 +1,2389 @@ +#!/usr/bin/env python +""" +Easy Install +------------ + +A tool for doing automatic download/extract/build of distutils-based Python +packages. For detailed documentation, see the accompanying EasyInstall.txt +file, or visit the `EasyInstall home page`__. + +__ https://setuptools.readthedocs.io/en/latest/easy_install.html + +""" + +from glob import glob +from distutils.util import get_platform +from distutils.util import convert_path, subst_vars +from distutils.errors import ( + DistutilsArgError, DistutilsOptionError, + DistutilsError, DistutilsPlatformError, +) +from distutils.command.install import INSTALL_SCHEMES, SCHEME_KEYS +from distutils import log, dir_util +from distutils.command.build_scripts import first_line_re +from distutils.spawn import find_executable +import sys +import os +import zipimport +import shutil +import tempfile +import zipfile +import re +import stat +import random +import textwrap +import warnings +import site +import struct +import contextlib +import subprocess +import shlex +import io + +from setuptools.extern import six +from setuptools.extern.six.moves import configparser, map + +from setuptools import Command +from setuptools.sandbox import run_setup +from setuptools.py31compat import get_path, get_config_vars +from setuptools.py27compat import rmtree_safe +from setuptools.command import setopt +from setuptools.archive_util import unpack_archive +from setuptools.package_index import ( + PackageIndex, parse_requirement_arg, URL_SCHEME, +) +from setuptools.command import bdist_egg, egg_info +from setuptools.wheel import Wheel +from pkg_resources import ( + yield_lines, normalize_path, resource_string, ensure_directory, + get_distribution, find_distributions, Environment, Requirement, + Distribution, PathMetadata, EggMetadata, WorkingSet, DistributionNotFound, + VersionConflict, DEVELOP_DIST, +) +import pkg_resources.py31compat + +# Turn on PEP440Warnings +warnings.filterwarnings("default", category=pkg_resources.PEP440Warning) + +__all__ = [ + 'samefile', 'easy_install', 'PthDistributions', 'extract_wininst_cfg', + 'main', 'get_exe_prefixes', +] + + +def is_64bit(): + return struct.calcsize("P") == 8 + + +def samefile(p1, p2): + """ + Determine if two paths reference the same file. + + Augments os.path.samefile to work on Windows and + suppresses errors if the path doesn't exist. + """ + both_exist = os.path.exists(p1) and os.path.exists(p2) + use_samefile = hasattr(os.path, 'samefile') and both_exist + if use_samefile: + return os.path.samefile(p1, p2) + norm_p1 = os.path.normpath(os.path.normcase(p1)) + norm_p2 = os.path.normpath(os.path.normcase(p2)) + return norm_p1 == norm_p2 + + +if six.PY2: + + def _to_ascii(s): + return s + + def isascii(s): + try: + six.text_type(s, 'ascii') + return True + except UnicodeError: + return False +else: + + def _to_ascii(s): + return s.encode('ascii') + + def isascii(s): + try: + s.encode('ascii') + return True + except UnicodeError: + return False + + +_one_liner = lambda text: textwrap.dedent(text).strip().replace('\n', '; ') + + +class easy_install(Command): + """Manage a download/build/install process""" + description = "Find/get/install Python packages" + command_consumes_arguments = True + + user_options = [ + ('prefix=', None, "installation prefix"), + ("zip-ok", "z", "install package as a zipfile"), + ("multi-version", "m", "make apps have to require() a version"), + ("upgrade", "U", "force upgrade (searches PyPI for latest versions)"), + ("install-dir=", "d", "install package to DIR"), + ("script-dir=", "s", "install scripts to DIR"), + ("exclude-scripts", "x", "Don't install scripts"), + ("always-copy", "a", "Copy all needed packages to install dir"), + ("index-url=", "i", "base URL of Python Package Index"), + ("find-links=", "f", "additional URL(s) to search for packages"), + ("build-directory=", "b", + "download/extract/build in DIR; keep the results"), + ('optimize=', 'O', + "also compile with optimization: -O1 for \"python -O\", " + "-O2 for \"python -OO\", and -O0 to disable [default: -O0]"), + ('record=', None, + "filename in which to record list of installed files"), + ('always-unzip', 'Z', "don't install as a zipfile, no matter what"), + ('site-dirs=', 'S', "list of directories where .pth files work"), + ('editable', 'e', "Install specified packages in editable form"), + ('no-deps', 'N', "don't install dependencies"), + ('allow-hosts=', 'H', "pattern(s) that hostnames must match"), + ('local-snapshots-ok', 'l', + "allow building eggs from local checkouts"), + ('version', None, "print version information and exit"), + ('install-layout=', None, "installation layout to choose (known values: deb)"), + ('force-installation-into-system-dir', '0', "force installation into /usr"), + ('no-find-links', None, + "Don't load find-links defined in packages being installed") + ] + boolean_options = [ + 'zip-ok', 'multi-version', 'exclude-scripts', 'upgrade', 'always-copy', + 'editable', + 'no-deps', 'local-snapshots-ok', 'version', 'force-installation-into-system-dir' + ] + + if site.ENABLE_USER_SITE: + help_msg = "install in user site-package '%s'" % site.USER_SITE + user_options.append(('user', None, help_msg)) + boolean_options.append('user') + + negative_opt = {'always-unzip': 'zip-ok'} + create_index = PackageIndex + + def initialize_options(self): + # the --user option seems to be an opt-in one, + # so the default should be False. + self.user = 0 + self.zip_ok = self.local_snapshots_ok = None + self.install_dir = self.script_dir = self.exclude_scripts = None + self.index_url = None + self.find_links = None + self.build_directory = None + self.args = None + self.optimize = self.record = None + self.upgrade = self.always_copy = self.multi_version = None + self.editable = self.no_deps = self.allow_hosts = None + self.root = self.prefix = self.no_report = None + self.version = None + self.install_purelib = None # for pure module distributions + self.install_platlib = None # non-pure (dists w/ extensions) + self.install_headers = None # for C/C++ headers + self.install_lib = None # set to either purelib or platlib + self.install_scripts = None + self.install_data = None + self.install_base = None + self.install_platbase = None + if site.ENABLE_USER_SITE: + self.install_userbase = site.USER_BASE + self.install_usersite = site.USER_SITE + else: + self.install_userbase = None + self.install_usersite = None + self.no_find_links = None + + # Options not specifiable via command line + self.package_index = None + self.pth_file = self.always_copy_from = None + self.site_dirs = None + self.installed_projects = {} + self.sitepy_installed = False + # enable custom installation, known values: deb + self.install_layout = None + self.force_installation_into_system_dir = None + self.multiarch = None + + # Always read easy_install options, even if we are subclassed, or have + # an independent instance created. This ensures that defaults will + # always come from the standard configuration file(s)' "easy_install" + # section, even if this is a "develop" or "install" command, or some + # other embedding. + self._dry_run = None + self.verbose = self.distribution.verbose + self.distribution._set_command_options( + self, self.distribution.get_option_dict('easy_install') + ) + + def delete_blockers(self, blockers): + extant_blockers = ( + filename for filename in blockers + if os.path.exists(filename) or os.path.islink(filename) + ) + list(map(self._delete_path, extant_blockers)) + + def _delete_path(self, path): + log.info("Deleting %s", path) + if self.dry_run: + return + + is_tree = os.path.isdir(path) and not os.path.islink(path) + remover = rmtree if is_tree else os.unlink + remover(path) + + @staticmethod + def _render_version(): + """ + Render the Setuptools version and installation details, then exit. + """ + ver = sys.version[:3] + dist = get_distribution('setuptools') + tmpl = 'setuptools {dist.version} from {dist.location} (Python {ver})' + print(tmpl.format(**locals())) + raise SystemExit() + + def finalize_options(self): + self.version and self._render_version() + + py_version = sys.version.split()[0] + prefix, exec_prefix = get_config_vars('prefix', 'exec_prefix') + + self.config_vars = { + 'dist_name': self.distribution.get_name(), + 'dist_version': self.distribution.get_version(), + 'dist_fullname': self.distribution.get_fullname(), + 'py_version': py_version, + 'py_version_short': py_version[0:3], + 'py_version_nodot': py_version[0] + py_version[2], + 'sys_prefix': prefix, + 'prefix': prefix, + 'sys_exec_prefix': exec_prefix, + 'exec_prefix': exec_prefix, + # Only python 3.2+ has abiflags + 'abiflags': getattr(sys, 'abiflags', ''), + } + + if site.ENABLE_USER_SITE: + self.config_vars['userbase'] = self.install_userbase + self.config_vars['usersite'] = self.install_usersite + + self._fix_install_dir_for_user_site() + + self.expand_basedirs() + self.expand_dirs() + + if self.install_layout: + if not self.install_layout.lower() in ['deb']: + raise DistutilsOptionError("unknown value for --install-layout") + self.install_layout = self.install_layout.lower() + + import sysconfig + if sys.version_info[:2] >= (3, 3): + self.multiarch = sysconfig.get_config_var('MULTIARCH') + + self._expand( + 'install_dir', 'script_dir', 'build_directory', + 'site_dirs', + ) + # If a non-default installation directory was specified, default the + # script directory to match it. + if self.script_dir is None: + self.script_dir = self.install_dir + + if self.no_find_links is None: + self.no_find_links = False + + # Let install_dir get set by install_lib command, which in turn + # gets its info from the install command, and takes into account + # --prefix and --home and all that other crud. + self.set_undefined_options( + 'install_lib', ('install_dir', 'install_dir') + ) + # Likewise, set default script_dir from 'install_scripts.install_dir' + self.set_undefined_options( + 'install_scripts', ('install_dir', 'script_dir') + ) + + if self.user and self.install_purelib: + self.install_dir = self.install_purelib + self.script_dir = self.install_scripts + + if self.prefix == '/usr' and not self.force_installation_into_system_dir: + raise DistutilsOptionError("""installation into /usr + +Trying to install into the system managed parts of the file system. Please +consider to install to another location, or use the option +--force-installation-into-system-dir to overwrite this warning. +""") + + # default --record from the install command + self.set_undefined_options('install', ('record', 'record')) + # Should this be moved to the if statement below? It's not used + # elsewhere + normpath = map(normalize_path, sys.path) + self.all_site_dirs = get_site_dirs() + if self.site_dirs is not None: + site_dirs = [ + os.path.expanduser(s.strip()) for s in + self.site_dirs.split(',') + ] + for d in site_dirs: + if not os.path.isdir(d): + log.warn("%s (in --site-dirs) does not exist", d) + elif normalize_path(d) not in normpath: + raise DistutilsOptionError( + d + " (in --site-dirs) is not on sys.path" + ) + else: + self.all_site_dirs.append(normalize_path(d)) + if not self.editable: + self.check_site_dir() + self.index_url = self.index_url or "https://pypi.python.org/simple" + self.shadow_path = self.all_site_dirs[:] + for path_item in self.install_dir, normalize_path(self.script_dir): + if path_item not in self.shadow_path: + self.shadow_path.insert(0, path_item) + + if self.allow_hosts is not None: + hosts = [s.strip() for s in self.allow_hosts.split(',')] + else: + hosts = ['*'] + if self.package_index is None: + self.package_index = self.create_index( + self.index_url, search_path=self.shadow_path, hosts=hosts, + ) + self.local_index = Environment(self.shadow_path + sys.path) + + if self.find_links is not None: + if isinstance(self.find_links, six.string_types): + self.find_links = self.find_links.split() + else: + self.find_links = [] + if self.local_snapshots_ok: + self.package_index.scan_egg_links(self.shadow_path + sys.path) + if not self.no_find_links: + self.package_index.add_find_links(self.find_links) + self.set_undefined_options('install_lib', ('optimize', 'optimize')) + if not isinstance(self.optimize, int): + try: + self.optimize = int(self.optimize) + if not (0 <= self.optimize <= 2): + raise ValueError + except ValueError: + raise DistutilsOptionError("--optimize must be 0, 1, or 2") + + if self.editable and not self.build_directory: + raise DistutilsArgError( + "Must specify a build directory (-b) when using --editable" + ) + if not self.args: + raise DistutilsArgError( + "No urls, filenames, or requirements specified (see --help)") + + self.outputs = [] + + def _fix_install_dir_for_user_site(self): + """ + Fix the install_dir if "--user" was used. + """ + if not self.user or not site.ENABLE_USER_SITE: + return + + self.create_home_path() + if self.install_userbase is None: + msg = "User base directory is not specified" + raise DistutilsPlatformError(msg) + self.install_base = self.install_platbase = self.install_userbase + scheme_name = os.name.replace('posix', 'unix') + '_user' + self.select_scheme(scheme_name) + + def _expand_attrs(self, attrs): + for attr in attrs: + val = getattr(self, attr) + if val is not None: + if os.name == 'posix' or os.name == 'nt': + val = os.path.expanduser(val) + val = subst_vars(val, self.config_vars) + setattr(self, attr, val) + + def expand_basedirs(self): + """Calls `os.path.expanduser` on install_base, install_platbase and + root.""" + self._expand_attrs(['install_base', 'install_platbase', 'root']) + + def expand_dirs(self): + """Calls `os.path.expanduser` on install dirs.""" + dirs = [ + 'install_purelib', + 'install_platlib', + 'install_lib', + 'install_headers', + 'install_scripts', + 'install_data', + ] + self._expand_attrs(dirs) + + def run(self): + if self.verbose != self.distribution.verbose: + log.set_verbosity(self.verbose) + try: + for spec in self.args: + self.easy_install(spec, not self.no_deps) + if self.record: + outputs = list(sorted(self.outputs)) + if self.root: # strip any package prefix + root_len = len(self.root) + for counter in range(len(outputs)): + outputs[counter] = outputs[counter][root_len:] + from distutils import file_util + + self.execute( + file_util.write_file, (self.record, outputs), + "writing list of installed files to '%s'" % + self.record + ) + self.warn_deprecated_options() + finally: + log.set_verbosity(self.distribution.verbose) + + def pseudo_tempname(self): + """Return a pseudo-tempname base in the install directory. + This code is intentionally naive; if a malicious party can write to + the target directory you're already in deep doodoo. + """ + try: + pid = os.getpid() + except Exception: + pid = random.randint(0, sys.maxsize) + return os.path.join(self.install_dir, "test-easy-install-%s" % pid) + + def warn_deprecated_options(self): + pass + + def check_site_dir(self): + """Verify that self.install_dir is .pth-capable dir, if needed""" + + instdir = normalize_path(self.install_dir) + pth_file = os.path.join(instdir, 'easy-install.pth') + + # Is it a configured, PYTHONPATH, implicit, or explicit site dir? + is_site_dir = instdir in self.all_site_dirs + + if not is_site_dir and not self.multi_version: + # No? Then directly test whether it does .pth file processing + is_site_dir = self.check_pth_processing() + else: + # make sure we can write to target dir + testfile = self.pseudo_tempname() + '.write-test' + test_exists = os.path.exists(testfile) + try: + if test_exists: + os.unlink(testfile) + open(testfile, 'w').close() + os.unlink(testfile) + except (OSError, IOError): + self.cant_write_to_target() + + if not is_site_dir and not self.multi_version: + # Can't install non-multi to non-site dir + raise DistutilsError(self.no_default_version_msg()) + + if is_site_dir: + if self.pth_file is None: + self.pth_file = PthDistributions(pth_file, self.all_site_dirs) + else: + self.pth_file = None + + if instdir not in map(normalize_path, _pythonpath()): + # only PYTHONPATH dirs need a site.py, so pretend it's there + self.sitepy_installed = True + elif self.multi_version and not os.path.exists(pth_file): + self.sitepy_installed = True # don't need site.py in this case + self.pth_file = None # and don't create a .pth file + self.install_dir = instdir + + __cant_write_msg = textwrap.dedent(""" + can't create or remove files in install directory + + The following error occurred while trying to add or remove files in the + installation directory: + + %s + + The installation directory you specified (via --install-dir, --prefix, or + the distutils default setting) was: + + %s + """).lstrip() + + __not_exists_id = textwrap.dedent(""" + This directory does not currently exist. Please create it and try again, or + choose a different installation directory (using the -d or --install-dir + option). + """).lstrip() + + __access_msg = textwrap.dedent(""" + Perhaps your account does not have write access to this directory? If the + installation directory is a system-owned directory, you may need to sign in + as the administrator or "root" account. If you do not have administrative + access to this machine, you may wish to choose a different installation + directory, preferably one that is listed in your PYTHONPATH environment + variable. + + For information on other options, you may wish to consult the + documentation at: + + https://setuptools.readthedocs.io/en/latest/easy_install.html + + Please make the appropriate changes for your system and try again. + """).lstrip() + + def cant_write_to_target(self): + msg = self.__cant_write_msg % (sys.exc_info()[1], self.install_dir,) + + if not os.path.exists(self.install_dir): + msg += '\n' + self.__not_exists_id + else: + msg += '\n' + self.__access_msg + raise DistutilsError(msg) + + def check_pth_processing(self): + """Empirically verify whether .pth files are supported in inst. dir""" + instdir = self.install_dir + log.info("Checking .pth file support in %s", instdir) + pth_file = self.pseudo_tempname() + ".pth" + ok_file = pth_file + '.ok' + ok_exists = os.path.exists(ok_file) + tmpl = _one_liner(""" + import os + f = open({ok_file!r}, 'w') + f.write('OK') + f.close() + """) + '\n' + try: + if ok_exists: + os.unlink(ok_file) + dirname = os.path.dirname(ok_file) + pkg_resources.py31compat.makedirs(dirname, exist_ok=True) + f = open(pth_file, 'w') + except (OSError, IOError): + self.cant_write_to_target() + else: + try: + f.write(tmpl.format(**locals())) + f.close() + f = None + executable = sys.executable + if os.name == 'nt': + dirname, basename = os.path.split(executable) + alt = os.path.join(dirname, 'pythonw.exe') + use_alt = ( + basename.lower() == 'python.exe' and + os.path.exists(alt) + ) + if use_alt: + # use pythonw.exe to avoid opening a console window + executable = alt + + from distutils.spawn import spawn + + spawn([executable, '-E', '-c', 'pass'], 0) + + if os.path.exists(ok_file): + log.info( + "TEST PASSED: %s appears to support .pth files", + instdir + ) + return True + finally: + if f: + f.close() + if os.path.exists(ok_file): + os.unlink(ok_file) + if os.path.exists(pth_file): + os.unlink(pth_file) + if not self.multi_version: + log.warn("TEST FAILED: %s does NOT support .pth files", instdir) + return False + + def install_egg_scripts(self, dist): + """Write all the scripts for `dist`, unless scripts are excluded""" + if not self.exclude_scripts and dist.metadata_isdir('scripts'): + for script_name in dist.metadata_listdir('scripts'): + if dist.metadata_isdir('scripts/' + script_name): + # The "script" is a directory, likely a Python 3 + # __pycache__ directory, so skip it. + continue + self.install_script( + dist, script_name, + dist.get_metadata('scripts/' + script_name) + ) + self.install_wrapper_scripts(dist) + + def add_output(self, path): + if os.path.isdir(path): + for base, dirs, files in os.walk(path): + for filename in files: + self.outputs.append(os.path.join(base, filename)) + else: + self.outputs.append(path) + + def not_editable(self, spec): + if self.editable: + raise DistutilsArgError( + "Invalid argument %r: you can't use filenames or URLs " + "with --editable (except via the --find-links option)." + % (spec,) + ) + + def check_editable(self, spec): + if not self.editable: + return + + if os.path.exists(os.path.join(self.build_directory, spec.key)): + raise DistutilsArgError( + "%r already exists in %s; can't do a checkout there" % + (spec.key, self.build_directory) + ) + + @contextlib.contextmanager + def _tmpdir(self): + tmpdir = tempfile.mkdtemp(prefix=six.u("easy_install-")) + try: + # cast to str as workaround for #709 and #710 and #712 + yield str(tmpdir) + finally: + os.path.exists(tmpdir) and rmtree(rmtree_safe(tmpdir)) + + def easy_install(self, spec, deps=False): + if not self.editable: + self.install_site_py() + + with self._tmpdir() as tmpdir: + if not isinstance(spec, Requirement): + if URL_SCHEME(spec): + # It's a url, download it to tmpdir and process + self.not_editable(spec) + dl = self.package_index.download(spec, tmpdir) + return self.install_item(None, dl, tmpdir, deps, True) + + elif os.path.exists(spec): + # Existing file or directory, just process it directly + self.not_editable(spec) + return self.install_item(None, spec, tmpdir, deps, True) + else: + spec = parse_requirement_arg(spec) + + self.check_editable(spec) + dist = self.package_index.fetch_distribution( + spec, tmpdir, self.upgrade, self.editable, + not self.always_copy, self.local_index + ) + if dist is None: + msg = "Could not find suitable distribution for %r" % spec + if self.always_copy: + msg += " (--always-copy skips system and development eggs)" + raise DistutilsError(msg) + elif dist.precedence == DEVELOP_DIST: + # .egg-info dists don't need installing, just process deps + self.process_distribution(spec, dist, deps, "Using") + return dist + else: + return self.install_item(spec, dist.location, tmpdir, deps) + + def install_item(self, spec, download, tmpdir, deps, install_needed=False): + + # Installation is also needed if file in tmpdir or is not an egg + install_needed = install_needed or self.always_copy + install_needed = install_needed or os.path.dirname(download) == tmpdir + install_needed = install_needed or not download.endswith('.egg') + install_needed = install_needed or ( + self.always_copy_from is not None and + os.path.dirname(normalize_path(download)) == + normalize_path(self.always_copy_from) + ) + + if spec and not install_needed: + # at this point, we know it's a local .egg, we just don't know if + # it's already installed. + for dist in self.local_index[spec.project_name]: + if dist.location == download: + break + else: + install_needed = True # it's not in the local index + + log.info("Processing %s", os.path.basename(download)) + + if install_needed: + dists = self.install_eggs(spec, download, tmpdir) + for dist in dists: + self.process_distribution(spec, dist, deps) + else: + dists = [self.egg_distribution(download)] + self.process_distribution(spec, dists[0], deps, "Using") + + if spec is not None: + for dist in dists: + if dist in spec: + return dist + + def select_scheme(self, name): + """Sets the install directories by applying the install schemes.""" + # it's the caller's problem if they supply a bad name! + scheme = INSTALL_SCHEMES[name] + for key in SCHEME_KEYS: + attrname = 'install_' + key + if getattr(self, attrname) is None: + setattr(self, attrname, scheme[key]) + + def process_distribution(self, requirement, dist, deps=True, *info): + self.update_pth(dist) + self.package_index.add(dist) + if dist in self.local_index[dist.key]: + self.local_index.remove(dist) + self.local_index.add(dist) + self.install_egg_scripts(dist) + self.installed_projects[dist.key] = dist + log.info(self.installation_report(requirement, dist, *info)) + if (dist.has_metadata('dependency_links.txt') and + not self.no_find_links): + self.package_index.add_find_links( + dist.get_metadata_lines('dependency_links.txt') + ) + if not deps and not self.always_copy: + return + elif requirement is not None and dist.key != requirement.key: + log.warn("Skipping dependencies for %s", dist) + return # XXX this is not the distribution we were looking for + elif requirement is None or dist not in requirement: + # if we wound up with a different version, resolve what we've got + distreq = dist.as_requirement() + requirement = Requirement(str(distreq)) + log.info("Processing dependencies for %s", requirement) + try: + distros = WorkingSet([]).resolve( + [requirement], self.local_index, self.easy_install + ) + except DistributionNotFound as e: + raise DistutilsError(str(e)) + except VersionConflict as e: + raise DistutilsError(e.report()) + if self.always_copy or self.always_copy_from: + # Force all the relevant distros to be copied or activated + for dist in distros: + if dist.key not in self.installed_projects: + self.easy_install(dist.as_requirement()) + log.info("Finished processing dependencies for %s", requirement) + + def should_unzip(self, dist): + if self.zip_ok is not None: + return not self.zip_ok + if dist.has_metadata('not-zip-safe'): + return True + if not dist.has_metadata('zip-safe'): + return True + return False + + def maybe_move(self, spec, dist_filename, setup_base): + dst = os.path.join(self.build_directory, spec.key) + if os.path.exists(dst): + msg = ( + "%r already exists in %s; build directory %s will not be kept" + ) + log.warn(msg, spec.key, self.build_directory, setup_base) + return setup_base + if os.path.isdir(dist_filename): + setup_base = dist_filename + else: + if os.path.dirname(dist_filename) == setup_base: + os.unlink(dist_filename) # get it out of the tmp dir + contents = os.listdir(setup_base) + if len(contents) == 1: + dist_filename = os.path.join(setup_base, contents[0]) + if os.path.isdir(dist_filename): + # if the only thing there is a directory, move it instead + setup_base = dist_filename + ensure_directory(dst) + shutil.move(setup_base, dst) + return dst + + def install_wrapper_scripts(self, dist): + if self.exclude_scripts: + return + for args in ScriptWriter.best().get_args(dist): + self.write_script(*args) + + def install_script(self, dist, script_name, script_text, dev_path=None): + """Generate a legacy script wrapper and install it""" + spec = str(dist.as_requirement()) + is_script = is_python_script(script_text, script_name) + + if is_script: + body = self._load_template(dev_path) % locals() + script_text = ScriptWriter.get_header(script_text) + body + self.write_script(script_name, _to_ascii(script_text), 'b') + + @staticmethod + def _load_template(dev_path): + """ + There are a couple of template scripts in the package. This + function loads one of them and prepares it for use. + """ + # See https://github.com/pypa/setuptools/issues/134 for info + # on script file naming and downstream issues with SVR4 + name = 'script.tmpl' + if dev_path: + name = name.replace('.tmpl', ' (dev).tmpl') + + raw_bytes = resource_string('setuptools', name) + return raw_bytes.decode('utf-8') + + def write_script(self, script_name, contents, mode="t", blockers=()): + """Write an executable file to the scripts directory""" + self.delete_blockers( # clean up old .py/.pyw w/o a script + [os.path.join(self.script_dir, x) for x in blockers] + ) + log.info("Installing %s script to %s", script_name, self.script_dir) + target = os.path.join(self.script_dir, script_name) + self.add_output(target) + + if self.dry_run: + return + + mask = current_umask() + ensure_directory(target) + if os.path.exists(target): + os.unlink(target) + with open(target, "w" + mode) as f: + f.write(contents) + chmod(target, 0o777 - mask) + + def install_eggs(self, spec, dist_filename, tmpdir): + # .egg dirs or files are already built, so just return them + if dist_filename.lower().endswith('.egg'): + return [self.install_egg(dist_filename, tmpdir)] + elif dist_filename.lower().endswith('.exe'): + return [self.install_exe(dist_filename, tmpdir)] + elif dist_filename.lower().endswith('.whl'): + return [self.install_wheel(dist_filename, tmpdir)] + + # Anything else, try to extract and build + setup_base = tmpdir + if os.path.isfile(dist_filename) and not dist_filename.endswith('.py'): + unpack_archive(dist_filename, tmpdir, self.unpack_progress) + elif os.path.isdir(dist_filename): + setup_base = os.path.abspath(dist_filename) + + if (setup_base.startswith(tmpdir) # something we downloaded + and self.build_directory and spec is not None): + setup_base = self.maybe_move(spec, dist_filename, setup_base) + + # Find the setup.py file + setup_script = os.path.join(setup_base, 'setup.py') + + if not os.path.exists(setup_script): + setups = glob(os.path.join(setup_base, '*', 'setup.py')) + if not setups: + raise DistutilsError( + "Couldn't find a setup script in %s" % + os.path.abspath(dist_filename) + ) + if len(setups) > 1: + raise DistutilsError( + "Multiple setup scripts in %s" % + os.path.abspath(dist_filename) + ) + setup_script = setups[0] + + # Now run it, and return the result + if self.editable: + log.info(self.report_editable(spec, setup_script)) + return [] + else: + return self.build_and_install(setup_script, setup_base) + + def egg_distribution(self, egg_path): + if os.path.isdir(egg_path): + metadata = PathMetadata(egg_path, os.path.join(egg_path, + 'EGG-INFO')) + else: + metadata = EggMetadata(zipimport.zipimporter(egg_path)) + return Distribution.from_filename(egg_path, metadata=metadata) + + def install_egg(self, egg_path, tmpdir): + destination = os.path.join( + self.install_dir, + os.path.basename(egg_path), + ) + destination = os.path.abspath(destination) + if not self.dry_run: + ensure_directory(destination) + + dist = self.egg_distribution(egg_path) + if not samefile(egg_path, destination): + if os.path.isdir(destination) and not os.path.islink(destination): + dir_util.remove_tree(destination, dry_run=self.dry_run) + elif os.path.exists(destination): + self.execute( + os.unlink, + (destination,), + "Removing " + destination, + ) + try: + new_dist_is_zipped = False + if os.path.isdir(egg_path): + if egg_path.startswith(tmpdir): + f, m = shutil.move, "Moving" + else: + f, m = shutil.copytree, "Copying" + elif self.should_unzip(dist): + self.mkpath(destination) + f, m = self.unpack_and_compile, "Extracting" + else: + new_dist_is_zipped = True + if egg_path.startswith(tmpdir): + f, m = shutil.move, "Moving" + else: + f, m = shutil.copy2, "Copying" + self.execute( + f, + (egg_path, destination), + (m + " %s to %s") % ( + os.path.basename(egg_path), + os.path.dirname(destination) + ), + ) + update_dist_caches( + destination, + fix_zipimporter_caches=new_dist_is_zipped, + ) + except Exception: + update_dist_caches(destination, fix_zipimporter_caches=False) + raise + + self.add_output(destination) + return self.egg_distribution(destination) + + def install_exe(self, dist_filename, tmpdir): + # See if it's valid, get data + cfg = extract_wininst_cfg(dist_filename) + if cfg is None: + raise DistutilsError( + "%s is not a valid distutils Windows .exe" % dist_filename + ) + # Create a dummy distribution object until we build the real distro + dist = Distribution( + None, + project_name=cfg.get('metadata', 'name'), + version=cfg.get('metadata', 'version'), platform=get_platform(), + ) + + # Convert the .exe to an unpacked egg + egg_path = os.path.join(tmpdir, dist.egg_name() + '.egg') + dist.location = egg_path + egg_tmp = egg_path + '.tmp' + _egg_info = os.path.join(egg_tmp, 'EGG-INFO') + pkg_inf = os.path.join(_egg_info, 'PKG-INFO') + ensure_directory(pkg_inf) # make sure EGG-INFO dir exists + dist._provider = PathMetadata(egg_tmp, _egg_info) # XXX + self.exe_to_egg(dist_filename, egg_tmp) + + # Write EGG-INFO/PKG-INFO + if not os.path.exists(pkg_inf): + f = open(pkg_inf, 'w') + f.write('Metadata-Version: 1.0\n') + for k, v in cfg.items('metadata'): + if k != 'target_version': + f.write('%s: %s\n' % (k.replace('_', '-').title(), v)) + f.close() + script_dir = os.path.join(_egg_info, 'scripts') + # delete entry-point scripts to avoid duping + self.delete_blockers([ + os.path.join(script_dir, args[0]) + for args in ScriptWriter.get_args(dist) + ]) + # Build .egg file from tmpdir + bdist_egg.make_zipfile( + egg_path, egg_tmp, verbose=self.verbose, dry_run=self.dry_run, + ) + # install the .egg + return self.install_egg(egg_path, tmpdir) + + def exe_to_egg(self, dist_filename, egg_tmp): + """Extract a bdist_wininst to the directories an egg would use""" + # Check for .pth file and set up prefix translations + prefixes = get_exe_prefixes(dist_filename) + to_compile = [] + native_libs = [] + top_level = {} + + def process(src, dst): + s = src.lower() + for old, new in prefixes: + if s.startswith(old): + src = new + src[len(old):] + parts = src.split('/') + dst = os.path.join(egg_tmp, *parts) + dl = dst.lower() + if dl.endswith('.pyd') or dl.endswith('.dll'): + parts[-1] = bdist_egg.strip_module(parts[-1]) + top_level[os.path.splitext(parts[0])[0]] = 1 + native_libs.append(src) + elif dl.endswith('.py') and old != 'SCRIPTS/': + top_level[os.path.splitext(parts[0])[0]] = 1 + to_compile.append(dst) + return dst + if not src.endswith('.pth'): + log.warn("WARNING: can't process %s", src) + return None + + # extract, tracking .pyd/.dll->native_libs and .py -> to_compile + unpack_archive(dist_filename, egg_tmp, process) + stubs = [] + for res in native_libs: + if res.lower().endswith('.pyd'): # create stubs for .pyd's + parts = res.split('/') + resource = parts[-1] + parts[-1] = bdist_egg.strip_module(parts[-1]) + '.py' + pyfile = os.path.join(egg_tmp, *parts) + to_compile.append(pyfile) + stubs.append(pyfile) + bdist_egg.write_stub(resource, pyfile) + self.byte_compile(to_compile) # compile .py's + bdist_egg.write_safety_flag( + os.path.join(egg_tmp, 'EGG-INFO'), + bdist_egg.analyze_egg(egg_tmp, stubs)) # write zip-safety flag + + for name in 'top_level', 'native_libs': + if locals()[name]: + txt = os.path.join(egg_tmp, 'EGG-INFO', name + '.txt') + if not os.path.exists(txt): + f = open(txt, 'w') + f.write('\n'.join(locals()[name]) + '\n') + f.close() + + def install_wheel(self, wheel_path, tmpdir): + wheel = Wheel(wheel_path) + assert wheel.is_compatible() + destination = os.path.join(self.install_dir, wheel.egg_name()) + destination = os.path.abspath(destination) + if not self.dry_run: + ensure_directory(destination) + if os.path.isdir(destination) and not os.path.islink(destination): + dir_util.remove_tree(destination, dry_run=self.dry_run) + elif os.path.exists(destination): + self.execute( + os.unlink, + (destination,), + "Removing " + destination, + ) + try: + self.execute( + wheel.install_as_egg, + (destination,), + ("Installing %s to %s") % ( + os.path.basename(wheel_path), + os.path.dirname(destination) + ), + ) + finally: + update_dist_caches(destination, fix_zipimporter_caches=False) + self.add_output(destination) + return self.egg_distribution(destination) + + __mv_warning = textwrap.dedent(""" + Because this distribution was installed --multi-version, before you can + import modules from this package in an application, you will need to + 'import pkg_resources' and then use a 'require()' call similar to one of + these examples, in order to select the desired version: + + pkg_resources.require("%(name)s") # latest installed version + pkg_resources.require("%(name)s==%(version)s") # this exact version + pkg_resources.require("%(name)s>=%(version)s") # this version or higher + """).lstrip() + + __id_warning = textwrap.dedent(""" + Note also that the installation directory must be on sys.path at runtime for + this to work. (e.g. by being the application's script directory, by being on + PYTHONPATH, or by being added to sys.path by your code.) + """) + + def installation_report(self, req, dist, what="Installed"): + """Helpful installation message for display to package users""" + msg = "\n%(what)s %(eggloc)s%(extras)s" + if self.multi_version and not self.no_report: + msg += '\n' + self.__mv_warning + if self.install_dir not in map(normalize_path, sys.path): + msg += '\n' + self.__id_warning + + eggloc = dist.location + name = dist.project_name + version = dist.version + extras = '' # TODO: self.report_extras(req, dist) + return msg % locals() + + __editable_msg = textwrap.dedent(""" + Extracted editable version of %(spec)s to %(dirname)s + + If it uses setuptools in its setup script, you can activate it in + "development" mode by going to that directory and running:: + + %(python)s setup.py develop + + See the setuptools documentation for the "develop" command for more info. + """).lstrip() + + def report_editable(self, spec, setup_script): + dirname = os.path.dirname(setup_script) + python = sys.executable + return '\n' + self.__editable_msg % locals() + + def run_setup(self, setup_script, setup_base, args): + sys.modules.setdefault('distutils.command.bdist_egg', bdist_egg) + sys.modules.setdefault('distutils.command.egg_info', egg_info) + + args = list(args) + if self.verbose > 2: + v = 'v' * (self.verbose - 1) + args.insert(0, '-' + v) + elif self.verbose < 2: + args.insert(0, '-q') + if self.dry_run: + args.insert(0, '-n') + log.info( + "Running %s %s", setup_script[len(setup_base) + 1:], ' '.join(args) + ) + try: + run_setup(setup_script, args) + except SystemExit as v: + raise DistutilsError("Setup script exited with %s" % (v.args[0],)) + + def build_and_install(self, setup_script, setup_base): + args = ['bdist_egg', '--dist-dir'] + + dist_dir = tempfile.mkdtemp( + prefix='egg-dist-tmp-', dir=os.path.dirname(setup_script) + ) + try: + self._set_fetcher_options(os.path.dirname(setup_script)) + args.append(dist_dir) + + self.run_setup(setup_script, setup_base, args) + all_eggs = Environment([dist_dir]) + eggs = [] + for key in all_eggs: + for dist in all_eggs[key]: + eggs.append(self.install_egg(dist.location, setup_base)) + if not eggs and not self.dry_run: + log.warn("No eggs found in %s (setup script problem?)", + dist_dir) + return eggs + finally: + rmtree(dist_dir) + log.set_verbosity(self.verbose) # restore our log verbosity + + def _set_fetcher_options(self, base): + """ + When easy_install is about to run bdist_egg on a source dist, that + source dist might have 'setup_requires' directives, requiring + additional fetching. Ensure the fetcher options given to easy_install + are available to that command as well. + """ + # find the fetch options from easy_install and write them out + # to the setup.cfg file. + ei_opts = self.distribution.get_option_dict('easy_install').copy() + fetch_directives = ( + 'find_links', 'site_dirs', 'index_url', 'optimize', + 'site_dirs', 'allow_hosts', + ) + fetch_options = {} + for key, val in ei_opts.items(): + if key not in fetch_directives: + continue + fetch_options[key.replace('_', '-')] = val[1] + # create a settings dictionary suitable for `edit_config` + settings = dict(easy_install=fetch_options) + cfg_filename = os.path.join(base, 'setup.cfg') + setopt.edit_config(cfg_filename, settings) + + def update_pth(self, dist): + if self.pth_file is None: + return + + for d in self.pth_file[dist.key]: # drop old entries + if self.multi_version or d.location != dist.location: + log.info("Removing %s from easy-install.pth file", d) + self.pth_file.remove(d) + if d.location in self.shadow_path: + self.shadow_path.remove(d.location) + + if not self.multi_version: + if dist.location in self.pth_file.paths: + log.info( + "%s is already the active version in easy-install.pth", + dist, + ) + else: + log.info("Adding %s to easy-install.pth file", dist) + self.pth_file.add(dist) # add new entry + if dist.location not in self.shadow_path: + self.shadow_path.append(dist.location) + + if not self.dry_run: + + self.pth_file.save() + + if dist.key == 'setuptools': + # Ensure that setuptools itself never becomes unavailable! + # XXX should this check for latest version? + filename = os.path.join(self.install_dir, 'setuptools.pth') + if os.path.islink(filename): + os.unlink(filename) + f = open(filename, 'wt') + f.write(self.pth_file.make_relative(dist.location) + '\n') + f.close() + + def unpack_progress(self, src, dst): + # Progress filter for unpacking + log.debug("Unpacking %s to %s", src, dst) + return dst # only unpack-and-compile skips files for dry run + + def unpack_and_compile(self, egg_path, destination): + to_compile = [] + to_chmod = [] + + def pf(src, dst): + if dst.endswith('.py') and not src.startswith('EGG-INFO/'): + to_compile.append(dst) + elif dst.endswith('.dll') or dst.endswith('.so'): + to_chmod.append(dst) + self.unpack_progress(src, dst) + return not self.dry_run and dst or None + + unpack_archive(egg_path, destination, pf) + self.byte_compile(to_compile) + if not self.dry_run: + for f in to_chmod: + mode = ((os.stat(f)[stat.ST_MODE]) | 0o555) & 0o7755 + chmod(f, mode) + + def byte_compile(self, to_compile): + if sys.dont_write_bytecode: + return + + from distutils.util import byte_compile + + try: + # try to make the byte compile messages quieter + log.set_verbosity(self.verbose - 1) + + byte_compile(to_compile, optimize=0, force=1, dry_run=self.dry_run) + if self.optimize: + byte_compile( + to_compile, optimize=self.optimize, force=1, + dry_run=self.dry_run, + ) + finally: + log.set_verbosity(self.verbose) # restore original verbosity + + __no_default_msg = textwrap.dedent(""" + bad install directory or PYTHONPATH + + You are attempting to install a package to a directory that is not + on PYTHONPATH and which Python does not read ".pth" files from. The + installation directory you specified (via --install-dir, --prefix, or + the distutils default setting) was: + + %s + + and your PYTHONPATH environment variable currently contains: + + %r + + Here are some of your options for correcting the problem: + + * You can choose a different installation directory, i.e., one that is + on PYTHONPATH or supports .pth files + + * You can add the installation directory to the PYTHONPATH environment + variable. (It must then also be on PYTHONPATH whenever you run + Python and want to use the package(s) you are installing.) + + * You can set up the installation directory to support ".pth" files by + using one of the approaches described here: + + https://setuptools.readthedocs.io/en/latest/easy_install.html#custom-installation-locations + + + Please make the appropriate changes for your system and try again.""").lstrip() + + def no_default_version_msg(self): + template = self.__no_default_msg + return template % (self.install_dir, os.environ.get('PYTHONPATH', '')) + + def install_site_py(self): + """Make sure there's a site.py in the target dir, if needed""" + + if self.sitepy_installed: + return # already did it, or don't need to + + sitepy = os.path.join(self.install_dir, "site.py") + source = resource_string("setuptools", "site-patch.py") + source = source.decode('utf-8') + current = "" + + if os.path.exists(sitepy): + log.debug("Checking existing site.py in %s", self.install_dir) + with io.open(sitepy) as strm: + current = strm.read() + + if not current.startswith('def __boot():'): + raise DistutilsError( + "%s is not a setuptools-generated site.py; please" + " remove it." % sitepy + ) + + if current != source: + log.info("Creating %s", sitepy) + if not self.dry_run: + ensure_directory(sitepy) + with io.open(sitepy, 'w', encoding='utf-8') as strm: + strm.write(source) + self.byte_compile([sitepy]) + + self.sitepy_installed = True + + def create_home_path(self): + """Create directories under ~.""" + if not self.user: + return + home = convert_path(os.path.expanduser("~")) + for name, path in six.iteritems(self.config_vars): + if path.startswith(home) and not os.path.isdir(path): + self.debug_print("os.makedirs('%s', 0o700)" % path) + os.makedirs(path, 0o700) + + if sys.version[:3] in ('2.3', '2.4', '2.5') or 'real_prefix' in sys.__dict__: + sitedir_name = 'site-packages' + else: + sitedir_name = 'dist-packages' + + INSTALL_SCHEMES = dict( + posix=dict( + install_dir='$base/lib/python$py_version_short/site-packages', + script_dir='$base/bin', + ), + unix_local = dict( + install_dir = '$base/local/lib/python$py_version_short/%s' % sitedir_name, + script_dir = '$base/local/bin', + ), + posix_local = dict( + install_dir = '$base/local/lib/python$py_version_short/%s' % sitedir_name, + script_dir = '$base/local/bin', + ), + deb_system = dict( + install_dir = '$base/lib/python3/%s' % sitedir_name, + script_dir = '$base/bin', + ), + ) + + DEFAULT_SCHEME = dict( + install_dir='$base/Lib/site-packages', + script_dir='$base/Scripts', + ) + + def _expand(self, *attrs): + config_vars = self.get_finalized_command('install').config_vars + + if self.prefix or self.install_layout: + if self.install_layout and self.install_layout in ['deb']: + scheme_name = "deb_system" + self.prefix = '/usr' + elif self.prefix or 'real_prefix' in sys.__dict__: + scheme_name = os.name + else: + scheme_name = "posix_local" + # Set default install_dir/scripts from --prefix + config_vars = config_vars.copy() + config_vars['base'] = self.prefix + scheme = self.INSTALL_SCHEMES.get(scheme_name,self.DEFAULT_SCHEME) + for attr, val in scheme.items(): + if getattr(self, attr, None) is None: + setattr(self, attr, val) + + from distutils.util import subst_vars + + for attr in attrs: + val = getattr(self, attr) + if val is not None: + val = subst_vars(val, config_vars) + if os.name == 'posix': + val = os.path.expanduser(val) + setattr(self, attr, val) + + +def _pythonpath(): + items = os.environ.get('PYTHONPATH', '').split(os.pathsep) + return filter(None, items) + + +def get_site_dirs(): + """ + Return a list of 'site' dirs + """ + + sitedirs = [] + + # start with PYTHONPATH + sitedirs.extend(_pythonpath()) + + prefixes = [sys.prefix] + if sys.exec_prefix != sys.prefix: + prefixes.append(sys.exec_prefix) + for prefix in prefixes: + if prefix: + if sys.platform in ('os2emx', 'riscos'): + sitedirs.append(os.path.join(prefix, "Lib", "site-packages")) + elif os.sep == '/': + sitedirs.extend([ + os.path.join( + prefix, + "local/lib", + "python" + sys.version[:3], + "dist-packages", + ), + os.path.join( + prefix, + "lib", + "python" + sys.version[:3], + "dist-packages", + ), + os.path.join(prefix, "lib", "site-python"), + ]) + else: + sitedirs.extend([ + prefix, + os.path.join(prefix, "lib", "site-packages"), + ]) + if sys.platform == 'darwin': + # for framework builds *only* we add the standard Apple + # locations. Currently only per-user, but /Library and + # /Network/Library could be added too + if 'Python.framework' in prefix: + home = os.environ.get('HOME') + if home: + home_sp = os.path.join( + home, + 'Library', + 'Python', + sys.version[:3], + 'site-packages', + ) + sitedirs.append(home_sp) + lib_paths = get_path('purelib'), get_path('platlib') + for site_lib in lib_paths: + if site_lib not in sitedirs: + sitedirs.append(site_lib) + + if site.ENABLE_USER_SITE: + sitedirs.append(site.USER_SITE) + + try: + sitedirs.extend(site.getsitepackages()) + except AttributeError: + pass + + sitedirs = list(map(normalize_path, sitedirs)) + + return sitedirs + + +def expand_paths(inputs): + """Yield sys.path directories that might contain "old-style" packages""" + + seen = {} + + for dirname in inputs: + dirname = normalize_path(dirname) + if dirname in seen: + continue + + seen[dirname] = 1 + if not os.path.isdir(dirname): + continue + + files = os.listdir(dirname) + yield dirname, files + + for name in files: + if not name.endswith('.pth'): + # We only care about the .pth files + continue + if name in ('easy-install.pth', 'setuptools.pth'): + # Ignore .pth files that we control + continue + + # Read the .pth file + f = open(os.path.join(dirname, name)) + lines = list(yield_lines(f)) + f.close() + + # Yield existing non-dupe, non-import directory lines from it + for line in lines: + if not line.startswith("import"): + line = normalize_path(line.rstrip()) + if line not in seen: + seen[line] = 1 + if not os.path.isdir(line): + continue + yield line, os.listdir(line) + + +def extract_wininst_cfg(dist_filename): + """Extract configuration data from a bdist_wininst .exe + + Returns a configparser.RawConfigParser, or None + """ + f = open(dist_filename, 'rb') + try: + endrec = zipfile._EndRecData(f) + if endrec is None: + return None + + prepended = (endrec[9] - endrec[5]) - endrec[6] + if prepended < 12: # no wininst data here + return None + f.seek(prepended - 12) + + tag, cfglen, bmlen = struct.unpack("<iii", f.read(12)) + if tag not in (0x1234567A, 0x1234567B): + return None # not a valid tag + + f.seek(prepended - (12 + cfglen)) + init = {'version': '', 'target_version': ''} + cfg = configparser.RawConfigParser(init) + try: + part = f.read(cfglen) + # Read up to the first null byte. + config = part.split(b'\0', 1)[0] + # Now the config is in bytes, but for RawConfigParser, it should + # be text, so decode it. + config = config.decode(sys.getfilesystemencoding()) + cfg.readfp(six.StringIO(config)) + except configparser.Error: + return None + if not cfg.has_section('metadata') or not cfg.has_section('Setup'): + return None + return cfg + + finally: + f.close() + + +def get_exe_prefixes(exe_filename): + """Get exe->egg path translations for a given .exe file""" + + prefixes = [ + ('PURELIB/', ''), + ('PLATLIB/pywin32_system32', ''), + ('PLATLIB/', ''), + ('SCRIPTS/', 'EGG-INFO/scripts/'), + ('DATA/lib/site-packages', ''), + ] + z = zipfile.ZipFile(exe_filename) + try: + for info in z.infolist(): + name = info.filename + parts = name.split('/') + if len(parts) == 3 and parts[2] == 'PKG-INFO': + if parts[1].endswith('.egg-info'): + prefixes.insert(0, ('/'.join(parts[:2]), 'EGG-INFO/')) + break + if len(parts) != 2 or not name.endswith('.pth'): + continue + if name.endswith('-nspkg.pth'): + continue + if parts[0].upper() in ('PURELIB', 'PLATLIB'): + contents = z.read(name) + if six.PY3: + contents = contents.decode() + for pth in yield_lines(contents): + pth = pth.strip().replace('\\', '/') + if not pth.startswith('import'): + prefixes.append((('%s/%s/' % (parts[0], pth)), '')) + finally: + z.close() + prefixes = [(x.lower(), y) for x, y in prefixes] + prefixes.sort() + prefixes.reverse() + return prefixes + + +class PthDistributions(Environment): + """A .pth file with Distribution paths in it""" + + dirty = False + + def __init__(self, filename, sitedirs=()): + self.filename = filename + self.sitedirs = list(map(normalize_path, sitedirs)) + self.basedir = normalize_path(os.path.dirname(self.filename)) + self._load() + Environment.__init__(self, [], None, None) + for path in yield_lines(self.paths): + list(map(self.add, find_distributions(path, True))) + + def _load(self): + self.paths = [] + saw_import = False + seen = dict.fromkeys(self.sitedirs) + if os.path.isfile(self.filename): + f = open(self.filename, 'rt') + for line in f: + if line.startswith('import'): + saw_import = True + continue + path = line.rstrip() + self.paths.append(path) + if not path.strip() or path.strip().startswith('#'): + continue + # skip non-existent paths, in case somebody deleted a package + # manually, and duplicate paths as well + path = self.paths[-1] = normalize_path( + os.path.join(self.basedir, path) + ) + if not os.path.exists(path) or path in seen: + self.paths.pop() # skip it + self.dirty = True # we cleaned up, so we're dirty now :) + continue + seen[path] = 1 + f.close() + + if self.paths and not saw_import: + self.dirty = True # ensure anything we touch has import wrappers + while self.paths and not self.paths[-1].strip(): + self.paths.pop() + + def save(self): + """Write changed .pth file back to disk""" + if not self.dirty: + return + + rel_paths = list(map(self.make_relative, self.paths)) + if rel_paths: + log.debug("Saving %s", self.filename) + lines = self._wrap_lines(rel_paths) + data = '\n'.join(lines) + '\n' + + if os.path.islink(self.filename): + os.unlink(self.filename) + with open(self.filename, 'wt') as f: + f.write(data) + + elif os.path.exists(self.filename): + log.debug("Deleting empty %s", self.filename) + os.unlink(self.filename) + + self.dirty = False + + @staticmethod + def _wrap_lines(lines): + return lines + + def add(self, dist): + """Add `dist` to the distribution map""" + new_path = ( + dist.location not in self.paths and ( + dist.location not in self.sitedirs or + # account for '.' being in PYTHONPATH + dist.location == os.getcwd() + ) + ) + if new_path: + self.paths.append(dist.location) + self.dirty = True + Environment.add(self, dist) + + def remove(self, dist): + """Remove `dist` from the distribution map""" + while dist.location in self.paths: + self.paths.remove(dist.location) + self.dirty = True + Environment.remove(self, dist) + + def make_relative(self, path): + npath, last = os.path.split(normalize_path(path)) + baselen = len(self.basedir) + parts = [last] + sep = os.altsep == '/' and '/' or os.sep + while len(npath) >= baselen: + if npath == self.basedir: + parts.append(os.curdir) + parts.reverse() + return sep.join(parts) + npath, last = os.path.split(npath) + parts.append(last) + else: + return path + + +class RewritePthDistributions(PthDistributions): + @classmethod + def _wrap_lines(cls, lines): + yield cls.prelude + for line in lines: + yield line + yield cls.postlude + + prelude = _one_liner(""" + import sys + sys.__plen = len(sys.path) + """) + postlude = _one_liner(""" + import sys + new = sys.path[sys.__plen:] + del sys.path[sys.__plen:] + p = getattr(sys, '__egginsert', 0) + sys.path[p:p] = new + sys.__egginsert = p + len(new) + """) + + +if os.environ.get('SETUPTOOLS_SYS_PATH_TECHNIQUE', 'raw') == 'rewrite': + PthDistributions = RewritePthDistributions + + +def _first_line_re(): + """ + Return a regular expression based on first_line_re suitable for matching + strings. + """ + if isinstance(first_line_re.pattern, str): + return first_line_re + + # first_line_re in Python >=3.1.4 and >=3.2.1 is a bytes pattern. + return re.compile(first_line_re.pattern.decode()) + + +def auto_chmod(func, arg, exc): + if func in [os.unlink, os.remove] and os.name == 'nt': + chmod(arg, stat.S_IWRITE) + return func(arg) + et, ev, _ = sys.exc_info() + six.reraise(et, (ev[0], ev[1] + (" %s %s" % (func, arg)))) + + +def update_dist_caches(dist_path, fix_zipimporter_caches): + """ + Fix any globally cached `dist_path` related data + + `dist_path` should be a path of a newly installed egg distribution (zipped + or unzipped). + + sys.path_importer_cache contains finder objects that have been cached when + importing data from the original distribution. Any such finders need to be + cleared since the replacement distribution might be packaged differently, + e.g. a zipped egg distribution might get replaced with an unzipped egg + folder or vice versa. Having the old finders cached may then cause Python + to attempt loading modules from the replacement distribution using an + incorrect loader. + + zipimport.zipimporter objects are Python loaders charged with importing + data packaged inside zip archives. If stale loaders referencing the + original distribution, are left behind, they can fail to load modules from + the replacement distribution. E.g. if an old zipimport.zipimporter instance + is used to load data from a new zipped egg archive, it may cause the + operation to attempt to locate the requested data in the wrong location - + one indicated by the original distribution's zip archive directory + information. Such an operation may then fail outright, e.g. report having + read a 'bad local file header', or even worse, it may fail silently & + return invalid data. + + zipimport._zip_directory_cache contains cached zip archive directory + information for all existing zipimport.zipimporter instances and all such + instances connected to the same archive share the same cached directory + information. + + If asked, and the underlying Python implementation allows it, we can fix + all existing zipimport.zipimporter instances instead of having to track + them down and remove them one by one, by updating their shared cached zip + archive directory information. This, of course, assumes that the + replacement distribution is packaged as a zipped egg. + + If not asked to fix existing zipimport.zipimporter instances, we still do + our best to clear any remaining zipimport.zipimporter related cached data + that might somehow later get used when attempting to load data from the new + distribution and thus cause such load operations to fail. Note that when + tracking down such remaining stale data, we can not catch every conceivable + usage from here, and we clear only those that we know of and have found to + cause problems if left alive. Any remaining caches should be updated by + whomever is in charge of maintaining them, i.e. they should be ready to + handle us replacing their zip archives with new distributions at runtime. + + """ + # There are several other known sources of stale zipimport.zipimporter + # instances that we do not clear here, but might if ever given a reason to + # do so: + # * Global setuptools pkg_resources.working_set (a.k.a. 'master working + # set') may contain distributions which may in turn contain their + # zipimport.zipimporter loaders. + # * Several zipimport.zipimporter loaders held by local variables further + # up the function call stack when running the setuptools installation. + # * Already loaded modules may have their __loader__ attribute set to the + # exact loader instance used when importing them. Python 3.4 docs state + # that this information is intended mostly for introspection and so is + # not expected to cause us problems. + normalized_path = normalize_path(dist_path) + _uncache(normalized_path, sys.path_importer_cache) + if fix_zipimporter_caches: + _replace_zip_directory_cache_data(normalized_path) + else: + # Here, even though we do not want to fix existing and now stale + # zipimporter cache information, we still want to remove it. Related to + # Python's zip archive directory information cache, we clear each of + # its stale entries in two phases: + # 1. Clear the entry so attempting to access zip archive information + # via any existing stale zipimport.zipimporter instances fails. + # 2. Remove the entry from the cache so any newly constructed + # zipimport.zipimporter instances do not end up using old stale + # zip archive directory information. + # This whole stale data removal step does not seem strictly necessary, + # but has been left in because it was done before we started replacing + # the zip archive directory information cache content if possible, and + # there are no relevant unit tests that we can depend on to tell us if + # this is really needed. + _remove_and_clear_zip_directory_cache_data(normalized_path) + + +def _collect_zipimporter_cache_entries(normalized_path, cache): + """ + Return zipimporter cache entry keys related to a given normalized path. + + Alternative path spellings (e.g. those using different character case or + those using alternative path separators) related to the same path are + included. Any sub-path entries are included as well, i.e. those + corresponding to zip archives embedded in other zip archives. + + """ + result = [] + prefix_len = len(normalized_path) + for p in cache: + np = normalize_path(p) + if (np.startswith(normalized_path) and + np[prefix_len:prefix_len + 1] in (os.sep, '')): + result.append(p) + return result + + +def _update_zipimporter_cache(normalized_path, cache, updater=None): + """ + Update zipimporter cache data for a given normalized path. + + Any sub-path entries are processed as well, i.e. those corresponding to zip + archives embedded in other zip archives. + + Given updater is a callable taking a cache entry key and the original entry + (after already removing the entry from the cache), and expected to update + the entry and possibly return a new one to be inserted in its place. + Returning None indicates that the entry should not be replaced with a new + one. If no updater is given, the cache entries are simply removed without + any additional processing, the same as if the updater simply returned None. + + """ + for p in _collect_zipimporter_cache_entries(normalized_path, cache): + # N.B. pypy's custom zipimport._zip_directory_cache implementation does + # not support the complete dict interface: + # * Does not support item assignment, thus not allowing this function + # to be used only for removing existing cache entries. + # * Does not support the dict.pop() method, forcing us to use the + # get/del patterns instead. For more detailed information see the + # following links: + # https://github.com/pypa/setuptools/issues/202#issuecomment-202913420 + # http://bit.ly/2h9itJX + old_entry = cache[p] + del cache[p] + new_entry = updater and updater(p, old_entry) + if new_entry is not None: + cache[p] = new_entry + + +def _uncache(normalized_path, cache): + _update_zipimporter_cache(normalized_path, cache) + + +def _remove_and_clear_zip_directory_cache_data(normalized_path): + def clear_and_remove_cached_zip_archive_directory_data(path, old_entry): + old_entry.clear() + + _update_zipimporter_cache( + normalized_path, zipimport._zip_directory_cache, + updater=clear_and_remove_cached_zip_archive_directory_data) + + +# PyPy Python implementation does not allow directly writing to the +# zipimport._zip_directory_cache and so prevents us from attempting to correct +# its content. The best we can do there is clear the problematic cache content +# and have PyPy repopulate it as needed. The downside is that if there are any +# stale zipimport.zipimporter instances laying around, attempting to use them +# will fail due to not having its zip archive directory information available +# instead of being automatically corrected to use the new correct zip archive +# directory information. +if '__pypy__' in sys.builtin_module_names: + _replace_zip_directory_cache_data = \ + _remove_and_clear_zip_directory_cache_data +else: + + def _replace_zip_directory_cache_data(normalized_path): + def replace_cached_zip_archive_directory_data(path, old_entry): + # N.B. In theory, we could load the zip directory information just + # once for all updated path spellings, and then copy it locally and + # update its contained path strings to contain the correct + # spelling, but that seems like a way too invasive move (this cache + # structure is not officially documented anywhere and could in + # theory change with new Python releases) for no significant + # benefit. + old_entry.clear() + zipimport.zipimporter(path) + old_entry.update(zipimport._zip_directory_cache[path]) + return old_entry + + _update_zipimporter_cache( + normalized_path, zipimport._zip_directory_cache, + updater=replace_cached_zip_archive_directory_data) + + +def is_python(text, filename='<string>'): + "Is this string a valid Python script?" + try: + compile(text, filename, 'exec') + except (SyntaxError, TypeError): + return False + else: + return True + + +def is_sh(executable): + """Determine if the specified executable is a .sh (contains a #! line)""" + try: + with io.open(executable, encoding='latin-1') as fp: + magic = fp.read(2) + except (OSError, IOError): + return executable + return magic == '#!' + + +def nt_quote_arg(arg): + """Quote a command line argument according to Windows parsing rules""" + return subprocess.list2cmdline([arg]) + + +def is_python_script(script_text, filename): + """Is this text, as a whole, a Python script? (as opposed to shell/bat/etc. + """ + if filename.endswith('.py') or filename.endswith('.pyw'): + return True # extension says it's Python + if is_python(script_text, filename): + return True # it's syntactically valid Python + if script_text.startswith('#!'): + # It begins with a '#!' line, so check if 'python' is in it somewhere + return 'python' in script_text.splitlines()[0].lower() + + return False # Not any Python I can recognize + + +try: + from os import chmod as _chmod +except ImportError: + # Jython compatibility + def _chmod(*args): + pass + + +def chmod(path, mode): + log.debug("changing mode of %s to %o", path, mode) + try: + _chmod(path, mode) + except os.error as e: + log.debug("chmod failed: %s", e) + + +class CommandSpec(list): + """ + A command spec for a #! header, specified as a list of arguments akin to + those passed to Popen. + """ + + options = [] + split_args = dict() + + @classmethod + def best(cls): + """ + Choose the best CommandSpec class based on environmental conditions. + """ + return cls + + @classmethod + def _sys_executable(cls): + _default = os.path.normpath(sys.executable) + return os.environ.get('__PYVENV_LAUNCHER__', _default) + + @classmethod + def from_param(cls, param): + """ + Construct a CommandSpec from a parameter to build_scripts, which may + be None. + """ + if isinstance(param, cls): + return param + if isinstance(param, list): + return cls(param) + if param is None: + return cls.from_environment() + # otherwise, assume it's a string. + return cls.from_string(param) + + @classmethod + def from_environment(cls): + return cls([cls._sys_executable()]) + + @classmethod + def from_string(cls, string): + """ + Construct a command spec from a simple string representing a command + line parseable by shlex.split. + """ + items = shlex.split(string, **cls.split_args) + return cls(items) + + def install_options(self, script_text): + self.options = shlex.split(self._extract_options(script_text)) + cmdline = subprocess.list2cmdline(self) + if not isascii(cmdline): + self.options[:0] = ['-x'] + + @staticmethod + def _extract_options(orig_script): + """ + Extract any options from the first line of the script. + """ + first = (orig_script + '\n').splitlines()[0] + match = _first_line_re().match(first) + options = match.group(1) or '' if match else '' + return options.strip() + + def as_header(self): + return self._render(self + list(self.options)) + + @staticmethod + def _strip_quotes(item): + _QUOTES = '"\'' + for q in _QUOTES: + if item.startswith(q) and item.endswith(q): + return item[1:-1] + return item + + @staticmethod + def _render(items): + cmdline = subprocess.list2cmdline( + CommandSpec._strip_quotes(item.strip()) for item in items) + return '#!' + cmdline + '\n' + + +# For pbr compat; will be removed in a future version. +sys_executable = CommandSpec._sys_executable() + + +class WindowsCommandSpec(CommandSpec): + split_args = dict(posix=False) + + +class ScriptWriter(object): + """ + Encapsulates behavior around writing entry point scripts for console and + gui apps. + """ + + template = textwrap.dedent(r""" + # EASY-INSTALL-ENTRY-SCRIPT: %(spec)r,%(group)r,%(name)r + __requires__ = %(spec)r + import re + import sys + from pkg_resources import load_entry_point + + if __name__ == '__main__': + sys.argv[0] = re.sub(r'(-script\.pyw?|\.exe)?$', '', sys.argv[0]) + sys.exit( + load_entry_point(%(spec)r, %(group)r, %(name)r)() + ) + """).lstrip() + + command_spec_class = CommandSpec + + @classmethod + def get_script_args(cls, dist, executable=None, wininst=False): + # for backward compatibility + warnings.warn("Use get_args", DeprecationWarning) + writer = (WindowsScriptWriter if wininst else ScriptWriter).best() + header = cls.get_script_header("", executable, wininst) + return writer.get_args(dist, header) + + @classmethod + def get_script_header(cls, script_text, executable=None, wininst=False): + # for backward compatibility + warnings.warn("Use get_header", DeprecationWarning) + if wininst: + executable = "python.exe" + cmd = cls.command_spec_class.best().from_param(executable) + cmd.install_options(script_text) + return cmd.as_header() + + @classmethod + def get_args(cls, dist, header=None): + """ + Yield write_script() argument tuples for a distribution's + console_scripts and gui_scripts entry points. + """ + if header is None: + header = cls.get_header() + spec = str(dist.as_requirement()) + for type_ in 'console', 'gui': + group = type_ + '_scripts' + for name, ep in dist.get_entry_map(group).items(): + cls._ensure_safe_name(name) + script_text = cls.template % locals() + args = cls._get_script_args(type_, name, header, script_text) + for res in args: + yield res + + @staticmethod + def _ensure_safe_name(name): + """ + Prevent paths in *_scripts entry point names. + """ + has_path_sep = re.search(r'[\\/]', name) + if has_path_sep: + raise ValueError("Path separators not allowed in script names") + + @classmethod + def get_writer(cls, force_windows): + # for backward compatibility + warnings.warn("Use best", DeprecationWarning) + return WindowsScriptWriter.best() if force_windows else cls.best() + + @classmethod + def best(cls): + """ + Select the best ScriptWriter for this environment. + """ + if sys.platform == 'win32' or (os.name == 'java' and os._name == 'nt'): + return WindowsScriptWriter.best() + else: + return cls + + @classmethod + def _get_script_args(cls, type_, name, header, script_text): + # Simply write the stub with no extension. + yield (name, header + script_text) + + @classmethod + def get_header(cls, script_text="", executable=None): + """Create a #! line, getting options (if any) from script_text""" + cmd = cls.command_spec_class.best().from_param(executable) + cmd.install_options(script_text) + return cmd.as_header() + + +class WindowsScriptWriter(ScriptWriter): + command_spec_class = WindowsCommandSpec + + @classmethod + def get_writer(cls): + # for backward compatibility + warnings.warn("Use best", DeprecationWarning) + return cls.best() + + @classmethod + def best(cls): + """ + Select the best ScriptWriter suitable for Windows + """ + writer_lookup = dict( + executable=WindowsExecutableLauncherWriter, + natural=cls, + ) + # for compatibility, use the executable launcher by default + launcher = os.environ.get('SETUPTOOLS_LAUNCHER', 'executable') + return writer_lookup[launcher] + + @classmethod + def _get_script_args(cls, type_, name, header, script_text): + "For Windows, add a .py extension" + ext = dict(console='.pya', gui='.pyw')[type_] + if ext not in os.environ['PATHEXT'].lower().split(';'): + msg = ( + "{ext} not listed in PATHEXT; scripts will not be " + "recognized as executables." + ).format(**locals()) + warnings.warn(msg, UserWarning) + old = ['.pya', '.py', '-script.py', '.pyc', '.pyo', '.pyw', '.exe'] + old.remove(ext) + header = cls._adjust_header(type_, header) + blockers = [name + x for x in old] + yield name + ext, header + script_text, 't', blockers + + @classmethod + def _adjust_header(cls, type_, orig_header): + """ + Make sure 'pythonw' is used for gui and and 'python' is used for + console (regardless of what sys.executable is). + """ + pattern = 'pythonw.exe' + repl = 'python.exe' + if type_ == 'gui': + pattern, repl = repl, pattern + pattern_ob = re.compile(re.escape(pattern), re.IGNORECASE) + new_header = pattern_ob.sub(string=orig_header, repl=repl) + return new_header if cls._use_header(new_header) else orig_header + + @staticmethod + def _use_header(new_header): + """ + Should _adjust_header use the replaced header? + + On non-windows systems, always use. On + Windows systems, only use the replaced header if it resolves + to an executable on the system. + """ + clean_header = new_header[2:-1].strip('"') + return sys.platform != 'win32' or find_executable(clean_header) + + +class WindowsExecutableLauncherWriter(WindowsScriptWriter): + @classmethod + def _get_script_args(cls, type_, name, header, script_text): + """ + For Windows, add a .py extension and an .exe launcher + """ + if type_ == 'gui': + launcher_type = 'gui' + ext = '-script.pyw' + old = ['.pyw'] + else: + launcher_type = 'cli' + ext = '-script.py' + old = ['.py', '.pyc', '.pyo'] + hdr = cls._adjust_header(type_, header) + blockers = [name + x for x in old] + yield (name + ext, hdr + script_text, 't', blockers) + yield ( + name + '.exe', get_win_launcher(launcher_type), + 'b' # write in binary mode + ) + if not is_64bit(): + # install a manifest for the launcher to prevent Windows + # from detecting it as an installer (which it will for + # launchers like easy_install.exe). Consider only + # adding a manifest for launchers detected as installers. + # See Distribute #143 for details. + m_name = name + '.exe.manifest' + yield (m_name, load_launcher_manifest(name), 't') + + +# for backward-compatibility +get_script_args = ScriptWriter.get_script_args +get_script_header = ScriptWriter.get_script_header + + +def get_win_launcher(type): + """ + Load the Windows launcher (executable) suitable for launching a script. + + `type` should be either 'cli' or 'gui' + + Returns the executable as a byte string. + """ + launcher_fn = '%s.exe' % type + if is_64bit(): + launcher_fn = launcher_fn.replace(".", "-64.") + else: + launcher_fn = launcher_fn.replace(".", "-32.") + return resource_string('setuptools', launcher_fn) + + +def load_launcher_manifest(name): + manifest = pkg_resources.resource_string(__name__, 'launcher manifest.xml') + if six.PY2: + return manifest % vars() + else: + return manifest.decode('utf-8') % vars() + + +def rmtree(path, ignore_errors=False, onerror=auto_chmod): + return shutil.rmtree(path, ignore_errors, onerror) + + +def current_umask(): + tmp = os.umask(0o022) + os.umask(tmp) + return tmp + + +def bootstrap(): + # This function is called when setuptools*.egg is run using /bin/sh + import setuptools + + argv0 = os.path.dirname(setuptools.__path__[0]) + sys.argv[0] = argv0 + sys.argv.append(argv0) + main() + + +def main(argv=None, **kw): + from setuptools import setup + from setuptools.dist import Distribution + + class DistributionWithoutHelpCommands(Distribution): + common_usage = "" + + def _show_help(self, *args, **kw): + with _patch_usage(): + Distribution._show_help(self, *args, **kw) + + if argv is None: + argv = sys.argv[1:] + + with _patch_usage(): + setup( + script_args=['-q', 'easy_install', '-v'] + argv, + script_name=sys.argv[0] or 'easy_install', + distclass=DistributionWithoutHelpCommands, + **kw + ) + + +@contextlib.contextmanager +def _patch_usage(): + import distutils.core + USAGE = textwrap.dedent(""" + usage: %(script)s [options] requirement_or_url ... + or: %(script)s --help + """).lstrip() + + def gen_usage(script_name): + return USAGE % dict( + script=os.path.basename(script_name), + ) + + saved = distutils.core.gen_usage + distutils.core.gen_usage = gen_usage + try: + yield + finally: + distutils.core.gen_usage = saved diff --git a/week-0/day-3/venv/lib/python3.6/site-packages/setuptools/command/egg_info.py b/week-0/day-3/venv/lib/python3.6/site-packages/setuptools/command/egg_info.py new file mode 100644 index 00000000..8b0f4488 --- /dev/null +++ b/week-0/day-3/venv/lib/python3.6/site-packages/setuptools/command/egg_info.py @@ -0,0 +1,696 @@ +"""setuptools.command.egg_info + +Create a distribution's .egg-info directory and contents""" + +from distutils.filelist import FileList as _FileList +from distutils.errors import DistutilsInternalError +from distutils.util import convert_path +from distutils import log +import distutils.errors +import distutils.filelist +import os +import re +import sys +import io +import warnings +import time +import collections + +from setuptools.extern import six +from setuptools.extern.six.moves import map + +from setuptools import Command +from setuptools.command.sdist import sdist +from setuptools.command.sdist import walk_revctrl +from setuptools.command.setopt import edit_config +from setuptools.command import bdist_egg +from pkg_resources import ( + parse_requirements, safe_name, parse_version, + safe_version, yield_lines, EntryPoint, iter_entry_points, to_filename) +import setuptools.unicode_utils as unicode_utils +from setuptools.glob import glob + +from setuptools.extern import packaging + + +def translate_pattern(glob): + """ + Translate a file path glob like '*.txt' in to a regular expression. + This differs from fnmatch.translate which allows wildcards to match + directory separators. It also knows about '**/' which matches any number of + directories. + """ + pat = '' + + # This will split on '/' within [character classes]. This is deliberate. + chunks = glob.split(os.path.sep) + + sep = re.escape(os.sep) + valid_char = '[^%s]' % (sep,) + + for c, chunk in enumerate(chunks): + last_chunk = c == len(chunks) - 1 + + # Chunks that are a literal ** are globstars. They match anything. + if chunk == '**': + if last_chunk: + # Match anything if this is the last component + pat += '.*' + else: + # Match '(name/)*' + pat += '(?:%s+%s)*' % (valid_char, sep) + continue # Break here as the whole path component has been handled + + # Find any special characters in the remainder + i = 0 + chunk_len = len(chunk) + while i < chunk_len: + char = chunk[i] + if char == '*': + # Match any number of name characters + pat += valid_char + '*' + elif char == '?': + # Match a name character + pat += valid_char + elif char == '[': + # Character class + inner_i = i + 1 + # Skip initial !/] chars + if inner_i < chunk_len and chunk[inner_i] == '!': + inner_i = inner_i + 1 + if inner_i < chunk_len and chunk[inner_i] == ']': + inner_i = inner_i + 1 + + # Loop till the closing ] is found + while inner_i < chunk_len and chunk[inner_i] != ']': + inner_i = inner_i + 1 + + if inner_i >= chunk_len: + # Got to the end of the string without finding a closing ] + # Do not treat this as a matching group, but as a literal [ + pat += re.escape(char) + else: + # Grab the insides of the [brackets] + inner = chunk[i + 1:inner_i] + char_class = '' + + # Class negation + if inner[0] == '!': + char_class = '^' + inner = inner[1:] + + char_class += re.escape(inner) + pat += '[%s]' % (char_class,) + + # Skip to the end ] + i = inner_i + else: + pat += re.escape(char) + i += 1 + + # Join each chunk with the dir separator + if not last_chunk: + pat += sep + + pat += r'\Z' + return re.compile(pat, flags=re.MULTILINE|re.DOTALL) + + +class egg_info(Command): + description = "create a distribution's .egg-info directory" + + user_options = [ + ('egg-base=', 'e', "directory containing .egg-info directories" + " (default: top of the source tree)"), + ('tag-date', 'd', "Add date stamp (e.g. 20050528) to version number"), + ('tag-build=', 'b', "Specify explicit tag to add to version number"), + ('no-date', 'D', "Don't include date stamp [default]"), + ] + + boolean_options = ['tag-date'] + negative_opt = { + 'no-date': 'tag-date', + } + + def initialize_options(self): + self.egg_name = None + self.egg_version = None + self.egg_base = None + self.egg_info = None + self.tag_build = None + self.tag_date = 0 + self.broken_egg_info = False + self.vtags = None + + #################################### + # allow the 'tag_svn_revision' to be detected and + # set, supporting sdists built on older Setuptools. + @property + def tag_svn_revision(self): + pass + + @tag_svn_revision.setter + def tag_svn_revision(self, value): + pass + #################################### + + def save_version_info(self, filename): + """ + Materialize the value of date into the + build tag. Install build keys in a deterministic order + to avoid arbitrary reordering on subsequent builds. + """ + egg_info = collections.OrderedDict() + # follow the order these keys would have been added + # when PYTHONHASHSEED=0 + egg_info['tag_build'] = self.tags() + egg_info['tag_date'] = 0 + edit_config(filename, dict(egg_info=egg_info)) + + def finalize_options(self): + self.egg_name = safe_name(self.distribution.get_name()) + self.vtags = self.tags() + self.egg_version = self.tagged_version() + + parsed_version = parse_version(self.egg_version) + + try: + is_version = isinstance(parsed_version, packaging.version.Version) + spec = ( + "%s==%s" if is_version else "%s===%s" + ) + list( + parse_requirements(spec % (self.egg_name, self.egg_version)) + ) + except ValueError: + raise distutils.errors.DistutilsOptionError( + "Invalid distribution name or version syntax: %s-%s" % + (self.egg_name, self.egg_version) + ) + + if self.egg_base is None: + dirs = self.distribution.package_dir + self.egg_base = (dirs or {}).get('', os.curdir) + + self.ensure_dirname('egg_base') + self.egg_info = to_filename(self.egg_name) + '.egg-info' + if self.egg_base != os.curdir: + self.egg_info = os.path.join(self.egg_base, self.egg_info) + if '-' in self.egg_name: + self.check_broken_egg_info() + + # Set package version for the benefit of dumber commands + # (e.g. sdist, bdist_wininst, etc.) + # + self.distribution.metadata.version = self.egg_version + + # If we bootstrapped around the lack of a PKG-INFO, as might be the + # case in a fresh checkout, make sure that any special tags get added + # to the version info + # + pd = self.distribution._patched_dist + if pd is not None and pd.key == self.egg_name.lower(): + pd._version = self.egg_version + pd._parsed_version = parse_version(self.egg_version) + self.distribution._patched_dist = None + + def write_or_delete_file(self, what, filename, data, force=False): + """Write `data` to `filename` or delete if empty + + If `data` is non-empty, this routine is the same as ``write_file()``. + If `data` is empty but not ``None``, this is the same as calling + ``delete_file(filename)`. If `data` is ``None``, then this is a no-op + unless `filename` exists, in which case a warning is issued about the + orphaned file (if `force` is false), or deleted (if `force` is true). + """ + if data: + self.write_file(what, filename, data) + elif os.path.exists(filename): + if data is None and not force: + log.warn( + "%s not set in setup(), but %s exists", what, filename + ) + return + else: + self.delete_file(filename) + + def write_file(self, what, filename, data): + """Write `data` to `filename` (if not a dry run) after announcing it + + `what` is used in a log message to identify what is being written + to the file. + """ + log.info("writing %s to %s", what, filename) + if six.PY3: + data = data.encode("utf-8") + if not self.dry_run: + f = open(filename, 'wb') + f.write(data) + f.close() + + def delete_file(self, filename): + """Delete `filename` (if not a dry run) after announcing it""" + log.info("deleting %s", filename) + if not self.dry_run: + os.unlink(filename) + + def tagged_version(self): + version = self.distribution.get_version() + # egg_info may be called more than once for a distribution, + # in which case the version string already contains all tags. + if self.vtags and version.endswith(self.vtags): + return safe_version(version) + return safe_version(version + self.vtags) + + def run(self): + self.mkpath(self.egg_info) + installer = self.distribution.fetch_build_egg + for ep in iter_entry_points('egg_info.writers'): + ep.require(installer=installer) + writer = ep.resolve() + writer(self, ep.name, os.path.join(self.egg_info, ep.name)) + + # Get rid of native_libs.txt if it was put there by older bdist_egg + nl = os.path.join(self.egg_info, "native_libs.txt") + if os.path.exists(nl): + self.delete_file(nl) + + self.find_sources() + + def tags(self): + version = '' + if self.tag_build: + version += self.tag_build + if self.tag_date: + version += time.strftime("-%Y%m%d") + return version + + def find_sources(self): + """Generate SOURCES.txt manifest file""" + manifest_filename = os.path.join(self.egg_info, "SOURCES.txt") + mm = manifest_maker(self.distribution) + mm.manifest = manifest_filename + mm.run() + self.filelist = mm.filelist + + def check_broken_egg_info(self): + bei = self.egg_name + '.egg-info' + if self.egg_base != os.curdir: + bei = os.path.join(self.egg_base, bei) + if os.path.exists(bei): + log.warn( + "-" * 78 + '\n' + "Note: Your current .egg-info directory has a '-' in its name;" + '\nthis will not work correctly with "setup.py develop".\n\n' + 'Please rename %s to %s to correct this problem.\n' + '-' * 78, + bei, self.egg_info + ) + self.broken_egg_info = self.egg_info + self.egg_info = bei # make it work for now + + +class FileList(_FileList): + # Implementations of the various MANIFEST.in commands + + def process_template_line(self, line): + # Parse the line: split it up, make sure the right number of words + # is there, and return the relevant words. 'action' is always + # defined: it's the first word of the line. Which of the other + # three are defined depends on the action; it'll be either + # patterns, (dir and patterns), or (dir_pattern). + (action, patterns, dir, dir_pattern) = self._parse_template_line(line) + + # OK, now we know that the action is valid and we have the + # right number of words on the line for that action -- so we + # can proceed with minimal error-checking. + if action == 'include': + self.debug_print("include " + ' '.join(patterns)) + for pattern in patterns: + if not self.include(pattern): + log.warn("warning: no files found matching '%s'", pattern) + + elif action == 'exclude': + self.debug_print("exclude " + ' '.join(patterns)) + for pattern in patterns: + if not self.exclude(pattern): + log.warn(("warning: no previously-included files " + "found matching '%s'"), pattern) + + elif action == 'global-include': + self.debug_print("global-include " + ' '.join(patterns)) + for pattern in patterns: + if not self.global_include(pattern): + log.warn(("warning: no files found matching '%s' " + "anywhere in distribution"), pattern) + + elif action == 'global-exclude': + self.debug_print("global-exclude " + ' '.join(patterns)) + for pattern in patterns: + if not self.global_exclude(pattern): + log.warn(("warning: no previously-included files matching " + "'%s' found anywhere in distribution"), + pattern) + + elif action == 'recursive-include': + self.debug_print("recursive-include %s %s" % + (dir, ' '.join(patterns))) + for pattern in patterns: + if not self.recursive_include(dir, pattern): + log.warn(("warning: no files found matching '%s' " + "under directory '%s'"), + pattern, dir) + + elif action == 'recursive-exclude': + self.debug_print("recursive-exclude %s %s" % + (dir, ' '.join(patterns))) + for pattern in patterns: + if not self.recursive_exclude(dir, pattern): + log.warn(("warning: no previously-included files matching " + "'%s' found under directory '%s'"), + pattern, dir) + + elif action == 'graft': + self.debug_print("graft " + dir_pattern) + if not self.graft(dir_pattern): + log.warn("warning: no directories found matching '%s'", + dir_pattern) + + elif action == 'prune': + self.debug_print("prune " + dir_pattern) + if not self.prune(dir_pattern): + log.warn(("no previously-included directories found " + "matching '%s'"), dir_pattern) + + else: + raise DistutilsInternalError( + "this cannot happen: invalid action '%s'" % action) + + def _remove_files(self, predicate): + """ + Remove all files from the file list that match the predicate. + Return True if any matching files were removed + """ + found = False + for i in range(len(self.files) - 1, -1, -1): + if predicate(self.files[i]): + self.debug_print(" removing " + self.files[i]) + del self.files[i] + found = True + return found + + def include(self, pattern): + """Include files that match 'pattern'.""" + found = [f for f in glob(pattern) if not os.path.isdir(f)] + self.extend(found) + return bool(found) + + def exclude(self, pattern): + """Exclude files that match 'pattern'.""" + match = translate_pattern(pattern) + return self._remove_files(match.match) + + def recursive_include(self, dir, pattern): + """ + Include all files anywhere in 'dir/' that match the pattern. + """ + full_pattern = os.path.join(dir, '**', pattern) + found = [f for f in glob(full_pattern, recursive=True) + if not os.path.isdir(f)] + self.extend(found) + return bool(found) + + def recursive_exclude(self, dir, pattern): + """ + Exclude any file anywhere in 'dir/' that match the pattern. + """ + match = translate_pattern(os.path.join(dir, '**', pattern)) + return self._remove_files(match.match) + + def graft(self, dir): + """Include all files from 'dir/'.""" + found = [ + item + for match_dir in glob(dir) + for item in distutils.filelist.findall(match_dir) + ] + self.extend(found) + return bool(found) + + def prune(self, dir): + """Filter out files from 'dir/'.""" + match = translate_pattern(os.path.join(dir, '**')) + return self._remove_files(match.match) + + def global_include(self, pattern): + """ + Include all files anywhere in the current directory that match the + pattern. This is very inefficient on large file trees. + """ + if self.allfiles is None: + self.findall() + match = translate_pattern(os.path.join('**', pattern)) + found = [f for f in self.allfiles if match.match(f)] + self.extend(found) + return bool(found) + + def global_exclude(self, pattern): + """ + Exclude all files anywhere that match the pattern. + """ + match = translate_pattern(os.path.join('**', pattern)) + return self._remove_files(match.match) + + def append(self, item): + if item.endswith('\r'): # Fix older sdists built on Windows + item = item[:-1] + path = convert_path(item) + + if self._safe_path(path): + self.files.append(path) + + def extend(self, paths): + self.files.extend(filter(self._safe_path, paths)) + + def _repair(self): + """ + Replace self.files with only safe paths + + Because some owners of FileList manipulate the underlying + ``files`` attribute directly, this method must be called to + repair those paths. + """ + self.files = list(filter(self._safe_path, self.files)) + + def _safe_path(self, path): + enc_warn = "'%s' not %s encodable -- skipping" + + # To avoid accidental trans-codings errors, first to unicode + u_path = unicode_utils.filesys_decode(path) + if u_path is None: + log.warn("'%s' in unexpected encoding -- skipping" % path) + return False + + # Must ensure utf-8 encodability + utf8_path = unicode_utils.try_encode(u_path, "utf-8") + if utf8_path is None: + log.warn(enc_warn, path, 'utf-8') + return False + + try: + # accept is either way checks out + if os.path.exists(u_path) or os.path.exists(utf8_path): + return True + # this will catch any encode errors decoding u_path + except UnicodeEncodeError: + log.warn(enc_warn, path, sys.getfilesystemencoding()) + + +class manifest_maker(sdist): + template = "MANIFEST.in" + + def initialize_options(self): + self.use_defaults = 1 + self.prune = 1 + self.manifest_only = 1 + self.force_manifest = 1 + + def finalize_options(self): + pass + + def run(self): + self.filelist = FileList() + if not os.path.exists(self.manifest): + self.write_manifest() # it must exist so it'll get in the list + self.add_defaults() + if os.path.exists(self.template): + self.read_template() + self.prune_file_list() + self.filelist.sort() + self.filelist.remove_duplicates() + self.write_manifest() + + def _manifest_normalize(self, path): + path = unicode_utils.filesys_decode(path) + return path.replace(os.sep, '/') + + def write_manifest(self): + """ + Write the file list in 'self.filelist' to the manifest file + named by 'self.manifest'. + """ + self.filelist._repair() + + # Now _repairs should encodability, but not unicode + files = [self._manifest_normalize(f) for f in self.filelist.files] + msg = "writing manifest file '%s'" % self.manifest + self.execute(write_file, (self.manifest, files), msg) + + def warn(self, msg): + if not self._should_suppress_warning(msg): + sdist.warn(self, msg) + + @staticmethod + def _should_suppress_warning(msg): + """ + suppress missing-file warnings from sdist + """ + return re.match(r"standard file .*not found", msg) + + def add_defaults(self): + sdist.add_defaults(self) + self.filelist.append(self.template) + self.filelist.append(self.manifest) + rcfiles = list(walk_revctrl()) + if rcfiles: + self.filelist.extend(rcfiles) + elif os.path.exists(self.manifest): + self.read_manifest() + ei_cmd = self.get_finalized_command('egg_info') + self.filelist.graft(ei_cmd.egg_info) + + def prune_file_list(self): + build = self.get_finalized_command('build') + base_dir = self.distribution.get_fullname() + self.filelist.prune(build.build_base) + self.filelist.prune(base_dir) + sep = re.escape(os.sep) + self.filelist.exclude_pattern(r'(^|' + sep + r')(RCS|CVS|\.svn)' + sep, + is_regex=1) + + +def write_file(filename, contents): + """Create a file with the specified name and write 'contents' (a + sequence of strings without line terminators) to it. + """ + contents = "\n".join(contents) + + # assuming the contents has been vetted for utf-8 encoding + contents = contents.encode("utf-8") + + with open(filename, "wb") as f: # always write POSIX-style manifest + f.write(contents) + + +def write_pkg_info(cmd, basename, filename): + log.info("writing %s", filename) + if not cmd.dry_run: + metadata = cmd.distribution.metadata + metadata.version, oldver = cmd.egg_version, metadata.version + metadata.name, oldname = cmd.egg_name, metadata.name + + try: + # write unescaped data to PKG-INFO, so older pkg_resources + # can still parse it + metadata.write_pkg_info(cmd.egg_info) + finally: + metadata.name, metadata.version = oldname, oldver + + safe = getattr(cmd.distribution, 'zip_safe', None) + + bdist_egg.write_safety_flag(cmd.egg_info, safe) + + +def warn_depends_obsolete(cmd, basename, filename): + if os.path.exists(filename): + log.warn( + "WARNING: 'depends.txt' is not used by setuptools 0.6!\n" + "Use the install_requires/extras_require setup() args instead." + ) + + +def _write_requirements(stream, reqs): + lines = yield_lines(reqs or ()) + append_cr = lambda line: line + '\n' + lines = map(append_cr, sorted(lines)) + stream.writelines(lines) + + +def write_requirements(cmd, basename, filename): + dist = cmd.distribution + data = six.StringIO() + _write_requirements(data, dist.install_requires) + extras_require = dist.extras_require or {} + for extra in sorted(extras_require): + data.write('\n[{extra}]\n'.format(**vars())) + _write_requirements(data, extras_require[extra]) + cmd.write_or_delete_file("requirements", filename, data.getvalue()) + + +def write_setup_requirements(cmd, basename, filename): + data = io.StringIO() + _write_requirements(data, cmd.distribution.setup_requires) + cmd.write_or_delete_file("setup-requirements", filename, data.getvalue()) + + +def write_toplevel_names(cmd, basename, filename): + pkgs = dict.fromkeys( + [ + k.split('.', 1)[0] + for k in cmd.distribution.iter_distribution_names() + ] + ) + cmd.write_file("top-level names", filename, '\n'.join(sorted(pkgs)) + '\n') + + +def overwrite_arg(cmd, basename, filename): + write_arg(cmd, basename, filename, True) + + +def write_arg(cmd, basename, filename, force=False): + argname = os.path.splitext(basename)[0] + value = getattr(cmd.distribution, argname, None) + if value is not None: + value = '\n'.join(value) + '\n' + cmd.write_or_delete_file(argname, filename, value, force) + + +def write_entries(cmd, basename, filename): + ep = cmd.distribution.entry_points + + if isinstance(ep, six.string_types) or ep is None: + data = ep + elif ep is not None: + data = [] + for section, contents in sorted(ep.items()): + if not isinstance(contents, six.string_types): + contents = EntryPoint.parse_group(section, contents) + contents = '\n'.join(sorted(map(str, contents.values()))) + data.append('[%s]\n%s\n\n' % (section, contents)) + data = ''.join(data) + + cmd.write_or_delete_file('entry points', filename, data, True) + + +def get_pkg_info_revision(): + """ + Get a -r### off of PKG-INFO Version in case this is an sdist of + a subversion revision. + """ + warnings.warn("get_pkg_info_revision is deprecated.", DeprecationWarning) + if os.path.exists('PKG-INFO'): + with io.open('PKG-INFO') as f: + for line in f: + match = re.match(r"Version:.*-r(\d+)\s*$", line) + if match: + return int(match.group(1)) + return 0 diff --git a/week-0/day-3/venv/lib/python3.6/site-packages/setuptools/command/install.py b/week-0/day-3/venv/lib/python3.6/site-packages/setuptools/command/install.py new file mode 100644 index 00000000..31a5ddb5 --- /dev/null +++ b/week-0/day-3/venv/lib/python3.6/site-packages/setuptools/command/install.py @@ -0,0 +1,125 @@ +from distutils.errors import DistutilsArgError +import inspect +import glob +import warnings +import platform +import distutils.command.install as orig + +import setuptools + +# Prior to numpy 1.9, NumPy relies on the '_install' name, so provide it for +# now. See https://github.com/pypa/setuptools/issues/199/ +_install = orig.install + + +class install(orig.install): + """Use easy_install to install the package, w/dependencies""" + + user_options = orig.install.user_options + [ + ('old-and-unmanageable', None, "Try not to use this!"), + ('single-version-externally-managed', None, + "used by system package builders to create 'flat' eggs"), + ] + boolean_options = orig.install.boolean_options + [ + 'old-and-unmanageable', 'single-version-externally-managed', + ] + new_commands = [ + ('install_egg_info', lambda self: True), + ('install_scripts', lambda self: True), + ] + _nc = dict(new_commands) + + def initialize_options(self): + orig.install.initialize_options(self) + self.old_and_unmanageable = None + self.single_version_externally_managed = None + + def finalize_options(self): + orig.install.finalize_options(self) + if self.root: + self.single_version_externally_managed = True + elif self.single_version_externally_managed: + if not self.root and not self.record: + raise DistutilsArgError( + "You must specify --record or --root when building system" + " packages" + ) + + def handle_extra_path(self): + if self.root or self.single_version_externally_managed: + # explicit backward-compatibility mode, allow extra_path to work + return orig.install.handle_extra_path(self) + + # Ignore extra_path when installing an egg (or being run by another + # command without --root or --single-version-externally-managed + self.path_file = None + self.extra_dirs = '' + + def run(self): + # Explicit request for old-style install? Just do it + if self.old_and_unmanageable or self.single_version_externally_managed: + return orig.install.run(self) + + if not self._called_from_setup(inspect.currentframe()): + # Run in backward-compatibility mode to support bdist_* commands. + orig.install.run(self) + else: + self.do_egg_install() + + @staticmethod + def _called_from_setup(run_frame): + """ + Attempt to detect whether run() was called from setup() or by another + command. If called by setup(), the parent caller will be the + 'run_command' method in 'distutils.dist', and *its* caller will be + the 'run_commands' method. If called any other way, the + immediate caller *might* be 'run_command', but it won't have been + called by 'run_commands'. Return True in that case or if a call stack + is unavailable. Return False otherwise. + """ + if run_frame is None: + msg = "Call stack not available. bdist_* commands may fail." + warnings.warn(msg) + if platform.python_implementation() == 'IronPython': + msg = "For best results, pass -X:Frames to enable call stack." + warnings.warn(msg) + return True + res = inspect.getouterframes(run_frame)[2] + caller, = res[:1] + info = inspect.getframeinfo(caller) + caller_module = caller.f_globals.get('__name__', '') + return ( + caller_module == 'distutils.dist' + and info.function == 'run_commands' + ) + + def do_egg_install(self): + + easy_install = self.distribution.get_command_class('easy_install') + + cmd = easy_install( + self.distribution, args="x", root=self.root, record=self.record, + ) + cmd.ensure_finalized() # finalize before bdist_egg munges install cmd + cmd.always_copy_from = '.' # make sure local-dir eggs get installed + + # pick up setup-dir .egg files only: no .egg-info + cmd.package_index.scan(glob.glob('*.egg')) + + self.run_command('bdist_egg') + args = [self.distribution.get_command_obj('bdist_egg').egg_output] + + if setuptools.bootstrap_install_from: + # Bootstrap self-installation of setuptools + args.insert(0, setuptools.bootstrap_install_from) + + cmd.args = args + cmd.run() + setuptools.bootstrap_install_from = None + + +# XXX Python 3.1 doesn't see _nc if this is inside the class +install.sub_commands = ( + [cmd for cmd in orig.install.sub_commands if cmd[0] not in install._nc] + + install.new_commands +) diff --git a/week-0/day-3/venv/lib/python3.6/site-packages/setuptools/command/install_egg_info.py b/week-0/day-3/venv/lib/python3.6/site-packages/setuptools/command/install_egg_info.py new file mode 100644 index 00000000..5f405bca --- /dev/null +++ b/week-0/day-3/venv/lib/python3.6/site-packages/setuptools/command/install_egg_info.py @@ -0,0 +1,82 @@ +from distutils import log, dir_util +import os, sys + +from setuptools import Command +from setuptools import namespaces +from setuptools.archive_util import unpack_archive +import pkg_resources + + +class install_egg_info(namespaces.Installer, Command): + """Install an .egg-info directory for the package""" + + description = "Install an .egg-info directory for the package" + + user_options = [ + ('install-dir=', 'd', "directory to install to"), + ] + + def initialize_options(self): + self.install_dir = None + self.install_layout = None + self.prefix_option = None + + def finalize_options(self): + self.set_undefined_options('install_lib', + ('install_dir', 'install_dir')) + self.set_undefined_options('install',('install_layout','install_layout')) + if sys.hexversion > 0x2060000: + self.set_undefined_options('install',('prefix_option','prefix_option')) + ei_cmd = self.get_finalized_command("egg_info") + basename = pkg_resources.Distribution( + None, None, ei_cmd.egg_name, ei_cmd.egg_version + ).egg_name() + '.egg-info' + + if self.install_layout: + if not self.install_layout.lower() in ['deb']: + raise DistutilsOptionError("unknown value for --install-layout") + self.install_layout = self.install_layout.lower() + basename = basename.replace('-py%s' % pkg_resources.PY_MAJOR, '') + elif self.prefix_option or 'real_prefix' in sys.__dict__: + # don't modify for virtualenv + pass + else: + basename = basename.replace('-py%s' % pkg_resources.PY_MAJOR, '') + + self.source = ei_cmd.egg_info + self.target = os.path.join(self.install_dir, basename) + self.outputs = [] + + def run(self): + self.run_command('egg_info') + if os.path.isdir(self.target) and not os.path.islink(self.target): + dir_util.remove_tree(self.target, dry_run=self.dry_run) + elif os.path.exists(self.target): + self.execute(os.unlink, (self.target,), "Removing " + self.target) + if not self.dry_run: + pkg_resources.ensure_directory(self.target) + self.execute( + self.copytree, (), "Copying %s to %s" % (self.source, self.target) + ) + self.install_namespaces() + + def get_outputs(self): + return self.outputs + + def copytree(self): + # Copy the .egg-info tree to site-packages + def skimmer(src, dst): + # filter out source-control directories; note that 'src' is always + # a '/'-separated path, regardless of platform. 'dst' is a + # platform-specific path. + for skip in '.svn/', 'CVS/': + if src.startswith(skip) or '/' + skip in src: + return None + if self.install_layout and self.install_layout in ['deb'] and src.startswith('SOURCES.txt'): + log.info("Skipping SOURCES.txt") + return None + self.outputs.append(dst) + log.debug("Copying %s to %s", src, dst) + return dst + + unpack_archive(self.source, self.target, skimmer) diff --git a/week-0/day-3/venv/lib/python3.6/site-packages/setuptools/command/install_lib.py b/week-0/day-3/venv/lib/python3.6/site-packages/setuptools/command/install_lib.py new file mode 100644 index 00000000..578e002d --- /dev/null +++ b/week-0/day-3/venv/lib/python3.6/site-packages/setuptools/command/install_lib.py @@ -0,0 +1,148 @@ +import os +import sys +import imp +from itertools import product, starmap +import distutils.command.install_lib as orig + + +class install_lib(orig.install_lib): + """Don't add compiled flags to filenames of non-Python files""" + + def initialize_options(self): + orig.install_lib.initialize_options(self) + self.multiarch = None + self.install_layout = None + + def finalize_options(self): + orig.install_lib.finalize_options(self) + self.set_undefined_options('install',('install_layout','install_layout')) + if self.install_layout == 'deb' and sys.version_info[:2] >= (3, 3): + import sysconfig + self.multiarch = sysconfig.get_config_var('MULTIARCH') + + def run(self): + self.build() + outfiles = self.install() + if outfiles is not None: + # always compile, in case we have any extension stubs to deal with + self.byte_compile(outfiles) + + def get_exclusions(self): + """ + Return a collections.Sized collections.Container of paths to be + excluded for single_version_externally_managed installations. + """ + all_packages = ( + pkg + for ns_pkg in self._get_SVEM_NSPs() + for pkg in self._all_packages(ns_pkg) + ) + + excl_specs = product(all_packages, self._gen_exclusion_paths()) + return set(starmap(self._exclude_pkg_path, excl_specs)) + + def _exclude_pkg_path(self, pkg, exclusion_path): + """ + Given a package name and exclusion path within that package, + compute the full exclusion path. + """ + parts = pkg.split('.') + [exclusion_path] + return os.path.join(self.install_dir, *parts) + + @staticmethod + def _all_packages(pkg_name): + """ + >>> list(install_lib._all_packages('foo.bar.baz')) + ['foo.bar.baz', 'foo.bar', 'foo'] + """ + while pkg_name: + yield pkg_name + pkg_name, sep, child = pkg_name.rpartition('.') + + def _get_SVEM_NSPs(self): + """ + Get namespace packages (list) but only for + single_version_externally_managed installations and empty otherwise. + """ + # TODO: is it necessary to short-circuit here? i.e. what's the cost + # if get_finalized_command is called even when namespace_packages is + # False? + if not self.distribution.namespace_packages: + return [] + + install_cmd = self.get_finalized_command('install') + svem = install_cmd.single_version_externally_managed + + return self.distribution.namespace_packages if svem else [] + + @staticmethod + def _gen_exclusion_paths(): + """ + Generate file paths to be excluded for namespace packages (bytecode + cache files). + """ + # always exclude the package module itself + yield '__init__.py' + + yield '__init__.pyc' + yield '__init__.pyo' + + if not hasattr(imp, 'get_tag'): + return + + base = os.path.join('__pycache__', '__init__.' + imp.get_tag()) + yield base + '.pyc' + yield base + '.pyo' + yield base + '.opt-1.pyc' + yield base + '.opt-2.pyc' + + def copy_tree( + self, infile, outfile, + preserve_mode=1, preserve_times=1, preserve_symlinks=0, level=1 + ): + assert preserve_mode and preserve_times and not preserve_symlinks + exclude = self.get_exclusions() + + if not exclude: + import distutils.dir_util + distutils.dir_util._multiarch = self.multiarch + return orig.install_lib.copy_tree(self, infile, outfile) + + # Exclude namespace package __init__.py* files from the output + + from setuptools.archive_util import unpack_directory + from distutils import log + + outfiles = [] + + if self.multiarch: + import sysconfig + ext_suffix = sysconfig.get_config_var ('EXT_SUFFIX') + if ext_suffix.endswith(self.multiarch + ext_suffix[-3:]): + new_suffix = None + else: + new_suffix = "%s-%s%s" % (ext_suffix[:-3], self.multiarch, ext_suffix[-3:]) + + def pf(src, dst): + if dst in exclude: + log.warn("Skipping installation of %s (namespace package)", + dst) + return False + + if self.multiarch and new_suffix and dst.endswith(ext_suffix) and not dst.endswith(new_suffix): + dst = dst.replace(ext_suffix, new_suffix) + log.info("renaming extension to %s", os.path.basename(dst)) + + log.info("copying %s -> %s", src, os.path.dirname(dst)) + outfiles.append(dst) + return dst + + unpack_directory(infile, outfile, pf) + return outfiles + + def get_outputs(self): + outputs = orig.install_lib.get_outputs(self) + exclude = self.get_exclusions() + if exclude: + return [f for f in outputs if f not in exclude] + return outputs diff --git a/week-0/day-3/venv/lib/python3.6/site-packages/setuptools/command/install_scripts.py b/week-0/day-3/venv/lib/python3.6/site-packages/setuptools/command/install_scripts.py new file mode 100644 index 00000000..16234273 --- /dev/null +++ b/week-0/day-3/venv/lib/python3.6/site-packages/setuptools/command/install_scripts.py @@ -0,0 +1,65 @@ +from distutils import log +import distutils.command.install_scripts as orig +import os +import sys + +from pkg_resources import Distribution, PathMetadata, ensure_directory + + +class install_scripts(orig.install_scripts): + """Do normal script install, plus any egg_info wrapper scripts""" + + def initialize_options(self): + orig.install_scripts.initialize_options(self) + self.no_ep = False + + def run(self): + import setuptools.command.easy_install as ei + + self.run_command("egg_info") + if self.distribution.scripts: + orig.install_scripts.run(self) # run first to set up self.outfiles + else: + self.outfiles = [] + if self.no_ep: + # don't install entry point scripts into .egg file! + return + + ei_cmd = self.get_finalized_command("egg_info") + dist = Distribution( + ei_cmd.egg_base, PathMetadata(ei_cmd.egg_base, ei_cmd.egg_info), + ei_cmd.egg_name, ei_cmd.egg_version, + ) + bs_cmd = self.get_finalized_command('build_scripts') + exec_param = getattr(bs_cmd, 'executable', None) + bw_cmd = self.get_finalized_command("bdist_wininst") + is_wininst = getattr(bw_cmd, '_is_running', False) + writer = ei.ScriptWriter + if is_wininst: + exec_param = "python.exe" + writer = ei.WindowsScriptWriter + if exec_param == sys.executable: + # In case the path to the Python executable contains a space, wrap + # it so it's not split up. + exec_param = [exec_param] + # resolve the writer to the environment + writer = writer.best() + cmd = writer.command_spec_class.best().from_param(exec_param) + for args in writer.get_args(dist, cmd.as_header()): + self.write_script(*args) + + def write_script(self, script_name, contents, mode="t", *ignored): + """Write an executable file to the scripts directory""" + from setuptools.command.easy_install import chmod, current_umask + + log.info("Installing %s script to %s", script_name, self.install_dir) + target = os.path.join(self.install_dir, script_name) + self.outfiles.append(target) + + mask = current_umask() + if not self.dry_run: + ensure_directory(target) + f = open(target, "w" + mode) + f.write(contents) + f.close() + chmod(target, 0o777 - mask) diff --git a/week-0/day-3/venv/lib/python3.6/site-packages/setuptools/command/launcher manifest.xml b/week-0/day-3/venv/lib/python3.6/site-packages/setuptools/command/launcher manifest.xml new file mode 100644 index 00000000..5972a96d --- /dev/null +++ b/week-0/day-3/venv/lib/python3.6/site-packages/setuptools/command/launcher manifest.xml @@ -0,0 +1,15 @@ +<?xml version="1.0" encoding="UTF-8" standalone="yes"?> +<assembly xmlns="urn:schemas-microsoft-com:asm.v1" manifestVersion="1.0"> + <assemblyIdentity version="1.0.0.0" + processorArchitecture="X86" + name="%(name)s" + type="win32"/> + <!-- Identify the application security requirements. --> + <trustInfo xmlns="urn:schemas-microsoft-com:asm.v3"> + <security> + <requestedPrivileges> + <requestedExecutionLevel level="asInvoker" uiAccess="false"/> + </requestedPrivileges> + </security> + </trustInfo> +</assembly> diff --git a/week-0/day-3/venv/lib/python3.6/site-packages/setuptools/command/py36compat.py b/week-0/day-3/venv/lib/python3.6/site-packages/setuptools/command/py36compat.py new file mode 100644 index 00000000..61063e75 --- /dev/null +++ b/week-0/day-3/venv/lib/python3.6/site-packages/setuptools/command/py36compat.py @@ -0,0 +1,136 @@ +import os +from glob import glob +from distutils.util import convert_path +from distutils.command import sdist + +from setuptools.extern.six.moves import filter + + +class sdist_add_defaults: + """ + Mix-in providing forward-compatibility for functionality as found in + distutils on Python 3.7. + + Do not edit the code in this class except to update functionality + as implemented in distutils. Instead, override in the subclass. + """ + + def add_defaults(self): + """Add all the default files to self.filelist: + - README or README.txt + - setup.py + - test/test*.py + - all pure Python modules mentioned in setup script + - all files pointed by package_data (build_py) + - all files defined in data_files. + - all files defined as scripts. + - all C sources listed as part of extensions or C libraries + in the setup script (doesn't catch C headers!) + Warns if (README or README.txt) or setup.py are missing; everything + else is optional. + """ + self._add_defaults_standards() + self._add_defaults_optional() + self._add_defaults_python() + self._add_defaults_data_files() + self._add_defaults_ext() + self._add_defaults_c_libs() + self._add_defaults_scripts() + + @staticmethod + def _cs_path_exists(fspath): + """ + Case-sensitive path existence check + + >>> sdist_add_defaults._cs_path_exists(__file__) + True + >>> sdist_add_defaults._cs_path_exists(__file__.upper()) + False + """ + if not os.path.exists(fspath): + return False + # make absolute so we always have a directory + abspath = os.path.abspath(fspath) + directory, filename = os.path.split(abspath) + return filename in os.listdir(directory) + + def _add_defaults_standards(self): + standards = [self.READMES, self.distribution.script_name] + for fn in standards: + if isinstance(fn, tuple): + alts = fn + got_it = False + for fn in alts: + if self._cs_path_exists(fn): + got_it = True + self.filelist.append(fn) + break + + if not got_it: + self.warn("standard file not found: should have one of " + + ', '.join(alts)) + else: + if self._cs_path_exists(fn): + self.filelist.append(fn) + else: + self.warn("standard file '%s' not found" % fn) + + def _add_defaults_optional(self): + optional = ['test/test*.py', 'setup.cfg'] + for pattern in optional: + files = filter(os.path.isfile, glob(pattern)) + self.filelist.extend(files) + + def _add_defaults_python(self): + # build_py is used to get: + # - python modules + # - files defined in package_data + build_py = self.get_finalized_command('build_py') + + # getting python files + if self.distribution.has_pure_modules(): + self.filelist.extend(build_py.get_source_files()) + + # getting package_data files + # (computed in build_py.data_files by build_py.finalize_options) + for pkg, src_dir, build_dir, filenames in build_py.data_files: + for filename in filenames: + self.filelist.append(os.path.join(src_dir, filename)) + + def _add_defaults_data_files(self): + # getting distribution.data_files + if self.distribution.has_data_files(): + for item in self.distribution.data_files: + if isinstance(item, str): + # plain file + item = convert_path(item) + if os.path.isfile(item): + self.filelist.append(item) + else: + # a (dirname, filenames) tuple + dirname, filenames = item + for f in filenames: + f = convert_path(f) + if os.path.isfile(f): + self.filelist.append(f) + + def _add_defaults_ext(self): + if self.distribution.has_ext_modules(): + build_ext = self.get_finalized_command('build_ext') + self.filelist.extend(build_ext.get_source_files()) + + def _add_defaults_c_libs(self): + if self.distribution.has_c_libraries(): + build_clib = self.get_finalized_command('build_clib') + self.filelist.extend(build_clib.get_source_files()) + + def _add_defaults_scripts(self): + if self.distribution.has_scripts(): + build_scripts = self.get_finalized_command('build_scripts') + self.filelist.extend(build_scripts.get_source_files()) + + +if hasattr(sdist.sdist, '_add_defaults_standards'): + # disable the functionality already available upstream + class sdist_add_defaults: + pass diff --git a/week-0/day-3/venv/lib/python3.6/site-packages/setuptools/command/register.py b/week-0/day-3/venv/lib/python3.6/site-packages/setuptools/command/register.py new file mode 100644 index 00000000..8d6336a1 --- /dev/null +++ b/week-0/day-3/venv/lib/python3.6/site-packages/setuptools/command/register.py @@ -0,0 +1,10 @@ +import distutils.command.register as orig + + +class register(orig.register): + __doc__ = orig.register.__doc__ + + def run(self): + # Make sure that we are using valid current name/version info + self.run_command('egg_info') + orig.register.run(self) diff --git a/week-0/day-3/venv/lib/python3.6/site-packages/setuptools/command/rotate.py b/week-0/day-3/venv/lib/python3.6/site-packages/setuptools/command/rotate.py new file mode 100644 index 00000000..b89353f5 --- /dev/null +++ b/week-0/day-3/venv/lib/python3.6/site-packages/setuptools/command/rotate.py @@ -0,0 +1,66 @@ +from distutils.util import convert_path +from distutils import log +from distutils.errors import DistutilsOptionError +import os +import shutil + +from setuptools.extern import six + +from setuptools import Command + + +class rotate(Command): + """Delete older distributions""" + + description = "delete older distributions, keeping N newest files" + user_options = [ + ('match=', 'm', "patterns to match (required)"), + ('dist-dir=', 'd', "directory where the distributions are"), + ('keep=', 'k', "number of matching distributions to keep"), + ] + + boolean_options = [] + + def initialize_options(self): + self.match = None + self.dist_dir = None + self.keep = None + + def finalize_options(self): + if self.match is None: + raise DistutilsOptionError( + "Must specify one or more (comma-separated) match patterns " + "(e.g. '.zip' or '.egg')" + ) + if self.keep is None: + raise DistutilsOptionError("Must specify number of files to keep") + try: + self.keep = int(self.keep) + except ValueError: + raise DistutilsOptionError("--keep must be an integer") + if isinstance(self.match, six.string_types): + self.match = [ + convert_path(p.strip()) for p in self.match.split(',') + ] + self.set_undefined_options('bdist', ('dist_dir', 'dist_dir')) + + def run(self): + self.run_command("egg_info") + from glob import glob + + for pattern in self.match: + pattern = self.distribution.get_name() + '*' + pattern + files = glob(os.path.join(self.dist_dir, pattern)) + files = [(os.path.getmtime(f), f) for f in files] + files.sort() + files.reverse() + + log.info("%d file(s) matching %s", len(files), pattern) + files = files[self.keep:] + for (t, f) in files: + log.info("Deleting %s", f) + if not self.dry_run: + if os.path.isdir(f): + shutil.rmtree(f) + else: + os.unlink(f) diff --git a/week-0/day-3/venv/lib/python3.6/site-packages/setuptools/command/saveopts.py b/week-0/day-3/venv/lib/python3.6/site-packages/setuptools/command/saveopts.py new file mode 100644 index 00000000..611cec55 --- /dev/null +++ b/week-0/day-3/venv/lib/python3.6/site-packages/setuptools/command/saveopts.py @@ -0,0 +1,22 @@ +from setuptools.command.setopt import edit_config, option_base + + +class saveopts(option_base): + """Save command-line options to a file""" + + description = "save supplied options to setup.cfg or other config file" + + def run(self): + dist = self.distribution + settings = {} + + for cmd in dist.command_options: + + if cmd == 'saveopts': + continue # don't save our own options! + + for opt, (src, val) in dist.get_option_dict(cmd).items(): + if src == "command line": + settings.setdefault(cmd, {})[opt] = val + + edit_config(self.filename, settings, self.dry_run) diff --git a/week-0/day-3/venv/lib/python3.6/site-packages/setuptools/command/sdist.py b/week-0/day-3/venv/lib/python3.6/site-packages/setuptools/command/sdist.py new file mode 100644 index 00000000..bcfae4d8 --- /dev/null +++ b/week-0/day-3/venv/lib/python3.6/site-packages/setuptools/command/sdist.py @@ -0,0 +1,200 @@ +from distutils import log +import distutils.command.sdist as orig +import os +import sys +import io +import contextlib + +from setuptools.extern import six + +from .py36compat import sdist_add_defaults + +import pkg_resources + +_default_revctrl = list + + +def walk_revctrl(dirname=''): + """Find all files under revision control""" + for ep in pkg_resources.iter_entry_points('setuptools.file_finders'): + for item in ep.load()(dirname): + yield item + + +class sdist(sdist_add_defaults, orig.sdist): + """Smart sdist that finds anything supported by revision control""" + + user_options = [ + ('formats=', None, + "formats for source distribution (comma-separated list)"), + ('keep-temp', 'k', + "keep the distribution tree around after creating " + + "archive file(s)"), + ('dist-dir=', 'd', + "directory to put the source distribution archive(s) in " + "[default: dist]"), + ] + + negative_opt = {} + + README_EXTENSIONS = ['', '.rst', '.txt', '.md'] + READMES = tuple('README{0}'.format(ext) for ext in README_EXTENSIONS) + + def run(self): + self.run_command('egg_info') + ei_cmd = self.get_finalized_command('egg_info') + self.filelist = ei_cmd.filelist + self.filelist.append(os.path.join(ei_cmd.egg_info, 'SOURCES.txt')) + self.check_readme() + + # Run sub commands + for cmd_name in self.get_sub_commands(): + self.run_command(cmd_name) + + self.make_distribution() + + dist_files = getattr(self.distribution, 'dist_files', []) + for file in self.archive_files: + data = ('sdist', '', file) + if data not in dist_files: + dist_files.append(data) + + def initialize_options(self): + orig.sdist.initialize_options(self) + + self._default_to_gztar() + + def _default_to_gztar(self): + # only needed on Python prior to 3.6. + if sys.version_info >= (3, 6, 0, 'beta', 1): + return + self.formats = ['gztar'] + + def make_distribution(self): + """ + Workaround for #516 + """ + with self._remove_os_link(): + orig.sdist.make_distribution(self) + + @staticmethod + @contextlib.contextmanager + def _remove_os_link(): + """ + In a context, remove and restore os.link if it exists + """ + + class NoValue: + pass + + orig_val = getattr(os, 'link', NoValue) + try: + del os.link + except Exception: + pass + try: + yield + finally: + if orig_val is not NoValue: + setattr(os, 'link', orig_val) + + def __read_template_hack(self): + # This grody hack closes the template file (MANIFEST.in) if an + # exception occurs during read_template. + # Doing so prevents an error when easy_install attempts to delete the + # file. + try: + orig.sdist.read_template(self) + except Exception: + _, _, tb = sys.exc_info() + tb.tb_next.tb_frame.f_locals['template'].close() + raise + + # Beginning with Python 2.7.2, 3.1.4, and 3.2.1, this leaky file handle + # has been fixed, so only override the method if we're using an earlier + # Python. + has_leaky_handle = ( + sys.version_info < (2, 7, 2) + or (3, 0) <= sys.version_info < (3, 1, 4) + or (3, 2) <= sys.version_info < (3, 2, 1) + ) + if has_leaky_handle: + read_template = __read_template_hack + + def _add_defaults_python(self): + """getting python files""" + if self.distribution.has_pure_modules(): + build_py = self.get_finalized_command('build_py') + self.filelist.extend(build_py.get_source_files()) + # This functionality is incompatible with include_package_data, and + # will in fact create an infinite recursion if include_package_data + # is True. Use of include_package_data will imply that + # distutils-style automatic handling of package_data is disabled + if not self.distribution.include_package_data: + for _, src_dir, _, filenames in build_py.data_files: + self.filelist.extend([os.path.join(src_dir, filename) + for filename in filenames]) + + def _add_defaults_data_files(self): + try: + if six.PY2: + sdist_add_defaults._add_defaults_data_files(self) + else: + super()._add_defaults_data_files() + except TypeError: + log.warn("data_files contains unexpected objects") + + def check_readme(self): + for f in self.READMES: + if os.path.exists(f): + return + else: + self.warn( + "standard file not found: should have one of " + + ', '.join(self.READMES) + ) + + def make_release_tree(self, base_dir, files): + orig.sdist.make_release_tree(self, base_dir, files) + + # Save any egg_info command line options used to create this sdist + dest = os.path.join(base_dir, 'setup.cfg') + if hasattr(os, 'link') and os.path.exists(dest): + # unlink and re-copy, since it might be hard-linked, and + # we don't want to change the source version + os.unlink(dest) + self.copy_file('setup.cfg', dest) + + self.get_finalized_command('egg_info').save_version_info(dest) + + def _manifest_is_not_generated(self): + # check for special comment used in 2.7.1 and higher + if not os.path.isfile(self.manifest): + return False + + with io.open(self.manifest, 'rb') as fp: + first_line = fp.readline() + return (first_line != + '# file GENERATED by distutils, do NOT edit\n'.encode()) + + def read_manifest(self): + """Read the manifest file (named by 'self.manifest') and use it to + fill in 'self.filelist', the list of files to include in the source + distribution. + """ + log.info("reading manifest file '%s'", self.manifest) + manifest = open(self.manifest, 'rb') + for line in manifest: + # The manifest must contain UTF-8. See #303. + if six.PY3: + try: + line = line.decode('UTF-8') + except UnicodeDecodeError: + log.warn("%r not UTF-8 decodable -- skipping" % line) + continue + # ignore comments and blank lines + line = line.strip() + if line.startswith('#') or not line: + continue + self.filelist.append(line) + manifest.close() diff --git a/week-0/day-3/venv/lib/python3.6/site-packages/setuptools/command/setopt.py b/week-0/day-3/venv/lib/python3.6/site-packages/setuptools/command/setopt.py new file mode 100644 index 00000000..7e57cc02 --- /dev/null +++ b/week-0/day-3/venv/lib/python3.6/site-packages/setuptools/command/setopt.py @@ -0,0 +1,149 @@ +from distutils.util import convert_path +from distutils import log +from distutils.errors import DistutilsOptionError +import distutils +import os + +from setuptools.extern.six.moves import configparser + +from setuptools import Command + +__all__ = ['config_file', 'edit_config', 'option_base', 'setopt'] + + +def config_file(kind="local"): + """Get the filename of the distutils, local, global, or per-user config + + `kind` must be one of "local", "global", or "user" + """ + if kind == 'local': + return 'setup.cfg' + if kind == 'global': + return os.path.join( + os.path.dirname(distutils.__file__), 'distutils.cfg' + ) + if kind == 'user': + dot = os.name == 'posix' and '.' or '' + return os.path.expanduser(convert_path("~/%spydistutils.cfg" % dot)) + raise ValueError( + "config_file() type must be 'local', 'global', or 'user'", kind + ) + + +def edit_config(filename, settings, dry_run=False): + """Edit a configuration file to include `settings` + + `settings` is a dictionary of dictionaries or ``None`` values, keyed by + command/section name. A ``None`` value means to delete the entire section, + while a dictionary lists settings to be changed or deleted in that section. + A setting of ``None`` means to delete that setting. + """ + log.debug("Reading configuration from %s", filename) + opts = configparser.RawConfigParser() + opts.read([filename]) + for section, options in settings.items(): + if options is None: + log.info("Deleting section [%s] from %s", section, filename) + opts.remove_section(section) + else: + if not opts.has_section(section): + log.debug("Adding new section [%s] to %s", section, filename) + opts.add_section(section) + for option, value in options.items(): + if value is None: + log.debug( + "Deleting %s.%s from %s", + section, option, filename + ) + opts.remove_option(section, option) + if not opts.options(section): + log.info("Deleting empty [%s] section from %s", + section, filename) + opts.remove_section(section) + else: + log.debug( + "Setting %s.%s to %r in %s", + section, option, value, filename + ) + opts.set(section, option, value) + + log.info("Writing %s", filename) + if not dry_run: + with open(filename, 'w') as f: + opts.write(f) + + +class option_base(Command): + """Abstract base class for commands that mess with config files""" + + user_options = [ + ('global-config', 'g', + "save options to the site-wide distutils.cfg file"), + ('user-config', 'u', + "save options to the current user's pydistutils.cfg file"), + ('filename=', 'f', + "configuration file to use (default=setup.cfg)"), + ] + + boolean_options = [ + 'global-config', 'user-config', + ] + + def initialize_options(self): + self.global_config = None + self.user_config = None + self.filename = None + + def finalize_options(self): + filenames = [] + if self.global_config: + filenames.append(config_file('global')) + if self.user_config: + filenames.append(config_file('user')) + if self.filename is not None: + filenames.append(self.filename) + if not filenames: + filenames.append(config_file('local')) + if len(filenames) > 1: + raise DistutilsOptionError( + "Must specify only one configuration file option", + filenames + ) + self.filename, = filenames + + +class setopt(option_base): + """Save command-line options to a file""" + + description = "set an option in setup.cfg or another config file" + + user_options = [ + ('command=', 'c', 'command to set an option for'), + ('option=', 'o', 'option to set'), + ('set-value=', 's', 'value of the option'), + ('remove', 'r', 'remove (unset) the value'), + ] + option_base.user_options + + boolean_options = option_base.boolean_options + ['remove'] + + def initialize_options(self): + option_base.initialize_options(self) + self.command = None + self.option = None + self.set_value = None + self.remove = None + + def finalize_options(self): + option_base.finalize_options(self) + if self.command is None or self.option is None: + raise DistutilsOptionError("Must specify --command *and* --option") + if self.set_value is None and not self.remove: + raise DistutilsOptionError("Must specify --set-value or --remove") + + def run(self): + edit_config( + self.filename, { + self.command: {self.option.replace('-', '_'): self.set_value} + }, + self.dry_run + ) diff --git a/week-0/day-3/venv/lib/python3.6/site-packages/setuptools/command/test.py b/week-0/day-3/venv/lib/python3.6/site-packages/setuptools/command/test.py new file mode 100644 index 00000000..51aee1f7 --- /dev/null +++ b/week-0/day-3/venv/lib/python3.6/site-packages/setuptools/command/test.py @@ -0,0 +1,268 @@ +import os +import operator +import sys +import contextlib +import itertools +import unittest +from distutils.errors import DistutilsError, DistutilsOptionError +from distutils import log +from unittest import TestLoader + +from setuptools.extern import six +from setuptools.extern.six.moves import map, filter + +from pkg_resources import (resource_listdir, resource_exists, normalize_path, + working_set, _namespace_packages, evaluate_marker, + add_activation_listener, require, EntryPoint) +from setuptools import Command + + +class ScanningLoader(TestLoader): + + def __init__(self): + TestLoader.__init__(self) + self._visited = set() + + def loadTestsFromModule(self, module, pattern=None): + """Return a suite of all tests cases contained in the given module + + If the module is a package, load tests from all the modules in it. + If the module has an ``additional_tests`` function, call it and add + the return value to the tests. + """ + if module in self._visited: + return None + self._visited.add(module) + + tests = [] + tests.append(TestLoader.loadTestsFromModule(self, module)) + + if hasattr(module, "additional_tests"): + tests.append(module.additional_tests()) + + if hasattr(module, '__path__'): + for file in resource_listdir(module.__name__, ''): + if file.endswith('.py') and file != '__init__.py': + submodule = module.__name__ + '.' + file[:-3] + else: + if resource_exists(module.__name__, file + '/__init__.py'): + submodule = module.__name__ + '.' + file + else: + continue + tests.append(self.loadTestsFromName(submodule)) + + if len(tests) != 1: + return self.suiteClass(tests) + else: + return tests[0] # don't create a nested suite for only one return + + +# adapted from jaraco.classes.properties:NonDataProperty +class NonDataProperty(object): + def __init__(self, fget): + self.fget = fget + + def __get__(self, obj, objtype=None): + if obj is None: + return self + return self.fget(obj) + + +class test(Command): + """Command to run unit tests after in-place build""" + + description = "run unit tests after in-place build" + + user_options = [ + ('test-module=', 'm', "Run 'test_suite' in specified module"), + ('test-suite=', 's', + "Run single test, case or suite (e.g. 'module.test_suite')"), + ('test-runner=', 'r', "Test runner to use"), + ] + + def initialize_options(self): + self.test_suite = None + self.test_module = None + self.test_loader = None + self.test_runner = None + + def finalize_options(self): + + if self.test_suite and self.test_module: + msg = "You may specify a module or a suite, but not both" + raise DistutilsOptionError(msg) + + if self.test_suite is None: + if self.test_module is None: + self.test_suite = self.distribution.test_suite + else: + self.test_suite = self.test_module + ".test_suite" + + if self.test_loader is None: + self.test_loader = getattr(self.distribution, 'test_loader', None) + if self.test_loader is None: + self.test_loader = "setuptools.command.test:ScanningLoader" + if self.test_runner is None: + self.test_runner = getattr(self.distribution, 'test_runner', None) + + @NonDataProperty + def test_args(self): + return list(self._test_args()) + + def _test_args(self): + if not self.test_suite and sys.version_info >= (2, 7): + yield 'discover' + if self.verbose: + yield '--verbose' + if self.test_suite: + yield self.test_suite + + def with_project_on_sys_path(self, func): + """ + Backward compatibility for project_on_sys_path context. + """ + with self.project_on_sys_path(): + func() + + @contextlib.contextmanager + def project_on_sys_path(self, include_dists=[]): + with_2to3 = six.PY3 and getattr(self.distribution, 'use_2to3', False) + + if with_2to3: + # If we run 2to3 we can not do this inplace: + + # Ensure metadata is up-to-date + self.reinitialize_command('build_py', inplace=0) + self.run_command('build_py') + bpy_cmd = self.get_finalized_command("build_py") + build_path = normalize_path(bpy_cmd.build_lib) + + # Build extensions + self.reinitialize_command('egg_info', egg_base=build_path) + self.run_command('egg_info') + + self.reinitialize_command('build_ext', inplace=0) + self.run_command('build_ext') + else: + # Without 2to3 inplace works fine: + self.run_command('egg_info') + + # Build extensions in-place + self.reinitialize_command('build_ext', inplace=1) + self.run_command('build_ext') + + ei_cmd = self.get_finalized_command("egg_info") + + old_path = sys.path[:] + old_modules = sys.modules.copy() + + try: + project_path = normalize_path(ei_cmd.egg_base) + sys.path.insert(0, project_path) + working_set.__init__() + add_activation_listener(lambda dist: dist.activate()) + require('%s==%s' % (ei_cmd.egg_name, ei_cmd.egg_version)) + with self.paths_on_pythonpath([project_path]): + yield + finally: + sys.path[:] = old_path + sys.modules.clear() + sys.modules.update(old_modules) + working_set.__init__() + + @staticmethod + @contextlib.contextmanager + def paths_on_pythonpath(paths): + """ + Add the indicated paths to the head of the PYTHONPATH environment + variable so that subprocesses will also see the packages at + these paths. + + Do this in a context that restores the value on exit. + """ + nothing = object() + orig_pythonpath = os.environ.get('PYTHONPATH', nothing) + current_pythonpath = os.environ.get('PYTHONPATH', '') + try: + prefix = os.pathsep.join(paths) + to_join = filter(None, [prefix, current_pythonpath]) + new_path = os.pathsep.join(to_join) + if new_path: + os.environ['PYTHONPATH'] = new_path + yield + finally: + if orig_pythonpath is nothing: + os.environ.pop('PYTHONPATH', None) + else: + os.environ['PYTHONPATH'] = orig_pythonpath + + @staticmethod + def install_dists(dist): + """ + Install the requirements indicated by self.distribution and + return an iterable of the dists that were built. + """ + ir_d = dist.fetch_build_eggs(dist.install_requires) + tr_d = dist.fetch_build_eggs(dist.tests_require or []) + er_d = dist.fetch_build_eggs( + v for k, v in dist.extras_require.items() + if k.startswith(':') and evaluate_marker(k[1:]) + ) + return itertools.chain(ir_d, tr_d, er_d) + + def run(self): + installed_dists = self.install_dists(self.distribution) + + cmd = ' '.join(self._argv) + if self.dry_run: + self.announce('skipping "%s" (dry run)' % cmd) + return + + self.announce('running "%s"' % cmd) + + paths = map(operator.attrgetter('location'), installed_dists) + with self.paths_on_pythonpath(paths): + with self.project_on_sys_path(): + self.run_tests() + + def run_tests(self): + # Purge modules under test from sys.modules. The test loader will + # re-import them from the build location. Required when 2to3 is used + # with namespace packages. + if six.PY3 and getattr(self.distribution, 'use_2to3', False): + module = self.test_suite.split('.')[0] + if module in _namespace_packages: + del_modules = [] + if module in sys.modules: + del_modules.append(module) + module += '.' + for name in sys.modules: + if name.startswith(module): + del_modules.append(name) + list(map(sys.modules.__delitem__, del_modules)) + + test = unittest.main( + None, None, self._argv, + testLoader=self._resolve_as_ep(self.test_loader), + testRunner=self._resolve_as_ep(self.test_runner), + exit=False, + ) + if not test.result.wasSuccessful(): + msg = 'Test failed: %s' % test.result + self.announce(msg, log.ERROR) + raise DistutilsError(msg) + + @property + def _argv(self): + return ['unittest'] + self.test_args + + @staticmethod + def _resolve_as_ep(val): + """ + Load the indicated attribute value, called, as a as if it were + specified as an entry point. + """ + if val is None: + return + parsed = EntryPoint.parse("x=" + val) + return parsed.resolve()() diff --git a/week-0/day-3/venv/lib/python3.6/site-packages/setuptools/command/upload.py b/week-0/day-3/venv/lib/python3.6/site-packages/setuptools/command/upload.py new file mode 100644 index 00000000..a44173a9 --- /dev/null +++ b/week-0/day-3/venv/lib/python3.6/site-packages/setuptools/command/upload.py @@ -0,0 +1,42 @@ +import getpass +from distutils.command import upload as orig + + +class upload(orig.upload): + """ + Override default upload behavior to obtain password + in a variety of different ways. + """ + + def finalize_options(self): + orig.upload.finalize_options(self) + self.username = ( + self.username or + getpass.getuser() + ) + # Attempt to obtain password. Short circuit evaluation at the first + # sign of success. + self.password = ( + self.password or + self._load_password_from_keyring() or + self._prompt_for_password() + ) + + def _load_password_from_keyring(self): + """ + Attempt to load password from keyring. Suppress Exceptions. + """ + try: + keyring = __import__('keyring') + return keyring.get_password(self.repository, self.username) + except Exception: + pass + + def _prompt_for_password(self): + """ + Prompt for a password on the tty. Suppress Exceptions. + """ + try: + return getpass.getpass() + except (Exception, KeyboardInterrupt): + pass diff --git a/week-0/day-3/venv/lib/python3.6/site-packages/setuptools/command/upload_docs.py b/week-0/day-3/venv/lib/python3.6/site-packages/setuptools/command/upload_docs.py new file mode 100644 index 00000000..07aa564a --- /dev/null +++ b/week-0/day-3/venv/lib/python3.6/site-packages/setuptools/command/upload_docs.py @@ -0,0 +1,206 @@ +# -*- coding: utf-8 -*- +"""upload_docs + +Implements a Distutils 'upload_docs' subcommand (upload documentation to +PyPI's pythonhosted.org). +""" + +from base64 import standard_b64encode +from distutils import log +from distutils.errors import DistutilsOptionError +import os +import socket +import zipfile +import tempfile +import shutil +import itertools +import functools + +from setuptools.extern import six +from setuptools.extern.six.moves import http_client, urllib + +from pkg_resources import iter_entry_points +from .upload import upload + + +def _encode(s): + errors = 'surrogateescape' if six.PY3 else 'strict' + return s.encode('utf-8', errors) + + +class upload_docs(upload): + # override the default repository as upload_docs isn't + # supported by Warehouse (and won't be). + DEFAULT_REPOSITORY = 'https://pypi.python.org/pypi/' + + description = 'Upload documentation to PyPI' + + user_options = [ + ('repository=', 'r', + "url of repository [default: %s]" % upload.DEFAULT_REPOSITORY), + ('show-response', None, + 'display full response text from server'), + ('upload-dir=', None, 'directory to upload'), + ] + boolean_options = upload.boolean_options + + def has_sphinx(self): + if self.upload_dir is None: + for ep in iter_entry_points('distutils.commands', 'build_sphinx'): + return True + + sub_commands = [('build_sphinx', has_sphinx)] + + def initialize_options(self): + upload.initialize_options(self) + self.upload_dir = None + self.target_dir = None + + def finalize_options(self): + upload.finalize_options(self) + if self.upload_dir is None: + if self.has_sphinx(): + build_sphinx = self.get_finalized_command('build_sphinx') + self.target_dir = build_sphinx.builder_target_dir + else: + build = self.get_finalized_command('build') + self.target_dir = os.path.join(build.build_base, 'docs') + else: + self.ensure_dirname('upload_dir') + self.target_dir = self.upload_dir + if 'pypi.python.org' in self.repository: + log.warn("Upload_docs command is deprecated. Use RTD instead.") + self.announce('Using upload directory %s' % self.target_dir) + + def create_zipfile(self, filename): + zip_file = zipfile.ZipFile(filename, "w") + try: + self.mkpath(self.target_dir) # just in case + for root, dirs, files in os.walk(self.target_dir): + if root == self.target_dir and not files: + tmpl = "no files found in upload directory '%s'" + raise DistutilsOptionError(tmpl % self.target_dir) + for name in files: + full = os.path.join(root, name) + relative = root[len(self.target_dir):].lstrip(os.path.sep) + dest = os.path.join(relative, name) + zip_file.write(full, dest) + finally: + zip_file.close() + + def run(self): + # Run sub commands + for cmd_name in self.get_sub_commands(): + self.run_command(cmd_name) + + tmp_dir = tempfile.mkdtemp() + name = self.distribution.metadata.get_name() + zip_file = os.path.join(tmp_dir, "%s.zip" % name) + try: + self.create_zipfile(zip_file) + self.upload_file(zip_file) + finally: + shutil.rmtree(tmp_dir) + + @staticmethod + def _build_part(item, sep_boundary): + key, values = item + title = '\nContent-Disposition: form-data; name="%s"' % key + # handle multiple entries for the same name + if not isinstance(values, list): + values = [values] + for value in values: + if isinstance(value, tuple): + title += '; filename="%s"' % value[0] + value = value[1] + else: + value = _encode(value) + yield sep_boundary + yield _encode(title) + yield b"\n\n" + yield value + if value and value[-1:] == b'\r': + yield b'\n' # write an extra newline (lurve Macs) + + @classmethod + def _build_multipart(cls, data): + """ + Build up the MIME payload for the POST data + """ + boundary = b'--------------GHSKFJDLGDS7543FJKLFHRE75642756743254' + sep_boundary = b'\n--' + boundary + end_boundary = sep_boundary + b'--' + end_items = end_boundary, b"\n", + builder = functools.partial( + cls._build_part, + sep_boundary=sep_boundary, + ) + part_groups = map(builder, data.items()) + parts = itertools.chain.from_iterable(part_groups) + body_items = itertools.chain(parts, end_items) + content_type = 'multipart/form-data; boundary=%s' % boundary.decode('ascii') + return b''.join(body_items), content_type + + def upload_file(self, filename): + with open(filename, 'rb') as f: + content = f.read() + meta = self.distribution.metadata + data = { + ':action': 'doc_upload', + 'name': meta.get_name(), + 'content': (os.path.basename(filename), content), + } + # set up the authentication + credentials = _encode(self.username + ':' + self.password) + credentials = standard_b64encode(credentials) + if six.PY3: + credentials = credentials.decode('ascii') + auth = "Basic " + credentials + + body, ct = self._build_multipart(data) + + msg = "Submitting documentation to %s" % (self.repository) + self.announce(msg, log.INFO) + + # build the Request + # We can't use urllib2 since we need to send the Basic + # auth right with the first request + schema, netloc, url, params, query, fragments = \ + urllib.parse.urlparse(self.repository) + assert not params and not query and not fragments + if schema == 'http': + conn = http_client.HTTPConnection(netloc) + elif schema == 'https': + conn = http_client.HTTPSConnection(netloc) + else: + raise AssertionError("unsupported schema " + schema) + + data = '' + try: + conn.connect() + conn.putrequest("POST", url) + content_type = ct + conn.putheader('Content-type', content_type) + conn.putheader('Content-length', str(len(body))) + conn.putheader('Authorization', auth) + conn.endheaders() + conn.send(body) + except socket.error as e: + self.announce(str(e), log.ERROR) + return + + r = conn.getresponse() + if r.status == 200: + msg = 'Server response (%s): %s' % (r.status, r.reason) + self.announce(msg, log.INFO) + elif r.status == 301: + location = r.getheader('Location') + if location is None: + location = 'https://pythonhosted.org/%s/' % meta.get_name() + msg = 'Upload successful. Visit %s' % location + self.announce(msg, log.INFO) + else: + msg = 'Upload failed (%s): %s' % (r.status, r.reason) + self.announce(msg, log.ERROR) + if self.show_response: + print('-' * 75, r.read(), '-' * 75) diff --git a/week-0/day-3/venv/lib/python3.6/site-packages/setuptools/config.py b/week-0/day-3/venv/lib/python3.6/site-packages/setuptools/config.py new file mode 100644 index 00000000..8eddcae8 --- /dev/null +++ b/week-0/day-3/venv/lib/python3.6/site-packages/setuptools/config.py @@ -0,0 +1,556 @@ +from __future__ import absolute_import, unicode_literals +import io +import os +import sys +from collections import defaultdict +from functools import partial +from importlib import import_module + +from distutils.errors import DistutilsOptionError, DistutilsFileError +from setuptools.extern.six import string_types + + +def read_configuration( + filepath, find_others=False, ignore_option_errors=False): + """Read given configuration file and returns options from it as a dict. + + :param str|unicode filepath: Path to configuration file + to get options from. + + :param bool find_others: Whether to search for other configuration files + which could be on in various places. + + :param bool ignore_option_errors: Whether to silently ignore + options, values of which could not be resolved (e.g. due to exceptions + in directives such as file:, attr:, etc.). + If False exceptions are propagated as expected. + + :rtype: dict + """ + from setuptools.dist import Distribution, _Distribution + + filepath = os.path.abspath(filepath) + + if not os.path.isfile(filepath): + raise DistutilsFileError( + 'Configuration file %s does not exist.' % filepath) + + current_directory = os.getcwd() + os.chdir(os.path.dirname(filepath)) + + try: + dist = Distribution() + + filenames = dist.find_config_files() if find_others else [] + if filepath not in filenames: + filenames.append(filepath) + + _Distribution.parse_config_files(dist, filenames=filenames) + + handlers = parse_configuration( + dist, dist.command_options, + ignore_option_errors=ignore_option_errors) + + finally: + os.chdir(current_directory) + + return configuration_to_dict(handlers) + + +def configuration_to_dict(handlers): + """Returns configuration data gathered by given handlers as a dict. + + :param list[ConfigHandler] handlers: Handlers list, + usually from parse_configuration() + + :rtype: dict + """ + config_dict = defaultdict(dict) + + for handler in handlers: + + obj_alias = handler.section_prefix + target_obj = handler.target_obj + + for option in handler.set_options: + getter = getattr(target_obj, 'get_%s' % option, None) + + if getter is None: + value = getattr(target_obj, option) + + else: + value = getter() + + config_dict[obj_alias][option] = value + + return config_dict + + +def parse_configuration( + distribution, command_options, ignore_option_errors=False): + """Performs additional parsing of configuration options + for a distribution. + + Returns a list of used option handlers. + + :param Distribution distribution: + :param dict command_options: + :param bool ignore_option_errors: Whether to silently ignore + options, values of which could not be resolved (e.g. due to exceptions + in directives such as file:, attr:, etc.). + If False exceptions are propagated as expected. + :rtype: list + """ + meta = ConfigMetadataHandler( + distribution.metadata, command_options, ignore_option_errors) + meta.parse() + + options = ConfigOptionsHandler( + distribution, command_options, ignore_option_errors) + options.parse() + + return meta, options + + +class ConfigHandler(object): + """Handles metadata supplied in configuration files.""" + + section_prefix = None + """Prefix for config sections handled by this handler. + Must be provided by class heirs. + + """ + + aliases = {} + """Options aliases. + For compatibility with various packages. E.g.: d2to1 and pbr. + Note: `-` in keys is replaced with `_` by config parser. + + """ + + def __init__(self, target_obj, options, ignore_option_errors=False): + sections = {} + + section_prefix = self.section_prefix + for section_name, section_options in options.items(): + if not section_name.startswith(section_prefix): + continue + + section_name = section_name.replace(section_prefix, '').strip('.') + sections[section_name] = section_options + + self.ignore_option_errors = ignore_option_errors + self.target_obj = target_obj + self.sections = sections + self.set_options = [] + + @property + def parsers(self): + """Metadata item name to parser function mapping.""" + raise NotImplementedError( + '%s must provide .parsers property' % self.__class__.__name__) + + def __setitem__(self, option_name, value): + unknown = tuple() + target_obj = self.target_obj + + # Translate alias into real name. + option_name = self.aliases.get(option_name, option_name) + + current_value = getattr(target_obj, option_name, unknown) + + if current_value is unknown: + raise KeyError(option_name) + + if current_value: + # Already inhabited. Skipping. + return + + skip_option = False + parser = self.parsers.get(option_name) + if parser: + try: + value = parser(value) + + except Exception: + skip_option = True + if not self.ignore_option_errors: + raise + + if skip_option: + return + + setter = getattr(target_obj, 'set_%s' % option_name, None) + if setter is None: + setattr(target_obj, option_name, value) + else: + setter(value) + + self.set_options.append(option_name) + + @classmethod + def _parse_list(cls, value, separator=','): + """Represents value as a list. + + Value is split either by separator (defaults to comma) or by lines. + + :param value: + :param separator: List items separator character. + :rtype: list + """ + if isinstance(value, list): # _get_parser_compound case + return value + + if '\n' in value: + value = value.splitlines() + else: + value = value.split(separator) + + return [chunk.strip() for chunk in value if chunk.strip()] + + @classmethod + def _parse_dict(cls, value): + """Represents value as a dict. + + :param value: + :rtype: dict + """ + separator = '=' + result = {} + for line in cls._parse_list(value): + key, sep, val = line.partition(separator) + if sep != separator: + raise DistutilsOptionError( + 'Unable to parse option value to dict: %s' % value) + result[key.strip()] = val.strip() + + return result + + @classmethod + def _parse_bool(cls, value): + """Represents value as boolean. + + :param value: + :rtype: bool + """ + value = value.lower() + return value in ('1', 'true', 'yes') + + @classmethod + def _parse_file(cls, value): + """Represents value as a string, allowing including text + from nearest files using `file:` directive. + + Directive is sandboxed and won't reach anything outside + directory with setup.py. + + Examples: + file: LICENSE + file: README.rst, CHANGELOG.md, src/file.txt + + :param str value: + :rtype: str + """ + include_directive = 'file:' + + if not isinstance(value, string_types): + return value + + if not value.startswith(include_directive): + return value + + spec = value[len(include_directive):] + filepaths = (os.path.abspath(path.strip()) for path in spec.split(',')) + return '\n'.join( + cls._read_file(path) + for path in filepaths + if (cls._assert_local(path) or True) + and os.path.isfile(path) + ) + + @staticmethod + def _assert_local(filepath): + if not filepath.startswith(os.getcwd()): + raise DistutilsOptionError( + '`file:` directive can not access %s' % filepath) + + @staticmethod + def _read_file(filepath): + with io.open(filepath, encoding='utf-8') as f: + return f.read() + + @classmethod + def _parse_attr(cls, value): + """Represents value as a module attribute. + + Examples: + attr: package.attr + attr: package.module.attr + + :param str value: + :rtype: str + """ + attr_directive = 'attr:' + if not value.startswith(attr_directive): + return value + + attrs_path = value.replace(attr_directive, '').strip().split('.') + attr_name = attrs_path.pop() + + module_name = '.'.join(attrs_path) + module_name = module_name or '__init__' + + sys.path.insert(0, os.getcwd()) + try: + module = import_module(module_name) + value = getattr(module, attr_name) + + finally: + sys.path = sys.path[1:] + + return value + + @classmethod + def _get_parser_compound(cls, *parse_methods): + """Returns parser function to represents value as a list. + + Parses a value applying given methods one after another. + + :param parse_methods: + :rtype: callable + """ + def parse(value): + parsed = value + + for method in parse_methods: + parsed = method(parsed) + + return parsed + + return parse + + @classmethod + def _parse_section_to_dict(cls, section_options, values_parser=None): + """Parses section options into a dictionary. + + Optionally applies a given parser to values. + + :param dict section_options: + :param callable values_parser: + :rtype: dict + """ + value = {} + values_parser = values_parser or (lambda val: val) + for key, (_, val) in section_options.items(): + value[key] = values_parser(val) + return value + + def parse_section(self, section_options): + """Parses configuration file section. + + :param dict section_options: + """ + for (name, (_, value)) in section_options.items(): + try: + self[name] = value + + except KeyError: + pass # Keep silent for a new option may appear anytime. + + def parse(self): + """Parses configuration file items from one + or more related sections. + + """ + for section_name, section_options in self.sections.items(): + + method_postfix = '' + if section_name: # [section.option] variant + method_postfix = '_%s' % section_name + + section_parser_method = getattr( + self, + # Dots in section names are tranlsated into dunderscores. + ('parse_section%s' % method_postfix).replace('.', '__'), + None) + + if section_parser_method is None: + raise DistutilsOptionError( + 'Unsupported distribution option section: [%s.%s]' % ( + self.section_prefix, section_name)) + + section_parser_method(section_options) + + +class ConfigMetadataHandler(ConfigHandler): + + section_prefix = 'metadata' + + aliases = { + 'home_page': 'url', + 'summary': 'description', + 'classifier': 'classifiers', + 'platform': 'platforms', + } + + strict_mode = False + """We need to keep it loose, to be partially compatible with + `pbr` and `d2to1` packages which also uses `metadata` section. + + """ + + @property + def parsers(self): + """Metadata item name to parser function mapping.""" + parse_list = self._parse_list + parse_file = self._parse_file + parse_dict = self._parse_dict + + return { + 'platforms': parse_list, + 'keywords': parse_list, + 'provides': parse_list, + 'requires': parse_list, + 'obsoletes': parse_list, + 'classifiers': self._get_parser_compound(parse_file, parse_list), + 'license': parse_file, + 'description': parse_file, + 'long_description': parse_file, + 'version': self._parse_version, + 'project_urls': parse_dict, + } + + def _parse_version(self, value): + """Parses `version` option value. + + :param value: + :rtype: str + + """ + version = self._parse_attr(value) + + if callable(version): + version = version() + + if not isinstance(version, string_types): + if hasattr(version, '__iter__'): + version = '.'.join(map(str, version)) + else: + version = '%s' % version + + return version + + +class ConfigOptionsHandler(ConfigHandler): + + section_prefix = 'options' + + @property + def parsers(self): + """Metadata item name to parser function mapping.""" + parse_list = self._parse_list + parse_list_semicolon = partial(self._parse_list, separator=';') + parse_bool = self._parse_bool + parse_dict = self._parse_dict + + return { + 'zip_safe': parse_bool, + 'use_2to3': parse_bool, + 'include_package_data': parse_bool, + 'package_dir': parse_dict, + 'use_2to3_fixers': parse_list, + 'use_2to3_exclude_fixers': parse_list, + 'convert_2to3_doctests': parse_list, + 'scripts': parse_list, + 'eager_resources': parse_list, + 'dependency_links': parse_list, + 'namespace_packages': parse_list, + 'install_requires': parse_list_semicolon, + 'setup_requires': parse_list_semicolon, + 'tests_require': parse_list_semicolon, + 'packages': self._parse_packages, + 'entry_points': self._parse_file, + 'py_modules': parse_list, + } + + def _parse_packages(self, value): + """Parses `packages` option value. + + :param value: + :rtype: list + """ + find_directive = 'find:' + + if not value.startswith(find_directive): + return self._parse_list(value) + + # Read function arguments from a dedicated section. + find_kwargs = self.parse_section_packages__find( + self.sections.get('packages.find', {})) + + from setuptools import find_packages + + return find_packages(**find_kwargs) + + def parse_section_packages__find(self, section_options): + """Parses `packages.find` configuration file section. + + To be used in conjunction with _parse_packages(). + + :param dict section_options: + """ + section_data = self._parse_section_to_dict( + section_options, self._parse_list) + + valid_keys = ['where', 'include', 'exclude'] + + find_kwargs = dict( + [(k, v) for k, v in section_data.items() if k in valid_keys and v]) + + where = find_kwargs.get('where') + if where is not None: + find_kwargs['where'] = where[0] # cast list to single val + + return find_kwargs + + def parse_section_entry_points(self, section_options): + """Parses `entry_points` configuration file section. + + :param dict section_options: + """ + parsed = self._parse_section_to_dict(section_options, self._parse_list) + self['entry_points'] = parsed + + def _parse_package_data(self, section_options): + parsed = self._parse_section_to_dict(section_options, self._parse_list) + + root = parsed.get('*') + if root: + parsed[''] = root + del parsed['*'] + + return parsed + + def parse_section_package_data(self, section_options): + """Parses `package_data` configuration file section. + + :param dict section_options: + """ + self['package_data'] = self._parse_package_data(section_options) + + def parse_section_exclude_package_data(self, section_options): + """Parses `exclude_package_data` configuration file section. + + :param dict section_options: + """ + self['exclude_package_data'] = self._parse_package_data( + section_options) + + def parse_section_extras_require(self, section_options): + """Parses `extras_require` configuration file section. + + :param dict section_options: + """ + parse_list = partial(self._parse_list, separator=';') + self['extras_require'] = self._parse_section_to_dict( + section_options, parse_list) diff --git a/week-0/day-3/venv/lib/python3.6/site-packages/setuptools/dep_util.py b/week-0/day-3/venv/lib/python3.6/site-packages/setuptools/dep_util.py new file mode 100644 index 00000000..2931c13e --- /dev/null +++ b/week-0/day-3/venv/lib/python3.6/site-packages/setuptools/dep_util.py @@ -0,0 +1,23 @@ +from distutils.dep_util import newer_group + +# yes, this is was almost entirely copy-pasted from +# 'newer_pairwise()', this is just another convenience +# function. +def newer_pairwise_group(sources_groups, targets): + """Walk both arguments in parallel, testing if each source group is newer + than its corresponding target. Returns a pair of lists (sources_groups, + targets) where sources is newer than target, according to the semantics + of 'newer_group()'. + """ + if len(sources_groups) != len(targets): + raise ValueError("'sources_group' and 'targets' must be the same length") + + # build a pair of lists (sources_groups, targets) where source is newer + n_sources = [] + n_targets = [] + for i in range(len(sources_groups)): + if newer_group(sources_groups[i], targets[i]): + n_sources.append(sources_groups[i]) + n_targets.append(targets[i]) + + return n_sources, n_targets diff --git a/week-0/day-3/venv/lib/python3.6/site-packages/setuptools/depends.py b/week-0/day-3/venv/lib/python3.6/site-packages/setuptools/depends.py new file mode 100644 index 00000000..45e7052d --- /dev/null +++ b/week-0/day-3/venv/lib/python3.6/site-packages/setuptools/depends.py @@ -0,0 +1,186 @@ +import sys +import imp +import marshal +from distutils.version import StrictVersion +from imp import PKG_DIRECTORY, PY_COMPILED, PY_SOURCE, PY_FROZEN + +from .py33compat import Bytecode + + +__all__ = [ + 'Require', 'find_module', 'get_module_constant', 'extract_constant' +] + + +class Require: + """A prerequisite to building or installing a distribution""" + + def __init__(self, name, requested_version, module, homepage='', + attribute=None, format=None): + + if format is None and requested_version is not None: + format = StrictVersion + + if format is not None: + requested_version = format(requested_version) + if attribute is None: + attribute = '__version__' + + self.__dict__.update(locals()) + del self.self + + def full_name(self): + """Return full package/distribution name, w/version""" + if self.requested_version is not None: + return '%s-%s' % (self.name, self.requested_version) + return self.name + + def version_ok(self, version): + """Is 'version' sufficiently up-to-date?""" + return self.attribute is None or self.format is None or \ + str(version) != "unknown" and version >= self.requested_version + + def get_version(self, paths=None, default="unknown"): + """Get version number of installed module, 'None', or 'default' + + Search 'paths' for module. If not found, return 'None'. If found, + return the extracted version attribute, or 'default' if no version + attribute was specified, or the value cannot be determined without + importing the module. The version is formatted according to the + requirement's version format (if any), unless it is 'None' or the + supplied 'default'. + """ + + if self.attribute is None: + try: + f, p, i = find_module(self.module, paths) + if f: + f.close() + return default + except ImportError: + return None + + v = get_module_constant(self.module, self.attribute, default, paths) + + if v is not None and v is not default and self.format is not None: + return self.format(v) + + return v + + def is_present(self, paths=None): + """Return true if dependency is present on 'paths'""" + return self.get_version(paths) is not None + + def is_current(self, paths=None): + """Return true if dependency is present and up-to-date on 'paths'""" + version = self.get_version(paths) + if version is None: + return False + return self.version_ok(version) + + +def find_module(module, paths=None): + """Just like 'imp.find_module()', but with package support""" + + parts = module.split('.') + + while parts: + part = parts.pop(0) + f, path, (suffix, mode, kind) = info = imp.find_module(part, paths) + + if kind == PKG_DIRECTORY: + parts = parts or ['__init__'] + paths = [path] + + elif parts: + raise ImportError("Can't find %r in %s" % (parts, module)) + + return info + + +def get_module_constant(module, symbol, default=-1, paths=None): + """Find 'module' by searching 'paths', and extract 'symbol' + + Return 'None' if 'module' does not exist on 'paths', or it does not define + 'symbol'. If the module defines 'symbol' as a constant, return the + constant. Otherwise, return 'default'.""" + + try: + f, path, (suffix, mode, kind) = find_module(module, paths) + except ImportError: + # Module doesn't exist + return None + + try: + if kind == PY_COMPILED: + f.read(8) # skip magic & date + code = marshal.load(f) + elif kind == PY_FROZEN: + code = imp.get_frozen_object(module) + elif kind == PY_SOURCE: + code = compile(f.read(), path, 'exec') + else: + # Not something we can parse; we'll have to import it. :( + if module not in sys.modules: + imp.load_module(module, f, path, (suffix, mode, kind)) + return getattr(sys.modules[module], symbol, None) + + finally: + if f: + f.close() + + return extract_constant(code, symbol, default) + + +def extract_constant(code, symbol, default=-1): + """Extract the constant value of 'symbol' from 'code' + + If the name 'symbol' is bound to a constant value by the Python code + object 'code', return that value. If 'symbol' is bound to an expression, + return 'default'. Otherwise, return 'None'. + + Return value is based on the first assignment to 'symbol'. 'symbol' must + be a global, or at least a non-"fast" local in the code block. That is, + only 'STORE_NAME' and 'STORE_GLOBAL' opcodes are checked, and 'symbol' + must be present in 'code.co_names'. + """ + if symbol not in code.co_names: + # name's not there, can't possibly be an assignment + return None + + name_idx = list(code.co_names).index(symbol) + + STORE_NAME = 90 + STORE_GLOBAL = 97 + LOAD_CONST = 100 + + const = default + + for byte_code in Bytecode(code): + op = byte_code.opcode + arg = byte_code.arg + + if op == LOAD_CONST: + const = code.co_consts[arg] + elif arg == name_idx and (op == STORE_NAME or op == STORE_GLOBAL): + return const + else: + const = default + + +def _update_globals(): + """ + Patch the globals to remove the objects not available on some platforms. + + XXX it'd be better to test assertions about bytecode instead. + """ + + if not sys.platform.startswith('java') and sys.platform != 'cli': + return + incompatible = 'extract_constant', 'get_module_constant' + for name in incompatible: + del globals()[name] + __all__.remove(name) + + +_update_globals() diff --git a/week-0/day-3/venv/lib/python3.6/site-packages/setuptools/dist.py b/week-0/day-3/venv/lib/python3.6/site-packages/setuptools/dist.py new file mode 100644 index 00000000..5dc696ff --- /dev/null +++ b/week-0/day-3/venv/lib/python3.6/site-packages/setuptools/dist.py @@ -0,0 +1,1070 @@ +# -*- coding: utf-8 -*- +__all__ = ['Distribution'] + +import re +import os +import warnings +import numbers +import distutils.log +import distutils.core +import distutils.cmd +import distutils.dist +import itertools +from collections import defaultdict +from distutils.errors import ( + DistutilsOptionError, DistutilsPlatformError, DistutilsSetupError, +) +from distutils.util import rfc822_escape +from distutils.version import StrictVersion + +from setuptools.extern import six +from setuptools.extern import packaging +from setuptools.extern.six.moves import map, filter, filterfalse + +from setuptools.depends import Require +from setuptools import windows_support +from setuptools.monkey import get_unpatched +from setuptools.config import parse_configuration +import pkg_resources +from .py36compat import Distribution_parse_config_files + +__import__('setuptools.extern.packaging.specifiers') +__import__('setuptools.extern.packaging.version') + + +def _get_unpatched(cls): + warnings.warn("Do not call this function", DeprecationWarning) + return get_unpatched(cls) + + +def get_metadata_version(dist_md): + if dist_md.long_description_content_type or dist_md.provides_extras: + return StrictVersion('2.1') + elif (dist_md.maintainer is not None or + dist_md.maintainer_email is not None or + getattr(dist_md, 'python_requires', None) is not None): + return StrictVersion('1.2') + elif (dist_md.provides or dist_md.requires or dist_md.obsoletes or + dist_md.classifiers or dist_md.download_url): + return StrictVersion('1.1') + + return StrictVersion('1.0') + + +# Based on Python 3.5 version +def write_pkg_file(self, file): + """Write the PKG-INFO format data to a file object. + """ + version = get_metadata_version(self) + + file.write('Metadata-Version: %s\n' % version) + file.write('Name: %s\n' % self.get_name()) + file.write('Version: %s\n' % self.get_version()) + file.write('Summary: %s\n' % self.get_description()) + file.write('Home-page: %s\n' % self.get_url()) + + if version < StrictVersion('1.2'): + file.write('Author: %s\n' % self.get_contact()) + file.write('Author-email: %s\n' % self.get_contact_email()) + else: + optional_fields = ( + ('Author', 'author'), + ('Author-email', 'author_email'), + ('Maintainer', 'maintainer'), + ('Maintainer-email', 'maintainer_email'), + ) + + for field, attr in optional_fields: + attr_val = getattr(self, attr) + if six.PY2: + attr_val = self._encode_field(attr_val) + + if attr_val is not None: + file.write('%s: %s\n' % (field, attr_val)) + + file.write('License: %s\n' % self.get_license()) + if self.download_url: + file.write('Download-URL: %s\n' % self.download_url) + for project_url in self.project_urls.items(): + file.write('Project-URL: %s, %s\n' % project_url) + + long_desc = rfc822_escape(self.get_long_description()) + file.write('Description: %s\n' % long_desc) + + keywords = ','.join(self.get_keywords()) + if keywords: + file.write('Keywords: %s\n' % keywords) + + if version >= StrictVersion('1.2'): + for platform in self.get_platforms(): + file.write('Platform: %s\n' % platform) + else: + self._write_list(file, 'Platform', self.get_platforms()) + + self._write_list(file, 'Classifier', self.get_classifiers()) + + # PEP 314 + self._write_list(file, 'Requires', self.get_requires()) + self._write_list(file, 'Provides', self.get_provides()) + self._write_list(file, 'Obsoletes', self.get_obsoletes()) + + # Setuptools specific for PEP 345 + if hasattr(self, 'python_requires'): + file.write('Requires-Python: %s\n' % self.python_requires) + + # PEP 566 + if self.long_description_content_type: + file.write( + 'Description-Content-Type: %s\n' % + self.long_description_content_type + ) + if self.provides_extras: + for extra in sorted(self.provides_extras): + file.write('Provides-Extra: %s\n' % extra) + + +# from Python 3.4 +def write_pkg_info(self, base_dir): + """Write the PKG-INFO file into the release tree. + """ + with open(os.path.join(base_dir, 'PKG-INFO'), 'w', + encoding='UTF-8') as pkg_info: + self.write_pkg_file(pkg_info) + + +sequence = tuple, list + + +def check_importable(dist, attr, value): + try: + ep = pkg_resources.EntryPoint.parse('x=' + value) + assert not ep.extras + except (TypeError, ValueError, AttributeError, AssertionError): + raise DistutilsSetupError( + "%r must be importable 'module:attrs' string (got %r)" + % (attr, value) + ) + + +def assert_string_list(dist, attr, value): + """Verify that value is a string list or None""" + try: + assert ''.join(value) != value + except (TypeError, ValueError, AttributeError, AssertionError): + raise DistutilsSetupError( + "%r must be a list of strings (got %r)" % (attr, value) + ) + + +def check_nsp(dist, attr, value): + """Verify that namespace packages are valid""" + ns_packages = value + assert_string_list(dist, attr, ns_packages) + for nsp in ns_packages: + if not dist.has_contents_for(nsp): + raise DistutilsSetupError( + "Distribution contains no modules or packages for " + + "namespace package %r" % nsp + ) + parent, sep, child = nsp.rpartition('.') + if parent and parent not in ns_packages: + distutils.log.warn( + "WARNING: %r is declared as a package namespace, but %r" + " is not: please correct this in setup.py", nsp, parent + ) + + +def check_extras(dist, attr, value): + """Verify that extras_require mapping is valid""" + try: + list(itertools.starmap(_check_extra, value.items())) + except (TypeError, ValueError, AttributeError): + raise DistutilsSetupError( + "'extras_require' must be a dictionary whose values are " + "strings or lists of strings containing valid project/version " + "requirement specifiers." + ) + + +def _check_extra(extra, reqs): + name, sep, marker = extra.partition(':') + if marker and pkg_resources.invalid_marker(marker): + raise DistutilsSetupError("Invalid environment marker: " + marker) + list(pkg_resources.parse_requirements(reqs)) + + +def assert_bool(dist, attr, value): + """Verify that value is True, False, 0, or 1""" + if bool(value) != value: + tmpl = "{attr!r} must be a boolean value (got {value!r})" + raise DistutilsSetupError(tmpl.format(attr=attr, value=value)) + + +def check_requirements(dist, attr, value): + """Verify that install_requires is a valid requirements list""" + try: + list(pkg_resources.parse_requirements(value)) + if isinstance(value, (dict, set)): + raise TypeError("Unordered types are not allowed") + except (TypeError, ValueError) as error: + tmpl = ( + "{attr!r} must be a string or list of strings " + "containing valid project/version requirement specifiers; {error}" + ) + raise DistutilsSetupError(tmpl.format(attr=attr, error=error)) + + +def check_specifier(dist, attr, value): + """Verify that value is a valid version specifier""" + try: + packaging.specifiers.SpecifierSet(value) + except packaging.specifiers.InvalidSpecifier as error: + tmpl = ( + "{attr!r} must be a string " + "containing valid version specifiers; {error}" + ) + raise DistutilsSetupError(tmpl.format(attr=attr, error=error)) + + +def check_entry_points(dist, attr, value): + """Verify that entry_points map is parseable""" + try: + pkg_resources.EntryPoint.parse_map(value) + except ValueError as e: + raise DistutilsSetupError(e) + + +def check_test_suite(dist, attr, value): + if not isinstance(value, six.string_types): + raise DistutilsSetupError("test_suite must be a string") + + +def check_package_data(dist, attr, value): + """Verify that value is a dictionary of package names to glob lists""" + if isinstance(value, dict): + for k, v in value.items(): + if not isinstance(k, str): + break + try: + iter(v) + except TypeError: + break + else: + return + raise DistutilsSetupError( + attr + " must be a dictionary mapping package names to lists of " + "wildcard patterns" + ) + + +def check_packages(dist, attr, value): + for pkgname in value: + if not re.match(r'\w+(\.\w+)*', pkgname): + distutils.log.warn( + "WARNING: %r not a valid package name; please use only " + ".-separated package names in setup.py", pkgname + ) + + +_Distribution = get_unpatched(distutils.core.Distribution) + + +class Distribution(Distribution_parse_config_files, _Distribution): + """Distribution with support for features, tests, and package data + + This is an enhanced version of 'distutils.dist.Distribution' that + effectively adds the following new optional keyword arguments to 'setup()': + + 'install_requires' -- a string or sequence of strings specifying project + versions that the distribution requires when installed, in the format + used by 'pkg_resources.require()'. They will be installed + automatically when the package is installed. If you wish to use + packages that are not available in PyPI, or want to give your users an + alternate download location, you can add a 'find_links' option to the + '[easy_install]' section of your project's 'setup.cfg' file, and then + setuptools will scan the listed web pages for links that satisfy the + requirements. + + 'extras_require' -- a dictionary mapping names of optional "extras" to the + additional requirement(s) that using those extras incurs. For example, + this:: + + extras_require = dict(reST = ["docutils>=0.3", "reSTedit"]) + + indicates that the distribution can optionally provide an extra + capability called "reST", but it can only be used if docutils and + reSTedit are installed. If the user installs your package using + EasyInstall and requests one of your extras, the corresponding + additional requirements will be installed if needed. + + 'features' **deprecated** -- a dictionary mapping option names to + 'setuptools.Feature' + objects. Features are a portion of the distribution that can be + included or excluded based on user options, inter-feature dependencies, + and availability on the current system. Excluded features are omitted + from all setup commands, including source and binary distributions, so + you can create multiple distributions from the same source tree. + Feature names should be valid Python identifiers, except that they may + contain the '-' (minus) sign. Features can be included or excluded + via the command line options '--with-X' and '--without-X', where 'X' is + the name of the feature. Whether a feature is included by default, and + whether you are allowed to control this from the command line, is + determined by the Feature object. See the 'Feature' class for more + information. + + 'test_suite' -- the name of a test suite to run for the 'test' command. + If the user runs 'python setup.py test', the package will be installed, + and the named test suite will be run. The format is the same as + would be used on a 'unittest.py' command line. That is, it is the + dotted name of an object to import and call to generate a test suite. + + 'package_data' -- a dictionary mapping package names to lists of filenames + or globs to use to find data files contained in the named packages. + If the dictionary has filenames or globs listed under '""' (the empty + string), those names will be searched for in every package, in addition + to any names for the specific package. Data files found using these + names/globs will be installed along with the package, in the same + location as the package. Note that globs are allowed to reference + the contents of non-package subdirectories, as long as you use '/' as + a path separator. (Globs are automatically converted to + platform-specific paths at runtime.) + + In addition to these new keywords, this class also has several new methods + for manipulating the distribution's contents. For example, the 'include()' + and 'exclude()' methods can be thought of as in-place add and subtract + commands that add or remove packages, modules, extensions, and so on from + the distribution. They are used by the feature subsystem to configure the + distribution for the included and excluded features. + """ + + _patched_dist = None + + def patch_missing_pkg_info(self, attrs): + # Fake up a replacement for the data that would normally come from + # PKG-INFO, but which might not yet be built if this is a fresh + # checkout. + # + if not attrs or 'name' not in attrs or 'version' not in attrs: + return + key = pkg_resources.safe_name(str(attrs['name'])).lower() + dist = pkg_resources.working_set.by_key.get(key) + if dist is not None and not dist.has_metadata('PKG-INFO'): + dist._version = pkg_resources.safe_version(str(attrs['version'])) + self._patched_dist = dist + + def __init__(self, attrs=None): + have_package_data = hasattr(self, "package_data") + if not have_package_data: + self.package_data = {} + attrs = attrs or {} + if 'features' in attrs or 'require_features' in attrs: + Feature.warn_deprecated() + self.require_features = [] + self.features = {} + self.dist_files = [] + self.src_root = attrs.pop("src_root", None) + self.patch_missing_pkg_info(attrs) + self.project_urls = attrs.get('project_urls', {}) + self.dependency_links = attrs.pop('dependency_links', []) + self.setup_requires = attrs.pop('setup_requires', []) + for ep in pkg_resources.iter_entry_points('distutils.setup_keywords'): + vars(self).setdefault(ep.name, None) + _Distribution.__init__(self, attrs) + + # The project_urls attribute may not be supported in distutils, so + # prime it here from our value if not automatically set + self.metadata.project_urls = getattr( + self.metadata, 'project_urls', self.project_urls) + self.metadata.long_description_content_type = attrs.get( + 'long_description_content_type' + ) + self.metadata.provides_extras = getattr( + self.metadata, 'provides_extras', set() + ) + + if isinstance(self.metadata.version, numbers.Number): + # Some people apparently take "version number" too literally :) + self.metadata.version = str(self.metadata.version) + + if self.metadata.version is not None: + try: + ver = packaging.version.Version(self.metadata.version) + normalized_version = str(ver) + if self.metadata.version != normalized_version: + warnings.warn( + "Normalizing '%s' to '%s'" % ( + self.metadata.version, + normalized_version, + ) + ) + self.metadata.version = normalized_version + except (packaging.version.InvalidVersion, TypeError): + warnings.warn( + "The version specified (%r) is an invalid version, this " + "may not work as expected with newer versions of " + "setuptools, pip, and PyPI. Please see PEP 440 for more " + "details." % self.metadata.version + ) + self._finalize_requires() + + def _finalize_requires(self): + """ + Set `metadata.python_requires` and fix environment markers + in `install_requires` and `extras_require`. + """ + if getattr(self, 'python_requires', None): + self.metadata.python_requires = self.python_requires + + if getattr(self, 'extras_require', None): + for extra in self.extras_require.keys(): + # Since this gets called multiple times at points where the + # keys have become 'converted' extras, ensure that we are only + # truly adding extras we haven't seen before here. + extra = extra.split(':')[0] + if extra: + self.metadata.provides_extras.add(extra) + + self._convert_extras_requirements() + self._move_install_requirements_markers() + + def _convert_extras_requirements(self): + """ + Convert requirements in `extras_require` of the form + `"extra": ["barbazquux; {marker}"]` to + `"extra:{marker}": ["barbazquux"]`. + """ + spec_ext_reqs = getattr(self, 'extras_require', None) or {} + self._tmp_extras_require = defaultdict(list) + for section, v in spec_ext_reqs.items(): + # Do not strip empty sections. + self._tmp_extras_require[section] + for r in pkg_resources.parse_requirements(v): + suffix = self._suffix_for(r) + self._tmp_extras_require[section + suffix].append(r) + + @staticmethod + def _suffix_for(req): + """ + For a requirement, return the 'extras_require' suffix for + that requirement. + """ + return ':' + str(req.marker) if req.marker else '' + + def _move_install_requirements_markers(self): + """ + Move requirements in `install_requires` that are using environment + markers `extras_require`. + """ + + # divide the install_requires into two sets, simple ones still + # handled by install_requires and more complex ones handled + # by extras_require. + + def is_simple_req(req): + return not req.marker + + spec_inst_reqs = getattr(self, 'install_requires', None) or () + inst_reqs = list(pkg_resources.parse_requirements(spec_inst_reqs)) + simple_reqs = filter(is_simple_req, inst_reqs) + complex_reqs = filterfalse(is_simple_req, inst_reqs) + self.install_requires = list(map(str, simple_reqs)) + + for r in complex_reqs: + self._tmp_extras_require[':' + str(r.marker)].append(r) + self.extras_require = dict( + (k, [str(r) for r in map(self._clean_req, v)]) + for k, v in self._tmp_extras_require.items() + ) + + def _clean_req(self, req): + """ + Given a Requirement, remove environment markers and return it. + """ + req.marker = None + return req + + def parse_config_files(self, filenames=None, ignore_option_errors=False): + """Parses configuration files from various levels + and loads configuration. + + """ + _Distribution.parse_config_files(self, filenames=filenames) + + parse_configuration(self, self.command_options, + ignore_option_errors=ignore_option_errors) + self._finalize_requires() + + def parse_command_line(self): + """Process features after parsing command line options""" + result = _Distribution.parse_command_line(self) + if self.features: + self._finalize_features() + return result + + def _feature_attrname(self, name): + """Convert feature name to corresponding option attribute name""" + return 'with_' + name.replace('-', '_') + + def fetch_build_eggs(self, requires): + """Resolve pre-setup requirements""" + resolved_dists = pkg_resources.working_set.resolve( + pkg_resources.parse_requirements(requires), + installer=self.fetch_build_egg, + replace_conflicting=True, + ) + for dist in resolved_dists: + pkg_resources.working_set.add(dist, replace=True) + return resolved_dists + + def finalize_options(self): + _Distribution.finalize_options(self) + if self.features: + self._set_global_opts_from_features() + + for ep in pkg_resources.iter_entry_points('distutils.setup_keywords'): + value = getattr(self, ep.name, None) + if value is not None: + ep.require(installer=self.fetch_build_egg) + ep.load()(self, ep.name, value) + if getattr(self, 'convert_2to3_doctests', None): + # XXX may convert to set here when we can rely on set being builtin + self.convert_2to3_doctests = [ + os.path.abspath(p) + for p in self.convert_2to3_doctests + ] + else: + self.convert_2to3_doctests = [] + + def get_egg_cache_dir(self): + egg_cache_dir = os.path.join(os.curdir, '.eggs') + if not os.path.exists(egg_cache_dir): + os.mkdir(egg_cache_dir) + windows_support.hide_file(egg_cache_dir) + readme_txt_filename = os.path.join(egg_cache_dir, 'README.txt') + with open(readme_txt_filename, 'w') as f: + f.write('This directory contains eggs that were downloaded ' + 'by setuptools to build, test, and run plug-ins.\n\n') + f.write('This directory caches those eggs to prevent ' + 'repeated downloads.\n\n') + f.write('However, it is safe to delete this directory.\n\n') + + return egg_cache_dir + + def fetch_build_egg(self, req): + """Fetch an egg needed for building""" + from setuptools.command.easy_install import easy_install + dist = self.__class__({'script_args': ['easy_install']}) + opts = dist.get_option_dict('easy_install') + opts.clear() + opts.update( + (k, v) + for k, v in self.get_option_dict('easy_install').items() + if k in ( + # don't use any other settings + 'find_links', 'site_dirs', 'index_url', + 'optimize', 'site_dirs', 'allow_hosts', + )) + if self.dependency_links: + links = self.dependency_links[:] + if 'find_links' in opts: + links = opts['find_links'][1] + links + opts['find_links'] = ('setup', links) + install_dir = self.get_egg_cache_dir() + cmd = easy_install( + dist, args=["x"], install_dir=install_dir, + exclude_scripts=True, + always_copy=False, build_directory=None, editable=False, + upgrade=False, multi_version=True, no_report=True, user=False + ) + cmd.ensure_finalized() + return cmd.easy_install(req) + + def _set_global_opts_from_features(self): + """Add --with-X/--without-X options based on optional features""" + + go = [] + no = self.negative_opt.copy() + + for name, feature in self.features.items(): + self._set_feature(name, None) + feature.validate(self) + + if feature.optional: + descr = feature.description + incdef = ' (default)' + excdef = '' + if not feature.include_by_default(): + excdef, incdef = incdef, excdef + + new = ( + ('with-' + name, None, 'include ' + descr + incdef), + ('without-' + name, None, 'exclude ' + descr + excdef), + ) + go.extend(new) + no['without-' + name] = 'with-' + name + + self.global_options = self.feature_options = go + self.global_options + self.negative_opt = self.feature_negopt = no + + def _finalize_features(self): + """Add/remove features and resolve dependencies between them""" + + # First, flag all the enabled items (and thus their dependencies) + for name, feature in self.features.items(): + enabled = self.feature_is_included(name) + if enabled or (enabled is None and feature.include_by_default()): + feature.include_in(self) + self._set_feature(name, 1) + + # Then disable the rest, so that off-by-default features don't + # get flagged as errors when they're required by an enabled feature + for name, feature in self.features.items(): + if not self.feature_is_included(name): + feature.exclude_from(self) + self._set_feature(name, 0) + + def get_command_class(self, command): + """Pluggable version of get_command_class()""" + if command in self.cmdclass: + return self.cmdclass[command] + + eps = pkg_resources.iter_entry_points('distutils.commands', command) + for ep in eps: + ep.require(installer=self.fetch_build_egg) + self.cmdclass[command] = cmdclass = ep.load() + return cmdclass + else: + return _Distribution.get_command_class(self, command) + + def print_commands(self): + for ep in pkg_resources.iter_entry_points('distutils.commands'): + if ep.name not in self.cmdclass: + # don't require extras as the commands won't be invoked + cmdclass = ep.resolve() + self.cmdclass[ep.name] = cmdclass + return _Distribution.print_commands(self) + + def get_command_list(self): + for ep in pkg_resources.iter_entry_points('distutils.commands'): + if ep.name not in self.cmdclass: + # don't require extras as the commands won't be invoked + cmdclass = ep.resolve() + self.cmdclass[ep.name] = cmdclass + return _Distribution.get_command_list(self) + + def _set_feature(self, name, status): + """Set feature's inclusion status""" + setattr(self, self._feature_attrname(name), status) + + def feature_is_included(self, name): + """Return 1 if feature is included, 0 if excluded, 'None' if unknown""" + return getattr(self, self._feature_attrname(name)) + + def include_feature(self, name): + """Request inclusion of feature named 'name'""" + + if self.feature_is_included(name) == 0: + descr = self.features[name].description + raise DistutilsOptionError( + descr + " is required, but was excluded or is not available" + ) + self.features[name].include_in(self) + self._set_feature(name, 1) + + def include(self, **attrs): + """Add items to distribution that are named in keyword arguments + + For example, 'dist.exclude(py_modules=["x"])' would add 'x' to + the distribution's 'py_modules' attribute, if it was not already + there. + + Currently, this method only supports inclusion for attributes that are + lists or tuples. If you need to add support for adding to other + attributes in this or a subclass, you can add an '_include_X' method, + where 'X' is the name of the attribute. The method will be called with + the value passed to 'include()'. So, 'dist.include(foo={"bar":"baz"})' + will try to call 'dist._include_foo({"bar":"baz"})', which can then + handle whatever special inclusion logic is needed. + """ + for k, v in attrs.items(): + include = getattr(self, '_include_' + k, None) + if include: + include(v) + else: + self._include_misc(k, v) + + def exclude_package(self, package): + """Remove packages, modules, and extensions in named package""" + + pfx = package + '.' + if self.packages: + self.packages = [ + p for p in self.packages + if p != package and not p.startswith(pfx) + ] + + if self.py_modules: + self.py_modules = [ + p for p in self.py_modules + if p != package and not p.startswith(pfx) + ] + + if self.ext_modules: + self.ext_modules = [ + p for p in self.ext_modules + if p.name != package and not p.name.startswith(pfx) + ] + + def has_contents_for(self, package): + """Return true if 'exclude_package(package)' would do something""" + + pfx = package + '.' + + for p in self.iter_distribution_names(): + if p == package or p.startswith(pfx): + return True + + def _exclude_misc(self, name, value): + """Handle 'exclude()' for list/tuple attrs without a special handler""" + if not isinstance(value, sequence): + raise DistutilsSetupError( + "%s: setting must be a list or tuple (%r)" % (name, value) + ) + try: + old = getattr(self, name) + except AttributeError: + raise DistutilsSetupError( + "%s: No such distribution setting" % name + ) + if old is not None and not isinstance(old, sequence): + raise DistutilsSetupError( + name + ": this setting cannot be changed via include/exclude" + ) + elif old: + setattr(self, name, [item for item in old if item not in value]) + + def _include_misc(self, name, value): + """Handle 'include()' for list/tuple attrs without a special handler""" + + if not isinstance(value, sequence): + raise DistutilsSetupError( + "%s: setting must be a list (%r)" % (name, value) + ) + try: + old = getattr(self, name) + except AttributeError: + raise DistutilsSetupError( + "%s: No such distribution setting" % name + ) + if old is None: + setattr(self, name, value) + elif not isinstance(old, sequence): + raise DistutilsSetupError( + name + ": this setting cannot be changed via include/exclude" + ) + else: + new = [item for item in value if item not in old] + setattr(self, name, old + new) + + def exclude(self, **attrs): + """Remove items from distribution that are named in keyword arguments + + For example, 'dist.exclude(py_modules=["x"])' would remove 'x' from + the distribution's 'py_modules' attribute. Excluding packages uses + the 'exclude_package()' method, so all of the package's contained + packages, modules, and extensions are also excluded. + + Currently, this method only supports exclusion from attributes that are + lists or tuples. If you need to add support for excluding from other + attributes in this or a subclass, you can add an '_exclude_X' method, + where 'X' is the name of the attribute. The method will be called with + the value passed to 'exclude()'. So, 'dist.exclude(foo={"bar":"baz"})' + will try to call 'dist._exclude_foo({"bar":"baz"})', which can then + handle whatever special exclusion logic is needed. + """ + for k, v in attrs.items(): + exclude = getattr(self, '_exclude_' + k, None) + if exclude: + exclude(v) + else: + self._exclude_misc(k, v) + + def _exclude_packages(self, packages): + if not isinstance(packages, sequence): + raise DistutilsSetupError( + "packages: setting must be a list or tuple (%r)" % (packages,) + ) + list(map(self.exclude_package, packages)) + + def _parse_command_opts(self, parser, args): + # Remove --with-X/--without-X options when processing command args + self.global_options = self.__class__.global_options + self.negative_opt = self.__class__.negative_opt + + # First, expand any aliases + command = args[0] + aliases = self.get_option_dict('aliases') + while command in aliases: + src, alias = aliases[command] + del aliases[command] # ensure each alias can expand only once! + import shlex + args[:1] = shlex.split(alias, True) + command = args[0] + + nargs = _Distribution._parse_command_opts(self, parser, args) + + # Handle commands that want to consume all remaining arguments + cmd_class = self.get_command_class(command) + if getattr(cmd_class, 'command_consumes_arguments', None): + self.get_option_dict(command)['args'] = ("command line", nargs) + if nargs is not None: + return [] + + return nargs + + def get_cmdline_options(self): + """Return a '{cmd: {opt:val}}' map of all command-line options + + Option names are all long, but do not include the leading '--', and + contain dashes rather than underscores. If the option doesn't take + an argument (e.g. '--quiet'), the 'val' is 'None'. + + Note that options provided by config files are intentionally excluded. + """ + + d = {} + + for cmd, opts in self.command_options.items(): + + for opt, (src, val) in opts.items(): + + if src != "command line": + continue + + opt = opt.replace('_', '-') + + if val == 0: + cmdobj = self.get_command_obj(cmd) + neg_opt = self.negative_opt.copy() + neg_opt.update(getattr(cmdobj, 'negative_opt', {})) + for neg, pos in neg_opt.items(): + if pos == opt: + opt = neg + val = None + break + else: + raise AssertionError("Shouldn't be able to get here") + + elif val == 1: + val = None + + d.setdefault(cmd, {})[opt] = val + + return d + + def iter_distribution_names(self): + """Yield all packages, modules, and extension names in distribution""" + + for pkg in self.packages or (): + yield pkg + + for module in self.py_modules or (): + yield module + + for ext in self.ext_modules or (): + if isinstance(ext, tuple): + name, buildinfo = ext + else: + name = ext.name + if name.endswith('module'): + name = name[:-6] + yield name + + def handle_display_options(self, option_order): + """If there were any non-global "display-only" options + (--help-commands or the metadata display options) on the command + line, display the requested info and return true; else return + false. + """ + import sys + + if six.PY2 or self.help_commands: + return _Distribution.handle_display_options(self, option_order) + + # Stdout may be StringIO (e.g. in tests) + import io + if not isinstance(sys.stdout, io.TextIOWrapper): + return _Distribution.handle_display_options(self, option_order) + + # Don't wrap stdout if utf-8 is already the encoding. Provides + # workaround for #334. + if sys.stdout.encoding.lower() in ('utf-8', 'utf8'): + return _Distribution.handle_display_options(self, option_order) + + # Print metadata in UTF-8 no matter the platform + encoding = sys.stdout.encoding + errors = sys.stdout.errors + newline = sys.platform != 'win32' and '\n' or None + line_buffering = sys.stdout.line_buffering + + sys.stdout = io.TextIOWrapper( + sys.stdout.detach(), 'utf-8', errors, newline, line_buffering) + try: + return _Distribution.handle_display_options(self, option_order) + finally: + sys.stdout = io.TextIOWrapper( + sys.stdout.detach(), encoding, errors, newline, line_buffering) + + +class Feature: + """ + **deprecated** -- The `Feature` facility was never completely implemented + or supported, `has reported issues + <https://github.com/pypa/setuptools/issues/58>`_ and will be removed in + a future version. + + A subset of the distribution that can be excluded if unneeded/wanted + + Features are created using these keyword arguments: + + 'description' -- a short, human readable description of the feature, to + be used in error messages, and option help messages. + + 'standard' -- if true, the feature is included by default if it is + available on the current system. Otherwise, the feature is only + included if requested via a command line '--with-X' option, or if + another included feature requires it. The default setting is 'False'. + + 'available' -- if true, the feature is available for installation on the + current system. The default setting is 'True'. + + 'optional' -- if true, the feature's inclusion can be controlled from the + command line, using the '--with-X' or '--without-X' options. If + false, the feature's inclusion status is determined automatically, + based on 'availabile', 'standard', and whether any other feature + requires it. The default setting is 'True'. + + 'require_features' -- a string or sequence of strings naming features + that should also be included if this feature is included. Defaults to + empty list. May also contain 'Require' objects that should be + added/removed from the distribution. + + 'remove' -- a string or list of strings naming packages to be removed + from the distribution if this feature is *not* included. If the + feature *is* included, this argument is ignored. This argument exists + to support removing features that "crosscut" a distribution, such as + defining a 'tests' feature that removes all the 'tests' subpackages + provided by other features. The default for this argument is an empty + list. (Note: the named package(s) or modules must exist in the base + distribution when the 'setup()' function is initially called.) + + other keywords -- any other keyword arguments are saved, and passed to + the distribution's 'include()' and 'exclude()' methods when the + feature is included or excluded, respectively. So, for example, you + could pass 'packages=["a","b"]' to cause packages 'a' and 'b' to be + added or removed from the distribution as appropriate. + + A feature must include at least one 'requires', 'remove', or other + keyword argument. Otherwise, it can't affect the distribution in any way. + Note also that you can subclass 'Feature' to create your own specialized + feature types that modify the distribution in other ways when included or + excluded. See the docstrings for the various methods here for more detail. + Aside from the methods, the only feature attributes that distributions look + at are 'description' and 'optional'. + """ + + @staticmethod + def warn_deprecated(): + msg = ( + "Features are deprecated and will be removed in a future " + "version. See https://github.com/pypa/setuptools/issues/65." + ) + warnings.warn(msg, DeprecationWarning, stacklevel=3) + + def __init__( + self, description, standard=False, available=True, + optional=True, require_features=(), remove=(), **extras): + self.warn_deprecated() + + self.description = description + self.standard = standard + self.available = available + self.optional = optional + if isinstance(require_features, (str, Require)): + require_features = require_features, + + self.require_features = [ + r for r in require_features if isinstance(r, str) + ] + er = [r for r in require_features if not isinstance(r, str)] + if er: + extras['require_features'] = er + + if isinstance(remove, str): + remove = remove, + self.remove = remove + self.extras = extras + + if not remove and not require_features and not extras: + raise DistutilsSetupError( + "Feature %s: must define 'require_features', 'remove', or " + "at least one of 'packages', 'py_modules', etc." + ) + + def include_by_default(self): + """Should this feature be included by default?""" + return self.available and self.standard + + def include_in(self, dist): + """Ensure feature and its requirements are included in distribution + + You may override this in a subclass to perform additional operations on + the distribution. Note that this method may be called more than once + per feature, and so should be idempotent. + + """ + + if not self.available: + raise DistutilsPlatformError( + self.description + " is required, " + "but is not available on this platform" + ) + + dist.include(**self.extras) + + for f in self.require_features: + dist.include_feature(f) + + def exclude_from(self, dist): + """Ensure feature is excluded from distribution + + You may override this in a subclass to perform additional operations on + the distribution. This method will be called at most once per + feature, and only after all included features have been asked to + include themselves. + """ + + dist.exclude(**self.extras) + + if self.remove: + for item in self.remove: + dist.exclude_package(item) + + def validate(self, dist): + """Verify that feature makes sense in context of distribution + + This method is called by the distribution just before it parses its + command line. It checks to ensure that the 'remove' attribute, if any, + contains only valid package/module names that are present in the base + distribution when 'setup()' is called. You may override it in a + subclass to perform any other required validation of the feature + against a target distribution. + """ + + for item in self.remove: + if not dist.has_contents_for(item): + raise DistutilsSetupError( + "%s wants to be able to remove %s, but the distribution" + " doesn't contain any packages or modules under %s" + % (self.description, item, item) + ) diff --git a/week-0/day-3/venv/lib/python3.6/site-packages/setuptools/extension.py b/week-0/day-3/venv/lib/python3.6/site-packages/setuptools/extension.py new file mode 100644 index 00000000..29468894 --- /dev/null +++ b/week-0/day-3/venv/lib/python3.6/site-packages/setuptools/extension.py @@ -0,0 +1,57 @@ +import re +import functools +import distutils.core +import distutils.errors +import distutils.extension + +from setuptools.extern.six.moves import map + +from .monkey import get_unpatched + + +def _have_cython(): + """ + Return True if Cython can be imported. + """ + cython_impl = 'Cython.Distutils.build_ext' + try: + # from (cython_impl) import build_ext + __import__(cython_impl, fromlist=['build_ext']).build_ext + return True + except Exception: + pass + return False + + +# for compatibility +have_pyrex = _have_cython + +_Extension = get_unpatched(distutils.core.Extension) + + +class Extension(_Extension): + """Extension that uses '.c' files in place of '.pyx' files""" + + def __init__(self, name, sources, *args, **kw): + # The *args is needed for compatibility as calls may use positional + # arguments. py_limited_api may be set only via keyword. + self.py_limited_api = kw.pop("py_limited_api", False) + _Extension.__init__(self, name, sources, *args, **kw) + + def _convert_pyx_sources_to_lang(self): + """ + Replace sources with .pyx extensions to sources with the target + language extension. This mechanism allows language authors to supply + pre-converted sources but to prefer the .pyx sources. + """ + if _have_cython(): + # the build has Cython, so allow it to compile the .pyx files + return + lang = self.language or '' + target_ext = '.cpp' if lang.lower() == 'c++' else '.c' + sub = functools.partial(re.sub, '.pyx$', target_ext) + self.sources = list(map(sub, self.sources)) + + +class Library(Extension): + """Just like a regular Extension, but built as a library instead""" diff --git a/week-0/day-3/venv/lib/python3.6/site-packages/setuptools/extern/__init__.py b/week-0/day-3/venv/lib/python3.6/site-packages/setuptools/extern/__init__.py new file mode 100644 index 00000000..da3d668d --- /dev/null +++ b/week-0/day-3/venv/lib/python3.6/site-packages/setuptools/extern/__init__.py @@ -0,0 +1,73 @@ +import sys + + +class VendorImporter: + """ + A PEP 302 meta path importer for finding optionally-vendored + or otherwise naturally-installed packages from root_name. + """ + + def __init__(self, root_name, vendored_names=(), vendor_pkg=None): + self.root_name = root_name + self.vendored_names = set(vendored_names) + self.vendor_pkg = vendor_pkg or root_name.replace('extern', '_vendor') + + @property + def search_path(self): + """ + Search first the vendor package then as a natural package. + """ + yield self.vendor_pkg + '.' + yield '' + + def find_module(self, fullname, path=None): + """ + Return self when fullname starts with root_name and the + target module is one vendored through this importer. + """ + root, base, target = fullname.partition(self.root_name + '.') + if root: + return + if not any(map(target.startswith, self.vendored_names)): + return + return self + + def load_module(self, fullname): + """ + Iterate over the search path to locate and load fullname. + """ + root, base, target = fullname.partition(self.root_name + '.') + for prefix in self.search_path: + try: + extant = prefix + target + __import__(extant) + mod = sys.modules[extant] + sys.modules[fullname] = mod + # mysterious hack: + # Remove the reference to the extant package/module + # on later Python versions to cause relative imports + # in the vendor package to resolve the same modules + # as those going through this importer. + if sys.version_info > (3, 3): + del sys.modules[extant] + return mod + except ImportError: + pass + else: + raise ImportError( + "The '{target}' package is required; " + "normally this is bundled with this package so if you get " + "this warning, consult the packager of your " + "distribution.".format(**locals()) + ) + + def install(self): + """ + Install this importer into sys.meta_path if not already present. + """ + if self not in sys.meta_path: + sys.meta_path.append(self) + + +names = 'six', 'packaging', 'pyparsing', +VendorImporter(__name__, names, 'setuptools._vendor').install() diff --git a/week-0/day-3/venv/lib/python3.6/site-packages/setuptools/extern/__pycache__/__init__.cpython-36.pyc b/week-0/day-3/venv/lib/python3.6/site-packages/setuptools/extern/__pycache__/__init__.cpython-36.pyc new file mode 100644 index 0000000000000000000000000000000000000000..13f31f1243f86e25b7320a1f7b3b6e22722e95f9 GIT binary patch literal 2387 zcmZ`)-HsbI6t?Ftli6&5O6=02t}G!@1<`Dwl|WF?R<uGDC{%4#Afg)0#?J0!Co{9Q z)7^y04Owx8xZ@#s4&K7IT=f;W;v7$s-F8(+K6b|T@$vaSf4;rB8QuHgv*-Ub3Hg^? zC?53ppsFqyPB_g-pL|QW!`(B&-G$SqJnTDy3RgJ1v2aJ;f>4<EgmjuOVGZdG(5{LL zojs`PJ{Un@HR(H?_T3@)9D-NwozcE0eD3q$j4WtB;G4X`L-^X@O&*<*e#kd?3)&`k zV3)ROKNC4G<il}UNG;^-EMidZu}2RcvD>#kWn-ZeRwnw8rOPR7SV%TZbDri0tSEI_ z<VluIZ@#dO1h)=gN}&&hJV}*cd7>xM&Pj8np(8lB92_MFLb0JN#!ME4j`L(Jx^{JM zfT_cREgt(DsOm#76|G22G_9Nk_MFNscPct^Ipxm6fiE5>a4@%L0&xll%1tA#BkTC4 zx!%XPN@&ww#ccOhrXfX{B?DoidLS;34mzIkl*oqChuviZ4d6`vCUOIs|MqtExZEw% z^5*^|&G=1qtWNhQgFCz6e^TnA$kfGd9n)?cr+KR5xLZz5xcU=;KNWx>G@uckZ9jVj zn(k`efZ`k|*g8;=Bx(yxMMl7$ZSo9R<XG!MGQ8RMHm!*46OqWlA>b#KW`Gc@PrAYb zKjkb@ELowp8mW;%7lw8X>2;{h12h=7O-5~6@Yif8yHAYFc?-j{fch;uyY||tE=(LC z(pWGFxWJ<RIdlMFJRHTtE$A=q+?{)KzjEac(pWp%t^AP(GyDbcLfyfymF2<g_w~^q z10phK2qrthV-6=-hNNRaN~sk)NrC2Tim)W-n2z;&m~<dC8y9?%36?5W<g4@nq4l9G zCI^Sm!pQ2boF`4T;TXM6V45ZDmEx_jj52PLPmMcHN)y##U=)^ToxrBngsV7>hv_sP zhG@L~L<tkrL0w8e-p{y>bQ?BS2nzAHs0Y6*P%pu7VZi`7g(ZZF3oQ(PK<5$+4gzsn zLgJnK<oVONKmDTeD{q_31Aru0P)f8n@~hw~nK!D2?bEyXE#Ur<C;Rp2SEOn@0mOCV zD3T=w_EPdQIo|mR>W}c1yQ6SObaO%eqzn2R<sPs)n0>c~<{{klL<?5D5E3y1kS)!v zaOr|&#Q=v9(X2@L8u{1od5Hv^{q+<a-1xQ5?EJ>+0wCg298Xdy_?Ij%<QOGwiML|= zlboZlSrS<iEG3Sqf~7+?EhY@<V~0)>nS*?O%mziSCRu$Gm-9h6?QF?-s<ce^CrFlV zuj9z~Av|k3k$eaHR+HX_o{2ymtU$*xXxkLDtVUm%7UV>M2aud$VK!=|e;{QcO#o6p zPP7RyKbh);^<91!T_bJeduXnr|Dcp&n4VfyO>zy4E%+tYVQ!bK`v4ZH9Wcb(qAlvs z5PlJjf(TlVwrS)zG;lBR@Pdm=I%j!!4O~`4gBTn&<QBFgkbPvDeK(!i<8xNjug$Ah zlBGEi0y5Oar_Bl!!jl)8C7BcnpE5YA61hGnN3Y|`>#(nBuGg3#DNE4jH|Squ`O@vd zs#^OzQ1q?Wv~M}7LwlVF-vJaOzz?vj!GnG)j*lmal_~hwh+|$1;#h8CG+`-=Qb;|O zNCAnNk@!Z+4jO!(E*QMX5^pvNtJQ<h^PINd3Zqtd-Hrfp0AUa)e42rt(4B%>Dd^6w yoWEz?)r0EFU37X2%_m?wzRgnY%g4hg`4JAjDIOEvtq=M&K4tdp3*Gj8kNyvrZ*&&` literal 0 HcmV?d00001 diff --git a/week-0/day-3/venv/lib/python3.6/site-packages/setuptools/glibc.py b/week-0/day-3/venv/lib/python3.6/site-packages/setuptools/glibc.py new file mode 100644 index 00000000..a134591c --- /dev/null +++ b/week-0/day-3/venv/lib/python3.6/site-packages/setuptools/glibc.py @@ -0,0 +1,86 @@ +# This file originally from pip: +# https://github.com/pypa/pip/blob/8f4f15a5a95d7d5b511ceaee9ed261176c181970/src/pip/_internal/utils/glibc.py +from __future__ import absolute_import + +import ctypes +import re +import warnings + + +def glibc_version_string(): + "Returns glibc version string, or None if not using glibc." + + # ctypes.CDLL(None) internally calls dlopen(NULL), and as the dlopen + # manpage says, "If filename is NULL, then the returned handle is for the + # main program". This way we can let the linker do the work to figure out + # which libc our process is actually using. + process_namespace = ctypes.CDLL(None) + try: + gnu_get_libc_version = process_namespace.gnu_get_libc_version + except AttributeError: + # Symbol doesn't exist -> therefore, we are not linked to + # glibc. + return None + + # Call gnu_get_libc_version, which returns a string like "2.5" + gnu_get_libc_version.restype = ctypes.c_char_p + version_str = gnu_get_libc_version() + # py2 / py3 compatibility: + if not isinstance(version_str, str): + version_str = version_str.decode("ascii") + + return version_str + + +# Separated out from have_compatible_glibc for easier unit testing +def check_glibc_version(version_str, required_major, minimum_minor): + # Parse string and check against requested version. + # + # We use a regexp instead of str.split because we want to discard any + # random junk that might come after the minor version -- this might happen + # in patched/forked versions of glibc (e.g. Linaro's version of glibc + # uses version strings like "2.20-2014.11"). See gh-3588. + m = re.match(r"(?P<major>[0-9]+)\.(?P<minor>[0-9]+)", version_str) + if not m: + warnings.warn("Expected glibc version with 2 components major.minor," + " got: %s" % version_str, RuntimeWarning) + return False + return (int(m.group("major")) == required_major and + int(m.group("minor")) >= minimum_minor) + + +def have_compatible_glibc(required_major, minimum_minor): + version_str = glibc_version_string() + if version_str is None: + return False + return check_glibc_version(version_str, required_major, minimum_minor) + + +# platform.libc_ver regularly returns completely nonsensical glibc +# versions. E.g. on my computer, platform says: +# +# ~$ python2.7 -c 'import platform; print(platform.libc_ver())' +# ('glibc', '2.7') +# ~$ python3.5 -c 'import platform; print(platform.libc_ver())' +# ('glibc', '2.9') +# +# But the truth is: +# +# ~$ ldd --version +# ldd (Debian GLIBC 2.22-11) 2.22 +# +# This is unfortunate, because it means that the linehaul data on libc +# versions that was generated by pip 8.1.2 and earlier is useless and +# misleading. Solution: instead of using platform, use our code that actually +# works. +def libc_ver(): + """Try to determine the glibc version + + Returns a tuple of strings (lib, version) which default to empty strings + in case the lookup fails. + """ + glibc_version = glibc_version_string() + if glibc_version is None: + return ("", "") + else: + return ("glibc", glibc_version) diff --git a/week-0/day-3/venv/lib/python3.6/site-packages/setuptools/glob.py b/week-0/day-3/venv/lib/python3.6/site-packages/setuptools/glob.py new file mode 100644 index 00000000..6c781de3 --- /dev/null +++ b/week-0/day-3/venv/lib/python3.6/site-packages/setuptools/glob.py @@ -0,0 +1,176 @@ +""" +Filename globbing utility. Mostly a copy of `glob` from Python 3.5. + +Changes include: + * `yield from` and PEP3102 `*` removed. + * `bytes` changed to `six.binary_type`. + * Hidden files are not ignored. +""" + +import os +import re +import fnmatch +from setuptools.extern.six import binary_type + +__all__ = ["glob", "iglob", "escape"] + + +def glob(pathname, recursive=False): + """Return a list of paths matching a pathname pattern. + + The pattern may contain simple shell-style wildcards a la + fnmatch. However, unlike fnmatch, filenames starting with a + dot are special cases that are not matched by '*' and '?' + patterns. + + If recursive is true, the pattern '**' will match any files and + zero or more directories and subdirectories. + """ + return list(iglob(pathname, recursive=recursive)) + + +def iglob(pathname, recursive=False): + """Return an iterator which yields the paths matching a pathname pattern. + + The pattern may contain simple shell-style wildcards a la + fnmatch. However, unlike fnmatch, filenames starting with a + dot are special cases that are not matched by '*' and '?' + patterns. + + If recursive is true, the pattern '**' will match any files and + zero or more directories and subdirectories. + """ + it = _iglob(pathname, recursive) + if recursive and _isrecursive(pathname): + s = next(it) # skip empty string + assert not s + return it + + +def _iglob(pathname, recursive): + dirname, basename = os.path.split(pathname) + if not has_magic(pathname): + if basename: + if os.path.lexists(pathname): + yield pathname + else: + # Patterns ending with a slash should match only directories + if os.path.isdir(dirname): + yield pathname + return + if not dirname: + if recursive and _isrecursive(basename): + for x in glob2(dirname, basename): + yield x + else: + for x in glob1(dirname, basename): + yield x + return + # `os.path.split()` returns the argument itself as a dirname if it is a + # drive or UNC path. Prevent an infinite recursion if a drive or UNC path + # contains magic characters (i.e. r'\\?\C:'). + if dirname != pathname and has_magic(dirname): + dirs = _iglob(dirname, recursive) + else: + dirs = [dirname] + if has_magic(basename): + if recursive and _isrecursive(basename): + glob_in_dir = glob2 + else: + glob_in_dir = glob1 + else: + glob_in_dir = glob0 + for dirname in dirs: + for name in glob_in_dir(dirname, basename): + yield os.path.join(dirname, name) + + +# These 2 helper functions non-recursively glob inside a literal directory. +# They return a list of basenames. `glob1` accepts a pattern while `glob0` +# takes a literal basename (so it only has to check for its existence). + + +def glob1(dirname, pattern): + if not dirname: + if isinstance(pattern, binary_type): + dirname = os.curdir.encode('ASCII') + else: + dirname = os.curdir + try: + names = os.listdir(dirname) + except OSError: + return [] + return fnmatch.filter(names, pattern) + + +def glob0(dirname, basename): + if not basename: + # `os.path.split()` returns an empty basename for paths ending with a + # directory separator. 'q*x/' should match only directories. + if os.path.isdir(dirname): + return [basename] + else: + if os.path.lexists(os.path.join(dirname, basename)): + return [basename] + return [] + + +# This helper function recursively yields relative pathnames inside a literal +# directory. + + +def glob2(dirname, pattern): + assert _isrecursive(pattern) + yield pattern[:0] + for x in _rlistdir(dirname): + yield x + + +# Recursively yields relative pathnames inside a literal directory. +def _rlistdir(dirname): + if not dirname: + if isinstance(dirname, binary_type): + dirname = binary_type(os.curdir, 'ASCII') + else: + dirname = os.curdir + try: + names = os.listdir(dirname) + except os.error: + return + for x in names: + yield x + path = os.path.join(dirname, x) if dirname else x + for y in _rlistdir(path): + yield os.path.join(x, y) + + +magic_check = re.compile('([*?[])') +magic_check_bytes = re.compile(b'([*?[])') + + +def has_magic(s): + if isinstance(s, binary_type): + match = magic_check_bytes.search(s) + else: + match = magic_check.search(s) + return match is not None + + +def _isrecursive(pattern): + if isinstance(pattern, binary_type): + return pattern == b'**' + else: + return pattern == '**' + + +def escape(pathname): + """Escape all special characters. + """ + # Escaping is done by wrapping any of "*?[" between square brackets. + # Metacharacters do not work in the drive part and shouldn't be escaped. + drive, pathname = os.path.splitdrive(pathname) + if isinstance(pathname, binary_type): + pathname = magic_check_bytes.sub(br'[\1]', pathname) + else: + pathname = magic_check.sub(r'[\1]', pathname) + return drive + pathname diff --git a/week-0/day-3/venv/lib/python3.6/site-packages/setuptools/gui-32.exe b/week-0/day-3/venv/lib/python3.6/site-packages/setuptools/gui-32.exe new file mode 100644 index 0000000000000000000000000000000000000000..f8d3509653ba8f80ca7f3aa7f95616142ba83a94 GIT binary patch literal 65536 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 literal 0 HcmV?d00001 diff --git a/week-0/day-3/venv/lib/python3.6/site-packages/setuptools/gui-64.exe b/week-0/day-3/venv/lib/python3.6/site-packages/setuptools/gui-64.exe new file mode 100644 index 0000000000000000000000000000000000000000..330c51a5dde15a0bb610a48cd0ca11770c914dae GIT binary patch literal 75264 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 literal 0 HcmV?d00001 diff --git a/week-0/day-3/venv/lib/python3.6/site-packages/setuptools/gui.exe b/week-0/day-3/venv/lib/python3.6/site-packages/setuptools/gui.exe new file mode 100644 index 0000000000000000000000000000000000000000..f8d3509653ba8f80ca7f3aa7f95616142ba83a94 GIT binary patch literal 65536 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 literal 0 HcmV?d00001 diff --git a/week-0/day-3/venv/lib/python3.6/site-packages/setuptools/launch.py b/week-0/day-3/venv/lib/python3.6/site-packages/setuptools/launch.py new file mode 100644 index 00000000..308283ea --- /dev/null +++ b/week-0/day-3/venv/lib/python3.6/site-packages/setuptools/launch.py @@ -0,0 +1,35 @@ +""" +Launch the Python script on the command line after +setuptools is bootstrapped via import. +""" + +# Note that setuptools gets imported implicitly by the +# invocation of this script using python -m setuptools.launch + +import tokenize +import sys + + +def run(): + """ + Run the script in sys.argv[1] as if it had + been invoked naturally. + """ + __builtins__ + script_name = sys.argv[1] + namespace = dict( + __file__=script_name, + __name__='__main__', + __doc__=None, + ) + sys.argv[:] = sys.argv[1:] + + open_ = getattr(tokenize, 'open', open) + script = open_(script_name).read() + norm_script = script.replace('\\r\\n', '\\n') + code = compile(norm_script, script_name, 'exec') + exec(code, namespace) + + +if __name__ == '__main__': + run() diff --git a/week-0/day-3/venv/lib/python3.6/site-packages/setuptools/lib2to3_ex.py b/week-0/day-3/venv/lib/python3.6/site-packages/setuptools/lib2to3_ex.py new file mode 100644 index 00000000..4b1a73fe --- /dev/null +++ b/week-0/day-3/venv/lib/python3.6/site-packages/setuptools/lib2to3_ex.py @@ -0,0 +1,62 @@ +""" +Customized Mixin2to3 support: + + - adds support for converting doctests + + +This module raises an ImportError on Python 2. +""" + +from distutils.util import Mixin2to3 as _Mixin2to3 +from distutils import log +from lib2to3.refactor import RefactoringTool, get_fixers_from_package + +import setuptools + + +class DistutilsRefactoringTool(RefactoringTool): + def log_error(self, msg, *args, **kw): + log.error(msg, *args) + + def log_message(self, msg, *args): + log.info(msg, *args) + + def log_debug(self, msg, *args): + log.debug(msg, *args) + + +class Mixin2to3(_Mixin2to3): + def run_2to3(self, files, doctests=False): + # See of the distribution option has been set, otherwise check the + # setuptools default. + if self.distribution.use_2to3 is not True: + return + if not files: + return + log.info("Fixing " + " ".join(files)) + self.__build_fixer_names() + self.__exclude_fixers() + if doctests: + if setuptools.run_2to3_on_doctests: + r = DistutilsRefactoringTool(self.fixer_names) + r.refactor(files, write=True, doctests_only=True) + else: + _Mixin2to3.run_2to3(self, files) + + def __build_fixer_names(self): + if self.fixer_names: + return + self.fixer_names = [] + for p in setuptools.lib2to3_fixer_packages: + self.fixer_names.extend(get_fixers_from_package(p)) + if self.distribution.use_2to3_fixers is not None: + for p in self.distribution.use_2to3_fixers: + self.fixer_names.extend(get_fixers_from_package(p)) + + def __exclude_fixers(self): + excluded_fixers = getattr(self, 'exclude_fixers', []) + if self.distribution.use_2to3_exclude_fixers is not None: + excluded_fixers.extend(self.distribution.use_2to3_exclude_fixers) + for fixer_name in excluded_fixers: + if fixer_name in self.fixer_names: + self.fixer_names.remove(fixer_name) diff --git a/week-0/day-3/venv/lib/python3.6/site-packages/setuptools/monkey.py b/week-0/day-3/venv/lib/python3.6/site-packages/setuptools/monkey.py new file mode 100644 index 00000000..d9eb7d7b --- /dev/null +++ b/week-0/day-3/venv/lib/python3.6/site-packages/setuptools/monkey.py @@ -0,0 +1,197 @@ +""" +Monkey patching of distutils. +""" + +import sys +import distutils.filelist +import platform +import types +import functools +from importlib import import_module +import inspect + +from setuptools.extern import six + +import setuptools + +__all__ = [] +""" +Everything is private. Contact the project team +if you think you need this functionality. +""" + + +def _get_mro(cls): + """ + Returns the bases classes for cls sorted by the MRO. + + Works around an issue on Jython where inspect.getmro will not return all + base classes if multiple classes share the same name. Instead, this + function will return a tuple containing the class itself, and the contents + of cls.__bases__. See https://github.com/pypa/setuptools/issues/1024. + """ + if platform.python_implementation() == "Jython": + return (cls,) + cls.__bases__ + return inspect.getmro(cls) + + +def get_unpatched(item): + lookup = ( + get_unpatched_class if isinstance(item, six.class_types) else + get_unpatched_function if isinstance(item, types.FunctionType) else + lambda item: None + ) + return lookup(item) + + +def get_unpatched_class(cls): + """Protect against re-patching the distutils if reloaded + + Also ensures that no other distutils extension monkeypatched the distutils + first. + """ + external_bases = ( + cls + for cls in _get_mro(cls) + if not cls.__module__.startswith('setuptools') + ) + base = next(external_bases) + if not base.__module__.startswith('distutils'): + msg = "distutils has already been patched by %r" % cls + raise AssertionError(msg) + return base + + +def patch_all(): + # we can't patch distutils.cmd, alas + distutils.core.Command = setuptools.Command + + has_issue_12885 = sys.version_info <= (3, 5, 3) + + if has_issue_12885: + # fix findall bug in distutils (http://bugs.python.org/issue12885) + distutils.filelist.findall = setuptools.findall + + needs_warehouse = ( + sys.version_info < (2, 7, 13) + or + (3, 0) < sys.version_info < (3, 3, 7) + or + (3, 4) < sys.version_info < (3, 4, 6) + or + (3, 5) < sys.version_info <= (3, 5, 3) + ) + + if needs_warehouse: + warehouse = 'https://upload.pypi.org/legacy/' + distutils.config.PyPIRCCommand.DEFAULT_REPOSITORY = warehouse + + _patch_distribution_metadata_write_pkg_file() + _patch_distribution_metadata_write_pkg_info() + + # Install Distribution throughout the distutils + for module in distutils.dist, distutils.core, distutils.cmd: + module.Distribution = setuptools.dist.Distribution + + # Install the patched Extension + distutils.core.Extension = setuptools.extension.Extension + distutils.extension.Extension = setuptools.extension.Extension + if 'distutils.command.build_ext' in sys.modules: + sys.modules['distutils.command.build_ext'].Extension = ( + setuptools.extension.Extension + ) + + patch_for_msvc_specialized_compiler() + + +def _patch_distribution_metadata_write_pkg_file(): + """Patch write_pkg_file to also write Requires-Python/Requires-External""" + distutils.dist.DistributionMetadata.write_pkg_file = ( + setuptools.dist.write_pkg_file + ) + + +def _patch_distribution_metadata_write_pkg_info(): + """ + Workaround issue #197 - Python 3 prior to 3.2.2 uses an environment-local + encoding to save the pkg_info. Monkey-patch its write_pkg_info method to + correct this undesirable behavior. + """ + environment_local = (3,) <= sys.version_info[:3] < (3, 2, 2) + if not environment_local: + return + + distutils.dist.DistributionMetadata.write_pkg_info = ( + setuptools.dist.write_pkg_info + ) + + +def patch_func(replacement, target_mod, func_name): + """ + Patch func_name in target_mod with replacement + + Important - original must be resolved by name to avoid + patching an already patched function. + """ + original = getattr(target_mod, func_name) + + # set the 'unpatched' attribute on the replacement to + # point to the original. + vars(replacement).setdefault('unpatched', original) + + # replace the function in the original module + setattr(target_mod, func_name, replacement) + + +def get_unpatched_function(candidate): + return getattr(candidate, 'unpatched') + + +def patch_for_msvc_specialized_compiler(): + """ + Patch functions in distutils to use standalone Microsoft Visual C++ + compilers. + """ + # import late to avoid circular imports on Python < 3.5 + msvc = import_module('setuptools.msvc') + + if platform.system() != 'Windows': + # Compilers only availables on Microsoft Windows + return + + def patch_params(mod_name, func_name): + """ + Prepare the parameters for patch_func to patch indicated function. + """ + repl_prefix = 'msvc9_' if 'msvc9' in mod_name else 'msvc14_' + repl_name = repl_prefix + func_name.lstrip('_') + repl = getattr(msvc, repl_name) + mod = import_module(mod_name) + if not hasattr(mod, func_name): + raise ImportError(func_name) + return repl, mod, func_name + + # Python 2.7 to 3.4 + msvc9 = functools.partial(patch_params, 'distutils.msvc9compiler') + + # Python 3.5+ + msvc14 = functools.partial(patch_params, 'distutils._msvccompiler') + + try: + # Patch distutils.msvc9compiler + patch_func(*msvc9('find_vcvarsall')) + patch_func(*msvc9('query_vcvarsall')) + except ImportError: + pass + + try: + # Patch distutils._msvccompiler._get_vc_env + patch_func(*msvc14('_get_vc_env')) + except ImportError: + pass + + try: + # Patch distutils._msvccompiler.gen_lib_options for Numpy + patch_func(*msvc14('gen_lib_options')) + except ImportError: + pass diff --git a/week-0/day-3/venv/lib/python3.6/site-packages/setuptools/msvc.py b/week-0/day-3/venv/lib/python3.6/site-packages/setuptools/msvc.py new file mode 100644 index 00000000..5e20b3f1 --- /dev/null +++ b/week-0/day-3/venv/lib/python3.6/site-packages/setuptools/msvc.py @@ -0,0 +1,1302 @@ +""" +Improved support for Microsoft Visual C++ compilers. + +Known supported compilers: +-------------------------- +Microsoft Visual C++ 9.0: + Microsoft Visual C++ Compiler for Python 2.7 (x86, amd64) + Microsoft Windows SDK 6.1 (x86, x64, ia64) + Microsoft Windows SDK 7.0 (x86, x64, ia64) + +Microsoft Visual C++ 10.0: + Microsoft Windows SDK 7.1 (x86, x64, ia64) + +Microsoft Visual C++ 14.0: + Microsoft Visual C++ Build Tools 2015 (x86, x64, arm) + Microsoft Visual Studio 2017 (x86, x64, arm, arm64) + Microsoft Visual Studio Build Tools 2017 (x86, x64, arm, arm64) +""" + +import os +import sys +import platform +import itertools +import distutils.errors +from setuptools.extern.packaging.version import LegacyVersion + +from setuptools.extern.six.moves import filterfalse + +from .monkey import get_unpatched + +if platform.system() == 'Windows': + from setuptools.extern.six.moves import winreg + safe_env = os.environ +else: + """ + Mock winreg and environ so the module can be imported + on this platform. + """ + + class winreg: + HKEY_USERS = None + HKEY_CURRENT_USER = None + HKEY_LOCAL_MACHINE = None + HKEY_CLASSES_ROOT = None + + safe_env = dict() + +_msvc9_suppress_errors = ( + # msvc9compiler isn't available on some platforms + ImportError, + + # msvc9compiler raises DistutilsPlatformError in some + # environments. See #1118. + distutils.errors.DistutilsPlatformError, +) + +try: + from distutils.msvc9compiler import Reg +except _msvc9_suppress_errors: + pass + + +def msvc9_find_vcvarsall(version): + """ + Patched "distutils.msvc9compiler.find_vcvarsall" to use the standalone + compiler build for Python (VCForPython). Fall back to original behavior + when the standalone compiler is not available. + + Redirect the path of "vcvarsall.bat". + + Known supported compilers + ------------------------- + Microsoft Visual C++ 9.0: + Microsoft Visual C++ Compiler for Python 2.7 (x86, amd64) + + Parameters + ---------- + version: float + Required Microsoft Visual C++ version. + + Return + ------ + vcvarsall.bat path: str + """ + VC_BASE = r'Software\%sMicrosoft\DevDiv\VCForPython\%0.1f' + key = VC_BASE % ('', version) + try: + # Per-user installs register the compiler path here + productdir = Reg.get_value(key, "installdir") + except KeyError: + try: + # All-user installs on a 64-bit system register here + key = VC_BASE % ('Wow6432Node\\', version) + productdir = Reg.get_value(key, "installdir") + except KeyError: + productdir = None + + if productdir: + vcvarsall = os.path.os.path.join(productdir, "vcvarsall.bat") + if os.path.isfile(vcvarsall): + return vcvarsall + + return get_unpatched(msvc9_find_vcvarsall)(version) + + +def msvc9_query_vcvarsall(ver, arch='x86', *args, **kwargs): + """ + Patched "distutils.msvc9compiler.query_vcvarsall" for support extra + compilers. + + Set environment without use of "vcvarsall.bat". + + Known supported compilers + ------------------------- + Microsoft Visual C++ 9.0: + Microsoft Visual C++ Compiler for Python 2.7 (x86, amd64) + Microsoft Windows SDK 6.1 (x86, x64, ia64) + Microsoft Windows SDK 7.0 (x86, x64, ia64) + + Microsoft Visual C++ 10.0: + Microsoft Windows SDK 7.1 (x86, x64, ia64) + + Parameters + ---------- + ver: float + Required Microsoft Visual C++ version. + arch: str + Target architecture. + + Return + ------ + environment: dict + """ + # Try to get environement from vcvarsall.bat (Classical way) + try: + orig = get_unpatched(msvc9_query_vcvarsall) + return orig(ver, arch, *args, **kwargs) + except distutils.errors.DistutilsPlatformError: + # Pass error if Vcvarsall.bat is missing + pass + except ValueError: + # Pass error if environment not set after executing vcvarsall.bat + pass + + # If error, try to set environment directly + try: + return EnvironmentInfo(arch, ver).return_env() + except distutils.errors.DistutilsPlatformError as exc: + _augment_exception(exc, ver, arch) + raise + + +def msvc14_get_vc_env(plat_spec): + """ + Patched "distutils._msvccompiler._get_vc_env" for support extra + compilers. + + Set environment without use of "vcvarsall.bat". + + Known supported compilers + ------------------------- + Microsoft Visual C++ 14.0: + Microsoft Visual C++ Build Tools 2015 (x86, x64, arm) + Microsoft Visual Studio 2017 (x86, x64, arm, arm64) + Microsoft Visual Studio Build Tools 2017 (x86, x64, arm, arm64) + + Parameters + ---------- + plat_spec: str + Target architecture. + + Return + ------ + environment: dict + """ + # Try to get environment from vcvarsall.bat (Classical way) + try: + return get_unpatched(msvc14_get_vc_env)(plat_spec) + except distutils.errors.DistutilsPlatformError: + # Pass error Vcvarsall.bat is missing + pass + + # If error, try to set environment directly + try: + return EnvironmentInfo(plat_spec, vc_min_ver=14.0).return_env() + except distutils.errors.DistutilsPlatformError as exc: + _augment_exception(exc, 14.0) + raise + + +def msvc14_gen_lib_options(*args, **kwargs): + """ + Patched "distutils._msvccompiler.gen_lib_options" for fix + compatibility between "numpy.distutils" and "distutils._msvccompiler" + (for Numpy < 1.11.2) + """ + if "numpy.distutils" in sys.modules: + import numpy as np + if LegacyVersion(np.__version__) < LegacyVersion('1.11.2'): + return np.distutils.ccompiler.gen_lib_options(*args, **kwargs) + return get_unpatched(msvc14_gen_lib_options)(*args, **kwargs) + + +def _augment_exception(exc, version, arch=''): + """ + Add details to the exception message to help guide the user + as to what action will resolve it. + """ + # Error if MSVC++ directory not found or environment not set + message = exc.args[0] + + if "vcvarsall" in message.lower() or "visual c" in message.lower(): + # Special error message if MSVC++ not installed + tmpl = 'Microsoft Visual C++ {version:0.1f} is required.' + message = tmpl.format(**locals()) + msdownload = 'www.microsoft.com/download/details.aspx?id=%d' + if version == 9.0: + if arch.lower().find('ia64') > -1: + # For VC++ 9.0, if IA64 support is needed, redirect user + # to Windows SDK 7.0 + message += ' Get it with "Microsoft Windows SDK 7.0": ' + message += msdownload % 3138 + else: + # For VC++ 9.0 redirect user to Vc++ for Python 2.7 : + # This redirection link is maintained by Microsoft. + # Contact vspython@microsoft.com if it needs updating. + message += ' Get it from http://aka.ms/vcpython27' + elif version == 10.0: + # For VC++ 10.0 Redirect user to Windows SDK 7.1 + message += ' Get it with "Microsoft Windows SDK 7.1": ' + message += msdownload % 8279 + elif version >= 14.0: + # For VC++ 14.0 Redirect user to Visual C++ Build Tools + message += (' Get it with "Microsoft Visual C++ Build Tools": ' + r'http://landinghub.visualstudio.com/' + 'visual-cpp-build-tools') + + exc.args = (message, ) + + +class PlatformInfo: + """ + Current and Target Architectures informations. + + Parameters + ---------- + arch: str + Target architecture. + """ + current_cpu = safe_env.get('processor_architecture', '').lower() + + def __init__(self, arch): + self.arch = arch.lower().replace('x64', 'amd64') + + @property + def target_cpu(self): + return self.arch[self.arch.find('_') + 1:] + + def target_is_x86(self): + return self.target_cpu == 'x86' + + def current_is_x86(self): + return self.current_cpu == 'x86' + + def current_dir(self, hidex86=False, x64=False): + """ + Current platform specific subfolder. + + Parameters + ---------- + hidex86: bool + return '' and not '\x86' if architecture is x86. + x64: bool + return '\x64' and not '\amd64' if architecture is amd64. + + Return + ------ + subfolder: str + '\target', or '' (see hidex86 parameter) + """ + return ( + '' if (self.current_cpu == 'x86' and hidex86) else + r'\x64' if (self.current_cpu == 'amd64' and x64) else + r'\%s' % self.current_cpu + ) + + def target_dir(self, hidex86=False, x64=False): + r""" + Target platform specific subfolder. + + Parameters + ---------- + hidex86: bool + return '' and not '\x86' if architecture is x86. + x64: bool + return '\x64' and not '\amd64' if architecture is amd64. + + Return + ------ + subfolder: str + '\current', or '' (see hidex86 parameter) + """ + return ( + '' if (self.target_cpu == 'x86' and hidex86) else + r'\x64' if (self.target_cpu == 'amd64' and x64) else + r'\%s' % self.target_cpu + ) + + def cross_dir(self, forcex86=False): + r""" + Cross platform specific subfolder. + + Parameters + ---------- + forcex86: bool + Use 'x86' as current architecture even if current acritecture is + not x86. + + Return + ------ + subfolder: str + '' if target architecture is current architecture, + '\current_target' if not. + """ + current = 'x86' if forcex86 else self.current_cpu + return ( + '' if self.target_cpu == current else + self.target_dir().replace('\\', '\\%s_' % current) + ) + + +class RegistryInfo: + """ + Microsoft Visual Studio related registry informations. + + Parameters + ---------- + platform_info: PlatformInfo + "PlatformInfo" instance. + """ + HKEYS = (winreg.HKEY_USERS, + winreg.HKEY_CURRENT_USER, + winreg.HKEY_LOCAL_MACHINE, + winreg.HKEY_CLASSES_ROOT) + + def __init__(self, platform_info): + self.pi = platform_info + + @property + def visualstudio(self): + """ + Microsoft Visual Studio root registry key. + """ + return 'VisualStudio' + + @property + def sxs(self): + """ + Microsoft Visual Studio SxS registry key. + """ + return os.path.join(self.visualstudio, 'SxS') + + @property + def vc(self): + """ + Microsoft Visual C++ VC7 registry key. + """ + return os.path.join(self.sxs, 'VC7') + + @property + def vs(self): + """ + Microsoft Visual Studio VS7 registry key. + """ + return os.path.join(self.sxs, 'VS7') + + @property + def vc_for_python(self): + """ + Microsoft Visual C++ for Python registry key. + """ + return r'DevDiv\VCForPython' + + @property + def microsoft_sdk(self): + """ + Microsoft SDK registry key. + """ + return 'Microsoft SDKs' + + @property + def windows_sdk(self): + """ + Microsoft Windows/Platform SDK registry key. + """ + return os.path.join(self.microsoft_sdk, 'Windows') + + @property + def netfx_sdk(self): + """ + Microsoft .NET Framework SDK registry key. + """ + return os.path.join(self.microsoft_sdk, 'NETFXSDK') + + @property + def windows_kits_roots(self): + """ + Microsoft Windows Kits Roots registry key. + """ + return r'Windows Kits\Installed Roots' + + def microsoft(self, key, x86=False): + """ + Return key in Microsoft software registry. + + Parameters + ---------- + key: str + Registry key path where look. + x86: str + Force x86 software registry. + + Return + ------ + str: value + """ + node64 = '' if self.pi.current_is_x86() or x86 else 'Wow6432Node' + return os.path.join('Software', node64, 'Microsoft', key) + + def lookup(self, key, name): + """ + Look for values in registry in Microsoft software registry. + + Parameters + ---------- + key: str + Registry key path where look. + name: str + Value name to find. + + Return + ------ + str: value + """ + KEY_READ = winreg.KEY_READ + openkey = winreg.OpenKey + ms = self.microsoft + for hkey in self.HKEYS: + try: + bkey = openkey(hkey, ms(key), 0, KEY_READ) + except (OSError, IOError): + if not self.pi.current_is_x86(): + try: + bkey = openkey(hkey, ms(key, True), 0, KEY_READ) + except (OSError, IOError): + continue + else: + continue + try: + return winreg.QueryValueEx(bkey, name)[0] + except (OSError, IOError): + pass + + +class SystemInfo: + """ + Microsoft Windows and Visual Studio related system inormations. + + Parameters + ---------- + registry_info: RegistryInfo + "RegistryInfo" instance. + vc_ver: float + Required Microsoft Visual C++ version. + """ + + # Variables and properties in this class use originals CamelCase variables + # names from Microsoft source files for more easy comparaison. + WinDir = safe_env.get('WinDir', '') + ProgramFiles = safe_env.get('ProgramFiles', '') + ProgramFilesx86 = safe_env.get('ProgramFiles(x86)', ProgramFiles) + + def __init__(self, registry_info, vc_ver=None): + self.ri = registry_info + self.pi = self.ri.pi + self.vc_ver = vc_ver or self._find_latest_available_vc_ver() + + def _find_latest_available_vc_ver(self): + try: + return self.find_available_vc_vers()[-1] + except IndexError: + err = 'No Microsoft Visual C++ version found' + raise distutils.errors.DistutilsPlatformError(err) + + def find_available_vc_vers(self): + """ + Find all available Microsoft Visual C++ versions. + """ + ms = self.ri.microsoft + vckeys = (self.ri.vc, self.ri.vc_for_python, self.ri.vs) + vc_vers = [] + for hkey in self.ri.HKEYS: + for key in vckeys: + try: + bkey = winreg.OpenKey(hkey, ms(key), 0, winreg.KEY_READ) + except (OSError, IOError): + continue + subkeys, values, _ = winreg.QueryInfoKey(bkey) + for i in range(values): + try: + ver = float(winreg.EnumValue(bkey, i)[0]) + if ver not in vc_vers: + vc_vers.append(ver) + except ValueError: + pass + for i in range(subkeys): + try: + ver = float(winreg.EnumKey(bkey, i)) + if ver not in vc_vers: + vc_vers.append(ver) + except ValueError: + pass + return sorted(vc_vers) + + @property + def VSInstallDir(self): + """ + Microsoft Visual Studio directory. + """ + # Default path + name = 'Microsoft Visual Studio %0.1f' % self.vc_ver + default = os.path.join(self.ProgramFilesx86, name) + + # Try to get path from registry, if fail use default path + return self.ri.lookup(self.ri.vs, '%0.1f' % self.vc_ver) or default + + @property + def VCInstallDir(self): + """ + Microsoft Visual C++ directory. + """ + self.VSInstallDir + + guess_vc = self._guess_vc() or self._guess_vc_legacy() + + # Try to get "VC++ for Python" path from registry as default path + reg_path = os.path.join(self.ri.vc_for_python, '%0.1f' % self.vc_ver) + python_vc = self.ri.lookup(reg_path, 'installdir') + default_vc = os.path.join(python_vc, 'VC') if python_vc else guess_vc + + # Try to get path from registry, if fail use default path + path = self.ri.lookup(self.ri.vc, '%0.1f' % self.vc_ver) or default_vc + + if not os.path.isdir(path): + msg = 'Microsoft Visual C++ directory not found' + raise distutils.errors.DistutilsPlatformError(msg) + + return path + + def _guess_vc(self): + """ + Locate Visual C for 2017 + """ + if self.vc_ver <= 14.0: + return + + default = r'VC\Tools\MSVC' + guess_vc = os.path.join(self.VSInstallDir, default) + # Subdir with VC exact version as name + try: + vc_exact_ver = os.listdir(guess_vc)[-1] + return os.path.join(guess_vc, vc_exact_ver) + except (OSError, IOError, IndexError): + pass + + def _guess_vc_legacy(self): + """ + Locate Visual C for versions prior to 2017 + """ + default = r'Microsoft Visual Studio %0.1f\VC' % self.vc_ver + return os.path.join(self.ProgramFilesx86, default) + + @property + def WindowsSdkVersion(self): + """ + Microsoft Windows SDK versions for specified MSVC++ version. + """ + if self.vc_ver <= 9.0: + return ('7.0', '6.1', '6.0a') + elif self.vc_ver == 10.0: + return ('7.1', '7.0a') + elif self.vc_ver == 11.0: + return ('8.0', '8.0a') + elif self.vc_ver == 12.0: + return ('8.1', '8.1a') + elif self.vc_ver >= 14.0: + return ('10.0', '8.1') + + @property + def WindowsSdkLastVersion(self): + """ + Microsoft Windows SDK last version + """ + return self._use_last_dir_name(os.path.join( + self.WindowsSdkDir, 'lib')) + + @property + def WindowsSdkDir(self): + """ + Microsoft Windows SDK directory. + """ + sdkdir = '' + for ver in self.WindowsSdkVersion: + # Try to get it from registry + loc = os.path.join(self.ri.windows_sdk, 'v%s' % ver) + sdkdir = self.ri.lookup(loc, 'installationfolder') + if sdkdir: + break + if not sdkdir or not os.path.isdir(sdkdir): + # Try to get "VC++ for Python" version from registry + path = os.path.join(self.ri.vc_for_python, '%0.1f' % self.vc_ver) + install_base = self.ri.lookup(path, 'installdir') + if install_base: + sdkdir = os.path.join(install_base, 'WinSDK') + if not sdkdir or not os.path.isdir(sdkdir): + # If fail, use default new path + for ver in self.WindowsSdkVersion: + intver = ver[:ver.rfind('.')] + path = r'Microsoft SDKs\Windows Kits\%s' % (intver) + d = os.path.join(self.ProgramFiles, path) + if os.path.isdir(d): + sdkdir = d + if not sdkdir or not os.path.isdir(sdkdir): + # If fail, use default old path + for ver in self.WindowsSdkVersion: + path = r'Microsoft SDKs\Windows\v%s' % ver + d = os.path.join(self.ProgramFiles, path) + if os.path.isdir(d): + sdkdir = d + if not sdkdir: + # If fail, use Platform SDK + sdkdir = os.path.join(self.VCInstallDir, 'PlatformSDK') + return sdkdir + + @property + def WindowsSDKExecutablePath(self): + """ + Microsoft Windows SDK executable directory. + """ + # Find WinSDK NetFx Tools registry dir name + if self.vc_ver <= 11.0: + netfxver = 35 + arch = '' + else: + netfxver = 40 + hidex86 = True if self.vc_ver <= 12.0 else False + arch = self.pi.current_dir(x64=True, hidex86=hidex86) + fx = 'WinSDK-NetFx%dTools%s' % (netfxver, arch.replace('\\', '-')) + + # liste all possibles registry paths + regpaths = [] + if self.vc_ver >= 14.0: + for ver in self.NetFxSdkVersion: + regpaths += [os.path.join(self.ri.netfx_sdk, ver, fx)] + + for ver in self.WindowsSdkVersion: + regpaths += [os.path.join(self.ri.windows_sdk, 'v%sA' % ver, fx)] + + # Return installation folder from the more recent path + for path in regpaths: + execpath = self.ri.lookup(path, 'installationfolder') + if execpath: + break + return execpath + + @property + def FSharpInstallDir(self): + """ + Microsoft Visual F# directory. + """ + path = r'%0.1f\Setup\F#' % self.vc_ver + path = os.path.join(self.ri.visualstudio, path) + return self.ri.lookup(path, 'productdir') or '' + + @property + def UniversalCRTSdkDir(self): + """ + Microsoft Universal CRT SDK directory. + """ + # Set Kit Roots versions for specified MSVC++ version + if self.vc_ver >= 14.0: + vers = ('10', '81') + else: + vers = () + + # Find path of the more recent Kit + for ver in vers: + sdkdir = self.ri.lookup(self.ri.windows_kits_roots, + 'kitsroot%s' % ver) + if sdkdir: + break + return sdkdir or '' + + @property + def UniversalCRTSdkLastVersion(self): + """ + Microsoft Universal C Runtime SDK last version + """ + return self._use_last_dir_name(os.path.join( + self.UniversalCRTSdkDir, 'lib')) + + @property + def NetFxSdkVersion(self): + """ + Microsoft .NET Framework SDK versions. + """ + # Set FxSdk versions for specified MSVC++ version + if self.vc_ver >= 14.0: + return ('4.6.1', '4.6') + else: + return () + + @property + def NetFxSdkDir(self): + """ + Microsoft .NET Framework SDK directory. + """ + for ver in self.NetFxSdkVersion: + loc = os.path.join(self.ri.netfx_sdk, ver) + sdkdir = self.ri.lookup(loc, 'kitsinstallationfolder') + if sdkdir: + break + return sdkdir or '' + + @property + def FrameworkDir32(self): + """ + Microsoft .NET Framework 32bit directory. + """ + # Default path + guess_fw = os.path.join(self.WinDir, r'Microsoft.NET\Framework') + + # Try to get path from registry, if fail use default path + return self.ri.lookup(self.ri.vc, 'frameworkdir32') or guess_fw + + @property + def FrameworkDir64(self): + """ + Microsoft .NET Framework 64bit directory. + """ + # Default path + guess_fw = os.path.join(self.WinDir, r'Microsoft.NET\Framework64') + + # Try to get path from registry, if fail use default path + return self.ri.lookup(self.ri.vc, 'frameworkdir64') or guess_fw + + @property + def FrameworkVersion32(self): + """ + Microsoft .NET Framework 32bit versions. + """ + return self._find_dot_net_versions(32) + + @property + def FrameworkVersion64(self): + """ + Microsoft .NET Framework 64bit versions. + """ + return self._find_dot_net_versions(64) + + def _find_dot_net_versions(self, bits): + """ + Find Microsoft .NET Framework versions. + + Parameters + ---------- + bits: int + Platform number of bits: 32 or 64. + """ + # Find actual .NET version in registry + reg_ver = self.ri.lookup(self.ri.vc, 'frameworkver%d' % bits) + dot_net_dir = getattr(self, 'FrameworkDir%d' % bits) + ver = reg_ver or self._use_last_dir_name(dot_net_dir, 'v') or '' + + # Set .NET versions for specified MSVC++ version + if self.vc_ver >= 12.0: + frameworkver = (ver, 'v4.0') + elif self.vc_ver >= 10.0: + frameworkver = ('v4.0.30319' if ver.lower()[:2] != 'v4' else ver, + 'v3.5') + elif self.vc_ver == 9.0: + frameworkver = ('v3.5', 'v2.0.50727') + if self.vc_ver == 8.0: + frameworkver = ('v3.0', 'v2.0.50727') + return frameworkver + + def _use_last_dir_name(self, path, prefix=''): + """ + Return name of the last dir in path or '' if no dir found. + + Parameters + ---------- + path: str + Use dirs in this path + prefix: str + Use only dirs startings by this prefix + """ + matching_dirs = ( + dir_name + for dir_name in reversed(os.listdir(path)) + if os.path.isdir(os.path.join(path, dir_name)) and + dir_name.startswith(prefix) + ) + return next(matching_dirs, None) or '' + + +class EnvironmentInfo: + """ + Return environment variables for specified Microsoft Visual C++ version + and platform : Lib, Include, Path and libpath. + + This function is compatible with Microsoft Visual C++ 9.0 to 14.0. + + Script created by analysing Microsoft environment configuration files like + "vcvars[...].bat", "SetEnv.Cmd", "vcbuildtools.bat", ... + + Parameters + ---------- + arch: str + Target architecture. + vc_ver: float + Required Microsoft Visual C++ version. If not set, autodetect the last + version. + vc_min_ver: float + Minimum Microsoft Visual C++ version. + """ + + # Variables and properties in this class use originals CamelCase variables + # names from Microsoft source files for more easy comparaison. + + def __init__(self, arch, vc_ver=None, vc_min_ver=0): + self.pi = PlatformInfo(arch) + self.ri = RegistryInfo(self.pi) + self.si = SystemInfo(self.ri, vc_ver) + + if self.vc_ver < vc_min_ver: + err = 'No suitable Microsoft Visual C++ version found' + raise distutils.errors.DistutilsPlatformError(err) + + @property + def vc_ver(self): + """ + Microsoft Visual C++ version. + """ + return self.si.vc_ver + + @property + def VSTools(self): + """ + Microsoft Visual Studio Tools + """ + paths = [r'Common7\IDE', r'Common7\Tools'] + + if self.vc_ver >= 14.0: + arch_subdir = self.pi.current_dir(hidex86=True, x64=True) + paths += [r'Common7\IDE\CommonExtensions\Microsoft\TestWindow'] + paths += [r'Team Tools\Performance Tools'] + paths += [r'Team Tools\Performance Tools%s' % arch_subdir] + + return [os.path.join(self.si.VSInstallDir, path) for path in paths] + + @property + def VCIncludes(self): + """ + Microsoft Visual C++ & Microsoft Foundation Class Includes + """ + return [os.path.join(self.si.VCInstallDir, 'Include'), + os.path.join(self.si.VCInstallDir, r'ATLMFC\Include')] + + @property + def VCLibraries(self): + """ + Microsoft Visual C++ & Microsoft Foundation Class Libraries + """ + if self.vc_ver >= 15.0: + arch_subdir = self.pi.target_dir(x64=True) + else: + arch_subdir = self.pi.target_dir(hidex86=True) + paths = ['Lib%s' % arch_subdir, r'ATLMFC\Lib%s' % arch_subdir] + + if self.vc_ver >= 14.0: + paths += [r'Lib\store%s' % arch_subdir] + + return [os.path.join(self.si.VCInstallDir, path) for path in paths] + + @property + def VCStoreRefs(self): + """ + Microsoft Visual C++ store references Libraries + """ + if self.vc_ver < 14.0: + return [] + return [os.path.join(self.si.VCInstallDir, r'Lib\store\references')] + + @property + def VCTools(self): + """ + Microsoft Visual C++ Tools + """ + si = self.si + tools = [os.path.join(si.VCInstallDir, 'VCPackages')] + + forcex86 = True if self.vc_ver <= 10.0 else False + arch_subdir = self.pi.cross_dir(forcex86) + if arch_subdir: + tools += [os.path.join(si.VCInstallDir, 'Bin%s' % arch_subdir)] + + if self.vc_ver == 14.0: + path = 'Bin%s' % self.pi.current_dir(hidex86=True) + tools += [os.path.join(si.VCInstallDir, path)] + + elif self.vc_ver >= 15.0: + host_dir = (r'bin\HostX86%s' if self.pi.current_is_x86() else + r'bin\HostX64%s') + tools += [os.path.join( + si.VCInstallDir, host_dir % self.pi.target_dir(x64=True))] + + if self.pi.current_cpu != self.pi.target_cpu: + tools += [os.path.join( + si.VCInstallDir, host_dir % self.pi.current_dir(x64=True))] + + else: + tools += [os.path.join(si.VCInstallDir, 'Bin')] + + return tools + + @property + def OSLibraries(self): + """ + Microsoft Windows SDK Libraries + """ + if self.vc_ver <= 10.0: + arch_subdir = self.pi.target_dir(hidex86=True, x64=True) + return [os.path.join(self.si.WindowsSdkDir, 'Lib%s' % arch_subdir)] + + else: + arch_subdir = self.pi.target_dir(x64=True) + lib = os.path.join(self.si.WindowsSdkDir, 'lib') + libver = self._sdk_subdir + return [os.path.join(lib, '%sum%s' % (libver , arch_subdir))] + + @property + def OSIncludes(self): + """ + Microsoft Windows SDK Include + """ + include = os.path.join(self.si.WindowsSdkDir, 'include') + + if self.vc_ver <= 10.0: + return [include, os.path.join(include, 'gl')] + + else: + if self.vc_ver >= 14.0: + sdkver = self._sdk_subdir + else: + sdkver = '' + return [os.path.join(include, '%sshared' % sdkver), + os.path.join(include, '%sum' % sdkver), + os.path.join(include, '%swinrt' % sdkver)] + + @property + def OSLibpath(self): + """ + Microsoft Windows SDK Libraries Paths + """ + ref = os.path.join(self.si.WindowsSdkDir, 'References') + libpath = [] + + if self.vc_ver <= 9.0: + libpath += self.OSLibraries + + if self.vc_ver >= 11.0: + libpath += [os.path.join(ref, r'CommonConfiguration\Neutral')] + + if self.vc_ver >= 14.0: + libpath += [ + ref, + os.path.join(self.si.WindowsSdkDir, 'UnionMetadata'), + os.path.join( + ref, + 'Windows.Foundation.UniversalApiContract', + '1.0.0.0', + ), + os.path.join( + ref, + 'Windows.Foundation.FoundationContract', + '1.0.0.0', + ), + os.path.join( + ref, + 'Windows.Networking.Connectivity.WwanContract', + '1.0.0.0', + ), + os.path.join( + self.si.WindowsSdkDir, + 'ExtensionSDKs', + 'Microsoft.VCLibs', + '%0.1f' % self.vc_ver, + 'References', + 'CommonConfiguration', + 'neutral', + ), + ] + return libpath + + @property + def SdkTools(self): + """ + Microsoft Windows SDK Tools + """ + return list(self._sdk_tools()) + + def _sdk_tools(self): + """ + Microsoft Windows SDK Tools paths generator + """ + if self.vc_ver < 15.0: + bin_dir = 'Bin' if self.vc_ver <= 11.0 else r'Bin\x86' + yield os.path.join(self.si.WindowsSdkDir, bin_dir) + + if not self.pi.current_is_x86(): + arch_subdir = self.pi.current_dir(x64=True) + path = 'Bin%s' % arch_subdir + yield os.path.join(self.si.WindowsSdkDir, path) + + if self.vc_ver == 10.0 or self.vc_ver == 11.0: + if self.pi.target_is_x86(): + arch_subdir = '' + else: + arch_subdir = self.pi.current_dir(hidex86=True, x64=True) + path = r'Bin\NETFX 4.0 Tools%s' % arch_subdir + yield os.path.join(self.si.WindowsSdkDir, path) + + elif self.vc_ver >= 15.0: + path = os.path.join(self.si.WindowsSdkDir, 'Bin') + arch_subdir = self.pi.current_dir(x64=True) + sdkver = self.si.WindowsSdkLastVersion + yield os.path.join(path, '%s%s' % (sdkver, arch_subdir)) + + if self.si.WindowsSDKExecutablePath: + yield self.si.WindowsSDKExecutablePath + + @property + def _sdk_subdir(self): + """ + Microsoft Windows SDK version subdir + """ + ucrtver = self.si.WindowsSdkLastVersion + return ('%s\\' % ucrtver) if ucrtver else '' + + @property + def SdkSetup(self): + """ + Microsoft Windows SDK Setup + """ + if self.vc_ver > 9.0: + return [] + + return [os.path.join(self.si.WindowsSdkDir, 'Setup')] + + @property + def FxTools(self): + """ + Microsoft .NET Framework Tools + """ + pi = self.pi + si = self.si + + if self.vc_ver <= 10.0: + include32 = True + include64 = not pi.target_is_x86() and not pi.current_is_x86() + else: + include32 = pi.target_is_x86() or pi.current_is_x86() + include64 = pi.current_cpu == 'amd64' or pi.target_cpu == 'amd64' + + tools = [] + if include32: + tools += [os.path.join(si.FrameworkDir32, ver) + for ver in si.FrameworkVersion32] + if include64: + tools += [os.path.join(si.FrameworkDir64, ver) + for ver in si.FrameworkVersion64] + return tools + + @property + def NetFxSDKLibraries(self): + """ + Microsoft .Net Framework SDK Libraries + """ + if self.vc_ver < 14.0 or not self.si.NetFxSdkDir: + return [] + + arch_subdir = self.pi.target_dir(x64=True) + return [os.path.join(self.si.NetFxSdkDir, r'lib\um%s' % arch_subdir)] + + @property + def NetFxSDKIncludes(self): + """ + Microsoft .Net Framework SDK Includes + """ + if self.vc_ver < 14.0 or not self.si.NetFxSdkDir: + return [] + + return [os.path.join(self.si.NetFxSdkDir, r'include\um')] + + @property + def VsTDb(self): + """ + Microsoft Visual Studio Team System Database + """ + return [os.path.join(self.si.VSInstallDir, r'VSTSDB\Deploy')] + + @property + def MSBuild(self): + """ + Microsoft Build Engine + """ + if self.vc_ver < 12.0: + return [] + elif self.vc_ver < 15.0: + base_path = self.si.ProgramFilesx86 + arch_subdir = self.pi.current_dir(hidex86=True) + else: + base_path = self.si.VSInstallDir + arch_subdir = '' + + path = r'MSBuild\%0.1f\bin%s' % (self.vc_ver, arch_subdir) + build = [os.path.join(base_path, path)] + + if self.vc_ver >= 15.0: + # Add Roslyn C# & Visual Basic Compiler + build += [os.path.join(base_path, path, 'Roslyn')] + + return build + + @property + def HTMLHelpWorkshop(self): + """ + Microsoft HTML Help Workshop + """ + if self.vc_ver < 11.0: + return [] + + return [os.path.join(self.si.ProgramFilesx86, 'HTML Help Workshop')] + + @property + def UCRTLibraries(self): + """ + Microsoft Universal C Runtime SDK Libraries + """ + if self.vc_ver < 14.0: + return [] + + arch_subdir = self.pi.target_dir(x64=True) + lib = os.path.join(self.si.UniversalCRTSdkDir, 'lib') + ucrtver = self._ucrt_subdir + return [os.path.join(lib, '%sucrt%s' % (ucrtver, arch_subdir))] + + @property + def UCRTIncludes(self): + """ + Microsoft Universal C Runtime SDK Include + """ + if self.vc_ver < 14.0: + return [] + + include = os.path.join(self.si.UniversalCRTSdkDir, 'include') + return [os.path.join(include, '%sucrt' % self._ucrt_subdir)] + + @property + def _ucrt_subdir(self): + """ + Microsoft Universal C Runtime SDK version subdir + """ + ucrtver = self.si.UniversalCRTSdkLastVersion + return ('%s\\' % ucrtver) if ucrtver else '' + + @property + def FSharp(self): + """ + Microsoft Visual F# + """ + if self.vc_ver < 11.0 and self.vc_ver > 12.0: + return [] + + return self.si.FSharpInstallDir + + @property + def VCRuntimeRedist(self): + """ + Microsoft Visual C++ runtime redistribuable dll + """ + arch_subdir = self.pi.target_dir(x64=True) + if self.vc_ver < 15: + redist_path = self.si.VCInstallDir + vcruntime = 'redist%s\\Microsoft.VC%d0.CRT\\vcruntime%d0.dll' + else: + redist_path = self.si.VCInstallDir.replace('\\Tools', '\\Redist') + vcruntime = 'onecore%s\\Microsoft.VC%d0.CRT\\vcruntime%d0.dll' + + # Visual Studio 2017 is still Visual C++ 14.0 + dll_ver = 14.0 if self.vc_ver == 15 else self.vc_ver + + vcruntime = vcruntime % (arch_subdir, self.vc_ver, dll_ver) + return os.path.join(redist_path, vcruntime) + + def return_env(self, exists=True): + """ + Return environment dict. + + Parameters + ---------- + exists: bool + It True, only return existing paths. + """ + env = dict( + include=self._build_paths('include', + [self.VCIncludes, + self.OSIncludes, + self.UCRTIncludes, + self.NetFxSDKIncludes], + exists), + lib=self._build_paths('lib', + [self.VCLibraries, + self.OSLibraries, + self.FxTools, + self.UCRTLibraries, + self.NetFxSDKLibraries], + exists), + libpath=self._build_paths('libpath', + [self.VCLibraries, + self.FxTools, + self.VCStoreRefs, + self.OSLibpath], + exists), + path=self._build_paths('path', + [self.VCTools, + self.VSTools, + self.VsTDb, + self.SdkTools, + self.SdkSetup, + self.FxTools, + self.MSBuild, + self.HTMLHelpWorkshop, + self.FSharp], + exists), + ) + if self.vc_ver >= 14 and os.path.isfile(self.VCRuntimeRedist): + env['py_vcruntime_redist'] = self.VCRuntimeRedist + return env + + def _build_paths(self, name, spec_path_lists, exists): + """ + Given an environment variable name and specified paths, + return a pathsep-separated string of paths containing + unique, extant, directories from those paths and from + the environment variable. Raise an error if no paths + are resolved. + """ + # flatten spec_path_lists + spec_paths = itertools.chain.from_iterable(spec_path_lists) + env_paths = safe_env.get(name, '').split(os.pathsep) + paths = itertools.chain(spec_paths, env_paths) + extant_paths = list(filter(os.path.isdir, paths)) if exists else paths + if not extant_paths: + msg = "%s environment variable is empty" % name.upper() + raise distutils.errors.DistutilsPlatformError(msg) + unique_paths = self._unique_everseen(extant_paths) + return os.pathsep.join(unique_paths) + + # from Python docs + def _unique_everseen(self, iterable, key=None): + """ + List unique elements, preserving order. + Remember all elements ever seen. + + _unique_everseen('AAAABBBCCDAABBB') --> A B C D + + _unique_everseen('ABBCcAD', str.lower) --> A B C D + """ + seen = set() + seen_add = seen.add + if key is None: + for element in filterfalse(seen.__contains__, iterable): + seen_add(element) + yield element + else: + for element in iterable: + k = key(element) + if k not in seen: + seen_add(k) + yield element diff --git a/week-0/day-3/venv/lib/python3.6/site-packages/setuptools/namespaces.py b/week-0/day-3/venv/lib/python3.6/site-packages/setuptools/namespaces.py new file mode 100644 index 00000000..dc16106d --- /dev/null +++ b/week-0/day-3/venv/lib/python3.6/site-packages/setuptools/namespaces.py @@ -0,0 +1,107 @@ +import os +from distutils import log +import itertools + +from setuptools.extern.six.moves import map + + +flatten = itertools.chain.from_iterable + + +class Installer: + + nspkg_ext = '-nspkg.pth' + + def install_namespaces(self): + nsp = self._get_all_ns_packages() + if not nsp: + return + filename, ext = os.path.splitext(self._get_target()) + filename += self.nspkg_ext + self.outputs.append(filename) + log.info("Installing %s", filename) + lines = map(self._gen_nspkg_line, nsp) + + if self.dry_run: + # always generate the lines, even in dry run + list(lines) + return + + with open(filename, 'wt') as f: + f.writelines(lines) + + def uninstall_namespaces(self): + filename, ext = os.path.splitext(self._get_target()) + filename += self.nspkg_ext + if not os.path.exists(filename): + return + log.info("Removing %s", filename) + os.remove(filename) + + def _get_target(self): + return self.target + + _nspkg_tmpl = ( + "import sys, types, os", + "has_mfs = sys.version_info > (3, 5)", + "p = os.path.join(%(root)s, *%(pth)r)", + "importlib = has_mfs and __import__('importlib.util')", + "has_mfs and __import__('importlib.machinery')", + "m = has_mfs and " + "sys.modules.setdefault(%(pkg)r, " + "importlib.util.module_from_spec(" + "importlib.machinery.PathFinder.find_spec(%(pkg)r, " + "[os.path.dirname(p)])))", + "m = m or " + "sys.modules.setdefault(%(pkg)r, types.ModuleType(%(pkg)r))", + "mp = (m or []) and m.__dict__.setdefault('__path__',[])", + "(p not in mp) and mp.append(p)", + ) + "lines for the namespace installer" + + _nspkg_tmpl_multi = ( + 'm and setattr(sys.modules[%(parent)r], %(child)r, m)', + ) + "additional line(s) when a parent package is indicated" + + def _get_root(self): + return "sys._getframe(1).f_locals['sitedir']" + + def _gen_nspkg_line(self, pkg): + # ensure pkg is not a unicode string under Python 2.7 + pkg = str(pkg) + pth = tuple(pkg.split('.')) + root = self._get_root() + tmpl_lines = self._nspkg_tmpl + parent, sep, child = pkg.rpartition('.') + if parent: + tmpl_lines += self._nspkg_tmpl_multi + return ';'.join(tmpl_lines) % locals() + '\n' + + def _get_all_ns_packages(self): + """Return sorted list of all package namespaces""" + pkgs = self.distribution.namespace_packages or [] + return sorted(flatten(map(self._pkg_names, pkgs))) + + @staticmethod + def _pkg_names(pkg): + """ + Given a namespace package, yield the components of that + package. + + >>> names = Installer._pkg_names('a.b.c') + >>> set(names) == set(['a', 'a.b', 'a.b.c']) + True + """ + parts = pkg.split('.') + while parts: + yield '.'.join(parts) + parts.pop() + + +class DevelopInstaller(Installer): + def _get_root(self): + return repr(str(self.egg_path)) + + def _get_target(self): + return self.egg_link diff --git a/week-0/day-3/venv/lib/python3.6/site-packages/setuptools/package_index.py b/week-0/day-3/venv/lib/python3.6/site-packages/setuptools/package_index.py new file mode 100644 index 00000000..914b5e61 --- /dev/null +++ b/week-0/day-3/venv/lib/python3.6/site-packages/setuptools/package_index.py @@ -0,0 +1,1119 @@ +"""PyPI and direct package downloading""" +import sys +import os +import re +import shutil +import socket +import base64 +import hashlib +import itertools +from functools import wraps + +from setuptools.extern import six +from setuptools.extern.six.moves import urllib, http_client, configparser, map + +import setuptools +from pkg_resources import ( + CHECKOUT_DIST, Distribution, BINARY_DIST, normalize_path, SOURCE_DIST, + Environment, find_distributions, safe_name, safe_version, + to_filename, Requirement, DEVELOP_DIST, EGG_DIST, +) +from setuptools import ssl_support +from distutils import log +from distutils.errors import DistutilsError +from fnmatch import translate +from setuptools.py27compat import get_all_headers +from setuptools.py33compat import unescape +from setuptools.wheel import Wheel + +EGG_FRAGMENT = re.compile(r'^egg=([-A-Za-z0-9_.+!]+)$') +HREF = re.compile("""href\\s*=\\s*['"]?([^'"> ]+)""", re.I) +# this is here to fix emacs' cruddy broken syntax highlighting +PYPI_MD5 = re.compile( + '<a href="([^"#]+)">([^<]+)</a>\n\\s+\\(<a (?:title="MD5 hash"\n\\s+)' + 'href="[^?]+\\?:action=show_md5&digest=([0-9a-f]{32})">md5</a>\\)' +) +URL_SCHEME = re.compile('([-+.a-z0-9]{2,}):', re.I).match +EXTENSIONS = ".tar.gz .tar.bz2 .tar .zip .tgz".split() + +__all__ = [ + 'PackageIndex', 'distros_for_url', 'parse_bdist_wininst', + 'interpret_distro_name', +] + +_SOCKET_TIMEOUT = 15 + +_tmpl = "setuptools/{setuptools.__version__} Python-urllib/{py_major}" +user_agent = _tmpl.format(py_major=sys.version[:3], setuptools=setuptools) + + +def parse_requirement_arg(spec): + try: + return Requirement.parse(spec) + except ValueError: + raise DistutilsError( + "Not a URL, existing file, or requirement spec: %r" % (spec,) + ) + + +def parse_bdist_wininst(name): + """Return (base,pyversion) or (None,None) for possible .exe name""" + + lower = name.lower() + base, py_ver, plat = None, None, None + + if lower.endswith('.exe'): + if lower.endswith('.win32.exe'): + base = name[:-10] + plat = 'win32' + elif lower.startswith('.win32-py', -16): + py_ver = name[-7:-4] + base = name[:-16] + plat = 'win32' + elif lower.endswith('.win-amd64.exe'): + base = name[:-14] + plat = 'win-amd64' + elif lower.startswith('.win-amd64-py', -20): + py_ver = name[-7:-4] + base = name[:-20] + plat = 'win-amd64' + return base, py_ver, plat + + +def egg_info_for_url(url): + parts = urllib.parse.urlparse(url) + scheme, server, path, parameters, query, fragment = parts + base = urllib.parse.unquote(path.split('/')[-1]) + if server == 'sourceforge.net' and base == 'download': # XXX Yuck + base = urllib.parse.unquote(path.split('/')[-2]) + if '#' in base: + base, fragment = base.split('#', 1) + return base, fragment + + +def distros_for_url(url, metadata=None): + """Yield egg or source distribution objects that might be found at a URL""" + base, fragment = egg_info_for_url(url) + for dist in distros_for_location(url, base, metadata): + yield dist + if fragment: + match = EGG_FRAGMENT.match(fragment) + if match: + for dist in interpret_distro_name( + url, match.group(1), metadata, precedence=CHECKOUT_DIST + ): + yield dist + + +def distros_for_location(location, basename, metadata=None): + """Yield egg or source distribution objects based on basename""" + if basename.endswith('.egg.zip'): + basename = basename[:-4] # strip the .zip + if basename.endswith('.egg') and '-' in basename: + # only one, unambiguous interpretation + return [Distribution.from_location(location, basename, metadata)] + if basename.endswith('.whl') and '-' in basename: + wheel = Wheel(basename) + if not wheel.is_compatible(): + return [] + return [Distribution( + location=location, + project_name=wheel.project_name, + version=wheel.version, + # Increase priority over eggs. + precedence=EGG_DIST + 1, + )] + if basename.endswith('.exe'): + win_base, py_ver, platform = parse_bdist_wininst(basename) + if win_base is not None: + return interpret_distro_name( + location, win_base, metadata, py_ver, BINARY_DIST, platform + ) + # Try source distro extensions (.zip, .tgz, etc.) + # + for ext in EXTENSIONS: + if basename.endswith(ext): + basename = basename[:-len(ext)] + return interpret_distro_name(location, basename, metadata) + return [] # no extension matched + + +def distros_for_filename(filename, metadata=None): + """Yield possible egg or source distribution objects based on a filename""" + return distros_for_location( + normalize_path(filename), os.path.basename(filename), metadata + ) + + +def interpret_distro_name( + location, basename, metadata, py_version=None, precedence=SOURCE_DIST, + platform=None +): + """Generate alternative interpretations of a source distro name + + Note: if `location` is a filesystem filename, you should call + ``pkg_resources.normalize_path()`` on it before passing it to this + routine! + """ + # Generate alternative interpretations of a source distro name + # Because some packages are ambiguous as to name/versions split + # e.g. "adns-python-1.1.0", "egenix-mx-commercial", etc. + # So, we generate each possible interepretation (e.g. "adns, python-1.1.0" + # "adns-python, 1.1.0", and "adns-python-1.1.0, no version"). In practice, + # the spurious interpretations should be ignored, because in the event + # there's also an "adns" package, the spurious "python-1.1.0" version will + # compare lower than any numeric version number, and is therefore unlikely + # to match a request for it. It's still a potential problem, though, and + # in the long run PyPI and the distutils should go for "safe" names and + # versions in distribution archive names (sdist and bdist). + + parts = basename.split('-') + if not py_version and any(re.match(r'py\d\.\d$', p) for p in parts[2:]): + # it is a bdist_dumb, not an sdist -- bail out + return + + for p in range(1, len(parts) + 1): + yield Distribution( + location, metadata, '-'.join(parts[:p]), '-'.join(parts[p:]), + py_version=py_version, precedence=precedence, + platform=platform + ) + + +# From Python 2.7 docs +def unique_everseen(iterable, key=None): + "List unique elements, preserving order. Remember all elements ever seen." + # unique_everseen('AAAABBBCCDAABBB') --> A B C D + # unique_everseen('ABBCcAD', str.lower) --> A B C D + seen = set() + seen_add = seen.add + if key is None: + for element in six.moves.filterfalse(seen.__contains__, iterable): + seen_add(element) + yield element + else: + for element in iterable: + k = key(element) + if k not in seen: + seen_add(k) + yield element + + +def unique_values(func): + """ + Wrap a function returning an iterable such that the resulting iterable + only ever yields unique items. + """ + + @wraps(func) + def wrapper(*args, **kwargs): + return unique_everseen(func(*args, **kwargs)) + + return wrapper + + +REL = re.compile(r"""<([^>]*\srel\s*=\s*['"]?([^'">]+)[^>]*)>""", re.I) +# this line is here to fix emacs' cruddy broken syntax highlighting + + +@unique_values +def find_external_links(url, page): + """Find rel="homepage" and rel="download" links in `page`, yielding URLs""" + + for match in REL.finditer(page): + tag, rel = match.groups() + rels = set(map(str.strip, rel.lower().split(','))) + if 'homepage' in rels or 'download' in rels: + for match in HREF.finditer(tag): + yield urllib.parse.urljoin(url, htmldecode(match.group(1))) + + for tag in ("<th>Home Page", "<th>Download URL"): + pos = page.find(tag) + if pos != -1: + match = HREF.search(page, pos) + if match: + yield urllib.parse.urljoin(url, htmldecode(match.group(1))) + + +class ContentChecker(object): + """ + A null content checker that defines the interface for checking content + """ + + def feed(self, block): + """ + Feed a block of data to the hash. + """ + return + + def is_valid(self): + """ + Check the hash. Return False if validation fails. + """ + return True + + def report(self, reporter, template): + """ + Call reporter with information about the checker (hash name) + substituted into the template. + """ + return + + +class HashChecker(ContentChecker): + pattern = re.compile( + r'(?P<hash_name>sha1|sha224|sha384|sha256|sha512|md5)=' + r'(?P<expected>[a-f0-9]+)' + ) + + def __init__(self, hash_name, expected): + self.hash_name = hash_name + self.hash = hashlib.new(hash_name) + self.expected = expected + + @classmethod + def from_url(cls, url): + "Construct a (possibly null) ContentChecker from a URL" + fragment = urllib.parse.urlparse(url)[-1] + if not fragment: + return ContentChecker() + match = cls.pattern.search(fragment) + if not match: + return ContentChecker() + return cls(**match.groupdict()) + + def feed(self, block): + self.hash.update(block) + + def is_valid(self): + return self.hash.hexdigest() == self.expected + + def report(self, reporter, template): + msg = template % self.hash_name + return reporter(msg) + + +class PackageIndex(Environment): + """A distribution index that scans web pages for download URLs""" + + def __init__( + self, index_url="https://pypi.python.org/simple", hosts=('*',), + ca_bundle=None, verify_ssl=True, *args, **kw + ): + Environment.__init__(self, *args, **kw) + self.index_url = index_url + "/" [:not index_url.endswith('/')] + self.scanned_urls = {} + self.fetched_urls = {} + self.package_pages = {} + self.allows = re.compile('|'.join(map(translate, hosts))).match + self.to_scan = [] + use_ssl = ( + verify_ssl + and ssl_support.is_available + and (ca_bundle or ssl_support.find_ca_bundle()) + ) + if use_ssl: + self.opener = ssl_support.opener_for(ca_bundle) + else: + self.opener = urllib.request.urlopen + + def process_url(self, url, retrieve=False): + """Evaluate a URL as a possible download, and maybe retrieve it""" + if url in self.scanned_urls and not retrieve: + return + self.scanned_urls[url] = True + if not URL_SCHEME(url): + self.process_filename(url) + return + else: + dists = list(distros_for_url(url)) + if dists: + if not self.url_ok(url): + return + self.debug("Found link: %s", url) + + if dists or not retrieve or url in self.fetched_urls: + list(map(self.add, dists)) + return # don't need the actual page + + if not self.url_ok(url): + self.fetched_urls[url] = True + return + + self.info("Reading %s", url) + self.fetched_urls[url] = True # prevent multiple fetch attempts + tmpl = "Download error on %s: %%s -- Some packages may not be found!" + f = self.open_url(url, tmpl % url) + if f is None: + return + self.fetched_urls[f.url] = True + if 'html' not in f.headers.get('content-type', '').lower(): + f.close() # not html, we can't process it + return + + base = f.url # handle redirects + page = f.read() + if not isinstance(page, str): + # In Python 3 and got bytes but want str. + if isinstance(f, urllib.error.HTTPError): + # Errors have no charset, assume latin1: + charset = 'latin-1' + else: + charset = f.headers.get_param('charset') or 'latin-1' + page = page.decode(charset, "ignore") + f.close() + for match in HREF.finditer(page): + link = urllib.parse.urljoin(base, htmldecode(match.group(1))) + self.process_url(link) + if url.startswith(self.index_url) and getattr(f, 'code', None) != 404: + page = self.process_index(url, page) + + def process_filename(self, fn, nested=False): + # process filenames or directories + if not os.path.exists(fn): + self.warn("Not found: %s", fn) + return + + if os.path.isdir(fn) and not nested: + path = os.path.realpath(fn) + for item in os.listdir(path): + self.process_filename(os.path.join(path, item), True) + + dists = distros_for_filename(fn) + if dists: + self.debug("Found: %s", fn) + list(map(self.add, dists)) + + def url_ok(self, url, fatal=False): + s = URL_SCHEME(url) + is_file = s and s.group(1).lower() == 'file' + if is_file or self.allows(urllib.parse.urlparse(url)[1]): + return True + msg = ( + "\nNote: Bypassing %s (disallowed host; see " + "http://bit.ly/2hrImnY for details).\n") + if fatal: + raise DistutilsError(msg % url) + else: + self.warn(msg, url) + + def scan_egg_links(self, search_path): + dirs = filter(os.path.isdir, search_path) + egg_links = ( + (path, entry) + for path in dirs + for entry in os.listdir(path) + if entry.endswith('.egg-link') + ) + list(itertools.starmap(self.scan_egg_link, egg_links)) + + def scan_egg_link(self, path, entry): + with open(os.path.join(path, entry)) as raw_lines: + # filter non-empty lines + lines = list(filter(None, map(str.strip, raw_lines))) + + if len(lines) != 2: + # format is not recognized; punt + return + + egg_path, setup_path = lines + + for dist in find_distributions(os.path.join(path, egg_path)): + dist.location = os.path.join(path, *lines) + dist.precedence = SOURCE_DIST + self.add(dist) + + def process_index(self, url, page): + """Process the contents of a PyPI page""" + + def scan(link): + # Process a URL to see if it's for a package page + if link.startswith(self.index_url): + parts = list(map( + urllib.parse.unquote, link[len(self.index_url):].split('/') + )) + if len(parts) == 2 and '#' not in parts[1]: + # it's a package page, sanitize and index it + pkg = safe_name(parts[0]) + ver = safe_version(parts[1]) + self.package_pages.setdefault(pkg.lower(), {})[link] = True + return to_filename(pkg), to_filename(ver) + return None, None + + # process an index page into the package-page index + for match in HREF.finditer(page): + try: + scan(urllib.parse.urljoin(url, htmldecode(match.group(1)))) + except ValueError: + pass + + pkg, ver = scan(url) # ensure this page is in the page index + if pkg: + # process individual package page + for new_url in find_external_links(url, page): + # Process the found URL + base, frag = egg_info_for_url(new_url) + if base.endswith('.py') and not frag: + if ver: + new_url += '#egg=%s-%s' % (pkg, ver) + else: + self.need_version_info(url) + self.scan_url(new_url) + + return PYPI_MD5.sub( + lambda m: '<a href="%s#md5=%s">%s</a>' % m.group(1, 3, 2), page + ) + else: + return "" # no sense double-scanning non-package pages + + def need_version_info(self, url): + self.scan_all( + "Page at %s links to .py file(s) without version info; an index " + "scan is required.", url + ) + + def scan_all(self, msg=None, *args): + if self.index_url not in self.fetched_urls: + if msg: + self.warn(msg, *args) + self.info( + "Scanning index of all packages (this may take a while)" + ) + self.scan_url(self.index_url) + + def find_packages(self, requirement): + self.scan_url(self.index_url + requirement.unsafe_name + '/') + + if not self.package_pages.get(requirement.key): + # Fall back to safe version of the name + self.scan_url(self.index_url + requirement.project_name + '/') + + if not self.package_pages.get(requirement.key): + # We couldn't find the target package, so search the index page too + self.not_found_in_index(requirement) + + for url in list(self.package_pages.get(requirement.key, ())): + # scan each page that might be related to the desired package + self.scan_url(url) + + def obtain(self, requirement, installer=None): + self.prescan() + self.find_packages(requirement) + for dist in self[requirement.key]: + if dist in requirement: + return dist + self.debug("%s does not match %s", requirement, dist) + return super(PackageIndex, self).obtain(requirement, installer) + + def check_hash(self, checker, filename, tfp): + """ + checker is a ContentChecker + """ + checker.report( + self.debug, + "Validating %%s checksum for %s" % filename) + if not checker.is_valid(): + tfp.close() + os.unlink(filename) + raise DistutilsError( + "%s validation failed for %s; " + "possible download problem?" + % (checker.hash.name, os.path.basename(filename)) + ) + + def add_find_links(self, urls): + """Add `urls` to the list that will be prescanned for searches""" + for url in urls: + if ( + self.to_scan is None # if we have already "gone online" + or not URL_SCHEME(url) # or it's a local file/directory + or url.startswith('file:') + or list(distros_for_url(url)) # or a direct package link + ): + # then go ahead and process it now + self.scan_url(url) + else: + # otherwise, defer retrieval till later + self.to_scan.append(url) + + def prescan(self): + """Scan urls scheduled for prescanning (e.g. --find-links)""" + if self.to_scan: + list(map(self.scan_url, self.to_scan)) + self.to_scan = None # from now on, go ahead and process immediately + + def not_found_in_index(self, requirement): + if self[requirement.key]: # we've seen at least one distro + meth, msg = self.info, "Couldn't retrieve index page for %r" + else: # no distros seen for this name, might be misspelled + meth, msg = ( + self.warn, + "Couldn't find index page for %r (maybe misspelled?)") + meth(msg, requirement.unsafe_name) + self.scan_all() + + def download(self, spec, tmpdir): + """Locate and/or download `spec` to `tmpdir`, returning a local path + + `spec` may be a ``Requirement`` object, or a string containing a URL, + an existing local filename, or a project/version requirement spec + (i.e. the string form of a ``Requirement`` object). If it is the URL + of a .py file with an unambiguous ``#egg=name-version`` tag (i.e., one + that escapes ``-`` as ``_`` throughout), a trivial ``setup.py`` is + automatically created alongside the downloaded file. + + If `spec` is a ``Requirement`` object or a string containing a + project/version requirement spec, this method returns the location of + a matching distribution (possibly after downloading it to `tmpdir`). + If `spec` is a locally existing file or directory name, it is simply + returned unchanged. If `spec` is a URL, it is downloaded to a subpath + of `tmpdir`, and the local filename is returned. Various errors may be + raised if a problem occurs during downloading. + """ + if not isinstance(spec, Requirement): + scheme = URL_SCHEME(spec) + if scheme: + # It's a url, download it to tmpdir + found = self._download_url(scheme.group(1), spec, tmpdir) + base, fragment = egg_info_for_url(spec) + if base.endswith('.py'): + found = self.gen_setup(found, fragment, tmpdir) + return found + elif os.path.exists(spec): + # Existing file or directory, just return it + return spec + else: + spec = parse_requirement_arg(spec) + return getattr(self.fetch_distribution(spec, tmpdir), 'location', None) + + def fetch_distribution( + self, requirement, tmpdir, force_scan=False, source=False, + develop_ok=False, local_index=None): + """Obtain a distribution suitable for fulfilling `requirement` + + `requirement` must be a ``pkg_resources.Requirement`` instance. + If necessary, or if the `force_scan` flag is set, the requirement is + searched for in the (online) package index as well as the locally + installed packages. If a distribution matching `requirement` is found, + the returned distribution's ``location`` is the value you would have + gotten from calling the ``download()`` method with the matching + distribution's URL or filename. If no matching distribution is found, + ``None`` is returned. + + If the `source` flag is set, only source distributions and source + checkout links will be considered. Unless the `develop_ok` flag is + set, development and system eggs (i.e., those using the ``.egg-info`` + format) will be ignored. + """ + # process a Requirement + self.info("Searching for %s", requirement) + skipped = {} + dist = None + + def find(req, env=None): + if env is None: + env = self + # Find a matching distribution; may be called more than once + + for dist in env[req.key]: + + if dist.precedence == DEVELOP_DIST and not develop_ok: + if dist not in skipped: + self.warn( + "Skipping development or system egg: %s", dist, + ) + skipped[dist] = 1 + continue + + test = ( + dist in req + and (dist.precedence <= SOURCE_DIST or not source) + ) + if test: + loc = self.download(dist.location, tmpdir) + dist.download_location = loc + if os.path.exists(dist.download_location): + return dist + + if force_scan: + self.prescan() + self.find_packages(requirement) + dist = find(requirement) + + if not dist and local_index is not None: + dist = find(requirement, local_index) + + if dist is None: + if self.to_scan is not None: + self.prescan() + dist = find(requirement) + + if dist is None and not force_scan: + self.find_packages(requirement) + dist = find(requirement) + + if dist is None: + self.warn( + "No local packages or working download links found for %s%s", + (source and "a source distribution of " or ""), + requirement, + ) + else: + self.info("Best match: %s", dist) + return dist.clone(location=dist.download_location) + + def fetch(self, requirement, tmpdir, force_scan=False, source=False): + """Obtain a file suitable for fulfilling `requirement` + + DEPRECATED; use the ``fetch_distribution()`` method now instead. For + backward compatibility, this routine is identical but returns the + ``location`` of the downloaded distribution instead of a distribution + object. + """ + dist = self.fetch_distribution(requirement, tmpdir, force_scan, source) + if dist is not None: + return dist.location + return None + + def gen_setup(self, filename, fragment, tmpdir): + match = EGG_FRAGMENT.match(fragment) + dists = match and [ + d for d in + interpret_distro_name(filename, match.group(1), None) if d.version + ] or [] + + if len(dists) == 1: # unambiguous ``#egg`` fragment + basename = os.path.basename(filename) + + # Make sure the file has been downloaded to the temp dir. + if os.path.dirname(filename) != tmpdir: + dst = os.path.join(tmpdir, basename) + from setuptools.command.easy_install import samefile + if not samefile(filename, dst): + shutil.copy2(filename, dst) + filename = dst + + with open(os.path.join(tmpdir, 'setup.py'), 'w') as file: + file.write( + "from setuptools import setup\n" + "setup(name=%r, version=%r, py_modules=[%r])\n" + % ( + dists[0].project_name, dists[0].version, + os.path.splitext(basename)[0] + ) + ) + return filename + + elif match: + raise DistutilsError( + "Can't unambiguously interpret project/version identifier %r; " + "any dashes in the name or version should be escaped using " + "underscores. %r" % (fragment, dists) + ) + else: + raise DistutilsError( + "Can't process plain .py files without an '#egg=name-version'" + " suffix to enable automatic setup script generation." + ) + + dl_blocksize = 8192 + + def _download_to(self, url, filename): + self.info("Downloading %s", url) + # Download the file + fp = None + try: + checker = HashChecker.from_url(url) + fp = self.open_url(url) + if isinstance(fp, urllib.error.HTTPError): + raise DistutilsError( + "Can't download %s: %s %s" % (url, fp.code, fp.msg) + ) + headers = fp.info() + blocknum = 0 + bs = self.dl_blocksize + size = -1 + if "content-length" in headers: + # Some servers return multiple Content-Length headers :( + sizes = get_all_headers(headers, 'Content-Length') + size = max(map(int, sizes)) + self.reporthook(url, filename, blocknum, bs, size) + with open(filename, 'wb') as tfp: + while True: + block = fp.read(bs) + if block: + checker.feed(block) + tfp.write(block) + blocknum += 1 + self.reporthook(url, filename, blocknum, bs, size) + else: + break + self.check_hash(checker, filename, tfp) + return headers + finally: + if fp: + fp.close() + + def reporthook(self, url, filename, blocknum, blksize, size): + pass # no-op + + def open_url(self, url, warning=None): + if url.startswith('file:'): + return local_open(url) + try: + return open_with_auth(url, self.opener) + except (ValueError, http_client.InvalidURL) as v: + msg = ' '.join([str(arg) for arg in v.args]) + if warning: + self.warn(warning, msg) + else: + raise DistutilsError('%s %s' % (url, msg)) + except urllib.error.HTTPError as v: + return v + except urllib.error.URLError as v: + if warning: + self.warn(warning, v.reason) + else: + raise DistutilsError("Download error for %s: %s" + % (url, v.reason)) + except http_client.BadStatusLine as v: + if warning: + self.warn(warning, v.line) + else: + raise DistutilsError( + '%s returned a bad status line. The server might be ' + 'down, %s' % + (url, v.line) + ) + except (http_client.HTTPException, socket.error) as v: + if warning: + self.warn(warning, v) + else: + raise DistutilsError("Download error for %s: %s" + % (url, v)) + + def _download_url(self, scheme, url, tmpdir): + # Determine download filename + # + name, fragment = egg_info_for_url(url) + if name: + while '..' in name: + name = name.replace('..', '.').replace('\\', '_') + else: + name = "__downloaded__" # default if URL has no path contents + + if name.endswith('.egg.zip'): + name = name[:-4] # strip the extra .zip before download + + filename = os.path.join(tmpdir, name) + + # Download the file + # + if scheme == 'svn' or scheme.startswith('svn+'): + return self._download_svn(url, filename) + elif scheme == 'git' or scheme.startswith('git+'): + return self._download_git(url, filename) + elif scheme.startswith('hg+'): + return self._download_hg(url, filename) + elif scheme == 'file': + return urllib.request.url2pathname(urllib.parse.urlparse(url)[2]) + else: + self.url_ok(url, True) # raises error if not allowed + return self._attempt_download(url, filename) + + def scan_url(self, url): + self.process_url(url, True) + + def _attempt_download(self, url, filename): + headers = self._download_to(url, filename) + if 'html' in headers.get('content-type', '').lower(): + return self._download_html(url, headers, filename) + else: + return filename + + def _download_html(self, url, headers, filename): + file = open(filename) + for line in file: + if line.strip(): + # Check for a subversion index page + if re.search(r'<title>([^- ]+ - )?Revision \d+:', line): + # it's a subversion index page: + file.close() + os.unlink(filename) + return self._download_svn(url, filename) + break # not an index page + file.close() + os.unlink(filename) + raise DistutilsError("Unexpected HTML page found at " + url) + + def _download_svn(self, url, filename): + url = url.split('#', 1)[0] # remove any fragment for svn's sake + creds = '' + if url.lower().startswith('svn:') and '@' in url: + scheme, netloc, path, p, q, f = urllib.parse.urlparse(url) + if not netloc and path.startswith('//') and '/' in path[2:]: + netloc, path = path[2:].split('/', 1) + auth, host = urllib.parse.splituser(netloc) + if auth: + if ':' in auth: + user, pw = auth.split(':', 1) + creds = " --username=%s --password=%s" % (user, pw) + else: + creds = " --username=" + auth + netloc = host + parts = scheme, netloc, url, p, q, f + url = urllib.parse.urlunparse(parts) + self.info("Doing subversion checkout from %s to %s", url, filename) + os.system("svn checkout%s -q %s %s" % (creds, url, filename)) + return filename + + @staticmethod + def _vcs_split_rev_from_url(url, pop_prefix=False): + scheme, netloc, path, query, frag = urllib.parse.urlsplit(url) + + scheme = scheme.split('+', 1)[-1] + + # Some fragment identification fails + path = path.split('#', 1)[0] + + rev = None + if '@' in path: + path, rev = path.rsplit('@', 1) + + # Also, discard fragment + url = urllib.parse.urlunsplit((scheme, netloc, path, query, '')) + + return url, rev + + def _download_git(self, url, filename): + filename = filename.split('#', 1)[0] + url, rev = self._vcs_split_rev_from_url(url, pop_prefix=True) + + self.info("Doing git clone from %s to %s", url, filename) + os.system("git clone --quiet %s %s" % (url, filename)) + + if rev is not None: + self.info("Checking out %s", rev) + os.system("(cd %s && git checkout --quiet %s)" % ( + filename, + rev, + )) + + return filename + + def _download_hg(self, url, filename): + filename = filename.split('#', 1)[0] + url, rev = self._vcs_split_rev_from_url(url, pop_prefix=True) + + self.info("Doing hg clone from %s to %s", url, filename) + os.system("hg clone --quiet %s %s" % (url, filename)) + + if rev is not None: + self.info("Updating to %s", rev) + os.system("(cd %s && hg up -C -r %s -q)" % ( + filename, + rev, + )) + + return filename + + def debug(self, msg, *args): + log.debug(msg, *args) + + def info(self, msg, *args): + log.info(msg, *args) + + def warn(self, msg, *args): + log.warn(msg, *args) + + +# This pattern matches a character entity reference (a decimal numeric +# references, a hexadecimal numeric reference, or a named reference). +entity_sub = re.compile(r'&(#(\d+|x[\da-fA-F]+)|[\w.:-]+);?').sub + + +def decode_entity(match): + what = match.group(1) + return unescape(what) + + +def htmldecode(text): + """Decode HTML entities in the given text.""" + return entity_sub(decode_entity, text) + + +def socket_timeout(timeout=15): + def _socket_timeout(func): + def _socket_timeout(*args, **kwargs): + old_timeout = socket.getdefaulttimeout() + socket.setdefaulttimeout(timeout) + try: + return func(*args, **kwargs) + finally: + socket.setdefaulttimeout(old_timeout) + + return _socket_timeout + + return _socket_timeout + + +def _encode_auth(auth): + """ + A function compatible with Python 2.3-3.3 that will encode + auth from a URL suitable for an HTTP header. + >>> str(_encode_auth('username%3Apassword')) + 'dXNlcm5hbWU6cGFzc3dvcmQ=' + + Long auth strings should not cause a newline to be inserted. + >>> long_auth = 'username:' + 'password'*10 + >>> chr(10) in str(_encode_auth(long_auth)) + False + """ + auth_s = urllib.parse.unquote(auth) + # convert to bytes + auth_bytes = auth_s.encode() + # use the legacy interface for Python 2.3 support + encoded_bytes = base64.encodestring(auth_bytes) + # convert back to a string + encoded = encoded_bytes.decode() + # strip the trailing carriage return + return encoded.replace('\n', '') + + +class Credential(object): + """ + A username/password pair. Use like a namedtuple. + """ + + def __init__(self, username, password): + self.username = username + self.password = password + + def __iter__(self): + yield self.username + yield self.password + + def __str__(self): + return '%(username)s:%(password)s' % vars(self) + + +class PyPIConfig(configparser.RawConfigParser): + def __init__(self): + """ + Load from ~/.pypirc + """ + defaults = dict.fromkeys(['username', 'password', 'repository'], '') + configparser.RawConfigParser.__init__(self, defaults) + + rc = os.path.join(os.path.expanduser('~'), '.pypirc') + if os.path.exists(rc): + self.read(rc) + + @property + def creds_by_repository(self): + sections_with_repositories = [ + section for section in self.sections() + if self.get(section, 'repository').strip() + ] + + return dict(map(self._get_repo_cred, sections_with_repositories)) + + def _get_repo_cred(self, section): + repo = self.get(section, 'repository').strip() + return repo, Credential( + self.get(section, 'username').strip(), + self.get(section, 'password').strip(), + ) + + def find_credential(self, url): + """ + If the URL indicated appears to be a repository defined in this + config, return the credential for that repository. + """ + for repository, cred in self.creds_by_repository.items(): + if url.startswith(repository): + return cred + + +def open_with_auth(url, opener=urllib.request.urlopen): + """Open a urllib2 request, handling HTTP authentication""" + + scheme, netloc, path, params, query, frag = urllib.parse.urlparse(url) + + # Double scheme does not raise on Mac OS X as revealed by a + # failing test. We would expect "nonnumeric port". Refs #20. + if netloc.endswith(':'): + raise http_client.InvalidURL("nonnumeric port: ''") + + if scheme in ('http', 'https'): + auth, host = urllib.parse.splituser(netloc) + else: + auth = None + + if not auth: + cred = PyPIConfig().find_credential(url) + if cred: + auth = str(cred) + info = cred.username, url + log.info('Authenticating as %s for %s (from .pypirc)', *info) + + if auth: + auth = "Basic " + _encode_auth(auth) + parts = scheme, host, path, params, query, frag + new_url = urllib.parse.urlunparse(parts) + request = urllib.request.Request(new_url) + request.add_header("Authorization", auth) + else: + request = urllib.request.Request(url) + + request.add_header('User-Agent', user_agent) + fp = opener(request) + + if auth: + # Put authentication info back into request URL if same host, + # so that links found on the page will work + s2, h2, path2, param2, query2, frag2 = urllib.parse.urlparse(fp.url) + if s2 == scheme and h2 == host: + parts = s2, netloc, path2, param2, query2, frag2 + fp.url = urllib.parse.urlunparse(parts) + + return fp + + +# adding a timeout to avoid freezing package_index +open_with_auth = socket_timeout(_SOCKET_TIMEOUT)(open_with_auth) + + +def fix_sf_url(url): + return url # backward compatibility + + +def local_open(url): + """Read a local path, with special support for directories""" + scheme, server, path, param, query, frag = urllib.parse.urlparse(url) + filename = urllib.request.url2pathname(path) + if os.path.isfile(filename): + return urllib.request.urlopen(url) + elif path.endswith('/') and os.path.isdir(filename): + files = [] + for f in os.listdir(filename): + filepath = os.path.join(filename, f) + if f == 'index.html': + with open(filepath, 'r') as fp: + body = fp.read() + break + elif os.path.isdir(filepath): + f += '/' + files.append('<a href="{name}">{name}</a>'.format(name=f)) + else: + tmpl = ( + "<html><head><title>{url}" + "{files}") + body = tmpl.format(url=url, files='\n'.join(files)) + status, message = 200, "OK" + else: + status, message, body = 404, "Path not found", "Not found" + + headers = {'content-type': 'text/html'} + body_stream = six.StringIO(body) + return urllib.error.HTTPError(url, status, message, headers, body_stream) diff --git a/week-0/day-3/venv/lib/python3.6/site-packages/setuptools/pep425tags.py b/week-0/day-3/venv/lib/python3.6/site-packages/setuptools/pep425tags.py new file mode 100644 index 00000000..dfe55d58 --- /dev/null +++ b/week-0/day-3/venv/lib/python3.6/site-packages/setuptools/pep425tags.py @@ -0,0 +1,316 @@ +# This file originally from pip: +# https://github.com/pypa/pip/blob/8f4f15a5a95d7d5b511ceaee9ed261176c181970/src/pip/_internal/pep425tags.py +"""Generate and work with PEP 425 Compatibility Tags.""" +from __future__ import absolute_import + +import distutils.util +import platform +import re +import sys +import sysconfig +import warnings +from collections import OrderedDict + +from . import glibc + +_osx_arch_pat = re.compile(r'(.+)_(\d+)_(\d+)_(.+)') + + +def get_config_var(var): + try: + return sysconfig.get_config_var(var) + except IOError as e: # Issue #1074 + warnings.warn("{}".format(e), RuntimeWarning) + return None + + +def get_abbr_impl(): + """Return abbreviated implementation name.""" + if hasattr(sys, 'pypy_version_info'): + pyimpl = 'pp' + elif sys.platform.startswith('java'): + pyimpl = 'jy' + elif sys.platform == 'cli': + pyimpl = 'ip' + else: + pyimpl = 'cp' + return pyimpl + + +def get_impl_ver(): + """Return implementation version.""" + impl_ver = get_config_var("py_version_nodot") + if not impl_ver or get_abbr_impl() == 'pp': + impl_ver = ''.join(map(str, get_impl_version_info())) + return impl_ver + + +def get_impl_version_info(): + """Return sys.version_info-like tuple for use in decrementing the minor + version.""" + if get_abbr_impl() == 'pp': + # as per https://github.com/pypa/pip/issues/2882 + return (sys.version_info[0], sys.pypy_version_info.major, + sys.pypy_version_info.minor) + else: + return sys.version_info[0], sys.version_info[1] + + +def get_impl_tag(): + """ + Returns the Tag for this specific implementation. + """ + return "{}{}".format(get_abbr_impl(), get_impl_ver()) + + +def get_flag(var, fallback, expected=True, warn=True): + """Use a fallback method for determining SOABI flags if the needed config + var is unset or unavailable.""" + val = get_config_var(var) + if val is None: + if warn: + warnings.warn("Config variable '{0}' is unset, Python ABI tag may " + "be incorrect".format(var), RuntimeWarning, 2) + return fallback() + return val == expected + + +def get_abi_tag(): + """Return the ABI tag based on SOABI (if available) or emulate SOABI + (CPython 2, PyPy).""" + soabi = get_config_var('SOABI') + impl = get_abbr_impl() + if not soabi and impl in {'cp', 'pp'} and hasattr(sys, 'maxunicode'): + d = '' + m = '' + u = '' + if get_flag('Py_DEBUG', + lambda: hasattr(sys, 'gettotalrefcount'), + warn=(impl == 'cp')): + d = 'd' + if get_flag('WITH_PYMALLOC', + lambda: impl == 'cp', + warn=(impl == 'cp')): + m = 'm' + if get_flag('Py_UNICODE_SIZE', + lambda: sys.maxunicode == 0x10ffff, + expected=4, + warn=(impl == 'cp' and + sys.version_info < (3, 3))) \ + and sys.version_info < (3, 3): + u = 'u' + abi = '%s%s%s%s%s' % (impl, get_impl_ver(), d, m, u) + elif soabi and soabi.startswith('cpython-'): + abi = 'cp' + soabi.split('-')[1] + elif soabi: + abi = soabi.replace('.', '_').replace('-', '_') + else: + abi = None + return abi + + +def _is_running_32bit(): + return sys.maxsize == 2147483647 + + +def get_platform(): + """Return our platform name 'win32', 'linux_x86_64'""" + if sys.platform == 'darwin': + # distutils.util.get_platform() returns the release based on the value + # of MACOSX_DEPLOYMENT_TARGET on which Python was built, which may + # be significantly older than the user's current machine. + release, _, machine = platform.mac_ver() + split_ver = release.split('.') + + if machine == "x86_64" and _is_running_32bit(): + machine = "i386" + elif machine == "ppc64" and _is_running_32bit(): + machine = "ppc" + + return 'macosx_{}_{}_{}'.format(split_ver[0], split_ver[1], machine) + + # XXX remove distutils dependency + result = distutils.util.get_platform().replace('.', '_').replace('-', '_') + if result == "linux_x86_64" and _is_running_32bit(): + # 32 bit Python program (running on a 64 bit Linux): pip should only + # install and run 32 bit compiled extensions in that case. + result = "linux_i686" + + return result + + +def is_manylinux1_compatible(): + # Only Linux, and only x86-64 / i686 + if get_platform() not in {"linux_x86_64", "linux_i686"}: + return False + + # Check for presence of _manylinux module + try: + import _manylinux + return bool(_manylinux.manylinux1_compatible) + except (ImportError, AttributeError): + # Fall through to heuristic check below + pass + + # Check glibc version. CentOS 5 uses glibc 2.5. + return glibc.have_compatible_glibc(2, 5) + + +def get_darwin_arches(major, minor, machine): + """Return a list of supported arches (including group arches) for + the given major, minor and machine architecture of an macOS machine. + """ + arches = [] + + def _supports_arch(major, minor, arch): + # Looking at the application support for macOS versions in the chart + # provided by https://en.wikipedia.org/wiki/OS_X#Versions it appears + # our timeline looks roughly like: + # + # 10.0 - Introduces ppc support. + # 10.4 - Introduces ppc64, i386, and x86_64 support, however the ppc64 + # and x86_64 support is CLI only, and cannot be used for GUI + # applications. + # 10.5 - Extends ppc64 and x86_64 support to cover GUI applications. + # 10.6 - Drops support for ppc64 + # 10.7 - Drops support for ppc + # + # Given that we do not know if we're installing a CLI or a GUI + # application, we must be conservative and assume it might be a GUI + # application and behave as if ppc64 and x86_64 support did not occur + # until 10.5. + # + # Note: The above information is taken from the "Application support" + # column in the chart not the "Processor support" since I believe + # that we care about what instruction sets an application can use + # not which processors the OS supports. + if arch == 'ppc': + return (major, minor) <= (10, 5) + if arch == 'ppc64': + return (major, minor) == (10, 5) + if arch == 'i386': + return (major, minor) >= (10, 4) + if arch == 'x86_64': + return (major, minor) >= (10, 5) + if arch in groups: + for garch in groups[arch]: + if _supports_arch(major, minor, garch): + return True + return False + + groups = OrderedDict([ + ("fat", ("i386", "ppc")), + ("intel", ("x86_64", "i386")), + ("fat64", ("x86_64", "ppc64")), + ("fat32", ("x86_64", "i386", "ppc")), + ]) + + if _supports_arch(major, minor, machine): + arches.append(machine) + + for garch in groups: + if machine in groups[garch] and _supports_arch(major, minor, garch): + arches.append(garch) + + arches.append('universal') + + return arches + + +def get_supported(versions=None, noarch=False, platform=None, + impl=None, abi=None): + """Return a list of supported tags for each version specified in + `versions`. + + :param versions: a list of string versions, of the form ["33", "32"], + or None. The first version will be assumed to support our ABI. + :param platform: specify the exact platform you want valid + tags for, or None. If None, use the local system platform. + :param impl: specify the exact implementation you want valid + tags for, or None. If None, use the local interpreter impl. + :param abi: specify the exact abi you want valid + tags for, or None. If None, use the local interpreter abi. + """ + supported = [] + + # Versions must be given with respect to the preference + if versions is None: + versions = [] + version_info = get_impl_version_info() + major = version_info[:-1] + # Support all previous minor Python versions. + for minor in range(version_info[-1], -1, -1): + versions.append(''.join(map(str, major + (minor,)))) + + impl = impl or get_abbr_impl() + + abis = [] + + abi = abi or get_abi_tag() + if abi: + abis[0:0] = [abi] + + abi3s = set() + import imp + for suffix in imp.get_suffixes(): + if suffix[0].startswith('.abi'): + abi3s.add(suffix[0].split('.', 2)[1]) + + abis.extend(sorted(list(abi3s))) + + abis.append('none') + + if not noarch: + arch = platform or get_platform() + if arch.startswith('macosx'): + # support macosx-10.6-intel on macosx-10.9-x86_64 + match = _osx_arch_pat.match(arch) + if match: + name, major, minor, actual_arch = match.groups() + tpl = '{}_{}_%i_%s'.format(name, major) + arches = [] + for m in reversed(range(int(minor) + 1)): + for a in get_darwin_arches(int(major), m, actual_arch): + arches.append(tpl % (m, a)) + else: + # arch pattern didn't match (?!) + arches = [arch] + elif platform is None and is_manylinux1_compatible(): + arches = [arch.replace('linux', 'manylinux1'), arch] + else: + arches = [arch] + + # Current version, current API (built specifically for our Python): + for abi in abis: + for arch in arches: + supported.append(('%s%s' % (impl, versions[0]), abi, arch)) + + # abi3 modules compatible with older version of Python + for version in versions[1:]: + # abi3 was introduced in Python 3.2 + if version in {'31', '30'}: + break + for abi in abi3s: # empty set if not Python 3 + for arch in arches: + supported.append(("%s%s" % (impl, version), abi, arch)) + + # Has binaries, does not use the Python API: + for arch in arches: + supported.append(('py%s' % (versions[0][0]), 'none', arch)) + + # No abi / arch, but requires our implementation: + supported.append(('%s%s' % (impl, versions[0]), 'none', 'any')) + # Tagged specifically as being cross-version compatible + # (with just the major version specified) + supported.append(('%s%s' % (impl, versions[0][0]), 'none', 'any')) + + # No abi / arch, generic Python + for i, version in enumerate(versions): + supported.append(('py%s' % (version,), 'none', 'any')) + if i == 0: + supported.append(('py%s' % (version[0]), 'none', 'any')) + + return supported + + +implementation_tag = get_impl_tag() diff --git a/week-0/day-3/venv/lib/python3.6/site-packages/setuptools/py27compat.py b/week-0/day-3/venv/lib/python3.6/site-packages/setuptools/py27compat.py new file mode 100644 index 00000000..2985011b --- /dev/null +++ b/week-0/day-3/venv/lib/python3.6/site-packages/setuptools/py27compat.py @@ -0,0 +1,28 @@ +""" +Compatibility Support for Python 2.7 and earlier +""" + +import platform + +from setuptools.extern import six + + +def get_all_headers(message, key): + """ + Given an HTTPMessage, return all headers matching a given key. + """ + return message.get_all(key) + + +if six.PY2: + def get_all_headers(message, key): + return message.getheaders(key) + + +linux_py2_ascii = ( + platform.system() == 'Linux' and + six.PY2 +) + +rmtree_safe = str if linux_py2_ascii else lambda x: x +"""Workaround for http://bugs.python.org/issue24672""" diff --git a/week-0/day-3/venv/lib/python3.6/site-packages/setuptools/py31compat.py b/week-0/day-3/venv/lib/python3.6/site-packages/setuptools/py31compat.py new file mode 100644 index 00000000..4ea95320 --- /dev/null +++ b/week-0/day-3/venv/lib/python3.6/site-packages/setuptools/py31compat.py @@ -0,0 +1,41 @@ +__all__ = ['get_config_vars', 'get_path'] + +try: + # Python 2.7 or >=3.2 + from sysconfig import get_config_vars, get_path +except ImportError: + from distutils.sysconfig import get_config_vars, get_python_lib + + def get_path(name): + if name not in ('platlib', 'purelib'): + raise ValueError("Name must be purelib or platlib") + return get_python_lib(name == 'platlib') + + +try: + # Python >=3.2 + from tempfile import TemporaryDirectory +except ImportError: + import shutil + import tempfile + + class TemporaryDirectory(object): + """ + Very simple temporary directory context manager. + Will try to delete afterward, but will also ignore OS and similar + errors on deletion. + """ + + def __init__(self): + self.name = None # Handle mkdtemp raising an exception + self.name = tempfile.mkdtemp() + + def __enter__(self): + return self.name + + def __exit__(self, exctype, excvalue, exctrace): + try: + shutil.rmtree(self.name, True) + except OSError: # removal errors are not the only possible + pass + self.name = None diff --git a/week-0/day-3/venv/lib/python3.6/site-packages/setuptools/py33compat.py b/week-0/day-3/venv/lib/python3.6/site-packages/setuptools/py33compat.py new file mode 100644 index 00000000..2a73ebb3 --- /dev/null +++ b/week-0/day-3/venv/lib/python3.6/site-packages/setuptools/py33compat.py @@ -0,0 +1,54 @@ +import dis +import array +import collections + +try: + import html +except ImportError: + html = None + +from setuptools.extern import six +from setuptools.extern.six.moves import html_parser + + +OpArg = collections.namedtuple('OpArg', 'opcode arg') + + +class Bytecode_compat(object): + def __init__(self, code): + self.code = code + + def __iter__(self): + """Yield '(op,arg)' pair for each operation in code object 'code'""" + + bytes = array.array('b', self.code.co_code) + eof = len(self.code.co_code) + + ptr = 0 + extended_arg = 0 + + while ptr < eof: + + op = bytes[ptr] + + if op >= dis.HAVE_ARGUMENT: + + arg = bytes[ptr + 1] + bytes[ptr + 2] * 256 + extended_arg + ptr += 3 + + if op == dis.EXTENDED_ARG: + long_type = six.integer_types[-1] + extended_arg = arg * long_type(65536) + continue + + else: + arg = None + ptr += 1 + + yield OpArg(op, arg) + + +Bytecode = getattr(dis, 'Bytecode', Bytecode_compat) + + +unescape = getattr(html, 'unescape', html_parser.HTMLParser().unescape) diff --git a/week-0/day-3/venv/lib/python3.6/site-packages/setuptools/py36compat.py b/week-0/day-3/venv/lib/python3.6/site-packages/setuptools/py36compat.py new file mode 100644 index 00000000..f5279696 --- /dev/null +++ b/week-0/day-3/venv/lib/python3.6/site-packages/setuptools/py36compat.py @@ -0,0 +1,82 @@ +import sys +from distutils.errors import DistutilsOptionError +from distutils.util import strtobool +from distutils.debug import DEBUG + + +class Distribution_parse_config_files: + """ + Mix-in providing forward-compatibility for functionality to be + included by default on Python 3.7. + + Do not edit the code in this class except to update functionality + as implemented in distutils. + """ + def parse_config_files(self, filenames=None): + from configparser import ConfigParser + + # Ignore install directory options if we have a venv + if sys.prefix != sys.base_prefix: + ignore_options = [ + 'install-base', 'install-platbase', 'install-lib', + 'install-platlib', 'install-purelib', 'install-headers', + 'install-scripts', 'install-data', 'prefix', 'exec-prefix', + 'home', 'user', 'root'] + else: + ignore_options = [] + + ignore_options = frozenset(ignore_options) + + if filenames is None: + filenames = self.find_config_files() + + if DEBUG: + self.announce("Distribution.parse_config_files():") + + parser = ConfigParser(interpolation=None) + for filename in filenames: + if DEBUG: + self.announce(" reading %s" % filename) + parser.read(filename) + for section in parser.sections(): + options = parser.options(section) + opt_dict = self.get_option_dict(section) + + for opt in options: + if opt != '__name__' and opt not in ignore_options: + val = parser.get(section,opt) + opt = opt.replace('-', '_') + opt_dict[opt] = (filename, val) + + # Make the ConfigParser forget everything (so we retain + # the original filenames that options come from) + parser.__init__() + + # If there was a "global" section in the config file, use it + # to set Distribution options. + + if 'global' in self.command_options: + for (opt, (src, val)) in self.command_options['global'].items(): + alias = self.negative_opt.get(opt) + try: + if alias: + setattr(self, alias, not strtobool(val)) + elif opt in ('verbose', 'dry_run'): # ugh! + setattr(self, opt, strtobool(val)) + else: + setattr(self, opt, val) + except ValueError as msg: + raise DistutilsOptionError(msg) + + +if sys.version_info < (3,): + # Python 2 behavior is sufficient + class Distribution_parse_config_files: + pass + + +if False: + # When updated behavior is available upstream, + # disable override here. + class Distribution_parse_config_files: + pass diff --git a/week-0/day-3/venv/lib/python3.6/site-packages/setuptools/sandbox.py b/week-0/day-3/venv/lib/python3.6/site-packages/setuptools/sandbox.py new file mode 100644 index 00000000..685f3f72 --- /dev/null +++ b/week-0/day-3/venv/lib/python3.6/site-packages/setuptools/sandbox.py @@ -0,0 +1,491 @@ +import os +import sys +import tempfile +import operator +import functools +import itertools +import re +import contextlib +import pickle +import textwrap + +from setuptools.extern import six +from setuptools.extern.six.moves import builtins, map + +import pkg_resources.py31compat + +if sys.platform.startswith('java'): + import org.python.modules.posix.PosixModule as _os +else: + _os = sys.modules[os.name] +try: + _file = file +except NameError: + _file = None +_open = open +from distutils.errors import DistutilsError +from pkg_resources import working_set + + +__all__ = [ + "AbstractSandbox", "DirectorySandbox", "SandboxViolation", "run_setup", +] + + +def _execfile(filename, globals, locals=None): + """ + Python 3 implementation of execfile. + """ + mode = 'rb' + with open(filename, mode) as stream: + script = stream.read() + if locals is None: + locals = globals + code = compile(script, filename, 'exec') + exec(code, globals, locals) + + +@contextlib.contextmanager +def save_argv(repl=None): + saved = sys.argv[:] + if repl is not None: + sys.argv[:] = repl + try: + yield saved + finally: + sys.argv[:] = saved + + +@contextlib.contextmanager +def save_path(): + saved = sys.path[:] + try: + yield saved + finally: + sys.path[:] = saved + + +@contextlib.contextmanager +def override_temp(replacement): + """ + Monkey-patch tempfile.tempdir with replacement, ensuring it exists + """ + pkg_resources.py31compat.makedirs(replacement, exist_ok=True) + + saved = tempfile.tempdir + + tempfile.tempdir = replacement + + try: + yield + finally: + tempfile.tempdir = saved + + +@contextlib.contextmanager +def pushd(target): + saved = os.getcwd() + os.chdir(target) + try: + yield saved + finally: + os.chdir(saved) + + +class UnpickleableException(Exception): + """ + An exception representing another Exception that could not be pickled. + """ + + @staticmethod + def dump(type, exc): + """ + Always return a dumped (pickled) type and exc. If exc can't be pickled, + wrap it in UnpickleableException first. + """ + try: + return pickle.dumps(type), pickle.dumps(exc) + except Exception: + # get UnpickleableException inside the sandbox + from setuptools.sandbox import UnpickleableException as cls + return cls.dump(cls, cls(repr(exc))) + + +class ExceptionSaver: + """ + A Context Manager that will save an exception, serialized, and restore it + later. + """ + + def __enter__(self): + return self + + def __exit__(self, type, exc, tb): + if not exc: + return + + # dump the exception + self._saved = UnpickleableException.dump(type, exc) + self._tb = tb + + # suppress the exception + return True + + def resume(self): + "restore and re-raise any exception" + + if '_saved' not in vars(self): + return + + type, exc = map(pickle.loads, self._saved) + six.reraise(type, exc, self._tb) + + +@contextlib.contextmanager +def save_modules(): + """ + Context in which imported modules are saved. + + Translates exceptions internal to the context into the equivalent exception + outside the context. + """ + saved = sys.modules.copy() + with ExceptionSaver() as saved_exc: + yield saved + + sys.modules.update(saved) + # remove any modules imported since + del_modules = ( + mod_name for mod_name in sys.modules + if mod_name not in saved + # exclude any encodings modules. See #285 + and not mod_name.startswith('encodings.') + ) + _clear_modules(del_modules) + + saved_exc.resume() + + +def _clear_modules(module_names): + for mod_name in list(module_names): + del sys.modules[mod_name] + + +@contextlib.contextmanager +def save_pkg_resources_state(): + saved = pkg_resources.__getstate__() + try: + yield saved + finally: + pkg_resources.__setstate__(saved) + + +@contextlib.contextmanager +def setup_context(setup_dir): + temp_dir = os.path.join(setup_dir, 'temp') + with save_pkg_resources_state(): + with save_modules(): + hide_setuptools() + with save_path(): + with save_argv(): + with override_temp(temp_dir): + with pushd(setup_dir): + # ensure setuptools commands are available + __import__('setuptools') + yield + + +def _needs_hiding(mod_name): + """ + >>> _needs_hiding('setuptools') + True + >>> _needs_hiding('pkg_resources') + True + >>> _needs_hiding('setuptools_plugin') + False + >>> _needs_hiding('setuptools.__init__') + True + >>> _needs_hiding('distutils') + True + >>> _needs_hiding('os') + False + >>> _needs_hiding('Cython') + True + """ + pattern = re.compile(r'(setuptools|pkg_resources|distutils|Cython)(\.|$)') + return bool(pattern.match(mod_name)) + + +def hide_setuptools(): + """ + Remove references to setuptools' modules from sys.modules to allow the + invocation to import the most appropriate setuptools. This technique is + necessary to avoid issues such as #315 where setuptools upgrading itself + would fail to find a function declared in the metadata. + """ + modules = filter(_needs_hiding, sys.modules) + _clear_modules(modules) + + +def run_setup(setup_script, args): + """Run a distutils setup script, sandboxed in its directory""" + setup_dir = os.path.abspath(os.path.dirname(setup_script)) + with setup_context(setup_dir): + try: + sys.argv[:] = [setup_script] + list(args) + sys.path.insert(0, setup_dir) + # reset to include setup dir, w/clean callback list + working_set.__init__() + working_set.callbacks.append(lambda dist: dist.activate()) + + # __file__ should be a byte string on Python 2 (#712) + dunder_file = ( + setup_script + if isinstance(setup_script, str) else + setup_script.encode(sys.getfilesystemencoding()) + ) + + with DirectorySandbox(setup_dir): + ns = dict(__file__=dunder_file, __name__='__main__') + _execfile(setup_script, ns) + except SystemExit as v: + if v.args and v.args[0]: + raise + # Normal exit, just return + + +class AbstractSandbox: + """Wrap 'os' module and 'open()' builtin for virtualizing setup scripts""" + + _active = False + + def __init__(self): + self._attrs = [ + name for name in dir(_os) + if not name.startswith('_') and hasattr(self, name) + ] + + def _copy(self, source): + for name in self._attrs: + setattr(os, name, getattr(source, name)) + + def __enter__(self): + self._copy(self) + if _file: + builtins.file = self._file + builtins.open = self._open + self._active = True + + def __exit__(self, exc_type, exc_value, traceback): + self._active = False + if _file: + builtins.file = _file + builtins.open = _open + self._copy(_os) + + def run(self, func): + """Run 'func' under os sandboxing""" + with self: + return func() + + def _mk_dual_path_wrapper(name): + original = getattr(_os, name) + + def wrap(self, src, dst, *args, **kw): + if self._active: + src, dst = self._remap_pair(name, src, dst, *args, **kw) + return original(src, dst, *args, **kw) + + return wrap + + for name in ["rename", "link", "symlink"]: + if hasattr(_os, name): + locals()[name] = _mk_dual_path_wrapper(name) + + def _mk_single_path_wrapper(name, original=None): + original = original or getattr(_os, name) + + def wrap(self, path, *args, **kw): + if self._active: + path = self._remap_input(name, path, *args, **kw) + return original(path, *args, **kw) + + return wrap + + if _file: + _file = _mk_single_path_wrapper('file', _file) + _open = _mk_single_path_wrapper('open', _open) + for name in [ + "stat", "listdir", "chdir", "open", "chmod", "chown", "mkdir", + "remove", "unlink", "rmdir", "utime", "lchown", "chroot", "lstat", + "startfile", "mkfifo", "mknod", "pathconf", "access" + ]: + if hasattr(_os, name): + locals()[name] = _mk_single_path_wrapper(name) + + def _mk_single_with_return(name): + original = getattr(_os, name) + + def wrap(self, path, *args, **kw): + if self._active: + path = self._remap_input(name, path, *args, **kw) + return self._remap_output(name, original(path, *args, **kw)) + return original(path, *args, **kw) + + return wrap + + for name in ['readlink', 'tempnam']: + if hasattr(_os, name): + locals()[name] = _mk_single_with_return(name) + + def _mk_query(name): + original = getattr(_os, name) + + def wrap(self, *args, **kw): + retval = original(*args, **kw) + if self._active: + return self._remap_output(name, retval) + return retval + + return wrap + + for name in ['getcwd', 'tmpnam']: + if hasattr(_os, name): + locals()[name] = _mk_query(name) + + def _validate_path(self, path): + """Called to remap or validate any path, whether input or output""" + return path + + def _remap_input(self, operation, path, *args, **kw): + """Called for path inputs""" + return self._validate_path(path) + + def _remap_output(self, operation, path): + """Called for path outputs""" + return self._validate_path(path) + + def _remap_pair(self, operation, src, dst, *args, **kw): + """Called for path pairs like rename, link, and symlink operations""" + return ( + self._remap_input(operation + '-from', src, *args, **kw), + self._remap_input(operation + '-to', dst, *args, **kw) + ) + + +if hasattr(os, 'devnull'): + _EXCEPTIONS = [os.devnull,] +else: + _EXCEPTIONS = [] + + +class DirectorySandbox(AbstractSandbox): + """Restrict operations to a single subdirectory - pseudo-chroot""" + + write_ops = dict.fromkeys([ + "open", "chmod", "chown", "mkdir", "remove", "unlink", "rmdir", + "utime", "lchown", "chroot", "mkfifo", "mknod", "tempnam", + ]) + + _exception_patterns = [ + # Allow lib2to3 to attempt to save a pickled grammar object (#121) + r'.*lib2to3.*\.pickle$', + ] + "exempt writing to paths that match the pattern" + + def __init__(self, sandbox, exceptions=_EXCEPTIONS): + self._sandbox = os.path.normcase(os.path.realpath(sandbox)) + self._prefix = os.path.join(self._sandbox, '') + self._exceptions = [ + os.path.normcase(os.path.realpath(path)) + for path in exceptions + ] + AbstractSandbox.__init__(self) + + def _violation(self, operation, *args, **kw): + from setuptools.sandbox import SandboxViolation + raise SandboxViolation(operation, args, kw) + + if _file: + + def _file(self, path, mode='r', *args, **kw): + if mode not in ('r', 'rt', 'rb', 'rU', 'U') and not self._ok(path): + self._violation("file", path, mode, *args, **kw) + return _file(path, mode, *args, **kw) + + def _open(self, path, mode='r', *args, **kw): + if mode not in ('r', 'rt', 'rb', 'rU', 'U') and not self._ok(path): + self._violation("open", path, mode, *args, **kw) + return _open(path, mode, *args, **kw) + + def tmpnam(self): + self._violation("tmpnam") + + def _ok(self, path): + active = self._active + try: + self._active = False + realpath = os.path.normcase(os.path.realpath(path)) + return ( + self._exempted(realpath) + or realpath == self._sandbox + or realpath.startswith(self._prefix) + ) + finally: + self._active = active + + def _exempted(self, filepath): + start_matches = ( + filepath.startswith(exception) + for exception in self._exceptions + ) + pattern_matches = ( + re.match(pattern, filepath) + for pattern in self._exception_patterns + ) + candidates = itertools.chain(start_matches, pattern_matches) + return any(candidates) + + def _remap_input(self, operation, path, *args, **kw): + """Called for path inputs""" + if operation in self.write_ops and not self._ok(path): + self._violation(operation, os.path.realpath(path), *args, **kw) + return path + + def _remap_pair(self, operation, src, dst, *args, **kw): + """Called for path pairs like rename, link, and symlink operations""" + if not self._ok(src) or not self._ok(dst): + self._violation(operation, src, dst, *args, **kw) + return (src, dst) + + def open(self, file, flags, mode=0o777, *args, **kw): + """Called for low-level os.open()""" + if flags & WRITE_FLAGS and not self._ok(file): + self._violation("os.open", file, flags, mode, *args, **kw) + return _os.open(file, flags, mode, *args, **kw) + + +WRITE_FLAGS = functools.reduce( + operator.or_, [getattr(_os, a, 0) for a in + "O_WRONLY O_RDWR O_APPEND O_CREAT O_TRUNC O_TEMPORARY".split()] +) + + +class SandboxViolation(DistutilsError): + """A setup script attempted to modify the filesystem outside the sandbox""" + + tmpl = textwrap.dedent(""" + SandboxViolation: {cmd}{args!r} {kwargs} + + The package setup script has attempted to modify files on your system + that are not within the EasyInstall build area, and has been aborted. + + This package cannot be safely installed by EasyInstall, and may not + support alternate installation locations even if you run its setup + script by hand. Please inform the package's author and the EasyInstall + maintainers to find out if a fix or workaround is available. + """).lstrip() + + def __str__(self): + cmd, args, kwargs = self.args + return self.tmpl.format(**locals()) diff --git a/week-0/day-3/venv/lib/python3.6/site-packages/setuptools/script (dev).tmpl b/week-0/day-3/venv/lib/python3.6/site-packages/setuptools/script (dev).tmpl new file mode 100644 index 00000000..d58b1bb5 --- /dev/null +++ b/week-0/day-3/venv/lib/python3.6/site-packages/setuptools/script (dev).tmpl @@ -0,0 +1,5 @@ +# EASY-INSTALL-DEV-SCRIPT: %(spec)r,%(script_name)r +__requires__ = %(spec)r +__import__('pkg_resources').require(%(spec)r) +__file__ = %(dev_path)r +exec(compile(open(__file__).read(), __file__, 'exec')) diff --git a/week-0/day-3/venv/lib/python3.6/site-packages/setuptools/script.tmpl b/week-0/day-3/venv/lib/python3.6/site-packages/setuptools/script.tmpl new file mode 100644 index 00000000..ff5efbca --- /dev/null +++ b/week-0/day-3/venv/lib/python3.6/site-packages/setuptools/script.tmpl @@ -0,0 +1,3 @@ +# EASY-INSTALL-SCRIPT: %(spec)r,%(script_name)r +__requires__ = %(spec)r +__import__('pkg_resources').run_script(%(spec)r, %(script_name)r) diff --git a/week-0/day-3/venv/lib/python3.6/site-packages/setuptools/site-patch.py b/week-0/day-3/venv/lib/python3.6/site-packages/setuptools/site-patch.py new file mode 100644 index 00000000..0d2d2ff8 --- /dev/null +++ b/week-0/day-3/venv/lib/python3.6/site-packages/setuptools/site-patch.py @@ -0,0 +1,74 @@ +def __boot(): + import sys + import os + PYTHONPATH = os.environ.get('PYTHONPATH') + if PYTHONPATH is None or (sys.platform == 'win32' and not PYTHONPATH): + PYTHONPATH = [] + else: + PYTHONPATH = PYTHONPATH.split(os.pathsep) + + pic = getattr(sys, 'path_importer_cache', {}) + stdpath = sys.path[len(PYTHONPATH):] + mydir = os.path.dirname(__file__) + + for item in stdpath: + if item == mydir or not item: + continue # skip if current dir. on Windows, or my own directory + importer = pic.get(item) + if importer is not None: + loader = importer.find_module('site') + if loader is not None: + # This should actually reload the current module + loader.load_module('site') + break + else: + try: + import imp # Avoid import loop in Python >= 3.3 + stream, path, descr = imp.find_module('site', [item]) + except ImportError: + continue + if stream is None: + continue + try: + # This should actually reload the current module + imp.load_module('site', stream, path, descr) + finally: + stream.close() + break + else: + raise ImportError("Couldn't find the real 'site' module") + + known_paths = dict([(makepath(item)[1], 1) for item in sys.path]) # 2.2 comp + + oldpos = getattr(sys, '__egginsert', 0) # save old insertion position + sys.__egginsert = 0 # and reset the current one + + for item in PYTHONPATH: + addsitedir(item) + + sys.__egginsert += oldpos # restore effective old position + + d, nd = makepath(stdpath[0]) + insert_at = None + new_path = [] + + for item in sys.path: + p, np = makepath(item) + + if np == nd and insert_at is None: + # We've hit the first 'system' path entry, so added entries go here + insert_at = len(new_path) + + if np in known_paths or insert_at is None: + new_path.append(item) + else: + # new path after the insert point, back-insert it + new_path.insert(insert_at, item) + insert_at += 1 + + sys.path[:] = new_path + + +if __name__ == 'site': + __boot() + del __boot diff --git a/week-0/day-3/venv/lib/python3.6/site-packages/setuptools/ssl_support.py b/week-0/day-3/venv/lib/python3.6/site-packages/setuptools/ssl_support.py new file mode 100644 index 00000000..6362f1f4 --- /dev/null +++ b/week-0/day-3/venv/lib/python3.6/site-packages/setuptools/ssl_support.py @@ -0,0 +1,260 @@ +import os +import socket +import atexit +import re +import functools + +from setuptools.extern.six.moves import urllib, http_client, map, filter + +from pkg_resources import ResolutionError, ExtractionError + +try: + import ssl +except ImportError: + ssl = None + +__all__ = [ + 'VerifyingHTTPSHandler', 'find_ca_bundle', 'is_available', 'cert_paths', + 'opener_for' +] + +cert_paths = """ +/etc/pki/tls/certs/ca-bundle.crt +/etc/ssl/certs/ca-certificates.crt +/usr/share/ssl/certs/ca-bundle.crt +/usr/local/share/certs/ca-root.crt +/etc/ssl/cert.pem +/System/Library/OpenSSL/certs/cert.pem +/usr/local/share/certs/ca-root-nss.crt +/etc/ssl/ca-bundle.pem +""".strip().split() + +try: + HTTPSHandler = urllib.request.HTTPSHandler + HTTPSConnection = http_client.HTTPSConnection +except AttributeError: + HTTPSHandler = HTTPSConnection = object + +is_available = ssl is not None and object not in (HTTPSHandler, HTTPSConnection) + + +try: + from ssl import CertificateError, match_hostname +except ImportError: + try: + from backports.ssl_match_hostname import CertificateError + from backports.ssl_match_hostname import match_hostname + except ImportError: + CertificateError = None + match_hostname = None + +if not CertificateError: + + class CertificateError(ValueError): + pass + + +if not match_hostname: + + def _dnsname_match(dn, hostname, max_wildcards=1): + """Matching according to RFC 6125, section 6.4.3 + + http://tools.ietf.org/html/rfc6125#section-6.4.3 + """ + pats = [] + if not dn: + return False + + # Ported from python3-syntax: + # leftmost, *remainder = dn.split(r'.') + parts = dn.split(r'.') + leftmost = parts[0] + remainder = parts[1:] + + wildcards = leftmost.count('*') + if wildcards > max_wildcards: + # Issue #17980: avoid denials of service by refusing more + # than one wildcard per fragment. A survey of established + # policy among SSL implementations showed it to be a + # reasonable choice. + raise CertificateError( + "too many wildcards in certificate DNS name: " + repr(dn)) + + # speed up common case w/o wildcards + if not wildcards: + return dn.lower() == hostname.lower() + + # RFC 6125, section 6.4.3, subitem 1. + # The client SHOULD NOT attempt to match a presented identifier in which + # the wildcard character comprises a label other than the left-most label. + if leftmost == '*': + # When '*' is a fragment by itself, it matches a non-empty dotless + # fragment. + pats.append('[^.]+') + elif leftmost.startswith('xn--') or hostname.startswith('xn--'): + # RFC 6125, section 6.4.3, subitem 3. + # The client SHOULD NOT attempt to match a presented identifier + # where the wildcard character is embedded within an A-label or + # U-label of an internationalized domain name. + pats.append(re.escape(leftmost)) + else: + # Otherwise, '*' matches any dotless string, e.g. www* + pats.append(re.escape(leftmost).replace(r'\*', '[^.]*')) + + # add the remaining fragments, ignore any wildcards + for frag in remainder: + pats.append(re.escape(frag)) + + pat = re.compile(r'\A' + r'\.'.join(pats) + r'\Z', re.IGNORECASE) + return pat.match(hostname) + + def match_hostname(cert, hostname): + """Verify that *cert* (in decoded format as returned by + SSLSocket.getpeercert()) matches the *hostname*. RFC 2818 and RFC 6125 + rules are followed, but IP addresses are not accepted for *hostname*. + + CertificateError is raised on failure. On success, the function + returns nothing. + """ + if not cert: + raise ValueError("empty or no certificate") + dnsnames = [] + san = cert.get('subjectAltName', ()) + for key, value in san: + if key == 'DNS': + if _dnsname_match(value, hostname): + return + dnsnames.append(value) + if not dnsnames: + # The subject is only checked when there is no dNSName entry + # in subjectAltName + for sub in cert.get('subject', ()): + for key, value in sub: + # XXX according to RFC 2818, the most specific Common Name + # must be used. + if key == 'commonName': + if _dnsname_match(value, hostname): + return + dnsnames.append(value) + if len(dnsnames) > 1: + raise CertificateError("hostname %r " + "doesn't match either of %s" + % (hostname, ', '.join(map(repr, dnsnames)))) + elif len(dnsnames) == 1: + raise CertificateError("hostname %r " + "doesn't match %r" + % (hostname, dnsnames[0])) + else: + raise CertificateError("no appropriate commonName or " + "subjectAltName fields were found") + + +class VerifyingHTTPSHandler(HTTPSHandler): + """Simple verifying handler: no auth, subclasses, timeouts, etc.""" + + def __init__(self, ca_bundle): + self.ca_bundle = ca_bundle + HTTPSHandler.__init__(self) + + def https_open(self, req): + return self.do_open( + lambda host, **kw: VerifyingHTTPSConn(host, self.ca_bundle, **kw), req + ) + + +class VerifyingHTTPSConn(HTTPSConnection): + """Simple verifying connection: no auth, subclasses, timeouts, etc.""" + + def __init__(self, host, ca_bundle, **kw): + HTTPSConnection.__init__(self, host, **kw) + self.ca_bundle = ca_bundle + + def connect(self): + sock = socket.create_connection( + (self.host, self.port), getattr(self, 'source_address', None) + ) + + # Handle the socket if a (proxy) tunnel is present + if hasattr(self, '_tunnel') and getattr(self, '_tunnel_host', None): + self.sock = sock + self._tunnel() + # http://bugs.python.org/issue7776: Python>=3.4.1 and >=2.7.7 + # change self.host to mean the proxy server host when tunneling is + # being used. Adapt, since we are interested in the destination + # host for the match_hostname() comparison. + actual_host = self._tunnel_host + else: + actual_host = self.host + + if hasattr(ssl, 'create_default_context'): + ctx = ssl.create_default_context(cafile=self.ca_bundle) + self.sock = ctx.wrap_socket(sock, server_hostname=actual_host) + else: + # This is for python < 2.7.9 and < 3.4? + self.sock = ssl.wrap_socket( + sock, cert_reqs=ssl.CERT_REQUIRED, ca_certs=self.ca_bundle + ) + try: + match_hostname(self.sock.getpeercert(), actual_host) + except CertificateError: + self.sock.shutdown(socket.SHUT_RDWR) + self.sock.close() + raise + + +def opener_for(ca_bundle=None): + """Get a urlopen() replacement that uses ca_bundle for verification""" + return urllib.request.build_opener( + VerifyingHTTPSHandler(ca_bundle or find_ca_bundle()) + ).open + + +# from jaraco.functools +def once(func): + @functools.wraps(func) + def wrapper(*args, **kwargs): + if not hasattr(func, 'always_returns'): + func.always_returns = func(*args, **kwargs) + return func.always_returns + return wrapper + + +@once +def get_win_certfile(): + try: + import wincertstore + except ImportError: + return None + + class CertFile(wincertstore.CertFile): + def __init__(self): + super(CertFile, self).__init__() + atexit.register(self.close) + + def close(self): + try: + super(CertFile, self).close() + except OSError: + pass + + _wincerts = CertFile() + _wincerts.addstore('CA') + _wincerts.addstore('ROOT') + return _wincerts.name + + +def find_ca_bundle(): + """Return an existing CA bundle path, or None""" + extant_cert_paths = filter(os.path.isfile, cert_paths) + return ( + get_win_certfile() + or next(extant_cert_paths, None) + or _certifi_where() + ) + + +def _certifi_where(): + try: + return __import__('certifi').where() + except (ImportError, ResolutionError, ExtractionError): + pass diff --git a/week-0/day-3/venv/lib/python3.6/site-packages/setuptools/unicode_utils.py b/week-0/day-3/venv/lib/python3.6/site-packages/setuptools/unicode_utils.py new file mode 100644 index 00000000..7c63efd2 --- /dev/null +++ b/week-0/day-3/venv/lib/python3.6/site-packages/setuptools/unicode_utils.py @@ -0,0 +1,44 @@ +import unicodedata +import sys + +from setuptools.extern import six + + +# HFS Plus uses decomposed UTF-8 +def decompose(path): + if isinstance(path, six.text_type): + return unicodedata.normalize('NFD', path) + try: + path = path.decode('utf-8') + path = unicodedata.normalize('NFD', path) + path = path.encode('utf-8') + except UnicodeError: + pass # Not UTF-8 + return path + + +def filesys_decode(path): + """ + Ensure that the given path is decoded, + NONE when no expected encoding works + """ + + if isinstance(path, six.text_type): + return path + + fs_enc = sys.getfilesystemencoding() or 'utf-8' + candidates = fs_enc, 'utf-8' + + for enc in candidates: + try: + return path.decode(enc) + except UnicodeDecodeError: + continue + + +def try_encode(string, enc): + "turn unicode encoding into a functional routine" + try: + return string.encode(enc) + except UnicodeEncodeError: + return None diff --git a/week-0/day-3/venv/lib/python3.6/site-packages/setuptools/version.py b/week-0/day-3/venv/lib/python3.6/site-packages/setuptools/version.py new file mode 100644 index 00000000..95e18696 --- /dev/null +++ b/week-0/day-3/venv/lib/python3.6/site-packages/setuptools/version.py @@ -0,0 +1,6 @@ +import pkg_resources + +try: + __version__ = pkg_resources.get_distribution('setuptools').version +except Exception: + __version__ = 'unknown' diff --git a/week-0/day-3/venv/lib/python3.6/site-packages/setuptools/wheel.py b/week-0/day-3/venv/lib/python3.6/site-packages/setuptools/wheel.py new file mode 100644 index 00000000..37dfa531 --- /dev/null +++ b/week-0/day-3/venv/lib/python3.6/site-packages/setuptools/wheel.py @@ -0,0 +1,163 @@ +'''Wheels support.''' + +from distutils.util import get_platform +import email +import itertools +import os +import re +import zipfile + +from pkg_resources import Distribution, PathMetadata, parse_version +from setuptools.extern.six import PY3 +from setuptools import Distribution as SetuptoolsDistribution +from setuptools import pep425tags +from setuptools.command.egg_info import write_requirements + + +WHEEL_NAME = re.compile( + r"""^(?P.+?)-(?P\d.*?) + ((-(?P\d.*?))?-(?P.+?)-(?P.+?)-(?P.+?) + )\.whl$""", +re.VERBOSE).match + +NAMESPACE_PACKAGE_INIT = '''\ +try: + __import__('pkg_resources').declare_namespace(__name__) +except ImportError: + __path__ = __import__('pkgutil').extend_path(__path__, __name__) +''' + + +def unpack(src_dir, dst_dir): + '''Move everything under `src_dir` to `dst_dir`, and delete the former.''' + for dirpath, dirnames, filenames in os.walk(src_dir): + subdir = os.path.relpath(dirpath, src_dir) + for f in filenames: + src = os.path.join(dirpath, f) + dst = os.path.join(dst_dir, subdir, f) + os.renames(src, dst) + for n, d in reversed(list(enumerate(dirnames))): + src = os.path.join(dirpath, d) + dst = os.path.join(dst_dir, subdir, d) + if not os.path.exists(dst): + # Directory does not exist in destination, + # rename it and prune it from os.walk list. + os.renames(src, dst) + del dirnames[n] + # Cleanup. + for dirpath, dirnames, filenames in os.walk(src_dir, topdown=True): + assert not filenames + os.rmdir(dirpath) + + +class Wheel(object): + + def __init__(self, filename): + match = WHEEL_NAME(os.path.basename(filename)) + if match is None: + raise ValueError('invalid wheel name: %r' % filename) + self.filename = filename + for k, v in match.groupdict().items(): + setattr(self, k, v) + + def tags(self): + '''List tags (py_version, abi, platform) supported by this wheel.''' + return itertools.product(self.py_version.split('.'), + self.abi.split('.'), + self.platform.split('.')) + + def is_compatible(self): + '''Is the wheel is compatible with the current platform?''' + supported_tags = pep425tags.get_supported() + return next((True for t in self.tags() if t in supported_tags), False) + + def egg_name(self): + return Distribution( + project_name=self.project_name, version=self.version, + platform=(None if self.platform == 'any' else get_platform()), + ).egg_name() + '.egg' + + def install_as_egg(self, destination_eggdir): + '''Install wheel as an egg directory.''' + with zipfile.ZipFile(self.filename) as zf: + dist_basename = '%s-%s' % (self.project_name, self.version) + dist_info = '%s.dist-info' % dist_basename + dist_data = '%s.data' % dist_basename + def get_metadata(name): + with zf.open('%s/%s' % (dist_info, name)) as fp: + value = fp.read().decode('utf-8') if PY3 else fp.read() + return email.parser.Parser().parsestr(value) + wheel_metadata = get_metadata('WHEEL') + dist_metadata = get_metadata('METADATA') + # Check wheel format version is supported. + wheel_version = parse_version(wheel_metadata.get('Wheel-Version')) + if not parse_version('1.0') <= wheel_version < parse_version('2.0dev0'): + raise ValueError('unsupported wheel format version: %s' % wheel_version) + # Extract to target directory. + os.mkdir(destination_eggdir) + zf.extractall(destination_eggdir) + # Convert metadata. + dist_info = os.path.join(destination_eggdir, dist_info) + dist = Distribution.from_location( + destination_eggdir, dist_info, + metadata=PathMetadata(destination_eggdir, dist_info) + ) + # Note: we need to evaluate and strip markers now, + # as we can't easily convert back from the syntax: + # foobar; "linux" in sys_platform and extra == 'test' + def raw_req(req): + req.marker = None + return str(req) + install_requires = list(sorted(map(raw_req, dist.requires()))) + extras_require = { + extra: list(sorted( + req + for req in map(raw_req, dist.requires((extra,))) + if req not in install_requires + )) + for extra in dist.extras + } + egg_info = os.path.join(destination_eggdir, 'EGG-INFO') + os.rename(dist_info, egg_info) + os.rename(os.path.join(egg_info, 'METADATA'), + os.path.join(egg_info, 'PKG-INFO')) + setup_dist = SetuptoolsDistribution(attrs=dict( + install_requires=install_requires, + extras_require=extras_require, + )) + write_requirements(setup_dist.get_command_obj('egg_info'), + None, os.path.join(egg_info, 'requires.txt')) + # Move data entries to their correct location. + dist_data = os.path.join(destination_eggdir, dist_data) + dist_data_scripts = os.path.join(dist_data, 'scripts') + if os.path.exists(dist_data_scripts): + egg_info_scripts = os.path.join(destination_eggdir, + 'EGG-INFO', 'scripts') + os.mkdir(egg_info_scripts) + for entry in os.listdir(dist_data_scripts): + # Remove bytecode, as it's not properly handled + # during easy_install scripts install phase. + if entry.endswith('.pyc'): + os.unlink(os.path.join(dist_data_scripts, entry)) + else: + os.rename(os.path.join(dist_data_scripts, entry), + os.path.join(egg_info_scripts, entry)) + os.rmdir(dist_data_scripts) + for subdir in filter(os.path.exists, ( + os.path.join(dist_data, d) + for d in ('data', 'headers', 'purelib', 'platlib') + )): + unpack(subdir, destination_eggdir) + if os.path.exists(dist_data): + os.rmdir(dist_data) + # Fix namespace packages. + namespace_packages = os.path.join(egg_info, 'namespace_packages.txt') + if os.path.exists(namespace_packages): + with open(namespace_packages) as fp: + namespace_packages = fp.read().split() + for mod in namespace_packages: + mod_dir = os.path.join(destination_eggdir, *mod.split('.')) + mod_init = os.path.join(mod_dir, '__init__.py') + if os.path.exists(mod_dir) and not os.path.exists(mod_init): + with open(mod_init, 'w') as fp: + fp.write(NAMESPACE_PACKAGE_INIT) diff --git a/week-0/day-3/venv/lib/python3.6/site-packages/setuptools/windows_support.py b/week-0/day-3/venv/lib/python3.6/site-packages/setuptools/windows_support.py new file mode 100644 index 00000000..cb977cff --- /dev/null +++ b/week-0/day-3/venv/lib/python3.6/site-packages/setuptools/windows_support.py @@ -0,0 +1,29 @@ +import platform +import ctypes + + +def windows_only(func): + if platform.system() != 'Windows': + return lambda *args, **kwargs: None + return func + + +@windows_only +def hide_file(path): + """ + Set the hidden attribute on a file or directory. + + From http://stackoverflow.com/questions/19622133/ + + `path` must be text. + """ + __import__('ctypes.wintypes') + SetFileAttributes = ctypes.windll.kernel32.SetFileAttributesW + SetFileAttributes.argtypes = ctypes.wintypes.LPWSTR, ctypes.wintypes.DWORD + SetFileAttributes.restype = ctypes.wintypes.BOOL + + FILE_ATTRIBUTE_HIDDEN = 0x02 + + ret = SetFileAttributes(path, FILE_ATTRIBUTE_HIDDEN) + if not ret: + raise ctypes.WinError() diff --git a/week-0/day-3/venv/lib64 b/week-0/day-3/venv/lib64 new file mode 120000 index 00000000..7951405f --- /dev/null +++ b/week-0/day-3/venv/lib64 @@ -0,0 +1 @@ +lib \ No newline at end of file diff --git a/week-0/day-3/venv/pyvenv.cfg b/week-0/day-3/venv/pyvenv.cfg new file mode 100644 index 00000000..7f0d9af4 --- /dev/null +++ b/week-0/day-3/venv/pyvenv.cfg @@ -0,0 +1,3 @@ +home = /usr/bin +include-system-site-packages = false +version = 3.6.8 diff --git a/week-0/day-3/venv/share/python-wheels/CacheControl-0.11.7-py2.py3-none-any.whl b/week-0/day-3/venv/share/python-wheels/CacheControl-0.11.7-py2.py3-none-any.whl new file mode 100644 index 0000000000000000000000000000000000000000..36659e5fb7b65436e89d778eda8f3909bed7d4b9 GIT binary patch literal 18720 zcmagFb8v0#vn?FkPIheD+_7!jwrx8*wr$(CjUC%gzMS7zb?<%Ob8nrhHEUI^KW43` z=jhShWAv1h1O`C?004jh*pmp9X^o5AKmY;&;0FN!p!xY#P~XtZSkTtS$-&l&hMtyz zftHQd$lTG1#@xolmQF}mQBXl#PDxx=hStH+DOj;DVuK!`>zwMSS$%bM*0A@XR!(hI zQgXvG&RBg}Bt>hAoxpbo(=*F?T)-P@-qSXFJ7e+jN%6+Y>N?voKcS%fnl5=60qkIF z4}fPbEVLXdaAg%7U2~B@^}rcssjWWW039{jw8pOoIBg%t+YYpHgzAywRO>@vTLC>i zeA1oeZ`^JR6^6sxA{444Tx*LynxWFzlasBn)R(2ARJ}J32C?cQS@Ty-!6GXu1O(Wy z7K8)%A{T;{7_QVq8^{@WP@KspMmnA7iGx2Rj@F9|>a*#7$sXct9ygrB{Smc!kq!hc z*j_)@UnJ&fth_1#_)$?WMSv3fY`Xq)JC|gx;xYoc8*E+ZDO4Z=Aw${7rG2T$Vn?T? zo5bh>%uIwbDH((cw&ohQY5at9fTxmf*}m*JVB*J_?A6V7Z)6S*8?#e2`&Io^@9K7k z#boYY)-6=0mWY5PuiWnVM^Bv&(e4b;^#d*=$*r-qf}6+z1~RzX?S7U&J)Ut=ZJs#| zu`(On-1LXWW%nzwstC5E#5SDTwuo$C981}Pf1AAat=i@=(CzgdTG)jX?qKoxs5s36 zNm#ANlYu{my;xv@iFa~kf#hctZvyu-IH=A0_sOPqEo;ysr}rwwafQERLe~E z+bQujF5QodMRe4<)O9nh%&Jv3r8I!Mr8AfQAU(G{7-Oy6q09XPS}D?R5yrp(04?AE z0HpsTw4{ZV_=WhD_>+})Y&TdDe2#VPZDst@B^vUFm|L||OiJbH#?GAFnaNM78xX~l z3ol-KcCw5pR1oxPabeP)y_;-OS1E_%&=-m;oVA)Wrg0_4 z30~io1eK-Y5o)v8A9z8r=^WR}@v?ieXXMMbO8}1Dz57#T(G3Y4n*k5K_`E+pUEQj9 z4Si0(5*7-QTE7sC;F#=pE5tjn%v7FB1m~_`QM{RM8XQ^#vi38UuY!mvx`8Xc1QP$^ zx4lsDG}R>6$7SH+#o~t#XS}fC2(4&;vWW!!?kQIXQEPYJq=@Bl66&d#s~E+r-3$#Y zz6W;H)Qf(&CtUAxEm9q(*Uz(Blfy}M=pkdF>Cqm4CS&5w9DO-d>g?oBv-gN{B^nN_ zC|et)Z$a!Ds*a0|9s3g+>dF7r+}=yy^~&av+^?a!+Fbb}vQ@;R&U=oaSXxT324RY4 zihj3pzXOm4*nlYoHZK&mc7k{y?x~NW5WvdKKSNX~O)(&1s0>o3t#ECbWhJUeJkX5t zTNW#sj)B(^lloi*GCM1V8>=^^m~x+5sc_AI;G!oT%6nTS)Vx~Lv<9}Z()yL+e*7pS zO@6Uir!!&s`yFv#jdT_eWpP^6&N7Ud%#5I*oT18<8PZ7z4L+}Iy z@@WpHvgW)pLUdjJ+?jlLYA0L@^Y&V?UcNG&;kk$*xq0D$;^OjHG7L0JW%;Ki}}d^H5HU2oyV48Nf$(>Z8TRDNN(Vpu>% zM-Zcs65EOn+fd`Js}902{O(C^UtEyy6cGVs7imy=tKb7F7gQ7LP!nUVPXrRdS>sE> zoS2H@%Q)6Y$n;m>!B!8um9!D3vrM$YDE;jI;5mQk##-x2+<*eQh*(D-VLL0>ZeQfD zmP!70J3`kzUata7jo4ksI*epz*xj{uG)it;%d2jaUX)GSM8<1=PaGT&aO%(G8p(cf zbi}_E*OghsWq8sk`kq3k3)zl`R<1$~$VDY~(&P>Pp!ukZJbbtT`zIq)Sbg>vRPVUX zJ}0hUl(rRj1tH!ciAS0|2S7kJdoJwj+-St1<1Ag?Nf}?;c@x2sR>$hV1Krq-6&CO! zf*`6}54IWu%XKN7VWUanP(AczsZ$`qsba<|qi1rdPB?SG`~?KTyMLc;TXINjeE+=c zxvQr+XSb9e!(W$A{c6?A%arxrShypR>{Z^p5FE%`nn*pQfRT)fJU)zw!?=apzS@Hp zX`6`G?k`kzO4_as45wq27{QsD^|wIT+k-x8jJRx7N=!YS~G zl3%%@Wm;B-hoK?Os2x8T>lI+hwH_}6_KcQe*4ysw(a~uw3oH#^hLwwgOC1nd1jU`4 zl1U61K|mq*?gf{j-SVSFK-0U{aIX2h3a+@{PuZdjNnhC}0Sj+S_3_-SM_8CHVVrVN zA{=)+aw7!)Xq2x;yE0- zckMrj88tjybFQl-tG*L;Wy2?w(0R~^)^h9&d>*kj=wbsl&V#4qnF7iaj~GCD%f=l2 zcGQ-C}zP$mZ^yr}*! zlWilSVUeK1x^J_#@ND1s9V<^G#gLl8Xxi*a5CnIUjyWg)m zuBXY&C2#_^G_7ne60Mna9S~$2Z84N)lA26>jk}>Yg>S{lB2hxk$^&WKXWh+axE|K+I>@N@ z)?p5bVSrt~V0o`;pNEXfH*2vy7w?tXvX{^$3DTRLixo!sq|=o2%nwm!eJf$)TTw(V z@3Ez}n%f~fU%W?jV4TxqMnnB_l`f8|5eaOL-|N~V6$`Q2Xtu?2?rGB06bL=pB=5bY zj2GLVbojM@R0~W#q?~_+l&s~*b#2G(Hu>%q#0LxFa9oVuXM0pIcXJD%E~*uu*B0Z^ zP_koeW>=ZuxKLbazJ-BN;05;Q`k!&*WNW8uW$a>XMeF3| zBq<{`EharZLq#z@vj_CA`vRy`a#sJ`llBLb7(d^J|1}92{{NE@ovyCAjk%MqF0Gxr zbu2$z06l{6GtW@rFPG?Qtu(VRXk;GXv_(Ly+y$w~!3|9iBy_89Pv1LHOYMB?GNYUz zPdh<9al7a6LJ>)kGBOtsT0s4e-}};K!Qi!yE7e`rFt(dqW?Cj+aSM~va(1mwzAGIuQ*1Ug&NHm-J+)naFjVWVlbQ`lU^}>5K!0GYE0;=r11;f~t&mLBGM`F2q`4E|JHv#ZTHL3(SFD)UhV+!P5syE& zwA&{B+6sQ?rb3h7ZNIFUEDjrmaNSK{RdE#vW`{)VM!@aCw!G}lXlmSYLnd5HEGFtvI+_ji`n;9-sW#bhbs814rf+B`>JN4yC z0!ouXSP!D9q^^i2q6M*iw_=Y zpQm$C!Kfx&P{eEjL?OHpp)jtOnPgmPjDEfk|4(}MNa!b(1O)(iKm-6l|2I^AsMyZQ z*x?5)$*S^^2S4N5ObtRy61yaQhgJ^S-R#w+HncT|S&S!pg#3j#VZK^5u`TWABaV18 z^@Kw+3-!5L!Q9DvH)ix|8=?ZTxAkwD)b~2ua|P(WC4;&@`%=UoTLJTwC8*ZSV#1sQ zy3HFid~LQ_<~k7?l6@Sb+b3x$qHa$)o?Q1$Y_Gi%)>G|$JO_61jphP$nb&6SZ()ME zTeAjr$8VFu$pAsAur6!Mg?18)y67jI|xec}xGrG+aEb2aPub0N} z^&gf^wThIhiTQdg3&QafyYDP@_O@RLER|JbCv}0KW*%}GRaS|lxMBTZe8&?0Mi^Io z_{Y>Svl7M3RL3w^W!$AKZ9RP2oDh`jLCHT76Fp&52MbwG11bW2->0uGGNtxJl1G)ig%TRbq$b_6Fs5N zY0kfDM0D($M&}lUmXMsNERTIw7}!KJZA`?xh{g0rHK>EN z7okU&RWSISU!>YNSWk!}bMIrx#qG*qf1cs_WDeShbp10mjb6lb`w)ul5%21YLi12G zd?e@crKW$M2O&r9gQlDqfXj7Y#LJD7GjF`EEI^FiNj6SA1O z3KVeyrc5TCDi9LfCaVTFQ7tUE`}xbz9>YV}1#0L_MOCk32Jg z4zSSI)Xp2=U6Dn*JcoD1*cv!30$b2bVfw*|0q6HoE~PIh#)gfGf*;--M9XYYkSRDJ zxK>uOja`v_K>w3}k;;c}sDDZ|+E06o`fvXIPu>1u-z@nqn?QPm?N1akQoV(4bp;x0#vAe^oqr4iz^4ndeV!+g>Rp1Dl-aXUxQk_c>5|ln~&+tkhu{B(!UH}V? zXuq6{Htko#Knty-lP{?K!}0yk{1hU|sXz{Jv8=q<16d=YTp2T=R4m!|(!lMw_|wDeZW`ZjBRF-VTiJ)I z_7vCQz5!Ou;%{`v$KTlT$#PR1x9_{{gax-f@67+!Gf&H@Z!f;bE}lK@ZZQjDp{GO! zS?`c#q((Oqj}>s?zL?OhfG!a__eEn1Yg}kvz*1kmOvv%1V}H-UplMIgP0~r#VUkx* zT9yV@Ip$0=D$1UU)cKyuyeWRJh;*b*`ODMZhi%|a$tR3M)D>Vc)dy~jPa~VI4 z?T$!6%Vhcr72>@F>*;nz_{g0nl)Fqk+PSZp5_YABH?*-MtFM1eiH@*HK}tVmzVWA> zCis8E!NlCkSoeQHPF4Ot`s{Pf?q=wCS{}&OG9VZXwK#I_Z!BQ*=1OuX{}dTC!*FIX z&X~}zm#z3Dp|vsANxJyKgDuw|nbt_CL4LhHBBLB_BL1dkJW8ZU1-3%Dn^qW>ntJo6 z;&#KUE|_RTc$>Y4^Sb={h+&>`*KsCA-|QvvK2b?-)L3FUSstX(b;%JekOw50fcdKl zo3`#Z>7t<~M&9@rR!V)X6o|9|abV}y6M)p1$Bc`Xh6$?U@`E0gKE`D_V*!S{K|dow zVDN@ec4kif5!JwvTAEWl&nAtHZFiIa!1L+d)!9e3_cNWUug-RDR;i_mgFKVG0kvHo zMh(l2!OX5YhNafutXR~}S8uqf@Sv^m4U>6Z%m#n0Bu{u>NRAyWd^~F(d{`B*KW)zX z6rdVAc7_->eYSmRn({oY%;OL5AIY8Tm3-u+$;Kr0`7VWA}Z(r0j zuh{%@flIh+yXsvrZDLtjutZ=sv|i49oWPS1tR4w_fLe`cCjr^#@+D@bofdkUFfUe3 z-tK#ruGX*SftzWbO$0##tsk5)IttdM2)~M>hvBfD+$TOZ7jEGgKZpLO4_OYjcij&hFgehJ zc*D5u9<2h~C%7c#ia&ERLn`I*yK$<)EzWtkaYG?44=mWZ`_=nmy65&_PE?KlqRyq{ z)b^j8lfC2SIE%FN7ndH|>3ZjImkB&IN>I7c3PZ)n0Kv@^ki;B3H8I{~Z;5=bz?>GU ztb*Th;jzzF)vDgS{e2lzGK{;W&owXAdoGCedfPJtz@(zy!O*ahgQu~(w|C`y70{BY(q|$>%V7#mT)%0^~tKGsVa!Q7T)sB`F^+&^f}u7wqi>s z6%X5@{8k!7Cy3Q_67Gnx1f`5^(G=pXL>VwgSl}^lQK?w2`fF^*H6hSIG)`=|OT<-; z+_je2hrN4gq6N9!L%plDqf&vh+#p0c%40mc)b|_KYjB&ad$=QoFC^DC-p>9U2AnC~ zCzXEN8GtRdP#Ra4Jafi}^CYHQ?|ZNC$*QHqQne(|OWTSjyUz6F1W@GB>{s+y^Su|EUx z3xw~bfGl>p>ekKccxX|3`Ew|-xt1i`p?bvp_PHZt(e$8LD6cmMXRC|k;#uQ0&-wbx zKp=Ie&zI$^Cm+Thku}Gz;sVV?H>T%bl)Ml&tW^9{mZp9xKjHs_k{yhHOxgd%$ zwi`bq`@5=L+oFsj-FXN$)I;Nh%n-evDSzFGMin(E(gN$ZPhr7}p{7%<*@=&0cN|lNn zva^8DcMovs6ZrIpZB9utI9P-Yfs#bh2&s+UDS=bc^U?58P!D`Xx~}AK00Pr z?-l7#56PO#aoDMet6)&7`wf}N0eA?@( ztS;$|bxb&Po#I?d^|D&bHJtYyVLmmPbr6ac!~x%r8pwD7-U1|QB*-RM<_mOzD-{%v z>-CtOkKH~GV)>APxK3%8FPIbE&pBK$t~db9p8X%@i7bU{H+L%31 zCS$XSbe!|$UV#_{>h?4q2mxaGFKp$r<}+kwd$&KP3B6|+=76Y9mXN(>~;_CjvgEgTzuJhejIqSW(GUo{7cF@XMFtnf&&0pWCQ@f z`tR}k&jN$heiDTq~71_DB>QUyN>8u;T;tk zu~lNPa|55(Y)r%?3bD~!XyBVb;g9&Cna{Q%Pyu>(?o_KPW!fp#G8i+g#>wT@v}@Is zNn)$*m1;Dg9ib(aNIlB}l$g>$scA>-A;yO$iDy8q$@NaVpx8rcNYjhm;9~2^5pJ!`aL$Ckx4s80?IO z_aY^|^mHWTi?}6yEy29%;mgO20y4uQwAE7bqvfto)mydDxX~vLtr%Z#4^Uysgi!vx z(oPAff%1j!J!h24>j(J)=dy_pYBcmz zRxk(oHrzu7;*Gw5dr@PWwwlrC%Sr*dCa;EpHv>*Xr=VRt+JFbh;H|b)YBj`O)2^NF z^l(O!3W56Ofgt`hn0BjbF5MmBs4Q)E1VgIcHPOD6riEewp8lv>&6?ejR$k_UG}Pmg zpH}WHVu<&_J?l#bP)4O*gs+LUJu=yTH1~Wh@8Y(k>uKkAAH@8V5Wh}4A)suW;tw{y zL`SGnWu`-PE}>+J3tcQh3QF#59UU@et!@fQWGRM$VJ}}kY6v#etyL^so-!d9Va2mj zK-WzNtzZ2|;5NGRMQiD%kRdxFB(-W6-t^Z%$1Jk_(C|x?-bZ|TBTmirhyJAp{dgPT zeAOC|b^0TGf(GsH9`OksZDV2eL;cJ#4ojMeusu(=qAtMbvys?q`51eWUg*BR#JbQf zRJar%y8!E@$=f;lDlfpv{wAr#Mh}bgmMxMgLyBQSws;10istG;eW8S&MqVTnl`5mX zsI3y9o-_4#I>d+$FjPHpfS&xDEx7v29rWmkGNsr&EL?sBQ_f7~9iB$(JCwZsWqtay zaJ+hdj1nO+&JFWkfHnCsB-Qj6d*dk{^s1t%nvw85_9jQdfaMp2{E4^xibVBbfWC&9 z->EsnW#Wd(l4~0pO4F=949bKB-t;@g)NZ5^J{5|E-7d|pOhVFo!Kb|F$>fUDYzm(f zK#xO10Y9vV9_O{q_o-$1^NQ+6ESd!UPT|t32taJ}hubxmn)8&9!<|3quewmV5tARX za@&g4Hn2FE951OG7@=|kPsBH|gT%sbV@!J;1;;(45~^47fx!JLpje#9jF?;55x}wV z*L}ZBP&KgW9`|p&Br-HorKPo@GZo_0Q`IRJwxS1L{WAC|O@em`QyUJ} zrYc2Eq>G{3wxr@l7xq&>4+Um)ON0X!KGWC)H)uxKei7oHT%ou!x8h-MZp{pV^7zdA zVBP;7fbQt`I=yyXc1Gjz+~-oOXO6MR9N3Iz9}$%f-w1+Ivr+{D5Y$l^8Wg0AugibT z;h@@UZx4;z+M40Y7H7BskG@tMw{#!@18(SpsMdsIF^WX0D`(q#@K)c>4_xL#(_3_X zX3AwT|3l8ZI(Vho`V@vUcMo39+5`Z+5D)twJN<}dS>~n)vSZ4%i+H_pW*E+%3 z``TZ1rOC;Q4Jo}Hq4`5yy8t|ZpviNE9~Mz~;80!5^PPS4q2I^m;w=Ge@3qC<&A-6y zan-E%gk%B^V-w@EvJ976BnhcSc+@87jO5}9LxpTXNweF54#N{RhO_{IM%Yc0_rhZ+ zpo9mPD$wp?T9`mEx(dUfnwVZ(nx~97%_3&s&HNRAU;;}mX+oQOh7JBDuX>qk zVF67Kvh@o)4`=oUWUqVrF`+o1i%BfvJEV{tn&M#`ImjfSRrxIYc)P^_JeX<(lXSWc z&ajXI=Y5`B=`39yA!skgEUBELQ6+QgCq6(BYOn6!Nnj)At4&7ABoaMbeg^AlrwM@&L1s_3kSeud8_->9;jK34cb$t6b3+xY!S#96+tnmW`Bc7dL4K7;BwtG z@8c727=yT@a+VUnGzb7Rn<@zmgUa++^(F~d$mN3KdRog#-nh&L**>-P^m2`6Xew~bzI)!HyKzut=GOs@hFBs*oWN=^fw-%S7Xw;S`p96@3!!DxcJ5L(^ z#$wcfNP}sq%{?5}8!5^jwo9iy#W&gya(p5b-keK##2-9{x8==jm_g_Q3BjM`A)eqY z*+-iUq&j%1pGI->Ov&qSLyx-wj~Ja_GPe|NS4ILf&P~4;Wt2~C&mR`k7z848h?SBe zZK@bY4HA(uHBQG*m+zD-ixJc#28edznjS2|O*27fk(!`?*vSXkqZ7VWYGWzeq!leFdM~)hIW2iE*Ik`?sY&fnRR-N87 z0pCQYR_(S{vW{T`F=>?i_t~EVlCmsshW+xC-=c88H>N?LMbEDcn^HdJ#ae$+!i1;Y zUis{?7Lp>PV2^)>ot9BxC?=}oE}>k=FCZ&D7TZHaht`3U1}k83wNxCJF{)fiHM78l z$w5v^;LD3$DJKI#fVe@)pJcNYWj$V*Et0f@!s2Ik8;J1e#oj&>bDaS+qj=^MMTxI^ z)0Li%eub}ISSu$lA-i*)De0Kk<=V@lqe`h;*qw-#5;)#pShqjKbhZG{B8_$mbQ{ z;+#w|1of1nXO;;mb4Z4-G^5fJWy1sK(M|~YxGs!O{u@QjL;e*=O|D=s3#`=Va`(O+ zJ}71?FiSFcd#3tTK%UF@P$Scxqka8bq=6y_g`_&?(9 zGQxMAMcqsdXgLV;Zxdaj^)7xL)$*N!6$|Lv8k&zRe706@(<;Vyt2{tX8L2gw6rBFV zg%NYPJlwWmNWaM@WkWk%K!h0Z#^9?RdbjmQ8%>{&FJRqUhHJ<~O;-t-)bJ1iyEl@8 z)+cbyY^#DlKnQtJR8i?zrFZz>LSnZPi>`11RAeFgwR5lm896yPvl`1}hesK>Dtk2Q7cdlRrUgN(JV-P?$!d-Bh$?aqp z7(NU>KJa22Ovju+1IY2jfHFg;K;`KOsAVYf7cST;KvClR!J*WqzTg<#v2GDu%>9Ug zD>R7yB4QhMcDzW}Wi(;1iI@zSt7nr7gR_HIx#zSbB~ibK^`Kimg-qPOK-dPSDisl2 zq{(A$?T*yRkS`ZM7e2f>MV?1wbbK~R+J$qK&AQR*r8S}y-S7```rJ@qjvSfMdsb|r z(rHHMv}Oe$I(q5LYJsb$luFba3y*vKWiDb+hZsndxV`ci7Gj_>+g_SRa0{0~j;Hfr zq~VLd{DCO$W;ESzn9a=gLdcz=M}80SdRcOXI5nLyNbBCk0 zCXj|)xA9hlEKP>tJWu9? zJK+|U^}B5A09O{bG2>)(8=KE-&IjJAai~anLBs|tL)R6`3rg&$Rds}T!y@f*jujTy z%H-_tw&n7!gE!-WO8~et@$dUv00n0kUOS{YwO-tVx*i^pzwvKGyym`H{bNru8N5oH z58}tE9S(ia;l=wt1rT(cLQ*5Jq6@E~J13`)s?QlvU)VJ|Ph6EV%GzyL4?f@DC?PDm zT?NIC_u`XZ>oasOy!hmNJRZUAg$I~76mCFGB+a_=0<5XC`fxG*wI_?Z9?n~K3t33s zZ;>zN)l`B>Ej)bSHyc&B(Xh!cB!xWegN8Qv&NW0xq^jcD%>nwTSN^NgWl6PGb{z8u zpFFxJFUT5mF;Bla!_*{wsO_V?2Ijt*8yY;={0tPSrPr&~TJ%|#tqNRa$bISX131EYLSr{c92z`Z>^)SXk(o}dfY;<7q?8Nd zWjMTO!}>S~IHy&*b|{=(Q}s$E#7rePAAT%L`%I5DRZl^clMy{xSLKuE6UwSSokX?Y z05>Ex{SmO|`S6P2%?FxDnNlaH$}GvC$pWIonSSWv@V% z^U(}@-??>;Y+PQq5t&+1(TZ1TwrzTF)^X!9b$u%k?sPD8Wa3aJ{ImDF7o?)gy4#c4 zJBk)B@W^L22z^>6CWc&SqgH>_$d$s@nQc55)Jtr*XeU~Es=^!5hq&CAAi=fyuh6Y} zP2vhB*DKvWZ4WC_X0O*DUFiT40N~fZr{@3C`CT3K?d<+DHg~D?+59;BUGG$2V|}b~ zltZ|{FLA}Na=B&^HvT+L(Ej-%Xe%fbaZ1?V-aB&5)E#|5TLW)#tIIc28Em#8HUZb8 zZj9R3g84ac;RiKzkwXHSs6;#zmQ+QqGsAZ!xo_D6TnfKeTQ10(DCL2{ zj0nxoiHLZk)jozj#G;hm#87ui&`j9_&99LUdV-e&%{c6S?q|qLsbnsdk zY*FN0C+()m#48$ES=bA*frnI1+#~o1DSY72lZ4wSv$=t^V z@~QIxtYxxvs%r2GjDO*4`SOf)q~#vJwqyqF3iXx6n3mb*p)ORc!%<>PZ>^TgmC+Ok zE(<6e;5;bO##nPEGT4U@B2jdxhK7YHA&mPy?Bac2YhLiUBumDd_yaqb0Cf6wNuXLuI)Rc_r!i__*hev=3jMV0>-a3^5x- z=95=Dd#kYCNli%IYX~lA&AgHDS~Urqbq|h zR&m)rA?6%rQ^WRNK!v$Y_a&nB05DR-`%STzE0jx{=h^=5)#4aI8du0bf0R1qr>a0d9!LHy0X17KD42Fg|h7a zq`#j7+yA=_rEu=ukEJPr>D<-Jks$5ogIE&4l*}%{LdJt#Ua+YOG$04^Pa)5M6}BKo9ie&KaTSYCAUU3Y;a@)7e94*+ zou@`uD8OLqN2ca#^jc;n%95cJ4iO8XfQFV%6S%UZGzxJJV8P78mK4@#iT^rEno6uY zWcj=w^$>$tXkAe6>T<*BYE#Q&TD;stJR>P>5$W=kzxG<|P!DTIk|{}yLy6zW zlt9{3LdH}BCbE3I=-M@^y}*A-Go?5A4yw!y(YgrmPmU8pPxyn>Lx>*QbRA4YlTXtZ zew&}AU7}3KchedyVw~t-+O;4&Ek=(4(`zmR-gHo9R#mfsTI{>WE&qJrA1sSizkIo}i{4hXj>Pq-2S-~~8r%Riewv4~ zq#5*ztI}{!2cPTxt^eo&36KFX&8OAv3F>xrgWDc4QYi+Z0EBhu$P}-k^mZsa2U~KA zOW50vISg09I0UJ2JrTqNb&5kk>ofrc;b%##K&4932K5Fg)bm~HKj1$7^n9SapYEoY zM-pwe8qlFonU`;_>AI%orwZxaTjVsWfW@4owbdRgzeY$)yyN3c9h%PErHRQ1IZMdo zojE((wTZu)Q*X|DL`kQ$S4l8lU|9ZiMBwZOOjc&m@0>+U| z7B#)^?}i`+mU%@6+HOV=tf#Db3g>CJ0d|u2alLI{!3RVcX^Ks%>R+VBp`M4S^Dkv4 zQy*

    ETi{GQY#}hBZB>q*gAU6g_Sx5JAUh4$p**oE31TIdo5<)QQWE6I-8kqHC#Aa`EufTnM#{6@x3uuLG1;!PMY!3~ah zC1PhpC1nKRBt;xy+V6qA$1D8j<`U{j1RvP8WRJJiF0$mN#J;&7w^;Mg@KugAJ$P1P zpk6|N=IH?PqN*V?O)ACep?(&~1p&nc{sdGa$dX<0!7NW!MVf(XR5Ui*z2qj45hzP9&a$PKQ zt5xBwO3GcX<@RgZ6u6}{kILhQ5oGQOYs+gty# z+L_Kp(y9WLW>ODpu3?Wgd%&>HdEoKW><64eP>P^OBt=yO(kWkNN|g|`PEHx? z)6R&R*=$dhG$3lEx<;N-XqhNF`j0G}PFm=GN*!!-d`*ScrYnDW211yzOs;e9tU9=L znb_i*0q2oC%g*bb$-gn#SZ$IdWS3br@Pxg{4%xnrZ#?7)zCWj#S5LC2YVOM~#87OQ zCJY#=&mK*BIAQI?KX2i0N|a!31Mbb=Z5kbgt-+)i-XdZ}w^~%8)OQ^Um4(eUa@VWqFpf_olBVM?pxeD* zJy5KL`2zU*^X zIFcvlC9_q=p&p+mgeMuLttB$$v8%UO1uOK({IaLnn;nhnMu}vbb*UCu)!jlJqIu1- zRwaQ*;BOtHbsC8V3tgry$gk_Cr(@mLaw-&=T(mX8a9@^hZQF;sqsSq`V^FJR-JW&3 zG-Zw*tJw4kvtK*Z0KTvz-bD-C!VFZw*9(~$6@Fz>Vffkp0$oHbAn8|y3gDQH?Ju$j zGXRhH`2cxAO6g-TIUXVG{$wuo5n8i`wRJ342~3&L&0Ubw=#Fx-9EP=toNY@U!2b0K z6rgx+L~0aYyV6S5e790WNqza=cP_dI20Ccse^{L6g1t2lM-DqA;JS=8RtNm%}PyaH39J_DS(f?jX$bhr82 zcE6I5PrA)=4UYJ700Gd*?pe2nN~DOAb8tbp!wbaHU)YY=e?IMCb_RDQDrl0I~oz#sV4LTj>Y)~hD}w4Vbu-pN@K>WTbmEb0WXPME}7{n<$ z?c>H;Q+=&Te!4N6x9h4c=EB)PL+GO8COW+Fc1Lu^chGg!pZf8hD20brE5_=t1qT`K z+wH)+t1O3y1|Rxa$i6*3WkNEm1<*)0NN5>R2j`t@=3<C^QL$cNSAU$$Z5I!1O%HbeksO~sUWpwq@^IqA(xeN-1Eq1+eTTE8%J&8`1D*Cv~#R^=%X>MVQ zHi?^GrUQT4leDtH`T9see0dIAMvLn-e@HJVO@V*`O3`vddkOj&z;|Z&r;=b9Ec+=W z@7enuAzhSZ`4{6+VmV@|(u;zCg`bZu@^R7WRXH}xdjBDMI6FGT`r3Pd z4oTKrx{nNx(W!AlsUAvhZ_``?vXs$SyG)@SzrqL11_+~ zLB4^QhfwOACa${b*j3@6xbQGen!9j(>et~QqGFgH;+}ZdH;mGIbaUJ=!yggmSxgiZ zabTtfd*Jng#xU5tnLiDSPYvcYtEq3R;+oNxH_~l+v!eq8{7d+roag=*HmC zd|wvK)873DANI}cNo=nxM8#66(54vKpu5OJaQ27&%Qv1sW+Z6 zMDU(@1`_0raqNDMZXd3ff-iKAfkn1HYys)`0~|z+;D!dAl7|tSM$fSnr2{D|T7FV> z0(WkwDZ<{}-0JePPDG>tmZ2v0ur=IXV)ZNR`bX30txK1AXtO0TJKW%(u#0GJR6cWt zlLYOv80Cg);aJb#G7Vp2=A>eomf4GS=Qe`cbM=u`*vy?GkpnILQm)N+yP8v1~0E+QIvbaP&-d6iwcCCPqUy`Kvb#Z(&%`vdPkjZ4(LIxs$oVGmtv*s z>s}H};Cs#FljPAb^0iUE`gZMYl!a}SQ6)tAvW{~gPU7FNp$vtF761db6oT>R=jJTY zB}(`4<1DqN=%KBe55JefJPFF;?>tj*tj|_oM@-OOqt{W)hvU>*E7#w%LJ13{$AspFj~4Y{>5rkYGBzOx^rCn%_hAVSKzBVc(6Q;s&lmLD&!;E^bX)~4SVQ5d;%B0UV9;m@-^e` zIGm)o%Phaj7+a+(>=({)vP@+1)aI7beHi%mEycb11RXh}qb}(A*V;>@=a4|>Pd9P* zv-C!PB-Fru82DOozL@? zJ?wh+ak&Z+pu<8eTDYo2i`<(3tV^uA!H)w}Sh>1j21RaI8FDmBip~Cq!H2i+clQN= z>pr-c_y1SP{evVBhG78ztaFjJYe@^N7PlY@#3_`9XsP+83W9^6P#Tnm9Hm?e0tX?; z!Dtb4FbLX;kcPHsh$31V3S9aFLhs!nukUku(m5Qr{J2{@zW1KzEAE_J#Yc~qi$A`n zLhboJIvrEy?Zf)rThiEnnGf!6`y-Gg zZ@7Raw!zuds2}caI^A#-v5Cs!BaI=wMZ1@ZAXY~i%mn&@qDYD`b_*G<4)udY(-2`S z7cv~6;PqOMsv#;^-(%&&r8s3i6tLCB!U)ZG#C>qb3lXd)FjAnVfM12%&;?N6*;?MBGHZ<<}aB$9P7>{MH&-5O!~2xrsjdXy>{*o4NSYSaS?VI z9oaW@aQ@HE=M*^dYXCwx7G!9A1|TscL;z-rbgns(!Pg2iTXA6cC9|~Xr++l1 Obo!mrh;t=jUHt)|Z35N+ literal 0 HcmV?d00001 diff --git a/week-0/day-3/venv/share/python-wheels/appdirs-1.4.3-py2.py3-none-any.whl b/week-0/day-3/venv/share/python-wheels/appdirs-1.4.3-py2.py3-none-any.whl new file mode 100644 index 0000000000000000000000000000000000000000..4c1abd7ef53f59c2f974ecf2d09b84e31b55f523 GIT binary patch literal 12139 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 Zf<}2MaEO22efzUx{z=z)=>EC;{{Xs7sp9|u literal 0 HcmV?d00001 diff --git a/week-0/day-3/venv/share/python-wheels/certifi-2018.1.18-py2.py3-none-any.whl b/week-0/day-3/venv/share/python-wheels/certifi-2018.1.18-py2.py3-none-any.whl new file mode 100644 index 0000000000000000000000000000000000000000..144996e06cc8ba53f4bdea554705883e120be146 GIT binary patch literal 150807 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

    ;>YUS{A#%)2 zv;`6dGn!k+l(s&X#b+QdIBH4Ub6+x=vBrj1abIhTo*b5h_XsfbVvk_c#2Pv}Suffd z%~oVsRbt7q39PSRCcjjA47nPE2~#Agw7HKRd|qHssnN9oK$V5X2*vH*Dj^sfSyEB5 z+ao7QyT)Qrd#W$99t5&TS4h}>0r$9eTTDpTFfg-KWB|?81*Yzk4u^@$4x9cmFm$Z_ z@sC35AHzDkNdM>aT+^}a|IyNEehl?D`0(GZ^%W-mrFDMW@r7bLJS1?GAR!PV36j7l zh$NtWJC0)nx&QeioS3CY|I?1{c3>D02gXB?V~ha-e_&Vkk!!^cycS_UlGG!!1HgTu zChtIP2ZJH}Qvx1%5RVUXa7G-|fm#c-by1pjHYQuxJn!i$r;t|mB*Y3;uqiQg9!lXu*X%eA7%UvQ%Ay0+=c zU)5Rv7FPVyC-x^;@sBPO_$$}>N0$lwmFxVY%LM-DI{yk@1bzmLG~YU&mJ=L2mm8=o z9_K~VW@WamKt>LW<+Efo)`Ds_+4M3vtGBQlsqxGJ$W64zBp|dkHx)1o^*AK;q6IxX zq_P06d{BXtx6q1M}Ern1|W zCzNvEs0v={+hsm)vK0&}j37~+;lRF9ljV3541Aw)3hzUAd7%-ehK%`Q>LZANNPn6V zy`3RXn;2-hhEJ!yB2-D2d20jy1BZfUA#p3q^aWxip~_Ve;V<*(pQjvZ?2orjSTaRf9Xz^_6p28CpNhQW7|y0HC;G) zV$X(4(ND+ZDY@%hG))1Ap*&Z~PiN1pu7qF&M%UhX>18avI^F2TggTsIa2whIg4M9h zIN_)Cnvucc6|0-_fS6Mi^lHl26lAVNJU!Ka?6+p4N4c)x-D=Bm%xt9QyuFE7Pb~Kh zUi?jg&OzGq{rMQIk#cff^jnfm$U)+Qar_}(1is53{1ILhHYcNz8#N1*5i|`a-UPtu z&)1WB3Yd1EL{kj~{E^-9t6Ge|hC&AolmNL(T|5+odDO z?v8Id!dJSNsEk&nu%Y)%{jh1KawDY^S(#=?`oi5Z_?+4lmJra=)XzdS0_4pU&ZV;9 z>q!TvM(_=fY2ec%>6BZE&hS8x8WUqnm4O7)|dyERntx+ zWHn^!Iw(k63L-}NEe4%f()3(jxdO+R0o#U9<$mf7;T ztn4cFex~^|;1@srg}QIxsL@^^l?>)SfD^uf5uJvXR;$|T#{+fMc?Yt z0a?}HdZiV_N{|%`ME&>{-2qbzUX-unky}!-*4!<9crS{4$^GJ~*OB=QCT+coA?QM0 zSmb}5>iC6IXq9=l8`NL_pZ{}~cZPy3NU)l_HR_{uHpMd0VTCw6#GUcY*fJ0ASaV_!xNuDks_ zn2jHsstOMe;B56nbJT5mQ*C3`pvULb{_2?lKRUI)dS-ws)JLDdujz|lU#LCYh&dyt z`Ij1CAWDt0foIpM4n$h7_Zy(mjaUYRv9ESKdO1nGH@lf`y!-8uC5`bW)7fCxs8jVb z85fvY*3YR~Zg}OqVq6tNjaB#e0{F9h_HRb5{d!iLV9hBG3BXI2>Fhiz(ff5$$(nqi zwyV;Q3(Gz)mWomzTL|W~$~&xNaB=;-%RWcgv0joK%1|i&VNyrO zLt*#>vju(1+|j3azMl`09BEB3`;^7g!yF>$Vf=Qudq`nr2Nf~HKKK(lx}K8HsMZiW zvX>ctuqKasJNW5erS^0EQ(!3`smRd!#ccUPBcrVUdO;q>cBv9)jRIfhZ^^a)$ZSFX z|212`JGH-Vw!Xu<{x#{^1RcG3Pm~v(dp+TclT2Qx$tA>I!Y!eW0rDa(*O%p*{K&eQxYRQ4Ob*DdvXOMX8Y@==)lqeWUG1s^w~gX+(H0ep{jP3vyY zkIf4v{pFQ63>swU=?sTx2U=?ik%4x*GS>a-PHhfg5SG~ai|d35Rzg~qOX2C~(i|rW zR6*NQKMDIyd4D88tz>l}R|=^hvVs4pe{gv8)csKGvCB_iZl1^Gz09F!aKkOah#!;YrVQ7igL zxE#hYOO7^`9mnlv@#u`t4${$XhL23arw<=_^5EjGM`U>XjxNG$|NT;}aaMjd9ULp$$werD-SE^OhD+=2zva=t zV|8#xe`_v}hK{fEp?9mNeOgd*P;EX|PeQ+#LTUTi6wdc=X7btfuLmJLRKe9i|1N;i z#cY7MWc1)}HgUTYQEN6)#Sbd`WoLSx%RjoLU$kZpNxu zoj=$wEKqcPG{y~xZ{z3*-4Ll(?WCok3^&!P>~$2*8#l)B%~jKqE*|iOq=r~YH%ac8 zH5EgV$2;VH2c+5;Mjf6O=#?rH9-q14(u5f#z_E|5l+4mgyqzLd(;@T(u?un;S5mp2 zrfRDR;pqX(My4^H&kt=AMi_d7lDzWa+sf}nkQXVE%5r`hxAcbELuKb%P4}yGen1-= zENUXGfFfUm`>IXB;7$y99s25~*VCJ(+NDZWM6oLv!dxXHBb2}zGaoO0%7&wOZY-I1 zt|maO7Ve9A*xoXk&%pa^JE1FjZ-cruLrv%y^5&KrD;(!Fw6%MEm=yDN3S01mnnlA6 zz%2Z`lBQ1pTE6ul zVJi{SFizeUV#GY(==B{7e4$RWkUX|41=}?ZvF}P2x+m$aL{s_5Kp@yA-hfE0i8vPB z^6EBkm3s(FEb@aJgU>Oq3A@c7+N_P9_CVpOJgwF2=pt6%O6`if<>pNQvvuK-Rc^2`niR=Nz2JbQKeO0z9YPp7-GzJPaFh z*BsHP*CCb=d!FRNr#FWr(bvgS-xE9l{`%lT(;2cstef<;R`>W?TnX&jCxE1_j{7}b zsn3{mo>t{HVeG5qDF!9|y>P`|#afnEg{#5I6TC zKI{dQ#w*DnCmPv};<+7|m}6($$9l9}dLR!B`86RYJ7&2`Hg`!JaOwvjcTqLrBAAy&wc@%?=&@3R~mfbTL0#{Ns>u++;M@|(x)4yQrn%s z_>bi@4*`UnB2rPpkW>Zh1u;Hj%m5fZOrs@iX_k1F3>qYXtb}?pA)!1@Igh@A=&7_z z*PyM_4O`)AULAJT+Zw>3tsol6#)wW5`E`Qxnb6m3mo>5$Ji@EiZjIf!Vt+;UShcyH z94fMV$)>9qV{=QnVwC1?PXJ|t6TeJPXd}GtJx@t=WdzMRM2n(m9#1JtYDlGP!jMQ9 zs)xBj5woLdyL0h$zBd8LZOhWL?T$cGi^?uhluGi2%InZ#3wOF3(Po&+^yCS`yb2}4 zSDHUoNrf;ssA0e}Un|056#OteqTB`(cU<{S1AepaaLD@j=X?uunAvKcdD%;^G6Lc0{#fuN`uw z9~R6WS;8NMKlqRWJho6D;!XTvyBtl=$#GiPpB6EM_=CF2U!$&j^?lUk|4Y}A)asXwvsx9QDtxPMjH$ma9dL~MIr7&7 z1K%8ZQEa;VI;T<+{sYf`htBq()h!td_$qyT1n$!Bbku$pxX3>O7wkviVs{=WnVib3 zuB~mbfIV1-u9t2^=(a|o%R{y%>_z7kDqrwI@-9VaE7(}S9Nd;=hM?Sguz1!c_?MiY zsE!4k(nm|hzUv^{&Leoc*3=hP;qe%b*xOSU`egrd5(w{w26)+ zKyW@Yz7JLQe2R7-JMZRl01MK1+&Up!f<8Aikub4G8tdv*nvqD*Uo;E2qCZnM;O)B21<{za_8B`3fNo(94Cv zFvMR!#<&EacgAy$V6JR69FGB(u8a4l=mj29RV=sj{$uA{1@!1XE03 zJ^t2Q-P@8B^;6uCvtov`c^{nI@xgb=r=A{jx7Wz9w8I7#%U?r0vw(9DxnP7{I;YE7 zJj|sUMM0G()$1}>>jG^WCsYDY-1a~`V1puyIxg@@r(;Fq`35~8&h^_nc&S)}+1=14 z1ga2dw3Tr!L{eberky%qLdv>}bQ1my#kilI^z%~qPxf6)A^^Q5H1BR<0lk}>rl7?NP^dlz>#BdN7}4q`C=%g0Lkm zQ_K)U^eE(Obmno{P9aV2`PB{2EnW^CC?F!TMK|WuKadvyCz*a{vd7bEUolvU81`18 zvMmCE4ES^UVhZl;#9?H+PGe(wz|(@AWW2qNX=^y51-#L+$v}@Bu4OaXs+x~B!JLC9 zX5D#jj+EK=v17ve=EcNSl~oSHL-foJx0a6_)@FhEW-phFHkBxBF0>Lsu%^b+B0gq~ z^R7)|K4~pFQ$aNlNrzmy`})o*;jLrFa*1SR1=y#iy1e8IrsThqfqZr5>r7tY$Hn%a zF69nA6^C7ThefR`&Xblw+bfLwjlaE=X9lOh+xAh*X+?@g9a3+_7kBDxqz|jEbLx{t zgo45km#rtUVs<@gJ=xZvfGxCHOo?$l4g|11G}AH-eKwwD3U(j)D;TM08ryo*V&V1T zyDO#>a``N4f{sWOKZy=oz3lLIdq^R0X>bW|IP{(>oLSaa6f|QrxWi$ZhO`a0ojI=hN+Bn@gZ>7f>?v^a`XG%E)WexWWFVd`?^;1PZs(Q;`!8IK8d((ONS2!yL4_Z?a5ZpxV`G`R!HQmE}O$5oyCB0(Ln}O%g%bGeG20fv7 zTBZh#+fP}F&v1kUcqV5KU&jFP+Pv%EnZYgXu;vS)gMGAZI>hByIh4<6QvE+q_y%MB ztsTFjsz2W8H<${6DUyUC5J4#vM^G4{Kny<8TjZfAfRhM?!r#>qh>)Y-jQG^-c5IY> zijoQPQ;HlA3Z;&QuKg!QeLBg0kmt%i`iSX4)IdKXE9j@Fh+#jG=+U{4e`bFjlE>+1 z^h10ULXq$%82eE}T5?n&_v2F0F|I55Fht1cfLKS76#S(8)1&x6e8z`i;PH(_#{q~> zO<_OSzT*zP_LDdo*uW!smtqG6CQSeCJPCu%1vaPmFUP4?-hz%l>F)`$a*Xml9RX{P zbiX!R$<_{0qQ+bkPXkqJcjaGGAa@)uacn@Ii?&`zMuLMgz(?)-0c^C(w z16J)FTvgKch2*h^WWU*1G0NXPBjDRp`YUJjcVqxMhw0KAR#OnCUC29S`o6M0ozpEq zo21Yh8$gWtvD^9ijN`6>D8VUmlS~>Id$QbO$F(3cpBI{i#H)!b`HGb&P>jzg|Joj`bd)O0$%ZXgE% zk^A7!F$%7w9Ve_BdG`LkGzd>y9;|90>jmc=a#Cv2$LJAFvXzwom%8^_dKBBb1@C!^ zy6g`1`SET?^aUP-K*F0iH+YW>Ak5P@C{4M{T~#~I-={kwGg7%e%o6&v=2&yiF-Gpq zm#vzNrn#CGU_&7L!iHvcTPLt!DkL&_V&PXiM4KsT+p1^o z*)nPsaEFFI%~X&F138;F&JMt{J!2?go=U!Z%E(&pWZvmTg4pO=m0qZj)1;fq0Ypk2|nqibYBXiYfT4^_UzAukAC3I zSg&eu=3c4xebtoa);wSWzjIf~VZ{1JkGC5?-z`(^B3 ziGgIPI&-oMoA;M%m5|kq4K-{Fpwn=v$yqxs)HIL4#e8d|`iutRQ55AcUa6~ab2GIq zi6o8d9YVncr(6vP!yU?jyIF)G2I6Y+?w;n7MuDD*?{ky{zN@-q(x>MTA5YJIyl;01 z5?d0PV1wE`kjw_hwq-fE*%1|F3D(rrGB_x3ngiq1yJ1+1vYI}SuG}8QlYDot)}*nb z?z+wm>aBGH27zIN13?Mj(VL?nU|w^}mE-5xbSmM&S47inpoa}G^Ly}<`$l>f+DwwSM=!x$VRrEO^1)Jb9@GAd zBRsfNxA_!qw=JNhck5sz__{atG?e(O346-^mS<Cw%R<|i`t7Jzu$#{SLLu~c;&iymI`pJ2Jjj&*v+`%nDVJMBF1Wo-2VWH$Fr-dJ7 zyZqB$K!3EckG|OWs3*c7r}-p3dSri+)7lR|a!K$3Wp=DaQy)D$>{Ch14SdK*6g z5b`mhKd4pdVdjwk%&}_+LsDm; zuBgyQ*SmyVo#Zbn2<%!O4|h+AJ*fwU-P>@%zE zPIGiE$(g&{44gAy7C$AU)>=TE4)S_G!5+x*6a>nb$X8y;S=0Wh#Hdd2NKLnMk3Sg|BowRPHtBHDTjR{mV+SAkyMX~0Kp zy(6%sjshyww`l3K1T_J)CS-w+%PBGm5@C&Dc&m>#E_CAb(pe2ZX9XTkR**gKR(D>) z@E)9Axis(VwZx$Vi@L!**9 z%zGC5dyA8gc3S~@y(|rb*a-0u952>#Ki~=Ec~|QqY|%iEut#}{H-zkCI^o`_YHt`< z;;~V#7q_BaKw8%F^73VIim_+CT6-i!m_&lh2Xf};0c%D3PK;}IvpmXK;}MPq{5iOc zEn2VPWrqNg*M2e%$y-9`&;{QW?>xf_oamR{Qv6lV&m|iSI6V!P`eR}Q<4^>>8#m-R;ZPY47c`O%_h@diLpb@bwvzDG6xjPEZ53l=DXhqSxVmy`Cp_ zS;QpHG@r82t2lN9*b`?O&V==4)>E{-C{Yq&U9@Kp=*re$&(F2%=(d8-`AsYYmGhaf z6PA4c5~pz!Jr&tY%4}Nk^G4bw4rLDf!z-OX$Zh4E7Jo`3be@e|*u$|9b5Ib%;$`;b z2mjS)BiLp|)c%h#dvyc&e6(rpwWTY2;#%{N@ngrG3=!$A0S_U>@? z$PDJk$wxOCcJQw{4%((R_P| zB>xpE6mAD9T)z|i1*^Sk>YwyFhYz9u{fEXa;NUKaHRF8qY~>wyO20s=K@r+1Sg~cl zSocjlScdgBw7!a9dN>4pp&#K>=o{}?a`$C^9@C>d>T5@%Ec)$4jVo)_Vpff3a7Fm_ zCcxLb9Nk@Aj4H*x-Gw5FUL*g}h8zngh*QJ}K4eErF8>7?GK=;w_q!iAKWeStkY1bg z<{n>9@vkb7w}IW*pHqU@b4bj;gMXkgyr{fyPhm zRk?=wIwPHU_2kP9d`Das(_3H!>ch%|0S0Zrbg(2D!>jf_uT=q}#nKzmonsim$p$U& zyBB4-Ym(fN;?3PNI_ie2-}##?=Ps;xhi0J!4cn!!h>LqTuMBZ*nH1TqPA^=EJUhWA z?ULk7NaTKZh2UVna?XXPm3nePOAnY6)fvEZgmYQcueQHTo6)Tvhfy212)S?Dfj!24yx$<8j=Xo!EIKAuLwK}if)!GSW_?!8<@ar2e^$<9>!0}^ z{Jt&hnN%SGvE)0?5;AgSCsvTWVb9%jV|3tWZfRLarR@+QnN3x7klW>~34!!@brl{~ zzGl9Jn@O8D5UB0uHQ!X)MmgbVZN0xdwPNJx<$3MImhfr0v_c(L zZ(%e`WWI-h+2k7mruFPFqM`cM2wHGgN8mFkk%}>0mYb3ir6PS>PM64u5ZyZa!;^mT z@PJ6j8-Q~i*|$by#TQlYt#&sU^czzEOhB{0;?O>IJd8ZStG9~D6MiKTbxS#cxZb7Y z#p+l4jJ-F^1bSv_`tV*-AQy8Riy@Spl+f+;mafq{_?)cua-CD8&=v~*3TRTk5B7WF z+X2&VQYY^_UEtqE-M4H+t`j$j!EtYSVF-*nAs zJM^3)-EqpL`~GmJxZAO^w28r+X7AwXn;`ne+=I0#J}OHU`=^^6ZwENk zGnIYIn@Z(7=~^Q6jAB2iRU~?f<>p{nE#GMEYV-Z>zY?bo7mCOW9|0on|I(8pe7_i! zeFzLLuh}eeWDeQ&3;*%xh-R&c-GgQYFo?piieaxQN5qauV%=sCu$za45}j{mTzRdG zku{g+^2!Wee!qn=91M~agg0klM}S?8{vPod>?C2}EcE)&dZITp5;=KXj@P8jruq}^ zQ-VDA{^FYavkG7#r!&2R)m8@BjnowNYmd=?!2JY1Jw}(b#+O%GXN~e`J^pcJpN=55 zf^$Cqf&0lbNWy56!D*6+BUhILOqxnw?KKq1@GZ+|`CcRkGOkLRS$Y*&Y6`_!?8$HD z?UQ2)YG6Zx;Ir=@vod>l?*pZsNTWX}U^es>^mI;{Ogu2GK3n&Rip`%{=T-c$T6QL*z46k1c=M3kB${B>OY+vKUu#2sBQe8UgW#B@oz5h zJG(lF#Bm&^&)XAN*ke$UbzWqizv@ zZ3T%wY^WokARn)5;)p3x^3nUCKJ29YIE+Gn))ta{-nXQ1^3guY4qasE!@=6;boAolpY8L(kNV4^MSTPS^t+mfAPFz+ zhrYZ#>;0h`zyo$I%o>M%YsBphqpxHNuVx7R)fE3~hQKk!zpo0+ z`@Z+q1)j=Tw|7|wLV>{`hmM=BqKOg>H26g&F8fmAJDxd76OnGLAW&RLt@vVE&Z+)%aN&dLHmpUeKnL3tz9eYw&o zcSDu8>|K50+~WWkUK>|oHD@%f=Zc?EoYyDubh^<*xi(M%bN;>LT6-iVMFv3vd2l)R zY(~RAEtFY20J03j3vZsKXCc8vr9g$gX7!~ax>Ap;)eHT%>gBH$8_`MQHgXf9VUcdH z7^M((GdDnZm>^2cUH=wW-(_1bpdSO4W?BdGlJbPx;527-o_UQ!E?ZoZNN!%!tM8$D zB{{_il*=rgP%GGhz(z5?C6Q8bCzCkQuSyiR5nR_$FwSj-R^aJco+fcSw+@{@_T8`| zy>CE7qcERa+`gY#!wNIhTjYEFnEArl$={XBt$tuAabFNIKZRoq&S?40^^a8N^ zK~lzUsI7dbSsu^!@l9O5#^?t)@EkMzcz`ZJgE9Jy3A9zA!QAP>0<+|=9H zQd*|p?%2sFt{BCpDt0s7?sXoYrQ@vo#=lGGqNgF~_AbZ5Ehe9j>*9?IaQOxjZ~vt& zIed16Gl?pBxQQ5u2V(urzYo#o9lhkAZLFmU63=)AYu8|f(yGo}fH8g|_rU_$=Y8Lf z-^k1M_pK$^Kl(diAhv%PwZV}dF+MNCdybxLu-d2fPl|Bg3mpK%`O?(AUnTX+u zPK0sJvl}w))DN3$FTh;@e}_Y{5=u=ZA1f`qRX zan;G(V4RUx{Y<-t*{x__n3H+uJ6rdWOs4=>k>njpuD2+tvmsy?3{?CVJr-hgsw#`n zPR|^(6|;ZKmW}a<1aa@{88aQZ-GuU@19-Ql7o}WpJjb#Rp(5IDM9OAT236mIzKlr` zm8^QMcxGJ)HGJpi;1=47B?zf;d1L_i#=UDKD;rE?l4nYSe)pR=5es#_bm5uCiA%uF z19Cp4O6GCuOeeN~D_29O)s;Gh0K?oFZjoH14Mhek)E>zV*zcC70yD9Ja#_O@`_{8D z@yo>_JJL(=8<;Y#Gs^*bdWQhs$8U(cl2@X|2ioD(1UcXF;AYi+Z#NevO(1zY1p|Q& z)8B?)_WxYc#8khCvk7h1jIVoNH3tAXAX5|lB3E0NjlWpY|C}Hg&f91`UZ8OD<)7ip zKflQMq4oCLtFcvERKI+F47J%<9k1}b>VA1=$IpKKzw|$sJb7pRmmxT>zTUIlLD( z@}H8%=tC#~jt`)VVh48q!o=S}Xqp`PibGWILo7?F1B&h=G4d~nI;@)`>PT+vw}i;! zu>CDy(edsG^ds@K!_~i}>I>(CT|S?_VO5z?FdwXpqWB?kjAMu2cuWAFM1`m<{D)op zQG3(aMw}ump?qW=ydS^p`|_p$42u-|3R{j8@i(s5)wTIvJYQV#>^iVf znBLMxsJX@n{)krA{31g%nXQ_d5)M-wT6x69#|(Yq5%MfA?pG4r!Df zF{2tUekg0l*p8Nq?}M5mEq_4Ej#CS_1IK<6JM%0V9{vjabE!GdY|USj6}+&+VSKSH z_?rUW@eI<3qFHk+?Wj5N^2mdVv~vohYlmoQHq@6qM4@~Hhrug=D_LJ7gV%f{! zWtUn!_Tb;t2k<|95+bl4{7U8XJMP-o(MEYHG&kIPFTgULA0`ZRw z1tX#&Hr|kWxPj?u9wrytXmOwAcGHT2vu*b@yHoG9-KlIWQiFiZ34!qPhBeNJLjq{faR?N5G zYX$>$eMidLY_ zgnHiY>N?fDv0 zRC+!ioo5!$sh;L1;F!_u59l+Tjl|=5I8dJS;|1$@7(t+*o*D0rBwA@)jd_HF-@N9LiqbN!h;{zB>Om1VP9z7>d#~MMLNx zlSu#36~1SXesK2hV)PFk46sl0LVENe?C}htj?_L%eLM|58F@1M7x8fnfDU)&A4X;R zlbDI)!!|U+581E?I^y&meUC&A`H>`p4>24RITAU0oIQkfsQrdNiONWH@R1Jkcye6j zXmi-Zdve?ZP7e*kJpfbK!8SS!4L)vIN8%_xl2asg)EoBTzoQB$JMv)2N4AIh2#g&X zKYzoZ^k{HEpWmV~%ltj@9BB_WHlVS>w`NlHt32uyBk&{H1YcvFZ^B*IkF-s7gf$Jn z+6Auh+9KOb419M){+h#yJ9>6%T@g3>NnsIgMSjwF?^xb>Z>^$ z7b^j{m{Bo=JDqN2S7~re`H6^K+$|nN+T1t2)|z#j?Wkbp>Ung3-q&9Cx4|@Aw&jjeonWz5W&|?m`Y6m+AW!ayXxX zc|k|<9W*qT#J-p;sOV2mcK=0Dx5`Ww-^CuVyY$8AR-t7F%Z=CA*bLPzE}jKuNk9j- z1ys^wW8CaOjon-LN>iMn^~lP3n1r3id`t;Ppc+l1=oT*ODk-%}WyoZb=nDfxq?)l- zcLNT2-v*UO^c{YHJQM1ZT;a0TWP@w^Nz;n-PkReLn zjpxbso|YBK zB?KUU&QJaHVB`lY74S`IC$C`#sm}X?RGhA`(NC|JwqCU;n(n8Qd3m`lMLQZ<5KYmY z2O4*K!j#Vq2tcZ2%G`Xj@yhkw{oBM{f=WaZ9o)!J6L+XIMFG=4;rw3uGz*1UYAi7| zO~!C}#oi2vL}1mrS!LIU7frJYH9UV~ocY!u&WO|M{(;hGXhOiozV3i*lRBg^MmgQI zT7j3)0t$$N+lywoKH6f<<%OSDn@d>Do3qz~K;~U!{Fb}kN8@SnbUv}lc|~Z;oAtG9Id=!4 zI#6PPE8|XssOGyHh^7z65qg~w_P*oyq85p{kMu!_JxDqQ)~img5%zdjh&NcYlII}s zY)@q@2Y5KfPh0d$hQG!FUe>Dz8jQu9b@9TZc4LZ}JxclfgR+|lnG2yc!H5Vzorg2+TG{k6TG1ou zh!f?|s>%y52bBVamTIBZ9TH@>>jJ27&Tr{h2V}j*#6ols1`YWtPfP=#?lT!TFL{|F zM%`BS%}R_|GCd6P`VH;1WPR~@do|&X#OVAcL!zkH&D46QAQZQ^2NXu1DC0KOuU@F( zTN#qWHYtT`4&WHsKA0M?L{a#HCGM+i6lrpVzYoB!ie(GGc#4&&+4{>D(bcbR?(7#N z_3dXnjQVo0c%S<8OHoef)B9`qlWFPyvWtF$X@7CS-)B`wlAv%JCtw1nC=A9h1c7lH zAt{<5NE{+@5+{C0XNo=^^E>1^z#DboupL1i5;xSRV-!C?5e*$E3x{`1^+Q|-6}(RhCi;}`vY*kJh>y3x4&E~A=;t`7R^-tR zl6<6P3H+c}9Wx~Ug}_HIOZMq#!J^}s{8O96vyX2*{An?PKP)ElBd53z5`Ts3`0;=v z59B+YDSZir)7x_yq|yKuwe*g;`G<|H?D$7I6L0aqx_0hZPj;c!4xO>hY@yOP<{Qon z?S0%8oB}XA8jd^jn@qmAzkVOW{2?#gH7@wp!I6JE;rj(G_9My)1m66uLqRsGU-f+S zkDiaP=!c)cc0Q6LJ5>8NChTKkq)E^M{9eyTS2Xi$Yrv;rBlRs;Z!N^dHA|Tl=3Api zd)vny(_$qcM%^itzO_Ugujw^G+~zl(9s51$Zzp`epdzG0jGRm0S2}viebxG5|8DvM zVKWqvg?pp!D0N6)mHZy*>-7}Sv4VF3)=#XMX0+0_O2vs*_>?w@e2PPs+ z7GVP38~sHjpW z9LyrDN0B6~LRNk7sa(|<)RwpYs@b7koP1dr%i!vuMGikz`7$dwP*@H1TD(B9`ICBP zm|B<16?|mt4aEc@An$$2HD(IA#w&BAR1Zg~2SGHPFW&u*y{cFnd&E3sR6`cCF0WD{o^_S2@Dq=jQJ5+@%(Co#o(x&ef#@c-c7juEO50)7wbVuO zS($Oo;u^rZ3c44o@MPGE>4$gjE)JqkXU(G$io0+Sq9lNxz*=Owj`ZLHbQ&_BdY}t6 zU2l&5=+BP;;tUd9MyBmC_!Y>q-AhEpYX3mGE@VW-{L<9IF$bSReMR+sj($g@u_0=(C{TK7c63KsZ{&%su-=F(Cp>&*tFcd;Dk|1GN|vh>fYZ=7_mlYedn|^pBnI@&wt0buR)f1>&q&U zVy=eU6VA|pNwN8|p~$@)=FZ8C;ubg>+}1S?8c*qrMo@%xP%~&p z&>hp8`jrf^3|@7TpDH*nE)Dl~o~bmSpqaX`;e1O`c1mvXbq3Ia$)3C^Px$Kv7K8J) zBLOL(;tf9Hm1sOgh4A2tz0)}ETYSTBZ}?<;w0=3A6yAFg0GbPQTygE4RUzBw@NG=j zE7sW$j1y!oJts{EgWKfxgRHHLJP-__a*wzlh)BlM7zfyWN7F*=e7ih{)O{xVt~F(f zmu2B&XF-81BHq{|tHS7WRb_k`>Sq7uMLe)qa&2TC@TEJm@-tSq)%)Lx+x|@37WlKc ztucwuR+TRPWxKii%CFTvSf)6!&Fc>UBk+yIF#0!)p_kBGV1$UYXNEKPp+Ol9Iz79W zyvIkQ2Z_$>5?sP0n6gy`dobaA80N7;HiISxfyq6`uOQOI>u57q9=yiwlby+zY;MTC zSB(`@XdzH9&}+)oCspFzRRVgy2}v*`dEPT->^0gm2yg5qeDDN$zs*JK(zkO(nF^*~ zQzN;(@wYj$=tE%a)7o)2;NGm*D*?-f0rgk$l6`+d9sS}2`O6j4x8Gx_>0YN6JH5|k z#Iy>Zll6dUx?-0%MOuLr!udx~=4F?aw=9BuNkVSp`!ue#crUVPOkQej-7ON&$GPU3 z)p`&oP}h}Z3boBDfXmx^a2x3OnS3kHU?nBzyc&Z-p7d>;{{f5PNR3b3FCQ6+Ed6Ey zcWmE|nB?@;mW}sc>?|q!dwVacZ1_Z@V@vn-)W6vU`rmk;-=_J0a*yBjjqb3NrVk0% z!<7!DP>4PhF-QX2qbCj{I8D$$W)*xf{N1BoN*@$}{lEK$4MG2f$DiF7b~wqw*|G21 zqh0=E&f^iOK2l<6cEqbA@tz#g7yG_1$`8ijzMI?Q=Dx8+K8mcz@ySuZr;(o-AbsqP z@(;HljgAYEf`t(axC;pUtgT9y=7yO^2;=b!Cz9rx# zcMmWAqfI5Ma3!~nB>cVa`1;6mw<8z=M>ITdd&v4mH~5mVhhvN7|81+f{lzQ<_`0`@ zKLrWd9To9Q*Zk2KZ+9+~BJ>)qA94P5KOx{ZW&UXJ^9-W##Rgn$2l2{cU-uYDKRQtP zV7~GiuJ6!QQzYgOyJN%Vf3piNwGeRk;J$}ZC|+47^z?h&(fgJ#eT2SNI4jOxYN6ks z%(rcG_I;*bt02HnTUjk*R=)2&$ItUfJ*fDi(_tQDiEHSa=)QS9zrKibDF2|nm7`C7 zjp3um0K8Wo&r(C&_kLp%V%vEWm)A3tyUDq&K_6`N7=-vtH@PugI3^6D+U%0I4&XkO@7|^diKwAOG zo3TDCoph-UP<0loTA%%VRZUgt@L7E0a@zN20tLH5_2(osn#aIhF34lD&5(PY1i*TO zIrzHf1l?uWxu{7se5Fh9M5uMVE^AZLiS7f*;O`E0;9bJ$X_9(0)~Y&*!Gpu zkK4^fy^zkIlGLTxK%P9Xwv%_3TJGd+xbKoMB$;fwq)~QtdFP6Q%GCp|p-aXJ8`+D# zE@Mio{zI5rwNXcxHH)SIE43KgVXou#%ddHpidp55S)b5EgQG4V)RS#SJ6W_wD7J*tLV~`xUhREbak()IEN` z1JJ)~bI4N54`f5c)DAhlvo{!AkdNA88vZ31Zw@jTfCw&asU?OL@)<%UU4s?f{yp@V z7Q^qi?DoVX_+jcvVVWa0CMKl6FD&JN;sO_ z_^R8_*+*I3pR@;MY4@bTVHG6lI(I-?dlywrANN~B($+04O%_^1hIb!w{~{kU z%&NX%UFv(&Iq@~yzkd^PiR?(jM(xqqAmG)TBztx+?hE>(UWlidT#yr7O2d2EdL0c2 zOOBz%yy|h|Q&~RVg(t4KO6Hc?6|7@`xu5&l?&BFXFE=~LPF81EQW-x5BUEy(C-(L3 za;|Q2h}x7{*|#Gm*06}x`if>^w?2A%O`Hxi z;5#cs(>Qi@Vp?&=)iNn_$|R$LTeoG=aXwgQH#D@Y)AFZ1Eh2xJ(MnZhtnLY<( zAJMk#(=QqkKg-K}oR4Yb5MhIm{k{iXDaMX^$D!|r9G6bM+$lLUI1V0eel(uqAEAvy z;w?K;IY@ML*6fHlNsrXg{s%n_p8g7bO5D*V3SNJ0NcoA{#^aBj9*`vc-E4ZzG2O+M{0IP+|Le$9BV7<`Wtz z8ni9l9`XGei}qC2V4*^R0kE|mUX{phB^ZG|WO=j1^JF*scwbVb$`=A8-Nw`KI_=O$ z8kQHxT_CpDCVdp6+J^RU#Wed|I5Bjyw7Tn^eRn)CzO3+-5+I1J_{=$*BlqSmLH)dX ze*FryaX1k-#t1VQ0x;{;=PK3fm*J6z6SB>{f~T4aDrFn`hKkBs;%hK7n42@+EzK7B zTci+oFCw`!L~y{p_EYg@W$ z?z+$LFCHlJ!e4O(@l&ZrWGBXgp(px>V&t$W8PRyg+w1JJG8%h%;c6BhOPVD@i?QT& zt%U>-;NeBJ*=s4_mE>a7_Q;HfPq74!7AIvoqm~!kLKVp;Fr-}3%q^%}r8W#QZirsR z6VOXR$Xbrp?$+r-FDslTso3O=i3G(Bw7excT^aw`^5~4_08x;!m|e+p=|3AITHXYM*qG+MBXx}dxBLY+6dhvr|c_6_Q=>ZFVB(<%-UXqG4b>kQUHH+hgHewk;5gbma+W$;Koq% z+;lB@RxOZDJn?WDB#5~#r&6rP^+8nuxb&SixS9fJm^8cP^@O)#f}97{hNi@AHI8sV zg!lNT?VMdgo@2$5ZD~ifDX3!2O}sB)8-efp2+$YsOgm1z)rFzfnVLmc2%FoX3?duE zI`52DY>ni#*_%#1HhPquRa$@{20X3l32}iC&zm9fUT@@H6T0PKjd2eK^Mbwk0IS-U z)U&6vB-t56@ml5Rre(a^mnlUrTHRrC1k{u?NQ2u`2n9j!#};7QTYPc%hY&nZ*TEuX z6(YgnmERX@Rwlu{HSgP`yH9=ThO{pMpRTrAY#=YPUN*9l@>0iX^bS`1qPKim@XZZ!P6zoen62OVmp?hbQl*A8^` z;cLarKi|zwip~ld*1fC(8CgllOTBeAmI^au2^r};LH;570f%4t{8=%Xhe%>5aF6Dk z=r8wXc_kw6pwO#i{J$H{{;!_Le*$U$Fo(Z{ zwG@2R@OH!qlSgAtf*cvp3_g%8lpbBlJD@#`6p#ZbWK%+T& z_lw9z`65=5qx14zq%5sv!LA?<Y?wV{~LvskHE@VEdV1cFU5`&uy?TtVJC$Gc0OCD z)UYV^RlB$J?5&PxzH0B?-B8Y@7*{ZfaJ`Bw(i-PIj6Jb?|87S6(Z4T3`L;RdLFnS* z(NsG74m#>Nk)aQ+m+q?DKB&l;_FvhiiDi;CpE?Kp%*E+%nK)gH3g9p`JTtsEt`?5EYa%sz6tV(XO?5Epxb4JTS`i# zwB_-)2Od}}=!c7TRSacjGZAJ|{7zc;9N6~}XO2M!i+~$(t@|{=#n4wuks2z)AT$9l zu&y=7j(S!3_0D;mYW}10+oPR^@0=D1{z_{(Mt@L4`?m-Gwh;D*1Ao^%iP10(!#IJH zBu&v2iW4M6lPC<61Wn)sjN`;n5F>x=aY*L>g6N}lBPWj}#Np)pA%pIJaN<~d(T{=& z{L$OQeq04ZkRw%bl$bu^pV7zkem^`)jli8PB2tQb{hjJ)>beZfkCqFhk`y>xccmm^vXhXH_YKwah zmO|wPK=80RovscgQo^FHa&qs2B}6rMt|FS*sNBDc*Y`s%_zu}H!%h*ZC*CJ7ToNVD z8XbTu-Ow(Ko3h#ow?L5Je`z`Bky3iWXi(b`gb?InGu^BT4}AHu;|5~7z7niw-<`K-<9xCc#g%{u2rs0yY8_!<+>BrTwID&x^PJEpxJHs%Gp4d zl_@3?G7iP}b2zK2WjmW&NlwEwLqFU)Rw>T6$cTkp;o~7tI5GtD^+HwsvqUWyz=X4r zDTZKp(oAzgU9adx<>WQ$Hb{EL;vQGf&^ftaz$+*D(w@Dy5L`qu4sf;VZ&$#}$2sdY zNuYZ><&(xR?q-bV34St9_ZV`i*Hh*<_+FKP{3DJF@JA`ozvj4D_c`I>CMtPx-yZ>N zl|gDN2kktu!=E@Vzd!g7$9|HZ!0+npUpX$l7`_>wG~dn!S3^9XOR&NCBG~u~uiDd& z3K}R#VxMBT5+De3t#QMDv)YixrcV|Rit}FyoIFd2H|&#~z50`XLRcKC?v7lepqBYB zwH;6$bU+dSElqE3KID%#De#d@$QX_+8UZo#^l^WpyrMM|rW?&0FH%!DA!lUXKS3Bf zBk_u}7GRN_t&YY?tZ!{Ugso`f&2=_FWL|GRJg1R)dQ+#StZ%n>3r5knbVw;%$sM-f zM8InR5!2LJrPw&1`O_GpuC3of-6tV#dDb1&KBkjMFc-nu2)w^%)W$mz`jj74cRi$d zOh6sSI>i&`{kS`wDXsIBm~F6d6#LBE_~~^YraMpENw)PRp=y0jH&7T$`j^v&4_tZy zru@iipO0G#SDcHuHDEj!2#;^MTxvNS=dw@+i{U(;pUjd@C z>QZ>qyjpY-D*0p^{y)sU+0vs}mn?YCQ{+8;O3Xu<^#veCF^E}k$1D&CgqWYcL6H%E zM*Lr%%&e-@-DVMC3Iv-$(%Qb(_T^rMgya((7Vhqn`&a%D;)MU?crcnk}7S1I;|aCFjZL ztr`G9<775tcHYks;Z=g@lUfo^3d2t*9#HW0HY|w4IhNXU2k)vYs-XD`ZqfRwdra*= zV>0~=dXRqtrI5c1rI25s6arB@dfI0K7)J>T!w`tZ2^5ED1fgggrbwLH5f$|%p(r8` z!@>kR;0KZ(VjKH^_ZK^+Lg-^H<d?kgRzAiDekN}a<;LX0g~3Ha&M zF|X4#As6pgmBjmkaVZq5f@w$?T}#rY_-)U6i1?MA+WQ{?ACW?Y&zaborM7;$XWnTA>b`2mR-!md^b z8Rj#~w)d&dF+Ua!huS!Ng_g*1-mfr#*E?%>Z}z2E`+WI>EeiY-HO)`1r@zj@tl-tq zX-hR%fS{MxdFA?x$c7sGZ2);T1C5QCUw8g#-`~Fzz`vw7ciNlsJ-GuNn4M&k>bE?3p|UGIO?hGDz!k<@@)mF0 zEMxAIq#i<3)zh`cqjViCdqRgw*fu7r0T(wcu`|X*?4IM0Ww_5rw|~OTG`jEpUOy## zKQ{l`kN4NR|LC;)V%L8QYv_?5QZP(oBn0o-AcR2>jF1qDQ3wu`)E?_d68|zoBo67J zJ;YG(Cyu2beW2{n8X!JGoZrL`_M{A@|1$~?>!8hOV2+}bmmiyeSZ&cF5sZ-5BspA#up!ctPo#V z8~?XfYJuNHHL=W%qx$X6x3*iD6`nhFoENi7wk&{WnS1ayn&NFX-Wnfz2e+zXsdfl>h=C!LPSM*?+q!mhdb>W`zloO44f$QmTHFILNIhUB=ZKG zMlBy66dA2(ocl~(NwCHyYR_1K*RZw$g)Aypr}tbnSmyMzZ98QhN=e|@b|qL4K#~Go zF;ZzrD0@S?Tv0DZaL=8)RvR#dVrz~!CQBgvK9ggX%g zvmz3-?=B`f0=qc<1J@usNj1@tu2u0Y&DuPPv5Z|_=sFi~eMSJMFt(ggUHtiuUTxw` z8*xw7F+PtH^T1EHPK+<(@+PtE3~6w4*&pfI%hD|>v?Xpp9}q#Kd=j9&fGBMCN$s59 z4y#c~{h|{2bv0kJzdEd3xx+?_-uwAvF*2KAPNv^g!Cq%z5_r#3>?YkvGZjSIwM^M? za#h;wPE%m}&f(re6$un}8IHdDYAh)B?ZUi#^)_FF0N_n)pF%BiLxefYEm9ShXYEnhG%;w60Hs1!S&YJ#>*pbOh={ebaH$M@TgOKcgt{0 z_Gl!Z^i1*JAy?5}e?G^Q0s5YLzhU;ZxT?_EiH5W{sv#2|Y1IX&1Ydz$9lmkT3q9hN zQ$g2g^5(jYjHRRvUiAE;zwMaK&zO)-F_lr!(}FR(z55}87bol_10^ULlY8m3xeLv^ zY+t6=@^lS@4aX2^E`zs4n-m9nW+VP+OzW9{YhCDw+9hd38yx_L2~F)P(f%31?Iq2{ z*m~Us8!~tbZwthaG_9?#=%8BkC4vlJ?HHE7zOk<5RY;{_0HSStoA^C5#S*DX_spx5 zQtNSY)jI2V7wY5l1s`1}EvQAfG=>^FJ{)*@vUpefbXkGx2*0NsGM;|8z0Z60LxL^F zijU=j!<^ey3||!8J4(5EzaQh=Y!xY8%K#(nDeH>60x+{}mSc0Bz!Dj_S0!UmBB?U| zc$HVCUKrzca}$W?Qkv8;-jLwYChWKV=AS3#xd+mJu001v|d-(>4iQHhITF1jJ}7&K?G}7sn;o_t4j1{cGxTRF zkqG%wO8Cg6?^klbJN#JjOyGl1xWhM$I=V5B6qh&@s$%$K!-0J6;?qS#e$EPgLv|m= zAe|lh35UZh@?QZ}_sAMgQ{2#Q7hPrWE>G*9mEHdjfvWWvQ1vZ8{C^o#{k=|(@1RN> z>a5mq(<~gtK@kBwqXE9b8|R{KYTsVIp(AC2^h-?RSzEvG#1=t)XzsvC-NyKGr*yVk z#IcAFfif&69y;*6K@G2B=Sx`+JVt41#8^3nUzRIj5Q_A)dxxYlfQthps^bmI2*31$ z2Rk~tS#=jQ*Jw!cL%n86rt=;F`j>xQFLTW`Cjx+7KY%J%p$q+7U&(M< zIWG&ipd1=Sj|WR6Of=8e&>*JMM9g{x8B23}`@DpuF_iOw5Kw$w6ykpK*j*3ONf8^f z#}(Lr$yah7+*Hh}jI}o*Pj$x&5YoOXa`hd}G zF`sqMCa!loi`NV5b361wML9&N64s;>eC0xzkI@?-l7_VZs;2NJ)vZQF-TW}6&``p9 zYOkWa4zWwb;~~Q|W+t{gll30@;8da9rge6>0>S+P;oW++uA$W#DwCDgZ7qoUy1ifn zo9cALXS`E0p`KeGPeKJ(!K_oJ6aZbTftzo>r$Ro{31YTsW$)xX+4luCU; z423%ySEJN$C!#AX;Fq2(GMpS15Mv)o)NFuQ;qA>%nvQH=SkB&xxqCPZR;KLKJ%rQT zYp0Wg+zI1inlXbc3t^!JTOw_F=hIgL0neMrt5g?4k4$b{zFZwH2z-owT?!#i`Fs|3 z?E9pix~ZnOuDF=vd!8`l-oWC^0ACJZHIBeY&rJ3w#3MKnp2L-tSkcCY4UL$4>X3<) za90STH%Y#Qrzc&miZ=~|PF8B?0CNMz7Qf&S3(s#l%bCeuS@JC5c{#{4(RlAi$3IgU zv1#$-O!G;y=Eoji45rA#Glu{JG?DsiHmetFYlx9Do98cnLocNsDY%1ltct0QMzvm4 z-{>GDGMM627~Smju_;ajIFB7mfoFX73`Xk50fbV!Tqe4mp4qv)pjSr^W8KN<&=s`; zwnSG*t`AD2$wyys`=rzE$xP0~cazc_!kuUXjRZ$!nJneiNdtLCfG6@Zv+kAKrh-$)rdAy; z$@K_(i;EP`7@*YQCy!8R#M!DtrcjaHpg^GsFHJz5ZvAM((f)!3iQ>wc{WzBs$r_|~ z5)1HQz*r9WmqTawJta_Ysy-3ayi-HVCLLpPrzr zqF0&M02|&XhyMnsLjM`4`gQmJ4X8qY1ywMF(GZ1@Fh=17jzT1iz%-4)6oJ7c43iLs zAEbt_KotTXY=v*+GnhDV(7`t#kD?9<9a7meaY#fQde-QUy1oQehnfZPF>FB(0>ln` zQ0%Bn?JrXJkn%?J17<<+M{nXYQu-m4{b^4{Odd8d#8L7;E@M9d_0is-K5Vmnte843 z4F34dz}c}laOiG-a2!D&42u0V_3=T4=tFfB{>Vw;@i8X-m!OK1k9GSf`eOmU0r`zm zR1Rca?v1ostc%R)-wNy*0NPZ()r$KbE0^uN*1=h9RYtQkq*LG7g-zdcr(bhgdd16%{92p)Q;&%s4X~Uy~U4WVvtwu;bPy|7fG=z}^L}0|8PGTqyVK6~M1PmizGHv%9F-4ASEQ3Bmz~sSZ&FDin zfch8*MEJq7I!p!0KlK@i4mF)aM`sT#pP;m-e0!MM)3!akJA4s|L-{WGw5ZYPL7v*v zykp=$Q#9TKS)BZ5_UTI7{gA(GAp4cLWihgBZsgfE4L!8PYcV1QSI%GRam|3U{ktXc z#bKV`S)~Vo_Tz2Xe1!b#0QJ5(3;y0G1$<-KrfZCP^B9P7QcNPs&@CId}j4|y4{MtEzb z3Qdzsd78XeJOzxiRx#R?V$9pl&{n;wS#z zJSMhm098P$zr!VRyC!VbYhEq$L_nQf#2c=io8m&2HU^^2jc@@5KRFhjQjJ?wE?8jw zgSy0+HbQQFt7H}$hIWF^rJl|DEL#IiRSX5T;E1MO^#b2M;7}KXcL#8rr}jj8sJesR z4C)JqmFu&_>CD;`n5R8R_8OA+=ESS|r8m15kC!YK)QK+D z?{uWdhp6EAFg}`+YL=8SF_X*?i!+32L}{Wz7trPQ0m`dhlpYSsXk9=^8j|Gsd0C`z zq?l8!uxZJnrVm|)kR_s-O*{8;rmGx|AzRwq3AnK78|o_d#ng`!!6lvSjb5m;NP$nu z5GjipvKI#ruLIQ3wxjS-8nw{ENKkZdV*d#kwJ_eRG0Sh4CtrA&pFyB|D?DyCu2srR zY%GHr)Fw8%&-K$L5+iH!=yHCb_O?EqCs5rfc7IeeEDVd@o6`8^_X&NG2TUfLOGpRu zt8CYX+te3b%x2uS+S!aGpUwGr?&BGFNvmi;QEPKA8I__a?WsI^xwIIZdgH1;(09?F z&9*(A@))~&9L%Yv0;BgV#{wMXWT1D+1_|E8GC)t)Cr^{;z#61q|Bm1D*WFh?Pp|kO zJe!P+Yn&0bV*k;sY!}dD6UWuR5x3qyh+CdT2d{WtU&7fut5P5~k3v}=axV(-P3}fe zR_n+3Y6l2}Joy!I%%V-;JMyt$DIx7qIRJkJ6W89{%;_g@M@wyla@>*U1W)-h@ zbUz2)ZTzx?Vbj5g@pV>uO%e%7#2oYFCeN;r!eeX8KAMm@##uz z^7Q$sP*}63p9){PP`E#-B025flWTFaEbR6|$q=fro-AOy;Q4J{7@SOjY!8}Ckp#>0 zlvx;dx+oaWzQNi%?@42}Dh>F!nKT_E@CmH$_^o}z%=3nq^3Z1@m;6ndgYkb0`<(W_ zEKWP5o*3@8ef|x9`@ZduXzDNb{EnP{ed{OfCkm%X0^PI49W`MT1s&W59LI<~eI%g$ z1&M!2)XI<}lY&0vrWF0)3;5&Z@M*c<0m#t;L>^`CJ?Hup(cm58;2(kELthE`6v?rJ z%dqEUdnUJ^Vb3ymtg~ln7;+TVkq_4jISTuK0-cU_sgL~OQT?Zn40F#AcO17TurYjq zBlwfg9=cMm0yf;{N=I}(gPgP@=K`@WHmkE}J1{t`MB2XsQl@6hRb z3k_Wp6J%u$)!@{rM@M_dP$(JmEp`ubKe^(n0ndIxO%dl=p;j`+`a=bAc z;7dX>T)jRXOx9HkCvTQZ3q38FeU6jHbfV}#(TSW;^JU6e5{0;OXpiL1#!=V%A^-z> zzC}EkQmVi?dr=ZC?tGk6^M6m(7lC8_C_JbyZa(bP#Gkih)FrTTS4($=po z@~JCCf^`XRxRG}mOjKNd1*4sVSpB|eENR5${;3elJ3&i$#=6V~w2P=<LZoY>$F{>_6Av{V*sHb$_)Up9^U$TOWplD%jPOQcA7HCC3 zJ4!4>Q3=KHcLY=f+FS(x-qZ#B?XIqCN-sIe6G|JWi2bB3q}WtY0s^HQwDUJ?B{L?f zo!wcR1AafS*uhk-XdeV0=ows;SRT{WX(oNO@~!Fpf-mbnmL9IKBOF8CoBC( zM151YFBCz3hgK}kUeJ?PIn((JJO!a{@VRVvV0q8=?cxvmsgTN-xl~L{@gd=-jc}qF z>q?MHR}w)C4vlKZkJSY!76z=_QlGEos#DY>NWq$dQYF~GrO zknR`Lqizw|8N|b&tQ;Uod8_YyFi`c5Dyn-+I0<;KaEP3pW~&KZ?Hx0p2(4{j!#au_ z(wq&I)XNf6lMA8)N~ey}LpCmlmjLv|i4+e?= zpPxm`uqljJ4UmWUGog&=GVN0?!4rZ(L6aaGWmrZm&+*a?7ot$VZR2Es0!ul|GP1l8 zgK0p@OVt5HOInT_>69})qW6mcR|9QMuaL3p$QRlHJ3Zal#F{=4MqQm(keLOr@hfC| zqs6Lr06Z+Kc7ju?j!ZPPDxs{h@7KXBDA`}|yn zN0Fl-MbR)p;5da76iFR2)G&g=B!WT^j^QYE_+Zl5R{#q`Khi__L2B56Ql1@T%Y!a{ z)NnqG1?mvN%#(xikP%-3ti!15qy0?a#~66_Y0oAdHeAJ+JkwY4(li$LtFxjuFXE@qItX;S!%8 zMXDq|It}-G*>CWh>=NoE&IY^zu{_5}hs5q|qu5#Dfk75KF> z_Ahy%_UKI?f?GGm)xQANehTyZ75&}?{;l}_DKXi92C(>V0Lwf8);{N`3RXzcCDU&e zkVLdp2rQKQWB_A#gjVX7hKqY}t)V-^Pdy_K_rWO4JvV&698>RGc52bs)(T13LJgn| zLYAonB(@wLtS4ss<%|v)o>oN~gv8_2%1D=a7jLu#EPv7i8xyJiN}A2Z)zfPRWPuT5 zsW%Jt(ty$FZ7t2!Jr@#sxk!drVdLO;pnHF6N<7xmJ&UoXaua60H__elBLeV@v6^uS zxApA=WyP%CpdsDA`!H5KXq@DIpCA(~xlxrOUex;;?348MenC`6J>iix>=##c$EgOkazr~SLf7yJwwtJwfmv4;w!mtO_M z?bAHNL^}6R8oPnRDB&jzAe+G^yAY|)TCJEPCp5`I%BEAa@|W!ALl>MexqzzD$PBr= z_}*tpyD0QhGx{-TN215-3odtO_9UL>N9B&tdJ%7QA1~SSECVin)i|!I8t!(L2?s|@ z$;o9`>0Kg9ou1>6my$^#Z!PyamSMK4hEwyNpdm_4cy`}_4i;ydK)WDfxOlp)l;*Fb zH=^kE<=&($;|cHNz7UU^O2?oH^(IUgzgFVlLb)_FO+b4Zb5rpK&2uPoxJuTYs`~VC zwIwb>ZXTAT!fI|79M@?$7fPZuOt-CCD71uZ5;qsXwYLnenq`9b^W~ z0z)*+od?#V+89|B{hT7&{v+}q#pKbUSu@~+;*FEpG&1n+x z|LTN-{LKjk`5O}o^2LNgArytv1d8J@1yd-tPcIOGQ#67@&_3PluTcd3GGjlc3H%_l zB_B4~o>K1_HW?kO14wjqtdq$>G($d<4)OJbf=5R}o#h7`?pOu>$k^eZ1q$->7WHX( zI#w|7quVLTKh0M0pSM=Q@v#=NXaCXX_N1tS$z>dx?X*5B=%#u0L87gnrywS$WXYJK{-Aoo>WGz zQYhrbUQ&t~Ml^Pkf=So60)W#?WA8VrgU?I;!jsyC<)#An`|E~M zxrMrVx5bBHzE%3o#to9G`3o{k;>s#cFwqx)dXAuO`W;_66@^$(P|h^N*U{yQt=5kI zQQv(sPo6{`Ju1@soSwFuc^pJ2a#1VT z)w@g6{xxa4HE!AP1SbRl-rTi?@SHTDHW+F>IjLGt@9nyteo(<#G_s#=mrT0KT$!U<&aUcL#eu zUs+ANnu5SVJ2+yb}i4G7QPx&YeN| zuL=QFd0Fp7vz#P)JNf#OU3|$;s2MXM^L^K&I8fnejF>0E2pm#9EM$_R0Ypx>WKBjl z0Kno2wTkw>r57y?JR}VFTSXgGv-PUKm1iyp+q>4Ez=Ud=PT3O^SY5L8-YvOG5f2-9 z;CkPI#k7MpJ`l=zV-!miMxpYRFd(C0(1{3KW0c`?=H|I*syr1}I#s@n^VmAq068w2 z_ROH?(swot6-(OFlAQR<;&GIoums*X%ELHa(tro0NqHz*67&#xvT#fS=*p`*UAuVG2^J9RO%g?^ zxQ#Om6eG}Gkk{zASmO+(LM~fp3Cs;*5ARQwx-IZKcL41ARswPUFDKUM-^4-a-@rlW zS2$?@OG7k75(IMeV?sM5La9BuhUh)XruMgS8vT;=5kW^6k#>;S(75aRt-)Mm~(K-lEX>j=$wp>KR9);{R!+i^qUGXk{zQSjg;uIBtraI zFXl&~_~-=4Kdyy2d^9Z_=1|DNK*2u7h3SXrvFH7Vdo_HB1sz_E@d1C*=n!9n@q_KQ zUq6H%Jd^kv2ts!>^jA2D9gg|m8-Kz<@XfyIO>i>iF+#F3ON;AjSHH@xG5D``hyMrz z9S{ik0|wguDF*sUv-iJ(fer`+d@#^V)ff${{~f6e&4H*WLRC7y9__qdJROUp}XODNL!me=82 z_2EENz&|k^`eIh~97S>~91Q?5p5GlQ;!Yd+Bdu=p3f_q0I=BM?!UI8-B#P_l7Ia5ofDY=};g$OFZbhl1 zYw=E3e|vQOMot+ z7@6;joXQL#8gx_UBz3OGTh`KD(y*_W9?QyIxLI+0$_g{ij07_b`i5C0g|ZJoBhISA z(ev1r_sffgL0KGwBIfrPgU4kvOH(`EE`MI70=`_S`n5`>U*F5t)$x0~BhM)ErZJ(g zaPUB%1%9PI|B#tDzf?IF>HIDZkUsDPZ^$c*2#GuY;$WPSJ zgl6lM-Bov?%`fDIF*=yxF>*P-T)vYOpN~@6($@|vlXA2)dl-EHzN~753<_UsTc75S zsdT8p>=5|kQ#|tzqLDf--x&6PbX-0PHb36@!oTuwAM`y=eSN?mqZLlmd%!{|1o`wq ze%21?BV17^N$eO0h9PwS4}xG6jU!+7NFMM3{xCJ5kA7c%K%O03(D0#0v%{Q2!67|X z1`f@d^H-y&!+>yG4Mzc(0s?6Uy1;`86(!@=?Q|G0yNEK|@3@9)9wtHKcQrZjM;Qr~;hLj;8nIiDf4F6~Z z>zz4@+!Y<^JzCK=Z%hc#gi}ADkxG$dL9LC}Zj3JA4-GVDT(sNU;INCAy4Sw0?pK?F z8VbzmXDQ5`P9zoH02My_yw6>qZ9Rn~Sy*sOo|W!dQna|dFswaYo|6&#cmKU95>wjL zTW-in1{t}N;(h8p^U*27viQArjahkOe0dRl-UJy~o1SGZ6DdV%hA_QfJV2!B5s7y+ zBYeKGlsN@82vCo!#i!I1+Vo?qDR+#;lNKXVCUjvKl&_QUSZz7>9re-K_{~Wt9aVgo zlg{PY$&m`U;loLd7F?WhP7BkjyN-L(?C$T{rp6I_*31q=XTK+TFktjdElz2K-0ki- zjk&!W3AhXQ4ayGrY0m7VVtubN$Eym-%QSZfEt(ymoNYvjs1( zX2LO6kVTROC6Y#{E4_v{c1n;MictkuoBii6ef#+X$AA8WL;FjEiE|RUI|90epkBn0 zvfuHAR2%^02kQMx3+HJm+H|UA)?V-Z#P{MluI}ls=BoB(Nc+~6DYl_tz+;y1?>lYk ziA3J$XQgnnWh|;>JkT@v792*~f0#QkyG`?{#;Pj~uv^F^1r`lW7sAE4j<|EGK4o1( zx`$?SeC{@lU*)}(Gy;=d!vK5?v~mh*REBUo0bZ}>(Q>ZKcGKHIv4KOWG|l-9F;HWayy04p zc*8==*^2{nrshX1^AQdEQ|B|DpMe0PA!o#@MzsJ%HN0dAdwrv|q?l;IbuKD{-id#B zcTsqzQF`f^iOF(p|Lo~SzMcDYDs27adCl)#}LB zaxXXH;fEBsM@~~Es8@JVE`0`U{qq7kpc9{(Y8+qnwQGh`PLoaU)#Sv67csv*6#v0v zc6ZmLc6;OS1JR=CyuD!G%mLMIZ6k@#ex(i;&im(n#%AxFRaE%G0dT$*|!Aoc4GKy}bT&3`-@Mny>uTt{l=Dc z*}Sv*w<-J0$sUIvYgImeWBTYllzkKZb~z3i_hY}G!EpcYZzuUN^17#_TGl_Z?KsEp zSMUpj{Qu+ieMhVR=-Pftxxa#?X>tHk3O-B#4wI|=WB!^Siqi+aBM#~a9vvu^%Kj7k z+EE>aj~W+&9qimJIjU!STE4%?(xV`Te(HNWYJ}3mWGkbN!P4}jF8OC`kr;6td^DPV zuq5_PyE{6tD*7ql?P)s}eN14}LoPe}tXCdjm^eyxS#%&)|eoBJ~&`0H2%xt;NLuAzd3h7zo1V~kQd-z2Iz@%hSEBCcD2kwg^kcv;Ct`L5svKd zds>ZqlD9@kjfXbNMgGzO@lCIH2#V|*+|VD!cn5+}Q};42tikP&_g99%X4Ukj!12v3 z)O|nCRTPgGRLzFweIoooP?cXTHSl5hXzx1QSi^mgeE|GO)*b&it4BmOGsygKKL&Ck zXgQj-fbR`es%LrTqjpXAy^ z8)q5T9q%AML)zh$@P}=hyw9zF0MEdVo?W-%1C0&7J>5mST8LL>&F6mA7}4+H{;)Jx zp3UD|c=@e%_h-^ax4H&oUg=`79umZR%Tid&f>lSz$D#KX`R~HKDfh!aB5C0Je*bXt z^!D3h4v*c>Ed%>KFRH`z-`#ta?+@wF!W8Q!@`rtZdWuU{5BIZ%x32s4F@JkbfaCCp zb~e8kD+W*SINP&!9Ke46RP_C?<8a6Aynh}Tc@+C3z&fAL_#imRGAsYvq89&cQOl&5 z<9)8UeC*46bWc}^7YRhP5vr_=-t|V$@Qi^F@_E7svvvrx_CgL`YD#Hs{V}zyCIj12~Iu`Wg*^BX0l=Y&K`dIRm( zHnAQ}$Pg^+J)om=GEW4|fXi*`S7=CX1H;gczIHmzQ(AEv#f_T4iYMs%sd<*GaC=I9 z&LEkhD##58qQo49eM+3MLD}vQx&vqAf!P=Yd2*r3m~p1g1ag6?+I6*=JX5V-$d2iH z@wuwQ6Hwanrh<{c^+^3<-v~Nf6IF!BWie>q*53H&KWMs8$?RpCyuHJl(ScKr(bZ7Q z7%T@EMHjJ*?7(cf3P0Og{e<&E=OmSFEM9ep@`M=%&;8&Qiv)O7@kQDA&&5ao1QhPr zmTON~&ac&ryf?z4-rjUCHLU`bmyUm@nTNug*VxQmdO0}L;Jk+9momQtjFf@4R=_V= z%yG4NuQ$qg>x!zw=xa<}^;X$5Eot2hLX8kEASW0XUq(%Pt@1g(=D?ma;uxqAD77ZF zem5LS?*%ePld&Aa%77Km=&|cvdxa=X6$sJy&+zpQdoVP}{xxDiz0GH_@6JmX;nq#Y z-b8k0a%Wse`pv?Bvkb%8L4fEoy7=4K*#G&%5WgLJ8J6q>zj4NY z{9meb{yg|Paq3HamX~pq@XYlNxT0!}D zo)Y@;L_&_@I-Gu5jQ-O5NGOjI3(9>526ApTx6{N*#Iyaf3p@A&KmZPeU_#hF88Y+t z`qafuJ=4V{nYXUaBPmSCvpv2RZC7VK-Yrbeb8Vis_lYCi=QRDQmW$@`=BQb}%M_dD z`OJorb;wctUdQ?z#Id$+v$g}#?stg_Ky&z`@P5>+7Tx>381Km2zI~sDAF$!IKV9;# zR}B2qOaAqWfxmspht|gz^BwSw#qpW&xX*-F@C*`ZKBe8ERLWv<({y7FK`&q7K&FxV zUEy*sY_4s|kvF9R&K;qmj`?P4!J3yR?Rz%A=0g95)_IRg;?1eV_LYphml4I?FP}0! zyp{UGO=@4>*a~o-&mAv}bXy|}_29V+fpo^}`p(S$y-#x0DFd171%jI8)t6jIdanz2 zzn^+NXwLbbD+3o7qlbok_it%d@NvXW&YL9g6O9FQ^6dLAA42Dq_jNFr#_f4m&GNdb zt2OcxDrkHKyb@z*9v=TD)tjoJ;w4i|{(>hfb}@vdK=LqeO64^>j;YYxiu+CQdb3&l zyyM8z?HWLHrTluD1a_q2;fY076{Df3k=XVKWH5cEmgA*fX6qyZM)!B)US&inB6GPh zY$(DA5RRgSAec0ZBBS>5sA9|9(L8xo4GR|uWH}Er)vR_sKXnU*g86EY&*J2l1SSo2 zdj+=Qtyx4~U;C2IlPuOF_Fiutn_9Vc!9(=Y$#-dJytHJWkw)oLdh(^Yel?@2C8+oS zR1~rcHFY#T%xu^W&q%IxNwvzF$dL+Up_I&lOG`o-R5T-9hkNdRw)+x&o)=NfIG_@x zY*aT(#W(UyGd*by$e5Y9mseP8A=s;B7)Ms0?O8j`rPJOetES9;&n>fmm07o* z3wi!7lW@y<>DYv!xISaweo`^D3SX4)`Ns`KQ$# zLsj+1T+#JnH*$2Ztv`YW;4c@ZzaT6h3VZw8mhI&Q&{0e4t1Ww8-{BS@ zbKv@KK7%V)d}0y`fi>1EgvtW=!Io({;tPq` zCH`EmV+2=MRZ79@yiQvt;_7HLTndhN%ExYuMHM@?QG9t-)*#SYJ3q|~!IQ7Z$*t?i zTC?0smkWM2E{QPH9GK>(izy9Zgp#RvG9nRtPX(}N7sU9ARrC4*^h@!lPp#1}Y?1oP#xXMvJi07+=OgeN(mE$;eaw(Jp%^xPI!ZGq8) zTBtw(&8LZlH|)yPBt&zokI`MZSRqkBB)|1-w z5{RN!Sn=g12Ta~X=QFQDlVjWS(!T(Q>cHdysfoNcwmLSg3%h`eP&7t_(nbY%%)B`s>SWKJzq-H^k)f;A?n^G6IA?z zrNa*f;@bY3;bYbx6omivsnvXc!(QJ**1UhS|Kqnb`_1|f^*@ek%#XLZZ}pTU8nQn% z!2CaUk{`vMFHi7ORR4|RA5Sv;YraH&w3i=kN8~{ZPpG5rbF5f?kRd`Gm6jbP?vO5`elOST$ZrRH(4Q50 zQtVjKq?6;wk8*Y}@EVg7uJHB@bYjM~AD&zBBdFn@zBT@{yxQapw>i zgO8o}8{FY3PVSfTmxUhfz;nwFzJ$W)ub7mijUk!v%l2?te0;A{0Kc#DnWpmxo&+j{=PIAe_Qpl&M_(%E?RG?=ncur zI%>&2!W|T;k9pMWWIx@v+RmB%u1Ch}Q&N62zl{8_3lIU?5BSLh^ZSbDXTkG#1u+w$ zSK!;)qV+lW5HwSr?^-^=tbJsAc5qnn$Y;f~dh9?@TQnzGwQb*4aV*gNB53CF{2!Pb zg~ry0i=;3F4!^_DZ@0_Nv-;inRyG$5? z)|tvFccs^sr(_DnTt#!9vkPIqnFHRY~M0c%j%HN*{Z#op(t z+QiaprArvGS&)@bd1{mpx;D=X5qnr?Migwa8E5vZf_CKZjEP!%*JwZr zZ60C4ebVT1Vcx(r@}Dywx1|KyPR<>b%K1%7!L zsOx?@c^vr2(O51l3F-;N)pG{v7S)bATY4>nJrobSZqdi6-WMjotcP^rv6^d-*Xc=k z9VP+?jMa!0wVu)w%24YdO4BVI!0aCKSMMTvOn*8n+n47OI}6@F3qrOok;I)7M}EQZ zD*?(F)N>*U3ER)tBUaytS8_|`RH7ieR@ggC_a!C@e&lIzBQZ(Ng~H=r-`NMJdz9h< zueNEFszuHm&h~t7PD7x1l7OsKjR?viNJgn@@!(Ws;W8&97>$#e#aDM|B0MU_0gz!j z#Hb1J&@!Ri%e_wHhQEO77Bgqw+!$~P`)8&M_hF?orj@EGJq(nvV#(m9BDw-=bvU2P zBY70dwbBN)Gi6)lJ4|NEzX|@xe*^sg6L0b_!T&p55<=qVfLT;ofKcSJ*GeE6Xy>SATX<^3Ta@ix+I| zPt8~FT+SZoHl|(_Ww#$B+>~WFS?d?8F5z2XkaNsLIp1#fI|QaN^-e*e<+& zvyAWLMc-oNhg$Rf;&FcC3FX#r17ebLCDu<}cS(M3lAicOLYkUi7zl z5b%Wv{kuE}_(FvKT^{t$hxjKR^jjYFY$FN;d+DWIl58y+(qqzcMo$WXr`Z;zoGz!U z#XfFGQj+ocCDY9X5*1ZzK|s6raTFof*OLthA$@g1ZTR9Wry6Fr+|fskx#C4}s;FzJ zPrB7dGk#~G<$~2LIhH*DgVaLH>C(vRv7btUeL<-kn9lbp60U zZzBV#^a8i;a*O(N2OzJ$x*Z<3L8U-HFDPkQ#UU;`@*X`s+0W-0c=PR(&*Yk~4VuMXTa4dLE`J;@kczLu@dj*Wg&CX>sE7k|*Nt$>baD1DZV}TwK?PAl46a)S{kFxX z)^jmU_H18x0G(CPOpHm5sL(#5cz6@4Bu~y+j`hVN3mK1b)}0LnZ#-htiV#)=#w%PC z8=1{{k_1{?B|!gmzIul>?eJ2a`%tlKx%LgwXtAePq7y%8YHXyLOCvnrpw68uma+<{ z(Yz`^O0CXGqU1vu9JL36CufB{suZ=}rwqO}tGveGquMvFY|Ul;C3bm=GO;COlBIagou5I4)5J zkXK0R4NjcWx`fWyX(q(kDDu9KXLmzk_Ch_64U><^lM#4)Rh{n#|3tvItO`kvnI_;? z^LPcSw@@`pdzd@V?nC?&srqs*@Y%_~L#lp0_(#I{CY_1#dB|=e>iq)ToC56(f*2ZPVl_=4%UNqk-JSqCyxP5ny&1UU^sa! zNnP{4b3j0`L(9MC8r!!rQG~?;Gy2BYz~*@+D9}{2LL3ckl@Cy<)XNb%*x0jbJB%j0 z37H!i*sTtEF3E1Hv%0$HV)FLo(T0<-Qkv|5>w>mE-!dsEwh68e{W8@!t#{o-N$vvc z4#0}rJ=zRv;ER_ry+}r=Y@&sOfu~hY)~A-V=^zs_wHp`S&RV8{1Ys;|529e%xIW;W zsem&TiCM1%Q;>ScFS9B-^a|dzUc92#qbIgJV5r8k5*y>NW}8B zg;@1W$whpm?J|r`+HKJEe9DMu;<#RY4Tq2>g`5qG>fkc*OJG=9AAAe$3E+zR=p^?i zT*n4s)JtU4xkGo8jl;ID=&lA!ikypJhKR1UUEaBVr6mDJhFL9ab9tbE5zh^NqT>Pg zC9%1Llm@LMpBD-@MX=CWC2{o4@`we< zX`P#R$#`P0luA?Ryf)9>MWC9)gkd7jRZUcD=~JHikmhA`vE2^9Hj1rZwA)2Inb*)k z0>rGf(7em!4C#iWY8q>+R{NYg-!&oZ(nv9iETEwb#eswQCjdWZ>G$dC>3=gv^`Bb& zPxSQkV@`^~jwEtKsN=>*NgTl_@>64-eLxTL4+P!IZ;-!>$u}lQgm2$xd{0JEZ!!6H zJSP5ue=dpN2P?vRKOTj>4GW3=b@%&M%tk+x#QVFY z4)&f0^x)x{u%BX{*5^AZq9GFosI5pOqhHRXpG~%1#r7K>ccXT zc;Dl0i}05zDRECp&EKS?M1z%iGIYniEA7*iRQP`|CB?7w{R53kwkz!iie6EL1 z1pN*jxv7Hc6KAUPjRu%jqH+10cd*c$U8VN%DF(AxzfgtnVDP2MN(T1g8cz{);jKhM zSA)IYk@Ks(XAq46sG0F6$I~ zn@b&b&`aWvwsn;qmx9JWFr;VsXi0A^?3>20J)q%=1h#0PSXQjA@wsdXT zMj9MB3oA@#sC60PdwCoBlNFM3g+aj3ih1Y2<{5H^jR#WLOSEx?X|H1;kk(+(pXuakjf_+5wIn%Go$%j@PgTnV8X44?8*jP_^oKx+lNgpW$4MJ zDnG@}`P4|ETyM`^KJn_t|LhzXrGtb0PVLDs|R<5_vFoPNVoTweV$k%_F;c0`koU5@7mqtaWDP^{@#d2LT^Vqe=jfv(LVMD zeGg)Q!VPqM7$rzqn#)a z(cTb;Q2V72$G4wRvbXWV@0K^5`b&`zx;q(>_SeKx{CWk@;?qi3ewtWHxF1A9@AlV% zR=yTd?s^pq{Ho~mN1gwT-q8jK8#oDjL+%!d{Q+74M^kTo?hZhqK)p8L=>p`qMY{C# z1#mBK*(p{82=vwU=nGf_J6iiT_52R4Hn_K-Z)-yvAe-TOGZk#F4PD>n#vjLk_rZc8 zKj|mFDH|F2gOu=h;eK=-WjS#l@!$@~43tf8{M;}3pGxXh;o!GYcEd+$-u`8gQ0?u& zi^7s$FtoMct0LFe2?&g@GkU%S;Qcv#R|^t($<#h^Nd9?Som#4>uRM})(k>G*ct^X& zUdQ0sB-!y`Pu*?BjSA6$g^$kulA%5tybj*>D(%4X-BI?2t6fP)Cp|j1`}6SPCx~_@ zD`)R!>*>)=3!2n~dWNqh=e?$q_-P(x2Q1Q{rgRf~!dx)r2~@FEe=9M3=+S8f*~ zk2gZ}s>2$rP93rUiy^|@K2z~-821!CT8^gn&g7A!k*)d=CGP?SO`9)=G;ZVD3-wM* z{~97j1uG-fPyl!BQh80(arExj^Xzq}u3d;r3lYiooNgjc3eF_1*f}cmjMbrK)+oO( zyOLZVPkzdPLq%47p}Q~TRNN&fsF^c&lNL~Qy`j@6I%{T@;%C-;74oAIwvG8ADu<&k znNEL@A3Wf4sFyIsedrrAa#AkL<;!hQ65_R1a^K)h{z5D(pdPbo<2BRbtz}>9Cy(m{ zJy7TgkghNK((+8;Y2fR|N$K`EX)64Xkd|0qL{~mZTliQ_H#U;ZmV;E6KOe=6#IyA_ zI`&djh_zbqflJEy;6?o7n1vK>uv4D8NKaOs)T>iY z0^Z#Y(8;>yhI=}&mfz*~?nO%Dt66jV4myw9wDFdlgqP7%*-0U@Ml6w`ahFCt+{zjN zm2Rm~&^#1+lbvu6KfKnMF4s`*>aGb!0aYJDZ(SEwG(}0b+4499Cww`CV8{l24k+LT z#y@2+X2j6txt;EKa+l0gcexWqPD>h6+vZOPM|?<-#94C{#;5r!bYitQr<{(mD#a)} z=Xn$9it|11(}7PvWiaW97MWD9*oKfgC_HD_>?Xn;2)pYdUEsEa^PAF>!GO}-_Anoj zXltsI^^{!8ofi_Lp6kyAZ$OI)%A~s2J{g}PCIrrYR38b!V&?gE^MhU>7z|;MFg%$> zKB6bkvy!~XICU2I&Wan=@?X=<%6&B=nrk`$YT9Nm7Fr+jfls}1i4-0VLmM0ty3i9N z@(;7;Vn{L3rXbKm^@MK{N8D)Zit$9LAAlaykDgSRR9-|GmCc@G65OLSaXeIAzkF50 z8b3j}Fqxd_Ee>sY{V9ss66r-BKQsskpL8LiQ8;#7pXGPD2g#KqpGo?_b5Wg;(SUqx zxbTCcsUVqEbiYBml|&o*GZR%j03TmK^tlwuVx!`mt4j)AwfiF~1{*8DJFlWe@EpZJ zlh0siL5HI#jhOCU0lP_0ig}3d`1uj$qOZ6%-g<+ zD!I_HG^+$V^@qaAm+=WS@;tQsboWzsa@Hh+lU8G~Jj|Y9U68~~2>9hbKj|Zczvc^5 zxE_n&?G%lK9x2CX0<`WvdDUvT=L=~dDaC|@9ixt6Nz=@cQ!uG*QW}$^(^34)>j4R! zj)1SC{e04-k-2~vA~RDtgtSs-d1gC?!5oSBjmqRNk+BoY{%5G+&ldVEYPc=(9W^{s z7=fT9j3N|)!1xjQJh>C^)&TKwui_EOTjG=KWxnV=H;{VEg(=Rry2q91$SAqj(L|20zw{1s4yueSjoCsQ$_uE_5RD z5FH5FzY388G1QA#QtvRA_MK41L(i%yz{WKLPS-PpUkhb>gx~uY%X;Q0GqzeM=y+ty zX{x&G`6R~0^^0~G__5>Y$BIrm3VgV7%~dnaBE1+OXqQl^Ww-*pKWM<8g~s1m&agBR z(u$z5ig0LfxYRp=Q{8~IV-Vs&gEWCMT1PBdG=Jd*{h@@S#^g_e;4rYbGFXFg+8Bie zaq3fXJ`*pT1;trXM>24kJKL2YkkZhK*?uwLH=>JdxtPnLt6=ar(Pvi3MyOf3pgJU& z-BrK6IiK!-9dYZ(FK^L*W4RwU>R(&x+wB@hjwFH*N9u@T$o2!pKK0^@-)6liyyvW8 zf0tEkTP^n9Oq2IUy@k^-yc^T?u`;v#gTb`3;;d;{kNbc=&$g?3(d-iwVy1ur&0&F^~``#t)`R9h&cHED^ zd<(MY>lXzhi|x_=(?zIp+qUelb77Ia3-_x8^4+HTZT>yAs=fI}{9<&x&otRn>PN-Y z*6TaXuDyWwLGJ6p@9ytcZV&iZ_xCHe2mGu1`<2@Re%46zSszicdX;uN+h)i)2yTp$0On?;A|vQ z`5d$fo*p;+pr%)pfjakOqaD~?O7eF0OSi?-+nwkml8R`)R=s=%8T?W(hN}a zs#QA5uM?M9a{J7O3FWXh$57C}F6xymA=7`I^;wy7vgZYA+x8o!%dT2T0|Dh_EOYLk zj{?DiYl>M2Mo6UP4V7bGr)!2Z$Gmk78j25Ic10fNh`O={pOUE4cP|YPIx>^b)Nw?N zBXY}Y>YT6l@Ogp?`4nI9qCn2knr7xBeu)RhDeDxiHwZx2@})i*?GC8+CCrLcpas{! z_zJNrm8QEqKe1!0pP#olJg!FL_xAB*3xs_^t~4FPSU%E?oz=<>=u-P`1Z|rib8{%P z5V`30;1Pz<75DDj5sH;l(5PzZIj7b+35@iqPEU(<&kW;?#uKo(GUwSq9*S{|`1_eb zYv$&s^9eF5M(m$erc_!AVisux2L&z9*CPq`lg*TE;^DpvD9jqk+jm8f?v90)2{hDe zAIJYQ#&Q{3xea9lkxGGmOT2{U5sq)8DfP{^x(r@AG`0^L?J@JjO6_d*$$!A0ERk;-VPr zQQe#ixE1!w-h3T=&(HVN#}73)J9(?z6ie`{a`{|WzvY1swEo6i*|-|SahB42!3#E1 zOE6st?v^KuaDTq|MkX&){4grVD$eJ{PXw{lcgb01i}^g4-%F{8Xs95|>Bs#{n`OU# zp$av49wKsXtGQYC0EA0TJcV#&I|OE2KT&KKhvM$mC}=bftVkLZ;v;Kh5bjs1wJomN zcF)r#Pa7m3IR%qm)Y{^H+Kmv)k%QYL>@M;h3@c9DeJrOoOd)bYNxo}GENK*1b*q`9 ztShR1opAI{)02$285(kXwAfVZXN?k`#Vwnbijh)VikyrF}P9 z-#G?RQx@oT+?Kn~svpKpcy`77Sx`3Fn<}E~lToyAKIu>9zK?z?drh;*IC>3mB%;Dc zh|y}QK;A!L;Tm@_;O%AuS%>+vg6CoK1jSNDQhn{^HfEa#Zb-fWCV5_UhjhNI1{z+t zY$f3PBOjE9zI@$V9jP>m%9-*xxG%FoaSGP)s9F!3%susZG_?%_bX9TXoU^g zifI~JUzKRju3ynczUWU8O*THvHH(IG%y<5=vduM75PUVE*-ny!j~~(JpFg4(Cwp5n zt~XJgHZGwSYmFFw^aYwMWg8zMi&Kp+tOE+K1{^Uv2?81=?m9{rLJmmYJ2jzDOaJeU4=qz zUP{tWkm2chv=_tThdG92O%vgW&GW%8mWGP+`uwV9R1@+k zZuxm-$WWIg6#dt)GAEgq6FMvU{8cW=i;OJY0r8} zO>U7=R!Ft!Dg9_s3`gsU1EKAj*@-jJ*&S{Kbd@g8L;EC|qp?ZOSCMxQs^(RnDB{y%n ziIF4gLYvAKDs@Z#=*T9i|6*?aESKz$3xOd_DAUoA3JsTPM0u&5XL#pKj0}6FH5*~i zLXE~0v4Bp=x!$%F3a!TQq zwU#44EFt$^A6M%rU)O*ZgLxfbpnIQ|rO)5$hbACM{QUf$n3;!*Qg;(x=lUC$evq;( zTq1>TyCU0=D_Duq&U5`6Ggt&phSzk@B2W#%)p%IhGC zRQe{TFS9e7k zYMytD#$?`j-Ga2M69lRt^0$?xh$|XiGhv5%-Y43 z-Wp)xz$hlJDykx_q$aJXz~JoSnys$vur7t-|5B5Yu3CzeWhC>fU_m;J3{l!eI7qL^ z#~RD0_N0E>&0_@x_%($Kp0B*LO+vcS!P>yOjtJG%S>vF=jA7 z2tM^RMGflYl*wrwVlMy)DU1P%`Ey_o#rZ^r_tLd=^k)|O_@YD+?{p;QnnL}QWk8Dp z9hroCDkKOKMv^LlI+^M&f##a`5^VAtu6uqv^21hG`*XtyW-W6BY>`zyL zdwGG4(v-Y2)z{LMHNf$8C7X*|N?^gSb=iyUFv@Kh$Ul!lw;m@aIc8|0X67cuP~ z#9Rrd8oZXhePjG-q7BCP9WeC#UKX`wV?~h7-eT$_9?u5+d)KLVd-2H+mVTLl>9t@%>{$9nSSUr6=IjmKn-D zuu5tePgF&vf4Fc%xTmKpH`_iNIs_Pzu(DjF($#FtdF_$k^iXE%w_~R^RylmKTJ2*t z!X)5qJ4e-88q2^fo*-h5>9It}3v@qR4OylPdG)np<*GjuyqCY-MV# z{yI+9_Qc9{W_1?6u@RuY%23E5^GM}}_;rC&W74poUi=#@sI0@tS%g6Y23`yjDMkfv zI}MMBj{G7uU8ERaT8orSuS|HEr;b^%Mx+`kZT_>h?-u5_*k%A zW5=poX+|A(qUgw1@ta-?SHCxT1@^NWJwkIJalexX*Z%YFG3?^GO+=bp3EiUR%OzV4 zlIG=EPT(;~)s!7?BV3IVOKUs!5O+`};V~@4F@ky_GVv|L`DnXOHgy8`qQK~n=-6jO z+w%QYBU11%0h&IOl&v#2%(wGxV^scpA5RIHWo#Sr^n3oE@$hj-FTAY5Kp-ol7H%zB zlzT)kV@JCeUEop3C*UiOJMzw`T~hy||Ng1CAiP8hRS%#L0sg z91pMGmRIJPlMLDIn<+=6zQlhExe51xpqiAKzds1pO-4n|X`Sv5p&CNFFHOs7?`TWF z#=00RB9|Gjz-pLpgvA3i<$26wQrTqGO(o>vpz)CNEiRgd}_K|Hhyd&E9@q4kUdTrCYM6>)s1n)YLS(NK!Q<5*+#__G;j#25q z*h5UlZB!K!1f&E31cdm1u!p?3ny{F#nsBz}24I5=#qUIOa-x7?Sp|((LDjf!b=4mI z#AZ(;DEw9L0A4Qh-&2VGqxWu4)y4p_nq8f}#$m1%`L znc6ml?>Swnlf{8IcUn9;J517#oYKh}l+cy!xZl-s%dJn5SGhK_hYF}>taiArUZXl% z9*3s>yfYzJ$+i^X{>^g@C#x(Lfia7cXe&H24x1Vost_%>R%D|q$y_KUe{6OM!x?!;Jz6D<*e4Utle_M$nc@*U}TX)b<;if}qfX5P}GtUpK4 zN{`&!DA9u#VD>ilO!Eqot;T{xI}|TJyaIW0=+eL2o0~?vaZfqDiAMHF=i1aZscjJB zRbkBzfm+Qthi*BRXw1MBXAdi?Wqi~-E0PNPau8>|JM1K3hB>*Sa_hyg&W^>wQ+I>i zROu}B?U^)%4)?e7?u}@Nt~ELl9PUprJN6lLNlsY%*(l2vG#IXO!#$um@4v(NTzT-I z7V6$)B!+Q^@fQg`lfrDGo?erH6aGfDuzenLkY&;0t{n0!n3=g8%RCdfm~*4J4d+dN z{EeUO;M~??L+0<9a5Aj&LnG8nI(S~yH7g*Y@TzWxq~lOQOR}Q;2wfm~%ItIExv1u{ ztWo1Cnpq;>+2j2O_`xB|b3H54R+<+^!0-s@bB!n8 zI(BA(2RL6R4h`k&!*Udcg_@*C`@W>B4AAyFUUR)>%QUBA&-=KS`{I zR25US02Y)cnr6y!*KjlBP7}n(A~(ATUo-Ov{bV4IVG;c~h~ary?43Wwu|%b8+nOgX z{?l_}EP1+v>_1`_qEt-E>gS`a9uE7_PU5Ojx-Janc0x=^|0Xl52P58k;C$ty-+nia zX6<)Gu0}H?-}JKKRYNKSYfX-Zq&^7m?**g5CU_4xt48S| z1}oU>z9_q=z^v2W#_I*E z(-0m@g9F#eXd#Dn1kbC`Ch=f)%KR9Oe0mL6N0~6!Cl|m zby+oH(4lA`tmBO1TEFkBrl3%(<7PhcPkxm1tzCT!@{5|VWB2iQ=s^z^hD$# z{B1uabctjBG4oqN{@|+vdG%WK`X7e4=qB$3X>RAM0}K0IT}V_XJlQum-$3Q`>`Avh zt*bjbYWlr{EeJm~<>Ovn$Dt`wd9!vV79Ue-zM-G;U-}z^*d8TX(yr^S3*;@!mDl-c zDJcGQuDHJBa;2kmCh1}VRFN3><}sTQNO_&c`>NVdh{0VVj{_wMrwX0IIM_kY=kti> zU{iu+pPfV@&!lo)xB7zU4@0B&dpL-wLsfgX*OO+8oR3WP8T-^W(%feGgSU3qJHvY42j?ATOs!im$ zNjl@@dv?^3UoGH~1&2M~m|u|a4H#V>(j6hpKv{{mCv`(_)-zBN%_2<=gg;J@B5y^f z1nCLDez|rtJ=;QfO(UOBxQmI+5kJZ}jo;rd>&=?Rw1a-d}Xs#lRq{fN8 z&D84$3;=QQ;upUytr&|mhwsZPVj7LIF+?CFNu{g8{f0)Ew~|7W99HXL!wJsmHW*1- z`bjV{mVeG%ys8b*cK3l5sAUb-X39G7@h$y9CWg70CtxQN@fWl6fr-V|+{>4fJ*hw$yhdAzmr&6`R5=3!J8?~jB%GuGVn2i*5Fh& z)~k)|tvdF3JudPOc%*R$8KvK&cEsDdfyyn%Ky0aMIYgLK9d6kGPP}rS-cR>effn1T zrUG!ef?m8TMh`NVPOLJHwV&v&>U@}C?&HcUg+mkq^iT8j@x zjE5Pgk?aOpAVjCJW3ywOxS_m5_)qN+%UuG2OwmSyjzss1X{z=I?X8h0-GjrV@R_Jq z87nXsv6Yz#YVKZ?D&L)U&%vaFcn%o>qYE~(`Ui;%s<>T|&7ymj=KT3hW;Tp2>Z0DT zW~g*Ra>X10eZ;rW*P?_loY)<(%pt{9(^3=&F?q5Xuw7XBkY7ojtH%#+cT#NcX)U(v zY@r;`ANh*yXySsD^(q=AZIiH)MsWtx57Rf({?p;A9N7ual^)`*fgt!|0rvtBe?Q6E zan1xXD1G!|E10bJ*VV@d!)e@PHAn85)EuvEnFDxts|N_BSIKixC2Nle%s-i{7=hu^ z6i4(bJhJ{bT4qSCExsxaAdZC&n;zk?p6Q8}%iob6HZs=1r>F^$jVg@C+DdJQfGpK3 zL9p6O4RYBibp8@=??5H|o$Q^4sB+^qpRuZ0odsq)5#_y6i8htp8KJZ%RLxa}iG&0h zYIJ^$Gm6+jlvf80R5fcZEbCcwVfAGvl}lB+#$gNjJth9WA*pn`ghgwLYAptjQUl30 z_xnv=TUX0x5D^HuZkNKQiRhm({wA2&usI7B8(={-oZ-x7a6H`OOKUmMsKL9hP5}Z^ z4kSIa5u2LNoE%q4WZz?CfRvaBB&RHTYO6rKl*-%6Y2vA7M&McZdTAFp;CvLLNqQ)f zX!6_qlTxj|yxB|{D+EfSZsxg&O(M6TtonSEJ67MNeRnZMGEnI2Z0;2K)P48cv-+6S z3V;=l75L+HWCC(88172Hm))z-Z?Z8u=mM-}qC6l*T>3PdmoNB|6bJ_5ltJY8;~>hJ z8ga{lyXZ7ucXEGof7_U}1uLybW|#tVJ^rs?qG`J2*8$~HSl-}bQ8#AYT=Dh8QW9ge zZg$f3vina|pK$$m8l?=qZe`(J`O^gTT}fo^1g(qXkO|`?Q|_)>E)OY2TPq98%b0t~s$IcPku$gsERbr`c~DEtPl( zQ$G?z!ZaT{`&@gUr)1K`P;AmVBYz@h+_&{dSds#=f1&W6Tm|4Y^lMF(MP{OFZdy>D zJY)vh0F0H1@4aL!~#e8#qM_KJha%_0a|H_ST|wUP?Y z)3ES&-fpzaRp+0C>-fp$ly1tZ>M?m#v{s-_s*?&_Ni%rrpp=e2@k> zFiApJpANY;qZCt_MdfZMmVAECrrPmajx6=GxGZOEI+HZP$eHQXNhD??qx`xG2By7s z6TTqIfs3s%Yrd~;8fSL4Bz? z9a}KoElt+FB^(@7+&!v_IkfR_pSC75`UZgPSO@s+C^!Td=evmrkK1-}BOVjAoeWUM z9?7lHRW-3`+r}&pp|)4WePLYy{0a6Lcj4dOyD{+_&JDi%YL~|_W|~WF4fO>-amAqK z7rNTV|D+2lX3V7+7peua{%K@~jW^)U_Tuyv-T~W+IubC;fkKrTre23B2R^HnN#Q9uB zo}(Q_W#$pE5-<}%f{s-{hQ|6xN_cAw=)qqTIIS9z36x5+yH@NhZgdrX1D(4M)fC3SccAHZ4jI92eK~v*N^{JHP2h~-G=|v4B+1(_#di9Q%YQ1 z4t_>TergU;mY!yMa;8CrX_0l;S#e61UWRUrv0g<=W{i#@iV?a@d6sFGm1CB5_7HA- zhH>tRZW)n^US?`cu3m+TnnwNzPFk)-g{qWoerjSyc1eD+A~Xt{RIC-`zcXWo(Z*-` zml5B;L-jv0GY7ajdl@=9SOZ*L7+gJFV-%)mXs2hS;}{hf#_6c2e;vt8OVPuzJ`&|oBLvyE-~SeRHN;6BmZM%BqYlZA#kl1Xu_J=&)pppDBUn9eRlkZ&3l_p^ zD-x2#g}yJ`wN7hlRbSn!MG~1$ktlan&!O{{@|Z766lQk~gU-`pfDldeu!IPG7i}k%Z2wdky^V4aaau{M%kvJ*JLfs<#P$oM z|0y*7OQ?BQP>WyC%{!Rtw5_Ib{B5W6h9?T)>eFmq*I7-t;}LMGY+cB6uP5BpjEdF? zMvA?ypcYA47Kok?(Hp$u3qLI>jNeD)vxD%o-*_t*xBI6@a1e(fpg?aUlxQAB(^&%G`P;8m9VhqwSO(Bte?_i-}$dLCBY52h+-EL|>7v4Uceh%n=13rP; zCkgH!xWN`FKRh4)7huW?OTK9eurh|5pOoODcK54mqYIX#UDMv8lnh+gbXL9bSl7;W> zRA!}n=H&Cp3qs`YtbG@@ee^_{jeOqp^Ki~aiGpPq1oAP~f#Oz>Ls!6!zgV#~ zw8B>3bF;=AXj$G!>{E?UTG}e*0{da?rhO*hqzdLa^>42@X-67)Y7>Pp&12LFcO?o< zoOUX2k&sp^@_xr19TelAfiBK$Z)3h5;!15NX7;Ah_l|L3EqbpnF zseSpzwya%Q;%}ye@M+0+;9Jlpneh?F+;bXYq*Y*)<1#etucXs%Vm)4cYepvGCkIp(r=pARt)Y|2-5Y)|TuR&gM@48H#NEcyjTi zzc&w>p^G~7^yDZ&g1IhMwAooz9o*G|+0qv%Om*qx-vvoyG`Mv={#RafHa^A1Mfwa$ zmB}ZbuMur)wl!VXCmuZ?SKrO?f?p5GjLkE-zV~N834y*{w@3; zdw`GoJD|f$O>WP+fS0FN%T~`C@cy>v+OW%;@EdqHl54or;|YA;bMm=62VOsIT#0v{ zgk*UT`Q5(*ul#)P6+Hrae4cI>who?ezn-5t*JED-oL-)%Von6Nz6__f1v~xGzkNT? z_T~b_1~xR2+J))fUgc4nlClLXV340 zXCM~8Z%3EkYWMro6*6*7&E1GvSNr$%-P=LU_=guOLeCQ0&m@+%l=!@d2g*M{IzD&;dl*KsO)Eio4hAWTMYwj8D@d z#+Hv2jt|jEzfUy8VW9xnhV|}_4S#=^m#>)`Kw+5Y&2x=n&eufx4&R2r`+m(vkN@N2 znWQ1##|6h=&5+pDic?$p!A_Mid1C?k{T| zfen;1-LH=qH7zsUzU_XEeou1?mWl#z#}Dy207Jir#|p+C;A4pW$NTm576xl(5Bu1+ zWpqzGMSyQ)rmxq_^V?SiC--B|@O^g_Qnz>8*X`$xN8Kdj_4PnO^GTh!|NGOoEutZR zCot-jk>qeffn*gHz{imFmz=Y8MSM6RIc#{|)@`@Q(P#1Z80wKvA6)#jI-?-Toft7abA zPPGx=mwBy`-D2hQj&zNg^l^iar+KI5!iT;tq7~T_T*(JeMT6}CDr#K+yn&A0V;-X$sLe2rk3;OEo` z|MxF_rICQXqIy;28q=(9uL+CyyOSS+c7ma*3qheBUhgF(oSa00Zx64}Ylc1E_hXW| z0UsrlhJrrthX)Qh{BQR$4!Qmq-xDOUTBVBqp1?@sFy*h0^muQQbQ-+Z(}NkoujdQO z?+4ZP?d49~UtiCU8 zx87Z7)yqb$5m0A8*)pE!NUNpzc7=O-!<}JU@5KJ1aC4bkr+MRCK414P+|wKH!@h(_ zHy(OLXZULQ^@OXCh@Mbudd##r1bDx}1t=WK4*GMqqS3JBKgc(U#rV;JrszQK&31JZ z?QR>_l6I=gSG%=5ZTPX5RY*xnQFUdx=a)U!x}N<-aXdO^i{MdmLNAbc!0T|~ylX!g zaU4tdboz$sux8@J>QaYY%+apuwakt@;*UNMnYji%u%(Ucf1rI=ed>C~u45`8WB%-6 z>0S3T8#ugp9Lpq}ykqt9hx6|4bh4LlTI=MsFWMA?@*vCamK4b2ahcyLad*0G})$U zKj0%cGrwE$xvMnx30ksY9PnzToO;E~*~KVe99s-tt~6tBmenzH8gn-DzGP+ST$0c= zR%dk1n@BWsv&WwTrFWiLb?^}Quoz;iSQ#d*Li?};ux465tS#%D05X@Zu?>>Rb4rzh z&jY`Z79t6aYk9$`v6W*e?XG$ypeE3k(Ns}xE-sgpYk)aV6n3*^L$sk^q1+Af1$S1F z-_!gvizoL>x9_=Ys(nUg)f_%@T+D1W&61nK>TTcEMUlv`B-aM#l+v#9E)h5 zehYDUl3;Ea^#U&oYXo(I085}@Yu&+Qw^7$rLo<$f#WSGquj$$uTa~cWV7?e|xQ#mjGJ>x$4cbat7qxY#Ovs7+dqq8;5gsiJo%U z9kyPB3^C@g;I4Ym6LBt#Z96(yoOAT@>9v6#=gi$&THv7{IoXo7q0OGaJ~?!yr(|8e zZ$4O}CCBuSsyN&)`%XEKU;4O!JRW);BEOP_NM3xd7lq`BmO+QY4#rp}W4@23c+<|w z8d^el$I6U)R7DuoNQLxUoIP)7{u2GkMifKINhvO}V2w(n&xX4JOZ_V-B-6A5C)bNo z9wK}~vyJhgjDcq~s4~Y7CDEtZnS{|L+Q~w zwHCZ~#c!ijIeVkgefq?;e)tpkT)slQLi(CGXk8g6hX@`DTnEYiTs7ettaq#Jb6lS~vlxTg1u-Pz0!OzT zK^V$MqDXuK(sVJXXxAp? zU>c^#9W`~f40`;1kdYN zS<`^{u%ATp;2E9RhcNWnK#ffcc+zMjuvm{cL?X!qa5+d^i%`-NV<-k#UE}6JB->Lx zXrg&`5SKOlFm?Wzxf?Td=B6oy1jfMz6QX@diR%Nc)kx8S?l+Ap_-}XyYS)C=lG>Kv z7BUK$0{g^hk+`+WY0XU4+tpq$dMZyQB{zbuvvyt-=MYAFY8>eZ7`nn|m^C|bdfegr zlc*^*tvK7vpWqs`LhtazycHXYiZDg?UQF6Og^%eWJHWdvGXCXw>kzUk$b- zLmK%{{T_BMP>7}HS=}o0X4a!VlSY`X#Macwgm%w)ySt1c(%4NxBvOs?bZfI@=g9f> zHu8*j2n8{2JwC-&&-knO!Prr(DN1?z%jSn(KVjsH?OV28ta7FxCI}r!Ju{i}v6hl= zY#r%M8-W*qZwna=tETDqJ8#Y1#p-$$J2B}?F}goxAaB2FX?Md}c-FFx;es#M?r zbRl}8b5B@JoLh{zUGIK4GQsW+#Vl?|cT8t({iQGJTtO4C5PEO6kng5SG`V2_?FX7kz7Pa5X#J8M9p4HV*|Jz3j&Mr;MQYa?ltJJ zrYkuY&%#VLB{pA0U@Vzw5TvxKCbUW8<_N0NPeCMFssehaMV;U1@JH(h5OJ*+i+q!Q zw}Ig}CNO8(Tt%m2osK(mTAYC(fAM;l%f-iI&^b0Jq>&QLEySK>Xxv$Tvx~Xj`Euog zu=IwI-VLC(k_m(cz?>LFK@xg*A4$kq(PK{1X0Lodpq zV=Kse`M>}>2&3gS{Yb5rPX@`~BQqVH5vsL~s*W%0r%69w2nK7-07Z>|d*ICxKK&YK zdi0wZ?X9rzt(=Buo(s|EkyA?Iu458M=^6^p%V%&k4jy?9q3jGc)0;k6I4O5S^AjZomk;u+;l4;eJGnnsA33%i>7@n*qW}`wDaY77)BN~gF8B&D z7f&41W4$#e6J3Nd{}r8z*0Q~@$Ef?hiu@4?D2(rxoD9V37|THC8*M^O2lhJ%3xl1t zf!74A;XI{-{b1=Z!-8o&w~-M1F7fZdzX}{8mJ(*r5cBI)*06JQDB-|Z0&Gu~_l;hF zcn=Z~G2JCe8$G4i3FNQKnx9>&)mE0jewt#TnZz{z2BIEXw((33*WYA%Gq{NecYCuK zb4t?E_IwKZV6RuP z&{~tn#OeV(9$(rK24Z!^nkCI5et&Nl zr)XBu!sw{vS`vZwMMbFrNJ*ooznY;5RN~lI{>^?A@|}!bt?(z(&D3>%X#LGRCXkJ^$Ah9zyzMruKD~6eVGp?en8r``o*>x*#MRA$8gn`_-8h0Jy}ROu&<`-OK2r(G z4D~!RgR;z{e#*u5>Ni9^m3GFg`rBPd`e0Ir!`H$LgXFc3b;o>|yG*SkU7=M+=wgF^ zm?*2%jp)ZC=Op-Iq5~~MwyqBavvcG_iEK;m;QSP2_Gyad)U4Kp*Hb~b)UpR1KuWgJ zQ+s7NWBVxpkb(oQmf78D(#R0NIbqlfb|eEi|5Ds*ff0XtN0{O>?Sq%MTM*PI(1R}h za3x<}+SQlE1jXXxFr!Zm(y3=an`!{GYhP(jn^Pi#O!lU$Ey&1N57`JiIf#}d-bnOw zSgTx;>~+>}N&8;Jf+TP#n8NCVluYhc zk<{cG(E1R#t!g4qQFE)7Hsq{#&s*EQM=31Se|5D8Zj?l}WK`F#r*1ob7?1K!;GSm= z-4U>qJ0@m{e|}HyDCU?xmvHlQrtkDb0dHcAi4_!^@fhF1(i-NEviOgE?NjuB{Gieo zMaqIHmsD96bz+Af7)EM2WZDWa9soPzA5+boWCW!Q={+Li@s&3Aoid4zD$H4pE+P*v zC$B4q@+ml)+=96XisBUhpe9KA_(|xyknsUpKn>8m)h0E=3OsX6Uy-A*uD|%nJS45B z?fF1Q$=dHU1@1fM2(NvTtrNtZSB8RT$E621fuTxe2SMy|m975Zk_44NFBR^7fO#y; z$O5~?pa#t(Bs}1lVvR7@#f?(AVdfy?39{+f7=byLlv|#p}6Btnexgaetjq^`}@~ouo7y(P%eF2 zfPCLf`>ovUkq1~VL^ak>V*8$osV1xU>ZY~ah@yxZ=4mq2!Om*>6n!Tip0OX|I0V|i z+Raza5?;n^{Vs=Z`s0#h!#Y#^6`WEz#@zH*Qh$Q@QWjQ3dE>gzA5ToynWzah#ia1% zZ>sAK0hmc>Yiu=KyQfjh!X@?BLVg0-MmFz-JC|3&<~wWBBJ2gtZg>hZV>qfMoP1Pa zCU*jPAdXvBMApOPTlS(;yM|+imT(%O37*C$3L~q)#O>=(+Z<>`5G@Rvh%lhUB-8vq zx502GCG-xkRy6^6Xe+go`%ZrFYezJ{qgKh>K=y z)?0VE>v)@4Y>Hrnv8JG>4LMWbKyAqmnW&N&Ir)W^hVhzC=2rZ*Pf21*C5i}dg$Nk5 zIU^p~uFOW{L{+qE=M=@s;9EDk(+K9RA=e(~P{d36kV7N_rVkZaUn{ z>Vx58MHigxB@dgoIJ6C|q)P)8L;5*F(juiJ!~&ZV+Y6%-!W${ytGl}=E%94?kJf*f>b_TDw^Fxj{|+o&DT{WA?7ERGxKHbT z3<*h~?X_<{2N)zatIt5~ZiKO{V)@=+P9PZ`Tf#aTJyMy1jq8)gdhGuMiZDMD^OC>szHzR{Ut8k)%O4SvH{8S}E# zvLyUOKd0oEemK%K3JzLh`uZw23>|>u(@tmP)Ce*PT_2NqBk@BJAg$%(8|nq&WqVjg z5iaG)sw6(Tc}@J{FFRmsa%Bp;XzXdW#cPDu3x=w4^)?Mj&qTu$K@n~PhrI1M$PVE8 z=Z^Me?T}0tVTo?gg?#kG(}}?m1_yD&W}pmNS1D3?9M~lr(wJ&q-TTuMESvNX6APO9 z7n~Tmn5GIVxKjE`!dqmG!P*z?_DrE=mtWuo|J;&?KKwmdRK@6{`9rt36gb6zHKCxz znpP)MQ+-K{ZEU?NG~n?N*bT7|#c%qvRf`Y{PWIe6%_z@8`GSdMz4ZYEymrFP=wo0j zB$T{W=N~G{ad3eDA?6 zoV+0Wk+fpR(0Xz;m{>G>TeX5*tsaa{C|pJ)1G-#CkSx!%iBRG%nsIJ~4lTraDmav| z^4WxSqUEki%nQXI+rzjPHb1J}m%22T>bRn)!3xtQlvtJy9Fyyftf9>q&oTG;d{ z2%EHLI#EE~4u8x~DSeiE6?69aA=2+qSl5m1?rv%#4XSjwh(3aPnC#mJa3bH5C*a?a z-11AOq?w_D&d!x#Es|uAcw(9gYDkHf(WdHxK!OU%65?A+H`3ym^bcwjy6?1`_vw=( z1N^nyT)wF;9)q|hwyvPH!WqlHenUG(UGObQCQ@jV4@P*vQDh?$e&tm_GKLq*eo;7P zxYjG{TVWxev-g}D*h+U^-tT%W63tfM`YAp{2v+>WeHLF)+T3VW!S`(Vo7B$H7=6l* z+zxqYLWsm7#ufl+xu(vrutOn?n5Eoc#1{oIet8L-=S-%kJJ;1L8ZHc&l7V`{xvS@$ zNg^-PqSpB#QTezZ*fR115$#1sjTm3E}e2UbXfWZ(N#~u$lO+b2((=H+m(wD_Zr*8;;b>e zqothO`KQI|h-3QyxxZUBTJ^t_;M(JuJaIw;`C~kt&sSoxI^!n#vR;9y6J{3(qtzf& z62qJNr!Wr!ugGN1r3%snp86MpY0lY$$ zuo(h8of$1b{%+~{n2O&*w zZrbmj*NEurR2ux8uqlY&sb`?hn3}S1zwO2AGJE>-L2MC92lJKn&$coW+{3S%)Ei9d z!?d5YTRoKh?3Aan{lcSG}olm;sOg?&h8rpY5S z4R5=SoqkO`h`BdR&8lAKFtlQw=o^lz)ls_TmneR)*_m(sp>^saTu@Y$xzcU6BA7W0 zpI!C>kqMK2QIY91WBbZFUvMx<{c0VRQlo{l5vKcq6*cc;QB;^YnsedrNYW?0bJ%M4 zxh`*a5P#=J*F=k<%KpA(J7C{D4hQPS0TIuj&K9t1(hkTnY! z`>W)17QEZ6?5W7RMG14}T%}&pRqj}>Ftf4cDN8D=iFEr9j;&gj4q5q}@jNMmdM9VQ z3Or0JsVSS_Ac^H2n)Vf*rM|hxU#(IHM}3OsUH7qX8@Z5!O!Jl&{|jXMiVct=wXNh&xVdFdP%{+I;dN93$ziAx zV>2jj{VMH?xWdYM`}@C*Y_+vh(J^9Nz`n6t^&?D`68U>m0fZwA%-D_`JGr4^Za@?7 zE~U1+x(${po9Y2)rqMXBUYy1=l-snn9anhH`46M#WZmDsdZ zM-d>g#sAC<#*kVY>Hizad!{6$Vr(L1&=eByJV!^(Q|bLc&nm*=*C4nCwbxAfH718w zVRJn_`5(d(GI>2JM)O(43-5uTTIe+ zsYV6qQCZH&rTY$%0Q@^dmcS;k?8PkqC(@YH-*0dsxR(+*X+Z$AU)*X8hfdb|6SDRZ z2Q8(3w&sa8^kr3v*p3noi`BowJF&AdMSQ(OFnN9Q;D zGx3yC=HWE@YHH5b5!2}GRDnU&V8YbvdD)z5_4MaYFUQlg$cJ4w{Hfkl#N|@>h&ipN z<3z@B#*ODjD|toEYDh=sT)%dMUQAA2Qaal#pw)hRc^Lm#m#)wfWk30(T#)dNYZ zd77k^DqeL$|4|pU$Z1l-2EnEM+}~xAjEzL~_9`uZrxWVkUmDj^HY#u{!2+nnknIgy zb+%|}KISnub%@n|f^6?W^aoy_5e9E;DSINPxwE~wO-kL#OlT#4U~gSm0pybiCd-0C zTlV_K*_iXlGB;Tyomm?uRHOY{Gua82?JT%~!@{wrd9&l-tp0S?7)L_Ml)A;hJVjsXKi9x;MlsV5F3#?w3>Vb3gP_u( z&Au0gQ%|ZN;aW=)ea8kkB`9GiY4h?yq&o~#)f=oXcG2|hW>|#K(n4eg!*%HWN_2au z6ktn&>$b;*07*3y&akYEK2dqG`=JMBfiv4Lx*h<|Dlh%K=wFcw;V}waEhAK<{UJ4?P&Pu1xTv1! z6H{K(WNh)_2|ewitDrD>6#2n$Qa$IA{mH4V7FCf7v++m-`!6~O!<9(wz=s^Op1EUBQQ%wEqTuiM+ z%%u1(6ufdpL|=GD<2h#>OEab>A&6&-ryp@3#E))fxztZWpn7fyM^s6x@kwtgtWFK^ z8k+JG%7!q$5@zqjh=Yp8&l_443u^nxk#Ul+V#P)-UsO5Bzrfp9XtJ_`wifr<_=AAD zzo{n}Di}{hMaeO}QXSbalMb zX*}JE{pd%~3QBug{in8sY7yCu#~;Y{Ckt!=wifHyV8bCTY}1ImQ&z$Hla# zNoG-|d-P7oGD=r}9JfZ|xySgVfwfEAAcUVKeXyYbOxJkZW==Jr+D{5PjU&aVXJXh~ zYo^F7w17-Hu)$ffm#=(L$9#F6MD7VH5DDnvUatB)-Q6c|*MF~@ymTbqI+_tHrb%*S zY?NJhqyn-ysYp-(23{_sGz2u8oz)y8=O38e!}P5KHWC^EnF>$uLlG)MV;wBR19iH;OcdAbV2{19|y# z8|*#HPNNza_0)4q-v!(_+J`Cf!|ZV>BU}~x0#&`%b)fyg&f^!O9xvsjHI63pX{5$| zsKSg8wE_Y{b~mB}0(Jj=5hzMWNzQ-;ee-SkScINJt}RvNDOUDKw~~^gCTg`D3nD2D zwLe)D!xRg5m90d`kR%xS zyR53V_J!$Q$=xvQc`w(vARDVG328V!X=ZH>NWziS;Qm>!1@|Z_kKSzeVs<3;6T9r9 zvYZWbgOjk!(8OGs^3Xpa>JI#SI_Bpu%`Oj9B(;u=VsOvvsr&*1y4H(03T2?{Kv*Hw ziA0+WUZDid!EGgBp3G!SnjKt`N!A&Kc@8Me0#a%!?{h?Hiy|E@@{}vA<@)#TDlDI)N_3DeHfFVQ*Za5g1C^&H&wzq4ExplFt-*0N^KnW8ZOgI+KhH~6Kowj

    -g*yoxl_ZKHR{}ay3QCo7>WQ$U5NnN2+1(}$lBc6zpVPo; z$mLDXxwh#-B?*l~Kyp=8Q(>!%keb?iai2%1(mf<#U#4^hh5x!bDT+d3tMbI}E^F*H zksuLrk!%<&_!_`!%Dho^P#MDK4mSaR2Bo+4vS`Bo)7u2uI<5X#*Y#&(+{{U-LHdHT z&MPWlZnbPWa|Dgow__EASmDp6QsSQGG|X@s`)NLll+tmRZ0*ywL4Hzv$iju@UuyzM z{!H@i<@?;$;gju|lTrZ;2OMMm>f6RSA?ipJs1u#mGi_AwU5mJEF0~#T{uCLVZ-ZMw zxZG$R<~>j_nhkS&S)S&RuW&|%DUznF8%sOAWO!-~8CjA9USmi!fH=bydZaVUw<_CS zFryPS=-AFSC>dJ4&l+8OXcg^Z>m}!0^Mi`8J3-d2G|D3^LCry$s=VpW@Q}~zHIm9) z%oyR9bzW&Gk}ag0=o&bnsyr#IG~G;QVWhy!wR1=19Y|jw7KEXegYm|nzcoyF;rzFx zTjD9bDjt$TNp2juid{P^zuIghrlkfKuQf`#g0xQbb(0c`ZJ4(LU>_0(8?X|1rZh=3 zLNJ(rt*fI(r$j7vg!?&5IB|7!{)5u!f+pi?*&U%UH0c`HStonk3%ss! zCQAnWtphmRFR*rh*QomU(9p*MI_6a{ z7vnvunf%K5M{&paBzmt;GaH?MZUeRHfvSzyCrYHB2;ItnW)>FgI=6)0=yIe_qo5J;&2?#N*;^ok}K@9G~3hP8r7M)R-8>yGfL3sjI zodrA;7n?bJg0?Fj*`GJEG(7!tc+oYZN8N?Jg3QL^;`2s4{Ul88%s1%+LN#ThG)k^$8n-A{WDHXj_~&dDxJr8@W?-0LPwY$F<;sx&{z_lOgTzUf)o?wa7=mcd zRm@NS)LYICF|Ko%`Ij`oG#ob~TDAeG6^EE76`CYz6ccAOH)r_z%8}b**S;ou!P0J$ zS!#7a{S|5Ak+bEKAY&w9#h&Epo{tc~;u0Qiu#RO$Q@A71Y)r>oBioe@OTTUwcyPX= zQ)>T~HTqVK%z1<40o-$+4n@;0pmPsk&_&;;#$~H|EBYBdNT2<@XX56LIP)n*pZMr0 zWmi-WdN{#`xah#^wp+a`y09l$VWx~WDD3_h4u@M>TEul}VSn5E=x(7{e%d|Y=O*g9 z9>3L|=94@rU!5C|l7=WEk3iw~0s;)LE*g5W8bmy?*cN!RK-Z(b| zZ-M8#`*-q*0pbw$={eCS3nO&OCoazc`K<3s&K4CGCe9uY&6pzZ>i7fo;C5>TYQixX z1FQ%~s@*!+j&DB@I>@57A4WxN2#nzd^iB$Tw%)t*o0KpkAtr;eqFwPk^W8x7X#Zc>QF60#bo@volsbzkyOU+nfV^Ukw8`MGK z8T?DtGr3R@{mb^SE$IAj@X~#~jTTP9C|6_m+FTb#+;(JfR57gjH53@iI`!IrU1rgIp`rkuhS&I=;(qK+jb3wDiy=T(EdUHWtQTU_~4E z47(QJgcF9JaVWIA#se7gWzm|kQY607Q@Wz=({t)eOeb9!vqoFZ`OrUKXQcBIc+0A= zd47+glEWCa64E5Bxib>sVm&#fw}uWD{4ft}fau{=l!GzD=-7u{M;XU=ivceWMzCF@ zk|S|kYM&id)`@ygix*|3glZmIkc{+5EM;RO#BH_<#Pbx_<>d&QJL+t+uJBPEx(A(o zFS{it-b@x6OfJ3IyW5@b%Gw?OWD$+m-Ly~LZqM;JJ5IXd}Kfmi|br!+!g2K#j$mRtDy-p=-WAZe;X(S z1qKof(&B2 zt57lcz;?)dTHT=giXz9a(0!KW&xq({c)VpjyT<>fip19(jl&-HqD zajwlY2IIpaY|1YRTwvQ`c^cmgMP9UmB9)+24WzhgB*}`xW zLNW37;Im|z6k@4@}RYUUxIT*k|2)Xk0v;-x{OLVaKv5;1U94h`vIl) zN*3LUVLwDTkkS)A~8pV4LrNEjAWITwx4qDroapG?9Z%!3I=%7majJS zs871{m%O^5eFi|Q^VuJq$jqvo^hJsiak$NR^6kF%Qd%jWN=QyDkgVn1cB@q#o~%Eu z;71jJL_BbN35wX00Azmr;;GR1vf)&MAbD8fTEA$8VOrbh#sbF423B z(Rj#Y#jaPyN+#Gj6Gugadp>K-e%Ag zJ+O*+5J|t+3$<5oIPx!r*qkOO1oFIW&>$msc=I^RyozGhN!xxmQWt}$?PaG@Ggca% z(MlFVHEbQ)U#a`Gsmm707ch3F*Ldzo`I;fv`nJceo+nJKRt%EWSR9IKgylYkeHoN_ z=~`@1Fc<-;NN^Iabm`ICy@hhkh4&H;R2m@IaRsA4X}uQ&9_e=6l0lhQy73*R4)mT% zQhBj_v*LS3mkx;Hr=3P~9)<>hU%Wom&(}WKU~s5jB-{ayBJ>oG)}C{AC5qc_&bjyb zA4)w4(re$}zUfCU;9}K$^{3L-J_z`LZY+UbTpP)|%6c6(t`aS7n9!z7)`ZEW|4DFo zIA?JArK1_}>mrBi?q4km@etN2=EM`a(7Rtj1$dRM6_}-@Ii7mQJ8rA71b<8xN4O#) zrMwx^gj@ZRf;)J^i+enZr-L*mXgzKhU;WXGr9JeuED?e=K)zH%z24uDDK^ftSLJx! zZsb-<&~XB|l)b3G^W^67B5}G>_geJQWT z*g~Xl_ExFh?aI?HqS12tyvsCa>9H5-iDN4SY;l}H;9zcw$D_BWRIf)c;b4ozBlczV z1F%&zOazXj03-5+4$}946Nbq)rm_!_$3N`&%tj)T2}y?{?qH((sDAMKsIk+G;HF2% zdIoP7Ad}Elzp1^$m*dXODG%?FvpO$%U%vSpqcv6^$ZDy6!t$M>&C2lTGkko~_^Pga z_-zi@@OnFktT9vS@bIIxB*MwxcQ5t>o+Ksa76-AdYk?pw5jyVg--)t+WgjZMghU@Q ze#6hX}s}GO=nZ27a5S#2b?|PzAhM~u?SlKIzD6xp0ffH z&Ehqpi!W3mg=IzuR_m;2ZgdY#1Hv<9w)1Zo`$&GgAgXPwwg<#+d99;Mx%4=^@&=)|U$iV^ZTm%npEk(WO_TSUm+#gtudEi~Bg zLkw#fiHo|>ejY^pl^XdvOcQ8@LvSV~QPn91>d!VPDA;|zhu33mZ@KCz*iuAlk+XA% zG$mUN2q<@q{;PzYGERb(zU`Ev<1i5zYJIZuwXPakB;UP{+rF~1v-!{N|J}fzI59Kj z{c-Hv`dOMr|F5O#|Llj_JK7nVIR0ltR7KbB$7s*{rB-8*0b#e@Aqr>(7Dh$waeTCrYClAcZb)Twj@BKW zOON*(EE?tl4;q!|L)?Y=bj%g3*@u*2VOR16ib?b4)lN84bjYVDOF6q5#$!O@`-e3FHfwW(fzWpz88}`(F0w$cv?YD z;c5-z`gCu>Sdzq5K}x=Atsq0QO^q4com6=_Mv`+qByA%n8wZSNOb7}d?$pYSAe?M^ zV2i;TkNB~Cfp6PY-x}3(3x)qwoWl*+9d-_#%6R}kK068{i)KpVJi`_C<_<&{?LD%- zfKB;~lR*_1ZnQXeVCdz{QE2Wk-B;|vgH@APfDlve0PS;wWy~-Pc@j!hGv5b%j}YtS z(IH>M1djmXbWVdbyT=Rat|~(2Y0-4seiE;DyB^uWlKcBA z0UJ)V3iOF(WLM|1$l=tixkUzPum5MycTy|m0q*q5NQmA|gI&>`rl#KF(G4@-u1ZV0`t8P4u*6 zIrb_tt-z#CWvSTJ`y9$`M{@-%j)uiO(g9ZW`AO!-#{jYNSKSsGf_PCA~hAz$) zcD6r7ccf|Kv@U`2b*(ptxw6zpH@wT);s9ud+1QO+-90E)>aI?bk^q$kZYhd^s;uu{QP0$vN|VHyIuoc_V1A+F{jp-sr4oX?JPww9)g)qiYxuA6dkO zwG4A4_1P$_>_sO<-vaNEo@u=EVNQRWuXjO8IFQ`4awJsd*P^$1SCX#k#Lx@Dlo6Ha zi*rUGKhzec8OezRtAg_msoi6Rn!*HH@IewgkfXGw)4`#IGgM2)V_tR!RyC3hsU%iq zpa*~ut9Qz<%@iU`P@hAQ_1E@C%Q>RIawi30$7m`HsbdkfHx4j3Gju6ZQaB5*=9A;i zehSBe3h)ca9E}N?hru?lGol5mFfKY-U$W5!Vskai=i3)Y?ixVJHs9nx5G~7ts3TzV zvOehk3UjL#ptJNul>VZLN}nxddNhtq*&gHwcm-A zAp>n|ys$w>cr1Ua2E&jztJTmq4TX~h*1|R)e-30S12hIpFc151_Z&^QR=_S2+ev*u zc|x!5V1XQFxy(gDg;>Z!S!%(+M(0ONZ*)6$3bif*_?Nk}wJKk3aT@AaP4{}BB;`u- z@}xOc%|AQ?qCt0Sw%a_z(3>WXZ5m&CJM37!sy$nzqg}%+o%JprGt@sfw8E}GvOio~ z0OaQ|^{h;|EHk4tsEEK^(E5_<=Gvar-0z^9m32Zh#r2=6y;Cu9KN3->_%lNW0?z;e z=98g>CLz7VUkL=KC{rTP*Zw}(Hy|cgJ17!2Nz#u6Fhm>Q`+eZLw05IJdAI;nCg=x!*1>o6h%5~y= z@wTva`HO6G@hiVkmd7-wESrpAi61A6uQsQ6aYyG~q2|l|oC;TCjK4i3;8&M~&2EFo z1F?Enx_jWg#I@p3Zn4yv&(7s>#nIhJ6HYlEcWlhB8MQKEBc4t`2?3Z0{E%6G5j9xQ zO#j^I`LJKL>-TZCi|)lz)pmzm*GG+ym#kg678ef($d+%ZE#G1XR%H?c{jyPYGj@f_ z)U0mfQs>2vNk9%kx`#U4SOckLoC$i;ZD_sk7opkOLiz7eE3e)3R($BGql1?8TfCx} zxQPI!k|5=w9oTpUMoFM8sIB8M;rdn_6C0B#OfBv@tffexZ6%u9q0p?gz~aLj;vBP8 zdOuN+Mo3`hOk_z)Hc5hS&bc=!67&W2jZEl_*kYF9n|w6t^=`9|!gM}nGo3GhlwdwW zn(*Fg4vUD7K_QScr7o86Zx3!F{$sXUBC;PbSgCeNEdywG<1Ldz-U{xBKc}=DT(B zD&77L3(s#zSCRB+E1QuJ?BP$BYb-1=mQ$OUqt7uEf`m2O_DL9V5?Fa$f6k|78^tdb z05IZD{n+h5ZWipyD{sc;I;&hU94yrXt7_0y0fNantJfHrtk&{Z>{3GtQDJarHjq=H z#Irz0@I5dbLxMtI*39ASQ^Bv^zwG1kVsSCd8 zv}^) zIUjCQ%Mq-Iv$b>t|0GXLoR2g#aF6p{%Q*IB`}P~JnRIDgI~zZ+&UbkqgJ_?J~ zg)B6S4bj}B(TB>i16aj6Z_8c7Jx8d9lTSrv$JY#KwF6waul#iZ!(19T;6^0Bwr;MDC)lZO7KtIVZ=Bj~A{d$ko`P|XlPo#8TPI4T1}T5v>(DCQsraX$GBGi>UU4^I z3}%vv*2%&!k<_C?Xg!aOvdVt&WtLbt#Nnv-~=^XJlV6Pb4Zr zf^Q?@>E`9FcF!qTw6s?~ta;+4&k?f;#Lm4>gCw&*%x|H}m1m$o;yq73`U8r-X5aXg z5UIbtin^S2-qejRgwMIX z7fMyEVTZ+}Oo@LOjH&ckTONf`CMFjvhI|T%A{+!+b;jqS2vA`+;t->P>1qo)_Vo|C zoMS2755b@Ov3AwBZzisu@!=;te$flSQh$<(7_tys;$}y;Rhk+aT{P9c@1JD7mSvxe zKtg;!@q#DACxQ0O(0GCCz4$bK7zNtl-W&9#ewPO5)~9|I_TlHZeB3}m{?2*NY8Asr z^I$l*ZNthiNAY6Sybz?FgQ0qb1ve~V@2VPZqGIZ^Q{JJ+!7a9sj5(i3<+=mT`b~Lg zQK8;!UU5@e4iF;buf6u9)D_<*H-2<7BeXjvb~QVg3tQDFPM6#+-QM}G`%vM3{MH+M zkUjtWbW__9cq4E6KuD&H?68%O$VhdwYsg)u`uZQ6sR&Kda7Qp8pb3Qk$MKEfKU0^J ziL;rbos0ed1v^WsHdY5>NI!EI6H<&5r+8B>TE;Pm%P$_Y^VMO7U-@YDDPqr#7rKod zQa@;C>U`)vN@d@d3O!)7k!6PeVKSrzQ~-X25$E~+z=Hr^EODDa;lOLDHE;;R zpx`Y-nmn&m7|eE8^K&Xh|Iw=>nhY^b6$hkGQ44Bx#0o86WQ?wKRNPxM-?dCgRG)@% z%?m9DV54K1tJ%4}QLXEGu6 z7T+lhFw2RRekjBfO{gY0A6fNrW!k)T#>LJk$nE5#Tbg72vNtS;ARL_r_`;xV(&Ph0 zIhdYB32LcU5prMIXg6{_kAw;waAF?QA$br55iKM3R}t%wo$6@eV7ei;5_e3KXct>Z zsQdxhpIIbjcj1VPhV)^YK2R9^JD_4AeF)cSQ}$vdP;uiN)PMluSCuUuLAjIbYxTuY z+S|1Yw3efAx;!n8beDhS89bQovPGy!D)73$J(E$A(nEVqU^8Tv z3N`*h1$ggm*x$J{=m@&~1KDYB)O71~ZzIuD%8)Df#YWk=E&~_It71)LC)x+Q-OPRJ zR{H&7z==Z-`1R3e&vZR=!k9Lh2fJ`>&2&j8zJ)E5`eR_V{Q`6x9x^C5Nge-!A`aH3 zT4Wra;$YCQs8`k*3KfaOeu-W_3G8@Isn1H>aae!@L$+ekjiv7R+x7e`5rzeMvqFaQ=EV<7%jPeyIl%Wf7O{~O9`E1VisULx^wSE{Q+Tel17eJY zQEozsiOGUDy?!ouS7M>nT>-*lr>b z=GYU@ngnL%<FiKEf$p;kH7xTaMDcEnQ+VG)n zX)?O~H6ljMU*8nkq)G_F!C1#mT~f5~kM&#!_~Z& z^Sta+1~c7C%9yvl0IsjkxyUDo#G}_a0{Ur(^ASp~avEKnRDkPYKtalYd&6z+M^mL? z4=jXCnj39U=75PkWpDWbrk2e~OG=ukDD|kC*b=P0Z^O+};u+W0HdhGDB&>9Xvbk4F zi`Pd8+nUHBQFKjkRA^ZqBd+z(Q4oRh3LjN(o9kec6q>hQ?S&SvlsJE74iHG^51i>96 zR7+2p_;trNZ;D9qTRq1&4;Q=o@1{cLu7Q}Q42NiQOmci$E$qLCg0!0h-A;&n6hc9q zvEpavzSB@GD5(QRufP+#@^GhnK2a?&=BDQW6|o$cFC44RoxuP&SpIQUe|N4bnN!(z z@VAG@6mnuw%12Gge1k7?J+b+bgNVlvDR2)eGVhcc8cOlY(N5=JF{VY_*PVp8Rg~O(vBuIOKT!EOLy##SZ9iVbTvL*5BkFBj4$I3%~&>>8HNLn8+#67}3 z5;X@?-0wtpW+|Ifz4&c31To<1F7W`?4-j4SxG)&WNWF0bw94cNOnGX-odh_^A1jYQot{BvICoZqio07zoemE>K> z6`LYr80|8hCPxwMeBT{;BeJ}RaYR^7+wtN25QdjpOL+&q4_Crah3eqwHO&ZX!)ctF z%Fbx}Ez_eM2tJeHmc*PzMF)O(%z-{b-cM`Qe>8KG?wa+=8uP97&SmORv@7GG&0a__ z$Vt1j5ADt%kMf#K-PsCy58VwQNIC*)`EbGa@?Dpl+4F=wDPLlFH$mgdLCqZy^&Jz$ zsJ2xF1@$+q-N4LrS*&{ODVWiAJGngB&o3uE(bpNZ3`qOnx~qbS(Fd0lf22dclh2qK z9CHoviXibjJ)bOJUNB7~6{tm2iem6^3~IcebM$zN zs%os65mEasnM91tNH@+RgHug|9r;57b-`bYb&ecz`hVQabOMHl=3}YhGsbu#cz5I! zfbH1e+yB1c6HU(4iLHS|BJ$y+q}MPX|Eeac z#6alcP#r+6HD{&SI67T2B+HTHrO-!XnYrQ_OlJ{RR1BN{L&acqb6aV_6G6HHd;w&g zb~_&HcpL5n9uoWG=x z28yXU`b0_dqN}S#I~eaSt8W1!%KM_J!;KA{J*7VT5V=q-M7xG#Svazy-v4iNlkp1P zr0$L2R&!Nzh=wilIY=cD_msG0ox8`VNW8EEs2YrNQCaS;0_HmHJ?s7D8~5<$;r;

    lOB^utP3PxpPV>|tv2!@#E881e`TlFli&8;1g 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�+DqSWGMREKi0 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�)j`)>% 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 V2Wep1Kj0q+(0{<={^#@6{{!4Pbz=Yk literal 0 HcmV?d00001 diff --git a/week-0/day-3/venv/share/python-wheels/colorama-0.3.7-py2.py3-none-any.whl b/week-0/day-3/venv/share/python-wheels/colorama-0.3.7-py2.py3-none-any.whl new file mode 100644 index 0000000000000000000000000000000000000000..75345fcb6c5bc0991ede4e3455948968fe022294 GIT binary patch literal 19915 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 literal 0 HcmV?d00001 diff --git a/week-0/day-3/venv/share/python-wheels/distlib-0.2.6-py2.py3-none-any.whl b/week-0/day-3/venv/share/python-wheels/distlib-0.2.6-py2.py3-none-any.whl new file mode 100644 index 0000000000000000000000000000000000000000..161b4c21bb114ba04a707b1da0b0d9d69aba56c8 GIT binary patch literal 141707 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 GjQ$U&0@_vp literal 0 HcmV?d00001 diff --git a/week-0/day-3/venv/share/python-wheels/html5lib-0.999999999-py2.py3-none-any.whl b/week-0/day-3/venv/share/python-wheels/html5lib-0.999999999-py2.py3-none-any.whl new file mode 100644 index 0000000000000000000000000000000000000000..d9fda41f3a6a2142d85b014814c1b67937204256 GIT binary patch literal 112620 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 E4>c1E*#H0l literal 0 HcmV?d00001 diff --git a/week-0/day-3/venv/share/python-wheels/idna-2.6-py2.py3-none-any.whl b/week-0/day-3/venv/share/python-wheels/idna-2.6-py2.py3-none-any.whl new file mode 100644 index 0000000000000000000000000000000000000000..ab09a80bbe43144c1ef9137bfcba5bfe33f9cf77 GIT binary patch literal 56485 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 Icat|sf;SJ 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 literal 0 HcmV?d00001 diff --git a/week-0/day-3/venv/share/python-wheels/ipaddress-0.0.0-py2.py3-none-any.whl b/week-0/day-3/venv/share/python-wheels/ipaddress-0.0.0-py2.py3-none-any.whl new file mode 100644 index 0000000000000000000000000000000000000000..aa2a948b7174e381ffdb27805917503a08356df4 GIT binary patch literal 17503 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 Spa=s4I}oY?16bJ!!~+1B^%lzj literal 0 HcmV?d00001 diff --git a/week-0/day-3/venv/share/python-wheels/lockfile-0.12.2-py2.py3-none-any.whl b/week-0/day-3/venv/share/python-wheels/lockfile-0.12.2-py2.py3-none-any.whl new file mode 100644 index 0000000000000000000000000000000000000000..c91f5425d5af3f889f74599ab46418b6554dade9 GIT binary patch literal 13506 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�y_7OKmjU)V&Z4k|4`-=aTgNCF#&7N`iKf2U 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 N-uZiS4E}TX{{SU*_^1E? literal 0 HcmV?d00001 diff --git a/week-0/day-3/venv/share/python-wheels/pip-9.0.1-py2.py3-none-any.whl b/week-0/day-3/venv/share/python-wheels/pip-9.0.1-py2.py3-none-any.whl new file mode 100644 index 0000000000000000000000000000000000000000..0e229b5d71d7597bb2b9500800069958de10499c GIT binary patch literal 159152 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

    &L9{^2IpaR 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

  • *Ure!7cwK@-=01WnqpzeIY z{@y^prWlfH#2DH6fSv8#kZT*F5n9O%mn`Ts#U1158u~&}J&xET4JZzkW~w>egaHS7 z04=e+T-FAZiWKD{mS3BliH$`7l2zaBK@d)Ju^F0NYu}Zg+c6q@4XH+g?ig8+fZSWo zFh*E*#*1HBhSy|bQiVw{!8Sm}_+r{IPpF3B=>Ddq0YX~>Mgf^V#k3l^y91dSlbd<& zcoos{31LW1I3eTFC*=!<5w@$(;#)->E+DM$j2#=iwP1bYaqxI!z0*T&DqTaZ@%7VV zx_a8M?w*#xj>luusm&b73Ju$B+O1CFlVswA26FlZ5-%PSv0&KQ-+s2cPZz@8p8AG_ z02~X&?Pqm2<*KgNJZS%bc1AeEenTY2g3ZW7ICcn6^N}j+-`#f9Ntg(kmK(*GqR3pV z#b~7^LdR;fq)^wYG~=>OUv|+R;i6|Dz`O;~ok7JBZY=G(2t1?HzKH`}UtCtes)Jbr zU9@*@sbUQwMl^{>RPNYa6O;Cr^$qe8eFx1FFIDNrx*wET)RdskltC4uJyON~hQ;Vk zc!6}m5{1Q0bj&<5!AmcbjKQMJN0-`#uoQE<8gWo9@%1)M!x;i>T}H2N0unK>Z#TRQ zYFKVb41THv9c#}!NT(?V5Co1-D=|8 zrxwIqk$}wB8xjY1u{Mh|vB0qmi=5s24a-T9A(|otLmL8&EX04JV5uA-I9emW(d-t& zsUt!dO)tk6w6;igwW!6`ud4o9q-NPE-r~04qiza5iTeM}YX66p+MlptAN(auf?An) zs%>46+vBkcFQL{WkS0{u?z_s`QmsZ6+4O&6VVSU3TV$hrI-6JQP=LWI?A0V2iNxXr zvZfF+Y^n@6Xs$9w?GPX>7t>`Lu1kLIWDm+s6OQcuR%&k23=`m&N?snOsR2pkN-8m%Y z^wpuWNqI5;IVi`Ii=R(}$wg^MH1vw!;EQp2F**JDVlpm&9$%D`ZVQDt_uEWRQLymh zA2pf}w-og)6k{B+7Q9MLi?T-;0o$)GHNMJthIBk)pHraCepk zC1}JXXc{(|QXg3v8Tew;C1ttfujp!^?US}R=i8n4m?2`hkG3D8?*GOnL~Mw4ywYWA zeObfPLqWaO)NphQ=X$gD6i354`xQ_$)v=!Hv#!}rx}+gMI6Z8gk(^`;v1GAn(%}=( zQeBwiU&WiMK3Xb1StA4m@k4&-G=$wy*JnOuFR_O>e8@iA16C-fB zwm7~IPCo#?q#+|27(Labap|$pHS|SxS6d8hy~bBENv3@n4rCP@PAu4J_GA`p+uAjq z)sGrQ>$N$U&+zmd>MDi>c{7v%R<}vDU{WRs5Ec$zLDHdOg!Y-~=cIZ4tPNtr4b`;%@#_~`Q zWKYp*;Wj!UM_#5-A0fK~HtbiT#&a?wmr%@gV@sSZyGN*JL9vk~2sYy zJCDt^%nJp2joOxhEwpG4y>UUTx+_x3z#igiT4AG0Vo*=gxM$fxN$Uhy)`)BuW!@Uv zM9ZbK5&9p6-&%c1(qtsLcj`nGN+kZ&61!I7HE$xy$@t>uU{d10^xf6t-3t=bl47Ez zvvU#W2^wEg)PdFd6a)cpYUm~tlZuS0ImJ4N4fk|&%6;NAxfzHnobpK(>G%n|+SWmE z2UbXKJg(6YD8h0nU--$AlP}(E$&B}Oei;gsz+(t(4qxMRD9#9?XH+nj42){&(eW>P zi1=vL0r~Fzj{vmpjkEUPRpjM4ylWS(8b>y8b8TSo_}i=v*5bFXkXpaA3hDnlRpX23 zX0dL(OKR~)q~~5n5NgwrU#rr4c;vWGYNtwU^f(GWbYT$PO_2YT)8&^vc-%!?$YZR( zMi1HJlb#Z&jo$Ii3gaJ&mz7=u&&Azp@e&|Y6l>W0$Qe66gORF%Xx~v8fs9{u9Xo#0 z)E=80%<+IOmGucW#4L>c?ITL8LV+AHxf0nrs60>SG3KKR#_7mm3KH`5=Q7WH>>+=YmFjhS+EIv5OLc+|7VZCW$gFpCjT-W;}Mov zd_?h?Ok=5-?-f`J$4IEPf(yfOPud@rxky2 z3%s9Bp5^0fiCJgnFJNU80PtNdTFk{I2j()|G%=Z55QwK=cc|TY^2qLi&E{HI<0B7m zR8=%zW?d*iaFnU&@GzgTio2Yjm~2m^SLMsHvU$m6gz@UtF7M}~=sgW<;Bv9>e$g0+ zN&u(^a3&#OT`SI_RU=|bQ{w1B;XBdVrVhwEK+P0t=_y)hi8tA>l8sYQdU~3WxN8RS zol;704&sYxKv58^(h=n}HsU~j0zFGvW3sX!Nn#e!LFxuj2SzWgpLKc*%yEAW7>F7b)P=7;3vsuG zUUb+6&`8 z6M9^i2ilvjhZ&gG$s9dgi~8%0*bUO#R!HK^xYE79%R|w9lo!USc6)>xIdbUBCFv-X=APZu zz5``0iQ15ROA;c<8l}=08w8x08t-y8iAjgT_nMU5=l>n$w-pv}1=p8FdTzU{#0{*& z0oE@hdY~CnkY7jy!HpKuYN{|^?PHFpcUjjeq^}y8P9E0j9rRs{b@hna0-)=bbMzwB zq%!Q_tYKk@?OgQGS;o}%)w)=(udbsPY!lu2-gi;>je6v-Tn{K8b~^XV`(;14Uv36; z5ic@i*bRd216uJgl8aUo6gQ~Qs!_Y3UYnrj>*XaAr*w|G^>BTmUCffxgwp^M$E9y# zRsd!IqAQdJ9NI+U?Aml=x^$4maTx61J10iK5fQGJMS_i zoum8X<4yi5kz_3j3Ymm@Q5t!k!yNXY*DaI#(UbAXx+vsv*|2n8`BcSe;ltZ`b-w|i z)peh$CLB)C_M509O-EuKgxl)Q2X5^~a-I8j((yQzjZ_)m!&hWMwL>03R|;q4{$7Jp ztqgQyw9yZO@P`lQRW;ju^k|%q$^oY#9^}Q@qsNaX=}8e6*N>zsW^cY{gXyiZ?TW(H zu(D`Bn82e2`}65M!^riLSltyg0qa~1 z>7kYRI>dH7(WGQkM_Bej<1~wdI68^K)9fS|MdN5=ZLJrrudTUag6!-KY8vm-zb2n5hM_;b{y^wpGi8@h=%;ef8DzO%cIFWXEhEF!UY z@#cCm(oLedKHnAA6r4p9yvK#%$=miYK{F!Fk-p(3b z?CB=fn|9@`k$+oFKFtr4k~7hxfAC7s zKP85-+0w$aSD};J3b<7rj-@_Ee*PKWvL&1wX7F-ONj+b}R*S|kMRJC5Q3@;kDOKV- z?MZ-cd_Yo#jwWlwoMG3oN~M>=6fZ_5SCE+YI zY6Di_fX$%w${+|1C=tV+lZwIM={HYWUp>8HyI^bvbxwHgpfcU$nQlzX70vWoJ0G4L zZa;f^BMxEZ{OpVmyu4MH?Cg_L`5-2MMoy>8G`Vsd%+!1|ojfDCt`^?K$R~(Oz9`kS zHsJBhX?9OXDWDVnB{aH@%XIAtH1~uQEo@O;9>D|jBHH2uAREu2s<|JOg91bs5&}C> zz+R!6ASGkt3M6S}OZy~rNw0sW%KvRtS?7sA8_={fVXfiC26D`Gle9ukU5kYS4{hmG zcsLHct}?KL#QPC+7MOj;@J>5#WjXnm0~SLSVqMHARTsfqJ}&jtc3&{ia>UI&T;JrP zvSm9vqqoAbLf%kl{{RX1d2%v86DL0Ok5)0x5w&ztp%ZAMP#A<^=OtaUbYMF8#6}kf zWH7>B`Nk`mwoZ6|97(>>&}0j$y&h%VvmXVrA6h-0lci!ypJ^d-$Fs2>06EZ>?l5>1 zK!?6@^qngM#9hO0K4*Tr}~UGf@sBGaJuIf2)jbn~CoNy8MU3Dqt`-gUkW%&+-ge zz=S#G`*ehDsUUTPgLpD2DSKXboQ!e~RfnF^MLMPP7N-=)Qp}E!u5j7LMOs}e{sWT= zB3zf?5bCk|kcxx|1T)3HM|^BOHgfNgqA}wX>Ex=uU7S5*cOFyg2PIW(Ja$tnqe)b4 zQr%D)Ni*9e|y0rHP%wbS zFHnZ~a4T5%zP3#u>QTs~FlEyP20BVp^o-I7uh>WW9u;|6_AwLyY;t6N{7Hy-F$L?4 zaVwJVa@tjdtIvy@S${Tf@#~hgnCd09&yY;Cm#>KB31yB$t3+} z5>P!%?lwWef`eD;A(hu9TH^}Rk2W`saiIc!Hb^r6tXzz8b7S-v|@{O=dJp0fEHqZVv5eht>Y$W?zwdv7gbJ_>T0QJKxg+ z&WadeVHy{RS&hVjZzz3k>>>T?ulJ7lw?ER>P)xtSLXIOT;w2vN+Bj8v_ZAW*rLUqzINP7)ncG&ZzM2fz`+s-SM z^^ykx)DHyI(r6IN#Vb-9ECmGlrboQ)X74A3*FFdL!N zMHdaTyZd{uc8AaRUc7*zeXUyCdl78E`g^eR`uT3K^ZoX#?{*KOVE1pkuY&*k!@(gu zfBACv)!{+#`fc!RfBV&62?`W>wtM*FE|fa_em8iv`_myk2T;%TIPlHR_Wpiw_&Rv; z!>gTO@72K`wDRNI?Kf|B-$q7%USd?+%5j_-G=I?$C`?`bYyJ44?trCxYu%FlJFS14_3yFJ1@AUnGg}NE(6-IC?XjzD zuu!Y-1OhC@+VMIVr(;sL!7e62QuBEs8xyANbHnk{hYY%nZns&A`8Ve~XV0O92}~E( z(uk~n!d{bwIQ_)2dD#?G4{b18TORsZa%b5xHvGWB4IMle0KkA9$WFYNRn!tZ(b7;0 zC|%Mo<>05?(o+VYRxJ6hkUT*;Y2Zn+7HGdLlZ?{a$-#k-1|lp#9pwVjd17*|r*cxT zC)F%3QAb3=>9RI;I0R<582OEQ-99Oa7%5v=FhLVnX4!=fltpmrgVyui7u!GV9}a)~e(!L12z>hO0irs1 zm%Xdr6;cRfkdwSjm_JsM7g>%RT;eaNz)wf4+o?Goh!oHHociN=3JZP)Rd>#zLm{QT zw;j-J%gxu&XpxSS(o&XPX)p|6g=@rnt(D0ohki!^DXTak9V=gKAT2)M_I+J^GQzgr zWoPGU@bkq4qdZDXD|kiMW63H0f%o_aiY)Vzt}}s?H)MtWL#l_AD>6OH($jPlXAbLb zWCL!Q2bk%~y-xgugKfL$v%BXfLTiFs2rSJI6Z;eZep3E`N0rdY4r;ZF$>Mn>adP!} zDYxDr?o8$+Xv2X?tjZ<=7EQEr6>qD!O+?X}_5_wRPR+uRPdaW_`VR?1x;*-*p76!l zWj*PmG*v4TP$F{L2c*7D$TZzBps$V2Y{fs)}oqQI){MAd`c%~Dw5%QOS!PIFZWxQ%Au+Gt-cZ!GE zL@S&vm5E6tcnoENipQ6f-;m`#3L5G(3o^pAJafDm~y>=3uTQ~;*!_*n&^#JWXci_8cvf^X*u&EJxj^l zjUbB5`>`>=QG7B(O^UV?Z)P?F3bFy;&|AZGU|?8(t#>1_6LMo$S^x#ugY~tIFL8I$ zUOJt>x`LWOeR=l=JgvN3Y=rJcebs~fweF7o>d1^={WVx$TMNGaa_z6d##djz?5tph z{?+=%T7=c2;Onoxdi*u~-T3-XUq1fo%dfsRcGKNo=ILcTL26Q&D|SBMy_aBwLdTN~ z&5z+p%hVg#{Dg?K7R_je>kT_LFxQw>z}c_eE!>L1iN$RW?=pR>xUzQl?o|#_5cFL) zL^;F)2$QRn;_B2E3e@&6VUfai*{dDzA_`G!-Yen>uHIvSub1%|6rixAx0BtC^=~H< zdA6e^JR^wAu1a?C<7T+FzVUc481#Y=ldu5dg0)_R+eVgbuG3BPrkkzQ<~D?&j!D!YD-?f(>(Rd-X6$x!nBM#JPMUt~(Y2i52lX+zzKsF?;t+xV$7-abB_2KR& zleJE07CgX}`Jl0>x%;XFe)+bBMsUzAO8ZD9K>8`^ed0_B=rO8?(vjL8BhJ`C8QqK- zWGadzP%tARp)hl>u3!}D3{7k&F~*=rQx;=CSMf?}Xn)V=)C0hOjuYm{UbR(wd~#AG zmnlU_K}~7=-mn@K*4@EM9c1YlcfjEG4l(GWeJiji8$=CRD?7Y-qP{&{Es<7z%2eB5 zqh0IN*{*NY$Ib=-`*?a62y~A1nD`qD zA7&GtU2&*RdIF{{;*SMn=VqqLQODPGV?{NaG=6z|zsk03O3tz^KRC?{AC9G4ah=>? zmJ}q|b65s8!$VKb>w0Il4t;XYl)wuL>>Km$`!wTdEI5Hk-^z)ZcC)qqW9@S+lZ-n( zo^DUGutbB<2oC_g8*76)r9?LB4L?vnFikt3KrkE}Jh;M$Fy>731I+onWpDeUjXp{A z7{};tf_-CEk0}<6J-(3^zTsjWx=1Z3QyVlAx^ zX?;$g+nJzSM&~PZg5^Xt770^! zBMQIGQVx2lHqD9_js33LxR1xuy`WC5s;U61nT+`+Im@qTKoLjOV=}!fp7EKWc6~#> zJYH|RK5Dz*!4yu0u_vF0!&4`jlUExoSw$(0pY^UILgMl?3XbmVmJ$HwU~);P*8Ftq zq)V3ec%XTWO(r)_?B7rQnIW-q!t0P29|FP?%FPq}*Q&I50v>++40s-*>-Hy^mmSOr zOta#f6lYFwCSuBKp1{@&Ga%cOHa@<^%+!EanIqa2EE{LCc!<#q7y$l|QS|5?7mjJ+ zQ;QvvE1c3Tnkcw&H+VHtkuo3QwW!(~Myl4GHhKGis%# z1@JVkpj8wZK~~`N5eqtGkw-XrfkkRR4@!BE&-8YhPNy)RFrAa@Z#gaw3P24gyPoF% zt(PgNgBYd~A=bR>@E03cMDA1DqviL;8r~}i?zcMRYoZ*<5mHGdc((@>74FrDv8U+% z-Evd8MYh+b&Ua~t@1g`|4Xnv$1VI?C9M=L+BbpNTRn!Q*CQS686(xEbt1APC3^C)Y z(E`!2=3s2$-bQ!C6EZnPxY{cW!V!n$h|m(q6*p&G;i2UPk@cifYgBSt3u;tU7!c(K z=X16J6{2Jo|Bo?ySZ*)0S%=z#0eudSZ#{3z8H6tC0ZtjH&|5~xL<%gAE-gsLNt-;_lA`F{G!M-IpPRRQ2W7VyAC2{~m|z(r5$~BRJla-OGM$lj z9~Kjny$em^DAorA0}_p}rCOnC)i+hud68e)84M1ML$kgd$Z|P*!nwMlq)t?`K8M@u z?B>P-i4lP)1ck)MUbGtwngWhxA9R{6rM)4V+w9>jB+hm3<{M|5_ zVH^3nfI|URO~*h5Kgcxdlz+y}sAsvi+ll)P_010w>v%q$;+jrGe-^qUZm+%o0d)~F zpt8AROOM!%QvFiSTKUL|StP2<<+G#ijoY!u%ZpWq?%X$U&;)E-XF0I1bb^8UKH3#G zpoK|7r=KL#dSnOPJcrnaCv^>6gA*kO?djHw#@%m@RwPUqX(3+YN_L|@|}2e-qy@grF>vJ)T!(F zEfqS4&7XR~J&x=WLhZRD(#xG2eo+3Xjnwr<{Q?kk^?`y=5kI6FBfg+ zt)ezhGHt(NETFpc+*D-Kj0;P6WNneSP^hz6sf8(%jYOtZf`86T-ux^!fT9u`D*8Q? z+nwV}FxZQp%@~2c7I&EM6H6jCzgke?n{5Uqo@N^h-rYZ2wNX$dyC!e<4FQ=dERXZX>3T4PH? z8baNXr5cuf&JW8kY;E|3E%o_yJ05;K-ncES>DCM7lPr?kE|A}3aeR`6@jtUD7Ay$= zVPwh4BN?l+NB?Oj(%7z}IIVJ=SYP!xvEEME`fTA4k^i8ni8VP4Vi~}u%kF57_Ttff@i#ohfDA^zU+#P zF@<(#BSX4sNde&~wc67>u-b@UvAgN;hwKD(O39ed^tRu)8ohQXB;2@u09erp!Kw!h zJO}CyRT<|ew-z=mQ6-CyAo?O{$ScN}2o~wVp4<$$f{Fjhtgk1ay9>XiOE<)S*&2VX6Eq3dx?U^~Ot z#W*RFF(z4U**k=QUZkga8|^48S@Z*qrT_Gz{39qvV;fB;jlTO!u0&t>xdV+U_^Z;H z?zuy2zH%6)15QfZaPX86xnMWvZqM==CX@)(t&qRFiwU`g)2b#b|p zMGSqiWwNlr|J94>UY&S}=@yST;?0d}`68KdN@MmmChP1Ii4t?c2B8HdffvX1OY@Rc z?r+edxQMG^y)c4%wJQ^hl1&*-uEk4X{Dv!py>E3fy2w>-PXIotc(M1$j2E5BQ5)%L zZwTTU25@`34}aBM+9fdb2%eRW)}mnTxW){%EjHtrS3o0Ua;@ye#YWe{2$`2_zh-^) z9rP94tAuQz866k}&MZYLPD~P=13Ht*rQD!bfMvX4&rdNRm%7eX>9=CC)2I<&i@YqC zf4Zxl@AnR);N{){25>>Y-TDnDYQq~KZ!;!Xqfvv132(OhX>%r9#MTAX>IxegS9@rSE z%JK%Cfl~Cs9glHOndZE`Vw_*YqhgYur6b$i>aE&Av zL?PRVB0sGXQeaNe%>|EgTYQ5|3qTO5TGY zP#HnLA3>FL99JC8V~mzfFZKA*R4Jzr`WDEO9JT_gSLeve#u`nU>6A9EtRFxbfEy4j zTqBl#;7%kwGTd}vR&RRnh?2c&Gf%x8%!>Rn9lKUv0bA5EIGPxYhNB%$h#0utZxJvB zi%FHuGWnonERZK0F86Pw!MbM2bpMWRK(@E%*#nqYF~bqE8O-e^h(Vz zEU57*%Jn=iL@s)2+LvvMsd*4I=C@Ix2ETBEEQW1e03dqos?Mh2bZTK)uYn&KG&sx$ z$h+l2XTj#yka=Al@M?GMw`!qQvAARCEx`*56TZimV4w+*qqLH9bIHLxU`I#)Q)D1{ z(*@PwPcQ{JDuWp#%mj)YqYF!RFiyfm4qdiOl7(cq1$A;R*$vi8@NEv87vQD1E`EvE!@@S7YPN8cLN3-f{ zZ!YN*g^@rVa>UC2k`mBsfswa(4#q+GWw1Xj-9e}Z8d|UEtA?#b30%HSvYE#3RY0TR z%k7_rd#?^bv;ZVc;@L83=Kyz)1}CJI;dnlwQ*E#dYgIWyanKAEi=zhVL_?F*XHI|w zw(yjH(V_Byz0Chs_`w^?rZ% zXcH5awNjd)c=Zn+FUw#EoE`C1! z(;vT?T>M;~j=%ZSA3JtsN#aZ(+>AYx!ip$|5Ev!oe`BWl?hTCPAV9p<*Vsrm=sw_? zco=m5(R~mCygohfDQlZ`xG(5+?Aw%^kx3mat$-W5#y{}m0peHM{^K8>^6Ddv`d_** zmX+duFDrFRp!&neSbV&`yFhT)o&K(SJ!eVO_UtWN{&Jr*-mce7a$~=R7n!?_8)fVQ zZb-FNBrwJ7thSpHis3G|W&6u108fm~=~iat+H;~F@rtgJn0j>IbOZ2ISN8wbeWmP_ zO{ll=s??o^FAqIeGYjsSB*W@Hx_2O)1(ps9z3u6D@N z^a$yWljMwfvcj0vhg)1a3j8cUwhM7FCRYHoLbsMcX(OHg$ED?328Oa(i6V_(5MHFx zt1yie2QNS+R4qQ-+>rbz@#bpL6>~C^T%=>h2|pp}ZWJUJZ zF6;mBkU(N3^BqIK##B&8&eIVA5rGnqA0*z<2&6aT(vmJK12g=Y0aBsO+ffzlfCr41 z3j|gbyi*vptFa10Bl4yDdSPH1i5WAf(rS`4EcktLF938$)}aVtJgh5PBdAD01=2Vz zQQ3%!ylFg6g0o3pr1>09EA#1;O`qrntejIQ$LqYf7+Asc-*|)Pzk>GmN(v?%L z6qhIUE=pRJv*;p98hfHMp z#w_xb!s&y3vC_^dZQGjL0QuXj0QgSZq=6at?g&4M!kkUTsO6y3O^qo;o3k||T_C^{ z6pH*QV>_L}&v}}0G&hv{qv7cU8DADcMav@S_nkaY#=>ziI=_WJYe6W$i~^Hks?9}v zd`b66r`JluAJbiz+KyyzCk>IYpv{cgeBtL_2!1lv6(MAq?&=m>+C4J6nWYtFzJ`8b zC+^8dHW-`gIIDzm#lOhk4DhZ#OMV;s>(9)1vu(r_wHGsC) z@|&Qnv_mR@1B+5Rm{kS^pDfrbD8q;Ty`RKm^Y?c-9DVjUdfzVE$`^Qvc)dzinJ%`1 zVN05&I`qZfuooYFXs zlLI`e##LU3Utud}`7X&4DyWQiFd!Df4C3aEA+rZVXHF5YOVyUKbQkaoW)swg!z60k zFut!Qi3iJ-Murb{|7d_~jM=zrZbp}mBssI{wBlOZl+EOvfCiats9K*YLDq3w$|Azru zbq8>S0o&R5=4OB)gHt0yI3;bhIART4f>4(nVjfEFe~=8LHzn?jvTkm(9iJ5m zdE}UfOz3ha!W>EN!!Ml6lJf+1WxQzl9=}9belm6oiI@2~7a{L*Zq>Thr`O95hgL&u zJ3x<+j3fMq-r$!nTB+JT6!3&blzh77*uzuaF!gHYI}H_eSdF22-qWB3tBJ> zCK7|4;!z%M<8kmPFqg=2?X=IUsQ6UNi2SwCdyXGboCU(Nk=a2Z!HgyOI~DxKRKVkY z*bJ#TEaxZo)Zb#}`+DZ1CjXQ>VhTZpK|z0??f;oI4?hM&iUe^0vw%mdHZIU0h1+m} z{_kAiKb|gl+Tk;g9vDm@MqL2qqpx%5L4n6sZaq`QK?NQL#vk+`*sWc9 z$qj_k{7n;;CopAgLmX`Mbrf_3vYO8@?^p?kp9vc^?|k?$O|u9jTi{6=0-Ns^$=Mu> z89u~#_ku7Cb%pMNh_?U|(R+gjw$!@S?aPoJgjqz+<2R@dsh@G)*xCfzoownZ70v)1 z`yc*0DRNGXdlTa0Uc<*fEYKGUIzoX-6O^H|Kv8j7&%%urYrgI$C6mtFeiaufO2VHCX?sDkN?)?%@x$sX^OhUms&^Ygxc|1XG&+eE;X{UK}u&`V#B5JP2I}Cmey8|p_t=Dl89U86q zLIh#Hah2_dE=;|y_9&h{UAD{x3av<3qfN;Db)WU>^3`uaZgNKhz5cE{_+Ky%u|M?n z-o)c=2LWL5M0A9(j~^J_>D{iSHjY6ptO&;+b$SI9)#$lJr&@;HI2gbm=PYO(2%2gE zD-xre9k`GUB`@xNp8T~8T>?({rfuq4GXGlB*|+mnehgkke0uf4_|D!8#} z(mb;j7u!do5n3uyExHf7H-_$sDb6$s}=B`vGwSZQdC&rUR$* z=D;RNe3{f)7nhCiIY(OK(P6?y@|=h9U1<<11WIj9h|!PK$|~i?r3UFDrCSCnwXk>> z4eF>%89Ibu^r9SdA4{TaHY|nTCx*`!xgBZi(`i1Q<3;1ioYSVBBxE?uHjQNtWK|EK zU!s{gsYg}h!-a|8?Yx!E1f=b$dFxt~&r;dRBeKf&Id~0xzDUP131X^dPQb`cj=4gQ zZ8sMxQ>WR)c(^u1y-1#O<3E~ZR~x+*6lfXM)gxA;)wgDxd>#dqoe$(sbW^ewZ;Y3l zLW+tC+$b2P&8}#y#b{S5I+3bKDyo4fhdv!CDp5*7JF+3W7^wakYhfW-wR$17V3d8{ z!(b)hPZBxkH7;w+w! zqM1(=bX3PXmqV$_9IG7+Z)1vybpUJiO`5qMx#q=C)(MMrGKqf<9zD?Ad+;cjlovmb zyFDFc35&Q0jH#1t~S&UZTnfbkgyqiL=?z1$YE4>L;?ggKIFisg zH8aqKr@5=K+y8-{lty-pnssCAcHFv7d@>5wHy#J?um2hR>6_tI{acVZ# zDKGWrSH3Pb8~!6S{HN7M11MZ^H0$e#BUe*#tMNc>XF%(ZR~ym#SJ?R1AJzC*jmE#W z$nLN{u9fHcRmQIRF$EJH&qr*-XbRlSe^kuRelP+FGM_q+F|2|WfmOvH6UQ>raF{#H z%>W%XSg@67?v{_1<*~Z+;c9$i2yu~g&|yBGAQ_htsRVWE!yDbGsvIF>k5QS@$Ome+qzfVpl^6#UdT>6U##tY&9EoX@qCh-<4fNElaR_`g0w@i9Q6M+nN6qAu zxJ)^|EJjc+Q2K%OLtIVCLXk-tbu-kDQNbbl$-Rqa4Y{v5Z#p?ftp(DfB(*{3$IWp2 z+0OI9U;q=;w(rCI;1=Tzn&rwdt^5C?4SnJM9IPOnsXcqOGvaUvf~r@cX)0?F$Bq^} znJuiwvAaq$(GkfAbzrb&RW~x3|IiEt-a_N>(yP362M8->bn%u`BVo!)mQ84Vi8h3y znwtGUeWM9N(kJM1pZa}>{35Wn*63goF1K#?!0yErW;S=gL`PSNS1%KFrEd~0;3(fZ;-DVr@u#%EsIXW4QpCU>q}v7+tz{D2O3!+^?07i>XT%WpXj+c*ZpJ zwqtdR27tV<%%i;h8ZRb`ic0B))mdM&&dW=-mIg~^$*IO)&mbNTe>RBI7M5BWw||v8 z;-ZZqN-j3f4iSR}ahDEVYi0IU_g*)mqyo?9)0w;@b%9(M$|KAe36c-NT@puRnXG|f zLW-1~t&DYnfwSSLgY%!nCV63*sD@Ujxnj$V!fXkAZdUh z9c0jqVWQV7-gML2BU)2Eyvx$U!>|F5gG(gNz6}EI*01;oi5`3wGu5>tB82MW3@V(+c_+j9RrC7Y54+w=upW zcyjE{(=sYqxeJBz*)j}1GCt#flY)r^^n#Y_Zprd zwXe7KwRQ*edT*>+Xu;T`a7#19KJ7iqk~2KP6a)ZuU?;;<2RBuX_TzFEV-yN8F{vA& z4Kxy6ygHsv(u;%+e7NkJhbzTO!=j@S&2zYA!#00qHHNs)GdX)RpakClApO994V9&j*CjiBm_VOGjo zS$?jM&Xru#_weYV`+y~}nlCW3Dzqq;F-m%A=E(!v4%AmcA{uw!WnB(ctPQtd5|6#e zckzcGf3gk)jcG(EAWT?bBN6`N8IBf68k&P@xu!q{qR_>#26)&A@xZgCPCY)i=z8|m zH#IY+wBRoB+a|g{jVs{ETR|s$v3DWc;=rkcheMBYEXNyO) zffBl#nk56y8`qYJ-l%|Cj(`>>s#4YKulG1h68uZUxt)8q1DnAv1!&aj@IHb;5mA*i zOIDxF_L;*M;fl)ZVOmNGr za|+>qJSNVgNcEay$pW~XUSz!e8jM&y;TP;#XsTDtujeb zOiQ$G==_k;m`IaHW9~FAxzP)&85f@z`#2XXji!MjU;f!?szRr_(HH(<(WVl({8Mzu z6NEPPG3C5vTcg;x_qHtO`CpHYNj1|wnZ)OA;#q#CbJo(&<6G1{&GU~0(Os0{wu6;A z<^VC*J%+~b1FE%eh~h30nI`Rj*nt8Q;CL#K@W6#|kzA8anr2HOM-HQhCvY&iP=`$1 zJ2*=~WhC4YSz62sxY55dOp04qcR@W}zNjLGe$e#CHMOtws5z7qR76P{6U zp=|)wrHDbabkWDeZpMmBEn9uPQWyJrW|&x7&RycihoPW($mE-)Q{sxTM`wvm^XfjH z5{!iw<#4Ey@A?^6w{ySjbc6eb;S%H1oranN)x<1OWW`L%nG=Wc`M6pu)5j9`f;UM) zNqQ*V_8f=3$p_m4#0k9FIZLWi`Gds4gGpXJP<7K&;|wh4e60Wy)+5uSRpcB!$|d@%S3AaYnAA$KNQFW86!%3w6@dPEUM?YvWy|%h~zRO;5WNa+SVrXXDq| zu`>8Qkb`@;?``Og387=0SaZh52P;4awWmC-j@$lH` zJKt}=J%B~4a9lp@4F6BZHdbntFruI)ge{H;s%F7s&&eW)bZmhLf=U<-wk5EqQD93U zcHkY`|Bpo*8TW4}+IYnl-|q77mRGDYissO>S-x7-q#pWaOuh5ah02Dtfb!}e&BE-z zXqGOMDy$zgEv4@)idZ9Q>cm4sR-v4|4Ur)@R{hsWEr7(rPS>F#lqm0LMU+CJU8rvp<|7UYfEyZRDMX_vPE;ro3tp^lS_%_o zPG#y?DV-UIBoQdu5rn~*$Id8t_4=?;n1esy&A0Z`^~ip;3#*HQ&d$r{ot`7jji%!O zo(DVA@%mavd-}s8^z%3V7%~BW3wQFYDln4(XK>-JkV4!e-Ss|NCFBgJp&9pVh^A}U zz2FU}0ZtU@vCdvjhK9i@Ekq`M>C7T2OeuLWs&+>S9cJxY%O0OMg$Ex{Qld;_78aQbFx+%z0ir|wBX;qjoo{wn7-Zl zb&cdG!I3_k>1+UOFU`Gi z%*LnYguAAhE0oQ3WDu+{)s}i~!!Ke}cOlOu7YLf?j95qMN^Qm9TViZ9k z?9g!9e2uEcVibHqwBBN-Ru5ZQm^r;}F>_2$S>0}M=BGBAS{lR;nOoSeTdW>=s@%zY z7_9qrQOaJKWK6Mo3y(B{iTqI5K6cZV8P$(!4tKnqs;r6z%fzZaeqPs6lCySrGYRP9 z4UK+Wc7dzulSC*eU6Rm4u`tl3T!hE^s=rKhw)y80wS?U#cmaxZNRl7vd$>NuCBaKf z_wo?rAAQ5=1;N+A`S{wrq6{&np#*Q%EG?#KmrKw_gV=F#@-y3tcLnPn<9{mNb za+6-HNKclay#Jvr;_QsWG)c3TC8`7kvuHsd@2rvvNp5VYGLleX)KKjpL}#96LR9~H zQO8qu??lFcXG98dmeXaRYPYF?9VyM6)`?OYRja=s*Nw;6fllvc5WG#M37rNdV<$tN ztC-m8bS8!b^)$(0218%LWabjFg59Bwv+ki2pn>fLxYyVZkVre*+uQ0svoqc<5`0Ke z$gU-ri5TLI6O@qTpl48DcN^77WBjMUf08b*-)`9*C?2K|rH)Z9n)rHMYXC^y)X<2T z(O+nBl)-s2nc?giM4}^KAS#W6>;4Ch{di+M!7KS2w}kufJbCXeSN`cFt6P zvL(r&dJP-S_4Fj4Ue~UX>foeSCMv4m$36K>}RO#ZPKz>v0u;&~o&-1e4Fao5l zFbr=bRfFmly^>YbH=Ga^0K4_burGn)EeHS>hzWg3n4KU!DQ`enjvN{$BHEmhxf0tG zP1EbR%Qrqw;ddyR@`eQzuo@ zd*xOq>a3!d#$Td3*1Muu*??5AwN9tqt+j|57JiA9QhH0`J6O%O=(B%ZYK>z;ac{j< zAJITWIja$FM!4$h*Jy^J^uQ*(W=2arR*&?q-}#%XU$4*{Yok>MUxSd21|8~mTRCOM zp?=$#sypDbHPLUSG5vc{S!q!JULh=_+m2^Yt?iftYbr4g^erywFyMr?*34~-QmU)i zZ%gaSQVH5-DnVC-Pk_O8O*;Q6t*KrQ8$mYMmx9FVQuOdESdQ;_dY)!%&;?(bS^*q| z4~_6jYQ^uDBVCsszTEz4xcBPNX^5qYWld2jUja1&Dd5*tS&=ZU0=GBKTB;e+%m%Fo z)puvmUHH$s{4tl?Ll3c1I%ni=TkG^4Io#HoL~=zgx3%VpO7ElkEl-PW0qToH-$-|k z?w7|8QKvRcO4v@}*ngJ1e~Y^}8(=h{IxLJr=4p+TU9v5`Y@-+VOYFx3?8m!ywTJx) zi)6rk_BFjMe7pWE8n=bxUep-5SLNbG@g0V@`h@%&#;T}JQ~nAAFFNl|IuEU<59yg* z)$g_~)euZFKv7kPRjr$F=fiQ8T?myU+e z(LC>L0j55z6ci72R9X6i-Wl4p!C8^dXQ8WOhQ8WY@xgJE_cd<4KY9#aJv!+%w@k(6 za?Lu@{76d!<|0_2eK&S6PbpyLq5O*K9vE$MG)Pj-t6G$x(6Xfz;cn!S3+r*#&#Uty zzp7ot8ygsMXsFhgF+4FhSvR1D3(9sURkUsiN7#QJkRI@@hO}avZM+9fLTF%5*X(xb zA(~{GZPOtYjXj>M*jeAjK}(OVKHFtJ`64hEsYgY>S|sxJaK_EE62oZ5FK!#6iuK)` z$Wr2r*S-#RO%5&&xY;fbP{8xefD$@-Prq!rC{ZIh+WZnEoWWq=31G1xR)nhViER-2 z4pU#aEQFqVZ=FmWfPC=dW_Z7h?#tDtHFD2h-*|6t+>K3ffso?%fjY3bc@G7epv)^2 zk}~W&lw#2(ic%S}?p)Nk9OJyHC|+=rB4?~rGNyTy%oLjt{XQ`Ue14Xt|E%+4q#3F! ztKiLbb&i=H5=p)%4el8hw+K3UU*}I_`yARSON#eMU1Rn4&WG^NZ=O)@3e19V(~BhH zqom{vW@1)K$vC+!hQ}5}a>=#G77-(EWphk+!NMVTk>@ zTo=1`oy5h{cjFIV-t_wTdkUjEhX?P*f940{_*#CN`mB4+$YKdvE&c8<3D|9z}gn?7}xMD5^YO{IN~gN6<{1g_Y) zQK~*FukNs@)(xp8YY!;SzhU&FcN3gq(oGHw(@)DmaFDQRvJfy9zY!YdXwax3noZ(N zC(y;xtY@@x)^Q9N?8d-Og+N;aVcerfv$(w(Tu7m#J+77rzf#h}v{v#GqmJF$M{Kcw zm`6jQ(q(Nm^9kxQggi_mfPY;mw>b8g4MqlNUnC#r3}#mKo|ejjvJ~Jf0eeY2zIh(Z zD{Ztw0`48|6yRQ>`s~O1>fr|PBZ&-5%~T78QS$?P4ZE~fM4Hbtz07+LqTz2 zUz`Mo49xcn^=wToB8`l)RFbenUdTI2~2ydyubOV;uW5ZjZt}79q30Kv~D9s{zN$0;)np9w4>7rTt|dpwcOlnIEC z6rM#lLdM||t6mE6C@~27Im*um|Fz#OLCR{W)afnmOdZ(2ADra*B#ARKQ2y0-1*RbS7G=M{F31pGLfLb z8JKx~VwG-Ur1k9d3+~U>>h5;TV-5!!{G}X}a7 z=o<}^@{wcS;Y?%_=&r7=?yjz`u46p>dDJjDG;YP?^nK6M)b({Ew#I0$aeG^BUPJJr zaeZy#5i%mTw;oi=e~f)-gouS$hkK3CLjbP0CJ~rpg`r$_upD{CxYVh}F7I|56>yEy z)7k=}v&)K@C@G8tLaN?U`vf(UW61=Cb%LUqFjkP zzB)cQI$CUIb9{yw$>%j$@HZ7*Cdf?$6>9TV83F;VbN!EFNmtRHEw`n7+1T|q;G7# zhNd1s#Z$WLaA;+9cqgmr@zT%Q^aSWNo;mJ^%;)hO%{Hxm616( zF%Cbaa)}lGU3PsGhx~7HGQ)mHOh-VTpHdIE?;ly)c{+6d*RksNHlU z727y8@82u!_N!F2_M(~?WFM$3T~ATEwvzM%6{Hrj)k(9yhP0v`{nys)Er~p(#RcSo zOH_c!0qs23znvH+35M}5RG7?9dieiqMnRhEf+fK_TMOBg^*(!H{ z6xZM9Fh(NthUYwAElv3(PAH!QqN)b4PCTl)y1y)YlVk=xy{_l*1!@w4odEw?vdvJw z5GpoZQEbG;Mk|UHT&$=ocI$tPo6u!B&gSuDIiT%+D!SPQnoP>bM|{<+9Cnokg+T=j zt8&4GpX$JA{g8LyO#WYQQo+2sT=b**Z6z+kle68&?M3KT)~4Jm@lnFhH5L%1|dlVX1>PAc-vl{XfZDmt(FJ`MV4i&E$$f zCMO8L1%Fc+!Kt~vFED0Rb=`@}ibpPklWw{Havr%$J=&C`EP9A0Et#};*kYt9T+G${ zJdry6J9zjg{_ig~;_c4E zaEb1-fz{A$lWXEPu8iNHKK=tB8tdpRp_js?%IiYq3-_fuzA9iyd6CWZj$9)RN(A7w z{Q9eT&=_M_^`oIplq9Wxd((XSQ-Xa0h-@@4Zt9w`Sw6|B!3<(3t$VG>`CA#NL;IHX zxn3c%1R99Txfe0mO=HYs+pv9^nYl1?uBfb>AilzTNn++ol|JM1I~bS$F|3{q78v}x zf|sd*lam3pZ$1-eS4jJUOnA|_R4EoD2(*B<0jy~i{Dn3Pb|&ab*-eB|!Tq5|XnQN} z`E^J@s$xrVYJX{Ch}>d=HU+UImX#b?SH}J8Ul~ye&WZ%&0SvpqaTmA+titjgo<>pl z%O{qo#}-wKLLMkkV!;fy7*8UZ&f8LIb1be5u?=M+uRk@1Dio3xi<95l=^4V{{S9CkS`nzCPSHjVZ&Ed5F)C51u&Br}X^jx%0T7$A@p6$0K_D+%A3Vk#2Yg zxGeX8SaTrNG^`PDJnrAvwY3sLQAr@crF)M9vb>giSicOUt9WNqS)wFMK&Fqj(~2Ep z_@DfGoF?y5-B4Y?wn#QjMcZoVy1>nCT#WWS+waOGa_fd1)9I5kqb4c(96hGwF*Ly7@uX2u1YY$v2J){j_o$!r&^i8E@gKzk> z*ZY9QUMr7t=f2O6^TT|+m`ois>m%bQ!*_|W<1?Z&4G0LTXLMZpZ_QX#^Q2GiJ4HIn zVR*|yk<2oc!Ex!~7hq3w4`DU(tB48^=yD$5Sc|_%X%czYzPr{je=*J%y)2}s7{*+6 z|U@TmR*OH+83$VJ$$Y%bM$7s+;3ifu{c8wXBkEsMbF zs2d(?$-^DmwULlgvV%~sUoq6eUfK+7>lKDoB-2H z9w&~pvLmm2;VhrD@p8`yPvZv zao#kk@YnxYMj~igQQg7=yzSwy#WpbRq{Q1T4Gfs`8 z?#1v-7l&c9qQUb_2GP?`JQdJ&-`X9kN|cIu0G&juJCKop0gjGXXe~9##|q*cGKW)0 zE$fMmo;jgwy~RF!jx(eBT${tEnBNA5AH$hY#Qe0=5d|IhfVn}JePne!&kE(D!V%3W z;{s6XXUyYj=!r$%*^HgYIPx`lj(0TGM%PIRzHCBaG;_4{JOb-=b6hjsp zFK%VJxKc&cFDvPR-qnf#{z#l_adQ(O25nTo z>zDIOyxyOSJ_^Rq0cUF#^{3ZS0Ix-S zFf;boinaS8E7#2d`zxxju}PRfY2i4Dv}|Sf&9b zVU5pQvm(cAXL?qHgbRG4a;fN3(c+TBAn3`vlu{^&+2j%FobI^OSwe6IUYjb*rg~@T z6qCo~#W9BVamR#8;bcO)F8Z+~rj3NDO`t3Ac`}W#MKI!!E-WNHa#@HAOPx%Wjbnpt5R`@i;Ot#CEJu zKQwvpsnCo1SA)cLlFXu&q!P2o>#ee^&mK8-Nh}@B zbRI@B&s7_~6XI(9jZTlL$d}DCU2*@)Pnt? z+aZ4&pMiU&G9447sNPG*hRrDxv{^$S)3Qtw3Ld4&1f}I#J&>OyM#ZLkxwC3z*45ph z%{Z9>cbcZ;3ve(UHcF|`qF|E;$WZm4B<^E0Pxx<05lrO6cn}Zml;e1lMFGF~h=rL- z3e2S>^kfN(0C<)VVIp5rN|T(g6-<0gsL?pPNH0>Z!yIc3|`#mi=iBfVz#;D&*K}+{pIq=k=8hLk_F5e(w5Md4>>} z*T41{8hzbCPQB@j>K|tW>onVFt>-oJU%4lh>HLi*y>c#r?=cC+2jj8O0_|1LZ)~`* zlp)*T39b#cx+^$tcI1qNDM1Bp^7k$slAa-&^gp90t38BPO*2C)Kt3wvtm7T zo(?YFq=Q942k@Y4ZT}i~k{gK)5&XcGU5N188vntn^d51obgf>+b@ zRq+GLi$?k|JMMufiNn$rfTJ)QhRs+3ibDJfPt^P541S(kQUnEgOOrAKLE^GNZzqfy zyi;k&Y6DnCr4@K)w_{8W{wgdWi8H;O=d+0Tn>oEb3eEdTaR#Tl`}Z#{@moccLQ4Ut z(AIEWEszVsBcckcX)B4Fdg(cL-9>j*P53Nvb`f>zt~AF+^-AhK_AKpnY&|Tw%rsD6 zsp++A+OL=EGCpAphz&ZR2t8p^1~AnysOA|mn;y4^grQgvZ~_#%OIYX7g-guw2Lk-? z%7Ry;S8d(c*q3 z;e1*IakM2;ilAmovH{^o1Ws87=t*KI=V@Nlg%Owm);-)HQrsy(`mK`+Rm)xgRY0o0 zRNFm_&eu!Tg}^MW@2i#pm-W!wj(O2wUY;z!a-g)oNA{a$2j2lIU!Eo}uppOTSo8hXz1l z5+!qS2#SSBQ=?at0>j6v!>;l06$Zjpi%(&xS2{=WD!dKNCRc>VcvU$e)XVD}f*K<% z;I@h9=c?R}T_Ty?$a!*^o7!@|=#KeTSLapHnOj7%>~TIlLz8Z?IApGq1#Goz%JM(i zvV5(?y`ez>Jp>G>tt$IYyC9eM-6Y391&4ISDFkwUxEVCsXx^})>_ z9=1D=I$s8qA9-28TPWK&je~B3EAV%ywO(-A^)FIi73&M5DteA*J=X}T)2q7*s`ajY zpD&Qugm%Fra=mDE+~+E*m%Vw*nZ0M3y{+baez6Bo+@=i@URMk`J#IOsL}E!Juuc0# zxHV-F7TVfu_@@X{BTP61f{M$^F@XhiZ+DhTFTx#OoBZDyzdFMTTii*dsN<1zd>vZi zn^hwiZP4nH_Cb?eMD`IgD#o)5F!|z2aZGqnp63O+jZ~qDYEmdb$B1oU0k+zJylknQ zgO99T0{95Tsl9PB=?|0O{Z7z&k8wur;yAy1u@V2sck5Lz*^9mFp7WFEEqD`O~KrDP@2Eh-U{a5bG<<-%>DU4HQC> z(cxGq#wXMoiNjQ3O=0-v1B78s3n>)eEEkG5f=k+^2vt;HwDn|pB zAmC=>FM`&-Ej;r-RSDWs_$}tF4TlMb_H*y7Qw)upr*rG|2RiQ4`QNp3Pf`qpS?S&9 zJsRk_^6w+UhaC|<^f17;eIF(ynRj^R^E(Pp|2_tMt@P7gdArL%y^Xe}z%>>lt zc`{3TBDt~v`u2Z+Jb3dgIDGNu5UL-)c>(a@%iH6FH^HBu{q^AcS1*HChsXG@32M2m z1viAN2In&U+M%dr3W129njmL+IaPJ=2UYo=!tyK2hxcR%(TE$SIm8u+ZxK~7;Su!| zK>9@x>087PEb3&x7&yZZDyAQ-MPB10M8J#wD!K9m71~rlJSoPX=-Sq(k*;3N_8giV${m zRRz0UET+f6%*%-4v{-D6hB^?FifJz9B#mg$+1iSO&bFKPhpUN6NVE?gZ|V9lzq$J3 zt@vxFE*IjJKsC3w1UxmFsqXex{K%sQI2zNX;*VuO<-~G)D zyj&YCPb@z~2_*;Gz{*d1N>;JxtTuciC2SHM&dNf0uA^)S9mYPv!OQP7K36^V`55Tq=SRI_oFyUTEep22BPW`l?m*hKu*l$w1J`D$E{4@5=zrmKWrOp9mERVB1t#{d84TnZEfy(I_9ZRSrU$A-Fz}Tl5zR0 zry$G^gFU-d%Q*nbKo0_0Mh%@+h)%SxNbuSdZrk$JMViijkm0Z0<;?~K}9Nw84@jSih#Z+anzRJMAji$O(V{|&f!z3!!8O(TrEJdb;===?eh z{OD1V08B>KK1=7s#E^g0Xp4|r2m;|)EV)+{CEA>+*NZ7*Yk-77T@Dcn)BzMaHKtEf z#tf1J>9enMCZ^?`EFk*3ImtLU0GwswdL@FW>!7(@b%dK!_=5m%rZQLjK-mA5f%HX` z$T-KRWH_Y5&|)fc{75!b;%*oW(Crw`%vZrV-s3yzZiM2>yS_Kk8RL#y5^gAh5v!3t zwUsJ{xv|$6MPuNM2GXoh`D&HM*`lf1@7>W*&B_HKAlYt|8FWIY#4Q(-NLP$`FvaVr zYh~dy4Kz(Ce+UKHpZ={Nt18G|8x233p3_YKfIuWdUnVQvezsU7T4MJ&vYF0UR+m03 z7|BviG?kYmSSJ>S6`RQ#G4|?NtS5Z$q#T_pk zs$f3zNya*00gTX`#3rm}Ja2yDv*U^}b)%YmyhqKNW>8^ByP@d|QMrOz9oob{+;y=; zO!uLRhv%9E(*XYPaYSr3%Qt|lV~MOurz*WZRbY|3qkRXI?~ZPrSNFOBG<=(#9SGx& z-Oyd|gQ-FI17snA5Y9cfoREEp{{KYM|$q$yi?o7C~#4t&?&*2?^ zXN>ReD!-1@zgAEjzqIz50^{hk)$5SvV?*Yw6ER0hQ8*qddPz&eLS5 z^RbC=HhhcCVudzqX$K&v>o#QKt~^x#G$zPXq$$+fyBBVSvL`e~vlmW?hU95v-e3@L8f|gJ>m@dX+K1Yxx=W@$SyolA% zl=%wA^-TKdSjF+l=4?%BgggxzJH{;_ES02(u_NWpwulX&OEADaqvWPJ!~o4GjOSt* zbbxQNx%#Hsyr}~G)*%TLV9fcP&t6UUs160}c&&rBM2(<9M_*IK*WWZeg@cnPcjcWX zU$mEF8BUkVaZtZu#H_W!Jn7(x!1d}wzx(5~jl>LMJ z9nG(V6QvtjEuCJkWIiiwdK&+1tYy&i;d7kPT`|Ac&0*+27g0*@Jb3x)nAoWw5>EeV zV;)>4Q*xJ@75OYVqbSd8Yw4zKyjzaL=M=PNF-7oFjT8srrn~)qhO;mn(WkWHUcv#~ zHkAC-Ndu}YU(bf$o1XQb*LDCaA^xnZP!%z0e!z<^SPXQPv5c`TQ4#W9h$wrq_E`<+ z1j0-90ZXZ4Ps()4cZA$z-7%a>S>bkFt*rpFh7u4q!v*`+~E`fBvdBD_(lYTMs4X=MXcJF!nl z+6X3?3kLYQ<%1NVAt*Z%iF7iTY;wneYH(7(3k=1Qj=wdb;Sz%#3GersAA-HZb_}5t z$4rIya7O6Eb#m2X9PpSITBQMPMK~JxpR4Y0R4IH(?xqG?+5Nkb!2oF^S_2hC3!RYB zou?~2zwxu=np%ObI9K3@#|w76HHM5Kt#CKtdtM!$Mg3SBorNgNbvE~OoyyreviGuB z>+CDp^PJPTxs|!VRiq4c6tUT~$7Xwmp|(*L#Q0Cf)v|R0Hsn{X$A6&@u;XF6Z;5k@ zrKwgmS_ZCq7BS6M=GjE?sg_*mEi=ajvZdRm4G}NJk^tJBWavHtBBA6BCg~zNf~qTW zk+wsY3@-DwGjWP&ac|jE&^h=rLKXi<5~_Jl zDSL1Z0xS_Fi}81PHY5~qCUGm(*l0K}5Ut-%({NYnZrIM1UR{AtFW}Q5oSHmF6L>&t zNCuqL!4`EHjcaf}h&pj|8OjE8`aKKi_40YU-Ckcr*LHuaxU{sGF&Ps~$zK4#ufVUZ zX8!dUc2H)M4AUY3D>%AVi|lqy&B2Oel40EGIU%Xa{Lh+-GkYa|Z06|Y_X-C7;)ti) zs%xZr)3Cm@^G77DpM@8x1VCbO0(@Bf?*=Jv_FpXX!Y`{~JnV%)FyK%AfA zVx?FxvSO8hHISI=_N2w^%Y6QWFcI7{QEVz1Q#voLqcl|<%zwjT@vG0otE4Ssq`bJ` zAsIFbmqez6W<0W-*`CVa#=$XaMZb;U$G2pum0%v0VG5_hDII!)$E{&@md%4-vKbsi z#*0$7^GLk<$08Y{!qza~fzrOn49J3#!F=yANf~lL8Z9eUgDmu@X-X3Safw&i2Ji)t zhXi7OfAN}nVVCJ_KYaAqe&hmyikpupDTG_Kv(;&BZEbay*UzSOnTl}iSKoa7)t8T3 z_A}^2?On;L{y2T1P!x|IHynA=*BxJ1u)2Ke!ti#<*PY-e{rmaBi=!R%imjw>MFEQv z2nLUvF{ZizuGJyu#hovk&LXVe!sPDlTm7EMdeU>j+0kk&3zumD4Fd^}eHXnIxcwik z)IEvndOPK3+99jDp-*J6b=Tce?pqd(1dsBJrC(K~@i)>=ELUypIo8b{EZp#FHiWLX z(NjrH6Vjb@L<&DIN_L$ZFd9TPe}JWQ`D2PE>&qo?FS6NjzSj0mq5(uUcf=Fs;yzVS3LL%`)lhUL+2K5i+hcxGF1@la4w{d1aCpN zTf&orE} z#ew3~8~t>Yi#r4Fc!{7BCS)wj6J7GnL`MCp74G1)nHRWwRm7%Oi#c9Zks|3uS)$L( z8!p@mI>G+~8E|`RYs<|-6rfyi6TD6F?jF0FPRpLtMTmGg8G42q;Y_u(o(U%C|d<`G3w zD`Bx`10=>Q9gmTW6lWh(d>!RyF#1troS)rH8%+Z7kJVy3~Jmj>l{`|LHm(b~WpQ=QA|Nip{@3~C1R zOe!^SDqPL!ptP77Jd+fm0M-Pfn1j8_K@iKu`l48PW|rwP8{%2Ss=&4!xB{H0ci4iN zfQ{q%A!FgK5Oa#-T^NdQWaW(9u|QZjW(& z>&Bur>bW{pYW;^~7C{-t(LDdaG`mRWQh%$%ouD^L+Jk|luqQZzen}%hk5b)u6qf0` zyH-JRtWihdHiVT9VqH27{T66A0P_nnKsUN)hvDN1Ub$q#6BE{L4;Pc!5}UIItbYnC zAs7IDujK&v^2>%56G3%h$K(Mmni)Iwyu>W3MhL@ebj&v}1Urf~nMi;0h;SC{1-^$X z`Adi~Js#B}Z}J+6{YscMz4+!)wG#qWvlCx^gPkC5Mr!Lq zkG}e*(j&rqjRUFhv=BQ!pOF+3KtUoFA_o2NoK6Mvh=nk298di@e)R=A@B#jDH#Mv* zWBFqF{9Z(#=rD$D@lU5vB9F!n1ltmZNwCZmhJXoSY#oCbF1ki6N(Ga@IOuD`vX{~# zm}N8MO`pxG45(7fJ;nh9VVq9uW0||YNcNj`?QxhCJ=2~|R^nHdshc{}2~yUW7FjLm zS=y84HL?Z$N?G3Ma3y+juV}^C8DR*jq-1Lo@osldk=Cz~@KR*CyUzxvHz8@B=~6Xt zuhn1p+Ka3p3m&6F`4MSVe6ReS^9{zT&PmhW8Jau^fz3DxRjbsS_u!{K-UPjsLs*Ay zl{S80wdtXjH0~j%{mYNLVXEUIXRdv*AygG<{xlMtIfLL-wh7fmXtscxm*Ac;#d?@Pv5+VCxLJbV1Xbsklsv;aZ9~Q5N=7s9Pk` zQXsLIDeG6HR&Jb-jR@B#UDAjWYzzNDrB4Fn7U&>=YOk}j5Ay?;#VC7^e2-cZ+N!^x z!02R50`7P*%`d01@CSl^0as#O4~OU!nBT%ADKfMcG>!dtcRkkrFX2GA6U>tfyj=rs zN`fi_W>M9Iio6+~pjL96=ND)KI7o*nu5UDa6R>6cgtzQ6LCUk3PS5A0oOW2~ztFDIFxt^s9WqaADlW*&v%^XlJx* zqA?I5U|yhfaSQUr)6oz3g25G?&XON0}dX$y*7gLH%wC3l4_N>UE zOA|E<-ll1AbZxGEVNP_*Rwp>~NrOl0z?j!Wo&t`SX`)<91b(VV>x9#wQ$^ijL;$MX zl*t_8m8&wdopE`djog-gt-#MzvL=)Ty>njG#j^08jm!!0YHqe+xt?JsktnHf~Ea=y94U;#Op4PzS>ZHZa3E(?JHAjC!t18oX6 zHg>VA^sPdeyNwp!Ju57%xE2`a#Wg>>V{{zPw(5qD@x{HNydzSQu7rD=14rC*n5)q! zr5sV_dhWnWY;3c=y5%CR?c|hZpmc#QoB*46(D+z_s1L!fxWY@ z5c=VDBN_e-Jbx;P+_;qhl@s)GZ)aeCW9u%`letNkW~+OwW7*`(>`RoO34I3|5Ah12 zO;OG%EtAQJSw2Tf;H}3r1u9sk*&O-7(wx+{8?0=&($^2mzO_!L+ttoWHJ03 z3wT3Upk*NmMCIMPs`YBx%I_~b(N<^sAux*d4f)V#gxlB)LsVgj=~NTZTM(~ity=r7 zjC`ei`df6TO2$4IIh4&sJW&QpPV-TuEm(?p9Hn>#e0Jpa;fc+AVNZ~#`}V3;-uALC z#v2!3S4ps*D;-Tsc&~rBVv`+u&b2#SBhHwGveRAroF;&o0{+rnPh5z}Q5FXLweh)X zgk3aa7Lhf)_cFvy$8JC>00z980yN9_m5q9sj%7J3Y_zPqS+O$=MeI=xvzL@SF1T+* z&cI<9?Kqg^!(_b2M@szq#uLm{j)P&1NP?q4rPk+D(5$O)K3zH@TA;wfdV6F4vAb+; z0+MM+C$=@#RN;8EP`QGVFl+R%g0cOPxNvl>Jv?r2smu6KyTRO=D|y-8lMQ*r`8^$h z4c8dS;Eg}3da3#i7BuA5#dM(F85Zs^ak2@l-XRS-La4HMtZRqg8BK#E?#G?2ElfTr z`TU3+;1c}Pr=4bN%id@lBzUNnqVjRLbX{aVB2W(@yOOX`XcTHZIz-35#Ru^7VINXJ7WDX!lDmTHk<3VF1wTFhsB$APc>ElG#x(`L0L3!|i@ z-btK%HgB%$w8#MDI8Mu)O87<3TKpv@E^&35y7mV1!Oq!6EA+zCjxQmRu4cY;7ohph z$x)?WI7?E$a*JLItan`6P$zd>Ldu@(sGi7NO!!C;Nx10Z4bX(mDTqB%7)1L@=$0;j z1~O#2m|FcSsRf}ax2`J0v(4fR`ptG(+-b5H-r??)g8YOxXsH&FJx)WE10%nnd>C6E z9U^HorWL(9>_sfkcekqAXyYOZ3&z>B(y{@BRhtZ|DJ_U=@!Z?<*}EBbPsa$?Sw(wl!Qb{}H$wC}r?Cmt*QNFG5CE&Vcs04m+};VdH>fF&Pr-(D zCURj>McDsT<;qwYv{i+gU+e`PWUZ0Wef8F+08vW4(k8aS{t5t4acWVO3 zLai)40@fY&EO~Ybe)5nei<==Qm3XqY2uuqd5ARYkmE4PNwuN5T<4Wxj8_RrAklrIq zKw6H2K|D0Xsmpq4@^aY2j$j_LOOzyyAQqe=^m16)`ehwUNMH9!U#V-hp#39wy509DWtI}(*1u&=%i)VHCjnl#Uh1M6*s+asNCj;^h<>aAC; z_;Ck4D`10E8P;EdNKKOtTQ$CVg`CHZgP;)nOOcS2fD6I&NGW5Ag*h!3g~(n+*;+B0 z2&(6BJg0-@`#X1blFrZb;UUzi+<7A)(p~~@0fJ0=3HoY9Mh#B|x}Y{L$GJ&-BbzMa zaXhcP2WJo!o}w}inRrDE$)hb*h*WRNl{!kKA5zbK#(&sADAV_1PoP>luiWQ(JO7{m zffew+Dm4#SqskCJO$Rv}0O24H)BfV@Ox;?^;cg3AUd#%4nzo#j=(Yusi23Ser~uQc zhmUTD*Wvy?9xYO0Dle{iI9n(V-m)|Oi)#@Jx5o>%hfi-~C`--tU{#Ru8$A-5xE^cR zZku8Ib{UR?9QpDbPc`fverwu-113yH&vIwV?d?f1Go5bZ1=e|CS zURL!Eel$F6xpd-lk1vKlmq9rm;(zdG2z(3v{5%Tl`Skw2nm;w&r+Ea&ms;q+u(#qM z>WU(C))^1QKm0G075_qUIP6{DnuqA!U19;_{1F1kGBS53_OqrgDMt(s?umS%M&c=B^83*U-7zBcn9^%Zj zwec#t2|U~j<1iMf)KbTWK~4HU6F9?}KG6{QN+lmz{_8ElxP`bX%?3!m1Tn3~o`4{! zl#O(p(gH84fhqYST`Ipzr*9)`MZqvX3&76yDID}0HwhJU9+ZV|0qa;vc zTY!LHjC9#s+)07IvOP6bbc`b8wNoXSfiSJ0_Y7Eyk}62P(QoPF|1DokUS?&wx*-Ou zZ@f^7r&9hlq)57a2ec=VxfMG39FipN_u~Qj@QMqZgvD@{!w05>?g4t9zNfn|IYS$m zQrsLOr@4cJohMIr4i9&pKHYitOgCyjuW<6=m~Jzr&V@9#n_WBW0UyFJl7&h>r<~MRSbnkNJ_PR??}QEQaLq5@SbMm!=|q0QEur0m5^U zOR_K_mLbBE$_n#zJci~d^8|@~qN-#}EG{b4Dwo7E@dCn5kTSAUzFTAy0V0IF4Rcl$ zwqOy}yMFC9wu7V} z42D5EYUumdgct6x8njC|ACNgl>>ZJJGWZgQw1X;r3{-g)n}8aftp>arqHM-m9O&n^ zbgp1iB0VO$CWAW6Nj0Z#*&AD(Mn(7?CzJj#31IU^8F!9)u3*~~7HcV_mxbM&L%Gh@ zD$-etiFzX3s~rPOwK|`pLf-5|#5c<_Mn045EToQ2j+lnPqMGBowgQl9BHX;zsn?XYbl#;Qe8o;I+ip%y!V`O#H=tvG5 z%fOPjq`bu0eN^kelEuF33IHRWBvc!jIf{P0tIXV-*}WB}yofPz#MedoF3T6CmBDrO zelV>ttE{ATU8Do_o086TqaqjPEEJT8S*v8l8QL<;1Of)YSVAOTiSBBpreP8^(EK5p zH-y@^TE9(xfbu%b^2#E61HTno8t}TXax3DaD4#sWvl}+*me)#O3c>;jI>H zsR3bRK1@rDGaQp*`0(25Htk!Y+S6QSIKqM?R)QdYQQ!_GcP=t)9J(4t7^pg?H@hOW z|8f3?1~Vl&fzpf>c=d z_znihgXP?r&p9^GoVD}_X4Uc~806a}$(DLKUWJTH`Q6N5YB;SbT+QVbGcT{e$?5EdYO)43Cd_6i;{b4`!RUf?mrgU;6kxg z)Ip_mTsJ)61F)MrlT>M{y?YB zU_BzrcJK{gpD+a&CObjMe1~XdP1Ef;HgU_|>V0U4d=>LzlJJ!!*Y(9gMN+{(iHz_8 z4YOZ{sj`$^r43<_kH_gi289sSWElll65k&cwH2VFECuUSRZ&?WYbh{t%xo~EKtw1B z9qTbh@g(~t;iC$%?Xz@B226l2)i)P8-wRtBLbuMLNmWrHh%(Y>%2_3}n5M%y>$tFI zWK{sAsqtIpC?#*?f}u2*svjmZ46H_O@-(HxUHH0>A(Qs^fPtB8=v|`DlRks_er;e$ zVKa~QZ$wEOg`~*Jd@4<1sraUW+a^6S6zy~$=2W!f28K@nP-i;`4i5IV9|li$_YMx= z`+jG8$=z7D+jxR%fjzQi-)1Ytg9G(w`yoG~Lc8<`-WsL$Wkpx3fTJab(-fJ@6ocoZ z6>uO9<4N4#36eIM7e*vE_tg(eQYpz<#jdA{wkZHji92*^=5^jOdjGyL5;X zAet@n95+}{cnp5k&5T1FZVx}l?6YOrd8)#jot;yUt!E^sSR}%OKpV|UU=aME*`S8@ z^Jd3mIOqxPMS~sj^o#(wbWQu(0d-zK_ zz{#gR8jGn&7(_wXy;q*%6|SsWCp!AEG%r>fu-i18_SaG~I2cK46=|Ds`S`}&Yjp<+ zhhym5ceUlStTLjwt;9Mgcp1LY@`R6N;Ac78kP~bJ_;!gRAX>V_Y_*8TKMmg!koDuJ z!pLjswSrpWk{m=^HBE z9#{Y^!4WLq=>)+siQ*K?D<5$q5*A9!Xk>qT8&{kbW979-YJL!xb= z+k7L2&CBb#0bMb1G5{eyW7C*X0Pl^_-f%I+a9t#*GGvfo@tA=BDw{)n9Tr!@b5Y=W z3{HlD#ejie`{?H&(0QkmUHGtKrx;_b!meLUCN#*!zQ^=p~8qa1k+$lsf@%CMg-cBJBorPdMI`jHDCD4 z3n!)B;k6u+TYYRI1BX($A4`o-%$ja(a;yyKRhPy2NIvd?7Sc69AbVBMF}x)-3q7MC|_ zw&^~`7)_I-1fd4fBsa$;CE6lNSne|6Lo0&E*#j8n(pJ+1E9^v;I`$N3B^%0nPSjim zyZ!wDB*0;?o9!c!b{}N>!R`ZiI>ilS%#<_3gpuz$g>{L-ei(;YC7v7R4uHetV4Rnv zr9w3-uBYSVtc;+pb1p!M29IhEcVH+e3vj{@28X+-_~t;N%>iNAx+&;%6Rj<3w~0nA z32Y}C<88%`Wt_18h4?N!qbX@IpIyCF6@79HlS;&nmV>pqRmujkf z6!s)>d&JU0Wg53>0X7T5^HA$Gh59Z%I>`Fw7FwG0pO=z?G0`d z2H={TqV5j5@pZA4Sw4#zPE(EMPUQu(*l5aqTT#g!B%|r3ThxfXDR0z_N7mk`D#@L1 zF+I~h_B%oC9=Dhdb8Yn2C{t&4a@jpkMTlo7 z=ALBVPdIQjiY%FVX+-Q;?K+3oyT=Dl_HT6pC%L;MS8C@#ZsBakDryupjxMmrNgwv+ zySe_zSGXncO?o!9W(B+7m=^`(pUdH>v;A;7zHxTUs0eT?>d`W?5B4mVXAzAyDPvms|Q7Zz#NY--@O8R{t`~8-;WoZb8;@T2Mto zqL0vH4qvlp5Y5{_+*QYTt=&Cs-EaTb=1<>6&3^`=OoO}~EFWd$f87qUK-s{bS&<8E zumTf6pKN{CegD_f?pEuYq%}HdJwM$HmxEnQv%z^0Nz2gom}4FkjgzhSjb_~WlHA;6 zldlHzYLn2~S9fiv+u1pdzh>AhO$)dd^=<;Uulk8Z<%TIt>l5!!D6cdrnMi-U2R%7$ zNFsMIRJ}s|GQ?v{`^T3r4qrWehNvJfBi*x#Gh||C=!U`;Egs`7Rxi>gzzQ!?X+|q8 z&BAVIWx@`BVrsq7F8xtBP0xUPQ9*9nP}u|qW;bT5(!s!jgemMoBdscVJr`J68)6jo zDpjFI73Vst$7>t4!oX&c-r75dkGN0rqR1~xd3%R?XFl^3NbFhA=$lh!Y~Xwn}5=(F?e=Zo=Vn$P}Gl=H>A%lB8m z)KvYi9#&pn^}l*DqpX|1gw9f!C}B!R12T$(zLv@wOG_Q1Mpnv`UV=#u7_QEOi03lY zy2)Gy{!p+=Gh13MBVcTuHsOA%g$@NpHKbong+M46_co`4uw5Xo#Chu0^q zTU0;5m($y(58QeBz8>V^b>rlH<2Hz({`>6?9Oy64Gu+473Z?Ny!w@Z+W~v^nvGsmq z<5uOmMfEnh>9Vy7Ad6;b!q#n`^|Ns{zfv$P9P_~(wyLFAZV4>69<9RCAU98PQs`Vs z+nc1HzoT%Mte_#E=_D8uSux0N>z4*Jkj@8flblz=$4O;PQJ}b1n&peD23*s?Y| zQdMf-Cd!!8>H<(;h8Ii1HW$AkY@4;(0V|qqWO&N_t@grAHD_7RVsM9p`C&eergf(X z_P!UM|Kj$?a{Oo2QIY;*krjqxAmum}9!A3HSH#q_&J?5?b6Tco{%Mhot`IX=`jp#e zis6(>#~2$xM)VF#HPIH)y=C-=O;9jH%Lj{-4XfyX_l9^!JGCWDg_)$Ju&P689y57j z#*Q_JiH@SA=&F!XB%M`}6@^8Yx{`ZFR7C|H!xlkU$PkVK6$<0lqiZ-+PfNUz;MuZk zpFy0r`?pc^c9|N>4HsH>T7^*(eoh!eRy*7fj6~aDy?k&GygaCiP9{BJbk5t;#JWuq zhE~(WjZCV)Y2kr_f7&ja54Rt|x#LlQ?ZdyyXA_>|fdu|QgY?Zkn#inB)&Zm|#{5*z z2Xy!UU(Ai`nB2P4!HNRG@nE4Ut{%*+%RCRSJ4+TP#EI2TDZFgNHjv3GrL_x_J==5= zZ}&hfp_o~IZAvy?=9h9y{|jl^DRI-H2%cso9+qL6H57fO~K%spP}Dtln!gAnm8`BI%;;Q49Xb4HV*D5M#zU{&a&2A>!WU;!-OXkOLs1E zkf9b!Il+^Qg1HTn4OsgH@9W8MC=a{bC}KjBik0`VzJVXHX}nG?#`i?3VYEBd(B$1m z$&sS;{eVbaos{e(01{Tu$@MM0w`hEz1l!v|k_6A62U|(7H4Hk5T?lGc`L%Exx>p?%l=@ zf5U6-|9SE9`=_sdz^~6=y&+p-{PX8mZ{9w$9lAdcRl3BgUzBua6wLS4D0pQt-{1#? z`@Mwwmf=3RVjcHefD2Xr25_rk94JL{^|nMhF(Ze==`@v$ny>NT0ZGA%0QS)UYf(%V zn5SpyoYFWkw{OT;EkHzj=-p4Ho(Rm-XsUQGs}Bt(BBcN(Cs<+yk&y*uhXes;2|ifN z(12697^&r@z2ZgW(WbKE{?Gpa8b?o4OzViJ#imze;(Rj9xmEfYwyVGv+kpmv^d2Se za++30*XpjP$8vbv#PK#1$E5snx;EyNhVtVu=S-G&#oWg7R?SV}lZ2PR@&Xt(nK*bq z85{D#3z;S5T!{=yyG0ku@@fe6EOgDEoY}Wvyq72Rg3^o`?f_=oR&L&Jw+_(6G~;51 zuus3?#s8#NxEZK!D8~^zvSFXR_nI!?wmC`R5r#Pukywl!A*O$Di`@)+tsUb&HZrJZ zfcQUgy)^8P|JRfn#l3>-)@I4G#@2%LhOsgY*uq^>W-|6s2>;UWlj`ax!yv;hNa#_` zPMSL0JqcIik5S0IptbJyK^RNFp)Os2pH?-n;yPocLVs_s@qn!JG*bJae;Bob`v}Ut zIq0K01Z^sW_GF+HF}f(}2V{mn4caqo|G4v*RW(x0VAW`@m<_+D`9NA; zCZvpQ)H?!FJ}_vBI{*DpiF%s!;#&nVz8BmKmE}9}3hgDi6UJcxh?5A2Q-a-Tn#T3l z?!9s!bwr|W6%zprn>Fk$gP`h;dGP}sQec&vUa9_RIeUR)2_!cCC zvvl_XfHe*Z8y3Zt!J#iOQ>l#iYltlZM{T#}3+R(>BZ(7XO<|30cwn;1aW=h>X5xvq z3Zt4$x?#TPA!%qK(o^5z5HZA}WT_w_+BOPg^z0~aH_YJ_dgI-LeVQN9IJ-!L5Xl~5 z@T$vcfTkc#(l~IU8BQ)h*|tmDSl@1jEglfBw(1WE%`NnFq^H*rg2e_eO+QT%2x5L})X;R8c-b(fH7GkK*(5zQ1CdV?bvCR!~$-4|%?K7H|j`&!?R(Xy*Z3M|SL)4Y&AP@%zQ!^%~tYzJ@I)ksCt6#LOA z7-i_`Z!TrGGN7ohYcE*R*Lpy$@&oxiJDcu>1sd6hP19dodauLO9%qAW&KYXNK;6H8 ztFqX~d{crMrmW7W3)LieeKkKf!zj}^0*!!&0lSV!eD2@B4(VVG8}=cb1oKH+pz9%_ z3C|eM+gpvJ3RZ|sw%9C<*s|(n6hz^)?CdaH0Hy#pV|ul{!{B2{26=?QxH0Yki4j!0 zAlfsJviF89G)HeqWe6EmMz#YT|CK?D0W&P^&=GW6a>6fp>bBW{wF$f!v2&da+c2U@ zNPWBwBEmA~3up}dZy?;1v7nA3bly2*oNv8xC=aTuVBp zt+N8!2QUBD`@e&uAD`U{m$KEt4$tQkbWf_N{dR}hyM6o7TNqZ7E2<@f`PD4l3(tyd z818q1N5NLm3AT10RDoEfli4{Gj~@ox@LwnH)K%CgmDxFNi#b*H7W6#RBZ?oZlTbK@ z|GXjvJP(`p#SU#HY`#c6fL-UDo$?aG$QVbO9=ukVB37e4d_)db@2clEd#^BvYN~Yc zfs}C+KqcxRb~l0OSyNgV*|H5mI8T!ydx9%~wupmM!*6YA)Hg5mZE9~AJ9{FN-qQM> zUag{`FC2>D-6%;3ka|>ceR9?;7%LzV(oU0CHF75s<6BK(336Qm>)IxLtHPXGYUX4$ z9;!!rjXB~5+Jb{bV!*^fK=mO$RykE24TmZtq?k4)8Z4z3f_&SJF5-8rM20UEgACuC zR<+TU=>8+IIpEHpAf`7Q}aNYfiJN)l$%H{zyJCOmQ8vR}=jvHw1rj82P$oN49 zkm9goF)QaZe*aoS-U$>(x;0XM{^x(>vxBnC(LBJ+%AU!DFSBrNbxt*K>$+j{iAGhvZ3eo6p#|fsT{}lo>;`PD)Q!bl}{v`I@7Eax_3;FfmC7=gBlH zC*&fWqZI*JWCpOa7HFM(g{BLFXzKu z;&d@NPKyaNPP6q0<}NL1ks+D+bu(svKF#T{6EgZc#SHLeCNT8h)RS*b){0X?O?{p1 zL>qtgQ+XH925O0PU9rF*GZbAwTpq>-Vu>ID_Wv@sug3*$CMYbU8G^8gm!tcT>|0BN z0A{l^$Q*?b8>7eE0+L@2WP~EC*&=kY6T?P;%;I6wfNhV3Y(XSLK!wbCN>?o=b)l4{ z8l!+0xrjhxFrnDU*RF=GW%=jxM?29SUR#X*Rzwjpw}sobfxa)3jBki2H;PrGUKe;=OB-<(KwDsGz?Njx4XNTSGRo5EWHQ&bn-!ZD z49S!ZrFEyS0-%IBN2LmEFu)?=Oj8&lqH(@P?4)#OOA8W@8wuWtDAu)qMvWGFwc`3W zrfSov6tR(e<9_e}MU8D;94B#I>CK?EM(Iwm>}-L7lP5Ed0$eMfI_-43kK>@R3H7_cI2-rj%a^C8mi=D^jjpcr@Kjea>$q4# z6&jpvERSFKXQy*o@iOK_7*5P?G}sm1i)t^v!PuTNa)87-o4npc1y1vgtl}vNp+*Qu z-g`|cU+jdGx-WJ%!5R8RL=w3kzB@o%^Cra#cBO1{hxC(Y* z6Jc@vURfz-tUp2GEg^w#mN3?iliKH@S_nn~*eYT7+=+!M#0e0eX~Ul5oC+4`wis z=ORVuldDM0uFXJFQF*%>?+nLRL99yJK#K0EQ1Fd|HGZhTb28_A2)gJmFP^Q7xvo*| z1b3u1efSEjHrGW(ms?6icLCgmFdeg>n`&a(fcS(NMB7acvV|t1`1@hgT#iJ+`jtcb;vJXH2AV?ayX~VlGG$;^a(o)PK=jUc z$AMFxJEX0eFDNU1#7y1OMr~qou00>Pd|Slzk<7=KmufL6#`Jqx&mLq~tY_VYPrIJ) zf=oRQpLR{FcFc8WV)+qkdMWJRbWK+?|Ey?6oEFpClVCQtw4@noh@3WRBSS$^E32=h z5GGNH>}vM*4uYGHMH(WWgrx;S1S$(yI!=+HO!oV=R+Ko0iK_KKNFeAC)1PS;OtUOzRO4y(V8wM(k#wt|8 z=4RLkm!l%WIcQY=@wrHHQ@g@HX&){8S!*Kth&Ku@;W7L`K1?g!?Hxsp1zAvg4BCy> zM13dONT`(QtVN_qQXC9$FN{KA5)9v)l(U&Urzlrz9O!s#d%l+M5Ltkmrn7(@+{0tZ z$iR$D!V#cJ1pviBI$;WBM{}v>Rm41Osb+Lc40dlb@G|u$(BN(JTU)#CRZ*&zL~zEI zGRIuErRJSm63%TE)eu=0kX$7UIW3|aZQ|e>iY7hE9+>!!u8o}qa9q8TsK?A4GqYp1 zW2TsS%*@Qp%*-4!+c7(4j+vPmVrFK1-nVb}?*H%IclVr9&6%k>U-hV4tuCo0h4Eti z+($M)+?Sp%qjaEW%Y$==YB*k&1Ls7+t}XSPkz}l*>Ovqo-OU&aE66V@Km@Zi+K(rC zIeKLV{)F6spOQ4MBpK&Q+4&CZ*xG9etk$GK2x;zPRE{-j3*iz%(U;N2L7}^v8P1|( zRsp9x6M^lHO0A2gCZRrt<<|j-4}Z7S9C``nR70L7Ta)jZ-#Gr0Qz9FoOwJ@*{d zvBpS}d!t-Xb1)qyCCZPFd7C8aA)c3g$tRZVRT76o<&wE5R1hdyV?SNUfUKxyIkd+} zJI)e=($k++8>S>+iZaFkvP-{@r%wQb9W}rS5BkmQgn$n}%9DaJnsK#Nv##Dv$FWk_v+I;2k&mnLVfprQj9x;9deA| zD=wR5hrUQ?ew-E>uNa0p{EInaL>4ZAIHZB&Lw$If@1&%I3sL?Yn9^LF3n)DU@vn>ZPHe<#w zax5D|ADnPSbH{r71u|H=wjn$QM_zQGbLqzBY2tki+zS`p0M`{%SV7CS4nDFx;igmx z0zqknB*$*C%)4r-;rd#EcF~uev`MNtEQC^x@YBFzl&V{8p&1{}uVPVDJhS(Q-j)!` zrHAe0&oV*jdg1!d@y!=-9_e#Pjh|PtU~~Hpl>x7EL1G*tzvG5%nOid&5qf7$Cy{)3 zxX$19CK+OK?hrq`F88fzcLWw{h2GQ&5}U_CzGd)BdFzy8_7S1yAg|+_yoYAzzXFit@N}Mh$#X32HF%6JvRegc&}| zc*UG}j7ATM)`_(rBP@9!$|jH=dSl=ekj=Pd9tClAYu$TT3&9@EQW-Yiq*na%xq^Ri z(9HIi6>EXro3>zwuQZA@$r06-lE4-oT@G^)Y6*M4zPKO`vfxo6{h1Bbwo86^t2or|cIc+3$ zo>Im#i0i@J_ftVlh@)4fx(Qm&L{P^2GwOJ)nX-`qxexrwEk4IX`14Crl+p$EfdGXR z9RYL8F01xTd8Xm@N@XIov3#yGGVYtVlz^K*#i_qElQE1DpTP|o^Y=N$9^&{6Wi^>- zu=^I)X|z^Er#vxq_Mb8w?TwUUGhsEMb*wwp%=qN}u2zyCR(JlG>l0H6RXY$c;V$P=bNM@6%63nxn7@ z?cD_Rd75$bPa5tZ__5WZhsOhpj*Su-qQTjY$D$c@BTvvXMfPvV4rAT!T+MD-#Sj-4 z^F+QSoc!|`E5$DxZ;e@@z zSDds_H9JSC{#}kKQAI18^P%)NyTU(qu;oYr@DVhXkIID}ZHJ5U7Icyo$JtknS!4VQ z1fsRaT!Tf=I?0hf+BrU%COO8Jd4Go1RFBpMSY5Q4)flptYqcflf9KcD>JhgZsT*Mx z_P=UJATz|$LRuTAPP;pBs5-kb4~8i-uU3s9KX32NnlenA(x8Uh>M@iKpBhe*?u@i{ z^Y1zjo|sNN+!bwq-Xf&J?MFeV-Lgii3S)!QTTt*djFvJA|nCyx6pV0Mp6s)2R%B| z=YBaoe%{b12ZHmSVKiI!;oBE`VbCO!(`>5_LaTve})$> zdzwcYrrk>FnPym~g`M1jhZyx_hAVzc5GsHgrezSq=A^edy?Fl$EsFylj+7P#6R5}; zjpG~f+p{BMruPkUs@2;yr2xU-Ja%V&@j!ZNieBI0_#DY1n z5F_LzrUYGS%Y?ZZAyco81ep^h>g7yQ?Q0vD=@E}0()ZW(-9DY=c6kE=B4&PGsjunM zX(Mo#ejR+65Nujo=ys7Lne1Cj@APz4;1NlXnO+mQYFq@fsfOJWaqUvIOddU5fYe2A zg3(ea%72(~;ND&Lz4>sQaV-UBsj zNrem!_l@h?bn7+N6R&sAj@~XbD!m=`!mrCS1fb`Tl@3xEcP`3NsKYJc{9+vLECsZC3&AqKdVZaV)peMnc|<~6bSp>fzDJne#kM53fxu=`STQp-&4o= zOiFA(p&T7g+1P)?WTE|4SlF>>U|g`8-k z4aK&aK<~(Dafek#e6uew_zt94>K@Wh8HPL5r*d<+Rw))E8C>TT>(nPYsj2JTHKSNI zFjuU@3?WfWpRSlkjZQFZer^>Ht}ZUE3f4c~>dVjrmlpAfIF{dbXbVkW*EA<-1Hr?Jw&oP2q8wyusHM}-5bhq)z^ah$`$mkb?FO+r zPEKhbEFkpL=IApENIadI8Z-)L-U+3G`WOyUJT<%ne#N#Xr(y9+6c~yE$&C5sjRCV| zDV4v$=RxdyUTjQ#vey_gkx`%|vLi%-mWB?tw66U>-d3^1BY0_CuNXe)p|EKzsSKD) zyIlXM$4Z%@*LUF$6b?yb0jq8$r@<;qE?&4!*IBX**TBZE{qcb?HH3(Wu9U;MlmyHK z3_6{j^%>(Eyk$J^sD!?ygqE2)?cR5HKQ!^F*n*Y;R7srgqBMC^O><3p4ci!Mf zaYjOX6+t|OM4+D*9thc?x&e6@NgN+Z3_Y7DnAovB4b^RIYMea_MSQHEw|Ba>k%^bw z6w4{OG17l*yQqwhFg1^z-VO6quR5H)IdCO+>mIc>f2oaIeFpp4TN#Q(uwL^faj)Z9 z!5|VKxsdN*I>uEVKTeTK%*_A0u@LI9l?@%SL-^cG2k%jU_M|NuG>;)6qw!K|^qpe! z$wTZ+HR(Agpg_&B2Cma8$MMB^)Vs5#-NP8)r5~+a$yndzXn6l#s64e!sqJ=kIOiTj zx_Bn=UJ|ul6(#QtH?e!v-HNt}aFsJg8UvhxkQ>4dLV2I9k^OPTnx<-N^GLnJM!MTKJNG|M>fshoy3jnj?Un6k3ZO7S$IruEnF zgtSoRLuiO%)Ps3xF7`(p3Z^lul!Xx}7Fvp&>8hIJsFbWI7wRm0!u7sY3pRuw3OGVL zQ6i>rJwJEL0WozXt4Y#%U!Kn4D^zw@40r9K=Sj?pif7Y~Qi#H$DSDmafC*PPR4Yt| z^(pz&>sDDluFPxoueg;lzBmpeDV(Vd9Hr$(BTL(;r+evxo~Uh<*`qL)4hdyPAjcLL zYLi5vR=jg>NwEnvj<4(o%-fV^ZT7ft>2qkG|y(pjKbUYsI;IrNqNj)Aa!Zw@?vvG+C7GyvsveE_1kHHt=t0pguo*Q;W7e-_ZNI~yw(gj0u$L1 zseN_in!Qx1bP)<38%|^`5YtrX%@~<|#b<5Zf|svjImDMBD_`;H2zbE#{LqSKyUA9N zcz-N7eiGVbqAR~cf$mt=wBJj_)eiZD{{a<+0RE@(YSUT~7)o$-V3NwzpNg__hoA0i z)L;dTUi*h&0P`d*f-my`a(A4_;&jX8XAbLyuki#e06DjH>P#^l#?gKmi?dpRnW7Q{eiR z<#OSYIbJP4rPyU&cKXfqA>>8iZyS!T-96wg_Bt*DC_A6zlH-C|{e5uunC|g#)J7YV z=kwGjIn}RiWLAYHdZZ;@=P-=@}d=M!+P|Xqp9)CrZWcWpH6g^**?}&ubXjp zJ3SlTQ#GAFj$9DREH2s;* zT10BFtjgn9^1*_N?fmnx)xWT?P~BPO(*|LTSo1a0=fUHF8W{1GNPOxHTmsX4gdVW> z`P6gB@ib%0Hk4gS-30hG4kqzQ$EsUcz#+PqMxulz2Md|3>&pDj9*MEx9515GRk!fl(3ItbJec(70L^%JD>Y_$LAuKF!-CQAm50?B}U zyllW|z3i~g6Q`$KRks~G7HL)RlQ=~4*XuVX%3|lok?QpF6b-zAn>==r@hio}aX;x0 z575Duc#RNZB`47N%dLGtDGx0czr7h{Zhx%p=oFS(8)Q-LULOtr?Sju#39@YHn!>Kx z+!##SSg8X=U9kfdFsCo!z#@Z{pzE*F6MAZTC3&F(fKb9h&0UK_IFQs`7fW8Ri4;1gki*raq;z%rE~SdQyVGwZX}{Q# zK6u1}*uxeqQkXov@l22VjZ$D1g6@>pSdP99M7zWsXz8U9f zcyZnF4CPrOC{VlXD3RL8CHyJzG`@Yl7ys()gFr$!T7qQZ-btKCRnnI&P+SP2@xK%va7;SA5D(#CH12(5%Q%P_l?;Dn`)4{=DkF%w7vc@e-8)@&ry?pxt*w#BEC1 z?Ovhjtnyl3Ei%JF9KjIHE&H;bus}-tEx)ipL)s4Oz>#7+pRNH|BU2P_eQ?xz`j18O zOYLSx6hJ?x<{b%wg&y;SPX)XneKo=B?W}CrgeLF1ne5T7Q<7(+*0sSa# z8zz>IoF+EAbxpm0>=@npWp<1*AYD(Q)HlNLJAH1RJs&Ti?)}AlTQdN^+y)d;!~#_T z-s7`CB4L0LX!ioo-Y8w0)H>D9dupY^gnGNd#tQJ_G1Zt!slgcLPn}y@i$G9COP5wH zgaaU>(myUtb-5tJVS5an|Evsp7a1T~Y2~JKM@f4U# zjS^<4I=(>w3wzqV-bZq|iwDww=zXMWXGbsJKAb!`)##}@ z60x;4^W^}EU0vKg-k+>oo@ibGsXtWNPrY22+CXaARh5cJ*fQwj*7}`%o?#Lak?L-i z#|aII?(AJ0!=1kCj4uai%kHz+%}yR9a<;wmbpF!1h8+KkM}sW@d^QJjHh_#fLuSH%1vK7Rh_#s)t3p9e zeNcT*J=Ni7z!-8bA*&3a!2kk3P1}aCxtY2s^ge9uc3>mweIQH z+v2c64CDx2ky-ksU%w|jXGhQc>V|bzj-JY^*>RZ8jijh{Y$xqn6 zBUG9SdF{r?Ek`N`^i9~3*l_d|oeU-)+{$A%Ym_Ljkw|V-ZZxV=s&;Af6PdwlHHULi?}s8(`|MC#v2TwCAZe0KK!KgCue08Ep`^p# z-#ZLG=nll$y_}jrD?9aUWBr{dPC?6(!0WqfH-6>#7}#z`Ej^q@@BaD{LB=&2(^WN~ zr}TqZjHbh-8@%9kJ6VK8@54TSc2QGos~|CYgj#~@)Rl%p2ni39{PExh9lk9tkWG_u zy&?+Zs57ZIH7a$xfofvL8XY4{ty8l=K7KfdC)?;0w%!qDuM`YpN$|I#Lc5B*%1naUJ$np^&cUD#`{W zz#!y|2%Q<_vOHW0Y}b!FE_5wo4S}I_vd})k*pS>gGu$30sbx&t-#Q=ua1NfzRHP_| z;#|BHtl-3K4h7;09nRLDuoPpW<)!)z8&gMP7O50-%h6bpX<$qb^Mi4AfX9sFJ=M*% zT^OvD5eE$nO{T|T*@#L&NLQ&qO`joT`wt!m5{~U4+TgOC>=kseO+;HYHmj{2Em^}TaIF{SG&wH z)LH4h_2$^Zlexg~CPfY5D!h*FsyY-cAJvBl;xB~hp z&Gn}WdcIT<7~SD2$q&v4imfd`h#8S7Zkg>%8DPSP_!(;+e&d&&^-F2-$1_Ao7&@_b z&P5NrOEW~6_Z!IY>cXoC70nrANH`0uDS6zw3S)hUkr0dSc()Iivz{})aEgZ_THm)J z8ix{SU<~jDT22L&mRqn1C93@L#7%2dxv-G~nI@m->f{Eh>-%y=r-djL@UP}YGfh~V zN5W>*LTA$hPFKbkW}yB!oASS4p*4c=r>4|4XyoRxqn`AqLuXsz2?w}k2>AE6fCAjX6i9SZ-1f>mRvw1JvW8M&{%v* zxQii&)iZ|!y)vY5Lb3vkv$KtabVkrH3q~!U-MN~}En|F;f5j>_U?Kf@|6ai6#29T; zFrLTsf=i1hR7e&DJAHcO#o`Si9a*Jv{Hjs=?8;Ujdf7P;+)uh-#uzlA5loD*k|~s< zs;CZiZ|R9|I8*$&G36iQ#x`|pWdNkBb4^X4*5x%uZYHEO zI^`^RBgTwDx{X7JH~ioz=inY|`2zZnc@55`WN;r%occgZ8NZk$hd;eZhK-e#7O8W6 z3fP?fcBqSOt`{C2{24N@8B#dv>47Uy4!&sJ-s|)AqVi;C4q5LIT^y>O6?*=QOlMmG zEZs!KUu`xcf;^>htOZPJ_*M3=D&Jy2e&ErawGl@3R}be}?5>~(yRJ-I?za9Jf><1v zlLYSvChNG5oscSy>{s)MUy%_pLPU~$rGP!p7`wL%^_U<8kcKYn(THU+hH955cd;m- z*=KubLKoT4+xqftOX3Bu%v;m2j668o*o##9VKvo+DKUg?LWfa!m~tLp zlm4z~cUVAVpUuW2cI<1OfOq8tE%D;(QeIPTR^u{y>rS#T^3I3IgxOj|C#;|uZTAVC znl!EBQ0TNY1bLLlaZ!VV{wo`_3L2~Uw`BqDumqk&Da8H^E&tT0;`0Kec8^V@#i8QCF`}_#9ZGrzw#L zTr@Q}3C`voJx(RdbXTK=Qok@XA9m;O4=Y0$2awvS2Kd*M2h}_i(7Z5u@xZr;r$?el zu3zJS6mcc-v2q|}CqZLbCcN&q8F%X|mxieWasms=oIXwidDkd zR`^~vfj2*J59kvLaI>#4eXPbTz+7Lw>Xx~dx%TLzk33por$i01jA5i5uDrWGoD_$N zDC}4SK_ky<-Jl?dgZ*P!ji&uuVeolKN59aU$a%mKh{hXY5@iXG{C;$DwD-|2gyuau z#~Sv+;zvl|ksLLaz@^x17C5v5O}%61JcLyeB%|8=ovJO(kiHCU^J9zqP}F`-0LLqp z{usRwAAJi&J^2zy9tw>*g(&D2p-O(6mmm}bT@sDlD7W+ySGTi3mz%lk!?Vr}hEGgh%L73T&|A z*rZE^%tNor3%KNkm8xOoEf1IkouoAhUh`{J{}a+wh+Vt2A;RdGmJYRLUjK5!Xoz7x z+SHCi*qAtcbqNa`V-s5>vEPMx1Q8q29_Y{<&^vRQgEh4?%Wq%zGmkR|&da)g_%G}B zn*=tcj}UMc;jN2#D`Ta0%yd?lnYnzBkZbqHD-6W;Cz2q$jtSs6_XhhlY%!~>I1BmFRMkE)wdFC|AeG_k?0{0U5@$o|tf1kWlkB%E`Se<@;}{_?i%<>Rd( z;}jvsIlsQ`&AMqCE3i8l8^D&Y=X_pcu-WMn4tYV30P=ix^?6n+YZLW*)dMw-7HGCZ z8vb3$iUT)Rs%a2H`f+wVUozc;{_atEtF9cuj0!vH9*FgejZqDPQ3m%5sv(s!z|}5N zLlmsth9uS#o-ds;y}43p5*L2=X+*-ArZmsFcRDwVfqFg)L2TfN0^fK@5rN8KjM#NZ z2i z4mW1!Dg&Q~gu?C`9D*eWDYA!{YXw z*sSgG`Yru~u+OQ{!VZ^KuF88E5;`<%PLz9tM%m~NF9fdQPW;(5#7W1wTZiQ8)$`)? z7LDKBrdrqhoy$=)Z_6W5QtB_0%{d1Lvt@~1YbOl2CCy?EROeqSZ1oB^`mPKrWzRIk zyakH1ZC5qhayC%U1w5ouJ3Lk=79HN+B1S8CiVT~5L zyl_h?yh>b&@TI@kLMNQLra@g%_glnmr5!>UqfJrn$DyZNom!A zJcDbO$gb2~8L|}&Ydy)3n>pi#yIi`~WVu|G%g6BHF4l?Ybb|p|tMf*AAAS7p+`;Ng z96gDmt>jgTHEi>HOaVk`gt(s&G2I_90@s4OH%z>=)v;i@Y3fvf>%NL9-__!HLfhm< z?ttmj_OY^eb$ZZEeH!Sc7QA}W?_&R;^}W%KfSY$YJ=gWA7N`Au9K-1T(o_UhY}4*W z5v{_rp4rv+2S#6M?1JW;#Qbz#tlvp+&6edQKO(u`1y(0`(`q8!blZSnXvIA~JnCE5 zG*P@Od?+Gh&Ub?P>pS?cvU=B8XoyWb)by!yCV2uu?>2pXJS$}}QT1ORTdAa|GMjtO zIUN(TTwkg}gL$2+3hh!?k{{pF7kiKDk|$61Y~Cyh#LtzwEo7Y%SBt{3F8Bfag~e>o|{npU-yl zpoF}d<7uQc;XIMh;@o-=r9TDJ|AF7Y;BT==5}&;&JRkj9Ef!?YVj?zY<0Us97n|_a zgZ_wcolkMO4c$w&h{Cvkf2fsU7sZm*#1B{BEdk+ooji4sO7+4wb8z{TfT2>ZLv$z3 zwz&YPu~K0bp**E@bma|*nd(wi3%bq0Pa7(GL1CWD1MEW zCW=x$W_9tnL)5*mKlZ5Q zbEQ6aViLyaRcsjh!Hpr9a-xL3PapNeri5P!lz4p zDhefLt`)sv`w{xv?mNQEo}j>{DyB!o4$GG$1f>UE!3*p+hEO1SFKlfw6ErjKuv!7g zJ7AhCWjOF4B(JTo$>`2d_6-Mo)6H7tR8$j=8^6gvi?|i?fr9~EL&nx@V{}oS6qZxS zDc37;;Ch@;QTC2T!M#4}X2{iP7g@@f1zQfHwvIP_1uwjO1B_eV--ezl+)>|LAHBT_ zXi(Bcp+lA4pdT-slZ;Q5#V(|bWD{ID*V?TQ=UcfhZ)*V~^|>|zMw9_rP>lRq*}G3J zOQ54_Zw^%(iiWb%8m8P($@u8u2}MOVG*AXezdc)j=f`B|KmUj2#ee$m{nAo2`(2WDk6u{aQJ2q$a7tTtz%`bNvb&>h^rKa*Y?-%)0md-RT)fb ztb{@USa5_4pA5|Mv#!mcx)e~SvcdU@o@Cnw2UmN4oW0kKZ-C%$QV<0&-eQkZQ4QI6 zK`e+8=SCW~L5r8Ly)q&%+jzkkZ+{1WMaeK8kvWF9;2=V%aWdl{6?N(zbwCSjJ{Qe3 z@TL7;EYr+Q;T$xH&O}Jb4@kx{sZu;725*zf<3( zU&FD8#!TY{cL`@qOKSm!&87=^>@-^$tx5#sN+`llQd)JHCXoReu8Pfq-a9!Fs!>87 z**woFP8NJ9*ZQm~ip-+YRi-@2E?q06vi7|QPCwX=iD+&_2w-E$+D0RSy~<*9QH!VS zXGe`-2rn~*KqN8U6D{gY#j?IW_1YQj1Zd2ENjD2~fNw5-*2AO@{!PY@6HL7tLeTwm7-#wc!dIw%vkC|h7 zCvvTw49)vl7*E4Bs+49&4@>Wfi$_I?sUhhQgeV+Z0qy3rru~t`YEjXpy8Mn~?1fYF zHVgRyntO7Yi*+Rr0;~^KN77A%?rsAqIS`QSd5_SM(yi!}Uy9j5RfCnchdCcSINx6V zq2T3m_3-F<*r!)9gHuLATQv++mLZE=7ixn8Iqrx*PEIsuzhF|E(cR3aLg1S{9b4LQ zTO1l)IWX&B^qMuRT-}#NGla&Xcp6z)iwGdB(>W`fsyMfZ8Jjb7$t@q4@93nfEw%1p zy(t-`1RE_0I`BtcXO3J&S4g(3*p;#h^k+V1WNg52qHHG~`)hEJ!K}pf43!zG9y6zV z+8IMeYd3UMWKZCXN%(!YpJeKpALhk-TlpqV2qOKG?iDA|`;~|~IFcd?Ux8{R_f2-rPU?K$Z){2v zGX{2WKd9y>>Uh>r@#G;+!MI=W>B(F+wGEoXsX0-ZPUn`AS(M$&3Lk!_U~uI%HG zM+{3c=oH@ACXW*#Lv4Tw_@l2)UgDit%zL%Hiv|q(t!u$t2A;%1}NV z|1vb}U8lrIcv2>k^2aksRR~)`oIi^soeK^!)dB1pF@Bznc>JBtqv5;RbYe0OW}HeS z8SDF1Si1qx@D^J;0}wji#(oK-;;E0ENGy&EC6XBK?6~TVRB>6iFW=^Vxf zl#+MN;@yQocy}ye(OqxL$4N6ae6wq}4L`l!-@kmwCCKI_VW{fi8;e_q|46FQ zQLhC3kgUR@qQpB4)2nz15SuD5&4}+4amwjT�IjIR;4`a+OD`XE=BC_$vI~ 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 jdwB2^$PeuSl}rR literal 0 HcmV?d00001 diff --git a/week-0/day-3/venv/share/python-wheels/progress-1.2-py2.py3-none-any.whl b/week-0/day-3/venv/share/python-wheels/progress-1.2-py2.py3-none-any.whl new file mode 100644 index 0000000000000000000000000000000000000000..df711803849fccd7438961472d741fadc954bd8e GIT binary patch literal 9606 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 lm#Y64K=AoU!~aeHuNh^})v4-E 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

    *T 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%0ACv3zp0Ry$ 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 p=U&hb}yZ--KX*!QnQ;zgLh`9G~)k{twov%YFa= literal 0 HcmV?d00001 diff --git a/week-0/day-3/venv/share/python-wheels/six-1.11.0-py2.py3-none-any.whl b/week-0/day-3/venv/share/python-wheels/six-1.11.0-py2.py3-none-any.whl new file mode 100644 index 0000000000000000000000000000000000000000..40c26d83dbc95c3fe3738298a2b67eb07343ac02 GIT binary patch literal 10720 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 WWuX4!?gL={oZx>dGD`iQr~d=Z!Mh6p literal 0 HcmV?d00001 diff --git a/week-0/day-3/venv/share/python-wheels/urllib3-1.22-py2.py3-none-any.whl b/week-0/day-3/venv/share/python-wheels/urllib3-1.22-py2.py3-none-any.whl new file mode 100644 index 0000000000000000000000000000000000000000..62fca28e15e00b19c91293eec7edc1324f0102fe GIT binary patch literal 124700 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⚩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

    SF3*%0+D3jiw!Rd8_ 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 E0FJf?DgXcg literal 0 HcmV?d00001 diff --git a/week-0/day-3/venv/share/python-wheels/webencodings-0.5-py2.py3-none-any.whl b/week-0/day-3/venv/share/python-wheels/webencodings-0.5-py2.py3-none-any.whl new file mode 100644 index 0000000000000000000000000000000000000000..9bbaed0c4f2e61af4b2bd830b59b96d98a2557b1 GIT binary patch literal 11646 zcma)?bx>Sgm+l*P_YQ&J8XSVVySr-|m&V;8Sa5fD3l=Ou(BST_!5xAP-%QQC^YY#M z-g{2%>QnoVU++3+?X}l>>QR(|g2n~_0Puhf=|Fj0u%DP1BmjU04FJ%-&bpczo7tM! znSyLBoIWx!urru~oWLJJw&r$>qGBo{%2JA|QVQ}6j!s}3l@<9VChU$|m5f6nObEzY zTUkhsMrm0QON``*LqbfX{%Gsa@z(Y}eLID^F@~Bl`Z8>u>-*=?^P1?)`re;(jYI5< zjY1ji-a(o!+~_`WwvGq~K1|E?Q7o3$D}24tr5z709c>TN23Zr-qM&yN@6Kx@98%O~ zkQ4}D)pw=`IU5QuZLUk7wGhvvtIW31OC2n|g0m-_u0PBKT5~0csK+8T^=be#nT z!G;U%53PyyFDP8vQFHhrc)7VA#NgvqOiip9Qi1(xe3TU7=LS0$y3IXEv&%8-JEqE* zodkizNdpWJTM1t+6ivx8K0~A-lE;4NqC%=diK<%O1j#nsv6)4)(knsoJUqGBiqeS(_Ux+hWDg*kd6>CAWY1@83!9Oy8fr2K&Jip5{$4l>RZ^cjd zQxV@gY$+cC&(+kdd1>{rvw!OT0@&)wH_aJT*(J?wD$AVCWEz`3|3s^>S@WmG5en&2 z$(rJk-iMTaFKAJln`V`U+5jmLJy7fx=IrNfjE?cCH?qk4^ax7$GIr|ZTxei

    MD% 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 literal 0 HcmV?d00001 diff --git a/week-0/day-3/venv/share/python-wheels/wheel-0.30.0-py2.py3-none-any.whl b/week-0/day-3/venv/share/python-wheels/wheel-0.30.0-py2.py3-none-any.whl new file mode 100644 index 0000000000000000000000000000000000000000..527fefd066e5a5ba17e4efa50cea2b5f911bda37 GIT binary patch literal 48886 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

    `%Am7 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ໞcf$(9E>UWtqg`Q1b?HJnx@uIBTK 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 Rm#}Y*^zFyP48?;=GQ|i0+8)>a5DF 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

  • MD% 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 literal 0 HcmV?d00001 diff --git a/week-0/day-3/my_todo_app/venvironment/share/python-wheels/wheel-0.30.0-py2.py3-none-any.whl b/week-0/day-3/my_todo_app/venvironment/share/python-wheels/wheel-0.30.0-py2.py3-none-any.whl new file mode 100644 index 0000000000000000000000000000000000000000..527fefd066e5a5ba17e4efa50cea2b5f911bda37 GIT binary patch literal 48886 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. +# Ported to Python 3.3 venv by Andrew Svetlov + +alias deactivate 'test $?_OLD_VIRTUAL_PATH != 0 && setenv PATH "$_OLD_VIRTUAL_PATH" && unset _OLD_VIRTUAL_PATH; rehash; test $?_OLD_VIRTUAL_PROMPT != 0 && set prompt="$_OLD_VIRTUAL_PROMPT" && unset _OLD_VIRTUAL_PROMPT; unsetenv VIRTUAL_ENV; test "\!:*" != "nondestructive" && unalias deactivate' + +# Unset irrelevant variables. +deactivate nondestructive + +setenv VIRTUAL_ENV "/home/piyush-pc/Documents/homework_day3/academy-hackathon/week-0/day-3/venv" + +set _OLD_VIRTUAL_PATH="$PATH" +setenv PATH "$VIRTUAL_ENV/bin:$PATH" + + +set _OLD_VIRTUAL_PROMPT="$prompt" + +if (! "$?VIRTUAL_ENV_DISABLE_PROMPT") then + if ("venv" != "") then + set env_name = "venv" + else + if (`basename "VIRTUAL_ENV"` == "__") then + # special case for Aspen magic directories + # see http://www.zetadev.com/software/aspen/ + set env_name = `basename \`dirname "$VIRTUAL_ENV"\`` + else + set env_name = `basename "$VIRTUAL_ENV"` + endif + endif + set prompt = "[$env_name] $prompt" + unset env_name +endif + +alias pydoc python -m pydoc + +rehash diff --git a/week-0/day-3/venv/bin/activate.fish b/week-0/day-3/venv/bin/activate.fish new file mode 100644 index 00000000..2f8d9c64 --- /dev/null +++ b/week-0/day-3/venv/bin/activate.fish @@ -0,0 +1,75 @@ +# This file must be used with ". bin/activate.fish" *from fish* (http://fishshell.org) +# you cannot run it directly + +function deactivate -d "Exit virtualenv and return to normal shell environment" + # reset old environment variables + if test -n "$_OLD_VIRTUAL_PATH" + set -gx PATH $_OLD_VIRTUAL_PATH + set -e _OLD_VIRTUAL_PATH + end + if test -n "$_OLD_VIRTUAL_PYTHONHOME" + set -gx PYTHONHOME $_OLD_VIRTUAL_PYTHONHOME + set -e _OLD_VIRTUAL_PYTHONHOME + end + + if test -n "$_OLD_FISH_PROMPT_OVERRIDE" + functions -e fish_prompt + set -e _OLD_FISH_PROMPT_OVERRIDE + functions -c _old_fish_prompt fish_prompt + functions -e _old_fish_prompt + end + + set -e VIRTUAL_ENV + if test "$argv[1]" != "nondestructive" + # Self destruct! + functions -e deactivate + end +end + +# unset irrelevant variables +deactivate nondestructive + +set -gx VIRTUAL_ENV "/home/piyush-pc/Documents/homework_day3/academy-hackathon/week-0/day-3/venv" + +set -gx _OLD_VIRTUAL_PATH $PATH +set -gx PATH "$VIRTUAL_ENV/bin" $PATH + +# unset PYTHONHOME if set +if set -q PYTHONHOME + set -gx _OLD_VIRTUAL_PYTHONHOME $PYTHONHOME + set -e PYTHONHOME +end + +if test -z "$VIRTUAL_ENV_DISABLE_PROMPT" + # fish uses a function instead of an env var to generate the prompt. + + # save the current fish_prompt function as the function _old_fish_prompt + functions -c fish_prompt _old_fish_prompt + + # with the original prompt function renamed, we can override with our own. + function fish_prompt + # Save the return status of the last command + set -l old_status $status + + # Prompt override? + if test -n "(venv) " + printf "%s%s" "(venv) " (set_color normal) + else + # ...Otherwise, prepend env + set -l _checkbase (basename "$VIRTUAL_ENV") + if test $_checkbase = "__" + # special case for Aspen magic directories + # see http://www.zetadev.com/software/aspen/ + printf "%s[%s]%s " (set_color -b blue white) (basename (dirname "$VIRTUAL_ENV")) (set_color normal) + else + printf "%s(%s)%s" (set_color -b blue white) (basename "$VIRTUAL_ENV") (set_color normal) + end + end + + # Restore the return status of the previous command. + echo "exit $old_status" | . + _old_fish_prompt + end + + set -gx _OLD_FISH_PROMPT_OVERRIDE "$VIRTUAL_ENV" +end diff --git a/week-0/day-3/venv/bin/easy_install b/week-0/day-3/venv/bin/easy_install new file mode 100755 index 00000000..f93b669b --- /dev/null +++ b/week-0/day-3/venv/bin/easy_install @@ -0,0 +1,11 @@ +#!/home/piyush-pc/Documents/homework_day3/academy-hackathon/week-0/day-3/venv/bin/python3 + +# -*- coding: utf-8 -*- +import re +import sys + +from setuptools.command.easy_install import main + +if __name__ == '__main__': + sys.argv[0] = re.sub(r'(-script\.pyw?|\.exe)?$', '', sys.argv[0]) + sys.exit(main()) diff --git a/week-0/day-3/venv/bin/easy_install-3.6 b/week-0/day-3/venv/bin/easy_install-3.6 new file mode 100755 index 00000000..f93b669b --- /dev/null +++ b/week-0/day-3/venv/bin/easy_install-3.6 @@ -0,0 +1,11 @@ +#!/home/piyush-pc/Documents/homework_day3/academy-hackathon/week-0/day-3/venv/bin/python3 + +# -*- coding: utf-8 -*- +import re +import sys + +from setuptools.command.easy_install import main + +if __name__ == '__main__': + sys.argv[0] = re.sub(r'(-script\.pyw?|\.exe)?$', '', sys.argv[0]) + sys.exit(main()) diff --git a/week-0/day-3/venv/bin/pip b/week-0/day-3/venv/bin/pip new file mode 100755 index 00000000..d2897025 --- /dev/null +++ b/week-0/day-3/venv/bin/pip @@ -0,0 +1,11 @@ +#!/home/piyush-pc/Documents/homework_day3/academy-hackathon/week-0/day-3/venv/bin/python3 + +# -*- coding: utf-8 -*- +import re +import sys + +from pip import main + +if __name__ == '__main__': + sys.argv[0] = re.sub(r'(-script\.pyw?|\.exe)?$', '', sys.argv[0]) + sys.exit(main()) diff --git a/week-0/day-3/venv/bin/pip3 b/week-0/day-3/venv/bin/pip3 new file mode 100755 index 00000000..d2897025 --- /dev/null +++ b/week-0/day-3/venv/bin/pip3 @@ -0,0 +1,11 @@ +#!/home/piyush-pc/Documents/homework_day3/academy-hackathon/week-0/day-3/venv/bin/python3 + +# -*- coding: utf-8 -*- +import re +import sys + +from pip import main + +if __name__ == '__main__': + sys.argv[0] = re.sub(r'(-script\.pyw?|\.exe)?$', '', sys.argv[0]) + sys.exit(main()) diff --git a/week-0/day-3/venv/bin/pip3.6 b/week-0/day-3/venv/bin/pip3.6 new file mode 100755 index 00000000..d2897025 --- /dev/null +++ b/week-0/day-3/venv/bin/pip3.6 @@ -0,0 +1,11 @@ +#!/home/piyush-pc/Documents/homework_day3/academy-hackathon/week-0/day-3/venv/bin/python3 + +# -*- coding: utf-8 -*- +import re +import sys + +from pip import main + +if __name__ == '__main__': + sys.argv[0] = re.sub(r'(-script\.pyw?|\.exe)?$', '', sys.argv[0]) + sys.exit(main()) diff --git a/week-0/day-3/venv/bin/python b/week-0/day-3/venv/bin/python new file mode 120000 index 00000000..b8a0adbb --- /dev/null +++ b/week-0/day-3/venv/bin/python @@ -0,0 +1 @@ +python3 \ No newline at end of file diff --git a/week-0/day-3/venv/bin/python3 b/week-0/day-3/venv/bin/python3 new file mode 120000 index 00000000..ae65fdaa --- /dev/null +++ b/week-0/day-3/venv/bin/python3 @@ -0,0 +1 @@ +/usr/bin/python3 \ No newline at end of file diff --git a/week-0/day-3/venv/lib/python3.6/site-packages/__pycache__/easy_install.cpython-36.pyc b/week-0/day-3/venv/lib/python3.6/site-packages/__pycache__/easy_install.cpython-36.pyc new file mode 100644 index 0000000000000000000000000000000000000000..9ad55d4582b77d5b0469efb1588344d87828d56b GIT binary patch literal 275 zcmYk!y-LJD5C`zt-KgR4oBlirtUevt+zMznjK)`#hpdX TztC1hB`-;0{Agt~C;Q|JA?-}R literal 0 HcmV?d00001 diff --git a/week-0/day-3/venv/lib/python3.6/site-packages/easy_install.py b/week-0/day-3/venv/lib/python3.6/site-packages/easy_install.py new file mode 100644 index 00000000..d87e9840 --- /dev/null +++ b/week-0/day-3/venv/lib/python3.6/site-packages/easy_install.py @@ -0,0 +1,5 @@ +"""Run the EasyInstall command""" + +if __name__ == '__main__': + from setuptools.command.easy_install import main + main() diff --git a/week-0/day-3/venv/lib/python3.6/site-packages/pip-9.0.1.dist-info/DESCRIPTION.rst b/week-0/day-3/venv/lib/python3.6/site-packages/pip-9.0.1.dist-info/DESCRIPTION.rst new file mode 100644 index 00000000..8ef94c43 --- /dev/null +++ b/week-0/day-3/venv/lib/python3.6/site-packages/pip-9.0.1.dist-info/DESCRIPTION.rst @@ -0,0 +1,39 @@ +pip +=== + +The `PyPA recommended +`_ +tool for installing Python packages. + +* `Installation `_ +* `Documentation `_ +* `Changelog `_ +* `Github Page `_ +* `Issue Tracking `_ +* `User mailing list `_ +* `Dev mailing list `_ +* User IRC: #pypa on Freenode. +* Dev IRC: #pypa-dev on Freenode. + + +.. image:: https://img.shields.io/pypi/v/pip.svg + :target: https://pypi.python.org/pypi/pip + +.. image:: https://img.shields.io/travis/pypa/pip/master.svg + :target: http://travis-ci.org/pypa/pip + +.. image:: https://img.shields.io/appveyor/ci/pypa/pip.svg + :target: https://ci.appveyor.com/project/pypa/pip/history + +.. image:: https://readthedocs.org/projects/pip/badge/?version=stable + :target: https://pip.pypa.io/en/stable + +Code of Conduct +--------------- + +Everyone interacting in the pip project's codebases, issue trackers, chat +rooms, and mailing lists is expected to follow the `PyPA Code of Conduct`_. + +.. _PyPA Code of Conduct: https://www.pypa.io/en/latest/code-of-conduct/ + + diff --git a/week-0/day-3/venv/lib/python3.6/site-packages/pip-9.0.1.dist-info/INSTALLER b/week-0/day-3/venv/lib/python3.6/site-packages/pip-9.0.1.dist-info/INSTALLER new file mode 100644 index 00000000..a1b589e3 --- /dev/null +++ b/week-0/day-3/venv/lib/python3.6/site-packages/pip-9.0.1.dist-info/INSTALLER @@ -0,0 +1 @@ +pip diff --git a/week-0/day-3/venv/lib/python3.6/site-packages/pip-9.0.1.dist-info/METADATA b/week-0/day-3/venv/lib/python3.6/site-packages/pip-9.0.1.dist-info/METADATA new file mode 100644 index 00000000..291a4a0e --- /dev/null +++ b/week-0/day-3/venv/lib/python3.6/site-packages/pip-9.0.1.dist-info/METADATA @@ -0,0 +1,70 @@ +Metadata-Version: 2.0 +Name: pip +Version: 9.0.1 +Summary: The PyPA recommended tool for installing Python packages. +Home-page: https://pip.pypa.io/ +Author: The pip developers +Author-email: python-virtualenv@groups.google.com +License: MIT +Keywords: easy_install distutils setuptools egg virtualenv +Platform: UNKNOWN +Classifier: Development Status :: 5 - Production/Stable +Classifier: Intended Audience :: Developers +Classifier: License :: OSI Approved :: MIT License +Classifier: Topic :: Software Development :: Build Tools +Classifier: Programming Language :: Python :: 2 +Classifier: Programming Language :: Python :: 2.6 +Classifier: Programming Language :: Python :: 2.7 +Classifier: Programming Language :: Python :: 3 +Classifier: Programming Language :: Python :: 3.3 +Classifier: Programming Language :: Python :: 3.4 +Classifier: Programming Language :: Python :: 3.5 +Classifier: Programming Language :: Python :: Implementation :: PyPy +Requires-Python: >=2.6,!=3.0.*,!=3.1.*,!=3.2.* +Provides-Extra: testing +Provides-Extra: testing +Requires-Dist: mock; extra == 'testing' +Requires-Dist: pretend; extra == 'testing' +Requires-Dist: pytest; extra == 'testing' +Requires-Dist: scripttest (>=1.3); extra == 'testing' +Requires-Dist: virtualenv (>=1.10); extra == 'testing' + +pip +=== + +The `PyPA recommended +`_ +tool for installing Python packages. + +* `Installation `_ +* `Documentation `_ +* `Changelog `_ +* `Github Page `_ +* `Issue Tracking `_ +* `User mailing list `_ +* `Dev mailing list `_ +* User IRC: #pypa on Freenode. +* Dev IRC: #pypa-dev on Freenode. + + +.. image:: https://img.shields.io/pypi/v/pip.svg + :target: https://pypi.python.org/pypi/pip + +.. image:: https://img.shields.io/travis/pypa/pip/master.svg + :target: http://travis-ci.org/pypa/pip + +.. image:: https://img.shields.io/appveyor/ci/pypa/pip.svg + :target: https://ci.appveyor.com/project/pypa/pip/history + +.. image:: https://readthedocs.org/projects/pip/badge/?version=stable + :target: https://pip.pypa.io/en/stable + +Code of Conduct +--------------- + +Everyone interacting in the pip project's codebases, issue trackers, chat +rooms, and mailing lists is expected to follow the `PyPA Code of Conduct`_. + +.. _PyPA Code of Conduct: https://www.pypa.io/en/latest/code-of-conduct/ + + diff --git a/week-0/day-3/venv/lib/python3.6/site-packages/pip-9.0.1.dist-info/RECORD b/week-0/day-3/venv/lib/python3.6/site-packages/pip-9.0.1.dist-info/RECORD new file mode 100644 index 00000000..c2416014 --- /dev/null +++ b/week-0/day-3/venv/lib/python3.6/site-packages/pip-9.0.1.dist-info/RECORD @@ -0,0 +1,123 @@ +pip/__init__.py,sha256=ds3YAAeZwhX6e8yfxjLCxPlOb37Bh42ew09XEPJjQGE,11537 +pip/__main__.py,sha256=V6Kh-IEDEFpt1cahRE6MajUF_14qJR_Qsvn4MjWZXzE,584 +pip/basecommand.py,sha256=TTlmZesQ4Vuxcto2KqwZGmgmN5ioHEl_DeFev9ie_SA,11910 +pip/baseparser.py,sha256=AKMOeF3fTrRroiv0DmTQbdiLW0DQux2KqGC_dJJB9d0,10465 +pip/cmdoptions.py,sha256=pRptFz05iFEfSW4Flg3x1_P92sYlFvq7elhnwujikNY,16473 +pip/download.py,sha256=rA0wbmqC2n9ejX481YJSidmKgQqQDjdaxkHkHlAN68k,32171 +pip/exceptions.py,sha256=BvqH-Jw3tP2b-2IJ2kjrQemOAPMqKrQMLRIZHZQpJXk,8121 +pip/index.py,sha256=oVFx3dW7KTFL3Ecc1t1Kz04C6ZCSk4T1gnzB7j332hg,39952 +pip/locations.py,sha256=9rJRlgonC6QC2zGDIn_7mXaoZ9_tF_IHM2BQhWVRgbo,5626 +pip/pep425tags.py,sha256=q3kec4f6NHszuGYIhGIbVvs896D06uJAnKFgJ_wce44,10980 +pip/status_codes.py,sha256=F6uDG6Gj7RNKQJUDnd87QKqI16Us-t-B0wPF_4QMpWc,156 +pip/wheel.py,sha256=QSWmGs2ui-n4UMWm0JUY6aMCcwNKungVzbWsxI9KlJQ,32010 +pip/_vendor/__init__.py,sha256=L-0x9jj0HSZen1Fm2U0GUbxfjfwQPIXc4XJ4IAxy8D8,4804 +pip/commands/__init__.py,sha256=2Uq3HCdjchJD9FL1LB7rd5v6UySVAVizX0W3EX3hIoE,2244 +pip/commands/check.py,sha256=-A7GI1-WZBh9a4P6UoH_aR-J7I8Lz8ly7m3wnCjmevs,1382 +pip/commands/completion.py,sha256=kkPgVX7SUcJ_8Juw5GkgWaxHN9_45wmAr9mGs1zXEEs,2453 +pip/commands/download.py,sha256=8RuuPmSYgAq3iEDTqZY_1PDXRqREdUULHNjWJeAv7Mo,7810 +pip/commands/freeze.py,sha256=h6-yFMpjCjbNj8-gOm5UuoF6cg14N5rPV4TCi3_CeuI,2835 +pip/commands/hash.py,sha256=MCt4jEFyfoce0lVeNEz1x49uaTY-VDkKiBvvxrVcHkw,1597 +pip/commands/help.py,sha256=84HWkEdnGP_AEBHnn8gJP2Te0XTXRKFoXqXopbOZTNo,982 +pip/commands/install.py,sha256=o-CR1TKf-b1qaFv47nNlawqsIfDjXyIzv_iJUw1Trag,18069 +pip/commands/list.py,sha256=93bCiFyt2Qut_YHkYHJMZHpXladmxsjS-yOtZeb3uqI,11369 +pip/commands/search.py,sha256=oTs9QNdefnrmCV_JeftG0PGiMuYVmiEDF1OUaYsmDao,4502 +pip/commands/show.py,sha256=ZYM57_7U8KP9MQIIyHKQdZxmiEZByy-DRzB697VFoTY,5891 +pip/commands/uninstall.py,sha256=tz8cXz4WdpUdnt3RvpdQwH6_SNMB50egBIZWa1dwfcc,2884 +pip/commands/wheel.py,sha256=z5SEhws2YRMb0Ml1IEkg6jFZMLRpLl86bHCrQbYt5zo,7729 +pip/compat/__init__.py,sha256=2Xs_IpsmdRgHbQgQO0c8_lPvHJnQXHyGWxPbLbYJL4c,4672 +pip/compat/dictconfig.py,sha256=dRrelPDWrceDSzFT51RTEVY2GuM7UDyc5Igh_tn4Fvk,23096 +pip/models/__init__.py,sha256=0Rs7_RA4DxeOkWT5Cq4CQzDrSEhvYcN3TH2cazr72PE,71 +pip/models/index.py,sha256=pUfbO__v3mD9j-2n_ClwPS8pVyx4l2wIwyvWt8GMCRA,487 +pip/operations/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0 +pip/operations/check.py,sha256=uwUN9cs1sPo7c0Sj6pRrSv7b22Pk29SXUImTelVchMQ,1590 +pip/operations/freeze.py,sha256=k-7w7LsM-RpPv7ERBzHiPpYkH-GuYfHLyR-Cp_1VPL0,5194 +pip/req/__init__.py,sha256=vFwZY8_Vc1WU1zFAespg1My_r_AT3n7cN0W9eX0EFqk,276 +pip/req/req_file.py,sha256=fG9MDsXUNPhmGwxUiwrIXEynyD8Q7s3L47-hLZPDXq0,11926 +pip/req/req_install.py,sha256=gYrH-lwQMmt55VVbav_EtRIPu94cQbHFHm_Kq6AeHbg,46487 +pip/req/req_set.py,sha256=jHspXqcA2FxcF05dgUIAZ5huYPv6bn0wRUX0Z7PKmaA,34462 +pip/req/req_uninstall.py,sha256=fdH2VgCjEC8NRYDS7fRu3ZJaBBUEy-N5muwxDX5MBNM,6897 +pip/utils/__init__.py,sha256=zk1vF2EzHZX1ZKPwgeC9I6yKvs8IJ6NZEfXgp2IP8hI,27912 +pip/utils/appdirs.py,sha256=kj2LK-I2fC5QnEh_A_v-ev_IQMcXaWWF5DE39sNvCLQ,8811 +pip/utils/build.py,sha256=4smLRrfSCmXmjEnVnMFh2tBEpNcSLRe6J0ejZJ-wWJE,1312 +pip/utils/deprecation.py,sha256=X_FMjtDbMJqfqEkdRrki-mYyIdPB6I6DHUTCA_ChY6M,2232 +pip/utils/encoding.py,sha256=NQxGiFS5GbeAveLZTnx92t5r0PYqvt0iRnP2u9SGG1w,971 +pip/utils/filesystem.py,sha256=ZEVBuYM3fqr2_lgOESh4Y7fPFszGD474zVm_M3Mb5Tk,899 +pip/utils/glibc.py,sha256=jcQYjt_oJLPKVZB28Kauy4Sw70zS-wawxoU1HHX36_0,2939 +pip/utils/hashes.py,sha256=oMk7cd3PbJgzpSQyXq1MytMud5f6H5Oa2YY5hYuCq6I,2866 +pip/utils/logging.py,sha256=7yWu4gZw-Qclj7X80QVdpGWkdTWGKT4LiUVKcE04pro,3327 +pip/utils/outdated.py,sha256=fNwOCL5r2EftPGhgCYGMKu032HC8cV-JAr9lp0HmToM,5455 +pip/utils/packaging.py,sha256=qhmli14odw6DIhWJgQYS2Q0RrSbr8nXNcG48f5yTRms,2080 +pip/utils/setuptools_build.py,sha256=0blfscmNJW_iZ5DcswJeDB_PbtTEjfK9RL1R1WEDW2E,278 +pip/utils/ui.py,sha256=pbDkSAeumZ6jdZcOJ2yAbx8iBgeP2zfpqNnLJK1gskQ,11597 +pip/vcs/__init__.py,sha256=WafFliUTHMmsSISV8PHp1M5EXDNSWyJr78zKaQmPLdY,12374 +pip/vcs/bazaar.py,sha256=tYTwc4b4off8mr0O2o8SiGejqBDJxcbDBMSMd9-ISYc,3803 +pip/vcs/git.py,sha256=5LfWryi78A-2ULjEZJvCTarJ_3l8venwXASlwm8hiug,11197 +pip/vcs/mercurial.py,sha256=xG6rDiwHCRytJEs23SIHBXl_SwQo2jkkdD_6rVVP5h4,3472 +pip/vcs/subversion.py,sha256=GAuX2Sk7IZvJyEzENKcVld_wGBrQ3fpXDlXjapZEYdI,9350 +pip-9.0.1.dist-info/DESCRIPTION.rst,sha256=Va8Wj1XBpTbVQ2Z41mZRJdALEeziiS_ZewWn1H2ecY4,1287 +pip-9.0.1.dist-info/METADATA,sha256=LZLdUBpPmFB4Of_9wIHegCXhbmiByzOv6WCGs3rixt0,2553 +pip-9.0.1.dist-info/RECORD,, +pip-9.0.1.dist-info/WHEEL,sha256=kdsN-5OJAZIiHN-iO4Rhl82KyS0bDWf4uBwMbkNafr8,110 +pip-9.0.1.dist-info/entry_points.txt,sha256=Q-fR2tcp9DRdeXoGn1wR67Xecy32o5EyQEnzDghwqqk,68 +pip-9.0.1.dist-info/metadata.json,sha256=eAfMY0s5HjwtLLjIZ9LYDxWocl2her-knzH7qTJ38CU,1565 +pip-9.0.1.dist-info/top_level.txt,sha256=zuuue4knoyJ-UwPPXg8fezS7VCrXJQrAP7zeNuwvFQg,4 +../../../bin/pip,sha256=obEpfgVKoLNAi8kcq_m8Xm8k76ezIpeYNHnnMPA_Hts,277 +../../../bin/pip3,sha256=obEpfgVKoLNAi8kcq_m8Xm8k76ezIpeYNHnnMPA_Hts,277 +../../../bin/pip3.6,sha256=obEpfgVKoLNAi8kcq_m8Xm8k76ezIpeYNHnnMPA_Hts,277 +pip-9.0.1.dist-info/INSTALLER,sha256=zuuue4knoyJ-UwPPXg8fezS7VCrXJQrAP7zeNuwvFQg,4 +pip/models/__pycache__/index.cpython-36.pyc,, +pip/models/__pycache__/__init__.cpython-36.pyc,, +pip/vcs/__pycache__/bazaar.cpython-36.pyc,, +pip/vcs/__pycache__/git.cpython-36.pyc,, +pip/vcs/__pycache__/__init__.cpython-36.pyc,, +pip/vcs/__pycache__/mercurial.cpython-36.pyc,, +pip/vcs/__pycache__/subversion.cpython-36.pyc,, +pip/operations/__pycache__/freeze.cpython-36.pyc,, +pip/operations/__pycache__/__init__.cpython-36.pyc,, +pip/operations/__pycache__/check.cpython-36.pyc,, +pip/req/__pycache__/req_file.cpython-36.pyc,, +pip/req/__pycache__/req_install.cpython-36.pyc,, +pip/req/__pycache__/req_set.cpython-36.pyc,, +pip/req/__pycache__/__init__.cpython-36.pyc,, +pip/req/__pycache__/req_uninstall.cpython-36.pyc,, +pip/commands/__pycache__/help.cpython-36.pyc,, +pip/commands/__pycache__/uninstall.cpython-36.pyc,, +pip/commands/__pycache__/install.cpython-36.pyc,, +pip/commands/__pycache__/download.cpython-36.pyc,, +pip/commands/__pycache__/search.cpython-36.pyc,, +pip/commands/__pycache__/hash.cpython-36.pyc,, +pip/commands/__pycache__/list.cpython-36.pyc,, +pip/commands/__pycache__/completion.cpython-36.pyc,, +pip/commands/__pycache__/freeze.cpython-36.pyc,, +pip/commands/__pycache__/__init__.cpython-36.pyc,, +pip/commands/__pycache__/check.cpython-36.pyc,, +pip/commands/__pycache__/show.cpython-36.pyc,, +pip/commands/__pycache__/wheel.cpython-36.pyc,, +pip/_vendor/__pycache__/__init__.cpython-36.pyc,, +pip/compat/__pycache__/dictconfig.cpython-36.pyc,, +pip/compat/__pycache__/__init__.cpython-36.pyc,, +pip/utils/__pycache__/filesystem.cpython-36.pyc,, +pip/utils/__pycache__/setuptools_build.cpython-36.pyc,, +pip/utils/__pycache__/deprecation.cpython-36.pyc,, +pip/utils/__pycache__/encoding.cpython-36.pyc,, +pip/utils/__pycache__/outdated.cpython-36.pyc,, +pip/utils/__pycache__/glibc.cpython-36.pyc,, +pip/utils/__pycache__/ui.cpython-36.pyc,, +pip/utils/__pycache__/build.cpython-36.pyc,, +pip/utils/__pycache__/packaging.cpython-36.pyc,, +pip/utils/__pycache__/logging.cpython-36.pyc,, +pip/utils/__pycache__/hashes.cpython-36.pyc,, +pip/utils/__pycache__/appdirs.cpython-36.pyc,, +pip/utils/__pycache__/__init__.cpython-36.pyc,, +pip/__pycache__/index.cpython-36.pyc,, +pip/__pycache__/pep425tags.cpython-36.pyc,, +pip/__pycache__/status_codes.cpython-36.pyc,, +pip/__pycache__/download.cpython-36.pyc,, +pip/__pycache__/exceptions.cpython-36.pyc,, +pip/__pycache__/cmdoptions.cpython-36.pyc,, +pip/__pycache__/basecommand.cpython-36.pyc,, +pip/__pycache__/baseparser.cpython-36.pyc,, +pip/__pycache__/__init__.cpython-36.pyc,, +pip/__pycache__/locations.cpython-36.pyc,, +pip/__pycache__/__main__.cpython-36.pyc,, +pip/__pycache__/wheel.cpython-36.pyc,, diff --git a/week-0/day-3/venv/lib/python3.6/site-packages/pip-9.0.1.dist-info/WHEEL b/week-0/day-3/venv/lib/python3.6/site-packages/pip-9.0.1.dist-info/WHEEL new file mode 100644 index 00000000..7332a419 --- /dev/null +++ b/week-0/day-3/venv/lib/python3.6/site-packages/pip-9.0.1.dist-info/WHEEL @@ -0,0 +1,6 @@ +Wheel-Version: 1.0 +Generator: bdist_wheel (0.30.0) +Root-Is-Purelib: true +Tag: py2-none-any +Tag: py3-none-any + diff --git a/week-0/day-3/venv/lib/python3.6/site-packages/pip-9.0.1.dist-info/entry_points.txt b/week-0/day-3/venv/lib/python3.6/site-packages/pip-9.0.1.dist-info/entry_points.txt new file mode 100644 index 00000000..879fd896 --- /dev/null +++ b/week-0/day-3/venv/lib/python3.6/site-packages/pip-9.0.1.dist-info/entry_points.txt @@ -0,0 +1,5 @@ +[console_scripts] +pip = pip:main +pip3 = pip:main +pip3.6 = pip:main + diff --git a/week-0/day-3/venv/lib/python3.6/site-packages/pip-9.0.1.dist-info/metadata.json b/week-0/day-3/venv/lib/python3.6/site-packages/pip-9.0.1.dist-info/metadata.json new file mode 100644 index 00000000..15c01e9c --- /dev/null +++ b/week-0/day-3/venv/lib/python3.6/site-packages/pip-9.0.1.dist-info/metadata.json @@ -0,0 +1 @@ +{"classifiers": ["Development Status :: 5 - Production/Stable", "Intended Audience :: Developers", "License :: OSI Approved :: MIT License", "Topic :: Software Development :: Build Tools", "Programming Language :: Python :: 2", "Programming Language :: Python :: 2.6", "Programming Language :: Python :: 2.7", "Programming Language :: Python :: 3", "Programming Language :: Python :: 3.3", "Programming Language :: Python :: 3.4", "Programming Language :: Python :: 3.5", "Programming Language :: Python :: Implementation :: PyPy"], "extensions": {"python.commands": {"wrap_console": {"pip": "pip:main", "pip3": "pip:main", "pip3.6": "pip:main"}}, "python.details": {"contacts": [{"email": "python-virtualenv@groups.google.com", "name": "The pip developers", "role": "author"}], "document_names": {"description": "DESCRIPTION.rst"}, "project_urls": {"Home": "https://pip.pypa.io/"}}, "python.exports": {"console_scripts": {"pip": "pip:main", "pip3": "pip:main", "pip3.6": "pip:main"}}}, "extras": ["testing"], "generator": "bdist_wheel (0.30.0)", "keywords": ["easy_install", "distutils", "setuptools", "egg", "virtualenv"], "license": "MIT", "metadata_version": "2.0", "name": "pip", "requires_python": ">=2.6,!=3.0.*,!=3.1.*,!=3.2.*", "run_requires": [{"extra": "testing", "requires": ["mock", "pretend", "pytest", "scripttest (>=1.3)", "virtualenv (>=1.10)"]}], "summary": "The PyPA recommended tool for installing Python packages.", "test_requires": [{"requires": ["mock", "pretend", "pytest", "scripttest (>=1.3)", "virtualenv (>=1.10)"]}], "version": "9.0.1"} \ No newline at end of file diff --git a/week-0/day-3/venv/lib/python3.6/site-packages/pip-9.0.1.dist-info/top_level.txt b/week-0/day-3/venv/lib/python3.6/site-packages/pip-9.0.1.dist-info/top_level.txt new file mode 100644 index 00000000..a1b589e3 --- /dev/null +++ b/week-0/day-3/venv/lib/python3.6/site-packages/pip-9.0.1.dist-info/top_level.txt @@ -0,0 +1 @@ +pip diff --git a/week-0/day-3/venv/lib/python3.6/site-packages/pip/__init__.py b/week-0/day-3/venv/lib/python3.6/site-packages/pip/__init__.py new file mode 100644 index 00000000..3b197d6e --- /dev/null +++ b/week-0/day-3/venv/lib/python3.6/site-packages/pip/__init__.py @@ -0,0 +1,338 @@ +#!/usr/bin/env python +from __future__ import absolute_import + +import locale +import logging +import os +import optparse +import warnings + +import sys +import re + +# 2016-06-17 barry@debian.org: urllib3 1.14 added optional support for socks, +# but if invoked (i.e. imported), it will issue a warning to stderr if socks +# isn't available. requests unconditionally imports urllib3's socks contrib +# module, triggering this warning. The warning breaks DEP-8 tests (because of +# the stderr output) and is just plain annoying in normal usage. I don't want +# to add socks as yet another dependency for pip, nor do I want to allow-stder +# in the DEP-8 tests, so just suppress the warning. pdb tells me this has to +# be done before the import of pip.vcs. +try: + from pip._vendor.requests.packages.urllib3.exceptions import DependencyWarning +except ImportError: + from urllib3.exceptions import DependencyWarning +warnings.filterwarnings("ignore", category=DependencyWarning) # noqa + + +from pip.exceptions import InstallationError, CommandError, PipError +from pip.utils import get_installed_distributions, get_prog +from pip.utils import deprecation, dist_is_editable +from pip.vcs import git, mercurial, subversion, bazaar # noqa +from pip.baseparser import ConfigOptionParser, UpdatingDefaultsHelpFormatter +from pip.commands import get_summaries, get_similar_commands +from pip.commands import commands_dict +try: + from pip._vendor.requests.packages.urllib3.exceptions import ( + InsecureRequestWarning, + ) +except ImportError: + from urllib3.exceptions import ( + InsecureRequestWarning, + ) + +# assignment for flake8 to be happy + +# This fixes a peculiarity when importing via __import__ - as we are +# initialising the pip module, "from pip import cmdoptions" is recursive +# and appears not to work properly in that situation. +import pip.cmdoptions +cmdoptions = pip.cmdoptions + +# The version as used in the setup.py and the docs conf.py +__version__ = "9.0.1" + + +logger = logging.getLogger(__name__) + +# Hide the InsecureRequestWarning from urllib3 +warnings.filterwarnings("ignore", category=InsecureRequestWarning) + + +def autocomplete(): + """Command and option completion for the main option parser (and options) + and its subcommands (and options). + + Enable by sourcing one of the completion shell scripts (bash, zsh or fish). + """ + # Don't complete if user hasn't sourced bash_completion file. + if 'PIP_AUTO_COMPLETE' not in os.environ: + return + cwords = os.environ['COMP_WORDS'].split()[1:] + cword = int(os.environ['COMP_CWORD']) + try: + current = cwords[cword - 1] + except IndexError: + current = '' + + subcommands = [cmd for cmd, summary in get_summaries()] + options = [] + # subcommand + try: + subcommand_name = [w for w in cwords if w in subcommands][0] + except IndexError: + subcommand_name = None + + parser = create_main_parser() + # subcommand options + if subcommand_name: + # special case: 'help' subcommand has no options + if subcommand_name == 'help': + sys.exit(1) + # special case: list locally installed dists for uninstall command + if subcommand_name == 'uninstall' and not current.startswith('-'): + installed = [] + lc = current.lower() + for dist in get_installed_distributions(local_only=True): + if dist.key.startswith(lc) and dist.key not in cwords[1:]: + installed.append(dist.key) + # if there are no dists installed, fall back to option completion + if installed: + for dist in installed: + print(dist) + sys.exit(1) + + subcommand = commands_dict[subcommand_name]() + options += [(opt.get_opt_string(), opt.nargs) + for opt in subcommand.parser.option_list_all + if opt.help != optparse.SUPPRESS_HELP] + + # filter out previously specified options from available options + prev_opts = [x.split('=')[0] for x in cwords[1:cword - 1]] + options = [(x, v) for (x, v) in options if x not in prev_opts] + # filter options by current input + options = [(k, v) for k, v in options if k.startswith(current)] + for option in options: + opt_label = option[0] + # append '=' to options which require args + if option[1]: + opt_label += '=' + print(opt_label) + else: + # show main parser options only when necessary + if current.startswith('-') or current.startswith('--'): + opts = [i.option_list for i in parser.option_groups] + opts.append(parser.option_list) + opts = (o for it in opts for o in it) + + subcommands += [i.get_opt_string() for i in opts + if i.help != optparse.SUPPRESS_HELP] + + print(' '.join([x for x in subcommands if x.startswith(current)])) + sys.exit(1) + + +def create_main_parser(): + parser_kw = { + 'usage': '\n%prog [options]', + 'add_help_option': False, + 'formatter': UpdatingDefaultsHelpFormatter(), + 'name': 'global', + 'prog': get_prog(), + } + + parser = ConfigOptionParser(**parser_kw) + parser.disable_interspersed_args() + + pip_pkg_dir = os.path.dirname(os.path.dirname(os.path.abspath(__file__))) + parser.version = 'pip %s from %s (python %s)' % ( + __version__, pip_pkg_dir, sys.version[:3]) + + # add the general options + gen_opts = cmdoptions.make_option_group(cmdoptions.general_group, parser) + parser.add_option_group(gen_opts) + + parser.main = True # so the help formatter knows + + # create command listing for description + command_summaries = get_summaries() + description = [''] + ['%-27s %s' % (i, j) for i, j in command_summaries] + parser.description = '\n'.join(description) + + return parser + + +def parseopts(args): + parser = create_main_parser() + + # Note: parser calls disable_interspersed_args(), so the result of this + # call is to split the initial args into the general options before the + # subcommand and everything else. + # For example: + # args: ['--timeout=5', 'install', '--user', 'INITools'] + # general_options: ['--timeout==5'] + # args_else: ['install', '--user', 'INITools'] + general_options, args_else = parser.parse_args(args) + + # --version + if general_options.version: + sys.stdout.write(parser.version) + sys.stdout.write(os.linesep) + sys.exit() + + # pip || pip help -> print_help() + if not args_else or (args_else[0] == 'help' and len(args_else) == 1): + parser.print_help() + sys.exit() + + # the subcommand name + cmd_name = args_else[0] + + if cmd_name not in commands_dict: + guess = get_similar_commands(cmd_name) + + msg = ['unknown command "%s"' % cmd_name] + if guess: + msg.append('maybe you meant "%s"' % guess) + + raise CommandError(' - '.join(msg)) + + # all the args without the subcommand + cmd_args = args[:] + cmd_args.remove(cmd_name) + + return cmd_name, cmd_args + + +def check_isolated(args): + isolated = False + + if "--isolated" in args: + isolated = True + + return isolated + + +def main(args=None): + if args is None: + args = sys.argv[1:] + + # Configure our deprecation warnings to be sent through loggers + deprecation.install_warning_logger() + + autocomplete() + + try: + cmd_name, cmd_args = parseopts(args) + except PipError as exc: + sys.stderr.write("ERROR: %s" % exc) + sys.stderr.write(os.linesep) + sys.exit(1) + + # Needed for locale.getpreferredencoding(False) to work + # in pip.utils.encoding.auto_decode + try: + locale.setlocale(locale.LC_ALL, '') + except locale.Error as e: + # setlocale can apparently crash if locale are uninitialized + logger.debug("Ignoring error %s when setting locale", e) + command = commands_dict[cmd_name](isolated=check_isolated(cmd_args)) + return command.main(cmd_args) + + +# ########################################################### +# # Writing freeze files + +class FrozenRequirement(object): + + def __init__(self, name, req, editable, comments=()): + self.name = name + self.req = req + self.editable = editable + self.comments = comments + + _rev_re = re.compile(r'-r(\d+)$') + _date_re = re.compile(r'-(20\d\d\d\d\d\d)$') + + @classmethod + def from_dist(cls, dist, dependency_links): + location = os.path.normcase(os.path.abspath(dist.location)) + comments = [] + from pip.vcs import vcs, get_src_requirement + if dist_is_editable(dist) and vcs.get_backend_name(location): + editable = True + try: + req = get_src_requirement(dist, location) + except InstallationError as exc: + logger.warning( + "Error when trying to get requirement for VCS system %s, " + "falling back to uneditable format", exc + ) + req = None + if req is None: + logger.warning( + 'Could not determine repository location of %s', location + ) + comments.append( + '## !! Could not determine repository location' + ) + req = dist.as_requirement() + editable = False + else: + editable = False + req = dist.as_requirement() + specs = req.specs + assert len(specs) == 1 and specs[0][0] in ["==", "==="], \ + 'Expected 1 spec with == or ===; specs = %r; dist = %r' % \ + (specs, dist) + version = specs[0][1] + ver_match = cls._rev_re.search(version) + date_match = cls._date_re.search(version) + if ver_match or date_match: + svn_backend = vcs.get_backend('svn') + if svn_backend: + svn_location = svn_backend().get_location( + dist, + dependency_links, + ) + if not svn_location: + logger.warning( + 'Warning: cannot find svn location for %s', req) + comments.append( + '## FIXME: could not find svn URL in dependency_links ' + 'for this package:' + ) + else: + comments.append( + '# Installing as editable to satisfy requirement %s:' % + req + ) + if ver_match: + rev = ver_match.group(1) + else: + rev = '{%s}' % date_match.group(1) + editable = True + req = '%s@%s#egg=%s' % ( + svn_location, + rev, + cls.egg_name(dist) + ) + return cls(dist.project_name, req, editable, comments) + + @staticmethod + def egg_name(dist): + name = dist.egg_name() + match = re.search(r'-py\d\.\d$', name) + if match: + name = name[:match.start()] + return name + + def __str__(self): + req = self.req + if self.editable: + req = '-e %s' % req + return '\n'.join(list(self.comments) + [str(req)]) + '\n' + + +if __name__ == '__main__': + sys.exit(main()) diff --git a/week-0/day-3/venv/lib/python3.6/site-packages/pip/__main__.py b/week-0/day-3/venv/lib/python3.6/site-packages/pip/__main__.py new file mode 100644 index 00000000..5556539c --- /dev/null +++ b/week-0/day-3/venv/lib/python3.6/site-packages/pip/__main__.py @@ -0,0 +1,19 @@ +from __future__ import absolute_import + +import os +import sys + +# If we are running from a wheel, add the wheel to sys.path +# This allows the usage python pip-*.whl/pip install pip-*.whl +if __package__ == '': + # __file__ is pip-*.whl/pip/__main__.py + # first dirname call strips of '/__main__.py', second strips off '/pip' + # Resulting path is the name of the wheel itself + # Add that to sys.path so we can import pip + path = os.path.dirname(os.path.dirname(__file__)) + sys.path.insert(0, path) + +import pip # noqa + +if __name__ == '__main__': + sys.exit(pip.main()) diff --git a/week-0/day-3/venv/lib/python3.6/site-packages/pip/__pycache__/__init__.cpython-36.pyc b/week-0/day-3/venv/lib/python3.6/site-packages/pip/__pycache__/__init__.cpython-36.pyc new file mode 100644 index 0000000000000000000000000000000000000000..64e51a648df982eaf5a199de3ee999aebdba9575 GIT binary patch literal 8498 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 literal 0 HcmV?d00001 diff --git a/week-0/day-3/venv/lib/python3.6/site-packages/pip/__pycache__/__main__.cpython-36.pyc b/week-0/day-3/venv/lib/python3.6/site-packages/pip/__pycache__/__main__.cpython-36.pyc new file mode 100644 index 0000000000000000000000000000000000000000..b826aab1d2b130ffb9ec277f40760912b751e3de GIT binary patch literal 374 zcmYjL%TB{E5cDHyowVg4@e>g$J%GdoA-GhW;J_^svXa`RPLsyij?|v>HT;sVocIM! ztfL}fX~(0To!Pyf&CmmDDVd;y8#eL;2JeJ$2f3Olbj4c&8dt8-4e5u zq>8K25yw65aUM$wJtmNhdvbIpc_LF0fkS{gkx4b}Q6F;2E6U<;*oHFfPm9vFb>}2k zjc$#5_Q*5Nn?mh4&t^X5eBHUuNX`wMjy!3tr}kj|gmYc2w#7S0KGKET__0uCS2Qvt ztW_O^k=j{loTpmp&<=8#mwV-W6xMtqa}L1+{9Gx&5&FvRmDR)=+<^ eUFm~ocTFq0THa&u+cSVEVVFfMzQ8Ah0sjRxnPxBm literal 0 HcmV?d00001 diff --git a/week-0/day-3/venv/lib/python3.6/site-packages/pip/__pycache__/basecommand.cpython-36.pyc b/week-0/day-3/venv/lib/python3.6/site-packages/pip/__pycache__/basecommand.cpython-36.pyc new file mode 100644 index 0000000000000000000000000000000000000000..dd9bd74f576b34dcc2f1b986c78e899e4ddf7309 GIT binary patch literal 7210 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 ThTj>$L$poXESk07)x7@!zWK67 literal 0 HcmV?d00001 diff --git a/week-0/day-3/venv/lib/python3.6/site-packages/pip/__pycache__/baseparser.cpython-36.pyc b/week-0/day-3/venv/lib/python3.6/site-packages/pip/__pycache__/baseparser.cpython-36.pyc new file mode 100644 index 0000000000000000000000000000000000000000..d8b2b75f6921058e91f928aa7ba5fb43eeb5d5ab GIT binary patch literal 9271 zcmaJ{TW=dzexDnM!;2`2wq@D5>?9j+%)nyOZZ-?JM&PUyIYv`CjhlFvNHQJq45gul z9QvH0B@xtOv2+_}7YNcm1l^)2iaxa{(9h7P_8au!ytRGGR|xi@zyCQyilVupJ!j6G zIoJQ?_rHvOytY<;=l)MW`=9HE@qfm`&q4h*E+J7cqirygS&7-V+LlRmJF(lgx;t%0 z-3#r4y1Q*x-HYua?oQ(MOYM>xQ%K7FO1q-!Zc^>9wbxX=nAG~~?e%`WUGHzSH~Nis zL$!O!h5p6%#r~!CCDVx9-X<%dygaqqTXzjsW|b!ft3*!k%G7ROMN5^fp=B+)is$F> zTx08aUPq7T(eeUX>TClo8_^4Rev#P^jAmoJ^|Me!emczJbl?v|E+X!WC>ssG#mSAP zDc8e2ktU-o3gZ4S<=HOUN+RP~x|gO29;$eV2m3*GGK>U0chW&O-q&+A9oa~t{jhTq z=;ojsCy`vwANH{LAnZqSi;o5anq@R#5f2{6JR5~cG#C1=|`KU>pm`V69qFT7PD>{%*Nfh zWn{+GV1+9NbGHn%6wzY#te!nFy5_|EM{8nzWkQk+Y|z{N_C?GfH~QgmK&uDC6m$j8 zzoq45JqFnaSr898JnEyysrg%r-W85wmK`)5UZE#%wo!TMo*EOebBC5*fLY=!2%5HZ zM3i);6Y_l_-NPfg|Es~TV4m-`U(fo(*N5?Ndv6pcY+F1M$9tpBo7AK(5)Cawt>Fp3 zgfUlf2@i!~d8TJJ%<=OpsNR~b-=W>pkM5+za6b zY~Ao7z?*?)O`x?R(DDtjPUEQpXp$poWytH!AOSGoih&gVq+U?3w-|78)hy8SD z=k#-NkvOPROi<AsRBPVwqt^aS|N5)j-B)k;uWoN^TE5y`p0AH(y8Z0tY{^{pe7zfg+m9ZH z$w=)t6n@^@zc%Z>JRR1?0kOUOm?@w4P-?^1!5wKd%d!%veUl(T0f1T2fXQ+|C(vy+ zAWpjR0H~YEN){eQBA~rQvY3-cIxG^IEF|es#HG_q<3ZC^g2w5z+;*p;nL?~n7r-S4KMdS~n zqa?IA7EO|F`5<>(#xXb?1+a$>9UBhyJ>59DyTh3yDy%hWHl#?>TwYbYoo95X6 z9xAHt=V(ZDRNVdqm5IrBGs0AGeF}_Z)~Pjcm<>9Dt_*l_O6X(*Q;6D5R_M8k+J&ig zYBG0%eqEwFdOa{$5tlYu(&>lsKzerwQwB`P%DZQ@lBS}|xOh$6EQ3f&rkX`rJO~A> zFPE-19@0%n%|Ryc0(bsL*fRfPDt?S&MzzWU8=!3AUX(1$VI!yBLeKXxgCL1FEC*WT zT8>q=Jgb4aV~v0GJv3dIWKLPqAu_v)vUOBISx?b~=t4BHcGWS@sf`;A<0O5C*K7H1 z_1iXP(@KMlVrwsb&(`#a4)K_NBqCI&OT3KY3%D0#JD*^0usQbBd>7W?)P{91VNsNI z*qwVZbSRqQ0u3ip?L$;PtDc%qalFgM-&l{F2Mb6A-_B~iAsrHOm|{R9$+l(%DeQOU zTVzsTW`=L?(Udg5YmDDqb)ZFsY28ZFPMCT?h9T&uY?M&F z8U&Bv0OxOtLBP^Z5GXf@zd)l2%=sHsyhX)3RFL3k`6d@@Nq%`1ZI^M01`0r@U{^V=076sZCqjt#cHn^GFgx>d^}`f2IPJ>>V~5v6XzVl@xR|0i7f4} za(YMbh2w#LM+FSpIDDu=klZKuivxfy{*P#ZNDyuUFZCk8T!?t&N5?~e16HTE{TqIm zz*OQopOVy?E5kk zDS+wY$}M0SR(pKod+FagKlyI6!2gt1{(y=O&5f+=9m6F>yQs{*Lw%7&JRMTXC*UceMIpNe{BRELSMzcS(O zg6g0+P*TFSqF!MuyKYk4RJd1i-h)e4sV>1_j zpE}C5RGHyGJqc+K(;>fxy?|uO^S5Jm%t?hfX@o4OehWk+ddUmgn>#o22ru%;rD~PU z8f?R}BxtP|IEPUp30-$+rWOhkKA^DqSJo9+&SMfu;P7X4ZFMJBPkHQ*HXlMLK^$v* z>uyAJm^tK7libf1H=qoiWR&X=#ivjXO$uL=qO}YEqmomHX5b%V3(^Hf!lRwpP@BUq zG2>-|tS^iUuJo=^DacwAWeOn@KI zdUTN)@+_~!silK!{+lD+r)WA8V9F05H=x9qgqOJxXqOe4hkKEgSQ&SZRah1G5?f<6 z+{Kx{Sf;pd4DveK{3tlX>gsw+|whzA^% z`tf4qmnit!X|8cnf4Tlqc%-SMt$}p)**LkIoa`;%qkeTt{^(aKtt4bY9a}maKDVsB zBPgx{HQwVKz)yfHtM`?T>xq>;&Bgaju@|IBAt2=*zQQHQCo{}4gtms#Rpt0Oz0<{M z&r%TN&e4xVk1nOYe~${07|yW@Imq$FvyG7H`F*%~8C+yIR3LND6+JkCJ9vwroSbI9 z12&YXW*UQ6sGgM-!Kp^QDp|F+Mow8)n`+y%j^O^A{9V1bLG7n@J|p_^Z`6#a0Y}Mt zfidfpLA!H*cjw;SVCUWk@9h8!<6*NQtyIWjE>O}2`DKwsj|Zb9A(sufP{P?XbDUwA z9S}sIS@4&souW47W$`jiP1l=DRzkq|!(C3%V z&y9igbJW2JB&J?_XW&O9y?)y1jNrU5pN%Np3Ri}*thu^VocOJc^NaUggl88#K4}BrYTsv~|&gw!{d(kFPWHDGXTGf{WRJS&SAB|cUz$&$ zkB1(AiZ&BkR6cb1KV-EDX=7pVjcRkDrT>Yf7_{oN@P+Y(`GwWBl}Yd>1r-Pt28rrf zI<&qv`721H)$zPRd&a$iaW3u`CNAc+P7A1C{Ms1)zH6KoQNQ%HIrKmU5B1HbCiQx1 zb)88O`CO0kxq}+^d-*BFPlc&XXP98$y^UMOqwYiF_{E8X^KE`Gz6T_$z!|)uyOGgy7ud>}8;4)%+Uwtz`f^R;Nwt&LFPG};UE$Qwj z>0X%Z$})lo9t9aka;&23UBq*dEOgQlWSJ0VZqmr0lUxzx3j%Q!bv6)nLar3;%&EN) zdp1q}EA)cr{Vs0Od<>&-ikkMp$@$Y-pzOh2Jkr;ZS?u}K6^OCy_pb^+rH6nt*$X>| zSnb!e#*~UDD4JK4nUk&#A7pJn9}5zE-Uy(ZLN*oY`vdNJO1Tu$*9ZEnv0!W=a7s`sNHqpC?W1GO0(a%1 zo~2-vIDU!u9t>Qbg(CqQUt4hq(l5Q*Z0b3vkv@`Gb#MtvFC4!GH%s9VZYx4PCR2%H~P$q0~hF}|%uim-Y=8bk;jz+{E{6dW#yfessley5!> zpFBkFV-vg0B2RGVl$PL%yNzImK)Q3lBk77LYuIqh0o^mz$ES)vq&4SfIH&$| zF!nJcNdd`#3V6VK3c@BPTypx;4()dH4fGq^_^g0DQAPR6f%*!fJ!V&A_#*{;F-5PL z&i@4U<%1QJ=l(-F3+=!lo!?ra^Qzl!v$mY!*rhr5sGty(Q#7NDCnpXmc;o~toHT|1 z3l;xH#Tj{3O~KD!;sxQU`u68p4*q#%?>bVzKk=%bi+}5!`ZRx_(t(tV?vC(H7rAIo z;HeI-Q z{~Eoc3_ZCrLPv`8a8N~+vP50fN-BKRe~wV3F9GxyCFVW;Pqa@;sH#-9N>lQf9x30W qPPd9Q(z~Uz?r(!nI)#aEIqEMA=&uZB-oTbqw`+FeetoTR>Hh(P#A*=$ literal 0 HcmV?d00001 diff --git a/week-0/day-3/venv/lib/python3.6/site-packages/pip/__pycache__/cmdoptions.cpython-36.pyc b/week-0/day-3/venv/lib/python3.6/site-packages/pip/__pycache__/cmdoptions.cpython-36.pyc new file mode 100644 index 0000000000000000000000000000000000000000..4eaca7a6d0b07b88031113a7c03e5ce2751b58aa GIT binary patch literal 12929 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 Ik7l0xzpL0oNB{r; literal 0 HcmV?d00001 diff --git a/week-0/day-3/venv/lib/python3.6/site-packages/pip/__pycache__/exceptions.cpython-36.pyc b/week-0/day-3/venv/lib/python3.6/site-packages/pip/__pycache__/exceptions.cpython-36.pyc new file mode 100644 index 0000000000000000000000000000000000000000..926c67fe0a5ae17fc28261ccef2a19575b597a5a GIT binary patch literal 10483 zcmd5?%X1q?dY=J65CkcSddrgSo!Fu*cuCmn$9luajwp$GWLK1;m#bKDp@!%NIn-bV z>K>3HLY?HQWDk4GCAS=tV~*MXV9zm`@><*?kXtXH~I z>r>t8deuCugwx&Hdd+oiIbupwzjs7c&b%zI*8xw98sM6&1D*vuBkF+b2A%^vE9L;t z$yxLt0enOp1$@-NM*$xb^ML2g_+x;NixYrP7;CB}ApNJ0te_-Hq zfIk!$0bexmJAfC&CBT;qd>-&e;xgdN2EG8eAwCBDv6=r}@$-jHV{!1o>hrejB|#i% zudk)>k}VbYH@D(`;`RLYQ-4#wB8wXC@R+}$@hzlYWB1GeII1T35IEdiDcjEsN)IBb{{@Y%U3Ry(~&Vr#!6P4|=Og#cFWkny;nT z3woZ+FkEX?hP75J^1HIt8rEB_ZY=sC@8?>rXMI0Rd!}105w}~de{$3umNAz&80q`n{zjUJ`yHy&e0a7k99o)Yy1|_Ix{2-NP@HPAMkZ*a>Xp zy?kROMR=l()vx*Ddfe^$kg-pT``8Io0!t&K9S=nwY`=X;Bxm_+JxqaQsJx z_1nJQGIF2?%Xj->67*ov@`u(AL~W@(6^9`#eh|T)$B^L;^blbO_6)&jGr-`F|B2gm zG)*VE>Fhf#M3q?0T|!bV#yc>PwZc_ob7eyG2}jUA53%1`Cq+pRy-YPCaO>sG7b zDx@97Xvzdq9-du8GYI5!W-R4XO=aA7zB>xSy4%i6=Lxp^tdubpVzd#9y+&zRYJPgy z5`UbzLWlmmr@pzt={R@A87%zZUb8obZoM&WMW>=6>59xY0y3;@!RtbrpC=HgVP!iG zA_S0DtZ3u)u-p#y@Q4-nR@?z4^g$*dVm4&{b7ICI(s3*93HQ7^=bppe;Kb`#=0ti; z(-N}Y$Otv9M8d?OK_0{>Vh2~BMNA(@1F7Ox>ozeUZJ=&v##YUTjIGSojnp$_rpUd_ zgid{mCvR90+D)WdtzTnIw%oXO+y1r2%%Q>f1-xhIuV}B$QtB7HJ1j~+hmK#OX?E7! zN~u=H-%PEn*mJl!CGz9u6sEKcGiuFgH8rP5ag8~xnf$3foXJV%{~f4kLZ}t5;|F0M zp#UrBAQ)~5=bY^ zafMvQXc!Fi#vUAVrxUbc#rF{0nRyV(!AiGdtiR`74&z;^5SiOqjBQxNv`9WBvry%U zSnB8_1n)6}7_Xyb!X@*m{0%0k{iqj25u8D~8Ex|bOajzAA(4zK#6P+(^&+Cf~VeXh73zs!YClK%zPR| z!Y&e!HArNZy+_z`8h97-3yk*@4@uMJCIUgG_ITacfhOL-eW3G&dcH=?0Eg=N9c;>Q zB43;_qzS}{BZe)4b!{Jv@`4008Uo*Zo@B2Vz))i!{tl$h-+&jFz6t}WnpUFLhR&D< zQ`wCMQ#*w5S}&b5)Z&ugfO zw?U@?WkG5SBav*un{hh0gDvV09%$KAM0pTi_c=Iqh#Udm#li46uxtedf=f%y-N7Yx zVZq@z_;Q9Y(^Mji33{;(ke$N4EUz`HhsF`_0~5=X!vcq|(EHbDCZ4X9Dy536`0OXq z{{j+in=L<9;r|atyfTb<{KJf3X>0kDPY!1Ycm?~7m=}Hy4m{oAPp3Gu*zXTeoX^H6 zPHS|PgJ|Urmw1!&7J@Wrz|3%#RKJUO1fn?jtRVW4lq10}2p&b-)NeL4!h_~3F6{4u zXq*Vr>LaF0hchAemX=azi4utcD3D8|AQWo2WQ_0H^$}9VU4&flq=f}_)4QG3j1Vv( zEHqIElxA!c{19y*LnTgZhvHj8F(wOhVGa3usLM`~hY zGQ5WQ!M?q?Z{nG(Fl)=2m^U^>AdtXI{4QcT(68xTzSH3wV7f4+HN0itdo=5Mrv|5P1DRARM^z1KCVyqLyt2ULjP-=j>AEjmRyAI*o={R> z@VZ@Am+b#&E~)TNl!f!M{Guc(`=#C$F-0nEPj$*BT&S)YI}FT^++2Bb@4=l%tF7BB z4{s|vs=-NacR_=lq}A68dU-*=?l`N%c^uy~aV8MzCI?EbzQ*fjj^Pp5-pwHLLlZ^e zlu9Okk|;x!M%kvK96g*)nSGE{AENUg&@{_AjynhYTdmBOkGeItTX6jYU6XA4gwQ0rYZM6JH=3GVlF_$|>3?HXS(%}9|QHiOF zo)v6Q_hdWh1khL-96DpxveVoO+UI8@+D78ix_$Fi88{65J8v{RQ2FALut$_%oDoFLqlOG z4-80qYw$mYJjH`5doV-E^iVTK9-4+IW_%iVE}J|q6+siMTO+~pab_ekYxG)1XN_-e z2w>gq)ZR@~g;vs7)?FUO(vF%G@C_NB;!zp~<&z;hLQKXaFUx|vQfr(Dr-;9zVHo`T zquZ+wSH1fy*MGfoYxSXb=r(J6Kp#dm$m@0t4(FNJ*hnuiV$yV1RgCY8iUQBQr8<(r?AoE^69j)P(d=6)~ zi4(U`+CFkHnw5sPS;Nxnpl8WFG`xt74M;r3UidD+q}RHyk=mn;8wPj+8f4XZDv>2;fQFmxa{RUX}{f*PXXDp)feQm#zmDcgR4ACqk+Poc7|l0%s8kHgpm5nDYuetKzJ+6Fj%OG5WfI-v8oqW^H%y>09ET zpLGl_WGI;b1;(LNl+jgP!V);(pr=;Gb~Jd$12AJnKxz5hnm+Y0hfdkx?Jqds=e*p( zWjK?GyFK54w*Q8GW+Mz;{|!ykhB&jesfv3Fnts%+yH%WYK2+AYeY}%*A#=h zg&wbGy7JnD-)^InpE{cd_DdAKWZ%!6tx-7CPJFmwf1<-;7L5KE%?L}aqzJDy-ZP&s z@pG+CA4wNJ*HRQF`-ND7Qy6WPijr+KYyB8w`qmDL^Ra4b$Rp)qIJ2642WCFTGT%Na zenzB7BE@f4%y%B<6ADE(D<17Dp4+Ljys$uJ>Q|g5L%5l2vL@FmPE9FX6VkPA; ziJjl?|GIl-77GfL6fZfiU%!6m|GoFW-^01V!Tg0+p1d{k^M>&!M$cas@$>k32Q9;J zjH2O~j#W1sR?#vUPt+5|ggleQB%aB7s*x_H!*7{lM!sc>S$XD)IeF%bd3g>L2jp2O z7UVft9Kni|5@$?SlK_j#<3;3B!5Nu|ID(w)@gfqIe1K4>|krzE9pS zyZPEDoTCU|-m#WV=V9mA=gs03naA@L=ah3A&uhqe#yN|euR4hv#>~_0hpx9a{A$znY~|L=zU$b2 z%f7aC?aHiOZ949z>wSmoYQ_wP%S&FXzTvy2YGb{n{6(bYo8^Y<_#5kW7jLQcvho-mW0s_SLPQLg9Bq=Ml}xw7gyrFGR>ca^^tWWDuz)ps}jV5r$rjdH!(c1!DJ ze>E7paQ))TS6;tVy7cDFON%$Iys~&Bn7HxUwQH|jzj^7Uo>a6kdEITa-gTWT&1=>5 zGpFAut7f&if)9BPq3M_EExt{n?aEq-eXF8FrS&a;wbh(S1`{t;JzrIq0Ekv|vE^TG zZ8V+W(2E$s>#p*Uc%iP`va@xi>G|b)-F1SAE6sP&Tjz~c*R5Z!)?ET375%cuPz1I5YAqZ@T!~0J6b6>Tg_@k1Co6r6ufn}QeCcMC}<-0^39vqE-BSg zLH5Rts}e(|>;~3ArM&J2gO@oI{>4_)SFL*Rz;eScRs4EswcK>-ZmF^1ZJ$t@y#9?2Xd9dOZc1 zD3T?Z*nE&It+`uRFiFp?FRM8;r%o|Ajo?=dbq$FF^4&r#1u1u7;pl_N@J*XY}JN9y8Blgz05jVY|jSW2&=gLxo;3$QZk4N7>7Tqt-jIyfS}Nm7J@=8pbP352HYDu;F3|#BDjX%_kx7GHzd?^C>sJnar^A5 zKOhKD_7yhqJwbqsKTHsC$(W1x1p-+{=;KE$2KV;&4+56Gem@{!#vdjKQuhyn*V(_1 z2Eob?unJiAwfg}9GyX6^ki35oeEL2>a1WGlKO12MW#7Cn5Fq0Z69l9^_qh?sNqmo0 z(EI^b0n5I1KOkVn3K!HWzyVnu2${pji2 zIi?8)=je#VJ+d8HE1S-yvWedRWc(F;jQ?_ooyX7n5`r$@2%hmF2mB($sHBs2GT{DF z5Q2_6Sts{-umRv1^UeTLvrfSo#53m%Im3A7oe^gg&jDx58OO8WOgNKx4!T3NVP^^@ zN1T1mex!^#2b_a=jyZ>%!+4H64>(8goY10PaZ*IBht)B3to`Mit5wfl2A}5H>zZ}; z=JRvbP0ZP9%>Lo(=wVwONIDWrK^d>#f!rWF5w(j;P96 zdua<2UD@Hsb@1n&4feJ-yIo$V7^bS=c^S9Otf087 zSC*yEv*=SPKnR2^rU3a&1aL0Af?BjQWhOc!XxPIgkD1dhXu!NHeWweTx-2tvk(n ztL&f{2jlc80~T2Mmh`HxqGrqQc0qXQ`j*~4J#Y*~Jdbd!qf(hYfv496Xte3Weml@i zK-k{uYYnJi-Ccj|?BjlU#e;B%(aE6u6a&*UKpaH&clD#ZRNZST{{~uyqDa#wk#PT} zJF(b)zHg%vLRAkWbj3ac+$dTg$A-{-r==XM)RhgA(FOa22W=I0+ldd&&&G131@xD~ zPnhZ{M2NF)4Q)d`0ddY)PW-fWTevdy2tJ1Vd0@?-hJXnjNDq}Gf%`E3ELQ|+>+`>W zcM&5XnxE|Ja4eGd%4<ELT@H6c+iN zs=o?Kpw$i_DBM#aIBY1YPC+X)Yp=HMxTs#%ndjAQP42n!u8G==b#fP!-z`_`<)yki zKXW+9-P~GtwQea-5?2zs0tJ*`R=&q}70Gm9wY(rHYQD6)i2->*8q~;z(oHmWn^cW? z!HDBB&23h;!io}}>jwpB^H!ill)BYX);C0S)y25Mkmmx&xTTh=u7Gj|lTg~V?vxNh z_2@#;37YD9!F~|H3g)_WS3{X_38(|CJ};`i5_g{(XF?7-OXas(=wzz0TCO&O0(uOM z9Q1h5fI^w3>N=M8fFz+AOiQO#khv2oCxE0381ZnBQUCbXjv^stsIYeVJYg%SHN7Yc?%$f!0 zRz|F}nNDP_iDcRwOQsY2&q6N#mro_lDao5O)5-SK-s`oG&j;bu90aF|>JN3qH^C>E zK3H3mDc})0V8x(8r>+AEr8i%SXWqU_8fAww#k~s+3ve$;9A*v3QgqhjZ3L$Sohz*j z=29)&%g|PW1cg&RKa&=i2H9{LunZYfYa?SxNW3OY#eS;+zLQeF177LnPGURV%=-9>FKNl2>ZHMo{bI*d zKO^sHzHg^DAH!RQanwDvo#|NeH4C09vjbia+}h?F#_g}8=C8kJ)^e;7X@4fU@>1tN zg~)>Pk~&Z;IBXU3d;73I$lU6WddeO4nIjeDc*A(lcn@R5?5Ep)O#5y?k=}!-s!b5W zqtqIEN9}2{AJunVZ$>zoqr@0TXCHhgU3B!I7x7eCo!gkUc1fwd(i*(tmD+;WoXsXmfD(czq&`+dHaf#jf=uaF(;Ux8=8cG3{f585X2NaG*?t? zjXUROh7|QU0u4o7gQCtwkq8H=s)x2|2q^>O!fuq|Br_>lYgL;9NLpUlS5;-P8iNT0 zGg)n;AY%>ayPNC4A|(`6Kgukd2!cV_Y=pfN2nPdrWlf|{dUBGW1dWi|t1XsmGmxnn z-UaaA!xvdnMmlLG6GNH2RWS2b7RVxvkf^s{j+p!9$uB@6K*?FFAhEpFe&8b~G{z+4 zQ;0<_vOxkY(s^%V1=p-vLcI)}z*q_^I|1AQ$%#5~?_?@+&nrZl3;`g<5r*)a%H#P0i~oISk)~7 zd%BG!H0e_X0fwYn0g*&1M@TXo*TAW;QIzI@sz{KZhFR#mVQ#F`dlv5%z&wGU}QmU~(ZxVczXRb%`zde@wY zO>QQoEhITKrEP}6K$Nq&(Fjsfd60m1Wf$WgjF;jv8a-e?{56^qO_wnU9t=pKpm{Be zoLKvzU7P;y^07{l%r#jV+4yyk9Fk|>qPa5M=-ljN7E;RzY-G58958BWhe{jE$saJb zQy-X{wx0ny$nFE1@qu}3WIGM@3KTyFjJ1S%N5???5WjtXYt_%y^8Ns70!j1>wL$1F zKd0Xu1FE8*)bVCPKWjq{P!9T%LAha+OLxnuujx1BmDD(I_6?)?$)w?rtmQv26`V@= zpRNz@Lt)LMP#)=Wh^-~$i@dY1e7kf0(?)aXO{0_PWY;oCv2UM8+4KRHLnyhf>3CQs zdNbB?$baqjc_(wjfYQpWjXBv6lF6L}7}p$Fmw`p0@*kRyeuvav1VPYifBC8J07)7* z+aKP8Gc=6Q7tY#Z^`kb%-fC??2f1Z?+#b+5$yN(F zXX%cJRjjz&+`3cV^0a7qVs0)R!kly*e8l|a@BB6XX2#VrA+v%2mVaNVRmQT+Ci^c* z--#ft#4RKkx^d~^Yu7K8Ub%kd6IT{*s1nPPMTVHTUJBhx)Fq};fgT8ZB@9%Mb}&x3 zCop5v^&#P}1^L%WMznaEf;YWb}SJRt`Aq{<-4 z4g{I7_TBq@UrF#bXkV$X7<`>V$;%otN756i2@rhCvJ%O}h&h2BpS1S#naG<5%^@?J z%$rtX46z~8N~R%wS;?fCO|*~i!U}u07PACgfMf~y^K1kVDYO+j`xC|&4aDhLL1K?x zFUIjy``4}uBTWqfG{mvKV42=AvaW)m+ z9!7}&tZfrJIprYkO_R0XXD~%X&=1X1GwC45tqQ&ndW#=J9kO_X)a?xrSoHuBf-E+Y z=rzEs3&WTIoWS)L&`s)iW$1co2unEBSmR*Ux7MrVAy>H=h_DUtd={1iMez0uyQY?E zzAlu79~GXp%fR>7+6RPKmLbb4I;+CA`5sW%j;S?P-Gz%WTty}s2z(*_G2^k!s}}LP z!Txe7rH%G8AG?=bl^1HK&Lb4E)jx__LV~m^2?DSKrF)IO%)W4RMy4>>K5?JDi8lnn zLCDL7_&Vx>^d?Z*wh$8!pSP`T5J|q_XHous-$GhyI~}G$s>OR|JFDH2XzPGIA_a*# z!A-QClZ{1JCCK1dXc;;$b&~uB^AqD~iRUDqWjrjI_tP~PrhM2jVCO)pX>9KA@;@OdUVN$D&!=RSN*vDkNXxEgIu-dR!*6-@2trtCewTr`U zl1UbiK`@}gkz>Px|Ly8Eg#_+a9d>1r3&2p3f)?!%Y0?^^MH*6ln&j-gyG4}PV^_N2 zy0+-_Acl&!UF1im%`cAYLkSC`LKDJ86(&RSv#1@dl`9o@9ZYbHA#Y;ueGcos4@t-- zK%z&PTC25bjovX|2d8!0irm@EAW1Qy7f*DthseAi=ANaw;usk>5Hep;@kPwaICV0@z+wtp*fTD=s>+*w>RE>STYlrw<2rqZW-s7SMyX zHEZA1i5mn*FO>KQQUErh=%rxGo@Q;6?gb|m$`8TBNMT|E6nu;1~(Z{ zeXkq_E(5ajLCSHLHdfRZnIH_?aOBObEk>RgR)X{mv1SLOci~rfx{v`84+`m`8f0CH z0oR}Kg>c!0*fKMr+PWgryc<9|KlRfB7tTLh1g+JNG ziWVB3i^>)Cwx906 z0|lI1`hDA)oUUXm~Hw9!3!54@-D!w2U2v(BjWWb|{U z0{v3#@qk?rh-FAOIRwqEGkIt^F+K0i*%P6yR?ZT46xlGkv5))Yr3wD z_%z!KGq$n5qTt7YEcOztv+$#e`JPCY4V$S#*-Msewws|0m4|2Vbrgh}m>2JT7^JH) zi7VS1A@;frkXmt(^`qyX#Y)r~MvVyrv$7X*{^J-A8tt=t@GGG;pK$46tYT(`CwB&V z4B>b6b{yUCjvx^9J*8Lt2MhyqZH zGms-9=uBgu7ItmBwlg)y+@D1dMrPy;0(XICEOkJX_tvWG>)1?j6=1kD^Q2LY7^tvzVE5{Z^^4$IWsxPI{|$06dkEK( zvly8AaR$Nz;vg5SPFyDH>kQ7tfuO&y;dKtmG;a(M`ixNdhnc_};c2z^_ro@B$ZJo` zt#3`gb>{53TW`<5@YdiG`Tr275#6y_t2!}O8pSfXb!+dm$IEuyXPt0KvPB7(jablZW3SL~d# zFw4T?zY>d6)c?-faY9@bbmc8jW$H2DT;SHLFoR-Bh!%0k6nn^byXI6lQE(>Ie?Slv zP+4hNl~>pW?LZOE2$6k|#AgrM`c{b%^(~g8N?_Nl1OuVbp4~s+ogE&WI2ZHcx8?QyguMf=#5dF$oJD7(^^{Sen!bKyHQLA0f!W zESX$({|R*jQ+q3d?i#WBZRSqnpex*fWvGGq?yk|Q-$b5k9AyC!DxrZ5FiMQ?!Cm89 z-=%npN0~suc$Cw4;UUSIfn{|}yLsW=61ESieGW2k^qRO4Zb4ZuK>yE>1SHih)T7-s z1mALkF@D)!oHP!r47>EM;Xr^ z&{F~uwK~X9ydZ#?J}_afq+Dx26P)A}dJ7mna>7F%yfnSXJ1L*L?Da4my9s=H_zhlC z@WQ~?&mvbE9z~xGbES};>B*NyD_LO3FJqC=PyNebzHC&JE)QP*k*y(-EJUt=>C}el zbYLy7{xCG0>fYs|a&N+H+eyQ4i)pG2i4inBdgA2!`+!`-Xmw=A{J`|=uzk@&%P7;e z(d~p&(BnZru1k+-dc7Xz9o$tPzIn^=*Cz}h>r^E5F%%6uU#v%3#Q4Vq#4lR=W9 z%cZ|Pn!GN7We99TZ_iQH%|Nc?PZo~W{Bm0A}){$uRfYp9L_5kwd0IPYx z3jY5vG+U9O**{!+z!^mz=*W?e($Ls;4yI%arsUiQmNzds#<9$!@0fE*n?PDZWTGQ7 zLVAaBGf%cpXq4F_$_U-L7`YQr;#dS5wAjvzldULR+DA6J$IGGJ75_K#hH!l)>lCE* zNr3iYu#*xcmkiI1M%9N3IOHOOY@=Lhd7EcWx0Ca54{jHtcj%AZ_Ec3LY}alo(k}U` z_Mtnf1uPuewQQz=BZIFEIlkkeYZzX;EWb7eivdr&3`6H29xLrb=%0?>-97asY`X6d zsk9G;p2iUm2==ntthC_wQ}Ns9Li~jG#Um6#Vbt^MS}OGB!t$gCTLjR}c8M1F5S6iH zSS9>iL`sRej6CAx9Jk!0p?u!HAlh{Dabbp-6Q#0!0gAbUmqpP}>WBJgqwm7mKB&Hp zVFd~J04k~+)OQ#RF!(J7)R*B#1Y96cui`Klo&Ur?Mg0V0qYS9SQooNNpzDcN?5Lk) zVub;fdBF$?VYRv3D#`gFcoq)9;25!#I83c6LrR>ogVc&@ZLGr>zvZbR79S3o$>@Fr zML94S3GX|&5nUzFgPmuQVJ6?j&QibbOE&6@`me~O{w}LZNwPv$N=E3OdI$3@UY4pcKi(t->&uSmrMIJffcPS5JmJHqQ(ntyqVvUw_ z^p5#H-Ciwfsh9AD_dC3N^HW!^QRSA6bdUOzK9{{0+oJv>ivB90!=`XPec!JBMHS8D zE-zkQl)oAC^30Ta8QIkp2A@O_WJ)EcRl$+_$C>0asepw7X(&8N_ywkaz~Gk{e1*a9 zGWcT#XMLA=m2o$MI!JSK*89FoV2;E*H#YS4IS1R<9=7U>G|gx}yz zX;6m;hpH65TZqHGUt_#*(yhpXLHU4JO>!1NpytL+pIw2A>?m#%mjVIxI>tw=03@No&p zP+A)v&R$8!!l87z`g(PZXB*MaxwD}?vr%1H6^}k7&)Q4}eUvPC)1p~8816$o3PHgf zLI{WoDHhd3FyW#!&tp)mfX#Fn##0;;(Dk&Bchyh2f6)YpYDw1*8&K%#H5ZsAI1v3d z7E%vJ{4QSMnoJG9`ZD9NpTI>C$9BbYndS&+4*rr~2717+x%2`h6pg@vtN#}><(IJ< zG&a6zT>l#)N+5G$7jP!S8#lGs(XCa&Egm=kI+JYR?Oi|j?p5XcL(%QTEq+PpgvBE z_>emcUGo^iQQSj>!?kiH%ebul{p$aqd9p`PPkLIGY;qM+q%U*zX%bz9kons6tBdir z&Y)NdKiSq43LUcO5E;t11n)HEZu@YG_va1p0F(ZM+$c>=my<-s5SG92~Cd{u6GbYv^RYpz8{8E$;2o54+*}+jAx^yCNxanwL)+A??hlcBk2E;PB&)`r@Ed>{s$AFfTwe(JS z+(j*Pl0d{bxPl`cTn`KMXmxuASP-#|+P+nLRm{Q~Mb47eYiQ7uWj*I`5!0_|KBy_}Ca!c)gw8 zPH*S82eu2_gWE95IE6I}qRtaOoNsD4&Rm;>^AE<&G>m1?f$#=V>Il492cN{aQ4dr) z5P~3*O8vvSevrC-NY8OA{=DUkp`XK@;oANk`qK{A4%GH>Gon;q?@{yT?(RFTrWvjs z#Lr|&h;GnSG`|7yiNceqe#bPnM@^$Wfdz3GV;)5h0L?dyPXnUZo1>o{ebZ?E0`fl~ z!WOQcll(`W$(Pbw zen@^U*io{e=SM2D1KmT>xwPLiP2z1WDtMtk@Zt}lACFta*| z{iFUNg0?KBC}=lg+-R;falX3!1SBu`Bk@QA4rHkoWT*z+{^1D<72k?58$4$U8tLP% zGAjB+XoAlXInVY4@-`v(@f5tMWMz~&AIGO0vPCmT)eVl2);mD=S2It&uZPHj|PR=+q%b zhXL>q5|`u}x6Dldfgl(MIl}83cOuih3mv3&1#SYVP0o{FiMEB74>JVwI9E$|BJLgA#Pts!~jWwB_aXA zDnWz(5r|Z2 z43}*`17smP5KAj&YKT_IKWnoIR`4v8Al#~D`{hd)UJ}zQmwJ*{{>fqUz<_rl?unGc z);QZFcNuv77y)oPO<){H?_o0GhLYpbddDWo-l(I@KxCpGLI6%#V7P>=dg0=3&v5TO z%GfLe-0yi8gdafKc|usU+ldMI&C{7AYqbw{;mjq{yT@bRhHME6>!orYkCC-duT78fOcm7)G1~VQl)SOs)1$P zLM8ASf+T}Um6kPE7u^uY0=v1&ARD!_$bN9m8i^^MVd&kNQJxqgT-V$Q75uz9g3V=s zj-Upo177QO@zw`_2M`Z&T{DIQjR3DWUgI1S#df4oO;0XRI6`#|r9+7B_%uJKBXz$-3PrKe7n1uE?cSk=pOk(LamINl=4iTR)C zG-N@-OySyCy?TRug?=bvw9$uOY<|L3viQ!NUuCKAJXso7JFP;fBlI;T%dKyPE$yCY z59K~h08^i20K7cF&%^uhoHE-(@uX8?_1cHt`ixeO9DC%^*;5P8Jom!+`G=2}-hR6? zcPmCOeJh^)b~FLv{RB5#04mY`EkC@ZiWDPjbRnqY4cu zJZ;MM3H;~bN(m2+3DDEVS_8tD9Yi)Ck{v+5M4yg3u)hNj(KqP$+0*v4wg!?>!ZojI zjt4M+h~ip~Qyn13mf)}rL8k(Pzc(`~{`Gd>HYA z&LN49Ab!|+K;om$5$8eFGln$Vc}UX65kKlYEb$2!w@Nw3P}@GF${o#!@0ZjQh#f%c zv@;`l4@&Auq#i=5+|P{oVZ`N*X2c&rT<&Q`{0QQ>saZ-sh&XPPmbgt@+sqS!HoEE$ zt`P3ti-h251VTozw$+$8$P1mKdP7thu(GK~ItideDmId$c}bN20)UUV)GPXmDyXfr z9!ArB(Nn;28#`9JRmg3>3#U%;Koc$|A|{+~sg+ZnTupN7WY>caWT*F-v~43H;xN!e zc&Qb5WLm1Q@25%bq6}=Xd-xfuW!&CObzFaq;wHm$ieOx#jY2aP@Kl6nME=l@f5aJD zHQ4p-h>&_{g6OaQhQ11myaLX!MKa4f*ZZwa@9-9;GD!p^D>$UU%Oo_JbkAVe_=9J} zwM*CRbB{gFi>iP?dC(HbFV4+V=4E>?S`$wa>nZ!_7S3e5tdYay$n^~2z8WaaAk^Vv zXXF7~!$u!JeXcv^w)OVgxT#nRM3Y!Ln(*YiP}YPk*@LJqa`Thi^9F8xo24hBE<933}}pyfn5~f zNtF5$n`AvukwswSw%m1_CUR*oQfo-((w?g%#o}K}tdV|$OeFP@Su!5#G6Rl2B1F$K zVOKXUAnot58zQL)o6#N!$9&i2uJ_ZC(4*yJcjP5>S&05D?d9L$ zOeGezO7D>9BybUHxk#;canL_3A!_Mjo_&{8$!Xmc=h z0e2`u4cBUlf+>_vRDuJfi}K#!;H9>b;{^6Nbv$O&?$`mwM1nAGa# znv0sJk{EMNlBKv*)Ft*obe)$GyGI|G{Tp!~qA8F5eUH9=#Ji4^6e}9Oz}@K5%M9^JV@s@+G45`o+fF({qBVa5;c@rVO{>2vL z!K}jfivLzgt*P#4LV_>`qm37W5uB0mL)4UbQ{;&t2EgVSO{{=68H|X5Ia26G z4nbN3{VuACSb@Ey-f!dkAF}tHZbN)&lCTi!8R&7qZSQB#A>hUqg&*n=4&Wa|=~f-X z^<#}CnB23DZ{Ib#gEG23Gq=x9d#mL$9Rz33KE}tnr{r<=@hAB9_?fevhV%Fg249|A zrl&SsQLt3x?|aUnf>kP-KjCnJ4K;4SRop^lLT9e~n>*68KkpwM&dOepMsnWgGAvk?&{f)z&*|ocaQLkQQ0xPM7x`?qT4O+6ha)bgO1DkPc5oR z_Kp1%9nXj63qZ161Sc{8FAvxo?Z7h+3M{HmKV(lid4?5ouFw2<4=HzN+* z((Z8k@nP@A)O+~!S9i4&U0W5mbJr3g0P02q{6u(u0t*O6?ZY$%h@vyq{&FlozT`qt z2J0KNdC<~{pUyfZaC-RAH5H09+{IfDWja z7*GUI=NVjN@FD|pgz5r2DyBsCwueS!`AXuYKFKVxPEGv?U%$-{R~h>h1KCHyfxg1m zR~c|osGE#+M=CMly(rJEbIGt&*2+(1^SCiT)$?DXkS!$nUp9d-1?Nd#L70IQnku0{n*og@asUv?=ne0S}AN>k39E znD+D=Z*$C>u_T1K>I$hfywID)u~q;UUepMnngArcPPDB92XoI$D#81dqypqfJt>+I z=3VT`J0YpeyVT7K(4lsKC%LHp3tCivjv#~*SiZOM77X-Exq5@3%Eike$U%Y9cAIc@ zf}?6CJWQ|tC9C>V2Hk}zVEJ{V%@HgUh!}LD?fd0T#T+p@Lu1{A#Ug|V;eelIA+|}EhzPAtnnSO@x{$2#5(V_o%91H9dm#_ibu_~cVUms#|?XdKL?xFC`p;ZZD z8dcKoC$wh};MiWCn`^e_;D<4%FD0ZK1=Xf>VQ}R1W!JDF|4dz^snd58!&Y)l?xU8w z*rcv->&eSlYi>S{;?!{;122(f*VQ_KaGL=c>U#iTq6Y}*tiJ#71;T;! z$-vUoc6C)|mA`?c_QA*(-Hx5j={pJkZ4aW+ab%G@?j%6MBTP6ErA7(UyAx)55>7^O z9&dUydeIeL7xM-GsSyn*I3<(Z;f7c3x~T@yQP?zE_y_sKFT_*aQThsq|H0Vn3iR^SI$_p7Y|(gSNwmL%ZCG1i*Em@UKw91Cu56*#>9wEHa{4+;k3-E{4H3&N=#^N08a4i~u3 zhd0*h8NA(Of-*4D>c6%TQ83$G04?`Bh#auQaW%GBMo}gNK^Mi#o;tJ04V> z0exk~U?s#+9p$Uw9pWy%1LHl@gL(uB5eo*{XZ7v*G@NPMHasoqX9;A;F#Zpm3AvNQ zxYL6F?N9E9Ef+Up$Q$nlE+q14eGxlCE1k?IMrKBS%+UY6GIa>?NAPzC2#%_V@~0o*RR!>93C07CdwO%A8c($0WUO5q|B! z6F*Ucf6%zjR_2tFuSsfrMYPVV{3@(`mAhkqP6n^>+W7Us8@$af0QXJa`hg00ZoO4l z@2$o74Thr|dh|AbYfgWl#iMhw7k?&;qZ@2(aC0H?CY;z9bQhy8zX_vv(((V%zjRLj z^8f0?3EyQVTmO@>PS}+L19tzD_LIr3YThdqk6jzQ#jdkgpQ7(?q3`b!IPV5~gT2OH ze@X{EX6}&go3jt^XHh8QEG_)QeJ;3v$o(YC4*XFj{3uID@m_JukJCbiN#YlBIvU;b zxs0A6rn*!ug~K9CrjiHoB+rE0241~5E-KZop`3-TYV3UadH+E__@e*y4)P!0+rIno z@s9HNQ68pjT5tinPMGH`7KJkNIG_D%cRw!tQJioe`aB6E&V0Si;js?_zRX~6EQTX+ zU+#0i$fhEKLxdnbmEJkgp65MGVM?OKJd6&)J#Dm@MiDQH(KJbpPtOU9Xt9O0C}UtU zhVu`($9Tde2;7{e3F!I9+0++&l08|N#?5wn-s~D|Z=(|4Kw}$lDjvy99QWjrj41jK zekOc%_&$ZN_yshQjOo}Yi8SZN36)k!8J!z{>6{p)F|J7)(fyb(b^{YpRPs7kbd&*}3ysziX=c*+R-i&uHWI zYEQu^|2q+opvd!En{twGqQ{2QIAI&bx5d$L8hwB){UxU;?d8YnvR*W(4j7yo1MAn( zi8eIEYSShamw<|Jc>1dWp*{T$5RypkThT@@O7OZgfdk*zn41TtxPg3Tfro3e2ii}M zxSWdA-xX89&In@VZHO2#P188tL-51^l+b??3pouFo<6zdZ-q(0{S2@v4&#CY3h|~? zL+~&Oa=}OO(XMI?!-6kHTU|>z`(Y7EDU=D3r0hyeIeT0pSG(+7vj%5TmlwMTrYYkh zc(H}IVYcv~AvKR$bd_3$KtG-N1?qrCq4vusFsKlyTT@!&+MLemNyW8Gs1X{M4&>>N zw2WKAy!c4_3Ui9JK;uikic|Cq_{4``_tVUWqe(vT3&iXq9*ds#&g^QMZR{o4FibXZ zdgE*wB4>BITNe%3rf5Q=8~|7vPB3Ul^qv4It|rCnP8H! z0Mu1G&4OwSo11h~Zjb|&_P zmMU;@n~L|K+lq9+0@a2OJ*t7Y4+#>U8%9DV^u(qlCMQm52_K4|wMS!m;-(hxTvjUy zjOt|_k|vZnN=mz|17N+<8=G@@6hLn=n>oz=-Z*KLG#iw)CMi-`WA(9J(y}%;=Jb!W zr1_JwF?PyE;FMH6Wgbv&S&Jau*MV zKs8ROBp%|6A)g8kBoIj`H34`|rVwVYfoaH-$8tYQx1X6fa`t%$GsQE#+jZ4GJ5vuS z@xE4><_xx?R`O6l23`OflSHAGAl(9IGJ$**WW%v)-zi|jc-X!WnNT)7ktU&37M?@A zg7&Qa3{sILvP`PZC{Dv9p79{d^#e;_xQS~hr)^hk$UqU;z*c;S0+^g%3N>*Rm7FJV z9CWo;qxy5_X$8qC_jH{jo)p6S784L*aenBw4w-Tu?o>##_)#qNRjW3lvI2U5A<)v5?6g3tx?XDJwr+q3}>1|Xx2 hxU!oTq6WVXaN4@Hphw)eCh|^4cI_tEumOLB{ueS1Gjsp| literal 0 HcmV?d00001 diff --git a/week-0/day-3/venv/lib/python3.6/site-packages/pip/__pycache__/pep425tags.cpython-36.pyc b/week-0/day-3/venv/lib/python3.6/site-packages/pip/__pycache__/pep425tags.cpython-36.pyc new file mode 100644 index 0000000000000000000000000000000000000000..9f1d07a63105ee48656da3438b0149ad8225224b GIT binary patch literal 7464 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 Y87q^Uwbm@tI&RHdKhs$5b8uS!9~1sE_y7O^ literal 0 HcmV?d00001 diff --git a/week-0/day-3/venv/lib/python3.6/site-packages/pip/__pycache__/status_codes.cpython-36.pyc b/week-0/day-3/venv/lib/python3.6/site-packages/pip/__pycache__/status_codes.cpython-36.pyc new file mode 100644 index 0000000000000000000000000000000000000000..cee24ff5ae6c2469db89a829192bc611d6432c67 GIT binary patch literal 338 zcmX|+&q~8U5XN`&r!A$S9t3>^d#F7qco8us5rcJCcAE+dvb5a@g@nXx7W7?w0bgma zp7IKw+-=nvz8^Eg#|(281j7(tJbwTHzKs6EG1aw^JTVYJzyg$zL1=2`2#2}CWuEYu zFMQS$J=Pa}3MPZjxWNSK@oFurLbW;HmUY#%9W?XKF6~?k&*I1cO$K_%`HN~*lXKo! zi|*4biV{k-pAdqH4l;C)@Dt+u_Hdb!MHbEzwB!gc_$|&*tdAc_vP^MC`AwG2V;-mE z*MER8e+U=RT|)QXPtc6bogKbsv$m{f^|qd_)wU2*`6}PmYIAN!JIQv{D#JI=NvcvQM{!jW*@hKI9P?>zs-Y{xME*ckXrA^&My-bu?a z9HU@3reoF2x>c}D=3}*3Atv{DAujhsAtCo8AuabzAtU!}bRQ}V$#brd zllyRCSneZ*5xI{RM&&+M7{fhY+fyGej7#5%+TQv^VM6lB+P?Z^VKN%i{=$CLP1O$6 z4;BteS-N(pezPHJl>rWS+uGOns^_Ri7?Q*UuKt%Dds(GxeFmjO0gZv-Nx-FZt2hx%&CSdC8B} zo~>UfT#)>p+9&E43l}9nUVE;7sc=d1duz|vUnsnQ{6yiC&L<0(-E{R+?v*XG@Zzh6 zGwJMqWH|fXm$qVsmz@L7!AC~n)6OC1Fz#2KPdP`OryrSxYmV(4L&=d&LY5U0&>w6x$g zYiqt+tkl`=9Ln~rshU?>bc+j@F1n3!({WLlyjxP9tB_0I_Z51%bqD#ZyU{||YkXsc zL#>j(T=bhoG!SOj8tjz$=~%eumL6-#uQVGslxnJQ;#T9WQmx`V;6QIyYHp)ccf+yI zH#|K>SHD5KV@}2M*ZfM&D|+Q+7qt%Ey>++v%8l1=%-<;9zIyMoH|`a0-g^DU+|}DR zII5Q0x_IF^zqI5{C&JM()~M*MEwog#?0OysjV_d1bSjE3TRt9~qUSr!H9t(My02U} z98zw{DVCSl8Y>=}%r#qXqv*9NjfN~jw$gCihF`2Tm+*G<{*C$1-<`j6=k@!=`>)-) zjiRCZWmReUw@WKhf4H@>R8+3lTvHeW-tQ@w8qG!pW2>~?BB#z?%FV`NWvL}g-Hzwi zmunxI*r+mhtNRCRq49=|jB6B3$0%5i30z@0F~CyXi8~406HXE^lM1u4z}HJyx%TO+ zc9|Kwxo8W3cmha^Yg~gaJbC$YEb5GR_IDkZcLYgbs+^B>%WR;}z$lu5g%o-8Wwrn9 zbu63j+9ln(?ku0p+R@)-Os!Pc#a#c(_B;lonoXZ0BHYUG^1DCKU|YoU_^MgEY+too zl~$g6u#vwhAbnlGvYQK4x9r<~)2>zO6~EUI2Owvm;(GRi%VWYFwii{i{-loQrei9J z35VID3`s*vapyn)*m2LTErywXospeYe#215(ac9v=lpu>97a7W$8^?P^)?pP$`@HA zmuyGAwHc<1#Y&^%7mF`&(c?&r)VSH++uz1~x5kcrN}!_b(>OBNBco~t*rBQwSX*)I zj)^G&!nplTQF>EPp{6>D1e1Llw=fQ5vJ&PZY$0GN!`I0PRzHR08ZJFD(=yxp2Szs7 z{M>YslOb#ui&)2Ez3Hsgn9mi9t81lN^d?m-I?Zyis7`jL zJ25{|O$M=QY6}Rvn%*)x@qlDF{`1yB134VBD2Ia<{T)-a*ULd~_`a+L=XAq_Xy>I-abPM=vvJ1f==@S0qz$;H-{gA5U+(r6 z)yLX2ni>nNH7cuXZr;9;U&`D0b6tv9uPiP5dK6Bx4bnhN6j4@>-3igOD}JBG%HT@f zp|bw@{P}!7Pa=$IVU#@M`U8C+u<~-^xEp62+eO8-mW?Slmh?sd^LaQYx|Z#}g;mxI zgt?PsV1PthD0ZES?>f;+KN+7&pF~&@q64geI{*^^oGIN!pAn=q24=2{fdy;?>7j4}GveW{7b;5YHS!skRmenc?VbWVJUAS;DOlmd+-?N zoczXgQrYNOokkL7R@}`ZXpHZLDQ3xtB-xtlgb67hKrJWu#b|`yad3)Ug;!DNjUX}h zrOgTRfSFB>$7kZ|DoVU4ZLmi58rgu_uF>i)< z-wI;DFL583rkVixjBi;TF!n)WC8g%1Mlv9YwK~bo5kFN;2T9aVJun)Vm?W-=45QjKPqyfJs@#@u|E!hQagTld1m19F`z%dav$hEtKggnOcAkYVr_MW7i_ zdGN;S3f`(qtP+16prRcl^1+%w)ZoP<9>Z5`C8W}MWPx!>rd zf>aP+v`9bOmm<13#X~(~Lugn63J`2XWS~(hktOj*zTvJaVa4| zZtx%$wWiauSz(;rhM9$0v%JFoLK8?%k2W+H!-Tw0Wwf*#AtjZ|;s15K^0)A)Nr1b-j)6Ul z?Ki-mSnu*&Cg)_CK9u>H3ty4U=PEXx9Nqsh&tnB0G@vuT}{WsxX5jBFn4Zf zHELlDXM6XgwD?3ETlU`iJNVAaAu%u&K&wRz6Cd!8yzCe*nbKcFhEoD33sy}1 z62J@k5dhn39kOn5ux6M-H30xLy*wplKUoFZM4BP<1`q|gHd{KlAeR)GQxa z{Lta^^vlz-toBd%dzdE|JWGH***h^r+&yf@ULhul`VI8T+VFjX8fX=;*CI{|B?6(? zL0laOK(ie@1=fnC4){sbC56UGa^hPke{TjD@MMs{w?}~a1O%&D02=a60^iINa8~C9 z_oX!8tsVeq0i*yt4pnE!<$2()YL30s)I4?zvOKY$H1&}= z8=6JsVUi$vuid!udV3#9&}_wRo+z)mQ5 zy1RjAlmjh-8Hfh@uTfLuL_p9O;Ab2}D=V-B;`PgT+e0ASVG?&iAisr7AAxui6{7;I z2Q&dhf*rfkF?~TI*f;L^kxq>01e7XC^Z^t=RIqTRy9RbBM8BWP)C}mrW1Dn z1&<&d7PEkpA&o$Qe-pSs1*q18cS+EJgU7uqw99mkdbRVWi2XT?R0a)=gSP+M+pFdxz`A)Kv@}Y{^9@?_h zOaSOPXuO?lq>%%U{C0B5csq{E+8(M}S}NEw^&Q+#wqm>u-e}8sn>_qbkOZ7SC-L4z zaMl8K@7dtIAqN2e04Dt*kgKedz`x`>F@ezt%K*njIe)l166DC;^9v{KWF8rBr=3qc zHXbJ)Cm*LD4=pB~At(1J^LEC$_}F?Jf1G)oU5q=!&d8%oXE=cDunlash4#1O@0*_G zk2#~;*-5nb6+QAj+i_4{wM`ze z(HV16ojth5H@<|K@0Ho_*&YhUws6u=<7Q_sYXp0pi52U8Q?>jFJdJk7`!$2TTd__S zyyD)2MrVR!3?`gxuqPOI_PvuZjrYyfHy$v(_`vY@Ip8Xt2}&q$r<}xgsyOKd(f2Qboo!9Kh>=p00PXxpqFhIs(2LT56VeBV;va1LV}M^;kEA99Wa zli0WYkeHs@PF0Tv`?Y3?HL6cLhn>kS%Xw-ghPw04QQxi}b5hRJqCuKmv?ibMWv`a~ z6KfrFjz2QCv0A_$2R0^x16a3Q=is&(9DLDu-&%e50p4QdCuHP@fi!RX%qUL}^nV!rAKuY_Y;^?deta9a%^6#Xqwmi|D|7-T6B&8+q=V)-W zdfJ(dFnRZEoT*L)PX$M|V1z@T)5z^^IgfUp-qG?ol-T~+;A!VPTK=QXG30IMS>(Ud zIqpAGoe7R%Pfj2=8yrXOQ1dmH6~Bc)oxK{w4kFp2mZCsF@wjckvUhtz!Am3>!PQar^=z( z+D$Cd7)hO#_k!Gd?AI{c$Lr0vT&=4p3J2XMn%(L*dy+HBAji5FmzPJf4X$IGI-eMF z<~F2eYL;8Lx(8Zj{S4WARb8Fj_{AWJqw%Pd?SBWQSqwzjQXd3qCk}T010V_g#Ru59ER||d zZM0TfsM89vct@76qHRlg)$Ew3baH_R!<_zx#{)m$dhW6tS@v5eXAomL)1+vZt zL%Ka2)ISjA-GAsn8U+EI0DA$28gr{ZjK-HhiPae%7;O%t9l?ra*or?2HQq2tF^(+i z>6=YYSbdhnWo^pK>7 zuNj>&)Hs4xK)M0K8Ib81+Ws~eA}|4+J=+$?5bPoIu=>LX#_A-H3c1(poM-}t(QPO4 z!qHK|)z0=sxc0HzFiKQfkemC3J@W)idzbCDHDiYfSc~iK&FQBUwFq+d!}xlswxUXS zh9*WhQZ2ds6V}k;i`S}E{4fnov=*GH4ip8X3Ya6u9FAP|Xw~SMv7w`;X*x`oo2^Yb zT5%i!UzFG--&g8)_*EJr6wWA2*UZ%=mn@aV9vy$Pc;~Y?qbR2iC3U}e>&?&Kzo#>= z-n*+acjjLU6Xj)8nI4CZPOJjpdvTt_6hx$jk_S8qgbI9{#4wRR0+h%1xn#4u)E;s#iQ3W<2#TPztqAh8skD-~p*ax)#*% z+x#M?+|>cpkSf=j3$WuHB}VuRDi~(kI%FOKM}5?^fE&g{iql+nI?@b~|IS)tcn`&8 zJe|tLDd$bZA@x}YtQ>gqBydXm*vDg(sMq$fQ{IzcWs`Ox=ndBzj)u4~5rT@56y$IC zJz=X$Z3G1^WBk+>Y>AEy$M^`8QBVdE)pX3pmEJodkr(7$Dtc%4-Vr6t%e!>+4wgbH zok;Ini@2LBqF$PV69Dup>KuA)XJ@ql1|#u@#H@JN+AMwe7eD&Zk1GEYiTZCSoVL`v zxT$}m^8&INk=ZFM;qBk$+h1qW$KLw@Kz$joxUOi9Q6+8|&yNw~c0~WIxYa)Q@yq_i zmH^zM0`k!RciHtHGU4IwEi(ENt)DD1744#uF;>#*5bzU)CzEU^1q|R>XacJsqg7yc zisBTbq<;L@Vw1!riMjSah}=tT-8F1(ka2C<-pe*%0-Oar09GYGYhQ(Nt5&0O%=Xq6 zag6MW$JY=ap_j9-FWSq#-|{Y>i|mHblwt9y@5?vU(mA(rj$DoBpQExwRTh8}P-EGz z*G@#TXta5{<2uc}qC~~k;8f*9GcRBWO=}WI9Au>p3kz#PKfert?-frVaTBa4_A&Xr%_qcr{U$ul$d8C(M&X*D7Xpuq5_PEE;bdsEY}2i)LF@3}E||MT~5(Cg^V-T7O0 z=I*zXFiD}aFk1pa(p*nFi!y-Li-0dp%j)>J2javdWNYr@@{S-`0?>YO0@^3y60!Ix z_#=GHS`~MV_83~5dgx3&%s+IX>U{YmHq%nBXw8_-pAXFyy`{Z<{V02dHn4KD-g@c3 za7Wo`(rBOj_!HazAk4WXZ?nt8wMPe^Fsb&$V8LuO(f{Y^?H_DyYWAU{=ZRUW|Aj$E z(^P-X{QqVmlkCk@eT1^_^{2RF98kpQWu^s1mO0mvC7v{T%bV)%6q`h+>?pKW-g;6$ zfAasiAN3dL>`5K{S-&Ge(qZP--2M5hufKldUVFHg%>y#jCYli4A0Dz{QVRy{tiH2G zXsWig{*0o~F>T(2Bm|K_u_90NHoMXj28jS02! zYCn_jBMH-Ql~kn!y(IW1;43mn>VNRc!RG!RlXCSp0vs+*jOy?6rJ(HpEH#!~sKB*s48{x&6M6|! zZcC(0^#j&Qk?q2&_UR~T0y#YO2W*dv0|&@TE5hy2y0+Xhq-~VAEjdWx-ocaCt+(T} zqiSFDQ{f0HOcyU;4Mw_Ro|2JqZ7BVPLsBn#$n<2oFdJn#CpZ-wY9A8tiOqG*Z7y@r zW=#&nbWS)-&8Pe^rzFe@HP-51GWj->|IS1N(cflHh?^|?2|R{lyRqG$qSPZxWW?jb zbEad|?52gpO(w-;9;3mWvg%25#7f5|(-WV{S>rL-U9FK3+N$E>pnwQKjNXM*Ev66{L*SS)4zmYT6qF-_*c&iDtd2)=8~h3_ zMQeom78;>J7^K((CWQqZ8vlm+8jH=)T8!)wvPDVlj6^rz$oMR? z9Vvsz(31PKMZkjxUZf71johzh!3CAIE3R&>r$g#CD*_@dixCa6Z=y*T4x=_c)z<3X zOSlR;jtq^~NjA+7nHN7c;3MtT7&)qazB}T(P%zzh{XD*&nznu5Vwk__!WjAg7K><# zKB~o{w5qL`nm2~;`AvLq6GTS+5L?xbq2D=0CQD?Y@`wKiVi2sD8DP7-IE<_32pCk} z3E~OI$@SJqsn2{i$YDZT1MmS06wGuepF&L~ov{dDq;Kj~f)yvuKi+90zmCgWKoUUI_ksKZQw!P9 zPC%mp(HrSXT)l*MK!r}67D{+?0qnMV0(rv@P!qMjM3e>ux1*M*0VNcn^aBh*!&M0o z;n@&Nn+guM3SKY@p0@xWis5u}pc4%stOBfZ@bJ3%mlue*@KBL4^26T~aJrxdqK zJ3j$>D*0zT6xT~tbc)jom7xr%v<#Cop?aNu#ue5Y=vYQG<>r^{3;FZ*OZKz*XQw|U z{=ghJ9WffxN`#fcE~AeKs+uY$f#Uk(u$5i$6R=AQV9hjbxGe8H zdv_epWtrwr-V-WKmSCmOtI?i6LRnJEKnDlPQc?yh5Ig`u`A`e?AAAYcxL1;u64*+5B}0Br znCPrC^eBz7WVCr2Uk^JuEbego&ECAa2j@v)ZPDQ&9VL?`M^jFQM8JtIGBTR>niIu! z1o=QFjFcPLLAH?BBIh=iNj*jq#;^@=bLVczL4f&hp#m>?Y(bBXa&?oqK7q?Sj|3{H zsSb6jFujA{$NE*t`Hz7wU~E@xQFHr~tGQK6>@?)}!Q(Gfz=N}CZ#u4ZC+0?IZiZ$X zN(KfK^@-F+nJbiSH(KhYM?3}`L)<{*&@nmey>O-h0^F@XH$4(YB#sLQ4>avGM*X+? z+f3eJLdIRMh8)V@#Uq4ZE`+vO+{NiqpJPHnh3<=JOX34{;FC1frM04$J&q>26FI@w zParG!iaw{%xGlijQS>PLUi}?F5qDs#1`6ZSm&zd+lD|Hn9%5x}xUPjEH%uYSz;NuGr)%B6ffyu>b)Xsb|S1hog37HWGGO)gLc>ER4ji|~1 zjZB*D(H(2-It*yU{~%iZ*@c)$^I4J6j|tondC@w_qftbpMJq44bQjrY!qLbO z#%|z`i6Ci8JD@eW$O%RSc8MkphoX2Y33C}2XhC%6dZX4vI5oAw+2|YQhlQCaYTr+2 zn3rHFF4elvaM}?7akyzNlPZ%HCcE~FTlx*|7uDK^l@xKB+PwC@!A0y*nlecc|0n}d znv~N(N-DM(vK#SsgQytm2JdgjdMBo8o7d>|MP&{Rj)?I@EDK^p5#I^r4FqerlIRk6 ze!|lV{25e8hyz9Vfw)oxkb<xv9cn$4Pz}bqz~G0}{2XD9?gT7g(U8H_SpjJ6@Nq1J z*O*nSVY z<_~z!$i@pVeadSed<6_q#N_M*+Hh!~I<~@T=VoU$#LoiaZ!*}aybfaq)C%j}pM^+8 zKm9NdyE>H??ISnk4E29>W3YEnK} zxb5jav@4Ha37BVO3q`x0<9MLR^gR5khYC=o%f0gTZcrH-ID`L+P(n~OU;v?sA!pIi zJ%>m@9g?Hn-`fXvLeCR`pE$IqntTHfJ;1Tx0w#i5H6}m;$2tdq0N{viPT)X*!+>ap zXtZ}?dXqI6;46Rz-pN-Etl&a}(sS*ner(GHJw%%gzbGP$c4BrG+9Mb`Rhw(}SCGuN z?P#N<3ZX`$K;Vw(YoHd{EMgzkVj|ndEmAl5C_54#*pV-z6d{{}pq{YYY8CIl%Vic# z9F}F>vP3H9Jcj;}k8SQP(uhK|PgzPWx$0<8hwo!rml zbf9$u!P`{^Y8cgHU>)H1=?uLSW6%T~{@;YZY4kNlgm_f6JBEAQKVCgiJt^rymiecs zV9mj8AMY#&D~A1!S5Gs{8uv43JyxAU7+SnIChI#5mviweMac+ij8rr4TizAIiT@0r zagE^^4$GG_&Im&y8ri|wtYS96wwA`WK^lGkitNy+GlrGl!!VH`-CubGfLrP}rN+3_ z*ef+M{Tlu(Jx>|30nELx{f7eb5eqxW%|JJfUxm>>7xYfjI@!TQ`c~=+t+*b2Z&LG zkb2+m`n?(uIXbA}H*2Ur_4D)Xv$CM2qN5KcZkI?4C6j7 zK~f?XXT^XNImieJfxJmv7>U9IE@a11+Bd08qAd?dijwf@9b|(G<~&IVZreMD9!)*s zOgUimO`_L+dI5_0=tnS!v}bMcM8%xzB?ZT}n_yT|FeXsZ)82P~txTWV#kE=w2u^t) znSW_hzdbPZ@rcr3=VjiQ#9!8m-|Kg)O`~~LA*oto@_XDI3Qgg#276aWDToXe<_3g0 zFHDLj4jh2#rHBYqnxd}r`<>JfKGFEu5s4i>&9|>GA#nuPN}p*O0&lR4nv-zMU0QQ1;rAQB-eV8k)`Aw;gLq<23Rf@l9DM3!32w9OU_%w`R9lAoTry;TXNRbP1xdPLQd#1=S zb(uEGPrI46g!J+~oGa0U8>tCvL_D7vp=jZv=Li`%3wj@m90t5u=w~t!BP&NvgDT22 zt`SJY@fe>bA=ogEQG^`a`Q13`vh)CJ;a?he^pTtpu?XS$_%eqw{A2`}M5c#gtjX4* zd#pYFS-vr>n#-?tjUET`=q|kM9@q>Il;<2QoqVYAzVN;V}XxN zXD1Q3xi6iQw?J2iSrZkF4=LWGpumD(MagvP=G+`&o#&=MCz>MuE|vcIGyDJ*nl%)C zF0{wMXZU!5kIy5A02uhO0S*NE5H{oGY0THoir-K~2B zxo}&p;WPe}p4f#8qjXh(1-juhRo<&?D2kKX>6Bhvd2K|}KSh>fL06g52itIju-ZCBs%jizVVfylRmxTLUe z;2SPro=CvcVa6FDi$!9m*SHxO*yUdrXG9H*qHstynY49n(p9IEX`igdXehHY|@ES;X$kI5jAM+2g z8jSgr)Nm{(U_OL1Sd30$y??Q|6^~_OW8>-R^qK5PI-A}DcePl0EPVuL^CT-J83N7xvX^GR4R!FEqToOd3sz_YavH}^eXEy82*yGNO z+pL?su<(e)C*X+}z6YOT#2ZhQc;J~Q&UhzF1!PmO<@t?g{&PGt=gjeXr{ll-(VJiX zd<>yq(F@lc)Zc+e{B9wHQ5Rtg+tkYJu5IbML!GWu)9p5DdR-5@-6m-aTf=r;`otT~ z;Rg1`&e-bC<0fu>gSs8k{NCcf5ohQa)jV#G?Xd;w)+wY*>|p0x`z|6K?2j!=bIx$y zuw!_{aKUiV@TlQ2!{dfah9?Y98lEydZMbZB#_$!xR}Ie^o-=&SFfcrCc){?Z;U&Y% znxiFH*%i}rRr4XrPr8U4+4fjqzW;NL8k zsue|foRKI}eq?q9>dh_6dNCEsqb$*!yH{`6Cg+SRM~sAOW(=3$N9A!*&{V3XATpMc zuei#e^l8JYGYKMs>+dMH7Ym}?0g3TXh@XJj{jt6#vtkWGXSG+R6t9ZMVy9Oow{=tf zn5bNX3FfJcqOcgL*1p-Z+BGMkK-Ro%Tc@ofR$aC|d(m37_$lbA8rQ?81FGheI2jNK zEXf&Ft%Om=<1AK9oC-@uN2$oJsBK2XZE*-3ct;#2|>e|bw3dU%4ex_3L zv{zj}R1)TrLdb!+8;5I)5rgz31f8`OvXhWvvf|)ili(GKMRj48f|7y>IZHEj&)UIu z_BA2nm_U|`aGJSMiw)#Vvx zz-L*U$6JKYiUea|)+WL+C?Gybb?)G=l`^H(%IyB|g(#kJCbX$=e_B@$F*%*vjKgCL z!YQsU9%4>=YL@G3Q!>p6D`&=Ct%Gc|vY?t#gjq7l>-|!e9CAFjAsH%HCwJ9k0#XNoa_V>8_8)H>^z+uD?dfq7tADfb EC%@NaRR910 literal 0 HcmV?d00001 diff --git a/week-0/day-3/venv/lib/python3.6/site-packages/pip/basecommand.py b/week-0/day-3/venv/lib/python3.6/site-packages/pip/basecommand.py new file mode 100644 index 00000000..54c67067 --- /dev/null +++ b/week-0/day-3/venv/lib/python3.6/site-packages/pip/basecommand.py @@ -0,0 +1,337 @@ +"""Base Command class, and related routines""" +from __future__ import absolute_import + +import logging +import os +import sys +import optparse +import warnings + +from pip import cmdoptions +from pip.index import PackageFinder +from pip.locations import running_under_virtualenv +from pip.download import PipSession +from pip.exceptions import (BadCommand, InstallationError, UninstallationError, + CommandError, PreviousBuildDirError) + +from pip.compat import logging_dictConfig +from pip.baseparser import ConfigOptionParser, UpdatingDefaultsHelpFormatter +from pip.req import InstallRequirement, parse_requirements +from pip.status_codes import ( + SUCCESS, ERROR, UNKNOWN_ERROR, VIRTUALENV_NOT_FOUND, + PREVIOUS_BUILD_DIR_ERROR, +) +from pip.utils import deprecation, get_prog, normalize_path +from pip.utils.logging import IndentingFormatter +from pip.utils.outdated import pip_version_check + + +__all__ = ['Command'] + + +logger = logging.getLogger(__name__) + + +class Command(object): + name = None + usage = None + hidden = False + log_streams = ("ext://sys.stdout", "ext://sys.stderr") + + def __init__(self, isolated=False): + parser_kw = { + 'usage': self.usage, + 'prog': '%s %s' % (get_prog(), self.name), + 'formatter': UpdatingDefaultsHelpFormatter(), + 'add_help_option': False, + 'name': self.name, + 'description': self.__doc__, + 'isolated': isolated, + } + + self.parser = ConfigOptionParser(**parser_kw) + + # Commands should add options to this option group + optgroup_name = '%s Options' % self.name.capitalize() + self.cmd_opts = optparse.OptionGroup(self.parser, optgroup_name) + + # Add the general options + gen_opts = cmdoptions.make_option_group( + cmdoptions.general_group, + self.parser, + ) + self.parser.add_option_group(gen_opts) + + def _build_session(self, options, retries=None, timeout=None): + session = PipSession( + cache=( + normalize_path(os.path.join(options.cache_dir, "http")) + if options.cache_dir else None + ), + retries=retries if retries is not None else options.retries, + insecure_hosts=options.trusted_hosts, + ) + + # Handle custom ca-bundles from the user + if options.cert: + session.verify = options.cert + + # Handle SSL client certificate + if options.client_cert: + session.cert = options.client_cert + + # Handle timeouts + if options.timeout or timeout: + session.timeout = ( + timeout if timeout is not None else options.timeout + ) + + # Handle configured proxies + if options.proxy: + session.proxies = { + "http": options.proxy, + "https": options.proxy, + } + + # Determine if we can prompt the user for authentication or not + session.auth.prompting = not options.no_input + + return session + + def parse_args(self, args): + # factored out for testability + return self.parser.parse_args(args) + + def main(self, args): + options, args = self.parse_args(args) + + if options.quiet: + if options.quiet == 1: + level = "WARNING" + if options.quiet == 2: + level = "ERROR" + else: + level = "CRITICAL" + elif options.verbose: + level = "DEBUG" + else: + level = "INFO" + + # The root logger should match the "console" level *unless* we + # specified "--log" to send debug logs to a file. + root_level = level + if options.log: + root_level = "DEBUG" + + logging_dictConfig({ + "version": 1, + "disable_existing_loggers": False, + "filters": { + "exclude_warnings": { + "()": "pip.utils.logging.MaxLevelFilter", + "level": logging.WARNING, + }, + }, + "formatters": { + "indent": { + "()": IndentingFormatter, + "format": "%(message)s", + }, + }, + "handlers": { + "console": { + "level": level, + "class": "pip.utils.logging.ColorizedStreamHandler", + "stream": self.log_streams[0], + "filters": ["exclude_warnings"], + "formatter": "indent", + }, + "console_errors": { + "level": "WARNING", + "class": "pip.utils.logging.ColorizedStreamHandler", + "stream": self.log_streams[1], + "formatter": "indent", + }, + "user_log": { + "level": "DEBUG", + "class": "pip.utils.logging.BetterRotatingFileHandler", + "filename": options.log or "/dev/null", + "delay": True, + "formatter": "indent", + }, + }, + "root": { + "level": root_level, + "handlers": list(filter(None, [ + "console", + "console_errors", + "user_log" if options.log else None, + ])), + }, + # Disable any logging besides WARNING unless we have DEBUG level + # logging enabled. These use both pip._vendor and the bare names + # for the case where someone unbundles our libraries. + "loggers": dict( + ( + name, + { + "level": ( + "WARNING" + if level in ["INFO", "ERROR"] + else "DEBUG" + ), + }, + ) + for name in ["pip._vendor", "distlib", "requests", "urllib3"] + ), + }) + + if sys.version_info[:2] == (2, 6): + warnings.warn( + "Python 2.6 is no longer supported by the Python core team, " + "please upgrade your Python. A future version of pip will " + "drop support for Python 2.6", + deprecation.Python26DeprecationWarning + ) + + # TODO: try to get these passing down from the command? + # without resorting to os.environ to hold these. + + if options.no_input: + os.environ['PIP_NO_INPUT'] = '1' + + if options.exists_action: + os.environ['PIP_EXISTS_ACTION'] = ' '.join(options.exists_action) + + if options.require_venv: + # If a venv is required check if it can really be found + if not running_under_virtualenv(): + logger.critical( + 'Could not find an activated virtualenv (required).' + ) + sys.exit(VIRTUALENV_NOT_FOUND) + + try: + status = self.run(options, args) + # FIXME: all commands should return an exit status + # and when it is done, isinstance is not needed anymore + if isinstance(status, int): + return status + except PreviousBuildDirError as exc: + logger.critical(str(exc)) + logger.debug('Exception information:', exc_info=True) + + return PREVIOUS_BUILD_DIR_ERROR + except (InstallationError, UninstallationError, BadCommand) as exc: + logger.critical(str(exc)) + logger.debug('Exception information:', exc_info=True) + + return ERROR + except CommandError as exc: + logger.critical('ERROR: %s', exc) + logger.debug('Exception information:', exc_info=True) + + return ERROR + except KeyboardInterrupt: + logger.critical('Operation cancelled by user') + logger.debug('Exception information:', exc_info=True) + + return ERROR + except: + logger.critical('Exception:', exc_info=True) + + return UNKNOWN_ERROR + finally: + # Check if we're using the latest version of pip available + if (not options.disable_pip_version_check and not + getattr(options, "no_index", False)): + with self._build_session( + options, + retries=0, + timeout=min(5, options.timeout)) as session: + pip_version_check(session) + + return SUCCESS + + +class RequirementCommand(Command): + + @staticmethod + def populate_requirement_set(requirement_set, args, options, finder, + session, name, wheel_cache): + """ + Marshal cmd line args into a requirement set. + """ + for filename in options.constraints: + for req in parse_requirements( + filename, + constraint=True, finder=finder, options=options, + session=session, wheel_cache=wheel_cache): + requirement_set.add_requirement(req) + + for req in args: + requirement_set.add_requirement( + InstallRequirement.from_line( + req, None, isolated=options.isolated_mode, + wheel_cache=wheel_cache + ) + ) + + for req in options.editables: + requirement_set.add_requirement( + InstallRequirement.from_editable( + req, + default_vcs=options.default_vcs, + isolated=options.isolated_mode, + wheel_cache=wheel_cache + ) + ) + + found_req_in_file = False + for filename in options.requirements: + for req in parse_requirements( + filename, + finder=finder, options=options, session=session, + wheel_cache=wheel_cache): + found_req_in_file = True + requirement_set.add_requirement(req) + # If --require-hashes was a line in a requirements file, tell + # RequirementSet about it: + requirement_set.require_hashes = options.require_hashes + + if not (args or options.editables or found_req_in_file): + opts = {'name': name} + if options.find_links: + msg = ('You must give at least one requirement to ' + '%(name)s (maybe you meant "pip %(name)s ' + '%(links)s"?)' % + dict(opts, links=' '.join(options.find_links))) + else: + msg = ('You must give at least one requirement ' + 'to %(name)s (see "pip help %(name)s")' % opts) + logger.warning(msg) + + def _build_package_finder(self, options, session, + platform=None, python_versions=None, + abi=None, implementation=None): + """ + Create a package finder appropriate to this requirement command. + """ + index_urls = [options.index_url] + options.extra_index_urls + if options.no_index: + logger.debug('Ignoring indexes: %s', ','.join(index_urls)) + index_urls = [] + + return PackageFinder( + find_links=options.find_links, + format_control=options.format_control, + index_urls=index_urls, + trusted_hosts=options.trusted_hosts, + allow_all_prereleases=options.pre, + process_dependency_links=options.process_dependency_links, + session=session, + platform=platform, + versions=python_versions, + abi=abi, + implementation=implementation, + ) diff --git a/week-0/day-3/venv/lib/python3.6/site-packages/pip/baseparser.py b/week-0/day-3/venv/lib/python3.6/site-packages/pip/baseparser.py new file mode 100644 index 00000000..2dd45330 --- /dev/null +++ b/week-0/day-3/venv/lib/python3.6/site-packages/pip/baseparser.py @@ -0,0 +1,293 @@ +"""Base option parser setup""" +from __future__ import absolute_import + +import sys +import optparse +import os +import re +import textwrap +from distutils.util import strtobool + +from pip._vendor.six import string_types +from pip._vendor.six.moves import configparser +from pip.locations import ( + legacy_config_file, config_basename, running_under_virtualenv, + site_config_files +) +from pip.utils import appdirs, get_terminal_size + + +_environ_prefix_re = re.compile(r"^PIP_", re.I) + + +class PrettyHelpFormatter(optparse.IndentedHelpFormatter): + """A prettier/less verbose help formatter for optparse.""" + + def __init__(self, *args, **kwargs): + # help position must be aligned with __init__.parseopts.description + kwargs['max_help_position'] = 30 + kwargs['indent_increment'] = 1 + kwargs['width'] = get_terminal_size()[0] - 2 + optparse.IndentedHelpFormatter.__init__(self, *args, **kwargs) + + def format_option_strings(self, option): + return self._format_option_strings(option, ' <%s>', ', ') + + def _format_option_strings(self, option, mvarfmt=' <%s>', optsep=', '): + """ + Return a comma-separated list of option strings and metavars. + + :param option: tuple of (short opt, long opt), e.g: ('-f', '--format') + :param mvarfmt: metavar format string - evaluated as mvarfmt % metavar + :param optsep: separator + """ + opts = [] + + if option._short_opts: + opts.append(option._short_opts[0]) + if option._long_opts: + opts.append(option._long_opts[0]) + if len(opts) > 1: + opts.insert(1, optsep) + + if option.takes_value(): + metavar = option.metavar or option.dest.lower() + opts.append(mvarfmt % metavar.lower()) + + return ''.join(opts) + + def format_heading(self, heading): + if heading == 'Options': + return '' + return heading + ':\n' + + def format_usage(self, usage): + """ + Ensure there is only one newline between usage and the first heading + if there is no description. + """ + msg = '\nUsage: %s\n' % self.indent_lines(textwrap.dedent(usage), " ") + return msg + + def format_description(self, description): + # leave full control over description to us + if description: + if hasattr(self.parser, 'main'): + label = 'Commands' + else: + label = 'Description' + # some doc strings have initial newlines, some don't + description = description.lstrip('\n') + # some doc strings have final newlines and spaces, some don't + description = description.rstrip() + # dedent, then reindent + description = self.indent_lines(textwrap.dedent(description), " ") + description = '%s:\n%s\n' % (label, description) + return description + else: + return '' + + def format_epilog(self, epilog): + # leave full control over epilog to us + if epilog: + return epilog + else: + return '' + + def indent_lines(self, text, indent): + new_lines = [indent + line for line in text.split('\n')] + return "\n".join(new_lines) + + +class UpdatingDefaultsHelpFormatter(PrettyHelpFormatter): + """Custom help formatter for use in ConfigOptionParser. + + This is updates the defaults before expanding them, allowing + them to show up correctly in the help listing. + """ + + def expand_default(self, option): + if self.parser is not None: + self.parser._update_defaults(self.parser.defaults) + return optparse.IndentedHelpFormatter.expand_default(self, option) + + +class CustomOptionParser(optparse.OptionParser): + + def insert_option_group(self, idx, *args, **kwargs): + """Insert an OptionGroup at a given position.""" + group = self.add_option_group(*args, **kwargs) + + self.option_groups.pop() + self.option_groups.insert(idx, group) + + return group + + @property + def option_list_all(self): + """Get a list of all options, including those in option groups.""" + res = self.option_list[:] + for i in self.option_groups: + res.extend(i.option_list) + + return res + + +class ConfigOptionParser(CustomOptionParser): + """Custom option parser which updates its defaults by checking the + configuration files and environmental variables""" + + isolated = False + + def __init__(self, *args, **kwargs): + self.config = configparser.RawConfigParser() + self.name = kwargs.pop('name') + self.isolated = kwargs.pop("isolated", False) + self.files = self.get_config_files() + if self.files: + self.config.read(self.files) + assert self.name + optparse.OptionParser.__init__(self, *args, **kwargs) + + def get_config_files(self): + # the files returned by this method will be parsed in order with the + # first files listed being overridden by later files in standard + # ConfigParser fashion + config_file = os.environ.get('PIP_CONFIG_FILE', False) + if config_file == os.devnull: + return [] + + # at the base we have any site-wide configuration + files = list(site_config_files) + + # per-user configuration next + if not self.isolated: + if config_file and os.path.exists(config_file): + files.append(config_file) + else: + # This is the legacy config file, we consider it to be a lower + # priority than the new file location. + files.append(legacy_config_file) + + # This is the new config file, we consider it to be a higher + # priority than the legacy file. + files.append( + os.path.join( + appdirs.user_config_dir("pip"), + config_basename, + ) + ) + + # finally virtualenv configuration first trumping others + if running_under_virtualenv(): + venv_config_file = os.path.join( + sys.prefix, + config_basename, + ) + if os.path.exists(venv_config_file): + files.append(venv_config_file) + + return files + + def check_default(self, option, key, val): + try: + return option.check_value(key, val) + except optparse.OptionValueError as exc: + print("An error occurred during configuration: %s" % exc) + sys.exit(3) + + def _update_defaults(self, defaults): + """Updates the given defaults with values from the config files and + the environ. Does a little special handling for certain types of + options (lists).""" + # Then go and look for the other sources of configuration: + config = {} + # 1. config files + for section in ('global', self.name): + config.update( + self.normalize_keys(self.get_config_section(section)) + ) + # 2. environmental variables + if not self.isolated: + config.update(self.normalize_keys(self.get_environ_vars())) + # Accumulate complex default state. + self.values = optparse.Values(self.defaults) + late_eval = set() + # Then set the options with those values + for key, val in config.items(): + # ignore empty values + if not val: + continue + + option = self.get_option(key) + # Ignore options not present in this parser. E.g. non-globals put + # in [global] by users that want them to apply to all applicable + # commands. + if option is None: + continue + + if option.action in ('store_true', 'store_false', 'count'): + val = strtobool(val) + elif option.action == 'append': + val = val.split() + val = [self.check_default(option, key, v) for v in val] + elif option.action == 'callback': + late_eval.add(option.dest) + opt_str = option.get_opt_string() + val = option.convert_value(opt_str, val) + # From take_action + args = option.callback_args or () + kwargs = option.callback_kwargs or {} + option.callback(option, opt_str, val, self, *args, **kwargs) + else: + val = self.check_default(option, key, val) + + defaults[option.dest] = val + + for key in late_eval: + defaults[key] = getattr(self.values, key) + self.values = None + return defaults + + def normalize_keys(self, items): + """Return a config dictionary with normalized keys regardless of + whether the keys were specified in environment variables or in config + files""" + normalized = {} + for key, val in items: + key = key.replace('_', '-') + if not key.startswith('--'): + key = '--%s' % key # only prefer long opts + normalized[key] = val + return normalized + + def get_config_section(self, name): + """Get a section of a configuration""" + if self.config.has_section(name): + return self.config.items(name) + return [] + + def get_environ_vars(self): + """Returns a generator with all environmental vars with prefix PIP_""" + for key, val in os.environ.items(): + if _environ_prefix_re.search(key): + yield (_environ_prefix_re.sub("", key).lower(), val) + + def get_default_values(self): + """Overriding to make updating the defaults after instantiation of + the option parser possible, _update_defaults() does the dirty work.""" + if not self.process_default_values: + # Old, pre-Optik 1.5 behaviour. + return optparse.Values(self.defaults) + + defaults = self._update_defaults(self.defaults.copy()) # ours + for option in self._get_all_options(): + default = defaults.get(option.dest) + if isinstance(default, string_types): + opt_str = option.get_opt_string() + defaults[option.dest] = option.check_value(opt_str, default) + return optparse.Values(defaults) + + def error(self, msg): + self.print_usage(sys.stderr) + self.exit(2, "%s\n" % msg) diff --git a/week-0/day-3/venv/lib/python3.6/site-packages/pip/cmdoptions.py b/week-0/day-3/venv/lib/python3.6/site-packages/pip/cmdoptions.py new file mode 100644 index 00000000..f75c0930 --- /dev/null +++ b/week-0/day-3/venv/lib/python3.6/site-packages/pip/cmdoptions.py @@ -0,0 +1,633 @@ +""" +shared options and groups + +The principle here is to define options once, but *not* instantiate them +globally. One reason being that options with action='append' can carry state +between parses. pip parses general options twice internally, and shouldn't +pass on state. To be consistent, all options will follow this design. + +""" +from __future__ import absolute_import + +from functools import partial +from optparse import OptionGroup, SUPPRESS_HELP, Option +import warnings + +from pip.index import ( + FormatControl, fmt_ctl_handle_mutual_exclude, fmt_ctl_no_binary, + fmt_ctl_no_use_wheel) +from pip.models import PyPI +from pip.locations import USER_CACHE_DIR, src_prefix +from pip.utils.hashes import STRONG_HASHES + + +def make_option_group(group, parser): + """ + Return an OptionGroup object + group -- assumed to be dict with 'name' and 'options' keys + parser -- an optparse Parser + """ + option_group = OptionGroup(parser, group['name']) + for option in group['options']: + option_group.add_option(option()) + return option_group + + +def resolve_wheel_no_use_binary(options): + if not options.use_wheel: + control = options.format_control + fmt_ctl_no_use_wheel(control) + + +def check_install_build_global(options, check_options=None): + """Disable wheels if per-setup.py call options are set. + + :param options: The OptionParser options to update. + :param check_options: The options to check, if not supplied defaults to + options. + """ + if check_options is None: + check_options = options + + def getname(n): + return getattr(check_options, n, None) + names = ["build_options", "global_options", "install_options"] + if any(map(getname, names)): + control = options.format_control + fmt_ctl_no_binary(control) + warnings.warn( + 'Disabling all use of wheels due to the use of --build-options ' + '/ --global-options / --install-options.', stacklevel=2) + + +########### +# options # +########### + +help_ = partial( + Option, + '-h', '--help', + dest='help', + action='help', + help='Show help.') + +isolated_mode = partial( + Option, + "--isolated", + dest="isolated_mode", + action="store_true", + default=False, + help=( + "Run pip in an isolated mode, ignoring environment variables and user " + "configuration." + ), +) + +require_virtualenv = partial( + Option, + # Run only if inside a virtualenv, bail if not. + '--require-virtualenv', '--require-venv', + dest='require_venv', + action='store_true', + default=False, + help=SUPPRESS_HELP) + +verbose = partial( + Option, + '-v', '--verbose', + dest='verbose', + action='count', + default=0, + help='Give more output. Option is additive, and can be used up to 3 times.' +) + +version = partial( + Option, + '-V', '--version', + dest='version', + action='store_true', + help='Show version and exit.') + +quiet = partial( + Option, + '-q', '--quiet', + dest='quiet', + action='count', + default=0, + help=('Give less output. Option is additive, and can be used up to 3' + ' times (corresponding to WARNING, ERROR, and CRITICAL logging' + ' levels).') +) + +log = partial( + Option, + "--log", "--log-file", "--local-log", + dest="log", + metavar="path", + help="Path to a verbose appending log." +) + +no_input = partial( + Option, + # Don't ask for input + '--no-input', + dest='no_input', + action='store_true', + default=False, + help=SUPPRESS_HELP) + +proxy = partial( + Option, + '--proxy', + dest='proxy', + type='str', + default='', + help="Specify a proxy in the form [user:passwd@]proxy.server:port.") + +retries = partial( + Option, + '--retries', + dest='retries', + type='int', + default=5, + help="Maximum number of retries each connection should attempt " + "(default %default times).") + +timeout = partial( + Option, + '--timeout', '--default-timeout', + metavar='sec', + dest='timeout', + type='float', + default=15, + help='Set the socket timeout (default %default seconds).') + +default_vcs = partial( + Option, + # The default version control system for editables, e.g. 'svn' + '--default-vcs', + dest='default_vcs', + type='str', + default='', + help=SUPPRESS_HELP) + +skip_requirements_regex = partial( + Option, + # A regex to be used to skip requirements + '--skip-requirements-regex', + dest='skip_requirements_regex', + type='str', + default='', + help=SUPPRESS_HELP) + + +def exists_action(): + return Option( + # Option when path already exist + '--exists-action', + dest='exists_action', + type='choice', + choices=['s', 'i', 'w', 'b', 'a'], + default=[], + action='append', + metavar='action', + help="Default action when a path already exists: " + "(s)witch, (i)gnore, (w)ipe, (b)ackup, (a)bort.") + + +cert = partial( + Option, + '--cert', + dest='cert', + type='str', + metavar='path', + help="Path to alternate CA bundle.") + +client_cert = partial( + Option, + '--client-cert', + dest='client_cert', + type='str', + default=None, + metavar='path', + help="Path to SSL client certificate, a single file containing the " + "private key and the certificate in PEM format.") + +index_url = partial( + Option, + '-i', '--index-url', '--pypi-url', + dest='index_url', + metavar='URL', + default=PyPI.simple_url, + help="Base URL of Python Package Index (default %default). " + "This should point to a repository compliant with PEP 503 " + "(the simple repository API) or a local directory laid out " + "in the same format.") + + +def extra_index_url(): + return Option( + '--extra-index-url', + dest='extra_index_urls', + metavar='URL', + action='append', + default=[], + help="Extra URLs of package indexes to use in addition to " + "--index-url. Should follow the same rules as " + "--index-url." + ) + + +no_index = partial( + Option, + '--no-index', + dest='no_index', + action='store_true', + default=False, + help='Ignore package index (only looking at --find-links URLs instead).') + + +def find_links(): + return Option( + '-f', '--find-links', + dest='find_links', + action='append', + default=[], + metavar='url', + help="If a url or path to an html file, then parse for links to " + "archives. If a local path or file:// url that's a directory, " + "then look for archives in the directory listing.") + + +def allow_external(): + return Option( + "--allow-external", + dest="allow_external", + action="append", + default=[], + metavar="PACKAGE", + help=SUPPRESS_HELP, + ) + + +allow_all_external = partial( + Option, + "--allow-all-external", + dest="allow_all_external", + action="store_true", + default=False, + help=SUPPRESS_HELP, +) + + +def trusted_host(): + return Option( + "--trusted-host", + dest="trusted_hosts", + action="append", + metavar="HOSTNAME", + default=[], + help="Mark this host as trusted, even though it does not have valid " + "or any HTTPS.", + ) + + +# Remove after 7.0 +no_allow_external = partial( + Option, + "--no-allow-external", + dest="allow_all_external", + action="store_false", + default=False, + help=SUPPRESS_HELP, +) + + +# Remove --allow-insecure after 7.0 +def allow_unsafe(): + return Option( + "--allow-unverified", "--allow-insecure", + dest="allow_unverified", + action="append", + default=[], + metavar="PACKAGE", + help=SUPPRESS_HELP, + ) + +# Remove after 7.0 +no_allow_unsafe = partial( + Option, + "--no-allow-insecure", + dest="allow_all_insecure", + action="store_false", + default=False, + help=SUPPRESS_HELP +) + +# Remove after 1.5 +process_dependency_links = partial( + Option, + "--process-dependency-links", + dest="process_dependency_links", + action="store_true", + default=False, + help="Enable the processing of dependency links.", +) + + +def constraints(): + return Option( + '-c', '--constraint', + dest='constraints', + action='append', + default=[], + metavar='file', + help='Constrain versions using the given constraints file. ' + 'This option can be used multiple times.') + + +def requirements(): + return Option( + '-r', '--requirement', + dest='requirements', + action='append', + default=[], + metavar='file', + help='Install from the given requirements file. ' + 'This option can be used multiple times.') + + +def editable(): + return Option( + '-e', '--editable', + dest='editables', + action='append', + default=[], + metavar='path/url', + help=('Install a project in editable mode (i.e. setuptools ' + '"develop mode") from a local project path or a VCS url.'), + ) + +src = partial( + Option, + '--src', '--source', '--source-dir', '--source-directory', + dest='src_dir', + metavar='dir', + default=src_prefix, + help='Directory to check out editable projects into. ' + 'The default in a virtualenv is "/src". ' + 'The default for global installs is "/src".' +) + +# XXX: deprecated, remove in 9.0 +use_wheel = partial( + Option, + '--use-wheel', + dest='use_wheel', + action='store_true', + default=True, + help=SUPPRESS_HELP, +) + +# XXX: deprecated, remove in 9.0 +no_use_wheel = partial( + Option, + '--no-use-wheel', + dest='use_wheel', + action='store_false', + default=True, + help=('Do not Find and prefer wheel archives when searching indexes and ' + 'find-links locations. DEPRECATED in favour of --no-binary.'), +) + + +def _get_format_control(values, option): + """Get a format_control object.""" + return getattr(values, option.dest) + + +def _handle_no_binary(option, opt_str, value, parser): + existing = getattr(parser.values, option.dest) + fmt_ctl_handle_mutual_exclude( + value, existing.no_binary, existing.only_binary) + + +def _handle_only_binary(option, opt_str, value, parser): + existing = getattr(parser.values, option.dest) + fmt_ctl_handle_mutual_exclude( + value, existing.only_binary, existing.no_binary) + + +def no_binary(): + return Option( + "--no-binary", dest="format_control", action="callback", + callback=_handle_no_binary, type="str", + default=FormatControl(set(), set()), + help="Do not use binary packages. Can be supplied multiple times, and " + "each time adds to the existing value. Accepts either :all: to " + "disable all binary packages, :none: to empty the set, or one or " + "more package names with commas between them. Note that some " + "packages are tricky to compile and may fail to install when " + "this option is used on them.") + + +def only_binary(): + return Option( + "--only-binary", dest="format_control", action="callback", + callback=_handle_only_binary, type="str", + default=FormatControl(set(), set()), + help="Do not use source packages. Can be supplied multiple times, and " + "each time adds to the existing value. Accepts either :all: to " + "disable all source packages, :none: to empty the set, or one or " + "more package names with commas between them. Packages without " + "binary distributions will fail to install when this option is " + "used on them.") + + +cache_dir = partial( + Option, + "--cache-dir", + dest="cache_dir", + default=USER_CACHE_DIR, + metavar="dir", + help="Store the cache data in

    `%Am7 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ໞcf$(9E>UWtqg`Q1b?HJnx@uIBTK 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 Rm#}Y*^zFyP48?;=GQ|i0+8)>a5DF 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

  • MD% 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 literal 0 HcmV?d00001 diff --git a/week-0/day-3/my_todo_app/venv/share/python-wheels/wheel-0.30.0-py2.py3-none-any.whl b/week-0/day-3/my_todo_app/venv/share/python-wheels/wheel-0.30.0-py2.py3-none-any.whl new file mode 100644 index 0000000000000000000000000000000000000000..527fefd066e5a5ba17e4efa50cea2b5f911bda37 GIT binary patch literal 48886 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 Date: Wed, 24 Jul 2019 23:00:31 +0530 Subject: [PATCH 4/4] Fake Db Made --- week-0/day-3/my_todo_app/todo_app/__init__.py | 64 +- .../__pycache__/__init__.cpython-36.pyc | Bin 1161 -> 2047 bytes .../my_todo_app/todo_app/templates/404.html | 1 + .../todo_app/templates/todo_view.html | 6 + .../my_todo_app/venvironment/bin/activate | 76 + .../my_todo_app/venvironment/bin/activate.csh | 37 + .../venvironment/bin/activate.fish | 75 + .../my_todo_app/venvironment/bin/easy_install | 11 + .../venvironment/bin/easy_install-3.6 | 11 + week-0/day-3/my_todo_app/venvironment/bin/pip | 11 + .../day-3/my_todo_app/venvironment/bin/pip3 | 11 + .../day-3/my_todo_app/venvironment/bin/pip3.6 | 11 + .../day-3/my_todo_app/venvironment/bin/python | 1 + .../my_todo_app/venvironment/bin/python3 | 1 + .../__pycache__/easy_install.cpython-36.pyc | Bin 0 -> 275 bytes .../python3.6/site-packages/easy_install.py | 5 + .../pip-9.0.1.dist-info/DESCRIPTION.rst | 39 + .../pip-9.0.1.dist-info/INSTALLER | 1 + .../pip-9.0.1.dist-info/METADATA | 70 + .../site-packages/pip-9.0.1.dist-info/RECORD | 123 + .../site-packages/pip-9.0.1.dist-info/WHEEL | 6 + .../pip-9.0.1.dist-info/entry_points.txt | 5 + .../pip-9.0.1.dist-info/metadata.json | 1 + .../pip-9.0.1.dist-info/top_level.txt | 1 + .../python3.6/site-packages/pip/__init__.py | 338 + .../python3.6/site-packages/pip/__main__.py | 19 + .../pip/__pycache__/__init__.cpython-36.pyc | Bin 0 -> 8498 bytes .../pip/__pycache__/__main__.cpython-36.pyc | Bin 0 -> 374 bytes .../__pycache__/basecommand.cpython-36.pyc | Bin 0 -> 7210 bytes .../pip/__pycache__/baseparser.cpython-36.pyc | Bin 0 -> 9271 bytes .../pip/__pycache__/cmdoptions.cpython-36.pyc | Bin 0 -> 12929 bytes .../pip/__pycache__/download.cpython-36.pyc | Bin 0 -> 20310 bytes .../pip/__pycache__/exceptions.cpython-36.pyc | Bin 0 -> 10483 bytes .../pip/__pycache__/index.cpython-36.pyc | Bin 0 -> 30245 bytes .../pip/__pycache__/locations.cpython-36.pyc | Bin 0 -> 3869 bytes .../pip/__pycache__/pep425tags.cpython-36.pyc | Bin 0 -> 7464 bytes .../__pycache__/status_codes.cpython-36.pyc | Bin 0 -> 338 bytes .../pip/__pycache__/wheel.cpython-36.pyc | Bin 0 -> 21655 bytes .../site-packages/pip/_vendor/__init__.py | 111 + .../__pycache__/__init__.cpython-36.pyc | Bin 0 -> 2797 bytes .../site-packages/pip/basecommand.py | 337 + .../python3.6/site-packages/pip/baseparser.py | 293 + .../python3.6/site-packages/pip/cmdoptions.py | 633 ++ .../site-packages/pip/commands/__init__.py | 86 + .../__pycache__/__init__.cpython-36.pyc | Bin 0 -> 2028 bytes .../commands/__pycache__/check.cpython-36.pyc | Bin 0 -> 1269 bytes .../__pycache__/completion.cpython-36.pyc | Bin 0 -> 2600 bytes .../__pycache__/download.cpython-36.pyc | Bin 0 -> 5385 bytes .../__pycache__/freeze.cpython-36.pyc | Bin 0 -> 2582 bytes .../commands/__pycache__/hash.cpython-36.pyc | Bin 0 -> 1923 bytes .../commands/__pycache__/help.cpython-36.pyc | Bin 0 -> 1074 bytes .../__pycache__/install.cpython-36.pyc | Bin 0 -> 10221 bytes .../commands/__pycache__/list.cpython-36.pyc | Bin 0 -> 9685 bytes .../__pycache__/search.cpython-36.pyc | Bin 0 -> 4164 bytes .../commands/__pycache__/show.cpython-36.pyc | Bin 0 -> 5335 bytes .../__pycache__/uninstall.cpython-36.pyc | Bin 0 -> 2560 bytes .../commands/__pycache__/wheel.cpython-36.pyc | Bin 0 -> 5422 bytes .../site-packages/pip/commands/check.py | 39 + .../site-packages/pip/commands/completion.py | 81 + .../site-packages/pip/commands/download.py | 212 + .../site-packages/pip/commands/freeze.py | 87 + .../site-packages/pip/commands/hash.py | 57 + .../site-packages/pip/commands/help.py | 35 + .../site-packages/pip/commands/install.py | 455 ++ .../site-packages/pip/commands/list.py | 337 + .../site-packages/pip/commands/search.py | 133 + .../site-packages/pip/commands/show.py | 154 + .../site-packages/pip/commands/uninstall.py | 76 + .../site-packages/pip/commands/wheel.py | 208 + .../site-packages/pip/compat/__init__.py | 164 + .../__pycache__/__init__.cpython-36.pyc | Bin 0 -> 3957 bytes .../__pycache__/dictconfig.cpython-36.pyc | Bin 0 -> 13604 bytes .../site-packages/pip/compat/dictconfig.py | 565 ++ .../python3.6/site-packages/pip/download.py | 906 +++ .../python3.6/site-packages/pip/exceptions.py | 244 + .../lib/python3.6/site-packages/pip/index.py | 1102 ++++ .../python3.6/site-packages/pip/locations.py | 182 + .../site-packages/pip/models/__init__.py | 4 + .../__pycache__/__init__.cpython-36.pyc | Bin 0 -> 223 bytes .../models/__pycache__/index.cpython-36.pyc | Bin 0 -> 827 bytes .../site-packages/pip/models/index.py | 16 + .../site-packages/pip/operations/__init__.py | 0 .../__pycache__/__init__.cpython-36.pyc | Bin 0 -> 137 bytes .../__pycache__/check.cpython-36.pyc | Bin 0 -> 1424 bytes .../__pycache__/freeze.cpython-36.pyc | Bin 0 -> 2881 bytes .../site-packages/pip/operations/check.py | 49 + .../site-packages/pip/operations/freeze.py | 132 + .../python3.6/site-packages/pip/pep425tags.py | 324 + .../site-packages/pip/req/__init__.py | 10 + .../req/__pycache__/__init__.cpython-36.pyc | Bin 0 -> 404 bytes .../req/__pycache__/req_file.cpython-36.pyc | Bin 0 -> 8419 bytes .../__pycache__/req_install.cpython-36.pyc | Bin 0 -> 30120 bytes .../req/__pycache__/req_set.cpython-36.pyc | Bin 0 -> 20967 bytes .../__pycache__/req_uninstall.cpython-36.pyc | Bin 0 -> 6282 bytes .../site-packages/pip/req/req_file.py | 342 + .../site-packages/pip/req/req_install.py | 1204 ++++ .../site-packages/pip/req/req_set.py | 798 +++ .../site-packages/pip/req/req_uninstall.py | 195 + .../site-packages/pip/status_codes.py | 8 + .../site-packages/pip/utils/__init__.py | 870 +++ .../utils/__pycache__/__init__.cpython-36.pyc | Bin 0 -> 22743 bytes .../utils/__pycache__/appdirs.cpython-36.pyc | Bin 0 -> 7701 bytes .../utils/__pycache__/build.cpython-36.pyc | Bin 0 -> 1315 bytes .../__pycache__/deprecation.cpython-36.pyc | Bin 0 -> 1728 bytes .../utils/__pycache__/encoding.cpython-36.pyc | Bin 0 -> 1018 bytes .../__pycache__/filesystem.cpython-36.pyc | Bin 0 -> 583 bytes .../utils/__pycache__/glibc.cpython-36.pyc | Bin 0 -> 1366 bytes .../utils/__pycache__/hashes.cpython-36.pyc | Bin 0 -> 3242 bytes .../utils/__pycache__/logging.cpython-36.pyc | Bin 0 -> 3898 bytes .../utils/__pycache__/outdated.cpython-36.pyc | Bin 0 -> 4223 bytes .../__pycache__/packaging.cpython-36.pyc | Bin 0 -> 1986 bytes .../setuptools_build.cpython-36.pyc | Bin 0 -> 327 bytes .../pip/utils/__pycache__/ui.cpython-36.pyc | Bin 0 -> 9583 bytes .../site-packages/pip/utils/appdirs.py | 248 + .../site-packages/pip/utils/build.py | 42 + .../site-packages/pip/utils/deprecation.py | 76 + .../site-packages/pip/utils/encoding.py | 31 + .../site-packages/pip/utils/filesystem.py | 28 + .../site-packages/pip/utils/glibc.py | 81 + .../site-packages/pip/utils/hashes.py | 92 + .../site-packages/pip/utils/logging.py | 130 + .../site-packages/pip/utils/outdated.py | 162 + .../site-packages/pip/utils/packaging.py | 63 + .../pip/utils/setuptools_build.py | 8 + .../python3.6/site-packages/pip/utils/ui.py | 344 + .../site-packages/pip/vcs/__init__.py | 366 ++ .../vcs/__pycache__/__init__.cpython-36.pyc | Bin 0 -> 11102 bytes .../pip/vcs/__pycache__/bazaar.cpython-36.pyc | Bin 0 -> 3655 bytes .../pip/vcs/__pycache__/git.cpython-36.pyc | Bin 0 -> 8795 bytes .../vcs/__pycache__/mercurial.cpython-36.pyc | Bin 0 -> 3568 bytes .../vcs/__pycache__/subversion.cpython-36.pyc | Bin 0 -> 7107 bytes .../python3.6/site-packages/pip/vcs/bazaar.py | 116 + .../python3.6/site-packages/pip/vcs/git.py | 300 + .../site-packages/pip/vcs/mercurial.py | 103 + .../site-packages/pip/vcs/subversion.py | 269 + .../lib/python3.6/site-packages/pip/wheel.py | 853 +++ .../DESCRIPTION.rst | 3 + .../pkg_resources-0.0.0.dist-info/INSTALLER | 1 + .../pkg_resources-0.0.0.dist-info/METADATA | 13 + .../pkg_resources-0.0.0.dist-info/RECORD | 38 + .../pkg_resources-0.0.0.dist-info/WHEEL | 6 + .../metadata.json | 1 + .../site-packages/pkg_resources/__init__.py | 3125 +++++++++ .../__pycache__/__init__.cpython-36.pyc | Bin 0 -> 95310 bytes .../__pycache__/py31compat.cpython-36.pyc | Bin 0 -> 657 bytes .../pkg_resources/_vendor/__init__.py | 0 .../__pycache__/__init__.cpython-36.pyc | Bin 0 -> 154 bytes .../__pycache__/appdirs.cpython-36.pyc | Bin 0 -> 18580 bytes .../__pycache__/pyparsing.cpython-36.pyc | Bin 0 -> 201076 bytes .../_vendor/__pycache__/six.cpython-36.pyc | Bin 0 -> 24451 bytes .../pkg_resources/_vendor/appdirs.py | 552 ++ .../_vendor/packaging/__about__.py | 21 + .../_vendor/packaging/__init__.py | 14 + .../__pycache__/__about__.cpython-36.pyc | Bin 0 -> 690 bytes .../__pycache__/__init__.cpython-36.pyc | Bin 0 -> 528 bytes .../__pycache__/_compat.cpython-36.pyc | Bin 0 -> 975 bytes .../__pycache__/_structures.cpython-36.pyc | Bin 0 -> 2832 bytes .../__pycache__/markers.cpython-36.pyc | Bin 0 -> 8855 bytes .../__pycache__/requirements.cpython-36.pyc | Bin 0 -> 3851 bytes .../__pycache__/specifiers.cpython-36.pyc | Bin 0 -> 19794 bytes .../__pycache__/utils.cpython-36.pyc | Bin 0 -> 459 bytes .../__pycache__/version.cpython-36.pyc | Bin 0 -> 10569 bytes .../_vendor/packaging/_compat.py | 30 + .../_vendor/packaging/_structures.py | 68 + .../_vendor/packaging/markers.py | 301 + .../_vendor/packaging/requirements.py | 127 + .../_vendor/packaging/specifiers.py | 774 +++ .../pkg_resources/_vendor/packaging/utils.py | 14 + .../_vendor/packaging/version.py | 393 ++ .../pkg_resources/_vendor/pyparsing.py | 5696 +++++++++++++++++ .../pkg_resources/_vendor/six.py | 868 +++ .../pkg_resources/extern/__init__.py | 73 + .../__pycache__/__init__.cpython-36.pyc | Bin 0 -> 2385 bytes .../site-packages/pkg_resources/py31compat.py | 22 + .../DESCRIPTION.rst | 36 + .../setuptools-39.0.1.dist-info/INSTALLER | 1 + .../setuptools-39.0.1.dist-info/METADATA | 67 + .../setuptools-39.0.1.dist-info/RECORD | 155 + .../setuptools-39.0.1.dist-info/WHEEL | 6 + .../dependency_links.txt | 2 + .../entry_points.txt | 64 + .../setuptools-39.0.1.dist-info/metadata.json | 1 + .../setuptools-39.0.1.dist-info/top_level.txt | 3 + .../setuptools-39.0.1.dist-info/zip-safe | 1 + .../site-packages/setuptools/__init__.py | 180 + .../__pycache__/__init__.cpython-36.pyc | Bin 0 -> 6246 bytes .../__pycache__/archive_util.cpython-36.pyc | Bin 0 -> 5094 bytes .../__pycache__/build_meta.cpython-36.pyc | Bin 0 -> 5867 bytes .../__pycache__/config.cpython-36.pyc | Bin 0 -> 14323 bytes .../__pycache__/dep_util.cpython-36.pyc | Bin 0 -> 813 bytes .../__pycache__/depends.cpython-36.pyc | Bin 0 -> 5239 bytes .../__pycache__/dist.cpython-36.pyc | Bin 0 -> 36818 bytes .../__pycache__/extension.cpython-36.pyc | Bin 0 -> 1933 bytes .../__pycache__/glibc.cpython-36.pyc | Bin 0 -> 1503 bytes .../__pycache__/glob.cpython-36.pyc | Bin 0 -> 3801 bytes .../__pycache__/launch.cpython-36.pyc | Bin 0 -> 812 bytes .../__pycache__/lib2to3_ex.cpython-36.pyc | Bin 0 -> 2391 bytes .../__pycache__/monkey.cpython-36.pyc | Bin 0 -> 5133 bytes .../__pycache__/msvc.cpython-36.pyc | Bin 0 -> 34498 bytes .../__pycache__/namespaces.cpython-36.pyc | Bin 0 -> 3636 bytes .../__pycache__/package_index.cpython-36.pyc | Bin 0 -> 32218 bytes .../__pycache__/pep425tags.cpython-36.pyc | Bin 0 -> 7296 bytes .../__pycache__/py27compat.cpython-36.pyc | Bin 0 -> 769 bytes .../__pycache__/py31compat.cpython-36.pyc | Bin 0 -> 1508 bytes .../__pycache__/py33compat.cpython-36.pyc | Bin 0 -> 1361 bytes .../__pycache__/py36compat.cpython-36.pyc | Bin 0 -> 2165 bytes .../__pycache__/sandbox.cpython-36.pyc | Bin 0 -> 15681 bytes .../__pycache__/site-patch.cpython-36.pyc | Bin 0 -> 1464 bytes .../__pycache__/ssl_support.cpython-36.pyc | Bin 0 -> 6744 bytes .../__pycache__/unicode_utils.cpython-36.pyc | Bin 0 -> 1127 bytes .../__pycache__/version.cpython-36.pyc | Bin 0 -> 286 bytes .../__pycache__/wheel.cpython-36.pyc | Bin 0 -> 5781 bytes .../windows_support.cpython-36.pyc | Bin 0 -> 969 bytes .../setuptools/_vendor/__init__.py | 0 .../__pycache__/__init__.cpython-36.pyc | Bin 0 -> 148 bytes .../__pycache__/pyparsing.cpython-36.pyc | Bin 0 -> 201070 bytes .../_vendor/__pycache__/six.cpython-36.pyc | Bin 0 -> 24445 bytes .../setuptools/_vendor/packaging/__about__.py | 21 + .../setuptools/_vendor/packaging/__init__.py | 14 + .../__pycache__/__about__.cpython-36.pyc | Bin 0 -> 684 bytes .../__pycache__/__init__.cpython-36.pyc | Bin 0 -> 522 bytes .../__pycache__/_compat.cpython-36.pyc | Bin 0 -> 969 bytes .../__pycache__/_structures.cpython-36.pyc | Bin 0 -> 2826 bytes .../__pycache__/markers.cpython-36.pyc | Bin 0 -> 8846 bytes .../__pycache__/requirements.cpython-36.pyc | Bin 0 -> 3839 bytes .../__pycache__/specifiers.cpython-36.pyc | Bin 0 -> 19788 bytes .../__pycache__/utils.cpython-36.pyc | Bin 0 -> 453 bytes .../__pycache__/version.cpython-36.pyc | Bin 0 -> 10563 bytes .../setuptools/_vendor/packaging/_compat.py | 30 + .../_vendor/packaging/_structures.py | 68 + .../setuptools/_vendor/packaging/markers.py | 301 + .../_vendor/packaging/requirements.py | 127 + .../_vendor/packaging/specifiers.py | 774 +++ .../setuptools/_vendor/packaging/utils.py | 14 + .../setuptools/_vendor/packaging/version.py | 393 ++ .../setuptools/_vendor/pyparsing.py | 5696 +++++++++++++++++ .../site-packages/setuptools/_vendor/six.py | 868 +++ .../site-packages/setuptools/archive_util.py | 173 + .../site-packages/setuptools/build_meta.py | 172 + .../site-packages/setuptools/cli-32.exe | Bin 0 -> 65536 bytes .../site-packages/setuptools/cli-64.exe | Bin 0 -> 74752 bytes .../site-packages/setuptools/cli.exe | Bin 0 -> 65536 bytes .../setuptools/command/__init__.py | 18 + .../__pycache__/__init__.cpython-36.pyc | Bin 0 -> 699 bytes .../command/__pycache__/alias.cpython-36.pyc | Bin 0 -> 2392 bytes .../__pycache__/bdist_egg.cpython-36.pyc | Bin 0 -> 14373 bytes .../__pycache__/bdist_rpm.cpython-36.pyc | Bin 0 -> 1735 bytes .../__pycache__/bdist_wininst.cpython-36.pyc | Bin 0 -> 936 bytes .../__pycache__/build_clib.cpython-36.pyc | Bin 0 -> 2407 bytes .../__pycache__/build_ext.cpython-36.pyc | Bin 0 -> 10006 bytes .../__pycache__/build_py.cpython-36.pyc | Bin 0 -> 8531 bytes .../__pycache__/develop.cpython-36.pyc | Bin 0 -> 6385 bytes .../__pycache__/dist_info.cpython-36.pyc | Bin 0 -> 1352 bytes .../__pycache__/easy_install.cpython-36.pyc | Bin 0 -> 66239 bytes .../__pycache__/egg_info.cpython-36.pyc | Bin 0 -> 20935 bytes .../__pycache__/install.cpython-36.pyc | Bin 0 -> 3932 bytes .../install_egg_info.cpython-36.pyc | Bin 0 -> 2916 bytes .../__pycache__/install_lib.cpython-36.pyc | Bin 0 -> 5050 bytes .../install_scripts.cpython-36.pyc | Bin 0 -> 2237 bytes .../__pycache__/py36compat.cpython-36.pyc | Bin 0 -> 4582 bytes .../__pycache__/register.cpython-36.pyc | Bin 0 -> 552 bytes .../command/__pycache__/rotate.cpython-36.pyc | Bin 0 -> 2538 bytes .../__pycache__/saveopts.cpython-36.pyc | Bin 0 -> 883 bytes .../command/__pycache__/sdist.cpython-36.pyc | Bin 0 -> 6347 bytes .../command/__pycache__/setopt.cpython-36.pyc | Bin 0 -> 4561 bytes .../command/__pycache__/test.cpython-36.pyc | Bin 0 -> 8120 bytes .../command/__pycache__/upload.cpython-36.pyc | Bin 0 -> 1350 bytes .../__pycache__/upload_docs.cpython-36.pyc | Bin 0 -> 6059 bytes .../site-packages/setuptools/command/alias.py | 80 + .../setuptools/command/bdist_egg.py | 502 ++ .../setuptools/command/bdist_rpm.py | 43 + .../setuptools/command/bdist_wininst.py | 21 + .../setuptools/command/build_clib.py | 98 + .../setuptools/command/build_ext.py | 331 + .../setuptools/command/build_py.py | 270 + .../setuptools/command/develop.py | 216 + .../setuptools/command/dist_info.py | 36 + .../setuptools/command/easy_install.py | 2389 +++++++ .../setuptools/command/egg_info.py | 696 ++ .../setuptools/command/install.py | 125 + .../setuptools/command/install_egg_info.py | 82 + .../setuptools/command/install_lib.py | 148 + .../setuptools/command/install_scripts.py | 65 + .../setuptools/command/launcher manifest.xml | 15 + .../setuptools/command/py36compat.py | 136 + .../setuptools/command/register.py | 10 + .../setuptools/command/rotate.py | 66 + .../setuptools/command/saveopts.py | 22 + .../site-packages/setuptools/command/sdist.py | 200 + .../setuptools/command/setopt.py | 149 + .../site-packages/setuptools/command/test.py | 268 + .../setuptools/command/upload.py | 42 + .../setuptools/command/upload_docs.py | 206 + .../site-packages/setuptools/config.py | 556 ++ .../site-packages/setuptools/dep_util.py | 23 + .../site-packages/setuptools/depends.py | 186 + .../site-packages/setuptools/dist.py | 1070 ++++ .../site-packages/setuptools/extension.py | 57 + .../setuptools/extern/__init__.py | 73 + .../__pycache__/__init__.cpython-36.pyc | Bin 0 -> 2387 bytes .../site-packages/setuptools/glibc.py | 86 + .../site-packages/setuptools/glob.py | 176 + .../site-packages/setuptools/gui-32.exe | Bin 0 -> 65536 bytes .../site-packages/setuptools/gui-64.exe | Bin 0 -> 75264 bytes .../site-packages/setuptools/gui.exe | Bin 0 -> 65536 bytes .../site-packages/setuptools/launch.py | 35 + .../site-packages/setuptools/lib2to3_ex.py | 62 + .../site-packages/setuptools/monkey.py | 197 + .../site-packages/setuptools/msvc.py | 1302 ++++ .../site-packages/setuptools/namespaces.py | 107 + .../site-packages/setuptools/package_index.py | 1119 ++++ .../site-packages/setuptools/pep425tags.py | 316 + .../site-packages/setuptools/py27compat.py | 28 + .../site-packages/setuptools/py31compat.py | 41 + .../site-packages/setuptools/py33compat.py | 54 + .../site-packages/setuptools/py36compat.py | 82 + .../site-packages/setuptools/sandbox.py | 491 ++ .../setuptools/script (dev).tmpl | 5 + .../site-packages/setuptools/script.tmpl | 3 + .../site-packages/setuptools/site-patch.py | 74 + .../site-packages/setuptools/ssl_support.py | 260 + .../site-packages/setuptools/unicode_utils.py | 44 + .../site-packages/setuptools/version.py | 6 + .../site-packages/setuptools/wheel.py | 163 + .../setuptools/windows_support.py | 29 + week-0/day-3/my_todo_app/venvironment/lib64 | 1 + .../day-3/my_todo_app/venvironment/pyvenv.cfg | 3 + .../CacheControl-0.11.7-py2.py3-none-any.whl | Bin 0 -> 18720 bytes .../appdirs-1.4.3-py2.py3-none-any.whl | Bin 0 -> 12139 bytes .../certifi-2018.1.18-py2.py3-none-any.whl | Bin 0 -> 150807 bytes .../chardet-3.0.4-py2.py3-none-any.whl | Bin 0 -> 133328 bytes .../colorama-0.3.7-py2.py3-none-any.whl | Bin 0 -> 19915 bytes .../distlib-0.2.6-py2.py3-none-any.whl | Bin 0 -> 141707 bytes .../distro-1.0.1-py2.py3-none-any.whl | Bin 0 -> 11733 bytes .../html5lib-0.999999999-py2.py3-none-any.whl | Bin 0 -> 112620 bytes .../idna-2.6-py2.py3-none-any.whl | Bin 0 -> 56485 bytes .../ipaddress-0.0.0-py2.py3-none-any.whl | Bin 0 -> 17503 bytes .../lockfile-0.12.2-py2.py3-none-any.whl | Bin 0 -> 13506 bytes .../packaging-17.1-py2.py3-none-any.whl | Bin 0 -> 24058 bytes .../pip-9.0.1-py2.py3-none-any.whl | Bin 0 -> 159152 bytes .../pkg_resources-0.0.0-py2.py3-none-any.whl | Bin 0 -> 115663 bytes .../progress-1.2-py2.py3-none-any.whl | Bin 0 -> 9606 bytes .../pyparsing-2.2.0-py2.py3-none-any.whl | Bin 0 -> 56411 bytes .../requests-2.18.4-py2.py3-none-any.whl | Bin 0 -> 88788 bytes .../retrying-1.3.3-py2.py3-none-any.whl | Bin 0 -> 9480 bytes .../setuptools-39.0.1-py2.py3-none-any.whl | Bin 0 -> 455758 bytes .../six-1.11.0-py2.py3-none-any.whl | Bin 0 -> 10720 bytes .../urllib3-1.22-py2.py3-none-any.whl | Bin 0 -> 124700 bytes .../webencodings-0.5-py2.py3-none-any.whl | Bin 0 -> 11646 bytes .../wheel-0.30.0-py2.py3-none-any.whl | Bin 0 -> 48886 bytes week-0/day-3/venv/bin/activate | 76 + week-0/day-3/venv/bin/activate.csh | 37 + week-0/day-3/venv/bin/activate.fish | 75 + week-0/day-3/venv/bin/easy_install | 11 + week-0/day-3/venv/bin/easy_install-3.6 | 11 + week-0/day-3/venv/bin/pip | 11 + week-0/day-3/venv/bin/pip3 | 11 + week-0/day-3/venv/bin/pip3.6 | 11 + week-0/day-3/venv/bin/python | 1 + week-0/day-3/venv/bin/python3 | 1 + .../__pycache__/easy_install.cpython-36.pyc | Bin 0 -> 275 bytes .../python3.6/site-packages/easy_install.py | 5 + .../pip-9.0.1.dist-info/DESCRIPTION.rst | 39 + .../pip-9.0.1.dist-info/INSTALLER | 1 + .../pip-9.0.1.dist-info/METADATA | 70 + .../site-packages/pip-9.0.1.dist-info/RECORD | 123 + .../site-packages/pip-9.0.1.dist-info/WHEEL | 6 + .../pip-9.0.1.dist-info/entry_points.txt | 5 + .../pip-9.0.1.dist-info/metadata.json | 1 + .../pip-9.0.1.dist-info/top_level.txt | 1 + .../python3.6/site-packages/pip/__init__.py | 338 + .../python3.6/site-packages/pip/__main__.py | 19 + .../pip/__pycache__/__init__.cpython-36.pyc | Bin 0 -> 8498 bytes .../pip/__pycache__/__main__.cpython-36.pyc | Bin 0 -> 374 bytes .../__pycache__/basecommand.cpython-36.pyc | Bin 0 -> 7210 bytes .../pip/__pycache__/baseparser.cpython-36.pyc | Bin 0 -> 9271 bytes .../pip/__pycache__/cmdoptions.cpython-36.pyc | Bin 0 -> 12929 bytes .../pip/__pycache__/download.cpython-36.pyc | Bin 0 -> 20310 bytes .../pip/__pycache__/exceptions.cpython-36.pyc | Bin 0 -> 10483 bytes .../pip/__pycache__/index.cpython-36.pyc | Bin 0 -> 30245 bytes .../pip/__pycache__/locations.cpython-36.pyc | Bin 0 -> 3869 bytes .../pip/__pycache__/pep425tags.cpython-36.pyc | Bin 0 -> 7464 bytes .../__pycache__/status_codes.cpython-36.pyc | Bin 0 -> 338 bytes .../pip/__pycache__/wheel.cpython-36.pyc | Bin 0 -> 21655 bytes .../site-packages/pip/_vendor/__init__.py | 111 + .../__pycache__/__init__.cpython-36.pyc | Bin 0 -> 2797 bytes .../site-packages/pip/basecommand.py | 337 + .../python3.6/site-packages/pip/baseparser.py | 293 + .../python3.6/site-packages/pip/cmdoptions.py | 633 ++ .../site-packages/pip/commands/__init__.py | 86 + .../__pycache__/__init__.cpython-36.pyc | Bin 0 -> 2028 bytes .../commands/__pycache__/check.cpython-36.pyc | Bin 0 -> 1269 bytes .../__pycache__/completion.cpython-36.pyc | Bin 0 -> 2600 bytes .../__pycache__/download.cpython-36.pyc | Bin 0 -> 5385 bytes .../__pycache__/freeze.cpython-36.pyc | Bin 0 -> 2582 bytes .../commands/__pycache__/hash.cpython-36.pyc | Bin 0 -> 1923 bytes .../commands/__pycache__/help.cpython-36.pyc | Bin 0 -> 1074 bytes .../__pycache__/install.cpython-36.pyc | Bin 0 -> 10221 bytes .../commands/__pycache__/list.cpython-36.pyc | Bin 0 -> 9685 bytes .../__pycache__/search.cpython-36.pyc | Bin 0 -> 4164 bytes .../commands/__pycache__/show.cpython-36.pyc | Bin 0 -> 5335 bytes .../__pycache__/uninstall.cpython-36.pyc | Bin 0 -> 2560 bytes .../commands/__pycache__/wheel.cpython-36.pyc | Bin 0 -> 5422 bytes .../site-packages/pip/commands/check.py | 39 + .../site-packages/pip/commands/completion.py | 81 + .../site-packages/pip/commands/download.py | 212 + .../site-packages/pip/commands/freeze.py | 87 + .../site-packages/pip/commands/hash.py | 57 + .../site-packages/pip/commands/help.py | 35 + .../site-packages/pip/commands/install.py | 455 ++ .../site-packages/pip/commands/list.py | 337 + .../site-packages/pip/commands/search.py | 133 + .../site-packages/pip/commands/show.py | 154 + .../site-packages/pip/commands/uninstall.py | 76 + .../site-packages/pip/commands/wheel.py | 208 + .../site-packages/pip/compat/__init__.py | 164 + .../__pycache__/__init__.cpython-36.pyc | Bin 0 -> 3957 bytes .../__pycache__/dictconfig.cpython-36.pyc | Bin 0 -> 13604 bytes .../site-packages/pip/compat/dictconfig.py | 565 ++ .../python3.6/site-packages/pip/download.py | 906 +++ .../python3.6/site-packages/pip/exceptions.py | 244 + .../lib/python3.6/site-packages/pip/index.py | 1102 ++++ .../python3.6/site-packages/pip/locations.py | 182 + .../site-packages/pip/models/__init__.py | 4 + .../__pycache__/__init__.cpython-36.pyc | Bin 0 -> 223 bytes .../models/__pycache__/index.cpython-36.pyc | Bin 0 -> 827 bytes .../site-packages/pip/models/index.py | 16 + .../site-packages/pip/operations/__init__.py | 0 .../__pycache__/__init__.cpython-36.pyc | Bin 0 -> 137 bytes .../__pycache__/check.cpython-36.pyc | Bin 0 -> 1424 bytes .../__pycache__/freeze.cpython-36.pyc | Bin 0 -> 2881 bytes .../site-packages/pip/operations/check.py | 49 + .../site-packages/pip/operations/freeze.py | 132 + .../python3.6/site-packages/pip/pep425tags.py | 324 + .../site-packages/pip/req/__init__.py | 10 + .../req/__pycache__/__init__.cpython-36.pyc | Bin 0 -> 404 bytes .../req/__pycache__/req_file.cpython-36.pyc | Bin 0 -> 8419 bytes .../__pycache__/req_install.cpython-36.pyc | Bin 0 -> 30120 bytes .../req/__pycache__/req_set.cpython-36.pyc | Bin 0 -> 20967 bytes .../__pycache__/req_uninstall.cpython-36.pyc | Bin 0 -> 6282 bytes .../site-packages/pip/req/req_file.py | 342 + .../site-packages/pip/req/req_install.py | 1204 ++++ .../site-packages/pip/req/req_set.py | 798 +++ .../site-packages/pip/req/req_uninstall.py | 195 + .../site-packages/pip/status_codes.py | 8 + .../site-packages/pip/utils/__init__.py | 870 +++ .../utils/__pycache__/__init__.cpython-36.pyc | Bin 0 -> 22743 bytes .../utils/__pycache__/appdirs.cpython-36.pyc | Bin 0 -> 7701 bytes .../utils/__pycache__/build.cpython-36.pyc | Bin 0 -> 1315 bytes .../__pycache__/deprecation.cpython-36.pyc | Bin 0 -> 1728 bytes .../utils/__pycache__/encoding.cpython-36.pyc | Bin 0 -> 1018 bytes .../__pycache__/filesystem.cpython-36.pyc | Bin 0 -> 583 bytes .../utils/__pycache__/glibc.cpython-36.pyc | Bin 0 -> 1366 bytes .../utils/__pycache__/hashes.cpython-36.pyc | Bin 0 -> 3242 bytes .../utils/__pycache__/logging.cpython-36.pyc | Bin 0 -> 3898 bytes .../utils/__pycache__/outdated.cpython-36.pyc | Bin 0 -> 4223 bytes .../__pycache__/packaging.cpython-36.pyc | Bin 0 -> 1986 bytes .../setuptools_build.cpython-36.pyc | Bin 0 -> 327 bytes .../pip/utils/__pycache__/ui.cpython-36.pyc | Bin 0 -> 9583 bytes .../site-packages/pip/utils/appdirs.py | 248 + .../site-packages/pip/utils/build.py | 42 + .../site-packages/pip/utils/deprecation.py | 76 + .../site-packages/pip/utils/encoding.py | 31 + .../site-packages/pip/utils/filesystem.py | 28 + .../site-packages/pip/utils/glibc.py | 81 + .../site-packages/pip/utils/hashes.py | 92 + .../site-packages/pip/utils/logging.py | 130 + .../site-packages/pip/utils/outdated.py | 162 + .../site-packages/pip/utils/packaging.py | 63 + .../pip/utils/setuptools_build.py | 8 + .../python3.6/site-packages/pip/utils/ui.py | 344 + .../site-packages/pip/vcs/__init__.py | 366 ++ .../vcs/__pycache__/__init__.cpython-36.pyc | Bin 0 -> 11102 bytes .../pip/vcs/__pycache__/bazaar.cpython-36.pyc | Bin 0 -> 3655 bytes .../pip/vcs/__pycache__/git.cpython-36.pyc | Bin 0 -> 8795 bytes .../vcs/__pycache__/mercurial.cpython-36.pyc | Bin 0 -> 3568 bytes .../vcs/__pycache__/subversion.cpython-36.pyc | Bin 0 -> 7107 bytes .../python3.6/site-packages/pip/vcs/bazaar.py | 116 + .../python3.6/site-packages/pip/vcs/git.py | 300 + .../site-packages/pip/vcs/mercurial.py | 103 + .../site-packages/pip/vcs/subversion.py | 269 + .../lib/python3.6/site-packages/pip/wheel.py | 853 +++ .../DESCRIPTION.rst | 3 + .../pkg_resources-0.0.0.dist-info/INSTALLER | 1 + .../pkg_resources-0.0.0.dist-info/METADATA | 13 + .../pkg_resources-0.0.0.dist-info/RECORD | 38 + .../pkg_resources-0.0.0.dist-info/WHEEL | 6 + .../metadata.json | 1 + .../site-packages/pkg_resources/__init__.py | 3125 +++++++++ .../__pycache__/__init__.cpython-36.pyc | Bin 0 -> 95310 bytes .../__pycache__/py31compat.cpython-36.pyc | Bin 0 -> 657 bytes .../pkg_resources/_vendor/__init__.py | 0 .../__pycache__/__init__.cpython-36.pyc | Bin 0 -> 154 bytes .../__pycache__/appdirs.cpython-36.pyc | Bin 0 -> 18580 bytes .../__pycache__/pyparsing.cpython-36.pyc | Bin 0 -> 201076 bytes .../_vendor/__pycache__/six.cpython-36.pyc | Bin 0 -> 24451 bytes .../pkg_resources/_vendor/appdirs.py | 552 ++ .../_vendor/packaging/__about__.py | 21 + .../_vendor/packaging/__init__.py | 14 + .../__pycache__/__about__.cpython-36.pyc | Bin 0 -> 690 bytes .../__pycache__/__init__.cpython-36.pyc | Bin 0 -> 528 bytes .../__pycache__/_compat.cpython-36.pyc | Bin 0 -> 975 bytes .../__pycache__/_structures.cpython-36.pyc | Bin 0 -> 2832 bytes .../__pycache__/markers.cpython-36.pyc | Bin 0 -> 8855 bytes .../__pycache__/requirements.cpython-36.pyc | Bin 0 -> 3851 bytes .../__pycache__/specifiers.cpython-36.pyc | Bin 0 -> 19794 bytes .../__pycache__/utils.cpython-36.pyc | Bin 0 -> 459 bytes .../__pycache__/version.cpython-36.pyc | Bin 0 -> 10569 bytes .../_vendor/packaging/_compat.py | 30 + .../_vendor/packaging/_structures.py | 68 + .../_vendor/packaging/markers.py | 301 + .../_vendor/packaging/requirements.py | 127 + .../_vendor/packaging/specifiers.py | 774 +++ .../pkg_resources/_vendor/packaging/utils.py | 14 + .../_vendor/packaging/version.py | 393 ++ .../pkg_resources/_vendor/pyparsing.py | 5696 +++++++++++++++++ .../pkg_resources/_vendor/six.py | 868 +++ .../pkg_resources/extern/__init__.py | 73 + .../__pycache__/__init__.cpython-36.pyc | Bin 0 -> 2385 bytes .../site-packages/pkg_resources/py31compat.py | 22 + .../DESCRIPTION.rst | 36 + .../setuptools-39.0.1.dist-info/INSTALLER | 1 + .../setuptools-39.0.1.dist-info/METADATA | 67 + .../setuptools-39.0.1.dist-info/RECORD | 155 + .../setuptools-39.0.1.dist-info/WHEEL | 6 + .../dependency_links.txt | 2 + .../entry_points.txt | 64 + .../setuptools-39.0.1.dist-info/metadata.json | 1 + .../setuptools-39.0.1.dist-info/top_level.txt | 3 + .../setuptools-39.0.1.dist-info/zip-safe | 1 + .../site-packages/setuptools/__init__.py | 180 + .../__pycache__/__init__.cpython-36.pyc | Bin 0 -> 6246 bytes .../__pycache__/archive_util.cpython-36.pyc | Bin 0 -> 5094 bytes .../__pycache__/build_meta.cpython-36.pyc | Bin 0 -> 5867 bytes .../__pycache__/config.cpython-36.pyc | Bin 0 -> 14323 bytes .../__pycache__/dep_util.cpython-36.pyc | Bin 0 -> 813 bytes .../__pycache__/depends.cpython-36.pyc | Bin 0 -> 5239 bytes .../__pycache__/dist.cpython-36.pyc | Bin 0 -> 36818 bytes .../__pycache__/extension.cpython-36.pyc | Bin 0 -> 1933 bytes .../__pycache__/glibc.cpython-36.pyc | Bin 0 -> 1503 bytes .../__pycache__/glob.cpython-36.pyc | Bin 0 -> 3801 bytes .../__pycache__/launch.cpython-36.pyc | Bin 0 -> 812 bytes .../__pycache__/lib2to3_ex.cpython-36.pyc | Bin 0 -> 2391 bytes .../__pycache__/monkey.cpython-36.pyc | Bin 0 -> 5133 bytes .../__pycache__/msvc.cpython-36.pyc | Bin 0 -> 34498 bytes .../__pycache__/namespaces.cpython-36.pyc | Bin 0 -> 3636 bytes .../__pycache__/package_index.cpython-36.pyc | Bin 0 -> 32218 bytes .../__pycache__/pep425tags.cpython-36.pyc | Bin 0 -> 7296 bytes .../__pycache__/py27compat.cpython-36.pyc | Bin 0 -> 769 bytes .../__pycache__/py31compat.cpython-36.pyc | Bin 0 -> 1508 bytes .../__pycache__/py33compat.cpython-36.pyc | Bin 0 -> 1361 bytes .../__pycache__/py36compat.cpython-36.pyc | Bin 0 -> 2165 bytes .../__pycache__/sandbox.cpython-36.pyc | Bin 0 -> 15681 bytes .../__pycache__/site-patch.cpython-36.pyc | Bin 0 -> 1464 bytes .../__pycache__/ssl_support.cpython-36.pyc | Bin 0 -> 6744 bytes .../__pycache__/unicode_utils.cpython-36.pyc | Bin 0 -> 1127 bytes .../__pycache__/version.cpython-36.pyc | Bin 0 -> 286 bytes .../__pycache__/wheel.cpython-36.pyc | Bin 0 -> 5781 bytes .../windows_support.cpython-36.pyc | Bin 0 -> 969 bytes .../setuptools/_vendor/__init__.py | 0 .../__pycache__/__init__.cpython-36.pyc | Bin 0 -> 148 bytes .../__pycache__/pyparsing.cpython-36.pyc | Bin 0 -> 201070 bytes .../_vendor/__pycache__/six.cpython-36.pyc | Bin 0 -> 24445 bytes .../setuptools/_vendor/packaging/__about__.py | 21 + .../setuptools/_vendor/packaging/__init__.py | 14 + .../__pycache__/__about__.cpython-36.pyc | Bin 0 -> 684 bytes .../__pycache__/__init__.cpython-36.pyc | Bin 0 -> 522 bytes .../__pycache__/_compat.cpython-36.pyc | Bin 0 -> 969 bytes .../__pycache__/_structures.cpython-36.pyc | Bin 0 -> 2826 bytes .../__pycache__/markers.cpython-36.pyc | Bin 0 -> 8846 bytes .../__pycache__/requirements.cpython-36.pyc | Bin 0 -> 3839 bytes .../__pycache__/specifiers.cpython-36.pyc | Bin 0 -> 19788 bytes .../__pycache__/utils.cpython-36.pyc | Bin 0 -> 453 bytes .../__pycache__/version.cpython-36.pyc | Bin 0 -> 10563 bytes .../setuptools/_vendor/packaging/_compat.py | 30 + .../_vendor/packaging/_structures.py | 68 + .../setuptools/_vendor/packaging/markers.py | 301 + .../_vendor/packaging/requirements.py | 127 + .../_vendor/packaging/specifiers.py | 774 +++ .../setuptools/_vendor/packaging/utils.py | 14 + .../setuptools/_vendor/packaging/version.py | 393 ++ .../setuptools/_vendor/pyparsing.py | 5696 +++++++++++++++++ .../site-packages/setuptools/_vendor/six.py | 868 +++ .../site-packages/setuptools/archive_util.py | 173 + .../site-packages/setuptools/build_meta.py | 172 + .../site-packages/setuptools/cli-32.exe | Bin 0 -> 65536 bytes .../site-packages/setuptools/cli-64.exe | Bin 0 -> 74752 bytes .../site-packages/setuptools/cli.exe | Bin 0 -> 65536 bytes .../setuptools/command/__init__.py | 18 + .../__pycache__/__init__.cpython-36.pyc | Bin 0 -> 699 bytes .../command/__pycache__/alias.cpython-36.pyc | Bin 0 -> 2392 bytes .../__pycache__/bdist_egg.cpython-36.pyc | Bin 0 -> 14373 bytes .../__pycache__/bdist_rpm.cpython-36.pyc | Bin 0 -> 1735 bytes .../__pycache__/bdist_wininst.cpython-36.pyc | Bin 0 -> 936 bytes .../__pycache__/build_clib.cpython-36.pyc | Bin 0 -> 2407 bytes .../__pycache__/build_ext.cpython-36.pyc | Bin 0 -> 10006 bytes .../__pycache__/build_py.cpython-36.pyc | Bin 0 -> 8531 bytes .../__pycache__/develop.cpython-36.pyc | Bin 0 -> 6385 bytes .../__pycache__/dist_info.cpython-36.pyc | Bin 0 -> 1352 bytes .../__pycache__/easy_install.cpython-36.pyc | Bin 0 -> 66239 bytes .../__pycache__/egg_info.cpython-36.pyc | Bin 0 -> 20935 bytes .../__pycache__/install.cpython-36.pyc | Bin 0 -> 3932 bytes .../install_egg_info.cpython-36.pyc | Bin 0 -> 2916 bytes .../__pycache__/install_lib.cpython-36.pyc | Bin 0 -> 5050 bytes .../install_scripts.cpython-36.pyc | Bin 0 -> 2237 bytes .../__pycache__/py36compat.cpython-36.pyc | Bin 0 -> 4582 bytes .../__pycache__/register.cpython-36.pyc | Bin 0 -> 552 bytes .../command/__pycache__/rotate.cpython-36.pyc | Bin 0 -> 2538 bytes .../__pycache__/saveopts.cpython-36.pyc | Bin 0 -> 883 bytes .../command/__pycache__/sdist.cpython-36.pyc | Bin 0 -> 6347 bytes .../command/__pycache__/setopt.cpython-36.pyc | Bin 0 -> 4561 bytes .../command/__pycache__/test.cpython-36.pyc | Bin 0 -> 8120 bytes .../command/__pycache__/upload.cpython-36.pyc | Bin 0 -> 1350 bytes .../__pycache__/upload_docs.cpython-36.pyc | Bin 0 -> 6059 bytes .../site-packages/setuptools/command/alias.py | 80 + .../setuptools/command/bdist_egg.py | 502 ++ .../setuptools/command/bdist_rpm.py | 43 + .../setuptools/command/bdist_wininst.py | 21 + .../setuptools/command/build_clib.py | 98 + .../setuptools/command/build_ext.py | 331 + .../setuptools/command/build_py.py | 270 + .../setuptools/command/develop.py | 216 + .../setuptools/command/dist_info.py | 36 + .../setuptools/command/easy_install.py | 2389 +++++++ .../setuptools/command/egg_info.py | 696 ++ .../setuptools/command/install.py | 125 + .../setuptools/command/install_egg_info.py | 82 + .../setuptools/command/install_lib.py | 148 + .../setuptools/command/install_scripts.py | 65 + .../setuptools/command/launcher manifest.xml | 15 + .../setuptools/command/py36compat.py | 136 + .../setuptools/command/register.py | 10 + .../setuptools/command/rotate.py | 66 + .../setuptools/command/saveopts.py | 22 + .../site-packages/setuptools/command/sdist.py | 200 + .../setuptools/command/setopt.py | 149 + .../site-packages/setuptools/command/test.py | 268 + .../setuptools/command/upload.py | 42 + .../setuptools/command/upload_docs.py | 206 + .../site-packages/setuptools/config.py | 556 ++ .../site-packages/setuptools/dep_util.py | 23 + .../site-packages/setuptools/depends.py | 186 + .../site-packages/setuptools/dist.py | 1070 ++++ .../site-packages/setuptools/extension.py | 57 + .../setuptools/extern/__init__.py | 73 + .../__pycache__/__init__.cpython-36.pyc | Bin 0 -> 2387 bytes .../site-packages/setuptools/glibc.py | 86 + .../site-packages/setuptools/glob.py | 176 + .../site-packages/setuptools/gui-32.exe | Bin 0 -> 65536 bytes .../site-packages/setuptools/gui-64.exe | Bin 0 -> 75264 bytes .../site-packages/setuptools/gui.exe | Bin 0 -> 65536 bytes .../site-packages/setuptools/launch.py | 35 + .../site-packages/setuptools/lib2to3_ex.py | 62 + .../site-packages/setuptools/monkey.py | 197 + .../site-packages/setuptools/msvc.py | 1302 ++++ .../site-packages/setuptools/namespaces.py | 107 + .../site-packages/setuptools/package_index.py | 1119 ++++ .../site-packages/setuptools/pep425tags.py | 316 + .../site-packages/setuptools/py27compat.py | 28 + .../site-packages/setuptools/py31compat.py | 41 + .../site-packages/setuptools/py33compat.py | 54 + .../site-packages/setuptools/py36compat.py | 82 + .../site-packages/setuptools/sandbox.py | 491 ++ .../setuptools/script (dev).tmpl | 5 + .../site-packages/setuptools/script.tmpl | 3 + .../site-packages/setuptools/site-patch.py | 74 + .../site-packages/setuptools/ssl_support.py | 260 + .../site-packages/setuptools/unicode_utils.py | 44 + .../site-packages/setuptools/version.py | 6 + .../site-packages/setuptools/wheel.py | 163 + .../setuptools/windows_support.py | 29 + week-0/day-3/venv/lib64 | 1 + week-0/day-3/venv/pyvenv.cfg | 3 + .../CacheControl-0.11.7-py2.py3-none-any.whl | Bin 0 -> 18720 bytes .../appdirs-1.4.3-py2.py3-none-any.whl | Bin 0 -> 12139 bytes .../certifi-2018.1.18-py2.py3-none-any.whl | Bin 0 -> 150807 bytes .../chardet-3.0.4-py2.py3-none-any.whl | Bin 0 -> 133328 bytes .../colorama-0.3.7-py2.py3-none-any.whl | Bin 0 -> 19915 bytes .../distlib-0.2.6-py2.py3-none-any.whl | Bin 0 -> 141707 bytes .../distro-1.0.1-py2.py3-none-any.whl | Bin 0 -> 11733 bytes .../html5lib-0.999999999-py2.py3-none-any.whl | Bin 0 -> 112620 bytes .../idna-2.6-py2.py3-none-any.whl | Bin 0 -> 56485 bytes .../ipaddress-0.0.0-py2.py3-none-any.whl | Bin 0 -> 17503 bytes .../lockfile-0.12.2-py2.py3-none-any.whl | Bin 0 -> 13506 bytes .../packaging-17.1-py2.py3-none-any.whl | Bin 0 -> 24058 bytes .../pip-9.0.1-py2.py3-none-any.whl | Bin 0 -> 159152 bytes .../pkg_resources-0.0.0-py2.py3-none-any.whl | Bin 0 -> 115663 bytes .../progress-1.2-py2.py3-none-any.whl | Bin 0 -> 9606 bytes .../pyparsing-2.2.0-py2.py3-none-any.whl | Bin 0 -> 56411 bytes .../requests-2.18.4-py2.py3-none-any.whl | Bin 0 -> 88788 bytes .../retrying-1.3.3-py2.py3-none-any.whl | Bin 0 -> 9480 bytes .../setuptools-39.0.1-py2.py3-none-any.whl | Bin 0 -> 455758 bytes .../six-1.11.0-py2.py3-none-any.whl | Bin 0 -> 10720 bytes .../urllib3-1.22-py2.py3-none-any.whl | Bin 0 -> 124700 bytes .../webencodings-0.5-py2.py3-none-any.whl | Bin 0 -> 11646 bytes .../wheel-0.30.0-py2.py3-none-any.whl | Bin 0 -> 48886 bytes 696 files changed, 97666 insertions(+), 13 deletions(-) create mode 100644 week-0/day-3/my_todo_app/todo_app/templates/404.html create mode 100644 week-0/day-3/my_todo_app/todo_app/templates/todo_view.html create mode 100644 week-0/day-3/my_todo_app/venvironment/bin/activate create mode 100644 week-0/day-3/my_todo_app/venvironment/bin/activate.csh create mode 100644 week-0/day-3/my_todo_app/venvironment/bin/activate.fish create mode 100755 week-0/day-3/my_todo_app/venvironment/bin/easy_install create mode 100755 week-0/day-3/my_todo_app/venvironment/bin/easy_install-3.6 create mode 100755 week-0/day-3/my_todo_app/venvironment/bin/pip create mode 100755 week-0/day-3/my_todo_app/venvironment/bin/pip3 create mode 100755 week-0/day-3/my_todo_app/venvironment/bin/pip3.6 create mode 120000 week-0/day-3/my_todo_app/venvironment/bin/python create mode 120000 week-0/day-3/my_todo_app/venvironment/bin/python3 create mode 100644 week-0/day-3/my_todo_app/venvironment/lib/python3.6/site-packages/__pycache__/easy_install.cpython-36.pyc create mode 100644 week-0/day-3/my_todo_app/venvironment/lib/python3.6/site-packages/easy_install.py create mode 100644 week-0/day-3/my_todo_app/venvironment/lib/python3.6/site-packages/pip-9.0.1.dist-info/DESCRIPTION.rst create mode 100644 week-0/day-3/my_todo_app/venvironment/lib/python3.6/site-packages/pip-9.0.1.dist-info/INSTALLER create mode 100644 week-0/day-3/my_todo_app/venvironment/lib/python3.6/site-packages/pip-9.0.1.dist-info/METADATA create mode 100644 week-0/day-3/my_todo_app/venvironment/lib/python3.6/site-packages/pip-9.0.1.dist-info/RECORD create mode 100644 week-0/day-3/my_todo_app/venvironment/lib/python3.6/site-packages/pip-9.0.1.dist-info/WHEEL create mode 100644 week-0/day-3/my_todo_app/venvironment/lib/python3.6/site-packages/pip-9.0.1.dist-info/entry_points.txt create mode 100644 week-0/day-3/my_todo_app/venvironment/lib/python3.6/site-packages/pip-9.0.1.dist-info/metadata.json create mode 100644 week-0/day-3/my_todo_app/venvironment/lib/python3.6/site-packages/pip-9.0.1.dist-info/top_level.txt create mode 100644 week-0/day-3/my_todo_app/venvironment/lib/python3.6/site-packages/pip/__init__.py create mode 100644 week-0/day-3/my_todo_app/venvironment/lib/python3.6/site-packages/pip/__main__.py create mode 100644 week-0/day-3/my_todo_app/venvironment/lib/python3.6/site-packages/pip/__pycache__/__init__.cpython-36.pyc create mode 100644 week-0/day-3/my_todo_app/venvironment/lib/python3.6/site-packages/pip/__pycache__/__main__.cpython-36.pyc create mode 100644 week-0/day-3/my_todo_app/venvironment/lib/python3.6/site-packages/pip/__pycache__/basecommand.cpython-36.pyc create mode 100644 week-0/day-3/my_todo_app/venvironment/lib/python3.6/site-packages/pip/__pycache__/baseparser.cpython-36.pyc create mode 100644 week-0/day-3/my_todo_app/venvironment/lib/python3.6/site-packages/pip/__pycache__/cmdoptions.cpython-36.pyc create mode 100644 week-0/day-3/my_todo_app/venvironment/lib/python3.6/site-packages/pip/__pycache__/download.cpython-36.pyc create mode 100644 week-0/day-3/my_todo_app/venvironment/lib/python3.6/site-packages/pip/__pycache__/exceptions.cpython-36.pyc create mode 100644 week-0/day-3/my_todo_app/venvironment/lib/python3.6/site-packages/pip/__pycache__/index.cpython-36.pyc create mode 100644 week-0/day-3/my_todo_app/venvironment/lib/python3.6/site-packages/pip/__pycache__/locations.cpython-36.pyc create mode 100644 week-0/day-3/my_todo_app/venvironment/lib/python3.6/site-packages/pip/__pycache__/pep425tags.cpython-36.pyc create mode 100644 week-0/day-3/my_todo_app/venvironment/lib/python3.6/site-packages/pip/__pycache__/status_codes.cpython-36.pyc create mode 100644 week-0/day-3/my_todo_app/venvironment/lib/python3.6/site-packages/pip/__pycache__/wheel.cpython-36.pyc create mode 100644 week-0/day-3/my_todo_app/venvironment/lib/python3.6/site-packages/pip/_vendor/__init__.py create mode 100644 week-0/day-3/my_todo_app/venvironment/lib/python3.6/site-packages/pip/_vendor/__pycache__/__init__.cpython-36.pyc create mode 100644 week-0/day-3/my_todo_app/venvironment/lib/python3.6/site-packages/pip/basecommand.py create mode 100644 week-0/day-3/my_todo_app/venvironment/lib/python3.6/site-packages/pip/baseparser.py create mode 100644 week-0/day-3/my_todo_app/venvironment/lib/python3.6/site-packages/pip/cmdoptions.py create mode 100644 week-0/day-3/my_todo_app/venvironment/lib/python3.6/site-packages/pip/commands/__init__.py create mode 100644 week-0/day-3/my_todo_app/venvironment/lib/python3.6/site-packages/pip/commands/__pycache__/__init__.cpython-36.pyc create mode 100644 week-0/day-3/my_todo_app/venvironment/lib/python3.6/site-packages/pip/commands/__pycache__/check.cpython-36.pyc create mode 100644 week-0/day-3/my_todo_app/venvironment/lib/python3.6/site-packages/pip/commands/__pycache__/completion.cpython-36.pyc create mode 100644 week-0/day-3/my_todo_app/venvironment/lib/python3.6/site-packages/pip/commands/__pycache__/download.cpython-36.pyc create mode 100644 week-0/day-3/my_todo_app/venvironment/lib/python3.6/site-packages/pip/commands/__pycache__/freeze.cpython-36.pyc create mode 100644 week-0/day-3/my_todo_app/venvironment/lib/python3.6/site-packages/pip/commands/__pycache__/hash.cpython-36.pyc create mode 100644 week-0/day-3/my_todo_app/venvironment/lib/python3.6/site-packages/pip/commands/__pycache__/help.cpython-36.pyc create mode 100644 week-0/day-3/my_todo_app/venvironment/lib/python3.6/site-packages/pip/commands/__pycache__/install.cpython-36.pyc create mode 100644 week-0/day-3/my_todo_app/venvironment/lib/python3.6/site-packages/pip/commands/__pycache__/list.cpython-36.pyc create mode 100644 week-0/day-3/my_todo_app/venvironment/lib/python3.6/site-packages/pip/commands/__pycache__/search.cpython-36.pyc create mode 100644 week-0/day-3/my_todo_app/venvironment/lib/python3.6/site-packages/pip/commands/__pycache__/show.cpython-36.pyc create mode 100644 week-0/day-3/my_todo_app/venvironment/lib/python3.6/site-packages/pip/commands/__pycache__/uninstall.cpython-36.pyc create mode 100644 week-0/day-3/my_todo_app/venvironment/lib/python3.6/site-packages/pip/commands/__pycache__/wheel.cpython-36.pyc create mode 100644 week-0/day-3/my_todo_app/venvironment/lib/python3.6/site-packages/pip/commands/check.py create mode 100644 week-0/day-3/my_todo_app/venvironment/lib/python3.6/site-packages/pip/commands/completion.py create mode 100644 week-0/day-3/my_todo_app/venvironment/lib/python3.6/site-packages/pip/commands/download.py create mode 100644 week-0/day-3/my_todo_app/venvironment/lib/python3.6/site-packages/pip/commands/freeze.py create mode 100644 week-0/day-3/my_todo_app/venvironment/lib/python3.6/site-packages/pip/commands/hash.py create mode 100644 week-0/day-3/my_todo_app/venvironment/lib/python3.6/site-packages/pip/commands/help.py create mode 100644 week-0/day-3/my_todo_app/venvironment/lib/python3.6/site-packages/pip/commands/install.py create mode 100644 week-0/day-3/my_todo_app/venvironment/lib/python3.6/site-packages/pip/commands/list.py create mode 100644 week-0/day-3/my_todo_app/venvironment/lib/python3.6/site-packages/pip/commands/search.py create mode 100644 week-0/day-3/my_todo_app/venvironment/lib/python3.6/site-packages/pip/commands/show.py create mode 100644 week-0/day-3/my_todo_app/venvironment/lib/python3.6/site-packages/pip/commands/uninstall.py create mode 100644 week-0/day-3/my_todo_app/venvironment/lib/python3.6/site-packages/pip/commands/wheel.py create mode 100644 week-0/day-3/my_todo_app/venvironment/lib/python3.6/site-packages/pip/compat/__init__.py create mode 100644 week-0/day-3/my_todo_app/venvironment/lib/python3.6/site-packages/pip/compat/__pycache__/__init__.cpython-36.pyc create mode 100644 week-0/day-3/my_todo_app/venvironment/lib/python3.6/site-packages/pip/compat/__pycache__/dictconfig.cpython-36.pyc create mode 100644 week-0/day-3/my_todo_app/venvironment/lib/python3.6/site-packages/pip/compat/dictconfig.py create mode 100644 week-0/day-3/my_todo_app/venvironment/lib/python3.6/site-packages/pip/download.py create mode 100644 week-0/day-3/my_todo_app/venvironment/lib/python3.6/site-packages/pip/exceptions.py create mode 100644 week-0/day-3/my_todo_app/venvironment/lib/python3.6/site-packages/pip/index.py create mode 100644 week-0/day-3/my_todo_app/venvironment/lib/python3.6/site-packages/pip/locations.py create mode 100644 week-0/day-3/my_todo_app/venvironment/lib/python3.6/site-packages/pip/models/__init__.py create mode 100644 week-0/day-3/my_todo_app/venvironment/lib/python3.6/site-packages/pip/models/__pycache__/__init__.cpython-36.pyc create mode 100644 week-0/day-3/my_todo_app/venvironment/lib/python3.6/site-packages/pip/models/__pycache__/index.cpython-36.pyc create mode 100644 week-0/day-3/my_todo_app/venvironment/lib/python3.6/site-packages/pip/models/index.py create mode 100644 week-0/day-3/my_todo_app/venvironment/lib/python3.6/site-packages/pip/operations/__init__.py create mode 100644 week-0/day-3/my_todo_app/venvironment/lib/python3.6/site-packages/pip/operations/__pycache__/__init__.cpython-36.pyc create mode 100644 week-0/day-3/my_todo_app/venvironment/lib/python3.6/site-packages/pip/operations/__pycache__/check.cpython-36.pyc create mode 100644 week-0/day-3/my_todo_app/venvironment/lib/python3.6/site-packages/pip/operations/__pycache__/freeze.cpython-36.pyc create mode 100644 week-0/day-3/my_todo_app/venvironment/lib/python3.6/site-packages/pip/operations/check.py create mode 100644 week-0/day-3/my_todo_app/venvironment/lib/python3.6/site-packages/pip/operations/freeze.py create mode 100644 week-0/day-3/my_todo_app/venvironment/lib/python3.6/site-packages/pip/pep425tags.py create mode 100644 week-0/day-3/my_todo_app/venvironment/lib/python3.6/site-packages/pip/req/__init__.py create mode 100644 week-0/day-3/my_todo_app/venvironment/lib/python3.6/site-packages/pip/req/__pycache__/__init__.cpython-36.pyc create mode 100644 week-0/day-3/my_todo_app/venvironment/lib/python3.6/site-packages/pip/req/__pycache__/req_file.cpython-36.pyc create mode 100644 week-0/day-3/my_todo_app/venvironment/lib/python3.6/site-packages/pip/req/__pycache__/req_install.cpython-36.pyc create mode 100644 week-0/day-3/my_todo_app/venvironment/lib/python3.6/site-packages/pip/req/__pycache__/req_set.cpython-36.pyc create mode 100644 week-0/day-3/my_todo_app/venvironment/lib/python3.6/site-packages/pip/req/__pycache__/req_uninstall.cpython-36.pyc create mode 100644 week-0/day-3/my_todo_app/venvironment/lib/python3.6/site-packages/pip/req/req_file.py create mode 100644 week-0/day-3/my_todo_app/venvironment/lib/python3.6/site-packages/pip/req/req_install.py create mode 100644 week-0/day-3/my_todo_app/venvironment/lib/python3.6/site-packages/pip/req/req_set.py create mode 100644 week-0/day-3/my_todo_app/venvironment/lib/python3.6/site-packages/pip/req/req_uninstall.py create mode 100644 week-0/day-3/my_todo_app/venvironment/lib/python3.6/site-packages/pip/status_codes.py create mode 100644 week-0/day-3/my_todo_app/venvironment/lib/python3.6/site-packages/pip/utils/__init__.py create mode 100644 week-0/day-3/my_todo_app/venvironment/lib/python3.6/site-packages/pip/utils/__pycache__/__init__.cpython-36.pyc create mode 100644 week-0/day-3/my_todo_app/venvironment/lib/python3.6/site-packages/pip/utils/__pycache__/appdirs.cpython-36.pyc create mode 100644 week-0/day-3/my_todo_app/venvironment/lib/python3.6/site-packages/pip/utils/__pycache__/build.cpython-36.pyc create mode 100644 week-0/day-3/my_todo_app/venvironment/lib/python3.6/site-packages/pip/utils/__pycache__/deprecation.cpython-36.pyc create mode 100644 week-0/day-3/my_todo_app/venvironment/lib/python3.6/site-packages/pip/utils/__pycache__/encoding.cpython-36.pyc create mode 100644 week-0/day-3/my_todo_app/venvironment/lib/python3.6/site-packages/pip/utils/__pycache__/filesystem.cpython-36.pyc create mode 100644 week-0/day-3/my_todo_app/venvironment/lib/python3.6/site-packages/pip/utils/__pycache__/glibc.cpython-36.pyc create mode 100644 week-0/day-3/my_todo_app/venvironment/lib/python3.6/site-packages/pip/utils/__pycache__/hashes.cpython-36.pyc create mode 100644 week-0/day-3/my_todo_app/venvironment/lib/python3.6/site-packages/pip/utils/__pycache__/logging.cpython-36.pyc create mode 100644 week-0/day-3/my_todo_app/venvironment/lib/python3.6/site-packages/pip/utils/__pycache__/outdated.cpython-36.pyc create mode 100644 week-0/day-3/my_todo_app/venvironment/lib/python3.6/site-packages/pip/utils/__pycache__/packaging.cpython-36.pyc create mode 100644 week-0/day-3/my_todo_app/venvironment/lib/python3.6/site-packages/pip/utils/__pycache__/setuptools_build.cpython-36.pyc create mode 100644 week-0/day-3/my_todo_app/venvironment/lib/python3.6/site-packages/pip/utils/__pycache__/ui.cpython-36.pyc create mode 100644 week-0/day-3/my_todo_app/venvironment/lib/python3.6/site-packages/pip/utils/appdirs.py create mode 100644 week-0/day-3/my_todo_app/venvironment/lib/python3.6/site-packages/pip/utils/build.py create mode 100644 week-0/day-3/my_todo_app/venvironment/lib/python3.6/site-packages/pip/utils/deprecation.py create mode 100644 week-0/day-3/my_todo_app/venvironment/lib/python3.6/site-packages/pip/utils/encoding.py create mode 100644 week-0/day-3/my_todo_app/venvironment/lib/python3.6/site-packages/pip/utils/filesystem.py create mode 100644 week-0/day-3/my_todo_app/venvironment/lib/python3.6/site-packages/pip/utils/glibc.py create mode 100644 week-0/day-3/my_todo_app/venvironment/lib/python3.6/site-packages/pip/utils/hashes.py create mode 100644 week-0/day-3/my_todo_app/venvironment/lib/python3.6/site-packages/pip/utils/logging.py create mode 100644 week-0/day-3/my_todo_app/venvironment/lib/python3.6/site-packages/pip/utils/outdated.py create mode 100644 week-0/day-3/my_todo_app/venvironment/lib/python3.6/site-packages/pip/utils/packaging.py create mode 100644 week-0/day-3/my_todo_app/venvironment/lib/python3.6/site-packages/pip/utils/setuptools_build.py create mode 100644 week-0/day-3/my_todo_app/venvironment/lib/python3.6/site-packages/pip/utils/ui.py create mode 100644 week-0/day-3/my_todo_app/venvironment/lib/python3.6/site-packages/pip/vcs/__init__.py create mode 100644 week-0/day-3/my_todo_app/venvironment/lib/python3.6/site-packages/pip/vcs/__pycache__/__init__.cpython-36.pyc create mode 100644 week-0/day-3/my_todo_app/venvironment/lib/python3.6/site-packages/pip/vcs/__pycache__/bazaar.cpython-36.pyc create mode 100644 week-0/day-3/my_todo_app/venvironment/lib/python3.6/site-packages/pip/vcs/__pycache__/git.cpython-36.pyc create mode 100644 week-0/day-3/my_todo_app/venvironment/lib/python3.6/site-packages/pip/vcs/__pycache__/mercurial.cpython-36.pyc create mode 100644 week-0/day-3/my_todo_app/venvironment/lib/python3.6/site-packages/pip/vcs/__pycache__/subversion.cpython-36.pyc create mode 100644 week-0/day-3/my_todo_app/venvironment/lib/python3.6/site-packages/pip/vcs/bazaar.py create mode 100644 week-0/day-3/my_todo_app/venvironment/lib/python3.6/site-packages/pip/vcs/git.py create mode 100644 week-0/day-3/my_todo_app/venvironment/lib/python3.6/site-packages/pip/vcs/mercurial.py create mode 100644 week-0/day-3/my_todo_app/venvironment/lib/python3.6/site-packages/pip/vcs/subversion.py create mode 100644 week-0/day-3/my_todo_app/venvironment/lib/python3.6/site-packages/pip/wheel.py create mode 100644 week-0/day-3/my_todo_app/venvironment/lib/python3.6/site-packages/pkg_resources-0.0.0.dist-info/DESCRIPTION.rst create mode 100644 week-0/day-3/my_todo_app/venvironment/lib/python3.6/site-packages/pkg_resources-0.0.0.dist-info/INSTALLER create mode 100644 week-0/day-3/my_todo_app/venvironment/lib/python3.6/site-packages/pkg_resources-0.0.0.dist-info/METADATA create mode 100644 week-0/day-3/my_todo_app/venvironment/lib/python3.6/site-packages/pkg_resources-0.0.0.dist-info/RECORD create mode 100644 week-0/day-3/my_todo_app/venvironment/lib/python3.6/site-packages/pkg_resources-0.0.0.dist-info/WHEEL create mode 100644 week-0/day-3/my_todo_app/venvironment/lib/python3.6/site-packages/pkg_resources-0.0.0.dist-info/metadata.json create mode 100644 week-0/day-3/my_todo_app/venvironment/lib/python3.6/site-packages/pkg_resources/__init__.py create mode 100644 week-0/day-3/my_todo_app/venvironment/lib/python3.6/site-packages/pkg_resources/__pycache__/__init__.cpython-36.pyc create mode 100644 week-0/day-3/my_todo_app/venvironment/lib/python3.6/site-packages/pkg_resources/__pycache__/py31compat.cpython-36.pyc create mode 100644 week-0/day-3/my_todo_app/venvironment/lib/python3.6/site-packages/pkg_resources/_vendor/__init__.py create mode 100644 week-0/day-3/my_todo_app/venvironment/lib/python3.6/site-packages/pkg_resources/_vendor/__pycache__/__init__.cpython-36.pyc create mode 100644 week-0/day-3/my_todo_app/venvironment/lib/python3.6/site-packages/pkg_resources/_vendor/__pycache__/appdirs.cpython-36.pyc create mode 100644 week-0/day-3/my_todo_app/venvironment/lib/python3.6/site-packages/pkg_resources/_vendor/__pycache__/pyparsing.cpython-36.pyc create mode 100644 week-0/day-3/my_todo_app/venvironment/lib/python3.6/site-packages/pkg_resources/_vendor/__pycache__/six.cpython-36.pyc create mode 100644 week-0/day-3/my_todo_app/venvironment/lib/python3.6/site-packages/pkg_resources/_vendor/appdirs.py create mode 100644 week-0/day-3/my_todo_app/venvironment/lib/python3.6/site-packages/pkg_resources/_vendor/packaging/__about__.py create mode 100644 week-0/day-3/my_todo_app/venvironment/lib/python3.6/site-packages/pkg_resources/_vendor/packaging/__init__.py create mode 100644 week-0/day-3/my_todo_app/venvironment/lib/python3.6/site-packages/pkg_resources/_vendor/packaging/__pycache__/__about__.cpython-36.pyc create mode 100644 week-0/day-3/my_todo_app/venvironment/lib/python3.6/site-packages/pkg_resources/_vendor/packaging/__pycache__/__init__.cpython-36.pyc create mode 100644 week-0/day-3/my_todo_app/venvironment/lib/python3.6/site-packages/pkg_resources/_vendor/packaging/__pycache__/_compat.cpython-36.pyc create mode 100644 week-0/day-3/my_todo_app/venvironment/lib/python3.6/site-packages/pkg_resources/_vendor/packaging/__pycache__/_structures.cpython-36.pyc create mode 100644 week-0/day-3/my_todo_app/venvironment/lib/python3.6/site-packages/pkg_resources/_vendor/packaging/__pycache__/markers.cpython-36.pyc create mode 100644 week-0/day-3/my_todo_app/venvironment/lib/python3.6/site-packages/pkg_resources/_vendor/packaging/__pycache__/requirements.cpython-36.pyc create mode 100644 week-0/day-3/my_todo_app/venvironment/lib/python3.6/site-packages/pkg_resources/_vendor/packaging/__pycache__/specifiers.cpython-36.pyc create mode 100644 week-0/day-3/my_todo_app/venvironment/lib/python3.6/site-packages/pkg_resources/_vendor/packaging/__pycache__/utils.cpython-36.pyc create mode 100644 week-0/day-3/my_todo_app/venvironment/lib/python3.6/site-packages/pkg_resources/_vendor/packaging/__pycache__/version.cpython-36.pyc create mode 100644 week-0/day-3/my_todo_app/venvironment/lib/python3.6/site-packages/pkg_resources/_vendor/packaging/_compat.py create mode 100644 week-0/day-3/my_todo_app/venvironment/lib/python3.6/site-packages/pkg_resources/_vendor/packaging/_structures.py create mode 100644 week-0/day-3/my_todo_app/venvironment/lib/python3.6/site-packages/pkg_resources/_vendor/packaging/markers.py create mode 100644 week-0/day-3/my_todo_app/venvironment/lib/python3.6/site-packages/pkg_resources/_vendor/packaging/requirements.py create mode 100644 week-0/day-3/my_todo_app/venvironment/lib/python3.6/site-packages/pkg_resources/_vendor/packaging/specifiers.py create mode 100644 week-0/day-3/my_todo_app/venvironment/lib/python3.6/site-packages/pkg_resources/_vendor/packaging/utils.py create mode 100644 week-0/day-3/my_todo_app/venvironment/lib/python3.6/site-packages/pkg_resources/_vendor/packaging/version.py create mode 100644 week-0/day-3/my_todo_app/venvironment/lib/python3.6/site-packages/pkg_resources/_vendor/pyparsing.py create mode 100644 week-0/day-3/my_todo_app/venvironment/lib/python3.6/site-packages/pkg_resources/_vendor/six.py create mode 100644 week-0/day-3/my_todo_app/venvironment/lib/python3.6/site-packages/pkg_resources/extern/__init__.py create mode 100644 week-0/day-3/my_todo_app/venvironment/lib/python3.6/site-packages/pkg_resources/extern/__pycache__/__init__.cpython-36.pyc create mode 100644 week-0/day-3/my_todo_app/venvironment/lib/python3.6/site-packages/pkg_resources/py31compat.py create mode 100644 week-0/day-3/my_todo_app/venvironment/lib/python3.6/site-packages/setuptools-39.0.1.dist-info/DESCRIPTION.rst create mode 100644 week-0/day-3/my_todo_app/venvironment/lib/python3.6/site-packages/setuptools-39.0.1.dist-info/INSTALLER create mode 100644 week-0/day-3/my_todo_app/venvironment/lib/python3.6/site-packages/setuptools-39.0.1.dist-info/METADATA create mode 100644 week-0/day-3/my_todo_app/venvironment/lib/python3.6/site-packages/setuptools-39.0.1.dist-info/RECORD create mode 100644 week-0/day-3/my_todo_app/venvironment/lib/python3.6/site-packages/setuptools-39.0.1.dist-info/WHEEL create mode 100644 week-0/day-3/my_todo_app/venvironment/lib/python3.6/site-packages/setuptools-39.0.1.dist-info/dependency_links.txt create mode 100644 week-0/day-3/my_todo_app/venvironment/lib/python3.6/site-packages/setuptools-39.0.1.dist-info/entry_points.txt create mode 100644 week-0/day-3/my_todo_app/venvironment/lib/python3.6/site-packages/setuptools-39.0.1.dist-info/metadata.json create mode 100644 week-0/day-3/my_todo_app/venvironment/lib/python3.6/site-packages/setuptools-39.0.1.dist-info/top_level.txt create mode 100644 week-0/day-3/my_todo_app/venvironment/lib/python3.6/site-packages/setuptools-39.0.1.dist-info/zip-safe create mode 100644 week-0/day-3/my_todo_app/venvironment/lib/python3.6/site-packages/setuptools/__init__.py create mode 100644 week-0/day-3/my_todo_app/venvironment/lib/python3.6/site-packages/setuptools/__pycache__/__init__.cpython-36.pyc create mode 100644 week-0/day-3/my_todo_app/venvironment/lib/python3.6/site-packages/setuptools/__pycache__/archive_util.cpython-36.pyc create mode 100644 week-0/day-3/my_todo_app/venvironment/lib/python3.6/site-packages/setuptools/__pycache__/build_meta.cpython-36.pyc create mode 100644 week-0/day-3/my_todo_app/venvironment/lib/python3.6/site-packages/setuptools/__pycache__/config.cpython-36.pyc create mode 100644 week-0/day-3/my_todo_app/venvironment/lib/python3.6/site-packages/setuptools/__pycache__/dep_util.cpython-36.pyc create mode 100644 week-0/day-3/my_todo_app/venvironment/lib/python3.6/site-packages/setuptools/__pycache__/depends.cpython-36.pyc create mode 100644 week-0/day-3/my_todo_app/venvironment/lib/python3.6/site-packages/setuptools/__pycache__/dist.cpython-36.pyc create mode 100644 week-0/day-3/my_todo_app/venvironment/lib/python3.6/site-packages/setuptools/__pycache__/extension.cpython-36.pyc create mode 100644 week-0/day-3/my_todo_app/venvironment/lib/python3.6/site-packages/setuptools/__pycache__/glibc.cpython-36.pyc create mode 100644 week-0/day-3/my_todo_app/venvironment/lib/python3.6/site-packages/setuptools/__pycache__/glob.cpython-36.pyc create mode 100644 week-0/day-3/my_todo_app/venvironment/lib/python3.6/site-packages/setuptools/__pycache__/launch.cpython-36.pyc create mode 100644 week-0/day-3/my_todo_app/venvironment/lib/python3.6/site-packages/setuptools/__pycache__/lib2to3_ex.cpython-36.pyc create mode 100644 week-0/day-3/my_todo_app/venvironment/lib/python3.6/site-packages/setuptools/__pycache__/monkey.cpython-36.pyc create mode 100644 week-0/day-3/my_todo_app/venvironment/lib/python3.6/site-packages/setuptools/__pycache__/msvc.cpython-36.pyc create mode 100644 week-0/day-3/my_todo_app/venvironment/lib/python3.6/site-packages/setuptools/__pycache__/namespaces.cpython-36.pyc create mode 100644 week-0/day-3/my_todo_app/venvironment/lib/python3.6/site-packages/setuptools/__pycache__/package_index.cpython-36.pyc create mode 100644 week-0/day-3/my_todo_app/venvironment/lib/python3.6/site-packages/setuptools/__pycache__/pep425tags.cpython-36.pyc create mode 100644 week-0/day-3/my_todo_app/venvironment/lib/python3.6/site-packages/setuptools/__pycache__/py27compat.cpython-36.pyc create mode 100644 week-0/day-3/my_todo_app/venvironment/lib/python3.6/site-packages/setuptools/__pycache__/py31compat.cpython-36.pyc create mode 100644 week-0/day-3/my_todo_app/venvironment/lib/python3.6/site-packages/setuptools/__pycache__/py33compat.cpython-36.pyc create mode 100644 week-0/day-3/my_todo_app/venvironment/lib/python3.6/site-packages/setuptools/__pycache__/py36compat.cpython-36.pyc create mode 100644 week-0/day-3/my_todo_app/venvironment/lib/python3.6/site-packages/setuptools/__pycache__/sandbox.cpython-36.pyc create mode 100644 week-0/day-3/my_todo_app/venvironment/lib/python3.6/site-packages/setuptools/__pycache__/site-patch.cpython-36.pyc create mode 100644 week-0/day-3/my_todo_app/venvironment/lib/python3.6/site-packages/setuptools/__pycache__/ssl_support.cpython-36.pyc create mode 100644 week-0/day-3/my_todo_app/venvironment/lib/python3.6/site-packages/setuptools/__pycache__/unicode_utils.cpython-36.pyc create mode 100644 week-0/day-3/my_todo_app/venvironment/lib/python3.6/site-packages/setuptools/__pycache__/version.cpython-36.pyc create mode 100644 week-0/day-3/my_todo_app/venvironment/lib/python3.6/site-packages/setuptools/__pycache__/wheel.cpython-36.pyc create mode 100644 week-0/day-3/my_todo_app/venvironment/lib/python3.6/site-packages/setuptools/__pycache__/windows_support.cpython-36.pyc create mode 100644 week-0/day-3/my_todo_app/venvironment/lib/python3.6/site-packages/setuptools/_vendor/__init__.py create mode 100644 week-0/day-3/my_todo_app/venvironment/lib/python3.6/site-packages/setuptools/_vendor/__pycache__/__init__.cpython-36.pyc create mode 100644 week-0/day-3/my_todo_app/venvironment/lib/python3.6/site-packages/setuptools/_vendor/__pycache__/pyparsing.cpython-36.pyc create mode 100644 week-0/day-3/my_todo_app/venvironment/lib/python3.6/site-packages/setuptools/_vendor/__pycache__/six.cpython-36.pyc create mode 100644 week-0/day-3/my_todo_app/venvironment/lib/python3.6/site-packages/setuptools/_vendor/packaging/__about__.py create mode 100644 week-0/day-3/my_todo_app/venvironment/lib/python3.6/site-packages/setuptools/_vendor/packaging/__init__.py create mode 100644 week-0/day-3/my_todo_app/venvironment/lib/python3.6/site-packages/setuptools/_vendor/packaging/__pycache__/__about__.cpython-36.pyc create mode 100644 week-0/day-3/my_todo_app/venvironment/lib/python3.6/site-packages/setuptools/_vendor/packaging/__pycache__/__init__.cpython-36.pyc create mode 100644 week-0/day-3/my_todo_app/venvironment/lib/python3.6/site-packages/setuptools/_vendor/packaging/__pycache__/_compat.cpython-36.pyc create mode 100644 week-0/day-3/my_todo_app/venvironment/lib/python3.6/site-packages/setuptools/_vendor/packaging/__pycache__/_structures.cpython-36.pyc create mode 100644 week-0/day-3/my_todo_app/venvironment/lib/python3.6/site-packages/setuptools/_vendor/packaging/__pycache__/markers.cpython-36.pyc create mode 100644 week-0/day-3/my_todo_app/venvironment/lib/python3.6/site-packages/setuptools/_vendor/packaging/__pycache__/requirements.cpython-36.pyc create mode 100644 week-0/day-3/my_todo_app/venvironment/lib/python3.6/site-packages/setuptools/_vendor/packaging/__pycache__/specifiers.cpython-36.pyc create mode 100644 week-0/day-3/my_todo_app/venvironment/lib/python3.6/site-packages/setuptools/_vendor/packaging/__pycache__/utils.cpython-36.pyc create mode 100644 week-0/day-3/my_todo_app/venvironment/lib/python3.6/site-packages/setuptools/_vendor/packaging/__pycache__/version.cpython-36.pyc create mode 100644 week-0/day-3/my_todo_app/venvironment/lib/python3.6/site-packages/setuptools/_vendor/packaging/_compat.py create mode 100644 week-0/day-3/my_todo_app/venvironment/lib/python3.6/site-packages/setuptools/_vendor/packaging/_structures.py create mode 100644 week-0/day-3/my_todo_app/venvironment/lib/python3.6/site-packages/setuptools/_vendor/packaging/markers.py create mode 100644 week-0/day-3/my_todo_app/venvironment/lib/python3.6/site-packages/setuptools/_vendor/packaging/requirements.py create mode 100644 week-0/day-3/my_todo_app/venvironment/lib/python3.6/site-packages/setuptools/_vendor/packaging/specifiers.py create mode 100644 week-0/day-3/my_todo_app/venvironment/lib/python3.6/site-packages/setuptools/_vendor/packaging/utils.py create mode 100644 week-0/day-3/my_todo_app/venvironment/lib/python3.6/site-packages/setuptools/_vendor/packaging/version.py create mode 100644 week-0/day-3/my_todo_app/venvironment/lib/python3.6/site-packages/setuptools/_vendor/pyparsing.py create mode 100644 week-0/day-3/my_todo_app/venvironment/lib/python3.6/site-packages/setuptools/_vendor/six.py create mode 100644 week-0/day-3/my_todo_app/venvironment/lib/python3.6/site-packages/setuptools/archive_util.py create mode 100644 week-0/day-3/my_todo_app/venvironment/lib/python3.6/site-packages/setuptools/build_meta.py create mode 100644 week-0/day-3/my_todo_app/venvironment/lib/python3.6/site-packages/setuptools/cli-32.exe create mode 100644 week-0/day-3/my_todo_app/venvironment/lib/python3.6/site-packages/setuptools/cli-64.exe create mode 100644 week-0/day-3/my_todo_app/venvironment/lib/python3.6/site-packages/setuptools/cli.exe create mode 100644 week-0/day-3/my_todo_app/venvironment/lib/python3.6/site-packages/setuptools/command/__init__.py create mode 100644 week-0/day-3/my_todo_app/venvironment/lib/python3.6/site-packages/setuptools/command/__pycache__/__init__.cpython-36.pyc create mode 100644 week-0/day-3/my_todo_app/venvironment/lib/python3.6/site-packages/setuptools/command/__pycache__/alias.cpython-36.pyc create mode 100644 week-0/day-3/my_todo_app/venvironment/lib/python3.6/site-packages/setuptools/command/__pycache__/bdist_egg.cpython-36.pyc create mode 100644 week-0/day-3/my_todo_app/venvironment/lib/python3.6/site-packages/setuptools/command/__pycache__/bdist_rpm.cpython-36.pyc create mode 100644 week-0/day-3/my_todo_app/venvironment/lib/python3.6/site-packages/setuptools/command/__pycache__/bdist_wininst.cpython-36.pyc create mode 100644 week-0/day-3/my_todo_app/venvironment/lib/python3.6/site-packages/setuptools/command/__pycache__/build_clib.cpython-36.pyc create mode 100644 week-0/day-3/my_todo_app/venvironment/lib/python3.6/site-packages/setuptools/command/__pycache__/build_ext.cpython-36.pyc create mode 100644 week-0/day-3/my_todo_app/venvironment/lib/python3.6/site-packages/setuptools/command/__pycache__/build_py.cpython-36.pyc create mode 100644 week-0/day-3/my_todo_app/venvironment/lib/python3.6/site-packages/setuptools/command/__pycache__/develop.cpython-36.pyc create mode 100644 week-0/day-3/my_todo_app/venvironment/lib/python3.6/site-packages/setuptools/command/__pycache__/dist_info.cpython-36.pyc create mode 100644 week-0/day-3/my_todo_app/venvironment/lib/python3.6/site-packages/setuptools/command/__pycache__/easy_install.cpython-36.pyc create mode 100644 week-0/day-3/my_todo_app/venvironment/lib/python3.6/site-packages/setuptools/command/__pycache__/egg_info.cpython-36.pyc create mode 100644 week-0/day-3/my_todo_app/venvironment/lib/python3.6/site-packages/setuptools/command/__pycache__/install.cpython-36.pyc create mode 100644 week-0/day-3/my_todo_app/venvironment/lib/python3.6/site-packages/setuptools/command/__pycache__/install_egg_info.cpython-36.pyc create mode 100644 week-0/day-3/my_todo_app/venvironment/lib/python3.6/site-packages/setuptools/command/__pycache__/install_lib.cpython-36.pyc create mode 100644 week-0/day-3/my_todo_app/venvironment/lib/python3.6/site-packages/setuptools/command/__pycache__/install_scripts.cpython-36.pyc create mode 100644 week-0/day-3/my_todo_app/venvironment/lib/python3.6/site-packages/setuptools/command/__pycache__/py36compat.cpython-36.pyc create mode 100644 week-0/day-3/my_todo_app/venvironment/lib/python3.6/site-packages/setuptools/command/__pycache__/register.cpython-36.pyc create mode 100644 week-0/day-3/my_todo_app/venvironment/lib/python3.6/site-packages/setuptools/command/__pycache__/rotate.cpython-36.pyc create mode 100644 week-0/day-3/my_todo_app/venvironment/lib/python3.6/site-packages/setuptools/command/__pycache__/saveopts.cpython-36.pyc create mode 100644 week-0/day-3/my_todo_app/venvironment/lib/python3.6/site-packages/setuptools/command/__pycache__/sdist.cpython-36.pyc create mode 100644 week-0/day-3/my_todo_app/venvironment/lib/python3.6/site-packages/setuptools/command/__pycache__/setopt.cpython-36.pyc create mode 100644 week-0/day-3/my_todo_app/venvironment/lib/python3.6/site-packages/setuptools/command/__pycache__/test.cpython-36.pyc create mode 100644 week-0/day-3/my_todo_app/venvironment/lib/python3.6/site-packages/setuptools/command/__pycache__/upload.cpython-36.pyc create mode 100644 week-0/day-3/my_todo_app/venvironment/lib/python3.6/site-packages/setuptools/command/__pycache__/upload_docs.cpython-36.pyc create mode 100644 week-0/day-3/my_todo_app/venvironment/lib/python3.6/site-packages/setuptools/command/alias.py create mode 100644 week-0/day-3/my_todo_app/venvironment/lib/python3.6/site-packages/setuptools/command/bdist_egg.py create mode 100644 week-0/day-3/my_todo_app/venvironment/lib/python3.6/site-packages/setuptools/command/bdist_rpm.py create mode 100644 week-0/day-3/my_todo_app/venvironment/lib/python3.6/site-packages/setuptools/command/bdist_wininst.py create mode 100644 week-0/day-3/my_todo_app/venvironment/lib/python3.6/site-packages/setuptools/command/build_clib.py create mode 100644 week-0/day-3/my_todo_app/venvironment/lib/python3.6/site-packages/setuptools/command/build_ext.py create mode 100644 week-0/day-3/my_todo_app/venvironment/lib/python3.6/site-packages/setuptools/command/build_py.py create mode 100644 week-0/day-3/my_todo_app/venvironment/lib/python3.6/site-packages/setuptools/command/develop.py create mode 100644 week-0/day-3/my_todo_app/venvironment/lib/python3.6/site-packages/setuptools/command/dist_info.py create mode 100644 week-0/day-3/my_todo_app/venvironment/lib/python3.6/site-packages/setuptools/command/easy_install.py create mode 100644 week-0/day-3/my_todo_app/venvironment/lib/python3.6/site-packages/setuptools/command/egg_info.py create mode 100644 week-0/day-3/my_todo_app/venvironment/lib/python3.6/site-packages/setuptools/command/install.py create mode 100644 week-0/day-3/my_todo_app/venvironment/lib/python3.6/site-packages/setuptools/command/install_egg_info.py create mode 100644 week-0/day-3/my_todo_app/venvironment/lib/python3.6/site-packages/setuptools/command/install_lib.py create mode 100644 week-0/day-3/my_todo_app/venvironment/lib/python3.6/site-packages/setuptools/command/install_scripts.py create mode 100644 week-0/day-3/my_todo_app/venvironment/lib/python3.6/site-packages/setuptools/command/launcher manifest.xml create mode 100644 week-0/day-3/my_todo_app/venvironment/lib/python3.6/site-packages/setuptools/command/py36compat.py create mode 100644 week-0/day-3/my_todo_app/venvironment/lib/python3.6/site-packages/setuptools/command/register.py create mode 100644 week-0/day-3/my_todo_app/venvironment/lib/python3.6/site-packages/setuptools/command/rotate.py create mode 100644 week-0/day-3/my_todo_app/venvironment/lib/python3.6/site-packages/setuptools/command/saveopts.py create mode 100644 week-0/day-3/my_todo_app/venvironment/lib/python3.6/site-packages/setuptools/command/sdist.py create mode 100644 week-0/day-3/my_todo_app/venvironment/lib/python3.6/site-packages/setuptools/command/setopt.py create mode 100644 week-0/day-3/my_todo_app/venvironment/lib/python3.6/site-packages/setuptools/command/test.py create mode 100644 week-0/day-3/my_todo_app/venvironment/lib/python3.6/site-packages/setuptools/command/upload.py create mode 100644 week-0/day-3/my_todo_app/venvironment/lib/python3.6/site-packages/setuptools/command/upload_docs.py create mode 100644 week-0/day-3/my_todo_app/venvironment/lib/python3.6/site-packages/setuptools/config.py create mode 100644 week-0/day-3/my_todo_app/venvironment/lib/python3.6/site-packages/setuptools/dep_util.py create mode 100644 week-0/day-3/my_todo_app/venvironment/lib/python3.6/site-packages/setuptools/depends.py create mode 100644 week-0/day-3/my_todo_app/venvironment/lib/python3.6/site-packages/setuptools/dist.py create mode 100644 week-0/day-3/my_todo_app/venvironment/lib/python3.6/site-packages/setuptools/extension.py create mode 100644 week-0/day-3/my_todo_app/venvironment/lib/python3.6/site-packages/setuptools/extern/__init__.py create mode 100644 week-0/day-3/my_todo_app/venvironment/lib/python3.6/site-packages/setuptools/extern/__pycache__/__init__.cpython-36.pyc create mode 100644 week-0/day-3/my_todo_app/venvironment/lib/python3.6/site-packages/setuptools/glibc.py create mode 100644 week-0/day-3/my_todo_app/venvironment/lib/python3.6/site-packages/setuptools/glob.py create mode 100644 week-0/day-3/my_todo_app/venvironment/lib/python3.6/site-packages/setuptools/gui-32.exe create mode 100644 week-0/day-3/my_todo_app/venvironment/lib/python3.6/site-packages/setuptools/gui-64.exe create mode 100644 week-0/day-3/my_todo_app/venvironment/lib/python3.6/site-packages/setuptools/gui.exe create mode 100644 week-0/day-3/my_todo_app/venvironment/lib/python3.6/site-packages/setuptools/launch.py create mode 100644 week-0/day-3/my_todo_app/venvironment/lib/python3.6/site-packages/setuptools/lib2to3_ex.py create mode 100644 week-0/day-3/my_todo_app/venvironment/lib/python3.6/site-packages/setuptools/monkey.py create mode 100644 week-0/day-3/my_todo_app/venvironment/lib/python3.6/site-packages/setuptools/msvc.py create mode 100644 week-0/day-3/my_todo_app/venvironment/lib/python3.6/site-packages/setuptools/namespaces.py create mode 100644 week-0/day-3/my_todo_app/venvironment/lib/python3.6/site-packages/setuptools/package_index.py create mode 100644 week-0/day-3/my_todo_app/venvironment/lib/python3.6/site-packages/setuptools/pep425tags.py create mode 100644 week-0/day-3/my_todo_app/venvironment/lib/python3.6/site-packages/setuptools/py27compat.py create mode 100644 week-0/day-3/my_todo_app/venvironment/lib/python3.6/site-packages/setuptools/py31compat.py create mode 100644 week-0/day-3/my_todo_app/venvironment/lib/python3.6/site-packages/setuptools/py33compat.py create mode 100644 week-0/day-3/my_todo_app/venvironment/lib/python3.6/site-packages/setuptools/py36compat.py create mode 100644 week-0/day-3/my_todo_app/venvironment/lib/python3.6/site-packages/setuptools/sandbox.py create mode 100644 week-0/day-3/my_todo_app/venvironment/lib/python3.6/site-packages/setuptools/script (dev).tmpl create mode 100644 week-0/day-3/my_todo_app/venvironment/lib/python3.6/site-packages/setuptools/script.tmpl create mode 100644 week-0/day-3/my_todo_app/venvironment/lib/python3.6/site-packages/setuptools/site-patch.py create mode 100644 week-0/day-3/my_todo_app/venvironment/lib/python3.6/site-packages/setuptools/ssl_support.py create mode 100644 week-0/day-3/my_todo_app/venvironment/lib/python3.6/site-packages/setuptools/unicode_utils.py create mode 100644 week-0/day-3/my_todo_app/venvironment/lib/python3.6/site-packages/setuptools/version.py create mode 100644 week-0/day-3/my_todo_app/venvironment/lib/python3.6/site-packages/setuptools/wheel.py create mode 100644 week-0/day-3/my_todo_app/venvironment/lib/python3.6/site-packages/setuptools/windows_support.py create mode 120000 week-0/day-3/my_todo_app/venvironment/lib64 create mode 100644 week-0/day-3/my_todo_app/venvironment/pyvenv.cfg create mode 100644 week-0/day-3/my_todo_app/venvironment/share/python-wheels/CacheControl-0.11.7-py2.py3-none-any.whl create mode 100644 week-0/day-3/my_todo_app/venvironment/share/python-wheels/appdirs-1.4.3-py2.py3-none-any.whl create mode 100644 week-0/day-3/my_todo_app/venvironment/share/python-wheels/certifi-2018.1.18-py2.py3-none-any.whl create mode 100644 week-0/day-3/my_todo_app/venvironment/share/python-wheels/chardet-3.0.4-py2.py3-none-any.whl create mode 100644 week-0/day-3/my_todo_app/venvironment/share/python-wheels/colorama-0.3.7-py2.py3-none-any.whl create mode 100644 week-0/day-3/my_todo_app/venvironment/share/python-wheels/distlib-0.2.6-py2.py3-none-any.whl create mode 100644 week-0/day-3/my_todo_app/venvironment/share/python-wheels/distro-1.0.1-py2.py3-none-any.whl create mode 100644 week-0/day-3/my_todo_app/venvironment/share/python-wheels/html5lib-0.999999999-py2.py3-none-any.whl create mode 100644 week-0/day-3/my_todo_app/venvironment/share/python-wheels/idna-2.6-py2.py3-none-any.whl create mode 100644 week-0/day-3/my_todo_app/venvironment/share/python-wheels/ipaddress-0.0.0-py2.py3-none-any.whl create mode 100644 week-0/day-3/my_todo_app/venvironment/share/python-wheels/lockfile-0.12.2-py2.py3-none-any.whl create mode 100644 week-0/day-3/my_todo_app/venvironment/share/python-wheels/packaging-17.1-py2.py3-none-any.whl create mode 100644 week-0/day-3/my_todo_app/venvironment/share/python-wheels/pip-9.0.1-py2.py3-none-any.whl create mode 100644 week-0/day-3/my_todo_app/venvironment/share/python-wheels/pkg_resources-0.0.0-py2.py3-none-any.whl create mode 100644 week-0/day-3/my_todo_app/venvironment/share/python-wheels/progress-1.2-py2.py3-none-any.whl create mode 100644 week-0/day-3/my_todo_app/venvironment/share/python-wheels/pyparsing-2.2.0-py2.py3-none-any.whl create mode 100644 week-0/day-3/my_todo_app/venvironment/share/python-wheels/requests-2.18.4-py2.py3-none-any.whl create mode 100644 week-0/day-3/my_todo_app/venvironment/share/python-wheels/retrying-1.3.3-py2.py3-none-any.whl create mode 100644 week-0/day-3/my_todo_app/venvironment/share/python-wheels/setuptools-39.0.1-py2.py3-none-any.whl create mode 100644 week-0/day-3/my_todo_app/venvironment/share/python-wheels/six-1.11.0-py2.py3-none-any.whl create mode 100644 week-0/day-3/my_todo_app/venvironment/share/python-wheels/urllib3-1.22-py2.py3-none-any.whl create mode 100644 week-0/day-3/my_todo_app/venvironment/share/python-wheels/webencodings-0.5-py2.py3-none-any.whl create mode 100644 week-0/day-3/my_todo_app/venvironment/share/python-wheels/wheel-0.30.0-py2.py3-none-any.whl create mode 100644 week-0/day-3/venv/bin/activate create mode 100644 week-0/day-3/venv/bin/activate.csh create mode 100644 week-0/day-3/venv/bin/activate.fish create mode 100755 week-0/day-3/venv/bin/easy_install create mode 100755 week-0/day-3/venv/bin/easy_install-3.6 create mode 100755 week-0/day-3/venv/bin/pip create mode 100755 week-0/day-3/venv/bin/pip3 create mode 100755 week-0/day-3/venv/bin/pip3.6 create mode 120000 week-0/day-3/venv/bin/python create mode 120000 week-0/day-3/venv/bin/python3 create mode 100644 week-0/day-3/venv/lib/python3.6/site-packages/__pycache__/easy_install.cpython-36.pyc create mode 100644 week-0/day-3/venv/lib/python3.6/site-packages/easy_install.py create mode 100644 week-0/day-3/venv/lib/python3.6/site-packages/pip-9.0.1.dist-info/DESCRIPTION.rst create mode 100644 week-0/day-3/venv/lib/python3.6/site-packages/pip-9.0.1.dist-info/INSTALLER create mode 100644 week-0/day-3/venv/lib/python3.6/site-packages/pip-9.0.1.dist-info/METADATA create mode 100644 week-0/day-3/venv/lib/python3.6/site-packages/pip-9.0.1.dist-info/RECORD create mode 100644 week-0/day-3/venv/lib/python3.6/site-packages/pip-9.0.1.dist-info/WHEEL create mode 100644 week-0/day-3/venv/lib/python3.6/site-packages/pip-9.0.1.dist-info/entry_points.txt create mode 100644 week-0/day-3/venv/lib/python3.6/site-packages/pip-9.0.1.dist-info/metadata.json create mode 100644 week-0/day-3/venv/lib/python3.6/site-packages/pip-9.0.1.dist-info/top_level.txt create mode 100644 week-0/day-3/venv/lib/python3.6/site-packages/pip/__init__.py create mode 100644 week-0/day-3/venv/lib/python3.6/site-packages/pip/__main__.py create mode 100644 week-0/day-3/venv/lib/python3.6/site-packages/pip/__pycache__/__init__.cpython-36.pyc create mode 100644 week-0/day-3/venv/lib/python3.6/site-packages/pip/__pycache__/__main__.cpython-36.pyc create mode 100644 week-0/day-3/venv/lib/python3.6/site-packages/pip/__pycache__/basecommand.cpython-36.pyc create mode 100644 week-0/day-3/venv/lib/python3.6/site-packages/pip/__pycache__/baseparser.cpython-36.pyc create mode 100644 week-0/day-3/venv/lib/python3.6/site-packages/pip/__pycache__/cmdoptions.cpython-36.pyc create mode 100644 week-0/day-3/venv/lib/python3.6/site-packages/pip/__pycache__/download.cpython-36.pyc create mode 100644 week-0/day-3/venv/lib/python3.6/site-packages/pip/__pycache__/exceptions.cpython-36.pyc create mode 100644 week-0/day-3/venv/lib/python3.6/site-packages/pip/__pycache__/index.cpython-36.pyc create mode 100644 week-0/day-3/venv/lib/python3.6/site-packages/pip/__pycache__/locations.cpython-36.pyc create mode 100644 week-0/day-3/venv/lib/python3.6/site-packages/pip/__pycache__/pep425tags.cpython-36.pyc create mode 100644 week-0/day-3/venv/lib/python3.6/site-packages/pip/__pycache__/status_codes.cpython-36.pyc create mode 100644 week-0/day-3/venv/lib/python3.6/site-packages/pip/__pycache__/wheel.cpython-36.pyc create mode 100644 week-0/day-3/venv/lib/python3.6/site-packages/pip/_vendor/__init__.py create mode 100644 week-0/day-3/venv/lib/python3.6/site-packages/pip/_vendor/__pycache__/__init__.cpython-36.pyc create mode 100644 week-0/day-3/venv/lib/python3.6/site-packages/pip/basecommand.py create mode 100644 week-0/day-3/venv/lib/python3.6/site-packages/pip/baseparser.py create mode 100644 week-0/day-3/venv/lib/python3.6/site-packages/pip/cmdoptions.py create mode 100644 week-0/day-3/venv/lib/python3.6/site-packages/pip/commands/__init__.py create mode 100644 week-0/day-3/venv/lib/python3.6/site-packages/pip/commands/__pycache__/__init__.cpython-36.pyc create mode 100644 week-0/day-3/venv/lib/python3.6/site-packages/pip/commands/__pycache__/check.cpython-36.pyc create mode 100644 week-0/day-3/venv/lib/python3.6/site-packages/pip/commands/__pycache__/completion.cpython-36.pyc create mode 100644 week-0/day-3/venv/lib/python3.6/site-packages/pip/commands/__pycache__/download.cpython-36.pyc create mode 100644 week-0/day-3/venv/lib/python3.6/site-packages/pip/commands/__pycache__/freeze.cpython-36.pyc create mode 100644 week-0/day-3/venv/lib/python3.6/site-packages/pip/commands/__pycache__/hash.cpython-36.pyc create mode 100644 week-0/day-3/venv/lib/python3.6/site-packages/pip/commands/__pycache__/help.cpython-36.pyc create mode 100644 week-0/day-3/venv/lib/python3.6/site-packages/pip/commands/__pycache__/install.cpython-36.pyc create mode 100644 week-0/day-3/venv/lib/python3.6/site-packages/pip/commands/__pycache__/list.cpython-36.pyc create mode 100644 week-0/day-3/venv/lib/python3.6/site-packages/pip/commands/__pycache__/search.cpython-36.pyc create mode 100644 week-0/day-3/venv/lib/python3.6/site-packages/pip/commands/__pycache__/show.cpython-36.pyc create mode 100644 week-0/day-3/venv/lib/python3.6/site-packages/pip/commands/__pycache__/uninstall.cpython-36.pyc create mode 100644 week-0/day-3/venv/lib/python3.6/site-packages/pip/commands/__pycache__/wheel.cpython-36.pyc create mode 100644 week-0/day-3/venv/lib/python3.6/site-packages/pip/commands/check.py create mode 100644 week-0/day-3/venv/lib/python3.6/site-packages/pip/commands/completion.py create mode 100644 week-0/day-3/venv/lib/python3.6/site-packages/pip/commands/download.py create mode 100644 week-0/day-3/venv/lib/python3.6/site-packages/pip/commands/freeze.py create mode 100644 week-0/day-3/venv/lib/python3.6/site-packages/pip/commands/hash.py create mode 100644 week-0/day-3/venv/lib/python3.6/site-packages/pip/commands/help.py create mode 100644 week-0/day-3/venv/lib/python3.6/site-packages/pip/commands/install.py create mode 100644 week-0/day-3/venv/lib/python3.6/site-packages/pip/commands/list.py create mode 100644 week-0/day-3/venv/lib/python3.6/site-packages/pip/commands/search.py create mode 100644 week-0/day-3/venv/lib/python3.6/site-packages/pip/commands/show.py create mode 100644 week-0/day-3/venv/lib/python3.6/site-packages/pip/commands/uninstall.py create mode 100644 week-0/day-3/venv/lib/python3.6/site-packages/pip/commands/wheel.py create mode 100644 week-0/day-3/venv/lib/python3.6/site-packages/pip/compat/__init__.py create mode 100644 week-0/day-3/venv/lib/python3.6/site-packages/pip/compat/__pycache__/__init__.cpython-36.pyc create mode 100644 week-0/day-3/venv/lib/python3.6/site-packages/pip/compat/__pycache__/dictconfig.cpython-36.pyc create mode 100644 week-0/day-3/venv/lib/python3.6/site-packages/pip/compat/dictconfig.py create mode 100644 week-0/day-3/venv/lib/python3.6/site-packages/pip/download.py create mode 100644 week-0/day-3/venv/lib/python3.6/site-packages/pip/exceptions.py create mode 100644 week-0/day-3/venv/lib/python3.6/site-packages/pip/index.py create mode 100644 week-0/day-3/venv/lib/python3.6/site-packages/pip/locations.py create mode 100644 week-0/day-3/venv/lib/python3.6/site-packages/pip/models/__init__.py create mode 100644 week-0/day-3/venv/lib/python3.6/site-packages/pip/models/__pycache__/__init__.cpython-36.pyc create mode 100644 week-0/day-3/venv/lib/python3.6/site-packages/pip/models/__pycache__/index.cpython-36.pyc create mode 100644 week-0/day-3/venv/lib/python3.6/site-packages/pip/models/index.py create mode 100644 week-0/day-3/venv/lib/python3.6/site-packages/pip/operations/__init__.py create mode 100644 week-0/day-3/venv/lib/python3.6/site-packages/pip/operations/__pycache__/__init__.cpython-36.pyc create mode 100644 week-0/day-3/venv/lib/python3.6/site-packages/pip/operations/__pycache__/check.cpython-36.pyc create mode 100644 week-0/day-3/venv/lib/python3.6/site-packages/pip/operations/__pycache__/freeze.cpython-36.pyc create mode 100644 week-0/day-3/venv/lib/python3.6/site-packages/pip/operations/check.py create mode 100644 week-0/day-3/venv/lib/python3.6/site-packages/pip/operations/freeze.py create mode 100644 week-0/day-3/venv/lib/python3.6/site-packages/pip/pep425tags.py create mode 100644 week-0/day-3/venv/lib/python3.6/site-packages/pip/req/__init__.py create mode 100644 week-0/day-3/venv/lib/python3.6/site-packages/pip/req/__pycache__/__init__.cpython-36.pyc create mode 100644 week-0/day-3/venv/lib/python3.6/site-packages/pip/req/__pycache__/req_file.cpython-36.pyc create mode 100644 week-0/day-3/venv/lib/python3.6/site-packages/pip/req/__pycache__/req_install.cpython-36.pyc create mode 100644 week-0/day-3/venv/lib/python3.6/site-packages/pip/req/__pycache__/req_set.cpython-36.pyc create mode 100644 week-0/day-3/venv/lib/python3.6/site-packages/pip/req/__pycache__/req_uninstall.cpython-36.pyc create mode 100644 week-0/day-3/venv/lib/python3.6/site-packages/pip/req/req_file.py create mode 100644 week-0/day-3/venv/lib/python3.6/site-packages/pip/req/req_install.py create mode 100644 week-0/day-3/venv/lib/python3.6/site-packages/pip/req/req_set.py create mode 100644 week-0/day-3/venv/lib/python3.6/site-packages/pip/req/req_uninstall.py create mode 100644 week-0/day-3/venv/lib/python3.6/site-packages/pip/status_codes.py create mode 100644 week-0/day-3/venv/lib/python3.6/site-packages/pip/utils/__init__.py create mode 100644 week-0/day-3/venv/lib/python3.6/site-packages/pip/utils/__pycache__/__init__.cpython-36.pyc create mode 100644 week-0/day-3/venv/lib/python3.6/site-packages/pip/utils/__pycache__/appdirs.cpython-36.pyc create mode 100644 week-0/day-3/venv/lib/python3.6/site-packages/pip/utils/__pycache__/build.cpython-36.pyc create mode 100644 week-0/day-3/venv/lib/python3.6/site-packages/pip/utils/__pycache__/deprecation.cpython-36.pyc create mode 100644 week-0/day-3/venv/lib/python3.6/site-packages/pip/utils/__pycache__/encoding.cpython-36.pyc create mode 100644 week-0/day-3/venv/lib/python3.6/site-packages/pip/utils/__pycache__/filesystem.cpython-36.pyc create mode 100644 week-0/day-3/venv/lib/python3.6/site-packages/pip/utils/__pycache__/glibc.cpython-36.pyc create mode 100644 week-0/day-3/venv/lib/python3.6/site-packages/pip/utils/__pycache__/hashes.cpython-36.pyc create mode 100644 week-0/day-3/venv/lib/python3.6/site-packages/pip/utils/__pycache__/logging.cpython-36.pyc create mode 100644 week-0/day-3/venv/lib/python3.6/site-packages/pip/utils/__pycache__/outdated.cpython-36.pyc create mode 100644 week-0/day-3/venv/lib/python3.6/site-packages/pip/utils/__pycache__/packaging.cpython-36.pyc create mode 100644 week-0/day-3/venv/lib/python3.6/site-packages/pip/utils/__pycache__/setuptools_build.cpython-36.pyc create mode 100644 week-0/day-3/venv/lib/python3.6/site-packages/pip/utils/__pycache__/ui.cpython-36.pyc create mode 100644 week-0/day-3/venv/lib/python3.6/site-packages/pip/utils/appdirs.py create mode 100644 week-0/day-3/venv/lib/python3.6/site-packages/pip/utils/build.py create mode 100644 week-0/day-3/venv/lib/python3.6/site-packages/pip/utils/deprecation.py create mode 100644 week-0/day-3/venv/lib/python3.6/site-packages/pip/utils/encoding.py create mode 100644 week-0/day-3/venv/lib/python3.6/site-packages/pip/utils/filesystem.py create mode 100644 week-0/day-3/venv/lib/python3.6/site-packages/pip/utils/glibc.py create mode 100644 week-0/day-3/venv/lib/python3.6/site-packages/pip/utils/hashes.py create mode 100644 week-0/day-3/venv/lib/python3.6/site-packages/pip/utils/logging.py create mode 100644 week-0/day-3/venv/lib/python3.6/site-packages/pip/utils/outdated.py create mode 100644 week-0/day-3/venv/lib/python3.6/site-packages/pip/utils/packaging.py create mode 100644 week-0/day-3/venv/lib/python3.6/site-packages/pip/utils/setuptools_build.py create mode 100644 week-0/day-3/venv/lib/python3.6/site-packages/pip/utils/ui.py create mode 100644 week-0/day-3/venv/lib/python3.6/site-packages/pip/vcs/__init__.py create mode 100644 week-0/day-3/venv/lib/python3.6/site-packages/pip/vcs/__pycache__/__init__.cpython-36.pyc create mode 100644 week-0/day-3/venv/lib/python3.6/site-packages/pip/vcs/__pycache__/bazaar.cpython-36.pyc create mode 100644 week-0/day-3/venv/lib/python3.6/site-packages/pip/vcs/__pycache__/git.cpython-36.pyc create mode 100644 week-0/day-3/venv/lib/python3.6/site-packages/pip/vcs/__pycache__/mercurial.cpython-36.pyc create mode 100644 week-0/day-3/venv/lib/python3.6/site-packages/pip/vcs/__pycache__/subversion.cpython-36.pyc create mode 100644 week-0/day-3/venv/lib/python3.6/site-packages/pip/vcs/bazaar.py create mode 100644 week-0/day-3/venv/lib/python3.6/site-packages/pip/vcs/git.py create mode 100644 week-0/day-3/venv/lib/python3.6/site-packages/pip/vcs/mercurial.py create mode 100644 week-0/day-3/venv/lib/python3.6/site-packages/pip/vcs/subversion.py create mode 100644 week-0/day-3/venv/lib/python3.6/site-packages/pip/wheel.py create mode 100644 week-0/day-3/venv/lib/python3.6/site-packages/pkg_resources-0.0.0.dist-info/DESCRIPTION.rst create mode 100644 week-0/day-3/venv/lib/python3.6/site-packages/pkg_resources-0.0.0.dist-info/INSTALLER create mode 100644 week-0/day-3/venv/lib/python3.6/site-packages/pkg_resources-0.0.0.dist-info/METADATA create mode 100644 week-0/day-3/venv/lib/python3.6/site-packages/pkg_resources-0.0.0.dist-info/RECORD create mode 100644 week-0/day-3/venv/lib/python3.6/site-packages/pkg_resources-0.0.0.dist-info/WHEEL create mode 100644 week-0/day-3/venv/lib/python3.6/site-packages/pkg_resources-0.0.0.dist-info/metadata.json create mode 100644 week-0/day-3/venv/lib/python3.6/site-packages/pkg_resources/__init__.py create mode 100644 week-0/day-3/venv/lib/python3.6/site-packages/pkg_resources/__pycache__/__init__.cpython-36.pyc create mode 100644 week-0/day-3/venv/lib/python3.6/site-packages/pkg_resources/__pycache__/py31compat.cpython-36.pyc create mode 100644 week-0/day-3/venv/lib/python3.6/site-packages/pkg_resources/_vendor/__init__.py create mode 100644 week-0/day-3/venv/lib/python3.6/site-packages/pkg_resources/_vendor/__pycache__/__init__.cpython-36.pyc create mode 100644 week-0/day-3/venv/lib/python3.6/site-packages/pkg_resources/_vendor/__pycache__/appdirs.cpython-36.pyc create mode 100644 week-0/day-3/venv/lib/python3.6/site-packages/pkg_resources/_vendor/__pycache__/pyparsing.cpython-36.pyc create mode 100644 week-0/day-3/venv/lib/python3.6/site-packages/pkg_resources/_vendor/__pycache__/six.cpython-36.pyc create mode 100644 week-0/day-3/venv/lib/python3.6/site-packages/pkg_resources/_vendor/appdirs.py create mode 100644 week-0/day-3/venv/lib/python3.6/site-packages/pkg_resources/_vendor/packaging/__about__.py create mode 100644 week-0/day-3/venv/lib/python3.6/site-packages/pkg_resources/_vendor/packaging/__init__.py create mode 100644 week-0/day-3/venv/lib/python3.6/site-packages/pkg_resources/_vendor/packaging/__pycache__/__about__.cpython-36.pyc create mode 100644 week-0/day-3/venv/lib/python3.6/site-packages/pkg_resources/_vendor/packaging/__pycache__/__init__.cpython-36.pyc create mode 100644 week-0/day-3/venv/lib/python3.6/site-packages/pkg_resources/_vendor/packaging/__pycache__/_compat.cpython-36.pyc create mode 100644 week-0/day-3/venv/lib/python3.6/site-packages/pkg_resources/_vendor/packaging/__pycache__/_structures.cpython-36.pyc create mode 100644 week-0/day-3/venv/lib/python3.6/site-packages/pkg_resources/_vendor/packaging/__pycache__/markers.cpython-36.pyc create mode 100644 week-0/day-3/venv/lib/python3.6/site-packages/pkg_resources/_vendor/packaging/__pycache__/requirements.cpython-36.pyc create mode 100644 week-0/day-3/venv/lib/python3.6/site-packages/pkg_resources/_vendor/packaging/__pycache__/specifiers.cpython-36.pyc create mode 100644 week-0/day-3/venv/lib/python3.6/site-packages/pkg_resources/_vendor/packaging/__pycache__/utils.cpython-36.pyc create mode 100644 week-0/day-3/venv/lib/python3.6/site-packages/pkg_resources/_vendor/packaging/__pycache__/version.cpython-36.pyc create mode 100644 week-0/day-3/venv/lib/python3.6/site-packages/pkg_resources/_vendor/packaging/_compat.py create mode 100644 week-0/day-3/venv/lib/python3.6/site-packages/pkg_resources/_vendor/packaging/_structures.py create mode 100644 week-0/day-3/venv/lib/python3.6/site-packages/pkg_resources/_vendor/packaging/markers.py create mode 100644 week-0/day-3/venv/lib/python3.6/site-packages/pkg_resources/_vendor/packaging/requirements.py create mode 100644 week-0/day-3/venv/lib/python3.6/site-packages/pkg_resources/_vendor/packaging/specifiers.py create mode 100644 week-0/day-3/venv/lib/python3.6/site-packages/pkg_resources/_vendor/packaging/utils.py create mode 100644 week-0/day-3/venv/lib/python3.6/site-packages/pkg_resources/_vendor/packaging/version.py create mode 100644 week-0/day-3/venv/lib/python3.6/site-packages/pkg_resources/_vendor/pyparsing.py create mode 100644 week-0/day-3/venv/lib/python3.6/site-packages/pkg_resources/_vendor/six.py create mode 100644 week-0/day-3/venv/lib/python3.6/site-packages/pkg_resources/extern/__init__.py create mode 100644 week-0/day-3/venv/lib/python3.6/site-packages/pkg_resources/extern/__pycache__/__init__.cpython-36.pyc create mode 100644 week-0/day-3/venv/lib/python3.6/site-packages/pkg_resources/py31compat.py create mode 100644 week-0/day-3/venv/lib/python3.6/site-packages/setuptools-39.0.1.dist-info/DESCRIPTION.rst create mode 100644 week-0/day-3/venv/lib/python3.6/site-packages/setuptools-39.0.1.dist-info/INSTALLER create mode 100644 week-0/day-3/venv/lib/python3.6/site-packages/setuptools-39.0.1.dist-info/METADATA create mode 100644 week-0/day-3/venv/lib/python3.6/site-packages/setuptools-39.0.1.dist-info/RECORD create mode 100644 week-0/day-3/venv/lib/python3.6/site-packages/setuptools-39.0.1.dist-info/WHEEL create mode 100644 week-0/day-3/venv/lib/python3.6/site-packages/setuptools-39.0.1.dist-info/dependency_links.txt create mode 100644 week-0/day-3/venv/lib/python3.6/site-packages/setuptools-39.0.1.dist-info/entry_points.txt create mode 100644 week-0/day-3/venv/lib/python3.6/site-packages/setuptools-39.0.1.dist-info/metadata.json create mode 100644 week-0/day-3/venv/lib/python3.6/site-packages/setuptools-39.0.1.dist-info/top_level.txt create mode 100644 week-0/day-3/venv/lib/python3.6/site-packages/setuptools-39.0.1.dist-info/zip-safe create mode 100644 week-0/day-3/venv/lib/python3.6/site-packages/setuptools/__init__.py create mode 100644 week-0/day-3/venv/lib/python3.6/site-packages/setuptools/__pycache__/__init__.cpython-36.pyc create mode 100644 week-0/day-3/venv/lib/python3.6/site-packages/setuptools/__pycache__/archive_util.cpython-36.pyc create mode 100644 week-0/day-3/venv/lib/python3.6/site-packages/setuptools/__pycache__/build_meta.cpython-36.pyc create mode 100644 week-0/day-3/venv/lib/python3.6/site-packages/setuptools/__pycache__/config.cpython-36.pyc create mode 100644 week-0/day-3/venv/lib/python3.6/site-packages/setuptools/__pycache__/dep_util.cpython-36.pyc create mode 100644 week-0/day-3/venv/lib/python3.6/site-packages/setuptools/__pycache__/depends.cpython-36.pyc create mode 100644 week-0/day-3/venv/lib/python3.6/site-packages/setuptools/__pycache__/dist.cpython-36.pyc create mode 100644 week-0/day-3/venv/lib/python3.6/site-packages/setuptools/__pycache__/extension.cpython-36.pyc create mode 100644 week-0/day-3/venv/lib/python3.6/site-packages/setuptools/__pycache__/glibc.cpython-36.pyc create mode 100644 week-0/day-3/venv/lib/python3.6/site-packages/setuptools/__pycache__/glob.cpython-36.pyc create mode 100644 week-0/day-3/venv/lib/python3.6/site-packages/setuptools/__pycache__/launch.cpython-36.pyc create mode 100644 week-0/day-3/venv/lib/python3.6/site-packages/setuptools/__pycache__/lib2to3_ex.cpython-36.pyc create mode 100644 week-0/day-3/venv/lib/python3.6/site-packages/setuptools/__pycache__/monkey.cpython-36.pyc create mode 100644 week-0/day-3/venv/lib/python3.6/site-packages/setuptools/__pycache__/msvc.cpython-36.pyc create mode 100644 week-0/day-3/venv/lib/python3.6/site-packages/setuptools/__pycache__/namespaces.cpython-36.pyc create mode 100644 week-0/day-3/venv/lib/python3.6/site-packages/setuptools/__pycache__/package_index.cpython-36.pyc create mode 100644 week-0/day-3/venv/lib/python3.6/site-packages/setuptools/__pycache__/pep425tags.cpython-36.pyc create mode 100644 week-0/day-3/venv/lib/python3.6/site-packages/setuptools/__pycache__/py27compat.cpython-36.pyc create mode 100644 week-0/day-3/venv/lib/python3.6/site-packages/setuptools/__pycache__/py31compat.cpython-36.pyc create mode 100644 week-0/day-3/venv/lib/python3.6/site-packages/setuptools/__pycache__/py33compat.cpython-36.pyc create mode 100644 week-0/day-3/venv/lib/python3.6/site-packages/setuptools/__pycache__/py36compat.cpython-36.pyc create mode 100644 week-0/day-3/venv/lib/python3.6/site-packages/setuptools/__pycache__/sandbox.cpython-36.pyc create mode 100644 week-0/day-3/venv/lib/python3.6/site-packages/setuptools/__pycache__/site-patch.cpython-36.pyc create mode 100644 week-0/day-3/venv/lib/python3.6/site-packages/setuptools/__pycache__/ssl_support.cpython-36.pyc create mode 100644 week-0/day-3/venv/lib/python3.6/site-packages/setuptools/__pycache__/unicode_utils.cpython-36.pyc create mode 100644 week-0/day-3/venv/lib/python3.6/site-packages/setuptools/__pycache__/version.cpython-36.pyc create mode 100644 week-0/day-3/venv/lib/python3.6/site-packages/setuptools/__pycache__/wheel.cpython-36.pyc create mode 100644 week-0/day-3/venv/lib/python3.6/site-packages/setuptools/__pycache__/windows_support.cpython-36.pyc create mode 100644 week-0/day-3/venv/lib/python3.6/site-packages/setuptools/_vendor/__init__.py create mode 100644 week-0/day-3/venv/lib/python3.6/site-packages/setuptools/_vendor/__pycache__/__init__.cpython-36.pyc create mode 100644 week-0/day-3/venv/lib/python3.6/site-packages/setuptools/_vendor/__pycache__/pyparsing.cpython-36.pyc create mode 100644 week-0/day-3/venv/lib/python3.6/site-packages/setuptools/_vendor/__pycache__/six.cpython-36.pyc create mode 100644 week-0/day-3/venv/lib/python3.6/site-packages/setuptools/_vendor/packaging/__about__.py create mode 100644 week-0/day-3/venv/lib/python3.6/site-packages/setuptools/_vendor/packaging/__init__.py create mode 100644 week-0/day-3/venv/lib/python3.6/site-packages/setuptools/_vendor/packaging/__pycache__/__about__.cpython-36.pyc create mode 100644 week-0/day-3/venv/lib/python3.6/site-packages/setuptools/_vendor/packaging/__pycache__/__init__.cpython-36.pyc create mode 100644 week-0/day-3/venv/lib/python3.6/site-packages/setuptools/_vendor/packaging/__pycache__/_compat.cpython-36.pyc create mode 100644 week-0/day-3/venv/lib/python3.6/site-packages/setuptools/_vendor/packaging/__pycache__/_structures.cpython-36.pyc create mode 100644 week-0/day-3/venv/lib/python3.6/site-packages/setuptools/_vendor/packaging/__pycache__/markers.cpython-36.pyc create mode 100644 week-0/day-3/venv/lib/python3.6/site-packages/setuptools/_vendor/packaging/__pycache__/requirements.cpython-36.pyc create mode 100644 week-0/day-3/venv/lib/python3.6/site-packages/setuptools/_vendor/packaging/__pycache__/specifiers.cpython-36.pyc create mode 100644 week-0/day-3/venv/lib/python3.6/site-packages/setuptools/_vendor/packaging/__pycache__/utils.cpython-36.pyc create mode 100644 week-0/day-3/venv/lib/python3.6/site-packages/setuptools/_vendor/packaging/__pycache__/version.cpython-36.pyc create mode 100644 week-0/day-3/venv/lib/python3.6/site-packages/setuptools/_vendor/packaging/_compat.py create mode 100644 week-0/day-3/venv/lib/python3.6/site-packages/setuptools/_vendor/packaging/_structures.py create mode 100644 week-0/day-3/venv/lib/python3.6/site-packages/setuptools/_vendor/packaging/markers.py create mode 100644 week-0/day-3/venv/lib/python3.6/site-packages/setuptools/_vendor/packaging/requirements.py create mode 100644 week-0/day-3/venv/lib/python3.6/site-packages/setuptools/_vendor/packaging/specifiers.py create mode 100644 week-0/day-3/venv/lib/python3.6/site-packages/setuptools/_vendor/packaging/utils.py create mode 100644 week-0/day-3/venv/lib/python3.6/site-packages/setuptools/_vendor/packaging/version.py create mode 100644 week-0/day-3/venv/lib/python3.6/site-packages/setuptools/_vendor/pyparsing.py create mode 100644 week-0/day-3/venv/lib/python3.6/site-packages/setuptools/_vendor/six.py create mode 100644 week-0/day-3/venv/lib/python3.6/site-packages/setuptools/archive_util.py create mode 100644 week-0/day-3/venv/lib/python3.6/site-packages/setuptools/build_meta.py create mode 100644 week-0/day-3/venv/lib/python3.6/site-packages/setuptools/cli-32.exe create mode 100644 week-0/day-3/venv/lib/python3.6/site-packages/setuptools/cli-64.exe create mode 100644 week-0/day-3/venv/lib/python3.6/site-packages/setuptools/cli.exe create mode 100644 week-0/day-3/venv/lib/python3.6/site-packages/setuptools/command/__init__.py create mode 100644 week-0/day-3/venv/lib/python3.6/site-packages/setuptools/command/__pycache__/__init__.cpython-36.pyc create mode 100644 week-0/day-3/venv/lib/python3.6/site-packages/setuptools/command/__pycache__/alias.cpython-36.pyc create mode 100644 week-0/day-3/venv/lib/python3.6/site-packages/setuptools/command/__pycache__/bdist_egg.cpython-36.pyc create mode 100644 week-0/day-3/venv/lib/python3.6/site-packages/setuptools/command/__pycache__/bdist_rpm.cpython-36.pyc create mode 100644 week-0/day-3/venv/lib/python3.6/site-packages/setuptools/command/__pycache__/bdist_wininst.cpython-36.pyc create mode 100644 week-0/day-3/venv/lib/python3.6/site-packages/setuptools/command/__pycache__/build_clib.cpython-36.pyc create mode 100644 week-0/day-3/venv/lib/python3.6/site-packages/setuptools/command/__pycache__/build_ext.cpython-36.pyc create mode 100644 week-0/day-3/venv/lib/python3.6/site-packages/setuptools/command/__pycache__/build_py.cpython-36.pyc create mode 100644 week-0/day-3/venv/lib/python3.6/site-packages/setuptools/command/__pycache__/develop.cpython-36.pyc create mode 100644 week-0/day-3/venv/lib/python3.6/site-packages/setuptools/command/__pycache__/dist_info.cpython-36.pyc create mode 100644 week-0/day-3/venv/lib/python3.6/site-packages/setuptools/command/__pycache__/easy_install.cpython-36.pyc create mode 100644 week-0/day-3/venv/lib/python3.6/site-packages/setuptools/command/__pycache__/egg_info.cpython-36.pyc create mode 100644 week-0/day-3/venv/lib/python3.6/site-packages/setuptools/command/__pycache__/install.cpython-36.pyc create mode 100644 week-0/day-3/venv/lib/python3.6/site-packages/setuptools/command/__pycache__/install_egg_info.cpython-36.pyc create mode 100644 week-0/day-3/venv/lib/python3.6/site-packages/setuptools/command/__pycache__/install_lib.cpython-36.pyc create mode 100644 week-0/day-3/venv/lib/python3.6/site-packages/setuptools/command/__pycache__/install_scripts.cpython-36.pyc create mode 100644 week-0/day-3/venv/lib/python3.6/site-packages/setuptools/command/__pycache__/py36compat.cpython-36.pyc create mode 100644 week-0/day-3/venv/lib/python3.6/site-packages/setuptools/command/__pycache__/register.cpython-36.pyc create mode 100644 week-0/day-3/venv/lib/python3.6/site-packages/setuptools/command/__pycache__/rotate.cpython-36.pyc create mode 100644 week-0/day-3/venv/lib/python3.6/site-packages/setuptools/command/__pycache__/saveopts.cpython-36.pyc create mode 100644 week-0/day-3/venv/lib/python3.6/site-packages/setuptools/command/__pycache__/sdist.cpython-36.pyc create mode 100644 week-0/day-3/venv/lib/python3.6/site-packages/setuptools/command/__pycache__/setopt.cpython-36.pyc create mode 100644 week-0/day-3/venv/lib/python3.6/site-packages/setuptools/command/__pycache__/test.cpython-36.pyc create mode 100644 week-0/day-3/venv/lib/python3.6/site-packages/setuptools/command/__pycache__/upload.cpython-36.pyc create mode 100644 week-0/day-3/venv/lib/python3.6/site-packages/setuptools/command/__pycache__/upload_docs.cpython-36.pyc create mode 100644 week-0/day-3/venv/lib/python3.6/site-packages/setuptools/command/alias.py create mode 100644 week-0/day-3/venv/lib/python3.6/site-packages/setuptools/command/bdist_egg.py create mode 100644 week-0/day-3/venv/lib/python3.6/site-packages/setuptools/command/bdist_rpm.py create mode 100644 week-0/day-3/venv/lib/python3.6/site-packages/setuptools/command/bdist_wininst.py create mode 100644 week-0/day-3/venv/lib/python3.6/site-packages/setuptools/command/build_clib.py create mode 100644 week-0/day-3/venv/lib/python3.6/site-packages/setuptools/command/build_ext.py create mode 100644 week-0/day-3/venv/lib/python3.6/site-packages/setuptools/command/build_py.py create mode 100644 week-0/day-3/venv/lib/python3.6/site-packages/setuptools/command/develop.py create mode 100644 week-0/day-3/venv/lib/python3.6/site-packages/setuptools/command/dist_info.py create mode 100644 week-0/day-3/venv/lib/python3.6/site-packages/setuptools/command/easy_install.py create mode 100644 week-0/day-3/venv/lib/python3.6/site-packages/setuptools/command/egg_info.py create mode 100644 week-0/day-3/venv/lib/python3.6/site-packages/setuptools/command/install.py create mode 100644 week-0/day-3/venv/lib/python3.6/site-packages/setuptools/command/install_egg_info.py create mode 100644 week-0/day-3/venv/lib/python3.6/site-packages/setuptools/command/install_lib.py create mode 100644 week-0/day-3/venv/lib/python3.6/site-packages/setuptools/command/install_scripts.py create mode 100644 week-0/day-3/venv/lib/python3.6/site-packages/setuptools/command/launcher manifest.xml create mode 100644 week-0/day-3/venv/lib/python3.6/site-packages/setuptools/command/py36compat.py create mode 100644 week-0/day-3/venv/lib/python3.6/site-packages/setuptools/command/register.py create mode 100644 week-0/day-3/venv/lib/python3.6/site-packages/setuptools/command/rotate.py create mode 100644 week-0/day-3/venv/lib/python3.6/site-packages/setuptools/command/saveopts.py create mode 100644 week-0/day-3/venv/lib/python3.6/site-packages/setuptools/command/sdist.py create mode 100644 week-0/day-3/venv/lib/python3.6/site-packages/setuptools/command/setopt.py create mode 100644 week-0/day-3/venv/lib/python3.6/site-packages/setuptools/command/test.py create mode 100644 week-0/day-3/venv/lib/python3.6/site-packages/setuptools/command/upload.py create mode 100644 week-0/day-3/venv/lib/python3.6/site-packages/setuptools/command/upload_docs.py create mode 100644 week-0/day-3/venv/lib/python3.6/site-packages/setuptools/config.py create mode 100644 week-0/day-3/venv/lib/python3.6/site-packages/setuptools/dep_util.py create mode 100644 week-0/day-3/venv/lib/python3.6/site-packages/setuptools/depends.py create mode 100644 week-0/day-3/venv/lib/python3.6/site-packages/setuptools/dist.py create mode 100644 week-0/day-3/venv/lib/python3.6/site-packages/setuptools/extension.py create mode 100644 week-0/day-3/venv/lib/python3.6/site-packages/setuptools/extern/__init__.py create mode 100644 week-0/day-3/venv/lib/python3.6/site-packages/setuptools/extern/__pycache__/__init__.cpython-36.pyc create mode 100644 week-0/day-3/venv/lib/python3.6/site-packages/setuptools/glibc.py create mode 100644 week-0/day-3/venv/lib/python3.6/site-packages/setuptools/glob.py create mode 100644 week-0/day-3/venv/lib/python3.6/site-packages/setuptools/gui-32.exe create mode 100644 week-0/day-3/venv/lib/python3.6/site-packages/setuptools/gui-64.exe create mode 100644 week-0/day-3/venv/lib/python3.6/site-packages/setuptools/gui.exe create mode 100644 week-0/day-3/venv/lib/python3.6/site-packages/setuptools/launch.py create mode 100644 week-0/day-3/venv/lib/python3.6/site-packages/setuptools/lib2to3_ex.py create mode 100644 week-0/day-3/venv/lib/python3.6/site-packages/setuptools/monkey.py create mode 100644 week-0/day-3/venv/lib/python3.6/site-packages/setuptools/msvc.py create mode 100644 week-0/day-3/venv/lib/python3.6/site-packages/setuptools/namespaces.py create mode 100644 week-0/day-3/venv/lib/python3.6/site-packages/setuptools/package_index.py create mode 100644 week-0/day-3/venv/lib/python3.6/site-packages/setuptools/pep425tags.py create mode 100644 week-0/day-3/venv/lib/python3.6/site-packages/setuptools/py27compat.py create mode 100644 week-0/day-3/venv/lib/python3.6/site-packages/setuptools/py31compat.py create mode 100644 week-0/day-3/venv/lib/python3.6/site-packages/setuptools/py33compat.py create mode 100644 week-0/day-3/venv/lib/python3.6/site-packages/setuptools/py36compat.py create mode 100644 week-0/day-3/venv/lib/python3.6/site-packages/setuptools/sandbox.py create mode 100644 week-0/day-3/venv/lib/python3.6/site-packages/setuptools/script (dev).tmpl create mode 100644 week-0/day-3/venv/lib/python3.6/site-packages/setuptools/script.tmpl create mode 100644 week-0/day-3/venv/lib/python3.6/site-packages/setuptools/site-patch.py create mode 100644 week-0/day-3/venv/lib/python3.6/site-packages/setuptools/ssl_support.py create mode 100644 week-0/day-3/venv/lib/python3.6/site-packages/setuptools/unicode_utils.py create mode 100644 week-0/day-3/venv/lib/python3.6/site-packages/setuptools/version.py create mode 100644 week-0/day-3/venv/lib/python3.6/site-packages/setuptools/wheel.py create mode 100644 week-0/day-3/venv/lib/python3.6/site-packages/setuptools/windows_support.py create mode 120000 week-0/day-3/venv/lib64 create mode 100644 week-0/day-3/venv/pyvenv.cfg create mode 100644 week-0/day-3/venv/share/python-wheels/CacheControl-0.11.7-py2.py3-none-any.whl create mode 100644 week-0/day-3/venv/share/python-wheels/appdirs-1.4.3-py2.py3-none-any.whl create mode 100644 week-0/day-3/venv/share/python-wheels/certifi-2018.1.18-py2.py3-none-any.whl create mode 100644 week-0/day-3/venv/share/python-wheels/chardet-3.0.4-py2.py3-none-any.whl create mode 100644 week-0/day-3/venv/share/python-wheels/colorama-0.3.7-py2.py3-none-any.whl create mode 100644 week-0/day-3/venv/share/python-wheels/distlib-0.2.6-py2.py3-none-any.whl create mode 100644 week-0/day-3/venv/share/python-wheels/distro-1.0.1-py2.py3-none-any.whl create mode 100644 week-0/day-3/venv/share/python-wheels/html5lib-0.999999999-py2.py3-none-any.whl create mode 100644 week-0/day-3/venv/share/python-wheels/idna-2.6-py2.py3-none-any.whl create mode 100644 week-0/day-3/venv/share/python-wheels/ipaddress-0.0.0-py2.py3-none-any.whl create mode 100644 week-0/day-3/venv/share/python-wheels/lockfile-0.12.2-py2.py3-none-any.whl create mode 100644 week-0/day-3/venv/share/python-wheels/packaging-17.1-py2.py3-none-any.whl create mode 100644 week-0/day-3/venv/share/python-wheels/pip-9.0.1-py2.py3-none-any.whl create mode 100644 week-0/day-3/venv/share/python-wheels/pkg_resources-0.0.0-py2.py3-none-any.whl create mode 100644 week-0/day-3/venv/share/python-wheels/progress-1.2-py2.py3-none-any.whl create mode 100644 week-0/day-3/venv/share/python-wheels/pyparsing-2.2.0-py2.py3-none-any.whl create mode 100644 week-0/day-3/venv/share/python-wheels/requests-2.18.4-py2.py3-none-any.whl create mode 100644 week-0/day-3/venv/share/python-wheels/retrying-1.3.3-py2.py3-none-any.whl create mode 100644 week-0/day-3/venv/share/python-wheels/setuptools-39.0.1-py2.py3-none-any.whl create mode 100644 week-0/day-3/venv/share/python-wheels/six-1.11.0-py2.py3-none-any.whl create mode 100644 week-0/day-3/venv/share/python-wheels/urllib3-1.22-py2.py3-none-any.whl create mode 100644 week-0/day-3/venv/share/python-wheels/webencodings-0.5-py2.py3-none-any.whl create mode 100644 week-0/day-3/venv/share/python-wheels/wheel-0.30.0-py2.py3-none-any.whl diff --git a/week-0/day-3/my_todo_app/todo_app/__init__.py b/week-0/day-3/my_todo_app/todo_app/__init__.py index ce678855..edad6e81 100644 --- a/week-0/day-3/my_todo_app/todo_app/__init__.py +++ b/week-0/day-3/my_todo_app/todo_app/__init__.py @@ -2,6 +2,14 @@ from flask import Flask from flask import request +from flask import render_template + +#our fake db +todo_store = {} +todo_store['depo']=['Go for run' , 'Listen Rock music'] +todo_store['shivang']=['Read' , 'Code'] +todo_store['raj']=['Study' , 'Jerkoff'] +todo_store['pallav']=['Run', 'Play CS'] def create_app(test_config=None): @@ -14,26 +22,56 @@ def create_app(test_config=None): except OSError: pass - def todo_view(todos): - the_view = 'List of my todos:' + '
    ' + def select_todos(name): + global todo_store + return todo_store[name] - for todo in todos: - the_view += (todo + '
    ') + def insert_todo(name,todo): + global todo_store + current_todos = todo_store[name] + current_todos.append(todo) + todo_store[name] = current_todos + return - the_view+='-----------LIST ENDS HERE-------------' - return the_view + def add_todo_by_name(name,todo): + #call db as model + insert_todo(name,todo) + return + def get_todos_by_name(name): + try: + return select_todos(name) + except: + return None @app.route('/todos') def todos(): + print('----------------') name = request.args.get('name') print(name) - if name == 'depo': - my_todos = ['Go for run' , 'Listen Rock music'] - elif name == 'shivang': - my_todos = ['Read' , 'Code'] - elif name == 'raj': - my_todos = ['Study' , 'Jerkoff'] - return todo_view(my_todos) + print('----------------') + + person_todo_list = get_todos_by_name(name) + #return todo_view(person_todo_list) + if person_todo_list == None: + #throw 404 + return render_template('404.html'),404 + else: + return render_template('todo_view.html',todos=person_todo_list) + + + + @app.route('/add_todos') + def add_todos(): + name = request.args.get('name') + todo = request.args.get('todo') + print('--------') + print(name,todo) + print('--------') + add_todo_by_name(name,todo) + return 'Added Succesfully' + + + return app diff --git a/week-0/day-3/my_todo_app/todo_app/__pycache__/__init__.cpython-36.pyc b/week-0/day-3/my_todo_app/todo_app/__pycache__/__init__.cpython-36.pyc index e7a1702d4e3b74aff5c6e99308f20b0b14efe1a1..d4aa217399694c6fa98a5361a63ceefca198b1ec 100644 GIT binary patch literal 2047 zcmZuyO>f&q5ZzspA}vd{6dOhiG_4Nlfd^X#oI?&q>LUFBioy-70&NKt1j}7Xlqizj zUD+UEpKQQQf!x|3(Z9rNPyGu$b!H{YN@@zbe4PDy^JZps+-^5_{(SlKOP7$p$=YK9 zK82<-=s4jtB>}!!N@px!6tM-^3M_+dz;<9$l90&Z4sVQ@cDQ>&xW_jPZUWxqErZ*D zxA?Zf9l$%h%b(oRpuy>Y_`CnWndHo;wewXPsVM+gieKkKX@J{OWL(Hli&>FIT2#%i z^WHF*Jvq;+?zf53BI}*!@w7Lat0WF=E{Z&`&qc%o`*qGm;Hq(Q5oM#m8R$7L1NR#t zr}=OgSTdRf);a9szDc99_j(XCiYQH^i&k{?L6YZL8EoAQVf{QX2S_9N)V?OXEJLY3gn?%0rWmwUI~TXJUs-r!BZ6!vNG z%^P}0!PesKTknQmGh^KXD*@{^?-(nb3A%O9z6X7tCYjPv7K=~{&?mVNVVq~fWVG@D zePPfB=!0i`xFY-T=~EQFsdJu(O6O9*mz_m3@fVRe@83~>oXDS1JDG$1O?dy zw8aQrF|tkg@pmubOHs*85E8Qzp*XH z7H(WaDsVDo@>JX0x}n@2vH=0?fW7e!uyM{kt2zfCJjTz;dvWyQaI9x(@(0vawPn)z zA`zFy2nFPzMfpzc6f()Q#Q4^BBuA>Yz%_})mjMkrg^()G7ST)LDgzm}Vf;Zx*@4eP zXbJ&lSPP`{82(zU+J8(yL!fH*?}PllaI1Vfh5a;{fMh5h3T7~hN416GfS}fWKHgi_ zGSr3)bR^E54e+bAKQz^M`gC%e#nkl9!Q55CtMD-S+{ z0aGA^wTuE-XOP^_9`k>-%6BEEO6`TFF2b;8xvITcG!;CNs&22Y&H^s2+Wl_urIfj> z9huLy@an9It{Tu6jB^qN@S$t>sdRJ_9LUZKp8 MA)r;uvavVlKR@r&%K!iX literal 1161 zcmZ`(L2uhO6ecOjR+OZ5)-CG>3=noGpaPBp1XznA2nICX(xLE%I6zkcfxwEiEz1%e zl1^sBJ|#fgLw`k2`%Ap;w7<~P9#t=HF^mEqpFZk6etO@N4z{<0M&pO`_YOjTp-%?f zqaR_aJunP0JVuFK$rzU;A=vs3_)g-0-(W8DZgAo<+(S|GZ-_zN2pjLGF;xXPP025& zTzEtpVG=HB5e z86V9bwAbVLv))pje|Ge{ZEEE{!bJ+#;a2%z8>=QGUr#uwSe@1W^FzU z;-M&cJjrKMHEd6^_*i7ql2=;Q8&^UWDWkK4m}Zpma@HQwte|=*s`!fYqP-u(Zu=lE zXQ|Dc(#a&gb<#Aia-F7olbPA5QOjY+7AgRPuuB5mB0ipfmq|`Fx8Zw-W0BFZI@-I9 zm^bR2Dzia$kkz~gtNIO$Mk72T41;<|I}2pBUqHtdL_V-u51=!u?*Z`ud2E%gkrp66 zASY~t1r~V&`dnM}H@n8IXvv{1`9#cvpGDXgGL+Nmqhh=YPeoRQ`@o?o+{d;z&A5yq=!2S4->MlEhyXQbky9 z0Ps;N-+B!&-@;U1fI(yn`)~!T2{ruY|7xhBrnD6^ewx~MN>f9GGJZ)5&T^^D_HC0- zKw8uMwbzkSNaIN{)jV>NO%31Qs_~5jBGqJSZvXPM6iu+E(1d%{0s~APf?N0wZV-QC wcT0W+ScJQgC+~u1yuSU;Yl3xc>iu=06fwJZBp$c2hKe0v}Jpcdz diff --git a/week-0/day-3/my_todo_app/todo_app/templates/404.html b/week-0/day-3/my_todo_app/todo_app/templates/404.html new file mode 100644 index 00000000..2b269d35 --- /dev/null +++ b/week-0/day-3/my_todo_app/todo_app/templates/404.html @@ -0,0 +1 @@ +

    `%Am7 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ໞcf$(9E>UWtqg`Q1b?HJnx@uIBTK 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 Rm#}Y*^zFyP48?;=GQ|i0+8)>a5DF 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