Skip to content

[Code Quality] Extract validation logic from main.py into validation.py module #518

@github-actions

Description

@github-actions

Stage 3 of the modularization plan outlined in Daily Backlog Burner discussion #493. The plan sequences extractions as config.py (#473) → api_client.py (#516) → validation.pycache.py. This issue tracks stage 3.

main.py is ~3,200 lines. Grouping all validation logic into a dedicated module makes it easier to test validators in isolation and prevents them from becoming entangled with HTTP or config concerns.

Suggested Changes

Extract the following functions from main.py into a new validation.py:

Function Line (approx.) Purpose
get_validated_input() ~495 Prompt + validate user input
_validate_config() ~608 Validate loaded config dict
validate_hostname() ~1008 Validate DNS hostname format
validate_folder_url() ~1051 Validate block-list URL
is_valid_profile_id_format() ~1093 Check profile ID pattern
validate_profile_id() ~1110 Full profile ID validation
validate_folder_id() ~1129 Full folder ID validation
is_valid_rule() ~1149 Validate a DNS rule entry
is_valid_folder_name() ~1168 Validate folder name
validate_folder_data() ~1202 Validate fetched folder JSON

Implementation steps:

  1. Create validation.py with all listed functions
  2. Update main.py to from validation import ...
  3. Update any test mocks that patch main.validate_hostname etc. to point to the new module
  4. Run uv run pytest tests/ -v to confirm no regressions

Files Affected

  • main.py — remove extracted functions, add import
  • validation.py — new file
  • tests/test_folder_validation.py, tests/test_fix_broken_validation.py — update patch() targets if needed

Success Criteria

  • ✅ All validation functions moved to validation.py
  • main.py imports from validation.py
  • ✅ All 30 test modules pass: uv run pytest tests/ -v
  • main.py line count reduced by ~200 lines

Source

Extracted from Daily Backlog Burner discussion #493 — modularization roadmap stage 3.

Priority

Medium — Builds directly on config (#473) and api_client (#516) extraction. Improves testability of individual validators and keeps main.py focused on orchestration logic.

🔍 Task mining by Discussion Task Miner - Code Quality Improvement Agent

To install this agentic workflow, run

gh aw add github/gh-aw/.github/workflows/discussion-task-miner.md@94662b1dee8ce96c876ba9f33b3ab8be32de82a4
  • expires on Mar 4, 2026, 1:40 PM UTC

Metadata

Metadata

Assignees

No one assigned

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions