Ryanhub - file viewer
filename: scripts/new_company.py
branch: main
back to repo
#!/usr/bin/env python3
"""Create a company markdown file with the next available ID."""

from __future__ import annotations

import argparse
import sys
from pathlib import Path

sys.path.insert(0, str(Path(__file__).resolve().parent))

from common import (  # noqa: E402
    COMPANIES_DIR,
    COMPANY_STATUSES,
    find_company_by_name,
    load_entities,
    next_id,
    normalize_name,
    run_sync_indexes,
    slugify,
    today_str,
    write_markdown,
    REPO_ROOT,
    die,
)


def build_body() -> str:
    return "\n".join(
        [
            "# Why target",
            "",
            "# Relevant projects to mention",
            "",
            "# Open questions",
            "",
        ]
    )


def main() -> None:
    parser = argparse.ArgumentParser(description="Create a new company file.")
    parser.add_argument("--name", required=True, help="Company name")
    parser.add_argument("--website", default="", help="Company website")
    parser.add_argument("--careers-url", default="", help="Careers page URL")
    parser.add_argument("--domain", default="", help="Business domain")
    parser.add_argument("--location", default="", help="HQ location")
    parser.add_argument("--stage", default="", help="Company stage")
    parser.add_argument(
        "--status",
        default="target",
        choices=sorted(COMPANY_STATUSES),
        help="Company status",
    )
    parser.add_argument("--priority", type=int, default=3, help="Priority 1-5")
    parser.add_argument(
        "--force",
        action="store_true",
        help="Allow duplicate company names",
    )
    args = parser.parse_args()

    if not (1 <= args.priority <= 5):
        die("priority must be between 1 and 5")

    existing = find_company_by_name(args.name)
    if existing and not args.force:
        path, meta, _ = existing
        die(f"Company already exists: {meta['id']} ({path.name}). Use --force to create anyway.")

    companies = load_entities(COMPANIES_DIR)
    company_id = next_id("CO", 4, companies)
    slug = slugify(args.name)
    path = COMPANIES_DIR / f"{company_id}-{slug}.md"
    if path.exists():
        die(f"File already exists: {path}")

    today = today_str()
    meta = {
        "id": company_id,
        "name": args.name,
        "website": args.website,
        "careers_url": args.careers_url,
        "linkedin_url": "",
        "x_url": "",
        "github_url": "",
        "location": args.location,
        "stage": args.stage,
        "domain": args.domain,
        "status": args.status,
        "priority": args.priority,
        "date_added": today,
        "date_updated": today,
        "contacts": [],
        "leads": [],
        "notes": "",
    }
    write_markdown(path, meta, build_body())
    print(f"Created {path.relative_to(REPO_ROOT)}")
    run_sync_indexes()


if __name__ == "__main__":
    main()