Providing CLI arguments via click package
CLI with subcommands via click module
import click
from src.dataloaders import SFDataset, LADataset
def run_stats(city: str, file: str):
dataset = SFDataset.load_data(file) if city == "sf" else LADataset.load_data(file)
dataset.run_analysis_pipeline()
def average_filtered_price(city: str, file: str, key: str, value: str):
dataset = SFDataset.load_data(file) if city == "sf" else LADataset.load_data(file)
filtered = dataset.filter_data(dataset.records, key, value)
avg_price = dataset._calculate_average(filtered)
print(f"Average price for {len(filtered)} records where {key} = {value}: {avg_price}")
@click.group()
def cli():
pass
@cli.command(help="Show statistics for the dataset")
@click.option("--city", type=click.Choice(["sf", "la"]), required=True, help="City name")
@click.option("--file", type=click.Path(exists=True), required=True, help="Path to the dataset file")
def stats(city, file):
run_stats(city, file)
@cli.command("average-by-filter", help="Compute average house price for records matching a filter")
@click.option("--city", type=click.Choice(["sf", "la"]), required=True, help="City name")
@click.option("--file", type=click.Path(exists=True), required=True, help="Path to the dataset file")
@click.option("--key", required=True, help="Field to filter by (e.g., 'mainroad')")
@click.option("--value", required=True, help="Value to match for the given field")
def filter(city, file, key, value):
average_filtered_price(city, file, key, value)
if __name__ == "__main__":
cli()