Skip to main content

A powerful and flexible Python library for runtime type validation using type hints and custom type specifications. Available for Classes, Functions (lambda included), and Instances

Project description

Python-Type Validation Library

Una biblioteca completa de validación de tipos para Python que proporciona herramientas avanzadas para validar tipos de datos de forma eficiente y con mensajes de error detallados.

Características Principales

  • 🚀 Validación ultra-rápida con cache optimizado
  • 📦 Procesamiento en batch con paralelización automática
  • 🔧 Conversión automática de tipos
  • 📊 Validación de esquemas para diccionarios
  • 🎯 Decoradores de validación para funciones síncronas y asíncronas
  • 🏗️ Clases Strict al estilo TypeScript
  • 🔄 Soporte para dataclasses con validación automática
  • 📝 Mensajes de error detallados con información de debugging

Instalación

# Simplemente copia el código en tu proyecto
from python_type import *

Ejemplos de Uso

1. Validación Básica de Tipos

from python_type import check_type

# Validación simple
result = check_type(42, int)  # Retorna 42
result = check_type("hello", str)  # Retorna "hello"

# Conversión automática
result = check_type("42", int)  # Convierte y retorna 42
result = check_type([1, 2, 3], tuple)  # Convierte y retorna (1, 2, 3)

2. Validación de Tipos Genéricos

from typing import List, Dict, Union

# Listas tipadas
numbers = check_type([1, 2, 3], List[int])
mixed_list = check_type(["1", "2", "3"], List[int])  # Convierte strings a ints

# Diccionarios tipados
data = check_type({"a": 1, "b": 2}, Dict[str, int])

# Tipos Union
value = check_type(42, Union[int, str])  # Acepta int o str

3. Validación en Batch (Alto Rendimiento)

from python_type import batch_check_type

# Validar miles de elementos en paralelo
items = [1, 2, 3, "4", "5"] * 10000
result = batch_check_type(items, int, auto_convert=True)

print(f"Procesados: {result.total_processed}")
print(f"Exitosos: {len(result.successful)}")
print(f"Fallidos: {len(result.failed)}")
print(f"Tasa de éxito: {result.success_rate:.2%}")

4. Validación de Esquemas

from python_type import batch_validate_schema

# Definir esquema
schema = {
    "name": str,
    "age": int,
    "email": str,
    "tags": List[str]
}

# Validar datos
data = [
    {"name": "Juan", "age": 25, "email": "juan@example.com", "tags": ["dev", "python"]},
    {"name": "María", "age": "30", "email": "maria@example.com", "tags": ["design"]},
]

result = batch_validate_schema(data, schema, auto_convert=True)

5. Decorador de Validación para Funciones

from python_type import validate_data

@validate_data()
def calculate_total(items: List[int], tax_rate: float = 0.1) -> float:
    subtotal = sum(items)
    return subtotal * (1 + tax_rate)

# Uso normal
total = calculate_total([100, 200, 300], 0.15)

# Conversión automática
total = calculate_total(["100", "200", "300"], "0.15")  # Convierte strings

6. Validación de Funciones Asíncronas

import asyncio
from python_type import validate_data

@validate_data()
async def fetch_user_data(user_id: int, include_profile: bool = True) -> Dict[str, Any]:
    # Simulación de operación asíncrona
    await asyncio.sleep(0.1)
    return {"id": user_id, "name": f"User_{user_id}", "profile": include_profile}

# Uso
async def main():
    data = await fetch_user_data("123", "true")  # Convierte automáticamente
    print(data)

asyncio.run(main())

7. Validación de Funciones Lambda

from python_type import create_lambda_validator

# Crear validador para lambda
validator = create_lambda_validator({'x': int, 'y': int}, return_type=int)

# Aplicar a función lambda
add = validator(lambda x, y: x + y)

result = add("10", "20")  # Convierte strings a ints, retorna 30

8. Clases Strict (Estilo TypeScript)

from type_validation import Strict

class User(Strict):
    name = str
    age = int
    email = str
    tags = List[str]

# Crear instancia
user = User(
    name="Juan Pérez",
    age=30,
    email="juan@example.com",
    tags=["developer", "python"]
)

# Serialización JSON
json_str = user.to_json()
print(json_str)

# Deserialización
user2 = User.from_json(json_str)

# Validación continua
user.age = "31"  # Se convierte automáticamente a int

9. Herencia en Clases Strict

class Person(Strict):
    name = str
    age = int

class Employee(Person):
    employee_id = int
    department = str
    salary = float

# Hereda validación de Person
employee = Employee(
    name="Ana García",
    age=28,
    employee_id=12345,
    department="IT",
    salary=75000.0
)

10. Dataclasses con Validación

from dataclasses import field
from python_type import validated_dataclass

@validated_dataclass
class Product:
    name: str
    price: float
    tags: List[str] = field(default_factory=list)
    in_stock: bool = True

# Validación automática
product = Product(
    name="Laptop",
    price="999.99",  # Se convierte a float
    tags=["electronics", "computers"]
)

