diff --git a/README.md b/README.md index df5ce8d..ab87d9e 100644 --- a/README.md +++ b/README.md @@ -1,13 +1,12 @@ -# smartutils +# pyquicktools
-![PyPI Version](https://img.shields.io/pypi/v/smartutils?color=blue&style=flat-square) -![Python Versions](https://img.shields.io/pypi/pyversions/smartutils?style=flat-square) -![License](https://img.shields.io/pypi/l/smartutils?style=flat-square) -![GitHub Stars](https://img.shields.io/github/stars/suhani1234-5/smartutils?style=flat-square) -![Downloads](https://static.pepy.tech/personalized-badge/smartutils?period=total&units=international_system&left_color=grey&right_color=blue&left_text=Downloads) - +![PyPI Version](https://img.shields.io/pypi/v/pyquicktools?color=blue&style=flat-square) +![Python Versions](https://img.shields.io/pypi/pyversions/pyquicktools?style=flat-square) +![License](https://img.shields.io/pypi/l/pyquicktools?style=flat-square) +![GitHub Stars](https://img.shields.io/github/stars/Suhani1234-5/pyquicktools?style=flat-square) +![Downloads](https://static.pepy.tech/personalized-badge/pyquicktools?period=total&units=international_system&left_color=grey&right_color=blue&left_text=Downloads) **The Python utility toolbox you didn't know you needed — until now.** @@ -15,7 +14,7 @@ **Perfect for GSoC, open-source contributors, backend engineers & interview projects** - Built with **real-world backend failures** in mind — not toy examples. +Built with **real-world backend failures** in mind — not toy examples. [Installation](#-installation) • [Features](#-features) • [Quick Start](#-quick-start) • [Documentation](#-documentation) • [Contributing](#-contributing) @@ -23,24 +22,24 @@ --- -## Why smartutils? +## Why pyquicktools? -Stop installing 5+ packages for basic Python tasks. **smartutils** combines the most-needed utilities into one lightweight, blazing-fast package: +Stop installing 5+ packages for basic Python tasks. **pyquicktools** combines the most-needed utilities into one lightweight, blazing-fast package: - **Auto-retry HTTP requests** with exponential backoff +**Auto-retry HTTP requests** with exponential backoff **Colorized debug printing** with file/line tracking - **Async retry support** for `aiohttp` +**Async retry support** for `aiohttp` **Safe JSON parsing** that fixes common errors **Minimal configuration** — works out of the box -**Before smartutils:** +**Before pyquicktools:** ```bash pip install requests tenacity simplejson pprint colorama ``` -**After smartutils:** +**After pyquicktools:** ```bash -pip install smartutils +pip install pyquicktools ``` --- @@ -48,7 +47,7 @@ pip install smartutils ## 📦 Installation ```bash -pip install smartutils +pip install pyquicktools ``` **Requirements:** Python 3.8+ @@ -62,7 +61,7 @@ pip install smartutils Never lose data to flaky APIs again. Automatic retries with exponential backoff. ```python -from smartutils import get, post +from pyquicktools import get, post # Auto-retry on failure (default: 3 retries) response = get("https://api.example.com/data", retries=5, timeout=10) @@ -90,7 +89,7 @@ response = post( Say goodbye to boring `print()` statements. Get beautiful, informative debug output. ```python -from smartutils import dprint +from pyquicktools import dprint user = {"name": "Suhani", "age": 22} items = ["laptop", "phone", "charger"] @@ -104,7 +103,7 @@ dprint(user, items) ``` **Features:** -- **Color-coded** output (variables in cyan, values in green) +- **Color-coded** output (variables in cyan, values in green) - **Automatic file + line number** tracking - **Named arguments** shown clearly - **Minimal configuration** — just replace `print()` with `dprint()` @@ -131,11 +130,11 @@ dprint(error_data, file=open("debug.log", "a")) Supercharge your async code with automatic retries. > ⚠️ **Note:** Async features require `aiohttp`. -> Install with: `pip install smartutils aiohttp` +> Install with: `pip install pyquicktools aiohttp` ```python import asyncio -from smartutils import async_get +from pyquicktools import async_get async def fetch_data(): # Auto-retry async requests @@ -162,7 +161,7 @@ asyncio.run(fetch_data()) Parse JSON that's almost-but-not-quite valid. Fixes common errors automatically. ```python -from smartutils import load_json +from pyquicktools import load_json # Handles trailing commas, comments, NaN, Infinity data = load_json(""" @@ -180,7 +179,7 @@ print(data["age"]) # Output: 22 (int, not string!) - Trailing commas in arrays/objects - JavaScript-style comments (`//` and `/* */`) - `NaN` and `Infinity` values -- Optional smart typecasting for numeric strings +- Optional smart typecasting for numeric strings --- @@ -189,7 +188,7 @@ print(data["age"]) # Output: 22 (int, not string!) ### Example 1: Resilient API Calls ```python -from smartutils import get, dprint +from pyquicktools import get, dprint try: response = get( @@ -209,7 +208,7 @@ except Exception as e: ```python import asyncio -from smartutils import async_get +from pyquicktools import async_get async def fetch_multiple(): urls = [ @@ -232,7 +231,7 @@ asyncio.run(fetch_multiple()) ### Example 3: Parse Messy JSON ```python -from smartutils import load_json +from pyquicktools import load_json # From API response with comments messy_json = """ @@ -300,12 +299,12 @@ print(type(data["total"])) # --- -## 🛠️ Advanced Usage +## Advanced Usage ### Custom Retry Strategy ```python -from smartutils import get +from pyquicktools import get response = get( "https://api.example.com/data", @@ -321,7 +320,7 @@ response = get( ### Logging with dprint ```python -from smartutils import dprint +from pyquicktools import dprint # In production: disable colors for log files with open("debug.log", "a") as log_file: @@ -343,31 +342,31 @@ We love contributions! Here's how to get started: ### Development Setup ```bash -git clone https://github.com/Suhani1234-5/smartutils.git -cd smartutils +git clone https://github.com/Suhani1234-5/pyquicktools.git +cd pyquicktools pip install -e ".[dev]" pytest ``` --- -## License +## License This project is licensed under the **MIT License** - see the [LICENSE](LICENSE) file for details. --- -## Star History +## Star History -If you find this project useful, please consider giving it a ⭐ on [GitHub](https://github.com/suhani1234-5/smartutils)! +If you find this project useful, please consider giving it a ⭐ on [GitHub](https://github.com/Suhani1234-5/pyquicktools)! --- -## 📧 Contact +## Contact **Suhani Garg** 📧 suhanigarg59@gmail.com - [GitHub](https://github.com/Suhani1234-5) +[GitHub](https://github.com/Suhani1234-5) --- @@ -375,6 +374,6 @@ If you find this project useful, please consider giving it a ⭐ on [GitHub](htt **Made with ❤️ by Suhani Garg** -[⬆ Back to Top](#-smartutils) +[⬆ Back to Top](#-pyquicktools)
\ No newline at end of file diff --git a/pyproject.toml b/pyproject.toml index d7fe9ab..bc60538 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -3,9 +3,9 @@ requires = ["setuptools>=61.0"] build-backend = "setuptools.build_meta" [project] -name = "smartutils" -version = "0.1.1" -description = "Smart Python utilities: retry-safe HTTP, colorized debug prints, async retries, safe JSON" +name = "pyquicktools" +version = "0.1.0" +description = "Smart Python utilities for HTTP retries, logging control, async retries, and diagnostics CLI" readme = "README.md" license = "MIT" @@ -13,7 +13,7 @@ authors = [ { name = "Suhani Garg", email = "suhanigarg59@gmail.com" } ] -keywords = ["http", "retry", "debug", "async", "utilities"] +keywords = ["python", "http", "retry", "requests", "cli", "utilities", "logging", "devtools"] requires-python = ">=3.8" dependencies = [ @@ -28,6 +28,7 @@ classifiers = [ "Programming Language :: Python :: 3.11", "Programming Language :: Python :: 3.12", "Operating System :: OS Independent", + "License :: OSI Approved :: MIT License", ] [project.optional-dependencies] @@ -36,6 +37,6 @@ async = [ ] [project.urls] -Homepage = "https://github.com/Suhani1234-5/smartutils" -Repository = "https://github.com/Suhani1234-5/smartutils" -Issues = "https://github.com/Suhani1234-5/smartutils/issues" +Homepage = "https://github.com/Suhani1234-5/pyquicktools" +Repository = "https://github.com/Suhani1234-5/pyquicktools" +Issues = "https://github.com/Suhani1234-5/pyquicktools/issues" diff --git a/smartutils/.gitignore b/pyquicktools/.gitignore similarity index 100% rename from smartutils/.gitignore rename to pyquicktools/.gitignore diff --git a/smartutils/__init__.py b/pyquicktools/__init__.py similarity index 100% rename from smartutils/__init__.py rename to pyquicktools/__init__.py diff --git a/smartutils/__main__.py b/pyquicktools/__main__.py similarity index 100% rename from smartutils/__main__.py rename to pyquicktools/__main__.py diff --git a/smartutils/debug_print.py b/pyquicktools/debug_print.py similarity index 97% rename from smartutils/debug_print.py rename to pyquicktools/debug_print.py index 4099471..74f19d6 100644 --- a/smartutils/debug_print.py +++ b/pyquicktools/debug_print.py @@ -16,7 +16,7 @@ def dprint(*args, prefix="debug", show_location=True, color="cyan"): """ Debug print with variable names, values, color and source location """ - if os.getenv("SMARTUTILS_DEBUG", "1") != "1": + if os.getenv("PYQUICKTOOLS_DEBUG", "1") != "1": return frame = inspect.currentframe().f_back diff --git a/smartutils/doctor.py b/pyquicktools/doctor.py similarity index 80% rename from smartutils/doctor.py rename to pyquicktools/doctor.py index 9aab6db..1b562c3 100644 --- a/smartutils/doctor.py +++ b/pyquicktools/doctor.py @@ -4,10 +4,10 @@ def run_doctor(): import platform import requests - print("🩺 smartutils doctor report\n") + print("🩺 pyquicktools doctor report\n") print(f"✔ Python version: {platform.python_version()}") - print(f"✔ SMARTUTILS_LOG: {'ON' if os.getenv('SMARTUTILS_LOG', '1') == '1' else 'OFF'}") + print(f"✔ PYQUICKTOOLS_LOG: {'ON' if os.getenv('PYQUICKTOOLS_LOG', '1') == '1' else 'OFF'}") try: import requests diff --git a/smartutils/http_retry.py b/pyquicktools/http_retry.py similarity index 96% rename from smartutils/http_retry.py rename to pyquicktools/http_retry.py index 6e761a1..884ffc3 100644 --- a/smartutils/http_retry.py +++ b/pyquicktools/http_retry.py @@ -9,12 +9,12 @@ # ------------------ LOGGER ------------------ def _get_logger(log_file=None): - if os.getenv("SMARTUTILS_LOG", "1") != "1": - logger = logging.getLogger("smartutils.http") + if os.getenv("PYQUICKTOOLS_LOG", "1") != "1": + logger = logging.getLogger("pyquicktools.http") logger.addHandler(logging.NullHandler()) return logger - logger = logging.getLogger("smartutils.http") + logger = logging.getLogger("pyquicktools.http") if logger.handlers: return logger diff --git a/smartutils/safe_json.py b/pyquicktools/safe_json.py similarity index 100% rename from smartutils/safe_json.py rename to pyquicktools/safe_json.py diff --git a/tests/__init__.py b/tests/__init__.py index da26ef1..18e073a 100644 --- a/tests/__init__.py +++ b/tests/__init__.py @@ -1,6 +1,6 @@ -from smartutils import dprint +from pyquicktools import dprint name = "Suhani" age = 20 -dprint(name, age) +dprint(name, age) \ No newline at end of file diff --git a/tests/test_debug.py b/tests/test_debug.py index cecae26..de1cad1 100644 --- a/tests/test_debug.py +++ b/tests/test_debug.py @@ -1,4 +1,4 @@ -from smartutils import dprint +from pyquicktools import dprint def test_dprint_runs(): diff --git a/tests/test_http.py b/tests/test_http.py index 92479bf..6466a48 100644 --- a/tests/test_http.py +++ b/tests/test_http.py @@ -1,5 +1,5 @@ import pytest -from smartutils import get +from pyquicktools import get def test_get_success(): @@ -10,4 +10,4 @@ def test_get_success(): def test_get_retry_fail(): with pytest.raises(Exception): - get("https://httpstat.us/500", retries=1) + get("https://httpstat.us/500", retries=1) \ No newline at end of file diff --git a/tests/test_jsonsafe.py b/tests/test_jsonsafe.py index a2a666a..b017245 100644 --- a/tests/test_jsonsafe.py +++ b/tests/test_jsonsafe.py @@ -1,4 +1,4 @@ -from smartutils import load_json +from pyquicktools import load_json def test_safe_json():