15.2.102. camcops_server.cc_modules.cc_formatter


Copyright (C) 2012-2020 Rudolf Cardinal (rudolf@pobox.com).

This file is part of CamCOPS.

CamCOPS is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version.

CamCOPS is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details.

You should have received a copy of the GNU General Public License along with CamCOPS. If not, see <https://www.gnu.org/licenses/>.

**Safe alternative to str.format() that rejects anything not in the list of

allowed keys.**

class camcops_server.cc_modules.cc_formatter.SafeFormatter(allowed_keys: Sequence[str])[source]

Safe alternative to str.format() that rejects anything not in the list of allowed keys.

Basic usage:

from camcops_server.cc_modules.cc_formatter import SafeFormatter

f = SafeFormatter(["a", "b"])

f.format("a={a}, b={b}", a=1, b=2)  # OK
f.format("a={a.__class__}", a=1)  # raises KeyError
f.format("a={a}, b={b}, c={c}", a=1, b=2, c=3)  # raises KeyError
__init__(allowed_keys: Sequence[str]) → None[source]

allowed_keys – Keys that are permitted within a brace-delimited format string.

get_field(field_name: str, args: Sequence[Any], kwargs: Mapping[str, Any]) → Tuple[Any, str][source]

Overrides Formatter.get_field() (q.v.).

  • field_name – name of the field to be looked up

  • args – positional arguments passed to format() (not including the format string)

  • kwargs – keyword arguments passed to format()


(obj, arg_used) where obj is the object that’s been looked up, and arg_used is the argument it came from

Return type


:raises - KeyError if the field_name is disallowed:

get_valid_parameters_string() → str[source]

Returns a string, such as {a}, {b}, that enumerates the parameters allowed (e.g. for user help).

validate(format_string: str) → None[source]

Checks a format string for validity.


format_string – string to check

:raises - KeyError for unknown key: :raises - ValueError for unmatched {: