lomas_server.administration.scripts package

Submodules

lomas_server.administration.scripts.keycloak_setup module

class lomas_server.administration.scripts.keycloak_setup.Config(_case_sensitive: bool | None = None, _nested_model_default_partial_update: 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_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_exit_on_error: bool | None = None, _cli_prefix: str | None = None, _cli_flag_prefix_char: str | None = None, _cli_implicit_flags: bool | None = None, _cli_ignore_unknown_args: bool | None = None, _cli_kebab_case: bool | None = None, _secrets_dir: PathType | None = None, *, keycloak_url: Annotated[Url, UrlConstraints(max_length=2083, allowed_schemes=['http', 'https'], host_required=None, default_host=None, default_port=None, default_path=None)], keycloak_authentication_realm: str, keycloak_admin_client_id: str, keycloak_admin_user: str, keycloak_admin_pwd: str, lomas_realm: str = 'lomas', lomas_gateway_url: Annotated[Url, UrlConstraints(max_length=2083, allowed_schemes=['http', 'https'], host_required=None, default_host=None, default_port=None, default_path=None)], lomas_gateway_client_id: str = 'lomas_oauth_proxy', lomas_gateway_client_secret: str, lomas_admin_client_id: str = 'lomas_admin', lomas_admin_client_secret: str, lomas_api_client_id: str = 'lomas_api', lomas_api_client_secret: str, lomas_admin_users: dict[int, User], overwrite_realm: bool = True)[source]

Bases: BaseSettings

Config model for keycloak setup script.

keycloak_admin_client_id: str
keycloak_admin_pwd: str
keycloak_admin_user: str
keycloak_authentication_realm: str
keycloak_url: Annotated[Url, UrlConstraints(max_length=2083, allowed_schemes=['http', 'https'], host_required=None, default_host=None, default_port=None, default_path=None)]
property keycloak_use_tls: bool

Using TLS ?

lomas_admin_client_id: str
lomas_admin_client_secret: str
lomas_admin_users: dict[int, User]
lomas_api_client_id: str
lomas_api_client_secret: str
lomas_gateway_client_id: str
lomas_gateway_client_secret: str
lomas_gateway_url: Annotated[Url, UrlConstraints(max_length=2083, allowed_schemes=['http', 'https'], host_required=None, default_host=None, default_port=None, default_path=None)]
lomas_realm: str
model_computed_fields: ClassVar[dict[str, ComputedFieldInfo]] = {'keycloak_use_tls': ComputedFieldInfo(wrapped_property=<property object>, return_type=<class 'bool'>, alias=None, alias_priority=None, title=None, field_title_generator=None, description='Using TLS ?', deprecated=None, examples=None, json_schema_extra=None, repr=True)}

A dictionary of computed field names and their corresponding ComputedFieldInfo objects.

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_use_class_docs_for_groups': False, 'enable_decoding': True, 'env_file': '.env.lomas_kc_setup', 'env_file_encoding': None, 'env_ignore_empty': False, 'env_nested_delimiter': '__', 'env_nested_max_split': None, 'env_parse_enums': None, 'env_parse_none_str': None, 'env_prefix': 'lomas_kc_setup_', 'extra': 'ignore', '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_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]] = {'keycloak_admin_client_id': FieldInfo(annotation=str, required=True), 'keycloak_admin_pwd': FieldInfo(annotation=str, required=True), 'keycloak_admin_user': FieldInfo(annotation=str, required=True), 'keycloak_authentication_realm': FieldInfo(annotation=str, required=True), 'keycloak_url': FieldInfo(annotation=Url, required=True, metadata=[UrlConstraints(max_length=2083, allowed_schemes=['http', 'https'], host_required=None, default_host=None, default_port=None, default_path=None)]), 'lomas_admin_client_id': FieldInfo(annotation=str, required=False, default='lomas_admin'), 'lomas_admin_client_secret': FieldInfo(annotation=str, required=True), 'lomas_admin_users': FieldInfo(annotation=dict[int, User], required=True), 'lomas_api_client_id': FieldInfo(annotation=str, required=False, default='lomas_api'), 'lomas_api_client_secret': FieldInfo(annotation=str, required=True), 'lomas_gateway_client_id': FieldInfo(annotation=str, required=False, default='lomas_oauth_proxy'), 'lomas_gateway_client_secret': FieldInfo(annotation=str, required=True), 'lomas_gateway_url': FieldInfo(annotation=Url, required=True, metadata=[UrlConstraints(max_length=2083, allowed_schemes=['http', 'https'], host_required=None, default_host=None, default_port=None, default_path=None)]), 'lomas_realm': FieldInfo(annotation=str, required=False, default='lomas'), 'overwrite_realm': FieldInfo(annotation=bool, required=False, default=True)}

Metadata about the fields defined on the model, mapping of field names to [FieldInfo][pydantic.fields.FieldInfo].

This replaces Model.__fields__ from Pydantic V1.

overwrite_realm: bool
class lomas_server.administration.scripts.keycloak_setup.User(*, username: str, email: str, temp_password: str, first_name: str, last_name: str)[source]

Bases: BaseModel

BaseModel for informations of a keycloak user.

email: str
first_name: str
last_name: str
model_computed_fields: ClassVar[dict[str, ComputedFieldInfo]] = {}

A dictionary of computed field names and their corresponding ComputedFieldInfo objects.

model_config: ClassVar[ConfigDict] = {}

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

model_fields: ClassVar[dict[str, FieldInfo]] = {'email': FieldInfo(annotation=str, required=True), 'first_name': FieldInfo(annotation=str, required=True), 'last_name': FieldInfo(annotation=str, required=True), 'temp_password': FieldInfo(annotation=str, required=True), 'username': FieldInfo(annotation=str, required=True)}

Metadata about the fields defined on the model, mapping of field names to [FieldInfo][pydantic.fields.FieldInfo].

This replaces Model.__fields__ from Pydantic V1.

temp_password: str
username: str
lomas_server.administration.scripts.keycloak_setup.create_confidential_client(kc_admin: KeycloakAdmin, client_id: str, client_secret: str, roles: dict[str, list[str]] = {}) None[source]

Creates a confidential client with an associated service account.

Allows only for the client credentials flow and assigns the roles listed in the provided dictionary.

Only creates the account if it does not already exist.

Parameters:
  • kc_admin (KeycloakAdmin) – A KeycloakAdmin session.

  • client_id (str) – The client id to use.

  • client_secret (str) – The client secret to use.

  • roles (Dict[str, List[str]]) – A dictionary mapping of (realm, list of roles) pairs to assign to the associated service account.

lomas_server.administration.scripts.keycloak_setup.create_gateway_client(kc_admin: KeycloakAdmin, client_id: str, client_secret: str, gateway_hostname: Annotated[Url, UrlConstraints(max_length=2083, allowed_schemes=['http', 'https'], host_required=None, default_host=None, default_port=None, default_path=None)]) None[source]

Create a confidential client for the gateway.

This client will handle auth of the admin users to the various dashboards.

Parameters:
  • kc_admin (KeycloakAdmin) – The KeycloakAdmin instance.

  • client_id (str) – The client id.

  • client_secret (str) – The client secret.

  • gateway_hostname (HttpUrl) – The hostname (url) of the gateway.

lomas_server.administration.scripts.keycloak_setup.create_lomas_admin_users(config: Config, kc_admin: KeycloakAdmin) None[source]

Creates standard User.

lomas_server.administration.scripts.keycloak_setup.create_lomas_clients(config: Config, kc_admin: KeycloakAdmin) None[source]

Creates clients for the lomas application:

  • lomas_admin

  • lomas_api

Parameters:
  • config (Config) – Config for creating the clients.

  • kc_admin (KeycloakAdmin) – A KeycloakAdmin session.

lomas_server.administration.scripts.keycloak_setup.create_realm(config: Config, kc_admin: KeycloakAdmin) None[source]

Creates the application realm if it does not already exist.

This removes any existing realms with the same name if they already exist!

This does not reset the application realm!

Parameters:
  • config (Config) – Config for creating the realm.

  • kc_admin (KeycloakAdmin) – A KeycloakAdmin session.

lomas_server.administration.scripts.keycloak_setup.get_admin_session(config: Config) KeycloakAdmin[source]

Returns a keycloak admin session using the.

Parameters:

config (Config) – The config to create the connection.

Returns:

KeycloakAdmin session.

Return type:

KeycloakAdmin

lomas_server.administration.scripts.keycloak_setup.kc_setup() None[source]

Lomas keycloak setup script.

lomas_server.administration.scripts.keycloak_setup.misc_realm_cleanup(realm: str, kc_admin: KeycloakAdmin) None[source]

Remove deprecated key Provider.

lomas_server.administration.scripts.lomas_demo_setup module

class lomas_server.administration.scripts.lomas_demo_setup.DemoAdminConfig(_case_sensitive: bool | None = None, _nested_model_default_partial_update: 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_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_exit_on_error: bool | None = None, _cli_prefix: str | None = None, _cli_flag_prefix_char: str | None = None, _cli_implicit_flags: bool | None = None, _cli_ignore_unknown_args: bool | None = None, _cli_kebab_case: bool | None = None, _secrets_dir: PathType | None = None, *, server_url: str, server_service: str, mg_config: MongoDBConfig, kc_config: KeycloakClientConfig | None = None, path_prefix: str = '', user_yaml: str = '/data/collections/user_collection.yaml', dataset_yaml: str = '/data/collections/dataset_collection.yaml')[source]

Bases: AdminConfig

Extension of Admin config for demo setup.

dataset_yaml: str
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, '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_use_class_docs_for_groups': False, 'enable_decoding': True, 'env_file': '.env.lomas_admin', 'env_file_encoding': None, 'env_ignore_empty': False, 'env_nested_delimiter': '__', 'env_nested_max_split': None, 'env_parse_enums': None, 'env_parse_none_str': None, 'env_prefix': 'lomas_admin_', 'extra': 'ignore', '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_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]] = {'dataset_yaml': FieldInfo(annotation=str, required=False, default='/data/collections/dataset_collection.yaml'), 'kc_config': FieldInfo(annotation=Union[KeycloakClientConfig, NoneType], required=False, default=None), 'mg_config': FieldInfo(annotation=MongoDBConfig, required=True), 'path_prefix': FieldInfo(annotation=str, required=False, default=''), 'server_service': FieldInfo(annotation=str, required=True), 'server_url': FieldInfo(annotation=str, required=True), 'user_yaml': FieldInfo(annotation=str, required=False, default='/data/collections/user_collection.yaml')}

Metadata about the fields defined on the model, mapping of field names to [FieldInfo][pydantic.fields.FieldInfo].

This replaces Model.__fields__ from Pydantic V1.

path_prefix: str
user_yaml: str
lomas_server.administration.scripts.lomas_demo_setup.add_lomas_demo_data(config: DemoAdminConfig) None[source]

Adds the demo data to the mongodb admindb as well as the keycloak instance if required.

Meant to be used in the develop mode of the service or for testing

Parameters:

config (AdminConfig) – The administration config.

lomas_server.administration.scripts.lomas_demo_setup.lomas_demo_setup() None[source]

Script for setting up demo users and dataset.

Module contents