Skip to main content

No project description provided

Project description

CAC Core

An API client library providing essential functionality for command-line applications.

This project uses UV for dependency management.

Overview

CAC Core (cac-core) is a Python library that provides common utilities for building robust command-line applications. It includes modules for commands, configuration management, standardized logging, data modeling, and formatted output display.

Features

  • Command: Define commands, required or optional arguments, and action implementations
  • Configuration Management: Load/save configs from YAML files with environment variable support
  • Standardized Logging: Consistent, configurable logging across applications
  • Data Modeling: Dynamic attribute creation and manipulation with dictionary-like access
  • Output Formatting: Display data as tables or JSON with customization options
  • Update Checking: Automatically check for package updates from PyPI or GitHub, with configurable intervals and notification options

Installation

pip install cac-core

Usage

Command

import cac_core as cac

# Create a command class
class HelloCommand(cac.command.Command):
    def define_arguments(self, parser):
        """Define command arguments"""
        parser.add_argument('--name', default='World',
                          help='Name to greet')

    def execute(self, args):
        """Execute the command with parsed arguments"""
        logger = cac.logger.new(__name__)
        logger.info(f"Hello, {args.name}!")
        return f"Hello, {args.name}!"

# Use the command in your application
if __name__ == "__main__":
    # Create argument parser
    import argparse
    parser = argparse.ArgumentParser(description='Demo application')

    # Initialize command
    cmd = HelloCommand()

    # Add command arguments
    cmd.define_arguments(parser)

    # Parse arguments
    args = parser.parse_args()

    # Execute command
    result = cmd.execute(args)

    # Display result
    print(result)

Configuration

import cac_core as cac

# Load configuration
config = cac.config.Config("myapp")
server_url = config.get("server", "default-value")

# Update configuration
config.set("api_key", "my-secret-key")
config.save()

Logging

import cac_core as cac

# Create a logger
logger = cac.logger.new(__name__)
logger.info("Application started")
logger.debug("Debug information")

Data Models

import cac_core as cac

# Create data model
data = {
    "name": "Project X",
    "status": "active",
    "metadata": {
        "created": "2025-01-01",
        "version": "1.0"
    }
}

model = cac.model.Model(data)
print(model.name)  # "Project X"
print(model.metadata.version)  # "1.0"

Output Formatting

import cac_core as cac

# Create output handler
output = cac.output.Output({"output": "table"})

# Display data as table
models = [model1, model2, model3]
output.print_models(models)

# Display as JSON
output = cac.output.Output({"output": "json"})
output.print_models(models)

Update Checking

import cac_core as cac

# Check for updates to your package (using PyPI by default)
checker = cac.updatechecker.UpdateChecker("your-package-name")
status = checker.check_for_updates()

# Notify users if an update is available
if status["update_available"]:
    print(f"Update available: {status['current_version']}{status['latest_version']}")

# Convenience function for quick checks
cac.updatechecker.check_package_for_updates("your-package-name", notify=True)

# Configure source options
# PyPI (default)
pypi_checker = cac.updatechecker.UpdateChecker(
    "your-package-name",
    source="pypi"  # This is the default, so it's optional
)

# GitHub
github_checker = cac.updatechecker.UpdateChecker(
    "your-package-name",
    source="github",
    repo="username/repo-name"
)

# Add update checking to your CLI application
def main():
    # Check for updates once per day
    from datetime import timedelta
    checker = cac.updatechecker.UpdateChecker(
        "your-package-name",
        check_interval=timedelta(days=1)
    )

    # Only notify if update is available, otherwise be quiet
    checker.check_for_updates()
    checker.notify_if_update_available(quiet=True)

    # Rest of your application...

Development

pip install uv

# Clone the repository
git clone https://github.com/rpunt/cac_core.git
cd cac_core
uv venv
uv pip install -e .

# Install dependencies
uv pip install -e ".[dev]"
uv pip install -e ".[test]"
uv pip install -e ".[lint]"

# Run tests
uv run pytest

Project Structure

  • command.py - Command management
  • config.py - Configuration management
  • logger.py - Standardized logging
  • model.py - Data modeling utilities
  • output.py - Output formatting

License

MIT

Contributing

Contributions are welcome! Please feel free to submit a Pull Request.

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

cac_core-0.4.1.tar.gz (19.6 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

cac_core-0.4.1-py3-none-any.whl (21.1 kB view details)

Uploaded Python 3

File details

Details for the file cac_core-0.4.1.tar.gz.

File metadata

  • Download URL: cac_core-0.4.1.tar.gz
  • Upload date:
  • Size: 19.6 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/6.1.0 CPython/3.12.9

File hashes

Hashes for cac_core-0.4.1.tar.gz
Algorithm Hash digest
SHA256 6bb12e19aa845a158201e42b8ef0173234f63940e0a3e45fb5df689f7ea5dc20
MD5 16fe93f84dba34c9f88f3a046f77d528
BLAKE2b-256 55f6b6676ff44c2a38b532c42c383bcd24e4e452e4326e0ca0eca04aa575a935

See more details on using hashes here.

Provenance

The following attestation bundles were made for cac_core-0.4.1.tar.gz:

Publisher: create_artifacts_and_publish.yaml on rpunt/cac-core

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file cac_core-0.4.1-py3-none-any.whl.

File metadata

  • Download URL: cac_core-0.4.1-py3-none-any.whl
  • Upload date:
  • Size: 21.1 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/6.1.0 CPython/3.12.9

File hashes

Hashes for cac_core-0.4.1-py3-none-any.whl
Algorithm Hash digest
SHA256 dad2cb23708f0bb410c14666b105c294c6f5008b6cd36d479626f4c0715ab3ab
MD5 13fda9ad4d1008c7b1a2b25fd48afdb3
BLAKE2b-256 dfb0c33832136e6fec7b6f70f487e57ca261d983454eac21b9c9c010a6dba782

See more details on using hashes here.

Provenance

The following attestation bundles were made for cac_core-0.4.1-py3-none-any.whl:

Publisher: create_artifacts_and_publish.yaml on rpunt/cac-core

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page