Skip to main content

Modernized pytopspeed library for converting TopSpeed database files to SQLite

Project description

Pytopspeed Modernized

A modernized Python library for converting Clarion TopSpeed database files (.phd, .mod, .tps, .phz) to SQLite databases and back.

Python 3.8+ License: MIT Tests

🚀 Features

  • Multi-format Support: Convert .phd, .mod, .tps, and .phz files
  • Combined Conversion: Merge multiple TopSpeed files into a single SQLite database
  • Reverse Conversion: Convert SQLite databases back to TopSpeed files
  • PHZ Support: Handle zip archives containing TopSpeed files
  • Progress Tracking: Real-time progress reporting and detailed logging
  • Data Integrity: Preserve all data types and relationships
  • CLI Interface: Easy-to-use command-line tools
  • Python API: Programmatic access to all functionality
  • Comprehensive Testing: 88+ unit tests and integration tests

📋 Supported File Formats

Format Description Support
.phd Clarion TopSpeed database files ✅ Full
.mod Clarion TopSpeed model files ✅ Full
.tps Clarion TopSpeed files ✅ Full
.phz Zip archives containing TopSpeed files ✅ Full

🛠️ Quick Start

Installation

# Clone the repository
git clone <repository-url>
cd phdwin_reader

# Create conda environment
conda create -n phdwin_reader python=3.11
conda activate phdwin_reader

# Install dependencies
pip install -r requirements.txt

Basic Usage

# Convert a single .phd file to SQLite
python pytopspeed.py convert assets/TxWells.PHD output.sqlite

# Convert multiple files to a combined database
python pytopspeed.py convert assets/TxWells.PHD assets/TxWells.mod combined.sqlite

# Convert a .phz file (zip archive)
python pytopspeed.py convert assets/TxWells.phz output.sqlite

# List contents of a .phz file
python pytopspeed.py list assets/TxWells.phz

# Convert SQLite back to TopSpeed files
python pytopspeed.py reverse input.sqlite output_directory/

Python API

from converter.sqlite_converter import SqliteConverter

# Single file conversion
converter = SqliteConverter()
results = converter.convert('input.phd', 'output.sqlite')

# Multiple file conversion
results = converter.convert_multiple(['file1.phd', 'file2.mod'], 'combined.sqlite')

# PHZ file conversion
from converter.phz_converter import PhzConverter
phz_converter = PhzConverter()
results = phz_converter.convert_phz('input.phz', 'output.sqlite')

📊 Performance

Based on testing with TxWells.PHD and TxWells.mod:

  • Single file conversion: ~1,300 records/second
  • Combined conversion: ~1,650 records/second
  • Reverse conversion: ~50,000 records/second
  • Memory efficient: Configurable batch processing
  • Progress tracking: Real-time progress reporting

🔧 Command Line Interface

Convert Command

python pytopspeed.py convert [OPTIONS] INPUT_FILES... OUTPUT_FILE

Options:

  • --batch-size BATCH_SIZE - Number of records to process in each batch (default: 1000)
  • -v, --verbose - Enable verbose logging
  • -q, --quiet - Suppress progress output

Reverse Command

python pytopspeed.py reverse [OPTIONS] INPUT_FILE OUTPUT_DIRECTORY

List Command

python pytopspeed.py list [OPTIONS] PHZ_FILE

📚 Documentation

Comprehensive documentation is available in the docs/ directory:

🧪 Testing

# Run all unit tests
python -m pytest tests/unit/ -v

# Run integration tests
python -m pytest tests/integration/ -v

# Run with coverage
python -m pytest tests/ --cov=src --cov-report=html

Test Results:

  • 88 unit tests - All passing
  • Integration tests - End-to-end conversion testing
  • Performance tests - Benchmarking and optimization
  • Error handling tests - Robust error handling validation

📖 Examples

Working examples are available in the examples/ directory:

  • Basic conversion - Single file conversion
  • Combined conversion - Multiple file conversion
  • PHZ handling - Zip archive processing
  • Reverse conversion - SQLite to TopSpeed
  • Round-trip conversion - Complete conversion cycle
  • Custom progress tracking - Advanced progress monitoring
  • Error handling - Comprehensive error handling patterns

🏗️ Architecture

TopSpeed Files → Parser → Schema Mapper → SQLite Converter → SQLite Database
     ↓              ↓           ↓              ↓
   .phd/.mod    Modernized   Type Mapping   Data Migration
   .tps/.phz    pytopspeed   Field Names    Batch Processing

