Skip to content

Obtain professional astronomical information from the shell.

License

Notifications You must be signed in to change notification settings

inoribea/astrocli

Repository files navigation

Astro CLI πŸš€

Your gateway to cosmos β€” Query astronomical data from command line

License Python Astropy


✨ What is Astro CLI?

Astro CLI (working title: suggestions welcome!) is a modern command-line tool that provides quick access to multiple astronomical data services through the Astroquery library. It's designed for astronomers, researchers, and anyone who needs to query astronomical databases efficiently from the terminal.

17 data sources. One command. Beautiful output. Multi-language support. Extensible for future services.


🧩 Supported Data Sources

Query data from 17 different astronomical databases and services:

Service Description Command Alias
SIMBAD Basic astronomical data & object identification astrocli simbad astrocli sim
VizieR Catalog database search astrocli vizier astrocli viz
ALMA ALMA radio telescope observations astrocli alma -
ESASky Sky region visualization astrocli esasky -
Gaia ESA Gaia mission data astrocli gaia -
IRSA Infrared Science Archive astrocli irsa -
HEASARC X-ray and Gamma-ray data astrocli heasarc astrocli hea
JPL Horizons Solar System ephemerides astrocli jpl -
MAST Space Telescope Archive (HST, JWST, etc.) astrocli mast -
ADS Astrophysics literature search astrocli ads -
NED Extragalactic Database astrocli ned -
NIST Atomic spectra database astrocli nist -
NASA Exoplanet Exoplanet catalog astrocli exoplanet astrocli exo
SDSS Sloan Digital Sky Survey astrocli sdss -
ESO European Southern Observatory astrocli eso -
Splatalogue Molecular line database astrocli splatalogue astrocli spl
AAVSO VSX Variable Star Index astrocli aavso -
Fermi-LAT Gamma-ray telescope data astrocli fermi -

🌟 Key Features

  • πŸ“¦ Multi-Source Access: Query 17+ astronomical databases from a single interface
  • 🌏 Internationalized UI: Built-in support for English, Chinese (Simplified), and Japanese
  • πŸ“Š Rich Output: Beautifully formatted tables with support for exporting to CSV, ECSV, FITS, and more
  • ⚑ Smart Defaults: Sensible defaults with extensive customization options
  • πŸ” Service Health: Built-in connectivity testing (--ping) and field validation (--field)
  • πŸ§‘β€πŸ’» Shell Completion: Auto-completion support for Bash, Zsh, and Fish
  • 🌌 Extensible: Easy to add new astronomical data services

πŸ“¦ Installation

Quick Start (via npx/pnpm)

Requires: Node.js β‰₯18 and Python 3.11+

# Using pnpm (recommended)
pnpm astrocli --help

# Using npx
npx astrocli --help

# Example: Query SIMBAD for M31
pnpm astrocli simbad object "M31"

Environment Variables

  • AC_PYTHON - Specify Python interpreter path
  • AC_VENV_DIR - Custom virtual environment cache directory (default: ~/.cache/astrocli)
  • AC_FORCE_INSTALL=1 - Force reinstall/upgrade Python dependencies
  • AC_DEBUG - Enable debug mode
  • AC_LANG - Set default language (en/zh/ja)

Install from Source

git clone https://github.com/yourusername/astrocli.git
cd astrocli
pip install -e .

πŸ“š Usage

View All Available Commands

# Show all available modules and commands
astrocli --help

# Show help for a specific module
astrocli <module> --help

Query Examples

1. Query SIMBAD for an object

astrocli simbad object "M31"
astrocli simbad object "Crab Nebula" --show-all-cols

2. Search VizieR catalogs

# Find catalogs by keywords
astrocli vizier find-catalogs --keyword photometry --keyword galaxy

# Query a specific catalog
astrocli vizier object "M31" --radius 0.1 --catalog "I/261/gaiadr3"

3. Query AAVSO Variable Star Index (NEW!)

# Query a variable star by name
astrocli aavso object "SS Cyg"

# Search variable stars in a sky region
astrocli aavso region 196.421 18.018 --radius 0.5

# Get results in JSON format
astrocli aavso object "T CrB" --format json

4. Query Fermi-LAT Data (NEW!)

# Query Fermi data for a target
astrocli fermi object "Crab Nebula" --energy "1000,100000" --dates "2020-01-01 00:00:00, 2020-01-02 00:00:00"

