bygod


Namebygod JSON
Version 3.2.0 PyPI version JSON
download
home_pageNone
SummaryA comprehensive, truly asynchronous tool for downloading Bible translations from BibleGateway.com
upload_time2025-08-11 06:51:41
maintainerNone
docs_urlNone
authorNone
requires_python>=3.8
licenseMIT
keywords bible download biblegateway async scripture religion json csv xml yaml
VCS
bugtrack_url
requirements No requirements were recorded.
Travis-CI No Travis.
coveralls test coverage No coveralls.
            # ByGoD - The Bible, By God - Bible Gateway Downloader

A comprehensive, truly asynchronous tool for downloading Bible translations from BibleGateway.com in multiple formats (JSON, CSV, YAML, XML) with genuine parallel downloads, retry mechanisms, and flexible output options.

## ๐Ÿš€ Features

- **True Async HTTP Requests**: Uses `aiohttp` for genuine parallelism, not just threading
- **Direct HTML Parsing**: Bypasses synchronous libraries to directly parse BibleGateway HTML
- **Multiple Translations**: Support for 30+ Bible translations (NIV, KJV, ESV, etc.)
- **Multiple Formats**: Output in JSON, CSV, YAML, and XML formats with consistent structure
- **Format Consistency**: Unified hierarchical organization across all output formats
- **Intelligent Rate Limiting**: Configurable concurrency with automatic rate limiting
- **Retry Mechanisms**: Exponential backoff with configurable retry attempts
- **Organized Output**: Structured directory organization by translation and format
- **Comprehensive Logging**: Colored, detailed progress tracking
- **Flexible Output Modes**: Download individual books, full Bibles, or both

## ๐Ÿ“ฆ Installation

### Option 1: Install from PyPI (Recommended)

```bash
pip install bygod
```

### Option 2: Install from Source (Using Pipenv)

1. **Clone the repository**:
   ```bash
   git clone git@github.com:Christ-Is-The-King/bygod.git
   cd bygod
   ```

2. **Install pipenv** (if not already installed):
   ```bash
   pip install pipenv
   ```

3. **Install dependencies and activate virtual environment**:
   ```bash
   pipenv install
   pipenv shell
   ```

4. **Install in development mode**:
   ```bash
   pip install -e .
   ```

5. **Run the application**:
   ```bash
   python main.py [options]
   ```

### Option 3: Install from Source (Using pip)

1. **Clone the repository**:
   ```bash
   git clone git@github.com:Christ-Is-The-King/bygod.git
   cd bygod
   ```

2. **Create a virtual environment**:
   ```bash
   python -m venv venv
   source venv/bin/activate  # On Windows: venv\Scripts\activate
   ```

3. **Install dependencies**:
   ```bash
   pip install -r requirements.txt
   ```

4. **Install in development mode**:
   ```bash
   pip install -e .
   ```

### Option 4: Build and Install Package

1. **Build the package**:
   ```bash
   python build_package.py
   ```

2. **Install the built package**:
   ```bash
   pip install dist/bygod-*.whl
   ```

## ๐ŸŽฏ Quick Start

### Basic Usage

ByGoD now uses a required positional argument to specify the operation mode:

**Download individual books (all books by default):**
```bash
python main.py books -t NIV -f json
```

**Download specific books only:**
```bash
python main.py books -t NIV -b "Genesis,Exodus,Psalms" -f json
```

**Download entire Bible to a single file:**
```bash
python main.py bible -t NIV -f json
```

**Download both individual books AND entire Bible:**
```bash
python main.py bible-books -t NIV -f json
```

**Download multiple translations in multiple formats:**
```bash
python main.py books -t NIV,KJV,ESV -f json,csv,xml,yaml
```

### Advanced Usage

Download with custom concurrency and retry settings:
```bash
python main.py books \
  -t NIV,KJV \
  -f json,csv \
  -c 10 \
  --retries 5 \
  -d 3 \
  --timeout 600
```

**Operation Modes Explained:**

- **`books`**: Downloads individual book files (all 66 books by default, or use `-b` for specific books)
- **`bible`**: Downloads the entire Bible directly to a single file (most efficient for full Bible only)
- **`bible-books`**: Downloads both individual books AND assembles the full Bible (most comprehensive)

### Verbosity and Logging

Control output verbosity and error logging:

- Use `-v`, `-vv`, or `-vvv` for increasing verbosity
- Use `-q` or `--quiet` to suppress all output except errors
- Use `-e` or `--log-errors` to log errors to a file
- Use `-l` or `--log-level` to set the logging level

**Verbose mode (more detailed output):**

```
bygod -t NIV -m books -v
```

**Log errors to file:**

```
bygod -t NIV --log-errors logs/bible_errors.log
```

**Set specific log level:**

```
bygod -t NIV -ll DEBUG
```

**Combine options:**

```
bygod -t NIV -v --log-errors logs/errors.log -ll WARNING
```

---

## ๐Ÿ“‹ Sample Log Output

**Books Mode:**
```
12:15:50 - INFO - ๐Ÿš€ ByGoD
12:15:50 - INFO - ๐Ÿ“‹ Mode: books
12:15:50 - INFO - ๐Ÿ“š Translations: NIV
12:15:50 - INFO - ๐Ÿ“– Books: All books
12:15:50 - INFO - ๐Ÿ“„ Formats: json
12:15:50 - INFO - ๐Ÿ“ Output Directory: ./bibles
12:15:50 - INFO - โšก Concurrency: 5 concurrent requests
12:15:50 - INFO - ๐Ÿ”„ Retries: 3 (delay: 2s)
12:15:50 - INFO - โฑ๏ธ Timeout: 300s
12:15:50 - INFO - ๐Ÿ“– Processing NIV
```

**Bible Mode (Assembly):**
```
12:15:50 - INFO - ๐Ÿš€ ByGoD
12:15:50 - INFO - ๐Ÿ“‹ Mode: bible
12:15:50 - INFO - ๐Ÿ“š Translations: NIV
12:15:50 - INFO - ๐Ÿ“– Books: All books
12:15:50 - INFO - ๐Ÿ“„ Formats: json
12:15:50 - INFO - ๐Ÿ“ Output Directory: ./bibles
12:15:50 - INFO - โšก Concurrency: 5 concurrent requests
12:15:50 - INFO - ๐Ÿ”„ Retries: 3 (delay: 2s)
12:15:50 - INFO - โฑ๏ธ Timeout: 300s
12:15:50 - INFO - ๐Ÿ“– Processing NIV
12:15:51 - INFO - ๐Ÿ“š Assembling full Bible for NIV
12:15:51 - INFO - ๐Ÿ” Checking for existing book files in ./bibles/NIV/books
12:15:52 - INFO - ๐ŸŽ‰ All 66 books found locally - no downloads needed!
12:15:52 - INFO - ๐Ÿ’พ Saving full Bible in 1 format(s): json
12:15:53 - INFO - ๐ŸŽฏ Completed full Bible assembly for NIV in 2.45s (reused 66 books, downloaded 0 books)
```

