Skip to main content

Ambient package update tool for clean and swift maintenance

Project description

PyPI release Downloads Linting Coding Style

Ambient Package Update

This repository will help keep all Python packages following a certain basic structure tidy and up-to-date. It's being maintained by Ambient Digital.

This package will render all required configuration and installation files for your target package.

Typical use-cases:

  • A new Python or Django version was released
  • A Python or Django version was deprecated
  • You want to update the Sphinx documentation builder
  • You want to update the linter versions
  • You want to add the third-party dependencies

Versioning

This project follows the CalVer versioning pattern: YY.MM.[RELEASE]

How to update a package

These steps will tell you how to update a package which was created by using this updater.

  • Navigate to the main directory of your package
  • Activate your virtualenv
  • Run python -m ambient_package_update.cli render-templates
  • Validate the changes and increment the version accordingly
  • Release a new version of your target package

How to create a new package

Just follow these steps if you want to create a new package and maintain it using this updater.

  • Create a new repo at GitHub
  • Check out the new repository in the same directory this updater lives in (not inside the updater!)
  • Create a directory ".ambient-package-update" and create a file "metadata.py" inside.
from ambient_package_update.metadata.author import PackageAuthor
from ambient_package_update.metadata.constants import DEV_DEPENDENCIES
from ambient_package_update.metadata.package import PackageMetadata
from ambient_package_update.metadata.readme import ReadmeContent
from ambient_package_update.metadata.ruff_ignored_inspection import (
    RuffIgnoredInspection,
)

METADATA = PackageMetadata(
    package_name="my_package_name",
    authors=[
        PackageAuthor(
            name="Ambient Digital",
            email="hello@ambient.digital",
        ),
    ],
    development_status="5 - Production/Stable",
    readme_content=ReadmeContent(
        tagline="A fancy tagline for your new package",
        content="""A multiline string containing specific things you want to have in your package readme.
""",
    ),
    dependencies=[
        "my_dependency>=1.0",
    ],
    optional_dependencies={
        "dev": [
            *DEV_DEPENDENCIES,
        ],
        # you might add further extras here
    },
    ruff_ignore_list=[
        RuffIgnoredInspection(key="XYZ", comment="Reason why we need this exception"),
    ],
)
  • Install the ambient_package_update package
    # ideally in a virtual environment
    pip install ambient-package-update
    
  • Add docs/index.rst and link your readme and changelog to have a basic documentation (surely, you can add or write more custom docs if you want!)
  • Enable the readthedocs hook in your GitHub repo to update your documentation on a commit basis
  • Finally, follow the steps of the section above (How to update a package).

Customizing the templates

To customize the templates, you can use the eject-template command. Simply run

python -m ambient_package_update.cli eject-template

from the root of your project and select the template you want to eject. The chosen template will be copied to .ambient-package-update/templates, ready to be customized.

If you want to overwrite template manually, you can find the default templates in the ambient_package_update/templates directory. You can overwrite them by creating a .ambient-package-update/templates directory in your project and create a new file with the same name as the template you want to overwrite.

Contribution

Dependency updates

The dependencies of this package are being maintained with pip-tools.

pip install -U pip-tools

To add/update/remove a package, please do so in the main pyproject.toml. Afterward, call the following command to reflect your changes in the requirements.txt.

pip-compile --extra dev -o requirements.txt pyproject.toml --resolver=backtracking

To install the packages, run:

pip-sync

Publish to PyPi

  • Update documentation about new/changed functionality

  • Update the Changelog

  • Increment version in main __init__.py

  • Increment version of this package in dependencies in ambient_package_update/metadata/constants.py

  • Create pull request / merge to master

  • This project uses the flit package to publish to PyPI. Thus publishing should be as easy as running:

    flit publish
    

    To publish to TestPyPI use the following ensure that you have set up your .pypirc as shown here and use the following command:

    flit publish --repository testpypi
    

Changelog

Can be found at GitHub.

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

ambient_package_update-24.10.1.tar.gz (36.6 kB view details)

Uploaded Source

Built Distribution

ambient_package_update-24.10.1-py2.py3-none-any.whl (38.8 kB view details)

Uploaded Python 2 Python 3

File details

Details for the file ambient_package_update-24.10.1.tar.gz.

File metadata

File hashes

Hashes for ambient_package_update-24.10.1.tar.gz
Algorithm Hash digest
SHA256 68f4742d408153e1eb41381591633e708a8000d787553605ffe60192bd50a9a7
MD5 7d7415b6a5c2016e54cea8902fcbbe4c
BLAKE2b-256 cef0ba3f82a6ad203399ca2cd83eedc310c0f8f49ec92c1ff9bf9f44e3986c8d

See more details on using hashes here.

File details

Details for the file ambient_package_update-24.10.1-py2.py3-none-any.whl.

File metadata

File hashes

Hashes for ambient_package_update-24.10.1-py2.py3-none-any.whl
Algorithm Hash digest
SHA256 8b25319b598dd66f0b1a1775a41f2ebd63d3050e35e35e95b39f56415401be3b
MD5 06d0fd8a3ce6636c8bb8723722effc59
BLAKE2b-256 986ce6b2a6d58f9d64b0454eff4b68034cc3e559019aace4fa88d619b14eafc9

See more details on using hashes here.

Supported by

AWS AWS Cloud computing and Security Sponsor Datadog Datadog Monitoring Fastly Fastly CDN Google Google Download Analytics Microsoft Microsoft PSF Sponsor Pingdom Pingdom Monitoring Sentry Sentry Error logging StatusPage StatusPage Status page