Source code for crossbar._codename

#####################################################################################
#
#  Copyright (c) typedef int GmbH
#  SPDX-License-Identifier: EUPL-1.2
#
#####################################################################################

"""
Crossbar.io release codenames.

Each Crossbar.io CalVer release series (``year.month``) carries a
maintainer-chosen codename, e.g. ``26.6.x`` is "Resistance Is Futile". The
codename is purely additive metadata surfaced in the product title / CLI banner;
it does not affect versioning.

A new codename is assigned per ``year.month`` series at release-prep time (see
the ``prep-release`` recipe in the justfile), alongside the version bump and the
new release signing key.
"""

from typing import Dict, Optional, Tuple

# Map of (year, month) CalVer series -> release codename.
#
# Add a new entry for every new year.month release series. A stable (non-dev)
# release without a codename is rejected by the release gate (see
# crossbar/test/test_codename.py).
[docs] _CODENAMES: Dict[Tuple[int, int], str] = { (26, 6): "Resistance Is Futile", (26, 7): "Shields Up", }
[docs] def get_codename(version: Optional[str] = None) -> Optional[str]: """ Look up the release codename for a Crossbar.io CalVer version string. :param version: CalVer version string like ``"26.6.1"`` or ``"26.6.1.dev1"``. Defaults to the running ``crossbar.__version__``. :returns: The codename for the version's ``(year, month)`` series, or ``None`` if no codename is assigned (e.g. a development build, or a release that has not been named yet). Never raises. """ if version is None: import crossbar version = crossbar.__version__ try: parts = version.split(".") year = int(parts[0]) month = int(parts[1]) except (AttributeError, IndexError, ValueError): return None return _CODENAMES.get((year, month))
[docs] def get_codename_suffix(version: Optional[str] = None) -> str: """ Return the codename as a title/banner suffix, e.g. ``" — Resistance Is Futile"``, or the empty string when no codename is assigned. :param version: see :func:`get_codename`. """ codename = get_codename(version) return " — {}".format(codename) if codename else ""