Skip to main content

alissa

The alissa distribution: the single package that owns and anchors the alissa import namespace, and the curation point for its tool extras.

The model

This distribution ships only the leaf packages alissa.sdk and alissa.utils. Everything above them is a PEP 420 namespace package with no __init__.py, so other distributions — pulled in through this package's extras — contribute their own subtrees under the same namespace:

alissa/                                  ← namespace (no __init__.py)
├── sdk/               __init__.py        ← THIS distribution: SDK surface + version file
├── utils/             __init__.py        ← THIS distribution: shared helpers (e.g. utils.version)
└── tools/                               ← namespace (no __init__.py)
    └── github/                          ← namespace
        └── reviewloop/  __init__.py      ← ships from alissa-tools-github-reviewloop

The rule (same as every distribution in this ecosystem): own your leaves, declare only those subtrees (find_namespace_packages(include=[...])), and never add an __init__.py at a namespace level — doing so would claim it for one distribution and shadow the others.

"Owning the namespace" here means being the anchor: the distribution you pip install, the one that provides the top-level SDK surface (alissa.sdk), and the one whose extras enumerate the available tools.

Install

pip install alissa                          # SDK core only, zero third-party deps
pip install 'alissa[tools.github.revloop]'  # + the GitHub review-loop tool
pip install 'alissa[all]'                   # + every tool extra

Each extra pulls in a separately published tool distribution (e.g. alissa-tools-github-reviewloop), which merges its alissa.tools.* packages into the namespace. pip normalizes the dotted extra name, so alissa[tools.github.revloop] resolves.

Extra names are decoupled from distribution names by the curated registry, so they need not match: tools.github.revloop currently pulls alissa-tools-github-reviewloop. That package will be renamed to revloop later (to pair with a planned devloop); only the registry changes when it does.

Editable / development install

pip install -e ./alissa

Console scripts

Command Entry point
alissa-py alissa.sdk.__main__:main

The command is alissa-py — deliberately not alissa, which is the Alissa by Fahera CLI this SDK does not shadow. The -py suffix marks it, explicitly, as the Python SDK's counterpart. (A literal alissa.py can't be used: the console-script file bin/alissa.py would shadow the importable alissa package.)

alissa-py              # SDK version + how to add tools
alissa-py --tools      # list installed alissa.tools.* packages
alissa-py --version

Using it

from alissa.sdk import __version__, installed_tools

print(__version__)
print(installed_tools())   # ['alissa.tools.github.reviewloop', ...] — whatever extras are installed

installed_tools() reports which of the SDK's curated tools are installed, probing each through the import machinery — so it is correct for both wheel and editable installs. The curated set lives in src/main/alissa/sdk/_tools.py, the same registry setup.py builds the extras from.

Shared utilities (alissa.utils)

Helpers the SDK factors out so every alissa.* distribution reuses one implementation instead of copying it. Downstream packages may treat these as stable, public API.

alissa.utils.version — load a distribution's version file

Ship a plain-text version file next to your package and load it the same way the SDK loads its own (alissa/src/main/alissa/sdk/version.py is the reference):

import os
from alissa.utils.version import Version

version = Version.load(os.path.dirname(__file__), name="alissa-tools-github-reviewloop")

Version.load warns and falls back to 0.0.0 when the file is missing; Version.from_path raises instead, when a missing file should be fatal.

To use it, declare the SDK as a dependency: install_requires=["alissa"] (pin alissa>=<version that introduced the helper you use>). There is no dependency cycle — base alissa requires nothing, tools require base alissa, and the alissa[tools.*] extras are a separate, opt-in edge. The only constraint is release ordering: publish alissa before a tool that depends on that version. And no circular import: the SDK core never imports tool code.

Layout

src/main holds the package tree, src/test mirrors it as test_*. The distribution version lives in the plain-text version file next to the package it versions (src/main/alissa/sdk/version), read by both setup.py and version.py.

Adding a tool extra

  1. Ship the tool as its own distribution owning a leaf under alissa.tools.* (see alissa-tools-github-reviewloop for the template). Have it load its version via alissa.utils.version and declare install_requires=["alissa"].
  2. Add one line to extras_require in setup.py: "tools.<area>.<name>": ["alissa-tools-<area>-<name>"]. The all extra updates itself.

Download files

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

Source Distribution

alissa-0.1.0.tar.gz (9.4 kB view details)

Uploaded Source

Built Distribution

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

alissa-0.1.0-py3-none-any.whl (8.5 kB view details)

Uploaded Python 3

File details

Details for the file alissa-0.1.0.tar.gz.

File metadata

  • Download URL: alissa-0.1.0.tar.gz
  • Upload date:
  • Size: 9.4 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.2.0 CPython/3.12.13

File hashes

Hashes for alissa-0.1.0.tar.gz
Algorithm Hash digest
SHA256 eba31d5ee6ca245cdfccbad2c89da81a2d8350dd38b0b7c1d0e3e8dd97ae2cfd
MD5 433ca2d9e40d6222cee2fd5e223f42d6
BLAKE2b-256 d036f6f3f25e573e927156eda4cd106e90297000b1dfe9961a0e3f0fcf741505

See more details on using hashes here.

File details

Details for the file alissa-0.1.0-py3-none-any.whl.

File metadata

  • Download URL: alissa-0.1.0-py3-none-any.whl
  • Upload date:
  • Size: 8.5 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.2.0 CPython/3.12.13

File hashes

Hashes for alissa-0.1.0-py3-none-any.whl
Algorithm Hash digest
SHA256 94434823503feab6b8dde46b2652fb82d345b1a42a2d74b55331746a489da670
MD5 f1054a53d10440137ae5f93396d059ca
BLAKE2b-256 e336c757277fdf1c575251669634e8d56e7d80d0c79bf2bdc608b9ae2cb9d3e7

See more details on using hashes here.

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