#!/usr/bin/env bash import xmlrpc.client import sys import click def get_db_list_xmlrpc(odoo_url): """ Retrieves the list of Odoo databases using the XML-RPC API. """ try: common = xmlrpc.client.ServerProxy(f"{odoo_url}/xmlrpc/db") db_list = common.list() return db_list except xmlrpc.client.Fault as e: print( f"XML-RPC Error: {e.faultCode} - {e.faultString}", file=sys.stderr ) return [] except Exception as e: print(f"Connection Error: {e}", file=sys.stderr) return [] # --- CLI using Click --- @click.command() @click.option( "--odoo-url", default="http://localhost:8069", help="URL of the Odoo server.", show_default=True, ) @click.option( "--raw", is_flag=True, help="Output one database per line, without extra formatting. Useful for scripting.", ) def list_databases(odoo_url, raw=False): """ This script lists all available databases on an Odoo server. """ if not raw: click.echo(f"Attempting to connect to Odoo at: {odoo_url}") databases = get_db_list_xmlrpc(odoo_url) if databases: if not raw: click.echo("\nAvailable databases:") for db in databases: if not raw: click.echo(f"- {db}") else: click.echo(db) else: if not raw: click.echo("Failed to retrieve the database list.") # --- Script Execution --- if __name__ == "__main__": list_databases()