Validiz Python Library

A Python client library for the Validiz Email Validation API. This library provides both synchronous and asynchronous clients for interacting with the API endpoints.
Installation
pip install validiz
Requirements
Python 3.9 or higher is required. All dependencies will be installed automatically when installing the package.
Alternatively, you can install the dependencies directly from the requirements.txt file:
pip install -r requirements.txt
Features
- Both synchronous and asynchronous clients
- Email validation API
- File upload and processing
- Comprehensive error handling
- Type annotations for IDE completion
Quick Start
Synchronous Client
from validiz import Validiz, ValidizError
client = Validiz(api_key="your_api_key_here")
try:
results = client.validate_email("user@example.com")
for result in results:
print(f"Email: {result['email']}")
print(f"Is valid: {result['is_valid']}")
print(f"Status: {result['status']}")
except ValidizError as e:
print(f"API error: {e.message}")
Asynchronous Client
import asyncio
from validiz import AsyncValidiz, ValidizError
async def validate_email():
async with AsyncValidiz(api_key="your_api_key_here") as client:
try:
results = await client.validate_email("user@example.com")
for result in results:
print(f"Email: {result['email']}")
print(f"Is valid: {result['is_valid']}")
print(f"Status: {result['status']}")
except ValidizError as e:
print(f"API error: {e.message}")
asyncio.run(validate_email())
API Reference
Client Architecture
The library uses a Template Method pattern for shared functionality:
BaseClient
implements common methods like poll_file_until_complete
- Synchronous and asynchronous clients inherit from
BaseClient
and implement client-specific operations
- This architecture ensures code reuse while handling the differences between synchronous and asynchronous operations
Initialization
from validiz import Validiz
client = Validiz(
api_key="your_api_key",
api_base_url="https://api.validiz.com/v1",
timeout=30
)
from validiz import AsyncValidiz
client = AsyncValidiz(
api_key="your_api_key",
api_base_url="https://api.validiz.com/v1",
timeout=30
)
Validation Methods
Email Validation
results = client.validate_email("user@example.com")
results = client.validate_email(["user1@example.com", "user2@example.com"])
results = await client.validate_email("user@example.com")
results = await client.validate_email(["user1@example.com", "user2@example.com"])
File Operations
upload_result = client.upload_file("emails.csv")
file_id = upload_result["file_id"]
status = client.get_file_status(file_id)
if status["status"] == "completed":
output_file = client.download_file(file_id, "results.csv")
import pandas as pd
df = client.poll_file_until_complete(
file_id=file_id,
interval=5,
max_retries=60,
output_path=None,
return_dataframe=True
)
df = client.poll_file_until_complete(
file_id=file_id,
interval=5,
max_retries=60,
output_path="results.csv",
return_dataframe=True
)
file_path = client.poll_file_until_complete(
file_id=file_id,
interval=5,
max_retries=60,
output_path="results.csv",
return_dataframe=False
)
content = client.poll_file_until_complete(
file_id=file_id,
interval=5,
max_retries=60,
output_path=None,
return_dataframe=False
)
print(f"Number of validated emails: {len(df)}")
print(df.head())
upload_result = await client.upload_file("emails.csv")
file_id = upload_result["file_id"]
status = await client.get_file_status(file_id)
if status["status"] == "completed":
output_file = await client.download_file(file_id, "results.csv")
import pandas as pd
df = await client.poll_file_until_complete(
file_id=file_id,
interval=5,
max_retries=60,
output_path=None,
return_dataframe=True
)
print(f"Number of validated emails: {len(df)}")
print(df.head())
Batch Processing with Async Client
One of the major advantages of the async client is the ability to process multiple requests in parallel:
import asyncio
from validiz import AsyncValidiz
async def batch_validate():
emails = [
"user1@example.com",
"user2@example.com",
"user3@example.com",
"user4@example.com",
]
async with AsyncValidiz(api_key="your_api_key") as client:
tasks = [client.validate_email(email) for email in emails]
results = await asyncio.gather(*tasks)
for i, result in enumerate(results):
print(f"Results for {emails[i]}:")
print(result)
asyncio.run(batch_validate())
Batch File Processing with Polling
Process multiple files in parallel and wait for them to complete:
import asyncio
import pandas as pd
from validiz import AsyncValidiz
async def process_multiple_files():
files = ["file1.csv", "file2.csv", "file3.csv"]
async with AsyncValidiz(api_key="your_api_key") as client:
upload_tasks = [client.upload_file(file) for file in files]
upload_results = await asyncio.gather(*upload_tasks)
file_ids = [result["file_id"] for result in upload_results]
poll_tasks = [client.poll_file_until_complete(file_id, output_path=None) for file_id in file_ids]
dataframes = await asyncio.gather(*poll_tasks)
for i, df in enumerate(dataframes):
print(f"Results for {files[i]}:")
print(f"Number of emails: {len(df)}")
print(f"Valid emails: {df[df['is_valid'] == True].shape[0]}")
print(f"Invalid emails: {df[df['is_valid'] == False].shape[0]}")
asyncio.run(process_multiple_files())
Error Handling
The library provides a comprehensive set of exception classes for different types of errors:
from validiz import (
ValidizError,
ValidizAuthError,
ValidizRateLimitError,
ValidizValidationError,
ValidizNotFoundError,
ValidizConnectionError,
ValidizPaymentRequiredError,
ValidizServerError,
ValidizTimeoutError
)
try:
results = client.validate_email("user@example.com")
except ValidizAuthError as e:
print(f"Authentication error: {e}")
except ValidizRateLimitError as e:
print(f"Rate limit exceeded: {e}")
except ValidizPaymentRequiredError as e:
print(f"Payment required: {e}")
except ValidizConnectionError as e:
print(f"Connection error: {e}")
except ValidizServerError as e:
print(f"Server error: {e}")
except ValidizError as e:
print(f"API error (status {e.status_code}): {e}")
Error Details
All exceptions include:
message
: Human-readable error message
status_code
: HTTP status code (if applicable)
error_code
: API-specific error code (if available)
details
: Additional error details (if available)
For example:
except ValidizError as e:
print(f"Error: {e.message}")
print(f"Status Code: {e.status_code}")
print(f"Error Code: {e.error_code}")
print(f"Details: {e.details}")
Logging
The library uses Python's standard logging module. You can configure it to see what's happening:
import logging
logging.basicConfig(level=logging.INFO)
logger = logging.getLogger("validiz")
logger.setLevel(logging.DEBUG)
Examples
Check the examples
directory for more detailed examples:
sync_example.py
- Examples for the synchronous client
async_example.py
- Examples for the asynchronous client
License
This library is released under the MIT License. See the LICENSE file for more details.