# tirandagan/fcculsloader architecture

> Architecture diagram of the GitHub repository tirandagan/fcculsloader, generated by GitDiagram from its file tree, README and a sample of source files (last updated 2026-09-26). It is an AI-made overview: check details against the source.

- Interactive diagram: https://gitdiagram.com/tirandagan/fcculsloader
- Repository: https://github.com/tirandagan/fcculsloader
- Video tour (about a minute): https://gitdiagram.com/tirandagan/fcculsloader/video

## Overview

Offline Callsign Lookup maintains a local SQLite mirror of FCC amateur-license data, with optional Canadian ISED data, and serves offline lookups through CLI and web interfaces. The main maintenance flow checks remote data, downloads and extracts it, loads country-specific records, and exposes the resulting database to search and profile views. Search supports callsign, name, and geographic filters, plus country scope. The excerpts establish the principal loader and updater links; detailed web-route wiring and some database calls are unsampled, so uncertain links are omitted.

Main entry points: [`src/modules/updater.py`](https://github.com/tirandagan/fcculsloader/blob/main/src/modules/updater.py) (Update orchestration), [`src/modules/ised_loader.py`](https://github.com/tirandagan/fcculsloader/blob/main/src/modules/ised_loader.py) (ISED data loader), [`src/modules/database.py`](https://github.com/tirandagan/fcculsloader/blob/main/src/modules/database.py) (Database operations), [`src/callsign_lookup.py`](https://github.com/tirandagan/fcculsloader/blob/main/src/callsign_lookup.py) (CLI commands)

## Diagram (Mermaid)

```mermaid
flowchart TD

subgraph group_interfaces["Lookup interfaces"]
  node_cli["CLI commands<br/>[callsign_lookup.py]"]
  node_web["Web search"]
end

subgraph group_maintenance["Data maintenance"]
  node_updater["Update orchestration<br/>[updater.py]"]
  node_downloader["File download<br/>[downloader.py]"]
  node_extractor["Archive extraction<br/>[extractor.py]"]
  node_fcc_loader["FCC data loader<br/>[loader.py]"]
  node_ised_loader["ISED data loader<br/>[ised_loader.py]"]
end

subgraph group_storage["Local data"]
  node_database["Database operations<br/>[database.py]"]
  node_sqlite[("SQLite database")]
  node_schemas["Table schemas<br/>[schemas.py]"]
end

subgraph group_sources["External sources"]
  node_fcc["FCC data"]
  node_ised["ISED data"]
end

node_cli_user(("CLI user"))
node_web_user(("Web user"))

node_cli_user -->|"runs commands"| node_cli
node_web_user -->|"searches"| node_web
node_cli -->|"queries and maintains"| node_database
node_web -->|"queries"| node_database
node_cli -->|"requests updates"| node_updater
node_updater -->|"downloads data"| node_downloader
node_downloader -->|"fetches archives"| node_fcc
node_updater -->|"extracts archives"| node_extractor
node_updater -->|"loads FCC records"| node_fcc_loader
node_fcc_loader -->|"writes records"| node_database
node_updater -->|"loads Canadian data"| node_ised_loader
node_ised_loader -->|"reads source data"| node_ised
node_ised_loader -->|"writes CA_AM"| node_sqlite
node_database -->|"queries and updates"| node_sqlite
node_schemas -->|"defines table layout"| node_ised_loader

click node_cli "https://github.com/tirandagan/fcculsloader/blob/main/src/callsign_lookup.py"
click node_web "https://github.com/tirandagan/fcculsloader/blob/main/src/callsign_lookup_web.py"
click node_updater "https://github.com/tirandagan/fcculsloader/blob/main/src/modules/updater.py"
click node_downloader "https://github.com/tirandagan/fcculsloader/blob/main/src/modules/downloader.py"
click node_extractor "https://github.com/tirandagan/fcculsloader/blob/main/src/modules/extractor.py"
click node_fcc_loader "https://github.com/tirandagan/fcculsloader/blob/main/src/modules/loader.py"
click node_ised_loader "https://github.com/tirandagan/fcculsloader/blob/main/src/modules/ised_loader.py"
click node_database "https://github.com/tirandagan/fcculsloader/blob/main/src/modules/database.py"
click node_schemas "https://github.com/tirandagan/fcculsloader/blob/main/src/modules/schemas.py"

classDef toneNeutral fill:#f8fafc,stroke:#334155,stroke-width:1.5px,color:#0f172a
classDef toneBlue fill:#dbeafe,stroke:#2563eb,stroke-width:1.5px,color:#172554
classDef toneAmber fill:#fef3c7,stroke:#d97706,stroke-width:1.5px,color:#78350f
classDef toneMint fill:#dcfce7,stroke:#16a34a,stroke-width:1.5px,color:#14532d
classDef toneRose fill:#ffe4e6,stroke:#e11d48,stroke-width:1.5px,color:#881337
classDef toneIndigo fill:#e0e7ff,stroke:#4f46e5,stroke-width:1.5px,color:#312e81
classDef toneTeal fill:#ccfbf1,stroke:#0f766e,stroke-width:1.5px,color:#134e4a
class node_cli,node_web,node_cli_user,node_web_user toneBlue
class node_updater,node_downloader,node_extractor,node_fcc_loader,node_ised_loader toneAmber
class node_database,node_sqlite,node_schemas toneMint
class node_fcc,node_ised toneRose
```

## Components

### Lookup interfaces

- [CLI commands](https://github.com/tirandagan/fcculsloader/blob/main/src/callsign_lookup.py): `src/callsign_lookup.py`
- [Web search](https://github.com/tirandagan/fcculsloader/blob/main/src/callsign_lookup_web.py): `src/callsign_lookup_web.py`

### Data maintenance

- [Update orchestration](https://github.com/tirandagan/fcculsloader/blob/main/src/modules/updater.py): `src/modules/updater.py`
- [File download](https://github.com/tirandagan/fcculsloader/blob/main/src/modules/downloader.py): `src/modules/downloader.py`
- [Archive extraction](https://github.com/tirandagan/fcculsloader/blob/main/src/modules/extractor.py): `src/modules/extractor.py`
- [FCC data loader](https://github.com/tirandagan/fcculsloader/blob/main/src/modules/loader.py): `src/modules/loader.py`
- [ISED data loader](https://github.com/tirandagan/fcculsloader/blob/main/src/modules/ised_loader.py): `src/modules/ised_loader.py`

### Local data

- [Database operations](https://github.com/tirandagan/fcculsloader/blob/main/src/modules/database.py): `src/modules/database.py`
- **SQLite database**
- [Table schemas](https://github.com/tirandagan/fcculsloader/blob/main/src/modules/schemas.py): `src/modules/schemas.py`

### External sources

- **FCC data**
- **ISED data**

### Other components

- **CLI user**
- **Web user**

## Connections

- CLI user → CLI commands: runs commands
- Web user → Web search: searches
- CLI commands → Database operations: queries and maintains
- Web search → Database operations: queries
- CLI commands → Update orchestration: requests updates
- Update orchestration → File download: downloads data
- File download → FCC data: fetches archives
- Update orchestration → Archive extraction: extracts archives
- Update orchestration → FCC data loader: loads FCC records
- FCC data loader → Database operations: writes records
- Update orchestration → ISED data loader: loads Canadian data
- ISED data loader → ISED data: reads source data
- ISED data loader → SQLite database: writes CA_AM
- Database operations → SQLite database: queries and updates
- Table schemas → ISED data loader: defines table layout
