From 37c178f2f2adeae68b9eb9cf9cab1d1ac9afd39d Mon Sep 17 00:00:00 2001 From: skoo1100 Date: Wed, 26 May 2021 14:29:10 +0900 Subject: [PATCH 1/2] update list number --- Jobs_Collections/.DS_Store | Bin 6148 -> 0 bytes Jobs_Collections/.gitattributes | 2 - Jobs_Collections/README.md | 66 - .../__pycache__/indeed.cpython-38.pyc | Bin 2619 -> 0 bytes .../__pycache__/job_korea.cpython-38.pyc | Bin 2862 -> 0 bytes .../__pycache__/news.cpython-38.pyc | Bin 1437 -> 0 bytes .../__pycache__/saramin.cpython-38.pyc | Bin 2933 -> 0 bytes Jobs_Collections/indeed.py | 137 - Jobs_Collections/index.py | 89 - Jobs_Collections/job_korea.py | 128 - Jobs_Collections/news.py | 60 - Jobs_Collections/saramin.py | 126 - Jobs_Collections/static/.DS_Store | Bin 6148 -> 0 bytes Jobs_Collections/static/favicon.png | Bin 791 -> 0 bytes Jobs_Collections/static/header.css | 198 - Jobs_Collections/static/heart.png | Bin 28578 -> 0 bytes Jobs_Collections/static/loadingbar.css | 126 - Jobs_Collections/static/news.js | 46 - Jobs_Collections/static/pocket.js | 24 - Jobs_Collections/static/pocket.png | Bin 1780 -> 0 bytes Jobs_Collections/static/reload.js | 14 - Jobs_Collections/static/search.js | 674 -- Jobs_Collections/static/section_page1.css | 54 - Jobs_Collections/static/section_page2.css | 157 - .../templates/Jobs_collection.html | 290 - .../Flask-1.1.2.dist-info/INSTALLER | 1 - .../Flask-1.1.2.dist-info/LICENSE.rst | 28 - .../Flask-1.1.2.dist-info/METADATA | 137 - .../Flask-1.1.2.dist-info/RECORD | 48 - .../site-packages/Flask-1.1.2.dist-info/WHEEL | 6 - .../Flask-1.1.2.dist-info/entry_points.txt | 3 - .../Flask-1.1.2.dist-info/top_level.txt | 1 - .../Jinja2-2.11.2.dist-info/INSTALLER | 1 - .../Jinja2-2.11.2.dist-info/LICENSE.rst | 28 - .../Jinja2-2.11.2.dist-info/METADATA | 106 - .../Jinja2-2.11.2.dist-info/RECORD | 61 - .../Jinja2-2.11.2.dist-info/WHEEL | 6 - .../Jinja2-2.11.2.dist-info/entry_points.txt | 3 - .../Jinja2-2.11.2.dist-info/top_level.txt | 1 - .../MarkupSafe-1.1.1.dist-info/INSTALLER | 1 - .../MarkupSafe-1.1.1.dist-info/LICENSE.rst | 28 - .../MarkupSafe-1.1.1.dist-info/METADATA | 105 - .../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-1.0.1.dist-info/INSTALLER | 1 - .../Werkzeug-1.0.1.dist-info/LICENSE.rst | 28 - .../Werkzeug-1.0.1.dist-info/METADATA | 128 - .../Werkzeug-1.0.1.dist-info/RECORD | 101 - .../Werkzeug-1.0.1.dist-info/WHEEL | 6 - .../Werkzeug-1.0.1.dist-info/top_level.txt | 1 - .../__pycache__/easy_install.cpython-38.pyc | Bin 337 -> 0 bytes .../__pycache__/mccabe.cpython-38.pyc | Bin 11303 -> 0 bytes .../__pycache__/six.cpython-38.pyc | Bin 26924 -> 0 bytes .../astroid-2.4.2.dist-info/COPYING | 339 - .../astroid-2.4.2.dist-info/COPYING.LESSER | 510 - .../astroid-2.4.2.dist-info/INSTALLER | 1 - .../astroid-2.4.2.dist-info/METADATA | 118 - .../astroid-2.4.2.dist-info/RECORD | 151 - .../astroid-2.4.2.dist-info/WHEEL | 5 - .../astroid-2.4.2.dist-info/top_level.txt | 1 - .../site-packages/astroid/__init__.py | 168 - .../site-packages/astroid/__pkginfo__.py | 56 - .../__pycache__/__init__.cpython-38.pyc | Bin 4486 -> 0 bytes .../__pycache__/__pkginfo__.cpython-38.pyc | Bin 1434 -> 0 bytes .../astroid/__pycache__/_ast.cpython-38.pyc | Bin 3114 -> 0 bytes .../__pycache__/arguments.cpython-38.pyc | Bin 7676 -> 0 bytes .../__pycache__/as_string.cpython-38.pyc | Bin 26104 -> 0 bytes .../astroid/__pycache__/bases.cpython-38.pyc | Bin 15947 -> 0 bytes .../__pycache__/builder.cpython-38.pyc | Bin 12912 -> 0 bytes .../__pycache__/context.cpython-38.pyc | Bin 4354 -> 0 bytes .../__pycache__/decorators.cpython-38.pyc | Bin 3608 -> 0 bytes .../__pycache__/exceptions.cpython-38.pyc | Bin 9218 -> 0 bytes .../__pycache__/helpers.cpython-38.pyc | Bin 7424 -> 0 bytes .../__pycache__/inference.cpython-38.pyc | Bin 22374 -> 0 bytes .../__pycache__/manager.cpython-38.pyc | Bin 9812 -> 0 bytes .../astroid/__pycache__/mixins.cpython-38.pyc | Bin 5898 -> 0 bytes .../__pycache__/modutils.cpython-38.pyc | Bin 17111 -> 0 bytes .../__pycache__/node_classes.cpython-38.pyc | Bin 115723 -> 0 bytes .../astroid/__pycache__/nodes.cpython-38.pyc | Bin 2106 -> 0 bytes .../__pycache__/objects.cpython-38.pyc | Bin 9726 -> 0 bytes .../__pycache__/protocols.cpython-38.pyc | Bin 17028 -> 0 bytes .../__pycache__/raw_building.cpython-38.pyc | Bin 11680 -> 0 bytes .../__pycache__/rebuilder.cpython-38.pyc | Bin 35584 -> 0 bytes .../__pycache__/scoped_nodes.cpython-38.pyc | Bin 69479 -> 0 bytes .../__pycache__/test_utils.cpython-38.pyc | Bin 2565 -> 0 bytes .../__pycache__/transforms.cpython-38.pyc | Bin 3465 -> 0 bytes .../astroid/__pycache__/util.cpython-38.pyc | Bin 5833 -> 0 bytes .../python3.8/site-packages/astroid/_ast.py | 131 - .../site-packages/astroid/arguments.py | 300 - .../site-packages/astroid/as_string.py | 631 -- .../python3.8/site-packages/astroid/bases.py | 548 -- .../__pycache__/brain_argparse.cpython-38.pyc | Bin 1112 -> 0 bytes .../__pycache__/brain_attrs.cpython-38.pyc | Bin 1609 -> 0 bytes .../__pycache__/brain_boto3.cpython-38.pyc | Bin 940 -> 0 bytes .../brain_builtin_inference.cpython-38.pyc | Bin 20683 -> 0 bytes .../brain_collections.cpython-38.pyc | Bin 2538 -> 0 bytes .../__pycache__/brain_crypt.cpython-38.pyc | Bin 880 -> 0 bytes .../__pycache__/brain_curses.cpython-38.pyc | Bin 3396 -> 0 bytes .../brain_dataclasses.cpython-38.pyc | Bin 1312 -> 0 bytes .../__pycache__/brain_dateutil.cpython-38.pyc | Bin 714 -> 0 bytes .../__pycache__/brain_fstrings.cpython-38.pyc | Bin 1594 -> 0 bytes .../brain_functools.cpython-38.pyc | Bin 4690 -> 0 bytes .../brain/__pycache__/brain_gi.cpython-38.pyc | Bin 4450 -> 0 bytes .../__pycache__/brain_hashlib.cpython-38.pyc | Bin 1974 -> 0 bytes .../__pycache__/brain_http.cpython-38.pyc | Bin 10531 -> 0 bytes .../brain/__pycache__/brain_io.cpython-38.pyc | Bin 1346 -> 0 bytes .../brain_mechanize.cpython-38.pyc | Bin 748 -> 0 bytes .../brain_multiprocessing.cpython-38.pyc | Bin 2566 -> 0 bytes .../brain_namedtuple_enum.cpython-38.pyc | Bin 11697 -> 0 bytes .../__pycache__/brain_nose.cpython-38.pyc | Bin 2101 -> 0 bytes ...rain_numpy_core_fromnumeric.cpython-38.pyc | Bin 659 -> 0 bytes ...in_numpy_core_function_base.cpython-38.pyc | Bin 1053 -> 0 bytes ...brain_numpy_core_multiarray.cpython-38.pyc | Bin 3265 -> 0 bytes .../brain_numpy_core_numeric.cpython-38.pyc | Bin 1297 -> 0 bytes ...ain_numpy_core_numerictypes.cpython-38.pyc | Bin 7761 -> 0 bytes .../brain_numpy_core_umath.cpython-38.pyc | Bin 4403 -> 0 bytes .../brain_numpy_ndarray.cpython-38.pyc | Bin 8398 -> 0 bytes .../brain_numpy_random_mtrand.cpython-38.pyc | Bin 3267 -> 0 bytes .../brain_numpy_utils.cpython-38.pyc | Bin 1892 -> 0 bytes .../brain_pkg_resources.cpython-38.pyc | Bin 2217 -> 0 bytes .../__pycache__/brain_pytest.cpython-38.pyc | Bin 2189 -> 0 bytes .../brain/__pycache__/brain_qt.cpython-38.pyc | Bin 2127 -> 0 bytes .../__pycache__/brain_random.cpython-38.pyc | Bin 2217 -> 0 bytes .../brain/__pycache__/brain_re.cpython-38.pyc | Bin 1096 -> 0 bytes .../brain_responses.cpython-38.pyc | Bin 1801 -> 0 bytes .../brain_scipy_signal.cpython-38.pyc | Bin 2214 -> 0 bytes .../__pycache__/brain_six.cpython-38.pyc | Bin 5596 -> 0 bytes .../__pycache__/brain_ssl.cpython-38.pyc | Bin 3628 -> 0 bytes .../brain_subprocess.cpython-38.pyc | Bin 4224 -> 0 bytes .../brain_threading.cpython-38.pyc | Bin 775 -> 0 bytes .../__pycache__/brain_typing.cpython-38.pyc | Bin 2383 -> 0 bytes .../__pycache__/brain_uuid.cpython-38.pyc | Bin 665 -> 0 bytes .../astroid/brain/brain_argparse.py | 33 - .../astroid/brain/brain_attrs.py | 65 - .../astroid/brain/brain_boto3.py | 28 - .../astroid/brain/brain_builtin_inference.py | 873 -- .../astroid/brain/brain_collections.py | 75 - .../astroid/brain/brain_crypt.py | 26 - .../astroid/brain/brain_curses.py | 179 - .../astroid/brain/brain_dataclasses.py | 50 - .../astroid/brain/brain_dateutil.py | 28 - .../astroid/brain/brain_fstrings.py | 51 - .../astroid/brain/brain_functools.py | 159 - .../site-packages/astroid/brain/brain_gi.py | 253 - .../astroid/brain/brain_hashlib.py | 69 - .../site-packages/astroid/brain/brain_http.py | 211 - .../site-packages/astroid/brain/brain_io.py | 45 - .../astroid/brain/brain_mechanize.py | 29 - .../astroid/brain/brain_multiprocessing.py | 107 - .../astroid/brain/brain_namedtuple_enum.py | 455 - .../site-packages/astroid/brain/brain_nose.py | 77 - .../brain/brain_numpy_core_fromnumeric.py | 23 - .../brain/brain_numpy_core_function_base.py | 29 - .../brain/brain_numpy_core_multiarray.py | 92 - .../astroid/brain/brain_numpy_core_numeric.py | 43 - .../brain/brain_numpy_core_numerictypes.py | 254 - .../astroid/brain/brain_numpy_core_umath.py | 147 - .../astroid/brain/brain_numpy_ndarray.py | 153 - .../brain/brain_numpy_random_mtrand.py | 70 - .../astroid/brain/brain_numpy_utils.py | 65 - .../astroid/brain/brain_pkg_resources.py | 75 - .../astroid/brain/brain_pytest.py | 88 - .../site-packages/astroid/brain/brain_qt.py | 83 - .../astroid/brain/brain_random.py | 75 - .../site-packages/astroid/brain/brain_re.py | 36 - .../astroid/brain/brain_responses.py | 73 - .../astroid/brain/brain_scipy_signal.py | 89 - .../site-packages/astroid/brain/brain_six.py | 201 - .../site-packages/astroid/brain/brain_ssl.py | 75 - .../astroid/brain/brain_subprocess.py | 146 - .../astroid/brain/brain_threading.py | 31 - .../astroid/brain/brain_typing.py | 96 - .../site-packages/astroid/brain/brain_uuid.py | 20 - .../site-packages/astroid/builder.py | 455 - .../site-packages/astroid/context.py | 179 - .../site-packages/astroid/decorators.py | 142 - .../site-packages/astroid/exceptions.py | 230 - .../site-packages/astroid/helpers.py | 282 - .../site-packages/astroid/inference.py | 994 -- .../astroid/interpreter/__init__.py | 0 .../__pycache__/__init__.cpython-38.pyc | Bin 208 -> 0 bytes .../__pycache__/dunder_lookup.cpython-38.pyc | Bin 2163 -> 0 bytes .../__pycache__/objectmodel.cpython-38.pyc | Bin 26964 -> 0 bytes .../astroid/interpreter/_import/__init__.py | 0 .../__pycache__/__init__.cpython-38.pyc | Bin 216 -> 0 bytes .../_import/__pycache__/spec.cpython-38.pyc | Bin 9418 -> 0 bytes .../_import/__pycache__/util.cpython-38.pyc | Bin 436 -> 0 bytes .../astroid/interpreter/_import/spec.py | 346 - .../astroid/interpreter/_import/util.py | 10 - .../astroid/interpreter/dunder_lookup.py | 66 - .../astroid/interpreter/objectmodel.py | 801 -- .../site-packages/astroid/manager.py | 350 - .../python3.8/site-packages/astroid/mixins.py | 160 - .../site-packages/astroid/modutils.py | 690 -- .../site-packages/astroid/node_classes.py | 4862 ---------- .../python3.8/site-packages/astroid/nodes.py | 176 - .../site-packages/astroid/objects.py | 314 - .../site-packages/astroid/protocols.py | 780 -- .../site-packages/astroid/raw_building.py | 483 - .../site-packages/astroid/rebuilder.py | 1010 -- .../site-packages/astroid/scoped_nodes.py | 2927 ------ .../site-packages/astroid/test_utils.py | 73 - .../site-packages/astroid/transforms.py | 90 - .../python3.8/site-packages/astroid/util.py | 164 - .../beautifulsoup4-4.9.1.dist-info/AUTHORS | 49 - .../COPYING.txt | 27 - .../beautifulsoup4-4.9.1.dist-info/INSTALLER | 1 - .../beautifulsoup4-4.9.1.dist-info/LICENSE | 30 - .../beautifulsoup4-4.9.1.dist-info/METADATA | 131 - .../beautifulsoup4-4.9.1.dist-info/RECORD | 44 - .../beautifulsoup4-4.9.1.dist-info/WHEEL | 5 - .../top_level.txt | 1 - .../bs4-0.0.1-py3.8.egg-info/PKG-INFO | 21 - .../bs4-0.0.1-py3.8.egg-info/SOURCES.txt | 7 - .../dependency_links.txt | 1 - .../installed-files.txt | 5 - .../bs4-0.0.1-py3.8.egg-info/requires.txt | 1 - .../bs4-0.0.1-py3.8.egg-info/top_level.txt | 1 - .../python3.8/site-packages/bs4/__init__.py | 777 -- .../bs4/__pycache__/__init__.cpython-38.pyc | Bin 22709 -> 0 bytes .../bs4/__pycache__/dammit.cpython-38.pyc | Bin 21624 -> 0 bytes .../bs4/__pycache__/diagnose.cpython-38.pyc | Bin 8474 -> 0 bytes .../bs4/__pycache__/element.cpython-38.pyc | Bin 62844 -> 0 bytes .../bs4/__pycache__/formatter.cpython-38.pyc | Bin 5479 -> 0 bytes .../bs4/__pycache__/testing.cpython-38.pyc | Bin 43251 -> 0 bytes .../site-packages/bs4/builder/__init__.py | 520 -- .../__pycache__/__init__.cpython-38.pyc | Bin 15500 -> 0 bytes .../__pycache__/_html5lib.cpython-38.pyc | Bin 12525 -> 0 bytes .../__pycache__/_htmlparser.cpython-38.pyc | Bin 13025 -> 0 bytes .../builder/__pycache__/_lxml.cpython-38.pyc | Bin 9485 -> 0 bytes .../site-packages/bs4/builder/_html5lib.py | 467 - .../site-packages/bs4/builder/_htmlparser.py | 477 - .../site-packages/bs4/builder/_lxml.py | 332 - .../Lib/python3.8/site-packages/bs4/dammit.py | 939 -- .../python3.8/site-packages/bs4/diagnose.py | 242 - .../python3.8/site-packages/bs4/element.py | 2162 ----- .../python3.8/site-packages/bs4/formatter.py | 152 - .../python3.8/site-packages/bs4/testing.py | 1077 --- .../site-packages/bs4/tests/__init__.py | 1 - .../tests/__pycache__/__init__.cpython-38.pyc | Bin 241 -> 0 bytes .../test_builder_registry.cpython-38.pyc | Bin 5013 -> 0 bytes .../__pycache__/test_docs.cpython-38.pyc | Bin 475 -> 0 bytes .../__pycache__/test_html5lib.cpython-38.pyc | Bin 7316 -> 0 bytes .../test_htmlparser.cpython-38.pyc | Bin 4089 -> 0 bytes .../__pycache__/test_lxml.cpython-38.pyc | Bin 3997 -> 0 bytes .../__pycache__/test_soup.cpython-38.pyc | Bin 27760 -> 0 bytes .../__pycache__/test_tree.cpython-38.pyc | Bin 92945 -> 0 bytes .../bs4/tests/test_builder_registry.py | 147 - .../site-packages/bs4/tests/test_docs.py | 36 - .../site-packages/bs4/tests/test_html5lib.py | 190 - .../bs4/tests/test_htmlparser.py | 97 - .../site-packages/bs4/tests/test_lxml.py | 115 - .../site-packages/bs4/tests/test_soup.py | 728 -- .../site-packages/bs4/tests/test_tree.py | 2324 ----- .../certifi-2020.4.5.2.dist-info/INSTALLER | 1 - .../certifi-2020.4.5.2.dist-info/LICENSE | 21 - .../certifi-2020.4.5.2.dist-info/METADATA | 82 - .../certifi-2020.4.5.2.dist-info/RECORD | 13 - .../certifi-2020.4.5.2.dist-info/WHEEL | 6 - .../top_level.txt | 1 - .../site-packages/certifi/__init__.py | 3 - .../site-packages/certifi/__main__.py | 12 - .../__pycache__/__init__.cpython-38.pyc | Bin 282 -> 0 bytes .../__pycache__/__main__.cpython-38.pyc | Bin 445 -> 0 bytes .../certifi/__pycache__/core.cpython-38.pyc | Bin 1161 -> 0 bytes .../site-packages/certifi/cacert.pem | 4641 --------- .../python3.8/site-packages/certifi/core.py | 60 - .../chardet-3.0.4.dist-info/DESCRIPTION.rst | 70 - .../chardet-3.0.4.dist-info/INSTALLER | 1 - .../chardet-3.0.4.dist-info/METADATA | 96 - .../chardet-3.0.4.dist-info/RECORD | 91 - .../chardet-3.0.4.dist-info/WHEEL | 6 - .../chardet-3.0.4.dist-info/entry_points.txt | 3 - .../chardet-3.0.4.dist-info/metadata.json | 1 - .../chardet-3.0.4.dist-info/top_level.txt | 1 - .../site-packages/chardet/__init__.py | 39 - .../__pycache__/__init__.cpython-38.pyc | Bin 854 -> 0 bytes .../__pycache__/big5freq.cpython-38.pyc | Bin 27183 -> 0 bytes .../__pycache__/big5prober.cpython-38.pyc | Bin 1138 -> 0 bytes .../chardistribution.cpython-38.pyc | Bin 6224 -> 0 bytes .../charsetgroupprober.cpython-38.pyc | Bin 2255 -> 0 bytes .../__pycache__/charsetprober.cpython-38.pyc | Bin 3487 -> 0 bytes .../codingstatemachine.cpython-38.pyc | Bin 2914 -> 0 bytes .../chardet/__pycache__/compat.cpython-38.pyc | Bin 359 -> 0 bytes .../__pycache__/cp949prober.cpython-38.pyc | Bin 1145 -> 0 bytes .../chardet/__pycache__/enums.cpython-38.pyc | Bin 2652 -> 0 bytes .../__pycache__/escprober.cpython-38.pyc | Bin 2637 -> 0 bytes .../chardet/__pycache__/escsm.cpython-38.pyc | Bin 7478 -> 0 bytes .../__pycache__/eucjpprober.cpython-38.pyc | Bin 2455 -> 0 bytes .../__pycache__/euckrfreq.cpython-38.pyc | Bin 12067 -> 0 bytes .../__pycache__/euckrprober.cpython-38.pyc | Bin 1146 -> 0 bytes .../__pycache__/euctwfreq.cpython-38.pyc | Bin 27187 -> 0 bytes .../__pycache__/euctwprober.cpython-38.pyc | Bin 1146 -> 0 bytes .../__pycache__/gb2312freq.cpython-38.pyc | Bin 19111 -> 0 bytes .../__pycache__/gb2312prober.cpython-38.pyc | Bin 1154 -> 0 bytes .../__pycache__/hebrewprober.cpython-38.pyc | Bin 3027 -> 0 bytes .../__pycache__/jisfreq.cpython-38.pyc | Bin 22139 -> 0 bytes .../chardet/__pycache__/jpcntx.cpython-38.pyc | Bin 37612 -> 0 bytes .../langbulgarianmodel.cpython-38.pyc | Bin 23636 -> 0 bytes .../langcyrillicmodel.cpython-38.pyc | Bin 29100 -> 0 bytes .../__pycache__/langgreekmodel.cpython-38.pyc | Bin 23594 -> 0 bytes .../langhebrewmodel.cpython-38.pyc | Bin 22221 -> 0 bytes .../langhungarianmodel.cpython-38.pyc | Bin 23625 -> 0 bytes .../__pycache__/langthaimodel.cpython-38.pyc | Bin 22200 -> 0 bytes .../langturkishmodel.cpython-38.pyc | Bin 22223 -> 0 bytes .../__pycache__/latin1prober.cpython-38.pyc | Bin 3407 -> 0 bytes .../mbcharsetprober.cpython-38.pyc | Bin 2270 -> 0 bytes .../mbcsgroupprober.cpython-38.pyc | Bin 1135 -> 0 bytes .../chardet/__pycache__/mbcssm.cpython-38.pyc | Bin 16758 -> 0 bytes .../sbcharsetprober.cpython-38.pyc | Bin 3023 -> 0 bytes .../sbcsgroupprober.cpython-38.pyc | Bin 1633 -> 0 bytes .../__pycache__/sjisprober.cpython-38.pyc | Bin 2491 -> 0 bytes .../universaldetector.cpython-38.pyc | Bin 5835 -> 0 bytes .../__pycache__/utf8prober.cpython-38.pyc | Bin 1996 -> 0 bytes .../__pycache__/version.cpython-38.pyc | Bin 443 -> 0 bytes .../site-packages/chardet/big5freq.py | 386 - .../site-packages/chardet/big5prober.py | 47 - .../site-packages/chardet/chardistribution.py | 233 - .../chardet/charsetgroupprober.py | 106 - .../site-packages/chardet/charsetprober.py | 145 - .../site-packages/chardet/cli/__init__.py | 1 - .../cli/__pycache__/__init__.cpython-38.pyc | Bin 200 -> 0 bytes .../cli/__pycache__/chardetect.cpython-38.pyc | Bin 2665 -> 0 bytes .../site-packages/chardet/cli/chardetect.py | 85 - .../chardet/codingstatemachine.py | 88 - .../python3.8/site-packages/chardet/compat.py | 34 - .../site-packages/chardet/cp949prober.py | 49 - .../python3.8/site-packages/chardet/enums.py | 76 - .../site-packages/chardet/escprober.py | 101 - .../python3.8/site-packages/chardet/escsm.py | 246 - .../site-packages/chardet/eucjpprober.py | 92 - .../site-packages/chardet/euckrfreq.py | 195 - .../site-packages/chardet/euckrprober.py | 47 - .../site-packages/chardet/euctwfreq.py | 387 - .../site-packages/chardet/euctwprober.py | 46 - .../site-packages/chardet/gb2312freq.py | 283 - .../site-packages/chardet/gb2312prober.py | 46 - .../site-packages/chardet/hebrewprober.py | 292 - .../site-packages/chardet/jisfreq.py | 325 - .../python3.8/site-packages/chardet/jpcntx.py | 233 - .../chardet/langbulgarianmodel.py | 228 - .../chardet/langcyrillicmodel.py | 333 - .../site-packages/chardet/langgreekmodel.py | 225 - .../site-packages/chardet/langhebrewmodel.py | 200 - .../chardet/langhungarianmodel.py | 225 - .../site-packages/chardet/langthaimodel.py | 199 - .../site-packages/chardet/langturkishmodel.py | 193 - .../site-packages/chardet/latin1prober.py | 145 - .../site-packages/chardet/mbcharsetprober.py | 91 - .../site-packages/chardet/mbcsgroupprober.py | 54 - .../python3.8/site-packages/chardet/mbcssm.py | 572 -- .../site-packages/chardet/sbcharsetprober.py | 132 - .../site-packages/chardet/sbcsgroupprober.py | 73 - .../site-packages/chardet/sjisprober.py | 92 - .../chardet/universaldetector.py | 286 - .../site-packages/chardet/utf8prober.py | 82 - .../site-packages/chardet/version.py | 9 - .../click-7.1.2.dist-info/INSTALLER | 1 - .../click-7.1.2.dist-info/LICENSE.rst | 28 - .../click-7.1.2.dist-info/METADATA | 102 - .../click-7.1.2.dist-info/RECORD | 40 - .../site-packages/click-7.1.2.dist-info/WHEEL | 6 - .../click-7.1.2.dist-info/top_level.txt | 1 - .../python3.8/site-packages/click/__init__.py | 79 - .../click/__pycache__/__init__.cpython-38.pyc | Bin 2751 -> 0 bytes .../__pycache__/_bashcomplete.cpython-38.pyc | Bin 10086 -> 0 bytes .../click/__pycache__/_compat.cpython-38.pyc | Bin 18865 -> 0 bytes .../__pycache__/_termui_impl.cpython-38.pyc | Bin 14321 -> 0 bytes .../__pycache__/_textwrap.cpython-38.pyc | Bin 1368 -> 0 bytes .../__pycache__/_unicodefun.cpython-38.pyc | Bin 3358 -> 0 bytes .../__pycache__/_winconsole.cpython-38.pyc | Bin 9528 -> 0 bytes .../click/__pycache__/core.cpython-38.pyc | Bin 62102 -> 0 bytes .../__pycache__/decorators.cpython-38.pyc | Bin 11572 -> 0 bytes .../__pycache__/exceptions.cpython-38.pyc | Bin 9132 -> 0 bytes .../__pycache__/formatting.cpython-38.pyc | Bin 8780 -> 0 bytes .../click/__pycache__/globals.cpython-38.pyc | Bin 1904 -> 0 bytes .../click/__pycache__/parser.cpython-38.pyc | Bin 11893 -> 0 bytes .../click/__pycache__/termui.cpython-38.pyc | Bin 21670 -> 0 bytes .../click/__pycache__/testing.cpython-38.pyc | Bin 11782 -> 0 bytes .../click/__pycache__/types.cpython-38.pyc | Bin 22312 -> 0 bytes .../click/__pycache__/utils.cpython-38.pyc | Bin 15626 -> 0 bytes .../site-packages/click/_bashcomplete.py | 375 - .../python3.8/site-packages/click/_compat.py | 786 -- .../site-packages/click/_termui_impl.py | 657 -- .../site-packages/click/_textwrap.py | 37 - .../site-packages/click/_unicodefun.py | 131 - .../site-packages/click/_winconsole.py | 370 - .../Lib/python3.8/site-packages/click/core.py | 2030 ---- .../site-packages/click/decorators.py | 333 - .../site-packages/click/exceptions.py | 253 - .../site-packages/click/formatting.py | 283 - .../python3.8/site-packages/click/globals.py | 47 - .../python3.8/site-packages/click/parser.py | 428 - .../python3.8/site-packages/click/termui.py | 681 -- .../python3.8/site-packages/click/testing.py | 382 - .../python3.8/site-packages/click/types.py | 762 -- .../python3.8/site-packages/click/utils.py | 455 - .../python3.8/site-packages/easy_install.py | 5 - .../python3.8/site-packages/flask/__init__.py | 60 - .../python3.8/site-packages/flask/__main__.py | 15 - .../flask/__pycache__/__init__.cpython-38.pyc | Bin 2148 -> 0 bytes .../flask/__pycache__/__main__.cpython-38.pyc | Bin 440 -> 0 bytes .../flask/__pycache__/_compat.cpython-38.pyc | Bin 4716 -> 0 bytes .../flask/__pycache__/app.cpython-38.pyc | Bin 74831 -> 0 bytes .../__pycache__/blueprints.cpython-38.pyc | Bin 22793 -> 0 bytes .../flask/__pycache__/cli.cpython-38.pyc | Bin 26563 -> 0 bytes .../flask/__pycache__/config.cpython-38.pyc | Bin 10210 -> 0 bytes .../flask/__pycache__/ctx.cpython-38.pyc | Bin 14438 -> 0 bytes .../__pycache__/debughelpers.cpython-38.pyc | Bin 6661 -> 0 bytes .../flask/__pycache__/globals.cpython-38.pyc | Bin 1761 -> 0 bytes .../flask/__pycache__/helpers.cpython-38.pyc | Bin 34816 -> 0 bytes .../flask/__pycache__/logging.cpython-38.pyc | Bin 3175 -> 0 bytes .../flask/__pycache__/sessions.cpython-38.pyc | Bin 12319 -> 0 bytes .../flask/__pycache__/signals.cpython-38.pyc | Bin 2431 -> 0 bytes .../__pycache__/templating.cpython-38.pyc | Bin 5052 -> 0 bytes .../flask/__pycache__/testing.cpython-38.pyc | Bin 8783 -> 0 bytes .../flask/__pycache__/views.cpython-38.pyc | Bin 4836 -> 0 bytes .../flask/__pycache__/wrappers.cpython-38.pyc | Bin 4360 -> 0 bytes .../python3.8/site-packages/flask/_compat.py | 145 - .../Lib/python3.8/site-packages/flask/app.py | 2467 ----- .../site-packages/flask/blueprints.py | 569 -- .../Lib/python3.8/site-packages/flask/cli.py | 971 -- .../python3.8/site-packages/flask/config.py | 269 - .../Lib/python3.8/site-packages/flask/ctx.py | 475 - .../site-packages/flask/debughelpers.py | 183 - .../python3.8/site-packages/flask/globals.py | 62 - .../python3.8/site-packages/flask/helpers.py | 1155 --- .../site-packages/flask/json/__init__.py | 376 - .../json/__pycache__/__init__.cpython-38.pyc | Bin 11666 -> 0 bytes .../flask/json/__pycache__/tag.cpython-38.pyc | Bin 10916 -> 0 bytes .../python3.8/site-packages/flask/json/tag.py | 309 - .../python3.8/site-packages/flask/logging.py | 109 - .../python3.8/site-packages/flask/sessions.py | 388 - .../python3.8/site-packages/flask/signals.py | 65 - .../site-packages/flask/templating.py | 155 - .../python3.8/site-packages/flask/testing.py | 283 - .../python3.8/site-packages/flask/views.py | 163 - .../python3.8/site-packages/flask/wrappers.py | 137 - .../idna-2.9.dist-info/INSTALLER | 1 - .../idna-2.9.dist-info/LICENSE.rst | 34 - .../site-packages/idna-2.9.dist-info/METADATA | 243 - .../site-packages/idna-2.9.dist-info/RECORD | 22 - .../site-packages/idna-2.9.dist-info/WHEEL | 6 - .../idna-2.9.dist-info/top_level.txt | 1 - .../python3.8/site-packages/idna/__init__.py | 2 - .../idna/__pycache__/__init__.cpython-38.pyc | Bin 259 -> 0 bytes .../idna/__pycache__/codec.cpython-38.pyc | Bin 2913 -> 0 bytes .../idna/__pycache__/compat.cpython-38.pyc | Bin 631 -> 0 bytes .../idna/__pycache__/core.cpython-38.pyc | Bin 9128 -> 0 bytes .../idna/__pycache__/idnadata.cpython-38.pyc | Bin 21537 -> 0 bytes .../idna/__pycache__/intranges.cpython-38.pyc | Bin 1811 -> 0 bytes .../__pycache__/package_data.cpython-38.pyc | Bin 213 -> 0 bytes .../idna/__pycache__/uts46data.cpython-38.pyc | Bin 176739 -> 0 bytes .../Lib/python3.8/site-packages/idna/codec.py | 118 - .../python3.8/site-packages/idna/compat.py | 12 - .../Lib/python3.8/site-packages/idna/core.py | 398 - .../python3.8/site-packages/idna/idnadata.py | 1991 ---- .../python3.8/site-packages/idna/intranges.py | 53 - .../site-packages/idna/package_data.py | 2 - .../python3.8/site-packages/idna/uts46data.py | 8317 ----------------- .../isort-4.3.21.dist-info/INSTALLER | 1 - .../isort-4.3.21.dist-info/LICENSE | 21 - .../isort-4.3.21.dist-info/METADATA | 697 -- .../isort-4.3.21.dist-info/RECORD | 30 - .../isort-4.3.21.dist-info/WHEEL | 6 - .../isort-4.3.21.dist-info/entry_points.txt | 9 - .../isort-4.3.21.dist-info/top_level.txt | 1 - .../python3.8/site-packages/isort/__init__.py | 28 - .../python3.8/site-packages/isort/__main__.py | 9 - .../isort/__pycache__/__init__.cpython-38.pyc | Bin 1621 -> 0 bytes .../isort/__pycache__/__main__.cpython-38.pyc | Bin 372 -> 0 bytes .../isort/__pycache__/finders.cpython-38.pyc | Bin 12069 -> 0 bytes .../isort/__pycache__/hooks.cpython-38.pyc | Bin 3250 -> 0 bytes .../isort/__pycache__/isort.cpython-38.pyc | Bin 29942 -> 0 bytes .../isort/__pycache__/main.cpython-38.pyc | Bin 16873 -> 0 bytes .../isort/__pycache__/natural.cpython-38.pyc | Bin 2350 -> 0 bytes .../__pycache__/pie_slice.cpython-38.pyc | Bin 5088 -> 0 bytes .../__pycache__/pylama_isort.cpython-38.pyc | Bin 1071 -> 0 bytes .../isort/__pycache__/settings.cpython-38.pyc | Bin 12822 -> 0 bytes .../isort/__pycache__/utils.cpython-38.pyc | Bin 1628 -> 0 bytes .../python3.8/site-packages/isort/finders.py | 382 - .../python3.8/site-packages/isort/hooks.py | 91 - .../python3.8/site-packages/isort/isort.py | 1060 --- .../Lib/python3.8/site-packages/isort/main.py | 401 - .../python3.8/site-packages/isort/natural.py | 47 - .../site-packages/isort/pie_slice.py | 154 - .../site-packages/isort/pylama_isort.py | 29 - .../python3.8/site-packages/isort/settings.py | 356 - .../python3.8/site-packages/isort/utils.py | 53 - .../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-38.pyc | Bin 1034 -> 0 bytes .../__pycache__/_compat.cpython-38.pyc | Bin 1196 -> 0 bytes .../__pycache__/_json.cpython-38.pyc | Bin 895 -> 0 bytes .../__pycache__/encoding.cpython-38.pyc | Bin 1681 -> 0 bytes .../__pycache__/exc.cpython-38.pyc | Bin 3242 -> 0 bytes .../__pycache__/jws.cpython-38.pyc | Bin 6805 -> 0 bytes .../__pycache__/serializer.cpython-38.pyc | Bin 8151 -> 0 bytes .../__pycache__/signer.cpython-38.pyc | Bin 5877 -> 0 bytes .../__pycache__/timed.cpython-38.pyc | Bin 4647 -> 0 bytes .../__pycache__/url_safe.cpython-38.pyc | Bin 2583 -> 0 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 | 44 - .../__pycache__/__init__.cpython-38.pyc | Bin 1831 -> 0 bytes .../jinja2/__pycache__/_compat.cpython-38.pyc | Bin 3926 -> 0 bytes .../__pycache__/_identifier.cpython-38.pyc | Bin 1914 -> 0 bytes .../__pycache__/asyncfilters.cpython-38.pyc | Bin 4877 -> 0 bytes .../__pycache__/asyncsupport.cpython-38.pyc | Bin 8243 -> 0 bytes .../jinja2/__pycache__/bccache.cpython-38.pyc | Bin 12261 -> 0 bytes .../__pycache__/compiler.cpython-38.pyc | Bin 48371 -> 0 bytes .../__pycache__/constants.cpython-38.pyc | Bin 1558 -> 0 bytes .../jinja2/__pycache__/debug.cpython-38.pyc | Bin 5198 -> 0 bytes .../__pycache__/defaults.cpython-38.pyc | Bin 1134 -> 0 bytes .../__pycache__/environment.cpython-38.pyc | Bin 44031 -> 0 bytes .../__pycache__/exceptions.cpython-38.pyc | Bin 5662 -> 0 bytes .../jinja2/__pycache__/ext.cpython-38.pyc | Bin 21526 -> 0 bytes .../jinja2/__pycache__/filters.cpython-38.pyc | Bin 39832 -> 0 bytes .../__pycache__/idtracking.cpython-38.pyc | Bin 9892 -> 0 bytes .../jinja2/__pycache__/lexer.cpython-38.pyc | Bin 19406 -> 0 bytes .../jinja2/__pycache__/loaders.cpython-38.pyc | Bin 17019 -> 0 bytes .../jinja2/__pycache__/meta.cpython-38.pyc | Bin 3510 -> 0 bytes .../__pycache__/nativetypes.cpython-38.pyc | Bin 3944 -> 0 bytes .../jinja2/__pycache__/nodes.cpython-38.pyc | Bin 35437 -> 0 bytes .../__pycache__/optimizer.cpython-38.pyc | Bin 1676 -> 0 bytes .../jinja2/__pycache__/parser.cpython-38.pyc | Bin 24993 -> 0 bytes .../jinja2/__pycache__/runtime.cpython-38.pyc | Bin 27669 -> 0 bytes .../jinja2/__pycache__/sandbox.cpython-38.pyc | Bin 14153 -> 0 bytes .../jinja2/__pycache__/tests.cpython-38.pyc | Bin 5391 -> 0 bytes .../jinja2/__pycache__/utils.cpython-38.pyc | Bin 22868 -> 0 bytes .../jinja2/__pycache__/visitor.cpython-38.pyc | Bin 3319 -> 0 bytes .../python3.8/site-packages/jinja2/_compat.py | 132 - .../site-packages/jinja2/_identifier.py | 6 - .../site-packages/jinja2/asyncfilters.py | 158 - .../site-packages/jinja2/asyncsupport.py | 264 - .../python3.8/site-packages/jinja2/bccache.py | 350 - .../site-packages/jinja2/compiler.py | 1843 ---- .../site-packages/jinja2/constants.py | 21 - .../python3.8/site-packages/jinja2/debug.py | 268 - .../site-packages/jinja2/defaults.py | 44 - .../site-packages/jinja2/environment.py | 1362 --- .../site-packages/jinja2/exceptions.py | 177 - .../Lib/python3.8/site-packages/jinja2/ext.py | 704 -- .../python3.8/site-packages/jinja2/filters.py | 1382 --- .../site-packages/jinja2/idtracking.py | 290 - .../python3.8/site-packages/jinja2/lexer.py | 848 -- .../python3.8/site-packages/jinja2/loaders.py | 504 - .../python3.8/site-packages/jinja2/meta.py | 101 - .../site-packages/jinja2/nativetypes.py | 94 - .../python3.8/site-packages/jinja2/nodes.py | 1088 --- .../site-packages/jinja2/optimizer.py | 41 - .../python3.8/site-packages/jinja2/parser.py | 939 -- .../python3.8/site-packages/jinja2/runtime.py | 1011 -- .../python3.8/site-packages/jinja2/sandbox.py | 510 - .../python3.8/site-packages/jinja2/tests.py | 215 - .../python3.8/site-packages/jinja2/utils.py | 732 -- .../python3.8/site-packages/jinja2/visitor.py | 81 - .../AUTHORS.rst | 10 - .../INSTALLER | 1 - .../lazy_object_proxy-1.4.3.dist-info/LICENSE | 21 - .../METADATA | 166 - .../lazy_object_proxy-1.4.3.dist-info/RECORD | 20 - .../lazy_object_proxy-1.4.3.dist-info/WHEEL | 5 - .../top_level.txt | 1 - .../lazy_object_proxy/__init__.py | 23 - .../__pycache__/__init__.cpython-38.pyc | Bin 588 -> 0 bytes .../__pycache__/_version.cpython-38.pyc | Bin 233 -> 0 bytes .../__pycache__/compat.cpython-38.pyc | Bin 469 -> 0 bytes .../__pycache__/simple.cpython-38.pyc | Bin 7836 -> 0 bytes .../__pycache__/slots.cpython-38.pyc | Bin 15284 -> 0 bytes .../__pycache__/utils.cpython-38.pyc | Bin 828 -> 0 bytes .../lazy_object_proxy/_version.py | 4 - .../cext.cpython-38-darwin.so | Bin 35704 -> 0 bytes .../site-packages/lazy_object_proxy/compat.py | 9 - .../site-packages/lazy_object_proxy/simple.py | 246 - .../site-packages/lazy_object_proxy/slots.py | 414 - .../site-packages/lazy_object_proxy/utils.py | 13 - .../site-packages/markupsafe/__init__.py | 327 - .../__pycache__/__init__.cpython-38.pyc | Bin 10986 -> 0 bytes .../__pycache__/_compat.cpython-38.pyc | Bin 795 -> 0 bytes .../__pycache__/_constants.cpython-38.pyc | Bin 4291 -> 0 bytes .../__pycache__/_native.cpython-38.pyc | Bin 2169 -> 0 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 - .../markupsafe/_speedups.cpython-38-darwin.so | Bin 14744 -> 0 bytes .../mccabe-0.6.1.dist-info/DESCRIPTION.rst | 152 - .../mccabe-0.6.1.dist-info/INSTALLER | 1 - .../mccabe-0.6.1.dist-info/METADATA | 178 - .../mccabe-0.6.1.dist-info/RECORD | 10 - .../mccabe-0.6.1.dist-info/WHEEL | 6 - .../mccabe-0.6.1.dist-info/entry_points.txt | 3 - .../mccabe-0.6.1.dist-info/metadata.json | 1 - .../mccabe-0.6.1.dist-info/top_level.txt | 1 - .../Lib/python3.8/site-packages/mccabe.py | 347 - .../pip-19.2.3.dist-info/INSTALLER | 1 - .../pip-19.2.3.dist-info/LICENSE.txt | 20 - .../pip-19.2.3.dist-info/METADATA | 81 - .../site-packages/pip-19.2.3.dist-info/RECORD | 668 -- .../site-packages/pip-19.2.3.dist-info/WHEEL | 6 - .../pip-19.2.3.dist-info/entry_points.txt | 5 - .../pip-19.2.3.dist-info/top_level.txt | 1 - .../python3.8/site-packages/pip/__init__.py | 1 - .../python3.8/site-packages/pip/__main__.py | 19 - .../pip/__pycache__/__init__.cpython-38.pyc | Bin 210 -> 0 bytes .../pip/__pycache__/__main__.cpython-38.pyc | Bin 462 -> 0 bytes .../site-packages/pip/_internal/__init__.py | 77 - .../__pycache__/__init__.cpython-38.pyc | Bin 1755 -> 0 bytes .../__pycache__/build_env.cpython-38.pyc | Bin 7531 -> 0 bytes .../__pycache__/cache.cpython-38.pyc | Bin 7143 -> 0 bytes .../__pycache__/configuration.cpython-38.pyc | Bin 10694 -> 0 bytes .../__pycache__/download.cpython-38.pyc | Bin 25981 -> 0 bytes .../__pycache__/exceptions.cpython-38.pyc | Bin 12542 -> 0 bytes .../__pycache__/index.cpython-38.pyc | Bin 37782 -> 0 bytes .../__pycache__/legacy_resolve.cpython-38.pyc | Bin 10601 -> 0 bytes .../__pycache__/locations.cpython-38.pyc | Bin 2990 -> 0 bytes .../__pycache__/pep425tags.cpython-38.pyc | Bin 8389 -> 0 bytes .../__pycache__/pyproject.cpython-38.pyc | Bin 3216 -> 0 bytes .../__pycache__/wheel.cpython-38.pyc | Bin 27542 -> 0 bytes .../site-packages/pip/_internal/build_env.py | 218 - .../site-packages/pip/_internal/cache.py | 224 - .../pip/_internal/cli/__init__.py | 4 - .../cli/__pycache__/__init__.cpython-38.pyc | Bin 285 -> 0 bytes .../__pycache__/autocompletion.cpython-38.pyc | Bin 5143 -> 0 bytes .../__pycache__/base_command.cpython-38.pyc | Bin 8318 -> 0 bytes .../cli/__pycache__/cmdoptions.cpython-38.pyc | Bin 20060 -> 0 bytes .../__pycache__/main_parser.cpython-38.pyc | Bin 2223 -> 0 bytes .../cli/__pycache__/parser.cpython-38.pyc | Bin 9026 -> 0 bytes .../__pycache__/status_codes.cpython-38.pyc | Bin 414 -> 0 bytes .../pip/_internal/cli/autocompletion.py | 152 - .../pip/_internal/cli/base_command.py | 346 - .../pip/_internal/cli/cmdoptions.py | 931 -- .../pip/_internal/cli/main_parser.py | 98 - .../site-packages/pip/_internal/cli/parser.py | 261 - .../pip/_internal/cli/status_codes.py | 8 - .../pip/_internal/commands/__init__.py | 81 - .../__pycache__/__init__.cpython-38.pyc | Bin 2604 -> 0 bytes .../commands/__pycache__/check.cpython-38.pyc | Bin 1346 -> 0 bytes .../__pycache__/completion.cpython-38.pyc | Bin 3125 -> 0 bytes .../__pycache__/configuration.cpython-38.pyc | Bin 7189 -> 0 bytes .../commands/__pycache__/debug.cpython-38.pyc | Bin 3397 -> 0 bytes .../__pycache__/download.cpython-38.pyc | Bin 4751 -> 0 bytes .../__pycache__/freeze.cpython-38.pyc | Bin 3044 -> 0 bytes .../commands/__pycache__/hash.cpython-38.pyc | Bin 2094 -> 0 bytes .../commands/__pycache__/help.cpython-38.pyc | Bin 1265 -> 0 bytes .../__pycache__/install.cpython-38.pyc | Bin 13092 -> 0 bytes .../commands/__pycache__/list.cpython-38.pyc | Bin 9033 -> 0 bytes .../__pycache__/search.cpython-38.pyc | Bin 4480 -> 0 bytes .../commands/__pycache__/show.cpython-38.pyc | Bin 5877 -> 0 bytes .../__pycache__/uninstall.cpython-38.pyc | Bin 2727 -> 0 bytes .../commands/__pycache__/wheel.cpython-38.pyc | Bin 4933 -> 0 bytes .../pip/_internal/commands/check.py | 41 - .../pip/_internal/commands/completion.py | 94 - .../pip/_internal/commands/configuration.py | 258 - .../pip/_internal/commands/debug.py | 114 - .../pip/_internal/commands/download.py | 168 - .../pip/_internal/commands/freeze.py | 101 - .../pip/_internal/commands/hash.py | 57 - .../pip/_internal/commands/help.py | 37 - .../pip/_internal/commands/install.py | 580 -- .../pip/_internal/commands/list.py | 311 - .../pip/_internal/commands/search.py | 139 - .../pip/_internal/commands/show.py | 168 - .../pip/_internal/commands/uninstall.py | 78 - .../pip/_internal/commands/wheel.py | 181 - .../pip/_internal/configuration.py | 417 - .../pip/_internal/distributions/__init__.py | 23 - .../__pycache__/__init__.cpython-38.pyc | Bin 874 -> 0 bytes .../__pycache__/base.cpython-38.pyc | Bin 1669 -> 0 bytes .../__pycache__/installed.cpython-38.pyc | Bin 1009 -> 0 bytes .../__pycache__/source.cpython-38.pyc | Bin 3106 -> 0 bytes .../__pycache__/wheel.cpython-38.pyc | Bin 1073 -> 0 bytes .../pip/_internal/distributions/base.py | 33 - .../pip/_internal/distributions/installed.py | 15 - .../pip/_internal/distributions/source.py | 80 - .../pip/_internal/distributions/wheel.py | 17 - .../site-packages/pip/_internal/download.py | 1177 --- .../site-packages/pip/_internal/exceptions.py | 305 - .../site-packages/pip/_internal/index.py | 1508 --- .../pip/_internal/legacy_resolve.py | 457 - .../site-packages/pip/_internal/locations.py | 142 - .../pip/_internal/models/__init__.py | 2 - .../__pycache__/__init__.cpython-38.pyc | Bin 273 -> 0 bytes .../__pycache__/candidate.cpython-38.pyc | Bin 1507 -> 0 bytes .../__pycache__/format_control.cpython-38.pyc | Bin 2301 -> 0 bytes .../models/__pycache__/index.cpython-38.pyc | Bin 1195 -> 0 bytes .../models/__pycache__/link.cpython-38.pyc | Bin 6334 -> 0 bytes .../__pycache__/search_scope.cpython-38.pyc | Bin 3304 -> 0 bytes .../selection_prefs.cpython-38.pyc | Bin 1645 -> 0 bytes .../__pycache__/target_python.cpython-38.pyc | Bin 3249 -> 0 bytes .../pip/_internal/models/candidate.py | 36 - .../pip/_internal/models/format_control.py | 73 - .../pip/_internal/models/index.py | 31 - .../pip/_internal/models/link.py | 213 - .../pip/_internal/models/search_scope.py | 113 - .../pip/_internal/models/selection_prefs.py | 47 - .../pip/_internal/models/target_python.py | 106 - .../pip/_internal/operations/__init__.py | 0 .../__pycache__/__init__.cpython-38.pyc | Bin 209 -> 0 bytes .../__pycache__/check.cpython-38.pyc | Bin 3715 -> 0 bytes .../__pycache__/freeze.cpython-38.pyc | Bin 5779 -> 0 bytes .../__pycache__/prepare.cpython-38.pyc | Bin 5796 -> 0 bytes .../pip/_internal/operations/check.py | 159 - .../pip/_internal/operations/freeze.py | 253 - .../pip/_internal/operations/prepare.py | 287 - .../site-packages/pip/_internal/pep425tags.py | 384 - .../site-packages/pip/_internal/pyproject.py | 171 - .../pip/_internal/req/__init__.py | 78 - .../req/__pycache__/__init__.cpython-38.pyc | Bin 1749 -> 0 bytes .../__pycache__/constructors.cpython-38.pyc | Bin 8021 -> 0 bytes .../req/__pycache__/req_file.cpython-38.pyc | Bin 9426 -> 0 bytes .../__pycache__/req_install.cpython-38.pyc | Bin 25779 -> 0 bytes .../req/__pycache__/req_set.cpython-38.pyc | Bin 5742 -> 0 bytes .../__pycache__/req_tracker.cpython-38.pyc | Bin 3274 -> 0 bytes .../__pycache__/req_uninstall.cpython-38.pyc | Bin 17401 -> 0 bytes .../pip/_internal/req/constructors.py | 349 - .../pip/_internal/req/req_file.py | 399 - .../pip/_internal/req/req_install.py | 1035 -- .../pip/_internal/req/req_set.py | 193 - .../pip/_internal/req/req_tracker.py | 96 - .../pip/_internal/req/req_uninstall.py | 633 -- .../pip/_internal/utils/__init__.py | 0 .../utils/__pycache__/__init__.cpython-38.pyc | Bin 204 -> 0 bytes .../utils/__pycache__/appdirs.cpython-38.pyc | Bin 8083 -> 0 bytes .../utils/__pycache__/compat.cpython-38.pyc | Bin 6979 -> 0 bytes .../__pycache__/deprecation.cpython-38.pyc | Bin 2875 -> 0 bytes .../utils/__pycache__/encoding.cpython-38.pyc | Bin 1296 -> 0 bytes .../__pycache__/filesystem.cpython-38.pyc | Bin 675 -> 0 bytes .../utils/__pycache__/glibc.cpython-38.pyc | Bin 2306 -> 0 bytes .../utils/__pycache__/hashes.cpython-38.pyc | Bin 4193 -> 0 bytes .../utils/__pycache__/logging.cpython-38.pyc | Bin 9169 -> 0 bytes .../__pycache__/marker_files.cpython-38.pyc | Bin 815 -> 0 bytes .../utils/__pycache__/misc.cpython-38.pyc | Bin 29900 -> 0 bytes .../utils/__pycache__/models.cpython-38.pyc | Bin 1973 -> 0 bytes .../utils/__pycache__/outdated.cpython-38.pyc | Bin 4260 -> 0 bytes .../__pycache__/packaging.cpython-38.pyc | Bin 2657 -> 0 bytes .../setuptools_build.cpython-38.pyc | Bin 1066 -> 0 bytes .../utils/__pycache__/temp_dir.cpython-38.pyc | Bin 4924 -> 0 bytes .../utils/__pycache__/typing.cpython-38.pyc | Bin 1334 -> 0 bytes .../utils/__pycache__/ui.cpython-38.pyc | Bin 11859 -> 0 bytes .../__pycache__/virtualenv.cpython-38.pyc | Bin 927 -> 0 bytes .../pip/_internal/utils/appdirs.py | 268 - .../pip/_internal/utils/compat.py | 293 - .../pip/_internal/utils/deprecation.py | 100 - .../pip/_internal/utils/encoding.py | 39 - .../pip/_internal/utils/filesystem.py | 30 - .../pip/_internal/utils/glibc.py | 120 - .../pip/_internal/utils/hashes.py | 128 - .../pip/_internal/utils/logging.py | 394 - .../pip/_internal/utils/marker_files.py | 20 - .../site-packages/pip/_internal/utils/misc.py | 1201 --- .../pip/_internal/utils/models.py | 40 - .../pip/_internal/utils/outdated.py | 178 - .../pip/_internal/utils/packaging.py | 94 - .../pip/_internal/utils/setuptools_build.py | 36 - .../pip/_internal/utils/temp_dir.py | 155 - .../pip/_internal/utils/typing.py | 29 - .../site-packages/pip/_internal/utils/ui.py | 424 - .../pip/_internal/utils/virtualenv.py | 34 - .../pip/_internal/vcs/__init__.py | 12 - .../vcs/__pycache__/__init__.cpython-38.pyc | Bin 480 -> 0 bytes .../vcs/__pycache__/bazaar.cpython-38.pyc | Bin 3456 -> 0 bytes .../vcs/__pycache__/git.cpython-38.pyc | Bin 9012 -> 0 bytes .../vcs/__pycache__/mercurial.cpython-38.pyc | Bin 3743 -> 0 bytes .../vcs/__pycache__/subversion.cpython-38.pyc | Bin 8396 -> 0 bytes .../__pycache__/versioncontrol.cpython-38.pyc | Bin 17126 -> 0 bytes .../site-packages/pip/_internal/vcs/bazaar.py | 101 - .../site-packages/pip/_internal/vcs/git.py | 358 - .../pip/_internal/vcs/mercurial.py | 103 - .../pip/_internal/vcs/subversion.py | 314 - .../pip/_internal/vcs/versioncontrol.py | 600 -- .../site-packages/pip/_internal/wheel.py | 1125 --- .../site-packages/pip/_vendor/__init__.py | 109 - .../__pycache__/__init__.cpython-38.pyc | Bin 2875 -> 0 bytes .../__pycache__/appdirs.cpython-38.pyc | Bin 20486 -> 0 bytes .../_vendor/__pycache__/distro.cpython-38.pyc | Bin 36590 -> 0 bytes .../__pycache__/ipaddress.cpython-38.pyc | Bin 64831 -> 0 bytes .../__pycache__/pyparsing.cpython-38.pyc | Bin 220254 -> 0 bytes .../__pycache__/retrying.cpython-38.pyc | Bin 8055 -> 0 bytes .../_vendor/__pycache__/six.cpython-38.pyc | Bin 26445 -> 0 bytes .../site-packages/pip/_vendor/appdirs.py | 604 -- .../pip/_vendor/cachecontrol/__init__.py | 11 - .../__pycache__/__init__.cpython-38.pyc | Bin 562 -> 0 bytes .../__pycache__/_cmd.cpython-38.pyc | Bin 1589 -> 0 bytes .../__pycache__/adapter.cpython-38.pyc | Bin 3088 -> 0 bytes .../__pycache__/cache.cpython-38.pyc | Bin 1795 -> 0 bytes .../__pycache__/compat.cpython-38.pyc | Bin 769 -> 0 bytes .../__pycache__/controller.cpython-38.pyc | Bin 7709 -> 0 bytes .../__pycache__/filewrapper.cpython-38.pyc | Bin 2188 -> 0 bytes .../__pycache__/heuristics.cpython-38.pyc | Bin 4747 -> 0 bytes .../__pycache__/serialize.cpython-38.pyc | Bin 4260 -> 0 bytes .../__pycache__/wrapper.cpython-38.pyc | Bin 678 -> 0 bytes .../pip/_vendor/cachecontrol/_cmd.py | 57 - .../pip/_vendor/cachecontrol/adapter.py | 133 - .../pip/_vendor/cachecontrol/cache.py | 39 - .../_vendor/cachecontrol/caches/__init__.py | 2 - .../__pycache__/__init__.cpython-38.pyc | Bin 306 -> 0 bytes .../__pycache__/file_cache.cpython-38.pyc | Bin 3304 -> 0 bytes .../__pycache__/redis_cache.cpython-38.pyc | Bin 1578 -> 0 bytes .../_vendor/cachecontrol/caches/file_cache.py | 146 - .../cachecontrol/caches/redis_cache.py | 33 - .../pip/_vendor/cachecontrol/compat.py | 29 - .../pip/_vendor/cachecontrol/controller.py | 367 - .../pip/_vendor/cachecontrol/filewrapper.py | 80 - .../pip/_vendor/cachecontrol/heuristics.py | 135 - .../pip/_vendor/cachecontrol/serialize.py | 186 - .../pip/_vendor/cachecontrol/wrapper.py | 29 - .../pip/_vendor/certifi/__init__.py | 3 - .../pip/_vendor/certifi/__main__.py | 2 - .../__pycache__/__init__.cpython-38.pyc | Bin 269 -> 0 bytes .../__pycache__/__main__.cpython-38.pyc | Bin 272 -> 0 bytes .../certifi/__pycache__/core.cpython-38.pyc | Bin 485 -> 0 bytes .../pip/_vendor/certifi/cacert.pem | 4618 --------- .../site-packages/pip/_vendor/certifi/core.py | 15 - .../pip/_vendor/chardet/__init__.py | 39 - .../__pycache__/__init__.cpython-38.pyc | Bin 862 -> 0 bytes .../__pycache__/big5freq.cpython-38.pyc | Bin 27191 -> 0 bytes .../__pycache__/big5prober.cpython-38.pyc | Bin 1146 -> 0 bytes .../chardistribution.cpython-38.pyc | Bin 6232 -> 0 bytes .../charsetgroupprober.cpython-38.pyc | Bin 2263 -> 0 bytes .../__pycache__/charsetprober.cpython-38.pyc | Bin 3495 -> 0 bytes .../codingstatemachine.cpython-38.pyc | Bin 2922 -> 0 bytes .../chardet/__pycache__/compat.cpython-38.pyc | Bin 367 -> 0 bytes .../__pycache__/cp949prober.cpython-38.pyc | Bin 1153 -> 0 bytes .../chardet/__pycache__/enums.cpython-38.pyc | Bin 2660 -> 0 bytes .../__pycache__/escprober.cpython-38.pyc | Bin 2645 -> 0 bytes .../chardet/__pycache__/escsm.cpython-38.pyc | Bin 7486 -> 0 bytes .../__pycache__/eucjpprober.cpython-38.pyc | Bin 2463 -> 0 bytes .../__pycache__/euckrfreq.cpython-38.pyc | Bin 12075 -> 0 bytes .../__pycache__/euckrprober.cpython-38.pyc | Bin 1154 -> 0 bytes .../__pycache__/euctwfreq.cpython-38.pyc | Bin 27195 -> 0 bytes .../__pycache__/euctwprober.cpython-38.pyc | Bin 1154 -> 0 bytes .../__pycache__/gb2312freq.cpython-38.pyc | Bin 19119 -> 0 bytes .../__pycache__/gb2312prober.cpython-38.pyc | Bin 1162 -> 0 bytes .../__pycache__/hebrewprober.cpython-38.pyc | Bin 3035 -> 0 bytes .../__pycache__/jisfreq.cpython-38.pyc | Bin 22147 -> 0 bytes .../chardet/__pycache__/jpcntx.cpython-38.pyc | Bin 37620 -> 0 bytes .../langbulgarianmodel.cpython-38.pyc | Bin 23644 -> 0 bytes .../langcyrillicmodel.cpython-38.pyc | Bin 29108 -> 0 bytes .../__pycache__/langgreekmodel.cpython-38.pyc | Bin 23602 -> 0 bytes .../langhebrewmodel.cpython-38.pyc | Bin 22229 -> 0 bytes .../langhungarianmodel.cpython-38.pyc | Bin 23633 -> 0 bytes .../__pycache__/langthaimodel.cpython-38.pyc | Bin 22208 -> 0 bytes .../langturkishmodel.cpython-38.pyc | Bin 22231 -> 0 bytes .../__pycache__/latin1prober.cpython-38.pyc | Bin 3415 -> 0 bytes .../mbcharsetprober.cpython-38.pyc | Bin 2278 -> 0 bytes .../mbcsgroupprober.cpython-38.pyc | Bin 1143 -> 0 bytes .../chardet/__pycache__/mbcssm.cpython-38.pyc | Bin 16766 -> 0 bytes .../sbcharsetprober.cpython-38.pyc | Bin 3031 -> 0 bytes .../sbcsgroupprober.cpython-38.pyc | Bin 1641 -> 0 bytes .../__pycache__/sjisprober.cpython-38.pyc | Bin 2499 -> 0 bytes .../universaldetector.cpython-38.pyc | Bin 5843 -> 0 bytes .../__pycache__/utf8prober.cpython-38.pyc | Bin 2004 -> 0 bytes .../__pycache__/version.cpython-38.pyc | Bin 451 -> 0 bytes .../pip/_vendor/chardet/big5freq.py | 386 - .../pip/_vendor/chardet/big5prober.py | 47 - .../pip/_vendor/chardet/chardistribution.py | 233 - .../pip/_vendor/chardet/charsetgroupprober.py | 106 - .../pip/_vendor/chardet/charsetprober.py | 145 - .../pip/_vendor/chardet/cli/__init__.py | 1 - .../cli/__pycache__/__init__.cpython-38.pyc | Bin 208 -> 0 bytes .../cli/__pycache__/chardetect.cpython-38.pyc | Bin 2709 -> 0 bytes .../pip/_vendor/chardet/cli/chardetect.py | 85 - .../pip/_vendor/chardet/codingstatemachine.py | 88 - .../pip/_vendor/chardet/compat.py | 34 - .../pip/_vendor/chardet/cp949prober.py | 49 - .../pip/_vendor/chardet/enums.py | 76 - .../pip/_vendor/chardet/escprober.py | 101 - .../pip/_vendor/chardet/escsm.py | 246 - .../pip/_vendor/chardet/eucjpprober.py | 92 - .../pip/_vendor/chardet/euckrfreq.py | 195 - .../pip/_vendor/chardet/euckrprober.py | 47 - .../pip/_vendor/chardet/euctwfreq.py | 387 - .../pip/_vendor/chardet/euctwprober.py | 46 - .../pip/_vendor/chardet/gb2312freq.py | 283 - .../pip/_vendor/chardet/gb2312prober.py | 46 - .../pip/_vendor/chardet/hebrewprober.py | 292 - .../pip/_vendor/chardet/jisfreq.py | 325 - .../pip/_vendor/chardet/jpcntx.py | 233 - .../pip/_vendor/chardet/langbulgarianmodel.py | 228 - .../pip/_vendor/chardet/langcyrillicmodel.py | 333 - .../pip/_vendor/chardet/langgreekmodel.py | 225 - .../pip/_vendor/chardet/langhebrewmodel.py | 200 - .../pip/_vendor/chardet/langhungarianmodel.py | 225 - .../pip/_vendor/chardet/langthaimodel.py | 199 - .../pip/_vendor/chardet/langturkishmodel.py | 193 - .../pip/_vendor/chardet/latin1prober.py | 145 - .../pip/_vendor/chardet/mbcharsetprober.py | 91 - .../pip/_vendor/chardet/mbcsgroupprober.py | 54 - .../pip/_vendor/chardet/mbcssm.py | 572 -- .../pip/_vendor/chardet/sbcharsetprober.py | 132 - .../pip/_vendor/chardet/sbcsgroupprober.py | 73 - .../pip/_vendor/chardet/sjisprober.py | 92 - .../pip/_vendor/chardet/universaldetector.py | 286 - .../pip/_vendor/chardet/utf8prober.py | 82 - .../pip/_vendor/chardet/version.py | 9 - .../pip/_vendor/colorama/__init__.py | 6 - .../__pycache__/__init__.cpython-38.pyc | Bin 456 -> 0 bytes .../colorama/__pycache__/ansi.cpython-38.pyc | Bin 3241 -> 0 bytes .../__pycache__/ansitowin32.cpython-38.pyc | Bin 7750 -> 0 bytes .../__pycache__/initialise.cpython-38.pyc | Bin 1717 -> 0 bytes .../colorama/__pycache__/win32.cpython-38.pyc | Bin 3993 -> 0 bytes .../__pycache__/winterm.cpython-38.pyc | Bin 4677 -> 0 bytes .../pip/_vendor/colorama/ansi.py | 102 - .../pip/_vendor/colorama/ansitowin32.py | 257 - .../pip/_vendor/colorama/initialise.py | 80 - .../pip/_vendor/colorama/win32.py | 152 - .../pip/_vendor/colorama/winterm.py | 169 - .../pip/_vendor/distlib/__init__.py | 23 - .../__pycache__/__init__.cpython-38.pyc | Bin 1077 -> 0 bytes .../distlib/__pycache__/compat.cpython-38.pyc | Bin 32220 -> 0 bytes .../__pycache__/database.cpython-38.pyc | Bin 42117 -> 0 bytes .../distlib/__pycache__/index.cpython-38.pyc | Bin 17424 -> 0 bytes .../__pycache__/locators.cpython-38.pyc | Bin 38322 -> 0 bytes .../__pycache__/manifest.cpython-38.pyc | Bin 10246 -> 0 bytes .../__pycache__/markers.cpython-38.pyc | Bin 4510 -> 0 bytes .../__pycache__/metadata.cpython-38.pyc | Bin 26657 -> 0 bytes .../__pycache__/resources.cpython-38.pyc | Bin 11021 -> 0 bytes .../__pycache__/scripts.cpython-38.pyc | Bin 10803 -> 0 bytes .../distlib/__pycache__/util.cpython-38.pyc | Bin 48154 -> 0 bytes .../__pycache__/version.cpython-38.pyc | Bin 20380 -> 0 bytes .../distlib/__pycache__/wheel.cpython-38.pyc | Bin 25567 -> 0 bytes .../pip/_vendor/distlib/_backport/__init__.py | 6 - .../__pycache__/__init__.cpython-38.pyc | Bin 496 -> 0 bytes .../_backport/__pycache__/misc.cpython-38.pyc | Bin 1107 -> 0 bytes .../__pycache__/shutil.cpython-38.pyc | Bin 21500 -> 0 bytes .../__pycache__/sysconfig.cpython-38.pyc | Bin 15899 -> 0 bytes .../__pycache__/tarfile.cpython-38.pyc | Bin 62756 -> 0 bytes .../pip/_vendor/distlib/_backport/misc.py | 41 - .../pip/_vendor/distlib/_backport/shutil.py | 761 -- .../_vendor/distlib/_backport/sysconfig.cfg | 84 - .../_vendor/distlib/_backport/sysconfig.py | 788 -- .../pip/_vendor/distlib/_backport/tarfile.py | 2607 ------ .../pip/_vendor/distlib/compat.py | 1120 --- .../pip/_vendor/distlib/database.py | 1339 --- .../pip/_vendor/distlib/index.py | 516 - .../pip/_vendor/distlib/locators.py | 1295 --- .../pip/_vendor/distlib/manifest.py | 393 - .../pip/_vendor/distlib/markers.py | 131 - .../pip/_vendor/distlib/metadata.py | 1096 --- .../pip/_vendor/distlib/resources.py | 355 - .../pip/_vendor/distlib/scripts.py | 403 - .../site-packages/pip/_vendor/distlib/t32.exe | Bin 92672 -> 0 bytes .../site-packages/pip/_vendor/distlib/t64.exe | Bin 102912 -> 0 bytes .../site-packages/pip/_vendor/distlib/util.py | 1760 ---- .../pip/_vendor/distlib/version.py | 736 -- .../site-packages/pip/_vendor/distlib/w32.exe | Bin 89088 -> 0 bytes .../site-packages/pip/_vendor/distlib/w64.exe | Bin 99840 -> 0 bytes .../pip/_vendor/distlib/wheel.py | 1004 -- .../site-packages/pip/_vendor/distro.py | 1216 --- .../pip/_vendor/html5lib/__init__.py | 35 - .../__pycache__/__init__.cpython-38.pyc | Bin 1329 -> 0 bytes .../__pycache__/_ihatexml.cpython-38.pyc | Bin 13801 -> 0 bytes .../__pycache__/_inputstream.cpython-38.pyc | Bin 21953 -> 0 bytes .../__pycache__/_tokenizer.cpython-38.pyc | Bin 39671 -> 0 bytes .../__pycache__/_utils.cpython-38.pyc | Bin 3359 -> 0 bytes .../__pycache__/constants.cpython-38.pyc | Bin 66366 -> 0 bytes .../__pycache__/html5parser.cpython-38.pyc | Bin 95188 -> 0 bytes .../__pycache__/serializer.cpython-38.pyc | Bin 10837 -> 0 bytes .../pip/_vendor/html5lib/_ihatexml.py | 288 - .../pip/_vendor/html5lib/_inputstream.py | 923 -- .../pip/_vendor/html5lib/_tokenizer.py | 1721 ---- .../pip/_vendor/html5lib/_trie/__init__.py | 14 - .../_trie/__pycache__/__init__.cpython-38.pyc | Bin 438 -> 0 bytes .../_trie/__pycache__/_base.cpython-38.pyc | Bin 1617 -> 0 bytes .../_trie/__pycache__/datrie.cpython-38.pyc | Bin 2050 -> 0 bytes .../_trie/__pycache__/py.cpython-38.pyc | Bin 2274 -> 0 bytes .../pip/_vendor/html5lib/_trie/_base.py | 40 - .../pip/_vendor/html5lib/_trie/datrie.py | 44 - .../pip/_vendor/html5lib/_trie/py.py | 67 - .../pip/_vendor/html5lib/_utils.py | 124 - .../pip/_vendor/html5lib/constants.py | 2947 ------ .../pip/_vendor/html5lib/filters/__init__.py | 0 .../__pycache__/__init__.cpython-38.pyc | Bin 213 -> 0 bytes .../alphabeticalattributes.cpython-38.pyc | Bin 1335 -> 0 bytes .../filters/__pycache__/base.cpython-38.pyc | Bin 883 -> 0 bytes .../inject_meta_charset.cpython-38.pyc | Bin 1889 -> 0 bytes .../filters/__pycache__/lint.cpython-38.pyc | Bin 2647 -> 0 bytes .../__pycache__/optionaltags.cpython-38.pyc | Bin 2776 -> 0 bytes .../__pycache__/sanitizer.cpython-38.pyc | Bin 16318 -> 0 bytes .../__pycache__/whitespace.cpython-38.pyc | Bin 1381 -> 0 bytes .../filters/alphabeticalattributes.py | 29 - .../pip/_vendor/html5lib/filters/base.py | 12 - .../html5lib/filters/inject_meta_charset.py | 73 - .../pip/_vendor/html5lib/filters/lint.py | 93 - .../_vendor/html5lib/filters/optionaltags.py | 207 - .../pip/_vendor/html5lib/filters/sanitizer.py | 896 -- .../_vendor/html5lib/filters/whitespace.py | 38 - .../pip/_vendor/html5lib/html5parser.py | 2791 ------ .../pip/_vendor/html5lib/serializer.py | 409 - .../_vendor/html5lib/treeadapters/__init__.py | 30 - .../__pycache__/__init__.cpython-38.pyc | Bin 952 -> 0 bytes .../__pycache__/genshi.cpython-38.pyc | Bin 1558 -> 0 bytes .../__pycache__/sax.cpython-38.pyc | Bin 1493 -> 0 bytes .../_vendor/html5lib/treeadapters/genshi.py | 54 - .../pip/_vendor/html5lib/treeadapters/sax.py | 50 - .../_vendor/html5lib/treebuilders/__init__.py | 88 - .../__pycache__/__init__.cpython-38.pyc | Bin 3337 -> 0 bytes .../__pycache__/base.cpython-38.pyc | Bin 11363 -> 0 bytes .../__pycache__/dom.cpython-38.pyc | Bin 9470 -> 0 bytes .../__pycache__/etree.cpython-38.pyc | Bin 11857 -> 0 bytes .../__pycache__/etree_lxml.cpython-38.pyc | Bin 11825 -> 0 bytes .../pip/_vendor/html5lib/treebuilders/base.py | 417 - .../pip/_vendor/html5lib/treebuilders/dom.py | 239 - .../_vendor/html5lib/treebuilders/etree.py | 340 - .../html5lib/treebuilders/etree_lxml.py | 366 - .../_vendor/html5lib/treewalkers/__init__.py | 154 - .../__pycache__/__init__.cpython-38.pyc | Bin 4018 -> 0 bytes .../__pycache__/base.cpython-38.pyc | Bin 7018 -> 0 bytes .../__pycache__/dom.cpython-38.pyc | Bin 1747 -> 0 bytes .../__pycache__/etree.cpython-38.pyc | Bin 3532 -> 0 bytes .../__pycache__/etree_lxml.cpython-38.pyc | Bin 6631 -> 0 bytes .../__pycache__/genshi.cpython-38.pyc | Bin 1905 -> 0 bytes .../pip/_vendor/html5lib/treewalkers/base.py | 252 - .../pip/_vendor/html5lib/treewalkers/dom.py | 43 - .../pip/_vendor/html5lib/treewalkers/etree.py | 130 - .../html5lib/treewalkers/etree_lxml.py | 213 - .../_vendor/html5lib/treewalkers/genshi.py | 69 - .../pip/_vendor/idna/__init__.py | 2 - .../idna/__pycache__/__init__.cpython-38.pyc | Bin 270 -> 0 bytes .../idna/__pycache__/codec.cpython-38.pyc | Bin 2924 -> 0 bytes .../idna/__pycache__/compat.cpython-38.pyc | Bin 642 -> 0 bytes .../idna/__pycache__/core.cpython-38.pyc | Bin 9058 -> 0 bytes .../idna/__pycache__/idnadata.cpython-38.pyc | Bin 21394 -> 0 bytes .../idna/__pycache__/intranges.cpython-38.pyc | Bin 1822 -> 0 bytes .../__pycache__/package_data.cpython-38.pyc | Bin 224 -> 0 bytes .../idna/__pycache__/uts46data.cpython-38.pyc | Bin 174197 -> 0 bytes .../site-packages/pip/_vendor/idna/codec.py | 118 - .../site-packages/pip/_vendor/idna/compat.py | 12 - .../site-packages/pip/_vendor/idna/core.py | 396 - .../pip/_vendor/idna/idnadata.py | 1979 ---- .../pip/_vendor/idna/intranges.py | 53 - .../pip/_vendor/idna/package_data.py | 2 - .../pip/_vendor/idna/uts46data.py | 8205 ---------------- .../site-packages/pip/_vendor/ipaddress.py | 2419 ----- .../pip/_vendor/lockfile/__init__.py | 347 - .../__pycache__/__init__.cpython-38.pyc | Bin 9817 -> 0 bytes .../__pycache__/linklockfile.cpython-38.pyc | Bin 2325 -> 0 bytes .../__pycache__/mkdirlockfile.cpython-38.pyc | Bin 2693 -> 0 bytes .../__pycache__/pidlockfile.cpython-38.pyc | Bin 4897 -> 0 bytes .../__pycache__/sqlitelockfile.cpython-38.pyc | Bin 3752 -> 0 bytes .../symlinklockfile.cpython-38.pyc | Bin 2214 -> 0 bytes .../pip/_vendor/lockfile/linklockfile.py | 73 - .../pip/_vendor/lockfile/mkdirlockfile.py | 84 - .../pip/_vendor/lockfile/pidlockfile.py | 190 - .../pip/_vendor/lockfile/sqlitelockfile.py | 156 - .../pip/_vendor/lockfile/symlinklockfile.py | 70 - .../pip/_vendor/msgpack/__init__.py | 65 - .../__pycache__/__init__.cpython-38.pyc | Bin 2042 -> 0 bytes .../__pycache__/_version.cpython-38.pyc | Bin 231 -> 0 bytes .../__pycache__/exceptions.cpython-38.pyc | Bin 1865 -> 0 bytes .../__pycache__/fallback.cpython-38.pyc | Bin 26361 -> 0 bytes .../pip/_vendor/msgpack/_version.py | 1 - .../pip/_vendor/msgpack/exceptions.py | 48 - .../pip/_vendor/msgpack/fallback.py | 1027 -- .../pip/_vendor/packaging/__about__.py | 27 - .../pip/_vendor/packaging/__init__.py | 26 - .../__pycache__/__about__.cpython-38.pyc | Bin 746 -> 0 bytes .../__pycache__/__init__.cpython-38.pyc | Bin 584 -> 0 bytes .../__pycache__/_compat.cpython-38.pyc | Bin 1020 -> 0 bytes .../__pycache__/_structures.cpython-38.pyc | Bin 2802 -> 0 bytes .../__pycache__/markers.cpython-38.pyc | Bin 8927 -> 0 bytes .../__pycache__/requirements.cpython-38.pyc | Bin 4025 -> 0 bytes .../__pycache__/specifiers.cpython-38.pyc | Bin 19776 -> 0 bytes .../__pycache__/utils.cpython-38.pyc | Bin 1477 -> 0 bytes .../__pycache__/version.cpython-38.pyc | Bin 12107 -> 0 bytes .../pip/_vendor/packaging/_compat.py | 31 - .../pip/_vendor/packaging/_structures.py | 68 - .../pip/_vendor/packaging/markers.py | 296 - .../pip/_vendor/packaging/requirements.py | 138 - .../pip/_vendor/packaging/specifiers.py | 749 -- .../pip/_vendor/packaging/utils.py | 57 - .../pip/_vendor/packaging/version.py | 420 - .../pip/_vendor/pep517/__init__.py | 4 - .../__pycache__/__init__.cpython-38.pyc | Bin 295 -> 0 bytes .../__pycache__/_in_process.cpython-38.pyc | Bin 5553 -> 0 bytes .../pep517/__pycache__/build.cpython-38.pyc | Bin 2809 -> 0 bytes .../pep517/__pycache__/check.cpython-38.pyc | Bin 4778 -> 0 bytes .../__pycache__/colorlog.cpython-38.pyc | Bin 2965 -> 0 bytes .../pep517/__pycache__/compat.cpython-38.pyc | Bin 1017 -> 0 bytes .../__pycache__/envbuild.cpython-38.pyc | Bin 4297 -> 0 bytes .../__pycache__/wrappers.cpython-38.pyc | Bin 5557 -> 0 bytes .../pip/_vendor/pep517/_in_process.py | 207 - .../site-packages/pip/_vendor/pep517/build.py | 108 - .../site-packages/pip/_vendor/pep517/check.py | 202 - .../pip/_vendor/pep517/colorlog.py | 115 - .../pip/_vendor/pep517/compat.py | 23 - .../pip/_vendor/pep517/envbuild.py | 158 - .../pip/_vendor/pep517/wrappers.py | 163 - .../pip/_vendor/pkg_resources/__init__.py | 3286 ------- .../__pycache__/__init__.cpython-38.pyc | Bin 100197 -> 0 bytes .../__pycache__/py31compat.cpython-38.pyc | Bin 661 -> 0 bytes .../pip/_vendor/pkg_resources/py31compat.py | 23 - .../pip/_vendor/progress/__init__.py | 177 - .../__pycache__/__init__.cpython-38.pyc | Bin 5630 -> 0 bytes .../progress/__pycache__/bar.cpython-38.pyc | Bin 2654 -> 0 bytes .../__pycache__/counter.cpython-38.pyc | Bin 1486 -> 0 bytes .../__pycache__/spinner.cpython-38.pyc | Bin 1413 -> 0 bytes .../site-packages/pip/_vendor/progress/bar.py | 91 - .../pip/_vendor/progress/counter.py | 41 - .../pip/_vendor/progress/spinner.py | 43 - .../site-packages/pip/_vendor/pyparsing.py | 6493 ------------- .../pip/_vendor/pytoml/__init__.py | 4 - .../__pycache__/__init__.cpython-38.pyc | Bin 389 -> 0 bytes .../pytoml/__pycache__/core.cpython-38.pyc | Bin 966 -> 0 bytes .../pytoml/__pycache__/parser.cpython-38.pyc | Bin 10163 -> 0 bytes .../pytoml/__pycache__/test.cpython-38.pyc | Bin 1268 -> 0 bytes .../pytoml/__pycache__/utils.cpython-38.pyc | Bin 2178 -> 0 bytes .../pytoml/__pycache__/writer.cpython-38.pyc | Bin 3609 -> 0 bytes .../site-packages/pip/_vendor/pytoml/core.py | 13 - .../pip/_vendor/pytoml/parser.py | 341 - .../site-packages/pip/_vendor/pytoml/test.py | 30 - .../site-packages/pip/_vendor/pytoml/utils.py | 67 - .../pip/_vendor/pytoml/writer.py | 106 - .../pip/_vendor/requests/__init__.py | 133 - .../__pycache__/__init__.cpython-38.pyc | Bin 3516 -> 0 bytes .../__pycache__/__version__.cpython-38.pyc | Bin 563 -> 0 bytes .../_internal_utils.cpython-38.pyc | Bin 1333 -> 0 bytes .../__pycache__/adapters.cpython-38.pyc | Bin 16996 -> 0 bytes .../requests/__pycache__/api.cpython-38.pyc | Bin 6520 -> 0 bytes .../requests/__pycache__/auth.cpython-38.pyc | Bin 8342 -> 0 bytes .../requests/__pycache__/certs.cpython-38.pyc | Bin 646 -> 0 bytes .../__pycache__/compat.cpython-38.pyc | Bin 1625 -> 0 bytes .../__pycache__/cookies.cpython-38.pyc | Bin 18847 -> 0 bytes .../__pycache__/exceptions.cpython-38.pyc | Bin 5257 -> 0 bytes .../requests/__pycache__/help.cpython-38.pyc | Bin 2743 -> 0 bytes .../requests/__pycache__/hooks.cpython-38.pyc | Bin 1005 -> 0 bytes .../__pycache__/models.cpython-38.pyc | Bin 23941 -> 0 bytes .../__pycache__/packages.cpython-38.pyc | Bin 515 -> 0 bytes .../__pycache__/sessions.cpython-38.pyc | Bin 19555 -> 0 bytes .../__pycache__/status_codes.cpython-38.pyc | Bin 4201 -> 0 bytes .../__pycache__/structures.cpython-38.pyc | Bin 4443 -> 0 bytes .../requests/__pycache__/utils.cpython-38.pyc | Bin 22212 -> 0 bytes .../pip/_vendor/requests/__version__.py | 14 - .../pip/_vendor/requests/_internal_utils.py | 42 - .../pip/_vendor/requests/adapters.py | 533 -- .../site-packages/pip/_vendor/requests/api.py | 158 - .../pip/_vendor/requests/auth.py | 305 - .../pip/_vendor/requests/certs.py | 18 - .../pip/_vendor/requests/compat.py | 74 - .../pip/_vendor/requests/cookies.py | 549 -- .../pip/_vendor/requests/exceptions.py | 126 - .../pip/_vendor/requests/help.py | 119 - .../pip/_vendor/requests/hooks.py | 34 - .../pip/_vendor/requests/models.py | 953 -- .../pip/_vendor/requests/packages.py | 16 - .../pip/_vendor/requests/sessions.py | 770 -- .../pip/_vendor/requests/status_codes.py | 120 - .../pip/_vendor/requests/structures.py | 103 - .../pip/_vendor/requests/utils.py | 977 -- .../site-packages/pip/_vendor/retrying.py | 267 - .../site-packages/pip/_vendor/six.py | 952 -- .../pip/_vendor/urllib3/__init__.py | 91 - .../__pycache__/__init__.cpython-38.pyc | Bin 2138 -> 0 bytes .../__pycache__/_collections.cpython-38.pyc | Bin 10788 -> 0 bytes .../__pycache__/connection.cpython-38.pyc | Bin 10581 -> 0 bytes .../__pycache__/connectionpool.cpython-38.pyc | Bin 23893 -> 0 bytes .../__pycache__/exceptions.cpython-38.pyc | Bin 10081 -> 0 bytes .../urllib3/__pycache__/fields.cpython-38.pyc | Bin 8146 -> 0 bytes .../__pycache__/filepost.cpython-38.pyc | Bin 2783 -> 0 bytes .../__pycache__/poolmanager.cpython-38.pyc | Bin 12959 -> 0 bytes .../__pycache__/request.cpython-38.pyc | Bin 5637 -> 0 bytes .../__pycache__/response.cpython-38.pyc | Bin 20148 -> 0 bytes .../pip/_vendor/urllib3/_collections.py | 329 - .../pip/_vendor/urllib3/connection.py | 417 - .../pip/_vendor/urllib3/connectionpool.py | 897 -- .../pip/_vendor/urllib3/contrib/__init__.py | 0 .../__pycache__/__init__.cpython-38.pyc | Bin 212 -> 0 bytes .../_appengine_environ.cpython-38.pyc | Bin 1140 -> 0 bytes .../__pycache__/appengine.cpython-38.pyc | Bin 8453 -> 0 bytes .../__pycache__/ntlmpool.cpython-38.pyc | Bin 3279 -> 0 bytes .../__pycache__/pyopenssl.cpython-38.pyc | Bin 14984 -> 0 bytes .../securetransport.cpython-38.pyc | Bin 19912 -> 0 bytes .../contrib/__pycache__/socks.cpython-38.pyc | Bin 5598 -> 0 bytes .../urllib3/contrib/_appengine_environ.py | 30 - .../contrib/_securetransport/__init__.py | 0 .../__pycache__/__init__.cpython-38.pyc | Bin 229 -> 0 bytes .../__pycache__/bindings.cpython-38.pyc | Bin 10384 -> 0 bytes .../__pycache__/low_level.cpython-38.pyc | Bin 7581 -> 0 bytes .../contrib/_securetransport/bindings.py | 593 -- .../contrib/_securetransport/low_level.py | 346 - .../pip/_vendor/urllib3/contrib/appengine.py | 289 - .../pip/_vendor/urllib3/contrib/ntlmpool.py | 111 - .../pip/_vendor/urllib3/contrib/pyopenssl.py | 485 - .../urllib3/contrib/securetransport.py | 853 -- .../pip/_vendor/urllib3/contrib/socks.py | 205 - .../pip/_vendor/urllib3/exceptions.py | 246 - .../pip/_vendor/urllib3/fields.py | 272 - .../pip/_vendor/urllib3/filepost.py | 98 - .../pip/_vendor/urllib3/packages/__init__.py | 5 - .../__pycache__/__init__.cpython-38.pyc | Bin 326 -> 0 bytes .../packages/__pycache__/six.cpython-38.pyc | Bin 24486 -> 0 bytes .../urllib3/packages/backports/__init__.py | 0 .../__pycache__/__init__.cpython-38.pyc | Bin 223 -> 0 bytes .../__pycache__/makefile.cpython-38.pyc | Bin 1327 -> 0 bytes .../urllib3/packages/backports/makefile.py | 53 - .../urllib3/packages/rfc3986/__init__.py | 56 - .../__pycache__/__init__.cpython-38.pyc | Bin 1060 -> 0 bytes .../rfc3986/__pycache__/_mixin.cpython-38.pyc | Bin 10661 -> 0 bytes .../__pycache__/abnf_regexp.cpython-38.pyc | Bin 4164 -> 0 bytes .../rfc3986/__pycache__/api.cpython-38.pyc | Bin 3725 -> 0 bytes .../__pycache__/builder.cpython-38.pyc | Bin 8167 -> 0 bytes .../rfc3986/__pycache__/compat.cpython-38.pyc | Bin 1162 -> 0 bytes .../__pycache__/exceptions.cpython-38.pyc | Bin 4801 -> 0 bytes .../rfc3986/__pycache__/iri.cpython-38.pyc | Bin 4516 -> 0 bytes .../rfc3986/__pycache__/misc.cpython-38.pyc | Bin 2281 -> 0 bytes .../__pycache__/normalizers.cpython-38.pyc | Bin 3594 -> 0 bytes .../__pycache__/parseresult.cpython-38.pyc | Bin 9908 -> 0 bytes .../rfc3986/__pycache__/uri.cpython-38.pyc | Bin 4289 -> 0 bytes .../__pycache__/validators.cpython-38.pyc | Bin 13049 -> 0 bytes .../urllib3/packages/rfc3986/_mixin.py | 353 - .../urllib3/packages/rfc3986/abnf_regexp.py | 267 - .../_vendor/urllib3/packages/rfc3986/api.py | 106 - .../urllib3/packages/rfc3986/builder.py | 298 - .../urllib3/packages/rfc3986/compat.py | 54 - .../urllib3/packages/rfc3986/exceptions.py | 118 - .../_vendor/urllib3/packages/rfc3986/iri.py | 147 - .../_vendor/urllib3/packages/rfc3986/misc.py | 124 - .../urllib3/packages/rfc3986/normalizers.py | 167 - .../urllib3/packages/rfc3986/parseresult.py | 385 - .../_vendor/urllib3/packages/rfc3986/uri.py | 153 - .../urllib3/packages/rfc3986/validators.py | 450 - .../pip/_vendor/urllib3/packages/six.py | 868 -- .../packages/ssl_match_hostname/__init__.py | 19 - .../__pycache__/__init__.cpython-38.pyc | Bin 567 -> 0 bytes .../_implementation.cpython-38.pyc | Bin 3340 -> 0 bytes .../ssl_match_hostname/_implementation.py | 156 - .../pip/_vendor/urllib3/poolmanager.py | 455 - .../pip/_vendor/urllib3/request.py | 150 - .../pip/_vendor/urllib3/response.py | 760 -- .../pip/_vendor/urllib3/util/__init__.py | 56 - .../util/__pycache__/__init__.cpython-38.pyc | Bin 1032 -> 0 bytes .../__pycache__/connection.cpython-38.pyc | Bin 3205 -> 0 bytes .../util/__pycache__/queue.cpython-38.pyc | Bin 1077 -> 0 bytes .../util/__pycache__/request.cpython-38.pyc | Bin 3359 -> 0 bytes .../util/__pycache__/response.cpython-38.pyc | Bin 2002 -> 0 bytes .../util/__pycache__/retry.cpython-38.pyc | Bin 12953 -> 0 bytes .../util/__pycache__/ssl_.cpython-38.pyc | Bin 9831 -> 0 bytes .../util/__pycache__/timeout.cpython-38.pyc | Bin 8833 -> 0 bytes .../util/__pycache__/url.cpython-38.pyc | Bin 7898 -> 0 bytes .../util/__pycache__/wait.cpython-38.pyc | Bin 3126 -> 0 bytes .../pip/_vendor/urllib3/util/connection.py | 134 - .../pip/_vendor/urllib3/util/queue.py | 21 - .../pip/_vendor/urllib3/util/request.py | 125 - .../pip/_vendor/urllib3/util/response.py | 87 - .../pip/_vendor/urllib3/util/retry.py | 412 - .../pip/_vendor/urllib3/util/ssl_.py | 392 - .../pip/_vendor/urllib3/util/timeout.py | 243 - .../pip/_vendor/urllib3/util/url.py | 289 - .../pip/_vendor/urllib3/util/wait.py | 150 - .../pip/_vendor/webencodings/__init__.py | 342 - .../__pycache__/__init__.cpython-38.pyc | Bin 9752 -> 0 bytes .../__pycache__/labels.cpython-38.pyc | Bin 3850 -> 0 bytes .../__pycache__/mklabels.cpython-38.pyc | Bin 1946 -> 0 bytes .../__pycache__/tests.cpython-38.pyc | Bin 5112 -> 0 bytes .../__pycache__/x_user_defined.cpython-38.pyc | Bin 2680 -> 0 bytes .../pip/_vendor/webencodings/labels.py | 231 - .../pip/_vendor/webencodings/mklabels.py | 59 - .../pip/_vendor/webencodings/tests.py | 153 - .../_vendor/webencodings/x_user_defined.py | 325 - .../site-packages/pkg_resources/__init__.py | 3295 ------- .../__pycache__/__init__.cpython-38.pyc | Bin 100394 -> 0 bytes .../__pycache__/py31compat.cpython-38.pyc | Bin 656 -> 0 bytes .../pkg_resources/_vendor/__init__.py | 0 .../__pycache__/__init__.cpython-38.pyc | Bin 213 -> 0 bytes .../__pycache__/appdirs.cpython-38.pyc | Bin 20566 -> 0 bytes .../__pycache__/pyparsing.cpython-38.pyc | Bin 201690 -> 0 bytes .../_vendor/__pycache__/six.cpython-38.pyc | Bin 24486 -> 0 bytes .../pkg_resources/_vendor/appdirs.py | 608 -- .../_vendor/packaging/__about__.py | 21 - .../_vendor/packaging/__init__.py | 14 - .../__pycache__/__about__.cpython-38.pyc | Bin 763 -> 0 bytes .../__pycache__/__init__.cpython-38.pyc | Bin 601 -> 0 bytes .../__pycache__/_compat.cpython-38.pyc | Bin 1037 -> 0 bytes .../__pycache__/_structures.cpython-38.pyc | Bin 2819 -> 0 bytes .../__pycache__/markers.cpython-38.pyc | Bin 8975 -> 0 bytes .../__pycache__/requirements.cpython-38.pyc | Bin 3934 -> 0 bytes .../__pycache__/specifiers.cpython-38.pyc | Bin 19843 -> 0 bytes .../__pycache__/utils.cpython-38.pyc | Bin 522 -> 0 bytes .../__pycache__/version.cpython-38.pyc | Bin 10690 -> 0 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 | 5742 ------------ .../pkg_resources/_vendor/six.py | 868 -- .../pkg_resources/extern/__init__.py | 73 - .../__pycache__/__init__.cpython-38.pyc | Bin 2462 -> 0 bytes .../site-packages/pkg_resources/py31compat.py | 23 - .../pylint-2.5.3.dist-info/COPYING | 340 - .../pylint-2.5.3.dist-info/INSTALLER | 1 - .../pylint-2.5.3.dist-info/METADATA | 204 - .../pylint-2.5.3.dist-info/RECORD | 173 - .../pylint-2.5.3.dist-info/WHEEL | 5 - .../pylint-2.5.3.dist-info/entry_points.txt | 6 - .../pylint-2.5.3.dist-info/top_level.txt | 1 - .../site-packages/pylint/__init__.py | 44 - .../site-packages/pylint/__main__.py | 18 - .../site-packages/pylint/__pkginfo__.py | 97 - .../__pycache__/__init__.cpython-38.pyc | Bin 1118 -> 0 bytes .../__pycache__/__main__.cpython-38.pyc | Bin 332 -> 0 bytes .../__pycache__/__pkginfo__.cpython-38.pyc | Bin 2739 -> 0 bytes .../pylint/__pycache__/config.cpython-38.pyc | Bin 27513 -> 0 bytes .../__pycache__/constants.cpython-38.pyc | Bin 1056 -> 0 bytes .../pylint/__pycache__/epylint.cpython-38.pyc | Bin 5023 -> 0 bytes .../__pycache__/exceptions.cpython-38.pyc | Bin 1337 -> 0 bytes .../pylint/__pycache__/graph.cpython-38.pyc | Bin 5098 -> 0 bytes .../__pycache__/interfaces.cpython-38.pyc | Bin 3747 -> 0 bytes .../__pycache__/testutils.cpython-38.pyc | Bin 20808 -> 0 bytes .../site-packages/pylint/checkers/__init__.py | 67 - .../__pycache__/__init__.cpython-38.pyc | Bin 1608 -> 0 bytes .../checkers/__pycache__/async.cpython-38.pyc | Bin 2735 -> 0 bytes .../checkers/__pycache__/base.cpython-38.pyc | Bin 63691 -> 0 bytes .../__pycache__/base_checker.cpython-38.pyc | Bin 6595 -> 0 bytes .../__pycache__/classes.cpython-38.pyc | Bin 50533 -> 0 bytes .../design_analysis.cpython-38.pyc | Bin 11336 -> 0 bytes .../__pycache__/exceptions.cpython-38.pyc | Bin 15354 -> 0 bytes .../__pycache__/format.cpython-38.pyc | Bin 33384 -> 0 bytes .../__pycache__/imports.cpython-38.pyc | Bin 25442 -> 0 bytes .../__pycache__/logging.cpython-38.pyc | Bin 11680 -> 0 bytes .../checkers/__pycache__/misc.cpython-38.pyc | Bin 5134 -> 0 bytes .../__pycache__/newstyle.cpython-38.pyc | Bin 2464 -> 0 bytes .../__pycache__/python3.cpython-38.pyc | Bin 34958 -> 0 bytes .../__pycache__/raw_metrics.cpython-38.pyc | Bin 3296 -> 0 bytes .../__pycache__/refactoring.cpython-38.pyc | Bin 44950 -> 0 bytes .../__pycache__/similar.cpython-38.pyc | Bin 12360 -> 0 bytes .../__pycache__/spelling.cpython-38.pyc | Bin 9720 -> 0 bytes .../__pycache__/stdlib.cpython-38.pyc | Bin 12461 -> 0 bytes .../__pycache__/strings.cpython-38.pyc | Bin 22112 -> 0 bytes .../__pycache__/typecheck.cpython-38.pyc | Bin 41855 -> 0 bytes .../checkers/__pycache__/utils.cpython-38.pyc | Bin 32675 -> 0 bytes .../__pycache__/variables.cpython-38.pyc | Bin 45224 -> 0 bytes .../site-packages/pylint/checkers/async.py | 90 - .../site-packages/pylint/checkers/base.py | 2503 ----- .../pylint/checkers/base_checker.py | 190 - .../site-packages/pylint/checkers/classes.py | 2093 ----- .../pylint/checkers/design_analysis.py | 500 - .../pylint/checkers/exceptions.py | 554 -- .../site-packages/pylint/checkers/format.py | 1392 --- .../site-packages/pylint/checkers/imports.py | 991 -- .../site-packages/pylint/checkers/logging.py | 415 - .../site-packages/pylint/checkers/misc.py | 199 - .../site-packages/pylint/checkers/newstyle.py | 133 - .../site-packages/pylint/checkers/python3.py | 1425 --- .../pylint/checkers/raw_metrics.py | 121 - .../pylint/checkers/refactoring.py | 1547 --- .../site-packages/pylint/checkers/similar.py | 455 - .../site-packages/pylint/checkers/spelling.py | 415 - .../site-packages/pylint/checkers/stdlib.py | 458 - .../site-packages/pylint/checkers/strings.py | 952 -- .../pylint/checkers/typecheck.py | 1862 ---- .../site-packages/pylint/checkers/utils.py | 1295 --- .../pylint/checkers/variables.py | 2077 ---- .../python3.8/site-packages/pylint/config.py | 977 -- .../site-packages/pylint/constants.py | 41 - .../python3.8/site-packages/pylint/epylint.py | 200 - .../site-packages/pylint/exceptions.py | 31 - .../pylint/extensions/__init__.py | 0 .../__pycache__/__init__.cpython-38.pyc | Bin 205 -> 0 bytes .../_check_docs_utils.cpython-38.pyc | Bin 19472 -> 0 bytes .../__pycache__/bad_builtin.cpython-38.pyc | Bin 1997 -> 0 bytes .../broad_try_clause.cpython-38.pyc | Bin 2284 -> 0 bytes .../__pycache__/check_docs.cpython-38.pyc | Bin 715 -> 0 bytes .../__pycache__/check_elif.cpython-38.pyc | Bin 2686 -> 0 bytes .../__pycache__/comparetozero.cpython-38.pyc | Bin 1973 -> 0 bytes .../__pycache__/docparams.cpython-38.pyc | Bin 14707 -> 0 bytes .../__pycache__/docstyle.cpython-38.pyc | Bin 2470 -> 0 bytes .../__pycache__/emptystring.cpython-38.pyc | Bin 2033 -> 0 bytes .../__pycache__/mccabe.cpython-38.pyc | Bin 5668 -> 0 bytes .../overlapping_exceptions.cpython-38.pyc | Bin 2607 -> 0 bytes .../redefined_variable_type.cpython-38.pyc | Bin 3262 -> 0 bytes .../pylint/extensions/_check_docs_utils.py | 808 -- .../pylint/extensions/bad_builtin.py | 71 - .../pylint/extensions/broad_try_clause.py | 74 - .../pylint/extensions/check_docs.py | 23 - .../pylint/extensions/check_elif.py | 79 - .../pylint/extensions/comparetozero.py | 75 - .../pylint/extensions/docparams.py | 539 -- .../pylint/extensions/docstyle.py | 91 - .../pylint/extensions/emptystring.py | 75 - .../site-packages/pylint/extensions/mccabe.py | 199 - .../extensions/overlapping_exceptions.py | 86 - .../extensions/redefined_variable_type.py | 118 - .../python3.8/site-packages/pylint/graph.py | 193 - .../site-packages/pylint/interfaces.py | 103 - .../site-packages/pylint/lint/__init__.py | 91 - .../lint/__pycache__/__init__.cpython-38.pyc | Bin 1029 -> 0 bytes .../__pycache__/check_parallel.cpython-38.pyc | Bin 2586 -> 0 bytes .../lint/__pycache__/pylinter.cpython-38.pyc | Bin 31994 -> 0 bytes .../report_functions.cpython-38.pyc | Bin 2422 -> 0 bytes .../lint/__pycache__/run.cpython-38.pyc | Bin 11111 -> 0 bytes .../lint/__pycache__/utils.cpython-38.pyc | Bin 2175 -> 0 bytes .../pylint/lint/check_parallel.py | 118 - .../site-packages/pylint/lint/pylinter.py | 1174 --- .../pylint/lint/report_functions.py | 76 - .../site-packages/pylint/lint/run.py | 425 - .../site-packages/pylint/lint/utils.py | 76 - .../site-packages/pylint/message/__init__.py | 56 - .../__pycache__/__init__.cpython-38.pyc | Bin 690 -> 0 bytes .../__pycache__/message.cpython-38.pyc | Bin 1269 -> 0 bytes .../message_definition.cpython-38.pyc | Bin 3040 -> 0 bytes .../message_definition_store.cpython-38.pyc | Bin 4139 -> 0 bytes .../message_handler_mix_in.cpython-38.pyc | Bin 11165 -> 0 bytes .../message_id_store.cpython-38.pyc | Bin 5013 -> 0 bytes .../site-packages/pylint/message/message.py | 51 - .../pylint/message/message_definition.py | 82 - .../message/message_definition_store.py | 88 - .../pylint/message/message_handler_mix_in.py | 390 - .../pylint/message/message_id_store.py | 126 - .../pylint/pyreverse/__init__.py | 8 - .../__pycache__/__init__.cpython-38.pyc | Bin 265 -> 0 bytes .../__pycache__/diadefslib.cpython-38.pyc | Bin 7667 -> 0 bytes .../__pycache__/diagrams.cpython-38.pyc | Bin 8775 -> 0 bytes .../__pycache__/inspector.cpython-38.pyc | Bin 10299 -> 0 bytes .../pyreverse/__pycache__/main.cpython-38.pyc | Bin 4619 -> 0 bytes .../__pycache__/utils.cpython-38.pyc | Bin 5717 -> 0 bytes .../__pycache__/vcgutils.cpython-38.pyc | Bin 4768 -> 0 bytes .../__pycache__/writer.cpython-38.pyc | Bin 7169 -> 0 bytes .../pylint/pyreverse/diadefslib.py | 240 - .../pylint/pyreverse/diagrams.py | 269 - .../pylint/pyreverse/inspector.py | 361 - .../site-packages/pylint/pyreverse/main.py | 217 - .../site-packages/pylint/pyreverse/utils.py | 223 - .../pylint/pyreverse/vcgutils.py | 229 - .../site-packages/pylint/pyreverse/writer.py | 217 - .../pylint/reporters/__init__.py | 36 - .../__pycache__/__init__.cpython-38.pyc | Bin 851 -> 0 bytes .../__pycache__/base_reporter.cpython-38.pyc | Bin 2810 -> 0 bytes .../collecting_reporter.cpython-38.pyc | Bin 855 -> 0 bytes .../__pycache__/json_reporter.cpython-38.pyc | Bin 2002 -> 0 bytes .../reports_handler_mix_in.cpython-38.pyc | Bin 3024 -> 0 bytes .../reporters/__pycache__/text.cpython-38.pyc | Bin 7336 -> 0 bytes .../pylint/reporters/base_reporter.py | 64 - .../pylint/reporters/collecting_reporter.py | 19 - .../pylint/reporters/json_reporter.py | 61 - .../reporters/reports_handler_mix_in.py | 77 - .../site-packages/pylint/reporters/text.py | 249 - .../pylint/reporters/ureports/__init__.py | 97 - .../__pycache__/__init__.cpython-38.pyc | Bin 3100 -> 0 bytes .../ureports/__pycache__/nodes.cpython-38.pyc | Bin 6001 -> 0 bytes .../__pycache__/text_writer.cpython-38.pyc | Bin 3696 -> 0 bytes .../pylint/reporters/ureports/nodes.py | 189 - .../pylint/reporters/ureports/text_writer.py | 96 - .../site-packages/pylint/testutils.py | 625 -- .../site-packages/pylint/utils/__init__.py | 66 - .../utils/__pycache__/__init__.cpython-38.pyc | Bin 893 -> 0 bytes .../__pycache__/ast_walker.cpython-38.pyc | Bin 2100 -> 0 bytes .../__pycache__/file_state.cpython-38.pyc | Bin 3872 -> 0 bytes .../__pycache__/pragma_parser.cpython-38.pyc | Bin 3702 -> 0 bytes .../utils/__pycache__/utils.cpython-38.pyc | Bin 10934 -> 0 bytes .../site-packages/pylint/utils/ast_walker.py | 77 - .../site-packages/pylint/utils/file_state.py | 136 - .../pylint/utils/pragma_parser.py | 132 - .../site-packages/pylint/utils/utils.py | 400 - .../requests-2.23.0.dist-info/INSTALLER | 1 - .../requests-2.23.0.dist-info/LICENSE | 13 - .../requests-2.23.0.dist-info/METADATA | 165 - .../requests-2.23.0.dist-info/RECORD | 42 - .../requests-2.23.0.dist-info/WHEEL | 6 - .../requests-2.23.0.dist-info/top_level.txt | 1 - .../site-packages/requests/__init__.py | 131 - .../__pycache__/__init__.cpython-38.pyc | Bin 3392 -> 0 bytes .../__pycache__/__version__.cpython-38.pyc | Bin 561 -> 0 bytes .../_internal_utils.cpython-38.pyc | Bin 1326 -> 0 bytes .../__pycache__/adapters.cpython-38.pyc | Bin 16917 -> 0 bytes .../requests/__pycache__/api.cpython-38.pyc | Bin 6741 -> 0 bytes .../requests/__pycache__/auth.cpython-38.pyc | Bin 8345 -> 0 bytes .../requests/__pycache__/certs.cpython-38.pyc | Bin 627 -> 0 bytes .../__pycache__/compat.cpython-38.pyc | Bin 1661 -> 0 bytes .../__pycache__/cookies.cpython-38.pyc | Bin 18840 -> 0 bytes .../__pycache__/exceptions.cpython-38.pyc | Bin 5238 -> 0 bytes .../requests/__pycache__/help.cpython-38.pyc | Bin 2678 -> 0 bytes .../requests/__pycache__/hooks.cpython-38.pyc | Bin 998 -> 0 bytes .../__pycache__/models.cpython-38.pyc | Bin 23874 -> 0 bytes .../__pycache__/packages.cpython-38.pyc | Bin 415 -> 0 bytes .../__pycache__/sessions.cpython-38.pyc | Bin 19545 -> 0 bytes .../__pycache__/status_codes.cpython-38.pyc | Bin 4253 -> 0 bytes .../__pycache__/structures.cpython-38.pyc | Bin 4466 -> 0 bytes .../requests/__pycache__/utils.cpython-38.pyc | Bin 22339 -> 0 bytes .../site-packages/requests/__version__.py | 14 - .../site-packages/requests/_internal_utils.py | 42 - .../site-packages/requests/adapters.py | 533 -- .../python3.8/site-packages/requests/api.py | 161 - .../python3.8/site-packages/requests/auth.py | 305 - .../python3.8/site-packages/requests/certs.py | 18 - .../site-packages/requests/compat.py | 72 - .../site-packages/requests/cookies.py | 549 -- .../site-packages/requests/exceptions.py | 126 - .../python3.8/site-packages/requests/help.py | 119 - .../python3.8/site-packages/requests/hooks.py | 34 - .../site-packages/requests/models.py | 954 -- .../site-packages/requests/packages.py | 14 - .../site-packages/requests/sessions.py | 767 -- .../site-packages/requests/status_codes.py | 123 - .../site-packages/requests/structures.py | 105 - .../python3.8/site-packages/requests/utils.py | 982 -- .../setuptools-41.2.0.dist-info/INSTALLER | 1 - .../setuptools-41.2.0.dist-info/LICENSE | 19 - .../setuptools-41.2.0.dist-info/METADATA | 77 - .../setuptools-41.2.0.dist-info/RECORD | 186 - .../setuptools-41.2.0.dist-info/WHEEL | 6 - .../dependency_links.txt | 2 - .../entry_points.txt | 65 - .../setuptools-41.2.0.dist-info/top_level.txt | 3 - .../setuptools-41.2.0.dist-info/zip-safe | 1 - .../site-packages/setuptools/__init__.py | 228 - .../__pycache__/__init__.cpython-38.pyc | Bin 7824 -> 0 bytes .../_deprecation_warning.cpython-38.pyc | Bin 572 -> 0 bytes .../__pycache__/archive_util.cpython-38.pyc | Bin 5184 -> 0 bytes .../__pycache__/build_meta.cpython-38.pyc | Bin 8551 -> 0 bytes .../__pycache__/config.cpython-38.pyc | Bin 17832 -> 0 bytes .../__pycache__/dep_util.cpython-38.pyc | Bin 875 -> 0 bytes .../__pycache__/depends.cpython-38.pyc | Bin 5344 -> 0 bytes .../__pycache__/dist.cpython-38.pyc | Bin 42203 -> 0 bytes .../__pycache__/extension.cpython-38.pyc | Bin 2017 -> 0 bytes .../__pycache__/glibc.cpython-38.pyc | Bin 1586 -> 0 bytes .../__pycache__/glob.cpython-38.pyc | Bin 3789 -> 0 bytes .../__pycache__/launch.cpython-38.pyc | Bin 880 -> 0 bytes .../__pycache__/lib2to3_ex.cpython-38.pyc | Bin 2467 -> 0 bytes .../__pycache__/monkey.cpython-38.pyc | Bin 4700 -> 0 bytes .../__pycache__/msvc.cpython-38.pyc | Bin 34496 -> 0 bytes .../__pycache__/namespaces.cpython-38.pyc | Bin 3672 -> 0 bytes .../__pycache__/package_index.cpython-38.pyc | Bin 33017 -> 0 bytes .../__pycache__/pep425tags.cpython-38.pyc | Bin 7259 -> 0 bytes .../__pycache__/py27compat.cpython-38.pyc | Bin 840 -> 0 bytes .../__pycache__/py31compat.cpython-38.pyc | Bin 1247 -> 0 bytes .../__pycache__/py33compat.cpython-38.pyc | Bin 1464 -> 0 bytes .../__pycache__/sandbox.cpython-38.pyc | Bin 15592 -> 0 bytes .../__pycache__/site-patch.cpython-38.pyc | Bin 1530 -> 0 bytes .../__pycache__/ssl_support.cpython-38.pyc | Bin 6911 -> 0 bytes .../__pycache__/unicode_utils.cpython-38.pyc | Bin 1207 -> 0 bytes .../__pycache__/version.cpython-38.pyc | Bin 348 -> 0 bytes .../__pycache__/wheel.cpython-38.pyc | Bin 7110 -> 0 bytes .../windows_support.cpython-38.pyc | Bin 1045 -> 0 bytes .../setuptools/_deprecation_warning.py | 7 - .../setuptools/_vendor/__init__.py | 0 .../__pycache__/__init__.cpython-38.pyc | Bin 210 -> 0 bytes .../__pycache__/pyparsing.cpython-38.pyc | Bin 201687 -> 0 bytes .../_vendor/__pycache__/six.cpython-38.pyc | Bin 24483 -> 0 bytes .../setuptools/_vendor/packaging/__about__.py | 21 - .../setuptools/_vendor/packaging/__init__.py | 14 - .../__pycache__/__about__.cpython-38.pyc | Bin 760 -> 0 bytes .../__pycache__/__init__.cpython-38.pyc | Bin 598 -> 0 bytes .../__pycache__/_compat.cpython-38.pyc | Bin 1034 -> 0 bytes .../__pycache__/_structures.cpython-38.pyc | Bin 2816 -> 0 bytes .../__pycache__/markers.cpython-38.pyc | Bin 8969 -> 0 bytes .../__pycache__/requirements.cpython-38.pyc | Bin 3925 -> 0 bytes .../__pycache__/specifiers.cpython-38.pyc | Bin 19840 -> 0 bytes .../__pycache__/utils.cpython-38.pyc | Bin 519 -> 0 bytes .../__pycache__/version.cpython-38.pyc | Bin 10687 -> 0 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 | 5742 ------------ .../site-packages/setuptools/_vendor/six.py | 868 -- .../site-packages/setuptools/archive_util.py | 173 - .../site-packages/setuptools/build_meta.py | 257 - .../site-packages/setuptools/cli-32.exe | Bin 65536 -> 0 bytes .../site-packages/setuptools/cli-64.exe | Bin 74752 -> 0 bytes .../site-packages/setuptools/cli.exe | Bin 65536 -> 0 bytes .../setuptools/command/__init__.py | 18 - .../__pycache__/__init__.cpython-38.pyc | Bin 794 -> 0 bytes .../command/__pycache__/alias.cpython-38.pyc | Bin 2448 -> 0 bytes .../__pycache__/bdist_egg.cpython-38.pyc | Bin 14234 -> 0 bytes .../__pycache__/bdist_rpm.cpython-38.pyc | Bin 1840 -> 0 bytes .../__pycache__/bdist_wininst.cpython-38.pyc | Bin 1010 -> 0 bytes .../__pycache__/build_clib.cpython-38.pyc | Bin 2493 -> 0 bytes .../__pycache__/build_ext.cpython-38.pyc | Bin 9951 -> 0 bytes .../__pycache__/build_py.cpython-38.pyc | Bin 8697 -> 0 bytes .../__pycache__/develop.cpython-38.pyc | Bin 6557 -> 0 bytes .../__pycache__/dist_info.cpython-38.pyc | Bin 1417 -> 0 bytes .../__pycache__/easy_install.cpython-38.pyc | Bin 65318 -> 0 bytes .../__pycache__/egg_info.cpython-38.pyc | Bin 21820 -> 0 bytes .../__pycache__/install.cpython-38.pyc | Bin 4047 -> 0 bytes .../install_egg_info.cpython-38.pyc | Bin 2459 -> 0 bytes .../__pycache__/install_lib.cpython-38.pyc | Bin 4180 -> 0 bytes .../install_scripts.cpython-38.pyc | Bin 2329 -> 0 bytes .../__pycache__/py36compat.cpython-38.pyc | Bin 4666 -> 0 bytes .../__pycache__/register.cpython-38.pyc | Bin 811 -> 0 bytes .../command/__pycache__/rotate.cpython-38.pyc | Bin 2576 -> 0 bytes .../__pycache__/saveopts.cpython-38.pyc | Bin 945 -> 0 bytes .../command/__pycache__/sdist.cpython-38.pyc | Bin 6863 -> 0 bytes .../command/__pycache__/setopt.cpython-38.pyc | Bin 4593 -> 0 bytes .../command/__pycache__/test.cpython-38.pyc | Bin 8296 -> 0 bytes .../command/__pycache__/upload.cpython-38.pyc | Bin 5259 -> 0 bytes .../__pycache__/upload_docs.cpython-38.pyc | Bin 6196 -> 0 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 | 327 - .../setuptools/command/build_py.py | 270 - .../setuptools/command/develop.py | 221 - .../setuptools/command/dist_info.py | 36 - .../setuptools/command/easy_install.py | 2342 ----- .../setuptools/command/egg_info.py | 717 -- .../setuptools/command/install.py | 125 - .../setuptools/command/install_egg_info.py | 62 - .../setuptools/command/install_lib.py | 121 - .../setuptools/command/install_scripts.py | 65 - .../setuptools/command/launcher manifest.xml | 15 - .../setuptools/command/py36compat.py | 136 - .../setuptools/command/register.py | 18 - .../setuptools/command/rotate.py | 66 - .../setuptools/command/saveopts.py | 22 - .../site-packages/setuptools/command/sdist.py | 221 - .../setuptools/command/setopt.py | 149 - .../site-packages/setuptools/command/test.py | 271 - .../setuptools/command/upload.py | 196 - .../setuptools/command/upload_docs.py | 206 - .../site-packages/setuptools/config.py | 656 -- .../site-packages/setuptools/dep_util.py | 23 - .../site-packages/setuptools/depends.py | 186 - .../site-packages/setuptools/dist.py | 1280 --- .../site-packages/setuptools/extension.py | 57 - .../setuptools/extern/__init__.py | 73 - .../__pycache__/__init__.cpython-38.pyc | Bin 2463 -> 0 bytes .../site-packages/setuptools/glibc.py | 86 - .../site-packages/setuptools/glob.py | 174 - .../site-packages/setuptools/gui-32.exe | Bin 65536 -> 0 bytes .../site-packages/setuptools/gui-64.exe | Bin 75264 -> 0 bytes .../site-packages/setuptools/gui.exe | Bin 65536 -> 0 bytes .../site-packages/setuptools/launch.py | 35 - .../site-packages/setuptools/lib2to3_ex.py | 62 - .../site-packages/setuptools/monkey.py | 179 - .../site-packages/setuptools/msvc.py | 1301 --- .../site-packages/setuptools/namespaces.py | 107 - .../site-packages/setuptools/package_index.py | 1136 --- .../site-packages/setuptools/pep425tags.py | 319 - .../site-packages/setuptools/py27compat.py | 28 - .../site-packages/setuptools/py31compat.py | 32 - .../site-packages/setuptools/py33compat.py | 59 - .../site-packages/setuptools/sandbox.py | 491 - .../setuptools/script (dev).tmpl | 6 - .../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 | 211 - .../setuptools/windows_support.py | 29 - .../six-1.15.0.dist-info/INSTALLER | 1 - .../six-1.15.0.dist-info/LICENSE | 18 - .../six-1.15.0.dist-info/METADATA | 49 - .../site-packages/six-1.15.0.dist-info/RECORD | 8 - .../site-packages/six-1.15.0.dist-info/WHEEL | 6 - .../six-1.15.0.dist-info/top_level.txt | 1 - .../venv/Lib/python3.8/site-packages/six.py | 982 -- .../soupsieve-2.0.1.dist-info/INSTALLER | 1 - .../soupsieve-2.0.1.dist-info/LICENSE.md | 21 - .../soupsieve-2.0.1.dist-info/METADATA | 124 - .../soupsieve-2.0.1.dist-info/RECORD | 18 - .../soupsieve-2.0.1.dist-info/WHEEL | 5 - .../soupsieve-2.0.1.dist-info/top_level.txt | 1 - .../site-packages/soupsieve/__init__.py | 111 - .../site-packages/soupsieve/__meta__.py | 189 - .../__pycache__/__init__.cpython-38.pyc | Bin 3673 -> 0 bytes .../__pycache__/__meta__.cpython-38.pyc | Bin 5750 -> 0 bytes .../__pycache__/css_match.cpython-38.pyc | Bin 33260 -> 0 bytes .../__pycache__/css_parser.cpython-38.pyc | Bin 26770 -> 0 bytes .../__pycache__/css_types.cpython-38.pyc | Bin 10758 -> 0 bytes .../soupsieve/__pycache__/util.cpython-38.pyc | Bin 3085 -> 0 bytes .../site-packages/soupsieve/css_match.py | 1497 --- .../site-packages/soupsieve/css_parser.py | 1194 --- .../site-packages/soupsieve/css_types.py | 345 - .../python3.8/site-packages/soupsieve/util.py | 121 - .../toml-0.10.1.dist-info/DESCRIPTION.rst | 199 - .../toml-0.10.1.dist-info/INSTALLER | 1 - .../toml-0.10.1.dist-info/LICENSE.txt | 27 - .../toml-0.10.1.dist-info/METADATA | 226 - .../toml-0.10.1.dist-info/RECORD | 20 - .../site-packages/toml-0.10.1.dist-info/WHEEL | 6 - .../toml-0.10.1.dist-info/metadata.json | 1 - .../toml-0.10.1.dist-info/top_level.txt | 1 - .../python3.8/site-packages/toml/__init__.py | 25 - .../toml/__pycache__/__init__.cpython-38.pyc | Bin 722 -> 0 bytes .../toml/__pycache__/common.cpython-38.pyc | Bin 361 -> 0 bytes .../toml/__pycache__/decoder.cpython-38.pyc | Bin 23170 -> 0 bytes .../toml/__pycache__/encoder.cpython-38.pyc | Bin 9411 -> 0 bytes .../toml/__pycache__/ordered.cpython-38.pyc | Bin 961 -> 0 bytes .../toml/__pycache__/tz.cpython-38.pyc | Bin 1123 -> 0 bytes .../python3.8/site-packages/toml/common.py | 6 - .../python3.8/site-packages/toml/decoder.py | 1052 --- .../python3.8/site-packages/toml/encoder.py | 304 - .../python3.8/site-packages/toml/ordered.py | 15 - .../Lib/python3.8/site-packages/toml/tz.py | 21 - .../urllib3-1.25.9.dist-info/INSTALLER | 1 - .../urllib3-1.25.9.dist-info/LICENSE.txt | 21 - .../urllib3-1.25.9.dist-info/METADATA | 1262 --- .../urllib3-1.25.9.dist-info/RECORD | 78 - .../urllib3-1.25.9.dist-info/WHEEL | 6 - .../urllib3-1.25.9.dist-info/top_level.txt | 1 - .../site-packages/urllib3/__init__.py | 86 - .../__pycache__/__init__.cpython-38.pyc | Bin 2126 -> 0 bytes .../__pycache__/_collections.cpython-38.pyc | Bin 10680 -> 0 bytes .../__pycache__/connection.cpython-38.pyc | Bin 10357 -> 0 bytes .../__pycache__/connectionpool.cpython-38.pyc | Bin 24048 -> 0 bytes .../__pycache__/exceptions.cpython-38.pyc | Bin 10774 -> 0 bytes .../urllib3/__pycache__/fields.cpython-38.pyc | Bin 8140 -> 0 bytes .../__pycache__/filepost.cpython-38.pyc | Bin 2775 -> 0 bytes .../__pycache__/poolmanager.cpython-38.pyc | Bin 13607 -> 0 bytes .../__pycache__/request.cpython-38.pyc | Bin 5663 -> 0 bytes .../__pycache__/response.cpython-38.pyc | Bin 20798 -> 0 bytes .../site-packages/urllib3/_collections.py | 336 - .../site-packages/urllib3/connection.py | 423 - .../site-packages/urllib3/connectionpool.py | 1033 -- .../site-packages/urllib3/contrib/__init__.py | 0 .../__pycache__/__init__.cpython-38.pyc | Bin 204 -> 0 bytes .../_appengine_environ.cpython-38.pyc | Bin 1428 -> 0 bytes .../__pycache__/appengine.cpython-38.pyc | Bin 8253 -> 0 bytes .../__pycache__/ntlmpool.cpython-38.pyc | Bin 3285 -> 0 bytes .../__pycache__/pyopenssl.cpython-38.pyc | Bin 15088 -> 0 bytes .../securetransport.cpython-38.pyc | Bin 19875 -> 0 bytes .../contrib/__pycache__/socks.cpython-38.pyc | Bin 5588 -> 0 bytes .../urllib3/contrib/_appengine_environ.py | 36 - .../contrib/_securetransport/__init__.py | 0 .../__pycache__/__init__.cpython-38.pyc | Bin 221 -> 0 bytes .../__pycache__/bindings.cpython-38.pyc | Bin 10240 -> 0 bytes .../__pycache__/low_level.cpython-38.pyc | Bin 7561 -> 0 bytes .../contrib/_securetransport/bindings.py | 493 - .../contrib/_securetransport/low_level.py | 328 - .../urllib3/contrib/appengine.py | 314 - .../site-packages/urllib3/contrib/ntlmpool.py | 121 - .../urllib3/contrib/pyopenssl.py | 501 - .../urllib3/contrib/securetransport.py | 864 -- .../site-packages/urllib3/contrib/socks.py | 210 - .../site-packages/urllib3/exceptions.py | 272 - .../python3.8/site-packages/urllib3/fields.py | 273 - .../site-packages/urllib3/filepost.py | 98 - .../urllib3/packages/__init__.py | 5 - .../__pycache__/__init__.cpython-38.pyc | Bin 318 -> 0 bytes .../packages/__pycache__/six.cpython-38.pyc | Bin 26530 -> 0 bytes .../urllib3/packages/backports/__init__.py | 0 .../__pycache__/__init__.cpython-38.pyc | Bin 215 -> 0 bytes .../__pycache__/makefile.cpython-38.pyc | Bin 1319 -> 0 bytes .../urllib3/packages/backports/makefile.py | 52 - .../site-packages/urllib3/packages/six.py | 1021 -- .../packages/ssl_match_hostname/__init__.py | 19 - .../__pycache__/__init__.cpython-38.pyc | Bin 559 -> 0 bytes .../_implementation.cpython-38.pyc | Bin 3316 -> 0 bytes .../ssl_match_hostname/_implementation.py | 160 - .../site-packages/urllib3/poolmanager.py | 492 - .../site-packages/urllib3/request.py | 171 - .../site-packages/urllib3/response.py | 821 -- .../site-packages/urllib3/util/__init__.py | 46 - .../util/__pycache__/__init__.cpython-38.pyc | Bin 1024 -> 0 bytes .../__pycache__/connection.cpython-38.pyc | Bin 3197 -> 0 bytes .../util/__pycache__/queue.cpython-38.pyc | Bin 1069 -> 0 bytes .../util/__pycache__/request.cpython-38.pyc | Bin 3363 -> 0 bytes .../util/__pycache__/response.cpython-38.pyc | Bin 1990 -> 0 bytes .../util/__pycache__/retry.cpython-38.pyc | Bin 13048 -> 0 bytes .../util/__pycache__/ssl_.cpython-38.pyc | Bin 10127 -> 0 bytes .../util/__pycache__/timeout.cpython-38.pyc | Bin 8901 -> 0 bytes .../util/__pycache__/url.cpython-38.pyc | Bin 10710 -> 0 bytes .../util/__pycache__/wait.cpython-38.pyc | Bin 3118 -> 0 bytes .../site-packages/urllib3/util/connection.py | 138 - .../site-packages/urllib3/util/queue.py | 21 - .../site-packages/urllib3/util/request.py | 135 - .../site-packages/urllib3/util/response.py | 86 - .../site-packages/urllib3/util/retry.py | 453 - .../site-packages/urllib3/util/ssl_.py | 414 - .../site-packages/urllib3/util/timeout.py | 261 - .../site-packages/urllib3/util/url.py | 430 - .../site-packages/urllib3/util/wait.py | 153 - .../site-packages/werkzeug/__init__.py | 20 - .../__pycache__/__init__.cpython-38.pyc | Bin 746 -> 0 bytes .../__pycache__/_compat.cpython-38.pyc | Bin 7392 -> 0 bytes .../__pycache__/_internal.cpython-38.pyc | Bin 13182 -> 0 bytes .../__pycache__/_reloader.cpython-38.pyc | Bin 9680 -> 0 bytes .../__pycache__/datastructures.cpython-38.pyc | Bin 108613 -> 0 bytes .../__pycache__/exceptions.cpython-38.pyc | Bin 27155 -> 0 bytes .../__pycache__/filesystem.cpython-38.pyc | Bin 2207 -> 0 bytes .../__pycache__/formparser.cpython-38.pyc | Bin 16265 -> 0 bytes .../werkzeug/__pycache__/http.cpython-38.pyc | Bin 35644 -> 0 bytes .../werkzeug/__pycache__/local.cpython-38.pyc | Bin 18706 -> 0 bytes .../__pycache__/posixemulation.cpython-38.pyc | Bin 2771 -> 0 bytes .../__pycache__/routing.cpython-38.pyc | Bin 68163 -> 0 bytes .../__pycache__/security.cpython-38.pyc | Bin 8021 -> 0 bytes .../__pycache__/serving.cpython-38.pyc | Bin 29697 -> 0 bytes .../werkzeug/__pycache__/test.cpython-38.pyc | Bin 32877 -> 0 bytes .../__pycache__/testapp.cpython-38.pyc | Bin 9426 -> 0 bytes .../werkzeug/__pycache__/urls.cpython-38.pyc | Bin 36007 -> 0 bytes .../__pycache__/useragents.cpython-38.pyc | Bin 5521 -> 0 bytes .../werkzeug/__pycache__/utils.cpython-38.pyc | Bin 23158 -> 0 bytes .../werkzeug/__pycache__/wsgi.cpython-38.pyc | Bin 30962 -> 0 bytes .../site-packages/werkzeug/_compat.py | 228 - .../site-packages/werkzeug/_internal.py | 473 - .../site-packages/werkzeug/_reloader.py | 341 - .../site-packages/werkzeug/datastructures.py | 3120 ------- .../site-packages/werkzeug/debug/__init__.py | 498 - .../debug/__pycache__/__init__.cpython-38.pyc | Bin 12567 -> 0 bytes .../debug/__pycache__/console.cpython-38.pyc | Bin 7438 -> 0 bytes .../debug/__pycache__/repr.cpython-38.pyc | Bin 8647 -> 0 bytes .../debug/__pycache__/tbtools.cpython-38.pyc | Bin 18663 -> 0 bytes .../site-packages/werkzeug/debug/console.py | 218 - .../site-packages/werkzeug/debug/repr.py | 297 - .../werkzeug/debug/shared/FONT_LICENSE | 96 - .../werkzeug/debug/shared/console.png | Bin 507 -> 0 bytes .../werkzeug/debug/shared/debugger.js | 210 - .../werkzeug/debug/shared/jquery.js | 2 - .../werkzeug/debug/shared/less.png | Bin 191 -> 0 bytes .../werkzeug/debug/shared/more.png | Bin 200 -> 0 bytes .../werkzeug/debug/shared/source.png | Bin 818 -> 0 bytes .../werkzeug/debug/shared/style.css | 154 - .../werkzeug/debug/shared/ubuntu.ttf | Bin 70220 -> 0 bytes .../site-packages/werkzeug/debug/tbtools.py | 628 -- .../site-packages/werkzeug/exceptions.py | 829 -- .../site-packages/werkzeug/filesystem.py | 64 - .../site-packages/werkzeug/formparser.py | 584 -- .../python3.8/site-packages/werkzeug/http.py | 1307 --- .../python3.8/site-packages/werkzeug/local.py | 420 - .../werkzeug/middleware/__init__.py | 25 - .../__pycache__/__init__.cpython-38.pyc | Bin 766 -> 0 bytes .../__pycache__/dispatcher.cpython-38.pyc | Bin 2463 -> 0 bytes .../__pycache__/http_proxy.cpython-38.pyc | Bin 6375 -> 0 bytes .../__pycache__/lint.cpython-38.pyc | Bin 11737 -> 0 bytes .../__pycache__/profiler.cpython-38.pyc | Bin 4658 -> 0 bytes .../__pycache__/proxy_fix.cpython-38.pyc | Bin 5833 -> 0 bytes .../__pycache__/shared_data.cpython-38.pyc | Bin 8966 -> 0 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 | 169 - .../werkzeug/middleware/shared_data.py | 293 - .../site-packages/werkzeug/posixemulation.py | 117 - .../site-packages/werkzeug/routing.py | 2210 ----- .../site-packages/werkzeug/security.py | 249 - .../site-packages/werkzeug/serving.py | 1117 --- .../python3.8/site-packages/werkzeug/test.py | 1123 --- .../site-packages/werkzeug/testapp.py | 241 - .../python3.8/site-packages/werkzeug/urls.py | 1138 --- .../site-packages/werkzeug/useragents.py | 202 - .../python3.8/site-packages/werkzeug/utils.py | 778 -- .../werkzeug/wrappers/__init__.py | 36 - .../__pycache__/__init__.cpython-38.pyc | Bin 1694 -> 0 bytes .../__pycache__/accept.cpython-38.pyc | Bin 2253 -> 0 bytes .../wrappers/__pycache__/auth.cpython-38.pyc | Bin 1719 -> 0 bytes .../__pycache__/base_request.cpython-38.pyc | Bin 21681 -> 0 bytes .../__pycache__/base_response.cpython-38.pyc | Bin 23326 -> 0 bytes .../common_descriptors.cpython-38.pyc | Bin 12447 -> 0 bytes .../wrappers/__pycache__/cors.cpython-38.pyc | Bin 3311 -> 0 bytes .../wrappers/__pycache__/etag.cpython-38.pyc | Bin 11582 -> 0 bytes .../wrappers/__pycache__/json.cpython-38.pyc | Bin 4381 -> 0 bytes .../__pycache__/request.cpython-38.pyc | Bin 1994 -> 0 bytes .../__pycache__/response.cpython-38.pyc | Bin 3513 -> 0 bytes .../__pycache__/user_agent.cpython-38.pyc | Bin 862 -> 0 bytes .../site-packages/werkzeug/wrappers/accept.py | 50 - .../site-packages/werkzeug/wrappers/auth.py | 33 - .../werkzeug/wrappers/base_request.py | 673 -- .../werkzeug/wrappers/base_response.py | 700 -- .../werkzeug/wrappers/common_descriptors.py | 341 - .../site-packages/werkzeug/wrappers/cors.py | 100 - .../site-packages/werkzeug/wrappers/etag.py | 304 - .../site-packages/werkzeug/wrappers/json.py | 145 - .../werkzeug/wrappers/request.py | 49 - .../werkzeug/wrappers/response.py | 84 - .../werkzeug/wrappers/user_agent.py | 14 - .../python3.8/site-packages/werkzeug/wsgi.py | 1000 -- .../wrapt-1.12.1-py3.8.egg-info/PKG-INFO | 167 - .../wrapt-1.12.1-py3.8.egg-info/SOURCES.txt | 11 - .../dependency_links.txt | 1 - .../installed-files.txt | 13 - .../wrapt-1.12.1-py3.8.egg-info/top_level.txt | 1 - .../python3.8/site-packages/wrapt/__init__.py | 16 - .../wrapt/__pycache__/__init__.cpython-38.pyc | Bin 992 -> 0 bytes .../__pycache__/decorators.cpython-38.pyc | Bin 9264 -> 0 bytes .../wrapt/__pycache__/importer.cpython-38.pyc | Bin 4272 -> 0 bytes .../wrapt/__pycache__/wrappers.cpython-38.pyc | Bin 24397 -> 0 bytes .../wrapt/_wrappers.cpython-38-darwin.so | Bin 53644 -> 0 bytes .../site-packages/wrapt/decorators.py | 516 - .../python3.8/site-packages/wrapt/importer.py | 230 - .../python3.8/site-packages/wrapt/wrappers.py | 947 -- .../Flask-1.1.2.dist-info/INSTALLER | 1 - .../Flask-1.1.2.dist-info/LICENSE.rst | 28 - .../Flask-1.1.2.dist-info/METADATA | 137 - .../Flask-1.1.2.dist-info/RECORD | 48 - .../site-packages/Flask-1.1.2.dist-info/WHEEL | 6 - .../Flask-1.1.2.dist-info/entry_points.txt | 3 - .../Flask-1.1.2.dist-info/top_level.txt | 1 - .../Jinja2-2.11.2.dist-info/INSTALLER | 1 - .../Jinja2-2.11.2.dist-info/LICENSE.rst | 28 - .../Jinja2-2.11.2.dist-info/METADATA | 106 - .../Jinja2-2.11.2.dist-info/RECORD | 61 - .../Jinja2-2.11.2.dist-info/WHEEL | 6 - .../Jinja2-2.11.2.dist-info/entry_points.txt | 3 - .../Jinja2-2.11.2.dist-info/top_level.txt | 1 - .../MarkupSafe-1.1.1.dist-info/INSTALLER | 1 - .../MarkupSafe-1.1.1.dist-info/LICENSE.rst | 28 - .../MarkupSafe-1.1.1.dist-info/METADATA | 105 - .../MarkupSafe-1.1.1.dist-info/RECORD | 15 - .../MarkupSafe-1.1.1.dist-info/WHEEL | 5 - .../MarkupSafe-1.1.1.dist-info/top_level.txt | 1 - .../Werkzeug-1.0.1.dist-info/INSTALLER | 1 - .../Werkzeug-1.0.1.dist-info/LICENSE.rst | 28 - .../Werkzeug-1.0.1.dist-info/METADATA | 128 - .../Werkzeug-1.0.1.dist-info/RECORD | 101 - .../Werkzeug-1.0.1.dist-info/WHEEL | 6 - .../Werkzeug-1.0.1.dist-info/top_level.txt | 1 - .../__pycache__/easy_install.cpython-38.pyc | Bin 314 -> 0 bytes .../__pycache__/mccabe.cpython-38.pyc | Bin 11280 -> 0 bytes .../__pycache__/six.cpython-38.pyc | Bin 26908 -> 0 bytes .../astroid-2.4.2.dist-info/COPYING | 339 - .../astroid-2.4.2.dist-info/COPYING.LESSER | 510 - .../astroid-2.4.2.dist-info/INSTALLER | 1 - .../astroid-2.4.2.dist-info/METADATA | 118 - .../astroid-2.4.2.dist-info/RECORD | 151 - .../astroid-2.4.2.dist-info/WHEEL | 5 - .../astroid-2.4.2.dist-info/top_level.txt | 1 - .../Lib/site-packages/astroid/__init__.py | 168 - .../Lib/site-packages/astroid/__pkginfo__.py | 56 - .../__pycache__/__init__.cpython-38.pyc | Bin 4466 -> 0 bytes .../__pycache__/__pkginfo__.cpython-38.pyc | Bin 1414 -> 0 bytes .../astroid/__pycache__/_ast.cpython-38.pyc | Bin 3094 -> 0 bytes .../__pycache__/arguments.cpython-38.pyc | Bin 7656 -> 0 bytes .../__pycache__/as_string.cpython-38.pyc | Bin 26084 -> 0 bytes .../astroid/__pycache__/bases.cpython-38.pyc | Bin 15927 -> 0 bytes .../__pycache__/builder.cpython-38.pyc | Bin 12892 -> 0 bytes .../__pycache__/context.cpython-38.pyc | Bin 4334 -> 0 bytes .../__pycache__/decorators.cpython-38.pyc | Bin 3588 -> 0 bytes .../__pycache__/exceptions.cpython-38.pyc | Bin 9198 -> 0 bytes .../__pycache__/helpers.cpython-38.pyc | Bin 7404 -> 0 bytes .../__pycache__/inference.cpython-38.pyc | Bin 22354 -> 0 bytes .../__pycache__/manager.cpython-38.pyc | Bin 9792 -> 0 bytes .../astroid/__pycache__/mixins.cpython-38.pyc | Bin 5878 -> 0 bytes .../__pycache__/modutils.cpython-38.pyc | Bin 17091 -> 0 bytes .../__pycache__/node_classes.cpython-38.pyc | Bin 115703 -> 0 bytes .../astroid/__pycache__/nodes.cpython-38.pyc | Bin 2086 -> 0 bytes .../__pycache__/objects.cpython-38.pyc | Bin 9706 -> 0 bytes .../__pycache__/protocols.cpython-38.pyc | Bin 17008 -> 0 bytes .../__pycache__/raw_building.cpython-38.pyc | Bin 11660 -> 0 bytes .../__pycache__/rebuilder.cpython-38.pyc | Bin 35564 -> 0 bytes .../__pycache__/scoped_nodes.cpython-38.pyc | Bin 69459 -> 0 bytes .../__pycache__/test_utils.cpython-38.pyc | Bin 2542 -> 0 bytes .../__pycache__/transforms.cpython-38.pyc | Bin 3445 -> 0 bytes .../astroid/__pycache__/util.cpython-38.pyc | Bin 5813 -> 0 bytes .../venv/Lib/site-packages/astroid/_ast.py | 131 - .../Lib/site-packages/astroid/arguments.py | 300 - .../Lib/site-packages/astroid/as_string.py | 631 -- .../venv/Lib/site-packages/astroid/bases.py | 548 -- .../__pycache__/brain_argparse.cpython-38.pyc | Bin 1092 -> 0 bytes .../__pycache__/brain_attrs.cpython-38.pyc | Bin 1589 -> 0 bytes .../__pycache__/brain_boto3.cpython-38.pyc | Bin 920 -> 0 bytes .../brain_builtin_inference.cpython-38.pyc | Bin 20663 -> 0 bytes .../brain_collections.cpython-38.pyc | Bin 2518 -> 0 bytes .../__pycache__/brain_crypt.cpython-38.pyc | Bin 860 -> 0 bytes .../__pycache__/brain_curses.cpython-38.pyc | Bin 3376 -> 0 bytes .../brain_dataclasses.cpython-38.pyc | Bin 1292 -> 0 bytes .../__pycache__/brain_dateutil.cpython-38.pyc | Bin 694 -> 0 bytes .../__pycache__/brain_fstrings.cpython-38.pyc | Bin 1574 -> 0 bytes .../brain_functools.cpython-38.pyc | Bin 4670 -> 0 bytes .../brain/__pycache__/brain_gi.cpython-38.pyc | Bin 4430 -> 0 bytes .../__pycache__/brain_hashlib.cpython-38.pyc | Bin 1954 -> 0 bytes .../__pycache__/brain_http.cpython-38.pyc | Bin 10511 -> 0 bytes .../brain/__pycache__/brain_io.cpython-38.pyc | Bin 1326 -> 0 bytes .../brain_mechanize.cpython-38.pyc | Bin 728 -> 0 bytes .../brain_multiprocessing.cpython-38.pyc | Bin 2546 -> 0 bytes .../brain_namedtuple_enum.cpython-38.pyc | Bin 11677 -> 0 bytes .../__pycache__/brain_nose.cpython-38.pyc | Bin 2081 -> 0 bytes ...rain_numpy_core_fromnumeric.cpython-38.pyc | Bin 639 -> 0 bytes ...in_numpy_core_function_base.cpython-38.pyc | Bin 1033 -> 0 bytes ...brain_numpy_core_multiarray.cpython-38.pyc | Bin 3245 -> 0 bytes .../brain_numpy_core_numeric.cpython-38.pyc | Bin 1277 -> 0 bytes ...ain_numpy_core_numerictypes.cpython-38.pyc | Bin 7741 -> 0 bytes .../brain_numpy_core_umath.cpython-38.pyc | Bin 4383 -> 0 bytes .../brain_numpy_ndarray.cpython-38.pyc | Bin 8378 -> 0 bytes .../brain_numpy_random_mtrand.cpython-38.pyc | Bin 3247 -> 0 bytes .../brain_numpy_utils.cpython-38.pyc | Bin 1872 -> 0 bytes .../brain_pkg_resources.cpython-38.pyc | Bin 2197 -> 0 bytes .../__pycache__/brain_pytest.cpython-38.pyc | Bin 2169 -> 0 bytes .../brain/__pycache__/brain_qt.cpython-38.pyc | Bin 2107 -> 0 bytes .../__pycache__/brain_random.cpython-38.pyc | Bin 2197 -> 0 bytes .../brain/__pycache__/brain_re.cpython-38.pyc | Bin 1076 -> 0 bytes .../brain_responses.cpython-38.pyc | Bin 1781 -> 0 bytes .../brain_scipy_signal.cpython-38.pyc | Bin 2194 -> 0 bytes .../__pycache__/brain_six.cpython-38.pyc | Bin 5576 -> 0 bytes .../__pycache__/brain_ssl.cpython-38.pyc | Bin 3608 -> 0 bytes .../brain_subprocess.cpython-38.pyc | Bin 4204 -> 0 bytes .../brain_threading.cpython-38.pyc | Bin 755 -> 0 bytes .../__pycache__/brain_typing.cpython-38.pyc | Bin 2363 -> 0 bytes .../__pycache__/brain_uuid.cpython-38.pyc | Bin 645 -> 0 bytes .../astroid/brain/brain_argparse.py | 33 - .../astroid/brain/brain_attrs.py | 65 - .../astroid/brain/brain_boto3.py | 28 - .../astroid/brain/brain_builtin_inference.py | 873 -- .../astroid/brain/brain_collections.py | 75 - .../astroid/brain/brain_crypt.py | 26 - .../astroid/brain/brain_curses.py | 179 - .../astroid/brain/brain_dataclasses.py | 50 - .../astroid/brain/brain_dateutil.py | 28 - .../astroid/brain/brain_fstrings.py | 51 - .../astroid/brain/brain_functools.py | 159 - .../site-packages/astroid/brain/brain_gi.py | 253 - .../astroid/brain/brain_hashlib.py | 69 - .../site-packages/astroid/brain/brain_http.py | 211 - .../site-packages/astroid/brain/brain_io.py | 45 - .../astroid/brain/brain_mechanize.py | 29 - .../astroid/brain/brain_multiprocessing.py | 107 - .../astroid/brain/brain_namedtuple_enum.py | 455 - .../site-packages/astroid/brain/brain_nose.py | 77 - .../brain/brain_numpy_core_fromnumeric.py | 23 - .../brain/brain_numpy_core_function_base.py | 29 - .../brain/brain_numpy_core_multiarray.py | 92 - .../astroid/brain/brain_numpy_core_numeric.py | 43 - .../brain/brain_numpy_core_numerictypes.py | 254 - .../astroid/brain/brain_numpy_core_umath.py | 147 - .../astroid/brain/brain_numpy_ndarray.py | 153 - .../brain/brain_numpy_random_mtrand.py | 70 - .../astroid/brain/brain_numpy_utils.py | 65 - .../astroid/brain/brain_pkg_resources.py | 75 - .../astroid/brain/brain_pytest.py | 88 - .../site-packages/astroid/brain/brain_qt.py | 83 - .../astroid/brain/brain_random.py | 75 - .../site-packages/astroid/brain/brain_re.py | 36 - .../astroid/brain/brain_responses.py | 73 - .../astroid/brain/brain_scipy_signal.py | 89 - .../site-packages/astroid/brain/brain_six.py | 201 - .../site-packages/astroid/brain/brain_ssl.py | 75 - .../astroid/brain/brain_subprocess.py | 146 - .../astroid/brain/brain_threading.py | 31 - .../astroid/brain/brain_typing.py | 96 - .../site-packages/astroid/brain/brain_uuid.py | 20 - .../venv/Lib/site-packages/astroid/builder.py | 455 - .../venv/Lib/site-packages/astroid/context.py | 179 - .../Lib/site-packages/astroid/decorators.py | 142 - .../Lib/site-packages/astroid/exceptions.py | 230 - .../venv/Lib/site-packages/astroid/helpers.py | 282 - .../Lib/site-packages/astroid/inference.py | 994 -- .../astroid/interpreter/__init__.py | 0 .../__pycache__/__init__.cpython-38.pyc | Bin 188 -> 0 bytes .../__pycache__/dunder_lookup.cpython-38.pyc | Bin 2143 -> 0 bytes .../__pycache__/objectmodel.cpython-38.pyc | Bin 26944 -> 0 bytes .../astroid/interpreter/_import/__init__.py | 0 .../__pycache__/__init__.cpython-38.pyc | Bin 196 -> 0 bytes .../_import/__pycache__/spec.cpython-38.pyc | Bin 9398 -> 0 bytes .../_import/__pycache__/util.cpython-38.pyc | Bin 416 -> 0 bytes .../astroid/interpreter/_import/spec.py | 346 - .../astroid/interpreter/_import/util.py | 10 - .../astroid/interpreter/dunder_lookup.py | 66 - .../astroid/interpreter/objectmodel.py | 801 -- .../venv/Lib/site-packages/astroid/manager.py | 350 - .../venv/Lib/site-packages/astroid/mixins.py | 160 - .../Lib/site-packages/astroid/modutils.py | 690 -- .../Lib/site-packages/astroid/node_classes.py | 4862 ---------- .../venv/Lib/site-packages/astroid/nodes.py | 176 - .../venv/Lib/site-packages/astroid/objects.py | 314 - .../Lib/site-packages/astroid/protocols.py | 780 -- .../Lib/site-packages/astroid/raw_building.py | 483 - .../Lib/site-packages/astroid/rebuilder.py | 1010 -- .../Lib/site-packages/astroid/scoped_nodes.py | 2927 ------ .../Lib/site-packages/astroid/test_utils.py | 73 - .../Lib/site-packages/astroid/transforms.py | 90 - .../venv/Lib/site-packages/astroid/util.py | 164 - .../beautifulsoup4-4.9.1.dist-info/AUTHORS | 49 - .../COPYING.txt | 27 - .../beautifulsoup4-4.9.1.dist-info/INSTALLER | 1 - .../beautifulsoup4-4.9.1.dist-info/LICENSE | 30 - .../beautifulsoup4-4.9.1.dist-info/METADATA | 131 - .../beautifulsoup4-4.9.1.dist-info/RECORD | 44 - .../beautifulsoup4-4.9.1.dist-info/WHEEL | 5 - .../top_level.txt | 1 - .../bs4-0.0.1-py3.8.egg-info/PKG-INFO | 21 - .../bs4-0.0.1-py3.8.egg-info/SOURCES.txt | 7 - .../dependency_links.txt | 1 - .../installed-files.txt | 5 - .../bs4-0.0.1-py3.8.egg-info/requires.txt | 1 - .../bs4-0.0.1-py3.8.egg-info/top_level.txt | 1 - .../venv/Lib/site-packages/bs4/__init__.py | 777 -- .../bs4/__pycache__/__init__.cpython-38.pyc | Bin 22682 -> 0 bytes .../bs4/__pycache__/dammit.cpython-38.pyc | Bin 21597 -> 0 bytes .../bs4/__pycache__/diagnose.cpython-38.pyc | Bin 8451 -> 0 bytes .../bs4/__pycache__/element.cpython-38.pyc | Bin 62817 -> 0 bytes .../bs4/__pycache__/formatter.cpython-38.pyc | Bin 5452 -> 0 bytes .../bs4/__pycache__/testing.cpython-38.pyc | Bin 43228 -> 0 bytes .../Lib/site-packages/bs4/builder/__init__.py | 520 -- .../__pycache__/__init__.cpython-38.pyc | Bin 15473 -> 0 bytes .../__pycache__/_html5lib.cpython-38.pyc | Bin 12498 -> 0 bytes .../__pycache__/_htmlparser.cpython-38.pyc | Bin 12998 -> 0 bytes .../builder/__pycache__/_lxml.cpython-38.pyc | Bin 9458 -> 0 bytes .../site-packages/bs4/builder/_html5lib.py | 467 - .../site-packages/bs4/builder/_htmlparser.py | 477 - .../Lib/site-packages/bs4/builder/_lxml.py | 332 - .../venv/Lib/site-packages/bs4/dammit.py | 939 -- .../venv/Lib/site-packages/bs4/diagnose.py | 242 - .../venv/Lib/site-packages/bs4/element.py | 2162 ----- .../venv/Lib/site-packages/bs4/formatter.py | 152 - .../venv/Lib/site-packages/bs4/testing.py | 1077 --- .../Lib/site-packages/bs4/tests/__init__.py | 1 - .../tests/__pycache__/__init__.cpython-38.pyc | Bin 218 -> 0 bytes .../test_builder_registry.cpython-38.pyc | Bin 4990 -> 0 bytes .../__pycache__/test_docs.cpython-38.pyc | Bin 452 -> 0 bytes .../__pycache__/test_html5lib.cpython-38.pyc | Bin 7293 -> 0 bytes .../test_htmlparser.cpython-38.pyc | Bin 4066 -> 0 bytes .../__pycache__/test_lxml.cpython-38.pyc | Bin 3974 -> 0 bytes .../__pycache__/test_soup.cpython-38.pyc | Bin 27737 -> 0 bytes .../__pycache__/test_tree.cpython-38.pyc | Bin 92922 -> 0 bytes .../bs4/tests/test_builder_registry.py | 147 - .../Lib/site-packages/bs4/tests/test_docs.py | 36 - .../site-packages/bs4/tests/test_html5lib.py | 190 - .../bs4/tests/test_htmlparser.py | 97 - .../Lib/site-packages/bs4/tests/test_lxml.py | 115 - .../Lib/site-packages/bs4/tests/test_soup.py | 728 -- .../Lib/site-packages/bs4/tests/test_tree.py | 2324 ----- .../certifi-2020.4.5.2.dist-info/INSTALLER | 1 - .../certifi-2020.4.5.2.dist-info/LICENSE | 21 - .../certifi-2020.4.5.2.dist-info/METADATA | 82 - .../certifi-2020.4.5.2.dist-info/RECORD | 13 - .../certifi-2020.4.5.2.dist-info/WHEEL | 6 - .../top_level.txt | 1 - .../Lib/site-packages/certifi/__init__.py | 3 - .../Lib/site-packages/certifi/__main__.py | 12 - .../__pycache__/__init__.cpython-38.pyc | Bin 262 -> 0 bytes .../__pycache__/__main__.cpython-38.pyc | Bin 422 -> 0 bytes .../certifi/__pycache__/core.cpython-38.pyc | Bin 1141 -> 0 bytes .../venv/Lib/site-packages/certifi/cacert.pem | 4641 --------- .../venv/Lib/site-packages/certifi/core.py | 60 - .../chardet-3.0.4.dist-info/DESCRIPTION.rst | 70 - .../chardet-3.0.4.dist-info/INSTALLER | 1 - .../chardet-3.0.4.dist-info/METADATA | 96 - .../chardet-3.0.4.dist-info/RECORD | 91 - .../chardet-3.0.4.dist-info/WHEEL | 6 - .../chardet-3.0.4.dist-info/entry_points.txt | 3 - .../chardet-3.0.4.dist-info/metadata.json | 1 - .../chardet-3.0.4.dist-info/top_level.txt | 1 - .../Lib/site-packages/chardet/__init__.py | 39 - .../__pycache__/__init__.cpython-38.pyc | Bin 834 -> 0 bytes .../__pycache__/big5freq.cpython-38.pyc | Bin 27163 -> 0 bytes .../__pycache__/big5prober.cpython-38.pyc | Bin 1118 -> 0 bytes .../chardistribution.cpython-38.pyc | Bin 6204 -> 0 bytes .../charsetgroupprober.cpython-38.pyc | Bin 2235 -> 0 bytes .../__pycache__/charsetprober.cpython-38.pyc | Bin 3467 -> 0 bytes .../codingstatemachine.cpython-38.pyc | Bin 2894 -> 0 bytes .../chardet/__pycache__/compat.cpython-38.pyc | Bin 339 -> 0 bytes .../__pycache__/cp949prober.cpython-38.pyc | Bin 1125 -> 0 bytes .../chardet/__pycache__/enums.cpython-38.pyc | Bin 2632 -> 0 bytes .../__pycache__/escprober.cpython-38.pyc | Bin 2617 -> 0 bytes .../chardet/__pycache__/escsm.cpython-38.pyc | Bin 7458 -> 0 bytes .../__pycache__/eucjpprober.cpython-38.pyc | Bin 2435 -> 0 bytes .../__pycache__/euckrfreq.cpython-38.pyc | Bin 12047 -> 0 bytes .../__pycache__/euckrprober.cpython-38.pyc | Bin 1126 -> 0 bytes .../__pycache__/euctwfreq.cpython-38.pyc | Bin 27167 -> 0 bytes .../__pycache__/euctwprober.cpython-38.pyc | Bin 1126 -> 0 bytes .../__pycache__/gb2312freq.cpython-38.pyc | Bin 19091 -> 0 bytes .../__pycache__/gb2312prober.cpython-38.pyc | Bin 1134 -> 0 bytes .../__pycache__/hebrewprober.cpython-38.pyc | Bin 3007 -> 0 bytes .../__pycache__/jisfreq.cpython-38.pyc | Bin 22119 -> 0 bytes .../chardet/__pycache__/jpcntx.cpython-38.pyc | Bin 37592 -> 0 bytes .../langbulgarianmodel.cpython-38.pyc | Bin 23616 -> 0 bytes .../langcyrillicmodel.cpython-38.pyc | Bin 29080 -> 0 bytes .../__pycache__/langgreekmodel.cpython-38.pyc | Bin 23574 -> 0 bytes .../langhebrewmodel.cpython-38.pyc | Bin 22201 -> 0 bytes .../langhungarianmodel.cpython-38.pyc | Bin 23602 -> 0 bytes .../__pycache__/langthaimodel.cpython-38.pyc | Bin 22180 -> 0 bytes .../langturkishmodel.cpython-38.pyc | Bin 22203 -> 0 bytes .../__pycache__/latin1prober.cpython-38.pyc | Bin 3387 -> 0 bytes .../mbcharsetprober.cpython-38.pyc | Bin 2250 -> 0 bytes .../mbcsgroupprober.cpython-38.pyc | Bin 1115 -> 0 bytes .../chardet/__pycache__/mbcssm.cpython-38.pyc | Bin 16738 -> 0 bytes .../sbcharsetprober.cpython-38.pyc | Bin 3003 -> 0 bytes .../sbcsgroupprober.cpython-38.pyc | Bin 1613 -> 0 bytes .../__pycache__/sjisprober.cpython-38.pyc | Bin 2471 -> 0 bytes .../universaldetector.cpython-38.pyc | Bin 5815 -> 0 bytes .../__pycache__/utf8prober.cpython-38.pyc | Bin 1976 -> 0 bytes .../__pycache__/version.cpython-38.pyc | Bin 423 -> 0 bytes .../Lib/site-packages/chardet/big5freq.py | 386 - .../Lib/site-packages/chardet/big5prober.py | 47 - .../site-packages/chardet/chardistribution.py | 233 - .../chardet/charsetgroupprober.py | 106 - .../site-packages/chardet/charsetprober.py | 145 - .../Lib/site-packages/chardet/cli/__init__.py | 1 - .../cli/__pycache__/__init__.cpython-38.pyc | Bin 177 -> 0 bytes .../cli/__pycache__/chardetect.cpython-38.pyc | Bin 2642 -> 0 bytes .../site-packages/chardet/cli/chardetect.py | 85 - .../chardet/codingstatemachine.py | 88 - .../venv/Lib/site-packages/chardet/compat.py | 34 - .../Lib/site-packages/chardet/cp949prober.py | 49 - .../venv/Lib/site-packages/chardet/enums.py | 76 - .../Lib/site-packages/chardet/escprober.py | 101 - .../venv/Lib/site-packages/chardet/escsm.py | 246 - .../Lib/site-packages/chardet/eucjpprober.py | 92 - .../Lib/site-packages/chardet/euckrfreq.py | 195 - .../Lib/site-packages/chardet/euckrprober.py | 47 - .../Lib/site-packages/chardet/euctwfreq.py | 387 - .../Lib/site-packages/chardet/euctwprober.py | 46 - .../Lib/site-packages/chardet/gb2312freq.py | 283 - .../Lib/site-packages/chardet/gb2312prober.py | 46 - .../Lib/site-packages/chardet/hebrewprober.py | 292 - .../venv/Lib/site-packages/chardet/jisfreq.py | 325 - .../venv/Lib/site-packages/chardet/jpcntx.py | 233 - .../chardet/langbulgarianmodel.py | 228 - .../chardet/langcyrillicmodel.py | 333 - .../site-packages/chardet/langgreekmodel.py | 225 - .../site-packages/chardet/langhebrewmodel.py | 200 - .../chardet/langhungarianmodel.py | 225 - .../site-packages/chardet/langthaimodel.py | 199 - .../site-packages/chardet/langturkishmodel.py | 193 - .../Lib/site-packages/chardet/latin1prober.py | 145 - .../site-packages/chardet/mbcharsetprober.py | 91 - .../site-packages/chardet/mbcsgroupprober.py | 54 - .../venv/Lib/site-packages/chardet/mbcssm.py | 572 -- .../site-packages/chardet/sbcharsetprober.py | 132 - .../site-packages/chardet/sbcsgroupprober.py | 73 - .../Lib/site-packages/chardet/sjisprober.py | 92 - .../chardet/universaldetector.py | 286 - .../Lib/site-packages/chardet/utf8prober.py | 82 - .../venv/Lib/site-packages/chardet/version.py | 9 - .../click-7.1.2.dist-info/INSTALLER | 1 - .../click-7.1.2.dist-info/LICENSE.rst | 28 - .../click-7.1.2.dist-info/METADATA | 102 - .../click-7.1.2.dist-info/RECORD | 40 - .../site-packages/click-7.1.2.dist-info/WHEEL | 6 - .../click-7.1.2.dist-info/top_level.txt | 1 - .../venv/Lib/site-packages/click/__init__.py | 79 - .../click/__pycache__/__init__.cpython-38.pyc | Bin 2733 -> 0 bytes .../__pycache__/_bashcomplete.cpython-38.pyc | Bin 10063 -> 0 bytes .../click/__pycache__/_compat.cpython-38.pyc | Bin 18847 -> 0 bytes .../__pycache__/_termui_impl.cpython-38.pyc | Bin 14298 -> 0 bytes .../__pycache__/_textwrap.cpython-38.pyc | Bin 1345 -> 0 bytes .../__pycache__/_unicodefun.cpython-38.pyc | Bin 3340 -> 0 bytes .../__pycache__/_winconsole.cpython-38.pyc | Bin 9510 -> 0 bytes .../click/__pycache__/core.cpython-38.pyc | Bin 62084 -> 0 bytes .../__pycache__/decorators.cpython-38.pyc | Bin 11554 -> 0 bytes .../__pycache__/exceptions.cpython-38.pyc | Bin 9114 -> 0 bytes .../__pycache__/formatting.cpython-38.pyc | Bin 8762 -> 0 bytes .../click/__pycache__/globals.cpython-38.pyc | Bin 1886 -> 0 bytes .../click/__pycache__/parser.cpython-38.pyc | Bin 11875 -> 0 bytes .../click/__pycache__/termui.cpython-38.pyc | Bin 21652 -> 0 bytes .../click/__pycache__/testing.cpython-38.pyc | Bin 11759 -> 0 bytes .../click/__pycache__/types.cpython-38.pyc | Bin 22294 -> 0 bytes .../click/__pycache__/utils.cpython-38.pyc | Bin 15608 -> 0 bytes .../Lib/site-packages/click/_bashcomplete.py | 375 - .../venv/Lib/site-packages/click/_compat.py | 786 -- .../Lib/site-packages/click/_termui_impl.py | 657 -- .../venv/Lib/site-packages/click/_textwrap.py | 37 - .../Lib/site-packages/click/_unicodefun.py | 131 - .../Lib/site-packages/click/_winconsole.py | 370 - .../venv/Lib/site-packages/click/core.py | 2030 ---- .../Lib/site-packages/click/decorators.py | 333 - .../Lib/site-packages/click/exceptions.py | 253 - .../Lib/site-packages/click/formatting.py | 283 - .../venv/Lib/site-packages/click/globals.py | 47 - .../venv/Lib/site-packages/click/parser.py | 428 - .../venv/Lib/site-packages/click/termui.py | 681 -- .../venv/Lib/site-packages/click/testing.py | 382 - .../venv/Lib/site-packages/click/types.py | 762 -- .../venv/Lib/site-packages/click/utils.py | 455 - .../colorama-0.4.3.dist-info/INSTALLER | 1 - .../colorama-0.4.3.dist-info/LICENSE.txt | 27 - .../colorama-0.4.3.dist-info/METADATA | 411 - .../colorama-0.4.3.dist-info/RECORD | 18 - .../colorama-0.4.3.dist-info/WHEEL | 6 - .../colorama-0.4.3.dist-info/top_level.txt | 1 - .../Lib/site-packages/colorama/__init__.py | 6 - .../__pycache__/__init__.cpython-38.pyc | Bin 428 -> 0 bytes .../colorama/__pycache__/ansi.cpython-38.pyc | Bin 3213 -> 0 bytes .../__pycache__/ansitowin32.cpython-38.pyc | Bin 7722 -> 0 bytes .../__pycache__/initialise.cpython-38.pyc | Bin 1689 -> 0 bytes .../colorama/__pycache__/win32.cpython-38.pyc | Bin 3965 -> 0 bytes .../__pycache__/winterm.cpython-38.pyc | Bin 4649 -> 0 bytes .../venv/Lib/site-packages/colorama/ansi.py | 102 - .../Lib/site-packages/colorama/ansitowin32.py | 257 - .../Lib/site-packages/colorama/initialise.py | 80 - .../venv/Lib/site-packages/colorama/win32.py | 152 - .../Lib/site-packages/colorama/winterm.py | 169 - .../venv/Lib/site-packages/easy_install.py | 5 - .../venv/Lib/site-packages/flask/__init__.py | 60 - .../venv/Lib/site-packages/flask/__main__.py | 15 - .../flask/__pycache__/__init__.cpython-38.pyc | Bin 2130 -> 0 bytes .../flask/__pycache__/__main__.cpython-38.pyc | Bin 417 -> 0 bytes .../flask/__pycache__/_compat.cpython-38.pyc | Bin 4698 -> 0 bytes .../flask/__pycache__/app.cpython-38.pyc | Bin 74813 -> 0 bytes .../__pycache__/blueprints.cpython-38.pyc | Bin 22775 -> 0 bytes .../flask/__pycache__/cli.cpython-38.pyc | Bin 26545 -> 0 bytes .../flask/__pycache__/config.cpython-38.pyc | Bin 10192 -> 0 bytes .../flask/__pycache__/ctx.cpython-38.pyc | Bin 14420 -> 0 bytes .../__pycache__/debughelpers.cpython-38.pyc | Bin 6638 -> 0 bytes .../flask/__pycache__/globals.cpython-38.pyc | Bin 1743 -> 0 bytes .../flask/__pycache__/helpers.cpython-38.pyc | Bin 34798 -> 0 bytes .../flask/__pycache__/logging.cpython-38.pyc | Bin 3157 -> 0 bytes .../flask/__pycache__/sessions.cpython-38.pyc | Bin 12301 -> 0 bytes .../flask/__pycache__/signals.cpython-38.pyc | Bin 2413 -> 0 bytes .../__pycache__/templating.cpython-38.pyc | Bin 5034 -> 0 bytes .../flask/__pycache__/testing.cpython-38.pyc | Bin 8760 -> 0 bytes .../flask/__pycache__/views.cpython-38.pyc | Bin 4813 -> 0 bytes .../flask/__pycache__/wrappers.cpython-38.pyc | Bin 4342 -> 0 bytes .../venv/Lib/site-packages/flask/_compat.py | 145 - .../venv/Lib/site-packages/flask/app.py | 2467 ----- .../Lib/site-packages/flask/blueprints.py | 569 -- .../venv/Lib/site-packages/flask/cli.py | 971 -- .../venv/Lib/site-packages/flask/config.py | 269 - .../venv/Lib/site-packages/flask/ctx.py | 475 - .../Lib/site-packages/flask/debughelpers.py | 183 - .../venv/Lib/site-packages/flask/globals.py | 62 - .../venv/Lib/site-packages/flask/helpers.py | 1155 --- .../Lib/site-packages/flask/json/__init__.py | 376 - .../json/__pycache__/__init__.cpython-38.pyc | Bin 11648 -> 0 bytes .../flask/json/__pycache__/tag.cpython-38.pyc | Bin 10898 -> 0 bytes .../venv/Lib/site-packages/flask/json/tag.py | 309 - .../venv/Lib/site-packages/flask/logging.py | 109 - .../venv/Lib/site-packages/flask/sessions.py | 388 - .../venv/Lib/site-packages/flask/signals.py | 65 - .../Lib/site-packages/flask/templating.py | 155 - .../venv/Lib/site-packages/flask/testing.py | 283 - .../venv/Lib/site-packages/flask/views.py | 163 - .../venv/Lib/site-packages/flask/wrappers.py | 137 - .../idna-2.9.dist-info/INSTALLER | 1 - .../idna-2.9.dist-info/LICENSE.rst | 34 - .../site-packages/idna-2.9.dist-info/METADATA | 243 - .../site-packages/idna-2.9.dist-info/RECORD | 22 - .../site-packages/idna-2.9.dist-info/WHEEL | 6 - .../idna-2.9.dist-info/top_level.txt | 1 - .../venv/Lib/site-packages/idna/__init__.py | 2 - .../idna/__pycache__/__init__.cpython-38.pyc | Bin 242 -> 0 bytes .../idna/__pycache__/codec.cpython-38.pyc | Bin 2890 -> 0 bytes .../idna/__pycache__/compat.cpython-38.pyc | Bin 608 -> 0 bytes .../idna/__pycache__/core.cpython-38.pyc | Bin 9111 -> 0 bytes .../idna/__pycache__/idnadata.cpython-38.pyc | Bin 21520 -> 0 bytes .../idna/__pycache__/intranges.cpython-38.pyc | Bin 1794 -> 0 bytes .../__pycache__/package_data.cpython-38.pyc | Bin 196 -> 0 bytes .../idna/__pycache__/uts46data.cpython-38.pyc | Bin 176716 -> 0 bytes .../venv/Lib/site-packages/idna/codec.py | 118 - .../venv/Lib/site-packages/idna/compat.py | 12 - .../venv/Lib/site-packages/idna/core.py | 398 - .../venv/Lib/site-packages/idna/idnadata.py | 1991 ---- .../venv/Lib/site-packages/idna/intranges.py | 53 - .../Lib/site-packages/idna/package_data.py | 2 - .../venv/Lib/site-packages/idna/uts46data.py | 8317 ----------------- .../isort-4.3.21.dist-info/INSTALLER | 1 - .../isort-4.3.21.dist-info/LICENSE | 21 - .../isort-4.3.21.dist-info/METADATA | 697 -- .../isort-4.3.21.dist-info/RECORD | 30 - .../isort-4.3.21.dist-info/WHEEL | 6 - .../isort-4.3.21.dist-info/entry_points.txt | 9 - .../isort-4.3.21.dist-info/top_level.txt | 1 - .../venv/Lib/site-packages/isort/__init__.py | 28 - .../venv/Lib/site-packages/isort/__main__.py | 9 - .../isort/__pycache__/__init__.cpython-38.pyc | Bin 1603 -> 0 bytes .../isort/__pycache__/__main__.cpython-38.pyc | Bin 349 -> 0 bytes .../isort/__pycache__/finders.cpython-38.pyc | Bin 12051 -> 0 bytes .../isort/__pycache__/hooks.cpython-38.pyc | Bin 3227 -> 0 bytes .../isort/__pycache__/isort.cpython-38.pyc | Bin 29924 -> 0 bytes .../isort/__pycache__/main.cpython-38.pyc | Bin 16850 -> 0 bytes .../isort/__pycache__/natural.cpython-38.pyc | Bin 2332 -> 0 bytes .../__pycache__/pie_slice.cpython-38.pyc | Bin 5070 -> 0 bytes .../__pycache__/pylama_isort.cpython-38.pyc | Bin 1048 -> 0 bytes .../isort/__pycache__/settings.cpython-38.pyc | Bin 12804 -> 0 bytes .../isort/__pycache__/utils.cpython-38.pyc | Bin 1610 -> 0 bytes .../venv/Lib/site-packages/isort/finders.py | 382 - .../venv/Lib/site-packages/isort/hooks.py | 91 - .../venv/Lib/site-packages/isort/isort.py | 1060 --- .../venv/Lib/site-packages/isort/main.py | 401 - .../venv/Lib/site-packages/isort/natural.py | 47 - .../venv/Lib/site-packages/isort/pie_slice.py | 154 - .../Lib/site-packages/isort/pylama_isort.py | 29 - .../venv/Lib/site-packages/isort/settings.py | 356 - .../venv/Lib/site-packages/isort/utils.py | 53 - .../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-38.pyc | Bin 1009 -> 0 bytes .../__pycache__/_compat.cpython-38.pyc | Bin 1171 -> 0 bytes .../__pycache__/_json.cpython-38.pyc | Bin 870 -> 0 bytes .../__pycache__/encoding.cpython-38.pyc | Bin 1656 -> 0 bytes .../__pycache__/exc.cpython-38.pyc | Bin 3217 -> 0 bytes .../__pycache__/jws.cpython-38.pyc | Bin 6780 -> 0 bytes .../__pycache__/serializer.cpython-38.pyc | Bin 8126 -> 0 bytes .../__pycache__/signer.cpython-38.pyc | Bin 5852 -> 0 bytes .../__pycache__/timed.cpython-38.pyc | Bin 4622 -> 0 bytes .../__pycache__/url_safe.cpython-38.pyc | Bin 2558 -> 0 bytes .../Lib/site-packages/itsdangerous/_compat.py | 46 - .../Lib/site-packages/itsdangerous/_json.py | 18 - .../site-packages/itsdangerous/encoding.py | 49 - .../Lib/site-packages/itsdangerous/exc.py | 98 - .../Lib/site-packages/itsdangerous/jws.py | 218 - .../site-packages/itsdangerous/serializer.py | 233 - .../Lib/site-packages/itsdangerous/signer.py | 179 - .../Lib/site-packages/itsdangerous/timed.py | 147 - .../site-packages/itsdangerous/url_safe.py | 65 - .../venv/Lib/site-packages/jinja2/__init__.py | 44 - .../__pycache__/__init__.cpython-38.pyc | Bin 1812 -> 0 bytes .../jinja2/__pycache__/_compat.cpython-38.pyc | Bin 3907 -> 0 bytes .../__pycache__/_identifier.cpython-38.pyc | Bin 1895 -> 0 bytes .../__pycache__/asyncfilters.cpython-38.pyc | Bin 4854 -> 0 bytes .../__pycache__/asyncsupport.cpython-38.pyc | Bin 8220 -> 0 bytes .../jinja2/__pycache__/bccache.cpython-38.pyc | Bin 12242 -> 0 bytes .../__pycache__/compiler.cpython-38.pyc | Bin 48352 -> 0 bytes .../__pycache__/constants.cpython-38.pyc | Bin 1535 -> 0 bytes .../jinja2/__pycache__/debug.cpython-38.pyc | Bin 5175 -> 0 bytes .../__pycache__/defaults.cpython-38.pyc | Bin 1115 -> 0 bytes .../__pycache__/environment.cpython-38.pyc | Bin 44012 -> 0 bytes .../__pycache__/exceptions.cpython-38.pyc | Bin 5643 -> 0 bytes .../jinja2/__pycache__/ext.cpython-38.pyc | Bin 21507 -> 0 bytes .../jinja2/__pycache__/filters.cpython-38.pyc | Bin 39813 -> 0 bytes .../__pycache__/idtracking.cpython-38.pyc | Bin 9873 -> 0 bytes .../jinja2/__pycache__/lexer.cpython-38.pyc | Bin 19387 -> 0 bytes .../jinja2/__pycache__/loaders.cpython-38.pyc | Bin 17000 -> 0 bytes .../jinja2/__pycache__/meta.cpython-38.pyc | Bin 3487 -> 0 bytes .../__pycache__/nativetypes.cpython-38.pyc | Bin 3921 -> 0 bytes .../jinja2/__pycache__/nodes.cpython-38.pyc | Bin 35418 -> 0 bytes .../__pycache__/optimizer.cpython-38.pyc | Bin 1657 -> 0 bytes .../jinja2/__pycache__/parser.cpython-38.pyc | Bin 24974 -> 0 bytes .../jinja2/__pycache__/runtime.cpython-38.pyc | Bin 27650 -> 0 bytes .../jinja2/__pycache__/sandbox.cpython-38.pyc | Bin 14130 -> 0 bytes .../jinja2/__pycache__/tests.cpython-38.pyc | Bin 5372 -> 0 bytes .../jinja2/__pycache__/utils.cpython-38.pyc | Bin 22849 -> 0 bytes .../jinja2/__pycache__/visitor.cpython-38.pyc | Bin 3300 -> 0 bytes .../venv/Lib/site-packages/jinja2/_compat.py | 132 - .../Lib/site-packages/jinja2/_identifier.py | 6 - .../Lib/site-packages/jinja2/asyncfilters.py | 158 - .../Lib/site-packages/jinja2/asyncsupport.py | 264 - .../venv/Lib/site-packages/jinja2/bccache.py | 350 - .../venv/Lib/site-packages/jinja2/compiler.py | 1843 ---- .../Lib/site-packages/jinja2/constants.py | 21 - .../venv/Lib/site-packages/jinja2/debug.py | 268 - .../venv/Lib/site-packages/jinja2/defaults.py | 44 - .../Lib/site-packages/jinja2/environment.py | 1362 --- .../Lib/site-packages/jinja2/exceptions.py | 177 - .../venv/Lib/site-packages/jinja2/ext.py | 704 -- .../venv/Lib/site-packages/jinja2/filters.py | 1382 --- .../Lib/site-packages/jinja2/idtracking.py | 290 - .../venv/Lib/site-packages/jinja2/lexer.py | 848 -- .../venv/Lib/site-packages/jinja2/loaders.py | 504 - .../venv/Lib/site-packages/jinja2/meta.py | 101 - .../Lib/site-packages/jinja2/nativetypes.py | 94 - .../venv/Lib/site-packages/jinja2/nodes.py | 1088 --- .../Lib/site-packages/jinja2/optimizer.py | 41 - .../venv/Lib/site-packages/jinja2/parser.py | 939 -- .../venv/Lib/site-packages/jinja2/runtime.py | 1011 -- .../venv/Lib/site-packages/jinja2/sandbox.py | 510 - .../venv/Lib/site-packages/jinja2/tests.py | 215 - .../venv/Lib/site-packages/jinja2/utils.py | 732 -- .../venv/Lib/site-packages/jinja2/visitor.py | 81 - .../AUTHORS.rst | 10 - .../INSTALLER | 1 - .../lazy_object_proxy-1.4.3.dist-info/LICENSE | 21 - .../METADATA | 166 - .../lazy_object_proxy-1.4.3.dist-info/RECORD | 20 - .../lazy_object_proxy-1.4.3.dist-info/WHEEL | 5 - .../top_level.txt | 1 - .../lazy_object_proxy/__init__.py | 23 - .../__pycache__/__init__.cpython-38.pyc | Bin 558 -> 0 bytes .../__pycache__/_version.cpython-38.pyc | Bin 203 -> 0 bytes .../__pycache__/compat.cpython-38.pyc | Bin 446 -> 0 bytes .../__pycache__/simple.cpython-38.pyc | Bin 7813 -> 0 bytes .../__pycache__/slots.cpython-38.pyc | Bin 15261 -> 0 bytes .../__pycache__/utils.cpython-38.pyc | Bin 798 -> 0 bytes .../lazy_object_proxy/_version.py | 4 - .../lazy_object_proxy/cext.cp38-win32.pyd | Bin 25088 -> 0 bytes .../site-packages/lazy_object_proxy/compat.py | 9 - .../site-packages/lazy_object_proxy/simple.py | 246 - .../site-packages/lazy_object_proxy/slots.py | 414 - .../site-packages/lazy_object_proxy/utils.py | 13 - .../Lib/site-packages/markupsafe/__init__.py | 327 - .../__pycache__/__init__.cpython-38.pyc | Bin 10963 -> 0 bytes .../__pycache__/_compat.cpython-38.pyc | Bin 772 -> 0 bytes .../__pycache__/_constants.cpython-38.pyc | Bin 4268 -> 0 bytes .../__pycache__/_native.cpython-38.pyc | Bin 2146 -> 0 bytes .../Lib/site-packages/markupsafe/_compat.py | 33 - .../site-packages/markupsafe/_constants.py | 264 - .../Lib/site-packages/markupsafe/_native.py | 69 - .../markupsafe/_speedups.cp38-win32.pyd | Bin 12800 -> 0 bytes .../mccabe-0.6.1.dist-info/DESCRIPTION.rst | 152 - .../mccabe-0.6.1.dist-info/INSTALLER | 1 - .../mccabe-0.6.1.dist-info/METADATA | 178 - .../mccabe-0.6.1.dist-info/RECORD | 10 - .../mccabe-0.6.1.dist-info/WHEEL | 6 - .../mccabe-0.6.1.dist-info/entry_points.txt | 3 - .../mccabe-0.6.1.dist-info/metadata.json | 1 - .../mccabe-0.6.1.dist-info/top_level.txt | 1 - .../venv/Lib/site-packages/mccabe.py | 347 - .../pip-19.2.3.dist-info/INSTALLER | 1 - .../pip-19.2.3.dist-info/LICENSE.txt | 20 - .../pip-19.2.3.dist-info/METADATA | 81 - .../site-packages/pip-19.2.3.dist-info/RECORD | 668 -- .../site-packages/pip-19.2.3.dist-info/WHEEL | 6 - .../pip-19.2.3.dist-info/entry_points.txt | 5 - .../pip-19.2.3.dist-info/top_level.txt | 1 - .../venv/Lib/site-packages/pip/__init__.py | 1 - .../venv/Lib/site-packages/pip/__main__.py | 19 - .../pip/__pycache__/__init__.cpython-38.pyc | Bin 194 -> 0 bytes .../pip/__pycache__/__main__.cpython-38.pyc | Bin 446 -> 0 bytes .../site-packages/pip/_internal/__init__.py | 77 - .../__pycache__/__init__.cpython-38.pyc | Bin 1739 -> 0 bytes .../__pycache__/build_env.cpython-38.pyc | Bin 7515 -> 0 bytes .../__pycache__/cache.cpython-38.pyc | Bin 7127 -> 0 bytes .../__pycache__/configuration.cpython-38.pyc | Bin 10678 -> 0 bytes .../__pycache__/download.cpython-38.pyc | Bin 25965 -> 0 bytes .../__pycache__/exceptions.cpython-38.pyc | Bin 12526 -> 0 bytes .../__pycache__/index.cpython-38.pyc | Bin 37766 -> 0 bytes .../__pycache__/legacy_resolve.cpython-38.pyc | Bin 10585 -> 0 bytes .../__pycache__/locations.cpython-38.pyc | Bin 2974 -> 0 bytes .../__pycache__/pep425tags.cpython-38.pyc | Bin 8363 -> 0 bytes .../__pycache__/pyproject.cpython-38.pyc | Bin 3200 -> 0 bytes .../__pycache__/wheel.cpython-38.pyc | Bin 27526 -> 0 bytes .../site-packages/pip/_internal/build_env.py | 218 - .../Lib/site-packages/pip/_internal/cache.py | 224 - .../pip/_internal/cli/__init__.py | 4 - .../cli/__pycache__/__init__.cpython-38.pyc | Bin 269 -> 0 bytes .../__pycache__/autocompletion.cpython-38.pyc | Bin 5127 -> 0 bytes .../__pycache__/base_command.cpython-38.pyc | Bin 8302 -> 0 bytes .../cli/__pycache__/cmdoptions.cpython-38.pyc | Bin 20044 -> 0 bytes .../__pycache__/main_parser.cpython-38.pyc | Bin 2207 -> 0 bytes .../cli/__pycache__/parser.cpython-38.pyc | Bin 9010 -> 0 bytes .../__pycache__/status_codes.cpython-38.pyc | Bin 398 -> 0 bytes .../pip/_internal/cli/autocompletion.py | 152 - .../pip/_internal/cli/base_command.py | 346 - .../pip/_internal/cli/cmdoptions.py | 931 -- .../pip/_internal/cli/main_parser.py | 98 - .../site-packages/pip/_internal/cli/parser.py | 261 - .../pip/_internal/cli/status_codes.py | 8 - .../pip/_internal/commands/__init__.py | 81 - .../__pycache__/__init__.cpython-38.pyc | Bin 2588 -> 0 bytes .../commands/__pycache__/check.cpython-38.pyc | Bin 1330 -> 0 bytes .../__pycache__/completion.cpython-38.pyc | Bin 3109 -> 0 bytes .../__pycache__/configuration.cpython-38.pyc | Bin 7173 -> 0 bytes .../commands/__pycache__/debug.cpython-38.pyc | Bin 3381 -> 0 bytes .../__pycache__/download.cpython-38.pyc | Bin 4735 -> 0 bytes .../__pycache__/freeze.cpython-38.pyc | Bin 3028 -> 0 bytes .../commands/__pycache__/hash.cpython-38.pyc | Bin 2078 -> 0 bytes .../commands/__pycache__/help.cpython-38.pyc | Bin 1249 -> 0 bytes .../__pycache__/install.cpython-38.pyc | Bin 13076 -> 0 bytes .../commands/__pycache__/list.cpython-38.pyc | Bin 9017 -> 0 bytes .../__pycache__/search.cpython-38.pyc | Bin 4464 -> 0 bytes .../commands/__pycache__/show.cpython-38.pyc | Bin 5861 -> 0 bytes .../__pycache__/uninstall.cpython-38.pyc | Bin 2711 -> 0 bytes .../commands/__pycache__/wheel.cpython-38.pyc | Bin 4917 -> 0 bytes .../pip/_internal/commands/check.py | 41 - .../pip/_internal/commands/completion.py | 94 - .../pip/_internal/commands/configuration.py | 258 - .../pip/_internal/commands/debug.py | 114 - .../pip/_internal/commands/download.py | 168 - .../pip/_internal/commands/freeze.py | 101 - .../pip/_internal/commands/hash.py | 57 - .../pip/_internal/commands/help.py | 37 - .../pip/_internal/commands/install.py | 580 -- .../pip/_internal/commands/list.py | 311 - .../pip/_internal/commands/search.py | 139 - .../pip/_internal/commands/show.py | 168 - .../pip/_internal/commands/uninstall.py | 78 - .../pip/_internal/commands/wheel.py | 181 - .../pip/_internal/configuration.py | 417 - .../pip/_internal/distributions/__init__.py | 23 - .../__pycache__/__init__.cpython-38.pyc | Bin 858 -> 0 bytes .../__pycache__/base.cpython-38.pyc | Bin 1653 -> 0 bytes .../__pycache__/installed.cpython-38.pyc | Bin 993 -> 0 bytes .../__pycache__/source.cpython-38.pyc | Bin 3090 -> 0 bytes .../__pycache__/wheel.cpython-38.pyc | Bin 1057 -> 0 bytes .../pip/_internal/distributions/base.py | 33 - .../pip/_internal/distributions/installed.py | 15 - .../pip/_internal/distributions/source.py | 80 - .../pip/_internal/distributions/wheel.py | 17 - .../site-packages/pip/_internal/download.py | 1177 --- .../site-packages/pip/_internal/exceptions.py | 305 - .../Lib/site-packages/pip/_internal/index.py | 1508 --- .../pip/_internal/legacy_resolve.py | 457 - .../site-packages/pip/_internal/locations.py | 142 - .../pip/_internal/models/__init__.py | 2 - .../__pycache__/__init__.cpython-38.pyc | Bin 257 -> 0 bytes .../__pycache__/candidate.cpython-38.pyc | Bin 1491 -> 0 bytes .../__pycache__/format_control.cpython-38.pyc | Bin 2285 -> 0 bytes .../models/__pycache__/index.cpython-38.pyc | Bin 1179 -> 0 bytes .../models/__pycache__/link.cpython-38.pyc | Bin 6318 -> 0 bytes .../__pycache__/search_scope.cpython-38.pyc | Bin 3288 -> 0 bytes .../selection_prefs.cpython-38.pyc | Bin 1629 -> 0 bytes .../__pycache__/target_python.cpython-38.pyc | Bin 3233 -> 0 bytes .../pip/_internal/models/candidate.py | 36 - .../pip/_internal/models/format_control.py | 73 - .../pip/_internal/models/index.py | 31 - .../pip/_internal/models/link.py | 213 - .../pip/_internal/models/search_scope.py | 113 - .../pip/_internal/models/selection_prefs.py | 47 - .../pip/_internal/models/target_python.py | 106 - .../pip/_internal/operations/__init__.py | 0 .../__pycache__/__init__.cpython-38.pyc | Bin 193 -> 0 bytes .../__pycache__/check.cpython-38.pyc | Bin 3699 -> 0 bytes .../__pycache__/freeze.cpython-38.pyc | Bin 5763 -> 0 bytes .../__pycache__/prepare.cpython-38.pyc | Bin 5780 -> 0 bytes .../pip/_internal/operations/check.py | 159 - .../pip/_internal/operations/freeze.py | 253 - .../pip/_internal/operations/prepare.py | 287 - .../site-packages/pip/_internal/pep425tags.py | 384 - .../site-packages/pip/_internal/pyproject.py | 171 - .../pip/_internal/req/__init__.py | 78 - .../req/__pycache__/__init__.cpython-38.pyc | Bin 1733 -> 0 bytes .../__pycache__/constructors.cpython-38.pyc | Bin 8005 -> 0 bytes .../req/__pycache__/req_file.cpython-38.pyc | Bin 9410 -> 0 bytes .../__pycache__/req_install.cpython-38.pyc | Bin 25763 -> 0 bytes .../req/__pycache__/req_set.cpython-38.pyc | Bin 5726 -> 0 bytes .../__pycache__/req_tracker.cpython-38.pyc | Bin 3258 -> 0 bytes .../__pycache__/req_uninstall.cpython-38.pyc | Bin 17385 -> 0 bytes .../pip/_internal/req/constructors.py | 349 - .../pip/_internal/req/req_file.py | 399 - .../pip/_internal/req/req_install.py | 1035 -- .../pip/_internal/req/req_set.py | 193 - .../pip/_internal/req/req_tracker.py | 96 - .../pip/_internal/req/req_uninstall.py | 633 -- .../pip/_internal/utils/__init__.py | 0 .../utils/__pycache__/__init__.cpython-38.pyc | Bin 188 -> 0 bytes .../utils/__pycache__/appdirs.cpython-38.pyc | Bin 8067 -> 0 bytes .../utils/__pycache__/compat.cpython-38.pyc | Bin 6963 -> 0 bytes .../__pycache__/deprecation.cpython-38.pyc | Bin 2859 -> 0 bytes .../utils/__pycache__/encoding.cpython-38.pyc | Bin 1280 -> 0 bytes .../__pycache__/filesystem.cpython-38.pyc | Bin 659 -> 0 bytes .../utils/__pycache__/glibc.cpython-38.pyc | Bin 2290 -> 0 bytes .../utils/__pycache__/hashes.cpython-38.pyc | Bin 4177 -> 0 bytes .../utils/__pycache__/logging.cpython-38.pyc | Bin 9153 -> 0 bytes .../__pycache__/marker_files.cpython-38.pyc | Bin 799 -> 0 bytes .../utils/__pycache__/misc.cpython-38.pyc | Bin 29884 -> 0 bytes .../utils/__pycache__/models.cpython-38.pyc | Bin 1957 -> 0 bytes .../utils/__pycache__/outdated.cpython-38.pyc | Bin 4244 -> 0 bytes .../__pycache__/packaging.cpython-38.pyc | Bin 2641 -> 0 bytes .../setuptools_build.cpython-38.pyc | Bin 1050 -> 0 bytes .../utils/__pycache__/temp_dir.cpython-38.pyc | Bin 4908 -> 0 bytes .../utils/__pycache__/typing.cpython-38.pyc | Bin 1318 -> 0 bytes .../utils/__pycache__/ui.cpython-38.pyc | Bin 11843 -> 0 bytes .../__pycache__/virtualenv.cpython-38.pyc | Bin 911 -> 0 bytes .../pip/_internal/utils/appdirs.py | 268 - .../pip/_internal/utils/compat.py | 293 - .../pip/_internal/utils/deprecation.py | 100 - .../pip/_internal/utils/encoding.py | 39 - .../pip/_internal/utils/filesystem.py | 30 - .../pip/_internal/utils/glibc.py | 120 - .../pip/_internal/utils/hashes.py | 128 - .../pip/_internal/utils/logging.py | 394 - .../pip/_internal/utils/marker_files.py | 20 - .../site-packages/pip/_internal/utils/misc.py | 1201 --- .../pip/_internal/utils/models.py | 40 - .../pip/_internal/utils/outdated.py | 178 - .../pip/_internal/utils/packaging.py | 94 - .../pip/_internal/utils/setuptools_build.py | 36 - .../pip/_internal/utils/temp_dir.py | 155 - .../pip/_internal/utils/typing.py | 29 - .../site-packages/pip/_internal/utils/ui.py | 424 - .../pip/_internal/utils/virtualenv.py | 34 - .../pip/_internal/vcs/__init__.py | 12 - .../vcs/__pycache__/__init__.cpython-38.pyc | Bin 464 -> 0 bytes .../vcs/__pycache__/bazaar.cpython-38.pyc | Bin 3440 -> 0 bytes .../vcs/__pycache__/git.cpython-38.pyc | Bin 8996 -> 0 bytes .../vcs/__pycache__/mercurial.cpython-38.pyc | Bin 3727 -> 0 bytes .../vcs/__pycache__/subversion.cpython-38.pyc | Bin 8380 -> 0 bytes .../__pycache__/versioncontrol.cpython-38.pyc | Bin 17110 -> 0 bytes .../site-packages/pip/_internal/vcs/bazaar.py | 101 - .../site-packages/pip/_internal/vcs/git.py | 358 - .../pip/_internal/vcs/mercurial.py | 103 - .../pip/_internal/vcs/subversion.py | 314 - .../pip/_internal/vcs/versioncontrol.py | 600 -- .../Lib/site-packages/pip/_internal/wheel.py | 1125 --- .../Lib/site-packages/pip/_vendor/__init__.py | 109 - .../__pycache__/__init__.cpython-38.pyc | Bin 2859 -> 0 bytes .../__pycache__/appdirs.cpython-38.pyc | Bin 20470 -> 0 bytes .../_vendor/__pycache__/distro.cpython-38.pyc | Bin 36567 -> 0 bytes .../__pycache__/ipaddress.cpython-38.pyc | Bin 64808 -> 0 bytes .../__pycache__/pyparsing.cpython-38.pyc | Bin 220238 -> 0 bytes .../__pycache__/retrying.cpython-38.pyc | Bin 8039 -> 0 bytes .../_vendor/__pycache__/six.cpython-38.pyc | Bin 26429 -> 0 bytes .../Lib/site-packages/pip/_vendor/appdirs.py | 604 -- .../pip/_vendor/cachecontrol/__init__.py | 11 - .../__pycache__/__init__.cpython-38.pyc | Bin 546 -> 0 bytes .../__pycache__/_cmd.cpython-38.pyc | Bin 1566 -> 0 bytes .../__pycache__/adapter.cpython-38.pyc | Bin 3072 -> 0 bytes .../__pycache__/cache.cpython-38.pyc | Bin 1779 -> 0 bytes .../__pycache__/compat.cpython-38.pyc | Bin 753 -> 0 bytes .../__pycache__/controller.cpython-38.pyc | Bin 7693 -> 0 bytes .../__pycache__/filewrapper.cpython-38.pyc | Bin 2172 -> 0 bytes .../__pycache__/heuristics.cpython-38.pyc | Bin 4724 -> 0 bytes .../__pycache__/serialize.cpython-38.pyc | Bin 4244 -> 0 bytes .../__pycache__/wrapper.cpython-38.pyc | Bin 662 -> 0 bytes .../pip/_vendor/cachecontrol/_cmd.py | 57 - .../pip/_vendor/cachecontrol/adapter.py | 133 - .../pip/_vendor/cachecontrol/cache.py | 39 - .../_vendor/cachecontrol/caches/__init__.py | 2 - .../__pycache__/__init__.cpython-38.pyc | Bin 290 -> 0 bytes .../__pycache__/file_cache.cpython-38.pyc | Bin 3288 -> 0 bytes .../__pycache__/redis_cache.cpython-38.pyc | Bin 1562 -> 0 bytes .../_vendor/cachecontrol/caches/file_cache.py | 146 - .../cachecontrol/caches/redis_cache.py | 33 - .../pip/_vendor/cachecontrol/compat.py | 29 - .../pip/_vendor/cachecontrol/controller.py | 367 - .../pip/_vendor/cachecontrol/filewrapper.py | 80 - .../pip/_vendor/cachecontrol/heuristics.py | 135 - .../pip/_vendor/cachecontrol/serialize.py | 186 - .../pip/_vendor/cachecontrol/wrapper.py | 29 - .../pip/_vendor/certifi/__init__.py | 3 - .../pip/_vendor/certifi/__main__.py | 2 - .../__pycache__/__init__.cpython-38.pyc | Bin 253 -> 0 bytes .../__pycache__/__main__.cpython-38.pyc | Bin 249 -> 0 bytes .../certifi/__pycache__/core.cpython-38.pyc | Bin 469 -> 0 bytes .../pip/_vendor/certifi/cacert.pem | 4618 --------- .../site-packages/pip/_vendor/certifi/core.py | 15 - .../pip/_vendor/chardet/__init__.py | 39 - .../__pycache__/__init__.cpython-38.pyc | Bin 846 -> 0 bytes .../__pycache__/big5freq.cpython-38.pyc | Bin 27175 -> 0 bytes .../__pycache__/big5prober.cpython-38.pyc | Bin 1130 -> 0 bytes .../chardistribution.cpython-38.pyc | Bin 6216 -> 0 bytes .../charsetgroupprober.cpython-38.pyc | Bin 2247 -> 0 bytes .../__pycache__/charsetprober.cpython-38.pyc | Bin 3479 -> 0 bytes .../codingstatemachine.cpython-38.pyc | Bin 2906 -> 0 bytes .../chardet/__pycache__/compat.cpython-38.pyc | Bin 351 -> 0 bytes .../__pycache__/cp949prober.cpython-38.pyc | Bin 1137 -> 0 bytes .../chardet/__pycache__/enums.cpython-38.pyc | Bin 2644 -> 0 bytes .../__pycache__/escprober.cpython-38.pyc | Bin 2629 -> 0 bytes .../chardet/__pycache__/escsm.cpython-38.pyc | Bin 7470 -> 0 bytes .../__pycache__/eucjpprober.cpython-38.pyc | Bin 2447 -> 0 bytes .../__pycache__/euckrfreq.cpython-38.pyc | Bin 12059 -> 0 bytes .../__pycache__/euckrprober.cpython-38.pyc | Bin 1138 -> 0 bytes .../__pycache__/euctwfreq.cpython-38.pyc | Bin 27179 -> 0 bytes .../__pycache__/euctwprober.cpython-38.pyc | Bin 1138 -> 0 bytes .../__pycache__/gb2312freq.cpython-38.pyc | Bin 19103 -> 0 bytes .../__pycache__/gb2312prober.cpython-38.pyc | Bin 1146 -> 0 bytes .../__pycache__/hebrewprober.cpython-38.pyc | Bin 3019 -> 0 bytes .../__pycache__/jisfreq.cpython-38.pyc | Bin 22131 -> 0 bytes .../chardet/__pycache__/jpcntx.cpython-38.pyc | Bin 37604 -> 0 bytes .../langbulgarianmodel.cpython-38.pyc | Bin 23628 -> 0 bytes .../langcyrillicmodel.cpython-38.pyc | Bin 29092 -> 0 bytes .../__pycache__/langgreekmodel.cpython-38.pyc | Bin 23586 -> 0 bytes .../langhebrewmodel.cpython-38.pyc | Bin 22213 -> 0 bytes .../langhungarianmodel.cpython-38.pyc | Bin 23610 -> 0 bytes .../__pycache__/langthaimodel.cpython-38.pyc | Bin 22192 -> 0 bytes .../langturkishmodel.cpython-38.pyc | Bin 22215 -> 0 bytes .../__pycache__/latin1prober.cpython-38.pyc | Bin 3399 -> 0 bytes .../mbcharsetprober.cpython-38.pyc | Bin 2262 -> 0 bytes .../mbcsgroupprober.cpython-38.pyc | Bin 1127 -> 0 bytes .../chardet/__pycache__/mbcssm.cpython-38.pyc | Bin 16750 -> 0 bytes .../sbcharsetprober.cpython-38.pyc | Bin 3015 -> 0 bytes .../sbcsgroupprober.cpython-38.pyc | Bin 1625 -> 0 bytes .../__pycache__/sjisprober.cpython-38.pyc | Bin 2483 -> 0 bytes .../universaldetector.cpython-38.pyc | Bin 5827 -> 0 bytes .../__pycache__/utf8prober.cpython-38.pyc | Bin 1988 -> 0 bytes .../__pycache__/version.cpython-38.pyc | Bin 435 -> 0 bytes .../pip/_vendor/chardet/big5freq.py | 386 - .../pip/_vendor/chardet/big5prober.py | 47 - .../pip/_vendor/chardet/chardistribution.py | 233 - .../pip/_vendor/chardet/charsetgroupprober.py | 106 - .../pip/_vendor/chardet/charsetprober.py | 145 - .../pip/_vendor/chardet/cli/__init__.py | 1 - .../cli/__pycache__/__init__.cpython-38.pyc | Bin 185 -> 0 bytes .../cli/__pycache__/chardetect.cpython-38.pyc | Bin 2686 -> 0 bytes .../pip/_vendor/chardet/cli/chardetect.py | 85 - .../pip/_vendor/chardet/codingstatemachine.py | 88 - .../pip/_vendor/chardet/compat.py | 34 - .../pip/_vendor/chardet/cp949prober.py | 49 - .../pip/_vendor/chardet/enums.py | 76 - .../pip/_vendor/chardet/escprober.py | 101 - .../pip/_vendor/chardet/escsm.py | 246 - .../pip/_vendor/chardet/eucjpprober.py | 92 - .../pip/_vendor/chardet/euckrfreq.py | 195 - .../pip/_vendor/chardet/euckrprober.py | 47 - .../pip/_vendor/chardet/euctwfreq.py | 387 - .../pip/_vendor/chardet/euctwprober.py | 46 - .../pip/_vendor/chardet/gb2312freq.py | 283 - .../pip/_vendor/chardet/gb2312prober.py | 46 - .../pip/_vendor/chardet/hebrewprober.py | 292 - .../pip/_vendor/chardet/jisfreq.py | 325 - .../pip/_vendor/chardet/jpcntx.py | 233 - .../pip/_vendor/chardet/langbulgarianmodel.py | 228 - .../pip/_vendor/chardet/langcyrillicmodel.py | 333 - .../pip/_vendor/chardet/langgreekmodel.py | 225 - .../pip/_vendor/chardet/langhebrewmodel.py | 200 - .../pip/_vendor/chardet/langhungarianmodel.py | 225 - .../pip/_vendor/chardet/langthaimodel.py | 199 - .../pip/_vendor/chardet/langturkishmodel.py | 193 - .../pip/_vendor/chardet/latin1prober.py | 145 - .../pip/_vendor/chardet/mbcharsetprober.py | 91 - .../pip/_vendor/chardet/mbcsgroupprober.py | 54 - .../pip/_vendor/chardet/mbcssm.py | 572 -- .../pip/_vendor/chardet/sbcharsetprober.py | 132 - .../pip/_vendor/chardet/sbcsgroupprober.py | 73 - .../pip/_vendor/chardet/sjisprober.py | 92 - .../pip/_vendor/chardet/universaldetector.py | 286 - .../pip/_vendor/chardet/utf8prober.py | 82 - .../pip/_vendor/chardet/version.py | 9 - .../pip/_vendor/colorama/__init__.py | 6 - .../__pycache__/__init__.cpython-38.pyc | Bin 440 -> 0 bytes .../colorama/__pycache__/ansi.cpython-38.pyc | Bin 3225 -> 0 bytes .../__pycache__/ansitowin32.cpython-38.pyc | Bin 7734 -> 0 bytes .../__pycache__/initialise.cpython-38.pyc | Bin 1701 -> 0 bytes .../colorama/__pycache__/win32.cpython-38.pyc | Bin 3977 -> 0 bytes .../__pycache__/winterm.cpython-38.pyc | Bin 4661 -> 0 bytes .../pip/_vendor/colorama/ansi.py | 102 - .../pip/_vendor/colorama/ansitowin32.py | 257 - .../pip/_vendor/colorama/initialise.py | 80 - .../pip/_vendor/colorama/win32.py | 152 - .../pip/_vendor/colorama/winterm.py | 169 - .../pip/_vendor/distlib/__init__.py | 23 - .../__pycache__/__init__.cpython-38.pyc | Bin 1061 -> 0 bytes .../distlib/__pycache__/compat.cpython-38.pyc | Bin 32204 -> 0 bytes .../__pycache__/database.cpython-38.pyc | Bin 42094 -> 0 bytes .../distlib/__pycache__/index.cpython-38.pyc | Bin 17401 -> 0 bytes .../__pycache__/locators.cpython-38.pyc | Bin 38299 -> 0 bytes .../__pycache__/manifest.cpython-38.pyc | Bin 10223 -> 0 bytes .../__pycache__/markers.cpython-38.pyc | Bin 4487 -> 0 bytes .../__pycache__/metadata.cpython-38.pyc | Bin 26634 -> 0 bytes .../__pycache__/resources.cpython-38.pyc | Bin 11005 -> 0 bytes .../__pycache__/scripts.cpython-38.pyc | Bin 10787 -> 0 bytes .../distlib/__pycache__/util.cpython-38.pyc | Bin 48138 -> 0 bytes .../__pycache__/version.cpython-38.pyc | Bin 20357 -> 0 bytes .../distlib/__pycache__/wheel.cpython-38.pyc | Bin 25544 -> 0 bytes .../pip/_vendor/distlib/_backport/__init__.py | 6 - .../__pycache__/__init__.cpython-38.pyc | Bin 473 -> 0 bytes .../_backport/__pycache__/misc.cpython-38.pyc | Bin 1084 -> 0 bytes .../__pycache__/shutil.cpython-38.pyc | Bin 21477 -> 0 bytes .../__pycache__/sysconfig.cpython-38.pyc | Bin 15876 -> 0 bytes .../__pycache__/tarfile.cpython-38.pyc | Bin 62733 -> 0 bytes .../pip/_vendor/distlib/_backport/misc.py | 41 - .../pip/_vendor/distlib/_backport/shutil.py | 761 -- .../_vendor/distlib/_backport/sysconfig.cfg | 84 - .../_vendor/distlib/_backport/sysconfig.py | 788 -- .../pip/_vendor/distlib/_backport/tarfile.py | 2607 ------ .../pip/_vendor/distlib/compat.py | 1120 --- .../pip/_vendor/distlib/database.py | 1339 --- .../pip/_vendor/distlib/index.py | 516 - .../pip/_vendor/distlib/locators.py | 1295 --- .../pip/_vendor/distlib/manifest.py | 393 - .../pip/_vendor/distlib/markers.py | 131 - .../pip/_vendor/distlib/metadata.py | 1096 --- .../pip/_vendor/distlib/resources.py | 355 - .../pip/_vendor/distlib/scripts.py | 403 - .../site-packages/pip/_vendor/distlib/t32.exe | Bin 92672 -> 0 bytes .../site-packages/pip/_vendor/distlib/t64.exe | Bin 102912 -> 0 bytes .../site-packages/pip/_vendor/distlib/util.py | 1760 ---- .../pip/_vendor/distlib/version.py | 736 -- .../site-packages/pip/_vendor/distlib/w32.exe | Bin 89088 -> 0 bytes .../site-packages/pip/_vendor/distlib/w64.exe | Bin 99840 -> 0 bytes .../pip/_vendor/distlib/wheel.py | 1004 -- .../Lib/site-packages/pip/_vendor/distro.py | 1216 --- .../pip/_vendor/html5lib/__init__.py | 35 - .../__pycache__/__init__.cpython-38.pyc | Bin 1313 -> 0 bytes .../__pycache__/_ihatexml.cpython-38.pyc | Bin 13778 -> 0 bytes .../__pycache__/_inputstream.cpython-38.pyc | Bin 21937 -> 0 bytes .../__pycache__/_tokenizer.cpython-38.pyc | Bin 39655 -> 0 bytes .../__pycache__/_utils.cpython-38.pyc | Bin 3343 -> 0 bytes .../__pycache__/constants.cpython-38.pyc | Bin 66350 -> 0 bytes .../__pycache__/html5parser.cpython-38.pyc | Bin 95172 -> 0 bytes .../__pycache__/serializer.cpython-38.pyc | Bin 10821 -> 0 bytes .../pip/_vendor/html5lib/_ihatexml.py | 288 - .../pip/_vendor/html5lib/_inputstream.py | 923 -- .../pip/_vendor/html5lib/_tokenizer.py | 1721 ---- .../pip/_vendor/html5lib/_trie/__init__.py | 14 - .../_trie/__pycache__/__init__.cpython-38.pyc | Bin 422 -> 0 bytes .../_trie/__pycache__/_base.cpython-38.pyc | Bin 1601 -> 0 bytes .../_trie/__pycache__/datrie.cpython-38.pyc | Bin 2034 -> 0 bytes .../_trie/__pycache__/py.cpython-38.pyc | Bin 2258 -> 0 bytes .../pip/_vendor/html5lib/_trie/_base.py | 40 - .../pip/_vendor/html5lib/_trie/datrie.py | 44 - .../pip/_vendor/html5lib/_trie/py.py | 67 - .../pip/_vendor/html5lib/_utils.py | 124 - .../pip/_vendor/html5lib/constants.py | 2947 ------ .../pip/_vendor/html5lib/filters/__init__.py | 0 .../__pycache__/__init__.cpython-38.pyc | Bin 190 -> 0 bytes .../alphabeticalattributes.cpython-38.pyc | Bin 1312 -> 0 bytes .../filters/__pycache__/base.cpython-38.pyc | Bin 860 -> 0 bytes .../inject_meta_charset.cpython-38.pyc | Bin 1866 -> 0 bytes .../filters/__pycache__/lint.cpython-38.pyc | Bin 2624 -> 0 bytes .../__pycache__/optionaltags.cpython-38.pyc | Bin 2753 -> 0 bytes .../__pycache__/sanitizer.cpython-38.pyc | Bin 16295 -> 0 bytes .../__pycache__/whitespace.cpython-38.pyc | Bin 1358 -> 0 bytes .../filters/alphabeticalattributes.py | 29 - .../pip/_vendor/html5lib/filters/base.py | 12 - .../html5lib/filters/inject_meta_charset.py | 73 - .../pip/_vendor/html5lib/filters/lint.py | 93 - .../_vendor/html5lib/filters/optionaltags.py | 207 - .../pip/_vendor/html5lib/filters/sanitizer.py | 896 -- .../_vendor/html5lib/filters/whitespace.py | 38 - .../pip/_vendor/html5lib/html5parser.py | 2791 ------ .../pip/_vendor/html5lib/serializer.py | 409 - .../_vendor/html5lib/treeadapters/__init__.py | 30 - .../__pycache__/__init__.cpython-38.pyc | Bin 929 -> 0 bytes .../__pycache__/genshi.cpython-38.pyc | Bin 1535 -> 0 bytes .../__pycache__/sax.cpython-38.pyc | Bin 1470 -> 0 bytes .../_vendor/html5lib/treeadapters/genshi.py | 54 - .../pip/_vendor/html5lib/treeadapters/sax.py | 50 - .../_vendor/html5lib/treebuilders/__init__.py | 88 - .../__pycache__/__init__.cpython-38.pyc | Bin 3321 -> 0 bytes .../__pycache__/base.cpython-38.pyc | Bin 11347 -> 0 bytes .../__pycache__/dom.cpython-38.pyc | Bin 9447 -> 0 bytes .../__pycache__/etree.cpython-38.pyc | Bin 11834 -> 0 bytes .../__pycache__/etree_lxml.cpython-38.pyc | Bin 11802 -> 0 bytes .../pip/_vendor/html5lib/treebuilders/base.py | 417 - .../pip/_vendor/html5lib/treebuilders/dom.py | 239 - .../_vendor/html5lib/treebuilders/etree.py | 340 - .../html5lib/treebuilders/etree_lxml.py | 366 - .../_vendor/html5lib/treewalkers/__init__.py | 154 - .../__pycache__/__init__.cpython-38.pyc | Bin 4002 -> 0 bytes .../__pycache__/base.cpython-38.pyc | Bin 6995 -> 0 bytes .../__pycache__/dom.cpython-38.pyc | Bin 1724 -> 0 bytes .../__pycache__/etree.cpython-38.pyc | Bin 3509 -> 0 bytes .../__pycache__/etree_lxml.cpython-38.pyc | Bin 6608 -> 0 bytes .../__pycache__/genshi.cpython-38.pyc | Bin 1882 -> 0 bytes .../pip/_vendor/html5lib/treewalkers/base.py | 252 - .../pip/_vendor/html5lib/treewalkers/dom.py | 43 - .../pip/_vendor/html5lib/treewalkers/etree.py | 130 - .../html5lib/treewalkers/etree_lxml.py | 213 - .../_vendor/html5lib/treewalkers/genshi.py | 69 - .../pip/_vendor/idna/__init__.py | 2 - .../idna/__pycache__/__init__.cpython-38.pyc | Bin 254 -> 0 bytes .../idna/__pycache__/codec.cpython-38.pyc | Bin 2901 -> 0 bytes .../idna/__pycache__/compat.cpython-38.pyc | Bin 619 -> 0 bytes .../idna/__pycache__/core.cpython-38.pyc | Bin 9042 -> 0 bytes .../idna/__pycache__/idnadata.cpython-38.pyc | Bin 21378 -> 0 bytes .../idna/__pycache__/intranges.cpython-38.pyc | Bin 1806 -> 0 bytes .../__pycache__/package_data.cpython-38.pyc | Bin 208 -> 0 bytes .../idna/__pycache__/uts46data.cpython-38.pyc | Bin 174174 -> 0 bytes .../site-packages/pip/_vendor/idna/codec.py | 118 - .../site-packages/pip/_vendor/idna/compat.py | 12 - .../site-packages/pip/_vendor/idna/core.py | 396 - .../pip/_vendor/idna/idnadata.py | 1979 ---- .../pip/_vendor/idna/intranges.py | 53 - .../pip/_vendor/idna/package_data.py | 2 - .../pip/_vendor/idna/uts46data.py | 8205 ---------------- .../site-packages/pip/_vendor/ipaddress.py | 2419 ----- .../pip/_vendor/lockfile/__init__.py | 347 - .../__pycache__/__init__.cpython-38.pyc | Bin 9801 -> 0 bytes .../__pycache__/linklockfile.cpython-38.pyc | Bin 2309 -> 0 bytes .../__pycache__/mkdirlockfile.cpython-38.pyc | Bin 2670 -> 0 bytes .../__pycache__/pidlockfile.cpython-38.pyc | Bin 4874 -> 0 bytes .../__pycache__/sqlitelockfile.cpython-38.pyc | Bin 3729 -> 0 bytes .../symlinklockfile.cpython-38.pyc | Bin 2191 -> 0 bytes .../pip/_vendor/lockfile/linklockfile.py | 73 - .../pip/_vendor/lockfile/mkdirlockfile.py | 84 - .../pip/_vendor/lockfile/pidlockfile.py | 190 - .../pip/_vendor/lockfile/sqlitelockfile.py | 156 - .../pip/_vendor/lockfile/symlinklockfile.py | 70 - .../pip/_vendor/msgpack/__init__.py | 65 - .../__pycache__/__init__.cpython-38.pyc | Bin 2026 -> 0 bytes .../__pycache__/_version.cpython-38.pyc | Bin 215 -> 0 bytes .../__pycache__/exceptions.cpython-38.pyc | Bin 1849 -> 0 bytes .../__pycache__/fallback.cpython-38.pyc | Bin 26345 -> 0 bytes .../pip/_vendor/msgpack/_version.py | 1 - .../pip/_vendor/msgpack/exceptions.py | 48 - .../pip/_vendor/msgpack/fallback.py | 1027 -- .../pip/_vendor/packaging/__about__.py | 27 - .../pip/_vendor/packaging/__init__.py | 26 - .../__pycache__/__about__.cpython-38.pyc | Bin 730 -> 0 bytes .../__pycache__/__init__.cpython-38.pyc | Bin 568 -> 0 bytes .../__pycache__/_compat.cpython-38.pyc | Bin 1004 -> 0 bytes .../__pycache__/_structures.cpython-38.pyc | Bin 2786 -> 0 bytes .../__pycache__/markers.cpython-38.pyc | Bin 8911 -> 0 bytes .../__pycache__/requirements.cpython-38.pyc | Bin 4009 -> 0 bytes .../__pycache__/specifiers.cpython-38.pyc | Bin 19760 -> 0 bytes .../__pycache__/utils.cpython-38.pyc | Bin 1461 -> 0 bytes .../__pycache__/version.cpython-38.pyc | Bin 12091 -> 0 bytes .../pip/_vendor/packaging/_compat.py | 31 - .../pip/_vendor/packaging/_structures.py | 68 - .../pip/_vendor/packaging/markers.py | 296 - .../pip/_vendor/packaging/requirements.py | 138 - .../pip/_vendor/packaging/specifiers.py | 749 -- .../pip/_vendor/packaging/utils.py | 57 - .../pip/_vendor/packaging/version.py | 420 - .../pip/_vendor/pep517/__init__.py | 4 - .../__pycache__/__init__.cpython-38.pyc | Bin 279 -> 0 bytes .../__pycache__/_in_process.cpython-38.pyc | Bin 5530 -> 0 bytes .../pep517/__pycache__/build.cpython-38.pyc | Bin 2786 -> 0 bytes .../pep517/__pycache__/check.cpython-38.pyc | Bin 4755 -> 0 bytes .../__pycache__/colorlog.cpython-38.pyc | Bin 2942 -> 0 bytes .../pep517/__pycache__/compat.cpython-38.pyc | Bin 1001 -> 0 bytes .../__pycache__/envbuild.cpython-38.pyc | Bin 4274 -> 0 bytes .../__pycache__/wrappers.cpython-38.pyc | Bin 5541 -> 0 bytes .../pip/_vendor/pep517/_in_process.py | 207 - .../site-packages/pip/_vendor/pep517/build.py | 108 - .../site-packages/pip/_vendor/pep517/check.py | 202 - .../pip/_vendor/pep517/colorlog.py | 115 - .../pip/_vendor/pep517/compat.py | 23 - .../pip/_vendor/pep517/envbuild.py | 158 - .../pip/_vendor/pep517/wrappers.py | 163 - .../pip/_vendor/pkg_resources/__init__.py | 3286 ------- .../__pycache__/__init__.cpython-38.pyc | Bin 100181 -> 0 bytes .../__pycache__/py31compat.cpython-38.pyc | Bin 645 -> 0 bytes .../pip/_vendor/pkg_resources/py31compat.py | 23 - .../pip/_vendor/progress/__init__.py | 177 - .../__pycache__/__init__.cpython-38.pyc | Bin 5614 -> 0 bytes .../progress/__pycache__/bar.cpython-38.pyc | Bin 2638 -> 0 bytes .../__pycache__/counter.cpython-38.pyc | Bin 1463 -> 0 bytes .../__pycache__/spinner.cpython-38.pyc | Bin 1397 -> 0 bytes .../site-packages/pip/_vendor/progress/bar.py | 91 - .../pip/_vendor/progress/counter.py | 41 - .../pip/_vendor/progress/spinner.py | 43 - .../site-packages/pip/_vendor/pyparsing.py | 6493 ------------- .../pip/_vendor/pytoml/__init__.py | 4 - .../__pycache__/__init__.cpython-38.pyc | Bin 373 -> 0 bytes .../pytoml/__pycache__/core.cpython-38.pyc | Bin 950 -> 0 bytes .../pytoml/__pycache__/parser.cpython-38.pyc | Bin 10147 -> 0 bytes .../pytoml/__pycache__/test.cpython-38.pyc | Bin 1252 -> 0 bytes .../pytoml/__pycache__/utils.cpython-38.pyc | Bin 2162 -> 0 bytes .../pytoml/__pycache__/writer.cpython-38.pyc | Bin 3593 -> 0 bytes .../site-packages/pip/_vendor/pytoml/core.py | 13 - .../pip/_vendor/pytoml/parser.py | 341 - .../site-packages/pip/_vendor/pytoml/test.py | 30 - .../site-packages/pip/_vendor/pytoml/utils.py | 67 - .../pip/_vendor/pytoml/writer.py | 106 - .../pip/_vendor/requests/__init__.py | 133 - .../__pycache__/__init__.cpython-38.pyc | Bin 3500 -> 0 bytes .../__pycache__/__version__.cpython-38.pyc | Bin 547 -> 0 bytes .../_internal_utils.cpython-38.pyc | Bin 1317 -> 0 bytes .../__pycache__/adapters.cpython-38.pyc | Bin 16980 -> 0 bytes .../requests/__pycache__/api.cpython-38.pyc | Bin 6504 -> 0 bytes .../requests/__pycache__/auth.cpython-38.pyc | Bin 8326 -> 0 bytes .../requests/__pycache__/certs.cpython-38.pyc | Bin 630 -> 0 bytes .../__pycache__/compat.cpython-38.pyc | Bin 1609 -> 0 bytes .../__pycache__/cookies.cpython-38.pyc | Bin 18831 -> 0 bytes .../__pycache__/exceptions.cpython-38.pyc | Bin 5241 -> 0 bytes .../requests/__pycache__/help.cpython-38.pyc | Bin 2720 -> 0 bytes .../requests/__pycache__/hooks.cpython-38.pyc | Bin 989 -> 0 bytes .../__pycache__/models.cpython-38.pyc | Bin 23925 -> 0 bytes .../__pycache__/packages.cpython-38.pyc | Bin 499 -> 0 bytes .../__pycache__/sessions.cpython-38.pyc | Bin 19539 -> 0 bytes .../__pycache__/status_codes.cpython-38.pyc | Bin 4185 -> 0 bytes .../__pycache__/structures.cpython-38.pyc | Bin 4427 -> 0 bytes .../requests/__pycache__/utils.cpython-38.pyc | Bin 22196 -> 0 bytes .../pip/_vendor/requests/__version__.py | 14 - .../pip/_vendor/requests/_internal_utils.py | 42 - .../pip/_vendor/requests/adapters.py | 533 -- .../site-packages/pip/_vendor/requests/api.py | 158 - .../pip/_vendor/requests/auth.py | 305 - .../pip/_vendor/requests/certs.py | 18 - .../pip/_vendor/requests/compat.py | 74 - .../pip/_vendor/requests/cookies.py | 549 -- .../pip/_vendor/requests/exceptions.py | 126 - .../pip/_vendor/requests/help.py | 119 - .../pip/_vendor/requests/hooks.py | 34 - .../pip/_vendor/requests/models.py | 953 -- .../pip/_vendor/requests/packages.py | 16 - .../pip/_vendor/requests/sessions.py | 770 -- .../pip/_vendor/requests/status_codes.py | 120 - .../pip/_vendor/requests/structures.py | 103 - .../pip/_vendor/requests/utils.py | 977 -- .../Lib/site-packages/pip/_vendor/retrying.py | 267 - .../venv/Lib/site-packages/pip/_vendor/six.py | 952 -- .../pip/_vendor/urllib3/__init__.py | 91 - .../__pycache__/__init__.cpython-38.pyc | Bin 2122 -> 0 bytes .../__pycache__/_collections.cpython-38.pyc | Bin 10772 -> 0 bytes .../__pycache__/connection.cpython-38.pyc | Bin 10565 -> 0 bytes .../__pycache__/connectionpool.cpython-38.pyc | Bin 23877 -> 0 bytes .../__pycache__/exceptions.cpython-38.pyc | Bin 10065 -> 0 bytes .../urllib3/__pycache__/fields.cpython-38.pyc | Bin 8130 -> 0 bytes .../__pycache__/filepost.cpython-38.pyc | Bin 2767 -> 0 bytes .../__pycache__/poolmanager.cpython-38.pyc | Bin 12943 -> 0 bytes .../__pycache__/request.cpython-38.pyc | Bin 5621 -> 0 bytes .../__pycache__/response.cpython-38.pyc | Bin 20132 -> 0 bytes .../pip/_vendor/urllib3/_collections.py | 329 - .../pip/_vendor/urllib3/connection.py | 417 - .../pip/_vendor/urllib3/connectionpool.py | 897 -- .../pip/_vendor/urllib3/contrib/__init__.py | 0 .../__pycache__/__init__.cpython-38.pyc | Bin 196 -> 0 bytes .../_appengine_environ.cpython-38.pyc | Bin 1124 -> 0 bytes .../__pycache__/appengine.cpython-38.pyc | Bin 8430 -> 0 bytes .../__pycache__/ntlmpool.cpython-38.pyc | Bin 3256 -> 0 bytes .../__pycache__/pyopenssl.cpython-38.pyc | Bin 14961 -> 0 bytes .../securetransport.cpython-38.pyc | Bin 19889 -> 0 bytes .../contrib/__pycache__/socks.cpython-38.pyc | Bin 5582 -> 0 bytes .../urllib3/contrib/_appengine_environ.py | 30 - .../contrib/_securetransport/__init__.py | 0 .../__pycache__/__init__.cpython-38.pyc | Bin 206 -> 0 bytes .../__pycache__/bindings.cpython-38.pyc | Bin 10361 -> 0 bytes .../__pycache__/low_level.cpython-38.pyc | Bin 7558 -> 0 bytes .../contrib/_securetransport/bindings.py | 593 -- .../contrib/_securetransport/low_level.py | 346 - .../pip/_vendor/urllib3/contrib/appengine.py | 289 - .../pip/_vendor/urllib3/contrib/ntlmpool.py | 111 - .../pip/_vendor/urllib3/contrib/pyopenssl.py | 485 - .../urllib3/contrib/securetransport.py | 853 -- .../pip/_vendor/urllib3/contrib/socks.py | 205 - .../pip/_vendor/urllib3/exceptions.py | 246 - .../pip/_vendor/urllib3/fields.py | 272 - .../pip/_vendor/urllib3/filepost.py | 98 - .../pip/_vendor/urllib3/packages/__init__.py | 5 - .../__pycache__/__init__.cpython-38.pyc | Bin 310 -> 0 bytes .../packages/__pycache__/six.cpython-38.pyc | Bin 24470 -> 0 bytes .../urllib3/packages/backports/__init__.py | 0 .../__pycache__/__init__.cpython-38.pyc | Bin 200 -> 0 bytes .../__pycache__/makefile.cpython-38.pyc | Bin 1304 -> 0 bytes .../urllib3/packages/backports/makefile.py | 53 - .../urllib3/packages/rfc3986/__init__.py | 56 - .../__pycache__/__init__.cpython-38.pyc | Bin 1044 -> 0 bytes .../rfc3986/__pycache__/_mixin.cpython-38.pyc | Bin 10645 -> 0 bytes .../__pycache__/abnf_regexp.cpython-38.pyc | Bin 4148 -> 0 bytes .../rfc3986/__pycache__/api.cpython-38.pyc | Bin 3709 -> 0 bytes .../__pycache__/builder.cpython-38.pyc | Bin 8144 -> 0 bytes .../rfc3986/__pycache__/compat.cpython-38.pyc | Bin 1146 -> 0 bytes .../__pycache__/exceptions.cpython-38.pyc | Bin 4785 -> 0 bytes .../rfc3986/__pycache__/iri.cpython-38.pyc | Bin 4500 -> 0 bytes .../rfc3986/__pycache__/misc.cpython-38.pyc | Bin 2265 -> 0 bytes .../__pycache__/normalizers.cpython-38.pyc | Bin 3578 -> 0 bytes .../__pycache__/parseresult.cpython-38.pyc | Bin 9892 -> 0 bytes .../rfc3986/__pycache__/uri.cpython-38.pyc | Bin 4273 -> 0 bytes .../__pycache__/validators.cpython-38.pyc | Bin 13033 -> 0 bytes .../urllib3/packages/rfc3986/_mixin.py | 353 - .../urllib3/packages/rfc3986/abnf_regexp.py | 267 - .../_vendor/urllib3/packages/rfc3986/api.py | 106 - .../urllib3/packages/rfc3986/builder.py | 298 - .../urllib3/packages/rfc3986/compat.py | 54 - .../urllib3/packages/rfc3986/exceptions.py | 118 - .../_vendor/urllib3/packages/rfc3986/iri.py | 147 - .../_vendor/urllib3/packages/rfc3986/misc.py | 124 - .../urllib3/packages/rfc3986/normalizers.py | 167 - .../urllib3/packages/rfc3986/parseresult.py | 385 - .../_vendor/urllib3/packages/rfc3986/uri.py | 153 - .../urllib3/packages/rfc3986/validators.py | 450 - .../pip/_vendor/urllib3/packages/six.py | 868 -- .../packages/ssl_match_hostname/__init__.py | 19 - .../__pycache__/__init__.cpython-38.pyc | Bin 551 -> 0 bytes .../_implementation.cpython-38.pyc | Bin 3317 -> 0 bytes .../ssl_match_hostname/_implementation.py | 156 - .../pip/_vendor/urllib3/poolmanager.py | 455 - .../pip/_vendor/urllib3/request.py | 150 - .../pip/_vendor/urllib3/response.py | 760 -- .../pip/_vendor/urllib3/util/__init__.py | 56 - .../util/__pycache__/__init__.cpython-38.pyc | Bin 1016 -> 0 bytes .../__pycache__/connection.cpython-38.pyc | Bin 3189 -> 0 bytes .../util/__pycache__/queue.cpython-38.pyc | Bin 1061 -> 0 bytes .../util/__pycache__/request.cpython-38.pyc | Bin 3343 -> 0 bytes .../util/__pycache__/response.cpython-38.pyc | Bin 1986 -> 0 bytes .../util/__pycache__/retry.cpython-38.pyc | Bin 12937 -> 0 bytes .../util/__pycache__/ssl_.cpython-38.pyc | Bin 9815 -> 0 bytes .../util/__pycache__/timeout.cpython-38.pyc | Bin 8817 -> 0 bytes .../util/__pycache__/url.cpython-38.pyc | Bin 7882 -> 0 bytes .../util/__pycache__/wait.cpython-38.pyc | Bin 3110 -> 0 bytes .../pip/_vendor/urllib3/util/connection.py | 134 - .../pip/_vendor/urllib3/util/queue.py | 21 - .../pip/_vendor/urllib3/util/request.py | 125 - .../pip/_vendor/urllib3/util/response.py | 87 - .../pip/_vendor/urllib3/util/retry.py | 412 - .../pip/_vendor/urllib3/util/ssl_.py | 392 - .../pip/_vendor/urllib3/util/timeout.py | 243 - .../pip/_vendor/urllib3/util/url.py | 289 - .../pip/_vendor/urllib3/util/wait.py | 150 - .../pip/_vendor/webencodings/__init__.py | 342 - .../__pycache__/__init__.cpython-38.pyc | Bin 9736 -> 0 bytes .../__pycache__/labels.cpython-38.pyc | Bin 3834 -> 0 bytes .../__pycache__/mklabels.cpython-38.pyc | Bin 1923 -> 0 bytes .../__pycache__/tests.cpython-38.pyc | Bin 5089 -> 0 bytes .../__pycache__/x_user_defined.cpython-38.pyc | Bin 2657 -> 0 bytes .../pip/_vendor/webencodings/labels.py | 231 - .../pip/_vendor/webencodings/mklabels.py | 59 - .../pip/_vendor/webencodings/tests.py | 153 - .../_vendor/webencodings/x_user_defined.py | 325 - .../site-packages/pkg_resources/__init__.py | 3295 ------- .../__pycache__/__init__.cpython-38.pyc | Bin 100371 -> 0 bytes .../__pycache__/py31compat.cpython-38.pyc | Bin 633 -> 0 bytes .../pkg_resources/_vendor/__init__.py | 0 .../__pycache__/__init__.cpython-38.pyc | Bin 190 -> 0 bytes .../__pycache__/appdirs.cpython-38.pyc | Bin 20543 -> 0 bytes .../__pycache__/pyparsing.cpython-38.pyc | Bin 201667 -> 0 bytes .../_vendor/__pycache__/six.cpython-38.pyc | Bin 24463 -> 0 bytes .../pkg_resources/_vendor/appdirs.py | 608 -- .../_vendor/packaging/__about__.py | 21 - .../_vendor/packaging/__init__.py | 14 - .../__pycache__/__about__.cpython-38.pyc | Bin 740 -> 0 bytes .../__pycache__/__init__.cpython-38.pyc | Bin 578 -> 0 bytes .../__pycache__/_compat.cpython-38.pyc | Bin 1014 -> 0 bytes .../__pycache__/_structures.cpython-38.pyc | Bin 2796 -> 0 bytes .../__pycache__/markers.cpython-38.pyc | Bin 8952 -> 0 bytes .../__pycache__/requirements.cpython-38.pyc | Bin 3911 -> 0 bytes .../__pycache__/specifiers.cpython-38.pyc | Bin 19820 -> 0 bytes .../__pycache__/utils.cpython-38.pyc | Bin 499 -> 0 bytes .../__pycache__/version.cpython-38.pyc | Bin 10667 -> 0 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 | 5742 ------------ .../pkg_resources/_vendor/six.py | 868 -- .../pkg_resources/extern/__init__.py | 73 - .../__pycache__/__init__.cpython-38.pyc | Bin 2439 -> 0 bytes .../site-packages/pkg_resources/py31compat.py | 23 - .../pylint-2.5.3.dist-info/COPYING | 340 - .../pylint-2.5.3.dist-info/INSTALLER | 1 - .../pylint-2.5.3.dist-info/METADATA | 204 - .../pylint-2.5.3.dist-info/RECORD | 173 - .../pylint-2.5.3.dist-info/WHEEL | 5 - .../pylint-2.5.3.dist-info/entry_points.txt | 6 - .../pylint-2.5.3.dist-info/top_level.txt | 1 - .../venv/Lib/site-packages/pylint/__init__.py | 44 - .../venv/Lib/site-packages/pylint/__main__.py | 18 - .../Lib/site-packages/pylint/__pkginfo__.py | 97 - .../__pycache__/__init__.cpython-38.pyc | Bin 1099 -> 0 bytes .../__pycache__/__main__.cpython-38.pyc | Bin 313 -> 0 bytes .../__pycache__/__pkginfo__.cpython-38.pyc | Bin 2720 -> 0 bytes .../pylint/__pycache__/config.cpython-38.pyc | Bin 27494 -> 0 bytes .../__pycache__/constants.cpython-38.pyc | Bin 1037 -> 0 bytes .../pylint/__pycache__/epylint.cpython-38.pyc | Bin 5000 -> 0 bytes .../__pycache__/exceptions.cpython-38.pyc | Bin 1318 -> 0 bytes .../pylint/__pycache__/graph.cpython-38.pyc | Bin 5079 -> 0 bytes .../__pycache__/interfaces.cpython-38.pyc | Bin 3728 -> 0 bytes .../__pycache__/testutils.cpython-38.pyc | Bin 20785 -> 0 bytes .../site-packages/pylint/checkers/__init__.py | 67 - .../__pycache__/__init__.cpython-38.pyc | Bin 1589 -> 0 bytes .../checkers/__pycache__/async.cpython-38.pyc | Bin 2716 -> 0 bytes .../checkers/__pycache__/base.cpython-38.pyc | Bin 63672 -> 0 bytes .../__pycache__/base_checker.cpython-38.pyc | Bin 6576 -> 0 bytes .../__pycache__/classes.cpython-38.pyc | Bin 50514 -> 0 bytes .../design_analysis.cpython-38.pyc | Bin 11317 -> 0 bytes .../__pycache__/exceptions.cpython-38.pyc | Bin 15335 -> 0 bytes .../__pycache__/format.cpython-38.pyc | Bin 33365 -> 0 bytes .../__pycache__/imports.cpython-38.pyc | Bin 25423 -> 0 bytes .../__pycache__/logging.cpython-38.pyc | Bin 11661 -> 0 bytes .../checkers/__pycache__/misc.cpython-38.pyc | Bin 5115 -> 0 bytes .../__pycache__/newstyle.cpython-38.pyc | Bin 2445 -> 0 bytes .../__pycache__/python3.cpython-38.pyc | Bin 34939 -> 0 bytes .../__pycache__/raw_metrics.cpython-38.pyc | Bin 3277 -> 0 bytes .../__pycache__/refactoring.cpython-38.pyc | Bin 44931 -> 0 bytes .../__pycache__/similar.cpython-38.pyc | Bin 12341 -> 0 bytes .../__pycache__/spelling.cpython-38.pyc | Bin 9701 -> 0 bytes .../__pycache__/stdlib.cpython-38.pyc | Bin 12442 -> 0 bytes .../__pycache__/strings.cpython-38.pyc | Bin 22093 -> 0 bytes .../__pycache__/typecheck.cpython-38.pyc | Bin 41836 -> 0 bytes .../checkers/__pycache__/utils.cpython-38.pyc | Bin 32656 -> 0 bytes .../__pycache__/variables.cpython-38.pyc | Bin 45205 -> 0 bytes .../site-packages/pylint/checkers/async.py | 90 - .../Lib/site-packages/pylint/checkers/base.py | 2503 ----- .../pylint/checkers/base_checker.py | 190 - .../site-packages/pylint/checkers/classes.py | 2093 ----- .../pylint/checkers/design_analysis.py | 500 - .../pylint/checkers/exceptions.py | 554 -- .../site-packages/pylint/checkers/format.py | 1392 --- .../site-packages/pylint/checkers/imports.py | 991 -- .../site-packages/pylint/checkers/logging.py | 415 - .../Lib/site-packages/pylint/checkers/misc.py | 199 - .../site-packages/pylint/checkers/newstyle.py | 133 - .../site-packages/pylint/checkers/python3.py | 1425 --- .../pylint/checkers/raw_metrics.py | 121 - .../pylint/checkers/refactoring.py | 1547 --- .../site-packages/pylint/checkers/similar.py | 455 - .../site-packages/pylint/checkers/spelling.py | 415 - .../site-packages/pylint/checkers/stdlib.py | 458 - .../site-packages/pylint/checkers/strings.py | 952 -- .../pylint/checkers/typecheck.py | 1862 ---- .../site-packages/pylint/checkers/utils.py | 1295 --- .../pylint/checkers/variables.py | 2077 ---- .../venv/Lib/site-packages/pylint/config.py | 977 -- .../Lib/site-packages/pylint/constants.py | 41 - .../venv/Lib/site-packages/pylint/epylint.py | 200 - .../Lib/site-packages/pylint/exceptions.py | 31 - .../pylint/extensions/__init__.py | 0 .../__pycache__/__init__.cpython-38.pyc | Bin 186 -> 0 bytes .../_check_docs_utils.cpython-38.pyc | Bin 19449 -> 0 bytes .../__pycache__/bad_builtin.cpython-38.pyc | Bin 1974 -> 0 bytes .../broad_try_clause.cpython-38.pyc | Bin 2261 -> 0 bytes .../__pycache__/check_docs.cpython-38.pyc | Bin 692 -> 0 bytes .../__pycache__/check_elif.cpython-38.pyc | Bin 2663 -> 0 bytes .../__pycache__/comparetozero.cpython-38.pyc | Bin 1950 -> 0 bytes .../__pycache__/docparams.cpython-38.pyc | Bin 14684 -> 0 bytes .../__pycache__/docstyle.cpython-38.pyc | Bin 2447 -> 0 bytes .../__pycache__/emptystring.cpython-38.pyc | Bin 2010 -> 0 bytes .../__pycache__/mccabe.cpython-38.pyc | Bin 5645 -> 0 bytes .../overlapping_exceptions.cpython-38.pyc | Bin 2584 -> 0 bytes .../redefined_variable_type.cpython-38.pyc | Bin 3239 -> 0 bytes .../pylint/extensions/_check_docs_utils.py | 808 -- .../pylint/extensions/bad_builtin.py | 71 - .../pylint/extensions/broad_try_clause.py | 74 - .../pylint/extensions/check_docs.py | 23 - .../pylint/extensions/check_elif.py | 79 - .../pylint/extensions/comparetozero.py | 75 - .../pylint/extensions/docparams.py | 539 -- .../pylint/extensions/docstyle.py | 91 - .../pylint/extensions/emptystring.py | 75 - .../site-packages/pylint/extensions/mccabe.py | 199 - .../extensions/overlapping_exceptions.py | 86 - .../extensions/redefined_variable_type.py | 118 - .../venv/Lib/site-packages/pylint/graph.py | 193 - .../Lib/site-packages/pylint/interfaces.py | 103 - .../Lib/site-packages/pylint/lint/__init__.py | 91 - .../lint/__pycache__/__init__.cpython-38.pyc | Bin 1010 -> 0 bytes .../__pycache__/check_parallel.cpython-38.pyc | Bin 2567 -> 0 bytes .../lint/__pycache__/pylinter.cpython-38.pyc | Bin 31975 -> 0 bytes .../report_functions.cpython-38.pyc | Bin 2403 -> 0 bytes .../lint/__pycache__/run.cpython-38.pyc | Bin 11092 -> 0 bytes .../lint/__pycache__/utils.cpython-38.pyc | Bin 2156 -> 0 bytes .../pylint/lint/check_parallel.py | 118 - .../Lib/site-packages/pylint/lint/pylinter.py | 1174 --- .../pylint/lint/report_functions.py | 76 - .../venv/Lib/site-packages/pylint/lint/run.py | 425 - .../Lib/site-packages/pylint/lint/utils.py | 76 - .../site-packages/pylint/message/__init__.py | 56 - .../__pycache__/__init__.cpython-38.pyc | Bin 671 -> 0 bytes .../__pycache__/message.cpython-38.pyc | Bin 1250 -> 0 bytes .../message_definition.cpython-38.pyc | Bin 3021 -> 0 bytes .../message_definition_store.cpython-38.pyc | Bin 4120 -> 0 bytes .../message_handler_mix_in.cpython-38.pyc | Bin 11146 -> 0 bytes .../message_id_store.cpython-38.pyc | Bin 4994 -> 0 bytes .../site-packages/pylint/message/message.py | 51 - .../pylint/message/message_definition.py | 82 - .../message/message_definition_store.py | 88 - .../pylint/message/message_handler_mix_in.py | 390 - .../pylint/message/message_id_store.py | 126 - .../pylint/pyreverse/__init__.py | 8 - .../__pycache__/__init__.cpython-38.pyc | Bin 242 -> 0 bytes .../__pycache__/diadefslib.cpython-38.pyc | Bin 7644 -> 0 bytes .../__pycache__/diagrams.cpython-38.pyc | Bin 8752 -> 0 bytes .../__pycache__/inspector.cpython-38.pyc | Bin 10276 -> 0 bytes .../pyreverse/__pycache__/main.cpython-38.pyc | Bin 4596 -> 0 bytes .../__pycache__/utils.cpython-38.pyc | Bin 5694 -> 0 bytes .../__pycache__/vcgutils.cpython-38.pyc | Bin 4745 -> 0 bytes .../__pycache__/writer.cpython-38.pyc | Bin 7146 -> 0 bytes .../pylint/pyreverse/diadefslib.py | 240 - .../pylint/pyreverse/diagrams.py | 269 - .../pylint/pyreverse/inspector.py | 361 - .../site-packages/pylint/pyreverse/main.py | 217 - .../site-packages/pylint/pyreverse/utils.py | 223 - .../pylint/pyreverse/vcgutils.py | 229 - .../site-packages/pylint/pyreverse/writer.py | 217 - .../pylint/reporters/__init__.py | 36 - .../__pycache__/__init__.cpython-38.pyc | Bin 832 -> 0 bytes .../__pycache__/base_reporter.cpython-38.pyc | Bin 2791 -> 0 bytes .../collecting_reporter.cpython-38.pyc | Bin 836 -> 0 bytes .../__pycache__/json_reporter.cpython-38.pyc | Bin 1983 -> 0 bytes .../reports_handler_mix_in.cpython-38.pyc | Bin 3005 -> 0 bytes .../reporters/__pycache__/text.cpython-38.pyc | Bin 7317 -> 0 bytes .../pylint/reporters/base_reporter.py | 64 - .../pylint/reporters/collecting_reporter.py | 19 - .../pylint/reporters/json_reporter.py | 61 - .../reporters/reports_handler_mix_in.py | 77 - .../site-packages/pylint/reporters/text.py | 249 - .../pylint/reporters/ureports/__init__.py | 97 - .../__pycache__/__init__.cpython-38.pyc | Bin 3081 -> 0 bytes .../ureports/__pycache__/nodes.cpython-38.pyc | Bin 5982 -> 0 bytes .../__pycache__/text_writer.cpython-38.pyc | Bin 3677 -> 0 bytes .../pylint/reporters/ureports/nodes.py | 189 - .../pylint/reporters/ureports/text_writer.py | 96 - .../Lib/site-packages/pylint/testutils.py | 625 -- .../site-packages/pylint/utils/__init__.py | 66 - .../utils/__pycache__/__init__.cpython-38.pyc | Bin 874 -> 0 bytes .../__pycache__/ast_walker.cpython-38.pyc | Bin 2081 -> 0 bytes .../__pycache__/file_state.cpython-38.pyc | Bin 3853 -> 0 bytes .../__pycache__/pragma_parser.cpython-38.pyc | Bin 3683 -> 0 bytes .../utils/__pycache__/utils.cpython-38.pyc | Bin 10915 -> 0 bytes .../site-packages/pylint/utils/ast_walker.py | 77 - .../site-packages/pylint/utils/file_state.py | 136 - .../pylint/utils/pragma_parser.py | 132 - .../Lib/site-packages/pylint/utils/utils.py | 400 - .../requests-2.23.0.dist-info/INSTALLER | 1 - .../requests-2.23.0.dist-info/LICENSE | 13 - .../requests-2.23.0.dist-info/METADATA | 165 - .../requests-2.23.0.dist-info/RECORD | 42 - .../requests-2.23.0.dist-info/WHEEL | 6 - .../requests-2.23.0.dist-info/top_level.txt | 1 - .../Lib/site-packages/requests/__init__.py | 131 - .../__pycache__/__init__.cpython-38.pyc | Bin 3371 -> 0 bytes .../__pycache__/__version__.cpython-38.pyc | Bin 540 -> 0 bytes .../_internal_utils.cpython-38.pyc | Bin 1305 -> 0 bytes .../__pycache__/adapters.cpython-38.pyc | Bin 16896 -> 0 bytes .../requests/__pycache__/api.cpython-38.pyc | Bin 6720 -> 0 bytes .../requests/__pycache__/auth.cpython-38.pyc | Bin 8324 -> 0 bytes .../requests/__pycache__/certs.cpython-38.pyc | Bin 606 -> 0 bytes .../__pycache__/compat.cpython-38.pyc | Bin 1640 -> 0 bytes .../__pycache__/cookies.cpython-38.pyc | Bin 18819 -> 0 bytes .../__pycache__/exceptions.cpython-38.pyc | Bin 5217 -> 0 bytes .../requests/__pycache__/help.cpython-38.pyc | Bin 2655 -> 0 bytes .../requests/__pycache__/hooks.cpython-38.pyc | Bin 977 -> 0 bytes .../__pycache__/models.cpython-38.pyc | Bin 23853 -> 0 bytes .../__pycache__/packages.cpython-38.pyc | Bin 394 -> 0 bytes .../__pycache__/sessions.cpython-38.pyc | Bin 19524 -> 0 bytes .../__pycache__/status_codes.cpython-38.pyc | Bin 4232 -> 0 bytes .../__pycache__/structures.cpython-38.pyc | Bin 4445 -> 0 bytes .../requests/__pycache__/utils.cpython-38.pyc | Bin 22318 -> 0 bytes .../Lib/site-packages/requests/__version__.py | 14 - .../site-packages/requests/_internal_utils.py | 42 - .../Lib/site-packages/requests/adapters.py | 533 -- .../venv/Lib/site-packages/requests/api.py | 161 - .../venv/Lib/site-packages/requests/auth.py | 305 - .../venv/Lib/site-packages/requests/certs.py | 18 - .../venv/Lib/site-packages/requests/compat.py | 72 - .../Lib/site-packages/requests/cookies.py | 549 -- .../Lib/site-packages/requests/exceptions.py | 126 - .../venv/Lib/site-packages/requests/help.py | 119 - .../venv/Lib/site-packages/requests/hooks.py | 34 - .../venv/Lib/site-packages/requests/models.py | 954 -- .../Lib/site-packages/requests/packages.py | 14 - .../Lib/site-packages/requests/sessions.py | 767 -- .../site-packages/requests/status_codes.py | 123 - .../Lib/site-packages/requests/structures.py | 105 - .../venv/Lib/site-packages/requests/utils.py | 982 -- .../setuptools-41.2.0.dist-info/INSTALLER | 1 - .../setuptools-41.2.0.dist-info/LICENSE | 19 - .../setuptools-41.2.0.dist-info/METADATA | 77 - .../setuptools-41.2.0.dist-info/RECORD | 186 - .../setuptools-41.2.0.dist-info/WHEEL | 6 - .../dependency_links.txt | 2 - .../entry_points.txt | 65 - .../setuptools-41.2.0.dist-info/top_level.txt | 3 - .../setuptools-41.2.0.dist-info/zip-safe | 1 - .../Lib/site-packages/setuptools/__init__.py | 228 - .../__pycache__/__init__.cpython-38.pyc | Bin 7801 -> 0 bytes .../_deprecation_warning.cpython-38.pyc | Bin 549 -> 0 bytes .../__pycache__/archive_util.cpython-38.pyc | Bin 5161 -> 0 bytes .../__pycache__/build_meta.cpython-38.pyc | Bin 8528 -> 0 bytes .../__pycache__/config.cpython-38.pyc | Bin 17809 -> 0 bytes .../__pycache__/dep_util.cpython-38.pyc | Bin 852 -> 0 bytes .../__pycache__/depends.cpython-38.pyc | Bin 5321 -> 0 bytes .../__pycache__/dist.cpython-38.pyc | Bin 42180 -> 0 bytes .../__pycache__/extension.cpython-38.pyc | Bin 1994 -> 0 bytes .../__pycache__/glibc.cpython-38.pyc | Bin 1563 -> 0 bytes .../__pycache__/glob.cpython-38.pyc | Bin 3766 -> 0 bytes .../__pycache__/launch.cpython-38.pyc | Bin 857 -> 0 bytes .../__pycache__/lib2to3_ex.cpython-38.pyc | Bin 2444 -> 0 bytes .../__pycache__/monkey.cpython-38.pyc | Bin 4677 -> 0 bytes .../__pycache__/msvc.cpython-38.pyc | Bin 34473 -> 0 bytes .../__pycache__/namespaces.cpython-38.pyc | Bin 3649 -> 0 bytes .../__pycache__/package_index.cpython-38.pyc | Bin 32994 -> 0 bytes .../__pycache__/pep425tags.cpython-38.pyc | Bin 7236 -> 0 bytes .../__pycache__/py27compat.cpython-38.pyc | Bin 817 -> 0 bytes .../__pycache__/py31compat.cpython-38.pyc | Bin 1224 -> 0 bytes .../__pycache__/py33compat.cpython-38.pyc | Bin 1441 -> 0 bytes .../__pycache__/sandbox.cpython-38.pyc | Bin 15569 -> 0 bytes .../__pycache__/site-patch.cpython-38.pyc | Bin 1507 -> 0 bytes .../__pycache__/ssl_support.cpython-38.pyc | Bin 6888 -> 0 bytes .../__pycache__/unicode_utils.cpython-38.pyc | Bin 1184 -> 0 bytes .../__pycache__/version.cpython-38.pyc | Bin 325 -> 0 bytes .../__pycache__/wheel.cpython-38.pyc | Bin 7087 -> 0 bytes .../windows_support.cpython-38.pyc | Bin 1022 -> 0 bytes .../setuptools/_deprecation_warning.py | 7 - .../setuptools/_vendor/__init__.py | 0 .../__pycache__/__init__.cpython-38.pyc | Bin 187 -> 0 bytes .../__pycache__/pyparsing.cpython-38.pyc | Bin 201664 -> 0 bytes .../_vendor/__pycache__/six.cpython-38.pyc | Bin 24460 -> 0 bytes .../setuptools/_vendor/packaging/__about__.py | 21 - .../setuptools/_vendor/packaging/__init__.py | 14 - .../__pycache__/__about__.cpython-38.pyc | Bin 737 -> 0 bytes .../__pycache__/__init__.cpython-38.pyc | Bin 575 -> 0 bytes .../__pycache__/_compat.cpython-38.pyc | Bin 1011 -> 0 bytes .../__pycache__/_structures.cpython-38.pyc | Bin 2793 -> 0 bytes .../__pycache__/markers.cpython-38.pyc | Bin 8946 -> 0 bytes .../__pycache__/requirements.cpython-38.pyc | Bin 3902 -> 0 bytes .../__pycache__/specifiers.cpython-38.pyc | Bin 19817 -> 0 bytes .../__pycache__/utils.cpython-38.pyc | Bin 496 -> 0 bytes .../__pycache__/version.cpython-38.pyc | Bin 10664 -> 0 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 | 5742 ------------ .../site-packages/setuptools/_vendor/six.py | 868 -- .../site-packages/setuptools/archive_util.py | 173 - .../site-packages/setuptools/build_meta.py | 257 - .../Lib/site-packages/setuptools/cli-32.exe | Bin 65536 -> 0 bytes .../Lib/site-packages/setuptools/cli-64.exe | Bin 74752 -> 0 bytes .../venv/Lib/site-packages/setuptools/cli.exe | Bin 65536 -> 0 bytes .../setuptools/command/__init__.py | 18 - .../__pycache__/__init__.cpython-38.pyc | Bin 771 -> 0 bytes .../command/__pycache__/alias.cpython-38.pyc | Bin 2425 -> 0 bytes .../__pycache__/bdist_egg.cpython-38.pyc | Bin 14211 -> 0 bytes .../__pycache__/bdist_rpm.cpython-38.pyc | Bin 1817 -> 0 bytes .../__pycache__/bdist_wininst.cpython-38.pyc | Bin 987 -> 0 bytes .../__pycache__/build_clib.cpython-38.pyc | Bin 2470 -> 0 bytes .../__pycache__/build_ext.cpython-38.pyc | Bin 9928 -> 0 bytes .../__pycache__/build_py.cpython-38.pyc | Bin 8674 -> 0 bytes .../__pycache__/develop.cpython-38.pyc | Bin 6534 -> 0 bytes .../__pycache__/dist_info.cpython-38.pyc | Bin 1394 -> 0 bytes .../__pycache__/easy_install.cpython-38.pyc | Bin 65295 -> 0 bytes .../__pycache__/egg_info.cpython-38.pyc | Bin 21797 -> 0 bytes .../__pycache__/install.cpython-38.pyc | Bin 4024 -> 0 bytes .../install_egg_info.cpython-38.pyc | Bin 2436 -> 0 bytes .../__pycache__/install_lib.cpython-38.pyc | Bin 4157 -> 0 bytes .../install_scripts.cpython-38.pyc | Bin 2306 -> 0 bytes .../__pycache__/py36compat.cpython-38.pyc | Bin 4643 -> 0 bytes .../__pycache__/register.cpython-38.pyc | Bin 788 -> 0 bytes .../command/__pycache__/rotate.cpython-38.pyc | Bin 2553 -> 0 bytes .../__pycache__/saveopts.cpython-38.pyc | Bin 922 -> 0 bytes .../command/__pycache__/sdist.cpython-38.pyc | Bin 6840 -> 0 bytes .../command/__pycache__/setopt.cpython-38.pyc | Bin 4570 -> 0 bytes .../command/__pycache__/test.cpython-38.pyc | Bin 8273 -> 0 bytes .../command/__pycache__/upload.cpython-38.pyc | Bin 5236 -> 0 bytes .../__pycache__/upload_docs.cpython-38.pyc | Bin 6173 -> 0 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 | 327 - .../setuptools/command/build_py.py | 270 - .../setuptools/command/develop.py | 221 - .../setuptools/command/dist_info.py | 36 - .../setuptools/command/easy_install.py | 2342 ----- .../setuptools/command/egg_info.py | 717 -- .../setuptools/command/install.py | 125 - .../setuptools/command/install_egg_info.py | 62 - .../setuptools/command/install_lib.py | 121 - .../setuptools/command/install_scripts.py | 65 - .../setuptools/command/launcher manifest.xml | 15 - .../setuptools/command/py36compat.py | 136 - .../setuptools/command/register.py | 18 - .../setuptools/command/rotate.py | 66 - .../setuptools/command/saveopts.py | 22 - .../site-packages/setuptools/command/sdist.py | 221 - .../setuptools/command/setopt.py | 149 - .../site-packages/setuptools/command/test.py | 271 - .../setuptools/command/upload.py | 196 - .../setuptools/command/upload_docs.py | 206 - .../Lib/site-packages/setuptools/config.py | 656 -- .../Lib/site-packages/setuptools/dep_util.py | 23 - .../Lib/site-packages/setuptools/depends.py | 186 - .../venv/Lib/site-packages/setuptools/dist.py | 1280 --- .../Lib/site-packages/setuptools/extension.py | 57 - .../setuptools/extern/__init__.py | 73 - .../__pycache__/__init__.cpython-38.pyc | Bin 2440 -> 0 bytes .../Lib/site-packages/setuptools/glibc.py | 86 - .../venv/Lib/site-packages/setuptools/glob.py | 174 - .../Lib/site-packages/setuptools/gui-32.exe | Bin 65536 -> 0 bytes .../Lib/site-packages/setuptools/gui-64.exe | Bin 75264 -> 0 bytes .../venv/Lib/site-packages/setuptools/gui.exe | Bin 65536 -> 0 bytes .../Lib/site-packages/setuptools/launch.py | 35 - .../site-packages/setuptools/lib2to3_ex.py | 62 - .../Lib/site-packages/setuptools/monkey.py | 179 - .../venv/Lib/site-packages/setuptools/msvc.py | 1301 --- .../site-packages/setuptools/namespaces.py | 107 - .../site-packages/setuptools/package_index.py | 1136 --- .../site-packages/setuptools/pep425tags.py | 319 - .../site-packages/setuptools/py27compat.py | 28 - .../site-packages/setuptools/py31compat.py | 32 - .../site-packages/setuptools/py33compat.py | 59 - .../Lib/site-packages/setuptools/sandbox.py | 491 - .../setuptools/script (dev).tmpl | 6 - .../Lib/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 - .../Lib/site-packages/setuptools/version.py | 6 - .../Lib/site-packages/setuptools/wheel.py | 211 - .../setuptools/windows_support.py | 29 - .../six-1.15.0.dist-info/INSTALLER | 1 - .../six-1.15.0.dist-info/LICENSE | 18 - .../six-1.15.0.dist-info/METADATA | 49 - .../site-packages/six-1.15.0.dist-info/RECORD | 8 - .../site-packages/six-1.15.0.dist-info/WHEEL | 6 - .../six-1.15.0.dist-info/top_level.txt | 1 - .../venv/Lib/site-packages/six.py | 982 -- .../soupsieve-2.0.1.dist-info/INSTALLER | 1 - .../soupsieve-2.0.1.dist-info/LICENSE.md | 21 - .../soupsieve-2.0.1.dist-info/METADATA | 124 - .../soupsieve-2.0.1.dist-info/RECORD | 18 - .../soupsieve-2.0.1.dist-info/WHEEL | 5 - .../soupsieve-2.0.1.dist-info/top_level.txt | 1 - .../Lib/site-packages/soupsieve/__init__.py | 111 - .../Lib/site-packages/soupsieve/__meta__.py | 189 - .../__pycache__/__init__.cpython-38.pyc | Bin 3651 -> 0 bytes .../__pycache__/__meta__.cpython-38.pyc | Bin 5728 -> 0 bytes .../__pycache__/css_match.cpython-38.pyc | Bin 33238 -> 0 bytes .../__pycache__/css_parser.cpython-38.pyc | Bin 26748 -> 0 bytes .../__pycache__/css_types.cpython-38.pyc | Bin 10736 -> 0 bytes .../soupsieve/__pycache__/util.cpython-38.pyc | Bin 3063 -> 0 bytes .../Lib/site-packages/soupsieve/css_match.py | 1497 --- .../Lib/site-packages/soupsieve/css_parser.py | 1194 --- .../Lib/site-packages/soupsieve/css_types.py | 345 - .../venv/Lib/site-packages/soupsieve/util.py | 121 - .../toml-0.10.1.dist-info/DESCRIPTION.rst | 199 - .../toml-0.10.1.dist-info/INSTALLER | 1 - .../toml-0.10.1.dist-info/LICENSE.txt | 27 - .../toml-0.10.1.dist-info/METADATA | 226 - .../toml-0.10.1.dist-info/RECORD | 20 - .../site-packages/toml-0.10.1.dist-info/WHEEL | 6 - .../toml-0.10.1.dist-info/metadata.json | 1 - .../toml-0.10.1.dist-info/top_level.txt | 1 - .../venv/Lib/site-packages/toml/__init__.py | 25 - .../toml/__pycache__/__init__.cpython-38.pyc | Bin 705 -> 0 bytes .../toml/__pycache__/common.cpython-38.pyc | Bin 338 -> 0 bytes .../toml/__pycache__/decoder.cpython-38.pyc | Bin 23153 -> 0 bytes .../toml/__pycache__/encoder.cpython-38.pyc | Bin 9394 -> 0 bytes .../toml/__pycache__/ordered.cpython-38.pyc | Bin 938 -> 0 bytes .../toml/__pycache__/tz.cpython-38.pyc | Bin 1106 -> 0 bytes .../venv/Lib/site-packages/toml/common.py | 6 - .../venv/Lib/site-packages/toml/decoder.py | 1052 --- .../venv/Lib/site-packages/toml/encoder.py | 304 - .../venv/Lib/site-packages/toml/ordered.py | 15 - .../venv/Lib/site-packages/toml/tz.py | 21 - .../urllib3-1.25.9.dist-info/INSTALLER | 1 - .../urllib3-1.25.9.dist-info/LICENSE.txt | 21 - .../urllib3-1.25.9.dist-info/METADATA | 1262 --- .../urllib3-1.25.9.dist-info/RECORD | 78 - .../urllib3-1.25.9.dist-info/WHEEL | 6 - .../urllib3-1.25.9.dist-info/top_level.txt | 1 - .../Lib/site-packages/urllib3/__init__.py | 86 - .../__pycache__/__init__.cpython-38.pyc | Bin 2106 -> 0 bytes .../__pycache__/_collections.cpython-38.pyc | Bin 10660 -> 0 bytes .../__pycache__/connection.cpython-38.pyc | Bin 10337 -> 0 bytes .../__pycache__/connectionpool.cpython-38.pyc | Bin 24028 -> 0 bytes .../__pycache__/exceptions.cpython-38.pyc | Bin 10754 -> 0 bytes .../urllib3/__pycache__/fields.cpython-38.pyc | Bin 8120 -> 0 bytes .../__pycache__/filepost.cpython-38.pyc | Bin 2755 -> 0 bytes .../__pycache__/poolmanager.cpython-38.pyc | Bin 13587 -> 0 bytes .../__pycache__/request.cpython-38.pyc | Bin 5643 -> 0 bytes .../__pycache__/response.cpython-38.pyc | Bin 20778 -> 0 bytes .../Lib/site-packages/urllib3/_collections.py | 336 - .../Lib/site-packages/urllib3/connection.py | 423 - .../site-packages/urllib3/connectionpool.py | 1033 -- .../site-packages/urllib3/contrib/__init__.py | 0 .../__pycache__/__init__.cpython-38.pyc | Bin 184 -> 0 bytes .../_appengine_environ.cpython-38.pyc | Bin 1408 -> 0 bytes .../__pycache__/appengine.cpython-38.pyc | Bin 8230 -> 0 bytes .../__pycache__/ntlmpool.cpython-38.pyc | Bin 3262 -> 0 bytes .../__pycache__/pyopenssl.cpython-38.pyc | Bin 15068 -> 0 bytes .../securetransport.cpython-38.pyc | Bin 19852 -> 0 bytes .../contrib/__pycache__/socks.cpython-38.pyc | Bin 5568 -> 0 bytes .../urllib3/contrib/_appengine_environ.py | 36 - .../contrib/_securetransport/__init__.py | 0 .../__pycache__/__init__.cpython-38.pyc | Bin 198 -> 0 bytes .../__pycache__/bindings.cpython-38.pyc | Bin 10217 -> 0 bytes .../__pycache__/low_level.cpython-38.pyc | Bin 7538 -> 0 bytes .../contrib/_securetransport/bindings.py | 493 - .../contrib/_securetransport/low_level.py | 328 - .../urllib3/contrib/appengine.py | 314 - .../site-packages/urllib3/contrib/ntlmpool.py | 121 - .../urllib3/contrib/pyopenssl.py | 501 - .../urllib3/contrib/securetransport.py | 864 -- .../site-packages/urllib3/contrib/socks.py | 210 - .../Lib/site-packages/urllib3/exceptions.py | 272 - .../venv/Lib/site-packages/urllib3/fields.py | 273 - .../Lib/site-packages/urllib3/filepost.py | 98 - .../urllib3/packages/__init__.py | 5 - .../__pycache__/__init__.cpython-38.pyc | Bin 298 -> 0 bytes .../packages/__pycache__/six.cpython-38.pyc | Bin 26510 -> 0 bytes .../urllib3/packages/backports/__init__.py | 0 .../__pycache__/__init__.cpython-38.pyc | Bin 192 -> 0 bytes .../__pycache__/makefile.cpython-38.pyc | Bin 1296 -> 0 bytes .../urllib3/packages/backports/makefile.py | 52 - .../Lib/site-packages/urllib3/packages/six.py | 1021 -- .../packages/ssl_match_hostname/__init__.py | 19 - .../__pycache__/__init__.cpython-38.pyc | Bin 539 -> 0 bytes .../_implementation.cpython-38.pyc | Bin 3293 -> 0 bytes .../ssl_match_hostname/_implementation.py | 160 - .../Lib/site-packages/urllib3/poolmanager.py | 492 - .../venv/Lib/site-packages/urllib3/request.py | 171 - .../Lib/site-packages/urllib3/response.py | 821 -- .../site-packages/urllib3/util/__init__.py | 46 - .../util/__pycache__/__init__.cpython-38.pyc | Bin 1004 -> 0 bytes .../__pycache__/connection.cpython-38.pyc | Bin 3177 -> 0 bytes .../util/__pycache__/queue.cpython-38.pyc | Bin 1049 -> 0 bytes .../util/__pycache__/request.cpython-38.pyc | Bin 3343 -> 0 bytes .../util/__pycache__/response.cpython-38.pyc | Bin 1970 -> 0 bytes .../util/__pycache__/retry.cpython-38.pyc | Bin 13028 -> 0 bytes .../util/__pycache__/ssl_.cpython-38.pyc | Bin 10107 -> 0 bytes .../util/__pycache__/timeout.cpython-38.pyc | Bin 8881 -> 0 bytes .../util/__pycache__/url.cpython-38.pyc | Bin 10690 -> 0 bytes .../util/__pycache__/wait.cpython-38.pyc | Bin 3098 -> 0 bytes .../site-packages/urllib3/util/connection.py | 138 - .../Lib/site-packages/urllib3/util/queue.py | 21 - .../Lib/site-packages/urllib3/util/request.py | 135 - .../site-packages/urllib3/util/response.py | 86 - .../Lib/site-packages/urllib3/util/retry.py | 453 - .../Lib/site-packages/urllib3/util/ssl_.py | 414 - .../Lib/site-packages/urllib3/util/timeout.py | 261 - .../Lib/site-packages/urllib3/util/url.py | 430 - .../Lib/site-packages/urllib3/util/wait.py | 153 - .../Lib/site-packages/werkzeug/__init__.py | 20 - .../__pycache__/__init__.cpython-38.pyc | Bin 725 -> 0 bytes .../__pycache__/_compat.cpython-38.pyc | Bin 7371 -> 0 bytes .../__pycache__/_internal.cpython-38.pyc | Bin 13161 -> 0 bytes .../__pycache__/_reloader.cpython-38.pyc | Bin 9659 -> 0 bytes .../__pycache__/datastructures.cpython-38.pyc | Bin 108592 -> 0 bytes .../__pycache__/exceptions.cpython-38.pyc | Bin 27134 -> 0 bytes .../__pycache__/filesystem.cpython-38.pyc | Bin 2186 -> 0 bytes .../__pycache__/formparser.cpython-38.pyc | Bin 16244 -> 0 bytes .../werkzeug/__pycache__/http.cpython-38.pyc | Bin 35623 -> 0 bytes .../werkzeug/__pycache__/local.cpython-38.pyc | Bin 18685 -> 0 bytes .../__pycache__/posixemulation.cpython-38.pyc | Bin 2748 -> 0 bytes .../__pycache__/routing.cpython-38.pyc | Bin 68142 -> 0 bytes .../__pycache__/security.cpython-38.pyc | Bin 8000 -> 0 bytes .../__pycache__/serving.cpython-38.pyc | Bin 29676 -> 0 bytes .../werkzeug/__pycache__/test.cpython-38.pyc | Bin 32856 -> 0 bytes .../__pycache__/testapp.cpython-38.pyc | Bin 9403 -> 0 bytes .../werkzeug/__pycache__/urls.cpython-38.pyc | Bin 35986 -> 0 bytes .../__pycache__/useragents.cpython-38.pyc | Bin 5500 -> 0 bytes .../werkzeug/__pycache__/utils.cpython-38.pyc | Bin 23137 -> 0 bytes .../werkzeug/__pycache__/wsgi.cpython-38.pyc | Bin 30941 -> 0 bytes .../Lib/site-packages/werkzeug/_compat.py | 228 - .../Lib/site-packages/werkzeug/_internal.py | 473 - .../Lib/site-packages/werkzeug/_reloader.py | 341 - .../site-packages/werkzeug/datastructures.py | 3120 ------- .../site-packages/werkzeug/debug/__init__.py | 498 - .../debug/__pycache__/__init__.cpython-38.pyc | Bin 12546 -> 0 bytes .../debug/__pycache__/console.cpython-38.pyc | Bin 7417 -> 0 bytes .../debug/__pycache__/repr.cpython-38.pyc | Bin 8626 -> 0 bytes .../debug/__pycache__/tbtools.cpython-38.pyc | Bin 18642 -> 0 bytes .../site-packages/werkzeug/debug/console.py | 218 - .../Lib/site-packages/werkzeug/debug/repr.py | 297 - .../werkzeug/debug/shared/FONT_LICENSE | 96 - .../werkzeug/debug/shared/console.png | Bin 507 -> 0 bytes .../werkzeug/debug/shared/debugger.js | 210 - .../werkzeug/debug/shared/jquery.js | 2 - .../werkzeug/debug/shared/less.png | Bin 191 -> 0 bytes .../werkzeug/debug/shared/more.png | Bin 200 -> 0 bytes .../werkzeug/debug/shared/source.png | Bin 818 -> 0 bytes .../werkzeug/debug/shared/style.css | 154 - .../werkzeug/debug/shared/ubuntu.ttf | Bin 70220 -> 0 bytes .../site-packages/werkzeug/debug/tbtools.py | 628 -- .../Lib/site-packages/werkzeug/exceptions.py | 829 -- .../Lib/site-packages/werkzeug/filesystem.py | 64 - .../Lib/site-packages/werkzeug/formparser.py | 584 -- .../venv/Lib/site-packages/werkzeug/http.py | 1307 --- .../venv/Lib/site-packages/werkzeug/local.py | 420 - .../werkzeug/middleware/__init__.py | 25 - .../__pycache__/__init__.cpython-38.pyc | Bin 743 -> 0 bytes .../__pycache__/dispatcher.cpython-38.pyc | Bin 2440 -> 0 bytes .../__pycache__/http_proxy.cpython-38.pyc | Bin 6352 -> 0 bytes .../__pycache__/lint.cpython-38.pyc | Bin 11714 -> 0 bytes .../__pycache__/profiler.cpython-38.pyc | Bin 4635 -> 0 bytes .../__pycache__/proxy_fix.cpython-38.pyc | Bin 5810 -> 0 bytes .../__pycache__/shared_data.cpython-38.pyc | Bin 8943 -> 0 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 | 169 - .../werkzeug/middleware/shared_data.py | 293 - .../site-packages/werkzeug/posixemulation.py | 117 - .../Lib/site-packages/werkzeug/routing.py | 2210 ----- .../Lib/site-packages/werkzeug/security.py | 249 - .../Lib/site-packages/werkzeug/serving.py | 1117 --- .../venv/Lib/site-packages/werkzeug/test.py | 1123 --- .../Lib/site-packages/werkzeug/testapp.py | 241 - .../venv/Lib/site-packages/werkzeug/urls.py | 1138 --- .../Lib/site-packages/werkzeug/useragents.py | 202 - .../venv/Lib/site-packages/werkzeug/utils.py | 778 -- .../werkzeug/wrappers/__init__.py | 36 - .../__pycache__/__init__.cpython-38.pyc | Bin 1673 -> 0 bytes .../__pycache__/accept.cpython-38.pyc | Bin 2232 -> 0 bytes .../wrappers/__pycache__/auth.cpython-38.pyc | Bin 1698 -> 0 bytes .../__pycache__/base_request.cpython-38.pyc | Bin 21660 -> 0 bytes .../__pycache__/base_response.cpython-38.pyc | Bin 23305 -> 0 bytes .../common_descriptors.cpython-38.pyc | Bin 12426 -> 0 bytes .../wrappers/__pycache__/cors.cpython-38.pyc | Bin 3290 -> 0 bytes .../wrappers/__pycache__/etag.cpython-38.pyc | Bin 11561 -> 0 bytes .../wrappers/__pycache__/json.cpython-38.pyc | Bin 4360 -> 0 bytes .../__pycache__/request.cpython-38.pyc | Bin 1973 -> 0 bytes .../__pycache__/response.cpython-38.pyc | Bin 3492 -> 0 bytes .../__pycache__/user_agent.cpython-38.pyc | Bin 841 -> 0 bytes .../site-packages/werkzeug/wrappers/accept.py | 50 - .../site-packages/werkzeug/wrappers/auth.py | 33 - .../werkzeug/wrappers/base_request.py | 673 -- .../werkzeug/wrappers/base_response.py | 700 -- .../werkzeug/wrappers/common_descriptors.py | 341 - .../site-packages/werkzeug/wrappers/cors.py | 100 - .../site-packages/werkzeug/wrappers/etag.py | 304 - .../site-packages/werkzeug/wrappers/json.py | 145 - .../werkzeug/wrappers/request.py | 49 - .../werkzeug/wrappers/response.py | 84 - .../werkzeug/wrappers/user_agent.py | 14 - .../venv/Lib/site-packages/werkzeug/wsgi.py | 1000 -- .../wrapt-1.12.1-py3.8.egg-info/PKG-INFO | 167 - .../wrapt-1.12.1-py3.8.egg-info/SOURCES.txt | 11 - .../dependency_links.txt | 1 - .../installed-files.txt | 13 - .../wrapt-1.12.1-py3.8.egg-info/top_level.txt | 1 - .../venv/Lib/site-packages/wrapt/__init__.py | 16 - .../wrapt/__pycache__/__init__.cpython-38.pyc | Bin 986 -> 0 bytes .../__pycache__/decorators.cpython-38.pyc | Bin 9258 -> 0 bytes .../wrapt/__pycache__/importer.cpython-38.pyc | Bin 4266 -> 0 bytes .../wrapt/__pycache__/wrappers.cpython-38.pyc | Bin 24391 -> 0 bytes .../wrapt/_wrappers.cp38-win32.pyd | Bin 32256 -> 0 bytes .../Lib/site-packages/wrapt/decorators.py | 516 - .../venv/Lib/site-packages/wrapt/importer.py | 230 - .../venv/Lib/site-packages/wrapt/wrappers.py | 947 -- Jobs_Collections/venv/Scripts/Activate.ps1 | 385 - Jobs_Collections/venv/Scripts/activate | 76 - Jobs_Collections/venv/Scripts/activate.bat | 33 - Jobs_Collections/venv/Scripts/chardetect.exe | Bin 93061 -> 0 bytes Jobs_Collections/venv/Scripts/deactivate.bat | 21 - .../venv/Scripts/easy_install-3.8.exe | Bin 93070 -> 0 bytes .../venv/Scripts/easy_install.exe | Bin 93070 -> 0 bytes Jobs_Collections/venv/Scripts/epylint.exe | Bin 93059 -> 0 bytes Jobs_Collections/venv/Scripts/flask.exe | Bin 93048 -> 0 bytes Jobs_Collections/venv/Scripts/isort.exe | Bin 93049 -> 0 bytes Jobs_Collections/venv/Scripts/pip.exe | Bin 93052 -> 0 bytes Jobs_Collections/venv/Scripts/pip3.8.exe | Bin 93052 -> 0 bytes Jobs_Collections/venv/Scripts/pip3.exe | Bin 93052 -> 0 bytes Jobs_Collections/venv/Scripts/pylint.exe | Bin 93057 -> 0 bytes Jobs_Collections/venv/Scripts/pyreverse.exe | Bin 93063 -> 0 bytes Jobs_Collections/venv/Scripts/python.exe | Bin 420936 -> 0 bytes Jobs_Collections/venv/Scripts/pythonw.exe | Bin 419912 -> 0 bytes Jobs_Collections/venv/Scripts/symilar.exe | Bin 93059 -> 0 bytes Jobs_Collections/venv/bin/Activate.ps1 | 241 - Jobs_Collections/venv/bin/activate | 76 - Jobs_Collections/venv/bin/activate.csh | 37 - Jobs_Collections/venv/bin/activate.fish | 75 - Jobs_Collections/venv/bin/chardetect | 10 - Jobs_Collections/venv/bin/easy_install | 10 - Jobs_Collections/venv/bin/easy_install-3.8 | 10 - Jobs_Collections/venv/bin/epylint | 10 - Jobs_Collections/venv/bin/flask | 10 - Jobs_Collections/venv/bin/isort | 10 - Jobs_Collections/venv/bin/pip | 10 - Jobs_Collections/venv/bin/pip3 | 10 - Jobs_Collections/venv/bin/pip3.8 | 10 - Jobs_Collections/venv/bin/pylint | 10 - Jobs_Collections/venv/bin/pyreverse | 10 - Jobs_Collections/venv/bin/python | 1 - Jobs_Collections/venv/bin/python3 | 1 - Jobs_Collections/venv/bin/symilar | 10 - Jobs_Collections/venv/pyvenv.cfg | 3 - index.py | 76 - .../zx9/web/controller/HomeController.java | 129 +- src/main/webapp/WEB-INF/views/jobsearch.jsp | 19 +- .../webapp/WEB-INF/views/template/index.jsp | 7 +- src/main/webapp/resources/images/suwonone.jpg | Bin 0 -> 21538 bytes src/main/webapp/resources/images/suwontwo.jpg | Bin 0 -> 48439 bytes static/bootstrap-theme.css | 587 -- static/bootstrap-theme.css.map | 1 - static/bootstrap-theme.min.css | 6 - static/bootstrap-theme.min.css.map | 1 - static/bootstrap.css | 6757 ------------- static/bootstrap.css.map | 1 - static/bootstrap.min.css | 6 - static/bootstrap.min.css.map | 1 - static/customize.css | 52 - static/template.css | 19 - .../zx9/web/controller/HomeController.class | Bin 12424 -> 14505 bytes .../META-INF/maven/com.zx9/web/pom.properties | 4 +- templates/index.html | 226 - test.py | 5 - 3839 files changed, 138 insertions(+), 653087 deletions(-) delete mode 100644 Jobs_Collections/.DS_Store delete mode 100644 Jobs_Collections/.gitattributes delete mode 100644 Jobs_Collections/README.md delete mode 100644 Jobs_Collections/__pycache__/indeed.cpython-38.pyc delete mode 100644 Jobs_Collections/__pycache__/job_korea.cpython-38.pyc delete mode 100644 Jobs_Collections/__pycache__/news.cpython-38.pyc delete mode 100644 Jobs_Collections/__pycache__/saramin.cpython-38.pyc delete mode 100644 Jobs_Collections/indeed.py delete mode 100644 Jobs_Collections/index.py delete mode 100644 Jobs_Collections/job_korea.py delete mode 100644 Jobs_Collections/news.py delete mode 100644 Jobs_Collections/saramin.py delete mode 100644 Jobs_Collections/static/.DS_Store delete mode 100644 Jobs_Collections/static/favicon.png delete mode 100644 Jobs_Collections/static/header.css delete mode 100644 Jobs_Collections/static/heart.png delete mode 100644 Jobs_Collections/static/loadingbar.css delete mode 100644 Jobs_Collections/static/news.js delete mode 100644 Jobs_Collections/static/pocket.js delete mode 100644 Jobs_Collections/static/pocket.png delete mode 100644 Jobs_Collections/static/reload.js delete mode 100644 Jobs_Collections/static/search.js delete mode 100644 Jobs_Collections/static/section_page1.css delete mode 100644 Jobs_Collections/static/section_page2.css delete mode 100644 Jobs_Collections/templates/Jobs_collection.html delete mode 100644 Jobs_Collections/venv/Lib/python3.8/site-packages/Flask-1.1.2.dist-info/INSTALLER delete mode 100644 Jobs_Collections/venv/Lib/python3.8/site-packages/Flask-1.1.2.dist-info/LICENSE.rst delete mode 100644 Jobs_Collections/venv/Lib/python3.8/site-packages/Flask-1.1.2.dist-info/METADATA delete mode 100644 Jobs_Collections/venv/Lib/python3.8/site-packages/Flask-1.1.2.dist-info/RECORD delete mode 100644 Jobs_Collections/venv/Lib/python3.8/site-packages/Flask-1.1.2.dist-info/WHEEL delete mode 100644 Jobs_Collections/venv/Lib/python3.8/site-packages/Flask-1.1.2.dist-info/entry_points.txt delete mode 100644 Jobs_Collections/venv/Lib/python3.8/site-packages/Flask-1.1.2.dist-info/top_level.txt delete mode 100644 Jobs_Collections/venv/Lib/python3.8/site-packages/Jinja2-2.11.2.dist-info/INSTALLER delete mode 100644 Jobs_Collections/venv/Lib/python3.8/site-packages/Jinja2-2.11.2.dist-info/LICENSE.rst delete mode 100644 Jobs_Collections/venv/Lib/python3.8/site-packages/Jinja2-2.11.2.dist-info/METADATA delete mode 100644 Jobs_Collections/venv/Lib/python3.8/site-packages/Jinja2-2.11.2.dist-info/RECORD delete mode 100644 Jobs_Collections/venv/Lib/python3.8/site-packages/Jinja2-2.11.2.dist-info/WHEEL delete mode 100644 Jobs_Collections/venv/Lib/python3.8/site-packages/Jinja2-2.11.2.dist-info/entry_points.txt delete mode 100644 Jobs_Collections/venv/Lib/python3.8/site-packages/Jinja2-2.11.2.dist-info/top_level.txt delete mode 100644 Jobs_Collections/venv/Lib/python3.8/site-packages/MarkupSafe-1.1.1.dist-info/INSTALLER delete mode 100644 Jobs_Collections/venv/Lib/python3.8/site-packages/MarkupSafe-1.1.1.dist-info/LICENSE.rst delete mode 100644 Jobs_Collections/venv/Lib/python3.8/site-packages/MarkupSafe-1.1.1.dist-info/METADATA delete mode 100644 Jobs_Collections/venv/Lib/python3.8/site-packages/MarkupSafe-1.1.1.dist-info/RECORD delete mode 100644 Jobs_Collections/venv/Lib/python3.8/site-packages/MarkupSafe-1.1.1.dist-info/WHEEL delete mode 100644 Jobs_Collections/venv/Lib/python3.8/site-packages/MarkupSafe-1.1.1.dist-info/top_level.txt delete mode 100644 Jobs_Collections/venv/Lib/python3.8/site-packages/Werkzeug-1.0.1.dist-info/INSTALLER delete mode 100644 Jobs_Collections/venv/Lib/python3.8/site-packages/Werkzeug-1.0.1.dist-info/LICENSE.rst delete mode 100644 Jobs_Collections/venv/Lib/python3.8/site-packages/Werkzeug-1.0.1.dist-info/METADATA delete mode 100644 Jobs_Collections/venv/Lib/python3.8/site-packages/Werkzeug-1.0.1.dist-info/RECORD delete mode 100644 Jobs_Collections/venv/Lib/python3.8/site-packages/Werkzeug-1.0.1.dist-info/WHEEL delete mode 100644 Jobs_Collections/venv/Lib/python3.8/site-packages/Werkzeug-1.0.1.dist-info/top_level.txt delete mode 100644 Jobs_Collections/venv/Lib/python3.8/site-packages/__pycache__/easy_install.cpython-38.pyc delete mode 100644 Jobs_Collections/venv/Lib/python3.8/site-packages/__pycache__/mccabe.cpython-38.pyc delete mode 100644 Jobs_Collections/venv/Lib/python3.8/site-packages/__pycache__/six.cpython-38.pyc delete mode 100644 Jobs_Collections/venv/Lib/python3.8/site-packages/astroid-2.4.2.dist-info/COPYING delete mode 100644 Jobs_Collections/venv/Lib/python3.8/site-packages/astroid-2.4.2.dist-info/COPYING.LESSER delete mode 100644 Jobs_Collections/venv/Lib/python3.8/site-packages/astroid-2.4.2.dist-info/INSTALLER delete mode 100644 Jobs_Collections/venv/Lib/python3.8/site-packages/astroid-2.4.2.dist-info/METADATA delete mode 100644 Jobs_Collections/venv/Lib/python3.8/site-packages/astroid-2.4.2.dist-info/RECORD delete mode 100644 Jobs_Collections/venv/Lib/python3.8/site-packages/astroid-2.4.2.dist-info/WHEEL delete mode 100644 Jobs_Collections/venv/Lib/python3.8/site-packages/astroid-2.4.2.dist-info/top_level.txt delete mode 100644 Jobs_Collections/venv/Lib/python3.8/site-packages/astroid/__init__.py delete mode 100644 Jobs_Collections/venv/Lib/python3.8/site-packages/astroid/__pkginfo__.py delete mode 100644 Jobs_Collections/venv/Lib/python3.8/site-packages/astroid/__pycache__/__init__.cpython-38.pyc delete mode 100644 Jobs_Collections/venv/Lib/python3.8/site-packages/astroid/__pycache__/__pkginfo__.cpython-38.pyc delete mode 100644 Jobs_Collections/venv/Lib/python3.8/site-packages/astroid/__pycache__/_ast.cpython-38.pyc delete mode 100644 Jobs_Collections/venv/Lib/python3.8/site-packages/astroid/__pycache__/arguments.cpython-38.pyc delete mode 100644 Jobs_Collections/venv/Lib/python3.8/site-packages/astroid/__pycache__/as_string.cpython-38.pyc delete mode 100644 Jobs_Collections/venv/Lib/python3.8/site-packages/astroid/__pycache__/bases.cpython-38.pyc delete mode 100644 Jobs_Collections/venv/Lib/python3.8/site-packages/astroid/__pycache__/builder.cpython-38.pyc delete mode 100644 Jobs_Collections/venv/Lib/python3.8/site-packages/astroid/__pycache__/context.cpython-38.pyc delete mode 100644 Jobs_Collections/venv/Lib/python3.8/site-packages/astroid/__pycache__/decorators.cpython-38.pyc delete mode 100644 Jobs_Collections/venv/Lib/python3.8/site-packages/astroid/__pycache__/exceptions.cpython-38.pyc delete mode 100644 Jobs_Collections/venv/Lib/python3.8/site-packages/astroid/__pycache__/helpers.cpython-38.pyc delete mode 100644 Jobs_Collections/venv/Lib/python3.8/site-packages/astroid/__pycache__/inference.cpython-38.pyc delete mode 100644 Jobs_Collections/venv/Lib/python3.8/site-packages/astroid/__pycache__/manager.cpython-38.pyc delete mode 100644 Jobs_Collections/venv/Lib/python3.8/site-packages/astroid/__pycache__/mixins.cpython-38.pyc delete mode 100644 Jobs_Collections/venv/Lib/python3.8/site-packages/astroid/__pycache__/modutils.cpython-38.pyc delete mode 100644 Jobs_Collections/venv/Lib/python3.8/site-packages/astroid/__pycache__/node_classes.cpython-38.pyc delete mode 100644 Jobs_Collections/venv/Lib/python3.8/site-packages/astroid/__pycache__/nodes.cpython-38.pyc delete mode 100644 Jobs_Collections/venv/Lib/python3.8/site-packages/astroid/__pycache__/objects.cpython-38.pyc delete mode 100644 Jobs_Collections/venv/Lib/python3.8/site-packages/astroid/__pycache__/protocols.cpython-38.pyc delete mode 100644 Jobs_Collections/venv/Lib/python3.8/site-packages/astroid/__pycache__/raw_building.cpython-38.pyc delete mode 100644 Jobs_Collections/venv/Lib/python3.8/site-packages/astroid/__pycache__/rebuilder.cpython-38.pyc delete mode 100644 Jobs_Collections/venv/Lib/python3.8/site-packages/astroid/__pycache__/scoped_nodes.cpython-38.pyc delete mode 100644 Jobs_Collections/venv/Lib/python3.8/site-packages/astroid/__pycache__/test_utils.cpython-38.pyc delete mode 100644 Jobs_Collections/venv/Lib/python3.8/site-packages/astroid/__pycache__/transforms.cpython-38.pyc delete mode 100644 Jobs_Collections/venv/Lib/python3.8/site-packages/astroid/__pycache__/util.cpython-38.pyc delete mode 100644 Jobs_Collections/venv/Lib/python3.8/site-packages/astroid/_ast.py delete mode 100644 Jobs_Collections/venv/Lib/python3.8/site-packages/astroid/arguments.py delete mode 100644 Jobs_Collections/venv/Lib/python3.8/site-packages/astroid/as_string.py delete mode 100644 Jobs_Collections/venv/Lib/python3.8/site-packages/astroid/bases.py delete mode 100644 Jobs_Collections/venv/Lib/python3.8/site-packages/astroid/brain/__pycache__/brain_argparse.cpython-38.pyc delete mode 100644 Jobs_Collections/venv/Lib/python3.8/site-packages/astroid/brain/__pycache__/brain_attrs.cpython-38.pyc delete mode 100644 Jobs_Collections/venv/Lib/python3.8/site-packages/astroid/brain/__pycache__/brain_boto3.cpython-38.pyc delete mode 100644 Jobs_Collections/venv/Lib/python3.8/site-packages/astroid/brain/__pycache__/brain_builtin_inference.cpython-38.pyc delete mode 100644 Jobs_Collections/venv/Lib/python3.8/site-packages/astroid/brain/__pycache__/brain_collections.cpython-38.pyc delete mode 100644 Jobs_Collections/venv/Lib/python3.8/site-packages/astroid/brain/__pycache__/brain_crypt.cpython-38.pyc delete mode 100644 Jobs_Collections/venv/Lib/python3.8/site-packages/astroid/brain/__pycache__/brain_curses.cpython-38.pyc delete mode 100644 Jobs_Collections/venv/Lib/python3.8/site-packages/astroid/brain/__pycache__/brain_dataclasses.cpython-38.pyc delete mode 100644 Jobs_Collections/venv/Lib/python3.8/site-packages/astroid/brain/__pycache__/brain_dateutil.cpython-38.pyc delete mode 100644 Jobs_Collections/venv/Lib/python3.8/site-packages/astroid/brain/__pycache__/brain_fstrings.cpython-38.pyc delete mode 100644 Jobs_Collections/venv/Lib/python3.8/site-packages/astroid/brain/__pycache__/brain_functools.cpython-38.pyc delete mode 100644 Jobs_Collections/venv/Lib/python3.8/site-packages/astroid/brain/__pycache__/brain_gi.cpython-38.pyc delete mode 100644 Jobs_Collections/venv/Lib/python3.8/site-packages/astroid/brain/__pycache__/brain_hashlib.cpython-38.pyc delete mode 100644 Jobs_Collections/venv/Lib/python3.8/site-packages/astroid/brain/__pycache__/brain_http.cpython-38.pyc delete mode 100644 Jobs_Collections/venv/Lib/python3.8/site-packages/astroid/brain/__pycache__/brain_io.cpython-38.pyc delete mode 100644 Jobs_Collections/venv/Lib/python3.8/site-packages/astroid/brain/__pycache__/brain_mechanize.cpython-38.pyc delete mode 100644 Jobs_Collections/venv/Lib/python3.8/site-packages/astroid/brain/__pycache__/brain_multiprocessing.cpython-38.pyc delete mode 100644 Jobs_Collections/venv/Lib/python3.8/site-packages/astroid/brain/__pycache__/brain_namedtuple_enum.cpython-38.pyc delete mode 100644 Jobs_Collections/venv/Lib/python3.8/site-packages/astroid/brain/__pycache__/brain_nose.cpython-38.pyc delete mode 100644 Jobs_Collections/venv/Lib/python3.8/site-packages/astroid/brain/__pycache__/brain_numpy_core_fromnumeric.cpython-38.pyc delete mode 100644 Jobs_Collections/venv/Lib/python3.8/site-packages/astroid/brain/__pycache__/brain_numpy_core_function_base.cpython-38.pyc delete mode 100644 Jobs_Collections/venv/Lib/python3.8/site-packages/astroid/brain/__pycache__/brain_numpy_core_multiarray.cpython-38.pyc delete mode 100644 Jobs_Collections/venv/Lib/python3.8/site-packages/astroid/brain/__pycache__/brain_numpy_core_numeric.cpython-38.pyc delete mode 100644 Jobs_Collections/venv/Lib/python3.8/site-packages/astroid/brain/__pycache__/brain_numpy_core_numerictypes.cpython-38.pyc delete mode 100644 Jobs_Collections/venv/Lib/python3.8/site-packages/astroid/brain/__pycache__/brain_numpy_core_umath.cpython-38.pyc delete mode 100644 Jobs_Collections/venv/Lib/python3.8/site-packages/astroid/brain/__pycache__/brain_numpy_ndarray.cpython-38.pyc delete mode 100644 Jobs_Collections/venv/Lib/python3.8/site-packages/astroid/brain/__pycache__/brain_numpy_random_mtrand.cpython-38.pyc delete mode 100644 Jobs_Collections/venv/Lib/python3.8/site-packages/astroid/brain/__pycache__/brain_numpy_utils.cpython-38.pyc delete mode 100644 Jobs_Collections/venv/Lib/python3.8/site-packages/astroid/brain/__pycache__/brain_pkg_resources.cpython-38.pyc delete mode 100644 Jobs_Collections/venv/Lib/python3.8/site-packages/astroid/brain/__pycache__/brain_pytest.cpython-38.pyc delete mode 100644 Jobs_Collections/venv/Lib/python3.8/site-packages/astroid/brain/__pycache__/brain_qt.cpython-38.pyc delete mode 100644 Jobs_Collections/venv/Lib/python3.8/site-packages/astroid/brain/__pycache__/brain_random.cpython-38.pyc delete mode 100644 Jobs_Collections/venv/Lib/python3.8/site-packages/astroid/brain/__pycache__/brain_re.cpython-38.pyc delete mode 100644 Jobs_Collections/venv/Lib/python3.8/site-packages/astroid/brain/__pycache__/brain_responses.cpython-38.pyc delete mode 100644 Jobs_Collections/venv/Lib/python3.8/site-packages/astroid/brain/__pycache__/brain_scipy_signal.cpython-38.pyc delete mode 100644 Jobs_Collections/venv/Lib/python3.8/site-packages/astroid/brain/__pycache__/brain_six.cpython-38.pyc delete mode 100644 Jobs_Collections/venv/Lib/python3.8/site-packages/astroid/brain/__pycache__/brain_ssl.cpython-38.pyc delete mode 100644 Jobs_Collections/venv/Lib/python3.8/site-packages/astroid/brain/__pycache__/brain_subprocess.cpython-38.pyc delete mode 100644 Jobs_Collections/venv/Lib/python3.8/site-packages/astroid/brain/__pycache__/brain_threading.cpython-38.pyc delete mode 100644 Jobs_Collections/venv/Lib/python3.8/site-packages/astroid/brain/__pycache__/brain_typing.cpython-38.pyc delete mode 100644 Jobs_Collections/venv/Lib/python3.8/site-packages/astroid/brain/__pycache__/brain_uuid.cpython-38.pyc delete mode 100644 Jobs_Collections/venv/Lib/python3.8/site-packages/astroid/brain/brain_argparse.py delete mode 100644 Jobs_Collections/venv/Lib/python3.8/site-packages/astroid/brain/brain_attrs.py delete mode 100644 Jobs_Collections/venv/Lib/python3.8/site-packages/astroid/brain/brain_boto3.py delete mode 100644 Jobs_Collections/venv/Lib/python3.8/site-packages/astroid/brain/brain_builtin_inference.py delete mode 100644 Jobs_Collections/venv/Lib/python3.8/site-packages/astroid/brain/brain_collections.py delete mode 100644 Jobs_Collections/venv/Lib/python3.8/site-packages/astroid/brain/brain_crypt.py delete mode 100644 Jobs_Collections/venv/Lib/python3.8/site-packages/astroid/brain/brain_curses.py delete mode 100644 Jobs_Collections/venv/Lib/python3.8/site-packages/astroid/brain/brain_dataclasses.py delete mode 100644 Jobs_Collections/venv/Lib/python3.8/site-packages/astroid/brain/brain_dateutil.py delete mode 100644 Jobs_Collections/venv/Lib/python3.8/site-packages/astroid/brain/brain_fstrings.py delete mode 100644 Jobs_Collections/venv/Lib/python3.8/site-packages/astroid/brain/brain_functools.py delete mode 100644 Jobs_Collections/venv/Lib/python3.8/site-packages/astroid/brain/brain_gi.py delete mode 100644 Jobs_Collections/venv/Lib/python3.8/site-packages/astroid/brain/brain_hashlib.py delete mode 100644 Jobs_Collections/venv/Lib/python3.8/site-packages/astroid/brain/brain_http.py delete mode 100644 Jobs_Collections/venv/Lib/python3.8/site-packages/astroid/brain/brain_io.py delete mode 100644 Jobs_Collections/venv/Lib/python3.8/site-packages/astroid/brain/brain_mechanize.py delete mode 100644 Jobs_Collections/venv/Lib/python3.8/site-packages/astroid/brain/brain_multiprocessing.py delete mode 100644 Jobs_Collections/venv/Lib/python3.8/site-packages/astroid/brain/brain_namedtuple_enum.py delete mode 100644 Jobs_Collections/venv/Lib/python3.8/site-packages/astroid/brain/brain_nose.py delete mode 100644 Jobs_Collections/venv/Lib/python3.8/site-packages/astroid/brain/brain_numpy_core_fromnumeric.py delete mode 100644 Jobs_Collections/venv/Lib/python3.8/site-packages/astroid/brain/brain_numpy_core_function_base.py delete mode 100644 Jobs_Collections/venv/Lib/python3.8/site-packages/astroid/brain/brain_numpy_core_multiarray.py delete mode 100644 Jobs_Collections/venv/Lib/python3.8/site-packages/astroid/brain/brain_numpy_core_numeric.py delete mode 100644 Jobs_Collections/venv/Lib/python3.8/site-packages/astroid/brain/brain_numpy_core_numerictypes.py delete mode 100644 Jobs_Collections/venv/Lib/python3.8/site-packages/astroid/brain/brain_numpy_core_umath.py delete mode 100644 Jobs_Collections/venv/Lib/python3.8/site-packages/astroid/brain/brain_numpy_ndarray.py delete mode 100644 Jobs_Collections/venv/Lib/python3.8/site-packages/astroid/brain/brain_numpy_random_mtrand.py delete mode 100644 Jobs_Collections/venv/Lib/python3.8/site-packages/astroid/brain/brain_numpy_utils.py delete mode 100644 Jobs_Collections/venv/Lib/python3.8/site-packages/astroid/brain/brain_pkg_resources.py delete mode 100644 Jobs_Collections/venv/Lib/python3.8/site-packages/astroid/brain/brain_pytest.py delete mode 100644 Jobs_Collections/venv/Lib/python3.8/site-packages/astroid/brain/brain_qt.py delete mode 100644 Jobs_Collections/venv/Lib/python3.8/site-packages/astroid/brain/brain_random.py delete mode 100644 Jobs_Collections/venv/Lib/python3.8/site-packages/astroid/brain/brain_re.py delete mode 100644 Jobs_Collections/venv/Lib/python3.8/site-packages/astroid/brain/brain_responses.py delete mode 100644 Jobs_Collections/venv/Lib/python3.8/site-packages/astroid/brain/brain_scipy_signal.py delete mode 100644 Jobs_Collections/venv/Lib/python3.8/site-packages/astroid/brain/brain_six.py delete mode 100644 Jobs_Collections/venv/Lib/python3.8/site-packages/astroid/brain/brain_ssl.py delete mode 100644 Jobs_Collections/venv/Lib/python3.8/site-packages/astroid/brain/brain_subprocess.py delete mode 100644 Jobs_Collections/venv/Lib/python3.8/site-packages/astroid/brain/brain_threading.py delete mode 100644 Jobs_Collections/venv/Lib/python3.8/site-packages/astroid/brain/brain_typing.py delete mode 100644 Jobs_Collections/venv/Lib/python3.8/site-packages/astroid/brain/brain_uuid.py delete mode 100644 Jobs_Collections/venv/Lib/python3.8/site-packages/astroid/builder.py delete mode 100644 Jobs_Collections/venv/Lib/python3.8/site-packages/astroid/context.py delete mode 100644 Jobs_Collections/venv/Lib/python3.8/site-packages/astroid/decorators.py delete mode 100644 Jobs_Collections/venv/Lib/python3.8/site-packages/astroid/exceptions.py delete mode 100644 Jobs_Collections/venv/Lib/python3.8/site-packages/astroid/helpers.py delete mode 100644 Jobs_Collections/venv/Lib/python3.8/site-packages/astroid/inference.py delete mode 100644 Jobs_Collections/venv/Lib/python3.8/site-packages/astroid/interpreter/__init__.py delete mode 100644 Jobs_Collections/venv/Lib/python3.8/site-packages/astroid/interpreter/__pycache__/__init__.cpython-38.pyc delete mode 100644 Jobs_Collections/venv/Lib/python3.8/site-packages/astroid/interpreter/__pycache__/dunder_lookup.cpython-38.pyc delete mode 100644 Jobs_Collections/venv/Lib/python3.8/site-packages/astroid/interpreter/__pycache__/objectmodel.cpython-38.pyc delete mode 100644 Jobs_Collections/venv/Lib/python3.8/site-packages/astroid/interpreter/_import/__init__.py delete mode 100644 Jobs_Collections/venv/Lib/python3.8/site-packages/astroid/interpreter/_import/__pycache__/__init__.cpython-38.pyc delete mode 100644 Jobs_Collections/venv/Lib/python3.8/site-packages/astroid/interpreter/_import/__pycache__/spec.cpython-38.pyc delete mode 100644 Jobs_Collections/venv/Lib/python3.8/site-packages/astroid/interpreter/_import/__pycache__/util.cpython-38.pyc delete mode 100644 Jobs_Collections/venv/Lib/python3.8/site-packages/astroid/interpreter/_import/spec.py delete mode 100644 Jobs_Collections/venv/Lib/python3.8/site-packages/astroid/interpreter/_import/util.py delete mode 100644 Jobs_Collections/venv/Lib/python3.8/site-packages/astroid/interpreter/dunder_lookup.py delete mode 100644 Jobs_Collections/venv/Lib/python3.8/site-packages/astroid/interpreter/objectmodel.py delete mode 100644 Jobs_Collections/venv/Lib/python3.8/site-packages/astroid/manager.py delete mode 100644 Jobs_Collections/venv/Lib/python3.8/site-packages/astroid/mixins.py delete mode 100644 Jobs_Collections/venv/Lib/python3.8/site-packages/astroid/modutils.py delete mode 100644 Jobs_Collections/venv/Lib/python3.8/site-packages/astroid/node_classes.py delete mode 100644 Jobs_Collections/venv/Lib/python3.8/site-packages/astroid/nodes.py delete mode 100644 Jobs_Collections/venv/Lib/python3.8/site-packages/astroid/objects.py delete mode 100644 Jobs_Collections/venv/Lib/python3.8/site-packages/astroid/protocols.py delete mode 100644 Jobs_Collections/venv/Lib/python3.8/site-packages/astroid/raw_building.py delete mode 100644 Jobs_Collections/venv/Lib/python3.8/site-packages/astroid/rebuilder.py delete mode 100644 Jobs_Collections/venv/Lib/python3.8/site-packages/astroid/scoped_nodes.py delete mode 100644 Jobs_Collections/venv/Lib/python3.8/site-packages/astroid/test_utils.py delete mode 100644 Jobs_Collections/venv/Lib/python3.8/site-packages/astroid/transforms.py delete mode 100644 Jobs_Collections/venv/Lib/python3.8/site-packages/astroid/util.py delete mode 100644 Jobs_Collections/venv/Lib/python3.8/site-packages/beautifulsoup4-4.9.1.dist-info/AUTHORS delete mode 100644 Jobs_Collections/venv/Lib/python3.8/site-packages/beautifulsoup4-4.9.1.dist-info/COPYING.txt delete mode 100644 Jobs_Collections/venv/Lib/python3.8/site-packages/beautifulsoup4-4.9.1.dist-info/INSTALLER delete mode 100644 Jobs_Collections/venv/Lib/python3.8/site-packages/beautifulsoup4-4.9.1.dist-info/LICENSE delete mode 100644 Jobs_Collections/venv/Lib/python3.8/site-packages/beautifulsoup4-4.9.1.dist-info/METADATA delete mode 100644 Jobs_Collections/venv/Lib/python3.8/site-packages/beautifulsoup4-4.9.1.dist-info/RECORD delete mode 100644 Jobs_Collections/venv/Lib/python3.8/site-packages/beautifulsoup4-4.9.1.dist-info/WHEEL delete mode 100644 Jobs_Collections/venv/Lib/python3.8/site-packages/beautifulsoup4-4.9.1.dist-info/top_level.txt delete mode 100644 Jobs_Collections/venv/Lib/python3.8/site-packages/bs4-0.0.1-py3.8.egg-info/PKG-INFO delete mode 100644 Jobs_Collections/venv/Lib/python3.8/site-packages/bs4-0.0.1-py3.8.egg-info/SOURCES.txt delete mode 100644 Jobs_Collections/venv/Lib/python3.8/site-packages/bs4-0.0.1-py3.8.egg-info/dependency_links.txt delete mode 100644 Jobs_Collections/venv/Lib/python3.8/site-packages/bs4-0.0.1-py3.8.egg-info/installed-files.txt delete mode 100644 Jobs_Collections/venv/Lib/python3.8/site-packages/bs4-0.0.1-py3.8.egg-info/requires.txt delete mode 100644 Jobs_Collections/venv/Lib/python3.8/site-packages/bs4-0.0.1-py3.8.egg-info/top_level.txt delete mode 100644 Jobs_Collections/venv/Lib/python3.8/site-packages/bs4/__init__.py delete mode 100644 Jobs_Collections/venv/Lib/python3.8/site-packages/bs4/__pycache__/__init__.cpython-38.pyc delete mode 100644 Jobs_Collections/venv/Lib/python3.8/site-packages/bs4/__pycache__/dammit.cpython-38.pyc delete mode 100644 Jobs_Collections/venv/Lib/python3.8/site-packages/bs4/__pycache__/diagnose.cpython-38.pyc delete mode 100644 Jobs_Collections/venv/Lib/python3.8/site-packages/bs4/__pycache__/element.cpython-38.pyc delete mode 100644 Jobs_Collections/venv/Lib/python3.8/site-packages/bs4/__pycache__/formatter.cpython-38.pyc delete mode 100644 Jobs_Collections/venv/Lib/python3.8/site-packages/bs4/__pycache__/testing.cpython-38.pyc delete mode 100644 Jobs_Collections/venv/Lib/python3.8/site-packages/bs4/builder/__init__.py delete mode 100644 Jobs_Collections/venv/Lib/python3.8/site-packages/bs4/builder/__pycache__/__init__.cpython-38.pyc delete mode 100644 Jobs_Collections/venv/Lib/python3.8/site-packages/bs4/builder/__pycache__/_html5lib.cpython-38.pyc delete mode 100644 Jobs_Collections/venv/Lib/python3.8/site-packages/bs4/builder/__pycache__/_htmlparser.cpython-38.pyc delete mode 100644 Jobs_Collections/venv/Lib/python3.8/site-packages/bs4/builder/__pycache__/_lxml.cpython-38.pyc delete mode 100644 Jobs_Collections/venv/Lib/python3.8/site-packages/bs4/builder/_html5lib.py delete mode 100644 Jobs_Collections/venv/Lib/python3.8/site-packages/bs4/builder/_htmlparser.py delete mode 100644 Jobs_Collections/venv/Lib/python3.8/site-packages/bs4/builder/_lxml.py delete mode 100644 Jobs_Collections/venv/Lib/python3.8/site-packages/bs4/dammit.py delete mode 100644 Jobs_Collections/venv/Lib/python3.8/site-packages/bs4/diagnose.py delete mode 100644 Jobs_Collections/venv/Lib/python3.8/site-packages/bs4/element.py delete mode 100644 Jobs_Collections/venv/Lib/python3.8/site-packages/bs4/formatter.py delete mode 100644 Jobs_Collections/venv/Lib/python3.8/site-packages/bs4/testing.py delete mode 100644 Jobs_Collections/venv/Lib/python3.8/site-packages/bs4/tests/__init__.py delete mode 100644 Jobs_Collections/venv/Lib/python3.8/site-packages/bs4/tests/__pycache__/__init__.cpython-38.pyc delete mode 100644 Jobs_Collections/venv/Lib/python3.8/site-packages/bs4/tests/__pycache__/test_builder_registry.cpython-38.pyc delete mode 100644 Jobs_Collections/venv/Lib/python3.8/site-packages/bs4/tests/__pycache__/test_docs.cpython-38.pyc delete mode 100644 Jobs_Collections/venv/Lib/python3.8/site-packages/bs4/tests/__pycache__/test_html5lib.cpython-38.pyc delete mode 100644 Jobs_Collections/venv/Lib/python3.8/site-packages/bs4/tests/__pycache__/test_htmlparser.cpython-38.pyc delete mode 100644 Jobs_Collections/venv/Lib/python3.8/site-packages/bs4/tests/__pycache__/test_lxml.cpython-38.pyc delete mode 100644 Jobs_Collections/venv/Lib/python3.8/site-packages/bs4/tests/__pycache__/test_soup.cpython-38.pyc delete mode 100644 Jobs_Collections/venv/Lib/python3.8/site-packages/bs4/tests/__pycache__/test_tree.cpython-38.pyc delete mode 100644 Jobs_Collections/venv/Lib/python3.8/site-packages/bs4/tests/test_builder_registry.py delete mode 100644 Jobs_Collections/venv/Lib/python3.8/site-packages/bs4/tests/test_docs.py delete mode 100644 Jobs_Collections/venv/Lib/python3.8/site-packages/bs4/tests/test_html5lib.py delete mode 100644 Jobs_Collections/venv/Lib/python3.8/site-packages/bs4/tests/test_htmlparser.py delete mode 100644 Jobs_Collections/venv/Lib/python3.8/site-packages/bs4/tests/test_lxml.py delete mode 100644 Jobs_Collections/venv/Lib/python3.8/site-packages/bs4/tests/test_soup.py delete mode 100644 Jobs_Collections/venv/Lib/python3.8/site-packages/bs4/tests/test_tree.py delete mode 100644 Jobs_Collections/venv/Lib/python3.8/site-packages/certifi-2020.4.5.2.dist-info/INSTALLER delete mode 100644 Jobs_Collections/venv/Lib/python3.8/site-packages/certifi-2020.4.5.2.dist-info/LICENSE delete mode 100644 Jobs_Collections/venv/Lib/python3.8/site-packages/certifi-2020.4.5.2.dist-info/METADATA delete mode 100644 Jobs_Collections/venv/Lib/python3.8/site-packages/certifi-2020.4.5.2.dist-info/RECORD delete mode 100644 Jobs_Collections/venv/Lib/python3.8/site-packages/certifi-2020.4.5.2.dist-info/WHEEL delete mode 100644 Jobs_Collections/venv/Lib/python3.8/site-packages/certifi-2020.4.5.2.dist-info/top_level.txt delete mode 100644 Jobs_Collections/venv/Lib/python3.8/site-packages/certifi/__init__.py delete mode 100644 Jobs_Collections/venv/Lib/python3.8/site-packages/certifi/__main__.py delete mode 100644 Jobs_Collections/venv/Lib/python3.8/site-packages/certifi/__pycache__/__init__.cpython-38.pyc delete mode 100644 Jobs_Collections/venv/Lib/python3.8/site-packages/certifi/__pycache__/__main__.cpython-38.pyc delete mode 100644 Jobs_Collections/venv/Lib/python3.8/site-packages/certifi/__pycache__/core.cpython-38.pyc delete mode 100644 Jobs_Collections/venv/Lib/python3.8/site-packages/certifi/cacert.pem delete mode 100644 Jobs_Collections/venv/Lib/python3.8/site-packages/certifi/core.py delete mode 100644 Jobs_Collections/venv/Lib/python3.8/site-packages/chardet-3.0.4.dist-info/DESCRIPTION.rst delete mode 100644 Jobs_Collections/venv/Lib/python3.8/site-packages/chardet-3.0.4.dist-info/INSTALLER delete mode 100644 Jobs_Collections/venv/Lib/python3.8/site-packages/chardet-3.0.4.dist-info/METADATA delete mode 100644 Jobs_Collections/venv/Lib/python3.8/site-packages/chardet-3.0.4.dist-info/RECORD delete mode 100644 Jobs_Collections/venv/Lib/python3.8/site-packages/chardet-3.0.4.dist-info/WHEEL delete mode 100644 Jobs_Collections/venv/Lib/python3.8/site-packages/chardet-3.0.4.dist-info/entry_points.txt delete mode 100644 Jobs_Collections/venv/Lib/python3.8/site-packages/chardet-3.0.4.dist-info/metadata.json delete mode 100644 Jobs_Collections/venv/Lib/python3.8/site-packages/chardet-3.0.4.dist-info/top_level.txt delete mode 100644 Jobs_Collections/venv/Lib/python3.8/site-packages/chardet/__init__.py delete mode 100644 Jobs_Collections/venv/Lib/python3.8/site-packages/chardet/__pycache__/__init__.cpython-38.pyc delete mode 100644 Jobs_Collections/venv/Lib/python3.8/site-packages/chardet/__pycache__/big5freq.cpython-38.pyc delete mode 100644 Jobs_Collections/venv/Lib/python3.8/site-packages/chardet/__pycache__/big5prober.cpython-38.pyc delete mode 100644 Jobs_Collections/venv/Lib/python3.8/site-packages/chardet/__pycache__/chardistribution.cpython-38.pyc delete mode 100644 Jobs_Collections/venv/Lib/python3.8/site-packages/chardet/__pycache__/charsetgroupprober.cpython-38.pyc delete mode 100644 Jobs_Collections/venv/Lib/python3.8/site-packages/chardet/__pycache__/charsetprober.cpython-38.pyc delete mode 100644 Jobs_Collections/venv/Lib/python3.8/site-packages/chardet/__pycache__/codingstatemachine.cpython-38.pyc delete mode 100644 Jobs_Collections/venv/Lib/python3.8/site-packages/chardet/__pycache__/compat.cpython-38.pyc delete mode 100644 Jobs_Collections/venv/Lib/python3.8/site-packages/chardet/__pycache__/cp949prober.cpython-38.pyc delete mode 100644 Jobs_Collections/venv/Lib/python3.8/site-packages/chardet/__pycache__/enums.cpython-38.pyc delete mode 100644 Jobs_Collections/venv/Lib/python3.8/site-packages/chardet/__pycache__/escprober.cpython-38.pyc delete mode 100644 Jobs_Collections/venv/Lib/python3.8/site-packages/chardet/__pycache__/escsm.cpython-38.pyc delete mode 100644 Jobs_Collections/venv/Lib/python3.8/site-packages/chardet/__pycache__/eucjpprober.cpython-38.pyc delete mode 100644 Jobs_Collections/venv/Lib/python3.8/site-packages/chardet/__pycache__/euckrfreq.cpython-38.pyc delete mode 100644 Jobs_Collections/venv/Lib/python3.8/site-packages/chardet/__pycache__/euckrprober.cpython-38.pyc delete mode 100644 Jobs_Collections/venv/Lib/python3.8/site-packages/chardet/__pycache__/euctwfreq.cpython-38.pyc delete mode 100644 Jobs_Collections/venv/Lib/python3.8/site-packages/chardet/__pycache__/euctwprober.cpython-38.pyc delete mode 100644 Jobs_Collections/venv/Lib/python3.8/site-packages/chardet/__pycache__/gb2312freq.cpython-38.pyc delete mode 100644 Jobs_Collections/venv/Lib/python3.8/site-packages/chardet/__pycache__/gb2312prober.cpython-38.pyc delete mode 100644 Jobs_Collections/venv/Lib/python3.8/site-packages/chardet/__pycache__/hebrewprober.cpython-38.pyc delete mode 100644 Jobs_Collections/venv/Lib/python3.8/site-packages/chardet/__pycache__/jisfreq.cpython-38.pyc delete mode 100644 Jobs_Collections/venv/Lib/python3.8/site-packages/chardet/__pycache__/jpcntx.cpython-38.pyc delete mode 100644 Jobs_Collections/venv/Lib/python3.8/site-packages/chardet/__pycache__/langbulgarianmodel.cpython-38.pyc delete mode 100644 Jobs_Collections/venv/Lib/python3.8/site-packages/chardet/__pycache__/langcyrillicmodel.cpython-38.pyc delete mode 100644 Jobs_Collections/venv/Lib/python3.8/site-packages/chardet/__pycache__/langgreekmodel.cpython-38.pyc delete mode 100644 Jobs_Collections/venv/Lib/python3.8/site-packages/chardet/__pycache__/langhebrewmodel.cpython-38.pyc delete mode 100644 Jobs_Collections/venv/Lib/python3.8/site-packages/chardet/__pycache__/langhungarianmodel.cpython-38.pyc delete mode 100644 Jobs_Collections/venv/Lib/python3.8/site-packages/chardet/__pycache__/langthaimodel.cpython-38.pyc delete mode 100644 Jobs_Collections/venv/Lib/python3.8/site-packages/chardet/__pycache__/langturkishmodel.cpython-38.pyc delete mode 100644 Jobs_Collections/venv/Lib/python3.8/site-packages/chardet/__pycache__/latin1prober.cpython-38.pyc delete mode 100644 Jobs_Collections/venv/Lib/python3.8/site-packages/chardet/__pycache__/mbcharsetprober.cpython-38.pyc delete mode 100644 Jobs_Collections/venv/Lib/python3.8/site-packages/chardet/__pycache__/mbcsgroupprober.cpython-38.pyc delete mode 100644 Jobs_Collections/venv/Lib/python3.8/site-packages/chardet/__pycache__/mbcssm.cpython-38.pyc delete mode 100644 Jobs_Collections/venv/Lib/python3.8/site-packages/chardet/__pycache__/sbcharsetprober.cpython-38.pyc delete mode 100644 Jobs_Collections/venv/Lib/python3.8/site-packages/chardet/__pycache__/sbcsgroupprober.cpython-38.pyc delete mode 100644 Jobs_Collections/venv/Lib/python3.8/site-packages/chardet/__pycache__/sjisprober.cpython-38.pyc delete mode 100644 Jobs_Collections/venv/Lib/python3.8/site-packages/chardet/__pycache__/universaldetector.cpython-38.pyc delete mode 100644 Jobs_Collections/venv/Lib/python3.8/site-packages/chardet/__pycache__/utf8prober.cpython-38.pyc delete mode 100644 Jobs_Collections/venv/Lib/python3.8/site-packages/chardet/__pycache__/version.cpython-38.pyc delete mode 100644 Jobs_Collections/venv/Lib/python3.8/site-packages/chardet/big5freq.py delete mode 100644 Jobs_Collections/venv/Lib/python3.8/site-packages/chardet/big5prober.py delete mode 100644 Jobs_Collections/venv/Lib/python3.8/site-packages/chardet/chardistribution.py delete mode 100644 Jobs_Collections/venv/Lib/python3.8/site-packages/chardet/charsetgroupprober.py delete mode 100644 Jobs_Collections/venv/Lib/python3.8/site-packages/chardet/charsetprober.py delete mode 100644 Jobs_Collections/venv/Lib/python3.8/site-packages/chardet/cli/__init__.py delete mode 100644 Jobs_Collections/venv/Lib/python3.8/site-packages/chardet/cli/__pycache__/__init__.cpython-38.pyc delete mode 100644 Jobs_Collections/venv/Lib/python3.8/site-packages/chardet/cli/__pycache__/chardetect.cpython-38.pyc delete mode 100644 Jobs_Collections/venv/Lib/python3.8/site-packages/chardet/cli/chardetect.py delete mode 100644 Jobs_Collections/venv/Lib/python3.8/site-packages/chardet/codingstatemachine.py delete mode 100644 Jobs_Collections/venv/Lib/python3.8/site-packages/chardet/compat.py delete mode 100644 Jobs_Collections/venv/Lib/python3.8/site-packages/chardet/cp949prober.py delete mode 100644 Jobs_Collections/venv/Lib/python3.8/site-packages/chardet/enums.py delete mode 100644 Jobs_Collections/venv/Lib/python3.8/site-packages/chardet/escprober.py delete mode 100644 Jobs_Collections/venv/Lib/python3.8/site-packages/chardet/escsm.py delete mode 100644 Jobs_Collections/venv/Lib/python3.8/site-packages/chardet/eucjpprober.py delete mode 100644 Jobs_Collections/venv/Lib/python3.8/site-packages/chardet/euckrfreq.py delete mode 100644 Jobs_Collections/venv/Lib/python3.8/site-packages/chardet/euckrprober.py delete mode 100644 Jobs_Collections/venv/Lib/python3.8/site-packages/chardet/euctwfreq.py delete mode 100644 Jobs_Collections/venv/Lib/python3.8/site-packages/chardet/euctwprober.py delete mode 100644 Jobs_Collections/venv/Lib/python3.8/site-packages/chardet/gb2312freq.py delete mode 100644 Jobs_Collections/venv/Lib/python3.8/site-packages/chardet/gb2312prober.py delete mode 100644 Jobs_Collections/venv/Lib/python3.8/site-packages/chardet/hebrewprober.py delete mode 100644 Jobs_Collections/venv/Lib/python3.8/site-packages/chardet/jisfreq.py delete mode 100644 Jobs_Collections/venv/Lib/python3.8/site-packages/chardet/jpcntx.py delete mode 100644 Jobs_Collections/venv/Lib/python3.8/site-packages/chardet/langbulgarianmodel.py delete mode 100644 Jobs_Collections/venv/Lib/python3.8/site-packages/chardet/langcyrillicmodel.py delete mode 100644 Jobs_Collections/venv/Lib/python3.8/site-packages/chardet/langgreekmodel.py delete mode 100644 Jobs_Collections/venv/Lib/python3.8/site-packages/chardet/langhebrewmodel.py delete mode 100644 Jobs_Collections/venv/Lib/python3.8/site-packages/chardet/langhungarianmodel.py delete mode 100644 Jobs_Collections/venv/Lib/python3.8/site-packages/chardet/langthaimodel.py delete mode 100644 Jobs_Collections/venv/Lib/python3.8/site-packages/chardet/langturkishmodel.py delete mode 100644 Jobs_Collections/venv/Lib/python3.8/site-packages/chardet/latin1prober.py delete mode 100644 Jobs_Collections/venv/Lib/python3.8/site-packages/chardet/mbcharsetprober.py delete mode 100644 Jobs_Collections/venv/Lib/python3.8/site-packages/chardet/mbcsgroupprober.py delete mode 100644 Jobs_Collections/venv/Lib/python3.8/site-packages/chardet/mbcssm.py delete mode 100644 Jobs_Collections/venv/Lib/python3.8/site-packages/chardet/sbcharsetprober.py delete mode 100644 Jobs_Collections/venv/Lib/python3.8/site-packages/chardet/sbcsgroupprober.py delete mode 100644 Jobs_Collections/venv/Lib/python3.8/site-packages/chardet/sjisprober.py delete mode 100644 Jobs_Collections/venv/Lib/python3.8/site-packages/chardet/universaldetector.py delete mode 100644 Jobs_Collections/venv/Lib/python3.8/site-packages/chardet/utf8prober.py delete mode 100644 Jobs_Collections/venv/Lib/python3.8/site-packages/chardet/version.py delete mode 100644 Jobs_Collections/venv/Lib/python3.8/site-packages/click-7.1.2.dist-info/INSTALLER delete mode 100644 Jobs_Collections/venv/Lib/python3.8/site-packages/click-7.1.2.dist-info/LICENSE.rst delete mode 100644 Jobs_Collections/venv/Lib/python3.8/site-packages/click-7.1.2.dist-info/METADATA delete mode 100644 Jobs_Collections/venv/Lib/python3.8/site-packages/click-7.1.2.dist-info/RECORD delete mode 100644 Jobs_Collections/venv/Lib/python3.8/site-packages/click-7.1.2.dist-info/WHEEL delete mode 100644 Jobs_Collections/venv/Lib/python3.8/site-packages/click-7.1.2.dist-info/top_level.txt delete mode 100644 Jobs_Collections/venv/Lib/python3.8/site-packages/click/__init__.py delete mode 100644 Jobs_Collections/venv/Lib/python3.8/site-packages/click/__pycache__/__init__.cpython-38.pyc delete mode 100644 Jobs_Collections/venv/Lib/python3.8/site-packages/click/__pycache__/_bashcomplete.cpython-38.pyc delete mode 100644 Jobs_Collections/venv/Lib/python3.8/site-packages/click/__pycache__/_compat.cpython-38.pyc delete mode 100644 Jobs_Collections/venv/Lib/python3.8/site-packages/click/__pycache__/_termui_impl.cpython-38.pyc delete mode 100644 Jobs_Collections/venv/Lib/python3.8/site-packages/click/__pycache__/_textwrap.cpython-38.pyc delete mode 100644 Jobs_Collections/venv/Lib/python3.8/site-packages/click/__pycache__/_unicodefun.cpython-38.pyc delete mode 100644 Jobs_Collections/venv/Lib/python3.8/site-packages/click/__pycache__/_winconsole.cpython-38.pyc delete mode 100644 Jobs_Collections/venv/Lib/python3.8/site-packages/click/__pycache__/core.cpython-38.pyc delete mode 100644 Jobs_Collections/venv/Lib/python3.8/site-packages/click/__pycache__/decorators.cpython-38.pyc delete mode 100644 Jobs_Collections/venv/Lib/python3.8/site-packages/click/__pycache__/exceptions.cpython-38.pyc delete mode 100644 Jobs_Collections/venv/Lib/python3.8/site-packages/click/__pycache__/formatting.cpython-38.pyc delete mode 100644 Jobs_Collections/venv/Lib/python3.8/site-packages/click/__pycache__/globals.cpython-38.pyc delete mode 100644 Jobs_Collections/venv/Lib/python3.8/site-packages/click/__pycache__/parser.cpython-38.pyc delete mode 100644 Jobs_Collections/venv/Lib/python3.8/site-packages/click/__pycache__/termui.cpython-38.pyc delete mode 100644 Jobs_Collections/venv/Lib/python3.8/site-packages/click/__pycache__/testing.cpython-38.pyc delete mode 100644 Jobs_Collections/venv/Lib/python3.8/site-packages/click/__pycache__/types.cpython-38.pyc delete mode 100644 Jobs_Collections/venv/Lib/python3.8/site-packages/click/__pycache__/utils.cpython-38.pyc delete mode 100644 Jobs_Collections/venv/Lib/python3.8/site-packages/click/_bashcomplete.py delete mode 100644 Jobs_Collections/venv/Lib/python3.8/site-packages/click/_compat.py delete mode 100644 Jobs_Collections/venv/Lib/python3.8/site-packages/click/_termui_impl.py delete mode 100644 Jobs_Collections/venv/Lib/python3.8/site-packages/click/_textwrap.py delete mode 100644 Jobs_Collections/venv/Lib/python3.8/site-packages/click/_unicodefun.py delete mode 100644 Jobs_Collections/venv/Lib/python3.8/site-packages/click/_winconsole.py delete mode 100644 Jobs_Collections/venv/Lib/python3.8/site-packages/click/core.py delete mode 100644 Jobs_Collections/venv/Lib/python3.8/site-packages/click/decorators.py delete mode 100644 Jobs_Collections/venv/Lib/python3.8/site-packages/click/exceptions.py delete mode 100644 Jobs_Collections/venv/Lib/python3.8/site-packages/click/formatting.py delete mode 100644 Jobs_Collections/venv/Lib/python3.8/site-packages/click/globals.py delete mode 100644 Jobs_Collections/venv/Lib/python3.8/site-packages/click/parser.py delete mode 100644 Jobs_Collections/venv/Lib/python3.8/site-packages/click/termui.py delete mode 100644 Jobs_Collections/venv/Lib/python3.8/site-packages/click/testing.py delete mode 100644 Jobs_Collections/venv/Lib/python3.8/site-packages/click/types.py delete mode 100644 Jobs_Collections/venv/Lib/python3.8/site-packages/click/utils.py delete mode 100644 Jobs_Collections/venv/Lib/python3.8/site-packages/easy_install.py delete mode 100644 Jobs_Collections/venv/Lib/python3.8/site-packages/flask/__init__.py delete mode 100644 Jobs_Collections/venv/Lib/python3.8/site-packages/flask/__main__.py delete mode 100644 Jobs_Collections/venv/Lib/python3.8/site-packages/flask/__pycache__/__init__.cpython-38.pyc delete mode 100644 Jobs_Collections/venv/Lib/python3.8/site-packages/flask/__pycache__/__main__.cpython-38.pyc delete mode 100644 Jobs_Collections/venv/Lib/python3.8/site-packages/flask/__pycache__/_compat.cpython-38.pyc delete mode 100644 Jobs_Collections/venv/Lib/python3.8/site-packages/flask/__pycache__/app.cpython-38.pyc delete mode 100644 Jobs_Collections/venv/Lib/python3.8/site-packages/flask/__pycache__/blueprints.cpython-38.pyc delete mode 100644 Jobs_Collections/venv/Lib/python3.8/site-packages/flask/__pycache__/cli.cpython-38.pyc delete mode 100644 Jobs_Collections/venv/Lib/python3.8/site-packages/flask/__pycache__/config.cpython-38.pyc delete mode 100644 Jobs_Collections/venv/Lib/python3.8/site-packages/flask/__pycache__/ctx.cpython-38.pyc delete mode 100644 Jobs_Collections/venv/Lib/python3.8/site-packages/flask/__pycache__/debughelpers.cpython-38.pyc delete mode 100644 Jobs_Collections/venv/Lib/python3.8/site-packages/flask/__pycache__/globals.cpython-38.pyc delete mode 100644 Jobs_Collections/venv/Lib/python3.8/site-packages/flask/__pycache__/helpers.cpython-38.pyc delete mode 100644 Jobs_Collections/venv/Lib/python3.8/site-packages/flask/__pycache__/logging.cpython-38.pyc delete mode 100644 Jobs_Collections/venv/Lib/python3.8/site-packages/flask/__pycache__/sessions.cpython-38.pyc delete mode 100644 Jobs_Collections/venv/Lib/python3.8/site-packages/flask/__pycache__/signals.cpython-38.pyc delete mode 100644 Jobs_Collections/venv/Lib/python3.8/site-packages/flask/__pycache__/templating.cpython-38.pyc delete mode 100644 Jobs_Collections/venv/Lib/python3.8/site-packages/flask/__pycache__/testing.cpython-38.pyc delete mode 100644 Jobs_Collections/venv/Lib/python3.8/site-packages/flask/__pycache__/views.cpython-38.pyc delete mode 100644 Jobs_Collections/venv/Lib/python3.8/site-packages/flask/__pycache__/wrappers.cpython-38.pyc delete mode 100644 Jobs_Collections/venv/Lib/python3.8/site-packages/flask/_compat.py delete mode 100644 Jobs_Collections/venv/Lib/python3.8/site-packages/flask/app.py delete mode 100644 Jobs_Collections/venv/Lib/python3.8/site-packages/flask/blueprints.py delete mode 100644 Jobs_Collections/venv/Lib/python3.8/site-packages/flask/cli.py delete mode 100644 Jobs_Collections/venv/Lib/python3.8/site-packages/flask/config.py delete mode 100644 Jobs_Collections/venv/Lib/python3.8/site-packages/flask/ctx.py delete mode 100644 Jobs_Collections/venv/Lib/python3.8/site-packages/flask/debughelpers.py delete mode 100644 Jobs_Collections/venv/Lib/python3.8/site-packages/flask/globals.py delete mode 100644 Jobs_Collections/venv/Lib/python3.8/site-packages/flask/helpers.py delete mode 100644 Jobs_Collections/venv/Lib/python3.8/site-packages/flask/json/__init__.py delete mode 100644 Jobs_Collections/venv/Lib/python3.8/site-packages/flask/json/__pycache__/__init__.cpython-38.pyc delete mode 100644 Jobs_Collections/venv/Lib/python3.8/site-packages/flask/json/__pycache__/tag.cpython-38.pyc delete mode 100644 Jobs_Collections/venv/Lib/python3.8/site-packages/flask/json/tag.py delete mode 100644 Jobs_Collections/venv/Lib/python3.8/site-packages/flask/logging.py delete mode 100644 Jobs_Collections/venv/Lib/python3.8/site-packages/flask/sessions.py delete mode 100644 Jobs_Collections/venv/Lib/python3.8/site-packages/flask/signals.py delete mode 100644 Jobs_Collections/venv/Lib/python3.8/site-packages/flask/templating.py delete mode 100644 Jobs_Collections/venv/Lib/python3.8/site-packages/flask/testing.py delete mode 100644 Jobs_Collections/venv/Lib/python3.8/site-packages/flask/views.py delete mode 100644 Jobs_Collections/venv/Lib/python3.8/site-packages/flask/wrappers.py delete mode 100644 Jobs_Collections/venv/Lib/python3.8/site-packages/idna-2.9.dist-info/INSTALLER delete mode 100644 Jobs_Collections/venv/Lib/python3.8/site-packages/idna-2.9.dist-info/LICENSE.rst delete mode 100644 Jobs_Collections/venv/Lib/python3.8/site-packages/idna-2.9.dist-info/METADATA delete mode 100644 Jobs_Collections/venv/Lib/python3.8/site-packages/idna-2.9.dist-info/RECORD delete mode 100644 Jobs_Collections/venv/Lib/python3.8/site-packages/idna-2.9.dist-info/WHEEL delete mode 100644 Jobs_Collections/venv/Lib/python3.8/site-packages/idna-2.9.dist-info/top_level.txt delete mode 100644 Jobs_Collections/venv/Lib/python3.8/site-packages/idna/__init__.py delete mode 100644 Jobs_Collections/venv/Lib/python3.8/site-packages/idna/__pycache__/__init__.cpython-38.pyc delete mode 100644 Jobs_Collections/venv/Lib/python3.8/site-packages/idna/__pycache__/codec.cpython-38.pyc delete mode 100644 Jobs_Collections/venv/Lib/python3.8/site-packages/idna/__pycache__/compat.cpython-38.pyc delete mode 100644 Jobs_Collections/venv/Lib/python3.8/site-packages/idna/__pycache__/core.cpython-38.pyc delete mode 100644 Jobs_Collections/venv/Lib/python3.8/site-packages/idna/__pycache__/idnadata.cpython-38.pyc delete mode 100644 Jobs_Collections/venv/Lib/python3.8/site-packages/idna/__pycache__/intranges.cpython-38.pyc delete mode 100644 Jobs_Collections/venv/Lib/python3.8/site-packages/idna/__pycache__/package_data.cpython-38.pyc delete mode 100644 Jobs_Collections/venv/Lib/python3.8/site-packages/idna/__pycache__/uts46data.cpython-38.pyc delete mode 100644 Jobs_Collections/venv/Lib/python3.8/site-packages/idna/codec.py delete mode 100644 Jobs_Collections/venv/Lib/python3.8/site-packages/idna/compat.py delete mode 100644 Jobs_Collections/venv/Lib/python3.8/site-packages/idna/core.py delete mode 100644 Jobs_Collections/venv/Lib/python3.8/site-packages/idna/idnadata.py delete mode 100644 Jobs_Collections/venv/Lib/python3.8/site-packages/idna/intranges.py delete mode 100644 Jobs_Collections/venv/Lib/python3.8/site-packages/idna/package_data.py delete mode 100644 Jobs_Collections/venv/Lib/python3.8/site-packages/idna/uts46data.py delete mode 100644 Jobs_Collections/venv/Lib/python3.8/site-packages/isort-4.3.21.dist-info/INSTALLER delete mode 100644 Jobs_Collections/venv/Lib/python3.8/site-packages/isort-4.3.21.dist-info/LICENSE delete mode 100644 Jobs_Collections/venv/Lib/python3.8/site-packages/isort-4.3.21.dist-info/METADATA delete mode 100644 Jobs_Collections/venv/Lib/python3.8/site-packages/isort-4.3.21.dist-info/RECORD delete mode 100644 Jobs_Collections/venv/Lib/python3.8/site-packages/isort-4.3.21.dist-info/WHEEL delete mode 100644 Jobs_Collections/venv/Lib/python3.8/site-packages/isort-4.3.21.dist-info/entry_points.txt delete mode 100644 Jobs_Collections/venv/Lib/python3.8/site-packages/isort-4.3.21.dist-info/top_level.txt delete mode 100644 Jobs_Collections/venv/Lib/python3.8/site-packages/isort/__init__.py delete mode 100644 Jobs_Collections/venv/Lib/python3.8/site-packages/isort/__main__.py delete mode 100644 Jobs_Collections/venv/Lib/python3.8/site-packages/isort/__pycache__/__init__.cpython-38.pyc delete mode 100644 Jobs_Collections/venv/Lib/python3.8/site-packages/isort/__pycache__/__main__.cpython-38.pyc delete mode 100644 Jobs_Collections/venv/Lib/python3.8/site-packages/isort/__pycache__/finders.cpython-38.pyc delete mode 100644 Jobs_Collections/venv/Lib/python3.8/site-packages/isort/__pycache__/hooks.cpython-38.pyc delete mode 100644 Jobs_Collections/venv/Lib/python3.8/site-packages/isort/__pycache__/isort.cpython-38.pyc delete mode 100644 Jobs_Collections/venv/Lib/python3.8/site-packages/isort/__pycache__/main.cpython-38.pyc delete mode 100644 Jobs_Collections/venv/Lib/python3.8/site-packages/isort/__pycache__/natural.cpython-38.pyc delete mode 100644 Jobs_Collections/venv/Lib/python3.8/site-packages/isort/__pycache__/pie_slice.cpython-38.pyc delete mode 100644 Jobs_Collections/venv/Lib/python3.8/site-packages/isort/__pycache__/pylama_isort.cpython-38.pyc delete mode 100644 Jobs_Collections/venv/Lib/python3.8/site-packages/isort/__pycache__/settings.cpython-38.pyc delete mode 100644 Jobs_Collections/venv/Lib/python3.8/site-packages/isort/__pycache__/utils.cpython-38.pyc delete mode 100644 Jobs_Collections/venv/Lib/python3.8/site-packages/isort/finders.py delete mode 100644 Jobs_Collections/venv/Lib/python3.8/site-packages/isort/hooks.py delete mode 100644 Jobs_Collections/venv/Lib/python3.8/site-packages/isort/isort.py delete mode 100644 Jobs_Collections/venv/Lib/python3.8/site-packages/isort/main.py delete mode 100644 Jobs_Collections/venv/Lib/python3.8/site-packages/isort/natural.py delete mode 100644 Jobs_Collections/venv/Lib/python3.8/site-packages/isort/pie_slice.py delete mode 100644 Jobs_Collections/venv/Lib/python3.8/site-packages/isort/pylama_isort.py delete mode 100644 Jobs_Collections/venv/Lib/python3.8/site-packages/isort/settings.py delete mode 100644 Jobs_Collections/venv/Lib/python3.8/site-packages/isort/utils.py delete mode 100644 Jobs_Collections/venv/Lib/python3.8/site-packages/itsdangerous-1.1.0.dist-info/INSTALLER delete mode 100644 Jobs_Collections/venv/Lib/python3.8/site-packages/itsdangerous-1.1.0.dist-info/LICENSE.rst delete mode 100644 Jobs_Collections/venv/Lib/python3.8/site-packages/itsdangerous-1.1.0.dist-info/METADATA delete mode 100644 Jobs_Collections/venv/Lib/python3.8/site-packages/itsdangerous-1.1.0.dist-info/RECORD delete mode 100644 Jobs_Collections/venv/Lib/python3.8/site-packages/itsdangerous-1.1.0.dist-info/WHEEL delete mode 100644 Jobs_Collections/venv/Lib/python3.8/site-packages/itsdangerous-1.1.0.dist-info/top_level.txt delete mode 100644 Jobs_Collections/venv/Lib/python3.8/site-packages/itsdangerous/__init__.py delete mode 100644 Jobs_Collections/venv/Lib/python3.8/site-packages/itsdangerous/__pycache__/__init__.cpython-38.pyc delete mode 100644 Jobs_Collections/venv/Lib/python3.8/site-packages/itsdangerous/__pycache__/_compat.cpython-38.pyc delete mode 100644 Jobs_Collections/venv/Lib/python3.8/site-packages/itsdangerous/__pycache__/_json.cpython-38.pyc delete mode 100644 Jobs_Collections/venv/Lib/python3.8/site-packages/itsdangerous/__pycache__/encoding.cpython-38.pyc delete mode 100644 Jobs_Collections/venv/Lib/python3.8/site-packages/itsdangerous/__pycache__/exc.cpython-38.pyc delete mode 100644 Jobs_Collections/venv/Lib/python3.8/site-packages/itsdangerous/__pycache__/jws.cpython-38.pyc delete mode 100644 Jobs_Collections/venv/Lib/python3.8/site-packages/itsdangerous/__pycache__/serializer.cpython-38.pyc delete mode 100644 Jobs_Collections/venv/Lib/python3.8/site-packages/itsdangerous/__pycache__/signer.cpython-38.pyc delete mode 100644 Jobs_Collections/venv/Lib/python3.8/site-packages/itsdangerous/__pycache__/timed.cpython-38.pyc delete mode 100644 Jobs_Collections/venv/Lib/python3.8/site-packages/itsdangerous/__pycache__/url_safe.cpython-38.pyc delete mode 100644 Jobs_Collections/venv/Lib/python3.8/site-packages/itsdangerous/_compat.py delete mode 100644 Jobs_Collections/venv/Lib/python3.8/site-packages/itsdangerous/_json.py delete mode 100644 Jobs_Collections/venv/Lib/python3.8/site-packages/itsdangerous/encoding.py delete mode 100644 Jobs_Collections/venv/Lib/python3.8/site-packages/itsdangerous/exc.py delete mode 100644 Jobs_Collections/venv/Lib/python3.8/site-packages/itsdangerous/jws.py delete mode 100644 Jobs_Collections/venv/Lib/python3.8/site-packages/itsdangerous/serializer.py delete mode 100644 Jobs_Collections/venv/Lib/python3.8/site-packages/itsdangerous/signer.py delete mode 100644 Jobs_Collections/venv/Lib/python3.8/site-packages/itsdangerous/timed.py delete mode 100644 Jobs_Collections/venv/Lib/python3.8/site-packages/itsdangerous/url_safe.py delete mode 100644 Jobs_Collections/venv/Lib/python3.8/site-packages/jinja2/__init__.py delete mode 100644 Jobs_Collections/venv/Lib/python3.8/site-packages/jinja2/__pycache__/__init__.cpython-38.pyc delete mode 100644 Jobs_Collections/venv/Lib/python3.8/site-packages/jinja2/__pycache__/_compat.cpython-38.pyc delete mode 100644 Jobs_Collections/venv/Lib/python3.8/site-packages/jinja2/__pycache__/_identifier.cpython-38.pyc delete mode 100644 Jobs_Collections/venv/Lib/python3.8/site-packages/jinja2/__pycache__/asyncfilters.cpython-38.pyc delete mode 100644 Jobs_Collections/venv/Lib/python3.8/site-packages/jinja2/__pycache__/asyncsupport.cpython-38.pyc delete mode 100644 Jobs_Collections/venv/Lib/python3.8/site-packages/jinja2/__pycache__/bccache.cpython-38.pyc delete mode 100644 Jobs_Collections/venv/Lib/python3.8/site-packages/jinja2/__pycache__/compiler.cpython-38.pyc delete mode 100644 Jobs_Collections/venv/Lib/python3.8/site-packages/jinja2/__pycache__/constants.cpython-38.pyc delete mode 100644 Jobs_Collections/venv/Lib/python3.8/site-packages/jinja2/__pycache__/debug.cpython-38.pyc delete mode 100644 Jobs_Collections/venv/Lib/python3.8/site-packages/jinja2/__pycache__/defaults.cpython-38.pyc delete mode 100644 Jobs_Collections/venv/Lib/python3.8/site-packages/jinja2/__pycache__/environment.cpython-38.pyc delete mode 100644 Jobs_Collections/venv/Lib/python3.8/site-packages/jinja2/__pycache__/exceptions.cpython-38.pyc delete mode 100644 Jobs_Collections/venv/Lib/python3.8/site-packages/jinja2/__pycache__/ext.cpython-38.pyc delete mode 100644 Jobs_Collections/venv/Lib/python3.8/site-packages/jinja2/__pycache__/filters.cpython-38.pyc delete mode 100644 Jobs_Collections/venv/Lib/python3.8/site-packages/jinja2/__pycache__/idtracking.cpython-38.pyc delete mode 100644 Jobs_Collections/venv/Lib/python3.8/site-packages/jinja2/__pycache__/lexer.cpython-38.pyc delete mode 100644 Jobs_Collections/venv/Lib/python3.8/site-packages/jinja2/__pycache__/loaders.cpython-38.pyc delete mode 100644 Jobs_Collections/venv/Lib/python3.8/site-packages/jinja2/__pycache__/meta.cpython-38.pyc delete mode 100644 Jobs_Collections/venv/Lib/python3.8/site-packages/jinja2/__pycache__/nativetypes.cpython-38.pyc delete mode 100644 Jobs_Collections/venv/Lib/python3.8/site-packages/jinja2/__pycache__/nodes.cpython-38.pyc delete mode 100644 Jobs_Collections/venv/Lib/python3.8/site-packages/jinja2/__pycache__/optimizer.cpython-38.pyc delete mode 100644 Jobs_Collections/venv/Lib/python3.8/site-packages/jinja2/__pycache__/parser.cpython-38.pyc delete mode 100644 Jobs_Collections/venv/Lib/python3.8/site-packages/jinja2/__pycache__/runtime.cpython-38.pyc delete mode 100644 Jobs_Collections/venv/Lib/python3.8/site-packages/jinja2/__pycache__/sandbox.cpython-38.pyc delete mode 100644 Jobs_Collections/venv/Lib/python3.8/site-packages/jinja2/__pycache__/tests.cpython-38.pyc delete mode 100644 Jobs_Collections/venv/Lib/python3.8/site-packages/jinja2/__pycache__/utils.cpython-38.pyc delete mode 100644 Jobs_Collections/venv/Lib/python3.8/site-packages/jinja2/__pycache__/visitor.cpython-38.pyc delete mode 100644 Jobs_Collections/venv/Lib/python3.8/site-packages/jinja2/_compat.py delete mode 100644 Jobs_Collections/venv/Lib/python3.8/site-packages/jinja2/_identifier.py delete mode 100644 Jobs_Collections/venv/Lib/python3.8/site-packages/jinja2/asyncfilters.py delete mode 100644 Jobs_Collections/venv/Lib/python3.8/site-packages/jinja2/asyncsupport.py delete mode 100644 Jobs_Collections/venv/Lib/python3.8/site-packages/jinja2/bccache.py delete mode 100644 Jobs_Collections/venv/Lib/python3.8/site-packages/jinja2/compiler.py delete mode 100644 Jobs_Collections/venv/Lib/python3.8/site-packages/jinja2/constants.py delete mode 100644 Jobs_Collections/venv/Lib/python3.8/site-packages/jinja2/debug.py delete mode 100644 Jobs_Collections/venv/Lib/python3.8/site-packages/jinja2/defaults.py delete mode 100644 Jobs_Collections/venv/Lib/python3.8/site-packages/jinja2/environment.py delete mode 100644 Jobs_Collections/venv/Lib/python3.8/site-packages/jinja2/exceptions.py delete mode 100644 Jobs_Collections/venv/Lib/python3.8/site-packages/jinja2/ext.py delete mode 100644 Jobs_Collections/venv/Lib/python3.8/site-packages/jinja2/filters.py delete mode 100644 Jobs_Collections/venv/Lib/python3.8/site-packages/jinja2/idtracking.py delete mode 100644 Jobs_Collections/venv/Lib/python3.8/site-packages/jinja2/lexer.py delete mode 100644 Jobs_Collections/venv/Lib/python3.8/site-packages/jinja2/loaders.py delete mode 100644 Jobs_Collections/venv/Lib/python3.8/site-packages/jinja2/meta.py delete mode 100644 Jobs_Collections/venv/Lib/python3.8/site-packages/jinja2/nativetypes.py delete mode 100644 Jobs_Collections/venv/Lib/python3.8/site-packages/jinja2/nodes.py delete mode 100644 Jobs_Collections/venv/Lib/python3.8/site-packages/jinja2/optimizer.py delete mode 100644 Jobs_Collections/venv/Lib/python3.8/site-packages/jinja2/parser.py delete mode 100644 Jobs_Collections/venv/Lib/python3.8/site-packages/jinja2/runtime.py delete mode 100644 Jobs_Collections/venv/Lib/python3.8/site-packages/jinja2/sandbox.py delete mode 100644 Jobs_Collections/venv/Lib/python3.8/site-packages/jinja2/tests.py delete mode 100644 Jobs_Collections/venv/Lib/python3.8/site-packages/jinja2/utils.py delete mode 100644 Jobs_Collections/venv/Lib/python3.8/site-packages/jinja2/visitor.py delete mode 100644 Jobs_Collections/venv/Lib/python3.8/site-packages/lazy_object_proxy-1.4.3.dist-info/AUTHORS.rst delete mode 100644 Jobs_Collections/venv/Lib/python3.8/site-packages/lazy_object_proxy-1.4.3.dist-info/INSTALLER delete mode 100644 Jobs_Collections/venv/Lib/python3.8/site-packages/lazy_object_proxy-1.4.3.dist-info/LICENSE delete mode 100644 Jobs_Collections/venv/Lib/python3.8/site-packages/lazy_object_proxy-1.4.3.dist-info/METADATA delete mode 100644 Jobs_Collections/venv/Lib/python3.8/site-packages/lazy_object_proxy-1.4.3.dist-info/RECORD delete mode 100644 Jobs_Collections/venv/Lib/python3.8/site-packages/lazy_object_proxy-1.4.3.dist-info/WHEEL delete mode 100644 Jobs_Collections/venv/Lib/python3.8/site-packages/lazy_object_proxy-1.4.3.dist-info/top_level.txt delete mode 100644 Jobs_Collections/venv/Lib/python3.8/site-packages/lazy_object_proxy/__init__.py delete mode 100644 Jobs_Collections/venv/Lib/python3.8/site-packages/lazy_object_proxy/__pycache__/__init__.cpython-38.pyc delete mode 100644 Jobs_Collections/venv/Lib/python3.8/site-packages/lazy_object_proxy/__pycache__/_version.cpython-38.pyc delete mode 100644 Jobs_Collections/venv/Lib/python3.8/site-packages/lazy_object_proxy/__pycache__/compat.cpython-38.pyc delete mode 100644 Jobs_Collections/venv/Lib/python3.8/site-packages/lazy_object_proxy/__pycache__/simple.cpython-38.pyc delete mode 100644 Jobs_Collections/venv/Lib/python3.8/site-packages/lazy_object_proxy/__pycache__/slots.cpython-38.pyc delete mode 100644 Jobs_Collections/venv/Lib/python3.8/site-packages/lazy_object_proxy/__pycache__/utils.cpython-38.pyc delete mode 100644 Jobs_Collections/venv/Lib/python3.8/site-packages/lazy_object_proxy/_version.py delete mode 100644 Jobs_Collections/venv/Lib/python3.8/site-packages/lazy_object_proxy/cext.cpython-38-darwin.so delete mode 100644 Jobs_Collections/venv/Lib/python3.8/site-packages/lazy_object_proxy/compat.py delete mode 100644 Jobs_Collections/venv/Lib/python3.8/site-packages/lazy_object_proxy/simple.py delete mode 100644 Jobs_Collections/venv/Lib/python3.8/site-packages/lazy_object_proxy/slots.py delete mode 100644 Jobs_Collections/venv/Lib/python3.8/site-packages/lazy_object_proxy/utils.py delete mode 100644 Jobs_Collections/venv/Lib/python3.8/site-packages/markupsafe/__init__.py delete mode 100644 Jobs_Collections/venv/Lib/python3.8/site-packages/markupsafe/__pycache__/__init__.cpython-38.pyc delete mode 100644 Jobs_Collections/venv/Lib/python3.8/site-packages/markupsafe/__pycache__/_compat.cpython-38.pyc delete mode 100644 Jobs_Collections/venv/Lib/python3.8/site-packages/markupsafe/__pycache__/_constants.cpython-38.pyc delete mode 100644 Jobs_Collections/venv/Lib/python3.8/site-packages/markupsafe/__pycache__/_native.cpython-38.pyc delete mode 100644 Jobs_Collections/venv/Lib/python3.8/site-packages/markupsafe/_compat.py delete mode 100644 Jobs_Collections/venv/Lib/python3.8/site-packages/markupsafe/_constants.py delete mode 100644 Jobs_Collections/venv/Lib/python3.8/site-packages/markupsafe/_native.py delete mode 100644 Jobs_Collections/venv/Lib/python3.8/site-packages/markupsafe/_speedups.c delete mode 100644 Jobs_Collections/venv/Lib/python3.8/site-packages/markupsafe/_speedups.cpython-38-darwin.so delete mode 100644 Jobs_Collections/venv/Lib/python3.8/site-packages/mccabe-0.6.1.dist-info/DESCRIPTION.rst delete mode 100644 Jobs_Collections/venv/Lib/python3.8/site-packages/mccabe-0.6.1.dist-info/INSTALLER delete mode 100644 Jobs_Collections/venv/Lib/python3.8/site-packages/mccabe-0.6.1.dist-info/METADATA delete mode 100644 Jobs_Collections/venv/Lib/python3.8/site-packages/mccabe-0.6.1.dist-info/RECORD delete mode 100644 Jobs_Collections/venv/Lib/python3.8/site-packages/mccabe-0.6.1.dist-info/WHEEL delete mode 100644 Jobs_Collections/venv/Lib/python3.8/site-packages/mccabe-0.6.1.dist-info/entry_points.txt delete mode 100644 Jobs_Collections/venv/Lib/python3.8/site-packages/mccabe-0.6.1.dist-info/metadata.json delete mode 100644 Jobs_Collections/venv/Lib/python3.8/site-packages/mccabe-0.6.1.dist-info/top_level.txt delete mode 100644 Jobs_Collections/venv/Lib/python3.8/site-packages/mccabe.py delete mode 100644 Jobs_Collections/venv/Lib/python3.8/site-packages/pip-19.2.3.dist-info/INSTALLER delete mode 100644 Jobs_Collections/venv/Lib/python3.8/site-packages/pip-19.2.3.dist-info/LICENSE.txt delete mode 100644 Jobs_Collections/venv/Lib/python3.8/site-packages/pip-19.2.3.dist-info/METADATA delete mode 100644 Jobs_Collections/venv/Lib/python3.8/site-packages/pip-19.2.3.dist-info/RECORD delete mode 100644 Jobs_Collections/venv/Lib/python3.8/site-packages/pip-19.2.3.dist-info/WHEEL delete mode 100644 Jobs_Collections/venv/Lib/python3.8/site-packages/pip-19.2.3.dist-info/entry_points.txt delete mode 100644 Jobs_Collections/venv/Lib/python3.8/site-packages/pip-19.2.3.dist-info/top_level.txt delete mode 100644 Jobs_Collections/venv/Lib/python3.8/site-packages/pip/__init__.py delete mode 100644 Jobs_Collections/venv/Lib/python3.8/site-packages/pip/__main__.py delete mode 100644 Jobs_Collections/venv/Lib/python3.8/site-packages/pip/__pycache__/__init__.cpython-38.pyc delete mode 100644 Jobs_Collections/venv/Lib/python3.8/site-packages/pip/__pycache__/__main__.cpython-38.pyc delete mode 100644 Jobs_Collections/venv/Lib/python3.8/site-packages/pip/_internal/__init__.py delete mode 100644 Jobs_Collections/venv/Lib/python3.8/site-packages/pip/_internal/__pycache__/__init__.cpython-38.pyc delete mode 100644 Jobs_Collections/venv/Lib/python3.8/site-packages/pip/_internal/__pycache__/build_env.cpython-38.pyc delete mode 100644 Jobs_Collections/venv/Lib/python3.8/site-packages/pip/_internal/__pycache__/cache.cpython-38.pyc delete mode 100644 Jobs_Collections/venv/Lib/python3.8/site-packages/pip/_internal/__pycache__/configuration.cpython-38.pyc delete mode 100644 Jobs_Collections/venv/Lib/python3.8/site-packages/pip/_internal/__pycache__/download.cpython-38.pyc delete mode 100644 Jobs_Collections/venv/Lib/python3.8/site-packages/pip/_internal/__pycache__/exceptions.cpython-38.pyc delete mode 100644 Jobs_Collections/venv/Lib/python3.8/site-packages/pip/_internal/__pycache__/index.cpython-38.pyc delete mode 100644 Jobs_Collections/venv/Lib/python3.8/site-packages/pip/_internal/__pycache__/legacy_resolve.cpython-38.pyc delete mode 100644 Jobs_Collections/venv/Lib/python3.8/site-packages/pip/_internal/__pycache__/locations.cpython-38.pyc delete mode 100644 Jobs_Collections/venv/Lib/python3.8/site-packages/pip/_internal/__pycache__/pep425tags.cpython-38.pyc delete mode 100644 Jobs_Collections/venv/Lib/python3.8/site-packages/pip/_internal/__pycache__/pyproject.cpython-38.pyc delete mode 100644 Jobs_Collections/venv/Lib/python3.8/site-packages/pip/_internal/__pycache__/wheel.cpython-38.pyc delete mode 100644 Jobs_Collections/venv/Lib/python3.8/site-packages/pip/_internal/build_env.py delete mode 100644 Jobs_Collections/venv/Lib/python3.8/site-packages/pip/_internal/cache.py delete mode 100644 Jobs_Collections/venv/Lib/python3.8/site-packages/pip/_internal/cli/__init__.py delete mode 100644 Jobs_Collections/venv/Lib/python3.8/site-packages/pip/_internal/cli/__pycache__/__init__.cpython-38.pyc delete mode 100644 Jobs_Collections/venv/Lib/python3.8/site-packages/pip/_internal/cli/__pycache__/autocompletion.cpython-38.pyc delete mode 100644 Jobs_Collections/venv/Lib/python3.8/site-packages/pip/_internal/cli/__pycache__/base_command.cpython-38.pyc delete mode 100644 Jobs_Collections/venv/Lib/python3.8/site-packages/pip/_internal/cli/__pycache__/cmdoptions.cpython-38.pyc delete mode 100644 Jobs_Collections/venv/Lib/python3.8/site-packages/pip/_internal/cli/__pycache__/main_parser.cpython-38.pyc delete mode 100644 Jobs_Collections/venv/Lib/python3.8/site-packages/pip/_internal/cli/__pycache__/parser.cpython-38.pyc delete mode 100644 Jobs_Collections/venv/Lib/python3.8/site-packages/pip/_internal/cli/__pycache__/status_codes.cpython-38.pyc delete mode 100644 Jobs_Collections/venv/Lib/python3.8/site-packages/pip/_internal/cli/autocompletion.py delete mode 100644 Jobs_Collections/venv/Lib/python3.8/site-packages/pip/_internal/cli/base_command.py delete mode 100644 Jobs_Collections/venv/Lib/python3.8/site-packages/pip/_internal/cli/cmdoptions.py delete mode 100644 Jobs_Collections/venv/Lib/python3.8/site-packages/pip/_internal/cli/main_parser.py delete mode 100644 Jobs_Collections/venv/Lib/python3.8/site-packages/pip/_internal/cli/parser.py delete mode 100644 Jobs_Collections/venv/Lib/python3.8/site-packages/pip/_internal/cli/status_codes.py delete mode 100644 Jobs_Collections/venv/Lib/python3.8/site-packages/pip/_internal/commands/__init__.py delete mode 100644 Jobs_Collections/venv/Lib/python3.8/site-packages/pip/_internal/commands/__pycache__/__init__.cpython-38.pyc delete mode 100644 Jobs_Collections/venv/Lib/python3.8/site-packages/pip/_internal/commands/__pycache__/check.cpython-38.pyc delete mode 100644 Jobs_Collections/venv/Lib/python3.8/site-packages/pip/_internal/commands/__pycache__/completion.cpython-38.pyc delete mode 100644 Jobs_Collections/venv/Lib/python3.8/site-packages/pip/_internal/commands/__pycache__/configuration.cpython-38.pyc delete mode 100644 Jobs_Collections/venv/Lib/python3.8/site-packages/pip/_internal/commands/__pycache__/debug.cpython-38.pyc delete mode 100644 Jobs_Collections/venv/Lib/python3.8/site-packages/pip/_internal/commands/__pycache__/download.cpython-38.pyc delete mode 100644 Jobs_Collections/venv/Lib/python3.8/site-packages/pip/_internal/commands/__pycache__/freeze.cpython-38.pyc delete mode 100644 Jobs_Collections/venv/Lib/python3.8/site-packages/pip/_internal/commands/__pycache__/hash.cpython-38.pyc delete mode 100644 Jobs_Collections/venv/Lib/python3.8/site-packages/pip/_internal/commands/__pycache__/help.cpython-38.pyc delete mode 100644 Jobs_Collections/venv/Lib/python3.8/site-packages/pip/_internal/commands/__pycache__/install.cpython-38.pyc delete mode 100644 Jobs_Collections/venv/Lib/python3.8/site-packages/pip/_internal/commands/__pycache__/list.cpython-38.pyc delete mode 100644 Jobs_Collections/venv/Lib/python3.8/site-packages/pip/_internal/commands/__pycache__/search.cpython-38.pyc delete mode 100644 Jobs_Collections/venv/Lib/python3.8/site-packages/pip/_internal/commands/__pycache__/show.cpython-38.pyc delete mode 100644 Jobs_Collections/venv/Lib/python3.8/site-packages/pip/_internal/commands/__pycache__/uninstall.cpython-38.pyc delete mode 100644 Jobs_Collections/venv/Lib/python3.8/site-packages/pip/_internal/commands/__pycache__/wheel.cpython-38.pyc delete mode 100644 Jobs_Collections/venv/Lib/python3.8/site-packages/pip/_internal/commands/check.py delete mode 100644 Jobs_Collections/venv/Lib/python3.8/site-packages/pip/_internal/commands/completion.py delete mode 100644 Jobs_Collections/venv/Lib/python3.8/site-packages/pip/_internal/commands/configuration.py delete mode 100644 Jobs_Collections/venv/Lib/python3.8/site-packages/pip/_internal/commands/debug.py delete mode 100644 Jobs_Collections/venv/Lib/python3.8/site-packages/pip/_internal/commands/download.py delete mode 100644 Jobs_Collections/venv/Lib/python3.8/site-packages/pip/_internal/commands/freeze.py delete mode 100644 Jobs_Collections/venv/Lib/python3.8/site-packages/pip/_internal/commands/hash.py delete mode 100644 Jobs_Collections/venv/Lib/python3.8/site-packages/pip/_internal/commands/help.py delete mode 100644 Jobs_Collections/venv/Lib/python3.8/site-packages/pip/_internal/commands/install.py delete mode 100644 Jobs_Collections/venv/Lib/python3.8/site-packages/pip/_internal/commands/list.py delete mode 100644 Jobs_Collections/venv/Lib/python3.8/site-packages/pip/_internal/commands/search.py delete mode 100644 Jobs_Collections/venv/Lib/python3.8/site-packages/pip/_internal/commands/show.py delete mode 100644 Jobs_Collections/venv/Lib/python3.8/site-packages/pip/_internal/commands/uninstall.py delete mode 100644 Jobs_Collections/venv/Lib/python3.8/site-packages/pip/_internal/commands/wheel.py delete mode 100644 Jobs_Collections/venv/Lib/python3.8/site-packages/pip/_internal/configuration.py delete mode 100644 Jobs_Collections/venv/Lib/python3.8/site-packages/pip/_internal/distributions/__init__.py delete mode 100644 Jobs_Collections/venv/Lib/python3.8/site-packages/pip/_internal/distributions/__pycache__/__init__.cpython-38.pyc delete mode 100644 Jobs_Collections/venv/Lib/python3.8/site-packages/pip/_internal/distributions/__pycache__/base.cpython-38.pyc delete mode 100644 Jobs_Collections/venv/Lib/python3.8/site-packages/pip/_internal/distributions/__pycache__/installed.cpython-38.pyc delete mode 100644 Jobs_Collections/venv/Lib/python3.8/site-packages/pip/_internal/distributions/__pycache__/source.cpython-38.pyc delete mode 100644 Jobs_Collections/venv/Lib/python3.8/site-packages/pip/_internal/distributions/__pycache__/wheel.cpython-38.pyc delete mode 100644 Jobs_Collections/venv/Lib/python3.8/site-packages/pip/_internal/distributions/base.py delete mode 100644 Jobs_Collections/venv/Lib/python3.8/site-packages/pip/_internal/distributions/installed.py delete mode 100644 Jobs_Collections/venv/Lib/python3.8/site-packages/pip/_internal/distributions/source.py delete mode 100644 Jobs_Collections/venv/Lib/python3.8/site-packages/pip/_internal/distributions/wheel.py delete mode 100644 Jobs_Collections/venv/Lib/python3.8/site-packages/pip/_internal/download.py delete mode 100644 Jobs_Collections/venv/Lib/python3.8/site-packages/pip/_internal/exceptions.py delete mode 100644 Jobs_Collections/venv/Lib/python3.8/site-packages/pip/_internal/index.py delete mode 100644 Jobs_Collections/venv/Lib/python3.8/site-packages/pip/_internal/legacy_resolve.py delete mode 100644 Jobs_Collections/venv/Lib/python3.8/site-packages/pip/_internal/locations.py delete mode 100644 Jobs_Collections/venv/Lib/python3.8/site-packages/pip/_internal/models/__init__.py delete mode 100644 Jobs_Collections/venv/Lib/python3.8/site-packages/pip/_internal/models/__pycache__/__init__.cpython-38.pyc delete mode 100644 Jobs_Collections/venv/Lib/python3.8/site-packages/pip/_internal/models/__pycache__/candidate.cpython-38.pyc delete mode 100644 Jobs_Collections/venv/Lib/python3.8/site-packages/pip/_internal/models/__pycache__/format_control.cpython-38.pyc delete mode 100644 Jobs_Collections/venv/Lib/python3.8/site-packages/pip/_internal/models/__pycache__/index.cpython-38.pyc delete mode 100644 Jobs_Collections/venv/Lib/python3.8/site-packages/pip/_internal/models/__pycache__/link.cpython-38.pyc delete mode 100644 Jobs_Collections/venv/Lib/python3.8/site-packages/pip/_internal/models/__pycache__/search_scope.cpython-38.pyc delete mode 100644 Jobs_Collections/venv/Lib/python3.8/site-packages/pip/_internal/models/__pycache__/selection_prefs.cpython-38.pyc delete mode 100644 Jobs_Collections/venv/Lib/python3.8/site-packages/pip/_internal/models/__pycache__/target_python.cpython-38.pyc delete mode 100644 Jobs_Collections/venv/Lib/python3.8/site-packages/pip/_internal/models/candidate.py delete mode 100644 Jobs_Collections/venv/Lib/python3.8/site-packages/pip/_internal/models/format_control.py delete mode 100644 Jobs_Collections/venv/Lib/python3.8/site-packages/pip/_internal/models/index.py delete mode 100644 Jobs_Collections/venv/Lib/python3.8/site-packages/pip/_internal/models/link.py delete mode 100644 Jobs_Collections/venv/Lib/python3.8/site-packages/pip/_internal/models/search_scope.py delete mode 100644 Jobs_Collections/venv/Lib/python3.8/site-packages/pip/_internal/models/selection_prefs.py delete mode 100644 Jobs_Collections/venv/Lib/python3.8/site-packages/pip/_internal/models/target_python.py delete mode 100644 Jobs_Collections/venv/Lib/python3.8/site-packages/pip/_internal/operations/__init__.py delete mode 100644 Jobs_Collections/venv/Lib/python3.8/site-packages/pip/_internal/operations/__pycache__/__init__.cpython-38.pyc delete mode 100644 Jobs_Collections/venv/Lib/python3.8/site-packages/pip/_internal/operations/__pycache__/check.cpython-38.pyc delete mode 100644 Jobs_Collections/venv/Lib/python3.8/site-packages/pip/_internal/operations/__pycache__/freeze.cpython-38.pyc delete mode 100644 Jobs_Collections/venv/Lib/python3.8/site-packages/pip/_internal/operations/__pycache__/prepare.cpython-38.pyc delete mode 100644 Jobs_Collections/venv/Lib/python3.8/site-packages/pip/_internal/operations/check.py delete mode 100644 Jobs_Collections/venv/Lib/python3.8/site-packages/pip/_internal/operations/freeze.py delete mode 100644 Jobs_Collections/venv/Lib/python3.8/site-packages/pip/_internal/operations/prepare.py delete mode 100644 Jobs_Collections/venv/Lib/python3.8/site-packages/pip/_internal/pep425tags.py delete mode 100644 Jobs_Collections/venv/Lib/python3.8/site-packages/pip/_internal/pyproject.py delete mode 100644 Jobs_Collections/venv/Lib/python3.8/site-packages/pip/_internal/req/__init__.py delete mode 100644 Jobs_Collections/venv/Lib/python3.8/site-packages/pip/_internal/req/__pycache__/__init__.cpython-38.pyc delete mode 100644 Jobs_Collections/venv/Lib/python3.8/site-packages/pip/_internal/req/__pycache__/constructors.cpython-38.pyc delete mode 100644 Jobs_Collections/venv/Lib/python3.8/site-packages/pip/_internal/req/__pycache__/req_file.cpython-38.pyc delete mode 100644 Jobs_Collections/venv/Lib/python3.8/site-packages/pip/_internal/req/__pycache__/req_install.cpython-38.pyc delete mode 100644 Jobs_Collections/venv/Lib/python3.8/site-packages/pip/_internal/req/__pycache__/req_set.cpython-38.pyc delete mode 100644 Jobs_Collections/venv/Lib/python3.8/site-packages/pip/_internal/req/__pycache__/req_tracker.cpython-38.pyc delete mode 100644 Jobs_Collections/venv/Lib/python3.8/site-packages/pip/_internal/req/__pycache__/req_uninstall.cpython-38.pyc delete mode 100644 Jobs_Collections/venv/Lib/python3.8/site-packages/pip/_internal/req/constructors.py delete mode 100644 Jobs_Collections/venv/Lib/python3.8/site-packages/pip/_internal/req/req_file.py delete mode 100644 Jobs_Collections/venv/Lib/python3.8/site-packages/pip/_internal/req/req_install.py delete mode 100644 Jobs_Collections/venv/Lib/python3.8/site-packages/pip/_internal/req/req_set.py delete mode 100644 Jobs_Collections/venv/Lib/python3.8/site-packages/pip/_internal/req/req_tracker.py delete mode 100644 Jobs_Collections/venv/Lib/python3.8/site-packages/pip/_internal/req/req_uninstall.py delete mode 100644 Jobs_Collections/venv/Lib/python3.8/site-packages/pip/_internal/utils/__init__.py delete mode 100644 Jobs_Collections/venv/Lib/python3.8/site-packages/pip/_internal/utils/__pycache__/__init__.cpython-38.pyc delete mode 100644 Jobs_Collections/venv/Lib/python3.8/site-packages/pip/_internal/utils/__pycache__/appdirs.cpython-38.pyc delete mode 100644 Jobs_Collections/venv/Lib/python3.8/site-packages/pip/_internal/utils/__pycache__/compat.cpython-38.pyc delete mode 100644 Jobs_Collections/venv/Lib/python3.8/site-packages/pip/_internal/utils/__pycache__/deprecation.cpython-38.pyc delete mode 100644 Jobs_Collections/venv/Lib/python3.8/site-packages/pip/_internal/utils/__pycache__/encoding.cpython-38.pyc delete mode 100644 Jobs_Collections/venv/Lib/python3.8/site-packages/pip/_internal/utils/__pycache__/filesystem.cpython-38.pyc delete mode 100644 Jobs_Collections/venv/Lib/python3.8/site-packages/pip/_internal/utils/__pycache__/glibc.cpython-38.pyc delete mode 100644 Jobs_Collections/venv/Lib/python3.8/site-packages/pip/_internal/utils/__pycache__/hashes.cpython-38.pyc delete mode 100644 Jobs_Collections/venv/Lib/python3.8/site-packages/pip/_internal/utils/__pycache__/logging.cpython-38.pyc delete mode 100644 Jobs_Collections/venv/Lib/python3.8/site-packages/pip/_internal/utils/__pycache__/marker_files.cpython-38.pyc delete mode 100644 Jobs_Collections/venv/Lib/python3.8/site-packages/pip/_internal/utils/__pycache__/misc.cpython-38.pyc delete mode 100644 Jobs_Collections/venv/Lib/python3.8/site-packages/pip/_internal/utils/__pycache__/models.cpython-38.pyc delete mode 100644 Jobs_Collections/venv/Lib/python3.8/site-packages/pip/_internal/utils/__pycache__/outdated.cpython-38.pyc delete mode 100644 Jobs_Collections/venv/Lib/python3.8/site-packages/pip/_internal/utils/__pycache__/packaging.cpython-38.pyc delete mode 100644 Jobs_Collections/venv/Lib/python3.8/site-packages/pip/_internal/utils/__pycache__/setuptools_build.cpython-38.pyc delete mode 100644 Jobs_Collections/venv/Lib/python3.8/site-packages/pip/_internal/utils/__pycache__/temp_dir.cpython-38.pyc delete mode 100644 Jobs_Collections/venv/Lib/python3.8/site-packages/pip/_internal/utils/__pycache__/typing.cpython-38.pyc delete mode 100644 Jobs_Collections/venv/Lib/python3.8/site-packages/pip/_internal/utils/__pycache__/ui.cpython-38.pyc delete mode 100644 Jobs_Collections/venv/Lib/python3.8/site-packages/pip/_internal/utils/__pycache__/virtualenv.cpython-38.pyc delete mode 100644 Jobs_Collections/venv/Lib/python3.8/site-packages/pip/_internal/utils/appdirs.py delete mode 100644 Jobs_Collections/venv/Lib/python3.8/site-packages/pip/_internal/utils/compat.py delete mode 100644 Jobs_Collections/venv/Lib/python3.8/site-packages/pip/_internal/utils/deprecation.py delete mode 100644 Jobs_Collections/venv/Lib/python3.8/site-packages/pip/_internal/utils/encoding.py delete mode 100644 Jobs_Collections/venv/Lib/python3.8/site-packages/pip/_internal/utils/filesystem.py delete mode 100644 Jobs_Collections/venv/Lib/python3.8/site-packages/pip/_internal/utils/glibc.py delete mode 100644 Jobs_Collections/venv/Lib/python3.8/site-packages/pip/_internal/utils/hashes.py delete mode 100644 Jobs_Collections/venv/Lib/python3.8/site-packages/pip/_internal/utils/logging.py delete mode 100644 Jobs_Collections/venv/Lib/python3.8/site-packages/pip/_internal/utils/marker_files.py delete mode 100644 Jobs_Collections/venv/Lib/python3.8/site-packages/pip/_internal/utils/misc.py delete mode 100644 Jobs_Collections/venv/Lib/python3.8/site-packages/pip/_internal/utils/models.py delete mode 100644 Jobs_Collections/venv/Lib/python3.8/site-packages/pip/_internal/utils/outdated.py delete mode 100644 Jobs_Collections/venv/Lib/python3.8/site-packages/pip/_internal/utils/packaging.py delete mode 100644 Jobs_Collections/venv/Lib/python3.8/site-packages/pip/_internal/utils/setuptools_build.py delete mode 100644 Jobs_Collections/venv/Lib/python3.8/site-packages/pip/_internal/utils/temp_dir.py delete mode 100644 Jobs_Collections/venv/Lib/python3.8/site-packages/pip/_internal/utils/typing.py delete mode 100644 Jobs_Collections/venv/Lib/python3.8/site-packages/pip/_internal/utils/ui.py delete mode 100644 Jobs_Collections/venv/Lib/python3.8/site-packages/pip/_internal/utils/virtualenv.py delete mode 100644 Jobs_Collections/venv/Lib/python3.8/site-packages/pip/_internal/vcs/__init__.py delete mode 100644 Jobs_Collections/venv/Lib/python3.8/site-packages/pip/_internal/vcs/__pycache__/__init__.cpython-38.pyc delete mode 100644 Jobs_Collections/venv/Lib/python3.8/site-packages/pip/_internal/vcs/__pycache__/bazaar.cpython-38.pyc delete mode 100644 Jobs_Collections/venv/Lib/python3.8/site-packages/pip/_internal/vcs/__pycache__/git.cpython-38.pyc delete mode 100644 Jobs_Collections/venv/Lib/python3.8/site-packages/pip/_internal/vcs/__pycache__/mercurial.cpython-38.pyc delete mode 100644 Jobs_Collections/venv/Lib/python3.8/site-packages/pip/_internal/vcs/__pycache__/subversion.cpython-38.pyc delete mode 100644 Jobs_Collections/venv/Lib/python3.8/site-packages/pip/_internal/vcs/__pycache__/versioncontrol.cpython-38.pyc delete mode 100644 Jobs_Collections/venv/Lib/python3.8/site-packages/pip/_internal/vcs/bazaar.py delete mode 100644 Jobs_Collections/venv/Lib/python3.8/site-packages/pip/_internal/vcs/git.py delete mode 100644 Jobs_Collections/venv/Lib/python3.8/site-packages/pip/_internal/vcs/mercurial.py delete mode 100644 Jobs_Collections/venv/Lib/python3.8/site-packages/pip/_internal/vcs/subversion.py delete mode 100644 Jobs_Collections/venv/Lib/python3.8/site-packages/pip/_internal/vcs/versioncontrol.py delete mode 100644 Jobs_Collections/venv/Lib/python3.8/site-packages/pip/_internal/wheel.py delete mode 100644 Jobs_Collections/venv/Lib/python3.8/site-packages/pip/_vendor/__init__.py delete mode 100644 Jobs_Collections/venv/Lib/python3.8/site-packages/pip/_vendor/__pycache__/__init__.cpython-38.pyc delete mode 100644 Jobs_Collections/venv/Lib/python3.8/site-packages/pip/_vendor/__pycache__/appdirs.cpython-38.pyc delete mode 100644 Jobs_Collections/venv/Lib/python3.8/site-packages/pip/_vendor/__pycache__/distro.cpython-38.pyc delete mode 100644 Jobs_Collections/venv/Lib/python3.8/site-packages/pip/_vendor/__pycache__/ipaddress.cpython-38.pyc delete mode 100644 Jobs_Collections/venv/Lib/python3.8/site-packages/pip/_vendor/__pycache__/pyparsing.cpython-38.pyc delete mode 100644 Jobs_Collections/venv/Lib/python3.8/site-packages/pip/_vendor/__pycache__/retrying.cpython-38.pyc delete mode 100644 Jobs_Collections/venv/Lib/python3.8/site-packages/pip/_vendor/__pycache__/six.cpython-38.pyc delete mode 100644 Jobs_Collections/venv/Lib/python3.8/site-packages/pip/_vendor/appdirs.py delete mode 100644 Jobs_Collections/venv/Lib/python3.8/site-packages/pip/_vendor/cachecontrol/__init__.py delete mode 100644 Jobs_Collections/venv/Lib/python3.8/site-packages/pip/_vendor/cachecontrol/__pycache__/__init__.cpython-38.pyc delete mode 100644 Jobs_Collections/venv/Lib/python3.8/site-packages/pip/_vendor/cachecontrol/__pycache__/_cmd.cpython-38.pyc delete mode 100644 Jobs_Collections/venv/Lib/python3.8/site-packages/pip/_vendor/cachecontrol/__pycache__/adapter.cpython-38.pyc delete mode 100644 Jobs_Collections/venv/Lib/python3.8/site-packages/pip/_vendor/cachecontrol/__pycache__/cache.cpython-38.pyc delete mode 100644 Jobs_Collections/venv/Lib/python3.8/site-packages/pip/_vendor/cachecontrol/__pycache__/compat.cpython-38.pyc delete mode 100644 Jobs_Collections/venv/Lib/python3.8/site-packages/pip/_vendor/cachecontrol/__pycache__/controller.cpython-38.pyc delete mode 100644 Jobs_Collections/venv/Lib/python3.8/site-packages/pip/_vendor/cachecontrol/__pycache__/filewrapper.cpython-38.pyc delete mode 100644 Jobs_Collections/venv/Lib/python3.8/site-packages/pip/_vendor/cachecontrol/__pycache__/heuristics.cpython-38.pyc delete mode 100644 Jobs_Collections/venv/Lib/python3.8/site-packages/pip/_vendor/cachecontrol/__pycache__/serialize.cpython-38.pyc delete mode 100644 Jobs_Collections/venv/Lib/python3.8/site-packages/pip/_vendor/cachecontrol/__pycache__/wrapper.cpython-38.pyc delete mode 100644 Jobs_Collections/venv/Lib/python3.8/site-packages/pip/_vendor/cachecontrol/_cmd.py delete mode 100644 Jobs_Collections/venv/Lib/python3.8/site-packages/pip/_vendor/cachecontrol/adapter.py delete mode 100644 Jobs_Collections/venv/Lib/python3.8/site-packages/pip/_vendor/cachecontrol/cache.py delete mode 100644 Jobs_Collections/venv/Lib/python3.8/site-packages/pip/_vendor/cachecontrol/caches/__init__.py delete mode 100644 Jobs_Collections/venv/Lib/python3.8/site-packages/pip/_vendor/cachecontrol/caches/__pycache__/__init__.cpython-38.pyc delete mode 100644 Jobs_Collections/venv/Lib/python3.8/site-packages/pip/_vendor/cachecontrol/caches/__pycache__/file_cache.cpython-38.pyc delete mode 100644 Jobs_Collections/venv/Lib/python3.8/site-packages/pip/_vendor/cachecontrol/caches/__pycache__/redis_cache.cpython-38.pyc delete mode 100644 Jobs_Collections/venv/Lib/python3.8/site-packages/pip/_vendor/cachecontrol/caches/file_cache.py delete mode 100644 Jobs_Collections/venv/Lib/python3.8/site-packages/pip/_vendor/cachecontrol/caches/redis_cache.py delete mode 100644 Jobs_Collections/venv/Lib/python3.8/site-packages/pip/_vendor/cachecontrol/compat.py delete mode 100644 Jobs_Collections/venv/Lib/python3.8/site-packages/pip/_vendor/cachecontrol/controller.py delete mode 100644 Jobs_Collections/venv/Lib/python3.8/site-packages/pip/_vendor/cachecontrol/filewrapper.py delete mode 100644 Jobs_Collections/venv/Lib/python3.8/site-packages/pip/_vendor/cachecontrol/heuristics.py delete mode 100644 Jobs_Collections/venv/Lib/python3.8/site-packages/pip/_vendor/cachecontrol/serialize.py delete mode 100644 Jobs_Collections/venv/Lib/python3.8/site-packages/pip/_vendor/cachecontrol/wrapper.py delete mode 100644 Jobs_Collections/venv/Lib/python3.8/site-packages/pip/_vendor/certifi/__init__.py delete mode 100644 Jobs_Collections/venv/Lib/python3.8/site-packages/pip/_vendor/certifi/__main__.py delete mode 100644 Jobs_Collections/venv/Lib/python3.8/site-packages/pip/_vendor/certifi/__pycache__/__init__.cpython-38.pyc delete mode 100644 Jobs_Collections/venv/Lib/python3.8/site-packages/pip/_vendor/certifi/__pycache__/__main__.cpython-38.pyc delete mode 100644 Jobs_Collections/venv/Lib/python3.8/site-packages/pip/_vendor/certifi/__pycache__/core.cpython-38.pyc delete mode 100644 Jobs_Collections/venv/Lib/python3.8/site-packages/pip/_vendor/certifi/cacert.pem delete mode 100644 Jobs_Collections/venv/Lib/python3.8/site-packages/pip/_vendor/certifi/core.py delete mode 100644 Jobs_Collections/venv/Lib/python3.8/site-packages/pip/_vendor/chardet/__init__.py delete mode 100644 Jobs_Collections/venv/Lib/python3.8/site-packages/pip/_vendor/chardet/__pycache__/__init__.cpython-38.pyc delete mode 100644 Jobs_Collections/venv/Lib/python3.8/site-packages/pip/_vendor/chardet/__pycache__/big5freq.cpython-38.pyc delete mode 100644 Jobs_Collections/venv/Lib/python3.8/site-packages/pip/_vendor/chardet/__pycache__/big5prober.cpython-38.pyc delete mode 100644 Jobs_Collections/venv/Lib/python3.8/site-packages/pip/_vendor/chardet/__pycache__/chardistribution.cpython-38.pyc delete mode 100644 Jobs_Collections/venv/Lib/python3.8/site-packages/pip/_vendor/chardet/__pycache__/charsetgroupprober.cpython-38.pyc delete mode 100644 Jobs_Collections/venv/Lib/python3.8/site-packages/pip/_vendor/chardet/__pycache__/charsetprober.cpython-38.pyc delete mode 100644 Jobs_Collections/venv/Lib/python3.8/site-packages/pip/_vendor/chardet/__pycache__/codingstatemachine.cpython-38.pyc delete mode 100644 Jobs_Collections/venv/Lib/python3.8/site-packages/pip/_vendor/chardet/__pycache__/compat.cpython-38.pyc delete mode 100644 Jobs_Collections/venv/Lib/python3.8/site-packages/pip/_vendor/chardet/__pycache__/cp949prober.cpython-38.pyc delete mode 100644 Jobs_Collections/venv/Lib/python3.8/site-packages/pip/_vendor/chardet/__pycache__/enums.cpython-38.pyc delete mode 100644 Jobs_Collections/venv/Lib/python3.8/site-packages/pip/_vendor/chardet/__pycache__/escprober.cpython-38.pyc delete mode 100644 Jobs_Collections/venv/Lib/python3.8/site-packages/pip/_vendor/chardet/__pycache__/escsm.cpython-38.pyc delete mode 100644 Jobs_Collections/venv/Lib/python3.8/site-packages/pip/_vendor/chardet/__pycache__/eucjpprober.cpython-38.pyc delete mode 100644 Jobs_Collections/venv/Lib/python3.8/site-packages/pip/_vendor/chardet/__pycache__/euckrfreq.cpython-38.pyc delete mode 100644 Jobs_Collections/venv/Lib/python3.8/site-packages/pip/_vendor/chardet/__pycache__/euckrprober.cpython-38.pyc delete mode 100644 Jobs_Collections/venv/Lib/python3.8/site-packages/pip/_vendor/chardet/__pycache__/euctwfreq.cpython-38.pyc delete mode 100644 Jobs_Collections/venv/Lib/python3.8/site-packages/pip/_vendor/chardet/__pycache__/euctwprober.cpython-38.pyc delete mode 100644 Jobs_Collections/venv/Lib/python3.8/site-packages/pip/_vendor/chardet/__pycache__/gb2312freq.cpython-38.pyc delete mode 100644 Jobs_Collections/venv/Lib/python3.8/site-packages/pip/_vendor/chardet/__pycache__/gb2312prober.cpython-38.pyc delete mode 100644 Jobs_Collections/venv/Lib/python3.8/site-packages/pip/_vendor/chardet/__pycache__/hebrewprober.cpython-38.pyc delete mode 100644 Jobs_Collections/venv/Lib/python3.8/site-packages/pip/_vendor/chardet/__pycache__/jisfreq.cpython-38.pyc delete mode 100644 Jobs_Collections/venv/Lib/python3.8/site-packages/pip/_vendor/chardet/__pycache__/jpcntx.cpython-38.pyc delete mode 100644 Jobs_Collections/venv/Lib/python3.8/site-packages/pip/_vendor/chardet/__pycache__/langbulgarianmodel.cpython-38.pyc delete mode 100644 Jobs_Collections/venv/Lib/python3.8/site-packages/pip/_vendor/chardet/__pycache__/langcyrillicmodel.cpython-38.pyc delete mode 100644 Jobs_Collections/venv/Lib/python3.8/site-packages/pip/_vendor/chardet/__pycache__/langgreekmodel.cpython-38.pyc delete mode 100644 Jobs_Collections/venv/Lib/python3.8/site-packages/pip/_vendor/chardet/__pycache__/langhebrewmodel.cpython-38.pyc delete mode 100644 Jobs_Collections/venv/Lib/python3.8/site-packages/pip/_vendor/chardet/__pycache__/langhungarianmodel.cpython-38.pyc delete mode 100644 Jobs_Collections/venv/Lib/python3.8/site-packages/pip/_vendor/chardet/__pycache__/langthaimodel.cpython-38.pyc delete mode 100644 Jobs_Collections/venv/Lib/python3.8/site-packages/pip/_vendor/chardet/__pycache__/langturkishmodel.cpython-38.pyc delete mode 100644 Jobs_Collections/venv/Lib/python3.8/site-packages/pip/_vendor/chardet/__pycache__/latin1prober.cpython-38.pyc delete mode 100644 Jobs_Collections/venv/Lib/python3.8/site-packages/pip/_vendor/chardet/__pycache__/mbcharsetprober.cpython-38.pyc delete mode 100644 Jobs_Collections/venv/Lib/python3.8/site-packages/pip/_vendor/chardet/__pycache__/mbcsgroupprober.cpython-38.pyc delete mode 100644 Jobs_Collections/venv/Lib/python3.8/site-packages/pip/_vendor/chardet/__pycache__/mbcssm.cpython-38.pyc delete mode 100644 Jobs_Collections/venv/Lib/python3.8/site-packages/pip/_vendor/chardet/__pycache__/sbcharsetprober.cpython-38.pyc delete mode 100644 Jobs_Collections/venv/Lib/python3.8/site-packages/pip/_vendor/chardet/__pycache__/sbcsgroupprober.cpython-38.pyc delete mode 100644 Jobs_Collections/venv/Lib/python3.8/site-packages/pip/_vendor/chardet/__pycache__/sjisprober.cpython-38.pyc delete mode 100644 Jobs_Collections/venv/Lib/python3.8/site-packages/pip/_vendor/chardet/__pycache__/universaldetector.cpython-38.pyc delete mode 100644 Jobs_Collections/venv/Lib/python3.8/site-packages/pip/_vendor/chardet/__pycache__/utf8prober.cpython-38.pyc delete mode 100644 Jobs_Collections/venv/Lib/python3.8/site-packages/pip/_vendor/chardet/__pycache__/version.cpython-38.pyc delete mode 100644 Jobs_Collections/venv/Lib/python3.8/site-packages/pip/_vendor/chardet/big5freq.py delete mode 100644 Jobs_Collections/venv/Lib/python3.8/site-packages/pip/_vendor/chardet/big5prober.py delete mode 100644 Jobs_Collections/venv/Lib/python3.8/site-packages/pip/_vendor/chardet/chardistribution.py delete mode 100644 Jobs_Collections/venv/Lib/python3.8/site-packages/pip/_vendor/chardet/charsetgroupprober.py delete mode 100644 Jobs_Collections/venv/Lib/python3.8/site-packages/pip/_vendor/chardet/charsetprober.py delete mode 100644 Jobs_Collections/venv/Lib/python3.8/site-packages/pip/_vendor/chardet/cli/__init__.py delete mode 100644 Jobs_Collections/venv/Lib/python3.8/site-packages/pip/_vendor/chardet/cli/__pycache__/__init__.cpython-38.pyc delete mode 100644 Jobs_Collections/venv/Lib/python3.8/site-packages/pip/_vendor/chardet/cli/__pycache__/chardetect.cpython-38.pyc delete mode 100644 Jobs_Collections/venv/Lib/python3.8/site-packages/pip/_vendor/chardet/cli/chardetect.py delete mode 100644 Jobs_Collections/venv/Lib/python3.8/site-packages/pip/_vendor/chardet/codingstatemachine.py delete mode 100644 Jobs_Collections/venv/Lib/python3.8/site-packages/pip/_vendor/chardet/compat.py delete mode 100644 Jobs_Collections/venv/Lib/python3.8/site-packages/pip/_vendor/chardet/cp949prober.py delete mode 100644 Jobs_Collections/venv/Lib/python3.8/site-packages/pip/_vendor/chardet/enums.py delete mode 100644 Jobs_Collections/venv/Lib/python3.8/site-packages/pip/_vendor/chardet/escprober.py delete mode 100644 Jobs_Collections/venv/Lib/python3.8/site-packages/pip/_vendor/chardet/escsm.py delete mode 100644 Jobs_Collections/venv/Lib/python3.8/site-packages/pip/_vendor/chardet/eucjpprober.py delete mode 100644 Jobs_Collections/venv/Lib/python3.8/site-packages/pip/_vendor/chardet/euckrfreq.py delete mode 100644 Jobs_Collections/venv/Lib/python3.8/site-packages/pip/_vendor/chardet/euckrprober.py delete mode 100644 Jobs_Collections/venv/Lib/python3.8/site-packages/pip/_vendor/chardet/euctwfreq.py delete mode 100644 Jobs_Collections/venv/Lib/python3.8/site-packages/pip/_vendor/chardet/euctwprober.py delete mode 100644 Jobs_Collections/venv/Lib/python3.8/site-packages/pip/_vendor/chardet/gb2312freq.py delete mode 100644 Jobs_Collections/venv/Lib/python3.8/site-packages/pip/_vendor/chardet/gb2312prober.py delete mode 100644 Jobs_Collections/venv/Lib/python3.8/site-packages/pip/_vendor/chardet/hebrewprober.py delete mode 100644 Jobs_Collections/venv/Lib/python3.8/site-packages/pip/_vendor/chardet/jisfreq.py delete mode 100644 Jobs_Collections/venv/Lib/python3.8/site-packages/pip/_vendor/chardet/jpcntx.py delete mode 100644 Jobs_Collections/venv/Lib/python3.8/site-packages/pip/_vendor/chardet/langbulgarianmodel.py delete mode 100644 Jobs_Collections/venv/Lib/python3.8/site-packages/pip/_vendor/chardet/langcyrillicmodel.py delete mode 100644 Jobs_Collections/venv/Lib/python3.8/site-packages/pip/_vendor/chardet/langgreekmodel.py delete mode 100644 Jobs_Collections/venv/Lib/python3.8/site-packages/pip/_vendor/chardet/langhebrewmodel.py delete mode 100644 Jobs_Collections/venv/Lib/python3.8/site-packages/pip/_vendor/chardet/langhungarianmodel.py delete mode 100644 Jobs_Collections/venv/Lib/python3.8/site-packages/pip/_vendor/chardet/langthaimodel.py delete mode 100644 Jobs_Collections/venv/Lib/python3.8/site-packages/pip/_vendor/chardet/langturkishmodel.py delete mode 100644 Jobs_Collections/venv/Lib/python3.8/site-packages/pip/_vendor/chardet/latin1prober.py delete mode 100644 Jobs_Collections/venv/Lib/python3.8/site-packages/pip/_vendor/chardet/mbcharsetprober.py delete mode 100644 Jobs_Collections/venv/Lib/python3.8/site-packages/pip/_vendor/chardet/mbcsgroupprober.py delete mode 100644 Jobs_Collections/venv/Lib/python3.8/site-packages/pip/_vendor/chardet/mbcssm.py delete mode 100644 Jobs_Collections/venv/Lib/python3.8/site-packages/pip/_vendor/chardet/sbcharsetprober.py delete mode 100644 Jobs_Collections/venv/Lib/python3.8/site-packages/pip/_vendor/chardet/sbcsgroupprober.py delete mode 100644 Jobs_Collections/venv/Lib/python3.8/site-packages/pip/_vendor/chardet/sjisprober.py delete mode 100644 Jobs_Collections/venv/Lib/python3.8/site-packages/pip/_vendor/chardet/universaldetector.py delete mode 100644 Jobs_Collections/venv/Lib/python3.8/site-packages/pip/_vendor/chardet/utf8prober.py delete mode 100644 Jobs_Collections/venv/Lib/python3.8/site-packages/pip/_vendor/chardet/version.py delete mode 100644 Jobs_Collections/venv/Lib/python3.8/site-packages/pip/_vendor/colorama/__init__.py delete mode 100644 Jobs_Collections/venv/Lib/python3.8/site-packages/pip/_vendor/colorama/__pycache__/__init__.cpython-38.pyc delete mode 100644 Jobs_Collections/venv/Lib/python3.8/site-packages/pip/_vendor/colorama/__pycache__/ansi.cpython-38.pyc delete mode 100644 Jobs_Collections/venv/Lib/python3.8/site-packages/pip/_vendor/colorama/__pycache__/ansitowin32.cpython-38.pyc delete mode 100644 Jobs_Collections/venv/Lib/python3.8/site-packages/pip/_vendor/colorama/__pycache__/initialise.cpython-38.pyc delete mode 100644 Jobs_Collections/venv/Lib/python3.8/site-packages/pip/_vendor/colorama/__pycache__/win32.cpython-38.pyc delete mode 100644 Jobs_Collections/venv/Lib/python3.8/site-packages/pip/_vendor/colorama/__pycache__/winterm.cpython-38.pyc delete mode 100644 Jobs_Collections/venv/Lib/python3.8/site-packages/pip/_vendor/colorama/ansi.py delete mode 100644 Jobs_Collections/venv/Lib/python3.8/site-packages/pip/_vendor/colorama/ansitowin32.py delete mode 100644 Jobs_Collections/venv/Lib/python3.8/site-packages/pip/_vendor/colorama/initialise.py delete mode 100644 Jobs_Collections/venv/Lib/python3.8/site-packages/pip/_vendor/colorama/win32.py delete mode 100644 Jobs_Collections/venv/Lib/python3.8/site-packages/pip/_vendor/colorama/winterm.py delete mode 100644 Jobs_Collections/venv/Lib/python3.8/site-packages/pip/_vendor/distlib/__init__.py delete mode 100644 Jobs_Collections/venv/Lib/python3.8/site-packages/pip/_vendor/distlib/__pycache__/__init__.cpython-38.pyc delete mode 100644 Jobs_Collections/venv/Lib/python3.8/site-packages/pip/_vendor/distlib/__pycache__/compat.cpython-38.pyc delete mode 100644 Jobs_Collections/venv/Lib/python3.8/site-packages/pip/_vendor/distlib/__pycache__/database.cpython-38.pyc delete mode 100644 Jobs_Collections/venv/Lib/python3.8/site-packages/pip/_vendor/distlib/__pycache__/index.cpython-38.pyc delete mode 100644 Jobs_Collections/venv/Lib/python3.8/site-packages/pip/_vendor/distlib/__pycache__/locators.cpython-38.pyc delete mode 100644 Jobs_Collections/venv/Lib/python3.8/site-packages/pip/_vendor/distlib/__pycache__/manifest.cpython-38.pyc delete mode 100644 Jobs_Collections/venv/Lib/python3.8/site-packages/pip/_vendor/distlib/__pycache__/markers.cpython-38.pyc delete mode 100644 Jobs_Collections/venv/Lib/python3.8/site-packages/pip/_vendor/distlib/__pycache__/metadata.cpython-38.pyc delete mode 100644 Jobs_Collections/venv/Lib/python3.8/site-packages/pip/_vendor/distlib/__pycache__/resources.cpython-38.pyc delete mode 100644 Jobs_Collections/venv/Lib/python3.8/site-packages/pip/_vendor/distlib/__pycache__/scripts.cpython-38.pyc delete mode 100644 Jobs_Collections/venv/Lib/python3.8/site-packages/pip/_vendor/distlib/__pycache__/util.cpython-38.pyc delete mode 100644 Jobs_Collections/venv/Lib/python3.8/site-packages/pip/_vendor/distlib/__pycache__/version.cpython-38.pyc delete mode 100644 Jobs_Collections/venv/Lib/python3.8/site-packages/pip/_vendor/distlib/__pycache__/wheel.cpython-38.pyc delete mode 100644 Jobs_Collections/venv/Lib/python3.8/site-packages/pip/_vendor/distlib/_backport/__init__.py delete mode 100644 Jobs_Collections/venv/Lib/python3.8/site-packages/pip/_vendor/distlib/_backport/__pycache__/__init__.cpython-38.pyc delete mode 100644 Jobs_Collections/venv/Lib/python3.8/site-packages/pip/_vendor/distlib/_backport/__pycache__/misc.cpython-38.pyc delete mode 100644 Jobs_Collections/venv/Lib/python3.8/site-packages/pip/_vendor/distlib/_backport/__pycache__/shutil.cpython-38.pyc delete mode 100644 Jobs_Collections/venv/Lib/python3.8/site-packages/pip/_vendor/distlib/_backport/__pycache__/sysconfig.cpython-38.pyc delete mode 100644 Jobs_Collections/venv/Lib/python3.8/site-packages/pip/_vendor/distlib/_backport/__pycache__/tarfile.cpython-38.pyc delete mode 100644 Jobs_Collections/venv/Lib/python3.8/site-packages/pip/_vendor/distlib/_backport/misc.py delete mode 100644 Jobs_Collections/venv/Lib/python3.8/site-packages/pip/_vendor/distlib/_backport/shutil.py delete mode 100644 Jobs_Collections/venv/Lib/python3.8/site-packages/pip/_vendor/distlib/_backport/sysconfig.cfg delete mode 100644 Jobs_Collections/venv/Lib/python3.8/site-packages/pip/_vendor/distlib/_backport/sysconfig.py delete mode 100644 Jobs_Collections/venv/Lib/python3.8/site-packages/pip/_vendor/distlib/_backport/tarfile.py delete mode 100644 Jobs_Collections/venv/Lib/python3.8/site-packages/pip/_vendor/distlib/compat.py delete mode 100644 Jobs_Collections/venv/Lib/python3.8/site-packages/pip/_vendor/distlib/database.py delete mode 100644 Jobs_Collections/venv/Lib/python3.8/site-packages/pip/_vendor/distlib/index.py delete mode 100644 Jobs_Collections/venv/Lib/python3.8/site-packages/pip/_vendor/distlib/locators.py delete mode 100644 Jobs_Collections/venv/Lib/python3.8/site-packages/pip/_vendor/distlib/manifest.py delete mode 100644 Jobs_Collections/venv/Lib/python3.8/site-packages/pip/_vendor/distlib/markers.py delete mode 100644 Jobs_Collections/venv/Lib/python3.8/site-packages/pip/_vendor/distlib/metadata.py delete mode 100644 Jobs_Collections/venv/Lib/python3.8/site-packages/pip/_vendor/distlib/resources.py delete mode 100644 Jobs_Collections/venv/Lib/python3.8/site-packages/pip/_vendor/distlib/scripts.py delete mode 100644 Jobs_Collections/venv/Lib/python3.8/site-packages/pip/_vendor/distlib/t32.exe delete mode 100644 Jobs_Collections/venv/Lib/python3.8/site-packages/pip/_vendor/distlib/t64.exe delete mode 100644 Jobs_Collections/venv/Lib/python3.8/site-packages/pip/_vendor/distlib/util.py delete mode 100644 Jobs_Collections/venv/Lib/python3.8/site-packages/pip/_vendor/distlib/version.py delete mode 100644 Jobs_Collections/venv/Lib/python3.8/site-packages/pip/_vendor/distlib/w32.exe delete mode 100644 Jobs_Collections/venv/Lib/python3.8/site-packages/pip/_vendor/distlib/w64.exe delete mode 100644 Jobs_Collections/venv/Lib/python3.8/site-packages/pip/_vendor/distlib/wheel.py delete mode 100644 Jobs_Collections/venv/Lib/python3.8/site-packages/pip/_vendor/distro.py delete mode 100644 Jobs_Collections/venv/Lib/python3.8/site-packages/pip/_vendor/html5lib/__init__.py delete mode 100644 Jobs_Collections/venv/Lib/python3.8/site-packages/pip/_vendor/html5lib/__pycache__/__init__.cpython-38.pyc delete mode 100644 Jobs_Collections/venv/Lib/python3.8/site-packages/pip/_vendor/html5lib/__pycache__/_ihatexml.cpython-38.pyc delete mode 100644 Jobs_Collections/venv/Lib/python3.8/site-packages/pip/_vendor/html5lib/__pycache__/_inputstream.cpython-38.pyc delete mode 100644 Jobs_Collections/venv/Lib/python3.8/site-packages/pip/_vendor/html5lib/__pycache__/_tokenizer.cpython-38.pyc delete mode 100644 Jobs_Collections/venv/Lib/python3.8/site-packages/pip/_vendor/html5lib/__pycache__/_utils.cpython-38.pyc delete mode 100644 Jobs_Collections/venv/Lib/python3.8/site-packages/pip/_vendor/html5lib/__pycache__/constants.cpython-38.pyc delete mode 100644 Jobs_Collections/venv/Lib/python3.8/site-packages/pip/_vendor/html5lib/__pycache__/html5parser.cpython-38.pyc delete mode 100644 Jobs_Collections/venv/Lib/python3.8/site-packages/pip/_vendor/html5lib/__pycache__/serializer.cpython-38.pyc delete mode 100644 Jobs_Collections/venv/Lib/python3.8/site-packages/pip/_vendor/html5lib/_ihatexml.py delete mode 100644 Jobs_Collections/venv/Lib/python3.8/site-packages/pip/_vendor/html5lib/_inputstream.py delete mode 100644 Jobs_Collections/venv/Lib/python3.8/site-packages/pip/_vendor/html5lib/_tokenizer.py delete mode 100644 Jobs_Collections/venv/Lib/python3.8/site-packages/pip/_vendor/html5lib/_trie/__init__.py delete mode 100644 Jobs_Collections/venv/Lib/python3.8/site-packages/pip/_vendor/html5lib/_trie/__pycache__/__init__.cpython-38.pyc delete mode 100644 Jobs_Collections/venv/Lib/python3.8/site-packages/pip/_vendor/html5lib/_trie/__pycache__/_base.cpython-38.pyc delete mode 100644 Jobs_Collections/venv/Lib/python3.8/site-packages/pip/_vendor/html5lib/_trie/__pycache__/datrie.cpython-38.pyc delete mode 100644 Jobs_Collections/venv/Lib/python3.8/site-packages/pip/_vendor/html5lib/_trie/__pycache__/py.cpython-38.pyc delete mode 100644 Jobs_Collections/venv/Lib/python3.8/site-packages/pip/_vendor/html5lib/_trie/_base.py delete mode 100644 Jobs_Collections/venv/Lib/python3.8/site-packages/pip/_vendor/html5lib/_trie/datrie.py delete mode 100644 Jobs_Collections/venv/Lib/python3.8/site-packages/pip/_vendor/html5lib/_trie/py.py delete mode 100644 Jobs_Collections/venv/Lib/python3.8/site-packages/pip/_vendor/html5lib/_utils.py delete mode 100644 Jobs_Collections/venv/Lib/python3.8/site-packages/pip/_vendor/html5lib/constants.py delete mode 100644 Jobs_Collections/venv/Lib/python3.8/site-packages/pip/_vendor/html5lib/filters/__init__.py delete mode 100644 Jobs_Collections/venv/Lib/python3.8/site-packages/pip/_vendor/html5lib/filters/__pycache__/__init__.cpython-38.pyc delete mode 100644 Jobs_Collections/venv/Lib/python3.8/site-packages/pip/_vendor/html5lib/filters/__pycache__/alphabeticalattributes.cpython-38.pyc delete mode 100644 Jobs_Collections/venv/Lib/python3.8/site-packages/pip/_vendor/html5lib/filters/__pycache__/base.cpython-38.pyc delete mode 100644 Jobs_Collections/venv/Lib/python3.8/site-packages/pip/_vendor/html5lib/filters/__pycache__/inject_meta_charset.cpython-38.pyc delete mode 100644 Jobs_Collections/venv/Lib/python3.8/site-packages/pip/_vendor/html5lib/filters/__pycache__/lint.cpython-38.pyc delete mode 100644 Jobs_Collections/venv/Lib/python3.8/site-packages/pip/_vendor/html5lib/filters/__pycache__/optionaltags.cpython-38.pyc delete mode 100644 Jobs_Collections/venv/Lib/python3.8/site-packages/pip/_vendor/html5lib/filters/__pycache__/sanitizer.cpython-38.pyc delete mode 100644 Jobs_Collections/venv/Lib/python3.8/site-packages/pip/_vendor/html5lib/filters/__pycache__/whitespace.cpython-38.pyc delete mode 100644 Jobs_Collections/venv/Lib/python3.8/site-packages/pip/_vendor/html5lib/filters/alphabeticalattributes.py delete mode 100644 Jobs_Collections/venv/Lib/python3.8/site-packages/pip/_vendor/html5lib/filters/base.py delete mode 100644 Jobs_Collections/venv/Lib/python3.8/site-packages/pip/_vendor/html5lib/filters/inject_meta_charset.py delete mode 100644 Jobs_Collections/venv/Lib/python3.8/site-packages/pip/_vendor/html5lib/filters/lint.py delete mode 100644 Jobs_Collections/venv/Lib/python3.8/site-packages/pip/_vendor/html5lib/filters/optionaltags.py delete mode 100644 Jobs_Collections/venv/Lib/python3.8/site-packages/pip/_vendor/html5lib/filters/sanitizer.py delete mode 100644 Jobs_Collections/venv/Lib/python3.8/site-packages/pip/_vendor/html5lib/filters/whitespace.py delete mode 100644 Jobs_Collections/venv/Lib/python3.8/site-packages/pip/_vendor/html5lib/html5parser.py delete mode 100644 Jobs_Collections/venv/Lib/python3.8/site-packages/pip/_vendor/html5lib/serializer.py delete mode 100644 Jobs_Collections/venv/Lib/python3.8/site-packages/pip/_vendor/html5lib/treeadapters/__init__.py delete mode 100644 Jobs_Collections/venv/Lib/python3.8/site-packages/pip/_vendor/html5lib/treeadapters/__pycache__/__init__.cpython-38.pyc delete mode 100644 Jobs_Collections/venv/Lib/python3.8/site-packages/pip/_vendor/html5lib/treeadapters/__pycache__/genshi.cpython-38.pyc delete mode 100644 Jobs_Collections/venv/Lib/python3.8/site-packages/pip/_vendor/html5lib/treeadapters/__pycache__/sax.cpython-38.pyc delete mode 100644 Jobs_Collections/venv/Lib/python3.8/site-packages/pip/_vendor/html5lib/treeadapters/genshi.py delete mode 100644 Jobs_Collections/venv/Lib/python3.8/site-packages/pip/_vendor/html5lib/treeadapters/sax.py delete mode 100644 Jobs_Collections/venv/Lib/python3.8/site-packages/pip/_vendor/html5lib/treebuilders/__init__.py delete mode 100644 Jobs_Collections/venv/Lib/python3.8/site-packages/pip/_vendor/html5lib/treebuilders/__pycache__/__init__.cpython-38.pyc delete mode 100644 Jobs_Collections/venv/Lib/python3.8/site-packages/pip/_vendor/html5lib/treebuilders/__pycache__/base.cpython-38.pyc delete mode 100644 Jobs_Collections/venv/Lib/python3.8/site-packages/pip/_vendor/html5lib/treebuilders/__pycache__/dom.cpython-38.pyc delete mode 100644 Jobs_Collections/venv/Lib/python3.8/site-packages/pip/_vendor/html5lib/treebuilders/__pycache__/etree.cpython-38.pyc delete mode 100644 Jobs_Collections/venv/Lib/python3.8/site-packages/pip/_vendor/html5lib/treebuilders/__pycache__/etree_lxml.cpython-38.pyc delete mode 100644 Jobs_Collections/venv/Lib/python3.8/site-packages/pip/_vendor/html5lib/treebuilders/base.py delete mode 100644 Jobs_Collections/venv/Lib/python3.8/site-packages/pip/_vendor/html5lib/treebuilders/dom.py delete mode 100644 Jobs_Collections/venv/Lib/python3.8/site-packages/pip/_vendor/html5lib/treebuilders/etree.py delete mode 100644 Jobs_Collections/venv/Lib/python3.8/site-packages/pip/_vendor/html5lib/treebuilders/etree_lxml.py delete mode 100644 Jobs_Collections/venv/Lib/python3.8/site-packages/pip/_vendor/html5lib/treewalkers/__init__.py delete mode 100644 Jobs_Collections/venv/Lib/python3.8/site-packages/pip/_vendor/html5lib/treewalkers/__pycache__/__init__.cpython-38.pyc delete mode 100644 Jobs_Collections/venv/Lib/python3.8/site-packages/pip/_vendor/html5lib/treewalkers/__pycache__/base.cpython-38.pyc delete mode 100644 Jobs_Collections/venv/Lib/python3.8/site-packages/pip/_vendor/html5lib/treewalkers/__pycache__/dom.cpython-38.pyc delete mode 100644 Jobs_Collections/venv/Lib/python3.8/site-packages/pip/_vendor/html5lib/treewalkers/__pycache__/etree.cpython-38.pyc delete mode 100644 Jobs_Collections/venv/Lib/python3.8/site-packages/pip/_vendor/html5lib/treewalkers/__pycache__/etree_lxml.cpython-38.pyc delete mode 100644 Jobs_Collections/venv/Lib/python3.8/site-packages/pip/_vendor/html5lib/treewalkers/__pycache__/genshi.cpython-38.pyc delete mode 100644 Jobs_Collections/venv/Lib/python3.8/site-packages/pip/_vendor/html5lib/treewalkers/base.py delete mode 100644 Jobs_Collections/venv/Lib/python3.8/site-packages/pip/_vendor/html5lib/treewalkers/dom.py delete mode 100644 Jobs_Collections/venv/Lib/python3.8/site-packages/pip/_vendor/html5lib/treewalkers/etree.py delete mode 100644 Jobs_Collections/venv/Lib/python3.8/site-packages/pip/_vendor/html5lib/treewalkers/etree_lxml.py delete mode 100644 Jobs_Collections/venv/Lib/python3.8/site-packages/pip/_vendor/html5lib/treewalkers/genshi.py delete mode 100644 Jobs_Collections/venv/Lib/python3.8/site-packages/pip/_vendor/idna/__init__.py delete mode 100644 Jobs_Collections/venv/Lib/python3.8/site-packages/pip/_vendor/idna/__pycache__/__init__.cpython-38.pyc delete mode 100644 Jobs_Collections/venv/Lib/python3.8/site-packages/pip/_vendor/idna/__pycache__/codec.cpython-38.pyc delete mode 100644 Jobs_Collections/venv/Lib/python3.8/site-packages/pip/_vendor/idna/__pycache__/compat.cpython-38.pyc delete mode 100644 Jobs_Collections/venv/Lib/python3.8/site-packages/pip/_vendor/idna/__pycache__/core.cpython-38.pyc delete mode 100644 Jobs_Collections/venv/Lib/python3.8/site-packages/pip/_vendor/idna/__pycache__/idnadata.cpython-38.pyc delete mode 100644 Jobs_Collections/venv/Lib/python3.8/site-packages/pip/_vendor/idna/__pycache__/intranges.cpython-38.pyc delete mode 100644 Jobs_Collections/venv/Lib/python3.8/site-packages/pip/_vendor/idna/__pycache__/package_data.cpython-38.pyc delete mode 100644 Jobs_Collections/venv/Lib/python3.8/site-packages/pip/_vendor/idna/__pycache__/uts46data.cpython-38.pyc delete mode 100644 Jobs_Collections/venv/Lib/python3.8/site-packages/pip/_vendor/idna/codec.py delete mode 100644 Jobs_Collections/venv/Lib/python3.8/site-packages/pip/_vendor/idna/compat.py delete mode 100644 Jobs_Collections/venv/Lib/python3.8/site-packages/pip/_vendor/idna/core.py delete mode 100644 Jobs_Collections/venv/Lib/python3.8/site-packages/pip/_vendor/idna/idnadata.py delete mode 100644 Jobs_Collections/venv/Lib/python3.8/site-packages/pip/_vendor/idna/intranges.py delete mode 100644 Jobs_Collections/venv/Lib/python3.8/site-packages/pip/_vendor/idna/package_data.py delete mode 100644 Jobs_Collections/venv/Lib/python3.8/site-packages/pip/_vendor/idna/uts46data.py delete mode 100644 Jobs_Collections/venv/Lib/python3.8/site-packages/pip/_vendor/ipaddress.py delete mode 100644 Jobs_Collections/venv/Lib/python3.8/site-packages/pip/_vendor/lockfile/__init__.py delete mode 100644 Jobs_Collections/venv/Lib/python3.8/site-packages/pip/_vendor/lockfile/__pycache__/__init__.cpython-38.pyc delete mode 100644 Jobs_Collections/venv/Lib/python3.8/site-packages/pip/_vendor/lockfile/__pycache__/linklockfile.cpython-38.pyc delete mode 100644 Jobs_Collections/venv/Lib/python3.8/site-packages/pip/_vendor/lockfile/__pycache__/mkdirlockfile.cpython-38.pyc delete mode 100644 Jobs_Collections/venv/Lib/python3.8/site-packages/pip/_vendor/lockfile/__pycache__/pidlockfile.cpython-38.pyc delete mode 100644 Jobs_Collections/venv/Lib/python3.8/site-packages/pip/_vendor/lockfile/__pycache__/sqlitelockfile.cpython-38.pyc delete mode 100644 Jobs_Collections/venv/Lib/python3.8/site-packages/pip/_vendor/lockfile/__pycache__/symlinklockfile.cpython-38.pyc delete mode 100644 Jobs_Collections/venv/Lib/python3.8/site-packages/pip/_vendor/lockfile/linklockfile.py delete mode 100644 Jobs_Collections/venv/Lib/python3.8/site-packages/pip/_vendor/lockfile/mkdirlockfile.py delete mode 100644 Jobs_Collections/venv/Lib/python3.8/site-packages/pip/_vendor/lockfile/pidlockfile.py delete mode 100644 Jobs_Collections/venv/Lib/python3.8/site-packages/pip/_vendor/lockfile/sqlitelockfile.py delete mode 100644 Jobs_Collections/venv/Lib/python3.8/site-packages/pip/_vendor/lockfile/symlinklockfile.py delete mode 100644 Jobs_Collections/venv/Lib/python3.8/site-packages/pip/_vendor/msgpack/__init__.py delete mode 100644 Jobs_Collections/venv/Lib/python3.8/site-packages/pip/_vendor/msgpack/__pycache__/__init__.cpython-38.pyc delete mode 100644 Jobs_Collections/venv/Lib/python3.8/site-packages/pip/_vendor/msgpack/__pycache__/_version.cpython-38.pyc delete mode 100644 Jobs_Collections/venv/Lib/python3.8/site-packages/pip/_vendor/msgpack/__pycache__/exceptions.cpython-38.pyc delete mode 100644 Jobs_Collections/venv/Lib/python3.8/site-packages/pip/_vendor/msgpack/__pycache__/fallback.cpython-38.pyc delete mode 100644 Jobs_Collections/venv/Lib/python3.8/site-packages/pip/_vendor/msgpack/_version.py delete mode 100644 Jobs_Collections/venv/Lib/python3.8/site-packages/pip/_vendor/msgpack/exceptions.py delete mode 100644 Jobs_Collections/venv/Lib/python3.8/site-packages/pip/_vendor/msgpack/fallback.py delete mode 100644 Jobs_Collections/venv/Lib/python3.8/site-packages/pip/_vendor/packaging/__about__.py delete mode 100644 Jobs_Collections/venv/Lib/python3.8/site-packages/pip/_vendor/packaging/__init__.py delete mode 100644 Jobs_Collections/venv/Lib/python3.8/site-packages/pip/_vendor/packaging/__pycache__/__about__.cpython-38.pyc delete mode 100644 Jobs_Collections/venv/Lib/python3.8/site-packages/pip/_vendor/packaging/__pycache__/__init__.cpython-38.pyc delete mode 100644 Jobs_Collections/venv/Lib/python3.8/site-packages/pip/_vendor/packaging/__pycache__/_compat.cpython-38.pyc delete mode 100644 Jobs_Collections/venv/Lib/python3.8/site-packages/pip/_vendor/packaging/__pycache__/_structures.cpython-38.pyc delete mode 100644 Jobs_Collections/venv/Lib/python3.8/site-packages/pip/_vendor/packaging/__pycache__/markers.cpython-38.pyc delete mode 100644 Jobs_Collections/venv/Lib/python3.8/site-packages/pip/_vendor/packaging/__pycache__/requirements.cpython-38.pyc delete mode 100644 Jobs_Collections/venv/Lib/python3.8/site-packages/pip/_vendor/packaging/__pycache__/specifiers.cpython-38.pyc delete mode 100644 Jobs_Collections/venv/Lib/python3.8/site-packages/pip/_vendor/packaging/__pycache__/utils.cpython-38.pyc delete mode 100644 Jobs_Collections/venv/Lib/python3.8/site-packages/pip/_vendor/packaging/__pycache__/version.cpython-38.pyc delete mode 100644 Jobs_Collections/venv/Lib/python3.8/site-packages/pip/_vendor/packaging/_compat.py delete mode 100644 Jobs_Collections/venv/Lib/python3.8/site-packages/pip/_vendor/packaging/_structures.py delete mode 100644 Jobs_Collections/venv/Lib/python3.8/site-packages/pip/_vendor/packaging/markers.py delete mode 100644 Jobs_Collections/venv/Lib/python3.8/site-packages/pip/_vendor/packaging/requirements.py delete mode 100644 Jobs_Collections/venv/Lib/python3.8/site-packages/pip/_vendor/packaging/specifiers.py delete mode 100644 Jobs_Collections/venv/Lib/python3.8/site-packages/pip/_vendor/packaging/utils.py delete mode 100644 Jobs_Collections/venv/Lib/python3.8/site-packages/pip/_vendor/packaging/version.py delete mode 100644 Jobs_Collections/venv/Lib/python3.8/site-packages/pip/_vendor/pep517/__init__.py delete mode 100644 Jobs_Collections/venv/Lib/python3.8/site-packages/pip/_vendor/pep517/__pycache__/__init__.cpython-38.pyc delete mode 100644 Jobs_Collections/venv/Lib/python3.8/site-packages/pip/_vendor/pep517/__pycache__/_in_process.cpython-38.pyc delete mode 100644 Jobs_Collections/venv/Lib/python3.8/site-packages/pip/_vendor/pep517/__pycache__/build.cpython-38.pyc delete mode 100644 Jobs_Collections/venv/Lib/python3.8/site-packages/pip/_vendor/pep517/__pycache__/check.cpython-38.pyc delete mode 100644 Jobs_Collections/venv/Lib/python3.8/site-packages/pip/_vendor/pep517/__pycache__/colorlog.cpython-38.pyc delete mode 100644 Jobs_Collections/venv/Lib/python3.8/site-packages/pip/_vendor/pep517/__pycache__/compat.cpython-38.pyc delete mode 100644 Jobs_Collections/venv/Lib/python3.8/site-packages/pip/_vendor/pep517/__pycache__/envbuild.cpython-38.pyc delete mode 100644 Jobs_Collections/venv/Lib/python3.8/site-packages/pip/_vendor/pep517/__pycache__/wrappers.cpython-38.pyc delete mode 100644 Jobs_Collections/venv/Lib/python3.8/site-packages/pip/_vendor/pep517/_in_process.py delete mode 100644 Jobs_Collections/venv/Lib/python3.8/site-packages/pip/_vendor/pep517/build.py delete mode 100644 Jobs_Collections/venv/Lib/python3.8/site-packages/pip/_vendor/pep517/check.py delete mode 100644 Jobs_Collections/venv/Lib/python3.8/site-packages/pip/_vendor/pep517/colorlog.py delete mode 100644 Jobs_Collections/venv/Lib/python3.8/site-packages/pip/_vendor/pep517/compat.py delete mode 100644 Jobs_Collections/venv/Lib/python3.8/site-packages/pip/_vendor/pep517/envbuild.py delete mode 100644 Jobs_Collections/venv/Lib/python3.8/site-packages/pip/_vendor/pep517/wrappers.py delete mode 100644 Jobs_Collections/venv/Lib/python3.8/site-packages/pip/_vendor/pkg_resources/__init__.py delete mode 100644 Jobs_Collections/venv/Lib/python3.8/site-packages/pip/_vendor/pkg_resources/__pycache__/__init__.cpython-38.pyc delete mode 100644 Jobs_Collections/venv/Lib/python3.8/site-packages/pip/_vendor/pkg_resources/__pycache__/py31compat.cpython-38.pyc delete mode 100644 Jobs_Collections/venv/Lib/python3.8/site-packages/pip/_vendor/pkg_resources/py31compat.py delete mode 100644 Jobs_Collections/venv/Lib/python3.8/site-packages/pip/_vendor/progress/__init__.py delete mode 100644 Jobs_Collections/venv/Lib/python3.8/site-packages/pip/_vendor/progress/__pycache__/__init__.cpython-38.pyc delete mode 100644 Jobs_Collections/venv/Lib/python3.8/site-packages/pip/_vendor/progress/__pycache__/bar.cpython-38.pyc delete mode 100644 Jobs_Collections/venv/Lib/python3.8/site-packages/pip/_vendor/progress/__pycache__/counter.cpython-38.pyc delete mode 100644 Jobs_Collections/venv/Lib/python3.8/site-packages/pip/_vendor/progress/__pycache__/spinner.cpython-38.pyc delete mode 100644 Jobs_Collections/venv/Lib/python3.8/site-packages/pip/_vendor/progress/bar.py delete mode 100644 Jobs_Collections/venv/Lib/python3.8/site-packages/pip/_vendor/progress/counter.py delete mode 100644 Jobs_Collections/venv/Lib/python3.8/site-packages/pip/_vendor/progress/spinner.py delete mode 100644 Jobs_Collections/venv/Lib/python3.8/site-packages/pip/_vendor/pyparsing.py delete mode 100644 Jobs_Collections/venv/Lib/python3.8/site-packages/pip/_vendor/pytoml/__init__.py delete mode 100644 Jobs_Collections/venv/Lib/python3.8/site-packages/pip/_vendor/pytoml/__pycache__/__init__.cpython-38.pyc delete mode 100644 Jobs_Collections/venv/Lib/python3.8/site-packages/pip/_vendor/pytoml/__pycache__/core.cpython-38.pyc delete mode 100644 Jobs_Collections/venv/Lib/python3.8/site-packages/pip/_vendor/pytoml/__pycache__/parser.cpython-38.pyc delete mode 100644 Jobs_Collections/venv/Lib/python3.8/site-packages/pip/_vendor/pytoml/__pycache__/test.cpython-38.pyc delete mode 100644 Jobs_Collections/venv/Lib/python3.8/site-packages/pip/_vendor/pytoml/__pycache__/utils.cpython-38.pyc delete mode 100644 Jobs_Collections/venv/Lib/python3.8/site-packages/pip/_vendor/pytoml/__pycache__/writer.cpython-38.pyc delete mode 100644 Jobs_Collections/venv/Lib/python3.8/site-packages/pip/_vendor/pytoml/core.py delete mode 100644 Jobs_Collections/venv/Lib/python3.8/site-packages/pip/_vendor/pytoml/parser.py delete mode 100644 Jobs_Collections/venv/Lib/python3.8/site-packages/pip/_vendor/pytoml/test.py delete mode 100644 Jobs_Collections/venv/Lib/python3.8/site-packages/pip/_vendor/pytoml/utils.py delete mode 100644 Jobs_Collections/venv/Lib/python3.8/site-packages/pip/_vendor/pytoml/writer.py delete mode 100644 Jobs_Collections/venv/Lib/python3.8/site-packages/pip/_vendor/requests/__init__.py delete mode 100644 Jobs_Collections/venv/Lib/python3.8/site-packages/pip/_vendor/requests/__pycache__/__init__.cpython-38.pyc delete mode 100644 Jobs_Collections/venv/Lib/python3.8/site-packages/pip/_vendor/requests/__pycache__/__version__.cpython-38.pyc delete mode 100644 Jobs_Collections/venv/Lib/python3.8/site-packages/pip/_vendor/requests/__pycache__/_internal_utils.cpython-38.pyc delete mode 100644 Jobs_Collections/venv/Lib/python3.8/site-packages/pip/_vendor/requests/__pycache__/adapters.cpython-38.pyc delete mode 100644 Jobs_Collections/venv/Lib/python3.8/site-packages/pip/_vendor/requests/__pycache__/api.cpython-38.pyc delete mode 100644 Jobs_Collections/venv/Lib/python3.8/site-packages/pip/_vendor/requests/__pycache__/auth.cpython-38.pyc delete mode 100644 Jobs_Collections/venv/Lib/python3.8/site-packages/pip/_vendor/requests/__pycache__/certs.cpython-38.pyc delete mode 100644 Jobs_Collections/venv/Lib/python3.8/site-packages/pip/_vendor/requests/__pycache__/compat.cpython-38.pyc delete mode 100644 Jobs_Collections/venv/Lib/python3.8/site-packages/pip/_vendor/requests/__pycache__/cookies.cpython-38.pyc delete mode 100644 Jobs_Collections/venv/Lib/python3.8/site-packages/pip/_vendor/requests/__pycache__/exceptions.cpython-38.pyc delete mode 100644 Jobs_Collections/venv/Lib/python3.8/site-packages/pip/_vendor/requests/__pycache__/help.cpython-38.pyc delete mode 100644 Jobs_Collections/venv/Lib/python3.8/site-packages/pip/_vendor/requests/__pycache__/hooks.cpython-38.pyc delete mode 100644 Jobs_Collections/venv/Lib/python3.8/site-packages/pip/_vendor/requests/__pycache__/models.cpython-38.pyc delete mode 100644 Jobs_Collections/venv/Lib/python3.8/site-packages/pip/_vendor/requests/__pycache__/packages.cpython-38.pyc delete mode 100644 Jobs_Collections/venv/Lib/python3.8/site-packages/pip/_vendor/requests/__pycache__/sessions.cpython-38.pyc delete mode 100644 Jobs_Collections/venv/Lib/python3.8/site-packages/pip/_vendor/requests/__pycache__/status_codes.cpython-38.pyc delete mode 100644 Jobs_Collections/venv/Lib/python3.8/site-packages/pip/_vendor/requests/__pycache__/structures.cpython-38.pyc delete mode 100644 Jobs_Collections/venv/Lib/python3.8/site-packages/pip/_vendor/requests/__pycache__/utils.cpython-38.pyc delete mode 100644 Jobs_Collections/venv/Lib/python3.8/site-packages/pip/_vendor/requests/__version__.py delete mode 100644 Jobs_Collections/venv/Lib/python3.8/site-packages/pip/_vendor/requests/_internal_utils.py delete mode 100644 Jobs_Collections/venv/Lib/python3.8/site-packages/pip/_vendor/requests/adapters.py delete mode 100644 Jobs_Collections/venv/Lib/python3.8/site-packages/pip/_vendor/requests/api.py delete mode 100644 Jobs_Collections/venv/Lib/python3.8/site-packages/pip/_vendor/requests/auth.py delete mode 100644 Jobs_Collections/venv/Lib/python3.8/site-packages/pip/_vendor/requests/certs.py delete mode 100644 Jobs_Collections/venv/Lib/python3.8/site-packages/pip/_vendor/requests/compat.py delete mode 100644 Jobs_Collections/venv/Lib/python3.8/site-packages/pip/_vendor/requests/cookies.py delete mode 100644 Jobs_Collections/venv/Lib/python3.8/site-packages/pip/_vendor/requests/exceptions.py delete mode 100644 Jobs_Collections/venv/Lib/python3.8/site-packages/pip/_vendor/requests/help.py delete mode 100644 Jobs_Collections/venv/Lib/python3.8/site-packages/pip/_vendor/requests/hooks.py delete mode 100644 Jobs_Collections/venv/Lib/python3.8/site-packages/pip/_vendor/requests/models.py delete mode 100644 Jobs_Collections/venv/Lib/python3.8/site-packages/pip/_vendor/requests/packages.py delete mode 100644 Jobs_Collections/venv/Lib/python3.8/site-packages/pip/_vendor/requests/sessions.py delete mode 100644 Jobs_Collections/venv/Lib/python3.8/site-packages/pip/_vendor/requests/status_codes.py delete mode 100644 Jobs_Collections/venv/Lib/python3.8/site-packages/pip/_vendor/requests/structures.py delete mode 100644 Jobs_Collections/venv/Lib/python3.8/site-packages/pip/_vendor/requests/utils.py delete mode 100644 Jobs_Collections/venv/Lib/python3.8/site-packages/pip/_vendor/retrying.py delete mode 100644 Jobs_Collections/venv/Lib/python3.8/site-packages/pip/_vendor/six.py delete mode 100644 Jobs_Collections/venv/Lib/python3.8/site-packages/pip/_vendor/urllib3/__init__.py delete mode 100644 Jobs_Collections/venv/Lib/python3.8/site-packages/pip/_vendor/urllib3/__pycache__/__init__.cpython-38.pyc delete mode 100644 Jobs_Collections/venv/Lib/python3.8/site-packages/pip/_vendor/urllib3/__pycache__/_collections.cpython-38.pyc delete mode 100644 Jobs_Collections/venv/Lib/python3.8/site-packages/pip/_vendor/urllib3/__pycache__/connection.cpython-38.pyc delete mode 100644 Jobs_Collections/venv/Lib/python3.8/site-packages/pip/_vendor/urllib3/__pycache__/connectionpool.cpython-38.pyc delete mode 100644 Jobs_Collections/venv/Lib/python3.8/site-packages/pip/_vendor/urllib3/__pycache__/exceptions.cpython-38.pyc delete mode 100644 Jobs_Collections/venv/Lib/python3.8/site-packages/pip/_vendor/urllib3/__pycache__/fields.cpython-38.pyc delete mode 100644 Jobs_Collections/venv/Lib/python3.8/site-packages/pip/_vendor/urllib3/__pycache__/filepost.cpython-38.pyc delete mode 100644 Jobs_Collections/venv/Lib/python3.8/site-packages/pip/_vendor/urllib3/__pycache__/poolmanager.cpython-38.pyc delete mode 100644 Jobs_Collections/venv/Lib/python3.8/site-packages/pip/_vendor/urllib3/__pycache__/request.cpython-38.pyc delete mode 100644 Jobs_Collections/venv/Lib/python3.8/site-packages/pip/_vendor/urllib3/__pycache__/response.cpython-38.pyc delete mode 100644 Jobs_Collections/venv/Lib/python3.8/site-packages/pip/_vendor/urllib3/_collections.py delete mode 100644 Jobs_Collections/venv/Lib/python3.8/site-packages/pip/_vendor/urllib3/connection.py delete mode 100644 Jobs_Collections/venv/Lib/python3.8/site-packages/pip/_vendor/urllib3/connectionpool.py delete mode 100644 Jobs_Collections/venv/Lib/python3.8/site-packages/pip/_vendor/urllib3/contrib/__init__.py delete mode 100644 Jobs_Collections/venv/Lib/python3.8/site-packages/pip/_vendor/urllib3/contrib/__pycache__/__init__.cpython-38.pyc delete mode 100644 Jobs_Collections/venv/Lib/python3.8/site-packages/pip/_vendor/urllib3/contrib/__pycache__/_appengine_environ.cpython-38.pyc delete mode 100644 Jobs_Collections/venv/Lib/python3.8/site-packages/pip/_vendor/urllib3/contrib/__pycache__/appengine.cpython-38.pyc delete mode 100644 Jobs_Collections/venv/Lib/python3.8/site-packages/pip/_vendor/urllib3/contrib/__pycache__/ntlmpool.cpython-38.pyc delete mode 100644 Jobs_Collections/venv/Lib/python3.8/site-packages/pip/_vendor/urllib3/contrib/__pycache__/pyopenssl.cpython-38.pyc delete mode 100644 Jobs_Collections/venv/Lib/python3.8/site-packages/pip/_vendor/urllib3/contrib/__pycache__/securetransport.cpython-38.pyc delete mode 100644 Jobs_Collections/venv/Lib/python3.8/site-packages/pip/_vendor/urllib3/contrib/__pycache__/socks.cpython-38.pyc delete mode 100644 Jobs_Collections/venv/Lib/python3.8/site-packages/pip/_vendor/urllib3/contrib/_appengine_environ.py delete mode 100644 Jobs_Collections/venv/Lib/python3.8/site-packages/pip/_vendor/urllib3/contrib/_securetransport/__init__.py delete mode 100644 Jobs_Collections/venv/Lib/python3.8/site-packages/pip/_vendor/urllib3/contrib/_securetransport/__pycache__/__init__.cpython-38.pyc delete mode 100644 Jobs_Collections/venv/Lib/python3.8/site-packages/pip/_vendor/urllib3/contrib/_securetransport/__pycache__/bindings.cpython-38.pyc delete mode 100644 Jobs_Collections/venv/Lib/python3.8/site-packages/pip/_vendor/urllib3/contrib/_securetransport/__pycache__/low_level.cpython-38.pyc delete mode 100644 Jobs_Collections/venv/Lib/python3.8/site-packages/pip/_vendor/urllib3/contrib/_securetransport/bindings.py delete mode 100644 Jobs_Collections/venv/Lib/python3.8/site-packages/pip/_vendor/urllib3/contrib/_securetransport/low_level.py delete mode 100644 Jobs_Collections/venv/Lib/python3.8/site-packages/pip/_vendor/urllib3/contrib/appengine.py delete mode 100644 Jobs_Collections/venv/Lib/python3.8/site-packages/pip/_vendor/urllib3/contrib/ntlmpool.py delete mode 100644 Jobs_Collections/venv/Lib/python3.8/site-packages/pip/_vendor/urllib3/contrib/pyopenssl.py delete mode 100644 Jobs_Collections/venv/Lib/python3.8/site-packages/pip/_vendor/urllib3/contrib/securetransport.py delete mode 100644 Jobs_Collections/venv/Lib/python3.8/site-packages/pip/_vendor/urllib3/contrib/socks.py delete mode 100644 Jobs_Collections/venv/Lib/python3.8/site-packages/pip/_vendor/urllib3/exceptions.py delete mode 100644 Jobs_Collections/venv/Lib/python3.8/site-packages/pip/_vendor/urllib3/fields.py delete mode 100644 Jobs_Collections/venv/Lib/python3.8/site-packages/pip/_vendor/urllib3/filepost.py delete mode 100644 Jobs_Collections/venv/Lib/python3.8/site-packages/pip/_vendor/urllib3/packages/__init__.py delete mode 100644 Jobs_Collections/venv/Lib/python3.8/site-packages/pip/_vendor/urllib3/packages/__pycache__/__init__.cpython-38.pyc delete mode 100644 Jobs_Collections/venv/Lib/python3.8/site-packages/pip/_vendor/urllib3/packages/__pycache__/six.cpython-38.pyc delete mode 100644 Jobs_Collections/venv/Lib/python3.8/site-packages/pip/_vendor/urllib3/packages/backports/__init__.py delete mode 100644 Jobs_Collections/venv/Lib/python3.8/site-packages/pip/_vendor/urllib3/packages/backports/__pycache__/__init__.cpython-38.pyc delete mode 100644 Jobs_Collections/venv/Lib/python3.8/site-packages/pip/_vendor/urllib3/packages/backports/__pycache__/makefile.cpython-38.pyc delete mode 100644 Jobs_Collections/venv/Lib/python3.8/site-packages/pip/_vendor/urllib3/packages/backports/makefile.py delete mode 100644 Jobs_Collections/venv/Lib/python3.8/site-packages/pip/_vendor/urllib3/packages/rfc3986/__init__.py delete mode 100644 Jobs_Collections/venv/Lib/python3.8/site-packages/pip/_vendor/urllib3/packages/rfc3986/__pycache__/__init__.cpython-38.pyc delete mode 100644 Jobs_Collections/venv/Lib/python3.8/site-packages/pip/_vendor/urllib3/packages/rfc3986/__pycache__/_mixin.cpython-38.pyc delete mode 100644 Jobs_Collections/venv/Lib/python3.8/site-packages/pip/_vendor/urllib3/packages/rfc3986/__pycache__/abnf_regexp.cpython-38.pyc delete mode 100644 Jobs_Collections/venv/Lib/python3.8/site-packages/pip/_vendor/urllib3/packages/rfc3986/__pycache__/api.cpython-38.pyc delete mode 100644 Jobs_Collections/venv/Lib/python3.8/site-packages/pip/_vendor/urllib3/packages/rfc3986/__pycache__/builder.cpython-38.pyc delete mode 100644 Jobs_Collections/venv/Lib/python3.8/site-packages/pip/_vendor/urllib3/packages/rfc3986/__pycache__/compat.cpython-38.pyc delete mode 100644 Jobs_Collections/venv/Lib/python3.8/site-packages/pip/_vendor/urllib3/packages/rfc3986/__pycache__/exceptions.cpython-38.pyc delete mode 100644 Jobs_Collections/venv/Lib/python3.8/site-packages/pip/_vendor/urllib3/packages/rfc3986/__pycache__/iri.cpython-38.pyc delete mode 100644 Jobs_Collections/venv/Lib/python3.8/site-packages/pip/_vendor/urllib3/packages/rfc3986/__pycache__/misc.cpython-38.pyc delete mode 100644 Jobs_Collections/venv/Lib/python3.8/site-packages/pip/_vendor/urllib3/packages/rfc3986/__pycache__/normalizers.cpython-38.pyc delete mode 100644 Jobs_Collections/venv/Lib/python3.8/site-packages/pip/_vendor/urllib3/packages/rfc3986/__pycache__/parseresult.cpython-38.pyc delete mode 100644 Jobs_Collections/venv/Lib/python3.8/site-packages/pip/_vendor/urllib3/packages/rfc3986/__pycache__/uri.cpython-38.pyc delete mode 100644 Jobs_Collections/venv/Lib/python3.8/site-packages/pip/_vendor/urllib3/packages/rfc3986/__pycache__/validators.cpython-38.pyc delete mode 100644 Jobs_Collections/venv/Lib/python3.8/site-packages/pip/_vendor/urllib3/packages/rfc3986/_mixin.py delete mode 100644 Jobs_Collections/venv/Lib/python3.8/site-packages/pip/_vendor/urllib3/packages/rfc3986/abnf_regexp.py delete mode 100644 Jobs_Collections/venv/Lib/python3.8/site-packages/pip/_vendor/urllib3/packages/rfc3986/api.py delete mode 100644 Jobs_Collections/venv/Lib/python3.8/site-packages/pip/_vendor/urllib3/packages/rfc3986/builder.py delete mode 100644 Jobs_Collections/venv/Lib/python3.8/site-packages/pip/_vendor/urllib3/packages/rfc3986/compat.py delete mode 100644 Jobs_Collections/venv/Lib/python3.8/site-packages/pip/_vendor/urllib3/packages/rfc3986/exceptions.py delete mode 100644 Jobs_Collections/venv/Lib/python3.8/site-packages/pip/_vendor/urllib3/packages/rfc3986/iri.py delete mode 100644 Jobs_Collections/venv/Lib/python3.8/site-packages/pip/_vendor/urllib3/packages/rfc3986/misc.py delete mode 100644 Jobs_Collections/venv/Lib/python3.8/site-packages/pip/_vendor/urllib3/packages/rfc3986/normalizers.py delete mode 100644 Jobs_Collections/venv/Lib/python3.8/site-packages/pip/_vendor/urllib3/packages/rfc3986/parseresult.py delete mode 100644 Jobs_Collections/venv/Lib/python3.8/site-packages/pip/_vendor/urllib3/packages/rfc3986/uri.py delete mode 100644 Jobs_Collections/venv/Lib/python3.8/site-packages/pip/_vendor/urllib3/packages/rfc3986/validators.py delete mode 100644 Jobs_Collections/venv/Lib/python3.8/site-packages/pip/_vendor/urllib3/packages/six.py delete mode 100644 Jobs_Collections/venv/Lib/python3.8/site-packages/pip/_vendor/urllib3/packages/ssl_match_hostname/__init__.py delete mode 100644 Jobs_Collections/venv/Lib/python3.8/site-packages/pip/_vendor/urllib3/packages/ssl_match_hostname/__pycache__/__init__.cpython-38.pyc delete mode 100644 Jobs_Collections/venv/Lib/python3.8/site-packages/pip/_vendor/urllib3/packages/ssl_match_hostname/__pycache__/_implementation.cpython-38.pyc delete mode 100644 Jobs_Collections/venv/Lib/python3.8/site-packages/pip/_vendor/urllib3/packages/ssl_match_hostname/_implementation.py delete mode 100644 Jobs_Collections/venv/Lib/python3.8/site-packages/pip/_vendor/urllib3/poolmanager.py delete mode 100644 Jobs_Collections/venv/Lib/python3.8/site-packages/pip/_vendor/urllib3/request.py delete mode 100644 Jobs_Collections/venv/Lib/python3.8/site-packages/pip/_vendor/urllib3/response.py delete mode 100644 Jobs_Collections/venv/Lib/python3.8/site-packages/pip/_vendor/urllib3/util/__init__.py delete mode 100644 Jobs_Collections/venv/Lib/python3.8/site-packages/pip/_vendor/urllib3/util/__pycache__/__init__.cpython-38.pyc delete mode 100644 Jobs_Collections/venv/Lib/python3.8/site-packages/pip/_vendor/urllib3/util/__pycache__/connection.cpython-38.pyc delete mode 100644 Jobs_Collections/venv/Lib/python3.8/site-packages/pip/_vendor/urllib3/util/__pycache__/queue.cpython-38.pyc delete mode 100644 Jobs_Collections/venv/Lib/python3.8/site-packages/pip/_vendor/urllib3/util/__pycache__/request.cpython-38.pyc delete mode 100644 Jobs_Collections/venv/Lib/python3.8/site-packages/pip/_vendor/urllib3/util/__pycache__/response.cpython-38.pyc delete mode 100644 Jobs_Collections/venv/Lib/python3.8/site-packages/pip/_vendor/urllib3/util/__pycache__/retry.cpython-38.pyc delete mode 100644 Jobs_Collections/venv/Lib/python3.8/site-packages/pip/_vendor/urllib3/util/__pycache__/ssl_.cpython-38.pyc delete mode 100644 Jobs_Collections/venv/Lib/python3.8/site-packages/pip/_vendor/urllib3/util/__pycache__/timeout.cpython-38.pyc delete mode 100644 Jobs_Collections/venv/Lib/python3.8/site-packages/pip/_vendor/urllib3/util/__pycache__/url.cpython-38.pyc delete mode 100644 Jobs_Collections/venv/Lib/python3.8/site-packages/pip/_vendor/urllib3/util/__pycache__/wait.cpython-38.pyc delete mode 100644 Jobs_Collections/venv/Lib/python3.8/site-packages/pip/_vendor/urllib3/util/connection.py delete mode 100644 Jobs_Collections/venv/Lib/python3.8/site-packages/pip/_vendor/urllib3/util/queue.py delete mode 100644 Jobs_Collections/venv/Lib/python3.8/site-packages/pip/_vendor/urllib3/util/request.py delete mode 100644 Jobs_Collections/venv/Lib/python3.8/site-packages/pip/_vendor/urllib3/util/response.py delete mode 100644 Jobs_Collections/venv/Lib/python3.8/site-packages/pip/_vendor/urllib3/util/retry.py delete mode 100644 Jobs_Collections/venv/Lib/python3.8/site-packages/pip/_vendor/urllib3/util/ssl_.py delete mode 100644 Jobs_Collections/venv/Lib/python3.8/site-packages/pip/_vendor/urllib3/util/timeout.py delete mode 100644 Jobs_Collections/venv/Lib/python3.8/site-packages/pip/_vendor/urllib3/util/url.py delete mode 100644 Jobs_Collections/venv/Lib/python3.8/site-packages/pip/_vendor/urllib3/util/wait.py delete mode 100644 Jobs_Collections/venv/Lib/python3.8/site-packages/pip/_vendor/webencodings/__init__.py delete mode 100644 Jobs_Collections/venv/Lib/python3.8/site-packages/pip/_vendor/webencodings/__pycache__/__init__.cpython-38.pyc delete mode 100644 Jobs_Collections/venv/Lib/python3.8/site-packages/pip/_vendor/webencodings/__pycache__/labels.cpython-38.pyc delete mode 100644 Jobs_Collections/venv/Lib/python3.8/site-packages/pip/_vendor/webencodings/__pycache__/mklabels.cpython-38.pyc delete mode 100644 Jobs_Collections/venv/Lib/python3.8/site-packages/pip/_vendor/webencodings/__pycache__/tests.cpython-38.pyc delete mode 100644 Jobs_Collections/venv/Lib/python3.8/site-packages/pip/_vendor/webencodings/__pycache__/x_user_defined.cpython-38.pyc delete mode 100644 Jobs_Collections/venv/Lib/python3.8/site-packages/pip/_vendor/webencodings/labels.py delete mode 100644 Jobs_Collections/venv/Lib/python3.8/site-packages/pip/_vendor/webencodings/mklabels.py delete mode 100644 Jobs_Collections/venv/Lib/python3.8/site-packages/pip/_vendor/webencodings/tests.py delete mode 100644 Jobs_Collections/venv/Lib/python3.8/site-packages/pip/_vendor/webencodings/x_user_defined.py delete mode 100644 Jobs_Collections/venv/Lib/python3.8/site-packages/pkg_resources/__init__.py delete mode 100644 Jobs_Collections/venv/Lib/python3.8/site-packages/pkg_resources/__pycache__/__init__.cpython-38.pyc delete mode 100644 Jobs_Collections/venv/Lib/python3.8/site-packages/pkg_resources/__pycache__/py31compat.cpython-38.pyc delete mode 100644 Jobs_Collections/venv/Lib/python3.8/site-packages/pkg_resources/_vendor/__init__.py delete mode 100644 Jobs_Collections/venv/Lib/python3.8/site-packages/pkg_resources/_vendor/__pycache__/__init__.cpython-38.pyc delete mode 100644 Jobs_Collections/venv/Lib/python3.8/site-packages/pkg_resources/_vendor/__pycache__/appdirs.cpython-38.pyc delete mode 100644 Jobs_Collections/venv/Lib/python3.8/site-packages/pkg_resources/_vendor/__pycache__/pyparsing.cpython-38.pyc delete mode 100644 Jobs_Collections/venv/Lib/python3.8/site-packages/pkg_resources/_vendor/__pycache__/six.cpython-38.pyc delete mode 100644 Jobs_Collections/venv/Lib/python3.8/site-packages/pkg_resources/_vendor/appdirs.py delete mode 100644 Jobs_Collections/venv/Lib/python3.8/site-packages/pkg_resources/_vendor/packaging/__about__.py delete mode 100644 Jobs_Collections/venv/Lib/python3.8/site-packages/pkg_resources/_vendor/packaging/__init__.py delete mode 100644 Jobs_Collections/venv/Lib/python3.8/site-packages/pkg_resources/_vendor/packaging/__pycache__/__about__.cpython-38.pyc delete mode 100644 Jobs_Collections/venv/Lib/python3.8/site-packages/pkg_resources/_vendor/packaging/__pycache__/__init__.cpython-38.pyc delete mode 100644 Jobs_Collections/venv/Lib/python3.8/site-packages/pkg_resources/_vendor/packaging/__pycache__/_compat.cpython-38.pyc delete mode 100644 Jobs_Collections/venv/Lib/python3.8/site-packages/pkg_resources/_vendor/packaging/__pycache__/_structures.cpython-38.pyc delete mode 100644 Jobs_Collections/venv/Lib/python3.8/site-packages/pkg_resources/_vendor/packaging/__pycache__/markers.cpython-38.pyc delete mode 100644 Jobs_Collections/venv/Lib/python3.8/site-packages/pkg_resources/_vendor/packaging/__pycache__/requirements.cpython-38.pyc delete mode 100644 Jobs_Collections/venv/Lib/python3.8/site-packages/pkg_resources/_vendor/packaging/__pycache__/specifiers.cpython-38.pyc delete mode 100644 Jobs_Collections/venv/Lib/python3.8/site-packages/pkg_resources/_vendor/packaging/__pycache__/utils.cpython-38.pyc delete mode 100644 Jobs_Collections/venv/Lib/python3.8/site-packages/pkg_resources/_vendor/packaging/__pycache__/version.cpython-38.pyc delete mode 100644 Jobs_Collections/venv/Lib/python3.8/site-packages/pkg_resources/_vendor/packaging/_compat.py delete mode 100644 Jobs_Collections/venv/Lib/python3.8/site-packages/pkg_resources/_vendor/packaging/_structures.py delete mode 100644 Jobs_Collections/venv/Lib/python3.8/site-packages/pkg_resources/_vendor/packaging/markers.py delete mode 100644 Jobs_Collections/venv/Lib/python3.8/site-packages/pkg_resources/_vendor/packaging/requirements.py delete mode 100644 Jobs_Collections/venv/Lib/python3.8/site-packages/pkg_resources/_vendor/packaging/specifiers.py delete mode 100644 Jobs_Collections/venv/Lib/python3.8/site-packages/pkg_resources/_vendor/packaging/utils.py delete mode 100644 Jobs_Collections/venv/Lib/python3.8/site-packages/pkg_resources/_vendor/packaging/version.py delete mode 100644 Jobs_Collections/venv/Lib/python3.8/site-packages/pkg_resources/_vendor/pyparsing.py delete mode 100644 Jobs_Collections/venv/Lib/python3.8/site-packages/pkg_resources/_vendor/six.py delete mode 100644 Jobs_Collections/venv/Lib/python3.8/site-packages/pkg_resources/extern/__init__.py delete mode 100644 Jobs_Collections/venv/Lib/python3.8/site-packages/pkg_resources/extern/__pycache__/__init__.cpython-38.pyc delete mode 100644 Jobs_Collections/venv/Lib/python3.8/site-packages/pkg_resources/py31compat.py delete mode 100644 Jobs_Collections/venv/Lib/python3.8/site-packages/pylint-2.5.3.dist-info/COPYING delete mode 100644 Jobs_Collections/venv/Lib/python3.8/site-packages/pylint-2.5.3.dist-info/INSTALLER delete mode 100644 Jobs_Collections/venv/Lib/python3.8/site-packages/pylint-2.5.3.dist-info/METADATA delete mode 100644 Jobs_Collections/venv/Lib/python3.8/site-packages/pylint-2.5.3.dist-info/RECORD delete mode 100644 Jobs_Collections/venv/Lib/python3.8/site-packages/pylint-2.5.3.dist-info/WHEEL delete mode 100644 Jobs_Collections/venv/Lib/python3.8/site-packages/pylint-2.5.3.dist-info/entry_points.txt delete mode 100644 Jobs_Collections/venv/Lib/python3.8/site-packages/pylint-2.5.3.dist-info/top_level.txt delete mode 100644 Jobs_Collections/venv/Lib/python3.8/site-packages/pylint/__init__.py delete mode 100644 Jobs_Collections/venv/Lib/python3.8/site-packages/pylint/__main__.py delete mode 100644 Jobs_Collections/venv/Lib/python3.8/site-packages/pylint/__pkginfo__.py delete mode 100644 Jobs_Collections/venv/Lib/python3.8/site-packages/pylint/__pycache__/__init__.cpython-38.pyc delete mode 100644 Jobs_Collections/venv/Lib/python3.8/site-packages/pylint/__pycache__/__main__.cpython-38.pyc delete mode 100644 Jobs_Collections/venv/Lib/python3.8/site-packages/pylint/__pycache__/__pkginfo__.cpython-38.pyc delete mode 100644 Jobs_Collections/venv/Lib/python3.8/site-packages/pylint/__pycache__/config.cpython-38.pyc delete mode 100644 Jobs_Collections/venv/Lib/python3.8/site-packages/pylint/__pycache__/constants.cpython-38.pyc delete mode 100644 Jobs_Collections/venv/Lib/python3.8/site-packages/pylint/__pycache__/epylint.cpython-38.pyc delete mode 100644 Jobs_Collections/venv/Lib/python3.8/site-packages/pylint/__pycache__/exceptions.cpython-38.pyc delete mode 100644 Jobs_Collections/venv/Lib/python3.8/site-packages/pylint/__pycache__/graph.cpython-38.pyc delete mode 100644 Jobs_Collections/venv/Lib/python3.8/site-packages/pylint/__pycache__/interfaces.cpython-38.pyc delete mode 100644 Jobs_Collections/venv/Lib/python3.8/site-packages/pylint/__pycache__/testutils.cpython-38.pyc delete mode 100644 Jobs_Collections/venv/Lib/python3.8/site-packages/pylint/checkers/__init__.py delete mode 100644 Jobs_Collections/venv/Lib/python3.8/site-packages/pylint/checkers/__pycache__/__init__.cpython-38.pyc delete mode 100644 Jobs_Collections/venv/Lib/python3.8/site-packages/pylint/checkers/__pycache__/async.cpython-38.pyc delete mode 100644 Jobs_Collections/venv/Lib/python3.8/site-packages/pylint/checkers/__pycache__/base.cpython-38.pyc delete mode 100644 Jobs_Collections/venv/Lib/python3.8/site-packages/pylint/checkers/__pycache__/base_checker.cpython-38.pyc delete mode 100644 Jobs_Collections/venv/Lib/python3.8/site-packages/pylint/checkers/__pycache__/classes.cpython-38.pyc delete mode 100644 Jobs_Collections/venv/Lib/python3.8/site-packages/pylint/checkers/__pycache__/design_analysis.cpython-38.pyc delete mode 100644 Jobs_Collections/venv/Lib/python3.8/site-packages/pylint/checkers/__pycache__/exceptions.cpython-38.pyc delete mode 100644 Jobs_Collections/venv/Lib/python3.8/site-packages/pylint/checkers/__pycache__/format.cpython-38.pyc delete mode 100644 Jobs_Collections/venv/Lib/python3.8/site-packages/pylint/checkers/__pycache__/imports.cpython-38.pyc delete mode 100644 Jobs_Collections/venv/Lib/python3.8/site-packages/pylint/checkers/__pycache__/logging.cpython-38.pyc delete mode 100644 Jobs_Collections/venv/Lib/python3.8/site-packages/pylint/checkers/__pycache__/misc.cpython-38.pyc delete mode 100644 Jobs_Collections/venv/Lib/python3.8/site-packages/pylint/checkers/__pycache__/newstyle.cpython-38.pyc delete mode 100644 Jobs_Collections/venv/Lib/python3.8/site-packages/pylint/checkers/__pycache__/python3.cpython-38.pyc delete mode 100644 Jobs_Collections/venv/Lib/python3.8/site-packages/pylint/checkers/__pycache__/raw_metrics.cpython-38.pyc delete mode 100644 Jobs_Collections/venv/Lib/python3.8/site-packages/pylint/checkers/__pycache__/refactoring.cpython-38.pyc delete mode 100644 Jobs_Collections/venv/Lib/python3.8/site-packages/pylint/checkers/__pycache__/similar.cpython-38.pyc delete mode 100644 Jobs_Collections/venv/Lib/python3.8/site-packages/pylint/checkers/__pycache__/spelling.cpython-38.pyc delete mode 100644 Jobs_Collections/venv/Lib/python3.8/site-packages/pylint/checkers/__pycache__/stdlib.cpython-38.pyc delete mode 100644 Jobs_Collections/venv/Lib/python3.8/site-packages/pylint/checkers/__pycache__/strings.cpython-38.pyc delete mode 100644 Jobs_Collections/venv/Lib/python3.8/site-packages/pylint/checkers/__pycache__/typecheck.cpython-38.pyc delete mode 100644 Jobs_Collections/venv/Lib/python3.8/site-packages/pylint/checkers/__pycache__/utils.cpython-38.pyc delete mode 100644 Jobs_Collections/venv/Lib/python3.8/site-packages/pylint/checkers/__pycache__/variables.cpython-38.pyc delete mode 100644 Jobs_Collections/venv/Lib/python3.8/site-packages/pylint/checkers/async.py delete mode 100644 Jobs_Collections/venv/Lib/python3.8/site-packages/pylint/checkers/base.py delete mode 100644 Jobs_Collections/venv/Lib/python3.8/site-packages/pylint/checkers/base_checker.py delete mode 100644 Jobs_Collections/venv/Lib/python3.8/site-packages/pylint/checkers/classes.py delete mode 100644 Jobs_Collections/venv/Lib/python3.8/site-packages/pylint/checkers/design_analysis.py delete mode 100644 Jobs_Collections/venv/Lib/python3.8/site-packages/pylint/checkers/exceptions.py delete mode 100644 Jobs_Collections/venv/Lib/python3.8/site-packages/pylint/checkers/format.py delete mode 100644 Jobs_Collections/venv/Lib/python3.8/site-packages/pylint/checkers/imports.py delete mode 100644 Jobs_Collections/venv/Lib/python3.8/site-packages/pylint/checkers/logging.py delete mode 100644 Jobs_Collections/venv/Lib/python3.8/site-packages/pylint/checkers/misc.py delete mode 100644 Jobs_Collections/venv/Lib/python3.8/site-packages/pylint/checkers/newstyle.py delete mode 100644 Jobs_Collections/venv/Lib/python3.8/site-packages/pylint/checkers/python3.py delete mode 100644 Jobs_Collections/venv/Lib/python3.8/site-packages/pylint/checkers/raw_metrics.py delete mode 100644 Jobs_Collections/venv/Lib/python3.8/site-packages/pylint/checkers/refactoring.py delete mode 100644 Jobs_Collections/venv/Lib/python3.8/site-packages/pylint/checkers/similar.py delete mode 100644 Jobs_Collections/venv/Lib/python3.8/site-packages/pylint/checkers/spelling.py delete mode 100644 Jobs_Collections/venv/Lib/python3.8/site-packages/pylint/checkers/stdlib.py delete mode 100644 Jobs_Collections/venv/Lib/python3.8/site-packages/pylint/checkers/strings.py delete mode 100644 Jobs_Collections/venv/Lib/python3.8/site-packages/pylint/checkers/typecheck.py delete mode 100644 Jobs_Collections/venv/Lib/python3.8/site-packages/pylint/checkers/utils.py delete mode 100644 Jobs_Collections/venv/Lib/python3.8/site-packages/pylint/checkers/variables.py delete mode 100644 Jobs_Collections/venv/Lib/python3.8/site-packages/pylint/config.py delete mode 100644 Jobs_Collections/venv/Lib/python3.8/site-packages/pylint/constants.py delete mode 100644 Jobs_Collections/venv/Lib/python3.8/site-packages/pylint/epylint.py delete mode 100644 Jobs_Collections/venv/Lib/python3.8/site-packages/pylint/exceptions.py delete mode 100644 Jobs_Collections/venv/Lib/python3.8/site-packages/pylint/extensions/__init__.py delete mode 100644 Jobs_Collections/venv/Lib/python3.8/site-packages/pylint/extensions/__pycache__/__init__.cpython-38.pyc delete mode 100644 Jobs_Collections/venv/Lib/python3.8/site-packages/pylint/extensions/__pycache__/_check_docs_utils.cpython-38.pyc delete mode 100644 Jobs_Collections/venv/Lib/python3.8/site-packages/pylint/extensions/__pycache__/bad_builtin.cpython-38.pyc delete mode 100644 Jobs_Collections/venv/Lib/python3.8/site-packages/pylint/extensions/__pycache__/broad_try_clause.cpython-38.pyc delete mode 100644 Jobs_Collections/venv/Lib/python3.8/site-packages/pylint/extensions/__pycache__/check_docs.cpython-38.pyc delete mode 100644 Jobs_Collections/venv/Lib/python3.8/site-packages/pylint/extensions/__pycache__/check_elif.cpython-38.pyc delete mode 100644 Jobs_Collections/venv/Lib/python3.8/site-packages/pylint/extensions/__pycache__/comparetozero.cpython-38.pyc delete mode 100644 Jobs_Collections/venv/Lib/python3.8/site-packages/pylint/extensions/__pycache__/docparams.cpython-38.pyc delete mode 100644 Jobs_Collections/venv/Lib/python3.8/site-packages/pylint/extensions/__pycache__/docstyle.cpython-38.pyc delete mode 100644 Jobs_Collections/venv/Lib/python3.8/site-packages/pylint/extensions/__pycache__/emptystring.cpython-38.pyc delete mode 100644 Jobs_Collections/venv/Lib/python3.8/site-packages/pylint/extensions/__pycache__/mccabe.cpython-38.pyc delete mode 100644 Jobs_Collections/venv/Lib/python3.8/site-packages/pylint/extensions/__pycache__/overlapping_exceptions.cpython-38.pyc delete mode 100644 Jobs_Collections/venv/Lib/python3.8/site-packages/pylint/extensions/__pycache__/redefined_variable_type.cpython-38.pyc delete mode 100644 Jobs_Collections/venv/Lib/python3.8/site-packages/pylint/extensions/_check_docs_utils.py delete mode 100644 Jobs_Collections/venv/Lib/python3.8/site-packages/pylint/extensions/bad_builtin.py delete mode 100644 Jobs_Collections/venv/Lib/python3.8/site-packages/pylint/extensions/broad_try_clause.py delete mode 100644 Jobs_Collections/venv/Lib/python3.8/site-packages/pylint/extensions/check_docs.py delete mode 100644 Jobs_Collections/venv/Lib/python3.8/site-packages/pylint/extensions/check_elif.py delete mode 100644 Jobs_Collections/venv/Lib/python3.8/site-packages/pylint/extensions/comparetozero.py delete mode 100644 Jobs_Collections/venv/Lib/python3.8/site-packages/pylint/extensions/docparams.py delete mode 100644 Jobs_Collections/venv/Lib/python3.8/site-packages/pylint/extensions/docstyle.py delete mode 100644 Jobs_Collections/venv/Lib/python3.8/site-packages/pylint/extensions/emptystring.py delete mode 100644 Jobs_Collections/venv/Lib/python3.8/site-packages/pylint/extensions/mccabe.py delete mode 100644 Jobs_Collections/venv/Lib/python3.8/site-packages/pylint/extensions/overlapping_exceptions.py delete mode 100644 Jobs_Collections/venv/Lib/python3.8/site-packages/pylint/extensions/redefined_variable_type.py delete mode 100644 Jobs_Collections/venv/Lib/python3.8/site-packages/pylint/graph.py delete mode 100644 Jobs_Collections/venv/Lib/python3.8/site-packages/pylint/interfaces.py delete mode 100644 Jobs_Collections/venv/Lib/python3.8/site-packages/pylint/lint/__init__.py delete mode 100644 Jobs_Collections/venv/Lib/python3.8/site-packages/pylint/lint/__pycache__/__init__.cpython-38.pyc delete mode 100644 Jobs_Collections/venv/Lib/python3.8/site-packages/pylint/lint/__pycache__/check_parallel.cpython-38.pyc delete mode 100644 Jobs_Collections/venv/Lib/python3.8/site-packages/pylint/lint/__pycache__/pylinter.cpython-38.pyc delete mode 100644 Jobs_Collections/venv/Lib/python3.8/site-packages/pylint/lint/__pycache__/report_functions.cpython-38.pyc delete mode 100644 Jobs_Collections/venv/Lib/python3.8/site-packages/pylint/lint/__pycache__/run.cpython-38.pyc delete mode 100644 Jobs_Collections/venv/Lib/python3.8/site-packages/pylint/lint/__pycache__/utils.cpython-38.pyc delete mode 100644 Jobs_Collections/venv/Lib/python3.8/site-packages/pylint/lint/check_parallel.py delete mode 100644 Jobs_Collections/venv/Lib/python3.8/site-packages/pylint/lint/pylinter.py delete mode 100644 Jobs_Collections/venv/Lib/python3.8/site-packages/pylint/lint/report_functions.py delete mode 100644 Jobs_Collections/venv/Lib/python3.8/site-packages/pylint/lint/run.py delete mode 100644 Jobs_Collections/venv/Lib/python3.8/site-packages/pylint/lint/utils.py delete mode 100644 Jobs_Collections/venv/Lib/python3.8/site-packages/pylint/message/__init__.py delete mode 100644 Jobs_Collections/venv/Lib/python3.8/site-packages/pylint/message/__pycache__/__init__.cpython-38.pyc delete mode 100644 Jobs_Collections/venv/Lib/python3.8/site-packages/pylint/message/__pycache__/message.cpython-38.pyc delete mode 100644 Jobs_Collections/venv/Lib/python3.8/site-packages/pylint/message/__pycache__/message_definition.cpython-38.pyc delete mode 100644 Jobs_Collections/venv/Lib/python3.8/site-packages/pylint/message/__pycache__/message_definition_store.cpython-38.pyc delete mode 100644 Jobs_Collections/venv/Lib/python3.8/site-packages/pylint/message/__pycache__/message_handler_mix_in.cpython-38.pyc delete mode 100644 Jobs_Collections/venv/Lib/python3.8/site-packages/pylint/message/__pycache__/message_id_store.cpython-38.pyc delete mode 100644 Jobs_Collections/venv/Lib/python3.8/site-packages/pylint/message/message.py delete mode 100644 Jobs_Collections/venv/Lib/python3.8/site-packages/pylint/message/message_definition.py delete mode 100644 Jobs_Collections/venv/Lib/python3.8/site-packages/pylint/message/message_definition_store.py delete mode 100644 Jobs_Collections/venv/Lib/python3.8/site-packages/pylint/message/message_handler_mix_in.py delete mode 100644 Jobs_Collections/venv/Lib/python3.8/site-packages/pylint/message/message_id_store.py delete mode 100644 Jobs_Collections/venv/Lib/python3.8/site-packages/pylint/pyreverse/__init__.py delete mode 100644 Jobs_Collections/venv/Lib/python3.8/site-packages/pylint/pyreverse/__pycache__/__init__.cpython-38.pyc delete mode 100644 Jobs_Collections/venv/Lib/python3.8/site-packages/pylint/pyreverse/__pycache__/diadefslib.cpython-38.pyc delete mode 100644 Jobs_Collections/venv/Lib/python3.8/site-packages/pylint/pyreverse/__pycache__/diagrams.cpython-38.pyc delete mode 100644 Jobs_Collections/venv/Lib/python3.8/site-packages/pylint/pyreverse/__pycache__/inspector.cpython-38.pyc delete mode 100644 Jobs_Collections/venv/Lib/python3.8/site-packages/pylint/pyreverse/__pycache__/main.cpython-38.pyc delete mode 100644 Jobs_Collections/venv/Lib/python3.8/site-packages/pylint/pyreverse/__pycache__/utils.cpython-38.pyc delete mode 100644 Jobs_Collections/venv/Lib/python3.8/site-packages/pylint/pyreverse/__pycache__/vcgutils.cpython-38.pyc delete mode 100644 Jobs_Collections/venv/Lib/python3.8/site-packages/pylint/pyreverse/__pycache__/writer.cpython-38.pyc delete mode 100644 Jobs_Collections/venv/Lib/python3.8/site-packages/pylint/pyreverse/diadefslib.py delete mode 100644 Jobs_Collections/venv/Lib/python3.8/site-packages/pylint/pyreverse/diagrams.py delete mode 100644 Jobs_Collections/venv/Lib/python3.8/site-packages/pylint/pyreverse/inspector.py delete mode 100644 Jobs_Collections/venv/Lib/python3.8/site-packages/pylint/pyreverse/main.py delete mode 100644 Jobs_Collections/venv/Lib/python3.8/site-packages/pylint/pyreverse/utils.py delete mode 100644 Jobs_Collections/venv/Lib/python3.8/site-packages/pylint/pyreverse/vcgutils.py delete mode 100644 Jobs_Collections/venv/Lib/python3.8/site-packages/pylint/pyreverse/writer.py delete mode 100644 Jobs_Collections/venv/Lib/python3.8/site-packages/pylint/reporters/__init__.py delete mode 100644 Jobs_Collections/venv/Lib/python3.8/site-packages/pylint/reporters/__pycache__/__init__.cpython-38.pyc delete mode 100644 Jobs_Collections/venv/Lib/python3.8/site-packages/pylint/reporters/__pycache__/base_reporter.cpython-38.pyc delete mode 100644 Jobs_Collections/venv/Lib/python3.8/site-packages/pylint/reporters/__pycache__/collecting_reporter.cpython-38.pyc delete mode 100644 Jobs_Collections/venv/Lib/python3.8/site-packages/pylint/reporters/__pycache__/json_reporter.cpython-38.pyc delete mode 100644 Jobs_Collections/venv/Lib/python3.8/site-packages/pylint/reporters/__pycache__/reports_handler_mix_in.cpython-38.pyc delete mode 100644 Jobs_Collections/venv/Lib/python3.8/site-packages/pylint/reporters/__pycache__/text.cpython-38.pyc delete mode 100644 Jobs_Collections/venv/Lib/python3.8/site-packages/pylint/reporters/base_reporter.py delete mode 100644 Jobs_Collections/venv/Lib/python3.8/site-packages/pylint/reporters/collecting_reporter.py delete mode 100644 Jobs_Collections/venv/Lib/python3.8/site-packages/pylint/reporters/json_reporter.py delete mode 100644 Jobs_Collections/venv/Lib/python3.8/site-packages/pylint/reporters/reports_handler_mix_in.py delete mode 100644 Jobs_Collections/venv/Lib/python3.8/site-packages/pylint/reporters/text.py delete mode 100644 Jobs_Collections/venv/Lib/python3.8/site-packages/pylint/reporters/ureports/__init__.py delete mode 100644 Jobs_Collections/venv/Lib/python3.8/site-packages/pylint/reporters/ureports/__pycache__/__init__.cpython-38.pyc delete mode 100644 Jobs_Collections/venv/Lib/python3.8/site-packages/pylint/reporters/ureports/__pycache__/nodes.cpython-38.pyc delete mode 100644 Jobs_Collections/venv/Lib/python3.8/site-packages/pylint/reporters/ureports/__pycache__/text_writer.cpython-38.pyc delete mode 100644 Jobs_Collections/venv/Lib/python3.8/site-packages/pylint/reporters/ureports/nodes.py delete mode 100644 Jobs_Collections/venv/Lib/python3.8/site-packages/pylint/reporters/ureports/text_writer.py delete mode 100644 Jobs_Collections/venv/Lib/python3.8/site-packages/pylint/testutils.py delete mode 100644 Jobs_Collections/venv/Lib/python3.8/site-packages/pylint/utils/__init__.py delete mode 100644 Jobs_Collections/venv/Lib/python3.8/site-packages/pylint/utils/__pycache__/__init__.cpython-38.pyc delete mode 100644 Jobs_Collections/venv/Lib/python3.8/site-packages/pylint/utils/__pycache__/ast_walker.cpython-38.pyc delete mode 100644 Jobs_Collections/venv/Lib/python3.8/site-packages/pylint/utils/__pycache__/file_state.cpython-38.pyc delete mode 100644 Jobs_Collections/venv/Lib/python3.8/site-packages/pylint/utils/__pycache__/pragma_parser.cpython-38.pyc delete mode 100644 Jobs_Collections/venv/Lib/python3.8/site-packages/pylint/utils/__pycache__/utils.cpython-38.pyc delete mode 100644 Jobs_Collections/venv/Lib/python3.8/site-packages/pylint/utils/ast_walker.py delete mode 100644 Jobs_Collections/venv/Lib/python3.8/site-packages/pylint/utils/file_state.py delete mode 100644 Jobs_Collections/venv/Lib/python3.8/site-packages/pylint/utils/pragma_parser.py delete mode 100644 Jobs_Collections/venv/Lib/python3.8/site-packages/pylint/utils/utils.py delete mode 100644 Jobs_Collections/venv/Lib/python3.8/site-packages/requests-2.23.0.dist-info/INSTALLER delete mode 100644 Jobs_Collections/venv/Lib/python3.8/site-packages/requests-2.23.0.dist-info/LICENSE delete mode 100644 Jobs_Collections/venv/Lib/python3.8/site-packages/requests-2.23.0.dist-info/METADATA delete mode 100644 Jobs_Collections/venv/Lib/python3.8/site-packages/requests-2.23.0.dist-info/RECORD delete mode 100644 Jobs_Collections/venv/Lib/python3.8/site-packages/requests-2.23.0.dist-info/WHEEL delete mode 100644 Jobs_Collections/venv/Lib/python3.8/site-packages/requests-2.23.0.dist-info/top_level.txt delete mode 100644 Jobs_Collections/venv/Lib/python3.8/site-packages/requests/__init__.py delete mode 100644 Jobs_Collections/venv/Lib/python3.8/site-packages/requests/__pycache__/__init__.cpython-38.pyc delete mode 100644 Jobs_Collections/venv/Lib/python3.8/site-packages/requests/__pycache__/__version__.cpython-38.pyc delete mode 100644 Jobs_Collections/venv/Lib/python3.8/site-packages/requests/__pycache__/_internal_utils.cpython-38.pyc delete mode 100644 Jobs_Collections/venv/Lib/python3.8/site-packages/requests/__pycache__/adapters.cpython-38.pyc delete mode 100644 Jobs_Collections/venv/Lib/python3.8/site-packages/requests/__pycache__/api.cpython-38.pyc delete mode 100644 Jobs_Collections/venv/Lib/python3.8/site-packages/requests/__pycache__/auth.cpython-38.pyc delete mode 100644 Jobs_Collections/venv/Lib/python3.8/site-packages/requests/__pycache__/certs.cpython-38.pyc delete mode 100644 Jobs_Collections/venv/Lib/python3.8/site-packages/requests/__pycache__/compat.cpython-38.pyc delete mode 100644 Jobs_Collections/venv/Lib/python3.8/site-packages/requests/__pycache__/cookies.cpython-38.pyc delete mode 100644 Jobs_Collections/venv/Lib/python3.8/site-packages/requests/__pycache__/exceptions.cpython-38.pyc delete mode 100644 Jobs_Collections/venv/Lib/python3.8/site-packages/requests/__pycache__/help.cpython-38.pyc delete mode 100644 Jobs_Collections/venv/Lib/python3.8/site-packages/requests/__pycache__/hooks.cpython-38.pyc delete mode 100644 Jobs_Collections/venv/Lib/python3.8/site-packages/requests/__pycache__/models.cpython-38.pyc delete mode 100644 Jobs_Collections/venv/Lib/python3.8/site-packages/requests/__pycache__/packages.cpython-38.pyc delete mode 100644 Jobs_Collections/venv/Lib/python3.8/site-packages/requests/__pycache__/sessions.cpython-38.pyc delete mode 100644 Jobs_Collections/venv/Lib/python3.8/site-packages/requests/__pycache__/status_codes.cpython-38.pyc delete mode 100644 Jobs_Collections/venv/Lib/python3.8/site-packages/requests/__pycache__/structures.cpython-38.pyc delete mode 100644 Jobs_Collections/venv/Lib/python3.8/site-packages/requests/__pycache__/utils.cpython-38.pyc delete mode 100644 Jobs_Collections/venv/Lib/python3.8/site-packages/requests/__version__.py delete mode 100644 Jobs_Collections/venv/Lib/python3.8/site-packages/requests/_internal_utils.py delete mode 100644 Jobs_Collections/venv/Lib/python3.8/site-packages/requests/adapters.py delete mode 100644 Jobs_Collections/venv/Lib/python3.8/site-packages/requests/api.py delete mode 100644 Jobs_Collections/venv/Lib/python3.8/site-packages/requests/auth.py delete mode 100644 Jobs_Collections/venv/Lib/python3.8/site-packages/requests/certs.py delete mode 100644 Jobs_Collections/venv/Lib/python3.8/site-packages/requests/compat.py delete mode 100644 Jobs_Collections/venv/Lib/python3.8/site-packages/requests/cookies.py delete mode 100644 Jobs_Collections/venv/Lib/python3.8/site-packages/requests/exceptions.py delete mode 100644 Jobs_Collections/venv/Lib/python3.8/site-packages/requests/help.py delete mode 100644 Jobs_Collections/venv/Lib/python3.8/site-packages/requests/hooks.py delete mode 100644 Jobs_Collections/venv/Lib/python3.8/site-packages/requests/models.py delete mode 100644 Jobs_Collections/venv/Lib/python3.8/site-packages/requests/packages.py delete mode 100644 Jobs_Collections/venv/Lib/python3.8/site-packages/requests/sessions.py delete mode 100644 Jobs_Collections/venv/Lib/python3.8/site-packages/requests/status_codes.py delete mode 100644 Jobs_Collections/venv/Lib/python3.8/site-packages/requests/structures.py delete mode 100644 Jobs_Collections/venv/Lib/python3.8/site-packages/requests/utils.py delete mode 100644 Jobs_Collections/venv/Lib/python3.8/site-packages/setuptools-41.2.0.dist-info/INSTALLER delete mode 100644 Jobs_Collections/venv/Lib/python3.8/site-packages/setuptools-41.2.0.dist-info/LICENSE delete mode 100644 Jobs_Collections/venv/Lib/python3.8/site-packages/setuptools-41.2.0.dist-info/METADATA delete mode 100644 Jobs_Collections/venv/Lib/python3.8/site-packages/setuptools-41.2.0.dist-info/RECORD delete mode 100644 Jobs_Collections/venv/Lib/python3.8/site-packages/setuptools-41.2.0.dist-info/WHEEL delete mode 100644 Jobs_Collections/venv/Lib/python3.8/site-packages/setuptools-41.2.0.dist-info/dependency_links.txt delete mode 100644 Jobs_Collections/venv/Lib/python3.8/site-packages/setuptools-41.2.0.dist-info/entry_points.txt delete mode 100644 Jobs_Collections/venv/Lib/python3.8/site-packages/setuptools-41.2.0.dist-info/top_level.txt delete mode 100644 Jobs_Collections/venv/Lib/python3.8/site-packages/setuptools-41.2.0.dist-info/zip-safe delete mode 100644 Jobs_Collections/venv/Lib/python3.8/site-packages/setuptools/__init__.py delete mode 100644 Jobs_Collections/venv/Lib/python3.8/site-packages/setuptools/__pycache__/__init__.cpython-38.pyc delete mode 100644 Jobs_Collections/venv/Lib/python3.8/site-packages/setuptools/__pycache__/_deprecation_warning.cpython-38.pyc delete mode 100644 Jobs_Collections/venv/Lib/python3.8/site-packages/setuptools/__pycache__/archive_util.cpython-38.pyc delete mode 100644 Jobs_Collections/venv/Lib/python3.8/site-packages/setuptools/__pycache__/build_meta.cpython-38.pyc delete mode 100644 Jobs_Collections/venv/Lib/python3.8/site-packages/setuptools/__pycache__/config.cpython-38.pyc delete mode 100644 Jobs_Collections/venv/Lib/python3.8/site-packages/setuptools/__pycache__/dep_util.cpython-38.pyc delete mode 100644 Jobs_Collections/venv/Lib/python3.8/site-packages/setuptools/__pycache__/depends.cpython-38.pyc delete mode 100644 Jobs_Collections/venv/Lib/python3.8/site-packages/setuptools/__pycache__/dist.cpython-38.pyc delete mode 100644 Jobs_Collections/venv/Lib/python3.8/site-packages/setuptools/__pycache__/extension.cpython-38.pyc delete mode 100644 Jobs_Collections/venv/Lib/python3.8/site-packages/setuptools/__pycache__/glibc.cpython-38.pyc delete mode 100644 Jobs_Collections/venv/Lib/python3.8/site-packages/setuptools/__pycache__/glob.cpython-38.pyc delete mode 100644 Jobs_Collections/venv/Lib/python3.8/site-packages/setuptools/__pycache__/launch.cpython-38.pyc delete mode 100644 Jobs_Collections/venv/Lib/python3.8/site-packages/setuptools/__pycache__/lib2to3_ex.cpython-38.pyc delete mode 100644 Jobs_Collections/venv/Lib/python3.8/site-packages/setuptools/__pycache__/monkey.cpython-38.pyc delete mode 100644 Jobs_Collections/venv/Lib/python3.8/site-packages/setuptools/__pycache__/msvc.cpython-38.pyc delete mode 100644 Jobs_Collections/venv/Lib/python3.8/site-packages/setuptools/__pycache__/namespaces.cpython-38.pyc delete mode 100644 Jobs_Collections/venv/Lib/python3.8/site-packages/setuptools/__pycache__/package_index.cpython-38.pyc delete mode 100644 Jobs_Collections/venv/Lib/python3.8/site-packages/setuptools/__pycache__/pep425tags.cpython-38.pyc delete mode 100644 Jobs_Collections/venv/Lib/python3.8/site-packages/setuptools/__pycache__/py27compat.cpython-38.pyc delete mode 100644 Jobs_Collections/venv/Lib/python3.8/site-packages/setuptools/__pycache__/py31compat.cpython-38.pyc delete mode 100644 Jobs_Collections/venv/Lib/python3.8/site-packages/setuptools/__pycache__/py33compat.cpython-38.pyc delete mode 100644 Jobs_Collections/venv/Lib/python3.8/site-packages/setuptools/__pycache__/sandbox.cpython-38.pyc delete mode 100644 Jobs_Collections/venv/Lib/python3.8/site-packages/setuptools/__pycache__/site-patch.cpython-38.pyc delete mode 100644 Jobs_Collections/venv/Lib/python3.8/site-packages/setuptools/__pycache__/ssl_support.cpython-38.pyc delete mode 100644 Jobs_Collections/venv/Lib/python3.8/site-packages/setuptools/__pycache__/unicode_utils.cpython-38.pyc delete mode 100644 Jobs_Collections/venv/Lib/python3.8/site-packages/setuptools/__pycache__/version.cpython-38.pyc delete mode 100644 Jobs_Collections/venv/Lib/python3.8/site-packages/setuptools/__pycache__/wheel.cpython-38.pyc delete mode 100644 Jobs_Collections/venv/Lib/python3.8/site-packages/setuptools/__pycache__/windows_support.cpython-38.pyc delete mode 100644 Jobs_Collections/venv/Lib/python3.8/site-packages/setuptools/_deprecation_warning.py delete mode 100644 Jobs_Collections/venv/Lib/python3.8/site-packages/setuptools/_vendor/__init__.py delete mode 100644 Jobs_Collections/venv/Lib/python3.8/site-packages/setuptools/_vendor/__pycache__/__init__.cpython-38.pyc delete mode 100644 Jobs_Collections/venv/Lib/python3.8/site-packages/setuptools/_vendor/__pycache__/pyparsing.cpython-38.pyc delete mode 100644 Jobs_Collections/venv/Lib/python3.8/site-packages/setuptools/_vendor/__pycache__/six.cpython-38.pyc delete mode 100644 Jobs_Collections/venv/Lib/python3.8/site-packages/setuptools/_vendor/packaging/__about__.py delete mode 100644 Jobs_Collections/venv/Lib/python3.8/site-packages/setuptools/_vendor/packaging/__init__.py delete mode 100644 Jobs_Collections/venv/Lib/python3.8/site-packages/setuptools/_vendor/packaging/__pycache__/__about__.cpython-38.pyc delete mode 100644 Jobs_Collections/venv/Lib/python3.8/site-packages/setuptools/_vendor/packaging/__pycache__/__init__.cpython-38.pyc delete mode 100644 Jobs_Collections/venv/Lib/python3.8/site-packages/setuptools/_vendor/packaging/__pycache__/_compat.cpython-38.pyc delete mode 100644 Jobs_Collections/venv/Lib/python3.8/site-packages/setuptools/_vendor/packaging/__pycache__/_structures.cpython-38.pyc delete mode 100644 Jobs_Collections/venv/Lib/python3.8/site-packages/setuptools/_vendor/packaging/__pycache__/markers.cpython-38.pyc delete mode 100644 Jobs_Collections/venv/Lib/python3.8/site-packages/setuptools/_vendor/packaging/__pycache__/requirements.cpython-38.pyc delete mode 100644 Jobs_Collections/venv/Lib/python3.8/site-packages/setuptools/_vendor/packaging/__pycache__/specifiers.cpython-38.pyc delete mode 100644 Jobs_Collections/venv/Lib/python3.8/site-packages/setuptools/_vendor/packaging/__pycache__/utils.cpython-38.pyc delete mode 100644 Jobs_Collections/venv/Lib/python3.8/site-packages/setuptools/_vendor/packaging/__pycache__/version.cpython-38.pyc delete mode 100644 Jobs_Collections/venv/Lib/python3.8/site-packages/setuptools/_vendor/packaging/_compat.py delete mode 100644 Jobs_Collections/venv/Lib/python3.8/site-packages/setuptools/_vendor/packaging/_structures.py delete mode 100644 Jobs_Collections/venv/Lib/python3.8/site-packages/setuptools/_vendor/packaging/markers.py delete mode 100644 Jobs_Collections/venv/Lib/python3.8/site-packages/setuptools/_vendor/packaging/requirements.py delete mode 100644 Jobs_Collections/venv/Lib/python3.8/site-packages/setuptools/_vendor/packaging/specifiers.py delete mode 100644 Jobs_Collections/venv/Lib/python3.8/site-packages/setuptools/_vendor/packaging/utils.py delete mode 100644 Jobs_Collections/venv/Lib/python3.8/site-packages/setuptools/_vendor/packaging/version.py delete mode 100644 Jobs_Collections/venv/Lib/python3.8/site-packages/setuptools/_vendor/pyparsing.py delete mode 100644 Jobs_Collections/venv/Lib/python3.8/site-packages/setuptools/_vendor/six.py delete mode 100644 Jobs_Collections/venv/Lib/python3.8/site-packages/setuptools/archive_util.py delete mode 100644 Jobs_Collections/venv/Lib/python3.8/site-packages/setuptools/build_meta.py delete mode 100644 Jobs_Collections/venv/Lib/python3.8/site-packages/setuptools/cli-32.exe delete mode 100644 Jobs_Collections/venv/Lib/python3.8/site-packages/setuptools/cli-64.exe delete mode 100644 Jobs_Collections/venv/Lib/python3.8/site-packages/setuptools/cli.exe delete mode 100644 Jobs_Collections/venv/Lib/python3.8/site-packages/setuptools/command/__init__.py delete mode 100644 Jobs_Collections/venv/Lib/python3.8/site-packages/setuptools/command/__pycache__/__init__.cpython-38.pyc delete mode 100644 Jobs_Collections/venv/Lib/python3.8/site-packages/setuptools/command/__pycache__/alias.cpython-38.pyc delete mode 100644 Jobs_Collections/venv/Lib/python3.8/site-packages/setuptools/command/__pycache__/bdist_egg.cpython-38.pyc delete mode 100644 Jobs_Collections/venv/Lib/python3.8/site-packages/setuptools/command/__pycache__/bdist_rpm.cpython-38.pyc delete mode 100644 Jobs_Collections/venv/Lib/python3.8/site-packages/setuptools/command/__pycache__/bdist_wininst.cpython-38.pyc delete mode 100644 Jobs_Collections/venv/Lib/python3.8/site-packages/setuptools/command/__pycache__/build_clib.cpython-38.pyc delete mode 100644 Jobs_Collections/venv/Lib/python3.8/site-packages/setuptools/command/__pycache__/build_ext.cpython-38.pyc delete mode 100644 Jobs_Collections/venv/Lib/python3.8/site-packages/setuptools/command/__pycache__/build_py.cpython-38.pyc delete mode 100644 Jobs_Collections/venv/Lib/python3.8/site-packages/setuptools/command/__pycache__/develop.cpython-38.pyc delete mode 100644 Jobs_Collections/venv/Lib/python3.8/site-packages/setuptools/command/__pycache__/dist_info.cpython-38.pyc delete mode 100644 Jobs_Collections/venv/Lib/python3.8/site-packages/setuptools/command/__pycache__/easy_install.cpython-38.pyc delete mode 100644 Jobs_Collections/venv/Lib/python3.8/site-packages/setuptools/command/__pycache__/egg_info.cpython-38.pyc delete mode 100644 Jobs_Collections/venv/Lib/python3.8/site-packages/setuptools/command/__pycache__/install.cpython-38.pyc delete mode 100644 Jobs_Collections/venv/Lib/python3.8/site-packages/setuptools/command/__pycache__/install_egg_info.cpython-38.pyc delete mode 100644 Jobs_Collections/venv/Lib/python3.8/site-packages/setuptools/command/__pycache__/install_lib.cpython-38.pyc delete mode 100644 Jobs_Collections/venv/Lib/python3.8/site-packages/setuptools/command/__pycache__/install_scripts.cpython-38.pyc delete mode 100644 Jobs_Collections/venv/Lib/python3.8/site-packages/setuptools/command/__pycache__/py36compat.cpython-38.pyc delete mode 100644 Jobs_Collections/venv/Lib/python3.8/site-packages/setuptools/command/__pycache__/register.cpython-38.pyc delete mode 100644 Jobs_Collections/venv/Lib/python3.8/site-packages/setuptools/command/__pycache__/rotate.cpython-38.pyc delete mode 100644 Jobs_Collections/venv/Lib/python3.8/site-packages/setuptools/command/__pycache__/saveopts.cpython-38.pyc delete mode 100644 Jobs_Collections/venv/Lib/python3.8/site-packages/setuptools/command/__pycache__/sdist.cpython-38.pyc delete mode 100644 Jobs_Collections/venv/Lib/python3.8/site-packages/setuptools/command/__pycache__/setopt.cpython-38.pyc delete mode 100644 Jobs_Collections/venv/Lib/python3.8/site-packages/setuptools/command/__pycache__/test.cpython-38.pyc delete mode 100644 Jobs_Collections/venv/Lib/python3.8/site-packages/setuptools/command/__pycache__/upload.cpython-38.pyc delete mode 100644 Jobs_Collections/venv/Lib/python3.8/site-packages/setuptools/command/__pycache__/upload_docs.cpython-38.pyc delete mode 100644 Jobs_Collections/venv/Lib/python3.8/site-packages/setuptools/command/alias.py delete mode 100644 Jobs_Collections/venv/Lib/python3.8/site-packages/setuptools/command/bdist_egg.py delete mode 100644 Jobs_Collections/venv/Lib/python3.8/site-packages/setuptools/command/bdist_rpm.py delete mode 100644 Jobs_Collections/venv/Lib/python3.8/site-packages/setuptools/command/bdist_wininst.py delete mode 100644 Jobs_Collections/venv/Lib/python3.8/site-packages/setuptools/command/build_clib.py delete mode 100644 Jobs_Collections/venv/Lib/python3.8/site-packages/setuptools/command/build_ext.py delete mode 100644 Jobs_Collections/venv/Lib/python3.8/site-packages/setuptools/command/build_py.py delete mode 100644 Jobs_Collections/venv/Lib/python3.8/site-packages/setuptools/command/develop.py delete mode 100644 Jobs_Collections/venv/Lib/python3.8/site-packages/setuptools/command/dist_info.py delete mode 100644 Jobs_Collections/venv/Lib/python3.8/site-packages/setuptools/command/easy_install.py delete mode 100644 Jobs_Collections/venv/Lib/python3.8/site-packages/setuptools/command/egg_info.py delete mode 100644 Jobs_Collections/venv/Lib/python3.8/site-packages/setuptools/command/install.py delete mode 100644 Jobs_Collections/venv/Lib/python3.8/site-packages/setuptools/command/install_egg_info.py delete mode 100644 Jobs_Collections/venv/Lib/python3.8/site-packages/setuptools/command/install_lib.py delete mode 100644 Jobs_Collections/venv/Lib/python3.8/site-packages/setuptools/command/install_scripts.py delete mode 100644 Jobs_Collections/venv/Lib/python3.8/site-packages/setuptools/command/launcher manifest.xml delete mode 100644 Jobs_Collections/venv/Lib/python3.8/site-packages/setuptools/command/py36compat.py delete mode 100644 Jobs_Collections/venv/Lib/python3.8/site-packages/setuptools/command/register.py delete mode 100644 Jobs_Collections/venv/Lib/python3.8/site-packages/setuptools/command/rotate.py delete mode 100644 Jobs_Collections/venv/Lib/python3.8/site-packages/setuptools/command/saveopts.py delete mode 100644 Jobs_Collections/venv/Lib/python3.8/site-packages/setuptools/command/sdist.py delete mode 100644 Jobs_Collections/venv/Lib/python3.8/site-packages/setuptools/command/setopt.py delete mode 100644 Jobs_Collections/venv/Lib/python3.8/site-packages/setuptools/command/test.py delete mode 100644 Jobs_Collections/venv/Lib/python3.8/site-packages/setuptools/command/upload.py delete mode 100644 Jobs_Collections/venv/Lib/python3.8/site-packages/setuptools/command/upload_docs.py delete mode 100644 Jobs_Collections/venv/Lib/python3.8/site-packages/setuptools/config.py delete mode 100644 Jobs_Collections/venv/Lib/python3.8/site-packages/setuptools/dep_util.py delete mode 100644 Jobs_Collections/venv/Lib/python3.8/site-packages/setuptools/depends.py delete mode 100644 Jobs_Collections/venv/Lib/python3.8/site-packages/setuptools/dist.py delete mode 100644 Jobs_Collections/venv/Lib/python3.8/site-packages/setuptools/extension.py delete mode 100644 Jobs_Collections/venv/Lib/python3.8/site-packages/setuptools/extern/__init__.py delete mode 100644 Jobs_Collections/venv/Lib/python3.8/site-packages/setuptools/extern/__pycache__/__init__.cpython-38.pyc delete mode 100644 Jobs_Collections/venv/Lib/python3.8/site-packages/setuptools/glibc.py delete mode 100644 Jobs_Collections/venv/Lib/python3.8/site-packages/setuptools/glob.py delete mode 100644 Jobs_Collections/venv/Lib/python3.8/site-packages/setuptools/gui-32.exe delete mode 100644 Jobs_Collections/venv/Lib/python3.8/site-packages/setuptools/gui-64.exe delete mode 100644 Jobs_Collections/venv/Lib/python3.8/site-packages/setuptools/gui.exe delete mode 100644 Jobs_Collections/venv/Lib/python3.8/site-packages/setuptools/launch.py delete mode 100644 Jobs_Collections/venv/Lib/python3.8/site-packages/setuptools/lib2to3_ex.py delete mode 100644 Jobs_Collections/venv/Lib/python3.8/site-packages/setuptools/monkey.py delete mode 100644 Jobs_Collections/venv/Lib/python3.8/site-packages/setuptools/msvc.py delete mode 100644 Jobs_Collections/venv/Lib/python3.8/site-packages/setuptools/namespaces.py delete mode 100644 Jobs_Collections/venv/Lib/python3.8/site-packages/setuptools/package_index.py delete mode 100644 Jobs_Collections/venv/Lib/python3.8/site-packages/setuptools/pep425tags.py delete mode 100644 Jobs_Collections/venv/Lib/python3.8/site-packages/setuptools/py27compat.py delete mode 100644 Jobs_Collections/venv/Lib/python3.8/site-packages/setuptools/py31compat.py delete mode 100644 Jobs_Collections/venv/Lib/python3.8/site-packages/setuptools/py33compat.py delete mode 100644 Jobs_Collections/venv/Lib/python3.8/site-packages/setuptools/sandbox.py delete mode 100644 Jobs_Collections/venv/Lib/python3.8/site-packages/setuptools/script (dev).tmpl delete mode 100644 Jobs_Collections/venv/Lib/python3.8/site-packages/setuptools/script.tmpl delete mode 100644 Jobs_Collections/venv/Lib/python3.8/site-packages/setuptools/site-patch.py delete mode 100644 Jobs_Collections/venv/Lib/python3.8/site-packages/setuptools/ssl_support.py delete mode 100644 Jobs_Collections/venv/Lib/python3.8/site-packages/setuptools/unicode_utils.py delete mode 100644 Jobs_Collections/venv/Lib/python3.8/site-packages/setuptools/version.py delete mode 100644 Jobs_Collections/venv/Lib/python3.8/site-packages/setuptools/wheel.py delete mode 100644 Jobs_Collections/venv/Lib/python3.8/site-packages/setuptools/windows_support.py delete mode 100644 Jobs_Collections/venv/Lib/python3.8/site-packages/six-1.15.0.dist-info/INSTALLER delete mode 100644 Jobs_Collections/venv/Lib/python3.8/site-packages/six-1.15.0.dist-info/LICENSE delete mode 100644 Jobs_Collections/venv/Lib/python3.8/site-packages/six-1.15.0.dist-info/METADATA delete mode 100644 Jobs_Collections/venv/Lib/python3.8/site-packages/six-1.15.0.dist-info/RECORD delete mode 100644 Jobs_Collections/venv/Lib/python3.8/site-packages/six-1.15.0.dist-info/WHEEL delete mode 100644 Jobs_Collections/venv/Lib/python3.8/site-packages/six-1.15.0.dist-info/top_level.txt delete mode 100644 Jobs_Collections/venv/Lib/python3.8/site-packages/six.py delete mode 100644 Jobs_Collections/venv/Lib/python3.8/site-packages/soupsieve-2.0.1.dist-info/INSTALLER delete mode 100644 Jobs_Collections/venv/Lib/python3.8/site-packages/soupsieve-2.0.1.dist-info/LICENSE.md delete mode 100644 Jobs_Collections/venv/Lib/python3.8/site-packages/soupsieve-2.0.1.dist-info/METADATA delete mode 100644 Jobs_Collections/venv/Lib/python3.8/site-packages/soupsieve-2.0.1.dist-info/RECORD delete mode 100644 Jobs_Collections/venv/Lib/python3.8/site-packages/soupsieve-2.0.1.dist-info/WHEEL delete mode 100644 Jobs_Collections/venv/Lib/python3.8/site-packages/soupsieve-2.0.1.dist-info/top_level.txt delete mode 100644 Jobs_Collections/venv/Lib/python3.8/site-packages/soupsieve/__init__.py delete mode 100644 Jobs_Collections/venv/Lib/python3.8/site-packages/soupsieve/__meta__.py delete mode 100644 Jobs_Collections/venv/Lib/python3.8/site-packages/soupsieve/__pycache__/__init__.cpython-38.pyc delete mode 100644 Jobs_Collections/venv/Lib/python3.8/site-packages/soupsieve/__pycache__/__meta__.cpython-38.pyc delete mode 100644 Jobs_Collections/venv/Lib/python3.8/site-packages/soupsieve/__pycache__/css_match.cpython-38.pyc delete mode 100644 Jobs_Collections/venv/Lib/python3.8/site-packages/soupsieve/__pycache__/css_parser.cpython-38.pyc delete mode 100644 Jobs_Collections/venv/Lib/python3.8/site-packages/soupsieve/__pycache__/css_types.cpython-38.pyc delete mode 100644 Jobs_Collections/venv/Lib/python3.8/site-packages/soupsieve/__pycache__/util.cpython-38.pyc delete mode 100644 Jobs_Collections/venv/Lib/python3.8/site-packages/soupsieve/css_match.py delete mode 100644 Jobs_Collections/venv/Lib/python3.8/site-packages/soupsieve/css_parser.py delete mode 100644 Jobs_Collections/venv/Lib/python3.8/site-packages/soupsieve/css_types.py delete mode 100644 Jobs_Collections/venv/Lib/python3.8/site-packages/soupsieve/util.py delete mode 100644 Jobs_Collections/venv/Lib/python3.8/site-packages/toml-0.10.1.dist-info/DESCRIPTION.rst delete mode 100644 Jobs_Collections/venv/Lib/python3.8/site-packages/toml-0.10.1.dist-info/INSTALLER delete mode 100644 Jobs_Collections/venv/Lib/python3.8/site-packages/toml-0.10.1.dist-info/LICENSE.txt delete mode 100644 Jobs_Collections/venv/Lib/python3.8/site-packages/toml-0.10.1.dist-info/METADATA delete mode 100644 Jobs_Collections/venv/Lib/python3.8/site-packages/toml-0.10.1.dist-info/RECORD delete mode 100644 Jobs_Collections/venv/Lib/python3.8/site-packages/toml-0.10.1.dist-info/WHEEL delete mode 100644 Jobs_Collections/venv/Lib/python3.8/site-packages/toml-0.10.1.dist-info/metadata.json delete mode 100644 Jobs_Collections/venv/Lib/python3.8/site-packages/toml-0.10.1.dist-info/top_level.txt delete mode 100644 Jobs_Collections/venv/Lib/python3.8/site-packages/toml/__init__.py delete mode 100644 Jobs_Collections/venv/Lib/python3.8/site-packages/toml/__pycache__/__init__.cpython-38.pyc delete mode 100644 Jobs_Collections/venv/Lib/python3.8/site-packages/toml/__pycache__/common.cpython-38.pyc delete mode 100644 Jobs_Collections/venv/Lib/python3.8/site-packages/toml/__pycache__/decoder.cpython-38.pyc delete mode 100644 Jobs_Collections/venv/Lib/python3.8/site-packages/toml/__pycache__/encoder.cpython-38.pyc delete mode 100644 Jobs_Collections/venv/Lib/python3.8/site-packages/toml/__pycache__/ordered.cpython-38.pyc delete mode 100644 Jobs_Collections/venv/Lib/python3.8/site-packages/toml/__pycache__/tz.cpython-38.pyc delete mode 100644 Jobs_Collections/venv/Lib/python3.8/site-packages/toml/common.py delete mode 100644 Jobs_Collections/venv/Lib/python3.8/site-packages/toml/decoder.py delete mode 100644 Jobs_Collections/venv/Lib/python3.8/site-packages/toml/encoder.py delete mode 100644 Jobs_Collections/venv/Lib/python3.8/site-packages/toml/ordered.py delete mode 100644 Jobs_Collections/venv/Lib/python3.8/site-packages/toml/tz.py delete mode 100644 Jobs_Collections/venv/Lib/python3.8/site-packages/urllib3-1.25.9.dist-info/INSTALLER delete mode 100644 Jobs_Collections/venv/Lib/python3.8/site-packages/urllib3-1.25.9.dist-info/LICENSE.txt delete mode 100644 Jobs_Collections/venv/Lib/python3.8/site-packages/urllib3-1.25.9.dist-info/METADATA delete mode 100644 Jobs_Collections/venv/Lib/python3.8/site-packages/urllib3-1.25.9.dist-info/RECORD delete mode 100644 Jobs_Collections/venv/Lib/python3.8/site-packages/urllib3-1.25.9.dist-info/WHEEL delete mode 100644 Jobs_Collections/venv/Lib/python3.8/site-packages/urllib3-1.25.9.dist-info/top_level.txt delete mode 100644 Jobs_Collections/venv/Lib/python3.8/site-packages/urllib3/__init__.py delete mode 100644 Jobs_Collections/venv/Lib/python3.8/site-packages/urllib3/__pycache__/__init__.cpython-38.pyc delete mode 100644 Jobs_Collections/venv/Lib/python3.8/site-packages/urllib3/__pycache__/_collections.cpython-38.pyc delete mode 100644 Jobs_Collections/venv/Lib/python3.8/site-packages/urllib3/__pycache__/connection.cpython-38.pyc delete mode 100644 Jobs_Collections/venv/Lib/python3.8/site-packages/urllib3/__pycache__/connectionpool.cpython-38.pyc delete mode 100644 Jobs_Collections/venv/Lib/python3.8/site-packages/urllib3/__pycache__/exceptions.cpython-38.pyc delete mode 100644 Jobs_Collections/venv/Lib/python3.8/site-packages/urllib3/__pycache__/fields.cpython-38.pyc delete mode 100644 Jobs_Collections/venv/Lib/python3.8/site-packages/urllib3/__pycache__/filepost.cpython-38.pyc delete mode 100644 Jobs_Collections/venv/Lib/python3.8/site-packages/urllib3/__pycache__/poolmanager.cpython-38.pyc delete mode 100644 Jobs_Collections/venv/Lib/python3.8/site-packages/urllib3/__pycache__/request.cpython-38.pyc delete mode 100644 Jobs_Collections/venv/Lib/python3.8/site-packages/urllib3/__pycache__/response.cpython-38.pyc delete mode 100644 Jobs_Collections/venv/Lib/python3.8/site-packages/urllib3/_collections.py delete mode 100644 Jobs_Collections/venv/Lib/python3.8/site-packages/urllib3/connection.py delete mode 100644 Jobs_Collections/venv/Lib/python3.8/site-packages/urllib3/connectionpool.py delete mode 100644 Jobs_Collections/venv/Lib/python3.8/site-packages/urllib3/contrib/__init__.py delete mode 100644 Jobs_Collections/venv/Lib/python3.8/site-packages/urllib3/contrib/__pycache__/__init__.cpython-38.pyc delete mode 100644 Jobs_Collections/venv/Lib/python3.8/site-packages/urllib3/contrib/__pycache__/_appengine_environ.cpython-38.pyc delete mode 100644 Jobs_Collections/venv/Lib/python3.8/site-packages/urllib3/contrib/__pycache__/appengine.cpython-38.pyc delete mode 100644 Jobs_Collections/venv/Lib/python3.8/site-packages/urllib3/contrib/__pycache__/ntlmpool.cpython-38.pyc delete mode 100644 Jobs_Collections/venv/Lib/python3.8/site-packages/urllib3/contrib/__pycache__/pyopenssl.cpython-38.pyc delete mode 100644 Jobs_Collections/venv/Lib/python3.8/site-packages/urllib3/contrib/__pycache__/securetransport.cpython-38.pyc delete mode 100644 Jobs_Collections/venv/Lib/python3.8/site-packages/urllib3/contrib/__pycache__/socks.cpython-38.pyc delete mode 100644 Jobs_Collections/venv/Lib/python3.8/site-packages/urllib3/contrib/_appengine_environ.py delete mode 100644 Jobs_Collections/venv/Lib/python3.8/site-packages/urllib3/contrib/_securetransport/__init__.py delete mode 100644 Jobs_Collections/venv/Lib/python3.8/site-packages/urllib3/contrib/_securetransport/__pycache__/__init__.cpython-38.pyc delete mode 100644 Jobs_Collections/venv/Lib/python3.8/site-packages/urllib3/contrib/_securetransport/__pycache__/bindings.cpython-38.pyc delete mode 100644 Jobs_Collections/venv/Lib/python3.8/site-packages/urllib3/contrib/_securetransport/__pycache__/low_level.cpython-38.pyc delete mode 100644 Jobs_Collections/venv/Lib/python3.8/site-packages/urllib3/contrib/_securetransport/bindings.py delete mode 100644 Jobs_Collections/venv/Lib/python3.8/site-packages/urllib3/contrib/_securetransport/low_level.py delete mode 100644 Jobs_Collections/venv/Lib/python3.8/site-packages/urllib3/contrib/appengine.py delete mode 100644 Jobs_Collections/venv/Lib/python3.8/site-packages/urllib3/contrib/ntlmpool.py delete mode 100644 Jobs_Collections/venv/Lib/python3.8/site-packages/urllib3/contrib/pyopenssl.py delete mode 100644 Jobs_Collections/venv/Lib/python3.8/site-packages/urllib3/contrib/securetransport.py delete mode 100644 Jobs_Collections/venv/Lib/python3.8/site-packages/urllib3/contrib/socks.py delete mode 100644 Jobs_Collections/venv/Lib/python3.8/site-packages/urllib3/exceptions.py delete mode 100644 Jobs_Collections/venv/Lib/python3.8/site-packages/urllib3/fields.py delete mode 100644 Jobs_Collections/venv/Lib/python3.8/site-packages/urllib3/filepost.py delete mode 100644 Jobs_Collections/venv/Lib/python3.8/site-packages/urllib3/packages/__init__.py delete mode 100644 Jobs_Collections/venv/Lib/python3.8/site-packages/urllib3/packages/__pycache__/__init__.cpython-38.pyc delete mode 100644 Jobs_Collections/venv/Lib/python3.8/site-packages/urllib3/packages/__pycache__/six.cpython-38.pyc delete mode 100644 Jobs_Collections/venv/Lib/python3.8/site-packages/urllib3/packages/backports/__init__.py delete mode 100644 Jobs_Collections/venv/Lib/python3.8/site-packages/urllib3/packages/backports/__pycache__/__init__.cpython-38.pyc delete mode 100644 Jobs_Collections/venv/Lib/python3.8/site-packages/urllib3/packages/backports/__pycache__/makefile.cpython-38.pyc delete mode 100644 Jobs_Collections/venv/Lib/python3.8/site-packages/urllib3/packages/backports/makefile.py delete mode 100644 Jobs_Collections/venv/Lib/python3.8/site-packages/urllib3/packages/six.py delete mode 100644 Jobs_Collections/venv/Lib/python3.8/site-packages/urllib3/packages/ssl_match_hostname/__init__.py delete mode 100644 Jobs_Collections/venv/Lib/python3.8/site-packages/urllib3/packages/ssl_match_hostname/__pycache__/__init__.cpython-38.pyc delete mode 100644 Jobs_Collections/venv/Lib/python3.8/site-packages/urllib3/packages/ssl_match_hostname/__pycache__/_implementation.cpython-38.pyc delete mode 100644 Jobs_Collections/venv/Lib/python3.8/site-packages/urllib3/packages/ssl_match_hostname/_implementation.py delete mode 100644 Jobs_Collections/venv/Lib/python3.8/site-packages/urllib3/poolmanager.py delete mode 100644 Jobs_Collections/venv/Lib/python3.8/site-packages/urllib3/request.py delete mode 100644 Jobs_Collections/venv/Lib/python3.8/site-packages/urllib3/response.py delete mode 100644 Jobs_Collections/venv/Lib/python3.8/site-packages/urllib3/util/__init__.py delete mode 100644 Jobs_Collections/venv/Lib/python3.8/site-packages/urllib3/util/__pycache__/__init__.cpython-38.pyc delete mode 100644 Jobs_Collections/venv/Lib/python3.8/site-packages/urllib3/util/__pycache__/connection.cpython-38.pyc delete mode 100644 Jobs_Collections/venv/Lib/python3.8/site-packages/urllib3/util/__pycache__/queue.cpython-38.pyc delete mode 100644 Jobs_Collections/venv/Lib/python3.8/site-packages/urllib3/util/__pycache__/request.cpython-38.pyc delete mode 100644 Jobs_Collections/venv/Lib/python3.8/site-packages/urllib3/util/__pycache__/response.cpython-38.pyc delete mode 100644 Jobs_Collections/venv/Lib/python3.8/site-packages/urllib3/util/__pycache__/retry.cpython-38.pyc delete mode 100644 Jobs_Collections/venv/Lib/python3.8/site-packages/urllib3/util/__pycache__/ssl_.cpython-38.pyc delete mode 100644 Jobs_Collections/venv/Lib/python3.8/site-packages/urllib3/util/__pycache__/timeout.cpython-38.pyc delete mode 100644 Jobs_Collections/venv/Lib/python3.8/site-packages/urllib3/util/__pycache__/url.cpython-38.pyc delete mode 100644 Jobs_Collections/venv/Lib/python3.8/site-packages/urllib3/util/__pycache__/wait.cpython-38.pyc delete mode 100644 Jobs_Collections/venv/Lib/python3.8/site-packages/urllib3/util/connection.py delete mode 100644 Jobs_Collections/venv/Lib/python3.8/site-packages/urllib3/util/queue.py delete mode 100644 Jobs_Collections/venv/Lib/python3.8/site-packages/urllib3/util/request.py delete mode 100644 Jobs_Collections/venv/Lib/python3.8/site-packages/urllib3/util/response.py delete mode 100644 Jobs_Collections/venv/Lib/python3.8/site-packages/urllib3/util/retry.py delete mode 100644 Jobs_Collections/venv/Lib/python3.8/site-packages/urllib3/util/ssl_.py delete mode 100644 Jobs_Collections/venv/Lib/python3.8/site-packages/urllib3/util/timeout.py delete mode 100644 Jobs_Collections/venv/Lib/python3.8/site-packages/urllib3/util/url.py delete mode 100644 Jobs_Collections/venv/Lib/python3.8/site-packages/urllib3/util/wait.py delete mode 100644 Jobs_Collections/venv/Lib/python3.8/site-packages/werkzeug/__init__.py delete mode 100644 Jobs_Collections/venv/Lib/python3.8/site-packages/werkzeug/__pycache__/__init__.cpython-38.pyc delete mode 100644 Jobs_Collections/venv/Lib/python3.8/site-packages/werkzeug/__pycache__/_compat.cpython-38.pyc delete mode 100644 Jobs_Collections/venv/Lib/python3.8/site-packages/werkzeug/__pycache__/_internal.cpython-38.pyc delete mode 100644 Jobs_Collections/venv/Lib/python3.8/site-packages/werkzeug/__pycache__/_reloader.cpython-38.pyc delete mode 100644 Jobs_Collections/venv/Lib/python3.8/site-packages/werkzeug/__pycache__/datastructures.cpython-38.pyc delete mode 100644 Jobs_Collections/venv/Lib/python3.8/site-packages/werkzeug/__pycache__/exceptions.cpython-38.pyc delete mode 100644 Jobs_Collections/venv/Lib/python3.8/site-packages/werkzeug/__pycache__/filesystem.cpython-38.pyc delete mode 100644 Jobs_Collections/venv/Lib/python3.8/site-packages/werkzeug/__pycache__/formparser.cpython-38.pyc delete mode 100644 Jobs_Collections/venv/Lib/python3.8/site-packages/werkzeug/__pycache__/http.cpython-38.pyc delete mode 100644 Jobs_Collections/venv/Lib/python3.8/site-packages/werkzeug/__pycache__/local.cpython-38.pyc delete mode 100644 Jobs_Collections/venv/Lib/python3.8/site-packages/werkzeug/__pycache__/posixemulation.cpython-38.pyc delete mode 100644 Jobs_Collections/venv/Lib/python3.8/site-packages/werkzeug/__pycache__/routing.cpython-38.pyc delete mode 100644 Jobs_Collections/venv/Lib/python3.8/site-packages/werkzeug/__pycache__/security.cpython-38.pyc delete mode 100644 Jobs_Collections/venv/Lib/python3.8/site-packages/werkzeug/__pycache__/serving.cpython-38.pyc delete mode 100644 Jobs_Collections/venv/Lib/python3.8/site-packages/werkzeug/__pycache__/test.cpython-38.pyc delete mode 100644 Jobs_Collections/venv/Lib/python3.8/site-packages/werkzeug/__pycache__/testapp.cpython-38.pyc delete mode 100644 Jobs_Collections/venv/Lib/python3.8/site-packages/werkzeug/__pycache__/urls.cpython-38.pyc delete mode 100644 Jobs_Collections/venv/Lib/python3.8/site-packages/werkzeug/__pycache__/useragents.cpython-38.pyc delete mode 100644 Jobs_Collections/venv/Lib/python3.8/site-packages/werkzeug/__pycache__/utils.cpython-38.pyc delete mode 100644 Jobs_Collections/venv/Lib/python3.8/site-packages/werkzeug/__pycache__/wsgi.cpython-38.pyc delete mode 100644 Jobs_Collections/venv/Lib/python3.8/site-packages/werkzeug/_compat.py delete mode 100644 Jobs_Collections/venv/Lib/python3.8/site-packages/werkzeug/_internal.py delete mode 100644 Jobs_Collections/venv/Lib/python3.8/site-packages/werkzeug/_reloader.py delete mode 100644 Jobs_Collections/venv/Lib/python3.8/site-packages/werkzeug/datastructures.py delete mode 100644 Jobs_Collections/venv/Lib/python3.8/site-packages/werkzeug/debug/__init__.py delete mode 100644 Jobs_Collections/venv/Lib/python3.8/site-packages/werkzeug/debug/__pycache__/__init__.cpython-38.pyc delete mode 100644 Jobs_Collections/venv/Lib/python3.8/site-packages/werkzeug/debug/__pycache__/console.cpython-38.pyc delete mode 100644 Jobs_Collections/venv/Lib/python3.8/site-packages/werkzeug/debug/__pycache__/repr.cpython-38.pyc delete mode 100644 Jobs_Collections/venv/Lib/python3.8/site-packages/werkzeug/debug/__pycache__/tbtools.cpython-38.pyc delete mode 100644 Jobs_Collections/venv/Lib/python3.8/site-packages/werkzeug/debug/console.py delete mode 100644 Jobs_Collections/venv/Lib/python3.8/site-packages/werkzeug/debug/repr.py delete mode 100644 Jobs_Collections/venv/Lib/python3.8/site-packages/werkzeug/debug/shared/FONT_LICENSE delete mode 100644 Jobs_Collections/venv/Lib/python3.8/site-packages/werkzeug/debug/shared/console.png delete mode 100644 Jobs_Collections/venv/Lib/python3.8/site-packages/werkzeug/debug/shared/debugger.js delete mode 100644 Jobs_Collections/venv/Lib/python3.8/site-packages/werkzeug/debug/shared/jquery.js delete mode 100644 Jobs_Collections/venv/Lib/python3.8/site-packages/werkzeug/debug/shared/less.png delete mode 100644 Jobs_Collections/venv/Lib/python3.8/site-packages/werkzeug/debug/shared/more.png delete mode 100644 Jobs_Collections/venv/Lib/python3.8/site-packages/werkzeug/debug/shared/source.png delete mode 100644 Jobs_Collections/venv/Lib/python3.8/site-packages/werkzeug/debug/shared/style.css delete mode 100644 Jobs_Collections/venv/Lib/python3.8/site-packages/werkzeug/debug/shared/ubuntu.ttf delete mode 100644 Jobs_Collections/venv/Lib/python3.8/site-packages/werkzeug/debug/tbtools.py delete mode 100644 Jobs_Collections/venv/Lib/python3.8/site-packages/werkzeug/exceptions.py delete mode 100644 Jobs_Collections/venv/Lib/python3.8/site-packages/werkzeug/filesystem.py delete mode 100644 Jobs_Collections/venv/Lib/python3.8/site-packages/werkzeug/formparser.py delete mode 100644 Jobs_Collections/venv/Lib/python3.8/site-packages/werkzeug/http.py delete mode 100644 Jobs_Collections/venv/Lib/python3.8/site-packages/werkzeug/local.py delete mode 100644 Jobs_Collections/venv/Lib/python3.8/site-packages/werkzeug/middleware/__init__.py delete mode 100644 Jobs_Collections/venv/Lib/python3.8/site-packages/werkzeug/middleware/__pycache__/__init__.cpython-38.pyc delete mode 100644 Jobs_Collections/venv/Lib/python3.8/site-packages/werkzeug/middleware/__pycache__/dispatcher.cpython-38.pyc delete mode 100644 Jobs_Collections/venv/Lib/python3.8/site-packages/werkzeug/middleware/__pycache__/http_proxy.cpython-38.pyc delete mode 100644 Jobs_Collections/venv/Lib/python3.8/site-packages/werkzeug/middleware/__pycache__/lint.cpython-38.pyc delete mode 100644 Jobs_Collections/venv/Lib/python3.8/site-packages/werkzeug/middleware/__pycache__/profiler.cpython-38.pyc delete mode 100644 Jobs_Collections/venv/Lib/python3.8/site-packages/werkzeug/middleware/__pycache__/proxy_fix.cpython-38.pyc delete mode 100644 Jobs_Collections/venv/Lib/python3.8/site-packages/werkzeug/middleware/__pycache__/shared_data.cpython-38.pyc delete mode 100644 Jobs_Collections/venv/Lib/python3.8/site-packages/werkzeug/middleware/dispatcher.py delete mode 100644 Jobs_Collections/venv/Lib/python3.8/site-packages/werkzeug/middleware/http_proxy.py delete mode 100644 Jobs_Collections/venv/Lib/python3.8/site-packages/werkzeug/middleware/lint.py delete mode 100644 Jobs_Collections/venv/Lib/python3.8/site-packages/werkzeug/middleware/profiler.py delete mode 100644 Jobs_Collections/venv/Lib/python3.8/site-packages/werkzeug/middleware/proxy_fix.py delete mode 100644 Jobs_Collections/venv/Lib/python3.8/site-packages/werkzeug/middleware/shared_data.py delete mode 100644 Jobs_Collections/venv/Lib/python3.8/site-packages/werkzeug/posixemulation.py delete mode 100644 Jobs_Collections/venv/Lib/python3.8/site-packages/werkzeug/routing.py delete mode 100644 Jobs_Collections/venv/Lib/python3.8/site-packages/werkzeug/security.py delete mode 100644 Jobs_Collections/venv/Lib/python3.8/site-packages/werkzeug/serving.py delete mode 100644 Jobs_Collections/venv/Lib/python3.8/site-packages/werkzeug/test.py delete mode 100644 Jobs_Collections/venv/Lib/python3.8/site-packages/werkzeug/testapp.py delete mode 100644 Jobs_Collections/venv/Lib/python3.8/site-packages/werkzeug/urls.py delete mode 100644 Jobs_Collections/venv/Lib/python3.8/site-packages/werkzeug/useragents.py delete mode 100644 Jobs_Collections/venv/Lib/python3.8/site-packages/werkzeug/utils.py delete mode 100644 Jobs_Collections/venv/Lib/python3.8/site-packages/werkzeug/wrappers/__init__.py delete mode 100644 Jobs_Collections/venv/Lib/python3.8/site-packages/werkzeug/wrappers/__pycache__/__init__.cpython-38.pyc delete mode 100644 Jobs_Collections/venv/Lib/python3.8/site-packages/werkzeug/wrappers/__pycache__/accept.cpython-38.pyc delete mode 100644 Jobs_Collections/venv/Lib/python3.8/site-packages/werkzeug/wrappers/__pycache__/auth.cpython-38.pyc delete mode 100644 Jobs_Collections/venv/Lib/python3.8/site-packages/werkzeug/wrappers/__pycache__/base_request.cpython-38.pyc delete mode 100644 Jobs_Collections/venv/Lib/python3.8/site-packages/werkzeug/wrappers/__pycache__/base_response.cpython-38.pyc delete mode 100644 Jobs_Collections/venv/Lib/python3.8/site-packages/werkzeug/wrappers/__pycache__/common_descriptors.cpython-38.pyc delete mode 100644 Jobs_Collections/venv/Lib/python3.8/site-packages/werkzeug/wrappers/__pycache__/cors.cpython-38.pyc delete mode 100644 Jobs_Collections/venv/Lib/python3.8/site-packages/werkzeug/wrappers/__pycache__/etag.cpython-38.pyc delete mode 100644 Jobs_Collections/venv/Lib/python3.8/site-packages/werkzeug/wrappers/__pycache__/json.cpython-38.pyc delete mode 100644 Jobs_Collections/venv/Lib/python3.8/site-packages/werkzeug/wrappers/__pycache__/request.cpython-38.pyc delete mode 100644 Jobs_Collections/venv/Lib/python3.8/site-packages/werkzeug/wrappers/__pycache__/response.cpython-38.pyc delete mode 100644 Jobs_Collections/venv/Lib/python3.8/site-packages/werkzeug/wrappers/__pycache__/user_agent.cpython-38.pyc delete mode 100644 Jobs_Collections/venv/Lib/python3.8/site-packages/werkzeug/wrappers/accept.py delete mode 100644 Jobs_Collections/venv/Lib/python3.8/site-packages/werkzeug/wrappers/auth.py delete mode 100644 Jobs_Collections/venv/Lib/python3.8/site-packages/werkzeug/wrappers/base_request.py delete mode 100644 Jobs_Collections/venv/Lib/python3.8/site-packages/werkzeug/wrappers/base_response.py delete mode 100644 Jobs_Collections/venv/Lib/python3.8/site-packages/werkzeug/wrappers/common_descriptors.py delete mode 100644 Jobs_Collections/venv/Lib/python3.8/site-packages/werkzeug/wrappers/cors.py delete mode 100644 Jobs_Collections/venv/Lib/python3.8/site-packages/werkzeug/wrappers/etag.py delete mode 100644 Jobs_Collections/venv/Lib/python3.8/site-packages/werkzeug/wrappers/json.py delete mode 100644 Jobs_Collections/venv/Lib/python3.8/site-packages/werkzeug/wrappers/request.py delete mode 100644 Jobs_Collections/venv/Lib/python3.8/site-packages/werkzeug/wrappers/response.py delete mode 100644 Jobs_Collections/venv/Lib/python3.8/site-packages/werkzeug/wrappers/user_agent.py delete mode 100644 Jobs_Collections/venv/Lib/python3.8/site-packages/werkzeug/wsgi.py delete mode 100644 Jobs_Collections/venv/Lib/python3.8/site-packages/wrapt-1.12.1-py3.8.egg-info/PKG-INFO delete mode 100644 Jobs_Collections/venv/Lib/python3.8/site-packages/wrapt-1.12.1-py3.8.egg-info/SOURCES.txt delete mode 100644 Jobs_Collections/venv/Lib/python3.8/site-packages/wrapt-1.12.1-py3.8.egg-info/dependency_links.txt delete mode 100644 Jobs_Collections/venv/Lib/python3.8/site-packages/wrapt-1.12.1-py3.8.egg-info/installed-files.txt delete mode 100644 Jobs_Collections/venv/Lib/python3.8/site-packages/wrapt-1.12.1-py3.8.egg-info/top_level.txt delete mode 100644 Jobs_Collections/venv/Lib/python3.8/site-packages/wrapt/__init__.py delete mode 100644 Jobs_Collections/venv/Lib/python3.8/site-packages/wrapt/__pycache__/__init__.cpython-38.pyc delete mode 100644 Jobs_Collections/venv/Lib/python3.8/site-packages/wrapt/__pycache__/decorators.cpython-38.pyc delete mode 100644 Jobs_Collections/venv/Lib/python3.8/site-packages/wrapt/__pycache__/importer.cpython-38.pyc delete mode 100644 Jobs_Collections/venv/Lib/python3.8/site-packages/wrapt/__pycache__/wrappers.cpython-38.pyc delete mode 100644 Jobs_Collections/venv/Lib/python3.8/site-packages/wrapt/_wrappers.cpython-38-darwin.so delete mode 100644 Jobs_Collections/venv/Lib/python3.8/site-packages/wrapt/decorators.py delete mode 100644 Jobs_Collections/venv/Lib/python3.8/site-packages/wrapt/importer.py delete mode 100644 Jobs_Collections/venv/Lib/python3.8/site-packages/wrapt/wrappers.py delete mode 100644 Jobs_Collections/venv/Lib/site-packages/Flask-1.1.2.dist-info/INSTALLER delete mode 100644 Jobs_Collections/venv/Lib/site-packages/Flask-1.1.2.dist-info/LICENSE.rst delete mode 100644 Jobs_Collections/venv/Lib/site-packages/Flask-1.1.2.dist-info/METADATA delete mode 100644 Jobs_Collections/venv/Lib/site-packages/Flask-1.1.2.dist-info/RECORD delete mode 100644 Jobs_Collections/venv/Lib/site-packages/Flask-1.1.2.dist-info/WHEEL delete mode 100644 Jobs_Collections/venv/Lib/site-packages/Flask-1.1.2.dist-info/entry_points.txt delete mode 100644 Jobs_Collections/venv/Lib/site-packages/Flask-1.1.2.dist-info/top_level.txt delete mode 100644 Jobs_Collections/venv/Lib/site-packages/Jinja2-2.11.2.dist-info/INSTALLER delete mode 100644 Jobs_Collections/venv/Lib/site-packages/Jinja2-2.11.2.dist-info/LICENSE.rst delete mode 100644 Jobs_Collections/venv/Lib/site-packages/Jinja2-2.11.2.dist-info/METADATA delete mode 100644 Jobs_Collections/venv/Lib/site-packages/Jinja2-2.11.2.dist-info/RECORD delete mode 100644 Jobs_Collections/venv/Lib/site-packages/Jinja2-2.11.2.dist-info/WHEEL delete mode 100644 Jobs_Collections/venv/Lib/site-packages/Jinja2-2.11.2.dist-info/entry_points.txt delete mode 100644 Jobs_Collections/venv/Lib/site-packages/Jinja2-2.11.2.dist-info/top_level.txt delete mode 100644 Jobs_Collections/venv/Lib/site-packages/MarkupSafe-1.1.1.dist-info/INSTALLER delete mode 100644 Jobs_Collections/venv/Lib/site-packages/MarkupSafe-1.1.1.dist-info/LICENSE.rst delete mode 100644 Jobs_Collections/venv/Lib/site-packages/MarkupSafe-1.1.1.dist-info/METADATA delete mode 100644 Jobs_Collections/venv/Lib/site-packages/MarkupSafe-1.1.1.dist-info/RECORD delete mode 100644 Jobs_Collections/venv/Lib/site-packages/MarkupSafe-1.1.1.dist-info/WHEEL delete mode 100644 Jobs_Collections/venv/Lib/site-packages/MarkupSafe-1.1.1.dist-info/top_level.txt delete mode 100644 Jobs_Collections/venv/Lib/site-packages/Werkzeug-1.0.1.dist-info/INSTALLER delete mode 100644 Jobs_Collections/venv/Lib/site-packages/Werkzeug-1.0.1.dist-info/LICENSE.rst delete mode 100644 Jobs_Collections/venv/Lib/site-packages/Werkzeug-1.0.1.dist-info/METADATA delete mode 100644 Jobs_Collections/venv/Lib/site-packages/Werkzeug-1.0.1.dist-info/RECORD delete mode 100644 Jobs_Collections/venv/Lib/site-packages/Werkzeug-1.0.1.dist-info/WHEEL delete mode 100644 Jobs_Collections/venv/Lib/site-packages/Werkzeug-1.0.1.dist-info/top_level.txt delete mode 100644 Jobs_Collections/venv/Lib/site-packages/__pycache__/easy_install.cpython-38.pyc delete mode 100644 Jobs_Collections/venv/Lib/site-packages/__pycache__/mccabe.cpython-38.pyc delete mode 100644 Jobs_Collections/venv/Lib/site-packages/__pycache__/six.cpython-38.pyc delete mode 100644 Jobs_Collections/venv/Lib/site-packages/astroid-2.4.2.dist-info/COPYING delete mode 100644 Jobs_Collections/venv/Lib/site-packages/astroid-2.4.2.dist-info/COPYING.LESSER delete mode 100644 Jobs_Collections/venv/Lib/site-packages/astroid-2.4.2.dist-info/INSTALLER delete mode 100644 Jobs_Collections/venv/Lib/site-packages/astroid-2.4.2.dist-info/METADATA delete mode 100644 Jobs_Collections/venv/Lib/site-packages/astroid-2.4.2.dist-info/RECORD delete mode 100644 Jobs_Collections/venv/Lib/site-packages/astroid-2.4.2.dist-info/WHEEL delete mode 100644 Jobs_Collections/venv/Lib/site-packages/astroid-2.4.2.dist-info/top_level.txt delete mode 100644 Jobs_Collections/venv/Lib/site-packages/astroid/__init__.py delete mode 100644 Jobs_Collections/venv/Lib/site-packages/astroid/__pkginfo__.py delete mode 100644 Jobs_Collections/venv/Lib/site-packages/astroid/__pycache__/__init__.cpython-38.pyc delete mode 100644 Jobs_Collections/venv/Lib/site-packages/astroid/__pycache__/__pkginfo__.cpython-38.pyc delete mode 100644 Jobs_Collections/venv/Lib/site-packages/astroid/__pycache__/_ast.cpython-38.pyc delete mode 100644 Jobs_Collections/venv/Lib/site-packages/astroid/__pycache__/arguments.cpython-38.pyc delete mode 100644 Jobs_Collections/venv/Lib/site-packages/astroid/__pycache__/as_string.cpython-38.pyc delete mode 100644 Jobs_Collections/venv/Lib/site-packages/astroid/__pycache__/bases.cpython-38.pyc delete mode 100644 Jobs_Collections/venv/Lib/site-packages/astroid/__pycache__/builder.cpython-38.pyc delete mode 100644 Jobs_Collections/venv/Lib/site-packages/astroid/__pycache__/context.cpython-38.pyc delete mode 100644 Jobs_Collections/venv/Lib/site-packages/astroid/__pycache__/decorators.cpython-38.pyc delete mode 100644 Jobs_Collections/venv/Lib/site-packages/astroid/__pycache__/exceptions.cpython-38.pyc delete mode 100644 Jobs_Collections/venv/Lib/site-packages/astroid/__pycache__/helpers.cpython-38.pyc delete mode 100644 Jobs_Collections/venv/Lib/site-packages/astroid/__pycache__/inference.cpython-38.pyc delete mode 100644 Jobs_Collections/venv/Lib/site-packages/astroid/__pycache__/manager.cpython-38.pyc delete mode 100644 Jobs_Collections/venv/Lib/site-packages/astroid/__pycache__/mixins.cpython-38.pyc delete mode 100644 Jobs_Collections/venv/Lib/site-packages/astroid/__pycache__/modutils.cpython-38.pyc delete mode 100644 Jobs_Collections/venv/Lib/site-packages/astroid/__pycache__/node_classes.cpython-38.pyc delete mode 100644 Jobs_Collections/venv/Lib/site-packages/astroid/__pycache__/nodes.cpython-38.pyc delete mode 100644 Jobs_Collections/venv/Lib/site-packages/astroid/__pycache__/objects.cpython-38.pyc delete mode 100644 Jobs_Collections/venv/Lib/site-packages/astroid/__pycache__/protocols.cpython-38.pyc delete mode 100644 Jobs_Collections/venv/Lib/site-packages/astroid/__pycache__/raw_building.cpython-38.pyc delete mode 100644 Jobs_Collections/venv/Lib/site-packages/astroid/__pycache__/rebuilder.cpython-38.pyc delete mode 100644 Jobs_Collections/venv/Lib/site-packages/astroid/__pycache__/scoped_nodes.cpython-38.pyc delete mode 100644 Jobs_Collections/venv/Lib/site-packages/astroid/__pycache__/test_utils.cpython-38.pyc delete mode 100644 Jobs_Collections/venv/Lib/site-packages/astroid/__pycache__/transforms.cpython-38.pyc delete mode 100644 Jobs_Collections/venv/Lib/site-packages/astroid/__pycache__/util.cpython-38.pyc delete mode 100644 Jobs_Collections/venv/Lib/site-packages/astroid/_ast.py delete mode 100644 Jobs_Collections/venv/Lib/site-packages/astroid/arguments.py delete mode 100644 Jobs_Collections/venv/Lib/site-packages/astroid/as_string.py delete mode 100644 Jobs_Collections/venv/Lib/site-packages/astroid/bases.py delete mode 100644 Jobs_Collections/venv/Lib/site-packages/astroid/brain/__pycache__/brain_argparse.cpython-38.pyc delete mode 100644 Jobs_Collections/venv/Lib/site-packages/astroid/brain/__pycache__/brain_attrs.cpython-38.pyc delete mode 100644 Jobs_Collections/venv/Lib/site-packages/astroid/brain/__pycache__/brain_boto3.cpython-38.pyc delete mode 100644 Jobs_Collections/venv/Lib/site-packages/astroid/brain/__pycache__/brain_builtin_inference.cpython-38.pyc delete mode 100644 Jobs_Collections/venv/Lib/site-packages/astroid/brain/__pycache__/brain_collections.cpython-38.pyc delete mode 100644 Jobs_Collections/venv/Lib/site-packages/astroid/brain/__pycache__/brain_crypt.cpython-38.pyc delete mode 100644 Jobs_Collections/venv/Lib/site-packages/astroid/brain/__pycache__/brain_curses.cpython-38.pyc delete mode 100644 Jobs_Collections/venv/Lib/site-packages/astroid/brain/__pycache__/brain_dataclasses.cpython-38.pyc delete mode 100644 Jobs_Collections/venv/Lib/site-packages/astroid/brain/__pycache__/brain_dateutil.cpython-38.pyc delete mode 100644 Jobs_Collections/venv/Lib/site-packages/astroid/brain/__pycache__/brain_fstrings.cpython-38.pyc delete mode 100644 Jobs_Collections/venv/Lib/site-packages/astroid/brain/__pycache__/brain_functools.cpython-38.pyc delete mode 100644 Jobs_Collections/venv/Lib/site-packages/astroid/brain/__pycache__/brain_gi.cpython-38.pyc delete mode 100644 Jobs_Collections/venv/Lib/site-packages/astroid/brain/__pycache__/brain_hashlib.cpython-38.pyc delete mode 100644 Jobs_Collections/venv/Lib/site-packages/astroid/brain/__pycache__/brain_http.cpython-38.pyc delete mode 100644 Jobs_Collections/venv/Lib/site-packages/astroid/brain/__pycache__/brain_io.cpython-38.pyc delete mode 100644 Jobs_Collections/venv/Lib/site-packages/astroid/brain/__pycache__/brain_mechanize.cpython-38.pyc delete mode 100644 Jobs_Collections/venv/Lib/site-packages/astroid/brain/__pycache__/brain_multiprocessing.cpython-38.pyc delete mode 100644 Jobs_Collections/venv/Lib/site-packages/astroid/brain/__pycache__/brain_namedtuple_enum.cpython-38.pyc delete mode 100644 Jobs_Collections/venv/Lib/site-packages/astroid/brain/__pycache__/brain_nose.cpython-38.pyc delete mode 100644 Jobs_Collections/venv/Lib/site-packages/astroid/brain/__pycache__/brain_numpy_core_fromnumeric.cpython-38.pyc delete mode 100644 Jobs_Collections/venv/Lib/site-packages/astroid/brain/__pycache__/brain_numpy_core_function_base.cpython-38.pyc delete mode 100644 Jobs_Collections/venv/Lib/site-packages/astroid/brain/__pycache__/brain_numpy_core_multiarray.cpython-38.pyc delete mode 100644 Jobs_Collections/venv/Lib/site-packages/astroid/brain/__pycache__/brain_numpy_core_numeric.cpython-38.pyc delete mode 100644 Jobs_Collections/venv/Lib/site-packages/astroid/brain/__pycache__/brain_numpy_core_numerictypes.cpython-38.pyc delete mode 100644 Jobs_Collections/venv/Lib/site-packages/astroid/brain/__pycache__/brain_numpy_core_umath.cpython-38.pyc delete mode 100644 Jobs_Collections/venv/Lib/site-packages/astroid/brain/__pycache__/brain_numpy_ndarray.cpython-38.pyc delete mode 100644 Jobs_Collections/venv/Lib/site-packages/astroid/brain/__pycache__/brain_numpy_random_mtrand.cpython-38.pyc delete mode 100644 Jobs_Collections/venv/Lib/site-packages/astroid/brain/__pycache__/brain_numpy_utils.cpython-38.pyc delete mode 100644 Jobs_Collections/venv/Lib/site-packages/astroid/brain/__pycache__/brain_pkg_resources.cpython-38.pyc delete mode 100644 Jobs_Collections/venv/Lib/site-packages/astroid/brain/__pycache__/brain_pytest.cpython-38.pyc delete mode 100644 Jobs_Collections/venv/Lib/site-packages/astroid/brain/__pycache__/brain_qt.cpython-38.pyc delete mode 100644 Jobs_Collections/venv/Lib/site-packages/astroid/brain/__pycache__/brain_random.cpython-38.pyc delete mode 100644 Jobs_Collections/venv/Lib/site-packages/astroid/brain/__pycache__/brain_re.cpython-38.pyc delete mode 100644 Jobs_Collections/venv/Lib/site-packages/astroid/brain/__pycache__/brain_responses.cpython-38.pyc delete mode 100644 Jobs_Collections/venv/Lib/site-packages/astroid/brain/__pycache__/brain_scipy_signal.cpython-38.pyc delete mode 100644 Jobs_Collections/venv/Lib/site-packages/astroid/brain/__pycache__/brain_six.cpython-38.pyc delete mode 100644 Jobs_Collections/venv/Lib/site-packages/astroid/brain/__pycache__/brain_ssl.cpython-38.pyc delete mode 100644 Jobs_Collections/venv/Lib/site-packages/astroid/brain/__pycache__/brain_subprocess.cpython-38.pyc delete mode 100644 Jobs_Collections/venv/Lib/site-packages/astroid/brain/__pycache__/brain_threading.cpython-38.pyc delete mode 100644 Jobs_Collections/venv/Lib/site-packages/astroid/brain/__pycache__/brain_typing.cpython-38.pyc delete mode 100644 Jobs_Collections/venv/Lib/site-packages/astroid/brain/__pycache__/brain_uuid.cpython-38.pyc delete mode 100644 Jobs_Collections/venv/Lib/site-packages/astroid/brain/brain_argparse.py delete mode 100644 Jobs_Collections/venv/Lib/site-packages/astroid/brain/brain_attrs.py delete mode 100644 Jobs_Collections/venv/Lib/site-packages/astroid/brain/brain_boto3.py delete mode 100644 Jobs_Collections/venv/Lib/site-packages/astroid/brain/brain_builtin_inference.py delete mode 100644 Jobs_Collections/venv/Lib/site-packages/astroid/brain/brain_collections.py delete mode 100644 Jobs_Collections/venv/Lib/site-packages/astroid/brain/brain_crypt.py delete mode 100644 Jobs_Collections/venv/Lib/site-packages/astroid/brain/brain_curses.py delete mode 100644 Jobs_Collections/venv/Lib/site-packages/astroid/brain/brain_dataclasses.py delete mode 100644 Jobs_Collections/venv/Lib/site-packages/astroid/brain/brain_dateutil.py delete mode 100644 Jobs_Collections/venv/Lib/site-packages/astroid/brain/brain_fstrings.py delete mode 100644 Jobs_Collections/venv/Lib/site-packages/astroid/brain/brain_functools.py delete mode 100644 Jobs_Collections/venv/Lib/site-packages/astroid/brain/brain_gi.py delete mode 100644 Jobs_Collections/venv/Lib/site-packages/astroid/brain/brain_hashlib.py delete mode 100644 Jobs_Collections/venv/Lib/site-packages/astroid/brain/brain_http.py delete mode 100644 Jobs_Collections/venv/Lib/site-packages/astroid/brain/brain_io.py delete mode 100644 Jobs_Collections/venv/Lib/site-packages/astroid/brain/brain_mechanize.py delete mode 100644 Jobs_Collections/venv/Lib/site-packages/astroid/brain/brain_multiprocessing.py delete mode 100644 Jobs_Collections/venv/Lib/site-packages/astroid/brain/brain_namedtuple_enum.py delete mode 100644 Jobs_Collections/venv/Lib/site-packages/astroid/brain/brain_nose.py delete mode 100644 Jobs_Collections/venv/Lib/site-packages/astroid/brain/brain_numpy_core_fromnumeric.py delete mode 100644 Jobs_Collections/venv/Lib/site-packages/astroid/brain/brain_numpy_core_function_base.py delete mode 100644 Jobs_Collections/venv/Lib/site-packages/astroid/brain/brain_numpy_core_multiarray.py delete mode 100644 Jobs_Collections/venv/Lib/site-packages/astroid/brain/brain_numpy_core_numeric.py delete mode 100644 Jobs_Collections/venv/Lib/site-packages/astroid/brain/brain_numpy_core_numerictypes.py delete mode 100644 Jobs_Collections/venv/Lib/site-packages/astroid/brain/brain_numpy_core_umath.py delete mode 100644 Jobs_Collections/venv/Lib/site-packages/astroid/brain/brain_numpy_ndarray.py delete mode 100644 Jobs_Collections/venv/Lib/site-packages/astroid/brain/brain_numpy_random_mtrand.py delete mode 100644 Jobs_Collections/venv/Lib/site-packages/astroid/brain/brain_numpy_utils.py delete mode 100644 Jobs_Collections/venv/Lib/site-packages/astroid/brain/brain_pkg_resources.py delete mode 100644 Jobs_Collections/venv/Lib/site-packages/astroid/brain/brain_pytest.py delete mode 100644 Jobs_Collections/venv/Lib/site-packages/astroid/brain/brain_qt.py delete mode 100644 Jobs_Collections/venv/Lib/site-packages/astroid/brain/brain_random.py delete mode 100644 Jobs_Collections/venv/Lib/site-packages/astroid/brain/brain_re.py delete mode 100644 Jobs_Collections/venv/Lib/site-packages/astroid/brain/brain_responses.py delete mode 100644 Jobs_Collections/venv/Lib/site-packages/astroid/brain/brain_scipy_signal.py delete mode 100644 Jobs_Collections/venv/Lib/site-packages/astroid/brain/brain_six.py delete mode 100644 Jobs_Collections/venv/Lib/site-packages/astroid/brain/brain_ssl.py delete mode 100644 Jobs_Collections/venv/Lib/site-packages/astroid/brain/brain_subprocess.py delete mode 100644 Jobs_Collections/venv/Lib/site-packages/astroid/brain/brain_threading.py delete mode 100644 Jobs_Collections/venv/Lib/site-packages/astroid/brain/brain_typing.py delete mode 100644 Jobs_Collections/venv/Lib/site-packages/astroid/brain/brain_uuid.py delete mode 100644 Jobs_Collections/venv/Lib/site-packages/astroid/builder.py delete mode 100644 Jobs_Collections/venv/Lib/site-packages/astroid/context.py delete mode 100644 Jobs_Collections/venv/Lib/site-packages/astroid/decorators.py delete mode 100644 Jobs_Collections/venv/Lib/site-packages/astroid/exceptions.py delete mode 100644 Jobs_Collections/venv/Lib/site-packages/astroid/helpers.py delete mode 100644 Jobs_Collections/venv/Lib/site-packages/astroid/inference.py delete mode 100644 Jobs_Collections/venv/Lib/site-packages/astroid/interpreter/__init__.py delete mode 100644 Jobs_Collections/venv/Lib/site-packages/astroid/interpreter/__pycache__/__init__.cpython-38.pyc delete mode 100644 Jobs_Collections/venv/Lib/site-packages/astroid/interpreter/__pycache__/dunder_lookup.cpython-38.pyc delete mode 100644 Jobs_Collections/venv/Lib/site-packages/astroid/interpreter/__pycache__/objectmodel.cpython-38.pyc delete mode 100644 Jobs_Collections/venv/Lib/site-packages/astroid/interpreter/_import/__init__.py delete mode 100644 Jobs_Collections/venv/Lib/site-packages/astroid/interpreter/_import/__pycache__/__init__.cpython-38.pyc delete mode 100644 Jobs_Collections/venv/Lib/site-packages/astroid/interpreter/_import/__pycache__/spec.cpython-38.pyc delete mode 100644 Jobs_Collections/venv/Lib/site-packages/astroid/interpreter/_import/__pycache__/util.cpython-38.pyc delete mode 100644 Jobs_Collections/venv/Lib/site-packages/astroid/interpreter/_import/spec.py delete mode 100644 Jobs_Collections/venv/Lib/site-packages/astroid/interpreter/_import/util.py delete mode 100644 Jobs_Collections/venv/Lib/site-packages/astroid/interpreter/dunder_lookup.py delete mode 100644 Jobs_Collections/venv/Lib/site-packages/astroid/interpreter/objectmodel.py delete mode 100644 Jobs_Collections/venv/Lib/site-packages/astroid/manager.py delete mode 100644 Jobs_Collections/venv/Lib/site-packages/astroid/mixins.py delete mode 100644 Jobs_Collections/venv/Lib/site-packages/astroid/modutils.py delete mode 100644 Jobs_Collections/venv/Lib/site-packages/astroid/node_classes.py delete mode 100644 Jobs_Collections/venv/Lib/site-packages/astroid/nodes.py delete mode 100644 Jobs_Collections/venv/Lib/site-packages/astroid/objects.py delete mode 100644 Jobs_Collections/venv/Lib/site-packages/astroid/protocols.py delete mode 100644 Jobs_Collections/venv/Lib/site-packages/astroid/raw_building.py delete mode 100644 Jobs_Collections/venv/Lib/site-packages/astroid/rebuilder.py delete mode 100644 Jobs_Collections/venv/Lib/site-packages/astroid/scoped_nodes.py delete mode 100644 Jobs_Collections/venv/Lib/site-packages/astroid/test_utils.py delete mode 100644 Jobs_Collections/venv/Lib/site-packages/astroid/transforms.py delete mode 100644 Jobs_Collections/venv/Lib/site-packages/astroid/util.py delete mode 100644 Jobs_Collections/venv/Lib/site-packages/beautifulsoup4-4.9.1.dist-info/AUTHORS delete mode 100644 Jobs_Collections/venv/Lib/site-packages/beautifulsoup4-4.9.1.dist-info/COPYING.txt delete mode 100644 Jobs_Collections/venv/Lib/site-packages/beautifulsoup4-4.9.1.dist-info/INSTALLER delete mode 100644 Jobs_Collections/venv/Lib/site-packages/beautifulsoup4-4.9.1.dist-info/LICENSE delete mode 100644 Jobs_Collections/venv/Lib/site-packages/beautifulsoup4-4.9.1.dist-info/METADATA delete mode 100644 Jobs_Collections/venv/Lib/site-packages/beautifulsoup4-4.9.1.dist-info/RECORD delete mode 100644 Jobs_Collections/venv/Lib/site-packages/beautifulsoup4-4.9.1.dist-info/WHEEL delete mode 100644 Jobs_Collections/venv/Lib/site-packages/beautifulsoup4-4.9.1.dist-info/top_level.txt delete mode 100644 Jobs_Collections/venv/Lib/site-packages/bs4-0.0.1-py3.8.egg-info/PKG-INFO delete mode 100644 Jobs_Collections/venv/Lib/site-packages/bs4-0.0.1-py3.8.egg-info/SOURCES.txt delete mode 100644 Jobs_Collections/venv/Lib/site-packages/bs4-0.0.1-py3.8.egg-info/dependency_links.txt delete mode 100644 Jobs_Collections/venv/Lib/site-packages/bs4-0.0.1-py3.8.egg-info/installed-files.txt delete mode 100644 Jobs_Collections/venv/Lib/site-packages/bs4-0.0.1-py3.8.egg-info/requires.txt delete mode 100644 Jobs_Collections/venv/Lib/site-packages/bs4-0.0.1-py3.8.egg-info/top_level.txt delete mode 100644 Jobs_Collections/venv/Lib/site-packages/bs4/__init__.py delete mode 100644 Jobs_Collections/venv/Lib/site-packages/bs4/__pycache__/__init__.cpython-38.pyc delete mode 100644 Jobs_Collections/venv/Lib/site-packages/bs4/__pycache__/dammit.cpython-38.pyc delete mode 100644 Jobs_Collections/venv/Lib/site-packages/bs4/__pycache__/diagnose.cpython-38.pyc delete mode 100644 Jobs_Collections/venv/Lib/site-packages/bs4/__pycache__/element.cpython-38.pyc delete mode 100644 Jobs_Collections/venv/Lib/site-packages/bs4/__pycache__/formatter.cpython-38.pyc delete mode 100644 Jobs_Collections/venv/Lib/site-packages/bs4/__pycache__/testing.cpython-38.pyc delete mode 100644 Jobs_Collections/venv/Lib/site-packages/bs4/builder/__init__.py delete mode 100644 Jobs_Collections/venv/Lib/site-packages/bs4/builder/__pycache__/__init__.cpython-38.pyc delete mode 100644 Jobs_Collections/venv/Lib/site-packages/bs4/builder/__pycache__/_html5lib.cpython-38.pyc delete mode 100644 Jobs_Collections/venv/Lib/site-packages/bs4/builder/__pycache__/_htmlparser.cpython-38.pyc delete mode 100644 Jobs_Collections/venv/Lib/site-packages/bs4/builder/__pycache__/_lxml.cpython-38.pyc delete mode 100644 Jobs_Collections/venv/Lib/site-packages/bs4/builder/_html5lib.py delete mode 100644 Jobs_Collections/venv/Lib/site-packages/bs4/builder/_htmlparser.py delete mode 100644 Jobs_Collections/venv/Lib/site-packages/bs4/builder/_lxml.py delete mode 100644 Jobs_Collections/venv/Lib/site-packages/bs4/dammit.py delete mode 100644 Jobs_Collections/venv/Lib/site-packages/bs4/diagnose.py delete mode 100644 Jobs_Collections/venv/Lib/site-packages/bs4/element.py delete mode 100644 Jobs_Collections/venv/Lib/site-packages/bs4/formatter.py delete mode 100644 Jobs_Collections/venv/Lib/site-packages/bs4/testing.py delete mode 100644 Jobs_Collections/venv/Lib/site-packages/bs4/tests/__init__.py delete mode 100644 Jobs_Collections/venv/Lib/site-packages/bs4/tests/__pycache__/__init__.cpython-38.pyc delete mode 100644 Jobs_Collections/venv/Lib/site-packages/bs4/tests/__pycache__/test_builder_registry.cpython-38.pyc delete mode 100644 Jobs_Collections/venv/Lib/site-packages/bs4/tests/__pycache__/test_docs.cpython-38.pyc delete mode 100644 Jobs_Collections/venv/Lib/site-packages/bs4/tests/__pycache__/test_html5lib.cpython-38.pyc delete mode 100644 Jobs_Collections/venv/Lib/site-packages/bs4/tests/__pycache__/test_htmlparser.cpython-38.pyc delete mode 100644 Jobs_Collections/venv/Lib/site-packages/bs4/tests/__pycache__/test_lxml.cpython-38.pyc delete mode 100644 Jobs_Collections/venv/Lib/site-packages/bs4/tests/__pycache__/test_soup.cpython-38.pyc delete mode 100644 Jobs_Collections/venv/Lib/site-packages/bs4/tests/__pycache__/test_tree.cpython-38.pyc delete mode 100644 Jobs_Collections/venv/Lib/site-packages/bs4/tests/test_builder_registry.py delete mode 100644 Jobs_Collections/venv/Lib/site-packages/bs4/tests/test_docs.py delete mode 100644 Jobs_Collections/venv/Lib/site-packages/bs4/tests/test_html5lib.py delete mode 100644 Jobs_Collections/venv/Lib/site-packages/bs4/tests/test_htmlparser.py delete mode 100644 Jobs_Collections/venv/Lib/site-packages/bs4/tests/test_lxml.py delete mode 100644 Jobs_Collections/venv/Lib/site-packages/bs4/tests/test_soup.py delete mode 100644 Jobs_Collections/venv/Lib/site-packages/bs4/tests/test_tree.py delete mode 100644 Jobs_Collections/venv/Lib/site-packages/certifi-2020.4.5.2.dist-info/INSTALLER delete mode 100644 Jobs_Collections/venv/Lib/site-packages/certifi-2020.4.5.2.dist-info/LICENSE delete mode 100644 Jobs_Collections/venv/Lib/site-packages/certifi-2020.4.5.2.dist-info/METADATA delete mode 100644 Jobs_Collections/venv/Lib/site-packages/certifi-2020.4.5.2.dist-info/RECORD delete mode 100644 Jobs_Collections/venv/Lib/site-packages/certifi-2020.4.5.2.dist-info/WHEEL delete mode 100644 Jobs_Collections/venv/Lib/site-packages/certifi-2020.4.5.2.dist-info/top_level.txt delete mode 100644 Jobs_Collections/venv/Lib/site-packages/certifi/__init__.py delete mode 100644 Jobs_Collections/venv/Lib/site-packages/certifi/__main__.py delete mode 100644 Jobs_Collections/venv/Lib/site-packages/certifi/__pycache__/__init__.cpython-38.pyc delete mode 100644 Jobs_Collections/venv/Lib/site-packages/certifi/__pycache__/__main__.cpython-38.pyc delete mode 100644 Jobs_Collections/venv/Lib/site-packages/certifi/__pycache__/core.cpython-38.pyc delete mode 100644 Jobs_Collections/venv/Lib/site-packages/certifi/cacert.pem delete mode 100644 Jobs_Collections/venv/Lib/site-packages/certifi/core.py delete mode 100644 Jobs_Collections/venv/Lib/site-packages/chardet-3.0.4.dist-info/DESCRIPTION.rst delete mode 100644 Jobs_Collections/venv/Lib/site-packages/chardet-3.0.4.dist-info/INSTALLER delete mode 100644 Jobs_Collections/venv/Lib/site-packages/chardet-3.0.4.dist-info/METADATA delete mode 100644 Jobs_Collections/venv/Lib/site-packages/chardet-3.0.4.dist-info/RECORD delete mode 100644 Jobs_Collections/venv/Lib/site-packages/chardet-3.0.4.dist-info/WHEEL delete mode 100644 Jobs_Collections/venv/Lib/site-packages/chardet-3.0.4.dist-info/entry_points.txt delete mode 100644 Jobs_Collections/venv/Lib/site-packages/chardet-3.0.4.dist-info/metadata.json delete mode 100644 Jobs_Collections/venv/Lib/site-packages/chardet-3.0.4.dist-info/top_level.txt delete mode 100644 Jobs_Collections/venv/Lib/site-packages/chardet/__init__.py delete mode 100644 Jobs_Collections/venv/Lib/site-packages/chardet/__pycache__/__init__.cpython-38.pyc delete mode 100644 Jobs_Collections/venv/Lib/site-packages/chardet/__pycache__/big5freq.cpython-38.pyc delete mode 100644 Jobs_Collections/venv/Lib/site-packages/chardet/__pycache__/big5prober.cpython-38.pyc delete mode 100644 Jobs_Collections/venv/Lib/site-packages/chardet/__pycache__/chardistribution.cpython-38.pyc delete mode 100644 Jobs_Collections/venv/Lib/site-packages/chardet/__pycache__/charsetgroupprober.cpython-38.pyc delete mode 100644 Jobs_Collections/venv/Lib/site-packages/chardet/__pycache__/charsetprober.cpython-38.pyc delete mode 100644 Jobs_Collections/venv/Lib/site-packages/chardet/__pycache__/codingstatemachine.cpython-38.pyc delete mode 100644 Jobs_Collections/venv/Lib/site-packages/chardet/__pycache__/compat.cpython-38.pyc delete mode 100644 Jobs_Collections/venv/Lib/site-packages/chardet/__pycache__/cp949prober.cpython-38.pyc delete mode 100644 Jobs_Collections/venv/Lib/site-packages/chardet/__pycache__/enums.cpython-38.pyc delete mode 100644 Jobs_Collections/venv/Lib/site-packages/chardet/__pycache__/escprober.cpython-38.pyc delete mode 100644 Jobs_Collections/venv/Lib/site-packages/chardet/__pycache__/escsm.cpython-38.pyc delete mode 100644 Jobs_Collections/venv/Lib/site-packages/chardet/__pycache__/eucjpprober.cpython-38.pyc delete mode 100644 Jobs_Collections/venv/Lib/site-packages/chardet/__pycache__/euckrfreq.cpython-38.pyc delete mode 100644 Jobs_Collections/venv/Lib/site-packages/chardet/__pycache__/euckrprober.cpython-38.pyc delete mode 100644 Jobs_Collections/venv/Lib/site-packages/chardet/__pycache__/euctwfreq.cpython-38.pyc delete mode 100644 Jobs_Collections/venv/Lib/site-packages/chardet/__pycache__/euctwprober.cpython-38.pyc delete mode 100644 Jobs_Collections/venv/Lib/site-packages/chardet/__pycache__/gb2312freq.cpython-38.pyc delete mode 100644 Jobs_Collections/venv/Lib/site-packages/chardet/__pycache__/gb2312prober.cpython-38.pyc delete mode 100644 Jobs_Collections/venv/Lib/site-packages/chardet/__pycache__/hebrewprober.cpython-38.pyc delete mode 100644 Jobs_Collections/venv/Lib/site-packages/chardet/__pycache__/jisfreq.cpython-38.pyc delete mode 100644 Jobs_Collections/venv/Lib/site-packages/chardet/__pycache__/jpcntx.cpython-38.pyc delete mode 100644 Jobs_Collections/venv/Lib/site-packages/chardet/__pycache__/langbulgarianmodel.cpython-38.pyc delete mode 100644 Jobs_Collections/venv/Lib/site-packages/chardet/__pycache__/langcyrillicmodel.cpython-38.pyc delete mode 100644 Jobs_Collections/venv/Lib/site-packages/chardet/__pycache__/langgreekmodel.cpython-38.pyc delete mode 100644 Jobs_Collections/venv/Lib/site-packages/chardet/__pycache__/langhebrewmodel.cpython-38.pyc delete mode 100644 Jobs_Collections/venv/Lib/site-packages/chardet/__pycache__/langhungarianmodel.cpython-38.pyc delete mode 100644 Jobs_Collections/venv/Lib/site-packages/chardet/__pycache__/langthaimodel.cpython-38.pyc delete mode 100644 Jobs_Collections/venv/Lib/site-packages/chardet/__pycache__/langturkishmodel.cpython-38.pyc delete mode 100644 Jobs_Collections/venv/Lib/site-packages/chardet/__pycache__/latin1prober.cpython-38.pyc delete mode 100644 Jobs_Collections/venv/Lib/site-packages/chardet/__pycache__/mbcharsetprober.cpython-38.pyc delete mode 100644 Jobs_Collections/venv/Lib/site-packages/chardet/__pycache__/mbcsgroupprober.cpython-38.pyc delete mode 100644 Jobs_Collections/venv/Lib/site-packages/chardet/__pycache__/mbcssm.cpython-38.pyc delete mode 100644 Jobs_Collections/venv/Lib/site-packages/chardet/__pycache__/sbcharsetprober.cpython-38.pyc delete mode 100644 Jobs_Collections/venv/Lib/site-packages/chardet/__pycache__/sbcsgroupprober.cpython-38.pyc delete mode 100644 Jobs_Collections/venv/Lib/site-packages/chardet/__pycache__/sjisprober.cpython-38.pyc delete mode 100644 Jobs_Collections/venv/Lib/site-packages/chardet/__pycache__/universaldetector.cpython-38.pyc delete mode 100644 Jobs_Collections/venv/Lib/site-packages/chardet/__pycache__/utf8prober.cpython-38.pyc delete mode 100644 Jobs_Collections/venv/Lib/site-packages/chardet/__pycache__/version.cpython-38.pyc delete mode 100644 Jobs_Collections/venv/Lib/site-packages/chardet/big5freq.py delete mode 100644 Jobs_Collections/venv/Lib/site-packages/chardet/big5prober.py delete mode 100644 Jobs_Collections/venv/Lib/site-packages/chardet/chardistribution.py delete mode 100644 Jobs_Collections/venv/Lib/site-packages/chardet/charsetgroupprober.py delete mode 100644 Jobs_Collections/venv/Lib/site-packages/chardet/charsetprober.py delete mode 100644 Jobs_Collections/venv/Lib/site-packages/chardet/cli/__init__.py delete mode 100644 Jobs_Collections/venv/Lib/site-packages/chardet/cli/__pycache__/__init__.cpython-38.pyc delete mode 100644 Jobs_Collections/venv/Lib/site-packages/chardet/cli/__pycache__/chardetect.cpython-38.pyc delete mode 100644 Jobs_Collections/venv/Lib/site-packages/chardet/cli/chardetect.py delete mode 100644 Jobs_Collections/venv/Lib/site-packages/chardet/codingstatemachine.py delete mode 100644 Jobs_Collections/venv/Lib/site-packages/chardet/compat.py delete mode 100644 Jobs_Collections/venv/Lib/site-packages/chardet/cp949prober.py delete mode 100644 Jobs_Collections/venv/Lib/site-packages/chardet/enums.py delete mode 100644 Jobs_Collections/venv/Lib/site-packages/chardet/escprober.py delete mode 100644 Jobs_Collections/venv/Lib/site-packages/chardet/escsm.py delete mode 100644 Jobs_Collections/venv/Lib/site-packages/chardet/eucjpprober.py delete mode 100644 Jobs_Collections/venv/Lib/site-packages/chardet/euckrfreq.py delete mode 100644 Jobs_Collections/venv/Lib/site-packages/chardet/euckrprober.py delete mode 100644 Jobs_Collections/venv/Lib/site-packages/chardet/euctwfreq.py delete mode 100644 Jobs_Collections/venv/Lib/site-packages/chardet/euctwprober.py delete mode 100644 Jobs_Collections/venv/Lib/site-packages/chardet/gb2312freq.py delete mode 100644 Jobs_Collections/venv/Lib/site-packages/chardet/gb2312prober.py delete mode 100644 Jobs_Collections/venv/Lib/site-packages/chardet/hebrewprober.py delete mode 100644 Jobs_Collections/venv/Lib/site-packages/chardet/jisfreq.py delete mode 100644 Jobs_Collections/venv/Lib/site-packages/chardet/jpcntx.py delete mode 100644 Jobs_Collections/venv/Lib/site-packages/chardet/langbulgarianmodel.py delete mode 100644 Jobs_Collections/venv/Lib/site-packages/chardet/langcyrillicmodel.py delete mode 100644 Jobs_Collections/venv/Lib/site-packages/chardet/langgreekmodel.py delete mode 100644 Jobs_Collections/venv/Lib/site-packages/chardet/langhebrewmodel.py delete mode 100644 Jobs_Collections/venv/Lib/site-packages/chardet/langhungarianmodel.py delete mode 100644 Jobs_Collections/venv/Lib/site-packages/chardet/langthaimodel.py delete mode 100644 Jobs_Collections/venv/Lib/site-packages/chardet/langturkishmodel.py delete mode 100644 Jobs_Collections/venv/Lib/site-packages/chardet/latin1prober.py delete mode 100644 Jobs_Collections/venv/Lib/site-packages/chardet/mbcharsetprober.py delete mode 100644 Jobs_Collections/venv/Lib/site-packages/chardet/mbcsgroupprober.py delete mode 100644 Jobs_Collections/venv/Lib/site-packages/chardet/mbcssm.py delete mode 100644 Jobs_Collections/venv/Lib/site-packages/chardet/sbcharsetprober.py delete mode 100644 Jobs_Collections/venv/Lib/site-packages/chardet/sbcsgroupprober.py delete mode 100644 Jobs_Collections/venv/Lib/site-packages/chardet/sjisprober.py delete mode 100644 Jobs_Collections/venv/Lib/site-packages/chardet/universaldetector.py delete mode 100644 Jobs_Collections/venv/Lib/site-packages/chardet/utf8prober.py delete mode 100644 Jobs_Collections/venv/Lib/site-packages/chardet/version.py delete mode 100644 Jobs_Collections/venv/Lib/site-packages/click-7.1.2.dist-info/INSTALLER delete mode 100644 Jobs_Collections/venv/Lib/site-packages/click-7.1.2.dist-info/LICENSE.rst delete mode 100644 Jobs_Collections/venv/Lib/site-packages/click-7.1.2.dist-info/METADATA delete mode 100644 Jobs_Collections/venv/Lib/site-packages/click-7.1.2.dist-info/RECORD delete mode 100644 Jobs_Collections/venv/Lib/site-packages/click-7.1.2.dist-info/WHEEL delete mode 100644 Jobs_Collections/venv/Lib/site-packages/click-7.1.2.dist-info/top_level.txt delete mode 100644 Jobs_Collections/venv/Lib/site-packages/click/__init__.py delete mode 100644 Jobs_Collections/venv/Lib/site-packages/click/__pycache__/__init__.cpython-38.pyc delete mode 100644 Jobs_Collections/venv/Lib/site-packages/click/__pycache__/_bashcomplete.cpython-38.pyc delete mode 100644 Jobs_Collections/venv/Lib/site-packages/click/__pycache__/_compat.cpython-38.pyc delete mode 100644 Jobs_Collections/venv/Lib/site-packages/click/__pycache__/_termui_impl.cpython-38.pyc delete mode 100644 Jobs_Collections/venv/Lib/site-packages/click/__pycache__/_textwrap.cpython-38.pyc delete mode 100644 Jobs_Collections/venv/Lib/site-packages/click/__pycache__/_unicodefun.cpython-38.pyc delete mode 100644 Jobs_Collections/venv/Lib/site-packages/click/__pycache__/_winconsole.cpython-38.pyc delete mode 100644 Jobs_Collections/venv/Lib/site-packages/click/__pycache__/core.cpython-38.pyc delete mode 100644 Jobs_Collections/venv/Lib/site-packages/click/__pycache__/decorators.cpython-38.pyc delete mode 100644 Jobs_Collections/venv/Lib/site-packages/click/__pycache__/exceptions.cpython-38.pyc delete mode 100644 Jobs_Collections/venv/Lib/site-packages/click/__pycache__/formatting.cpython-38.pyc delete mode 100644 Jobs_Collections/venv/Lib/site-packages/click/__pycache__/globals.cpython-38.pyc delete mode 100644 Jobs_Collections/venv/Lib/site-packages/click/__pycache__/parser.cpython-38.pyc delete mode 100644 Jobs_Collections/venv/Lib/site-packages/click/__pycache__/termui.cpython-38.pyc delete mode 100644 Jobs_Collections/venv/Lib/site-packages/click/__pycache__/testing.cpython-38.pyc delete mode 100644 Jobs_Collections/venv/Lib/site-packages/click/__pycache__/types.cpython-38.pyc delete mode 100644 Jobs_Collections/venv/Lib/site-packages/click/__pycache__/utils.cpython-38.pyc delete mode 100644 Jobs_Collections/venv/Lib/site-packages/click/_bashcomplete.py delete mode 100644 Jobs_Collections/venv/Lib/site-packages/click/_compat.py delete mode 100644 Jobs_Collections/venv/Lib/site-packages/click/_termui_impl.py delete mode 100644 Jobs_Collections/venv/Lib/site-packages/click/_textwrap.py delete mode 100644 Jobs_Collections/venv/Lib/site-packages/click/_unicodefun.py delete mode 100644 Jobs_Collections/venv/Lib/site-packages/click/_winconsole.py delete mode 100644 Jobs_Collections/venv/Lib/site-packages/click/core.py delete mode 100644 Jobs_Collections/venv/Lib/site-packages/click/decorators.py delete mode 100644 Jobs_Collections/venv/Lib/site-packages/click/exceptions.py delete mode 100644 Jobs_Collections/venv/Lib/site-packages/click/formatting.py delete mode 100644 Jobs_Collections/venv/Lib/site-packages/click/globals.py delete mode 100644 Jobs_Collections/venv/Lib/site-packages/click/parser.py delete mode 100644 Jobs_Collections/venv/Lib/site-packages/click/termui.py delete mode 100644 Jobs_Collections/venv/Lib/site-packages/click/testing.py delete mode 100644 Jobs_Collections/venv/Lib/site-packages/click/types.py delete mode 100644 Jobs_Collections/venv/Lib/site-packages/click/utils.py delete mode 100644 Jobs_Collections/venv/Lib/site-packages/colorama-0.4.3.dist-info/INSTALLER delete mode 100644 Jobs_Collections/venv/Lib/site-packages/colorama-0.4.3.dist-info/LICENSE.txt delete mode 100644 Jobs_Collections/venv/Lib/site-packages/colorama-0.4.3.dist-info/METADATA delete mode 100644 Jobs_Collections/venv/Lib/site-packages/colorama-0.4.3.dist-info/RECORD delete mode 100644 Jobs_Collections/venv/Lib/site-packages/colorama-0.4.3.dist-info/WHEEL delete mode 100644 Jobs_Collections/venv/Lib/site-packages/colorama-0.4.3.dist-info/top_level.txt delete mode 100644 Jobs_Collections/venv/Lib/site-packages/colorama/__init__.py delete mode 100644 Jobs_Collections/venv/Lib/site-packages/colorama/__pycache__/__init__.cpython-38.pyc delete mode 100644 Jobs_Collections/venv/Lib/site-packages/colorama/__pycache__/ansi.cpython-38.pyc delete mode 100644 Jobs_Collections/venv/Lib/site-packages/colorama/__pycache__/ansitowin32.cpython-38.pyc delete mode 100644 Jobs_Collections/venv/Lib/site-packages/colorama/__pycache__/initialise.cpython-38.pyc delete mode 100644 Jobs_Collections/venv/Lib/site-packages/colorama/__pycache__/win32.cpython-38.pyc delete mode 100644 Jobs_Collections/venv/Lib/site-packages/colorama/__pycache__/winterm.cpython-38.pyc delete mode 100644 Jobs_Collections/venv/Lib/site-packages/colorama/ansi.py delete mode 100644 Jobs_Collections/venv/Lib/site-packages/colorama/ansitowin32.py delete mode 100644 Jobs_Collections/venv/Lib/site-packages/colorama/initialise.py delete mode 100644 Jobs_Collections/venv/Lib/site-packages/colorama/win32.py delete mode 100644 Jobs_Collections/venv/Lib/site-packages/colorama/winterm.py delete mode 100644 Jobs_Collections/venv/Lib/site-packages/easy_install.py delete mode 100644 Jobs_Collections/venv/Lib/site-packages/flask/__init__.py delete mode 100644 Jobs_Collections/venv/Lib/site-packages/flask/__main__.py delete mode 100644 Jobs_Collections/venv/Lib/site-packages/flask/__pycache__/__init__.cpython-38.pyc delete mode 100644 Jobs_Collections/venv/Lib/site-packages/flask/__pycache__/__main__.cpython-38.pyc delete mode 100644 Jobs_Collections/venv/Lib/site-packages/flask/__pycache__/_compat.cpython-38.pyc delete mode 100644 Jobs_Collections/venv/Lib/site-packages/flask/__pycache__/app.cpython-38.pyc delete mode 100644 Jobs_Collections/venv/Lib/site-packages/flask/__pycache__/blueprints.cpython-38.pyc delete mode 100644 Jobs_Collections/venv/Lib/site-packages/flask/__pycache__/cli.cpython-38.pyc delete mode 100644 Jobs_Collections/venv/Lib/site-packages/flask/__pycache__/config.cpython-38.pyc delete mode 100644 Jobs_Collections/venv/Lib/site-packages/flask/__pycache__/ctx.cpython-38.pyc delete mode 100644 Jobs_Collections/venv/Lib/site-packages/flask/__pycache__/debughelpers.cpython-38.pyc delete mode 100644 Jobs_Collections/venv/Lib/site-packages/flask/__pycache__/globals.cpython-38.pyc delete mode 100644 Jobs_Collections/venv/Lib/site-packages/flask/__pycache__/helpers.cpython-38.pyc delete mode 100644 Jobs_Collections/venv/Lib/site-packages/flask/__pycache__/logging.cpython-38.pyc delete mode 100644 Jobs_Collections/venv/Lib/site-packages/flask/__pycache__/sessions.cpython-38.pyc delete mode 100644 Jobs_Collections/venv/Lib/site-packages/flask/__pycache__/signals.cpython-38.pyc delete mode 100644 Jobs_Collections/venv/Lib/site-packages/flask/__pycache__/templating.cpython-38.pyc delete mode 100644 Jobs_Collections/venv/Lib/site-packages/flask/__pycache__/testing.cpython-38.pyc delete mode 100644 Jobs_Collections/venv/Lib/site-packages/flask/__pycache__/views.cpython-38.pyc delete mode 100644 Jobs_Collections/venv/Lib/site-packages/flask/__pycache__/wrappers.cpython-38.pyc delete mode 100644 Jobs_Collections/venv/Lib/site-packages/flask/_compat.py delete mode 100644 Jobs_Collections/venv/Lib/site-packages/flask/app.py delete mode 100644 Jobs_Collections/venv/Lib/site-packages/flask/blueprints.py delete mode 100644 Jobs_Collections/venv/Lib/site-packages/flask/cli.py delete mode 100644 Jobs_Collections/venv/Lib/site-packages/flask/config.py delete mode 100644 Jobs_Collections/venv/Lib/site-packages/flask/ctx.py delete mode 100644 Jobs_Collections/venv/Lib/site-packages/flask/debughelpers.py delete mode 100644 Jobs_Collections/venv/Lib/site-packages/flask/globals.py delete mode 100644 Jobs_Collections/venv/Lib/site-packages/flask/helpers.py delete mode 100644 Jobs_Collections/venv/Lib/site-packages/flask/json/__init__.py delete mode 100644 Jobs_Collections/venv/Lib/site-packages/flask/json/__pycache__/__init__.cpython-38.pyc delete mode 100644 Jobs_Collections/venv/Lib/site-packages/flask/json/__pycache__/tag.cpython-38.pyc delete mode 100644 Jobs_Collections/venv/Lib/site-packages/flask/json/tag.py delete mode 100644 Jobs_Collections/venv/Lib/site-packages/flask/logging.py delete mode 100644 Jobs_Collections/venv/Lib/site-packages/flask/sessions.py delete mode 100644 Jobs_Collections/venv/Lib/site-packages/flask/signals.py delete mode 100644 Jobs_Collections/venv/Lib/site-packages/flask/templating.py delete mode 100644 Jobs_Collections/venv/Lib/site-packages/flask/testing.py delete mode 100644 Jobs_Collections/venv/Lib/site-packages/flask/views.py delete mode 100644 Jobs_Collections/venv/Lib/site-packages/flask/wrappers.py delete mode 100644 Jobs_Collections/venv/Lib/site-packages/idna-2.9.dist-info/INSTALLER delete mode 100644 Jobs_Collections/venv/Lib/site-packages/idna-2.9.dist-info/LICENSE.rst delete mode 100644 Jobs_Collections/venv/Lib/site-packages/idna-2.9.dist-info/METADATA delete mode 100644 Jobs_Collections/venv/Lib/site-packages/idna-2.9.dist-info/RECORD delete mode 100644 Jobs_Collections/venv/Lib/site-packages/idna-2.9.dist-info/WHEEL delete mode 100644 Jobs_Collections/venv/Lib/site-packages/idna-2.9.dist-info/top_level.txt delete mode 100644 Jobs_Collections/venv/Lib/site-packages/idna/__init__.py delete mode 100644 Jobs_Collections/venv/Lib/site-packages/idna/__pycache__/__init__.cpython-38.pyc delete mode 100644 Jobs_Collections/venv/Lib/site-packages/idna/__pycache__/codec.cpython-38.pyc delete mode 100644 Jobs_Collections/venv/Lib/site-packages/idna/__pycache__/compat.cpython-38.pyc delete mode 100644 Jobs_Collections/venv/Lib/site-packages/idna/__pycache__/core.cpython-38.pyc delete mode 100644 Jobs_Collections/venv/Lib/site-packages/idna/__pycache__/idnadata.cpython-38.pyc delete mode 100644 Jobs_Collections/venv/Lib/site-packages/idna/__pycache__/intranges.cpython-38.pyc delete mode 100644 Jobs_Collections/venv/Lib/site-packages/idna/__pycache__/package_data.cpython-38.pyc delete mode 100644 Jobs_Collections/venv/Lib/site-packages/idna/__pycache__/uts46data.cpython-38.pyc delete mode 100644 Jobs_Collections/venv/Lib/site-packages/idna/codec.py delete mode 100644 Jobs_Collections/venv/Lib/site-packages/idna/compat.py delete mode 100644 Jobs_Collections/venv/Lib/site-packages/idna/core.py delete mode 100644 Jobs_Collections/venv/Lib/site-packages/idna/idnadata.py delete mode 100644 Jobs_Collections/venv/Lib/site-packages/idna/intranges.py delete mode 100644 Jobs_Collections/venv/Lib/site-packages/idna/package_data.py delete mode 100644 Jobs_Collections/venv/Lib/site-packages/idna/uts46data.py delete mode 100644 Jobs_Collections/venv/Lib/site-packages/isort-4.3.21.dist-info/INSTALLER delete mode 100644 Jobs_Collections/venv/Lib/site-packages/isort-4.3.21.dist-info/LICENSE delete mode 100644 Jobs_Collections/venv/Lib/site-packages/isort-4.3.21.dist-info/METADATA delete mode 100644 Jobs_Collections/venv/Lib/site-packages/isort-4.3.21.dist-info/RECORD delete mode 100644 Jobs_Collections/venv/Lib/site-packages/isort-4.3.21.dist-info/WHEEL delete mode 100644 Jobs_Collections/venv/Lib/site-packages/isort-4.3.21.dist-info/entry_points.txt delete mode 100644 Jobs_Collections/venv/Lib/site-packages/isort-4.3.21.dist-info/top_level.txt delete mode 100644 Jobs_Collections/venv/Lib/site-packages/isort/__init__.py delete mode 100644 Jobs_Collections/venv/Lib/site-packages/isort/__main__.py delete mode 100644 Jobs_Collections/venv/Lib/site-packages/isort/__pycache__/__init__.cpython-38.pyc delete mode 100644 Jobs_Collections/venv/Lib/site-packages/isort/__pycache__/__main__.cpython-38.pyc delete mode 100644 Jobs_Collections/venv/Lib/site-packages/isort/__pycache__/finders.cpython-38.pyc delete mode 100644 Jobs_Collections/venv/Lib/site-packages/isort/__pycache__/hooks.cpython-38.pyc delete mode 100644 Jobs_Collections/venv/Lib/site-packages/isort/__pycache__/isort.cpython-38.pyc delete mode 100644 Jobs_Collections/venv/Lib/site-packages/isort/__pycache__/main.cpython-38.pyc delete mode 100644 Jobs_Collections/venv/Lib/site-packages/isort/__pycache__/natural.cpython-38.pyc delete mode 100644 Jobs_Collections/venv/Lib/site-packages/isort/__pycache__/pie_slice.cpython-38.pyc delete mode 100644 Jobs_Collections/venv/Lib/site-packages/isort/__pycache__/pylama_isort.cpython-38.pyc delete mode 100644 Jobs_Collections/venv/Lib/site-packages/isort/__pycache__/settings.cpython-38.pyc delete mode 100644 Jobs_Collections/venv/Lib/site-packages/isort/__pycache__/utils.cpython-38.pyc delete mode 100644 Jobs_Collections/venv/Lib/site-packages/isort/finders.py delete mode 100644 Jobs_Collections/venv/Lib/site-packages/isort/hooks.py delete mode 100644 Jobs_Collections/venv/Lib/site-packages/isort/isort.py delete mode 100644 Jobs_Collections/venv/Lib/site-packages/isort/main.py delete mode 100644 Jobs_Collections/venv/Lib/site-packages/isort/natural.py delete mode 100644 Jobs_Collections/venv/Lib/site-packages/isort/pie_slice.py delete mode 100644 Jobs_Collections/venv/Lib/site-packages/isort/pylama_isort.py delete mode 100644 Jobs_Collections/venv/Lib/site-packages/isort/settings.py delete mode 100644 Jobs_Collections/venv/Lib/site-packages/isort/utils.py delete mode 100644 Jobs_Collections/venv/Lib/site-packages/itsdangerous-1.1.0.dist-info/INSTALLER delete mode 100644 Jobs_Collections/venv/Lib/site-packages/itsdangerous-1.1.0.dist-info/LICENSE.rst delete mode 100644 Jobs_Collections/venv/Lib/site-packages/itsdangerous-1.1.0.dist-info/METADATA delete mode 100644 Jobs_Collections/venv/Lib/site-packages/itsdangerous-1.1.0.dist-info/RECORD delete mode 100644 Jobs_Collections/venv/Lib/site-packages/itsdangerous-1.1.0.dist-info/WHEEL delete mode 100644 Jobs_Collections/venv/Lib/site-packages/itsdangerous-1.1.0.dist-info/top_level.txt delete mode 100644 Jobs_Collections/venv/Lib/site-packages/itsdangerous/__init__.py delete mode 100644 Jobs_Collections/venv/Lib/site-packages/itsdangerous/__pycache__/__init__.cpython-38.pyc delete mode 100644 Jobs_Collections/venv/Lib/site-packages/itsdangerous/__pycache__/_compat.cpython-38.pyc delete mode 100644 Jobs_Collections/venv/Lib/site-packages/itsdangerous/__pycache__/_json.cpython-38.pyc delete mode 100644 Jobs_Collections/venv/Lib/site-packages/itsdangerous/__pycache__/encoding.cpython-38.pyc delete mode 100644 Jobs_Collections/venv/Lib/site-packages/itsdangerous/__pycache__/exc.cpython-38.pyc delete mode 100644 Jobs_Collections/venv/Lib/site-packages/itsdangerous/__pycache__/jws.cpython-38.pyc delete mode 100644 Jobs_Collections/venv/Lib/site-packages/itsdangerous/__pycache__/serializer.cpython-38.pyc delete mode 100644 Jobs_Collections/venv/Lib/site-packages/itsdangerous/__pycache__/signer.cpython-38.pyc delete mode 100644 Jobs_Collections/venv/Lib/site-packages/itsdangerous/__pycache__/timed.cpython-38.pyc delete mode 100644 Jobs_Collections/venv/Lib/site-packages/itsdangerous/__pycache__/url_safe.cpython-38.pyc delete mode 100644 Jobs_Collections/venv/Lib/site-packages/itsdangerous/_compat.py delete mode 100644 Jobs_Collections/venv/Lib/site-packages/itsdangerous/_json.py delete mode 100644 Jobs_Collections/venv/Lib/site-packages/itsdangerous/encoding.py delete mode 100644 Jobs_Collections/venv/Lib/site-packages/itsdangerous/exc.py delete mode 100644 Jobs_Collections/venv/Lib/site-packages/itsdangerous/jws.py delete mode 100644 Jobs_Collections/venv/Lib/site-packages/itsdangerous/serializer.py delete mode 100644 Jobs_Collections/venv/Lib/site-packages/itsdangerous/signer.py delete mode 100644 Jobs_Collections/venv/Lib/site-packages/itsdangerous/timed.py delete mode 100644 Jobs_Collections/venv/Lib/site-packages/itsdangerous/url_safe.py delete mode 100644 Jobs_Collections/venv/Lib/site-packages/jinja2/__init__.py delete mode 100644 Jobs_Collections/venv/Lib/site-packages/jinja2/__pycache__/__init__.cpython-38.pyc delete mode 100644 Jobs_Collections/venv/Lib/site-packages/jinja2/__pycache__/_compat.cpython-38.pyc delete mode 100644 Jobs_Collections/venv/Lib/site-packages/jinja2/__pycache__/_identifier.cpython-38.pyc delete mode 100644 Jobs_Collections/venv/Lib/site-packages/jinja2/__pycache__/asyncfilters.cpython-38.pyc delete mode 100644 Jobs_Collections/venv/Lib/site-packages/jinja2/__pycache__/asyncsupport.cpython-38.pyc delete mode 100644 Jobs_Collections/venv/Lib/site-packages/jinja2/__pycache__/bccache.cpython-38.pyc delete mode 100644 Jobs_Collections/venv/Lib/site-packages/jinja2/__pycache__/compiler.cpython-38.pyc delete mode 100644 Jobs_Collections/venv/Lib/site-packages/jinja2/__pycache__/constants.cpython-38.pyc delete mode 100644 Jobs_Collections/venv/Lib/site-packages/jinja2/__pycache__/debug.cpython-38.pyc delete mode 100644 Jobs_Collections/venv/Lib/site-packages/jinja2/__pycache__/defaults.cpython-38.pyc delete mode 100644 Jobs_Collections/venv/Lib/site-packages/jinja2/__pycache__/environment.cpython-38.pyc delete mode 100644 Jobs_Collections/venv/Lib/site-packages/jinja2/__pycache__/exceptions.cpython-38.pyc delete mode 100644 Jobs_Collections/venv/Lib/site-packages/jinja2/__pycache__/ext.cpython-38.pyc delete mode 100644 Jobs_Collections/venv/Lib/site-packages/jinja2/__pycache__/filters.cpython-38.pyc delete mode 100644 Jobs_Collections/venv/Lib/site-packages/jinja2/__pycache__/idtracking.cpython-38.pyc delete mode 100644 Jobs_Collections/venv/Lib/site-packages/jinja2/__pycache__/lexer.cpython-38.pyc delete mode 100644 Jobs_Collections/venv/Lib/site-packages/jinja2/__pycache__/loaders.cpython-38.pyc delete mode 100644 Jobs_Collections/venv/Lib/site-packages/jinja2/__pycache__/meta.cpython-38.pyc delete mode 100644 Jobs_Collections/venv/Lib/site-packages/jinja2/__pycache__/nativetypes.cpython-38.pyc delete mode 100644 Jobs_Collections/venv/Lib/site-packages/jinja2/__pycache__/nodes.cpython-38.pyc delete mode 100644 Jobs_Collections/venv/Lib/site-packages/jinja2/__pycache__/optimizer.cpython-38.pyc delete mode 100644 Jobs_Collections/venv/Lib/site-packages/jinja2/__pycache__/parser.cpython-38.pyc delete mode 100644 Jobs_Collections/venv/Lib/site-packages/jinja2/__pycache__/runtime.cpython-38.pyc delete mode 100644 Jobs_Collections/venv/Lib/site-packages/jinja2/__pycache__/sandbox.cpython-38.pyc delete mode 100644 Jobs_Collections/venv/Lib/site-packages/jinja2/__pycache__/tests.cpython-38.pyc delete mode 100644 Jobs_Collections/venv/Lib/site-packages/jinja2/__pycache__/utils.cpython-38.pyc delete mode 100644 Jobs_Collections/venv/Lib/site-packages/jinja2/__pycache__/visitor.cpython-38.pyc delete mode 100644 Jobs_Collections/venv/Lib/site-packages/jinja2/_compat.py delete mode 100644 Jobs_Collections/venv/Lib/site-packages/jinja2/_identifier.py delete mode 100644 Jobs_Collections/venv/Lib/site-packages/jinja2/asyncfilters.py delete mode 100644 Jobs_Collections/venv/Lib/site-packages/jinja2/asyncsupport.py delete mode 100644 Jobs_Collections/venv/Lib/site-packages/jinja2/bccache.py delete mode 100644 Jobs_Collections/venv/Lib/site-packages/jinja2/compiler.py delete mode 100644 Jobs_Collections/venv/Lib/site-packages/jinja2/constants.py delete mode 100644 Jobs_Collections/venv/Lib/site-packages/jinja2/debug.py delete mode 100644 Jobs_Collections/venv/Lib/site-packages/jinja2/defaults.py delete mode 100644 Jobs_Collections/venv/Lib/site-packages/jinja2/environment.py delete mode 100644 Jobs_Collections/venv/Lib/site-packages/jinja2/exceptions.py delete mode 100644 Jobs_Collections/venv/Lib/site-packages/jinja2/ext.py delete mode 100644 Jobs_Collections/venv/Lib/site-packages/jinja2/filters.py delete mode 100644 Jobs_Collections/venv/Lib/site-packages/jinja2/idtracking.py delete mode 100644 Jobs_Collections/venv/Lib/site-packages/jinja2/lexer.py delete mode 100644 Jobs_Collections/venv/Lib/site-packages/jinja2/loaders.py delete mode 100644 Jobs_Collections/venv/Lib/site-packages/jinja2/meta.py delete mode 100644 Jobs_Collections/venv/Lib/site-packages/jinja2/nativetypes.py delete mode 100644 Jobs_Collections/venv/Lib/site-packages/jinja2/nodes.py delete mode 100644 Jobs_Collections/venv/Lib/site-packages/jinja2/optimizer.py delete mode 100644 Jobs_Collections/venv/Lib/site-packages/jinja2/parser.py delete mode 100644 Jobs_Collections/venv/Lib/site-packages/jinja2/runtime.py delete mode 100644 Jobs_Collections/venv/Lib/site-packages/jinja2/sandbox.py delete mode 100644 Jobs_Collections/venv/Lib/site-packages/jinja2/tests.py delete mode 100644 Jobs_Collections/venv/Lib/site-packages/jinja2/utils.py delete mode 100644 Jobs_Collections/venv/Lib/site-packages/jinja2/visitor.py delete mode 100644 Jobs_Collections/venv/Lib/site-packages/lazy_object_proxy-1.4.3.dist-info/AUTHORS.rst delete mode 100644 Jobs_Collections/venv/Lib/site-packages/lazy_object_proxy-1.4.3.dist-info/INSTALLER delete mode 100644 Jobs_Collections/venv/Lib/site-packages/lazy_object_proxy-1.4.3.dist-info/LICENSE delete mode 100644 Jobs_Collections/venv/Lib/site-packages/lazy_object_proxy-1.4.3.dist-info/METADATA delete mode 100644 Jobs_Collections/venv/Lib/site-packages/lazy_object_proxy-1.4.3.dist-info/RECORD delete mode 100644 Jobs_Collections/venv/Lib/site-packages/lazy_object_proxy-1.4.3.dist-info/WHEEL delete mode 100644 Jobs_Collections/venv/Lib/site-packages/lazy_object_proxy-1.4.3.dist-info/top_level.txt delete mode 100644 Jobs_Collections/venv/Lib/site-packages/lazy_object_proxy/__init__.py delete mode 100644 Jobs_Collections/venv/Lib/site-packages/lazy_object_proxy/__pycache__/__init__.cpython-38.pyc delete mode 100644 Jobs_Collections/venv/Lib/site-packages/lazy_object_proxy/__pycache__/_version.cpython-38.pyc delete mode 100644 Jobs_Collections/venv/Lib/site-packages/lazy_object_proxy/__pycache__/compat.cpython-38.pyc delete mode 100644 Jobs_Collections/venv/Lib/site-packages/lazy_object_proxy/__pycache__/simple.cpython-38.pyc delete mode 100644 Jobs_Collections/venv/Lib/site-packages/lazy_object_proxy/__pycache__/slots.cpython-38.pyc delete mode 100644 Jobs_Collections/venv/Lib/site-packages/lazy_object_proxy/__pycache__/utils.cpython-38.pyc delete mode 100644 Jobs_Collections/venv/Lib/site-packages/lazy_object_proxy/_version.py delete mode 100644 Jobs_Collections/venv/Lib/site-packages/lazy_object_proxy/cext.cp38-win32.pyd delete mode 100644 Jobs_Collections/venv/Lib/site-packages/lazy_object_proxy/compat.py delete mode 100644 Jobs_Collections/venv/Lib/site-packages/lazy_object_proxy/simple.py delete mode 100644 Jobs_Collections/venv/Lib/site-packages/lazy_object_proxy/slots.py delete mode 100644 Jobs_Collections/venv/Lib/site-packages/lazy_object_proxy/utils.py delete mode 100644 Jobs_Collections/venv/Lib/site-packages/markupsafe/__init__.py delete mode 100644 Jobs_Collections/venv/Lib/site-packages/markupsafe/__pycache__/__init__.cpython-38.pyc delete mode 100644 Jobs_Collections/venv/Lib/site-packages/markupsafe/__pycache__/_compat.cpython-38.pyc delete mode 100644 Jobs_Collections/venv/Lib/site-packages/markupsafe/__pycache__/_constants.cpython-38.pyc delete mode 100644 Jobs_Collections/venv/Lib/site-packages/markupsafe/__pycache__/_native.cpython-38.pyc delete mode 100644 Jobs_Collections/venv/Lib/site-packages/markupsafe/_compat.py delete mode 100644 Jobs_Collections/venv/Lib/site-packages/markupsafe/_constants.py delete mode 100644 Jobs_Collections/venv/Lib/site-packages/markupsafe/_native.py delete mode 100644 Jobs_Collections/venv/Lib/site-packages/markupsafe/_speedups.cp38-win32.pyd delete mode 100644 Jobs_Collections/venv/Lib/site-packages/mccabe-0.6.1.dist-info/DESCRIPTION.rst delete mode 100644 Jobs_Collections/venv/Lib/site-packages/mccabe-0.6.1.dist-info/INSTALLER delete mode 100644 Jobs_Collections/venv/Lib/site-packages/mccabe-0.6.1.dist-info/METADATA delete mode 100644 Jobs_Collections/venv/Lib/site-packages/mccabe-0.6.1.dist-info/RECORD delete mode 100644 Jobs_Collections/venv/Lib/site-packages/mccabe-0.6.1.dist-info/WHEEL delete mode 100644 Jobs_Collections/venv/Lib/site-packages/mccabe-0.6.1.dist-info/entry_points.txt delete mode 100644 Jobs_Collections/venv/Lib/site-packages/mccabe-0.6.1.dist-info/metadata.json delete mode 100644 Jobs_Collections/venv/Lib/site-packages/mccabe-0.6.1.dist-info/top_level.txt delete mode 100644 Jobs_Collections/venv/Lib/site-packages/mccabe.py delete mode 100644 Jobs_Collections/venv/Lib/site-packages/pip-19.2.3.dist-info/INSTALLER delete mode 100644 Jobs_Collections/venv/Lib/site-packages/pip-19.2.3.dist-info/LICENSE.txt delete mode 100644 Jobs_Collections/venv/Lib/site-packages/pip-19.2.3.dist-info/METADATA delete mode 100644 Jobs_Collections/venv/Lib/site-packages/pip-19.2.3.dist-info/RECORD delete mode 100644 Jobs_Collections/venv/Lib/site-packages/pip-19.2.3.dist-info/WHEEL delete mode 100644 Jobs_Collections/venv/Lib/site-packages/pip-19.2.3.dist-info/entry_points.txt delete mode 100644 Jobs_Collections/venv/Lib/site-packages/pip-19.2.3.dist-info/top_level.txt delete mode 100644 Jobs_Collections/venv/Lib/site-packages/pip/__init__.py delete mode 100644 Jobs_Collections/venv/Lib/site-packages/pip/__main__.py delete mode 100644 Jobs_Collections/venv/Lib/site-packages/pip/__pycache__/__init__.cpython-38.pyc delete mode 100644 Jobs_Collections/venv/Lib/site-packages/pip/__pycache__/__main__.cpython-38.pyc delete mode 100644 Jobs_Collections/venv/Lib/site-packages/pip/_internal/__init__.py delete mode 100644 Jobs_Collections/venv/Lib/site-packages/pip/_internal/__pycache__/__init__.cpython-38.pyc delete mode 100644 Jobs_Collections/venv/Lib/site-packages/pip/_internal/__pycache__/build_env.cpython-38.pyc delete mode 100644 Jobs_Collections/venv/Lib/site-packages/pip/_internal/__pycache__/cache.cpython-38.pyc delete mode 100644 Jobs_Collections/venv/Lib/site-packages/pip/_internal/__pycache__/configuration.cpython-38.pyc delete mode 100644 Jobs_Collections/venv/Lib/site-packages/pip/_internal/__pycache__/download.cpython-38.pyc delete mode 100644 Jobs_Collections/venv/Lib/site-packages/pip/_internal/__pycache__/exceptions.cpython-38.pyc delete mode 100644 Jobs_Collections/venv/Lib/site-packages/pip/_internal/__pycache__/index.cpython-38.pyc delete mode 100644 Jobs_Collections/venv/Lib/site-packages/pip/_internal/__pycache__/legacy_resolve.cpython-38.pyc delete mode 100644 Jobs_Collections/venv/Lib/site-packages/pip/_internal/__pycache__/locations.cpython-38.pyc delete mode 100644 Jobs_Collections/venv/Lib/site-packages/pip/_internal/__pycache__/pep425tags.cpython-38.pyc delete mode 100644 Jobs_Collections/venv/Lib/site-packages/pip/_internal/__pycache__/pyproject.cpython-38.pyc delete mode 100644 Jobs_Collections/venv/Lib/site-packages/pip/_internal/__pycache__/wheel.cpython-38.pyc delete mode 100644 Jobs_Collections/venv/Lib/site-packages/pip/_internal/build_env.py delete mode 100644 Jobs_Collections/venv/Lib/site-packages/pip/_internal/cache.py delete mode 100644 Jobs_Collections/venv/Lib/site-packages/pip/_internal/cli/__init__.py delete mode 100644 Jobs_Collections/venv/Lib/site-packages/pip/_internal/cli/__pycache__/__init__.cpython-38.pyc delete mode 100644 Jobs_Collections/venv/Lib/site-packages/pip/_internal/cli/__pycache__/autocompletion.cpython-38.pyc delete mode 100644 Jobs_Collections/venv/Lib/site-packages/pip/_internal/cli/__pycache__/base_command.cpython-38.pyc delete mode 100644 Jobs_Collections/venv/Lib/site-packages/pip/_internal/cli/__pycache__/cmdoptions.cpython-38.pyc delete mode 100644 Jobs_Collections/venv/Lib/site-packages/pip/_internal/cli/__pycache__/main_parser.cpython-38.pyc delete mode 100644 Jobs_Collections/venv/Lib/site-packages/pip/_internal/cli/__pycache__/parser.cpython-38.pyc delete mode 100644 Jobs_Collections/venv/Lib/site-packages/pip/_internal/cli/__pycache__/status_codes.cpython-38.pyc delete mode 100644 Jobs_Collections/venv/Lib/site-packages/pip/_internal/cli/autocompletion.py delete mode 100644 Jobs_Collections/venv/Lib/site-packages/pip/_internal/cli/base_command.py delete mode 100644 Jobs_Collections/venv/Lib/site-packages/pip/_internal/cli/cmdoptions.py delete mode 100644 Jobs_Collections/venv/Lib/site-packages/pip/_internal/cli/main_parser.py delete mode 100644 Jobs_Collections/venv/Lib/site-packages/pip/_internal/cli/parser.py delete mode 100644 Jobs_Collections/venv/Lib/site-packages/pip/_internal/cli/status_codes.py delete mode 100644 Jobs_Collections/venv/Lib/site-packages/pip/_internal/commands/__init__.py delete mode 100644 Jobs_Collections/venv/Lib/site-packages/pip/_internal/commands/__pycache__/__init__.cpython-38.pyc delete mode 100644 Jobs_Collections/venv/Lib/site-packages/pip/_internal/commands/__pycache__/check.cpython-38.pyc delete mode 100644 Jobs_Collections/venv/Lib/site-packages/pip/_internal/commands/__pycache__/completion.cpython-38.pyc delete mode 100644 Jobs_Collections/venv/Lib/site-packages/pip/_internal/commands/__pycache__/configuration.cpython-38.pyc delete mode 100644 Jobs_Collections/venv/Lib/site-packages/pip/_internal/commands/__pycache__/debug.cpython-38.pyc delete mode 100644 Jobs_Collections/venv/Lib/site-packages/pip/_internal/commands/__pycache__/download.cpython-38.pyc delete mode 100644 Jobs_Collections/venv/Lib/site-packages/pip/_internal/commands/__pycache__/freeze.cpython-38.pyc delete mode 100644 Jobs_Collections/venv/Lib/site-packages/pip/_internal/commands/__pycache__/hash.cpython-38.pyc delete mode 100644 Jobs_Collections/venv/Lib/site-packages/pip/_internal/commands/__pycache__/help.cpython-38.pyc delete mode 100644 Jobs_Collections/venv/Lib/site-packages/pip/_internal/commands/__pycache__/install.cpython-38.pyc delete mode 100644 Jobs_Collections/venv/Lib/site-packages/pip/_internal/commands/__pycache__/list.cpython-38.pyc delete mode 100644 Jobs_Collections/venv/Lib/site-packages/pip/_internal/commands/__pycache__/search.cpython-38.pyc delete mode 100644 Jobs_Collections/venv/Lib/site-packages/pip/_internal/commands/__pycache__/show.cpython-38.pyc delete mode 100644 Jobs_Collections/venv/Lib/site-packages/pip/_internal/commands/__pycache__/uninstall.cpython-38.pyc delete mode 100644 Jobs_Collections/venv/Lib/site-packages/pip/_internal/commands/__pycache__/wheel.cpython-38.pyc delete mode 100644 Jobs_Collections/venv/Lib/site-packages/pip/_internal/commands/check.py delete mode 100644 Jobs_Collections/venv/Lib/site-packages/pip/_internal/commands/completion.py delete mode 100644 Jobs_Collections/venv/Lib/site-packages/pip/_internal/commands/configuration.py delete mode 100644 Jobs_Collections/venv/Lib/site-packages/pip/_internal/commands/debug.py delete mode 100644 Jobs_Collections/venv/Lib/site-packages/pip/_internal/commands/download.py delete mode 100644 Jobs_Collections/venv/Lib/site-packages/pip/_internal/commands/freeze.py delete mode 100644 Jobs_Collections/venv/Lib/site-packages/pip/_internal/commands/hash.py delete mode 100644 Jobs_Collections/venv/Lib/site-packages/pip/_internal/commands/help.py delete mode 100644 Jobs_Collections/venv/Lib/site-packages/pip/_internal/commands/install.py delete mode 100644 Jobs_Collections/venv/Lib/site-packages/pip/_internal/commands/list.py delete mode 100644 Jobs_Collections/venv/Lib/site-packages/pip/_internal/commands/search.py delete mode 100644 Jobs_Collections/venv/Lib/site-packages/pip/_internal/commands/show.py delete mode 100644 Jobs_Collections/venv/Lib/site-packages/pip/_internal/commands/uninstall.py delete mode 100644 Jobs_Collections/venv/Lib/site-packages/pip/_internal/commands/wheel.py delete mode 100644 Jobs_Collections/venv/Lib/site-packages/pip/_internal/configuration.py delete mode 100644 Jobs_Collections/venv/Lib/site-packages/pip/_internal/distributions/__init__.py delete mode 100644 Jobs_Collections/venv/Lib/site-packages/pip/_internal/distributions/__pycache__/__init__.cpython-38.pyc delete mode 100644 Jobs_Collections/venv/Lib/site-packages/pip/_internal/distributions/__pycache__/base.cpython-38.pyc delete mode 100644 Jobs_Collections/venv/Lib/site-packages/pip/_internal/distributions/__pycache__/installed.cpython-38.pyc delete mode 100644 Jobs_Collections/venv/Lib/site-packages/pip/_internal/distributions/__pycache__/source.cpython-38.pyc delete mode 100644 Jobs_Collections/venv/Lib/site-packages/pip/_internal/distributions/__pycache__/wheel.cpython-38.pyc delete mode 100644 Jobs_Collections/venv/Lib/site-packages/pip/_internal/distributions/base.py delete mode 100644 Jobs_Collections/venv/Lib/site-packages/pip/_internal/distributions/installed.py delete mode 100644 Jobs_Collections/venv/Lib/site-packages/pip/_internal/distributions/source.py delete mode 100644 Jobs_Collections/venv/Lib/site-packages/pip/_internal/distributions/wheel.py delete mode 100644 Jobs_Collections/venv/Lib/site-packages/pip/_internal/download.py delete mode 100644 Jobs_Collections/venv/Lib/site-packages/pip/_internal/exceptions.py delete mode 100644 Jobs_Collections/venv/Lib/site-packages/pip/_internal/index.py delete mode 100644 Jobs_Collections/venv/Lib/site-packages/pip/_internal/legacy_resolve.py delete mode 100644 Jobs_Collections/venv/Lib/site-packages/pip/_internal/locations.py delete mode 100644 Jobs_Collections/venv/Lib/site-packages/pip/_internal/models/__init__.py delete mode 100644 Jobs_Collections/venv/Lib/site-packages/pip/_internal/models/__pycache__/__init__.cpython-38.pyc delete mode 100644 Jobs_Collections/venv/Lib/site-packages/pip/_internal/models/__pycache__/candidate.cpython-38.pyc delete mode 100644 Jobs_Collections/venv/Lib/site-packages/pip/_internal/models/__pycache__/format_control.cpython-38.pyc delete mode 100644 Jobs_Collections/venv/Lib/site-packages/pip/_internal/models/__pycache__/index.cpython-38.pyc delete mode 100644 Jobs_Collections/venv/Lib/site-packages/pip/_internal/models/__pycache__/link.cpython-38.pyc delete mode 100644 Jobs_Collections/venv/Lib/site-packages/pip/_internal/models/__pycache__/search_scope.cpython-38.pyc delete mode 100644 Jobs_Collections/venv/Lib/site-packages/pip/_internal/models/__pycache__/selection_prefs.cpython-38.pyc delete mode 100644 Jobs_Collections/venv/Lib/site-packages/pip/_internal/models/__pycache__/target_python.cpython-38.pyc delete mode 100644 Jobs_Collections/venv/Lib/site-packages/pip/_internal/models/candidate.py delete mode 100644 Jobs_Collections/venv/Lib/site-packages/pip/_internal/models/format_control.py delete mode 100644 Jobs_Collections/venv/Lib/site-packages/pip/_internal/models/index.py delete mode 100644 Jobs_Collections/venv/Lib/site-packages/pip/_internal/models/link.py delete mode 100644 Jobs_Collections/venv/Lib/site-packages/pip/_internal/models/search_scope.py delete mode 100644 Jobs_Collections/venv/Lib/site-packages/pip/_internal/models/selection_prefs.py delete mode 100644 Jobs_Collections/venv/Lib/site-packages/pip/_internal/models/target_python.py delete mode 100644 Jobs_Collections/venv/Lib/site-packages/pip/_internal/operations/__init__.py delete mode 100644 Jobs_Collections/venv/Lib/site-packages/pip/_internal/operations/__pycache__/__init__.cpython-38.pyc delete mode 100644 Jobs_Collections/venv/Lib/site-packages/pip/_internal/operations/__pycache__/check.cpython-38.pyc delete mode 100644 Jobs_Collections/venv/Lib/site-packages/pip/_internal/operations/__pycache__/freeze.cpython-38.pyc delete mode 100644 Jobs_Collections/venv/Lib/site-packages/pip/_internal/operations/__pycache__/prepare.cpython-38.pyc delete mode 100644 Jobs_Collections/venv/Lib/site-packages/pip/_internal/operations/check.py delete mode 100644 Jobs_Collections/venv/Lib/site-packages/pip/_internal/operations/freeze.py delete mode 100644 Jobs_Collections/venv/Lib/site-packages/pip/_internal/operations/prepare.py delete mode 100644 Jobs_Collections/venv/Lib/site-packages/pip/_internal/pep425tags.py delete mode 100644 Jobs_Collections/venv/Lib/site-packages/pip/_internal/pyproject.py delete mode 100644 Jobs_Collections/venv/Lib/site-packages/pip/_internal/req/__init__.py delete mode 100644 Jobs_Collections/venv/Lib/site-packages/pip/_internal/req/__pycache__/__init__.cpython-38.pyc delete mode 100644 Jobs_Collections/venv/Lib/site-packages/pip/_internal/req/__pycache__/constructors.cpython-38.pyc delete mode 100644 Jobs_Collections/venv/Lib/site-packages/pip/_internal/req/__pycache__/req_file.cpython-38.pyc delete mode 100644 Jobs_Collections/venv/Lib/site-packages/pip/_internal/req/__pycache__/req_install.cpython-38.pyc delete mode 100644 Jobs_Collections/venv/Lib/site-packages/pip/_internal/req/__pycache__/req_set.cpython-38.pyc delete mode 100644 Jobs_Collections/venv/Lib/site-packages/pip/_internal/req/__pycache__/req_tracker.cpython-38.pyc delete mode 100644 Jobs_Collections/venv/Lib/site-packages/pip/_internal/req/__pycache__/req_uninstall.cpython-38.pyc delete mode 100644 Jobs_Collections/venv/Lib/site-packages/pip/_internal/req/constructors.py delete mode 100644 Jobs_Collections/venv/Lib/site-packages/pip/_internal/req/req_file.py delete mode 100644 Jobs_Collections/venv/Lib/site-packages/pip/_internal/req/req_install.py delete mode 100644 Jobs_Collections/venv/Lib/site-packages/pip/_internal/req/req_set.py delete mode 100644 Jobs_Collections/venv/Lib/site-packages/pip/_internal/req/req_tracker.py delete mode 100644 Jobs_Collections/venv/Lib/site-packages/pip/_internal/req/req_uninstall.py delete mode 100644 Jobs_Collections/venv/Lib/site-packages/pip/_internal/utils/__init__.py delete mode 100644 Jobs_Collections/venv/Lib/site-packages/pip/_internal/utils/__pycache__/__init__.cpython-38.pyc delete mode 100644 Jobs_Collections/venv/Lib/site-packages/pip/_internal/utils/__pycache__/appdirs.cpython-38.pyc delete mode 100644 Jobs_Collections/venv/Lib/site-packages/pip/_internal/utils/__pycache__/compat.cpython-38.pyc delete mode 100644 Jobs_Collections/venv/Lib/site-packages/pip/_internal/utils/__pycache__/deprecation.cpython-38.pyc delete mode 100644 Jobs_Collections/venv/Lib/site-packages/pip/_internal/utils/__pycache__/encoding.cpython-38.pyc delete mode 100644 Jobs_Collections/venv/Lib/site-packages/pip/_internal/utils/__pycache__/filesystem.cpython-38.pyc delete mode 100644 Jobs_Collections/venv/Lib/site-packages/pip/_internal/utils/__pycache__/glibc.cpython-38.pyc delete mode 100644 Jobs_Collections/venv/Lib/site-packages/pip/_internal/utils/__pycache__/hashes.cpython-38.pyc delete mode 100644 Jobs_Collections/venv/Lib/site-packages/pip/_internal/utils/__pycache__/logging.cpython-38.pyc delete mode 100644 Jobs_Collections/venv/Lib/site-packages/pip/_internal/utils/__pycache__/marker_files.cpython-38.pyc delete mode 100644 Jobs_Collections/venv/Lib/site-packages/pip/_internal/utils/__pycache__/misc.cpython-38.pyc delete mode 100644 Jobs_Collections/venv/Lib/site-packages/pip/_internal/utils/__pycache__/models.cpython-38.pyc delete mode 100644 Jobs_Collections/venv/Lib/site-packages/pip/_internal/utils/__pycache__/outdated.cpython-38.pyc delete mode 100644 Jobs_Collections/venv/Lib/site-packages/pip/_internal/utils/__pycache__/packaging.cpython-38.pyc delete mode 100644 Jobs_Collections/venv/Lib/site-packages/pip/_internal/utils/__pycache__/setuptools_build.cpython-38.pyc delete mode 100644 Jobs_Collections/venv/Lib/site-packages/pip/_internal/utils/__pycache__/temp_dir.cpython-38.pyc delete mode 100644 Jobs_Collections/venv/Lib/site-packages/pip/_internal/utils/__pycache__/typing.cpython-38.pyc delete mode 100644 Jobs_Collections/venv/Lib/site-packages/pip/_internal/utils/__pycache__/ui.cpython-38.pyc delete mode 100644 Jobs_Collections/venv/Lib/site-packages/pip/_internal/utils/__pycache__/virtualenv.cpython-38.pyc delete mode 100644 Jobs_Collections/venv/Lib/site-packages/pip/_internal/utils/appdirs.py delete mode 100644 Jobs_Collections/venv/Lib/site-packages/pip/_internal/utils/compat.py delete mode 100644 Jobs_Collections/venv/Lib/site-packages/pip/_internal/utils/deprecation.py delete mode 100644 Jobs_Collections/venv/Lib/site-packages/pip/_internal/utils/encoding.py delete mode 100644 Jobs_Collections/venv/Lib/site-packages/pip/_internal/utils/filesystem.py delete mode 100644 Jobs_Collections/venv/Lib/site-packages/pip/_internal/utils/glibc.py delete mode 100644 Jobs_Collections/venv/Lib/site-packages/pip/_internal/utils/hashes.py delete mode 100644 Jobs_Collections/venv/Lib/site-packages/pip/_internal/utils/logging.py delete mode 100644 Jobs_Collections/venv/Lib/site-packages/pip/_internal/utils/marker_files.py delete mode 100644 Jobs_Collections/venv/Lib/site-packages/pip/_internal/utils/misc.py delete mode 100644 Jobs_Collections/venv/Lib/site-packages/pip/_internal/utils/models.py delete mode 100644 Jobs_Collections/venv/Lib/site-packages/pip/_internal/utils/outdated.py delete mode 100644 Jobs_Collections/venv/Lib/site-packages/pip/_internal/utils/packaging.py delete mode 100644 Jobs_Collections/venv/Lib/site-packages/pip/_internal/utils/setuptools_build.py delete mode 100644 Jobs_Collections/venv/Lib/site-packages/pip/_internal/utils/temp_dir.py delete mode 100644 Jobs_Collections/venv/Lib/site-packages/pip/_internal/utils/typing.py delete mode 100644 Jobs_Collections/venv/Lib/site-packages/pip/_internal/utils/ui.py delete mode 100644 Jobs_Collections/venv/Lib/site-packages/pip/_internal/utils/virtualenv.py delete mode 100644 Jobs_Collections/venv/Lib/site-packages/pip/_internal/vcs/__init__.py delete mode 100644 Jobs_Collections/venv/Lib/site-packages/pip/_internal/vcs/__pycache__/__init__.cpython-38.pyc delete mode 100644 Jobs_Collections/venv/Lib/site-packages/pip/_internal/vcs/__pycache__/bazaar.cpython-38.pyc delete mode 100644 Jobs_Collections/venv/Lib/site-packages/pip/_internal/vcs/__pycache__/git.cpython-38.pyc delete mode 100644 Jobs_Collections/venv/Lib/site-packages/pip/_internal/vcs/__pycache__/mercurial.cpython-38.pyc delete mode 100644 Jobs_Collections/venv/Lib/site-packages/pip/_internal/vcs/__pycache__/subversion.cpython-38.pyc delete mode 100644 Jobs_Collections/venv/Lib/site-packages/pip/_internal/vcs/__pycache__/versioncontrol.cpython-38.pyc delete mode 100644 Jobs_Collections/venv/Lib/site-packages/pip/_internal/vcs/bazaar.py delete mode 100644 Jobs_Collections/venv/Lib/site-packages/pip/_internal/vcs/git.py delete mode 100644 Jobs_Collections/venv/Lib/site-packages/pip/_internal/vcs/mercurial.py delete mode 100644 Jobs_Collections/venv/Lib/site-packages/pip/_internal/vcs/subversion.py delete mode 100644 Jobs_Collections/venv/Lib/site-packages/pip/_internal/vcs/versioncontrol.py delete mode 100644 Jobs_Collections/venv/Lib/site-packages/pip/_internal/wheel.py delete mode 100644 Jobs_Collections/venv/Lib/site-packages/pip/_vendor/__init__.py delete mode 100644 Jobs_Collections/venv/Lib/site-packages/pip/_vendor/__pycache__/__init__.cpython-38.pyc delete mode 100644 Jobs_Collections/venv/Lib/site-packages/pip/_vendor/__pycache__/appdirs.cpython-38.pyc delete mode 100644 Jobs_Collections/venv/Lib/site-packages/pip/_vendor/__pycache__/distro.cpython-38.pyc delete mode 100644 Jobs_Collections/venv/Lib/site-packages/pip/_vendor/__pycache__/ipaddress.cpython-38.pyc delete mode 100644 Jobs_Collections/venv/Lib/site-packages/pip/_vendor/__pycache__/pyparsing.cpython-38.pyc delete mode 100644 Jobs_Collections/venv/Lib/site-packages/pip/_vendor/__pycache__/retrying.cpython-38.pyc delete mode 100644 Jobs_Collections/venv/Lib/site-packages/pip/_vendor/__pycache__/six.cpython-38.pyc delete mode 100644 Jobs_Collections/venv/Lib/site-packages/pip/_vendor/appdirs.py delete mode 100644 Jobs_Collections/venv/Lib/site-packages/pip/_vendor/cachecontrol/__init__.py delete mode 100644 Jobs_Collections/venv/Lib/site-packages/pip/_vendor/cachecontrol/__pycache__/__init__.cpython-38.pyc delete mode 100644 Jobs_Collections/venv/Lib/site-packages/pip/_vendor/cachecontrol/__pycache__/_cmd.cpython-38.pyc delete mode 100644 Jobs_Collections/venv/Lib/site-packages/pip/_vendor/cachecontrol/__pycache__/adapter.cpython-38.pyc delete mode 100644 Jobs_Collections/venv/Lib/site-packages/pip/_vendor/cachecontrol/__pycache__/cache.cpython-38.pyc delete mode 100644 Jobs_Collections/venv/Lib/site-packages/pip/_vendor/cachecontrol/__pycache__/compat.cpython-38.pyc delete mode 100644 Jobs_Collections/venv/Lib/site-packages/pip/_vendor/cachecontrol/__pycache__/controller.cpython-38.pyc delete mode 100644 Jobs_Collections/venv/Lib/site-packages/pip/_vendor/cachecontrol/__pycache__/filewrapper.cpython-38.pyc delete mode 100644 Jobs_Collections/venv/Lib/site-packages/pip/_vendor/cachecontrol/__pycache__/heuristics.cpython-38.pyc delete mode 100644 Jobs_Collections/venv/Lib/site-packages/pip/_vendor/cachecontrol/__pycache__/serialize.cpython-38.pyc delete mode 100644 Jobs_Collections/venv/Lib/site-packages/pip/_vendor/cachecontrol/__pycache__/wrapper.cpython-38.pyc delete mode 100644 Jobs_Collections/venv/Lib/site-packages/pip/_vendor/cachecontrol/_cmd.py delete mode 100644 Jobs_Collections/venv/Lib/site-packages/pip/_vendor/cachecontrol/adapter.py delete mode 100644 Jobs_Collections/venv/Lib/site-packages/pip/_vendor/cachecontrol/cache.py delete mode 100644 Jobs_Collections/venv/Lib/site-packages/pip/_vendor/cachecontrol/caches/__init__.py delete mode 100644 Jobs_Collections/venv/Lib/site-packages/pip/_vendor/cachecontrol/caches/__pycache__/__init__.cpython-38.pyc delete mode 100644 Jobs_Collections/venv/Lib/site-packages/pip/_vendor/cachecontrol/caches/__pycache__/file_cache.cpython-38.pyc delete mode 100644 Jobs_Collections/venv/Lib/site-packages/pip/_vendor/cachecontrol/caches/__pycache__/redis_cache.cpython-38.pyc delete mode 100644 Jobs_Collections/venv/Lib/site-packages/pip/_vendor/cachecontrol/caches/file_cache.py delete mode 100644 Jobs_Collections/venv/Lib/site-packages/pip/_vendor/cachecontrol/caches/redis_cache.py delete mode 100644 Jobs_Collections/venv/Lib/site-packages/pip/_vendor/cachecontrol/compat.py delete mode 100644 Jobs_Collections/venv/Lib/site-packages/pip/_vendor/cachecontrol/controller.py delete mode 100644 Jobs_Collections/venv/Lib/site-packages/pip/_vendor/cachecontrol/filewrapper.py delete mode 100644 Jobs_Collections/venv/Lib/site-packages/pip/_vendor/cachecontrol/heuristics.py delete mode 100644 Jobs_Collections/venv/Lib/site-packages/pip/_vendor/cachecontrol/serialize.py delete mode 100644 Jobs_Collections/venv/Lib/site-packages/pip/_vendor/cachecontrol/wrapper.py delete mode 100644 Jobs_Collections/venv/Lib/site-packages/pip/_vendor/certifi/__init__.py delete mode 100644 Jobs_Collections/venv/Lib/site-packages/pip/_vendor/certifi/__main__.py delete mode 100644 Jobs_Collections/venv/Lib/site-packages/pip/_vendor/certifi/__pycache__/__init__.cpython-38.pyc delete mode 100644 Jobs_Collections/venv/Lib/site-packages/pip/_vendor/certifi/__pycache__/__main__.cpython-38.pyc delete mode 100644 Jobs_Collections/venv/Lib/site-packages/pip/_vendor/certifi/__pycache__/core.cpython-38.pyc delete mode 100644 Jobs_Collections/venv/Lib/site-packages/pip/_vendor/certifi/cacert.pem delete mode 100644 Jobs_Collections/venv/Lib/site-packages/pip/_vendor/certifi/core.py delete mode 100644 Jobs_Collections/venv/Lib/site-packages/pip/_vendor/chardet/__init__.py delete mode 100644 Jobs_Collections/venv/Lib/site-packages/pip/_vendor/chardet/__pycache__/__init__.cpython-38.pyc delete mode 100644 Jobs_Collections/venv/Lib/site-packages/pip/_vendor/chardet/__pycache__/big5freq.cpython-38.pyc delete mode 100644 Jobs_Collections/venv/Lib/site-packages/pip/_vendor/chardet/__pycache__/big5prober.cpython-38.pyc delete mode 100644 Jobs_Collections/venv/Lib/site-packages/pip/_vendor/chardet/__pycache__/chardistribution.cpython-38.pyc delete mode 100644 Jobs_Collections/venv/Lib/site-packages/pip/_vendor/chardet/__pycache__/charsetgroupprober.cpython-38.pyc delete mode 100644 Jobs_Collections/venv/Lib/site-packages/pip/_vendor/chardet/__pycache__/charsetprober.cpython-38.pyc delete mode 100644 Jobs_Collections/venv/Lib/site-packages/pip/_vendor/chardet/__pycache__/codingstatemachine.cpython-38.pyc delete mode 100644 Jobs_Collections/venv/Lib/site-packages/pip/_vendor/chardet/__pycache__/compat.cpython-38.pyc delete mode 100644 Jobs_Collections/venv/Lib/site-packages/pip/_vendor/chardet/__pycache__/cp949prober.cpython-38.pyc delete mode 100644 Jobs_Collections/venv/Lib/site-packages/pip/_vendor/chardet/__pycache__/enums.cpython-38.pyc delete mode 100644 Jobs_Collections/venv/Lib/site-packages/pip/_vendor/chardet/__pycache__/escprober.cpython-38.pyc delete mode 100644 Jobs_Collections/venv/Lib/site-packages/pip/_vendor/chardet/__pycache__/escsm.cpython-38.pyc delete mode 100644 Jobs_Collections/venv/Lib/site-packages/pip/_vendor/chardet/__pycache__/eucjpprober.cpython-38.pyc delete mode 100644 Jobs_Collections/venv/Lib/site-packages/pip/_vendor/chardet/__pycache__/euckrfreq.cpython-38.pyc delete mode 100644 Jobs_Collections/venv/Lib/site-packages/pip/_vendor/chardet/__pycache__/euckrprober.cpython-38.pyc delete mode 100644 Jobs_Collections/venv/Lib/site-packages/pip/_vendor/chardet/__pycache__/euctwfreq.cpython-38.pyc delete mode 100644 Jobs_Collections/venv/Lib/site-packages/pip/_vendor/chardet/__pycache__/euctwprober.cpython-38.pyc delete mode 100644 Jobs_Collections/venv/Lib/site-packages/pip/_vendor/chardet/__pycache__/gb2312freq.cpython-38.pyc delete mode 100644 Jobs_Collections/venv/Lib/site-packages/pip/_vendor/chardet/__pycache__/gb2312prober.cpython-38.pyc delete mode 100644 Jobs_Collections/venv/Lib/site-packages/pip/_vendor/chardet/__pycache__/hebrewprober.cpython-38.pyc delete mode 100644 Jobs_Collections/venv/Lib/site-packages/pip/_vendor/chardet/__pycache__/jisfreq.cpython-38.pyc delete mode 100644 Jobs_Collections/venv/Lib/site-packages/pip/_vendor/chardet/__pycache__/jpcntx.cpython-38.pyc delete mode 100644 Jobs_Collections/venv/Lib/site-packages/pip/_vendor/chardet/__pycache__/langbulgarianmodel.cpython-38.pyc delete mode 100644 Jobs_Collections/venv/Lib/site-packages/pip/_vendor/chardet/__pycache__/langcyrillicmodel.cpython-38.pyc delete mode 100644 Jobs_Collections/venv/Lib/site-packages/pip/_vendor/chardet/__pycache__/langgreekmodel.cpython-38.pyc delete mode 100644 Jobs_Collections/venv/Lib/site-packages/pip/_vendor/chardet/__pycache__/langhebrewmodel.cpython-38.pyc delete mode 100644 Jobs_Collections/venv/Lib/site-packages/pip/_vendor/chardet/__pycache__/langhungarianmodel.cpython-38.pyc delete mode 100644 Jobs_Collections/venv/Lib/site-packages/pip/_vendor/chardet/__pycache__/langthaimodel.cpython-38.pyc delete mode 100644 Jobs_Collections/venv/Lib/site-packages/pip/_vendor/chardet/__pycache__/langturkishmodel.cpython-38.pyc delete mode 100644 Jobs_Collections/venv/Lib/site-packages/pip/_vendor/chardet/__pycache__/latin1prober.cpython-38.pyc delete mode 100644 Jobs_Collections/venv/Lib/site-packages/pip/_vendor/chardet/__pycache__/mbcharsetprober.cpython-38.pyc delete mode 100644 Jobs_Collections/venv/Lib/site-packages/pip/_vendor/chardet/__pycache__/mbcsgroupprober.cpython-38.pyc delete mode 100644 Jobs_Collections/venv/Lib/site-packages/pip/_vendor/chardet/__pycache__/mbcssm.cpython-38.pyc delete mode 100644 Jobs_Collections/venv/Lib/site-packages/pip/_vendor/chardet/__pycache__/sbcharsetprober.cpython-38.pyc delete mode 100644 Jobs_Collections/venv/Lib/site-packages/pip/_vendor/chardet/__pycache__/sbcsgroupprober.cpython-38.pyc delete mode 100644 Jobs_Collections/venv/Lib/site-packages/pip/_vendor/chardet/__pycache__/sjisprober.cpython-38.pyc delete mode 100644 Jobs_Collections/venv/Lib/site-packages/pip/_vendor/chardet/__pycache__/universaldetector.cpython-38.pyc delete mode 100644 Jobs_Collections/venv/Lib/site-packages/pip/_vendor/chardet/__pycache__/utf8prober.cpython-38.pyc delete mode 100644 Jobs_Collections/venv/Lib/site-packages/pip/_vendor/chardet/__pycache__/version.cpython-38.pyc delete mode 100644 Jobs_Collections/venv/Lib/site-packages/pip/_vendor/chardet/big5freq.py delete mode 100644 Jobs_Collections/venv/Lib/site-packages/pip/_vendor/chardet/big5prober.py delete mode 100644 Jobs_Collections/venv/Lib/site-packages/pip/_vendor/chardet/chardistribution.py delete mode 100644 Jobs_Collections/venv/Lib/site-packages/pip/_vendor/chardet/charsetgroupprober.py delete mode 100644 Jobs_Collections/venv/Lib/site-packages/pip/_vendor/chardet/charsetprober.py delete mode 100644 Jobs_Collections/venv/Lib/site-packages/pip/_vendor/chardet/cli/__init__.py delete mode 100644 Jobs_Collections/venv/Lib/site-packages/pip/_vendor/chardet/cli/__pycache__/__init__.cpython-38.pyc delete mode 100644 Jobs_Collections/venv/Lib/site-packages/pip/_vendor/chardet/cli/__pycache__/chardetect.cpython-38.pyc delete mode 100644 Jobs_Collections/venv/Lib/site-packages/pip/_vendor/chardet/cli/chardetect.py delete mode 100644 Jobs_Collections/venv/Lib/site-packages/pip/_vendor/chardet/codingstatemachine.py delete mode 100644 Jobs_Collections/venv/Lib/site-packages/pip/_vendor/chardet/compat.py delete mode 100644 Jobs_Collections/venv/Lib/site-packages/pip/_vendor/chardet/cp949prober.py delete mode 100644 Jobs_Collections/venv/Lib/site-packages/pip/_vendor/chardet/enums.py delete mode 100644 Jobs_Collections/venv/Lib/site-packages/pip/_vendor/chardet/escprober.py delete mode 100644 Jobs_Collections/venv/Lib/site-packages/pip/_vendor/chardet/escsm.py delete mode 100644 Jobs_Collections/venv/Lib/site-packages/pip/_vendor/chardet/eucjpprober.py delete mode 100644 Jobs_Collections/venv/Lib/site-packages/pip/_vendor/chardet/euckrfreq.py delete mode 100644 Jobs_Collections/venv/Lib/site-packages/pip/_vendor/chardet/euckrprober.py delete mode 100644 Jobs_Collections/venv/Lib/site-packages/pip/_vendor/chardet/euctwfreq.py delete mode 100644 Jobs_Collections/venv/Lib/site-packages/pip/_vendor/chardet/euctwprober.py delete mode 100644 Jobs_Collections/venv/Lib/site-packages/pip/_vendor/chardet/gb2312freq.py delete mode 100644 Jobs_Collections/venv/Lib/site-packages/pip/_vendor/chardet/gb2312prober.py delete mode 100644 Jobs_Collections/venv/Lib/site-packages/pip/_vendor/chardet/hebrewprober.py delete mode 100644 Jobs_Collections/venv/Lib/site-packages/pip/_vendor/chardet/jisfreq.py delete mode 100644 Jobs_Collections/venv/Lib/site-packages/pip/_vendor/chardet/jpcntx.py delete mode 100644 Jobs_Collections/venv/Lib/site-packages/pip/_vendor/chardet/langbulgarianmodel.py delete mode 100644 Jobs_Collections/venv/Lib/site-packages/pip/_vendor/chardet/langcyrillicmodel.py delete mode 100644 Jobs_Collections/venv/Lib/site-packages/pip/_vendor/chardet/langgreekmodel.py delete mode 100644 Jobs_Collections/venv/Lib/site-packages/pip/_vendor/chardet/langhebrewmodel.py delete mode 100644 Jobs_Collections/venv/Lib/site-packages/pip/_vendor/chardet/langhungarianmodel.py delete mode 100644 Jobs_Collections/venv/Lib/site-packages/pip/_vendor/chardet/langthaimodel.py delete mode 100644 Jobs_Collections/venv/Lib/site-packages/pip/_vendor/chardet/langturkishmodel.py delete mode 100644 Jobs_Collections/venv/Lib/site-packages/pip/_vendor/chardet/latin1prober.py delete mode 100644 Jobs_Collections/venv/Lib/site-packages/pip/_vendor/chardet/mbcharsetprober.py delete mode 100644 Jobs_Collections/venv/Lib/site-packages/pip/_vendor/chardet/mbcsgroupprober.py delete mode 100644 Jobs_Collections/venv/Lib/site-packages/pip/_vendor/chardet/mbcssm.py delete mode 100644 Jobs_Collections/venv/Lib/site-packages/pip/_vendor/chardet/sbcharsetprober.py delete mode 100644 Jobs_Collections/venv/Lib/site-packages/pip/_vendor/chardet/sbcsgroupprober.py delete mode 100644 Jobs_Collections/venv/Lib/site-packages/pip/_vendor/chardet/sjisprober.py delete mode 100644 Jobs_Collections/venv/Lib/site-packages/pip/_vendor/chardet/universaldetector.py delete mode 100644 Jobs_Collections/venv/Lib/site-packages/pip/_vendor/chardet/utf8prober.py delete mode 100644 Jobs_Collections/venv/Lib/site-packages/pip/_vendor/chardet/version.py delete mode 100644 Jobs_Collections/venv/Lib/site-packages/pip/_vendor/colorama/__init__.py delete mode 100644 Jobs_Collections/venv/Lib/site-packages/pip/_vendor/colorama/__pycache__/__init__.cpython-38.pyc delete mode 100644 Jobs_Collections/venv/Lib/site-packages/pip/_vendor/colorama/__pycache__/ansi.cpython-38.pyc delete mode 100644 Jobs_Collections/venv/Lib/site-packages/pip/_vendor/colorama/__pycache__/ansitowin32.cpython-38.pyc delete mode 100644 Jobs_Collections/venv/Lib/site-packages/pip/_vendor/colorama/__pycache__/initialise.cpython-38.pyc delete mode 100644 Jobs_Collections/venv/Lib/site-packages/pip/_vendor/colorama/__pycache__/win32.cpython-38.pyc delete mode 100644 Jobs_Collections/venv/Lib/site-packages/pip/_vendor/colorama/__pycache__/winterm.cpython-38.pyc delete mode 100644 Jobs_Collections/venv/Lib/site-packages/pip/_vendor/colorama/ansi.py delete mode 100644 Jobs_Collections/venv/Lib/site-packages/pip/_vendor/colorama/ansitowin32.py delete mode 100644 Jobs_Collections/venv/Lib/site-packages/pip/_vendor/colorama/initialise.py delete mode 100644 Jobs_Collections/venv/Lib/site-packages/pip/_vendor/colorama/win32.py delete mode 100644 Jobs_Collections/venv/Lib/site-packages/pip/_vendor/colorama/winterm.py delete mode 100644 Jobs_Collections/venv/Lib/site-packages/pip/_vendor/distlib/__init__.py delete mode 100644 Jobs_Collections/venv/Lib/site-packages/pip/_vendor/distlib/__pycache__/__init__.cpython-38.pyc delete mode 100644 Jobs_Collections/venv/Lib/site-packages/pip/_vendor/distlib/__pycache__/compat.cpython-38.pyc delete mode 100644 Jobs_Collections/venv/Lib/site-packages/pip/_vendor/distlib/__pycache__/database.cpython-38.pyc delete mode 100644 Jobs_Collections/venv/Lib/site-packages/pip/_vendor/distlib/__pycache__/index.cpython-38.pyc delete mode 100644 Jobs_Collections/venv/Lib/site-packages/pip/_vendor/distlib/__pycache__/locators.cpython-38.pyc delete mode 100644 Jobs_Collections/venv/Lib/site-packages/pip/_vendor/distlib/__pycache__/manifest.cpython-38.pyc delete mode 100644 Jobs_Collections/venv/Lib/site-packages/pip/_vendor/distlib/__pycache__/markers.cpython-38.pyc delete mode 100644 Jobs_Collections/venv/Lib/site-packages/pip/_vendor/distlib/__pycache__/metadata.cpython-38.pyc delete mode 100644 Jobs_Collections/venv/Lib/site-packages/pip/_vendor/distlib/__pycache__/resources.cpython-38.pyc delete mode 100644 Jobs_Collections/venv/Lib/site-packages/pip/_vendor/distlib/__pycache__/scripts.cpython-38.pyc delete mode 100644 Jobs_Collections/venv/Lib/site-packages/pip/_vendor/distlib/__pycache__/util.cpython-38.pyc delete mode 100644 Jobs_Collections/venv/Lib/site-packages/pip/_vendor/distlib/__pycache__/version.cpython-38.pyc delete mode 100644 Jobs_Collections/venv/Lib/site-packages/pip/_vendor/distlib/__pycache__/wheel.cpython-38.pyc delete mode 100644 Jobs_Collections/venv/Lib/site-packages/pip/_vendor/distlib/_backport/__init__.py delete mode 100644 Jobs_Collections/venv/Lib/site-packages/pip/_vendor/distlib/_backport/__pycache__/__init__.cpython-38.pyc delete mode 100644 Jobs_Collections/venv/Lib/site-packages/pip/_vendor/distlib/_backport/__pycache__/misc.cpython-38.pyc delete mode 100644 Jobs_Collections/venv/Lib/site-packages/pip/_vendor/distlib/_backport/__pycache__/shutil.cpython-38.pyc delete mode 100644 Jobs_Collections/venv/Lib/site-packages/pip/_vendor/distlib/_backport/__pycache__/sysconfig.cpython-38.pyc delete mode 100644 Jobs_Collections/venv/Lib/site-packages/pip/_vendor/distlib/_backport/__pycache__/tarfile.cpython-38.pyc delete mode 100644 Jobs_Collections/venv/Lib/site-packages/pip/_vendor/distlib/_backport/misc.py delete mode 100644 Jobs_Collections/venv/Lib/site-packages/pip/_vendor/distlib/_backport/shutil.py delete mode 100644 Jobs_Collections/venv/Lib/site-packages/pip/_vendor/distlib/_backport/sysconfig.cfg delete mode 100644 Jobs_Collections/venv/Lib/site-packages/pip/_vendor/distlib/_backport/sysconfig.py delete mode 100644 Jobs_Collections/venv/Lib/site-packages/pip/_vendor/distlib/_backport/tarfile.py delete mode 100644 Jobs_Collections/venv/Lib/site-packages/pip/_vendor/distlib/compat.py delete mode 100644 Jobs_Collections/venv/Lib/site-packages/pip/_vendor/distlib/database.py delete mode 100644 Jobs_Collections/venv/Lib/site-packages/pip/_vendor/distlib/index.py delete mode 100644 Jobs_Collections/venv/Lib/site-packages/pip/_vendor/distlib/locators.py delete mode 100644 Jobs_Collections/venv/Lib/site-packages/pip/_vendor/distlib/manifest.py delete mode 100644 Jobs_Collections/venv/Lib/site-packages/pip/_vendor/distlib/markers.py delete mode 100644 Jobs_Collections/venv/Lib/site-packages/pip/_vendor/distlib/metadata.py delete mode 100644 Jobs_Collections/venv/Lib/site-packages/pip/_vendor/distlib/resources.py delete mode 100644 Jobs_Collections/venv/Lib/site-packages/pip/_vendor/distlib/scripts.py delete mode 100644 Jobs_Collections/venv/Lib/site-packages/pip/_vendor/distlib/t32.exe delete mode 100644 Jobs_Collections/venv/Lib/site-packages/pip/_vendor/distlib/t64.exe delete mode 100644 Jobs_Collections/venv/Lib/site-packages/pip/_vendor/distlib/util.py delete mode 100644 Jobs_Collections/venv/Lib/site-packages/pip/_vendor/distlib/version.py delete mode 100644 Jobs_Collections/venv/Lib/site-packages/pip/_vendor/distlib/w32.exe delete mode 100644 Jobs_Collections/venv/Lib/site-packages/pip/_vendor/distlib/w64.exe delete mode 100644 Jobs_Collections/venv/Lib/site-packages/pip/_vendor/distlib/wheel.py delete mode 100644 Jobs_Collections/venv/Lib/site-packages/pip/_vendor/distro.py delete mode 100644 Jobs_Collections/venv/Lib/site-packages/pip/_vendor/html5lib/__init__.py delete mode 100644 Jobs_Collections/venv/Lib/site-packages/pip/_vendor/html5lib/__pycache__/__init__.cpython-38.pyc delete mode 100644 Jobs_Collections/venv/Lib/site-packages/pip/_vendor/html5lib/__pycache__/_ihatexml.cpython-38.pyc delete mode 100644 Jobs_Collections/venv/Lib/site-packages/pip/_vendor/html5lib/__pycache__/_inputstream.cpython-38.pyc delete mode 100644 Jobs_Collections/venv/Lib/site-packages/pip/_vendor/html5lib/__pycache__/_tokenizer.cpython-38.pyc delete mode 100644 Jobs_Collections/venv/Lib/site-packages/pip/_vendor/html5lib/__pycache__/_utils.cpython-38.pyc delete mode 100644 Jobs_Collections/venv/Lib/site-packages/pip/_vendor/html5lib/__pycache__/constants.cpython-38.pyc delete mode 100644 Jobs_Collections/venv/Lib/site-packages/pip/_vendor/html5lib/__pycache__/html5parser.cpython-38.pyc delete mode 100644 Jobs_Collections/venv/Lib/site-packages/pip/_vendor/html5lib/__pycache__/serializer.cpython-38.pyc delete mode 100644 Jobs_Collections/venv/Lib/site-packages/pip/_vendor/html5lib/_ihatexml.py delete mode 100644 Jobs_Collections/venv/Lib/site-packages/pip/_vendor/html5lib/_inputstream.py delete mode 100644 Jobs_Collections/venv/Lib/site-packages/pip/_vendor/html5lib/_tokenizer.py delete mode 100644 Jobs_Collections/venv/Lib/site-packages/pip/_vendor/html5lib/_trie/__init__.py delete mode 100644 Jobs_Collections/venv/Lib/site-packages/pip/_vendor/html5lib/_trie/__pycache__/__init__.cpython-38.pyc delete mode 100644 Jobs_Collections/venv/Lib/site-packages/pip/_vendor/html5lib/_trie/__pycache__/_base.cpython-38.pyc delete mode 100644 Jobs_Collections/venv/Lib/site-packages/pip/_vendor/html5lib/_trie/__pycache__/datrie.cpython-38.pyc delete mode 100644 Jobs_Collections/venv/Lib/site-packages/pip/_vendor/html5lib/_trie/__pycache__/py.cpython-38.pyc delete mode 100644 Jobs_Collections/venv/Lib/site-packages/pip/_vendor/html5lib/_trie/_base.py delete mode 100644 Jobs_Collections/venv/Lib/site-packages/pip/_vendor/html5lib/_trie/datrie.py delete mode 100644 Jobs_Collections/venv/Lib/site-packages/pip/_vendor/html5lib/_trie/py.py delete mode 100644 Jobs_Collections/venv/Lib/site-packages/pip/_vendor/html5lib/_utils.py delete mode 100644 Jobs_Collections/venv/Lib/site-packages/pip/_vendor/html5lib/constants.py delete mode 100644 Jobs_Collections/venv/Lib/site-packages/pip/_vendor/html5lib/filters/__init__.py delete mode 100644 Jobs_Collections/venv/Lib/site-packages/pip/_vendor/html5lib/filters/__pycache__/__init__.cpython-38.pyc delete mode 100644 Jobs_Collections/venv/Lib/site-packages/pip/_vendor/html5lib/filters/__pycache__/alphabeticalattributes.cpython-38.pyc delete mode 100644 Jobs_Collections/venv/Lib/site-packages/pip/_vendor/html5lib/filters/__pycache__/base.cpython-38.pyc delete mode 100644 Jobs_Collections/venv/Lib/site-packages/pip/_vendor/html5lib/filters/__pycache__/inject_meta_charset.cpython-38.pyc delete mode 100644 Jobs_Collections/venv/Lib/site-packages/pip/_vendor/html5lib/filters/__pycache__/lint.cpython-38.pyc delete mode 100644 Jobs_Collections/venv/Lib/site-packages/pip/_vendor/html5lib/filters/__pycache__/optionaltags.cpython-38.pyc delete mode 100644 Jobs_Collections/venv/Lib/site-packages/pip/_vendor/html5lib/filters/__pycache__/sanitizer.cpython-38.pyc delete mode 100644 Jobs_Collections/venv/Lib/site-packages/pip/_vendor/html5lib/filters/__pycache__/whitespace.cpython-38.pyc delete mode 100644 Jobs_Collections/venv/Lib/site-packages/pip/_vendor/html5lib/filters/alphabeticalattributes.py delete mode 100644 Jobs_Collections/venv/Lib/site-packages/pip/_vendor/html5lib/filters/base.py delete mode 100644 Jobs_Collections/venv/Lib/site-packages/pip/_vendor/html5lib/filters/inject_meta_charset.py delete mode 100644 Jobs_Collections/venv/Lib/site-packages/pip/_vendor/html5lib/filters/lint.py delete mode 100644 Jobs_Collections/venv/Lib/site-packages/pip/_vendor/html5lib/filters/optionaltags.py delete mode 100644 Jobs_Collections/venv/Lib/site-packages/pip/_vendor/html5lib/filters/sanitizer.py delete mode 100644 Jobs_Collections/venv/Lib/site-packages/pip/_vendor/html5lib/filters/whitespace.py delete mode 100644 Jobs_Collections/venv/Lib/site-packages/pip/_vendor/html5lib/html5parser.py delete mode 100644 Jobs_Collections/venv/Lib/site-packages/pip/_vendor/html5lib/serializer.py delete mode 100644 Jobs_Collections/venv/Lib/site-packages/pip/_vendor/html5lib/treeadapters/__init__.py delete mode 100644 Jobs_Collections/venv/Lib/site-packages/pip/_vendor/html5lib/treeadapters/__pycache__/__init__.cpython-38.pyc delete mode 100644 Jobs_Collections/venv/Lib/site-packages/pip/_vendor/html5lib/treeadapters/__pycache__/genshi.cpython-38.pyc delete mode 100644 Jobs_Collections/venv/Lib/site-packages/pip/_vendor/html5lib/treeadapters/__pycache__/sax.cpython-38.pyc delete mode 100644 Jobs_Collections/venv/Lib/site-packages/pip/_vendor/html5lib/treeadapters/genshi.py delete mode 100644 Jobs_Collections/venv/Lib/site-packages/pip/_vendor/html5lib/treeadapters/sax.py delete mode 100644 Jobs_Collections/venv/Lib/site-packages/pip/_vendor/html5lib/treebuilders/__init__.py delete mode 100644 Jobs_Collections/venv/Lib/site-packages/pip/_vendor/html5lib/treebuilders/__pycache__/__init__.cpython-38.pyc delete mode 100644 Jobs_Collections/venv/Lib/site-packages/pip/_vendor/html5lib/treebuilders/__pycache__/base.cpython-38.pyc delete mode 100644 Jobs_Collections/venv/Lib/site-packages/pip/_vendor/html5lib/treebuilders/__pycache__/dom.cpython-38.pyc delete mode 100644 Jobs_Collections/venv/Lib/site-packages/pip/_vendor/html5lib/treebuilders/__pycache__/etree.cpython-38.pyc delete mode 100644 Jobs_Collections/venv/Lib/site-packages/pip/_vendor/html5lib/treebuilders/__pycache__/etree_lxml.cpython-38.pyc delete mode 100644 Jobs_Collections/venv/Lib/site-packages/pip/_vendor/html5lib/treebuilders/base.py delete mode 100644 Jobs_Collections/venv/Lib/site-packages/pip/_vendor/html5lib/treebuilders/dom.py delete mode 100644 Jobs_Collections/venv/Lib/site-packages/pip/_vendor/html5lib/treebuilders/etree.py delete mode 100644 Jobs_Collections/venv/Lib/site-packages/pip/_vendor/html5lib/treebuilders/etree_lxml.py delete mode 100644 Jobs_Collections/venv/Lib/site-packages/pip/_vendor/html5lib/treewalkers/__init__.py delete mode 100644 Jobs_Collections/venv/Lib/site-packages/pip/_vendor/html5lib/treewalkers/__pycache__/__init__.cpython-38.pyc delete mode 100644 Jobs_Collections/venv/Lib/site-packages/pip/_vendor/html5lib/treewalkers/__pycache__/base.cpython-38.pyc delete mode 100644 Jobs_Collections/venv/Lib/site-packages/pip/_vendor/html5lib/treewalkers/__pycache__/dom.cpython-38.pyc delete mode 100644 Jobs_Collections/venv/Lib/site-packages/pip/_vendor/html5lib/treewalkers/__pycache__/etree.cpython-38.pyc delete mode 100644 Jobs_Collections/venv/Lib/site-packages/pip/_vendor/html5lib/treewalkers/__pycache__/etree_lxml.cpython-38.pyc delete mode 100644 Jobs_Collections/venv/Lib/site-packages/pip/_vendor/html5lib/treewalkers/__pycache__/genshi.cpython-38.pyc delete mode 100644 Jobs_Collections/venv/Lib/site-packages/pip/_vendor/html5lib/treewalkers/base.py delete mode 100644 Jobs_Collections/venv/Lib/site-packages/pip/_vendor/html5lib/treewalkers/dom.py delete mode 100644 Jobs_Collections/venv/Lib/site-packages/pip/_vendor/html5lib/treewalkers/etree.py delete mode 100644 Jobs_Collections/venv/Lib/site-packages/pip/_vendor/html5lib/treewalkers/etree_lxml.py delete mode 100644 Jobs_Collections/venv/Lib/site-packages/pip/_vendor/html5lib/treewalkers/genshi.py delete mode 100644 Jobs_Collections/venv/Lib/site-packages/pip/_vendor/idna/__init__.py delete mode 100644 Jobs_Collections/venv/Lib/site-packages/pip/_vendor/idna/__pycache__/__init__.cpython-38.pyc delete mode 100644 Jobs_Collections/venv/Lib/site-packages/pip/_vendor/idna/__pycache__/codec.cpython-38.pyc delete mode 100644 Jobs_Collections/venv/Lib/site-packages/pip/_vendor/idna/__pycache__/compat.cpython-38.pyc delete mode 100644 Jobs_Collections/venv/Lib/site-packages/pip/_vendor/idna/__pycache__/core.cpython-38.pyc delete mode 100644 Jobs_Collections/venv/Lib/site-packages/pip/_vendor/idna/__pycache__/idnadata.cpython-38.pyc delete mode 100644 Jobs_Collections/venv/Lib/site-packages/pip/_vendor/idna/__pycache__/intranges.cpython-38.pyc delete mode 100644 Jobs_Collections/venv/Lib/site-packages/pip/_vendor/idna/__pycache__/package_data.cpython-38.pyc delete mode 100644 Jobs_Collections/venv/Lib/site-packages/pip/_vendor/idna/__pycache__/uts46data.cpython-38.pyc delete mode 100644 Jobs_Collections/venv/Lib/site-packages/pip/_vendor/idna/codec.py delete mode 100644 Jobs_Collections/venv/Lib/site-packages/pip/_vendor/idna/compat.py delete mode 100644 Jobs_Collections/venv/Lib/site-packages/pip/_vendor/idna/core.py delete mode 100644 Jobs_Collections/venv/Lib/site-packages/pip/_vendor/idna/idnadata.py delete mode 100644 Jobs_Collections/venv/Lib/site-packages/pip/_vendor/idna/intranges.py delete mode 100644 Jobs_Collections/venv/Lib/site-packages/pip/_vendor/idna/package_data.py delete mode 100644 Jobs_Collections/venv/Lib/site-packages/pip/_vendor/idna/uts46data.py delete mode 100644 Jobs_Collections/venv/Lib/site-packages/pip/_vendor/ipaddress.py delete mode 100644 Jobs_Collections/venv/Lib/site-packages/pip/_vendor/lockfile/__init__.py delete mode 100644 Jobs_Collections/venv/Lib/site-packages/pip/_vendor/lockfile/__pycache__/__init__.cpython-38.pyc delete mode 100644 Jobs_Collections/venv/Lib/site-packages/pip/_vendor/lockfile/__pycache__/linklockfile.cpython-38.pyc delete mode 100644 Jobs_Collections/venv/Lib/site-packages/pip/_vendor/lockfile/__pycache__/mkdirlockfile.cpython-38.pyc delete mode 100644 Jobs_Collections/venv/Lib/site-packages/pip/_vendor/lockfile/__pycache__/pidlockfile.cpython-38.pyc delete mode 100644 Jobs_Collections/venv/Lib/site-packages/pip/_vendor/lockfile/__pycache__/sqlitelockfile.cpython-38.pyc delete mode 100644 Jobs_Collections/venv/Lib/site-packages/pip/_vendor/lockfile/__pycache__/symlinklockfile.cpython-38.pyc delete mode 100644 Jobs_Collections/venv/Lib/site-packages/pip/_vendor/lockfile/linklockfile.py delete mode 100644 Jobs_Collections/venv/Lib/site-packages/pip/_vendor/lockfile/mkdirlockfile.py delete mode 100644 Jobs_Collections/venv/Lib/site-packages/pip/_vendor/lockfile/pidlockfile.py delete mode 100644 Jobs_Collections/venv/Lib/site-packages/pip/_vendor/lockfile/sqlitelockfile.py delete mode 100644 Jobs_Collections/venv/Lib/site-packages/pip/_vendor/lockfile/symlinklockfile.py delete mode 100644 Jobs_Collections/venv/Lib/site-packages/pip/_vendor/msgpack/__init__.py delete mode 100644 Jobs_Collections/venv/Lib/site-packages/pip/_vendor/msgpack/__pycache__/__init__.cpython-38.pyc delete mode 100644 Jobs_Collections/venv/Lib/site-packages/pip/_vendor/msgpack/__pycache__/_version.cpython-38.pyc delete mode 100644 Jobs_Collections/venv/Lib/site-packages/pip/_vendor/msgpack/__pycache__/exceptions.cpython-38.pyc delete mode 100644 Jobs_Collections/venv/Lib/site-packages/pip/_vendor/msgpack/__pycache__/fallback.cpython-38.pyc delete mode 100644 Jobs_Collections/venv/Lib/site-packages/pip/_vendor/msgpack/_version.py delete mode 100644 Jobs_Collections/venv/Lib/site-packages/pip/_vendor/msgpack/exceptions.py delete mode 100644 Jobs_Collections/venv/Lib/site-packages/pip/_vendor/msgpack/fallback.py delete mode 100644 Jobs_Collections/venv/Lib/site-packages/pip/_vendor/packaging/__about__.py delete mode 100644 Jobs_Collections/venv/Lib/site-packages/pip/_vendor/packaging/__init__.py delete mode 100644 Jobs_Collections/venv/Lib/site-packages/pip/_vendor/packaging/__pycache__/__about__.cpython-38.pyc delete mode 100644 Jobs_Collections/venv/Lib/site-packages/pip/_vendor/packaging/__pycache__/__init__.cpython-38.pyc delete mode 100644 Jobs_Collections/venv/Lib/site-packages/pip/_vendor/packaging/__pycache__/_compat.cpython-38.pyc delete mode 100644 Jobs_Collections/venv/Lib/site-packages/pip/_vendor/packaging/__pycache__/_structures.cpython-38.pyc delete mode 100644 Jobs_Collections/venv/Lib/site-packages/pip/_vendor/packaging/__pycache__/markers.cpython-38.pyc delete mode 100644 Jobs_Collections/venv/Lib/site-packages/pip/_vendor/packaging/__pycache__/requirements.cpython-38.pyc delete mode 100644 Jobs_Collections/venv/Lib/site-packages/pip/_vendor/packaging/__pycache__/specifiers.cpython-38.pyc delete mode 100644 Jobs_Collections/venv/Lib/site-packages/pip/_vendor/packaging/__pycache__/utils.cpython-38.pyc delete mode 100644 Jobs_Collections/venv/Lib/site-packages/pip/_vendor/packaging/__pycache__/version.cpython-38.pyc delete mode 100644 Jobs_Collections/venv/Lib/site-packages/pip/_vendor/packaging/_compat.py delete mode 100644 Jobs_Collections/venv/Lib/site-packages/pip/_vendor/packaging/_structures.py delete mode 100644 Jobs_Collections/venv/Lib/site-packages/pip/_vendor/packaging/markers.py delete mode 100644 Jobs_Collections/venv/Lib/site-packages/pip/_vendor/packaging/requirements.py delete mode 100644 Jobs_Collections/venv/Lib/site-packages/pip/_vendor/packaging/specifiers.py delete mode 100644 Jobs_Collections/venv/Lib/site-packages/pip/_vendor/packaging/utils.py delete mode 100644 Jobs_Collections/venv/Lib/site-packages/pip/_vendor/packaging/version.py delete mode 100644 Jobs_Collections/venv/Lib/site-packages/pip/_vendor/pep517/__init__.py delete mode 100644 Jobs_Collections/venv/Lib/site-packages/pip/_vendor/pep517/__pycache__/__init__.cpython-38.pyc delete mode 100644 Jobs_Collections/venv/Lib/site-packages/pip/_vendor/pep517/__pycache__/_in_process.cpython-38.pyc delete mode 100644 Jobs_Collections/venv/Lib/site-packages/pip/_vendor/pep517/__pycache__/build.cpython-38.pyc delete mode 100644 Jobs_Collections/venv/Lib/site-packages/pip/_vendor/pep517/__pycache__/check.cpython-38.pyc delete mode 100644 Jobs_Collections/venv/Lib/site-packages/pip/_vendor/pep517/__pycache__/colorlog.cpython-38.pyc delete mode 100644 Jobs_Collections/venv/Lib/site-packages/pip/_vendor/pep517/__pycache__/compat.cpython-38.pyc delete mode 100644 Jobs_Collections/venv/Lib/site-packages/pip/_vendor/pep517/__pycache__/envbuild.cpython-38.pyc delete mode 100644 Jobs_Collections/venv/Lib/site-packages/pip/_vendor/pep517/__pycache__/wrappers.cpython-38.pyc delete mode 100644 Jobs_Collections/venv/Lib/site-packages/pip/_vendor/pep517/_in_process.py delete mode 100644 Jobs_Collections/venv/Lib/site-packages/pip/_vendor/pep517/build.py delete mode 100644 Jobs_Collections/venv/Lib/site-packages/pip/_vendor/pep517/check.py delete mode 100644 Jobs_Collections/venv/Lib/site-packages/pip/_vendor/pep517/colorlog.py delete mode 100644 Jobs_Collections/venv/Lib/site-packages/pip/_vendor/pep517/compat.py delete mode 100644 Jobs_Collections/venv/Lib/site-packages/pip/_vendor/pep517/envbuild.py delete mode 100644 Jobs_Collections/venv/Lib/site-packages/pip/_vendor/pep517/wrappers.py delete mode 100644 Jobs_Collections/venv/Lib/site-packages/pip/_vendor/pkg_resources/__init__.py delete mode 100644 Jobs_Collections/venv/Lib/site-packages/pip/_vendor/pkg_resources/__pycache__/__init__.cpython-38.pyc delete mode 100644 Jobs_Collections/venv/Lib/site-packages/pip/_vendor/pkg_resources/__pycache__/py31compat.cpython-38.pyc delete mode 100644 Jobs_Collections/venv/Lib/site-packages/pip/_vendor/pkg_resources/py31compat.py delete mode 100644 Jobs_Collections/venv/Lib/site-packages/pip/_vendor/progress/__init__.py delete mode 100644 Jobs_Collections/venv/Lib/site-packages/pip/_vendor/progress/__pycache__/__init__.cpython-38.pyc delete mode 100644 Jobs_Collections/venv/Lib/site-packages/pip/_vendor/progress/__pycache__/bar.cpython-38.pyc delete mode 100644 Jobs_Collections/venv/Lib/site-packages/pip/_vendor/progress/__pycache__/counter.cpython-38.pyc delete mode 100644 Jobs_Collections/venv/Lib/site-packages/pip/_vendor/progress/__pycache__/spinner.cpython-38.pyc delete mode 100644 Jobs_Collections/venv/Lib/site-packages/pip/_vendor/progress/bar.py delete mode 100644 Jobs_Collections/venv/Lib/site-packages/pip/_vendor/progress/counter.py delete mode 100644 Jobs_Collections/venv/Lib/site-packages/pip/_vendor/progress/spinner.py delete mode 100644 Jobs_Collections/venv/Lib/site-packages/pip/_vendor/pyparsing.py delete mode 100644 Jobs_Collections/venv/Lib/site-packages/pip/_vendor/pytoml/__init__.py delete mode 100644 Jobs_Collections/venv/Lib/site-packages/pip/_vendor/pytoml/__pycache__/__init__.cpython-38.pyc delete mode 100644 Jobs_Collections/venv/Lib/site-packages/pip/_vendor/pytoml/__pycache__/core.cpython-38.pyc delete mode 100644 Jobs_Collections/venv/Lib/site-packages/pip/_vendor/pytoml/__pycache__/parser.cpython-38.pyc delete mode 100644 Jobs_Collections/venv/Lib/site-packages/pip/_vendor/pytoml/__pycache__/test.cpython-38.pyc delete mode 100644 Jobs_Collections/venv/Lib/site-packages/pip/_vendor/pytoml/__pycache__/utils.cpython-38.pyc delete mode 100644 Jobs_Collections/venv/Lib/site-packages/pip/_vendor/pytoml/__pycache__/writer.cpython-38.pyc delete mode 100644 Jobs_Collections/venv/Lib/site-packages/pip/_vendor/pytoml/core.py delete mode 100644 Jobs_Collections/venv/Lib/site-packages/pip/_vendor/pytoml/parser.py delete mode 100644 Jobs_Collections/venv/Lib/site-packages/pip/_vendor/pytoml/test.py delete mode 100644 Jobs_Collections/venv/Lib/site-packages/pip/_vendor/pytoml/utils.py delete mode 100644 Jobs_Collections/venv/Lib/site-packages/pip/_vendor/pytoml/writer.py delete mode 100644 Jobs_Collections/venv/Lib/site-packages/pip/_vendor/requests/__init__.py delete mode 100644 Jobs_Collections/venv/Lib/site-packages/pip/_vendor/requests/__pycache__/__init__.cpython-38.pyc delete mode 100644 Jobs_Collections/venv/Lib/site-packages/pip/_vendor/requests/__pycache__/__version__.cpython-38.pyc delete mode 100644 Jobs_Collections/venv/Lib/site-packages/pip/_vendor/requests/__pycache__/_internal_utils.cpython-38.pyc delete mode 100644 Jobs_Collections/venv/Lib/site-packages/pip/_vendor/requests/__pycache__/adapters.cpython-38.pyc delete mode 100644 Jobs_Collections/venv/Lib/site-packages/pip/_vendor/requests/__pycache__/api.cpython-38.pyc delete mode 100644 Jobs_Collections/venv/Lib/site-packages/pip/_vendor/requests/__pycache__/auth.cpython-38.pyc delete mode 100644 Jobs_Collections/venv/Lib/site-packages/pip/_vendor/requests/__pycache__/certs.cpython-38.pyc delete mode 100644 Jobs_Collections/venv/Lib/site-packages/pip/_vendor/requests/__pycache__/compat.cpython-38.pyc delete mode 100644 Jobs_Collections/venv/Lib/site-packages/pip/_vendor/requests/__pycache__/cookies.cpython-38.pyc delete mode 100644 Jobs_Collections/venv/Lib/site-packages/pip/_vendor/requests/__pycache__/exceptions.cpython-38.pyc delete mode 100644 Jobs_Collections/venv/Lib/site-packages/pip/_vendor/requests/__pycache__/help.cpython-38.pyc delete mode 100644 Jobs_Collections/venv/Lib/site-packages/pip/_vendor/requests/__pycache__/hooks.cpython-38.pyc delete mode 100644 Jobs_Collections/venv/Lib/site-packages/pip/_vendor/requests/__pycache__/models.cpython-38.pyc delete mode 100644 Jobs_Collections/venv/Lib/site-packages/pip/_vendor/requests/__pycache__/packages.cpython-38.pyc delete mode 100644 Jobs_Collections/venv/Lib/site-packages/pip/_vendor/requests/__pycache__/sessions.cpython-38.pyc delete mode 100644 Jobs_Collections/venv/Lib/site-packages/pip/_vendor/requests/__pycache__/status_codes.cpython-38.pyc delete mode 100644 Jobs_Collections/venv/Lib/site-packages/pip/_vendor/requests/__pycache__/structures.cpython-38.pyc delete mode 100644 Jobs_Collections/venv/Lib/site-packages/pip/_vendor/requests/__pycache__/utils.cpython-38.pyc delete mode 100644 Jobs_Collections/venv/Lib/site-packages/pip/_vendor/requests/__version__.py delete mode 100644 Jobs_Collections/venv/Lib/site-packages/pip/_vendor/requests/_internal_utils.py delete mode 100644 Jobs_Collections/venv/Lib/site-packages/pip/_vendor/requests/adapters.py delete mode 100644 Jobs_Collections/venv/Lib/site-packages/pip/_vendor/requests/api.py delete mode 100644 Jobs_Collections/venv/Lib/site-packages/pip/_vendor/requests/auth.py delete mode 100644 Jobs_Collections/venv/Lib/site-packages/pip/_vendor/requests/certs.py delete mode 100644 Jobs_Collections/venv/Lib/site-packages/pip/_vendor/requests/compat.py delete mode 100644 Jobs_Collections/venv/Lib/site-packages/pip/_vendor/requests/cookies.py delete mode 100644 Jobs_Collections/venv/Lib/site-packages/pip/_vendor/requests/exceptions.py delete mode 100644 Jobs_Collections/venv/Lib/site-packages/pip/_vendor/requests/help.py delete mode 100644 Jobs_Collections/venv/Lib/site-packages/pip/_vendor/requests/hooks.py delete mode 100644 Jobs_Collections/venv/Lib/site-packages/pip/_vendor/requests/models.py delete mode 100644 Jobs_Collections/venv/Lib/site-packages/pip/_vendor/requests/packages.py delete mode 100644 Jobs_Collections/venv/Lib/site-packages/pip/_vendor/requests/sessions.py delete mode 100644 Jobs_Collections/venv/Lib/site-packages/pip/_vendor/requests/status_codes.py delete mode 100644 Jobs_Collections/venv/Lib/site-packages/pip/_vendor/requests/structures.py delete mode 100644 Jobs_Collections/venv/Lib/site-packages/pip/_vendor/requests/utils.py delete mode 100644 Jobs_Collections/venv/Lib/site-packages/pip/_vendor/retrying.py delete mode 100644 Jobs_Collections/venv/Lib/site-packages/pip/_vendor/six.py delete mode 100644 Jobs_Collections/venv/Lib/site-packages/pip/_vendor/urllib3/__init__.py delete mode 100644 Jobs_Collections/venv/Lib/site-packages/pip/_vendor/urllib3/__pycache__/__init__.cpython-38.pyc delete mode 100644 Jobs_Collections/venv/Lib/site-packages/pip/_vendor/urllib3/__pycache__/_collections.cpython-38.pyc delete mode 100644 Jobs_Collections/venv/Lib/site-packages/pip/_vendor/urllib3/__pycache__/connection.cpython-38.pyc delete mode 100644 Jobs_Collections/venv/Lib/site-packages/pip/_vendor/urllib3/__pycache__/connectionpool.cpython-38.pyc delete mode 100644 Jobs_Collections/venv/Lib/site-packages/pip/_vendor/urllib3/__pycache__/exceptions.cpython-38.pyc delete mode 100644 Jobs_Collections/venv/Lib/site-packages/pip/_vendor/urllib3/__pycache__/fields.cpython-38.pyc delete mode 100644 Jobs_Collections/venv/Lib/site-packages/pip/_vendor/urllib3/__pycache__/filepost.cpython-38.pyc delete mode 100644 Jobs_Collections/venv/Lib/site-packages/pip/_vendor/urllib3/__pycache__/poolmanager.cpython-38.pyc delete mode 100644 Jobs_Collections/venv/Lib/site-packages/pip/_vendor/urllib3/__pycache__/request.cpython-38.pyc delete mode 100644 Jobs_Collections/venv/Lib/site-packages/pip/_vendor/urllib3/__pycache__/response.cpython-38.pyc delete mode 100644 Jobs_Collections/venv/Lib/site-packages/pip/_vendor/urllib3/_collections.py delete mode 100644 Jobs_Collections/venv/Lib/site-packages/pip/_vendor/urllib3/connection.py delete mode 100644 Jobs_Collections/venv/Lib/site-packages/pip/_vendor/urllib3/connectionpool.py delete mode 100644 Jobs_Collections/venv/Lib/site-packages/pip/_vendor/urllib3/contrib/__init__.py delete mode 100644 Jobs_Collections/venv/Lib/site-packages/pip/_vendor/urllib3/contrib/__pycache__/__init__.cpython-38.pyc delete mode 100644 Jobs_Collections/venv/Lib/site-packages/pip/_vendor/urllib3/contrib/__pycache__/_appengine_environ.cpython-38.pyc delete mode 100644 Jobs_Collections/venv/Lib/site-packages/pip/_vendor/urllib3/contrib/__pycache__/appengine.cpython-38.pyc delete mode 100644 Jobs_Collections/venv/Lib/site-packages/pip/_vendor/urllib3/contrib/__pycache__/ntlmpool.cpython-38.pyc delete mode 100644 Jobs_Collections/venv/Lib/site-packages/pip/_vendor/urllib3/contrib/__pycache__/pyopenssl.cpython-38.pyc delete mode 100644 Jobs_Collections/venv/Lib/site-packages/pip/_vendor/urllib3/contrib/__pycache__/securetransport.cpython-38.pyc delete mode 100644 Jobs_Collections/venv/Lib/site-packages/pip/_vendor/urllib3/contrib/__pycache__/socks.cpython-38.pyc delete mode 100644 Jobs_Collections/venv/Lib/site-packages/pip/_vendor/urllib3/contrib/_appengine_environ.py delete mode 100644 Jobs_Collections/venv/Lib/site-packages/pip/_vendor/urllib3/contrib/_securetransport/__init__.py delete mode 100644 Jobs_Collections/venv/Lib/site-packages/pip/_vendor/urllib3/contrib/_securetransport/__pycache__/__init__.cpython-38.pyc delete mode 100644 Jobs_Collections/venv/Lib/site-packages/pip/_vendor/urllib3/contrib/_securetransport/__pycache__/bindings.cpython-38.pyc delete mode 100644 Jobs_Collections/venv/Lib/site-packages/pip/_vendor/urllib3/contrib/_securetransport/__pycache__/low_level.cpython-38.pyc delete mode 100644 Jobs_Collections/venv/Lib/site-packages/pip/_vendor/urllib3/contrib/_securetransport/bindings.py delete mode 100644 Jobs_Collections/venv/Lib/site-packages/pip/_vendor/urllib3/contrib/_securetransport/low_level.py delete mode 100644 Jobs_Collections/venv/Lib/site-packages/pip/_vendor/urllib3/contrib/appengine.py delete mode 100644 Jobs_Collections/venv/Lib/site-packages/pip/_vendor/urllib3/contrib/ntlmpool.py delete mode 100644 Jobs_Collections/venv/Lib/site-packages/pip/_vendor/urllib3/contrib/pyopenssl.py delete mode 100644 Jobs_Collections/venv/Lib/site-packages/pip/_vendor/urllib3/contrib/securetransport.py delete mode 100644 Jobs_Collections/venv/Lib/site-packages/pip/_vendor/urllib3/contrib/socks.py delete mode 100644 Jobs_Collections/venv/Lib/site-packages/pip/_vendor/urllib3/exceptions.py delete mode 100644 Jobs_Collections/venv/Lib/site-packages/pip/_vendor/urllib3/fields.py delete mode 100644 Jobs_Collections/venv/Lib/site-packages/pip/_vendor/urllib3/filepost.py delete mode 100644 Jobs_Collections/venv/Lib/site-packages/pip/_vendor/urllib3/packages/__init__.py delete mode 100644 Jobs_Collections/venv/Lib/site-packages/pip/_vendor/urllib3/packages/__pycache__/__init__.cpython-38.pyc delete mode 100644 Jobs_Collections/venv/Lib/site-packages/pip/_vendor/urllib3/packages/__pycache__/six.cpython-38.pyc delete mode 100644 Jobs_Collections/venv/Lib/site-packages/pip/_vendor/urllib3/packages/backports/__init__.py delete mode 100644 Jobs_Collections/venv/Lib/site-packages/pip/_vendor/urllib3/packages/backports/__pycache__/__init__.cpython-38.pyc delete mode 100644 Jobs_Collections/venv/Lib/site-packages/pip/_vendor/urllib3/packages/backports/__pycache__/makefile.cpython-38.pyc delete mode 100644 Jobs_Collections/venv/Lib/site-packages/pip/_vendor/urllib3/packages/backports/makefile.py delete mode 100644 Jobs_Collections/venv/Lib/site-packages/pip/_vendor/urllib3/packages/rfc3986/__init__.py delete mode 100644 Jobs_Collections/venv/Lib/site-packages/pip/_vendor/urllib3/packages/rfc3986/__pycache__/__init__.cpython-38.pyc delete mode 100644 Jobs_Collections/venv/Lib/site-packages/pip/_vendor/urllib3/packages/rfc3986/__pycache__/_mixin.cpython-38.pyc delete mode 100644 Jobs_Collections/venv/Lib/site-packages/pip/_vendor/urllib3/packages/rfc3986/__pycache__/abnf_regexp.cpython-38.pyc delete mode 100644 Jobs_Collections/venv/Lib/site-packages/pip/_vendor/urllib3/packages/rfc3986/__pycache__/api.cpython-38.pyc delete mode 100644 Jobs_Collections/venv/Lib/site-packages/pip/_vendor/urllib3/packages/rfc3986/__pycache__/builder.cpython-38.pyc delete mode 100644 Jobs_Collections/venv/Lib/site-packages/pip/_vendor/urllib3/packages/rfc3986/__pycache__/compat.cpython-38.pyc delete mode 100644 Jobs_Collections/venv/Lib/site-packages/pip/_vendor/urllib3/packages/rfc3986/__pycache__/exceptions.cpython-38.pyc delete mode 100644 Jobs_Collections/venv/Lib/site-packages/pip/_vendor/urllib3/packages/rfc3986/__pycache__/iri.cpython-38.pyc delete mode 100644 Jobs_Collections/venv/Lib/site-packages/pip/_vendor/urllib3/packages/rfc3986/__pycache__/misc.cpython-38.pyc delete mode 100644 Jobs_Collections/venv/Lib/site-packages/pip/_vendor/urllib3/packages/rfc3986/__pycache__/normalizers.cpython-38.pyc delete mode 100644 Jobs_Collections/venv/Lib/site-packages/pip/_vendor/urllib3/packages/rfc3986/__pycache__/parseresult.cpython-38.pyc delete mode 100644 Jobs_Collections/venv/Lib/site-packages/pip/_vendor/urllib3/packages/rfc3986/__pycache__/uri.cpython-38.pyc delete mode 100644 Jobs_Collections/venv/Lib/site-packages/pip/_vendor/urllib3/packages/rfc3986/__pycache__/validators.cpython-38.pyc delete mode 100644 Jobs_Collections/venv/Lib/site-packages/pip/_vendor/urllib3/packages/rfc3986/_mixin.py delete mode 100644 Jobs_Collections/venv/Lib/site-packages/pip/_vendor/urllib3/packages/rfc3986/abnf_regexp.py delete mode 100644 Jobs_Collections/venv/Lib/site-packages/pip/_vendor/urllib3/packages/rfc3986/api.py delete mode 100644 Jobs_Collections/venv/Lib/site-packages/pip/_vendor/urllib3/packages/rfc3986/builder.py delete mode 100644 Jobs_Collections/venv/Lib/site-packages/pip/_vendor/urllib3/packages/rfc3986/compat.py delete mode 100644 Jobs_Collections/venv/Lib/site-packages/pip/_vendor/urllib3/packages/rfc3986/exceptions.py delete mode 100644 Jobs_Collections/venv/Lib/site-packages/pip/_vendor/urllib3/packages/rfc3986/iri.py delete mode 100644 Jobs_Collections/venv/Lib/site-packages/pip/_vendor/urllib3/packages/rfc3986/misc.py delete mode 100644 Jobs_Collections/venv/Lib/site-packages/pip/_vendor/urllib3/packages/rfc3986/normalizers.py delete mode 100644 Jobs_Collections/venv/Lib/site-packages/pip/_vendor/urllib3/packages/rfc3986/parseresult.py delete mode 100644 Jobs_Collections/venv/Lib/site-packages/pip/_vendor/urllib3/packages/rfc3986/uri.py delete mode 100644 Jobs_Collections/venv/Lib/site-packages/pip/_vendor/urllib3/packages/rfc3986/validators.py delete mode 100644 Jobs_Collections/venv/Lib/site-packages/pip/_vendor/urllib3/packages/six.py delete mode 100644 Jobs_Collections/venv/Lib/site-packages/pip/_vendor/urllib3/packages/ssl_match_hostname/__init__.py delete mode 100644 Jobs_Collections/venv/Lib/site-packages/pip/_vendor/urllib3/packages/ssl_match_hostname/__pycache__/__init__.cpython-38.pyc delete mode 100644 Jobs_Collections/venv/Lib/site-packages/pip/_vendor/urllib3/packages/ssl_match_hostname/__pycache__/_implementation.cpython-38.pyc delete mode 100644 Jobs_Collections/venv/Lib/site-packages/pip/_vendor/urllib3/packages/ssl_match_hostname/_implementation.py delete mode 100644 Jobs_Collections/venv/Lib/site-packages/pip/_vendor/urllib3/poolmanager.py delete mode 100644 Jobs_Collections/venv/Lib/site-packages/pip/_vendor/urllib3/request.py delete mode 100644 Jobs_Collections/venv/Lib/site-packages/pip/_vendor/urllib3/response.py delete mode 100644 Jobs_Collections/venv/Lib/site-packages/pip/_vendor/urllib3/util/__init__.py delete mode 100644 Jobs_Collections/venv/Lib/site-packages/pip/_vendor/urllib3/util/__pycache__/__init__.cpython-38.pyc delete mode 100644 Jobs_Collections/venv/Lib/site-packages/pip/_vendor/urllib3/util/__pycache__/connection.cpython-38.pyc delete mode 100644 Jobs_Collections/venv/Lib/site-packages/pip/_vendor/urllib3/util/__pycache__/queue.cpython-38.pyc delete mode 100644 Jobs_Collections/venv/Lib/site-packages/pip/_vendor/urllib3/util/__pycache__/request.cpython-38.pyc delete mode 100644 Jobs_Collections/venv/Lib/site-packages/pip/_vendor/urllib3/util/__pycache__/response.cpython-38.pyc delete mode 100644 Jobs_Collections/venv/Lib/site-packages/pip/_vendor/urllib3/util/__pycache__/retry.cpython-38.pyc delete mode 100644 Jobs_Collections/venv/Lib/site-packages/pip/_vendor/urllib3/util/__pycache__/ssl_.cpython-38.pyc delete mode 100644 Jobs_Collections/venv/Lib/site-packages/pip/_vendor/urllib3/util/__pycache__/timeout.cpython-38.pyc delete mode 100644 Jobs_Collections/venv/Lib/site-packages/pip/_vendor/urllib3/util/__pycache__/url.cpython-38.pyc delete mode 100644 Jobs_Collections/venv/Lib/site-packages/pip/_vendor/urllib3/util/__pycache__/wait.cpython-38.pyc delete mode 100644 Jobs_Collections/venv/Lib/site-packages/pip/_vendor/urllib3/util/connection.py delete mode 100644 Jobs_Collections/venv/Lib/site-packages/pip/_vendor/urllib3/util/queue.py delete mode 100644 Jobs_Collections/venv/Lib/site-packages/pip/_vendor/urllib3/util/request.py delete mode 100644 Jobs_Collections/venv/Lib/site-packages/pip/_vendor/urllib3/util/response.py delete mode 100644 Jobs_Collections/venv/Lib/site-packages/pip/_vendor/urllib3/util/retry.py delete mode 100644 Jobs_Collections/venv/Lib/site-packages/pip/_vendor/urllib3/util/ssl_.py delete mode 100644 Jobs_Collections/venv/Lib/site-packages/pip/_vendor/urllib3/util/timeout.py delete mode 100644 Jobs_Collections/venv/Lib/site-packages/pip/_vendor/urllib3/util/url.py delete mode 100644 Jobs_Collections/venv/Lib/site-packages/pip/_vendor/urllib3/util/wait.py delete mode 100644 Jobs_Collections/venv/Lib/site-packages/pip/_vendor/webencodings/__init__.py delete mode 100644 Jobs_Collections/venv/Lib/site-packages/pip/_vendor/webencodings/__pycache__/__init__.cpython-38.pyc delete mode 100644 Jobs_Collections/venv/Lib/site-packages/pip/_vendor/webencodings/__pycache__/labels.cpython-38.pyc delete mode 100644 Jobs_Collections/venv/Lib/site-packages/pip/_vendor/webencodings/__pycache__/mklabels.cpython-38.pyc delete mode 100644 Jobs_Collections/venv/Lib/site-packages/pip/_vendor/webencodings/__pycache__/tests.cpython-38.pyc delete mode 100644 Jobs_Collections/venv/Lib/site-packages/pip/_vendor/webencodings/__pycache__/x_user_defined.cpython-38.pyc delete mode 100644 Jobs_Collections/venv/Lib/site-packages/pip/_vendor/webencodings/labels.py delete mode 100644 Jobs_Collections/venv/Lib/site-packages/pip/_vendor/webencodings/mklabels.py delete mode 100644 Jobs_Collections/venv/Lib/site-packages/pip/_vendor/webencodings/tests.py delete mode 100644 Jobs_Collections/venv/Lib/site-packages/pip/_vendor/webencodings/x_user_defined.py delete mode 100644 Jobs_Collections/venv/Lib/site-packages/pkg_resources/__init__.py delete mode 100644 Jobs_Collections/venv/Lib/site-packages/pkg_resources/__pycache__/__init__.cpython-38.pyc delete mode 100644 Jobs_Collections/venv/Lib/site-packages/pkg_resources/__pycache__/py31compat.cpython-38.pyc delete mode 100644 Jobs_Collections/venv/Lib/site-packages/pkg_resources/_vendor/__init__.py delete mode 100644 Jobs_Collections/venv/Lib/site-packages/pkg_resources/_vendor/__pycache__/__init__.cpython-38.pyc delete mode 100644 Jobs_Collections/venv/Lib/site-packages/pkg_resources/_vendor/__pycache__/appdirs.cpython-38.pyc delete mode 100644 Jobs_Collections/venv/Lib/site-packages/pkg_resources/_vendor/__pycache__/pyparsing.cpython-38.pyc delete mode 100644 Jobs_Collections/venv/Lib/site-packages/pkg_resources/_vendor/__pycache__/six.cpython-38.pyc delete mode 100644 Jobs_Collections/venv/Lib/site-packages/pkg_resources/_vendor/appdirs.py delete mode 100644 Jobs_Collections/venv/Lib/site-packages/pkg_resources/_vendor/packaging/__about__.py delete mode 100644 Jobs_Collections/venv/Lib/site-packages/pkg_resources/_vendor/packaging/__init__.py delete mode 100644 Jobs_Collections/venv/Lib/site-packages/pkg_resources/_vendor/packaging/__pycache__/__about__.cpython-38.pyc delete mode 100644 Jobs_Collections/venv/Lib/site-packages/pkg_resources/_vendor/packaging/__pycache__/__init__.cpython-38.pyc delete mode 100644 Jobs_Collections/venv/Lib/site-packages/pkg_resources/_vendor/packaging/__pycache__/_compat.cpython-38.pyc delete mode 100644 Jobs_Collections/venv/Lib/site-packages/pkg_resources/_vendor/packaging/__pycache__/_structures.cpython-38.pyc delete mode 100644 Jobs_Collections/venv/Lib/site-packages/pkg_resources/_vendor/packaging/__pycache__/markers.cpython-38.pyc delete mode 100644 Jobs_Collections/venv/Lib/site-packages/pkg_resources/_vendor/packaging/__pycache__/requirements.cpython-38.pyc delete mode 100644 Jobs_Collections/venv/Lib/site-packages/pkg_resources/_vendor/packaging/__pycache__/specifiers.cpython-38.pyc delete mode 100644 Jobs_Collections/venv/Lib/site-packages/pkg_resources/_vendor/packaging/__pycache__/utils.cpython-38.pyc delete mode 100644 Jobs_Collections/venv/Lib/site-packages/pkg_resources/_vendor/packaging/__pycache__/version.cpython-38.pyc delete mode 100644 Jobs_Collections/venv/Lib/site-packages/pkg_resources/_vendor/packaging/_compat.py delete mode 100644 Jobs_Collections/venv/Lib/site-packages/pkg_resources/_vendor/packaging/_structures.py delete mode 100644 Jobs_Collections/venv/Lib/site-packages/pkg_resources/_vendor/packaging/markers.py delete mode 100644 Jobs_Collections/venv/Lib/site-packages/pkg_resources/_vendor/packaging/requirements.py delete mode 100644 Jobs_Collections/venv/Lib/site-packages/pkg_resources/_vendor/packaging/specifiers.py delete mode 100644 Jobs_Collections/venv/Lib/site-packages/pkg_resources/_vendor/packaging/utils.py delete mode 100644 Jobs_Collections/venv/Lib/site-packages/pkg_resources/_vendor/packaging/version.py delete mode 100644 Jobs_Collections/venv/Lib/site-packages/pkg_resources/_vendor/pyparsing.py delete mode 100644 Jobs_Collections/venv/Lib/site-packages/pkg_resources/_vendor/six.py delete mode 100644 Jobs_Collections/venv/Lib/site-packages/pkg_resources/extern/__init__.py delete mode 100644 Jobs_Collections/venv/Lib/site-packages/pkg_resources/extern/__pycache__/__init__.cpython-38.pyc delete mode 100644 Jobs_Collections/venv/Lib/site-packages/pkg_resources/py31compat.py delete mode 100644 Jobs_Collections/venv/Lib/site-packages/pylint-2.5.3.dist-info/COPYING delete mode 100644 Jobs_Collections/venv/Lib/site-packages/pylint-2.5.3.dist-info/INSTALLER delete mode 100644 Jobs_Collections/venv/Lib/site-packages/pylint-2.5.3.dist-info/METADATA delete mode 100644 Jobs_Collections/venv/Lib/site-packages/pylint-2.5.3.dist-info/RECORD delete mode 100644 Jobs_Collections/venv/Lib/site-packages/pylint-2.5.3.dist-info/WHEEL delete mode 100644 Jobs_Collections/venv/Lib/site-packages/pylint-2.5.3.dist-info/entry_points.txt delete mode 100644 Jobs_Collections/venv/Lib/site-packages/pylint-2.5.3.dist-info/top_level.txt delete mode 100644 Jobs_Collections/venv/Lib/site-packages/pylint/__init__.py delete mode 100644 Jobs_Collections/venv/Lib/site-packages/pylint/__main__.py delete mode 100644 Jobs_Collections/venv/Lib/site-packages/pylint/__pkginfo__.py delete mode 100644 Jobs_Collections/venv/Lib/site-packages/pylint/__pycache__/__init__.cpython-38.pyc delete mode 100644 Jobs_Collections/venv/Lib/site-packages/pylint/__pycache__/__main__.cpython-38.pyc delete mode 100644 Jobs_Collections/venv/Lib/site-packages/pylint/__pycache__/__pkginfo__.cpython-38.pyc delete mode 100644 Jobs_Collections/venv/Lib/site-packages/pylint/__pycache__/config.cpython-38.pyc delete mode 100644 Jobs_Collections/venv/Lib/site-packages/pylint/__pycache__/constants.cpython-38.pyc delete mode 100644 Jobs_Collections/venv/Lib/site-packages/pylint/__pycache__/epylint.cpython-38.pyc delete mode 100644 Jobs_Collections/venv/Lib/site-packages/pylint/__pycache__/exceptions.cpython-38.pyc delete mode 100644 Jobs_Collections/venv/Lib/site-packages/pylint/__pycache__/graph.cpython-38.pyc delete mode 100644 Jobs_Collections/venv/Lib/site-packages/pylint/__pycache__/interfaces.cpython-38.pyc delete mode 100644 Jobs_Collections/venv/Lib/site-packages/pylint/__pycache__/testutils.cpython-38.pyc delete mode 100644 Jobs_Collections/venv/Lib/site-packages/pylint/checkers/__init__.py delete mode 100644 Jobs_Collections/venv/Lib/site-packages/pylint/checkers/__pycache__/__init__.cpython-38.pyc delete mode 100644 Jobs_Collections/venv/Lib/site-packages/pylint/checkers/__pycache__/async.cpython-38.pyc delete mode 100644 Jobs_Collections/venv/Lib/site-packages/pylint/checkers/__pycache__/base.cpython-38.pyc delete mode 100644 Jobs_Collections/venv/Lib/site-packages/pylint/checkers/__pycache__/base_checker.cpython-38.pyc delete mode 100644 Jobs_Collections/venv/Lib/site-packages/pylint/checkers/__pycache__/classes.cpython-38.pyc delete mode 100644 Jobs_Collections/venv/Lib/site-packages/pylint/checkers/__pycache__/design_analysis.cpython-38.pyc delete mode 100644 Jobs_Collections/venv/Lib/site-packages/pylint/checkers/__pycache__/exceptions.cpython-38.pyc delete mode 100644 Jobs_Collections/venv/Lib/site-packages/pylint/checkers/__pycache__/format.cpython-38.pyc delete mode 100644 Jobs_Collections/venv/Lib/site-packages/pylint/checkers/__pycache__/imports.cpython-38.pyc delete mode 100644 Jobs_Collections/venv/Lib/site-packages/pylint/checkers/__pycache__/logging.cpython-38.pyc delete mode 100644 Jobs_Collections/venv/Lib/site-packages/pylint/checkers/__pycache__/misc.cpython-38.pyc delete mode 100644 Jobs_Collections/venv/Lib/site-packages/pylint/checkers/__pycache__/newstyle.cpython-38.pyc delete mode 100644 Jobs_Collections/venv/Lib/site-packages/pylint/checkers/__pycache__/python3.cpython-38.pyc delete mode 100644 Jobs_Collections/venv/Lib/site-packages/pylint/checkers/__pycache__/raw_metrics.cpython-38.pyc delete mode 100644 Jobs_Collections/venv/Lib/site-packages/pylint/checkers/__pycache__/refactoring.cpython-38.pyc delete mode 100644 Jobs_Collections/venv/Lib/site-packages/pylint/checkers/__pycache__/similar.cpython-38.pyc delete mode 100644 Jobs_Collections/venv/Lib/site-packages/pylint/checkers/__pycache__/spelling.cpython-38.pyc delete mode 100644 Jobs_Collections/venv/Lib/site-packages/pylint/checkers/__pycache__/stdlib.cpython-38.pyc delete mode 100644 Jobs_Collections/venv/Lib/site-packages/pylint/checkers/__pycache__/strings.cpython-38.pyc delete mode 100644 Jobs_Collections/venv/Lib/site-packages/pylint/checkers/__pycache__/typecheck.cpython-38.pyc delete mode 100644 Jobs_Collections/venv/Lib/site-packages/pylint/checkers/__pycache__/utils.cpython-38.pyc delete mode 100644 Jobs_Collections/venv/Lib/site-packages/pylint/checkers/__pycache__/variables.cpython-38.pyc delete mode 100644 Jobs_Collections/venv/Lib/site-packages/pylint/checkers/async.py delete mode 100644 Jobs_Collections/venv/Lib/site-packages/pylint/checkers/base.py delete mode 100644 Jobs_Collections/venv/Lib/site-packages/pylint/checkers/base_checker.py delete mode 100644 Jobs_Collections/venv/Lib/site-packages/pylint/checkers/classes.py delete mode 100644 Jobs_Collections/venv/Lib/site-packages/pylint/checkers/design_analysis.py delete mode 100644 Jobs_Collections/venv/Lib/site-packages/pylint/checkers/exceptions.py delete mode 100644 Jobs_Collections/venv/Lib/site-packages/pylint/checkers/format.py delete mode 100644 Jobs_Collections/venv/Lib/site-packages/pylint/checkers/imports.py delete mode 100644 Jobs_Collections/venv/Lib/site-packages/pylint/checkers/logging.py delete mode 100644 Jobs_Collections/venv/Lib/site-packages/pylint/checkers/misc.py delete mode 100644 Jobs_Collections/venv/Lib/site-packages/pylint/checkers/newstyle.py delete mode 100644 Jobs_Collections/venv/Lib/site-packages/pylint/checkers/python3.py delete mode 100644 Jobs_Collections/venv/Lib/site-packages/pylint/checkers/raw_metrics.py delete mode 100644 Jobs_Collections/venv/Lib/site-packages/pylint/checkers/refactoring.py delete mode 100644 Jobs_Collections/venv/Lib/site-packages/pylint/checkers/similar.py delete mode 100644 Jobs_Collections/venv/Lib/site-packages/pylint/checkers/spelling.py delete mode 100644 Jobs_Collections/venv/Lib/site-packages/pylint/checkers/stdlib.py delete mode 100644 Jobs_Collections/venv/Lib/site-packages/pylint/checkers/strings.py delete mode 100644 Jobs_Collections/venv/Lib/site-packages/pylint/checkers/typecheck.py delete mode 100644 Jobs_Collections/venv/Lib/site-packages/pylint/checkers/utils.py delete mode 100644 Jobs_Collections/venv/Lib/site-packages/pylint/checkers/variables.py delete mode 100644 Jobs_Collections/venv/Lib/site-packages/pylint/config.py delete mode 100644 Jobs_Collections/venv/Lib/site-packages/pylint/constants.py delete mode 100644 Jobs_Collections/venv/Lib/site-packages/pylint/epylint.py delete mode 100644 Jobs_Collections/venv/Lib/site-packages/pylint/exceptions.py delete mode 100644 Jobs_Collections/venv/Lib/site-packages/pylint/extensions/__init__.py delete mode 100644 Jobs_Collections/venv/Lib/site-packages/pylint/extensions/__pycache__/__init__.cpython-38.pyc delete mode 100644 Jobs_Collections/venv/Lib/site-packages/pylint/extensions/__pycache__/_check_docs_utils.cpython-38.pyc delete mode 100644 Jobs_Collections/venv/Lib/site-packages/pylint/extensions/__pycache__/bad_builtin.cpython-38.pyc delete mode 100644 Jobs_Collections/venv/Lib/site-packages/pylint/extensions/__pycache__/broad_try_clause.cpython-38.pyc delete mode 100644 Jobs_Collections/venv/Lib/site-packages/pylint/extensions/__pycache__/check_docs.cpython-38.pyc delete mode 100644 Jobs_Collections/venv/Lib/site-packages/pylint/extensions/__pycache__/check_elif.cpython-38.pyc delete mode 100644 Jobs_Collections/venv/Lib/site-packages/pylint/extensions/__pycache__/comparetozero.cpython-38.pyc delete mode 100644 Jobs_Collections/venv/Lib/site-packages/pylint/extensions/__pycache__/docparams.cpython-38.pyc delete mode 100644 Jobs_Collections/venv/Lib/site-packages/pylint/extensions/__pycache__/docstyle.cpython-38.pyc delete mode 100644 Jobs_Collections/venv/Lib/site-packages/pylint/extensions/__pycache__/emptystring.cpython-38.pyc delete mode 100644 Jobs_Collections/venv/Lib/site-packages/pylint/extensions/__pycache__/mccabe.cpython-38.pyc delete mode 100644 Jobs_Collections/venv/Lib/site-packages/pylint/extensions/__pycache__/overlapping_exceptions.cpython-38.pyc delete mode 100644 Jobs_Collections/venv/Lib/site-packages/pylint/extensions/__pycache__/redefined_variable_type.cpython-38.pyc delete mode 100644 Jobs_Collections/venv/Lib/site-packages/pylint/extensions/_check_docs_utils.py delete mode 100644 Jobs_Collections/venv/Lib/site-packages/pylint/extensions/bad_builtin.py delete mode 100644 Jobs_Collections/venv/Lib/site-packages/pylint/extensions/broad_try_clause.py delete mode 100644 Jobs_Collections/venv/Lib/site-packages/pylint/extensions/check_docs.py delete mode 100644 Jobs_Collections/venv/Lib/site-packages/pylint/extensions/check_elif.py delete mode 100644 Jobs_Collections/venv/Lib/site-packages/pylint/extensions/comparetozero.py delete mode 100644 Jobs_Collections/venv/Lib/site-packages/pylint/extensions/docparams.py delete mode 100644 Jobs_Collections/venv/Lib/site-packages/pylint/extensions/docstyle.py delete mode 100644 Jobs_Collections/venv/Lib/site-packages/pylint/extensions/emptystring.py delete mode 100644 Jobs_Collections/venv/Lib/site-packages/pylint/extensions/mccabe.py delete mode 100644 Jobs_Collections/venv/Lib/site-packages/pylint/extensions/overlapping_exceptions.py delete mode 100644 Jobs_Collections/venv/Lib/site-packages/pylint/extensions/redefined_variable_type.py delete mode 100644 Jobs_Collections/venv/Lib/site-packages/pylint/graph.py delete mode 100644 Jobs_Collections/venv/Lib/site-packages/pylint/interfaces.py delete mode 100644 Jobs_Collections/venv/Lib/site-packages/pylint/lint/__init__.py delete mode 100644 Jobs_Collections/venv/Lib/site-packages/pylint/lint/__pycache__/__init__.cpython-38.pyc delete mode 100644 Jobs_Collections/venv/Lib/site-packages/pylint/lint/__pycache__/check_parallel.cpython-38.pyc delete mode 100644 Jobs_Collections/venv/Lib/site-packages/pylint/lint/__pycache__/pylinter.cpython-38.pyc delete mode 100644 Jobs_Collections/venv/Lib/site-packages/pylint/lint/__pycache__/report_functions.cpython-38.pyc delete mode 100644 Jobs_Collections/venv/Lib/site-packages/pylint/lint/__pycache__/run.cpython-38.pyc delete mode 100644 Jobs_Collections/venv/Lib/site-packages/pylint/lint/__pycache__/utils.cpython-38.pyc delete mode 100644 Jobs_Collections/venv/Lib/site-packages/pylint/lint/check_parallel.py delete mode 100644 Jobs_Collections/venv/Lib/site-packages/pylint/lint/pylinter.py delete mode 100644 Jobs_Collections/venv/Lib/site-packages/pylint/lint/report_functions.py delete mode 100644 Jobs_Collections/venv/Lib/site-packages/pylint/lint/run.py delete mode 100644 Jobs_Collections/venv/Lib/site-packages/pylint/lint/utils.py delete mode 100644 Jobs_Collections/venv/Lib/site-packages/pylint/message/__init__.py delete mode 100644 Jobs_Collections/venv/Lib/site-packages/pylint/message/__pycache__/__init__.cpython-38.pyc delete mode 100644 Jobs_Collections/venv/Lib/site-packages/pylint/message/__pycache__/message.cpython-38.pyc delete mode 100644 Jobs_Collections/venv/Lib/site-packages/pylint/message/__pycache__/message_definition.cpython-38.pyc delete mode 100644 Jobs_Collections/venv/Lib/site-packages/pylint/message/__pycache__/message_definition_store.cpython-38.pyc delete mode 100644 Jobs_Collections/venv/Lib/site-packages/pylint/message/__pycache__/message_handler_mix_in.cpython-38.pyc delete mode 100644 Jobs_Collections/venv/Lib/site-packages/pylint/message/__pycache__/message_id_store.cpython-38.pyc delete mode 100644 Jobs_Collections/venv/Lib/site-packages/pylint/message/message.py delete mode 100644 Jobs_Collections/venv/Lib/site-packages/pylint/message/message_definition.py delete mode 100644 Jobs_Collections/venv/Lib/site-packages/pylint/message/message_definition_store.py delete mode 100644 Jobs_Collections/venv/Lib/site-packages/pylint/message/message_handler_mix_in.py delete mode 100644 Jobs_Collections/venv/Lib/site-packages/pylint/message/message_id_store.py delete mode 100644 Jobs_Collections/venv/Lib/site-packages/pylint/pyreverse/__init__.py delete mode 100644 Jobs_Collections/venv/Lib/site-packages/pylint/pyreverse/__pycache__/__init__.cpython-38.pyc delete mode 100644 Jobs_Collections/venv/Lib/site-packages/pylint/pyreverse/__pycache__/diadefslib.cpython-38.pyc delete mode 100644 Jobs_Collections/venv/Lib/site-packages/pylint/pyreverse/__pycache__/diagrams.cpython-38.pyc delete mode 100644 Jobs_Collections/venv/Lib/site-packages/pylint/pyreverse/__pycache__/inspector.cpython-38.pyc delete mode 100644 Jobs_Collections/venv/Lib/site-packages/pylint/pyreverse/__pycache__/main.cpython-38.pyc delete mode 100644 Jobs_Collections/venv/Lib/site-packages/pylint/pyreverse/__pycache__/utils.cpython-38.pyc delete mode 100644 Jobs_Collections/venv/Lib/site-packages/pylint/pyreverse/__pycache__/vcgutils.cpython-38.pyc delete mode 100644 Jobs_Collections/venv/Lib/site-packages/pylint/pyreverse/__pycache__/writer.cpython-38.pyc delete mode 100644 Jobs_Collections/venv/Lib/site-packages/pylint/pyreverse/diadefslib.py delete mode 100644 Jobs_Collections/venv/Lib/site-packages/pylint/pyreverse/diagrams.py delete mode 100644 Jobs_Collections/venv/Lib/site-packages/pylint/pyreverse/inspector.py delete mode 100644 Jobs_Collections/venv/Lib/site-packages/pylint/pyreverse/main.py delete mode 100644 Jobs_Collections/venv/Lib/site-packages/pylint/pyreverse/utils.py delete mode 100644 Jobs_Collections/venv/Lib/site-packages/pylint/pyreverse/vcgutils.py delete mode 100644 Jobs_Collections/venv/Lib/site-packages/pylint/pyreverse/writer.py delete mode 100644 Jobs_Collections/venv/Lib/site-packages/pylint/reporters/__init__.py delete mode 100644 Jobs_Collections/venv/Lib/site-packages/pylint/reporters/__pycache__/__init__.cpython-38.pyc delete mode 100644 Jobs_Collections/venv/Lib/site-packages/pylint/reporters/__pycache__/base_reporter.cpython-38.pyc delete mode 100644 Jobs_Collections/venv/Lib/site-packages/pylint/reporters/__pycache__/collecting_reporter.cpython-38.pyc delete mode 100644 Jobs_Collections/venv/Lib/site-packages/pylint/reporters/__pycache__/json_reporter.cpython-38.pyc delete mode 100644 Jobs_Collections/venv/Lib/site-packages/pylint/reporters/__pycache__/reports_handler_mix_in.cpython-38.pyc delete mode 100644 Jobs_Collections/venv/Lib/site-packages/pylint/reporters/__pycache__/text.cpython-38.pyc delete mode 100644 Jobs_Collections/venv/Lib/site-packages/pylint/reporters/base_reporter.py delete mode 100644 Jobs_Collections/venv/Lib/site-packages/pylint/reporters/collecting_reporter.py delete mode 100644 Jobs_Collections/venv/Lib/site-packages/pylint/reporters/json_reporter.py delete mode 100644 Jobs_Collections/venv/Lib/site-packages/pylint/reporters/reports_handler_mix_in.py delete mode 100644 Jobs_Collections/venv/Lib/site-packages/pylint/reporters/text.py delete mode 100644 Jobs_Collections/venv/Lib/site-packages/pylint/reporters/ureports/__init__.py delete mode 100644 Jobs_Collections/venv/Lib/site-packages/pylint/reporters/ureports/__pycache__/__init__.cpython-38.pyc delete mode 100644 Jobs_Collections/venv/Lib/site-packages/pylint/reporters/ureports/__pycache__/nodes.cpython-38.pyc delete mode 100644 Jobs_Collections/venv/Lib/site-packages/pylint/reporters/ureports/__pycache__/text_writer.cpython-38.pyc delete mode 100644 Jobs_Collections/venv/Lib/site-packages/pylint/reporters/ureports/nodes.py delete mode 100644 Jobs_Collections/venv/Lib/site-packages/pylint/reporters/ureports/text_writer.py delete mode 100644 Jobs_Collections/venv/Lib/site-packages/pylint/testutils.py delete mode 100644 Jobs_Collections/venv/Lib/site-packages/pylint/utils/__init__.py delete mode 100644 Jobs_Collections/venv/Lib/site-packages/pylint/utils/__pycache__/__init__.cpython-38.pyc delete mode 100644 Jobs_Collections/venv/Lib/site-packages/pylint/utils/__pycache__/ast_walker.cpython-38.pyc delete mode 100644 Jobs_Collections/venv/Lib/site-packages/pylint/utils/__pycache__/file_state.cpython-38.pyc delete mode 100644 Jobs_Collections/venv/Lib/site-packages/pylint/utils/__pycache__/pragma_parser.cpython-38.pyc delete mode 100644 Jobs_Collections/venv/Lib/site-packages/pylint/utils/__pycache__/utils.cpython-38.pyc delete mode 100644 Jobs_Collections/venv/Lib/site-packages/pylint/utils/ast_walker.py delete mode 100644 Jobs_Collections/venv/Lib/site-packages/pylint/utils/file_state.py delete mode 100644 Jobs_Collections/venv/Lib/site-packages/pylint/utils/pragma_parser.py delete mode 100644 Jobs_Collections/venv/Lib/site-packages/pylint/utils/utils.py delete mode 100644 Jobs_Collections/venv/Lib/site-packages/requests-2.23.0.dist-info/INSTALLER delete mode 100644 Jobs_Collections/venv/Lib/site-packages/requests-2.23.0.dist-info/LICENSE delete mode 100644 Jobs_Collections/venv/Lib/site-packages/requests-2.23.0.dist-info/METADATA delete mode 100644 Jobs_Collections/venv/Lib/site-packages/requests-2.23.0.dist-info/RECORD delete mode 100644 Jobs_Collections/venv/Lib/site-packages/requests-2.23.0.dist-info/WHEEL delete mode 100644 Jobs_Collections/venv/Lib/site-packages/requests-2.23.0.dist-info/top_level.txt delete mode 100644 Jobs_Collections/venv/Lib/site-packages/requests/__init__.py delete mode 100644 Jobs_Collections/venv/Lib/site-packages/requests/__pycache__/__init__.cpython-38.pyc delete mode 100644 Jobs_Collections/venv/Lib/site-packages/requests/__pycache__/__version__.cpython-38.pyc delete mode 100644 Jobs_Collections/venv/Lib/site-packages/requests/__pycache__/_internal_utils.cpython-38.pyc delete mode 100644 Jobs_Collections/venv/Lib/site-packages/requests/__pycache__/adapters.cpython-38.pyc delete mode 100644 Jobs_Collections/venv/Lib/site-packages/requests/__pycache__/api.cpython-38.pyc delete mode 100644 Jobs_Collections/venv/Lib/site-packages/requests/__pycache__/auth.cpython-38.pyc delete mode 100644 Jobs_Collections/venv/Lib/site-packages/requests/__pycache__/certs.cpython-38.pyc delete mode 100644 Jobs_Collections/venv/Lib/site-packages/requests/__pycache__/compat.cpython-38.pyc delete mode 100644 Jobs_Collections/venv/Lib/site-packages/requests/__pycache__/cookies.cpython-38.pyc delete mode 100644 Jobs_Collections/venv/Lib/site-packages/requests/__pycache__/exceptions.cpython-38.pyc delete mode 100644 Jobs_Collections/venv/Lib/site-packages/requests/__pycache__/help.cpython-38.pyc delete mode 100644 Jobs_Collections/venv/Lib/site-packages/requests/__pycache__/hooks.cpython-38.pyc delete mode 100644 Jobs_Collections/venv/Lib/site-packages/requests/__pycache__/models.cpython-38.pyc delete mode 100644 Jobs_Collections/venv/Lib/site-packages/requests/__pycache__/packages.cpython-38.pyc delete mode 100644 Jobs_Collections/venv/Lib/site-packages/requests/__pycache__/sessions.cpython-38.pyc delete mode 100644 Jobs_Collections/venv/Lib/site-packages/requests/__pycache__/status_codes.cpython-38.pyc delete mode 100644 Jobs_Collections/venv/Lib/site-packages/requests/__pycache__/structures.cpython-38.pyc delete mode 100644 Jobs_Collections/venv/Lib/site-packages/requests/__pycache__/utils.cpython-38.pyc delete mode 100644 Jobs_Collections/venv/Lib/site-packages/requests/__version__.py delete mode 100644 Jobs_Collections/venv/Lib/site-packages/requests/_internal_utils.py delete mode 100644 Jobs_Collections/venv/Lib/site-packages/requests/adapters.py delete mode 100644 Jobs_Collections/venv/Lib/site-packages/requests/api.py delete mode 100644 Jobs_Collections/venv/Lib/site-packages/requests/auth.py delete mode 100644 Jobs_Collections/venv/Lib/site-packages/requests/certs.py delete mode 100644 Jobs_Collections/venv/Lib/site-packages/requests/compat.py delete mode 100644 Jobs_Collections/venv/Lib/site-packages/requests/cookies.py delete mode 100644 Jobs_Collections/venv/Lib/site-packages/requests/exceptions.py delete mode 100644 Jobs_Collections/venv/Lib/site-packages/requests/help.py delete mode 100644 Jobs_Collections/venv/Lib/site-packages/requests/hooks.py delete mode 100644 Jobs_Collections/venv/Lib/site-packages/requests/models.py delete mode 100644 Jobs_Collections/venv/Lib/site-packages/requests/packages.py delete mode 100644 Jobs_Collections/venv/Lib/site-packages/requests/sessions.py delete mode 100644 Jobs_Collections/venv/Lib/site-packages/requests/status_codes.py delete mode 100644 Jobs_Collections/venv/Lib/site-packages/requests/structures.py delete mode 100644 Jobs_Collections/venv/Lib/site-packages/requests/utils.py delete mode 100644 Jobs_Collections/venv/Lib/site-packages/setuptools-41.2.0.dist-info/INSTALLER delete mode 100644 Jobs_Collections/venv/Lib/site-packages/setuptools-41.2.0.dist-info/LICENSE delete mode 100644 Jobs_Collections/venv/Lib/site-packages/setuptools-41.2.0.dist-info/METADATA delete mode 100644 Jobs_Collections/venv/Lib/site-packages/setuptools-41.2.0.dist-info/RECORD delete mode 100644 Jobs_Collections/venv/Lib/site-packages/setuptools-41.2.0.dist-info/WHEEL delete mode 100644 Jobs_Collections/venv/Lib/site-packages/setuptools-41.2.0.dist-info/dependency_links.txt delete mode 100644 Jobs_Collections/venv/Lib/site-packages/setuptools-41.2.0.dist-info/entry_points.txt delete mode 100644 Jobs_Collections/venv/Lib/site-packages/setuptools-41.2.0.dist-info/top_level.txt delete mode 100644 Jobs_Collections/venv/Lib/site-packages/setuptools-41.2.0.dist-info/zip-safe delete mode 100644 Jobs_Collections/venv/Lib/site-packages/setuptools/__init__.py delete mode 100644 Jobs_Collections/venv/Lib/site-packages/setuptools/__pycache__/__init__.cpython-38.pyc delete mode 100644 Jobs_Collections/venv/Lib/site-packages/setuptools/__pycache__/_deprecation_warning.cpython-38.pyc delete mode 100644 Jobs_Collections/venv/Lib/site-packages/setuptools/__pycache__/archive_util.cpython-38.pyc delete mode 100644 Jobs_Collections/venv/Lib/site-packages/setuptools/__pycache__/build_meta.cpython-38.pyc delete mode 100644 Jobs_Collections/venv/Lib/site-packages/setuptools/__pycache__/config.cpython-38.pyc delete mode 100644 Jobs_Collections/venv/Lib/site-packages/setuptools/__pycache__/dep_util.cpython-38.pyc delete mode 100644 Jobs_Collections/venv/Lib/site-packages/setuptools/__pycache__/depends.cpython-38.pyc delete mode 100644 Jobs_Collections/venv/Lib/site-packages/setuptools/__pycache__/dist.cpython-38.pyc delete mode 100644 Jobs_Collections/venv/Lib/site-packages/setuptools/__pycache__/extension.cpython-38.pyc delete mode 100644 Jobs_Collections/venv/Lib/site-packages/setuptools/__pycache__/glibc.cpython-38.pyc delete mode 100644 Jobs_Collections/venv/Lib/site-packages/setuptools/__pycache__/glob.cpython-38.pyc delete mode 100644 Jobs_Collections/venv/Lib/site-packages/setuptools/__pycache__/launch.cpython-38.pyc delete mode 100644 Jobs_Collections/venv/Lib/site-packages/setuptools/__pycache__/lib2to3_ex.cpython-38.pyc delete mode 100644 Jobs_Collections/venv/Lib/site-packages/setuptools/__pycache__/monkey.cpython-38.pyc delete mode 100644 Jobs_Collections/venv/Lib/site-packages/setuptools/__pycache__/msvc.cpython-38.pyc delete mode 100644 Jobs_Collections/venv/Lib/site-packages/setuptools/__pycache__/namespaces.cpython-38.pyc delete mode 100644 Jobs_Collections/venv/Lib/site-packages/setuptools/__pycache__/package_index.cpython-38.pyc delete mode 100644 Jobs_Collections/venv/Lib/site-packages/setuptools/__pycache__/pep425tags.cpython-38.pyc delete mode 100644 Jobs_Collections/venv/Lib/site-packages/setuptools/__pycache__/py27compat.cpython-38.pyc delete mode 100644 Jobs_Collections/venv/Lib/site-packages/setuptools/__pycache__/py31compat.cpython-38.pyc delete mode 100644 Jobs_Collections/venv/Lib/site-packages/setuptools/__pycache__/py33compat.cpython-38.pyc delete mode 100644 Jobs_Collections/venv/Lib/site-packages/setuptools/__pycache__/sandbox.cpython-38.pyc delete mode 100644 Jobs_Collections/venv/Lib/site-packages/setuptools/__pycache__/site-patch.cpython-38.pyc delete mode 100644 Jobs_Collections/venv/Lib/site-packages/setuptools/__pycache__/ssl_support.cpython-38.pyc delete mode 100644 Jobs_Collections/venv/Lib/site-packages/setuptools/__pycache__/unicode_utils.cpython-38.pyc delete mode 100644 Jobs_Collections/venv/Lib/site-packages/setuptools/__pycache__/version.cpython-38.pyc delete mode 100644 Jobs_Collections/venv/Lib/site-packages/setuptools/__pycache__/wheel.cpython-38.pyc delete mode 100644 Jobs_Collections/venv/Lib/site-packages/setuptools/__pycache__/windows_support.cpython-38.pyc delete mode 100644 Jobs_Collections/venv/Lib/site-packages/setuptools/_deprecation_warning.py delete mode 100644 Jobs_Collections/venv/Lib/site-packages/setuptools/_vendor/__init__.py delete mode 100644 Jobs_Collections/venv/Lib/site-packages/setuptools/_vendor/__pycache__/__init__.cpython-38.pyc delete mode 100644 Jobs_Collections/venv/Lib/site-packages/setuptools/_vendor/__pycache__/pyparsing.cpython-38.pyc delete mode 100644 Jobs_Collections/venv/Lib/site-packages/setuptools/_vendor/__pycache__/six.cpython-38.pyc delete mode 100644 Jobs_Collections/venv/Lib/site-packages/setuptools/_vendor/packaging/__about__.py delete mode 100644 Jobs_Collections/venv/Lib/site-packages/setuptools/_vendor/packaging/__init__.py delete mode 100644 Jobs_Collections/venv/Lib/site-packages/setuptools/_vendor/packaging/__pycache__/__about__.cpython-38.pyc delete mode 100644 Jobs_Collections/venv/Lib/site-packages/setuptools/_vendor/packaging/__pycache__/__init__.cpython-38.pyc delete mode 100644 Jobs_Collections/venv/Lib/site-packages/setuptools/_vendor/packaging/__pycache__/_compat.cpython-38.pyc delete mode 100644 Jobs_Collections/venv/Lib/site-packages/setuptools/_vendor/packaging/__pycache__/_structures.cpython-38.pyc delete mode 100644 Jobs_Collections/venv/Lib/site-packages/setuptools/_vendor/packaging/__pycache__/markers.cpython-38.pyc delete mode 100644 Jobs_Collections/venv/Lib/site-packages/setuptools/_vendor/packaging/__pycache__/requirements.cpython-38.pyc delete mode 100644 Jobs_Collections/venv/Lib/site-packages/setuptools/_vendor/packaging/__pycache__/specifiers.cpython-38.pyc delete mode 100644 Jobs_Collections/venv/Lib/site-packages/setuptools/_vendor/packaging/__pycache__/utils.cpython-38.pyc delete mode 100644 Jobs_Collections/venv/Lib/site-packages/setuptools/_vendor/packaging/__pycache__/version.cpython-38.pyc delete mode 100644 Jobs_Collections/venv/Lib/site-packages/setuptools/_vendor/packaging/_compat.py delete mode 100644 Jobs_Collections/venv/Lib/site-packages/setuptools/_vendor/packaging/_structures.py delete mode 100644 Jobs_Collections/venv/Lib/site-packages/setuptools/_vendor/packaging/markers.py delete mode 100644 Jobs_Collections/venv/Lib/site-packages/setuptools/_vendor/packaging/requirements.py delete mode 100644 Jobs_Collections/venv/Lib/site-packages/setuptools/_vendor/packaging/specifiers.py delete mode 100644 Jobs_Collections/venv/Lib/site-packages/setuptools/_vendor/packaging/utils.py delete mode 100644 Jobs_Collections/venv/Lib/site-packages/setuptools/_vendor/packaging/version.py delete mode 100644 Jobs_Collections/venv/Lib/site-packages/setuptools/_vendor/pyparsing.py delete mode 100644 Jobs_Collections/venv/Lib/site-packages/setuptools/_vendor/six.py delete mode 100644 Jobs_Collections/venv/Lib/site-packages/setuptools/archive_util.py delete mode 100644 Jobs_Collections/venv/Lib/site-packages/setuptools/build_meta.py delete mode 100644 Jobs_Collections/venv/Lib/site-packages/setuptools/cli-32.exe delete mode 100644 Jobs_Collections/venv/Lib/site-packages/setuptools/cli-64.exe delete mode 100644 Jobs_Collections/venv/Lib/site-packages/setuptools/cli.exe delete mode 100644 Jobs_Collections/venv/Lib/site-packages/setuptools/command/__init__.py delete mode 100644 Jobs_Collections/venv/Lib/site-packages/setuptools/command/__pycache__/__init__.cpython-38.pyc delete mode 100644 Jobs_Collections/venv/Lib/site-packages/setuptools/command/__pycache__/alias.cpython-38.pyc delete mode 100644 Jobs_Collections/venv/Lib/site-packages/setuptools/command/__pycache__/bdist_egg.cpython-38.pyc delete mode 100644 Jobs_Collections/venv/Lib/site-packages/setuptools/command/__pycache__/bdist_rpm.cpython-38.pyc delete mode 100644 Jobs_Collections/venv/Lib/site-packages/setuptools/command/__pycache__/bdist_wininst.cpython-38.pyc delete mode 100644 Jobs_Collections/venv/Lib/site-packages/setuptools/command/__pycache__/build_clib.cpython-38.pyc delete mode 100644 Jobs_Collections/venv/Lib/site-packages/setuptools/command/__pycache__/build_ext.cpython-38.pyc delete mode 100644 Jobs_Collections/venv/Lib/site-packages/setuptools/command/__pycache__/build_py.cpython-38.pyc delete mode 100644 Jobs_Collections/venv/Lib/site-packages/setuptools/command/__pycache__/develop.cpython-38.pyc delete mode 100644 Jobs_Collections/venv/Lib/site-packages/setuptools/command/__pycache__/dist_info.cpython-38.pyc delete mode 100644 Jobs_Collections/venv/Lib/site-packages/setuptools/command/__pycache__/easy_install.cpython-38.pyc delete mode 100644 Jobs_Collections/venv/Lib/site-packages/setuptools/command/__pycache__/egg_info.cpython-38.pyc delete mode 100644 Jobs_Collections/venv/Lib/site-packages/setuptools/command/__pycache__/install.cpython-38.pyc delete mode 100644 Jobs_Collections/venv/Lib/site-packages/setuptools/command/__pycache__/install_egg_info.cpython-38.pyc delete mode 100644 Jobs_Collections/venv/Lib/site-packages/setuptools/command/__pycache__/install_lib.cpython-38.pyc delete mode 100644 Jobs_Collections/venv/Lib/site-packages/setuptools/command/__pycache__/install_scripts.cpython-38.pyc delete mode 100644 Jobs_Collections/venv/Lib/site-packages/setuptools/command/__pycache__/py36compat.cpython-38.pyc delete mode 100644 Jobs_Collections/venv/Lib/site-packages/setuptools/command/__pycache__/register.cpython-38.pyc delete mode 100644 Jobs_Collections/venv/Lib/site-packages/setuptools/command/__pycache__/rotate.cpython-38.pyc delete mode 100644 Jobs_Collections/venv/Lib/site-packages/setuptools/command/__pycache__/saveopts.cpython-38.pyc delete mode 100644 Jobs_Collections/venv/Lib/site-packages/setuptools/command/__pycache__/sdist.cpython-38.pyc delete mode 100644 Jobs_Collections/venv/Lib/site-packages/setuptools/command/__pycache__/setopt.cpython-38.pyc delete mode 100644 Jobs_Collections/venv/Lib/site-packages/setuptools/command/__pycache__/test.cpython-38.pyc delete mode 100644 Jobs_Collections/venv/Lib/site-packages/setuptools/command/__pycache__/upload.cpython-38.pyc delete mode 100644 Jobs_Collections/venv/Lib/site-packages/setuptools/command/__pycache__/upload_docs.cpython-38.pyc delete mode 100644 Jobs_Collections/venv/Lib/site-packages/setuptools/command/alias.py delete mode 100644 Jobs_Collections/venv/Lib/site-packages/setuptools/command/bdist_egg.py delete mode 100644 Jobs_Collections/venv/Lib/site-packages/setuptools/command/bdist_rpm.py delete mode 100644 Jobs_Collections/venv/Lib/site-packages/setuptools/command/bdist_wininst.py delete mode 100644 Jobs_Collections/venv/Lib/site-packages/setuptools/command/build_clib.py delete mode 100644 Jobs_Collections/venv/Lib/site-packages/setuptools/command/build_ext.py delete mode 100644 Jobs_Collections/venv/Lib/site-packages/setuptools/command/build_py.py delete mode 100644 Jobs_Collections/venv/Lib/site-packages/setuptools/command/develop.py delete mode 100644 Jobs_Collections/venv/Lib/site-packages/setuptools/command/dist_info.py delete mode 100644 Jobs_Collections/venv/Lib/site-packages/setuptools/command/easy_install.py delete mode 100644 Jobs_Collections/venv/Lib/site-packages/setuptools/command/egg_info.py delete mode 100644 Jobs_Collections/venv/Lib/site-packages/setuptools/command/install.py delete mode 100644 Jobs_Collections/venv/Lib/site-packages/setuptools/command/install_egg_info.py delete mode 100644 Jobs_Collections/venv/Lib/site-packages/setuptools/command/install_lib.py delete mode 100644 Jobs_Collections/venv/Lib/site-packages/setuptools/command/install_scripts.py delete mode 100644 Jobs_Collections/venv/Lib/site-packages/setuptools/command/launcher manifest.xml delete mode 100644 Jobs_Collections/venv/Lib/site-packages/setuptools/command/py36compat.py delete mode 100644 Jobs_Collections/venv/Lib/site-packages/setuptools/command/register.py delete mode 100644 Jobs_Collections/venv/Lib/site-packages/setuptools/command/rotate.py delete mode 100644 Jobs_Collections/venv/Lib/site-packages/setuptools/command/saveopts.py delete mode 100644 Jobs_Collections/venv/Lib/site-packages/setuptools/command/sdist.py delete mode 100644 Jobs_Collections/venv/Lib/site-packages/setuptools/command/setopt.py delete mode 100644 Jobs_Collections/venv/Lib/site-packages/setuptools/command/test.py delete mode 100644 Jobs_Collections/venv/Lib/site-packages/setuptools/command/upload.py delete mode 100644 Jobs_Collections/venv/Lib/site-packages/setuptools/command/upload_docs.py delete mode 100644 Jobs_Collections/venv/Lib/site-packages/setuptools/config.py delete mode 100644 Jobs_Collections/venv/Lib/site-packages/setuptools/dep_util.py delete mode 100644 Jobs_Collections/venv/Lib/site-packages/setuptools/depends.py delete mode 100644 Jobs_Collections/venv/Lib/site-packages/setuptools/dist.py delete mode 100644 Jobs_Collections/venv/Lib/site-packages/setuptools/extension.py delete mode 100644 Jobs_Collections/venv/Lib/site-packages/setuptools/extern/__init__.py delete mode 100644 Jobs_Collections/venv/Lib/site-packages/setuptools/extern/__pycache__/__init__.cpython-38.pyc delete mode 100644 Jobs_Collections/venv/Lib/site-packages/setuptools/glibc.py delete mode 100644 Jobs_Collections/venv/Lib/site-packages/setuptools/glob.py delete mode 100644 Jobs_Collections/venv/Lib/site-packages/setuptools/gui-32.exe delete mode 100644 Jobs_Collections/venv/Lib/site-packages/setuptools/gui-64.exe delete mode 100644 Jobs_Collections/venv/Lib/site-packages/setuptools/gui.exe delete mode 100644 Jobs_Collections/venv/Lib/site-packages/setuptools/launch.py delete mode 100644 Jobs_Collections/venv/Lib/site-packages/setuptools/lib2to3_ex.py delete mode 100644 Jobs_Collections/venv/Lib/site-packages/setuptools/monkey.py delete mode 100644 Jobs_Collections/venv/Lib/site-packages/setuptools/msvc.py delete mode 100644 Jobs_Collections/venv/Lib/site-packages/setuptools/namespaces.py delete mode 100644 Jobs_Collections/venv/Lib/site-packages/setuptools/package_index.py delete mode 100644 Jobs_Collections/venv/Lib/site-packages/setuptools/pep425tags.py delete mode 100644 Jobs_Collections/venv/Lib/site-packages/setuptools/py27compat.py delete mode 100644 Jobs_Collections/venv/Lib/site-packages/setuptools/py31compat.py delete mode 100644 Jobs_Collections/venv/Lib/site-packages/setuptools/py33compat.py delete mode 100644 Jobs_Collections/venv/Lib/site-packages/setuptools/sandbox.py delete mode 100644 Jobs_Collections/venv/Lib/site-packages/setuptools/script (dev).tmpl delete mode 100644 Jobs_Collections/venv/Lib/site-packages/setuptools/script.tmpl delete mode 100644 Jobs_Collections/venv/Lib/site-packages/setuptools/site-patch.py delete mode 100644 Jobs_Collections/venv/Lib/site-packages/setuptools/ssl_support.py delete mode 100644 Jobs_Collections/venv/Lib/site-packages/setuptools/unicode_utils.py delete mode 100644 Jobs_Collections/venv/Lib/site-packages/setuptools/version.py delete mode 100644 Jobs_Collections/venv/Lib/site-packages/setuptools/wheel.py delete mode 100644 Jobs_Collections/venv/Lib/site-packages/setuptools/windows_support.py delete mode 100644 Jobs_Collections/venv/Lib/site-packages/six-1.15.0.dist-info/INSTALLER delete mode 100644 Jobs_Collections/venv/Lib/site-packages/six-1.15.0.dist-info/LICENSE delete mode 100644 Jobs_Collections/venv/Lib/site-packages/six-1.15.0.dist-info/METADATA delete mode 100644 Jobs_Collections/venv/Lib/site-packages/six-1.15.0.dist-info/RECORD delete mode 100644 Jobs_Collections/venv/Lib/site-packages/six-1.15.0.dist-info/WHEEL delete mode 100644 Jobs_Collections/venv/Lib/site-packages/six-1.15.0.dist-info/top_level.txt delete mode 100644 Jobs_Collections/venv/Lib/site-packages/six.py delete mode 100644 Jobs_Collections/venv/Lib/site-packages/soupsieve-2.0.1.dist-info/INSTALLER delete mode 100644 Jobs_Collections/venv/Lib/site-packages/soupsieve-2.0.1.dist-info/LICENSE.md delete mode 100644 Jobs_Collections/venv/Lib/site-packages/soupsieve-2.0.1.dist-info/METADATA delete mode 100644 Jobs_Collections/venv/Lib/site-packages/soupsieve-2.0.1.dist-info/RECORD delete mode 100644 Jobs_Collections/venv/Lib/site-packages/soupsieve-2.0.1.dist-info/WHEEL delete mode 100644 Jobs_Collections/venv/Lib/site-packages/soupsieve-2.0.1.dist-info/top_level.txt delete mode 100644 Jobs_Collections/venv/Lib/site-packages/soupsieve/__init__.py delete mode 100644 Jobs_Collections/venv/Lib/site-packages/soupsieve/__meta__.py delete mode 100644 Jobs_Collections/venv/Lib/site-packages/soupsieve/__pycache__/__init__.cpython-38.pyc delete mode 100644 Jobs_Collections/venv/Lib/site-packages/soupsieve/__pycache__/__meta__.cpython-38.pyc delete mode 100644 Jobs_Collections/venv/Lib/site-packages/soupsieve/__pycache__/css_match.cpython-38.pyc delete mode 100644 Jobs_Collections/venv/Lib/site-packages/soupsieve/__pycache__/css_parser.cpython-38.pyc delete mode 100644 Jobs_Collections/venv/Lib/site-packages/soupsieve/__pycache__/css_types.cpython-38.pyc delete mode 100644 Jobs_Collections/venv/Lib/site-packages/soupsieve/__pycache__/util.cpython-38.pyc delete mode 100644 Jobs_Collections/venv/Lib/site-packages/soupsieve/css_match.py delete mode 100644 Jobs_Collections/venv/Lib/site-packages/soupsieve/css_parser.py delete mode 100644 Jobs_Collections/venv/Lib/site-packages/soupsieve/css_types.py delete mode 100644 Jobs_Collections/venv/Lib/site-packages/soupsieve/util.py delete mode 100644 Jobs_Collections/venv/Lib/site-packages/toml-0.10.1.dist-info/DESCRIPTION.rst delete mode 100644 Jobs_Collections/venv/Lib/site-packages/toml-0.10.1.dist-info/INSTALLER delete mode 100644 Jobs_Collections/venv/Lib/site-packages/toml-0.10.1.dist-info/LICENSE.txt delete mode 100644 Jobs_Collections/venv/Lib/site-packages/toml-0.10.1.dist-info/METADATA delete mode 100644 Jobs_Collections/venv/Lib/site-packages/toml-0.10.1.dist-info/RECORD delete mode 100644 Jobs_Collections/venv/Lib/site-packages/toml-0.10.1.dist-info/WHEEL delete mode 100644 Jobs_Collections/venv/Lib/site-packages/toml-0.10.1.dist-info/metadata.json delete mode 100644 Jobs_Collections/venv/Lib/site-packages/toml-0.10.1.dist-info/top_level.txt delete mode 100644 Jobs_Collections/venv/Lib/site-packages/toml/__init__.py delete mode 100644 Jobs_Collections/venv/Lib/site-packages/toml/__pycache__/__init__.cpython-38.pyc delete mode 100644 Jobs_Collections/venv/Lib/site-packages/toml/__pycache__/common.cpython-38.pyc delete mode 100644 Jobs_Collections/venv/Lib/site-packages/toml/__pycache__/decoder.cpython-38.pyc delete mode 100644 Jobs_Collections/venv/Lib/site-packages/toml/__pycache__/encoder.cpython-38.pyc delete mode 100644 Jobs_Collections/venv/Lib/site-packages/toml/__pycache__/ordered.cpython-38.pyc delete mode 100644 Jobs_Collections/venv/Lib/site-packages/toml/__pycache__/tz.cpython-38.pyc delete mode 100644 Jobs_Collections/venv/Lib/site-packages/toml/common.py delete mode 100644 Jobs_Collections/venv/Lib/site-packages/toml/decoder.py delete mode 100644 Jobs_Collections/venv/Lib/site-packages/toml/encoder.py delete mode 100644 Jobs_Collections/venv/Lib/site-packages/toml/ordered.py delete mode 100644 Jobs_Collections/venv/Lib/site-packages/toml/tz.py delete mode 100644 Jobs_Collections/venv/Lib/site-packages/urllib3-1.25.9.dist-info/INSTALLER delete mode 100644 Jobs_Collections/venv/Lib/site-packages/urllib3-1.25.9.dist-info/LICENSE.txt delete mode 100644 Jobs_Collections/venv/Lib/site-packages/urllib3-1.25.9.dist-info/METADATA delete mode 100644 Jobs_Collections/venv/Lib/site-packages/urllib3-1.25.9.dist-info/RECORD delete mode 100644 Jobs_Collections/venv/Lib/site-packages/urllib3-1.25.9.dist-info/WHEEL delete mode 100644 Jobs_Collections/venv/Lib/site-packages/urllib3-1.25.9.dist-info/top_level.txt delete mode 100644 Jobs_Collections/venv/Lib/site-packages/urllib3/__init__.py delete mode 100644 Jobs_Collections/venv/Lib/site-packages/urllib3/__pycache__/__init__.cpython-38.pyc delete mode 100644 Jobs_Collections/venv/Lib/site-packages/urllib3/__pycache__/_collections.cpython-38.pyc delete mode 100644 Jobs_Collections/venv/Lib/site-packages/urllib3/__pycache__/connection.cpython-38.pyc delete mode 100644 Jobs_Collections/venv/Lib/site-packages/urllib3/__pycache__/connectionpool.cpython-38.pyc delete mode 100644 Jobs_Collections/venv/Lib/site-packages/urllib3/__pycache__/exceptions.cpython-38.pyc delete mode 100644 Jobs_Collections/venv/Lib/site-packages/urllib3/__pycache__/fields.cpython-38.pyc delete mode 100644 Jobs_Collections/venv/Lib/site-packages/urllib3/__pycache__/filepost.cpython-38.pyc delete mode 100644 Jobs_Collections/venv/Lib/site-packages/urllib3/__pycache__/poolmanager.cpython-38.pyc delete mode 100644 Jobs_Collections/venv/Lib/site-packages/urllib3/__pycache__/request.cpython-38.pyc delete mode 100644 Jobs_Collections/venv/Lib/site-packages/urllib3/__pycache__/response.cpython-38.pyc delete mode 100644 Jobs_Collections/venv/Lib/site-packages/urllib3/_collections.py delete mode 100644 Jobs_Collections/venv/Lib/site-packages/urllib3/connection.py delete mode 100644 Jobs_Collections/venv/Lib/site-packages/urllib3/connectionpool.py delete mode 100644 Jobs_Collections/venv/Lib/site-packages/urllib3/contrib/__init__.py delete mode 100644 Jobs_Collections/venv/Lib/site-packages/urllib3/contrib/__pycache__/__init__.cpython-38.pyc delete mode 100644 Jobs_Collections/venv/Lib/site-packages/urllib3/contrib/__pycache__/_appengine_environ.cpython-38.pyc delete mode 100644 Jobs_Collections/venv/Lib/site-packages/urllib3/contrib/__pycache__/appengine.cpython-38.pyc delete mode 100644 Jobs_Collections/venv/Lib/site-packages/urllib3/contrib/__pycache__/ntlmpool.cpython-38.pyc delete mode 100644 Jobs_Collections/venv/Lib/site-packages/urllib3/contrib/__pycache__/pyopenssl.cpython-38.pyc delete mode 100644 Jobs_Collections/venv/Lib/site-packages/urllib3/contrib/__pycache__/securetransport.cpython-38.pyc delete mode 100644 Jobs_Collections/venv/Lib/site-packages/urllib3/contrib/__pycache__/socks.cpython-38.pyc delete mode 100644 Jobs_Collections/venv/Lib/site-packages/urllib3/contrib/_appengine_environ.py delete mode 100644 Jobs_Collections/venv/Lib/site-packages/urllib3/contrib/_securetransport/__init__.py delete mode 100644 Jobs_Collections/venv/Lib/site-packages/urllib3/contrib/_securetransport/__pycache__/__init__.cpython-38.pyc delete mode 100644 Jobs_Collections/venv/Lib/site-packages/urllib3/contrib/_securetransport/__pycache__/bindings.cpython-38.pyc delete mode 100644 Jobs_Collections/venv/Lib/site-packages/urllib3/contrib/_securetransport/__pycache__/low_level.cpython-38.pyc delete mode 100644 Jobs_Collections/venv/Lib/site-packages/urllib3/contrib/_securetransport/bindings.py delete mode 100644 Jobs_Collections/venv/Lib/site-packages/urllib3/contrib/_securetransport/low_level.py delete mode 100644 Jobs_Collections/venv/Lib/site-packages/urllib3/contrib/appengine.py delete mode 100644 Jobs_Collections/venv/Lib/site-packages/urllib3/contrib/ntlmpool.py delete mode 100644 Jobs_Collections/venv/Lib/site-packages/urllib3/contrib/pyopenssl.py delete mode 100644 Jobs_Collections/venv/Lib/site-packages/urllib3/contrib/securetransport.py delete mode 100644 Jobs_Collections/venv/Lib/site-packages/urllib3/contrib/socks.py delete mode 100644 Jobs_Collections/venv/Lib/site-packages/urllib3/exceptions.py delete mode 100644 Jobs_Collections/venv/Lib/site-packages/urllib3/fields.py delete mode 100644 Jobs_Collections/venv/Lib/site-packages/urllib3/filepost.py delete mode 100644 Jobs_Collections/venv/Lib/site-packages/urllib3/packages/__init__.py delete mode 100644 Jobs_Collections/venv/Lib/site-packages/urllib3/packages/__pycache__/__init__.cpython-38.pyc delete mode 100644 Jobs_Collections/venv/Lib/site-packages/urllib3/packages/__pycache__/six.cpython-38.pyc delete mode 100644 Jobs_Collections/venv/Lib/site-packages/urllib3/packages/backports/__init__.py delete mode 100644 Jobs_Collections/venv/Lib/site-packages/urllib3/packages/backports/__pycache__/__init__.cpython-38.pyc delete mode 100644 Jobs_Collections/venv/Lib/site-packages/urllib3/packages/backports/__pycache__/makefile.cpython-38.pyc delete mode 100644 Jobs_Collections/venv/Lib/site-packages/urllib3/packages/backports/makefile.py delete mode 100644 Jobs_Collections/venv/Lib/site-packages/urllib3/packages/six.py delete mode 100644 Jobs_Collections/venv/Lib/site-packages/urllib3/packages/ssl_match_hostname/__init__.py delete mode 100644 Jobs_Collections/venv/Lib/site-packages/urllib3/packages/ssl_match_hostname/__pycache__/__init__.cpython-38.pyc delete mode 100644 Jobs_Collections/venv/Lib/site-packages/urllib3/packages/ssl_match_hostname/__pycache__/_implementation.cpython-38.pyc delete mode 100644 Jobs_Collections/venv/Lib/site-packages/urllib3/packages/ssl_match_hostname/_implementation.py delete mode 100644 Jobs_Collections/venv/Lib/site-packages/urllib3/poolmanager.py delete mode 100644 Jobs_Collections/venv/Lib/site-packages/urllib3/request.py delete mode 100644 Jobs_Collections/venv/Lib/site-packages/urllib3/response.py delete mode 100644 Jobs_Collections/venv/Lib/site-packages/urllib3/util/__init__.py delete mode 100644 Jobs_Collections/venv/Lib/site-packages/urllib3/util/__pycache__/__init__.cpython-38.pyc delete mode 100644 Jobs_Collections/venv/Lib/site-packages/urllib3/util/__pycache__/connection.cpython-38.pyc delete mode 100644 Jobs_Collections/venv/Lib/site-packages/urllib3/util/__pycache__/queue.cpython-38.pyc delete mode 100644 Jobs_Collections/venv/Lib/site-packages/urllib3/util/__pycache__/request.cpython-38.pyc delete mode 100644 Jobs_Collections/venv/Lib/site-packages/urllib3/util/__pycache__/response.cpython-38.pyc delete mode 100644 Jobs_Collections/venv/Lib/site-packages/urllib3/util/__pycache__/retry.cpython-38.pyc delete mode 100644 Jobs_Collections/venv/Lib/site-packages/urllib3/util/__pycache__/ssl_.cpython-38.pyc delete mode 100644 Jobs_Collections/venv/Lib/site-packages/urllib3/util/__pycache__/timeout.cpython-38.pyc delete mode 100644 Jobs_Collections/venv/Lib/site-packages/urllib3/util/__pycache__/url.cpython-38.pyc delete mode 100644 Jobs_Collections/venv/Lib/site-packages/urllib3/util/__pycache__/wait.cpython-38.pyc delete mode 100644 Jobs_Collections/venv/Lib/site-packages/urllib3/util/connection.py delete mode 100644 Jobs_Collections/venv/Lib/site-packages/urllib3/util/queue.py delete mode 100644 Jobs_Collections/venv/Lib/site-packages/urllib3/util/request.py delete mode 100644 Jobs_Collections/venv/Lib/site-packages/urllib3/util/response.py delete mode 100644 Jobs_Collections/venv/Lib/site-packages/urllib3/util/retry.py delete mode 100644 Jobs_Collections/venv/Lib/site-packages/urllib3/util/ssl_.py delete mode 100644 Jobs_Collections/venv/Lib/site-packages/urllib3/util/timeout.py delete mode 100644 Jobs_Collections/venv/Lib/site-packages/urllib3/util/url.py delete mode 100644 Jobs_Collections/venv/Lib/site-packages/urllib3/util/wait.py delete mode 100644 Jobs_Collections/venv/Lib/site-packages/werkzeug/__init__.py delete mode 100644 Jobs_Collections/venv/Lib/site-packages/werkzeug/__pycache__/__init__.cpython-38.pyc delete mode 100644 Jobs_Collections/venv/Lib/site-packages/werkzeug/__pycache__/_compat.cpython-38.pyc delete mode 100644 Jobs_Collections/venv/Lib/site-packages/werkzeug/__pycache__/_internal.cpython-38.pyc delete mode 100644 Jobs_Collections/venv/Lib/site-packages/werkzeug/__pycache__/_reloader.cpython-38.pyc delete mode 100644 Jobs_Collections/venv/Lib/site-packages/werkzeug/__pycache__/datastructures.cpython-38.pyc delete mode 100644 Jobs_Collections/venv/Lib/site-packages/werkzeug/__pycache__/exceptions.cpython-38.pyc delete mode 100644 Jobs_Collections/venv/Lib/site-packages/werkzeug/__pycache__/filesystem.cpython-38.pyc delete mode 100644 Jobs_Collections/venv/Lib/site-packages/werkzeug/__pycache__/formparser.cpython-38.pyc delete mode 100644 Jobs_Collections/venv/Lib/site-packages/werkzeug/__pycache__/http.cpython-38.pyc delete mode 100644 Jobs_Collections/venv/Lib/site-packages/werkzeug/__pycache__/local.cpython-38.pyc delete mode 100644 Jobs_Collections/venv/Lib/site-packages/werkzeug/__pycache__/posixemulation.cpython-38.pyc delete mode 100644 Jobs_Collections/venv/Lib/site-packages/werkzeug/__pycache__/routing.cpython-38.pyc delete mode 100644 Jobs_Collections/venv/Lib/site-packages/werkzeug/__pycache__/security.cpython-38.pyc delete mode 100644 Jobs_Collections/venv/Lib/site-packages/werkzeug/__pycache__/serving.cpython-38.pyc delete mode 100644 Jobs_Collections/venv/Lib/site-packages/werkzeug/__pycache__/test.cpython-38.pyc delete mode 100644 Jobs_Collections/venv/Lib/site-packages/werkzeug/__pycache__/testapp.cpython-38.pyc delete mode 100644 Jobs_Collections/venv/Lib/site-packages/werkzeug/__pycache__/urls.cpython-38.pyc delete mode 100644 Jobs_Collections/venv/Lib/site-packages/werkzeug/__pycache__/useragents.cpython-38.pyc delete mode 100644 Jobs_Collections/venv/Lib/site-packages/werkzeug/__pycache__/utils.cpython-38.pyc delete mode 100644 Jobs_Collections/venv/Lib/site-packages/werkzeug/__pycache__/wsgi.cpython-38.pyc delete mode 100644 Jobs_Collections/venv/Lib/site-packages/werkzeug/_compat.py delete mode 100644 Jobs_Collections/venv/Lib/site-packages/werkzeug/_internal.py delete mode 100644 Jobs_Collections/venv/Lib/site-packages/werkzeug/_reloader.py delete mode 100644 Jobs_Collections/venv/Lib/site-packages/werkzeug/datastructures.py delete mode 100644 Jobs_Collections/venv/Lib/site-packages/werkzeug/debug/__init__.py delete mode 100644 Jobs_Collections/venv/Lib/site-packages/werkzeug/debug/__pycache__/__init__.cpython-38.pyc delete mode 100644 Jobs_Collections/venv/Lib/site-packages/werkzeug/debug/__pycache__/console.cpython-38.pyc delete mode 100644 Jobs_Collections/venv/Lib/site-packages/werkzeug/debug/__pycache__/repr.cpython-38.pyc delete mode 100644 Jobs_Collections/venv/Lib/site-packages/werkzeug/debug/__pycache__/tbtools.cpython-38.pyc delete mode 100644 Jobs_Collections/venv/Lib/site-packages/werkzeug/debug/console.py delete mode 100644 Jobs_Collections/venv/Lib/site-packages/werkzeug/debug/repr.py delete mode 100644 Jobs_Collections/venv/Lib/site-packages/werkzeug/debug/shared/FONT_LICENSE delete mode 100644 Jobs_Collections/venv/Lib/site-packages/werkzeug/debug/shared/console.png delete mode 100644 Jobs_Collections/venv/Lib/site-packages/werkzeug/debug/shared/debugger.js delete mode 100644 Jobs_Collections/venv/Lib/site-packages/werkzeug/debug/shared/jquery.js delete mode 100644 Jobs_Collections/venv/Lib/site-packages/werkzeug/debug/shared/less.png delete mode 100644 Jobs_Collections/venv/Lib/site-packages/werkzeug/debug/shared/more.png delete mode 100644 Jobs_Collections/venv/Lib/site-packages/werkzeug/debug/shared/source.png delete mode 100644 Jobs_Collections/venv/Lib/site-packages/werkzeug/debug/shared/style.css delete mode 100644 Jobs_Collections/venv/Lib/site-packages/werkzeug/debug/shared/ubuntu.ttf delete mode 100644 Jobs_Collections/venv/Lib/site-packages/werkzeug/debug/tbtools.py delete mode 100644 Jobs_Collections/venv/Lib/site-packages/werkzeug/exceptions.py delete mode 100644 Jobs_Collections/venv/Lib/site-packages/werkzeug/filesystem.py delete mode 100644 Jobs_Collections/venv/Lib/site-packages/werkzeug/formparser.py delete mode 100644 Jobs_Collections/venv/Lib/site-packages/werkzeug/http.py delete mode 100644 Jobs_Collections/venv/Lib/site-packages/werkzeug/local.py delete mode 100644 Jobs_Collections/venv/Lib/site-packages/werkzeug/middleware/__init__.py delete mode 100644 Jobs_Collections/venv/Lib/site-packages/werkzeug/middleware/__pycache__/__init__.cpython-38.pyc delete mode 100644 Jobs_Collections/venv/Lib/site-packages/werkzeug/middleware/__pycache__/dispatcher.cpython-38.pyc delete mode 100644 Jobs_Collections/venv/Lib/site-packages/werkzeug/middleware/__pycache__/http_proxy.cpython-38.pyc delete mode 100644 Jobs_Collections/venv/Lib/site-packages/werkzeug/middleware/__pycache__/lint.cpython-38.pyc delete mode 100644 Jobs_Collections/venv/Lib/site-packages/werkzeug/middleware/__pycache__/profiler.cpython-38.pyc delete mode 100644 Jobs_Collections/venv/Lib/site-packages/werkzeug/middleware/__pycache__/proxy_fix.cpython-38.pyc delete mode 100644 Jobs_Collections/venv/Lib/site-packages/werkzeug/middleware/__pycache__/shared_data.cpython-38.pyc delete mode 100644 Jobs_Collections/venv/Lib/site-packages/werkzeug/middleware/dispatcher.py delete mode 100644 Jobs_Collections/venv/Lib/site-packages/werkzeug/middleware/http_proxy.py delete mode 100644 Jobs_Collections/venv/Lib/site-packages/werkzeug/middleware/lint.py delete mode 100644 Jobs_Collections/venv/Lib/site-packages/werkzeug/middleware/profiler.py delete mode 100644 Jobs_Collections/venv/Lib/site-packages/werkzeug/middleware/proxy_fix.py delete mode 100644 Jobs_Collections/venv/Lib/site-packages/werkzeug/middleware/shared_data.py delete mode 100644 Jobs_Collections/venv/Lib/site-packages/werkzeug/posixemulation.py delete mode 100644 Jobs_Collections/venv/Lib/site-packages/werkzeug/routing.py delete mode 100644 Jobs_Collections/venv/Lib/site-packages/werkzeug/security.py delete mode 100644 Jobs_Collections/venv/Lib/site-packages/werkzeug/serving.py delete mode 100644 Jobs_Collections/venv/Lib/site-packages/werkzeug/test.py delete mode 100644 Jobs_Collections/venv/Lib/site-packages/werkzeug/testapp.py delete mode 100644 Jobs_Collections/venv/Lib/site-packages/werkzeug/urls.py delete mode 100644 Jobs_Collections/venv/Lib/site-packages/werkzeug/useragents.py delete mode 100644 Jobs_Collections/venv/Lib/site-packages/werkzeug/utils.py delete mode 100644 Jobs_Collections/venv/Lib/site-packages/werkzeug/wrappers/__init__.py delete mode 100644 Jobs_Collections/venv/Lib/site-packages/werkzeug/wrappers/__pycache__/__init__.cpython-38.pyc delete mode 100644 Jobs_Collections/venv/Lib/site-packages/werkzeug/wrappers/__pycache__/accept.cpython-38.pyc delete mode 100644 Jobs_Collections/venv/Lib/site-packages/werkzeug/wrappers/__pycache__/auth.cpython-38.pyc delete mode 100644 Jobs_Collections/venv/Lib/site-packages/werkzeug/wrappers/__pycache__/base_request.cpython-38.pyc delete mode 100644 Jobs_Collections/venv/Lib/site-packages/werkzeug/wrappers/__pycache__/base_response.cpython-38.pyc delete mode 100644 Jobs_Collections/venv/Lib/site-packages/werkzeug/wrappers/__pycache__/common_descriptors.cpython-38.pyc delete mode 100644 Jobs_Collections/venv/Lib/site-packages/werkzeug/wrappers/__pycache__/cors.cpython-38.pyc delete mode 100644 Jobs_Collections/venv/Lib/site-packages/werkzeug/wrappers/__pycache__/etag.cpython-38.pyc delete mode 100644 Jobs_Collections/venv/Lib/site-packages/werkzeug/wrappers/__pycache__/json.cpython-38.pyc delete mode 100644 Jobs_Collections/venv/Lib/site-packages/werkzeug/wrappers/__pycache__/request.cpython-38.pyc delete mode 100644 Jobs_Collections/venv/Lib/site-packages/werkzeug/wrappers/__pycache__/response.cpython-38.pyc delete mode 100644 Jobs_Collections/venv/Lib/site-packages/werkzeug/wrappers/__pycache__/user_agent.cpython-38.pyc delete mode 100644 Jobs_Collections/venv/Lib/site-packages/werkzeug/wrappers/accept.py delete mode 100644 Jobs_Collections/venv/Lib/site-packages/werkzeug/wrappers/auth.py delete mode 100644 Jobs_Collections/venv/Lib/site-packages/werkzeug/wrappers/base_request.py delete mode 100644 Jobs_Collections/venv/Lib/site-packages/werkzeug/wrappers/base_response.py delete mode 100644 Jobs_Collections/venv/Lib/site-packages/werkzeug/wrappers/common_descriptors.py delete mode 100644 Jobs_Collections/venv/Lib/site-packages/werkzeug/wrappers/cors.py delete mode 100644 Jobs_Collections/venv/Lib/site-packages/werkzeug/wrappers/etag.py delete mode 100644 Jobs_Collections/venv/Lib/site-packages/werkzeug/wrappers/json.py delete mode 100644 Jobs_Collections/venv/Lib/site-packages/werkzeug/wrappers/request.py delete mode 100644 Jobs_Collections/venv/Lib/site-packages/werkzeug/wrappers/response.py delete mode 100644 Jobs_Collections/venv/Lib/site-packages/werkzeug/wrappers/user_agent.py delete mode 100644 Jobs_Collections/venv/Lib/site-packages/werkzeug/wsgi.py delete mode 100644 Jobs_Collections/venv/Lib/site-packages/wrapt-1.12.1-py3.8.egg-info/PKG-INFO delete mode 100644 Jobs_Collections/venv/Lib/site-packages/wrapt-1.12.1-py3.8.egg-info/SOURCES.txt delete mode 100644 Jobs_Collections/venv/Lib/site-packages/wrapt-1.12.1-py3.8.egg-info/dependency_links.txt delete mode 100644 Jobs_Collections/venv/Lib/site-packages/wrapt-1.12.1-py3.8.egg-info/installed-files.txt delete mode 100644 Jobs_Collections/venv/Lib/site-packages/wrapt-1.12.1-py3.8.egg-info/top_level.txt delete mode 100644 Jobs_Collections/venv/Lib/site-packages/wrapt/__init__.py delete mode 100644 Jobs_Collections/venv/Lib/site-packages/wrapt/__pycache__/__init__.cpython-38.pyc delete mode 100644 Jobs_Collections/venv/Lib/site-packages/wrapt/__pycache__/decorators.cpython-38.pyc delete mode 100644 Jobs_Collections/venv/Lib/site-packages/wrapt/__pycache__/importer.cpython-38.pyc delete mode 100644 Jobs_Collections/venv/Lib/site-packages/wrapt/__pycache__/wrappers.cpython-38.pyc delete mode 100644 Jobs_Collections/venv/Lib/site-packages/wrapt/_wrappers.cp38-win32.pyd delete mode 100644 Jobs_Collections/venv/Lib/site-packages/wrapt/decorators.py delete mode 100644 Jobs_Collections/venv/Lib/site-packages/wrapt/importer.py delete mode 100644 Jobs_Collections/venv/Lib/site-packages/wrapt/wrappers.py delete mode 100644 Jobs_Collections/venv/Scripts/Activate.ps1 delete mode 100644 Jobs_Collections/venv/Scripts/activate delete mode 100644 Jobs_Collections/venv/Scripts/activate.bat delete mode 100644 Jobs_Collections/venv/Scripts/chardetect.exe delete mode 100644 Jobs_Collections/venv/Scripts/deactivate.bat delete mode 100644 Jobs_Collections/venv/Scripts/easy_install-3.8.exe delete mode 100644 Jobs_Collections/venv/Scripts/easy_install.exe delete mode 100644 Jobs_Collections/venv/Scripts/epylint.exe delete mode 100644 Jobs_Collections/venv/Scripts/flask.exe delete mode 100644 Jobs_Collections/venv/Scripts/isort.exe delete mode 100644 Jobs_Collections/venv/Scripts/pip.exe delete mode 100644 Jobs_Collections/venv/Scripts/pip3.8.exe delete mode 100644 Jobs_Collections/venv/Scripts/pip3.exe delete mode 100644 Jobs_Collections/venv/Scripts/pylint.exe delete mode 100644 Jobs_Collections/venv/Scripts/pyreverse.exe delete mode 100644 Jobs_Collections/venv/Scripts/python.exe delete mode 100644 Jobs_Collections/venv/Scripts/pythonw.exe delete mode 100644 Jobs_Collections/venv/Scripts/symilar.exe delete mode 100644 Jobs_Collections/venv/bin/Activate.ps1 delete mode 100644 Jobs_Collections/venv/bin/activate delete mode 100644 Jobs_Collections/venv/bin/activate.csh delete mode 100644 Jobs_Collections/venv/bin/activate.fish delete mode 100644 Jobs_Collections/venv/bin/chardetect delete mode 100644 Jobs_Collections/venv/bin/easy_install delete mode 100644 Jobs_Collections/venv/bin/easy_install-3.8 delete mode 100644 Jobs_Collections/venv/bin/epylint delete mode 100644 Jobs_Collections/venv/bin/flask delete mode 100644 Jobs_Collections/venv/bin/isort delete mode 100644 Jobs_Collections/venv/bin/pip delete mode 100644 Jobs_Collections/venv/bin/pip3 delete mode 100644 Jobs_Collections/venv/bin/pip3.8 delete mode 100644 Jobs_Collections/venv/bin/pylint delete mode 100644 Jobs_Collections/venv/bin/pyreverse delete mode 100644 Jobs_Collections/venv/bin/python delete mode 100644 Jobs_Collections/venv/bin/python3 delete mode 100644 Jobs_Collections/venv/bin/symilar delete mode 100644 Jobs_Collections/venv/pyvenv.cfg delete mode 100644 index.py create mode 100644 src/main/webapp/resources/images/suwonone.jpg create mode 100644 src/main/webapp/resources/images/suwontwo.jpg delete mode 100644 static/bootstrap-theme.css delete mode 100644 static/bootstrap-theme.css.map delete mode 100644 static/bootstrap-theme.min.css delete mode 100644 static/bootstrap-theme.min.css.map delete mode 100644 static/bootstrap.css delete mode 100644 static/bootstrap.css.map delete mode 100644 static/bootstrap.min.css delete mode 100644 static/bootstrap.min.css.map delete mode 100644 static/customize.css delete mode 100644 static/template.css delete mode 100644 templates/index.html delete mode 100644 test.py diff --git a/Jobs_Collections/.DS_Store b/Jobs_Collections/.DS_Store deleted file mode 100644 index f2c9d213190b2978e4ee72fb6a31d286c17de5d8..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 6148 zcmeHKO>Wab6n@i&)^>}?0;yekgTx}LlJe6^2q}bg(FGDB2o``+JGO|ywWHWcC?O~t z4gm*1;wYSegKz-&-pr&VPO?P^&6D1IZ)V;%_I#u9c!)?e20@LeOhgu(vE-mwVcgHY zWE;9=7bxTy9rCC{T?(nalx-S}0!D#d^)E?w|eJK8@3kAE!Pt`15cN ze)E?!L_{`4lu&@Z9-=&8eu43=z_2bE?^flDy+Zyjy`hwRyxUt~AJ6et@;()K+jy^# zMwG40{#nSj=?R_C18UME-~pXeP?!hL{OjDz9gOVZeLUo{2J7ZN&)EVe2O|fgvpBw- z_u5>4l=bu~eD`~Cl;zdx53#XXy0W!xS&rpgbzZf)>8O=^`5`QVKgh+Y$JW7Ie)JO+OkjZgcs>8Bu%WjwV$K%@ZVa2_3 zcs!}N_K7NK^Fo8os+BJl&vD(E}5T3RF~~uNXqn(eCQJy2hzOMJJ&z zA3{G_=o^ZVPsjMKOeaxSXiB4iQD9MlO;s)P`G2zh{=Y~vHKTx0;J;Epl$xz(15?sx z>(b=-taagMa5m1HDwGry`Z$&WAI1A{Y3Oq~0M<256`}=ZegvcprZ5WpRRw+nRu9)d diff --git a/Jobs_Collections/.gitattributes b/Jobs_Collections/.gitattributes deleted file mode 100644 index dfe0770..0000000 --- a/Jobs_Collections/.gitattributes +++ /dev/null @@ -1,2 +0,0 @@ -# Auto detect text files and perform LF normalization -* text=auto diff --git a/Jobs_Collections/README.md b/Jobs_Collections/README.md deleted file mode 100644 index 03fed58..0000000 --- a/Jobs_Collections/README.md +++ /dev/null @@ -1,66 +0,0 @@ - - -1. ํ”„๋กœ์ ํŠธ ์„ค๋ช… - - ์ทจ์ค€์ƒ๋“ค์„ ์œ„ํ•˜์—ฌ ๋ชจ๋“  ์ฑ„์šฉ ํฌํƒˆ์˜ ์ •๋ณด๋ฅผ ํ•ด๋‹น ์‚ฌ์ดํŠธ ํ•˜๋‚˜๋งŒ์œผ๋กœ ์‰ฝ๊ฒŒ ๊ฒ€์ƒ‰ํ•  ์ˆ˜ ์žˆ๊ฒŒ ํ•ฉ๋‹ˆ๋‹ค. - -2. ํ”„๋กœ์ ํŠธ ์ƒ๊น€์ƒˆ - - -3. ๊ฐœ๋ฐœํ•ด์•ผ ํ•˜๋Š” ๊ธฐ๋Šฅ(์šฐ์„ ์ˆœ์œ„) - - html ์ „์ฒด์ ์ธ ์ƒ๊น€์ƒˆ - - - ๋‰ด์Šค ํฌ๋กค๋ง - - ์‚ฌ๋žŒ์ธ ํฌ๋กค๋ง - - ์žก์ฝ”๋ฆฌ์•„ ํฌ๋กค๋ง - - ์ธ๋””๋“œ ํฌ๋กค๋ง - - - Flask -> ๋‰ด์Šค, ์‚ฌ๋žŒ์ธ, ์žก์ฝ”๋ฆฌ์•„, ์ธ๋””๋“œ - - - ๊ฒ€์ƒ‰ (๊ฒ€์ƒ‰์–ด, ํฌํƒˆ, ์œ„์น˜, ๊ทผ๋ฌด ํ˜•ํƒœ) JS - - - Like list ์ƒ๊น€์ƒˆ html - - Like JS - - - - -4. ๋‹ค์Œ ์‹œ๊ฐ„๊นŒ์ง€ ํ•ด์•ผํ•˜๋Š” Todo list - - ๊ฒ€์ƒ‰ (๊ฒ€์ƒ‰์–ด, ํฌํƒˆ, ์œ„์น˜, ๊ทผ๋ฌด ํ˜•ํƒœ) JS ๊ตฌํ˜„ - - ๊ฒ€์ƒ‰ํ•œ ๋ฐ์ดํ„ฐ๋ฅผ ํฌ๋กค๋งํ•ด์„œ flask๋กœ ๊ฐ€์ ธ์˜ค๋Š” ๊ธฐ๋Šฅ ๊ตฌํ˜„ - - Like list ์ƒ๊น€์ƒˆ html ๊ตฌํ˜„ - - -###################################################################################### - -2. ํ”„๋กœ์ ํŠธ ์„ค๋ช… - - ์ทจ์ค€์ƒ๋“ค์„ ์œ„ํ•˜์—ฌ ๋ชจ๋“  ์ฑ„์šฉ ํฌํƒˆ์˜ ์ •๋ณด๋ฅผ ํ•ด๋‹น ์‚ฌ์ดํŠธ ํ•˜๋‚˜๋งŒ์œผ๋กœ ์‰ฝ๊ฒŒ ๊ฒ€์ƒ‰ํ•  ์ˆ˜ ์žˆ๊ฒŒ ํ•ฉ๋‹ˆ๋‹ค. - - -3. ๊ธฐ๋Šฅ - - ์‚ฌ๋žŒ์ธ, ์žก์ฝ”๋ฆฌ์•„, ์ธ๋””๋“œ ์„ธ๊ฐœ์˜ ์ฑ„์šฉํฌํƒˆ์‚ฌ์ดํŠธ์—์„œ ๊ฒ€์ƒ‰ํ•œ ์ •๋ณด๋ฅผ ์ฆ‰์‹œ ํฌ๋กค๋งํ•˜์—ฌ ์›นํŽ˜์ด์ง€์— ๋„์›Œ์ค๋‹ˆ๋‹ค. - - ์ฐœ ๊ธฐ๋Šฅ์„ ๊ตฌํ˜„ํ•˜์—ฌ ์ €์žฅํ•˜๊ธฐ ์œ„ํ•ด Local storage๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ์ €์žฅํ•˜๊ณ  ๋ถˆ๋Ÿฌ์˜ฌ ์ˆ˜ ์žˆ๊ฒŒ ๋งŒ๋“ค์—ˆ์Šต๋‹ˆ๋‹ค. - -4. ์–ด๋ ค์›€ - - ๊ฐ ํฌํƒˆ์—์„œ ํฌ๋กค๋งํ•œ ๋ฐ์ดํ„ฐ๋ฅผ text๋กœ๋งŒ ๋ถˆ๋Ÿฌ์˜ฌ๋•Œ, ๋ถˆํ•„์š”ํ•œ ํƒœ๊ทธ๋“ค๋กœ ์ธํ•ด ์˜ค๋ฅ˜๊ฐ€ ๋ฐœ์ƒํ–ˆ์—ˆ์ง€๋งŒ, ์ •๊ทœ ํ‘œํ˜„์‹ re.sub๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ๋ถˆํ•„์š”ํ•œ ๋ฌธ์ž๋ฅผ ๋‹ค๋ฅธ๊ฒƒ์œผ๋กœ ์น˜ํ™˜ํ•˜์—ฌ ํ•ด๊ฒฐํ•˜์˜€์Šต๋‹ˆ๋‹ค. - - ์‚ญ์ œ ๊ธฐ๋Šฅ์„ ๊ตฌํ˜„ํ• ๋•Œ ์„ ํƒํ•œ ๊ฐ’๋งŒ Local storage์—์„œ ์ง€์šฐ๋Š”๊ฒƒ์—์„œ ๋ฌธ์ œ๊ฐ€ ๋ฐœ์ƒํ–ˆ์ง€๋งŒ, event.target ์ด๋ฒคํŠธ๊ฐ€ ์ผ์–ด๋‚  ํƒ€๊ฒŸ์„ ์ง€์ •ํ•˜์—ฌ ๊ทธ ๊ฐ์ฒด์˜ li๊ฐ’์„ ์‚ญ์ œํ•จ์œผ๋กœ์จ ํ•ด๊ฒฐํ•˜์˜€์Šต๋‹ˆ๋‹ค. - - Python์œผ๋กœ ํฌ๋กค๋งํ•œ ๋ฐ์ดํ„ฐ๋ฅผ HTML๋กœ ๊ฐ€์ ธ์˜ค๋Š” ๊ฒƒ์—์„œ ์–ด๋ ค์›€์„ ๋А๊ผˆ์œผ๋‚˜, flask์™€ Ajax๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ํ•ด๊ฒฐํ•˜์˜€์Šต๋‹ˆ๋‹ค. - -5. ๋‹ค์Œ์—” - - ๊ฐ ํ•จ์ˆ˜๋กœ ๋‰ด์Šค, ํฌ๋กค๋ง ๋“ฑ ์—ฌ๋Ÿฌ๊ฐ€์ง€ ๊ธฐ๋Šฅ์„ ํ•œ๋ฒˆ์— ํ•ฉ์น ๋•Œ ํž˜๋“ค์—ˆ์ง€๋งŒ, ํ•ด๊ฒฐ๋œ ๊ธฐ๋Šฅ์ด ์ž˜ ์‹คํ–‰๋ ๋•Œ ์ฆ๊ฑฐ์›€์„ ๋А๊ผˆ์Šต๋‹ˆ๋‹ค. - - ๋””์ž์ธ ๊ฐ๊ฐ์ด ์—†์–ด์„œ ๋‹ค์Œ์—” ํŒ€ ํ”„๋กœ์ ํŠธ๋กœ ํ”„๋ก ํŠธ์—”๋“œ ๋ฐฑ์—”๋“œ ๋‚˜๋ˆ ์„œ ํ•œ๋ฒˆ ์ง„ํ–‰ํ•ด๋ณด๊ณ  ์‹ถ์Šต๋‹ˆ๋‹ค. - - - - - - - diff --git a/Jobs_Collections/__pycache__/indeed.cpython-38.pyc b/Jobs_Collections/__pycache__/indeed.cpython-38.pyc deleted file mode 100644 index ff504bbff4a354c5213181bfdad9d23389e2c266..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 2619 zcmZuzTW=f372eD2a!HYrtjO2im^Ko^x{~8Kt{o$a)7TAaBNc)w28x9WcEwpqOD?(e z%+R)oC16)df%>gL)TW43P!EO?zy*p}MG_$GOaH~b_DLrB2lA4BXGyuX(IxiGoHK_r zXXg9PnY~dc($$xE^YC-PLvK8=>JEX=}P>+A^1+ zHAAazyLLU}X6laX)U$3D{>;m9i`!e8JH|8IL7V4Uo^-ZIr$9mV|1~)ki^gW|v#MoagE2^>4wYddv zb4}~8n09M_WSrElYQLH8STXBnloMOk?54hlv$^?;m~s20*0E!IN#hy38g}L^elxbN z>fwCT6Vexn$%9*oRl%NQl52WvLBmr))JSyi;9ERGN0_Bt;*2&W6LZa1iFxB!?+bz@ zVamUw61EyNc;b*OdtsQ^UbBhwNz9<35?d+}G}cO)#1_76g>aWROfg3Px5A)NldgrO zeVH)QfR=ZsOoq=i@f|pQbG>qD`39nu%PY~k?=N5VWlcrR<=g9?TK+&pRllOjSE4XP zi{Rz*^=L&tXFy=S&*z&PNdfVfv0as}FplZvF$hi1nR#>4aEzSJ%t?DH>ln-s-@{0S z&fxHI(6RBR82%0&rNuyz>x3BLwW)W2X&2~mE7rNa$GU7!1B&DY&hadH@f?r==A(a( zrARX%Mo2HmtZH?v2IG0)s__D$$j4**Q;kpTnw?B+#Aa;889uqgfa#G%oM_W)2udS2 zQ;F(OHrm!(^QSMrooFeBB9F251oxCTry6s9=-2&*a-C|l@?oGtKd}@w?bBgYNf}V| zDivSKU?ueDDp5lT92q)cB<2oXT0h2|{hh7;SD*B|+r7v8z55>*dk^mo?mg-~__{dw z{XYiV`~9t*;@~ga{oOCynRNAPt^M-4QcZd3%$b^)A0dOF&)f?9+lc3KwYJcHWmeS| z&iZevH!jrApSuu7^5Sb}XIDj3UjPxBv$v{p;T+P@8SPdk*=8hz6#gW87@-s=5n{az|;9t zk`BdpF_w%WC4>h`!si?e@)U%oPwUgUX`ShYW`D~JM+d=l$IdfR!sv4(qe4M%O0qlX zAmMd|!ndg-*;hM;0^Lv+^yAv6+Ab)kYeYH4KoB!Flr>FulS+lMW3!s!421>s>N-^Z zcqXNr6vWGI?; zW>zXss0Bf}A+jWhi0z};zVtm&S)W@1WY?pWE1uw`vBVNyV-1XJqAVyuDJUjLOhP2q z``3PX?ZdRVh$Ccui3A;ypn{4jl6{)JNhaWQ$kJt0F2r&2IsrjNm@18QO$@(?Pho_Q zO#izCe@RnoIy3V6lzBqW8z=<2qmS$2EbJANMn@0fLVHZH`4>7|_cSEBQ8UC8H#=s7 z#W;7M!(e#@7S^~5&4Ttix1s$MS_axX+=2Egv@Enmo`ZG@+8DHDq&{opp%tL5^YIP? z<`c2DX#i`TPsTtr?HvJj=<%r-nDdun6LLBxCLC2{Ikubiz!x=SiMgqDEX86g#Tyqx z>G-0cEwym*YW?n3|MUG<2fL4Y4|j|Ghj;sb{#!}>;DzBQUwqwrv|k*2vOU<`DYfV@ zkp54;*y%sK=Q_A5LlxBh)c)l0R)71SseM>ODyl`*6V+g_weRMDzb_hcJ!rOw0sZZ* z-h=(#-#_l}?ho#N={mTiR5}?|uioQ7BA&thuX=lTU8mBLDyo;ywrJ?d=Xd*?f9U^- zDo~3udKlv{#A5%iAN9Hq`nz{q#IRw(`k%3V`u|s>nV(;odH2H1&n{Bu%?mRZ&tJZ| z&^Bkog*Kb5ss->q4C(3q*bn#P<~QRl6C#9N{NHhpJEs@-|SK)(|fqMdPy&eVSa Df0p5n diff --git a/Jobs_Collections/__pycache__/job_korea.cpython-38.pyc b/Jobs_Collections/__pycache__/job_korea.cpython-38.pyc deleted file mode 100644 index fa25160ecb6b32873dd1ab98610fb64f6e5de658..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 2862 zcmZ{m?{C}28OM42AyGf$q>U51S*I?kXQhknY+W~GOSd&%)}^f%G|f;D?o?Vw+p;K; zIZ|~kP=H&xz#8;L3e;J!+J(HWOABN`;CQJEG{CSwVA$)!us3^UiGDxi&GtRYQrrfW zz=!;N@8R9??z!jgawe0M@Y``;ef`cMN&1g~{XZG-Q(WFFFjS(%mMX*`L_Ev3Y{=1F zF%;YtTdin@R*4z0O5BK7bVG-qY9^>gV=I!8q;aa_o}vkw#63;rOHw|ygPNs0;hE43!YOg%`Wjcv#!)E&*$WHQPk4= zsd&(Eox|l_gz=>o@#PKDkbEVO7F0@_a)Sh zT!#~e0VPVQ>SKgr%<^hB96byfPrCh9c>-PW3lOYNB{qaA@4r+$GkqC-^`>W>dCQuf zw7jzKxYLXCrayg=ISW?NFPw918+Y{Eo4(-8cwZ70oS8z|VU{`OF7b@$OTUpcTJW+k z5=km)GDviiCc4ZXgHjY9+xrQhIId`FawwUT8pKCnHOZuOjl7m_$UdQB637whLup-Z zBG`PnrT8jU0$C_WButayYk{&5qbep+4b)a#1R0HsiEL z^Gie%9;ZpvqzC#!qLBy^(X?L=@LYvPQ$rHe-W%x$Z$u@@he|RV1hr?;ivz+Jb*3Kj zL3?xn^`_~;AT7S7kq#0;GDrn!dT32;WDt_c05uWm%KVjdfRM{SGPNTHuznEpaq0!f zVrEWEYwk?0o)|%#S%oR*EYsn_62gcDT~FI3&p$=2Su+X`*YW&%R@hTfLD69@CnneY zl5bo4OG?#QhZ7eO<(k!c!gh)|Z{A@Dv3X|A)`#YO-#s%vzPPwJhH&UcL(v&4Geo0a zbSijj$>Rw$Rf?hrf#?*Yh2U|`E>+83KE*X=R_83PxeQ^VGas| ztR(T6=fic5$4u8nGRSAyQ6a|{$_4botvXmP=-lT%_>=$O~ALPh&T3rVkPuf!zY+#5%*=8WvSdys*@lEbd0K?XFwY0 zB#nVaL2=LzsSX+jB|ztC5|jp|KrhpDLkS4Y;Q4jbs8;_A%7Uu&0H_Tb00s0Q=wF~i zpsVx|&_6(rf^N{mpud3zL4T%4K%1bWpe;HC`V(jv^mqCg=sM^a=%4f(px=TX2mPCV z6I2J~Kp}ksWP`p1x=)XTegisDmah?(q)&pUz#|b4({F>H1&>C2lIFo<;FA%bp-+Jy z2Y)Bx3-lB?3m%L3RXW~KkzpnRsVO6uNc1$4dH3nN0rCensqY2IHT3B~h5de@z&^7c zH<6coi<)}b{?1K9+t@&{8j5pH2?CEVN^ZGZMf=hjwk_r~gOb1l!MnplZp zYqkB^T6ps;s>ODw1BFbwq;kCZKyRx+-qM|0^KU`hue7x1U{Xw|CwR?4Y zM}$XBq}R@!_ru@)W%ugmosH!kQUCr9?5^MH++5FvH<#g)?^e9B7XE(QP=7fwF%b#v z&3obTGsR<^@Gykn@RdqVs6YWU$bL;YD_*u2+y`x8Sww_mvXmZ47e1T+zO zytrQw9xwHUyPrlLzuGSdkBfbwwH9@KN(f>=+ndW_^WE_JR_E#mHIX*Dv)G-)T=>yD zoz}iE#XqWwPS@_)k2sQ=hHJM??m+&mvnRYxqm9b+$e* z;+r$Ch(~4>S*?V^TBNTZqjHDp7iS+iBOZ^)Ct9}nS zi8>y>R3!;DsU1c7gs;p*%lQmfX1u4nyMx#eVL?)IG6URO#&V5WQEF+Cx x7sPlMW}G*plSnkEQFZ%1H2UNyyX!x$IJ9P4&x-vvI?dn=ga1)Q)%3J}{Qv%xJ39aX diff --git a/Jobs_Collections/__pycache__/news.cpython-38.pyc b/Jobs_Collections/__pycache__/news.cpython-38.pyc deleted file mode 100644 index e327374730eae913cd58d739287a89422d86097b..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1437 zcmZuxOK%%D5GJ`#Nh{lNoQK;Sj36=~pit7Ff!(0)BTkE=hoC@`qFAUd5QY| zC9t4A*4<|;nX7Cv=P%27^`h@;?;D=TL%k|kL75mSmRCGcOb0Vr7TM%P2Z9~VnN+Ev z`0rTDw=ogFFZlXE@ zLYxUuI<(rix@9!I{myM})NNP=Tp0b1 zkM65By;Ha8-FM^+LkTxuoW7bWRmrChA4-;pbUG-Kw@eJuGQT$Q#qpF0wpXxYxh?ZO zm5fKTdAA+iu)PwR zj!!bqcOQ-5ceL|lB-rEL<%rkp+Xmmh#3dnKA(7FzZO094JcB1@Er?H|Ai@#$k^kOz zRCgvk19GDTVQKl-we4y+yyWK0Q2Y=}Bv%I8p&OSG# NmnQoNhw$EY{sqR*kWl~t diff --git a/Jobs_Collections/__pycache__/saramin.cpython-38.pyc b/Jobs_Collections/__pycache__/saramin.cpython-38.pyc deleted file mode 100644 index 88e811525a3fad6833b5352a843b45076f1f4bee..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 2933 zcmZ{me`p-X7037I-QMX=lHJ;p71z1^y7=6Sj$KZE~izq5B| zDYbjYzMao|^W)9Tn>TwQolXk)ZMhd;9o{bp|KhOsCjnl>v5OqN)BuI?J@lFzrB=GJc(wLA-ZlPBpC$jX9 z487``6IE->sk);%g{kK(-7B*mYS_e}Mc=5nmhKxYKJ7WSIWf!P)VN$VJio-d==>BE zR6J+!L@xV6L-eIpu`c*>AWSPnoR{iiAU0GY5t%5axGFVbL`4lLz+}n^`eVFfhlECa zRjA9p7RdABm_Xuq1h}k?-tC(5E7qW^Q_rAGCgy8QEx}ojC0%{ev~}NfY^HdwZg2eu zKPtkRT!LwBhdm}w8a|URyz&#umzOEN@w(5H3DYJ_~fnoh3Mm25-v>%$gFPBb_Uw~iU_$6n`FviasUfFlt@tG;zA3sl>X`|#9 z&p4KaH{A5bUve&a-%@xw)hnhw=+3eFEwOeA@Z)aPw>?~0ox+` z;)5(vt5_gU$BBY1RRX1<5tT<7-_p7os2J;=dMt=F5{S7NNkm(nAjwscbR81v@yL>b zCH+4ZEwb>wx_2$p$$H{}Eqc&blJo{iK9_njhzDAb2$E#qvQqCtpmhaZtC->C*Dt36 z1X6DQ=oVkBTF+Q(p)-8@GN&`Obe0+=S~dOiP>fK%f>h%o0Z~YqI0D6X4Hol!>e!Qo zM9HCU(bg*l6LqHgrf(TcnmSR4Pdk^2z(SfAN{&s;R#;9^W1`kS<@@gGp`n?XnZeF} zmz=>eMVM(Nr-IO(^;p7nyr>n5mQ#x2+GDC^+GQ`7Vk*_`NrR~_MSRjU_moEm?SWu1 zM0e3~qX4J9T#f7^(0!2&&YSimi|MY5)16DvKCX^?dJ)cgOyMg+5Aga2AqokujiQ{% zDAGr`X!$^q}Z)=%k(MKDapKM`^Wd=UQ~aIE#$FUmS{JT>au+nB!dnU1#}9ef{u|G=qM-- z8YUWO0F(foBS}yS)CGElr0Q}Yk~GS%qDRI42Gk9*Ne^fn)C&s8KG5Gm`$3E3JD|UU zz6-ia4uF0SItcnL=>x5U`av7y5a?6T0O*h8A6&L3hbxpkII@03>@mr_LGhg$I z_rec8+gZHbT%FtE0kqeFot2x->noY?`W))yS{*MehaYa5Z!e0ifwtH0Y;Ufa?yuU6 zfy4D>^Pkt++`KgxzPV=he%#@A=C;4QX})-+(|+T<@RP62i@)BrWA^6J58I5vc>8Zw zJG`(N{^l+7-+$?}Ut0=4de{8(jSjEhX}gS#IjRkI>`*IJ%K6Sgp zw{CFz@E`Ut?C0-vxUtOr&HM?>*Kd1$E}Z{mcx9ux_A{8qDZEnJza z@}v?jFNC+R?ka2NIyrRAq5cRp@X3H%uA}6M^^8-s{gIQ$v!-q1y8_9s=+C;wNcM8o zER~B$N!IL0?Wg}QK@Qa>idEdNL!P12($r8pA-~YVpYfhr#cb;}<4`hE%Vyh2wOAq} z$Ma9;PvoD;pUgj-Kb3zj|AQ=&Yq0`LEty4ACkl!n&@tVO7w$z<$ ze^1}84)6G4-BYJq)!S;;{q5FKTBpbO&^+(%$;n+v_59m{r{q&Gc`k&YXktvf|54=o zbq}hyt4pGv`yWM0LYq_-qm diff --git a/Jobs_Collections/indeed.py b/Jobs_Collections/indeed.py deleted file mode 100644 index cbba7ed..0000000 --- a/Jobs_Collections/indeed.py +++ /dev/null @@ -1,137 +0,0 @@ - -from bs4 import BeautifulSoup -import requests -import json -import re -from flask import Flask, render_template, jsonify, request - - -global URL -global LIMIT -LIMIT = 20 - - -def get_last_page(): - result = requests.get(URL) - - # ๋ทฐํ‹ฐํ’€์ˆฉ์„ ์‚ฌ์šฉํ•ด Html์„ ์ „์ฒด ๊ฐ€์ ธ์˜จ๋‹ค. - soup = BeautifulSoup(result.text, 'html.parser') - - # page ์ˆ˜๋ฅผ ์ฐพ๊ธฐ ์œ„ํ•ด ํ•ด๋‹น div๋ฅผ ๊ฐ€์ ธ์™€์„œ ํ™•์ธํ•œ๋‹ค. - pagination = soup.find("div", {"class": "pagination"}) - - if pagination is not None: - - links = pagination.find_all('a') # ๊ฐ€์ ธ์˜จ๊ฒƒ์—์„œ ํŽ˜์ด์ง€์˜ ๋งํฌ ์ˆ˜๋ฅผ ์ฐพ์•„์˜จ๋‹ค. - pages = [] # ๋งํฌ์—์„œ span์ด ๋ถ™์€๊ฒƒ๋งŒ ๋นผ์™€์„œ ๋ฆฌ์ŠคํŠธ์— ์ €์žฅํ•œ๋‹ค. ๋’ค์— ์งœ์ž˜ํ•œ๊ฒƒ์„ ์—†์• ์ฃผ๊ธฐ ์œ„ํ•ด. - - # Operation spans[-1] ํ•˜๋ฉด ๋งจ ๋งˆ์ง€๋ง‰๊ฒƒ์„ ์นญํ•œ๋‹ค. So, [:-1]์€ span์„ ๊ฐ€์ ธ์˜ค๋˜ ๋งˆ์ง€๋ง‰ ํ•˜๋‚˜๋ฅผ ์ œ์™ธํ•œ๋‹ค. - for link in links[:-1]: - # [0:5]ํ•˜๋ฉด 0๋ถ€ํ„ฐ 5๊นŒ์ง€ ๊ฐ€์ ธ์˜จ๋‹ค. - # pages.append(link.find("span")) - # pages.append(link.find("span").string) #1, 2> ์—์„œ ๋ฌธ์ž๋งŒ ๊ฐ€์ ธ์˜ค๊ธฐ ์œ„ํ•ด string ์‚ฌ์šฉ - - # pages.append(link.string) #๋ฐ”๋กœ ์œ„์˜ ๊ฒฐ๊ณผ์™€ ๊ฐ™๊ฒŒ ๋‚˜์˜จ๋‹ค. ์œ„์— ๊ฒƒ์„ ์‰ฝ๊ฒŒ ๋งŒ๋“ ๊ฒƒ์ด๋‹ค. ๋งํฌ ์•ˆ์—๋Š” ๋งŽ์€ ๋‚ด์šฉ์ด ์žˆ์ง€๋งŒ string์€ ๋‹จ 1๊ฐœ์ด๋‹ค. - pages.append(int(link.string)) # ์œ„์—๊ฒƒ์„ ๊ฐ€์ ธ์˜ค๋ฉด ๋ฌธ์ž์—ด์ด๊ธฐ๋•Œ๋ฌธ์— ์ •์ˆ˜ํ˜•์œผ๋กœ ๋ฐ”๊ฟ”์ค€๋‹ค. - # print(page) - # Operation spans[-1] ํ•˜๋ฉด ๋งจ ๋งˆ์ง€๋ง‰๊ฒƒ์„ ์นญํ•œ๋‹ค. So, [:-1]์€ span์„ ๊ฐ€์ ธ์˜ค๋˜ ๋งˆ์ง€๋ง‰ ํ•˜๋‚˜๋ฅผ ์ œ์™ธํ•œ๋‹ค. - # [0:5]ํ•˜๋ฉด 0๋ถ€ํ„ฐ 5๊นŒ์ง€ ๊ฐ€์ ธ์˜จ๋‹ค. - # print(pages) ์ตœ์ข…์ ์œผ๋กœ ๊ฐ€์ ธ์˜จ ํŽ˜์ด์ง€์˜ ์ˆ˜๋Š” 2, 3, 4, 5 ์ด๋ ‡๊ฒŒ ์ •์ˆ˜ํ˜•์œผ๋กœ๋งŒ ๊ฐ€์ ธ์˜จ๋‹ค. - # ์ด๋ ‡๊ฒŒ ํ•˜๊ฒŒ๋˜๋ฉด Page์˜ ์ด ๊ฐฏ์ˆ˜๋ฅผ ๋ถˆ๋Ÿฌ์˜ค๊ฒŒ ๋œ๋‹ค. - - # 1. ๊ฐ€์žฅ ๋งˆ์ง€๋ง‰ ํŽ˜์ด์ง€๋ฅผ ๊ฐ€์ ธ์˜จ๋‹ค. - # print(pages[-1]) #๋งˆ์ง€๋ง‰๊ฒƒ 1๊ฐœ๋ฅผ ์ถœ๋ ฅํ•œ๋‹ค. - max_page = pages[-1] # ๊ฐ€์žฅ ๋งˆ์ง€๋ง‰ ํŽ˜์ด์ง€๋ฅผ ์ฐพ์•„ ๋ณ€์ˆ˜๋กœ ์ง€์ •ํ•œ๋‹ค. - # print(range(max_page)) # range๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ 0๋ถ€ํ„ฐ maxpage๊นŒ์ง€ ์ถœ๋ ฅ - return max_page - else: - return 0 - - -def extract_job(html): - company_a = str(html.find("span", {"class": "company"})) - companys= re.sub('<.+?>', '', company_a, 0).strip() - - # if companys is not None: - # companys = companys - # else : - # companys_b = companys_a.find("b") - # companys = companys_a.string - # print(companys) - - - positions = html.find("a", {"data-tn-element": "jobTitle"})["title"] - locations_span = html.find( - "span", {"class": "location accessible-contrast-color-location"}) - if locations_span is not None: - locations = locations_span.string - else: - locations = '์œ„์น˜์ •๋ณด๋Š” ๋งํฌ๋ฅผ ํ†ตํ•ด์„œ ํ™•์ธ' - job_id = html["data-jk"] - # income_span = html.find("span", {"class": "salaryText"}) - # if income_span is not None: - # income = income_span.string.strip() - # else: - # income = 'ํšŒ์‚ฌ ๋‚ด๊ทœ์— ๋”ฐ๋ฆ„' - links = f'https://kr.indeed.com/viewjob?jk={job_id}&tk=1e9t47m537los801&from=serp&vjs=3' - - - # return {'company': company, 'position': position, 'location': location, 'link': link, 'income': income} - return {'companys': companys, 'positions': positions, 'locations': locations, 'links': links } - -# wep page๋ฅผ ๋„˜๊ธธ๋•Œ๋งˆ๋‹ค start=0, 20, 40 ๋„˜์–ด๊ฐ€๋Š” ๊ทœ์น™์„ ์‚ฌ์šฉํ•˜๊ธฐ ์œ„ํ•ด x20์„ ํ•ด์ค€๋‹ค. -def extracts_jobs(last_page): - id_jobs = [] - # for page in range(last_page): - for page in range(1): - print(f"Scrapping Indeed : Page : {page+1}") - # URL์„ ์ถ”๊ฐ€ํ•˜๊ณ  page์ˆ˜์™€ LIMIT์„ ์ •ํ•˜๋Š” ๋ฌธ์ž์—ด์„ ์—ฐ๊ฒฐ์‹œ์ผœ์ฃผ์—ˆ๋‹ค. - #print(URL) - result = requests.get(f"{URL}&start={page*LIMIT}") - soup = BeautifulSoup(result.text, 'html.parser') - # print(soup) - results = soup.find_all("div", {"class": "jobsearch-SerpJobCard"}) - - for result in results: - job = extract_job(result) - id_jobs.append(job) - return id_jobs - - -def id_get_jobs(input_keyword_recieve, input_location_recieve, input_jobtype_recieve): - - - global URL - global LIMIT - LIMIT = 20 - - if input_location_recieve == '์ „์ฒด(ํฌ๋ง ์ง€์—ญ)': - input_location = '' - else: - input_location = input_location_recieve - - - if input_jobtype_recieve == '์ „์ฒด(๊ทผ๋ฌด ํ˜•ํƒœ)': - input_jobtype = '' - elif input_jobtype_recieve == '์ •๊ทœ์ง': - input_jobtype = 'fulltime' - elif input_jobtype_recieve == '๊ณ„์•ฝ์ง': - input_jobtype = 'contract' - elif input_jobtype_recieve == '์ธํ„ด': - input_jobtype = 'internship' - elif input_jobtype_recieve == '์•„๋ฅด๋ฐ”์ดํŠธ': - input_jobtype = 'parttime' - elif input_jobtype_recieve == '๋ณ‘์—ญํŠน๋ก€': - input_jobtype = 'custom_1' - - print("๊ฒ€์ƒ‰์–ด๋Š”", input_keyword_recieve) - print("๊ทผ๋ฌดํ˜•ํƒœ ์ž…๋ ฅ์€", input_jobtype) - print("์œ„์น˜ ์ž…๋ ฅ์€", input_location) - - URL = f'https://kr.indeed.com/%EC%B7%A8%EC%97%85?q={input_keyword_recieve}&l={input_location}&jt={input_jobtype}&limit={LIMIT}&radius=25' - print(URL) - last_page = get_last_page() # ์ตœ๋Œ€ ํŽ˜์ด์ง€๋ฅผ ์ •์˜ํ•˜๋Š” ํ•จ์ˆ˜๋ฅผ ๋ณ€์ˆ˜์— ๋„ฃ๋Š”๋‹ค. - id_jobs = extracts_jobs(last_page) #์ตœ๋Œ€ ํŽ˜์ด์ง€๋ฅผ ์ •์˜ํ•˜๋Š” ํ•จ์ˆ˜๋ฅผ ๋„ฃ์€ ๋ณ€์ˆ˜๋ฅผ ์ธ์ž๋กœ ๋„ฃ๊ณ  ํ•จ์ˆ˜๋ฅผ ์‹คํ–‰ํ•œ๋‹ค. - - return id_jobs - # return jsonify ({'result':'success','id_jobs':id_jobs}) \ No newline at end of file diff --git a/Jobs_Collections/index.py b/Jobs_Collections/index.py deleted file mode 100644 index f8e4bea..0000000 --- a/Jobs_Collections/index.py +++ /dev/null @@ -1,89 +0,0 @@ - -from bs4 import BeautifulSoup -import requests -import json -from flask import Flask, render_template, jsonify, request - -from news import news_card -from indeed import id_get_jobs -from saramin import sa_get_jobs -from job_korea import jk_get_jobs - -app = Flask(__name__) - - -## HTML์„ ์ฃผ๋Š” ๋ถ€๋ถ„ -@app.route('/') -def home(): - return render_template('Jobs_collection.html') - - -@app.route('/api/news', methods=['GET']) -def get_news(): - return news_card() - - -@app.route('/api/saramin', methods=['GET']) -def get_saramin_jobs(): - input_keyword_recieve = request.args.get('input_keyword_give') - input_location_recieve = request.args.get('input_location_give') - input_jobtype_recieve = request.args.get('input_jobtype_give') - # print(input_keyword_recieve) - # print(input_location_recieve) - # print(input_jobtype_recieve) - sa_jobs = sa_get_jobs(input_keyword_recieve, input_location_recieve, input_jobtype_recieve) - # return sa_get_jobs() - # return id_get_jobs() - return jsonify ({'result':'success','sa_jobs':sa_jobs}) - - - -@app.route('/api/indeed', methods=['GET']) -def get_indeed_jobs(): - input_keyword_recieve = request.args.get('input_keyword_give') - input_location_recieve = request.args.get('input_location_give') - input_jobtype_recieve = request.args.get('input_jobtype_give') - # print(input_keyword_recieve) - # print(input_location_recieve) - # print(input_jobtype_recieve) - id_jobs = id_get_jobs(input_keyword_recieve, input_location_recieve, input_jobtype_recieve) - # return sa_get_jobs() - # return id_get_jobs() - return jsonify ({'result':'success','id_jobs':id_jobs}) - - - -@app.route('/api/job_korea', methods=['GET']) -def get_job_korea_jobs(): - input_keyword_recieve = request.args.get('input_keyword_give') - input_location_recieve = request.args.get('input_location_give') - input_jobtype_recieve = request.args.get('input_jobtype_give') - # print(input_keyword_recieve) - # print(input_location_recieve) - # print(input_jobtype_recieve) - jk_jobs = jk_get_jobs(input_keyword_recieve, input_location_recieve, input_jobtype_recieve) - # return sa_get_jobs() - # return jk_get_jobs() - return jsonify ({'result':'success','jk_jobs':jk_jobs}) - -@app.route('/api/total', methods=['GET']) -def get_total_jobs(): - # return sa_get_jobs() - input_keyword_recieve = request.args.get('input_keyword_give') - input_location_recieve = request.args.get('input_location_give') - input_jobtype_recieve = request.args.get('input_jobtype_give') - print(input_keyword_recieve) - print(input_location_recieve) - print(input_jobtype_recieve) - jk_jobs = jk_get_jobs(input_keyword_recieve, input_location_recieve, input_jobtype_recieve) - sa_jobs = sa_get_jobs(input_keyword_recieve, input_location_recieve, input_jobtype_recieve) - id_jobs = id_get_jobs(input_keyword_recieve, input_location_recieve, input_jobtype_recieve) - # print(type(jk_jobs), jk_jobs) - # print(type(b)) - - return jsonify ({'result':'success','jk_jobs':jk_jobs, 'sa_jobs':sa_jobs, 'id_jobs':id_jobs}) - - -if __name__ == '__main__': - app.run('localhost', port=10038, debug=True) -# print(news_craw()) \ No newline at end of file diff --git a/Jobs_Collections/job_korea.py b/Jobs_Collections/job_korea.py deleted file mode 100644 index 95e2c8f..0000000 --- a/Jobs_Collections/job_korea.py +++ /dev/null @@ -1,128 +0,0 @@ -from bs4 import BeautifulSoup -import requests -import json -from flask import Flask, render_template, jsonify, request - -global job_type_box -job_type_box = '1' -global URL - - - -def get_last_page(): - result = requests.get(URL) - - # ๋ทฐํ‹ฐํ’€์ˆฉ์„ ์‚ฌ์šฉํ•ด Html์„ ์ „์ฒด ๊ฐ€์ ธ์˜จ๋‹ค. - soup = BeautifulSoup(result.text, 'html.parser') - pagination = soup.find("div", {"class":"tplPagination newVer wide"}).find_all("li") - if pagination is not None: - last_page = pagination[-1].get_text() - return int(last_page) - else: - return 0 - -def extract_jobs(last_page): - jk_jobs = [] - # for page in range(last_page): - for page in range(1): - #for page in range(1): - print(f"Job-Koera page : {page+1}") - result = requests.get(URL+f'&Page_No={page}') - soup = BeautifulSoup(result.text, 'html.parser') - list_default = soup.find("div", {"class":"list-default"}) - jobs_page = list_default.find_all("div", {"class":"post"}) - - for job in jobs_page: - #job = extract_job(jobs_page) - companys_a = job.find("div", {"class":"post-list-corp"}).find("a") - companys = companys_a.string - if companys is not None: - companys = companys - else : - companys = companys_a['title'] - positions = job.find("div", {"class":"post-list-info"}).find("a")["title"] - locations = job.find("div", {"class":"post-list-info"}).find("p").find("span", {"class":"loc short"}).string - # ##์งˆ๋ฌธ!!! ์—ฌ๊ธฐ์„œ ๊ตฌ, ๋™์„ ๊ฐ€์ ธ์˜ค๊ณ  ์‹ถ๋‹ค. - # # job_type = job.find("div", {"class":"job_condition"}).find_all("span").string - links = job.find("div", {"class":"post-list-info"}).find("a")["href"] - links = f'http://www.jobkorea.co.kr{links}' - - - # jobs_kind = {'company':companys, 'positions':positions, 'locations':locations, 'links':links, 'job_type':job_type} - jobs_kind = {'companys':companys, 'positions':positions, 'locations':locations, 'links':links } - - # print(jobs_kind) - jk_jobs.append(jobs_kind) - - return jk_jobs - -def jk_get_jobs(input_keyword_recieve, input_location_recieve, input_jobtype_recieve): - - - if input_jobtype_recieve == '์ „์ฒด(๊ทผ๋ฌด ํ˜•ํƒœ)': - input_jobtype = '' - elif input_jobtype_recieve == '์ •๊ทœ์ง': - input_jobtype = 1 - elif input_jobtype_recieve == '๊ณ„์•ฝ์ง': - input_jobtype = 2 - elif input_jobtype_recieve == '์ธํ„ด': - input_jobtype = 3 - elif input_jobtype_recieve == '์•„๋ฅด๋ฐ”์ดํŠธ': - input_jobtype = 7 - elif input_jobtype_recieve == '๋ณ‘์—ญํŠน๋ก€': - input_jobtype = 9 - - - if input_location_recieve == '์ „์ฒด(ํฌ๋ง ์ง€์—ญ)': - input_location = '' - elif input_location_recieve == '์„œ์šธ': - input_location = 'I000' - elif input_location_recieve == '๊ฒฝ๊ธฐ': - input_location = 'B000' - elif input_location_recieve == '์ธ์ฒœ': - input_location = 'K000' - elif input_location_recieve == '๋ถ€์‚ฐ': - input_location = 'H000' - elif input_location_recieve == '๋Œ€๊ตฌ': - input_location = 'F000' - elif input_location_recieve == '๊ด‘์ฃผ': - input_location = 'E000' - elif input_location_recieve == '๋Œ€์ „': - input_location = 'G000' - elif input_location_recieve == '์šธ์‚ฐ': - input_location = 'J000' - elif input_location_recieve == '์„ธ์ข…': - input_location = '1000' - elif input_location_recieve == '๊ฐ•์›': - input_location = 'A000' - elif input_location_recieve == '๊ฒฝ๋‚จ': - input_location = 'C000' - elif input_location_recieve == '๊ฒฝ๋ถ': - input_location = 'D000' - elif input_location_recieve == '์ „๋‚จ': - input_location = 'L000' - elif input_location_recieve == '์ „๋ถ': - input_location = 'M000' - elif input_location_recieve == '์ถฉ๋‚จ': - input_location = 'O000' - elif input_location_recieve == '์ถฉ๋ถ': - input_location = 'P000' - elif input_location_recieve == '์ œ์ฃผ': - input_location = 'N000' - - - print("๊ฒ€์ƒ‰์–ด๋Š”", input_keyword_recieve) - print("๊ทผ๋ฌดํ˜•ํƒœ ์ž…๋ ฅ์€", input_jobtype) - print("์œ„์น˜ ์ž…๋ ฅ์€", input_location) - - global URL - global job_type_box - - URL = f'http://www.jobkorea.co.kr/Search/?stext={input_keyword_recieve}&local={input_location}&jobtype={input_jobtype}&tabType=recruit' - - print(URL) - last_page = get_last_page() # ์ตœ๋Œ€ ํŽ˜์ด์ง€๋ฅผ ์ •์˜ํ•˜๋Š” ํ•จ์ˆ˜๋ฅผ ๋ณ€์ˆ˜์— ๋„ฃ๋Š”๋‹ค. - jk_jobs = extract_jobs(last_page) #์ตœ๋Œ€ ํŽ˜์ด์ง€๋ฅผ ์ •์˜ํ•˜๋Š” ํ•จ์ˆ˜๋ฅผ ๋„ฃ์€ ๋ณ€์ˆ˜๋ฅผ ์ธ์ž๋กœ ๋„ฃ๊ณ  ํ•จ์ˆ˜๋ฅผ ์‹คํ–‰ํ•œ๋‹ค. - - return jk_jobs - # return jsonify ({'result':'success','jk_jobs':jk_jobs}) \ No newline at end of file diff --git a/Jobs_Collections/news.py b/Jobs_Collections/news.py deleted file mode 100644 index e55edbc..0000000 --- a/Jobs_Collections/news.py +++ /dev/null @@ -1,60 +0,0 @@ - -from bs4 import BeautifulSoup -import requests -import json -from flask import Flask, render_template, jsonify, request - - -def news_card(): - news_result = requests.get( - 'https://search.naver.com/search.naver?where=news&sm=tab_jum&query=%EC%B7%A8%EC%97%85') - # ๋ทฐํ‹ฐํ’€์ˆฉ์„ ์‚ฌ์šฉํ•ด Html์„ ์ „์ฒด ๊ฐ€์ ธ์˜จ๋‹ค. - news_soup = BeautifulSoup(news_result.text, 'html.parser') - # page ์ˆ˜๋ฅผ ์ฐพ๊ธฐ ์œ„ํ•ด ํ•ด๋‹น div๋ฅผ ๊ฐ€์ ธ์™€์„œ ํ™•์ธํ•œ๋‹ค. - news_result = requests.get( - 'https://search.naver.com/search.naver?where=news&sm=tab_jum&query=%EC%B7%A8%EC%97%85') - # ๋ทฐํ‹ฐํ’€์ˆฉ์„ ์‚ฌ์šฉํ•ด Html์„ ์ „์ฒด ๊ฐ€์ ธ์˜จ๋‹ค. - news_soup = BeautifulSoup(news_result.text, 'html.parser') - news_div = news_soup.find("div", {"class": "news mynews section _prs_nws"}) - news_ul = news_div.find("ul", {"class": "type01"}) - news_li = news_ul.find_all("div", {"class": "thumb"}) - news_dl = news_ul.find_all("dl") - - news_link = [] - news_img = [] - news_title = [] - news_content = [] - - news_card = [] - - for news_links in news_li: - news_links = news_links.find("a")["href"] - # print(news_links) - news_link.append(news_links) - - for news_imgs in news_li: - news_imgs = news_imgs.find("img")["src"] - news_imgs = news_imgs.strip("&type=ofullfill80_80_q75_re2%27,") - # print(news_imgs) - news_img.append(news_imgs) - - for news_titles in news_dl: - news_titles = news_titles.find("dt").find("a")["title"] - news_title.append(news_titles) - - for news_contents in news_dl: - total_news_contents = news_contents.find_all( - "dd")[1].get_text(strip=True) - news_content.append(total_news_contents) - - # print(dd_content) - # sub_news_contents = news_contents.find_all("dd", {"class":"text_inline"}) - #news_contents = total_news_contents.replace(sub_news_contents,'') - # print(total_news_contents) - - for n in range(8): - news_cards = {"news_img": news_img[n], "news_title": news_title[n], - "news_link": news_link[n], "news_content": news_content[n]} - #news_card ={"news_img":news_img, "news_title":news_title, "news_link":news_link} - news_card.append(news_cards) - return jsonify ({'result':'success','news_card':news_card}) \ No newline at end of file diff --git a/Jobs_Collections/saramin.py b/Jobs_Collections/saramin.py deleted file mode 100644 index 6699941..0000000 --- a/Jobs_Collections/saramin.py +++ /dev/null @@ -1,126 +0,0 @@ - -from bs4 import BeautifulSoup -import requests -import json -from flask import Flask, render_template, jsonify, request - -global URL -global URL_op - - -def get_last_page(): - result = requests.get(URL) - - # ๋ทฐํ‹ฐํ’€์ˆฉ์„ ์‚ฌ์šฉํ•ด Html์„ ์ „์ฒด ๊ฐ€์ ธ์˜จ๋‹ค. - soup = BeautifulSoup(result.text, 'html.parser') - pagination = soup.find("div", {"class":"pagination"}).find_all("span") - - if pagination is not None: - last_page = pagination[-1].get_text() - return int(last_page) - else : - return 0 - -def extract_jobs(last_page): - sa_jobs = [] - # for page in range(last_page): - for page in range(1): - #for page in range(1): - print(f"Saramin page : {page+1}") - result = requests.get(URL+f'&recruitPage={page+1}'+URL_op) - print(URL+f'&recruitPage={page+1}'+URL_op) - soup = BeautifulSoup(result.text, 'html.parser') - jobs_page = soup.find_all("div", {"class":"item_recruit"}) - - - for job in jobs_page: - #job = extract_job(jobs_page) - companys = job.find("strong", {"class":"corp_name"}).find("a")["title"] - positions = job.find("h2", {"class":"job_tit"}).find("a")["title"] - locations = job.find("div", {"class":"job_condition"}).find("a").string - ##์งˆ๋ฌธ!!! ์—ฌ๊ธฐ์„œ ๊ตฌ, ๋™์„ ๊ฐ€์ ธ์˜ค๊ณ  ์‹ถ๋‹ค. - #job_type = job.find("div", {"class":"job_condition"}).find_all("span")[3].string - links = job.find("h2", {"class":"job_tit"}).find("a")["href"] - links = f'http://www.saramin.co.kr{links}' - jobs_kind = {'companys':companys, 'positions':positions, 'locations':locations, 'links':links } - - - #print(jobs_kind) - sa_jobs.append(jobs_kind) - - # print(sa_jobs) - return sa_jobs - -def sa_get_jobs(input_keyword_recieve, input_location_recieve, input_jobtype_recieve): - - - - if input_jobtype_recieve == '์ „์ฒด(๊ทผ๋ฌด ํ˜•ํƒœ)': - input_jobtype = '' - elif input_jobtype_recieve == '์ •๊ทœ์ง': - input_jobtype = 1 - elif input_jobtype_recieve == '๊ณ„์•ฝ์ง': - input_jobtype = 2 - elif input_jobtype_recieve == '์ธํ„ด': - input_jobtype = 4 - elif input_jobtype_recieve == '์•„๋ฅด๋ฐ”์ดํŠธ': - input_jobtype = 5 - elif input_jobtype_recieve == '๋ณ‘์—ญํŠน๋ก€': - input_jobtype = 3 - - - if input_location_recieve == '์ „์ฒด(ํฌ๋ง ์ง€์—ญ)': - input_location = '' - elif input_location_recieve == '์„œ์šธ': - input_location = 101000 - elif input_location_recieve == '๊ฒฝ๊ธฐ': - input_location = 102000 - elif input_location_recieve == '์ธ์ฒœ': - input_location = 108000 - elif input_location_recieve == '๋ถ€์‚ฐ': - input_location = 106000 - elif input_location_recieve == '๋Œ€๊ตฌ': - input_location = 104000 - elif input_location_recieve == '๊ด‘์ฃผ': - input_location = 103000 - elif input_location_recieve == '๋Œ€์ „': - input_location = 105000 - elif input_location_recieve == '์šธ์‚ฐ': - input_location = 107000 - elif input_location_recieve == '์„ธ์ข…': - input_location = 118000 - elif input_location_recieve == '๊ฐ•์›': - input_location = 109000 - elif input_location_recieve == '๊ฒฝ๋‚จ': - input_location = 110000 - elif input_location_recieve == '๊ฒฝ๋ถ': - input_location = 111000 - elif input_location_recieve == '์ „๋‚จ': - input_location = 112000 - elif input_location_recieve == '์ „๋ถ': - input_location = 113000 - elif input_location_recieve == '์ถฉ๋‚จ': - input_location = 115000 - elif input_location_recieve == '์ถฉ๋ถ': - input_location = 114000 - elif input_location_recieve == '์ œ์ฃผ': - input_location = 116000 - - print("๊ฒ€์ƒ‰์–ด๋Š”", input_keyword_recieve) - print("๊ทผ๋ฌดํ˜•ํƒœ ์ž…๋ ฅ์€", input_jobtype) - print("์œ„์น˜ ์ž…๋ ฅ์€", input_location) - - global URL - global URL_op - - URL_op = f'&recruitSort=relation&recruitPageCount=40&inner_com_type=&quick_apply=' - URL = f'http://www.saramin.co.kr/zf_user/search/recruit?searchType=search&searchword={input_keyword_recieve}&company_cd=0,1,2,3,4,5,6,7,9&loc_mcd={input_location}&job_type={input_jobtype}&panel_type=&search_optional_item=y&search_done=y&panel_count=y' - - - last_page = get_last_page() # ์ตœ๋Œ€ ํŽ˜์ด์ง€๋ฅผ ์ •์˜ํ•˜๋Š” ํ•จ์ˆ˜๋ฅผ ๋ณ€์ˆ˜์— ๋„ฃ๋Š”๋‹ค. - sa_jobs = extract_jobs(last_page) #์ตœ๋Œ€ ํŽ˜์ด์ง€๋ฅผ ์ •์˜ํ•˜๋Š” ํ•จ์ˆ˜๋ฅผ ๋„ฃ์€ ๋ณ€์ˆ˜๋ฅผ ์ธ์ž๋กœ ๋„ฃ๊ณ  ํ•จ์ˆ˜๋ฅผ ์‹คํ–‰ํ•œ๋‹ค. - # print(sa_jobs) - # return sa_jobs - - return sa_jobs - # return jsonify ({'result':'success','sa_jobs':sa_jobs}) \ No newline at end of file diff --git a/Jobs_Collections/static/.DS_Store b/Jobs_Collections/static/.DS_Store deleted file mode 100644 index ebff0d3ecf35527dbb5d363589806fe20c639c64..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 6148 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 div { -position: absolute; -width: 13.32px; -height: 13.32px; -border-radius: 50%; -background: #ff727d; -animation: ldio-dmlkq2kuyw 2.564102564102564s linear infinite; -}.ldio-dmlkq2kuyw div:nth-child(1) > div { -left: 82.5px; -top: 48.50000000000001px; -animation-delay: -2.2435897435897436s; -} -.ldio-dmlkq2kuyw > div:nth-child(1) { -transform: rotate(0deg); -transform-origin: 89.16px 55.160000000000004px; -}.ldio-dmlkq2kuyw div:nth-child(2) > div { -left: 72.5px; -top: 72.5px; -animation-delay: -1.923076923076923s; -} -.ldio-dmlkq2kuyw > div:nth-child(2) { -transform: rotate(45deg); -transform-origin: 79.16px 79.16px; -}.ldio-dmlkq2kuyw div:nth-child(3) > div { -left: 48.50000000000001px; -top: 82.5px; -animation-delay: -1.6025641025641024s; -} -.ldio-dmlkq2kuyw > div:nth-child(3) { -transform: rotate(90deg); -transform-origin: 55.160000000000004px 89.16px; -}.ldio-dmlkq2kuyw div:nth-child(4) > div { -left: 25.500000000000007px; -top: 72.5px; -animation-delay: -1.282051282051282s; -} -.ldio-dmlkq2kuyw > div:nth-child(4) { -transform: rotate(135deg); -transform-origin: 32.160000000000004px 79.16px; -}.ldio-dmlkq2kuyw div:nth-child(5) > div { -left: 15.500000000000007px; -top: 48.50000000000001px; -animation-delay: -0.9615384615384615s; -} -.ldio-dmlkq2kuyw > div:nth-child(5) { -transform: rotate(180deg); -transform-origin: 22.160000000000004px 55.160000000000004px; -}.ldio-dmlkq2kuyw div:nth-child(6) > div { -left: 25.500000000000007px; -top: 25.500000000000007px; -animation-delay: -0.641025641025641s; -} -.ldio-dmlkq2kuyw > div:nth-child(6) { -transform: rotate(225deg); -transform-origin: 32.160000000000004px 32.160000000000004px; -}.ldio-dmlkq2kuyw div:nth-child(7) > div { -left: 48.50000000000001px; -top: 15.500000000000007px; -animation-delay: -0.3205128205128205s; -} -.ldio-dmlkq2kuyw > div:nth-child(7) { -transform: rotate(270deg); -transform-origin: 55.160000000000004px 22.160000000000004px; -}.ldio-dmlkq2kuyw div:nth-child(8) > div { -left: 72.5px; -top: 25.500000000000007px; -animation-delay: 0s; -} -.ldio-dmlkq2kuyw > div:nth-child(8) { -transform: rotate(315deg); -transform-origin: 79.16px 32.160000000000004px; -} -.loadingio-spinner-spin-87fuqmn8sh4 { -width: 111px; -height: 111px; -display: inline-block; -overflow: hidden; -background: #ffffff; -} -.ldio-dmlkq2kuyw { -width: 100%; -height: 100%; -position: relative; -transform: translateZ(0) scale(1); -backface-visibility: hidden; -transform-origin: 0 0; /* see note above */ -} -.ldio-dmlkq2kuyw div { box-sizing: content-box; } -/* generated by https://loading.io/ */ \ No newline at end of file diff --git a/Jobs_Collections/static/news.js b/Jobs_Collections/static/news.js deleted file mode 100644 index 706010e..0000000 --- a/Jobs_Collections/static/news.js +++ /dev/null @@ -1,46 +0,0 @@ - -$(document).ready(function () { - news_readey(); - console.log('์ค€๋น„์™„๋ฃŒ'); -}); - -// const loadingbar_news = document.querySelector("#loading_news") ์งˆ๋ฌธ 1๋ฒˆ - -function news_readey() { - $('#recruit_news').empty() - $.ajax({ - type: "GET", - url: "/api/news", - data: {}, - success: function (response) { - $(loading_news).addClass("hiding_class"); - // loadingbar_news.classList.add('hiding_class') ์งˆ๋ฌธ 1๋ฒˆ - let news_card = response['news_card']; - for (let i = 0; i < news_card.length; i++) { - let r_news_card = news_card[i] - - let news_content = r_news_card['news_content'] - let news_link = r_news_card['news_link'] - let news_img = r_news_card['news_img'] - let news_title = r_news_card['news_title'] - - let temp_html = ``; - $('#recruit_news').append(temp_html); - - } - } - }) -} \ No newline at end of file diff --git a/Jobs_Collections/static/pocket.js b/Jobs_Collections/static/pocket.js deleted file mode 100644 index d55fae9..0000000 --- a/Jobs_Collections/static/pocket.js +++ /dev/null @@ -1,24 +0,0 @@ -const pocket_bar_1 = document.querySelector("#fixedbtn") -const tooltip = document.querySelector(".balloon") - -const balloon = "balloon hiding_class" - - - -function handleClick_tooltip() { - const current_class = tooltip; - - if(current_class.className == balloon){ - tooltip.classList.remove('hiding_class'); - } - else{ - tooltip.classList.add('hiding_class'); - } - -} - - -function init() { - pocket_bar_1.addEventListener("click", handleClick_tooltip); -} -init() \ No newline at end of file diff --git a/Jobs_Collections/static/pocket.png b/Jobs_Collections/static/pocket.png deleted file mode 100644 index 6a3c998ad246845fcaeee70dd6dbed10ca0916fc..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1780 zcmVcZ1&{j&uMAVadFXaZ`62r?8nE^ZEf9`m*%#%`}6bSsHpYe;PKYh^4i+@?CkH+ z(fs!I>%_$4tgP06fZC9d*ocVVpP%WzzSMhr<+HQhnVIw5-P(XnMp&lyb%x0`Y}7D0VsnjM3J1#zL0c?3f`lsBrq~`msW?DcnGWT z&@WcylE5MMoND7I;!^J_(5rEf5(|?ajZX&1(^3bh&E2 zY<*eTJn1G8Qc}iC7VvT1jK%YIg;R?{n8weH2aztdD=?cdS5VFr(#9>fs#V4XX9~fF z!i$D(Hg+SrQb=mUZzIBpXd2O#LgI+m6pSd1DWfZe$c7|&Ji8HHDWuND+KuQ)A$b~a z1ta27|BEAqT(V#o(TzfK8)`<>M?^OY$!&;# zWW$JV6r!pYvhp%y#1+2oMj<@Cn0ge^33PUP+ngvwlTx}ePjHIf2qy}`<%AW2@G~a@ ze@IRg#$ZFM5uGSR&nB!(vKY~Y!qVb^z*vmvLLn?aNegw65hXIB3x)9GNo^zw4HWTV zBf3xsX=Xt-8eV|fA^a`5>1lo+OX z%UK|eh<0DNiqou4C(>T#hq}#(&LYAw&}zg%DMUtu$jY!%~Ry zy^Rrvr4SeK{ar&jVBFiI9I#e)V9xUqJ7gQrt}!s8igIH4I@34;@IFDcL$Nr= zF^~uoadhv_i6WWl6=cMrp0e;?8S#zJ9qMBEMvS09%Qwfyh{fQKJE1C+^bM-Ao6YCt zv+r@5p3iBV9|0;^xa`i#cAJM^WqGLc>wd1hUeo4%TY-{=tISO14=sL{U$TIJaUtti z!odyu+f}eo>%MoFU(&c=$vUq0Shfb-WZlnG2UFiwWA7g*0L!dBkdY;QUc}xK%93$J zOE1`?ZK}9mN>N)QS&>BbyU#mS*}bXwz9Up8;&_Xd>Wa193v3)Zqpfjxanc?07M*kP z@=iFJxFYHY-GnOB_i`t94(ZYRU{wfF=vN}hT;O=HlH1LAHJ;_zTU}=bXg^OTCWqDP zP;0*s{jq+yjoI;U{X0&OZgYDg0v|phXTP1&6b~QtFABC0zQ7PfY&drfInhe0lyf<(9d7I+?_=i z#qb-6>iELL(Oo1wglM9+*1ZupgotowR6lzusvpUAgm0F@OJ*jH8t5zKw(Ug>D7!Yg zOu^0LpYD`Z`He=Z(%YAsH i.like_company === like_company) - if (LS_like_index !== -1) { - alert("๊ด€์‹ฌ๊ธฐ์—…์— ์ด๋ฏธ ๋“ฑ๋ก๋˜์–ด์žˆ์Šต๋‹ˆ๋‹ค.") - } - else { - - if (like_list_ar.length < 18) { - let like_html = ``; - // like_list.append(like_html); - $('#like_list').append(like_html); - - const like_list_Obj = { - 'like_company': like_company, - 'like_link': like_link - - }; - like_list_ar.push(like_list_Obj) - save_like_list(); - } - else { - alert("๊ด€์‹ฌ๊ธฐ์—…์€ ์ตœ๋Œ€ 18๊ฐœ๊นŒ์ง€๋งŒ ๋“ฑ๋ก ๊ฐ€๋Šฅํ•ฉ๋‹ˆ๋‹ค.") - - } - } -} - - - - - -function handleClick_search() { - - let input_keyword = input_keyword_box.value - let input_potal = input_potal_box.value - let input_location = input_location_box.value - let input_jobtype = input_jobtype_box.value - - console.log(`๊ฒ€์ƒ‰์–ด : ${input_keyword}, ํฌํƒˆ : ${input_potal}, ์œ„์น˜ : ${input_location}, ๊ณ ์šฉ ํ˜•ํƒœ : ${input_jobtype}`) - - if (input_keyword == '') { - alert("๊ฒ€์ƒ‰์–ด๋ฅผ ์ž…๋ ฅํ•˜์„ธ์š”.") - return 0 - } - - - if (input_location == '์ „์ฒด (ํฌ๋ง ์ง€์—ญ)') { - input_location = '' - } - - if (input_jobtype == '์ „์ฒด (๊ทผ๋ฌด ํ˜•ํƒœ)') { - input_jobtype = '' - } - - // console.log(`${input_keyword}๋ฅผ ๊ฒ€์ƒ‰ํ•ฉ๋‹ˆ๋‹ค.`) - - if (input_potal == '์ „์ฒด (ํฌํƒˆ ์„ ํƒ)') { - job_total_give(input_keyword, input_location, input_jobtype) - } - - else if (input_potal == 'Job-korea') { - job_korea_jobs_give(input_keyword, input_location, input_jobtype) - } - - else if (input_potal == 'Saram-in') { - saramin_jobs_give(input_keyword, input_location, input_jobtype) - } - - else if (input_potal == 'Indeed') { - indeed_jobs_give(input_keyword, input_location, input_jobtype) - } - - section_recruit_info.classList.remove('hiding_class'); - section_news_info.classList.add('hiding_class'); - - - -} - - -function indeed_jobs_give(input_keyword, input_location, input_jobtype) { - None_info.classList.add('hiding_class'); - loadingbar.classList.remove('hiding_class'); - pocket_bar.classList.add('hiding_class'); - $(recruit_info).addClass("hiding_class"); - $('.balloon').addClass("hiding_class"); - $('#total_recruit_info').empty() - $.ajax({ - type: "GET", - url: `/api/indeed?input_keyword_give=` + input_keyword + `&input_location_give=` + input_location + `&input_jobtype_give=` + input_jobtype, - data: {}, - error: function () { - alert('์ผ์น˜ํ•˜๋Š” ์ •๋ณด๊ฐ€ ์—†์Šต๋‹ˆ๋‹ค.'); - None_info.classList.remove('hiding_class') - loadingbar.classList.add('hiding_class') - $(recruit_info).addClass("hiding_class"); - pocket_bar.classList.remove('hiding_class'); - }, - success: function (response) { - $(recruit_info).removeClass("hiding_class"); - let id_jobs = response['id_jobs']; - // console.log(id_jobs.length) - if (id_jobs.length === 0) { - alert('์ผ์น˜ํ•˜๋Š” ์ •๋ณด๊ฐ€ ์—†์Šต๋‹ˆ๋‹ค.'); - None_info.classList.remove('hiding_class') - loadingbar.classList.add('hiding_class') - $(recruit_info).addClass("hiding_class"); - pocket_bar.classList.remove('hiding_class'); - } - - - - for (let i = 0; i < id_jobs.length; i++) { - let r_id_jobs = id_jobs[i] - let company = r_id_jobs['companys'] - let position = r_id_jobs['positions'] - let location = r_id_jobs['locations'] - let link = r_id_jobs['links'] - - let temp_html = `
-
- -
-
- - ${position} - -
-
-
- ์œ„์น˜ : ${location} -
-
- -
-
-
-
- - -
-
-
`; - $('#total_recruit_info').append(temp_html); - jobs_num.innerText = `์ด ${id_jobs.length}๊ฐœ์˜ ์ฑ„์šฉ์ •๋ณด`; - jobs_potal.innerText = 'Indeed์˜ ์ฑ„์šฉ์ •๋ณด'; - loadingbar.classList.add('hiding_class'); - pocket_bar.classList.remove('hiding_class'); - - - } - } - }) - -} - - -function saramin_jobs_give(input_keyword, input_location, input_jobtype) { - None_info.classList.add('hiding_class'); - loadingbar.classList.remove('hiding_class'); - $(recruit_info).addClass("hiding_class"); - pocket_bar.classList.add('hiding_class'); - $('.balloon').addClass("hiding_class"); - $('#total_recruit_info').empty() - $.ajax({ - type: "GET", - url: `/api/saramin?input_keyword_give=` + input_keyword + `&input_location_give=` + input_location + `&input_jobtype_give=` + input_jobtype, - data: {}, - error: function () { - alert('์ผ์น˜ํ•˜๋Š” ์ •๋ณด๊ฐ€ ์—†์Šต๋‹ˆ๋‹ค.'); - None_info.classList.remove('hiding_class') - loadingbar.classList.add('hiding_class') - $(recruit_info).addClass("hiding_class"); - pocket_bar.classList.remove('hiding_class'); - }, - success: function (response) { - $(recruit_info).removeClass("hiding_class"); - let sa_jobs = response['sa_jobs']; - for (let i = 0; i < sa_jobs.length; i++) { - let r_sa_jobs = sa_jobs[i] - - let company = r_sa_jobs['companys'] - let position = r_sa_jobs['positions'] - let location = r_sa_jobs['locations'] - let link = r_sa_jobs['links'] - - let temp_html = `
-
- -
-
- - ${position} - -
-
-
- ์œ„์น˜ : ${location} -
-
- -
-
-
-
- - -
-
-
`; - $('#total_recruit_info').append(temp_html); - jobs_num.innerText = `์ด ${sa_jobs.length}๊ฐœ์˜ ์ฑ„์šฉ์ •๋ณด`; - jobs_potal.innerText = 'Saram-in์˜ ์ฑ„์šฉ์ •๋ณด'; - loadingbar.classList.add('hiding_class'); - pocket_bar.classList.remove('hiding_class'); - - } - } - }) -} - - -function job_korea_jobs_give(input_keyword, input_location, input_jobtype) { - None_info.classList.add('hiding_class'); - loadingbar.classList.remove('hiding_class'); - $(recruit_info).addClass("hiding_class"); - pocket_bar.classList.add('hiding_class'); - $('.balloon').addClass("hiding_class"); - $('#total_recruit_info').empty() - $.ajax({ - type: "GET", - url: `/api/job_korea?input_keyword_give=` + input_keyword + `&input_location_give=` + input_location + `&input_jobtype_give=` + input_jobtype, - data: {}, - error: function () { - alert('์ผ์น˜ํ•˜๋Š” ์ •๋ณด๊ฐ€ ์—†์Šต๋‹ˆ๋‹ค.'); - None_info.classList.remove('hiding_class') - loadingbar.classList.add('hiding_class') - $(recruit_info).addClass("hiding_class"); - pocket_bar.classList.remove('hiding_class'); - }, - success: function (response) { - $(recruit_info).removeClass("hiding_class"); - let jk_jobs = response['jk_jobs']; - for (let i = 0; i < jk_jobs.length; i++) { - let r_jk_jobs = jk_jobs[i] - - let company = r_jk_jobs['companys'] - let position = r_jk_jobs['positions'] - let location = r_jk_jobs['locations'] - let link = r_jk_jobs['links'] - - let temp_html = `
-
- -
-
- - ${position} - -
-
-
- ์œ„์น˜ : ${location} -
-
- -
-
-
-
- - -
-
-
`; - $('#total_recruit_info').append(temp_html); - jobs_num.innerText = `์ด ${jk_jobs.length}๊ฐœ์˜ ์ฑ„์šฉ์ •๋ณด`; - jobs_potal.innerText = 'Job-korea์˜ ์ฑ„์šฉ์ •๋ณด'; - loadingbar.classList.add('hiding_class'); - pocket_bar.classList.remove('hiding_class'); - - } - } - }) -} - - -function job_total_give(input_keyword, input_location, input_jobtype) { - None_info.classList.add('hiding_class'); - loadingbar.classList.remove('hiding_class'); - $(recruit_info).addClass("hiding_class"); - pocket_bar.classList.add('hiding_class'); - $('.balloon').addClass("hiding_class"); - $('#total_recruit_info').empty() - $.ajax({ - type: "GET", - url: `/api/total?input_keyword_give=` + input_keyword + `&input_location_give=` + input_location + `&input_jobtype_give=` + input_jobtype, - data: {}, - error: function () { - alert('์ผ์น˜ํ•˜๋Š” ์ •๋ณด๊ฐ€ ์—†์Šต๋‹ˆ๋‹ค.'); - None_info.classList.remove('hiding_class') - loadingbar.classList.add('hiding_class') - $(recruit_info).addClass("hiding_class"); - pocket_bar.classList.remove('hiding_class'); - }, - success: function (response) { - $(recruit_info).removeClass("hiding_class"); - let jk_jobs = response['jk_jobs']; - let id_jobs = response['id_jobs']; - let sa_jobs = response['sa_jobs']; - // console.log(jk_jobs) - for (let i = 0; i < jk_jobs.length; i++) { - let r_jk_jobs = jk_jobs[i] - - let company = r_jk_jobs['companys'] - let position = r_jk_jobs['positions'] - let location = r_jk_jobs['locations'] - let link = r_jk_jobs['links'] - - let temp_html = `
-
- -
-
- - ${position} - -
-
-
- ์œ„์น˜ : ${location} -
-
- -
-
-
-
- - -
-
-
`; - $('#total_recruit_info').append(temp_html); - jobs_num.innerText = `์ด ${jk_jobs.length + id_jobs.length + sa_jobs.length}๊ฐœ์˜ ์ฑ„์šฉ์ •๋ณด`; - jobs_potal.innerText = '์ „์ฒดํฌํƒˆ์˜ ์ฑ„์šฉ์ •๋ณด'; - loadingbar.classList.add('hiding_class'); - pocket_bar.classList.remove('hiding_class'); - - } - - for (let i = 0; i < sa_jobs.length; i++) { - let r_sa_jobs = sa_jobs[i] - - let company = r_sa_jobs['companys'] - let position = r_sa_jobs['positions'] - let location = r_sa_jobs['locations'] - let link = r_sa_jobs['links'] - - let temp_html = `
-
- -
-
- - ${position} - -
-
-
- ์œ„์น˜ : ${location} -
-
- -
-
-
-
- - -
-
-
`; - $('#total_recruit_info').append(temp_html); - } - - for (let i = 0; i < id_jobs.length; i++) { - let r_id_jobs = id_jobs[i] - - let company = r_id_jobs['companys'] - let position = r_id_jobs['positions'] - let location = r_id_jobs['locations'] - let link = r_id_jobs['links'] - - let temp_html = `
-
- -
-
- - ${position} - -
-
-
- ์œ„์น˜ : ${location} -
-
- -
-
-
-
- - -
-
-
`; - $('#total_recruit_info').append(temp_html); - } - } - }) -} - -function print_like(like) { - let like_company_LS = like['like_company'] - let like_link_LS = like['like_link'] - - let like_html = - ``; - // like_list.append(like_html); - $('#like_list').append(like_html); - - const like_list_Obj = { - 'like_company': like_company_LS, - 'like_link': like_link_LS - // id :newId - }; - like_list_ar.push(like_list_Obj) - save_like_list(); - -} - -function save_like_list() { - localStorage.setItem(like_list_LS, JSON.stringify(like_list_ar)); -} - -function load_like() { - const loaded_like = localStorage.getItem(like_list_LS); - if (loaded_like !== null) { - const parsed_like = JSON.parse(loaded_like); - parsed_like.forEach(function (like) { - // console.log(like) - print_like(like) - }) - } -} - - - - -function init() { - - search_btn.addEventListener("click", handleClick_search); - - - load_like(); - - // Total_logo.addEventListener("click", handleClick_search); - // Job_Koera_logo.addEventListener("click", handleClick_Job_Korea); - // Saramin_logo.addEventListener("click", handleClick_Saramin); - // Indeed_logo.addEventListener("click", handleClick_Indeed); -} -init(); \ No newline at end of file diff --git a/Jobs_Collections/static/section_page1.css b/Jobs_Collections/static/section_page1.css deleted file mode 100644 index 68667c5..0000000 --- a/Jobs_Collections/static/section_page1.css +++ /dev/null @@ -1,54 +0,0 @@ -*{ - box-sizing: border-box; -} - -.todays_news{ - font-family: 'Jua', sans-serif; -} - -#hot_jobs{ - width: 880px; - height: 850px; /*์„น์…˜์˜ ์ „์ฒด ๋†’์ด๋ฅผ ์ž„์˜๋กœ ์ง€์ •ํ•ด๋†“์Œ.*/ - margin: 50px 100px 0px 100px; - background-color: white; -} - -#news_box{ - width: 180px; - height: 300px; - margin: 50px 20px 0px 20px; - display: inline-block; - float: left; - border: 1px solid #dae1e6; -} - -#news_img{ - width: 180px; - height: 120px; -} - -#news_title{ - width: 160px; - height: 60px; - margin: 10px 10px 10px 10px; - font-weight: bold; - font-size: 14px; - overflow: hidden; - /* white-space: normal; */ - text-overflow: ellipsis; -} - -#news_content{ - width: 160px; - height: 80px; - margin: 0px 10px 10px 10px; - font-size: 11px; - overflow: hidden; - /* white-space: normal; */ - text-overflow: ellipsis; -} - -.news_class{ -text-decoration: none; -color: black; -} \ No newline at end of file diff --git a/Jobs_Collections/static/section_page2.css b/Jobs_Collections/static/section_page2.css deleted file mode 100644 index 6b407d2..0000000 --- a/Jobs_Collections/static/section_page2.css +++ /dev/null @@ -1,157 +0,0 @@ -*{ - box-sizing: border-box; - -} -section{ - margin: 0 auto; - width: 1080px; - /* background-color: #e5e6eb; */ - font-family: 'Malgun Gothic'; -} - -#section_total{ - width: 880px; - /*์„น์…˜์˜ ์ „์ฒด ๋†’์ด๋ฅผ ์ž„์˜๋กœ ์ง€์ •ํ•ด๋†“์Œ.*/ - margin: 50px 100px 0px 100px; - background-color: white; -} - -#section_Job_Korea{ - width: 880px; - /*์„น์…˜์˜ ์ „์ฒด ๋†’์ด๋ฅผ ์ž„์˜๋กœ ์ง€์ •ํ•ด๋†“์Œ.*/ - margin: 50px 100px 0px 100px; - background-color: white; -} - -#section_Saramin{ - width: 880px; - /*์„น์…˜์˜ ์ „์ฒด ๋†’์ด๋ฅผ ์ž„์˜๋กœ ์ง€์ •ํ•ด๋†“์Œ.*/ - margin: 50px 100px 0px 100px; - background-color: white; -} - -#section_Indeed{ - width: 880px; - /*์„น์…˜์˜ ์ „์ฒด ๋†’์ด๋ฅผ ์ž„์˜๋กœ ์ง€์ •ํ•ด๋†“์Œ.*/ - margin: 50px 100px 0px 100px; - background-color: white; -} - - - -#recruit_info{ - height: 100px; - margin-bottom: 40px; -} - -#recruit_info_box{ - height: 70px; - display: inline-block; -} -#recruit_info_box >h2{ - margin: 20px 0px 0px 20px; - vertical-align: middle; -} - -#recruit_info_number{ - height: 30px; - -} - -#recruit_info_number >h4{ - margin: 0px 0px 0px 20px; -} - -#recruit_post{ - width: 880px; - height: 90px; - border: 1px solid #dae1e6; - -} - -/* #recruit_post_info{ - width: 50%; - height: 120px; - margin: 25px 40px 25px 100px; - float: left; -} */ - -#recruit_post_link{ - width: 98px; - height: 90px; - - border-left: 0.1px solid #dae1e6; - display: inline-block; - text-align: center; -} - -#support_btn{ - height: 25px; - margin: 15px 0px 10px; - border: none; -} - -.pink_btn{ - color:#fff; - background-color: #f8585b; - border: none; - height: 25px; -} - - -#like_btn{ - height: 25px; - margin: 15px 0px 10px; -} - -#company_name{ - width: 180px; - height: 20px; - display: inline-block; - float: left; - - text-align: center; - margin: 35px 0px 35px 20px; -} -.a_companys_name{ - text-decoration: none; - color: black; -} - -#position_name{ - width: 460px; - height: 25px; - display: inline-block; - float: left; - margin: 10px 60px 10px 60px; - -} - -#other_name{ - width: 460px; - height: 25px; - display: inline-block; - float: left; - margin: 10px 60px 10px 60px; -} - -#location_name{ - display: inline-block; - float: left; - font-size: 11px; - width: 300px; -} - -#income_name{ - display: inline-block; - float: left; - margin-left: 20px; - font-size: 13px; - width: 90px; -} - -#None_info{ - text-align: center; - height: 300px; - margin-top: 330px; -} \ No newline at end of file diff --git a/Jobs_Collections/templates/Jobs_collection.html b/Jobs_Collections/templates/Jobs_collection.html deleted file mode 100644 index 3eec5cb..0000000 --- a/Jobs_Collections/templates/Jobs_collection.html +++ /dev/null @@ -1,290 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - Jobs Collection - - - - - -
-
-
- ๊ด€์‹ฌ์žˆ๋Š” ๊ธฐ์—… ๋ชฉ๋ก -
-
-
    - -
-
-
-
- - -
- -
- -

Collection Jobs

- -
- -
-
- - - - - - - - - - - -
-
-
- - - -
-
- -
-
-

์ „์ฒด ํฌํƒˆ์˜ ์ฑ„์šฉ์ •๋ณด

-
-
-

์ฑ„์šฉ์ •๋ณด ๊ฐฏ์ˆ˜

-
-
- - - -
-
-
-
-
- - - -
-

์ผ์น˜ํ•˜๋Š” ์ฑ„์šฉ ์ •๋ณด๊ฐ€ ์—†์Šต๋‹ˆ๋‹ค.

-
- -
- - - -
-
-
- - - - - -
-
-
-

์˜ค๋Š˜์˜ ์ทจ์—… ๊ด€๋ จ ๋‰ด์Šค

-
- -
- -
-
-
- -
- - -
- - - -
- - - -
- -
- - - -
- - - -
- -
- - - - - - - - - - \ No newline at end of file diff --git a/Jobs_Collections/venv/Lib/python3.8/site-packages/Flask-1.1.2.dist-info/INSTALLER b/Jobs_Collections/venv/Lib/python3.8/site-packages/Flask-1.1.2.dist-info/INSTALLER deleted file mode 100644 index a1b589e..0000000 --- a/Jobs_Collections/venv/Lib/python3.8/site-packages/Flask-1.1.2.dist-info/INSTALLER +++ /dev/null @@ -1 +0,0 @@ -pip diff --git a/Jobs_Collections/venv/Lib/python3.8/site-packages/Flask-1.1.2.dist-info/LICENSE.rst b/Jobs_Collections/venv/Lib/python3.8/site-packages/Flask-1.1.2.dist-info/LICENSE.rst deleted file mode 100644 index 9d227a0..0000000 --- a/Jobs_Collections/venv/Lib/python3.8/site-packages/Flask-1.1.2.dist-info/LICENSE.rst +++ /dev/null @@ -1,28 +0,0 @@ -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/Jobs_Collections/venv/Lib/python3.8/site-packages/Flask-1.1.2.dist-info/METADATA b/Jobs_Collections/venv/Lib/python3.8/site-packages/Flask-1.1.2.dist-info/METADATA deleted file mode 100644 index db7fcd1..0000000 --- a/Jobs_Collections/venv/Lib/python3.8/site-packages/Flask-1.1.2.dist-info/METADATA +++ /dev/null @@ -1,137 +0,0 @@ -Metadata-Version: 2.1 -Name: Flask -Version: 1.1.2 -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: Programming Language :: Python :: 3.8 -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 :: 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/Jobs_Collections/venv/Lib/python3.8/site-packages/Flask-1.1.2.dist-info/RECORD b/Jobs_Collections/venv/Lib/python3.8/site-packages/Flask-1.1.2.dist-info/RECORD deleted file mode 100644 index 7098140..0000000 --- a/Jobs_Collections/venv/Lib/python3.8/site-packages/Flask-1.1.2.dist-info/RECORD +++ /dev/null @@ -1,48 +0,0 @@ -../../../bin/flask,sha256=7sMFt4F34SuIhj1mBGO_YWBlZ0cTI3mgQBFxgTwmAIA,250 -Flask-1.1.2.dist-info/INSTALLER,sha256=zuuue4knoyJ-UwPPXg8fezS7VCrXJQrAP7zeNuwvFQg,4 -Flask-1.1.2.dist-info/LICENSE.rst,sha256=SJqOEQhQntmKN7uYPhHg9-HTHwvY-Zp5yESOf_N9B-o,1475 -Flask-1.1.2.dist-info/METADATA,sha256=3INpPWH6nKfZ33R2N-bQZy4TOe1wQCMweZc9mwcNrtc,4591 -Flask-1.1.2.dist-info/RECORD,, -Flask-1.1.2.dist-info/WHEEL,sha256=8zNYZbwQSXoB9IfXOjPfeNwvAsALAjffgk27FqvCWbo,110 -Flask-1.1.2.dist-info/entry_points.txt,sha256=gBLA1aKg0OYR8AhbAfg8lnburHtKcgJLDU52BBctN0k,42 -Flask-1.1.2.dist-info/top_level.txt,sha256=dvi65F6AeGWVU0TBpYiC04yM60-FX1gJFkK31IKQr5c,6 -flask/__init__.py,sha256=YnA9wkwbJcnb_jTT-nMsMFeFE_UWt33khKzdHmMSuyI,1894 -flask/__main__.py,sha256=fjVtt3QTANXlpJCOv3Ha7d5H-76MwzSIOab7SFD9TEk,254 -flask/__pycache__/__init__.cpython-38.pyc,, -flask/__pycache__/__main__.cpython-38.pyc,, -flask/__pycache__/_compat.cpython-38.pyc,, -flask/__pycache__/app.cpython-38.pyc,, -flask/__pycache__/blueprints.cpython-38.pyc,, -flask/__pycache__/cli.cpython-38.pyc,, -flask/__pycache__/config.cpython-38.pyc,, -flask/__pycache__/ctx.cpython-38.pyc,, -flask/__pycache__/debughelpers.cpython-38.pyc,, -flask/__pycache__/globals.cpython-38.pyc,, -flask/__pycache__/helpers.cpython-38.pyc,, -flask/__pycache__/logging.cpython-38.pyc,, -flask/__pycache__/sessions.cpython-38.pyc,, -flask/__pycache__/signals.cpython-38.pyc,, -flask/__pycache__/templating.cpython-38.pyc,, -flask/__pycache__/testing.cpython-38.pyc,, -flask/__pycache__/views.cpython-38.pyc,, -flask/__pycache__/wrappers.cpython-38.pyc,, -flask/_compat.py,sha256=8KPT54Iig96TuLipdogLRHNYToIcg-xPhnSV5VRERnw,4099 -flask/app.py,sha256=tmEhx_XrIRP24vZg39dHMWFzJ2jj-YxIcd51LaIT5cE,98059 -flask/blueprints.py,sha256=vkdm8NusGsfZUeIfPdCluj733QFmiQcT4Sk1tuZLUjw,21400 -flask/cli.py,sha256=SIb22uq9wYBeB2tKMl0pYdhtZ1MAQyZtPL-3m6es4G0,31035 -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=IHa578HU_3XAAo1wpXQv24MYRYO5TzaiDQQwvUIcE6Q,43074 -flask/json/__init__.py,sha256=6nITbZYiYOPB8Qfi1-dvsblwn01KRz8VOsMBIZyaYek,11988 -flask/json/__pycache__/__init__.cpython-38.pyc,, -flask/json/__pycache__/tag.cpython-38.pyc,, -flask/json/tag.py,sha256=vq9GOllg_0kTWKuVFrwmkeOQzR-jdBD23x-89JyCCQI,8306 -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=WXsciCQbHBP7xjHqNvOA4bT0k86GvSNpgzncfXLDEEg,10146 -flask/views.py,sha256=eeWnadLAj0QdQPLtjKipDetRZyG62CT2y7fNOFDJz0g,5802 -flask/wrappers.py,sha256=kgsvtZuMM6RQaDqhRbc5Pcj9vqTnaERl2pmXcdGL7LU,4736 diff --git a/Jobs_Collections/venv/Lib/python3.8/site-packages/Flask-1.1.2.dist-info/WHEEL b/Jobs_Collections/venv/Lib/python3.8/site-packages/Flask-1.1.2.dist-info/WHEEL deleted file mode 100644 index 8b701e9..0000000 --- a/Jobs_Collections/venv/Lib/python3.8/site-packages/Flask-1.1.2.dist-info/WHEEL +++ /dev/null @@ -1,6 +0,0 @@ -Wheel-Version: 1.0 -Generator: bdist_wheel (0.33.6) -Root-Is-Purelib: true -Tag: py2-none-any -Tag: py3-none-any - diff --git a/Jobs_Collections/venv/Lib/python3.8/site-packages/Flask-1.1.2.dist-info/entry_points.txt b/Jobs_Collections/venv/Lib/python3.8/site-packages/Flask-1.1.2.dist-info/entry_points.txt deleted file mode 100644 index 1eb0252..0000000 --- a/Jobs_Collections/venv/Lib/python3.8/site-packages/Flask-1.1.2.dist-info/entry_points.txt +++ /dev/null @@ -1,3 +0,0 @@ -[console_scripts] -flask = flask.cli:main - diff --git a/Jobs_Collections/venv/Lib/python3.8/site-packages/Flask-1.1.2.dist-info/top_level.txt b/Jobs_Collections/venv/Lib/python3.8/site-packages/Flask-1.1.2.dist-info/top_level.txt deleted file mode 100644 index 7e10602..0000000 --- a/Jobs_Collections/venv/Lib/python3.8/site-packages/Flask-1.1.2.dist-info/top_level.txt +++ /dev/null @@ -1 +0,0 @@ -flask diff --git a/Jobs_Collections/venv/Lib/python3.8/site-packages/Jinja2-2.11.2.dist-info/INSTALLER b/Jobs_Collections/venv/Lib/python3.8/site-packages/Jinja2-2.11.2.dist-info/INSTALLER deleted file mode 100644 index a1b589e..0000000 --- a/Jobs_Collections/venv/Lib/python3.8/site-packages/Jinja2-2.11.2.dist-info/INSTALLER +++ /dev/null @@ -1 +0,0 @@ -pip diff --git a/Jobs_Collections/venv/Lib/python3.8/site-packages/Jinja2-2.11.2.dist-info/LICENSE.rst b/Jobs_Collections/venv/Lib/python3.8/site-packages/Jinja2-2.11.2.dist-info/LICENSE.rst deleted file mode 100644 index c37cae4..0000000 --- a/Jobs_Collections/venv/Lib/python3.8/site-packages/Jinja2-2.11.2.dist-info/LICENSE.rst +++ /dev/null @@ -1,28 +0,0 @@ -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/Jobs_Collections/venv/Lib/python3.8/site-packages/Jinja2-2.11.2.dist-info/METADATA b/Jobs_Collections/venv/Lib/python3.8/site-packages/Jinja2-2.11.2.dist-info/METADATA deleted file mode 100644 index 55c0f82..0000000 --- a/Jobs_Collections/venv/Lib/python3.8/site-packages/Jinja2-2.11.2.dist-info/METADATA +++ /dev/null @@ -1,106 +0,0 @@ -Metadata-Version: 2.1 -Name: Jinja2 -Version: 2.11.2 -Summary: A very fast and expressive template engine. -Home-page: https://palletsprojects.com/p/jinja/ -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://jinja.palletsprojects.com/ -Project-URL: Code, https://github.com/pallets/jinja -Project-URL: Issue tracker, https://github.com/pallets/jinja/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.5 -Classifier: Programming Language :: Python :: 3.6 -Classifier: Programming Language :: Python :: 3.7 -Classifier: Programming Language :: Python :: 3.8 -Classifier: Programming Language :: Python :: Implementation :: CPython -Classifier: Programming Language :: Python :: Implementation :: PyPy -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.*, !=3.4.* -Description-Content-Type: text/x-rst -Requires-Dist: MarkupSafe (>=0.23) -Provides-Extra: i18n -Requires-Dist: Babel (>=0.8) ; extra == 'i18n' - -Jinja -===== - -Jinja is a fast, expressive, extensible templating engine. Special -placeholders in the template allow writing code similar to Python -syntax. Then the template is passed data to render the final document. - -It includes: - -- Template inheritance and inclusion. -- Define and import macros within templates. -- HTML templates can use autoescaping to prevent XSS from untrusted - user input. -- A sandboxed environment can safely render untrusted templates. -- AsyncIO support for generating templates and calling async - functions. -- I18N support with Babel. -- Templates are compiled to optimized Python code just-in-time and - cached, or can be compiled ahead-of-time. -- Exceptions point to the correct line in templates to make debugging - easier. -- Extensible filters, tests, functions, and even syntax. - -Jinja's philosophy is that while application logic belongs in Python if -possible, it shouldn't make the template designer's job difficult by -restricting functionality too much. - - -Installing ----------- - -Install and update using `pip`_: - -.. code-block:: text - - $ pip install -U Jinja2 - -.. _pip: https://pip.pypa.io/en/stable/quickstart/ - - -In A Nutshell -------------- - -.. code-block:: jinja - - {% extends "base.html" %} - {% block title %}Members{% endblock %} - {% block content %} - - {% endblock %} - - -Links ------ - -- Website: https://palletsprojects.com/p/jinja/ -- Documentation: https://jinja.palletsprojects.com/ -- Releases: https://pypi.org/project/Jinja2/ -- Code: https://github.com/pallets/jinja -- Issue tracker: https://github.com/pallets/jinja/issues -- Test status: https://dev.azure.com/pallets/jinja/_build -- Official chat: https://discord.gg/t6rrQZH - - diff --git a/Jobs_Collections/venv/Lib/python3.8/site-packages/Jinja2-2.11.2.dist-info/RECORD b/Jobs_Collections/venv/Lib/python3.8/site-packages/Jinja2-2.11.2.dist-info/RECORD deleted file mode 100644 index d1a691f..0000000 --- a/Jobs_Collections/venv/Lib/python3.8/site-packages/Jinja2-2.11.2.dist-info/RECORD +++ /dev/null @@ -1,61 +0,0 @@ -Jinja2-2.11.2.dist-info/INSTALLER,sha256=zuuue4knoyJ-UwPPXg8fezS7VCrXJQrAP7zeNuwvFQg,4 -Jinja2-2.11.2.dist-info/LICENSE.rst,sha256=O0nc7kEF6ze6wQ-vG-JgQI_oXSUrjp3y4JefweCUQ3s,1475 -Jinja2-2.11.2.dist-info/METADATA,sha256=5ZHRZoIRAMHsJPnqhlJ622_dRPsYePYJ-9EH4-Ry7yI,3535 -Jinja2-2.11.2.dist-info/RECORD,, -Jinja2-2.11.2.dist-info/WHEEL,sha256=kGT74LWyRUZrL4VgLh6_g12IeVl_9u9ZVhadrgXZUEY,110 -Jinja2-2.11.2.dist-info/entry_points.txt,sha256=Qy_DkVo6Xj_zzOtmErrATe8lHZhOqdjpt3e4JJAGyi8,61 -Jinja2-2.11.2.dist-info/top_level.txt,sha256=PkeVWtLb3-CqjWi1fO29OCbj55EhX_chhKrCdrVe_zs,7 -jinja2/__init__.py,sha256=0QCM_jKKDM10yzSdHRVV4mQbCbDqf0GN0GirAqibn9Y,1549 -jinja2/__pycache__/__init__.cpython-38.pyc,, -jinja2/__pycache__/_compat.cpython-38.pyc,, -jinja2/__pycache__/_identifier.cpython-38.pyc,, -jinja2/__pycache__/asyncfilters.cpython-38.pyc,, -jinja2/__pycache__/asyncsupport.cpython-38.pyc,, -jinja2/__pycache__/bccache.cpython-38.pyc,, -jinja2/__pycache__/compiler.cpython-38.pyc,, -jinja2/__pycache__/constants.cpython-38.pyc,, -jinja2/__pycache__/debug.cpython-38.pyc,, -jinja2/__pycache__/defaults.cpython-38.pyc,, -jinja2/__pycache__/environment.cpython-38.pyc,, -jinja2/__pycache__/exceptions.cpython-38.pyc,, -jinja2/__pycache__/ext.cpython-38.pyc,, -jinja2/__pycache__/filters.cpython-38.pyc,, -jinja2/__pycache__/idtracking.cpython-38.pyc,, -jinja2/__pycache__/lexer.cpython-38.pyc,, -jinja2/__pycache__/loaders.cpython-38.pyc,, -jinja2/__pycache__/meta.cpython-38.pyc,, -jinja2/__pycache__/nativetypes.cpython-38.pyc,, -jinja2/__pycache__/nodes.cpython-38.pyc,, -jinja2/__pycache__/optimizer.cpython-38.pyc,, -jinja2/__pycache__/parser.cpython-38.pyc,, -jinja2/__pycache__/runtime.cpython-38.pyc,, -jinja2/__pycache__/sandbox.cpython-38.pyc,, -jinja2/__pycache__/tests.cpython-38.pyc,, -jinja2/__pycache__/utils.cpython-38.pyc,, -jinja2/__pycache__/visitor.cpython-38.pyc,, -jinja2/_compat.py,sha256=B6Se8HjnXVpzz9-vfHejn-DV2NjaVK-Iewupc5kKlu8,3191 -jinja2/_identifier.py,sha256=EdgGJKi7O1yvr4yFlvqPNEqV6M1qHyQr8Gt8GmVTKVM,1775 -jinja2/asyncfilters.py,sha256=XJtYXTxFvcJ5xwk6SaDL4S0oNnT0wPYvXBCSzc482fI,4250 -jinja2/asyncsupport.py,sha256=ZBFsDLuq3Gtji3Ia87lcyuDbqaHZJRdtShZcqwpFnSQ,7209 -jinja2/bccache.py,sha256=3Pmp4jo65M9FQuIxdxoDBbEDFwe4acDMQf77nEJfrHA,12139 -jinja2/compiler.py,sha256=Ta9W1Lit542wItAHXlDcg0sEOsFDMirCdlFPHAurg4o,66284 -jinja2/constants.py,sha256=RR1sTzNzUmKco6aZicw4JpQpJGCuPuqm1h1YmCNUEFY,1458 -jinja2/debug.py,sha256=neR7GIGGjZH3_ILJGVUYy3eLQCCaWJMXOb7o0kGInWc,8529 -jinja2/defaults.py,sha256=85B6YUUCyWPSdrSeVhcqFVuu_bHUAQXeey--FIwSeVQ,1126 -jinja2/environment.py,sha256=XDSLKc4SqNLMOwTSq3TbWEyA5WyXfuLuVD0wAVjEFwM,50629 -jinja2/exceptions.py,sha256=VjNLawcmf2ODffqVMCQK1cRmvFaUfQWF4u8ouP3QPcE,5425 -jinja2/ext.py,sha256=AtwL5O5enT_L3HR9-oBvhGyUTdGoyaqG_ICtnR_EVd4,26441 -jinja2/filters.py,sha256=_RpPgAlgIj7ExvyDzcHAC3B36cocfWK-1TEketbNeM0,41415 -jinja2/idtracking.py,sha256=J3O4VHsrbf3wzwiBc7Cro26kHb6_5kbULeIOzocchIU,9211 -jinja2/lexer.py,sha256=nUFLRKhhKmmEWkLI65nQePgcQs7qsRdjVYZETMt_v0g,30331 -jinja2/loaders.py,sha256=C-fST_dmFjgWkp0ZuCkrgICAoOsoSIF28wfAFink0oU,17666 -jinja2/meta.py,sha256=QjyYhfNRD3QCXjBJpiPl9KgkEkGXJbAkCUq4-Ur10EQ,4131 -jinja2/nativetypes.py,sha256=Ul__gtVw4xH-0qvUvnCNHedQeNDwmEuyLJztzzSPeRg,2753 -jinja2/nodes.py,sha256=Mk1oJPVgIjnQw9WOqILvcu3rLepcFZ0ahxQm2mbwDwc,31095 -jinja2/optimizer.py,sha256=gQLlMYzvQhluhzmAIFA1tXS0cwgWYOjprN-gTRcHVsc,1457 -jinja2/parser.py,sha256=fcfdqePNTNyvosIvczbytVA332qpsURvYnCGcjDHSkA,35660 -jinja2/runtime.py,sha256=0y-BRyIEZ9ltByL2Id6GpHe1oDRQAwNeQvI0SKobNMw,30618 -jinja2/sandbox.py,sha256=knayyUvXsZ-F0mk15mO2-ehK9gsw04UhB8td-iUOtLc,17127 -jinja2/tests.py,sha256=iO_Y-9Vo60zrVe1lMpSl5sKHqAxe2leZHC08OoZ8K24,4799 -jinja2/utils.py,sha256=OoVMlQe9S2-lWT6jJbTu9tDuDvGNyWUhHDcE51i5_Do,22522 -jinja2/visitor.py,sha256=DUHupl0a4PGp7nxRtZFttUzAi1ccxzqc2hzetPYUz8U,3240 diff --git a/Jobs_Collections/venv/Lib/python3.8/site-packages/Jinja2-2.11.2.dist-info/WHEEL b/Jobs_Collections/venv/Lib/python3.8/site-packages/Jinja2-2.11.2.dist-info/WHEEL deleted file mode 100644 index ef99c6c..0000000 --- a/Jobs_Collections/venv/Lib/python3.8/site-packages/Jinja2-2.11.2.dist-info/WHEEL +++ /dev/null @@ -1,6 +0,0 @@ -Wheel-Version: 1.0 -Generator: bdist_wheel (0.34.2) -Root-Is-Purelib: true -Tag: py2-none-any -Tag: py3-none-any - diff --git a/Jobs_Collections/venv/Lib/python3.8/site-packages/Jinja2-2.11.2.dist-info/entry_points.txt b/Jobs_Collections/venv/Lib/python3.8/site-packages/Jinja2-2.11.2.dist-info/entry_points.txt deleted file mode 100644 index 3619483..0000000 --- a/Jobs_Collections/venv/Lib/python3.8/site-packages/Jinja2-2.11.2.dist-info/entry_points.txt +++ /dev/null @@ -1,3 +0,0 @@ -[babel.extractors] -jinja2 = jinja2.ext:babel_extract [i18n] - diff --git a/Jobs_Collections/venv/Lib/python3.8/site-packages/Jinja2-2.11.2.dist-info/top_level.txt b/Jobs_Collections/venv/Lib/python3.8/site-packages/Jinja2-2.11.2.dist-info/top_level.txt deleted file mode 100644 index 7f7afbf..0000000 --- a/Jobs_Collections/venv/Lib/python3.8/site-packages/Jinja2-2.11.2.dist-info/top_level.txt +++ /dev/null @@ -1 +0,0 @@ -jinja2 diff --git a/Jobs_Collections/venv/Lib/python3.8/site-packages/MarkupSafe-1.1.1.dist-info/INSTALLER b/Jobs_Collections/venv/Lib/python3.8/site-packages/MarkupSafe-1.1.1.dist-info/INSTALLER deleted file mode 100644 index a1b589e..0000000 --- a/Jobs_Collections/venv/Lib/python3.8/site-packages/MarkupSafe-1.1.1.dist-info/INSTALLER +++ /dev/null @@ -1 +0,0 @@ -pip diff --git a/Jobs_Collections/venv/Lib/python3.8/site-packages/MarkupSafe-1.1.1.dist-info/LICENSE.rst b/Jobs_Collections/venv/Lib/python3.8/site-packages/MarkupSafe-1.1.1.dist-info/LICENSE.rst deleted file mode 100644 index 9d227a0..0000000 --- a/Jobs_Collections/venv/Lib/python3.8/site-packages/MarkupSafe-1.1.1.dist-info/LICENSE.rst +++ /dev/null @@ -1,28 +0,0 @@ -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/Jobs_Collections/venv/Lib/python3.8/site-packages/MarkupSafe-1.1.1.dist-info/METADATA b/Jobs_Collections/venv/Lib/python3.8/site-packages/MarkupSafe-1.1.1.dist-info/METADATA deleted file mode 100644 index c50370d..0000000 --- a/Jobs_Collections/venv/Lib/python3.8/site-packages/MarkupSafe-1.1.1.dist-info/METADATA +++ /dev/null @@ -1,105 +0,0 @@ -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.* -Description-Content-Type: text/x-rst - -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 -* Official chat: https://discord.gg/t6rrQZH - - diff --git a/Jobs_Collections/venv/Lib/python3.8/site-packages/MarkupSafe-1.1.1.dist-info/RECORD b/Jobs_Collections/venv/Lib/python3.8/site-packages/MarkupSafe-1.1.1.dist-info/RECORD deleted file mode 100644 index 1b2c700..0000000 --- a/Jobs_Collections/venv/Lib/python3.8/site-packages/MarkupSafe-1.1.1.dist-info/RECORD +++ /dev/null @@ -1,16 +0,0 @@ -MarkupSafe-1.1.1.dist-info/INSTALLER,sha256=zuuue4knoyJ-UwPPXg8fezS7VCrXJQrAP7zeNuwvFQg,4 -MarkupSafe-1.1.1.dist-info/LICENSE.rst,sha256=SJqOEQhQntmKN7uYPhHg9-HTHwvY-Zp5yESOf_N9B-o,1475 -MarkupSafe-1.1.1.dist-info/METADATA,sha256=IFCP4hCNGjXJgMoSvdjPiKDLAMUTTWoxKXQsQvmyMNU,3653 -MarkupSafe-1.1.1.dist-info/RECORD,, -MarkupSafe-1.1.1.dist-info/WHEEL,sha256=Q2jwauV7SdXlb20cz-bh9vn-BQ4tlA1IGNkj_GWnse8,109 -MarkupSafe-1.1.1.dist-info/top_level.txt,sha256=qy0Plje5IJuvsCBjejJyhDCjEAdcDLK_2agVcex8Z6U,11 -markupsafe/__init__.py,sha256=oTblO5f9KFM-pvnq9bB0HgElnqkJyqHnFN1Nx2NIvnY,10126 -markupsafe/__pycache__/__init__.cpython-38.pyc,, -markupsafe/__pycache__/_compat.cpython-38.pyc,, -markupsafe/__pycache__/_constants.cpython-38.pyc,, -markupsafe/__pycache__/_native.cpython-38.pyc,, -markupsafe/_compat.py,sha256=uEW1ybxEjfxIiuTbRRaJpHsPFf4yQUMMKaPgYEC5XbU,558 -markupsafe/_constants.py,sha256=zo2ajfScG-l1Sb_52EP3MlDCqO7Y1BVHUXXKRsVDRNk,4690 -markupsafe/_native.py,sha256=d-8S_zzYt2y512xYcuSxq0NeG2DUUvG80wVdTn-4KI8,1873 -markupsafe/_speedups.c,sha256=k0fzEIK3CP6MmMqeY0ob43TP90mVN0DTyn7BAl3RqSg,9884 -markupsafe/_speedups.cpython-38-darwin.so,sha256=X3mbW9ZrEJiuX0l5D69_hOpCXJkeTmPdhuiCHy5iCZc,14744 diff --git a/Jobs_Collections/venv/Lib/python3.8/site-packages/MarkupSafe-1.1.1.dist-info/WHEEL b/Jobs_Collections/venv/Lib/python3.8/site-packages/MarkupSafe-1.1.1.dist-info/WHEEL deleted file mode 100644 index f7c2100..0000000 --- a/Jobs_Collections/venv/Lib/python3.8/site-packages/MarkupSafe-1.1.1.dist-info/WHEEL +++ /dev/null @@ -1,5 +0,0 @@ -Wheel-Version: 1.0 -Generator: bdist_wheel (0.33.6) -Root-Is-Purelib: false -Tag: cp38-cp38-macosx_10_9_x86_64 - diff --git a/Jobs_Collections/venv/Lib/python3.8/site-packages/MarkupSafe-1.1.1.dist-info/top_level.txt b/Jobs_Collections/venv/Lib/python3.8/site-packages/MarkupSafe-1.1.1.dist-info/top_level.txt deleted file mode 100644 index 75bf729..0000000 --- a/Jobs_Collections/venv/Lib/python3.8/site-packages/MarkupSafe-1.1.1.dist-info/top_level.txt +++ /dev/null @@ -1 +0,0 @@ -markupsafe diff --git a/Jobs_Collections/venv/Lib/python3.8/site-packages/Werkzeug-1.0.1.dist-info/INSTALLER b/Jobs_Collections/venv/Lib/python3.8/site-packages/Werkzeug-1.0.1.dist-info/INSTALLER deleted file mode 100644 index a1b589e..0000000 --- a/Jobs_Collections/venv/Lib/python3.8/site-packages/Werkzeug-1.0.1.dist-info/INSTALLER +++ /dev/null @@ -1 +0,0 @@ -pip diff --git a/Jobs_Collections/venv/Lib/python3.8/site-packages/Werkzeug-1.0.1.dist-info/LICENSE.rst b/Jobs_Collections/venv/Lib/python3.8/site-packages/Werkzeug-1.0.1.dist-info/LICENSE.rst deleted file mode 100644 index c37cae4..0000000 --- a/Jobs_Collections/venv/Lib/python3.8/site-packages/Werkzeug-1.0.1.dist-info/LICENSE.rst +++ /dev/null @@ -1,28 +0,0 @@ -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/Jobs_Collections/venv/Lib/python3.8/site-packages/Werkzeug-1.0.1.dist-info/METADATA b/Jobs_Collections/venv/Lib/python3.8/site-packages/Werkzeug-1.0.1.dist-info/METADATA deleted file mode 100644 index eb5f709..0000000 --- a/Jobs_Collections/venv/Lib/python3.8/site-packages/Werkzeug-1.0.1.dist-info/METADATA +++ /dev/null @@ -1,128 +0,0 @@ -Metadata-Version: 2.1 -Name: Werkzeug -Version: 1.0.1 -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.5 -Classifier: Programming Language :: Python :: 3.6 -Classifier: Programming Language :: Python :: 3.7 -Classifier: Programming Language :: Python :: 3.8 -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.*, !=3.4.* -Description-Content-Type: text/x-rst -Provides-Extra: dev -Requires-Dist: pytest ; extra == 'dev' -Requires-Dist: pytest-timeout ; 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: 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/Jobs_Collections/venv/Lib/python3.8/site-packages/Werkzeug-1.0.1.dist-info/RECORD b/Jobs_Collections/venv/Lib/python3.8/site-packages/Werkzeug-1.0.1.dist-info/RECORD deleted file mode 100644 index 9bc5975..0000000 --- a/Jobs_Collections/venv/Lib/python3.8/site-packages/Werkzeug-1.0.1.dist-info/RECORD +++ /dev/null @@ -1,101 +0,0 @@ -Werkzeug-1.0.1.dist-info/INSTALLER,sha256=zuuue4knoyJ-UwPPXg8fezS7VCrXJQrAP7zeNuwvFQg,4 -Werkzeug-1.0.1.dist-info/LICENSE.rst,sha256=O0nc7kEF6ze6wQ-vG-JgQI_oXSUrjp3y4JefweCUQ3s,1475 -Werkzeug-1.0.1.dist-info/METADATA,sha256=d0zmVNa4UC2-nAo2A8_81oiy123D6JTGRSuY_Ymgyt4,4730 -Werkzeug-1.0.1.dist-info/RECORD,, -Werkzeug-1.0.1.dist-info/WHEEL,sha256=kGT74LWyRUZrL4VgLh6_g12IeVl_9u9ZVhadrgXZUEY,110 -Werkzeug-1.0.1.dist-info/top_level.txt,sha256=QRyj2VjwJoQkrwjwFIOlB8Xg3r9un0NtqVHQF-15xaw,9 -werkzeug/__init__.py,sha256=rb-yPiXOjTLbtDOl5fQp5hN7oBdaoXAoQ-slAAvfZAo,502 -werkzeug/__pycache__/__init__.cpython-38.pyc,, -werkzeug/__pycache__/_compat.cpython-38.pyc,, -werkzeug/__pycache__/_internal.cpython-38.pyc,, -werkzeug/__pycache__/_reloader.cpython-38.pyc,, -werkzeug/__pycache__/datastructures.cpython-38.pyc,, -werkzeug/__pycache__/exceptions.cpython-38.pyc,, -werkzeug/__pycache__/filesystem.cpython-38.pyc,, -werkzeug/__pycache__/formparser.cpython-38.pyc,, -werkzeug/__pycache__/http.cpython-38.pyc,, -werkzeug/__pycache__/local.cpython-38.pyc,, -werkzeug/__pycache__/posixemulation.cpython-38.pyc,, -werkzeug/__pycache__/routing.cpython-38.pyc,, -werkzeug/__pycache__/security.cpython-38.pyc,, -werkzeug/__pycache__/serving.cpython-38.pyc,, -werkzeug/__pycache__/test.cpython-38.pyc,, -werkzeug/__pycache__/testapp.cpython-38.pyc,, -werkzeug/__pycache__/urls.cpython-38.pyc,, -werkzeug/__pycache__/useragents.cpython-38.pyc,, -werkzeug/__pycache__/utils.cpython-38.pyc,, -werkzeug/__pycache__/wsgi.cpython-38.pyc,, -werkzeug/_compat.py,sha256=zjufTNrhQ8BgYSGSh-sVu6iW3r3O9WzjE9j-qJobx-g,6671 -werkzeug/_internal.py,sha256=d_4AqheyS6dHMViwdc0drFrjs67ZzT6Ej2gWf-Z-Iys,14351 -werkzeug/_reloader.py,sha256=I3mg3oRQ0lLzl06oEoVopN3bN7CtINuuUQdqDcmTnEs,11531 -werkzeug/datastructures.py,sha256=AonxOcwU0TPMEzfKF1368ySULxHgxE-JE-DEAGdo2ts,100480 -werkzeug/debug/__init__.py,sha256=3RtUMc5Y9hYyK11ugHltgkQ9Dt-ViR945Vy_X5NV7zU,17289 -werkzeug/debug/__pycache__/__init__.cpython-38.pyc,, -werkzeug/debug/__pycache__/console.cpython-38.pyc,, -werkzeug/debug/__pycache__/repr.cpython-38.pyc,, -werkzeug/debug/__pycache__/tbtools.cpython-38.pyc,, -werkzeug/debug/console.py,sha256=OATaO7KHYMqpbzIFe1HeW9Mnl3wZgA3jMQoGDPn5URc,5488 -werkzeug/debug/repr.py,sha256=lIwuhbyrMwVe3P_cFqNyqzHL7P93TLKod7lw9clydEw,9621 -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/debug/tbtools.py,sha256=2iJ8RURUZUSbopOIehy53LnVJWx47lsHN2V2l6hc7Wc,20363 -werkzeug/exceptions.py,sha256=UTYSDkmAsH-vt8VSidlEffwqBVNXuT7bRg-_NqgUe8A,25188 -werkzeug/filesystem.py,sha256=HzKl-j0Hd8Jl66j778UbPTAYNnY6vUZgYLlBZ0e7uw0,2101 -werkzeug/formparser.py,sha256=Sto0jZid9im9ZVIf56vilCdyX-arK33wSftkYsLCnzo,21788 -werkzeug/http.py,sha256=KVRV3yFK14PJeI56qClEq4qxFdvKUQVy4C_dwuWz9_Q,43107 -werkzeug/local.py,sha256=_Tk7gB238pPWUU7habxFkZF02fiCMRVW6d62YWL1Rh0,14371 -werkzeug/middleware/__init__.py,sha256=f1SFZo67IlW4k1uqKzNHxYQlsakUS-D6KK_j0e3jjwQ,549 -werkzeug/middleware/__pycache__/__init__.cpython-38.pyc,, -werkzeug/middleware/__pycache__/dispatcher.cpython-38.pyc,, -werkzeug/middleware/__pycache__/http_proxy.cpython-38.pyc,, -werkzeug/middleware/__pycache__/lint.cpython-38.pyc,, -werkzeug/middleware/__pycache__/profiler.cpython-38.pyc,, -werkzeug/middleware/__pycache__/proxy_fix.cpython-38.pyc,, -werkzeug/middleware/__pycache__/shared_data.cpython-38.pyc,, -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=K5oZ3DPXOzdZi0Xba5zW7ClPOxgUuqXHQHvY2-AWCGw,6431 -werkzeug/middleware/shared_data.py,sha256=sPSRTKqtKSVBUyN8fr6jOJbdq9cdOLu6pg3gz4Y_1Xo,9599 -werkzeug/posixemulation.py,sha256=gSSiv1SCmOyzOM_nq1ZaZCtxP__C5MeDJl_4yXJmi4Q,3541 -werkzeug/routing.py,sha256=6-iZ7CKeUILYAehoKXLbmi5E6LgLbwuzUh8TNplnf5Q,79019 -werkzeug/security.py,sha256=81149MplFq7-hD4RK4sKp9kzXXejjV9D4lWBzaRyeQ8,8106 -werkzeug/serving.py,sha256=YvTqvurA-Mnj8mkqRe2kBdVr2ap4ibCq1ByQjOA6g1w,38694 -werkzeug/test.py,sha256=GJ9kxTMSJ-nB7kfGtxuROr9JGmXxDRev-2U1SkeUJGE,39564 -werkzeug/testapp.py,sha256=bHekqMsqRfVxwgFbvOMem-DYa_sdB7R47yUXpt1RUTo,9329 -werkzeug/urls.py,sha256=T8-hV_1vwhu6xhX93FwsHteK-W-kIE2orj5WoMf-WFw,39322 -werkzeug/useragents.py,sha256=TSoGv5IOvP375eK5gLLpsLQCeUgTR6sO1WftmAP_YvM,5563 -werkzeug/utils.py,sha256=hrVK4u_wi8z9viBO9bgOLlm1aaIvCpn-p2d1FeZQDEo,25251 -werkzeug/wrappers/__init__.py,sha256=S4VioKAmF_av9Ec9zQvG71X1EOkYfPx1TYck9jyDiyY,1384 -werkzeug/wrappers/__pycache__/__init__.cpython-38.pyc,, -werkzeug/wrappers/__pycache__/accept.cpython-38.pyc,, -werkzeug/wrappers/__pycache__/auth.cpython-38.pyc,, -werkzeug/wrappers/__pycache__/base_request.cpython-38.pyc,, -werkzeug/wrappers/__pycache__/base_response.cpython-38.pyc,, -werkzeug/wrappers/__pycache__/common_descriptors.cpython-38.pyc,, -werkzeug/wrappers/__pycache__/cors.cpython-38.pyc,, -werkzeug/wrappers/__pycache__/etag.cpython-38.pyc,, -werkzeug/wrappers/__pycache__/json.cpython-38.pyc,, -werkzeug/wrappers/__pycache__/request.cpython-38.pyc,, -werkzeug/wrappers/__pycache__/response.cpython-38.pyc,, -werkzeug/wrappers/__pycache__/user_agent.cpython-38.pyc,, -werkzeug/wrappers/accept.py,sha256=TIvjUc0g73fhTWX54wg_D9NNzKvpnG1X8u1w26tK1o8,1760 -werkzeug/wrappers/auth.py,sha256=Pmn6iaGHBrUyHbJpW0lZhO_q9RVoAa5QalaTqcavdAI,1158 -werkzeug/wrappers/base_request.py,sha256=4TuGlKWeKQdlq4eU94hJYcXSfWo8Rk7CS1Ef5lJ3ZM0,26012 -werkzeug/wrappers/base_response.py,sha256=JTxJZ8o-IBetpoWJqt2HFwPaNWNDAlM3_GXJe1Whw80,27784 -werkzeug/wrappers/common_descriptors.py,sha256=X2Ktd5zUWsmcd4ciaF62Dd8Lru9pLGP_XDUNukc8cXs,12829 -werkzeug/wrappers/cors.py,sha256=XMbaCol4dWTGvb-dCJBoN0p3JX91v93AIAHd7tnB3L4,3466 -werkzeug/wrappers/etag.py,sha256=XMXtyfByBsOjxwaX8U7ZtUY7JXkbQLP45oXZ0qkyTNs,12217 -werkzeug/wrappers/json.py,sha256=HvK_A4NpO0sLqgb10sTJcoZydYOwyNiPCJPV7SVgcgE,4343 -werkzeug/wrappers/request.py,sha256=QbHGqDpGPN684pnOPEokwkPESfm-NnfYM7ydOMxW_NI,1514 -werkzeug/wrappers/response.py,sha256=Oqv8TMG_dnOKTq_V30ddgkO5B7IJhkVPODvm7cbhZ3c,2524 -werkzeug/wrappers/user_agent.py,sha256=YJb-vr12cujG7sQMG9V89VsJa-03SWSenhg1W4cT0EY,435 -werkzeug/wsgi.py,sha256=ZGk85NzRyQTzkYis-xl8V9ydJgfClBdStvhzDzER2mw,34367 diff --git a/Jobs_Collections/venv/Lib/python3.8/site-packages/Werkzeug-1.0.1.dist-info/WHEEL b/Jobs_Collections/venv/Lib/python3.8/site-packages/Werkzeug-1.0.1.dist-info/WHEEL deleted file mode 100644 index ef99c6c..0000000 --- a/Jobs_Collections/venv/Lib/python3.8/site-packages/Werkzeug-1.0.1.dist-info/WHEEL +++ /dev/null @@ -1,6 +0,0 @@ -Wheel-Version: 1.0 -Generator: bdist_wheel (0.34.2) -Root-Is-Purelib: true -Tag: py2-none-any -Tag: py3-none-any - diff --git a/Jobs_Collections/venv/Lib/python3.8/site-packages/Werkzeug-1.0.1.dist-info/top_level.txt b/Jobs_Collections/venv/Lib/python3.8/site-packages/Werkzeug-1.0.1.dist-info/top_level.txt deleted file mode 100644 index 6fe8da8..0000000 --- a/Jobs_Collections/venv/Lib/python3.8/site-packages/Werkzeug-1.0.1.dist-info/top_level.txt +++ /dev/null @@ -1 +0,0 @@ -werkzeug diff --git a/Jobs_Collections/venv/Lib/python3.8/site-packages/__pycache__/easy_install.cpython-38.pyc b/Jobs_Collections/venv/Lib/python3.8/site-packages/__pycache__/easy_install.cpython-38.pyc deleted file mode 100644 index 57e300caf4eed570ed70ae9ece664ce55ec006d3..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 337 zcmYk0y-ve06ou_1K!oVXgai>=hSsRGLP!X~z`(-5&ys;FH+Gu{{{-7N(bnnrTuD)|0dcAGrwR`#b`0D+m3+oDexbR~S{bDFX95ehBn0*$oPy{l} zLX3F$hA?8$9ZEM|_HJvHxPm8F)Gn`;bySEX*HTi&+8996QUQE<97=H;b@3*R+ARR4 zbAawdQON diff --git a/Jobs_Collections/venv/Lib/python3.8/site-packages/__pycache__/mccabe.cpython-38.pyc b/Jobs_Collections/venv/Lib/python3.8/site-packages/__pycache__/mccabe.cpython-38.pyc deleted file mode 100644 index 4fdd2b51e83a3b70112ec719d883ec08714622c6..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 11303 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 JES@Nu{|9JowlDwy diff --git a/Jobs_Collections/venv/Lib/python3.8/site-packages/__pycache__/six.cpython-38.pyc b/Jobs_Collections/venv/Lib/python3.8/site-packages/__pycache__/six.cpython-38.pyc deleted file mode 100644 index e4c58e4e8b3a6d0d4968bdc50386c83bffa15f54..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 26924 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 - Copyright (C) - - This program is free software; you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation; either version 2 of the License, or - (at your option) any later version. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License along - with this program; if not, write to the Free Software Foundation, Inc., - 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. - -Also add information on how to contact you by electronic and paper mail. - -If the program is interactive, make it output a short notice like this -when it starts in an interactive mode: - - Gnomovision version 69, Copyright (C) year name of author - Gnomovision comes with ABSOLUTELY NO WARRANTY; for details type `show w'. - This is free software, and you are welcome to redistribute it - under certain conditions; type `show c' for details. - -The hypothetical commands `show w' and `show c' should show the appropriate -parts of the General Public License. Of course, the commands you use may -be called something other than `show w' and `show c'; they could even be -mouse-clicks or menu items--whatever suits your program. - -You should also get your employer (if you work as a programmer) or your -school, if any, to sign a "copyright disclaimer" for the program, if -necessary. Here is a sample; alter the names: - - Yoyodyne, Inc., hereby disclaims all copyright interest in the program - `Gnomovision' (which makes passes at compilers) written by James Hacker. - - , 1 April 1989 - Ty Coon, President of Vice - -This General Public License does not permit incorporating your program into -proprietary programs. If your program is a subroutine library, you may -consider it more useful to permit linking proprietary applications with the -library. If this is what you want to do, use the GNU Lesser General -Public License instead of this License. diff --git a/Jobs_Collections/venv/Lib/python3.8/site-packages/astroid-2.4.2.dist-info/COPYING.LESSER b/Jobs_Collections/venv/Lib/python3.8/site-packages/astroid-2.4.2.dist-info/COPYING.LESSER deleted file mode 100644 index 2d2d780..0000000 --- a/Jobs_Collections/venv/Lib/python3.8/site-packages/astroid-2.4.2.dist-info/COPYING.LESSER +++ /dev/null @@ -1,510 +0,0 @@ - - GNU LESSER GENERAL PUBLIC LICENSE - Version 2.1, February 1999 - - Copyright (C) 1991, 1999 Free Software Foundation, Inc. - 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA - Everyone is permitted to copy and distribute verbatim copies - of this license document, but changing it is not allowed. - -[This is the first released version of the Lesser GPL. It also counts - as the successor of the GNU Library Public License, version 2, hence - the version number 2.1.] - - Preamble - - The licenses for most software are designed to take away your -freedom to share and change it. By contrast, the GNU General Public -Licenses are intended to guarantee your freedom to share and change -free software--to make sure the software is free for all its users. - - This license, the Lesser General Public License, applies to some -specially designated software packages--typically libraries--of the -Free Software Foundation and other authors who decide to use it. You -can use it too, but we suggest you first think carefully about whether -this license or the ordinary General Public License is the better -strategy to use in any particular case, based on the explanations -below. - - When we speak of free software, we are referring to freedom of use, -not price. Our General Public Licenses are designed to make sure that -you have the freedom to distribute copies of free software (and charge -for this service if you wish); that you receive source code or can get -it if you want it; that you can change the software and use pieces of -it in new free programs; and that you are informed that you can do -these things. - - To protect your rights, we need to make restrictions that forbid -distributors to deny you these rights or to ask you to surrender these -rights. These restrictions translate to certain responsibilities for -you if you distribute copies of the library or if you modify it. - - For example, if you distribute copies of the library, whether gratis -or for a fee, you must give the recipients all the rights that we gave -you. You must make sure that they, too, receive or can get the source -code. If you link other code with the library, you must provide -complete object files to the recipients, so that they can relink them -with the library after making changes to the library and recompiling -it. And you must show them these terms so they know their rights. - - We protect your rights with a two-step method: (1) we copyright the -library, and (2) we offer you this license, which gives you legal -permission to copy, distribute and/or modify the library. - - To protect each distributor, we want to make it very clear that -there is no warranty for the free library. Also, if the library is -modified by someone else and passed on, the recipients should know -that what they have is not the original version, so that the original -author's reputation will not be affected by problems that might be -introduced by others. - - Finally, software patents pose a constant threat to the existence of -any free program. We wish to make sure that a company cannot -effectively restrict the users of a free program by obtaining a -restrictive license from a patent holder. Therefore, we insist that -any patent license obtained for a version of the library must be -consistent with the full freedom of use specified in this license. - - Most GNU software, including some libraries, is covered by the -ordinary GNU General Public License. This license, the GNU Lesser -General Public License, applies to certain designated libraries, and -is quite different from the ordinary General Public License. We use -this license for certain libraries in order to permit linking those -libraries into non-free programs. - - When a program is linked with a library, whether statically or using -a shared library, the combination of the two is legally speaking a -combined work, a derivative of the original library. The ordinary -General Public License therefore permits such linking only if the -entire combination fits its criteria of freedom. The Lesser General -Public License permits more lax criteria for linking other code with -the library. - - We call this license the "Lesser" General Public License because it -does Less to protect the user's freedom than the ordinary General -Public License. It also provides other free software developers Less -of an advantage over competing non-free programs. These disadvantages -are the reason we use the ordinary General Public License for many -libraries. However, the Lesser license provides advantages in certain -special circumstances. - - For example, on rare occasions, there may be a special need to -encourage the widest possible use of a certain library, so that it -becomes a de-facto standard. To achieve this, non-free programs must -be allowed to use the library. A more frequent case is that a free -library does the same job as widely used non-free libraries. In this -case, there is little to gain by limiting the free library to free -software only, so we use the Lesser General Public License. - - In other cases, permission to use a particular library in non-free -programs enables a greater number of people to use a large body of -free software. For example, permission to use the GNU C Library in -non-free programs enables many more people to use the whole GNU -operating system, as well as its variant, the GNU/Linux operating -system. - - Although the Lesser General Public License is Less protective of the -users' freedom, it does ensure that the user of a program that is -linked with the Library has the freedom and the wherewithal to run -that program using a modified version of the Library. - - The precise terms and conditions for copying, distribution and -modification follow. Pay close attention to the difference between a -"work based on the library" and a "work that uses the library". The -former contains code derived from the library, whereas the latter must -be combined with the library in order to run. - - GNU LESSER GENERAL PUBLIC LICENSE - TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION - - 0. This License Agreement applies to any software library or other -program which contains a notice placed by the copyright holder or -other authorized party saying it may be distributed under the terms of -this Lesser General Public License (also called "this License"). -Each licensee is addressed as "you". - - A "library" means a collection of software functions and/or data -prepared so as to be conveniently linked with application programs -(which use some of those functions and data) to form executables. - - The "Library", below, refers to any such software library or work -which has been distributed under these terms. A "work based on the -Library" means either the Library or any derivative work under -copyright law: that is to say, a work containing the Library or a -portion of it, either verbatim or with modifications and/or translated -straightforwardly into another language. (Hereinafter, translation is -included without limitation in the term "modification".) - - "Source code" for a work means the preferred form of the work for -making modifications to it. For a library, complete source code means -all the source code for all modules it contains, plus any associated -interface definition files, plus the scripts used to control -compilation and installation of the library. - - Activities other than copying, distribution and modification are not -covered by this License; they are outside its scope. The act of -running a program using the Library is not restricted, and output from -such a program is covered only if its contents constitute a work based -on the Library (independent of the use of the Library in a tool for -writing it). Whether that is true depends on what the Library does -and what the program that uses the Library does. - - 1. You may copy and distribute verbatim copies of the Library's -complete source code as you receive it, in any medium, provided that -you conspicuously and appropriately publish on each copy an -appropriate copyright notice and disclaimer of warranty; keep intact -all the notices that refer to this License and to the absence of any -warranty; and distribute a copy of this License along with the -Library. - - You may charge a fee for the physical act of transferring a copy, -and you may at your option offer warranty protection in exchange for a -fee. - - 2. You may modify your copy or copies of the Library or any portion -of it, thus forming a work based on the Library, and copy and -distribute such modifications or work under the terms of Section 1 -above, provided that you also meet all of these conditions: - - a) The modified work must itself be a software library. - - b) You must cause the files modified to carry prominent notices - stating that you changed the files and the date of any change. - - c) You must cause the whole of the work to be licensed at no - charge to all third parties under the terms of this License. - - d) If a facility in the modified Library refers to a function or a - table of data to be supplied by an application program that uses - the facility, other than as an argument passed when the facility - is invoked, then you must make a good faith effort to ensure that, - in the event an application does not supply such function or - table, the facility still operates, and performs whatever part of - its purpose remains meaningful. - - (For example, a function in a library to compute square roots has - a purpose that is entirely well-defined independent of the - application. Therefore, Subsection 2d requires that any - application-supplied function or table used by this function must - be optional: if the application does not supply it, the square - root function must still compute square roots.) - -These requirements apply to the modified work as a whole. If -identifiable sections of that work are not derived from the Library, -and can be reasonably considered independent and separate works in -themselves, then this License, and its terms, do not apply to those -sections when you distribute them as separate works. But when you -distribute the same sections as part of a whole which is a work based -on the Library, the distribution of the whole must be on the terms of -this License, whose permissions for other licensees extend to the -entire whole, and thus to each and every part regardless of who wrote -it. - -Thus, it is not the intent of this section to claim rights or contest -your rights to work written entirely by you; rather, the intent is to -exercise the right to control the distribution of derivative or -collective works based on the Library. - -In addition, mere aggregation of another work not based on the Library -with the Library (or with a work based on the Library) on a volume of -a storage or distribution medium does not bring the other work under -the scope of this License. - - 3. You may opt to apply the terms of the ordinary GNU General Public -License instead of this License to a given copy of the Library. To do -this, you must alter all the notices that refer to this License, so -that they refer to the ordinary GNU General Public License, version 2, -instead of to this License. (If a newer version than version 2 of the -ordinary GNU General Public License has appeared, then you can specify -that version instead if you wish.) Do not make any other change in -these notices. - - Once this change is made in a given copy, it is irreversible for -that copy, so the ordinary GNU General Public License applies to all -subsequent copies and derivative works made from that copy. - - This option is useful when you wish to copy part of the code of -the Library into a program that is not a library. - - 4. You may copy and distribute the Library (or a portion or -derivative of it, under Section 2) in object code or executable form -under the terms of Sections 1 and 2 above provided that you accompany -it with the complete corresponding machine-readable source code, which -must be distributed under the terms of Sections 1 and 2 above on a -medium customarily used for software interchange. - - If distribution of object code is made by offering access to copy -from a designated place, then offering equivalent access to copy the -source code from the same place satisfies the requirement to -distribute the source code, even though third parties are not -compelled to copy the source along with the object code. - - 5. A program that contains no derivative of any portion of the -Library, but is designed to work with the Library by being compiled or -linked with it, is called a "work that uses the Library". Such a -work, in isolation, is not a derivative work of the Library, and -therefore falls outside the scope of this License. - - However, linking a "work that uses the Library" with the Library -creates an executable that is a derivative of the Library (because it -contains portions of the Library), rather than a "work that uses the -library". The executable is therefore covered by this License. -Section 6 states terms for distribution of such executables. - - When a "work that uses the Library" uses material from a header file -that is part of the Library, the object code for the work may be a -derivative work of the Library even though the source code is not. -Whether this is true is especially significant if the work can be -linked without the Library, or if the work is itself a library. The -threshold for this to be true is not precisely defined by law. - - If such an object file uses only numerical parameters, data -structure layouts and accessors, and small macros and small inline -functions (ten lines or less in length), then the use of the object -file is unrestricted, regardless of whether it is legally a derivative -work. (Executables containing this object code plus portions of the -Library will still fall under Section 6.) - - Otherwise, if the work is a derivative of the Library, you may -distribute the object code for the work under the terms of Section 6. -Any executables containing that work also fall under Section 6, -whether or not they are linked directly with the Library itself. - - 6. As an exception to the Sections above, you may also combine or -link a "work that uses the Library" with the Library to produce a -work containing portions of the Library, and distribute that work -under terms of your choice, provided that the terms permit -modification of the work for the customer's own use and reverse -engineering for debugging such modifications. - - You must give prominent notice with each copy of the work that the -Library is used in it and that the Library and its use are covered by -this License. You must supply a copy of this License. If the work -during execution displays copyright notices, you must include the -copyright notice for the Library among them, as well as a reference -directing the user to the copy of this License. Also, you must do one -of these things: - - a) Accompany the work with the complete corresponding - machine-readable source code for the Library including whatever - changes were used in the work (which must be distributed under - Sections 1 and 2 above); and, if the work is an executable linked - with the Library, with the complete machine-readable "work that - uses the Library", as object code and/or source code, so that the - user can modify the Library and then relink to produce a modified - executable containing the modified Library. (It is understood - that the user who changes the contents of definitions files in the - Library will not necessarily be able to recompile the application - to use the modified definitions.) - - b) Use a suitable shared library mechanism for linking with the - Library. A suitable mechanism is one that (1) uses at run time a - copy of the library already present on the user's computer system, - rather than copying library functions into the executable, and (2) - will operate properly with a modified version of the library, if - the user installs one, as long as the modified version is - interface-compatible with the version that the work was made with. - - c) Accompany the work with a written offer, valid for at least - three years, to give the same user the materials specified in - Subsection 6a, above, for a charge no more than the cost of - performing this distribution. - - d) If distribution of the work is made by offering access to copy - from a designated place, offer equivalent access to copy the above - specified materials from the same place. - - e) Verify that the user has already received a copy of these - materials or that you have already sent this user a copy. - - For an executable, the required form of the "work that uses the -Library" must include any data and utility programs needed for -reproducing the executable from it. However, as a special exception, -the materials to be distributed need not include anything that is -normally distributed (in either source or binary form) with the major -components (compiler, kernel, and so on) of the operating system on -which the executable runs, unless that component itself accompanies -the executable. - - It may happen that this requirement contradicts the license -restrictions of other proprietary libraries that do not normally -accompany the operating system. Such a contradiction means you cannot -use both them and the Library together in an executable that you -distribute. - - 7. You may place library facilities that are a work based on the -Library side-by-side in a single library together with other library -facilities not covered by this License, and distribute such a combined -library, provided that the separate distribution of the work based on -the Library and of the other library facilities is otherwise -permitted, and provided that you do these two things: - - a) Accompany the combined library with a copy of the same work - based on the Library, uncombined with any other library - facilities. This must be distributed under the terms of the - Sections above. - - b) Give prominent notice with the combined library of the fact - that part of it is a work based on the Library, and explaining - where to find the accompanying uncombined form of the same work. - - 8. You may not copy, modify, sublicense, link with, or distribute -the Library except as expressly provided under this License. Any -attempt otherwise to copy, modify, sublicense, link with, or -distribute the Library is void, and will automatically terminate your -rights under this License. However, parties who have received copies, -or rights, from you under this License will not have their licenses -terminated so long as such parties remain in full compliance. - - 9. You are not required to accept this License, since you have not -signed it. However, nothing else grants you permission to modify or -distribute the Library or its derivative works. These actions are -prohibited by law if you do not accept this License. Therefore, by -modifying or distributing the Library (or any work based on the -Library), you indicate your acceptance of this License to do so, and -all its terms and conditions for copying, distributing or modifying -the Library or works based on it. - - 10. Each time you redistribute the Library (or any work based on the -Library), the recipient automatically receives a license from the -original licensor to copy, distribute, link with or modify the Library -subject to these terms and conditions. You may not impose any further -restrictions on the recipients' exercise of the rights granted herein. -You are not responsible for enforcing compliance by third parties with -this License. - - 11. If, as a consequence of a court judgment or allegation of patent -infringement or for any other reason (not limited to patent issues), -conditions are imposed on you (whether by court order, agreement or -otherwise) that contradict the conditions of this License, they do not -excuse you from the conditions of this License. If you cannot -distribute so as to satisfy simultaneously your obligations under this -License and any other pertinent obligations, then as a consequence you -may not distribute the Library at all. For example, if a patent -license would not permit royalty-free redistribution of the Library by -all those who receive copies directly or indirectly through you, then -the only way you could satisfy both it and this License would be to -refrain entirely from distribution of the Library. - -If any portion of this section is held invalid or unenforceable under -any particular circumstance, the balance of the section is intended to -apply, and the section as a whole is intended to apply in other -circumstances. - -It is not the purpose of this section to induce you to infringe any -patents or other property right claims or to contest validity of any -such claims; this section has the sole purpose of protecting the -integrity of the free software distribution system which is -implemented by public license practices. Many people have made -generous contributions to the wide range of software distributed -through that system in reliance on consistent application of that -system; it is up to the author/donor to decide if he or she is willing -to distribute software through any other system and a licensee cannot -impose that choice. - -This section is intended to make thoroughly clear what is believed to -be a consequence of the rest of this License. - - 12. If the distribution and/or use of the Library is restricted in -certain countries either by patents or by copyrighted interfaces, the -original copyright holder who places the Library under this License -may add an explicit geographical distribution limitation excluding those -countries, so that distribution is permitted only in or among -countries not thus excluded. In such case, this License incorporates -the limitation as if written in the body of this License. - - 13. The Free Software Foundation may publish revised and/or new -versions of the Lesser General Public License from time to time. -Such new versions will be similar in spirit to the present version, -but may differ in detail to address new problems or concerns. - -Each version is given a distinguishing version number. If the Library -specifies a version number of this License which applies to it and -"any later version", you have the option of following the terms and -conditions either of that version or of any later version published by -the Free Software Foundation. If the Library does not specify a -license version number, you may choose any version ever published by -the Free Software Foundation. - - 14. If you wish to incorporate parts of the Library into other free -programs whose distribution conditions are incompatible with these, -write to the author to ask for permission. For software which is -copyrighted by the Free Software Foundation, write to the Free -Software Foundation; we sometimes make exceptions for this. Our -decision will be guided by the two goals of preserving the free status -of all derivatives of our free software and of promoting the sharing -and reuse of software generally. - - NO WARRANTY - - 15. BECAUSE THE LIBRARY IS LICENSED FREE OF CHARGE, THERE IS NO -WARRANTY FOR THE LIBRARY, TO THE EXTENT PERMITTED BY APPLICABLE LAW. -EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR -OTHER PARTIES PROVIDE THE LIBRARY "AS IS" WITHOUT WARRANTY OF ANY -KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE -IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR -PURPOSE. THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE -LIBRARY IS WITH YOU. SHOULD THE LIBRARY PROVE DEFECTIVE, YOU ASSUME -THE COST OF ALL NECESSARY SERVICING, REPAIR OR CORRECTION. - - 16. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN -WRITING WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY -AND/OR REDISTRIBUTE THE LIBRARY AS PERMITTED ABOVE, BE LIABLE TO YOU -FOR DAMAGES, INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR -CONSEQUENTIAL DAMAGES ARISING OUT OF THE USE OR INABILITY TO USE THE -LIBRARY (INCLUDING BUT NOT LIMITED TO LOSS OF DATA OR DATA BEING -RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD PARTIES OR A -FAILURE OF THE LIBRARY TO OPERATE WITH ANY OTHER SOFTWARE), EVEN IF -SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH -DAMAGES. - - END OF TERMS AND CONDITIONS - - How to Apply These Terms to Your New Libraries - - If you develop a new library, and you want it to be of the greatest -possible use to the public, we recommend making it free software that -everyone can redistribute and change. You can do so by permitting -redistribution under these terms (or, alternatively, under the terms -of the ordinary General Public License). - - To apply these terms, attach the following notices to the library. -It is safest to attach them to the start of each source file to most -effectively convey the exclusion of warranty; and each file should -have at least the "copyright" line and a pointer to where the full -notice is found. - - - - Copyright (C) - - This library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - This library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with this library; if not, write to the Free Software - Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA - -Also add information on how to contact you by electronic and paper mail. - -You should also get your employer (if you work as a programmer) or -your school, if any, to sign a "copyright disclaimer" for the library, -if necessary. Here is a sample; alter the names: - - Yoyodyne, Inc., hereby disclaims all copyright interest in the - library `Frob' (a library for tweaking knobs) written by James - Random Hacker. - - , 1 April 1990 - Ty Coon, President of Vice - -That's all there is to it! - - diff --git a/Jobs_Collections/venv/Lib/python3.8/site-packages/astroid-2.4.2.dist-info/INSTALLER b/Jobs_Collections/venv/Lib/python3.8/site-packages/astroid-2.4.2.dist-info/INSTALLER deleted file mode 100644 index a1b589e..0000000 --- a/Jobs_Collections/venv/Lib/python3.8/site-packages/astroid-2.4.2.dist-info/INSTALLER +++ /dev/null @@ -1 +0,0 @@ -pip diff --git a/Jobs_Collections/venv/Lib/python3.8/site-packages/astroid-2.4.2.dist-info/METADATA b/Jobs_Collections/venv/Lib/python3.8/site-packages/astroid-2.4.2.dist-info/METADATA deleted file mode 100644 index 47dad94..0000000 --- a/Jobs_Collections/venv/Lib/python3.8/site-packages/astroid-2.4.2.dist-info/METADATA +++ /dev/null @@ -1,118 +0,0 @@ -Metadata-Version: 2.1 -Name: astroid -Version: 2.4.2 -Summary: An abstract syntax tree for Python with inference support. -Home-page: https://github.com/PyCQA/astroid -Author: Python Code Quality Authority -Author-email: code-quality@python.org -License: LGPL -Platform: UNKNOWN -Classifier: Topic :: Software Development :: Libraries :: Python Modules -Classifier: Topic :: Software Development :: Quality Assurance -Classifier: Programming Language :: Python -Classifier: Programming Language :: Python :: 3 -Classifier: Programming Language :: Python :: 3.5 -Classifier: Programming Language :: Python :: 3.6 -Classifier: Programming Language :: Python :: 3.7 -Classifier: Programming Language :: Python :: 3.8 -Classifier: Programming Language :: Python :: Implementation :: CPython -Classifier: Programming Language :: Python :: Implementation :: PyPy -Requires-Python: >=3.5 -Requires-Dist: lazy-object-proxy (==1.4.*) -Requires-Dist: six (~=1.12) -Requires-Dist: wrapt (~=1.11) -Requires-Dist: typed-ast (<1.5,>=1.4.0) ; implementation_name == "cpython" and python_version < "3.8" - -Astroid -======= - -.. image:: https://travis-ci.org/PyCQA/astroid.svg?branch=master - :target: https://travis-ci.org/PyCQA/astroid - -.. image:: https://ci.appveyor.com/api/projects/status/co3u42kunguhbh6l/branch/master?svg=true - :alt: AppVeyor Build Status - :target: https://ci.appveyor.com/project/PCManticore/astroid - -.. image:: https://coveralls.io/repos/github/PyCQA/astroid/badge.svg?branch=master - :target: https://coveralls.io/github/PyCQA/astroid?branch=master - -.. image:: https://readthedocs.org/projects/astroid/badge/?version=latest - :target: http://astroid.readthedocs.io/en/latest/?badge=latest - :alt: Documentation Status - -.. image:: https://img.shields.io/badge/code%20style-black-000000.svg - :target: https://github.com/ambv/black - -.. |tideliftlogo| image:: doc/media/Tidelift_Logos_RGB_Tidelift_Shorthand_On-White_small.png - :width: 75 - :height: 60 - :alt: Tidelift - -.. list-table:: - :widths: 10 100 - - * - |tideliftlogo| - - Professional support for astroid is available as part of the `Tidelift - Subscription`_. Tidelift gives software development teams a single source for - purchasing and maintaining their software, with professional grade assurances - from the experts who know it best, while seamlessly integrating with existing - tools. - -.. _Tidelift Subscription: https://tidelift.com/subscription/pkg/pypi-astroid?utm_source=pypi-astroid&utm_medium=referral&utm_campaign=readme - - - -What's this? ------------- - -The aim of this module is to provide a common base representation of -python source code. It is currently the library powering pylint's capabilities. - -It provides a compatible representation which comes from the `_ast` -module. It rebuilds the tree generated by the builtin _ast module by -recursively walking down the AST and building an extended ast. The new -node classes have additional methods and attributes for different -usages. They include some support for static inference and local name -scopes. Furthermore, astroid can also build partial trees by inspecting living -objects. - - -Installation ------------- - -Extract the tarball, jump into the created directory and run:: - - pip install . - - -If you want to do an editable installation, you can run:: - - pip install -e . - - -If you have any questions, please mail the code-quality@python.org -mailing list for support. See -http://mail.python.org/mailman/listinfo/code-quality for subscription -information and archives. - -Documentation -------------- -http://astroid.readthedocs.io/en/latest/ - - -Python Versions ---------------- - -astroid 2.0 is currently available for Python 3 only. If you want Python 2 -support, older versions of astroid will still supported until 2020. - -Test ----- - -Tests are in the 'test' subdirectory. To launch the whole tests suite, you can use -either `tox` or `pytest`:: - - tox - pytest astroid - - diff --git a/Jobs_Collections/venv/Lib/python3.8/site-packages/astroid-2.4.2.dist-info/RECORD b/Jobs_Collections/venv/Lib/python3.8/site-packages/astroid-2.4.2.dist-info/RECORD deleted file mode 100644 index feed06a..0000000 --- a/Jobs_Collections/venv/Lib/python3.8/site-packages/astroid-2.4.2.dist-info/RECORD +++ /dev/null @@ -1,151 +0,0 @@ -astroid-2.4.2.dist-info/COPYING,sha256=qxX9UmvY3Rip5368E5ZWv00z6X_HI4zRG_YOK5uGZsY,17987 -astroid-2.4.2.dist-info/COPYING.LESSER,sha256=qb3eVhbs3R6YC0TzYGAO6Hg7H5m4zIOivrFjoKOQ6GE,26527 -astroid-2.4.2.dist-info/INSTALLER,sha256=zuuue4knoyJ-UwPPXg8fezS7VCrXJQrAP7zeNuwvFQg,4 -astroid-2.4.2.dist-info/METADATA,sha256=mWlOM8vl6thD_vA7Lzn2yKmQuaX8NukwS72gEpsGM0U,3915 -astroid-2.4.2.dist-info/RECORD,, -astroid-2.4.2.dist-info/WHEEL,sha256=g4nMs7d-Xl9-xC9XovUrsDHGXt-FT0E17Yqo92DEfvY,92 -astroid-2.4.2.dist-info/top_level.txt,sha256=HsdW4O2x7ZXRj6k-agi3RaQybGLobI3VSE-jt4vQUXM,8 -astroid/__init__.py,sha256=zZF5EWBTfOtOcFd62WMbhLAtS2b_Fm-3JJW2AVUUMUI,5655 -astroid/__pkginfo__.py,sha256=G6QlkatrWucF445cQW7Kb2ZSgBzf7TiKLPwqkP0CoQU,2329 -astroid/__pycache__/__init__.cpython-38.pyc,, -astroid/__pycache__/__pkginfo__.cpython-38.pyc,, -astroid/__pycache__/_ast.cpython-38.pyc,, -astroid/__pycache__/arguments.cpython-38.pyc,, -astroid/__pycache__/as_string.cpython-38.pyc,, -astroid/__pycache__/bases.cpython-38.pyc,, -astroid/__pycache__/builder.cpython-38.pyc,, -astroid/__pycache__/context.cpython-38.pyc,, -astroid/__pycache__/decorators.cpython-38.pyc,, -astroid/__pycache__/exceptions.cpython-38.pyc,, -astroid/__pycache__/helpers.cpython-38.pyc,, -astroid/__pycache__/inference.cpython-38.pyc,, -astroid/__pycache__/manager.cpython-38.pyc,, -astroid/__pycache__/mixins.cpython-38.pyc,, -astroid/__pycache__/modutils.cpython-38.pyc,, -astroid/__pycache__/node_classes.cpython-38.pyc,, -astroid/__pycache__/nodes.cpython-38.pyc,, -astroid/__pycache__/objects.cpython-38.pyc,, -astroid/__pycache__/protocols.cpython-38.pyc,, -astroid/__pycache__/raw_building.cpython-38.pyc,, -astroid/__pycache__/rebuilder.cpython-38.pyc,, -astroid/__pycache__/scoped_nodes.cpython-38.pyc,, -astroid/__pycache__/test_utils.cpython-38.pyc,, -astroid/__pycache__/transforms.cpython-38.pyc,, -astroid/__pycache__/util.cpython-38.pyc,, -astroid/_ast.py,sha256=n1U2HblBNrMhsmrjF84HUfIgEZ3PyHyiJJOrOkgiUFk,3385 -astroid/arguments.py,sha256=KJcZn7HeEhj2fZICr-9Pi7iueCNDZRQWh0T7O-qb-AE,12558 -astroid/as_string.py,sha256=8bOZWsGG79TLmlzRzPtmHdanIAqQUFTKiYH873iMhOw,22821 -astroid/bases.py,sha256=wL9C23mHFaj7vhMqM83DdsU6kfP488aEjoFWaO8p6Cg,19175 -astroid/brain/__pycache__/brain_argparse.cpython-38.pyc,, -astroid/brain/__pycache__/brain_attrs.cpython-38.pyc,, -astroid/brain/__pycache__/brain_boto3.cpython-38.pyc,, -astroid/brain/__pycache__/brain_builtin_inference.cpython-38.pyc,, -astroid/brain/__pycache__/brain_collections.cpython-38.pyc,, -astroid/brain/__pycache__/brain_crypt.cpython-38.pyc,, -astroid/brain/__pycache__/brain_curses.cpython-38.pyc,, -astroid/brain/__pycache__/brain_dataclasses.cpython-38.pyc,, -astroid/brain/__pycache__/brain_dateutil.cpython-38.pyc,, -astroid/brain/__pycache__/brain_fstrings.cpython-38.pyc,, -astroid/brain/__pycache__/brain_functools.cpython-38.pyc,, -astroid/brain/__pycache__/brain_gi.cpython-38.pyc,, -astroid/brain/__pycache__/brain_hashlib.cpython-38.pyc,, -astroid/brain/__pycache__/brain_http.cpython-38.pyc,, -astroid/brain/__pycache__/brain_io.cpython-38.pyc,, -astroid/brain/__pycache__/brain_mechanize.cpython-38.pyc,, -astroid/brain/__pycache__/brain_multiprocessing.cpython-38.pyc,, -astroid/brain/__pycache__/brain_namedtuple_enum.cpython-38.pyc,, -astroid/brain/__pycache__/brain_nose.cpython-38.pyc,, -astroid/brain/__pycache__/brain_numpy_core_fromnumeric.cpython-38.pyc,, -astroid/brain/__pycache__/brain_numpy_core_function_base.cpython-38.pyc,, -astroid/brain/__pycache__/brain_numpy_core_multiarray.cpython-38.pyc,, -astroid/brain/__pycache__/brain_numpy_core_numeric.cpython-38.pyc,, -astroid/brain/__pycache__/brain_numpy_core_numerictypes.cpython-38.pyc,, -astroid/brain/__pycache__/brain_numpy_core_umath.cpython-38.pyc,, -astroid/brain/__pycache__/brain_numpy_ndarray.cpython-38.pyc,, -astroid/brain/__pycache__/brain_numpy_random_mtrand.cpython-38.pyc,, -astroid/brain/__pycache__/brain_numpy_utils.cpython-38.pyc,, -astroid/brain/__pycache__/brain_pkg_resources.cpython-38.pyc,, -astroid/brain/__pycache__/brain_pytest.cpython-38.pyc,, -astroid/brain/__pycache__/brain_qt.cpython-38.pyc,, -astroid/brain/__pycache__/brain_random.cpython-38.pyc,, -astroid/brain/__pycache__/brain_re.cpython-38.pyc,, -astroid/brain/__pycache__/brain_responses.cpython-38.pyc,, -astroid/brain/__pycache__/brain_scipy_signal.cpython-38.pyc,, -astroid/brain/__pycache__/brain_six.cpython-38.pyc,, -astroid/brain/__pycache__/brain_ssl.cpython-38.pyc,, -astroid/brain/__pycache__/brain_subprocess.cpython-38.pyc,, -astroid/brain/__pycache__/brain_threading.cpython-38.pyc,, -astroid/brain/__pycache__/brain_typing.cpython-38.pyc,, -astroid/brain/__pycache__/brain_uuid.cpython-38.pyc,, -astroid/brain/brain_argparse.py,sha256=5XqcThekktCIWRlWAMs-R47wkbsOUSnQlsEbLEnRpsY,1041 -astroid/brain/brain_attrs.py,sha256=k8zJqIXsIbQrncthrzyB5NtdPTktgVi9wG7nyl8xMzs,2208 -astroid/brain/brain_boto3.py,sha256=nE8Cw_S_Gp___IszRDRkhEGS6WGrKcF_gTOs3GVxH9k,862 -astroid/brain/brain_builtin_inference.py,sha256=F6_09yM2mmu_u3ad_f9Uumc-q0lDA2CY8v9-PYtUMmA,28793 -astroid/brain/brain_collections.py,sha256=Uqi4VmpLDl0ndQa9x-5tIXRtVdtI6TlwR9KNHmOqLyw,2724 -astroid/brain/brain_crypt.py,sha256=gA7Q4GVuAM4viuTGWM6SNTPQXv5Gr_mFapyKMTRcsJ0,875 -astroid/brain/brain_curses.py,sha256=tDnlCP1bEvleqCMz856yua9mM5um1p_JendFhT4rBFk,3303 -astroid/brain/brain_dataclasses.py,sha256=5WndOYSY0oi2v-Od6KdPte-FKt00LoNRH2riSB4S1os,1647 -astroid/brain/brain_dateutil.py,sha256=GwDrgbaUkKbp3ImLAvuUtPuDBeK3lPh0bNI_Wphm2_8,801 -astroid/brain/brain_fstrings.py,sha256=Jaf-G-wkLecwG4jfjjfR8MDKzgAjjn2mgrrWZQLOAd8,2126 -astroid/brain/brain_functools.py,sha256=Nljy7o2vu16S2amFot4wdTI0U76Yafq-ujVPHOdGgCE,5481 -astroid/brain/brain_gi.py,sha256=oraXhBWyCCxmPEAEvRboeTIho0--ORObvckni00_1wY,7554 -astroid/brain/brain_hashlib.py,sha256=W2cS6-rixdBcre6lPWIuSOqPLCcVji5JBlImdPbV6Qo,2292 -astroid/brain/brain_http.py,sha256=a_8eIACvZetnR2xI4ZARVMuB1WSjyyqM3rCl2DVltMo,10524 -astroid/brain/brain_io.py,sha256=wEY3vvTeV23tYxFn8HHQeyjhb7-jqzwgwNI-kl2Yu-c,1476 -astroid/brain/brain_mechanize.py,sha256=boZxoCxPGSpHC_RccO5U026hyXyhunXR55M9WM1lYTo,895 -astroid/brain/brain_multiprocessing.py,sha256=9OswtRuVBj-KemJ0yp4prz8mrkJDzOzN6n13u2MgmwM,3096 -astroid/brain/brain_namedtuple_enum.py,sha256=eZ8IaHPLLHBakywJ3q4Ogtd2Tk0gtNcAgYAloMAKTjM,15966 -astroid/brain/brain_nose.py,sha256=PSPmme611h7fC8MKuVXbiGw0HZhdmIuoxM6yieZ1OOc,2217 -astroid/brain/brain_numpy_core_fromnumeric.py,sha256=NxiHbcMyQQ3Gpx4KEA5eAmGrpjlPN5rfXjRLjHPOVkw,621 -astroid/brain/brain_numpy_core_function_base.py,sha256=7i6Kge_PviqoWXhbeRgB581xwLo0dxvO54_5UB3ppig,1168 -astroid/brain/brain_numpy_core_multiarray.py,sha256=vr-nBt3EF_z-UmHmcAlJhGorgDXPpQaYX8g4TWu_2Vw,4015 -astroid/brain/brain_numpy_core_numeric.py,sha256=M0RXOym2YC-DaZfRqGNIpr6s-Oh1KHn1okGr3PtPl0k,1384 -astroid/brain/brain_numpy_core_numerictypes.py,sha256=ltlZyQprEbVdUJpC_ERGyXyJsYwzFHx7zGYDLheIonA,8013 -astroid/brain/brain_numpy_core_umath.py,sha256=je6K3ILMen2mgkZseHCOjOgnFV6SaNgAihEi6irhbRk,4436 -astroid/brain/brain_numpy_ndarray.py,sha256=WZbRG7GgOWZ68sEr4JjZUnJHLfUc91xp2mucHeLMrnw,8463 -astroid/brain/brain_numpy_random_mtrand.py,sha256=WRy_CStllgZN2B3Dw2qxXbY4SBrCzu-cdaK230VQHaE,3278 -astroid/brain/brain_numpy_utils.py,sha256=ZYtCVmn1x6P7iwYFohdW3CCrvVT5BCNYe-7jKcz_25s,1875 -astroid/brain/brain_pkg_resources.py,sha256=S_5UED1Zg8ObEJumRdpYGnjxZzemh_G_NFj3p5NGPfc,2262 -astroid/brain/brain_pytest.py,sha256=RYp7StKnC22n4vFJkHH5h7DAFWtouIcg-ZCXQ8Oz3xk,2390 -astroid/brain/brain_qt.py,sha256=m2s4YXFrnOynWDf9omHOBLVqFriBdGJAmvarJCxiffM,2536 -astroid/brain/brain_random.py,sha256=2RZY-QEXMNWp7E6h0l0-ke-DtjKTOFlTdjiQZi3XdQc,2432 -astroid/brain/brain_re.py,sha256=le7VJHUAf80HyE_aQCh7_8FyDVK6JwNWA--c9RaMVQ8,1128 -astroid/brain/brain_responses.py,sha256=GIAGkwMEGEZ9bJHI9uBGs_UmUy3DRBtjI_j_8dLBVsc,1534 -astroid/brain/brain_scipy_signal.py,sha256=IKNnGXzEH5FKhPHM2hv57pNdo1emThWwZ0ksckdsOeE,2255 -astroid/brain/brain_six.py,sha256=79aws4au6ZQJuf-YhBT4R-9wuVOwg-u0T42aUhCswK0,6187 -astroid/brain/brain_ssl.py,sha256=9dMCTQ0JsX2gpdmBkYO7BByw3zN23oXRL8Svo2S1V28,3722 -astroid/brain/brain_subprocess.py,sha256=yp-HsE69uh7T7C1kZYciAdRMQ48aNT51lI032oDppDk,4688 -astroid/brain/brain_threading.py,sha256=dY8YwZ-zrB30_CQFYWh4AK3qUVssakgwLVwunQ6yYkU,837 -astroid/brain/brain_typing.py,sha256=iFw33beNCitCJjJNvccIY6SsFJcdKVDdl-56DxDioh0,2780 -astroid/brain/brain_uuid.py,sha256=YzfiOXavu515cS1prsKGfY4-12g_KWT0Yr4-5ti0v74,569 -astroid/builder.py,sha256=72JlHrXRF9sS5zh1mqXlRHGFg88Efc2rm9yRJKDIShA,16891 -astroid/context.py,sha256=MpwiEzWZ39a4WyqYgbSmePL2nZLqALt1gjrvi3TP35U,5169 -astroid/decorators.py,sha256=z_wTjsiMlu_ElHtYUUuxaB2F_s4G0Ks7bmtCZS3IQ_Q,4283 -astroid/exceptions.py,sha256=GLiZo9BdWILJShO-il8ra-tPZqaODMAX987F--LWv2w,6891 -astroid/helpers.py,sha256=3YoJeVLoS-66T_abDorUNHiP8m2R7-faNnpc5yPJhrc,9448 -astroid/inference.py,sha256=UiKKPRYqb5JINQIw1lSdBniHhXjCohCGAqycp2GkVI4,34686 -astroid/interpreter/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0 -astroid/interpreter/__pycache__/__init__.cpython-38.pyc,, -astroid/interpreter/__pycache__/dunder_lookup.cpython-38.pyc,, -astroid/interpreter/__pycache__/objectmodel.cpython-38.pyc,, -astroid/interpreter/_import/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0 -astroid/interpreter/_import/__pycache__/__init__.cpython-38.pyc,, -astroid/interpreter/_import/__pycache__/spec.cpython-38.pyc,, -astroid/interpreter/_import/__pycache__/util.cpython-38.pyc,, -astroid/interpreter/_import/spec.py,sha256=rZ9kX3I0xPo_pFAYWeOk2Xbi4ZIg_5bRsouZgxOXegA,11436 -astroid/interpreter/_import/util.py,sha256=inubUz6F3_kaMFaeleKUW6E6wCMIPrhU882zvwEZ02I,255 -astroid/interpreter/dunder_lookup.py,sha256=dP-AZU_aGPNt03b1ttrMglxzeU3NtgnG0MfpSLPH6sg,2155 -astroid/interpreter/objectmodel.py,sha256=bbPIaamrqrx7WHtG5YNs9dbrlDC00GrJPxPGoSTsnqg,25792 -astroid/manager.py,sha256=jmEm9uH00mPA2Y68s10xrPNbZaadv_2c-CWluB3SYoE,13701 -astroid/mixins.py,sha256=F2rv2Ow7AU3YT_2jitVJik95ZWRVK6hpf8BrkkspzUY,5571 -astroid/modutils.py,sha256=GBW5Z691eqf6VAnPsZzeQ0WYzrl-0GGTHkkZNb_9XRQ,23242 -astroid/node_classes.py,sha256=cBRkZ_u8ZoRkiXznYWq1L3I7cO-P9nGowNCy8T7Qpzk,142740 -astroid/nodes.py,sha256=WoyRe22GNVRc2TRHWOUlqdxCdOVD8GKOq9v1LpPhkr8,2978 -astroid/objects.py,sha256=caKeQPBtrrfqa1q844vkehXwpdMzvph5YJdJJdbD_m8,11035 -astroid/protocols.py,sha256=m1ZHvKvFQZSZp993na4f9s8V17kqNPRfH-XpQc8gJ7c,27396 -astroid/raw_building.py,sha256=PI70y2mPQ7JURDVyNZ6deeBFkvjNNaOQBkuo0VPbvQ4,17340 -astroid/rebuilder.py,sha256=xn82eWlxzGcDd2VACUnNNWCxArfV9HI8g67fUip0XFk,39411 -astroid/scoped_nodes.py,sha256=fUrmTyltaLCr9-i8RdC2e5dPA9O8w946Mvvft8mgXdM,98203 -astroid/test_utils.py,sha256=axGB3j6ZEaVspL1ZgPizKgWehNEREb58Z97U7mQ-GA8,2319 -astroid/transforms.py,sha256=1npwJWcQUSIjcpcWd1pc-dJhtHOyiboQHsETAIQd5co,3377 -astroid/util.py,sha256=jg5LnqbWSZTZP1KgpxGBuC6Lfwhn9Jb2T2TohXghmC0,4785 diff --git a/Jobs_Collections/venv/Lib/python3.8/site-packages/astroid-2.4.2.dist-info/WHEEL b/Jobs_Collections/venv/Lib/python3.8/site-packages/astroid-2.4.2.dist-info/WHEEL deleted file mode 100644 index b552003..0000000 --- a/Jobs_Collections/venv/Lib/python3.8/site-packages/astroid-2.4.2.dist-info/WHEEL +++ /dev/null @@ -1,5 +0,0 @@ -Wheel-Version: 1.0 -Generator: bdist_wheel (0.34.2) -Root-Is-Purelib: true -Tag: py3-none-any - diff --git a/Jobs_Collections/venv/Lib/python3.8/site-packages/astroid-2.4.2.dist-info/top_level.txt b/Jobs_Collections/venv/Lib/python3.8/site-packages/astroid-2.4.2.dist-info/top_level.txt deleted file mode 100644 index 450d4fe..0000000 --- a/Jobs_Collections/venv/Lib/python3.8/site-packages/astroid-2.4.2.dist-info/top_level.txt +++ /dev/null @@ -1 +0,0 @@ -astroid diff --git a/Jobs_Collections/venv/Lib/python3.8/site-packages/astroid/__init__.py b/Jobs_Collections/venv/Lib/python3.8/site-packages/astroid/__init__.py deleted file mode 100644 index e869274..0000000 --- a/Jobs_Collections/venv/Lib/python3.8/site-packages/astroid/__init__.py +++ /dev/null @@ -1,168 +0,0 @@ -# Copyright (c) 2006-2013, 2015 LOGILAB S.A. (Paris, FRANCE) -# Copyright (c) 2014 Google, Inc. -# Copyright (c) 2014 Eevee (Alex Munroe) -# Copyright (c) 2015-2016, 2018 Claudiu Popa -# Copyright (c) 2015-2016 Ceridwen -# Copyright (c) 2016 Derek Gustafson -# Copyright (c) 2016 Moises Lopez -# Copyright (c) 2018 Bryce Guinta -# Copyright (c) 2019 Nick Drozd - -# Licensed under the LGPL: https://www.gnu.org/licenses/old-licenses/lgpl-2.1.en.html -# For details: https://github.com/PyCQA/astroid/blob/master/COPYING.LESSER - -"""Python Abstract Syntax Tree New Generation - -The aim of this module is to provide a common base representation of -python source code for projects such as pychecker, pyreverse, -pylint... Well, actually the development of this library is essentially -governed by pylint's needs. - -It extends class defined in the python's _ast module with some -additional methods and attributes. Instance attributes are added by a -builder object, which can either generate extended ast (let's call -them astroid ;) by visiting an existent ast tree or by inspecting living -object. Methods are added by monkey patching ast classes. - -Main modules are: - -* nodes and scoped_nodes for more information about methods and - attributes added to different node classes - -* the manager contains a high level object to get astroid trees from - source files and living objects. It maintains a cache of previously - constructed tree for quick access - -* builder contains the class responsible to build astroid trees -""" - -import enum -import itertools -import os -import sys - -import wrapt - - -_Context = enum.Enum("Context", "Load Store Del") -Load = _Context.Load -Store = _Context.Store -Del = _Context.Del -del _Context - - -# pylint: disable=wrong-import-order,wrong-import-position -from .__pkginfo__ import version as __version__ - -# WARNING: internal imports order matters ! - -# pylint: disable=redefined-builtin - -# make all exception classes accessible from astroid package -from astroid.exceptions import * - -# make all node classes accessible from astroid package -from astroid.nodes import * - -# trigger extra monkey-patching -from astroid import inference - -# more stuff available -from astroid import raw_building -from astroid.bases import BaseInstance, Instance, BoundMethod, UnboundMethod -from astroid.node_classes import are_exclusive, unpack_infer -from astroid.scoped_nodes import builtin_lookup -from astroid.builder import parse, extract_node -from astroid.util import Uninferable - -# make a manager instance (borg) accessible from astroid package -from astroid.manager import AstroidManager - -MANAGER = AstroidManager() -del AstroidManager - -# transform utilities (filters and decorator) - - -# pylint: disable=dangerous-default-value -@wrapt.decorator -def _inference_tip_cached(func, instance, args, kwargs, _cache={}): - """Cache decorator used for inference tips""" - node = args[0] - try: - return iter(_cache[func, node]) - except KeyError: - result = func(*args, **kwargs) - # Need to keep an iterator around - original, copy = itertools.tee(result) - _cache[func, node] = list(copy) - return original - - -# pylint: enable=dangerous-default-value - - -def inference_tip(infer_function, raise_on_overwrite=False): - """Given an instance specific inference function, return a function to be - given to MANAGER.register_transform to set this inference function. - - :param bool raise_on_overwrite: Raise an `InferenceOverwriteError` - if the inference tip will overwrite another. Used for debugging - - Typical usage - - .. sourcecode:: python - - MANAGER.register_transform(Call, inference_tip(infer_named_tuple), - predicate) - - .. Note:: - - Using an inference tip will override - any previously set inference tip for the given - node. Use a predicate in the transform to prevent - excess overwrites. - """ - - def transform(node, infer_function=infer_function): - if ( - raise_on_overwrite - and node._explicit_inference is not None - and node._explicit_inference is not infer_function - ): - raise InferenceOverwriteError( - "Inference already set to {existing_inference}. " - "Trying to overwrite with {new_inference} for {node}".format( - existing_inference=infer_function, - new_inference=node._explicit_inference, - node=node, - ) - ) - # pylint: disable=no-value-for-parameter - node._explicit_inference = _inference_tip_cached(infer_function) - return node - - return transform - - -def register_module_extender(manager, module_name, get_extension_mod): - def transform(node): - extension_module = get_extension_mod() - for name, objs in extension_module.locals.items(): - node.locals[name] = objs - for obj in objs: - if obj.parent is extension_module: - obj.parent = node - - manager.register_transform(Module, transform, lambda n: n.name == module_name) - - -# load brain plugins -BRAIN_MODULES_DIR = os.path.join(os.path.dirname(__file__), "brain") -if BRAIN_MODULES_DIR not in sys.path: - # add it to the end of the list so user path take precedence - sys.path.append(BRAIN_MODULES_DIR) -# load modules in this directory -for module in os.listdir(BRAIN_MODULES_DIR): - if module.endswith(".py"): - __import__(module[:-3]) diff --git a/Jobs_Collections/venv/Lib/python3.8/site-packages/astroid/__pkginfo__.py b/Jobs_Collections/venv/Lib/python3.8/site-packages/astroid/__pkginfo__.py deleted file mode 100644 index fd8e132..0000000 --- a/Jobs_Collections/venv/Lib/python3.8/site-packages/astroid/__pkginfo__.py +++ /dev/null @@ -1,56 +0,0 @@ -# -*- coding: utf-8 -*- -# Copyright (c) 2006-2014 LOGILAB S.A. (Paris, FRANCE) -# Copyright (c) 2014-2019 Claudiu Popa -# Copyright (c) 2014 Google, Inc. -# Copyright (c) 2015-2017 Ceridwen -# Copyright (c) 2015 Florian Bruhin -# Copyright (c) 2015 Radosล‚aw Ganczarek -# Copyright (c) 2016 Moises Lopez -# Copyright (c) 2017 Hugo -# Copyright (c) 2017 ลukasz Rogalski -# Copyright (c) 2017 Calen Pennington -# Copyright (c) 2018 Ville Skyttรค -# Copyright (c) 2018 Ashley Whetter -# Copyright (c) 2018 Bryce Guinta -# Copyright (c) 2019 Uilian Ries -# Copyright (c) 2019 Thomas Hisch -# Copyright (c) 2020 Michael - -# Licensed under the LGPL: https://www.gnu.org/licenses/old-licenses/lgpl-2.1.en.html -# For details: https://github.com/PyCQA/astroid/blob/master/COPYING.LESSER - -"""astroid packaging information""" - -version = "2.4.2" -numversion = tuple(int(elem) for elem in version.split(".") if elem.isdigit()) - -extras_require = {} -install_requires = [ - "lazy_object_proxy==1.4.*", - "six~=1.12", - "wrapt~=1.11", - 'typed-ast>=1.4.0,<1.5;implementation_name== "cpython" and python_version<"3.8"', -] - -# pylint: disable=redefined-builtin; why license is a builtin anyway? -license = "LGPL" - -author = "Python Code Quality Authority" -author_email = "code-quality@python.org" -mailinglist = "mailto://%s" % author_email -web = "https://github.com/PyCQA/astroid" - -description = "An abstract syntax tree for Python with inference support." - -classifiers = [ - "Topic :: Software Development :: Libraries :: Python Modules", - "Topic :: Software Development :: Quality Assurance", - "Programming Language :: Python", - "Programming Language :: Python :: 3", - "Programming Language :: Python :: 3.5", - "Programming Language :: Python :: 3.6", - "Programming Language :: Python :: 3.7", - "Programming Language :: Python :: 3.8", - "Programming Language :: Python :: Implementation :: CPython", - "Programming Language :: Python :: Implementation :: PyPy", -] diff --git a/Jobs_Collections/venv/Lib/python3.8/site-packages/astroid/__pycache__/__init__.cpython-38.pyc b/Jobs_Collections/venv/Lib/python3.8/site-packages/astroid/__pycache__/__init__.cpython-38.pyc deleted file mode 100644 index d0942552c8c2e1c829cdfb220f7f4485342d360c..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 4486 zcmai1TW{RP73PrKU5Z-CvV6~VVmG$ekynm$Y3mw6d`n<7RtjH`lxfRw$=O{>ysU>@ z$*ZhTpmveGqzKUVv4HgGpVL>q_Mymg--@R0cZN&KYEpC;oEgr{IdkTm?_Bs`VZqk$ zJALi%zd3PS)BZ*;&;J^Dc^^+UWSSOejux;$kC?+$uRFTx4aZQu>6of-I1Ryen}HFS zd%DvSt#!+>(9St?Xl=*-tQ9nZW;7qSodrfbThZeEvOlDHD_V*VJBQWU9LCGevKrgb zk@%={G(P4Wi;p|U;}gyaH9sGnj88eI;uoA3)O$O6F@DK;NsSkxm*ZEQSK?QlSJnGs z#N*eT*VOn>bUHrcoMD8wtasnxEIDe?elyXW;{-VaU?iKdCEsJ-3$Y4;C>p%VA=CB z!KD~UkqPi57NE38<$+l`mcGDVkn~eYmV-)tJCnqGN$ViZow%dag3=Gyk z1O&7THeM2NFVAJz8|NbH^4m$4dkOBpKgm6b*B~fm^6cI?i~=Ef+9SQJ@U3A8#rR&r z1x~`kptOvb$qG7>=6odRDn4#$V_QsfD8IoGDnw05lAoLY}rMSE47wwl^6LH((wqNuTb?uIgTAp8`8680Qtur3+4Rw>WJQ6@?A zYn?`6hPjZ1^>Z<~C1on1dc5ap8fAr%3sIO6{IWAwnEi3$7Z%W}Vntzka*!3xjjghG z6~qdY;9fL=jB%6~Rw~0mh|p7*@T|#GO}>Ux{~4~1WVq?&Vs+D#tNoNBOSbyXa5awo ze*DuxaQVkQ_wu8WJCyIdoo(fBU&3#YtlnQ8g`DWu4j&}fFmbhgYEnXNCfB__{c?gL+^rPGArrVN<%G-Wi(f$nvE%4lth(DJqMnEj6B#uVk@RC6&$m|xrO)tKR4 zB!w4DN<^mo3zg5Iuzd&I>7tOEkPZRdeZ;6z<%>jYJ-1T@tS?9zI~~JW{yr~f;Q)br z8JFpp&JjfTQ55=c|61G5iCV~mz%H8PMP9C)zN0H1#iF8fD<^u&iskQnjS6G(G|nvM zYNPy?l==!9P1m34y7h0}u)fn9Ix}@VO#hep%$&2?_C9(-1E_l_Z7 z2P=7wn)B39=#*!vQ3o&77bG?z<}(UY+VQ1j*+K79z^Z<<(!!&H81bkBn6+a}wO!<% zsqrO4P{a4j6Kl`Fmjao%vF1~rsD6~(h?T<6bqv1J9&0;n%GR}Awx^-oUqPDE!4gb? z932VD!0gc-b7~TvHY|A-sm*lthi4xy(GgGCTE{4wr4ot;LQ;&Zf|vztcN)qj&XTHs zsXlPa+6`$2?p>Iu1d*lCA`u@(u>|X*gse91TS+PK&yY83qtRFsA>U>ep6xg4xLUF< zSs)?(fME{kg7iZEq;x@Flyu{-v<+kfc>%8-CcCOD7?m~iGxj9-zF>uQHS*$K;Jx=3 z?EMEGZTrIim#8A@=+1JzyT(t^yrVvaP%5=%m8N_PoaLL;)K~)I)r4A7kUClO`Y&Dl z34|rOSlg06!JE^-hfJ7k8%VO>e)sIzvkv>9^H$Mv-5~W{w=hLAj^#1zEc6sM$|jl9 z*pl8TFU(t5ax8aN5*8+vgib@%gpPrt(3yAL(FQU`KXqM6cq=e7s}Nn+S)L{QE`_`i zrP9n_vY=pMbjIN@a}5!l|+W5 zVw>o8$^MY`xPM949rhpWFzm1=+3C8=8uST#e0(1y-{bG;yS2480_vXp@#9ttq2J5J z+f-T~!%!1o1OtdLgFAnl+@ zIzfx9($)qF+GH*0ko91dd_ZoI56MU5WAX|4lx&dOWHW9DYh>#g+WySk!AeWch%0dP z0>>GxeUg@AV=JE_F>d2sIcH40RXSOZ3CW&(=%p6?%=NtwFl7zDE|i zunB@Qtn+QVXfQ=s%ydy>nTECP?G_GAX!;wHb=c#t#21oXVom)^Ed4Q02$jn3Py95E z#_3lv={+2Uy_pCnvcIpUdVd!v&iv=TU}A@5O5-Hid64YNelN}aWma$IFcdE!xiJqz zPt1$fAf_3e33E z*E5}|#6nk#J#((-f|4CL`MC1j{c^D9^&hcRK$Rw|A-L3@89e8LMegCD`;3qE6iezpp_eq_qD;HgpRtj|l2KJImb-n+ zNuE$;dhd*WleJR0#Bj8^JCr<@I895qp5ZLcaZLZ++kF22_R{mdxpxC6uYWVQ2RCzj zcr&*H^XT1o`{qBmDpNXLRMs54Pw;R)oS$#67mY9^JPO02u|#80*Et}#s4D^33))$p zE-k@2odIA}DCtGcBn@sY+wfYUibldBnkibW;0m(E>S7LQ3D2McDZF9Aln!cBIx0GZ zsz@?X{(Oo~lwhUUm_c7ue~GtP*|J4*kX9%<-YC1cS9Y=OSev$E+gA1c?KDe`V>K<9 MYfJ6Iw%~vM1BREnp#T5? diff --git a/Jobs_Collections/venv/Lib/python3.8/site-packages/astroid/__pycache__/_ast.cpython-38.pyc b/Jobs_Collections/venv/Lib/python3.8/site-packages/astroid/__pycache__/_ast.cpython-38.pyc deleted file mode 100644 index 22b05761a866a2c534b49ef2f1d5f6906dd7a247..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 3114 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 diff --git a/Jobs_Collections/venv/Lib/python3.8/site-packages/astroid/__pycache__/as_string.cpython-38.pyc b/Jobs_Collections/venv/Lib/python3.8/site-packages/astroid/__pycache__/as_string.cpython-38.pyc deleted file mode 100644 index 408917c618f954cc16987a2c0850359ec52ae5b6..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 26104 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%0Da}lNpo3UguGk|tgtMiT{M#{@-lyp z!H~&nSe7A$O+g!QT!ZQRr(C^ta(C?HFLAjk-8fK>7{!rq;Kz{F zh-OL*>iUh)_BDGeJ}yw?BP7p_Ae+Kg$dwDBaDc2;60OAfO>CT=Gd3&%#mFt>=3yY5 zQSbBH(5|c>=XFNSBL^1KwDptm$UF$h0KCLgEFnNht6bD!|y~Mz{{!PGR;^1Sc z6q{<4Sm>L$w_x*gY$?I-RBUa=MMr)(7PT+HC)${N!>t3dkkOeumBA)e zT|&By*Qc==;RhIrR)?ItOq|pD(#aM+xr&AEA+&79JBgMWmb-bM$FLm+%L3zagWD`q zie$i|QN|5=i8{EI10FA}rzaC;>i<*{|!D z@g9)mgQzrR+sqg~L9CI>khXEds$9f2<6(}B)bJAD)9vjYkY^29Kb6ARf7E_t_z5Q- z1SlptXq0WVdKaz#arF-gEBA?tHS2m&_B7QCjN(!rRX&do3l39dFmXYyLa$PMeU{iL z=dIw$VqF?1GZlGqI7={At8(+60Y11=SM20U>s)M*DEukG#?`*-ggy7fNrWF@pq!V- z`#it&mz7bY=5~1#ScG`-pJF@~4pZE4KT`0bR6 zu06F3H8Rw!eBZ-jm0zte08zFQ5CWLl2ENFi_x zzma%@d}$ZyApaFNivwH{-hi?I8}7aSrxHjC&9kKK`-DaRIUyM+<$?7SDP?~N3hkv7 z00qPdZl#o@sl{6aWP&bE(!NU|fAZ zu=%hWC$<$&N)+PnX)5#nC6$7xAjBUx{r>=`i|=&N=q(24Iunfcm95628WF+FLY=6^4U(-zhm4YSPEXy8-8jq^**HrHBkHrC*mvEkhD>m8cRXFhl$ zI)S#2d|p=H&ZAu{CRs29qxZ2mz=B#)Q!8qkDEc85hgpzF^rI{uXYmY+85Ru|ip2tp zvn<*y7Fl#yoM+Kz;j_5F;u4F1#j7lSki}-23}u>e>@t)@dSQjXjMg7#ql_f4NN70JmcxO7yC{ju8)(y@p~EBCqK=fE9b_U&QfDMRqaxl2tu} z?~Sm#)Evq5d;ty5k%uR6ARmZ5=XhKc=`xGSHs7qrODnX%~qk&^0D fCZ8RL)kB7@4_}8fSuk;HZfV13Ec5Tl>csy8ibPai diff --git a/Jobs_Collections/venv/Lib/python3.8/site-packages/astroid/__pycache__/bases.cpython-38.pyc b/Jobs_Collections/venv/Lib/python3.8/site-packages/astroid/__pycache__/bases.cpython-38.pyc deleted file mode 100644 index 96c12de64bf723247ce0d851673483bcb4129b34..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 15947 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 diff --git a/Jobs_Collections/venv/Lib/python3.8/site-packages/astroid/__pycache__/builder.cpython-38.pyc b/Jobs_Collections/venv/Lib/python3.8/site-packages/astroid/__pycache__/builder.cpython-38.pyc deleted file mode 100644 index e0bdd80426abfaa4762c08eecbb672f97184b588..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 12912 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 WUDutM{axd#>r|%Q)9%U28~+PK<)Iz` diff --git a/Jobs_Collections/venv/Lib/python3.8/site-packages/astroid/__pycache__/context.cpython-38.pyc b/Jobs_Collections/venv/Lib/python3.8/site-packages/astroid/__pycache__/context.cpython-38.pyc deleted file mode 100644 index 3394f3411e2fc9461df96b33739e03c952b20cda..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 4354 zcmaJ^PjB1E73Yu?Mah5SY||jSZMVd>L8I2OvuU!$x^A$kgQSZtv_YNhL0gxgH6w`$ zMKUuZI~L?#Y_tK29NJTX_K+O&J^BH9=CM5#`xO@0w!b%|WZCYPf*yzD%$xW3_uf2S zT54Lj-n;v+-@Jdxvi?aA^Ou8%kMLK&2H{r6;*8q~>o9Y-J2vi4;tbu6%d7_$cX{pD z;v*c;$rG-qy={pa_y21125%m_ojPCOi^o>S=k~VMS{i@+StR3Zq=Igi zYVlkLQY4WUJQ(RXiFGX0Y7nR0WW?jNk5NxZk#dNY5`6#E2kg$0EyQl{f@yW{c|qX_HNN)MsbQ)fznw{EXyY;x+AGz7sILL z6>c8sLD5XI?CB^^qoF7k$e@)UipDOs;>5M^joBeru>=pvD6HnRyJXPmMPnQPE&SC@ zkO|9uZ5>$?D}O_1Z4Um>o zxJo3wau&UQW634lz8tLQGTuV~t?xy0y_Y3iNVR@@us$4id&3X={N_(~!<*0Za3F8r zQv3SW4P53N>t^gT9y`)ok0O;>cuOw)_ZM#>tqtzs~-o>+(WgiY+8jWK)b$t#>~(|h)+ zdjFa+%OsF9{>Q_S8W``x*N7P7E0ZGR-!jT5(l(^fBbjalkK{-Maj#mU=7Mh)sI)Q= zi4wv62-HMO$wMFHVk6kivgCyG-6YBORgk5KR79*W-1R^N{diBLh?JoH7>3P=yn5ju(qGc1?h~6uu?^N5IA1(k~ytEG)M$UwV4(=}QF77ql@dp^#J9=$IFa>&DAd39^au_u?Nlr6;5-!vMPs&2QLmO2UO6~pq2hws zCY&uuNLv%Wt_xc=nQxDS^VTBSP8OYuWQt~Ew|6ioBl(CO0+Y#B02+hO+m@t_TDDxk z&3G7NO0v@11g~@1wFm{Mc7=o$`}n2^r!Bk50Da#%C*u6gJ+Ow3FPvUYw*icXjYdTRRxMn_0t z4JJqI3NZ8~Q1-Gh#53Dea(7(2s(yA=eL>KHZlbmyb3JIc+``LITT)%ra}@Gngh5~E zNNZU*iAY;^VXxgNYQ0z_{0%EDXN+dhsIf^-eV)rZza`;FO4qUfZL@d(Gyc&zbA=%a zPZ+LkCK+n7y0bQ0J@&4uYgbik?5&zShFlHIPBN{+uy6^VsWcHF(({unhGbxQBH0qu2x$Tx@(3dnDP6wM0XlX$mSuExVCjru~$Z__M_hq)A)S<`?Jaa3=C_{{a( zM)Q6Dg1_W1xU5+--znlxT@+#;;ji8WIoJJpv+j@jxq7j%g-&3rYUSSh1v&{+nT+QN zmZ_PG$`+Iwu(daK;YPBr3LiPYpGmI%PkVF?5}3rZCboQs+UjGBOt9Oj3uv<^sQqZ0 zNEUbeat7HOc_gD@@JX!n=WX<6?FTyn?Ya?=xIvyl7SsFE+tE;@TAf|{IK_m|4F}UR zuKluEn#gxs)SZ-X_Cd0qLVs?yR6fvL{gS2{QGM_A?jgLf%7? zI1sF;?M2B*ATYm&m+}K5XYi%DnLx*GHq7t*37-}1;i11AUz_vGtfQJsl-aVjBp9d~ z1$m41xJ~5rMkX--fcGWL);#92729RwOaE)178+E~1irjZyw-@U6FCX;6aHpINhS%4 zeuuvSNyMw|+U6bXQLh4@N&+=#r>sjo38D8Et-TB~K`ndQkSi1GmGv4%*X)RJ&>r6^ zI}Su-b&f)ZXZo+z0D)SvM!fa_#Di+ibKQmqOgcJXjS~MMZfERMEOxW}VA}EjndB&e z9<|$+KgIK@ZkB|d2~5dJOa6ZWm#j|) diff --git a/Jobs_Collections/venv/Lib/python3.8/site-packages/astroid/__pycache__/decorators.cpython-38.pyc b/Jobs_Collections/venv/Lib/python3.8/site-packages/astroid/__pycache__/decorators.cpython-38.pyc deleted file mode 100644 index 6264ceb4e34cc6981b9f39b681451cf1e62b5ec3..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 3608 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 diff --git a/Jobs_Collections/venv/Lib/python3.8/site-packages/astroid/__pycache__/helpers.cpython-38.pyc b/Jobs_Collections/venv/Lib/python3.8/site-packages/astroid/__pycache__/helpers.cpython-38.pyc deleted file mode 100644 index 86a4d369fe35473c313852f62d616e7dc45a0e14..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 7424 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 I!M}_D3tx<7-T(jq diff --git a/Jobs_Collections/venv/Lib/python3.8/site-packages/astroid/__pycache__/inference.cpython-38.pyc b/Jobs_Collections/venv/Lib/python3.8/site-packages/astroid/__pycache__/inference.cpython-38.pyc deleted file mode 100644 index 454a8fe296f81b1b06017ce62e5e8362cef33ca9..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 22374 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 diff --git a/Jobs_Collections/venv/Lib/python3.8/site-packages/astroid/__pycache__/modutils.cpython-38.pyc b/Jobs_Collections/venv/Lib/python3.8/site-packages/astroid/__pycache__/modutils.cpython-38.pyc deleted file mode 100644 index dc688749232ec53055b51efac5b229396d5c94b5..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 17111 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 K+qOq->puX)au68+ diff --git a/Jobs_Collections/venv/Lib/python3.8/site-packages/astroid/__pycache__/node_classes.cpython-38.pyc b/Jobs_Collections/venv/Lib/python3.8/site-packages/astroid/__pycache__/node_classes.cpython-38.pyc deleted file mode 100644 index af5ebe04836372bc170fa4ba17e2c120b54be490..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 115723 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 SdB`EXC-iylhuQx8HU9^KqL^I( diff --git a/Jobs_Collections/venv/Lib/python3.8/site-packages/astroid/__pycache__/nodes.cpython-38.pyc b/Jobs_Collections/venv/Lib/python3.8/site-packages/astroid/__pycache__/nodes.cpython-38.pyc deleted file mode 100644 index 50f37f2b7ed70a4c32283e5f6ea8f288200469b6..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 2106 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 LDae1%*3JI|yQJtp diff --git a/Jobs_Collections/venv/Lib/python3.8/site-packages/astroid/__pycache__/protocols.cpython-38.pyc b/Jobs_Collections/venv/Lib/python3.8/site-packages/astroid/__pycache__/protocols.cpython-38.pyc deleted file mode 100644 index be1684286c599a0106cfa356bc25e7429bd58bc9..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 17028 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 bu}xtpPszg)w#(u7Abw9v-LRy;VjcNEpYL@3 diff --git a/Jobs_Collections/venv/Lib/python3.8/site-packages/astroid/__pycache__/raw_building.cpython-38.pyc b/Jobs_Collections/venv/Lib/python3.8/site-packages/astroid/__pycache__/raw_building.cpython-38.pyc deleted file mode 100644 index f45eddcb54eb7f44dd4c71ef34d56070979cb7f1..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 11680 zcmcIq+ix7#d7t~vE|(NZQFlrj%d*V1X-ZanNgUO&E|jfCS{ah!%ht|xxMxW2a&J6y zD4E-3YM4eI(x!FN8_=dG3FM&${7@8q2!gi%M1eGz*Pv2&OlenIUPwpC(Q}L-) zQ%s3NADfkVF)e1$aymX87wTuivtm{p#(f~>#1UMd5HE_O;uw0K6EBGq;v`B>ikHPH zF^|%Daax=~ucyRU#aR)c=7M-aoI}mi;z@BH*9GyExPWU(JS`S*eMWpul*BXW`K)+W zETU#nJSUcLeeQKbToji+HpHb}tFlxxDi_7`;xbw;iLZzkaD6_0e%AnHtougkmF^GK zdMyc>ZL!segKE2_qFO5nq9BP?&|VEzw^~(IYokiFgQ|=p6$eqGWVx zBvl!y>Uv>eWvkW@;WG#0NVyi9Uu-b?c-Q?1JvQ!0j20sfWLKVhsluUD=Q3r34`n5!p zjs~=%W{d%aFw}KnSh7;D88=sAS((sRp7m2h9>S{ry?L=CYY#!viw`4takbqLu}m($ zxPGzOtgbe{wk9sWyb@mipcAgk7hgyosTVHcx7ND&;9{rNc@Aq(QKRwPON~qN#mmjD ziy2=AR~bFhkq}{{U5y$cF{osxUMG@qOQ9Y2 z@-XILBIpyXBApFE+^D)fH14aYPl%O<>6!8vu2o`g|L37FVDuZf0XvNyOPM`Z8eq5G zvy+nqbzuwVV=TLF-7t2|9Y>+1=iuH!FSqBenE-$*+$&lzyzb4bLIhC|YOIA}pczPV zpw{DHt@bc(G0X#cp~axK8a#poMXf-@DwfS!D-LRENfxoJ@?-EMV&2D*%;K~LLcU)h zXx5D%Sewp$O`1SQaO$Eyu}LxYDR4s@iULUS;+WK|I4Ux=)3~1hLfu zz4coxU163aucFW&ljaAnSn}j443>GEsG7wOh@Q|w%0ids!cerUsGVW}Vo}64nUuWL zA#EY2FuGFcY^(Kl3y)1IK29tgl{}Sr)=C~|4L3-P$KPk>v1R`nW=v>W!}83c>EJ(Y zPMPuv)QrHCUVVUvGq_Oz=)M6ISUo$mz;gp!H+O9^3=njyEBZPu5L?aWHuExwS|X6~ z8YmP?@Gz*gnB|&wq!kAMCp+@V}@q>I(0`Q>IuZI{tM z^|bzDOr!ZInpr3+Q*x`NYS1LQL&c3*U`SyM$;wP7D!ghIv2UV7LIPnpJ_*Ztlty4j z8j^(PK!%Mv1yeqY zyAk3Lb_c{cha18#2n21mYOR_3){d<##;`R+p4tGzx0;={R5!^YGbsP>foyA16b_y= zj9?h*wjkJ73R+uoIZrMEV|1KAvl)tOyl(DNJ)qF6Dam+`X#B_Eql`LW(_?4x`}Phf z)w4oN07M}UGUnaIK7An8wN_2lqDHL?H>Nf4WbSD9hiG=QWL73RTQUx{1{=t(r#q#& zPE_3>XXFUh1`v=XOKqq`4Tmu~Eo#-N9fA#dHyYm>h*^6DT^I&1 zUIc)idBb@BJPeqzXF;{OFk&uV)vh~xFk@tkq2k=o+nny%czv_G^ebQgI;r6s@hXF+ zl+!Hs`?aZ421m8UCaF%nsMCpCLKDE#1jv(CCvGS5d3q<(XQ@M#6`z|x+A;3S)991X zp;dd)^zkPJ@0;9KB~j@A$R-h8Sa19ig`U~*U^wkg5ofD2y9NivGIq=zfFPrn1A4id zPL4rT+My9%X!F@&N-pl?dS2b$qki7L!Sv%AVV*ETl&F=<{^rddoQL=I2vB=$1mcpx z2wnC!Kj0_jdp5?M+wn11p2rn>{yzInJbyl$|F49F)lKlZ*mF_#d#3z1HQ94_iLWmB zX?LIhmHfP!IqiLx{^E1|%B3l0Y-M7oIn7^{Yg(K;c`E@#7p%cR-Knb1= zo<*{k+B8Kjd%zf6(kU%U{fOi{7|PDQVa;1bxC10mJ{$uo_peklo3(jx8-T297&oF) z2-5?lOSskOLA+qWVT82pLh&-?ul!2NAE?DZ>$Ctqx{8UwBes~HNy?sGK=P-76XX3N zxq!l0wK6A=Y%x;-2KfY)nG2&DMxI2&k8rSA(SBb>DAKxm6<_4{VNQB$xrh^7OrMlA z32^FaF&=$PI`i11e@YLf7cnfkjPnRlNAz?Tt)!the0hV6J$!UF`gK!2gAf814Ru_z zZvp0XXH(Ct1zua-;1*JSix6-4?aHltyOvz%URFIv%F#47-%viRfmP4%@?GZT{T3YI z%wr$Gk{o&V=nCwk5e5T9!cjn;F+90Q1aoi4fJV%n?By_1_wwsd1G)rU_^!e zeS{=1qzirgX9<8+g!V))j_Wx($fEnluugDbtba+kBafp~AL%cnJpPu1^uNJzfb_u11$JPMb{rfo4iAAteb_si57v15o@rHL+l` zIU~cCt(jxp)aCVS!5zcSkrC|l3Gx%nkQuZBOcnjfbdfph9|bO1sImC({D+g1Z(-aB z&_;AGEtt|@JrgFz+9g3YyO+O=K_XHS)Ed%6wGINEj87#~Qi7!)^)Ma2z#OHgM&6C) zI+*Go=nXTA@%H$tM`9l$sX|CPfZa4Doa&^C-~z)zvg6c;X#dv+ zTMg%P&-KA%`3~ww{9h6e3LUP~fFI)orrMpkArj3|I*W)z2`!{LOy%ra@OoX4iR2aD zuxWJXRSqpaOy_OH*hW3SDr^+ws)_utX}oK+UU>)pGG)!7jh3`F zQpLSV#2xvb-^+(nm^U9DLb#O=p#_jcbL%s`+!bT9!``aXUHLLL4BL!FokEE+JDug9 zDR$sQN@jE8rL`qQZaNc|XbY>E_6y2ylx8_{7-HE?)TWNw?!=XR*oq$|YP%7$NR#bN zwpMrz$jp3DjXRX-rcAD=RTVN^`3D%bEG2Sow=s=2(C4W1B%RnD_8Lg^wc7G5YDSa< z8x58avLW!3Dafk$WbJACN}hC@RuwiNQpq8OKu+)&epu@M88al5N--P@O2IOn|8m?S zaALUyvtaq;;lk!n^hAH8#zb38XP(j<*AIkd7jEuP=oS}SNq8r%?gSHC9zc}siv-CCqNSC zbTdhgJWnT5jF91@RAxqy(n3O>gZEZTf4<93YI+yKCaPFe7qFrDtq4^BUG7ILE zO$wQ)KSc>iOV-gc;s%ql8&I7X*ez;hylcG;3XIbIT~12AV^A)=WR-8iE6*XpM!6{Y z9>&6RiE!Zr>-cgHhe@;=b3Sg6yE;azrKcM}44DwwK)Fg4!#^??ui;2284(-UcQa_u z4f}0Sx7aUo#Ds8#hrK3OFtnfwD}Xu?%!#-Cijq|2HN%^ zXlI*6BO5{5`{qq3^1iET3ws*dL4*V>7m!DtWSOu}1gW@-LtnM@fkc@!6Yq4n017Z$D`!y}v)JnS_TD*Il*t=Yak%5mTvyi4*iK`K&LH_<}it1=(3VUY#txm#b)`PP7*dNmmQ3q2V zEQ|L8JCRz4YMPd9Vl8d!==2@?h%s(cs|_EOx}~{jCEPqfAPR(rn%NG2o3%G2&9@Fcaxr7K7su2*3kD`GyDJ;o7rKKokg&RK7xv8(?86oax4$#a0D4M@J1K@t$^p^f~F%?p{`apAE5cCyuT>N(^(-93O3_uo@_ z>J8W#^}?=$=;Q+07^3p0fT*);CZ7SAljsH4aNm}np$DQDx}%gi_XlkE%}-2tK*K$M zwt0c)#ap2b@W#71Cn&>8vCj0~3@jVKzL7)gg`T-Li+Y>D-#V@i_n&~?#@-xS*xMpo zxM6)_N%XBB!S1rpWtti5KS4RkBfO%c*@_;jV?9S5-?ct5lXZ0h_H}&iC$pY=Lp^`U zJx}%5z;8+O%+oxe%W1TLW`p-Xlg;t-FQDdGSbSJ_tkY8gXlCws>IsZTTuS5l?T9yc zZ>*eo*PmHXzS-@5N5<7HnP7huTc+%0KU%L<*9Tt@1PF{M2Ty83e;GikJ_|Fnn@94C zF9b-j_f0P{E2PF3S$${oVnaDthdOV>;y_ll(xrXOGVN8uh(Ku1Y2mU(O={neLpsA2i%{=)u;-2s1QP96dV13^ zwejfyd!3vYkRQM8?Q{%Xk1!g?d3M-SYgN`cp@cV}45jOrC$>8qqoeiP#i>{`*E;!ij| zmcAp6GRs=Uf~~YZcPNx$hlAXXf;oqtMWkqta&ne-ZjqA8dKB$h+#%$#rtB%RdumK0 z4J*SDYe??wKq37-ZeaP?7Q#l^BTnr?=G4L-W>(LEQ2O#7gwuusyQZu-9myf=Mv0hlAQ z0c5A~)k+r8thd`6VfdhuTT>e$4oSX4$*R~?CUt(ZRMevIZQP`O2I@o`Huj%)(V#(Z zC))|{?cpP#B=x@;Z);zhrD%yJ_J$C4kQ*SARmqchbD%Tk56KVFyiM4m#~Ci$DBuOj zOUDOZ9BbAp0!wp17fQ&7bkB_8V@&wqHJ3}iegz^7ZV2(}{)f zLn<9$o=ekI*Tm@zEsi5^)A4+#aK!&Q*Z=P>BDn?R;nxv|lTFn7={6R^!WzDL@9sPA z%4g^Sq@wUalgqoqLrb8iqdz5zJF@)&z9iVAWsnzYnDPfWSE<h~EbimuI~YpJ$|F^%4yox?2a@$eGP>c+CQO!^CAVPnq&lqdft@;1 zKN`-cBYVfx@%o8+kzs4n%F8;x2gfszN4@wL>|WV=;;J%+ZA zkfx(9<US^4|a%?E-zh|aee zw|f84y-uG|$gfbltFY`Oog8@$EvJO{G(Tw2(#p>AA5aUz{^8e8=U$K1{aD=?&K)l zRzM=dfnkPu)w@AMXJm?yE3yhUef8%V9t<|`lk!)9!}mG~O{r#G!ugj@k@A!D`2w<( zpW!Jb6DEk)hEFBR_;Cd;mo*<5hNPgRq|@)v>CbVhU;waZ zPx+8q{)|q4NT=`OlsedRPLS2R_N`mDAKWV6mlbOIBWju&l^^-X)bb~EqE8$3H$6{K z=}9_0MJG0Sl%kR6aH<^n!cUvn(c-UCw0A|HFz6)lGL>i_PCIySQHk6%_6Io~r=7?K z)sbys0nuVXWE|q|zy_uM6&*CcO8#1M4<`p7cV&NAME=`8(ok8Q?N9iwKjGQMJZz}# h<5%zt6NP!-Egbee{}fs$3xPlD=caz!vC-!n{{uCK6j=ZO diff --git a/Jobs_Collections/venv/Lib/python3.8/site-packages/astroid/__pycache__/rebuilder.cpython-38.pyc b/Jobs_Collections/venv/Lib/python3.8/site-packages/astroid/__pycache__/rebuilder.cpython-38.pyc deleted file mode 100644 index 548572bdd209045803dadf0311f3b976be2aa564..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 35584 zcmd6Q3z%G2ec#Nzcb+@DTFJ63*}@)-F&Caav zy=zI!Y+{hXHedn`Bs>h!l7ORxM<6L*@|7n2nzm_ZOCRAQ=}k*RUwm$xG%0-=u>1S{ z&wb9^kw>I+pL1oAM z%8chs4EZ^tz?5N6GF?RA2h{@JQ~v{{{NJ=*M436Sd1hQrBfxUStgvg9_eu1b@R zR$qNA2scbB?>$?ZDq$XZzvpi><|LfRt{d-M;3A_73~{YZsQb0||*@VeI2* z)84jt(wnGDuj*a9-oYr|M355hnOr4nWj7l3R-|Y6ApS?_-+_c9>IyZ5C!5uk>MF!r)Ya-5#22bP?7W zqkcnOuWmrei`9+lCOo-By;*--wFmL* z)n2s^@#X4Hbr<3{sQv10#8;@ds(TPmse9El;w#mC>Hy-a)Z5fS#8<0B>M-JK)cxuK z#M{(^>g|ZPtA|t#@ecJ4^-jcZR1d3nA--1C)w>bDNj20F#Mh}Ar4V1QnrasD4Qfsu zMSP=bsd>aVsbi{*_|0lTbr9dIx@r;eTht@UMtqBMl#BRQwWJetnm5Z8pjf6W^|3{rhiQ}Cv}yu(jwLJ-k%knkf-P`f6nMnJzw<+=996C`+sG%fgJ z8p|cK8y{y6f?l?lsb}Uuyy{sA4GGN_pIALZWsVi?9d7Ovzvnx75H-ZT%zS>nfK*Xs z4rR_{r>9C@vA)pgH0D5@$Ln+L?vX~j-f1i}9dARuwXoQ=-TJKEUBC(l{r4v8s@ZOw zY$^=NA!YI^J`q@GxEI&PQmofo zot9g#@4`1{1A%c>Ay3s3OOX9@XSK+B=9qFo*UK!gUDSKz8X}>`p zb4RteAXzgHVG>#NCa<`=E4f_HMDNQ+z=ZnMBqo%T z%Sn|9-HZgLAv2#nZMXpBymcz;V!BoVEc+7tI90G;kEpheY*+JyTc2qIcY(_$>h>%$ zLY_I}p709(X6IS=bQ=ncL^$65(N*f~mS5itDt83mvdb6tp<_H-oD0dL3{lc#*?kC} z%$~*+uV&wAtYlYmE)Wt6HU|VV=dwMrtH#s$r!r4wPMc3;p2*G`KpyMyB1gL?a|-3M z_zlRBTfR}YX9z<|?TN22c2hk*E z+b!+x3^>x;kO&G-uY5}4)83NQg!o;{Yg zw=(XTTQVzFXB)_gv653+*F0?jUvjI)>D+4Og3LqSwo+n1q1l3qffUiXRz_wLz$aPRKJ_M7=buH8M}wC#;ZV_8M(gP4Iu z)OKnCNU$4pRjr6eQk7TMjR}Uy9ETGvNa3Oahm1REd^uYIZQqEvoLxRIWwsOW;u;F6 z!EN|LYG7Xps9}qo2k*Wm1E}HqX=4@ZN1kU_jclef$@LR|B73>HywhnsiVfOvT63Ky zr5Xra?ve;s6uoAevZ}UePP_`auG587_GqKkZXAJFcCzU{_agqLfqAb*f9%^4c$VGm zx?afv;Sd~^)ih zNOeGI0IO9KSdk6s2V@$1?kv<}r{hcmMM5evWq6Z%igjOQ1(~ShOnivMll~!={9^Xp z2k@(=q{i|E$#I2w5(6Srunr#~qu&K(!a(@R8dxwZmTO>gO)MC5-s(Wa=wS=%S$^7B zHJ{4(#1!OIh-r?*bS39Mwfv`fd74+*l>$D+xy(ulwSJIo%@^#)LF-6}ktV%cDX=vx zSIhnqdx9Ka^m8CBIg0GVisiSG^IIuND`o#_-hWz_r(^!pLZY7)|7kH%!#Mgk;f{SY zYv1huUh;phNL?lWX*uz9!hbrJXknfIw329H5-qHk7CzwrKAxy+{gavbaS)??uiPv3 z#(I_BcyFRt=oNeGdXv5NYU1hfY^G>J} zglP`624_LezOC&Q>{&Lcu)T+Yko|~i?Z>l^;uGylZybWMS}~HgHLY34J{IrTnziyv zqqR~+Hen1luYl#YH%H6?7G=g~5H3Ncvjh7ya%f;W2L=8>8 zpUSwt8n$>=NOH-^gl-^TN&5aI^t(^{oaLD;*h+3IXR_XgnWN2_V+qyf(53sEVdH1T zrn5J0zZ!BDn~RB<@MGbJDz;7KCXAJOK&bnJc`=%HYa|F zH99rv<#khDP8ty2-lly(FI&Y_lfkKxVW5TIW z?yzkJQH^bWU0@(pMAf$VY@Wd}1|0@n28#@2;}CKplEb=?q0zg;2a(5l9Dx=dDw#^g zc+oO9Wj8^Tz(3Q<79k|(k=F61EOe|d=FN&>y^yyg%vtyy&-D}itAuw;ds-Rd+uU9UXTZP&ZAvtYqJ zbHSO@ctIS17NF_4VAqopjeQq>vma$3(pHOF!V^3_yQAElHEWDrphAViPpr+i7L+< zJ9HA}C9Mh4aHHI8?_j_Y*l%P&g;HFW)@$n|o_dqy0CTr!AcA+ux!3dq!ChHtK;ZQ;;NkwfvU zX1lp?#t@C1#@rA=ZE~kS!6#&xmTyf1SE@NMjZ?*}Qs}n{KKnfgydsD3K`-$X_9sLmN^i!~kdxfdLl27eV|$u#DxYkq4Go zcN__c*KT}7^FU!(6mLKQ3d34?XhIFH*KW{7Y?hk7Ozw0}c4qeZ7S%m?{0`LBhsxfj zVC5rktcpCO)j(@_S#kvF1zuj~%R%S6w(fLMcN$;QIy(_>yKBP|9(Ho;@J@E^MCYtH zWUt1Tlq~_v#3%ePv#uH{`!rOTJt6$lVCaO96m*YsJC8S@r=y0*USc4-w(RN5b|$8m z*7QcGb|1kW^9RPNDjXH*K_M*n=~*N{fjVNCI0GPSbo>xgAx_3^B^oC`%-;nkBOcIKmFk{td4a7d~88wdLhCw1qeK@(zrQ@C=dPd_b3W1`Whu&3z!Y^y%ee{~UrL zT$?o5M+Aa(*6C=NUqYBuhZw*d5C`NdKhEceu)smd86sQoN5F?1+%|j>z?&{uU>a^t z=@cx9r%dcD1U%Ky7L7JN*hZ$T~)rMY9@D=gRHF%-{Evi;Al8_8e3mpWKakYEp zD2v{s-;SpPP^pzzTy*i8txdwleh7uGig1v23##9ZA6t1S;rq1A!7jn&Kt*o?4+)wA zK7xmLBO&0(%p3DGnP%s6r=XEn*$b$s)woBXfYpT>HFLUzr)7}^bb5^Gm{f3c0IHo! zbLWVJ&u4F)sssc%D6P5Ni6gB}y}KBg2JM^CZO`Z~#_%uNbp-W@ul5rRl7RFABwL!( zNCx&XFbi=}Q<@`Cfo7QsB)lPr7L*=!`dnFQsD;!WvY^;K0TC*QQZWqjXk1Tav zZN{jMU>t<4M^Mc=2v4(Am<$DnZ}*{#+HOLE^>Ddu%r0+E+jp69V9+5t?F$CohfXg8 zm9on>1gNyD)wyqRn#n<=No852WCC_3Izxanc4);U!hi=zEX6qN#Kc_m#T(Erv5JUgA~Z3Zkzl^7 z+ijl%;MQ#We;1*3_U-=&y4qb#-Tuq|?yg7U`wB3BKS4;FTPmX9edomZx`7Q|xBUP+ zsW*5Ff^0wsh8c!+p@G>9SHi{qY!2CFxa6%EhTF}?v5_%c@YmmDObwmfF4my;moyeO zKwjo*aHM7QF9SiXoGC+-mCj=yVeZ5b$-jgM`8XtHCqUvSGvHxlM^T3V zEs)Ct-w5BFM+CQz_(+}e{U&^)9`sOo_hp|r; zMLfx!F82z0+qS=h{9`H)Wec`)l(0~u^t827>=jYM@=N6HZ};*jRb(kRVHM}HD|vWv zl)z$F(64b}v0*A(4Or~*@|y#)v>Tq7lrBe}H?Ihf4r*W>FE4sgXU&#eJF(=hPNU@T z!)T{1xHaojH{PddnASyF6k06W+z$Ysz%;68(SgWPZhpU`7U=l&d1w3=ys@@b@M6}Z3DgL$i! z`AyGVzqsJ)6nWuspS1xv^i#%k^*Ak-C1^ zO(>gws%z*|@qP^-{iQ$!vB_PijjZrCHEj!%2tz9;Q5$uqvi28{5&BA5b6gp|?y?5Y zb(Lma{Vdz(4v>esxBSA?y2y8{R^07RoH*3Pmg#BakDAaz{Dgv=t=(|pn@&%#z&Ry+ z>WD1q<&HGq3aFjHihawqR>Wd-+>?+_Z)6J`i@gqkSB_O9?0>Z9`x-RC9!%Z`IUcg= zwCilf`lC=qM@OnIxjHxEpSH%(LSsE|RhCmVZ9#>J?UKtflsq{nfj~eg#4KjT+8+CD}oeRBN*slyf8yDv7mpqNx7zru2eF|)83XSMIcLv2bhwI>EeDi}NHu`KIMR@_C*MJvbe z5Xf8v`CR@d*z;ak-kwTL^-$A@DePUG;97x4jsT7rWr>9TPa=nBF1Hpvv%Bcj#^{#{ zUJLXko%bIX81sY`tNbl?GSKePdQr($euU*-UcTroogF|2vd4lBp?c3)%?cU-;Nr+A zUQ>QL*N+mI4qb_-_MKYHEiG?LPZBeHZ5qg;{WfiS zp`H?-jxTafh2NL;T#iN>8IC}8u3)x^DVGAtUEF>aS-#C~$zEky#snDb$t;BRR845q zy~K2K8pG*i4}j&>&`cp=!*Z8J>VQu{u!o0(OCz?85Wzt$9Vt&eJ%7h#ZB_zUD&)V zh%VI6!+;NA1OmQuvuk0C%|ltuvr}|wDRe4Yhc9`cB}(f%4* z@GMAjp2*H5@3>f_8jThlPlwH0gx#|W=C-9m$&0*}u$4SF$ z(aVTm4}8nbRTCZ++SkVt?TOY$Umt8Zd(g*`Nl~bZW~m5vP_Kf^w|@sc5~@C6{}7{x zmlII*1Iw4J39CORl!~Z@n6&{6YPy!1SrZ`PQZL}c*tr`)`cjWGYkpdM!uv=-QAmIp zGHf9q%R!S%85vw_Mg*Qu5P?(yR)B=grjh~Q)K?5f6isDpSEj~6i*x0~gt*Ofb|X)gkK5XpO17mGe}`1tfseuD zkze4@1KK#u%EF9^;Rg6COL`>Ta$rvCRQI;qtwl$U!HmdGaBKF2y6lIBlw z({C*Y7GxyhDk$&@#~YnM*t@Xko}4D@G&27*FyLA#tY!F!eN$qS?Xjt`lp&}3hlC{( zV2ZqG& zfEXES(_&FuGYWPQp?P+}B5~csS;&}8HZexQZs%88)HN*=H8TAr2boXFnPfgaU&Kf> zzMh?x-5UfgpWPt3Bf2YWBw0%pGZN(o5Fzvw*@b@fBZ64t6Lw^oc;9nGBZ2l1q1{5< zw#?Aj#OZFHgVCa(51qqiq0epx?z%0`Av&C7ah9RfSA^s%9+cK!T0u zq=ba5gD*V8h=U;prpG)*ahMiEXq?2&4Jwg&6C@3nBFu|Q#7~PIA~A)=e1TKwKhwwm zjCmnzu;}HUhQ&gJ>HP9_0q=@iX-1}JYwH7dV`4V@EOI_Sk6VV)X7ZIH+EBl|o8o-} zOD>)>zl8}Cg}ayU+D+UZWPcb>U@YS%sRi{JrlR$pEN1^9em&#+>K|gxNS0?!eReZk zNRr9yU`I6h14vNM|2X$*?SgIwM!ChU3dU^i;ft3m%Y~9y!T1et zG^SuA6K}LUz0v0L@b}cB8U4`;%eRC(_kOtnWFIa785zw7u!(yt=P7YR0Q-v%t}=+< z5Mb!D()or%w=(#)??pK;*J!sIPM_2!%HLga1Y1s39qBtvc!fzC>U-crL%f?R;+iY8 z>*(1lM}xO7mwvRHk2c$yU%M0!?9U?@lr;Y(f1>E#*W1-=QksBlr1X0Ykybu8XKR6d+**B0R z>QFR{cq*h6S`X+yKn_7pVa}CY??N3#t;S!;gCnGF1ZG_O1fG|fqPAI#w+NMCWmbwS zbaNPEyDQ~h+5U8|4E;)J1%Acz6~B}?K==e#n|Y0SZPLv{t5WI}L3U}v5QioddLvZPKEu>w2)vDn zGc&;{3vPH*llo=>BA~XA3KB_V1#x*!11WuQU~U8wQ(u4|_++El?6| ze8IB%F>SC|Vk(JcgqC31$B`gYKnEF$P&`cpx0kEMT0>h++~L{k9FQDEv@z?l&##+vvKEr+zlmH6^@J^ zI2TJKwQoV-nb6zo6;nWJCoh`f1{TeTmpcTbXtP$<-r1642Xhe8_UjmY9s#b53_23c zq3HSo)-L4gyaIdycym+grW*KL2em!US>1>hG6r^1b2DhlCZRaEE@jxs)}ZXb)N(_W zsU@QotkPl56_|1yzqIcG_-RboDy)^ItS!`pTXWbRan=F{IAJEhy*-$g-16(gbt@OI z4cow6w667K_Weludcs=%PAO#z!@(iTrr?!vz!l_)=e~z!<72^{eq71qYgp{j<@!jjh7tL?uzOP}E8#r^R3t zpJ&Ar$QBY&t&-}ym@mklKn+4DTw%NLr5`m0^-v&hL=$~pNvDf6!i9RMm|Oq;*>l+h z1EA!j*eGy$0zK|$@qIt&)-1NOFZF{4jses@r8@6Ri3D`GXhP^5!IxA)53T@#Gl!%^ z!~@ICV@4K5!iO&h)19Li=Hi}S4h+7*o5D`#RDLz93b=ky&fGt8gB(RFM$Y|O_<8wj ziIY2;)Mx)w0`l7ogc611NJPBfCKSW9lxl6(5>XoWAk(NRrm<^eT(%q8l z5ZDQBc9Fk^ww$MV1o#_&Sp7d_S6CU3^+KPRY8eT0CxA@!D&Zqr{mn>>K!`wuT-^H= z9H$HkkTLCzL1(kjaO=)ulTP3=zzL{=@XT$h2Y6tlf0QDd@embnspve4JDYKN_HZ5d zMvX7J9n>j@P`*U~2q^{tC_~{xdUI*o{*x>^01Xl!fyND^K_f<%DVC7E3A`Zm{PF~& z0zDp>Um5vF(28~=O(UxQOj9+3+ejDfKjJ`zan}Pq%R#!Z%)kiQEg9iuGQvQ!FIx_d zziMwf*;>G`>67W9iK8mlqK-@(^{pB?jR-j@8{2J%9-RyJ5?;ajry+8Kmjxf2zK1a9 z@PU$|;na$FWr`UCj$}A52(A@70)-FmqtRePFVVN^Th`BUxO!phGZ8gTZ=}y1I%3~x z68E1q6=WhFHC)v2aBB=W|DJnDcE|US5|=UG0iM5iTnY z=l#v3E$#jwg2aYwb;#zSvkm})crKgA9Y}!7_N7y~>4Mr}(GUwdShAG_$0!0nLh%?C z9U``KoGA-k8}5O_&B!os*0K@l6ysu1bRjKw! z7D~(}XEB`3S4C|U`W11Qe>41wew3KGRHLK-W|&`*uP!PEBkG$xtpxpJPS8+Qk#DCA zn)%=C(SVvL)mj-8NlY8Lw<12W*?a>D(A!Z}MD0*TG@Y&@>fBAr?Ur%F?fZ~p3@Rgh z-;!~0x{&e$%sotn2S6wl9KzL6P$dnho3z3TgrPWVpuVr8pA#{&P;BXQGaq^B%MAG5 zKII8}Xm!!YP^`RVY=RwTn9m~El~lotIf**Bv#9}6R8 zOuDi%UhJGYOl;B8BvOKmAf~X282f1S z{`$i!MWngcrj9&y{RKr{g;574&?-*-@SgNhw>rrl8~pG|_J;{}U+TYd^kD`?UWH-a zA)8^fQHA7%%i*{0I*FU`MqJwcLxpz}m$P1$*E7YnnTp`P{TqAhb*aNnz5N-vUxg8e z7vxVbjcU_A+d#c+=Ou^PSz5Sb^kE|Rz%aRo?8ZkJh=9xp^9IcqR%te3%MRew=!g>t zJ%_(EEtZOr-n3=u^D>Lbxu2r}Jq0aI=Utd-U=U=uM6;;tFtJTt5KEnu;-na!CN94OHMP;66K_d7@kHDNt2;`VAyQ;fe09M zo`foPC@>`d05C|}b`yKAL(snjAxHy!AEb7TBEu;V)Ga<(EjT z8KPFGSf>44^lt`Th_#|o3kcemTJzqqG+gs|3ty;O&P58ym*Gxq)A;J;mT*@IUijp= z&Bb8%&q-}sK_}Zw8Wr)0skj3_N~ma~pJY=40&Wzn!9G$}0{~g_cu3j7+L?|tVm82pO z=`M^#bdF9FIfHB9oS-L<5oA0H-LL+^UUU}yby$7?fZ=|06Y4xy0EV6+MvNfqdu=pP zektirz*UUEWv`+aLjjcvpEEY^8_Pl; zMD1T7T2KEOd>zH-Ks#NTz7Jw9Lbt>A$-Q#I<*$E3`y{~_ZfL3YIM+U@kA|cX&^6m> zKNauTnzi!jcq_p{l2SN7{Rm3!yI1sIC+mn~dFsCH8=ykSeVol``bSF}?{JZGIH@Mb zuv7w7^&I&EQ4jq9J;O^10_SbAlMsn;mI0}py$yaD{kR|ub|XMmtE9``tc?(9$3a@@M|_DUyM)5aw>}j2(1M!`tIZQj{x1Y^DocF zdxjTbmS$UcS2ACiD0&R947}OLN9~g_#F@bPN_!mxvE7j2!#;Wi+lagc+zli2Y5Fyvx`}Y`7sDe@MiB+ z3gf>!EgHm^S#QL6g1}H-O+6406-uB;g2LQ^&b$i7zwpY`!%Midd1Sm0?rO~_%s1mx zu$-!IaoOE88iN^&SiYQ$s(<1{n)@qGX5WJLIbx~%8|*_G`vTc6RpTP1Qs-+onv%=? zWJ$|Kx7-bA)j>?YmzPka+?X8N?z7PiPxp5k_Q`X&qZP*hg!?V{1@#q8lS`~7eo52E z36J|2^r1N=tXiQ983Qb2>iJBc?~^LKi@!&}O`;Gl3+2fyeLeCpuFo%(032$FxIPLw z>9i2&|4KYeL)3o|?=2l2_16sR|2Y8{a(by)f1Eu{!}>Mr)W3*#DsX+u3B=M6#XgSN zdI?Wcf0fBtzQyVzzKfnP!gr;vFe#BZB1O5AA0mu%1VR6~(KuK26z?$8r%3r49gC+( zpD zSf9$qj{0e0x(8WsOC;alpdXM^l701i?AkE&PVHFq#@{tV?|&EX6d?Ug_Et9b4|5>- z7>>{IC(#B*nZCtm+(c0HE~bTRl)=lmpTe{6unE~n@FJ;+94R6%OP4o6^r3kS3Ip_z zIJO%fA+6L7h+>5-f9RQK+H6mgdu!;sNqnmhao|6)Yhv{o;<3U^iJs{Bd*yobkoG>* zYPQwLY)7az&q=x1?2Mo__t(iuw)g{%JfSr2n+m-sB=5@tK;~?QgWxUZvN4xrC_IpR zZo~0KSm`1U!~R7$B;c3W0aAt6F#l9`I{1Hh>K*n0ppI9r*Y#_+@uKKTz5d8jqfOrf zd@I!X?svRSn&@H^8SN_>P*p@an8#-f;p@s56-$WM;TxY;iUpJ?AeCnw z2**)sU2zIw2{n!5*D}86@U1Ah@<^46TO=$OOBVB4_~=>~kIA=nl4A_tCs9|yX3w$H zoX2Rr%{RYzrgIXPj^KpD{l6Hz4FO#K zwWoHy)qz9xHGF<8gRKnMWEvE`;w^gF+(t4aK1r5U#Le7A5c-N)F=KCMl+&;9SE~Gf DI{hl% diff --git a/Jobs_Collections/venv/Lib/python3.8/site-packages/astroid/__pycache__/scoped_nodes.cpython-38.pyc b/Jobs_Collections/venv/Lib/python3.8/site-packages/astroid/__pycache__/scoped_nodes.cpython-38.pyc deleted file mode 100644 index 5722d1d81434c01b60e389e7431e445d87bf7e30..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 69479 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 diff --git a/Jobs_Collections/venv/Lib/python3.8/site-packages/astroid/__pycache__/test_utils.cpython-38.pyc b/Jobs_Collections/venv/Lib/python3.8/site-packages/astroid/__pycache__/test_utils.cpython-38.pyc deleted file mode 100644 index 77cea63d97db87dccd0db308ad2afc57c1657f84..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 2565 zcmb7GTW=dh6rPz~U$RNlQc47&l;v8ssCI~&AgVNKRCu+J(yO6eZFXjzjn})|nQ<=0 z=79voec*wA&_3ob?JEz6zkra+Ib-M6(gI`6nVFs2H|L!19N#%}#vxEXT>1Uc*$F~^ z!@32jo-vL-XF)wE1&H*M3Fnk8thq}-`AE0l1D+q|?#n^iu^ z%e(@;2|+g;UgZ;eWS2H4Ia?*(RPW{;9VfBgaieY;>Nrc48)eefLTNY5xN!A)pxv$# z$_v(<1NTN zM4vpI9#BpCaLipo$zz7w4k)VCf@dGFg4N~vG|m+S1qNptREZ?Rp;PSL0OaAW5z+CUbIOzSFIbEqm0W z3jHoPhN|T|#l%ueq+&al%VNF1$EK<+C0Q6GYPkjmRN{Dew7;OW z-r^77MseC2xUq86OuGU2nUo^bM<&1Ss`ad!aCc3(_iGQnt2H0iKojNBM$axvx|=7W zD5)G=w{Y$TNmqO$WhRRMiH3c86dEU_IL)r|!3jua&W^Id!s8iCL% zWptLF18GzC+tA`wuxM0N&zn%y1_(_yCbZ8A3XS=LVZLoiv z$QpbBAKPVZDi>3mlGN^l;ko^k@e(iZnf>U0&*&4Pt*0>ij3RIL2{5O^t9#X5I_Azq z;}5*Ppx`Ih zR1hd${61859Rz5Iv?t_6jeMj-I%E->0X=}WW{1Epm|HY+Y)Fph4DYN)&ua+5mHX`| zge<$CsG57L3;vcK`x`hSeC}O2wRGvmYu0+KC__{NniRHzzyo7DkS$e|+gsRrR#EN* z+dvFx;}qLT(C8skPC8*Kw*2TSKK2|4!m8kW&hxT0YI`?cslI>Ft~u8$fhBiTF*T;B zAE!}P*c(}#7854oXIY|((v}Qz1Wlu&5{|SZ(EtaQya&(X9^)_K~I7nydtDGRbwX3NfE(y1_>o36IzX;93)%8j*@S{ zPT)-y2$MoS04G&(2f}(3Cy?PG235v0BdEse2I{m(gSABXm>%!z1ZmI` l(p+%@*D<*2QYYixL@Z+jRu@3nkXOu)RoRr~Ty|`m{tbv)cq{+_ diff --git a/Jobs_Collections/venv/Lib/python3.8/site-packages/astroid/__pycache__/transforms.cpython-38.pyc b/Jobs_Collections/venv/Lib/python3.8/site-packages/astroid/__pycache__/transforms.cpython-38.pyc deleted file mode 100644 index c05cac0b809d495b1d1d5f8d9e9d6f7f922004e0..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 3465 zcmbVPTXPge6z-m#z2-vX5}~}%6-!|wBp5(SjL{ULXcbEp35Z+5WHQ~mJ7jid>F!C$ z)~qi{mA?4kKY+(P`gi8l2g|?UgXK9rdr8<>QcjrOp1zzum#@EbcrZ0pA@Izt{_*6a zDMEh7kHb$6KE8lgeEp@ry#O2aSM{^2R8Enu^ei;!q1II13{#7R*Y2<^mxeJroV>V?b`ft7f3l z{iu3T(H0T)s&UT-b7+g_vnNs}+#*mRbjcbt~IeogJ@YggcDhKuWq z9lvwg49R7|DUg+$mCCBkYUpvlOw8w&m(C)eQL3H~tSQxAV zpcdQibLDr1XBOiIc#7~2y|M`(34Ka>R$?XODcvf{(+Qv*`-ydq^m0k=OY->U4_43a z<&!+8TP1Zf$tQG=%DKeG-(Ddpz<62Kl0uIrg{LI3wsLZgl4nnz&7ria)#bOqQr330 z*E)(x6IKL8)87`Mi6`?L0Hs|6Cn>f8 zj+eA&gX44H;u#GAfWX;%IdJw2%tK&a8i&`?6HXsaPQw=gSJgsVY`MzSTFNtUR$6Qd zjbG`sV=lJS6rqs5mljnvAy31yYTh_d;{5?Hx^0o>x7{EXY0>Nw{8e8SGI2|=K}|zL zXr=#GqSLhd=D2r^pd+3^z}oO4P}L)7&@&o6^Y%}q0Y2i^eklPD?SZvs4m>26wPj|J zy8E*@pHTU&S(Ae`H3a0( z*Z+V@#KD1;S_@awJRm#ZvJ4}KfwPPp;zjMw%4aANjVcg}bg%x48wOEWSPmi}V6_6B zfrK$lQQB1$i+X^bGb2485`ct-EGKc5d>5PZ*u0`)c^TvWydzgWhgqYbjS4QkzJdb* z)qGlk41}~6dO{-8qZ-x~}2`1=1F`R@4#;Xv9bn4|o%FfvbycC;L885uc5JA_qXq$o;qYk zAB$`rLpGn)W&>=qW9z7_I>fl%3xi!F3gf8yuxYv5Sg7@JrT|;noiQkdwWBxb!<~V|d`oZ3e z_->Z@GNwukS#|pgSwR-WVtZ|H6e-No?(FeLRiVy=e^Xe(VFq;^C@7pvEc7QG=NWje zKT~uZ9(j&aKf8W^wYK)vz592ayQ`0!TdTM3+;-N!so$3HUm7AYQyD!oUm(fJDmEWt zvw#iOsD~QEu?Q*LuQ0ho$x^Z{EL|$IrE;kPk1cUU)s`5Hv~1WfilA&V=i%HTiRJ)P SAeELgb5@YejqgizGWQPz-F^=M diff --git a/Jobs_Collections/venv/Lib/python3.8/site-packages/astroid/__pycache__/util.cpython-38.pyc b/Jobs_Collections/venv/Lib/python3.8/site-packages/astroid/__pycache__/util.cpython-38.pyc deleted file mode 100644 index 876dca0c395e5be44dfbd1df3867e8ced13d75a2..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 5833 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 (3, 8) -if PY38: - # On Python 3.8, typed_ast was merged back into `ast` - _ast_py3 = ast - - -FunctionType = namedtuple("FunctionType", ["argtypes", "returns"]) - - -class ParserModule( - namedtuple( - "ParserModule", - [ - "module", - "unary_op_classes", - "cmp_op_classes", - "bool_op_classes", - "bin_op_classes", - "context_classes", - ], - ) -): - def parse(self, string: str, type_comments=True): - if self.module is _ast_py3: - if PY38: - parse_func = partial(self.module.parse, type_comments=type_comments) - else: - parse_func = partial( - self.module.parse, feature_version=sys.version_info.minor - ) - else: - parse_func = self.module.parse - return parse_func(string) - - -def parse_function_type_comment(type_comment: str) -> Optional[FunctionType]: - """Given a correct type comment, obtain a FunctionType object""" - if _ast_py3 is None: - return None - - func_type = _ast_py3.parse(type_comment, "", "func_type") - return FunctionType(argtypes=func_type.argtypes, returns=func_type.returns) - - -def get_parser_module(type_comments=True) -> ParserModule: - if not type_comments: - parser_module = ast - else: - parser_module = _ast_py3 - parser_module = parser_module or ast - - unary_op_classes = _unary_operators_from_module(parser_module) - cmp_op_classes = _compare_operators_from_module(parser_module) - bool_op_classes = _bool_operators_from_module(parser_module) - bin_op_classes = _binary_operators_from_module(parser_module) - context_classes = _contexts_from_module(parser_module) - - return ParserModule( - parser_module, - unary_op_classes, - cmp_op_classes, - bool_op_classes, - bin_op_classes, - context_classes, - ) - - -def _unary_operators_from_module(module): - return {module.UAdd: "+", module.USub: "-", module.Not: "not", module.Invert: "~"} - - -def _binary_operators_from_module(module): - binary_operators = { - module.Add: "+", - module.BitAnd: "&", - module.BitOr: "|", - module.BitXor: "^", - module.Div: "/", - module.FloorDiv: "//", - module.MatMult: "@", - module.Mod: "%", - module.Mult: "*", - module.Pow: "**", - module.Sub: "-", - module.LShift: "<<", - module.RShift: ">>", - } - return binary_operators - - -def _bool_operators_from_module(module): - return {module.And: "and", module.Or: "or"} - - -def _compare_operators_from_module(module): - return { - module.Eq: "==", - module.Gt: ">", - module.GtE: ">=", - module.In: "in", - module.Is: "is", - module.IsNot: "is not", - module.Lt: "<", - module.LtE: "<=", - module.NotEq: "!=", - module.NotIn: "not in", - } - - -def _contexts_from_module(module): - return { - module.Load: astroid.Load, - module.Store: astroid.Store, - module.Del: astroid.Del, - module.Param: astroid.Store, - } diff --git a/Jobs_Collections/venv/Lib/python3.8/site-packages/astroid/arguments.py b/Jobs_Collections/venv/Lib/python3.8/site-packages/astroid/arguments.py deleted file mode 100644 index 5f4d909..0000000 --- a/Jobs_Collections/venv/Lib/python3.8/site-packages/astroid/arguments.py +++ /dev/null @@ -1,300 +0,0 @@ -# Copyright (c) 2015-2016, 2018-2020 Claudiu Popa -# Copyright (c) 2015-2016 Ceridwen -# Copyright (c) 2018 Bryce Guinta -# Copyright (c) 2018 Nick Drozd -# Copyright (c) 2018 Anthony Sottile - -# Licensed under the LGPL: https://www.gnu.org/licenses/old-licenses/lgpl-2.1.en.html -# For details: https://github.com/PyCQA/astroid/blob/master/COPYING.LESSER - - -from astroid import bases -from astroid import context as contextmod -from astroid import exceptions -from astroid import nodes -from astroid import util - - -class CallSite: - """Class for understanding arguments passed into a call site - - It needs a call context, which contains the arguments and the - keyword arguments that were passed into a given call site. - In order to infer what an argument represents, call :meth:`infer_argument` - with the corresponding function node and the argument name. - - :param callcontext: - An instance of :class:`astroid.context.CallContext`, that holds - the arguments for the call site. - :param argument_context_map: - Additional contexts per node, passed in from :attr:`astroid.context.Context.extra_context` - :param context: - An instance of :class:`astroid.context.Context`. - """ - - def __init__(self, callcontext, argument_context_map=None, context=None): - if argument_context_map is None: - argument_context_map = {} - self.argument_context_map = argument_context_map - args = callcontext.args - keywords = callcontext.keywords - self.duplicated_keywords = set() - self._unpacked_args = self._unpack_args(args, context=context) - self._unpacked_kwargs = self._unpack_keywords(keywords, context=context) - - self.positional_arguments = [ - arg for arg in self._unpacked_args if arg is not util.Uninferable - ] - self.keyword_arguments = { - key: value - for key, value in self._unpacked_kwargs.items() - if value is not util.Uninferable - } - - @classmethod - def from_call(cls, call_node, context=None): - """Get a CallSite object from the given Call node. - - :param context: - An instance of :class:`astroid.context.Context` that will be used - to force a single inference path. - """ - - # Determine the callcontext from the given `context` object if any. - context = context or contextmod.InferenceContext() - callcontext = contextmod.CallContext(call_node.args, call_node.keywords) - return cls(callcontext, context=context) - - def has_invalid_arguments(self): - """Check if in the current CallSite were passed *invalid* arguments - - This can mean multiple things. For instance, if an unpacking - of an invalid object was passed, then this method will return True. - Other cases can be when the arguments can't be inferred by astroid, - for example, by passing objects which aren't known statically. - """ - return len(self.positional_arguments) != len(self._unpacked_args) - - def has_invalid_keywords(self): - """Check if in the current CallSite were passed *invalid* keyword arguments - - For instance, unpacking a dictionary with integer keys is invalid - (**{1:2}), because the keys must be strings, which will make this - method to return True. Other cases where this might return True if - objects which can't be inferred were passed. - """ - return len(self.keyword_arguments) != len(self._unpacked_kwargs) - - def _unpack_keywords(self, keywords, context=None): - values = {} - context = context or contextmod.InferenceContext() - context.extra_context = self.argument_context_map - for name, value in keywords: - if name is None: - # Then it's an unpacking operation (**) - try: - inferred = next(value.infer(context=context)) - except exceptions.InferenceError: - values[name] = util.Uninferable - continue - - if not isinstance(inferred, nodes.Dict): - # Not something we can work with. - values[name] = util.Uninferable - continue - - for dict_key, dict_value in inferred.items: - try: - dict_key = next(dict_key.infer(context=context)) - except exceptions.InferenceError: - values[name] = util.Uninferable - continue - if not isinstance(dict_key, nodes.Const): - values[name] = util.Uninferable - continue - if not isinstance(dict_key.value, str): - values[name] = util.Uninferable - continue - if dict_key.value in values: - # The name is already in the dictionary - values[dict_key.value] = util.Uninferable - self.duplicated_keywords.add(dict_key.value) - continue - values[dict_key.value] = dict_value - else: - values[name] = value - return values - - def _unpack_args(self, args, context=None): - values = [] - context = context or contextmod.InferenceContext() - context.extra_context = self.argument_context_map - for arg in args: - if isinstance(arg, nodes.Starred): - try: - inferred = next(arg.value.infer(context=context)) - except exceptions.InferenceError: - values.append(util.Uninferable) - continue - - if inferred is util.Uninferable: - values.append(util.Uninferable) - continue - if not hasattr(inferred, "elts"): - values.append(util.Uninferable) - continue - values.extend(inferred.elts) - else: - values.append(arg) - return values - - def infer_argument(self, funcnode, name, context): - """infer a function argument value according to the call context - - Arguments: - funcnode: The function being called. - name: The name of the argument whose value is being inferred. - context: Inference context object - """ - if name in self.duplicated_keywords: - raise exceptions.InferenceError( - "The arguments passed to {func!r} " " have duplicate keywords.", - call_site=self, - func=funcnode, - arg=name, - context=context, - ) - - # Look into the keywords first, maybe it's already there. - try: - return self.keyword_arguments[name].infer(context) - except KeyError: - pass - - # Too many arguments given and no variable arguments. - if len(self.positional_arguments) > len(funcnode.args.args): - if not funcnode.args.vararg: - raise exceptions.InferenceError( - "Too many positional arguments " - "passed to {func!r} that does " - "not have *args.", - call_site=self, - func=funcnode, - arg=name, - context=context, - ) - - positional = self.positional_arguments[: len(funcnode.args.args)] - vararg = self.positional_arguments[len(funcnode.args.args) :] - argindex = funcnode.args.find_argname(name)[0] - kwonlyargs = {arg.name for arg in funcnode.args.kwonlyargs} - kwargs = { - key: value - for key, value in self.keyword_arguments.items() - if key not in kwonlyargs - } - # If there are too few positionals compared to - # what the function expects to receive, check to see - # if the missing positional arguments were passed - # as keyword arguments and if so, place them into the - # positional args list. - if len(positional) < len(funcnode.args.args): - for func_arg in funcnode.args.args: - if func_arg.name in kwargs: - arg = kwargs.pop(func_arg.name) - positional.append(arg) - - if argindex is not None: - # 2. first argument of instance/class method - if argindex == 0 and funcnode.type in ("method", "classmethod"): - if context.boundnode is not None: - boundnode = context.boundnode - else: - # XXX can do better ? - boundnode = funcnode.parent.frame() - - if isinstance(boundnode, nodes.ClassDef): - # Verify that we're accessing a method - # of the metaclass through a class, as in - # `cls.metaclass_method`. In this case, the - # first argument is always the class. - method_scope = funcnode.parent.scope() - if method_scope is boundnode.metaclass(): - return iter((boundnode,)) - - if funcnode.type == "method": - if not isinstance(boundnode, bases.Instance): - boundnode = boundnode.instantiate_class() - return iter((boundnode,)) - if funcnode.type == "classmethod": - return iter((boundnode,)) - # if we have a method, extract one position - # from the index, so we'll take in account - # the extra parameter represented by `self` or `cls` - if funcnode.type in ("method", "classmethod"): - argindex -= 1 - # 2. search arg index - try: - return self.positional_arguments[argindex].infer(context) - except IndexError: - pass - - if funcnode.args.kwarg == name: - # It wants all the keywords that were passed into - # the call site. - if self.has_invalid_keywords(): - raise exceptions.InferenceError( - "Inference failed to find values for all keyword arguments " - "to {func!r}: {unpacked_kwargs!r} doesn't correspond to " - "{keyword_arguments!r}.", - keyword_arguments=self.keyword_arguments, - unpacked_kwargs=self._unpacked_kwargs, - call_site=self, - func=funcnode, - arg=name, - context=context, - ) - kwarg = nodes.Dict( - lineno=funcnode.args.lineno, - col_offset=funcnode.args.col_offset, - parent=funcnode.args, - ) - kwarg.postinit( - [(nodes.const_factory(key), value) for key, value in kwargs.items()] - ) - return iter((kwarg,)) - if funcnode.args.vararg == name: - # It wants all the args that were passed into - # the call site. - if self.has_invalid_arguments(): - raise exceptions.InferenceError( - "Inference failed to find values for all positional " - "arguments to {func!r}: {unpacked_args!r} doesn't " - "correspond to {positional_arguments!r}.", - positional_arguments=self.positional_arguments, - unpacked_args=self._unpacked_args, - call_site=self, - func=funcnode, - arg=name, - context=context, - ) - args = nodes.Tuple( - lineno=funcnode.args.lineno, - col_offset=funcnode.args.col_offset, - parent=funcnode.args, - ) - args.postinit(vararg) - return iter((args,)) - - # Check if it's a default parameter. - try: - return funcnode.args.default_value(name).infer(context) - except exceptions.NoDefault: - pass - raise exceptions.InferenceError( - "No value found for argument {name} to " "{func!r}", - call_site=self, - func=funcnode, - arg=name, - context=context, - ) diff --git a/Jobs_Collections/venv/Lib/python3.8/site-packages/astroid/as_string.py b/Jobs_Collections/venv/Lib/python3.8/site-packages/astroid/as_string.py deleted file mode 100644 index 653411f..0000000 --- a/Jobs_Collections/venv/Lib/python3.8/site-packages/astroid/as_string.py +++ /dev/null @@ -1,631 +0,0 @@ -# -*- coding: utf-8 -*- -# Copyright (c) 2009-2011, 2013-2014 LOGILAB S.A. (Paris, FRANCE) -# Copyright (c) 2010 Daniel Harding -# Copyright (c) 2013-2016, 2018-2020 Claudiu Popa -# Copyright (c) 2013-2014 Google, Inc. -# Copyright (c) 2015-2016 Ceridwen -# Copyright (c) 2016 Jared Garst -# Copyright (c) 2016 Jakub Wilk -# Copyright (c) 2017, 2019 ลukasz Rogalski -# Copyright (c) 2017 rr- -# Copyright (c) 2018 Serhiy Storchaka -# Copyright (c) 2018 Ville Skyttรค -# Copyright (c) 2018 brendanator -# Copyright (c) 2018 Nick Drozd -# Copyright (c) 2019 Alex Hall -# Copyright (c) 2019 Hugo van Kemenade - -# Licensed under the LGPL: https://www.gnu.org/licenses/old-licenses/lgpl-2.1.en.html -# For details: https://github.com/PyCQA/astroid/blob/master/COPYING.LESSER - -"""This module renders Astroid nodes as string: - -* :func:`to_code` function return equivalent (hopefully valid) python string - -* :func:`dump` function return an internal representation of nodes found - in the tree, useful for debugging or understanding the tree structure -""" - -# pylint: disable=unused-argument - -DOC_NEWLINE = "\0" - - -class AsStringVisitor: - """Visitor to render an Astroid node as a valid python code string""" - - def __init__(self, indent): - self.indent = indent - - def __call__(self, node): - """Makes this visitor behave as a simple function""" - return node.accept(self).replace(DOC_NEWLINE, "\n") - - def _docs_dedent(self, doc): - """Stop newlines in docs being indented by self._stmt_list""" - return '\n%s"""%s"""' % (self.indent, doc.replace("\n", DOC_NEWLINE)) - - def _stmt_list(self, stmts, indent=True): - """return a list of nodes to string""" - stmts = "\n".join(nstr for nstr in [n.accept(self) for n in stmts] if nstr) - if indent: - return self.indent + stmts.replace("\n", "\n" + self.indent) - - return stmts - - def _precedence_parens(self, node, child, is_left=True): - """Wrap child in parens only if required to keep same semantics""" - if self._should_wrap(node, child, is_left): - return "(%s)" % child.accept(self) - - return child.accept(self) - - def _should_wrap(self, node, child, is_left): - """Wrap child if: - - it has lower precedence - - same precedence with position opposite to associativity direction - """ - node_precedence = node.op_precedence() - child_precedence = child.op_precedence() - - if node_precedence > child_precedence: - # 3 * (4 + 5) - return True - - if ( - node_precedence == child_precedence - and is_left != node.op_left_associative() - ): - # 3 - (4 - 5) - # (2**3)**4 - return True - - return False - - ## visit_ methods ########################################### - - def visit_await(self, node): - return "await %s" % node.value.accept(self) - - def visit_asyncwith(self, node): - return "async %s" % self.visit_with(node) - - def visit_asyncfor(self, node): - return "async %s" % self.visit_for(node) - - def visit_arguments(self, node): - """return an astroid.Function node as string""" - return node.format_args() - - def visit_assignattr(self, node): - """return an astroid.AssAttr node as string""" - return self.visit_attribute(node) - - def visit_assert(self, node): - """return an astroid.Assert node as string""" - if node.fail: - return "assert %s, %s" % (node.test.accept(self), node.fail.accept(self)) - return "assert %s" % node.test.accept(self) - - def visit_assignname(self, node): - """return an astroid.AssName node as string""" - return node.name - - def visit_assign(self, node): - """return an astroid.Assign node as string""" - lhs = " = ".join(n.accept(self) for n in node.targets) - return "%s = %s" % (lhs, node.value.accept(self)) - - def visit_augassign(self, node): - """return an astroid.AugAssign node as string""" - return "%s %s %s" % (node.target.accept(self), node.op, node.value.accept(self)) - - def visit_annassign(self, node): - """Return an astroid.AugAssign node as string""" - - target = node.target.accept(self) - annotation = node.annotation.accept(self) - if node.value is None: - return "%s: %s" % (target, annotation) - return "%s: %s = %s" % (target, annotation, node.value.accept(self)) - - def visit_repr(self, node): - """return an astroid.Repr node as string""" - return "`%s`" % node.value.accept(self) - - def visit_binop(self, node): - """return an astroid.BinOp node as string""" - left = self._precedence_parens(node, node.left) - right = self._precedence_parens(node, node.right, is_left=False) - if node.op == "**": - return "%s%s%s" % (left, node.op, right) - - return "%s %s %s" % (left, node.op, right) - - def visit_boolop(self, node): - """return an astroid.BoolOp node as string""" - values = ["%s" % self._precedence_parens(node, n) for n in node.values] - return (" %s " % node.op).join(values) - - def visit_break(self, node): - """return an astroid.Break node as string""" - return "break" - - def visit_call(self, node): - """return an astroid.Call node as string""" - expr_str = self._precedence_parens(node, node.func) - args = [arg.accept(self) for arg in node.args] - if node.keywords: - keywords = [kwarg.accept(self) for kwarg in node.keywords] - else: - keywords = [] - - args.extend(keywords) - return "%s(%s)" % (expr_str, ", ".join(args)) - - def visit_classdef(self, node): - """return an astroid.ClassDef node as string""" - decorate = node.decorators.accept(self) if node.decorators else "" - args = [n.accept(self) for n in node.bases] - if node._metaclass and not node.has_metaclass_hack(): - args.append("metaclass=" + node._metaclass.accept(self)) - args += [n.accept(self) for n in node.keywords] - args = "(%s)" % ", ".join(args) if args else "" - docs = self._docs_dedent(node.doc) if node.doc else "" - return "\n\n%sclass %s%s:%s\n%s\n" % ( - decorate, - node.name, - args, - docs, - self._stmt_list(node.body), - ) - - def visit_compare(self, node): - """return an astroid.Compare node as string""" - rhs_str = " ".join( - [ - "%s %s" % (op, self._precedence_parens(node, expr, is_left=False)) - for op, expr in node.ops - ] - ) - return "%s %s" % (self._precedence_parens(node, node.left), rhs_str) - - def visit_comprehension(self, node): - """return an astroid.Comprehension node as string""" - ifs = "".join(" if %s" % n.accept(self) for n in node.ifs) - generated = "for %s in %s%s" % ( - node.target.accept(self), - node.iter.accept(self), - ifs, - ) - return "%s%s" % ("async " if node.is_async else "", generated) - - def visit_const(self, node): - """return an astroid.Const node as string""" - if node.value is Ellipsis: - return "..." - return repr(node.value) - - def visit_continue(self, node): - """return an astroid.Continue node as string""" - return "continue" - - def visit_delete(self, node): # XXX check if correct - """return an astroid.Delete node as string""" - return "del %s" % ", ".join(child.accept(self) for child in node.targets) - - def visit_delattr(self, node): - """return an astroid.DelAttr node as string""" - return self.visit_attribute(node) - - def visit_delname(self, node): - """return an astroid.DelName node as string""" - return node.name - - def visit_decorators(self, node): - """return an astroid.Decorators node as string""" - return "@%s\n" % "\n@".join(item.accept(self) for item in node.nodes) - - def visit_dict(self, node): - """return an astroid.Dict node as string""" - return "{%s}" % ", ".join(self._visit_dict(node)) - - def _visit_dict(self, node): - for key, value in node.items: - key = key.accept(self) - value = value.accept(self) - if key == "**": - # It can only be a DictUnpack node. - yield key + value - else: - yield "%s: %s" % (key, value) - - def visit_dictunpack(self, node): - return "**" - - def visit_dictcomp(self, node): - """return an astroid.DictComp node as string""" - return "{%s: %s %s}" % ( - node.key.accept(self), - node.value.accept(self), - " ".join(n.accept(self) for n in node.generators), - ) - - def visit_expr(self, node): - """return an astroid.Discard node as string""" - return node.value.accept(self) - - def visit_emptynode(self, node): - """dummy method for visiting an Empty node""" - return "" - - def visit_excepthandler(self, node): - if node.type: - if node.name: - excs = "except %s as %s" % ( - node.type.accept(self), - node.name.accept(self), - ) - else: - excs = "except %s" % node.type.accept(self) - else: - excs = "except" - return "%s:\n%s" % (excs, self._stmt_list(node.body)) - - def visit_ellipsis(self, node): - """return an astroid.Ellipsis node as string""" - return "..." - - def visit_empty(self, node): - """return an Empty node as string""" - return "" - - def visit_exec(self, node): - """return an astroid.Exec node as string""" - if node.locals: - return "exec %s in %s, %s" % ( - node.expr.accept(self), - node.locals.accept(self), - node.globals.accept(self), - ) - if node.globals: - return "exec %s in %s" % (node.expr.accept(self), node.globals.accept(self)) - return "exec %s" % node.expr.accept(self) - - def visit_extslice(self, node): - """return an astroid.ExtSlice node as string""" - return ", ".join(dim.accept(self) for dim in node.dims) - - def visit_for(self, node): - """return an astroid.For node as string""" - fors = "for %s in %s:\n%s" % ( - node.target.accept(self), - node.iter.accept(self), - self._stmt_list(node.body), - ) - if node.orelse: - fors = "%s\nelse:\n%s" % (fors, self._stmt_list(node.orelse)) - return fors - - def visit_importfrom(self, node): - """return an astroid.ImportFrom node as string""" - return "from %s import %s" % ( - "." * (node.level or 0) + node.modname, - _import_string(node.names), - ) - - def visit_joinedstr(self, node): - string = "".join( - # Use repr on the string literal parts - # to get proper escapes, e.g. \n, \\, \" - # But strip the quotes off the ends - # (they will always be one character: ' or ") - repr(value.value)[1:-1] - # Literal braces must be doubled to escape them - .replace("{", "{{").replace("}", "}}") - # Each value in values is either a string literal (Const) - # or a FormattedValue - if type(value).__name__ == "Const" else value.accept(self) - for value in node.values - ) - - # Try to find surrounding quotes that don't appear at all in the string. - # Because the formatted values inside {} can't contain backslash (\) - # using a triple quote is sometimes necessary - for quote in ["'", '"', '"""', "'''"]: - if quote not in string: - break - - return "f" + quote + string + quote - - def visit_formattedvalue(self, node): - result = node.value.accept(self) - if node.conversion and node.conversion >= 0: - # e.g. if node.conversion == 114: result += "!r" - result += "!" + chr(node.conversion) - if node.format_spec: - # The format spec is itself a JoinedString, i.e. an f-string - # We strip the f and quotes of the ends - result += ":" + node.format_spec.accept(self)[2:-1] - return "{%s}" % result - - def handle_functiondef(self, node, keyword): - """return a (possibly async) function definition node as string""" - decorate = node.decorators.accept(self) if node.decorators else "" - docs = self._docs_dedent(node.doc) if node.doc else "" - trailer = ":" - if node.returns: - return_annotation = " -> " + node.returns.as_string() - trailer = return_annotation + ":" - def_format = "\n%s%s %s(%s)%s%s\n%s" - return def_format % ( - decorate, - keyword, - node.name, - node.args.accept(self), - trailer, - docs, - self._stmt_list(node.body), - ) - - def visit_functiondef(self, node): - """return an astroid.FunctionDef node as string""" - return self.handle_functiondef(node, "def") - - def visit_asyncfunctiondef(self, node): - """return an astroid.AsyncFunction node as string""" - return self.handle_functiondef(node, "async def") - - def visit_generatorexp(self, node): - """return an astroid.GeneratorExp node as string""" - return "(%s %s)" % ( - node.elt.accept(self), - " ".join(n.accept(self) for n in node.generators), - ) - - def visit_attribute(self, node): - """return an astroid.Getattr node as string""" - left = self._precedence_parens(node, node.expr) - if left.isdigit(): - left = "(%s)" % left - return "%s.%s" % (left, node.attrname) - - def visit_global(self, node): - """return an astroid.Global node as string""" - return "global %s" % ", ".join(node.names) - - def visit_if(self, node): - """return an astroid.If node as string""" - ifs = ["if %s:\n%s" % (node.test.accept(self), self._stmt_list(node.body))] - if node.has_elif_block(): - ifs.append("el%s" % self._stmt_list(node.orelse, indent=False)) - elif node.orelse: - ifs.append("else:\n%s" % self._stmt_list(node.orelse)) - return "\n".join(ifs) - - def visit_ifexp(self, node): - """return an astroid.IfExp node as string""" - return "%s if %s else %s" % ( - self._precedence_parens(node, node.body, is_left=True), - self._precedence_parens(node, node.test, is_left=True), - self._precedence_parens(node, node.orelse, is_left=False), - ) - - def visit_import(self, node): - """return an astroid.Import node as string""" - return "import %s" % _import_string(node.names) - - def visit_keyword(self, node): - """return an astroid.Keyword node as string""" - if node.arg is None: - return "**%s" % node.value.accept(self) - return "%s=%s" % (node.arg, node.value.accept(self)) - - def visit_lambda(self, node): - """return an astroid.Lambda node as string""" - args = node.args.accept(self) - body = node.body.accept(self) - if args: - return "lambda %s: %s" % (args, body) - - return "lambda: %s" % body - - def visit_list(self, node): - """return an astroid.List node as string""" - return "[%s]" % ", ".join(child.accept(self) for child in node.elts) - - def visit_listcomp(self, node): - """return an astroid.ListComp node as string""" - return "[%s %s]" % ( - node.elt.accept(self), - " ".join(n.accept(self) for n in node.generators), - ) - - def visit_module(self, node): - """return an astroid.Module node as string""" - docs = '"""%s"""\n\n' % node.doc if node.doc else "" - return docs + "\n".join(n.accept(self) for n in node.body) + "\n\n" - - def visit_name(self, node): - """return an astroid.Name node as string""" - return node.name - - def visit_namedexpr(self, node): - """Return an assignment expression node as string""" - target = node.target.accept(self) - value = node.value.accept(self) - return "%s := %s" % (target, value) - - def visit_nonlocal(self, node): - """return an astroid.Nonlocal node as string""" - return "nonlocal %s" % ", ".join(node.names) - - def visit_pass(self, node): - """return an astroid.Pass node as string""" - return "pass" - - def visit_print(self, node): - """return an astroid.Print node as string""" - nodes = ", ".join(n.accept(self) for n in node.values) - if not node.nl: - nodes = "%s," % nodes - if node.dest: - return "print >> %s, %s" % (node.dest.accept(self), nodes) - return "print %s" % nodes - - def visit_raise(self, node): - """return an astroid.Raise node as string""" - if node.exc: - if node.cause: - return "raise %s from %s" % ( - node.exc.accept(self), - node.cause.accept(self), - ) - return "raise %s" % node.exc.accept(self) - return "raise" - - def visit_return(self, node): - """return an astroid.Return node as string""" - if node.is_tuple_return() and len(node.value.elts) > 1: - elts = [child.accept(self) for child in node.value.elts] - return "return %s" % ", ".join(elts) - - if node.value: - return "return %s" % node.value.accept(self) - - return "return" - - def visit_index(self, node): - """return an astroid.Index node as string""" - return node.value.accept(self) - - def visit_set(self, node): - """return an astroid.Set node as string""" - return "{%s}" % ", ".join(child.accept(self) for child in node.elts) - - def visit_setcomp(self, node): - """return an astroid.SetComp node as string""" - return "{%s %s}" % ( - node.elt.accept(self), - " ".join(n.accept(self) for n in node.generators), - ) - - def visit_slice(self, node): - """return an astroid.Slice node as string""" - lower = node.lower.accept(self) if node.lower else "" - upper = node.upper.accept(self) if node.upper else "" - step = node.step.accept(self) if node.step else "" - if step: - return "%s:%s:%s" % (lower, upper, step) - return "%s:%s" % (lower, upper) - - def visit_subscript(self, node): - """return an astroid.Subscript node as string""" - idx = node.slice - if idx.__class__.__name__.lower() == "index": - idx = idx.value - idxstr = idx.accept(self) - if idx.__class__.__name__.lower() == "tuple" and idx.elts: - # Remove parenthesis in tuple and extended slice. - # a[(::1, 1:)] is not valid syntax. - idxstr = idxstr[1:-1] - return "%s[%s]" % (self._precedence_parens(node, node.value), idxstr) - - def visit_tryexcept(self, node): - """return an astroid.TryExcept node as string""" - trys = ["try:\n%s" % self._stmt_list(node.body)] - for handler in node.handlers: - trys.append(handler.accept(self)) - if node.orelse: - trys.append("else:\n%s" % self._stmt_list(node.orelse)) - return "\n".join(trys) - - def visit_tryfinally(self, node): - """return an astroid.TryFinally node as string""" - return "try:\n%s\nfinally:\n%s" % ( - self._stmt_list(node.body), - self._stmt_list(node.finalbody), - ) - - def visit_tuple(self, node): - """return an astroid.Tuple node as string""" - if len(node.elts) == 1: - return "(%s, )" % node.elts[0].accept(self) - return "(%s)" % ", ".join(child.accept(self) for child in node.elts) - - def visit_unaryop(self, node): - """return an astroid.UnaryOp node as string""" - if node.op == "not": - operator = "not " - else: - operator = node.op - return "%s%s" % (operator, self._precedence_parens(node, node.operand)) - - def visit_while(self, node): - """return an astroid.While node as string""" - whiles = "while %s:\n%s" % (node.test.accept(self), self._stmt_list(node.body)) - if node.orelse: - whiles = "%s\nelse:\n%s" % (whiles, self._stmt_list(node.orelse)) - return whiles - - def visit_with(self, node): # 'with' without 'as' is possible - """return an astroid.With node as string""" - items = ", ".join( - ("%s" % expr.accept(self)) + (vars and " as %s" % (vars.accept(self)) or "") - for expr, vars in node.items - ) - return "with %s:\n%s" % (items, self._stmt_list(node.body)) - - def visit_yield(self, node): - """yield an ast.Yield node as string""" - yi_val = (" " + node.value.accept(self)) if node.value else "" - expr = "yield" + yi_val - if node.parent.is_statement: - return expr - - return "(%s)" % (expr,) - - def visit_yieldfrom(self, node): - """ Return an astroid.YieldFrom node as string. """ - yi_val = (" " + node.value.accept(self)) if node.value else "" - expr = "yield from" + yi_val - if node.parent.is_statement: - return expr - - return "(%s)" % (expr,) - - def visit_starred(self, node): - """return Starred node as string""" - return "*" + node.value.accept(self) - - # These aren't for real AST nodes, but for inference objects. - - def visit_frozenset(self, node): - return node.parent.accept(self) - - def visit_super(self, node): - return node.parent.accept(self) - - def visit_uninferable(self, node): - return str(node) - - def visit_property(self, node): - return node.function.accept(self) - - def visit_evaluatedobject(self, node): - return node.original.accept(self) - - -def _import_string(names): - """return a list of (name, asname) formatted as a string""" - _names = [] - for name, asname in names: - if asname is not None: - _names.append("%s as %s" % (name, asname)) - else: - _names.append(name) - return ", ".join(_names) - - -# This sets the default indent to 4 spaces. -to_code = AsStringVisitor(" ") diff --git a/Jobs_Collections/venv/Lib/python3.8/site-packages/astroid/bases.py b/Jobs_Collections/venv/Lib/python3.8/site-packages/astroid/bases.py deleted file mode 100644 index 9c74303..0000000 --- a/Jobs_Collections/venv/Lib/python3.8/site-packages/astroid/bases.py +++ /dev/null @@ -1,548 +0,0 @@ -# -*- coding: utf-8 -*- -# Copyright (c) 2009-2011, 2013-2014 LOGILAB S.A. (Paris, FRANCE) -# Copyright (c) 2012 FELD Boris -# Copyright (c) 2014-2020 Claudiu Popa -# Copyright (c) 2014 Google, Inc. -# Copyright (c) 2014 Eevee (Alex Munroe) -# Copyright (c) 2015-2016 Ceridwen -# Copyright (c) 2015 Florian Bruhin -# Copyright (c) 2016-2017 Derek Gustafson -# Copyright (c) 2017 Calen Pennington -# Copyright (c) 2018-2019 hippo91 -# Copyright (c) 2018 Ville Skyttรค -# Copyright (c) 2018 Bryce Guinta -# Copyright (c) 2018 Nick Drozd -# Copyright (c) 2018 Daniel Colascione -# Copyright (c) 2019 Hugo van Kemenade - -# Licensed under the LGPL: https://www.gnu.org/licenses/old-licenses/lgpl-2.1.en.html -# For details: https://github.com/PyCQA/astroid/blob/master/COPYING.LESSER - -"""This module contains base classes and functions for the nodes and some -inference utils. -""" - -import builtins -import collections - -from astroid import context as contextmod -from astroid import exceptions -from astroid import util - -objectmodel = util.lazy_import("interpreter.objectmodel") -helpers = util.lazy_import("helpers") -BUILTINS = builtins.__name__ -manager = util.lazy_import("manager") -MANAGER = manager.AstroidManager() - -# TODO: check if needs special treatment -BUILTINS = "builtins" -BOOL_SPECIAL_METHOD = "__bool__" - -PROPERTIES = {BUILTINS + ".property", "abc.abstractproperty"} -# List of possible property names. We use this list in order -# to see if a method is a property or not. This should be -# pretty reliable and fast, the alternative being to check each -# decorator to see if its a real property-like descriptor, which -# can be too complicated. -# Also, these aren't qualified, because each project can -# define them, we shouldn't expect to know every possible -# property-like decorator! -POSSIBLE_PROPERTIES = { - "cached_property", - "cachedproperty", - "lazyproperty", - "lazy_property", - "reify", - "lazyattribute", - "lazy_attribute", - "LazyProperty", - "lazy", - "cache_readonly", -} - - -def _is_property(meth, context=None): - decoratornames = meth.decoratornames(context=context) - if PROPERTIES.intersection(decoratornames): - return True - stripped = { - name.split(".")[-1] for name in decoratornames if name is not util.Uninferable - } - if any(name in stripped for name in POSSIBLE_PROPERTIES): - return True - - # Lookup for subclasses of *property* - if not meth.decorators: - return False - for decorator in meth.decorators.nodes or (): - inferred = helpers.safe_infer(decorator, context=context) - if inferred is None or inferred is util.Uninferable: - continue - if inferred.__class__.__name__ == "ClassDef": - for base_class in inferred.bases: - if base_class.__class__.__name__ != "Name": - continue - module, _ = base_class.lookup(base_class.name) - if module.name == BUILTINS and base_class.name == "property": - return True - - return False - - -class Proxy: - """a simple proxy object - - Note: - - Subclasses of this object will need a custom __getattr__ - if new instance attributes are created. See the Const class - """ - - _proxied = None # proxied object may be set by class or by instance - - def __init__(self, proxied=None): - if proxied is not None: - self._proxied = proxied - - def __getattr__(self, name): - if name == "_proxied": - return getattr(self.__class__, "_proxied") - if name in self.__dict__: - return self.__dict__[name] - return getattr(self._proxied, name) - - def infer(self, context=None): - yield self - - -def _infer_stmts(stmts, context, frame=None): - """Return an iterator on statements inferred by each statement in *stmts*.""" - inferred = False - if context is not None: - name = context.lookupname - context = context.clone() - else: - name = None - context = contextmod.InferenceContext() - - for stmt in stmts: - if stmt is util.Uninferable: - yield stmt - inferred = True - continue - context.lookupname = stmt._infer_name(frame, name) - try: - for inferred in stmt.infer(context=context): - yield inferred - inferred = True - except exceptions.NameInferenceError: - continue - except exceptions.InferenceError: - yield util.Uninferable - inferred = True - if not inferred: - raise exceptions.InferenceError( - "Inference failed for all members of {stmts!r}.", - stmts=stmts, - frame=frame, - context=context, - ) - - -def _infer_method_result_truth(instance, method_name, context): - # Get the method from the instance and try to infer - # its return's truth value. - meth = next(instance.igetattr(method_name, context=context), None) - if meth and hasattr(meth, "infer_call_result"): - if not meth.callable(): - return util.Uninferable - try: - for value in meth.infer_call_result(instance, context=context): - if value is util.Uninferable: - return value - - inferred = next(value.infer(context=context)) - return inferred.bool_value() - except exceptions.InferenceError: - pass - return util.Uninferable - - -class BaseInstance(Proxy): - """An instance base class, which provides lookup methods for potential instances.""" - - special_attributes = None - - def display_type(self): - return "Instance of" - - def getattr(self, name, context=None, lookupclass=True): - try: - values = self._proxied.instance_attr(name, context) - except exceptions.AttributeInferenceError as exc: - if self.special_attributes and name in self.special_attributes: - return [self.special_attributes.lookup(name)] - - if lookupclass: - # Class attributes not available through the instance - # unless they are explicitly defined. - return self._proxied.getattr(name, context, class_context=False) - - raise exceptions.AttributeInferenceError( - target=self, attribute=name, context=context - ) from exc - # since we've no context information, return matching class members as - # well - if lookupclass: - try: - return values + self._proxied.getattr( - name, context, class_context=False - ) - except exceptions.AttributeInferenceError: - pass - return values - - def igetattr(self, name, context=None): - """inferred getattr""" - if not context: - context = contextmod.InferenceContext() - try: - # avoid recursively inferring the same attr on the same class - if context.push((self._proxied, name)): - raise exceptions.InferenceError( - message="Cannot infer the same attribute again", - node=self, - context=context, - ) - - # XXX frame should be self._proxied, or not ? - get_attr = self.getattr(name, context, lookupclass=False) - yield from _infer_stmts( - self._wrap_attr(get_attr, context), context, frame=self - ) - except exceptions.AttributeInferenceError as error: - try: - # fallback to class.igetattr since it has some logic to handle - # descriptors - # But only if the _proxied is the Class. - if self._proxied.__class__.__name__ != "ClassDef": - raise - attrs = self._proxied.igetattr(name, context, class_context=False) - yield from self._wrap_attr(attrs, context) - except exceptions.AttributeInferenceError as error: - raise exceptions.InferenceError(**vars(error)) from error - - def _wrap_attr(self, attrs, context=None): - """wrap bound methods of attrs in a InstanceMethod proxies""" - for attr in attrs: - if isinstance(attr, UnboundMethod): - if _is_property(attr): - yield from attr.infer_call_result(self, context) - else: - yield BoundMethod(attr, self) - elif hasattr(attr, "name") and attr.name == "": - if attr.args.arguments and attr.args.arguments[0].name == "self": - yield BoundMethod(attr, self) - continue - yield attr - else: - yield attr - - def infer_call_result(self, caller, context=None): - """infer what a class instance is returning when called""" - context = contextmod.bind_context_to_node(context, self) - inferred = False - for node in self._proxied.igetattr("__call__", context): - if node is util.Uninferable or not node.callable(): - continue - for res in node.infer_call_result(caller, context): - inferred = True - yield res - if not inferred: - raise exceptions.InferenceError(node=self, caller=caller, context=context) - - -class Instance(BaseInstance): - """A special node representing a class instance.""" - - # pylint: disable=unnecessary-lambda - special_attributes = util.lazy_descriptor(lambda: objectmodel.InstanceModel()) - - def __repr__(self): - return "" % ( - self._proxied.root().name, - self._proxied.name, - id(self), - ) - - def __str__(self): - return "Instance of %s.%s" % (self._proxied.root().name, self._proxied.name) - - def callable(self): - try: - self._proxied.getattr("__call__", class_context=False) - return True - except exceptions.AttributeInferenceError: - return False - - def pytype(self): - return self._proxied.qname() - - def display_type(self): - return "Instance of" - - def bool_value(self, context=None): - """Infer the truth value for an Instance - - The truth value of an instance is determined by these conditions: - - * if it implements __bool__ on Python 3 or __nonzero__ - on Python 2, then its bool value will be determined by - calling this special method and checking its result. - * when this method is not defined, __len__() is called, if it - is defined, and the object is considered true if its result is - nonzero. If a class defines neither __len__() nor __bool__(), - all its instances are considered true. - """ - context = context or contextmod.InferenceContext() - context.callcontext = contextmod.CallContext(args=[]) - context.boundnode = self - - try: - result = _infer_method_result_truth(self, BOOL_SPECIAL_METHOD, context) - except (exceptions.InferenceError, exceptions.AttributeInferenceError): - # Fallback to __len__. - try: - result = _infer_method_result_truth(self, "__len__", context) - except (exceptions.AttributeInferenceError, exceptions.InferenceError): - return True - return result - - # This is set in inference.py. - def getitem(self, index, context=None): - pass - - -class UnboundMethod(Proxy): - """a special node representing a method not bound to an instance""" - - # pylint: disable=unnecessary-lambda - special_attributes = util.lazy_descriptor(lambda: objectmodel.UnboundMethodModel()) - - def __repr__(self): - frame = self._proxied.parent.frame() - return "<%s %s of %s at 0x%s" % ( - self.__class__.__name__, - self._proxied.name, - frame.qname(), - id(self), - ) - - def implicit_parameters(self): - return 0 - - def is_bound(self): - return False - - def getattr(self, name, context=None): - if name in self.special_attributes: - return [self.special_attributes.lookup(name)] - return self._proxied.getattr(name, context) - - def igetattr(self, name, context=None): - if name in self.special_attributes: - return iter((self.special_attributes.lookup(name),)) - return self._proxied.igetattr(name, context) - - def infer_call_result(self, caller, context): - """ - The boundnode of the regular context with a function called - on ``object.__new__`` will be of type ``object``, - which is incorrect for the argument in general. - If no context is given the ``object.__new__`` call argument will - correctly inferred except when inside a call that requires - the additional context (such as a classmethod) of the boundnode - to determine which class the method was called from - """ - - # If we're unbound method __new__ of builtin object, the result is an - # instance of the class given as first argument. - if ( - self._proxied.name == "__new__" - and self._proxied.parent.frame().qname() == "%s.object" % BUILTINS - ): - if caller.args: - node_context = context.extra_context.get(caller.args[0]) - infer = caller.args[0].infer(context=node_context) - else: - infer = [] - return (Instance(x) if x is not util.Uninferable else x for x in infer) - return self._proxied.infer_call_result(caller, context) - - def bool_value(self, context=None): - return True - - -class BoundMethod(UnboundMethod): - """a special node representing a method bound to an instance""" - - # pylint: disable=unnecessary-lambda - special_attributes = util.lazy_descriptor(lambda: objectmodel.BoundMethodModel()) - - def __init__(self, proxy, bound): - UnboundMethod.__init__(self, proxy) - self.bound = bound - - def implicit_parameters(self): - if self.name == "__new__": - # __new__ acts as a classmethod but the class argument is not implicit. - return 0 - return 1 - - def is_bound(self): - return True - - def _infer_type_new_call(self, caller, context): - """Try to infer what type.__new__(mcs, name, bases, attrs) returns. - - In order for such call to be valid, the metaclass needs to be - a subtype of ``type``, the name needs to be a string, the bases - needs to be a tuple of classes - """ - # pylint: disable=import-outside-toplevel; circular import - from astroid import node_classes - - # Verify the metaclass - mcs = next(caller.args[0].infer(context=context)) - if mcs.__class__.__name__ != "ClassDef": - # Not a valid first argument. - return None - if not mcs.is_subtype_of("%s.type" % BUILTINS): - # Not a valid metaclass. - return None - - # Verify the name - name = next(caller.args[1].infer(context=context)) - if name.__class__.__name__ != "Const": - # Not a valid name, needs to be a const. - return None - if not isinstance(name.value, str): - # Needs to be a string. - return None - - # Verify the bases - bases = next(caller.args[2].infer(context=context)) - if bases.__class__.__name__ != "Tuple": - # Needs to be a tuple. - return None - inferred_bases = [next(elt.infer(context=context)) for elt in bases.elts] - if any(base.__class__.__name__ != "ClassDef" for base in inferred_bases): - # All the bases needs to be Classes - return None - - # Verify the attributes. - attrs = next(caller.args[3].infer(context=context)) - if attrs.__class__.__name__ != "Dict": - # Needs to be a dictionary. - return None - cls_locals = collections.defaultdict(list) - for key, value in attrs.items: - key = next(key.infer(context=context)) - value = next(value.infer(context=context)) - # Ignore non string keys - if key.__class__.__name__ == "Const" and isinstance(key.value, str): - cls_locals[key.value].append(value) - - # Build the class from now. - cls = mcs.__class__( - name=name.value, - lineno=caller.lineno, - col_offset=caller.col_offset, - parent=caller, - ) - empty = node_classes.Pass() - cls.postinit( - bases=bases.elts, - body=[empty], - decorators=[], - newstyle=True, - metaclass=mcs, - keywords=[], - ) - cls.locals = cls_locals - return cls - - def infer_call_result(self, caller, context=None): - context = contextmod.bind_context_to_node(context, self.bound) - if ( - self.bound.__class__.__name__ == "ClassDef" - and self.bound.name == "type" - and self.name == "__new__" - and len(caller.args) == 4 - ): - # Check if we have a ``type.__new__(mcs, name, bases, attrs)`` call. - new_cls = self._infer_type_new_call(caller, context) - if new_cls: - return iter((new_cls,)) - - return super().infer_call_result(caller, context) - - def bool_value(self, context=None): - return True - - -class Generator(BaseInstance): - """a special node representing a generator. - - Proxied class is set once for all in raw_building. - """ - - # pylint: disable=unnecessary-lambda - special_attributes = util.lazy_descriptor(lambda: objectmodel.GeneratorModel()) - - # pylint: disable=super-init-not-called - def __init__(self, parent=None): - self.parent = parent - - def callable(self): - return False - - def pytype(self): - return "%s.generator" % BUILTINS - - def display_type(self): - return "Generator" - - def bool_value(self, context=None): - return True - - def __repr__(self): - return "" % ( - self._proxied.name, - self.lineno, - id(self), - ) - - def __str__(self): - return "Generator(%s)" % (self._proxied.name) - - -class AsyncGenerator(Generator): - """Special node representing an async generator""" - - def pytype(self): - return "%s.async_generator" % BUILTINS - - def display_type(self): - return "AsyncGenerator" - - def __repr__(self): - return "" % ( - self._proxied.name, - self.lineno, - id(self), - ) - - def __str__(self): - return "AsyncGenerator(%s)" % (self._proxied.name) diff --git a/Jobs_Collections/venv/Lib/python3.8/site-packages/astroid/brain/__pycache__/brain_argparse.cpython-38.pyc b/Jobs_Collections/venv/Lib/python3.8/site-packages/astroid/brain/__pycache__/brain_argparse.cpython-38.pyc deleted file mode 100644 index 9134a270d9f62fd5016c7fa7a61c76c11c03799c..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1112 zcmYjQOK;RL5VjrXvD@y_@{*7^Auc&UP}PE{5TfEG4(x%)B@#qw>|K)03)@>-DSKhL z@*mnGf5}%4h`)e@U?y!56L}KPjK|-6GkH524GGANy&vy4IU(P1^S`*Tc?3&810{%{ zC8=mkD;BfLiJgkaymDig65$I+@Gms>ge$x+B=#je4y02IB$wWbO8>-xDE69!!B5CV zLf85)_a=MKpT4q#RLvHZtc|vA-3Y1eD6gkd$vTsX$y$f_`O7*0I9T*9~8h&(yfbo?yZ`VN0hYh2J@eZvu>1(I@2H z%_WD3!3kNqozuCA-*M2x&YjWDDb_mvfPCCF>z#8vIw4cKqEHl{gw*<3QyY0`>|l~s zQnzU)0ZB$;*!m)AySR6b~%kp(@z&BM*m1MAuH|O%`Q=>%kj|zn)DXa-jl&RKG zxAoc-STWYo(!_(ORcnqWK$s0uV^j^7#^b!!CPm`Vq%DVwRJ?g=HF;`el3}*cvmCir zet!dk(1>Z+dlPh7jwt|TI+wlS8&MY^`qv_ARek`eqJvaL)24(pI@*o*@X{iK3P&j zJ8H1`Ox^8h!3CYOW*e=A3wCb>JNzzu!R9c*!s#2X0>}W&pCNn}29{43b!LaTK5s(b zKReh19`pSLbYcz9aCz7&%W+7c37|u!M&MAFP$9*qY6F9>BxTdgbyDWoh4b1kgG-~I zK&|U+NZ0=`HvG+8bq#DGorJ^KKO%2BXm(v@M zlf1)S?%bNhVD#AN`}0eGC>4|$3npcG8l)uzYQlq9DUd;tjUa|g-~TC7lX9j|l*v}H zx-2rG0^n5%N(M6_XO$*7+m5Bo#$w8a+Ab>&vC2x}Ys0P4q(B8O{l76FrnpR~w!a)E?iS7i zobm}S3nMqA&&Y8@<>Z<1^VStrbU~GwTh|n}7Bsi7@OEi38pHwPNr~Zd7KoDZU=m9|z!8fk@;k9kL{$|TXFK1W^xe>3UMoR{w!SE9 zKa-h|Di#T^-MFn!Z5_l#QCsOuBy}g25wbHe?whrxFNN#(W+D+!xeOn^XSDglto&}k z3P%4A3@XUZ(bd6u41=^R7za7npA4qcB%OXUX1iaHqTOGsXaf6t@0xImL`&B8d0fmm=pq3= zX9je%k?!#1#&V^3j$9N7`bi~JP zzzvR@yI~LbIFpLQdoMz-!N4<~wod=YeedzKWV3>QtDi8bZCkEKx~4}wv%BgA=$%0g G`tDy6@ diff --git a/Jobs_Collections/venv/Lib/python3.8/site-packages/astroid/brain/__pycache__/brain_boto3.cpython-38.pyc b/Jobs_Collections/venv/Lib/python3.8/site-packages/astroid/brain/__pycache__/brain_boto3.cpython-38.pyc deleted file mode 100644 index 03475a8d25c70faf6d6be4645b4860db9682ec93..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 940 zcmZ8fT~E|N6rE|iy9JiS7-M4M!}#$)6R`yOh=v&JvKSJ9xGX02fl0SBT?+kJW~K<6 zVxqw_@Z}O1oS5N&fe+Sn{&^Zz1i7m1o7DWvA=I3^j$Z%qXEquNVyJ$ zAs;c!j0F1_PBX!&;Tx&xn;0?6w^)NUzaqcETFi#C$&HH^$A>m=@aCn)7`w=s8n1X# zi9BZHAkU8^iE=@TjBz1Vkg+%$l0mNW7teROIEh2vry4A8b?l&vjq+k4mT zm2G~iL=Y;P<&2M?)_)UR=7k8kd_D*yznN0shFDLz3RoEF>_EzgP#8YP3Qh1Ad~QsP zA)cT^Sa%Ig5D+)VD}51U68NU%np{1WsGKCQ4N2l7PS{x%q;W{XB#@HJ@#-{zU_2s} z4!H`H5|qwKoT;+fk8) ze}{iV!UpIs;f_Rn5-9GT1j3E-M2qY$AGm26M(N8TTU;H`#nTZz5X(#Qvszk!7-nwY z9mS*hI0HkHWPT-C5X*~c;RdyB*XKY4apqQ)*4mHG$_KKxjf&bg3J%qp&1jW1FJxGj zjoVo0r}vK`+8hJ2GNcVZCg=iPB889i%fZ_G#xZEi%O`Jl`a5*D+xxiL>Cz3a)8FZR zq969W_nRA=-F3R{ZFLXiA&71zm`98p;=7F%7h3ZU|ElOD) zQtG#^R1o@m<%rNkt6eIve^>BfEEN|wtNV6GKZSK3-6Er<5EUbPEzMbx@Yfbx$$L;N TY~wqIW!f{gWnl|MF@FC6ER6Zj diff --git a/Jobs_Collections/venv/Lib/python3.8/site-packages/astroid/brain/__pycache__/brain_builtin_inference.cpython-38.pyc b/Jobs_Collections/venv/Lib/python3.8/site-packages/astroid/brain/__pycache__/brain_builtin_inference.cpython-38.pyc deleted file mode 100644 index 13e18d1596bd8934a98ac21f143fcfece52429d3..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 20683 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 diff --git a/Jobs_Collections/venv/Lib/python3.8/site-packages/astroid/brain/__pycache__/brain_collections.cpython-38.pyc b/Jobs_Collections/venv/Lib/python3.8/site-packages/astroid/brain/__pycache__/brain_collections.cpython-38.pyc deleted file mode 100644 index 0372f5bd0f231aa9f14e2f08bf9b32d36c71f3cd..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 2538 zcmbVO&5qkP5SC=`THPRN(L>Tp0U?KC4QL~0k!{gM9Awd?J#`E8=i)_6&?4CWgioQYHOFN__OY$o2q69=qUJ93FfI?tSuN4jJO-W{?_dhqU2_xTQWpX?H!dM`RI zNPXk<-}wVHIH$4c>#YkvpTVPULZ_YQE^)Q@t8>fI9n-%svfk;%tGxhP%&<}cp%Xk~ znk2E_H(meOP8vWlg(f)GLN0@0a4I;hPX`F4iBbulBDAk4n}oqry6hhZ8K~X>PN_~b zO*ep&>Y3!5OYK?Nes|TwN=uQD)lP<`qN{6&&>v?Mr6PX1dLIc%sH6lL!|m8>NA7~_ zw)=Y#Wipv#O`|!M(L^u+tLW%FO4E3femW(GpN!GrB17l$=$`sX-y1-i^61+rOR|H6 zD~%aD_?Qjk(P27^3RBkavBU|FY>#5W7>#uzxVn=qS2ybeNK4GsM9B1AL(L879JlLw zz3yM0-~H43NBS_*;L0BDlmlmj z4IUDn=rswzh{R(?hlbfO$c5}rO_kXThTJ*E46I0$!-e*L}&{^B5BnGq3(gzX6+=~?w@QYG@QBf z3hj|s%9R7kD{z7FCWIAXB#-U!d^2Nv-q&hX1oEi!<5QREe!Ri;}szkceh;&`T8d2{R377#gN-N+|-;h_31+B`U0%0kN zI5~mAL`fXoNm#lUtlam%N(fc;jf`m;>p>btB;aA1Fg=X3lyW`sV}kiCi^$g1>k&Rp zvHrYpxL@B`>j!#WFnWkd!gc0H+zX~YWjar}A9*bNOzK8;8?1LW?4F-`gKo!eS`cy* zX1~6+h;R<5rURql82{lc+xdqBi{R`H=d^aPSMSb0ynZ|A7QsI@pe&$AVzze3-l<)L zU@KBJK^-6Ht@e)p$>r6>ut?+vaPOxH$ul(z@!Z&5HGb1UX6T1v;;qwtDn@& zXgK#dG3P!t$7zHKWu`qf<2V?{PbSzp8hO@j=1r;HW}kSw0WwLQ|)r+gv(c1SRC6kbGLcKV}vxs=)mXieT;g)-ye&@~E<=^|R aSE8+#m1k@B7owl@Uam+Lxhkt_<-u>vJKLoI diff --git a/Jobs_Collections/venv/Lib/python3.8/site-packages/astroid/brain/__pycache__/brain_curses.cpython-38.pyc b/Jobs_Collections/venv/Lib/python3.8/site-packages/astroid/brain/__pycache__/brain_curses.cpython-38.pyc deleted file mode 100644 index 5da9becd95cb1b8061032b1807ec09f833ba7843..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 3396 zcmZu!PjA~c6qlW(4Z8KP+m6AoOAf8mv{_ML8%9xdEQAs@J}GH@nBm4s>cMsl$?3Y& zF8dfew8wp=Tz4q;6?WMkC@22BFJ_~|Jd-$*slQ|zS4I<2Qnaws(Iv%PNRa$$c=-d0GI<{?->A(6p7fVqfBb3rwM7IteGQ+*`UaoU!L;gQrE z_KaA1Dk!K$q==td^o14} zH5bK94;(C$ZWkd_jswEsgTiS+V2(%NCJwltIp7--g`kru;C`yWX;E+*8icfGu!$+S z=>@MXy@Z38aqv*jNdOx{Ztd?o z`$>lauyASP0Um6$A~$h)ObHgYTe1)jDU`6+_m#;wjKUDwZfF3hc-xN+qL^+CY!C>Y zO#tm|U30i%bI}^oa1>J7cMPY%xljY1scZQcKm6>T`z5I<*awX7jijV_kp0fv{*`|zzfah5p9*&wz~)HT<+ zkoFDLT+8>nw-3kls=A&|Zg-aBsxJQws%^Z+H?M!{-m;p$8?VaVyK&XKyq-kXRy8QL_i@V>WRW)AJm)F(&f%$V`UO{KO)BU$HKZg(2JNCD$ zE|P2P%c{JZ)~m7_&95gnvvO3vUzH0qdiW4;As9N{I=B91{srCce!FJ>-u#nk6zy*9 I{uVs_59pooFaQ7m diff --git a/Jobs_Collections/venv/Lib/python3.8/site-packages/astroid/brain/__pycache__/brain_dataclasses.cpython-38.pyc b/Jobs_Collections/venv/Lib/python3.8/site-packages/astroid/brain/__pycache__/brain_dataclasses.cpython-38.pyc deleted file mode 100644 index c1fc68975c2327adf4dbb66690c820784933e4ac..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1312 zcmZ8h&2Aev5GJ|5l4ZAbnjBgnSo9PXh!q%igA_rLh2*w})&V5tvOv3`mRxD&6)BUH z9SPFOx%M5BV_#{nJrsR~0zo>IWH~4oGaSy&%+AlpeYL+|N3gz$|NdS22>oRbpDqs$ zFM#yVz!*vp!;F+T!LU0eo{)rK#2x0|;Kb!_j+w{&w>a@wz{0mE@i}=Ha6AsV&%O5! zMvU}Ov$puQ9&4jy!J?6r7f~)%WJWw<)X=P?T5}zh#XwOtum1yIM(0gj1;57U@lR*n zCRyD7#PDb*C$*iJ5$m;G4(u*a8%VzZwnSs3>kRkS(inHpZ;w{QkR>tB*u5d@(UOe4 z6`bGs@6i%p`08+z`sJbZYC4Nfmz$XqQD4n?ROAtj7|*1lhORU&tbmCc8UDXR+2yLjycooo1qY}4G%d&FwnaHXd)hVb8F>E@O zYn_tMc41OMCtN4@?iAF3?O|8@tbKnQl}^S+MGOrH59FWYg$YnuX8KQ$KRDt)amhL*4n1H+hK5pXsvm=YXH|r z(|PrEq0?Qb((A&E?ko=Md_D(;h>u;|fX4?4v9ch|uzj;#7MB6gdZbq%*pb2*$17~` z5*sphfZUwi5dHAdH{KEu3xhpc;;}D$;K2~v0fW!U%G!pYs{z%)lKkPU+@(9j5Or_q zj2q9<_O!n_U4DP*GY5d+E>64rS`~&{1l*!GGBO(Qh*MpZ^Jpe)ca4-R8qA~Vyex#N z0z=i18x8aGLBWNr>X|H4ndh3D%AZojg*k5?RPI2sxpJUJWkH!yIa+AB^O*kGm;0LxF5HFiF>`XUfMZpzwE~Sm)+hP73&De zq2j|r8?Np$NW!-Lk#u;zN%en8htDUH%}V}*ZLIzhnCphP;e<}35k7zn5kchRf88Z# AUjP6A diff --git a/Jobs_Collections/venv/Lib/python3.8/site-packages/astroid/brain/__pycache__/brain_dateutil.cpython-38.pyc b/Jobs_Collections/venv/Lib/python3.8/site-packages/astroid/brain/__pycache__/brain_dateutil.cpython-38.pyc deleted file mode 100644 index 4b773af8284bdd389ac4cdaaeb30755b3d75dbde..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 714 zcmYjPPjAyO6t|tU2~)==!~t;%oR(>8rfLO&08tR)L=XJA2O|y~gfSnjO_1eG zzZ~mQ97TtRXUiPsCVt*Naa15|4do40-{s~A4&v4&?tm*OFjQ#|S!FrTCN6^}w3yry z@~Y`_!9{6*5(u2HQ-ABE0(p*P$$1XROuLj#GF&7|O=s%aoDZH(vcW}_Ens+RmiF`n zWnLzqlS)>{vNSd?isL862@D6SPV#jVZq5nhvP@c?ZQIeWzBTu@MrI)|4R%ZIV>qUr z85&ZbvTJq?cMx0cZGHP~-5?H|Aj`O(W*N9bErzu&$1y`=9&z Y79!S!FV=JL%2{m?J`34C?RjDEAIZ$Wng9R* diff --git a/Jobs_Collections/venv/Lib/python3.8/site-packages/astroid/brain/__pycache__/brain_fstrings.cpython-38.pyc b/Jobs_Collections/venv/Lib/python3.8/site-packages/astroid/brain/__pycache__/brain_fstrings.cpython-38.pyc deleted file mode 100644 index aa0fa6891b6c967a94e4003e8c7686c2966c9bac..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1594 zcmbVM&2Jnv6t_K}`0V=B%~E;Hi{Y$QWOzUKtf^<1UQURhUwUwoz3jb#`Y!@ zc~1e+OMBtUAvs3kz~AF52b6z-OL@<;ZNq^J9{JgRezt$__uiXtdc8J*c4z;u??y2p zf8ye1^I`EZbTtCO38y7Vnvo{dty#i2eL?~9+N3qdLZf22g#O!VK91za{8OM41XbG z>fVn{aG#vhWn_FgGU0{qc6>k<8y|NrDJ8}m6B9nA%UB1G2@lSh{M`i5ql@s8+$RsV z4%xD`Y@4>MbY$8(p0>`Jsx)X!Jnfj6hflm^$8=0&TD#<=0&N%WjGp4{F?bb?t~?u- zMJ1}*w)477>+x6#ZNqscMWu5JUOjINCg|>~(A6yv1u^8o`jQ%|!F5B=*{|%xKOk4+ zirVN%=uB&Q#Vp(0vH@I}%|P#0H5U@^`Fk;(%i=WCVtAU#;kYhgLk)K(!`Un!&ptZh z+aEqmw||(Y6S;Fwo#}g9(2lC%*TZ=+zgtvFXJvW!gK|smY|j?MOlesc{KfcCW<@o0 zG9ANSQ5~tx`6Jujir;%Zx ziMjs-eklfiDV#t72BT{%F^RP$UjZ>-HaN}71w>(7%UPyVH5d7yCEr2|1ZbmGTy6g| zXQ2iE7EibUyS#9oNsNem8^mChH*dl`X(6}ng@!`Reu)&?+o_gWrSRFbc^htSO!0Ar z#|bdn2Tpz9(FY!xn<1m?RK5%Q*XYTBT_e(Kyc?k7zruRzk&^GgtO19%wtET%4_THL z)woWgFZW0LpMUyQvLVG$p){oO3qbM?o^)7W3Wqx0oz;9%iaiXR!rF;x%wjKoE$(du JA>d=r{sGLzeT4u3 diff --git a/Jobs_Collections/venv/Lib/python3.8/site-packages/astroid/brain/__pycache__/brain_functools.cpython-38.pyc b/Jobs_Collections/venv/Lib/python3.8/site-packages/astroid/brain/__pycache__/brain_functools.cpython-38.pyc deleted file mode 100644 index e7fe25fdfe7669ef1c3434c02edc3ac5ac9e5e90..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 4690 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 Y`ItN6x~}a|n^?s8X)~Nri#k7k0mk__TmS$7 diff --git a/Jobs_Collections/venv/Lib/python3.8/site-packages/astroid/brain/__pycache__/brain_mechanize.cpython-38.pyc b/Jobs_Collections/venv/Lib/python3.8/site-packages/astroid/brain/__pycache__/brain_mechanize.cpython-38.pyc deleted file mode 100644 index 98a0475e163206f4a1f347c643bebb42e5c251db..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 748 zcmb_aJCD;q5Z<-(y6AG8L_=v&ou%CQ6eXNMfXE?4MG78`3#^SjP8RLMnqB9PYbcH% z0wsSbEd@gS0~*+MqHq*+jI^KU8}GdL&0x?cPVP>>z5Ngp^3{`@(sJa9J7(;lAO#gf z(v->|4XEdV2xTj6IXx^|A4%GV0BF&M_I2oNomV98es`WE4%Xcl)7kX-vzO~T2n%j3 zU?z1@3&`Nof+_%Gx;~g1i<%ebH5bm3d*7SlY9vqHF$WGTvGkgL3JUs}x=g|B>PNqy z3ua7oj{3p?9_jfz$ZhwqaWj?}cD% zRFS{)SCmZY6*t`er)WawOk^b&unp){#U%Wrlztqd-wp;2(tS5Jt`^zc&+QArw*TYd z=PId?ub72o#V{$gAFD|w%S6h&l=m0K=xm;iE~{*bld-w5<5MRKmAp}U6#BjYM*Fq4oknc`P)QoUc_-m%OgQ>N4?2d*H~aX@H~2EVZDv~+KG xaTa&d?lwWw7W#Fkx3;E}ra8b(+urw2n;XrCUiThup4H<$$C_-1bU*AJ{s!bI$*KSV diff --git a/Jobs_Collections/venv/Lib/python3.8/site-packages/astroid/brain/__pycache__/brain_multiprocessing.cpython-38.pyc b/Jobs_Collections/venv/Lib/python3.8/site-packages/astroid/brain/__pycache__/brain_multiprocessing.cpython-38.pyc deleted file mode 100644 index 44a4f6d895763ad8acfe87eb06b80149d28064c5..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 2566 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 diff --git a/Jobs_Collections/venv/Lib/python3.8/site-packages/astroid/brain/__pycache__/brain_nose.cpython-38.pyc b/Jobs_Collections/venv/Lib/python3.8/site-packages/astroid/brain/__pycache__/brain_nose.cpython-38.pyc deleted file mode 100644 index fc53e4084d6417472944883e1f10cd5310b5a01d..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 2101 zcmaJ?OK;mo5Z)yzil$^aaoySp(1K`zB18}=4U+T$H>l${X@JBBCutL=DM4vhGHr^a zcUN{IP^TFE8HIGrU*ffgqUYXvNoSUdn)uKqW_M>FqnU5N89iBEb_ul4xBmR~jYG&E zsJ!27P<{ZBzd^@HKp164LIbKtBQW%62BsdZz~tsZZE8bbpV7eKbh^aM8SPVMvDzsO zTxPTSDG3_PVM{PJnadh5E^~9*!dtA#muDs=IG?USe~vfVGHaa@TxG^1;;)R?f6TH& z>Gd<=rJ3Yj5_d%;UbX)MC&})(e(CwvmEeWnGfPDw##XxH5B zQCNT1aBhM;0+DObF^H-&_nMA`bi*BLwe}j%j#$Mj_%?w z_|Ew9J+8bc^Vd7xl%%o zn)H`TC%paS{)0O^du0=t5T}E%JBkxlI*PwkCnCyAn{mcd1rG`H#h2CONVhW+~nED?6oKQQtQKn2hnVQ8{0^y#coV z*LNkNR6^Mqeg!8b`ao!l3Jl_dJiwG+c=!|)%md7U32>j81MpKB+UJYlvjOa-Q?oE; z6j*B(z+CWr1MlrJ$q&uj!;#SVb)aDXg$wU}UxNv1NX(_UfCdoHz{O?YZ#+n=dDcDPJ#`l6Pv7SV*f@@( zBwWOF6D;W>ObnMgMhm#%S|HShPkaHp<5gYvbhz#L{SR1!H5xN(8%^QA9&iL|`XQEn zV|VQScipEt4X}QvXWSH6-5!95CG1f1&m(#)>xE%y2rka!hDK>+o^5TNo0xv{NzmG= z>i2C-S}ub6!>!$|dpmm?{IcH5hIyQDoqPHfG{bb5!G_=i0H2Gndeacn8{P+utS)vI zu$A^hovH6dfz%Ybo;#bBgJEl9UUT%1|nUlax=~ii17l9@=}1z zBV~A1i180!AIChGC_!|2g$b7p#j6AqlM7B~xHj3C<+9z|P#VF!# zQ;J<|Dz}R+gebXGzmuevPO_psj32etnu;J?1$x)6<_v&shVRl*l)jJKq?puw);+K8 zl?<%-iXim;we<6IQi8l>P9&EMl7%U_0Gmu#iBkDOJzVn1gL67rmvjZwQ~SxCrXEY3 zyh%z~o=9ySD~gl*MGDi2s*>GJfA(`=QYS6b)>7J7O7|=smz%n4|DPl3fNATep>8*( z9(Y1H#N-B=aC`UvGm3k4pHgmeO2K~;)Fx;5KrE$o0%$ivD%MVD|JbbmayFm6c>e0I fDP7cjrh4$WOMlw;%HHu5l0h)I72*&PL~ecote&`8 diff --git a/Jobs_Collections/venv/Lib/python3.8/site-packages/astroid/brain/__pycache__/brain_numpy_core_function_base.cpython-38.pyc b/Jobs_Collections/venv/Lib/python3.8/site-packages/astroid/brain/__pycache__/brain_numpy_core_function_base.cpython-38.pyc deleted file mode 100644 index 8dccb73c42b07b68ebb2229ae746fde869c86863..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1053 zcmbtT&2G~`5VjpBcG3n)4{+gNacZPA4pGCO2qLH{aA+#E;j&Oxo9rZAYJ1J@x-^wI za_0d!Bu8G!R}P3*03oq<(yH7lbtKR1?0V*#-#682#n5!G`}6%*+c17)%4I5R<+=W( z(2N?$peD5f6PdZRkfmiID1I* z<++7c!1}N{t7?7&tl3RinVb2m4es2U7fj>hBWfKOHTSI5l}d0%y(7+#r8nlni;^&& zHbz`PW1K`I#dw5=M1mJ`ngr1JrDHYvH7mUnWHvZp$AEJq96~q*k*>374C24Lv(FU9 zUce$5lM!r4MTDw*Qt`N+0e0HWx(5-BIg3@;gnD&8g1|0g0^h96NP1etEU)qb0YwXp}AjdICJWI`*{y zYX#(<7h0c|IivDL2(`7;!I<(9#%VckG3S9q4q1!>x-}GpMa%XjiUm?wy5*vv8M?jO z8@$@vKEQ)L{Gx|n_jh{x`@QY7$P|Qf;SWb71mtF}u@s}!iFLOb3D9CNAQ}NaA1&nU zcKh9zy?wMUV8V3A1y+JYQjcPomb*#`HcS+tYCcrCtzz+aLu9L!v)^C*Sg;eKz&|0v zAM=2Mkbe8f55v(od_1A8heO;tjq#CaZ^=(;tEp)c`2#;@@ur?hMS@`SLC_TKR+#w9 zI$X%S9RB5^WXo}pLB1S~c$&IT7aQ`-(UHl!n%S0Xy5^c~W%Q?1UNcwCl4&9^vOeF1qa)b8>dwZ0%2&{q<~OeDK$t;X;Z9o3Dc$_|AoMQ4ZyzJj&Y^&f)y`7Ag>DuSlH7 zC0rnd{W&-<;u4<6WxRkFaRo2oGk6)F#Vhz6K94Wpi}(`0j9+!R9vnqy}DDdw}G=4f;6k$**M>#yc*iJzztaa(gig6y;31 znDi(k*rm)p)NFM)HY9Kf7mSFS-*CJ256q$FC5Vaz%gkcfm{WVO)^OJz*2@Q^JD96e zQEJwD02W0*1u@AFeId!umMDN-X8QZP=1|ZbUys=cSy}r0{UGA#uYcRH1v(p^X;T6iH^26}TyWyI+aV?6QnWTenSNN1Q&74859p@c^ zCwVJ%&{H>_5 z;KOmNBVt%`0j9R9pH~~MjJtf$y5olu&KZs^UW;oogzKHEv5=}aqXP2^o$4u2m z4R@E&?Y^3t4ekyJ+gAP4IsFI2HI~>PdnxBG*`|=diU6#H;cT@_$RP6NpjEx9$J!bM zT%U&&=w$1`LnsD@N8pDq;fAS+Kh7w_dp${1Efb&aKqJA!uvLY8lms+5QL8jpUWHya zwO)bGyZ|agttWWoHC)9Z5n)f+cB?A=9(j&8b&O9;fa$bVyoM!&fE2+I@`!i?fL+_9 z!_Z{+@zJ5pn(S(gG&YI?r7u0Gji89mhlU$7nx-x&3D*-KXjPd{cQj-(DoOyHXLAzGAEXN^X2FY= zpN>CNnmP?tjzj<|ANmtjVm5<&k~dh@&m~3A!#wc3WZv{~oQG26pua$8XPcH-Q8;(t zT5&n$u)#un_enimXw2}0n!X-s$)u6WxQQEH(77%ax2efh^`JhKi=GPSz zvTm#hs+bnnkSID#a&2IL*z%>TBAAhsK1?lPf5TfxY diff --git a/Jobs_Collections/venv/Lib/python3.8/site-packages/astroid/brain/__pycache__/brain_numpy_core_numeric.cpython-38.pyc b/Jobs_Collections/venv/Lib/python3.8/site-packages/astroid/brain/__pycache__/brain_numpy_core_numeric.cpython-38.pyc deleted file mode 100644 index 357ff2223a4fb8e4f3b429c5dd772a3d4499515d..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1297 zcmcIj&2HQ_5GJ+SKYQ&uJ~Tb_Ahba21vZvp*a;fMLAUX?DcWob$2pYwA+*bpm$4)& zB<04w^iuRWc8`4}U3)0{3IU2_C^@bJA%8mO zs&vu$8XxmJDnS?#RCozxv^qWJ;n_$Usn7hh$(oc1Uo?LstOee@4c^O+XhCbyz<679 zBxPOb&X*SCfIQ!Q=CNhg13F)UCiE5_TXp&KPf)Mn?Q5{Qpw(L+mKUC@@#;t6JtqC` z`Cw?QR#F5rrA|x`D;;D-nxAb=m4+=eLCa~7Dp4e`^*16Xi$Q-7o4QL^rGd_Ue2nXtC39@Rf+84i9Q{lQSqf0T41|oa5@a@ri)?D8%1j_2 zmKlgZW)7r7ww0e%`7+Iwwl(xBfT_VbXjOyUj0S5d#gKWov&9nJ{VQzJ9^H4a{N1M)6Am$<6XSJ(Z5rX>YC%^ zqwGI*>_6}K*UL8NLQOd@yVXQ0l^E?K40i46Ulmqj+{3tbgI)n;pJ_Oj#^Pqwo5bO@ zg$x_a+7E~0;di4$_UXgX(St_^kNMFf{>_MgKmK-fcsM#Jo6DDf1kkCFTZ@*%CbAOR?A6Yfvr^gT3xX+|92W{tBpTUcJ9`g l?>W!hK;?TK+M#QWPS2-4@rd`d>Ws-T_X_f_(r0 diff --git a/Jobs_Collections/venv/Lib/python3.8/site-packages/astroid/brain/__pycache__/brain_numpy_core_numerictypes.cpython-38.pyc b/Jobs_Collections/venv/Lib/python3.8/site-packages/astroid/brain/__pycache__/brain_numpy_core_numerictypes.cpython-38.pyc deleted file mode 100644 index 50c94a9c496227fbef12fb25e863c8b88974def5..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 7761 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 N>%QA^+iv6c{{b24_?iF! diff --git a/Jobs_Collections/venv/Lib/python3.8/site-packages/astroid/brain/__pycache__/brain_numpy_random_mtrand.cpython-38.pyc b/Jobs_Collections/venv/Lib/python3.8/site-packages/astroid/brain/__pycache__/brain_numpy_random_mtrand.cpython-38.pyc deleted file mode 100644 index a5de3c76d75cf8095f85fcb992c96dc938f718d8..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 3267 zcmbtXPjBNy6t|spTdi0wT(}@vT-HHu(pKArU2PB*LY(LUmP-y;6VJ0f?EGV9oHRXg z;DhWQIr2sL0J(BNd<8Dc8#_u<1gX6pDK8#p-kbOT_wxOtM-KyBA7A|W!|(3}!5@CJ zyAE*k1%7OTga)&KhBV^gETjWE{3V!05WXHj_~VcsK=fu11~mFE7(KW?zOc?HM&nAU zS2iw`iDfPHYHWz4N{of`53x|R<}m&Xg$I|pr@L!_n=kQWy^bz;9n$bkh~lG5@*BQ- z7~`T)#B*>YA!$5MW6Q2#dZ{Fgp2r4UZDd?aCJQiR&f$iGNhKKJiA-bNoonU5CLCnx zs{QiwirJrPVj!VKXYqNZSPtHhtraO6p*hK6`qI>Zx^}RQGQ;wUgG&h4)vmPtI>VJl zze(raVspY_dOAMY(Pck(ftF%~)0h?%(5qV$_Oq2l2$I-}Xtb{XttBV{4((04N3jH# zSw|cscc@m2Iq-z5e0tJ2qPI_~l?HR8qAZo7X)Nc&Q%i*A-so-_%Sn?5_fdzdl39no zx`#<9Ln6I)f#e!j2Ox?pKYVLNcc0su9?7fD0K@7vNXFCR@ajq7f zrAR1=V++XUyNYyYS2D-?GK6Qh`-8+E-bKp4Yp$o9CXDyU1&#g9saySOe??(6h#D)8 zDVbc|aa1vD@fatfS7vFo1k*z$k3z{O#FTcwKK>k&4ohd5#uY28rV;N14I7`sa-Tlt zk4MiNobl+ygjUA2(6@cL!KD@tB_+m?Rg#>hr=!spp!|KZt71xIs2h}E5S{){!Mp84 zF>O;yI`$;gn*;jd9pJ(O(8QAtfM&N1yJ_3|4Y5^S6ddl#FO=jxPqUoVd9~_l@s{lt zSa$2+Ti)B4*OPhEygEi`d#CF&h#;U6S=O8w9Ciwq`Y{cW%3!E*)A4E?yKw3gJ|SC} zXsV{qNU=~-FpD4|>NI{uwC+C3ED5I#LZP}IwmWOR1U9cZ@6kc7nJzjWA4Tg!($2-} z1MHp_ehthJXWNGS{qsZ{wm^iMAW}^V#VHo_yQ59edZ^1 z>qCkE4+8rDNe~Xh=&kXO*B`WPtQEBx>qiIc!z`mJ&oUF?q2}c5Lj!*P0F$*-e+E|$ wB-%JT{O02F;_I)zz41l+AvyB*aPyS|>c46{7S6+ zqI#>E`rp8|n}KVqI1#tM`qJ+QM!SpTK?oazI2YZb+WaRl?`ZZOob@V}ac*p^H{1e-U|^j4db^1U40J29t7se(lOO!Mm5m+gh>d;FYKwk(-0Dv z>ZQu?sz`*i;7;g#XWSLAnsrxeIyKB~2FPeqdmCA*bW-Nv5!fpvwnG`|kfSf6R7LRx z$(q<~WMvX(YP0+9+DqhB-7+EE-3APH0WPkctSk>E6)0e*0^4vgywNx{D$?Wt72$GK zYT!Z|XHgT_NXK$d=-O%Kt9WmI2rd-$2b{khjeZ zSe?1&WZXW3`gTs`V?4<%$QS$QH$$C&PnHHbCP|Ybhx?@x<{mxJW~@~%-dy!}6{zJkpd+?6-LdE0>}@y}r>ST8)(TBgH^7PTA060y{_m{zj32N)6z zlf(elwk%6sdr%mqR)?wHhZ^#Hm}9dG$>J;4vZ=(p3g{s4>UI?IGKnIC+0@UlgB2r6vREmhDOSfp*swY=8SGQ&K3{Wq8q`Fj8W diff --git a/Jobs_Collections/venv/Lib/python3.8/site-packages/astroid/brain/__pycache__/brain_pkg_resources.cpython-38.pyc b/Jobs_Collections/venv/Lib/python3.8/site-packages/astroid/brain/__pycache__/brain_pkg_resources.cpython-38.pyc deleted file mode 100644 index 4376f5bcb93e1ef27f192e407395c8b4182b3bab..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 2217 zcmcguOK;Oa5VrGZ(x?$fI9gn4mo%;_3Ia8Vir0w<@wnuGwY4Y7Qa_g2b=rbBm7l<$ z=pW*cD+k11-~zL@Ym&ZbRjC_!J?q__`R3c%nY?SaTL!h;TR-1_ZyLrAJ(z7Z8a$>) zzM?KL0y8uQ`dtZ)$Q+oama8OJ29->%kz5^AGr3N3ZBQe5A!vLx26d=HEoeghK+l_R z3}^8dX*K$X=Cm#tN^s0+o5w>yh<)%B7xdv4!iY-+=tW78hTy@Tf;a%AxyH+_{??0U zuYIj%wpD2GgdRyg8H$V@Xmgc5`?g>htpJ7=!pD>&*eit)L9C?nuw_w0P$|Zi*co{U zGD*<~+1*WWhsPsNg6f{Wxs@wUV^8|Xg|drfvSZ~RyqHCBVH^L`lbhq38N!bHo=7

;oa3yX$nhZrL_{A zgm8G=$T8NWLSWJL04!`>5*}T(YlEk4T?SrAv41U5cVwspSDt#7N%BLbe2C0fJc&I( zOwcYej9^mcD|Ed0%pZd%m>Sy*{V|_Fb~p1pA$zt{>?*WnE3KZTW2rl1K`XElw6sb} zqbv;z)wYv?R1C8Vu9x+!M0WLt?gz?D_N?ZPH4Ea-@~Vo&a>rWHZpmCzk%VUy=FW&j zD#{;}lBKO65_(I=I=TfXe5Z7+E5;E+83DRGvCt2J#i=MSmb8ZnCH~%X7E)o#3&T96 z0fhnb?Nn25>p`)qK>qZ^bgPwdE-7p3qsUUHB$_^dX`!xIhXyw2m36;AxdQowDR3tY z-C+_^zLf69*o`887(EyT>-V?4^*!N@apSJsRd?5@jbit$E4WzYu~aM!SMP;uxUn9k zE+ec756bs8G9J5G@68uFu|K^z_r)XjVo7X7H*`s*3ThZ;#jO0nMUtlNxy8=Hpi$Vu oDovyQ2Z43n>5bWze_rO2F4EKHW?tVP>5*Kbu4yjiziM;yFaHJJ$p8QV diff --git a/Jobs_Collections/venv/Lib/python3.8/site-packages/astroid/brain/__pycache__/brain_pytest.cpython-38.pyc b/Jobs_Collections/venv/Lib/python3.8/site-packages/astroid/brain/__pycache__/brain_pytest.cpython-38.pyc deleted file mode 100644 index a936bda1b718c459c54170de5bfb22ba94ca9bb3..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 2189 zcmbtWOK%%D5Z=|pk{3$iV|wbMxkQKT8gASoMO#!!1EU8UL0<mv%_5H!E2}ft0{f3gXw_QeSYw(HyuJBdVB!Gw_V?} z>!Dlo!ymkHaQo3jX)FZ~FU#^uh4T_axzeC?^cNZQ#{T+IGE-$%X<#CkCF*f!Jvg6S zOwL|^zkZCc5K05GyyR5|43-)S4oGqjYt1h!kr5>|>e{1An^*LyhcszV`)~c}3RTGZdfwlC& zLSQL$8({;D4ArvdiP$ja*oJD^CdT{HhHBX^@g?qtwYkoj<(9d-6h@X|Rhq+VSv1?| zoTf9N14?v>PsbLAiBQmv-5pfq=+4}e@B(f^QPfo%ei|KH*`{zz@g!1WxonxN6*;=a z8(34!?r0gp4GIk{x#rBHJy@%&u7`=%C}wnVS|wr3*s=(MC*gT{4SdV@y%j%4fLmay zlI9XxJ2goZX;$%#L~VkjE#TgQ-ALNjjaxvWQWVmeHgRleZKbKf-m`4v_FWglbGd2! z*z$qHtXeGY?xOF8Qn}kw#N1TH^1q_Wz=ti>0m* zlsjv;X_>uaNA<$ORsu54YRWF~2H?Ze@&2_m@!hvoU#_-W2Do9l{IVR(@CZy>SI(HY-ZZcI}fRSxan^dOBC1i?#9;%#`Ds2BNd-s#(AF3^A`(#^7)LN zEG4_d)930&KR>3iDB>SuDdaOzC{3^Rv(K_)JUz*)IB^ZL`JK^oRK#|^>rQgDK63SE z3batvRr4eAM;WI)f9QAq!6B`t2M%>RkgLcv-HY+zdcYVjQ^wW-WAn;X0AtuO=s|7T x28`yP!Sqp0ifq_`E+Izu`vkbvfN1OCm#$BLZT@tq5luaRu?tu#j;LHsP!F#)F#{sJL!mMU?KHj`}^ZUK`cE6sTwFs1VTfcnw z>kJ`3<6ycJVeko5^#e4V*o0Hg0va-#g@$cV92NAITd`askl4fmeZ1HU6(Ib8h>3?~hil)h}WTMr*RPHs!l z^OY9T31fa72uD2ABH}_eXj01+etPT&*-RmdxlpiF7`Rf2#2O5b^uFJV+`wa~Ixhyi z%TRZqs%>aEJtc>vUzD4pH?ha*GU05QJZGouke<>$`-bcjlW5krr5s06P`KMLlA0eW?M9w(T&<-_%*YJ|SPcWebF9S!DPsw8CR%M*RBES_ z3K?FYE{Uvxra$85K>8=H7R?h^HoGz2RW&ybnqla5!;gD>?Zb|<_H5uB$c=UNyKO#cU%xztP^B4VEKYR2Mot}a$}hQ#^8!ukdF#m z;J|=vu|4|9szXV^tzYqZC+-{yPd7HxRg~bOTleB9g4sJt1l^Uo3Szxd*TaFh-;N`( zQjcOs3Qzba;7{Ix@cQ?6-9U*cC8%fsG+xunef4j}ui7L+e{9G5uI#Co$;%SJm6#}= zSXU<{rToZCCNZuh1U$JkWEG{0SuogE?la&msjpv+}1*X7Qh z`^QD(O#o72w8$ISEMl{S4F=B?J-4RmQ2<0vP!q)di=f*u??Js*CV_^^HPH}g=Zw<} z3W3AgqoJ<}VfzW4@u;5uX%FP6fY+`I+575X-zWpGBh482hmz6W}Jbx-er>@}Cf zG=m4GsRhH}l$?_bNH6_jdfx^cEoM%Y?_SNEYqXTju3ewTuf!21+XhX8YRdA|=<-(J zh8^y1KZc`zhf3sI(6m7uBepS@lpKf0p5xf1Jg263NMyyH%coXTRD{g%Dxj7$nlW*v zQ74hv^y>D)s@S16aavaGO;KMCp`XiPQ_i5ecm Ss+1StsaEMcHQ`~j_~+k}a|k{F diff --git a/Jobs_Collections/venv/Lib/python3.8/site-packages/astroid/brain/__pycache__/brain_random.cpython-38.pyc b/Jobs_Collections/venv/Lib/python3.8/site-packages/astroid/brain/__pycache__/brain_random.cpython-38.pyc deleted file mode 100644 index bdda49ced353bcb26565901847435d8fbc1f028a..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 2217 zcmbVN&2QX96rT^T*Xw*X3D7{{Py}UFH5)}u0ja9GO}D60S*j-G!x9*GJ-cz@wYM{~ zX{o#tA{B%~DFdgsJ}^4@rx1QjlfHP18e&3N8>^ZPyDotp9qw6o3M zzxuXD$Zt3~*<6@hg|1Q%F^OqPg7QrR3UijyJ_{H{9fvUwI3Mn68uh#4|XNwCmJVH$^%SQsMC9 zX1n=O>rRKGaooUfQh|;-wF6?0Y>^QMNk+= z(owZ=WV>+p9cyu{#X-vfrKI3pQn*j)$kUZQ5?6Maltl%)2howD`V`lA;IZ32YkjYM@MPnzDjc%TTK{Zx48~uK#+yAf^ zue^URTzNPMH|6R@^*~=-hStj(8;wCSxR7K@M`?QDQo1ZxSNg+7q_oVF_~?C4MoHGN zGL%sk=l!L@H^#plCmr3%`-3ZU7zjq>5(dws^I<2=GZCVP;e$kPhGk}!E~j}XO4XI6 z3!K>IazV2#{vAb4%ofRrX{TVI1GKB<(uSHXS64xEZLIOOYIX--1i;45 z6E@-nS6?5k=h}zWgK}B6_&Xp;OhQ-Q9%alg*{;WE>;z<{S1@x z45=tlU{UGhnHCSVbYT7x6!B&)NzcHbha_DX0YwYChjj*O;1m9nC2F14*)a}aj8|YW z0pm#+8!l3PNF}oU7^lFYG*KmoJ^+hCFI>i+KRTCWT>xdtwopa=K`KtL=V({`6~j}J z87GoGWvXNB2J?57xQSm7Sw~zK-DsF<<0r~e9aKSOEeF<{%1)FHh2cr2CFUmZRn!%s zJ>0z6Tw811-e_G9Z*H{iG_T!it%o;0xf8B8KfZmdWgLh|8Mk!NxTTNA{}jL2k}{XZ zxdp-5ER-y&s7?;W9JynhLK6P3_zYk*DOu&%rbv( zfzFcM%>PTS-TngZej_g~` zXs}pbQi`4gEIjAAqUD7mLXFne{4j}W+G3Qrvp7urfN)BkXok^xx6hqV#=85#R0nQB za;Y(}Mq^!5CwiHFr{GEENK?(ygbmBZQ_Ijs{ZjRo=JMgxv<=g+N)xz%r}Rg*YMN#B zZ&)t=sE@Bl<=t*+E?42$gBt_ne|G}#VdnrHwFlU72NOUK>ih)IVKKHoyfIa~^lJX` zym}iBIRg9o^>hHl-pkp&j)LU*Z858PETyrJvr6JoMt&fgzuLn6j+KP^D=#I=%A?9W z4ltoi=`NKpoXx}63*32i>vkRzcS*aK>|1(y0k((~TS@%n%#T>=1;JS_xS-umc&}{# z#N#dX{75OhOUZfim^C4~DfJ>Yk7;<4Pf1=45@bRAL+h~1L`vGVOk$6W!X%^YWCb<( zapd~ZJa*)p&o6t0&^e`K;j@%bH;nOpKwR>Wk_b9*YD3jh2l{x|>1J2U&#S-P$lvF4 QTFhu&sEZ9zmg}c~0bqC$g8%>k diff --git a/Jobs_Collections/venv/Lib/python3.8/site-packages/astroid/brain/__pycache__/brain_responses.cpython-38.pyc b/Jobs_Collections/venv/Lib/python3.8/site-packages/astroid/brain/__pycache__/brain_responses.cpython-38.pyc deleted file mode 100644 index 548369912197ac0cd1de2a9d6bdd2212994fcfab..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1801 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 diff --git a/Jobs_Collections/venv/Lib/python3.8/site-packages/astroid/brain/__pycache__/brain_ssl.cpython-38.pyc b/Jobs_Collections/venv/Lib/python3.8/site-packages/astroid/brain/__pycache__/brain_ssl.cpython-38.pyc deleted file mode 100644 index 3dac441d5cf140698f244101e6a09747b85e03ab..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 3628 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 diff --git a/Jobs_Collections/venv/Lib/python3.8/site-packages/astroid/brain/__pycache__/brain_uuid.cpython-38.pyc b/Jobs_Collections/venv/Lib/python3.8/site-packages/astroid/brain/__pycache__/brain_uuid.cpython-38.pyc deleted file mode 100644 index 63fc00296ed62f4e83ad3088d7e98293fdf32971..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 665 zcmZWnO>Yx15VgHu2_zDQ8>dxoIka0v4X9F75v2%mAO|3qJzzO&C%dV4y|tYJRgb;$ zAKGL8(q1_r&fK`bcoU&Yj5OmJk2P=RjpzOTBLuQP`SIz5AoSe@4<&@)6{s15;V4BM zb0Tp`Qi7fDf$yar_&yJAQ0fbE8whV53ZI8Ox8&Xqbh@lxs7 z<|3ZY-=4*#;u|Rre*y{`;3j%EnN8ljeh+R?DK1QgU1lfF_d%zi<~bOP)|lgK#K||Z zf^$u{H->fr)}Lwj914Xs)1tDCS5$W3X%BAGV5%x(n^3BZNpp`I-=W_2}4qw#P>xt19`J)J1(zKxHQ7!3%k$ zN5gWHu -# Copyright (c) 2014-2015 LOGILAB S.A. (Paris, FRANCE) -# Copyright (c) 2015-2016 Ceridwen -# Copyright (c) 2015 Rene Zhang -# Copyright (c) 2018 Bryce Guinta -# Copyright (c) 2018 Ville Skyttรค -# Copyright (c) 2019 Stanislav Levin -# Copyright (c) 2019 David Liu -# Copyright (c) 2019 Bryce Guinta -# Copyright (c) 2019 Frรฉdรฉric Chapoton - -# Licensed under the LGPL: https://www.gnu.org/licenses/old-licenses/lgpl-2.1.en.html -# For details: https://github.com/PyCQA/astroid/blob/master/COPYING.LESSER - -"""Astroid hooks for various builtins.""" - -from functools import partial -from textwrap import dedent - -import six -from astroid import ( - MANAGER, - UseInferenceDefault, - AttributeInferenceError, - inference_tip, - InferenceError, - NameInferenceError, - AstroidTypeError, - MroError, -) -from astroid import arguments -from astroid.builder import AstroidBuilder -from astroid import helpers -from astroid import nodes -from astroid import objects -from astroid import scoped_nodes -from astroid import util - - -OBJECT_DUNDER_NEW = "object.__new__" - - -def _extend_str(class_node, rvalue): - """function to extend builtin str/unicode class""" - code = dedent( - """ - class whatever(object): - def join(self, iterable): - return {rvalue} - def replace(self, old, new, count=None): - return {rvalue} - def format(self, *args, **kwargs): - return {rvalue} - def encode(self, encoding='ascii', errors=None): - return '' - def decode(self, encoding='ascii', errors=None): - return u'' - def capitalize(self): - return {rvalue} - def title(self): - return {rvalue} - def lower(self): - return {rvalue} - def upper(self): - return {rvalue} - def swapcase(self): - return {rvalue} - def index(self, sub, start=None, end=None): - return 0 - def find(self, sub, start=None, end=None): - return 0 - def count(self, sub, start=None, end=None): - return 0 - def strip(self, chars=None): - return {rvalue} - def lstrip(self, chars=None): - return {rvalue} - def rstrip(self, chars=None): - return {rvalue} - def rjust(self, width, fillchar=None): - return {rvalue} - def center(self, width, fillchar=None): - return {rvalue} - def ljust(self, width, fillchar=None): - return {rvalue} - """ - ) - code = code.format(rvalue=rvalue) - fake = AstroidBuilder(MANAGER).string_build(code)["whatever"] - for method in fake.mymethods(): - method.parent = class_node - method.lineno = None - method.col_offset = None - if "__class__" in method.locals: - method.locals["__class__"] = [class_node] - class_node.locals[method.name] = [method] - method.parent = class_node - - -def _extend_builtins(class_transforms): - builtin_ast = MANAGER.builtins_module - for class_name, transform in class_transforms.items(): - transform(builtin_ast[class_name]) - - -_extend_builtins( - { - "bytes": partial(_extend_str, rvalue="b''"), - "str": partial(_extend_str, rvalue="''"), - } -) - - -def _builtin_filter_predicate(node, builtin_name): - if isinstance(node.func, nodes.Name) and node.func.name == builtin_name: - return True - if isinstance(node.func, nodes.Attribute): - return ( - node.func.attrname == "fromkeys" - and isinstance(node.func.expr, nodes.Name) - and node.func.expr.name == "dict" - ) - return False - - -def register_builtin_transform(transform, builtin_name): - """Register a new transform function for the given *builtin_name*. - - The transform function must accept two parameters, a node and - an optional context. - """ - - def _transform_wrapper(node, context=None): - result = transform(node, context=context) - if result: - if not result.parent: - # Let the transformation function determine - # the parent for its result. Otherwise, - # we set it to be the node we transformed from. - result.parent = node - - if result.lineno is None: - result.lineno = node.lineno - if result.col_offset is None: - result.col_offset = node.col_offset - return iter([result]) - - MANAGER.register_transform( - nodes.Call, - inference_tip(_transform_wrapper), - partial(_builtin_filter_predicate, builtin_name=builtin_name), - ) - - -def _container_generic_inference(node, context, node_type, transform): - args = node.args - if not args: - return node_type() - if len(node.args) > 1: - raise UseInferenceDefault() - - (arg,) = args - transformed = transform(arg) - if not transformed: - try: - inferred = next(arg.infer(context=context)) - except (InferenceError, StopIteration): - raise UseInferenceDefault() - if inferred is util.Uninferable: - raise UseInferenceDefault() - transformed = transform(inferred) - if not transformed or transformed is util.Uninferable: - raise UseInferenceDefault() - return transformed - - -def _container_generic_transform(arg, context, klass, iterables, build_elts): - if isinstance(arg, klass): - return arg - elif isinstance(arg, iterables): - if all(isinstance(elt, nodes.Const) for elt in arg.elts): - elts = [elt.value for elt in arg.elts] - else: - # TODO: Does not handle deduplication for sets. - elts = [] - for element in arg.elts: - inferred = helpers.safe_infer(element, context=context) - if inferred: - evaluated_object = nodes.EvaluatedObject( - original=element, value=inferred - ) - elts.append(evaluated_object) - elif isinstance(arg, nodes.Dict): - # Dicts need to have consts as strings already. - if not all(isinstance(elt[0], nodes.Const) for elt in arg.items): - raise UseInferenceDefault() - elts = [item[0].value for item in arg.items] - elif isinstance(arg, nodes.Const) and isinstance( - arg.value, (six.string_types, six.binary_type) - ): - elts = arg.value - else: - return - return klass.from_elements(elts=build_elts(elts)) - - -def _infer_builtin_container( - node, context, klass=None, iterables=None, build_elts=None -): - transform_func = partial( - _container_generic_transform, - context=context, - klass=klass, - iterables=iterables, - build_elts=build_elts, - ) - - return _container_generic_inference(node, context, klass, transform_func) - - -# pylint: disable=invalid-name -infer_tuple = partial( - _infer_builtin_container, - klass=nodes.Tuple, - iterables=( - nodes.List, - nodes.Set, - objects.FrozenSet, - objects.DictItems, - objects.DictKeys, - objects.DictValues, - ), - build_elts=tuple, -) - -infer_list = partial( - _infer_builtin_container, - klass=nodes.List, - iterables=( - nodes.Tuple, - nodes.Set, - objects.FrozenSet, - objects.DictItems, - objects.DictKeys, - objects.DictValues, - ), - build_elts=list, -) - -infer_set = partial( - _infer_builtin_container, - klass=nodes.Set, - iterables=(nodes.List, nodes.Tuple, objects.FrozenSet, objects.DictKeys), - build_elts=set, -) - -infer_frozenset = partial( - _infer_builtin_container, - klass=objects.FrozenSet, - iterables=(nodes.List, nodes.Tuple, nodes.Set, objects.FrozenSet, objects.DictKeys), - build_elts=frozenset, -) - - -def _get_elts(arg, context): - is_iterable = lambda n: isinstance(n, (nodes.List, nodes.Tuple, nodes.Set)) - try: - inferred = next(arg.infer(context)) - except (InferenceError, NameInferenceError): - raise UseInferenceDefault() - if isinstance(inferred, nodes.Dict): - items = inferred.items - elif is_iterable(inferred): - items = [] - for elt in inferred.elts: - # If an item is not a pair of two items, - # then fallback to the default inference. - # Also, take in consideration only hashable items, - # tuples and consts. We are choosing Names as well. - if not is_iterable(elt): - raise UseInferenceDefault() - if len(elt.elts) != 2: - raise UseInferenceDefault() - if not isinstance(elt.elts[0], (nodes.Tuple, nodes.Const, nodes.Name)): - raise UseInferenceDefault() - items.append(tuple(elt.elts)) - else: - raise UseInferenceDefault() - return items - - -def infer_dict(node, context=None): - """Try to infer a dict call to a Dict node. - - The function treats the following cases: - - * dict() - * dict(mapping) - * dict(iterable) - * dict(iterable, **kwargs) - * dict(mapping, **kwargs) - * dict(**kwargs) - - If a case can't be inferred, we'll fallback to default inference. - """ - call = arguments.CallSite.from_call(node, context=context) - if call.has_invalid_arguments() or call.has_invalid_keywords(): - raise UseInferenceDefault - - args = call.positional_arguments - kwargs = list(call.keyword_arguments.items()) - - if not args and not kwargs: - # dict() - return nodes.Dict() - elif kwargs and not args: - # dict(a=1, b=2, c=4) - items = [(nodes.Const(key), value) for key, value in kwargs] - elif len(args) == 1 and kwargs: - # dict(some_iterable, b=2, c=4) - elts = _get_elts(args[0], context) - keys = [(nodes.Const(key), value) for key, value in kwargs] - items = elts + keys - elif len(args) == 1: - items = _get_elts(args[0], context) - else: - raise UseInferenceDefault() - - value = nodes.Dict( - col_offset=node.col_offset, lineno=node.lineno, parent=node.parent - ) - value.postinit(items) - return value - - -def infer_super(node, context=None): - """Understand super calls. - - There are some restrictions for what can be understood: - - * unbounded super (one argument form) is not understood. - - * if the super call is not inside a function (classmethod or method), - then the default inference will be used. - - * if the super arguments can't be inferred, the default inference - will be used. - """ - if len(node.args) == 1: - # Ignore unbounded super. - raise UseInferenceDefault - - scope = node.scope() - if not isinstance(scope, nodes.FunctionDef): - # Ignore non-method uses of super. - raise UseInferenceDefault - if scope.type not in ("classmethod", "method"): - # Not interested in staticmethods. - raise UseInferenceDefault - - cls = scoped_nodes.get_wrapping_class(scope) - if not len(node.args): - mro_pointer = cls - # In we are in a classmethod, the interpreter will fill - # automatically the class as the second argument, not an instance. - if scope.type == "classmethod": - mro_type = cls - else: - mro_type = cls.instantiate_class() - else: - try: - mro_pointer = next(node.args[0].infer(context=context)) - except InferenceError: - raise UseInferenceDefault - try: - mro_type = next(node.args[1].infer(context=context)) - except InferenceError: - raise UseInferenceDefault - - if mro_pointer is util.Uninferable or mro_type is util.Uninferable: - # No way we could understand this. - raise UseInferenceDefault - - super_obj = objects.Super( - mro_pointer=mro_pointer, mro_type=mro_type, self_class=cls, scope=scope - ) - super_obj.parent = node - return super_obj - - -def _infer_getattr_args(node, context): - if len(node.args) not in (2, 3): - # Not a valid getattr call. - raise UseInferenceDefault - - try: - obj = next(node.args[0].infer(context=context)) - attr = next(node.args[1].infer(context=context)) - except InferenceError: - raise UseInferenceDefault - - if obj is util.Uninferable or attr is util.Uninferable: - # If one of the arguments is something we can't infer, - # then also make the result of the getattr call something - # which is unknown. - return util.Uninferable, util.Uninferable - - is_string = isinstance(attr, nodes.Const) and isinstance( - attr.value, six.string_types - ) - if not is_string: - raise UseInferenceDefault - - return obj, attr.value - - -def infer_getattr(node, context=None): - """Understand getattr calls - - If one of the arguments is an Uninferable object, then the - result will be an Uninferable object. Otherwise, the normal attribute - lookup will be done. - """ - obj, attr = _infer_getattr_args(node, context) - if ( - obj is util.Uninferable - or attr is util.Uninferable - or not hasattr(obj, "igetattr") - ): - return util.Uninferable - - try: - return next(obj.igetattr(attr, context=context)) - except (StopIteration, InferenceError, AttributeInferenceError): - if len(node.args) == 3: - # Try to infer the default and return it instead. - try: - return next(node.args[2].infer(context=context)) - except InferenceError: - raise UseInferenceDefault - - raise UseInferenceDefault - - -def infer_hasattr(node, context=None): - """Understand hasattr calls - - This always guarantees three possible outcomes for calling - hasattr: Const(False) when we are sure that the object - doesn't have the intended attribute, Const(True) when - we know that the object has the attribute and Uninferable - when we are unsure of the outcome of the function call. - """ - try: - obj, attr = _infer_getattr_args(node, context) - if ( - obj is util.Uninferable - or attr is util.Uninferable - or not hasattr(obj, "getattr") - ): - return util.Uninferable - obj.getattr(attr, context=context) - except UseInferenceDefault: - # Can't infer something from this function call. - return util.Uninferable - except AttributeInferenceError: - # Doesn't have it. - return nodes.Const(False) - return nodes.Const(True) - - -def infer_callable(node, context=None): - """Understand callable calls - - This follows Python's semantics, where an object - is callable if it provides an attribute __call__, - even though that attribute is something which can't be - called. - """ - if len(node.args) != 1: - # Invalid callable call. - raise UseInferenceDefault - - argument = node.args[0] - try: - inferred = next(argument.infer(context=context)) - except InferenceError: - return util.Uninferable - if inferred is util.Uninferable: - return util.Uninferable - return nodes.Const(inferred.callable()) - - -def infer_property(node, context=None): - """Understand `property` class - - This only infers the output of `property` - call, not the arguments themselves. - """ - if len(node.args) < 1: - # Invalid property call. - raise UseInferenceDefault - - getter = node.args[0] - try: - inferred = next(getter.infer(context=context)) - except InferenceError: - raise UseInferenceDefault - - if not isinstance(inferred, (nodes.FunctionDef, nodes.Lambda)): - raise UseInferenceDefault - - return objects.Property( - function=inferred, - name=inferred.name, - doc=getattr(inferred, "doc", None), - lineno=node.lineno, - parent=node, - col_offset=node.col_offset, - ) - - -def infer_bool(node, context=None): - """Understand bool calls.""" - if len(node.args) > 1: - # Invalid bool call. - raise UseInferenceDefault - - if not node.args: - return nodes.Const(False) - - argument = node.args[0] - try: - inferred = next(argument.infer(context=context)) - except InferenceError: - return util.Uninferable - if inferred is util.Uninferable: - return util.Uninferable - - bool_value = inferred.bool_value(context=context) - if bool_value is util.Uninferable: - return util.Uninferable - return nodes.Const(bool_value) - - -def infer_type(node, context=None): - """Understand the one-argument form of *type*.""" - if len(node.args) != 1: - raise UseInferenceDefault - - return helpers.object_type(node.args[0], context) - - -def infer_slice(node, context=None): - """Understand `slice` calls.""" - args = node.args - if not 0 < len(args) <= 3: - raise UseInferenceDefault - - infer_func = partial(helpers.safe_infer, context=context) - args = [infer_func(arg) for arg in args] - for arg in args: - if not arg or arg is util.Uninferable: - raise UseInferenceDefault - if not isinstance(arg, nodes.Const): - raise UseInferenceDefault - if not isinstance(arg.value, (type(None), int)): - raise UseInferenceDefault - - if len(args) < 3: - # Make sure we have 3 arguments. - args.extend([None] * (3 - len(args))) - - slice_node = nodes.Slice( - lineno=node.lineno, col_offset=node.col_offset, parent=node.parent - ) - slice_node.postinit(*args) - return slice_node - - -def _infer_object__new__decorator(node, context=None): - # Instantiate class immediately - # since that's what @object.__new__ does - return iter((node.instantiate_class(),)) - - -def _infer_object__new__decorator_check(node): - """Predicate before inference_tip - - Check if the given ClassDef has an @object.__new__ decorator - """ - if not node.decorators: - return False - - for decorator in node.decorators.nodes: - if isinstance(decorator, nodes.Attribute): - if decorator.as_string() == OBJECT_DUNDER_NEW: - return True - return False - - -def infer_issubclass(callnode, context=None): - """Infer issubclass() calls - - :param nodes.Call callnode: an `issubclass` call - :param InferenceContext: the context for the inference - :rtype nodes.Const: Boolean Const value of the `issubclass` call - :raises UseInferenceDefault: If the node cannot be inferred - """ - call = arguments.CallSite.from_call(callnode, context=context) - if call.keyword_arguments: - # issubclass doesn't support keyword arguments - raise UseInferenceDefault("TypeError: issubclass() takes no keyword arguments") - if len(call.positional_arguments) != 2: - raise UseInferenceDefault( - "Expected two arguments, got {count}".format( - count=len(call.positional_arguments) - ) - ) - # The left hand argument is the obj to be checked - obj_node, class_or_tuple_node = call.positional_arguments - - try: - obj_type = next(obj_node.infer(context=context)) - except InferenceError as exc: - raise UseInferenceDefault from exc - if not isinstance(obj_type, nodes.ClassDef): - raise UseInferenceDefault("TypeError: arg 1 must be class") - - # The right hand argument is the class(es) that the given - # object is to be checked against. - try: - class_container = _class_or_tuple_to_container( - class_or_tuple_node, context=context - ) - except InferenceError as exc: - raise UseInferenceDefault from exc - try: - issubclass_bool = helpers.object_issubclass(obj_type, class_container, context) - except AstroidTypeError as exc: - raise UseInferenceDefault("TypeError: " + str(exc)) from exc - except MroError as exc: - raise UseInferenceDefault from exc - return nodes.Const(issubclass_bool) - - -def infer_isinstance(callnode, context=None): - """Infer isinstance calls - - :param nodes.Call callnode: an isinstance call - :param InferenceContext: context for call - (currently unused but is a common interface for inference) - :rtype nodes.Const: Boolean Const value of isinstance call - - :raises UseInferenceDefault: If the node cannot be inferred - """ - call = arguments.CallSite.from_call(callnode, context=context) - if call.keyword_arguments: - # isinstance doesn't support keyword arguments - raise UseInferenceDefault("TypeError: isinstance() takes no keyword arguments") - if len(call.positional_arguments) != 2: - raise UseInferenceDefault( - "Expected two arguments, got {count}".format( - count=len(call.positional_arguments) - ) - ) - # The left hand argument is the obj to be checked - obj_node, class_or_tuple_node = call.positional_arguments - # The right hand argument is the class(es) that the given - # obj is to be check is an instance of - try: - class_container = _class_or_tuple_to_container( - class_or_tuple_node, context=context - ) - except InferenceError: - raise UseInferenceDefault - try: - isinstance_bool = helpers.object_isinstance(obj_node, class_container, context) - except AstroidTypeError as exc: - raise UseInferenceDefault("TypeError: " + str(exc)) - except MroError as exc: - raise UseInferenceDefault from exc - if isinstance_bool is util.Uninferable: - raise UseInferenceDefault - return nodes.Const(isinstance_bool) - - -def _class_or_tuple_to_container(node, context=None): - # Move inferences results into container - # to simplify later logic - # raises InferenceError if any of the inferences fall through - node_infer = next(node.infer(context=context)) - # arg2 MUST be a type or a TUPLE of types - # for isinstance - if isinstance(node_infer, nodes.Tuple): - class_container = [ - next(node.infer(context=context)) for node in node_infer.elts - ] - class_container = [ - klass_node for klass_node in class_container if klass_node is not None - ] - else: - class_container = [node_infer] - return class_container - - -def infer_len(node, context=None): - """Infer length calls - - :param nodes.Call node: len call to infer - :param context.InferenceContext: node context - :rtype nodes.Const: a Const node with the inferred length, if possible - """ - call = arguments.CallSite.from_call(node, context=context) - if call.keyword_arguments: - raise UseInferenceDefault("TypeError: len() must take no keyword arguments") - if len(call.positional_arguments) != 1: - raise UseInferenceDefault( - "TypeError: len() must take exactly one argument " - "({len}) given".format(len=len(call.positional_arguments)) - ) - [argument_node] = call.positional_arguments - try: - return nodes.Const(helpers.object_len(argument_node, context=context)) - except (AstroidTypeError, InferenceError) as exc: - raise UseInferenceDefault(str(exc)) from exc - - -def infer_str(node, context=None): - """Infer str() calls - - :param nodes.Call node: str() call to infer - :param context.InferenceContext: node context - :rtype nodes.Const: a Const containing an empty string - """ - call = arguments.CallSite.from_call(node, context=context) - if call.keyword_arguments: - raise UseInferenceDefault("TypeError: str() must take no keyword arguments") - try: - return nodes.Const("") - except (AstroidTypeError, InferenceError) as exc: - raise UseInferenceDefault(str(exc)) from exc - - -def infer_int(node, context=None): - """Infer int() calls - - :param nodes.Call node: int() call to infer - :param context.InferenceContext: node context - :rtype nodes.Const: a Const containing the integer value of the int() call - """ - call = arguments.CallSite.from_call(node, context=context) - if call.keyword_arguments: - raise UseInferenceDefault("TypeError: int() must take no keyword arguments") - - if call.positional_arguments: - try: - first_value = next(call.positional_arguments[0].infer(context=context)) - except (InferenceError, StopIteration) as exc: - raise UseInferenceDefault(str(exc)) from exc - - if first_value is util.Uninferable: - raise UseInferenceDefault - - if isinstance(first_value, nodes.Const) and isinstance( - first_value.value, (int, str) - ): - try: - actual_value = int(first_value.value) - except ValueError: - return nodes.Const(0) - return nodes.Const(actual_value) - - return nodes.Const(0) - - -def infer_dict_fromkeys(node, context=None): - """Infer dict.fromkeys - - :param nodes.Call node: dict.fromkeys() call to infer - :param context.InferenceContext: node context - :rtype nodes.Dict: - a Dictionary containing the values that astroid was able to infer. - In case the inference failed for any reason, an empty dictionary - will be inferred instead. - """ - - def _build_dict_with_elements(elements): - new_node = nodes.Dict( - col_offset=node.col_offset, lineno=node.lineno, parent=node.parent - ) - new_node.postinit(elements) - return new_node - - call = arguments.CallSite.from_call(node, context=context) - if call.keyword_arguments: - raise UseInferenceDefault("TypeError: int() must take no keyword arguments") - if len(call.positional_arguments) not in {1, 2}: - raise UseInferenceDefault( - "TypeError: Needs between 1 and 2 positional arguments" - ) - - default = nodes.Const(None) - values = call.positional_arguments[0] - try: - inferred_values = next(values.infer(context=context)) - except InferenceError: - return _build_dict_with_elements([]) - if inferred_values is util.Uninferable: - return _build_dict_with_elements([]) - - # Limit to a couple of potential values, as this can become pretty complicated - accepted_iterable_elements = (nodes.Const,) - if isinstance(inferred_values, (nodes.List, nodes.Set, nodes.Tuple)): - elements = inferred_values.elts - for element in elements: - if not isinstance(element, accepted_iterable_elements): - # Fallback to an empty dict - return _build_dict_with_elements([]) - - elements_with_value = [(element, default) for element in elements] - return _build_dict_with_elements(elements_with_value) - - elif isinstance(inferred_values, nodes.Const) and isinstance( - inferred_values.value, (str, bytes) - ): - elements = [ - (nodes.Const(element), default) for element in inferred_values.value - ] - return _build_dict_with_elements(elements) - elif isinstance(inferred_values, nodes.Dict): - keys = inferred_values.itered() - for key in keys: - if not isinstance(key, accepted_iterable_elements): - # Fallback to an empty dict - return _build_dict_with_elements([]) - - elements_with_value = [(element, default) for element in keys] - return _build_dict_with_elements(elements_with_value) - - # Fallback to an empty dictionary - return _build_dict_with_elements([]) - - -# Builtins inference -register_builtin_transform(infer_bool, "bool") -register_builtin_transform(infer_super, "super") -register_builtin_transform(infer_callable, "callable") -register_builtin_transform(infer_property, "property") -register_builtin_transform(infer_getattr, "getattr") -register_builtin_transform(infer_hasattr, "hasattr") -register_builtin_transform(infer_tuple, "tuple") -register_builtin_transform(infer_set, "set") -register_builtin_transform(infer_list, "list") -register_builtin_transform(infer_dict, "dict") -register_builtin_transform(infer_frozenset, "frozenset") -register_builtin_transform(infer_type, "type") -register_builtin_transform(infer_slice, "slice") -register_builtin_transform(infer_isinstance, "isinstance") -register_builtin_transform(infer_issubclass, "issubclass") -register_builtin_transform(infer_len, "len") -register_builtin_transform(infer_str, "str") -register_builtin_transform(infer_int, "int") -register_builtin_transform(infer_dict_fromkeys, "dict.fromkeys") - - -# Infer object.__new__ calls -MANAGER.register_transform( - nodes.ClassDef, - inference_tip(_infer_object__new__decorator), - _infer_object__new__decorator_check, -) diff --git a/Jobs_Collections/venv/Lib/python3.8/site-packages/astroid/brain/brain_collections.py b/Jobs_Collections/venv/Lib/python3.8/site-packages/astroid/brain/brain_collections.py deleted file mode 100644 index 669c6ca..0000000 --- a/Jobs_Collections/venv/Lib/python3.8/site-packages/astroid/brain/brain_collections.py +++ /dev/null @@ -1,75 +0,0 @@ -# -*- coding: utf-8 -*- -# Copyright (c) 2016, 2018 Claudiu Popa -# Copyright (c) 2016-2017 ลukasz Rogalski -# Copyright (c) 2017 Derek Gustafson -# Copyright (c) 2018 Ioana Tagirta -# Copyright (c) 2019 Hugo van Kemenade - -# Licensed under the LGPL: https://www.gnu.org/licenses/old-licenses/lgpl-2.1.en.html -# For details: https://github.com/PyCQA/astroid/blob/master/COPYING.LESSER -import sys - -import astroid - - -def _collections_transform(): - return astroid.parse( - """ - class defaultdict(dict): - default_factory = None - def __missing__(self, key): pass - def __getitem__(self, key): return default_factory - - """ - + _deque_mock() - + _ordered_dict_mock() - ) - - -def _deque_mock(): - base_deque_class = """ - class deque(object): - maxlen = 0 - def __init__(self, iterable=None, maxlen=None): - self.iterable = iterable or [] - def append(self, x): pass - def appendleft(self, x): pass - def clear(self): pass - def count(self, x): return 0 - def extend(self, iterable): pass - def extendleft(self, iterable): pass - def pop(self): return self.iterable[0] - def popleft(self): return self.iterable[0] - def remove(self, value): pass - def reverse(self): return reversed(self.iterable) - def rotate(self, n=1): return self - def __iter__(self): return self - def __reversed__(self): return self.iterable[::-1] - def __getitem__(self, index): return self.iterable[index] - def __setitem__(self, index, value): pass - def __delitem__(self, index): pass - def __bool__(self): return bool(self.iterable) - def __nonzero__(self): return bool(self.iterable) - def __contains__(self, o): return o in self.iterable - def __len__(self): return len(self.iterable) - def __copy__(self): return deque(self.iterable) - def copy(self): return deque(self.iterable) - def index(self, x, start=0, end=0): return 0 - def insert(self, x, i): pass - def __add__(self, other): pass - def __iadd__(self, other): pass - def __mul__(self, other): pass - def __imul__(self, other): pass - def __rmul__(self, other): pass""" - return base_deque_class - - -def _ordered_dict_mock(): - base_ordered_dict_class = """ - class OrderedDict(dict): - def __reversed__(self): return self[::-1] - def move_to_end(self, key, last=False): pass""" - return base_ordered_dict_class - - -astroid.register_module_extender(astroid.MANAGER, "collections", _collections_transform) diff --git a/Jobs_Collections/venv/Lib/python3.8/site-packages/astroid/brain/brain_crypt.py b/Jobs_Collections/venv/Lib/python3.8/site-packages/astroid/brain/brain_crypt.py deleted file mode 100644 index 491ee23..0000000 --- a/Jobs_Collections/venv/Lib/python3.8/site-packages/astroid/brain/brain_crypt.py +++ /dev/null @@ -1,26 +0,0 @@ -# Licensed under the LGPL: https://www.gnu.org/licenses/old-licenses/lgpl-2.1.en.html -# For details: https://github.com/PyCQA/astroid/blob/master/COPYING.LESSER -import sys -import astroid - -PY37 = sys.version_info >= (3, 7) - -if PY37: - # Since Python 3.7 Hashing Methods are added - # dynamically to globals() - - def _re_transform(): - return astroid.parse( - """ - from collections import namedtuple - _Method = namedtuple('_Method', 'name ident salt_chars total_size') - - METHOD_SHA512 = _Method('SHA512', '6', 16, 106) - METHOD_SHA256 = _Method('SHA256', '5', 16, 63) - METHOD_BLOWFISH = _Method('BLOWFISH', 2, 'b', 22) - METHOD_MD5 = _Method('MD5', '1', 8, 34) - METHOD_CRYPT = _Method('CRYPT', None, 2, 13) - """ - ) - - astroid.register_module_extender(astroid.MANAGER, "crypt", _re_transform) diff --git a/Jobs_Collections/venv/Lib/python3.8/site-packages/astroid/brain/brain_curses.py b/Jobs_Collections/venv/Lib/python3.8/site-packages/astroid/brain/brain_curses.py deleted file mode 100644 index 68e88b9..0000000 --- a/Jobs_Collections/venv/Lib/python3.8/site-packages/astroid/brain/brain_curses.py +++ /dev/null @@ -1,179 +0,0 @@ -# Licensed under the LGPL: https://www.gnu.org/licenses/old-licenses/lgpl-2.1.en.html -# For details: https://github.com/PyCQA/astroid/blob/master/COPYING.LESSER -import astroid - - -def _curses_transform(): - return astroid.parse( - """ - A_ALTCHARSET = 1 - A_BLINK = 1 - A_BOLD = 1 - A_DIM = 1 - A_INVIS = 1 - A_ITALIC = 1 - A_NORMAL = 1 - A_PROTECT = 1 - A_REVERSE = 1 - A_STANDOUT = 1 - A_UNDERLINE = 1 - A_HORIZONTAL = 1 - A_LEFT = 1 - A_LOW = 1 - A_RIGHT = 1 - A_TOP = 1 - A_VERTICAL = 1 - A_CHARTEXT = 1 - A_ATTRIBUTES = 1 - A_CHARTEXT = 1 - A_COLOR = 1 - KEY_MIN = 1 - KEY_BREAK = 1 - KEY_DOWN = 1 - KEY_UP = 1 - KEY_LEFT = 1 - KEY_RIGHT = 1 - KEY_HOME = 1 - KEY_BACKSPACE = 1 - KEY_F0 = 1 - KEY_Fn = 1 - KEY_DL = 1 - KEY_IL = 1 - KEY_DC = 1 - KEY_IC = 1 - KEY_EIC = 1 - KEY_CLEAR = 1 - KEY_EOS = 1 - KEY_EOL = 1 - KEY_SF = 1 - KEY_SR = 1 - KEY_NPAGE = 1 - KEY_PPAGE = 1 - KEY_STAB = 1 - KEY_CTAB = 1 - KEY_CATAB = 1 - KEY_ENTER = 1 - KEY_SRESET = 1 - KEY_RESET = 1 - KEY_PRINT = 1 - KEY_LL = 1 - KEY_A1 = 1 - KEY_A3 = 1 - KEY_B2 = 1 - KEY_C1 = 1 - KEY_C3 = 1 - KEY_BTAB = 1 - KEY_BEG = 1 - KEY_CANCEL = 1 - KEY_CLOSE = 1 - KEY_COMMAND = 1 - KEY_COPY = 1 - KEY_CREATE = 1 - KEY_END = 1 - KEY_EXIT = 1 - KEY_FIND = 1 - KEY_HELP = 1 - KEY_MARK = 1 - KEY_MESSAGE = 1 - KEY_MOVE = 1 - KEY_NEXT = 1 - KEY_OPEN = 1 - KEY_OPTIONS = 1 - KEY_PREVIOUS = 1 - KEY_REDO = 1 - KEY_REFERENCE = 1 - KEY_REFRESH = 1 - KEY_REPLACE = 1 - KEY_RESTART = 1 - KEY_RESUME = 1 - KEY_SAVE = 1 - KEY_SBEG = 1 - KEY_SCANCEL = 1 - KEY_SCOMMAND = 1 - KEY_SCOPY = 1 - KEY_SCREATE = 1 - KEY_SDC = 1 - KEY_SDL = 1 - KEY_SELECT = 1 - KEY_SEND = 1 - KEY_SEOL = 1 - KEY_SEXIT = 1 - KEY_SFIND = 1 - KEY_SHELP = 1 - KEY_SHOME = 1 - KEY_SIC = 1 - KEY_SLEFT = 1 - KEY_SMESSAGE = 1 - KEY_SMOVE = 1 - KEY_SNEXT = 1 - KEY_SOPTIONS = 1 - KEY_SPREVIOUS = 1 - KEY_SPRINT = 1 - KEY_SREDO = 1 - KEY_SREPLACE = 1 - KEY_SRIGHT = 1 - KEY_SRSUME = 1 - KEY_SSAVE = 1 - KEY_SSUSPEND = 1 - KEY_SUNDO = 1 - KEY_SUSPEND = 1 - KEY_UNDO = 1 - KEY_MOUSE = 1 - KEY_RESIZE = 1 - KEY_MAX = 1 - ACS_BBSS = 1 - ACS_BLOCK = 1 - ACS_BOARD = 1 - ACS_BSBS = 1 - ACS_BSSB = 1 - ACS_BSSS = 1 - ACS_BTEE = 1 - ACS_BULLET = 1 - ACS_CKBOARD = 1 - ACS_DARROW = 1 - ACS_DEGREE = 1 - ACS_DIAMOND = 1 - ACS_GEQUAL = 1 - ACS_HLINE = 1 - ACS_LANTERN = 1 - ACS_LARROW = 1 - ACS_LEQUAL = 1 - ACS_LLCORNER = 1 - ACS_LRCORNER = 1 - ACS_LTEE = 1 - ACS_NEQUAL = 1 - ACS_PI = 1 - ACS_PLMINUS = 1 - ACS_PLUS = 1 - ACS_RARROW = 1 - ACS_RTEE = 1 - ACS_S1 = 1 - ACS_S3 = 1 - ACS_S7 = 1 - ACS_S9 = 1 - ACS_SBBS = 1 - ACS_SBSB = 1 - ACS_SBSS = 1 - ACS_SSBB = 1 - ACS_SSBS = 1 - ACS_SSSB = 1 - ACS_SSSS = 1 - ACS_STERLING = 1 - ACS_TTEE = 1 - ACS_UARROW = 1 - ACS_ULCORNER = 1 - ACS_URCORNER = 1 - ACS_VLINE = 1 - COLOR_BLACK = 1 - COLOR_BLUE = 1 - COLOR_CYAN = 1 - COLOR_GREEN = 1 - COLOR_MAGENTA = 1 - COLOR_RED = 1 - COLOR_WHITE = 1 - COLOR_YELLOW = 1 - """ - ) - - -astroid.register_module_extender(astroid.MANAGER, "curses", _curses_transform) diff --git a/Jobs_Collections/venv/Lib/python3.8/site-packages/astroid/brain/brain_dataclasses.py b/Jobs_Collections/venv/Lib/python3.8/site-packages/astroid/brain/brain_dataclasses.py deleted file mode 100644 index 7a25e0c..0000000 --- a/Jobs_Collections/venv/Lib/python3.8/site-packages/astroid/brain/brain_dataclasses.py +++ /dev/null @@ -1,50 +0,0 @@ -# Licensed under the LGPL: https://www.gnu.org/licenses/old-licenses/lgpl-2.1.en.html -# For details: https://github.com/PyCQA/astroid/blob/master/COPYING.LESSER -""" -Astroid hook for the dataclasses library -""" - -import astroid -from astroid import MANAGER - - -DATACLASSES_DECORATORS = frozenset(("dataclasses.dataclass", "dataclass")) - - -def is_decorated_with_dataclass(node, decorator_names=DATACLASSES_DECORATORS): - """Return True if a decorated node has a `dataclass` decorator applied.""" - if not node.decorators: - return False - for decorator_attribute in node.decorators.nodes: - if isinstance(decorator_attribute, astroid.Call): # decorator with arguments - decorator_attribute = decorator_attribute.func - if decorator_attribute.as_string() in decorator_names: - return True - return False - - -def dataclass_transform(node): - """Rewrite a dataclass to be easily understood by pylint""" - - for assign_node in node.body: - if not isinstance(assign_node, (astroid.AnnAssign, astroid.Assign)): - continue - - targets = ( - assign_node.targets - if hasattr(assign_node, "targets") - else [assign_node.target] - ) - for target in targets: - rhs_node = astroid.Unknown( - lineno=assign_node.lineno, - col_offset=assign_node.col_offset, - parent=assign_node, - ) - node.instance_attrs[target.name] = [rhs_node] - node.locals[target.name] = [rhs_node] - - -MANAGER.register_transform( - astroid.ClassDef, dataclass_transform, is_decorated_with_dataclass -) diff --git a/Jobs_Collections/venv/Lib/python3.8/site-packages/astroid/brain/brain_dateutil.py b/Jobs_Collections/venv/Lib/python3.8/site-packages/astroid/brain/brain_dateutil.py deleted file mode 100644 index 9fdb9fd..0000000 --- a/Jobs_Collections/venv/Lib/python3.8/site-packages/astroid/brain/brain_dateutil.py +++ /dev/null @@ -1,28 +0,0 @@ -# Copyright (c) 2015-2016, 2018 Claudiu Popa -# Copyright (c) 2015 raylu -# Copyright (c) 2016 Ceridwen - -# Licensed under the LGPL: https://www.gnu.org/licenses/old-licenses/lgpl-2.1.en.html -# For details: https://github.com/PyCQA/astroid/blob/master/COPYING.LESSER - -"""Astroid hooks for dateutil""" - -import textwrap - -from astroid import MANAGER, register_module_extender -from astroid.builder import AstroidBuilder - - -def dateutil_transform(): - return AstroidBuilder(MANAGER).string_build( - textwrap.dedent( - """ - import datetime - def parse(timestr, parserinfo=None, **kwargs): - return datetime.datetime() - """ - ) - ) - - -register_module_extender(MANAGER, "dateutil.parser", dateutil_transform) diff --git a/Jobs_Collections/venv/Lib/python3.8/site-packages/astroid/brain/brain_fstrings.py b/Jobs_Collections/venv/Lib/python3.8/site-packages/astroid/brain/brain_fstrings.py deleted file mode 100644 index 298d58a..0000000 --- a/Jobs_Collections/venv/Lib/python3.8/site-packages/astroid/brain/brain_fstrings.py +++ /dev/null @@ -1,51 +0,0 @@ -# Copyright (c) 2017-2018 Claudiu Popa - -# Licensed under the LGPL: https://www.gnu.org/licenses/old-licenses/lgpl-2.1.en.html -# For details: https://github.com/PyCQA/astroid/blob/master/COPYING.LESSER -import collections -import sys - -import astroid - - -def _clone_node_with_lineno(node, parent, lineno): - cls = node.__class__ - other_fields = node._other_fields - _astroid_fields = node._astroid_fields - init_params = {"lineno": lineno, "col_offset": node.col_offset, "parent": parent} - postinit_params = {param: getattr(node, param) for param in _astroid_fields} - if other_fields: - init_params.update({param: getattr(node, param) for param in other_fields}) - new_node = cls(**init_params) - if hasattr(node, "postinit") and _astroid_fields: - for param, child in postinit_params.items(): - if child and not isinstance(child, collections.Sequence): - cloned_child = _clone_node_with_lineno( - node=child, lineno=new_node.lineno, parent=new_node - ) - postinit_params[param] = cloned_child - new_node.postinit(**postinit_params) - return new_node - - -def _transform_formatted_value(node): - if node.value and node.value.lineno == 1: - if node.lineno != node.value.lineno: - new_node = astroid.FormattedValue( - lineno=node.lineno, col_offset=node.col_offset, parent=node.parent - ) - new_value = _clone_node_with_lineno( - node=node.value, lineno=node.lineno, parent=new_node - ) - new_node.postinit(value=new_value, format_spec=node.format_spec) - return new_node - - -if sys.version_info[:2] >= (3, 6): - # TODO: this fix tries to *patch* http://bugs.python.org/issue29051 - # The problem is that FormattedValue.value, which is a Name node, - # has wrong line numbers, usually 1. This creates problems for pylint, - # which expects correct line numbers for things such as message control. - astroid.MANAGER.register_transform( - astroid.FormattedValue, _transform_formatted_value - ) diff --git a/Jobs_Collections/venv/Lib/python3.8/site-packages/astroid/brain/brain_functools.py b/Jobs_Collections/venv/Lib/python3.8/site-packages/astroid/brain/brain_functools.py deleted file mode 100644 index d6c6069..0000000 --- a/Jobs_Collections/venv/Lib/python3.8/site-packages/astroid/brain/brain_functools.py +++ /dev/null @@ -1,159 +0,0 @@ -# Copyright (c) 2016, 2018-2020 Claudiu Popa -# Copyright (c) 2018 hippo91 -# Copyright (c) 2018 Bryce Guinta - -"""Astroid hooks for understanding functools library module.""" -from functools import partial -from itertools import chain - -import astroid -from astroid import arguments -from astroid import BoundMethod -from astroid import extract_node -from astroid import helpers -from astroid.interpreter import objectmodel -from astroid import MANAGER -from astroid import objects - - -LRU_CACHE = "functools.lru_cache" - - -class LruWrappedModel(objectmodel.FunctionModel): - """Special attribute model for functions decorated with functools.lru_cache. - - The said decorators patches at decoration time some functions onto - the decorated function. - """ - - @property - def attr___wrapped__(self): - return self._instance - - @property - def attr_cache_info(self): - cache_info = extract_node( - """ - from functools import _CacheInfo - _CacheInfo(0, 0, 0, 0) - """ - ) - - class CacheInfoBoundMethod(BoundMethod): - def infer_call_result(self, caller, context=None): - yield helpers.safe_infer(cache_info) - - return CacheInfoBoundMethod(proxy=self._instance, bound=self._instance) - - @property - def attr_cache_clear(self): - node = extract_node("""def cache_clear(self): pass""") - return BoundMethod(proxy=node, bound=self._instance.parent.scope()) - - -def _transform_lru_cache(node, context=None): - # TODO: this is not ideal, since the node should be immutable, - # but due to https://github.com/PyCQA/astroid/issues/354, - # there's not much we can do now. - # Replacing the node would work partially, because, - # in pylint, the old node would still be available, leading - # to spurious false positives. - node.special_attributes = LruWrappedModel()(node) - return - - -def _functools_partial_inference(node, context=None): - call = arguments.CallSite.from_call(node, context=context) - number_of_positional = len(call.positional_arguments) - if number_of_positional < 1: - raise astroid.UseInferenceDefault( - "functools.partial takes at least one argument" - ) - if number_of_positional == 1 and not call.keyword_arguments: - raise astroid.UseInferenceDefault( - "functools.partial needs at least to have some filled arguments" - ) - - partial_function = call.positional_arguments[0] - try: - inferred_wrapped_function = next(partial_function.infer(context=context)) - except astroid.InferenceError as exc: - raise astroid.UseInferenceDefault from exc - if inferred_wrapped_function is astroid.Uninferable: - raise astroid.UseInferenceDefault("Cannot infer the wrapped function") - if not isinstance(inferred_wrapped_function, astroid.FunctionDef): - raise astroid.UseInferenceDefault("The wrapped function is not a function") - - # Determine if the passed keywords into the callsite are supported - # by the wrapped function. - function_parameters = chain( - inferred_wrapped_function.args.args or (), - inferred_wrapped_function.args.posonlyargs or (), - inferred_wrapped_function.args.kwonlyargs or (), - ) - parameter_names = set( - param.name - for param in function_parameters - if isinstance(param, astroid.AssignName) - ) - if set(call.keyword_arguments) - parameter_names: - raise astroid.UseInferenceDefault( - "wrapped function received unknown parameters" - ) - - partial_function = objects.PartialFunction( - call, - name=inferred_wrapped_function.name, - doc=inferred_wrapped_function.doc, - lineno=inferred_wrapped_function.lineno, - col_offset=inferred_wrapped_function.col_offset, - parent=inferred_wrapped_function.parent, - ) - partial_function.postinit( - args=inferred_wrapped_function.args, - body=inferred_wrapped_function.body, - decorators=inferred_wrapped_function.decorators, - returns=inferred_wrapped_function.returns, - type_comment_returns=inferred_wrapped_function.type_comment_returns, - type_comment_args=inferred_wrapped_function.type_comment_args, - ) - return iter((partial_function,)) - - -def _looks_like_lru_cache(node): - """Check if the given function node is decorated with lru_cache.""" - if not node.decorators: - return False - for decorator in node.decorators.nodes: - if not isinstance(decorator, astroid.Call): - continue - if _looks_like_functools_member(decorator, "lru_cache"): - return True - return False - - -def _looks_like_functools_member(node, member): - """Check if the given Call node is a functools.partial call""" - if isinstance(node.func, astroid.Name): - return node.func.name == member - elif isinstance(node.func, astroid.Attribute): - return ( - node.func.attrname == member - and isinstance(node.func.expr, astroid.Name) - and node.func.expr.name == "functools" - ) - - -_looks_like_partial = partial(_looks_like_functools_member, member="partial") - - -MANAGER.register_transform( - astroid.FunctionDef, _transform_lru_cache, _looks_like_lru_cache -) - - -MANAGER.register_transform( - astroid.Call, - astroid.inference_tip(_functools_partial_inference), - _looks_like_partial, -) diff --git a/Jobs_Collections/venv/Lib/python3.8/site-packages/astroid/brain/brain_gi.py b/Jobs_Collections/venv/Lib/python3.8/site-packages/astroid/brain/brain_gi.py deleted file mode 100644 index e49f3a2..0000000 --- a/Jobs_Collections/venv/Lib/python3.8/site-packages/astroid/brain/brain_gi.py +++ /dev/null @@ -1,253 +0,0 @@ -# -*- coding: utf-8 -*- -# Copyright (c) 2013-2014 LOGILAB S.A. (Paris, FRANCE) -# Copyright (c) 2014 Google, Inc. -# Copyright (c) 2014 Cole Robinson -# Copyright (c) 2015-2016, 2018 Claudiu Popa -# Copyright (c) 2015-2016 Ceridwen -# Copyright (c) 2015 David Shea -# Copyright (c) 2016 Jakub Wilk -# Copyright (c) 2016 Giuseppe Scrivano -# Copyright (c) 2018 Christoph Reiter -# Copyright (c) 2019 Philipp Hรถrist - -# Licensed under the LGPL: https://www.gnu.org/licenses/old-licenses/lgpl-2.1.en.html -# For details: https://github.com/PyCQA/astroid/blob/master/COPYING.LESSER - -"""Astroid hooks for the Python 2 GObject introspection bindings. - -Helps with understanding everything imported from 'gi.repository' -""" - -import inspect -import itertools -import sys -import re -import warnings - -from astroid import MANAGER, AstroidBuildingError, nodes -from astroid.builder import AstroidBuilder - - -_inspected_modules = {} - -_identifier_re = r"^[A-Za-z_]\w*$" - -_special_methods = frozenset( - { - "__lt__", - "__le__", - "__eq__", - "__ne__", - "__ge__", - "__gt__", - "__iter__", - "__getitem__", - "__setitem__", - "__delitem__", - "__len__", - "__bool__", - "__nonzero__", - "__next__", - "__str__", - "__len__", - "__contains__", - "__enter__", - "__exit__", - "__repr__", - "__getattr__", - "__setattr__", - "__delattr__", - "__del__", - "__hash__", - } -) - - -def _gi_build_stub(parent): - """ - Inspect the passed module recursively and build stubs for functions, - classes, etc. - """ - classes = {} - functions = {} - constants = {} - methods = {} - for name in dir(parent): - if name.startswith("__") and name not in _special_methods: - continue - - # Check if this is a valid name in python - if not re.match(_identifier_re, name): - continue - - try: - obj = getattr(parent, name) - except: - continue - - if inspect.isclass(obj): - classes[name] = obj - elif inspect.isfunction(obj) or inspect.isbuiltin(obj): - functions[name] = obj - elif inspect.ismethod(obj) or inspect.ismethoddescriptor(obj): - methods[name] = obj - elif ( - str(obj).startswith(", ) - # Only accept function calls with two constant arguments - if len(node.args) != 2: - return False - - if not all(isinstance(arg, nodes.Const) for arg in node.args): - return False - - func = node.func - if isinstance(func, nodes.Attribute): - if func.attrname != "require_version": - return False - if isinstance(func.expr, nodes.Name) and func.expr.name == "gi": - return True - - return False - - if isinstance(func, nodes.Name): - return func.name == "require_version" - - return False - - -def _register_require_version(node): - # Load the gi.require_version locally - try: - import gi - - gi.require_version(node.args[0].value, node.args[1].value) - except Exception: - pass - - return node - - -MANAGER.register_failed_import_hook(_import_gi_module) -MANAGER.register_transform( - nodes.Call, _register_require_version, _looks_like_require_version -) diff --git a/Jobs_Collections/venv/Lib/python3.8/site-packages/astroid/brain/brain_hashlib.py b/Jobs_Collections/venv/Lib/python3.8/site-packages/astroid/brain/brain_hashlib.py deleted file mode 100644 index eb34e15..0000000 --- a/Jobs_Collections/venv/Lib/python3.8/site-packages/astroid/brain/brain_hashlib.py +++ /dev/null @@ -1,69 +0,0 @@ -# Copyright (c) 2016, 2018 Claudiu Popa -# Copyright (c) 2018 David Poirier -# Copyright (c) 2018 wgehalo -# Copyright (c) 2018 Ioana Tagirta - -# Licensed under the LGPL: https://www.gnu.org/licenses/old-licenses/lgpl-2.1.en.html -# For details: https://github.com/PyCQA/astroid/blob/master/COPYING.LESSER -import sys - -import six - -import astroid - -PY36 = sys.version_info >= (3, 6) - - -def _hashlib_transform(): - signature = "value=''" - template = """ - class %(name)s(object): - def __init__(self, %(signature)s): pass - def digest(self): - return %(digest)s - def copy(self): - return self - def update(self, value): pass - def hexdigest(self): - return '' - @property - def name(self): - return %(name)r - @property - def block_size(self): - return 1 - @property - def digest_size(self): - return 1 - """ - algorithms_with_signature = dict.fromkeys( - ["md5", "sha1", "sha224", "sha256", "sha384", "sha512"], signature - ) - if PY36: - blake2b_signature = "data=b'', *, digest_size=64, key=b'', salt=b'', \ - person=b'', fanout=1, depth=1, leaf_size=0, node_offset=0, \ - node_depth=0, inner_size=0, last_node=False" - blake2s_signature = "data=b'', *, digest_size=32, key=b'', salt=b'', \ - person=b'', fanout=1, depth=1, leaf_size=0, node_offset=0, \ - node_depth=0, inner_size=0, last_node=False" - new_algorithms = dict.fromkeys( - ["sha3_224", "sha3_256", "sha3_384", "sha3_512", "shake_128", "shake_256"], - signature, - ) - algorithms_with_signature.update(new_algorithms) - algorithms_with_signature.update( - {"blake2b": blake2b_signature, "blake2s": blake2s_signature} - ) - classes = "".join( - template - % { - "name": hashfunc, - "digest": 'b""' if six.PY3 else '""', - "signature": signature, - } - for hashfunc, signature in algorithms_with_signature.items() - ) - return astroid.parse(classes) - - -astroid.register_module_extender(astroid.MANAGER, "hashlib", _hashlib_transform) diff --git a/Jobs_Collections/venv/Lib/python3.8/site-packages/astroid/brain/brain_http.py b/Jobs_Collections/venv/Lib/python3.8/site-packages/astroid/brain/brain_http.py deleted file mode 100644 index b16464e..0000000 --- a/Jobs_Collections/venv/Lib/python3.8/site-packages/astroid/brain/brain_http.py +++ /dev/null @@ -1,211 +0,0 @@ -# Copyright (c) 2018-2019 Claudiu Popa - -# Licensed under the LGPL: https://www.gnu.org/licenses/old-licenses/lgpl-2.1.en.html -# For details: https://github.com/PyCQA/astroid/blob/master/COPYING.LESSER - -"""Astroid brain hints for some of the `http` module.""" -import textwrap - -import astroid -from astroid.builder import AstroidBuilder - - -def _http_transform(): - code = textwrap.dedent( - """ - from collections import namedtuple - _HTTPStatus = namedtuple('_HTTPStatus', 'value phrase description') - - class HTTPStatus: - - @property - def phrase(self): - return "" - @property - def value(self): - return 0 - @property - def description(self): - return "" - - # informational - CONTINUE = _HTTPStatus(100, 'Continue', 'Request received, please continue') - SWITCHING_PROTOCOLS = _HTTPStatus(101, 'Switching Protocols', - 'Switching to new protocol; obey Upgrade header') - PROCESSING = _HTTPStatus(102, 'Processing', '') - OK = _HTTPStatus(200, 'OK', 'Request fulfilled, document follows') - CREATED = _HTTPStatus(201, 'Created', 'Document created, URL follows') - ACCEPTED = _HTTPStatus(202, 'Accepted', - 'Request accepted, processing continues off-line') - NON_AUTHORITATIVE_INFORMATION = _HTTPStatus(203, - 'Non-Authoritative Information', 'Request fulfilled from cache') - NO_CONTENT = _HTTPStatus(204, 'No Content', 'Request fulfilled, nothing follows') - RESET_CONTENT =_HTTPStatus(205, 'Reset Content', 'Clear input form for further input') - PARTIAL_CONTENT = _HTTPStatus(206, 'Partial Content', 'Partial content follows') - MULTI_STATUS = _HTTPStatus(207, 'Multi-Status', '') - ALREADY_REPORTED = _HTTPStatus(208, 'Already Reported', '') - IM_USED = _HTTPStatus(226, 'IM Used', '') - MULTIPLE_CHOICES = _HTTPStatus(300, 'Multiple Choices', - 'Object has several resources -- see URI list') - MOVED_PERMANENTLY = _HTTPStatus(301, 'Moved Permanently', - 'Object moved permanently -- see URI list') - FOUND = _HTTPStatus(302, 'Found', 'Object moved temporarily -- see URI list') - SEE_OTHER = _HTTPStatus(303, 'See Other', 'Object moved -- see Method and URL list') - NOT_MODIFIED = _HTTPStatus(304, 'Not Modified', - 'Document has not changed since given time') - USE_PROXY = _HTTPStatus(305, 'Use Proxy', - 'You must use proxy specified in Location to access this resource') - TEMPORARY_REDIRECT = _HTTPStatus(307, 'Temporary Redirect', - 'Object moved temporarily -- see URI list') - PERMANENT_REDIRECT = _HTTPStatus(308, 'Permanent Redirect', - 'Object moved permanently -- see URI list') - BAD_REQUEST = _HTTPStatus(400, 'Bad Request', - 'Bad request syntax or unsupported method') - UNAUTHORIZED = _HTTPStatus(401, 'Unauthorized', - 'No permission -- see authorization schemes') - PAYMENT_REQUIRED = _HTTPStatus(402, 'Payment Required', - 'No payment -- see charging schemes') - FORBIDDEN = _HTTPStatus(403, 'Forbidden', - 'Request forbidden -- authorization will not help') - NOT_FOUND = _HTTPStatus(404, 'Not Found', - 'Nothing matches the given URI') - METHOD_NOT_ALLOWED = _HTTPStatus(405, 'Method Not Allowed', - 'Specified method is invalid for this resource') - NOT_ACCEPTABLE = _HTTPStatus(406, 'Not Acceptable', - 'URI not available in preferred format') - PROXY_AUTHENTICATION_REQUIRED = _HTTPStatus(407, - 'Proxy Authentication Required', - 'You must authenticate with this proxy before proceeding') - REQUEST_TIMEOUT = _HTTPStatus(408, 'Request Timeout', - 'Request timed out; try again later') - CONFLICT = _HTTPStatus(409, 'Conflict', 'Request conflict') - GONE = _HTTPStatus(410, 'Gone', - 'URI no longer exists and has been permanently removed') - LENGTH_REQUIRED = _HTTPStatus(411, 'Length Required', - 'Client must specify Content-Length') - PRECONDITION_FAILED = _HTTPStatus(412, 'Precondition Failed', - 'Precondition in headers is false') - REQUEST_ENTITY_TOO_LARGE = _HTTPStatus(413, 'Request Entity Too Large', - 'Entity is too large') - REQUEST_URI_TOO_LONG = _HTTPStatus(414, 'Request-URI Too Long', - 'URI is too long') - UNSUPPORTED_MEDIA_TYPE = _HTTPStatus(415, 'Unsupported Media Type', - 'Entity body in unsupported format') - REQUESTED_RANGE_NOT_SATISFIABLE = _HTTPStatus(416, - 'Requested Range Not Satisfiable', - 'Cannot satisfy request range') - EXPECTATION_FAILED = _HTTPStatus(417, 'Expectation Failed', - 'Expect condition could not be satisfied') - MISDIRECTED_REQUEST = _HTTPStatus(421, 'Misdirected Request', - 'Server is not able to produce a response') - UNPROCESSABLE_ENTITY = _HTTPStatus(422, 'Unprocessable Entity') - LOCKED = _HTTPStatus(423, 'Locked') - FAILED_DEPENDENCY = _HTTPStatus(424, 'Failed Dependency') - UPGRADE_REQUIRED = _HTTPStatus(426, 'Upgrade Required') - PRECONDITION_REQUIRED = _HTTPStatus(428, 'Precondition Required', - 'The origin server requires the request to be conditional') - TOO_MANY_REQUESTS = _HTTPStatus(429, 'Too Many Requests', - 'The user has sent too many requests in ' - 'a given amount of time ("rate limiting")') - REQUEST_HEADER_FIELDS_TOO_LARGE = _HTTPStatus(431, - 'Request Header Fields Too Large', - 'The server is unwilling to process the request because its header ' - 'fields are too large') - UNAVAILABLE_FOR_LEGAL_REASONS = _HTTPStatus(451, - 'Unavailable For Legal Reasons', - 'The server is denying access to the ' - 'resource as a consequence of a legal demand') - INTERNAL_SERVER_ERROR = _HTTPStatus(500, 'Internal Server Error', - 'Server got itself in trouble') - NOT_IMPLEMENTED = _HTTPStatus(501, 'Not Implemented', - 'Server does not support this operation') - BAD_GATEWAY = _HTTPStatus(502, 'Bad Gateway', - 'Invalid responses from another server/proxy') - SERVICE_UNAVAILABLE = _HTTPStatus(503, 'Service Unavailable', - 'The server cannot process the request due to a high load') - GATEWAY_TIMEOUT = _HTTPStatus(504, 'Gateway Timeout', - 'The gateway server did not receive a timely response') - HTTP_VERSION_NOT_SUPPORTED = _HTTPStatus(505, 'HTTP Version Not Supported', - 'Cannot fulfill request') - VARIANT_ALSO_NEGOTIATES = _HTTPStatus(506, 'Variant Also Negotiates') - INSUFFICIENT_STORAGE = _HTTPStatus(507, 'Insufficient Storage') - LOOP_DETECTED = _HTTPStatus(508, 'Loop Detected') - NOT_EXTENDED = _HTTPStatus(510, 'Not Extended') - NETWORK_AUTHENTICATION_REQUIRED = _HTTPStatus(511, - 'Network Authentication Required', - 'The client needs to authenticate to gain network access') - """ - ) - return AstroidBuilder(astroid.MANAGER).string_build(code) - - -def _http_client_transform(): - return AstroidBuilder(astroid.MANAGER).string_build( - textwrap.dedent( - """ - from http import HTTPStatus - - CONTINUE = HTTPStatus.CONTINUE - SWITCHING_PROTOCOLS = HTTPStatus.SWITCHING_PROTOCOLS - PROCESSING = HTTPStatus.PROCESSING - OK = HTTPStatus.OK - CREATED = HTTPStatus.CREATED - ACCEPTED = HTTPStatus.ACCEPTED - NON_AUTHORITATIVE_INFORMATION = HTTPStatus.NON_AUTHORITATIVE_INFORMATION - NO_CONTENT = HTTPStatus.NO_CONTENT - RESET_CONTENT = HTTPStatus.RESET_CONTENT - PARTIAL_CONTENT = HTTPStatus.PARTIAL_CONTENT - MULTI_STATUS = HTTPStatus.MULTI_STATUS - ALREADY_REPORTED = HTTPStatus.ALREADY_REPORTED - IM_USED = HTTPStatus.IM_USED - MULTIPLE_CHOICES = HTTPStatus.MULTIPLE_CHOICES - MOVED_PERMANENTLY = HTTPStatus.MOVED_PERMANENTLY - FOUND = HTTPStatus.FOUND - SEE_OTHER = HTTPStatus.SEE_OTHER - NOT_MODIFIED = HTTPStatus.NOT_MODIFIED - USE_PROXY = HTTPStatus.USE_PROXY - TEMPORARY_REDIRECT = HTTPStatus.TEMPORARY_REDIRECT - PERMANENT_REDIRECT = HTTPStatus.PERMANENT_REDIRECT - BAD_REQUEST = HTTPStatus.BAD_REQUEST - UNAUTHORIZED = HTTPStatus.UNAUTHORIZED - PAYMENT_REQUIRED = HTTPStatus.PAYMENT_REQUIRED - FORBIDDEN = HTTPStatus.FORBIDDEN - NOT_FOUND = HTTPStatus.NOT_FOUND - METHOD_NOT_ALLOWED = HTTPStatus.METHOD_NOT_ALLOWED - NOT_ACCEPTABLE = HTTPStatus.NOT_ACCEPTABLE - PROXY_AUTHENTICATION_REQUIRED = HTTPStatus.PROXY_AUTHENTICATION_REQUIRED - REQUEST_TIMEOUT = HTTPStatus.REQUEST_TIMEOUT - CONFLICT = HTTPStatus.CONFLICT - GONE = HTTPStatus.GONE - LENGTH_REQUIRED = HTTPStatus.LENGTH_REQUIRED - PRECONDITION_FAILED = HTTPStatus.PRECONDITION_FAILED - REQUEST_ENTITY_TOO_LARGE = HTTPStatus.REQUEST_ENTITY_TOO_LARGE - REQUEST_URI_TOO_LONG = HTTPStatus.REQUEST_URI_TOO_LONG - UNSUPPORTED_MEDIA_TYPE = HTTPStatus.UNSUPPORTED_MEDIA_TYPE - REQUESTED_RANGE_NOT_SATISFIABLE = HTTPStatus.REQUESTED_RANGE_NOT_SATISFIABLE - EXPECTATION_FAILED = HTTPStatus.EXPECTATION_FAILED - UNPROCESSABLE_ENTITY = HTTPStatus.UNPROCESSABLE_ENTITY - LOCKED = HTTPStatus.LOCKED - FAILED_DEPENDENCY = HTTPStatus.FAILED_DEPENDENCY - UPGRADE_REQUIRED = HTTPStatus.UPGRADE_REQUIRED - PRECONDITION_REQUIRED = HTTPStatus.PRECONDITION_REQUIRED - TOO_MANY_REQUESTS = HTTPStatus.TOO_MANY_REQUESTS - REQUEST_HEADER_FIELDS_TOO_LARGE = HTTPStatus.REQUEST_HEADER_FIELDS_TOO_LARGE - INTERNAL_SERVER_ERROR = HTTPStatus.INTERNAL_SERVER_ERROR - NOT_IMPLEMENTED = HTTPStatus.NOT_IMPLEMENTED - BAD_GATEWAY = HTTPStatus.BAD_GATEWAY - SERVICE_UNAVAILABLE = HTTPStatus.SERVICE_UNAVAILABLE - GATEWAY_TIMEOUT = HTTPStatus.GATEWAY_TIMEOUT - HTTP_VERSION_NOT_SUPPORTED = HTTPStatus.HTTP_VERSION_NOT_SUPPORTED - VARIANT_ALSO_NEGOTIATES = HTTPStatus.VARIANT_ALSO_NEGOTIATES - INSUFFICIENT_STORAGE = HTTPStatus.INSUFFICIENT_STORAGE - LOOP_DETECTED = HTTPStatus.LOOP_DETECTED - NOT_EXTENDED = HTTPStatus.NOT_EXTENDED - NETWORK_AUTHENTICATION_REQUIRED = HTTPStatus.NETWORK_AUTHENTICATION_REQUIRED - """ - ) - ) - - -astroid.register_module_extender(astroid.MANAGER, "http", _http_transform) -astroid.register_module_extender(astroid.MANAGER, "http.client", _http_client_transform) diff --git a/Jobs_Collections/venv/Lib/python3.8/site-packages/astroid/brain/brain_io.py b/Jobs_Collections/venv/Lib/python3.8/site-packages/astroid/brain/brain_io.py deleted file mode 100644 index c745311..0000000 --- a/Jobs_Collections/venv/Lib/python3.8/site-packages/astroid/brain/brain_io.py +++ /dev/null @@ -1,45 +0,0 @@ -# Copyright (c) 2016, 2018 Claudiu Popa - -# Licensed under the LGPL: https://www.gnu.org/licenses/old-licenses/lgpl-2.1.en.html -# For details: https://github.com/PyCQA/astroid/blob/master/COPYING.LESSER - -"""Astroid brain hints for some of the _io C objects.""" - -import astroid - - -BUFFERED = {"BufferedWriter", "BufferedReader"} -TextIOWrapper = "TextIOWrapper" -FileIO = "FileIO" -BufferedWriter = "BufferedWriter" - - -def _generic_io_transform(node, name, cls): - """Transform the given name, by adding the given *class* as a member of the node.""" - - io_module = astroid.MANAGER.ast_from_module_name("_io") - attribute_object = io_module[cls] - instance = attribute_object.instantiate_class() - node.locals[name] = [instance] - - -def _transform_text_io_wrapper(node): - # This is not always correct, since it can vary with the type of the descriptor, - # being stdout, stderr or stdin. But we cannot get access to the name of the - # stream, which is why we are using the BufferedWriter class as a default - # value - return _generic_io_transform(node, name="buffer", cls=BufferedWriter) - - -def _transform_buffered(node): - return _generic_io_transform(node, name="raw", cls=FileIO) - - -astroid.MANAGER.register_transform( - astroid.ClassDef, _transform_buffered, lambda node: node.name in BUFFERED -) -astroid.MANAGER.register_transform( - astroid.ClassDef, - _transform_text_io_wrapper, - lambda node: node.name == TextIOWrapper, -) diff --git a/Jobs_Collections/venv/Lib/python3.8/site-packages/astroid/brain/brain_mechanize.py b/Jobs_Collections/venv/Lib/python3.8/site-packages/astroid/brain/brain_mechanize.py deleted file mode 100644 index ef62c53..0000000 --- a/Jobs_Collections/venv/Lib/python3.8/site-packages/astroid/brain/brain_mechanize.py +++ /dev/null @@ -1,29 +0,0 @@ -# Copyright (c) 2012-2013 LOGILAB S.A. (Paris, FRANCE) -# Copyright (c) 2014 Google, Inc. -# Copyright (c) 2015-2016, 2018 Claudiu Popa -# Copyright (c) 2016 Ceridwen - -# Licensed under the LGPL: https://www.gnu.org/licenses/old-licenses/lgpl-2.1.en.html -# For details: https://github.com/PyCQA/astroid/blob/master/COPYING.LESSER - -from astroid import MANAGER, register_module_extender -from astroid.builder import AstroidBuilder - - -def mechanize_transform(): - return AstroidBuilder(MANAGER).string_build( - """ - -class Browser(object): - def open(self, url, data=None, timeout=None): - return None - def open_novisit(self, url, data=None, timeout=None): - return None - def open_local_file(self, filename): - return None - -""" - ) - - -register_module_extender(MANAGER, "mechanize", mechanize_transform) diff --git a/Jobs_Collections/venv/Lib/python3.8/site-packages/astroid/brain/brain_multiprocessing.py b/Jobs_Collections/venv/Lib/python3.8/site-packages/astroid/brain/brain_multiprocessing.py deleted file mode 100644 index 3629b03..0000000 --- a/Jobs_Collections/venv/Lib/python3.8/site-packages/astroid/brain/brain_multiprocessing.py +++ /dev/null @@ -1,107 +0,0 @@ -# Copyright (c) 2016, 2018 Claudiu Popa -# Copyright (c) 2019 Hugo van Kemenade - -# Licensed under the LGPL: https://www.gnu.org/licenses/old-licenses/lgpl-2.1.en.html -# For details: https://github.com/PyCQA/astroid/blob/master/COPYING.LESSER - -import sys - -import astroid -from astroid import exceptions - - -def _multiprocessing_transform(): - module = astroid.parse( - """ - from multiprocessing.managers import SyncManager - def Manager(): - return SyncManager() - """ - ) - # Multiprocessing uses a getattr lookup inside contexts, - # in order to get the attributes they need. Since it's extremely - # dynamic, we use this approach to fake it. - node = astroid.parse( - """ - from multiprocessing.context import DefaultContext, BaseContext - default = DefaultContext() - base = BaseContext() - """ - ) - try: - context = next(node["default"].infer()) - base = next(node["base"].infer()) - except exceptions.InferenceError: - return module - - for node in (context, base): - for key, value in node.locals.items(): - if key.startswith("_"): - continue - - value = value[0] - if isinstance(value, astroid.FunctionDef): - # We need to rebound this, since otherwise - # it will have an extra argument (self). - value = astroid.BoundMethod(value, node) - module[key] = value - return module - - -def _multiprocessing_managers_transform(): - return astroid.parse( - """ - import array - import threading - import multiprocessing.pool as pool - - import six - - class Namespace(object): - pass - - class Value(object): - def __init__(self, typecode, value, lock=True): - self._typecode = typecode - self._value = value - def get(self): - return self._value - def set(self, value): - self._value = value - def __repr__(self): - return '%s(%r, %r)'%(type(self).__name__, self._typecode, self._value) - value = property(get, set) - - def Array(typecode, sequence, lock=True): - return array.array(typecode, sequence) - - class SyncManager(object): - Queue = JoinableQueue = six.moves.queue.Queue - Event = threading.Event - RLock = threading.RLock - BoundedSemaphore = threading.BoundedSemaphore - Condition = threading.Condition - Barrier = threading.Barrier - Pool = pool.Pool - list = list - dict = dict - Value = Value - Array = Array - Namespace = Namespace - __enter__ = lambda self: self - __exit__ = lambda *args: args - - def start(self, initializer=None, initargs=None): - pass - def shutdown(self): - pass - """ - ) - - -astroid.register_module_extender( - astroid.MANAGER, "multiprocessing.managers", _multiprocessing_managers_transform -) -astroid.register_module_extender( - astroid.MANAGER, "multiprocessing", _multiprocessing_transform -) diff --git a/Jobs_Collections/venv/Lib/python3.8/site-packages/astroid/brain/brain_namedtuple_enum.py b/Jobs_Collections/venv/Lib/python3.8/site-packages/astroid/brain/brain_namedtuple_enum.py deleted file mode 100644 index 13fcf79..0000000 --- a/Jobs_Collections/venv/Lib/python3.8/site-packages/astroid/brain/brain_namedtuple_enum.py +++ /dev/null @@ -1,455 +0,0 @@ -# -*- coding: utf-8 -*- -# Copyright (c) 2012-2015 LOGILAB S.A. (Paris, FRANCE) -# Copyright (c) 2013-2014 Google, Inc. -# Copyright (c) 2014-2020 Claudiu Popa -# Copyright (c) 2014 Eevee (Alex Munroe) -# Copyright (c) 2015-2016 Ceridwen -# Copyright (c) 2015 Dmitry Pribysh -# Copyright (c) 2015 David Shea -# Copyright (c) 2015 Philip Lorenz -# Copyright (c) 2016 Jakub Wilk -# Copyright (c) 2016 Mateusz Bysiek -# Copyright (c) 2017 Hugo -# Copyright (c) 2017 ลukasz Rogalski -# Copyright (c) 2018 Ville Skyttรค -# Copyright (c) 2019 Ashley Whetter - -# Licensed under the LGPL: https://www.gnu.org/licenses/old-licenses/lgpl-2.1.en.html -# For details: https://github.com/PyCQA/astroid/blob/master/COPYING.LESSER - -"""Astroid hooks for the Python standard library.""" - -import functools -import keyword -from textwrap import dedent - -from astroid import MANAGER, UseInferenceDefault, inference_tip, InferenceError -from astroid import arguments -from astroid import exceptions -from astroid import nodes -from astroid.builder import AstroidBuilder, extract_node -from astroid import util - - -TYPING_NAMEDTUPLE_BASENAMES = {"NamedTuple", "typing.NamedTuple"} -ENUM_BASE_NAMES = { - "Enum", - "IntEnum", - "enum.Enum", - "enum.IntEnum", - "IntFlag", - "enum.IntFlag", -} - - -def _infer_first(node, context): - if node is util.Uninferable: - raise UseInferenceDefault - try: - value = next(node.infer(context=context)) - if value is util.Uninferable: - raise UseInferenceDefault() - else: - return value - except StopIteration: - raise InferenceError() - - -def _find_func_form_arguments(node, context): - def _extract_namedtuple_arg_or_keyword(position, key_name=None): - - if len(args) > position: - return _infer_first(args[position], context) - if key_name and key_name in found_keywords: - return _infer_first(found_keywords[key_name], context) - - args = node.args - keywords = node.keywords - found_keywords = ( - {keyword.arg: keyword.value for keyword in keywords} if keywords else {} - ) - - name = _extract_namedtuple_arg_or_keyword(position=0, key_name="typename") - names = _extract_namedtuple_arg_or_keyword(position=1, key_name="field_names") - if name and names: - return name.value, names - - raise UseInferenceDefault() - - -def infer_func_form(node, base_type, context=None, enum=False): - """Specific inference function for namedtuple or Python 3 enum. """ - # node is a Call node, class name as first argument and generated class - # attributes as second argument - - # namedtuple or enums list of attributes can be a list of strings or a - # whitespace-separate string - try: - name, names = _find_func_form_arguments(node, context) - try: - attributes = names.value.replace(",", " ").split() - except AttributeError: - if not enum: - attributes = [ - _infer_first(const, context).value for const in names.elts - ] - else: - # Enums supports either iterator of (name, value) pairs - # or mappings. - if hasattr(names, "items") and isinstance(names.items, list): - attributes = [ - _infer_first(const[0], context).value - for const in names.items - if isinstance(const[0], nodes.Const) - ] - elif hasattr(names, "elts"): - # Enums can support either ["a", "b", "c"] - # or [("a", 1), ("b", 2), ...], but they can't - # be mixed. - if all(isinstance(const, nodes.Tuple) for const in names.elts): - attributes = [ - _infer_first(const.elts[0], context).value - for const in names.elts - if isinstance(const, nodes.Tuple) - ] - else: - attributes = [ - _infer_first(const, context).value for const in names.elts - ] - else: - raise AttributeError - if not attributes: - raise AttributeError - except (AttributeError, exceptions.InferenceError): - raise UseInferenceDefault() - - attributes = [attr for attr in attributes if " " not in attr] - - # If we can't infer the name of the class, don't crash, up to this point - # we know it is a namedtuple anyway. - name = name or "Uninferable" - # we want to return a Class node instance with proper attributes set - class_node = nodes.ClassDef(name, "docstring") - class_node.parent = node.parent - # set base class=tuple - class_node.bases.append(base_type) - # XXX add __init__(*attributes) method - for attr in attributes: - fake_node = nodes.EmptyNode() - fake_node.parent = class_node - fake_node.attrname = attr - class_node.instance_attrs[attr] = [fake_node] - return class_node, name, attributes - - -def _has_namedtuple_base(node): - """Predicate for class inference tip - - :type node: ClassDef - :rtype: bool - """ - return set(node.basenames) & TYPING_NAMEDTUPLE_BASENAMES - - -def _looks_like(node, name): - func = node.func - if isinstance(func, nodes.Attribute): - return func.attrname == name - if isinstance(func, nodes.Name): - return func.name == name - return False - - -_looks_like_namedtuple = functools.partial(_looks_like, name="namedtuple") -_looks_like_enum = functools.partial(_looks_like, name="Enum") -_looks_like_typing_namedtuple = functools.partial(_looks_like, name="NamedTuple") - - -def infer_named_tuple(node, context=None): - """Specific inference function for namedtuple Call node""" - tuple_base_name = nodes.Name(name="tuple", parent=node.root()) - class_node, name, attributes = infer_func_form( - node, tuple_base_name, context=context - ) - call_site = arguments.CallSite.from_call(node, context=context) - func = next(extract_node("import collections; collections.namedtuple").infer()) - try: - rename = next(call_site.infer_argument(func, "rename", context)).bool_value() - except InferenceError: - rename = False - - if rename: - attributes = _get_renamed_namedtuple_attributes(attributes) - - replace_args = ", ".join("{arg}=None".format(arg=arg) for arg in attributes) - field_def = ( - " {name} = property(lambda self: self[{index:d}], " - "doc='Alias for field number {index:d}')" - ) - field_defs = "\n".join( - field_def.format(name=name, index=index) - for index, name in enumerate(attributes) - ) - fake = AstroidBuilder(MANAGER).string_build( - """ -class %(name)s(tuple): - __slots__ = () - _fields = %(fields)r - def _asdict(self): - return self.__dict__ - @classmethod - def _make(cls, iterable, new=tuple.__new__, len=len): - return new(cls, iterable) - def _replace(self, %(replace_args)s): - return self - def __getnewargs__(self): - return tuple(self) -%(field_defs)s - """ - % { - "name": name, - "fields": attributes, - "field_defs": field_defs, - "replace_args": replace_args, - } - ) - class_node.locals["_asdict"] = fake.body[0].locals["_asdict"] - class_node.locals["_make"] = fake.body[0].locals["_make"] - class_node.locals["_replace"] = fake.body[0].locals["_replace"] - class_node.locals["_fields"] = fake.body[0].locals["_fields"] - for attr in attributes: - class_node.locals[attr] = fake.body[0].locals[attr] - # we use UseInferenceDefault, we can't be a generator so return an iterator - return iter([class_node]) - - -def _get_renamed_namedtuple_attributes(field_names): - names = list(field_names) - seen = set() - for i, name in enumerate(field_names): - if ( - not all(c.isalnum() or c == "_" for c in name) - or keyword.iskeyword(name) - or not name - or name[0].isdigit() - or name.startswith("_") - or name in seen - ): - names[i] = "_%d" % i - seen.add(name) - return tuple(names) - - -def infer_enum(node, context=None): - """ Specific inference function for enum Call node. """ - enum_meta = extract_node( - """ - class EnumMeta(object): - 'docstring' - def __call__(self, node): - class EnumAttribute(object): - name = '' - value = 0 - return EnumAttribute() - def __iter__(self): - class EnumAttribute(object): - name = '' - value = 0 - return [EnumAttribute()] - def __reversed__(self): - class EnumAttribute(object): - name = '' - value = 0 - return (EnumAttribute, ) - def __next__(self): - return next(iter(self)) - def __getitem__(self, attr): - class Value(object): - @property - def name(self): - return '' - @property - def value(self): - return attr - - return Value() - __members__ = [''] - """ - ) - class_node = infer_func_form(node, enum_meta, context=context, enum=True)[0] - return iter([class_node.instantiate_class()]) - - -INT_FLAG_ADDITION_METHODS = """ - def __or__(self, other): - return {name}(self.value | other.value) - def __and__(self, other): - return {name}(self.value & other.value) - def __xor__(self, other): - return {name}(self.value ^ other.value) - def __add__(self, other): - return {name}(self.value + other.value) - def __div__(self, other): - return {name}(self.value / other.value) - def __invert__(self): - return {name}(~self.value) - def __mul__(self, other): - return {name}(self.value * other.value) -""" - - -def infer_enum_class(node): - """ Specific inference for enums. """ - for basename in node.basenames: - # TODO: doesn't handle subclasses yet. This implementation - # is a hack to support enums. - if basename not in ENUM_BASE_NAMES: - continue - if node.root().name == "enum": - # Skip if the class is directly from enum module. - break - for local, values in node.locals.items(): - if any(not isinstance(value, nodes.AssignName) for value in values): - continue - - targets = [] - stmt = values[0].statement() - if isinstance(stmt, nodes.Assign): - if isinstance(stmt.targets[0], nodes.Tuple): - targets = stmt.targets[0].itered() - else: - targets = stmt.targets - elif isinstance(stmt, nodes.AnnAssign): - targets = [stmt.target] - else: - continue - - inferred_return_value = None - if isinstance(stmt, nodes.Assign): - if isinstance(stmt.value, nodes.Const): - if isinstance(stmt.value.value, str): - inferred_return_value = repr(stmt.value.value) - else: - inferred_return_value = stmt.value.value - else: - inferred_return_value = stmt.value.as_string() - - new_targets = [] - for target in targets: - # Replace all the assignments with our mocked class. - classdef = dedent( - """ - class {name}({types}): - @property - def value(self): - return {return_value} - @property - def name(self): - return "{name}" - """.format( - name=target.name, - types=", ".join(node.basenames), - return_value=inferred_return_value, - ) - ) - if "IntFlag" in basename: - # Alright, we need to add some additional methods. - # Unfortunately we still can't infer the resulting objects as - # Enum members, but once we'll be able to do that, the following - # should result in some nice symbolic execution - classdef += INT_FLAG_ADDITION_METHODS.format(name=target.name) - - fake = AstroidBuilder(MANAGER).string_build(classdef)[target.name] - fake.parent = target.parent - for method in node.mymethods(): - fake.locals[method.name] = [method] - new_targets.append(fake.instantiate_class()) - node.locals[local] = new_targets - break - return node - - -def infer_typing_namedtuple_class(class_node, context=None): - """Infer a subclass of typing.NamedTuple""" - # Check if it has the corresponding bases - annassigns_fields = [ - annassign.target.name - for annassign in class_node.body - if isinstance(annassign, nodes.AnnAssign) - ] - code = dedent( - """ - from collections import namedtuple - namedtuple({typename!r}, {fields!r}) - """ - ).format(typename=class_node.name, fields=",".join(annassigns_fields)) - node = extract_node(code) - generated_class_node = next(infer_named_tuple(node, context)) - for method in class_node.mymethods(): - generated_class_node.locals[method.name] = [method] - - for assign in class_node.body: - if not isinstance(assign, nodes.Assign): - continue - - for target in assign.targets: - attr = target.name - generated_class_node.locals[attr] = class_node.locals[attr] - - return iter((generated_class_node,)) - - -def infer_typing_namedtuple(node, context=None): - """Infer a typing.NamedTuple(...) call.""" - # This is essentially a namedtuple with different arguments - # so we extract the args and infer a named tuple. - try: - func = next(node.func.infer()) - except InferenceError: - raise UseInferenceDefault - - if func.qname() != "typing.NamedTuple": - raise UseInferenceDefault - - if len(node.args) != 2: - raise UseInferenceDefault - - if not isinstance(node.args[1], (nodes.List, nodes.Tuple)): - raise UseInferenceDefault - - names = [] - for elt in node.args[1].elts: - if not isinstance(elt, (nodes.List, nodes.Tuple)): - raise UseInferenceDefault - if len(elt.elts) != 2: - raise UseInferenceDefault - names.append(elt.elts[0].as_string()) - - typename = node.args[0].as_string() - if names: - field_names = "({},)".format(",".join(names)) - else: - field_names = "''" - node = extract_node( - "namedtuple({typename}, {fields})".format(typename=typename, fields=field_names) - ) - return infer_named_tuple(node, context) - - -MANAGER.register_transform( - nodes.Call, inference_tip(infer_named_tuple), _looks_like_namedtuple -) -MANAGER.register_transform(nodes.Call, inference_tip(infer_enum), _looks_like_enum) -MANAGER.register_transform( - nodes.ClassDef, - infer_enum_class, - predicate=lambda cls: any( - basename for basename in cls.basenames if basename in ENUM_BASE_NAMES - ), -) -MANAGER.register_transform( - nodes.ClassDef, inference_tip(infer_typing_namedtuple_class), _has_namedtuple_base -) -MANAGER.register_transform( - nodes.Call, inference_tip(infer_typing_namedtuple), _looks_like_typing_namedtuple -) diff --git a/Jobs_Collections/venv/Lib/python3.8/site-packages/astroid/brain/brain_nose.py b/Jobs_Collections/venv/Lib/python3.8/site-packages/astroid/brain/brain_nose.py deleted file mode 100644 index d0280a3..0000000 --- a/Jobs_Collections/venv/Lib/python3.8/site-packages/astroid/brain/brain_nose.py +++ /dev/null @@ -1,77 +0,0 @@ -# Copyright (c) 2015-2016, 2018 Claudiu Popa -# Copyright (c) 2016 Ceridwen - -# Licensed under the LGPL: https://www.gnu.org/licenses/old-licenses/lgpl-2.1.en.html -# For details: https://github.com/PyCQA/astroid/blob/master/COPYING.LESSER - - -"""Hooks for nose library.""" - -import re -import textwrap - -import astroid -import astroid.builder - -_BUILDER = astroid.builder.AstroidBuilder(astroid.MANAGER) - - -def _pep8(name, caps=re.compile("([A-Z])")): - return caps.sub(lambda m: "_" + m.groups()[0].lower(), name) - - -def _nose_tools_functions(): - """Get an iterator of names and bound methods.""" - module = _BUILDER.string_build( - textwrap.dedent( - """ - import unittest - - class Test(unittest.TestCase): - pass - a = Test() - """ - ) - ) - try: - case = next(module["a"].infer()) - except astroid.InferenceError: - return - for method in case.methods(): - if method.name.startswith("assert") and "_" not in method.name: - pep8_name = _pep8(method.name) - yield pep8_name, astroid.BoundMethod(method, case) - if method.name == "assertEqual": - # nose also exports assert_equals. - yield "assert_equals", astroid.BoundMethod(method, case) - - -def _nose_tools_transform(node): - for method_name, method in _nose_tools_functions(): - node.locals[method_name] = [method] - - -def _nose_tools_trivial_transform(): - """Custom transform for the nose.tools module.""" - stub = _BUILDER.string_build("""__all__ = []""") - all_entries = ["ok_", "eq_"] - - for pep8_name, method in _nose_tools_functions(): - all_entries.append(pep8_name) - stub[pep8_name] = method - - # Update the __all__ variable, since nose.tools - # does this manually with .append. - all_assign = stub["__all__"].parent - all_object = astroid.List(all_entries) - all_object.parent = all_assign - all_assign.value = all_object - return stub - - -astroid.register_module_extender( - astroid.MANAGER, "nose.tools.trivial", _nose_tools_trivial_transform -) -astroid.MANAGER.register_transform( - astroid.Module, _nose_tools_transform, lambda n: n.name == "nose.tools" -) diff --git a/Jobs_Collections/venv/Lib/python3.8/site-packages/astroid/brain/brain_numpy_core_fromnumeric.py b/Jobs_Collections/venv/Lib/python3.8/site-packages/astroid/brain/brain_numpy_core_fromnumeric.py deleted file mode 100644 index 62dfe99..0000000 --- a/Jobs_Collections/venv/Lib/python3.8/site-packages/astroid/brain/brain_numpy_core_fromnumeric.py +++ /dev/null @@ -1,23 +0,0 @@ -# Copyright (c) 2019 hippo91 - -# Licensed under the LGPL: https://www.gnu.org/licenses/old-licenses/lgpl-2.1.en.html -# For details: https://github.com/PyCQA/astroid/blob/master/COPYING.LESSER - - -"""Astroid hooks for numpy.core.fromnumeric module.""" - -import astroid - - -def numpy_core_fromnumeric_transform(): - return astroid.parse( - """ - def sum(a, axis=None, dtype=None, out=None, keepdims=None, initial=None): - return numpy.ndarray([0, 0]) - """ - ) - - -astroid.register_module_extender( - astroid.MANAGER, "numpy.core.fromnumeric", numpy_core_fromnumeric_transform -) diff --git a/Jobs_Collections/venv/Lib/python3.8/site-packages/astroid/brain/brain_numpy_core_function_base.py b/Jobs_Collections/venv/Lib/python3.8/site-packages/astroid/brain/brain_numpy_core_function_base.py deleted file mode 100644 index 58aa0a9..0000000 --- a/Jobs_Collections/venv/Lib/python3.8/site-packages/astroid/brain/brain_numpy_core_function_base.py +++ /dev/null @@ -1,29 +0,0 @@ -# Copyright (c) 2019 hippo91 - -# Licensed under the LGPL: https://www.gnu.org/licenses/old-licenses/lgpl-2.1.en.html -# For details: https://github.com/PyCQA/astroid/blob/master/COPYING.LESSER - - -"""Astroid hooks for numpy.core.function_base module.""" - -import functools -import astroid -from brain_numpy_utils import looks_like_numpy_member, infer_numpy_member - - -METHODS_TO_BE_INFERRED = { - "linspace": """def linspace(start, stop, num=50, endpoint=True, retstep=False, dtype=None, axis=0): - return numpy.ndarray([0, 0])""", - "logspace": """def logspace(start, stop, num=50, endpoint=True, base=10.0, dtype=None, axis=0): - return numpy.ndarray([0, 0])""", - "geomspace": """def geomspace(start, stop, num=50, endpoint=True, dtype=None, axis=0): - return numpy.ndarray([0, 0])""", -} - -for func_name, func_src in METHODS_TO_BE_INFERRED.items(): - inference_function = functools.partial(infer_numpy_member, func_src) - astroid.MANAGER.register_transform( - astroid.Attribute, - astroid.inference_tip(inference_function), - functools.partial(looks_like_numpy_member, func_name), - ) diff --git a/Jobs_Collections/venv/Lib/python3.8/site-packages/astroid/brain/brain_numpy_core_multiarray.py b/Jobs_Collections/venv/Lib/python3.8/site-packages/astroid/brain/brain_numpy_core_multiarray.py deleted file mode 100644 index b2e32bc..0000000 --- a/Jobs_Collections/venv/Lib/python3.8/site-packages/astroid/brain/brain_numpy_core_multiarray.py +++ /dev/null @@ -1,92 +0,0 @@ -# Copyright (c) 2019-2020 hippo91 - -# Licensed under the LGPL: https://www.gnu.org/licenses/old-licenses/lgpl-2.1.en.html -# For details: https://github.com/PyCQA/astroid/blob/master/COPYING.LESSER - - -"""Astroid hooks for numpy.core.multiarray module.""" - -import functools -import astroid -from brain_numpy_utils import looks_like_numpy_member, infer_numpy_member - - -def numpy_core_multiarray_transform(): - return astroid.parse( - """ - # different functions defined in multiarray.py - def inner(a, b): - return numpy.ndarray([0, 0]) - - def vdot(a, b): - return numpy.ndarray([0, 0]) - """ - ) - - -astroid.register_module_extender( - astroid.MANAGER, "numpy.core.multiarray", numpy_core_multiarray_transform -) - - -METHODS_TO_BE_INFERRED = { - "array": """def array(object, dtype=None, copy=True, order='K', subok=False, ndmin=0): - return numpy.ndarray([0, 0])""", - "dot": """def dot(a, b, out=None): - return numpy.ndarray([0, 0])""", - "empty_like": """def empty_like(a, dtype=None, order='K', subok=True): - return numpy.ndarray((0, 0))""", - "concatenate": """def concatenate(arrays, axis=None, out=None): - return numpy.ndarray((0, 0))""", - "where": """def where(condition, x=None, y=None): - return numpy.ndarray([0, 0])""", - "empty": """def empty(shape, dtype=float, order='C'): - return numpy.ndarray([0, 0])""", - "bincount": """def bincount(x, weights=None, minlength=0): - return numpy.ndarray([0, 0])""", - "busday_count": """def busday_count(begindates, enddates, weekmask='1111100', holidays=[], busdaycal=None, out=None): - return numpy.ndarray([0, 0])""", - "busday_offset": """def busday_offset(dates, offsets, roll='raise', weekmask='1111100', holidays=None, busdaycal=None, out=None): - return numpy.ndarray([0, 0])""", - "can_cast": """def can_cast(from_, to, casting='safe'): - return True""", - "copyto": """def copyto(dst, src, casting='same_kind', where=True): - return None""", - "datetime_as_string": """def datetime_as_string(arr, unit=None, timezone='naive', casting='same_kind'): - return numpy.ndarray([0, 0])""", - "is_busday": """def is_busday(dates, weekmask='1111100', holidays=None, busdaycal=None, out=None): - return numpy.ndarray([0, 0])""", - "lexsort": """def lexsort(keys, axis=-1): - return numpy.ndarray([0, 0])""", - "may_share_memory": """def may_share_memory(a, b, max_work=None): - return True""", - # Not yet available because dtype is not yet present in those brains - # "min_scalar_type": """def min_scalar_type(a): - # return numpy.dtype('int16')""", - "packbits": """def packbits(a, axis=None, bitorder='big'): - return numpy.ndarray([0, 0])""", - # Not yet available because dtype is not yet present in those brains - # "result_type": """def result_type(*arrays_and_dtypes): - # return numpy.dtype('int16')""", - "shares_memory": """def shares_memory(a, b, max_work=None): - return True""", - "unpackbits": """def unpackbits(a, axis=None, count=None, bitorder='big'): - return numpy.ndarray([0, 0])""", - "unravel_index": """def unravel_index(indices, shape, order='C'): - return (numpy.ndarray([0, 0]),)""", - "zeros": """def zeros(shape, dtype=float, order='C'): - return numpy.ndarray([0, 0])""", -} - -for method_name, function_src in METHODS_TO_BE_INFERRED.items(): - inference_function = functools.partial(infer_numpy_member, function_src) - astroid.MANAGER.register_transform( - astroid.Attribute, - astroid.inference_tip(inference_function), - functools.partial(looks_like_numpy_member, method_name), - ) - astroid.MANAGER.register_transform( - astroid.Name, - astroid.inference_tip(inference_function), - functools.partial(looks_like_numpy_member, method_name), - ) diff --git a/Jobs_Collections/venv/Lib/python3.8/site-packages/astroid/brain/brain_numpy_core_numeric.py b/Jobs_Collections/venv/Lib/python3.8/site-packages/astroid/brain/brain_numpy_core_numeric.py deleted file mode 100644 index 2a6f37e..0000000 --- a/Jobs_Collections/venv/Lib/python3.8/site-packages/astroid/brain/brain_numpy_core_numeric.py +++ /dev/null @@ -1,43 +0,0 @@ -# Copyright (c) 2019 hippo91 - -# Licensed under the LGPL: https://www.gnu.org/licenses/old-licenses/lgpl-2.1.en.html -# For details: https://github.com/PyCQA/astroid/blob/master/COPYING.LESSER - - -"""Astroid hooks for numpy.core.numeric module.""" - -import functools -import astroid -from brain_numpy_utils import looks_like_numpy_member, infer_numpy_member - - -def numpy_core_numeric_transform(): - return astroid.parse( - """ - # different functions defined in numeric.py - import numpy - def zeros_like(a, dtype=None, order='K', subok=True): return numpy.ndarray((0, 0)) - def ones_like(a, dtype=None, order='K', subok=True): return numpy.ndarray((0, 0)) - def full_like(a, fill_value, dtype=None, order='K', subok=True): return numpy.ndarray((0, 0)) - """ - ) - - -astroid.register_module_extender( - astroid.MANAGER, "numpy.core.numeric", numpy_core_numeric_transform -) - - -METHODS_TO_BE_INFERRED = { - "ones": """def ones(shape, dtype=None, order='C'): - return numpy.ndarray([0, 0])""" -} - - -for method_name, function_src in METHODS_TO_BE_INFERRED.items(): - inference_function = functools.partial(infer_numpy_member, function_src) - astroid.MANAGER.register_transform( - astroid.Attribute, - astroid.inference_tip(inference_function), - functools.partial(looks_like_numpy_member, method_name), - ) diff --git a/Jobs_Collections/venv/Lib/python3.8/site-packages/astroid/brain/brain_numpy_core_numerictypes.py b/Jobs_Collections/venv/Lib/python3.8/site-packages/astroid/brain/brain_numpy_core_numerictypes.py deleted file mode 100644 index 6ac4a14..0000000 --- a/Jobs_Collections/venv/Lib/python3.8/site-packages/astroid/brain/brain_numpy_core_numerictypes.py +++ /dev/null @@ -1,254 +0,0 @@ -# Copyright (c) 2019-2020 hippo91 - -# Licensed under the LGPL: https://www.gnu.org/licenses/old-licenses/lgpl-2.1.en.html -# For details: https://github.com/PyCQA/astroid/blob/master/COPYING.LESSER - -# TODO(hippo91) : correct the methods signature. - -"""Astroid hooks for numpy.core.numerictypes module.""" - -import astroid - - -def numpy_core_numerictypes_transform(): - # TODO: Uniformize the generic API with the ndarray one. - # According to numpy doc the generic object should expose - # the same API than ndarray. This has been done here partially - # through the astype method. - return astroid.parse( - """ - # different types defined in numerictypes.py - class generic(object): - def __init__(self, value): - self.T = None - self.base = None - self.data = None - self.dtype = None - self.flags = None - self.flat = None - self.imag = None - self.itemsize = None - self.nbytes = None - self.ndim = None - self.real = None - self.size = None - self.strides = None - - def all(self): return uninferable - def any(self): return uninferable - def argmax(self): return uninferable - def argmin(self): return uninferable - def argsort(self): return uninferable - def astype(self, dtype, order='K', casting='unsafe', subok=True, copy=True): return np.ndarray([0, 0]) - def base(self): return uninferable - def byteswap(self): return uninferable - def choose(self): return uninferable - def clip(self): return uninferable - def compress(self): return uninferable - def conj(self): return uninferable - def conjugate(self): return uninferable - def copy(self): return uninferable - def cumprod(self): return uninferable - def cumsum(self): return uninferable - def data(self): return uninferable - def diagonal(self): return uninferable - def dtype(self): return uninferable - def dump(self): return uninferable - def dumps(self): return uninferable - def fill(self): return uninferable - def flags(self): return uninferable - def flat(self): return uninferable - def flatten(self): return uninferable - def getfield(self): return uninferable - def imag(self): return uninferable - def item(self): return uninferable - def itemset(self): return uninferable - def itemsize(self): return uninferable - def max(self): return uninferable - def mean(self): return uninferable - def min(self): return uninferable - def nbytes(self): return uninferable - def ndim(self): return uninferable - def newbyteorder(self): return uninferable - def nonzero(self): return uninferable - def prod(self): return uninferable - def ptp(self): return uninferable - def put(self): return uninferable - def ravel(self): return uninferable - def real(self): return uninferable - def repeat(self): return uninferable - def reshape(self): return uninferable - def resize(self): return uninferable - def round(self): return uninferable - def searchsorted(self): return uninferable - def setfield(self): return uninferable - def setflags(self): return uninferable - def shape(self): return uninferable - def size(self): return uninferable - def sort(self): return uninferable - def squeeze(self): return uninferable - def std(self): return uninferable - def strides(self): return uninferable - def sum(self): return uninferable - def swapaxes(self): return uninferable - def take(self): return uninferable - def tobytes(self): return uninferable - def tofile(self): return uninferable - def tolist(self): return uninferable - def tostring(self): return uninferable - def trace(self): return uninferable - def transpose(self): return uninferable - def var(self): return uninferable - def view(self): return uninferable - - - class dtype(object): - def __init__(self, obj, align=False, copy=False): - self.alignment = None - self.base = None - self.byteorder = None - self.char = None - self.descr = None - self.fields = None - self.flags = None - self.hasobject = None - self.isalignedstruct = None - self.isbuiltin = None - self.isnative = None - self.itemsize = None - self.kind = None - self.metadata = None - self.name = None - self.names = None - self.num = None - self.shape = None - self.str = None - self.subdtype = None - self.type = None - - def newbyteorder(self, new_order='S'): return uninferable - def __neg__(self): return uninferable - - class busdaycalendar(object): - def __init__(self, weekmask='1111100', holidays=None): - self.holidays = None - self.weekmask = None - - class flexible(generic): pass - class bool_(generic): pass - class number(generic): - def __neg__(self): return uninferable - class datetime64(generic): - def __init__(self, nb, unit=None): pass - - - class void(flexible): - def __init__(self, *args, **kwargs): - self.base = None - self.dtype = None - self.flags = None - def getfield(self): return uninferable - def setfield(self): return uninferable - - - class character(flexible): pass - - - class integer(number): - def __init__(self, value): - self.denominator = None - self.numerator = None - - - class inexact(number): pass - - - class str_(str, character): - def maketrans(self, x, y=None, z=None): return uninferable - - - class bytes_(bytes, character): - def fromhex(self, string): return uninferable - def maketrans(self, frm, to): return uninferable - - - class signedinteger(integer): pass - - - class unsignedinteger(integer): pass - - - class complexfloating(inexact): pass - - - class floating(inexact): pass - - - class float64(floating, float): - def fromhex(self, string): return uninferable - - - class uint64(unsignedinteger): pass - class complex64(complexfloating): pass - class int16(signedinteger): pass - class float96(floating): pass - class int8(signedinteger): pass - class uint32(unsignedinteger): pass - class uint8(unsignedinteger): pass - class _typedict(dict): pass - class complex192(complexfloating): pass - class timedelta64(signedinteger): - def __init__(self, nb, unit=None): pass - class int32(signedinteger): pass - class uint16(unsignedinteger): pass - class float32(floating): pass - class complex128(complexfloating, complex): pass - class float16(floating): pass - class int64(signedinteger): pass - - buffer_type = memoryview - bool8 = bool_ - byte = int8 - bytes0 = bytes_ - cdouble = complex128 - cfloat = complex128 - clongdouble = complex192 - clongfloat = complex192 - complex_ = complex128 - csingle = complex64 - double = float64 - float_ = float64 - half = float16 - int0 = int32 - int_ = int32 - intc = int32 - intp = int32 - long = int32 - longcomplex = complex192 - longdouble = float96 - longfloat = float96 - longlong = int64 - object0 = object_ - object_ = object_ - short = int16 - single = float32 - singlecomplex = complex64 - str0 = str_ - string_ = bytes_ - ubyte = uint8 - uint = uint32 - uint0 = uint32 - uintc = uint32 - uintp = uint32 - ulonglong = uint64 - unicode = str_ - unicode_ = str_ - ushort = uint16 - void0 = void - """ - ) - - -astroid.register_module_extender( - astroid.MANAGER, "numpy.core.numerictypes", numpy_core_numerictypes_transform -) diff --git a/Jobs_Collections/venv/Lib/python3.8/site-packages/astroid/brain/brain_numpy_core_umath.py b/Jobs_Collections/venv/Lib/python3.8/site-packages/astroid/brain/brain_numpy_core_umath.py deleted file mode 100644 index 897961e..0000000 --- a/Jobs_Collections/venv/Lib/python3.8/site-packages/astroid/brain/brain_numpy_core_umath.py +++ /dev/null @@ -1,147 +0,0 @@ -# Copyright (c) 2019 hippo91 - -# Licensed under the LGPL: https://www.gnu.org/licenses/old-licenses/lgpl-2.1.en.html -# For details: https://github.com/PyCQA/astroid/blob/master/COPYING.LESSER - - -"""Astroid hooks for numpy.core.umath module.""" - -import astroid - - -def numpy_core_umath_transform(): - ufunc_optional_keyword_arguments = ( - """out=None, where=True, casting='same_kind', order='K', """ - """dtype=None, subok=True""" - ) - return astroid.parse( - """ - class FakeUfunc: - def __init__(self): - self.__doc__ = str() - self.__name__ = str() - self.nin = 0 - self.nout = 0 - self.nargs = 0 - self.ntypes = 0 - self.types = None - self.identity = None - self.signature = None - - @classmethod - def reduce(cls, a, axis=None, dtype=None, out=None): - return numpy.ndarray([0, 0]) - - @classmethod - def accumulate(cls, array, axis=None, dtype=None, out=None): - return numpy.ndarray([0, 0]) - - @classmethod - def reduceat(cls, a, indices, axis=None, dtype=None, out=None): - return numpy.ndarray([0, 0]) - - @classmethod - def outer(cls, A, B, **kwargs): - return numpy.ndarray([0, 0]) - - @classmethod - def at(cls, a, indices, b=None): - return numpy.ndarray([0, 0]) - - class FakeUfuncOneArg(FakeUfunc): - def __call__(self, x, {opt_args:s}): - return numpy.ndarray([0, 0]) - - class FakeUfuncOneArgBis(FakeUfunc): - def __call__(self, x, {opt_args:s}): - return numpy.ndarray([0, 0]), numpy.ndarray([0, 0]) - - class FakeUfuncTwoArgs(FakeUfunc): - def __call__(self, x1, x2, {opt_args:s}): - return numpy.ndarray([0, 0]) - - # Constants - e = 2.718281828459045 - euler_gamma = 0.5772156649015329 - - # One arg functions with optional kwargs - arccos = FakeUfuncOneArg() - arccosh = FakeUfuncOneArg() - arcsin = FakeUfuncOneArg() - arcsinh = FakeUfuncOneArg() - arctan = FakeUfuncOneArg() - arctanh = FakeUfuncOneArg() - cbrt = FakeUfuncOneArg() - conj = FakeUfuncOneArg() - conjugate = FakeUfuncOneArg() - cosh = FakeUfuncOneArg() - deg2rad = FakeUfuncOneArg() - exp2 = FakeUfuncOneArg() - expm1 = FakeUfuncOneArg() - fabs = FakeUfuncOneArg() - frexp = FakeUfuncOneArgBis() - isfinite = FakeUfuncOneArg() - isinf = FakeUfuncOneArg() - log = FakeUfuncOneArg() - log1p = FakeUfuncOneArg() - log2 = FakeUfuncOneArg() - logical_not = FakeUfuncOneArg() - modf = FakeUfuncOneArgBis() - negative = FakeUfuncOneArg() - positive = FakeUfuncOneArg() - rad2deg = FakeUfuncOneArg() - reciprocal = FakeUfuncOneArg() - rint = FakeUfuncOneArg() - sign = FakeUfuncOneArg() - signbit = FakeUfuncOneArg() - sinh = FakeUfuncOneArg() - spacing = FakeUfuncOneArg() - square = FakeUfuncOneArg() - tan = FakeUfuncOneArg() - tanh = FakeUfuncOneArg() - trunc = FakeUfuncOneArg() - - # Two args functions with optional kwargs - bitwise_and = FakeUfuncTwoArgs() - bitwise_or = FakeUfuncTwoArgs() - bitwise_xor = FakeUfuncTwoArgs() - copysign = FakeUfuncTwoArgs() - divide = FakeUfuncTwoArgs() - divmod = FakeUfuncTwoArgs() - equal = FakeUfuncTwoArgs() - float_power = FakeUfuncTwoArgs() - floor_divide = FakeUfuncTwoArgs() - fmax = FakeUfuncTwoArgs() - fmin = FakeUfuncTwoArgs() - fmod = FakeUfuncTwoArgs() - greater = FakeUfuncTwoArgs() - gcd = FakeUfuncTwoArgs() - hypot = FakeUfuncTwoArgs() - heaviside = FakeUfuncTwoArgs() - lcm = FakeUfuncTwoArgs() - ldexp = FakeUfuncTwoArgs() - left_shift = FakeUfuncTwoArgs() - less = FakeUfuncTwoArgs() - logaddexp = FakeUfuncTwoArgs() - logaddexp2 = FakeUfuncTwoArgs() - logical_and = FakeUfuncTwoArgs() - logical_or = FakeUfuncTwoArgs() - logical_xor = FakeUfuncTwoArgs() - maximum = FakeUfuncTwoArgs() - minimum = FakeUfuncTwoArgs() - nextafter = FakeUfuncTwoArgs() - not_equal = FakeUfuncTwoArgs() - power = FakeUfuncTwoArgs() - remainder = FakeUfuncTwoArgs() - right_shift = FakeUfuncTwoArgs() - subtract = FakeUfuncTwoArgs() - true_divide = FakeUfuncTwoArgs() - """.format( - opt_args=ufunc_optional_keyword_arguments - ) - ) - - -astroid.register_module_extender( - astroid.MANAGER, "numpy.core.umath", numpy_core_umath_transform -) diff --git a/Jobs_Collections/venv/Lib/python3.8/site-packages/astroid/brain/brain_numpy_ndarray.py b/Jobs_Collections/venv/Lib/python3.8/site-packages/astroid/brain/brain_numpy_ndarray.py deleted file mode 100644 index d40a7dd..0000000 --- a/Jobs_Collections/venv/Lib/python3.8/site-packages/astroid/brain/brain_numpy_ndarray.py +++ /dev/null @@ -1,153 +0,0 @@ -# Copyright (c) 2015-2016, 2018-2019 Claudiu Popa -# Copyright (c) 2016 Ceridwen -# Copyright (c) 2017-2020 hippo91 - -# Licensed under the LGPL: https://www.gnu.org/licenses/old-licenses/lgpl-2.1.en.html -# For details: https://github.com/PyCQA/astroid/blob/master/COPYING.LESSER - - -"""Astroid hooks for numpy ndarray class.""" - -import functools -import astroid - - -def infer_numpy_ndarray(node, context=None): - ndarray = """ - class ndarray(object): - def __init__(self, shape, dtype=float, buffer=None, offset=0, - strides=None, order=None): - self.T = None - self.base = None - self.ctypes = None - self.data = None - self.dtype = None - self.flags = None - self.flat = None - self.imag = np.ndarray([0, 0]) - self.itemsize = None - self.nbytes = None - self.ndim = None - self.real = np.ndarray([0, 0]) - self.shape = numpy.ndarray([0, 0]) - self.size = None - self.strides = None - - def __abs__(self): return numpy.ndarray([0, 0]) - def __add__(self, value): return numpy.ndarray([0, 0]) - def __and__(self, value): return numpy.ndarray([0, 0]) - def __array__(self, dtype=None): return numpy.ndarray([0, 0]) - def __array_wrap__(self, obj): return numpy.ndarray([0, 0]) - def __contains__(self, key): return True - def __copy__(self): return numpy.ndarray([0, 0]) - def __deepcopy__(self, memo): return numpy.ndarray([0, 0]) - def __divmod__(self, value): return (numpy.ndarray([0, 0]), numpy.ndarray([0, 0])) - def __eq__(self, value): return numpy.ndarray([0, 0]) - def __float__(self): return 0. - def __floordiv__(self): return numpy.ndarray([0, 0]) - def __ge__(self, value): return numpy.ndarray([0, 0]) - def __getitem__(self, key): return uninferable - def __gt__(self, value): return numpy.ndarray([0, 0]) - def __iadd__(self, value): return numpy.ndarray([0, 0]) - def __iand__(self, value): return numpy.ndarray([0, 0]) - def __ifloordiv__(self, value): return numpy.ndarray([0, 0]) - def __ilshift__(self, value): return numpy.ndarray([0, 0]) - def __imod__(self, value): return numpy.ndarray([0, 0]) - def __imul__(self, value): return numpy.ndarray([0, 0]) - def __int__(self): return 0 - def __invert__(self): return numpy.ndarray([0, 0]) - def __ior__(self, value): return numpy.ndarray([0, 0]) - def __ipow__(self, value): return numpy.ndarray([0, 0]) - def __irshift__(self, value): return numpy.ndarray([0, 0]) - def __isub__(self, value): return numpy.ndarray([0, 0]) - def __itruediv__(self, value): return numpy.ndarray([0, 0]) - def __ixor__(self, value): return numpy.ndarray([0, 0]) - def __le__(self, value): return numpy.ndarray([0, 0]) - def __len__(self): return 1 - def __lshift__(self, value): return numpy.ndarray([0, 0]) - def __lt__(self, value): return numpy.ndarray([0, 0]) - def __matmul__(self, value): return numpy.ndarray([0, 0]) - def __mod__(self, value): return numpy.ndarray([0, 0]) - def __mul__(self, value): return numpy.ndarray([0, 0]) - def __ne__(self, value): return numpy.ndarray([0, 0]) - def __neg__(self): return numpy.ndarray([0, 0]) - def __or__(self): return numpy.ndarray([0, 0]) - def __pos__(self): return numpy.ndarray([0, 0]) - def __pow__(self): return numpy.ndarray([0, 0]) - def __repr__(self): return str() - def __rshift__(self): return numpy.ndarray([0, 0]) - def __setitem__(self, key, value): return uninferable - def __str__(self): return str() - def __sub__(self, value): return numpy.ndarray([0, 0]) - def __truediv__(self, value): return numpy.ndarray([0, 0]) - def __xor__(self, value): return numpy.ndarray([0, 0]) - def all(self, axis=None, out=None, keepdims=False): return np.ndarray([0, 0]) - def any(self, axis=None, out=None, keepdims=False): return np.ndarray([0, 0]) - def argmax(self, axis=None, out=None): return np.ndarray([0, 0]) - def argmin(self, axis=None, out=None): return np.ndarray([0, 0]) - def argpartition(self, kth, axis=-1, kind='introselect', order=None): return np.ndarray([0, 0]) - def argsort(self, axis=-1, kind='quicksort', order=None): return np.ndarray([0, 0]) - def astype(self, dtype, order='K', casting='unsafe', subok=True, copy=True): return np.ndarray([0, 0]) - def byteswap(self, inplace=False): return np.ndarray([0, 0]) - def choose(self, choices, out=None, mode='raise'): return np.ndarray([0, 0]) - def clip(self, min=None, max=None, out=None): return np.ndarray([0, 0]) - def compress(self, condition, axis=None, out=None): return np.ndarray([0, 0]) - def conj(self): return np.ndarray([0, 0]) - def conjugate(self): return np.ndarray([0, 0]) - def copy(self, order='C'): return np.ndarray([0, 0]) - def cumprod(self, axis=None, dtype=None, out=None): return np.ndarray([0, 0]) - def cumsum(self, axis=None, dtype=None, out=None): return np.ndarray([0, 0]) - def diagonal(self, offset=0, axis1=0, axis2=1): return np.ndarray([0, 0]) - def dot(self, b, out=None): return np.ndarray([0, 0]) - def dump(self, file): return None - def dumps(self): return str() - def fill(self, value): return None - def flatten(self, order='C'): return np.ndarray([0, 0]) - def getfield(self, dtype, offset=0): return np.ndarray([0, 0]) - def item(self, *args): return uninferable - def itemset(self, *args): return None - def max(self, axis=None, out=None): return np.ndarray([0, 0]) - def mean(self, axis=None, dtype=None, out=None, keepdims=False): return np.ndarray([0, 0]) - def min(self, axis=None, out=None, keepdims=False): return np.ndarray([0, 0]) - def newbyteorder(self, new_order='S'): return np.ndarray([0, 0]) - def nonzero(self): return (1,) - def partition(self, kth, axis=-1, kind='introselect', order=None): return None - def prod(self, axis=None, dtype=None, out=None, keepdims=False): return np.ndarray([0, 0]) - def ptp(self, axis=None, out=None): return np.ndarray([0, 0]) - def put(self, indices, values, mode='raise'): return None - def ravel(self, order='C'): return np.ndarray([0, 0]) - def repeat(self, repeats, axis=None): return np.ndarray([0, 0]) - def reshape(self, shape, order='C'): return np.ndarray([0, 0]) - def resize(self, new_shape, refcheck=True): return None - def round(self, decimals=0, out=None): return np.ndarray([0, 0]) - def searchsorted(self, v, side='left', sorter=None): return np.ndarray([0, 0]) - def setfield(self, val, dtype, offset=0): return None - def setflags(self, write=None, align=None, uic=None): return None - def sort(self, axis=-1, kind='quicksort', order=None): return None - def squeeze(self, axis=None): return np.ndarray([0, 0]) - def std(self, axis=None, dtype=None, out=None, ddof=0, keepdims=False): return np.ndarray([0, 0]) - def sum(self, axis=None, dtype=None, out=None, keepdims=False): return np.ndarray([0, 0]) - def swapaxes(self, axis1, axis2): return np.ndarray([0, 0]) - def take(self, indices, axis=None, out=None, mode='raise'): return np.ndarray([0, 0]) - def tobytes(self, order='C'): return b'' - def tofile(self, fid, sep="", format="%s"): return None - def tolist(self, ): return [] - def tostring(self, order='C'): return b'' - def trace(self, offset=0, axis1=0, axis2=1, dtype=None, out=None): return np.ndarray([0, 0]) - def transpose(self, *axes): return np.ndarray([0, 0]) - def var(self, axis=None, dtype=None, out=None, ddof=0, keepdims=False): return np.ndarray([0, 0]) - def view(self, dtype=None, type=None): return np.ndarray([0, 0]) - """ - node = astroid.extract_node(ndarray) - return node.infer(context=context) - - -def _looks_like_numpy_ndarray(node): - return isinstance(node, astroid.Attribute) and node.attrname == "ndarray" - - -astroid.MANAGER.register_transform( - astroid.Attribute, - astroid.inference_tip(infer_numpy_ndarray), - _looks_like_numpy_ndarray, -) diff --git a/Jobs_Collections/venv/Lib/python3.8/site-packages/astroid/brain/brain_numpy_random_mtrand.py b/Jobs_Collections/venv/Lib/python3.8/site-packages/astroid/brain/brain_numpy_random_mtrand.py deleted file mode 100644 index cffdcee..0000000 --- a/Jobs_Collections/venv/Lib/python3.8/site-packages/astroid/brain/brain_numpy_random_mtrand.py +++ /dev/null @@ -1,70 +0,0 @@ -# Copyright (c) 2019 hippo91 - -# Licensed under the LGPL: https://www.gnu.org/licenses/old-licenses/lgpl-2.1.en.html -# For details: https://github.com/PyCQA/astroid/blob/master/COPYING.LESSER - -# TODO(hippo91) : correct the functions return types -"""Astroid hooks for numpy.random.mtrand module.""" - -import astroid - - -def numpy_random_mtrand_transform(): - return astroid.parse( - """ - def beta(a, b, size=None): return uninferable - def binomial(n, p, size=None): return uninferable - def bytes(length): return uninferable - def chisquare(df, size=None): return uninferable - def choice(a, size=None, replace=True, p=None): return uninferable - def dirichlet(alpha, size=None): return uninferable - def exponential(scale=1.0, size=None): return uninferable - def f(dfnum, dfden, size=None): return uninferable - def gamma(shape, scale=1.0, size=None): return uninferable - def geometric(p, size=None): return uninferable - def get_state(): return uninferable - def gumbel(loc=0.0, scale=1.0, size=None): return uninferable - def hypergeometric(ngood, nbad, nsample, size=None): return uninferable - def laplace(loc=0.0, scale=1.0, size=None): return uninferable - def logistic(loc=0.0, scale=1.0, size=None): return uninferable - def lognormal(mean=0.0, sigma=1.0, size=None): return uninferable - def logseries(p, size=None): return uninferable - def multinomial(n, pvals, size=None): return uninferable - def multivariate_normal(mean, cov, size=None): return uninferable - def negative_binomial(n, p, size=None): return uninferable - def noncentral_chisquare(df, nonc, size=None): return uninferable - def noncentral_f(dfnum, dfden, nonc, size=None): return uninferable - def normal(loc=0.0, scale=1.0, size=None): return uninferable - def pareto(a, size=None): return uninferable - def permutation(x): return uninferable - def poisson(lam=1.0, size=None): return uninferable - def power(a, size=None): return uninferable - def rand(*args): return uninferable - def randint(low, high=None, size=None, dtype='l'): - import numpy - return numpy.ndarray((1,1)) - def randn(*args): return uninferable - def random_integers(low, high=None, size=None): return uninferable - def random_sample(size=None): return uninferable - def rayleigh(scale=1.0, size=None): return uninferable - def seed(seed=None): return uninferable - def set_state(state): return uninferable - def shuffle(x): return uninferable - def standard_cauchy(size=None): return uninferable - def standard_exponential(size=None): return uninferable - def standard_gamma(shape, size=None): return uninferable - def standard_normal(size=None): return uninferable - def standard_t(df, size=None): return uninferable - def triangular(left, mode, right, size=None): return uninferable - def uniform(low=0.0, high=1.0, size=None): return uninferable - def vonmises(mu, kappa, size=None): return uninferable - def wald(mean, scale, size=None): return uninferable - def weibull(a, size=None): return uninferable - def zipf(a, size=None): return uninferable - """ - ) - - -astroid.register_module_extender( - astroid.MANAGER, "numpy.random.mtrand", numpy_random_mtrand_transform -) diff --git a/Jobs_Collections/venv/Lib/python3.8/site-packages/astroid/brain/brain_numpy_utils.py b/Jobs_Collections/venv/Lib/python3.8/site-packages/astroid/brain/brain_numpy_utils.py deleted file mode 100644 index b29d271..0000000 --- a/Jobs_Collections/venv/Lib/python3.8/site-packages/astroid/brain/brain_numpy_utils.py +++ /dev/null @@ -1,65 +0,0 @@ -# Copyright (c) 2019-2020 hippo91 -# Copyright (c) 2019 Claudiu Popa - -# Licensed under the LGPL: https://www.gnu.org/licenses/old-licenses/lgpl-2.1.en.html -# For details: https://github.com/PyCQA/astroid/blob/master/COPYING.LESSER - - -"""Different utilities for the numpy brains""" - - -import astroid - - -def infer_numpy_member(src, node, context=None): - node = astroid.extract_node(src) - return node.infer(context=context) - - -def _is_a_numpy_module(node: astroid.node_classes.Name) -> bool: - """ - Returns True if the node is a representation of a numpy module. - - For example in : - import numpy as np - x = np.linspace(1, 2) - The node is a representation of the numpy module. - - :param node: node to test - :return: True if the node is a representation of the numpy module. - """ - module_nickname = node.name - potential_import_target = [ - x for x in node.lookup(module_nickname)[1] if isinstance(x, astroid.Import) - ] - for target in potential_import_target: - if ("numpy", module_nickname) in target.names: - return True - return False - - -def looks_like_numpy_member( - member_name: str, node: astroid.node_classes.NodeNG -) -> bool: - """ - Returns True if the node is a member of numpy whose - name is member_name. - - :param member_name: name of the member - :param node: node to test - :return: True if the node is a member of numpy - """ - if ( - isinstance(node, astroid.Attribute) - and node.attrname == member_name - and isinstance(node.expr, astroid.Name) - and _is_a_numpy_module(node.expr) - ): - return True - if ( - isinstance(node, astroid.Name) - and node.name == member_name - and node.root().name.startswith("numpy") - ): - return True - return False diff --git a/Jobs_Collections/venv/Lib/python3.8/site-packages/astroid/brain/brain_pkg_resources.py b/Jobs_Collections/venv/Lib/python3.8/site-packages/astroid/brain/brain_pkg_resources.py deleted file mode 100644 index 25e7649..0000000 --- a/Jobs_Collections/venv/Lib/python3.8/site-packages/astroid/brain/brain_pkg_resources.py +++ /dev/null @@ -1,75 +0,0 @@ -# Copyright (c) 2016, 2018 Claudiu Popa -# Copyright (c) 2016 Ceridwen - -# Licensed under the LGPL: https://www.gnu.org/licenses/old-licenses/lgpl-2.1.en.html -# For details: https://github.com/PyCQA/astroid/blob/master/COPYING.LESSER - - -import astroid -from astroid import parse -from astroid import inference_tip -from astroid import register_module_extender -from astroid import MANAGER - - -def pkg_resources_transform(): - return parse( - """ -def require(*requirements): - return pkg_resources.working_set.require(*requirements) - -def run_script(requires, script_name): - return pkg_resources.working_set.run_script(requires, script_name) - -def iter_entry_points(group, name=None): - return pkg_resources.working_set.iter_entry_points(group, name) - -def resource_exists(package_or_requirement, resource_name): - return get_provider(package_or_requirement).has_resource(resource_name) - -def resource_isdir(package_or_requirement, resource_name): - return get_provider(package_or_requirement).resource_isdir( - resource_name) - -def resource_filename(package_or_requirement, resource_name): - return get_provider(package_or_requirement).get_resource_filename( - self, resource_name) - -def resource_stream(package_or_requirement, resource_name): - return get_provider(package_or_requirement).get_resource_stream( - self, resource_name) - -def resource_string(package_or_requirement, resource_name): - return get_provider(package_or_requirement).get_resource_string( - self, resource_name) - -def resource_listdir(package_or_requirement, resource_name): - return get_provider(package_or_requirement).resource_listdir( - resource_name) - -def extraction_error(): - pass - -def get_cache_path(archive_name, names=()): - extract_path = self.extraction_path or get_default_cache() - target_path = os.path.join(extract_path, archive_name+'-tmp', *names) - return target_path - -def postprocess(tempname, filename): - pass - -def set_extraction_path(path): - pass - -def cleanup_resources(force=False): - pass - -def get_distribution(dist): - return Distribution(dist) - -_namespace_packages = {} -""" - ) - - -register_module_extender(MANAGER, "pkg_resources", pkg_resources_transform) diff --git a/Jobs_Collections/venv/Lib/python3.8/site-packages/astroid/brain/brain_pytest.py b/Jobs_Collections/venv/Lib/python3.8/site-packages/astroid/brain/brain_pytest.py deleted file mode 100644 index 56202ab..0000000 --- a/Jobs_Collections/venv/Lib/python3.8/site-packages/astroid/brain/brain_pytest.py +++ /dev/null @@ -1,88 +0,0 @@ -# Copyright (c) 2014-2016, 2018 Claudiu Popa -# Copyright (c) 2014 Jeff Quast -# Copyright (c) 2014 Google, Inc. -# Copyright (c) 2016 Florian Bruhin -# Copyright (c) 2016 Ceridwen - -# Licensed under the LGPL: https://www.gnu.org/licenses/old-licenses/lgpl-2.1.en.html -# For details: https://github.com/PyCQA/astroid/blob/master/COPYING.LESSER - -"""Astroid hooks for pytest.""" -from __future__ import absolute_import -from astroid import MANAGER, register_module_extender -from astroid.builder import AstroidBuilder - - -def pytest_transform(): - return AstroidBuilder(MANAGER).string_build( - """ - -try: - import _pytest.mark - import _pytest.recwarn - import _pytest.runner - import _pytest.python - import _pytest.skipping - import _pytest.assertion -except ImportError: - pass -else: - deprecated_call = _pytest.recwarn.deprecated_call - warns = _pytest.recwarn.warns - - exit = _pytest.runner.exit - fail = _pytest.runner.fail - skip = _pytest.runner.skip - importorskip = _pytest.runner.importorskip - - xfail = _pytest.skipping.xfail - mark = _pytest.mark.MarkGenerator() - raises = _pytest.python.raises - - # New in pytest 3.0 - try: - approx = _pytest.python.approx - register_assert_rewrite = _pytest.assertion.register_assert_rewrite - except AttributeError: - pass - - -# Moved in pytest 3.0 - -try: - import _pytest.freeze_support - freeze_includes = _pytest.freeze_support.freeze_includes -except ImportError: - try: - import _pytest.genscript - freeze_includes = _pytest.genscript.freeze_includes - except ImportError: - pass - -try: - import _pytest.debugging - set_trace = _pytest.debugging.pytestPDB().set_trace -except ImportError: - try: - import _pytest.pdb - set_trace = _pytest.pdb.pytestPDB().set_trace - except ImportError: - pass - -try: - import _pytest.fixtures - fixture = _pytest.fixtures.fixture - yield_fixture = _pytest.fixtures.yield_fixture -except ImportError: - try: - import _pytest.python - fixture = _pytest.python.fixture - yield_fixture = _pytest.python.yield_fixture - except ImportError: - pass -""" - ) - - -register_module_extender(MANAGER, "pytest", pytest_transform) -register_module_extender(MANAGER, "py.test", pytest_transform) diff --git a/Jobs_Collections/venv/Lib/python3.8/site-packages/astroid/brain/brain_qt.py b/Jobs_Collections/venv/Lib/python3.8/site-packages/astroid/brain/brain_qt.py deleted file mode 100644 index b703b37..0000000 --- a/Jobs_Collections/venv/Lib/python3.8/site-packages/astroid/brain/brain_qt.py +++ /dev/null @@ -1,83 +0,0 @@ -# Copyright (c) 2015-2016, 2018 Claudiu Popa -# Copyright (c) 2016 Ceridwen -# Copyright (c) 2017 Roy Wright -# Copyright (c) 2018 Ashley Whetter -# Copyright (c) 2019 Antoine Boellinger - -# Licensed under the LGPL: https://www.gnu.org/licenses/old-licenses/lgpl-2.1.en.html -# For details: https://github.com/PyCQA/astroid/blob/master/COPYING.LESSER - -"""Astroid hooks for the PyQT library.""" - -from astroid import MANAGER, register_module_extender -from astroid.builder import AstroidBuilder -from astroid import nodes -from astroid import parse - - -def _looks_like_signal(node, signal_name="pyqtSignal"): - if "__class__" in node.instance_attrs: - try: - cls = node.instance_attrs["__class__"][0] - return cls.name == signal_name - except AttributeError: - # return False if the cls does not have a name attribute - pass - return False - - -def transform_pyqt_signal(node): - module = parse( - """ - class pyqtSignal(object): - def connect(self, slot, type=None, no_receiver_check=False): - pass - def disconnect(self, slot): - pass - def emit(self, *args): - pass - """ - ) - signal_cls = module["pyqtSignal"] - node.instance_attrs["emit"] = signal_cls["emit"] - node.instance_attrs["disconnect"] = signal_cls["disconnect"] - node.instance_attrs["connect"] = signal_cls["connect"] - - -def transform_pyside_signal(node): - module = parse( - """ - class NotPySideSignal(object): - def connect(self, receiver, type=None): - pass - def disconnect(self, receiver): - pass - def emit(self, *args): - pass - """ - ) - signal_cls = module["NotPySideSignal"] - node.instance_attrs["connect"] = signal_cls["connect"] - node.instance_attrs["disconnect"] = signal_cls["disconnect"] - node.instance_attrs["emit"] = signal_cls["emit"] - - -def pyqt4_qtcore_transform(): - return AstroidBuilder(MANAGER).string_build( - """ - -def SIGNAL(signal_name): pass - -class QObject(object): - def emit(self, signal): pass -""" - ) - - -register_module_extender(MANAGER, "PyQt4.QtCore", pyqt4_qtcore_transform) -MANAGER.register_transform(nodes.FunctionDef, transform_pyqt_signal, _looks_like_signal) -MANAGER.register_transform( - nodes.ClassDef, - transform_pyside_signal, - lambda node: node.qname() in ("PySide.QtCore.Signal", "PySide2.QtCore.Signal"), -) diff --git a/Jobs_Collections/venv/Lib/python3.8/site-packages/astroid/brain/brain_random.py b/Jobs_Collections/venv/Lib/python3.8/site-packages/astroid/brain/brain_random.py deleted file mode 100644 index 5ec858a..0000000 --- a/Jobs_Collections/venv/Lib/python3.8/site-packages/astroid/brain/brain_random.py +++ /dev/null @@ -1,75 +0,0 @@ -# Licensed under the LGPL: https://www.gnu.org/licenses/old-licenses/lgpl-2.1.en.html -# For details: https://github.com/PyCQA/astroid/blob/master/COPYING.LESSER -import random - -import astroid -from astroid import helpers -from astroid import MANAGER - - -ACCEPTED_ITERABLES_FOR_SAMPLE = (astroid.List, astroid.Set, astroid.Tuple) - - -def _clone_node_with_lineno(node, parent, lineno): - cls = node.__class__ - other_fields = node._other_fields - _astroid_fields = node._astroid_fields - init_params = {"lineno": lineno, "col_offset": node.col_offset, "parent": parent} - postinit_params = {param: getattr(node, param) for param in _astroid_fields} - if other_fields: - init_params.update({param: getattr(node, param) for param in other_fields}) - new_node = cls(**init_params) - if hasattr(node, "postinit") and _astroid_fields: - new_node.postinit(**postinit_params) - return new_node - - -def infer_random_sample(node, context=None): - if len(node.args) != 2: - raise astroid.UseInferenceDefault - - length = node.args[1] - if not isinstance(length, astroid.Const): - raise astroid.UseInferenceDefault - if not isinstance(length.value, int): - raise astroid.UseInferenceDefault - - inferred_sequence = helpers.safe_infer(node.args[0], context=context) - if not inferred_sequence: - raise astroid.UseInferenceDefault - - if not isinstance(inferred_sequence, ACCEPTED_ITERABLES_FOR_SAMPLE): - raise astroid.UseInferenceDefault - - if length.value > len(inferred_sequence.elts): - # In this case, this will raise a ValueError - raise astroid.UseInferenceDefault - - try: - elts = random.sample(inferred_sequence.elts, length.value) - except ValueError: - raise astroid.UseInferenceDefault - - new_node = astroid.List( - lineno=node.lineno, col_offset=node.col_offset, parent=node.scope() - ) - new_elts = [ - _clone_node_with_lineno(elt, parent=new_node, lineno=new_node.lineno) - for elt in elts - ] - new_node.postinit(new_elts) - return iter((new_node,)) - - -def _looks_like_random_sample(node): - func = node.func - if isinstance(func, astroid.Attribute): - return func.attrname == "sample" - if isinstance(func, astroid.Name): - return func.name == "sample" - return False - - -MANAGER.register_transform( - astroid.Call, astroid.inference_tip(infer_random_sample), _looks_like_random_sample -) diff --git a/Jobs_Collections/venv/Lib/python3.8/site-packages/astroid/brain/brain_re.py b/Jobs_Collections/venv/Lib/python3.8/site-packages/astroid/brain/brain_re.py deleted file mode 100644 index c7ee51a..0000000 --- a/Jobs_Collections/venv/Lib/python3.8/site-packages/astroid/brain/brain_re.py +++ /dev/null @@ -1,36 +0,0 @@ -# Licensed under the LGPL: https://www.gnu.org/licenses/old-licenses/lgpl-2.1.en.html -# For details: https://github.com/PyCQA/astroid/blob/master/COPYING.LESSER -import sys -import astroid - -PY36 = sys.version_info >= (3, 6) - -if PY36: - # Since Python 3.6 there is the RegexFlag enum - # where every entry will be exposed via updating globals() - - def _re_transform(): - return astroid.parse( - """ - import sre_compile - ASCII = sre_compile.SRE_FLAG_ASCII - IGNORECASE = sre_compile.SRE_FLAG_IGNORECASE - LOCALE = sre_compile.SRE_FLAG_LOCALE - UNICODE = sre_compile.SRE_FLAG_UNICODE - MULTILINE = sre_compile.SRE_FLAG_MULTILINE - DOTALL = sre_compile.SRE_FLAG_DOTALL - VERBOSE = sre_compile.SRE_FLAG_VERBOSE - A = ASCII - I = IGNORECASE - L = LOCALE - U = UNICODE - M = MULTILINE - S = DOTALL - X = VERBOSE - TEMPLATE = sre_compile.SRE_FLAG_TEMPLATE - T = TEMPLATE - DEBUG = sre_compile.SRE_FLAG_DEBUG - """ - ) - - astroid.register_module_extender(astroid.MANAGER, "re", _re_transform) diff --git a/Jobs_Collections/venv/Lib/python3.8/site-packages/astroid/brain/brain_responses.py b/Jobs_Collections/venv/Lib/python3.8/site-packages/astroid/brain/brain_responses.py deleted file mode 100644 index 3a44129..0000000 --- a/Jobs_Collections/venv/Lib/python3.8/site-packages/astroid/brain/brain_responses.py +++ /dev/null @@ -1,73 +0,0 @@ -""" -Astroid hooks for responses. - -It might need to be manually updated from the public methods of -:class:`responses.RequestsMock`. - -See: https://github.com/getsentry/responses/blob/master/responses.py - -""" -import astroid - - -def responses_funcs(): - return astroid.parse( - """ - DELETE = "DELETE" - GET = "GET" - HEAD = "HEAD" - OPTIONS = "OPTIONS" - PATCH = "PATCH" - POST = "POST" - PUT = "PUT" - response_callback = None - - def reset(): - return - - def add( - method=None, # method or ``Response`` - url=None, - body="", - adding_headers=None, - *args, - **kwargs - ): - return - - def add_passthru(prefix): - return - - def remove(method_or_response=None, url=None): - return - - def replace(method_or_response=None, url=None, body="", *args, **kwargs): - return - - def add_callback( - method, url, callback, match_querystring=False, content_type="text/plain" - ): - return - - calls = [] - - def __enter__(): - return - - def __exit__(type, value, traceback): - success = type is None - return success - - def activate(func): - return func - - def start(): - return - - def stop(allow_assert=True): - return - """ - ) - - -astroid.register_module_extender(astroid.MANAGER, "responses", responses_funcs) diff --git a/Jobs_Collections/venv/Lib/python3.8/site-packages/astroid/brain/brain_scipy_signal.py b/Jobs_Collections/venv/Lib/python3.8/site-packages/astroid/brain/brain_scipy_signal.py deleted file mode 100644 index 4d00c6c..0000000 --- a/Jobs_Collections/venv/Lib/python3.8/site-packages/astroid/brain/brain_scipy_signal.py +++ /dev/null @@ -1,89 +0,0 @@ -# Copyright (c) 2019 Valentin Valls - -# Licensed under the LGPL: https://www.gnu.org/licenses/old-licenses/lgpl-2.1.en.html -# For details: https://github.com/PyCQA/astroid/blob/master/COPYING.LESSER - - -"""Astroid hooks for scipy.signal module.""" - -import astroid - - -def scipy_signal(): - return astroid.parse( - """ - # different functions defined in scipy.signals - - def barthann(M, sym=True): - return numpy.ndarray([0]) - - def bartlett(M, sym=True): - return numpy.ndarray([0]) - - def blackman(M, sym=True): - return numpy.ndarray([0]) - - def blackmanharris(M, sym=True): - return numpy.ndarray([0]) - - def bohman(M, sym=True): - return numpy.ndarray([0]) - - def boxcar(M, sym=True): - return numpy.ndarray([0]) - - def chebwin(M, at, sym=True): - return numpy.ndarray([0]) - - def cosine(M, sym=True): - return numpy.ndarray([0]) - - def exponential(M, center=None, tau=1.0, sym=True): - return numpy.ndarray([0]) - - def flattop(M, sym=True): - return numpy.ndarray([0]) - - def gaussian(M, std, sym=True): - return numpy.ndarray([0]) - - def general_gaussian(M, p, sig, sym=True): - return numpy.ndarray([0]) - - def hamming(M, sym=True): - return numpy.ndarray([0]) - - def hann(M, sym=True): - return numpy.ndarray([0]) - - def hanning(M, sym=True): - return numpy.ndarray([0]) - - def impulse2(system, X0=None, T=None, N=None, **kwargs): - return numpy.ndarray([0]), numpy.ndarray([0]) - - def kaiser(M, beta, sym=True): - return numpy.ndarray([0]) - - def nuttall(M, sym=True): - return numpy.ndarray([0]) - - def parzen(M, sym=True): - return numpy.ndarray([0]) - - def slepian(M, width, sym=True): - return numpy.ndarray([0]) - - def step2(system, X0=None, T=None, N=None, **kwargs): - return numpy.ndarray([0]), numpy.ndarray([0]) - - def triang(M, sym=True): - return numpy.ndarray([0]) - - def tukey(M, alpha=0.5, sym=True): - return numpy.ndarray([0]) - """ - ) - - -astroid.register_module_extender(astroid.MANAGER, "scipy.signal", scipy_signal) diff --git a/Jobs_Collections/venv/Lib/python3.8/site-packages/astroid/brain/brain_six.py b/Jobs_Collections/venv/Lib/python3.8/site-packages/astroid/brain/brain_six.py deleted file mode 100644 index 46d9fa3..0000000 --- a/Jobs_Collections/venv/Lib/python3.8/site-packages/astroid/brain/brain_six.py +++ /dev/null @@ -1,201 +0,0 @@ -# Copyright (c) 2014-2016, 2018, 2020 Claudiu Popa -# Copyright (c) 2015-2016 Ceridwen -# Copyright (c) 2018 Bryce Guinta - -# Licensed under the LGPL: https://www.gnu.org/licenses/old-licenses/lgpl-2.1.en.html -# For details: https://github.com/PyCQA/astroid/blob/master/COPYING.LESSER - - -"""Astroid hooks for six module.""" - -from textwrap import dedent - -from astroid import MANAGER, register_module_extender -from astroid.builder import AstroidBuilder -from astroid.exceptions import ( - AstroidBuildingError, - InferenceError, - AttributeInferenceError, -) -from astroid import nodes - - -SIX_ADD_METACLASS = "six.add_metaclass" - - -def _indent(text, prefix, predicate=None): - """Adds 'prefix' to the beginning of selected lines in 'text'. - - If 'predicate' is provided, 'prefix' will only be added to the lines - where 'predicate(line)' is True. If 'predicate' is not provided, - it will default to adding 'prefix' to all non-empty lines that do not - consist solely of whitespace characters. - """ - if predicate is None: - predicate = lambda line: line.strip() - - def prefixed_lines(): - for line in text.splitlines(True): - yield prefix + line if predicate(line) else line - - return "".join(prefixed_lines()) - - -_IMPORTS = """ -import _io -cStringIO = _io.StringIO -filter = filter -from itertools import filterfalse -input = input -from sys import intern -map = map -range = range -from importlib import reload -reload_module = lambda module: reload(module) -from functools import reduce -from shlex import quote as shlex_quote -from io import StringIO -from collections import UserDict, UserList, UserString -xrange = range -zip = zip -from itertools import zip_longest -import builtins -import configparser -import copyreg -import _dummy_thread -import http.cookiejar as http_cookiejar -import http.cookies as http_cookies -import html.entities as html_entities -import html.parser as html_parser -import http.client as http_client -import http.server as http_server -BaseHTTPServer = CGIHTTPServer = SimpleHTTPServer = http.server -import pickle as cPickle -import queue -import reprlib -import socketserver -import _thread -import winreg -import xmlrpc.server as xmlrpc_server -import xmlrpc.client as xmlrpc_client -import urllib.robotparser as urllib_robotparser -import email.mime.multipart as email_mime_multipart -import email.mime.nonmultipart as email_mime_nonmultipart -import email.mime.text as email_mime_text -import email.mime.base as email_mime_base -import urllib.parse as urllib_parse -import urllib.error as urllib_error -import tkinter -import tkinter.dialog as tkinter_dialog -import tkinter.filedialog as tkinter_filedialog -import tkinter.scrolledtext as tkinter_scrolledtext -import tkinter.simpledialog as tkinder_simpledialog -import tkinter.tix as tkinter_tix -import tkinter.ttk as tkinter_ttk -import tkinter.constants as tkinter_constants -import tkinter.dnd as tkinter_dnd -import tkinter.colorchooser as tkinter_colorchooser -import tkinter.commondialog as tkinter_commondialog -import tkinter.filedialog as tkinter_tkfiledialog -import tkinter.font as tkinter_font -import tkinter.messagebox as tkinter_messagebox -import urllib -import urllib.request as urllib_request -import urllib.robotparser as urllib_robotparser -import urllib.parse as urllib_parse -import urllib.error as urllib_error -""" - - -def six_moves_transform(): - code = dedent( - """ - class Moves(object): - {} - moves = Moves() - """ - ).format(_indent(_IMPORTS, " ")) - module = AstroidBuilder(MANAGER).string_build(code) - module.name = "six.moves" - return module - - -def _six_fail_hook(modname): - """Fix six.moves imports due to the dynamic nature of this - class. - - Construct a pseudo-module which contains all the necessary imports - for six - - :param modname: Name of failed module - :type modname: str - - :return: An astroid module - :rtype: nodes.Module - """ - - attribute_of = modname != "six.moves" and modname.startswith("six.moves") - if modname != "six.moves" and not attribute_of: - raise AstroidBuildingError(modname=modname) - module = AstroidBuilder(MANAGER).string_build(_IMPORTS) - module.name = "six.moves" - if attribute_of: - # Facilitate import of submodules in Moves - start_index = len(module.name) - attribute = modname[start_index:].lstrip(".").replace(".", "_") - try: - import_attr = module.getattr(attribute)[0] - except AttributeInferenceError: - raise AstroidBuildingError(modname=modname) - if isinstance(import_attr, nodes.Import): - submodule = MANAGER.ast_from_module_name(import_attr.names[0][0]) - return submodule - # Let dummy submodule imports pass through - # This will cause an Uninferable result, which is okay - return module - - -def _looks_like_decorated_with_six_add_metaclass(node): - if not node.decorators: - return False - - for decorator in node.decorators.nodes: - if not isinstance(decorator, nodes.Call): - continue - if decorator.func.as_string() == SIX_ADD_METACLASS: - return True - return False - - -def transform_six_add_metaclass(node): - """Check if the given class node is decorated with *six.add_metaclass* - - If so, inject its argument as the metaclass of the underlying class. - """ - if not node.decorators: - return - - for decorator in node.decorators.nodes: - if not isinstance(decorator, nodes.Call): - continue - - try: - func = next(decorator.func.infer()) - except InferenceError: - continue - if func.qname() == SIX_ADD_METACLASS and decorator.args: - metaclass = decorator.args[0] - node._metaclass = metaclass - return node - - -register_module_extender(MANAGER, "six", six_moves_transform) -register_module_extender( - MANAGER, "requests.packages.urllib3.packages.six", six_moves_transform -) -MANAGER.register_failed_import_hook(_six_fail_hook) -MANAGER.register_transform( - nodes.ClassDef, - transform_six_add_metaclass, - _looks_like_decorated_with_six_add_metaclass, -) diff --git a/Jobs_Collections/venv/Lib/python3.8/site-packages/astroid/brain/brain_ssl.py b/Jobs_Collections/venv/Lib/python3.8/site-packages/astroid/brain/brain_ssl.py deleted file mode 100644 index 2ae21c3..0000000 --- a/Jobs_Collections/venv/Lib/python3.8/site-packages/astroid/brain/brain_ssl.py +++ /dev/null @@ -1,75 +0,0 @@ -# Copyright (c) 2016, 2018 Claudiu Popa -# Copyright (c) 2016 Ceridwen -# Copyright (c) 2019 Benjamin Elven <25181435+S3ntinelX@users.noreply.github.com> - -# Licensed under the LGPL: https://www.gnu.org/licenses/old-licenses/lgpl-2.1.en.html -# For details: https://github.com/PyCQA/astroid/blob/master/COPYING.LESSER - -"""Astroid hooks for the ssl library.""" - -from astroid import MANAGER, register_module_extender -from astroid.builder import AstroidBuilder -from astroid import nodes -from astroid import parse - - -def ssl_transform(): - return parse( - """ - from _ssl import OPENSSL_VERSION_NUMBER, OPENSSL_VERSION_INFO, OPENSSL_VERSION - from _ssl import _SSLContext, MemoryBIO - from _ssl import ( - SSLError, SSLZeroReturnError, SSLWantReadError, SSLWantWriteError, - SSLSyscallError, SSLEOFError, - ) - from _ssl import CERT_NONE, CERT_OPTIONAL, CERT_REQUIRED - from _ssl import txt2obj as _txt2obj, nid2obj as _nid2obj - from _ssl import RAND_status, RAND_add, RAND_bytes, RAND_pseudo_bytes - try: - from _ssl import RAND_egd - except ImportError: - # LibreSSL does not provide RAND_egd - pass - from _ssl import (OP_ALL, OP_CIPHER_SERVER_PREFERENCE, - OP_NO_COMPRESSION, OP_NO_SSLv2, OP_NO_SSLv3, - OP_NO_TLSv1, OP_NO_TLSv1_1, OP_NO_TLSv1_2, - OP_SINGLE_DH_USE, OP_SINGLE_ECDH_USE) - - from _ssl import (ALERT_DESCRIPTION_ACCESS_DENIED, ALERT_DESCRIPTION_BAD_CERTIFICATE, - ALERT_DESCRIPTION_BAD_CERTIFICATE_HASH_VALUE, - ALERT_DESCRIPTION_BAD_CERTIFICATE_STATUS_RESPONSE, - ALERT_DESCRIPTION_BAD_RECORD_MAC, - ALERT_DESCRIPTION_CERTIFICATE_EXPIRED, - ALERT_DESCRIPTION_CERTIFICATE_REVOKED, - ALERT_DESCRIPTION_CERTIFICATE_UNKNOWN, - ALERT_DESCRIPTION_CERTIFICATE_UNOBTAINABLE, - ALERT_DESCRIPTION_CLOSE_NOTIFY, ALERT_DESCRIPTION_DECODE_ERROR, - ALERT_DESCRIPTION_DECOMPRESSION_FAILURE, - ALERT_DESCRIPTION_DECRYPT_ERROR, - ALERT_DESCRIPTION_HANDSHAKE_FAILURE, - ALERT_DESCRIPTION_ILLEGAL_PARAMETER, - ALERT_DESCRIPTION_INSUFFICIENT_SECURITY, - ALERT_DESCRIPTION_INTERNAL_ERROR, - ALERT_DESCRIPTION_NO_RENEGOTIATION, - ALERT_DESCRIPTION_PROTOCOL_VERSION, - ALERT_DESCRIPTION_RECORD_OVERFLOW, - ALERT_DESCRIPTION_UNEXPECTED_MESSAGE, - ALERT_DESCRIPTION_UNKNOWN_CA, - ALERT_DESCRIPTION_UNKNOWN_PSK_IDENTITY, - ALERT_DESCRIPTION_UNRECOGNIZED_NAME, - ALERT_DESCRIPTION_UNSUPPORTED_CERTIFICATE, - ALERT_DESCRIPTION_UNSUPPORTED_EXTENSION, - ALERT_DESCRIPTION_USER_CANCELLED) - from _ssl import (SSL_ERROR_EOF, SSL_ERROR_INVALID_ERROR_CODE, SSL_ERROR_SSL, - SSL_ERROR_SYSCALL, SSL_ERROR_WANT_CONNECT, SSL_ERROR_WANT_READ, - SSL_ERROR_WANT_WRITE, SSL_ERROR_WANT_X509_LOOKUP, SSL_ERROR_ZERO_RETURN) - from _ssl import VERIFY_CRL_CHECK_CHAIN, VERIFY_CRL_CHECK_LEAF, VERIFY_DEFAULT, VERIFY_X509_STRICT - from _ssl import HAS_SNI, HAS_ECDH, HAS_NPN, HAS_ALPN - from _ssl import _OPENSSL_API_VERSION - from _ssl import PROTOCOL_SSLv23, PROTOCOL_TLSv1, PROTOCOL_TLSv1_1, PROTOCOL_TLSv1_2 - from _ssl import PROTOCOL_TLS, PROTOCOL_TLS_CLIENT, PROTOCOL_TLS_SERVER - """ - ) - - -register_module_extender(MANAGER, "ssl", ssl_transform) diff --git a/Jobs_Collections/venv/Lib/python3.8/site-packages/astroid/brain/brain_subprocess.py b/Jobs_Collections/venv/Lib/python3.8/site-packages/astroid/brain/brain_subprocess.py deleted file mode 100644 index ab7d5d7..0000000 --- a/Jobs_Collections/venv/Lib/python3.8/site-packages/astroid/brain/brain_subprocess.py +++ /dev/null @@ -1,146 +0,0 @@ -# Copyright (c) 2016-2020 Claudiu Popa -# Copyright (c) 2017 Hugo -# Copyright (c) 2018 Peter Talley -# Copyright (c) 2018 Bryce Guinta -# Copyright (c) 2019 Hugo van Kemenade - -# Licensed under the LGPL: https://www.gnu.org/licenses/old-licenses/lgpl-2.1.en.html -# For details: https://github.com/PyCQA/astroid/blob/master/COPYING.LESSER - -import sys -import textwrap - -import astroid - - -PY37 = sys.version_info >= (3, 7) -PY36 = sys.version_info >= (3, 6) - - -def _subprocess_transform(): - communicate = (bytes("string", "ascii"), bytes("string", "ascii")) - communicate_signature = "def communicate(self, input=None, timeout=None)" - if PY37: - init = """ - def __init__(self, args, bufsize=0, executable=None, - stdin=None, stdout=None, stderr=None, - preexec_fn=None, close_fds=False, shell=False, - cwd=None, env=None, universal_newlines=False, - startupinfo=None, creationflags=0, restore_signals=True, - start_new_session=False, pass_fds=(), *, - encoding=None, errors=None, text=None): - pass - """ - elif PY36: - init = """ - def __init__(self, args, bufsize=0, executable=None, - stdin=None, stdout=None, stderr=None, - preexec_fn=None, close_fds=False, shell=False, - cwd=None, env=None, universal_newlines=False, - startupinfo=None, creationflags=0, restore_signals=True, - start_new_session=False, pass_fds=(), *, - encoding=None, errors=None): - pass - """ - else: - init = """ - def __init__(self, args, bufsize=0, executable=None, - stdin=None, stdout=None, stderr=None, - preexec_fn=None, close_fds=False, shell=False, - cwd=None, env=None, universal_newlines=False, - startupinfo=None, creationflags=0, restore_signals=True, - start_new_session=False, pass_fds=()): - pass - """ - wait_signature = "def wait(self, timeout=None)" - ctx_manager = """ - def __enter__(self): return self - def __exit__(self, *args): pass - """ - py3_args = "args = []" - - if PY37: - check_output_signature = """ - check_output( - args, *, - stdin=None, - stderr=None, - shell=False, - cwd=None, - encoding=None, - errors=None, - universal_newlines=False, - timeout=None, - env=None, - text=None, - restore_signals=True, - preexec_fn=None, - pass_fds=(), - input=None, - start_new_session=False - ): - """.strip() - else: - check_output_signature = """ - check_output( - args, *, - stdin=None, - stderr=None, - shell=False, - cwd=None, - encoding=None, - errors=None, - universal_newlines=False, - timeout=None, - env=None, - restore_signals=True, - preexec_fn=None, - pass_fds=(), - input=None, - start_new_session=False - ): - """.strip() - - code = textwrap.dedent( - """ - def %(check_output_signature)s - if universal_newlines: - return "" - return b"" - - class Popen(object): - returncode = pid = 0 - stdin = stdout = stderr = file() - %(py3_args)s - - %(communicate_signature)s: - return %(communicate)r - %(wait_signature)s: - return self.returncode - def poll(self): - return self.returncode - def send_signal(self, signal): - pass - def terminate(self): - pass - def kill(self): - pass - %(ctx_manager)s - """ - % { - "check_output_signature": check_output_signature, - "communicate": communicate, - "communicate_signature": communicate_signature, - "wait_signature": wait_signature, - "ctx_manager": ctx_manager, - "py3_args": py3_args, - } - ) - - init_lines = textwrap.dedent(init).splitlines() - indented_init = "\n".join(" " * 4 + line for line in init_lines) - code += indented_init - return astroid.parse(code) - - -astroid.register_module_extender(astroid.MANAGER, "subprocess", _subprocess_transform) diff --git a/Jobs_Collections/venv/Lib/python3.8/site-packages/astroid/brain/brain_threading.py b/Jobs_Collections/venv/Lib/python3.8/site-packages/astroid/brain/brain_threading.py deleted file mode 100644 index ba3085b..0000000 --- a/Jobs_Collections/venv/Lib/python3.8/site-packages/astroid/brain/brain_threading.py +++ /dev/null @@ -1,31 +0,0 @@ -# -*- coding: utf-8 -*- -# Copyright (c) 2016, 2018-2019 Claudiu Popa -# Copyright (c) 2017 ลukasz Rogalski - -# Licensed under the LGPL: https://www.gnu.org/licenses/old-licenses/lgpl-2.1.en.html -# For details: https://github.com/PyCQA/astroid/blob/master/COPYING.LESSER -import astroid - - -def _thread_transform(): - return astroid.parse( - """ - class lock(object): - def acquire(self, blocking=True, timeout=-1): - return False - def release(self): - pass - def __enter__(self): - return True - def __exit__(self, *args): - pass - def locked(self): - return False - - def Lock(): - return lock() - """ - ) - - -astroid.register_module_extender(astroid.MANAGER, "threading", _thread_transform) diff --git a/Jobs_Collections/venv/Lib/python3.8/site-packages/astroid/brain/brain_typing.py b/Jobs_Collections/venv/Lib/python3.8/site-packages/astroid/brain/brain_typing.py deleted file mode 100644 index 9ff7227..0000000 --- a/Jobs_Collections/venv/Lib/python3.8/site-packages/astroid/brain/brain_typing.py +++ /dev/null @@ -1,96 +0,0 @@ -# -*- coding: utf-8 -*- -# Copyright (c) 2017-2018 Claudiu Popa -# Copyright (c) 2017 ลukasz Rogalski -# Copyright (c) 2017 David Euresti -# Copyright (c) 2018 Bryce Guinta - -"""Astroid hooks for typing.py support.""" -import typing - -from astroid import ( - MANAGER, - UseInferenceDefault, - extract_node, - inference_tip, - nodes, - InferenceError, -) - - -TYPING_NAMEDTUPLE_BASENAMES = {"NamedTuple", "typing.NamedTuple"} -TYPING_TYPEVARS = {"TypeVar", "NewType"} -TYPING_TYPEVARS_QUALIFIED = {"typing.TypeVar", "typing.NewType"} -TYPING_TYPE_TEMPLATE = """ -class Meta(type): - def __getitem__(self, item): - return self - - @property - def __args__(self): - return () - -class {0}(metaclass=Meta): - pass -""" -TYPING_MEMBERS = set(typing.__all__) - - -def looks_like_typing_typevar_or_newtype(node): - func = node.func - if isinstance(func, nodes.Attribute): - return func.attrname in TYPING_TYPEVARS - if isinstance(func, nodes.Name): - return func.name in TYPING_TYPEVARS - return False - - -def infer_typing_typevar_or_newtype(node, context=None): - """Infer a typing.TypeVar(...) or typing.NewType(...) call""" - try: - func = next(node.func.infer(context=context)) - except InferenceError as exc: - raise UseInferenceDefault from exc - - if func.qname() not in TYPING_TYPEVARS_QUALIFIED: - raise UseInferenceDefault - if not node.args: - raise UseInferenceDefault - - typename = node.args[0].as_string().strip("'") - node = extract_node(TYPING_TYPE_TEMPLATE.format(typename)) - return node.infer(context=context) - - -def _looks_like_typing_subscript(node): - """Try to figure out if a Subscript node *might* be a typing-related subscript""" - if isinstance(node, nodes.Name): - return node.name in TYPING_MEMBERS - elif isinstance(node, nodes.Attribute): - return node.attrname in TYPING_MEMBERS - elif isinstance(node, nodes.Subscript): - return _looks_like_typing_subscript(node.value) - return False - - -def infer_typing_attr(node, context=None): - """Infer a typing.X[...] subscript""" - try: - value = next(node.value.infer()) - except InferenceError as exc: - raise UseInferenceDefault from exc - - if not value.qname().startswith("typing."): - raise UseInferenceDefault - - node = extract_node(TYPING_TYPE_TEMPLATE.format(value.qname().split(".")[-1])) - return node.infer(context=context) - - -MANAGER.register_transform( - nodes.Call, - inference_tip(infer_typing_typevar_or_newtype), - looks_like_typing_typevar_or_newtype, -) -MANAGER.register_transform( - nodes.Subscript, inference_tip(infer_typing_attr), _looks_like_typing_subscript -) diff --git a/Jobs_Collections/venv/Lib/python3.8/site-packages/astroid/brain/brain_uuid.py b/Jobs_Collections/venv/Lib/python3.8/site-packages/astroid/brain/brain_uuid.py deleted file mode 100644 index 5a33fc2..0000000 --- a/Jobs_Collections/venv/Lib/python3.8/site-packages/astroid/brain/brain_uuid.py +++ /dev/null @@ -1,20 +0,0 @@ -# Copyright (c) 2017-2018 Claudiu Popa - -# Licensed under the LGPL: https://www.gnu.org/licenses/old-licenses/lgpl-2.1.en.html -# For details: https://github.com/PyCQA/astroid/blob/master/COPYING.LESSER - -"""Astroid hooks for the UUID module.""" - - -from astroid import MANAGER -from astroid import nodes - - -def _patch_uuid_class(node): - # The .int member is patched using __dict__ - node.locals["int"] = [nodes.Const(0, parent=node)] - - -MANAGER.register_transform( - nodes.ClassDef, _patch_uuid_class, lambda node: node.qname() == "uuid.UUID" -) diff --git a/Jobs_Collections/venv/Lib/python3.8/site-packages/astroid/builder.py b/Jobs_Collections/venv/Lib/python3.8/site-packages/astroid/builder.py deleted file mode 100644 index 142764b..0000000 --- a/Jobs_Collections/venv/Lib/python3.8/site-packages/astroid/builder.py +++ /dev/null @@ -1,455 +0,0 @@ -# -*- coding: utf-8 -*- -# Copyright (c) 2006-2011, 2013-2014 LOGILAB S.A. (Paris, FRANCE) -# Copyright (c) 2013 Phil Schaf -# Copyright (c) 2014-2019 Claudiu Popa -# Copyright (c) 2014-2015 Google, Inc. -# Copyright (c) 2014 Alexander Presnyakov -# Copyright (c) 2015-2016 Ceridwen -# Copyright (c) 2016 Derek Gustafson -# Copyright (c) 2017 ลukasz Rogalski -# Copyright (c) 2018 Anthony Sottile - -# Licensed under the LGPL: https://www.gnu.org/licenses/old-licenses/lgpl-2.1.en.html -# For details: https://github.com/PyCQA/astroid/blob/master/COPYING.LESSER - -"""The AstroidBuilder makes astroid from living object and / or from _ast - -The builder is not thread safe and can't be used to parse different sources -at the same time. -""" - -import os -import textwrap -from tokenize import detect_encoding - -from astroid._ast import get_parser_module -from astroid import bases -from astroid import exceptions -from astroid import manager -from astroid import modutils -from astroid import raw_building -from astroid import rebuilder -from astroid import nodes -from astroid import util - -objects = util.lazy_import("objects") - -# The name of the transient function that is used to -# wrap expressions to be extracted when calling -# extract_node. -_TRANSIENT_FUNCTION = "__" - -# The comment used to select a statement to be extracted -# when calling extract_node. -_STATEMENT_SELECTOR = "#@" -MISPLACED_TYPE_ANNOTATION_ERROR = "misplaced type annotation" -MANAGER = manager.AstroidManager() - - -def open_source_file(filename): - with open(filename, "rb") as byte_stream: - encoding = detect_encoding(byte_stream.readline)[0] - stream = open(filename, "r", newline=None, encoding=encoding) - data = stream.read() - return stream, encoding, data - - -def _can_assign_attr(node, attrname): - try: - slots = node.slots() - except NotImplementedError: - pass - else: - if slots and attrname not in {slot.value for slot in slots}: - return False - return True - - -class AstroidBuilder(raw_building.InspectBuilder): - """Class for building an astroid tree from source code or from a live module. - - The param *manager* specifies the manager class which should be used. - If no manager is given, then the default one will be used. The - param *apply_transforms* determines if the transforms should be - applied after the tree was built from source or from a live object, - by default being True. - """ - - # pylint: disable=redefined-outer-name - def __init__(self, manager=None, apply_transforms=True): - super().__init__() - self._manager = manager or MANAGER - self._apply_transforms = apply_transforms - - def module_build(self, module, modname=None): - """Build an astroid from a living module instance.""" - node = None - path = getattr(module, "__file__", None) - if path is not None: - path_, ext = os.path.splitext(modutils._path_from_filename(path)) - if ext in (".py", ".pyc", ".pyo") and os.path.exists(path_ + ".py"): - node = self.file_build(path_ + ".py", modname) - if node is None: - # this is a built-in module - # get a partial representation by introspection - node = self.inspect_build(module, modname=modname, path=path) - if self._apply_transforms: - # We have to handle transformation by ourselves since the - # rebuilder isn't called for builtin nodes - node = self._manager.visit_transforms(node) - return node - - def file_build(self, path, modname=None): - """Build astroid from a source code file (i.e. from an ast) - - *path* is expected to be a python source file - """ - try: - stream, encoding, data = open_source_file(path) - except IOError as exc: - raise exceptions.AstroidBuildingError( - "Unable to load file {path}:\n{error}", - modname=modname, - path=path, - error=exc, - ) from exc - except (SyntaxError, LookupError) as exc: - raise exceptions.AstroidSyntaxError( - "Python 3 encoding specification error or unknown encoding:\n" - "{error}", - modname=modname, - path=path, - error=exc, - ) from exc - except UnicodeError as exc: # wrong encoding - # detect_encoding returns utf-8 if no encoding specified - raise exceptions.AstroidBuildingError( - "Wrong or no encoding specified for {filename}.", filename=path - ) from exc - with stream: - # get module name if necessary - if modname is None: - try: - modname = ".".join(modutils.modpath_from_file(path)) - except ImportError: - modname = os.path.splitext(os.path.basename(path))[0] - # build astroid representation - module = self._data_build(data, modname, path) - return self._post_build(module, encoding) - - def string_build(self, data, modname="", path=None): - """Build astroid from source code string.""" - module = self._data_build(data, modname, path) - module.file_bytes = data.encode("utf-8") - return self._post_build(module, "utf-8") - - def _post_build(self, module, encoding): - """Handles encoding and delayed nodes after a module has been built""" - module.file_encoding = encoding - self._manager.cache_module(module) - # post tree building steps after we stored the module in the cache: - for from_node in module._import_from_nodes: - if from_node.modname == "__future__": - for symbol, _ in from_node.names: - module.future_imports.add(symbol) - self.add_from_names_to_locals(from_node) - # handle delayed assattr nodes - for delayed in module._delayed_assattr: - self.delayed_assattr(delayed) - - # Visit the transforms - if self._apply_transforms: - module = self._manager.visit_transforms(module) - return module - - def _data_build(self, data, modname, path): - """Build tree node from data and add some informations""" - try: - node, parser_module = _parse_string(data, type_comments=True) - except (TypeError, ValueError, SyntaxError) as exc: - raise exceptions.AstroidSyntaxError( - "Parsing Python code failed:\n{error}", - source=data, - modname=modname, - path=path, - error=exc, - ) from exc - - if path is not None: - node_file = os.path.abspath(path) - else: - node_file = "" - if modname.endswith(".__init__"): - modname = modname[:-9] - package = True - else: - package = ( - path is not None - and os.path.splitext(os.path.basename(path))[0] == "__init__" - ) - builder = rebuilder.TreeRebuilder(self._manager, parser_module) - module = builder.visit_module(node, modname, node_file, package) - module._import_from_nodes = builder._import_from_nodes - module._delayed_assattr = builder._delayed_assattr - return module - - def add_from_names_to_locals(self, node): - """Store imported names to the locals - - Resort the locals if coming from a delayed node - """ - _key_func = lambda node: node.fromlineno - - def sort_locals(my_list): - my_list.sort(key=_key_func) - - for (name, asname) in node.names: - if name == "*": - try: - imported = node.do_import_module() - except exceptions.AstroidBuildingError: - continue - for name in imported.public_names(): - node.parent.set_local(name, node) - sort_locals(node.parent.scope().locals[name]) - else: - node.parent.set_local(asname or name, node) - sort_locals(node.parent.scope().locals[asname or name]) - - def delayed_assattr(self, node): - """Visit a AssAttr node - - This adds name to locals and handle members definition. - """ - try: - frame = node.frame() - for inferred in node.expr.infer(): - if inferred is util.Uninferable: - continue - try: - cls = inferred.__class__ - if cls is bases.Instance or cls is objects.ExceptionInstance: - inferred = inferred._proxied - iattrs = inferred.instance_attrs - if not _can_assign_attr(inferred, node.attrname): - continue - elif isinstance(inferred, bases.Instance): - # Const, Tuple or other containers that inherit from - # `Instance` - continue - elif inferred.is_function: - iattrs = inferred.instance_attrs - else: - iattrs = inferred.locals - except AttributeError: - # XXX log error - continue - values = iattrs.setdefault(node.attrname, []) - if node in values: - continue - # get assign in __init__ first XXX useful ? - if ( - frame.name == "__init__" - and values - and values[0].frame().name != "__init__" - ): - values.insert(0, node) - else: - values.append(node) - except exceptions.InferenceError: - pass - - -def build_namespace_package_module(name, path): - return nodes.Module(name, doc="", path=path, package=True) - - -def parse(code, module_name="", path=None, apply_transforms=True): - """Parses a source string in order to obtain an astroid AST from it - - :param str code: The code for the module. - :param str module_name: The name for the module, if any - :param str path: The path for the module - :param bool apply_transforms: - Apply the transforms for the give code. Use it if you - don't want the default transforms to be applied. - """ - code = textwrap.dedent(code) - builder = AstroidBuilder(manager=MANAGER, apply_transforms=apply_transforms) - return builder.string_build(code, modname=module_name, path=path) - - -def _extract_expressions(node): - """Find expressions in a call to _TRANSIENT_FUNCTION and extract them. - - The function walks the AST recursively to search for expressions that - are wrapped into a call to _TRANSIENT_FUNCTION. If it finds such an - expression, it completely removes the function call node from the tree, - replacing it by the wrapped expression inside the parent. - - :param node: An astroid node. - :type node: astroid.bases.NodeNG - :yields: The sequence of wrapped expressions on the modified tree - expression can be found. - """ - if ( - isinstance(node, nodes.Call) - and isinstance(node.func, nodes.Name) - and node.func.name == _TRANSIENT_FUNCTION - ): - real_expr = node.args[0] - real_expr.parent = node.parent - # Search for node in all _astng_fields (the fields checked when - # get_children is called) of its parent. Some of those fields may - # be lists or tuples, in which case the elements need to be checked. - # When we find it, replace it by real_expr, so that the AST looks - # like no call to _TRANSIENT_FUNCTION ever took place. - for name in node.parent._astroid_fields: - child = getattr(node.parent, name) - if isinstance(child, (list, tuple)): - for idx, compound_child in enumerate(child): - if compound_child is node: - child[idx] = real_expr - elif child is node: - setattr(node.parent, name, real_expr) - yield real_expr - else: - for child in node.get_children(): - yield from _extract_expressions(child) - - -def _find_statement_by_line(node, line): - """Extracts the statement on a specific line from an AST. - - If the line number of node matches line, it will be returned; - otherwise its children are iterated and the function is called - recursively. - - :param node: An astroid node. - :type node: astroid.bases.NodeNG - :param line: The line number of the statement to extract. - :type line: int - :returns: The statement on the line, or None if no statement for the line - can be found. - :rtype: astroid.bases.NodeNG or None - """ - if isinstance(node, (nodes.ClassDef, nodes.FunctionDef)): - # This is an inaccuracy in the AST: the nodes that can be - # decorated do not carry explicit information on which line - # the actual definition (class/def), but .fromline seems to - # be close enough. - node_line = node.fromlineno - else: - node_line = node.lineno - - if node_line == line: - return node - - for child in node.get_children(): - result = _find_statement_by_line(child, line) - if result: - return result - - return None - - -def extract_node(code, module_name=""): - """Parses some Python code as a module and extracts a designated AST node. - - Statements: - To extract one or more statement nodes, append #@ to the end of the line - - Examples: - >>> def x(): - >>> def y(): - >>> return 1 #@ - - The return statement will be extracted. - - >>> class X(object): - >>> def meth(self): #@ - >>> pass - - The function object 'meth' will be extracted. - - Expressions: - To extract arbitrary expressions, surround them with the fake - function call __(...). After parsing, the surrounded expression - will be returned and the whole AST (accessible via the returned - node's parent attribute) will look like the function call was - never there in the first place. - - Examples: - >>> a = __(1) - - The const node will be extracted. - - >>> def x(d=__(foo.bar)): pass - - The node containing the default argument will be extracted. - - >>> def foo(a, b): - >>> return 0 < __(len(a)) < b - - The node containing the function call 'len' will be extracted. - - If no statements or expressions are selected, the last toplevel - statement will be returned. - - If the selected statement is a discard statement, (i.e. an expression - turned into a statement), the wrapped expression is returned instead. - - For convenience, singleton lists are unpacked. - - :param str code: A piece of Python code that is parsed as - a module. Will be passed through textwrap.dedent first. - :param str module_name: The name of the module. - :returns: The designated node from the parse tree, or a list of nodes. - :rtype: astroid.bases.NodeNG, or a list of nodes. - """ - - def _extract(node): - if isinstance(node, nodes.Expr): - return node.value - - return node - - requested_lines = [] - for idx, line in enumerate(code.splitlines()): - if line.strip().endswith(_STATEMENT_SELECTOR): - requested_lines.append(idx + 1) - - tree = parse(code, module_name=module_name) - if not tree.body: - raise ValueError("Empty tree, cannot extract from it") - - extracted = [] - if requested_lines: - extracted = [_find_statement_by_line(tree, line) for line in requested_lines] - - # Modifies the tree. - extracted.extend(_extract_expressions(tree)) - - if not extracted: - extracted.append(tree.body[-1]) - - extracted = [_extract(node) for node in extracted] - if len(extracted) == 1: - return extracted[0] - return extracted - - -def _parse_string(data, type_comments=True): - parser_module = get_parser_module(type_comments=type_comments) - try: - parsed = parser_module.parse(data + "\n", type_comments=type_comments) - except SyntaxError as exc: - # If the type annotations are misplaced for some reason, we do not want - # to fail the entire parsing of the file, so we need to retry the parsing without - # type comment support. - if exc.args[0] != MISPLACED_TYPE_ANNOTATION_ERROR or not type_comments: - raise - - parser_module = get_parser_module(type_comments=False) - parsed = parser_module.parse(data + "\n", type_comments=False) - return parsed, parser_module diff --git a/Jobs_Collections/venv/Lib/python3.8/site-packages/astroid/context.py b/Jobs_Collections/venv/Lib/python3.8/site-packages/astroid/context.py deleted file mode 100644 index 40cebf2..0000000 --- a/Jobs_Collections/venv/Lib/python3.8/site-packages/astroid/context.py +++ /dev/null @@ -1,179 +0,0 @@ -# Copyright (c) 2015-2016, 2018-2019 Claudiu Popa -# Copyright (c) 2015-2016 Ceridwen -# Copyright (c) 2018 Bryce Guinta -# Copyright (c) 2018 Nick Drozd - -# Licensed under the LGPL: https://www.gnu.org/licenses/old-licenses/lgpl-2.1.en.html -# For details: https://github.com/PyCQA/astroid/blob/master/COPYING.LESSER - -"""Various context related utilities, including inference and call contexts.""" -import contextlib -import pprint -from typing import Optional - - -class InferenceContext: - """Provide context for inference - - Store already inferred nodes to save time - Account for already visited nodes to infinite stop infinite recursion - """ - - __slots__ = ( - "path", - "lookupname", - "callcontext", - "boundnode", - "inferred", - "extra_context", - ) - - def __init__(self, path=None, inferred=None): - self.path = path or set() - """ - :type: set(tuple(NodeNG, optional(str))) - - Path of visited nodes and their lookupname - - Currently this key is ``(node, context.lookupname)`` - """ - self.lookupname = None - """ - :type: optional[str] - - The original name of the node - - e.g. - foo = 1 - The inference of 'foo' is nodes.Const(1) but the lookup name is 'foo' - """ - self.callcontext = None - """ - :type: optional[CallContext] - - The call arguments and keywords for the given context - """ - self.boundnode = None - """ - :type: optional[NodeNG] - - The bound node of the given context - - e.g. the bound node of object.__new__(cls) is the object node - """ - self.inferred = inferred or {} - """ - :type: dict(seq, seq) - - Inferred node contexts to their mapped results - Currently the key is ``(node, lookupname, callcontext, boundnode)`` - and the value is tuple of the inferred results - """ - self.extra_context = {} - """ - :type: dict(NodeNG, Context) - - Context that needs to be passed down through call stacks - for call arguments - """ - - def push(self, node): - """Push node into inference path - - :return: True if node is already in context path else False - :rtype: bool - - Allows one to see if the given node has already - been looked at for this inference context""" - name = self.lookupname - if (node, name) in self.path: - return True - - self.path.add((node, name)) - return False - - def clone(self): - """Clone inference path - - For example, each side of a binary operation (BinOp) - starts with the same context but diverge as each side is inferred - so the InferenceContext will need be cloned""" - # XXX copy lookupname/callcontext ? - clone = InferenceContext(self.path, inferred=self.inferred) - clone.callcontext = self.callcontext - clone.boundnode = self.boundnode - clone.extra_context = self.extra_context - return clone - - def cache_generator(self, key, generator): - """Cache result of generator into dictionary - - Used to cache inference results""" - results = [] - for result in generator: - results.append(result) - yield result - - self.inferred[key] = tuple(results) - - @contextlib.contextmanager - def restore_path(self): - path = set(self.path) - yield - self.path = path - - def __str__(self): - state = ( - "%s=%s" - % (field, pprint.pformat(getattr(self, field), width=80 - len(field))) - for field in self.__slots__ - ) - return "%s(%s)" % (type(self).__name__, ",\n ".join(state)) - - -class CallContext: - """Holds information for a call site.""" - - __slots__ = ("args", "keywords") - - def __init__(self, args, keywords=None): - """ - :param List[NodeNG] args: Call positional arguments - :param Union[List[nodes.Keyword], None] keywords: Call keywords - """ - self.args = args - if keywords: - keywords = [(arg.arg, arg.value) for arg in keywords] - else: - keywords = [] - self.keywords = keywords - - -def copy_context(context: Optional[InferenceContext]) -> InferenceContext: - """Clone a context if given, or return a fresh contexxt""" - if context is not None: - return context.clone() - - return InferenceContext() - - -def bind_context_to_node(context, node): - """Give a context a boundnode - to retrieve the correct function name or attribute value - with from further inference. - - Do not use an existing context since the boundnode could then - be incorrectly propagated higher up in the call stack. - - :param context: Context to use - :type context: Optional(context) - - :param node: Node to do name lookups from - :type node NodeNG: - - :returns: A new context - :rtype: InferenceContext - """ - context = copy_context(context) - context.boundnode = node - return context diff --git a/Jobs_Collections/venv/Lib/python3.8/site-packages/astroid/decorators.py b/Jobs_Collections/venv/Lib/python3.8/site-packages/astroid/decorators.py deleted file mode 100644 index 0f3632c..0000000 --- a/Jobs_Collections/venv/Lib/python3.8/site-packages/astroid/decorators.py +++ /dev/null @@ -1,142 +0,0 @@ -# Copyright (c) 2015-2016, 2018 Claudiu Popa -# Copyright (c) 2015-2016 Ceridwen -# Copyright (c) 2015 Florian Bruhin -# Copyright (c) 2016 Derek Gustafson -# Copyright (c) 2018 Nick Drozd -# Copyright (c) 2018 Tomas Gavenciak -# Copyright (c) 2018 Ashley Whetter -# Copyright (c) 2018 HoverHell -# Copyright (c) 2018 Bryce Guinta - -# Licensed under the LGPL: https://www.gnu.org/licenses/old-licenses/lgpl-2.1.en.html -# For details: https://github.com/PyCQA/astroid/blob/master/COPYING.LESSER - -""" A few useful function/method decorators.""" - -import functools - -import wrapt - -from astroid import context as contextmod -from astroid import exceptions -from astroid import util - - -@wrapt.decorator -def cached(func, instance, args, kwargs): - """Simple decorator to cache result of method calls without args.""" - cache = getattr(instance, "__cache", None) - if cache is None: - instance.__cache = cache = {} - try: - return cache[func] - except KeyError: - cache[func] = result = func(*args, **kwargs) - return result - - -class cachedproperty: - """ Provides a cached property equivalent to the stacking of - @cached and @property, but more efficient. - - After first usage, the becomes part of the object's - __dict__. Doing: - - del obj. empties the cache. - - Idea taken from the pyramid_ framework and the mercurial_ project. - - .. _pyramid: http://pypi.python.org/pypi/pyramid - .. _mercurial: http://pypi.python.org/pypi/Mercurial - """ - - __slots__ = ("wrapped",) - - def __init__(self, wrapped): - try: - wrapped.__name__ - except AttributeError as exc: - raise TypeError("%s must have a __name__ attribute" % wrapped) from exc - self.wrapped = wrapped - - @property - def __doc__(self): - doc = getattr(self.wrapped, "__doc__", None) - return "%s" % ( - "\n%s" % doc if doc else "" - ) - - def __get__(self, inst, objtype=None): - if inst is None: - return self - val = self.wrapped(inst) - setattr(inst, self.wrapped.__name__, val) - return val - - -def path_wrapper(func): - """return the given infer function wrapped to handle the path - - Used to stop inference if the node has already been looked - at for a given `InferenceContext` to prevent infinite recursion - """ - - @functools.wraps(func) - def wrapped(node, context=None, _func=func, **kwargs): - """wrapper function handling context""" - if context is None: - context = contextmod.InferenceContext() - if context.push(node): - return None - - yielded = set() - generator = _func(node, context, **kwargs) - try: - while True: - res = next(generator) - # unproxy only true instance, not const, tuple, dict... - if res.__class__.__name__ == "Instance": - ares = res._proxied - else: - ares = res - if ares not in yielded: - yield res - yielded.add(ares) - except StopIteration as error: - if error.args: - return error.args[0] - return None - - return wrapped - - -@wrapt.decorator -def yes_if_nothing_inferred(func, instance, args, kwargs): - generator = func(*args, **kwargs) - - try: - yield next(generator) - except StopIteration: - # generator is empty - yield util.Uninferable - return - - yield from generator - - -@wrapt.decorator -def raise_if_nothing_inferred(func, instance, args, kwargs): - generator = func(*args, **kwargs) - - try: - yield next(generator) - except StopIteration as error: - # generator is empty - if error.args: - # pylint: disable=not-a-mapping - raise exceptions.InferenceError(**error.args[0]) - raise exceptions.InferenceError( - "StopIteration raised without any error information." - ) - - yield from generator diff --git a/Jobs_Collections/venv/Lib/python3.8/site-packages/astroid/exceptions.py b/Jobs_Collections/venv/Lib/python3.8/site-packages/astroid/exceptions.py deleted file mode 100644 index 08e72c1..0000000 --- a/Jobs_Collections/venv/Lib/python3.8/site-packages/astroid/exceptions.py +++ /dev/null @@ -1,230 +0,0 @@ -# Copyright (c) 2007, 2009-2010, 2013 LOGILAB S.A. (Paris, FRANCE) -# Copyright (c) 2014 Google, Inc. -# Copyright (c) 2015-2018 Claudiu Popa -# Copyright (c) 2015-2016 Ceridwen -# Copyright (c) 2016 Derek Gustafson -# Copyright (c) 2018 Bryce Guinta - -# Licensed under the LGPL: https://www.gnu.org/licenses/old-licenses/lgpl-2.1.en.html -# For details: https://github.com/PyCQA/astroid/blob/master/COPYING.LESSER - -"""this module contains exceptions used in the astroid library -""" -from astroid import util - - -class AstroidError(Exception): - """base exception class for all astroid related exceptions - - AstroidError and its subclasses are structured, intended to hold - objects representing state when the exception is thrown. Field - values are passed to the constructor as keyword-only arguments. - Each subclass has its own set of standard fields, but use your - best judgment to decide whether a specific exception instance - needs more or fewer fields for debugging. Field values may be - used to lazily generate the error message: self.message.format() - will be called with the field names and values supplied as keyword - arguments. - """ - - def __init__(self, message="", **kws): - super().__init__(message) - self.message = message - for key, value in kws.items(): - setattr(self, key, value) - - def __str__(self): - return self.message.format(**vars(self)) - - -class AstroidBuildingError(AstroidError): - """exception class when we are unable to build an astroid representation - - Standard attributes: - modname: Name of the module that AST construction failed for. - error: Exception raised during construction. - """ - - def __init__(self, message="Failed to import module {modname}.", **kws): - super().__init__(message, **kws) - - -class AstroidImportError(AstroidBuildingError): - """Exception class used when a module can't be imported by astroid.""" - - -class TooManyLevelsError(AstroidImportError): - """Exception class which is raised when a relative import was beyond the top-level. - - Standard attributes: - level: The level which was attempted. - name: the name of the module on which the relative import was attempted. - """ - - level = None - name = None - - def __init__( - self, - message="Relative import with too many levels " "({level}) for module {name!r}", - **kws - ): - super().__init__(message, **kws) - - -class AstroidSyntaxError(AstroidBuildingError): - """Exception class used when a module can't be parsed.""" - - -class NoDefault(AstroidError): - """raised by function's `default_value` method when an argument has - no default value - - Standard attributes: - func: Function node. - name: Name of argument without a default. - """ - - func = None - name = None - - def __init__(self, message="{func!r} has no default for {name!r}.", **kws): - super().__init__(message, **kws) - - -class ResolveError(AstroidError): - """Base class of astroid resolution/inference error. - - ResolveError is not intended to be raised. - - Standard attributes: - context: InferenceContext object. - """ - - context = None - - -class MroError(ResolveError): - """Error raised when there is a problem with method resolution of a class. - - Standard attributes: - mros: A sequence of sequences containing ClassDef nodes. - cls: ClassDef node whose MRO resolution failed. - context: InferenceContext object. - """ - - mros = () - cls = None - - def __str__(self): - mro_names = ", ".join( - "({})".format(", ".join(b.name for b in m)) for m in self.mros - ) - return self.message.format(mros=mro_names, cls=self.cls) - - -class DuplicateBasesError(MroError): - """Error raised when there are duplicate bases in the same class bases.""" - - -class InconsistentMroError(MroError): - """Error raised when a class's MRO is inconsistent.""" - - -class SuperError(ResolveError): - """Error raised when there is a problem with a *super* call. - - Standard attributes: - *super_*: The Super instance that raised the exception. - context: InferenceContext object. - """ - - super_ = None - - def __str__(self): - return self.message.format(**vars(self.super_)) - - -class InferenceError(ResolveError): - """raised when we are unable to infer a node - - Standard attributes: - node: The node inference was called on. - context: InferenceContext object. - """ - - node = None - context = None - - def __init__(self, message="Inference failed for {node!r}.", **kws): - super().__init__(message, **kws) - - -# Why does this inherit from InferenceError rather than ResolveError? -# Changing it causes some inference tests to fail. -class NameInferenceError(InferenceError): - """Raised when a name lookup fails, corresponds to NameError. - - Standard attributes: - name: The name for which lookup failed, as a string. - scope: The node representing the scope in which the lookup occurred. - context: InferenceContext object. - """ - - name = None - scope = None - - def __init__(self, message="{name!r} not found in {scope!r}.", **kws): - super().__init__(message, **kws) - - -class AttributeInferenceError(ResolveError): - """Raised when an attribute lookup fails, corresponds to AttributeError. - - Standard attributes: - target: The node for which lookup failed. - attribute: The attribute for which lookup failed, as a string. - context: InferenceContext object. - """ - - target = None - attribute = None - - def __init__(self, message="{attribute!r} not found on {target!r}.", **kws): - super().__init__(message, **kws) - - -class UseInferenceDefault(Exception): - """exception to be raised in custom inference function to indicate that it - should go back to the default behaviour - """ - - -class _NonDeducibleTypeHierarchy(Exception): - """Raised when is_subtype / is_supertype can't deduce the relation between two types.""" - - -class AstroidIndexError(AstroidError): - """Raised when an Indexable / Mapping does not have an index / key.""" - - -class AstroidTypeError(AstroidError): - """Raised when a TypeError would be expected in Python code.""" - - -class InferenceOverwriteError(AstroidError): - """Raised when an inference tip is overwritten - - Currently only used for debugging. - """ - - -# Backwards-compatibility aliases -OperationError = util.BadOperationMessage -UnaryOperationError = util.BadUnaryOperationMessage -BinaryOperationError = util.BadBinaryOperationMessage - -SuperArgumentTypeError = SuperError -UnresolvableName = NameInferenceError -NotFoundError = AttributeInferenceError -AstroidBuildingException = AstroidBuildingError diff --git a/Jobs_Collections/venv/Lib/python3.8/site-packages/astroid/helpers.py b/Jobs_Collections/venv/Lib/python3.8/site-packages/astroid/helpers.py deleted file mode 100644 index 1c84651..0000000 --- a/Jobs_Collections/venv/Lib/python3.8/site-packages/astroid/helpers.py +++ /dev/null @@ -1,282 +0,0 @@ -# Copyright (c) 2015-2020 Claudiu Popa -# Copyright (c) 2015-2016 Ceridwen -# Copyright (c) 2018 Bryce Guinta - -# Licensed under the LGPL: https://www.gnu.org/licenses/old-licenses/lgpl-2.1.en.html -# For details: https://github.com/PyCQA/astroid/blob/master/COPYING.LESSER - - -""" -Various helper utilities. -""" - -import builtins as builtins_mod - -from astroid import bases -from astroid import context as contextmod -from astroid import exceptions -from astroid import manager -from astroid import nodes -from astroid import raw_building -from astroid import scoped_nodes -from astroid import util - - -BUILTINS = builtins_mod.__name__ - - -def _build_proxy_class(cls_name, builtins): - proxy = raw_building.build_class(cls_name) - proxy.parent = builtins - return proxy - - -def _function_type(function, builtins): - if isinstance(function, scoped_nodes.Lambda): - if function.root().name == BUILTINS: - cls_name = "builtin_function_or_method" - else: - cls_name = "function" - elif isinstance(function, bases.BoundMethod): - cls_name = "method" - elif isinstance(function, bases.UnboundMethod): - cls_name = "function" - return _build_proxy_class(cls_name, builtins) - - -def _object_type(node, context=None): - astroid_manager = manager.AstroidManager() - builtins = astroid_manager.builtins_module - context = context or contextmod.InferenceContext() - - for inferred in node.infer(context=context): - if isinstance(inferred, scoped_nodes.ClassDef): - if inferred.newstyle: - metaclass = inferred.metaclass(context=context) - if metaclass: - yield metaclass - continue - yield builtins.getattr("type")[0] - elif isinstance(inferred, (scoped_nodes.Lambda, bases.UnboundMethod)): - yield _function_type(inferred, builtins) - elif isinstance(inferred, scoped_nodes.Module): - yield _build_proxy_class("module", builtins) - else: - yield inferred._proxied - - -def object_type(node, context=None): - """Obtain the type of the given node - - This is used to implement the ``type`` builtin, which means that it's - used for inferring type calls, as well as used in a couple of other places - in the inference. - The node will be inferred first, so this function can support all - sorts of objects, as long as they support inference. - """ - - try: - types = set(_object_type(node, context)) - except exceptions.InferenceError: - return util.Uninferable - if len(types) > 1 or not types: - return util.Uninferable - return list(types)[0] - - -def _object_type_is_subclass(obj_type, class_or_seq, context=None): - if not isinstance(class_or_seq, (tuple, list)): - class_seq = (class_or_seq,) - else: - class_seq = class_or_seq - - if obj_type is util.Uninferable: - return util.Uninferable - - # Instances are not types - class_seq = [ - item if not isinstance(item, bases.Instance) else util.Uninferable - for item in class_seq - ] - # strict compatibility with issubclass - # issubclass(type, (object, 1)) evaluates to true - # issubclass(object, (1, type)) raises TypeError - for klass in class_seq: - if klass is util.Uninferable: - raise exceptions.AstroidTypeError("arg 2 must be a type or tuple of types") - - for obj_subclass in obj_type.mro(): - if obj_subclass == klass: - return True - return False - - -def object_isinstance(node, class_or_seq, context=None): - """Check if a node 'isinstance' any node in class_or_seq - - :param node: A given node - :param class_or_seq: Union[nodes.NodeNG, Sequence[nodes.NodeNG]] - :rtype: bool - - :raises AstroidTypeError: if the given ``classes_or_seq`` are not types - """ - obj_type = object_type(node, context) - if obj_type is util.Uninferable: - return util.Uninferable - return _object_type_is_subclass(obj_type, class_or_seq, context=context) - - -def object_issubclass(node, class_or_seq, context=None): - """Check if a type is a subclass of any node in class_or_seq - - :param node: A given node - :param class_or_seq: Union[Nodes.NodeNG, Sequence[nodes.NodeNG]] - :rtype: bool - - :raises AstroidTypeError: if the given ``classes_or_seq`` are not types - :raises AstroidError: if the type of the given node cannot be inferred - or its type's mro doesn't work - """ - if not isinstance(node, nodes.ClassDef): - raise TypeError("{node} needs to be a ClassDef node".format(node=node)) - return _object_type_is_subclass(node, class_or_seq, context=context) - - -def safe_infer(node, context=None): - """Return the inferred value for the given node. - - Return None if inference failed or if there is some ambiguity (more than - one node has been inferred). - """ - try: - inferit = node.infer(context=context) - value = next(inferit) - except exceptions.InferenceError: - return None - try: - next(inferit) - return None # None if there is ambiguity on the inferred node - except exceptions.InferenceError: - return None # there is some kind of ambiguity - except StopIteration: - return value - - -def has_known_bases(klass, context=None): - """Return true if all base classes of a class could be inferred.""" - try: - return klass._all_bases_known - except AttributeError: - pass - for base in klass.bases: - result = safe_infer(base, context=context) - # TODO: check for A->B->A->B pattern in class structure too? - if ( - not isinstance(result, scoped_nodes.ClassDef) - or result is klass - or not has_known_bases(result, context=context) - ): - klass._all_bases_known = False - return False - klass._all_bases_known = True - return True - - -def _type_check(type1, type2): - if not all(map(has_known_bases, (type1, type2))): - raise exceptions._NonDeducibleTypeHierarchy - - if not all([type1.newstyle, type2.newstyle]): - return False - try: - return type1 in type2.mro()[:-1] - except exceptions.MroError: - # The MRO is invalid. - raise exceptions._NonDeducibleTypeHierarchy - - -def is_subtype(type1, type2): - """Check if *type1* is a subtype of *type2*.""" - return _type_check(type1=type2, type2=type1) - - -def is_supertype(type1, type2): - """Check if *type2* is a supertype of *type1*.""" - return _type_check(type1, type2) - - -def class_instance_as_index(node): - """Get the value as an index for the given instance. - - If an instance provides an __index__ method, then it can - be used in some scenarios where an integer is expected, - for instance when multiplying or subscripting a list. - """ - context = contextmod.InferenceContext() - context.callcontext = contextmod.CallContext(args=[node]) - - try: - for inferred in node.igetattr("__index__", context=context): - if not isinstance(inferred, bases.BoundMethod): - continue - - for result in inferred.infer_call_result(node, context=context): - if isinstance(result, nodes.Const) and isinstance(result.value, int): - return result - except exceptions.InferenceError: - pass - return None - - -def object_len(node, context=None): - """Infer length of given node object - - :param Union[nodes.ClassDef, nodes.Instance] node: - :param node: Node to infer length of - - :raises AstroidTypeError: If an invalid node is returned - from __len__ method or no __len__ method exists - :raises InferenceError: If the given node cannot be inferred - or if multiple nodes are inferred - :rtype int: Integer length of node - """ - # pylint: disable=import-outside-toplevel; circular import - from astroid.objects import FrozenSet - - inferred_node = safe_infer(node, context=context) - if inferred_node is None or inferred_node is util.Uninferable: - raise exceptions.InferenceError(node=node) - if isinstance(inferred_node, nodes.Const) and isinstance( - inferred_node.value, (bytes, str) - ): - return len(inferred_node.value) - if isinstance(inferred_node, (nodes.List, nodes.Set, nodes.Tuple, FrozenSet)): - return len(inferred_node.elts) - if isinstance(inferred_node, nodes.Dict): - return len(inferred_node.items) - - node_type = object_type(inferred_node, context=context) - if not node_type: - raise exceptions.InferenceError(node=node) - - try: - len_call = next(node_type.igetattr("__len__", context=context)) - except exceptions.AttributeInferenceError: - raise exceptions.AstroidTypeError( - "object of type '{}' has no len()".format(node_type.pytype()) - ) - - result_of_len = next(len_call.infer_call_result(node, context)) - if ( - isinstance(result_of_len, nodes.Const) - and result_of_len.pytype() == "builtins.int" - ): - return result_of_len.value - if isinstance(result_of_len, bases.Instance) and result_of_len.is_subtype_of( - "builtins.int" - ): - # Fake a result as we don't know the arguments of the instance call. - return 0 - raise exceptions.AstroidTypeError( - "'{}' object cannot be interpreted as an integer".format(result_of_len) - ) diff --git a/Jobs_Collections/venv/Lib/python3.8/site-packages/astroid/inference.py b/Jobs_Collections/venv/Lib/python3.8/site-packages/astroid/inference.py deleted file mode 100644 index bc3e1f9..0000000 --- a/Jobs_Collections/venv/Lib/python3.8/site-packages/astroid/inference.py +++ /dev/null @@ -1,994 +0,0 @@ -# -*- coding: utf-8 -*- -# Copyright (c) 2006-2011, 2013-2014 LOGILAB S.A. (Paris, FRANCE) -# Copyright (c) 2012 FELD Boris -# Copyright (c) 2013-2014 Google, Inc. -# Copyright (c) 2014-2020 Claudiu Popa -# Copyright (c) 2014 Eevee (Alex Munroe) -# Copyright (c) 2015-2016 Ceridwen -# Copyright (c) 2015 Dmitry Pribysh -# Copyright (c) 2016 Jakub Wilk -# Copyright (c) 2017 Michaล‚ Masล‚owski -# Copyright (c) 2017 Calen Pennington -# Copyright (c) 2017 ลukasz Rogalski -# Copyright (c) 2018-2019 Nick Drozd -# Copyright (c) 2018 Daniel Martin -# Copyright (c) 2018 Ville Skyttรค -# Copyright (c) 2018 Bryce Guinta -# Copyright (c) 2018 Ashley Whetter -# Copyright (c) 2018 HoverHell -# Copyright (c) 2020 Leandro T. C. Melo - -# Licensed under the LGPL: https://www.gnu.org/licenses/old-licenses/lgpl-2.1.en.html -# For details: https://github.com/PyCQA/astroid/blob/master/COPYING.LESSER - -"""this module contains a set of functions to handle inference on astroid trees -""" - -import functools -import itertools -import operator - -import wrapt -from astroid import bases -from astroid import context as contextmod -from astroid import exceptions -from astroid import decorators -from astroid import helpers -from astroid import manager -from astroid import nodes -from astroid.interpreter import dunder_lookup -from astroid import protocols -from astroid import util - - -MANAGER = manager.AstroidManager() -# Prevents circular imports -objects = util.lazy_import("objects") - - -# .infer method ############################################################### - - -def infer_end(self, context=None): - """Inference's end for nodes that yield themselves on inference - - These are objects for which inference does not have any semantic, - such as Module or Consts. - """ - yield self - - -nodes.Module._infer = infer_end -nodes.ClassDef._infer = infer_end -nodes.Lambda._infer = infer_end -nodes.Const._infer = infer_end -nodes.Slice._infer = infer_end - - -def _infer_sequence_helper(node, context=None): - """Infer all values based on _BaseContainer.elts""" - values = [] - - for elt in node.elts: - if isinstance(elt, nodes.Starred): - starred = helpers.safe_infer(elt.value, context) - if not starred: - raise exceptions.InferenceError(node=node, context=context) - if not hasattr(starred, "elts"): - raise exceptions.InferenceError(node=node, context=context) - values.extend(_infer_sequence_helper(starred)) - elif isinstance(elt, nodes.NamedExpr): - value = helpers.safe_infer(elt.value, context) - if not value: - raise exceptions.InferenceError(node=node, context=context) - values.append(value) - else: - values.append(elt) - return values - - -@decorators.raise_if_nothing_inferred -def infer_sequence(self, context=None): - has_starred_named_expr = any( - isinstance(e, (nodes.Starred, nodes.NamedExpr)) for e in self.elts - ) - if has_starred_named_expr: - values = _infer_sequence_helper(self, context) - new_seq = type(self)( - lineno=self.lineno, col_offset=self.col_offset, parent=self.parent - ) - new_seq.postinit(values) - - yield new_seq - else: - yield self - - -nodes.List._infer = infer_sequence -nodes.Tuple._infer = infer_sequence -nodes.Set._infer = infer_sequence - - -def infer_map(self, context=None): - if not any(isinstance(k, nodes.DictUnpack) for k, _ in self.items): - yield self - else: - items = _infer_map(self, context) - new_seq = type(self)(self.lineno, self.col_offset, self.parent) - new_seq.postinit(list(items.items())) - yield new_seq - - -def _update_with_replacement(lhs_dict, rhs_dict): - """Delete nodes that equate to duplicate keys - - Since an astroid node doesn't 'equal' another node with the same value, - this function uses the as_string method to make sure duplicate keys - don't get through - - Note that both the key and the value are astroid nodes - - Fixes issue with DictUnpack causing duplicte keys - in inferred Dict items - - :param dict(nodes.NodeNG, nodes.NodeNG) lhs_dict: Dictionary to 'merge' nodes into - :param dict(nodes.NodeNG, nodes.NodeNG) rhs_dict: Dictionary with nodes to pull from - :return dict(nodes.NodeNG, nodes.NodeNG): merged dictionary of nodes - """ - combined_dict = itertools.chain(lhs_dict.items(), rhs_dict.items()) - # Overwrite keys which have the same string values - string_map = {key.as_string(): (key, value) for key, value in combined_dict} - # Return to dictionary - return dict(string_map.values()) - - -def _infer_map(node, context): - """Infer all values based on Dict.items""" - values = {} - for name, value in node.items: - if isinstance(name, nodes.DictUnpack): - double_starred = helpers.safe_infer(value, context) - if not double_starred: - raise exceptions.InferenceError - if not isinstance(double_starred, nodes.Dict): - raise exceptions.InferenceError(node=node, context=context) - unpack_items = _infer_map(double_starred, context) - values = _update_with_replacement(values, unpack_items) - else: - key = helpers.safe_infer(name, context=context) - value = helpers.safe_infer(value, context=context) - if any(not elem for elem in (key, value)): - raise exceptions.InferenceError(node=node, context=context) - values = _update_with_replacement(values, {key: value}) - return values - - -nodes.Dict._infer = infer_map - - -def _higher_function_scope(node): - """ Search for the first function which encloses the given - scope. This can be used for looking up in that function's - scope, in case looking up in a lower scope for a particular - name fails. - - :param node: A scope node. - :returns: - ``None``, if no parent function scope was found, - otherwise an instance of :class:`astroid.scoped_nodes.Function`, - which encloses the given node. - """ - current = node - while current.parent and not isinstance(current.parent, nodes.FunctionDef): - current = current.parent - if current and current.parent: - return current.parent - return None - - -def infer_name(self, context=None): - """infer a Name: use name lookup rules""" - frame, stmts = self.lookup(self.name) - if not stmts: - # Try to see if the name is enclosed in a nested function - # and use the higher (first function) scope for searching. - parent_function = _higher_function_scope(self.scope()) - if parent_function: - _, stmts = parent_function.lookup(self.name) - - if not stmts: - raise exceptions.NameInferenceError( - name=self.name, scope=self.scope(), context=context - ) - context = contextmod.copy_context(context) - context.lookupname = self.name - return bases._infer_stmts(stmts, context, frame) - - -# pylint: disable=no-value-for-parameter -nodes.Name._infer = decorators.raise_if_nothing_inferred( - decorators.path_wrapper(infer_name) -) -nodes.AssignName.infer_lhs = infer_name # won't work with a path wrapper - - -@decorators.raise_if_nothing_inferred -@decorators.path_wrapper -def infer_call(self, context=None): - """infer a Call node by trying to guess what the function returns""" - callcontext = contextmod.copy_context(context) - callcontext.callcontext = contextmod.CallContext( - args=self.args, keywords=self.keywords - ) - callcontext.boundnode = None - if context is not None: - callcontext.extra_context = _populate_context_lookup(self, context.clone()) - - for callee in self.func.infer(context): - if callee is util.Uninferable: - yield callee - continue - try: - if hasattr(callee, "infer_call_result"): - yield from callee.infer_call_result(caller=self, context=callcontext) - except exceptions.InferenceError: - continue - return dict(node=self, context=context) - - -nodes.Call._infer = infer_call - - -@decorators.raise_if_nothing_inferred -@decorators.path_wrapper -def infer_import(self, context=None, asname=True): - """infer an Import node: return the imported module/object""" - name = context.lookupname - if name is None: - raise exceptions.InferenceError(node=self, context=context) - - try: - if asname: - yield self.do_import_module(self.real_name(name)) - else: - yield self.do_import_module(name) - except exceptions.AstroidBuildingError as exc: - raise exceptions.InferenceError(node=self, context=context) from exc - - -nodes.Import._infer = infer_import - - -@decorators.raise_if_nothing_inferred -@decorators.path_wrapper -def infer_import_from(self, context=None, asname=True): - """infer a ImportFrom node: return the imported module/object""" - name = context.lookupname - if name is None: - raise exceptions.InferenceError(node=self, context=context) - if asname: - name = self.real_name(name) - - try: - module = self.do_import_module() - except exceptions.AstroidBuildingError as exc: - raise exceptions.InferenceError(node=self, context=context) from exc - - try: - context = contextmod.copy_context(context) - context.lookupname = name - stmts = module.getattr(name, ignore_locals=module is self.root()) - return bases._infer_stmts(stmts, context) - except exceptions.AttributeInferenceError as error: - raise exceptions.InferenceError( - error.message, target=self, attribute=name, context=context - ) from error - - -nodes.ImportFrom._infer = infer_import_from - - -def infer_attribute(self, context=None): - """infer an Attribute node by using getattr on the associated object""" - for owner in self.expr.infer(context): - if owner is util.Uninferable: - yield owner - continue - - if context and context.boundnode: - # This handles the situation where the attribute is accessed through a subclass - # of a base class and the attribute is defined at the base class's level, - # by taking in consideration a redefinition in the subclass. - if isinstance(owner, bases.Instance) and isinstance( - context.boundnode, bases.Instance - ): - try: - if helpers.is_subtype( - helpers.object_type(context.boundnode), - helpers.object_type(owner), - ): - owner = context.boundnode - except exceptions._NonDeducibleTypeHierarchy: - # Can't determine anything useful. - pass - elif not context: - context = contextmod.InferenceContext() - - try: - context.boundnode = owner - yield from owner.igetattr(self.attrname, context) - except ( - exceptions.AttributeInferenceError, - exceptions.InferenceError, - AttributeError, - ): - pass - finally: - context.boundnode = None - return dict(node=self, context=context) - - -nodes.Attribute._infer = decorators.raise_if_nothing_inferred( - decorators.path_wrapper(infer_attribute) -) -# won't work with a path wrapper -nodes.AssignAttr.infer_lhs = decorators.raise_if_nothing_inferred(infer_attribute) - - -@decorators.raise_if_nothing_inferred -@decorators.path_wrapper -def infer_global(self, context=None): - if context.lookupname is None: - raise exceptions.InferenceError(node=self, context=context) - try: - return bases._infer_stmts(self.root().getattr(context.lookupname), context) - except exceptions.AttributeInferenceError as error: - raise exceptions.InferenceError( - error.message, target=self, attribute=context.lookupname, context=context - ) from error - - -nodes.Global._infer = infer_global - - -_SUBSCRIPT_SENTINEL = object() - - -def infer_subscript(self, context=None): - """Inference for subscripts - - We're understanding if the index is a Const - or a slice, passing the result of inference - to the value's `getitem` method, which should - handle each supported index type accordingly. - """ - - found_one = False - for value in self.value.infer(context): - if value is util.Uninferable: - yield util.Uninferable - return None - for index in self.slice.infer(context): - if index is util.Uninferable: - yield util.Uninferable - return None - - # Try to deduce the index value. - index_value = _SUBSCRIPT_SENTINEL - if value.__class__ == bases.Instance: - index_value = index - elif index.__class__ == bases.Instance: - instance_as_index = helpers.class_instance_as_index(index) - if instance_as_index: - index_value = instance_as_index - else: - index_value = index - - if index_value is _SUBSCRIPT_SENTINEL: - raise exceptions.InferenceError(node=self, context=context) - - try: - assigned = value.getitem(index_value, context) - except ( - exceptions.AstroidTypeError, - exceptions.AstroidIndexError, - exceptions.AttributeInferenceError, - AttributeError, - ) as exc: - raise exceptions.InferenceError(node=self, context=context) from exc - - # Prevent inferring if the inferred subscript - # is the same as the original subscripted object. - if self is assigned or assigned is util.Uninferable: - yield util.Uninferable - return None - yield from assigned.infer(context) - found_one = True - - if found_one: - return dict(node=self, context=context) - return None - - -nodes.Subscript._infer = decorators.raise_if_nothing_inferred( - decorators.path_wrapper(infer_subscript) -) -nodes.Subscript.infer_lhs = decorators.raise_if_nothing_inferred(infer_subscript) - - -@decorators.raise_if_nothing_inferred -@decorators.path_wrapper -def _infer_boolop(self, context=None): - """Infer a boolean operation (and / or / not). - - The function will calculate the boolean operation - for all pairs generated through inference for each component - node. - """ - values = self.values - if self.op == "or": - predicate = operator.truth - else: - predicate = operator.not_ - - try: - values = [value.infer(context=context) for value in values] - except exceptions.InferenceError: - yield util.Uninferable - return None - - for pair in itertools.product(*values): - if any(item is util.Uninferable for item in pair): - # Can't infer the final result, just yield Uninferable. - yield util.Uninferable - continue - - bool_values = [item.bool_value() for item in pair] - if any(item is util.Uninferable for item in bool_values): - # Can't infer the final result, just yield Uninferable. - yield util.Uninferable - continue - - # Since the boolean operations are short circuited operations, - # this code yields the first value for which the predicate is True - # and if no value respected the predicate, then the last value will - # be returned (or Uninferable if there was no last value). - # This is conforming to the semantics of `and` and `or`: - # 1 and 0 -> 1 - # 0 and 1 -> 0 - # 1 or 0 -> 1 - # 0 or 1 -> 1 - value = util.Uninferable - for value, bool_value in zip(pair, bool_values): - if predicate(bool_value): - yield value - break - else: - yield value - - return dict(node=self, context=context) - - -nodes.BoolOp._infer = _infer_boolop - - -# UnaryOp, BinOp and AugAssign inferences - - -def _filter_operation_errors(self, infer_callable, context, error): - for result in infer_callable(self, context): - if isinstance(result, error): - # For the sake of .infer(), we don't care about operation - # errors, which is the job of pylint. So return something - # which shows that we can't infer the result. - yield util.Uninferable - else: - yield result - - -def _infer_unaryop(self, context=None): - """Infer what an UnaryOp should return when evaluated.""" - for operand in self.operand.infer(context): - try: - yield operand.infer_unary_op(self.op) - except TypeError as exc: - # The operand doesn't support this operation. - yield util.BadUnaryOperationMessage(operand, self.op, exc) - except AttributeError as exc: - meth = protocols.UNARY_OP_METHOD[self.op] - if meth is None: - # `not node`. Determine node's boolean - # value and negate its result, unless it is - # Uninferable, which will be returned as is. - bool_value = operand.bool_value() - if bool_value is not util.Uninferable: - yield nodes.const_factory(not bool_value) - else: - yield util.Uninferable - else: - if not isinstance(operand, (bases.Instance, nodes.ClassDef)): - # The operation was used on something which - # doesn't support it. - yield util.BadUnaryOperationMessage(operand, self.op, exc) - continue - - try: - try: - methods = dunder_lookup.lookup(operand, meth) - except exceptions.AttributeInferenceError: - yield util.BadUnaryOperationMessage(operand, self.op, exc) - continue - - meth = methods[0] - inferred = next(meth.infer(context=context)) - if inferred is util.Uninferable or not inferred.callable(): - continue - - context = contextmod.copy_context(context) - context.callcontext = contextmod.CallContext(args=[operand]) - call_results = inferred.infer_call_result(self, context=context) - result = next(call_results, None) - if result is None: - # Failed to infer, return the same type. - yield operand - else: - yield result - except exceptions.AttributeInferenceError as exc: - # The unary operation special method was not found. - yield util.BadUnaryOperationMessage(operand, self.op, exc) - except exceptions.InferenceError: - yield util.Uninferable - - -@decorators.raise_if_nothing_inferred -@decorators.path_wrapper -def infer_unaryop(self, context=None): - """Infer what an UnaryOp should return when evaluated.""" - yield from _filter_operation_errors( - self, _infer_unaryop, context, util.BadUnaryOperationMessage - ) - return dict(node=self, context=context) - - -nodes.UnaryOp._infer_unaryop = _infer_unaryop -nodes.UnaryOp._infer = infer_unaryop - - -def _is_not_implemented(const): - """Check if the given const node is NotImplemented.""" - return isinstance(const, nodes.Const) and const.value is NotImplemented - - -def _invoke_binop_inference(instance, opnode, op, other, context, method_name): - """Invoke binary operation inference on the given instance.""" - methods = dunder_lookup.lookup(instance, method_name) - context = contextmod.bind_context_to_node(context, instance) - method = methods[0] - inferred = next(method.infer(context=context)) - if inferred is util.Uninferable: - raise exceptions.InferenceError - return instance.infer_binary_op(opnode, op, other, context, inferred) - - -def _aug_op(instance, opnode, op, other, context, reverse=False): - """Get an inference callable for an augmented binary operation.""" - method_name = protocols.AUGMENTED_OP_METHOD[op] - return functools.partial( - _invoke_binop_inference, - instance=instance, - op=op, - opnode=opnode, - other=other, - context=context, - method_name=method_name, - ) - - -def _bin_op(instance, opnode, op, other, context, reverse=False): - """Get an inference callable for a normal binary operation. - - If *reverse* is True, then the reflected method will be used instead. - """ - if reverse: - method_name = protocols.REFLECTED_BIN_OP_METHOD[op] - else: - method_name = protocols.BIN_OP_METHOD[op] - return functools.partial( - _invoke_binop_inference, - instance=instance, - op=op, - opnode=opnode, - other=other, - context=context, - method_name=method_name, - ) - - -def _get_binop_contexts(context, left, right): - """Get contexts for binary operations. - - This will return two inference contexts, the first one - for x.__op__(y), the other one for y.__rop__(x), where - only the arguments are inversed. - """ - # The order is important, since the first one should be - # left.__op__(right). - for arg in (right, left): - new_context = context.clone() - new_context.callcontext = contextmod.CallContext(args=[arg]) - new_context.boundnode = None - yield new_context - - -def _same_type(type1, type2): - """Check if type1 is the same as type2.""" - return type1.qname() == type2.qname() - - -def _get_binop_flow( - left, left_type, binary_opnode, right, right_type, context, reverse_context -): - """Get the flow for binary operations. - - The rules are a bit messy: - - * if left and right have the same type, then only one - method will be called, left.__op__(right) - * if left and right are unrelated typewise, then first - left.__op__(right) is tried and if this does not exist - or returns NotImplemented, then right.__rop__(left) is tried. - * if left is a subtype of right, then only left.__op__(right) - is tried. - * if left is a supertype of right, then right.__rop__(left) - is first tried and then left.__op__(right) - """ - op = binary_opnode.op - if _same_type(left_type, right_type): - methods = [_bin_op(left, binary_opnode, op, right, context)] - elif helpers.is_subtype(left_type, right_type): - methods = [_bin_op(left, binary_opnode, op, right, context)] - elif helpers.is_supertype(left_type, right_type): - methods = [ - _bin_op(right, binary_opnode, op, left, reverse_context, reverse=True), - _bin_op(left, binary_opnode, op, right, context), - ] - else: - methods = [ - _bin_op(left, binary_opnode, op, right, context), - _bin_op(right, binary_opnode, op, left, reverse_context, reverse=True), - ] - return methods - - -def _get_aug_flow( - left, left_type, aug_opnode, right, right_type, context, reverse_context -): - """Get the flow for augmented binary operations. - - The rules are a bit messy: - - * if left and right have the same type, then left.__augop__(right) - is first tried and then left.__op__(right). - * if left and right are unrelated typewise, then - left.__augop__(right) is tried, then left.__op__(right) - is tried and then right.__rop__(left) is tried. - * if left is a subtype of right, then left.__augop__(right) - is tried and then left.__op__(right). - * if left is a supertype of right, then left.__augop__(right) - is tried, then right.__rop__(left) and then - left.__op__(right) - """ - bin_op = aug_opnode.op.strip("=") - aug_op = aug_opnode.op - if _same_type(left_type, right_type): - methods = [ - _aug_op(left, aug_opnode, aug_op, right, context), - _bin_op(left, aug_opnode, bin_op, right, context), - ] - elif helpers.is_subtype(left_type, right_type): - methods = [ - _aug_op(left, aug_opnode, aug_op, right, context), - _bin_op(left, aug_opnode, bin_op, right, context), - ] - elif helpers.is_supertype(left_type, right_type): - methods = [ - _aug_op(left, aug_opnode, aug_op, right, context), - _bin_op(right, aug_opnode, bin_op, left, reverse_context, reverse=True), - _bin_op(left, aug_opnode, bin_op, right, context), - ] - else: - methods = [ - _aug_op(left, aug_opnode, aug_op, right, context), - _bin_op(left, aug_opnode, bin_op, right, context), - _bin_op(right, aug_opnode, bin_op, left, reverse_context, reverse=True), - ] - return methods - - -def _infer_binary_operation(left, right, binary_opnode, context, flow_factory): - """Infer a binary operation between a left operand and a right operand - - This is used by both normal binary operations and augmented binary - operations, the only difference is the flow factory used. - """ - - context, reverse_context = _get_binop_contexts(context, left, right) - left_type = helpers.object_type(left) - right_type = helpers.object_type(right) - methods = flow_factory( - left, left_type, binary_opnode, right, right_type, context, reverse_context - ) - for method in methods: - try: - results = list(method()) - except AttributeError: - continue - except exceptions.AttributeInferenceError: - continue - except exceptions.InferenceError: - yield util.Uninferable - return - else: - if any(result is util.Uninferable for result in results): - yield util.Uninferable - return - - if all(map(_is_not_implemented, results)): - continue - not_implemented = sum( - 1 for result in results if _is_not_implemented(result) - ) - if not_implemented and not_implemented != len(results): - # Can't infer yet what this is. - yield util.Uninferable - return - - yield from results - return - # The operation doesn't seem to be supported so let the caller know about it - yield util.BadBinaryOperationMessage(left_type, binary_opnode.op, right_type) - - -def _infer_binop(self, context): - """Binary operation inference logic.""" - left = self.left - right = self.right - - # we use two separate contexts for evaluating lhs and rhs because - # 1. evaluating lhs may leave some undesired entries in context.path - # which may not let us infer right value of rhs - context = context or contextmod.InferenceContext() - lhs_context = contextmod.copy_context(context) - rhs_context = contextmod.copy_context(context) - lhs_iter = left.infer(context=lhs_context) - rhs_iter = right.infer(context=rhs_context) - for lhs, rhs in itertools.product(lhs_iter, rhs_iter): - if any(value is util.Uninferable for value in (rhs, lhs)): - # Don't know how to process this. - yield util.Uninferable - return - - try: - yield from _infer_binary_operation(lhs, rhs, self, context, _get_binop_flow) - except exceptions._NonDeducibleTypeHierarchy: - yield util.Uninferable - - -@decorators.yes_if_nothing_inferred -@decorators.path_wrapper -def infer_binop(self, context=None): - return _filter_operation_errors( - self, _infer_binop, context, util.BadBinaryOperationMessage - ) - - -nodes.BinOp._infer_binop = _infer_binop -nodes.BinOp._infer = infer_binop - - -def _infer_augassign(self, context=None): - """Inference logic for augmented binary operations.""" - if context is None: - context = contextmod.InferenceContext() - - rhs_context = context.clone() - - lhs_iter = self.target.infer_lhs(context=context) - rhs_iter = self.value.infer(context=rhs_context) - for lhs, rhs in itertools.product(lhs_iter, rhs_iter): - if any(value is util.Uninferable for value in (rhs, lhs)): - # Don't know how to process this. - yield util.Uninferable - return - - try: - yield from _infer_binary_operation( - left=lhs, - right=rhs, - binary_opnode=self, - context=context, - flow_factory=_get_aug_flow, - ) - except exceptions._NonDeducibleTypeHierarchy: - yield util.Uninferable - - -@decorators.raise_if_nothing_inferred -@decorators.path_wrapper -def infer_augassign(self, context=None): - return _filter_operation_errors( - self, _infer_augassign, context, util.BadBinaryOperationMessage - ) - - -nodes.AugAssign._infer_augassign = _infer_augassign -nodes.AugAssign._infer = infer_augassign - -# End of binary operation inference. - - -@decorators.raise_if_nothing_inferred -def infer_arguments(self, context=None): - name = context.lookupname - if name is None: - raise exceptions.InferenceError(node=self, context=context) - return protocols._arguments_infer_argname(self, name, context) - - -nodes.Arguments._infer = infer_arguments - - -@decorators.raise_if_nothing_inferred -@decorators.path_wrapper -def infer_assign(self, context=None): - """infer a AssignName/AssignAttr: need to inspect the RHS part of the - assign node - """ - if isinstance(self.parent, nodes.AugAssign): - return self.parent.infer(context) - - stmts = list(self.assigned_stmts(context=context)) - return bases._infer_stmts(stmts, context) - - -nodes.AssignName._infer = infer_assign -nodes.AssignAttr._infer = infer_assign - - -@decorators.raise_if_nothing_inferred -@decorators.path_wrapper -def infer_empty_node(self, context=None): - if not self.has_underlying_object(): - yield util.Uninferable - else: - try: - yield from MANAGER.infer_ast_from_something(self.object, context=context) - except exceptions.AstroidError: - yield util.Uninferable - - -nodes.EmptyNode._infer = infer_empty_node - - -@decorators.raise_if_nothing_inferred -def infer_index(self, context=None): - return self.value.infer(context) - - -nodes.Index._infer = infer_index - -# TODO: move directly into bases.Instance when the dependency hell -# will be solved. -def instance_getitem(self, index, context=None): - # Rewrap index to Const for this case - new_context = contextmod.bind_context_to_node(context, self) - if not context: - context = new_context - - # Create a new callcontext for providing index as an argument. - new_context.callcontext = contextmod.CallContext(args=[index]) - - method = next(self.igetattr("__getitem__", context=context), None) - if not isinstance(method, bases.BoundMethod): - raise exceptions.InferenceError( - "Could not find __getitem__ for {node!r}.", node=self, context=context - ) - - return next(method.infer_call_result(self, new_context)) - - -bases.Instance.getitem = instance_getitem - - -def _populate_context_lookup(call, context): - # Allows context to be saved for later - # for inference inside a function - context_lookup = {} - if context is None: - return context_lookup - for arg in call.args: - if isinstance(arg, nodes.Starred): - context_lookup[arg.value] = context - else: - context_lookup[arg] = context - keywords = call.keywords if call.keywords is not None else [] - for keyword in keywords: - context_lookup[keyword.value] = context - return context_lookup - - -@decorators.raise_if_nothing_inferred -def infer_ifexp(self, context=None): - """Support IfExp inference - - If we can't infer the truthiness of the condition, we default - to inferring both branches. Otherwise, we infer either branch - depending on the condition. - """ - both_branches = False - # We use two separate contexts for evaluating lhs and rhs because - # evaluating lhs may leave some undesired entries in context.path - # which may not let us infer right value of rhs. - - context = context or contextmod.InferenceContext() - lhs_context = contextmod.copy_context(context) - rhs_context = contextmod.copy_context(context) - try: - test = next(self.test.infer(context=context.clone())) - except exceptions.InferenceError: - both_branches = True - else: - if test is not util.Uninferable: - if test.bool_value(): - yield from self.body.infer(context=lhs_context) - else: - yield from self.orelse.infer(context=rhs_context) - else: - both_branches = True - if both_branches: - yield from self.body.infer(context=lhs_context) - yield from self.orelse.infer(context=rhs_context) - - -nodes.IfExp._infer = infer_ifexp - - -# pylint: disable=dangerous-default-value -@wrapt.decorator -def _cached_generator(func, instance, args, kwargs, _cache={}): - node = args[0] - try: - return iter(_cache[func, id(node)]) - except KeyError: - result = func(*args, **kwargs) - # Need to keep an iterator around - original, copy = itertools.tee(result) - _cache[func, id(node)] = list(copy) - return original - - -# When inferring a property, we instantiate a new `objects.Property` object, -# which in turn, because it inherits from `FunctionDef`, sets itself in the locals -# of the wrapping frame. This means that everytime we infer a property, the locals -# are mutated with a new instance of the property. This is why we cache the result -# of the function's inference. -@_cached_generator -def infer_functiondef(self, context=None): - if not self.decorators or not bases._is_property(self): - yield self - return dict(node=self, context=context) - - prop_func = objects.Property( - function=self, - name=self.name, - doc=self.doc, - lineno=self.lineno, - parent=self.parent, - col_offset=self.col_offset, - ) - prop_func.postinit(body=[], args=self.args) - yield prop_func - return dict(node=self, context=context) - - -nodes.FunctionDef._infer = infer_functiondef diff --git a/Jobs_Collections/venv/Lib/python3.8/site-packages/astroid/interpreter/__init__.py b/Jobs_Collections/venv/Lib/python3.8/site-packages/astroid/interpreter/__init__.py deleted file mode 100644 index e69de29..0000000 diff --git a/Jobs_Collections/venv/Lib/python3.8/site-packages/astroid/interpreter/__pycache__/__init__.cpython-38.pyc b/Jobs_Collections/venv/Lib/python3.8/site-packages/astroid/interpreter/__pycache__/__init__.cpython-38.pyc deleted file mode 100644 index 8eefa780ebae9c56792cd2d5cd29c577f2d9ef14..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 208 zcmWIL<>g`k0wu@iaUl9Jh(HF6K#l_t7qb9~6oz01O-8?!3`HPe1o5j>zo00yEU_e2 zzbvsxKP^8eCAFwn-!wx%H#a#g*D^iD$UG_DsG=Y~qsY{xxV*%~00`3a^h5LuG7EGw z^NLFnb8>Xeatw-0jdDx%6N^iV@-tK5bY@;jYEeN^Dv;EVkI&4@EQycTE2zB1VUwGm PQks)$2XfA5AZ7pncn~*> diff --git a/Jobs_Collections/venv/Lib/python3.8/site-packages/astroid/interpreter/__pycache__/dunder_lookup.cpython-38.pyc b/Jobs_Collections/venv/Lib/python3.8/site-packages/astroid/interpreter/__pycache__/dunder_lookup.cpython-38.pyc deleted file mode 100644 index 52ae20a0f53dac91671bf0f77646a2ae73154252..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 2163 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 Z&O&dn2_s+im{{gS)@+1HN diff --git a/Jobs_Collections/venv/Lib/python3.8/site-packages/astroid/interpreter/_import/__init__.py b/Jobs_Collections/venv/Lib/python3.8/site-packages/astroid/interpreter/_import/__init__.py deleted file mode 100644 index e69de29..0000000 diff --git a/Jobs_Collections/venv/Lib/python3.8/site-packages/astroid/interpreter/_import/__pycache__/__init__.cpython-38.pyc b/Jobs_Collections/venv/Lib/python3.8/site-packages/astroid/interpreter/_import/__pycache__/__init__.cpython-38.pyc deleted file mode 100644 index 46eb9560bc588cd4c57fba06aa1f403e73a91c0b..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 216 zcmWIL<>g`k0wu@iaUl9Jh(HF6K#l_t7qb9~6oz01O-8?!3`HPe1o5j@zo00yEU_e2 zzbvsxKP^8eCAFwn-!wx%H#a#g*D^iD$UG_DsG=Y~qsY{xxV*%~00`3a^h5LuG7EGw z^NLFnb8>Xeatw-0jdDx%6N^iV@-tK5bY@;jYEeN^Dv;EV&&(~zFDlWGkI&4@EQycT XE2zB1VUwGmQks)$2XfYDAZ7pnU9vj7 diff --git a/Jobs_Collections/venv/Lib/python3.8/site-packages/astroid/interpreter/_import/__pycache__/spec.cpython-38.pyc b/Jobs_Collections/venv/Lib/python3.8/site-packages/astroid/interpreter/_import/__pycache__/spec.cpython-38.pyc deleted file mode 100644 index bbfb2bb97a4927d0769785987420e80fce7b9161..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 9418 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 diff --git a/Jobs_Collections/venv/Lib/python3.8/site-packages/astroid/interpreter/_import/__pycache__/util.cpython-38.pyc b/Jobs_Collections/venv/Lib/python3.8/site-packages/astroid/interpreter/_import/__pycache__/util.cpython-38.pyc deleted file mode 100644 index 4cbc529c902dc0953b94979aedcbb910fd4ac521..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 436 zcmYjOJx{|h5IrZQU$h9p!i-ol6jxCTLP7|H7+AUh0y+?d*iA#etaDN*V&u>8m$EV- z{sIe}D+GPky}PILS@-0tZnq7D?URqYZ_4jRETc){m_oZm&m94RB`}6-$hK-AS=`1Q z2IdGhhFi$28xWSTUtw$sb^%W9ljdL)Fq3{^YK!8OLT?ZiARun#>n~J2u((chY~)x~ zSH+=+Qs*TGQdgT^=BH9CKad_#?1xf2tZJmWFpW3B6?*Jz&J{*8zmR<9BcJ4nkf`}^ z%F{HMqz9pJ_wPOTNqJKo4)kL&=o7+>Uvd?xUXzyA0l{%;`Tzg` diff --git a/Jobs_Collections/venv/Lib/python3.8/site-packages/astroid/interpreter/_import/spec.py b/Jobs_Collections/venv/Lib/python3.8/site-packages/astroid/interpreter/_import/spec.py deleted file mode 100644 index 3cf5fea..0000000 --- a/Jobs_Collections/venv/Lib/python3.8/site-packages/astroid/interpreter/_import/spec.py +++ /dev/null @@ -1,346 +0,0 @@ -# Copyright (c) 2016-2018 Claudiu Popa -# Copyright (c) 2016 Derek Gustafson -# Copyright (c) 2017 Chris Philip -# Copyright (c) 2017 Hugo -# Copyright (c) 2017 ioanatia -# Copyright (c) 2017 Calen Pennington -# Copyright (c) 2018 Nick Drozd -# Copyright (c) 2019 Hugo van Kemenade -# Copyright (c) 2019 Ashley Whetter - -import abc -import collections -import distutils -import enum -import imp -import os -import sys -import zipimport - -try: - import importlib.machinery - - _HAS_MACHINERY = True -except ImportError: - _HAS_MACHINERY = False - -try: - from functools import lru_cache -except ImportError: - from backports.functools_lru_cache import lru_cache - -from . import util - -ModuleType = enum.Enum( - "ModuleType", - "C_BUILTIN C_EXTENSION PKG_DIRECTORY " - "PY_CODERESOURCE PY_COMPILED PY_FROZEN PY_RESOURCE " - "PY_SOURCE PY_ZIPMODULE PY_NAMESPACE", -) -_ImpTypes = { - imp.C_BUILTIN: ModuleType.C_BUILTIN, - imp.C_EXTENSION: ModuleType.C_EXTENSION, - imp.PKG_DIRECTORY: ModuleType.PKG_DIRECTORY, - imp.PY_COMPILED: ModuleType.PY_COMPILED, - imp.PY_FROZEN: ModuleType.PY_FROZEN, - imp.PY_SOURCE: ModuleType.PY_SOURCE, -} -if hasattr(imp, "PY_RESOURCE"): - _ImpTypes[imp.PY_RESOURCE] = ModuleType.PY_RESOURCE -if hasattr(imp, "PY_CODERESOURCE"): - _ImpTypes[imp.PY_CODERESOURCE] = ModuleType.PY_CODERESOURCE - - -def _imp_type_to_module_type(imp_type): - return _ImpTypes[imp_type] - - -_ModuleSpec = collections.namedtuple( - "_ModuleSpec", "name type location " "origin submodule_search_locations" -) - - -class ModuleSpec(_ModuleSpec): - """Defines a class similar to PEP 420's ModuleSpec - - A module spec defines a name of a module, its type, location - and where submodules can be found, if the module is a package. - """ - - def __new__( - cls, - name, - module_type, - location=None, - origin=None, - submodule_search_locations=None, - ): - return _ModuleSpec.__new__( - cls, - name=name, - type=module_type, - location=location, - origin=origin, - submodule_search_locations=submodule_search_locations, - ) - - -class Finder: - """A finder is a class which knows how to find a particular module.""" - - def __init__(self, path=None): - self._path = path or sys.path - - @abc.abstractmethod - def find_module(self, modname, module_parts, processed, submodule_path): - """Find the given module - - Each finder is responsible for each protocol of finding, as long as - they all return a ModuleSpec. - - :param str modname: The module which needs to be searched. - :param list module_parts: It should be a list of strings, - where each part contributes to the module's - namespace. - :param list processed: What parts from the module parts were processed - so far. - :param list submodule_path: A list of paths where the module - can be looked into. - :returns: A ModuleSpec, describing how and where the module was found, - None, otherwise. - """ - - def contribute_to_path(self, spec, processed): - """Get a list of extra paths where this finder can search.""" - - -class ImpFinder(Finder): - """A finder based on the imp module.""" - - def find_module(self, modname, module_parts, processed, submodule_path): - if submodule_path is not None: - submodule_path = list(submodule_path) - try: - stream, mp_filename, mp_desc = imp.find_module(modname, submodule_path) - except ImportError: - return None - - # Close resources. - if stream: - stream.close() - - return ModuleSpec( - name=modname, - location=mp_filename, - module_type=_imp_type_to_module_type(mp_desc[2]), - ) - - def contribute_to_path(self, spec, processed): - if spec.location is None: - # Builtin. - return None - - if _is_setuptools_namespace(spec.location): - # extend_path is called, search sys.path for module/packages - # of this name see pkgutil.extend_path documentation - path = [ - os.path.join(p, *processed) - for p in sys.path - if os.path.isdir(os.path.join(p, *processed)) - ] - # We already import distutils elsewhere in astroid, - # so if it is the same module, we can use it directly. - elif spec.name == "distutils" and spec.location in distutils.__path__: - # distutils is patched inside virtualenvs to pick up submodules - # from the original Python, not from the virtualenv itself. - path = list(distutils.__path__) - else: - path = [spec.location] - return path - - -class ExplicitNamespacePackageFinder(ImpFinder): - """A finder for the explicit namespace packages, generated through pkg_resources.""" - - def find_module(self, modname, module_parts, processed, submodule_path): - if processed: - modname = ".".join(processed + [modname]) - if util.is_namespace(modname) and modname in sys.modules: - submodule_path = sys.modules[modname].__path__ - return ModuleSpec( - name=modname, - location="", - origin="namespace", - module_type=ModuleType.PY_NAMESPACE, - submodule_search_locations=submodule_path, - ) - return None - - def contribute_to_path(self, spec, processed): - return spec.submodule_search_locations - - -class ZipFinder(Finder): - """Finder that knows how to find a module inside zip files.""" - - def __init__(self, path): - super().__init__(path) - self._zipimporters = _precache_zipimporters(path) - - def find_module(self, modname, module_parts, processed, submodule_path): - try: - file_type, filename, path = _search_zip(module_parts, self._zipimporters) - except ImportError: - return None - - return ModuleSpec( - name=modname, - location=filename, - origin="egg", - module_type=file_type, - submodule_search_locations=path, - ) - - -class PathSpecFinder(Finder): - """Finder based on importlib.machinery.PathFinder.""" - - def find_module(self, modname, module_parts, processed, submodule_path): - spec = importlib.machinery.PathFinder.find_spec(modname, path=submodule_path) - if spec: - # origin can be either a string on older Python versions - # or None in case it is a namespace package: - # https://github.com/python/cpython/pull/5481 - is_namespace_pkg = spec.origin in ("namespace", None) - location = spec.origin if not is_namespace_pkg else None - module_type = ModuleType.PY_NAMESPACE if is_namespace_pkg else None - spec = ModuleSpec( - name=spec.name, - location=location, - origin=spec.origin, - module_type=module_type, - submodule_search_locations=list(spec.submodule_search_locations or []), - ) - return spec - - def contribute_to_path(self, spec, processed): - if spec.type == ModuleType.PY_NAMESPACE: - return spec.submodule_search_locations - return None - - -_SPEC_FINDERS = (ImpFinder, ZipFinder) -if _HAS_MACHINERY: - _SPEC_FINDERS += (PathSpecFinder,) -_SPEC_FINDERS += (ExplicitNamespacePackageFinder,) - - -def _is_setuptools_namespace(location): - try: - with open(os.path.join(location, "__init__.py"), "rb") as stream: - data = stream.read(4096) - except IOError: - pass - else: - extend_path = b"pkgutil" in data and b"extend_path" in data - declare_namespace = ( - b"pkg_resources" in data and b"declare_namespace(__name__)" in data - ) - return extend_path or declare_namespace - - -@lru_cache() -def _cached_set_diff(left, right): - result = set(left) - result.difference_update(right) - return result - - -def _precache_zipimporters(path=None): - pic = sys.path_importer_cache - - # When measured, despite having the same complexity (O(n)), - # converting to tuples and then caching the conversion to sets - # and the set difference is faster than converting to sets - # and then only caching the set difference. - - req_paths = tuple(path or sys.path) - cached_paths = tuple(pic) - new_paths = _cached_set_diff(req_paths, cached_paths) - for entry_path in new_paths: - try: - pic[entry_path] = zipimport.zipimporter(entry_path) - except zipimport.ZipImportError: - continue - return pic - - -def _search_zip(modpath, pic): - for filepath, importer in list(pic.items()): - if importer is not None: - found = importer.find_module(modpath[0]) - if found: - if not importer.find_module(os.path.sep.join(modpath)): - raise ImportError( - "No module named %s in %s/%s" - % (".".join(modpath[1:]), filepath, modpath) - ) - # import code; code.interact(local=locals()) - return ( - ModuleType.PY_ZIPMODULE, - os.path.abspath(filepath) + os.path.sep + os.path.sep.join(modpath), - filepath, - ) - raise ImportError("No module named %s" % ".".join(modpath)) - - -def _find_spec_with_path(search_path, modname, module_parts, processed, submodule_path): - finders = [finder(search_path) for finder in _SPEC_FINDERS] - for finder in finders: - spec = finder.find_module(modname, module_parts, processed, submodule_path) - if spec is None: - continue - return finder, spec - - raise ImportError("No module named %s" % ".".join(module_parts)) - - -def find_spec(modpath, path=None): - """Find a spec for the given module. - - :type modpath: list or tuple - :param modpath: - split module's name (i.e name of a module or package split - on '.'), with leading empty strings for explicit relative import - - :type path: list or None - :param path: - optional list of path where the module or package should be - searched (use sys.path if nothing or None is given) - - :rtype: ModuleSpec - :return: A module spec, which describes how the module was - found and where. - """ - _path = path or sys.path - - # Need a copy for not mutating the argument. - modpath = modpath[:] - - submodule_path = None - module_parts = modpath[:] - processed = [] - - while modpath: - modname = modpath.pop(0) - finder, spec = _find_spec_with_path( - _path, modname, module_parts, processed, submodule_path or path - ) - processed.append(modname) - if modpath: - submodule_path = finder.contribute_to_path(spec, processed) - - if spec.type == ModuleType.PKG_DIRECTORY: - spec = spec._replace(submodule_search_locations=submodule_path) - - return spec diff --git a/Jobs_Collections/venv/Lib/python3.8/site-packages/astroid/interpreter/_import/util.py b/Jobs_Collections/venv/Lib/python3.8/site-packages/astroid/interpreter/_import/util.py deleted file mode 100644 index a917bd3..0000000 --- a/Jobs_Collections/venv/Lib/python3.8/site-packages/astroid/interpreter/_import/util.py +++ /dev/null @@ -1,10 +0,0 @@ -# Copyright (c) 2016, 2018 Claudiu Popa - -try: - import pkg_resources -except ImportError: - pkg_resources = None - - -def is_namespace(modname): - return pkg_resources is not None and modname in pkg_resources._namespace_packages diff --git a/Jobs_Collections/venv/Lib/python3.8/site-packages/astroid/interpreter/dunder_lookup.py b/Jobs_Collections/venv/Lib/python3.8/site-packages/astroid/interpreter/dunder_lookup.py deleted file mode 100644 index 0ae9bc9..0000000 --- a/Jobs_Collections/venv/Lib/python3.8/site-packages/astroid/interpreter/dunder_lookup.py +++ /dev/null @@ -1,66 +0,0 @@ -# Copyright (c) 2016-2018 Claudiu Popa -# Licensed under the LGPL: https://www.gnu.org/licenses/old-licenses/lgpl-2.1.en.html -# For details: https://github.com/PyCQA/astroid/blob/master/COPYING.LESSER - -"""Contains logic for retrieving special methods. - -This implementation does not rely on the dot attribute access -logic, found in ``.getattr()``. The difference between these two -is that the dunder methods are looked with the type slots -(you can find more about these here -http://lucumr.pocoo.org/2014/8/16/the-python-i-would-like-to-see/) -As such, the lookup for the special methods is actually simpler than -the dot attribute access. -""" -import itertools - -import astroid -from astroid import exceptions - - -def _lookup_in_mro(node, name): - attrs = node.locals.get(name, []) - - nodes = itertools.chain.from_iterable( - ancestor.locals.get(name, []) for ancestor in node.ancestors(recurs=True) - ) - values = list(itertools.chain(attrs, nodes)) - if not values: - raise exceptions.AttributeInferenceError(attribute=name, target=node) - - return values - - -def lookup(node, name): - """Lookup the given special method name in the given *node* - - If the special method was found, then a list of attributes - will be returned. Otherwise, `astroid.AttributeInferenceError` - is going to be raised. - """ - if isinstance( - node, (astroid.List, astroid.Tuple, astroid.Const, astroid.Dict, astroid.Set) - ): - return _builtin_lookup(node, name) - if isinstance(node, astroid.Instance): - return _lookup_in_mro(node, name) - if isinstance(node, astroid.ClassDef): - return _class_lookup(node, name) - - raise exceptions.AttributeInferenceError(attribute=name, target=node) - - -def _class_lookup(node, name): - metaclass = node.metaclass() - if metaclass is None: - raise exceptions.AttributeInferenceError(attribute=name, target=node) - - return _lookup_in_mro(metaclass, name) - - -def _builtin_lookup(node, name): - values = node.locals.get(name, []) - if not values: - raise exceptions.AttributeInferenceError(attribute=name, target=node) - - return values diff --git a/Jobs_Collections/venv/Lib/python3.8/site-packages/astroid/interpreter/objectmodel.py b/Jobs_Collections/venv/Lib/python3.8/site-packages/astroid/interpreter/objectmodel.py deleted file mode 100644 index 277c825..0000000 --- a/Jobs_Collections/venv/Lib/python3.8/site-packages/astroid/interpreter/objectmodel.py +++ /dev/null @@ -1,801 +0,0 @@ -# -*- coding: utf-8 -*- -# Copyright (c) 2016-2019 Claudiu Popa -# Copyright (c) 2016 Derek Gustafson -# Copyright (c) 2017-2018 Bryce Guinta -# Copyright (c) 2017 Ceridwen -# Copyright (c) 2017 Calen Pennington -# Copyright (c) 2018 Ville Skyttรค -# Copyright (c) 2018 Nick Drozd -# Licensed under the LGPL: https://www.gnu.org/licenses/old-licenses/lgpl-2.1.en.html -# For details: https://github.com/PyCQA/astroid/blob/master/COPYING.LESSER -""" -Data object model, as per https://docs.python.org/3/reference/datamodel.html. - -This module describes, at least partially, a data object model for some -of astroid's nodes. The model contains special attributes that nodes such -as functions, classes, modules etc have, such as __doc__, __class__, -__module__ etc, being used when doing attribute lookups over nodes. - -For instance, inferring `obj.__class__` will first trigger an inference -of the `obj` variable. If it was successfully inferred, then an attribute -`__class__ will be looked for in the inferred object. This is the part -where the data model occurs. The model is attached to those nodes -and the lookup mechanism will try to see if attributes such as -`__class__` are defined by the model or not. If they are defined, -the model will be requested to return the corresponding value of that -attribute. Thus the model can be viewed as a special part of the lookup -mechanism. -""" - -import itertools -import pprint -import os -import types -from functools import lru_cache - -import astroid -from astroid import context as contextmod -from astroid import exceptions -from astroid import node_classes - - -IMPL_PREFIX = "attr_" - - -def _dunder_dict(instance, attributes): - obj = node_classes.Dict(parent=instance) - - # Convert the keys to node strings - keys = [ - node_classes.Const(value=value, parent=obj) for value in list(attributes.keys()) - ] - - # The original attribute has a list of elements for each key, - # but that is not useful for retrieving the special attribute's value. - # In this case, we're picking the last value from each list. - values = [elem[-1] for elem in attributes.values()] - - obj.postinit(list(zip(keys, values))) - return obj - - -class ObjectModel: - def __init__(self): - self._instance = None - - def __repr__(self): - result = [] - cname = type(self).__name__ - string = "%(cname)s(%(fields)s)" - alignment = len(cname) + 1 - for field in sorted(self.attributes()): - width = 80 - len(field) - alignment - lines = pprint.pformat(field, indent=2, width=width).splitlines(True) - - inner = [lines[0]] - for line in lines[1:]: - inner.append(" " * alignment + line) - result.append(field) - - return string % { - "cname": cname, - "fields": (",\n" + " " * alignment).join(result), - } - - def __call__(self, instance): - self._instance = instance - return self - - def __get__(self, instance, cls=None): - # ObjectModel needs to be a descriptor so that just doing - # `special_attributes = SomeObjectModel` should be enough in the body of a node. - # But at the same time, node.special_attributes should return an object - # which can be used for manipulating the special attributes. That's the reason - # we pass the instance through which it got accessed to ObjectModel.__call__, - # returning itself afterwards, so we can still have access to the - # underlying data model and to the instance for which it got accessed. - return self(instance) - - def __contains__(self, name): - return name in self.attributes() - - @lru_cache(maxsize=None) - def attributes(self): - """Get the attributes which are exported by this object model.""" - return [ - obj[len(IMPL_PREFIX) :] for obj in dir(self) if obj.startswith(IMPL_PREFIX) - ] - - def lookup(self, name): - """Look up the given *name* in the current model - - It should return an AST or an interpreter object, - but if the name is not found, then an AttributeInferenceError will be raised. - """ - - if name in self.attributes(): - return getattr(self, IMPL_PREFIX + name) - raise exceptions.AttributeInferenceError(target=self._instance, attribute=name) - - -class ModuleModel(ObjectModel): - def _builtins(self): - builtins_ast_module = astroid.MANAGER.builtins_module - return builtins_ast_module.special_attributes.lookup("__dict__") - - @property - def attr_builtins(self): - return self._builtins() - - @property - def attr___path__(self): - if not self._instance.package: - raise exceptions.AttributeInferenceError( - target=self._instance, attribute="__path__" - ) - - path_objs = [ - node_classes.Const( - value=path - if not path.endswith("__init__.py") - else os.path.dirname(path), - parent=self._instance, - ) - for path in self._instance.path - ] - - container = node_classes.List(parent=self._instance) - container.postinit(path_objs) - - return container - - @property - def attr___name__(self): - return node_classes.Const(value=self._instance.name, parent=self._instance) - - @property - def attr___doc__(self): - return node_classes.Const(value=self._instance.doc, parent=self._instance) - - @property - def attr___file__(self): - return node_classes.Const(value=self._instance.file, parent=self._instance) - - @property - def attr___dict__(self): - return _dunder_dict(self._instance, self._instance.globals) - - @property - def attr___package__(self): - if not self._instance.package: - value = "" - else: - value = self._instance.name - - return node_classes.Const(value=value, parent=self._instance) - - # These are related to the Python 3 implementation of the - # import system, - # https://docs.python.org/3/reference/import.html#import-related-module-attributes - - @property - def attr___spec__(self): - # No handling for now. - return node_classes.Unknown() - - @property - def attr___loader__(self): - # No handling for now. - return node_classes.Unknown() - - @property - def attr___cached__(self): - # No handling for now. - return node_classes.Unknown() - - -class FunctionModel(ObjectModel): - @property - def attr___name__(self): - return node_classes.Const(value=self._instance.name, parent=self._instance) - - @property - def attr___doc__(self): - return node_classes.Const(value=self._instance.doc, parent=self._instance) - - @property - def attr___qualname__(self): - return node_classes.Const(value=self._instance.qname(), parent=self._instance) - - @property - def attr___defaults__(self): - func = self._instance - if not func.args.defaults: - return node_classes.Const(value=None, parent=func) - - defaults_obj = node_classes.Tuple(parent=func) - defaults_obj.postinit(func.args.defaults) - return defaults_obj - - @property - def attr___annotations__(self): - obj = node_classes.Dict(parent=self._instance) - - if not self._instance.returns: - returns = None - else: - returns = self._instance.returns - - args = self._instance.args - pair_annotations = itertools.chain( - zip(args.args or [], args.annotations), - zip(args.kwonlyargs, args.kwonlyargs_annotations), - zip(args.posonlyargs or [], args.posonlyargs_annotations), - ) - - annotations = { - arg.name: annotation for (arg, annotation) in pair_annotations if annotation - } - if args.varargannotation: - annotations[args.vararg] = args.varargannotation - if args.kwargannotation: - annotations[args.kwarg] = args.kwargannotation - if returns: - annotations["return"] = returns - - items = [ - (node_classes.Const(key, parent=obj), value) - for (key, value) in annotations.items() - ] - - obj.postinit(items) - return obj - - @property - def attr___dict__(self): - return node_classes.Dict(parent=self._instance) - - attr___globals__ = attr___dict__ - - @property - def attr___kwdefaults__(self): - def _default_args(args, parent): - for arg in args.kwonlyargs: - try: - default = args.default_value(arg.name) - except exceptions.NoDefault: - continue - - name = node_classes.Const(arg.name, parent=parent) - yield name, default - - args = self._instance.args - obj = node_classes.Dict(parent=self._instance) - defaults = dict(_default_args(args, obj)) - - obj.postinit(list(defaults.items())) - return obj - - @property - def attr___module__(self): - return node_classes.Const(self._instance.root().qname()) - - @property - def attr___get__(self): - # pylint: disable=import-outside-toplevel; circular import - from astroid import bases - - func = self._instance - - class DescriptorBoundMethod(bases.BoundMethod): - """Bound method which knows how to understand calling descriptor binding.""" - - def implicit_parameters(self): - # Different than BoundMethod since the signature - # is different. - return 0 - - def infer_call_result(self, caller, context=None): - if len(caller.args) > 2 or len(caller.args) < 1: - raise exceptions.InferenceError( - "Invalid arguments for descriptor binding", - target=self, - context=context, - ) - - context = contextmod.copy_context(context) - cls = next(caller.args[0].infer(context=context)) - - if cls is astroid.Uninferable: - raise exceptions.InferenceError( - "Invalid class inferred", target=self, context=context - ) - - # For some reason func is a Node that the below - # code is not expecting - if isinstance(func, bases.BoundMethod): - yield func - return - - # Rebuild the original value, but with the parent set as the - # class where it will be bound. - new_func = func.__class__( - name=func.name, - doc=func.doc, - lineno=func.lineno, - col_offset=func.col_offset, - ) - # pylint: disable=no-member - new_func.postinit(func.args, func.body, func.decorators, func.returns) - - # Build a proper bound method that points to our newly built function. - proxy = bases.UnboundMethod(new_func) - yield bases.BoundMethod(proxy=proxy, bound=cls) - - @property - def args(self): - """Overwrite the underlying args to match those of the underlying func - - Usually the underlying *func* is a function/method, as in: - - def test(self): - pass - - This has only the *self* parameter but when we access test.__get__ - we get a new object which has two parameters, *self* and *type*. - """ - nonlocal func - positional_or_keyword_params = func.args.args.copy() - positional_or_keyword_params.append(astroid.AssignName(name="type")) - - positional_only_params = func.args.posonlyargs.copy() - - arguments = astroid.Arguments(parent=func.args.parent) - arguments.postinit( - args=positional_or_keyword_params, - posonlyargs=positional_only_params, - defaults=[], - kwonlyargs=[], - kw_defaults=[], - annotations=[], - ) - return arguments - - return DescriptorBoundMethod(proxy=self._instance, bound=self._instance) - - # These are here just for completion. - @property - def attr___ne__(self): - return node_classes.Unknown() - - attr___subclasshook__ = attr___ne__ - attr___str__ = attr___ne__ - attr___sizeof__ = attr___ne__ - attr___setattr___ = attr___ne__ - attr___repr__ = attr___ne__ - attr___reduce__ = attr___ne__ - attr___reduce_ex__ = attr___ne__ - attr___new__ = attr___ne__ - attr___lt__ = attr___ne__ - attr___eq__ = attr___ne__ - attr___gt__ = attr___ne__ - attr___format__ = attr___ne__ - attr___delattr___ = attr___ne__ - attr___getattribute__ = attr___ne__ - attr___hash__ = attr___ne__ - attr___init__ = attr___ne__ - attr___dir__ = attr___ne__ - attr___call__ = attr___ne__ - attr___class__ = attr___ne__ - attr___closure__ = attr___ne__ - attr___code__ = attr___ne__ - - -class ClassModel(ObjectModel): - @property - def attr___module__(self): - return node_classes.Const(self._instance.root().qname()) - - @property - def attr___name__(self): - return node_classes.Const(self._instance.name) - - @property - def attr___qualname__(self): - return node_classes.Const(self._instance.qname()) - - @property - def attr___doc__(self): - return node_classes.Const(self._instance.doc) - - @property - def attr___mro__(self): - if not self._instance.newstyle: - raise exceptions.AttributeInferenceError( - target=self._instance, attribute="__mro__" - ) - - mro = self._instance.mro() - obj = node_classes.Tuple(parent=self._instance) - obj.postinit(mro) - return obj - - @property - def attr_mro(self): - if not self._instance.newstyle: - raise exceptions.AttributeInferenceError( - target=self._instance, attribute="mro" - ) - - # pylint: disable=import-outside-toplevel; circular import - from astroid import bases - - other_self = self - - # Cls.mro is a method and we need to return one in order to have a proper inference. - # The method we're returning is capable of inferring the underlying MRO though. - class MroBoundMethod(bases.BoundMethod): - def infer_call_result(self, caller, context=None): - yield other_self.attr___mro__ - - implicit_metaclass = self._instance.implicit_metaclass() - mro_method = implicit_metaclass.locals["mro"][0] - return MroBoundMethod(proxy=mro_method, bound=implicit_metaclass) - - @property - def attr___bases__(self): - obj = node_classes.Tuple() - context = contextmod.InferenceContext() - elts = list(self._instance._inferred_bases(context)) - obj.postinit(elts=elts) - return obj - - @property - def attr___class__(self): - # pylint: disable=import-outside-toplevel; circular import - from astroid import helpers - - return helpers.object_type(self._instance) - - @property - def attr___subclasses__(self): - """Get the subclasses of the underlying class - - This looks only in the current module for retrieving the subclasses, - thus it might miss a couple of them. - """ - # pylint: disable=import-outside-toplevel; circular import - from astroid import bases - from astroid import scoped_nodes - - if not self._instance.newstyle: - raise exceptions.AttributeInferenceError( - target=self._instance, attribute="__subclasses__" - ) - - qname = self._instance.qname() - root = self._instance.root() - classes = [ - cls - for cls in root.nodes_of_class(scoped_nodes.ClassDef) - if cls != self._instance and cls.is_subtype_of(qname) - ] - - obj = node_classes.List(parent=self._instance) - obj.postinit(classes) - - class SubclassesBoundMethod(bases.BoundMethod): - def infer_call_result(self, caller, context=None): - yield obj - - implicit_metaclass = self._instance.implicit_metaclass() - subclasses_method = implicit_metaclass.locals["__subclasses__"][0] - return SubclassesBoundMethod(proxy=subclasses_method, bound=implicit_metaclass) - - @property - def attr___dict__(self): - return node_classes.Dict(parent=self._instance) - - -class SuperModel(ObjectModel): - @property - def attr___thisclass__(self): - return self._instance.mro_pointer - - @property - def attr___self_class__(self): - return self._instance._self_class - - @property - def attr___self__(self): - return self._instance.type - - @property - def attr___class__(self): - return self._instance._proxied - - -class UnboundMethodModel(ObjectModel): - @property - def attr___class__(self): - # pylint: disable=import-outside-toplevel; circular import - from astroid import helpers - - return helpers.object_type(self._instance) - - @property - def attr___func__(self): - return self._instance._proxied - - @property - def attr___self__(self): - return node_classes.Const(value=None, parent=self._instance) - - attr_im_func = attr___func__ - attr_im_class = attr___class__ - attr_im_self = attr___self__ - - -class BoundMethodModel(FunctionModel): - @property - def attr___func__(self): - return self._instance._proxied._proxied - - @property - def attr___self__(self): - return self._instance.bound - - -class GeneratorModel(FunctionModel): - def __new__(cls, *args, **kwargs): - # Append the values from the GeneratorType unto this object. - ret = super(GeneratorModel, cls).__new__(cls, *args, **kwargs) - generator = astroid.MANAGER.builtins_module["generator"] - for name, values in generator.locals.items(): - method = values[0] - patched = lambda cls, meth=method: meth - - setattr(type(ret), IMPL_PREFIX + name, property(patched)) - - return ret - - @property - def attr___name__(self): - return node_classes.Const( - value=self._instance.parent.name, parent=self._instance - ) - - @property - def attr___doc__(self): - return node_classes.Const( - value=self._instance.parent.doc, parent=self._instance - ) - - -class AsyncGeneratorModel(GeneratorModel): - def __new__(cls, *args, **kwargs): - # Append the values from the AGeneratorType unto this object. - ret = super().__new__(cls, *args, **kwargs) - astroid_builtins = astroid.MANAGER.builtins_module - generator = astroid_builtins.get("async_generator") - if generator is None: - # Make it backward compatible. - generator = astroid_builtins.get("generator") - - for name, values in generator.locals.items(): - method = values[0] - patched = lambda cls, meth=method: meth - - setattr(type(ret), IMPL_PREFIX + name, property(patched)) - - return ret - - -class InstanceModel(ObjectModel): - @property - def attr___class__(self): - return self._instance._proxied - - @property - def attr___module__(self): - return node_classes.Const(self._instance.root().qname()) - - @property - def attr___doc__(self): - return node_classes.Const(self._instance.doc) - - @property - def attr___dict__(self): - return _dunder_dict(self._instance, self._instance.instance_attrs) - - -# Exception instances - - -class ExceptionInstanceModel(InstanceModel): - @property - def attr_args(self): - message = node_classes.Const("") - args = node_classes.Tuple(parent=self._instance) - args.postinit((message,)) - return args - - @property - def attr___traceback__(self): - builtins_ast_module = astroid.MANAGER.builtins_module - traceback_type = builtins_ast_module[types.TracebackType.__name__] - return traceback_type.instantiate_class() - - -class SyntaxErrorInstanceModel(ExceptionInstanceModel): - @property - def attr_text(self): - return node_classes.Const("") - - -class OSErrorInstanceModel(ExceptionInstanceModel): - @property - def attr_filename(self): - return node_classes.Const("") - - @property - def attr_errno(self): - return node_classes.Const(0) - - @property - def attr_strerror(self): - return node_classes.Const("") - - attr_filename2 = attr_filename - - -class ImportErrorInstanceModel(ExceptionInstanceModel): - @property - def attr_name(self): - return node_classes.Const("") - - @property - def attr_path(self): - return node_classes.Const("") - - -BUILTIN_EXCEPTIONS = { - "builtins.SyntaxError": SyntaxErrorInstanceModel, - "builtins.ImportError": ImportErrorInstanceModel, - # These are all similar to OSError in terms of attributes - "builtins.OSError": OSErrorInstanceModel, - "builtins.BlockingIOError": OSErrorInstanceModel, - "builtins.BrokenPipeError": OSErrorInstanceModel, - "builtins.ChildProcessError": OSErrorInstanceModel, - "builtins.ConnectionAbortedError": OSErrorInstanceModel, - "builtins.ConnectionError": OSErrorInstanceModel, - "builtins.ConnectionRefusedError": OSErrorInstanceModel, - "builtins.ConnectionResetError": OSErrorInstanceModel, - "builtins.FileExistsError": OSErrorInstanceModel, - "builtins.FileNotFoundError": OSErrorInstanceModel, - "builtins.InterruptedError": OSErrorInstanceModel, - "builtins.IsADirectoryError": OSErrorInstanceModel, - "builtins.NotADirectoryError": OSErrorInstanceModel, - "builtins.PermissionError": OSErrorInstanceModel, - "builtins.ProcessLookupError": OSErrorInstanceModel, - "builtins.TimeoutError": OSErrorInstanceModel, -} - - -class DictModel(ObjectModel): - @property - def attr___class__(self): - return self._instance._proxied - - def _generic_dict_attribute(self, obj, name): - """Generate a bound method that can infer the given *obj*.""" - - class DictMethodBoundMethod(astroid.BoundMethod): - def infer_call_result(self, caller, context=None): - yield obj - - meth = next(self._instance._proxied.igetattr(name)) - return DictMethodBoundMethod(proxy=meth, bound=self._instance) - - @property - def attr_items(self): - elems = [] - obj = node_classes.List(parent=self._instance) - for key, value in self._instance.items: - elem = node_classes.Tuple(parent=obj) - elem.postinit((key, value)) - elems.append(elem) - obj.postinit(elts=elems) - - # pylint: disable=import-outside-toplevel; circular import - from astroid import objects - - obj = objects.DictItems(obj) - return self._generic_dict_attribute(obj, "items") - - @property - def attr_keys(self): - keys = [key for (key, _) in self._instance.items] - obj = node_classes.List(parent=self._instance) - obj.postinit(elts=keys) - - # pylint: disable=import-outside-toplevel; circular import - from astroid import objects - - obj = objects.DictKeys(obj) - return self._generic_dict_attribute(obj, "keys") - - @property - def attr_values(self): - - values = [value for (_, value) in self._instance.items] - obj = node_classes.List(parent=self._instance) - obj.postinit(values) - - # pylint: disable=import-outside-toplevel; circular import - from astroid import objects - - obj = objects.DictValues(obj) - return self._generic_dict_attribute(obj, "values") - - -class PropertyModel(ObjectModel): - """Model for a builtin property""" - - # pylint: disable=import-outside-toplevel - def _init_function(self, name): - from astroid.node_classes import Arguments - from astroid.scoped_nodes import FunctionDef - - args = Arguments() - args.postinit( - args=[], - defaults=[], - kwonlyargs=[], - kw_defaults=[], - annotations=[], - posonlyargs=[], - posonlyargs_annotations=[], - kwonlyargs_annotations=[], - ) - - function = FunctionDef(name=name, parent=self._instance) - - function.postinit(args=args, body=[]) - return function - - @property - def attr_fget(self): - from astroid.scoped_nodes import FunctionDef - - func = self._instance - - class PropertyFuncAccessor(FunctionDef): - def infer_call_result(self, caller=None, context=None): - nonlocal func - if caller and len(caller.args) != 1: - raise exceptions.InferenceError( - "fget() needs a single argument", target=self, context=context - ) - - yield from func.function.infer_call_result( - caller=caller, context=context - ) - - property_accessor = PropertyFuncAccessor(name="fget", parent=self._instance) - property_accessor.postinit(args=func.args, body=func.body) - return property_accessor - - @property - def attr_setter(self): - return self._init_function("setter") - - @property - def attr_deleter(self): - return self._init_function("deleter") - - @property - def attr_getter(self): - return self._init_function("getter") - - # pylint: enable=import-outside-toplevel diff --git a/Jobs_Collections/venv/Lib/python3.8/site-packages/astroid/manager.py b/Jobs_Collections/venv/Lib/python3.8/site-packages/astroid/manager.py deleted file mode 100644 index 82208ad..0000000 --- a/Jobs_Collections/venv/Lib/python3.8/site-packages/astroid/manager.py +++ /dev/null @@ -1,350 +0,0 @@ -# Copyright (c) 2006-2011, 2013-2014 LOGILAB S.A. (Paris, FRANCE) -# Copyright (c) 2014-2019 Claudiu Popa -# Copyright (c) 2014 BioGeek -# Copyright (c) 2014 Google, Inc. -# Copyright (c) 2014 Eevee (Alex Munroe) -# Copyright (c) 2015-2016 Ceridwen -# Copyright (c) 2016 Derek Gustafson -# Copyright (c) 2017 Iva Miholic -# Copyright (c) 2018 Bryce Guinta -# Copyright (c) 2018 Nick Drozd -# Copyright (c) 2019 Raphael Gaschignard -# Copyright (c) 2020 Anubhav <35621759+anubh-v@users.noreply.github.com> -# Copyright (c) 2020 Ashley Whetter - -# Licensed under the LGPL: https://www.gnu.org/licenses/old-licenses/lgpl-2.1.en.html -# For details: https://github.com/PyCQA/astroid/blob/master/COPYING.LESSER - -"""astroid manager: avoid multiple astroid build of a same module when -possible by providing a class responsible to get astroid representation -from various source and using a cache of built modules) -""" - -import os -import zipimport - -from astroid import exceptions -from astroid.interpreter._import import spec -from astroid import modutils -from astroid import transforms - - -ZIP_IMPORT_EXTS = (".zip", ".egg", ".whl") - - -def safe_repr(obj): - try: - return repr(obj) - except Exception: # pylint: disable=broad-except - return "???" - - -class AstroidManager: - """the astroid manager, responsible to build astroid from files - or modules. - - Use the Borg pattern. - """ - - name = "astroid loader" - brain = {} - - def __init__(self): - self.__dict__ = AstroidManager.brain - if not self.__dict__: - # NOTE: cache entries are added by the [re]builder - self.astroid_cache = {} - self._mod_file_cache = {} - self._failed_import_hooks = [] - self.always_load_extensions = False - self.optimize_ast = False - self.extension_package_whitelist = set() - self._transform = transforms.TransformVisitor() - - # Export these APIs for convenience - self.register_transform = self._transform.register_transform - self.unregister_transform = self._transform.unregister_transform - self.max_inferable_values = 100 - - @property - def builtins_module(self): - return self.astroid_cache["builtins"] - - def visit_transforms(self, node): - """Visit the transforms and apply them to the given *node*.""" - return self._transform.visit(node) - - def ast_from_file(self, filepath, modname=None, fallback=True, source=False): - """given a module name, return the astroid object""" - try: - filepath = modutils.get_source_file(filepath, include_no_ext=True) - source = True - except modutils.NoSourceFile: - pass - if modname is None: - try: - modname = ".".join(modutils.modpath_from_file(filepath)) - except ImportError: - modname = filepath - if ( - modname in self.astroid_cache - and self.astroid_cache[modname].file == filepath - ): - return self.astroid_cache[modname] - if source: - # pylint: disable=import-outside-toplevel; circular import - from astroid.builder import AstroidBuilder - - return AstroidBuilder(self).file_build(filepath, modname) - if fallback and modname: - return self.ast_from_module_name(modname) - raise exceptions.AstroidBuildingError( - "Unable to build an AST for {path}.", path=filepath - ) - - def ast_from_string(self, data, modname="", filepath=None): - """ Given some source code as a string, return its corresponding astroid object""" - # pylint: disable=import-outside-toplevel; circular import - from astroid.builder import AstroidBuilder - - return AstroidBuilder(self).string_build(data, modname, filepath) - - def _build_stub_module(self, modname): - # pylint: disable=import-outside-toplevel; circular import - from astroid.builder import AstroidBuilder - - return AstroidBuilder(self).string_build("", modname) - - def _build_namespace_module(self, modname, path): - # pylint: disable=import-outside-toplevel; circular import - from astroid.builder import build_namespace_package_module - - return build_namespace_package_module(modname, path) - - def _can_load_extension(self, modname): - if self.always_load_extensions: - return True - if modutils.is_standard_module(modname): - return True - parts = modname.split(".") - return any( - ".".join(parts[:x]) in self.extension_package_whitelist - for x in range(1, len(parts) + 1) - ) - - def ast_from_module_name(self, modname, context_file=None): - """given a module name, return the astroid object""" - if modname in self.astroid_cache: - return self.astroid_cache[modname] - if modname == "__main__": - return self._build_stub_module(modname) - if context_file: - old_cwd = os.getcwd() - os.chdir(os.path.dirname(context_file)) - try: - found_spec = self.file_from_module_name(modname, context_file) - if found_spec.type == spec.ModuleType.PY_ZIPMODULE: - module = self.zip_import_data(found_spec.location) - if module is not None: - return module - - elif found_spec.type in ( - spec.ModuleType.C_BUILTIN, - spec.ModuleType.C_EXTENSION, - ): - if ( - found_spec.type == spec.ModuleType.C_EXTENSION - and not self._can_load_extension(modname) - ): - return self._build_stub_module(modname) - try: - module = modutils.load_module_from_name(modname) - except Exception as ex: - raise exceptions.AstroidImportError( - "Loading {modname} failed with:\n{error}", - modname=modname, - path=found_spec.location, - ) from ex - return self.ast_from_module(module, modname) - - elif found_spec.type == spec.ModuleType.PY_COMPILED: - raise exceptions.AstroidImportError( - "Unable to load compiled module {modname}.", - modname=modname, - path=found_spec.location, - ) - - elif found_spec.type == spec.ModuleType.PY_NAMESPACE: - return self._build_namespace_module( - modname, found_spec.submodule_search_locations - ) - elif found_spec.type == spec.ModuleType.PY_FROZEN: - return self._build_stub_module(modname) - - if found_spec.location is None: - raise exceptions.AstroidImportError( - "Can't find a file for module {modname}.", modname=modname - ) - - return self.ast_from_file(found_spec.location, modname, fallback=False) - except exceptions.AstroidBuildingError as e: - for hook in self._failed_import_hooks: - try: - return hook(modname) - except exceptions.AstroidBuildingError: - pass - raise e - finally: - if context_file: - os.chdir(old_cwd) - - def zip_import_data(self, filepath): - if zipimport is None: - return None - - # pylint: disable=import-outside-toplevel; circular import - from astroid.builder import AstroidBuilder - - builder = AstroidBuilder(self) - for ext in ZIP_IMPORT_EXTS: - try: - eggpath, resource = filepath.rsplit(ext + os.path.sep, 1) - except ValueError: - continue - try: - importer = zipimport.zipimporter(eggpath + ext) - zmodname = resource.replace(os.path.sep, ".") - if importer.is_package(resource): - zmodname = zmodname + ".__init__" - module = builder.string_build( - importer.get_source(resource), zmodname, filepath - ) - return module - except Exception: # pylint: disable=broad-except - continue - return None - - def file_from_module_name(self, modname, contextfile): - try: - value = self._mod_file_cache[(modname, contextfile)] - except KeyError: - try: - value = modutils.file_info_from_modpath( - modname.split("."), context_file=contextfile - ) - except ImportError as ex: - value = exceptions.AstroidImportError( - "Failed to import module {modname} with error:\n{error}.", - modname=modname, - error=ex, - ) - self._mod_file_cache[(modname, contextfile)] = value - if isinstance(value, exceptions.AstroidBuildingError): - raise value - return value - - def ast_from_module(self, module, modname=None): - """given an imported module, return the astroid object""" - modname = modname or module.__name__ - if modname in self.astroid_cache: - return self.astroid_cache[modname] - try: - # some builtin modules don't have __file__ attribute - filepath = module.__file__ - if modutils.is_python_source(filepath): - return self.ast_from_file(filepath, modname) - except AttributeError: - pass - - # pylint: disable=import-outside-toplevel; circular import - from astroid.builder import AstroidBuilder - - return AstroidBuilder(self).module_build(module, modname) - - def ast_from_class(self, klass, modname=None): - """get astroid for the given class""" - if modname is None: - try: - modname = klass.__module__ - except AttributeError as exc: - raise exceptions.AstroidBuildingError( - "Unable to get module for class {class_name}.", - cls=klass, - class_repr=safe_repr(klass), - modname=modname, - ) from exc - modastroid = self.ast_from_module_name(modname) - return modastroid.getattr(klass.__name__)[0] # XXX - - def infer_ast_from_something(self, obj, context=None): - """infer astroid for the given class""" - if hasattr(obj, "__class__") and not isinstance(obj, type): - klass = obj.__class__ - else: - klass = obj - try: - modname = klass.__module__ - except AttributeError as exc: - raise exceptions.AstroidBuildingError( - "Unable to get module for {class_repr}.", - cls=klass, - class_repr=safe_repr(klass), - ) from exc - except Exception as exc: - raise exceptions.AstroidImportError( - "Unexpected error while retrieving module for {class_repr}:\n" - "{error}", - cls=klass, - class_repr=safe_repr(klass), - ) from exc - try: - name = klass.__name__ - except AttributeError as exc: - raise exceptions.AstroidBuildingError( - "Unable to get name for {class_repr}:\n", - cls=klass, - class_repr=safe_repr(klass), - ) from exc - except Exception as exc: - raise exceptions.AstroidImportError( - "Unexpected error while retrieving name for {class_repr}:\n" "{error}", - cls=klass, - class_repr=safe_repr(klass), - ) from exc - # take care, on living object __module__ is regularly wrong :( - modastroid = self.ast_from_module_name(modname) - if klass is obj: - for inferred in modastroid.igetattr(name, context): - yield inferred - else: - for inferred in modastroid.igetattr(name, context): - yield inferred.instantiate_class() - - def register_failed_import_hook(self, hook): - """Registers a hook to resolve imports that cannot be found otherwise. - - `hook` must be a function that accepts a single argument `modname` which - contains the name of the module or package that could not be imported. - If `hook` can resolve the import, must return a node of type `astroid.Module`, - otherwise, it must raise `AstroidBuildingError`. - """ - self._failed_import_hooks.append(hook) - - def cache_module(self, module): - """Cache a module if no module with the same name is known yet.""" - self.astroid_cache.setdefault(module.name, module) - - def bootstrap(self): - """Bootstrap the required AST modules needed for the manager to work - - The bootstrap usually involves building the AST for the builtins - module, which is required by the rest of astroid to work correctly. - """ - from astroid import raw_building # pylint: disable=import-outside-toplevel - - raw_building._astroid_bootstrapping() - - def clear_cache(self): - """Clear the underlying cache. Also bootstraps the builtins module.""" - self.astroid_cache.clear() - self.bootstrap() diff --git a/Jobs_Collections/venv/Lib/python3.8/site-packages/astroid/mixins.py b/Jobs_Collections/venv/Lib/python3.8/site-packages/astroid/mixins.py deleted file mode 100644 index 497a840..0000000 --- a/Jobs_Collections/venv/Lib/python3.8/site-packages/astroid/mixins.py +++ /dev/null @@ -1,160 +0,0 @@ -# Copyright (c) 2010-2011, 2013-2014 LOGILAB S.A. (Paris, FRANCE) -# Copyright (c) 2014-2016, 2018 Claudiu Popa -# Copyright (c) 2014 Google, Inc. -# Copyright (c) 2014 Eevee (Alex Munroe) -# Copyright (c) 2015-2016 Ceridwen -# Copyright (c) 2015 Florian Bruhin -# Copyright (c) 2016 Jakub Wilk -# Copyright (c) 2018 Nick Drozd - -# Licensed under the LGPL: https://www.gnu.org/licenses/old-licenses/lgpl-2.1.en.html -# For details: https://github.com/PyCQA/astroid/blob/master/COPYING.LESSER - -"""This module contains some mixins for the different nodes. -""" -import itertools - -from astroid import decorators -from astroid import exceptions - - -class BlockRangeMixIn: - """override block range """ - - @decorators.cachedproperty - def blockstart_tolineno(self): - return self.lineno - - def _elsed_block_range(self, lineno, orelse, last=None): - """handle block line numbers range for try/finally, for, if and while - statements - """ - if lineno == self.fromlineno: - return lineno, lineno - if orelse: - if lineno >= orelse[0].fromlineno: - return lineno, orelse[-1].tolineno - return lineno, orelse[0].fromlineno - 1 - return lineno, last or self.tolineno - - -class FilterStmtsMixin: - """Mixin for statement filtering and assignment type""" - - def _get_filtered_stmts(self, _, node, _stmts, mystmt): - """method used in _filter_stmts to get statements and trigger break""" - if self.statement() is mystmt: - # original node's statement is the assignment, only keep - # current node (gen exp, list comp) - return [node], True - return _stmts, False - - def assign_type(self): - return self - - -class AssignTypeMixin: - def assign_type(self): - return self - - def _get_filtered_stmts(self, lookup_node, node, _stmts, mystmt): - """method used in filter_stmts""" - if self is mystmt: - return _stmts, True - if self.statement() is mystmt: - # original node's statement is the assignment, only keep - # current node (gen exp, list comp) - return [node], True - return _stmts, False - - -class ParentAssignTypeMixin(AssignTypeMixin): - def assign_type(self): - return self.parent.assign_type() - - -class ImportFromMixin(FilterStmtsMixin): - """MixIn for From and Import Nodes""" - - def _infer_name(self, frame, name): - return name - - def do_import_module(self, modname=None): - """return the ast for a module whose name is imported by - """ - # handle special case where we are on a package node importing a module - # using the same name as the package, which may end in an infinite loop - # on relative imports - # XXX: no more needed ? - mymodule = self.root() - level = getattr(self, "level", None) # Import as no level - if modname is None: - modname = self.modname - # XXX we should investigate deeper if we really want to check - # importing itself: modname and mymodule.name be relative or absolute - if mymodule.relative_to_absolute_name(modname, level) == mymodule.name: - # FIXME: we used to raise InferenceError here, but why ? - return mymodule - - return mymodule.import_module( - modname, level=level, relative_only=level and level >= 1 - ) - - def real_name(self, asname): - """get name from 'as' name""" - for name, _asname in self.names: - if name == "*": - return asname - if not _asname: - name = name.split(".", 1)[0] - _asname = name - if asname == _asname: - return name - raise exceptions.AttributeInferenceError( - "Could not find original name for {attribute} in {target!r}", - target=self, - attribute=asname, - ) - - -class MultiLineBlockMixin: - """Mixin for nodes with multi-line blocks, e.g. For and FunctionDef. - Note that this does not apply to every node with a `body` field. - For instance, an If node has a multi-line body, but the body of an - IfExpr is not multi-line, and hence cannot contain Return nodes, - Assign nodes, etc. - """ - - @decorators.cachedproperty - def _multi_line_blocks(self): - return tuple(getattr(self, field) for field in self._multi_line_block_fields) - - def _get_return_nodes_skip_functions(self): - for block in self._multi_line_blocks: - for child_node in block: - if child_node.is_function: - continue - yield from child_node._get_return_nodes_skip_functions() - - def _get_yield_nodes_skip_lambdas(self): - for block in self._multi_line_blocks: - for child_node in block: - if child_node.is_lambda: - continue - yield from child_node._get_yield_nodes_skip_lambdas() - - @decorators.cached - def _get_assign_nodes(self): - children_assign_nodes = ( - child_node._get_assign_nodes() - for block in self._multi_line_blocks - for child_node in block - ) - return list(itertools.chain.from_iterable(children_assign_nodes)) - - -class NoChildrenMixin: - """Mixin for nodes with no children, e.g. Pass.""" - - def get_children(self): - yield from () diff --git a/Jobs_Collections/venv/Lib/python3.8/site-packages/astroid/modutils.py b/Jobs_Collections/venv/Lib/python3.8/site-packages/astroid/modutils.py deleted file mode 100644 index 4e6ed86..0000000 --- a/Jobs_Collections/venv/Lib/python3.8/site-packages/astroid/modutils.py +++ /dev/null @@ -1,690 +0,0 @@ -# -*- coding: utf-8 -*- -# Copyright (c) 2014-2018, 2020 Claudiu Popa -# Copyright (c) 2014 Google, Inc. -# Copyright (c) 2014 Denis Laxalde -# Copyright (c) 2014 LOGILAB S.A. (Paris, FRANCE) -# Copyright (c) 2014 Eevee (Alex Munroe) -# Copyright (c) 2015 Florian Bruhin -# Copyright (c) 2015 Radosล‚aw Ganczarek -# Copyright (c) 2016 Derek Gustafson -# Copyright (c) 2016 Jakub Wilk -# Copyright (c) 2016 Ceridwen -# Copyright (c) 2018 Ville Skyttรค -# Copyright (c) 2018 Mario Corchero -# Copyright (c) 2018 Mario Corchero -# Copyright (c) 2018 Anthony Sottile -# Copyright (c) 2019 Hugo van Kemenade -# Copyright (c) 2019 markmcclain -# Copyright (c) 2019 BasPH - -# Licensed under the LGPL: https://www.gnu.org/licenses/old-licenses/lgpl-2.1.en.html -# For details: https://github.com/PyCQA/astroid/blob/master/COPYING.LESSER - -"""Python modules manipulation utility functions. - -:type PY_SOURCE_EXTS: tuple(str) -:var PY_SOURCE_EXTS: list of possible python source file extension - -:type STD_LIB_DIRS: set of str -:var STD_LIB_DIRS: directories where standard modules are located - -:type BUILTIN_MODULES: dict -:var BUILTIN_MODULES: dictionary with builtin module names has key -""" -import imp -import os -import platform -import sys -import itertools -from distutils.sysconfig import get_python_lib # pylint: disable=import-error - -# pylint: disable=import-error, no-name-in-module -from distutils.errors import DistutilsPlatformError - -# distutils is replaced by virtualenv with a module that does -# weird path manipulations in order to get to the -# real distutils module. -from typing import Optional, List - -from .interpreter._import import spec -from .interpreter._import import util - -if sys.platform.startswith("win"): - PY_SOURCE_EXTS = ("py", "pyw") - PY_COMPILED_EXTS = ("dll", "pyd") -else: - PY_SOURCE_EXTS = ("py",) - PY_COMPILED_EXTS = ("so",) - - -try: - # The explicit sys.prefix is to work around a patch in virtualenv that - # replaces the 'real' sys.prefix (i.e. the location of the binary) - # with the prefix from which the virtualenv was created. This throws - # off the detection logic for standard library modules, thus the - # workaround. - STD_LIB_DIRS = { - get_python_lib(standard_lib=True, prefix=sys.prefix), - # Take care of installations where exec_prefix != prefix. - get_python_lib(standard_lib=True, prefix=sys.exec_prefix), - get_python_lib(standard_lib=True), - } -# get_python_lib(standard_lib=1) is not available on pypy, set STD_LIB_DIR to -# non-valid path, see https://bugs.pypy.org/issue1164 -except DistutilsPlatformError: - STD_LIB_DIRS = set() - -if os.name == "nt": - STD_LIB_DIRS.add(os.path.join(sys.prefix, "dlls")) - try: - # real_prefix is defined when running inside virtual environments, - # created with the **virtualenv** library. - STD_LIB_DIRS.add(os.path.join(sys.real_prefix, "dlls")) - except AttributeError: - # sys.base_exec_prefix is always defined, but in a virtual environment - # created with the stdlib **venv** module, it points to the original - # installation, if the virtual env is activated. - try: - STD_LIB_DIRS.add(os.path.join(sys.base_exec_prefix, "dlls")) - except AttributeError: - pass - -if platform.python_implementation() == "PyPy": - _root = os.path.join(sys.prefix, "lib_pypy") - STD_LIB_DIRS.add(_root) - try: - # real_prefix is defined when running inside virtualenv. - STD_LIB_DIRS.add(os.path.join(sys.real_prefix, "lib_pypy")) - except AttributeError: - pass - del _root -if os.name == "posix": - # Need the real prefix is we're under a virtualenv, otherwise - # the usual one will do. - try: - prefix = sys.real_prefix - except AttributeError: - prefix = sys.prefix - - def _posix_path(path): - base_python = "python%d.%d" % sys.version_info[:2] - return os.path.join(prefix, path, base_python) - - STD_LIB_DIRS.add(_posix_path("lib")) - if sys.maxsize > 2 ** 32: - # This tries to fix a problem with /usr/lib64 builds, - # where systems are running both 32-bit and 64-bit code - # on the same machine, which reflects into the places where - # standard library could be found. More details can be found - # here http://bugs.python.org/issue1294959. - # An easy reproducing case would be - # https://github.com/PyCQA/pylint/issues/712#issuecomment-163178753 - STD_LIB_DIRS.add(_posix_path("lib64")) - -EXT_LIB_DIRS = {get_python_lib(), get_python_lib(True)} -IS_JYTHON = platform.python_implementation() == "Jython" -BUILTIN_MODULES = dict.fromkeys(sys.builtin_module_names, True) - - -class NoSourceFile(Exception): - """exception raised when we are not able to get a python - source file for a precompiled file - """ - - -def _normalize_path(path): - return os.path.normcase(os.path.abspath(path)) - - -def _canonicalize_path(path): - return os.path.realpath(os.path.expanduser(path)) - - -def _path_from_filename(filename, is_jython=IS_JYTHON): - if not is_jython: - return filename - head, has_pyclass, _ = filename.partition("$py.class") - if has_pyclass: - return head + ".py" - return filename - - -def _handle_blacklist(blacklist, dirnames, filenames): - """remove files/directories in the black list - - dirnames/filenames are usually from os.walk - """ - for norecurs in blacklist: - if norecurs in dirnames: - dirnames.remove(norecurs) - elif norecurs in filenames: - filenames.remove(norecurs) - - -_NORM_PATH_CACHE = {} - - -def _cache_normalize_path(path): - """abspath with caching""" - # _module_file calls abspath on every path in sys.path every time it's - # called; on a larger codebase this easily adds up to half a second just - # assembling path components. This cache alleviates that. - try: - return _NORM_PATH_CACHE[path] - except KeyError: - if not path: # don't cache result for '' - return _normalize_path(path) - result = _NORM_PATH_CACHE[path] = _normalize_path(path) - return result - - -def load_module_from_name(dotted_name, path=None, use_sys=True): - """Load a Python module from its name. - - :type dotted_name: str - :param dotted_name: python name of a module or package - - :type path: list or None - :param path: - optional list of path where the module or package should be - searched (use sys.path if nothing or None is given) - - :type use_sys: bool - :param use_sys: - boolean indicating whether the sys.modules dictionary should be - used or not - - - :raise ImportError: if the module or package is not found - - :rtype: module - :return: the loaded module - """ - return load_module_from_modpath(dotted_name.split("."), path, use_sys) - - -def load_module_from_modpath(parts, path: Optional[List[str]] = None, use_sys=1): - """Load a python module from its split name. - - :type parts: list(str) or tuple(str) - :param parts: - python name of a module or package split on '.' - - :param path: - Optional list of path where the module or package should be - searched (use sys.path if nothing or None is given) - - :type use_sys: bool - :param use_sys: - boolean indicating whether the sys.modules dictionary should be used or not - - :raise ImportError: if the module or package is not found - - :rtype: module - :return: the loaded module - """ - if use_sys: - try: - return sys.modules[".".join(parts)] - except KeyError: - pass - modpath = [] - prevmodule = None - for part in parts: - modpath.append(part) - curname = ".".join(modpath) - module = None - if len(modpath) != len(parts): - # even with use_sys=False, should try to get outer packages from sys.modules - module = sys.modules.get(curname) - elif use_sys: - # because it may have been indirectly loaded through a parent - module = sys.modules.get(curname) - if module is None: - mp_file, mp_filename, mp_desc = imp.find_module(part, path) - module = imp.load_module(curname, mp_file, mp_filename, mp_desc) - # mp_file still needs to be closed. - if mp_file: - mp_file.close() - if prevmodule: - setattr(prevmodule, part, module) - _file = getattr(module, "__file__", "") - prevmodule = module - if not _file and util.is_namespace(curname): - continue - if not _file and len(modpath) != len(parts): - raise ImportError("no module in %s" % ".".join(parts[len(modpath) :])) - path = [os.path.dirname(_file)] - return module - - -def load_module_from_file( - filepath: str, path: Optional[List[str]] = None, use_sys=True -): - """Load a Python module from it's path. - - :type filepath: str - :param filepath: path to the python module or package - - :param Optional[List[str]] path: - Optional list of path where the module or package should be - searched (use sys.path if nothing or None is given) - - :type use_sys: bool - :param use_sys: - boolean indicating whether the sys.modules dictionary should be - used or not - - :raise ImportError: if the module or package is not found - - :rtype: module - :return: the loaded module - """ - modpath = modpath_from_file(filepath) - return load_module_from_modpath(modpath, path, use_sys) - - -def check_modpath_has_init(path, mod_path): - """check there are some __init__.py all along the way""" - modpath = [] - for part in mod_path: - modpath.append(part) - path = os.path.join(path, part) - if not _has_init(path): - old_namespace = util.is_namespace(".".join(modpath)) - if not old_namespace: - return False - return True - - -def _get_relative_base_path(filename, path_to_check): - """Extracts the relative mod path of the file to import from - - Check if a file is within the passed in path and if so, returns the - relative mod path from the one passed in. - - If the filename is no in path_to_check, returns None - - Note this function will look for both abs and realpath of the file, - this allows to find the relative base path even if the file is a - symlink of a file in the passed in path - - Examples: - _get_relative_base_path("/a/b/c/d.py", "/a/b") -> ["c","d"] - _get_relative_base_path("/a/b/c/d.py", "/dev") -> None - """ - importable_path = None - path_to_check = os.path.normcase(path_to_check) - abs_filename = os.path.abspath(filename) - if os.path.normcase(abs_filename).startswith(path_to_check): - importable_path = abs_filename - - real_filename = os.path.realpath(filename) - if os.path.normcase(real_filename).startswith(path_to_check): - importable_path = real_filename - - if importable_path: - base_path = os.path.splitext(importable_path)[0] - relative_base_path = base_path[len(path_to_check) :] - return [pkg for pkg in relative_base_path.split(os.sep) if pkg] - - return None - - -def modpath_from_file_with_callback(filename, path=None, is_package_cb=None): - filename = os.path.expanduser(_path_from_filename(filename)) - for pathname in itertools.chain( - path or [], map(_canonicalize_path, sys.path), sys.path - ): - pathname = _cache_normalize_path(pathname) - if not pathname: - continue - modpath = _get_relative_base_path(filename, pathname) - if not modpath: - continue - if is_package_cb(pathname, modpath[:-1]): - return modpath - - raise ImportError( - "Unable to find module for %s in %s" % (filename, ", \n".join(sys.path)) - ) - - -def modpath_from_file(filename, path=None): - """Get the corresponding split module's name from a filename - - This function will return the name of a module or package split on `.`. - - :type filename: str - :param filename: file's path for which we want the module's name - - :type Optional[List[str]] path: - Optional list of path where the module or package should be - searched (use sys.path if nothing or None is given) - - :raise ImportError: - if the corresponding module's name has not been found - - :rtype: list(str) - :return: the corresponding split module's name - """ - return modpath_from_file_with_callback(filename, path, check_modpath_has_init) - - -def file_from_modpath(modpath, path=None, context_file=None): - return file_info_from_modpath(modpath, path, context_file).location - - -def file_info_from_modpath(modpath, path=None, context_file=None): - """given a mod path (i.e. split module / package name), return the - corresponding file, giving priority to source file over precompiled - file if it exists - - :type modpath: list or tuple - :param modpath: - split module's name (i.e name of a module or package split - on '.') - (this means explicit relative imports that start with dots have - empty strings in this list!) - - :type path: list or None - :param path: - optional list of path where the module or package should be - searched (use sys.path if nothing or None is given) - - :type context_file: str or None - :param context_file: - context file to consider, necessary if the identifier has been - introduced using a relative import unresolvable in the actual - context (i.e. modutils) - - :raise ImportError: if there is no such module in the directory - - :rtype: (str or None, import type) - :return: - the path to the module's file or None if it's an integrated - builtin module such as 'sys' - """ - if context_file is not None: - context = os.path.dirname(context_file) - else: - context = context_file - if modpath[0] == "xml": - # handle _xmlplus - try: - return _spec_from_modpath(["_xmlplus"] + modpath[1:], path, context) - except ImportError: - return _spec_from_modpath(modpath, path, context) - elif modpath == ["os", "path"]: - # FIXME: currently ignoring search_path... - return spec.ModuleSpec( - name="os.path", location=os.path.__file__, module_type=imp.PY_SOURCE - ) - return _spec_from_modpath(modpath, path, context) - - -def get_module_part(dotted_name, context_file=None): - """given a dotted name return the module part of the name : - - >>> get_module_part('astroid.as_string.dump') - 'astroid.as_string' - - :type dotted_name: str - :param dotted_name: full name of the identifier we are interested in - - :type context_file: str or None - :param context_file: - context file to consider, necessary if the identifier has been - introduced using a relative import unresolvable in the actual - context (i.e. modutils) - - - :raise ImportError: if there is no such module in the directory - - :rtype: str or None - :return: - the module part of the name or None if we have not been able at - all to import the given name - - XXX: deprecated, since it doesn't handle package precedence over module - (see #10066) - """ - # os.path trick - if dotted_name.startswith("os.path"): - return "os.path" - parts = dotted_name.split(".") - if context_file is not None: - # first check for builtin module which won't be considered latter - # in that case (path != None) - if parts[0] in BUILTIN_MODULES: - if len(parts) > 2: - raise ImportError(dotted_name) - return parts[0] - # don't use += or insert, we want a new list to be created ! - path = None - starti = 0 - if parts[0] == "": - assert ( - context_file is not None - ), "explicit relative import, but no context_file?" - path = [] # prevent resolving the import non-relatively - starti = 1 - while parts[starti] == "": # for all further dots: change context - starti += 1 - context_file = os.path.dirname(context_file) - for i in range(starti, len(parts)): - try: - file_from_modpath( - parts[starti : i + 1], path=path, context_file=context_file - ) - except ImportError: - if i < max(1, len(parts) - 2): - raise - return ".".join(parts[:i]) - return dotted_name - - -def get_module_files(src_directory, blacklist, list_all=False): - """given a package directory return a list of all available python - module's files in the package and its subpackages - - :type src_directory: str - :param src_directory: - path of the directory corresponding to the package - - :type blacklist: list or tuple - :param blacklist: iterable - list of files or directories to ignore. - - :type list_all: bool - :param list_all: - get files from all paths, including ones without __init__.py - - :rtype: list - :return: - the list of all available python module's files in the package and - its subpackages - """ - files = [] - for directory, dirnames, filenames in os.walk(src_directory): - if directory in blacklist: - continue - _handle_blacklist(blacklist, dirnames, filenames) - # check for __init__.py - if not list_all and "__init__.py" not in filenames: - dirnames[:] = () - continue - for filename in filenames: - if _is_python_file(filename): - src = os.path.join(directory, filename) - files.append(src) - return files - - -def get_source_file(filename, include_no_ext=False): - """given a python module's file name return the matching source file - name (the filename will be returned identically if it's already an - absolute path to a python source file...) - - :type filename: str - :param filename: python module's file name - - - :raise NoSourceFile: if no source file exists on the file system - - :rtype: str - :return: the absolute path of the source file if it exists - """ - filename = os.path.abspath(_path_from_filename(filename)) - base, orig_ext = os.path.splitext(filename) - for ext in PY_SOURCE_EXTS: - source_path = "%s.%s" % (base, ext) - if os.path.exists(source_path): - return source_path - if include_no_ext and not orig_ext and os.path.exists(base): - return base - raise NoSourceFile(filename) - - -def is_python_source(filename): - """ - rtype: bool - return: True if the filename is a python source file - """ - return os.path.splitext(filename)[1][1:] in PY_SOURCE_EXTS - - -def is_standard_module(modname, std_path=None): - """try to guess if a module is a standard python module (by default, - see `std_path` parameter's description) - - :type modname: str - :param modname: name of the module we are interested in - - :type std_path: list(str) or tuple(str) - :param std_path: list of path considered has standard - - - :rtype: bool - :return: - true if the module: - - is located on the path listed in one of the directory in `std_path` - - is a built-in module - """ - modname = modname.split(".")[0] - try: - filename = file_from_modpath([modname]) - except ImportError: - # import failed, i'm probably not so wrong by supposing it's - # not standard... - return False - # modules which are not living in a file are considered standard - # (sys and __builtin__ for instance) - if filename is None: - # we assume there are no namespaces in stdlib - return not util.is_namespace(modname) - filename = _normalize_path(filename) - for path in EXT_LIB_DIRS: - if filename.startswith(_cache_normalize_path(path)): - return False - if std_path is None: - std_path = STD_LIB_DIRS - for path in std_path: - if filename.startswith(_cache_normalize_path(path)): - return True - return False - - -def is_relative(modname, from_file): - """return true if the given module name is relative to the given - file name - - :type modname: str - :param modname: name of the module we are interested in - - :type from_file: str - :param from_file: - path of the module from which modname has been imported - - :rtype: bool - :return: - true if the module has been imported relatively to `from_file` - """ - if not os.path.isdir(from_file): - from_file = os.path.dirname(from_file) - if from_file in sys.path: - return False - try: - stream, _, _ = imp.find_module(modname.split(".")[0], [from_file]) - - # Close the stream to avoid ResourceWarnings. - if stream: - stream.close() - return True - except ImportError: - return False - - -# internal only functions ##################################################### - - -def _spec_from_modpath(modpath, path=None, context=None): - """given a mod path (i.e. split module / package name), return the - corresponding spec - - this function is used internally, see `file_from_modpath`'s - documentation for more information - """ - assert modpath - location = None - if context is not None: - try: - found_spec = spec.find_spec(modpath, [context]) - location = found_spec.location - except ImportError: - found_spec = spec.find_spec(modpath, path) - location = found_spec.location - else: - found_spec = spec.find_spec(modpath, path) - if found_spec.type == spec.ModuleType.PY_COMPILED: - try: - location = get_source_file(found_spec.location) - return found_spec._replace( - location=location, type=spec.ModuleType.PY_SOURCE - ) - except NoSourceFile: - return found_spec._replace(location=location) - elif found_spec.type == spec.ModuleType.C_BUILTIN: - # integrated builtin module - return found_spec._replace(location=None) - elif found_spec.type == spec.ModuleType.PKG_DIRECTORY: - location = _has_init(found_spec.location) - return found_spec._replace(location=location, type=spec.ModuleType.PY_SOURCE) - return found_spec - - -def _is_python_file(filename): - """return true if the given filename should be considered as a python file - - .pyc and .pyo are ignored - """ - return filename.endswith((".py", ".so", ".pyd", ".pyw")) - - -def _has_init(directory): - """if the given directory has a valid __init__ file, return its path, - else return None - """ - mod_or_pack = os.path.join(directory, "__init__") - for ext in PY_SOURCE_EXTS + ("pyc", "pyo"): - if os.path.exists(mod_or_pack + "." + ext): - return mod_or_pack + "." + ext - return None - - -def is_namespace(specobj): - return specobj.type == spec.ModuleType.PY_NAMESPACE - - -def is_directory(specobj): - return specobj.type == spec.ModuleType.PKG_DIRECTORY diff --git a/Jobs_Collections/venv/Lib/python3.8/site-packages/astroid/node_classes.py b/Jobs_Collections/venv/Lib/python3.8/site-packages/astroid/node_classes.py deleted file mode 100644 index 621dc5f..0000000 --- a/Jobs_Collections/venv/Lib/python3.8/site-packages/astroid/node_classes.py +++ /dev/null @@ -1,4862 +0,0 @@ -# -*- coding: utf-8 -*- -# Copyright (c) 2009-2011, 2013-2014 LOGILAB S.A. (Paris, FRANCE) -# Copyright (c) 2010 Daniel Harding -# Copyright (c) 2012 FELD Boris -# Copyright (c) 2013-2014 Google, Inc. -# Copyright (c) 2014-2020 Claudiu Popa -# Copyright (c) 2014 Eevee (Alex Munroe) -# Copyright (c) 2015-2016 Ceridwen -# Copyright (c) 2015 Florian Bruhin -# Copyright (c) 2016-2017 Derek Gustafson -# Copyright (c) 2016 Jared Garst -# Copyright (c) 2016 Jakub Wilk -# Copyright (c) 2016 Dave Baum -# Copyright (c) 2017-2020 Ashley Whetter -# Copyright (c) 2017, 2019 ลukasz Rogalski -# Copyright (c) 2017 rr- -# Copyright (c) 2018-2019 hippo91 -# Copyright (c) 2018 Nick Drozd -# Copyright (c) 2018 Ville Skyttรค -# Copyright (c) 2018 Bryce Guinta -# Copyright (c) 2018 brendanator -# Copyright (c) 2018 HoverHell -# Copyright (c) 2019 kavins14 -# Copyright (c) 2019 kavins14 - -# Licensed under the LGPL: https://www.gnu.org/licenses/old-licenses/lgpl-2.1.en.html -# For details: https://github.com/PyCQA/astroid/blob/master/COPYING.LESSER - -# pylint: disable=too-many-lines; https://github.com/PyCQA/astroid/issues/465 - -"""Module for some node classes. More nodes in scoped_nodes.py -""" - -import abc -import builtins as builtins_mod -import itertools -import pprint -import sys -from functools import lru_cache, singledispatch as _singledispatch - -from astroid import as_string -from astroid import bases -from astroid import context as contextmod -from astroid import decorators -from astroid import exceptions -from astroid import manager -from astroid import mixins -from astroid import util - - -BUILTINS = builtins_mod.__name__ -MANAGER = manager.AstroidManager() -PY38 = sys.version_info[:2] >= (3, 8) - - -def _is_const(value): - return isinstance(value, tuple(CONST_CLS)) - - -@decorators.raise_if_nothing_inferred -def unpack_infer(stmt, context=None): - """recursively generate nodes inferred by the given statement. - If the inferred value is a list or a tuple, recurse on the elements - """ - if isinstance(stmt, (List, Tuple)): - for elt in stmt.elts: - if elt is util.Uninferable: - yield elt - continue - yield from unpack_infer(elt, context) - return dict(node=stmt, context=context) - # if inferred is a final node, return it and stop - inferred = next(stmt.infer(context)) - if inferred is stmt: - yield inferred - return dict(node=stmt, context=context) - # else, infer recursively, except Uninferable object that should be returned as is - for inferred in stmt.infer(context): - if inferred is util.Uninferable: - yield inferred - else: - yield from unpack_infer(inferred, context) - - return dict(node=stmt, context=context) - - -def are_exclusive( - stmt1, stmt2, exceptions=None -): # pylint: disable=redefined-outer-name - """return true if the two given statements are mutually exclusive - - `exceptions` may be a list of exception names. If specified, discard If - branches and check one of the statement is in an exception handler catching - one of the given exceptions. - - algorithm : - 1) index stmt1's parents - 2) climb among stmt2's parents until we find a common parent - 3) if the common parent is a If or TryExcept statement, look if nodes are - in exclusive branches - """ - # index stmt1's parents - stmt1_parents = {} - children = {} - node = stmt1.parent - previous = stmt1 - while node: - stmt1_parents[node] = 1 - children[node] = previous - previous = node - node = node.parent - # climb among stmt2's parents until we find a common parent - node = stmt2.parent - previous = stmt2 - while node: - if node in stmt1_parents: - # if the common parent is a If or TryExcept statement, look if - # nodes are in exclusive branches - if isinstance(node, If) and exceptions is None: - if ( - node.locate_child(previous)[1] - is not node.locate_child(children[node])[1] - ): - return True - elif isinstance(node, TryExcept): - c2attr, c2node = node.locate_child(previous) - c1attr, c1node = node.locate_child(children[node]) - if c1node is not c2node: - first_in_body_caught_by_handlers = ( - c2attr == "handlers" - and c1attr == "body" - and previous.catch(exceptions) - ) - second_in_body_caught_by_handlers = ( - c2attr == "body" - and c1attr == "handlers" - and children[node].catch(exceptions) - ) - first_in_else_other_in_handlers = ( - c2attr == "handlers" and c1attr == "orelse" - ) - second_in_else_other_in_handlers = ( - c2attr == "orelse" and c1attr == "handlers" - ) - if any( - ( - first_in_body_caught_by_handlers, - second_in_body_caught_by_handlers, - first_in_else_other_in_handlers, - second_in_else_other_in_handlers, - ) - ): - return True - elif c2attr == "handlers" and c1attr == "handlers": - return previous is not children[node] - return False - previous = node - node = node.parent - return False - - -# getitem() helpers. - -_SLICE_SENTINEL = object() - - -def _slice_value(index, context=None): - """Get the value of the given slice index.""" - - if isinstance(index, Const): - if isinstance(index.value, (int, type(None))): - return index.value - elif index is None: - return None - else: - # Try to infer what the index actually is. - # Since we can't return all the possible values, - # we'll stop at the first possible value. - try: - inferred = next(index.infer(context=context)) - except exceptions.InferenceError: - pass - else: - if isinstance(inferred, Const): - if isinstance(inferred.value, (int, type(None))): - return inferred.value - - # Use a sentinel, because None can be a valid - # value that this function can return, - # as it is the case for unspecified bounds. - return _SLICE_SENTINEL - - -def _infer_slice(node, context=None): - lower = _slice_value(node.lower, context) - upper = _slice_value(node.upper, context) - step = _slice_value(node.step, context) - if all(elem is not _SLICE_SENTINEL for elem in (lower, upper, step)): - return slice(lower, upper, step) - - raise exceptions.AstroidTypeError( - message="Could not infer slice used in subscript", - node=node, - index=node.parent, - context=context, - ) - - -def _container_getitem(instance, elts, index, context=None): - """Get a slice or an item, using the given *index*, for the given sequence.""" - try: - if isinstance(index, Slice): - index_slice = _infer_slice(index, context=context) - new_cls = instance.__class__() - new_cls.elts = elts[index_slice] - new_cls.parent = instance.parent - return new_cls - if isinstance(index, Const): - return elts[index.value] - except IndexError as exc: - raise exceptions.AstroidIndexError( - message="Index {index!s} out of range", - node=instance, - index=index, - context=context, - ) from exc - except TypeError as exc: - raise exceptions.AstroidTypeError( - message="Type error {error!r}", node=instance, index=index, context=context - ) from exc - - raise exceptions.AstroidTypeError("Could not use %s as subscript index" % index) - - -OP_PRECEDENCE = { - op: precedence - for precedence, ops in enumerate( - [ - ["Lambda"], # lambda x: x + 1 - ["IfExp"], # 1 if True else 2 - ["or"], - ["and"], - ["not"], - ["Compare"], # in, not in, is, is not, <, <=, >, >=, !=, == - ["|"], - ["^"], - ["&"], - ["<<", ">>"], - ["+", "-"], - ["*", "@", "/", "//", "%"], - ["UnaryOp"], # +, -, ~ - ["**"], - ["Await"], - ] - ) - for op in ops -} - - -class NodeNG: - """ A node of the new Abstract Syntax Tree (AST). - - This is the base class for all Astroid node classes. - """ - - is_statement = False - """Whether this node indicates a statement. - - :type: bool - """ - optional_assign = False # True for For (and for Comprehension if py <3.0) - """Whether this node optionally assigns a variable. - - This is for loop assignments because loop won't necessarily perform an - assignment if the loop has no iterations. - This is also the case from comprehensions in Python 2. - - :type: bool - """ - is_function = False # True for FunctionDef nodes - """Whether this node indicates a function. - - :type: bool - """ - is_lambda = False - # Attributes below are set by the builder module or by raw factories - lineno = None - """The line that this node appears on in the source code. - - :type: int or None - """ - col_offset = None - """The column that this node appears on in the source code. - - :type: int or None - """ - parent = None - """The parent node in the syntax tree. - - :type: NodeNG or None - """ - _astroid_fields = () - """Node attributes that contain child nodes. - - This is redefined in most concrete classes. - - :type: tuple(str) - """ - _other_fields = () - """Node attributes that do not contain child nodes. - - :type: tuple(str) - """ - _other_other_fields = () - """Attributes that contain AST-dependent fields. - - :type: tuple(str) - """ - # instance specific inference function infer(node, context) - _explicit_inference = None - - def __init__(self, lineno=None, col_offset=None, parent=None): - """ - :param lineno: The line that this node appears on in the source code. - :type lineno: int or None - - :param col_offset: The column that this node appears on in the - source code. - :type col_offset: int or None - - :param parent: The parent node in the syntax tree. - :type parent: NodeNG or None - """ - self.lineno = lineno - self.col_offset = col_offset - self.parent = parent - - def infer(self, context=None, **kwargs): - """Get a generator of the inferred values. - - This is the main entry point to the inference system. - - .. seealso:: :ref:`inference` - - If the instance has some explicit inference function set, it will be - called instead of the default interface. - - :returns: The inferred values. - :rtype: iterable - """ - if context is not None: - context = context.extra_context.get(self, context) - if self._explicit_inference is not None: - # explicit_inference is not bound, give it self explicitly - try: - # pylint: disable=not-callable - return self._explicit_inference(self, context, **kwargs) - except exceptions.UseInferenceDefault: - pass - - if not context: - return self._infer(context, **kwargs) - - key = (self, context.lookupname, context.callcontext, context.boundnode) - if key in context.inferred: - return iter(context.inferred[key]) - - gen = context.cache_generator(key, self._infer(context, **kwargs)) - return util.limit_inference(gen, MANAGER.max_inferable_values) - - def _repr_name(self): - """Get a name for nice representation. - - This is either :attr:`name`, :attr:`attrname`, or the empty string. - - :returns: The nice name. - :rtype: str - """ - names = {"name", "attrname"} - if all(name not in self._astroid_fields for name in names): - return getattr(self, "name", getattr(self, "attrname", "")) - return "" - - def __str__(self): - rname = self._repr_name() - cname = type(self).__name__ - if rname: - string = "%(cname)s.%(rname)s(%(fields)s)" - alignment = len(cname) + len(rname) + 2 - else: - string = "%(cname)s(%(fields)s)" - alignment = len(cname) + 1 - result = [] - for field in self._other_fields + self._astroid_fields: - value = getattr(self, field) - width = 80 - len(field) - alignment - lines = pprint.pformat(value, indent=2, width=width).splitlines(True) - - inner = [lines[0]] - for line in lines[1:]: - inner.append(" " * alignment + line) - result.append("%s=%s" % (field, "".join(inner))) - - return string % { - "cname": cname, - "rname": rname, - "fields": (",\n" + " " * alignment).join(result), - } - - def __repr__(self): - rname = self._repr_name() - if rname: - string = "<%(cname)s.%(rname)s l.%(lineno)s at 0x%(id)x>" - else: - string = "<%(cname)s l.%(lineno)s at 0x%(id)x>" - return string % { - "cname": type(self).__name__, - "rname": rname, - "lineno": self.fromlineno, - "id": id(self), - } - - def accept(self, visitor): - """Visit this node using the given visitor.""" - func = getattr(visitor, "visit_" + self.__class__.__name__.lower()) - return func(self) - - def get_children(self): - """Get the child nodes below this node. - - :returns: The children. - :rtype: iterable(NodeNG) - """ - for field in self._astroid_fields: - attr = getattr(self, field) - if attr is None: - continue - if isinstance(attr, (list, tuple)): - yield from attr - else: - yield attr - - def last_child(self): - """An optimized version of list(get_children())[-1] - - :returns: The last child, or None if no children exist. - :rtype: NodeNG or None - """ - for field in self._astroid_fields[::-1]: - attr = getattr(self, field) - if not attr: # None or empty listy / tuple - continue - if isinstance(attr, (list, tuple)): - return attr[-1] - - return attr - return None - - def parent_of(self, node): - """Check if this node is the parent of the given node. - - :param node: The node to check if it is the child. - :type node: NodeNG - - :returns: True if this node is the parent of the given node, - False otherwise. - :rtype: bool - """ - parent = node.parent - while parent is not None: - if self is parent: - return True - parent = parent.parent - return False - - def statement(self): - """The first parent node, including self, marked as statement node. - - :returns: The first parent statement. - :rtype: NodeNG - """ - if self.is_statement: - return self - return self.parent.statement() - - def frame(self): - """The first parent frame node. - - A frame node is a :class:`Module`, :class:`FunctionDef`, - or :class:`ClassDef`. - - :returns: The first parent frame node. - :rtype: Module or FunctionDef or ClassDef - """ - return self.parent.frame() - - def scope(self): - """The first parent node defining a new scope. - - :returns: The first parent scope node. - :rtype: Module or FunctionDef or ClassDef or Lambda or GenExpr - """ - if self.parent: - return self.parent.scope() - return None - - def root(self): - """Return the root node of the syntax tree. - - :returns: The root node. - :rtype: Module - """ - if self.parent: - return self.parent.root() - return self - - def child_sequence(self, child): - """Search for the sequence that contains this child. - - :param child: The child node to search sequences for. - :type child: NodeNG - - :returns: The sequence containing the given child node. - :rtype: iterable(NodeNG) - - :raises AstroidError: If no sequence could be found that contains - the given child. - """ - for field in self._astroid_fields: - node_or_sequence = getattr(self, field) - if node_or_sequence is child: - return [node_or_sequence] - # /!\ compiler.ast Nodes have an __iter__ walking over child nodes - if ( - isinstance(node_or_sequence, (tuple, list)) - and child in node_or_sequence - ): - return node_or_sequence - - msg = "Could not find %s in %s's children" - raise exceptions.AstroidError(msg % (repr(child), repr(self))) - - def locate_child(self, child): - """Find the field of this node that contains the given child. - - :param child: The child node to search fields for. - :type child: NodeNG - - :returns: A tuple of the name of the field that contains the child, - and the sequence or node that contains the child node. - :rtype: tuple(str, iterable(NodeNG) or NodeNG) - - :raises AstroidError: If no field could be found that contains - the given child. - """ - for field in self._astroid_fields: - node_or_sequence = getattr(self, field) - # /!\ compiler.ast Nodes have an __iter__ walking over child nodes - if child is node_or_sequence: - return field, child - if ( - isinstance(node_or_sequence, (tuple, list)) - and child in node_or_sequence - ): - return field, node_or_sequence - msg = "Could not find %s in %s's children" - raise exceptions.AstroidError(msg % (repr(child), repr(self))) - - # FIXME : should we merge child_sequence and locate_child ? locate_child - # is only used in are_exclusive, child_sequence one time in pylint. - - def next_sibling(self): - """The next sibling statement node. - - :returns: The next sibling statement node. - :rtype: NodeNG or None - """ - return self.parent.next_sibling() - - def previous_sibling(self): - """The previous sibling statement. - - :returns: The previous sibling statement node. - :rtype: NodeNG or None - """ - return self.parent.previous_sibling() - - # these are lazy because they're relatively expensive to compute for every - # single node, and they rarely get looked at - - @decorators.cachedproperty - def fromlineno(self): - """The first line that this node appears on in the source code. - - :type: int or None - """ - if self.lineno is None: - return self._fixed_source_line() - - return self.lineno - - @decorators.cachedproperty - def tolineno(self): - """The last line that this node appears on in the source code. - - :type: int or None - """ - if not self._astroid_fields: - # can't have children - lastchild = None - else: - lastchild = self.last_child() - if lastchild is None: - return self.fromlineno - - return lastchild.tolineno - - def _fixed_source_line(self): - """Attempt to find the line that this node appears on. - - We need this method since not all nodes have :attr:`lineno` set. - - :returns: The line number of this node, - or None if this could not be determined. - :rtype: int or None - """ - line = self.lineno - _node = self - try: - while line is None: - _node = next(_node.get_children()) - line = _node.lineno - except StopIteration: - _node = self.parent - while _node and line is None: - line = _node.lineno - _node = _node.parent - return line - - def block_range(self, lineno): - """Get a range from the given line number to where this node ends. - - :param lineno: The line number to start the range at. - :type lineno: int - - :returns: The range of line numbers that this node belongs to, - starting at the given line number. - :rtype: tuple(int, int or None) - """ - return lineno, self.tolineno - - def set_local(self, name, stmt): - """Define that the given name is declared in the given statement node. - - This definition is stored on the parent scope node. - - .. seealso:: :meth:`scope` - - :param name: The name that is being defined. - :type name: str - - :param stmt: The statement that defines the given name. - :type stmt: NodeNG - """ - self.parent.set_local(name, stmt) - - def nodes_of_class(self, klass, skip_klass=None): - """Get the nodes (including this one or below) of the given types. - - :param klass: The types of node to search for. - :type klass: builtins.type or tuple(builtins.type) - - :param skip_klass: The types of node to ignore. This is useful to ignore - subclasses of :attr:`klass`. - :type skip_klass: builtins.type or tuple(builtins.type) - - :returns: The node of the given types. - :rtype: iterable(NodeNG) - """ - if isinstance(self, klass): - yield self - - if skip_klass is None: - for child_node in self.get_children(): - yield from child_node.nodes_of_class(klass, skip_klass) - - return - - for child_node in self.get_children(): - if isinstance(child_node, skip_klass): - continue - yield from child_node.nodes_of_class(klass, skip_klass) - - @decorators.cached - def _get_assign_nodes(self): - return [] - - def _get_name_nodes(self): - for child_node in self.get_children(): - yield from child_node._get_name_nodes() - - def _get_return_nodes_skip_functions(self): - yield from () - - def _get_yield_nodes_skip_lambdas(self): - yield from () - - def _infer_name(self, frame, name): - # overridden for ImportFrom, Import, Global, TryExcept and Arguments - pass - - def _infer(self, context=None): - """we don't know how to resolve a statement by default""" - # this method is overridden by most concrete classes - raise exceptions.InferenceError( - "No inference function for {node!r}.", node=self, context=context - ) - - def inferred(self): - """Get a list of the inferred values. - - .. seealso:: :ref:`inference` - - :returns: The inferred values. - :rtype: list - """ - return list(self.infer()) - - def instantiate_class(self): - """Instantiate an instance of the defined class. - - .. note:: - - On anything other than a :class:`ClassDef` this will return self. - - :returns: An instance of the defined class. - :rtype: object - """ - return self - - def has_base(self, node): - """Check if this node inherits from the given type. - - :param node: The node defining the base to look for. - Usually this is a :class:`Name` node. - :type node: NodeNG - """ - return False - - def callable(self): - """Whether this node defines something that is callable. - - :returns: True if this defines something that is callable, - False otherwise. - :rtype: bool - """ - return False - - def eq(self, value): - return False - - def as_string(self): - """Get the source code that this node represents. - - :returns: The source code. - :rtype: str - """ - return as_string.to_code(self) - - def repr_tree( - self, - ids=False, - include_linenos=False, - ast_state=False, - indent=" ", - max_depth=0, - max_width=80, - ): - """Get a string representation of the AST from this node. - - :param ids: If true, includes the ids with the node type names. - :type ids: bool - - :param include_linenos: If true, includes the line numbers and - column offsets. - :type include_linenos: bool - - :param ast_state: If true, includes information derived from - the whole AST like local and global variables. - :type ast_state: bool - - :param indent: A string to use to indent the output string. - :type indent: str - - :param max_depth: If set to a positive integer, won't return - nodes deeper than max_depth in the string. - :type max_depth: int - - :param max_width: Attempt to format the output string to stay - within this number of characters, but can exceed it under some - circumstances. Only positive integer values are valid, the default is 80. - :type max_width: int - - :returns: The string representation of the AST. - :rtype: str - """ - # pylint: disable=too-many-statements - @_singledispatch - def _repr_tree(node, result, done, cur_indent="", depth=1): - """Outputs a representation of a non-tuple/list, non-node that's - contained within an AST, including strings. - """ - lines = pprint.pformat( - node, width=max(max_width - len(cur_indent), 1) - ).splitlines(True) - result.append(lines[0]) - result.extend([cur_indent + line for line in lines[1:]]) - return len(lines) != 1 - - # pylint: disable=unused-variable; doesn't understand singledispatch - @_repr_tree.register(tuple) - @_repr_tree.register(list) - def _repr_seq(node, result, done, cur_indent="", depth=1): - """Outputs a representation of a sequence that's contained within an AST.""" - cur_indent += indent - result.append("[") - if not node: - broken = False - elif len(node) == 1: - broken = _repr_tree(node[0], result, done, cur_indent, depth) - elif len(node) == 2: - broken = _repr_tree(node[0], result, done, cur_indent, depth) - if not broken: - result.append(", ") - else: - result.append(",\n") - result.append(cur_indent) - broken = _repr_tree(node[1], result, done, cur_indent, depth) or broken - else: - result.append("\n") - result.append(cur_indent) - for child in node[:-1]: - _repr_tree(child, result, done, cur_indent, depth) - result.append(",\n") - result.append(cur_indent) - _repr_tree(node[-1], result, done, cur_indent, depth) - broken = True - result.append("]") - return broken - - # pylint: disable=unused-variable; doesn't understand singledispatch - @_repr_tree.register(NodeNG) - def _repr_node(node, result, done, cur_indent="", depth=1): - """Outputs a strings representation of an astroid node.""" - if node in done: - result.append( - indent - + " max_depth: - result.append("...") - return False - depth += 1 - cur_indent += indent - if ids: - result.append("%s<0x%x>(\n" % (type(node).__name__, id(node))) - else: - result.append("%s(" % type(node).__name__) - fields = [] - if include_linenos: - fields.extend(("lineno", "col_offset")) - fields.extend(node._other_fields) - fields.extend(node._astroid_fields) - if ast_state: - fields.extend(node._other_other_fields) - if not fields: - broken = False - elif len(fields) == 1: - result.append("%s=" % fields[0]) - broken = _repr_tree( - getattr(node, fields[0]), result, done, cur_indent, depth - ) - else: - result.append("\n") - result.append(cur_indent) - for field in fields[:-1]: - result.append("%s=" % field) - _repr_tree(getattr(node, field), result, done, cur_indent, depth) - result.append(",\n") - result.append(cur_indent) - result.append("%s=" % fields[-1]) - _repr_tree(getattr(node, fields[-1]), result, done, cur_indent, depth) - broken = True - result.append(")") - return broken - - result = [] - _repr_tree(self, result, set()) - return "".join(result) - - def bool_value(self, context=None): - """Determine the boolean value of this node. - - The boolean value of a node can have three - possible values: - - * False: For instance, empty data structures, - False, empty strings, instances which return - explicitly False from the __nonzero__ / __bool__ - method. - * True: Most of constructs are True by default: - classes, functions, modules etc - * Uninferable: The inference engine is uncertain of the - node's value. - - :returns: The boolean value of this node. - :rtype: bool or Uninferable - """ - return util.Uninferable - - def op_precedence(self): - # Look up by class name or default to highest precedence - return OP_PRECEDENCE.get(self.__class__.__name__, len(OP_PRECEDENCE)) - - def op_left_associative(self): - # Everything is left associative except `**` and IfExp - return True - - -class Statement(NodeNG): - """Statement node adding a few attributes""" - - is_statement = True - """Whether this node indicates a statement. - - :type: bool - """ - - def next_sibling(self): - """The next sibling statement node. - - :returns: The next sibling statement node. - :rtype: NodeNG or None - """ - stmts = self.parent.child_sequence(self) - index = stmts.index(self) - try: - return stmts[index + 1] - except IndexError: - pass - - def previous_sibling(self): - """The previous sibling statement. - - :returns: The previous sibling statement node. - :rtype: NodeNG or None - """ - stmts = self.parent.child_sequence(self) - index = stmts.index(self) - if index >= 1: - return stmts[index - 1] - return None - - -class _BaseContainer( - mixins.ParentAssignTypeMixin, NodeNG, bases.Instance, metaclass=abc.ABCMeta -): - """Base class for Set, FrozenSet, Tuple and List.""" - - _astroid_fields = ("elts",) - - def __init__(self, lineno=None, col_offset=None, parent=None): - """ - :param lineno: The line that this node appears on in the source code. - :type lineno: int or None - - :param col_offset: The column that this node appears on in the - source code. - :type col_offset: int or None - - :param parent: The parent node in the syntax tree. - :type parent: NodeNG or None - """ - self.elts = [] - """The elements in the node. - - :type: list(NodeNG) - """ - - super().__init__(lineno, col_offset, parent) - - def postinit(self, elts): - """Do some setup after initialisation. - - :param elts: The list of elements the that node contains. - :type elts: list(NodeNG) - """ - self.elts = elts - - @classmethod - def from_elements(cls, elts=None): - """Create a node of this type from the given list of elements. - - :param elts: The list of elements that the node should contain. - :type elts: list(NodeNG) - - :returns: A new node containing the given elements. - :rtype: NodeNG - """ - node = cls() - if elts is None: - node.elts = [] - else: - node.elts = [const_factory(e) if _is_const(e) else e for e in elts] - return node - - def itered(self): - """An iterator over the elements this node contains. - - :returns: The contents of this node. - :rtype: iterable(NodeNG) - """ - return self.elts - - def bool_value(self, context=None): - """Determine the boolean value of this node. - - :returns: The boolean value of this node. - :rtype: bool or Uninferable - """ - return bool(self.elts) - - @abc.abstractmethod - def pytype(self): - """Get the name of the type that this node represents. - - :returns: The name of the type. - :rtype: str - """ - - def get_children(self): - yield from self.elts - - -class LookupMixIn: - """Mixin to look up a name in the right scope.""" - - @lru_cache(maxsize=None) - def lookup(self, name): - """Lookup where the given variable is assigned. - - The lookup starts from self's scope. If self is not a frame itself - and the name is found in the inner frame locals, statements will be - filtered to remove ignorable statements according to self's location. - - :param name: The name of the variable to find assignments for. - :type name: str - - :returns: The scope node and the list of assignments associated to the - given name according to the scope where it has been found (locals, - globals or builtin). - :rtype: tuple(str, list(NodeNG)) - """ - return self.scope().scope_lookup(self, name) - - def ilookup(self, name): - """Lookup the inferred values of the given variable. - - :param name: The variable name to find values for. - :type name: str - - :returns: The inferred values of the statements returned from - :meth:`lookup`. - :rtype: iterable - """ - frame, stmts = self.lookup(name) - context = contextmod.InferenceContext() - return bases._infer_stmts(stmts, context, frame) - - def _get_filtered_node_statements(self, nodes): - statements = [(node, node.statement()) for node in nodes] - # Next we check if we have ExceptHandlers that are parent - # of the underlying variable, in which case the last one survives - if len(statements) > 1 and all( - isinstance(stmt, ExceptHandler) for _, stmt in statements - ): - statements = [ - (node, stmt) for node, stmt in statements if stmt.parent_of(self) - ] - return statements - - def _filter_stmts(self, stmts, frame, offset): - """Filter the given list of statements to remove ignorable statements. - - If self is not a frame itself and the name is found in the inner - frame locals, statements will be filtered to remove ignorable - statements according to self's location. - - :param stmts: The statements to filter. - :type stmts: list(NodeNG) - - :param frame: The frame that all of the given statements belong to. - :type frame: NodeNG - - :param offset: The line offset to filter statements up to. - :type offset: int - - :returns: The filtered statements. - :rtype: list(NodeNG) - """ - # if offset == -1, my actual frame is not the inner frame but its parent - # - # class A(B): pass - # - # we need this to resolve B correctly - if offset == -1: - myframe = self.frame().parent.frame() - else: - myframe = self.frame() - # If the frame of this node is the same as the statement - # of this node, then the node is part of a class or - # a function definition and the frame of this node should be the - # the upper frame, not the frame of the definition. - # For more information why this is important, - # see Pylint issue #295. - # For example, for 'b', the statement is the same - # as the frame / scope: - # - # def test(b=1): - # ... - - if self.statement() is myframe and myframe.parent: - myframe = myframe.parent.frame() - mystmt = self.statement() - # line filtering if we are in the same frame - # - # take care node may be missing lineno information (this is the case for - # nodes inserted for living objects) - if myframe is frame and mystmt.fromlineno is not None: - assert mystmt.fromlineno is not None, mystmt - mylineno = mystmt.fromlineno + offset - else: - # disabling lineno filtering - mylineno = 0 - - _stmts = [] - _stmt_parents = [] - statements = self._get_filtered_node_statements(stmts) - - for node, stmt in statements: - # line filtering is on and we have reached our location, break - if stmt.fromlineno > mylineno > 0: - break - # Ignore decorators with the same name as the - # decorated function - # Fixes issue #375 - if mystmt is stmt and is_from_decorator(self): - continue - assert hasattr(node, "assign_type"), ( - node, - node.scope(), - node.scope().locals, - ) - assign_type = node.assign_type() - if node.has_base(self): - break - - _stmts, done = assign_type._get_filtered_stmts(self, node, _stmts, mystmt) - if done: - break - - optional_assign = assign_type.optional_assign - if optional_assign and assign_type.parent_of(self): - # we are inside a loop, loop var assignment is hiding previous - # assignment - _stmts = [node] - _stmt_parents = [stmt.parent] - continue - - if isinstance(assign_type, NamedExpr): - _stmts = [node] - continue - - # XXX comment various branches below!!! - try: - pindex = _stmt_parents.index(stmt.parent) - except ValueError: - pass - else: - # we got a parent index, this means the currently visited node - # is at the same block level as a previously visited node - if _stmts[pindex].assign_type().parent_of(assign_type): - # both statements are not at the same block level - continue - # if currently visited node is following previously considered - # assignment and both are not exclusive, we can drop the - # previous one. For instance in the following code :: - # - # if a: - # x = 1 - # else: - # x = 2 - # print x - # - # we can't remove neither x = 1 nor x = 2 when looking for 'x' - # of 'print x'; while in the following :: - # - # x = 1 - # x = 2 - # print x - # - # we can remove x = 1 when we see x = 2 - # - # moreover, on loop assignment types, assignment won't - # necessarily be done if the loop has no iteration, so we don't - # want to clear previous assignments if any (hence the test on - # optional_assign) - if not (optional_assign or are_exclusive(_stmts[pindex], node)): - if ( - # In case of partial function node, if the statement is different - # from the origin function then it can be deleted otherwise it should - # remain to be able to correctly infer the call to origin function. - not node.is_function - or node.qname() != "PartialFunction" - or node.name != _stmts[pindex].name - ): - del _stmt_parents[pindex] - del _stmts[pindex] - if isinstance(node, AssignName): - if not optional_assign and stmt.parent is mystmt.parent: - _stmts = [] - _stmt_parents = [] - elif isinstance(node, DelName): - _stmts = [] - _stmt_parents = [] - continue - if not are_exclusive(self, node): - _stmts.append(node) - _stmt_parents.append(stmt.parent) - return _stmts - - -# Name classes - - -class AssignName( - mixins.NoChildrenMixin, LookupMixIn, mixins.ParentAssignTypeMixin, NodeNG -): - """Variation of :class:`ast.Assign` representing assignment to a name. - - An :class:`AssignName` is the name of something that is assigned to. - This includes variables defined in a function signature or in a loop. - - >>> node = astroid.extract_node('variable = range(10)') - >>> node - - >>> list(node.get_children()) - [, ] - >>> list(node.get_children())[0].as_string() - 'variable' - """ - - _other_fields = ("name",) - - def __init__(self, name=None, lineno=None, col_offset=None, parent=None): - """ - :param name: The name that is assigned to. - :type name: str or None - - :param lineno: The line that this node appears on in the source code. - :type lineno: int or None - - :param col_offset: The column that this node appears on in the - source code. - :type col_offset: int or None - - :param parent: The parent node in the syntax tree. - :type parent: NodeNG or None - """ - self.name = name - """The name that is assigned to. - - :type: str or None - """ - - super().__init__(lineno, col_offset, parent) - - -class DelName( - mixins.NoChildrenMixin, LookupMixIn, mixins.ParentAssignTypeMixin, NodeNG -): - """Variation of :class:`ast.Delete` representing deletion of a name. - - A :class:`DelName` is the name of something that is deleted. - - >>> node = astroid.extract_node("del variable #@") - >>> list(node.get_children()) - [] - >>> list(node.get_children())[0].as_string() - 'variable' - """ - - _other_fields = ("name",) - - def __init__(self, name=None, lineno=None, col_offset=None, parent=None): - """ - :param name: The name that is being deleted. - :type name: str or None - - :param lineno: The line that this node appears on in the source code. - :type lineno: int or None - - :param col_offset: The column that this node appears on in the - source code. - :type col_offset: int or None - - :param parent: The parent node in the syntax tree. - :type parent: NodeNG or None - """ - self.name = name - """The name that is being deleted. - - :type: str or None - """ - - super().__init__(lineno, col_offset, parent) - - -class Name(mixins.NoChildrenMixin, LookupMixIn, NodeNG): - """Class representing an :class:`ast.Name` node. - - A :class:`Name` node is something that is named, but not covered by - :class:`AssignName` or :class:`DelName`. - - >>> node = astroid.extract_node('range(10)') - >>> node - - >>> list(node.get_children()) - [, ] - >>> list(node.get_children())[0].as_string() - 'range' - """ - - _other_fields = ("name",) - - def __init__(self, name=None, lineno=None, col_offset=None, parent=None): - """ - :param name: The name that this node refers to. - :type name: str or None - - :param lineno: The line that this node appears on in the source code. - :type lineno: int or None - - :param col_offset: The column that this node appears on in the - source code. - :type col_offset: int or None - - :param parent: The parent node in the syntax tree. - :type parent: NodeNG or None - """ - self.name = name - """The name that this node refers to. - - :type: str or None - """ - - super().__init__(lineno, col_offset, parent) - - def _get_name_nodes(self): - yield self - - for child_node in self.get_children(): - yield from child_node._get_name_nodes() - - -class Arguments(mixins.AssignTypeMixin, NodeNG): - """Class representing an :class:`ast.arguments` node. - - An :class:`Arguments` node represents that arguments in a - function definition. - - >>> node = astroid.extract_node('def foo(bar): pass') - >>> node - - >>> node.args - - """ - - # Python 3.4+ uses a different approach regarding annotations, - # each argument is a new class, _ast.arg, which exposes an - # 'annotation' attribute. In astroid though, arguments are exposed - # as is in the Arguments node and the only way to expose annotations - # is by using something similar with Python 3.3: - # - we expose 'varargannotation' and 'kwargannotation' of annotations - # of varargs and kwargs. - # - we expose 'annotation', a list with annotations for - # for each normal argument. If an argument doesn't have an - # annotation, its value will be None. - # pylint: disable=too-many-instance-attributes - _astroid_fields = ( - "args", - "defaults", - "kwonlyargs", - "posonlyargs", - "posonlyargs_annotations", - "kw_defaults", - "annotations", - "varargannotation", - "kwargannotation", - "kwonlyargs_annotations", - "type_comment_args", - "type_comment_kwonlyargs", - "type_comment_posonlyargs", - ) - varargannotation = None - """The type annotation for the variable length arguments. - - :type: NodeNG - """ - kwargannotation = None - """The type annotation for the variable length keyword arguments. - - :type: NodeNG - """ - - _other_fields = ("vararg", "kwarg") - - def __init__(self, vararg=None, kwarg=None, parent=None): - """ - :param vararg: The name of the variable length arguments. - :type vararg: str or None - - :param kwarg: The name of the variable length keyword arguments. - :type kwarg: str or None - - :param parent: The parent node in the syntax tree. - :type parent: NodeNG or None - """ - super().__init__(parent=parent) - self.vararg = vararg - """The name of the variable length arguments. - - :type: str or None - """ - - self.kwarg = kwarg - """The name of the variable length keyword arguments. - - :type: str or None - """ - - self.args = [] - """The names of the required arguments. - - :type: list(AssignName) - """ - - self.defaults = [] - """The default values for arguments that can be passed positionally. - - :type: list(NodeNG) - """ - - self.kwonlyargs = [] - """The keyword arguments that cannot be passed positionally. - - :type: list(AssignName) - """ - - self.posonlyargs = [] - """The arguments that can only be passed positionally. - - :type: list(AssignName) - """ - - self.kw_defaults = [] - """The default values for keyword arguments that cannot be passed positionally. - - :type: list(NodeNG) - """ - - self.annotations = [] - """The type annotations of arguments that can be passed positionally. - - :type: list(NodeNG) - """ - - self.posonlyargs_annotations = [] - """The type annotations of arguments that can only be passed positionally. - - :type: list(NodeNG) - """ - - self.kwonlyargs_annotations = [] - """The type annotations of arguments that cannot be passed positionally. - - :type: list(NodeNG) - """ - - self.type_comment_args = [] - """The type annotation, passed by a type comment, of each argument. - - If an argument does not have a type comment, - the value for that argument will be None. - - :type: list(NodeNG or None) - """ - - self.type_comment_kwonlyargs = [] - """The type annotation, passed by a type comment, of each keyword only argument. - - If an argument does not have a type comment, - the value for that argument will be None. - - :type: list(NodeNG or None) - """ - - self.type_comment_posonlyargs = [] - """The type annotation, passed by a type comment, of each positional argument. - - If an argument does not have a type comment, - the value for that argument will be None. - - :type: list(NodeNG or None) - """ - - # pylint: disable=too-many-arguments - def postinit( - self, - args, - defaults, - kwonlyargs, - kw_defaults, - annotations, - posonlyargs=None, - kwonlyargs_annotations=None, - posonlyargs_annotations=None, - varargannotation=None, - kwargannotation=None, - type_comment_args=None, - type_comment_kwonlyargs=None, - type_comment_posonlyargs=None, - ): - """Do some setup after initialisation. - - :param args: The names of the required arguments. - :type args: list(AssignName) - - :param defaults: The default values for arguments that can be passed - positionally. - :type defaults: list(NodeNG) - - :param kwonlyargs: The keyword arguments that cannot be passed - positionally. - :type kwonlyargs: list(AssignName) - - :param posonlyargs: The arguments that can only be passed - positionally. - :type kwonlyargs: list(AssignName) - - :param kw_defaults: The default values for keyword arguments that - cannot be passed positionally. - :type kw_defaults: list(NodeNG) - - :param annotations: The type annotations of arguments that can be - passed positionally. - :type annotations: list(NodeNG) - - :param kwonlyargs_annotations: The type annotations of arguments that - cannot be passed positionally. This should always be passed in - Python 3. - :type kwonlyargs_annotations: list(NodeNG) - - :param posonlyargs_annotations: The type annotations of arguments that - can only be passed positionally. This should always be passed in - Python 3. - :type posonlyargs_annotations: list(NodeNG) - - :param varargannotation: The type annotation for the variable length - arguments. - :type varargannotation: NodeNG - - :param kwargannotation: The type annotation for the variable length - keyword arguments. - :type kwargannotation: NodeNG - - :param type_comment_args: The type annotation, - passed by a type comment, of each argument. - :type type_comment_args: list(NodeNG or None) - - :param type_comment_args: The type annotation, - passed by a type comment, of each keyword only argument. - :type type_comment_args: list(NodeNG or None) - - :param type_comment_args: The type annotation, - passed by a type comment, of each positional argument. - :type type_comment_args: list(NodeNG or None) - """ - self.args = args - self.defaults = defaults - self.kwonlyargs = kwonlyargs - self.posonlyargs = posonlyargs - self.kw_defaults = kw_defaults - self.annotations = annotations - self.kwonlyargs_annotations = kwonlyargs_annotations - self.posonlyargs_annotations = posonlyargs_annotations - self.varargannotation = varargannotation - self.kwargannotation = kwargannotation - self.type_comment_args = type_comment_args - self.type_comment_kwonlyargs = type_comment_kwonlyargs - self.type_comment_posonlyargs = type_comment_posonlyargs - - # pylint: disable=too-many-arguments - - def _infer_name(self, frame, name): - if self.parent is frame: - return name - return None - - @decorators.cachedproperty - def fromlineno(self): - """The first line that this node appears on in the source code. - - :type: int or None - """ - lineno = super().fromlineno - return max(lineno, self.parent.fromlineno or 0) - - @decorators.cachedproperty - def arguments(self): - """Get all the arguments for this node, including positional only and positional and keyword""" - return list(itertools.chain((self.posonlyargs or ()), self.args or ())) - - def format_args(self): - """Get the arguments formatted as string. - - :returns: The formatted arguments. - :rtype: str - """ - result = [] - positional_only_defaults = [] - positional_or_keyword_defaults = self.defaults - if self.defaults: - args = self.args or [] - positional_or_keyword_defaults = self.defaults[-len(args) :] - positional_only_defaults = self.defaults[: len(self.defaults) - len(args)] - - if self.posonlyargs: - result.append( - _format_args( - self.posonlyargs, - positional_only_defaults, - self.posonlyargs_annotations, - ) - ) - result.append("/") - if self.args: - result.append( - _format_args( - self.args, - positional_or_keyword_defaults, - getattr(self, "annotations", None), - ) - ) - if self.vararg: - result.append("*%s" % self.vararg) - if self.kwonlyargs: - if not self.vararg: - result.append("*") - result.append( - _format_args( - self.kwonlyargs, self.kw_defaults, self.kwonlyargs_annotations - ) - ) - if self.kwarg: - result.append("**%s" % self.kwarg) - return ", ".join(result) - - def default_value(self, argname): - """Get the default value for an argument. - - :param argname: The name of the argument to get the default value for. - :type argname: str - - :raises NoDefault: If there is no default value defined for the - given argument. - """ - args = self.arguments - index = _find_arg(argname, args)[0] - if index is not None: - idx = index - (len(args) - len(self.defaults)) - if idx >= 0: - return self.defaults[idx] - index = _find_arg(argname, self.kwonlyargs)[0] - if index is not None and self.kw_defaults[index] is not None: - return self.kw_defaults[index] - raise exceptions.NoDefault(func=self.parent, name=argname) - - def is_argument(self, name): - """Check if the given name is defined in the arguments. - - :param name: The name to check for. - :type name: str - - :returns: True if the given name is defined in the arguments, - False otherwise. - :rtype: bool - """ - if name == self.vararg: - return True - if name == self.kwarg: - return True - return ( - self.find_argname(name, rec=True)[1] is not None - or self.kwonlyargs - and _find_arg(name, self.kwonlyargs, rec=True)[1] is not None - ) - - def find_argname(self, argname, rec=False): - """Get the index and :class:`AssignName` node for given name. - - :param argname: The name of the argument to search for. - :type argname: str - - :param rec: Whether or not to include arguments in unpacked tuples - in the search. - :type rec: bool - - :returns: The index and node for the argument. - :rtype: tuple(str or None, AssignName or None) - """ - if self.arguments: - return _find_arg(argname, self.arguments, rec) - return None, None - - def get_children(self): - yield from self.posonlyargs or () - - for elt in self.posonlyargs_annotations: - if elt is not None: - yield elt - - yield from self.args or () - - yield from self.defaults - yield from self.kwonlyargs - - for elt in self.kw_defaults: - if elt is not None: - yield elt - - for elt in self.annotations: - if elt is not None: - yield elt - - if self.varargannotation is not None: - yield self.varargannotation - - if self.kwargannotation is not None: - yield self.kwargannotation - - for elt in self.kwonlyargs_annotations: - if elt is not None: - yield elt - - -def _find_arg(argname, args, rec=False): - for i, arg in enumerate(args): - if isinstance(arg, Tuple): - if rec: - found = _find_arg(argname, arg.elts) - if found[0] is not None: - return found - elif arg.name == argname: - return i, arg - return None, None - - -def _format_args(args, defaults=None, annotations=None): - values = [] - if args is None: - return "" - if annotations is None: - annotations = [] - if defaults is not None: - default_offset = len(args) - len(defaults) - packed = itertools.zip_longest(args, annotations) - for i, (arg, annotation) in enumerate(packed): - if isinstance(arg, Tuple): - values.append("(%s)" % _format_args(arg.elts)) - else: - argname = arg.name - default_sep = "=" - if annotation is not None: - argname += ": " + annotation.as_string() - default_sep = " = " - values.append(argname) - - if defaults is not None and i >= default_offset: - if defaults[i - default_offset] is not None: - values[-1] += default_sep + defaults[i - default_offset].as_string() - return ", ".join(values) - - -class AssignAttr(mixins.ParentAssignTypeMixin, NodeNG): - """Variation of :class:`ast.Assign` representing assignment to an attribute. - - >>> node = astroid.extract_node('self.attribute = range(10)') - >>> node - - >>> list(node.get_children()) - [, ] - >>> list(node.get_children())[0].as_string() - 'self.attribute' - """ - - _astroid_fields = ("expr",) - _other_fields = ("attrname",) - expr = None - """What has the attribute that is being assigned to. - - :type: NodeNG or None - """ - - def __init__(self, attrname=None, lineno=None, col_offset=None, parent=None): - """ - :param attrname: The name of the attribute being assigned to. - :type attrname: str or None - - :param lineno: The line that this node appears on in the source code. - :type lineno: int or None - - :param col_offset: The column that this node appears on in the - source code. - :type col_offset: int or None - - :param parent: The parent node in the syntax tree. - :type parent: NodeNG or None - """ - self.attrname = attrname - """The name of the attribute being assigned to. - - :type: str or None - """ - - super().__init__(lineno, col_offset, parent) - - def postinit(self, expr=None): - """Do some setup after initialisation. - - :param expr: What has the attribute that is being assigned to. - :type expr: NodeNG or None - """ - self.expr = expr - - def get_children(self): - yield self.expr - - -class Assert(Statement): - """Class representing an :class:`ast.Assert` node. - - An :class:`Assert` node represents an assert statement. - - >>> node = astroid.extract_node('assert len(things) == 10, "Not enough things"') - >>> node - - """ - - _astroid_fields = ("test", "fail") - test = None - """The test that passes or fails the assertion. - - :type: NodeNG or None - """ - fail = None - """The message shown when the assertion fails. - - :type: NodeNG or None - """ - - def postinit(self, test=None, fail=None): - """Do some setup after initialisation. - - :param test: The test that passes or fails the assertion. - :type test: NodeNG or None - - :param fail: The message shown when the assertion fails. - :type fail: NodeNG or None - """ - self.fail = fail - self.test = test - - def get_children(self): - yield self.test - - if self.fail is not None: - yield self.fail - - -class Assign(mixins.AssignTypeMixin, Statement): - """Class representing an :class:`ast.Assign` node. - - An :class:`Assign` is a statement where something is explicitly - asssigned to. - - >>> node = astroid.extract_node('variable = range(10)') - >>> node - - """ - - _astroid_fields = ("targets", "value") - _other_other_fields = ("type_annotation",) - targets = None - """What is being assigned to. - - :type: list(NodeNG) or None - """ - value = None - """The value being assigned to the variables. - - :type: NodeNG or None - """ - type_annotation = None - """If present, this will contain the type annotation passed by a type comment - - :type: NodeNG or None - """ - - def postinit(self, targets=None, value=None, type_annotation=None): - """Do some setup after initialisation. - - :param targets: What is being assigned to. - :type targets: list(NodeNG) or None - - :param value: The value being assigned to the variables. - :type: NodeNG or None - """ - self.targets = targets - self.value = value - self.type_annotation = type_annotation - - def get_children(self): - yield from self.targets - - yield self.value - - @decorators.cached - def _get_assign_nodes(self): - return [self] + list(self.value._get_assign_nodes()) - - def _get_yield_nodes_skip_lambdas(self): - yield from self.value._get_yield_nodes_skip_lambdas() - - -class AnnAssign(mixins.AssignTypeMixin, Statement): - """Class representing an :class:`ast.AnnAssign` node. - - An :class:`AnnAssign` is an assignment with a type annotation. - - >>> node = astroid.extract_node('variable: List[int] = range(10)') - >>> node - - """ - - _astroid_fields = ("target", "annotation", "value") - _other_fields = ("simple",) - target = None - """What is being assigned to. - - :type: NodeNG or None - """ - annotation = None - """The type annotation of what is being assigned to. - - :type: NodeNG - """ - value = None - """The value being assigned to the variables. - - :type: NodeNG or None - """ - simple = None - """Whether :attr:`target` is a pure name or a complex statement. - - :type: int - """ - - def postinit(self, target, annotation, simple, value=None): - """Do some setup after initialisation. - - :param target: What is being assigned to. - :type target: NodeNG - - :param annotation: The type annotation of what is being assigned to. - :type: NodeNG - - :param simple: Whether :attr:`target` is a pure name - or a complex statement. - :type simple: int - - :param value: The value being assigned to the variables. - :type: NodeNG or None - """ - self.target = target - self.annotation = annotation - self.value = value - self.simple = simple - - def get_children(self): - yield self.target - yield self.annotation - - if self.value is not None: - yield self.value - - -class AugAssign(mixins.AssignTypeMixin, Statement): - """Class representing an :class:`ast.AugAssign` node. - - An :class:`AugAssign` is an assignment paired with an operator. - - >>> node = astroid.extract_node('variable += 1') - >>> node - - """ - - _astroid_fields = ("target", "value") - _other_fields = ("op",) - target = None - """What is being assigned to. - - :type: NodeNG or None - """ - value = None - """The value being assigned to the variable. - - :type: NodeNG or None - """ - - def __init__(self, op=None, lineno=None, col_offset=None, parent=None): - """ - :param op: The operator that is being combined with the assignment. - This includes the equals sign. - :type op: str or None - - :param lineno: The line that this node appears on in the source code. - :type lineno: int or None - - :param col_offset: The column that this node appears on in the - source code. - :type col_offset: int or None - - :param parent: The parent node in the syntax tree. - :type parent: NodeNG or None - """ - self.op = op - """The operator that is being combined with the assignment. - - This includes the equals sign. - - :type: str or None - """ - - super().__init__(lineno, col_offset, parent) - - def postinit(self, target=None, value=None): - """Do some setup after initialisation. - - :param target: What is being assigned to. - :type target: NodeNG or None - - :param value: The value being assigned to the variable. - :type: NodeNG or None - """ - self.target = target - self.value = value - - # This is set by inference.py - def _infer_augassign(self, context=None): - raise NotImplementedError - - def type_errors(self, context=None): - """Get a list of type errors which can occur during inference. - - Each TypeError is represented by a :class:`BadBinaryOperationMessage` , - which holds the original exception. - - :returns: The list of possible type errors. - :rtype: list(BadBinaryOperationMessage) - """ - try: - results = self._infer_augassign(context=context) - return [ - result - for result in results - if isinstance(result, util.BadBinaryOperationMessage) - ] - except exceptions.InferenceError: - return [] - - def get_children(self): - yield self.target - yield self.value - - -class Repr(NodeNG): - """Class representing an :class:`ast.Repr` node. - - A :class:`Repr` node represents the backtick syntax, - which is a deprecated alias for :func:`repr` removed in Python 3. - - >>> node = astroid.extract_node('`variable`') - >>> node - - """ - - _astroid_fields = ("value",) - value = None - """What is having :func:`repr` called on it. - - :type: NodeNG or None - """ - - def postinit(self, value=None): - """Do some setup after initialisation. - - :param value: What is having :func:`repr` called on it. - :type value: NodeNG or None - """ - self.value = value - - -class BinOp(NodeNG): - """Class representing an :class:`ast.BinOp` node. - - A :class:`BinOp` node is an application of a binary operator. - - >>> node = astroid.extract_node('a + b') - >>> node - - """ - - _astroid_fields = ("left", "right") - _other_fields = ("op",) - left = None - """What is being applied to the operator on the left side. - - :type: NodeNG or None - """ - right = None - """What is being applied to the operator on the right side. - - :type: NodeNG or None - """ - - def __init__(self, op=None, lineno=None, col_offset=None, parent=None): - """ - :param op: The operator. - :type: str or None - - :param lineno: The line that this node appears on in the source code. - :type lineno: int or None - - :param col_offset: The column that this node appears on in the - source code. - :type col_offset: int or None - - :param parent: The parent node in the syntax tree. - :type parent: NodeNG or None - """ - self.op = op - """The operator. - - :type: str or None - """ - - super().__init__(lineno, col_offset, parent) - - def postinit(self, left=None, right=None): - """Do some setup after initialisation. - - :param left: What is being applied to the operator on the left side. - :type left: NodeNG or None - - :param right: What is being applied to the operator on the right side. - :type right: NodeNG or None - """ - self.left = left - self.right = right - - # This is set by inference.py - def _infer_binop(self, context=None): - raise NotImplementedError - - def type_errors(self, context=None): - """Get a list of type errors which can occur during inference. - - Each TypeError is represented by a :class:`BadBinaryOperationMessage`, - which holds the original exception. - - :returns: The list of possible type errors. - :rtype: list(BadBinaryOperationMessage) - """ - try: - results = self._infer_binop(context=context) - return [ - result - for result in results - if isinstance(result, util.BadBinaryOperationMessage) - ] - except exceptions.InferenceError: - return [] - - def get_children(self): - yield self.left - yield self.right - - def op_precedence(self): - return OP_PRECEDENCE[self.op] - - def op_left_associative(self): - # 2**3**4 == 2**(3**4) - return self.op != "**" - - -class BoolOp(NodeNG): - """Class representing an :class:`ast.BoolOp` node. - - A :class:`BoolOp` is an application of a boolean operator. - - >>> node = astroid.extract_node('a and b') - >>> node - - """ - - _astroid_fields = ("values",) - _other_fields = ("op",) - values = None - """The values being applied to the operator. - - :type: list(NodeNG) or None - """ - - def __init__(self, op=None, lineno=None, col_offset=None, parent=None): - """ - :param op: The operator. - :type: str or None - - :param lineno: The line that this node appears on in the source code. - :type lineno: int or None - - :param col_offset: The column that this node appears on in the - source code. - :type col_offset: int or None - - :param parent: The parent node in the syntax tree. - :type parent: NodeNG or None - """ - self.op = op - """The operator. - - :type: str or None - """ - - super().__init__(lineno, col_offset, parent) - - def postinit(self, values=None): - """Do some setup after initialisation. - - :param values: The values being applied to the operator. - :type values: list(NodeNG) or None - """ - self.values = values - - def get_children(self): - yield from self.values - - def op_precedence(self): - return OP_PRECEDENCE[self.op] - - -class Break(mixins.NoChildrenMixin, Statement): - """Class representing an :class:`ast.Break` node. - - >>> node = astroid.extract_node('break') - >>> node - - """ - - -class Call(NodeNG): - """Class representing an :class:`ast.Call` node. - - A :class:`Call` node is a call to a function, method, etc. - - >>> node = astroid.extract_node('function()') - >>> node - - """ - - _astroid_fields = ("func", "args", "keywords") - func = None - """What is being called. - - :type: NodeNG or None - """ - args = None - """The positional arguments being given to the call. - - :type: list(NodeNG) or None - """ - keywords = None - """The keyword arguments being given to the call. - - :type: list(NodeNG) or None - """ - - def postinit(self, func=None, args=None, keywords=None): - """Do some setup after initialisation. - - :param func: What is being called. - :type func: NodeNG or None - - :param args: The positional arguments being given to the call. - :type args: list(NodeNG) or None - - :param keywords: The keyword arguments being given to the call. - :type keywords: list(NodeNG) or None - """ - self.func = func - self.args = args - self.keywords = keywords - - @property - def starargs(self): - """The positional arguments that unpack something. - - :type: list(Starred) - """ - args = self.args or [] - return [arg for arg in args if isinstance(arg, Starred)] - - @property - def kwargs(self): - """The keyword arguments that unpack something. - - :type: list(Keyword) - """ - keywords = self.keywords or [] - return [keyword for keyword in keywords if keyword.arg is None] - - def get_children(self): - yield self.func - - yield from self.args - - yield from self.keywords or () - - -class Compare(NodeNG): - """Class representing an :class:`ast.Compare` node. - - A :class:`Compare` node indicates a comparison. - - >>> node = astroid.extract_node('a <= b <= c') - >>> node - - >>> node.ops - [('<=', ), ('<=', )] - """ - - _astroid_fields = ("left", "ops") - left = None - """The value at the left being applied to a comparison operator. - - :type: NodeNG or None - """ - ops = None - """The remainder of the operators and their relevant right hand value. - - :type: list(tuple(str, NodeNG)) or None - """ - - def postinit(self, left=None, ops=None): - """Do some setup after initialisation. - - :param left: The value at the left being applied to a comparison - operator. - :type left: NodeNG or None - - :param ops: The remainder of the operators - and their relevant right hand value. - :type ops: list(tuple(str, NodeNG)) or None - """ - self.left = left - self.ops = ops - - def get_children(self): - """Get the child nodes below this node. - - Overridden to handle the tuple fields and skip returning the operator - strings. - - :returns: The children. - :rtype: iterable(NodeNG) - """ - yield self.left - for _, comparator in self.ops: - yield comparator # we don't want the 'op' - - def last_child(self): - """An optimized version of list(get_children())[-1] - - :returns: The last child. - :rtype: NodeNG - """ - # XXX maybe if self.ops: - return self.ops[-1][1] - # return self.left - - -class Comprehension(NodeNG): - """Class representing an :class:`ast.comprehension` node. - - A :class:`Comprehension` indicates the loop inside any type of - comprehension including generator expressions. - - >>> node = astroid.extract_node('[x for x in some_values]') - >>> list(node.get_children()) - [, ] - >>> list(node.get_children())[1].as_string() - 'for x in some_values' - """ - - _astroid_fields = ("target", "iter", "ifs") - _other_fields = ("is_async",) - target = None - """What is assigned to by the comprehension. - - :type: NodeNG or None - """ - iter = None - """What is iterated over by the comprehension. - - :type: NodeNG or None - """ - ifs = None - """The contents of any if statements that filter the comprehension. - - :type: list(NodeNG) or None - """ - is_async = None - """Whether this is an asynchronous comprehension or not. - - :type: bool or None - """ - - def __init__(self, parent=None): - """ - :param parent: The parent node in the syntax tree. - :type parent: NodeNG or None - """ - super().__init__() - self.parent = parent - - # pylint: disable=redefined-builtin; same name as builtin ast module. - def postinit(self, target=None, iter=None, ifs=None, is_async=None): - """Do some setup after initialisation. - - :param target: What is assigned to by the comprehension. - :type target: NodeNG or None - - :param iter: What is iterated over by the comprehension. - :type iter: NodeNG or None - - :param ifs: The contents of any if statements that filter - the comprehension. - :type ifs: list(NodeNG) or None - - :param is_async: Whether this is an asynchronous comprehension or not. - :type: bool or None - """ - self.target = target - self.iter = iter - self.ifs = ifs - self.is_async = is_async - - optional_assign = True - """Whether this node optionally assigns a variable. - - :type: bool - """ - - def assign_type(self): - """The type of assignment that this node performs. - - :returns: The assignment type. - :rtype: NodeNG - """ - return self - - def _get_filtered_stmts(self, lookup_node, node, stmts, mystmt): - """method used in filter_stmts""" - if self is mystmt: - if isinstance(lookup_node, (Const, Name)): - return [lookup_node], True - - elif self.statement() is mystmt: - # original node's statement is the assignment, only keeps - # current node (gen exp, list comp) - - return [node], True - - return stmts, False - - def get_children(self): - yield self.target - yield self.iter - - yield from self.ifs - - -class Const(mixins.NoChildrenMixin, NodeNG, bases.Instance): - """Class representing any constant including num, str, bool, None, bytes. - - >>> node = astroid.extract_node('(5, "This is a string.", True, None, b"bytes")') - >>> node - - >>> list(node.get_children()) - [, - , - , - , - ] - """ - - _other_fields = ("value",) - - def __init__(self, value, lineno=None, col_offset=None, parent=None): - """ - :param value: The value that the constant represents. - :type value: object - - :param lineno: The line that this node appears on in the source code. - :type lineno: int or None - - :param col_offset: The column that this node appears on in the - source code. - :type col_offset: int or None - - :param parent: The parent node in the syntax tree. - :type parent: NodeNG or None - """ - self.value = value - """The value that the constant represents. - - :type: object - """ - - super().__init__(lineno, col_offset, parent) - - def __getattr__(self, name): - # This is needed because of Proxy's __getattr__ method. - # Calling object.__new__ on this class without calling - # __init__ would result in an infinite loop otherwise - # since __getattr__ is called when an attribute doesn't - # exist and self._proxied indirectly calls self.value - # and Proxy __getattr__ calls self.value - if name == "value": - raise AttributeError - return super().__getattr__(name) - - def getitem(self, index, context=None): - """Get an item from this node if subscriptable. - - :param index: The node to use as a subscript index. - :type index: Const or Slice - - :raises AstroidTypeError: When the given index cannot be used as a - subscript index, or if this node is not subscriptable. - """ - if isinstance(index, Const): - index_value = index.value - elif isinstance(index, Slice): - index_value = _infer_slice(index, context=context) - - else: - raise exceptions.AstroidTypeError( - "Could not use type {} as subscript index".format(type(index)) - ) - - try: - if isinstance(self.value, (str, bytes)): - return Const(self.value[index_value]) - except IndexError as exc: - raise exceptions.AstroidIndexError( - message="Index {index!r} out of range", - node=self, - index=index, - context=context, - ) from exc - except TypeError as exc: - raise exceptions.AstroidTypeError( - message="Type error {error!r}", node=self, index=index, context=context - ) from exc - - raise exceptions.AstroidTypeError("%r (value=%s)" % (self, self.value)) - - def has_dynamic_getattr(self): - """Check if the node has a custom __getattr__ or __getattribute__. - - :returns: True if the class has a custom - __getattr__ or __getattribute__, False otherwise. - For a :class:`Const` this is always ``False``. - :rtype: bool - """ - return False - - def itered(self): - """An iterator over the elements this node contains. - - :returns: The contents of this node. - :rtype: iterable(Const) - - :raises TypeError: If this node does not represent something that is iterable. - """ - if isinstance(self.value, str): - return [const_factory(elem) for elem in self.value] - raise TypeError("Cannot iterate over type {!r}".format(type(self.value))) - - def pytype(self): - """Get the name of the type that this node represents. - - :returns: The name of the type. - :rtype: str - """ - return self._proxied.qname() - - def bool_value(self, context=None): - """Determine the boolean value of this node. - - :returns: The boolean value of this node. - :rtype: bool - """ - return bool(self.value) - - -class Continue(mixins.NoChildrenMixin, Statement): - """Class representing an :class:`ast.Continue` node. - - >>> node = astroid.extract_node('continue') - >>> node - - """ - - -class Decorators(NodeNG): - """A node representing a list of decorators. - - A :class:`Decorators` is the decorators that are applied to - a method or function. - - >>> node = astroid.extract_node(''' - @property - def my_property(self): - return 3 - ''') - >>> node - - >>> list(node.get_children())[0] - - """ - - _astroid_fields = ("nodes",) - nodes = None - """The decorators that this node contains. - - :type: list(Name or Call) or None - """ - - def postinit(self, nodes): - """Do some setup after initialisation. - - :param nodes: The decorators that this node contains. - :type nodes: list(Name or Call) - """ - self.nodes = nodes - - def scope(self): - """The first parent node defining a new scope. - - :returns: The first parent scope node. - :rtype: Module or FunctionDef or ClassDef or Lambda or GenExpr - """ - # skip the function node to go directly to the upper level scope - return self.parent.parent.scope() - - def get_children(self): - yield from self.nodes - - -class DelAttr(mixins.ParentAssignTypeMixin, NodeNG): - """Variation of :class:`ast.Delete` representing deletion of an attribute. - - >>> node = astroid.extract_node('del self.attr') - >>> node - - >>> list(node.get_children())[0] - - """ - - _astroid_fields = ("expr",) - _other_fields = ("attrname",) - expr = None - """The name that this node represents. - - :type: Name or None - """ - - def __init__(self, attrname=None, lineno=None, col_offset=None, parent=None): - """ - :param attrname: The name of the attribute that is being deleted. - :type attrname: str or None - - :param lineno: The line that this node appears on in the source code. - :type lineno: int or None - - :param col_offset: The column that this node appears on in the - source code. - :type col_offset: int or None - - :param parent: The parent node in the syntax tree. - :type parent: NodeNG or None - """ - self.attrname = attrname - """The name of the attribute that is being deleted. - - :type: str or None - """ - - super().__init__(lineno, col_offset, parent) - - def postinit(self, expr=None): - """Do some setup after initialisation. - - :param expr: The name that this node represents. - :type expr: Name or None - """ - self.expr = expr - - def get_children(self): - yield self.expr - - -class Delete(mixins.AssignTypeMixin, Statement): - """Class representing an :class:`ast.Delete` node. - - A :class:`Delete` is a ``del`` statement this is deleting something. - - >>> node = astroid.extract_node('del self.attr') - >>> node - - """ - - _astroid_fields = ("targets",) - targets = None - """What is being deleted. - - :type: list(NodeNG) or None - """ - - def postinit(self, targets=None): - """Do some setup after initialisation. - - :param targets: What is being deleted. - :type targets: list(NodeNG) or None - """ - self.targets = targets - - def get_children(self): - yield from self.targets - - -class Dict(NodeNG, bases.Instance): - """Class representing an :class:`ast.Dict` node. - - A :class:`Dict` is a dictionary that is created with ``{}`` syntax. - - >>> node = astroid.extract_node('{1: "1"}') - >>> node - - """ - - _astroid_fields = ("items",) - - def __init__(self, lineno=None, col_offset=None, parent=None): - """ - :param lineno: The line that this node appears on in the source code. - :type lineno: int or None - - :param col_offset: The column that this node appears on in the - source code. - :type col_offset: int or None - - :param parent: The parent node in the syntax tree. - :type parent: NodeNG or None - """ - self.items = [] - """The key-value pairs contained in the dictionary. - - :type: list(tuple(NodeNG, NodeNG)) - """ - - super().__init__(lineno, col_offset, parent) - - def postinit(self, items): - """Do some setup after initialisation. - - :param items: The key-value pairs contained in the dictionary. - :type items: list(tuple(NodeNG, NodeNG)) - """ - self.items = items - - @classmethod - def from_elements(cls, items=None): - """Create a :class:`Dict` of constants from a live dictionary. - - :param items: The items to store in the node. - :type items: dict - - :returns: The created dictionary node. - :rtype: Dict - """ - node = cls() - if items is None: - node.items = [] - else: - node.items = [ - (const_factory(k), const_factory(v) if _is_const(v) else v) - for k, v in items.items() - # The keys need to be constants - if _is_const(k) - ] - return node - - def pytype(self): - """Get the name of the type that this node represents. - - :returns: The name of the type. - :rtype: str - """ - return "%s.dict" % BUILTINS - - def get_children(self): - """Get the key and value nodes below this node. - - Children are returned in the order that they are defined in the source - code, key first then the value. - - :returns: The children. - :rtype: iterable(NodeNG) - """ - for key, value in self.items: - yield key - yield value - - def last_child(self): - """An optimized version of list(get_children())[-1] - - :returns: The last child, or None if no children exist. - :rtype: NodeNG or None - """ - if self.items: - return self.items[-1][1] - return None - - def itered(self): - """An iterator over the keys this node contains. - - :returns: The keys of this node. - :rtype: iterable(NodeNG) - """ - return [key for (key, _) in self.items] - - def getitem(self, index, context=None): - """Get an item from this node. - - :param index: The node to use as a subscript index. - :type index: Const or Slice - - :raises AstroidTypeError: When the given index cannot be used as a - subscript index, or if this node is not subscriptable. - :raises AstroidIndexError: If the given index does not exist in the - dictionary. - """ - for key, value in self.items: - # TODO(cpopa): no support for overriding yet, {1:2, **{1: 3}}. - if isinstance(key, DictUnpack): - try: - return value.getitem(index, context) - except (exceptions.AstroidTypeError, exceptions.AstroidIndexError): - continue - for inferredkey in key.infer(context): - if inferredkey is util.Uninferable: - continue - if isinstance(inferredkey, Const) and isinstance(index, Const): - if inferredkey.value == index.value: - return value - - raise exceptions.AstroidIndexError(index) - - def bool_value(self, context=None): - """Determine the boolean value of this node. - - :returns: The boolean value of this node. - :rtype: bool - """ - return bool(self.items) - - -class Expr(Statement): - """Class representing an :class:`ast.Expr` node. - - An :class:`Expr` is any expression that does not have its value used or - stored. - - >>> node = astroid.extract_node('method()') - >>> node - - >>> node.parent - - """ - - _astroid_fields = ("value",) - value = None - """What the expression does. - - :type: NodeNG or None - """ - - def postinit(self, value=None): - """Do some setup after initialisation. - - :param value: What the expression does. - :type value: NodeNG or None - """ - self.value = value - - def get_children(self): - yield self.value - - def _get_yield_nodes_skip_lambdas(self): - if not self.value.is_lambda: - yield from self.value._get_yield_nodes_skip_lambdas() - - -class Ellipsis(mixins.NoChildrenMixin, NodeNG): # pylint: disable=redefined-builtin - """Class representing an :class:`ast.Ellipsis` node. - - An :class:`Ellipsis` is the ``...`` syntax. - - >>> node = astroid.extract_node('...') - >>> node - - """ - - def bool_value(self, context=None): - """Determine the boolean value of this node. - - :returns: The boolean value of this node. - For an :class:`Ellipsis` this is always ``True``. - :rtype: bool - """ - return True - - -class EmptyNode(mixins.NoChildrenMixin, NodeNG): - """Holds an arbitrary object in the :attr:`LocalsDictNodeNG.locals`.""" - - object = None - - -class ExceptHandler(mixins.MultiLineBlockMixin, mixins.AssignTypeMixin, Statement): - """Class representing an :class:`ast.ExceptHandler`. node. - - An :class:`ExceptHandler` is an ``except`` block on a try-except. - - >>> node = astroid.extract_node(''' - try: - do_something() - except Exception as error: - print("Error!") - ''') - >>> node - - >>> >>> node.handlers - [] - """ - - _astroid_fields = ("type", "name", "body") - _multi_line_block_fields = ("body",) - type = None - """The types that the block handles. - - :type: Tuple or NodeNG or None - """ - name = None - """The name that the caught exception is assigned to. - - :type: AssignName or None - """ - body = None - """The contents of the block. - - :type: list(NodeNG) or None - """ - - def get_children(self): - if self.type is not None: - yield self.type - - if self.name is not None: - yield self.name - - yield from self.body - - # pylint: disable=redefined-builtin; had to use the same name as builtin ast module. - def postinit(self, type=None, name=None, body=None): - """Do some setup after initialisation. - - :param type: The types that the block handles. - :type type: Tuple or NodeNG or None - - :param name: The name that the caught exception is assigned to. - :type name: AssignName or None - - :param body:The contents of the block. - :type body: list(NodeNG) or None - """ - self.type = type - self.name = name - self.body = body - - @decorators.cachedproperty - def blockstart_tolineno(self): - """The line on which the beginning of this block ends. - - :type: int - """ - if self.name: - return self.name.tolineno - if self.type: - return self.type.tolineno - return self.lineno - - def catch(self, exceptions): # pylint: disable=redefined-outer-name - """Check if this node handles any of the given exceptions. - - If ``exceptions`` is empty, this will default to ``True``. - - :param exceptions: The name of the exceptions to check for. - :type exceptions: list(str) - """ - if self.type is None or exceptions is None: - return True - for node in self.type._get_name_nodes(): - if node.name in exceptions: - return True - return False - - -class Exec(Statement): - """Class representing the ``exec`` statement. - - >>> node = astroid.extract_node('exec "True"') - >>> node - - """ - - _astroid_fields = ("expr", "globals", "locals") - expr = None - """The expression to be executed. - - :type: NodeNG or None - """ - globals = None - """The globals dictionary to execute with. - - :type: NodeNG or None - """ - locals = None - """The locals dictionary to execute with. - - :type: NodeNG or None - """ - - # pylint: disable=redefined-builtin; had to use the same name as builtin ast module. - def postinit(self, expr=None, globals=None, locals=None): - """Do some setup after initialisation. - - :param expr: The expression to be executed. - :type expr: NodeNG or None - - :param globals:The globals dictionary to execute with. - :type globals: NodeNG or None - - :param locals: The locals dictionary to execute with. - :type locals: NodeNG or None - """ - self.expr = expr - self.globals = globals - self.locals = locals - - -class ExtSlice(NodeNG): - """Class representing an :class:`ast.ExtSlice` node. - - An :class:`ExtSlice` is a complex slice expression. - - >>> node = astroid.extract_node('l[1:3, 5]') - >>> node - - >>> node.slice - - """ - - _astroid_fields = ("dims",) - dims = None - """The simple dimensions that form the complete slice. - - :type: list(NodeNG) or None - """ - - def postinit(self, dims=None): - """Do some setup after initialisation. - - :param dims: The simple dimensions that form the complete slice. - :type dims: list(NodeNG) or None - """ - self.dims = dims - - -class For( - mixins.MultiLineBlockMixin, - mixins.BlockRangeMixIn, - mixins.AssignTypeMixin, - Statement, -): - """Class representing an :class:`ast.For` node. - - >>> node = astroid.extract_node('for thing in things: print(thing)') - >>> node - - """ - - _astroid_fields = ("target", "iter", "body", "orelse") - _other_other_fields = ("type_annotation",) - _multi_line_block_fields = ("body", "orelse") - target = None - """What the loop assigns to. - - :type: NodeNG or None - """ - iter = None - """What the loop iterates over. - - :type: NodeNG or None - """ - body = None - """The contents of the body of the loop. - - :type: list(NodeNG) or None - """ - orelse = None - """The contents of the ``else`` block of the loop. - - :type: list(NodeNG) or None - """ - type_annotation = None - """If present, this will contain the type annotation passed by a type comment - - :type: NodeNG or None - """ - - # pylint: disable=redefined-builtin; had to use the same name as builtin ast module. - def postinit( - self, target=None, iter=None, body=None, orelse=None, type_annotation=None - ): - """Do some setup after initialisation. - - :param target: What the loop assigns to. - :type target: NodeNG or None - - :param iter: What the loop iterates over. - :type iter: NodeNG or None - - :param body: The contents of the body of the loop. - :type body: list(NodeNG) or None - - :param orelse: The contents of the ``else`` block of the loop. - :type orelse: list(NodeNG) or None - """ - self.target = target - self.iter = iter - self.body = body - self.orelse = orelse - self.type_annotation = type_annotation - - optional_assign = True - """Whether this node optionally assigns a variable. - - This is always ``True`` for :class:`For` nodes. - - :type: bool - """ - - @decorators.cachedproperty - def blockstart_tolineno(self): - """The line on which the beginning of this block ends. - - :type: int - """ - return self.iter.tolineno - - def get_children(self): - yield self.target - yield self.iter - - yield from self.body - yield from self.orelse - - -class AsyncFor(For): - """Class representing an :class:`ast.AsyncFor` node. - - An :class:`AsyncFor` is an asynchronous :class:`For` built with - the ``async`` keyword. - - >>> node = astroid.extract_node(''' - async def func(things): - async for thing in things: - print(thing) - ''') - >>> node - - >>> node.body[0] - - """ - - -class Await(NodeNG): - """Class representing an :class:`ast.Await` node. - - An :class:`Await` is the ``await`` keyword. - - >>> node = astroid.extract_node(''' - async def func(things): - await other_func() - ''') - >>> node - - >>> node.body[0] - - >>> list(node.body[0].get_children())[0] - - """ - - _astroid_fields = ("value",) - value = None - """What to wait for. - - :type: NodeNG or None - """ - - def postinit(self, value=None): - """Do some setup after initialisation. - - :param value: What to wait for. - :type value: NodeNG or None - """ - self.value = value - - def get_children(self): - yield self.value - - -class ImportFrom(mixins.NoChildrenMixin, mixins.ImportFromMixin, Statement): - """Class representing an :class:`ast.ImportFrom` node. - - >>> node = astroid.extract_node('from my_package import my_module') - >>> node - - """ - - _other_fields = ("modname", "names", "level") - - def __init__( - self, fromname, names, level=0, lineno=None, col_offset=None, parent=None - ): - """ - :param fromname: The module that is being imported from. - :type fromname: str or None - - :param names: What is being imported from the module. - :type names: list(tuple(str, str or None)) - - :param level: The level of relative import. - :type level: int - - :param lineno: The line that this node appears on in the source code. - :type lineno: int or None - - :param col_offset: The column that this node appears on in the - source code. - :type col_offset: int or None - - :param parent: The parent node in the syntax tree. - :type parent: NodeNG or None - """ - self.modname = fromname - """The module that is being imported from. - - This is ``None`` for relative imports. - - :type: str or None - """ - - self.names = names - """What is being imported from the module. - - Each entry is a :class:`tuple` of the name being imported, - and the alias that the name is assigned to (if any). - - :type: list(tuple(str, str or None)) - """ - - self.level = level - """The level of relative import. - - Essentially this is the number of dots in the import. - This is always 0 for absolute imports. - - :type: int - """ - - super().__init__(lineno, col_offset, parent) - - -class Attribute(NodeNG): - """Class representing an :class:`ast.Attribute` node.""" - - _astroid_fields = ("expr",) - _other_fields = ("attrname",) - expr = None - """The name that this node represents. - - :type: Name or None - """ - - def __init__(self, attrname=None, lineno=None, col_offset=None, parent=None): - """ - :param attrname: The name of the attribute. - :type attrname: str or None - - :param lineno: The line that this node appears on in the source code. - :type lineno: int or None - - :param col_offset: The column that this node appears on in the - source code. - :type col_offset: int or None - - :param parent: The parent node in the syntax tree. - :type parent: NodeNG or None - """ - self.attrname = attrname - """The name of the attribute. - - :type: str or None - """ - - super().__init__(lineno, col_offset, parent) - - def postinit(self, expr=None): - """Do some setup after initialisation. - - :param expr: The name that this node represents. - :type expr: Name or None - """ - self.expr = expr - - def get_children(self): - yield self.expr - - -class Global(mixins.NoChildrenMixin, Statement): - """Class representing an :class:`ast.Global` node. - - >>> node = astroid.extract_node('global a_global') - >>> node - - """ - - _other_fields = ("names",) - - def __init__(self, names, lineno=None, col_offset=None, parent=None): - """ - :param names: The names being declared as global. - :type names: list(str) - - :param lineno: The line that this node appears on in the source code. - :type lineno: int or None - - :param col_offset: The column that this node appears on in the - source code. - :type col_offset: int or None - - :param parent: The parent node in the syntax tree. - :type parent: NodeNG or None - """ - self.names = names - """The names being declared as global. - - :type: list(str) - """ - - super().__init__(lineno, col_offset, parent) - - def _infer_name(self, frame, name): - return name - - -class If(mixins.MultiLineBlockMixin, mixins.BlockRangeMixIn, Statement): - """Class representing an :class:`ast.If` node. - - >>> node = astroid.extract_node('if condition: print(True)') - >>> node - - """ - - _astroid_fields = ("test", "body", "orelse") - _multi_line_block_fields = ("body", "orelse") - test = None - """The condition that the statement tests. - - :type: NodeNG or None - """ - body = None - """The contents of the block. - - :type: list(NodeNG) or None - """ - orelse = None - """The contents of the ``else`` block. - - :type: list(NodeNG) or None - """ - - def postinit(self, test=None, body=None, orelse=None): - """Do some setup after initialisation. - - :param test: The condition that the statement tests. - :type test: NodeNG or None - - :param body: The contents of the block. - :type body: list(NodeNG) or None - - :param orelse: The contents of the ``else`` block. - :type orelse: list(NodeNG) or None - """ - self.test = test - self.body = body - self.orelse = orelse - - @decorators.cachedproperty - def blockstart_tolineno(self): - """The line on which the beginning of this block ends. - - :type: int - """ - return self.test.tolineno - - def block_range(self, lineno): - """Get a range from the given line number to where this node ends. - - :param lineno: The line number to start the range at. - :type lineno: int - - :returns: The range of line numbers that this node belongs to, - starting at the given line number. - :rtype: tuple(int, int) - """ - if lineno == self.body[0].fromlineno: - return lineno, lineno - if lineno <= self.body[-1].tolineno: - return lineno, self.body[-1].tolineno - return self._elsed_block_range(lineno, self.orelse, self.body[0].fromlineno - 1) - - def get_children(self): - yield self.test - - yield from self.body - yield from self.orelse - - def has_elif_block(self): - return len(self.orelse) == 1 and isinstance(self.orelse[0], If) - - -class IfExp(NodeNG): - """Class representing an :class:`ast.IfExp` node. - - >>> node = astroid.extract_node('value if condition else other') - >>> node - - """ - - _astroid_fields = ("test", "body", "orelse") - test = None - """The condition that the statement tests. - - :type: NodeNG or None - """ - body = None - """The contents of the block. - - :type: list(NodeNG) or None - """ - orelse = None - """The contents of the ``else`` block. - - :type: list(NodeNG) or None - """ - - def postinit(self, test=None, body=None, orelse=None): - """Do some setup after initialisation. - - :param test: The condition that the statement tests. - :type test: NodeNG or None - - :param body: The contents of the block. - :type body: list(NodeNG) or None - - :param orelse: The contents of the ``else`` block. - :type orelse: list(NodeNG) or None - """ - self.test = test - self.body = body - self.orelse = orelse - - def get_children(self): - yield self.test - yield self.body - yield self.orelse - - def op_left_associative(self): - # `1 if True else 2 if False else 3` is parsed as - # `1 if True else (2 if False else 3)` - return False - - -class Import(mixins.NoChildrenMixin, mixins.ImportFromMixin, Statement): - """Class representing an :class:`ast.Import` node. - - >>> node = astroid.extract_node('import astroid') - >>> node - - """ - - _other_fields = ("names",) - - def __init__(self, names=None, lineno=None, col_offset=None, parent=None): - """ - :param names: The names being imported. - :type names: list(tuple(str, str or None)) or None - - :param lineno: The line that this node appears on in the source code. - :type lineno: int or None - - :param col_offset: The column that this node appears on in the - source code. - :type col_offset: int or None - - :param parent: The parent node in the syntax tree. - :type parent: NodeNG or None - """ - self.names = names - """The names being imported. - - Each entry is a :class:`tuple` of the name being imported, - and the alias that the name is assigned to (if any). - - :type: list(tuple(str, str or None)) or None - """ - - super().__init__(lineno, col_offset, parent) - - -class Index(NodeNG): - """Class representing an :class:`ast.Index` node. - - An :class:`Index` is a simple subscript. - - >>> node = astroid.extract_node('things[1]') - >>> node - - >>> node.slice - - """ - - _astroid_fields = ("value",) - value = None - """The value to subscript with. - - :type: NodeNG or None - """ - - def postinit(self, value=None): - """Do some setup after initialisation. - - :param value: The value to subscript with. - :type value: NodeNG or None - """ - self.value = value - - def get_children(self): - yield self.value - - -class Keyword(NodeNG): - """Class representing an :class:`ast.keyword` node. - - >>> node = astroid.extract_node('function(a_kwarg=True)') - >>> node - - >>> node.keywords - [] - """ - - _astroid_fields = ("value",) - _other_fields = ("arg",) - value = None - """The value being assigned to the keyword argument. - - :type: NodeNG or None - """ - - def __init__(self, arg=None, lineno=None, col_offset=None, parent=None): - """ - :param arg: The argument being assigned to. - :type arg: Name or None - - :param lineno: The line that this node appears on in the source code. - :type lineno: int or None - - :param col_offset: The column that this node appears on in the - source code. - :type col_offset: int or None - - :param parent: The parent node in the syntax tree. - :type parent: NodeNG or None - """ - self.arg = arg - """The argument being assigned to. - - :type: Name or None - """ - - super().__init__(lineno, col_offset, parent) - - def postinit(self, value=None): - """Do some setup after initialisation. - - :param value: The value being assigned to the ketword argument. - :type value: NodeNG or None - """ - self.value = value - - def get_children(self): - yield self.value - - -class List(_BaseContainer): - """Class representing an :class:`ast.List` node. - - >>> node = astroid.extract_node('[1, 2, 3]') - >>> node - - """ - - _other_fields = ("ctx",) - - def __init__(self, ctx=None, lineno=None, col_offset=None, parent=None): - """ - :param ctx: Whether the list is assigned to or loaded from. - :type ctx: Context or None - - :param lineno: The line that this node appears on in the source code. - :type lineno: int or None - - :param col_offset: The column that this node appears on in the - source code. - :type col_offset: int or None - - :param parent: The parent node in the syntax tree. - :type parent: NodeNG or None - """ - self.ctx = ctx - """Whether the list is assigned to or loaded from. - - :type: Context or None - """ - - super().__init__(lineno, col_offset, parent) - - def pytype(self): - """Get the name of the type that this node represents. - - :returns: The name of the type. - :rtype: str - """ - return "%s.list" % BUILTINS - - def getitem(self, index, context=None): - """Get an item from this node. - - :param index: The node to use as a subscript index. - :type index: Const or Slice - """ - return _container_getitem(self, self.elts, index, context=context) - - -class Nonlocal(mixins.NoChildrenMixin, Statement): - """Class representing an :class:`ast.Nonlocal` node. - - >>> node = astroid.extract_node(''' - def function(): - nonlocal var - ''') - >>> node - - >>> node.body[0] - - """ - - _other_fields = ("names",) - - def __init__(self, names, lineno=None, col_offset=None, parent=None): - """ - :param names: The names being declared as not local. - :type names: list(str) - - :param lineno: The line that this node appears on in the source code. - :type lineno: int or None - - :param col_offset: The column that this node appears on in the - source code. - :type col_offset: int or None - - :param parent: The parent node in the syntax tree. - :type parent: NodeNG or None - """ - self.names = names - """The names being declared as not local. - - :type: list(str) - """ - - super().__init__(lineno, col_offset, parent) - - def _infer_name(self, frame, name): - return name - - -class Pass(mixins.NoChildrenMixin, Statement): - """Class representing an :class:`ast.Pass` node. - - >>> node = astroid.extract_node('pass') - >>> node - - """ - - -class Print(Statement): - """Class representing an :class:`ast.Print` node. - - >>> node = astroid.extract_node('print "A message"') - >>> node - - """ - - _astroid_fields = ("dest", "values") - dest = None - """Where to print to. - - :type: NodeNG or None - """ - values = None - """What to print. - - :type: list(NodeNG) or None - """ - - def __init__(self, nl=None, lineno=None, col_offset=None, parent=None): - """ - :param nl: Whether to print a new line. - :type nl: bool or None - - :param lineno: The line that this node appears on in the source code. - :type lineno: int or None - - :param col_offset: The column that this node appears on in the - source code. - :type col_offset: int or None - - :param parent: The parent node in the syntax tree. - :type parent: NodeNG or None - """ - self.nl = nl - """Whether to print a new line. - - :type: bool or None - """ - - super().__init__(lineno, col_offset, parent) - - def postinit(self, dest=None, values=None): - """Do some setup after initialisation. - - :param dest: Where to print to. - :type dest: NodeNG or None - - :param values: What to print. - :type values: list(NodeNG) or None - """ - self.dest = dest - self.values = values - - -class Raise(Statement): - """Class representing an :class:`ast.Raise` node. - - >>> node = astroid.extract_node('raise RuntimeError("Something bad happened!")') - >>> node - - """ - - exc = None - """What is being raised. - - :type: NodeNG or None - """ - _astroid_fields = ("exc", "cause") - cause = None - """The exception being used to raise this one. - - :type: NodeNG or None - """ - - def postinit(self, exc=None, cause=None): - """Do some setup after initialisation. - - :param exc: What is being raised. - :type exc: NodeNG or None - - :param cause: The exception being used to raise this one. - :type cause: NodeNG or None - """ - self.exc = exc - self.cause = cause - - def raises_not_implemented(self): - """Check if this node raises a :class:`NotImplementedError`. - - :returns: True if this node raises a :class:`NotImplementedError`, - False otherwise. - :rtype: bool - """ - if not self.exc: - return False - for name in self.exc._get_name_nodes(): - if name.name == "NotImplementedError": - return True - return False - - def get_children(self): - if self.exc is not None: - yield self.exc - - if self.cause is not None: - yield self.cause - - -class Return(Statement): - """Class representing an :class:`ast.Return` node. - - >>> node = astroid.extract_node('return True') - >>> node - - """ - - _astroid_fields = ("value",) - value = None - """The value being returned. - - :type: NodeNG or None - """ - - def postinit(self, value=None): - """Do some setup after initialisation. - - :param value: The value being returned. - :type value: NodeNG or None - """ - self.value = value - - def get_children(self): - if self.value is not None: - yield self.value - - def is_tuple_return(self): - return isinstance(self.value, Tuple) - - def _get_return_nodes_skip_functions(self): - yield self - - -class Set(_BaseContainer): - """Class representing an :class:`ast.Set` node. - - >>> node = astroid.extract_node('{1, 2, 3}') - >>> node - - """ - - def pytype(self): - """Get the name of the type that this node represents. - - :returns: The name of the type. - :rtype: str - """ - return "%s.set" % BUILTINS - - -class Slice(NodeNG): - """Class representing an :class:`ast.Slice` node. - - >>> node = astroid.extract_node('things[1:3]') - >>> node - - >>> node.slice - - """ - - _astroid_fields = ("lower", "upper", "step") - lower = None - """The lower index in the slice. - - :type: NodeNG or None - """ - upper = None - """The upper index in the slice. - - :type: NodeNG or None - """ - step = None - """The step to take between indexes. - - :type: NodeNG or None - """ - - def postinit(self, lower=None, upper=None, step=None): - """Do some setup after initialisation. - - :param lower: The lower index in the slice. - :value lower: NodeNG or None - - :param upper: The upper index in the slice. - :value upper: NodeNG or None - - :param step: The step to take between index. - :param step: NodeNG or None - """ - self.lower = lower - self.upper = upper - self.step = step - - def _wrap_attribute(self, attr): - """Wrap the empty attributes of the Slice in a Const node.""" - if not attr: - const = const_factory(attr) - const.parent = self - return const - return attr - - @decorators.cachedproperty - def _proxied(self): - builtins = MANAGER.builtins_module - return builtins.getattr("slice")[0] - - def pytype(self): - """Get the name of the type that this node represents. - - :returns: The name of the type. - :rtype: str - """ - return "%s.slice" % BUILTINS - - def igetattr(self, attrname, context=None): - """Infer the possible values of the given attribute on the slice. - - :param attrname: The name of the attribute to infer. - :type attrname: str - - :returns: The inferred possible values. - :rtype: iterable(NodeNG) - """ - if attrname == "start": - yield self._wrap_attribute(self.lower) - elif attrname == "stop": - yield self._wrap_attribute(self.upper) - elif attrname == "step": - yield self._wrap_attribute(self.step) - else: - yield from self.getattr(attrname, context=context) - - def getattr(self, attrname, context=None): - return self._proxied.getattr(attrname, context) - - def get_children(self): - if self.lower is not None: - yield self.lower - - if self.upper is not None: - yield self.upper - - if self.step is not None: - yield self.step - - -class Starred(mixins.ParentAssignTypeMixin, NodeNG): - """Class representing an :class:`ast.Starred` node. - - >>> node = astroid.extract_node('*args') - >>> node - - """ - - _astroid_fields = ("value",) - _other_fields = ("ctx",) - value = None - """What is being unpacked. - - :type: NodeNG or None - """ - - def __init__(self, ctx=None, lineno=None, col_offset=None, parent=None): - """ - :param ctx: Whether the list is assigned to or loaded from. - :type ctx: Context or None - - :param lineno: The line that this node appears on in the source code. - :type lineno: int or None - - :param col_offset: The column that this node appears on in the - source code. - :type col_offset: int or None - - :param parent: The parent node in the syntax tree. - :type parent: NodeNG or None - """ - self.ctx = ctx - """Whether the starred item is assigned to or loaded from. - - :type: Context or None - """ - - super().__init__(lineno=lineno, col_offset=col_offset, parent=parent) - - def postinit(self, value=None): - """Do some setup after initialisation. - - :param value: What is being unpacked. - :type value: NodeNG or None - """ - self.value = value - - def get_children(self): - yield self.value - - -class Subscript(NodeNG): - """Class representing an :class:`ast.Subscript` node. - - >>> node = astroid.extract_node('things[1:3]') - >>> node - - """ - - _astroid_fields = ("value", "slice") - _other_fields = ("ctx",) - value = None - """What is being indexed. - - :type: NodeNG or None - """ - slice = None - """The slice being used to lookup. - - :type: NodeNG or None - """ - - def __init__(self, ctx=None, lineno=None, col_offset=None, parent=None): - """ - :param ctx: Whether the subscripted item is assigned to or loaded from. - :type ctx: Context or None - - :param lineno: The line that this node appears on in the source code. - :type lineno: int or None - - :param col_offset: The column that this node appears on in the - source code. - :type col_offset: int or None - - :param parent: The parent node in the syntax tree. - :type parent: NodeNG or None - """ - self.ctx = ctx - """Whether the subscripted item is assigned to or loaded from. - - :type: Context or None - """ - - super().__init__(lineno=lineno, col_offset=col_offset, parent=parent) - - # pylint: disable=redefined-builtin; had to use the same name as builtin ast module. - def postinit(self, value=None, slice=None): - """Do some setup after initialisation. - - :param value: What is being indexed. - :type value: NodeNG or None - - :param slice: The slice being used to lookup. - :type slice: NodeNG or None - """ - self.value = value - self.slice = slice - - def get_children(self): - yield self.value - yield self.slice - - -class TryExcept(mixins.MultiLineBlockMixin, mixins.BlockRangeMixIn, Statement): - """Class representing an :class:`ast.TryExcept` node. - - >>> node = astroid.extract_node(''' - try: - do_something() - except Exception as error: - print("Error!") - ''') - >>> node - - """ - - _astroid_fields = ("body", "handlers", "orelse") - _multi_line_block_fields = ("body", "handlers", "orelse") - body = None - """The contents of the block to catch exceptions from. - - :type: list(NodeNG) or None - """ - handlers = None - """The exception handlers. - - :type: list(ExceptHandler) or None - """ - orelse = None - """The contents of the ``else`` block. - - :type: list(NodeNG) or None - """ - - def postinit(self, body=None, handlers=None, orelse=None): - """Do some setup after initialisation. - - :param body: The contents of the block to catch exceptions from. - :type body: list(NodeNG) or None - - :param handlers: The exception handlers. - :type handlers: list(ExceptHandler) or None - - :param orelse: The contents of the ``else`` block. - :type orelse: list(NodeNG) or None - """ - self.body = body - self.handlers = handlers - self.orelse = orelse - - def _infer_name(self, frame, name): - return name - - def block_range(self, lineno): - """Get a range from the given line number to where this node ends. - - :param lineno: The line number to start the range at. - :type lineno: int - - :returns: The range of line numbers that this node belongs to, - starting at the given line number. - :rtype: tuple(int, int) - """ - last = None - for exhandler in self.handlers: - if exhandler.type and lineno == exhandler.type.fromlineno: - return lineno, lineno - if exhandler.body[0].fromlineno <= lineno <= exhandler.body[-1].tolineno: - return lineno, exhandler.body[-1].tolineno - if last is None: - last = exhandler.body[0].fromlineno - 1 - return self._elsed_block_range(lineno, self.orelse, last) - - def get_children(self): - yield from self.body - - yield from self.handlers or () - yield from self.orelse or () - - -class TryFinally(mixins.MultiLineBlockMixin, mixins.BlockRangeMixIn, Statement): - """Class representing an :class:`ast.TryFinally` node. - - >>> node = astroid.extract_node(''' - try: - do_something() - except Exception as error: - print("Error!") - finally: - print("Cleanup!") - ''') - >>> node - - """ - - _astroid_fields = ("body", "finalbody") - _multi_line_block_fields = ("body", "finalbody") - body = None - """The try-except that the finally is attached to. - - :type: list(TryExcept) or None - """ - finalbody = None - """The contents of the ``finally`` block. - - :type: list(NodeNG) or None - """ - - def postinit(self, body=None, finalbody=None): - """Do some setup after initialisation. - - :param body: The try-except that the finally is attached to. - :type body: list(TryExcept) or None - - :param finalbody: The contents of the ``finally`` block. - :type finalbody: list(NodeNG) or None - """ - self.body = body - self.finalbody = finalbody - - def block_range(self, lineno): - """Get a range from the given line number to where this node ends. - - :param lineno: The line number to start the range at. - :type lineno: int - - :returns: The range of line numbers that this node belongs to, - starting at the given line number. - :rtype: tuple(int, int) - """ - child = self.body[0] - # py2.5 try: except: finally: - if ( - isinstance(child, TryExcept) - and child.fromlineno == self.fromlineno - and child.tolineno >= lineno > self.fromlineno - ): - return child.block_range(lineno) - return self._elsed_block_range(lineno, self.finalbody) - - def get_children(self): - yield from self.body - yield from self.finalbody - - -class Tuple(_BaseContainer): - """Class representing an :class:`ast.Tuple` node. - - >>> node = astroid.extract_node('(1, 2, 3)') - >>> node - - """ - - _other_fields = ("ctx",) - - def __init__(self, ctx=None, lineno=None, col_offset=None, parent=None): - """ - :param ctx: Whether the tuple is assigned to or loaded from. - :type ctx: Context or None - - :param lineno: The line that this node appears on in the source code. - :type lineno: int or None - - :param col_offset: The column that this node appears on in the - source code. - :type col_offset: int or None - - :param parent: The parent node in the syntax tree. - :type parent: NodeNG or None - """ - self.ctx = ctx - """Whether the tuple is assigned to or loaded from. - - :type: Context or None - """ - - super().__init__(lineno, col_offset, parent) - - def pytype(self): - """Get the name of the type that this node represents. - - :returns: The name of the type. - :rtype: str - """ - return "%s.tuple" % BUILTINS - - def getitem(self, index, context=None): - """Get an item from this node. - - :param index: The node to use as a subscript index. - :type index: Const or Slice - """ - return _container_getitem(self, self.elts, index, context=context) - - -class UnaryOp(NodeNG): - """Class representing an :class:`ast.UnaryOp` node. - - >>> node = astroid.extract_node('-5') - >>> node - - """ - - _astroid_fields = ("operand",) - _other_fields = ("op",) - operand = None - """What the unary operator is applied to. - - :type: NodeNG or None - """ - - def __init__(self, op=None, lineno=None, col_offset=None, parent=None): - """ - :param op: The operator. - :type: str or None - - :param lineno: The line that this node appears on in the source code. - :type lineno: int or None - - :param col_offset: The column that this node appears on in the - source code. - :type col_offset: int or None - - :param parent: The parent node in the syntax tree. - :type parent: NodeNG or None - """ - self.op = op - """The operator. - - :type: str or None - """ - - super().__init__(lineno, col_offset, parent) - - def postinit(self, operand=None): - """Do some setup after initialisation. - - :param operand: What the unary operator is applied to. - :type operand: NodeNG or None - """ - self.operand = operand - - # This is set by inference.py - def _infer_unaryop(self, context=None): - raise NotImplementedError - - def type_errors(self, context=None): - """Get a list of type errors which can occur during inference. - - Each TypeError is represented by a :class:`BadBinaryOperationMessage`, - which holds the original exception. - - :returns: The list of possible type errors. - :rtype: list(BadBinaryOperationMessage) - """ - try: - results = self._infer_unaryop(context=context) - return [ - result - for result in results - if isinstance(result, util.BadUnaryOperationMessage) - ] - except exceptions.InferenceError: - return [] - - def get_children(self): - yield self.operand - - def op_precedence(self): - if self.op == "not": - return OP_PRECEDENCE[self.op] - - return super().op_precedence() - - -class While(mixins.MultiLineBlockMixin, mixins.BlockRangeMixIn, Statement): - """Class representing an :class:`ast.While` node. - - >>> node = astroid.extract_node(''' - while condition(): - print("True") - ''') - >>> node - - """ - - _astroid_fields = ("test", "body", "orelse") - _multi_line_block_fields = ("body", "orelse") - test = None - """The condition that the loop tests. - - :type: NodeNG or None - """ - body = None - """The contents of the loop. - - :type: list(NodeNG) or None - """ - orelse = None - """The contents of the ``else`` block. - - :type: list(NodeNG) or None - """ - - def postinit(self, test=None, body=None, orelse=None): - """Do some setup after initialisation. - - :param test: The condition that the loop tests. - :type test: NodeNG or None - - :param body: The contents of the loop. - :type body: list(NodeNG) or None - - :param orelse: The contents of the ``else`` block. - :type orelse: list(NodeNG) or None - """ - self.test = test - self.body = body - self.orelse = orelse - - @decorators.cachedproperty - def blockstart_tolineno(self): - """The line on which the beginning of this block ends. - - :type: int - """ - return self.test.tolineno - - def block_range(self, lineno): - """Get a range from the given line number to where this node ends. - - :param lineno: The line number to start the range at. - :type lineno: int - - :returns: The range of line numbers that this node belongs to, - starting at the given line number. - :rtype: tuple(int, int) - """ - return self._elsed_block_range(lineno, self.orelse) - - def get_children(self): - yield self.test - - yield from self.body - yield from self.orelse - - def _get_yield_nodes_skip_lambdas(self): - """A While node can contain a Yield node in the test""" - yield from self.test._get_yield_nodes_skip_lambdas() - yield from super()._get_yield_nodes_skip_lambdas() - - -class With( - mixins.MultiLineBlockMixin, - mixins.BlockRangeMixIn, - mixins.AssignTypeMixin, - Statement, -): - """Class representing an :class:`ast.With` node. - - >>> node = astroid.extract_node(''' - with open(file_path) as file_: - print(file_.read()) - ''') - >>> node - - """ - - _astroid_fields = ("items", "body") - _other_other_fields = ("type_annotation",) - _multi_line_block_fields = ("body",) - items = None - """The pairs of context managers and the names they are assigned to. - - :type: list(tuple(NodeNG, AssignName or None)) or None - """ - body = None - """The contents of the ``with`` block. - - :type: list(NodeNG) or None - """ - type_annotation = None - """If present, this will contain the type annotation passed by a type comment - - :type: NodeNG or None - """ - - def postinit(self, items=None, body=None, type_annotation=None): - """Do some setup after initialisation. - - :param items: The pairs of context managers and the names - they are assigned to. - :type items: list(tuple(NodeNG, AssignName or None)) or None - - :param body: The contents of the ``with`` block. - :type body: list(NodeNG) or None - """ - self.items = items - self.body = body - self.type_annotation = type_annotation - - @decorators.cachedproperty - def blockstart_tolineno(self): - """The line on which the beginning of this block ends. - - :type: int - """ - return self.items[-1][0].tolineno - - def get_children(self): - """Get the child nodes below this node. - - :returns: The children. - :rtype: iterable(NodeNG) - """ - for expr, var in self.items: - yield expr - if var: - yield var - yield from self.body - - -class AsyncWith(With): - """Asynchronous ``with`` built with the ``async`` keyword.""" - - -class Yield(NodeNG): - """Class representing an :class:`ast.Yield` node. - - >>> node = astroid.extract_node('yield True') - >>> node - - """ - - _astroid_fields = ("value",) - value = None - """The value to yield. - - :type: NodeNG or None - """ - - def postinit(self, value=None): - """Do some setup after initialisation. - - :param value: The value to yield. - :type value: NodeNG or None - """ - self.value = value - - def get_children(self): - if self.value is not None: - yield self.value - - def _get_yield_nodes_skip_lambdas(self): - yield self - - -class YieldFrom(Yield): - """Class representing an :class:`ast.YieldFrom` node.""" - - -class DictUnpack(mixins.NoChildrenMixin, NodeNG): - """Represents the unpacking of dicts into dicts using :pep:`448`.""" - - -class FormattedValue(NodeNG): - """Class representing an :class:`ast.FormattedValue` node. - - Represents a :pep:`498` format string. - - >>> node = astroid.extract_node('f"Format {type_}"') - >>> node - - >>> node.values - [, ] - """ - - _astroid_fields = ("value", "format_spec") - value = None - """The value to be formatted into the string. - - :type: NodeNG or None - """ - conversion = None - """The type of formatting to be applied to the value. - - .. seealso:: - :class:`ast.FormattedValue` - - :type: int or None - """ - format_spec = None - """The formatting to be applied to the value. - - .. seealso:: - :class:`ast.FormattedValue` - - :type: JoinedStr or None - """ - - def postinit(self, value, conversion=None, format_spec=None): - """Do some setup after initialisation. - - :param value: The value to be formatted into the string. - :type value: NodeNG - - :param conversion: The type of formatting to be applied to the value. - :type conversion: int or None - - :param format_spec: The formatting to be applied to the value. - :type format_spec: JoinedStr or None - """ - self.value = value - self.conversion = conversion - self.format_spec = format_spec - - def get_children(self): - yield self.value - - if self.format_spec is not None: - yield self.format_spec - - -class JoinedStr(NodeNG): - """Represents a list of string expressions to be joined. - - >>> node = astroid.extract_node('f"Format {type_}"') - >>> node - - """ - - _astroid_fields = ("values",) - values = None - """The string expressions to be joined. - - :type: list(FormattedValue or Const) or None - """ - - def postinit(self, values=None): - """Do some setup after initialisation. - - :param value: The string expressions to be joined. - - :type: list(FormattedValue or Const) or None - """ - self.values = values - - def get_children(self): - yield from self.values - - -class NamedExpr(mixins.AssignTypeMixin, NodeNG): - """Represents the assignment from the assignment expression - - >>> module = astroid.parse('if a := 1: pass') - >>> module.body[0].test - - """ - - _astroid_fields = ("target", "value") - target = None - """The assignment target - - :type: Name - """ - value = None - """The value that gets assigned in the expression - - :type: NodeNG - """ - - def postinit(self, target, value): - self.target = target - self.value = value - - -class Unknown(mixins.AssignTypeMixin, NodeNG): - """This node represents a node in a constructed AST where - introspection is not possible. At the moment, it's only used in - the args attribute of FunctionDef nodes where function signature - introspection failed. - """ - - name = "Unknown" - - def qname(self): - return "Unknown" - - def infer(self, context=None, **kwargs): - """Inference on an Unknown node immediately terminates.""" - yield util.Uninferable - - -class EvaluatedObject(NodeNG): - """Contains an object that has already been inferred - - This class is useful to pre-evaluate a particular node, - with the resulting class acting as the non-evaluated node. - """ - - name = "EvaluatedObject" - _astroid_fields = ("original",) - _other_fields = ("value",) - - original = None - """The original node that has already been evaluated - - :type: NodeNG - """ - - value = None - """The inferred value - - :type: Union[Uninferable, NodeNG] - """ - - def __init__(self, original, value): - self.original = original - self.value = value - super().__init__( - lineno=self.original.lineno, - col_offset=self.original.col_offset, - parent=self.original.parent, - ) - - def infer(self, context=None, **kwargs): - yield self.value - - -# constants ############################################################## - -CONST_CLS = { - list: List, - tuple: Tuple, - dict: Dict, - set: Set, - type(None): Const, - type(NotImplemented): Const, -} -if PY38: - CONST_CLS[type(...)] = Const - - -def _update_const_classes(): - """update constant classes, so the keys of CONST_CLS can be reused""" - klasses = (bool, int, float, complex, str, bytes) - for kls in klasses: - CONST_CLS[kls] = Const - - -_update_const_classes() - - -def _two_step_initialization(cls, value): - instance = cls() - instance.postinit(value) - return instance - - -def _dict_initialization(cls, value): - if isinstance(value, dict): - value = tuple(value.items()) - return _two_step_initialization(cls, value) - - -_CONST_CLS_CONSTRUCTORS = { - List: _two_step_initialization, - Tuple: _two_step_initialization, - Dict: _dict_initialization, - Set: _two_step_initialization, - Const: lambda cls, value: cls(value), -} - - -def const_factory(value): - """return an astroid node for a python value""" - # XXX we should probably be stricter here and only consider stuff in - # CONST_CLS or do better treatment: in case where value is not in CONST_CLS, - # we should rather recall the builder on this value than returning an empty - # node (another option being that const_factory shouldn't be called with something - # not in CONST_CLS) - assert not isinstance(value, NodeNG) - - # Hack for ignoring elements of a sequence - # or a mapping, in order to avoid transforming - # each element to an AST. This is fixed in 2.0 - # and this approach is a temporary hack. - if isinstance(value, (list, set, tuple, dict)): - elts = [] - else: - elts = value - - try: - initializer_cls = CONST_CLS[value.__class__] - initializer = _CONST_CLS_CONSTRUCTORS[initializer_cls] - return initializer(initializer_cls, elts) - except (KeyError, AttributeError): - node = EmptyNode() - node.object = value - return node - - -def is_from_decorator(node): - """Return True if the given node is the child of a decorator""" - parent = node.parent - while parent is not None: - if isinstance(parent, Decorators): - return True - parent = parent.parent - return False diff --git a/Jobs_Collections/venv/Lib/python3.8/site-packages/astroid/nodes.py b/Jobs_Collections/venv/Lib/python3.8/site-packages/astroid/nodes.py deleted file mode 100644 index 4ce4ebe..0000000 --- a/Jobs_Collections/venv/Lib/python3.8/site-packages/astroid/nodes.py +++ /dev/null @@ -1,176 +0,0 @@ -# Copyright (c) 2006-2011, 2013 LOGILAB S.A. (Paris, FRANCE) -# Copyright (c) 2010 Daniel Harding -# Copyright (c) 2014-2020 Claudiu Popa -# Copyright (c) 2014 Google, Inc. -# Copyright (c) 2015-2016 Ceridwen -# Copyright (c) 2016 Jared Garst -# Copyright (c) 2017 Ashley Whetter -# Copyright (c) 2017 rr- -# Copyright (c) 2018 Bryce Guinta - -# Licensed under the LGPL: https://www.gnu.org/licenses/old-licenses/lgpl-2.1.en.html -# For details: https://github.com/PyCQA/astroid/blob/master/COPYING.LESSER - -"""Every available node class. - -.. seealso:: - :doc:`ast documentation ` - -All nodes inherit from :class:`~astroid.node_classes.NodeNG`. -""" -# pylint: disable=unused-import,redefined-builtin - -from astroid.node_classes import ( - Arguments, - AssignAttr, - Assert, - Assign, - AnnAssign, - AssignName, - AugAssign, - Repr, - BinOp, - BoolOp, - Break, - Call, - Compare, - Comprehension, - Const, - Continue, - Decorators, - DelAttr, - DelName, - Delete, - Dict, - Expr, - Ellipsis, - EmptyNode, - ExceptHandler, - Exec, - ExtSlice, - For, - ImportFrom, - Attribute, - Global, - If, - IfExp, - Import, - Index, - Keyword, - List, - Name, - NamedExpr, - Nonlocal, - Pass, - Print, - Raise, - Return, - Set, - Slice, - Starred, - Subscript, - TryExcept, - TryFinally, - Tuple, - UnaryOp, - While, - With, - Yield, - YieldFrom, - const_factory, - AsyncFor, - Await, - AsyncWith, - FormattedValue, - JoinedStr, - # Node not present in the builtin ast module. - DictUnpack, - Unknown, - EvaluatedObject, -) -from astroid.scoped_nodes import ( - Module, - GeneratorExp, - Lambda, - DictComp, - ListComp, - SetComp, - FunctionDef, - ClassDef, - AsyncFunctionDef, -) - - -ALL_NODE_CLASSES = ( - AsyncFunctionDef, - AsyncFor, - AsyncWith, - Await, - Arguments, - AssignAttr, - Assert, - Assign, - AnnAssign, - AssignName, - AugAssign, - Repr, - BinOp, - BoolOp, - Break, - Call, - ClassDef, - Compare, - Comprehension, - Const, - Continue, - Decorators, - DelAttr, - DelName, - Delete, - Dict, - DictComp, - DictUnpack, - Expr, - Ellipsis, - EmptyNode, - ExceptHandler, - Exec, - ExtSlice, - For, - ImportFrom, - FunctionDef, - Attribute, - GeneratorExp, - Global, - If, - IfExp, - Import, - Index, - Keyword, - Lambda, - List, - ListComp, - Name, - NamedExpr, - Nonlocal, - Module, - Pass, - Print, - Raise, - Return, - Set, - SetComp, - Slice, - Starred, - Subscript, - TryExcept, - TryFinally, - Tuple, - UnaryOp, - While, - With, - Yield, - YieldFrom, - FormattedValue, - JoinedStr, -) diff --git a/Jobs_Collections/venv/Lib/python3.8/site-packages/astroid/objects.py b/Jobs_Collections/venv/Lib/python3.8/site-packages/astroid/objects.py deleted file mode 100644 index fb782e6..0000000 --- a/Jobs_Collections/venv/Lib/python3.8/site-packages/astroid/objects.py +++ /dev/null @@ -1,314 +0,0 @@ -# Copyright (c) 2015-2016, 2018-2020 Claudiu Popa -# Copyright (c) 2015-2016 Ceridwen -# Copyright (c) 2015 Florian Bruhin -# Copyright (c) 2016 Derek Gustafson -# Copyright (c) 2018 hippo91 -# Copyright (c) 2018 Bryce Guinta - -# Licensed under the LGPL: https://www.gnu.org/licenses/old-licenses/lgpl-2.1.en.html -# For details: https://github.com/PyCQA/astroid/blob/master/COPYING.LESSER - - -""" -Inference objects are a way to represent composite AST nodes, -which are used only as inference results, so they can't be found in the -original AST tree. For instance, inferring the following frozenset use, -leads to an inferred FrozenSet: - - Call(func=Name('frozenset'), args=Tuple(...)) -""" - -import builtins - -from astroid import bases -from astroid import decorators -from astroid import exceptions -from astroid import MANAGER -from astroid import node_classes -from astroid import scoped_nodes -from astroid import util - - -BUILTINS = builtins.__name__ -objectmodel = util.lazy_import("interpreter.objectmodel") - - -class FrozenSet(node_classes._BaseContainer): - """class representing a FrozenSet composite node""" - - def pytype(self): - return "%s.frozenset" % BUILTINS - - def _infer(self, context=None): - yield self - - @decorators.cachedproperty - def _proxied(self): # pylint: disable=method-hidden - ast_builtins = MANAGER.builtins_module - return ast_builtins.getattr("frozenset")[0] - - -class Super(node_classes.NodeNG): - """Proxy class over a super call. - - This class offers almost the same behaviour as Python's super, - which is MRO lookups for retrieving attributes from the parents. - - The *mro_pointer* is the place in the MRO from where we should - start looking, not counting it. *mro_type* is the object which - provides the MRO, it can be both a type or an instance. - *self_class* is the class where the super call is, while - *scope* is the function where the super call is. - """ - - # pylint: disable=unnecessary-lambda - special_attributes = util.lazy_descriptor(lambda: objectmodel.SuperModel()) - - # pylint: disable=super-init-not-called - def __init__(self, mro_pointer, mro_type, self_class, scope): - self.type = mro_type - self.mro_pointer = mro_pointer - self._class_based = False - self._self_class = self_class - self._scope = scope - - def _infer(self, context=None): - yield self - - def super_mro(self): - """Get the MRO which will be used to lookup attributes in this super.""" - if not isinstance(self.mro_pointer, scoped_nodes.ClassDef): - raise exceptions.SuperError( - "The first argument to super must be a subtype of " - "type, not {mro_pointer}.", - super_=self, - ) - - if isinstance(self.type, scoped_nodes.ClassDef): - # `super(type, type)`, most likely in a class method. - self._class_based = True - mro_type = self.type - else: - mro_type = getattr(self.type, "_proxied", None) - if not isinstance(mro_type, (bases.Instance, scoped_nodes.ClassDef)): - raise exceptions.SuperError( - "The second argument to super must be an " - "instance or subtype of type, not {type}.", - super_=self, - ) - - if not mro_type.newstyle: - raise exceptions.SuperError( - "Unable to call super on old-style classes.", super_=self - ) - - mro = mro_type.mro() - if self.mro_pointer not in mro: - raise exceptions.SuperError( - "The second argument to super must be an " - "instance or subtype of type, not {type}.", - super_=self, - ) - - index = mro.index(self.mro_pointer) - return mro[index + 1 :] - - @decorators.cachedproperty - def _proxied(self): - ast_builtins = MANAGER.builtins_module - return ast_builtins.getattr("super")[0] - - def pytype(self): - return "%s.super" % BUILTINS - - def display_type(self): - return "Super of" - - @property - def name(self): - """Get the name of the MRO pointer.""" - return self.mro_pointer.name - - def qname(self): - return "super" - - def igetattr(self, name, context=None): - """Retrieve the inferred values of the given attribute name.""" - - if name in self.special_attributes: - yield self.special_attributes.lookup(name) - return - - try: - mro = self.super_mro() - # Don't let invalid MROs or invalid super calls - # leak out as is from this function. - except exceptions.SuperError as exc: - raise exceptions.AttributeInferenceError( - ( - "Lookup for {name} on {target!r} because super call {super!r} " - "is invalid." - ), - target=self, - attribute=name, - context=context, - super_=exc.super_, - ) from exc - except exceptions.MroError as exc: - raise exceptions.AttributeInferenceError( - ( - "Lookup for {name} on {target!r} failed because {cls!r} has an " - "invalid MRO." - ), - target=self, - attribute=name, - context=context, - mros=exc.mros, - cls=exc.cls, - ) from exc - found = False - for cls in mro: - if name not in cls.locals: - continue - - found = True - for inferred in bases._infer_stmts([cls[name]], context, frame=self): - if not isinstance(inferred, scoped_nodes.FunctionDef): - yield inferred - continue - - # We can obtain different descriptors from a super depending - # on what we are accessing and where the super call is. - if inferred.type == "classmethod": - yield bases.BoundMethod(inferred, cls) - elif self._scope.type == "classmethod" and inferred.type == "method": - yield inferred - elif self._class_based or inferred.type == "staticmethod": - yield inferred - elif isinstance(inferred, Property): - function = inferred.function - try: - yield from function.infer_call_result( - caller=self, context=context - ) - except exceptions.InferenceError: - yield util.Uninferable - elif bases._is_property(inferred): - # TODO: support other descriptors as well. - try: - yield from inferred.infer_call_result(self, context) - except exceptions.InferenceError: - yield util.Uninferable - else: - yield bases.BoundMethod(inferred, cls) - - if not found: - raise exceptions.AttributeInferenceError( - target=self, attribute=name, context=context - ) - - def getattr(self, name, context=None): - return list(self.igetattr(name, context=context)) - - -class ExceptionInstance(bases.Instance): - """Class for instances of exceptions - - It has special treatment for some of the exceptions's attributes, - which are transformed at runtime into certain concrete objects, such as - the case of .args. - """ - - @decorators.cachedproperty - def special_attributes(self): - qname = self.qname() - instance = objectmodel.BUILTIN_EXCEPTIONS.get( - qname, objectmodel.ExceptionInstanceModel - ) - return instance()(self) - - -class DictInstance(bases.Instance): - """Special kind of instances for dictionaries - - This instance knows the underlying object model of the dictionaries, which means - that methods such as .values or .items can be properly inferred. - """ - - # pylint: disable=unnecessary-lambda - special_attributes = util.lazy_descriptor(lambda: objectmodel.DictModel()) - - -# Custom objects tailored for dictionaries, which are used to -# disambiguate between the types of Python 2 dict's method returns -# and Python 3 (where they return set like objects). -class DictItems(bases.Proxy): - __str__ = node_classes.NodeNG.__str__ - __repr__ = node_classes.NodeNG.__repr__ - - -class DictKeys(bases.Proxy): - __str__ = node_classes.NodeNG.__str__ - __repr__ = node_classes.NodeNG.__repr__ - - -class DictValues(bases.Proxy): - __str__ = node_classes.NodeNG.__str__ - __repr__ = node_classes.NodeNG.__repr__ - - -class PartialFunction(scoped_nodes.FunctionDef): - """A class representing partial function obtained via functools.partial""" - - def __init__( - self, call, name=None, doc=None, lineno=None, col_offset=None, parent=None - ): - super().__init__(name, doc, lineno, col_offset, parent) - self.filled_positionals = len(call.positional_arguments[1:]) - self.filled_args = call.positional_arguments[1:] - self.filled_keywords = call.keyword_arguments - - def infer_call_result(self, caller=None, context=None): - if context: - current_passed_keywords = { - keyword for (keyword, _) in context.callcontext.keywords - } - for keyword, value in self.filled_keywords.items(): - if keyword not in current_passed_keywords: - context.callcontext.keywords.append((keyword, value)) - - call_context_args = context.callcontext.args or [] - context.callcontext.args = self.filled_args + call_context_args - - return super().infer_call_result(caller=caller, context=context) - - def qname(self): - return self.__class__.__name__ - - -# TODO: Hack to solve the circular import problem between node_classes and objects -# This is not needed in 2.0, which has a cleaner design overall -node_classes.Dict.__bases__ = (node_classes.NodeNG, DictInstance) - - -class Property(scoped_nodes.FunctionDef): - """Class representing a Python property""" - - def __init__( - self, function, name=None, doc=None, lineno=None, col_offset=None, parent=None - ): - self.function = function - super().__init__(name, doc, lineno, col_offset, parent) - - # pylint: disable=unnecessary-lambda - special_attributes = util.lazy_descriptor(lambda: objectmodel.PropertyModel()) - type = "property" - - def pytype(self): - return "%s.property" % BUILTINS - - def infer_call_result(self, caller=None, context=None): - raise exceptions.InferenceError("Properties are not callable") - - def infer(self, context=None, **kwargs): - return iter((self,)) diff --git a/Jobs_Collections/venv/Lib/python3.8/site-packages/astroid/protocols.py b/Jobs_Collections/venv/Lib/python3.8/site-packages/astroid/protocols.py deleted file mode 100644 index 2cdf554..0000000 --- a/Jobs_Collections/venv/Lib/python3.8/site-packages/astroid/protocols.py +++ /dev/null @@ -1,780 +0,0 @@ -# -*- coding: utf-8 -*- -# Copyright (c) 2009-2011, 2013-2014 LOGILAB S.A. (Paris, FRANCE) -# Copyright (c) 2014-2020 Claudiu Popa -# Copyright (c) 2014 Google, Inc. -# Copyright (c) 2014 Eevee (Alex Munroe) -# Copyright (c) 2015-2016 Ceridwen -# Copyright (c) 2015 Dmitry Pribysh -# Copyright (c) 2016 Derek Gustafson -# Copyright (c) 2017-2018 Ashley Whetter -# Copyright (c) 2017 ลukasz Rogalski -# Copyright (c) 2017 rr- -# Copyright (c) 2018 Nick Drozd -# Copyright (c) 2018 Ville Skyttรค -# Copyright (c) 2018 Bryce Guinta -# Copyright (c) 2018 HoverHell -# Copyright (c) 2019 Hugo van Kemenade - -# Licensed under the LGPL: https://www.gnu.org/licenses/old-licenses/lgpl-2.1.en.html -# For details: https://github.com/PyCQA/astroid/blob/master/COPYING.LESSER - -"""this module contains a set of functions to handle python protocols for nodes -where it makes sense. -""" - -import collections -import operator as operator_mod - -import itertools - -from astroid import Store -from astroid import arguments -from astroid import bases -from astroid import context as contextmod -from astroid import exceptions -from astroid import decorators -from astroid import node_classes -from astroid import helpers -from astroid import nodes -from astroid import util - -raw_building = util.lazy_import("raw_building") -objects = util.lazy_import("objects") - - -def _reflected_name(name): - return "__r" + name[2:] - - -def _augmented_name(name): - return "__i" + name[2:] - - -_CONTEXTLIB_MGR = "contextlib.contextmanager" -BIN_OP_METHOD = { - "+": "__add__", - "-": "__sub__", - "/": "__truediv__", - "//": "__floordiv__", - "*": "__mul__", - "**": "__pow__", - "%": "__mod__", - "&": "__and__", - "|": "__or__", - "^": "__xor__", - "<<": "__lshift__", - ">>": "__rshift__", - "@": "__matmul__", -} - -REFLECTED_BIN_OP_METHOD = { - key: _reflected_name(value) for (key, value) in BIN_OP_METHOD.items() -} -AUGMENTED_OP_METHOD = { - key + "=": _augmented_name(value) for (key, value) in BIN_OP_METHOD.items() -} - -UNARY_OP_METHOD = { - "+": "__pos__", - "-": "__neg__", - "~": "__invert__", - "not": None, # XXX not '__nonzero__' -} -_UNARY_OPERATORS = { - "+": operator_mod.pos, - "-": operator_mod.neg, - "~": operator_mod.invert, - "not": operator_mod.not_, -} - - -def _infer_unary_op(obj, op): - func = _UNARY_OPERATORS[op] - value = func(obj) - return nodes.const_factory(value) - - -nodes.Tuple.infer_unary_op = lambda self, op: _infer_unary_op(tuple(self.elts), op) -nodes.List.infer_unary_op = lambda self, op: _infer_unary_op(self.elts, op) -nodes.Set.infer_unary_op = lambda self, op: _infer_unary_op(set(self.elts), op) -nodes.Const.infer_unary_op = lambda self, op: _infer_unary_op(self.value, op) -nodes.Dict.infer_unary_op = lambda self, op: _infer_unary_op(dict(self.items), op) - -# Binary operations - -BIN_OP_IMPL = { - "+": lambda a, b: a + b, - "-": lambda a, b: a - b, - "/": lambda a, b: a / b, - "//": lambda a, b: a // b, - "*": lambda a, b: a * b, - "**": lambda a, b: a ** b, - "%": lambda a, b: a % b, - "&": lambda a, b: a & b, - "|": lambda a, b: a | b, - "^": lambda a, b: a ^ b, - "<<": lambda a, b: a << b, - ">>": lambda a, b: a >> b, - "@": operator_mod.matmul, -} -for _KEY, _IMPL in list(BIN_OP_IMPL.items()): - BIN_OP_IMPL[_KEY + "="] = _IMPL - - -@decorators.yes_if_nothing_inferred -def const_infer_binary_op(self, opnode, operator, other, context, _): - not_implemented = nodes.Const(NotImplemented) - if isinstance(other, nodes.Const): - try: - impl = BIN_OP_IMPL[operator] - try: - yield nodes.const_factory(impl(self.value, other.value)) - except TypeError: - # ArithmeticError is not enough: float >> float is a TypeError - yield not_implemented - except Exception: # pylint: disable=broad-except - yield util.Uninferable - except TypeError: - yield not_implemented - elif isinstance(self.value, str) and operator == "%": - # TODO(cpopa): implement string interpolation later on. - yield util.Uninferable - else: - yield not_implemented - - -nodes.Const.infer_binary_op = const_infer_binary_op - - -def _multiply_seq_by_int(self, opnode, other, context): - node = self.__class__(parent=opnode) - filtered_elts = ( - helpers.safe_infer(elt, context) or util.Uninferable - for elt in self.elts - if elt is not util.Uninferable - ) - node.elts = list(filtered_elts) * other.value - return node - - -def _filter_uninferable_nodes(elts, context): - for elt in elts: - if elt is util.Uninferable: - yield nodes.Unknown() - else: - for inferred in elt.infer(context): - if inferred is not util.Uninferable: - yield inferred - else: - yield nodes.Unknown() - - -@decorators.yes_if_nothing_inferred -def tl_infer_binary_op(self, opnode, operator, other, context, method): - not_implemented = nodes.Const(NotImplemented) - if isinstance(other, self.__class__) and operator == "+": - node = self.__class__(parent=opnode) - node.elts = list( - itertools.chain( - _filter_uninferable_nodes(self.elts, context), - _filter_uninferable_nodes(other.elts, context), - ) - ) - yield node - elif isinstance(other, nodes.Const) and operator == "*": - if not isinstance(other.value, int): - yield not_implemented - return - yield _multiply_seq_by_int(self, opnode, other, context) - elif isinstance(other, bases.Instance) and operator == "*": - # Verify if the instance supports __index__. - as_index = helpers.class_instance_as_index(other) - if not as_index: - yield util.Uninferable - else: - yield _multiply_seq_by_int(self, opnode, as_index, context) - else: - yield not_implemented - - -nodes.Tuple.infer_binary_op = tl_infer_binary_op -nodes.List.infer_binary_op = tl_infer_binary_op - - -@decorators.yes_if_nothing_inferred -def instance_class_infer_binary_op(self, opnode, operator, other, context, method): - return method.infer_call_result(self, context) - - -bases.Instance.infer_binary_op = instance_class_infer_binary_op -nodes.ClassDef.infer_binary_op = instance_class_infer_binary_op - - -# assignment ################################################################## - -"""the assigned_stmts method is responsible to return the assigned statement -(e.g. not inferred) according to the assignment type. - -The `assign_path` argument is used to record the lhs path of the original node. -For instance if we want assigned statements for 'c' in 'a, (b,c)', assign_path -will be [1, 1] once arrived to the Assign node. - -The `context` argument is the current inference context which should be given -to any intermediary inference necessary. -""" - - -def _resolve_looppart(parts, assign_path, context): - """recursive function to resolve multiple assignments on loops""" - assign_path = assign_path[:] - index = assign_path.pop(0) - for part in parts: - if part is util.Uninferable: - continue - if not hasattr(part, "itered"): - continue - try: - itered = part.itered() - except TypeError: - continue - for stmt in itered: - index_node = nodes.Const(index) - try: - assigned = stmt.getitem(index_node, context) - except ( - AttributeError, - exceptions.AstroidTypeError, - exceptions.AstroidIndexError, - ): - continue - if not assign_path: - # we achieved to resolved the assignment path, - # don't infer the last part - yield assigned - elif assigned is util.Uninferable: - break - else: - # we are not yet on the last part of the path - # search on each possibly inferred value - try: - yield from _resolve_looppart( - assigned.infer(context), assign_path, context - ) - except exceptions.InferenceError: - break - - -@decorators.raise_if_nothing_inferred -def for_assigned_stmts(self, node=None, context=None, assign_path=None): - if isinstance(self, nodes.AsyncFor) or getattr(self, "is_async", False): - # Skip inferring of async code for now - return dict(node=self, unknown=node, assign_path=assign_path, context=context) - if assign_path is None: - for lst in self.iter.infer(context): - if isinstance(lst, (nodes.Tuple, nodes.List)): - yield from lst.elts - else: - yield from _resolve_looppart(self.iter.infer(context), assign_path, context) - return dict(node=self, unknown=node, assign_path=assign_path, context=context) - - -nodes.For.assigned_stmts = for_assigned_stmts -nodes.Comprehension.assigned_stmts = for_assigned_stmts - - -def sequence_assigned_stmts(self, node=None, context=None, assign_path=None): - if assign_path is None: - assign_path = [] - try: - index = self.elts.index(node) - except ValueError as exc: - raise exceptions.InferenceError( - "Tried to retrieve a node {node!r} which does not exist", - node=self, - assign_path=assign_path, - context=context, - ) from exc - - assign_path.insert(0, index) - return self.parent.assigned_stmts( - node=self, context=context, assign_path=assign_path - ) - - -nodes.Tuple.assigned_stmts = sequence_assigned_stmts -nodes.List.assigned_stmts = sequence_assigned_stmts - - -def assend_assigned_stmts(self, node=None, context=None, assign_path=None): - return self.parent.assigned_stmts(node=self, context=context) - - -nodes.AssignName.assigned_stmts = assend_assigned_stmts -nodes.AssignAttr.assigned_stmts = assend_assigned_stmts - - -def _arguments_infer_argname(self, name, context): - # arguments information may be missing, in which case we can't do anything - # more - if not (self.arguments or self.vararg or self.kwarg): - yield util.Uninferable - return - - functype = self.parent.type - # first argument of instance/class method - if ( - self.arguments - and getattr(self.arguments[0], "name", None) == name - and functype != "staticmethod" - ): - cls = self.parent.parent.scope() - is_metaclass = isinstance(cls, nodes.ClassDef) and cls.type == "metaclass" - # If this is a metaclass, then the first argument will always - # be the class, not an instance. - if context.boundnode and isinstance(context.boundnode, bases.Instance): - cls = context.boundnode._proxied - if is_metaclass or functype == "classmethod": - yield cls - return - if functype == "method": - yield cls.instantiate_class() - return - - if context and context.callcontext: - call_site = arguments.CallSite(context.callcontext, context.extra_context) - yield from call_site.infer_argument(self.parent, name, context) - return - - if name == self.vararg: - vararg = nodes.const_factory(()) - vararg.parent = self - if not self.arguments and self.parent.name == "__init__": - cls = self.parent.parent.scope() - vararg.elts = [cls.instantiate_class()] - yield vararg - return - if name == self.kwarg: - kwarg = nodes.const_factory({}) - kwarg.parent = self - yield kwarg - return - # if there is a default value, yield it. And then yield Uninferable to reflect - # we can't guess given argument value - try: - context = contextmod.copy_context(context) - yield from self.default_value(name).infer(context) - yield util.Uninferable - except exceptions.NoDefault: - yield util.Uninferable - - -def arguments_assigned_stmts(self, node=None, context=None, assign_path=None): - if context.callcontext: - # reset call context/name - callcontext = context.callcontext - context = contextmod.copy_context(context) - context.callcontext = None - args = arguments.CallSite(callcontext, context=context) - return args.infer_argument(self.parent, node.name, context) - return _arguments_infer_argname(self, node.name, context) - - -nodes.Arguments.assigned_stmts = arguments_assigned_stmts - - -@decorators.raise_if_nothing_inferred -def assign_assigned_stmts(self, node=None, context=None, assign_path=None): - if not assign_path: - yield self.value - return None - yield from _resolve_assignment_parts( - self.value.infer(context), assign_path, context - ) - - return dict(node=self, unknown=node, assign_path=assign_path, context=context) - - -def assign_annassigned_stmts(self, node=None, context=None, assign_path=None): - for inferred in assign_assigned_stmts(self, node, context, assign_path): - if inferred is None: - yield util.Uninferable - else: - yield inferred - - -nodes.Assign.assigned_stmts = assign_assigned_stmts -nodes.AnnAssign.assigned_stmts = assign_annassigned_stmts -nodes.AugAssign.assigned_stmts = assign_assigned_stmts - - -def _resolve_assignment_parts(parts, assign_path, context): - """recursive function to resolve multiple assignments""" - assign_path = assign_path[:] - index = assign_path.pop(0) - for part in parts: - assigned = None - if isinstance(part, nodes.Dict): - # A dictionary in an iterating context - try: - assigned, _ = part.items[index] - except IndexError: - return - - elif hasattr(part, "getitem"): - index_node = nodes.Const(index) - try: - assigned = part.getitem(index_node, context) - except (exceptions.AstroidTypeError, exceptions.AstroidIndexError): - return - - if not assigned: - return - - if not assign_path: - # we achieved to resolved the assignment path, don't infer the - # last part - yield assigned - elif assigned is util.Uninferable: - return - else: - # we are not yet on the last part of the path search on each - # possibly inferred value - try: - yield from _resolve_assignment_parts( - assigned.infer(context), assign_path, context - ) - except exceptions.InferenceError: - return - - -@decorators.raise_if_nothing_inferred -def excepthandler_assigned_stmts(self, node=None, context=None, assign_path=None): - for assigned in node_classes.unpack_infer(self.type): - if isinstance(assigned, nodes.ClassDef): - assigned = objects.ExceptionInstance(assigned) - - yield assigned - return dict(node=self, unknown=node, assign_path=assign_path, context=context) - - -nodes.ExceptHandler.assigned_stmts = excepthandler_assigned_stmts - - -def _infer_context_manager(self, mgr, context): - inferred = next(mgr.infer(context=context)) - if isinstance(inferred, bases.Generator): - # Check if it is decorated with contextlib.contextmanager. - func = inferred.parent - if not func.decorators: - raise exceptions.InferenceError( - "No decorators found on inferred generator %s", node=func - ) - - for decorator_node in func.decorators.nodes: - decorator = next(decorator_node.infer(context=context)) - if isinstance(decorator, nodes.FunctionDef): - if decorator.qname() == _CONTEXTLIB_MGR: - break - else: - # It doesn't interest us. - raise exceptions.InferenceError(node=func) - - # Get the first yield point. If it has multiple yields, - # then a RuntimeError will be raised. - - possible_yield_points = func.nodes_of_class(nodes.Yield) - # Ignore yields in nested functions - yield_point = next( - (node for node in possible_yield_points if node.scope() == func), None - ) - if yield_point: - if not yield_point.value: - const = nodes.Const(None) - const.parent = yield_point - const.lineno = yield_point.lineno - yield const - else: - yield from yield_point.value.infer(context=context) - elif isinstance(inferred, bases.Instance): - try: - enter = next(inferred.igetattr("__enter__", context=context)) - except (exceptions.InferenceError, exceptions.AttributeInferenceError): - raise exceptions.InferenceError(node=inferred) - if not isinstance(enter, bases.BoundMethod): - raise exceptions.InferenceError(node=enter) - yield from enter.infer_call_result(self, context) - else: - raise exceptions.InferenceError(node=mgr) - - -@decorators.raise_if_nothing_inferred -def with_assigned_stmts(self, node=None, context=None, assign_path=None): - """Infer names and other nodes from a *with* statement. - - This enables only inference for name binding in a *with* statement. - For instance, in the following code, inferring `func` will return - the `ContextManager` class, not whatever ``__enter__`` returns. - We are doing this intentionally, because we consider that the context - manager result is whatever __enter__ returns and what it is binded - using the ``as`` keyword. - - class ContextManager(object): - def __enter__(self): - return 42 - with ContextManager() as f: - pass - - # ContextManager().infer() will return ContextManager - # f.infer() will return 42. - - Arguments: - self: nodes.With - node: The target of the assignment, `as (a, b)` in `with foo as (a, b)`. - context: Inference context used for caching already inferred objects - assign_path: - A list of indices, where each index specifies what item to fetch from - the inference results. - """ - try: - mgr = next(mgr for (mgr, vars) in self.items if vars == node) - except StopIteration: - return None - if assign_path is None: - yield from _infer_context_manager(self, mgr, context) - else: - for result in _infer_context_manager(self, mgr, context): - # Walk the assign_path and get the item at the final index. - obj = result - for index in assign_path: - if not hasattr(obj, "elts"): - raise exceptions.InferenceError( - "Wrong type ({targets!r}) for {node!r} assignment", - node=self, - targets=node, - assign_path=assign_path, - context=context, - ) - try: - obj = obj.elts[index] - except IndexError as exc: - raise exceptions.InferenceError( - "Tried to infer a nonexistent target with index {index} " - "in {node!r}.", - node=self, - targets=node, - assign_path=assign_path, - context=context, - ) from exc - except TypeError as exc: - raise exceptions.InferenceError( - "Tried to unpack a non-iterable value " "in {node!r}.", - node=self, - targets=node, - assign_path=assign_path, - context=context, - ) from exc - yield obj - return dict(node=self, unknown=node, assign_path=assign_path, context=context) - - -nodes.With.assigned_stmts = with_assigned_stmts - - -@decorators.raise_if_nothing_inferred -def named_expr_assigned_stmts(self, node, context=None, assign_path=None): - """Infer names and other nodes from an assignment expression""" - if self.target == node: - yield from self.value.infer(context=context) - else: - raise exceptions.InferenceError( - "Cannot infer NamedExpr node {node!r}", - node=self, - assign_path=assign_path, - context=context, - ) - - -nodes.NamedExpr.assigned_stmts = named_expr_assigned_stmts - - -@decorators.yes_if_nothing_inferred -def starred_assigned_stmts(self, node=None, context=None, assign_path=None): - """ - Arguments: - self: nodes.Starred - node: a node related to the current underlying Node. - context: Inference context used for caching already inferred objects - assign_path: - A list of indices, where each index specifies what item to fetch from - the inference results. - """ - # pylint: disable=too-many-locals,too-many-branches,too-many-statements - def _determine_starred_iteration_lookups(starred, target, lookups): - # Determine the lookups for the rhs of the iteration - itered = target.itered() - for index, element in enumerate(itered): - if ( - isinstance(element, nodes.Starred) - and element.value.name == starred.value.name - ): - lookups.append((index, len(itered))) - break - if isinstance(element, nodes.Tuple): - lookups.append((index, len(element.itered()))) - _determine_starred_iteration_lookups(starred, element, lookups) - - stmt = self.statement() - if not isinstance(stmt, (nodes.Assign, nodes.For)): - raise exceptions.InferenceError( - "Statement {stmt!r} enclosing {node!r} " "must be an Assign or For node.", - node=self, - stmt=stmt, - unknown=node, - context=context, - ) - - if context is None: - context = contextmod.InferenceContext() - - if isinstance(stmt, nodes.Assign): - value = stmt.value - lhs = stmt.targets[0] - - if sum(1 for _ in lhs.nodes_of_class(nodes.Starred)) > 1: - raise exceptions.InferenceError( - "Too many starred arguments in the " " assignment targets {lhs!r}.", - node=self, - targets=lhs, - unknown=node, - context=context, - ) - - try: - rhs = next(value.infer(context)) - except exceptions.InferenceError: - yield util.Uninferable - return - if rhs is util.Uninferable or not hasattr(rhs, "itered"): - yield util.Uninferable - return - - try: - elts = collections.deque(rhs.itered()) - except TypeError: - yield util.Uninferable - return - - # Unpack iteratively the values from the rhs of the assignment, - # until the find the starred node. What will remain will - # be the list of values which the Starred node will represent - # This is done in two steps, from left to right to remove - # anything before the starred node and from right to left - # to remove anything after the starred node. - - for index, left_node in enumerate(lhs.elts): - if not isinstance(left_node, nodes.Starred): - if not elts: - break - elts.popleft() - continue - lhs_elts = collections.deque(reversed(lhs.elts[index:])) - for right_node in lhs_elts: - if not isinstance(right_node, nodes.Starred): - if not elts: - break - elts.pop() - continue - - # We're done unpacking. - elts = list(elts) - packed = nodes.List( - ctx=Store, parent=self, lineno=lhs.lineno, col_offset=lhs.col_offset - ) - packed.postinit(elts=elts) - yield packed - break - - if isinstance(stmt, nodes.For): - try: - inferred_iterable = next(stmt.iter.infer(context=context)) - except exceptions.InferenceError: - yield util.Uninferable - return - if inferred_iterable is util.Uninferable or not hasattr( - inferred_iterable, "itered" - ): - yield util.Uninferable - return - try: - itered = inferred_iterable.itered() - except TypeError: - yield util.Uninferable - return - - target = stmt.target - - if not isinstance(target, nodes.Tuple): - raise exceptions.InferenceError( - "Could not make sense of this, the target must be a tuple", - context=context, - ) - - lookups = [] - _determine_starred_iteration_lookups(self, target, lookups) - if not lookups: - raise exceptions.InferenceError( - "Could not make sense of this, needs at least a lookup", context=context - ) - - # Make the last lookup a slice, since that what we want for a Starred node - last_element_index, last_element_length = lookups[-1] - is_starred_last = last_element_index == (last_element_length - 1) - - lookup_slice = slice( - last_element_index, - None if is_starred_last else (last_element_length - last_element_index), - ) - lookups[-1] = lookup_slice - - for element in itered: - - # We probably want to infer the potential values *for each* element in an - # iterable, but we can't infer a list of all values, when only a list of - # step values are expected: - # - # for a, *b in [...]: - # b - # - # *b* should now point to just the elements at that particular iteration step, - # which astroid can't know about. - - found_element = None - for lookup in lookups: - if not hasattr(element, "itered"): - break - if not isinstance(lookup, slice): - # Grab just the index, not the whole length - lookup = lookup[0] - try: - itered_inner_element = element.itered() - element = itered_inner_element[lookup] - except IndexError: - break - except TypeError: - # Most likely the itered() call failed, cannot make sense of this - yield util.Uninferable - return - else: - found_element = element - - unpacked = nodes.List( - ctx=Store, parent=self, lineno=self.lineno, col_offset=self.col_offset - ) - unpacked.postinit(elts=found_element or []) - yield unpacked - return - - yield util.Uninferable - - -nodes.Starred.assigned_stmts = starred_assigned_stmts diff --git a/Jobs_Collections/venv/Lib/python3.8/site-packages/astroid/raw_building.py b/Jobs_Collections/venv/Lib/python3.8/site-packages/astroid/raw_building.py deleted file mode 100644 index b261277..0000000 --- a/Jobs_Collections/venv/Lib/python3.8/site-packages/astroid/raw_building.py +++ /dev/null @@ -1,483 +0,0 @@ -# -*- coding: utf-8 -*- -# Copyright (c) 2006-2014 LOGILAB S.A. (Paris, FRANCE) -# Copyright (c) 2012 FELD Boris -# Copyright (c) 2014-2020 Claudiu Popa -# Copyright (c) 2014 Google, Inc. -# Copyright (c) 2015-2016 Ceridwen -# Copyright (c) 2015 Florian Bruhin -# Copyright (c) 2015 Ovidiu Sabou -# Copyright (c) 2016 Derek Gustafson -# Copyright (c) 2016 Jakub Wilk -# Copyright (c) 2018 Ville Skyttรค -# Copyright (c) 2018 Nick Drozd -# Copyright (c) 2018 Bryce Guinta -# Copyright (c) 2020 Robin Jarry - -# Licensed under the LGPL: https://www.gnu.org/licenses/old-licenses/lgpl-2.1.en.html -# For details: https://github.com/PyCQA/astroid/blob/master/COPYING.LESSER - -"""this module contains a set of functions to create astroid trees from scratch -(build_* functions) or from living object (object_build_* functions) -""" - -import builtins -import inspect -import os -import sys -import types - -from astroid import bases -from astroid import manager -from astroid import node_classes -from astroid import nodes - - -MANAGER = manager.AstroidManager() -# the keys of CONST_CLS eg python builtin types - -_CONSTANTS = tuple(node_classes.CONST_CLS) -_BUILTINS = vars(builtins) -TYPE_NONE = type(None) -TYPE_NOTIMPLEMENTED = type(NotImplemented) -TYPE_ELLIPSIS = type(...) - - -def _io_discrepancy(member): - # _io module names itself `io`: http://bugs.python.org/issue18602 - member_self = getattr(member, "__self__", None) - return ( - member_self - and inspect.ismodule(member_self) - and member_self.__name__ == "_io" - and member.__module__ == "io" - ) - - -def _attach_local_node(parent, node, name): - node.name = name # needed by add_local_node - parent.add_local_node(node) - - -def _add_dunder_class(func, member): - """Add a __class__ member to the given func node, if we can determine it.""" - python_cls = member.__class__ - cls_name = getattr(python_cls, "__name__", None) - if not cls_name: - return - cls_bases = [ancestor.__name__ for ancestor in python_cls.__bases__] - ast_klass = build_class(cls_name, cls_bases, python_cls.__doc__) - func.instance_attrs["__class__"] = [ast_klass] - - -_marker = object() - - -def attach_dummy_node(node, name, runtime_object=_marker): - """create a dummy node and register it in the locals of the given - node with the specified name - """ - enode = nodes.EmptyNode() - enode.object = runtime_object - _attach_local_node(node, enode, name) - - -def _has_underlying_object(self): - return self.object is not None and self.object is not _marker - - -nodes.EmptyNode.has_underlying_object = _has_underlying_object - - -def attach_const_node(node, name, value): - """create a Const node and register it in the locals of the given - node with the specified name - """ - if name not in node.special_attributes: - _attach_local_node(node, nodes.const_factory(value), name) - - -def attach_import_node(node, modname, membername): - """create a ImportFrom node and register it in the locals of the given - node with the specified name - """ - from_node = nodes.ImportFrom(modname, [(membername, None)]) - _attach_local_node(node, from_node, membername) - - -def build_module(name, doc=None): - """create and initialize an astroid Module node""" - node = nodes.Module(name, doc, pure_python=False) - node.package = False - node.parent = None - return node - - -def build_class(name, basenames=(), doc=None): - """create and initialize an astroid ClassDef node""" - node = nodes.ClassDef(name, doc) - for base in basenames: - basenode = nodes.Name() - basenode.name = base - node.bases.append(basenode) - basenode.parent = node - return node - - -def build_function(name, args=None, posonlyargs=None, defaults=None, doc=None): - """create and initialize an astroid FunctionDef node""" - args, defaults, posonlyargs = args or [], defaults or [], posonlyargs or [] - # first argument is now a list of decorators - func = nodes.FunctionDef(name, doc) - func.args = argsnode = nodes.Arguments() - argsnode.args = [] - argsnode.posonlyargs = [] - for arg in args: - argsnode.args.append(nodes.Name()) - argsnode.args[-1].name = arg - argsnode.args[-1].parent = argsnode - for arg in posonlyargs: - argsnode.posonlyargs.append(nodes.Name()) - argsnode.posonlyargs[-1].name = arg - argsnode.posonlyargs[-1].parent = argsnode - argsnode.defaults = [] - for default in defaults: - argsnode.defaults.append(nodes.const_factory(default)) - argsnode.defaults[-1].parent = argsnode - argsnode.kwarg = None - argsnode.vararg = None - argsnode.parent = func - if args: - register_arguments(func) - return func - - -def build_from_import(fromname, names): - """create and initialize an astroid ImportFrom import statement""" - return nodes.ImportFrom(fromname, [(name, None) for name in names]) - - -def register_arguments(func, args=None): - """add given arguments to local - - args is a list that may contains nested lists - (i.e. def func(a, (b, c, d)): ...) - """ - if args is None: - args = func.args.args - if func.args.vararg: - func.set_local(func.args.vararg, func.args) - if func.args.kwarg: - func.set_local(func.args.kwarg, func.args) - for arg in args: - if isinstance(arg, nodes.Name): - func.set_local(arg.name, arg) - else: - register_arguments(func, arg.elts) - - -def object_build_class(node, member, localname): - """create astroid for a living class object""" - basenames = [base.__name__ for base in member.__bases__] - return _base_class_object_build(node, member, basenames, localname=localname) - - -def object_build_function(node, member, localname): - """create astroid for a living function object""" - signature = inspect.signature(member) - args = [] - defaults = [] - posonlyargs = [] - for param_name, param in signature.parameters.items(): - if param.kind == inspect.Parameter.POSITIONAL_ONLY: - posonlyargs.append(param_name) - elif param.kind == inspect.Parameter.POSITIONAL_OR_KEYWORD: - args.append(param_name) - elif param.kind == inspect.Parameter.VAR_POSITIONAL: - args.append(param_name) - elif param.kind == inspect.Parameter.VAR_KEYWORD: - args.append(param_name) - if param.default is not inspect._empty: - defaults.append(param.default) - func = build_function( - getattr(member, "__name__", None) or localname, - args, - posonlyargs, - defaults, - member.__doc__, - ) - node.add_local_node(func, localname) - - -def object_build_datadescriptor(node, member, name): - """create astroid for a living data descriptor object""" - return _base_class_object_build(node, member, [], name) - - -def object_build_methoddescriptor(node, member, localname): - """create astroid for a living method descriptor object""" - # FIXME get arguments ? - func = build_function( - getattr(member, "__name__", None) or localname, doc=member.__doc__ - ) - # set node's arguments to None to notice that we have no information, not - # and empty argument list - func.args.args = None - node.add_local_node(func, localname) - _add_dunder_class(func, member) - - -def _base_class_object_build(node, member, basenames, name=None, localname=None): - """create astroid for a living class object, with a given set of base names - (e.g. ancestors) - """ - klass = build_class( - name or getattr(member, "__name__", None) or localname, - basenames, - member.__doc__, - ) - klass._newstyle = isinstance(member, type) - node.add_local_node(klass, localname) - try: - # limit the instantiation trick since it's too dangerous - # (such as infinite test execution...) - # this at least resolves common case such as Exception.args, - # OSError.errno - if issubclass(member, Exception): - instdict = member().__dict__ - else: - raise TypeError - except TypeError: - pass - else: - for item_name, obj in instdict.items(): - valnode = nodes.EmptyNode() - valnode.object = obj - valnode.parent = klass - valnode.lineno = 1 - klass.instance_attrs[item_name] = [valnode] - return klass - - -def _build_from_function(node, name, member, module): - # verify this is not an imported function - try: - code = member.__code__ - except AttributeError: - # Some implementations don't provide the code object, - # such as Jython. - code = None - filename = getattr(code, "co_filename", None) - if filename is None: - assert isinstance(member, object) - object_build_methoddescriptor(node, member, name) - elif filename != getattr(module, "__file__", None): - attach_dummy_node(node, name, member) - else: - object_build_function(node, member, name) - - -def _safe_has_attribute(obj, member): - try: - return hasattr(obj, member) - except Exception: # pylint: disable=broad-except - return False - - -class InspectBuilder: - """class for building nodes from living object - - this is actually a really minimal representation, including only Module, - FunctionDef and ClassDef nodes and some others as guessed. - """ - - def __init__(self): - self._done = {} - self._module = None - - def inspect_build(self, module, modname=None, path=None): - """build astroid from a living module (i.e. using inspect) - this is used when there is no python source code available (either - because it's a built-in module or because the .py is not available) - """ - self._module = module - if modname is None: - modname = module.__name__ - try: - node = build_module(modname, module.__doc__) - except AttributeError: - # in jython, java modules have no __doc__ (see #109562) - node = build_module(modname) - node.file = node.path = os.path.abspath(path) if path else path - node.name = modname - MANAGER.cache_module(node) - node.package = hasattr(module, "__path__") - self._done = {} - self.object_build(node, module) - return node - - def object_build(self, node, obj): - """recursive method which create a partial ast from real objects - (only function, class, and method are handled) - """ - if obj in self._done: - return self._done[obj] - self._done[obj] = node - for name in dir(obj): - try: - member = getattr(obj, name) - except AttributeError: - # damned ExtensionClass.Base, I know you're there ! - attach_dummy_node(node, name) - continue - if inspect.ismethod(member): - member = member.__func__ - if inspect.isfunction(member): - _build_from_function(node, name, member, self._module) - elif inspect.isbuiltin(member): - if not _io_discrepancy(member) and self.imported_member( - node, member, name - ): - continue - object_build_methoddescriptor(node, member, name) - elif inspect.isclass(member): - if self.imported_member(node, member, name): - continue - if member in self._done: - class_node = self._done[member] - if class_node not in node.locals.get(name, ()): - node.add_local_node(class_node, name) - else: - class_node = object_build_class(node, member, name) - # recursion - self.object_build(class_node, member) - if name == "__class__" and class_node.parent is None: - class_node.parent = self._done[self._module] - elif inspect.ismethoddescriptor(member): - assert isinstance(member, object) - object_build_methoddescriptor(node, member, name) - elif inspect.isdatadescriptor(member): - assert isinstance(member, object) - object_build_datadescriptor(node, member, name) - elif isinstance(member, _CONSTANTS): - attach_const_node(node, name, member) - elif inspect.isroutine(member): - # This should be called for Jython, where some builtin - # methods aren't caught by isbuiltin branch. - _build_from_function(node, name, member, self._module) - elif _safe_has_attribute(member, "__all__"): - module = build_module(name) - _attach_local_node(node, module, name) - # recursion - self.object_build(module, member) - else: - # create an empty node so that the name is actually defined - attach_dummy_node(node, name, member) - return None - - def imported_member(self, node, member, name): - """verify this is not an imported class or handle it""" - # /!\ some classes like ExtensionClass doesn't have a __module__ - # attribute ! Also, this may trigger an exception on badly built module - # (see http://www.logilab.org/ticket/57299 for instance) - try: - modname = getattr(member, "__module__", None) - except TypeError: - modname = None - if modname is None: - if name in ("__new__", "__subclasshook__"): - # Python 2.5.1 (r251:54863, Sep 1 2010, 22:03:14) - # >>> print object.__new__.__module__ - # None - modname = builtins.__name__ - else: - attach_dummy_node(node, name, member) - return True - - real_name = {"gtk": "gtk_gtk", "_io": "io"}.get(modname, modname) - - if real_name != self._module.__name__: - # check if it sounds valid and then add an import node, else use a - # dummy node - try: - getattr(sys.modules[modname], name) - except (KeyError, AttributeError): - attach_dummy_node(node, name, member) - else: - attach_import_node(node, modname, name) - return True - return False - - -### astroid bootstrapping ###################################################### - -_CONST_PROXY = {} - -# TODO : find a nicer way to handle this situation; -def _set_proxied(const): - return _CONST_PROXY[const.value.__class__] - - -def _astroid_bootstrapping(): - """astroid bootstrapping the builtins module""" - # this boot strapping is necessary since we need the Const nodes to - # inspect_build builtins, and then we can proxy Const - builder = InspectBuilder() - astroid_builtin = builder.inspect_build(builtins) - - # pylint: disable=redefined-outer-name - for cls, node_cls in node_classes.CONST_CLS.items(): - if cls is TYPE_NONE: - proxy = build_class("NoneType") - proxy.parent = astroid_builtin - elif cls is TYPE_NOTIMPLEMENTED: - proxy = build_class("NotImplementedType") - proxy.parent = astroid_builtin - elif cls is TYPE_ELLIPSIS: - proxy = build_class("Ellipsis") - proxy.parent = astroid_builtin - else: - proxy = astroid_builtin.getattr(cls.__name__)[0] - if cls in (dict, list, set, tuple): - node_cls._proxied = proxy - else: - _CONST_PROXY[cls] = proxy - - # Set the builtin module as parent for some builtins. - nodes.Const._proxied = property(_set_proxied) - - _GeneratorType = nodes.ClassDef( - types.GeneratorType.__name__, types.GeneratorType.__doc__ - ) - _GeneratorType.parent = astroid_builtin - bases.Generator._proxied = _GeneratorType - builder.object_build(bases.Generator._proxied, types.GeneratorType) - - if hasattr(types, "AsyncGeneratorType"): - # pylint: disable=no-member; AsyncGeneratorType - _AsyncGeneratorType = nodes.ClassDef( - types.AsyncGeneratorType.__name__, types.AsyncGeneratorType.__doc__ - ) - _AsyncGeneratorType.parent = astroid_builtin - bases.AsyncGenerator._proxied = _AsyncGeneratorType - builder.object_build(bases.AsyncGenerator._proxied, types.AsyncGeneratorType) - builtin_types = ( - types.GetSetDescriptorType, - types.GeneratorType, - types.MemberDescriptorType, - TYPE_NONE, - TYPE_NOTIMPLEMENTED, - types.FunctionType, - types.MethodType, - types.BuiltinFunctionType, - types.ModuleType, - types.TracebackType, - ) - for _type in builtin_types: - if _type.__name__ not in astroid_builtin: - cls = nodes.ClassDef(_type.__name__, _type.__doc__) - cls.parent = astroid_builtin - builder.object_build(cls, _type) - astroid_builtin[_type.__name__] = cls - - -_astroid_bootstrapping() diff --git a/Jobs_Collections/venv/Lib/python3.8/site-packages/astroid/rebuilder.py b/Jobs_Collections/venv/Lib/python3.8/site-packages/astroid/rebuilder.py deleted file mode 100644 index 3fc1a83..0000000 --- a/Jobs_Collections/venv/Lib/python3.8/site-packages/astroid/rebuilder.py +++ /dev/null @@ -1,1010 +0,0 @@ -# -*- coding: utf-8 -*- -# Copyright (c) 2009-2014 LOGILAB S.A. (Paris, FRANCE) -# Copyright (c) 2013-2020 Claudiu Popa -# Copyright (c) 2013-2014 Google, Inc. -# Copyright (c) 2014 Alexander Presnyakov -# Copyright (c) 2014 Eevee (Alex Munroe) -# Copyright (c) 2015-2016 Ceridwen -# Copyright (c) 2016-2017 Derek Gustafson -# Copyright (c) 2016 Jared Garst -# Copyright (c) 2017 Hugo -# Copyright (c) 2017 ลukasz Rogalski -# Copyright (c) 2017 rr- -# Copyright (c) 2018-2019 Ville Skyttรค -# Copyright (c) 2018 Tomas Gavenciak -# Copyright (c) 2018 Serhiy Storchaka -# Copyright (c) 2018 Nick Drozd -# Copyright (c) 2018 Bryce Guinta -# Copyright (c) 2019-2020 Ashley Whetter -# Copyright (c) 2019 Hugo van Kemenade -# Copyright (c) 2019 Zbigniew Jฤ™drzejewski-Szmek - -# Licensed under the LGPL: https://www.gnu.org/licenses/old-licenses/lgpl-2.1.en.html -# For details: https://github.com/PyCQA/astroid/blob/master/COPYING.LESSER - -"""this module contains utilities for rebuilding an _ast tree in -order to get a single Astroid representation -""" - -import sys -from typing import Optional - -import astroid -from astroid._ast import parse_function_type_comment, get_parser_module, ParserModule -from astroid import nodes - - -CONST_NAME_TRANSFORMS = {"None": None, "True": True, "False": False} - -REDIRECT = { - "arguments": "Arguments", - "comprehension": "Comprehension", - "ListCompFor": "Comprehension", - "GenExprFor": "Comprehension", - "excepthandler": "ExceptHandler", - "keyword": "Keyword", -} -PY37 = sys.version_info >= (3, 7) -PY38 = sys.version_info >= (3, 8) - - -def _visit_or_none(node, attr, visitor, parent, visit="visit", **kws): - """If the given node has an attribute, visits the attribute, and - otherwise returns None. - - """ - value = getattr(node, attr, None) - if value: - return getattr(visitor, visit)(value, parent, **kws) - - return None - - -class TreeRebuilder: - """Rebuilds the _ast tree to become an Astroid tree""" - - def __init__(self, manager, parser_module: Optional[ParserModule] = None): - self._manager = manager - self._global_names = [] - self._import_from_nodes = [] - self._delayed_assattr = [] - self._visit_meths = {} - - if parser_module is None: - self._parser_module = get_parser_module() - else: - self._parser_module = parser_module - self._module = self._parser_module.module - - def _get_doc(self, node): - try: - if PY37 and hasattr(node, "docstring"): - doc = node.docstring - return node, doc - if node.body and isinstance(node.body[0], self._module.Expr): - - first_value = node.body[0].value - if isinstance(first_value, self._module.Str) or ( - PY38 - and isinstance(first_value, self._module.Constant) - and isinstance(first_value.value, str) - ): - doc = first_value.value if PY38 else first_value.s - node.body = node.body[1:] - return node, doc - except IndexError: - pass # ast built from scratch - return node, None - - def _get_context(self, node): - return self._parser_module.context_classes.get(type(node.ctx), astroid.Load) - - def visit_module(self, node, modname, modpath, package): - """visit a Module node by returning a fresh instance of it""" - node, doc = self._get_doc(node) - newnode = nodes.Module( - name=modname, - doc=doc, - file=modpath, - path=[modpath], - package=package, - parent=None, - ) - newnode.postinit([self.visit(child, newnode) for child in node.body]) - return newnode - - def visit(self, node, parent): - cls = node.__class__ - if cls in self._visit_meths: - visit_method = self._visit_meths[cls] - else: - cls_name = cls.__name__ - visit_name = "visit_" + REDIRECT.get(cls_name, cls_name).lower() - visit_method = getattr(self, visit_name) - self._visit_meths[cls] = visit_method - return visit_method(node, parent) - - def _save_assignment(self, node, name=None): - """save assignement situation since node.parent is not available yet""" - if self._global_names and node.name in self._global_names[-1]: - node.root().set_local(node.name, node) - else: - node.parent.set_local(node.name, node) - - def visit_arg(self, node, parent): - """visit an arg node by returning a fresh AssName instance""" - return self.visit_assignname(node, parent, node.arg) - - def visit_arguments(self, node, parent): - """visit an Arguments node by returning a fresh instance of it""" - vararg, kwarg = node.vararg, node.kwarg - newnode = nodes.Arguments( - vararg.arg if vararg else None, kwarg.arg if kwarg else None, parent - ) - args = [self.visit(child, newnode) for child in node.args] - defaults = [self.visit(child, newnode) for child in node.defaults] - varargannotation = None - kwargannotation = None - posonlyargs = [] - # change added in 82732 (7c5c678e4164), vararg and kwarg - # are instances of `_ast.arg`, not strings - if vararg: - if node.vararg.annotation: - varargannotation = self.visit(node.vararg.annotation, newnode) - vararg = vararg.arg - if kwarg: - if node.kwarg.annotation: - kwargannotation = self.visit(node.kwarg.annotation, newnode) - kwarg = kwarg.arg - kwonlyargs = [self.visit(child, newnode) for child in node.kwonlyargs] - kw_defaults = [ - self.visit(child, newnode) if child else None for child in node.kw_defaults - ] - annotations = [ - self.visit(arg.annotation, newnode) if arg.annotation else None - for arg in node.args - ] - kwonlyargs_annotations = [ - self.visit(arg.annotation, newnode) if arg.annotation else None - for arg in node.kwonlyargs - ] - - posonlyargs_annotations = [] - if PY38: - posonlyargs = [self.visit(child, newnode) for child in node.posonlyargs] - posonlyargs_annotations = [ - self.visit(arg.annotation, newnode) if arg.annotation else None - for arg in node.posonlyargs - ] - type_comment_args = [ - self.check_type_comment(child, parent=newnode) for child in node.args - ] - type_comment_kwonlyargs = [ - self.check_type_comment(child, parent=newnode) for child in node.kwonlyargs - ] - type_comment_posonlyargs = [] - if PY38: - type_comment_posonlyargs = [ - self.check_type_comment(child, parent=newnode) - for child in node.posonlyargs - ] - - newnode.postinit( - args=args, - defaults=defaults, - kwonlyargs=kwonlyargs, - posonlyargs=posonlyargs, - kw_defaults=kw_defaults, - annotations=annotations, - kwonlyargs_annotations=kwonlyargs_annotations, - posonlyargs_annotations=posonlyargs_annotations, - varargannotation=varargannotation, - kwargannotation=kwargannotation, - type_comment_args=type_comment_args, - type_comment_kwonlyargs=type_comment_kwonlyargs, - type_comment_posonlyargs=type_comment_posonlyargs, - ) - # save argument names in locals: - if vararg: - newnode.parent.set_local(vararg, newnode) - if kwarg: - newnode.parent.set_local(kwarg, newnode) - return newnode - - def visit_assert(self, node, parent): - """visit a Assert node by returning a fresh instance of it""" - newnode = nodes.Assert(node.lineno, node.col_offset, parent) - if node.msg: - msg = self.visit(node.msg, newnode) - else: - msg = None - newnode.postinit(self.visit(node.test, newnode), msg) - return newnode - - def check_type_comment(self, node, parent): - type_comment = getattr(node, "type_comment", None) - if not type_comment: - return None - - try: - type_comment_ast = self._parser_module.parse(type_comment) - except SyntaxError: - # Invalid type comment, just skip it. - return None - - type_object = self.visit(type_comment_ast.body[0], parent=parent) - if not isinstance(type_object, nodes.Expr): - return None - - return type_object.value - - def check_function_type_comment(self, node): - type_comment = getattr(node, "type_comment", None) - if not type_comment: - return None - - try: - type_comment_ast = parse_function_type_comment(type_comment) - except SyntaxError: - # Invalid type comment, just skip it. - return None - - returns = None - argtypes = [ - self.visit(elem, node) for elem in (type_comment_ast.argtypes or []) - ] - if type_comment_ast.returns: - returns = self.visit(type_comment_ast.returns, node) - - return returns, argtypes - - # Async structs added in Python 3.5 - def visit_asyncfunctiondef(self, node, parent): - return self._visit_functiondef(nodes.AsyncFunctionDef, node, parent) - - def visit_asyncfor(self, node, parent): - return self._visit_for(nodes.AsyncFor, node, parent) - - def visit_await(self, node, parent): - newnode = nodes.Await(node.lineno, node.col_offset, parent) - newnode.postinit(value=self.visit(node.value, newnode)) - return newnode - - def visit_asyncwith(self, node, parent): - return self._visit_with(nodes.AsyncWith, node, parent) - - def visit_assign(self, node, parent): - """visit a Assign node by returning a fresh instance of it""" - newnode = nodes.Assign(node.lineno, node.col_offset, parent) - type_annotation = self.check_type_comment(node, parent=newnode) - newnode.postinit( - targets=[self.visit(child, newnode) for child in node.targets], - value=self.visit(node.value, newnode), - type_annotation=type_annotation, - ) - return newnode - - def visit_annassign(self, node, parent): - """visit an AnnAssign node by returning a fresh instance of it""" - newnode = nodes.AnnAssign(node.lineno, node.col_offset, parent) - annotation = _visit_or_none(node, "annotation", self, newnode) - newnode.postinit( - target=self.visit(node.target, newnode), - annotation=annotation, - simple=node.simple, - value=_visit_or_none(node, "value", self, newnode), - ) - return newnode - - def visit_assignname(self, node, parent, node_name=None): - """visit a node and return a AssignName node""" - newnode = nodes.AssignName( - node_name, - getattr(node, "lineno", None), - getattr(node, "col_offset", None), - parent, - ) - self._save_assignment(newnode) - return newnode - - def visit_augassign(self, node, parent): - """visit a AugAssign node by returning a fresh instance of it""" - newnode = nodes.AugAssign( - self._parser_module.bin_op_classes[type(node.op)] + "=", - node.lineno, - node.col_offset, - parent, - ) - newnode.postinit( - self.visit(node.target, newnode), self.visit(node.value, newnode) - ) - return newnode - - def visit_repr(self, node, parent): - """visit a Backquote node by returning a fresh instance of it""" - newnode = nodes.Repr(node.lineno, node.col_offset, parent) - newnode.postinit(self.visit(node.value, newnode)) - return newnode - - def visit_binop(self, node, parent): - """visit a BinOp node by returning a fresh instance of it""" - newnode = nodes.BinOp( - self._parser_module.bin_op_classes[type(node.op)], - node.lineno, - node.col_offset, - parent, - ) - newnode.postinit( - self.visit(node.left, newnode), self.visit(node.right, newnode) - ) - return newnode - - def visit_boolop(self, node, parent): - """visit a BoolOp node by returning a fresh instance of it""" - newnode = nodes.BoolOp( - self._parser_module.bool_op_classes[type(node.op)], - node.lineno, - node.col_offset, - parent, - ) - newnode.postinit([self.visit(child, newnode) for child in node.values]) - return newnode - - def visit_break(self, node, parent): - """visit a Break node by returning a fresh instance of it""" - return nodes.Break( - getattr(node, "lineno", None), getattr(node, "col_offset", None), parent - ) - - def visit_call(self, node, parent): - """visit a CallFunc node by returning a fresh instance of it""" - newnode = nodes.Call(node.lineno, node.col_offset, parent) - starargs = _visit_or_none(node, "starargs", self, newnode) - kwargs = _visit_or_none(node, "kwargs", self, newnode) - args = [self.visit(child, newnode) for child in node.args] - - if node.keywords: - keywords = [self.visit(child, newnode) for child in node.keywords] - else: - keywords = None - if starargs: - new_starargs = nodes.Starred( - col_offset=starargs.col_offset, - lineno=starargs.lineno, - parent=starargs.parent, - ) - new_starargs.postinit(value=starargs) - args.append(new_starargs) - if kwargs: - new_kwargs = nodes.Keyword( - arg=None, - col_offset=kwargs.col_offset, - lineno=kwargs.lineno, - parent=kwargs.parent, - ) - new_kwargs.postinit(value=kwargs) - if keywords: - keywords.append(new_kwargs) - else: - keywords = [new_kwargs] - - newnode.postinit(self.visit(node.func, newnode), args, keywords) - return newnode - - def visit_classdef(self, node, parent, newstyle=True): - """visit a ClassDef node to become astroid""" - node, doc = self._get_doc(node) - newnode = nodes.ClassDef(node.name, doc, node.lineno, node.col_offset, parent) - metaclass = None - for keyword in node.keywords: - if keyword.arg == "metaclass": - metaclass = self.visit(keyword, newnode).value - break - if node.decorator_list: - decorators = self.visit_decorators(node, newnode) - else: - decorators = None - newnode.postinit( - [self.visit(child, newnode) for child in node.bases], - [self.visit(child, newnode) for child in node.body], - decorators, - newstyle, - metaclass, - [ - self.visit(kwd, newnode) - for kwd in node.keywords - if kwd.arg != "metaclass" - ], - ) - return newnode - - def visit_const(self, node, parent): - """visit a Const node by returning a fresh instance of it""" - return nodes.Const( - node.value, - getattr(node, "lineno", None), - getattr(node, "col_offset", None), - parent, - ) - - def visit_continue(self, node, parent): - """visit a Continue node by returning a fresh instance of it""" - return nodes.Continue( - getattr(node, "lineno", None), getattr(node, "col_offset", None), parent - ) - - def visit_compare(self, node, parent): - """visit a Compare node by returning a fresh instance of it""" - newnode = nodes.Compare(node.lineno, node.col_offset, parent) - newnode.postinit( - self.visit(node.left, newnode), - [ - ( - self._parser_module.cmp_op_classes[op.__class__], - self.visit(expr, newnode), - ) - for (op, expr) in zip(node.ops, node.comparators) - ], - ) - return newnode - - def visit_comprehension(self, node, parent): - """visit a Comprehension node by returning a fresh instance of it""" - newnode = nodes.Comprehension(parent) - newnode.postinit( - self.visit(node.target, newnode), - self.visit(node.iter, newnode), - [self.visit(child, newnode) for child in node.ifs], - getattr(node, "is_async", None), - ) - return newnode - - def visit_decorators(self, node, parent): - """visit a Decorators node by returning a fresh instance of it""" - # /!\ node is actually an _ast.FunctionDef node while - # parent is an astroid.nodes.FunctionDef node - if PY38: - # Set the line number of the first decorator for Python 3.8+. - lineno = node.decorator_list[0].lineno - else: - lineno = node.lineno - newnode = nodes.Decorators(lineno, node.col_offset, parent) - newnode.postinit([self.visit(child, newnode) for child in node.decorator_list]) - return newnode - - def visit_delete(self, node, parent): - """visit a Delete node by returning a fresh instance of it""" - newnode = nodes.Delete(node.lineno, node.col_offset, parent) - newnode.postinit([self.visit(child, newnode) for child in node.targets]) - return newnode - - def _visit_dict_items(self, node, parent, newnode): - for key, value in zip(node.keys, node.values): - rebuilt_value = self.visit(value, newnode) - if not key: - # Python 3.5 and extended unpacking - rebuilt_key = nodes.DictUnpack( - rebuilt_value.lineno, rebuilt_value.col_offset, parent - ) - else: - rebuilt_key = self.visit(key, newnode) - yield rebuilt_key, rebuilt_value - - def visit_dict(self, node, parent): - """visit a Dict node by returning a fresh instance of it""" - newnode = nodes.Dict(node.lineno, node.col_offset, parent) - items = list(self._visit_dict_items(node, parent, newnode)) - newnode.postinit(items) - return newnode - - def visit_dictcomp(self, node, parent): - """visit a DictComp node by returning a fresh instance of it""" - newnode = nodes.DictComp(node.lineno, node.col_offset, parent) - newnode.postinit( - self.visit(node.key, newnode), - self.visit(node.value, newnode), - [self.visit(child, newnode) for child in node.generators], - ) - return newnode - - def visit_expr(self, node, parent): - """visit a Expr node by returning a fresh instance of it""" - newnode = nodes.Expr(node.lineno, node.col_offset, parent) - newnode.postinit(self.visit(node.value, newnode)) - return newnode - - # Not used in Python 3.8+. - def visit_ellipsis(self, node, parent): - """visit an Ellipsis node by returning a fresh instance of it""" - return nodes.Ellipsis( - getattr(node, "lineno", None), getattr(node, "col_offset", None), parent - ) - - def visit_emptynode(self, node, parent): - """visit an EmptyNode node by returning a fresh instance of it""" - return nodes.EmptyNode( - getattr(node, "lineno", None), getattr(node, "col_offset", None), parent - ) - - def visit_excepthandler(self, node, parent): - """visit an ExceptHandler node by returning a fresh instance of it""" - newnode = nodes.ExceptHandler(node.lineno, node.col_offset, parent) - if node.name: - name = self.visit_assignname(node, newnode, node.name) - else: - name = None - newnode.postinit( - _visit_or_none(node, "type", self, newnode), - name, - [self.visit(child, newnode) for child in node.body], - ) - return newnode - - def visit_exec(self, node, parent): - """visit an Exec node by returning a fresh instance of it""" - newnode = nodes.Exec(node.lineno, node.col_offset, parent) - newnode.postinit( - self.visit(node.body, newnode), - _visit_or_none(node, "globals", self, newnode), - _visit_or_none(node, "locals", self, newnode), - ) - return newnode - - # Not used in Python 3.8+. - def visit_extslice(self, node, parent): - """visit an ExtSlice node by returning a fresh instance of it""" - newnode = nodes.ExtSlice(parent=parent) - newnode.postinit([self.visit(dim, newnode) for dim in node.dims]) - return newnode - - def _visit_for(self, cls, node, parent): - """visit a For node by returning a fresh instance of it""" - newnode = cls(node.lineno, node.col_offset, parent) - type_annotation = self.check_type_comment(node, parent=newnode) - newnode.postinit( - target=self.visit(node.target, newnode), - iter=self.visit(node.iter, newnode), - body=[self.visit(child, newnode) for child in node.body], - orelse=[self.visit(child, newnode) for child in node.orelse], - type_annotation=type_annotation, - ) - return newnode - - def visit_for(self, node, parent): - return self._visit_for(nodes.For, node, parent) - - def visit_importfrom(self, node, parent): - """visit an ImportFrom node by returning a fresh instance of it""" - names = [(alias.name, alias.asname) for alias in node.names] - newnode = nodes.ImportFrom( - node.module or "", - names, - node.level or None, - getattr(node, "lineno", None), - getattr(node, "col_offset", None), - parent, - ) - # store From names to add them to locals after building - self._import_from_nodes.append(newnode) - return newnode - - def _visit_functiondef(self, cls, node, parent): - """visit an FunctionDef node to become astroid""" - self._global_names.append({}) - node, doc = self._get_doc(node) - - lineno = node.lineno - if PY38 and node.decorator_list: - # Python 3.8 sets the line number of a decorated function - # to be the actual line number of the function, but the - # previous versions expected the decorator's line number instead. - # We reset the function's line number to that of the - # first decorator to maintain backward compatibility. - # It's not ideal but this discrepancy was baked into - # the framework for *years*. - lineno = node.decorator_list[0].lineno - - newnode = cls(node.name, doc, lineno, node.col_offset, parent) - if node.decorator_list: - decorators = self.visit_decorators(node, newnode) - else: - decorators = None - if node.returns: - returns = self.visit(node.returns, newnode) - else: - returns = None - - type_comment_args = type_comment_returns = None - type_comment_annotation = self.check_function_type_comment(node) - if type_comment_annotation: - type_comment_returns, type_comment_args = type_comment_annotation - newnode.postinit( - args=self.visit(node.args, newnode), - body=[self.visit(child, newnode) for child in node.body], - decorators=decorators, - returns=returns, - type_comment_returns=type_comment_returns, - type_comment_args=type_comment_args, - ) - self._global_names.pop() - return newnode - - def visit_functiondef(self, node, parent): - return self._visit_functiondef(nodes.FunctionDef, node, parent) - - def visit_generatorexp(self, node, parent): - """visit a GeneratorExp node by returning a fresh instance of it""" - newnode = nodes.GeneratorExp(node.lineno, node.col_offset, parent) - newnode.postinit( - self.visit(node.elt, newnode), - [self.visit(child, newnode) for child in node.generators], - ) - return newnode - - def visit_attribute(self, node, parent): - """visit an Attribute node by returning a fresh instance of it""" - context = self._get_context(node) - if context == astroid.Del: - # FIXME : maybe we should reintroduce and visit_delattr ? - # for instance, deactivating assign_ctx - newnode = nodes.DelAttr(node.attr, node.lineno, node.col_offset, parent) - elif context == astroid.Store: - newnode = nodes.AssignAttr(node.attr, node.lineno, node.col_offset, parent) - # Prohibit a local save if we are in an ExceptHandler. - if not isinstance(parent, astroid.ExceptHandler): - self._delayed_assattr.append(newnode) - else: - newnode = nodes.Attribute(node.attr, node.lineno, node.col_offset, parent) - newnode.postinit(self.visit(node.value, newnode)) - return newnode - - def visit_global(self, node, parent): - """visit a Global node to become astroid""" - newnode = nodes.Global( - node.names, - getattr(node, "lineno", None), - getattr(node, "col_offset", None), - parent, - ) - if self._global_names: # global at the module level, no effect - for name in node.names: - self._global_names[-1].setdefault(name, []).append(newnode) - return newnode - - def visit_if(self, node, parent): - """visit an If node by returning a fresh instance of it""" - newnode = nodes.If(node.lineno, node.col_offset, parent) - newnode.postinit( - self.visit(node.test, newnode), - [self.visit(child, newnode) for child in node.body], - [self.visit(child, newnode) for child in node.orelse], - ) - return newnode - - def visit_ifexp(self, node, parent): - """visit a IfExp node by returning a fresh instance of it""" - newnode = nodes.IfExp(node.lineno, node.col_offset, parent) - newnode.postinit( - self.visit(node.test, newnode), - self.visit(node.body, newnode), - self.visit(node.orelse, newnode), - ) - return newnode - - def visit_import(self, node, parent): - """visit a Import node by returning a fresh instance of it""" - names = [(alias.name, alias.asname) for alias in node.names] - newnode = nodes.Import( - names, - getattr(node, "lineno", None), - getattr(node, "col_offset", None), - parent, - ) - # save import names in parent's locals: - for (name, asname) in newnode.names: - name = asname or name - parent.set_local(name.split(".")[0], newnode) - return newnode - - def visit_joinedstr(self, node, parent): - newnode = nodes.JoinedStr(node.lineno, node.col_offset, parent) - newnode.postinit([self.visit(child, newnode) for child in node.values]) - return newnode - - def visit_formattedvalue(self, node, parent): - newnode = nodes.FormattedValue(node.lineno, node.col_offset, parent) - newnode.postinit( - self.visit(node.value, newnode), - node.conversion, - _visit_or_none(node, "format_spec", self, newnode), - ) - return newnode - - def visit_namedexpr(self, node, parent): - newnode = nodes.NamedExpr(node.lineno, node.col_offset, parent) - newnode.postinit( - self.visit(node.target, newnode), self.visit(node.value, newnode) - ) - return newnode - - # Not used in Python 3.8+. - def visit_index(self, node, parent): - """visit a Index node by returning a fresh instance of it""" - newnode = nodes.Index(parent=parent) - newnode.postinit(self.visit(node.value, newnode)) - return newnode - - def visit_keyword(self, node, parent): - """visit a Keyword node by returning a fresh instance of it""" - newnode = nodes.Keyword(node.arg, parent=parent) - newnode.postinit(self.visit(node.value, newnode)) - return newnode - - def visit_lambda(self, node, parent): - """visit a Lambda node by returning a fresh instance of it""" - newnode = nodes.Lambda(node.lineno, node.col_offset, parent) - newnode.postinit(self.visit(node.args, newnode), self.visit(node.body, newnode)) - return newnode - - def visit_list(self, node, parent): - """visit a List node by returning a fresh instance of it""" - context = self._get_context(node) - newnode = nodes.List( - ctx=context, lineno=node.lineno, col_offset=node.col_offset, parent=parent - ) - newnode.postinit([self.visit(child, newnode) for child in node.elts]) - return newnode - - def visit_listcomp(self, node, parent): - """visit a ListComp node by returning a fresh instance of it""" - newnode = nodes.ListComp(node.lineno, node.col_offset, parent) - newnode.postinit( - self.visit(node.elt, newnode), - [self.visit(child, newnode) for child in node.generators], - ) - return newnode - - def visit_name(self, node, parent): - """visit a Name node by returning a fresh instance of it""" - context = self._get_context(node) - # True and False can be assigned to something in py2x, so we have to - # check first the context. - if context == astroid.Del: - newnode = nodes.DelName(node.id, node.lineno, node.col_offset, parent) - elif context == astroid.Store: - newnode = nodes.AssignName(node.id, node.lineno, node.col_offset, parent) - elif node.id in CONST_NAME_TRANSFORMS: - newnode = nodes.Const( - CONST_NAME_TRANSFORMS[node.id], - getattr(node, "lineno", None), - getattr(node, "col_offset", None), - parent, - ) - return newnode - else: - newnode = nodes.Name(node.id, node.lineno, node.col_offset, parent) - # XXX REMOVE me : - if context in (astroid.Del, astroid.Store): # 'Aug' ?? - self._save_assignment(newnode) - return newnode - - # Not used in Python 3.8+. - def visit_nameconstant(self, node, parent): - # in Python 3.4 we have NameConstant for True / False / None - return nodes.Const( - node.value, - getattr(node, "lineno", None), - getattr(node, "col_offset", None), - parent, - ) - - def visit_nonlocal(self, node, parent): - """visit a Nonlocal node and return a new instance of it""" - return nodes.Nonlocal( - node.names, - getattr(node, "lineno", None), - getattr(node, "col_offset", None), - parent, - ) - - def visit_constant(self, node, parent): - """visit a Constant node by returning a fresh instance of Const""" - return nodes.Const( - node.value, - getattr(node, "lineno", None), - getattr(node, "col_offset", None), - parent, - ) - - # Not used in Python 3.8+. - def visit_str(self, node, parent): - """visit a String/Bytes node by returning a fresh instance of Const""" - return nodes.Const( - node.s, - getattr(node, "lineno", None), - getattr(node, "col_offset", None), - parent, - ) - - visit_bytes = visit_str - - # Not used in Python 3.8+. - def visit_num(self, node, parent): - """visit a Num node by returning a fresh instance of Const""" - return nodes.Const( - node.n, - getattr(node, "lineno", None), - getattr(node, "col_offset", None), - parent, - ) - - def visit_pass(self, node, parent): - """visit a Pass node by returning a fresh instance of it""" - return nodes.Pass(node.lineno, node.col_offset, parent) - - def visit_print(self, node, parent): - """visit a Print node by returning a fresh instance of it""" - newnode = nodes.Print(node.nl, node.lineno, node.col_offset, parent) - newnode.postinit( - _visit_or_none(node, "dest", self, newnode), - [self.visit(child, newnode) for child in node.values], - ) - return newnode - - def visit_raise(self, node, parent): - """visit a Raise node by returning a fresh instance of it""" - newnode = nodes.Raise(node.lineno, node.col_offset, parent) - # no traceback; anyway it is not used in Pylint - newnode.postinit( - _visit_or_none(node, "exc", self, newnode), - _visit_or_none(node, "cause", self, newnode), - ) - return newnode - - def visit_return(self, node, parent): - """visit a Return node by returning a fresh instance of it""" - newnode = nodes.Return(node.lineno, node.col_offset, parent) - if node.value is not None: - newnode.postinit(self.visit(node.value, newnode)) - return newnode - - def visit_set(self, node, parent): - """visit a Set node by returning a fresh instance of it""" - newnode = nodes.Set(node.lineno, node.col_offset, parent) - newnode.postinit([self.visit(child, newnode) for child in node.elts]) - return newnode - - def visit_setcomp(self, node, parent): - """visit a SetComp node by returning a fresh instance of it""" - newnode = nodes.SetComp(node.lineno, node.col_offset, parent) - newnode.postinit( - self.visit(node.elt, newnode), - [self.visit(child, newnode) for child in node.generators], - ) - return newnode - - def visit_slice(self, node, parent): - """visit a Slice node by returning a fresh instance of it""" - newnode = nodes.Slice(parent=parent) - newnode.postinit( - _visit_or_none(node, "lower", self, newnode), - _visit_or_none(node, "upper", self, newnode), - _visit_or_none(node, "step", self, newnode), - ) - return newnode - - def visit_subscript(self, node, parent): - """visit a Subscript node by returning a fresh instance of it""" - context = self._get_context(node) - newnode = nodes.Subscript( - ctx=context, lineno=node.lineno, col_offset=node.col_offset, parent=parent - ) - newnode.postinit( - self.visit(node.value, newnode), self.visit(node.slice, newnode) - ) - return newnode - - def visit_starred(self, node, parent): - """visit a Starred node and return a new instance of it""" - context = self._get_context(node) - newnode = nodes.Starred( - ctx=context, lineno=node.lineno, col_offset=node.col_offset, parent=parent - ) - newnode.postinit(self.visit(node.value, newnode)) - return newnode - - def visit_tryexcept(self, node, parent): - """visit a TryExcept node by returning a fresh instance of it""" - newnode = nodes.TryExcept(node.lineno, node.col_offset, parent) - newnode.postinit( - [self.visit(child, newnode) for child in node.body], - [self.visit(child, newnode) for child in node.handlers], - [self.visit(child, newnode) for child in node.orelse], - ) - return newnode - - def visit_try(self, node, parent): - # python 3.3 introduce a new Try node replacing - # TryFinally/TryExcept nodes - if node.finalbody: - newnode = nodes.TryFinally(node.lineno, node.col_offset, parent) - if node.handlers: - body = [self.visit_tryexcept(node, newnode)] - else: - body = [self.visit(child, newnode) for child in node.body] - newnode.postinit(body, [self.visit(n, newnode) for n in node.finalbody]) - return newnode - if node.handlers: - return self.visit_tryexcept(node, parent) - return None - - def visit_tryfinally(self, node, parent): - """visit a TryFinally node by returning a fresh instance of it""" - newnode = nodes.TryFinally(node.lineno, node.col_offset, parent) - newnode.postinit( - [self.visit(child, newnode) for child in node.body], - [self.visit(n, newnode) for n in node.finalbody], - ) - return newnode - - def visit_tuple(self, node, parent): - """visit a Tuple node by returning a fresh instance of it""" - context = self._get_context(node) - newnode = nodes.Tuple( - ctx=context, lineno=node.lineno, col_offset=node.col_offset, parent=parent - ) - newnode.postinit([self.visit(child, newnode) for child in node.elts]) - return newnode - - def visit_unaryop(self, node, parent): - """visit a UnaryOp node by returning a fresh instance of it""" - newnode = nodes.UnaryOp( - self._parser_module.unary_op_classes[node.op.__class__], - node.lineno, - node.col_offset, - parent, - ) - newnode.postinit(self.visit(node.operand, newnode)) - return newnode - - def visit_while(self, node, parent): - """visit a While node by returning a fresh instance of it""" - newnode = nodes.While(node.lineno, node.col_offset, parent) - newnode.postinit( - self.visit(node.test, newnode), - [self.visit(child, newnode) for child in node.body], - [self.visit(child, newnode) for child in node.orelse], - ) - return newnode - - def _visit_with(self, cls, node, parent): - newnode = cls(node.lineno, node.col_offset, parent) - - def visit_child(child): - expr = self.visit(child.context_expr, newnode) - var = _visit_or_none(child, "optional_vars", self, newnode) - return expr, var - - type_annotation = self.check_type_comment(node, parent=newnode) - newnode.postinit( - items=[visit_child(child) for child in node.items], - body=[self.visit(child, newnode) for child in node.body], - type_annotation=type_annotation, - ) - return newnode - - def visit_with(self, node, parent): - return self._visit_with(nodes.With, node, parent) - - def visit_yield(self, node, parent): - """visit a Yield node by returning a fresh instance of it""" - newnode = nodes.Yield(node.lineno, node.col_offset, parent) - if node.value is not None: - newnode.postinit(self.visit(node.value, newnode)) - return newnode - - def visit_yieldfrom(self, node, parent): - newnode = nodes.YieldFrom(node.lineno, node.col_offset, parent) - if node.value is not None: - newnode.postinit(self.visit(node.value, newnode)) - return newnode diff --git a/Jobs_Collections/venv/Lib/python3.8/site-packages/astroid/scoped_nodes.py b/Jobs_Collections/venv/Lib/python3.8/site-packages/astroid/scoped_nodes.py deleted file mode 100644 index 8561e74..0000000 --- a/Jobs_Collections/venv/Lib/python3.8/site-packages/astroid/scoped_nodes.py +++ /dev/null @@ -1,2927 +0,0 @@ -# -*- coding: utf-8 -*- -# Copyright (c) 2006-2014 LOGILAB S.A. (Paris, FRANCE) -# Copyright (c) 2010 Daniel Harding -# Copyright (c) 2011, 2013-2015 Google, Inc. -# Copyright (c) 2013-2020 Claudiu Popa -# Copyright (c) 2013 Phil Schaf -# Copyright (c) 2014 Eevee (Alex Munroe) -# Copyright (c) 2015-2016 Florian Bruhin -# Copyright (c) 2015-2016 Ceridwen -# Copyright (c) 2015 Rene Zhang -# Copyright (c) 2015 Philip Lorenz -# Copyright (c) 2016-2017 Derek Gustafson -# Copyright (c) 2017-2018 Bryce Guinta -# Copyright (c) 2017-2018 Ashley Whetter -# Copyright (c) 2017 ลukasz Rogalski -# Copyright (c) 2017 David Euresti -# Copyright (c) 2018-2019 Nick Drozd -# Copyright (c) 2018 Ville Skyttรค -# Copyright (c) 2018 Anthony Sottile -# Copyright (c) 2018 HoverHell -# Copyright (c) 2019 Hugo van Kemenade -# Copyright (c) 2019 Peter de Blanc - -# Licensed under the LGPL: https://www.gnu.org/licenses/old-licenses/lgpl-2.1.en.html -# For details: https://github.com/PyCQA/astroid/blob/master/COPYING.LESSER - - -""" -This module contains the classes for "scoped" node, i.e. which are opening a -new local scope in the language definition : Module, ClassDef, FunctionDef (and -Lambda, GeneratorExp, DictComp and SetComp to some extent). -""" - -import builtins -import sys -import io -import itertools -from typing import Optional, List - -from astroid import bases -from astroid import context as contextmod -from astroid import exceptions -from astroid import decorators as decorators_mod -from astroid.interpreter import objectmodel -from astroid.interpreter import dunder_lookup -from astroid import manager -from astroid import mixins -from astroid import node_classes -from astroid import util - - -BUILTINS = builtins.__name__ -ITER_METHODS = ("__iter__", "__getitem__") -EXCEPTION_BASE_CLASSES = frozenset({"Exception", "BaseException"}) -objects = util.lazy_import("objects") -BUILTIN_DESCRIPTORS = frozenset( - {"classmethod", "staticmethod", "builtins.classmethod", "builtins.staticmethod"} -) - - -def _c3_merge(sequences, cls, context): - """Merges MROs in *sequences* to a single MRO using the C3 algorithm. - - Adapted from http://www.python.org/download/releases/2.3/mro/. - - """ - result = [] - while True: - sequences = [s for s in sequences if s] # purge empty sequences - if not sequences: - return result - for s1 in sequences: # find merge candidates among seq heads - candidate = s1[0] - for s2 in sequences: - if candidate in s2[1:]: - candidate = None - break # reject the current head, it appears later - else: - break - if not candidate: - # Show all the remaining bases, which were considered as - # candidates for the next mro sequence. - raise exceptions.InconsistentMroError( - message="Cannot create a consistent method resolution order " - "for MROs {mros} of class {cls!r}.", - mros=sequences, - cls=cls, - context=context, - ) - - result.append(candidate) - # remove the chosen candidate - for seq in sequences: - if seq[0] == candidate: - del seq[0] - return None - - -def clean_duplicates_mro(sequences, cls, context): - for sequence in sequences: - names = [ - (node.lineno, node.qname()) if node.name else None for node in sequence - ] - last_index = dict(map(reversed, enumerate(names))) - if names and names[0] is not None and last_index[names[0]] != 0: - raise exceptions.DuplicateBasesError( - message="Duplicates found in MROs {mros} for {cls!r}.", - mros=sequences, - cls=cls, - context=context, - ) - yield [ - node - for i, (node, name) in enumerate(zip(sequence, names)) - if name is None or last_index[name] == i - ] - - -def function_to_method(n, klass): - if isinstance(n, FunctionDef): - if n.type == "classmethod": - return bases.BoundMethod(n, klass) - if n.type == "property": - return n - if n.type != "staticmethod": - return bases.UnboundMethod(n) - return n - - -MANAGER = manager.AstroidManager() - - -def builtin_lookup(name): - """lookup a name into the builtin module - return the list of matching statements and the astroid for the builtin - module - """ - builtin_astroid = MANAGER.ast_from_module(builtins) - if name == "__dict__": - return builtin_astroid, () - try: - stmts = builtin_astroid.locals[name] - except KeyError: - stmts = () - return builtin_astroid, stmts - - -# TODO move this Mixin to mixins.py; problem: 'FunctionDef' in _scope_lookup -class LocalsDictNodeNG(node_classes.LookupMixIn, node_classes.NodeNG): - """ this class provides locals handling common to Module, FunctionDef - and ClassDef nodes, including a dict like interface for direct access - to locals information - """ - - # attributes below are set by the builder module or by raw factories - - locals = {} - """A map of the name of a local variable to the node defining the local. - - :type: dict(str, NodeNG) - """ - - def qname(self): - """Get the 'qualified' name of the node. - - For example: module.name, module.class.name ... - - :returns: The qualified name. - :rtype: str - """ - # pylint: disable=no-member; github.com/pycqa/astroid/issues/278 - if self.parent is None: - return self.name - return "%s.%s" % (self.parent.frame().qname(), self.name) - - def frame(self): - """The first parent frame node. - - A frame node is a :class:`Module`, :class:`FunctionDef`, - or :class:`ClassDef`. - - :returns: The first parent frame node. - :rtype: Module or FunctionDef or ClassDef - """ - return self - - def scope(self): - """The first parent node defining a new scope. - - :returns: The first parent scope node. - :rtype: Module or FunctionDef or ClassDef or Lambda or GenExpr - """ - return self - - def _scope_lookup(self, node, name, offset=0): - """XXX method for interfacing the scope lookup""" - try: - stmts = node._filter_stmts(self.locals[name], self, offset) - except KeyError: - stmts = () - if stmts: - return self, stmts - if self.parent: # i.e. not Module - # nested scope: if parent scope is a function, that's fine - # else jump to the module - pscope = self.parent.scope() - if not pscope.is_function: - pscope = pscope.root() - return pscope.scope_lookup(node, name) - return builtin_lookup(name) # Module - - def set_local(self, name, stmt): - """Define that the given name is declared in the given statement node. - - .. seealso:: :meth:`scope` - - :param name: The name that is being defined. - :type name: str - - :param stmt: The statement that defines the given name. - :type stmt: NodeNG - """ - # assert not stmt in self.locals.get(name, ()), (self, stmt) - self.locals.setdefault(name, []).append(stmt) - - __setitem__ = set_local - - def _append_node(self, child): - """append a child, linking it in the tree""" - # pylint: disable=no-member; depending by the class - # which uses the current class as a mixin or base class. - # It's rewritten in 2.0, so it makes no sense for now - # to spend development time on it. - self.body.append(child) - child.parent = self - - def add_local_node(self, child_node, name=None): - """Append a child that should alter the locals of this scope node. - - :param child_node: The child node that will alter locals. - :type child_node: NodeNG - - :param name: The name of the local that will be altered by - the given child node. - :type name: str or None - """ - if name != "__class__": - # add __class__ node as a child will cause infinite recursion later! - self._append_node(child_node) - self.set_local(name or child_node.name, child_node) - - def __getitem__(self, item): - """The first node the defines the given local. - - :param item: The name of the locally defined object. - :type item: str - - :raises KeyError: If the name is not defined. - """ - return self.locals[item][0] - - def __iter__(self): - """Iterate over the names of locals defined in this scoped node. - - :returns: The names of the defined locals. - :rtype: iterable(str) - """ - return iter(self.keys()) - - def keys(self): - """The names of locals defined in this scoped node. - - :returns: The names of the defined locals. - :rtype: list(str) - """ - return list(self.locals.keys()) - - def values(self): - """The nodes that define the locals in this scoped node. - - :returns: The nodes that define locals. - :rtype: list(NodeNG) - """ - return [self[key] for key in self.keys()] - - def items(self): - """Get the names of the locals and the node that defines the local. - - :returns: The names of locals and their associated node. - :rtype: list(tuple(str, NodeNG)) - """ - return list(zip(self.keys(), self.values())) - - def __contains__(self, name): - """Check if a local is defined in this scope. - - :param name: The name of the local to check for. - :type name: str - - :returns: True if this node has a local of the given name, - False otherwise. - :rtype: bool - """ - return name in self.locals - - -class Module(LocalsDictNodeNG): - """Class representing an :class:`ast.Module` node. - - >>> node = astroid.extract_node('import astroid') - >>> node - - >>> node.parent - - """ - - _astroid_fields = ("body",) - - fromlineno = 0 - """The first line that this node appears on in the source code. - - :type: int or None - """ - lineno = 0 - """The line that this node appears on in the source code. - - :type: int or None - """ - - # attributes below are set by the builder module or by raw factories - - file = None - """The path to the file that this ast has been extracted from. - - This will be ``None`` when the representation has been built from a - built-in module. - - :type: str or None - """ - file_bytes = None - """The string/bytes that this ast was built from. - - :type: str or bytes or None - """ - file_encoding = None - """The encoding of the source file. - - This is used to get unicode out of a source file. - Python 2 only. - - :type: str or None - """ - name = None - """The name of the module. - - :type: str or None - """ - pure_python = None - """Whether the ast was built from source. - - :type: bool or None - """ - package = None - """Whether the node represents a package or a module. - - :type: bool or None - """ - globals = None - """A map of the name of a global variable to the node defining the global. - - :type: dict(str, NodeNG) - """ - - # Future imports - future_imports = None - """The imports from ``__future__``. - - :type: set(str) or None - """ - special_attributes = objectmodel.ModuleModel() - """The names of special attributes that this module has. - - :type: objectmodel.ModuleModel - """ - - # names of module attributes available through the global scope - scope_attrs = {"__name__", "__doc__", "__file__", "__path__", "__package__"} - """The names of module attributes available through the global scope. - - :type: str(str) - """ - - _other_fields = ( - "name", - "doc", - "file", - "path", - "package", - "pure_python", - "future_imports", - ) - _other_other_fields = ("locals", "globals") - - def __init__( - self, - name, - doc, - file=None, - path: Optional[List[str]] = None, - package=None, - parent=None, - pure_python=True, - ): - """ - :param name: The name of the module. - :type name: str - - :param doc: The module docstring. - :type doc: str - - :param file: The path to the file that this ast has been extracted from. - :type file: str or None - - :param path: - :type path: Optional[List[str]] - - :param package: Whether the node represents a package or a module. - :type package: bool or None - - :param parent: The parent node in the syntax tree. - :type parent: NodeNG or None - - :param pure_python: Whether the ast was built from source. - :type pure_python: bool or None - """ - self.name = name - self.doc = doc - self.file = file - self.path = path - self.package = package - self.parent = parent - self.pure_python = pure_python - self.locals = self.globals = {} - """A map of the name of a local variable to the node defining the local. - - :type: dict(str, NodeNG) - """ - self.body = [] - """The contents of the module. - - :type: list(NodeNG) or None - """ - self.future_imports = set() - - # pylint: enable=redefined-builtin - - def postinit(self, body=None): - """Do some setup after initialisation. - - :param body: The contents of the module. - :type body: list(NodeNG) or None - """ - self.body = body - - def _get_stream(self): - if self.file_bytes is not None: - return io.BytesIO(self.file_bytes) - if self.file is not None: - stream = open(self.file, "rb") - return stream - return None - - def stream(self): - """Get a stream to the underlying file or bytes. - - :type: file or io.BytesIO or None - """ - return self._get_stream() - - def block_range(self, lineno): - """Get a range from where this node starts to where this node ends. - - :param lineno: Unused. - :type lineno: int - - :returns: The range of line numbers that this node belongs to. - :rtype: tuple(int, int) - """ - return self.fromlineno, self.tolineno - - def scope_lookup(self, node, name, offset=0): - """Lookup where the given variable is assigned. - - :param node: The node to look for assignments up to. - Any assignments after the given node are ignored. - :type node: NodeNG - - :param name: The name of the variable to find assignments for. - :type name: str - - :param offset: The line offset to filter statements up to. - :type offset: int - - :returns: This scope node and the list of assignments associated to the - given name according to the scope where it has been found (locals, - globals or builtin). - :rtype: tuple(str, list(NodeNG)) - """ - if name in self.scope_attrs and name not in self.locals: - try: - return self, self.getattr(name) - except exceptions.AttributeInferenceError: - return self, () - return self._scope_lookup(node, name, offset) - - def pytype(self): - """Get the name of the type that this node represents. - - :returns: The name of the type. - :rtype: str - """ - return "%s.module" % BUILTINS - - def display_type(self): - """A human readable type of this node. - - :returns: The type of this node. - :rtype: str - """ - return "Module" - - def getattr(self, name, context=None, ignore_locals=False): - if not name: - raise exceptions.AttributeInferenceError( - target=self, attribute=name, context=context - ) - - result = [] - name_in_locals = name in self.locals - - if name in self.special_attributes and not ignore_locals and not name_in_locals: - result = [self.special_attributes.lookup(name)] - elif not ignore_locals and name_in_locals: - result = self.locals[name] - elif self.package: - try: - result = [self.import_module(name, relative_only=True)] - except (exceptions.AstroidBuildingError, SyntaxError) as exc: - raise exceptions.AttributeInferenceError( - target=self, attribute=name, context=context - ) from exc - result = [n for n in result if not isinstance(n, node_classes.DelName)] - if result: - return result - raise exceptions.AttributeInferenceError( - target=self, attribute=name, context=context - ) - - def igetattr(self, name, context=None): - """Infer the possible values of the given variable. - - :param name: The name of the variable to infer. - :type name: str - - :returns: The inferred possible values. - :rtype: iterable(NodeNG) or None - """ - # set lookup name since this is necessary to infer on import nodes for - # instance - context = contextmod.copy_context(context) - context.lookupname = name - try: - return bases._infer_stmts(self.getattr(name, context), context, frame=self) - except exceptions.AttributeInferenceError as error: - raise exceptions.InferenceError( - error.message, target=self, attribute=name, context=context - ) from error - - def fully_defined(self): - """Check if this module has been build from a .py file. - - If so, the module contains a complete representation, - including the code. - - :returns: True if the module has been built from a .py file. - :rtype: bool - """ - return self.file is not None and self.file.endswith(".py") - - def statement(self): - """The first parent node, including self, marked as statement node. - - :returns: The first parent statement. - :rtype: NodeNG - """ - return self - - def previous_sibling(self): - """The previous sibling statement. - - :returns: The previous sibling statement node. - :rtype: NodeNG or None - """ - - def next_sibling(self): - """The next sibling statement node. - - :returns: The next sibling statement node. - :rtype: NodeNG or None - """ - - _absolute_import_activated = True - - def absolute_import_activated(self): - """Whether :pep:`328` absolute import behaviour has been enabled. - - :returns: True if :pep:`328` has been enabled, False otherwise. - :rtype: bool - """ - return self._absolute_import_activated - - def import_module(self, modname, relative_only=False, level=None): - """Get the ast for a given module as if imported from this module. - - :param modname: The name of the module to "import". - :type modname: str - - :param relative_only: Whether to only consider relative imports. - :type relative_only: bool - - :param level: The level of relative import. - :type level: int or None - - :returns: The imported module ast. - :rtype: NodeNG - """ - if relative_only and level is None: - level = 0 - absmodname = self.relative_to_absolute_name(modname, level) - - try: - return MANAGER.ast_from_module_name(absmodname) - except exceptions.AstroidBuildingError: - # we only want to import a sub module or package of this module, - # skip here - if relative_only: - raise - return MANAGER.ast_from_module_name(modname) - - def relative_to_absolute_name(self, modname, level): - """Get the absolute module name for a relative import. - - The relative import can be implicit or explicit. - - :param modname: The module name to convert. - :type modname: str - - :param level: The level of relative import. - :type level: int - - :returns: The absolute module name. - :rtype: str - - :raises TooManyLevelsError: When the relative import refers to a - module too far above this one. - """ - # XXX this returns non sens when called on an absolute import - # like 'pylint.checkers.astroid.utils' - # XXX doesn't return absolute name if self.name isn't absolute name - if self.absolute_import_activated() and level is None: - return modname - if level: - if self.package: - level = level - 1 - if level and self.name.count(".") < level: - raise exceptions.TooManyLevelsError(level=level, name=self.name) - - package_name = self.name.rsplit(".", level)[0] - elif self.package: - package_name = self.name - else: - package_name = self.name.rsplit(".", 1)[0] - - if package_name: - if not modname: - return package_name - return "%s.%s" % (package_name, modname) - return modname - - def wildcard_import_names(self): - """The list of imported names when this module is 'wildcard imported'. - - It doesn't include the '__builtins__' name which is added by the - current CPython implementation of wildcard imports. - - :returns: The list of imported names. - :rtype: list(str) - """ - # We separate the different steps of lookup in try/excepts - # to avoid catching too many Exceptions - default = [name for name in self.keys() if not name.startswith("_")] - try: - all_values = self["__all__"] - except KeyError: - return default - - try: - explicit = next(all_values.assigned_stmts()) - except exceptions.InferenceError: - return default - except AttributeError: - # not an assignment node - # XXX infer? - return default - - # Try our best to detect the exported name. - inferred = [] - try: - explicit = next(explicit.infer()) - except exceptions.InferenceError: - return default - if not isinstance(explicit, (node_classes.Tuple, node_classes.List)): - return default - - str_const = lambda node: ( - isinstance(node, node_classes.Const) and isinstance(node.value, str) - ) - for node in explicit.elts: - if str_const(node): - inferred.append(node.value) - else: - try: - inferred_node = next(node.infer()) - except exceptions.InferenceError: - continue - if str_const(inferred_node): - inferred.append(inferred_node.value) - return inferred - - def public_names(self): - """The list of the names that are publicly available in this module. - - :returns: The list of publc names. - :rtype: list(str) - """ - return [name for name in self.keys() if not name.startswith("_")] - - def bool_value(self, context=None): - """Determine the boolean value of this node. - - :returns: The boolean value of this node. - For a :class:`Module` this is always ``True``. - :rtype: bool - """ - return True - - def get_children(self): - yield from self.body - - -class ComprehensionScope(LocalsDictNodeNG): - """Scoping for different types of comprehensions.""" - - def frame(self): - """The first parent frame node. - - A frame node is a :class:`Module`, :class:`FunctionDef`, - or :class:`ClassDef`. - - :returns: The first parent frame node. - :rtype: Module or FunctionDef or ClassDef - """ - return self.parent.frame() - - scope_lookup = LocalsDictNodeNG._scope_lookup - - -class GeneratorExp(ComprehensionScope): - """Class representing an :class:`ast.GeneratorExp` node. - - >>> node = astroid.extract_node('(thing for thing in things if thing)') - >>> node - - """ - - _astroid_fields = ("elt", "generators") - _other_other_fields = ("locals",) - elt = None - """The element that forms the output of the expression. - - :type: NodeNG or None - """ - generators = None - """The generators that are looped through. - - :type: list(Comprehension) or None - """ - - def __init__(self, lineno=None, col_offset=None, parent=None): - """ - :param lineno: The line that this node appears on in the source code. - :type lineno: int or None - - :param col_offset: The column that this node appears on in the - source code. - :type col_offset: int or None - - :param parent: The parent node in the syntax tree. - :type parent: NodeNG or None - """ - self.locals = {} - """A map of the name of a local variable to the node defining the local. - - :type: dict(str, NodeNG) - """ - - super().__init__(lineno, col_offset, parent) - - def postinit(self, elt=None, generators=None): - """Do some setup after initialisation. - - :param elt: The element that forms the output of the expression. - :type elt: NodeNG or None - - :param generators: The generators that are looped through. - :type generators: list(Comprehension) or None - """ - self.elt = elt - if generators is None: - self.generators = [] - else: - self.generators = generators - - def bool_value(self, context=None): - """Determine the boolean value of this node. - - :returns: The boolean value of this node. - For a :class:`GeneratorExp` this is always ``True``. - :rtype: bool - """ - return True - - def get_children(self): - yield self.elt - - yield from self.generators - - -class DictComp(ComprehensionScope): - """Class representing an :class:`ast.DictComp` node. - - >>> node = astroid.extract_node('{k:v for k, v in things if k > v}') - >>> node - - """ - - _astroid_fields = ("key", "value", "generators") - _other_other_fields = ("locals",) - key = None - """What produces the keys. - - :type: NodeNG or None - """ - value = None - """What produces the values. - - :type: NodeNG or None - """ - generators = None - """The generators that are looped through. - - :type: list(Comprehension) or None - """ - - def __init__(self, lineno=None, col_offset=None, parent=None): - """ - :param lineno: The line that this node appears on in the source code. - :type lineno: int or None - - :param col_offset: The column that this node appears on in the - source code. - :type col_offset: int or None - - :param parent: The parent node in the syntax tree. - :type parent: NodeNG or None - """ - self.locals = {} - """A map of the name of a local variable to the node defining the local. - - :type: dict(str, NodeNG) - """ - - super().__init__(lineno, col_offset, parent) - - def postinit(self, key=None, value=None, generators=None): - """Do some setup after initialisation. - - :param key: What produces the keys. - :type key: NodeNG or None - - :param value: What produces the values. - :type value: NodeNG or None - - :param generators: The generators that are looped through. - :type generators: list(Comprehension) or None - """ - self.key = key - self.value = value - if generators is None: - self.generators = [] - else: - self.generators = generators - - def bool_value(self, context=None): - """Determine the boolean value of this node. - - :returns: The boolean value of this node. - For a :class:`DictComp` this is always :class:`Uninferable`. - :rtype: Uninferable - """ - return util.Uninferable - - def get_children(self): - yield self.key - yield self.value - - yield from self.generators - - -class SetComp(ComprehensionScope): - """Class representing an :class:`ast.SetComp` node. - - >>> node = astroid.extract_node('{thing for thing in things if thing}') - >>> node - - """ - - _astroid_fields = ("elt", "generators") - _other_other_fields = ("locals",) - elt = None - """The element that forms the output of the expression. - - :type: NodeNG or None - """ - generators = None - """The generators that are looped through. - - :type: list(Comprehension) or None - """ - - def __init__(self, lineno=None, col_offset=None, parent=None): - """ - :param lineno: The line that this node appears on in the source code. - :type lineno: int or None - - :param col_offset: The column that this node appears on in the - source code. - :type col_offset: int or None - - :param parent: The parent node in the syntax tree. - :type parent: NodeNG or None - """ - self.locals = {} - """A map of the name of a local variable to the node defining the local. - - :type: dict(str, NodeNG) - """ - - super().__init__(lineno, col_offset, parent) - - def postinit(self, elt=None, generators=None): - """Do some setup after initialisation. - - :param elt: The element that forms the output of the expression. - :type elt: NodeNG or None - - :param generators: The generators that are looped through. - :type generators: list(Comprehension) or None - """ - self.elt = elt - if generators is None: - self.generators = [] - else: - self.generators = generators - - def bool_value(self, context=None): - """Determine the boolean value of this node. - - :returns: The boolean value of this node. - For a :class:`SetComp` this is always :class:`Uninferable`. - :rtype: Uninferable - """ - return util.Uninferable - - def get_children(self): - yield self.elt - - yield from self.generators - - -class _ListComp(node_classes.NodeNG): - """Class representing an :class:`ast.ListComp` node. - - >>> node = astroid.extract_node('[thing for thing in things if thing]') - >>> node - - """ - - _astroid_fields = ("elt", "generators") - elt = None - """The element that forms the output of the expression. - - :type: NodeNG or None - """ - generators = None - """The generators that are looped through. - - :type: list(Comprehension) or None - """ - - def postinit(self, elt=None, generators=None): - """Do some setup after initialisation. - - :param elt: The element that forms the output of the expression. - :type elt: NodeNG or None - - :param generators: The generators that are looped through. - :type generators: list(Comprehension) or None - """ - self.elt = elt - self.generators = generators - - def bool_value(self, context=None): - """Determine the boolean value of this node. - - :returns: The boolean value of this node. - For a :class:`ListComp` this is always :class:`Uninferable`. - :rtype: Uninferable - """ - return util.Uninferable - - def get_children(self): - yield self.elt - - yield from self.generators - - -class ListComp(_ListComp, ComprehensionScope): - """Class representing an :class:`ast.ListComp` node. - - >>> node = astroid.extract_node('[thing for thing in things if thing]') - >>> node - - """ - - _other_other_fields = ("locals",) - - def __init__(self, lineno=None, col_offset=None, parent=None): - self.locals = {} - """A map of the name of a local variable to the node defining it. - - :type: dict(str, NodeNG) - """ - - super().__init__(lineno, col_offset, parent) - - -def _infer_decorator_callchain(node): - """Detect decorator call chaining and see if the end result is a - static or a classmethod. - """ - if not isinstance(node, FunctionDef): - return None - if not node.parent: - return None - try: - result = next(node.infer_call_result(node.parent)) - except exceptions.InferenceError: - return None - if isinstance(result, bases.Instance): - result = result._proxied - if isinstance(result, ClassDef): - if result.is_subtype_of("%s.classmethod" % BUILTINS): - return "classmethod" - if result.is_subtype_of("%s.staticmethod" % BUILTINS): - return "staticmethod" - if isinstance(result, FunctionDef): - if not result.decorators: - return None - # Determine if this function is decorated with one of the builtin descriptors we want. - for decorator in result.decorators.nodes: - if isinstance(decorator, node_classes.Name): - if decorator.name in BUILTIN_DESCRIPTORS: - return decorator.name - if ( - isinstance(decorator, node_classes.Attribute) - and isinstance(decorator.expr, node_classes.Name) - and decorator.expr.name == BUILTINS - and decorator.attrname in BUILTIN_DESCRIPTORS - ): - return decorator.attrname - return None - - -class Lambda(mixins.FilterStmtsMixin, LocalsDictNodeNG): - """Class representing an :class:`ast.Lambda` node. - - >>> node = astroid.extract_node('lambda arg: arg + 1') - >>> node - l.1 at 0x7f23b2e41518> - """ - - _astroid_fields = ("args", "body") - _other_other_fields = ("locals",) - name = "" - is_lambda = True - - def implicit_parameters(self): - return 0 - - # function's type, 'function' | 'method' | 'staticmethod' | 'classmethod' - @property - def type(self): - """Whether this is a method or function. - - :returns: 'method' if this is a method, 'function' otherwise. - :rtype: str - """ - # pylint: disable=no-member - if self.args.arguments and self.args.arguments[0].name == "self": - if isinstance(self.parent.scope(), ClassDef): - return "method" - return "function" - - def __init__(self, lineno=None, col_offset=None, parent=None): - """ - :param lineno: The line that this node appears on in the source code. - :type lineno: int or None - - :param col_offset: The column that this node appears on in the - source code. - :type col_offset: int or None - - :param parent: The parent node in the syntax tree. - :type parent: NodeNG or None - """ - self.locals = {} - """A map of the name of a local variable to the node defining it. - - :type: dict(str, NodeNG) - """ - - self.args = [] - """The arguments that the function takes. - - :type: Arguments or list - """ - - self.body = [] - """The contents of the function body. - - :type: list(NodeNG) - """ - - super().__init__(lineno, col_offset, parent) - - def postinit(self, args, body): - """Do some setup after initialisation. - - :param args: The arguments that the function takes. - :type args: Arguments - - :param body: The contents of the function body. - :type body: list(NodeNG) - """ - self.args = args - self.body = body - - def pytype(self): - """Get the name of the type that this node represents. - - :returns: The name of the type. - :rtype: str - """ - if "method" in self.type: - return "%s.instancemethod" % BUILTINS - return "%s.function" % BUILTINS - - def display_type(self): - """A human readable type of this node. - - :returns: The type of this node. - :rtype: str - """ - if "method" in self.type: - return "Method" - return "Function" - - def callable(self): - """Whether this node defines something that is callable. - - :returns: True if this defines something that is callable, - False otherwise. - For a :class:`Lambda` this is always ``True``. - :rtype: bool - """ - return True - - def argnames(self): - """Get the names of each of the arguments. - - :returns: The names of the arguments. - :rtype: list(str) - """ - # pylint: disable=no-member; github.com/pycqa/astroid/issues/291 - # args is in fact redefined later on by postinit. Can't be changed - # to None due to a strong interaction between Lambda and FunctionDef. - - if self.args.arguments: # maybe None with builtin functions - names = _rec_get_names(self.args.arguments) - else: - names = [] - if self.args.vararg: - names.append(self.args.vararg) - if self.args.kwarg: - names.append(self.args.kwarg) - return names - - def infer_call_result(self, caller, context=None): - """Infer what the function returns when called. - - :param caller: Unused - :type caller: object - """ - # pylint: disable=no-member; github.com/pycqa/astroid/issues/291 - # args is in fact redefined later on by postinit. Can't be changed - # to None due to a strong interaction between Lambda and FunctionDef. - return self.body.infer(context) - - def scope_lookup(self, node, name, offset=0): - """Lookup where the given names is assigned. - - :param node: The node to look for assignments up to. - Any assignments after the given node are ignored. - :type node: NodeNG - - :param name: The name to find assignments for. - :type name: str - - :param offset: The line offset to filter statements up to. - :type offset: int - - :returns: This scope node and the list of assignments associated to the - given name according to the scope where it has been found (locals, - globals or builtin). - :rtype: tuple(str, list(NodeNG)) - """ - # pylint: disable=no-member; github.com/pycqa/astroid/issues/291 - # args is in fact redefined later on by postinit. Can't be changed - # to None due to a strong interaction between Lambda and FunctionDef. - - if node in self.args.defaults or node in self.args.kw_defaults: - frame = self.parent.frame() - # line offset to avoid that def func(f=func) resolve the default - # value to the defined function - offset = -1 - else: - # check this is not used in function decorators - frame = self - return frame._scope_lookup(node, name, offset) - - def bool_value(self, context=None): - """Determine the boolean value of this node. - - :returns: The boolean value of this node. - For a :class:`Lambda` this is always ``True``. - :rtype: bool - """ - return True - - def get_children(self): - yield self.args - yield self.body - - -class FunctionDef(mixins.MultiLineBlockMixin, node_classes.Statement, Lambda): - """Class representing an :class:`ast.FunctionDef`. - - >>> node = astroid.extract_node(''' - ... def my_func(arg): - ... return arg + 1 - ... ''') - >>> node - - """ - - _astroid_fields = ("decorators", "args", "returns", "body") - _multi_line_block_fields = ("body",) - returns = None - decorators = None - """The decorators that are applied to this method or function. - - :type: Decorators or None - """ - special_attributes = objectmodel.FunctionModel() - """The names of special attributes that this function has. - - :type: objectmodel.FunctionModel - """ - is_function = True - """Whether this node indicates a function. - - For a :class:`FunctionDef` this is always ``True``. - - :type: bool - """ - type_annotation = None - """If present, this will contain the type annotation passed by a type comment - - :type: NodeNG or None - """ - type_comment_args = None - """ - If present, this will contain the type annotation for arguments - passed by a type comment - """ - type_comment_returns = None - """If present, this will contain the return type annotation, passed by a type comment""" - # attributes below are set by the builder module or by raw factories - _other_fields = ("name", "doc") - _other_other_fields = ( - "locals", - "_type", - "type_comment_returns", - "type_comment_args", - ) - _type = None - - def __init__(self, name=None, doc=None, lineno=None, col_offset=None, parent=None): - """ - :param name: The name of the function. - :type name: str or None - - :param doc: The function's docstring. - :type doc: str or None - - :param lineno: The line that this node appears on in the source code. - :type lineno: int or None - - :param col_offset: The column that this node appears on in the - source code. - :type col_offset: int or None - - :param parent: The parent node in the syntax tree. - :type parent: NodeNG or None - """ - self.name = name - """The name of the function. - - :type name: str or None - """ - - self.doc = doc - """The function's docstring. - - :type doc: str or None - """ - - self.instance_attrs = {} - super().__init__(lineno, col_offset, parent) - if parent: - frame = parent.frame() - frame.set_local(name, self) - - # pylint: disable=arguments-differ; different than Lambdas - def postinit( - self, - args, - body, - decorators=None, - returns=None, - type_comment_returns=None, - type_comment_args=None, - ): - """Do some setup after initialisation. - - :param args: The arguments that the function takes. - :type args: Arguments or list - - :param body: The contents of the function body. - :type body: list(NodeNG) - - :param decorators: The decorators that are applied to this - method or function. - :type decorators: Decorators or None - :params type_comment_returns: - The return type annotation passed via a type comment. - :params type_comment_args: - The args type annotation passed via a type comment. - """ - self.args = args - self.body = body - self.decorators = decorators - self.returns = returns - self.type_comment_returns = type_comment_returns - self.type_comment_args = type_comment_args - - @decorators_mod.cachedproperty - def extra_decorators(self): - """The extra decorators that this function can have. - - Additional decorators are considered when they are used as - assignments, as in ``method = staticmethod(method)``. - The property will return all the callables that are used for - decoration. - - :type: list(NodeNG) - """ - frame = self.parent.frame() - if not isinstance(frame, ClassDef): - return [] - - decorators = [] - for assign in frame._get_assign_nodes(): - if isinstance(assign.value, node_classes.Call) and isinstance( - assign.value.func, node_classes.Name - ): - for assign_node in assign.targets: - if not isinstance(assign_node, node_classes.AssignName): - # Support only `name = callable(name)` - continue - - if assign_node.name != self.name: - # Interested only in the assignment nodes that - # decorates the current method. - continue - try: - meth = frame[self.name] - except KeyError: - continue - else: - # Must be a function and in the same frame as the - # original method. - if ( - isinstance(meth, FunctionDef) - and assign_node.frame() == frame - ): - decorators.append(assign.value) - return decorators - - @decorators_mod.cachedproperty - def type( - self - ): # pylint: disable=invalid-overridden-method,too-many-return-statements - """The function type for this node. - - Possible values are: method, function, staticmethod, classmethod. - - :type: str - """ - for decorator in self.extra_decorators: - if decorator.func.name in BUILTIN_DESCRIPTORS: - return decorator.func.name - - frame = self.parent.frame() - type_name = "function" - if isinstance(frame, ClassDef): - if self.name == "__new__": - return "classmethod" - if sys.version_info >= (3, 6) and self.name == "__init_subclass__": - return "classmethod" - - type_name = "method" - - if not self.decorators: - return type_name - - for node in self.decorators.nodes: - if isinstance(node, node_classes.Name): - if node.name in BUILTIN_DESCRIPTORS: - return node.name - if ( - isinstance(node, node_classes.Attribute) - and isinstance(node.expr, node_classes.Name) - and node.expr.name == BUILTINS - and node.attrname in BUILTIN_DESCRIPTORS - ): - return node.attrname - - if isinstance(node, node_classes.Call): - # Handle the following case: - # @some_decorator(arg1, arg2) - # def func(...) - # - try: - current = next(node.func.infer()) - except exceptions.InferenceError: - continue - _type = _infer_decorator_callchain(current) - if _type is not None: - return _type - - try: - for inferred in node.infer(): - # Check to see if this returns a static or a class method. - _type = _infer_decorator_callchain(inferred) - if _type is not None: - return _type - - if not isinstance(inferred, ClassDef): - continue - for ancestor in inferred.ancestors(): - if not isinstance(ancestor, ClassDef): - continue - if ancestor.is_subtype_of("%s.classmethod" % BUILTINS): - return "classmethod" - if ancestor.is_subtype_of("%s.staticmethod" % BUILTINS): - return "staticmethod" - except exceptions.InferenceError: - pass - return type_name - - @decorators_mod.cachedproperty - def fromlineno(self): - """The first line that this node appears on in the source code. - - :type: int or None - """ - # lineno is the line number of the first decorator, we want the def - # statement lineno - lineno = self.lineno - if self.decorators is not None: - lineno += sum( - node.tolineno - node.lineno + 1 for node in self.decorators.nodes - ) - - return lineno - - @decorators_mod.cachedproperty - def blockstart_tolineno(self): - """The line on which the beginning of this block ends. - - :type: int - """ - return self.args.tolineno - - def block_range(self, lineno): - """Get a range from the given line number to where this node ends. - - :param lineno: Unused. - :type lineno: int - - :returns: The range of line numbers that this node belongs to, - :rtype: tuple(int, int) - """ - return self.fromlineno, self.tolineno - - def getattr(self, name, context=None): - """this method doesn't look in the instance_attrs dictionary since it's - done by an Instance proxy at inference time. - """ - if not name: - raise exceptions.AttributeInferenceError( - target=self, attribute=name, context=context - ) - - found_attrs = [] - if name in self.instance_attrs: - found_attrs = self.instance_attrs[name] - if name in self.special_attributes: - found_attrs.append(self.special_attributes.lookup(name)) - if found_attrs: - return found_attrs - raise exceptions.AttributeInferenceError(target=self, attribute=name) - - def igetattr(self, name, context=None): - """Inferred getattr, which returns an iterator of inferred statements.""" - try: - return bases._infer_stmts(self.getattr(name, context), context, frame=self) - except exceptions.AttributeInferenceError as error: - raise exceptions.InferenceError( - error.message, target=self, attribute=name, context=context - ) from error - - def is_method(self): - """Check if this function node represents a method. - - :returns: True if this is a method, False otherwise. - :rtype: bool - """ - # check we are defined in a ClassDef, because this is usually expected - # (e.g. pylint...) when is_method() return True - return self.type != "function" and isinstance(self.parent.frame(), ClassDef) - - @decorators_mod.cached - def decoratornames(self, context=None): - """Get the qualified names of each of the decorators on this function. - - :param context: - An inference context that can be passed to inference functions - :returns: The names of the decorators. - :rtype: set(str) - """ - result = set() - decoratornodes = [] - if self.decorators is not None: - decoratornodes += self.decorators.nodes - decoratornodes += self.extra_decorators - for decnode in decoratornodes: - try: - for infnode in decnode.infer(context=context): - result.add(infnode.qname()) - except exceptions.InferenceError: - continue - return result - - def is_bound(self): - """Check if the function is bound to an instance or class. - - :returns: True if the function is bound to an instance or class, - False otherwise. - :rtype: bool - """ - return self.type == "classmethod" - - def is_abstract(self, pass_is_abstract=True): - """Check if the method is abstract. - - A method is considered abstract if any of the following is true: - * The only statement is 'raise NotImplementedError' - * The only statement is 'pass' and pass_is_abstract is True - * The method is annotated with abc.astractproperty/abc.abstractmethod - - :returns: True if the method is abstract, False otherwise. - :rtype: bool - """ - if self.decorators: - for node in self.decorators.nodes: - try: - inferred = next(node.infer()) - except exceptions.InferenceError: - continue - if inferred and inferred.qname() in ( - "abc.abstractproperty", - "abc.abstractmethod", - ): - return True - - for child_node in self.body: - if isinstance(child_node, node_classes.Raise): - if child_node.raises_not_implemented(): - return True - return pass_is_abstract and isinstance(child_node, node_classes.Pass) - # empty function is the same as function with a single "pass" statement - if pass_is_abstract: - return True - - def is_generator(self): - """Check if this is a generator function. - - :returns: True is this is a generator function, False otherwise. - :rtype: bool - """ - return bool(next(self._get_yield_nodes_skip_lambdas(), False)) - - def infer_call_result(self, caller=None, context=None): - """Infer what the function returns when called. - - :returns: What the function returns. - :rtype: iterable(NodeNG or Uninferable) or None - """ - if self.is_generator(): - if isinstance(self, AsyncFunctionDef): - generator_cls = bases.AsyncGenerator - else: - generator_cls = bases.Generator - result = generator_cls(self) - yield result - return - # This is really a gigantic hack to work around metaclass generators - # that return transient class-generating functions. Pylint's AST structure - # cannot handle a base class object that is only used for calling __new__, - # but does not contribute to the inheritance structure itself. We inject - # a fake class into the hierarchy here for several well-known metaclass - # generators, and filter it out later. - if ( - self.name == "with_metaclass" - and len(self.args.args) == 1 - and self.args.vararg is not None - ): - metaclass = next(caller.args[0].infer(context)) - if isinstance(metaclass, ClassDef): - class_bases = [next(arg.infer(context)) for arg in caller.args[1:]] - new_class = ClassDef(name="temporary_class") - new_class.hide = True - new_class.parent = self - new_class.postinit( - bases=[base for base in class_bases if base != util.Uninferable], - body=[], - decorators=[], - metaclass=metaclass, - ) - yield new_class - return - returns = self._get_return_nodes_skip_functions() - - first_return = next(returns, None) - if not first_return: - if self.body and isinstance(self.body[-1], node_classes.Assert): - yield node_classes.Const(None) - return - - raise exceptions.InferenceError( - "The function does not have any return statements" - ) - - for returnnode in itertools.chain((first_return,), returns): - if returnnode.value is None: - yield node_classes.Const(None) - else: - try: - yield from returnnode.value.infer(context) - except exceptions.InferenceError: - yield util.Uninferable - - def bool_value(self, context=None): - """Determine the boolean value of this node. - - :returns: The boolean value of this node. - For a :class:`FunctionDef` this is always ``True``. - :rtype: bool - """ - return True - - def get_children(self): - if self.decorators is not None: - yield self.decorators - - yield self.args - - if self.returns is not None: - yield self.returns - - yield from self.body - - def scope_lookup(self, node, name, offset=0): - """Lookup where the given name is assigned.""" - if name == "__class__": - # __class__ is an implicit closure reference created by the compiler - # if any methods in a class body refer to either __class__ or super. - # In our case, we want to be able to look it up in the current scope - # when `__class__` is being used. - frame = self.parent.frame() - if isinstance(frame, ClassDef): - return self, [frame] - return super().scope_lookup(node, name, offset) - - -class AsyncFunctionDef(FunctionDef): - """Class representing an :class:`ast.FunctionDef` node. - - A :class:`AsyncFunctionDef` is an asynchronous function - created with the `async` keyword. - - >>> node = astroid.extract_node(''' - async def func(things): - async for thing in things: - print(thing) - ''') - >>> node - - >>> node.body[0] - - """ - - -def _rec_get_names(args, names=None): - """return a list of all argument names""" - if names is None: - names = [] - for arg in args: - if isinstance(arg, node_classes.Tuple): - _rec_get_names(arg.elts, names) - else: - names.append(arg.name) - return names - - -def _is_metaclass(klass, seen=None): - """ Return if the given class can be - used as a metaclass. - """ - if klass.name == "type": - return True - if seen is None: - seen = set() - for base in klass.bases: - try: - for baseobj in base.infer(): - baseobj_name = baseobj.qname() - if baseobj_name in seen: - continue - - seen.add(baseobj_name) - if isinstance(baseobj, bases.Instance): - # not abstract - return False - if baseobj is util.Uninferable: - continue - if baseobj is klass: - continue - if not isinstance(baseobj, ClassDef): - continue - if baseobj._type == "metaclass": - return True - if _is_metaclass(baseobj, seen): - return True - except exceptions.InferenceError: - continue - return False - - -def _class_type(klass, ancestors=None): - """return a ClassDef node type to differ metaclass and exception - from 'regular' classes - """ - # XXX we have to store ancestors in case we have an ancestor loop - if klass._type is not None: - return klass._type - if _is_metaclass(klass): - klass._type = "metaclass" - elif klass.name.endswith("Exception"): - klass._type = "exception" - else: - if ancestors is None: - ancestors = set() - klass_name = klass.qname() - if klass_name in ancestors: - # XXX we are in loop ancestors, and have found no type - klass._type = "class" - return "class" - ancestors.add(klass_name) - for base in klass.ancestors(recurs=False): - name = _class_type(base, ancestors) - if name != "class": - if name == "metaclass" and not _is_metaclass(klass): - # don't propagate it if the current class - # can't be a metaclass - continue - klass._type = base.type - break - if klass._type is None: - klass._type = "class" - return klass._type - - -def get_wrapping_class(node): - """Get the class that wraps the given node. - - We consider that a class wraps a node if the class - is a parent for the said node. - - :returns: The class that wraps the given node - :rtype: ClassDef or None - """ - - klass = node.frame() - while klass is not None and not isinstance(klass, ClassDef): - if klass.parent is None: - klass = None - else: - klass = klass.parent.frame() - return klass - - -class ClassDef(mixins.FilterStmtsMixin, LocalsDictNodeNG, node_classes.Statement): - """Class representing an :class:`ast.ClassDef` node. - - >>> node = astroid.extract_node(''' - class Thing: - def my_meth(self, arg): - return arg + self.offset - ''') - >>> node - - """ - - # some of the attributes below are set by the builder module or - # by a raw factories - - # a dictionary of class instances attributes - _astroid_fields = ("decorators", "bases", "body") # name - - decorators = None - """The decorators that are applied to this class. - - :type: Decorators or None - """ - special_attributes = objectmodel.ClassModel() - """The names of special attributes that this class has. - - :type: objectmodel.ClassModel - """ - - _type = None - _metaclass_hack = False - hide = False - type = property( - _class_type, - doc=( - "The class type for this node.\n\n" - "Possible values are: class, metaclass, exception.\n\n" - ":type: str" - ), - ) - _other_fields = ("name", "doc") - _other_other_fields = ("locals", "_newstyle") - _newstyle = None - - def __init__(self, name=None, doc=None, lineno=None, col_offset=None, parent=None): - """ - :param name: The name of the class. - :type name: str or None - - :param doc: The function's docstring. - :type doc: str or None - - :param lineno: The line that this node appears on in the source code. - :type lineno: int or None - - :param col_offset: The column that this node appears on in the - source code. - :type col_offset: int or None - - :param parent: The parent node in the syntax tree. - :type parent: NodeNG or None - """ - self.instance_attrs = {} - self.locals = {} - """A map of the name of a local variable to the node defining it. - - :type: dict(str, NodeNG) - """ - - self.keywords = [] - """The keywords given to the class definition. - - This is usually for :pep:`3115` style metaclass declaration. - - :type: list(Keyword) or None - """ - - self.bases = [] - """What the class inherits from. - - :type: list(NodeNG) - """ - - self.body = [] - """The contents of the class body. - - :type: list(NodeNG) - """ - - self.name = name - """The name of the class. - - :type name: str or None - """ - - self.doc = doc - """The class' docstring. - - :type doc: str or None - """ - - super().__init__(lineno, col_offset, parent) - if parent is not None: - parent.frame().set_local(name, self) - - for local_name, node in self.implicit_locals(): - self.add_local_node(node, local_name) - - def implicit_parameters(self): - return 1 - - def implicit_locals(self): - """Get implicitly defined class definition locals. - - :returns: the the name and Const pair for each local - :rtype: tuple(tuple(str, node_classes.Const), ...) - """ - locals_ = (("__module__", self.special_attributes.attr___module__),) - # __qualname__ is defined in PEP3155 - locals_ += (("__qualname__", self.special_attributes.attr___qualname__),) - return locals_ - - # pylint: disable=redefined-outer-name - def postinit( - self, bases, body, decorators, newstyle=None, metaclass=None, keywords=None - ): - """Do some setup after initialisation. - - :param bases: What the class inherits from. - :type bases: list(NodeNG) - - :param body: The contents of the class body. - :type body: list(NodeNG) - - :param decorators: The decorators that are applied to this class. - :type decorators: Decorators or None - - :param newstyle: Whether this is a new style class or not. - :type newstyle: bool or None - - :param metaclass: The metaclass of this class. - :type metaclass: NodeNG or None - - :param keywords: The keywords given to the class definition. - :type keywords: list(Keyword) or None - """ - self.keywords = keywords - self.bases = bases - self.body = body - self.decorators = decorators - if newstyle is not None: - self._newstyle = newstyle - if metaclass is not None: - self._metaclass = metaclass - - def _newstyle_impl(self, context=None): - if context is None: - context = contextmod.InferenceContext() - if self._newstyle is not None: - return self._newstyle - for base in self.ancestors(recurs=False, context=context): - if base._newstyle_impl(context): - self._newstyle = True - break - klass = self.declared_metaclass() - # could be any callable, we'd need to infer the result of klass(name, - # bases, dict). punt if it's not a class node. - if klass is not None and isinstance(klass, ClassDef): - self._newstyle = klass._newstyle_impl(context) - if self._newstyle is None: - self._newstyle = False - return self._newstyle - - _newstyle = None - newstyle = property( - _newstyle_impl, - doc=("Whether this is a new style class or not\n\n" ":type: bool or None"), - ) - - @decorators_mod.cachedproperty - def blockstart_tolineno(self): - """The line on which the beginning of this block ends. - - :type: int - """ - if self.bases: - return self.bases[-1].tolineno - - return self.fromlineno - - def block_range(self, lineno): - """Get a range from the given line number to where this node ends. - - :param lineno: Unused. - :type lineno: int - - :returns: The range of line numbers that this node belongs to, - :rtype: tuple(int, int) - """ - return self.fromlineno, self.tolineno - - def pytype(self): - """Get the name of the type that this node represents. - - :returns: The name of the type. - :rtype: str - """ - if self.newstyle: - return "%s.type" % BUILTINS - return "%s.classobj" % BUILTINS - - def display_type(self): - """A human readable type of this node. - - :returns: The type of this node. - :rtype: str - """ - return "Class" - - def callable(self): - """Whether this node defines something that is callable. - - :returns: True if this defines something that is callable, - False otherwise. - For a :class:`ClassDef` this is always ``True``. - :rtype: bool - """ - return True - - def is_subtype_of(self, type_name, context=None): - """Whether this class is a subtype of the given type. - - :param type_name: The name of the type of check against. - :type type_name: str - - :returns: True if this class is a subtype of the given type, - False otherwise. - :rtype: bool - """ - if self.qname() == type_name: - return True - for anc in self.ancestors(context=context): - if anc.qname() == type_name: - return True - return False - - def _infer_type_call(self, caller, context): - name_node = next(caller.args[0].infer(context)) - if isinstance(name_node, node_classes.Const) and isinstance( - name_node.value, str - ): - name = name_node.value - else: - return util.Uninferable - - result = ClassDef(name, None) - - # Get the bases of the class. - class_bases = next(caller.args[1].infer(context)) - if isinstance(class_bases, (node_classes.Tuple, node_classes.List)): - bases = [] - for base in class_bases.itered(): - inferred = next(base.infer(context=context)) - if inferred: - bases.append( - node_classes.EvaluatedObject(original=base, value=inferred) - ) - result.bases = bases - else: - # There is currently no AST node that can represent an 'unknown' - # node (Uninferable is not an AST node), therefore we simply return Uninferable here - # although we know at least the name of the class. - return util.Uninferable - - # Get the members of the class - try: - members = next(caller.args[2].infer(context)) - except exceptions.InferenceError: - members = None - - if members and isinstance(members, node_classes.Dict): - for attr, value in members.items: - if isinstance(attr, node_classes.Const) and isinstance(attr.value, str): - result.locals[attr.value] = [value] - - result.parent = caller.parent - return result - - def infer_call_result(self, caller, context=None): - """infer what a class is returning when called""" - if ( - self.is_subtype_of("%s.type" % (BUILTINS,), context) - and len(caller.args) == 3 - ): - result = self._infer_type_call(caller, context) - yield result - return - - dunder_call = None - try: - metaclass = self.metaclass(context=context) - if metaclass is not None: - dunder_call = next(metaclass.igetattr("__call__", context)) - except exceptions.AttributeInferenceError: - pass - - if dunder_call and dunder_call.qname() != "builtins.type.__call__": - # Call type.__call__ if not set metaclass - # (since type is the default metaclass) - context = contextmod.bind_context_to_node(context, self) - yield from dunder_call.infer_call_result(caller, context) - else: - yield self.instantiate_class() - - def scope_lookup(self, node, name, offset=0): - """Lookup where the given name is assigned. - - :param node: The node to look for assignments up to. - Any assignments after the given node are ignored. - :type node: NodeNG - - :param name: The name to find assignments for. - :type name: str - - :param offset: The line offset to filter statements up to. - :type offset: int - - :returns: This scope node and the list of assignments associated to the - given name according to the scope where it has been found (locals, - globals or builtin). - :rtype: tuple(str, list(NodeNG)) - """ - # If the name looks like a builtin name, just try to look - # into the upper scope of this class. We might have a - # decorator that it's poorly named after a builtin object - # inside this class. - lookup_upper_frame = ( - isinstance(node.parent, node_classes.Decorators) - and name in MANAGER.builtins_module - ) - if ( - any(node == base or base.parent_of(node) for base in self.bases) - or lookup_upper_frame - ): - # Handle the case where we have either a name - # in the bases of a class, which exists before - # the actual definition or the case where we have - # a Getattr node, with that name. - # - # name = ... - # class A(name): - # def name(self): ... - # - # import name - # class A(name.Name): - # def name(self): ... - - frame = self.parent.frame() - # line offset to avoid that class A(A) resolve the ancestor to - # the defined class - offset = -1 - else: - frame = self - return frame._scope_lookup(node, name, offset) - - @property - def basenames(self): - """The names of the parent classes - - Names are given in the order they appear in the class definition. - - :type: list(str) - """ - return [bnode.as_string() for bnode in self.bases] - - def ancestors(self, recurs=True, context=None): - """Iterate over the base classes in prefixed depth first order. - - :param recurs: Whether to recurse or return direct ancestors only. - :type recurs: bool - - :returns: The base classes - :rtype: iterable(NodeNG) - """ - # FIXME: should be possible to choose the resolution order - # FIXME: inference make infinite loops possible here - yielded = {self} - if context is None: - context = contextmod.InferenceContext() - if not self.bases and self.qname() != "builtins.object": - yield builtin_lookup("object")[1][0] - return - - for stmt in self.bases: - with context.restore_path(): - try: - for baseobj in stmt.infer(context): - if not isinstance(baseobj, ClassDef): - if isinstance(baseobj, bases.Instance): - baseobj = baseobj._proxied - else: - continue - if not baseobj.hide: - if baseobj in yielded: - continue - yielded.add(baseobj) - yield baseobj - if not recurs: - continue - for grandpa in baseobj.ancestors(recurs=True, context=context): - if grandpa is self: - # This class is the ancestor of itself. - break - if grandpa in yielded: - continue - yielded.add(grandpa) - yield grandpa - except exceptions.InferenceError: - continue - - def local_attr_ancestors(self, name, context=None): - """Iterate over the parents that define the given name. - - :param name: The name to find definitions for. - :type name: str - - :returns: The parents that define the given name. - :rtype: iterable(NodeNG) - """ - # Look up in the mro if we can. This will result in the - # attribute being looked up just as Python does it. - try: - ancestors = self.mro(context)[1:] - except exceptions.MroError: - # Fallback to use ancestors, we can't determine - # a sane MRO. - ancestors = self.ancestors(context=context) - for astroid in ancestors: - if name in astroid: - yield astroid - - def instance_attr_ancestors(self, name, context=None): - """Iterate over the parents that define the given name as an attribute. - - :param name: The name to find definitions for. - :type name: str - - :returns: The parents that define the given name as - an instance attribute. - :rtype: iterable(NodeNG) - """ - for astroid in self.ancestors(context=context): - if name in astroid.instance_attrs: - yield astroid - - def has_base(self, node): - """Whether this class directly inherits from the given node. - - :param node: The node to check for. - :type node: NodeNG - - :returns: True if this class directly inherits from the given node. - :rtype: bool - """ - return node in self.bases - - def local_attr(self, name, context=None): - """Get the list of assign nodes associated to the given name. - - Assignments are looked for in both this class and in parents. - - :returns: The list of assignments to the given name. - :rtype: list(NodeNG) - - :raises AttributeInferenceError: If no attribute with this name - can be found in this class or parent classes. - """ - result = [] - if name in self.locals: - result = self.locals[name] - else: - class_node = next(self.local_attr_ancestors(name, context), None) - if class_node: - result = class_node.locals[name] - result = [n for n in result if not isinstance(n, node_classes.DelAttr)] - if result: - return result - raise exceptions.AttributeInferenceError( - target=self, attribute=name, context=context - ) - - def instance_attr(self, name, context=None): - """Get the list of nodes associated to the given attribute name. - - Assignments are looked for in both this class and in parents. - - :returns: The list of assignments to the given name. - :rtype: list(NodeNG) - - :raises AttributeInferenceError: If no attribute with this name - can be found in this class or parent classes. - """ - # Return a copy, so we don't modify self.instance_attrs, - # which could lead to infinite loop. - values = list(self.instance_attrs.get(name, [])) - # get all values from parents - for class_node in self.instance_attr_ancestors(name, context): - values += class_node.instance_attrs[name] - values = [n for n in values if not isinstance(n, node_classes.DelAttr)] - if values: - return values - raise exceptions.AttributeInferenceError( - target=self, attribute=name, context=context - ) - - def instantiate_class(self): - """Get an :class:`Instance` of the :class:`ClassDef` node. - - :returns: An :class:`Instance` of the :class:`ClassDef` node, - or self if this is not possible. - :rtype: Instance or ClassDef - """ - try: - if any(cls.name in EXCEPTION_BASE_CLASSES for cls in self.mro()): - # Subclasses of exceptions can be exception instances - return objects.ExceptionInstance(self) - except exceptions.MroError: - pass - return bases.Instance(self) - - def getattr(self, name, context=None, class_context=True): - """Get an attribute from this class, using Python's attribute semantic. - - This method doesn't look in the :attr:`instance_attrs` dictionary - since it is done by an :class:`Instance` proxy at inference time. - It may return an :class:`Uninferable` object if - the attribute has not been - found, but a ``__getattr__`` or ``__getattribute__`` method is defined. - If ``class_context`` is given, then it is considered that the - attribute is accessed from a class context, - e.g. ClassDef.attribute, otherwise it might have been accessed - from an instance as well. If ``class_context`` is used in that - case, then a lookup in the implicit metaclass and the explicit - metaclass will be done. - - :param name: The attribute to look for. - :type name: str - - :param class_context: Whether the attribute can be accessed statically. - :type class_context: bool - - :returns: The attribute. - :rtype: list(NodeNG) - - :raises AttributeInferenceError: If the attribute cannot be inferred. - """ - if not name: - raise exceptions.AttributeInferenceError( - target=self, attribute=name, context=context - ) - - values = self.locals.get(name, []) - if name in self.special_attributes and class_context and not values: - result = [self.special_attributes.lookup(name)] - if name == "__bases__": - # Need special treatment, since they are mutable - # and we need to return all the values. - result += values - return result - - # don't modify the list in self.locals! - values = list(values) - for classnode in self.ancestors(recurs=True, context=context): - values += classnode.locals.get(name, []) - - if class_context: - values += self._metaclass_lookup_attribute(name, context) - - if not values: - raise exceptions.AttributeInferenceError( - target=self, attribute=name, context=context - ) - - # Look for AnnAssigns, which are not attributes in the purest sense. - for value in values: - if isinstance(value, node_classes.AssignName): - stmt = value.statement() - if isinstance(stmt, node_classes.AnnAssign) and stmt.value is None: - raise exceptions.AttributeInferenceError( - target=self, attribute=name, context=context - ) - return values - - def _metaclass_lookup_attribute(self, name, context): - """Search the given name in the implicit and the explicit metaclass.""" - attrs = set() - implicit_meta = self.implicit_metaclass() - context = contextmod.copy_context(context) - metaclass = self.metaclass(context=context) - for cls in {implicit_meta, metaclass}: - if cls and cls != self and isinstance(cls, ClassDef): - cls_attributes = self._get_attribute_from_metaclass(cls, name, context) - attrs.update(set(cls_attributes)) - return attrs - - def _get_attribute_from_metaclass(self, cls, name, context): - try: - attrs = cls.getattr(name, context=context, class_context=True) - except exceptions.AttributeInferenceError: - return - - for attr in bases._infer_stmts(attrs, context, frame=cls): - if not isinstance(attr, FunctionDef): - yield attr - continue - - if isinstance(attr, objects.Property): - yield attr - continue - if attr.type == "classmethod": - # If the method is a classmethod, then it will - # be bound to the metaclass, not to the class - # from where the attribute is retrieved. - # get_wrapping_class could return None, so just - # default to the current class. - frame = get_wrapping_class(attr) or self - yield bases.BoundMethod(attr, frame) - elif attr.type == "staticmethod": - yield attr - else: - yield bases.BoundMethod(attr, self) - - def igetattr(self, name, context=None, class_context=True): - """Infer the possible values of the given variable. - - :param name: The name of the variable to infer. - :type name: str - - :returns: The inferred possible values. - :rtype: iterable(NodeNG or Uninferable) - """ - # set lookup name since this is necessary to infer on import nodes for - # instance - context = contextmod.copy_context(context) - context.lookupname = name - - metaclass = self.declared_metaclass(context=context) - try: - attributes = self.getattr(name, context, class_context=class_context) - # If we have more than one attribute, make sure that those starting from - # the second one are from the same scope. This is to account for modifications - # to the attribute happening *after* the attribute's definition (e.g. AugAssigns on lists) - if len(attributes) > 1: - first_attr, attributes = attributes[0], attributes[1:] - first_scope = first_attr.scope() - attributes = [first_attr] + [ - attr - for attr in attributes - if attr.parent and attr.parent.scope() == first_scope - ] - - for inferred in bases._infer_stmts(attributes, context, frame=self): - # yield Uninferable object instead of descriptors when necessary - if not isinstance(inferred, node_classes.Const) and isinstance( - inferred, bases.Instance - ): - try: - inferred._proxied.getattr("__get__", context) - except exceptions.AttributeInferenceError: - yield inferred - else: - yield util.Uninferable - elif isinstance(inferred, objects.Property): - function = inferred.function - if not class_context: - # Through an instance so we can solve the property - yield from function.infer_call_result( - caller=self, context=context - ) - # If we have a metaclass, we're accessing this attribute through - # the class itself, which means we can solve the property - elif metaclass: - # Resolve a property as long as it is not accessed through - # the class itself. - yield from function.infer_call_result( - caller=self, context=context - ) - else: - yield inferred - else: - yield function_to_method(inferred, self) - except exceptions.AttributeInferenceError as error: - if not name.startswith("__") and self.has_dynamic_getattr(context): - # class handle some dynamic attributes, return a Uninferable object - yield util.Uninferable - else: - raise exceptions.InferenceError( - error.message, target=self, attribute=name, context=context - ) - - def has_dynamic_getattr(self, context=None): - """Check if the class has a custom __getattr__ or __getattribute__. - - If any such method is found and it is not from - builtins, nor from an extension module, then the function - will return True. - - :returns: True if the class has a custom - __getattr__ or __getattribute__, False otherwise. - :rtype: bool - """ - - def _valid_getattr(node): - root = node.root() - return root.name != BUILTINS and getattr(root, "pure_python", None) - - try: - return _valid_getattr(self.getattr("__getattr__", context)[0]) - except exceptions.AttributeInferenceError: - # if self.newstyle: XXX cause an infinite recursion error - try: - getattribute = self.getattr("__getattribute__", context)[0] - return _valid_getattr(getattribute) - except exceptions.AttributeInferenceError: - pass - return False - - def getitem(self, index, context=None): - """Return the inference of a subscript. - - This is basically looking up the method in the metaclass and calling it. - - :returns: The inferred value of a subscript to this class. - :rtype: NodeNG - - :raises AstroidTypeError: If this class does not define a - ``__getitem__`` method. - """ - try: - methods = dunder_lookup.lookup(self, "__getitem__") - except exceptions.AttributeInferenceError as exc: - raise exceptions.AstroidTypeError(node=self, context=context) from exc - - method = methods[0] - - # Create a new callcontext for providing index as an argument. - new_context = contextmod.bind_context_to_node(context, self) - new_context.callcontext = contextmod.CallContext(args=[index]) - - try: - return next(method.infer_call_result(self, new_context)) - except exceptions.InferenceError: - return util.Uninferable - - def methods(self): - """Iterate over all of the method defined in this class and its parents. - - :returns: The methods defined on the class. - :rtype: iterable(FunctionDef) - """ - done = {} - for astroid in itertools.chain(iter((self,)), self.ancestors()): - for meth in astroid.mymethods(): - if meth.name in done: - continue - done[meth.name] = None - yield meth - - def mymethods(self): - """Iterate over all of the method defined in this class only. - - :returns: The methods defined on the class. - :rtype: iterable(FunctionDef) - """ - for member in self.values(): - if isinstance(member, FunctionDef): - yield member - - def implicit_metaclass(self): - """Get the implicit metaclass of the current class. - - For newstyle classes, this will return an instance of builtins.type. - For oldstyle classes, it will simply return None, since there's - no implicit metaclass there. - - :returns: The metaclass. - :rtype: builtins.type or None - """ - if self.newstyle: - return builtin_lookup("type")[1][0] - return None - - _metaclass = None - - def declared_metaclass(self, context=None): - """Return the explicit declared metaclass for the current class. - - An explicit declared metaclass is defined - either by passing the ``metaclass`` keyword argument - in the class definition line (Python 3) or (Python 2) by - having a ``__metaclass__`` class attribute, or if there are - no explicit bases but there is a global ``__metaclass__`` variable. - - :returns: The metaclass of this class, - or None if one could not be found. - :rtype: NodeNG or None - """ - for base in self.bases: - try: - for baseobj in base.infer(context=context): - if isinstance(baseobj, ClassDef) and baseobj.hide: - self._metaclass = baseobj._metaclass - self._metaclass_hack = True - break - except exceptions.InferenceError: - pass - - if self._metaclass: - # Expects this from Py3k TreeRebuilder - try: - return next( - node - for node in self._metaclass.infer(context=context) - if node is not util.Uninferable - ) - except (exceptions.InferenceError, StopIteration): - return None - - return None - - def _find_metaclass(self, seen=None, context=None): - if seen is None: - seen = set() - seen.add(self) - - klass = self.declared_metaclass(context=context) - if klass is None: - for parent in self.ancestors(context=context): - if parent not in seen: - klass = parent._find_metaclass(seen) - if klass is not None: - break - return klass - - def metaclass(self, context=None): - """Get the metaclass of this class. - - If this class does not define explicitly a metaclass, - then the first defined metaclass in ancestors will be used - instead. - - :returns: The metaclass of this class. - :rtype: NodeNG or None - """ - return self._find_metaclass(context=context) - - def has_metaclass_hack(self): - return self._metaclass_hack - - def _islots(self): - """ Return an iterator with the inferred slots. """ - if "__slots__" not in self.locals: - return None - for slots in self.igetattr("__slots__"): - # check if __slots__ is a valid type - for meth in ITER_METHODS: - try: - slots.getattr(meth) - break - except exceptions.AttributeInferenceError: - continue - else: - continue - - if isinstance(slots, node_classes.Const): - # a string. Ignore the following checks, - # but yield the node, only if it has a value - if slots.value: - yield slots - continue - if not hasattr(slots, "itered"): - # we can't obtain the values, maybe a .deque? - continue - - if isinstance(slots, node_classes.Dict): - values = [item[0] for item in slots.items] - else: - values = slots.itered() - if values is util.Uninferable: - continue - if not values: - # Stop the iteration, because the class - # has an empty list of slots. - return values - - for elt in values: - try: - for inferred in elt.infer(): - if inferred is util.Uninferable: - continue - if not isinstance( - inferred, node_classes.Const - ) or not isinstance(inferred.value, str): - continue - if not inferred.value: - continue - yield inferred - except exceptions.InferenceError: - continue - - return None - - def _slots(self): - if not self.newstyle: - raise NotImplementedError( - "The concept of slots is undefined for old-style classes." - ) - - slots = self._islots() - try: - first = next(slots) - except StopIteration as exc: - # The class doesn't have a __slots__ definition or empty slots. - if exc.args and exc.args[0] not in ("", None): - return exc.args[0] - return None - return [first] + list(slots) - - # Cached, because inferring them all the time is expensive - @decorators_mod.cached - def slots(self): - """Get all the slots for this node. - - :returns: The names of slots for this class. - If the class doesn't define any slot, through the ``__slots__`` - variable, then this function will return a None. - Also, it will return None in the case the slots were not inferred. - :rtype: list(str) or None - """ - - def grouped_slots(): - # Not interested in object, since it can't have slots. - for cls in self.mro()[:-1]: - try: - cls_slots = cls._slots() - except NotImplementedError: - continue - if cls_slots is not None: - yield from cls_slots - else: - yield None - - if not self.newstyle: - raise NotImplementedError( - "The concept of slots is undefined for old-style classes." - ) - - slots = list(grouped_slots()) - if not all(slot is not None for slot in slots): - return None - - return sorted(set(slots), key=lambda item: item.value) - - def _inferred_bases(self, context=None): - # Similar with .ancestors, but the difference is when one base is inferred, - # only the first object is wanted. That's because - # we aren't interested in superclasses, as in the following - # example: - # - # class SomeSuperClass(object): pass - # class SomeClass(SomeSuperClass): pass - # class Test(SomeClass): pass - # - # Inferring SomeClass from the Test's bases will give - # us both SomeClass and SomeSuperClass, but we are interested - # only in SomeClass. - - if context is None: - context = contextmod.InferenceContext() - if not self.bases and self.qname() != "builtins.object": - yield builtin_lookup("object")[1][0] - return - - for stmt in self.bases: - try: - baseobj = next(stmt.infer(context=context)) - except exceptions.InferenceError: - continue - if isinstance(baseobj, bases.Instance): - baseobj = baseobj._proxied - if not isinstance(baseobj, ClassDef): - continue - if not baseobj.hide: - yield baseobj - else: - yield from baseobj.bases - - def _compute_mro(self, context=None): - inferred_bases = list(self._inferred_bases(context=context)) - bases_mro = [] - for base in inferred_bases: - if base is self: - continue - - try: - mro = base._compute_mro(context=context) - bases_mro.append(mro) - except NotImplementedError: - # Some classes have in their ancestors both newstyle and - # old style classes. For these we can't retrieve the .mro, - # although in Python it's possible, since the class we are - # currently working is in fact new style. - # So, we fallback to ancestors here. - ancestors = list(base.ancestors(context=context)) - bases_mro.append(ancestors) - - unmerged_mro = [[self]] + bases_mro + [inferred_bases] - unmerged_mro = list(clean_duplicates_mro(unmerged_mro, self, context)) - return _c3_merge(unmerged_mro, self, context) - - def mro(self, context=None) -> List["ClassDef"]: - """Get the method resolution order, using C3 linearization. - - :returns: The list of ancestors, sorted by the mro. - :rtype: list(NodeNG) - :raises DuplicateBasesError: Duplicate bases in the same class base - :raises InconsistentMroError: A class' MRO is inconsistent - """ - return self._compute_mro(context=context) - - def bool_value(self, context=None): - """Determine the boolean value of this node. - - :returns: The boolean value of this node. - For a :class:`ClassDef` this is always ``True``. - :rtype: bool - """ - return True - - def get_children(self): - if self.decorators is not None: - yield self.decorators - - yield from self.bases - yield from self.body - - @decorators_mod.cached - def _get_assign_nodes(self): - children_assign_nodes = ( - child_node._get_assign_nodes() for child_node in self.body - ) - return list(itertools.chain.from_iterable(children_assign_nodes)) diff --git a/Jobs_Collections/venv/Lib/python3.8/site-packages/astroid/test_utils.py b/Jobs_Collections/venv/Lib/python3.8/site-packages/astroid/test_utils.py deleted file mode 100644 index e22c7a4..0000000 --- a/Jobs_Collections/venv/Lib/python3.8/site-packages/astroid/test_utils.py +++ /dev/null @@ -1,73 +0,0 @@ -# Copyright (c) 2013-2014 Google, Inc. -# Copyright (c) 2014 LOGILAB S.A. (Paris, FRANCE) -# Copyright (c) 2015-2016, 2018-2019 Claudiu Popa -# Copyright (c) 2015-2016 Ceridwen -# Copyright (c) 2016 Jakub Wilk -# Copyright (c) 2018 Anthony Sottile - -# Licensed under the LGPL: https://www.gnu.org/licenses/old-licenses/lgpl-2.1.en.html -# For details: https://github.com/PyCQA/astroid/blob/master/COPYING.LESSER - -"""Utility functions for test code that uses astroid ASTs as input.""" -import contextlib -import functools -import sys -import warnings - -import pytest - -from astroid import nodes - - -def require_version(minver=None, maxver=None): - """ Compare version of python interpreter to the given one. Skip the test - if older. - """ - - def parse(string, default=None): - string = string or default - try: - return tuple(int(v) for v in string.split(".")) - except ValueError as exc: - raise ValueError( - "{string} is not a correct version : should be X.Y[.Z].".format( - string=string - ) - ) from exc - - def check_require_version(f): - current = sys.version_info[:3] - if parse(minver, "0") < current <= parse(maxver, "4"): - return f - - str_version = ".".join(str(v) for v in sys.version_info) - - @functools.wraps(f) - def new_f(*args, **kwargs): - if minver is not None: - pytest.skip( - "Needs Python > %s. Current version is %s." % (minver, str_version) - ) - elif maxver is not None: - pytest.skip( - "Needs Python <= %s. Current version is %s." % (maxver, str_version) - ) - - return new_f - - return check_require_version - - -def get_name_node(start_from, name, index=0): - return [n for n in start_from.nodes_of_class(nodes.Name) if n.name == name][index] - - -@contextlib.contextmanager -def enable_warning(warning): - warnings.simplefilter("always", warning) - try: - yield - finally: - # Reset it to default value, so it will take - # into account the values from the -W flag. - warnings.simplefilter("default", warning) diff --git a/Jobs_Collections/venv/Lib/python3.8/site-packages/astroid/transforms.py b/Jobs_Collections/venv/Lib/python3.8/site-packages/astroid/transforms.py deleted file mode 100644 index e5506cc..0000000 --- a/Jobs_Collections/venv/Lib/python3.8/site-packages/astroid/transforms.py +++ /dev/null @@ -1,90 +0,0 @@ -# Copyright (c) 2015-2016, 2018 Claudiu Popa -# Copyright (c) 2016 Ceridwen -# Copyright (c) 2018 Nick Drozd - -# Licensed under the LGPL: https://www.gnu.org/licenses/old-licenses/lgpl-2.1.en.html -# For details: https://github.com/PyCQA/astroid/blob/master/COPYING.LESSER - - -import collections -from functools import lru_cache - - -class TransformVisitor: - """A visitor for handling transforms. - - The standard approach of using it is to call - :meth:`~visit` with an *astroid* module and the class - will take care of the rest, walking the tree and running the - transforms for each encountered node. - """ - - TRANSFORM_MAX_CACHE_SIZE = 10000 - - def __init__(self): - self.transforms = collections.defaultdict(list) - - @lru_cache(maxsize=TRANSFORM_MAX_CACHE_SIZE) - def _transform(self, node): - """Call matching transforms for the given node if any and return the - transformed node. - """ - cls = node.__class__ - if cls not in self.transforms: - # no transform registered for this class of node - return node - - transforms = self.transforms[cls] - for transform_func, predicate in transforms: - if predicate is None or predicate(node): - ret = transform_func(node) - # if the transformation function returns something, it's - # expected to be a replacement for the node - if ret is not None: - node = ret - if ret.__class__ != cls: - # Can no longer apply the rest of the transforms. - break - return node - - def _visit(self, node): - if hasattr(node, "_astroid_fields"): - for name in node._astroid_fields: - value = getattr(node, name) - visited = self._visit_generic(value) - if visited != value: - setattr(node, name, visited) - return self._transform(node) - - def _visit_generic(self, node): - if isinstance(node, list): - return [self._visit_generic(child) for child in node] - if isinstance(node, tuple): - return tuple(self._visit_generic(child) for child in node) - if not node or isinstance(node, str): - return node - - return self._visit(node) - - def register_transform(self, node_class, transform, predicate=None): - """Register `transform(node)` function to be applied on the given - astroid's `node_class` if `predicate` is None or returns true - when called with the node as argument. - - The transform function may return a value which is then used to - substitute the original node in the tree. - """ - self.transforms[node_class].append((transform, predicate)) - - def unregister_transform(self, node_class, transform, predicate=None): - """Unregister the given transform.""" - self.transforms[node_class].remove((transform, predicate)) - - def visit(self, module): - """Walk the given astroid *tree* and transform each encountered node - - Only the nodes which have transforms registered will actually - be replaced or changed. - """ - module.body = [self._visit(child) for child in module.body] - return self._transform(module) diff --git a/Jobs_Collections/venv/Lib/python3.8/site-packages/astroid/util.py b/Jobs_Collections/venv/Lib/python3.8/site-packages/astroid/util.py deleted file mode 100644 index 3ab7561..0000000 --- a/Jobs_Collections/venv/Lib/python3.8/site-packages/astroid/util.py +++ /dev/null @@ -1,164 +0,0 @@ -# Copyright (c) 2015-2018 Claudiu Popa -# Copyright (c) 2015-2016 Ceridwen -# Copyright (c) 2018 Bryce Guinta -# Copyright (c) 2018 Nick Drozd - -# Licensed under the LGPL: https://www.gnu.org/licenses/old-licenses/lgpl-2.1.en.html -# For details: https://github.com/PyCQA/astroid/blob/master/COPYING.LESSER - -import warnings -from itertools import islice - -import importlib -import lazy_object_proxy - - -def lazy_descriptor(obj): - class DescriptorProxy(lazy_object_proxy.Proxy): - def __get__(self, instance, owner=None): - return self.__class__.__get__(self, instance) - - return DescriptorProxy(obj) - - -def lazy_import(module_name): - return lazy_object_proxy.Proxy( - lambda: importlib.import_module("." + module_name, "astroid") - ) - - -@object.__new__ -class Uninferable: - """Special inference object, which is returned when inference fails.""" - - def __repr__(self): - return "Uninferable" - - __str__ = __repr__ - - def __getattribute__(self, name): - if name == "next": - raise AttributeError("next method should not be called") - if name.startswith("__") and name.endswith("__"): - return object.__getattribute__(self, name) - if name == "accept": - return object.__getattribute__(self, name) - return self - - def __call__(self, *args, **kwargs): - return self - - def __bool__(self): - return False - - __nonzero__ = __bool__ - - def accept(self, visitor): - func = getattr(visitor, "visit_uninferable") - return func(self) - - -class BadOperationMessage: - """Object which describes a TypeError occurred somewhere in the inference chain - - This is not an exception, but a container object which holds the types and - the error which occurred. - """ - - -class BadUnaryOperationMessage(BadOperationMessage): - """Object which describes operational failures on UnaryOps.""" - - def __init__(self, operand, op, error): - self.operand = operand - self.op = op - self.error = error - - @property - def _object_type_helper(self): - helpers = lazy_import("helpers") - return helpers.object_type - - def _object_type(self, obj): - # pylint: disable=not-callable; can't infer lazy_import - objtype = self._object_type_helper(obj) - if objtype is Uninferable: - return None - - return objtype - - def __str__(self): - if hasattr(self.operand, "name"): - operand_type = self.operand.name - else: - object_type = self._object_type(self.operand) - if hasattr(object_type, "name"): - operand_type = object_type.name - else: - # Just fallback to as_string - operand_type = object_type.as_string() - - msg = "bad operand type for unary {}: {}" - return msg.format(self.op, operand_type) - - -class BadBinaryOperationMessage(BadOperationMessage): - """Object which describes type errors for BinOps.""" - - def __init__(self, left_type, op, right_type): - self.left_type = left_type - self.right_type = right_type - self.op = op - - def __str__(self): - msg = "unsupported operand type(s) for {}: {!r} and {!r}" - return msg.format(self.op, self.left_type.name, self.right_type.name) - - -def _instancecheck(cls, other): - wrapped = cls.__wrapped__ - other_cls = other.__class__ - is_instance_of = wrapped is other_cls or issubclass(other_cls, wrapped) - warnings.warn( - "%r is deprecated and slated for removal in astroid " - "2.0, use %r instead" % (cls.__class__.__name__, wrapped.__name__), - PendingDeprecationWarning, - stacklevel=2, - ) - return is_instance_of - - -def proxy_alias(alias_name, node_type): - """Get a Proxy from the given name to the given node type.""" - proxy = type( - alias_name, - (lazy_object_proxy.Proxy,), - { - "__class__": object.__dict__["__class__"], - "__instancecheck__": _instancecheck, - }, - ) - return proxy(lambda: node_type) - - -def limit_inference(iterator, size): - """Limit inference amount. - - Limit inference amount to help with performance issues with - exponentially exploding possible results. - - :param iterator: Inference generator to limit - :type iterator: Iterator(NodeNG) - - :param size: Maximum mount of nodes yielded plus an - Uninferable at the end if limit reached - :type size: int - - :yields: A possibly modified generator - :rtype param: Iterable - """ - yield from islice(iterator, size) - has_more = next(iterator, False) - if has_more is not False: - yield Uninferable - return diff --git a/Jobs_Collections/venv/Lib/python3.8/site-packages/beautifulsoup4-4.9.1.dist-info/AUTHORS b/Jobs_Collections/venv/Lib/python3.8/site-packages/beautifulsoup4-4.9.1.dist-info/AUTHORS deleted file mode 100644 index 1f14fe0..0000000 --- a/Jobs_Collections/venv/Lib/python3.8/site-packages/beautifulsoup4-4.9.1.dist-info/AUTHORS +++ /dev/null @@ -1,49 +0,0 @@ -Behold, mortal, the origins of Beautiful Soup... -================================================ - -Leonard Richardson is the primary maintainer. - -Aaron DeVore and Isaac Muse have made significant contributions to the -code base. - -Mark Pilgrim provided the encoding detection code that forms the base -of UnicodeDammit. - -Thomas Kluyver and Ezio Melotti finished the work of getting Beautiful -Soup 4 working under Python 3. - -Simon Willison wrote soupselect, which was used to make Beautiful Soup -support CSS selectors. Isaac Muse wrote SoupSieve, which made it -possible to _remove_ the CSS selector code from Beautiful Soup. - -Sam Ruby helped with a lot of edge cases. - -Jonathan Ellis was awarded the prestigious Beau Potage D'Or for his -work in solving the nestable tags conundrum. - -An incomplete list of people have contributed patches to Beautiful -Soup: - - Istvan Albert, Andrew Lin, Anthony Baxter, Oliver Beattie, Andrew -Boyko, Tony Chang, Francisco Canas, "Delong", Zephyr Fang, Fuzzy, -Roman Gaufman, Yoni Gilad, Richie Hindle, Toshihiro Kamiya, Peteris -Krumins, Kent Johnson, Marek Kapolka, Andreas Kostyrka, Roel Kramer, -Ben Last, Robert Leftwich, Stefaan Lippens, "liquider", Staffan -Malmgren, Ksenia Marasanova, JP Moins, Adam Monsen, John Nagle, "Jon", -Ed Oskiewicz, Martijn Peters, Greg Phillips, Giles Radford, Stefano -Revera, Arthur Rudolph, Marko Samastur, James Salter, Jouni Seppไnen, -Alexander Schmolck, Tim Shirley, Geoffrey Sneddon, Ville Skyttไ, -"Vikas", Jens Svalgaard, Andy Theyers, Eric Weiser, Glyn Webster, John -Wiseman, Paul Wright, Danny Yoo - -An incomplete list of people who made suggestions or found bugs or -found ways to break Beautiful Soup: - - Hanno B๖ck, Matteo Bertini, Chris Curvey, Simon Cusack, Bruce Eckel, - Matt Ernst, Michael Foord, Tom Harris, Bill de hOra, Donald Howes, - Matt Patterson, Scott Roberts, Steve Strassmann, Mike Williams, - warchild at redho dot com, Sami Kuisma, Carlos Rocha, Bob Hutchison, - Joren Mc, Michal Migurski, John Kleven, Tim Heaney, Tripp Lilley, Ed - Summers, Dennis Sutch, Chris Smith, Aaron Swartz, Stuart - Turner, Greg Edwards, Kevin J Kalupson, Nikos Kouremenos, Artur de - Sousa Rocha, Yichun Wei, Per Vognsen diff --git a/Jobs_Collections/venv/Lib/python3.8/site-packages/beautifulsoup4-4.9.1.dist-info/COPYING.txt b/Jobs_Collections/venv/Lib/python3.8/site-packages/beautifulsoup4-4.9.1.dist-info/COPYING.txt deleted file mode 100644 index fb6ae69..0000000 --- a/Jobs_Collections/venv/Lib/python3.8/site-packages/beautifulsoup4-4.9.1.dist-info/COPYING.txt +++ /dev/null @@ -1,27 +0,0 @@ -Beautiful Soup is made available under the MIT license: - - Copyright (c) 2004-2017 Leonard Richardson - - 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. - -Beautiful Soup incorporates code from the html5lib library, which is -also made available under the MIT license. Copyright (c) 2006-2013 -James Graham and other contributors diff --git a/Jobs_Collections/venv/Lib/python3.8/site-packages/beautifulsoup4-4.9.1.dist-info/INSTALLER b/Jobs_Collections/venv/Lib/python3.8/site-packages/beautifulsoup4-4.9.1.dist-info/INSTALLER deleted file mode 100644 index a1b589e..0000000 --- a/Jobs_Collections/venv/Lib/python3.8/site-packages/beautifulsoup4-4.9.1.dist-info/INSTALLER +++ /dev/null @@ -1 +0,0 @@ -pip diff --git a/Jobs_Collections/venv/Lib/python3.8/site-packages/beautifulsoup4-4.9.1.dist-info/LICENSE b/Jobs_Collections/venv/Lib/python3.8/site-packages/beautifulsoup4-4.9.1.dist-info/LICENSE deleted file mode 100644 index 4c068ba..0000000 --- a/Jobs_Collections/venv/Lib/python3.8/site-packages/beautifulsoup4-4.9.1.dist-info/LICENSE +++ /dev/null @@ -1,30 +0,0 @@ -Beautiful Soup is made available under the MIT license: - - Copyright (c) 2004-2019 Leonard Richardson - - 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. - -Beautiful Soup incorporates code from the html5lib library, which is -also made available under the MIT license. Copyright (c) 2006-2013 -James Graham and other contributors - -Beautiful Soup depends on the soupsieve library, which is also made -available under the MIT license. Copyright (c) 2018 Isaac Muse diff --git a/Jobs_Collections/venv/Lib/python3.8/site-packages/beautifulsoup4-4.9.1.dist-info/METADATA b/Jobs_Collections/venv/Lib/python3.8/site-packages/beautifulsoup4-4.9.1.dist-info/METADATA deleted file mode 100644 index 1b4a564..0000000 --- a/Jobs_Collections/venv/Lib/python3.8/site-packages/beautifulsoup4-4.9.1.dist-info/METADATA +++ /dev/null @@ -1,131 +0,0 @@ -Metadata-Version: 2.1 -Name: beautifulsoup4 -Version: 4.9.1 -Summary: Screen-scraping library -Home-page: http://www.crummy.com/software/BeautifulSoup/bs4/ -Author: Leonard Richardson -Author-email: leonardr@segfault.org -License: MIT -Download-URL: http://www.crummy.com/software/BeautifulSoup/bs4/download/ -Platform: UNKNOWN -Classifier: Development Status :: 5 - Production/Stable -Classifier: Intended Audience :: Developers -Classifier: License :: OSI Approved :: MIT License -Classifier: Programming Language :: Python -Classifier: Programming Language :: Python :: 2.7 -Classifier: Programming Language :: Python :: 3 -Classifier: Topic :: Text Processing :: Markup :: HTML -Classifier: Topic :: Text Processing :: Markup :: XML -Classifier: Topic :: Text Processing :: Markup :: SGML -Classifier: Topic :: Software Development :: Libraries :: Python Modules -Description-Content-Type: text/markdown -Requires-Dist: soupsieve (>1.2) -Provides-Extra: html5lib -Requires-Dist: html5lib ; extra == 'html5lib' -Provides-Extra: lxml -Requires-Dist: lxml ; extra == 'lxml' - -Beautiful Soup is a library that makes it easy to scrape information -from web pages. It sits atop an HTML or XML parser, providing Pythonic -idioms for iterating, searching, and modifying the parse tree. - -# Quick start - -``` ->>> from bs4 import BeautifulSoup ->>> soup = BeautifulSoup("

SomebadHTML") ->>> print soup.prettify() - - -

-Some - -bad - -HTML - - -

- - ->>> soup.find(text="bad") -u'bad' ->>> soup.i -HTML -# ->>> soup = BeautifulSoup("SomebadXML", "xml") -# ->>> print soup.prettify() - - -Some - -bad - -XML - - -``` - -To go beyond the basics, [comprehensive documentation is available](http://www.crummy.com/software/BeautifulSoup/bs4/doc/). - -# Links - -* [Homepage](http://www.crummy.com/software/BeautifulSoup/bs4/) -* [Documentation](http://www.crummy.com/software/BeautifulSoup/bs4/doc/) -* [Discussion group](http://groups.google.com/group/beautifulsoup/) -* [Development](https://code.launchpad.net/beautifulsoup/) -* [Bug tracker](https://bugs.launchpad.net/beautifulsoup/) -* [Complete changelog](https://bazaar.launchpad.net/~leonardr/beautifulsoup/bs4/view/head:/CHANGELOG) - -# Note on Python 2 sunsetting - -Since 2012, Beautiful Soup has been developed as a Python 2 library -which is automatically converted to Python 3 code as necessary. This -makes it impossible to take advantage of some features of Python -3. - -For this reason, I plan to discontinue Beautiful Soup's Python 2 -support at some point after December 31, 2020: one year after the -sunset date for Python 2 itself. Beyond that point, new Beautiful Soup -development will exclusively target Python 3. Of course, older -releases of Beautiful Soup, which support both versions, will continue -to be available. - -# Supporting the project - -If you use Beautiful Soup as part of your professional work, please consider a -[Tidelift subscription](https://tidelift.com/subscription/pkg/pypi-beautifulsoup4?utm_source=pypi-beautifulsoup4&utm_medium=referral&utm_campaign=readme). -This will support many of the free software projects your organization -depends on, not just Beautiful Soup. - -If you use Beautiful Soup for personal projects, the best way to say -thank you is to read -[Tool Safety](https://www.crummy.com/software/BeautifulSoup/zine/), a zine I -wrote about what Beautiful Soup has taught me about software -development. - -# Building the documentation - -The bs4/doc/ directory contains full documentation in Sphinx -format. Run `make html` in that directory to create HTML -documentation. - -# Running the unit tests - -Beautiful Soup supports unit test discovery from the project root directory: - -``` -$ nosetests -``` - -``` -$ python -m unittest discover -s bs4 -``` - -If you checked out the source tree, you should see a script in the -home directory called test-all-versions. This script will run the unit -tests under Python 2, then create a temporary Python 3 conversion of -the source and run the unit tests again under Python 3. - - diff --git a/Jobs_Collections/venv/Lib/python3.8/site-packages/beautifulsoup4-4.9.1.dist-info/RECORD b/Jobs_Collections/venv/Lib/python3.8/site-packages/beautifulsoup4-4.9.1.dist-info/RECORD deleted file mode 100644 index 46f1794..0000000 --- a/Jobs_Collections/venv/Lib/python3.8/site-packages/beautifulsoup4-4.9.1.dist-info/RECORD +++ /dev/null @@ -1,44 +0,0 @@ -beautifulsoup4-4.9.1.dist-info/AUTHORS,sha256=uSIdbrBb1sobdXl7VrlUvuvim2dN9kF3MH4Edn0WKGE,2176 -beautifulsoup4-4.9.1.dist-info/COPYING.txt,sha256=pH6lEjYJhGT-C09Vl0NZC1MwVtngD0nsv4Apn6tH4jE,1315 -beautifulsoup4-4.9.1.dist-info/INSTALLER,sha256=zuuue4knoyJ-UwPPXg8fezS7VCrXJQrAP7zeNuwvFQg,4 -beautifulsoup4-4.9.1.dist-info/LICENSE,sha256=ynIn3bnu1syAnhV_Z7Ag543eBjJAAB0RhW-FxJy25CM,1447 -beautifulsoup4-4.9.1.dist-info/METADATA,sha256=cIvKNOIcfpYqN5nITv3UDCtXZF1l_B5cPwpib-Gkjk8,4062 -beautifulsoup4-4.9.1.dist-info/RECORD,, -beautifulsoup4-4.9.1.dist-info/WHEEL,sha256=g4nMs7d-Xl9-xC9XovUrsDHGXt-FT0E17Yqo92DEfvY,92 -beautifulsoup4-4.9.1.dist-info/top_level.txt,sha256=H8VT-IuPWLzQqwG9_eChjXDJ1z0H9RRebdSR90Bjnkw,4 -bs4/__init__.py,sha256=ZM_Revj0Yipo_FRYdxS-rksn3MFXzR3XRyFirnM-h84,31551 -bs4/__pycache__/__init__.cpython-38.pyc,, -bs4/__pycache__/dammit.cpython-38.pyc,, -bs4/__pycache__/diagnose.cpython-38.pyc,, -bs4/__pycache__/element.cpython-38.pyc,, -bs4/__pycache__/formatter.cpython-38.pyc,, -bs4/__pycache__/testing.cpython-38.pyc,, -bs4/builder/__init__.py,sha256=VgrBobApHGLnuA8VCJuumZDP64UiGEzlxJJgLiV--sU,19841 -bs4/builder/__pycache__/__init__.cpython-38.pyc,, -bs4/builder/__pycache__/_html5lib.cpython-38.pyc,, -bs4/builder/__pycache__/_htmlparser.cpython-38.pyc,, -bs4/builder/__pycache__/_lxml.cpython-38.pyc,, -bs4/builder/_html5lib.py,sha256=hDxlzVrAku_eU7zEt4gZ-sAXzG58GvkLfMz6P4zUqoA,18748 -bs4/builder/_htmlparser.py,sha256=PEKGvBcJcf6_78CVwA1_uLxulnmnlRuWH0W2caTzpKk,18406 -bs4/builder/_lxml.py,sha256=e4w91RZi3NII_QYe2e1-EiN_BxQtgJPSRwQ8Xgz41ZA,12234 -bs4/dammit.py,sha256=k_XPB3kbZsHM01ckf9BxCUB2Eu2dIQ3d3DDt7UEv9RA,34130 -bs4/diagnose.py,sha256=HkiiFUWS9KU3sLILDYm8X-Tu0wZRuTdMClqtXPd99go,7761 -bs4/element.py,sha256=N6UNaAICZ0BjUl2VnZWZJz7b-v9W50R1YrCmaZbXw_0,81066 -bs4/formatter.py,sha256=Wayv1d6fUc9BSCa2k9uhvWwm89xCukdtJhyi9Sxvkuc,5654 -bs4/testing.py,sha256=xpDhC4AQaVrvNVog1Lgg8nUtg0Nack0CyEVD-bjAAj0,44897 -bs4/tests/__init__.py,sha256=bdUBDE750n7qNEfue7-3a1fBaUxJlvZMkvJvZa-lbYs,27 -bs4/tests/__pycache__/__init__.cpython-38.pyc,, -bs4/tests/__pycache__/test_builder_registry.cpython-38.pyc,, -bs4/tests/__pycache__/test_docs.cpython-38.pyc,, -bs4/tests/__pycache__/test_html5lib.cpython-38.pyc,, -bs4/tests/__pycache__/test_htmlparser.cpython-38.pyc,, -bs4/tests/__pycache__/test_lxml.cpython-38.pyc,, -bs4/tests/__pycache__/test_soup.cpython-38.pyc,, -bs4/tests/__pycache__/test_tree.cpython-38.pyc,, -bs4/tests/test_builder_registry.py,sha256=pllfRpArh9TYhjjRUiu1wITr9Ryyv4hiaAtRjij-k4E,5582 -bs4/tests/test_docs.py,sha256=FXfz2bGL4Xe0q6duwpmg9hmFiZuU4DVJPNZ0hTb6aH4,1067 -bs4/tests/test_html5lib.py,sha256=eWnLGHek_RO_TMq0Ixpb1RF3BEDrvhenMf2eaEBjjsg,6754 -bs4/tests/test_htmlparser.py,sha256=3294XvFbWVe0AYoTlnLPEDW_a0Om0BKRcsrwlJbxUaI,3941 -bs4/tests/test_lxml.py,sha256=xJr8eDrtHSb_vQw88lYEKyfdM1Hel4-dBaz14vQq78M,4105 -bs4/tests/test_soup.py,sha256=EhE1dhHKyctNu0y2l0ql6FOHg9qliEt8Kh7jfCx1lDw,29303 -bs4/tests/test_tree.py,sha256=W75j1-aDx8qHWzOr_JtRCjDE83nUShFauEzGfoys2k0,88988 diff --git a/Jobs_Collections/venv/Lib/python3.8/site-packages/beautifulsoup4-4.9.1.dist-info/WHEEL b/Jobs_Collections/venv/Lib/python3.8/site-packages/beautifulsoup4-4.9.1.dist-info/WHEEL deleted file mode 100644 index b552003..0000000 --- a/Jobs_Collections/venv/Lib/python3.8/site-packages/beautifulsoup4-4.9.1.dist-info/WHEEL +++ /dev/null @@ -1,5 +0,0 @@ -Wheel-Version: 1.0 -Generator: bdist_wheel (0.34.2) -Root-Is-Purelib: true -Tag: py3-none-any - diff --git a/Jobs_Collections/venv/Lib/python3.8/site-packages/beautifulsoup4-4.9.1.dist-info/top_level.txt b/Jobs_Collections/venv/Lib/python3.8/site-packages/beautifulsoup4-4.9.1.dist-info/top_level.txt deleted file mode 100644 index 1315442..0000000 --- a/Jobs_Collections/venv/Lib/python3.8/site-packages/beautifulsoup4-4.9.1.dist-info/top_level.txt +++ /dev/null @@ -1 +0,0 @@ -bs4 diff --git a/Jobs_Collections/venv/Lib/python3.8/site-packages/bs4-0.0.1-py3.8.egg-info/PKG-INFO b/Jobs_Collections/venv/Lib/python3.8/site-packages/bs4-0.0.1-py3.8.egg-info/PKG-INFO deleted file mode 100644 index 60137e4..0000000 --- a/Jobs_Collections/venv/Lib/python3.8/site-packages/bs4-0.0.1-py3.8.egg-info/PKG-INFO +++ /dev/null @@ -1,21 +0,0 @@ -Metadata-Version: 1.1 -Name: bs4 -Version: 0.0.1 -Summary: Screen-scraping library -Home-page: https://pypi.python.org/pypi/beautifulsoup4 -Author: Leonard Richardson -Author-email: leonardr@segfault.org -License: MIT -Download-URL: http://www.crummy.com/software/BeautifulSoup/bs4/download/ -Description: Use `beautifulsoup4 `_ instead. -Platform: UNKNOWN -Classifier: Development Status :: 5 - Production/Stable -Classifier: Intended Audience :: Developers -Classifier: License :: OSI Approved :: MIT License -Classifier: Programming Language :: Python -Classifier: Programming Language :: Python :: 2 -Classifier: Programming Language :: Python :: 3 -Classifier: Topic :: Text Processing :: Markup :: HTML -Classifier: Topic :: Text Processing :: Markup :: XML -Classifier: Topic :: Text Processing :: Markup :: SGML -Classifier: Topic :: Software Development :: Libraries :: Python Modules diff --git a/Jobs_Collections/venv/Lib/python3.8/site-packages/bs4-0.0.1-py3.8.egg-info/SOURCES.txt b/Jobs_Collections/venv/Lib/python3.8/site-packages/bs4-0.0.1-py3.8.egg-info/SOURCES.txt deleted file mode 100644 index b46d1c5..0000000 --- a/Jobs_Collections/venv/Lib/python3.8/site-packages/bs4-0.0.1-py3.8.egg-info/SOURCES.txt +++ /dev/null @@ -1,7 +0,0 @@ -setup.cfg -setup.py -bs4.egg-info/PKG-INFO -bs4.egg-info/SOURCES.txt -bs4.egg-info/dependency_links.txt -bs4.egg-info/requires.txt -bs4.egg-info/top_level.txt \ No newline at end of file diff --git a/Jobs_Collections/venv/Lib/python3.8/site-packages/bs4-0.0.1-py3.8.egg-info/dependency_links.txt b/Jobs_Collections/venv/Lib/python3.8/site-packages/bs4-0.0.1-py3.8.egg-info/dependency_links.txt deleted file mode 100644 index 8b13789..0000000 --- a/Jobs_Collections/venv/Lib/python3.8/site-packages/bs4-0.0.1-py3.8.egg-info/dependency_links.txt +++ /dev/null @@ -1 +0,0 @@ - diff --git a/Jobs_Collections/venv/Lib/python3.8/site-packages/bs4-0.0.1-py3.8.egg-info/installed-files.txt b/Jobs_Collections/venv/Lib/python3.8/site-packages/bs4-0.0.1-py3.8.egg-info/installed-files.txt deleted file mode 100644 index 62cfadb..0000000 --- a/Jobs_Collections/venv/Lib/python3.8/site-packages/bs4-0.0.1-py3.8.egg-info/installed-files.txt +++ /dev/null @@ -1,5 +0,0 @@ -PKG-INFO -SOURCES.txt -dependency_links.txt -requires.txt -top_level.txt diff --git a/Jobs_Collections/venv/Lib/python3.8/site-packages/bs4-0.0.1-py3.8.egg-info/requires.txt b/Jobs_Collections/venv/Lib/python3.8/site-packages/bs4-0.0.1-py3.8.egg-info/requires.txt deleted file mode 100644 index c1f5f71..0000000 --- a/Jobs_Collections/venv/Lib/python3.8/site-packages/bs4-0.0.1-py3.8.egg-info/requires.txt +++ /dev/null @@ -1 +0,0 @@ -beautifulsoup4 diff --git a/Jobs_Collections/venv/Lib/python3.8/site-packages/bs4-0.0.1-py3.8.egg-info/top_level.txt b/Jobs_Collections/venv/Lib/python3.8/site-packages/bs4-0.0.1-py3.8.egg-info/top_level.txt deleted file mode 100644 index 8b13789..0000000 --- a/Jobs_Collections/venv/Lib/python3.8/site-packages/bs4-0.0.1-py3.8.egg-info/top_level.txt +++ /dev/null @@ -1 +0,0 @@ - diff --git a/Jobs_Collections/venv/Lib/python3.8/site-packages/bs4/__init__.py b/Jobs_Collections/venv/Lib/python3.8/site-packages/bs4/__init__.py deleted file mode 100644 index afaca71..0000000 --- a/Jobs_Collections/venv/Lib/python3.8/site-packages/bs4/__init__.py +++ /dev/null @@ -1,777 +0,0 @@ -"""Beautiful Soup Elixir and Tonic - "The Screen-Scraper's Friend". - -http://www.crummy.com/software/BeautifulSoup/ - -Beautiful Soup uses a pluggable XML or HTML parser to parse a -(possibly invalid) document into a tree representation. Beautiful Soup -provides methods and Pythonic idioms that make it easy to navigate, -search, and modify the parse tree. - -Beautiful Soup works with Python 2.7 and up. It works better if lxml -and/or html5lib is installed. - -For more than you ever wanted to know about Beautiful Soup, see the -documentation: http://www.crummy.com/software/BeautifulSoup/bs4/doc/ -""" - -__author__ = "Leonard Richardson (leonardr@segfault.org)" -__version__ = "4.9.1" -__copyright__ = "Copyright (c) 2004-2020 Leonard Richardson" -# Use of this source code is governed by the MIT license. -__license__ = "MIT" - -__all__ = ['BeautifulSoup'] - -import os -import re -import sys -import traceback -import warnings - -from .builder import builder_registry, ParserRejectedMarkup -from .dammit import UnicodeDammit -from .element import ( - CData, - Comment, - DEFAULT_OUTPUT_ENCODING, - Declaration, - Doctype, - NavigableString, - PageElement, - ProcessingInstruction, - PYTHON_SPECIFIC_ENCODINGS, - ResultSet, - Script, - Stylesheet, - SoupStrainer, - Tag, - TemplateString, - ) - -# The very first thing we do is give a useful error if someone is -# running this code under Python 3 without converting it. -'You are trying to run the Python 2 version of Beautiful Soup under Python 3. This will not work.'!='You need to convert the code, either by installing it (`python setup.py install`) or by running 2to3 (`2to3 -w bs4`).' - -# Define some custom warnings. -class GuessedAtParserWarning(UserWarning): - """The warning issued when BeautifulSoup has to guess what parser to - use -- probably because no parser was specified in the constructor. - """ - -class MarkupResemblesLocatorWarning(UserWarning): - """The warning issued when BeautifulSoup is given 'markup' that - actually looks like a resource locator -- a URL or a path to a file - on disk. - """ - - -class BeautifulSoup(Tag): - """A data structure representing a parsed HTML or XML document. - - Most of the methods you'll call on a BeautifulSoup object are inherited from - PageElement or Tag. - - Internally, this class defines the basic interface called by the - tree builders when converting an HTML/XML document into a data - structure. The interface abstracts away the differences between - parsers. To write a new tree builder, you'll need to understand - these methods as a whole. - - These methods will be called by the BeautifulSoup constructor: - * reset() - * feed(markup) - - The tree builder may call these methods from its feed() implementation: - * handle_starttag(name, attrs) # See note about return value - * handle_endtag(name) - * handle_data(data) # Appends to the current data node - * endData(containerClass) # Ends the current data node - - No matter how complicated the underlying parser is, you should be - able to build a tree using 'start tag' events, 'end tag' events, - 'data' events, and "done with data" events. - - If you encounter an empty-element tag (aka a self-closing tag, - like HTML's
tag), call handle_starttag and then - handle_endtag. - """ - - # Since BeautifulSoup subclasses Tag, it's possible to treat it as - # a Tag with a .name. This name makes it clear the BeautifulSoup - # object isn't a real markup tag. - ROOT_TAG_NAME = '[document]' - - # If the end-user gives no indication which tree builder they - # want, look for one with these features. - DEFAULT_BUILDER_FEATURES = ['html', 'fast'] - - # A string containing all ASCII whitespace characters, used in - # endData() to detect data chunks that seem 'empty'. - ASCII_SPACES = '\x20\x0a\x09\x0c\x0d' - - NO_PARSER_SPECIFIED_WARNING = "No parser was explicitly specified, so I'm using the best available %(markup_type)s parser for this system (\"%(parser)s\"). This usually isn't a problem, but if you run this code on another system, or in a different virtual environment, it may use a different parser and behave differently.\n\nThe code that caused this warning is on line %(line_number)s of the file %(filename)s. To get rid of this warning, pass the additional argument 'features=\"%(parser)s\"' to the BeautifulSoup constructor.\n" - - def __init__(self, markup="", features=None, builder=None, - parse_only=None, from_encoding=None, exclude_encodings=None, - element_classes=None, **kwargs): - """Constructor. - - :param markup: A string or a file-like object representing - markup to be parsed. - - :param features: Desirable features of the parser to be - used. This may be the name of a specific parser ("lxml", - "lxml-xml", "html.parser", or "html5lib") or it may be the - type of markup to be used ("html", "html5", "xml"). It's - recommended that you name a specific parser, so that - Beautiful Soup gives you the same results across platforms - and virtual environments. - - :param builder: A TreeBuilder subclass to instantiate (or - instance to use) instead of looking one up based on - `features`. You only need to use this if you've implemented a - custom TreeBuilder. - - :param parse_only: A SoupStrainer. Only parts of the document - matching the SoupStrainer will be considered. This is useful - when parsing part of a document that would otherwise be too - large to fit into memory. - - :param from_encoding: A string indicating the encoding of the - document to be parsed. Pass this in if Beautiful Soup is - guessing wrongly about the document's encoding. - - :param exclude_encodings: A list of strings indicating - encodings known to be wrong. Pass this in if you don't know - the document's encoding but you know Beautiful Soup's guess is - wrong. - - :param element_classes: A dictionary mapping BeautifulSoup - classes like Tag and NavigableString, to other classes you'd - like to be instantiated instead as the parse tree is - built. This is useful for subclassing Tag or NavigableString - to modify default behavior. - - :param kwargs: For backwards compatibility purposes, the - constructor accepts certain keyword arguments used in - Beautiful Soup 3. None of these arguments do anything in - Beautiful Soup 4; they will result in a warning and then be - ignored. - - Apart from this, any keyword arguments passed into the - BeautifulSoup constructor are propagated to the TreeBuilder - constructor. This makes it possible to configure a - TreeBuilder by passing in arguments, not just by saying which - one to use. - """ - if 'convertEntities' in kwargs: - del kwargs['convertEntities'] - warnings.warn( - "BS4 does not respect the convertEntities argument to the " - "BeautifulSoup constructor. Entities are always converted " - "to Unicode characters.") - - if 'markupMassage' in kwargs: - del kwargs['markupMassage'] - warnings.warn( - "BS4 does not respect the markupMassage argument to the " - "BeautifulSoup constructor. The tree builder is responsible " - "for any necessary markup massage.") - - if 'smartQuotesTo' in kwargs: - del kwargs['smartQuotesTo'] - warnings.warn( - "BS4 does not respect the smartQuotesTo argument to the " - "BeautifulSoup constructor. Smart quotes are always converted " - "to Unicode characters.") - - if 'selfClosingTags' in kwargs: - del kwargs['selfClosingTags'] - warnings.warn( - "BS4 does not respect the selfClosingTags argument to the " - "BeautifulSoup constructor. The tree builder is responsible " - "for understanding self-closing tags.") - - if 'isHTML' in kwargs: - del kwargs['isHTML'] - warnings.warn( - "BS4 does not respect the isHTML argument to the " - "BeautifulSoup constructor. Suggest you use " - "features='lxml' for HTML and features='lxml-xml' for " - "XML.") - - def deprecated_argument(old_name, new_name): - if old_name in kwargs: - warnings.warn( - 'The "%s" argument to the BeautifulSoup constructor ' - 'has been renamed to "%s."' % (old_name, new_name)) - value = kwargs[old_name] - del kwargs[old_name] - return value - return None - - parse_only = parse_only or deprecated_argument( - "parseOnlyThese", "parse_only") - - from_encoding = from_encoding or deprecated_argument( - "fromEncoding", "from_encoding") - - if from_encoding and isinstance(markup, str): - warnings.warn("You provided Unicode markup but also provided a value for from_encoding. Your from_encoding will be ignored.") - from_encoding = None - - self.element_classes = element_classes or dict() - - # We need this information to track whether or not the builder - # was specified well enough that we can omit the 'you need to - # specify a parser' warning. - original_builder = builder - original_features = features - - if isinstance(builder, type): - # A builder class was passed in; it needs to be instantiated. - builder_class = builder - builder = None - elif builder is None: - if isinstance(features, str): - features = [features] - if features is None or len(features) == 0: - features = self.DEFAULT_BUILDER_FEATURES - builder_class = builder_registry.lookup(*features) - if builder_class is None: - raise FeatureNotFound( - "Couldn't find a tree builder with the features you " - "requested: %s. Do you need to install a parser library?" - % ",".join(features)) - - # At this point either we have a TreeBuilder instance in - # builder, or we have a builder_class that we can instantiate - # with the remaining **kwargs. - if builder is None: - builder = builder_class(**kwargs) - if not original_builder and not ( - original_features == builder.NAME or - original_features in builder.ALTERNATE_NAMES - ): - if builder.is_xml: - markup_type = "XML" - else: - markup_type = "HTML" - - # This code adapted from warnings.py so that we get the same line - # of code as our warnings.warn() call gets, even if the answer is wrong - # (as it may be in a multithreading situation). - caller = None - try: - caller = sys._getframe(1) - except ValueError: - pass - if caller: - globals = caller.f_globals - line_number = caller.f_lineno - else: - globals = sys.__dict__ - line_number= 1 - filename = globals.get('__file__') - if filename: - fnl = filename.lower() - if fnl.endswith((".pyc", ".pyo")): - filename = filename[:-1] - if filename: - # If there is no filename at all, the user is most likely in a REPL, - # and the warning is not necessary. - values = dict( - filename=filename, - line_number=line_number, - parser=builder.NAME, - markup_type=markup_type - ) - warnings.warn( - self.NO_PARSER_SPECIFIED_WARNING % values, - GuessedAtParserWarning, stacklevel=2 - ) - else: - if kwargs: - warnings.warn("Keyword arguments to the BeautifulSoup constructor will be ignored. These would normally be passed into the TreeBuilder constructor, but a TreeBuilder instance was passed in as `builder`.") - - self.builder = builder - self.is_xml = builder.is_xml - self.known_xml = self.is_xml - self._namespaces = dict() - self.parse_only = parse_only - - self.builder.initialize_soup(self) - - if hasattr(markup, 'read'): # It's a file-type object. - markup = markup.read() - elif len(markup) <= 256 and ( - (isinstance(markup, bytes) and not b'<' in markup) - or (isinstance(markup, str) and not '<' in markup) - ): - # Print out warnings for a couple beginner problems - # involving passing non-markup to Beautiful Soup. - # Beautiful Soup will still parse the input as markup, - # just in case that's what the user really wants. - if (isinstance(markup, str) - and not os.path.supports_unicode_filenames): - possible_filename = markup.encode("utf8") - else: - possible_filename = markup - is_file = False - try: - is_file = os.path.exists(possible_filename) - except Exception as e: - # This is almost certainly a problem involving - # characters not valid in filenames on this - # system. Just let it go. - pass - if is_file: - warnings.warn( - '"%s" looks like a filename, not markup. You should' - ' probably open this file and pass the filehandle into' - ' Beautiful Soup.' % self._decode_markup(markup), - MarkupResemblesLocatorWarning - ) - self._check_markup_is_url(markup) - - rejections = [] - success = False - for (self.markup, self.original_encoding, self.declared_html_encoding, - self.contains_replacement_characters) in ( - self.builder.prepare_markup( - markup, from_encoding, exclude_encodings=exclude_encodings)): - self.reset() - try: - self._feed() - success = True - break - except ParserRejectedMarkup as e: - rejections.append(e) - pass - - if not success: - other_exceptions = [str(e) for e in rejections] - raise ParserRejectedMarkup( - "The markup you provided was rejected by the parser. Trying a different parser or a different encoding may help.\n\nOriginal exception(s) from parser:\n " + "\n ".join(other_exceptions) - ) - - # Clear out the markup and remove the builder's circular - # reference to this object. - self.markup = None - self.builder.soup = None - - def __copy__(self): - """Copy a BeautifulSoup object by converting the document to a string and parsing it again.""" - copy = type(self)( - self.encode('utf-8'), builder=self.builder, from_encoding='utf-8' - ) - - # Although we encoded the tree to UTF-8, that may not have - # been the encoding of the original markup. Set the copy's - # .original_encoding to reflect the original object's - # .original_encoding. - copy.original_encoding = self.original_encoding - return copy - - def __getstate__(self): - # Frequently a tree builder can't be pickled. - d = dict(self.__dict__) - if 'builder' in d and not self.builder.picklable: - d['builder'] = None - return d - - @classmethod - def _decode_markup(cls, markup): - """Ensure `markup` is bytes so it's safe to send into warnings.warn. - - TODO: warnings.warn had this problem back in 2010 but it might not - anymore. - """ - if isinstance(markup, bytes): - decoded = markup.decode('utf-8', 'replace') - else: - decoded = markup - return decoded - - @classmethod - def _check_markup_is_url(cls, markup): - """Error-handling method to raise a warning if incoming markup looks - like a URL. - - :param markup: A string. - """ - if isinstance(markup, bytes): - space = b' ' - cant_start_with = (b"http:", b"https:") - elif isinstance(markup, str): - space = ' ' - cant_start_with = ("http:", "https:") - else: - return - - if any(markup.startswith(prefix) for prefix in cant_start_with): - if not space in markup: - warnings.warn( - '"%s" looks like a URL. Beautiful Soup is not an' - ' HTTP client. You should probably use an HTTP client like' - ' requests to get the document behind the URL, and feed' - ' that document to Beautiful Soup.' % cls._decode_markup( - markup - ), - MarkupResemblesLocatorWarning - ) - - def _feed(self): - """Internal method that parses previously set markup, creating a large - number of Tag and NavigableString objects. - """ - # Convert the document to Unicode. - self.builder.reset() - - self.builder.feed(self.markup) - # Close out any unfinished strings and close all the open tags. - self.endData() - while self.currentTag.name != self.ROOT_TAG_NAME: - self.popTag() - - def reset(self): - """Reset this object to a state as though it had never parsed any - markup. - """ - Tag.__init__(self, self, self.builder, self.ROOT_TAG_NAME) - self.hidden = 1 - self.builder.reset() - self.current_data = [] - self.currentTag = None - self.tagStack = [] - self.preserve_whitespace_tag_stack = [] - self.string_container_stack = [] - self.pushTag(self) - - def new_tag(self, name, namespace=None, nsprefix=None, attrs={}, - sourceline=None, sourcepos=None, **kwattrs): - """Create a new Tag associated with this BeautifulSoup object. - - :param name: The name of the new Tag. - :param namespace: The URI of the new Tag's XML namespace, if any. - :param prefix: The prefix for the new Tag's XML namespace, if any. - :param attrs: A dictionary of this Tag's attribute values; can - be used instead of `kwattrs` for attributes like 'class' - that are reserved words in Python. - :param sourceline: The line number where this tag was - (purportedly) found in its source document. - :param sourcepos: The character position within `sourceline` where this - tag was (purportedly) found. - :param kwattrs: Keyword arguments for the new Tag's attribute values. - - """ - kwattrs.update(attrs) - return self.element_classes.get(Tag, Tag)( - None, self.builder, name, namespace, nsprefix, kwattrs, - sourceline=sourceline, sourcepos=sourcepos - ) - - def string_container(self, base_class=None): - container = base_class or NavigableString - - # There may be a general override of NavigableString. - container = self.element_classes.get( - container, container - ) - - # On top of that, we may be inside a tag that needs a special - # container class. - if self.string_container_stack: - container = self.builder.string_containers.get( - self.string_container_stack[-1].name, container - ) - return container - - def new_string(self, s, subclass=None): - """Create a new NavigableString associated with this BeautifulSoup - object. - """ - container = self.string_container(subclass) - return container(s) - - def insert_before(self, successor): - """This method is part of the PageElement API, but `BeautifulSoup` doesn't implement - it because there is nothing before or after it in the parse tree. - """ - raise NotImplementedError("BeautifulSoup objects don't support insert_before().") - - def insert_after(self, successor): - """This method is part of the PageElement API, but `BeautifulSoup` doesn't implement - it because there is nothing before or after it in the parse tree. - """ - raise NotImplementedError("BeautifulSoup objects don't support insert_after().") - - def popTag(self): - """Internal method called by _popToTag when a tag is closed.""" - tag = self.tagStack.pop() - if self.preserve_whitespace_tag_stack and tag == self.preserve_whitespace_tag_stack[-1]: - self.preserve_whitespace_tag_stack.pop() - if self.string_container_stack and tag == self.string_container_stack[-1]: - self.string_container_stack.pop() - #print("Pop", tag.name) - if self.tagStack: - self.currentTag = self.tagStack[-1] - return self.currentTag - - def pushTag(self, tag): - """Internal method called by handle_starttag when a tag is opened.""" - #print("Push", tag.name) - if self.currentTag is not None: - self.currentTag.contents.append(tag) - self.tagStack.append(tag) - self.currentTag = self.tagStack[-1] - if tag.name in self.builder.preserve_whitespace_tags: - self.preserve_whitespace_tag_stack.append(tag) - if tag.name in self.builder.string_containers: - self.string_container_stack.append(tag) - - def endData(self, containerClass=None): - """Method called by the TreeBuilder when the end of a data segment - occurs. - """ - containerClass = self.string_container(containerClass) - - if self.current_data: - current_data = ''.join(self.current_data) - # If whitespace is not preserved, and this string contains - # nothing but ASCII spaces, replace it with a single space - # or newline. - if not self.preserve_whitespace_tag_stack: - strippable = True - for i in current_data: - if i not in self.ASCII_SPACES: - strippable = False - break - if strippable: - if '\n' in current_data: - current_data = '\n' - else: - current_data = ' ' - - # Reset the data collector. - self.current_data = [] - - # Should we add this string to the tree at all? - if self.parse_only and len(self.tagStack) <= 1 and \ - (not self.parse_only.text or \ - not self.parse_only.search(current_data)): - return - - o = containerClass(current_data) - self.object_was_parsed(o) - - def object_was_parsed(self, o, parent=None, most_recent_element=None): - """Method called by the TreeBuilder to integrate an object into the parse tree.""" - if parent is None: - parent = self.currentTag - if most_recent_element is not None: - previous_element = most_recent_element - else: - previous_element = self._most_recent_element - - next_element = previous_sibling = next_sibling = None - if isinstance(o, Tag): - next_element = o.next_element - next_sibling = o.next_sibling - previous_sibling = o.previous_sibling - if previous_element is None: - previous_element = o.previous_element - - fix = parent.next_element is not None - - o.setup(parent, previous_element, next_element, previous_sibling, next_sibling) - - self._most_recent_element = o - parent.contents.append(o) - - # Check if we are inserting into an already parsed node. - if fix: - self._linkage_fixer(parent) - - def _linkage_fixer(self, el): - """Make sure linkage of this fragment is sound.""" - - first = el.contents[0] - child = el.contents[-1] - descendant = child - - if child is first and el.parent is not None: - # Parent should be linked to first child - el.next_element = child - # We are no longer linked to whatever this element is - prev_el = child.previous_element - if prev_el is not None and prev_el is not el: - prev_el.next_element = None - # First child should be linked to the parent, and no previous siblings. - child.previous_element = el - child.previous_sibling = None - - # We have no sibling as we've been appended as the last. - child.next_sibling = None - - # This index is a tag, dig deeper for a "last descendant" - if isinstance(child, Tag) and child.contents: - descendant = child._last_descendant(False) - - # As the final step, link last descendant. It should be linked - # to the parent's next sibling (if found), else walk up the chain - # and find a parent with a sibling. It should have no next sibling. - descendant.next_element = None - descendant.next_sibling = None - target = el - while True: - if target is None: - break - elif target.next_sibling is not None: - descendant.next_element = target.next_sibling - target.next_sibling.previous_element = child - break - target = target.parent - - def _popToTag(self, name, nsprefix=None, inclusivePop=True): - """Pops the tag stack up to and including the most recent - instance of the given tag. - - :param name: Pop up to the most recent tag with this name. - :param nsprefix: The namespace prefix that goes with `name`. - :param inclusivePop: It this is false, pops the tag stack up - to but *not* including the most recent instqance of the - given tag. - """ - #print("Popping to %s" % name) - if name == self.ROOT_TAG_NAME: - # The BeautifulSoup object itself can never be popped. - return - - most_recently_popped = None - - stack_size = len(self.tagStack) - for i in range(stack_size - 1, 0, -1): - t = self.tagStack[i] - if (name == t.name and nsprefix == t.prefix): - if inclusivePop: - most_recently_popped = self.popTag() - break - most_recently_popped = self.popTag() - - return most_recently_popped - - def handle_starttag(self, name, namespace, nsprefix, attrs, sourceline=None, - sourcepos=None): - """Called by the tree builder when a new tag is encountered. - - :param name: Name of the tag. - :param nsprefix: Namespace prefix for the tag. - :param attrs: A dictionary of attribute values. - :param sourceline: The line number where this tag was found in its - source document. - :param sourcepos: The character position within `sourceline` where this - tag was found. - - If this method returns None, the tag was rejected by an active - SoupStrainer. You should proceed as if the tag had not occurred - in the document. For instance, if this was a self-closing tag, - don't call handle_endtag. - """ - # print("Start tag %s: %s" % (name, attrs)) - self.endData() - - if (self.parse_only and len(self.tagStack) <= 1 - and (self.parse_only.text - or not self.parse_only.search_tag(name, attrs))): - return None - - tag = self.element_classes.get(Tag, Tag)( - self, self.builder, name, namespace, nsprefix, attrs, - self.currentTag, self._most_recent_element, - sourceline=sourceline, sourcepos=sourcepos - ) - if tag is None: - return tag - if self._most_recent_element is not None: - self._most_recent_element.next_element = tag - self._most_recent_element = tag - self.pushTag(tag) - return tag - - def handle_endtag(self, name, nsprefix=None): - """Called by the tree builder when an ending tag is encountered. - - :param name: Name of the tag. - :param nsprefix: Namespace prefix for the tag. - """ - #print("End tag: " + name) - self.endData() - self._popToTag(name, nsprefix) - - def handle_data(self, data): - """Called by the tree builder when a chunk of textual data is encountered.""" - self.current_data.append(data) - - def decode(self, pretty_print=False, - eventual_encoding=DEFAULT_OUTPUT_ENCODING, - formatter="minimal"): - """Returns a string or Unicode representation of the parse tree - as an HTML or XML document. - - :param pretty_print: If this is True, indentation will be used to - make the document more readable. - :param eventual_encoding: The encoding of the final document. - If this is None, the document will be a Unicode string. - """ - if self.is_xml: - # Print the XML declaration - encoding_part = '' - if eventual_encoding in PYTHON_SPECIFIC_ENCODINGS: - # This is a special Python encoding; it can't actually - # go into an XML document because it means nothing - # outside of Python. - eventual_encoding = None - if eventual_encoding != None: - encoding_part = ' encoding="%s"' % eventual_encoding - prefix = '\n' % encoding_part - else: - prefix = '' - if not pretty_print: - indent_level = None - else: - indent_level = 0 - return prefix + super(BeautifulSoup, self).decode( - indent_level, eventual_encoding, formatter) - -# Aliases to make it easier to get started quickly, e.g. 'from bs4 import _soup' -_s = BeautifulSoup -_soup = BeautifulSoup - -class BeautifulStoneSoup(BeautifulSoup): - """Deprecated interface to an XML parser.""" - - def __init__(self, *args, **kwargs): - kwargs['features'] = 'xml' - warnings.warn( - 'The BeautifulStoneSoup class is deprecated. Instead of using ' - 'it, pass features="xml" into the BeautifulSoup constructor.') - super(BeautifulStoneSoup, self).__init__(*args, **kwargs) - - -class StopParsing(Exception): - """Exception raised by a TreeBuilder if it's unable to continue parsing.""" - pass - -class FeatureNotFound(ValueError): - """Exception raised by the BeautifulSoup constructor if no parser with the - requested features is found. - """ - pass - - -#If this file is run as a script, act as an HTML pretty-printer. -if __name__ == '__main__': - import sys - soup = BeautifulSoup(sys.stdin) - print((soup.prettify())) diff --git a/Jobs_Collections/venv/Lib/python3.8/site-packages/bs4/__pycache__/__init__.cpython-38.pyc b/Jobs_Collections/venv/Lib/python3.8/site-packages/bs4/__pycache__/__init__.cpython-38.pyc deleted file mode 100644 index 298b83f7142f9bcc73d54c74002809ad4bde0734..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 22709 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 T{X5H=6T=h93FMa3d;Wg`J(GN? diff --git a/Jobs_Collections/venv/Lib/python3.8/site-packages/bs4/__pycache__/dammit.cpython-38.pyc b/Jobs_Collections/venv/Lib/python3.8/site-packages/bs4/__pycache__/dammit.cpython-38.pyc deleted file mode 100644 index d51fa5e892ea170a99eed4e4313fe67d1094f1df..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 21624 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 Mg>q8U70Rjq2d35^3IG5A diff --git a/Jobs_Collections/venv/Lib/python3.8/site-packages/bs4/__pycache__/diagnose.cpython-38.pyc b/Jobs_Collections/venv/Lib/python3.8/site-packages/bs4/__pycache__/diagnose.cpython-38.pyc deleted file mode 100644 index 04f5e580a380d15cfb59b1f55ddbfad80aa9c12e..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 8474 zcmb_h-)|d7e&1a#mlR3;ux!hYV=EgwvdzS%Qr9_O9Mz5EAF+G3tVp!u5X~_w&QPSZ z+@)rR`mrTb92~SjfV2U6xV}o z-Bio0n7W2`+D*5tily2qH&e-=&vG-ZY$e+osf?)pjGJraEBOSbP${UnMk}ML9;=M0 zdb~2O>WRvPs*hEUsd}<9scKp~%SOJ@D#zIcmS=@;^va1(H8#q|zR}niw_c;yXr$T!#wJH<|;b%tGJXV{x)y~!@Ib8H%|v+Odn+1qHH zfZLl5?%B+5dMmc%wT2yZ+HGIRQj~i9u)IsOo-gWAc1a3=JbZ$7?m_wSqXkCIckl#{3{8_b zKdDctU7&49V>K1Ou@o~|dL`A!mTW0O$fy`*ZCBoNO=sb^5vXh2|O0HD=N}IG5Am8O%TGPV_85 zk9Dop{rRrM^8spVXvXoE&nS;|H8$~r&brjq`jb0aPxHP->o_~Mqkpdl_f>n6+Txd3 z>v&fiQ1OJ~iP0r3yeUttp6pL`H3jz@z?~exo$7+>|2WpmbTje%w6D*!MeR9u=uH9J z(`z}*{##w6f4o!7Fh#SgGx@fc#rvslHaW4=y^-*Qe50#%v+RxUj9!kN>5X8npJT2w zn9C4nlbxT&xHtF4$v69Fcd)`yx^_n}W)84t2e4W<*FP6?J^IfPF5m0xzhl^KaXS3n zkOTysrsRt2n}P2-k{G_`w_3huw}rp#@>WpF_isunrc7%7+p7%ZekBSheX%&S-2P z9gjJJ*?vd1J2D;~UK+w)bUd{*upP*oO#)}n1mUrTZP~z=MDWn{W4<9I`v+MW-sK#S8JW&*nzP?z2GfQsv42lm6bN&9U|YW#qLL|~lVM+BJUcrX`sren3d6y&+uh}BCgO%sQH{z-G zupXK&yf*0kljn;}!5tQ+8&bA!h89)9&2aAgOmN_${>peJ@2?c%dw| z=__Vc3}J8k9kIv6n@!mO1KcMaU*`@OmIvh@r@<2Ha1>X>qX_Ak^Go4{2VC$=0gOk? zKCH=XHPb%O&2ZuB|MRan9i^4j2n(zirGo7s$|OuLGU%#g6LS-Y34*W$Z}}TMvYd9C zdrXioAqw=xT!qDpQZ1*AX{4wW9zB2jsQT>Q;?lz>^HKhxV#a$y_(F^je5T<9j+8=- z(OV8uB4j{2jtoDD%(jD;#kXMM@aAK&DEG{9J3O8uO@l`6ZPj?2jBqp}g;V3pPHin3 zQ5&lAty(49hQfd)-7e-Mla8`7y6gnaS~V79OiZU8Ws*I{8_{`;piyr}RwD12pi`^y z00RPOh#xd@73=@#&SI$zNAlSXN6glJGRwj22aVZQt5$D)xWca8Sgu~%YF8WLgX_Vj zy#79ZE8c8*w%u%BO*F&RpRL{akl$FX%`WemeOlxC>~e5@Hqmgr)ZUJ=doNR1I}j)| ztDuh=IX$cA@VC%1=>JFKkCsV&hF;L8^$FECWzu_ApTwVFrcwn!oCZWzHw{A{Lo26G z=@ThS&l*|0nQA`%`rC`NUtA22w2Xw6VWx(C~%Pi{>smw&7#P$-qgxw_#f750Gt~V)bz5tjj#vp| zK}{jZ)A*VP%s{V|(6F*FYnlM{=;6=ftyHdMfo zupFEhGEW@GmGH^S7?y0QW4D_%GEuZ72?rfk;^mOQkc6x>A#G~rJ#$*J%P?IWs+0%P z-h?MZ{O`x25KBW1PLKT+%@!YRd=Ov7>~uhZ5Z&pygC`(UBH{ch2U`Q3bi_)EB@h^y z#Q2dO96o8I+V0R`nnlyY`j-5tO<}HDk=PBcKGaqhp#+66jMg>g!z@hp zQu+2``3GHm1gK(4e27Y1L=mOQb{)ZFyaE5ihb z{(15@a!jq;KSeD>d|2)8 zhp>7zwPM)U!AbGdy*rOyjnIIZc+LHG2%A?k698Wam2n*0)A?V_KlyzA>fN72snGG( zJb%-xGA#Ao5KiZgoZB$u>mZc|QVS1XO`Va1joQuchwwOa1djpOd~qzwR;%P7SF2I3 zT5b8P1JzcI3f1a*$8nP{nQ9egp;}ccQryDi;$td4p@KB5xJ$)7D(+M9DHRW>*w+RF zArwEyhZdfIyj-}ZnQZFtU%?#6dXeHMrLGkE2{fekLZiG^U#H9rRJu+oJ^cMaS8_k= zX8)fY%At9bv3r?YsqE*$5ESv?LAUZH$&w>3-F(qd`;SbDa`B?{>buzU5IL1Pn>cKI z{|P_=*%U2n>0%yrCGGI0->IBjuCe+`V|C4KdF^!($c@dd?Qk~@kOOq4!PKefd=m|( z_jH(R`1kPWFZYZtGQ?BJmaZA%yhH@xnbJTuQJ1N{*-h=}H*hNJg)W_j8D995dt4xV zvK?E%ZX(Fu^aZ=Bk_T~)s3gX*$}XL+@+gbxC=JjRj;v@6xmVwF5C=q=>W04wZwKM2 znkTYq4IkN9NXk{9|;ywyubw;Dica<9e@Z1+dqKCljLocz{+9%So5 z>My5=t)c~M3YWr#2cqu@murT4|>^kHB8 z6u*qjt>8Si+Tzx4@l`R33CAovi;P!{YH7~(;nxMXN&`?Va*F0RUCKp&h9=y#XD^$5 zFw4Kv?6fh>5Dv=SKco&(mv)@Rqp15YXi!KQr>n{LUdi8{Z?S+1Lo{k!#PK;!|@rhb`LV{xTGv?OJrzK`Pj^r0EX_Gh50 zhCUMEJNhY&9XmxH<7D{WqT)VW1rQ};&h`+uZ8$EnIVz|cc+ioKJPB)Vz^QFJo;r|7 zUyiJxCYo&-rKN)es^a-wkVgy6xtZYBF7cf@VzEG->A6|-hSnU3`mIRMg_*fo)kcIx zhoKH%Q1~OBQb9^p5nY{H(TWOQr&Ub?sGu?e-%x4%Aj-GurHdj`w&QsH@N_D!Voak5>c8(tWcWKcbb*m^0X%YTM+xrK{| zUn5zb!Nmh5%SZMuHDsor9VE+hz0B8{y-SF0N?ZqI9+x9l*F3G&_pU*%Q{<dEeGla5x!SzP{>~j|Ll(6f`LM&ej^F{#r|jerHSxA-&0)7 zc5D~1H}W7a<7fNw46~QFB@c?FIJSQuhpG~3f<*a#SsX((AD;hY>H2%{Rg|HO^R`Jo z0{M-Z(zSX}+Rq(??<_jQ`I?u*hnES8*q$=-KQ(i4T!oS<*{OIjO2IrJ&(LgfL55A7 zr{V$??@&RUsgey9lf*aP4_O1GO(|wC=7dWi`$qUZ`lvhN3U$}1xJ(7bwejdfTKCxC zeD;!(zXxb=9ff94a&E#np;B>_(96<0T@)t*4K&Wy2dIDbey7t#E{J3s*UO2r64s{9~Zh^B<5hc=`t_dA0Z>&v$|G4$IwE8 z&+6wXFS296$+EzenefI_B*o(U6Qq)m?xL)@Aog++Ge4vtaq*gD@=L{3ltRvPpO)cU zcr6WlCd$NJrU39tl6ERqa<~NO(9P2Z4@awe9MHwE-D}w7e6bK^C2zF}gJ^Odt}H9# z)u-Ep`-Ig+K*fw;GUP!7r4gcRZ6QXwVjT{uTx0B2r=)MGS#m3xbZ zFS!KqxuQrc8pJ=9JRQkix}3O5oTGvg3bC!(q}DnWN{WtCYnBSixhc<8d7fg4UKgoQ zP6{~!>L6kUrag*>D2Ph%Tht}N5UB?7LX@40aqU}ivIz?&2Zf*1?{5fV9sF+)*oQf%~0)c`%y z(>=SlgSQ7I2hopu~=nIO}!d$c}P2iIvNdo&4HK*2l)Sw6<64 zcy|+868HcA-m6zt-8~=yQg(ip2B_*fU%lhIzwdqTg~7pm0)LNA{no2rIAkS$gD26y zL7W`H=09X75>BF+XbwA;V^^&eyJ%a97ZbI~RKiUz=e?s=qL{LR`|05RqX{QjOud}? zVB)1j&Hi8lZzrpnVn%+m#jO11in->19Q76ZQ04==%pcZej-ZS_H+L=Xq^?{1YL8OW z)&7-%;=syaad2g*IAkT9OmTyoT|#~DNI2Q$RB@x5xi;eDu3N=Ta@2>TQ77;8zn&;= zcDFbK&Y&~oY;cC1jn0U($r*JvJ6oKsX9r%hid)~CaJD&jyq<9GaJRjdEZ%|h?arMz zzf;b)<9vs67tZf;x8weuIN#~qjq|(ZdpcjA1Pb1%;Cb+@@YUrQD5 z#+Cb=-MF&by&F#yaK6VG!}*w7!1+BmA9p5jJ|XA3aK6{MALsYGyKw(robPk?<9xr| zzYph=&H)<$Gf|f5dqd=a0(yIL;q)9>@9Paz26c zC!F`-{5_~|vbY!L2c0Kz{-m_%ew-h2p2GQ4?mpb#?<8jv6NlT$=T6RjjUY8)wR6+u zYPCFHb!VE#=gzqWzrMEWSKJG3VYR%lTt4d-Dt@6>Zxkvuzkx?xXRA(jgXU+6lV{!izUjrB?n#osY z@5j!+f5BqS^dE1fuqCnid$4OHK9N|o0GIabx!0^KR?AwlRC1W~1+8HQ93syScd}mnIKY>kH+o ze|S<(-)`%?91590`+U_tuOH_g36QseyJ7A&VmFRWe{#ZZ=T^P?s_Qi_w=;MVU@&2O zL&2l!O(}z~w==4SyI6t{KHIj2k|}G*_BQi=s^Zkj?bOQrf?rJ5-IZcywOn1P`}oRQ z?eaq1af>5f`C@6UR^ds>^%u&kZn1Bz=D3TMn(GvY;S4V?q9BV7y-TNnHojYzCjp;S^s-o${s9O5Itj z@_3+BI=@z~>N}{mQ(q{RJbp7$kFYWXkoRNr+0{8KmGXF{3!q4Gj$reNA~Ap>7$w`g z4e)%RTwQZttTfI|pDTO7w%N6Lzfoy`NYrc1r=|c+fCkW!0(u4nTS#8Huz-il3&6~R zTLabr(hL5oyHHuIxDF_NfmC~P=0?i97vJ|tP`usTkp%Z_*BEZhV-q5fvpk-6waUiD zBYdcUUA$FJ5*$C}q?|N<(@qAh%(m~)ZF&yWC*I)ZFHIHBx;59UEQBp2H78PBV3!o? zi-mGw1#cD_<+EdcVT^4?2aSdNU@|Xo|Kd5fRyZ0E*1{|(E0`aiRXDa%_LgyF?2r_u zOL=M+c-IrV4v+2QC#4wkS=OP)*9sRa)hgK}c@k=e$9x>fu=olC7uZ9=UlIp|l4)!L zy8$u*iEJQ|O(dF4C>ovgcHl9AyY^7stDLRW%GHuoX(H*}!+U$V+r^!LV+fN3)+#nX zgI&TJ07^9PS-0y0w20M}_2wpZCCs+0Mq)YRL4uscG10sEY3b*(0Em6 z02D|B_>n&s&Q>m9Py*l#JDFt8bo4soixN2m#7W)HrXbbLETm1ocE_og=AL#uvo~yS0L^IUf+}=$T05hvdmay|eoFzHt!82Uep4^ZOk{c@ zl~9ZWC@u1#aEK;w!wo)#4`p&`kJlEk#r_B|N3i*m*hNvyO1c$=l?_)S=C6>rCt?QOyqJ@TiE!hAzUk4`hSTocl@H+{{ z2zg!MceEjfu%HG1c5a$KCCsHAzx6=^7@x(5CHv&;aO(7B=!+}o- zC%)(G0b66e>X7d7?}_zEyv`Q#*QW@06_Rm)^&*wqpzArbHnC(~Bg;=LCE3!6)QopO zo?l-MrMTEiT!U_U-MX6Cnji(4`5M_G&^CS61C5@ryoYgq!}190s*!A8JL|a@y-LIV zEKZbAYBe8R7qTZ6UWO8~ejB~HkL5ndB9s2wyz1km&;|9$$9Z3nl*6l}VWRL4Ve=_E zCoB?$0UKmt-Hr{&LcSMSXxpCK&Qdd}RNc1qoYY217yM9UWThH1ybs_;6Pwfk-_H%% zxxB}#UDP6ti%0lq!H!c4XU@p2ibABFtdj$!$hcXj&&j`@fC8R#`<#CK=J88~yr0TC zo*8flii1?zaXjP>LFFGRiUN=Gjm`^H;~^1`I3J)YkE2cQCMf-)$`>~)6~4GdsqV$C zN@Xu@Q>uFL4#%z}9D6Y-s=8I&?rtyMsjlH_O4N0$xWnC1yvsaEmE9`tbaxi-jyy@l z-6|H`Lh&AKyUf#6;H~1l?!CqPB2QC|w~D*n-NilF#>~@H=dI$nJ6@cKJWZwED(-dn z7VpQlk9QVrQSGhbes_Oy(!5Xg-YOn&4-_B3_8@v!6nymNLpT=Y9>)(WwZ8a>Qs;}0 z;@)BBX&HsbaD2p>lHfwCjg4uGG3 zJO&CV`Q=kM0R2srpt4{ONz1X8`@9{X&7fnDx)3ZBpcbX@wtBYDyDINOL8AOLku0A^kLS$;3gZQIO0#pPQ3x&X=EFSs}SfdtfT6@?3Ss<{3PU6gMYGPD)xg%@ zoiB8j4CPYQ->=M9A%m*=!?-{_djZ{nDw961LBQ}Jn(CIBVpxBGI7h^%v{{AStQx{N zR0sju0t``MGtJvU$M>uR8y$R)A~E!aNKH%`w^aka#J`!Zy@@|qC16tF;J1fOhv=5J z2cn&?&va)+o(`_$v?%67$fa=M9p>(7?v8MGl)EYJgk2e))lNfJTU-4c?ueByu_09^v06%4pePdj1)|9`E{HrVh@A5VsF1*fXE&_ZY`*|8 z1EPr%${>JIJcC_=0!Qarqt0FrJT@edZJv`r@jaXs|r zH9n)hMV(yfg!>B6XUl;(2-*xk8S0Ko@1^0=l%lmr8QO_dJ6}O9ssAsy9{Zv_VxBDF zNX!}SJm{n{7`TvlIB0FlZ}*ue+nM@WV|A_3IbwtAiIVD&pJx~I-gFi40!F0qoQC;q5bcRaq?5KmmNe>|O32Q`0*K3)4_& zft%6NwWVd8=5V0?{)#`buTVBcb9fflY74^Pf`_C!tVZK9IhQfv6wa|BtZ%s%DmuRo5dSj}_s$XDa{#^b#A!zX^(T z(v(uPDHB=mI0jdNVzyNAOR!dY&!`%$+{|-jlO)r(c5ALMX^dTy0wm9pLAk zz~!%E69ZWyp9j#vlxHi@Ywqj@Jm8f9`YyG@sA<$B44WS2k-#6I3=Dh^6g9}6PVzNS z2i&ukNF`EbINcH_HHDAxJ`r|Q?>u-v+)+mG>1c(n{sP zMkm%foMBL6Q1KR{=oePNdZWWQSvc9C_XhB5#tsJa#l^}(1>?7`0G|oOvVwoEzE*Vz zND+(8qyOWJ$=iy`o)?Iu&@9c_PuAh6Awb1`pb>q=3t8b zKbKEt()rYY)!Y;v#sFZ1eUOpFXb4BpjN+>}(W992MjCJyy=HwBig!!w*2*Ns`xw&) za5pJ;aW0A~xj{mB00g-f>?EJIEYO#0P{ygI>OcGXps{FMMQ3CCG~iS;g3;J&#ukroM}o&Nw$y2m}Q?zPi$ zr=5j-L=!fkuI9tn6fm!WXeSl(@VAw;aFbiPtV->qB_9B|5QoKklgQ>R+p^zGB^4vf zfvyb5zvi}Re@8zPqbGzy(lg;^AJmWtN2L<}bKW)skGP^?jmkt4(n*rA)_@|gl!lAb z`WO_0*Q{fS4-G>iv94vn?_fT$66cQ!45pe(r*8^_qEactLrmbmJqVfY96{J;l`0qx zV<7)2YDL{Hc%(O2c&E@oU<^VePUF~{@kZ4 zVd9fuGrm@LPzaz3LO}hZuY}S9{QM%VK*@*}R9|gWRw_*~PDG*own)!JP7w&94MfED za0#ZJM#+Kq9>7=&Q}(9q973WOM{JE*1IP(#xKmtWU)@}4bo6eIMy#}57iq+^x zU9u?QpW}TvXhELjNb2)tlrt#SkTlGh)^fu8GKg&E36usIc<6e9@-K)X-n#;g+et0k z-q(dZZjkH4wQ(VPcxPJzX3b0swJdEwo$aL!rHw5e?uTo`xPm~y<-X5Y-X6I>T-tzG@kfT`Nl?|Mh;)@YxUvH9Ik()g>xwbM@t)VC$}_kB`5b;^2}$f^B=)B zW3GI*)z`|FHq}6g<#(^DFY20ai8&Ur}pKWEAHt9S6zLn(}T7iC* zo=3zB0vss_^p(dj;3q{aEtFwLxERHdfG<~}H5&_S1g;ROps18vi(sZ`h!^YLvO;jN zHeM`Wre*OAOPU0Wh7^1z@`^^dKps#`p$4ZrgC>HjKrl!Kp@tVo0|sruU_kOk4www; z1uAe^Ftej+lLhmd{y2kpn{61g!6-G=N8z&}4J&`R*BgALg-q7JdC?*j}=aq54onm)}B4;}Z zyIVV1b!+YHxw6lwz6diS*HBhXVLekkB?%FBG|{i@X}O@Y5x*4lhkUD;qmzQ7YjIG! zK9q)195RMjb$hFM(N|VqVVFm~~J&%F;E!sK11RL>~;R z@=r55_=5AvA+kSMRfet6BpF=}tdQo|lrTXAPk|MZMbdkmw}-{{lCo4lRUXU|Z=`TX zv?nrAJl7#?tMQD9dK^fj#c#n0g>6tgSO8z6<2=AHyLom>#7>0`$_5+3p@4G)(u~0~ z@iTM+DdL0H2TusL>@Cmbj?UmB*`Nxas{JzmC*pJTtWA&GQcxln>~ti4G*W!fvs z1+~2)+99B1h-z^jVkd>f=E_Z5jE*3)1T#hxNkV$4eSi}9c~EUJNeA>N(rq#OvE{Kf zTCQ)W_?lP2m5w$e5atp>Mx38#v)Pse043gV^*~HXPV+fzS!@D?S0M*UR0QSuErE*M zuyt&2>UA);V^D@)vk+ovIca6kL1*oQtOPSnBL#*w(@I`T3yZR^Wv)^iNP(eb;aO8^ z^ApmQndX0auDq;+yL6n9(qqSc23dmo1Rkpb&=4j!n1Nxt3&iL+3{An+7_o-<(3^1O zTp0n>yex!Tp(kv>IxaKz(NO*l;=|16jl;~0Y&Ur?dmPT^8B*pc3*R~e+I;A^*49DB zXcP)+<<|>i$}cyDddsa9w_JlhIT;%>!ZZPvK^GE_)*`3^Ew4h5`2Yli^R@$hM&eZj zNN(6|d-8#{btz)>qgd7MJH*(%ORL`DUkRWl1@~)nU!>}qp_Nq4!srb1YI6_x!kEOR zgYi*-4D=iI3UwTEhZ|aXAO~nC%eBkO3Qa$Q*cp_?L97dDh1n_gsiLg?5dcsR3MCaI zrZi?nTX2*E4JA#CyF_B|#`>DdvB8i30VlVEA5Mm5BjCuP zD=FXzoF~AM(=7yo#c(7oID!BVgy<%*DG@U1WFbN(&mR(;$u)oHZR3o;ws2F7nG0=) z?>4rS7wJ9=$lyCcmIrTwEb^6i8CSe22Dt-IygIJ^ehfqI?|~swon8n+lWR`|QQZ`k zo|Le(ith!UTaWdjSq=`s#YHH8?LITGJuzWGL$ehApIK{0q$c`ehyZ0OK!s5&ZcvTB zz95W*uj4P^74OHfraMaz43=onhbpv)n28@0`&)SyB#KI~P~OFg2LU_MU$_cUSHj|A z#D9UYV(@E`JR8w~%o^Hp0pS&ZC~ZnJF{>y^M_NS6kANGQ0_Gk#rM-+mK3At&4weIn z7NJ}#P@B=86B5(Mi{7G|{vpk6~DLTE|}J{iW+I0$J*Fc^XnF2Vm$Q{f+xZwHb$ zJPDL)7AsY@fT}v|?Tm?yxC)d+K$%uV0;eKQNw_>&IrSz5iZEhY#ok8b1pPHeUPitq z{>nm!jIAt+I?Q~bz*izw;T#+#nA}b+0<+S(J`qNW9xOn}pVVApat__mie2fbuYm>3 zXz44-aDw%>2jvJhFp;)zD4rox5HS6QJqcL}O>1XVi#o-nK6#y@`J2QM5fq1-o1<`K zo>(C02Y+M<+yo7jAsT2PD8SI6C2J8HyGDew0V1H9Q52xK9N>T;iIPO37(fRhAm23p zdkFAHga8T`tFW2^lV%(BRq@u-s;|g3p+edCA>^+>j)AMrU#m8v$oOs{(P=4p7DS4A z1Y-R7;RuLEz8NA1V68nUI;Tc4|AvkNx*K5YF(lRde(c(5X(WQ+aG^sny@YGS0AA%C z*f0V|TwG*|A>VDXiRT0Cpn$$mts_JbCJ+??X4I%iYa>Xb7>7ZQbTrB&=vy6o+mRDvEpWfJvN|2utOA`cCN&(7~&SNbfW~ zeGgOK38uVT`f-G^MNC*dq@PlQ*6$K#VesZ7U<{pBrmML28nL89 zt=JU-SEX}z;bAPui@b)O3Ngv(Xo?lHEGH?ql0Rr&fmznu)j}d5HOmvu{8X9# zkrP^DFeWGr4W?ZfKXarq5!{KoE({I@2HfvX?r>XF-SnNAFYz7m9n2`t8i0)vN&|}g z$~c=jlA(2!7SXolwXJFg#J2k*FaB@{xhce?G9ah9H3BRea^)jkLQYQ)0wUoU_)HIi za;4ejZTN@)D9O44%-b*%eRsm+9~+7Nqk`$cf|J#Nfk0e_M5#PnV(0%;Jnd!R|I@hf zHweHYrw@so9-CJa0dzkW5&?>d7!y4agKv}2f|y#(zs!h&2m(m#Ivga-8U%0GMZ~nA zqMVGmv<6GRa;NkP68Mgqh>@q{2x=Yi@r&<6qDWFSUwxU~f(=no@fi`k`8K=auiRQ! z=t!AAj=qq1$$oZ7+y%tsfof9zFGTudG%~!C!2>a|mFZUKE)97xgO9a))UgmH0Ou&e zinHLwS&5`aXfnVj8KKZp6-+je_`Zzt+(&?#&MO7fpW@M{xrWkygQPk;TNyP0fWJ>+j`USEM|$!qnpGQa zSXWgzM6#8UhH^?v&ihI$<$nbe2ENkD_+Pn-xsJ;@e;&WQ*Hr1&T4@H>UCCj}LAI4+ zQcEeDG3I#VTFS{>w~(yW_CAj@WP@?C*X>vAPuibM)DV09N&BkxNhIa`g!Kt#WkE(M zgz9ydh_dmGzUBa;))BmSC6AP{+f#`~7HMkVuz=VWlF=egds3yOZRNeMwis8PM-X3s zs~=~5*ZNxhGTAESeHHQSeTWE6EvLP&@~!i@kHPF~K5-J!4v5(Rv%=&t1YAg#xH1xz z8h0vg9&l*dZ-cdY) z8Xt_*cso+2V$7Cp|1mjAU}Wv92;Bo@@JjNk%`4sQN`>uGNU@XO{|ngNNEY*wUsO^G zL~a@iC!tLLjV)zjCuu37h7l8&$iIOwX?9q9fKl7CnAC~*7q8uC90w|5J1to_kSJmm z=~=x$!xskWC0FB(*&!Y$?nun4#Oh8Abn+xYUoxh4p8*O%XM|w~U(G0=I#WoAZ@q0* z+UZ5)|Im{Qf0*AO$rcyJe`JFW;w+IIh7`t`LK%A)StW;&TM|Lj_E2gB5l<;=3+EFd zujv409Kwkqfz^40RwL0~56Xby?ix{iDY1afFJMQ`$G}U@ML=2_fk2ELXMA8*1MqksmhU@de%N4hZX+Kj4Q^MRE%3@QXT7Xjcpjyqxe!??By zaic0BR)*nVXm-qa9Sa(G$4!5&cheyccRM^0&?B?lBmH88D2aTDNU#TQrCX4kY>J)n zmwNQb>$tYl^hkEy9tm{VcibcAdiO}A(U{f+vZ&{>#{-;isoCCV*K71AaAU7&bN~i1 z6K%lPjivV;H~eG08-B~6pe<4F02q$0*DpVS8;_cP34oz@zr1SzQC+`Zv`F8}3h@q_ z&p^_ixbQ=`F=d(`fJH3vgRW5w7$6=ATb{tmC839$L_sb|?TlI}#N zxh3-X$?%b`X0d6~tWd{MDIhJ6q_pQJCG6_G%!f-!=L6=eJ?N}?>Q+8Xiq-SOqa@w4 zDs;+}{8Hrm(N3T2_3*7!gEXXPHH?$U)Zvv#9eN^@dGb~&KxFM%fo%cp>gXnkxJI1e4&5|TM z-X(rAisluXAU-h%_c%kuPnIX46m;24M;P;;-I`6oO+++ zL!0=8;8O5y8mo(=J?{9$&9O2}9e$8+2;K|U3FHgB{bfG)SGfCMxcjTz-QeyE+=;{=?nG2Rgd6`OHvi9IhpZ|YvE#g% zpU4g7Mxpa;;mpF^DAKZTfUs=m`ty788}WNOm(AsJTXNfnH>B(lTp1q5?+BlXA7u~| zl$Yy6o8=y!K)E?=d6e-Of3fv<{PyLN>Yv9NE?|rO0cR3Nu=!`Oi>6X`Y^L)^mhvRl zOi>xjvs8o z9-nFcB&^VvF=L=sctNda5ajR@Qx+nBf!S*6fU;@nJU$|{zWBECm>-%yjD#I$*DAF` z2j&km@1{&ylM+m-w2n}C$@Ks(8dPSNE@78)P)RP|nXZ|QX*6gWo1|1Q8Z+|WFzXFx zb0VYLP;k~rUPp#EOhrnm$w{>AmG^@gPOC)<)I92rdPO7>Y5ZDkwX(3xOpb+e=kx0) z%LyLL(P#=s*GR)y0QO973r7j&NhHh_Nrx8NNF}w2~Jl;-AO7*t27QtUZU1lX; z10n>Oxv(k+R!)Gwp>rT~i@LZMg&%W384V70-<(QRIxLU{SA%r)s6EfLV9ZprlS zrPAx{2NC8{&28Q7R}Zb<0eRB_i)elz($S>U^Rq*x5*C%gv~Ny}DV2V}eB5g8?EZN4 z(HI`GzA0=n2KV7WtOiimnRO^c-aolN^_R;c|UV zP1*tYqj&M2mNXM9X+|Wrj*dKI>bn=_9U!L~B)&a;tlTK?B@L=FyDdIpib0bUa>y$( zd5Af1IN0)5fr)}JW|Q8ZN3-6zXKc4W7A$h1r?GN6j#~JKH)pVJ#?Vx7NhK5O!{8!W z3OZOs9oX)~jzJ?;2P#1N=YX)tQt8ti4I)T_S^vRnkd_o-d8s$KkVq^uG4iIHx7t~x z5~!?{tFaM6QQ-(F3*$B5iK34j9j=>#U+e{Ie&qC;&N!<&1~OEA?JU!~AaAc%zkm!< zk(8hj3aO`Rq1!PB4pveccuoW-??%qi8%Yrh+nH0RkDoaC!FFc$g%kMIQ^>uO?9}&h z7ncv(11iI4354Fc{KM>8LTn<9tU5b7yEFP|7p@uAiSKJe*#9?Mp#iI#z-R&?dFX@- zYM_}^bL0#h3a|$Y8WHL%E33+yi+;x3X<^J_0q~i--*$o<1?HF-nLr#2t+d)&|kbATZYx{$9Q$H5A0UB;jFYOw`uW@rO*cXH+lu zP*BA_dyU;J#4Ohw?f9;gAA?ao$ZZ;%qPu<)~$MNC3|QnmX)dI_Kz|)LHR(oi(&aZw5UG zniu_o>P?OVC~Fa^dA>@CnIaQc_?{m*mAklZhsm$%kH|#@CzhNDo@qU&q=vC35!;OC( zsVLlN9>KveH>>SG#3R2PsV%#e*KWJE*=a>Pn_H*! zdRd@0XhA?>C!485_w3)_Ozz)*vwHnw)Zte;>cwlfU9bLQE(jy6%y76iH=%B<6O7rx zwMpqM?;qhCHyPZ2g4@5=Q7vBUsurG6D03eUqA26S0OKUZd;+uqe@tUdE464`_E>#^ z%3O2DR5)*o7h?773XJ2Yrm^`m*tM)xI8vEC$g$yKeF!UfAQj)11Tvy9S17NYz%?AJ zYqinHRpb^`SE25vMAgld{{xU;TUjBCg3E@<)Yq@1@F%?#nxTcOYgnmbp>Xn;NR0kv zzu~UnteXc>cG5ZDs6uOo63k?S5yGoOOwfS|SUW{lo8;nIVMq;_ zNd2JBV{^v}A7tM8!h@3!9yoA(X3Vrw ze^@ood|S5`%u46$zlD!-`LKfr4qUu=aq{BBlXdUxfw|KMF0s82vLgC$KV%=|x+Qp* ztCLQ{8H*&x48y}Th=m=cEMU!n!l@UIK6`Syuxq!!tC?0m1BKa_X6KGSCufjMe;xn^ zJIy`#5xEr$no9p7!HSF~n(O^IZ-#V{ysbS9F-$E%3BHMk{I3CKl@>b4{B6vzM&k^Y zo7xssu=AB>{?I+go}Zq3>D2K;(>|P^LA2Ao{1y=`T;j3aFXE4mfcj^=cXPhNHvJZ> zLn{aQ3QVnAKm>Vx0bA_PFhVvfiq%S+Xy<1emm!;;bKOSslikuSoC1i>APCURhg>S= z>B2bp%{(%QUKT*YGQ|)l;~?}n$nA&M)++wF0+&%0Q6nq>CJmY335z}!^$g5T zYM5udaa1=lC^9@Eb^HQuq#&D$-ip?zJzlxxc4uZ0$GzHUe)g@~>|TPyqanFceR-*) z>F+CFD61Pc?SZfqQDASY@n1nx2V;%rm0NE7(3}gs8j)MGV%BK>)LV5zV2hUM97-3I zVF3;#C^F_Cj8b4Y(9B(oY3d%u-hdF^1VE_S=&uBT0Rp&!_@u&o9qK~|NqtK&`4{My zEwP^Bm9Czm@#zRQ|DfH09*e=EY;Kwv@WA$z*CFd_zXPuIxqVoWEvNhsIPZ7+k>quN z-UyyK@IAOgi#C=c!@BD5OKfm+?grc$#yeP~O`hUf>%nu$V7WGT1gm=F+z~u0tFXh% zvDrE6Y<0Gwlr7F3&URec>fGt4+yUTgdc?iGvIuARK;P*b~ zQRgxI?sgt`p1|)O=RM9r{Ej(GvP>G5WmAi!VQDs5APoz$-H(*8uVA5@L~$<`ZNtKB zTrLgE#&MxEEX{@mGWR)05yr^H(kv{~CJUt%4>-%RP?}YIz&!CR7EH5>51Ml>oW@1l z_QBtC3MG7>a~kIl%R+CnvNYYC^8&6s;yzM*G`NcEX)J^HBCbE?K304j+Y=av4>~W& zIJ^hPMdxKXKIl}PSDX*w$tRr^=T)bKqeIRar;HXq<;*(^_&w}^p5gatA*3}4L2Ulo z>40AP0eVn%rQpVlP&e}{A!8v|ju31TZH{TfjZu}wan*ELd^4~lyo)|4TE+BIIx&(@ z^%PDl)?TCB0!eZ3$73Lw66Usp*NDYC=ONcH)3?`pD;T-p~t$yrth{t6#ZLNZU$%VS4BnOfHD+H%TrNCbne#t}{L2|cz-DT>;0WLOBA$g!zBE|NAU`pFkvBO}8afM0 z2C@$)t_?FbSMr~-mdH^o-~2|4?~JqtvF~dQVZW({T*}vA6Ol++WK%}!OSX1|b&;p+ zrA>TJ%%iEY1t;CnvJZ(81F00WdXGh{#A_lJwP6#esyREJL?a z4soDI#xxOsRXGMr*2|cN9)$>_suGFFppb%f8qA7usxRSm2(4TR}u3UX^Ja0k3Cn&)5f4IT5DLHt;V{B;-2?^HQJTy1i=o z^B^^|_?N)g&xAEP6RAP$W3k$F4a!2fhHRiE2p^5hK_p{m2eJf{b30bHp>&W}VNgAU zCl4IPLQRW>6XmMu;n@4I)oFn^zPv~9{^3Ih@ciNKiaM~omY4>(WS~`mI>-zhUPVtJ zLQaFSu6eB5u-Ri(3P^8KYh|~>0ulfWETBlsKU#ZH)??Fo6H%kC3P~%x3vTJ+Ib>uM zbT8q#Se@8%!E;@ufc?a3qq{ap!doFM1trqM*;v*2xMeo+!l7eR+OYIqGhprbu zWP9^MuYoAu2Y;9>FjeYxUoGv9T!YM(=+S1OoEc3XO>=h)yLRSW1tLMMJ=zN@+l*S1 zzUb`n;wXGHrM1=A`fWbkDfEuYYLR%Yoz-Ms1^gHIQMO%WdOOS`i7ArG{VSgSYwo_v z-M``Pm$(xxN_JGG+VHk>>4{QljDqqhTuR&x}>u>?UgNGtmfmE9L| z3PyOBwgUyb61w+AoCd3UrIBU>(XAX8?Le=yIxZJ>kI?PnB5uei3`kSv#_OBCB7?G*+h%O8VDOHWC8=pi(fsy~ zftj-Q(VC*m-douLy{X4`1Dqh6i;EWKr3S8G-z!({~&D)o26c6%5?SWKGu zp9tsxy+mR|b94@)*7-n;p7FsXwrOns1K34?Iq8j1RU~jrdIAe`04-T|Xs@iiYAw+v zl`4M=YSeVS1{XgThFp+16GYx%sZzj$iPHgGBR&l}1Oc4tqKs4}6x1SOZe%p(ot9JVFeKyy(lz;w0@j`OA#V5M1IX>MN(EXPY_m>?+QABcB%k32#k{8P_FgHAW|&V zOf^?jS-bhr>2(%EjBq!Fsb|#J&P*~S46Fsyd(_0ipTy^G=om0oxRcHB+Lze~Y{06V zbz*_275wokw*_qe2eAWUCBWpL1(UZ$Vc&tpOt7{Wrq*IvBwT@SiK|y2DAHcedJmn) zjAidx2m>jsTbFFWlLVf_>6p*rPEsbCstJC{@_z+NzQlQYYO#C4I*H4`V$aOjtD-Jk z5Lc);K4xgZ508gdgLOz(A}AOrNxUCXRmxSQ2-O7#fd;A!&{{oVOd@(hSOevjS#t5{ z06Kz1ipL6Kz&Y4WJ8;?rTp%K)FvS22)1Fw_0CF9fA>7QUgMt&n5Q2IJF$#sF$`^o& z$)DpcmXS2s1Ovm{BaEl3Mzn3II74NF3dtDD2|g1tA7pT^qf%f;Dg*}o-qZK(M~DLo zLKuE@AbL(Q)SVGxqejF`yFXk2&sTxJf{T>IFjJPpspi6}g}uH1B-dp$ikPKj*3OFy zQ|*BgMqV%M?f+APJH`6M5M*k|-B=4RnfaET%zw*H*}z{qo@}h)NGy)N*pmqfW-wNY zK|2nx7ub>KR91oQybdSxx&d2wNtlRpUk5NF{U);gzpb7`%qZga6nuqUI)_Ow-mju! z-hbe(qeq6NFY#i~EB^<3g{Yp$U=2}W!kv$ZOEBhU=JQ!>)7Yd-LB!Arj{UlDU@m5W z6=3aSFw|dXgmkL>44C(O5eG|5RJ=h~d>_T01;|xOw(4At-glv;aw=G~M|f!kyj9;~ zl5w(Xy#@y~_?|_A!~5%XH9;h`$nk`#1p! zebj0wLJ04PkFx|tD&90Se<(*x{4@4>2z?<2fT=Twf%gn|9e9yHM4}6lw|e;70Y)GY zI?<$3ISI+IBw^%-BsqY87)cC*$ANACI|@Yh_|#IpQWMk*l)XL!a6+-=_Gdzv2oV z0+?ctr4NCe$?{(S2R8H0z+OR68(#gg)(0cPE>r=`1fe3XqjV#1K1ba#5F`Vx;<+ox zUV$iXm2FsTYxHe$QC?CnM6W%G&|||I-Cz4=BV1= zoN?qh^))(6lUgV89k`f3h8z57G%8=4)|6UGLp4Q6+R&j2$;b5sj76C)z?m_W<1wWV zQ*leCE->vv5avs!?G#KqCgkpuGGMt9i#T2|@1F^)eujKjl#vkBXXaqKn8WybN3f$! ziB>Yi`2Py8arC{re=SONgI^Gxv=SZDDrUl<$ zeGyPWpa}T{d<(`w5`{#BxpLYQfrRrPVFMqZFue+KMCtrJWJA+NA@(9~0Zx=pz}y?3 zfU!f=i)fh&G1St=divFbVGw!}7J~y3lFK@qdPT+);W9F6$I*@A)%1RwM;zi{5aj}A z8Fmb#jQLg$AdN=}#Al9B@vsN%5v$q9;S>2kMkg3NYKD%1X=jmIBT$<$Y_(S~buF?+ z@3@lKu{5d;nO$3owlT5Fq4RLcaSDfHZRK*PDOuMygW(>+QK}IfB^y|f)mPW#2%5~wL*FwxG=Xugh1ZG5-_EWe z>g${UiwvSBJyel2abhSm#oBtc0=qOJg=Y*m!Sq@)uA0%u=nDXX>O1Brf(tb+?_Y&@ zL63kAv98wZ%S!iz(6Z)9G&)z3<|kAHH~#X+K9fQu_dCv8}yk@JP?Mt|E*=Dua82QZ%{uL86JomVOq zBN~J{5)MLp%vb}c+oqrn<4bolma4Te-m{7Gc{s2EA7(PfZ=OJizVs7*-AjtrE9ntK ztAghmNRCE(pcptJgE)1ej=(ao03T~E14+4TG*KjQ@=J;18fYeH`w<9<(q{8ft}=b01lW|H}#!^1+K;blwg5|)4NN`+xT9PRd&2U6TrpR&4Z!FscTo<`*-p5%j^k?Oo>!8%l^j8u^u468d6!n2}LT^ zeh^4)?C^KAl4pa3%B}Jq2u^com8^{kwvRH$CzRY!u3}MRgr@3FL$nqI#t3|B&_T78 zBiA&KQic#1bWaE)`f=UBg9U^ED*Kr>>?uQVSO_Q>u|nKpwXhQjZo(OHKLVbS?}TEv zSRpXP@&#I7bVMSlXt0u!Ou;B48xc*AW~lfTc`Gaz=I_Hv%)=GZ&R)nC7PXGtw){ zXbYh&>{dlbFyab=Y0rQ9h9%$_SlgsQ9nHu=CY0LM4HVi+x({x|xHh0FtSpJRa@<|B zu7gUd`L?#oB?f^IC7gpm*u&oL{Q+L}%@>WINWJkE-Gk0)S$C+3n&&}Vt6;Vo|c^PI~`0s_y+hcO6}+Ca=N=zEUb( zFl|dVHxLM9imJM|eur}O0})6@|ACW|X^-4nr`khVAV$&jd!qCNyaUU@rg&RXT?v#W!M z6)aw?Ra#-#KSd5H?nPu1kOkMFJ!**3{sW;`h*0t;=TvRh8L)YzNGg>+Zt7$POx=hv zizMp7P3j};lJYDt<`9%30F~W*Kh~U65=DSJ2t-h0rbzb95y#L{G;eZ7&>_$dguwJ7 zmOu@B1Ku*O(f%N9T3G_+irw7b$=87-XDya~xg))uctQLjq9q=}9A` z_J&`t)>qfVX_Tfa{zInXc7W67UJN9HA$Xo3L3mRG(6ZIak$HafA8?jMk=TP?(_++6Vc#y2& zr%8E7ppn5;dmUMP5m1_RQXjLSg+X<{mUPk$&J@ag+S;PRE)&;aDWVA%?=W4eyC6(FTKSE%j z6C#n^Vly2lrmMV}c{7#H!zPf2Gh^V*0Er+-QH%i?i4e?p@D~$$KZ*-X*8rVNEQ5p@ z1QcVXZ8>5ZU3H{Z-=_W!3*&OqKaJ5BJ0p+b1%%FyJ>YFQ>3zUS141OkNHqT)q3(yE zBS0RWIRnopo;rUE*`y-;74`UZV6sQ22r9M9?>@(o*dGO;-?v4f`O0e`Z zhDIfW>hrR92ddlE24c9hfpFYNFrSMObnz>W@!5c-{`1p7DHlswi@hf*sAB}n+7s5T zVj<2$vKuKqD>!4TNiW8AlB$Qqd8#MvQ-Lv27ccOmK`yI@Fp~gwB``j5IXx)`W^?!9 zumf2{xg+&es1D8CNVZd_UV8Zb?F?;>_`m_Q-rLVz2hf1>Gc2}L`UmV)5_OpV>|8pC z`cgMztTCoPQ2R$$!aE?s?*5y1Vmw#ZBq-blj&m=O3F5|@%IsAt{TnmlhHIO9>sM_X zs@6H;tfm&Be(dH|J00hdZjbiHODk2zaU&Un4wPNMJLZo=&U1q#98I`bVUj?iF|5fVW}1{T z)0F=bXoBju7@&gdX_7I zv5C?86vrz2QBIY!}fI6~Xn1=%Eq36|Q4hCFEJOqzJ zel&IkU<88AS>~NUca=kdl6^AP1vO(#=Z5~#CLw0nlhkc8^@)8H`q@~3P(l~NEqNrh zNA;eG<`;*U9v*-K6L>^~W0nwb2pD4(6^(RcXh#aEWdx9J*ov@_>}gB2H;Lo+Kon3U z(^5Ml-Qs&cf%_fQQOM?R5W^_RBsL?2L4vSU+hQ>bqquKk7WM#3Ak@IF2WJKIt{`Fo z`S}sRbPeJQj#6-xU=0}D|01RTgAKC2E-u$lpLiY8olD!*D@`L z$XLVR0l7-|$7%y_!iABo?T~9&mB9Oy4w(8B)&=OJc#YDNm|4Yl`|v#GR5?jxexcK& z?>gKqSFjGjwE@hUvfu#OX*|dCA@4U^$)ydezs~1sLr#V> ztCof-nq&Qe#I=nS+OG`a?hv*OGN-H$lL>dwG3;cwB}NmtI*2O|v^HEB;x&{!TuV9D zm0`R;(i&!b2T0FGl)DMfooa2oGE)0R^wP5o+}f!2PX3OB)3=NKGH3F8|U;f1?Nevj}yGl=^Fn`O$ z5tvQVdOOq+TtUmhw?rOkV&Sy%QXotz(F&Rh)jP!wSe;lNNfHc&mO`(YZVV3xC1}zW z=Cmxq7#ON#^MCr z)Yp`*8Nwe8_nCRaD!gGm<=s!JdM9?x?4bj@{oVdyaYG`%0#D>Z+sb=S;faaO%6?B; zD=CxPd1D&)y#-utrzJ4b`wc#^gS#>ANac$g%(H6BPjSonwK}>vVzw6!q@0;D|EA6N z?w}_xn16=ZN(l4d`oKt6rL^zSl44oB2xl#R!0Or?lw2(aMGS`Tac+mKWH2$R%#)iT zxwSWT!LrKk$LY3ex(Cf|?IdbO_Yy^Q$NPR>;zSPLZRg|%s;SHv!lbHbC9uXvdBH6P zJWZW#(AXY`SITto44XO}c9D{5JJ}tD@joQH`xG8eY+>9nBafLdBZJjC=n%oIA^2)D z--arw7AAQUt1KtQIDphci1)yJq5)aegXV%f=N0i6_h3ALMv3H)shpjW^9+5zNjh0L z3x)S^N4~jT-sIP}rMOpYS9MUAif7bRLWE)k_3a?MSSe_gzsic76}#!x*>m+Z!~zR- zAVmRAM#VMPc{+>)dajODu#|{`ctCkkdEfjxCR&VZv8iwf1sorE~@^4(o2}>9FrZmb_PPa^0Q`<0NTobv$+i*G1&_;yX?qDwx{P^dMD>? zVefz;BQ?;c^|S`uQRhgYCkj%k{9%0gR78|jop!s5u_o$F1_QC$bVux%E{5 zpcr+RA@5?Tv5zC>>*KAQ|8dBy2+xt_$L?#TywBs>=UIwKk4Z|8QU=R~JPYY9<=uy8 z?vrOyymJ0NC#}MHfbf~}PaEk7k!n*Cj{2J7Uy3m7)UT`woSu0D-%K;oTRaP6S4QNS5*$ zZ!0;%BS1^<4jxgO!h&7LdBKQDk~CFiVm-qfGAUH-YQMx&u`P2(gNRM=ABguX)$f)qD_V06xU?&MB);k_#)Hl#_3%_1Lw(<{R>ID1(2Hb3?`evnP~FpT z@Fxe?!{!-g8Mp`kxWGE3Qi^Rev36L^kcC4WB3y}FA1s+F@ES5cva1eQY;RE1%gE$^ zjc_T3n_(Dk1ll^Dka>DBkmKXrgdJ`n$k{#?Z z&OQvHv$6_1=zIlE=gXKoXM3jhVCRhL3c{1vpklu;=F6w3SQPset9X`%%+3Z5DKqA@ z4ix!WwvWi1NK(2M`TEV~2(c>u;9Sh$OKwlm;QiPn923n$4jr`^H-loCY{@JFx(Aji zF37DG0Zo-N$wWfp5Cxd@tVn#$@Y9%l2-6=OkyLWk%p(H=(Z@u;hD8*??}|ysm%5Ko z-zj*&Szu|e?sM{QOoT17&sPxZgD3>n1gXo`B*8Lfo4E{SWBff0!shz{hfwxvj+_G* zCakv(0;`cuLK&QUL}St`NWfjJRACjCa5qR0yczX|9glU!)(O_?`t z6fzwK*Hwh!|2@LV*%9EvV$s&tib#AgWlHll`lal_$lHS$Mk1P{8EQ;Nu^g2O8J*}< zP$Y~QK?rm(5rYO?c>E;UF<;=H?u2S(rGoT5T!PZ9EUH#iWc`(S1?*m|?%+3=a~NTO z2XAZ1a`pX)kL^3XV!8Jwa7nL+8~SqFaMf%3moQWnc|p~>=aRTN(1m|Sl%}^efmM38 z2qSIgh|uh-*ebX&EZ&0`h{3e<`mmy6Vonx&I&ly@j~rcDU^G^{1>v&FTwV0mF&N$t z0}>J3CB9;b7eQV@v+tp90QhF`*Fjw!`|~~Yg{ylW2GMR37)lAJg)q!2;vNOR2*C`N zBJ>}b)DiQO<~0MlP@(@LkOg)%O~PamuP)T}#wmYL3ikdKcP;Kd$6Z|G_As*`@#{od z;$vcjwl0JW%gj3AQ$U;b9n@W+qRS`2Qs9%*fudk`odmZB0gtf9TUmnC`+wP-9-en^ z0&V&x+XO-Zr&|k6EKo*c7kp=wvhp>a{590HhC(8Z?kjs z#PL)ly!BNyPo~LfD-0JyuCLC(V%yGw%0mQdbOHw4_pDvg<(7N_E-!l~tc z%x*`ehf=7BXuEKL{)6p~j=e=V5wUDJlpic~4pEIU)M_cBGOVbHQ_5=rfe1-`(F;|u zYsNsEX+k2ffRpPg2NOb~{S?f9=DT&tWf+##Yo;`1ALTEnTojRYR*=1$4Bk9IQ!5PX zZp>4GFd6ZMP)Lh@hz_3cO=L3kCy}IpUSUa0U{D&|{%DYE5xE7{R+U7==o=Ope3H{Y zDE_a}nU61ut3Fx?nypd}QO>EW)ZE?O5(p&kcQ0S8drl~6Dt}by{6Xzmnb`^?dB|AN zFCnGbs?Y0_YJkEB(9rfAu`H7Ro7WHaAai)Y+*if|VlF1?V?LKafL5Z~Idxk1+IiEn zz9MeDB7XDg@e+)en+e83_>`k8}JG3#t=} zZg)60kfz0)w-ki+AnSS%h%!$2=+FkA$b1J)5WilkyNC_;Qml|T3HK)Hl607jI; zVMYp3Bl8~Q^zMNVx{ffeOoV}Pi69=ux9@r!(IWrUA{C^Vl&>>Zf{STUpZO_5#h|;_ z{}|BC2o2;p0P?6h(gXR-;|2v4^JqRht(Iw0DahlrjZ?T6$^nTo^Z?XjVYz%3L8)rC z3TOL5f`EGi%boN~oUS6Yk`__XkoKmTdgElc)RwH*=G{;EeLG;T$Uf?p35rO6! z?sxJmzPOjj&VZK0C>?*wY=^bm;JO=4DOa4rhL|vb7by)X(+Md6k$pCC!)k7hm`Wt9 zPBL!56hcX(mk81x625Pi+kKuDB27!!%Dxf5{dTJ1J%n%JljO-gKe^S&>(dks&9`SG z-@cPHZ=L75+>*wOq~Z_}6pw&r6Zj4>NOG6h&7X|)PB0NbsMAHbCAf+d;c%tmBm0u5 z%K_wYZWm@vMdqcC8*>7jj(i(affvE-u-=$tNMJ6*--N#{Q@5kgXAS(PRe3c#<{vf7$FbADZ>HJa`#_24!_S`T%vAg zb-^zhj)TR{VMErTjr#7ykSxG#b`#bKE>Fb&5(hkC�BnaK*+#%}08z-r)Uvet$D| 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 diff --git a/Jobs_Collections/venv/Lib/python3.8/site-packages/bs4/__pycache__/formatter.cpython-38.pyc b/Jobs_Collections/venv/Lib/python3.8/site-packages/bs4/__pycache__/formatter.cpython-38.pyc deleted file mode 100644 index 7a48bdc663ec0a15197a93307d7966fa8160a688..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 5479 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 DbJfy+ diff --git a/Jobs_Collections/venv/Lib/python3.8/site-packages/bs4/__pycache__/testing.cpython-38.pyc b/Jobs_Collections/venv/Lib/python3.8/site-packages/bs4/__pycache__/testing.cpython-38.pyc deleted file mode 100644 index 6e9c9ce6d19ceadcdafdfc2e47064473b0f86901..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 43251 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 diff --git a/Jobs_Collections/venv/Lib/python3.8/site-packages/bs4/builder/__init__.py b/Jobs_Collections/venv/Lib/python3.8/site-packages/bs4/builder/__init__.py deleted file mode 100644 index 86759db..0000000 --- a/Jobs_Collections/venv/Lib/python3.8/site-packages/bs4/builder/__init__.py +++ /dev/null @@ -1,520 +0,0 @@ -# Use of this source code is governed by the MIT license. -__license__ = "MIT" - -from collections import defaultdict -import itertools -import sys -from bs4.element import ( - CharsetMetaAttributeValue, - ContentMetaAttributeValue, - Stylesheet, - Script, - TemplateString, - nonwhitespace_re -) - -__all__ = [ - 'HTMLTreeBuilder', - 'SAXTreeBuilder', - 'TreeBuilder', - 'TreeBuilderRegistry', - ] - -# Some useful features for a TreeBuilder to have. -FAST = 'fast' -PERMISSIVE = 'permissive' -STRICT = 'strict' -XML = 'xml' -HTML = 'html' -HTML_5 = 'html5' - - -class TreeBuilderRegistry(object): - """A way of looking up TreeBuilder subclasses by their name or by desired - features. - """ - - def __init__(self): - self.builders_for_feature = defaultdict(list) - self.builders = [] - - def register(self, treebuilder_class): - """Register a treebuilder based on its advertised features. - - :param treebuilder_class: A subclass of Treebuilder. its .features - attribute should list its features. - """ - for feature in treebuilder_class.features: - self.builders_for_feature[feature].insert(0, treebuilder_class) - self.builders.insert(0, treebuilder_class) - - def lookup(self, *features): - """Look up a TreeBuilder subclass with the desired features. - - :param features: A list of features to look for. If none are - provided, the most recently registered TreeBuilder subclass - will be used. - :return: A TreeBuilder subclass, or None if there's no - registered subclass with all the requested features. - """ - if len(self.builders) == 0: - # There are no builders at all. - return None - - if len(features) == 0: - # They didn't ask for any features. Give them the most - # recently registered builder. - return self.builders[0] - - # Go down the list of features in order, and eliminate any builders - # that don't match every feature. - features = list(features) - features.reverse() - candidates = None - candidate_set = None - while len(features) > 0: - feature = features.pop() - we_have_the_feature = self.builders_for_feature.get(feature, []) - if len(we_have_the_feature) > 0: - if candidates is None: - candidates = we_have_the_feature - candidate_set = set(candidates) - else: - # Eliminate any candidates that don't have this feature. - candidate_set = candidate_set.intersection( - set(we_have_the_feature)) - - # The only valid candidates are the ones in candidate_set. - # Go through the original list of candidates and pick the first one - # that's in candidate_set. - if candidate_set is None: - return None - for candidate in candidates: - if candidate in candidate_set: - return candidate - return None - -# The BeautifulSoup class will take feature lists from developers and use them -# to look up builders in this registry. -builder_registry = TreeBuilderRegistry() - -class TreeBuilder(object): - """Turn a textual document into a Beautiful Soup object tree.""" - - NAME = "[Unknown tree builder]" - ALTERNATE_NAMES = [] - features = [] - - is_xml = False - picklable = False - empty_element_tags = None # A tag will be considered an empty-element - # tag when and only when it has no contents. - - # A value for these tag/attribute combinations is a space- or - # comma-separated list of CDATA, rather than a single CDATA. - DEFAULT_CDATA_LIST_ATTRIBUTES = {} - - # Whitespace should be preserved inside these tags. - DEFAULT_PRESERVE_WHITESPACE_TAGS = set() - - # The textual contents of tags with these names should be - # instantiated with some class other than NavigableString. - DEFAULT_STRING_CONTAINERS = {} - - USE_DEFAULT = object() - - # Most parsers don't keep track of line numbers. - TRACKS_LINE_NUMBERS = False - - def __init__(self, multi_valued_attributes=USE_DEFAULT, - preserve_whitespace_tags=USE_DEFAULT, - store_line_numbers=USE_DEFAULT, - string_containers=USE_DEFAULT, - ): - """Constructor. - - :param multi_valued_attributes: If this is set to None, the - TreeBuilder will not turn any values for attributes like - 'class' into lists. Setting this to a dictionary will - customize this behavior; look at DEFAULT_CDATA_LIST_ATTRIBUTES - for an example. - - Internally, these are called "CDATA list attributes", but that - probably doesn't make sense to an end-user, so the argument name - is `multi_valued_attributes`. - - :param preserve_whitespace_tags: A list of tags to treat - the way

 tags are treated in HTML. Tags in this list
-         are immune from pretty-printing; their contents will always be
-         output as-is.
-
-        :param string_containers: A dictionary mapping tag names to
-        the classes that should be instantiated to contain the textual
-        contents of those tags. The default is to use NavigableString
-        for every tag, no matter what the name. You can override the
-        default by changing DEFAULT_STRING_CONTAINERS.
-
-        :param store_line_numbers: If the parser keeps track of the
-         line numbers and positions of the original markup, that
-         information will, by default, be stored in each corresponding
-         `Tag` object. You can turn this off by passing
-         store_line_numbers=False. If the parser you're using doesn't 
-         keep track of this information, then setting store_line_numbers=True
-         will do nothing.
-        """
-        self.soup = None
-        if multi_valued_attributes is self.USE_DEFAULT:
-            multi_valued_attributes = self.DEFAULT_CDATA_LIST_ATTRIBUTES
-        self.cdata_list_attributes = multi_valued_attributes
-        if preserve_whitespace_tags is self.USE_DEFAULT:
-            preserve_whitespace_tags = self.DEFAULT_PRESERVE_WHITESPACE_TAGS
-        self.preserve_whitespace_tags = preserve_whitespace_tags
-        if store_line_numbers == self.USE_DEFAULT:
-            store_line_numbers = self.TRACKS_LINE_NUMBERS
-        self.store_line_numbers = store_line_numbers 
-        if string_containers == self.USE_DEFAULT:
-            string_containers = self.DEFAULT_STRING_CONTAINERS
-        self.string_containers = string_containers
-        
-    def initialize_soup(self, soup):
-        """The BeautifulSoup object has been initialized and is now
-        being associated with the TreeBuilder.
-
-        :param soup: A BeautifulSoup object.
-        """
-        self.soup = soup
-        
-    def reset(self):
-        """Do any work necessary to reset the underlying parser
-        for a new document.
-
-        By default, this does nothing.
-        """
-        pass
-
-    def can_be_empty_element(self, tag_name):
-        """Might a tag with this name be an empty-element tag?
-
-        The final markup may or may not actually present this tag as
-        self-closing.
-
-        For instance: an HTMLBuilder does not consider a 

tag to be - an empty-element tag (it's not in - HTMLBuilder.empty_element_tags). This means an empty

tag - will be presented as "

", not "

" or "

". - - The default implementation has no opinion about which tags are - empty-element tags, so a tag will be presented as an - empty-element tag if and only if it has no children. - "" will become "", and "bar" will - be left alone. - - :param tag_name: The name of a markup tag. - """ - if self.empty_element_tags is None: - return True - return tag_name in self.empty_element_tags - - def feed(self, markup): - """Run some incoming markup through some parsing process, - populating the `BeautifulSoup` object in self.soup. - - This method is not implemented in TreeBuilder; it must be - implemented in subclasses. - - :return: None. - """ - raise NotImplementedError() - - def prepare_markup(self, markup, user_specified_encoding=None, - document_declared_encoding=None, exclude_encodings=None): - """Run any preliminary steps necessary to make incoming markup - acceptable to the parser. - - :param markup: Some markup -- probably a bytestring. - :param user_specified_encoding: The user asked to try this encoding. - :param document_declared_encoding: The markup itself claims to be - in this encoding. - :param exclude_encodings: The user asked _not_ to try any of - these encodings. - - :yield: A series of 4-tuples: - (markup, encoding, declared encoding, - has undergone character replacement) - - Each 4-tuple represents a strategy for converting the - document to Unicode and parsing it. Each strategy will be tried - in turn. - - By default, the only strategy is to parse the markup - as-is. See `LXMLTreeBuilderForXML` and - `HTMLParserTreeBuilder` for implementations that take into - account the quirks of particular parsers. - """ - yield markup, None, None, False - - def test_fragment_to_document(self, fragment): - """Wrap an HTML fragment to make it look like a document. - - Different parsers do this differently. For instance, lxml - introduces an empty tag, and html5lib - doesn't. Abstracting this away lets us write simple tests - which run HTML fragments through the parser and compare the - results against other HTML fragments. - - This method should not be used outside of tests. - - :param fragment: A string -- fragment of HTML. - :return: A string -- a full HTML document. - """ - return fragment - - def set_up_substitutions(self, tag): - """Set up any substitutions that will need to be performed on - a `Tag` when it's output as a string. - - By default, this does nothing. See `HTMLTreeBuilder` for a - case where this is used. - - :param tag: A `Tag` - :return: Whether or not a substitution was performed. - """ - return False - - def _replace_cdata_list_attribute_values(self, tag_name, attrs): - """When an attribute value is associated with a tag that can - have multiple values for that attribute, convert the string - value to a list of strings. - - Basically, replaces class="foo bar" with class=["foo", "bar"] - - NOTE: This method modifies its input in place. - - :param tag_name: The name of a tag. - :param attrs: A dictionary containing the tag's attributes. - Any appropriate attribute values will be modified in place. - """ - if not attrs: - return attrs - if self.cdata_list_attributes: - universal = self.cdata_list_attributes.get('*', []) - tag_specific = self.cdata_list_attributes.get( - tag_name.lower(), None) - for attr in list(attrs.keys()): - if attr in universal or (tag_specific and attr in tag_specific): - # We have a "class"-type attribute whose string - # value is a whitespace-separated list of - # values. Split it into a list. - value = attrs[attr] - if isinstance(value, str): - values = nonwhitespace_re.findall(value) - else: - # html5lib sometimes calls setAttributes twice - # for the same tag when rearranging the parse - # tree. On the second call the attribute value - # here is already a list. If this happens, - # leave the value alone rather than trying to - # split it again. - values = value - attrs[attr] = values - return attrs - -class SAXTreeBuilder(TreeBuilder): - """A Beautiful Soup treebuilder that listens for SAX events. - - This is not currently used for anything, but it demonstrates - how a simple TreeBuilder would work. - """ - - def feed(self, markup): - raise NotImplementedError() - - def close(self): - pass - - def startElement(self, name, attrs): - attrs = dict((key[1], value) for key, value in list(attrs.items())) - #print("Start %s, %r" % (name, attrs)) - self.soup.handle_starttag(name, attrs) - - def endElement(self, name): - #print("End %s" % name) - self.soup.handle_endtag(name) - - def startElementNS(self, nsTuple, nodeName, attrs): - # Throw away (ns, nodeName) for now. - self.startElement(nodeName, attrs) - - def endElementNS(self, nsTuple, nodeName): - # Throw away (ns, nodeName) for now. - self.endElement(nodeName) - #handler.endElementNS((ns, node.nodeName), node.nodeName) - - def startPrefixMapping(self, prefix, nodeValue): - # Ignore the prefix for now. - pass - - def endPrefixMapping(self, prefix): - # Ignore the prefix for now. - # handler.endPrefixMapping(prefix) - pass - - def characters(self, content): - self.soup.handle_data(content) - - def startDocument(self): - pass - - def endDocument(self): - pass - - -class HTMLTreeBuilder(TreeBuilder): - """This TreeBuilder knows facts about HTML. - - Such as which tags are empty-element tags. - """ - - empty_element_tags = set([ - # These are from HTML5. - 'area', 'base', 'br', 'col', 'embed', 'hr', 'img', 'input', 'keygen', 'link', 'menuitem', 'meta', 'param', 'source', 'track', 'wbr', - - # These are from earlier versions of HTML and are removed in HTML5. - 'basefont', 'bgsound', 'command', 'frame', 'image', 'isindex', 'nextid', 'spacer' - ]) - - # The HTML standard defines these as block-level elements. Beautiful - # Soup does not treat these elements differently from other elements, - # but it may do so eventually, and this information is available if - # you need to use it. - block_elements = set(["address", "article", "aside", "blockquote", "canvas", "dd", "div", "dl", "dt", "fieldset", "figcaption", "figure", "footer", "form", "h1", "h2", "h3", "h4", "h5", "h6", "header", "hr", "li", "main", "nav", "noscript", "ol", "output", "p", "pre", "section", "table", "tfoot", "ul", "video"]) - - # The HTML standard defines an unusual content model for these tags. - # We represent this by using a string class other than NavigableString - # inside these tags. - # - # I made this list by going through the HTML spec - # (https://html.spec.whatwg.org/#metadata-content) and looking for - # "metadata content" elements that can contain strings. - # - # TODO: Arguably

as a -# string. -# -# XXX This code can be removed once most Python 3 users are on 3.2.3. -if major == 3 and minor == 2 and not CONSTRUCTOR_TAKES_STRICT: - import re - attrfind_tolerant = re.compile( - r'\s*((?<=[\'"\s])[^\s/>][^\s/=>]*)(\s*=+\s*' - r'(\'[^\']*\'|"[^"]*"|(?![\'"])[^>\s]*))?') - HTMLParserTreeBuilder.attrfind_tolerant = attrfind_tolerant - - locatestarttagend = re.compile(r""" - <[a-zA-Z][-.a-zA-Z0-9:_]* # tag name - (?:\s+ # whitespace before attribute name - (?:[a-zA-Z_][-.:a-zA-Z0-9_]* # attribute name - (?:\s*=\s* # value indicator - (?:'[^']*' # LITA-enclosed value - |\"[^\"]*\" # LIT-enclosed value - |[^'\">\s]+ # bare value - ) - )? - ) - )* - \s* # trailing whitespace -""", re.VERBOSE) - BeautifulSoupHTMLParser.locatestarttagend = locatestarttagend - - from html.parser import tagfind, attrfind - - def parse_starttag(self, i): - self.__starttag_text = None - endpos = self.check_for_whole_start_tag(i) - if endpos < 0: - return endpos - rawdata = self.rawdata - self.__starttag_text = rawdata[i:endpos] - - # Now parse the data between i+1 and j into a tag and attrs - attrs = [] - match = tagfind.match(rawdata, i+1) - assert match, 'unexpected call to parse_starttag()' - k = match.end() - self.lasttag = tag = rawdata[i+1:k].lower() - while k < endpos: - if self.strict: - m = attrfind.match(rawdata, k) - else: - m = attrfind_tolerant.match(rawdata, k) - if not m: - break - attrname, rest, attrvalue = m.group(1, 2, 3) - if not rest: - attrvalue = None - elif attrvalue[:1] == '\'' == attrvalue[-1:] or \ - attrvalue[:1] == '"' == attrvalue[-1:]: - attrvalue = attrvalue[1:-1] - if attrvalue: - attrvalue = self.unescape(attrvalue) - attrs.append((attrname.lower(), attrvalue)) - k = m.end() - - end = rawdata[k:endpos].strip() - if end not in (">", "/>"): - lineno, offset = self.getpos() - if "\n" in self.__starttag_text: - lineno = lineno + self.__starttag_text.count("\n") - offset = len(self.__starttag_text) \ - - self.__starttag_text.rfind("\n") - else: - offset = offset + len(self.__starttag_text) - if self.strict: - self.error("junk characters in start tag: %r" - % (rawdata[k:endpos][:20],)) - self.handle_data(rawdata[i:endpos]) - return endpos - if end.endswith('/>'): - # XHTML-style empty tag: - self.handle_startendtag(tag, attrs) - else: - self.handle_starttag(tag, attrs) - if tag in self.CDATA_CONTENT_ELEMENTS: - self.set_cdata_mode(tag) - return endpos - - def set_cdata_mode(self, elem): - self.cdata_elem = elem.lower() - self.interesting = re.compile(r'' % self.cdata_elem, re.I) - - BeautifulSoupHTMLParser.parse_starttag = parse_starttag - BeautifulSoupHTMLParser.set_cdata_mode = set_cdata_mode - - CONSTRUCTOR_TAKES_STRICT = True diff --git a/Jobs_Collections/venv/Lib/python3.8/site-packages/bs4/builder/_lxml.py b/Jobs_Collections/venv/Lib/python3.8/site-packages/bs4/builder/_lxml.py deleted file mode 100644 index 432a2c8..0000000 --- a/Jobs_Collections/venv/Lib/python3.8/site-packages/bs4/builder/_lxml.py +++ /dev/null @@ -1,332 +0,0 @@ -# Use of this source code is governed by the MIT license. -__license__ = "MIT" - -__all__ = [ - 'LXMLTreeBuilderForXML', - 'LXMLTreeBuilder', - ] - -try: - from collections.abc import Callable # Python 3.6 -except ImportError as e: - from collections import Callable - -from io import BytesIO -from io import StringIO -from lxml import etree -from bs4.element import ( - Comment, - Doctype, - NamespacedAttribute, - ProcessingInstruction, - XMLProcessingInstruction, -) -from bs4.builder import ( - FAST, - HTML, - HTMLTreeBuilder, - PERMISSIVE, - ParserRejectedMarkup, - TreeBuilder, - XML) -from bs4.dammit import EncodingDetector - -LXML = 'lxml' - -def _invert(d): - "Invert a dictionary." - return dict((v,k) for k, v in list(d.items())) - -class LXMLTreeBuilderForXML(TreeBuilder): - DEFAULT_PARSER_CLASS = etree.XMLParser - - is_xml = True - processing_instruction_class = XMLProcessingInstruction - - NAME = "lxml-xml" - ALTERNATE_NAMES = ["xml"] - - # Well, it's permissive by XML parser standards. - features = [NAME, LXML, XML, FAST, PERMISSIVE] - - CHUNK_SIZE = 512 - - # This namespace mapping is specified in the XML Namespace - # standard. - DEFAULT_NSMAPS = dict(xml='http://www.w3.org/XML/1998/namespace') - - DEFAULT_NSMAPS_INVERTED = _invert(DEFAULT_NSMAPS) - - # NOTE: If we parsed Element objects and looked at .sourceline, - # we'd be able to see the line numbers from the original document. - # But instead we build an XMLParser or HTMLParser object to serve - # as the target of parse messages, and those messages don't include - # line numbers. - # See: https://bugs.launchpad.net/lxml/+bug/1846906 - - def initialize_soup(self, soup): - """Let the BeautifulSoup object know about the standard namespace - mapping. - - :param soup: A `BeautifulSoup`. - """ - super(LXMLTreeBuilderForXML, self).initialize_soup(soup) - self._register_namespaces(self.DEFAULT_NSMAPS) - - def _register_namespaces(self, mapping): - """Let the BeautifulSoup object know about namespaces encountered - while parsing the document. - - This might be useful later on when creating CSS selectors. - - :param mapping: A dictionary mapping namespace prefixes to URIs. - """ - for key, value in list(mapping.items()): - if key and key not in self.soup._namespaces: - # Let the BeautifulSoup object know about a new namespace. - # If there are multiple namespaces defined with the same - # prefix, the first one in the document takes precedence. - self.soup._namespaces[key] = value - - def default_parser(self, encoding): - """Find the default parser for the given encoding. - - :param encoding: A string. - :return: Either a parser object or a class, which - will be instantiated with default arguments. - """ - if self._default_parser is not None: - return self._default_parser - return etree.XMLParser( - target=self, strip_cdata=False, recover=True, encoding=encoding) - - def parser_for(self, encoding): - """Instantiate an appropriate parser for the given encoding. - - :param encoding: A string. - :return: A parser object such as an `etree.XMLParser`. - """ - # Use the default parser. - parser = self.default_parser(encoding) - - if isinstance(parser, Callable): - # Instantiate the parser with default arguments - parser = parser( - target=self, strip_cdata=False, recover=True, encoding=encoding - ) - return parser - - def __init__(self, parser=None, empty_element_tags=None, **kwargs): - # TODO: Issue a warning if parser is present but not a - # callable, since that means there's no way to create new - # parsers for different encodings. - self._default_parser = parser - if empty_element_tags is not None: - self.empty_element_tags = set(empty_element_tags) - self.soup = None - self.nsmaps = [self.DEFAULT_NSMAPS_INVERTED] - super(LXMLTreeBuilderForXML, self).__init__(**kwargs) - - def _getNsTag(self, tag): - # Split the namespace URL out of a fully-qualified lxml tag - # name. Copied from lxml's src/lxml/sax.py. - if tag[0] == '{': - return tuple(tag[1:].split('}', 1)) - else: - return (None, tag) - - def prepare_markup(self, markup, user_specified_encoding=None, - exclude_encodings=None, - document_declared_encoding=None): - """Run any preliminary steps necessary to make incoming markup - acceptable to the parser. - - lxml really wants to get a bytestring and convert it to - Unicode itself. So instead of using UnicodeDammit to convert - the bytestring to Unicode using different encodings, this - implementation uses EncodingDetector to iterate over the - encodings, and tell lxml to try to parse the document as each - one in turn. - - :param markup: Some markup -- hopefully a bytestring. - :param user_specified_encoding: The user asked to try this encoding. - :param document_declared_encoding: The markup itself claims to be - in this encoding. - :param exclude_encodings: The user asked _not_ to try any of - these encodings. - - :yield: A series of 4-tuples: - (markup, encoding, declared encoding, - has undergone character replacement) - - Each 4-tuple represents a strategy for converting the - document to Unicode and parsing it. Each strategy will be tried - in turn. - """ - is_html = not self.is_xml - if is_html: - self.processing_instruction_class = ProcessingInstruction - else: - self.processing_instruction_class = XMLProcessingInstruction - - if isinstance(markup, str): - # We were given Unicode. Maybe lxml can parse Unicode on - # this system? - yield markup, None, document_declared_encoding, False - - if isinstance(markup, str): - # No, apparently not. Convert the Unicode to UTF-8 and - # tell lxml to parse it as UTF-8. - yield (markup.encode("utf8"), "utf8", - document_declared_encoding, False) - - try_encodings = [user_specified_encoding, document_declared_encoding] - detector = EncodingDetector( - markup, try_encodings, is_html, exclude_encodings) - for encoding in detector.encodings: - yield (detector.markup, encoding, document_declared_encoding, False) - - def feed(self, markup): - if isinstance(markup, bytes): - markup = BytesIO(markup) - elif isinstance(markup, str): - markup = StringIO(markup) - - # Call feed() at least once, even if the markup is empty, - # or the parser won't be initialized. - data = markup.read(self.CHUNK_SIZE) - try: - self.parser = self.parser_for(self.soup.original_encoding) - self.parser.feed(data) - while len(data) != 0: - # Now call feed() on the rest of the data, chunk by chunk. - data = markup.read(self.CHUNK_SIZE) - if len(data) != 0: - self.parser.feed(data) - self.parser.close() - except (UnicodeDecodeError, LookupError, etree.ParserError) as e: - raise ParserRejectedMarkup(e) - - def close(self): - self.nsmaps = [self.DEFAULT_NSMAPS_INVERTED] - - def start(self, name, attrs, nsmap={}): - # Make sure attrs is a mutable dict--lxml may send an immutable dictproxy. - attrs = dict(attrs) - nsprefix = None - # Invert each namespace map as it comes in. - if len(nsmap) == 0 and len(self.nsmaps) > 1: - # There are no new namespaces for this tag, but - # non-default namespaces are in play, so we need a - # separate tag stack to know when they end. - self.nsmaps.append(None) - elif len(nsmap) > 0: - # A new namespace mapping has come into play. - - # First, Let the BeautifulSoup object know about it. - self._register_namespaces(nsmap) - - # Then, add it to our running list of inverted namespace - # mappings. - self.nsmaps.append(_invert(nsmap)) - - # Also treat the namespace mapping as a set of attributes on the - # tag, so we can recreate it later. - attrs = attrs.copy() - for prefix, namespace in list(nsmap.items()): - attribute = NamespacedAttribute( - "xmlns", prefix, "http://www.w3.org/2000/xmlns/") - attrs[attribute] = namespace - - # Namespaces are in play. Find any attributes that came in - # from lxml with namespaces attached to their names, and - # turn then into NamespacedAttribute objects. - new_attrs = {} - for attr, value in list(attrs.items()): - namespace, attr = self._getNsTag(attr) - if namespace is None: - new_attrs[attr] = value - else: - nsprefix = self._prefix_for_namespace(namespace) - attr = NamespacedAttribute(nsprefix, attr, namespace) - new_attrs[attr] = value - attrs = new_attrs - - namespace, name = self._getNsTag(name) - nsprefix = self._prefix_for_namespace(namespace) - self.soup.handle_starttag(name, namespace, nsprefix, attrs) - - def _prefix_for_namespace(self, namespace): - """Find the currently active prefix for the given namespace.""" - if namespace is None: - return None - for inverted_nsmap in reversed(self.nsmaps): - if inverted_nsmap is not None and namespace in inverted_nsmap: - return inverted_nsmap[namespace] - return None - - def end(self, name): - self.soup.endData() - completed_tag = self.soup.tagStack[-1] - namespace, name = self._getNsTag(name) - nsprefix = None - if namespace is not None: - for inverted_nsmap in reversed(self.nsmaps): - if inverted_nsmap is not None and namespace in inverted_nsmap: - nsprefix = inverted_nsmap[namespace] - break - self.soup.handle_endtag(name, nsprefix) - if len(self.nsmaps) > 1: - # This tag, or one of its parents, introduced a namespace - # mapping, so pop it off the stack. - self.nsmaps.pop() - - def pi(self, target, data): - self.soup.endData() - self.soup.handle_data(target + ' ' + data) - self.soup.endData(self.processing_instruction_class) - - def data(self, content): - self.soup.handle_data(content) - - def doctype(self, name, pubid, system): - self.soup.endData() - doctype = Doctype.for_name_and_ids(name, pubid, system) - self.soup.object_was_parsed(doctype) - - def comment(self, content): - "Handle comments as Comment objects." - self.soup.endData() - self.soup.handle_data(content) - self.soup.endData(Comment) - - def test_fragment_to_document(self, fragment): - """See `TreeBuilder`.""" - return '\n%s' % fragment - - -class LXMLTreeBuilder(HTMLTreeBuilder, LXMLTreeBuilderForXML): - - NAME = LXML - ALTERNATE_NAMES = ["lxml-html"] - - features = ALTERNATE_NAMES + [NAME, HTML, FAST, PERMISSIVE] - is_xml = False - processing_instruction_class = ProcessingInstruction - - def default_parser(self, encoding): - return etree.HTMLParser - - def feed(self, markup): - encoding = self.soup.original_encoding - try: - self.parser = self.parser_for(encoding) - self.parser.feed(markup) - self.parser.close() - except (UnicodeDecodeError, LookupError, etree.ParserError) as e: - raise ParserRejectedMarkup(e) - - - def test_fragment_to_document(self, fragment): - """See `TreeBuilder`.""" - return '%s' % fragment diff --git a/Jobs_Collections/venv/Lib/python3.8/site-packages/bs4/dammit.py b/Jobs_Collections/venv/Lib/python3.8/site-packages/bs4/dammit.py deleted file mode 100644 index ee3708f..0000000 --- a/Jobs_Collections/venv/Lib/python3.8/site-packages/bs4/dammit.py +++ /dev/null @@ -1,939 +0,0 @@ -# -*- coding: utf-8 -*- -"""Beautiful Soup bonus library: Unicode, Dammit - -This library converts a bytestream to Unicode through any means -necessary. It is heavily based on code from Mark Pilgrim's Universal -Feed Parser. It works best on XML and HTML, but it does not rewrite the -XML or HTML to reflect a new encoding; that's the tree builder's job. -""" -# Use of this source code is governed by the MIT license. -__license__ = "MIT" - -import codecs -from html.entities import codepoint2name -import re -import logging -import string - -# Import a library to autodetect character encodings. -chardet_type = None -try: - # First try the fast C implementation. - # PyPI package: cchardet - import cchardet - def chardet_dammit(s): - if isinstance(s, str): - return None - return cchardet.detect(s)['encoding'] -except ImportError: - try: - # Fall back to the pure Python implementation - # Debian package: python-chardet - # PyPI package: chardet - import chardet - def chardet_dammit(s): - if isinstance(s, str): - return None - return chardet.detect(s)['encoding'] - #import chardet.constants - #chardet.constants._debug = 1 - except ImportError: - # No chardet available. - def chardet_dammit(s): - return None - -# Available from http://cjkpython.i18n.org/. -# -# TODO: This doesn't work anymore and the closest thing, iconv_codecs, -# is GPL-licensed. Check whether this is still necessary. -try: - import iconv_codec -except ImportError: - pass - -# Build bytestring and Unicode versions of regular expressions for finding -# a declared encoding inside an XML or HTML document. -xml_encoding = '^\\s*<\\?.*encoding=[\'"](.*?)[\'"].*\\?>' -html_meta = '<\\s*meta[^>]+charset\\s*=\\s*["\']?([^>]*?)[ /;\'">]' -encoding_res = dict() -encoding_res[bytes] = { - 'html' : re.compile(html_meta.encode("ascii"), re.I), - 'xml' : re.compile(xml_encoding.encode("ascii"), re.I), -} -encoding_res[str] = { - 'html' : re.compile(html_meta, re.I), - 'xml' : re.compile(xml_encoding, re.I) -} - -class EntitySubstitution(object): - """The ability to substitute XML or HTML entities for certain characters.""" - - def _populate_class_variables(): - lookup = {} - reverse_lookup = {} - characters_for_re = [] - - # &apos is an XHTML entity and an HTML 5, but not an HTML 4 - # entity. We don't want to use it, but we want to recognize it on the way in. - # - # TODO: Ideally we would be able to recognize all HTML 5 named - # entities, but that's a little tricky. - extra = [(39, 'apos')] - for codepoint, name in list(codepoint2name.items()) + extra: - character = chr(codepoint) - if codepoint not in (34, 39): - # There's no point in turning the quotation mark into - # " or the single quote into ', unless it - # happens within an attribute value, which is handled - # elsewhere. - characters_for_re.append(character) - lookup[character] = name - # But we do want to recognize those entities on the way in and - # convert them to Unicode characters. - reverse_lookup[name] = character - re_definition = "[%s]" % "".join(characters_for_re) - return lookup, reverse_lookup, re.compile(re_definition) - (CHARACTER_TO_HTML_ENTITY, HTML_ENTITY_TO_CHARACTER, - CHARACTER_TO_HTML_ENTITY_RE) = _populate_class_variables() - - CHARACTER_TO_XML_ENTITY = { - "'": "apos", - '"': "quot", - "&": "amp", - "<": "lt", - ">": "gt", - } - - BARE_AMPERSAND_OR_BRACKET = re.compile("([<>]|" - "&(?!#\\d+;|#x[0-9a-fA-F]+;|\\w+;)" - ")") - - AMPERSAND_OR_BRACKET = re.compile("([<>&])") - - @classmethod - def _substitute_html_entity(cls, matchobj): - """Used with a regular expression to substitute the - appropriate HTML entity for a special character.""" - entity = cls.CHARACTER_TO_HTML_ENTITY.get(matchobj.group(0)) - return "&%s;" % entity - - @classmethod - def _substitute_xml_entity(cls, matchobj): - """Used with a regular expression to substitute the - appropriate XML entity for a special character.""" - entity = cls.CHARACTER_TO_XML_ENTITY[matchobj.group(0)] - return "&%s;" % entity - - @classmethod - def quoted_attribute_value(self, value): - """Make a value into a quoted XML attribute, possibly escaping it. - - Most strings will be quoted using double quotes. - - Bob's Bar -> "Bob's Bar" - - If a string contains double quotes, it will be quoted using - single quotes. - - Welcome to "my bar" -> 'Welcome to "my bar"' - - If a string contains both single and double quotes, the - double quotes will be escaped, and the string will be quoted - using double quotes. - - Welcome to "Bob's Bar" -> "Welcome to "Bob's bar" - """ - quote_with = '"' - if '"' in value: - if "'" in value: - # The string contains both single and double - # quotes. Turn the double quotes into - # entities. We quote the double quotes rather than - # the single quotes because the entity name is - # """ whether this is HTML or XML. If we - # quoted the single quotes, we'd have to decide - # between ' and &squot;. - replace_with = """ - value = value.replace('"', replace_with) - else: - # There are double quotes but no single quotes. - # We can use single quotes to quote the attribute. - quote_with = "'" - return quote_with + value + quote_with - - @classmethod - def substitute_xml(cls, value, make_quoted_attribute=False): - """Substitute XML entities for special XML characters. - - :param value: A string to be substituted. The less-than sign - will become <, the greater-than sign will become >, - and any ampersands will become &. If you want ampersands - that appear to be part of an entity definition to be left - alone, use substitute_xml_containing_entities() instead. - - :param make_quoted_attribute: If True, then the string will be - quoted, as befits an attribute value. - """ - # Escape angle brackets and ampersands. - value = cls.AMPERSAND_OR_BRACKET.sub( - cls._substitute_xml_entity, value) - - if make_quoted_attribute: - value = cls.quoted_attribute_value(value) - return value - - @classmethod - def substitute_xml_containing_entities( - cls, value, make_quoted_attribute=False): - """Substitute XML entities for special XML characters. - - :param value: A string to be substituted. The less-than sign will - become <, the greater-than sign will become >, and any - ampersands that are not part of an entity defition will - become &. - - :param make_quoted_attribute: If True, then the string will be - quoted, as befits an attribute value. - """ - # Escape angle brackets, and ampersands that aren't part of - # entities. - value = cls.BARE_AMPERSAND_OR_BRACKET.sub( - cls._substitute_xml_entity, value) - - if make_quoted_attribute: - value = cls.quoted_attribute_value(value) - return value - - @classmethod - def substitute_html(cls, s): - """Replace certain Unicode characters with named HTML entities. - - This differs from data.encode(encoding, 'xmlcharrefreplace') - in that the goal is to make the result more readable (to those - with ASCII displays) rather than to recover from - errors. There's absolutely nothing wrong with a UTF-8 string - containg a LATIN SMALL LETTER E WITH ACUTE, but replacing that - character with "é" will make it more readable to some - people. - - :param s: A Unicode string. - """ - return cls.CHARACTER_TO_HTML_ENTITY_RE.sub( - cls._substitute_html_entity, s) - - -class EncodingDetector: - """Suggests a number of possible encodings for a bytestring. - - Order of precedence: - - 1. Encodings you specifically tell EncodingDetector to try first - (the override_encodings argument to the constructor). - - 2. An encoding declared within the bytestring itself, either in an - XML declaration (if the bytestring is to be interpreted as an XML - document), or in a tag (if the bytestring is to be - interpreted as an HTML document.) - - 3. An encoding detected through textual analysis by chardet, - cchardet, or a similar external library. - - 4. UTF-8. - - 5. Windows-1252. - """ - def __init__(self, markup, override_encodings=None, is_html=False, - exclude_encodings=None): - """Constructor. - - :param markup: Some markup in an unknown encoding. - :param override_encodings: These encodings will be tried first. - :param is_html: If True, this markup is considered to be HTML. Otherwise - it's assumed to be XML. - :param exclude_encodings: These encodings will not be tried, even - if they otherwise would be. - """ - self.override_encodings = override_encodings or [] - exclude_encodings = exclude_encodings or [] - self.exclude_encodings = set([x.lower() for x in exclude_encodings]) - self.chardet_encoding = None - self.is_html = is_html - self.declared_encoding = None - - # First order of business: strip a byte-order mark. - self.markup, self.sniffed_encoding = self.strip_byte_order_mark(markup) - - def _usable(self, encoding, tried): - """Should we even bother to try this encoding? - - :param encoding: Name of an encoding. - :param tried: Encodings that have already been tried. This will be modified - as a side effect. - """ - if encoding is not None: - encoding = encoding.lower() - if encoding in self.exclude_encodings: - return False - if encoding not in tried: - tried.add(encoding) - return True - return False - - @property - def encodings(self): - """Yield a number of encodings that might work for this markup. - - :yield: A sequence of strings. - """ - tried = set() - for e in self.override_encodings: - if self._usable(e, tried): - yield e - - # Did the document originally start with a byte-order mark - # that indicated its encoding? - if self._usable(self.sniffed_encoding, tried): - yield self.sniffed_encoding - - # Look within the document for an XML or HTML encoding - # declaration. - if self.declared_encoding is None: - self.declared_encoding = self.find_declared_encoding( - self.markup, self.is_html) - if self._usable(self.declared_encoding, tried): - yield self.declared_encoding - - # Use third-party character set detection to guess at the - # encoding. - if self.chardet_encoding is None: - self.chardet_encoding = chardet_dammit(self.markup) - if self._usable(self.chardet_encoding, tried): - yield self.chardet_encoding - - # As a last-ditch effort, try utf-8 and windows-1252. - for e in ('utf-8', 'windows-1252'): - if self._usable(e, tried): - yield e - - @classmethod - def strip_byte_order_mark(cls, data): - """If a byte-order mark is present, strip it and return the encoding it implies. - - :param data: Some markup. - :return: A 2-tuple (modified data, implied encoding) - """ - encoding = None - if isinstance(data, str): - # Unicode data cannot have a byte-order mark. - return data, encoding - if (len(data) >= 4) and (data[:2] == b'\xfe\xff') \ - and (data[2:4] != '\x00\x00'): - encoding = 'utf-16be' - data = data[2:] - elif (len(data) >= 4) and (data[:2] == b'\xff\xfe') \ - and (data[2:4] != '\x00\x00'): - encoding = 'utf-16le' - data = data[2:] - elif data[:3] == b'\xef\xbb\xbf': - encoding = 'utf-8' - data = data[3:] - elif data[:4] == b'\x00\x00\xfe\xff': - encoding = 'utf-32be' - data = data[4:] - elif data[:4] == b'\xff\xfe\x00\x00': - encoding = 'utf-32le' - data = data[4:] - return data, encoding - - @classmethod - def find_declared_encoding(cls, markup, is_html=False, search_entire_document=False): - """Given a document, tries to find its declared encoding. - - An XML encoding is declared at the beginning of the document. - - An HTML encoding is declared in a tag, hopefully near the - beginning of the document. - - :param markup: Some markup. - :param is_html: If True, this markup is considered to be HTML. Otherwise - it's assumed to be XML. - :param search_entire_document: Since an encoding is supposed to declared near the beginning - of the document, most of the time it's only necessary to search a few kilobytes of data. - Set this to True to force this method to search the entire document. - """ - if search_entire_document: - xml_endpos = html_endpos = len(markup) - else: - xml_endpos = 1024 - html_endpos = max(2048, int(len(markup) * 0.05)) - - if isinstance(markup, bytes): - res = encoding_res[bytes] - else: - res = encoding_res[str] - - xml_re = res['xml'] - html_re = res['html'] - declared_encoding = None - declared_encoding_match = xml_re.search(markup, endpos=xml_endpos) - if not declared_encoding_match and is_html: - declared_encoding_match = html_re.search(markup, endpos=html_endpos) - if declared_encoding_match is not None: - declared_encoding = declared_encoding_match.groups()[0] - if declared_encoding: - if isinstance(declared_encoding, bytes): - declared_encoding = declared_encoding.decode('ascii', 'replace') - return declared_encoding.lower() - return None - -class UnicodeDammit: - """A class for detecting the encoding of a *ML document and - converting it to a Unicode string. If the source encoding is - windows-1252, can replace MS smart quotes with their HTML or XML - equivalents.""" - - # This dictionary maps commonly seen values for "charset" in HTML - # meta tags to the corresponding Python codec names. It only covers - # values that aren't in Python's aliases and can't be determined - # by the heuristics in find_codec. - CHARSET_ALIASES = {"macintosh": "mac-roman", - "x-sjis": "shift-jis"} - - ENCODINGS_WITH_SMART_QUOTES = [ - "windows-1252", - "iso-8859-1", - "iso-8859-2", - ] - - def __init__(self, markup, override_encodings=[], - smart_quotes_to=None, is_html=False, exclude_encodings=[]): - """Constructor. - - :param markup: A bytestring representing markup in an unknown encoding. - :param override_encodings: These encodings will be tried first, - before any sniffing code is run. - - :param smart_quotes_to: By default, Microsoft smart quotes will, like all other characters, be converted - to Unicode characters. Setting this to 'ascii' will convert them to ASCII quotes instead. - Setting it to 'xml' will convert them to XML entity references, and setting it to 'html' - will convert them to HTML entity references. - :param is_html: If True, this markup is considered to be HTML. Otherwise - it's assumed to be XML. - :param exclude_encodings: These encodings will not be considered, even - if the sniffing code thinks they might make sense. - """ - self.smart_quotes_to = smart_quotes_to - self.tried_encodings = [] - self.contains_replacement_characters = False - self.is_html = is_html - self.log = logging.getLogger(__name__) - self.detector = EncodingDetector( - markup, override_encodings, is_html, exclude_encodings) - - # Short-circuit if the data is in Unicode to begin with. - if isinstance(markup, str) or markup == '': - self.markup = markup - self.unicode_markup = str(markup) - self.original_encoding = None - return - - # The encoding detector may have stripped a byte-order mark. - # Use the stripped markup from this point on. - self.markup = self.detector.markup - - u = None - for encoding in self.detector.encodings: - markup = self.detector.markup - u = self._convert_from(encoding) - if u is not None: - break - - if not u: - # None of the encodings worked. As an absolute last resort, - # try them again with character replacement. - - for encoding in self.detector.encodings: - if encoding != "ascii": - u = self._convert_from(encoding, "replace") - if u is not None: - self.log.warning( - "Some characters could not be decoded, and were " - "replaced with REPLACEMENT CHARACTER." - ) - self.contains_replacement_characters = True - break - - # If none of that worked, we could at this point force it to - # ASCII, but that would destroy so much data that I think - # giving up is better. - self.unicode_markup = u - if not u: - self.original_encoding = None - - def _sub_ms_char(self, match): - """Changes a MS smart quote character to an XML or HTML - entity, or an ASCII character.""" - orig = match.group(1) - if self.smart_quotes_to == 'ascii': - sub = self.MS_CHARS_TO_ASCII.get(orig).encode() - else: - sub = self.MS_CHARS.get(orig) - if type(sub) == tuple: - if self.smart_quotes_to == 'xml': - sub = '&#x'.encode() + sub[1].encode() + ';'.encode() - else: - sub = '&'.encode() + sub[0].encode() + ';'.encode() - else: - sub = sub.encode() - return sub - - def _convert_from(self, proposed, errors="strict"): - """Attempt to convert the markup to the proposed encoding. - - :param proposed: The name of a character encoding. - """ - proposed = self.find_codec(proposed) - if not proposed or (proposed, errors) in self.tried_encodings: - return None - self.tried_encodings.append((proposed, errors)) - markup = self.markup - # Convert smart quotes to HTML if coming from an encoding - # that might have them. - if (self.smart_quotes_to is not None - and proposed in self.ENCODINGS_WITH_SMART_QUOTES): - smart_quotes_re = b"([\x80-\x9f])" - smart_quotes_compiled = re.compile(smart_quotes_re) - markup = smart_quotes_compiled.sub(self._sub_ms_char, markup) - - try: - #print("Trying to convert document to %s (errors=%s)" % ( - # proposed, errors)) - u = self._to_unicode(markup, proposed, errors) - self.markup = u - self.original_encoding = proposed - except Exception as e: - #print("That didn't work!") - #print(e) - return None - #print("Correct encoding: %s" % proposed) - return self.markup - - def _to_unicode(self, data, encoding, errors="strict"): - """Given a string and its encoding, decodes the string into Unicode. - - :param encoding: The name of an encoding. - """ - return str(data, encoding, errors) - - @property - def declared_html_encoding(self): - """If the markup is an HTML document, returns the encoding declared _within_ - the document. - """ - if not self.is_html: - return None - return self.detector.declared_encoding - - def find_codec(self, charset): - """Convert the name of a character set to a codec name. - - :param charset: The name of a character set. - :return: The name of a codec. - """ - value = (self._codec(self.CHARSET_ALIASES.get(charset, charset)) - or (charset and self._codec(charset.replace("-", ""))) - or (charset and self._codec(charset.replace("-", "_"))) - or (charset and charset.lower()) - or charset - ) - if value: - return value.lower() - return None - - def _codec(self, charset): - if not charset: - return charset - codec = None - try: - codecs.lookup(charset) - codec = charset - except (LookupError, ValueError): - pass - return codec - - - # A partial mapping of ISO-Latin-1 to HTML entities/XML numeric entities. - MS_CHARS = {b'\x80': ('euro', '20AC'), - b'\x81': ' ', - b'\x82': ('sbquo', '201A'), - b'\x83': ('fnof', '192'), - b'\x84': ('bdquo', '201E'), - b'\x85': ('hellip', '2026'), - b'\x86': ('dagger', '2020'), - b'\x87': ('Dagger', '2021'), - b'\x88': ('circ', '2C6'), - b'\x89': ('permil', '2030'), - b'\x8A': ('Scaron', '160'), - b'\x8B': ('lsaquo', '2039'), - b'\x8C': ('OElig', '152'), - b'\x8D': '?', - b'\x8E': ('#x17D', '17D'), - b'\x8F': '?', - b'\x90': '?', - b'\x91': ('lsquo', '2018'), - b'\x92': ('rsquo', '2019'), - b'\x93': ('ldquo', '201C'), - b'\x94': ('rdquo', '201D'), - b'\x95': ('bull', '2022'), - b'\x96': ('ndash', '2013'), - b'\x97': ('mdash', '2014'), - b'\x98': ('tilde', '2DC'), - b'\x99': ('trade', '2122'), - b'\x9a': ('scaron', '161'), - b'\x9b': ('rsaquo', '203A'), - b'\x9c': ('oelig', '153'), - b'\x9d': '?', - b'\x9e': ('#x17E', '17E'), - b'\x9f': ('Yuml', ''),} - - # A parochial partial mapping of ISO-Latin-1 to ASCII. Contains - # horrors like stripping diacritical marks to turn รก into a, but also - # contains non-horrors like turning โ€œ into ". - MS_CHARS_TO_ASCII = { - b'\x80' : 'EUR', - b'\x81' : ' ', - b'\x82' : ',', - b'\x83' : 'f', - b'\x84' : ',,', - b'\x85' : '...', - b'\x86' : '+', - b'\x87' : '++', - b'\x88' : '^', - b'\x89' : '%', - b'\x8a' : 'S', - b'\x8b' : '<', - b'\x8c' : 'OE', - b'\x8d' : '?', - b'\x8e' : 'Z', - b'\x8f' : '?', - b'\x90' : '?', - b'\x91' : "'", - b'\x92' : "'", - b'\x93' : '"', - b'\x94' : '"', - b'\x95' : '*', - b'\x96' : '-', - b'\x97' : '--', - b'\x98' : '~', - b'\x99' : '(TM)', - b'\x9a' : 's', - b'\x9b' : '>', - b'\x9c' : 'oe', - b'\x9d' : '?', - b'\x9e' : 'z', - b'\x9f' : 'Y', - b'\xa0' : ' ', - b'\xa1' : '!', - b'\xa2' : 'c', - b'\xa3' : 'GBP', - b'\xa4' : '$', #This approximation is especially parochial--this is the - #generic currency symbol. - b'\xa5' : 'YEN', - b'\xa6' : '|', - b'\xa7' : 'S', - b'\xa8' : '..', - b'\xa9' : '', - b'\xaa' : '(th)', - b'\xab' : '<<', - b'\xac' : '!', - b'\xad' : ' ', - b'\xae' : '(R)', - b'\xaf' : '-', - b'\xb0' : 'o', - b'\xb1' : '+-', - b'\xb2' : '2', - b'\xb3' : '3', - b'\xb4' : ("'", 'acute'), - b'\xb5' : 'u', - b'\xb6' : 'P', - b'\xb7' : '*', - b'\xb8' : ',', - b'\xb9' : '1', - b'\xba' : '(th)', - b'\xbb' : '>>', - b'\xbc' : '1/4', - b'\xbd' : '1/2', - b'\xbe' : '3/4', - b'\xbf' : '?', - b'\xc0' : 'A', - b'\xc1' : 'A', - b'\xc2' : 'A', - b'\xc3' : 'A', - b'\xc4' : 'A', - b'\xc5' : 'A', - b'\xc6' : 'AE', - b'\xc7' : 'C', - b'\xc8' : 'E', - b'\xc9' : 'E', - b'\xca' : 'E', - b'\xcb' : 'E', - b'\xcc' : 'I', - b'\xcd' : 'I', - b'\xce' : 'I', - b'\xcf' : 'I', - b'\xd0' : 'D', - b'\xd1' : 'N', - b'\xd2' : 'O', - b'\xd3' : 'O', - b'\xd4' : 'O', - b'\xd5' : 'O', - b'\xd6' : 'O', - b'\xd7' : '*', - b'\xd8' : 'O', - b'\xd9' : 'U', - b'\xda' : 'U', - b'\xdb' : 'U', - b'\xdc' : 'U', - b'\xdd' : 'Y', - b'\xde' : 'b', - b'\xdf' : 'B', - b'\xe0' : 'a', - b'\xe1' : 'a', - b'\xe2' : 'a', - b'\xe3' : 'a', - b'\xe4' : 'a', - b'\xe5' : 'a', - b'\xe6' : 'ae', - b'\xe7' : 'c', - b'\xe8' : 'e', - b'\xe9' : 'e', - b'\xea' : 'e', - b'\xeb' : 'e', - b'\xec' : 'i', - b'\xed' : 'i', - b'\xee' : 'i', - b'\xef' : 'i', - b'\xf0' : 'o', - b'\xf1' : 'n', - b'\xf2' : 'o', - b'\xf3' : 'o', - b'\xf4' : 'o', - b'\xf5' : 'o', - b'\xf6' : 'o', - b'\xf7' : '/', - b'\xf8' : 'o', - b'\xf9' : 'u', - b'\xfa' : 'u', - b'\xfb' : 'u', - b'\xfc' : 'u', - b'\xfd' : 'y', - b'\xfe' : 'b', - b'\xff' : 'y', - } - - # A map used when removing rogue Windows-1252/ISO-8859-1 - # characters in otherwise UTF-8 documents. - # - # Note that \x81, \x8d, \x8f, \x90, and \x9d are undefined in - # Windows-1252. - WINDOWS_1252_TO_UTF8 = { - 0x80 : b'\xe2\x82\xac', # โ‚ฌ - 0x82 : b'\xe2\x80\x9a', # โ€š - 0x83 : b'\xc6\x92', # ฦ’ - 0x84 : b'\xe2\x80\x9e', # โ€ž - 0x85 : b'\xe2\x80\xa6', # โ€ฆ - 0x86 : b'\xe2\x80\xa0', # โ€  - 0x87 : b'\xe2\x80\xa1', # โ€ก - 0x88 : b'\xcb\x86', # ห† - 0x89 : b'\xe2\x80\xb0', # โ€ฐ - 0x8a : b'\xc5\xa0', # ล  - 0x8b : b'\xe2\x80\xb9', # โ€น - 0x8c : b'\xc5\x92', # ล’ - 0x8e : b'\xc5\xbd', # ลฝ - 0x91 : b'\xe2\x80\x98', # โ€˜ - 0x92 : b'\xe2\x80\x99', # โ€™ - 0x93 : b'\xe2\x80\x9c', # โ€œ - 0x94 : b'\xe2\x80\x9d', # โ€ - 0x95 : b'\xe2\x80\xa2', # โ€ข - 0x96 : b'\xe2\x80\x93', # โ€“ - 0x97 : b'\xe2\x80\x94', # โ€” - 0x98 : b'\xcb\x9c', # หœ - 0x99 : b'\xe2\x84\xa2', # โ„ข - 0x9a : b'\xc5\xa1', # ลก - 0x9b : b'\xe2\x80\xba', # โ€บ - 0x9c : b'\xc5\x93', # ล“ - 0x9e : b'\xc5\xbe', # ลพ - 0x9f : b'\xc5\xb8', # ลธ - 0xa0 : b'\xc2\xa0', # ย  - 0xa1 : b'\xc2\xa1', # ยก - 0xa2 : b'\xc2\xa2', # ยข - 0xa3 : b'\xc2\xa3', # ยฃ - 0xa4 : b'\xc2\xa4', # ยค - 0xa5 : b'\xc2\xa5', # ยฅ - 0xa6 : b'\xc2\xa6', # ยฆ - 0xa7 : b'\xc2\xa7', # ยง - 0xa8 : b'\xc2\xa8', # ยจ - 0xa9 : b'\xc2\xa9', # ยฉ - 0xaa : b'\xc2\xaa', # ยช - 0xab : b'\xc2\xab', # ยซ - 0xac : b'\xc2\xac', # ยฌ - 0xad : b'\xc2\xad', # ยญ - 0xae : b'\xc2\xae', # ยฎ - 0xaf : b'\xc2\xaf', # ยฏ - 0xb0 : b'\xc2\xb0', # ยฐ - 0xb1 : b'\xc2\xb1', # ยฑ - 0xb2 : b'\xc2\xb2', # ยฒ - 0xb3 : b'\xc2\xb3', # ยณ - 0xb4 : b'\xc2\xb4', # ยด - 0xb5 : b'\xc2\xb5', # ยต - 0xb6 : b'\xc2\xb6', # ยถ - 0xb7 : b'\xc2\xb7', # ยท - 0xb8 : b'\xc2\xb8', # ยธ - 0xb9 : b'\xc2\xb9', # ยน - 0xba : b'\xc2\xba', # ยบ - 0xbb : b'\xc2\xbb', # ยป - 0xbc : b'\xc2\xbc', # ยผ - 0xbd : b'\xc2\xbd', # ยฝ - 0xbe : b'\xc2\xbe', # ยพ - 0xbf : b'\xc2\xbf', # ยฟ - 0xc0 : b'\xc3\x80', # ร€ - 0xc1 : b'\xc3\x81', # ร - 0xc2 : b'\xc3\x82', # ร‚ - 0xc3 : b'\xc3\x83', # รƒ - 0xc4 : b'\xc3\x84', # ร„ - 0xc5 : b'\xc3\x85', # ร… - 0xc6 : b'\xc3\x86', # ร† - 0xc7 : b'\xc3\x87', # ร‡ - 0xc8 : b'\xc3\x88', # รˆ - 0xc9 : b'\xc3\x89', # ร‰ - 0xca : b'\xc3\x8a', # รŠ - 0xcb : b'\xc3\x8b', # ร‹ - 0xcc : b'\xc3\x8c', # รŒ - 0xcd : b'\xc3\x8d', # ร - 0xce : b'\xc3\x8e', # รŽ - 0xcf : b'\xc3\x8f', # ร - 0xd0 : b'\xc3\x90', # ร - 0xd1 : b'\xc3\x91', # ร‘ - 0xd2 : b'\xc3\x92', # ร’ - 0xd3 : b'\xc3\x93', # ร“ - 0xd4 : b'\xc3\x94', # ร” - 0xd5 : b'\xc3\x95', # ร• - 0xd6 : b'\xc3\x96', # ร– - 0xd7 : b'\xc3\x97', # ร— - 0xd8 : b'\xc3\x98', # ร˜ - 0xd9 : b'\xc3\x99', # ร™ - 0xda : b'\xc3\x9a', # รš - 0xdb : b'\xc3\x9b', # ร› - 0xdc : b'\xc3\x9c', # รœ - 0xdd : b'\xc3\x9d', # ร - 0xde : b'\xc3\x9e', # รž - 0xdf : b'\xc3\x9f', # รŸ - 0xe0 : b'\xc3\xa0', # ร  - 0xe1 : b'\xa1', # รก - 0xe2 : b'\xc3\xa2', # รข - 0xe3 : b'\xc3\xa3', # รฃ - 0xe4 : b'\xc3\xa4', # รค - 0xe5 : b'\xc3\xa5', # รฅ - 0xe6 : b'\xc3\xa6', # รฆ - 0xe7 : b'\xc3\xa7', # รง - 0xe8 : b'\xc3\xa8', # รจ - 0xe9 : b'\xc3\xa9', # รฉ - 0xea : b'\xc3\xaa', # รช - 0xeb : b'\xc3\xab', # รซ - 0xec : b'\xc3\xac', # รฌ - 0xed : b'\xc3\xad', # รญ - 0xee : b'\xc3\xae', # รฎ - 0xef : b'\xc3\xaf', # รฏ - 0xf0 : b'\xc3\xb0', # รฐ - 0xf1 : b'\xc3\xb1', # รฑ - 0xf2 : b'\xc3\xb2', # รฒ - 0xf3 : b'\xc3\xb3', # รณ - 0xf4 : b'\xc3\xb4', # รด - 0xf5 : b'\xc3\xb5', # รต - 0xf6 : b'\xc3\xb6', # รถ - 0xf7 : b'\xc3\xb7', # รท - 0xf8 : b'\xc3\xb8', # รธ - 0xf9 : b'\xc3\xb9', # รน - 0xfa : b'\xc3\xba', # รบ - 0xfb : b'\xc3\xbb', # รป - 0xfc : b'\xc3\xbc', # รผ - 0xfd : b'\xc3\xbd', # รฝ - 0xfe : b'\xc3\xbe', # รพ - } - - MULTIBYTE_MARKERS_AND_SIZES = [ - (0xc2, 0xdf, 2), # 2-byte characters start with a byte C2-DF - (0xe0, 0xef, 3), # 3-byte characters start with E0-EF - (0xf0, 0xf4, 4), # 4-byte characters start with F0-F4 - ] - - FIRST_MULTIBYTE_MARKER = MULTIBYTE_MARKERS_AND_SIZES[0][0] - LAST_MULTIBYTE_MARKER = MULTIBYTE_MARKERS_AND_SIZES[-1][1] - - @classmethod - def detwingle(cls, in_bytes, main_encoding="utf8", - embedded_encoding="windows-1252"): - """Fix characters from one encoding embedded in some other encoding. - - Currently the only situation supported is Windows-1252 (or its - subset ISO-8859-1), embedded in UTF-8. - - :param in_bytes: A bytestring that you suspect contains - characters from multiple encodings. Note that this _must_ - be a bytestring. If you've already converted the document - to Unicode, you're too late. - :param main_encoding: The primary encoding of `in_bytes`. - :param embedded_encoding: The encoding that was used to embed characters - in the main document. - :return: A bytestring in which `embedded_encoding` - characters have been converted to their `main_encoding` - equivalents. - """ - if embedded_encoding.replace('_', '-').lower() not in ( - 'windows-1252', 'windows_1252'): - raise NotImplementedError( - "Windows-1252 and ISO-8859-1 are the only currently supported " - "embedded encodings.") - - if main_encoding.lower() not in ('utf8', 'utf-8'): - raise NotImplementedError( - "UTF-8 is the only currently supported main encoding.") - - byte_chunks = [] - - chunk_start = 0 - pos = 0 - while pos < len(in_bytes): - byte = in_bytes[pos] - if not isinstance(byte, int): - # Python 2.x - byte = ord(byte) - if (byte >= cls.FIRST_MULTIBYTE_MARKER - and byte <= cls.LAST_MULTIBYTE_MARKER): - # This is the start of a UTF-8 multibyte character. Skip - # to the end. - for start, end, size in cls.MULTIBYTE_MARKERS_AND_SIZES: - if byte >= start and byte <= end: - pos += size - break - elif byte >= 0x80 and byte in cls.WINDOWS_1252_TO_UTF8: - # We found a Windows-1252 character! - # Save the string up to this point as a chunk. - byte_chunks.append(in_bytes[chunk_start:pos]) - - # Now translate the Windows-1252 character into UTF-8 - # and add it as another, one-byte chunk. - byte_chunks.append(cls.WINDOWS_1252_TO_UTF8[byte]) - pos += 1 - chunk_start = pos - else: - # Go on to the next character. - pos += 1 - if chunk_start == 0: - # The string is unchanged. - return in_bytes - else: - # Store the final chunk. - byte_chunks.append(in_bytes[chunk_start:]) - return b''.join(byte_chunks) - diff --git a/Jobs_Collections/venv/Lib/python3.8/site-packages/bs4/diagnose.py b/Jobs_Collections/venv/Lib/python3.8/site-packages/bs4/diagnose.py deleted file mode 100644 index 1877acd..0000000 --- a/Jobs_Collections/venv/Lib/python3.8/site-packages/bs4/diagnose.py +++ /dev/null @@ -1,242 +0,0 @@ -"""Diagnostic functions, mainly for use when doing tech support.""" - -# Use of this source code is governed by the MIT license. -__license__ = "MIT" - -import cProfile -from io import StringIO -from html.parser import HTMLParser -import bs4 -from bs4 import BeautifulSoup, __version__ -from bs4.builder import builder_registry - -import os -import pstats -import random -import tempfile -import time -import traceback -import sys -import cProfile - -def diagnose(data): - """Diagnostic suite for isolating common problems. - - :param data: A string containing markup that needs to be explained. - :return: None; diagnostics are printed to standard output. - """ - print(("Diagnostic running on Beautiful Soup %s" % __version__)) - print(("Python version %s" % sys.version)) - - basic_parsers = ["html.parser", "html5lib", "lxml"] - for name in basic_parsers: - for builder in builder_registry.builders: - if name in builder.features: - break - else: - basic_parsers.remove(name) - print(( - "I noticed that %s is not installed. Installing it may help." % - name)) - - if 'lxml' in basic_parsers: - basic_parsers.append("lxml-xml") - try: - from lxml import etree - print(("Found lxml version %s" % ".".join(map(str,etree.LXML_VERSION)))) - except ImportError as e: - print( - "lxml is not installed or couldn't be imported.") - - - if 'html5lib' in basic_parsers: - try: - import html5lib - print(("Found html5lib version %s" % html5lib.__version__)) - except ImportError as e: - print( - "html5lib is not installed or couldn't be imported.") - - if hasattr(data, 'read'): - data = data.read() - elif data.startswith("http:") or data.startswith("https:"): - print(('"%s" looks like a URL. Beautiful Soup is not an HTTP client.' % data)) - print("You need to use some other library to get the document behind the URL, and feed that document to Beautiful Soup.") - return - else: - try: - if os.path.exists(data): - print(('"%s" looks like a filename. Reading data from the file.' % data)) - with open(data) as fp: - data = fp.read() - except ValueError: - # This can happen on some platforms when the 'filename' is - # too long. Assume it's data and not a filename. - pass - print("") - - for parser in basic_parsers: - print(("Trying to parse your markup with %s" % parser)) - success = False - try: - soup = BeautifulSoup(data, features=parser) - success = True - except Exception as e: - print(("%s could not parse the markup." % parser)) - traceback.print_exc() - if success: - print(("Here's what %s did with the markup:" % parser)) - print((soup.prettify())) - - print(("-" * 80)) - -def lxml_trace(data, html=True, **kwargs): - """Print out the lxml events that occur during parsing. - - This lets you see how lxml parses a document when no Beautiful - Soup code is running. You can use this to determine whether - an lxml-specific problem is in Beautiful Soup's lxml tree builders - or in lxml itself. - - :param data: Some markup. - :param html: If True, markup will be parsed with lxml's HTML parser. - if False, lxml's XML parser will be used. - """ - from lxml import etree - for event, element in etree.iterparse(StringIO(data), html=html, **kwargs): - print(("%s, %4s, %s" % (event, element.tag, element.text))) - -class AnnouncingParser(HTMLParser): - """Subclass of HTMLParser that announces parse events, without doing - anything else. - - You can use this to get a picture of how html.parser sees a given - document. The easiest way to do this is to call `htmlparser_trace`. - """ - - def _p(self, s): - print(s) - - def handle_starttag(self, name, attrs): - self._p("%s START" % name) - - def handle_endtag(self, name): - self._p("%s END" % name) - - def handle_data(self, data): - self._p("%s DATA" % data) - - def handle_charref(self, name): - self._p("%s CHARREF" % name) - - def handle_entityref(self, name): - self._p("%s ENTITYREF" % name) - - def handle_comment(self, data): - self._p("%s COMMENT" % data) - - def handle_decl(self, data): - self._p("%s DECL" % data) - - def unknown_decl(self, data): - self._p("%s UNKNOWN-DECL" % data) - - def handle_pi(self, data): - self._p("%s PI" % data) - -def htmlparser_trace(data): - """Print out the HTMLParser events that occur during parsing. - - This lets you see how HTMLParser parses a document when no - Beautiful Soup code is running. - - :param data: Some markup. - """ - parser = AnnouncingParser() - parser.feed(data) - -_vowels = "aeiou" -_consonants = "bcdfghjklmnpqrstvwxyz" - -def rword(length=5): - "Generate a random word-like string." - s = '' - for i in range(length): - if i % 2 == 0: - t = _consonants - else: - t = _vowels - s += random.choice(t) - return s - -def rsentence(length=4): - "Generate a random sentence-like string." - return " ".join(rword(random.randint(4,9)) for i in list(range(length))) - -def rdoc(num_elements=1000): - """Randomly generate an invalid HTML document.""" - tag_names = ['p', 'div', 'span', 'i', 'b', 'script', 'table'] - elements = [] - for i in range(num_elements): - choice = random.randint(0,3) - if choice == 0: - # New tag. - tag_name = random.choice(tag_names) - elements.append("<%s>" % tag_name) - elif choice == 1: - elements.append(rsentence(random.randint(1,4))) - elif choice == 2: - # Close a tag. - tag_name = random.choice(tag_names) - elements.append("" % tag_name) - return "" + "\n".join(elements) + "" - -def benchmark_parsers(num_elements=100000): - """Very basic head-to-head performance benchmark.""" - print(("Comparative parser benchmark on Beautiful Soup %s" % __version__)) - data = rdoc(num_elements) - print(("Generated a large invalid HTML document (%d bytes)." % len(data))) - - for parser in ["lxml", ["lxml", "html"], "html5lib", "html.parser"]: - success = False - try: - a = time.time() - soup = BeautifulSoup(data, parser) - b = time.time() - success = True - except Exception as e: - print(("%s could not parse the markup." % parser)) - traceback.print_exc() - if success: - print(("BS4+%s parsed the markup in %.2fs." % (parser, b-a))) - - from lxml import etree - a = time.time() - etree.HTML(data) - b = time.time() - print(("Raw lxml parsed the markup in %.2fs." % (b-a))) - - import html5lib - parser = html5lib.HTMLParser() - a = time.time() - parser.parse(data) - b = time.time() - print(("Raw html5lib parsed the markup in %.2fs." % (b-a))) - -def profile(num_elements=100000, parser="lxml"): - """Use Python's profiler on a randomly generated document.""" - filehandle = tempfile.NamedTemporaryFile() - filename = filehandle.name - - data = rdoc(num_elements) - vars = dict(bs4=bs4, data=data, parser=parser) - cProfile.runctx('bs4.BeautifulSoup(data, parser)' , vars, vars, filename) - - stats = pstats.Stats(filename) - # stats.strip_dirs() - stats.sort_stats("cumulative") - stats.print_stats('_html5lib|bs4', 50) - -# If this file is run as a script, standard input is diagnosed. -if __name__ == '__main__': - diagnose(sys.stdin.read()) diff --git a/Jobs_Collections/venv/Lib/python3.8/site-packages/bs4/element.py b/Jobs_Collections/venv/Lib/python3.8/site-packages/bs4/element.py deleted file mode 100644 index c7dc650..0000000 --- a/Jobs_Collections/venv/Lib/python3.8/site-packages/bs4/element.py +++ /dev/null @@ -1,2162 +0,0 @@ -# Use of this source code is governed by the MIT license. -__license__ = "MIT" - -try: - from collections.abc import Callable # Python 3.6 -except ImportError as e: - from collections import Callable -import re -import sys -import warnings -try: - import soupsieve -except ImportError as e: - soupsieve = None - warnings.warn( - 'The soupsieve package is not installed. CSS selectors cannot be used.' - ) - -from bs4.formatter import ( - Formatter, - HTMLFormatter, - XMLFormatter, -) - -DEFAULT_OUTPUT_ENCODING = "utf-8" -PY3K = (sys.version_info[0] > 2) - -nonwhitespace_re = re.compile(r"\S+") - -# NOTE: This isn't used as of 4.7.0. I'm leaving it for a little bit on -# the off chance someone imported it for their own use. -whitespace_re = re.compile(r"\s+") - -def _alias(attr): - """Alias one attribute name to another for backward compatibility""" - @property - def alias(self): - return getattr(self, attr) - - @alias.setter - def alias(self): - return setattr(self, attr) - return alias - - -# These encodings are recognized by Python (so PageElement.encode -# could theoretically support them) but XML and HTML don't recognize -# them (so they should not show up in an XML or HTML document as that -# document's encoding). -# -# If an XML document is encoded in one of these encodings, no encoding -# will be mentioned in the XML declaration. If an HTML document is -# encoded in one of these encodings, and the HTML document has a -# tag that mentions an encoding, the encoding will be given as -# the empty string. -# -# Source: -# https://docs.python.org/3/library/codecs.html#python-specific-encodings -PYTHON_SPECIFIC_ENCODINGS = set([ - "idna", - "mbcs", - "oem", - "palmos", - "punycode", - "raw_unicode_escape", - "undefined", - "unicode_escape", - "raw-unicode-escape", - "unicode-escape", - "string-escape", - "string_escape", -]) - - -class NamespacedAttribute(str): - """A namespaced string (e.g. 'xml:lang') that remembers the namespace - ('xml') and the name ('lang') that were used to create it. - """ - - def __new__(cls, prefix, name=None, namespace=None): - if not name: - # This is the default namespace. Its name "has no value" - # per https://www.w3.org/TR/xml-names/#defaulting - name = None - - if name is None: - obj = str.__new__(cls, prefix) - elif prefix is None: - # Not really namespaced. - obj = str.__new__(cls, name) - else: - obj = str.__new__(cls, prefix + ":" + name) - obj.prefix = prefix - obj.name = name - obj.namespace = namespace - return obj - -class AttributeValueWithCharsetSubstitution(str): - """A stand-in object for a character encoding specified in HTML.""" - -class CharsetMetaAttributeValue(AttributeValueWithCharsetSubstitution): - """A generic stand-in for the value of a meta tag's 'charset' attribute. - - When Beautiful Soup parses the markup '', the - value of the 'charset' attribute will be one of these objects. - """ - - def __new__(cls, original_value): - obj = str.__new__(cls, original_value) - obj.original_value = original_value - return obj - - def encode(self, encoding): - """When an HTML document is being encoded to a given encoding, the - value of a meta tag's 'charset' is the name of the encoding. - """ - if encoding in PYTHON_SPECIFIC_ENCODINGS: - return '' - return encoding - - -class ContentMetaAttributeValue(AttributeValueWithCharsetSubstitution): - """A generic stand-in for the value of a meta tag's 'content' attribute. - - When Beautiful Soup parses the markup: - - - The value of the 'content' attribute will be one of these objects. - """ - - CHARSET_RE = re.compile(r"((^|;)\s*charset=)([^;]*)", re.M) - - def __new__(cls, original_value): - match = cls.CHARSET_RE.search(original_value) - if match is None: - # No substitution necessary. - return str.__new__(str, original_value) - - obj = str.__new__(cls, original_value) - obj.original_value = original_value - return obj - - def encode(self, encoding): - if encoding in PYTHON_SPECIFIC_ENCODINGS: - return '' - def rewrite(match): - return match.group(1) + encoding - return self.CHARSET_RE.sub(rewrite, self.original_value) - - -class PageElement(object): - """Contains the navigational information for some part of the page: - that is, its current location in the parse tree. - - NavigableString, Tag, etc. are all subclasses of PageElement. - """ - - def setup(self, parent=None, previous_element=None, next_element=None, - previous_sibling=None, next_sibling=None): - """Sets up the initial relations between this element and - other elements. - - :param parent: The parent of this element. - - :param previous_element: The element parsed immediately before - this one. - - :param next_element: The element parsed immediately before - this one. - - :param previous_sibling: The most recently encountered element - on the same level of the parse tree as this one. - - :param previous_sibling: The next element to be encountered - on the same level of the parse tree as this one. - """ - self.parent = parent - - self.previous_element = previous_element - if previous_element is not None: - self.previous_element.next_element = self - - self.next_element = next_element - if self.next_element is not None: - self.next_element.previous_element = self - - self.next_sibling = next_sibling - if self.next_sibling is not None: - self.next_sibling.previous_sibling = self - - if (previous_sibling is None - and self.parent is not None and self.parent.contents): - previous_sibling = self.parent.contents[-1] - - self.previous_sibling = previous_sibling - if previous_sibling is not None: - self.previous_sibling.next_sibling = self - - def format_string(self, s, formatter): - """Format the given string using the given formatter. - - :param s: A string. - :param formatter: A Formatter object, or a string naming one of the standard formatters. - """ - if formatter is None: - return s - if not isinstance(formatter, Formatter): - formatter = self.formatter_for_name(formatter) - output = formatter.substitute(s) - return output - - def formatter_for_name(self, formatter): - """Look up or create a Formatter for the given identifier, - if necessary. - - :param formatter: Can be a Formatter object (used as-is), a - function (used as the entity substitution hook for an - XMLFormatter or HTMLFormatter), or a string (used to look - up an XMLFormatter or HTMLFormatter in the appropriate - registry. - """ - if isinstance(formatter, Formatter): - return formatter - if self._is_xml: - c = XMLFormatter - else: - c = HTMLFormatter - if isinstance(formatter, Callable): - return c(entity_substitution=formatter) - return c.REGISTRY[formatter] - - @property - def _is_xml(self): - """Is this element part of an XML tree or an HTML tree? - - This is used in formatter_for_name, when deciding whether an - XMLFormatter or HTMLFormatter is more appropriate. It can be - inefficient, but it should be called very rarely. - """ - if self.known_xml is not None: - # Most of the time we will have determined this when the - # document is parsed. - return self.known_xml - - # Otherwise, it's likely that this element was created by - # direct invocation of the constructor from within the user's - # Python code. - if self.parent is None: - # This is the top-level object. It should have .known_xml set - # from tree creation. If not, take a guess--BS is usually - # used on HTML markup. - return getattr(self, 'is_xml', False) - return self.parent._is_xml - - nextSibling = _alias("next_sibling") # BS3 - previousSibling = _alias("previous_sibling") # BS3 - - def replace_with(self, replace_with): - """Replace this PageElement with another one, keeping the rest of the - tree the same. - - :param replace_with: A PageElement. - :return: `self`, no longer part of the tree. - """ - if self.parent is None: - raise ValueError( - "Cannot replace one element with another when the " - "element to be replaced is not part of a tree.") - if replace_with is self: - return - if replace_with is self.parent: - raise ValueError("Cannot replace a Tag with its parent.") - old_parent = self.parent - my_index = self.parent.index(self) - self.extract(_self_index=my_index) - old_parent.insert(my_index, replace_with) - return self - replaceWith = replace_with # BS3 - - def unwrap(self): - """Replace this PageElement with its contents. - - :return: `self`, no longer part of the tree. - """ - my_parent = self.parent - if self.parent is None: - raise ValueError( - "Cannot replace an element with its contents when that" - "element is not part of a tree.") - my_index = self.parent.index(self) - self.extract(_self_index=my_index) - for child in reversed(self.contents[:]): - my_parent.insert(my_index, child) - return self - replace_with_children = unwrap - replaceWithChildren = unwrap # BS3 - - def wrap(self, wrap_inside): - """Wrap this PageElement inside another one. - - :param wrap_inside: A PageElement. - :return: `wrap_inside`, occupying the position in the tree that used - to be occupied by `self`, and with `self` inside it. - """ - me = self.replace_with(wrap_inside) - wrap_inside.append(me) - return wrap_inside - - def extract(self, _self_index=None): - """Destructively rips this element out of the tree. - - :param _self_index: The location of this element in its parent's - .contents, if known. Passing this in allows for a performance - optimization. - - :return: `self`, no longer part of the tree. - """ - if self.parent is not None: - if _self_index is None: - _self_index = self.parent.index(self) - del self.parent.contents[_self_index] - - #Find the two elements that would be next to each other if - #this element (and any children) hadn't been parsed. Connect - #the two. - last_child = self._last_descendant() - next_element = last_child.next_element - - if (self.previous_element is not None and - self.previous_element is not next_element): - self.previous_element.next_element = next_element - if next_element is not None and next_element is not self.previous_element: - next_element.previous_element = self.previous_element - self.previous_element = None - last_child.next_element = None - - self.parent = None - if (self.previous_sibling is not None - and self.previous_sibling is not self.next_sibling): - self.previous_sibling.next_sibling = self.next_sibling - if (self.next_sibling is not None - and self.next_sibling is not self.previous_sibling): - self.next_sibling.previous_sibling = self.previous_sibling - self.previous_sibling = self.next_sibling = None - return self - - def _last_descendant(self, is_initialized=True, accept_self=True): - """Finds the last element beneath this object to be parsed. - - :param is_initialized: Has `setup` been called on this PageElement - yet? - :param accept_self: Is `self` an acceptable answer to the question? - """ - if is_initialized and self.next_sibling is not None: - last_child = self.next_sibling.previous_element - else: - last_child = self - while isinstance(last_child, Tag) and last_child.contents: - last_child = last_child.contents[-1] - if not accept_self and last_child is self: - last_child = None - return last_child - # BS3: Not part of the API! - _lastRecursiveChild = _last_descendant - - def insert(self, position, new_child): - """Insert a new PageElement in the list of this PageElement's children. - - This works the same way as `list.insert`. - - :param position: The numeric position that should be occupied - in `self.children` by the new PageElement. - :param new_child: A PageElement. - """ - if new_child is None: - raise ValueError("Cannot insert None into a tag.") - if new_child is self: - raise ValueError("Cannot insert a tag into itself.") - if (isinstance(new_child, str) - and not isinstance(new_child, NavigableString)): - new_child = NavigableString(new_child) - - from bs4 import BeautifulSoup - if isinstance(new_child, BeautifulSoup): - # We don't want to end up with a situation where one BeautifulSoup - # object contains another. Insert the children one at a time. - for subchild in list(new_child.contents): - self.insert(position, subchild) - position += 1 - return - position = min(position, len(self.contents)) - if hasattr(new_child, 'parent') and new_child.parent is not None: - # We're 'inserting' an element that's already one - # of this object's children. - if new_child.parent is self: - current_index = self.index(new_child) - if current_index < position: - # We're moving this element further down the list - # of this object's children. That means that when - # we extract this element, our target index will - # jump down one. - position -= 1 - new_child.extract() - - new_child.parent = self - previous_child = None - if position == 0: - new_child.previous_sibling = None - new_child.previous_element = self - else: - previous_child = self.contents[position - 1] - new_child.previous_sibling = previous_child - new_child.previous_sibling.next_sibling = new_child - new_child.previous_element = previous_child._last_descendant(False) - if new_child.previous_element is not None: - new_child.previous_element.next_element = new_child - - new_childs_last_element = new_child._last_descendant(False) - - if position >= len(self.contents): - new_child.next_sibling = None - - parent = self - parents_next_sibling = None - while parents_next_sibling is None and parent is not None: - parents_next_sibling = parent.next_sibling - parent = parent.parent - if parents_next_sibling is not None: - # We found the element that comes next in the document. - break - if parents_next_sibling is not None: - new_childs_last_element.next_element = parents_next_sibling - else: - # The last element of this tag is the last element in - # the document. - new_childs_last_element.next_element = None - else: - next_child = self.contents[position] - new_child.next_sibling = next_child - if new_child.next_sibling is not None: - new_child.next_sibling.previous_sibling = new_child - new_childs_last_element.next_element = next_child - - if new_childs_last_element.next_element is not None: - new_childs_last_element.next_element.previous_element = new_childs_last_element - self.contents.insert(position, new_child) - - def append(self, tag): - """Appends the given PageElement to the contents of this one. - - :param tag: A PageElement. - """ - self.insert(len(self.contents), tag) - - def extend(self, tags): - """Appends the given PageElements to this one's contents. - - :param tags: A list of PageElements. - """ - for tag in tags: - self.append(tag) - - def insert_before(self, *args): - """Makes the given element(s) the immediate predecessor of this one. - - All the elements will have the same parent, and the given elements - will be immediately before this one. - - :param args: One or more PageElements. - """ - parent = self.parent - if parent is None: - raise ValueError( - "Element has no parent, so 'before' has no meaning.") - if any(x is self for x in args): - raise ValueError("Can't insert an element before itself.") - for predecessor in args: - # Extract first so that the index won't be screwed up if they - # are siblings. - if isinstance(predecessor, PageElement): - predecessor.extract() - index = parent.index(self) - parent.insert(index, predecessor) - - def insert_after(self, *args): - """Makes the given element(s) the immediate successor of this one. - - The elements will have the same parent, and the given elements - will be immediately after this one. - - :param args: One or more PageElements. - """ - # Do all error checking before modifying the tree. - parent = self.parent - if parent is None: - raise ValueError( - "Element has no parent, so 'after' has no meaning.") - if any(x is self for x in args): - raise ValueError("Can't insert an element after itself.") - - offset = 0 - for successor in args: - # Extract first so that the index won't be screwed up if they - # are siblings. - if isinstance(successor, PageElement): - successor.extract() - index = parent.index(self) - parent.insert(index+1+offset, successor) - offset += 1 - - def find_next(self, name=None, attrs={}, text=None, **kwargs): - """Find the first PageElement that matches the given criteria and - appears later in the document than this PageElement. - - All find_* methods take a common set of arguments. See the online - documentation for detailed explanations. - - :param name: A filter on tag name. - :param attrs: A dictionary of filters on attribute values. - :param text: A filter for a NavigableString with specific text. - :kwargs: A dictionary of filters on attribute values. - :return: A PageElement. - :rtype: bs4.element.Tag | bs4.element.NavigableString - """ - return self._find_one(self.find_all_next, name, attrs, text, **kwargs) - findNext = find_next # BS3 - - def find_all_next(self, name=None, attrs={}, text=None, limit=None, - **kwargs): - """Find all PageElements that match the given criteria and appear - later in the document than this PageElement. - - All find_* methods take a common set of arguments. See the online - documentation for detailed explanations. - - :param name: A filter on tag name. - :param attrs: A dictionary of filters on attribute values. - :param text: A filter for a NavigableString with specific text. - :param limit: Stop looking after finding this many results. - :kwargs: A dictionary of filters on attribute values. - :return: A ResultSet containing PageElements. - """ - return self._find_all(name, attrs, text, limit, self.next_elements, - **kwargs) - findAllNext = find_all_next # BS3 - - def find_next_sibling(self, name=None, attrs={}, text=None, **kwargs): - """Find the closest sibling to this PageElement that matches the - given criteria and appears later in the document. - - All find_* methods take a common set of arguments. See the - online documentation for detailed explanations. - - :param name: A filter on tag name. - :param attrs: A dictionary of filters on attribute values. - :param text: A filter for a NavigableString with specific text. - :kwargs: A dictionary of filters on attribute values. - :return: A PageElement. - :rtype: bs4.element.Tag | bs4.element.NavigableString - """ - return self._find_one(self.find_next_siblings, name, attrs, text, - **kwargs) - findNextSibling = find_next_sibling # BS3 - - def find_next_siblings(self, name=None, attrs={}, text=None, limit=None, - **kwargs): - """Find all siblings of this PageElement that match the given criteria - and appear later in the document. - - All find_* methods take a common set of arguments. See the online - documentation for detailed explanations. - - :param name: A filter on tag name. - :param attrs: A dictionary of filters on attribute values. - :param text: A filter for a NavigableString with specific text. - :param limit: Stop looking after finding this many results. - :kwargs: A dictionary of filters on attribute values. - :return: A ResultSet of PageElements. - :rtype: bs4.element.ResultSet - """ - return self._find_all(name, attrs, text, limit, - self.next_siblings, **kwargs) - findNextSiblings = find_next_siblings # BS3 - fetchNextSiblings = find_next_siblings # BS2 - - def find_previous(self, name=None, attrs={}, text=None, **kwargs): - """Look backwards in the document from this PageElement and find the - first PageElement that matches the given criteria. - - All find_* methods take a common set of arguments. See the online - documentation for detailed explanations. - - :param name: A filter on tag name. - :param attrs: A dictionary of filters on attribute values. - :param text: A filter for a NavigableString with specific text. - :kwargs: A dictionary of filters on attribute values. - :return: A PageElement. - :rtype: bs4.element.Tag | bs4.element.NavigableString - """ - return self._find_one( - self.find_all_previous, name, attrs, text, **kwargs) - findPrevious = find_previous # BS3 - - def find_all_previous(self, name=None, attrs={}, text=None, limit=None, - **kwargs): - """Look backwards in the document from this PageElement and find all - PageElements that match the given criteria. - - All find_* methods take a common set of arguments. See the online - documentation for detailed explanations. - - :param name: A filter on tag name. - :param attrs: A dictionary of filters on attribute values. - :param text: A filter for a NavigableString with specific text. - :param limit: Stop looking after finding this many results. - :kwargs: A dictionary of filters on attribute values. - :return: A ResultSet of PageElements. - :rtype: bs4.element.ResultSet - """ - return self._find_all(name, attrs, text, limit, self.previous_elements, - **kwargs) - findAllPrevious = find_all_previous # BS3 - fetchPrevious = find_all_previous # BS2 - - def find_previous_sibling(self, name=None, attrs={}, text=None, **kwargs): - """Returns the closest sibling to this PageElement that matches the - given criteria and appears earlier in the document. - - All find_* methods take a common set of arguments. See the online - documentation for detailed explanations. - - :param name: A filter on tag name. - :param attrs: A dictionary of filters on attribute values. - :param text: A filter for a NavigableString with specific text. - :kwargs: A dictionary of filters on attribute values. - :return: A PageElement. - :rtype: bs4.element.Tag | bs4.element.NavigableString - """ - return self._find_one(self.find_previous_siblings, name, attrs, text, - **kwargs) - findPreviousSibling = find_previous_sibling # BS3 - - def find_previous_siblings(self, name=None, attrs={}, text=None, - limit=None, **kwargs): - """Returns all siblings to this PageElement that match the - given criteria and appear earlier in the document. - - All find_* methods take a common set of arguments. See the online - documentation for detailed explanations. - - :param name: A filter on tag name. - :param attrs: A dictionary of filters on attribute values. - :param text: A filter for a NavigableString with specific text. - :param limit: Stop looking after finding this many results. - :kwargs: A dictionary of filters on attribute values. - :return: A ResultSet of PageElements. - :rtype: bs4.element.ResultSet - """ - return self._find_all(name, attrs, text, limit, - self.previous_siblings, **kwargs) - findPreviousSiblings = find_previous_siblings # BS3 - fetchPreviousSiblings = find_previous_siblings # BS2 - - def find_parent(self, name=None, attrs={}, **kwargs): - """Find the closest parent of this PageElement that matches the given - criteria. - - All find_* methods take a common set of arguments. See the online - documentation for detailed explanations. - - :param name: A filter on tag name. - :param attrs: A dictionary of filters on attribute values. - :kwargs: A dictionary of filters on attribute values. - - :return: A PageElement. - :rtype: bs4.element.Tag | bs4.element.NavigableString - """ - # NOTE: We can't use _find_one because findParents takes a different - # set of arguments. - r = None - l = self.find_parents(name, attrs, 1, **kwargs) - if l: - r = l[0] - return r - findParent = find_parent # BS3 - - def find_parents(self, name=None, attrs={}, limit=None, **kwargs): - """Find all parents of this PageElement that match the given criteria. - - All find_* methods take a common set of arguments. See the online - documentation for detailed explanations. - - :param name: A filter on tag name. - :param attrs: A dictionary of filters on attribute values. - :param limit: Stop looking after finding this many results. - :kwargs: A dictionary of filters on attribute values. - - :return: A PageElement. - :rtype: bs4.element.Tag | bs4.element.NavigableString - """ - return self._find_all(name, attrs, None, limit, self.parents, - **kwargs) - findParents = find_parents # BS3 - fetchParents = find_parents # BS2 - - @property - def next(self): - """The PageElement, if any, that was parsed just after this one. - - :return: A PageElement. - :rtype: bs4.element.Tag | bs4.element.NavigableString - """ - return self.next_element - - @property - def previous(self): - """The PageElement, if any, that was parsed just before this one. - - :return: A PageElement. - :rtype: bs4.element.Tag | bs4.element.NavigableString - """ - return self.previous_element - - #These methods do the real heavy lifting. - - def _find_one(self, method, name, attrs, text, **kwargs): - r = None - l = method(name, attrs, text, 1, **kwargs) - if l: - r = l[0] - return r - - def _find_all(self, name, attrs, text, limit, generator, **kwargs): - "Iterates over a generator looking for things that match." - - if text is None and 'string' in kwargs: - text = kwargs['string'] - del kwargs['string'] - - if isinstance(name, SoupStrainer): - strainer = name - else: - strainer = SoupStrainer(name, attrs, text, **kwargs) - - if text is None and not limit and not attrs and not kwargs: - if name is True or name is None: - # Optimization to find all tags. - result = (element for element in generator - if isinstance(element, Tag)) - return ResultSet(strainer, result) - elif isinstance(name, str): - # Optimization to find all tags with a given name. - if name.count(':') == 1: - # This is a name with a prefix. If this is a namespace-aware document, - # we need to match the local name against tag.name. If not, - # we need to match the fully-qualified name against tag.name. - prefix, local_name = name.split(':', 1) - else: - prefix = None - local_name = name - result = (element for element in generator - if isinstance(element, Tag) - and ( - element.name == name - ) or ( - element.name == local_name - and (prefix is None or element.prefix == prefix) - ) - ) - return ResultSet(strainer, result) - results = ResultSet(strainer) - while True: - try: - i = next(generator) - except StopIteration: - break - if i: - found = strainer.search(i) - if found: - results.append(found) - if limit and len(results) >= limit: - break - return results - - #These generators can be used to navigate starting from both - #NavigableStrings and Tags. - @property - def next_elements(self): - """All PageElements that were parsed after this one. - - :yield: A sequence of PageElements. - """ - i = self.next_element - while i is not None: - yield i - i = i.next_element - - @property - def next_siblings(self): - """All PageElements that are siblings of this one but were parsed - later. - - :yield: A sequence of PageElements. - """ - i = self.next_sibling - while i is not None: - yield i - i = i.next_sibling - - @property - def previous_elements(self): - """All PageElements that were parsed before this one. - - :yield: A sequence of PageElements. - """ - i = self.previous_element - while i is not None: - yield i - i = i.previous_element - - @property - def previous_siblings(self): - """All PageElements that are siblings of this one but were parsed - earlier. - - :yield: A sequence of PageElements. - """ - i = self.previous_sibling - while i is not None: - yield i - i = i.previous_sibling - - @property - def parents(self): - """All PageElements that are parents of this PageElement. - - :yield: A sequence of PageElements. - """ - i = self.parent - while i is not None: - yield i - i = i.parent - - @property - def decomposed(self): - """Check whether a PageElement has been decomposed. - - :rtype: bool - """ - return getattr(self, '_decomposed', False) or False - - # Old non-property versions of the generators, for backwards - # compatibility with BS3. - def nextGenerator(self): - return self.next_elements - - def nextSiblingGenerator(self): - return self.next_siblings - - def previousGenerator(self): - return self.previous_elements - - def previousSiblingGenerator(self): - return self.previous_siblings - - def parentGenerator(self): - return self.parents - - -class NavigableString(str, PageElement): - """A Python Unicode string that is part of a parse tree. - - When Beautiful Soup parses the markup penguin, it will - create a NavigableString for the string "penguin". - """ - - PREFIX = '' - SUFFIX = '' - - # We can't tell just by looking at a string whether it's contained - # in an XML document or an HTML document. - - known_xml = None - - def __new__(cls, value): - """Create a new NavigableString. - - When unpickling a NavigableString, this method is called with - the string in DEFAULT_OUTPUT_ENCODING. That encoding needs to be - passed in to the superclass's __new__ or the superclass won't know - how to handle non-ASCII characters. - """ - if isinstance(value, str): - u = str.__new__(cls, value) - else: - u = str.__new__(cls, value, DEFAULT_OUTPUT_ENCODING) - u.setup() - return u - - def __copy__(self): - """A copy of a NavigableString has the same contents and class - as the original, but it is not connected to the parse tree. - """ - return type(self)(self) - - def __getnewargs__(self): - return (str(self),) - - def __getattr__(self, attr): - """text.string gives you text. This is for backwards - compatibility for Navigable*String, but for CData* it lets you - get the string without the CData wrapper.""" - if attr == 'string': - return self - else: - raise AttributeError( - "'%s' object has no attribute '%s'" % ( - self.__class__.__name__, attr)) - - def output_ready(self, formatter="minimal"): - """Run the string through the provided formatter. - - :param formatter: A Formatter object, or a string naming one of the standard formatters. - """ - output = self.format_string(self, formatter) - return self.PREFIX + output + self.SUFFIX - - @property - def name(self): - """Since a NavigableString is not a Tag, it has no .name. - - This property is implemented so that code like this doesn't crash - when run on a mixture of Tag and NavigableString objects: - [x.name for x in tag.children] - """ - return None - - @name.setter - def name(self, name): - """Prevent NavigableString.name from ever being set.""" - raise AttributeError("A NavigableString cannot be given a name.") - - -class PreformattedString(NavigableString): - """A NavigableString not subject to the normal formatting rules. - - This is an abstract class used for special kinds of strings such - as comments (the Comment class) and CDATA blocks (the CData - class). - """ - - PREFIX = '' - SUFFIX = '' - - def output_ready(self, formatter=None): - """Make this string ready for output by adding any subclass-specific - prefix or suffix. - - :param formatter: A Formatter object, or a string naming one - of the standard formatters. The string will be passed into the - Formatter, but only to trigger any side effects: the return - value is ignored. - - :return: The string, with any subclass-specific prefix and - suffix added on. - """ - if formatter is not None: - ignore = self.format_string(self, formatter) - return self.PREFIX + self + self.SUFFIX - -class CData(PreformattedString): - """A CDATA block.""" - PREFIX = '' - -class ProcessingInstruction(PreformattedString): - """A SGML processing instruction.""" - - PREFIX = '' - -class XMLProcessingInstruction(ProcessingInstruction): - """An XML processing instruction.""" - PREFIX = '' - -class Comment(PreformattedString): - """An HTML or XML comment.""" - PREFIX = '' - - -class Declaration(PreformattedString): - """An XML declaration.""" - PREFIX = '' - - -class Doctype(PreformattedString): - """A document type declaration.""" - @classmethod - def for_name_and_ids(cls, name, pub_id, system_id): - """Generate an appropriate document type declaration for a given - public ID and system ID. - - :param name: The name of the document's root element, e.g. 'html'. - :param pub_id: The Formal Public Identifier for this document type, - e.g. '-//W3C//DTD XHTML 1.1//EN' - :param system_id: The system identifier for this document type, - e.g. 'http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd' - - :return: A Doctype. - """ - value = name or '' - if pub_id is not None: - value += ' PUBLIC "%s"' % pub_id - if system_id is not None: - value += ' "%s"' % system_id - elif system_id is not None: - value += ' SYSTEM "%s"' % system_id - - return Doctype(value) - - PREFIX = '\n' - - -class Stylesheet(NavigableString): - """A NavigableString representing an stylesheet (probably - CSS). - - Used to distinguish embedded stylesheets from textual content. - """ - pass - - -class Script(NavigableString): - """A NavigableString representing an executable script (probably - Javascript). - - Used to distinguish executable code from textual content. - """ - pass - - -class TemplateString(NavigableString): - """A NavigableString representing a string found inside an HTML - template embedded in a larger document. - - Used to distinguish such strings from the main body of the document. - """ - pass - - -class Tag(PageElement): - """Represents an HTML or XML tag that is part of a parse tree, along - with its attributes and contents. - - When Beautiful Soup parses the markup penguin, it will - create a Tag object representing the tag. - """ - - def __init__(self, parser=None, builder=None, name=None, namespace=None, - prefix=None, attrs=None, parent=None, previous=None, - is_xml=None, sourceline=None, sourcepos=None, - can_be_empty_element=None, cdata_list_attributes=None, - preserve_whitespace_tags=None - ): - """Basic constructor. - - :param parser: A BeautifulSoup object. - :param builder: A TreeBuilder. - :param name: The name of the tag. - :param namespace: The URI of this Tag's XML namespace, if any. - :param prefix: The prefix for this Tag's XML namespace, if any. - :param attrs: A dictionary of this Tag's attribute values. - :param parent: The PageElement to use as this Tag's parent. - :param previous: The PageElement that was parsed immediately before - this tag. - :param is_xml: If True, this is an XML tag. Otherwise, this is an - HTML tag. - :param sourceline: The line number where this tag was found in its - source document. - :param sourcepos: The character position within `sourceline` where this - tag was found. - :param can_be_empty_element: If True, this tag should be - represented as . If False, this tag should be represented - as . - :param cdata_list_attributes: A list of attributes whose values should - be treated as CDATA if they ever show up on this tag. - :param preserve_whitespace_tags: A list of tag names whose contents - should have their whitespace preserved. - """ - if parser is None: - self.parser_class = None - else: - # We don't actually store the parser object: that lets extracted - # chunks be garbage-collected. - self.parser_class = parser.__class__ - if name is None: - raise ValueError("No value provided for new tag's name.") - self.name = name - self.namespace = namespace - self.prefix = prefix - if ((not builder or builder.store_line_numbers) - and (sourceline is not None or sourcepos is not None)): - self.sourceline = sourceline - self.sourcepos = sourcepos - if attrs is None: - attrs = {} - elif attrs: - if builder is not None and builder.cdata_list_attributes: - attrs = builder._replace_cdata_list_attribute_values( - self.name, attrs) - else: - attrs = dict(attrs) - else: - attrs = dict(attrs) - - # If possible, determine ahead of time whether this tag is an - # XML tag. - if builder: - self.known_xml = builder.is_xml - else: - self.known_xml = is_xml - self.attrs = attrs - self.contents = [] - self.setup(parent, previous) - self.hidden = False - - if builder is None: - # In the absence of a TreeBuilder, use whatever values were - # passed in here. They're probably None, unless this is a copy of some - # other tag. - self.can_be_empty_element = can_be_empty_element - self.cdata_list_attributes = cdata_list_attributes - self.preserve_whitespace_tags = preserve_whitespace_tags - else: - # Set up any substitutions for this tag, such as the charset in a META tag. - builder.set_up_substitutions(self) - - # Ask the TreeBuilder whether this tag might be an empty-element tag. - self.can_be_empty_element = builder.can_be_empty_element(name) - - # Keep track of the list of attributes of this tag that - # might need to be treated as a list. - # - # For performance reasons, we store the whole data structure - # rather than asking the question of every tag. Asking would - # require building a new data structure every time, and - # (unlike can_be_empty_element), we almost never need - # to check this. - self.cdata_list_attributes = builder.cdata_list_attributes - - # Keep track of the names that might cause this tag to be treated as a - # whitespace-preserved tag. - self.preserve_whitespace_tags = builder.preserve_whitespace_tags - - parserClass = _alias("parser_class") # BS3 - - def __copy__(self): - """A copy of a Tag is a new Tag, unconnected to the parse tree. - Its contents are a copy of the old Tag's contents. - """ - clone = type(self)( - None, self.builder, self.name, self.namespace, - self.prefix, self.attrs, is_xml=self._is_xml, - sourceline=self.sourceline, sourcepos=self.sourcepos, - can_be_empty_element=self.can_be_empty_element, - cdata_list_attributes=self.cdata_list_attributes, - preserve_whitespace_tags=self.preserve_whitespace_tags - ) - for attr in ('can_be_empty_element', 'hidden'): - setattr(clone, attr, getattr(self, attr)) - for child in self.contents: - clone.append(child.__copy__()) - return clone - - @property - def is_empty_element(self): - """Is this tag an empty-element tag? (aka a self-closing tag) - - A tag that has contents is never an empty-element tag. - - A tag that has no contents may or may not be an empty-element - tag. It depends on the builder used to create the tag. If the - builder has a designated list of empty-element tags, then only - a tag whose name shows up in that list is considered an - empty-element tag. - - If the builder has no designated list of empty-element tags, - then any tag with no contents is an empty-element tag. - """ - return len(self.contents) == 0 and self.can_be_empty_element - isSelfClosing = is_empty_element # BS3 - - @property - def string(self): - """Convenience property to get the single string within this - PageElement. - - TODO It might make sense to have NavigableString.string return - itself. - - :return: If this element has a single string child, return - value is that string. If this element has one child tag, - return value is the 'string' attribute of the child tag, - recursively. If this element is itself a string, has no - children, or has more than one child, return value is None. - """ - if len(self.contents) != 1: - return None - child = self.contents[0] - if isinstance(child, NavigableString): - return child - return child.string - - @string.setter - def string(self, string): - """Replace this PageElement's contents with `string`.""" - self.clear() - self.append(string.__class__(string)) - - def _all_strings(self, strip=False, types=(NavigableString, CData)): - """Yield all strings of certain classes, possibly stripping them. - - :param strip: If True, all strings will be stripped before being - yielded. - - :types: A tuple of NavigableString subclasses. Any strings of - a subclass not found in this list will be ignored. By - default, this means only NavigableString and CData objects - will be considered. So no comments, processing instructions, - etc. - - :yield: A sequence of strings. - """ - for descendant in self.descendants: - if ( - (types is None and not isinstance(descendant, NavigableString)) - or - (types is not None and type(descendant) not in types)): - continue - if strip: - descendant = descendant.strip() - if len(descendant) == 0: - continue - yield descendant - - strings = property(_all_strings) - - @property - def stripped_strings(self): - """Yield all strings in the document, stripping them first. - - :yield: A sequence of stripped strings. - """ - for string in self._all_strings(True): - yield string - - def get_text(self, separator="", strip=False, - types=(NavigableString, CData)): - """Get all child strings, concatenated using the given separator. - - :param separator: Strings will be concatenated using this separator. - - :param strip: If True, strings will be stripped before being - concatenated. - - :types: A tuple of NavigableString subclasses. Any strings of - a subclass not found in this list will be ignored. By - default, this means only NavigableString and CData objects - will be considered. So no comments, processing instructions, - stylesheets, etc. - - :return: A string. - """ - return separator.join([s for s in self._all_strings( - strip, types=types)]) - getText = get_text - text = property(get_text) - - def decompose(self): - """Recursively destroys this PageElement and its children. - - This element will be removed from the tree and wiped out; so - will everything beneath it. - - The behavior of a decomposed PageElement is undefined and you - should never use one for anything, but if you need to _check_ - whether an element has been decomposed, you can use the - `decomposed` property. - """ - self.extract() - i = self - while i is not None: - n = i.next_element - i.__dict__.clear() - i.contents = [] - i._decomposed = True - i = n - - def clear(self, decompose=False): - """Wipe out all children of this PageElement by calling extract() - on them. - - :param decompose: If this is True, decompose() (a more - destructive method) will be called instead of extract(). - """ - if decompose: - for element in self.contents[:]: - if isinstance(element, Tag): - element.decompose() - else: - element.extract() - else: - for element in self.contents[:]: - element.extract() - - def smooth(self): - """Smooth out this element's children by consolidating consecutive - strings. - - This makes pretty-printed output look more natural following a - lot of operations that modified the tree. - """ - # Mark the first position of every pair of children that need - # to be consolidated. Do this rather than making a copy of - # self.contents, since in most cases very few strings will be - # affected. - marked = [] - for i, a in enumerate(self.contents): - if isinstance(a, Tag): - # Recursively smooth children. - a.smooth() - if i == len(self.contents)-1: - # This is the last item in .contents, and it's not a - # tag. There's no chance it needs any work. - continue - b = self.contents[i+1] - if (isinstance(a, NavigableString) - and isinstance(b, NavigableString) - and not isinstance(a, PreformattedString) - and not isinstance(b, PreformattedString) - ): - marked.append(i) - - # Go over the marked positions in reverse order, so that - # removing items from .contents won't affect the remaining - # positions. - for i in reversed(marked): - a = self.contents[i] - b = self.contents[i+1] - b.extract() - n = NavigableString(a+b) - a.replace_with(n) - - def index(self, element): - """Find the index of a child by identity, not value. - - Avoids issues with tag.contents.index(element) getting the - index of equal elements. - - :param element: Look for this PageElement in `self.contents`. - """ - for i, child in enumerate(self.contents): - if child is element: - return i - raise ValueError("Tag.index: element not in tag") - - def get(self, key, default=None): - """Returns the value of the 'key' attribute for the tag, or - the value given for 'default' if it doesn't have that - attribute.""" - return self.attrs.get(key, default) - - def get_attribute_list(self, key, default=None): - """The same as get(), but always returns a list. - - :param key: The attribute to look for. - :param default: Use this value if the attribute is not present - on this PageElement. - :return: A list of values, probably containing only a single - value. - """ - value = self.get(key, default) - if not isinstance(value, list): - value = [value] - return value - - def has_attr(self, key): - """Does this PageElement have an attribute with the given name?""" - return key in self.attrs - - def __hash__(self): - return str(self).__hash__() - - def __getitem__(self, key): - """tag[key] returns the value of the 'key' attribute for the Tag, - and throws an exception if it's not there.""" - return self.attrs[key] - - def __iter__(self): - "Iterating over a Tag iterates over its contents." - return iter(self.contents) - - def __len__(self): - "The length of a Tag is the length of its list of contents." - return len(self.contents) - - def __contains__(self, x): - return x in self.contents - - def __bool__(self): - "A tag is non-None even if it has no contents." - return True - - def __setitem__(self, key, value): - """Setting tag[key] sets the value of the 'key' attribute for the - tag.""" - self.attrs[key] = value - - def __delitem__(self, key): - "Deleting tag[key] deletes all 'key' attributes for the tag." - self.attrs.pop(key, None) - - def __call__(self, *args, **kwargs): - """Calling a Tag like a function is the same as calling its - find_all() method. Eg. tag('a') returns a list of all the A tags - found within this tag.""" - return self.find_all(*args, **kwargs) - - def __getattr__(self, tag): - """Calling tag.subtag is the same as calling tag.find(name="subtag")""" - #print("Getattr %s.%s" % (self.__class__, tag)) - if len(tag) > 3 and tag.endswith('Tag'): - # BS3: soup.aTag -> "soup.find("a") - tag_name = tag[:-3] - warnings.warn( - '.%(name)sTag is deprecated, use .find("%(name)s") instead. If you really were looking for a tag called %(name)sTag, use .find("%(name)sTag")' % dict( - name=tag_name - ) - ) - return self.find(tag_name) - # We special case contents to avoid recursion. - elif not tag.startswith("__") and not tag == "contents": - return self.find(tag) - raise AttributeError( - "'%s' object has no attribute '%s'" % (self.__class__, tag)) - - def __eq__(self, other): - """Returns true iff this Tag has the same name, the same attributes, - and the same contents (recursively) as `other`.""" - if self is other: - return True - if (not hasattr(other, 'name') or - not hasattr(other, 'attrs') or - not hasattr(other, 'contents') or - self.name != other.name or - self.attrs != other.attrs or - len(self) != len(other)): - return False - for i, my_child in enumerate(self.contents): - if my_child != other.contents[i]: - return False - return True - - def __ne__(self, other): - """Returns true iff this Tag is not identical to `other`, - as defined in __eq__.""" - return not self == other - - def __repr__(self, encoding="unicode-escape"): - """Renders this PageElement as a string. - - :param encoding: The encoding to use (Python 2 only). - :return: Under Python 2, a bytestring; under Python 3, - a Unicode string. - """ - if PY3K: - # "The return value must be a string object", i.e. Unicode - return self.decode() - else: - # "The return value must be a string object", i.e. a bytestring. - # By convention, the return value of __repr__ should also be - # an ASCII string. - return self.encode(encoding) - - def __unicode__(self): - """Renders this PageElement as a Unicode string.""" - return self.decode() - - def __str__(self): - """Renders this PageElement as a generic string. - - :return: Under Python 2, a UTF-8 bytestring; under Python 3, - a Unicode string. - """ - if PY3K: - return self.decode() - else: - return self.encode() - - if PY3K: - __str__ = __repr__ = __unicode__ - - def encode(self, encoding=DEFAULT_OUTPUT_ENCODING, - indent_level=None, formatter="minimal", - errors="xmlcharrefreplace"): - """Render a bytestring representation of this PageElement and its - contents. - - :param encoding: The destination encoding. - :param indent_level: Each line of the rendering will be - indented this many spaces. Used internally in - recursive calls while pretty-printing. - :param formatter: A Formatter object, or a string naming one of - the standard formatters. - :param errors: An error handling strategy such as - 'xmlcharrefreplace'. This value is passed along into - encode() and its value should be one of the constants - defined by Python. - :return: A bytestring. - - """ - # Turn the data structure into Unicode, then encode the - # Unicode. - u = self.decode(indent_level, encoding, formatter) - return u.encode(encoding, errors) - - def decode(self, indent_level=None, - eventual_encoding=DEFAULT_OUTPUT_ENCODING, - formatter="minimal"): - """Render a Unicode representation of this PageElement and its - contents. - - :param indent_level: Each line of the rendering will be - indented this many spaces. Used internally in - recursive calls while pretty-printing. - :param eventual_encoding: The tag is destined to be - encoded into this encoding. This method is _not_ - responsible for performing that encoding. This information - is passed in so that it can be substituted in if the - document contains a tag that mentions the document's - encoding. - :param formatter: A Formatter object, or a string naming one of - the standard formatters. - """ - - # First off, turn a non-Formatter `formatter` into a Formatter - # object. This will stop the lookup from happening over and - # over again. - if not isinstance(formatter, Formatter): - formatter = self.formatter_for_name(formatter) - attributes = formatter.attributes(self) - attrs = [] - for key, val in attributes: - if val is None: - decoded = key - else: - if isinstance(val, list) or isinstance(val, tuple): - val = ' '.join(val) - elif not isinstance(val, str): - val = str(val) - elif ( - isinstance(val, AttributeValueWithCharsetSubstitution) - and eventual_encoding is not None - ): - val = val.encode(eventual_encoding) - - text = formatter.attribute_value(val) - decoded = ( - str(key) + '=' - + formatter.quoted_attribute_value(text)) - attrs.append(decoded) - close = '' - closeTag = '' - - prefix = '' - if self.prefix: - prefix = self.prefix + ":" - - if self.is_empty_element: - close = formatter.void_element_close_prefix or '' - else: - closeTag = '' % (prefix, self.name) - - pretty_print = self._should_pretty_print(indent_level) - space = '' - indent_space = '' - if indent_level is not None: - indent_space = (' ' * (indent_level - 1)) - if pretty_print: - space = indent_space - indent_contents = indent_level + 1 - else: - indent_contents = None - contents = self.decode_contents( - indent_contents, eventual_encoding, formatter - ) - - if self.hidden: - # This is the 'document root' object. - s = contents - else: - s = [] - attribute_string = '' - if attrs: - attribute_string = ' ' + ' '.join(attrs) - if indent_level is not None: - # Even if this particular tag is not pretty-printed, - # we should indent up to the start of the tag. - s.append(indent_space) - s.append('<%s%s%s%s>' % ( - prefix, self.name, attribute_string, close)) - if pretty_print: - s.append("\n") - s.append(contents) - if pretty_print and contents and contents[-1] != "\n": - s.append("\n") - if pretty_print and closeTag: - s.append(space) - s.append(closeTag) - if indent_level is not None and closeTag and self.next_sibling: - # Even if this particular tag is not pretty-printed, - # we're now done with the tag, and we should add a - # newline if appropriate. - s.append("\n") - s = ''.join(s) - return s - - def _should_pretty_print(self, indent_level): - """Should this tag be pretty-printed? - - Most of them should, but some (such as
 in HTML
-        documents) should not.
-        """
-        return (
-            indent_level is not None
-            and (
-                not self.preserve_whitespace_tags
-                or self.name not in self.preserve_whitespace_tags
-            )
-        )
-
-    def prettify(self, encoding=None, formatter="minimal"):
-        """Pretty-print this PageElement as a string.
-
-        :param encoding: The eventual encoding of the string. If this is None,
-            a Unicode string will be returned.
-        :param formatter: A Formatter object, or a string naming one of
-            the standard formatters.
-        :return: A Unicode string (if encoding==None) or a bytestring 
-            (otherwise).
-        """
-        if encoding is None:
-            return self.decode(True, formatter=formatter)
-        else:
-            return self.encode(encoding, True, formatter=formatter)
-
-    def decode_contents(self, indent_level=None,
-                       eventual_encoding=DEFAULT_OUTPUT_ENCODING,
-                       formatter="minimal"):
-        """Renders the contents of this tag as a Unicode string.
-
-        :param indent_level: Each line of the rendering will be
-           indented this many spaces. Used internally in
-           recursive calls while pretty-printing.
-
-        :param eventual_encoding: The tag is destined to be
-           encoded into this encoding. decode_contents() is _not_
-           responsible for performing that encoding. This information
-           is passed in so that it can be substituted in if the
-           document contains a  tag that mentions the document's
-           encoding.
-
-        :param formatter: A Formatter object, or a string naming one of
-            the standard Formatters.
-        """
-        # First off, turn a string formatter into a Formatter object. This
-        # will stop the lookup from happening over and over again.
-        if not isinstance(formatter, Formatter):
-            formatter = self.formatter_for_name(formatter)
-
-        pretty_print = (indent_level is not None)
-        s = []
-        for c in self:
-            text = None
-            if isinstance(c, NavigableString):
-                text = c.output_ready(formatter)
-            elif isinstance(c, Tag):
-                s.append(c.decode(indent_level, eventual_encoding,
-                                  formatter))
-            preserve_whitespace = (
-                self.preserve_whitespace_tags and self.name in self.preserve_whitespace_tags
-            )
-            if text and indent_level and not preserve_whitespace:
-                text = text.strip()
-            if text:
-                if pretty_print and not preserve_whitespace:
-                    s.append(" " * (indent_level - 1))
-                s.append(text)
-                if pretty_print and not preserve_whitespace:
-                    s.append("\n")
-        return ''.join(s)
-       
-    def encode_contents(
-        self, indent_level=None, encoding=DEFAULT_OUTPUT_ENCODING,
-        formatter="minimal"):
-        """Renders the contents of this PageElement as a bytestring.
-
-        :param indent_level: Each line of the rendering will be
-           indented this many spaces. Used internally in
-           recursive calls while pretty-printing.
-
-        :param eventual_encoding: The bytestring will be in this encoding.
-
-        :param formatter: A Formatter object, or a string naming one of
-            the standard Formatters.
-
-        :return: A bytestring.
-        """
-        contents = self.decode_contents(indent_level, encoding, formatter)
-        return contents.encode(encoding)
-
-    # Old method for BS3 compatibility
-    def renderContents(self, encoding=DEFAULT_OUTPUT_ENCODING,
-                       prettyPrint=False, indentLevel=0):
-        """Deprecated method for BS3 compatibility."""
-        if not prettyPrint:
-            indentLevel = None
-        return self.encode_contents(
-            indent_level=indentLevel, encoding=encoding)
-
-    #Soup methods
-
-    def find(self, name=None, attrs={}, recursive=True, text=None,
-             **kwargs):
-        """Look in the children of this PageElement and find the first
-        PageElement that matches the given criteria.
-
-        All find_* methods take a common set of arguments. See the online
-        documentation for detailed explanations.
-
-        :param name: A filter on tag name.
-        :param attrs: A dictionary of filters on attribute values.
-        :param recursive: If this is True, find() will perform a
-            recursive search of this PageElement's children. Otherwise,
-            only the direct children will be considered.
-        :param limit: Stop looking after finding this many results.
-        :kwargs: A dictionary of filters on attribute values.
-        :return: A PageElement.
-        :rtype: bs4.element.Tag | bs4.element.NavigableString
-        """
-        r = None
-        l = self.find_all(name, attrs, recursive, text, 1, **kwargs)
-        if l:
-            r = l[0]
-        return r
-    findChild = find #BS2
-
-    def find_all(self, name=None, attrs={}, recursive=True, text=None,
-                 limit=None, **kwargs):
-        """Look in the children of this PageElement and find all
-        PageElements that match the given criteria.
-
-        All find_* methods take a common set of arguments. See the online
-        documentation for detailed explanations.
-
-        :param name: A filter on tag name.
-        :param attrs: A dictionary of filters on attribute values.
-        :param recursive: If this is True, find_all() will perform a
-            recursive search of this PageElement's children. Otherwise,
-            only the direct children will be considered.
-        :param limit: Stop looking after finding this many results.
-        :kwargs: A dictionary of filters on attribute values.
-        :return: A ResultSet of PageElements.
-        :rtype: bs4.element.ResultSet
-        """
-        generator = self.descendants
-        if not recursive:
-            generator = self.children
-        return self._find_all(name, attrs, text, limit, generator, **kwargs)
-    findAll = find_all       # BS3
-    findChildren = find_all  # BS2
-
-    #Generator methods
-    @property
-    def children(self):
-        """Iterate over all direct children of this PageElement.
-
-        :yield: A sequence of PageElements.
-        """
-        # return iter() to make the purpose of the method clear
-        return iter(self.contents)  # XXX This seems to be untested.
-
-    @property
-    def descendants(self):
-        """Iterate over all children of this PageElement in a
-        breadth-first sequence.
-
-        :yield: A sequence of PageElements.
-        """
-        if not len(self.contents):
-            return
-        stopNode = self._last_descendant().next_element
-        current = self.contents[0]
-        while current is not stopNode:
-            yield current
-            current = current.next_element
-
-    # CSS selector code
-    def select_one(self, selector, namespaces=None, **kwargs):
-        """Perform a CSS selection operation on the current element.
-
-        :param selector: A CSS selector.
-
-        :param namespaces: A dictionary mapping namespace prefixes
-           used in the CSS selector to namespace URIs. By default,
-           Beautiful Soup will use the prefixes it encountered while
-           parsing the document.
-
-        :param kwargs: Keyword arguments to be passed into SoupSieve's 
-           soupsieve.select() method.
-
-        :return: A Tag.
-        :rtype: bs4.element.Tag
-        """
-        value = self.select(selector, namespaces, 1, **kwargs)
-        if value:
-            return value[0]
-        return None
-
-    def select(self, selector, namespaces=None, limit=None, **kwargs):
-        """Perform a CSS selection operation on the current element.
-
-        This uses the SoupSieve library.
-
-        :param selector: A string containing a CSS selector.
-
-        :param namespaces: A dictionary mapping namespace prefixes
-           used in the CSS selector to namespace URIs. By default,
-           Beautiful Soup will use the prefixes it encountered while
-           parsing the document.
-
-        :param limit: After finding this number of results, stop looking.
-
-        :param kwargs: Keyword arguments to be passed into SoupSieve's 
-           soupsieve.select() method.
-
-        :return: A ResultSet of Tags.
-        :rtype: bs4.element.ResultSet
-        """
-        if namespaces is None:
-            namespaces = self._namespaces
-        
-        if limit is None:
-            limit = 0
-        if soupsieve is None:
-            raise NotImplementedError(
-                "Cannot execute CSS selectors because the soupsieve package is not installed."
-            )
-            
-        results = soupsieve.select(selector, self, namespaces, limit, **kwargs)
-
-        # We do this because it's more consistent and because
-        # ResultSet.__getattr__ has a helpful error message.
-        return ResultSet(None, results)
-
-    # Old names for backwards compatibility
-    def childGenerator(self):
-        """Deprecated generator."""
-        return self.children
-
-    def recursiveChildGenerator(self):
-        """Deprecated generator."""
-        return self.descendants
-
-    def has_key(self, key):
-        """Deprecated method. This was kind of misleading because has_key()
-        (attributes) was different from __in__ (contents).
-
-        has_key() is gone in Python 3, anyway.
-        """
-        warnings.warn('has_key is deprecated. Use has_attr("%s") instead.' % (
-                key))
-        return self.has_attr(key)
-
-# Next, a couple classes to represent queries and their results.
-class SoupStrainer(object):
-    """Encapsulates a number of ways of matching a markup element (tag or
-    string).
-
-    This is primarily used to underpin the find_* methods, but you can
-    create one yourself and pass it in as `parse_only` to the
-    `BeautifulSoup` constructor, to parse a subset of a large
-    document.
-    """
-
-    def __init__(self, name=None, attrs={}, text=None, **kwargs):
-        """Constructor.
-
-        The SoupStrainer constructor takes the same arguments passed
-        into the find_* methods. See the online documentation for
-        detailed explanations.
-
-        :param name: A filter on tag name.
-        :param attrs: A dictionary of filters on attribute values.
-        :param text: A filter for a NavigableString with specific text.
-        :kwargs: A dictionary of filters on attribute values.
-        """        
-        self.name = self._normalize_search_value(name)
-        if not isinstance(attrs, dict):
-            # Treat a non-dict value for attrs as a search for the 'class'
-            # attribute.
-            kwargs['class'] = attrs
-            attrs = None
-
-        if 'class_' in kwargs:
-            # Treat class_="foo" as a search for the 'class'
-            # attribute, overriding any non-dict value for attrs.
-            kwargs['class'] = kwargs['class_']
-            del kwargs['class_']
-
-        if kwargs:
-            if attrs:
-                attrs = attrs.copy()
-                attrs.update(kwargs)
-            else:
-                attrs = kwargs
-        normalized_attrs = {}
-        for key, value in list(attrs.items()):
-            normalized_attrs[key] = self._normalize_search_value(value)
-
-        self.attrs = normalized_attrs
-        self.text = self._normalize_search_value(text)
-
-    def _normalize_search_value(self, value):
-        # Leave it alone if it's a Unicode string, a callable, a
-        # regular expression, a boolean, or None.
-        if (isinstance(value, str) or isinstance(value, Callable) or hasattr(value, 'match')
-            or isinstance(value, bool) or value is None):
-            return value
-
-        # If it's a bytestring, convert it to Unicode, treating it as UTF-8.
-        if isinstance(value, bytes):
-            return value.decode("utf8")
-
-        # If it's listlike, convert it into a list of strings.
-        if hasattr(value, '__iter__'):
-            new_value = []
-            for v in value:
-                if (hasattr(v, '__iter__') and not isinstance(v, bytes)
-                    and not isinstance(v, str)):
-                    # This is almost certainly the user's mistake. In the
-                    # interests of avoiding infinite loops, we'll let
-                    # it through as-is rather than doing a recursive call.
-                    new_value.append(v)
-                else:
-                    new_value.append(self._normalize_search_value(v))
-            return new_value
-
-        # Otherwise, convert it into a Unicode string.
-        # The unicode(str()) thing is so this will do the same thing on Python 2
-        # and Python 3.
-        return str(str(value))
-
-    def __str__(self):
-        """A human-readable representation of this SoupStrainer."""
-        if self.text:
-            return self.text
-        else:
-            return "%s|%s" % (self.name, self.attrs)
-
-    def search_tag(self, markup_name=None, markup_attrs={}):
-        """Check whether a Tag with the given name and attributes would
-        match this SoupStrainer.
-
-        Used prospectively to decide whether to even bother creating a Tag
-        object.
-
-        :param markup_name: A tag name as found in some markup.
-        :param markup_attrs: A dictionary of attributes as found in some markup.
-
-        :return: True if the prospective tag would match this SoupStrainer;
-            False otherwise.
-        """
-        found = None
-        markup = None
-        if isinstance(markup_name, Tag):
-            markup = markup_name
-            markup_attrs = markup
-        call_function_with_tag_data = (
-            isinstance(self.name, Callable)
-            and not isinstance(markup_name, Tag))
-
-        if ((not self.name)
-            or call_function_with_tag_data
-            or (markup and self._matches(markup, self.name))
-            or (not markup and self._matches(markup_name, self.name))):
-            if call_function_with_tag_data:
-                match = self.name(markup_name, markup_attrs)
-            else:
-                match = True
-                markup_attr_map = None
-                for attr, match_against in list(self.attrs.items()):
-                    if not markup_attr_map:
-                        if hasattr(markup_attrs, 'get'):
-                            markup_attr_map = markup_attrs
-                        else:
-                            markup_attr_map = {}
-                            for k, v in markup_attrs:
-                                markup_attr_map[k] = v
-                    attr_value = markup_attr_map.get(attr)
-                    if not self._matches(attr_value, match_against):
-                        match = False
-                        break
-            if match:
-                if markup:
-                    found = markup
-                else:
-                    found = markup_name
-        if found and self.text and not self._matches(found.string, self.text):
-            found = None
-        return found
-
-    # For BS3 compatibility.
-    searchTag = search_tag
-
-    def search(self, markup):
-        """Find all items in `markup` that match this SoupStrainer.
-
-        Used by the core _find_all() method, which is ultimately
-        called by all find_* methods.
-
-        :param markup: A PageElement or a list of them.
-        """
-        # print('looking for %s in %s' % (self, markup))
-        found = None
-        # If given a list of items, scan it for a text element that
-        # matches.
-        if hasattr(markup, '__iter__') and not isinstance(markup, (Tag, str)):
-            for element in markup:
-                if isinstance(element, NavigableString) \
-                       and self.search(element):
-                    found = element
-                    break
-        # If it's a Tag, make sure its name or attributes match.
-        # Don't bother with Tags if we're searching for text.
-        elif isinstance(markup, Tag):
-            if not self.text or self.name or self.attrs:
-                found = self.search_tag(markup)
-        # If it's text, make sure the text matches.
-        elif isinstance(markup, NavigableString) or \
-                 isinstance(markup, str):
-            if not self.name and not self.attrs and self._matches(markup, self.text):
-                found = markup
-        else:
-            raise Exception(
-                "I don't know how to match against a %s" % markup.__class__)
-        return found
-
-    def _matches(self, markup, match_against, already_tried=None):
-        # print(u"Matching %s against %s" % (markup, match_against))
-        result = False
-        if isinstance(markup, list) or isinstance(markup, tuple):
-            # This should only happen when searching a multi-valued attribute
-            # like 'class'.
-            for item in markup:
-                if self._matches(item, match_against):
-                    return True
-            # We didn't match any particular value of the multivalue
-            # attribute, but maybe we match the attribute value when
-            # considered as a string.
-            if self._matches(' '.join(markup), match_against):
-                return True
-            return False
-        
-        if match_against is True:
-            # True matches any non-None value.
-            return markup is not None
-
-        if isinstance(match_against, Callable):
-            return match_against(markup)
-
-        # Custom callables take the tag as an argument, but all
-        # other ways of matching match the tag name as a string.
-        original_markup = markup
-        if isinstance(markup, Tag):
-            markup = markup.name
-
-        # Ensure that `markup` is either a Unicode string, or None.
-        markup = self._normalize_search_value(markup)
-
-        if markup is None:
-            # None matches None, False, an empty string, an empty list, and so on.
-            return not match_against
-
-        if (hasattr(match_against, '__iter__')
-            and not isinstance(match_against, str)):
-            # We're asked to match against an iterable of items.
-            # The markup must be match at least one item in the
-            # iterable. We'll try each one in turn.
-            #
-            # To avoid infinite recursion we need to keep track of
-            # items we've already seen.
-            if not already_tried:
-                already_tried = set()
-            for item in match_against:
-                if item.__hash__:
-                    key = item
-                else:
-                    key = id(item)
-                if key in already_tried:
-                    continue
-                else:
-                    already_tried.add(key)
-                    if self._matches(original_markup, item, already_tried):
-                        return True
-            else:
-                return False
-        
-        # Beyond this point we might need to run the test twice: once against
-        # the tag's name and once against its prefixed name.
-        match = False
-        
-        if not match and isinstance(match_against, str):
-            # Exact string match
-            match = markup == match_against
-
-        if not match and hasattr(match_against, 'search'):
-            # Regexp match
-            return match_against.search(markup)
-
-        if (not match
-            and isinstance(original_markup, Tag)
-            and original_markup.prefix):
-            # Try the whole thing again with the prefixed tag name.
-            return self._matches(
-                original_markup.prefix + ':' + original_markup.name, match_against
-            )
-
-        return match
-
-
-class ResultSet(list):
-    """A ResultSet is just a list that keeps track of the SoupStrainer
-    that created it."""
-    def __init__(self, source, result=()):
-        """Constructor.
-
-        :param source: A SoupStrainer.
-        :param result: A list of PageElements.
-        """
-        super(ResultSet, self).__init__(result)
-        self.source = source
-
-    def __getattr__(self, key):
-        """Raise a helpful exception to explain a common code fix."""
-        raise AttributeError(
-            "ResultSet object has no attribute '%s'. You're probably treating a list of elements like a single element. Did you call find_all() when you meant to call find()?" % key
-        )
diff --git a/Jobs_Collections/venv/Lib/python3.8/site-packages/bs4/formatter.py b/Jobs_Collections/venv/Lib/python3.8/site-packages/bs4/formatter.py
deleted file mode 100644
index 2cbab4c..0000000
--- a/Jobs_Collections/venv/Lib/python3.8/site-packages/bs4/formatter.py
+++ /dev/null
@@ -1,152 +0,0 @@
-from bs4.dammit import EntitySubstitution
-
-class Formatter(EntitySubstitution):
-    """Describes a strategy to use when outputting a parse tree to a string.
-
-    Some parts of this strategy come from the distinction between
-    HTML4, HTML5, and XML. Others are configurable by the user.
-
-    Formatters are passed in as the `formatter` argument to methods
-    like `PageElement.encode`. Most people won't need to think about
-    formatters, and most people who need to think about them can pass
-    in one of these predefined strings as `formatter` rather than
-    making a new Formatter object:
-
-    For HTML documents:
-     * 'html' - HTML entity substitution for generic HTML documents. (default)
-     * 'html5' - HTML entity substitution for HTML5 documents.
-     * 'minimal' - Only make the substitutions necessary to guarantee
-                   valid HTML.
-     * None - Do not perform any substitution. This will be faster
-              but may result in invalid markup.
-
-    For XML documents:
-     * 'html' - Entity substitution for XHTML documents.
-     * 'minimal' - Only make the substitutions necessary to guarantee
-                   valid XML. (default)
-     * None - Do not perform any substitution. This will be faster
-              but may result in invalid markup.
-    """
-    # Registries of XML and HTML formatters.
-    XML_FORMATTERS = {}
-    HTML_FORMATTERS = {}
-
-    HTML = 'html'
-    XML = 'xml'
-
-    HTML_DEFAULTS = dict(
-        cdata_containing_tags=set(["script", "style"]),
-    )
-
-    def _default(self, language, value, kwarg):
-        if value is not None:
-            return value
-        if language == self.XML:
-            return set()
-        return self.HTML_DEFAULTS[kwarg]
-
-    def __init__(
-            self, language=None, entity_substitution=None,
-            void_element_close_prefix='/', cdata_containing_tags=None,
-    ):
-        """Constructor.
-
-        :param language: This should be Formatter.XML if you are formatting
-           XML markup and Formatter.HTML if you are formatting HTML markup.
-
-        :param entity_substitution: A function to call to replace special
-           characters with XML/HTML entities. For examples, see 
-           bs4.dammit.EntitySubstitution.substitute_html and substitute_xml.
-        :param void_element_close_prefix: By default, void elements
-           are represented as  (XML rules) rather than 
-           (HTML rules). To get , pass in the empty string.
-        :param cdata_containing_tags: The list of tags that are defined
-           as containing CDATA in this dialect. For example, in HTML,
-           
-
This numeric entity is missing the final semicolon:
- -
a
-
This document contains (do you see it?)
-
This document ends with That attribute value was bogus
-The doctype is invalid because it contains extra whitespace -
That boolean attribute had no value
-
Here's a nonexistent entity: &#foo; (do you see it?)
-
This document ends before the entity finishes: > -

Paragraphs shouldn't contain block display elements, but this one does:

you see?

-Multiple values for the same attribute. -
Here's a table
-
-
This tag contains nothing but whitespace:
-

This p tag is cut off by

the end of the blockquote tag
-
Here's a nested table:
foo
This table contains bare markup
- -
This document contains a surprise doctype
- -
Tag name contains Unicode characters
- - -""" - - -class SoupTest(unittest.TestCase): - - @property - def default_builder(self): - return default_builder - - def soup(self, markup, **kwargs): - """Build a Beautiful Soup object from markup.""" - builder = kwargs.pop('builder', self.default_builder) - return BeautifulSoup(markup, builder=builder, **kwargs) - - def document_for(self, markup, **kwargs): - """Turn an HTML fragment into a document. - - The details depend on the builder. - """ - return self.default_builder(**kwargs).test_fragment_to_document(markup) - - def assertSoupEquals(self, to_parse, compare_parsed_to=None): - builder = self.default_builder - obj = BeautifulSoup(to_parse, builder=builder) - if compare_parsed_to is None: - compare_parsed_to = to_parse - - self.assertEqual(obj.decode(), self.document_for(compare_parsed_to)) - - def assertConnectedness(self, element): - """Ensure that next_element and previous_element are properly - set for all descendants of the given element. - """ - earlier = None - for e in element.descendants: - if earlier: - self.assertEqual(e, earlier.next_element) - self.assertEqual(earlier, e.previous_element) - earlier = e - - def linkage_validator(self, el, _recursive_call=False): - """Ensure proper linkage throughout the document.""" - descendant = None - # Document element should have no previous element or previous sibling. - # It also shouldn't have a next sibling. - if el.parent is None: - assert el.previous_element is None,\ - "Bad previous_element\nNODE: {}\nPREV: {}\nEXPECTED: {}".format( - el, el.previous_element, None - ) - assert el.previous_sibling is None,\ - "Bad previous_sibling\nNODE: {}\nPREV: {}\nEXPECTED: {}".format( - el, el.previous_sibling, None - ) - assert el.next_sibling is None,\ - "Bad next_sibling\nNODE: {}\nNEXT: {}\nEXPECTED: {}".format( - el, el.next_sibling, None - ) - - idx = 0 - child = None - last_child = None - last_idx = len(el.contents) - 1 - for child in el.contents: - descendant = None - - # Parent should link next element to their first child - # That child should have no previous sibling - if idx == 0: - if el.parent is not None: - assert el.next_element is child,\ - "Bad next_element\nNODE: {}\nNEXT: {}\nEXPECTED: {}".format( - el, el.next_element, child - ) - assert child.previous_element is el,\ - "Bad previous_element\nNODE: {}\nPREV: {}\nEXPECTED: {}".format( - child, child.previous_element, el - ) - assert child.previous_sibling is None,\ - "Bad previous_sibling\nNODE: {}\nPREV {}\nEXPECTED: {}".format( - child, child.previous_sibling, None - ) - - # If not the first child, previous index should link as sibling to this index - # Previous element should match the last index or the last bubbled up descendant - else: - assert child.previous_sibling is el.contents[idx - 1],\ - "Bad previous_sibling\nNODE: {}\nPREV {}\nEXPECTED {}".format( - child, child.previous_sibling, el.contents[idx - 1] - ) - assert el.contents[idx - 1].next_sibling is child,\ - "Bad next_sibling\nNODE: {}\nNEXT {}\nEXPECTED {}".format( - el.contents[idx - 1], el.contents[idx - 1].next_sibling, child - ) - - if last_child is not None: - assert child.previous_element is last_child,\ - "Bad previous_element\nNODE: {}\nPREV {}\nEXPECTED {}\nCONTENTS {}".format( - child, child.previous_element, last_child, child.parent.contents - ) - assert last_child.next_element is child,\ - "Bad next_element\nNODE: {}\nNEXT {}\nEXPECTED {}".format( - last_child, last_child.next_element, child - ) - - if isinstance(child, Tag) and child.contents: - descendant = self.linkage_validator(child, True) - # A bubbled up descendant should have no next siblings - assert descendant.next_sibling is None,\ - "Bad next_sibling\nNODE: {}\nNEXT {}\nEXPECTED {}".format( - descendant, descendant.next_sibling, None - ) - - # Mark last child as either the bubbled up descendant or the current child - if descendant is not None: - last_child = descendant - else: - last_child = child - - # If last child, there are non next siblings - if idx == last_idx: - assert child.next_sibling is None,\ - "Bad next_sibling\nNODE: {}\nNEXT {}\nEXPECTED {}".format( - child, child.next_sibling, None - ) - idx += 1 - - child = descendant if descendant is not None else child - if child is None: - child = el - - if not _recursive_call and child is not None: - target = el - while True: - if target is None: - assert child.next_element is None, \ - "Bad next_element\nNODE: {}\nNEXT {}\nEXPECTED {}".format( - child, child.next_element, None - ) - break - elif target.next_sibling is not None: - assert child.next_element is target.next_sibling, \ - "Bad next_element\nNODE: {}\nNEXT {}\nEXPECTED {}".format( - child, child.next_element, target.next_sibling - ) - break - target = target.parent - - # We are done, so nothing to return - return None - else: - # Return the child to the recursive caller - return child - - -class HTMLTreeBuilderSmokeTest(object): - - """A basic test of a treebuilder's competence. - - Any HTML treebuilder, present or future, should be able to pass - these tests. With invalid markup, there's room for interpretation, - and different parsers can handle it differently. But with the - markup in these tests, there's not much room for interpretation. - """ - - def test_empty_element_tags(self): - """Verify that all HTML4 and HTML5 empty element (aka void element) tags - are handled correctly. - """ - for name in [ - 'area', 'base', 'br', 'col', 'embed', 'hr', 'img', 'input', 'keygen', 'link', 'menuitem', 'meta', 'param', 'source', 'track', 'wbr', - 'spacer', 'frame' - ]: - soup = self.soup("") - new_tag = soup.new_tag(name) - self.assertEqual(True, new_tag.is_empty_element) - - def test_special_string_containers(self): - soup = self.soup( - "" - ) - assert isinstance(soup.style.string, Stylesheet) - assert isinstance(soup.script.string, Script) - - soup = self.soup( - "" - ) - assert isinstance(soup.style.string, Stylesheet) - # The contents of the style tag resemble an HTML comment, but - # it's not treated as a comment. - self.assertEqual("", soup.style.string) - assert isinstance(soup.style.string, Stylesheet) - - def test_pickle_and_unpickle_identity(self): - # Pickling a tree, then unpickling it, yields a tree identical - # to the original. - tree = self.soup("foo") - dumped = pickle.dumps(tree, 2) - loaded = pickle.loads(dumped) - self.assertEqual(loaded.__class__, BeautifulSoup) - self.assertEqual(loaded.decode(), tree.decode()) - - def assertDoctypeHandled(self, doctype_fragment): - """Assert that a given doctype string is handled correctly.""" - doctype_str, soup = self._document_with_doctype(doctype_fragment) - - # Make sure a Doctype object was created. - doctype = soup.contents[0] - self.assertEqual(doctype.__class__, Doctype) - self.assertEqual(doctype, doctype_fragment) - self.assertEqual( - soup.encode("utf8")[:len(doctype_str)], - doctype_str - ) - - # Make sure that the doctype was correctly associated with the - # parse tree and that the rest of the document parsed. - self.assertEqual(soup.p.contents[0], 'foo') - - def _document_with_doctype(self, doctype_fragment, doctype_string="DOCTYPE"): - """Generate and parse a document with the given doctype.""" - doctype = '' % (doctype_string, doctype_fragment) - markup = doctype + '\n

foo

' - soup = self.soup(markup) - return doctype.encode("utf8"), soup - - def test_normal_doctypes(self): - """Make sure normal, everyday HTML doctypes are handled correctly.""" - self.assertDoctypeHandled("html") - self.assertDoctypeHandled( - 'html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"') - - def test_empty_doctype(self): - soup = self.soup("") - doctype = soup.contents[0] - self.assertEqual("", doctype.strip()) - - def test_mixed_case_doctype(self): - # A lowercase or mixed-case doctype becomes a Doctype. - for doctype_fragment in ("doctype", "DocType"): - doctype_str, soup = self._document_with_doctype( - "html", doctype_fragment - ) - - # Make sure a Doctype object was created and that the DOCTYPE - # is uppercase. - doctype = soup.contents[0] - self.assertEqual(doctype.__class__, Doctype) - self.assertEqual(doctype, "html") - self.assertEqual( - soup.encode("utf8")[:len(doctype_str)], - b"" - ) - - # Make sure that the doctype was correctly associated with the - # parse tree and that the rest of the document parsed. - self.assertEqual(soup.p.contents[0], 'foo') - - def test_public_doctype_with_url(self): - doctype = 'html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"' - self.assertDoctypeHandled(doctype) - - def test_system_doctype(self): - self.assertDoctypeHandled('foo SYSTEM "http://www.example.com/"') - - def test_namespaced_system_doctype(self): - # We can handle a namespaced doctype with a system ID. - self.assertDoctypeHandled('xsl:stylesheet SYSTEM "htmlent.dtd"') - - def test_namespaced_public_doctype(self): - # Test a namespaced doctype with a public id. - self.assertDoctypeHandled('xsl:stylesheet PUBLIC "htmlent.dtd"') - - def test_real_xhtml_document(self): - """A real XHTML document should come out more or less the same as it went in.""" - markup = b""" - - -Hello. -Goodbye. -""" - soup = self.soup(markup) - self.assertEqual( - soup.encode("utf-8").replace(b"\n", b""), - markup.replace(b"\n", b"")) - - def test_namespaced_html(self): - """When a namespaced XML document is parsed as HTML it should - be treated as HTML with weird tag names. - """ - markup = b"""content""" - soup = self.soup(markup) - self.assertEqual(2, len(soup.find_all("ns1:foo"))) - - def test_processing_instruction(self): - # We test both Unicode and bytestring to verify that - # process_markup correctly sets processing_instruction_class - # even when the markup is already Unicode and there is no - # need to process anything. - markup = """""" - soup = self.soup(markup) - self.assertEqual(markup, soup.decode()) - - markup = b"""""" - soup = self.soup(markup) - self.assertEqual(markup, soup.encode("utf8")) - - def test_deepcopy(self): - """Make sure you can copy the tree builder. - - This is important because the builder is part of a - BeautifulSoup object, and we want to be able to copy that. - """ - copy.deepcopy(self.default_builder) - - def test_p_tag_is_never_empty_element(self): - """A

tag is never designated as an empty-element tag. - - Even if the markup shows it as an empty-element tag, it - shouldn't be presented that way. - """ - soup = self.soup("

") - self.assertFalse(soup.p.is_empty_element) - self.assertEqual(str(soup.p), "

") - - def test_unclosed_tags_get_closed(self): - """A tag that's not closed by the end of the document should be closed. - - This applies to all tags except empty-element tags. - """ - self.assertSoupEquals("

", "

") - self.assertSoupEquals("", "") - - self.assertSoupEquals("
", "
") - - def test_br_is_always_empty_element_tag(self): - """A
tag is designated as an empty-element tag. - - Some parsers treat

as one
tag, some parsers as - two tags, but it should always be an empty-element tag. - """ - soup = self.soup("

") - self.assertTrue(soup.br.is_empty_element) - self.assertEqual(str(soup.br), "
") - - def test_nested_formatting_elements(self): - self.assertSoupEquals("") - - def test_double_head(self): - html = ''' - - -Ordinary HEAD element test - - - -Hello, world! - - -''' - soup = self.soup(html) - self.assertEqual("text/javascript", soup.find('script')['type']) - - def test_comment(self): - # Comments are represented as Comment objects. - markup = "

foobaz

" - self.assertSoupEquals(markup) - - soup = self.soup(markup) - comment = soup.find(text="foobar") - self.assertEqual(comment.__class__, Comment) - - # The comment is properly integrated into the tree. - foo = soup.find(text="foo") - self.assertEqual(comment, foo.next_element) - baz = soup.find(text="baz") - self.assertEqual(comment, baz.previous_element) - - def test_preserved_whitespace_in_pre_and_textarea(self): - """Whitespace must be preserved in
 and "
-        self.assertSoupEquals(pre_markup)
-        self.assertSoupEquals(textarea_markup)
-
-        soup = self.soup(pre_markup)
-        self.assertEqual(soup.pre.prettify(), pre_markup)
-
-        soup = self.soup(textarea_markup)
-        self.assertEqual(soup.textarea.prettify(), textarea_markup)
-
-        soup = self.soup("")
-        self.assertEqual(soup.textarea.prettify(), "")
-
-    def test_nested_inline_elements(self):
-        """Inline elements can be nested indefinitely."""
-        b_tag = "Inside a B tag"
-        self.assertSoupEquals(b_tag)
-
-        nested_b_tag = "

A nested tag

" - self.assertSoupEquals(nested_b_tag) - - double_nested_b_tag = "

A doubly nested tag

" - self.assertSoupEquals(nested_b_tag) - - def test_nested_block_level_elements(self): - """Block elements can be nested.""" - soup = self.soup('

Foo

') - blockquote = soup.blockquote - self.assertEqual(blockquote.p.b.string, 'Foo') - self.assertEqual(blockquote.b.string, 'Foo') - - def test_correctly_nested_tables(self): - """One table can go inside another one.""" - markup = ('' - '' - "') - - self.assertSoupEquals( - markup, - '
Here's another table:" - '' - '' - '
foo
Here\'s another table:' - '
foo
' - '
') - - self.assertSoupEquals( - "" - "" - "
Foo
Bar
Baz
") - - def test_multivalued_attribute_with_whitespace(self): - # Whitespace separating the values of a multi-valued attribute - # should be ignored. - - markup = '
' - soup = self.soup(markup) - self.assertEqual(['foo', 'bar'], soup.div['class']) - - # If you search by the literal name of the class it's like the whitespace - # wasn't there. - self.assertEqual(soup.div, soup.find('div', class_="foo bar")) - - def test_deeply_nested_multivalued_attribute(self): - # html5lib can set the attributes of the same tag many times - # as it rearranges the tree. This has caused problems with - # multivalued attributes. - markup = '
' - soup = self.soup(markup) - self.assertEqual(["css"], soup.div.div['class']) - - def test_multivalued_attribute_on_html(self): - # html5lib uses a different API to set the attributes ot the - # tag. This has caused problems with multivalued - # attributes. - markup = '' - soup = self.soup(markup) - self.assertEqual(["a", "b"], soup.html['class']) - - def test_angle_brackets_in_attribute_values_are_escaped(self): - self.assertSoupEquals('', '') - - def test_strings_resembling_character_entity_references(self): - # "&T" and "&p" look like incomplete character entities, but they are - # not. - self.assertSoupEquals( - "

• AT&T is in the s&p 500

", - "

\u2022 AT&T is in the s&p 500

" - ) - - def test_apos_entity(self): - self.assertSoupEquals( - "

Bob's Bar

", - "

Bob's Bar

", - ) - - def test_entities_in_foreign_document_encoding(self): - # “ and ” are invalid numeric entities referencing - # Windows-1252 characters. - references a character common - # to Windows-1252 and Unicode, and ☃ references a - # character only found in Unicode. - # - # All of these entities should be converted to Unicode - # characters. - markup = "

“Hello” -☃

" - soup = self.soup(markup) - self.assertEqual("โ€œHelloโ€ -โ˜ƒ", soup.p.string) - - def test_entities_in_attributes_converted_to_unicode(self): - expect = '

' - self.assertSoupEquals('

', expect) - self.assertSoupEquals('

', expect) - self.assertSoupEquals('

', expect) - self.assertSoupEquals('

', expect) - - def test_entities_in_text_converted_to_unicode(self): - expect = '

pi\N{LATIN SMALL LETTER N WITH TILDE}ata

' - self.assertSoupEquals("

piñata

", expect) - self.assertSoupEquals("

piñata

", expect) - self.assertSoupEquals("

piñata

", expect) - self.assertSoupEquals("

piñata

", expect) - - def test_quot_entity_converted_to_quotation_mark(self): - self.assertSoupEquals("

I said "good day!"

", - '

I said "good day!"

') - - def test_out_of_range_entity(self): - expect = "\N{REPLACEMENT CHARACTER}" - self.assertSoupEquals("�", expect) - self.assertSoupEquals("�", expect) - self.assertSoupEquals("�", expect) - - def test_multipart_strings(self): - "Mostly to prevent a recurrence of a bug in the html5lib treebuilder." - soup = self.soup("

\nfoo

") - self.assertEqual("p", soup.h2.string.next_element.name) - self.assertEqual("p", soup.p.name) - self.assertConnectedness(soup) - - def test_empty_element_tags(self): - """Verify consistent handling of empty-element tags, - no matter how they come in through the markup. - """ - self.assertSoupEquals('


', "


") - self.assertSoupEquals('


', "


") - - def test_head_tag_between_head_and_body(self): - "Prevent recurrence of a bug in the html5lib treebuilder." - content = """ - - foo - -""" - soup = self.soup(content) - self.assertNotEqual(None, soup.html.body) - self.assertConnectedness(soup) - - def test_multiple_copies_of_a_tag(self): - "Prevent recurrence of a bug in the html5lib treebuilder." - content = """ - - - - - -""" - soup = self.soup(content) - self.assertConnectedness(soup.article) - - def test_basic_namespaces(self): - """Parsers don't need to *understand* namespaces, but at the - very least they should not choke on namespaces or lose - data.""" - - markup = b'4' - soup = self.soup(markup) - self.assertEqual(markup, soup.encode()) - html = soup.html - self.assertEqual('http://www.w3.org/1999/xhtml', soup.html['xmlns']) - self.assertEqual( - 'http://www.w3.org/1998/Math/MathML', soup.html['xmlns:mathml']) - self.assertEqual( - 'http://www.w3.org/2000/svg', soup.html['xmlns:svg']) - - def test_multivalued_attribute_value_becomes_list(self): - markup = b'' - soup = self.soup(markup) - self.assertEqual(['foo', 'bar'], soup.a['class']) - - # - # Generally speaking, tests below this point are more tests of - # Beautiful Soup than tests of the tree builders. But parsers are - # weird, so we run these tests separately for every tree builder - # to detect any differences between them. - # - - def test_can_parse_unicode_document(self): - # A seemingly innocuous document... but it's in Unicode! And - # it contains characters that can't be represented in the - # encoding found in the declaration! The horror! - markup = 'Sacr\N{LATIN SMALL LETTER E WITH ACUTE} bleu!' - soup = self.soup(markup) - self.assertEqual('Sacr\xe9 bleu!', soup.body.string) - - def test_soupstrainer(self): - """Parsers should be able to work with SoupStrainers.""" - strainer = SoupStrainer("b") - soup = self.soup("A bold statement", - parse_only=strainer) - self.assertEqual(soup.decode(), "bold") - - def test_single_quote_attribute_values_become_double_quotes(self): - self.assertSoupEquals("", - '') - - def test_attribute_values_with_nested_quotes_are_left_alone(self): - text = """a""" - self.assertSoupEquals(text) - - def test_attribute_values_with_double_nested_quotes_get_quoted(self): - text = """a""" - soup = self.soup(text) - soup.foo['attr'] = 'Brawls happen at "Bob\'s Bar"' - self.assertSoupEquals( - soup.foo.decode(), - """a""") - - def test_ampersand_in_attribute_value_gets_escaped(self): - self.assertSoupEquals('', - '') - - self.assertSoupEquals( - 'foo', - 'foo') - - def test_escaped_ampersand_in_attribute_value_is_left_alone(self): - self.assertSoupEquals('') - - def test_entities_in_strings_converted_during_parsing(self): - # Both XML and HTML entities are converted to Unicode characters - # during parsing. - text = "

<<sacré bleu!>>

" - expected = "

<<sacr\N{LATIN SMALL LETTER E WITH ACUTE} bleu!>>

" - self.assertSoupEquals(text, expected) - - def test_smart_quotes_converted_on_the_way_in(self): - # Microsoft smart quotes are converted to Unicode characters during - # parsing. - quote = b"

\x91Foo\x92

" - soup = self.soup(quote) - self.assertEqual( - soup.p.string, - "\N{LEFT SINGLE QUOTATION MARK}Foo\N{RIGHT SINGLE QUOTATION MARK}") - - def test_non_breaking_spaces_converted_on_the_way_in(self): - soup = self.soup("  ") - self.assertEqual(soup.a.string, "\N{NO-BREAK SPACE}" * 2) - - def test_entities_converted_on_the_way_out(self): - text = "

<<sacré bleu!>>

" - expected = "

<<sacr\N{LATIN SMALL LETTER E WITH ACUTE} bleu!>>

".encode("utf-8") - soup = self.soup(text) - self.assertEqual(soup.p.encode("utf-8"), expected) - - def test_real_iso_latin_document(self): - # Smoke test of interrelated functionality, using an - # easy-to-understand document. - - # Here it is in Unicode. Note that it claims to be in ISO-Latin-1. - unicode_html = '

Sacr\N{LATIN SMALL LETTER E WITH ACUTE} bleu!

' - - # That's because we're going to encode it into ISO-Latin-1, and use - # that to test. - iso_latin_html = unicode_html.encode("iso-8859-1") - - # Parse the ISO-Latin-1 HTML. - soup = self.soup(iso_latin_html) - # Encode it to UTF-8. - result = soup.encode("utf-8") - - # What do we expect the result to look like? Well, it would - # look like unicode_html, except that the META tag would say - # UTF-8 instead of ISO-Latin-1. - expected = unicode_html.replace("ISO-Latin-1", "utf-8") - - # And, of course, it would be in UTF-8, not Unicode. - expected = expected.encode("utf-8") - - # Ta-da! - self.assertEqual(result, expected) - - def test_real_shift_jis_document(self): - # Smoke test to make sure the parser can handle a document in - # Shift-JIS encoding, without choking. - shift_jis_html = ( - b'
'
-            b'\x82\xb1\x82\xea\x82\xcdShift-JIS\x82\xc5\x83R\x81[\x83f'
-            b'\x83B\x83\x93\x83O\x82\xb3\x82\xea\x82\xbd\x93\xfa\x96{\x8c'
-            b'\xea\x82\xcc\x83t\x83@\x83C\x83\x8b\x82\xc5\x82\xb7\x81B'
-            b'
') - unicode_html = shift_jis_html.decode("shift-jis") - soup = self.soup(unicode_html) - - # Make sure the parse tree is correctly encoded to various - # encodings. - self.assertEqual(soup.encode("utf-8"), unicode_html.encode("utf-8")) - self.assertEqual(soup.encode("euc_jp"), unicode_html.encode("euc_jp")) - - def test_real_hebrew_document(self): - # A real-world test to make sure we can convert ISO-8859-9 (a - # Hebrew encoding) to UTF-8. - hebrew_document = b'Hebrew (ISO 8859-8) in Visual Directionality

Hebrew (ISO 8859-8) in Visual Directionality

\xed\xe5\xec\xf9' - soup = self.soup( - hebrew_document, from_encoding="iso8859-8") - # Some tree builders call it iso8859-8, others call it iso-8859-9. - # That's not a difference we really care about. - assert soup.original_encoding in ('iso8859-8', 'iso-8859-8') - self.assertEqual( - soup.encode('utf-8'), - hebrew_document.decode("iso8859-8").encode("utf-8")) - - def test_meta_tag_reflects_current_encoding(self): - # Here's the tag saying that a document is - # encoded in Shift-JIS. - meta_tag = ('') - - # Here's a document incorporating that meta tag. - shift_jis_html = ( - '\n%s\n' - '' - 'Shift-JIS markup goes here.') % meta_tag - soup = self.soup(shift_jis_html) - - # Parse the document, and the charset is seemingly unaffected. - parsed_meta = soup.find('meta', {'http-equiv': 'Content-type'}) - content = parsed_meta['content'] - self.assertEqual('text/html; charset=x-sjis', content) - - # But that value is actually a ContentMetaAttributeValue object. - self.assertTrue(isinstance(content, ContentMetaAttributeValue)) - - # And it will take on a value that reflects its current - # encoding. - self.assertEqual('text/html; charset=utf8', content.encode("utf8")) - - # For the rest of the story, see TestSubstitutions in - # test_tree.py. - - def test_html5_style_meta_tag_reflects_current_encoding(self): - # Here's the tag saying that a document is - # encoded in Shift-JIS. - meta_tag = ('') - - # Here's a document incorporating that meta tag. - shift_jis_html = ( - '\n%s\n' - '' - 'Shift-JIS markup goes here.') % meta_tag - soup = self.soup(shift_jis_html) - - # Parse the document, and the charset is seemingly unaffected. - parsed_meta = soup.find('meta', id="encoding") - charset = parsed_meta['charset'] - self.assertEqual('x-sjis', charset) - - # But that value is actually a CharsetMetaAttributeValue object. - self.assertTrue(isinstance(charset, CharsetMetaAttributeValue)) - - # And it will take on a value that reflects its current - # encoding. - self.assertEqual('utf8', charset.encode("utf8")) - - def test_python_specific_encodings_not_used_in_charset(self): - # You can encode an HTML document using a Python-specific - # encoding, but that encoding won't be mentioned _inside_ the - # resulting document. Instead, the document will appear to - # have no encoding. - for markup in [ - b'' - b'' - ]: - soup = self.soup(markup) - for encoding in PYTHON_SPECIFIC_ENCODINGS: - if encoding in ( - 'idna', 'mbcs', 'oem', 'undefined', - 'string_escape', 'string-escape' - ): - # For one reason or another, these will raise an - # exception if we actually try to use them, so don't - # bother. - continue - encoded = soup.encode(encoding) - assert b'meta charset=""' in encoded - assert encoding.encode("ascii") not in encoded - - def test_tag_with_no_attributes_can_have_attributes_added(self): - data = self.soup("text") - data.a['foo'] = 'bar' - self.assertEqual('text', data.a.decode()) - - def test_worst_case(self): - """Test the worst case (currently) for linking issues.""" - - soup = self.soup(BAD_DOCUMENT) - self.linkage_validator(soup) - - -class XMLTreeBuilderSmokeTest(object): - - def test_pickle_and_unpickle_identity(self): - # Pickling a tree, then unpickling it, yields a tree identical - # to the original. - tree = self.soup("foo") - dumped = pickle.dumps(tree, 2) - loaded = pickle.loads(dumped) - self.assertEqual(loaded.__class__, BeautifulSoup) - self.assertEqual(loaded.decode(), tree.decode()) - - def test_docstring_generated(self): - soup = self.soup("") - self.assertEqual( - soup.encode(), b'\n') - - def test_xml_declaration(self): - markup = b"""\n""" - soup = self.soup(markup) - self.assertEqual(markup, soup.encode("utf8")) - - def test_python_specific_encodings_not_used_in_xml_declaration(self): - # You can encode an XML document using a Python-specific - # encoding, but that encoding won't be mentioned _inside_ the - # resulting document. - markup = b"""\n""" - soup = self.soup(markup) - for encoding in PYTHON_SPECIFIC_ENCODINGS: - if encoding in ( - 'idna', 'mbcs', 'oem', 'undefined', - 'string_escape', 'string-escape' - ): - # For one reason or another, these will raise an - # exception if we actually try to use them, so don't - # bother. - continue - encoded = soup.encode(encoding) - assert b'' in encoded - assert encoding.encode("ascii") not in encoded - - def test_processing_instruction(self): - markup = b"""\n""" - soup = self.soup(markup) - self.assertEqual(markup, soup.encode("utf8")) - - def test_real_xhtml_document(self): - """A real XHTML document should come out *exactly* the same as it went in.""" - markup = b""" - - -Hello. -Goodbye. -""" - soup = self.soup(markup) - self.assertEqual( - soup.encode("utf-8"), markup) - - def test_nested_namespaces(self): - doc = b""" - - - - - -""" - soup = self.soup(doc) - self.assertEqual(doc, soup.encode()) - - def test_formatter_processes_script_tag_for_xml_documents(self): - doc = """ - -""" - soup = BeautifulSoup(doc, "lxml-xml") - # lxml would have stripped this while parsing, but we can add - # it later. - soup.script.string = 'console.log("< < hey > > ");' - encoded = soup.encode() - self.assertTrue(b"< < hey > >" in encoded) - - def test_can_parse_unicode_document(self): - markup = 'Sacr\N{LATIN SMALL LETTER E WITH ACUTE} bleu!' - soup = self.soup(markup) - self.assertEqual('Sacr\xe9 bleu!', soup.root.string) - - def test_popping_namespaced_tag(self): - markup = 'b2012-07-02T20:33:42Zcd' - soup = self.soup(markup) - self.assertEqual( - str(soup.rss), markup) - - def test_docstring_includes_correct_encoding(self): - soup = self.soup("") - self.assertEqual( - soup.encode("latin1"), - b'\n') - - def test_large_xml_document(self): - """A large XML document should come out the same as it went in.""" - markup = (b'\n' - + b'0' * (2**12) - + b'') - soup = self.soup(markup) - self.assertEqual(soup.encode("utf-8"), markup) - - - def test_tags_are_empty_element_if_and_only_if_they_are_empty(self): - self.assertSoupEquals("

", "

") - self.assertSoupEquals("

foo

") - - def test_namespaces_are_preserved(self): - markup = 'This tag is in the a namespaceThis tag is in the b namespace' - soup = self.soup(markup) - root = soup.root - self.assertEqual("http://example.com/", root['xmlns:a']) - self.assertEqual("http://example.net/", root['xmlns:b']) - - def test_closing_namespaced_tag(self): - markup = '

20010504

' - soup = self.soup(markup) - self.assertEqual(str(soup.p), markup) - - def test_namespaced_attributes(self): - markup = '' - soup = self.soup(markup) - self.assertEqual(str(soup.foo), markup) - - def test_namespaced_attributes_xml_namespace(self): - markup = 'bar' - soup = self.soup(markup) - self.assertEqual(str(soup.foo), markup) - - def test_find_by_prefixed_name(self): - doc = """ -foo - bar - baz - -""" - soup = self.soup(doc) - - # There are three tags. - self.assertEqual(3, len(soup.find_all('tag'))) - - # But two of them are ns1:tag and one of them is ns2:tag. - self.assertEqual(2, len(soup.find_all('ns1:tag'))) - self.assertEqual(1, len(soup.find_all('ns2:tag'))) - - self.assertEqual(1, len(soup.find_all('ns2:tag', key='value'))) - self.assertEqual(3, len(soup.find_all(['ns1:tag', 'ns2:tag']))) - - def test_copy_tag_preserves_namespace(self): - xml = """ -""" - - soup = self.soup(xml) - tag = soup.document - duplicate = copy.copy(tag) - - # The two tags have the same namespace prefix. - self.assertEqual(tag.prefix, duplicate.prefix) - - def test_worst_case(self): - """Test the worst case (currently) for linking issues.""" - - soup = self.soup(BAD_DOCUMENT) - self.linkage_validator(soup) - - -class HTML5TreeBuilderSmokeTest(HTMLTreeBuilderSmokeTest): - """Smoke test for a tree builder that supports HTML5.""" - - def test_real_xhtml_document(self): - # Since XHTML is not HTML5, HTML5 parsers are not tested to handle - # XHTML documents in any particular way. - pass - - def test_html_tags_have_namespace(self): - markup = "" - soup = self.soup(markup) - self.assertEqual("http://www.w3.org/1999/xhtml", soup.a.namespace) - - def test_svg_tags_have_namespace(self): - markup = '' - soup = self.soup(markup) - namespace = "http://www.w3.org/2000/svg" - self.assertEqual(namespace, soup.svg.namespace) - self.assertEqual(namespace, soup.circle.namespace) - - - def test_mathml_tags_have_namespace(self): - markup = '5' - soup = self.soup(markup) - namespace = 'http://www.w3.org/1998/Math/MathML' - self.assertEqual(namespace, soup.math.namespace) - self.assertEqual(namespace, soup.msqrt.namespace) - - def test_xml_declaration_becomes_comment(self): - markup = '' - soup = self.soup(markup) - self.assertTrue(isinstance(soup.contents[0], Comment)) - self.assertEqual(soup.contents[0], '?xml version="1.0" encoding="utf-8"?') - self.assertEqual("html", soup.contents[0].next_element.name) - -def skipIf(condition, reason): - def nothing(test, *args, **kwargs): - return None - - def decorator(test_item): - if condition: - return nothing - else: - return test_item - - return decorator diff --git a/Jobs_Collections/venv/Lib/python3.8/site-packages/bs4/tests/__init__.py b/Jobs_Collections/venv/Lib/python3.8/site-packages/bs4/tests/__init__.py deleted file mode 100644 index 142c8cc..0000000 --- a/Jobs_Collections/venv/Lib/python3.8/site-packages/bs4/tests/__init__.py +++ /dev/null @@ -1 +0,0 @@ -"The beautifulsoup tests." diff --git a/Jobs_Collections/venv/Lib/python3.8/site-packages/bs4/tests/__pycache__/__init__.cpython-38.pyc b/Jobs_Collections/venv/Lib/python3.8/site-packages/bs4/tests/__pycache__/__init__.cpython-38.pyc deleted file mode 100644 index 92916ff4dd13324b03824250a29e72da7016f68a..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 241 zcmWIL<>g`k0#nE5aneBgF^Gc<7=auIATH(r5-AK(3@MDk44O<;5+NC>3Q4Jnr6rkZ zr8&jN$TRc-aNCPcU!gbc_b(0tX|b_O4gTHzcd^+2`;V(nXJ?xX zzx5mc{PW+>F!m1`RDTu**YU*PfpBIsu5mrkY)!Sgt)n#pqi@=#MssFR>(}i@-?FX# zj6I{V(Gs{daGQ1$E9!RZa~7U8nP@+0%C9s=f4pJ0zF?vLn2pY2wT0EQ_H2L7o>Onk zSKjzr`Nn+q#$Co|c=H>^n?l=Jcxl+Dz-jR|IPILX$n{68GdnuBDdHqvj(W?$pr{plE7#}i)!5e%we zqz2pIIyb&yw#iLiLtEo@-auRD7N0@e;7!2LN>9^ilY3!tKtg47ooIB8DzuTEf+k~|9;Nk5@w>LJ^mK#Hx$?c~@H%P5g)Ab;Vo(u<)96>gSm>{`I z@87#wye~=KBP}&!5%i9j`~iml{(5yF{bz0>R-d_YwHJ}W#jESvtNp&$>tEU8mo9gm zOV0<+wp?F}cayb?_-%!&o2vtV03F1M8w3|VcyjrQxV+=7b_=_VVV7&G-FR&^A(K|r znKaUs!CtyR^NttwyME{W+PJsXYQIl)L)CO3OU=QZrB zbiRWQbbG$kmv*RS8ZS9II7-*y)hdrOrR%!fEV=YVxPm65m5OW#(KW}0`pdrse#umLC88;BLm$8#VA;G(vq zFQQ%2M=MhSJ8_#=pex@F3aQMgJ{mp4nkSwK~CYTz6LRfn4d@CSud zh8f8+YLQ#43{*gy0-&;eh2m=fxTpXO-M-)soK3oN?+U&X{}`mSywc*@$_|N+-kl2L z*k)t!Q9zu*qb%=_=p<}M<)?48zx@0KVh%@S;k9om-empymY$72XY1@w>>+!Mh_hoP zrkZbHjDP?0lY4S7fGHn1sNDtPq@iYida(m9Le6cMzW(zG1K`<+5pw7y zk#u+@Vka}UJJ=yJQhl!0*55WQO=m#&+EjF3Yuk;Em0FHNnsA)7={Ws}4+HAA9f#s( zKGSe;7|(I!S)4=ukjRgS{DR1_tEnFOn`pvBvK7VQk5yI_ao$t4d|RAXBMqaibu6rB%cnxz?zu$VcKZ1_%t1B zMNNMeA~G^B)k@}uZIP)U zT{)@dNJ<#6X_EqAYVJgSnAW52j_?w7<|17R*)f#$+U?vC;QYwRh8M&Yy{izr)Xn$r z!E_66`jSpd05Rkylhu)(+S=%6W3ry~-k9iwP??A>VSrf34%rKhVj@IUCCDMLr<8Kc zJ7j>SC@1ud)aXUgktyHD1{1mDD0k6Dew0bk&M8Ngs{R9jR6aRjR0>H39aFexnq@AT zqu-2)_dV}ctE@3We~0}@(5$+e6gCs>SXiVKvV>gRBjis4DmA*Ul)pt!t`RwQRi(0v zC!DR&98%(3J#tHirzQ}nMw z05=Ye7e=-M_d*jRQ;o<j{GT>+XimSS?S$EZ>31x zq@k?tqQH@rVWcrhmz=b9uTS=*3iIspuP#7zzqGAQ?0w6{{|u;lRi8fT)TwnftCFu# fbc&ZjP~K{mj*M8>ktQs%MqSqyP^6=0EMEC9j6Vls diff --git a/Jobs_Collections/venv/Lib/python3.8/site-packages/bs4/tests/__pycache__/test_docs.cpython-38.pyc b/Jobs_Collections/venv/Lib/python3.8/site-packages/bs4/tests/__pycache__/test_docs.cpython-38.pyc deleted file mode 100644 index 73a8066f4ca3ad3a598fdb5011cb4ba4d8881655..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 475 zcmYjNO;6)65Oo~4%>tD;aN^V}LSTeiDkOv`G+iQf+o}md@&U`O-8PUf#SRPmkM=L+ z$^r2gIBa(sabT=@&-2Eb58pMLTL`Svdw)122)%8B?}j0`0@r;2i5OBA!_rz>%$8W% z5n-g_8mm=YXZ4C3tf6X;4)~921h{pL*tWENbU^;>2TGgPO5};sy0u92mQ3dcG=0o= zg_NNQ(?mqPl0Kj>8XfGE4bI^i=Or<(nJSx{$I6I#B(w$*vLcG$QWr+Ogr;nK)huzU znNuX8*_10CcR2JWzUQ;O(Rli+H}sgx?{B@p^(Va>m+eg5$#@#@QQsR3ShGLAflR;$ z!`@H-FUmKcRl%pGSsp$^Gx{uYx=16ba!orc8prcRe7=;Y-5Ec9$@nVowDoV(J^@=M zG@x0S9fgTDFz?aXQ}k diff --git a/Jobs_Collections/venv/Lib/python3.8/site-packages/bs4/tests/__pycache__/test_html5lib.cpython-38.pyc b/Jobs_Collections/venv/Lib/python3.8/site-packages/bs4/tests/__pycache__/test_html5lib.cpython-38.pyc deleted file mode 100644 index f83a59465387a288c3f7f8ead5d69604c5995907..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 7316 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 H?+o*QlV!FI diff --git a/Jobs_Collections/venv/Lib/python3.8/site-packages/bs4/tests/__pycache__/test_htmlparser.cpython-38.pyc b/Jobs_Collections/venv/Lib/python3.8/site-packages/bs4/tests/__pycache__/test_htmlparser.cpython-38.pyc deleted file mode 100644 index bc6168b74a5003a03cdb7e6078fa79a7c0902f02..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 4089 zcmb_fTXWmS6~>(uM9Hq|+DV*o5v5JSwiav0mpZ07P8`>6CuP$}=>ys+2E;BUPymVU z0=9)=p5&Rh4}Iw`a31}a@S2B?|3Y8d?<^>hve{IVDL6RXJ-d5$_d8d7xwhtNc&>l^ z&%f|9n)WSq79Sg(yLjagglWFUbY>)aYWRjuZ8I@_6aQ9XrM7RUj_)YGoix&>-&AcU zSxH^r)wKs2Yp~{1jWxN=okPoC1!sl1;JDmAH2oGcx3%_a`Cy03TzdJ$<6~I}?&W)7 z4#K^?JWaN;P)IJkTyX9Uia25D?D8=eVa}zuJDD(-#^lyZ99nDZ)r#bKkc%+l{kBmx zw~k8ynjg{F=W3^g85p?m2@i`r9u^77na_%7v&F|i z=Pq9P5QJ;K4*U#m`W9jMRP$|SG7J9>vzdecMvac&tTFLd*eYv*@3J+vj{jA52I!ov zF3tB`IN9;pBOTivJ=CW69$smIFl}3Vq4!^aRF>q)P^^Hf$iEIcnTQ_&#LlBobcPcG zR(7uMb<#8%rnh$4)tiIh>XR(k6W6cF$N9Bi;@KT{b~;&{U5>{x50m8bjs2Uq_{~w& z864pxfz!3lKwj%WKe<#iAWhba+{zBBOEeOU!<5SmYGQ#rkU38SHi`0sjIY!22~W)^ z?|k?5x4v7_|3*hNj{p(m8*_X_3*FaGniYd2j*d>cfjQszq$eevI4P;l!K?JxMPsTx zhyQ(}f2HU8b7KmN`o{RmK--)e;F=h>a(ilyoV+pBN6w*s2tNFgJj^PGUyhS_pL^*< z!m$<{N&doHimw-rnfEwO64#qO1MUeZZ6Y}H!eI^{%;IQ2iO0KJ$8*ZHZrJM%dc(=2 z+X;IwNrnA(6P5>)s2sI`S2iosOjdR>37PcWP{O?#dtI*eYIVz@>b68dOdr z_P^tF_7$8IHfFzcVLIM>?|Oq!lGd!D%6yL2HHLCo^XX|8i( z^@($v5OwT}B{~dVNIIU9KN@Jk8>hy|7@0GTBTuTn(z+VAsQ=uC9l$s1StG2cOz?O3 z@qEq*9(*jNQA?>g3ZZ7dyhGmB&3dleg;$A)!v%TIh1cc$Ne*LyX)O%QCS?-|e%2Gn z`r1pnQsvHP{kpCD8_Kr>k`|1MbbwrdM5=bc;&wxj%Bt1c@RZS2dL}M`Dad*%YZ#AN zWl>CTo3*n#X(;xKOs#y?N8eI9qa?jgM!2}`2M{M|H_f!*q-XIvZ?5YbdU@+Knp`UL zght6*snQ`BI~zSGE#W88M5LU*OvG5C(+B z5An+1f;`hlz+nnZ$TI2XQ=ROP84LF|fd%ob1)i-qGjx=-I(^hn=O^QU6&Z3SDvcn_ za}f^;q>uNomw2BD>07ixU^k?8;ek|oi0;p*)#Ohy9_5JhH2T62Kf#}}u-d3po}NX- z`39e2lB7aH(=FZ5jDI`khIvjecTQtN%g?;kO(qe7ZEvggg860@!F?qnFpnN;)4PpV zZh__jYX;~0Rrc+va*sG<*O5B86UH@S=j`mtjv9W zP}z^dq~Nc*mm5Y=kroLs-=PCg0Mqn!{L23S1%PAm>gre9&Rlik=h#coj(+2d`=5XI z@xA-L^P30#-+ys`md5M31d6y$MAf91sikyzQN@PkI=F#Zk`lRQS;*oW`Z;~WTwg&x zH(O@YDnI)Ex9hiCRWndkX%JLy5Tp}UBpmHl5Kxw-*cJqW+{Hh`_%JMzJeXAnVhvnD z_9osSa*+sC1LCJdZW1{zz2|l-8W^CuQw6-HVHr&ezZJZ8b6t%_7(MZj``*PX$u^EY zG-e+eW?k@A=XX%6&7s&X2Fm?Ugh7%+7JBbUR<0dtNNp7UklGNS3J(-Fw9?J zwzx&)BO*N_%QSWy1AoG+%8RBhsNY_z8UcM1z*x+T4Fq8;egNXH;zLO7gfu4zZb9d& x*+;gcEb0PHoN=}mzLyjN$`aI8%g$6ayS1(Ms2EjI&oWzj6PdH6w~UQH{0A0cD}ew2 diff --git a/Jobs_Collections/venv/Lib/python3.8/site-packages/bs4/tests/__pycache__/test_lxml.cpython-38.pyc b/Jobs_Collections/venv/Lib/python3.8/site-packages/bs4/tests/__pycache__/test_lxml.cpython-38.pyc deleted file mode 100644 index a78f33c133d19f7e7a5eef0a6ee0e3e173b4128c..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 3997 zcmb7HTXz%55$+z1q|wFl1&l9y8@!jZVuNN4HVz;Jf%PWjY_uEfY|P}G43fGfOP*W0 zN7&XePv&(`{y-k!ea$Dpv@wF|&)4~NQ88`10?1ERcixj_;btk-%UGgUF zNi{dzDR0`I_GauE?}B|nt>xT{-mE>V#(DRWH)qeOaRJun?Rjs(Uho#}#bghk<>?|} z#Y64)giWy0bHYk|k?uSg zjJ6vQ5N^7Ao@+*ebFHg72r`)*5b+Uw*K_p zCLFwbCptM$ixAnd4~`_#D^DsW|%}@I3BEarT>_743&S zE+S_m5{)kCQ>Jl7?sUV4Z5U00a*?wgd2ZMc5}0~C|A);nZ8p4MhojN)+_;*@3^H3vPuiRbMi^SX@#Qu6oSNh+7MPdz`&8#>bB*1t+scw!>+A0oojocvn^IvmzL?IJZG(jyBV%&TRQQi%FGiVQSGcX%ZgDx{A@2Jom zPbw6SvQLHAOZto+&>mEz1@cUTkOM?G&|aiolB4j_>w|pt@;Bc<*nIrMdQIsT6M#7# z6C^fTfggdHGA<-hp&}wq1C(_EOT`S@^C6HpJ2c~ToXjMi_rho&eT|mhg8ecBgy?yi zr-QHF;pLNO$07l(MnqLs*I^J5uobNRiT<>=IByrjd_%hors8VKGB1RJEQP1C9k^lB667jKppv*m)1%&s&U z2QY5|X0fD%8L_e35I$VCj7zZI+IB{Bp(5gA&^=CpQ)Ak+^NFW7MW4r6k4xF;@S&?? zx~sf>+R2|QCm&-QRy({urz;(RG$$!u_u(tj076nFIs<=$+S@(f<*)uYN{C4o1AUqE_SqIY#mW@yZA>jAEn1#=aOGxIBV5Y=HRKfY-(fY=E zeRDYbasAQ8!|&_jGVVh778VjLzb6Qyz9<3t1YQO3hOTQG&8G~*$Z50)R%)qy+A!3v z!QKC_%K^3Cx6}Cy6nJ;11En(?e}Lwm)0T-zkTVv-2+U)Z1zQtUS)e&VusN#|DmOd8 z95o0E&d&MfTYCh|AcRE)XG<_hdISaHkUf|w*wQimUt`_DzpHn#vmREAJ4?%z<)yoj zEg}e_S~Y5POkn%+&eC=ig|{rL?*lruyL+5n#n_Qyqs1$&z+0*f!MT-J9ceN6Xt?Wa(a_+hz?3+XumKaX z@(7i=1(hMn7AY#Yd>p>2Uztb33oP zRF3}^#5#_}DlErowIUFC8 z*bWH{M3F^;6(ixH+2AsTBz6vE;))dbKd>kuLC6ymNYJH9|Fg`EjcNj8HB2{&{?Rpq k8UQB-xW7oJfL?;WaY~!gFT%V?=d&92lK?Rn*G8lN0cg1)P5=M^ diff --git a/Jobs_Collections/venv/Lib/python3.8/site-packages/bs4/tests/__pycache__/test_soup.cpython-38.pyc b/Jobs_Collections/venv/Lib/python3.8/site-packages/bs4/tests/__pycache__/test_soup.cpython-38.pyc deleted file mode 100644 index 9aacb27fbc04b97c5041304ac120d500ae1c1b7e..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 27760 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 AyZ`_I diff --git a/Jobs_Collections/venv/Lib/python3.8/site-packages/bs4/tests/test_builder_registry.py b/Jobs_Collections/venv/Lib/python3.8/site-packages/bs4/tests/test_builder_registry.py deleted file mode 100644 index 90cad82..0000000 --- a/Jobs_Collections/venv/Lib/python3.8/site-packages/bs4/tests/test_builder_registry.py +++ /dev/null @@ -1,147 +0,0 @@ -"""Tests of the builder registry.""" - -import unittest -import warnings - -from bs4 import BeautifulSoup -from bs4.builder import ( - builder_registry as registry, - HTMLParserTreeBuilder, - TreeBuilderRegistry, -) - -try: - from bs4.builder import HTML5TreeBuilder - HTML5LIB_PRESENT = True -except ImportError: - HTML5LIB_PRESENT = False - -try: - from bs4.builder import ( - LXMLTreeBuilderForXML, - LXMLTreeBuilder, - ) - LXML_PRESENT = True -except ImportError: - LXML_PRESENT = False - - -class BuiltInRegistryTest(unittest.TestCase): - """Test the built-in registry with the default builders registered.""" - - def test_combination(self): - if LXML_PRESENT: - self.assertEqual(registry.lookup('fast', 'html'), - LXMLTreeBuilder) - - if LXML_PRESENT: - self.assertEqual(registry.lookup('permissive', 'xml'), - LXMLTreeBuilderForXML) - self.assertEqual(registry.lookup('strict', 'html'), - HTMLParserTreeBuilder) - if HTML5LIB_PRESENT: - self.assertEqual(registry.lookup('html5lib', 'html'), - HTML5TreeBuilder) - - def test_lookup_by_markup_type(self): - if LXML_PRESENT: - self.assertEqual(registry.lookup('html'), LXMLTreeBuilder) - self.assertEqual(registry.lookup('xml'), LXMLTreeBuilderForXML) - else: - self.assertEqual(registry.lookup('xml'), None) - if HTML5LIB_PRESENT: - self.assertEqual(registry.lookup('html'), HTML5TreeBuilder) - else: - self.assertEqual(registry.lookup('html'), HTMLParserTreeBuilder) - - def test_named_library(self): - if LXML_PRESENT: - self.assertEqual(registry.lookup('lxml', 'xml'), - LXMLTreeBuilderForXML) - self.assertEqual(registry.lookup('lxml', 'html'), - LXMLTreeBuilder) - if HTML5LIB_PRESENT: - self.assertEqual(registry.lookup('html5lib'), - HTML5TreeBuilder) - - self.assertEqual(registry.lookup('html.parser'), - HTMLParserTreeBuilder) - - def test_beautifulsoup_constructor_does_lookup(self): - - with warnings.catch_warnings(record=True) as w: - # This will create a warning about not explicitly - # specifying a parser, but we'll ignore it. - - # You can pass in a string. - BeautifulSoup("", features="html") - # Or a list of strings. - BeautifulSoup("", features=["html", "fast"]) - - # You'll get an exception if BS can't find an appropriate - # builder. - self.assertRaises(ValueError, BeautifulSoup, - "", features="no-such-feature") - -class RegistryTest(unittest.TestCase): - """Test the TreeBuilderRegistry class in general.""" - - def setUp(self): - self.registry = TreeBuilderRegistry() - - def builder_for_features(self, *feature_list): - cls = type('Builder_' + '_'.join(feature_list), - (object,), {'features' : feature_list}) - - self.registry.register(cls) - return cls - - def test_register_with_no_features(self): - builder = self.builder_for_features() - - # Since the builder advertises no features, you can't find it - # by looking up features. - self.assertEqual(self.registry.lookup('foo'), None) - - # But you can find it by doing a lookup with no features, if - # this happens to be the only registered builder. - self.assertEqual(self.registry.lookup(), builder) - - def test_register_with_features_makes_lookup_succeed(self): - builder = self.builder_for_features('foo', 'bar') - self.assertEqual(self.registry.lookup('foo'), builder) - self.assertEqual(self.registry.lookup('bar'), builder) - - def test_lookup_fails_when_no_builder_implements_feature(self): - builder = self.builder_for_features('foo', 'bar') - self.assertEqual(self.registry.lookup('baz'), None) - - def test_lookup_gets_most_recent_registration_when_no_feature_specified(self): - builder1 = self.builder_for_features('foo') - builder2 = self.builder_for_features('bar') - self.assertEqual(self.registry.lookup(), builder2) - - def test_lookup_fails_when_no_tree_builders_registered(self): - self.assertEqual(self.registry.lookup(), None) - - def test_lookup_gets_most_recent_builder_supporting_all_features(self): - has_one = self.builder_for_features('foo') - has_the_other = self.builder_for_features('bar') - has_both_early = self.builder_for_features('foo', 'bar', 'baz') - has_both_late = self.builder_for_features('foo', 'bar', 'quux') - lacks_one = self.builder_for_features('bar') - has_the_other = self.builder_for_features('foo') - - # There are two builders featuring 'foo' and 'bar', but - # the one that also features 'quux' was registered later. - self.assertEqual(self.registry.lookup('foo', 'bar'), - has_both_late) - - # There is only one builder featuring 'foo', 'bar', and 'baz'. - self.assertEqual(self.registry.lookup('foo', 'bar', 'baz'), - has_both_early) - - def test_lookup_fails_when_cannot_reconcile_requested_features(self): - builder1 = self.builder_for_features('foo', 'bar') - builder2 = self.builder_for_features('foo', 'baz') - self.assertEqual(self.registry.lookup('bar', 'baz'), None) diff --git a/Jobs_Collections/venv/Lib/python3.8/site-packages/bs4/tests/test_docs.py b/Jobs_Collections/venv/Lib/python3.8/site-packages/bs4/tests/test_docs.py deleted file mode 100644 index 5b9f677..0000000 --- a/Jobs_Collections/venv/Lib/python3.8/site-packages/bs4/tests/test_docs.py +++ /dev/null @@ -1,36 +0,0 @@ -"Test harness for doctests." - -# pylint: disable-msg=E0611,W0142 - -__metaclass__ = type -__all__ = [ - 'additional_tests', - ] - -import atexit -import doctest -import os -#from pkg_resources import ( -# resource_filename, resource_exists, resource_listdir, cleanup_resources) -import unittest - -DOCTEST_FLAGS = ( - doctest.ELLIPSIS | - doctest.NORMALIZE_WHITESPACE | - doctest.REPORT_NDIFF) - - -# def additional_tests(): -# "Run the doc tests (README.txt and docs/*, if any exist)" -# doctest_files = [ -# os.path.abspath(resource_filename('bs4', 'README.txt'))] -# if resource_exists('bs4', 'docs'): -# for name in resource_listdir('bs4', 'docs'): -# if name.endswith('.txt'): -# doctest_files.append( -# os.path.abspath( -# resource_filename('bs4', 'docs/%s' % name))) -# kwargs = dict(module_relative=False, optionflags=DOCTEST_FLAGS) -# atexit.register(cleanup_resources) -# return unittest.TestSuite(( -# doctest.DocFileSuite(*doctest_files, **kwargs))) diff --git a/Jobs_Collections/venv/Lib/python3.8/site-packages/bs4/tests/test_html5lib.py b/Jobs_Collections/venv/Lib/python3.8/site-packages/bs4/tests/test_html5lib.py deleted file mode 100644 index b77659b..0000000 --- a/Jobs_Collections/venv/Lib/python3.8/site-packages/bs4/tests/test_html5lib.py +++ /dev/null @@ -1,190 +0,0 @@ -"""Tests to ensure that the html5lib tree builder generates good trees.""" - -import warnings - -try: - from bs4.builder import HTML5TreeBuilder - HTML5LIB_PRESENT = True -except ImportError as e: - HTML5LIB_PRESENT = False -from bs4.element import SoupStrainer -from bs4.testing import ( - HTML5TreeBuilderSmokeTest, - SoupTest, - skipIf, -) - -@skipIf( - not HTML5LIB_PRESENT, - "html5lib seems not to be present, not testing its tree builder.") -class HTML5LibBuilderSmokeTest(SoupTest, HTML5TreeBuilderSmokeTest): - """See ``HTML5TreeBuilderSmokeTest``.""" - - @property - def default_builder(self): - return HTML5TreeBuilder - - def test_soupstrainer(self): - # The html5lib tree builder does not support SoupStrainers. - strainer = SoupStrainer("b") - markup = "

A bold statement.

" - with warnings.catch_warnings(record=True) as w: - soup = self.soup(markup, parse_only=strainer) - self.assertEqual( - soup.decode(), self.document_for(markup)) - - self.assertTrue( - "the html5lib tree builder doesn't support parse_only" in - str(w[0].message)) - - def test_correctly_nested_tables(self): - """html5lib inserts tags where other parsers don't.""" - markup = ('' - '' - "') - - self.assertSoupEquals( - markup, - '
Here's another table:" - '' - '' - '
foo
Here\'s another table:' - '
foo
' - '
') - - self.assertSoupEquals( - "" - "" - "
Foo
Bar
Baz
") - - def test_xml_declaration_followed_by_doctype(self): - markup = ''' - - - - - -

foo

- -''' - soup = self.soup(markup) - # Verify that we can reach the

tag; this means the tree is connected. - self.assertEqual(b"

foo

", soup.p.encode()) - - def test_reparented_markup(self): - markup = '

foo

\n

bar

' - soup = self.soup(markup) - self.assertEqual("

foo

\n

bar

", soup.body.decode()) - self.assertEqual(2, len(soup.find_all('p'))) - - - def test_reparented_markup_ends_with_whitespace(self): - markup = '

foo

\n

bar

\n' - soup = self.soup(markup) - self.assertEqual("

foo

\n

bar

\n", soup.body.decode()) - self.assertEqual(2, len(soup.find_all('p'))) - - def test_reparented_markup_containing_identical_whitespace_nodes(self): - """Verify that we keep the two whitespace nodes in this - document distinct when reparenting the adjacent tags. - """ - markup = '
' - soup = self.soup(markup) - space1, space2 = soup.find_all(string=' ') - tbody1, tbody2 = soup.find_all('tbody') - assert space1.next_element is tbody1 - assert tbody2.next_element is space2 - - def test_reparented_markup_containing_children(self): - markup = '' - soup = self.soup(markup) - noscript = soup.noscript - self.assertEqual("target", noscript.next_element) - target = soup.find(string='target') - - # The 'aftermath' string was duplicated; we want the second one. - final_aftermath = soup.find_all(string='aftermath')[-1] - - # The