quati-toolkit


Namequati-toolkit JSON
Version 1.1.6b0 PyPI version JSON
download
home_pageNone
SummaryDynamic data eng. functions to accelerate development and coding
upload_time2025-07-31 22:36:59
maintainerNone
docs_urlNone
authorlucaslealll
requires_python>=3.10
licenseMIT
keywords quick actions toolkit functions gspread datetime gsheets email selenium cookies sleep wait
VCS
bugtrack_url
requirements asttokens attrs cachetools certifi charset-normalizer comm debugpy decorator exceptiongroup executing google-api-core google-auth google-auth-oauthlib google-cloud-bigquery google-cloud-bigquery-storage google-cloud-core google-crc32c google-resumable-media googleapis-common-protos grpcio grpcio-status gspread h11 idna ipykernel jedi jupyter_client jupyter_core matplotlib-inline nest-asyncio numpy oauthlib outcome packaging pandas pandas-gbq parso pexpect platformdirs prompt_toolkit proto-plus protobuf psutil ptyprocess pure_eval pyarrow pyasn1 pyasn1_modules pydata-google-auth Pygments pyparsing PySocks python-dateutil pytz pyzmq requests requests-oauthlib rsa selenium six sniffio sortedcontainers stack-data tornado traitlets trio trio-websocket typing_extensions urllib3 wcwidth wsproto tqdm
Travis-CI No Travis.
coveralls test coverage No coveralls.
            <div align="center">
	<picture>
	<!-- <source media="(prefers-color-scheme: dark)" srcset="assets/quati_white.svg"> -->
	<source media="(prefers-color-scheme: dark)" srcset="https://raw.githubusercontent.com/lucaslealll/quati-toolkit/refs/heads/main/assets/quati.svg">
		<img src="https://raw.githubusercontent.com/lucaslealll/quati-toolkit/refs/heads/main/assets/quati.svg" width="100%">
	</picture>
	<br><br><br>
	<hr>
<h1>quati: A python <u>Quick Actions Toolkit</u> for data engeneering</h1>

<img src="https://img.shields.io/badge/Author-lucaslealll-blue?logo=github&logoColor=white"> <img src="https://img.shields.io/badge/Status-Beta-DF1F72"> <img src="https://img.shields.io/badge/License-MIT-750014.svg">
<br>
<img src="https://img.shields.io/pypi/v/quati-toolkit.svg?label=Version&color=white"> <img src="https://img.shields.io/pypi/pyversions/quati-toolkit?logo=python&logoColor=white&label=Python"> <img src="https://img.shields.io/badge/Code Style-Black Formatter-111.svg"> 
<br>
<img src="https://img.shields.io/pypi/dm/quati-toolkit.svg?label=PyPI Downloads"> 
</div>

## What is it?
**quati** provides dynamic functions aimed at data engineering, offering
a wide range of collections to accelerate development. It has a comprehensive and
flexible ecosystem of **tools**, **libraries**, and **community resources**,
allowing data engineers to build and deploy applications with ease.

<h2>Table of Contents</h2><br>

- [What is it?](#what-is-it)
- [Main Features](#main-features)
- [Where to get it / Install](#where-to-get-it--install)
- [Documentation](#documentation)
- [License](#license)
- [Dependencies](#dependencies)
- [References](#references)

## Main Features
Here are just a few of the things that pandas does well:

- [`norm_str_num_values()`](doc/data.md#norm_str_num_values): Converts string-based number values to their numerical equivalents
- [`norm_rename_columns()`](doc/data.md#norm_rename_columns): Renames DataFrame columns based on a normalization function
- [`sync_dtypes_with_table()`](doc/google.md#sync_dtypes_with_bigquery_table): Synchronize the data types of a Pandas DataFrame with a BigQuery table's schema
- [`quick_query()`](doc/google.md#quick_query): Executes a BigQuery SQL query and returns the result as a Pandas DataFrame
- [`gsheets_get_worksheet()`](doc/google.md#gsheets_get_worksheet): Import a worksheet object from gsheets
- [`gsheets_get_worksheet_df()`](doc/google.md#gsheets_get_worksheet_df): Import a worksheet object from gsheets as a pandas dataframe
- [`gsheets_dedup()`](doc/google.md#gsheets_dedup): Returns dataframe where the column passed as parameter is considered the core set for duplicate data row remover
- [`gsheets_worksheet_next_available_row()`](doc/google.md#gsheets_worksheet_next_available_row): Return the ID of the next cell into which data can be entered
- [`gsheets_update()`](doc/google.md#gsheets_update): Update a Google Sheets spreadsheet from a reference column
- [`send_email()`](doc/messenger.md#send_email): Send an email (Types: error, tip, note, important or warning) with main info about it
- [`delete_file()`](doc/system.md#delete_file): Deletes any specified file
- [`rename_file()`](doc/system.md#rename_file): Renames a file
- [`search_file()`](doc/system.md#search_file): Searches for the existence of a file
- [`progress_bar()`](doc/system.md#progress_bar): Waits for the specified number of seconds with an optional progress bar
- [`get_system_info()`](doc/system.md#get_system_info): Retrieves system information using the 'uname -a' command
- [`start_browser()`](doc/scrapping.md#start_browser): Initialize a Chrome browser using Selenium
- [`export_cookies()`](doc/scrapping.md#export_cookies): Export cookies from browser
- [`import_cookies()`](doc/scrapping.md#import_cookies): Import cookies to browser
- [`check_element()`](doc/scrapping.md#check_element): Function to check if an element exists on a web page based on the provided XPath
- [`esc_or_click()`](doc/scrapping.md#esc_or_click): Function to either press the ESC key or click on an element on a web page

## Where to get it / Install
The source code is currently hosted on GitHub at: https://github.com/lucaslealll/quati-toolkit

<!-- 
> [!IMPORTANT]
> It's essential to **upgrade pip** to the latest version to ensure compatibility with the library.
> ```sh
> # Requires the latest pip
> pip install --upgrade pip
> ```
-->
- [PyPI](https://pypi.org/project/quati-toolkit/)
	```sh
	# PyPI
	pip install quati-toolkit
	```
- GitHub
	```sh
	# or GitHub
	pip install git+https://github.com/lucaslealll/quati-toolkit.git
	```

## Documentation
The official documentation is here [Documentation](doc/DOCUMENTATION.md).

## License
[MIT](LICENSE)

## Dependencies
- [NumPy](https://numpy.org/)
- [Pandas](https://pandas.pydata.org/)
- [Selenium](https://www.selenium.dev/)
- [gspread](https://docs.gspread.org/)

See the [full installation instructions](INSTALLATION.md) for minimum supported versions of required, recommended and optional dependencies.

## References
- WHITTLE, Michael. How to create a Python trading library: My first Python library using EOD Historical Data (EODHD APIs). Medium - Plain English. Available at: https://python.plainenglish.io/create-a-python-trading-library-719a471bb367.
- EISINGA, Kia. How to create a Python library. Medium - Analytics Vidhya. Available at: https://medium.com/analytics-vidhya/how-to-create-a-python-library-7d5aea80cc3f.
- GATHUKU, Kevin Ndung'u. Testing Python applications with Pytest. Semaphore. April 3, 2024. Available at: https://semaphoreci.com/community/tutorials/testing-python-applications-with-pytest.

<hr>

[⇧ Go to Top](#table-of-contents)

            

Raw data

            {
    "_id": null,
    "home_page": null,
    "name": "quati-toolkit",
    "maintainer": null,
    "docs_url": null,
    "requires_python": ">=3.10",
    "maintainer_email": null,
    "keywords": "quick, actions, toolkit, functions, gspread, datetime, gsheets, email, selenium, cookies, sleep, wait",
    "author": "lucaslealll",
    "author_email": null,
    "download_url": "https://files.pythonhosted.org/packages/58/6b/08fe28d0ce259c0983acd2460fd8600bcf6efe9d0617af1e12d40288b0b1/quati_toolkit-1.1.6b0.tar.gz",
    "platform": null,
    "description": "<div align=\"center\">\n\t<picture>\n\t<!-- <source media=\"(prefers-color-scheme: dark)\" srcset=\"assets/quati_white.svg\"> -->\n\t<source media=\"(prefers-color-scheme: dark)\" srcset=\"https://raw.githubusercontent.com/lucaslealll/quati-toolkit/refs/heads/main/assets/quati.svg\">\n\t\t<img src=\"https://raw.githubusercontent.com/lucaslealll/quati-toolkit/refs/heads/main/assets/quati.svg\" width=\"100%\">\n\t</picture>\n\t<br><br><br>\n\t<hr>\n<h1>quati: A python <u>Quick Actions Toolkit</u> for data engeneering</h1>\n\n<img src=\"https://img.shields.io/badge/Author-lucaslealll-blue?logo=github&logoColor=white\"> <img src=\"https://img.shields.io/badge/Status-Beta-DF1F72\"> <img src=\"https://img.shields.io/badge/License-MIT-750014.svg\">\n<br>\n<img src=\"https://img.shields.io/pypi/v/quati-toolkit.svg?label=Version&color=white\"> <img src=\"https://img.shields.io/pypi/pyversions/quati-toolkit?logo=python&logoColor=white&label=Python\"> <img src=\"https://img.shields.io/badge/Code Style-Black Formatter-111.svg\"> \n<br>\n<img src=\"https://img.shields.io/pypi/dm/quati-toolkit.svg?label=PyPI Downloads\"> \n</div>\n\n## What is it?\n**quati** provides dynamic functions aimed at data engineering, offering\na wide range of collections to accelerate development. It has a comprehensive and\nflexible ecosystem of **tools**, **libraries**, and **community resources**,\nallowing data engineers to build and deploy applications with ease.\n\n<h2>Table of Contents</h2><br>\n\n- [What is it?](#what-is-it)\n- [Main Features](#main-features)\n- [Where to get it / Install](#where-to-get-it--install)\n- [Documentation](#documentation)\n- [License](#license)\n- [Dependencies](#dependencies)\n- [References](#references)\n\n## Main Features\nHere are just a few of the things that pandas does well:\n\n- [`norm_str_num_values()`](doc/data.md#norm_str_num_values): Converts string-based number values to their numerical equivalents\n- [`norm_rename_columns()`](doc/data.md#norm_rename_columns): Renames DataFrame columns based on a normalization function\n- [`sync_dtypes_with_table()`](doc/google.md#sync_dtypes_with_bigquery_table): Synchronize the data types of a Pandas DataFrame with a BigQuery table's schema\n- [`quick_query()`](doc/google.md#quick_query): Executes a BigQuery SQL query and returns the result as a Pandas DataFrame\n- [`gsheets_get_worksheet()`](doc/google.md#gsheets_get_worksheet): Import a worksheet object from gsheets\n- [`gsheets_get_worksheet_df()`](doc/google.md#gsheets_get_worksheet_df): Import a worksheet object from gsheets as a pandas dataframe\n- [`gsheets_dedup()`](doc/google.md#gsheets_dedup): Returns dataframe where the column passed as parameter is considered the core set for duplicate data row remover\n- [`gsheets_worksheet_next_available_row()`](doc/google.md#gsheets_worksheet_next_available_row): Return the ID of the next cell into which data can be entered\n- [`gsheets_update()`](doc/google.md#gsheets_update): Update a Google Sheets spreadsheet from a reference column\n- [`send_email()`](doc/messenger.md#send_email): Send an email (Types: error, tip, note, important or warning) with main info about it\n- [`delete_file()`](doc/system.md#delete_file): Deletes any specified file\n- [`rename_file()`](doc/system.md#rename_file): Renames a file\n- [`search_file()`](doc/system.md#search_file): Searches for the existence of a file\n- [`progress_bar()`](doc/system.md#progress_bar): Waits for the specified number of seconds with an optional progress bar\n- [`get_system_info()`](doc/system.md#get_system_info): Retrieves system information using the 'uname -a' command\n- [`start_browser()`](doc/scrapping.md#start_browser): Initialize a Chrome browser using Selenium\n- [`export_cookies()`](doc/scrapping.md#export_cookies): Export cookies from browser\n- [`import_cookies()`](doc/scrapping.md#import_cookies): Import cookies to browser\n- [`check_element()`](doc/scrapping.md#check_element): Function to check if an element exists on a web page based on the provided XPath\n- [`esc_or_click()`](doc/scrapping.md#esc_or_click): Function to either press the ESC key or click on an element on a web page\n\n## Where to get it / Install\nThe source code is currently hosted on GitHub at: https://github.com/lucaslealll/quati-toolkit\n\n<!-- \n> [!IMPORTANT]\n> It's essential to **upgrade pip** to the latest version to ensure compatibility with the library.\n> ```sh\n> # Requires the latest pip\n> pip install --upgrade pip\n> ```\n-->\n- [PyPI](https://pypi.org/project/quati-toolkit/)\n\t```sh\n\t# PyPI\n\tpip install quati-toolkit\n\t```\n- GitHub\n\t```sh\n\t# or GitHub\n\tpip install git+https://github.com/lucaslealll/quati-toolkit.git\n\t```\n\n## Documentation\nThe official documentation is here [Documentation](doc/DOCUMENTATION.md).\n\n## License\n[MIT](LICENSE)\n\n## Dependencies\n- [NumPy](https://numpy.org/)\n- [Pandas](https://pandas.pydata.org/)\n- [Selenium](https://www.selenium.dev/)\n- [gspread](https://docs.gspread.org/)\n\nSee the [full installation instructions](INSTALLATION.md) for minimum supported versions of required, recommended and optional dependencies.\n\n## References\n- WHITTLE, Michael. How to create a Python trading library: My first Python library using EOD Historical Data (EODHD APIs). Medium - Plain English. Available at: https://python.plainenglish.io/create-a-python-trading-library-719a471bb367.\n- EISINGA, Kia. How to create a Python library. Medium - Analytics Vidhya. Available at: https://medium.com/analytics-vidhya/how-to-create-a-python-library-7d5aea80cc3f.\n- GATHUKU, Kevin Ndung'u. Testing Python applications with Pytest. Semaphore. April 3, 2024. Available at: https://semaphoreci.com/community/tutorials/testing-python-applications-with-pytest.\n\n<hr>\n\n[\u21e7 Go to Top](#table-of-contents)\n",
    "bugtrack_url": null,
    "license": "MIT",
    "summary": "Dynamic data eng. functions to accelerate development and coding",
    "version": "1.1.6b0",
    "project_urls": {
        "Homepage": "https://github.com/lucaslealll/quati-toolkit"
    },
    "split_keywords": [
        "quick",
        " actions",
        " toolkit",
        " functions",
        " gspread",
        " datetime",
        " gsheets",
        " email",
        " selenium",
        " cookies",
        " sleep",
        " wait"
    ],
    "urls": [
        {
            "comment_text": null,
            "digests": {
                "blake2b_256": "59da84129ebdf7d0f6bcc7da8d72c3141f795dc97970ebbf87215490b368f15c",
                "md5": "3f0d83dd9338663539758802f4efa155",
                "sha256": "d1d23d4b5222161d45b4a34c3341999b499efc11385114875132d5806811ac21"
            },
            "downloads": -1,
            "filename": "quati_toolkit-1.1.6b0-py3-none-any.whl",
            "has_sig": false,
            "md5_digest": "3f0d83dd9338663539758802f4efa155",
            "packagetype": "bdist_wheel",
            "python_version": "py3",
            "requires_python": ">=3.10",
            "size": 4976,
            "upload_time": "2025-07-31T22:36:57",
            "upload_time_iso_8601": "2025-07-31T22:36:57.577965Z",
            "url": "https://files.pythonhosted.org/packages/59/da/84129ebdf7d0f6bcc7da8d72c3141f795dc97970ebbf87215490b368f15c/quati_toolkit-1.1.6b0-py3-none-any.whl",
            "yanked": false,
            "yanked_reason": null
        },
        {
            "comment_text": null,
            "digests": {
                "blake2b_256": "586b08fe28d0ce259c0983acd2460fd8600bcf6efe9d0617af1e12d40288b0b1",
                "md5": "6e5eace852c9f5b44125ffc324474ef4",
                "sha256": "1f563c90cf3d04ed38e1756f2ad28e03e7257fdbf8cb2a5b8fdee3896a559386"
            },
            "downloads": -1,
            "filename": "quati_toolkit-1.1.6b0.tar.gz",
            "has_sig": false,
            "md5_digest": "6e5eace852c9f5b44125ffc324474ef4",
            "packagetype": "sdist",
            "python_version": "source",
            "requires_python": ">=3.10",
            "size": 5214,
            "upload_time": "2025-07-31T22:36:59",
            "upload_time_iso_8601": "2025-07-31T22:36:59.004362Z",
            "url": "https://files.pythonhosted.org/packages/58/6b/08fe28d0ce259c0983acd2460fd8600bcf6efe9d0617af1e12d40288b0b1/quati_toolkit-1.1.6b0.tar.gz",
            "yanked": false,
            "yanked_reason": null
        }
    ],
    "upload_time": "2025-07-31 22:36:59",
    "github": true,
    "gitlab": false,
    "bitbucket": false,
    "codeberg": false,
    "github_user": "lucaslealll",
    "github_project": "quati-toolkit",
    "travis_ci": false,
    "coveralls": false,
    "github_actions": false,
    "requirements": [
        {
            "name": "asttokens",
            "specs": [
                [
                    "==",
                    "2.4.1"
                ]
            ]
        },
        {
            "name": "attrs",
            "specs": [
                [
                    "==",
                    "24.2.0"
                ]
            ]
        },
        {
            "name": "cachetools",
            "specs": [
                [
                    "==",
                    "5.5.0"
                ]
            ]
        },
        {
            "name": "certifi",
            "specs": [
                [
                    "==",
                    "2024.8.30"
                ]
            ]
        },
        {
            "name": "charset-normalizer",
            "specs": [
                [
                    "==",
                    "3.4.0"
                ]
            ]
        },
        {
            "name": "comm",
            "specs": [
                [
                    "==",
                    "0.2.2"
                ]
            ]
        },
        {
            "name": "debugpy",
            "specs": [
                [
                    "==",
                    "1.8.7"
                ]
            ]
        },
        {
            "name": "decorator",
            "specs": [
                [
                    "==",
                    "5.1.1"
                ]
            ]
        },
        {
            "name": "exceptiongroup",
            "specs": [
                [
                    "==",
                    "1.2.2"
                ]
            ]
        },
        {
            "name": "executing",
            "specs": [
                [
                    "==",
                    "2.1.0"
                ]
            ]
        },
        {
            "name": "google-api-core",
            "specs": [
                [
                    "==",
                    "2.22.0"
                ]
            ]
        },
        {
            "name": "google-auth",
            "specs": [
                [
                    "==",
                    "2.35.0"
                ]
            ]
        },
        {
            "name": "google-auth-oauthlib",
            "specs": [
                [
                    "==",
                    "1.2.1"
                ]
            ]
        },
        {
            "name": "google-cloud-bigquery",
            "specs": [
                [
                    "==",
                    "2.34.4"
                ]
            ]
        },
        {
            "name": "google-cloud-bigquery-storage",
            "specs": [
                [
                    "==",
                    "2.27.0"
                ]
            ]
        },
        {
            "name": "google-cloud-core",
            "specs": [
                [
                    "==",
                    "2.4.1"
                ]
            ]
        },
        {
            "name": "google-crc32c",
            "specs": [
                [
                    "==",
                    "1.6.0"
                ]
            ]
        },
        {
            "name": "google-resumable-media",
            "specs": [
                [
                    "==",
                    "2.7.2"
                ]
            ]
        },
        {
            "name": "googleapis-common-protos",
            "specs": [
                [
                    "==",
                    "1.65.0"
                ]
            ]
        },
        {
            "name": "grpcio",
            "specs": [
                [
                    "==",
                    "1.67.1"
                ]
            ]
        },
        {
            "name": "grpcio-status",
            "specs": [
                [
                    "==",
                    "1.48.2"
                ]
            ]
        },
        {
            "name": "gspread",
            "specs": [
                [
                    "==",
                    "5.5.0"
                ]
            ]
        },
        {
            "name": "h11",
            "specs": [
                [
                    "==",
                    "0.14.0"
                ]
            ]
        },
        {
            "name": "idna",
            "specs": [
                [
                    "==",
                    "3.10"
                ]
            ]
        },
        {
            "name": "ipykernel",
            "specs": [
                [
                    "==",
                    "6.29.5"
                ]
            ]
        },
        {
            "name": "jedi",
            "specs": [
                [
                    "==",
                    "0.19.1"
                ]
            ]
        },
        {
            "name": "jupyter_client",
            "specs": [
                [
                    "==",
                    "8.6.3"
                ]
            ]
        },
        {
            "name": "jupyter_core",
            "specs": [
                [
                    "==",
                    "5.7.2"
                ]
            ]
        },
        {
            "name": "matplotlib-inline",
            "specs": [
                [
                    "==",
                    "0.1.7"
                ]
            ]
        },
        {
            "name": "nest-asyncio",
            "specs": [
                [
                    "==",
                    "1.6.0"
                ]
            ]
        },
        {
            "name": "numpy",
            "specs": [
                [
                    "==",
                    "1.25.2"
                ]
            ]
        },
        {
            "name": "oauthlib",
            "specs": [
                [
                    "==",
                    "3.2.2"
                ]
            ]
        },
        {
            "name": "outcome",
            "specs": [
                [
                    "==",
                    "1.3.0.post0"
                ]
            ]
        },
        {
            "name": "packaging",
            "specs": [
                [
                    "==",
                    "21.3"
                ]
            ]
        },
        {
            "name": "pandas",
            "specs": [
                [
                    "==",
                    "1.3.4"
                ]
            ]
        },
        {
            "name": "pandas-gbq",
            "specs": [
                [
                    "==",
                    "0.14.1"
                ]
            ]
        },
        {
            "name": "parso",
            "specs": [
                [
                    "==",
                    "0.8.4"
                ]
            ]
        },
        {
            "name": "pexpect",
            "specs": [
                [
                    "==",
                    "4.9.0"
                ]
            ]
        },
        {
            "name": "platformdirs",
            "specs": [
                [
                    "==",
                    "4.3.6"
                ]
            ]
        },
        {
            "name": "prompt_toolkit",
            "specs": [
                [
                    "==",
                    "3.0.48"
                ]
            ]
        },
        {
            "name": "proto-plus",
            "specs": [
                [
                    "==",
                    "1.25.0"
                ]
            ]
        },
        {
            "name": "protobuf",
            "specs": [
                [
                    "==",
                    "3.20.3"
                ]
            ]
        },
        {
            "name": "psutil",
            "specs": [
                [
                    "==",
                    "6.1.0"
                ]
            ]
        },
        {
            "name": "ptyprocess",
            "specs": [
                [
                    "==",
                    "0.7.0"
                ]
            ]
        },
        {
            "name": "pure_eval",
            "specs": [
                [
                    "==",
                    "0.2.3"
                ]
            ]
        },
        {
            "name": "pyarrow",
            "specs": [
                [
                    "==",
                    "7.0.0"
                ]
            ]
        },
        {
            "name": "pyasn1",
            "specs": [
                [
                    "==",
                    "0.6.1"
                ]
            ]
        },
        {
            "name": "pyasn1_modules",
            "specs": [
                [
                    "==",
                    "0.4.1"
                ]
            ]
        },
        {
            "name": "pydata-google-auth",
            "specs": [
                [
                    "==",
                    "1.8.2"
                ]
            ]
        },
        {
            "name": "Pygments",
            "specs": [
                [
                    "==",
                    "2.18.0"
                ]
            ]
        },
        {
            "name": "pyparsing",
            "specs": [
                [
                    "==",
                    "3.2.0"
                ]
            ]
        },
        {
            "name": "PySocks",
            "specs": [
                [
                    "==",
                    "1.7.1"
                ]
            ]
        },
        {
            "name": "python-dateutil",
            "specs": [
                [
                    "==",
                    "2.9.0.post0"
                ]
            ]
        },
        {
            "name": "pytz",
            "specs": [
                [
                    "==",
                    "2024.2"
                ]
            ]
        },
        {
            "name": "pyzmq",
            "specs": [
                [
                    "==",
                    "26.2.0"
                ]
            ]
        },
        {
            "name": "requests",
            "specs": [
                [
                    "==",
                    "2.32.3"
                ]
            ]
        },
        {
            "name": "requests-oauthlib",
            "specs": [
                [
                    "==",
                    "2.0.0"
                ]
            ]
        },
        {
            "name": "rsa",
            "specs": [
                [
                    "==",
                    "4.9"
                ]
            ]
        },
        {
            "name": "selenium",
            "specs": [
                [
                    "==",
                    "4.7.2"
                ]
            ]
        },
        {
            "name": "six",
            "specs": [
                [
                    "==",
                    "1.16.0"
                ]
            ]
        },
        {
            "name": "sniffio",
            "specs": [
                [
                    "==",
                    "1.3.1"
                ]
            ]
        },
        {
            "name": "sortedcontainers",
            "specs": [
                [
                    "==",
                    "2.4.0"
                ]
            ]
        },
        {
            "name": "stack-data",
            "specs": [
                [
                    "==",
                    "0.6.3"
                ]
            ]
        },
        {
            "name": "tornado",
            "specs": [
                [
                    "==",
                    "6.4.1"
                ]
            ]
        },
        {
            "name": "traitlets",
            "specs": [
                [
                    "==",
                    "5.14.3"
                ]
            ]
        },
        {
            "name": "trio",
            "specs": [
                [
                    "==",
                    "0.27.0"
                ]
            ]
        },
        {
            "name": "trio-websocket",
            "specs": [
                [
                    "==",
                    "0.11.1"
                ]
            ]
        },
        {
            "name": "typing_extensions",
            "specs": [
                [
                    "==",
                    "4.12.2"
                ]
            ]
        },
        {
            "name": "urllib3",
            "specs": [
                [
                    "==",
                    "1.26.20"
                ]
            ]
        },
        {
            "name": "wcwidth",
            "specs": [
                [
                    "==",
                    "0.2.13"
                ]
            ]
        },
        {
            "name": "wsproto",
            "specs": []
        },
        {
            "name": "tqdm",
            "specs": [
                [
                    "==",
                    "4.67.1"
                ]
            ]
        }
    ],
    "lcname": "quati-toolkit"
}
        
Elapsed time: 0.72079s