Skip to main content

Python build backend with build plugins and dependency lock switch

Project description

Python build backend with build plugins and dependency lock switch

PyPI status drain-swamp coverage percentage License
last commit to gauge activity Test suite status Quality check status Documentation
Python versions supported implementations
platforms black
downloads GitHub stars
msftcangoblowme on Mastodon

drain-swamp features build plugins and dependency lock switch

* Python 3.9 through 3.13, PyPy

new in 2.1.x

fork dependency fixing into separate package; add wreck support; add pytest-logging-strict support;

new in 2.0.x

approach for requirements organize by venvs rather than folders; new implementation for pipenv-unlock commands;

What swamp?

Code in Makefile or python scripts should be reduced or removed entirely, in favor of packaged, unittested, and well documented code.

These files are the favorite target for those placing obfuscated code triggering malware.

Lets call this hiding place, the swamp

Boilerplate

Authors and maintainers deal with many packages. Boilerplate code is copy+paste into multiple packages.

  • an eye sore

  • completely untested code

  • small variations leak in

  • code quality and feature improvements are less likely to happen

drain-swamp started out to reduce this

Generated files

For Python packages, which contain generated files, UX is improved by generating those files during the build process.

These batteries are included:

  • setuptools-scm version file

  • dependency lock switch

    .lock, .unlock, and .lnk files

Micro services use message queues for inter-process communications. The messages use protobuf message protocol which produces a generated file. That must be part of the build process.

Would be a good fit for a build plugin

version file

The build plugin for interacting with version file, it’s about having flexibility on which version str to use.

Different circumstances calls for different version str

  • CI tagged release workflow needs tag version from the version file

  • CI on push workflows need the current version

  • python -m build provide the new version str

This flexibility allows to test building a package before git push or a tagged release.

Get scm (source control management) version

scm-version get

0.5.2.dev0+g2988c13.d20240724

Get from version file

drain-swamp tag

0.5.2

Write a semantic version str to version file. drain-swamp pretag to check/fix semantic version str

scm-version write "0.5.2post0.dev1"

Features

Updating docs

Before a commit, update the date and version str in several locations

updates

  • Sphinx docs/conf.py

  • CHANGES.rst

  • NOTICE.txt

This Sphinx conf.py contains a snippet. The entire contents of the snippet is replaced. This technique is now a separate package, drain-swamp-snippet

Dependency lock switch

Authors disappear or die. Unfunded projects quickly become abandonware. Packages with locked dependencies do not age well.

Lets check the license. Hmmm Apache2.0 abandonware, that’s a great reason to turn the dependency lock off.

pipenv-unlock is a light switch to turn on/off dependency locking.

On your repo, set a CI variable and that is the switch.

When the repo is inactive, turn off the switch and make a release without dependency locking.

How it works

A snippet in pyproject.toml containing both dependencies and optional-dependencies. There is additional meta data as well.

Refresh both .unlock and .lock files. During build time, .lnk shortcut is created.

Create dependency files with the .in extension. These include the dependencies and lines with -r and -c to include other dependency files.

Then

Create both lock and unlock dependency files. Fix both.

req fix

Deprecated. Create .unlock files

req unlock

build config settings

The Python packages build process occurs within a subprocess. The hottest trending topic is how to pass config settings to this subprocess?

Right before python -m build, depending on context, use whichever method is most appropriate.

custom build backend

This would only work for a custom build backend. Will see it’s use only in drain-swamp howto.txt

python -m build -C--kind="0.5.1a4.dev6"

Unless authoring a custom build backend, can safely ignore.

cli

Use bash-workaround

tox

Similiar to cli. During pre_command, the TOML file and environment variable DS_CONFIG_SETTINGS are created.

tox test – drain-swamp-tox-test

tox – drain-swamp-tox

github workflows

drain-swamp-action creates the TOML file and environment variable, DS_CONFIG_SETTINGS.

Immediately after this gh action, there is fair bit of:

upload and download artifacts, between step communication, and maybe between jobs communication.

There is one job. Communication is only between steps. e.g. ubuntu-latest-3.10

There are several jobs. A parent job occurs once. Constraining artifact upload to only occur once.

See also gh workflows folder – drain-swamp-gh-workflows

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

drain_swamp-2.1.1.tar.gz (567.8 kB view details)

Uploaded Source

Built Distribution

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

drain_swamp-2.1.1-py3-none-any.whl (108.2 kB view details)

Uploaded Python 3

File details

Details for the file drain_swamp-2.1.1.tar.gz.

File metadata

  • Download URL: drain_swamp-2.1.1.tar.gz
  • Upload date:
  • Size: 567.8 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/6.0.1 CPython/3.12.8

File hashes

Hashes for drain_swamp-2.1.1.tar.gz
Algorithm Hash digest
SHA256 ef089c3cecef5094650bf5f3812c659a248614c52782eb27e4f396923540f196
MD5 5ed83d7c36cec875c9cf52579be77fac
BLAKE2b-256 ae1eb1904f225cd9e611184c246c63b4ee232c95b5eabfacc04e490db0eee6bd

See more details on using hashes here.

Provenance

The following attestation bundles were made for drain_swamp-2.1.1.tar.gz:

Publisher: release.yml on msftcangoblowm/drain-swamp

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

File details

Details for the file drain_swamp-2.1.1-py3-none-any.whl.

File metadata

  • Download URL: drain_swamp-2.1.1-py3-none-any.whl
  • Upload date:
  • Size: 108.2 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/6.0.1 CPython/3.12.8

File hashes

Hashes for drain_swamp-2.1.1-py3-none-any.whl
Algorithm Hash digest
SHA256 12ed103968f5988ed52ade22b64c6a3d63c8829d95d580983bd6f42724d2590f
MD5 5d322e5bc05b6f8ed3885795766cade1
BLAKE2b-256 79849b86fecb2df08a76a72cfa10fb39eb616317be5bd9d10aed5ade0a8f1b84

See more details on using hashes here.

Provenance

The following attestation bundles were made for drain_swamp-2.1.1-py3-none-any.whl:

Publisher: release.yml on msftcangoblowm/drain-swamp

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