Skip to main content

Nox sessions with options

Project description

NoxOpt

Nox sessions with options!

Installation

It's just pip install noxopt!

Basic Usage

Define a session with typed parameters:

from noxopt import NoxOpt, Session

nox = NoxOpt()

@nox.session
def add_numbers(session: Session, x: int, y: int) -> None:
    session.log(x + y)

Now you can pass this session the declared option via the command line:

nox -s my-session -- --x 10 -- y 3

And you'll see the following output

nox > Running session my-session
nox > Creating virtual environment (virtualenv) using python in .nox/my-session
nox > 13
nox > Session my-session was successful.

Note that all options declared with the sessions of a NoxOpt group must be consistent. That is, if one session defined x: int, another session in the same group cannot define x: bool instead.

Customizing Options

This time you're going to use some Annotated metadata to customize your option:

from typing import Annotated, TypeAlias
from noxopt import NoxOpt, Option, Session

nox = NoxOpt()

@nox.session
def sum_numbers(
    session: Session,
    nums: Annotated[list[int], Option(nargs="*", type=int)],
) -> None:
    session.log(sum(nums))

This time when you run it you can pass several of numbers:

nox -s sum-numbers -- --nums 10 3 26 4

And you'll see the following output

nox > Running session my-session
nox > Creating virtual environment (virtualenv) using python in .nox/my-session
nox > 43
nox > Session my-session was successful.

Note that the annotation for nums should be understood in the following way:

# declare a type with metadata
Annotated[
    # your normal type annotation
    list[int],
    # configure the option associated with the type annotation above
    Option(nargs="*", type=int)
]

You'll find that Option has nearly the same parameters as argparse.add_argument.

If you need to use a given option more than once you can do so by defining it as a variable:

from functools import reduce
from typing import Annotated, TypeAlias
from noxopt import NoxOpt, Option, Session

nox = NoxOpt()

Integers = Annotated[list[int], Option(nargs="*", type=int)]

@nox.session
def sum_numbers(session: Session, nums: Integers) -> None:
    session.log(sum(nums))

@nox.session
def multiply_numbers(session: Session, nums: Integers) -> None:
    session.log(reduce(lambda x, y: x * y, nums, 0))

Automatic Tags

An additional nicety of NoxOpt is that is can automatically create tags based on the names of your sessions using the NoxOpt(auto_tag=True) parameter. The idea behind this parameter is that if you have a set of sessions with a common naming scheme like:

from noxopt import NoxOpt, Session

nox = NoxOpt(auto_tag=True)

@nox.session
def check_python_tests(session: Session) -> None:
    ...

@nox.session
def check_python_format(session: Session) -> None:
    ...

@nox.session
def check_javascript_tests(session: Session) -> None:
    ...

@nox.session
def check_javascript_format(session: Session) -> None:
    ...

NoxOpt will generate the following tags:

  • check - run sessions begining with check
  • check-python - run sessions begining with check-python
  • check-javascript- run sessions begining with check-javascript

It does this by splitting every session name in the group on - characters and creating tags based on their common prefixes.

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

noxopt-0.0.5.tar.gz (8.3 kB view details)

Uploaded Source

Built Distribution

noxopt-0.0.5-py3-none-any.whl (7.0 kB view details)

Uploaded Python 3

File details

Details for the file noxopt-0.0.5.tar.gz.

File metadata

  • Download URL: noxopt-0.0.5.tar.gz
  • Upload date:
  • Size: 8.3 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/4.0.2 CPython/3.11.1

File hashes

Hashes for noxopt-0.0.5.tar.gz
Algorithm Hash digest
SHA256 2e10d88402bd729ce55f538618aceb70122284a9d82b7d7c22fe693869223698
MD5 5791be177f3d9b1ea56fd26e2160d6f4
BLAKE2b-256 21f348fe5c0074000d6317494260d1d8b625ddda56f2950cd3a934b534386a5f

See more details on using hashes here.

File details

Details for the file noxopt-0.0.5-py3-none-any.whl.

File metadata

  • Download URL: noxopt-0.0.5-py3-none-any.whl
  • Upload date:
  • Size: 7.0 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/4.0.2 CPython/3.11.1

File hashes

Hashes for noxopt-0.0.5-py3-none-any.whl
Algorithm Hash digest
SHA256 4f672eb905b9f944f9181a8b033c84d7f2f3ac1a0feded7250c368eb0ff0da7d
MD5 3c0acf5ebb4058d3cce1bdc52b4f713c
BLAKE2b-256 5a94d19d9bc7ec712dad393139c680a8b96424858a04adf9a2ca4c66a4461259

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