<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/quati-dev/quati/refs/heads/main/assets/quati.svg">
<img src="https://raw.githubusercontent.com/quati-dev/quati/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.svg?label=Version&color=white"> <img src="https://img.shields.io/pypi/pyversions/quati?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.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 easily build and deploy applications.
<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)
## 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/quati-dev/quati
<!--
> [!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/)
```sh
# PyPI
pip install quati
```
- GitHub
```sh
# or GitHub
pip install git+https://github.com/quati-dev/quati.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.
<hr>
[⇧ Go to Top](#table-of-contents)
Raw data
{
"_id": null,
"home_page": null,
"name": "quati",
"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/9a/d6/aaee12aa7360bbc4d620d9d094038c1cb43ec1b4bc50e6e93cfb7ef2a408/quati-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/quati-dev/quati/refs/heads/main/assets/quati.svg\">\n\t\t<img src=\"https://raw.githubusercontent.com/quati-dev/quati/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.svg?label=Version&color=white\"> <img src=\"https://img.shields.io/pypi/pyversions/quati?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.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 easily build and deploy applications.\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\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/quati-dev/quati\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/)\n\t```sh\n\t# PyPI\n\tpip install quati\n\t```\n- GitHub\n\t```sh\n\t# or GitHub\n\tpip install git+https://github.com/quati-dev/quati.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<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/quati-dev/quati"
},
"split_keywords": [
"quick",
" actions",
" toolkit",
" functions",
" gspread",
" datetime",
" gsheets",
" email",
" selenium",
" cookies",
" sleep",
" wait"
],
"urls": [
{
"comment_text": null,
"digests": {
"blake2b_256": "ac652216991b91dec00140485fa7728450884228b7de119e1c8a4452b293956b",
"md5": "bbf79d0cf9b9e7e167ecb92089129d6b",
"sha256": "6c1fe24e2438dd32886cc7056505bf45189f9ead195e3d1aa6b1623ae2153ce3"
},
"downloads": -1,
"filename": "quati-1.1.6b0-py3-none-any.whl",
"has_sig": false,
"md5_digest": "bbf79d0cf9b9e7e167ecb92089129d6b",
"packagetype": "bdist_wheel",
"python_version": "py3",
"requires_python": ">=3.10",
"size": 4572,
"upload_time": "2025-08-01T00:31:53",
"upload_time_iso_8601": "2025-08-01T00:31:53.230087Z",
"url": "https://files.pythonhosted.org/packages/ac/65/2216991b91dec00140485fa7728450884228b7de119e1c8a4452b293956b/quati-1.1.6b0-py3-none-any.whl",
"yanked": false,
"yanked_reason": null
},
{
"comment_text": null,
"digests": {
"blake2b_256": "9ad6aaee12aa7360bbc4d620d9d094038c1cb43ec1b4bc50e6e93cfb7ef2a408",
"md5": "36f70fdcfc273326da298a1c6598a919",
"sha256": "15200b7d0414b4b01d17f5d12206b83f60d5d127b03b8228d2dc9a65c411954a"
},
"downloads": -1,
"filename": "quati-1.1.6b0.tar.gz",
"has_sig": false,
"md5_digest": "36f70fdcfc273326da298a1c6598a919",
"packagetype": "sdist",
"python_version": "source",
"requires_python": ">=3.10",
"size": 4888,
"upload_time": "2025-08-01T00:31:55",
"upload_time_iso_8601": "2025-08-01T00:31:55.289618Z",
"url": "https://files.pythonhosted.org/packages/9a/d6/aaee12aa7360bbc4d620d9d094038c1cb43ec1b4bc50e6e93cfb7ef2a408/quati-1.1.6b0.tar.gz",
"yanked": false,
"yanked_reason": null
}
],
"upload_time": "2025-08-01 00:31:55",
"github": true,
"gitlab": false,
"bitbucket": false,
"codeberg": false,
"github_user": "quati-dev",
"github_project": "quati",
"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"
}