python-myutils


Namepython-myutils JSON
Version 1.0.2 PyPI version JSON
download
home_pageNone
SummaryA comprehensive Python utility library with AI integration, database operations, and common utilities
upload_time2025-08-10 05:08:19
maintainerNone
docs_urlNone
authorNone
requires_python>=3.10
licenseNone
keywords utilities ai database validation file-utils string-utils openai supabase sentry
VCS
bugtrack_url
requirements No requirements were recorded.
Travis-CI No Travis.
coveralls test coverage No coveralls.
            # 🐍 MyUtils - Python Utility Library

[![Python 3.10+](https://img.shields.io/badge/python-3.10+-blue.svg)](https://www.python.org/downloads/release/python-3100/)
[![License: MIT](https://img.shields.io/badge/License-MIT-yellow.svg)](https://opensource.org/licenses/MIT)
[![Tests](https://img.shields.io/badge/tests-119_passed-green.svg)](https://github.com/quocln-tech/python-myutils/actions)
[![Coverage](https://img.shields.io/badge/coverage-100%25-brightgreen.svg)](https://github.com/quocln-tech/python-myutils)
[![Code Quality](https://img.shields.io/badge/code_quality-A-brightgreen.svg)](https://github.com/quocln-tech/python-myutils)

A comprehensive, production-ready Python utility library that provides essential tools for file operations, string manipulation, date/time handling, validation, and AI integrations. Built with modern Python practices and extensive test coverage.

## ✨ Features

### 🔧 Core Utilities
- **File Operations**: JSON, CSV handling, directory management, file utilities
- **String Processing**: Case conversion, cleaning, validation, formatting, pluralization  
- **Date/Time**: Parsing, formatting, calculations, human-readable timestamps
- **Validation**: Phone, URL, IP, email, password strength, data structure validation

### 🤖 AI & Integration Managers
- **AI Manager**: OpenRouter API integration with request handling
- **Database Manager**: Supabase operations with full CRUD support
- **Sentry Manager**: Error tracking and event capture with custom context
- **AI Embed Manager**: OpenAI embeddings with intelligent caching and rate limiting

### 🛡️ Production Ready
- **100% Test Coverage**: 119 comprehensive tests covering all functionality
- **Type Hints**: Full type annotation support for better IDE experience
- **Error Handling**: Robust error handling with detailed logging
- **Configuration**: Flexible, configuration-driven initialization
- **Performance**: Optimized with caching and rate limiting where needed

## 🚀 Quick Start

### Basic Usage

```python
from myutils import *

# File operations
data = {"name": "John", "age": 30}
write_json(data, "user.json")
user_data = read_json("user.json")

# String utilities
snake_case = camel_to_snake("MyVariableName")  # "my_variable_name"
clean_name = clean_filename("my<file>name.txt")  # "myfilename.txt"
is_valid = is_email("user@example.com")  # True

# Date utilities
formatted = format_datetime(datetime.now(), "%Y-%m-%d")
time_str = time_since(datetime.now() - timedelta(hours=2))  # "2 hours ago"

# Validation
phone_valid = is_valid_phone("555-123-4567")  # True
strong_pwd = is_strong_password("MyP@ssw0rd123")  # True
```

## 📚 Comprehensive Documentation

### File Utilities

```python
from myutils.file_utils import *

# JSON operations
data = {"users": [{"name": "John", "age": 30}]}
write_json(data, "data.json", indent=2)
result = read_json("data.json")

# CSV operations  
csv_data = read_csv_as_dicts("users.csv")
for user in csv_data:
    print(f"Name: {user['name']}, Age: {user['age']}")

# Directory management
ensure_dir_exists("logs/2024")
if file_exists("config.json"):
    size = get_file_size("config.json")
```

### String Processing

```python
from myutils.string_utils import *

# Case conversion
camel_case = snake_to_camel("user_name")  # "UserName"
snake_case = camel_to_snake("UserName")   # "user_name"

# Text processing
cleaned = remove_extra_spaces("  Hello    world  ")  # "Hello world"
truncated = truncate_string("Long text here", 10)    # "Long te..."
numbers = extract_numbers("Price: $123.45")         # ["123", "45"]

# Validation & formatting
valid_email = is_email("user@domain.com")           # True
safe_name = clean_filename("file<name>.txt")        # "filename.txt"
plural_form = plural("item", 5)                     # "items"
```

### Date & Time Operations

```python
from myutils.date_utils import *

# Date formatting and parsing
now = datetime.now()
formatted = format_datetime(now, "%B %d, %Y")       # "August 08, 2024"
parsed = parse_datetime("2024-08-08", "%Y-%m-%d")

# Date calculations
past_date = days_ago(7)                              # 7 days ago
future_date = days_from_now(14)                      # 14 days from now
age = get_age_in_years(datetime(1990, 5, 15))       # Current age

# Human-readable time
time_str = time_since(datetime.now() - timedelta(minutes=30))  # "30 minutes ago"
weekend = is_weekend(datetime.now())                           # True/False
```

### Validation Functions

```python
from myutils.validation_utils import *

# Contact validation
phone_valid = is_valid_phone("(555) 123-4567")      # True
url_valid = is_valid_url("https://example.com")     # True
ip_valid = is_valid_ip("192.168.1.1")              # True

# Data validation
numeric = is_numeric("123.45")                       # True
in_range = is_in_range(25, 18, 65)                 # True
not_empty = is_not_empty("  content  ")            # True
has_keys = has_required_keys({"name": "John"}, ["name"])  # True

# Password validation
strength = validate_password_strength("MyP@ssw0rd123")
# {"min_length": True, "has_uppercase": True, "has_lowercase": True, 
#  "has_digit": True, "has_special": True}
strong = is_strong_password("MyP@ssw0rd123")        # True
```

## 🤖 AI & Integration Managers

### AI Manager (OpenRouter Integration)

```python
from myutils.ai_manager_utils import AIManager

config = {
    "api_key": "your-openrouter-api-key",
    "model": "google/gemini-2.0-flash-001",
    "base_url": "https://openrouter.ai/api/v1"
}

ai = AIManager(config)

# Make AI requests
response = ai.request("chat/completions", {
    "messages": [{"role": "user", "content": "Hello, AI!"}],
    "max_tokens": 100
})

# Verify connectivity
if ai.verify_connectivity():
    print("AI service is available")
```

### Database Manager (Supabase Integration)

```python
from myutils.database_manager_utils import DatabaseManager

config = {
    "url": "your-supabase-url",
    "key": "your-supabase-key"
}

db = DatabaseManager(config)

# CRUD operations
user = db.insert({"name": "John", "email": "john@example.com"}, "users")
users = db.select("users", {"active": True})
updated = db.update({"name": "John Doe"}, {"id": user["id"]}, "users")
deleted = db.delete({"id": user["id"]}, "users")
```

### Sentry Manager (Error Tracking)

```python
from myutils.sentry_manager_utils import SentryManager

config = {
    "dsn": "your-sentry-dsn",
    "environment": "production",
    "version": "1.0.0"
}

sentry = SentryManager(config)

# Capture events
sentry.capture({"message": "User login", "user_id": 123}, "info")
sentry.capture({"error": "Database connection failed"}, "error")
sentry.capture({"metric": "api_response_time", "value": 250}, "performance")

# Verify connectivity
if sentry.verify_connectivity():
    print("Sentry tracking is active")
```

### AI Embed Manager (OpenAI Embeddings)

```python
from myutils.ai_embed_manager_utils import AIEmbedManager

config = {
    "api_key": "your-openai-api-key",
    "model": "text-embedding-3-small",
    "cache_duration": 3600  # 1 hour cache
}

embedder = AIEmbedManager(config)

# Generate embeddings (with automatic caching)
embedding = embedder.get_embedding("Hello, world!")
print(f"Embedding dimensions: {len(embedding)}")

# Batch processing
embeddings = embedder.get_embedding_batch([
    "First text", "Second text", "Third text"
])

# Cache management
stats = embedder.get_cache_stats()
print(f"Cache entries: {stats['total_entries']}")
embedder.clear_cache()  # Clear when needed
```

## 🔧 Advanced Usage

### Configuration Management

All managers support flexible configuration:

```python
# Environment variables
import os
from myutils import AIManager, DatabaseManager

ai_config = {
    "api_key": os.getenv("OPENROUTER_API_KEY"),
    "model": os.getenv("AI_MODEL", "google/gemini-2.0-flash-001")
}

db_config = {
    "url": os.getenv("SUPABASE_URL"),
    "key": os.getenv("SUPABASE_KEY")
}

ai = AIManager(ai_config)
db = DatabaseManager(db_config)
```

### Error Handling

```python
from myutils import *

try:
    data = read_json("nonexistent.json")
except FileNotFoundError:
    data = {"default": True}

# Graceful degradation
ai = AIManager({"api_key": ""})  # No key provided
if not ai.client_available:
    print("AI features disabled - no API key")
```

### Integration Example

```python
from myutils import *
from datetime import datetime

# Complete workflow example
def process_user_data(user_input):
    # Validate and clean input
    if not is_email(user_input.get('email', '')):
        return {"error": "Invalid email"}
    
    # Process and format data
    user_data = {
        "name": remove_extra_spaces(user_input['name']),
        "email": user_input['email'].lower().strip(),
        "phone": user_input.get('phone', '').strip(),
        "registered": datetime.now().isoformat(),
        "age": get_age_in_years(parse_datetime(user_input['birth_date'], "%Y-%m-%d"))
    }
    
    # Validate phone if provided
    if user_data['phone'] and not is_valid_phone(user_data['phone']):
        return {"error": "Invalid phone number"}
    
    # Save to database
    db = DatabaseManager({"url": "...", "key": "..."})
    result = db.insert(user_data, "users")
    
    # Log to Sentry
    sentry = SentryManager({"dsn": "..."})
    sentry.capture({"message": "User registered", "user_id": result["id"]}, "info")
    
    return {"success": True, "user": result}
```

## 📊 Testing & Quality

- **119 Tests**: Comprehensive test suite covering all functionality
- **100% Pass Rate**: All tests passing with robust error handling
- **Type Safety**: Full type hints for better development experience  
- **Mock Testing**: External API dependencies properly mocked
- **Integration Tests**: End-to-end workflow testing
- **Performance Tests**: Optimized for speed and memory usage

### Running Tests

```bash
# Install development dependencies
pip install -r requirements.txt

# Run all tests
pytest

# Run with coverage
pytest --cov=myutils --cov-report=html

# Run specific test module
pytest tests/test_string_utils.py -v
```

## 🛠️ Requirements

- **Python**: 3.10 or higher
- **Dependencies**: requests, supabase, sentry-sdk, python-dotenv
- **Optional**: pytest, pytest-cov, pytest-mock (for development)

## 🤝 Contributing

We welcome contributions! Please see our [Contributing Guidelines](CONTRIBUTING.md) for details.

### Quick Contribution Setup

```bash
# Clone using SSH (recommended)
git clone git@github.com:quocln-tech/python-myutils.git
cd python-myutils
python -m venv venv
source venv/bin/activate  # On Windows: venv\Scripts\activate
pip install -r requirements.txt
pip install -e .
pytest  # Run tests
```

## 📄 License

This project is licensed under the MIT License - see the [LICENSE](LICENSE) file for details.

## 🏆 Why MyUtils?

### ✅ Production Ready
- Extensively tested with 100% test coverage
- Used in production environments
- Robust error handling and graceful degradation
- Type-safe with comprehensive type hints

### ⚡ Performance Optimized
- Intelligent caching for expensive operations
- Rate limiting to respect API constraints
- Memory-efficient implementations
- Async-ready architecture

### 🔧 Developer Friendly
- Intuitive API design
- Comprehensive documentation
- Clear error messages
- IDE-friendly with full type support

### 🎯 Comprehensive
- Core utilities + AI integrations in one package
- Consistent API patterns across all modules
- Configuration-driven architecture
- Mock-friendly for easy testing

---

**Built with ❤️ by [quocln](https://github.com/quocln)**

*Making Python development more efficient, one utility at a time.*

            

Raw data

            {
    "_id": null,
    "home_page": null,
    "name": "python-myutils",
    "maintainer": null,
    "docs_url": null,
    "requires_python": ">=3.10",
    "maintainer_email": null,
    "keywords": "utilities, ai, database, validation, file-utils, string-utils, openai, supabase, sentry",
    "author": null,
    "author_email": "quocln-tech <quocln@me.com>",
    "download_url": "https://files.pythonhosted.org/packages/2d/0a/37f72b9740da8dd16a9c318184954e9c56b739ad0c02f58fd4cbfd22a94c/python_myutils-1.0.2.tar.gz",
    "platform": null,
    "description": "# \ud83d\udc0d MyUtils - Python Utility Library\n\n[![Python 3.10+](https://img.shields.io/badge/python-3.10+-blue.svg)](https://www.python.org/downloads/release/python-3100/)\n[![License: MIT](https://img.shields.io/badge/License-MIT-yellow.svg)](https://opensource.org/licenses/MIT)\n[![Tests](https://img.shields.io/badge/tests-119_passed-green.svg)](https://github.com/quocln-tech/python-myutils/actions)\n[![Coverage](https://img.shields.io/badge/coverage-100%25-brightgreen.svg)](https://github.com/quocln-tech/python-myutils)\n[![Code Quality](https://img.shields.io/badge/code_quality-A-brightgreen.svg)](https://github.com/quocln-tech/python-myutils)\n\nA comprehensive, production-ready Python utility library that provides essential tools for file operations, string manipulation, date/time handling, validation, and AI integrations. Built with modern Python practices and extensive test coverage.\n\n## \u2728 Features\n\n### \ud83d\udd27 Core Utilities\n- **File Operations**: JSON, CSV handling, directory management, file utilities\n- **String Processing**: Case conversion, cleaning, validation, formatting, pluralization  \n- **Date/Time**: Parsing, formatting, calculations, human-readable timestamps\n- **Validation**: Phone, URL, IP, email, password strength, data structure validation\n\n### \ud83e\udd16 AI & Integration Managers\n- **AI Manager**: OpenRouter API integration with request handling\n- **Database Manager**: Supabase operations with full CRUD support\n- **Sentry Manager**: Error tracking and event capture with custom context\n- **AI Embed Manager**: OpenAI embeddings with intelligent caching and rate limiting\n\n### \ud83d\udee1\ufe0f Production Ready\n- **100% Test Coverage**: 119 comprehensive tests covering all functionality\n- **Type Hints**: Full type annotation support for better IDE experience\n- **Error Handling**: Robust error handling with detailed logging\n- **Configuration**: Flexible, configuration-driven initialization\n- **Performance**: Optimized with caching and rate limiting where needed\n\n## \ud83d\ude80 Quick Start\n\n### Basic Usage\n\n```python\nfrom myutils import *\n\n# File operations\ndata = {\"name\": \"John\", \"age\": 30}\nwrite_json(data, \"user.json\")\nuser_data = read_json(\"user.json\")\n\n# String utilities\nsnake_case = camel_to_snake(\"MyVariableName\")  # \"my_variable_name\"\nclean_name = clean_filename(\"my<file>name.txt\")  # \"myfilename.txt\"\nis_valid = is_email(\"user@example.com\")  # True\n\n# Date utilities\nformatted = format_datetime(datetime.now(), \"%Y-%m-%d\")\ntime_str = time_since(datetime.now() - timedelta(hours=2))  # \"2 hours ago\"\n\n# Validation\nphone_valid = is_valid_phone(\"555-123-4567\")  # True\nstrong_pwd = is_strong_password(\"MyP@ssw0rd123\")  # True\n```\n\n## \ud83d\udcda Comprehensive Documentation\n\n### File Utilities\n\n```python\nfrom myutils.file_utils import *\n\n# JSON operations\ndata = {\"users\": [{\"name\": \"John\", \"age\": 30}]}\nwrite_json(data, \"data.json\", indent=2)\nresult = read_json(\"data.json\")\n\n# CSV operations  \ncsv_data = read_csv_as_dicts(\"users.csv\")\nfor user in csv_data:\n    print(f\"Name: {user['name']}, Age: {user['age']}\")\n\n# Directory management\nensure_dir_exists(\"logs/2024\")\nif file_exists(\"config.json\"):\n    size = get_file_size(\"config.json\")\n```\n\n### String Processing\n\n```python\nfrom myutils.string_utils import *\n\n# Case conversion\ncamel_case = snake_to_camel(\"user_name\")  # \"UserName\"\nsnake_case = camel_to_snake(\"UserName\")   # \"user_name\"\n\n# Text processing\ncleaned = remove_extra_spaces(\"  Hello    world  \")  # \"Hello world\"\ntruncated = truncate_string(\"Long text here\", 10)    # \"Long te...\"\nnumbers = extract_numbers(\"Price: $123.45\")         # [\"123\", \"45\"]\n\n# Validation & formatting\nvalid_email = is_email(\"user@domain.com\")           # True\nsafe_name = clean_filename(\"file<name>.txt\")        # \"filename.txt\"\nplural_form = plural(\"item\", 5)                     # \"items\"\n```\n\n### Date & Time Operations\n\n```python\nfrom myutils.date_utils import *\n\n# Date formatting and parsing\nnow = datetime.now()\nformatted = format_datetime(now, \"%B %d, %Y\")       # \"August 08, 2024\"\nparsed = parse_datetime(\"2024-08-08\", \"%Y-%m-%d\")\n\n# Date calculations\npast_date = days_ago(7)                              # 7 days ago\nfuture_date = days_from_now(14)                      # 14 days from now\nage = get_age_in_years(datetime(1990, 5, 15))       # Current age\n\n# Human-readable time\ntime_str = time_since(datetime.now() - timedelta(minutes=30))  # \"30 minutes ago\"\nweekend = is_weekend(datetime.now())                           # True/False\n```\n\n### Validation Functions\n\n```python\nfrom myutils.validation_utils import *\n\n# Contact validation\nphone_valid = is_valid_phone(\"(555) 123-4567\")      # True\nurl_valid = is_valid_url(\"https://example.com\")     # True\nip_valid = is_valid_ip(\"192.168.1.1\")              # True\n\n# Data validation\nnumeric = is_numeric(\"123.45\")                       # True\nin_range = is_in_range(25, 18, 65)                 # True\nnot_empty = is_not_empty(\"  content  \")            # True\nhas_keys = has_required_keys({\"name\": \"John\"}, [\"name\"])  # True\n\n# Password validation\nstrength = validate_password_strength(\"MyP@ssw0rd123\")\n# {\"min_length\": True, \"has_uppercase\": True, \"has_lowercase\": True, \n#  \"has_digit\": True, \"has_special\": True}\nstrong = is_strong_password(\"MyP@ssw0rd123\")        # True\n```\n\n## \ud83e\udd16 AI & Integration Managers\n\n### AI Manager (OpenRouter Integration)\n\n```python\nfrom myutils.ai_manager_utils import AIManager\n\nconfig = {\n    \"api_key\": \"your-openrouter-api-key\",\n    \"model\": \"google/gemini-2.0-flash-001\",\n    \"base_url\": \"https://openrouter.ai/api/v1\"\n}\n\nai = AIManager(config)\n\n# Make AI requests\nresponse = ai.request(\"chat/completions\", {\n    \"messages\": [{\"role\": \"user\", \"content\": \"Hello, AI!\"}],\n    \"max_tokens\": 100\n})\n\n# Verify connectivity\nif ai.verify_connectivity():\n    print(\"AI service is available\")\n```\n\n### Database Manager (Supabase Integration)\n\n```python\nfrom myutils.database_manager_utils import DatabaseManager\n\nconfig = {\n    \"url\": \"your-supabase-url\",\n    \"key\": \"your-supabase-key\"\n}\n\ndb = DatabaseManager(config)\n\n# CRUD operations\nuser = db.insert({\"name\": \"John\", \"email\": \"john@example.com\"}, \"users\")\nusers = db.select(\"users\", {\"active\": True})\nupdated = db.update({\"name\": \"John Doe\"}, {\"id\": user[\"id\"]}, \"users\")\ndeleted = db.delete({\"id\": user[\"id\"]}, \"users\")\n```\n\n### Sentry Manager (Error Tracking)\n\n```python\nfrom myutils.sentry_manager_utils import SentryManager\n\nconfig = {\n    \"dsn\": \"your-sentry-dsn\",\n    \"environment\": \"production\",\n    \"version\": \"1.0.0\"\n}\n\nsentry = SentryManager(config)\n\n# Capture events\nsentry.capture({\"message\": \"User login\", \"user_id\": 123}, \"info\")\nsentry.capture({\"error\": \"Database connection failed\"}, \"error\")\nsentry.capture({\"metric\": \"api_response_time\", \"value\": 250}, \"performance\")\n\n# Verify connectivity\nif sentry.verify_connectivity():\n    print(\"Sentry tracking is active\")\n```\n\n### AI Embed Manager (OpenAI Embeddings)\n\n```python\nfrom myutils.ai_embed_manager_utils import AIEmbedManager\n\nconfig = {\n    \"api_key\": \"your-openai-api-key\",\n    \"model\": \"text-embedding-3-small\",\n    \"cache_duration\": 3600  # 1 hour cache\n}\n\nembedder = AIEmbedManager(config)\n\n# Generate embeddings (with automatic caching)\nembedding = embedder.get_embedding(\"Hello, world!\")\nprint(f\"Embedding dimensions: {len(embedding)}\")\n\n# Batch processing\nembeddings = embedder.get_embedding_batch([\n    \"First text\", \"Second text\", \"Third text\"\n])\n\n# Cache management\nstats = embedder.get_cache_stats()\nprint(f\"Cache entries: {stats['total_entries']}\")\nembedder.clear_cache()  # Clear when needed\n```\n\n## \ud83d\udd27 Advanced Usage\n\n### Configuration Management\n\nAll managers support flexible configuration:\n\n```python\n# Environment variables\nimport os\nfrom myutils import AIManager, DatabaseManager\n\nai_config = {\n    \"api_key\": os.getenv(\"OPENROUTER_API_KEY\"),\n    \"model\": os.getenv(\"AI_MODEL\", \"google/gemini-2.0-flash-001\")\n}\n\ndb_config = {\n    \"url\": os.getenv(\"SUPABASE_URL\"),\n    \"key\": os.getenv(\"SUPABASE_KEY\")\n}\n\nai = AIManager(ai_config)\ndb = DatabaseManager(db_config)\n```\n\n### Error Handling\n\n```python\nfrom myutils import *\n\ntry:\n    data = read_json(\"nonexistent.json\")\nexcept FileNotFoundError:\n    data = {\"default\": True}\n\n# Graceful degradation\nai = AIManager({\"api_key\": \"\"})  # No key provided\nif not ai.client_available:\n    print(\"AI features disabled - no API key\")\n```\n\n### Integration Example\n\n```python\nfrom myutils import *\nfrom datetime import datetime\n\n# Complete workflow example\ndef process_user_data(user_input):\n    # Validate and clean input\n    if not is_email(user_input.get('email', '')):\n        return {\"error\": \"Invalid email\"}\n    \n    # Process and format data\n    user_data = {\n        \"name\": remove_extra_spaces(user_input['name']),\n        \"email\": user_input['email'].lower().strip(),\n        \"phone\": user_input.get('phone', '').strip(),\n        \"registered\": datetime.now().isoformat(),\n        \"age\": get_age_in_years(parse_datetime(user_input['birth_date'], \"%Y-%m-%d\"))\n    }\n    \n    # Validate phone if provided\n    if user_data['phone'] and not is_valid_phone(user_data['phone']):\n        return {\"error\": \"Invalid phone number\"}\n    \n    # Save to database\n    db = DatabaseManager({\"url\": \"...\", \"key\": \"...\"})\n    result = db.insert(user_data, \"users\")\n    \n    # Log to Sentry\n    sentry = SentryManager({\"dsn\": \"...\"})\n    sentry.capture({\"message\": \"User registered\", \"user_id\": result[\"id\"]}, \"info\")\n    \n    return {\"success\": True, \"user\": result}\n```\n\n## \ud83d\udcca Testing & Quality\n\n- **119 Tests**: Comprehensive test suite covering all functionality\n- **100% Pass Rate**: All tests passing with robust error handling\n- **Type Safety**: Full type hints for better development experience  \n- **Mock Testing**: External API dependencies properly mocked\n- **Integration Tests**: End-to-end workflow testing\n- **Performance Tests**: Optimized for speed and memory usage\n\n### Running Tests\n\n```bash\n# Install development dependencies\npip install -r requirements.txt\n\n# Run all tests\npytest\n\n# Run with coverage\npytest --cov=myutils --cov-report=html\n\n# Run specific test module\npytest tests/test_string_utils.py -v\n```\n\n## \ud83d\udee0\ufe0f Requirements\n\n- **Python**: 3.10 or higher\n- **Dependencies**: requests, supabase, sentry-sdk, python-dotenv\n- **Optional**: pytest, pytest-cov, pytest-mock (for development)\n\n## \ud83e\udd1d Contributing\n\nWe welcome contributions! Please see our [Contributing Guidelines](CONTRIBUTING.md) for details.\n\n### Quick Contribution Setup\n\n```bash\n# Clone using SSH (recommended)\ngit clone git@github.com:quocln-tech/python-myutils.git\ncd python-myutils\npython -m venv venv\nsource venv/bin/activate  # On Windows: venv\\Scripts\\activate\npip install -r requirements.txt\npip install -e .\npytest  # Run tests\n```\n\n## \ud83d\udcc4 License\n\nThis project is licensed under the MIT License - see the [LICENSE](LICENSE) file for details.\n\n## \ud83c\udfc6 Why MyUtils?\n\n### \u2705 Production Ready\n- Extensively tested with 100% test coverage\n- Used in production environments\n- Robust error handling and graceful degradation\n- Type-safe with comprehensive type hints\n\n### \u26a1 Performance Optimized\n- Intelligent caching for expensive operations\n- Rate limiting to respect API constraints\n- Memory-efficient implementations\n- Async-ready architecture\n\n### \ud83d\udd27 Developer Friendly\n- Intuitive API design\n- Comprehensive documentation\n- Clear error messages\n- IDE-friendly with full type support\n\n### \ud83c\udfaf Comprehensive\n- Core utilities + AI integrations in one package\n- Consistent API patterns across all modules\n- Configuration-driven architecture\n- Mock-friendly for easy testing\n\n---\n\n**Built with \u2764\ufe0f by [quocln](https://github.com/quocln)**\n\n*Making Python development more efficient, one utility at a time.*\n",
    "bugtrack_url": null,
    "license": null,
    "summary": "A comprehensive Python utility library with AI integration, database operations, and common utilities",
    "version": "1.0.2",
    "project_urls": {
        "Bug Tracker": "https://github.com/quocln-tech/python-myutils/issues",
        "Documentation": "https://github.com/quocln-tech/python-myutils#readme",
        "Homepage": "https://github.com/quocln-tech/python-myutils",
        "Repository": "https://github.com/quocln-tech/python-myutils",
        "Source Code": "https://github.com/quocln-tech/python-myutils"
    },
    "split_keywords": [
        "utilities",
        " ai",
        " database",
        " validation",
        " file-utils",
        " string-utils",
        " openai",
        " supabase",
        " sentry"
    ],
    "urls": [
        {
            "comment_text": null,
            "digests": {
                "blake2b_256": "d7eddc407c4c28ca804575bca26762b4d674fe3dea44762e4caa1e7fbec1f4c3",
                "md5": "0261d866bb4d31af6ec1fba44da4f420",
                "sha256": "d559f791a34ba4a36cccedb946f82e0c1aee075e080416649f0c646a615afc55"
            },
            "downloads": -1,
            "filename": "python_myutils-1.0.2-py3-none-any.whl",
            "has_sig": false,
            "md5_digest": "0261d866bb4d31af6ec1fba44da4f420",
            "packagetype": "bdist_wheel",
            "python_version": "py3",
            "requires_python": ">=3.10",
            "size": 17471,
            "upload_time": "2025-08-10T05:08:18",
            "upload_time_iso_8601": "2025-08-10T05:08:18.238054Z",
            "url": "https://files.pythonhosted.org/packages/d7/ed/dc407c4c28ca804575bca26762b4d674fe3dea44762e4caa1e7fbec1f4c3/python_myutils-1.0.2-py3-none-any.whl",
            "yanked": false,
            "yanked_reason": null
        },
        {
            "comment_text": null,
            "digests": {
                "blake2b_256": "2d0a37f72b9740da8dd16a9c318184954e9c56b739ad0c02f58fd4cbfd22a94c",
                "md5": "c28fbd2ba7751bc56ecde4da1f3108d1",
                "sha256": "4625aa6d93c5490e749a9e5435eef576f8d709bb821c6841012ebe310186f77f"
            },
            "downloads": -1,
            "filename": "python_myutils-1.0.2.tar.gz",
            "has_sig": false,
            "md5_digest": "c28fbd2ba7751bc56ecde4da1f3108d1",
            "packagetype": "sdist",
            "python_version": "source",
            "requires_python": ">=3.10",
            "size": 33843,
            "upload_time": "2025-08-10T05:08:19",
            "upload_time_iso_8601": "2025-08-10T05:08:19.325457Z",
            "url": "https://files.pythonhosted.org/packages/2d/0a/37f72b9740da8dd16a9c318184954e9c56b739ad0c02f58fd4cbfd22a94c/python_myutils-1.0.2.tar.gz",
            "yanked": false,
            "yanked_reason": null
        }
    ],
    "upload_time": "2025-08-10 05:08:19",
    "github": true,
    "gitlab": false,
    "bitbucket": false,
    "codeberg": false,
    "github_user": "quocln-tech",
    "github_project": "python-myutils",
    "github_not_found": true,
    "lcname": "python-myutils"
}
        
Elapsed time: 1.72167s