# Clear Fermi cache
astrocli fermi clear-cache

5. Search ADS literature

astrocli ads search --title "exoplanet detection"
astrocli ads bibcode "2023A&A...555..959W"

🌐 Multi-Language Support

Change output language on-the-fly:

astrocli --lang zh simbad object "M31"    # Chinese
astrocli --lang ja simbad object "M31"    # Japanese
astrocli --lang en simbad object "M31"    # English

πŸ”§ Global Options

Option Description
-l, --lang Set output language (en/zh/ja)
-p, --ping Test connectivity to all services (top-level only)
-f, --field Check available fields for a module (top-level only)
-d, --debug Enable debug mode with verbose output
-v, --verbose Enable verbose output

πŸ§‘β€πŸ’» Shell Autocompletion

Install completion for your shell:

astrocli --install-completion bash   # Bash
astrocli --install-completion zsh    # Zsh
astrocli --install-completion fish   # Fish

Add this to your shell config (e.g., ~/.zshrc):

# For zsh
eval "$(astrocli --install-completion zsh)"

# For bash
eval "$(astrocli --install-completion bash)"

πŸ“Š Output & Export

Save query results to file:

astrocli simbad object "M31" --output-file results.csv

# Specify format explicitly
astrocli simbad object "M31" --output-file data.ecsv --output-format ecsv

Supported formats: csv, ecsv, fits, votable, html, latex, ascii


πŸ” Testing Service Connectivity

Check if all data services are accessible:

astrocli --ping

πŸ› οΈ Development

Project Structure

astrocli/
β”œβ”€β”€ astrocli/
β”‚   β”œβ”€β”€ modules/           # Service-specific modules
β”‚   β”‚   β”œβ”€β”€ simbad_cli.py
β”‚   β”‚   β”œβ”€β”€ vizier_cli.py
β”‚   β”‚   β”œβ”€β”€ aavso_cli.py      # NEW: AAVSO VSX
β”‚   β”‚   β”œβ”€β”€ fermi_cli.py       # NEW: Fermi-LAT
β”‚   β”‚   └── ...
β”‚   β”œβ”€β”€ utils.py            # Common utilities
β”‚   β”œβ”€β”€ common_options.py   # Shared CLI options
β”‚   β”œβ”€β”€ i18n.py            # Internationalization
β”‚   └── main.py            # CLI entry point
β”œβ”€β”€ locales/                # Translation files
β”‚   β”œβ”€β”€ zh/LC_MESSAGES/
β”‚   β”œβ”€β”€ ja/LC_MESSAGES/
β”‚   └── en/LC_MESSAGES/
β”œβ”€β”€ package.json           # pnpm/npx configuration
β”œβ”€β”€ pyproject.toml         # Python package config
└── README.md

Adding a New Module

  1. Create modules/<service>_cli.py following existing patterns
  2. Import in main.py's setup_subcommands()
  3. Add to README module list
  4. Add translations to locales/ directories

πŸ“„ License

BSD 3-Clause License

This project uses Astroquery, which is licensed under the BSD 3-Clause License.


πŸ™ Acknowledgments

  • Astroquery - Core library for astronomical data access
  • Typer - Modern CLI framework
  • Rich - Beautiful terminal output
  • AAVSO - American Association of Variable Star Observers
  • Fermi Team - Fermi Gamma-ray Space Telescope

πŸ”„ Migration from astroquery-cli

If you were previously using astroquery-cli, simply change your command:

# Old command
aqc simbad object "M31"

# New command
astrocli simbad object "M31"

All aliases remain the same: sim for simbad, viz for vizier, spl for splatalogue, etc.


πŸ“ FAQ

Common Questions

Can I use this without Node.js?

Yes! Install from source: pip install -e . or use Python directly after installing dependencies.

How do I add a new data service?

See the Development section above. Most services in Astroquery can be wrapped with similar patterns.

Why do some modules say "not fully implemented"?

Some advanced features or edge cases may not have full CLI coverage yet. Core query functionality works, but special parameters might need direct access to the underlying astroquery library.

What's the difference between this and astroquery?

Astro CLI is a command-line interface for Astroquery. Think of it as a user-friendly wrapper that makes common tasks easier. It doesn't replace Astroquery β€” it enhances it!

About

Obtain professional astronomical information from the shell.

Topics

Resources

License

Stars

Watchers

Forks

Packages

 
 
 

Contributors