## ๐Ÿ“‹ Command Line Options

| Option | Description | Default |
|--------|-------------|---------|
| `bygod` | **Required**: Operation mode (books, bible, bible-books) | None |
| `-t, --translations` | Comma-separated list of Bible translations | `NIV` |
| `-b, --books` | Comma-separated list of specific books | All books |
| `-f, --formats` | Output formats: json, csv, xml, yaml | `json` |
| `-o, --output` | Directory to save downloaded Bibles | `./bibles` |
| `--combined` | Generate combined file for multiple translations | `False` |
| `-c, --concurrency` | Maximum concurrent requests | `10` |
| `--retries` | Maximum retry attempts | `3` |
| `-d, --delay` | Delay between retries (seconds) | `2` |
| `--timeout` | Request timeout (seconds) | `300` |
| `-v, --verbose` | Increase verbosity level (-v: INFO, -vv: DEBUG, -vvv: TRACE) | `0` |
| `-q, --quiet` | Suppress all output except errors | `False` |
| `-ll, --log-level` | Set logging level (DEBUG, INFO, WARNING, ERROR, CRITICAL) | `INFO` |
| `--log-errors` | Log errors to specified file | `None` |
| `-dr, --dry-run` | Show what would be downloaded without downloading | `False` |
| `-r, --resume` | Resume interrupted downloads by skipping existing files | `False` |
| `--force` | Force re-download even if files already exist | `False` |

**Operation Modes:**

- **`books`**: Download individual book files (all 66 books by default, or use `-b` for specific books)
- **`bible`**: Download the entire Bible directly to a single file (most efficient for full Bible only)
- **`bible-books`**: Download both individual books AND assemble the full Bible (most comprehensive)

## ๐Ÿ“š Supported Translations

The downloader supports 32 Bible translations:

- **AMP** - Amplified Bible
- **ASV** - American Standard Version
- **AKJV** - Authorized King James Version
- **BRG** - BRG Bible
- **CSB** - Christian Standard Bible
- **EHV** - Evangelical Heritage Version
- **ESV** - English Standard Version
- **ESVUK** - English Standard Version UK
- **GNV** - Geneva Bible
- **GW** - God's Word Translation
- **ISV** - International Standard Version
- **JUB** - Jubilee Bible
- **KJV** - King James Version
- **KJ21** - 21st Century King James Version
- **LEB** - Lexham English Bible
- **LSB** - Legacy Standard Bible
- **MEV** - Modern English Version
- **NASB** - New American Standard Bible
- **NASB1995** - New American Standard Bible 1995
- **NET** - New English Translation
- **NIV** - New International Version
- **NIVUK** - New International Version UK
- **NKJV** - New King James Version
- **NLT** - New Living Translation
- **NLV** - New Life Version
- **NMB** - New Matthew Bible (New Testament only)
- **NOG** - Names of God Bible
- **NRSV** - New Revised Standard Version
- **NRSVUE** - New Revised Standard Version Updated Edition
- **RSV** - Revised Standard Version
- **WEB** - World English Bible
- **YLT** - Young's Literal Translation

## ๐Ÿ“ Output Structure

The downloader creates a well-organized directory structure with consistent formatting across all output formats:

### Format Consistency

All output formats (JSON, YAML, XML, CSV) maintain consistent structure and metadata:

- **Hierarchical Organization**: `language_abbr -> translation_abbr -> book -> chapter -> verse`
- **Language Abbreviations**: 2-character language codes (e.g., "EN" for English, "SP" for Spanish)
- **Metadata Section**: Includes copyright, language, ByGod version, timestamp, and translation info
- **Unified Structure**: Same data organization regardless of output format

### Example Output Structure

```json
{
  "EN": {
    "ESV": {
      "Genesis": {
        "1": {
          "1": "In the beginning, God created the heavens and the earth.",
          "2": "The earth was without form and void...",
          // ... more verses
        }
      }
    }
  },
  "meta": {
    "Copyright": "https://www.biblegateway.com/versions/esv-bible/#copy",
    "Language": "English",
    "ByGod": "3.2.0",
    "Timestamp": "2025-01-XXTXX:XX:XX.XXXXXX+00:00",
    "Translation": "ESV"
  }
}
```

The same hierarchical structure is maintained in YAML, XML, and CSV formats, ensuring data consistency across all outputs.

## โšก Performance Optimizations

ByGoD includes several performance optimizations for faster processing:

### Smart Book Reuse
- **Local File Detection**: The `bible_processor` first checks the output directory for existing book files
- **Skip Unnecessary Downloads**: If all 66 books are already present locally, no downloads are performed
- **Efficient Assembly**: Full Bible assembly from local files is significantly faster than re-downloading

### Optimized Bible Assembly
- **Mode Selection**: Choose between `books`, `bible`, or `bible-books` for optimal performance
- **`bible` Mode**: Downloads entire Bible directly (fastest for full Bible only)
- **`bible-books` Mode**: Downloads books first, then assembles (most comprehensive)
- **Parallel Processing**: Multiple books and chapters downloaded concurrently

### Performance Comparison
- **Traditional Approach**: Download all books โ†’ Assemble Bible (slower)
- **ByGoD Optimized**: Check local files โ†’ Download only missing โ†’ Assemble (faster)
- **Typical Speed Improvement**: 2-5x faster when reusing existing book files

### Directory Organization

