From f3bd023c11c84fdee162eee0a2a3ce52d6bcbf08 Mon Sep 17 00:00:00 2001 From: Phillyclause89 <45711864+Phillyclause89@users.noreply.github.com> Date: Tue, 16 Feb 2021 02:29:03 -0800 Subject: [PATCH 1/2] helper.filter_data calls helper.convert_dtypes When helper.fliter_data is called it will now use helper.convert_dtypes to change str values at specific keys to float or int type. See docstrings of helper.convert_dtypes for full list of target keys. --- .gitignore | 1079 ++++++++++++++++++++++++++++++++++ robin_stocks/helper.py | 169 ++++-- setup.py | 2 +- tests/test_github_actions.py | 49 +- 4 files changed, 1218 insertions(+), 81 deletions(-) diff --git a/.gitignore b/.gitignore index 51239a1..bbfd328 100644 --- a/.gitignore +++ b/.gitignore @@ -23,3 +23,1082 @@ tests/app_tests.py __pycache__/ *.so *~ +venv/Lib/site-packages/urllib3/util/response.py +.idea/dictionaries +.idea/inspectionProfiles/profiles_settings.xml +.idea/misc.xml +.idea/modules.xml +.idea/robin_stocks.iml +.idea/vcs.xml +venv/Lib/site-packages/_distutils_hack/__init__.py +venv/Lib/site-packages/_distutils_hack/override.py +venv/Lib/site-packages/certifi-2020.12.5.dist-info/INSTALLER +venv/Lib/site-packages/certifi-2020.12.5.dist-info/LICENSE +venv/Lib/site-packages/certifi-2020.12.5.dist-info/METADATA +venv/Lib/site-packages/certifi-2020.12.5.dist-info/RECORD +venv/Lib/site-packages/certifi-2020.12.5.dist-info/top_level.txt +venv/Lib/site-packages/certifi-2020.12.5.dist-info/WHEEL +venv/Lib/site-packages/certifi/__init__.py +venv/Lib/site-packages/certifi/__main__.py +venv/Lib/site-packages/certifi/cacert.pem +venv/Lib/site-packages/certifi/core.py +venv/Lib/site-packages/chardet-4.0.0.dist-info/entry_points.txt +venv/Lib/site-packages/chardet-4.0.0.dist-info/INSTALLER +venv/Lib/site-packages/chardet-4.0.0.dist-info/LICENSE +venv/Lib/site-packages/chardet-4.0.0.dist-info/METADATA +venv/Lib/site-packages/chardet-4.0.0.dist-info/RECORD +venv/Lib/site-packages/chardet-4.0.0.dist-info/top_level.txt +venv/Lib/site-packages/chardet-4.0.0.dist-info/WHEEL +venv/Lib/site-packages/chardet/__init__.py +venv/Lib/site-packages/chardet/big5freq.py +venv/Lib/site-packages/chardet/big5prober.py +venv/Lib/site-packages/chardet/chardistribution.py +venv/Lib/site-packages/chardet/charsetgroupprober.py +venv/Lib/site-packages/chardet/charsetprober.py +venv/Lib/site-packages/chardet/cli/__init__.py +venv/Lib/site-packages/chardet/cli/chardetect.py +venv/Lib/site-packages/chardet/codingstatemachine.py +venv/Lib/site-packages/chardet/compat.py +venv/Lib/site-packages/chardet/cp949prober.py +venv/Lib/site-packages/chardet/enums.py +venv/Lib/site-packages/chardet/escprober.py +venv/Lib/site-packages/chardet/escsm.py +venv/Lib/site-packages/chardet/eucjpprober.py +venv/Lib/site-packages/chardet/euckrfreq.py +venv/Lib/site-packages/chardet/euckrprober.py +venv/Lib/site-packages/chardet/euctwfreq.py +venv/Lib/site-packages/chardet/euctwprober.py +venv/Lib/site-packages/chardet/gb2312freq.py +venv/Lib/site-packages/chardet/gb2312prober.py +venv/Lib/site-packages/chardet/hebrewprober.py +venv/Lib/site-packages/chardet/jisfreq.py +venv/Lib/site-packages/chardet/jpcntx.py +venv/Lib/site-packages/chardet/langbulgarianmodel.py +venv/Lib/site-packages/chardet/langgreekmodel.py +venv/Lib/site-packages/chardet/langhebrewmodel.py +venv/Lib/site-packages/chardet/langhungarianmodel.py +venv/Lib/site-packages/chardet/langrussianmodel.py +venv/Lib/site-packages/chardet/langthaimodel.py +venv/Lib/site-packages/chardet/langturkishmodel.py +venv/Lib/site-packages/chardet/latin1prober.py +venv/Lib/site-packages/chardet/mbcharsetprober.py +venv/Lib/site-packages/chardet/mbcsgroupprober.py +venv/Lib/site-packages/chardet/mbcssm.py +venv/Lib/site-packages/chardet/metadata/__init__.py +venv/Lib/site-packages/chardet/metadata/languages.py +venv/Lib/site-packages/chardet/sbcharsetprober.py +venv/Lib/site-packages/chardet/sbcsgroupprober.py +venv/Lib/site-packages/chardet/sjisprober.py +venv/Lib/site-packages/chardet/universaldetector.py +venv/Lib/site-packages/chardet/utf8prober.py +venv/Lib/site-packages/chardet/version.py +venv/Lib/site-packages/distutils-precedence.pth +venv/Lib/site-packages/dotenv/__init__.py +venv/Lib/site-packages/dotenv/cli.py +venv/Lib/site-packages/dotenv/compat.py +venv/Lib/site-packages/dotenv/ipython.py +venv/Lib/site-packages/dotenv/main.py +venv/Lib/site-packages/dotenv/parser.py +venv/Lib/site-packages/dotenv/py.typed +venv/Lib/site-packages/dotenv/version.py +venv/Lib/site-packages/easy-install.pth +venv/Lib/site-packages/idna-2.10.dist-info/INSTALLER +venv/Lib/site-packages/idna-2.10.dist-info/LICENSE.rst +venv/Lib/site-packages/idna-2.10.dist-info/METADATA +venv/Lib/site-packages/idna-2.10.dist-info/RECORD +venv/Lib/site-packages/idna-2.10.dist-info/top_level.txt +venv/Lib/site-packages/idna-2.10.dist-info/WHEEL +venv/Lib/site-packages/idna/__init__.py +venv/Lib/site-packages/idna/codec.py +venv/Lib/site-packages/idna/compat.py +venv/Lib/site-packages/idna/core.py +venv/Lib/site-packages/idna/idnadata.py +venv/Lib/site-packages/idna/intranges.py +venv/Lib/site-packages/idna/package_data.py +venv/Lib/site-packages/idna/uts46data.py +venv/Lib/site-packages/pip-21.0.1.dist-info/entry_points.txt +venv/Lib/site-packages/pip-21.0.1.dist-info/INSTALLER +venv/Lib/site-packages/pip-21.0.1.dist-info/LICENSE.txt +venv/Lib/site-packages/pip-21.0.1.dist-info/METADATA +venv/Lib/site-packages/pip-21.0.1.dist-info/RECORD +venv/Lib/site-packages/pip-21.0.1.dist-info/top_level.txt +venv/Lib/site-packages/pip-21.0.1.dist-info/WHEEL +venv/Lib/site-packages/pip/__init__.py +venv/Lib/site-packages/pip/__main__.py +venv/Lib/site-packages/pip/_internal/__init__.py +venv/Lib/site-packages/pip/_internal/build_env.py +venv/Lib/site-packages/pip/_internal/cache.py +venv/Lib/site-packages/pip/_internal/cli/__init__.py +venv/Lib/site-packages/pip/_internal/cli/autocompletion.py +venv/Lib/site-packages/pip/_internal/cli/base_command.py +venv/Lib/site-packages/pip/_internal/cli/cmdoptions.py +venv/Lib/site-packages/pip/_internal/cli/command_context.py +venv/Lib/site-packages/pip/_internal/cli/main.py +venv/Lib/site-packages/pip/_internal/cli/main_parser.py +venv/Lib/site-packages/pip/_internal/cli/parser.py +venv/Lib/site-packages/pip/_internal/cli/progress_bars.py +venv/Lib/site-packages/pip/_internal/cli/req_command.py +venv/Lib/site-packages/pip/_internal/cli/spinners.py +venv/Lib/site-packages/pip/_internal/cli/status_codes.py +venv/Lib/site-packages/pip/_internal/commands/__init__.py +venv/Lib/site-packages/pip/_internal/commands/cache.py +venv/Lib/site-packages/pip/_internal/commands/check.py +venv/Lib/site-packages/pip/_internal/commands/completion.py +venv/Lib/site-packages/pip/_internal/commands/configuration.py +venv/Lib/site-packages/pip/_internal/commands/debug.py +venv/Lib/site-packages/pip/_internal/commands/download.py +venv/Lib/site-packages/pip/_internal/commands/freeze.py +venv/Lib/site-packages/pip/_internal/commands/hash.py +venv/Lib/site-packages/pip/_internal/commands/help.py +venv/Lib/site-packages/pip/_internal/commands/install.py +venv/Lib/site-packages/pip/_internal/commands/list.py +venv/Lib/site-packages/pip/_internal/commands/search.py +venv/Lib/site-packages/pip/_internal/commands/show.py +venv/Lib/site-packages/pip/_internal/commands/uninstall.py +venv/Lib/site-packages/pip/_internal/commands/wheel.py +venv/Lib/site-packages/pip/_internal/configuration.py +venv/Lib/site-packages/pip/_internal/distributions/__init__.py +venv/Lib/site-packages/pip/_internal/distributions/base.py +venv/Lib/site-packages/pip/_internal/distributions/installed.py +venv/Lib/site-packages/pip/_internal/distributions/sdist.py +venv/Lib/site-packages/pip/_internal/distributions/wheel.py +venv/Lib/site-packages/pip/_internal/exceptions.py +venv/Lib/site-packages/pip/_internal/index/__init__.py +venv/Lib/site-packages/pip/_internal/index/collector.py +venv/Lib/site-packages/pip/_internal/index/package_finder.py +venv/Lib/site-packages/pip/_internal/locations.py +venv/Lib/site-packages/pip/_internal/main.py +venv/Lib/site-packages/pip/_internal/models/__init__.py +venv/Lib/site-packages/pip/_internal/models/candidate.py +venv/Lib/site-packages/pip/_internal/models/direct_url.py +venv/Lib/site-packages/pip/_internal/models/format_control.py +venv/Lib/site-packages/pip/_internal/models/index.py +venv/Lib/site-packages/pip/_internal/models/link.py +venv/Lib/site-packages/pip/_internal/models/scheme.py +venv/Lib/site-packages/pip/_internal/models/search_scope.py +venv/Lib/site-packages/pip/_internal/models/selection_prefs.py +venv/Lib/site-packages/pip/_internal/models/target_python.py +venv/Lib/site-packages/pip/_internal/models/wheel.py +venv/Lib/site-packages/pip/_internal/network/__init__.py +venv/Lib/site-packages/pip/_internal/network/auth.py +venv/Lib/site-packages/pip/_internal/network/cache.py +venv/Lib/site-packages/pip/_internal/network/download.py +venv/Lib/site-packages/pip/_internal/network/lazy_wheel.py +venv/Lib/site-packages/pip/_internal/network/session.py +venv/Lib/site-packages/pip/_internal/network/utils.py +venv/Lib/site-packages/pip/_internal/network/xmlrpc.py +venv/Lib/site-packages/pip/_internal/operations/__init__.py +venv/Lib/site-packages/pip/_internal/operations/check.py +venv/Lib/site-packages/pip/_internal/operations/freeze.py +venv/Lib/site-packages/pip/_internal/operations/install/__init__.py +venv/Lib/site-packages/pip/_internal/operations/install/editable_legacy.py +venv/Lib/site-packages/pip/_internal/operations/install/legacy.py +venv/Lib/site-packages/pip/_internal/operations/install/wheel.py +venv/Lib/site-packages/pip/_internal/operations/prepare.py +venv/Lib/site-packages/pip/_internal/pyproject.py +venv/Lib/site-packages/pip/_internal/req/__init__.py +venv/Lib/site-packages/pip/_internal/req/constructors.py +venv/Lib/site-packages/pip/_internal/req/req_file.py +venv/Lib/site-packages/pip/_internal/req/req_install.py +venv/Lib/site-packages/pip/_internal/req/req_set.py +venv/Lib/site-packages/pip/_internal/req/req_tracker.py +venv/Lib/site-packages/pip/_internal/req/req_uninstall.py +venv/Lib/site-packages/pip/_internal/resolution/__init__.py +venv/Lib/site-packages/pip/_internal/resolution/base.py +venv/Lib/site-packages/pip/_internal/resolution/legacy/__init__.py +venv/Lib/site-packages/pip/_internal/resolution/legacy/resolver.py +venv/Lib/site-packages/pip/_internal/resolution/resolvelib/__init__.py +venv/Lib/site-packages/pip/_internal/resolution/resolvelib/base.py +venv/Lib/site-packages/pip/_internal/resolution/resolvelib/candidates.py +venv/Lib/site-packages/pip/_internal/resolution/resolvelib/factory.py +venv/Lib/site-packages/pip/_internal/resolution/resolvelib/found_candidates.py +venv/Lib/site-packages/pip/_internal/resolution/resolvelib/provider.py +venv/Lib/site-packages/pip/_internal/resolution/resolvelib/reporter.py +venv/Lib/site-packages/pip/_internal/resolution/resolvelib/requirements.py +venv/Lib/site-packages/pip/_internal/resolution/resolvelib/resolver.py +venv/Lib/site-packages/pip/_internal/self_outdated_check.py +venv/Lib/site-packages/pip/_internal/utils/__init__.py +venv/Lib/site-packages/pip/_internal/utils/appdirs.py +venv/Lib/site-packages/pip/_internal/utils/compat.py +venv/Lib/site-packages/pip/_internal/utils/compatibility_tags.py +venv/Lib/site-packages/pip/_internal/utils/datetime.py +venv/Lib/site-packages/pip/_internal/utils/deprecation.py +venv/Lib/site-packages/pip/_internal/utils/direct_url_helpers.py +venv/Lib/site-packages/pip/_internal/utils/distutils_args.py +venv/Lib/site-packages/pip/_internal/utils/encoding.py +venv/Lib/site-packages/pip/_internal/utils/entrypoints.py +venv/Lib/site-packages/pip/_internal/utils/filesystem.py +venv/Lib/site-packages/pip/_internal/utils/filetypes.py +venv/Lib/site-packages/pip/_internal/utils/glibc.py +venv/Lib/site-packages/pip/_internal/utils/hashes.py +venv/Lib/site-packages/pip/_internal/utils/inject_securetransport.py +venv/Lib/site-packages/pip/_internal/utils/logging.py +venv/Lib/site-packages/pip/_internal/utils/misc.py +venv/Lib/site-packages/pip/_internal/utils/models.py +venv/Lib/site-packages/pip/_internal/utils/packaging.py +venv/Lib/site-packages/pip/_internal/utils/parallel.py +venv/Lib/site-packages/pip/_internal/utils/pkg_resources.py +venv/Lib/site-packages/pip/_internal/utils/setuptools_build.py +venv/Lib/site-packages/pip/_internal/utils/subprocess.py +venv/Lib/site-packages/pip/_internal/utils/temp_dir.py +venv/Lib/site-packages/pip/_internal/utils/typing.py +venv/Lib/site-packages/pip/_internal/utils/unpacking.py +venv/Lib/site-packages/pip/_internal/utils/urls.py +venv/Lib/site-packages/pip/_internal/utils/virtualenv.py +venv/Lib/site-packages/pip/_internal/utils/wheel.py +venv/Lib/site-packages/pip/_internal/vcs/__init__.py +venv/Lib/site-packages/pip/_internal/vcs/bazaar.py +venv/Lib/site-packages/pip/_internal/vcs/git.py +venv/Lib/site-packages/pip/_internal/vcs/mercurial.py +venv/Lib/site-packages/pip/_internal/vcs/subversion.py +venv/Lib/site-packages/pip/_internal/vcs/versioncontrol.py +venv/Lib/site-packages/pip/_internal/wheel_builder.py +venv/Lib/site-packages/pip/_vendor/__init__.py +venv/Lib/site-packages/pip/_vendor/appdirs.py +venv/Lib/site-packages/pip/_vendor/cachecontrol/__init__.py +venv/Lib/site-packages/pip/_vendor/cachecontrol/_cmd.py +venv/Lib/site-packages/pip/_vendor/cachecontrol/adapter.py +venv/Lib/site-packages/pip/_vendor/cachecontrol/cache.py +venv/Lib/site-packages/pip/_vendor/cachecontrol/caches/__init__.py +venv/Lib/site-packages/pip/_vendor/cachecontrol/caches/file_cache.py +venv/Lib/site-packages/pip/_vendor/cachecontrol/caches/redis_cache.py +venv/Lib/site-packages/pip/_vendor/cachecontrol/compat.py +venv/Lib/site-packages/pip/_vendor/cachecontrol/controller.py +venv/Lib/site-packages/pip/_vendor/cachecontrol/filewrapper.py +venv/Lib/site-packages/pip/_vendor/cachecontrol/heuristics.py +venv/Lib/site-packages/pip/_vendor/cachecontrol/serialize.py +venv/Lib/site-packages/pip/_vendor/cachecontrol/wrapper.py +venv/Lib/site-packages/pip/_vendor/certifi/__init__.py +venv/Lib/site-packages/pip/_vendor/certifi/__main__.py +venv/Lib/site-packages/pip/_vendor/certifi/cacert.pem +venv/Lib/site-packages/pip/_vendor/certifi/core.py +venv/Lib/site-packages/pip/_vendor/chardet/__init__.py +venv/Lib/site-packages/pip/_vendor/chardet/big5freq.py +venv/Lib/site-packages/pip/_vendor/chardet/big5prober.py +venv/Lib/site-packages/pip/_vendor/chardet/chardistribution.py +venv/Lib/site-packages/pip/_vendor/chardet/charsetgroupprober.py +venv/Lib/site-packages/pip/_vendor/chardet/charsetprober.py +venv/Lib/site-packages/pip/_vendor/chardet/cli/__init__.py +venv/Lib/site-packages/pip/_vendor/chardet/cli/chardetect.py +venv/Lib/site-packages/pip/_vendor/chardet/codingstatemachine.py +venv/Lib/site-packages/pip/_vendor/chardet/compat.py +venv/Lib/site-packages/pip/_vendor/chardet/cp949prober.py +venv/Lib/site-packages/pip/_vendor/chardet/enums.py +venv/Lib/site-packages/pip/_vendor/chardet/escprober.py +venv/Lib/site-packages/pip/_vendor/chardet/escsm.py +venv/Lib/site-packages/pip/_vendor/chardet/eucjpprober.py +venv/Lib/site-packages/pip/_vendor/chardet/euckrfreq.py +venv/Lib/site-packages/pip/_vendor/chardet/euckrprober.py +venv/Lib/site-packages/pip/_vendor/chardet/euctwfreq.py +venv/Lib/site-packages/pip/_vendor/chardet/euctwprober.py +venv/Lib/site-packages/pip/_vendor/chardet/gb2312freq.py +venv/Lib/site-packages/pip/_vendor/chardet/gb2312prober.py +venv/Lib/site-packages/pip/_vendor/chardet/hebrewprober.py +venv/Lib/site-packages/pip/_vendor/chardet/jisfreq.py +venv/Lib/site-packages/pip/_vendor/chardet/jpcntx.py +venv/Lib/site-packages/pip/_vendor/chardet/langbulgarianmodel.py +venv/Lib/site-packages/pip/_vendor/chardet/langgreekmodel.py +venv/Lib/site-packages/pip/_vendor/chardet/langhebrewmodel.py +venv/Lib/site-packages/pip/_vendor/chardet/langhungarianmodel.py +venv/Lib/site-packages/pip/_vendor/chardet/langrussianmodel.py +venv/Lib/site-packages/pip/_vendor/chardet/langthaimodel.py +venv/Lib/site-packages/pip/_vendor/chardet/langturkishmodel.py +venv/Lib/site-packages/pip/_vendor/chardet/latin1prober.py +venv/Lib/site-packages/pip/_vendor/chardet/mbcharsetprober.py +venv/Lib/site-packages/pip/_vendor/chardet/mbcsgroupprober.py +venv/Lib/site-packages/pip/_vendor/chardet/mbcssm.py +venv/Lib/site-packages/pip/_vendor/chardet/metadata/__init__.py +venv/Lib/site-packages/pip/_vendor/chardet/metadata/languages.py +venv/Lib/site-packages/pip/_vendor/chardet/sbcharsetprober.py +venv/Lib/site-packages/pip/_vendor/chardet/sbcsgroupprober.py +venv/Lib/site-packages/pip/_vendor/chardet/sjisprober.py +venv/Lib/site-packages/pip/_vendor/chardet/universaldetector.py +venv/Lib/site-packages/pip/_vendor/chardet/utf8prober.py +venv/Lib/site-packages/pip/_vendor/chardet/version.py +venv/Lib/site-packages/pip/_vendor/colorama/__init__.py +venv/Lib/site-packages/pip/_vendor/colorama/ansi.py +venv/Lib/site-packages/pip/_vendor/colorama/ansitowin32.py +venv/Lib/site-packages/pip/_vendor/colorama/initialise.py +venv/Lib/site-packages/pip/_vendor/colorama/win32.py +venv/Lib/site-packages/pip/_vendor/colorama/winterm.py +venv/Lib/site-packages/pip/_vendor/contextlib2.py +venv/Lib/site-packages/pip/_vendor/distlib/__init__.py +venv/Lib/site-packages/pip/_vendor/distlib/_backport/__init__.py +venv/Lib/site-packages/pip/_vendor/distlib/_backport/misc.py +venv/Lib/site-packages/pip/_vendor/distlib/_backport/shutil.py +venv/Lib/site-packages/pip/_vendor/distlib/_backport/sysconfig.cfg +venv/Lib/site-packages/pip/_vendor/distlib/_backport/sysconfig.py +venv/Lib/site-packages/pip/_vendor/distlib/_backport/tarfile.py +venv/Lib/site-packages/pip/_vendor/distlib/compat.py +venv/Lib/site-packages/pip/_vendor/distlib/database.py +venv/Lib/site-packages/pip/_vendor/distlib/index.py +venv/Lib/site-packages/pip/_vendor/distlib/locators.py +venv/Lib/site-packages/pip/_vendor/distlib/manifest.py +venv/Lib/site-packages/pip/_vendor/distlib/markers.py +venv/Lib/site-packages/pip/_vendor/distlib/metadata.py +venv/Lib/site-packages/pip/_vendor/distlib/resources.py +venv/Lib/site-packages/pip/_vendor/distlib/scripts.py +venv/Lib/site-packages/pip/_vendor/distlib/t32.exe +venv/Lib/site-packages/pip/_vendor/distlib/t64.exe +venv/Lib/site-packages/pip/_vendor/distlib/util.py +venv/Lib/site-packages/pip/_vendor/distlib/version.py +venv/Lib/site-packages/pip/_vendor/distlib/w32.exe +venv/Lib/site-packages/pip/_vendor/distlib/w64.exe +venv/Lib/site-packages/pip/_vendor/distlib/wheel.py +venv/Lib/site-packages/pip/_vendor/distro.py +venv/Lib/site-packages/pip/_vendor/html5lib/__init__.py +venv/Lib/site-packages/pip/_vendor/html5lib/_ihatexml.py +venv/Lib/site-packages/pip/_vendor/html5lib/_inputstream.py +venv/Lib/site-packages/pip/_vendor/html5lib/_tokenizer.py +venv/Lib/site-packages/pip/_vendor/html5lib/_trie/__init__.py +venv/Lib/site-packages/pip/_vendor/html5lib/_trie/_base.py +venv/Lib/site-packages/pip/_vendor/html5lib/_trie/py.py +venv/Lib/site-packages/pip/_vendor/html5lib/_utils.py +venv/Lib/site-packages/pip/_vendor/html5lib/constants.py +venv/Lib/site-packages/pip/_vendor/html5lib/filters/__init__.py +venv/Lib/site-packages/pip/_vendor/html5lib/filters/alphabeticalattributes.py +venv/Lib/site-packages/pip/_vendor/html5lib/filters/base.py +venv/Lib/site-packages/pip/_vendor/html5lib/filters/inject_meta_charset.py +venv/Lib/site-packages/pip/_vendor/html5lib/filters/lint.py +venv/Lib/site-packages/pip/_vendor/html5lib/filters/optionaltags.py +venv/Lib/site-packages/pip/_vendor/html5lib/filters/sanitizer.py +venv/Lib/site-packages/pip/_vendor/html5lib/filters/whitespace.py +venv/Lib/site-packages/pip/_vendor/html5lib/html5parser.py +venv/Lib/site-packages/pip/_vendor/html5lib/serializer.py +venv/Lib/site-packages/pip/_vendor/html5lib/treeadapters/__init__.py +venv/Lib/site-packages/pip/_vendor/html5lib/treeadapters/genshi.py +venv/Lib/site-packages/pip/_vendor/html5lib/treeadapters/sax.py +venv/Lib/site-packages/pip/_vendor/html5lib/treebuilders/__init__.py +venv/Lib/site-packages/pip/_vendor/html5lib/treebuilders/base.py +venv/Lib/site-packages/pip/_vendor/html5lib/treebuilders/dom.py +venv/Lib/site-packages/pip/_vendor/html5lib/treebuilders/etree.py +venv/Lib/site-packages/pip/_vendor/html5lib/treebuilders/etree_lxml.py +venv/Lib/site-packages/pip/_vendor/html5lib/treewalkers/__init__.py +venv/Lib/site-packages/pip/_vendor/html5lib/treewalkers/base.py +venv/Lib/site-packages/pip/_vendor/html5lib/treewalkers/dom.py +venv/Lib/site-packages/pip/_vendor/html5lib/treewalkers/etree.py +venv/Lib/site-packages/pip/_vendor/html5lib/treewalkers/etree_lxml.py +venv/Lib/site-packages/pip/_vendor/html5lib/treewalkers/genshi.py +venv/Lib/site-packages/pip/_vendor/idna/__init__.py +venv/Lib/site-packages/pip/_vendor/idna/codec.py +venv/Lib/site-packages/pip/_vendor/idna/compat.py +venv/Lib/site-packages/pip/_vendor/idna/core.py +venv/Lib/site-packages/pip/_vendor/idna/idnadata.py +venv/Lib/site-packages/pip/_vendor/idna/intranges.py +venv/Lib/site-packages/pip/_vendor/idna/package_data.py +venv/Lib/site-packages/pip/_vendor/idna/uts46data.py +venv/Lib/site-packages/pip/_vendor/msgpack/__init__.py +venv/Lib/site-packages/pip/_vendor/msgpack/_version.py +venv/Lib/site-packages/pip/_vendor/msgpack/exceptions.py +venv/Lib/site-packages/pip/_vendor/msgpack/ext.py +venv/Lib/site-packages/pip/_vendor/msgpack/fallback.py +venv/Lib/site-packages/pip/_vendor/packaging/__about__.py +venv/Lib/site-packages/pip/_vendor/packaging/__init__.py +venv/Lib/site-packages/pip/_vendor/packaging/_compat.py +venv/Lib/site-packages/pip/_vendor/packaging/_structures.py +venv/Lib/site-packages/pip/_vendor/packaging/_typing.py +venv/Lib/site-packages/pip/_vendor/packaging/markers.py +venv/Lib/site-packages/pip/_vendor/packaging/requirements.py +venv/Lib/site-packages/pip/_vendor/packaging/specifiers.py +venv/Lib/site-packages/pip/_vendor/packaging/tags.py +venv/Lib/site-packages/pip/_vendor/packaging/utils.py +venv/Lib/site-packages/pip/_vendor/packaging/version.py +venv/Lib/site-packages/pip/_vendor/pep517/__init__.py +venv/Lib/site-packages/pip/_vendor/pep517/_in_process.py +venv/Lib/site-packages/pip/_vendor/pep517/build.py +venv/Lib/site-packages/pip/_vendor/pep517/check.py +venv/Lib/site-packages/pip/_vendor/pep517/colorlog.py +venv/Lib/site-packages/pip/_vendor/pep517/compat.py +venv/Lib/site-packages/pip/_vendor/pep517/dirtools.py +venv/Lib/site-packages/pip/_vendor/pep517/envbuild.py +venv/Lib/site-packages/pip/_vendor/pep517/meta.py +venv/Lib/site-packages/pip/_vendor/pep517/wrappers.py +venv/Lib/site-packages/pip/_vendor/pkg_resources/__init__.py +venv/Lib/site-packages/pip/_vendor/pkg_resources/py31compat.py +venv/Lib/site-packages/pip/_vendor/progress/__init__.py +venv/Lib/site-packages/pip/_vendor/progress/bar.py +venv/Lib/site-packages/pip/_vendor/progress/counter.py +venv/Lib/site-packages/pip/_vendor/progress/spinner.py +venv/Lib/site-packages/pip/_vendor/pyparsing.py +venv/Lib/site-packages/pip/_vendor/requests/__init__.py +venv/Lib/site-packages/pip/_vendor/requests/__version__.py +venv/Lib/site-packages/pip/_vendor/requests/_internal_utils.py +venv/Lib/site-packages/pip/_vendor/requests/adapters.py +venv/Lib/site-packages/pip/_vendor/requests/api.py +venv/Lib/site-packages/pip/_vendor/requests/auth.py +venv/Lib/site-packages/pip/_vendor/requests/certs.py +venv/Lib/site-packages/pip/_vendor/requests/compat.py +venv/Lib/site-packages/pip/_vendor/requests/cookies.py +venv/Lib/site-packages/pip/_vendor/requests/exceptions.py +venv/Lib/site-packages/pip/_vendor/requests/help.py +venv/Lib/site-packages/pip/_vendor/requests/hooks.py +venv/Lib/site-packages/pip/_vendor/requests/models.py +venv/Lib/site-packages/pip/_vendor/requests/packages.py +venv/Lib/site-packages/pip/_vendor/requests/sessions.py +venv/Lib/site-packages/pip/_vendor/requests/status_codes.py +venv/Lib/site-packages/pip/_vendor/requests/structures.py +venv/Lib/site-packages/pip/_vendor/requests/utils.py +venv/Lib/site-packages/pip/_vendor/resolvelib/__init__.py +venv/Lib/site-packages/pip/_vendor/resolvelib/compat/__init__.py +venv/Lib/site-packages/pip/_vendor/resolvelib/compat/collections_abc.py +venv/Lib/site-packages/pip/_vendor/resolvelib/providers.py +venv/Lib/site-packages/pip/_vendor/resolvelib/reporters.py +venv/Lib/site-packages/pip/_vendor/resolvelib/resolvers.py +venv/Lib/site-packages/pip/_vendor/resolvelib/structs.py +venv/Lib/site-packages/pip/_vendor/retrying.py +venv/Lib/site-packages/pip/_vendor/six.py +venv/Lib/site-packages/pip/_vendor/toml/__init__.py +venv/Lib/site-packages/pip/_vendor/toml/decoder.py +venv/Lib/site-packages/pip/_vendor/toml/encoder.py +venv/Lib/site-packages/pip/_vendor/toml/ordered.py +venv/Lib/site-packages/pip/_vendor/toml/tz.py +venv/Lib/site-packages/pip/_vendor/urllib3/__init__.py +venv/Lib/site-packages/pip/_vendor/urllib3/_collections.py +venv/Lib/site-packages/pip/_vendor/urllib3/_version.py +venv/Lib/site-packages/pip/_vendor/urllib3/connection.py +venv/Lib/site-packages/pip/_vendor/urllib3/connectionpool.py +venv/Lib/site-packages/pip/_vendor/urllib3/contrib/__init__.py +venv/Lib/site-packages/pip/_vendor/urllib3/contrib/_appengine_environ.py +venv/Lib/site-packages/pip/_vendor/urllib3/contrib/_securetransport/__init__.py +venv/Lib/site-packages/pip/_vendor/urllib3/contrib/_securetransport/bindings.py +venv/Lib/site-packages/pip/_vendor/urllib3/contrib/_securetransport/low_level.py +venv/Lib/site-packages/pip/_vendor/urllib3/contrib/appengine.py +venv/Lib/site-packages/pip/_vendor/urllib3/contrib/ntlmpool.py +venv/Lib/site-packages/pip/_vendor/urllib3/contrib/pyopenssl.py +venv/Lib/site-packages/pip/_vendor/urllib3/contrib/securetransport.py +venv/Lib/site-packages/pip/_vendor/urllib3/contrib/socks.py +venv/Lib/site-packages/pip/_vendor/urllib3/exceptions.py +venv/Lib/site-packages/pip/_vendor/urllib3/fields.py +venv/Lib/site-packages/pip/_vendor/urllib3/filepost.py +venv/Lib/site-packages/pip/_vendor/urllib3/packages/__init__.py +venv/Lib/site-packages/pip/_vendor/urllib3/packages/backports/__init__.py +venv/Lib/site-packages/pip/_vendor/urllib3/packages/backports/makefile.py +venv/Lib/site-packages/pip/_vendor/urllib3/packages/six.py +venv/Lib/site-packages/pip/_vendor/urllib3/packages/ssl_match_hostname/__init__.py +venv/Lib/site-packages/pip/_vendor/urllib3/packages/ssl_match_hostname/_implementation.py +venv/Lib/site-packages/pip/_vendor/urllib3/poolmanager.py +venv/Lib/site-packages/pip/_vendor/urllib3/request.py +venv/Lib/site-packages/pip/_vendor/urllib3/response.py +venv/Lib/site-packages/pip/_vendor/urllib3/util/__init__.py +venv/Lib/site-packages/pip/_vendor/urllib3/util/connection.py +venv/Lib/site-packages/pip/_vendor/urllib3/util/proxy.py +venv/Lib/site-packages/pip/_vendor/urllib3/util/queue.py +venv/Lib/site-packages/pip/_vendor/urllib3/util/request.py +venv/Lib/site-packages/pip/_vendor/urllib3/util/response.py +venv/Lib/site-packages/pip/_vendor/urllib3/util/retry.py +venv/Lib/site-packages/pip/_vendor/urllib3/util/ssl_.py +venv/Lib/site-packages/pip/_vendor/urllib3/util/ssltransport.py +venv/Lib/site-packages/pip/_vendor/urllib3/util/timeout.py +venv/Lib/site-packages/pip/_vendor/urllib3/util/url.py +venv/Lib/site-packages/pip/_vendor/urllib3/util/wait.py +venv/Lib/site-packages/pip/_vendor/vendor.txt +venv/Lib/site-packages/pip/_vendor/webencodings/__init__.py +venv/Lib/site-packages/pip/_vendor/webencodings/labels.py +venv/Lib/site-packages/pip/_vendor/webencodings/mklabels.py +venv/Lib/site-packages/pip/_vendor/webencodings/tests.py +venv/Lib/site-packages/pip/_vendor/webencodings/x_user_defined.py +venv/Lib/site-packages/pkg_resources/__init__.py +venv/Lib/site-packages/pkg_resources/_vendor/__init__.py +venv/Lib/site-packages/pkg_resources/_vendor/appdirs.py +venv/Lib/site-packages/pkg_resources/_vendor/packaging/__about__.py +venv/Lib/site-packages/pkg_resources/_vendor/packaging/__init__.py +venv/Lib/site-packages/pkg_resources/_vendor/packaging/_compat.py +venv/Lib/site-packages/pkg_resources/_vendor/packaging/_structures.py +venv/Lib/site-packages/pkg_resources/_vendor/packaging/_typing.py +venv/Lib/site-packages/pkg_resources/_vendor/packaging/markers.py +venv/Lib/site-packages/pkg_resources/_vendor/packaging/requirements.py +venv/Lib/site-packages/pkg_resources/_vendor/packaging/specifiers.py +venv/Lib/site-packages/pkg_resources/_vendor/packaging/tags.py +venv/Lib/site-packages/pkg_resources/_vendor/packaging/utils.py +venv/Lib/site-packages/pkg_resources/_vendor/packaging/version.py +venv/Lib/site-packages/pkg_resources/_vendor/pyparsing.py +venv/Lib/site-packages/pkg_resources/extern/__init__.py +venv/Lib/site-packages/pkg_resources/tests/data/my-test-package-source/setup.py +venv/Lib/site-packages/pyotp-2.6.0.dist-info/INSTALLER +venv/Lib/site-packages/pyotp-2.6.0.dist-info/LICENSE +venv/Lib/site-packages/pyotp-2.6.0.dist-info/METADATA +venv/Lib/site-packages/pyotp-2.6.0.dist-info/RECORD +venv/Lib/site-packages/pyotp-2.6.0.dist-info/top_level.txt +venv/Lib/site-packages/pyotp-2.6.0.dist-info/WHEEL +venv/Lib/site-packages/pyotp/__init__.py +venv/Lib/site-packages/pyotp/compat.py +venv/Lib/site-packages/pyotp/hotp.py +venv/Lib/site-packages/pyotp/otp.py +venv/Lib/site-packages/pyotp/py.typed +venv/Lib/site-packages/pyotp/totp.py +venv/Lib/site-packages/pyotp/utils.py +venv/Lib/site-packages/python_dotenv-0.15.0.dist-info/entry_points.txt +venv/Lib/site-packages/python_dotenv-0.15.0.dist-info/INSTALLER +venv/Lib/site-packages/python_dotenv-0.15.0.dist-info/LICENSE +venv/Lib/site-packages/python_dotenv-0.15.0.dist-info/METADATA +venv/Lib/site-packages/python_dotenv-0.15.0.dist-info/RECORD +venv/Lib/site-packages/python_dotenv-0.15.0.dist-info/top_level.txt +venv/Lib/site-packages/python_dotenv-0.15.0.dist-info/WHEEL +venv/Lib/site-packages/requests-2.25.1.dist-info/INSTALLER +venv/Lib/site-packages/requests-2.25.1.dist-info/LICENSE +venv/Lib/site-packages/requests-2.25.1.dist-info/METADATA +venv/Lib/site-packages/requests-2.25.1.dist-info/RECORD +venv/Lib/site-packages/requests-2.25.1.dist-info/top_level.txt +venv/Lib/site-packages/requests-2.25.1.dist-info/WHEEL +venv/Lib/site-packages/requests/__init__.py +venv/Lib/site-packages/requests/__version__.py +venv/Lib/site-packages/requests/_internal_utils.py +venv/Lib/site-packages/requests/adapters.py +venv/Lib/site-packages/requests/api.py +venv/Lib/site-packages/requests/auth.py +venv/Lib/site-packages/requests/certs.py +venv/Lib/site-packages/requests/compat.py +venv/Lib/site-packages/requests/cookies.py +venv/Lib/site-packages/requests/exceptions.py +venv/Lib/site-packages/requests/help.py +venv/Lib/site-packages/requests/hooks.py +venv/Lib/site-packages/requests/models.py +venv/Lib/site-packages/requests/packages.py +venv/Lib/site-packages/requests/sessions.py +venv/Lib/site-packages/requests/status_codes.py +venv/Lib/site-packages/requests/structures.py +venv/Lib/site-packages/requests/utils.py +venv/Lib/site-packages/robin-stocks.egg-link +venv/Lib/site-packages/setuptools-53.0.0.dist-info/dependency_links.txt +venv/Lib/site-packages/setuptools-53.0.0.dist-info/entry_points.txt +venv/Lib/site-packages/setuptools-53.0.0.dist-info/INSTALLER +venv/Lib/site-packages/setuptools-53.0.0.dist-info/LICENSE +venv/Lib/site-packages/setuptools-53.0.0.dist-info/METADATA +venv/Lib/site-packages/setuptools-53.0.0.dist-info/RECORD +venv/Lib/site-packages/setuptools-53.0.0.dist-info/top_level.txt +venv/Lib/site-packages/setuptools-53.0.0.dist-info/WHEEL +venv/Lib/site-packages/setuptools/__init__.py +venv/Lib/site-packages/setuptools/_deprecation_warning.py +venv/Lib/site-packages/setuptools/_distutils/__init__.py +venv/Lib/site-packages/setuptools/_distutils/_msvccompiler.py +venv/Lib/site-packages/setuptools/_distutils/archive_util.py +venv/Lib/site-packages/setuptools/_distutils/bcppcompiler.py +venv/Lib/site-packages/setuptools/_distutils/ccompiler.py +venv/Lib/site-packages/setuptools/_distutils/cmd.py +venv/Lib/site-packages/setuptools/_distutils/command/__init__.py +venv/Lib/site-packages/setuptools/_distutils/command/bdist.py +venv/Lib/site-packages/setuptools/_distutils/command/bdist_dumb.py +venv/Lib/site-packages/setuptools/_distutils/command/bdist_msi.py +venv/Lib/site-packages/setuptools/_distutils/command/bdist_rpm.py +venv/Lib/site-packages/setuptools/_distutils/command/bdist_wininst.py +venv/Lib/site-packages/setuptools/_distutils/command/build.py +venv/Lib/site-packages/setuptools/_distutils/command/build_clib.py +venv/Lib/site-packages/setuptools/_distutils/command/build_ext.py +venv/Lib/site-packages/setuptools/_distutils/command/build_py.py +venv/Lib/site-packages/setuptools/_distutils/command/build_scripts.py +venv/Lib/site-packages/setuptools/_distutils/command/check.py +venv/Lib/site-packages/setuptools/_distutils/command/clean.py +venv/Lib/site-packages/setuptools/_distutils/command/config.py +venv/Lib/site-packages/setuptools/_distutils/command/install.py +venv/Lib/site-packages/setuptools/_distutils/command/install_data.py +venv/Lib/site-packages/setuptools/_distutils/command/install_egg_info.py +venv/Lib/site-packages/setuptools/_distutils/command/install_headers.py +venv/Lib/site-packages/setuptools/_distutils/command/install_lib.py +venv/Lib/site-packages/setuptools/_distutils/command/install_scripts.py +venv/Lib/site-packages/setuptools/_distutils/command/py37compat.py +venv/Lib/site-packages/setuptools/_distutils/command/register.py +venv/Lib/site-packages/setuptools/_distutils/command/sdist.py +venv/Lib/site-packages/setuptools/_distutils/command/upload.py +venv/Lib/site-packages/setuptools/_distutils/config.py +venv/Lib/site-packages/setuptools/_distutils/core.py +venv/Lib/site-packages/setuptools/_distutils/cygwinccompiler.py +venv/Lib/site-packages/setuptools/_distutils/debug.py +venv/Lib/site-packages/setuptools/_distutils/dep_util.py +venv/Lib/site-packages/setuptools/_distutils/dir_util.py +venv/Lib/site-packages/setuptools/_distutils/dist.py +venv/Lib/site-packages/setuptools/_distutils/errors.py +venv/Lib/site-packages/setuptools/_distutils/extension.py +venv/Lib/site-packages/setuptools/_distutils/fancy_getopt.py +venv/Lib/site-packages/setuptools/_distutils/file_util.py +venv/Lib/site-packages/setuptools/_distutils/filelist.py +venv/Lib/site-packages/setuptools/_distutils/log.py +venv/Lib/site-packages/setuptools/_distutils/msvc9compiler.py +venv/Lib/site-packages/setuptools/_distutils/msvccompiler.py +venv/Lib/site-packages/setuptools/_distutils/py35compat.py +venv/Lib/site-packages/setuptools/_distutils/py38compat.py +venv/Lib/site-packages/setuptools/_distutils/spawn.py +venv/Lib/site-packages/setuptools/_distutils/sysconfig.py +venv/Lib/site-packages/setuptools/_distutils/text_file.py +venv/Lib/site-packages/setuptools/_distutils/unixccompiler.py +venv/Lib/site-packages/setuptools/_distutils/util.py +venv/Lib/site-packages/setuptools/_distutils/version.py +venv/Lib/site-packages/setuptools/_distutils/versionpredicate.py +venv/Lib/site-packages/setuptools/_imp.py +venv/Lib/site-packages/setuptools/_vendor/__init__.py +venv/Lib/site-packages/setuptools/_vendor/ordered_set.py +venv/Lib/site-packages/setuptools/_vendor/packaging/__about__.py +venv/Lib/site-packages/setuptools/_vendor/packaging/__init__.py +venv/Lib/site-packages/setuptools/_vendor/packaging/_compat.py +venv/Lib/site-packages/setuptools/_vendor/packaging/_structures.py +venv/Lib/site-packages/setuptools/_vendor/packaging/_typing.py +venv/Lib/site-packages/setuptools/_vendor/packaging/markers.py +venv/Lib/site-packages/setuptools/_vendor/packaging/requirements.py +venv/Lib/site-packages/setuptools/_vendor/packaging/specifiers.py +venv/Lib/site-packages/setuptools/_vendor/packaging/tags.py +venv/Lib/site-packages/setuptools/_vendor/packaging/utils.py +venv/Lib/site-packages/setuptools/_vendor/packaging/version.py +venv/Lib/site-packages/setuptools/_vendor/pyparsing.py +venv/Lib/site-packages/setuptools/archive_util.py +venv/Lib/site-packages/setuptools/build_meta.py +venv/Lib/site-packages/setuptools/cli-32.exe +venv/Lib/site-packages/setuptools/cli-64.exe +venv/Lib/site-packages/setuptools/cli.exe +venv/Lib/site-packages/setuptools/command/__init__.py +venv/Lib/site-packages/setuptools/command/alias.py +venv/Lib/site-packages/setuptools/command/bdist_egg.py +venv/Lib/site-packages/setuptools/command/bdist_rpm.py +venv/Lib/site-packages/setuptools/command/bdist_wininst.py +venv/Lib/site-packages/setuptools/command/build_clib.py +venv/Lib/site-packages/setuptools/command/build_ext.py +venv/Lib/site-packages/setuptools/command/build_py.py +venv/Lib/site-packages/setuptools/command/develop.py +venv/Lib/site-packages/setuptools/command/dist_info.py +venv/Lib/site-packages/setuptools/command/easy_install.py +venv/Lib/site-packages/setuptools/command/egg_info.py +venv/Lib/site-packages/setuptools/command/install.py +venv/Lib/site-packages/setuptools/command/install_egg_info.py +venv/Lib/site-packages/setuptools/command/install_lib.py +venv/Lib/site-packages/setuptools/command/install_scripts.py +venv/Lib/site-packages/setuptools/command/launcher manifest.xml +venv/Lib/site-packages/setuptools/command/py36compat.py +venv/Lib/site-packages/setuptools/command/register.py +venv/Lib/site-packages/setuptools/command/rotate.py +venv/Lib/site-packages/setuptools/command/saveopts.py +venv/Lib/site-packages/setuptools/command/sdist.py +venv/Lib/site-packages/setuptools/command/setopt.py +venv/Lib/site-packages/setuptools/command/test.py +venv/Lib/site-packages/setuptools/command/upload.py +venv/Lib/site-packages/setuptools/command/upload_docs.py +venv/Lib/site-packages/setuptools/config.py +venv/Lib/site-packages/setuptools/dep_util.py +venv/Lib/site-packages/setuptools/depends.py +venv/Lib/site-packages/setuptools/dist.py +venv/Lib/site-packages/setuptools/errors.py +venv/Lib/site-packages/setuptools/extension.py +venv/Lib/site-packages/setuptools/extern/__init__.py +venv/Lib/site-packages/setuptools/glob.py +venv/Lib/site-packages/setuptools/gui-32.exe +venv/Lib/site-packages/setuptools/gui-64.exe +venv/Lib/site-packages/setuptools/gui.exe +venv/Lib/site-packages/setuptools/installer.py +venv/Lib/site-packages/setuptools/launch.py +venv/Lib/site-packages/setuptools/lib2to3_ex.py +venv/Lib/site-packages/setuptools/monkey.py +venv/Lib/site-packages/setuptools/msvc.py +venv/Lib/site-packages/setuptools/namespaces.py +venv/Lib/site-packages/setuptools/package_index.py +venv/Lib/site-packages/setuptools/py34compat.py +venv/Lib/site-packages/setuptools/sandbox.py +venv/Lib/site-packages/setuptools/script (dev).tmpl +venv/Lib/site-packages/setuptools/script.tmpl +venv/Lib/site-packages/setuptools/ssl_support.py +venv/Lib/site-packages/setuptools/unicode_utils.py +venv/Lib/site-packages/setuptools/version.py +venv/Lib/site-packages/setuptools/wheel.py +venv/Lib/site-packages/setuptools/windows_support.py +venv/Lib/site-packages/urllib3-1.26.3.dist-info/INSTALLER +venv/Lib/site-packages/urllib3-1.26.3.dist-info/LICENSE.txt +venv/Lib/site-packages/urllib3-1.26.3.dist-info/METADATA +venv/Lib/site-packages/urllib3-1.26.3.dist-info/RECORD +venv/Lib/site-packages/urllib3-1.26.3.dist-info/top_level.txt +venv/Lib/site-packages/urllib3-1.26.3.dist-info/WHEEL +venv/Lib/site-packages/urllib3/__init__.py +venv/Lib/site-packages/urllib3/_collections.py +venv/Lib/site-packages/urllib3/_version.py +venv/Lib/site-packages/urllib3/connection.py +venv/Lib/site-packages/urllib3/connectionpool.py +venv/Lib/site-packages/urllib3/contrib/__init__.py +venv/Lib/site-packages/urllib3/contrib/_appengine_environ.py +venv/Lib/site-packages/urllib3/contrib/_securetransport/__init__.py +venv/Lib/site-packages/urllib3/contrib/_securetransport/bindings.py +venv/Lib/site-packages/urllib3/contrib/_securetransport/low_level.py +venv/Lib/site-packages/urllib3/contrib/appengine.py +venv/Lib/site-packages/urllib3/contrib/ntlmpool.py +venv/Lib/site-packages/urllib3/contrib/pyopenssl.py +venv/Lib/site-packages/urllib3/contrib/securetransport.py +venv/Lib/site-packages/urllib3/contrib/socks.py +venv/Lib/site-packages/urllib3/exceptions.py +venv/Lib/site-packages/urllib3/fields.py +venv/Lib/site-packages/urllib3/filepost.py +venv/Lib/site-packages/urllib3/packages/__init__.py +venv/Lib/site-packages/urllib3/packages/backports/__init__.py +venv/Lib/site-packages/urllib3/packages/backports/makefile.py +venv/Lib/site-packages/urllib3/packages/six.py +venv/Lib/site-packages/urllib3/packages/ssl_match_hostname/__init__.py +venv/Lib/site-packages/urllib3/packages/ssl_match_hostname/_implementation.py +venv/Lib/site-packages/urllib3/poolmanager.py +venv/Lib/site-packages/urllib3/request.py +venv/Lib/site-packages/urllib3/response.py +venv/Lib/site-packages/urllib3/util/__init__.py +venv/Lib/site-packages/urllib3/util/connection.py +venv/Lib/site-packages/urllib3/util/proxy.py +venv/Lib/site-packages/urllib3/util/queue.py +venv/Lib/site-packages/urllib3/util/request.py +venv/Lib/site-packages/urllib3/util/retry.py +venv/Lib/site-packages/urllib3/util/ssl_.py +venv/Lib/site-packages/urllib3/util/ssltransport.py +venv/Lib/site-packages/urllib3/util/timeout.py +venv/Lib/site-packages/urllib3/util/url.py +venv/Lib/site-packages/urllib3/util/wait.py +venv/pyvenv.cfg +venv/Scripts/activate +venv/Scripts/activate.bat +venv/Scripts/Activate.ps1 +venv/Scripts/chardetect.exe +venv/Scripts/deactivate.bat +venv/Scripts/dotenv.exe +venv/Scripts/pip.exe +venv/Scripts/pip3.7.exe +venv/Scripts/pip3.exe +venv/Scripts/python.exe +venv/Scripts/pythonw.exe +.idea/workspace.xml +venv/Lib/site-packages/_pytest/__init__.py +venv/Lib/site-packages/_pytest/_argcomplete.py +venv/Lib/site-packages/_pytest/_code/__init__.py +venv/Lib/site-packages/_pytest/_code/code.py +venv/Lib/site-packages/_pytest/_code/source.py +venv/Lib/site-packages/_pytest/_io/__init__.py +venv/Lib/site-packages/_pytest/_io/saferepr.py +venv/Lib/site-packages/_pytest/_io/terminalwriter.py +venv/Lib/site-packages/_pytest/_io/wcwidth.py +venv/Lib/site-packages/_pytest/_version.py +venv/Lib/site-packages/_pytest/assertion/__init__.py +venv/Lib/site-packages/_pytest/assertion/rewrite.py +venv/Lib/site-packages/_pytest/assertion/truncate.py +venv/Lib/site-packages/_pytest/assertion/util.py +venv/Lib/site-packages/_pytest/cacheprovider.py +venv/Lib/site-packages/_pytest/capture.py +venv/Lib/site-packages/_pytest/compat.py +venv/Lib/site-packages/_pytest/config/__init__.py +venv/Lib/site-packages/_pytest/config/argparsing.py +venv/Lib/site-packages/_pytest/config/exceptions.py +venv/Lib/site-packages/_pytest/config/findpaths.py +venv/Lib/site-packages/_pytest/debugging.py +venv/Lib/site-packages/_pytest/deprecated.py +venv/Lib/site-packages/_pytest/doctest.py +venv/Lib/site-packages/_pytest/faulthandler.py +venv/Lib/site-packages/_pytest/fixtures.py +venv/Lib/site-packages/_pytest/freeze_support.py +venv/Lib/site-packages/_pytest/helpconfig.py +venv/Lib/site-packages/_pytest/hookspec.py +venv/Lib/site-packages/_pytest/junitxml.py +venv/Lib/site-packages/_pytest/logging.py +venv/Lib/site-packages/_pytest/main.py +venv/Lib/site-packages/_pytest/mark/__init__.py +venv/Lib/site-packages/_pytest/mark/expression.py +venv/Lib/site-packages/_pytest/mark/structures.py +venv/Lib/site-packages/_pytest/monkeypatch.py +venv/Lib/site-packages/_pytest/nodes.py +venv/Lib/site-packages/_pytest/nose.py +venv/Lib/site-packages/_pytest/outcomes.py +venv/Lib/site-packages/_pytest/pastebin.py +venv/Lib/site-packages/_pytest/pathlib.py +venv/Lib/site-packages/_pytest/py.typed +venv/Lib/site-packages/_pytest/pytester.py +venv/Lib/site-packages/_pytest/pytester_assertions.py +venv/Lib/site-packages/_pytest/python.py +venv/Lib/site-packages/_pytest/python_api.py +venv/Lib/site-packages/_pytest/recwarn.py +venv/Lib/site-packages/_pytest/reports.py +venv/Lib/site-packages/_pytest/runner.py +venv/Lib/site-packages/_pytest/setuponly.py +venv/Lib/site-packages/_pytest/setupplan.py +venv/Lib/site-packages/_pytest/skipping.py +venv/Lib/site-packages/_pytest/stepwise.py +venv/Lib/site-packages/_pytest/store.py +venv/Lib/site-packages/_pytest/terminal.py +venv/Lib/site-packages/_pytest/threadexception.py +venv/Lib/site-packages/_pytest/timing.py +venv/Lib/site-packages/_pytest/tmpdir.py +venv/Lib/site-packages/_pytest/unittest.py +venv/Lib/site-packages/_pytest/unraisableexception.py +venv/Lib/site-packages/_pytest/warning_types.py +venv/Lib/site-packages/_pytest/warnings.py +venv/Lib/site-packages/atomicwrites-1.4.0.dist-info/INSTALLER +venv/Lib/site-packages/atomicwrites-1.4.0.dist-info/LICENSE +venv/Lib/site-packages/atomicwrites-1.4.0.dist-info/METADATA +venv/Lib/site-packages/atomicwrites-1.4.0.dist-info/RECORD +venv/Lib/site-packages/atomicwrites-1.4.0.dist-info/top_level.txt +venv/Lib/site-packages/atomicwrites-1.4.0.dist-info/WHEEL +venv/Lib/site-packages/atomicwrites/__init__.py +venv/Lib/site-packages/attr/__init__.py +venv/Lib/site-packages/attr/__init__.pyi +venv/Lib/site-packages/attr/_compat.py +venv/Lib/site-packages/attr/_config.py +venv/Lib/site-packages/attr/_funcs.py +venv/Lib/site-packages/attr/_make.py +venv/Lib/site-packages/attr/_next_gen.py +venv/Lib/site-packages/attr/_version_info.py +venv/Lib/site-packages/attr/_version_info.pyi +venv/Lib/site-packages/attr/converters.py +venv/Lib/site-packages/attr/converters.pyi +venv/Lib/site-packages/attr/exceptions.py +venv/Lib/site-packages/attr/exceptions.pyi +venv/Lib/site-packages/attr/filters.py +venv/Lib/site-packages/attr/filters.pyi +venv/Lib/site-packages/attr/py.typed +venv/Lib/site-packages/attr/setters.py +venv/Lib/site-packages/attr/setters.pyi +venv/Lib/site-packages/attr/validators.py +venv/Lib/site-packages/attr/validators.pyi +venv/Lib/site-packages/attrs-20.3.0.dist-info/AUTHORS.rst +venv/Lib/site-packages/attrs-20.3.0.dist-info/INSTALLER +venv/Lib/site-packages/attrs-20.3.0.dist-info/LICENSE +venv/Lib/site-packages/attrs-20.3.0.dist-info/METADATA +venv/Lib/site-packages/attrs-20.3.0.dist-info/RECORD +venv/Lib/site-packages/attrs-20.3.0.dist-info/top_level.txt +venv/Lib/site-packages/attrs-20.3.0.dist-info/WHEEL +venv/Lib/site-packages/chardet-3.0.4.dist-info/DESCRIPTION.rst +venv/Lib/site-packages/chardet-3.0.4.dist-info/entry_points.txt +venv/Lib/site-packages/chardet-3.0.4.dist-info/INSTALLER +venv/Lib/site-packages/chardet-3.0.4.dist-info/METADATA +venv/Lib/site-packages/chardet-3.0.4.dist-info/metadata.json +venv/Lib/site-packages/chardet-3.0.4.dist-info/RECORD +venv/Lib/site-packages/chardet-3.0.4.dist-info/top_level.txt +venv/Lib/site-packages/chardet-3.0.4.dist-info/WHEEL +venv/Lib/site-packages/chardet/langcyrillicmodel.py +venv/Lib/site-packages/colorama-0.4.4.dist-info/INSTALLER +venv/Lib/site-packages/colorama-0.4.4.dist-info/LICENSE.txt +venv/Lib/site-packages/colorama-0.4.4.dist-info/METADATA +venv/Lib/site-packages/colorama-0.4.4.dist-info/RECORD +venv/Lib/site-packages/colorama-0.4.4.dist-info/top_level.txt +venv/Lib/site-packages/colorama-0.4.4.dist-info/WHEEL +venv/Lib/site-packages/colorama/__init__.py +venv/Lib/site-packages/colorama/ansi.py +venv/Lib/site-packages/colorama/ansitowin32.py +venv/Lib/site-packages/colorama/initialise.py +venv/Lib/site-packages/colorama/win32.py +venv/Lib/site-packages/colorama/winterm.py +venv/Lib/site-packages/dateutil/__init__.py +venv/Lib/site-packages/dateutil/_common.py +venv/Lib/site-packages/dateutil/_version.py +venv/Lib/site-packages/dateutil/easter.py +venv/Lib/site-packages/dateutil/parser/__init__.py +venv/Lib/site-packages/dateutil/parser/_parser.py +venv/Lib/site-packages/dateutil/parser/isoparser.py +venv/Lib/site-packages/dateutil/relativedelta.py +venv/Lib/site-packages/dateutil/rrule.py +venv/Lib/site-packages/dateutil/tz/__init__.py +venv/Lib/site-packages/dateutil/tz/_common.py +venv/Lib/site-packages/dateutil/tz/_factories.py +venv/Lib/site-packages/dateutil/tz/tz.py +venv/Lib/site-packages/dateutil/tz/win.py +venv/Lib/site-packages/dateutil/tzwin.py +venv/Lib/site-packages/dateutil/utils.py +venv/Lib/site-packages/dateutil/zoneinfo/__init__.py +venv/Lib/site-packages/dateutil/zoneinfo/dateutil-zoneinfo.tar.gz +venv/Lib/site-packages/dateutil/zoneinfo/rebuild.py +venv/Lib/site-packages/idna-2.7.dist-info/INSTALLER +venv/Lib/site-packages/idna-2.7.dist-info/LICENSE.txt +venv/Lib/site-packages/idna-2.7.dist-info/METADATA +venv/Lib/site-packages/idna-2.7.dist-info/RECORD +venv/Lib/site-packages/idna-2.7.dist-info/top_level.txt +venv/Lib/site-packages/idna-2.7.dist-info/WHEEL +venv/Lib/site-packages/importlib_metadata-3.4.0.dist-info/INSTALLER +venv/Lib/site-packages/importlib_metadata-3.4.0.dist-info/LICENSE +venv/Lib/site-packages/importlib_metadata-3.4.0.dist-info/METADATA +venv/Lib/site-packages/importlib_metadata-3.4.0.dist-info/RECORD +venv/Lib/site-packages/importlib_metadata-3.4.0.dist-info/top_level.txt +venv/Lib/site-packages/importlib_metadata-3.4.0.dist-info/WHEEL +venv/Lib/site-packages/importlib_metadata/__init__.py +venv/Lib/site-packages/importlib_metadata/_compat.py +venv/Lib/site-packages/importlib_metadata/py.typed +venv/Lib/site-packages/iniconfig-1.1.1.dist-info/INSTALLER +venv/Lib/site-packages/iniconfig-1.1.1.dist-info/LICENSE +venv/Lib/site-packages/iniconfig-1.1.1.dist-info/METADATA +venv/Lib/site-packages/iniconfig-1.1.1.dist-info/RECORD +venv/Lib/site-packages/iniconfig-1.1.1.dist-info/top_level.txt +venv/Lib/site-packages/iniconfig-1.1.1.dist-info/WHEEL +venv/Lib/site-packages/iniconfig/__init__.py +venv/Lib/site-packages/iniconfig/__init__.pyi +venv/Lib/site-packages/iniconfig/py.typed +venv/Lib/site-packages/packaging-20.9.dist-info/INSTALLER +venv/Lib/site-packages/packaging-20.9.dist-info/LICENSE +venv/Lib/site-packages/packaging-20.9.dist-info/LICENSE.APACHE +venv/Lib/site-packages/packaging-20.9.dist-info/LICENSE.BSD +venv/Lib/site-packages/packaging-20.9.dist-info/METADATA +venv/Lib/site-packages/packaging-20.9.dist-info/RECORD +venv/Lib/site-packages/packaging-20.9.dist-info/top_level.txt +venv/Lib/site-packages/packaging-20.9.dist-info/WHEEL +venv/Lib/site-packages/packaging/__about__.py +venv/Lib/site-packages/packaging/__init__.py +venv/Lib/site-packages/packaging/_compat.py +venv/Lib/site-packages/packaging/_structures.py +venv/Lib/site-packages/packaging/_typing.py +venv/Lib/site-packages/packaging/markers.py +venv/Lib/site-packages/packaging/py.typed +venv/Lib/site-packages/packaging/requirements.py +venv/Lib/site-packages/packaging/specifiers.py +venv/Lib/site-packages/packaging/tags.py +venv/Lib/site-packages/packaging/utils.py +venv/Lib/site-packages/packaging/version.py +venv/Lib/site-packages/pluggy-0.13.1.dist-info/INSTALLER +venv/Lib/site-packages/pluggy-0.13.1.dist-info/LICENSE +venv/Lib/site-packages/pluggy-0.13.1.dist-info/METADATA +venv/Lib/site-packages/pluggy-0.13.1.dist-info/RECORD +venv/Lib/site-packages/pluggy-0.13.1.dist-info/top_level.txt +venv/Lib/site-packages/pluggy-0.13.1.dist-info/WHEEL +venv/Lib/site-packages/pluggy/__init__.py +venv/Lib/site-packages/pluggy/_tracing.py +venv/Lib/site-packages/pluggy/_version.py +venv/Lib/site-packages/pluggy/callers.py +venv/Lib/site-packages/pluggy/hooks.py +venv/Lib/site-packages/pluggy/manager.py +venv/Lib/site-packages/py-1.10.0.dist-info/INSTALLER +venv/Lib/site-packages/py-1.10.0.dist-info/LICENSE +venv/Lib/site-packages/py-1.10.0.dist-info/METADATA +venv/Lib/site-packages/py-1.10.0.dist-info/RECORD +venv/Lib/site-packages/py-1.10.0.dist-info/top_level.txt +venv/Lib/site-packages/py-1.10.0.dist-info/WHEEL +venv/Lib/site-packages/py/__init__.py +venv/Lib/site-packages/py/__init__.pyi +venv/Lib/site-packages/py/__metainfo.py +venv/Lib/site-packages/py/_builtin.py +venv/Lib/site-packages/py/_code/__init__.py +venv/Lib/site-packages/py/_code/_assertionnew.py +venv/Lib/site-packages/py/_code/_assertionold.py +venv/Lib/site-packages/py/_code/_py2traceback.py +venv/Lib/site-packages/py/_code/assertion.py +venv/Lib/site-packages/py/_code/code.py +venv/Lib/site-packages/py/_code/source.py +venv/Lib/site-packages/py/_error.py +venv/Lib/site-packages/py/_io/__init__.py +venv/Lib/site-packages/py/_io/capture.py +venv/Lib/site-packages/py/_io/saferepr.py +venv/Lib/site-packages/py/_io/terminalwriter.py +venv/Lib/site-packages/py/_log/__init__.py +venv/Lib/site-packages/py/_log/log.py +venv/Lib/site-packages/py/_log/warning.py +venv/Lib/site-packages/py/_path/__init__.py +venv/Lib/site-packages/py/_path/cacheutil.py +venv/Lib/site-packages/py/_path/common.py +venv/Lib/site-packages/py/_path/local.py +venv/Lib/site-packages/py/_path/svnurl.py +venv/Lib/site-packages/py/_path/svnwc.py +venv/Lib/site-packages/py/_process/__init__.py +venv/Lib/site-packages/py/_process/cmdexec.py +venv/Lib/site-packages/py/_process/forkedfunc.py +venv/Lib/site-packages/py/_process/killproc.py +venv/Lib/site-packages/py/_std.py +venv/Lib/site-packages/py/_vendored_packages/__init__.py +venv/Lib/site-packages/py/_vendored_packages/apipkg-1.5.dist-info/INSTALLER +venv/Lib/site-packages/py/_vendored_packages/apipkg-1.5.dist-info/METADATA +venv/Lib/site-packages/py/_vendored_packages/apipkg-1.5.dist-info/RECORD +venv/Lib/site-packages/py/_vendored_packages/apipkg-1.5.dist-info/REQUESTED +venv/Lib/site-packages/py/_vendored_packages/apipkg-1.5.dist-info/top_level.txt +venv/Lib/site-packages/py/_vendored_packages/apipkg-1.5.dist-info/WHEEL +venv/Lib/site-packages/py/_vendored_packages/apipkg/__init__.py +venv/Lib/site-packages/py/_vendored_packages/apipkg/version.py +venv/Lib/site-packages/py/_vendored_packages/iniconfig-1.1.1.dist-info/INSTALLER +venv/Lib/site-packages/py/_vendored_packages/iniconfig-1.1.1.dist-info/LICENSE +venv/Lib/site-packages/py/_vendored_packages/iniconfig-1.1.1.dist-info/METADATA +venv/Lib/site-packages/py/_vendored_packages/iniconfig-1.1.1.dist-info/RECORD +venv/Lib/site-packages/py/_vendored_packages/iniconfig-1.1.1.dist-info/REQUESTED +venv/Lib/site-packages/py/_vendored_packages/iniconfig-1.1.1.dist-info/top_level.txt +venv/Lib/site-packages/py/_vendored_packages/iniconfig-1.1.1.dist-info/WHEEL +venv/Lib/site-packages/py/_vendored_packages/iniconfig/__init__.py +venv/Lib/site-packages/py/_vendored_packages/iniconfig/__init__.pyi +venv/Lib/site-packages/py/_vendored_packages/iniconfig/py.typed +venv/Lib/site-packages/py/_version.py +venv/Lib/site-packages/py/_xmlgen.py +venv/Lib/site-packages/py/error.pyi +venv/Lib/site-packages/py/iniconfig.pyi +venv/Lib/site-packages/py/io.pyi +venv/Lib/site-packages/py/path.pyi +venv/Lib/site-packages/py/py.typed +venv/Lib/site-packages/py/test.py +venv/Lib/site-packages/py/xml.pyi +venv/Lib/site-packages/pyotp-2.3.0.dist-info/INSTALLER +venv/Lib/site-packages/pyotp-2.3.0.dist-info/LICENSE +venv/Lib/site-packages/pyotp-2.3.0.dist-info/METADATA +venv/Lib/site-packages/pyotp-2.3.0.dist-info/RECORD +venv/Lib/site-packages/pyotp-2.3.0.dist-info/REQUESTED +venv/Lib/site-packages/pyotp-2.3.0.dist-info/top_level.txt +venv/Lib/site-packages/pyotp-2.3.0.dist-info/WHEEL +venv/Lib/site-packages/pyparsing-2.4.7.dist-info/INSTALLER +venv/Lib/site-packages/pyparsing-2.4.7.dist-info/LICENSE +venv/Lib/site-packages/pyparsing-2.4.7.dist-info/METADATA +venv/Lib/site-packages/pyparsing-2.4.7.dist-info/RECORD +venv/Lib/site-packages/pyparsing-2.4.7.dist-info/top_level.txt +venv/Lib/site-packages/pyparsing-2.4.7.dist-info/WHEEL +venv/Lib/site-packages/pyparsing.py +venv/Lib/site-packages/pytest-6.2.2.dist-info/entry_points.txt +venv/Lib/site-packages/pytest-6.2.2.dist-info/INSTALLER +venv/Lib/site-packages/pytest-6.2.2.dist-info/LICENSE +venv/Lib/site-packages/pytest-6.2.2.dist-info/METADATA +venv/Lib/site-packages/pytest-6.2.2.dist-info/RECORD +venv/Lib/site-packages/pytest-6.2.2.dist-info/REQUESTED +venv/Lib/site-packages/pytest-6.2.2.dist-info/top_level.txt +venv/Lib/site-packages/pytest-6.2.2.dist-info/WHEEL +venv/Lib/site-packages/pytest/__init__.py +venv/Lib/site-packages/pytest/__main__.py +venv/Lib/site-packages/pytest/collect.py +venv/Lib/site-packages/pytest/py.typed +venv/Lib/site-packages/pytest_dotenv-0.5.2.dist-info/entry_points.txt +venv/Lib/site-packages/pytest_dotenv-0.5.2.dist-info/INSTALLER +venv/Lib/site-packages/pytest_dotenv-0.5.2.dist-info/LICENSE +venv/Lib/site-packages/pytest_dotenv-0.5.2.dist-info/METADATA +venv/Lib/site-packages/pytest_dotenv-0.5.2.dist-info/RECORD +venv/Lib/site-packages/pytest_dotenv-0.5.2.dist-info/REQUESTED +venv/Lib/site-packages/pytest_dotenv-0.5.2.dist-info/top_level.txt +venv/Lib/site-packages/pytest_dotenv-0.5.2.dist-info/WHEEL +venv/Lib/site-packages/pytest_dotenv/__init__.py +venv/Lib/site-packages/pytest_dotenv/plugin.py +venv/Lib/site-packages/python_dateutil-2.8.1.dist-info/INSTALLER +venv/Lib/site-packages/python_dateutil-2.8.1.dist-info/LICENSE +venv/Lib/site-packages/python_dateutil-2.8.1.dist-info/METADATA +venv/Lib/site-packages/python_dateutil-2.8.1.dist-info/RECORD +venv/Lib/site-packages/python_dateutil-2.8.1.dist-info/REQUESTED +venv/Lib/site-packages/python_dateutil-2.8.1.dist-info/top_level.txt +venv/Lib/site-packages/python_dateutil-2.8.1.dist-info/WHEEL +venv/Lib/site-packages/python_dateutil-2.8.1.dist-info/zip-safe +venv/Lib/site-packages/requests-2.20.0.dist-info/DESCRIPTION.rst +venv/Lib/site-packages/requests-2.20.0.dist-info/INSTALLER +venv/Lib/site-packages/requests-2.20.0.dist-info/LICENSE.txt +venv/Lib/site-packages/requests-2.20.0.dist-info/METADATA +venv/Lib/site-packages/requests-2.20.0.dist-info/metadata.json +venv/Lib/site-packages/requests-2.20.0.dist-info/RECORD +venv/Lib/site-packages/requests-2.20.0.dist-info/REQUESTED +venv/Lib/site-packages/requests-2.20.0.dist-info/top_level.txt +venv/Lib/site-packages/requests-2.20.0.dist-info/WHEEL +venv/Lib/site-packages/six-1.15.0.dist-info/INSTALLER +venv/Lib/site-packages/six-1.15.0.dist-info/LICENSE +venv/Lib/site-packages/six-1.15.0.dist-info/METADATA +venv/Lib/site-packages/six-1.15.0.dist-info/RECORD +venv/Lib/site-packages/six-1.15.0.dist-info/top_level.txt +venv/Lib/site-packages/six-1.15.0.dist-info/WHEEL +venv/Lib/site-packages/six.py +venv/Lib/site-packages/toml-0.10.2.dist-info/INSTALLER +venv/Lib/site-packages/toml-0.10.2.dist-info/LICENSE +venv/Lib/site-packages/toml-0.10.2.dist-info/METADATA +venv/Lib/site-packages/toml-0.10.2.dist-info/RECORD +venv/Lib/site-packages/toml-0.10.2.dist-info/top_level.txt +venv/Lib/site-packages/toml-0.10.2.dist-info/WHEEL +venv/Lib/site-packages/toml/__init__.py +venv/Lib/site-packages/toml/decoder.py +venv/Lib/site-packages/toml/encoder.py +venv/Lib/site-packages/toml/ordered.py +venv/Lib/site-packages/toml/tz.py +venv/Lib/site-packages/typing_extensions-3.7.4.3.dist-info/INSTALLER +venv/Lib/site-packages/typing_extensions-3.7.4.3.dist-info/LICENSE +venv/Lib/site-packages/typing_extensions-3.7.4.3.dist-info/METADATA +venv/Lib/site-packages/typing_extensions-3.7.4.3.dist-info/RECORD +venv/Lib/site-packages/typing_extensions-3.7.4.3.dist-info/top_level.txt +venv/Lib/site-packages/typing_extensions-3.7.4.3.dist-info/WHEEL +venv/Lib/site-packages/typing_extensions.py +venv/Lib/site-packages/urllib3-1.24.3.dist-info/INSTALLER +venv/Lib/site-packages/urllib3-1.24.3.dist-info/LICENSE.txt +venv/Lib/site-packages/urllib3-1.24.3.dist-info/METADATA +venv/Lib/site-packages/urllib3-1.24.3.dist-info/RECORD +venv/Lib/site-packages/urllib3-1.24.3.dist-info/top_level.txt +venv/Lib/site-packages/urllib3-1.24.3.dist-info/WHEEL +venv/Lib/site-packages/zipp-3.4.0.dist-info/INSTALLER +venv/Lib/site-packages/zipp-3.4.0.dist-info/LICENSE +venv/Lib/site-packages/zipp-3.4.0.dist-info/METADATA +venv/Lib/site-packages/zipp-3.4.0.dist-info/RECORD +venv/Lib/site-packages/zipp-3.4.0.dist-info/top_level.txt +venv/Lib/site-packages/zipp-3.4.0.dist-info/WHEEL +venv/Lib/site-packages/zipp.py +venv/Scripts/py.test.exe +venv/Scripts/pytest.exe diff --git a/robin_stocks/helper.py b/robin_stocks/helper.py index 30af75b..1e1666a 100644 --- a/robin_stocks/helper.py +++ b/robin_stocks/helper.py @@ -18,39 +18,46 @@ def set_login_state(logged_in): global LOGGED_IN LOGGED_IN = logged_in + def set_output(output): """Sets the global output stream""" global OUTPUT OUTPUT = output - + + def get_output(): """Gets the current global output stream""" global OUTPUT return OUTPUT + def login_required(func): """A decorator for indicating which methods require the user to be logged in.""" + @wraps(func) def login_wrapper(*args, **kwargs): global LOGGED_IN if not LOGGED_IN: raise Exception('{} can only be called when logged in'.format( func.__name__)) - return(func(*args, **kwargs)) - return(login_wrapper) + return (func(*args, **kwargs)) + + return (login_wrapper) def convert_none_to_string(func): """A decorator for converting a None Type into a blank string""" + @wraps(func) def string_wrapper(*args, **kwargs): result = func(*args, **kwargs) if result: - return(result) + return (result) else: - return("") - return(string_wrapper) + return ("") + + return (string_wrapper) def id_for_stock(symbol): @@ -65,13 +72,13 @@ def id_for_stock(symbol): symbol = symbol.upper().strip() except AttributeError as message: print(message, file=get_output()) - return(None) + return (None) url = 'https://api.robinhood.com/instruments/' payload = {'symbol': symbol} data = request_get(url, 'indexzero', payload) - return(filter_data(data, 'id')) + return (filter_data(data, 'id')) def id_for_chain(symbol): @@ -86,7 +93,7 @@ def id_for_chain(symbol): symbol = symbol.upper().strip() except AttributeError as message: print(message, file=get_output()) - return(None) + return (None) url = 'https://api.robinhood.com/instruments/' @@ -94,9 +101,9 @@ def id_for_chain(symbol): data = request_get(url, 'indexzero', payload) if data: - return(data['tradable_chain_id']) + return (data['tradable_chain_id']) else: - return(data) + return (data) def id_for_group(symbol): @@ -111,12 +118,12 @@ def id_for_group(symbol): symbol = symbol.upper().strip() except AttributeError as message: print(message, file=get_output()) - return(None) + return (None) url = 'https://api.robinhood.com/options/chains/{0}/'.format( id_for_chain(symbol)) data = request_get(url) - return(data['underlying_instruments'][0]['id']) + return (data['underlying_instruments'][0]['id']) def id_for_option(symbol, expirationDate, strike, optionType): @@ -132,7 +139,7 @@ def id_for_option(symbol, expirationDate, strike, optionType): :type optionType: str :returns: A string that represents the stocks option id. - """ + """ symbol = symbol.upper() chain_id = id_for_chain(symbol) payload = { @@ -147,10 +154,12 @@ def id_for_option(symbol, expirationDate, strike, optionType): listOfOptions = [item for item in data if item["expiration_date"] == expirationDate] if (len(listOfOptions) == 0): - print('Getting the option ID failed. Perhaps the expiration date is wrong format, or the strike price is wrong.', file=get_output()) - return(None) + print( + 'Getting the option ID failed. Perhaps the expiration date is wrong format, or the strike price is wrong.', + file=get_output()) + return (None) - return(listOfOptions[0]['id']) + return (listOfOptions[0]['id']) def round_price(price): @@ -172,6 +181,49 @@ def round_price(price): return returnPrice +def convert_dtypes(data): + """ + Converts to float: + "adjusted_mark_price", "ask_price", "bid_price", "break_even_price", + "high_price", "last_trade_price", "low_price", "mark_price", + "previous_close_price", "chance_of_profit_long", "chance_of_profit_short", + "delta", "gamma", "implied_volatility", "rho", "theta", "vega", + "high_fill_rate_buy_price", "high_fill_rate_sell_price", "low_fill_rate_buy_price", + "low_fill_rate_sell_price", "last_extended_hours_trade_price", "previous_close", + "adjusted_previous_close", "below_tick", "above_tick", "estimate", "actual", "cutoff_price", + Converts to int: + "trade_value_multiplier", "year", "quarter", "ask_size", "bid_size", + "last_trade_size", "open_interest", "volume", + + :param data: The data passed into filter_data. + :returns: The dict with numerical types for the data from certain keys + """ + if isinstance(data, dict): + for key in data: + if isinstance(data[key], (dict, list)): + data[key] = convert_dtypes(data[key]) + elif key in { + "adjusted_mark_price", "ask_price", "bid_price", "break_even_price", + "high_price", "last_trade_price", "low_price", "mark_price", + "previous_close_price", "chance_of_profit_long", "chance_of_profit_short", + "delta", "gamma", "implied_volatility", "rho", "theta", "vega", + "high_fill_rate_buy_price", "high_fill_rate_sell_price", "low_fill_rate_buy_price", + "low_fill_rate_sell_price", "last_extended_hours_trade_price", "previous_close", + "adjusted_previous_close", "below_tick", "above_tick", "estimate", "actual", "cutoff_price", + } and isinstance(data[key], str): + data[key] = float(data[key]) + elif key in {"trade_value_multiplier", "year", "quarter", "ask_size", "bid_size", + "last_trade_size", "open_interest", "volume", } and isinstance(data[key], str): + data[key] = int(float(data[key])) + return data + elif isinstance(data, list): + for i in range(len(data)): + if isinstance(data[i], (dict, list)): + data[i] = convert_dtypes(data[i]) + return data + return data + + def filter_data(data, info): """Takes the data and extracts the value for the keyword that matches info. @@ -182,29 +234,30 @@ def filter_data(data, info): :returns: A list or string with the values that correspond to the info keyword. """ - if (data == None): - return(data) - elif (data == [None]): - return([]) - elif (type(data) == list): - if (len(data) == 0): - return([]) - compareDict = data[0] - noneType = [] - elif (type(data) == dict): - compareDict = data - noneType = None + none_type = None + compare_dict = {} + if data is None: + return data + elif data == [None]: + return [] + elif isinstance(data, list): + if len(data) == 0: + return [] + data = convert_dtypes(data) + compare_dict = data[0] + none_type = [] + elif isinstance(data, dict): + data = convert_dtypes(data) + compare_dict = data if info is not None: - if info in compareDict and type(data) == list: - return([x[info] for x in data]) - elif info in compareDict and type(data) == dict: - return(data[info]) - else: - print(error_argument_not_key_in_dictionary(info), file=get_output()) - return(noneType) - else: - return(data) + if info in compare_dict and isinstance(data, list): + return [x[info] for x in data] + elif info in compare_dict and isinstance(data, dict): + return data[info] + print(error_argument_not_key_in_dictionary(info), file=get_output()) + return none_type + return data def inputs_to_set(inputSymbols): @@ -234,7 +287,7 @@ def add_symbol(symbol): for item in inputSymbols: add_symbol(item) - return(symbols_list) + return (symbols_list) def request_document(url, payload=None): @@ -244,15 +297,15 @@ def request_document(url, payload=None): :type url: str :returns: Returns the session.get() data as opppose to session.get().json() data. - """ + """ try: res = SESSION.get(url, params=payload) res.raise_for_status() except requests.exceptions.HTTPError as message: print(message, file=get_output()) - return(None) + return (None) - return(res) + return (res) def request_get(url, dataType='regular', payload=None, jsonify_data=True): @@ -284,17 +337,17 @@ def request_get(url, dataType='regular', payload=None, jsonify_data=True): data = res.json() except (requests.exceptions.HTTPError, AttributeError) as message: print(message, file=get_output()) - return(data) + return (data) else: res = SESSION.get(url, params=payload) - return(res) + return (res) # Only continue to filter data if jsonify_data=True, and Session.get returned status code <200>. if (dataType == 'results'): try: data = data['results'] except KeyError as message: print("{0} is not a key in the dictionary".format(message), file=get_output()) - return([None]) + return ([None]) elif (dataType == 'pagination'): counter = 2 nextData = data @@ -302,7 +355,7 @@ def request_get(url, dataType='regular', payload=None, jsonify_data=True): data = data['results'] except KeyError as message: print("{0} is not a key in the dictionary".format(message), file=get_output()) - return([None]) + return ([None]) if nextData['next']: print('Found Additional pages.', file=get_output()) @@ -313,8 +366,8 @@ def request_get(url, dataType='regular', payload=None, jsonify_data=True): nextData = res.json() except: print('Additional pages exist but could not be loaded.', file=get_output()) - return(data) - print('Loading page '+str(counter)+' ...', file=get_output()) + return (data) + print('Loading page ' + str(counter) + ' ...', file=get_output()) counter += 1 for item in nextData['results']: data.append(item) @@ -323,11 +376,11 @@ def request_get(url, dataType='regular', payload=None, jsonify_data=True): data = data['results'][0] except KeyError as message: print("{0} is not a key in the dictionary".format(message), file=get_output()) - return(None) + return (None) except IndexError as message: - return(None) + return (None) - return(data) + return (data) def request_post(url, payload=None, timeout=16, json=False, jsonify_data=True): @@ -361,9 +414,9 @@ def request_post(url, payload=None, timeout=16, json=False, jsonify_data=True): print("Error in request_post: {0}".format(message), file=get_output()) # Either return response <200,401,etc.> or the data that is returned from requests. if jsonify_data: - return(data) + return (data) else: - return(res) + return (res) def request_delete(url): @@ -381,8 +434,8 @@ def request_delete(url): except Exception as message: data = None print("Error in request_delete: {0}".format(message), file=get_output()) - - return(data) + + return (data) def update_session(key, value): @@ -399,12 +452,12 @@ def update_session(key, value): def error_argument_not_key_in_dictionary(keyword): - return('Error: The keyword "{0}" is not a key in the dictionary.'.format(keyword)) + return ('Error: The keyword "{0}" is not a key in the dictionary.'.format(keyword)) def error_ticker_does_not_exist(ticker): - return('Warning: "{0}" is not a valid stock ticker. It is being ignored'.format(ticker)) + return ('Warning: "{0}" is not a valid stock ticker. It is being ignored'.format(ticker)) def error_must_be_nonzero(keyword): - return('Error: The input parameter "{0}" must be an integer larger than zero and non-negative'.format(keyword)) + return ('Error: The input parameter "{0}" must be an integer larger than zero and non-negative'.format(keyword)) diff --git a/setup.py b/setup.py index 4070515..30f953d 100644 --- a/setup.py +++ b/setup.py @@ -7,7 +7,7 @@ long_description = f.read() setup(name='robin_stocks', - version='1.7.1', + version='1.7.2', description='A Python wrapper around the Robinhood API', long_description=long_description, long_description_content_type='text/x-rst', diff --git a/tests/test_github_actions.py b/tests/test_github_actions.py index caec921..4e911e9 100644 --- a/tests/test_github_actions.py +++ b/tests/test_github_actions.py @@ -6,6 +6,7 @@ import pytest from dateutil.relativedelta import relativedelta + def third_friday(year, month, day): """Return datetime.date for monthly option expiration given year and month @@ -34,8 +35,8 @@ def round_up_price(ticker, multiplier): num = price + (multiplier - 1) return num - (num % multiplier) -class TestStocks: +class TestStocks: # Set up variables for class single_stock = 'AAPL' event_stock = 'USO1' @@ -48,7 +49,7 @@ class TestStocks: @classmethod def setup_class(cls): - totp = pyotp.TOTP(os.environ['robin_mfa']).now() + totp = pyotp.TOTP(os.environ['robin_mfa']).now() login = r.login(os.environ['robin_username'], os.environ['robin_password'], mfa_code=totp) @classmethod @@ -81,7 +82,7 @@ def test_quotes(self): assert ('instrument' in quote) # more_quotes = r.get_quotes(self.list_stocks, info=None) - assert (len(more_quotes) == len(self.list_stocks)) + assert (len(more_quotes) == len(self.list_stocks)) # fake_quotes = r.get_quotes(self.fake_stocks, info=None) assert (len(fake_quotes) == 1) @@ -287,15 +288,18 @@ def test_split(self): assert (len(fake_split) == 0) def test_stock_historicals(self): - historicals = r.get_stock_historicals(self.single_stock, interval='hour', span='day', bounds='regular', info=None) - assert (len(historicals) <= 6) # 6 regular hours in a day - historicals = r.get_stock_historicals(self.single_stock, interval='hour', span='day', bounds='trading', info=None) - assert (len(historicals) <= 9) # 9 trading hours total in a day - historicals = r.get_stock_historicals(self.single_stock, interval='hour', span='day', bounds='extended', info=None) - assert (len(historicals) <= 16) # 16 extended hours total in a day + historicals = r.get_stock_historicals(self.single_stock, interval='hour', span='day', bounds='regular', + info=None) + assert (len(historicals) <= 6) # 6 regular hours in a day + historicals = r.get_stock_historicals(self.single_stock, interval='hour', span='day', bounds='trading', + info=None) + assert (len(historicals) <= 9) # 9 trading hours total in a day + historicals = r.get_stock_historicals(self.single_stock, interval='hour', span='day', bounds='extended', + info=None) + assert (len(historicals) <= 16) # 16 extended hours total in a day -class TestCrypto: +class TestCrypto: stock = 'AAPL' bitcoin = 'BTC' bitcoin_currency = 'BTC-USD' @@ -305,7 +309,7 @@ class TestCrypto: @classmethod def setup_class(cls): - totp = pyotp.TOTP(os.environ['robin_mfa']).now() + totp = pyotp.TOTP(os.environ['robin_mfa']).now() login = r.login(os.environ['robin_username'], os.environ['robin_password'], mfa_code=totp) @classmethod @@ -391,18 +395,18 @@ def test_crypto_historicals(self): assert ('interpolated' in first_point) # crypto = r.get_crypto_historicals(self.bitcoin, 'hour', 'day', 'regular', info=None) - assert (len(crypto) <= 6) # 6 regular hours in a day + assert (len(crypto) <= 6) # 6 regular hours in a day crypto = r.get_crypto_historicals(self.bitcoin, 'hour', 'day', 'trading', info=None) - assert (len(crypto) <= 9) # 9 trading hours in a day + assert (len(crypto) <= 9) # 9 trading hours in a day crypto = r.get_crypto_historicals(self.bitcoin, 'hour', 'day', 'extended', info=None) - assert (len(crypto) <= 16) # 16 extended hours in a day + assert (len(crypto) <= 16) # 16 extended hours in a day crypto = r.get_crypto_historicals(self.bitcoin, 'hour', 'day', '24_7', info=None) - assert (len(crypto) <= 24) # 24 24_7 hours in a day + assert (len(crypto) <= 24) # 24 24_7 hours in a day -class TestOptions: +class TestOptions: # have to login to use round_up_price - totp = pyotp.TOTP(os.environ['robin_mfa']).now() + totp = pyotp.TOTP(os.environ['robin_mfa']).now() login = r.login(os.environ['robin_username'], os.environ['robin_password'], mfa_code=totp) # now = datetime.datetime.now() + relativedelta(months=1) @@ -412,7 +416,7 @@ class TestOptions: @classmethod def setup_class(cls): - totp = pyotp.TOTP(os.environ['robin_mfa']).now() + totp = pyotp.TOTP(os.environ['robin_mfa']).now() login = r.login(os.environ['robin_username'], os.environ['robin_password'], mfa_code=totp) @classmethod @@ -434,7 +438,7 @@ def test_find_tradable_options(self): def test_find_options_by_strike(self): info = r.find_options_by_strike(self.symbol, self.strike) assert (len(info) >= 24) - info = r.find_options_by_strike(self.symbol, self.strike,'call') + info = r.find_options_by_strike(self.symbol, self.strike, 'call') assert (info[0]['type'] == 'call') info = r.find_options_by_strike(self.symbol, self.strike, info='expiration_date') assert (len(set(info)) > 1) @@ -450,8 +454,8 @@ def test_find_options_by_expiration_and_strike(self): assert (len(info) == 1) assert (info[0]['type'] == 'call') -class TestMarkets: +class TestMarkets: today = datetime.datetime.today().strftime('%Y-%m-%d') american_time = datetime.datetime.today().strftime('%m-%d-%Y') nyse = 'XNYS' @@ -461,7 +465,7 @@ class TestMarkets: @classmethod def setup_class(cls): - totp = pyotp.TOTP(os.environ['robin_mfa']).now() + totp = pyotp.TOTP(os.environ['robin_mfa']).now() login = r.login(os.environ['robin_username'], os.environ['robin_password'], mfa_code=totp) @classmethod @@ -634,10 +638,11 @@ def test_market_date_fail(self): market = r.get_market_hours(self.nasdaq, self.american_time) assert market + class TestProfiles: @classmethod def setup_class(cls): - totp = pyotp.TOTP(os.environ['robin_mfa']).now() + totp = pyotp.TOTP(os.environ['robin_mfa']).now() login = r.login(os.environ['robin_username'], os.environ['robin_password'], mfa_code=totp) @classmethod From 337fc490ec786f633f73964b1cef6a44905ef046 Mon Sep 17 00:00:00 2001 From: Phillyclause89 <45711864+Phillyclause89@users.noreply.github.com> Date: Wed, 17 Feb 2021 22:28:23 -0800 Subject: [PATCH 2/2] unit test updates and keys added to helper.convert_dtypes some unit test now make assertions about the object types. More dict keys targeted by helper.convert_dtypes --- robin_stocks/helper.py | 18 ++++- setup.py | 2 +- tests/test_github_actions.py | 147 ++++++++++++++++++++++++++++++++++- 3 files changed, 160 insertions(+), 7 deletions(-) diff --git a/robin_stocks/helper.py b/robin_stocks/helper.py index 1e1666a..99c9c65 100644 --- a/robin_stocks/helper.py +++ b/robin_stocks/helper.py @@ -191,9 +191,14 @@ def convert_dtypes(data): "high_fill_rate_buy_price", "high_fill_rate_sell_price", "low_fill_rate_buy_price", "low_fill_rate_sell_price", "last_extended_hours_trade_price", "previous_close", "adjusted_previous_close", "below_tick", "above_tick", "estimate", "actual", "cutoff_price", + "open", "high", "low", "average_volume_2_weeks", "average_volume", "high_52_weeks", + "dividend_yield", "low_52_weeks", "market_cap", "pb_ratio", "pe_ratio", "shares_outstanding", + "margin_initial_ratio", "maintenance_ratio", "day_trade_ratio", "default_collar_fraction", + "underlying_price", "total_cash_amount", "quantity", "actual", "estimate", Converts to int: "trade_value_multiplier", "year", "quarter", "ask_size", "bid_size", - "last_trade_size", "open_interest", "volume", + "last_trade_size", "open_interest", "volume", "float", "num_employees" + "year_founded", "num_buy_ratings", "num_sell_ratings", "num_hold_ratings", :param data: The data passed into filter_data. :returns: The dict with numerical types for the data from certain keys @@ -210,10 +215,17 @@ def convert_dtypes(data): "high_fill_rate_buy_price", "high_fill_rate_sell_price", "low_fill_rate_buy_price", "low_fill_rate_sell_price", "last_extended_hours_trade_price", "previous_close", "adjusted_previous_close", "below_tick", "above_tick", "estimate", "actual", "cutoff_price", + "open", "high", "low", "average_volume_2_weeks", "average_volume", "high_52_weeks", + "dividend_yield", "low_52_weeks", "market_cap", "pb_ratio", "pe_ratio", "shares_outstanding", + "margin_initial_ratio", "maintenance_ratio", "day_trade_ratio", "default_collar_fraction", + "underlying_price", "total_cash_amount", "quantity", "actual", "estimate", } and isinstance(data[key], str): data[key] = float(data[key]) - elif key in {"trade_value_multiplier", "year", "quarter", "ask_size", "bid_size", - "last_trade_size", "open_interest", "volume", } and isinstance(data[key], str): + elif key in { + "trade_value_multiplier", "year", "quarter", "ask_size", "bid_size", + "last_trade_size", "open_interest", "volume", "float", "num_employees", + "year_founded", "num_buy_ratings", "num_sell_ratings", "num_hold_ratings", + } and isinstance(data[key], str): data[key] = int(float(data[key])) return data elif isinstance(data, list): diff --git a/setup.py b/setup.py index 30f953d..d4c4fb3 100644 --- a/setup.py +++ b/setup.py @@ -7,7 +7,7 @@ long_description = f.read() setup(name='robin_stocks', - version='1.7.2', + version='1.7.3', description='A Python wrapper around the Robinhood API', long_description=long_description, long_description_content_type='text/x-rst', diff --git a/tests/test_github_actions.py b/tests/test_github_actions.py index 4e911e9..3386d9a 100644 --- a/tests/test_github_actions.py +++ b/tests/test_github_actions.py @@ -66,20 +66,35 @@ def test_quotes(self): quote = quote[0] assert (quote['symbol'] == self.single_stock) assert ('ask_price' in quote) + assert isinstance(quote["ask_price"], float) assert ('ask_size' in quote) + assert isinstance(quote["ask_size"], int) assert ('bid_price' in quote) + assert isinstance(quote["bid_price"], float) assert ('bid_size' in quote) + assert isinstance(quote["bid_size"], int) assert ('last_trade_price' in quote) + assert isinstance(quote["last_trade_price"], float) assert ('last_extended_hours_trade_price' in quote) + assert isinstance(quote["last_extended_hours_trade_price"], float) assert ('previous_close' in quote) + assert isinstance(quote["previous_close"], float) assert ('adjusted_previous_close' in quote) + assert isinstance(quote["adjusted_previous_close"], float) assert ('previous_close_date' in quote) + assert isinstance(quote["previous_close_date"], str) assert ('symbol' in quote) + assert isinstance(quote["symbol"], str) assert ('trading_halted' in quote) + assert isinstance(quote["trading_halted"], bool) assert ('has_traded' in quote) + assert isinstance(quote["has_traded"], bool) assert ('last_trade_price_source' in quote) + assert isinstance(quote["last_trade_price_source"], str) assert ('updated_at' in quote) + assert isinstance(quote["updated_at"], str) assert ('instrument' in quote) + assert isinstance(quote["instrument"], str) # more_quotes = r.get_quotes(self.list_stocks, info=None) assert (len(more_quotes) == len(self.list_stocks)) @@ -94,36 +109,60 @@ def test_fundamentals(self): assert (quote[0]['symbol'] == self.single_stock) quote = quote[0] assert ('open' in quote) + assert isinstance(quote["open"], float) assert ('high' in quote) + assert isinstance(quote["high"], float) assert ('low' in quote) + assert isinstance(quote["low"], float) assert ('volume' in quote) + assert isinstance(quote["volume"], int) assert ('average_volume_2_weeks' in quote) + assert isinstance(quote["average_volume_2_weeks"], float) assert ('average_volume' in quote) + assert isinstance(quote["average_volume"], float) assert ('high_52_weeks' in quote) + assert isinstance(quote["high_52_weeks"], float) assert ('dividend_yield' in quote) + assert isinstance(quote["dividend_yield"], float) assert ('float' in quote) + assert isinstance(quote["float"], int) assert ('low_52_weeks' in quote) + assert isinstance(quote["low_52_weeks"], float) assert ('market_cap' in quote) + assert isinstance(quote["market_cap"], float) assert ('pb_ratio' in quote) + assert isinstance(quote["pb_ratio"], float) assert ('pe_ratio' in quote) + assert isinstance(quote["pe_ratio"], float) assert ('shares_outstanding' in quote) + assert isinstance(quote["shares_outstanding"], float) assert ('description' in quote) + assert isinstance(quote["description"], str) assert ('instrument' in quote) + assert isinstance(quote["instrument"], str) assert ('ceo' in quote) + assert isinstance(quote["ceo"], str) assert ('headquarters_city' in quote) + assert isinstance(quote["headquarters_city"], str) assert ('headquarters_state' in quote) + assert isinstance(quote["headquarters_state"], str) assert ('sector' in quote) + assert isinstance(quote["sector"], str) assert ('industry' in quote) + assert isinstance(quote["industry"], str) assert ('num_employees' in quote) + assert isinstance(quote["num_employees"], int) assert ('year_founded' in quote) + assert isinstance(quote["year_founded"], int) assert ('symbol' in quote) + assert isinstance(quote["symbol"], str) # more_quotes = r.get_fundamentals(self.list_stocks, info=None) assert (len(more_quotes) == len(self.list_stocks)) # fake_quotes = r.get_fundamentals(self.fake_stocks, info=None) assert (len(fake_quotes) == 1) - assert (fake_quotes[0] == None) + assert (fake_quotes[0] is None) def test_instruments(self): quote = r.get_instruments_by_symbols(self.single_stock) @@ -131,29 +170,52 @@ def test_instruments(self): assert (quote[0]['symbol'] == self.single_stock) quote = quote[0] assert ('id' in quote) + assert isinstance(quote["id"], str) assert ('url' in quote) + assert isinstance(quote["url"], str) assert ('quote' in quote) + assert isinstance(quote["quote"], str) assert ('fundamentals' in quote) + assert isinstance(quote["fundamentals"], str) assert ('splits' in quote) + assert isinstance(quote["splits"], str) assert ('state' in quote) + assert isinstance(quote["state"], str) assert ('market' in quote) + assert isinstance(quote["market"], str) assert ('simple_name' in quote) + assert isinstance(quote["simple_name"], str) assert ('name' in quote) + assert isinstance(quote["name"], str) assert ('tradeable' in quote) + assert isinstance(quote["tradeable"], bool) assert ('tradability' in quote) + assert isinstance(quote["tradability"], str) assert ('symbol' in quote) + assert isinstance(quote["symbol"], str) assert ('bloomberg_unique' in quote) + assert isinstance(quote["bloomberg_unique"], str) assert ('margin_initial_ratio' in quote) + assert isinstance(quote["margin_initial_ratio"], float) assert ('maintenance_ratio' in quote) + assert isinstance(quote["maintenance_ratio"], float) assert ('country' in quote) + assert isinstance(quote["country"], str) assert ('day_trade_ratio' in quote) + assert isinstance(quote["day_trade_ratio"], float) assert ('list_date' in quote) + assert isinstance(quote["list_date"], str) assert ('min_tick_size' in quote) assert ('type' in quote) + assert isinstance(quote["type"], str) assert ('tradable_chain_id' in quote) + assert isinstance(quote["tradable_chain_id"], str) assert ('rhs_tradability' in quote) + assert isinstance(quote["rhs_tradability"], str) assert ('fractional_tradability' in quote) + assert isinstance(quote["fractional_tradability"], str) assert ('default_collar_fraction' in quote) + assert isinstance(quote["default_collar_fraction"], float) # more_quotes = r.get_fundamentals(self.list_stocks, info=None) assert (len(more_quotes) == len(self.list_stocks)) @@ -166,32 +228,56 @@ def test_instrument_id(self): quote = r.get_instrument_by_url(self.instrument) assert (quote['symbol'] == self.single_stock) assert ('id' in quote) + assert isinstance(quote["id"], str) assert ('url' in quote) + assert isinstance(quote["url"], str) assert ('quote' in quote) + assert isinstance(quote["quote"], str) assert ('fundamentals' in quote) + assert isinstance(quote["fundamentals"], str) assert ('splits' in quote) + assert isinstance(quote["splits"], str) assert ('state' in quote) + assert isinstance(quote["state"], str) assert ('market' in quote) + assert isinstance(quote["market"], str) assert ('simple_name' in quote) + assert isinstance(quote["simple_name"], str) assert ('name' in quote) + assert isinstance(quote["name"], str) assert ('tradeable' in quote) + assert isinstance(quote["tradeable"], bool) assert ('tradability' in quote) + assert isinstance(quote["tradability"], str) assert ('symbol' in quote) + assert isinstance(quote["symbol"], str) assert ('bloomberg_unique' in quote) + assert isinstance(quote["bloomberg_unique"], str) assert ('margin_initial_ratio' in quote) + assert isinstance(quote["margin_initial_ratio"], float) assert ('maintenance_ratio' in quote) + assert isinstance(quote["maintenance_ratio"], float) assert ('country' in quote) + assert isinstance(quote["country"], str) assert ('day_trade_ratio' in quote) + assert isinstance(quote["day_trade_ratio"], float) assert ('list_date' in quote) + assert isinstance(quote["list_date"], str) assert ('min_tick_size' in quote) assert ('type' in quote) + assert isinstance(quote["type"], str) assert ('tradable_chain_id' in quote) + assert isinstance(quote["tradable_chain_id"], str) assert ('rhs_tradability' in quote) + assert isinstance(quote["rhs_tradability"], str) assert ('fractional_tradability' in quote) + assert isinstance(quote["fractional_tradability"], str) assert ('default_collar_fraction' in quote) + assert isinstance(quote["default_collar_fraction"], float) def test_latest_price(self): price = r.get_latest_price(self.single_stock) + assert isinstance(price[0], float) assert (len(price) == 1) more_prices = r.get_latest_price(self.list_stocks) assert (len(more_prices) == len(self.list_stocks)) @@ -220,9 +306,27 @@ def test_symbol_by_url(self): def test_get_ratings(self): ratings = r.get_ratings(self.single_stock) assert ('summary' in ratings) + assert isinstance(ratings["summary"], dict) + assert ("num_buy_ratings" in ratings["summary"]) + assert isinstance(ratings["summary"]["num_buy_ratings"], int) + assert ("num_hold_ratings" in ratings["summary"]) + assert isinstance(ratings["summary"]["num_hold_ratings"], int) + assert ("num_sell_ratings" in ratings["summary"]) + assert isinstance(ratings["summary"]["num_sell_ratings"], int) assert ('ratings' in ratings) + assert isinstance(ratings["ratings"], list) + for rating in ratings["ratings"]: + assert isinstance(rating, dict) + assert ("published_at" in rating) + assert isinstance(rating["published_at"], str) + assert ("text" in rating) + assert isinstance(rating["published_at"], str) + assert ("type" in rating) + assert isinstance(rating["published_at"], str) assert ('instrument_id' in ratings) + assert isinstance(ratings["instrument_id"], str) assert ('ratings_published_at' in ratings) + assert isinstance(ratings["ratings_published_at"], str) fake_ratings = r.get_ratings(self.fake_stock) assert (fake_ratings == '') @@ -233,32 +337,68 @@ def test_events(self): assert (len(event) != 0) event = event[0] assert ('account' in event) + assert isinstance(event["account"], str) assert ('cash_component' in event) assert ('chain_id' in event) + assert isinstance(event["chain_id"], str) assert ('created_at' in event) + assert isinstance(event["created_at"], str) assert ('direction' in event) + assert isinstance(event["direction"], str) assert ('equity_components' in event) + assert isinstance(event["equity_components"], list) assert ('event_date' in event) + assert isinstance(event["event_date"], str) assert ('id' in event) + assert isinstance(event["id"], str) assert ('option' in event) + assert isinstance(event["option"], str) assert ('position' in event) + assert isinstance(event["position"], str) assert ('quantity' in event) + assert isinstance(event["quantity"], float) assert ('state' in event) + assert isinstance(event["state"], str) assert ('total_cash_amount' in event) + assert isinstance(event["total_cash_amount"], float) assert ('type' in event) + assert isinstance(event["type"], str) assert ('underlying_price' in event) + assert isinstance(event["underlying_price"], float) assert ('updated_at' in event) + assert isinstance(event["updated_at"], str) def test_earning(self): earnings = r.get_earnings(self.single_stock)[0] - assert (earnings['symbol'] == self.single_stock) assert ('symbol' in earnings) + assert (earnings['symbol'] == self.single_stock) assert ('instrument' in earnings) + assert isinstance(earnings["instrument"], str) assert ('year' in earnings) + assert isinstance(earnings["year"], int) assert ('quarter' in earnings) + assert isinstance(earnings["quarter"], int) assert ('eps' in earnings) + assert isinstance(earnings["eps"], dict) + assert ("actual" in earnings["eps"]) + assert isinstance(earnings["eps"]["actual"], float) + assert ("estimate" in earnings["eps"]) + assert isinstance(earnings["eps"]["estimate"], float) assert ('report' in earnings) + assert isinstance(earnings["report"], dict) + assert ("date" in earnings["report"]) + assert isinstance(earnings["report"]["date"], str) + assert ("timing" in earnings["report"]) + assert isinstance(earnings["report"]["timing"], str) + assert ("verified" in earnings["report"]) + assert isinstance(earnings["report"]["verified"], bool) assert ('call' in earnings) + assert isinstance(earnings["call"], dict) + assert ("broadcast_url" in earnings["call"]) + assert ("datetime" in earnings["call"]) + assert isinstance(earnings["call"]["datetime"], str) + assert ("replay_url" in earnings["call"]) + assert isinstance(earnings["call"]["replay_url"], str) fake_earnings = r.get_earnings(self.fake_stock) assert (len(fake_earnings) == 0) @@ -610,7 +750,8 @@ def test_get_market_hours(self): assert ('previous_open_hours' in market) assert ('next_open_hours' in market) todaymarket = r.get_market_today_hours(self.nasdaq) - assert (market['date'] == todaymarket['date']) + assert (datetime.datetime.strptime(market['date'], "%Y-%m-%d") <= datetime.datetime.strptime( + todaymarket['date'], "%Y-%m-%d")) def test_currency_pairs(self): currency = r.get_currency_pairs()