├── .tool-versions ├── test.py ├── databricks_api ├── _version.py ├── __init__.py ├── databricks.pyi ├── databricks.py └── _stubs.py ├── CHANGELOG.rst ├── Makefile ├── LICENSE.txt ├── pyproject.toml ├── .gitignore ├── generate_docs.py ├── README.rst └── poetry.lock /.tool-versions: -------------------------------------------------------------------------------- 1 | python 3.7.4 2 | poetry 1.1.6 3 | -------------------------------------------------------------------------------- /test.py: -------------------------------------------------------------------------------- 1 | import os 2 | 3 | from databricks_api.databricks import DatabricksAPI 4 | 5 | TOKEN = os.environ["DATABRICKS_TOKEN"] 6 | HOST = os.environ["DATABRICKS_HOST"] 7 | 8 | 9 | def test_databricks_api(): 10 | db = DatabricksAPI(host=HOST, token=TOKEN) 11 | print(db.__dict__) 12 | -------------------------------------------------------------------------------- /databricks_api/_version.py: -------------------------------------------------------------------------------- 1 | """Version information.""" 2 | __title__ = "databricks-api" 3 | __description__ = "Databricks API client interface." 4 | __url__ = "https://github.com/crflynn/databricks-api" 5 | __version__ = "0.6.0" 6 | __author__ = "Christopher Flynn" 7 | __author_email__ = "crf204@gmail.com" 8 | __license__ = "MIT" 9 | __copyright__ = "Copyright 2018-2020 Christopher Flynn" 10 | -------------------------------------------------------------------------------- /databricks_api/__init__.py: -------------------------------------------------------------------------------- 1 | from databricks_api.databricks import DatabricksAPI 2 | from databricks_api._version import __author__ 3 | from databricks_api._version import __author_email__ 4 | from databricks_api._version import __copyright__ 5 | from databricks_api._version import __description__ 6 | from databricks_api._version import __license__ 7 | from databricks_api._version import __title__ 8 | from databricks_api._version import __url__ 9 | from databricks_api._version import __version__ 10 | -------------------------------------------------------------------------------- /databricks_api/databricks.pyi: -------------------------------------------------------------------------------- 1 | from databricks_cli.sdk import ApiClient 2 | from databricks_cli.sdk.service import * 3 | 4 | class DatabricksAPI: 5 | def __init__(self, **kwargs): 6 | self.client: ApiClient = ... 7 | self.jobs: JobsService = ... 8 | self.cluster: ClusterService = ... 9 | self.policy: PolicyService = ... 10 | self.managed_library: ManagedLibraryService = ... 11 | self.dbfs: DbfsService = ... 12 | self.workspace: WorkspaceService = ... 13 | self.secret: SecretService = ... 14 | self.groups: GroupsService = ... 15 | self.token: TokenService = ... 16 | self.instance_pool: InstancePoolService = ... 17 | self.delta_pipelines: DeltaPipelinesService = ... 18 | -------------------------------------------------------------------------------- /CHANGELOG.rst: -------------------------------------------------------------------------------- 1 | Changelog 2 | --------- 3 | 4 | 0.6.0: 2020-11-26 5 | ~~~~~~~~~~~~~~~~~ 6 | * add stub file for `DatabricksAPI` 7 | * remove `camel_to_snake` from `__all__` 8 | 9 | 0.5.0: 2020-09-23 10 | ~~~~~~~~~~~~~~~~~ 11 | 12 | * Update to databricks-cli 0.12.0, which adds support for policy, token, and delta_pipeline APIs 13 | 14 | 0.4.0: 2020-04-01 15 | ~~~~~~~~~~~~~~~~~ 16 | 17 | * Update to databricks-cli 0.10.0, which adds back the init_script args in the cluster API 18 | 19 | 0.3.0: 2019-08-28 20 | ~~~~~~~~~~~~~~~~~ 21 | 22 | * Update to databricks-cli 0.9.0, adding instance pool functionality 23 | * Fix package metadata access 24 | 25 | 0.2.0: 2019-08-17 26 | ~~~~~~~~~~~~~~~~~ 27 | 28 | * Update with restricted databricks-cli versions to prevent future breaking on major/minor updates to cli 29 | 30 | 0.1.0: 2018-10-10 31 | ~~~~~~~~~~~~~~~~~ 32 | 33 | * First release 34 | -------------------------------------------------------------------------------- /Makefile: -------------------------------------------------------------------------------- 1 | VERSION := ${shell poetry run python -c "import databricks_api; print(databricks_api.__version__)"} 2 | 3 | .PHONY: setup 4 | setup: 5 | brew install asdf ghr || True 6 | asdf install 7 | poetry install 8 | 9 | .PHONY: clean 10 | clean: 11 | rm -rf dist/ 12 | 13 | .PHONY: build 14 | build: 15 | poetry build 16 | 17 | .PHONY: publish 18 | publish: build 19 | poetry publish 20 | 21 | .PHONY: release 22 | release: clean publish 23 | @echo sha: $(shell git rev-parse HEAD) 24 | @echo version: $(VERSION) 25 | ghr -t $(GITHUB_TOKEN) -u crflynn -r databricks-api -n $(VERSION) -c $(shell git rev-parse HEAD) -delete $(VERSION) dist/ 26 | 27 | .PHONY: update 28 | update: 29 | poetry update databricks_cli 30 | poetry run python generate_docs.py 31 | 32 | stubs: 33 | poetry run python -m databricks_api._stubs 34 | poetry run black . 35 | 36 | fmt: 37 | poetry run black . 38 | -------------------------------------------------------------------------------- /databricks_api/databricks.py: -------------------------------------------------------------------------------- 1 | import re 2 | 3 | import databricks_cli.sdk.service as services 4 | from databricks_cli.sdk import ApiClient 5 | 6 | ___all__ = ["DatabricksAPI"] 7 | 8 | 9 | def camel_to_snake(name): 10 | s = re.sub("(.)([A-Z][a-z]+)", r"\1_\2", name) 11 | return re.sub("([a-z0-9])([A-Z])", r"\1_\2", s).lower() 12 | 13 | 14 | def _get_services(): 15 | for service_name, service in services.__dict__.items(): 16 | if "Service" in service_name: 17 | camel_name = camel_to_snake(service_name.replace("Service", "")) 18 | yield service_name, camel_name, service 19 | 20 | 21 | class DatabricksAPI: 22 | def __init__(self, **kwargs): 23 | if "host" in kwargs: 24 | if not kwargs["host"].startswith("https://"): 25 | kwargs["host"] = "https://" + kwargs["host"] 26 | 27 | self.client = ApiClient(**kwargs) 28 | 29 | for _, camel_name, service in _get_services(): 30 | setattr(self, camel_name, service(self.client)) 31 | -------------------------------------------------------------------------------- /databricks_api/_stubs.py: -------------------------------------------------------------------------------- 1 | from pathlib import Path 2 | 3 | from databricks_api.databricks import DatabricksAPI 4 | from databricks_api.databricks import _get_services 5 | 6 | 7 | def _write_stubs(): 8 | parent_dir = Path(__file__).parent 9 | path = Path(parent_dir, "databricks").with_suffix(".pyi") 10 | with open(path, "w") as stub_file: 11 | stub_file.write("from databricks_cli.sdk import ApiClient\n") 12 | stub_file.write("from databricks_cli.sdk.service import *\n\n") 13 | stub_file.write(f"class {DatabricksAPI.__name__}:\n") 14 | stub_file.write(" def __init__(self, **kwargs):\n") 15 | stub_file.write(" self.client: ApiClient = ...\n") 16 | stub_file.write( 17 | "\n".join( 18 | f" self.{camel_name}: {service_name} = ..." 19 | for service_name, camel_name, service in _get_services() 20 | ) 21 | ) 22 | stub_file.write("\n") 23 | 24 | 25 | if __name__ == "__main__": 26 | _write_stubs() 27 | -------------------------------------------------------------------------------- /LICENSE.txt: -------------------------------------------------------------------------------- 1 | MIT License 2 | 3 | Copyright (c) 2018-2020 Christopher Flynn 4 | 5 | Permission is hereby granted, free of charge, to any person obtaining a copy 6 | of this software and associated documentation files (the "Software"), to deal 7 | in the Software without restriction, including without limitation the rights 8 | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 9 | copies of the Software, and to permit persons to whom the Software is 10 | furnished to do so, subject to the following conditions: 11 | 12 | The above copyright notice and this permission notice shall be included in all 13 | copies or substantial portions of the Software. 14 | 15 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 16 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 17 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 18 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 19 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 20 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE 21 | SOFTWARE. -------------------------------------------------------------------------------- /pyproject.toml: -------------------------------------------------------------------------------- 1 | [tool.black] 2 | line-length = 120 3 | target-version = ['py37'] 4 | include = '\.pyi?$' 5 | exclude = ''' 6 | ( 7 | /( 8 | \.eggs 9 | | \.git 10 | | \.github 11 | | \.hg 12 | | \.mypy_cache 13 | | \.pytest_cache 14 | | \.tox 15 | | \.venv 16 | | _build 17 | | build 18 | | dist 19 | )/ 20 | ) 21 | ''' 22 | 23 | [tool.poetry] 24 | name = "databricks_api" 25 | version = "0.6.0" 26 | description = "Databricks API client auto-generated from the official databricks-cli package" 27 | authors = ["Christopher Flynn "] 28 | readme = "README.rst" 29 | license = "MIT" 30 | repository = "https://github.com/crflynn/databricks-api" 31 | homepage = "https://github.com/crflynn/databricks-api" 32 | packages = [ 33 | { include = "databricks_api" } 34 | ] 35 | include = ["CHANGELOG.rst"] 36 | keywords = ["databricks", "api", "client"] 37 | classifiers = [ 38 | "License :: OSI Approved :: MIT License", 39 | "Natural Language :: English", 40 | "Programming Language :: Python :: 2", 41 | "Programming Language :: Python :: 2.7", 42 | "Programming Language :: Python :: 3", 43 | "Programming Language :: Python :: 3.5", 44 | "Programming Language :: Python :: 3.6", 45 | "Programming Language :: Python :: 3.7", 46 | "Programming Language :: Python :: 3.8", 47 | "Programming Language :: Python :: Implementation :: CPython", 48 | ] 49 | 50 | 51 | [tool.poetry.dependencies] 52 | python = "~2.7 || ^3.5" 53 | databricks-cli = "^0.12.0" 54 | 55 | [tool.poetry.dev-dependencies] 56 | black = {version = "^19.10b0",allow-prereleases = true,python = "^3.7"} 57 | pytest = "=4.6" 58 | 59 | [build-system] 60 | requires = ["poetry>=0.12"] 61 | build-backend = "poetry.masonry.api" 62 | -------------------------------------------------------------------------------- /.gitignore: -------------------------------------------------------------------------------- 1 | # Byte-compiled / optimized / DLL files 2 | __pycache__/ 3 | *.py[cod] 4 | *$py.class 5 | 6 | # C extensions 7 | *.so 8 | 9 | # Distribution / packaging 10 | .Python 11 | build/ 12 | develop-eggs/ 13 | dist/ 14 | downloads/ 15 | eggs/ 16 | .eggs/ 17 | lib/ 18 | lib64/ 19 | parts/ 20 | sdist/ 21 | var/ 22 | wheels/ 23 | pip-wheel-metadata/ 24 | share/python-wheels/ 25 | *.egg-info/ 26 | .installed.cfg 27 | *.egg 28 | MANIFEST 29 | 30 | # PyInstaller 31 | # Usually these files are written by a python script from a template 32 | # before PyInstaller builds the exe, so as to inject date/other infos into it. 33 | *.manifest 34 | *.spec 35 | 36 | # Installer logs 37 | pip-log.txt 38 | pip-delete-this-directory.txt 39 | 40 | # Unit test / coverage reports 41 | htmlcov/ 42 | .tox/ 43 | .nox/ 44 | .coverage 45 | .coverage.* 46 | .cache 47 | nosetests.xml 48 | coverage.xml 49 | *.cover 50 | *.py,cover 51 | .hypothesis/ 52 | .pytest_cache/ 53 | cover/ 54 | 55 | # Translations 56 | *.mo 57 | *.pot 58 | 59 | # Django stuff: 60 | *.log 61 | local_settings.py 62 | db.sqlite3 63 | db.sqlite3-journal 64 | 65 | # Flask stuff: 66 | instance/ 67 | .webassets-cache 68 | 69 | # Scrapy stuff: 70 | .scrapy 71 | 72 | # Sphinx documentation 73 | docs/_build/ 74 | 75 | # PyBuilder 76 | .pybuilder/ 77 | target/ 78 | 79 | # Jupyter Notebook 80 | .ipynb_checkpoints 81 | 82 | # IPython 83 | profile_default/ 84 | ipython_config.py 85 | 86 | # pyenv 87 | # For a library or package, you might want to ignore these files since the code is 88 | # intended to run in multiple environments; otherwise, check them in: 89 | # .python-version 90 | 91 | # pipenv 92 | # According to pypa/pipenv#598, it is recommended to include Pipfile.lock in version control. 93 | # However, in case of collaboration, if having platform-specific dependencies or dependencies 94 | # having no cross-platform support, pipenv may install dependencies that don't work, or not 95 | # install all needed dependencies. 96 | #Pipfile.lock 97 | 98 | # PEP 582; used by e.g. github.com/David-OConnor/pyflow 99 | __pypackages__/ 100 | 101 | # Celery stuff 102 | celerybeat-schedule 103 | celerybeat.pid 104 | 105 | # SageMath parsed files 106 | *.sage.py 107 | 108 | # Environments 109 | .env 110 | .venv 111 | env/ 112 | venv/ 113 | ENV/ 114 | env.bak/ 115 | venv.bak/ 116 | 117 | # Spyder project settings 118 | .spyderproject 119 | .spyproject 120 | 121 | # Rope project settings 122 | .ropeproject 123 | 124 | # mkdocs documentation 125 | /site 126 | 127 | # mypy 128 | .mypy_cache/ 129 | .dmypy.json 130 | dmypy.json 131 | 132 | # Pyre type checker 133 | .pyre/ 134 | 135 | # pytype static type analyzer 136 | .pytype/ 137 | 138 | # Cython debug symbols 139 | cython_debug/ 140 | 141 | # static files generated from Django application using `collectstatic` 142 | media 143 | static 144 | 145 | # intellij 146 | .idea/ 147 | 148 | # macos 149 | .DS_Store 150 | 151 | # test file 152 | test.sh 153 | -------------------------------------------------------------------------------- /generate_docs.py: -------------------------------------------------------------------------------- 1 | import inspect 2 | 3 | from databricks_api import DatabricksAPI 4 | import databricks_cli 5 | 6 | 7 | db = DatabricksAPI(host="localhost", token="token") 8 | 9 | 10 | intro = """databricks-api 11 | ============== 12 | 13 | |pypi| |pyversions| 14 | 15 | .. |pypi| image:: https://img.shields.io/pypi/v/databricks-api.svg 16 | :target: https://pypi.python.org/pypi/databricks-api 17 | 18 | .. |pyversions| image:: https://img.shields.io/pypi/pyversions/databricks-api.svg 19 | :target: https://pypi.python.org/pypi/databricks-api 20 | 21 | *[This documentation is auto-generated]* 22 | 23 | This package provides a simplified interface for the Databricks REST API. 24 | The interface is autogenerated on instantiation using the underlying client 25 | library used in the official ``databricks-cli`` python package. 26 | 27 | Install using 28 | 29 | .. code-block:: bash 30 | 31 | pip install databricks-api 32 | 33 | 34 | The docs here describe the interface for version **{version}** of 35 | the ``databricks-cli`` package for API version **{api_version}**. 36 | Assuming there are no new major or minor versions to the ``databricks-cli`` package 37 | structure, this package should continue to work without a required update. 38 | 39 | The ``databricks-api`` package contains a ``DatabricksAPI`` class which provides 40 | instance attributes for the ``databricks-cli`` ``ApiClient``, as well as each of 41 | the available service instances. The attributes of a ``DatabricksAPI`` instance are: 42 | 43 | """.format( 44 | version=databricks_cli.version.version, api_version=databricks_cli.sdk.version.API_VERSION 45 | ) 46 | 47 | attrs = [] 48 | 49 | for k, v in db.__dict__.items(): 50 | attrs.append("* DatabricksAPI." + k + " *<" + v.__class__.__module__ + "." + v.__class__.__name__ + ">*\n") 51 | 52 | signature = str(inspect.signature(databricks_cli.sdk.ApiClient)) 53 | signature = "(\n " + ",\n ".join(signature[1:-1].split(", ")) + "\n )" 54 | 55 | middle = """ 56 | To instantiate the client, provide the databricks host and either a token or 57 | user and password. Also shown is the full signature of the 58 | underlying ``ApiClient.__init__`` 59 | 60 | .. code-block:: python 61 | 62 | from databricks_api import DatabricksAPI 63 | 64 | # Provide a host and token 65 | db = DatabricksAPI( 66 | host="example.cloud.databricks.com", 67 | token="dpapi123..." 68 | ) 69 | 70 | # OR a host and user and password 71 | db = DatabricksAPI( 72 | host="example.cloud.databricks.com", 73 | user="me@example.com", 74 | password="password" 75 | ) 76 | 77 | # Full __init__ signature 78 | {instantiate} 79 | 80 | Refer to the `official documentation `_ 81 | on the functionality and required arguments of each method below. 82 | 83 | Each of the service instance attributes provides the following public methods: 84 | 85 | """.format( 86 | instantiate="db = DatabricksAPI" + signature 87 | ) 88 | 89 | services = [] 90 | for k, v in db.__dict__.items(): 91 | if k == "client": 92 | continue 93 | print(k, v) 94 | h = "DatabricksAPI." + k 95 | services.append(h + "\n") 96 | services.append("-" * len(h) + "\n\n") 97 | services.append(".. code-block:: python\n\n") 98 | methods = inspect.getmembers(v, predicate=inspect.ismethod) 99 | print(methods) 100 | for method in methods: 101 | print(method) 102 | if not method[0].startswith("_"): 103 | signature = str(inspect.signature(method[1])) 104 | if "," in signature: 105 | signature = "(\n " + ",\n ".join(signature[1:-1].split(", ")) + ",\n )" 106 | services.append(" db." + k + "." + method[0] + signature + "\n\n") 107 | services.append("\n") 108 | 109 | 110 | with open("README.rst", "w") as f: 111 | f.write(intro) 112 | for a in attrs: 113 | f.write(a) 114 | f.write(middle) 115 | for s in services: 116 | f.write(s) 117 | -------------------------------------------------------------------------------- /README.rst: -------------------------------------------------------------------------------- 1 | databricks-api 2 | ============== 3 | 4 | |pypi| |pyversions| 5 | 6 | .. |pypi| image:: https://img.shields.io/pypi/v/databricks-api.svg 7 | :target: https://pypi.python.org/pypi/databricks-api 8 | 9 | .. |pyversions| image:: https://img.shields.io/pypi/pyversions/databricks-api.svg 10 | :target: https://pypi.python.org/pypi/databricks-api 11 | 12 | *[This documentation is auto-generated]* 13 | 14 | This package provides a simplified interface for the Databricks REST API. 15 | The interface is autogenerated on instantiation using the underlying client 16 | library used in the official ``databricks-cli`` python package. 17 | 18 | Install using 19 | 20 | .. code-block:: bash 21 | 22 | pip install databricks-api 23 | 24 | 25 | The docs here describe the interface for version **0.12.0** of 26 | the ``databricks-cli`` package for API version **2.0**. 27 | Assuming there are no new major or minor versions to the ``databricks-cli`` package 28 | structure, this package should continue to work without a required update. 29 | 30 | The ``databricks-api`` package contains a ``DatabricksAPI`` class which provides 31 | instance attributes for the ``databricks-cli`` ``ApiClient``, as well as each of 32 | the available service instances. The attributes of a ``DatabricksAPI`` instance are: 33 | 34 | * DatabricksAPI.client ** 35 | * DatabricksAPI.jobs ** 36 | * DatabricksAPI.cluster ** 37 | * DatabricksAPI.policy ** 38 | * DatabricksAPI.managed_library ** 39 | * DatabricksAPI.dbfs ** 40 | * DatabricksAPI.workspace ** 41 | * DatabricksAPI.secret ** 42 | * DatabricksAPI.groups ** 43 | * DatabricksAPI.token ** 44 | * DatabricksAPI.instance_pool ** 45 | * DatabricksAPI.delta_pipelines ** 46 | 47 | To instantiate the client, provide the databricks host and either a token or 48 | user and password. Also shown is the full signature of the 49 | underlying ``ApiClient.__init__`` 50 | 51 | .. code-block:: python 52 | 53 | from databricks_api import DatabricksAPI 54 | 55 | # Provide a host and token 56 | db = DatabricksAPI( 57 | host="example.cloud.databricks.com", 58 | token="dpapi123..." 59 | ) 60 | 61 | # OR a host and user and password 62 | db = DatabricksAPI( 63 | host="example.cloud.databricks.com", 64 | user="me@example.com", 65 | password="password" 66 | ) 67 | 68 | # Full __init__ signature 69 | db = DatabricksAPI( 70 | user=None, 71 | password=None, 72 | host=None, 73 | token=None, 74 | apiVersion=2.0, 75 | default_headers={}, 76 | verify=True, 77 | command_name='' 78 | ) 79 | 80 | Refer to the `official documentation `_ 81 | on the functionality and required arguments of each method below. 82 | 83 | Each of the service instance attributes provides the following public methods: 84 | 85 | DatabricksAPI.jobs 86 | ------------------ 87 | 88 | .. code-block:: python 89 | 90 | db.jobs.cancel_run( 91 | run_id, 92 | headers=None, 93 | ) 94 | 95 | db.jobs.create_job( 96 | name=None, 97 | existing_cluster_id=None, 98 | new_cluster=None, 99 | libraries=None, 100 | email_notifications=None, 101 | timeout_seconds=None, 102 | max_retries=None, 103 | min_retry_interval_millis=None, 104 | retry_on_timeout=None, 105 | schedule=None, 106 | notebook_task=None, 107 | spark_jar_task=None, 108 | spark_python_task=None, 109 | spark_submit_task=None, 110 | max_concurrent_runs=None, 111 | headers=None, 112 | ) 113 | 114 | db.jobs.delete_job( 115 | job_id, 116 | headers=None, 117 | ) 118 | 119 | db.jobs.delete_run( 120 | run_id=None, 121 | headers=None, 122 | ) 123 | 124 | db.jobs.export_run( 125 | run_id, 126 | views_to_export=None, 127 | headers=None, 128 | ) 129 | 130 | db.jobs.get_job( 131 | job_id, 132 | headers=None, 133 | ) 134 | 135 | db.jobs.get_run( 136 | run_id=None, 137 | headers=None, 138 | ) 139 | 140 | db.jobs.get_run_output( 141 | run_id, 142 | headers=None, 143 | ) 144 | 145 | db.jobs.list_jobs(headers=None) 146 | 147 | db.jobs.list_runs( 148 | job_id=None, 149 | active_only=None, 150 | completed_only=None, 151 | offset=None, 152 | limit=None, 153 | headers=None, 154 | ) 155 | 156 | db.jobs.reset_job( 157 | job_id, 158 | new_settings, 159 | headers=None, 160 | ) 161 | 162 | db.jobs.run_now( 163 | job_id=None, 164 | jar_params=None, 165 | notebook_params=None, 166 | python_params=None, 167 | spark_submit_params=None, 168 | headers=None, 169 | ) 170 | 171 | db.jobs.submit_run( 172 | run_name=None, 173 | existing_cluster_id=None, 174 | new_cluster=None, 175 | libraries=None, 176 | notebook_task=None, 177 | spark_jar_task=None, 178 | spark_python_task=None, 179 | spark_submit_task=None, 180 | timeout_seconds=None, 181 | headers=None, 182 | ) 183 | 184 | 185 | DatabricksAPI.cluster 186 | --------------------- 187 | 188 | .. code-block:: python 189 | 190 | db.cluster.create_cluster( 191 | num_workers=None, 192 | autoscale=None, 193 | cluster_name=None, 194 | spark_version=None, 195 | spark_conf=None, 196 | aws_attributes=None, 197 | node_type_id=None, 198 | driver_node_type_id=None, 199 | ssh_public_keys=None, 200 | custom_tags=None, 201 | cluster_log_conf=None, 202 | init_scripts=None, 203 | spark_env_vars=None, 204 | autotermination_minutes=None, 205 | enable_elastic_disk=None, 206 | cluster_source=None, 207 | instance_pool_id=None, 208 | headers=None, 209 | ) 210 | 211 | db.cluster.delete_cluster( 212 | cluster_id, 213 | headers=None, 214 | ) 215 | 216 | db.cluster.edit_cluster( 217 | cluster_id, 218 | num_workers=None, 219 | autoscale=None, 220 | cluster_name=None, 221 | spark_version=None, 222 | spark_conf=None, 223 | aws_attributes=None, 224 | node_type_id=None, 225 | driver_node_type_id=None, 226 | ssh_public_keys=None, 227 | custom_tags=None, 228 | cluster_log_conf=None, 229 | init_scripts=None, 230 | spark_env_vars=None, 231 | autotermination_minutes=None, 232 | enable_elastic_disk=None, 233 | cluster_source=None, 234 | instance_pool_id=None, 235 | headers=None, 236 | ) 237 | 238 | db.cluster.get_cluster( 239 | cluster_id, 240 | headers=None, 241 | ) 242 | 243 | db.cluster.get_events( 244 | cluster_id, 245 | start_time=None, 246 | end_time=None, 247 | order=None, 248 | event_types=None, 249 | offset=None, 250 | limit=None, 251 | headers=None, 252 | ) 253 | 254 | db.cluster.list_available_zones(headers=None) 255 | 256 | db.cluster.list_clusters(headers=None) 257 | 258 | db.cluster.list_node_types(headers=None) 259 | 260 | db.cluster.list_spark_versions(headers=None) 261 | 262 | db.cluster.permanent_delete_cluster( 263 | cluster_id, 264 | headers=None, 265 | ) 266 | 267 | db.cluster.pin_cluster( 268 | cluster_id, 269 | headers=None, 270 | ) 271 | 272 | db.cluster.resize_cluster( 273 | cluster_id, 274 | num_workers=None, 275 | autoscale=None, 276 | headers=None, 277 | ) 278 | 279 | db.cluster.restart_cluster( 280 | cluster_id, 281 | headers=None, 282 | ) 283 | 284 | db.cluster.start_cluster( 285 | cluster_id, 286 | headers=None, 287 | ) 288 | 289 | db.cluster.unpin_cluster( 290 | cluster_id, 291 | headers=None, 292 | ) 293 | 294 | 295 | DatabricksAPI.policy 296 | -------------------- 297 | 298 | .. code-block:: python 299 | 300 | db.policy.create_policy( 301 | policy_name, 302 | definition, 303 | headers=None, 304 | ) 305 | 306 | db.policy.delete_policy( 307 | policy_id, 308 | headers=None, 309 | ) 310 | 311 | db.policy.edit_policy( 312 | policy_id, 313 | policy_name, 314 | definition, 315 | headers=None, 316 | ) 317 | 318 | db.policy.get_policy( 319 | policy_id, 320 | headers=None, 321 | ) 322 | 323 | db.policy.list_policies(headers=None) 324 | 325 | 326 | DatabricksAPI.managed_library 327 | ----------------------------- 328 | 329 | .. code-block:: python 330 | 331 | db.managed_library.all_cluster_statuses(headers=None) 332 | 333 | db.managed_library.cluster_status( 334 | cluster_id, 335 | headers=None, 336 | ) 337 | 338 | db.managed_library.install_libraries( 339 | cluster_id, 340 | libraries=None, 341 | headers=None, 342 | ) 343 | 344 | db.managed_library.uninstall_libraries( 345 | cluster_id, 346 | libraries=None, 347 | headers=None, 348 | ) 349 | 350 | 351 | DatabricksAPI.dbfs 352 | ------------------ 353 | 354 | .. code-block:: python 355 | 356 | db.dbfs.add_block( 357 | handle, 358 | data, 359 | headers=None, 360 | ) 361 | 362 | db.dbfs.close( 363 | handle, 364 | headers=None, 365 | ) 366 | 367 | db.dbfs.create( 368 | path, 369 | overwrite=None, 370 | headers=None, 371 | ) 372 | 373 | db.dbfs.delete( 374 | path, 375 | recursive=None, 376 | headers=None, 377 | ) 378 | 379 | db.dbfs.get_status( 380 | path, 381 | headers=None, 382 | ) 383 | 384 | db.dbfs.list( 385 | path, 386 | headers=None, 387 | ) 388 | 389 | db.dbfs.mkdirs( 390 | path, 391 | headers=None, 392 | ) 393 | 394 | db.dbfs.move( 395 | source_path, 396 | destination_path, 397 | headers=None, 398 | ) 399 | 400 | db.dbfs.put( 401 | path, 402 | contents=None, 403 | overwrite=None, 404 | headers=None, 405 | ) 406 | 407 | db.dbfs.read( 408 | path, 409 | offset=None, 410 | length=None, 411 | headers=None, 412 | ) 413 | 414 | 415 | DatabricksAPI.workspace 416 | ----------------------- 417 | 418 | .. code-block:: python 419 | 420 | db.workspace.delete( 421 | path, 422 | recursive=None, 423 | headers=None, 424 | ) 425 | 426 | db.workspace.export_workspace( 427 | path, 428 | format=None, 429 | direct_download=None, 430 | headers=None, 431 | ) 432 | 433 | db.workspace.get_status( 434 | path, 435 | headers=None, 436 | ) 437 | 438 | db.workspace.import_workspace( 439 | path, 440 | format=None, 441 | language=None, 442 | content=None, 443 | overwrite=None, 444 | headers=None, 445 | ) 446 | 447 | db.workspace.list( 448 | path, 449 | headers=None, 450 | ) 451 | 452 | db.workspace.mkdirs( 453 | path, 454 | headers=None, 455 | ) 456 | 457 | 458 | DatabricksAPI.secret 459 | -------------------- 460 | 461 | .. code-block:: python 462 | 463 | db.secret.create_scope( 464 | scope, 465 | initial_manage_principal=None, 466 | scope_backend_type=None, 467 | headers=None, 468 | ) 469 | 470 | db.secret.delete_acl( 471 | scope, 472 | principal, 473 | headers=None, 474 | ) 475 | 476 | db.secret.delete_scope( 477 | scope, 478 | headers=None, 479 | ) 480 | 481 | db.secret.delete_secret( 482 | scope, 483 | key, 484 | headers=None, 485 | ) 486 | 487 | db.secret.get_acl( 488 | scope, 489 | principal, 490 | headers=None, 491 | ) 492 | 493 | db.secret.list_acls( 494 | scope, 495 | headers=None, 496 | ) 497 | 498 | db.secret.list_scopes(headers=None) 499 | 500 | db.secret.list_secrets( 501 | scope, 502 | headers=None, 503 | ) 504 | 505 | db.secret.put_acl( 506 | scope, 507 | principal, 508 | permission, 509 | headers=None, 510 | ) 511 | 512 | db.secret.put_secret( 513 | scope, 514 | key, 515 | string_value=None, 516 | bytes_value=None, 517 | headers=None, 518 | ) 519 | 520 | 521 | DatabricksAPI.groups 522 | -------------------- 523 | 524 | .. code-block:: python 525 | 526 | db.groups.add_to_group( 527 | parent_name, 528 | user_name=None, 529 | group_name=None, 530 | headers=None, 531 | ) 532 | 533 | db.groups.create_group( 534 | group_name, 535 | headers=None, 536 | ) 537 | 538 | db.groups.get_group_members( 539 | group_name, 540 | headers=None, 541 | ) 542 | 543 | db.groups.get_groups(headers=None) 544 | 545 | db.groups.get_groups_for_principal( 546 | user_name=None, 547 | group_name=None, 548 | headers=None, 549 | ) 550 | 551 | db.groups.remove_from_group( 552 | parent_name, 553 | user_name=None, 554 | group_name=None, 555 | headers=None, 556 | ) 557 | 558 | db.groups.remove_group( 559 | group_name, 560 | headers=None, 561 | ) 562 | 563 | 564 | DatabricksAPI.token 565 | ------------------- 566 | 567 | .. code-block:: python 568 | 569 | db.token.create_token( 570 | lifetime_seconds=None, 571 | comment=None, 572 | headers=None, 573 | ) 574 | 575 | db.token.list_tokens(headers=None) 576 | 577 | db.token.revoke_token( 578 | token_id, 579 | headers=None, 580 | ) 581 | 582 | 583 | DatabricksAPI.instance_pool 584 | --------------------------- 585 | 586 | .. code-block:: python 587 | 588 | db.instance_pool.create_instance_pool( 589 | instance_pool_name=None, 590 | min_idle_instances=None, 591 | max_capacity=None, 592 | aws_attributes=None, 593 | node_type_id=None, 594 | custom_tags=None, 595 | idle_instance_autotermination_minutes=None, 596 | enable_elastic_disk=None, 597 | disk_spec=None, 598 | preloaded_spark_versions=None, 599 | headers=None, 600 | ) 601 | 602 | db.instance_pool.delete_instance_pool( 603 | instance_pool_id=None, 604 | headers=None, 605 | ) 606 | 607 | db.instance_pool.edit_instance_pool( 608 | instance_pool_id, 609 | instance_pool_name=None, 610 | min_idle_instances=None, 611 | max_capacity=None, 612 | aws_attributes=None, 613 | node_type_id=None, 614 | custom_tags=None, 615 | idle_instance_autotermination_minutes=None, 616 | enable_elastic_disk=None, 617 | disk_spec=None, 618 | preloaded_spark_versions=None, 619 | headers=None, 620 | ) 621 | 622 | db.instance_pool.get_instance_pool( 623 | instance_pool_id=None, 624 | headers=None, 625 | ) 626 | 627 | db.instance_pool.list_instance_pools(headers=None) 628 | 629 | 630 | DatabricksAPI.delta_pipelines 631 | ----------------------------- 632 | 633 | .. code-block:: python 634 | 635 | db.delta_pipelines.create( 636 | id=None, 637 | name=None, 638 | storage=None, 639 | configuration=None, 640 | clusters=None, 641 | libraries=None, 642 | trigger=None, 643 | filters=None, 644 | allow_duplicate_names=None, 645 | headers=None, 646 | ) 647 | 648 | db.delta_pipelines.delete( 649 | pipeline_id=None, 650 | headers=None, 651 | ) 652 | 653 | db.delta_pipelines.deploy( 654 | pipeline_id=None, 655 | id=None, 656 | name=None, 657 | storage=None, 658 | configuration=None, 659 | clusters=None, 660 | libraries=None, 661 | trigger=None, 662 | filters=None, 663 | allow_duplicate_names=None, 664 | headers=None, 665 | ) 666 | 667 | db.delta_pipelines.get( 668 | pipeline_id=None, 669 | headers=None, 670 | ) 671 | 672 | db.delta_pipelines.reset( 673 | pipeline_id=None, 674 | headers=None, 675 | ) 676 | 677 | db.delta_pipelines.run( 678 | pipeline_id=None, 679 | headers=None, 680 | ) 681 | 682 | db.delta_pipelines.stop( 683 | pipeline_id=None, 684 | headers=None, 685 | ) 686 | 687 | 688 | -------------------------------------------------------------------------------- /poetry.lock: -------------------------------------------------------------------------------- 1 | [[package]] 2 | name = "appdirs" 3 | version = "1.4.4" 4 | description = "A small Python module for determining appropriate platform-specific dirs, e.g. a \"user data dir\"." 5 | category = "dev" 6 | optional = false 7 | python-versions = "*" 8 | 9 | [[package]] 10 | name = "atomicwrites" 11 | version = "1.4.0" 12 | description = "Atomic file writes." 13 | category = "dev" 14 | optional = false 15 | python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*" 16 | 17 | [[package]] 18 | name = "attrs" 19 | version = "20.2.0" 20 | description = "Classes Without Boilerplate" 21 | category = "dev" 22 | optional = false 23 | python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*" 24 | 25 | [package.extras] 26 | dev = ["coverage[toml] (>=5.0.2)", "hypothesis", "pympler", "pytest (>=4.3.0)", "six", "zope.interface", "sphinx", "sphinx-rtd-theme", "pre-commit"] 27 | docs = ["sphinx", "sphinx-rtd-theme", "zope.interface"] 28 | tests = ["coverage[toml] (>=5.0.2)", "hypothesis", "pympler", "pytest (>=4.3.0)", "six", "zope.interface"] 29 | tests_no_zope = ["coverage[toml] (>=5.0.2)", "hypothesis", "pympler", "pytest (>=4.3.0)", "six"] 30 | 31 | [[package]] 32 | name = "backports.functools-lru-cache" 33 | version = "1.6.1" 34 | description = "Backport of functools.lru_cache" 35 | category = "dev" 36 | optional = false 37 | python-versions = ">=2.6" 38 | 39 | [package.extras] 40 | docs = ["sphinx", "jaraco.packaging (>=3.2)", "rst.linker (>=1.9)"] 41 | testing = ["pytest (>=3.5,!=3.7.3)", "pytest-checkdocs (>=1.2.3)", "pytest-flake8", "pytest-black-multipy", "pytest-cov"] 42 | 43 | [[package]] 44 | name = "black" 45 | version = "19.10b0" 46 | description = "The uncompromising code formatter." 47 | category = "dev" 48 | optional = false 49 | python-versions = ">=3.6" 50 | 51 | [package.dependencies] 52 | appdirs = "*" 53 | attrs = ">=18.1.0" 54 | click = ">=6.5" 55 | pathspec = ">=0.6,<1" 56 | regex = "*" 57 | toml = ">=0.9.4" 58 | typed-ast = ">=1.4.0" 59 | 60 | [package.extras] 61 | d = ["aiohttp (>=3.3.2)", "aiohttp-cors"] 62 | 63 | [[package]] 64 | name = "certifi" 65 | version = "2020.6.20" 66 | description = "Python package for providing Mozilla's CA Bundle." 67 | category = "main" 68 | optional = false 69 | python-versions = "*" 70 | 71 | [[package]] 72 | name = "chardet" 73 | version = "3.0.4" 74 | description = "Universal encoding detector for Python 2 and 3" 75 | category = "main" 76 | optional = false 77 | python-versions = "*" 78 | 79 | [[package]] 80 | name = "click" 81 | version = "7.1.2" 82 | description = "Composable command line interface toolkit" 83 | category = "main" 84 | optional = false 85 | python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*, !=3.4.*" 86 | 87 | [[package]] 88 | name = "colorama" 89 | version = "0.4.3" 90 | description = "Cross-platform colored terminal text." 91 | category = "dev" 92 | optional = false 93 | python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*, !=3.4.*" 94 | 95 | [[package]] 96 | name = "configparser" 97 | version = "4.0.2" 98 | description = "Updated configparser from Python 3.7 for Python 2.6+." 99 | category = "main" 100 | optional = false 101 | python-versions = ">=2.6" 102 | 103 | [package.extras] 104 | docs = ["sphinx", "jaraco.packaging (>=3.2)", "rst.linker (>=1.9)"] 105 | testing = ["pytest (>=3.5,!=3.7.3)", "pytest-checkdocs (>=1.2)", "pytest-flake8", "pytest-black-multipy"] 106 | 107 | [[package]] 108 | name = "contextlib2" 109 | version = "0.6.0.post1" 110 | description = "Backports and enhancements for the contextlib module" 111 | category = "dev" 112 | optional = false 113 | python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*" 114 | 115 | [[package]] 116 | name = "databricks-cli" 117 | version = "0.12.0" 118 | description = "A command line interface for Databricks" 119 | category = "main" 120 | optional = false 121 | python-versions = "*" 122 | 123 | [package.dependencies] 124 | click = ">=6.7" 125 | configparser = {version = ">=0.3.5", markers = "python_version < \"3.6\""} 126 | requests = ">=2.17.3" 127 | six = ">=1.10.0" 128 | tabulate = ">=0.7.7" 129 | tenacity = ">=6.2.0" 130 | 131 | [[package]] 132 | name = "funcsigs" 133 | version = "1.0.2" 134 | description = "Python function signatures from PEP362 for Python 2.6, 2.7 and 3.2+" 135 | category = "dev" 136 | optional = false 137 | python-versions = "*" 138 | 139 | [[package]] 140 | name = "futures" 141 | version = "3.3.0" 142 | description = "Backport of the concurrent.futures package from Python 3" 143 | category = "main" 144 | optional = false 145 | python-versions = ">=2.6, <3" 146 | 147 | [[package]] 148 | name = "idna" 149 | version = "2.10" 150 | description = "Internationalized Domain Names in Applications (IDNA)" 151 | category = "main" 152 | optional = false 153 | python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*" 154 | 155 | [[package]] 156 | name = "importlib-metadata" 157 | version = "2.0.0" 158 | description = "Read metadata from Python packages" 159 | category = "dev" 160 | optional = false 161 | python-versions = "!=3.0.*,!=3.1.*,!=3.2.*,!=3.3.*,!=3.4.*,>=2.7" 162 | 163 | [package.dependencies] 164 | configparser = {version = ">=3.5", markers = "python_version < \"3\""} 165 | contextlib2 = {version = "*", markers = "python_version < \"3\""} 166 | pathlib2 = {version = "*", markers = "python_version < \"3\""} 167 | zipp = ">=0.5" 168 | 169 | [package.extras] 170 | docs = ["sphinx", "rst.linker"] 171 | testing = ["packaging", "pep517", "importlib-resources (>=1.3)"] 172 | 173 | [[package]] 174 | name = "monotonic" 175 | version = "1.5" 176 | description = "An implementation of time.monotonic() for Python 2 & < 3.3" 177 | category = "main" 178 | optional = false 179 | python-versions = "*" 180 | 181 | [[package]] 182 | name = "more-itertools" 183 | version = "5.0.0" 184 | description = "More routines for operating on iterables, beyond itertools" 185 | category = "dev" 186 | optional = false 187 | python-versions = "*" 188 | 189 | [package.dependencies] 190 | six = ">=1.0.0,<2.0.0" 191 | 192 | [[package]] 193 | name = "more-itertools" 194 | version = "8.5.0" 195 | description = "More routines for operating on iterables, beyond itertools" 196 | category = "dev" 197 | optional = false 198 | python-versions = ">=3.5" 199 | 200 | [[package]] 201 | name = "packaging" 202 | version = "20.4" 203 | description = "Core utilities for Python packages" 204 | category = "dev" 205 | optional = false 206 | python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*" 207 | 208 | [package.dependencies] 209 | pyparsing = ">=2.0.2" 210 | six = "*" 211 | 212 | [[package]] 213 | name = "pathlib2" 214 | version = "2.3.5" 215 | description = "Object-oriented filesystem paths" 216 | category = "dev" 217 | optional = false 218 | python-versions = "*" 219 | 220 | [package.dependencies] 221 | scandir = {version = "*", markers = "python_version < \"3.5\""} 222 | six = "*" 223 | 224 | [[package]] 225 | name = "pathspec" 226 | version = "0.8.0" 227 | description = "Utility library for gitignore style pattern matching of file paths." 228 | category = "dev" 229 | optional = false 230 | python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*, !=3.4.*" 231 | 232 | [[package]] 233 | name = "pluggy" 234 | version = "0.13.1" 235 | description = "plugin and hook calling mechanisms for python" 236 | category = "dev" 237 | optional = false 238 | python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*" 239 | 240 | [package.dependencies] 241 | importlib-metadata = {version = ">=0.12", markers = "python_version < \"3.8\""} 242 | 243 | [package.extras] 244 | dev = ["pre-commit", "tox"] 245 | 246 | [[package]] 247 | name = "py" 248 | version = "1.9.0" 249 | description = "library with cross-python path, ini-parsing, io, code, log facilities" 250 | category = "dev" 251 | optional = false 252 | python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*" 253 | 254 | [[package]] 255 | name = "pyparsing" 256 | version = "2.4.7" 257 | description = "Python parsing module" 258 | category = "dev" 259 | optional = false 260 | python-versions = ">=2.6, !=3.0.*, !=3.1.*, !=3.2.*" 261 | 262 | [[package]] 263 | name = "pytest" 264 | version = "4.6.0" 265 | description = "pytest: simple powerful testing with Python" 266 | category = "dev" 267 | optional = false 268 | python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*" 269 | 270 | [package.dependencies] 271 | atomicwrites = ">=1.0" 272 | attrs = ">=17.4.0" 273 | colorama = {version = "*", markers = "sys_platform == \"win32\""} 274 | funcsigs = {version = ">=1.0", markers = "python_version < \"3.0\""} 275 | importlib-metadata = ">=0.12" 276 | more-itertools = [ 277 | {version = ">=4.0.0,<6.0.0", markers = "python_version <= \"2.7\""}, 278 | {version = ">=4.0.0", markers = "python_version > \"2.7\""}, 279 | ] 280 | packaging = "*" 281 | pathlib2 = {version = ">=2.2.0", markers = "python_version < \"3.6\""} 282 | pluggy = ">=0.12,<1.0" 283 | py = ">=1.5.0" 284 | six = ">=1.10.0" 285 | wcwidth = "*" 286 | 287 | [package.extras] 288 | testing = ["argcomplete", "hypothesis (>=3.56)", "nose", "requests", "mock"] 289 | 290 | [[package]] 291 | name = "regex" 292 | version = "2020.7.14" 293 | description = "Alternative regular expression module, to replace re." 294 | category = "dev" 295 | optional = false 296 | python-versions = "*" 297 | 298 | [[package]] 299 | name = "requests" 300 | version = "2.24.0" 301 | description = "Python HTTP for Humans." 302 | category = "main" 303 | optional = false 304 | python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*, !=3.4.*" 305 | 306 | [package.dependencies] 307 | certifi = ">=2017.4.17" 308 | chardet = ">=3.0.2,<4" 309 | idna = ">=2.5,<3" 310 | urllib3 = ">=1.21.1,<1.25.0 || >1.25.0,<1.25.1 || >1.25.1,<1.26" 311 | 312 | [package.extras] 313 | security = ["pyOpenSSL (>=0.14)", "cryptography (>=1.3.4)"] 314 | socks = ["PySocks (>=1.5.6,!=1.5.7)", "win-inet-pton"] 315 | 316 | [[package]] 317 | name = "scandir" 318 | version = "1.10.0" 319 | description = "scandir, a better directory iterator and faster os.walk()" 320 | category = "dev" 321 | optional = false 322 | python-versions = "*" 323 | 324 | [[package]] 325 | name = "six" 326 | version = "1.15.0" 327 | description = "Python 2 and 3 compatibility utilities" 328 | category = "main" 329 | optional = false 330 | python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*" 331 | 332 | [[package]] 333 | name = "tabulate" 334 | version = "0.8.7" 335 | description = "Pretty-print tabular data" 336 | category = "main" 337 | optional = false 338 | python-versions = "*" 339 | 340 | [package.extras] 341 | widechars = ["wcwidth"] 342 | 343 | [[package]] 344 | name = "tenacity" 345 | version = "6.2.0" 346 | description = "Retry code until it succeeds" 347 | category = "main" 348 | optional = false 349 | python-versions = "*" 350 | 351 | [package.dependencies] 352 | futures = {version = ">=3.0", markers = "python_version == \"2.7\""} 353 | monotonic = {version = ">=0.6", markers = "python_version == \"2.7\""} 354 | six = ">=1.9.0" 355 | typing = {version = ">=3.7.4.1", markers = "python_version == \"2.7\""} 356 | 357 | [package.extras] 358 | doc = ["reno", "sphinx", "tornado (>=4.5)"] 359 | 360 | [[package]] 361 | name = "toml" 362 | version = "0.10.1" 363 | description = "Python Library for Tom's Obvious, Minimal Language" 364 | category = "dev" 365 | optional = false 366 | python-versions = "*" 367 | 368 | [[package]] 369 | name = "typed-ast" 370 | version = "1.4.1" 371 | description = "a fork of Python 2 and 3 ast modules with type comment support" 372 | category = "dev" 373 | optional = false 374 | python-versions = "*" 375 | 376 | [[package]] 377 | name = "typing" 378 | version = "3.7.4.3" 379 | description = "Type Hints for Python" 380 | category = "main" 381 | optional = false 382 | python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*" 383 | 384 | [[package]] 385 | name = "urllib3" 386 | version = "1.25.11" 387 | description = "HTTP library with thread-safe connection pooling, file post, and more." 388 | category = "main" 389 | optional = false 390 | python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*, !=3.4.*, <4" 391 | 392 | [package.extras] 393 | brotli = ["brotlipy (>=0.6.0)"] 394 | secure = ["pyOpenSSL (>=0.14)", "cryptography (>=1.3.4)", "idna (>=2.0.0)", "certifi", "ipaddress"] 395 | socks = ["PySocks (>=1.5.6,!=1.5.7,<2.0)"] 396 | 397 | [[package]] 398 | name = "wcwidth" 399 | version = "0.2.5" 400 | description = "Measures the displayed width of unicode strings in a terminal" 401 | category = "dev" 402 | optional = false 403 | python-versions = "*" 404 | 405 | [package.dependencies] 406 | "backports.functools-lru-cache" = {version = ">=1.2.1", markers = "python_version < \"3.2\""} 407 | 408 | [[package]] 409 | name = "zipp" 410 | version = "1.2.0" 411 | description = "Backport of pathlib-compatible object wrapper for zip files" 412 | category = "dev" 413 | optional = false 414 | python-versions = ">=2.7" 415 | 416 | [package.dependencies] 417 | contextlib2 = {version = "*", markers = "python_version < \"3.4\""} 418 | 419 | [package.extras] 420 | docs = ["sphinx", "jaraco.packaging (>=3.2)", "rst.linker (>=1.9)"] 421 | testing = ["pathlib2", "unittest2", "jaraco.itertools", "func-timeout"] 422 | 423 | [metadata] 424 | lock-version = "1.1" 425 | python-versions = "~2.7 || ^3.5" 426 | content-hash = "ea16851468cf7aec52634eae1126e05a5586ee4f58651b6714c88aac2406cc86" 427 | 428 | [metadata.files] 429 | appdirs = [ 430 | {file = "appdirs-1.4.4-py2.py3-none-any.whl", hash = "sha256:a841dacd6b99318a741b166adb07e19ee71a274450e68237b4650ca1055ab128"}, 431 | {file = "appdirs-1.4.4.tar.gz", hash = "sha256:7d5d0167b2b1ba821647616af46a749d1c653740dd0d2415100fe26e27afdf41"}, 432 | ] 433 | atomicwrites = [ 434 | {file = "atomicwrites-1.4.0-py2.py3-none-any.whl", hash = "sha256:6d1784dea7c0c8d4a5172b6c620f40b6e4cbfdf96d783691f2e1302a7b88e197"}, 435 | {file = "atomicwrites-1.4.0.tar.gz", hash = "sha256:ae70396ad1a434f9c7046fd2dd196fc04b12f9e91ffb859164193be8b6168a7a"}, 436 | ] 437 | attrs = [ 438 | {file = "attrs-20.2.0-py2.py3-none-any.whl", hash = "sha256:fce7fc47dfc976152e82d53ff92fa0407700c21acd20886a13777a0d20e655dc"}, 439 | {file = "attrs-20.2.0.tar.gz", hash = "sha256:26b54ddbbb9ee1d34d5d3668dd37d6cf74990ab23c828c2888dccdceee395594"}, 440 | ] 441 | "backports.functools-lru-cache" = [ 442 | {file = "backports.functools_lru_cache-1.6.1-py2.py3-none-any.whl", hash = "sha256:0bada4c2f8a43d533e4ecb7a12214d9420e66eb206d54bf2d682581ca4b80848"}, 443 | {file = "backports.functools_lru_cache-1.6.1.tar.gz", hash = "sha256:8fde5f188da2d593bd5bc0be98d9abc46c95bb8a9dde93429570192ee6cc2d4a"}, 444 | ] 445 | black = [ 446 | {file = "black-19.10b0-py36-none-any.whl", hash = "sha256:1b30e59be925fafc1ee4565e5e08abef6b03fe455102883820fe5ee2e4734e0b"}, 447 | {file = "black-19.10b0.tar.gz", hash = "sha256:c2edb73a08e9e0e6f65a0e6af18b059b8b1cdd5bef997d7a0b181df93dc81539"}, 448 | ] 449 | certifi = [ 450 | {file = "certifi-2020.6.20-py2.py3-none-any.whl", hash = "sha256:8fc0819f1f30ba15bdb34cceffb9ef04d99f420f68eb75d901e9560b8749fc41"}, 451 | {file = "certifi-2020.6.20.tar.gz", hash = "sha256:5930595817496dd21bb8dc35dad090f1c2cd0adfaf21204bf6732ca5d8ee34d3"}, 452 | ] 453 | chardet = [ 454 | {file = "chardet-3.0.4-py2.py3-none-any.whl", hash = "sha256:fc323ffcaeaed0e0a02bf4d117757b98aed530d9ed4531e3e15460124c106691"}, 455 | {file = "chardet-3.0.4.tar.gz", hash = "sha256:84ab92ed1c4d4f16916e05906b6b75a6c0fb5db821cc65e70cbd64a3e2a5eaae"}, 456 | ] 457 | click = [ 458 | {file = "click-7.1.2-py2.py3-none-any.whl", hash = "sha256:dacca89f4bfadd5de3d7489b7c8a566eee0d3676333fbb50030263894c38c0dc"}, 459 | {file = "click-7.1.2.tar.gz", hash = "sha256:d2b5255c7c6349bc1bd1e59e08cd12acbbd63ce649f2588755783aa94dfb6b1a"}, 460 | ] 461 | colorama = [ 462 | {file = "colorama-0.4.3-py2.py3-none-any.whl", hash = "sha256:7d73d2a99753107a36ac6b455ee49046802e59d9d076ef8e47b61499fa29afff"}, 463 | {file = "colorama-0.4.3.tar.gz", hash = "sha256:e96da0d330793e2cb9485e9ddfd918d456036c7149416295932478192f4436a1"}, 464 | ] 465 | configparser = [ 466 | {file = "configparser-4.0.2-py2.py3-none-any.whl", hash = "sha256:254c1d9c79f60c45dfde850850883d5aaa7f19a23f13561243a050d5a7c3fe4c"}, 467 | {file = "configparser-4.0.2.tar.gz", hash = "sha256:c7d282687a5308319bf3d2e7706e575c635b0a470342641c93bea0ea3b5331df"}, 468 | ] 469 | contextlib2 = [ 470 | {file = "contextlib2-0.6.0.post1-py2.py3-none-any.whl", hash = "sha256:3355078a159fbb44ee60ea80abd0d87b80b78c248643b49aa6d94673b413609b"}, 471 | {file = "contextlib2-0.6.0.post1.tar.gz", hash = "sha256:01f490098c18b19d2bd5bb5dc445b2054d2fa97f09a4280ba2c5f3c394c8162e"}, 472 | ] 473 | databricks-cli = [ 474 | {file = "databricks-cli-0.12.0.tar.gz", hash = "sha256:a1489ef893cd96ab784d7f5c0764a02bc20ea213a798f640b1004a1018122f36"}, 475 | {file = "databricks_cli-0.12.0-py2-none-any.whl", hash = "sha256:d53ebb0151c2313c2ad4f016a37fda503eed205cc05363050bb870ea4141e84e"}, 476 | ] 477 | funcsigs = [ 478 | {file = "funcsigs-1.0.2-py2.py3-none-any.whl", hash = "sha256:330cc27ccbf7f1e992e69fef78261dc7c6569012cf397db8d3de0234e6c937ca"}, 479 | {file = "funcsigs-1.0.2.tar.gz", hash = "sha256:a7bb0f2cf3a3fd1ab2732cb49eba4252c2af4240442415b4abce3b87022a8f50"}, 480 | ] 481 | futures = [ 482 | {file = "futures-3.3.0-py2-none-any.whl", hash = "sha256:49b3f5b064b6e3afc3316421a3f25f66c137ae88f068abbf72830170033c5e16"}, 483 | {file = "futures-3.3.0.tar.gz", hash = "sha256:7e033af76a5e35f58e56da7a91e687706faf4e7bdfb2cbc3f2cca6b9bcda9794"}, 484 | ] 485 | idna = [ 486 | {file = "idna-2.10-py2.py3-none-any.whl", hash = "sha256:b97d804b1e9b523befed77c48dacec60e6dcb0b5391d57af6a65a312a90648c0"}, 487 | {file = "idna-2.10.tar.gz", hash = "sha256:b307872f855b18632ce0c21c5e45be78c0ea7ae4c15c828c20788b26921eb3f6"}, 488 | ] 489 | importlib-metadata = [ 490 | {file = "importlib_metadata-2.0.0-py2.py3-none-any.whl", hash = "sha256:cefa1a2f919b866c5beb7c9f7b0ebb4061f30a8a9bf16d609b000e2dfaceb9c3"}, 491 | {file = "importlib_metadata-2.0.0.tar.gz", hash = "sha256:77a540690e24b0305878c37ffd421785a6f7e53c8b5720d211b211de8d0e95da"}, 492 | ] 493 | monotonic = [ 494 | {file = "monotonic-1.5-py2.py3-none-any.whl", hash = "sha256:552a91f381532e33cbd07c6a2655a21908088962bb8fa7239ecbcc6ad1140cc7"}, 495 | {file = "monotonic-1.5.tar.gz", hash = "sha256:23953d55076df038541e648a53676fb24980f7a1be290cdda21300b3bc21dfb0"}, 496 | ] 497 | more-itertools = [ 498 | {file = "more-itertools-5.0.0.tar.gz", hash = "sha256:38a936c0a6d98a38bcc2d03fdaaedaba9f412879461dd2ceff8d37564d6522e4"}, 499 | {file = "more_itertools-5.0.0-py2-none-any.whl", hash = "sha256:c0a5785b1109a6bd7fac76d6837fd1feca158e54e521ccd2ae8bfe393cc9d4fc"}, 500 | {file = "more_itertools-5.0.0-py3-none-any.whl", hash = "sha256:fe7a7cae1ccb57d33952113ff4fa1bc5f879963600ed74918f1236e212ee50b9"}, 501 | {file = "more-itertools-8.5.0.tar.gz", hash = "sha256:6f83822ae94818eae2612063a5101a7311e68ae8002005b5e05f03fd74a86a20"}, 502 | {file = "more_itertools-8.5.0-py3-none-any.whl", hash = "sha256:9b30f12df9393f0d28af9210ff8efe48d10c94f73e5daf886f10c4b0b0b4f03c"}, 503 | ] 504 | packaging = [ 505 | {file = "packaging-20.4-py2.py3-none-any.whl", hash = "sha256:998416ba6962ae7fbd6596850b80e17859a5753ba17c32284f67bfff33784181"}, 506 | {file = "packaging-20.4.tar.gz", hash = "sha256:4357f74f47b9c12db93624a82154e9b120fa8293699949152b22065d556079f8"}, 507 | ] 508 | pathlib2 = [ 509 | {file = "pathlib2-2.3.5-py2.py3-none-any.whl", hash = "sha256:0ec8205a157c80d7acc301c0b18fbd5d44fe655968f5d947b6ecef5290fc35db"}, 510 | {file = "pathlib2-2.3.5.tar.gz", hash = "sha256:6cd9a47b597b37cc57de1c05e56fb1a1c9cc9fab04fe78c29acd090418529868"}, 511 | ] 512 | pathspec = [ 513 | {file = "pathspec-0.8.0-py2.py3-none-any.whl", hash = "sha256:7d91249d21749788d07a2d0f94147accd8f845507400749ea19c1ec9054a12b0"}, 514 | {file = "pathspec-0.8.0.tar.gz", hash = "sha256:da45173eb3a6f2a5a487efba21f050af2b41948be6ab52b6a1e3ff22bb8b7061"}, 515 | ] 516 | pluggy = [ 517 | {file = "pluggy-0.13.1-py2.py3-none-any.whl", hash = "sha256:966c145cd83c96502c3c3868f50408687b38434af77734af1e9ca461a4081d2d"}, 518 | {file = "pluggy-0.13.1.tar.gz", hash = "sha256:15b2acde666561e1298d71b523007ed7364de07029219b604cf808bfa1c765b0"}, 519 | ] 520 | py = [ 521 | {file = "py-1.9.0-py2.py3-none-any.whl", hash = "sha256:366389d1db726cd2fcfc79732e75410e5fe4d31db13692115529d34069a043c2"}, 522 | {file = "py-1.9.0.tar.gz", hash = "sha256:9ca6883ce56b4e8da7e79ac18787889fa5206c79dcc67fb065376cd2fe03f342"}, 523 | ] 524 | pyparsing = [ 525 | {file = "pyparsing-2.4.7-py2.py3-none-any.whl", hash = "sha256:ef9d7589ef3c200abe66653d3f1ab1033c3c419ae9b9bdb1240a85b024efc88b"}, 526 | {file = "pyparsing-2.4.7.tar.gz", hash = "sha256:c203ec8783bf771a155b207279b9bccb8dea02d8f0c9e5f8ead507bc3246ecc1"}, 527 | ] 528 | pytest = [ 529 | {file = "pytest-4.6.0-py2.py3-none-any.whl", hash = "sha256:5467f37a0d6bb0b4e684b71af268e005996b9eaaefe54e3d64d86afd90da8d78"}, 530 | {file = "pytest-4.6.0.tar.gz", hash = "sha256:52fa94b4ac81d2f063ee05e303acedf5c605e15dc0f4eef468b5c137f77241c3"}, 531 | ] 532 | regex = [ 533 | {file = "regex-2020.7.14-cp27-cp27m-win32.whl", hash = "sha256:e46d13f38cfcbb79bfdb2964b0fe12561fe633caf964a77a5f8d4e45fe5d2ef7"}, 534 | {file = "regex-2020.7.14-cp27-cp27m-win_amd64.whl", hash = "sha256:6961548bba529cac7c07af2fd4d527c5b91bb8fe18995fed6044ac22b3d14644"}, 535 | {file = "regex-2020.7.14-cp36-cp36m-manylinux1_i686.whl", hash = "sha256:c50a724d136ec10d920661f1442e4a8b010a4fe5aebd65e0c2241ea41dbe93dc"}, 536 | {file = "regex-2020.7.14-cp36-cp36m-manylinux1_x86_64.whl", hash = "sha256:8a51f2c6d1f884e98846a0a9021ff6861bdb98457879f412fdc2b42d14494067"}, 537 | {file = "regex-2020.7.14-cp36-cp36m-manylinux2010_i686.whl", hash = "sha256:9c568495e35599625f7b999774e29e8d6b01a6fb684d77dee1f56d41b11b40cd"}, 538 | {file = "regex-2020.7.14-cp36-cp36m-manylinux2010_x86_64.whl", hash = "sha256:51178c738d559a2d1071ce0b0f56e57eb315bcf8f7d4cf127674b533e3101f88"}, 539 | {file = "regex-2020.7.14-cp36-cp36m-win32.whl", hash = "sha256:9eddaafb3c48e0900690c1727fba226c4804b8e6127ea409689c3bb492d06de4"}, 540 | {file = "regex-2020.7.14-cp36-cp36m-win_amd64.whl", hash = "sha256:14a53646369157baa0499513f96091eb70382eb50b2c82393d17d7ec81b7b85f"}, 541 | {file = "regex-2020.7.14-cp37-cp37m-manylinux1_i686.whl", hash = "sha256:1269fef3167bb52631ad4fa7dd27bf635d5a0790b8e6222065d42e91bede4162"}, 542 | {file = "regex-2020.7.14-cp37-cp37m-manylinux1_x86_64.whl", hash = "sha256:d0a5095d52b90ff38592bbdc2644f17c6d495762edf47d876049cfd2968fbccf"}, 543 | {file = "regex-2020.7.14-cp37-cp37m-manylinux2010_i686.whl", hash = "sha256:4c037fd14c5f4e308b8370b447b469ca10e69427966527edcab07f52d88388f7"}, 544 | {file = "regex-2020.7.14-cp37-cp37m-manylinux2010_x86_64.whl", hash = "sha256:bc3d98f621898b4a9bc7fecc00513eec8f40b5b83913d74ccb445f037d58cd89"}, 545 | {file = "regex-2020.7.14-cp37-cp37m-win32.whl", hash = "sha256:46bac5ca10fb748d6c55843a931855e2727a7a22584f302dd9bb1506e69f83f6"}, 546 | {file = "regex-2020.7.14-cp37-cp37m-win_amd64.whl", hash = "sha256:0dc64ee3f33cd7899f79a8d788abfbec168410be356ed9bd30bbd3f0a23a7204"}, 547 | {file = "regex-2020.7.14-cp38-cp38-manylinux1_i686.whl", hash = "sha256:5ea81ea3dbd6767873c611687141ec7b06ed8bab43f68fad5b7be184a920dc99"}, 548 | {file = "regex-2020.7.14-cp38-cp38-manylinux1_x86_64.whl", hash = "sha256:bbb332d45b32df41200380fff14712cb6093b61bd142272a10b16778c418e98e"}, 549 | {file = "regex-2020.7.14-cp38-cp38-manylinux2010_i686.whl", hash = "sha256:c11d6033115dc4887c456565303f540c44197f4fc1a2bfb192224a301534888e"}, 550 | {file = "regex-2020.7.14-cp38-cp38-manylinux2010_x86_64.whl", hash = "sha256:75aaa27aa521a182824d89e5ab0a1d16ca207318a6b65042b046053cfc8ed07a"}, 551 | {file = "regex-2020.7.14-cp38-cp38-win32.whl", hash = "sha256:d6cff2276e502b86a25fd10c2a96973fdb45c7a977dca2138d661417f3728341"}, 552 | {file = "regex-2020.7.14-cp38-cp38-win_amd64.whl", hash = "sha256:7a2dd66d2d4df34fa82c9dc85657c5e019b87932019947faece7983f2089a840"}, 553 | {file = "regex-2020.7.14.tar.gz", hash = "sha256:3a3af27a8d23143c49a3420efe5b3f8cf1a48c6fc8bc6856b03f638abc1833bb"}, 554 | ] 555 | requests = [ 556 | {file = "requests-2.24.0-py2.py3-none-any.whl", hash = "sha256:fe75cc94a9443b9246fc7049224f75604b113c36acb93f87b80ed42c44cbb898"}, 557 | {file = "requests-2.24.0.tar.gz", hash = "sha256:b3559a131db72c33ee969480840fff4bb6dd111de7dd27c8ee1f820f4f00231b"}, 558 | ] 559 | scandir = [ 560 | {file = "scandir-1.10.0-cp27-cp27m-win32.whl", hash = "sha256:92c85ac42f41ffdc35b6da57ed991575bdbe69db895507af88b9f499b701c188"}, 561 | {file = "scandir-1.10.0-cp27-cp27m-win_amd64.whl", hash = "sha256:cb925555f43060a1745d0a321cca94bcea927c50114b623d73179189a4e100ac"}, 562 | {file = "scandir-1.10.0-cp34-cp34m-win32.whl", hash = "sha256:2c712840c2e2ee8dfaf36034080108d30060d759c7b73a01a52251cc8989f11f"}, 563 | {file = "scandir-1.10.0-cp34-cp34m-win_amd64.whl", hash = "sha256:2586c94e907d99617887daed6c1d102b5ca28f1085f90446554abf1faf73123e"}, 564 | {file = "scandir-1.10.0-cp35-cp35m-win32.whl", hash = "sha256:2b8e3888b11abb2217a32af0766bc06b65cc4a928d8727828ee68af5a967fa6f"}, 565 | {file = "scandir-1.10.0-cp35-cp35m-win_amd64.whl", hash = "sha256:8c5922863e44ffc00c5c693190648daa6d15e7c1207ed02d6f46a8dcc2869d32"}, 566 | {file = "scandir-1.10.0-cp36-cp36m-win32.whl", hash = "sha256:2ae41f43797ca0c11591c0c35f2f5875fa99f8797cb1a1fd440497ec0ae4b022"}, 567 | {file = "scandir-1.10.0-cp36-cp36m-win_amd64.whl", hash = "sha256:7d2d7a06a252764061a020407b997dd036f7bd6a175a5ba2b345f0a357f0b3f4"}, 568 | {file = "scandir-1.10.0-cp37-cp37m-win32.whl", hash = "sha256:67f15b6f83e6507fdc6fca22fedf6ef8b334b399ca27c6b568cbfaa82a364173"}, 569 | {file = "scandir-1.10.0-cp37-cp37m-win_amd64.whl", hash = "sha256:b24086f2375c4a094a6b51e78b4cf7ca16c721dcee2eddd7aa6494b42d6d519d"}, 570 | {file = "scandir-1.10.0.tar.gz", hash = "sha256:4d4631f6062e658e9007ab3149a9b914f3548cb38bfb021c64f39a025ce578ae"}, 571 | ] 572 | six = [ 573 | {file = "six-1.15.0-py2.py3-none-any.whl", hash = "sha256:8b74bedcbbbaca38ff6d7491d76f2b06b3592611af620f8426e82dddb04a5ced"}, 574 | {file = "six-1.15.0.tar.gz", hash = "sha256:30639c035cdb23534cd4aa2dd52c3bf48f06e5f4a941509c8bafd8ce11080259"}, 575 | ] 576 | tabulate = [ 577 | {file = "tabulate-0.8.7-py3-none-any.whl", hash = "sha256:ac64cb76d53b1231d364babcd72abbb16855adac7de6665122f97b593f1eb2ba"}, 578 | {file = "tabulate-0.8.7.tar.gz", hash = "sha256:db2723a20d04bcda8522165c73eea7c300eda74e0ce852d9022e0159d7895007"}, 579 | ] 580 | tenacity = [ 581 | {file = "tenacity-6.2.0-py2.py3-none-any.whl", hash = "sha256:5a5d3dcd46381abe8b4f82b5736b8726fd3160c6c7161f53f8af7f1eb9b82173"}, 582 | {file = "tenacity-6.2.0.tar.gz", hash = "sha256:29ae90e7faf488a8628432154bb34ace1cca58244c6ea399fd33f066ac71339a"}, 583 | ] 584 | toml = [ 585 | {file = "toml-0.10.1-py2.py3-none-any.whl", hash = "sha256:bda89d5935c2eac546d648028b9901107a595863cb36bae0c73ac804a9b4ce88"}, 586 | {file = "toml-0.10.1.tar.gz", hash = "sha256:926b612be1e5ce0634a2ca03470f95169cf16f939018233a670519cb4ac58b0f"}, 587 | ] 588 | typed-ast = [ 589 | {file = "typed_ast-1.4.1-cp35-cp35m-manylinux1_i686.whl", hash = "sha256:73d785a950fc82dd2a25897d525d003f6378d1cb23ab305578394694202a58c3"}, 590 | {file = "typed_ast-1.4.1-cp35-cp35m-manylinux1_x86_64.whl", hash = "sha256:aaee9905aee35ba5905cfb3c62f3e83b3bec7b39413f0a7f19be4e547ea01ebb"}, 591 | {file = "typed_ast-1.4.1-cp35-cp35m-win32.whl", hash = "sha256:0c2c07682d61a629b68433afb159376e24e5b2fd4641d35424e462169c0a7919"}, 592 | {file = "typed_ast-1.4.1-cp35-cp35m-win_amd64.whl", hash = "sha256:4083861b0aa07990b619bd7ddc365eb7fa4b817e99cf5f8d9cf21a42780f6e01"}, 593 | {file = "typed_ast-1.4.1-cp36-cp36m-macosx_10_9_x86_64.whl", hash = "sha256:269151951236b0f9a6f04015a9004084a5ab0d5f19b57de779f908621e7d8b75"}, 594 | {file = "typed_ast-1.4.1-cp36-cp36m-manylinux1_i686.whl", hash = "sha256:24995c843eb0ad11a4527b026b4dde3da70e1f2d8806c99b7b4a7cf491612652"}, 595 | {file = "typed_ast-1.4.1-cp36-cp36m-manylinux1_x86_64.whl", hash = "sha256:fe460b922ec15dd205595c9b5b99e2f056fd98ae8f9f56b888e7a17dc2b757e7"}, 596 | {file = "typed_ast-1.4.1-cp36-cp36m-win32.whl", hash = "sha256:4e3e5da80ccbebfff202a67bf900d081906c358ccc3d5e3c8aea42fdfdfd51c1"}, 597 | {file = "typed_ast-1.4.1-cp36-cp36m-win_amd64.whl", hash = "sha256:249862707802d40f7f29f6e1aad8d84b5aa9e44552d2cc17384b209f091276aa"}, 598 | {file = "typed_ast-1.4.1-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:8ce678dbaf790dbdb3eba24056d5364fb45944f33553dd5869b7580cdbb83614"}, 599 | {file = "typed_ast-1.4.1-cp37-cp37m-manylinux1_i686.whl", hash = "sha256:c9e348e02e4d2b4a8b2eedb48210430658df6951fa484e59de33ff773fbd4b41"}, 600 | {file = "typed_ast-1.4.1-cp37-cp37m-manylinux1_x86_64.whl", hash = "sha256:bcd3b13b56ea479b3650b82cabd6b5343a625b0ced5429e4ccad28a8973f301b"}, 601 | {file = "typed_ast-1.4.1-cp37-cp37m-win32.whl", hash = "sha256:d5d33e9e7af3b34a40dc05f498939f0ebf187f07c385fd58d591c533ad8562fe"}, 602 | {file = "typed_ast-1.4.1-cp37-cp37m-win_amd64.whl", hash = "sha256:0666aa36131496aed8f7be0410ff974562ab7eeac11ef351def9ea6fa28f6355"}, 603 | {file = "typed_ast-1.4.1-cp38-cp38-macosx_10_15_x86_64.whl", hash = "sha256:d205b1b46085271b4e15f670058ce182bd1199e56b317bf2ec004b6a44f911f6"}, 604 | {file = "typed_ast-1.4.1-cp38-cp38-manylinux1_i686.whl", hash = "sha256:6daac9731f172c2a22ade6ed0c00197ee7cc1221aa84cfdf9c31defeb059a907"}, 605 | {file = "typed_ast-1.4.1-cp38-cp38-manylinux1_x86_64.whl", hash = "sha256:498b0f36cc7054c1fead3d7fc59d2150f4d5c6c56ba7fb150c013fbc683a8d2d"}, 606 | {file = "typed_ast-1.4.1-cp38-cp38-win32.whl", hash = "sha256:715ff2f2df46121071622063fc7543d9b1fd19ebfc4f5c8895af64a77a8c852c"}, 607 | {file = "typed_ast-1.4.1-cp38-cp38-win_amd64.whl", hash = "sha256:fc0fea399acb12edbf8a628ba8d2312f583bdbdb3335635db062fa98cf71fca4"}, 608 | {file = "typed_ast-1.4.1-cp39-cp39-macosx_10_15_x86_64.whl", hash = "sha256:d43943ef777f9a1c42bf4e552ba23ac77a6351de620aa9acf64ad54933ad4d34"}, 609 | {file = "typed_ast-1.4.1.tar.gz", hash = "sha256:8c8aaad94455178e3187ab22c8b01a3837f8ee50e09cf31f1ba129eb293ec30b"}, 610 | ] 611 | typing = [ 612 | {file = "typing-3.7.4.3-py2-none-any.whl", hash = "sha256:283d868f5071ab9ad873e5e52268d611e851c870a2ba354193026f2dfb29d8b5"}, 613 | {file = "typing-3.7.4.3.tar.gz", hash = "sha256:1187fb9c82fd670d10aa07bbb6cfcfe4bdda42d6fab8d5134f04e8c4d0b71cc9"}, 614 | ] 615 | urllib3 = [ 616 | {file = "urllib3-1.25.11-py2.py3-none-any.whl", hash = "sha256:f5321fbe4bf3fefa0efd0bfe7fb14e90909eb62a48ccda331726b4319897dd5e"}, 617 | {file = "urllib3-1.25.11.tar.gz", hash = "sha256:8d7eaa5a82a1cac232164990f04874c594c9453ec55eef02eab885aa02fc17a2"}, 618 | ] 619 | wcwidth = [ 620 | {file = "wcwidth-0.2.5-py2.py3-none-any.whl", hash = "sha256:beb4802a9cebb9144e99086eff703a642a13d6a0052920003a230f3294bbe784"}, 621 | {file = "wcwidth-0.2.5.tar.gz", hash = "sha256:c4d647b99872929fdb7bdcaa4fbe7f01413ed3d98077df798530e5b04f116c83"}, 622 | ] 623 | zipp = [ 624 | {file = "zipp-1.2.0-py2.py3-none-any.whl", hash = "sha256:e0d9e63797e483a30d27e09fffd308c59a700d365ec34e93cc100844168bf921"}, 625 | {file = "zipp-1.2.0.tar.gz", hash = "sha256:c70410551488251b0fee67b460fb9a536af8d6f9f008ad10ac51f615b6a521b1"}, 626 | ] 627 | --------------------------------------------------------------------------------