# 🐍 MyUtils - Python Utility Library
[](https://www.python.org/downloads/release/python-3100/)
[](https://opensource.org/licenses/MIT)
[](https://github.com/quocln-tech/python-myutils/actions)
[](https://github.com/quocln-tech/python-myutils)
[](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[](https://www.python.org/downloads/release/python-3100/)\n[](https://opensource.org/licenses/MIT)\n[](https://github.com/quocln-tech/python-myutils/actions)\n[](https://github.com/quocln-tech/python-myutils)\n[](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"
}