Key Components

  • TopSpeed Parser - Modernized parser for reading TopSpeed files
  • Schema Mapper - Maps TopSpeed schemas to SQLite
  • SQLite Converter - Handles data migration and conversion
  • PHZ Converter - Processes zip archives containing TopSpeed files
  • Reverse Converter - Converts SQLite back to TopSpeed files
  • CLI Interface - Command-line tools for easy usage

🔄 Data Type Conversion

TopSpeed Type SQLite Type Notes
BYTE INTEGER 8-bit unsigned integer
SHORT INTEGER 16-bit signed integer
LONG INTEGER 32-bit signed integer
DATE TEXT Format: YYYY-MM-DD
TIME TEXT Format: HH:MM:SS
STRING TEXT Variable length text
DECIMAL REAL Floating point number
MEMO BLOB Binary large object
BLOB BLOB Binary large object

🎯 Key Features

Table Name Prefixing

When converting multiple files, tables are automatically prefixed to avoid conflicts:

  • .phd filesphd_ prefix (e.g., phd_OWNER, phd_CLASS)
  • .mod filesmod_ prefix (e.g., mod_DEPRECIATION, mod_MODID)
  • .tps filestps_ prefix
  • Other filesfile_N_ prefix

Column Name Sanitization

Column names are automatically sanitized for SQLite compatibility:

  • Prefix removal: TIT:PROJ_DESCRPROJ_DESCR
  • Special characters: ._
  • Numeric prefixes: 123FIELD_123FIELD
  • Reserved words: ORDERORDER_TABLE

Error Handling

  • Graceful degradation - Continue processing despite individual table errors
  • Detailed logging - Comprehensive error reporting and debugging information
  • Data preservation - Ensure data integrity even with parsing issues
  • Recovery mechanisms - Automatic handling of common issues

🤝 Contributing

We welcome contributions! Please see our Developer Documentation for:

  • Development setup instructions
  • Code style guidelines
  • Testing requirements
  • Contribution process

Development Setup

# Clone and setup development environment
git clone <repository-url>
cd phdwin_reader
conda create -n phdwin_reader_dev python=3.11
conda activate phdwin_reader_dev
pip install -r requirements.txt
pip install -e .

# Run tests
python -m pytest tests/ -v

📄 License

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

🙏 Acknowledgments

  • Based on the original pytopspeed library
  • Modernized for Python 3.11 and construct 2.10+
  • Enhanced with SQLite conversion and reverse conversion capabilities
  • Comprehensive testing and documentation

📞 Support

  • Documentation: See the docs/ directory for comprehensive guides
  • Examples: Check the examples/ directory for working code
  • Issues: Open an issue in the project repository
  • Discussions: Use the project's discussion forum for questions

Ready to convert your TopSpeed files? Start with the Installation Guide and try the examples!

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

pytopspeed_modernized-1.0.0.tar.gz (681.0 kB view details)

Uploaded Source

Built Distribution

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

pytopspeed_modernized-1.0.0-py2.py3-none-any.whl (59.1 kB view details)

Uploaded Python 2Python 3

File details

Details for the file pytopspeed_modernized-1.0.0.tar.gz.

File metadata

  • Download URL: pytopspeed_modernized-1.0.0.tar.gz
  • Upload date:
  • Size: 681.0 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.1.0 CPython/3.12.7

File hashes

Hashes for pytopspeed_modernized-1.0.0.tar.gz
Algorithm Hash digest
SHA256 92ccedca4910f17db870d35c131562a8e2e75288cfdfc765588a31aea0188543
MD5 9d8af075e849f33529a1dac7a6f72756
BLAKE2b-256 db1d601126bc5e58461b1aa3527c780b278168912321b0b41d3553ea9405b31f

See more details on using hashes here.

File details

Details for the file pytopspeed_modernized-1.0.0-py2.py3-none-any.whl.

File metadata

File hashes

Hashes for pytopspeed_modernized-1.0.0-py2.py3-none-any.whl
Algorithm Hash digest
SHA256 c57d6782a616ce2cdca84db710fb4833b30391f50e7c0546750df8f2bf504377
MD5 0f3bd339df811e74a77b8ffdadd6b9a2
BLAKE2b-256 ac512d6e9b57e77bde59e7f71164a2701c1fdff5e3f686f5f2fac8b1a199a49d

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