Welcome to CSV2Sendy’s Documentation

CSV2Sendy

PyPI version Python Version Tests Coverage Status Documentation Status License: MIT Code Style: Mypy

A powerful CSV processor for Sendy.co with Brazilian data format support.

Documentation | GitHub Repository

🌟 Features

  • πŸ”„ Intelligent CSV Processing

    • Auto-detection of delimiters (, or ;)

    • Multiple encoding support (utf-8-sig, latin1, iso-8859-1, cp1252)

    • Smart column mapping and normalization

    • Robust error handling

  • πŸ“§ Email Validation

    • RFC-compliant email validation

    • Case normalization

    • Duplicate removal

    • Invalid email filtering

  • πŸ“± Phone Number Processing

    • Brazilian format support

    • Format standardization

    • Invalid number filtering

    • DDD (area code) validation

  • πŸ‘€ Name Processing

    • First/last name splitting

    • Proper capitalization

    • Special character handling

    • Empty name filtering

  • πŸ”’ Security

    • Secure file handling

    • Automatic file cleanup

    • Input sanitization

    • File size limits

πŸ’» Web Interface

Transform your CSV files into Sendy.co-ready formats with our intuitive web interface:

CSV2Sendy Web Interface

The web interface provides:

  • πŸ“€ Drag & drop file upload

  • πŸ”„ Automatic CSV processing

  • πŸ“‹ Column mapping

  • ✨ Data validation and cleaning

  • ⬇️ Download processed files

πŸ“¦ Installation

Using pip

pip install csv2sendy

From source

git clone https://github.com/skaisser/csv2sendy.git
cd csv2sendy
pip install -e ".[dev]"

πŸš€ Quick Start

Web Interface

# Start the web server
python -m csv2sendy.web.app

Visit http://localhost:5000 in your browser.

Command Line Interface (CLI)

# Start the web server on default port (5000)
csv2sendy

# Start the web server on a specific port
csv2sendy 3000

# Get help
csv2sendy --help

The CLI provides a convenient way to start the web interface. By default, it starts the server on port 5000, but you can specify a different port as a command-line argument.

Python API

from csv2sendy.core import CSVProcessor

# Process a CSV file
processor = CSVProcessor()
df = processor.process_file('input.csv')
df.to_csv('output.csv', index=False)

# Process CSV content directly
content = '''name,email,phone
John Doe,john@example.com,(11) 98765-4321'''
df = processor.process_file(content)

πŸ”§ Dependencies

Core dependencies (automatically installed):

  • Python >=3.9

  • pandas >=1.3.0

  • email-validator >=1.1.0

  • flask >=2.0.0

  • werkzeug >=2.0.0

Development dependencies (install with .[dev]):

  • pytest >=7.0.0

  • pytest-cov >=4.0.0

  • mypy >=1.13.0

  • types-flask >=1.1.0

  • types-werkzeug >=1.0.0

  • pandas-stubs >=2.0.0

Documentation dependencies (install with .[docs]):

  • sphinx >=7.0.0

🀝 Contributing

  1. Fork the repository

  2. Create your feature branch (git checkout -b feature/amazing-feature)

  3. Install development dependencies (pip install -e ".[dev,test,doc]")

  4. Make your changes

  5. Run tests and type checking (pytest and mypy csv2sendy)

  6. Commit your changes (git commit -m 'Add amazing feature')

  7. Push to the branch (git push origin feature/amazing-feature)

  8. Open a Pull Request

πŸ“„ License

This project is licensed under the MIT License - see the LICENSE file for details.

πŸ‘€ Author

Shirleyson Kaisser

  • GitHub: @skaisser

  • Email: skaisser@gmail.com

API Documentation

Certificates

*.pem *.key *.crt *.cer *.p12 *.pfx

Environment and config

.env .env.* *.conf config.ini

Credentials

.aws/ credentials/ credentials

Core Module

Process CSV files for Sendy compatibility.

class csv2sendy.core.processor.CSVProcessor[source]

Bases: object

Process CSV files for Sendy compatibility.

__init__() None[source]

Initialize CSVProcessor.

process_name(name: Any | None) Dict[str, str][source]

Process a name into first and last name components.

format_phone_number(phone: Any | None) str[source]

Format phone number to Brazilian format.

validate_email_address(email: Any | None) str[source]

Validate email address format.

detect_delimiter(content: str) str[source]

Detect CSV delimiter.

process_csv(content: str) DataFrame[source]

Process CSV content.

process_file(file_content: str) DataFrame[source]

Process a CSV file.

Web Module

Web application module for CSV2Sendy.

This module provides a Flask-based web interface for processing CSV files for Sendy.co. It includes routes for file upload, processing, and download with custom column mapping.

Key Features:
  • File upload with multiple encoding support

  • CSV processing with Brazilian data format support

  • Custom column mapping

  • Tag addition

  • Duplicate email removal

csv2sendy.web.app.cleanup_temp_files() None[source]

Clean up temporary files.

csv2sendy.web.app.allowed_file(filename: str) bool[source]

Check if file extension is allowed.

csv2sendy.web.app.home() str[source]

Render home page.

csv2sendy.web.app.upload_file() Tuple[Response, int][source]

Handle file upload.

csv2sendy.web.app.download_file() Response | Tuple[Response, int][source]

Download processed file with column configuration.

csv2sendy.web.app.add_header(response: Response) Response[source]

Add headers to prevent caching.

Indices and Tables