app.core package¶
Submodules¶
app.core.config module¶
-
class app.core.config.Settings(_case_sensitive: bool | None =
None, _env_prefix: str | 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_parse_none_str: str | None =None, _secrets_dir: str | Path | None =None, *, app_name: str ='Flux RESTFul API', api_version: str ='v1', has_gpus: bool =False, flux_nodes: int =1, require_auth: bool =False, db_file: str ='sqlite:///./flux-restful.db', flux_user: str ='fluxuser', flux_token: str | None =None, flux_server_mode: str | None ='single-user', secret_key: str ='lTHpFxFnVV41sL8ZkwM9uR9yp0nAfygp', access_token_expires_minutes: int =600, option_flags: dict ={}, known_launchers: list =['nextflow', 'snakemake'])[source]¶ Bases:
BaseSettingsBasic settings and defaults for the Flux RESTFul API
- access_token_expires_minutes : int¶
- api_version : str¶
- app_name : 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¶
-
model_computed_fields : ClassVar[dict[str, ComputedFieldInfo]] =
{}¶ A dictionary of computed field names and their corresponding ComputedFieldInfo objects.
-
model_config : ClassVar[SettingsConfigDict] =
{'arbitrary_types_allowed': True, 'case_sensitive': False, 'env_file': None, 'env_file_encoding': None, 'env_ignore_empty': False, 'env_nested_delimiter': None, 'env_parse_none_str': None, 'env_prefix': '', 'extra': 'forbid', 'json_file': None, 'json_file_encoding': None, 'protected_namespaces': ('model_', 'settings_'), 'secrets_dir': None, 'toml_file': None, 'validate_default': True, 'yaml_file': None, 'yaml_file_encoding': None}¶ Configuration for the model, should be a dictionary conforming to [ConfigDict][pydantic.config.ConfigDict].
-
model_fields : ClassVar[dict[str, FieldInfo]] =
{'access_token_expires_minutes': FieldInfo(annotation=int, required=False, default=600), 'api_version': FieldInfo(annotation=str, required=False, default='v1'), 'app_name': FieldInfo(annotation=str, required=False, default='Flux RESTFul API'), 'db_file': FieldInfo(annotation=str, required=False, default='sqlite:///./flux-restful.db'), 'flux_nodes': FieldInfo(annotation=int, required=False, default=1), 'flux_server_mode': FieldInfo(annotation=Union[str, NoneType], required=False, default='single-user'), 'flux_token': FieldInfo(annotation=Union[str, NoneType], required=False), 'flux_user': FieldInfo(annotation=str, required=False, default='fluxuser'), 'has_gpus': FieldInfo(annotation=bool, required=False, default=False), 'known_launchers': FieldInfo(annotation=list, required=False, default=['nextflow', 'snakemake']), 'option_flags': FieldInfo(annotation=dict, required=False, default={}), 'require_auth': FieldInfo(annotation=bool, required=False, default=False), 'secret_key': FieldInfo(annotation=str, required=False, default='lTHpFxFnVV41sL8ZkwM9uR9yp0nAfygp')}¶ Metadata about the fields defined on the model, mapping of field names to [FieldInfo][pydantic.fields.FieldInfo].
This replaces Model.__fields__ from Pydantic V1.
- option_flags : dict¶
- require_auth : bool¶
- secret_key : str¶
-
app.core.config.generate_secret_key(length=
32)[source]¶ Generate a secret key to encrypt, if one not provided.
-
app.core.config.get_bool_envar(key, default=
False)[source]¶ Get a boolean from the environment, meaning the value is set.
-
app.core.config.get_int_envar(key, default=
None)[source]¶ Get (and parse) an integer environment variable
-
app.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.
-
app.core.config.parse_option_flags(flags, prefix=
'-o')[source]¶ Parse key value pairs (optionally with a prefix) from the environment.
app.core.logging module¶
app.core.security module¶
-
app.core.security.create_access_token(subject: str | Any, expires_delta: timedelta | None =
None, secret_key=None) str[source]¶ Create a jwt access token.
We either use the user’s secret key (which is hashed) or fall back to the server set secret key.
- app.core.security.get_password_hash(password: str) str[source]¶
Note we aren’t providing a salt here, so the same password can generate different.
- app.core.security.verify_password(plain_password: str, hashed_password: str) bool[source]¶
Verify the password