Skip to main content

No project description provided

Project description

Hildie

A Python monorepo built with Bazel, named after the best dog.

PyPI Python 3.11+ Build License


About

Hildie is a collection of Python utilities and tools, packaged as a single installable module. This project demonstrates a modern Python monorepo structure using Bazel for builds, testing, and publishing.

Why "Hildie"? Because all the good package names were taken, so this project is named after Hildie — the adorable pup you see above, peacefully napping with her favorite stuffed horse.

Installation

# Install main hildie package
pip install hildie

# Install hildie with optional Python bindings (Rust, Go, C++)
pip install hildie[bindings]

Features

  • Modular Design: Multiple sub-packages under a single namespace
  • Multi-Language: Rust, Go, Node.js, Java, and C++ implementations
  • Python Bindings: Use Rust, Go, and C++ directly from Python via PyO3 and ctypes
  • IPython/Jupyter Support: Full support for interactive environments
  • Bazel Build System: Fast, reproducible builds with caching
  • Automated Publishing: Tag a release and it's automatically published to PyPI, npm, Maven, crates.io
  • Fully Tested: Comprehensive test coverage across all packages and languages

Packages

Python Packages

Package Description
hildie.hildie_library Core utility functions for math operations
hildie.hildie_app Application components for data processing
hildie.hildie_cli Command-line interface tools
hildie.hildie_archive_git_forks Utility for archiving GitHub forks
hildie_bindings Python bindings for Rust, Go, and C++ (optional)

Other Languages

Language Package Registry
Java hildie-java-lib Maven Central
Go hildie-go pkg.go.dev
Rust hildie-* crates.io
JavaScript @hildie/* npm
C++ hildie-cpp (native library)

Quick Start

Basic Usage

from hildie.hildie_library import add, multiply

# Simple math operations
result = add(2, 3)      # Returns: 5
product = multiply(4, 5) # Returns: 20

Using the App

from hildie.hildie_app import App

app = App()
result = app.process_numbers([1, 2, 3, 4, 5])
print(result)  # {'sum': 15, 'product': 120}

CLI Tools

# After installing hildie
python -m hildie.hildie_cli --help

GitHub Fork Archiver

from hildie.hildie_archive_git_forks.archiver import GitHubForkArchiver

archiver = GitHubForkArchiver(token="your-github-token")
archiver.archive_forks("username")

Python Bindings (Multi-Language)

With the hildie[bindings] extra, use Rust, Go, and C++ from Python:

from hildie_bindings import (
    greet_rust, add_rust,              # Rust bindings (PyO3)
    greet_go, add_go,                   # Go bindings (ctypes)
    process_data, compute_factorial     # C++ bindings (ctypes)
)

# Use Rust functions
print(greet_rust("Hildie"))  # "Hello, Hildie!"
print(add_rust(5, 10))       # 15

# Use Go functions
print(greet_go("Gophers"))   # "Hello, Gophers!"
print(add_go(100, 200))      # 300

# Use C++ functions
print(process_data([1, 2, 3, 4, 5]))    # [2, 4, 6, 8, 10]
print(compute_factorial(5))              # 120

In IPython/Jupyter

Bindings work seamlessly in interactive environments:

# In IPython or Jupyter - just import and use!
from hildie_bindings import greet_rust, add_rust

# Results displayed immediately
greet_rust("World")
add_rust(42, 8)

See Interactive Demo for a complete Jupyter notebook.

API Reference

hildie.hildie_library

Function Description
add(a, b) Add two numbers together
multiply(a, b) Multiply two numbers

hildie.hildie_app

Class Description
App Main application class for processing data

hildie.hildie_archive_git_forks

Class Description
GitHubForkArchiver Archive GitHub forks to local storage

Development

Prerequisites

  • Bazelisk (recommended) or Bazel 7+
  • Python 3.11+

Building

# Build all targets
bazel build //...

# Build the wheel
bazel build //:wheel

Testing

# Run all tests
bazel test //...

Running CLIs

bazel run //:hildie-cli
bazel run //:hildie-archive-git-forks

Project Structure

hildie/
├── source/
│   ├── hildie/                        # Multi-language source code
│   │   ├── java/                      # Java packages (Maven Central)
│   │   ├── go/                        # Go packages (pkg.go.dev)
│   │   ├── rust/                      # Rust crates (crates.io)
│   │   ├── node/                      # JavaScript/npm packages
│   │   ├── bindings/                  # Python bindings
│   │   │   └── python/                # PyO3 + ctypes bindings
│   │   │       ├── hildie_bindings/   # Package source
│   │   │       ├── examples/          # Demo scripts & notebooks
│   │   │       └── tests/             # Binding tests
│   │   └── cpp/                       # C++ components
│   └── python/                        # Python build tools
│       ├── build_bindings.py
│       ├── regenerate_requirements.py
│       ├── test_runners.py
│       └── hildie.bzl
├── docs/                              # Documentation
│   ├── *.md                           # All documentation files
│   ├── pyproject.toml
│   └── BUILD.bazel
├── packages/                          # Python package tests
│   ├── my-library/
│   ├── my-app/
│   ├── my-cli/
│   └── archive-git-forks/
├── BUILD.bazel                        # Root build file
├── MODULE.bazel                       # Bazel dependencies
├── pyproject.toml                     # Project metadata
└── README.md                          # This file

Publishing

Releases are automated via GitHub Actions. To publish a new version:

git tag v0.2.0
git push origin v0.2.0

The workflow will:

  1. Run all tests
  2. Build the wheel with the tagged version
  3. Publish to PyPI
  4. Create a GitHub release

Contributing

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

  1. Fork the repository
  2. Create your feature branch (git checkout -b feature/amazing-feature)
  3. Run tests (bazel test //...)
  4. Commit your changes
  5. Push to the branch
  6. Open a Pull Request

Maintainer

Clinton Steinerclintonsteiner@gmail.com

License

This project is licensed under the MIT License — see the LICENSE file for details.


Made by Clinton, inspired by Hildie

Hildie the Dog

Project details


Download files

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

Source Distributions

No source distribution files available for this release.See tutorial on generating distribution archives.

Built Distribution

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

hildie-0.3.0-py3-none-any.whl (12.8 kB view details)

Uploaded Python 3

File details

Details for the file hildie-0.3.0-py3-none-any.whl.

File metadata

  • Download URL: hildie-0.3.0-py3-none-any.whl
  • Upload date:
  • Size: 12.8 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/6.1.0 CPython/3.13.7

File hashes

Hashes for hildie-0.3.0-py3-none-any.whl
Algorithm Hash digest
SHA256 d5c19820a20388aa6719434adebfe1ce79d14bfb4713a86d5d8f9a2cf2a38e8c
MD5 57ee68a3c7c56fe42a3d918bb9142d1f
BLAKE2b-256 b4032d34c6f2216d297abebdabf5ed5fbebfee9ab9c238953d90112021bfdc1a

See more details on using hashes here.

Provenance

The following attestation bundles were made for hildie-0.3.0-py3-none-any.whl:

Publisher: bazel.yml on clintonsteiner/hildies-python-monorepo

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