```
bibles/
โ”œโ”€โ”€ NIV/
โ”‚   โ”œโ”€โ”€ bible.json        # Full Bible in JSON
โ”‚   โ”œโ”€โ”€ bible.csv         # Full Bible in CSV
โ”‚   โ”œโ”€โ”€ bible.xml         # Full Bible in XML
โ”‚   โ”œโ”€โ”€ bible.yml         # Full Bible in YAML
โ”‚   โ””โ”€โ”€ books/
โ”‚       โ”œโ”€โ”€ Genesis.json  # Individual book in JSON
โ”‚       โ”œโ”€โ”€ Genesis.csv   # Individual book in CSV
โ”‚       โ”œโ”€โ”€ Genesis.xml   # Individual book in XML
โ”‚       โ”œโ”€โ”€ Genesis.yml   # Individual book in YAML
โ”‚       โ””โ”€โ”€ ...
โ”œโ”€โ”€ KJV/
โ”‚   โ”œโ”€โ”€ bible.json
โ”‚   โ”œโ”€โ”€ bible.csv
โ”‚   โ””โ”€โ”€ books/
โ”‚       โ””โ”€โ”€ ...
โ””โ”€โ”€ ...
```

## ๐Ÿ—๏ธ Project Structure

The project has been refactored into a clean, modular structure:

```
bible-gateway-downloader/
โ”œโ”€โ”€ main.py                    # Main entry point
โ”œโ”€โ”€ src/                       # Source code package
โ”‚   โ”œโ”€โ”€ __init__.py
โ”‚   โ”œโ”€โ”€ constants/             # Bible translations and books data
โ”‚   โ”‚   โ”œโ”€โ”€ translations.py    # BIBLE_TRANSLATIONS dictionary
โ”‚   โ”‚   โ”œโ”€โ”€ books.py          # BOOKS list
โ”‚   โ”‚   โ”œโ”€โ”€ chapters.py       # Chapter counts
โ”‚   โ”‚   โ””โ”€โ”€ cli.py            # CLI constants
โ”‚   โ”œโ”€โ”€ core/                  # Core downloader functionality
โ”‚   โ”‚   โ””โ”€โ”€ downloader.py      # AsyncBibleDownloader class
โ”‚   โ”œโ”€โ”€ utils/                 # Utility functions
โ”‚   โ”‚   โ”œโ”€โ”€ formatting.py      # Duration and number formatting
โ”‚   โ”‚   โ””โ”€โ”€ logging.py         # Logging setup and configuration
โ”‚   โ”œโ”€โ”€ cli/                   # Command line interface
โ”‚   โ”‚   โ””โ”€โ”€ parser.py          # Argument parsing and validation
โ”‚   โ”œโ”€โ”€ processors/            # Processing logic
โ”‚   โ”‚   โ”œโ”€โ”€ bible.py # Bible download processing
โ”‚   โ”‚   โ””โ”€โ”€ translations.py # Master file processing
โ”‚   โ”œโ”€โ”€ formatters/            # Output format handlers
โ”‚   โ”‚   โ”œโ”€โ”€ json.py           # JSON formatting
โ”‚   โ”‚   โ”œโ”€โ”€ csv.py            # CSV formatting
โ”‚   โ”‚   โ”œโ”€โ”€ xml.py            # XML formatting
โ”‚   โ”‚   โ””โ”€โ”€ yaml.py           # YAML formatting
โ”‚   โ””โ”€โ”€ tests/                 # Test suite
โ”‚       โ”œโ”€โ”€ test_constants.py  # Constants tests
โ”‚       โ”œโ”€โ”€ test_core.py       # Core functionality tests
โ”‚       โ””โ”€โ”€ test_utils.py      # Utility tests
โ”œโ”€โ”€ pyproject.toml             # Project configuration
โ”œโ”€โ”€ README.md                  # This file
โ””โ”€โ”€ ... (other files)
```

## ๐Ÿ”ง Technical Details

### Code Quality Tools

The project includes a comprehensive code quality checking script:

```bash
# Run all quality checks
./scripts/code-checker.sh --all

# Run specific checks
./scripts/code-checker.sh --format    # Black + isort
./scripts/code-checker.sh --lint      # Flake8 + Pylint  
./scripts/code-checker.sh --type      # MyPy type checking
./scripts/code-checker.sh --security  # Bandit + Safety
./scripts/code-checker.sh --docs      # Pydocstyle
./scripts/code-checker.sh --complexity # Vulture + Radon
```

**Current Status**:
- **Formatting**: โœ… All files properly formatted with Black and isort
- **Linting**: โš ๏ธ Some line length violations remain (mostly long strings/comments)
- **Type Checking**: โš ๏ธ Type annotations needed in some test files and utility functions
- **Security**: โœ… No critical security issues found
- **Documentation**: โœ… Comprehensive docstrings and README

### True Async Architecture

Unlike traditional threading approaches, this downloader uses:

- **`asyncio`**: Python's native async/await framework
- **`aiohttp`**: True async HTTP client for concurrent requests
- **Semaphores**: Rate limiting with configurable concurrency
- **`asyncio.gather()`**: Parallel execution of multiple downloads

### HTML Parsing

The downloader directly parses BibleGateway HTML using:

- **BeautifulSoup**: HTML parsing and navigation
- **CSS Selectors**: Multiple fallback selectors for verse extraction
- **Regex Patterns**: Chapter discovery and verse number detection

### Modular Architecture

The codebase has been refactored into a clean, modular structure:

- **Separation of Concerns**: Each module has a specific responsibility
- **Maintainability**: Easy to understand and modify individual components
- **Testability**: Each module can be tested independently
- **Reusability**: Core downloader can be imported and used in other projects
- **Code Quality**: Comprehensive linting and formatting standards

### Code Quality Standards

The project maintains high code quality through automated tools:

- **Formatting**: Black for consistent code style, isort for import organization
- **Linting**: Flake8 for style guide enforcement, Pylint for code analysis
- **Type Checking**: MyPy for static type analysis
- **Security**: Bandit for security vulnerability detection, Safety for dependency scanning
- **Documentation**: Pydocstyle for docstring standards
- **Complexity**: Vulture for dead code detection, Radon for complexity analysis

All code is automatically formatted and follows PEP 8 standards.

### Error Handling

- **Exponential Backoff**: Intelligent retry with increasing delays
- **Rate Limit Detection**: Automatic handling of 429 responses
- **Graceful Degradation**: Continues processing even if some downloads fail
- **Detailed Logging**: Comprehensive error reporting and progress tracking

## ๐Ÿงช Testing

### Development Environment

The project uses **pipenv** for dependency management:

