Skip to main content

CLI tooling to scaffold and manage Python Queued Message Handler projects

Project description

pyqmh-tools

Scaffolding and maintenance utilities for building a Python Queued Message Handler (QMH) project.

This repository is intended to be published as a PyPI package so the tooling can be installed with pip and used as project commands.

Installation

Install from PyPI (after publish):

pip install pyqmh-tools

Commands

This package provides three main commands:

  1. pyqmh_project_init
  2. pyqmh_module_add
  3. pyqmh_module_remove

Note: if you see pyqmg-module-remove elsewhere, treat that as a typo. The command name in this project is pyqmh_module_remove.


pyqmh_project_init

Initializes a new QMH project in the current directory.

What it does:

  • Creates src/ and src/modules/ if they do not already exist.
  • Creates src/modules/__init__.py if missing.
  • Copies template app.py into src/app.py if it does not already exist.
  • Prompts for app/project description (only when creating app.py).
  • Fills template placeholders such as description/author.
  • Creates root .gitignore from template if .gitignore does not exist.

Run from your target project directory:

pyqmh_project_init

pyqmh_module_add

Adds a new module to src/modules, or adds a new implementation to an existing factory module.

Behavior summary:

  • Prompts for module name first.
  • If module already exists and is a factory module, prompts to add a new implementation.
  • If module does not exist, prompts for module type:
    • standard
    • factory
    • repository

standard creation:

  • Creates src/modules/<module_name>/module.py from template.
  • Creates module __init__.py from template with imports/exports.
  • Updates src/modules/__init__.py import and __all__ (if file exists).
  • Updates src/app.py import and constructor registration (if file exists).

factory creation:

  • Creates factory.py, base.py, and simulated.py from templates.
  • Creates module __init__.py from template with imports/exports.
  • Includes factory/base/simulated exports.
  • Updates src/modules/__init__.py import and __all__ (if file exists).
  • Updates src/app.py import and constructor registration (if file exists).

repository creation:

  • Prompts for Git repository URL.
  • Adds the repository as a Git submodule under src/modules/<module_name>.
  • If repository URL is blank, falls back to template-based creation prompts.

Add new module:

pyqmh_module_add

pyqmh_module_remove

Removes an existing module from src/modules.

Behavior summary:

  • Prints available modules before prompting.
  • Accepts module name as folder name or CamelCase class name.
  • Shows files to be removed and asks for confirmation.
  • If module is a Git submodule:
    • deinitializes submodule
    • removes it from Git index
    • removes submodule metadata
  • If module is a regular folder:
    • removes the folder directly
  • Cleans up references after removal:
    • src/modules/__init__.py imports and __all__
    • src/app.py import and constructor registration

Remove module:

pyqmh_module_remove

Typical New Project Flow

From a new directory:

  1. Initialize project scaffold.
  2. Add one or more modules.
  3. Run app.

Example:

mkdir my-qmh-project
cd my-qmh-project

pyqmh_project_init
pyqmh_module_add
pyqmh_module_add

python src/app.py --debug

Development Notes

  • Commands are designed to be run from the project root where src/ should exist.
  • The tools are idempotent for common setup steps (existing files/folders are generally preserved).
  • Generated files are template-driven from src/pyqmh_tools/assets.

Navigation Customization with routes.json

Generated Flask app templates now support an optional routes.json file placed in the same directory as app.py.

Supported templates:

  • new-app-flask.py
  • new-module-app-flask.py

When routes.json is present and valid:

  • Navigation order follows the order of keys in the JSON file.
  • Top-level key/value pairs become direct navigation links.
  • A top-level modules object becomes a Modules dropdown.
  • This overrides the default behavior that auto-populates module links from discovered module folders.

When routes.json is missing or invalid:

  • Existing default behavior is used (auto-discovered modules and standard link layout).

Example:

{
  "Home": "/",
  "About": "/about",
  "modules": {
    "Hello World": "/module/hello_world"
  }
}

The example above renders navigation in this order:

  1. Home
  2. About
  3. Modules -> Hello World

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

pyqmh_tools-0.0.7.tar.gz (32.5 kB view details)

Uploaded Source

Built Distribution

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

pyqmh_tools-0.0.7-py3-none-any.whl (41.3 kB view details)

Uploaded Python 3

File details

Details for the file pyqmh_tools-0.0.7.tar.gz.

File metadata

  • Download URL: pyqmh_tools-0.0.7.tar.gz
  • Upload date:
  • Size: 32.5 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/6.1.0 CPython/3.13.12

File hashes

Hashes for pyqmh_tools-0.0.7.tar.gz
Algorithm Hash digest
SHA256 ec98ecc57df9ca7279e3aa041119f935630fd46763cf1c0a51ddde784eaa51f2
MD5 3f04a93b0fb9f29c86e82b96a14e8939
BLAKE2b-256 196ad3c8c4409bb9da1d79573c33da6d104ced26ad28967b5618b52e5a13f846

See more details on using hashes here.

Provenance

The following attestation bundles were made for pyqmh_tools-0.0.7.tar.gz:

Publisher: publish-to-pypi.yml on PCLabTools/pyqmh-tools

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

File details

Details for the file pyqmh_tools-0.0.7-py3-none-any.whl.

File metadata

  • Download URL: pyqmh_tools-0.0.7-py3-none-any.whl
  • Upload date:
  • Size: 41.3 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/6.1.0 CPython/3.13.12

File hashes

Hashes for pyqmh_tools-0.0.7-py3-none-any.whl
Algorithm Hash digest
SHA256 d0128d84f5e063b5a63a2764fcf24024d2f5ce06441ac766c43f0616e7aef663
MD5 3be6b7a37177cb3bc1bdffe0c3e99411
BLAKE2b-256 a25116a4bae73481f60e492de275181541533a85cac19476ccee55c946c7d051

See more details on using hashes here.

Provenance

The following attestation bundles were made for pyqmh_tools-0.0.7-py3-none-any.whl:

Publisher: publish-to-pypi.yml on PCLabTools/pyqmh-tools

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