# Validación en asignaciones posteriores
product.price = "1299.99"  # Se convierte automáticamente

11. Validación Personalizada con Tipos Custom

from python_type import create_validator

# Crear validador personalizado
custom_validator = create_validator({
    'data': Dict[str, List[int]],
    'metadata': Dict[str, Any]
})

@custom_validator
def process_complex_data(data, metadata):
    return {"processed": True, "data": data, "meta": metadata}

# Uso con conversión automática
result = process_complex_data(
    data={"numbers": ["1", "2", "3"]},  # Convierte strings a ints
    metadata={"version": "1.0"}
)

Manejo de Errores

La biblioteca proporciona mensajes de error detallados y útiles:

try:
    result = check_type("not_a_number", int)
except TypeConversionError as e:
    print(e)  # Mensaje detallado sobre el error de conversión

Ejemplo de Error Detallado

======================================================================
TYPE VALIDATION ERROR
======================================================================
📁 File: /path/to/your/file.py
📍 Line: 42
🔧 Function: calculate_total()
❌ Errors found: 1
======================================================================

💥 ERROR 1:
   Parameter: 'items' (position 1)
   ✅ Expected: List[int] (from type hint)
   ❌ Received: str
   📦 Value: str('not a list')
======================================================================

Configuración de Paralelización

# Control manual de paralelización
result = batch_check_type(
    items=large_dataset,
    target_type=MyClass,
    parallel=True,
    max_workers=8,
    chunk_size=1000
)

Serialización y Persistencia

# Guardar en archivo
user.save_to_file("user_data.json", pretty=True)

# Cargar desde archivo
user = User.load_from_file("user_data.json")

# JSON formateado
pretty_json = user.to_pretty_json()

Características Avanzadas

Cache de Conversión Ultra-Optimizado

La biblioteca utiliza un cache interno que acelera significativamente las conversiones de tipos comunes.

Detección Automática de Paralelización

El sistema detecta automáticamente cuándo es beneficioso usar procesamiento paralelo basado en:

  • Tamaño del dataset
  • Complejidad de los tipos
  • Recursos disponibles del sistema

Soporte Completo para Typing

Compatible con todas las características del módulo typing de Python:

  • List[T], Dict[K, V], Set[T], Tuple[T, ...]
  • Union[T1, T2], Optional[T]
  • Tipos anidados como Dict[str, List[int]]

Requisitos

  • Python 3.7+
  • No dependencias externas (solo biblioteca estándar)

Rendimiento

La biblioteca está optimizada para alto rendimiento:

  • Validación secuencial: ~1M operaciones/segundo
  • Validación en batch: ~10M operaciones/segundo (con paralelización)
  • Cache de conversiones para tipos comunes
  • Procesamiento paralelo automático para datasets grandes

Casos de Uso Recomendados

  • APIs REST: Validación de datos de entrada
  • Procesamiento de datos: Validación de datasets grandes
  • Microservicios: Validación de mensajes entre servicios
  • ETL Pipelines: Validación de datos durante transformaciones
  • Configuración de aplicaciones: Validación de archivos de configuración

Contribución

Esta biblioteca está diseñada para ser extensible y fácil de modificar. Los puntos principales de extensión son:

  1. Conversores personalizados: Agregar al _ULTRA_CONVERSION_CACHE
  2. Tipos complejos: Extender _validate_complex_types
  3. Mensajes de error: Personalizar _create_optimized_error_message

Licencia

MIT License

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

python_type-3.1.0.tar.gz (15.7 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

python_type-3.1.0-py3-none-any.whl (15.9 kB view details)

Uploaded Python 3

File details

Details for the file python_type-3.1.0.tar.gz.

File metadata

  • Download URL: python_type-3.1.0.tar.gz
  • Upload date:
  • Size: 15.7 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.1.0 CPython/3.13.5

File hashes

Hashes for python_type-3.1.0.tar.gz
Algorithm Hash digest
SHA256 d8314b879fd906161bffe92256b56dd791eea5d648b249aaf7eddd5422df99be
MD5 4d44db865e5ebadfc8b46e2d1455e5f9
BLAKE2b-256 4ecc47f07756db99f7086c14fe53bfc2267453df23e4375e7f9b187e7e203935

See more details on using hashes here.

File details

Details for the file python_type-3.1.0-py3-none-any.whl.

File metadata

  • Download URL: python_type-3.1.0-py3-none-any.whl
  • Upload date:
  • Size: 15.9 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.1.0 CPython/3.13.5

File hashes

Hashes for python_type-3.1.0-py3-none-any.whl
Algorithm Hash digest
SHA256 d6c7943c5b58e9c2c7d9fce0af91ccf3327ebe630555419236be0b2be8c3af20
MD5 0e66a2d7a0bb2243bc07903449d4b8ea
BLAKE2b-256 7c8599d6d67360c8f3f3721ff0718cbabb86ac36d91739ba1b253fb34a9a4c3e

See more details on using hashes here.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page