flux_restful.core package

Submodules

flux_restful.core.config module

class flux_restful.core.config.Settings(_case_sensitive: bool | None = None, _nested_model_default_partial_update: bool | None = None, _env_prefix: str | None = None, _env_prefix_target: EnvPrefixTarget | None = None, _env_file: DotenvType | None = PosixPath('.'), _env_file_encoding: str | None = None, _env_ignore_empty: bool | None = None, _env_nested_delimiter: str | None = None, _env_nested_max_split: int | None = None, _env_parse_none_str: str | None = None, _env_parse_enums: bool | None = None, _cli_prog_name: str | None = None, _cli_parse_args: bool | list[str] | tuple[str, ...] | None = None, _cli_settings_source: CliSettingsSource[Any] | None = None, _cli_parse_none_str: str | None = None, _cli_hide_none_type: bool | None = None, _cli_avoid_json: bool | None = None, _cli_enforce_required: bool | None = None, _cli_use_class_docs_for_groups: bool | None = None, _cli_show_env_vars: bool | None = None, _cli_exit_on_error: bool | None = None, _cli_prefix: str | None = None, _cli_flag_prefix_char: str | None = None, _cli_implicit_flags: bool | 'dual' | 'toggle' | None = None, _cli_ignore_unknown_args: bool | None = None, _cli_kebab_case: bool | 'all' | 'no_enums' | None = None, _cli_shortcuts: Mapping[str, str | list[str]] | None = None, _secrets_dir: PathType | None = None, _build_sources: tuple[tuple[PydanticBaseSettingsSource, ...], dict[str, Any]] | None = None, *, app_name: str = 'Flux RESTFul API', api_version: str = 'v1', has_gpus: bool = False, flux_nodes: int = 1, auth_backend: str = 'none', require_auth: bool = False, admin_users: list[str] = [], secret_key: str | None = None, token_signing_key: str | None = None, min_uid: int = 1000, pam_service: str = 'login', oidc_issuer: str | None = None, oidc_audience: str | None = None, oidc_jwks_url: str | None = None, oidc_username_claim: str | None = None, db_file: str = 'sqlite:///./flux-restful.db', flux_user: str = 'fluxuser', flux_token: str | None = None, flux_server_mode: str | None = 'single-user', access_token_expires_minutes: int = 600, option_flags: dict = {}, known_launchers: list = ['nextflow', 'snakemake'])[source]

Bases: BaseSettings

Basic settings and defaults for the Flux RESTFul API

access_token_expires_minutes : int
admin_users : List[str]
api_version : str
app_name : str
auth_backend : str
db_file : str
flux_nodes : int
flux_server_mode : str | None
flux_token : str | None
flux_user : str
has_gpus : bool
known_launchers : list
min_uid : int
model_config : ClassVar[SettingsConfigDict] = {'arbitrary_types_allowed': True, 'case_sensitive': False, 'cli_avoid_json': False, 'cli_enforce_required': False, 'cli_exit_on_error': True, 'cli_flag_prefix_char': '-', 'cli_hide_none_type': False, 'cli_ignore_unknown_args': False, 'cli_implicit_flags': False, 'cli_kebab_case': False, 'cli_parse_args': None, 'cli_parse_none_str': None, 'cli_prefix': '', 'cli_prog_name': None, 'cli_shortcuts': None, 'cli_show_env_vars': False, 'cli_use_class_docs_for_groups': False, 'enable_decoding': True, 'env_file': None, 'env_file_encoding': None, 'env_ignore_empty': False, 'env_nested_delimiter': None, 'env_nested_max_split': None, 'env_parse_enums': None, 'env_parse_none_str': None, 'env_prefix': '', 'env_prefix_target': 'variable', 'extra': 'forbid', 'json_file': None, 'json_file_encoding': None, 'nested_model_default_partial_update': False, 'protected_namespaces': ('model_validate', 'model_dump', 'settings_customise_sources'), 'secrets_dir': None, 'toml_file': None, 'validate_default': True, 'yaml_config_section': None, 'yaml_file': None, 'yaml_file_encoding': None}

Configuration for the model, should be a dictionary conforming to [ConfigDict][pydantic.config.ConfigDict].

oidc_audience : str | None
oidc_issuer : str | None
oidc_jwks_url : str | None
oidc_username_claim : str | None
option_flags : dict
pam_service : str
require_auth : bool
secret_key : str | None
token_signing_key : str | None
flux_restful.core.config.generate_secret_key(length=32)[source]

Generate a random key, if one is not provided.

flux_restful.core.config.get_auth_backend() → str[source]

Determine the auth backend from FLUX_AUTH_BACKEND.

FLUX_REQUIRE_AUTH predates FLUX_AUTH_BACKEND: it meant database users plus the shared-secret token handshake, so it maps to “shared-secret”.

flux_restful.core.config.get_bool_envar(key, default=False)[source]

Get a boolean environment variable. Accepts 1/0, true/false, yes/no, on/off.

An unset or empty variable returns the default.

flux_restful.core.config.get_int_envar(key, default=None)[source]

Get (and parse) an integer environment variable

flux_restful.core.config.get_list_envar(key) → list[str][source]

Get a comma separated list from the environment.

flux_restful.core.config.get_option_flags(key, prefix='-o')[source]

Wrapper around parse_option_flags to get from environment.

The function can then be shared to parse flags from the UI in the same way.

flux_restful.core.config.parse_option_flags(flags, prefix='-o')[source]

Parse key value pairs (optionally with a prefix) from the environment.

flux_restful.core.logging module

flux_restful.core.logging.init_loggers(logger_name: str = 'flux-restful', level: int = 20)[source]

Configure the application logger to match uvicorn’s output format.

flux_restful.core.security module

flux_restful.core.security.get_password_hash(password: str) → str[source]

Hash a password with bcrypt (a random salt is generated per hash).

flux_restful.core.security.verify_password(plain_password: str, hashed_password: str) → bool[source]

Verify a plain password against a stored bcrypt hash.

Module contents