Coverage for src/bunches/settings.py: 100%
19 statements
« prev ^ index » next coverage.py v7.16.2, created at 2026-10-30 23:02 +0000
« prev ^ index » next coverage.py v7.16.2, created at 2026-10-30 23:02 +0000
1"""Settings for `bunches`.
3Contents:
4 set_key_namer: sets the global function used to name items.
5 set_subset_return: sets the global default `returns` option for `subset`
6 methods.
7 _ALL_KEYS: keys that a `Catalog` treats as a request for all values.
8 _DEFAULT_KEYS: keys that a `Catalog` treats as a request for its default
9 values.
10 _KEY_NAMER: function used to name items in a `Repository` or `DictList`.
11 _NONE_KEYS: keys that a `Catalog` treats as a request for no values.
12 _SUBSET_RETURN: default `returns` option for `subset` methods.
14The module-level values hold the package-wide defaults. They are read at call
15time, so the `set_*` functions take effect immediately for all `bunches`
16classes.
18"""
20from __future__ import annotations
22from collections.abc import Callable
23from typing import TYPE_CHECKING, Any
25from . import utilities
27if TYPE_CHECKING:
28 from .kinds import SubsetReturns
31_ALL_KEYS: list[Any] = ['all', 'All', ['all'], ['All']]
32_DEFAULT_KEYS: list[Any] = [
33 'default',
34 'defaults',
35 'Default',
36 'Defaults',
37 ['default'],
38 ['defaults'],
39 ['Default'],
40 ['Defaults']]
41_KEY_NAMER: Callable[[object | type[Any]], str | None] = utilities._namify
42_NONE_KEYS: list[Any] = ['none', 'None', ['none'], ['None']]
43_SUBSET_RETURN: SubsetReturns = 'class'
46""" Public Functions """
49def set_key_namer(namer: Callable[[object | type[Any]], str | None]) -> None:
50 """Sets the global default function used to name items.
52 Args:
53 namer: function that returns a `str` name of any item passed.
55 Raises:
56 TypeError: if 'namer' is not callable.
58 """
59 if not callable(namer):
60 raise TypeError('namer argument must be a callable')
61 globals()['_KEY_NAMER'] = namer
64def set_subset_return(returns: SubsetReturns) -> None:
65 """Sets the global default for the `returns` argument of `subset` methods.
67 Args:
68 returns: whether `subset` methods return a new instance of the class
69 ('class'), a deep copy of the instance ('copy') or the simple
70 native Python type ('simple').
72 Raises:
73 ValueError: if 'returns' is not 'class', 'copy', or 'simple'.
75 """
76 if returns not in ('class', 'copy', 'simple'):
77 message = 'returns argument must be "class", "copy", or "simple"'
78 raise ValueError(message)
79 globals()['_SUBSET_RETURN'] = returns