diff --git a/multiconfparse/__init__.py b/multiconfparse/__init__.py
index 3df2e83..28427cf 100644
--- a/multiconfparse/__init__.py
+++ b/multiconfparse/__init__.py
@@ -904,6 +904,12 @@ class ConfigSpec(abc.ABC):
     def create(cls, action="store", **kwargs):
         # Factory to obtain ConfigSpec objects with the correct subclass to
         # handle the given action.
+
+        # Users can specify the class for the action directly rather than
+        # giving its name. Assume that's what's happening if action isn't a str
+        if not isinstance(action, str):
+            return action(**kwargs)
+
         if action == "append_const":
             raise NotImplementedError(
                 f"action '{action}' has not been implemented"

Allow user-defined actions
diff --git a/tests/test_multiconfparse.py b/tests/test_multiconfparse.py
index 263e3bb..025671b 100644
--- a/tests/test_multiconfparse.py
+++ b/tests/test_multiconfparse.py
@@ -147,6 +147,33 @@ class ArgparseError(RuntimeError):
     pass
 
 
+class UcStoreConfigSpec(mcp.ConfigSpec):
+    action = "uc_store"
+
+    def __init__(self, const=None, **kwargs):
+        super().__init__(type=str, **kwargs)
+
+        if self.nargs == 0:
+            raise ValueError(
+                f"nargs == 0 is not valid for the {self.action} action"
+            )
+
+        if const is not None and self.nargs != "?":
+            raise ValueError(
+                f"const cannot be supplied to the {self.action} action "
+                f'unless nargs is "?"'
+            )
+        self.const = const
+
+    def accumulate_processed_value(self, current, new):
+        assert new is not mcp.NOT_GIVEN
+        if self.nargs == "?" and new is mcp.MENTIONED_WITHOUT_VALUE:
+            return self.const
+        if isinstance(self.nargs, int) or self.nargs in ("+", "*"):
+            return [arg.upper() for arg in new]
+        return new.upper()
+
+
 class RaisingArgumentParser(argparse.ArgumentParser):
     def exit(self, status=0, message=None):
         if status:
@@ -280,6 +307,22 @@ def test_validate_type():
         mcp_parser.add_config("c1", type=1)
 
 
+def test_custom_action():
+    mcp_parser = mcp.ConfigParser()
+    mcp_parser.add_config("c1", action=UcStoreConfigSpec)
+    mcp_parser.add_config("c2", action=UcStoreConfigSpec, nargs=2)
+    mcp_parser.add_source(mcp.DictSource, {"c1": "abc", "c2": ["def", "ghi"]})
+    values = mcp_parser.parse_config()
+    expected_values = mcp._namespace_from_dict(
+        {"c1": "ABC", "c2": ["DEF", "GHI"]}
+    )
+    assert values == expected_values
+
+    with pytest.raises(Exception):
+        mcp_parser = mcp.ConfigParser()
+        mcp_parser.add_config("c1", action=UcStoreConfigSpec, type=int)
+
+
 def test_count():
     mcp_parser = mcp.ConfigParser()
     mcp_parser.add_config("c1", action="count")
@@ -506,8 +549,8 @@ for action, nargs, input_nargs, type in (
     nargs_test_specs.append(
         Spec(
             id=(
-                f"nargs_with_valid_input; action={action}; nargs={nargs}; "
-                f"args=yes_{input_nargs}; type={type.__name__}"
+                f"nargs_with_valid_input, action={action}, nargs={nargs}, "
+                f"args=yes_{input_nargs}, type={type.__name__}"
             ),
             config_args={"action": action, "nargs": nargs, "type": type},
             dict_source=dict_value,
@@ -530,8 +573,8 @@ for action, nargs, input_nargs, type in (
     nargs_test_specs.append(
         Spec(
             id=(
-                f"nargs_with_invalid_input; action={action}; nargs={nargs}; "
-                f"args=yes_{input_nargs}; type={type.__name__}"
+                f"nargs_with_invalid_input, action={action}, nargs={nargs}, "
+                f"args=yes_{input_nargs}, type={type.__name__}"
             ),
             config_args={"action": action, "nargs": nargs, "type": type},
             dict_source=dict_value,
@@ -547,8 +590,8 @@ for action, nargs in itertools.product(
     nargs_test_specs.append(
         Spec(
             id=(
-                f"nargs_with_invalid_const; action={action}; nargs={nargs}; "
-                f"args=no; type={type.__name__}; const=yes"
+                f"nargs_with_invalid_const, action={action}, nargs={nargs}, "
+                f"args=no, type={type.__name__}, const=yes"
             ),
             config_args={
                 "action": action,
@@ -589,8 +632,8 @@ for action, nargs in itertools.product(
     nargs_test_specs.append(
         Spec(
             id=(
-                f"nargs_with_default; action={action}; nargs={nargs}; "
-                f"args=yes_{nargs}; type={type.__name__}; default=yes"
+                f"nargs_with_default, action={action}, nargs={nargs}, "
+                f"args=yes_{nargs}, type={type.__name__}, default=yes"
             ),
             config_args={
                 "action": action,
@@ -607,8 +650,8 @@ for action, nargs in itertools.product(
     nargs_test_specs.append(
         Spec(
             id=(
-                f"nargs_with_default; action={action}; nargs={nargs}; "
-                f"args=no; type={type.__name__}; default=yes"
+                f"nargs_with_default, action={action}, nargs={nargs}, "
+                f"args=no, type={type.__name__}, default=yes"
             ),
             config_args={
                 "action": action,
@@ -625,8 +668,8 @@ for action, nargs in itertools.product(
     nargs_test_specs.append(
         Spec(
             id=(
-                f"nargs_with_global_default; action={action}; nargs={nargs}; "
-                f"args=yes_{nargs}; type={type.__name__}; global_default=yes"
+                f"nargs_with_global_default, action={action}, nargs={nargs}, "
+                f"args=yes_{nargs}, type={type.__name__}, global_default=yes"
             ),
             config_parser_args={"config_default": global_default_value},
             config_args={"action": action, "nargs": nargs, "type": type},
@@ -639,8 +682,8 @@ for action, nargs in itertools.product(
     nargs_test_specs.append(
         Spec(
             id=(
-                f"nargs_with_global_default; action={action}; nargs={nargs}; "
-                f"args=no; type={type.__name__}; global_default=yes"
+                f"nargs_with_global_default, action={action}, nargs={nargs}, "
+                f"args=no, type={type.__name__}, global_default=yes"
             ),
             config_parser_args={"config_default": global_default_value},
             config_args={"action": action, "nargs": nargs, "type": type},
@@ -653,9 +696,9 @@ for action, nargs in itertools.product(
     nargs_test_specs.append(
         Spec(
             id=(
-                f"nargs_with_default_and_global_default; action={action}; "
-                f"nargs={nargs}; args=yes_{nargs}; type={type.__name__};"
-                f"default=yes; global_default=yes"
+                f"nargs_with_default_and_global_default, action={action}, "
+                f"nargs={nargs}, args=yes_{nargs}, type={type.__name__},"
+                f"default=yes, global_default=yes"
             ),
             config_parser_args={"config_default": global_default_value},
             config_args={
@@ -673,9 +716,9 @@ for action, nargs in itertools.product(
     nargs_test_specs.append(
         Spec(
             id=(
-                f"nargs_with_default_and_global_default; action={action}; "
-                f"nargs={nargs}; args=no; type={type.__name__}; "
-                f"default=yes; global_default=yes"
+                f"nargs_with_default_and_global_default, action={action}, "
+                f"nargs={nargs}, args=no, type={type.__name__}, "
+                f"default=yes, global_default=yes"
             ),
             config_parser_args={"config_default": global_default_value},
             config_args={
@@ -714,8 +757,8 @@ for action in ("store", "append", "extend"):
     nargs_test_specs.append(
         Spec(
             id=(
-                f"nargs_0_or_1_with_const; action={action}; nargs=?; args=no; "
-                f"type={type.__name__}; const=yes"
+                f"nargs_0_or_1_with_const, action={action}, nargs=?, args=no, "
+                f"type={type.__name__}, const=yes"
             ),
             config_args={
                 "action": action,
@@ -732,8 +775,8 @@ for action in ("store", "append", "extend"):
     nargs_test_specs.append(
         Spec(
             id=(
-                f"nargs_0_or_1_with_const; action={action}; nargs=?; "
-                f"args=yes1; type={type.__name__}; const=yes"
+                f"nargs_0_or_1_with_const, action={action}, nargs=?, "
+                f"args=yes1, type={type.__name__}, const=yes"
             ),
             config_args={
                 "action": action,
@@ -750,8 +793,8 @@ for action in ("store", "append", "extend"):
     nargs_test_specs.append(
         Spec(
             id=(
-                f"nargs_0_or_1_with_const; action={action}; nargs=?; "
-                f"args=yes0; type={type.__name__}; const=yes"
+                f"nargs_0_or_1_with_const, action={action}, nargs=?, "
+                f"args=yes0, type={type.__name__}, const=yes"
             ),
             config_args={
                 "action": action,
@@ -768,8 +811,8 @@ for action in ("store", "append", "extend"):
     nargs_test_specs.append(
         Spec(
             id=(
-                f"nargs_0_or_1_with_const; action={action}; nargs=?; args=no; "
-                f"type={type.__name__}; default=yes; const=yes"
+                f"nargs_0_or_1_with_const, action={action}, nargs=?, args=no, "
+                f"type={type.__name__}, default=yes, const=yes"
             ),
             config_args={
                 "action": action,
@@ -787,8 +830,8 @@ for action in ("store", "append", "extend"):
     nargs_test_specs.append(
         Spec(
             id=(
-                f"nargs_0_or_1_with_const; action={action}; nargs=?; "
-                f"args=yes1; type={type.__name__}; default=yes; const=yes"
+                f"nargs_0_or_1_with_const, action={action}, nargs=?, "
+                f"args=yes1, type={type.__name__}, default=yes, const=yes"
             ),
             config_args={
                 "action": action,
@@ -806,8 +849,8 @@ for action in ("store", "append", "extend"):
     nargs_test_specs.append(
         Spec(
             id=(
-                f"nargs_0_or_1_with_const; action={action}; nargs=?; "
-                f"args=yes0; type={type.__name__}; default=yes; const=yes"
+                f"nargs_0_or_1_with_const, action={action}, nargs=?, "
+                f"args=yes0, type={type.__name__}, default=yes, const=yes"
             ),
             config_args={
                 "action": action,
@@ -826,28 +869,28 @@ test_specs.extend(nargs_test_specs)
 
 store_const_test_specs = [
     Spec(
-        id="store_const; args=yes; const=no (missing const)",
+        id="store_const, args=yes, const=no (missing const)",
         config_args={"action": "store_const"},
         dict_source=None,
         argparse_source="--c",
         expected=Exception,
     ),
     Spec(
-        id="store_const; args=yes",
+        id="store_const, args=yes",
         config_args={"action": "store_const", "const": "c"},
         dict_source=None,
         argparse_source="--c",
         expected="c",
     ),
     Spec(
-        id="store_const; args=invalid1",
+        id="store_const, args=invalid1",
         config_args={"action": "store_const", "const": "c"},
         dict_source="v",
         argparse_source="--c v",
         expected=Exception,
     ),
     Spec(
-        id="store_const; args=no; default=yes",
+        id="store_const, args=no, default=yes",
         config_args={"action": "store_const", "const": "c", "default": "d"},
         dict_source=mcp.NOT_GIVEN,
         argparse_source="",
@@ -858,35 +901,35 @@ test_specs.extend(store_const_test_specs)
 
 store_true_test_specs = [
     Spec(
-        id="store_true; args=yes; const=yes (invalid const)",
+        id="store_true, args=yes, const=yes (invalid const)",
         config_args={"action": "store_true", "const": "v"},
         dict_source=None,
         argparse_source="--c",
         expected=Exception,
     ),
     Spec(
-        id="store_true; args=no",
+        id="store_true, args=no",
         config_args={"action": "store_true"},
         dict_source=mcp.NOT_GIVEN,
         argparse_source="",
         expected=False,
     ),
     Spec(
-        id="store_true; args=yes",
+        id="store_true, args=yes",
         config_args={"action": "store_true"},
         dict_source=None,
         argparse_source="--c",
         expected=True,
     ),
     Spec(
-        id="store_true; args=invalid1",
+        id="store_true, args=invalid1",
         config_args={"action": "store_true"},
         dict_source="v",
         argparse_source="--c v",
         expected=Exception,
     ),
     Spec(
-        id="store_true; args=no; default=yes",
+        id="store_true, args=no, default=yes",
         config_args={"action": "store_true", "default": "d"},
         dict_source=mcp.NOT_GIVEN,
         argparse_source="",
@@ -897,35 +940,35 @@ test_specs.extend(store_true_test_specs)
 
 store_false_test_specs = [
     Spec(
-        id="store_false; args=yes; const=yes (invalid const)",
+        id="store_false, args=yes, const=yes (invalid const)",
         config_args={"action": "store_false", "const": "v"},
         dict_source=None,
         argparse_source="--c",
         expected=Exception,
     ),
     Spec(
-        id="store_false; args=no",
+        id="store_false, args=no",
         config_args={"action": "store_false"},
         dict_source=mcp.NOT_GIVEN,
         argparse_source="",
         expected=True,
     ),
     Spec(
-        id="store_false; args=yes",
+        id="store_false, args=yes",
         config_args={"action": "store_false"},
         dict_source=None,
         argparse_source="--c",
         expected=False,
     ),
     Spec(
-        id="store_false; args=invalid1",
+        id="store_false, args=invalid1",
         config_args={"action": "store_false"},
         dict_source="v",
         argparse_source="--c v",
         expected=Exception,
     ),
     Spec(
-        id="store_false; args=no; default=yes",
+        id="store_false, args=no, default=yes",
         config_args={"action": "store_false", "default": "d"},
         dict_source=mcp.NOT_GIVEN,
         argparse_source="",
@@ -956,7 +999,7 @@ for action, nargs, const in itertools.chain(
     suppress_test_specs.append(
         Spec(
             id=(
-                f"suppress; action={action}; nargs={nargs}; args=no; "
+                f"suppress, action={action}, nargs={nargs}, args=no, "
                 f"default=suppress"
             ),
             config_args={
@@ -973,8 +1016,8 @@ for action, nargs, const in itertools.chain(
     suppress_test_specs.append(
         Spec(
             id=(
-                f"suppress; action={action}; nargs={nargs}; args=no; "
-                f"default=none; config_default=suppress"
+                f"suppress, action={action}, nargs={nargs}, args=no, "
+                f"default=none, config_default=suppress"
             ),
             config_args={"action": action, **extra_config_args},
             config_parser_args={"config_default": mcp.SUPPRESS},
@@ -1000,8 +1043,8 @@ for action, type in itertools.product(("store", "append", "extend"), TYPES):
     required_test_specs.append(
         Spec(
             id=(
-                f"required; action={action}; nargs=no; args=yes; "
-                f"type={type.__name__}; required=yes, default=no"
+                f"required, action={action}, nargs=no, args=yes, "
+                f"type={type.__name__}, required=yes, default=no"
             ),
             config_args={"action": action, "required": True, "type": type},
             dict_source=dict_value,
@@ -1013,8 +1056,8 @@ for action, type in itertools.product(("store", "append", "extend"), TYPES):
     required_test_specs.append(
         Spec(
             id=(
-                f"required; action={action}; nargs=no; args=no; "
-                f"type={type.__name__}; required=yes, default=yes"
+                f"required, action={action}, nargs=no, args=no, "
+                f"type={type.__name__}, required=yes, default=yes"
             ),
             config_args={
                 "action": action,
@@ -1030,7 +1073,7 @@ for action, type in itertools.product(("store", "append", "extend"), TYPES):
     )
     required_test_specs.append(
         Spec(
-            id=f"required; action={action}; nargs=no; args=no; required=yes",
+            id=f"required, action={action}, nargs=no, args=no, required=yes",
             config_args={"action": action, "required": True, "type": type},
             dict_source=mcp.NOT_GIVEN,
             argparse_source="",
@@ -1066,8 +1109,8 @@ for action, type, index, category in itertools.product(
     choices_test_specs.append(
         Spec(
             id=(
-                f"choices; action={action}; nargs=no; args=yes; "
-                f"type={type.__name__}; choices={choices}; "
+                f"choices, action={action}, nargs=no, args=yes, "
+                f"type={type.__name__}, choices={choices}, "
                 f"choice={category}{index}"
             ),
             config_args={"action": action, "choices": choices, "type": type},

pip install -e .
parse_log_pytest
pytest
pytest
3.7
pytest --no-header -rA --tb=line --color=no -p no:cacheprovider -W ignore::DeprecationWarning
attrs @ file:///croot/attrs_1668696182826/work
certifi @ file:///croot/certifi_1671487769961/work/certifi
flit_core @ file:///opt/conda/conda-bld/flit-core_1644941570762/work/source/flit_core
importlib-metadata @ file:///tmp/build/80754af9/importlib-metadata_1648562407465/work
iniconfig @ file:///home/linux1/recipes/ci/iniconfig_1610983019677/work
-e git+https://github.com/jonathanhaigh/multiconfparse.git@fc1fbc926365e68cdd349fd8e634612d628f43a3#egg=multiconfparse
packaging @ file:///croot/packaging_1671697413597/work
pluggy @ file:///tmp/build/80754af9/pluggy_1648042572264/work
py @ file:///opt/conda/conda-bld/py_1644396412707/work
pytest==7.1.2
tomli @ file:///opt/conda/conda-bld/tomli_1657175507142/work
typing_extensions @ file:///croot/typing_extensions_1669924550328/work
zipp @ file:///croot/zipp_1672387121353/work

name: multiconfparse
channels:
  - defaults
  - https://repo.anaconda.com/pkgs/main
  - https://repo.anaconda.com/pkgs/r
  - conda-forge
dependencies:
  - _libgcc_mutex=0.1=main
  - _openmp_mutex=5.1=1_gnu
  - attrs=22.1.0=py37h06a4308_0
  - ca-certificates=2025.2.25=h06a4308_0
  - certifi=2022.12.7=py37h06a4308_0
  - flit-core=3.6.0=pyhd3eb1b0_0
  - importlib-metadata=4.11.3=py37h06a4308_0
  - importlib_metadata=4.11.3=hd3eb1b0_0
  - iniconfig=1.1.1=pyhd3eb1b0_0
  - ld_impl_linux-64=2.40=h12ee557_0
  - libffi=3.4.4=h6a678d5_1
  - libgcc-ng=11.2.0=h1234567_1
  - libgomp=11.2.0=h1234567_1
  - libstdcxx-ng=11.2.0=h1234567_1
  - ncurses=6.4=h6a678d5_0
  - openssl=1.1.1w=h7f8727e_0
  - packaging=22.0=py37h06a4308_0
  - pip=22.3.1=py37h06a4308_0
  - pluggy=1.0.0=py37h06a4308_1
  - py=1.11.0=pyhd3eb1b0_0
  - pytest=7.1.2=py37h06a4308_0
  - python=3.7.16=h7a1cb2a_0
  - readline=8.2=h5eee18b_0
  - setuptools=65.6.3=py37h06a4308_0
  - sqlite=3.45.3=h5eee18b_0
  - tk=8.6.14=h39e8969_0
  - tomli=2.0.1=py37h06a4308_0
  - typing_extensions=4.4.0=py37h06a4308_0
  - wheel=0.38.4=py37h06a4308_0
  - xz=5.6.4=h5eee18b_1
  - zipp=3.11.0=py37h06a4308_0
  - zlib=1.2.13=h5eee18b_1
prefix: /opt/conda/envs/multiconfparse

tests/test_multiconfparse.py::test_custom_action
tests/test_multiconfparse.py::test_partially_parse_config tests/test_multiconfparse.py::test_types tests/test_multiconfparse.py::test_file_opening tests/test_multiconfparse.py::test_valid_name[c1] tests/test_multiconfparse.py::test_valid_name[c_] tests/test_multiconfparse.py::test_valid_name[C] tests/test_multiconfparse.py::test_valid_name[_c] tests/test_multiconfparse.py::test_invalid_name[-c] tests/test_multiconfparse.py::test_invalid_name[c-] tests/test_multiconfparse.py::test_invalid_name[1c] tests/test_multiconfparse.py::test_validate_type tests/test_multiconfparse.py::test_count tests/test_multiconfparse.py::test_count_with_default tests/test_multiconfparse.py::test_count_missing tests/test_multiconfparse.py::test_count_required_missing tests/test_multiconfparse.py::test_count_required_missing_with_default tests/test_multiconfparse.py::test_count_missing_with_default tests/test_multiconfparse.py::test_priorities tests/test_multiconfparse.py::test_priorities_with_default tests/test_multiconfparse.py::test_priorities_with_multiple_values_from_source tests/test_multiconfparse.py::test_priorities_stable_sort tests/test_multiconfparse.py::test_dict_source_none_values tests/test_multiconfparse.py::test_env_source_none_values tests/test_multiconfparse.py::test_json_source_none_values tests/test_multiconfparse.py::test_spec_with_dict[nargs_with_valid_input, tests/test_multiconfparse.py::test_spec_with_dict[nargs_with_invalid_input, tests/test_multiconfparse.py::test_spec_with_dict[nargs_with_invalid_const, tests/test_multiconfparse.py::test_spec_with_dict[nargs_with_default, tests/test_multiconfparse.py::test_spec_with_dict[nargs_with_global_default, tests/test_multiconfparse.py::test_spec_with_dict[nargs_with_default_and_global_default, tests/test_multiconfparse.py::test_spec_with_dict[nargs_0_or_1_with_const, tests/test_multiconfparse.py::test_spec_with_dict[store_const, tests/test_multiconfparse.py::test_spec_with_dict[store_true, tests/test_multiconfparse.py::test_spec_with_dict[store_false, tests/test_multiconfparse.py::test_spec_with_dict[suppress, tests/test_multiconfparse.py::test_spec_with_dict[required, tests/test_multiconfparse.py::test_spec_with_dict[choices, tests/test_multiconfparse.py::test_spec_with_env[nargs_with_valid_input, tests/test_multiconfparse.py::test_spec_with_env[nargs_with_invalid_input, tests/test_multiconfparse.py::test_spec_with_env[nargs_with_invalid_const, tests/test_multiconfparse.py::test_spec_with_env[nargs_with_default, tests/test_multiconfparse.py::test_spec_with_env[nargs_with_global_default, tests/test_multiconfparse.py::test_spec_with_env[nargs_with_default_and_global_default, tests/test_multiconfparse.py::test_spec_with_env[nargs_0_or_1_with_const, tests/test_multiconfparse.py::test_spec_with_env[store_const, tests/test_multiconfparse.py::test_spec_with_env[store_true, tests/test_multiconfparse.py::test_spec_with_env[store_false, tests/test_multiconfparse.py::test_spec_with_env[suppress, tests/test_multiconfparse.py::test_spec_with_env[required, tests/test_multiconfparse.py::test_spec_with_env[choices, tests/test_multiconfparse.py::test_spec_with_json[nargs_with_valid_input, tests/test_multiconfparse.py::test_spec_with_json[nargs_with_invalid_input, tests/test_multiconfparse.py::test_spec_with_json[nargs_with_invalid_const, tests/test_multiconfparse.py::test_spec_with_json[nargs_with_default, tests/test_multiconfparse.py::test_spec_with_json[nargs_with_global_default, tests/test_multiconfparse.py::test_spec_with_json[nargs_with_default_and_global_default, tests/test_multiconfparse.py::test_spec_with_json[nargs_0_or_1_with_const, tests/test_multiconfparse.py::test_spec_with_json[store_const, tests/test_multiconfparse.py::test_spec_with_json[store_true, tests/test_multiconfparse.py::test_spec_with_json[store_false, tests/test_multiconfparse.py::test_spec_with_json[suppress, tests/test_multiconfparse.py::test_spec_with_json[required, tests/test_multiconfparse.py::test_spec_with_json[choices, tests/test_multiconfparse.py::test_spec_with_argparse[nargs_with_valid_input, tests/test_multiconfparse.py::test_spec_with_argparse[nargs_with_invalid_input, tests/test_multiconfparse.py::test_spec_with_argparse[nargs_with_invalid_const, tests/test_multiconfparse.py::test_spec_with_argparse[nargs_with_default, tests/test_multiconfparse.py::test_spec_with_argparse[nargs_with_global_default, tests/test_multiconfparse.py::test_spec_with_argparse[nargs_with_default_and_global_default, tests/test_multiconfparse.py::test_spec_with_argparse[nargs_0_or_1_with_const, tests/test_multiconfparse.py::test_spec_with_argparse[store_const, tests/test_multiconfparse.py::test_spec_with_argparse[store_true, tests/test_multiconfparse.py::test_spec_with_argparse[store_false, tests/test_multiconfparse.py::test_spec_with_argparse[suppress, tests/test_multiconfparse.py::test_spec_with_argparse[required, tests/test_multiconfparse.py::test_spec_with_argparse[choices, tests/test_multiconfparse.py::test_spec_against_argparse[nargs_with_valid_input, tests/test_multiconfparse.py::test_spec_against_argparse[nargs_with_invalid_input, tests/test_multiconfparse.py::test_spec_against_argparse[nargs_with_invalid_const, tests/test_multiconfparse.py::test_spec_against_argparse[nargs_with_default, tests/test_multiconfparse.py::test_spec_against_argparse[nargs_with_global_default, tests/test_multiconfparse.py::test_spec_against_argparse[nargs_with_default_and_global_default, tests/test_multiconfparse.py::test_spec_against_argparse[nargs_0_or_1_with_const, tests/test_multiconfparse.py::test_spec_against_argparse[store_const, tests/test_multiconfparse.py::test_spec_against_argparse[store_true, tests/test_multiconfparse.py::test_spec_against_argparse[store_false, tests/test_multiconfparse.py::test_spec_against_argparse[suppress, tests/test_multiconfparse.py::test_spec_against_argparse[required, tests/test_multiconfparse.py::test_spec_against_argparse[choices, tests/test_multiconfparse.py::test_simple_argparse_source_with_config_added_after_source tests/test_multiconfparse.py::test_simple_argparse_source_with_prog tests/test_multiconfparse.py::test_simple_argparse_source_with_count tests/test_multiconfparse.py::test_simple_argparse_source_with_count_with_default tests/test_multiconfparse.py::test_simple_argparse_source_with_count_missing tests/test_multiconfparse.py::test_simple_argparse_source_with_count_required_missing tests/test_multiconfparse.py::test_simple_argparse_source_with_count_required_missing_with_default tests/test_multiconfparse.py::test_simple_argparse_source_with_count_missing_with_default tests/test_multiconfparse.py::test_json_source_with_config_added_after_source tests/test_multiconfparse.py::test_multiple_sources tests/test_multiconfparse.py::test_include_exclude tests/test_multiconfparse.py::test_getattr_or_none tests/test_multiconfparse.py::test_has_nonnone_attr
multiconfparse/__init__.py
multiconfparse/__init__.py