```bash
# Install dependencies
pipenv install --dev

# Activate virtual environment
pipenv shell

# Run tests
pipenv run pytest src/tests/ -v

# Run code quality checks
pipenv run black src/ main.py
pipenv run isort src/ main.py
pipenv run flake8 src/ main.py
pipenv run mypy src/ main.py
```

### Test Results

Run the test suite to verify functionality:

```bash
# Using pipenv
pipenv run python -m pytest src/tests/ -v

# Run specific test categories
pipenv run python -m pytest src/tests/test_constants.py -v
pipenv run python -m pytest src/tests/test_utils.py -v
pipenv run python -m pytest src/tests/test_core.py -v

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

The test suite includes:
- **Core Functionality**: Downloader initialization, context management, request handling
- **Constants Validation**: Bible translations, books, and chapter counts
- **Utilities**: Formatting functions and logging setup
- **Integration Tests**: End-to-end download scenarios

### Test Results
- **47 tests passed** โœ…
- **1 test skipped** โญ๏ธ (complex async mocking)
- **0 tests failed** โŒ
- **Clean test suite**: Removed problematic network simulation tests

### Code Quality Status

The project maintains high code quality standards with automated tools:

- **โœ… Formatting**: Black (88 char line length) + isort for import organization
- **โš ๏ธ Linting**: Flake8 shows some line length violations (mostly long strings/comments that can't be auto-fixed)
- **โš ๏ธ Type Checking**: MyPy shows type annotation gaps (mostly in test files and some utility functions)
- **โœ… Security**: Bandit shows low-risk issues (mostly try-except-pass patterns for cleanup)
- **โœ… Import/Export**: Clean import structure with no undefined variables or import errors

**Note**: Some line length violations remain due to long strings, comments, or URLs that cannot be easily reformatted. These are mostly cosmetic and don't affect functionality.

## ๐Ÿ“Š Performance

The true async architecture provides significant performance improvements:

- **Genuine Parallelism**: Multiple HTTP requests execute simultaneously
- **Efficient Resource Usage**: No thread overhead, uses event loop
- **Scalable Concurrency**: Configurable rate limits prevent server overload
- **Memory Efficient**: Streams responses without loading entire files into memory

## ๐Ÿค Contributing

1. Fork the repository
2. Create a feature branch
3. Install dependencies using pipenv:
   ```bash
   pipenv install
   pipenv install --dev
   ```
4. Make your changes
5. Add tests for new functionality
6. Ensure all tests pass:
   ```bash
   pipenv run python tests.py
   ```
7. Run the linter to ensure code quality:
   ```bash
   # Run all code quality checks
   ./scripts/code-checker.sh --all
   
   # Or run specific checks
   ./scripts/code-checker.sh --format  # Black + isort
   ./scripts/code-checker.sh --lint    # Flake8 + Pylint
   ./scripts/code-checker.sh --type    # MyPy type checking
   ./scripts/code-checker.sh --security # Bandit + Safety
   ```
8. Submit a pull request

## ๐Ÿ“„ License

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

## ๐Ÿ™ Acknowledgments

- BibleGateway.com for providing Bible content
- The Python async community for excellent tools and documentation
- Contributors and users who provide feedback and improvements

## ๐Ÿ†˜ Troubleshooting

### Common Issues

**Rate Limiting**: If you encounter 429 errors, reduce the `--concurrency` value.

**Timeout Errors**: Increase the `--timeout` value for slower connections.

**Missing Verses**: Some translations may have different HTML structures. The parser includes multiple fallback methods.

**Memory Usage**: For large downloads, consider downloading fewer books at once or using a lower rate limit.

### Getting Help

- Check the logs for detailed error messages
- Try with a single translation and book first
- Ensure your internet connection is stable
- Verify that BibleGateway.com is accessible from your location 

            

Raw data

            {
    "_id": null,
    "home_page": null,
    "name": "bygod",
    "maintainer": null,
    "docs_url": null,
    "requires_python": ">=3.8",
    "maintainer_email": "ByGoD Team <ByGoD@rapdirabbit.software>",
    "keywords": "bible, download, biblegateway, async, scripture, religion, json, csv, xml, yaml",
    "author": null,
    "author_email": "ByGoD Team <ByGoD@rapdirabbit.software>",
    "download_url": "https://files.pythonhosted.org/packages/ee/57/d178954537c9b2504106fc9cb8be88cd190319bb6bb177934b1e4c352637/bygod-3.2.0.tar.gz",
    "platform": null,
    "description": "# ByGoD - The Bible, By God - Bible Gateway Downloader\n\nA comprehensive, truly asynchronous tool for downloading Bible translations from BibleGateway.com in multiple formats (JSON, CSV, YAML, XML) with genuine parallel downloads, retry mechanisms, and flexible output options.\n\n## \ud83d\ude80 Features\n\n- **True Async HTTP Requests**: Uses `aiohttp` for genuine parallelism, not just threading\n- **Direct HTML Parsing**: Bypasses synchronous libraries to directly parse BibleGateway HTML\n- **Multiple Translations**: Support for 30+ Bible translations (NIV, KJV, ESV, etc.)\n- **Multiple Formats**: Output in JSON, CSV, YAML, and XML formats with consistent structure\n- **Format Consistency**: Unified hierarchical organization across all output formats\n- **Intelligent Rate Limiting**: Configurable concurrency with automatic rate limiting\n- **Retry Mechanisms**: Exponential backoff with configurable retry attempts\n- **Organized Output**: Structured directory organization by translation and format\n- **Comprehensive Logging**: Colored, detailed progress tracking\n- **Flexible Output Modes**: Download individual books, full Bibles, or both\n\n## \ud83d\udce6 Installation\n\n### Option 1: Install from PyPI (Recommended)\n\n```bash\npip install bygod\n```\n\n### Option 2: Install from Source (Using Pipenv)\n\n1. **Clone the repository**:\n   ```bash\n   git clone git@github.com:Christ-Is-The-King/bygod.git\n   cd bygod\n   ```\n\n2. **Install pipenv** (if not already installed):\n   ```bash\n   pip install pipenv\n   ```\n\n3. **Install dependencies and activate virtual environment**:\n   ```bash\n   pipenv install\n   pipenv shell\n   ```\n\n4. **Install in development mode**:\n   ```bash\n   pip install -e .\n   ```\n\n5. **Run the application**:\n   ```bash\n   python main.py [options]\n   ```\n\n### Option 3: Install from Source (Using pip)\n\n1. **Clone the repository**:\n   ```bash\n   git clone git@github.com:Christ-Is-The-King/bygod.git\n   cd bygod\n   ```\n\n2. **Create a virtual environment**:\n   ```bash\n   python -m venv venv\n   source venv/bin/activate  # On Windows: venv\\Scripts\\activate\n   ```\n\n3. **Install dependencies**:\n   ```bash\n   pip install -r requirements.txt\n   ```\n\n4. **Install in development mode**:\n   ```bash\n   pip install -e .\n   ```\n\n### Option 4: Build and Install Package\n\n1. **Build the package**:\n   ```bash\n   python build_package.py\n   ```\n\n2. **Install the built package**:\n   ```bash\n   pip install dist/bygod-*.whl\n   ```\n\n## \ud83c\udfaf Quick Start\n\n### Basic Usage\n\nByGoD now uses a required positional argument to specify the operation mode:\n\n**Download individual books (all books by default):**\n```bash\npython main.py books -t NIV -f json\n```\n\n**Download specific books only:**\n```bash\npython main.py books -t NIV -b \"Genesis,Exodus,Psalms\" -f json\n```\n\n**Download entire Bible to a single file:**\n```bash\npython main.py bible -t NIV -f json\n```\n\n**Download both individual books AND entire Bible:**\n```bash\npython main.py bible-books -t NIV -f json\n```\n\n**Download multiple translations in multiple formats:**\n```bash\npython main.py books -t NIV,KJV,ESV -f json,csv,xml,yaml\n```\n\n### Advanced Usage\n\nDownload with custom concurrency and retry settings:\n```bash\npython main.py books \\\n  -t NIV,KJV \\\n  -f json,csv \\\n  -c 10 \\\n  --retries 5 \\\n  -d 3 \\\n  --timeout 600\n```\n\n**Operation Modes Explained:**\n\n- **`books`**: Downloads individual book files (all 66 books by default, or use `-b` for specific books)\n- **`bible`**: Downloads the entire Bible directly to a single file (most efficient for full Bible only)\n- **`bible-books`**: Downloads both individual books AND assembles the full Bible (most comprehensive)\n\n### Verbosity and Logging\n\nControl output verbosity and error logging:\n\n- Use `-v`, `-vv`, or `-vvv` for increasing verbosity\n- Use `-q` or `--quiet` to suppress all output except errors\n- Use `-e` or `--log-errors` to log errors to a file\n- Use `-l` or `--log-level` to set the logging level\n\n**Verbose mode (more detailed output):**\n\n```\nbygod -t NIV -m books -v\n```\n\n**Log errors to file:**\n\n```\nbygod -t NIV --log-errors logs/bible_errors.log\n```\n\n**Set specific log level:**\n\n```\nbygod -t NIV -ll DEBUG\n```\n\n**Combine options:**\n\n```\nbygod -t NIV -v --log-errors logs/errors.log -ll WARNING\n```\n\n---\n\n## \ud83d\udccb Sample Log Output\n\n**Books Mode:**\n```\n12:15:50 - INFO - \ud83d\ude80 ByGoD\n12:15:50 - INFO - \ud83d\udccb Mode: books\n12:15:50 - INFO - \ud83d\udcda Translations: NIV\n12:15:50 - INFO - \ud83d\udcd6 Books: All books\n12:15:50 - INFO - \ud83d\udcc4 Formats: json\n12:15:50 - INFO - \ud83d\udcc1 Output Directory: ./bibles\n12:15:50 - INFO - \u26a1 Concurrency: 5 concurrent requests\n12:15:50 - INFO - \ud83d\udd04 Retries: 3 (delay: 2s)\n12:15:50 - INFO - \u23f1\ufe0f Timeout: 300s\n12:15:50 - INFO - \ud83d\udcd6 Processing NIV\n```\n\n**Bible Mode (Assembly):**\n```\n12:15:50 - INFO - \ud83d\ude80 ByGoD\n12:15:50 - INFO - \ud83d\udccb Mode: bible\n12:15:50 - INFO - \ud83d\udcda Translations: NIV\n12:15:50 - INFO - \ud83d\udcd6 Books: All books\n12:15:50 - INFO - \ud83d\udcc4 Formats: json\n12:15:50 - INFO - \ud83d\udcc1 Output Directory: ./bibles\n12:15:50 - INFO - \u26a1 Concurrency: 5 concurrent requests\n12:15:50 - INFO - \ud83d\udd04 Retries: 3 (delay: 2s)\n12:15:50 - INFO - \u23f1\ufe0f Timeout: 300s\n12:15:50 - INFO - \ud83d\udcd6 Processing NIV\n12:15:51 - INFO - \ud83d\udcda Assembling full Bible for NIV\n12:15:51 - INFO - \ud83d\udd0d Checking for existing book files in ./bibles/NIV/books\n12:15:52 - INFO - \ud83c\udf89 All 66 books found locally - no downloads needed!\n12:15:52 - INFO - \ud83d\udcbe Saving full Bible in 1 format(s): json\n12:15:53 - INFO - \ud83c\udfaf Completed full Bible assembly for NIV in 2.45s (reused 66 books, downloaded 0 books)\n```\n\n## \ud83d\udccb Command Line Options\n\n| Option | Description | Default |\n|--------|-------------|---------|\n| `bygod` | **Required**: Operation mode (books, bible, bible-books) | None |\n| `-t, --translations` | Comma-separated list of Bible translations | `NIV` |\n| `-b, --books` | Comma-separated list of specific books | All books |\n| `-f, --formats` | Output formats: json, csv, xml, yaml | `json` |\n| `-o, --output` | Directory to save downloaded Bibles | `./bibles` |\n| `--combined` | Generate combined file for multiple translations | `False` |\n| `-c, --concurrency` | Maximum concurrent requests | `10` |\n| `--retries` | Maximum retry attempts | `3` |\n| `-d, --delay` | Delay between retries (seconds) | `2` |\n| `--timeout` | Request timeout (seconds) | `300` |\n| `-v, --verbose` | Increase verbosity level (-v: INFO, -vv: DEBUG, -vvv: TRACE) | `0` |\n| `-q, --quiet` | Suppress all output except errors | `False` |\n| `-ll, --log-level` | Set logging level (DEBUG, INFO, WARNING, ERROR, CRITICAL) | `INFO` |\n| `--log-errors` | Log errors to specified file | `None` |\n| `-dr, --dry-run` | Show what would be downloaded without downloading | `False` |\n| `-r, --resume` | Resume interrupted downloads by skipping existing files | `False` |\n| `--force` | Force re-download even if files already exist | `False` |\n\n**Operation Modes:**\n\n- **`books`**: Download individual book files (all 66 books by default, or use `-b` for specific books)\n- **`bible`**: Download the entire Bible directly to a single file (most efficient for full Bible only)\n- **`bible-books`**: Download both individual books AND assemble the full Bible (most comprehensive)\n\n## \ud83d\udcda Supported Translations\n\nThe downloader supports 32 Bible translations:\n\n- **AMP** - Amplified Bible\n- **ASV** - American Standard Version\n- **AKJV** - Authorized King James Version\n- **BRG** - BRG Bible\n- **CSB** - Christian Standard Bible\n- **EHV** - Evangelical Heritage Version\n- **ESV** - English Standard Version\n- **ESVUK** - English Standard Version UK\n- **GNV** - Geneva Bible\n- **GW** - God's Word Translation\n- **ISV** - International Standard Version\n- **JUB** - Jubilee Bible\n- **KJV** - King James Version\n- **KJ21** - 21st Century King James Version\n- **LEB** - Lexham English Bible\n- **LSB** - Legacy Standard Bible\n- **MEV** - Modern English Version\n- **NASB** - New American Standard Bible\n- **NASB1995** - New American Standard Bible 1995\n- **NET** - New English Translation\n- **NIV** - New International Version\n- **NIVUK** - New International Version UK\n- **NKJV** - New King James Version\n- **NLT** - New Living Translation\n- **NLV** - New Life Version\n- **NMB** - New Matthew Bible (New Testament only)\n- **NOG** - Names of God Bible\n- **NRSV** - New Revised Standard Version\n- **NRSVUE** - New Revised Standard Version Updated Edition\n- **RSV** - Revised Standard Version\n- **WEB** - World English Bible\n- **YLT** - Young's Literal Translation\n\n## \ud83d\udcc1 Output Structure\n\nThe downloader creates a well-organized directory structure with consistent formatting across all output formats:\n\n### Format Consistency\n\nAll output formats (JSON, YAML, XML, CSV) maintain consistent structure and metadata:\n\n- **Hierarchical Organization**: `language_abbr -> translation_abbr -> book -> chapter -> verse`\n- **Language Abbreviations**: 2-character language codes (e.g., \"EN\" for English, \"SP\" for Spanish)\n- **Metadata Section**: Includes copyright, language, ByGod version, timestamp, and translation info\n- **Unified Structure**: Same data organization regardless of output format\n\n### Example Output Structure\n\n```json\n{\n  \"EN\": {\n    \"ESV\": {\n      \"Genesis\": {\n        \"1\": {\n          \"1\": \"In the beginning, God created the heavens and the earth.\",\n          \"2\": \"The earth was without form and void...\",\n          // ... more verses\n        }\n      }\n    }\n  },\n  \"meta\": {\n    \"Copyright\": \"https://www.biblegateway.com/versions/esv-bible/#copy\",\n    \"Language\": \"English\",\n    \"ByGod\": \"3.2.0\",\n    \"Timestamp\": \"2025-01-XXTXX:XX:XX.XXXXXX+00:00\",\n    \"Translation\": \"ESV\"\n  }\n}\n```\n\nThe same hierarchical structure is maintained in YAML, XML, and CSV formats, ensuring data consistency across all outputs.\n\n## \u26a1 Performance Optimizations\n\nByGoD includes several performance optimizations for faster processing:\n\n### Smart Book Reuse\n- **Local File Detection**: The `bible_processor` first checks the output directory for existing book files\n- **Skip Unnecessary Downloads**: If all 66 books are already present locally, no downloads are performed\n- **Efficient Assembly**: Full Bible assembly from local files is significantly faster than re-downloading\n\n### Optimized Bible Assembly\n- **Mode Selection**: Choose between `books`, `bible`, or `bible-books` for optimal performance\n- **`bible` Mode**: Downloads entire Bible directly (fastest for full Bible only)\n- **`bible-books` Mode**: Downloads books first, then assembles (most comprehensive)\n- **Parallel Processing**: Multiple books and chapters downloaded concurrently\n\n### Performance Comparison\n- **Traditional Approach**: Download all books \u2192 Assemble Bible (slower)\n- **ByGoD Optimized**: Check local files \u2192 Download only missing \u2192 Assemble (faster)\n- **Typical Speed Improvement**: 2-5x faster when reusing existing book files\n\n### Directory Organization\n\n```\nbibles/\n\u251c\u2500\u2500 NIV/\n\u2502   \u251c\u2500\u2500 bible.json        # Full Bible in JSON\n\u2502   \u251c\u2500\u2500 bible.csv         # Full Bible in CSV\n\u2502   \u251c\u2500\u2500 bible.xml         # Full Bible in XML\n\u2502   \u251c\u2500\u2500 bible.yml         # Full Bible in YAML\n\u2502   \u2514\u2500\u2500 books/\n\u2502       \u251c\u2500\u2500 Genesis.json  # Individual book in JSON\n\u2502       \u251c\u2500\u2500 Genesis.csv   # Individual book in CSV\n\u2502       \u251c\u2500\u2500 Genesis.xml   # Individual book in XML\n\u2502       \u251c\u2500\u2500 Genesis.yml   # Individual book in YAML\n\u2502       \u2514\u2500\u2500 ...\n\u251c\u2500\u2500 KJV/\n\u2502   \u251c\u2500\u2500 bible.json\n\u2502   \u251c\u2500\u2500 bible.csv\n\u2502   \u2514\u2500\u2500 books/\n\u2502       \u2514\u2500\u2500 ...\n\u2514\u2500\u2500 ...\n```\n\n## \ud83c\udfd7\ufe0f Project Structure\n\nThe project has been refactored into a clean, modular structure:\n\n```\nbible-gateway-downloader/\n\u251c\u2500\u2500 main.py                    # Main entry point\n\u251c\u2500\u2500 src/                       # Source code package\n\u2502   \u251c\u2500\u2500 __init__.py\n\u2502   \u251c\u2500\u2500 constants/             # Bible translations and books data\n\u2502   \u2502   \u251c\u2500\u2500 translations.py    # BIBLE_TRANSLATIONS dictionary\n\u2502   \u2502   \u251c\u2500\u2500 books.py          # BOOKS list\n\u2502   \u2502   \u251c\u2500\u2500 chapters.py       # Chapter counts\n\u2502   \u2502   \u2514\u2500\u2500 cli.py            # CLI constants\n\u2502   \u251c\u2500\u2500 core/                  # Core downloader functionality\n\u2502   \u2502   \u2514\u2500\u2500 downloader.py      # AsyncBibleDownloader class\n\u2502   \u251c\u2500\u2500 utils/                 # Utility functions\n\u2502   \u2502   \u251c\u2500\u2500 formatting.py      # Duration and number formatting\n\u2502   \u2502   \u2514\u2500\u2500 logging.py         # Logging setup and configuration\n\u2502   \u251c\u2500\u2500 cli/                   # Command line interface\n\u2502   \u2502   \u2514\u2500\u2500 parser.py          # Argument parsing and validation\n\u2502   \u251c\u2500\u2500 processors/            # Processing logic\n\u2502   \u2502   \u251c\u2500\u2500 bible.py # Bible download processing\n\u2502   \u2502   \u2514\u2500\u2500 translations.py # Master file processing\n\u2502   \u251c\u2500\u2500 formatters/            # Output format handlers\n\u2502   \u2502   \u251c\u2500\u2500 json.py           # JSON formatting\n\u2502   \u2502   \u251c\u2500\u2500 csv.py            # CSV formatting\n\u2502   \u2502   \u251c\u2500\u2500 xml.py            # XML formatting\n\u2502   \u2502   \u2514\u2500\u2500 yaml.py           # YAML formatting\n\u2502   \u2514\u2500\u2500 tests/                 # Test suite\n\u2502       \u251c\u2500\u2500 test_constants.py  # Constants tests\n\u2502       \u251c\u2500\u2500 test_core.py       # Core functionality tests\n\u2502       \u2514\u2500\u2500 test_utils.py      # Utility tests\n\u251c\u2500\u2500 pyproject.toml             # Project configuration\n\u251c\u2500\u2500 README.md                  # This file\n\u2514\u2500\u2500 ... (other files)\n```\n\n## \ud83d\udd27 Technical Details\n\n### Code Quality Tools\n\nThe project includes a comprehensive code quality checking script:\n\n```bash\n# Run all quality checks\n./scripts/code-checker.sh --all\n\n# Run specific checks\n./scripts/code-checker.sh --format    # Black + isort\n./scripts/code-checker.sh --lint      # Flake8 + Pylint  \n./scripts/code-checker.sh --type      # MyPy type checking\n./scripts/code-checker.sh --security  # Bandit + Safety\n./scripts/code-checker.sh --docs      # Pydocstyle\n./scripts/code-checker.sh --complexity # Vulture + Radon\n```\n\n**Current Status**:\n- **Formatting**: \u2705 All files properly formatted with Black and isort\n- **Linting**: \u26a0\ufe0f Some line length violations remain (mostly long strings/comments)\n- **Type Checking**: \u26a0\ufe0f Type annotations needed in some test files and utility functions\n- **Security**: \u2705 No critical security issues found\n- **Documentation**: \u2705 Comprehensive docstrings and README\n\n### True Async Architecture\n\nUnlike traditional threading approaches, this downloader uses:\n\n- **`asyncio`**: Python's native async/await framework\n- **`aiohttp`**: True async HTTP client for concurrent requests\n- **Semaphores**: Rate limiting with configurable concurrency\n- **`asyncio.gather()`**: Parallel execution of multiple downloads\n\n### HTML Parsing\n\nThe downloader directly parses BibleGateway HTML using:\n\n- **BeautifulSoup**: HTML parsing and navigation\n- **CSS Selectors**: Multiple fallback selectors for verse extraction\n- **Regex Patterns**: Chapter discovery and verse number detection\n\n### Modular Architecture\n\nThe codebase has been refactored into a clean, modular structure:\n\n- **Separation of Concerns**: Each module has a specific responsibility\n- **Maintainability**: Easy to understand and modify individual components\n- **Testability**: Each module can be tested independently\n- **Reusability**: Core downloader can be imported and used in other projects\n- **Code Quality**: Comprehensive linting and formatting standards\n\n### Code Quality Standards\n\nThe project maintains high code quality through automated tools:\n\n- **Formatting**: Black for consistent code style, isort for import organization\n- **Linting**: Flake8 for style guide enforcement, Pylint for code analysis\n- **Type Checking**: MyPy for static type analysis\n- **Security**: Bandit for security vulnerability detection, Safety for dependency scanning\n- **Documentation**: Pydocstyle for docstring standards\n- **Complexity**: Vulture for dead code detection, Radon for complexity analysis\n\nAll code is automatically formatted and follows PEP 8 standards.\n\n### Error Handling\n\n- **Exponential Backoff**: Intelligent retry with increasing delays\n- **Rate Limit Detection**: Automatic handling of 429 responses\n- **Graceful Degradation**: Continues processing even if some downloads fail\n- **Detailed Logging**: Comprehensive error reporting and progress tracking\n\n## \ud83e\uddea Testing\n\n### Development Environment\n\nThe project uses **pipenv** for dependency management:\n\n```bash\n# Install dependencies\npipenv install --dev\n\n# Activate virtual environment\npipenv shell\n\n# Run tests\npipenv run pytest src/tests/ -v\n\n# Run code quality checks\npipenv run black src/ main.py\npipenv run isort src/ main.py\npipenv run flake8 src/ main.py\npipenv run mypy src/ main.py\n```\n\n### Test Results\n\nRun the test suite to verify functionality:\n\n```bash\n# Using pipenv\npipenv run python -m pytest src/tests/ -v\n\n# Run specific test categories\npipenv run python -m pytest src/tests/test_constants.py -v\npipenv run python -m pytest src/tests/test_utils.py -v\npipenv run python -m pytest src/tests/test_core.py -v\n\n# Run with coverage\npipenv run python -m pytest src/tests/ --cov=src --cov-report=html\n```\n\nThe test suite includes:\n- **Core Functionality**: Downloader initialization, context management, request handling\n- **Constants Validation**: Bible translations, books, and chapter counts\n- **Utilities**: Formatting functions and logging setup\n- **Integration Tests**: End-to-end download scenarios\n\n### Test Results\n- **47 tests passed** \u2705\n- **1 test skipped** \u23ed\ufe0f (complex async mocking)\n- **0 tests failed** \u274c\n- **Clean test suite**: Removed problematic network simulation tests\n\n### Code Quality Status\n\nThe project maintains high code quality standards with automated tools:\n\n- **\u2705 Formatting**: Black (88 char line length) + isort for import organization\n- **\u26a0\ufe0f Linting**: Flake8 shows some line length violations (mostly long strings/comments that can't be auto-fixed)\n- **\u26a0\ufe0f Type Checking**: MyPy shows type annotation gaps (mostly in test files and some utility functions)\n- **\u2705 Security**: Bandit shows low-risk issues (mostly try-except-pass patterns for cleanup)\n- **\u2705 Import/Export**: Clean import structure with no undefined variables or import errors\n\n**Note**: Some line length violations remain due to long strings, comments, or URLs that cannot be easily reformatted. These are mostly cosmetic and don't affect functionality.\n\n## \ud83d\udcca Performance\n\nThe true async architecture provides significant performance improvements:\n\n- **Genuine Parallelism**: Multiple HTTP requests execute simultaneously\n- **Efficient Resource Usage**: No thread overhead, uses event loop\n- **Scalable Concurrency**: Configurable rate limits prevent server overload\n- **Memory Efficient**: Streams responses without loading entire files into memory\n\n## \ud83e\udd1d Contributing\n\n1. Fork the repository\n2. Create a feature branch\n3. Install dependencies using pipenv:\n   ```bash\n   pipenv install\n   pipenv install --dev\n   ```\n4. Make your changes\n5. Add tests for new functionality\n6. Ensure all tests pass:\n   ```bash\n   pipenv run python tests.py\n   ```\n7. Run the linter to ensure code quality:\n   ```bash\n   # Run all code quality checks\n   ./scripts/code-checker.sh --all\n   \n   # Or run specific checks\n   ./scripts/code-checker.sh --format  # Black + isort\n   ./scripts/code-checker.sh --lint    # Flake8 + Pylint\n   ./scripts/code-checker.sh --type    # MyPy type checking\n   ./scripts/code-checker.sh --security # Bandit + Safety\n   ```\n8. Submit a pull request\n\n## \ud83d\udcc4 License\n\nThis project is licensed under the MIT License - see the LICENSE file for details.\n\n## \ud83d\ude4f Acknowledgments\n\n- BibleGateway.com for providing Bible content\n- The Python async community for excellent tools and documentation\n- Contributors and users who provide feedback and improvements\n\n## \ud83c\udd98 Troubleshooting\n\n### Common Issues\n\n**Rate Limiting**: If you encounter 429 errors, reduce the `--concurrency` value.\n\n**Timeout Errors**: Increase the `--timeout` value for slower connections.\n\n**Missing Verses**: Some translations may have different HTML structures. The parser includes multiple fallback methods.\n\n**Memory Usage**: For large downloads, consider downloading fewer books at once or using a lower rate limit.\n\n### Getting Help\n\n- Check the logs for detailed error messages\n- Try with a single translation and book first\n- Ensure your internet connection is stable\n- Verify that BibleGateway.com is accessible from your location \n",
    "bugtrack_url": null,
    "license": "MIT",
    "summary": "A comprehensive, truly asynchronous tool for downloading Bible translations from BibleGateway.com",
    "version": "3.2.0",
    "project_urls": {
        "Bug Tracker": "https://github.com/Christ-Is-The-King/bygod/issues",
        "Documentation": "https://github.com/Christ-Is-The-King/bygod#readme",
        "Homepage": "https://github.com/Christ-Is-The-King/bygod",
        "Repository": "https://github.com/Christ-Is-The-King/bygod"
    },
    "split_keywords": [
        "bible",
        " download",
        " biblegateway",
        " async",
        " scripture",
        " religion",
        " json",
        " csv",
        " xml",
        " yaml"
    ],
    "urls": [
        {
            "comment_text": null,
            "digests": {
                "blake2b_256": "22af7af31d848783beb0ae5334a60370a23ed94a70e707c92ec636fd513d48d3",
                "md5": "ee02b284b042d9c261c9ed0d29cd89d1",
                "sha256": "c035cee863ac7d0af03ab77be77d0f7b7f8683709e3a7e08ce3aa7e665eb65c1"
            },
            "downloads": -1,
            "filename": "bygod-3.2.0-py3-none-any.whl",
            "has_sig": false,
            "md5_digest": "ee02b284b042d9c261c9ed0d29cd89d1",
            "packagetype": "bdist_wheel",
            "python_version": "py3",
            "requires_python": ">=3.8",
            "size": 49465,
            "upload_time": "2025-08-11T06:51:40",
            "upload_time_iso_8601": "2025-08-11T06:51:40.069744Z",
            "url": "https://files.pythonhosted.org/packages/22/af/7af31d848783beb0ae5334a60370a23ed94a70e707c92ec636fd513d48d3/bygod-3.2.0-py3-none-any.whl",
            "yanked": false,
            "yanked_reason": null
        },
        {
            "comment_text": null,
            "digests": {
                "blake2b_256": "ee57d178954537c9b2504106fc9cb8be88cd190319bb6bb177934b1e4c352637",
                "md5": "2da9f10ad46d7f14153e426d102263dc",
                "sha256": "6ab2c428c86899296d33602aea9a139e0cec92d5620f89fef0804a9cf5f0280e"
            },
            "downloads": -1,
            "filename": "bygod-3.2.0.tar.gz",
            "has_sig": false,
            "md5_digest": "2da9f10ad46d7f14153e426d102263dc",
            "packagetype": "sdist",
            "python_version": "source",
            "requires_python": ">=3.8",
            "size": 40214,
            "upload_time": "2025-08-11T06:51:41",
            "upload_time_iso_8601": "2025-08-11T06:51:41.085287Z",
            "url": "https://files.pythonhosted.org/packages/ee/57/d178954537c9b2504106fc9cb8be88cd190319bb6bb177934b1e4c352637/bygod-3.2.0.tar.gz",
            "yanked": false,
            "yanked_reason": null
        }
    ],
    "upload_time": "2025-08-11 06:51:41",
    "github": true,
    "gitlab": false,
    "bitbucket": false,
    "codeberg": false,
    "github_user": "Christ-Is-The-King",
    "github_project": "bygod",
    "travis_ci": false,
    "coveralls": false,
    "github_actions": false,
    "lcname": "bygod"
}
        
Elapsed time: 4.23609s