mex.editor package¶
Subpackages¶
- mex.editor.api package
- mex.editor.consent package
- Submodules
- mex.editor.consent.layout module
- mex.editor.consent.main module
- mex.editor.consent.state module
ConsentStateConsentState._send_rule_set_request()ConsentState.backend_varsConsentState.base_varsConsentState.class_subclassesConsentState.computed_varsConsentState.consent_statusConsentState.disable_projects_next_pageConsentState.disable_projects_previous_pageConsentState.disable_resources_next_pageConsentState.disable_resources_previous_pageConsentState.event_handlersConsentState.fetch_dataConsentState.get_all_dataConsentState.get_consentConsentState.get_consent_nav_items()ConsentState.go_to_next_pageConsentState.go_to_previous_pageConsentState.inherited_backend_varsConsentState.inherited_varsConsentState.is_loadingConsentState.limitConsentState.projects_current_pageConsentState.projects_totalConsentState.projects_total_pagesConsentState.resolve_identifiersConsentState.resources_current_pageConsentState.resources_totalConsentState.resources_total_pagesConsentState.scroll_to_topConsentState.set_consent_statusConsentState.set_is_loadingConsentState.set_limitConsentState.set_projects_current_pageConsentState.set_projects_pageConsentState.set_projects_totalConsentState.set_resources_current_pageConsentState.set_resources_pageConsentState.set_resources_totalConsentState.set_user_projectsConsentState.set_user_resourcesConsentState.setvarConsentState.show_submit_success_toastConsentState.submit_rule_setConsentState.user_projectsConsentState.user_resourcesConsentState.vars
- Module contents
- mex.editor.create package
- Submodules
- mex.editor.create.main module
- mex.editor.create.state module
CreateStateCreateState.available_stem_typesCreateState.backend_varsCreateState.base_varsCreateState.class_subclassesCreateState.computed_varsCreateState.event_handlersCreateState.inherited_backend_varsCreateState.inherited_varsCreateState.reset_stem_typeCreateState.set_available_stem_typesCreateState.set_stem_typeCreateState.setvarCreateState.vars
- Module contents
- mex.editor.edit package
- Submodules
- mex.editor.edit.main module
- mex.editor.edit.state module
EditStateEditState.any_primary_source_or_editor_value_enabledEditState.backend_varsEditState.base_varsEditState.class_subclassesEditState.computed_varsEditState.event_handlersEditState.inherited_backend_varsEditState.inherited_varsEditState.setvarEditState.show_submit_success_toast_on_redirectEditState.toggle_all_primary_source_and_editor_valuesEditState.vars
- Module contents
- mex.editor.ingest package
- Submodules
- mex.editor.ingest.main module
- mex.editor.ingest.models module
- mex.editor.ingest.state module
IngestStateIngestState.aux_providersIngestState.backend_varsIngestState.base_varsIngestState.class_subclassesIngestState.computed_varsIngestState.current_aux_providerIngestState.current_pageIngestState.current_results_lengthIngestState.disable_next_pageIngestState.disable_page_selectionIngestState.disable_previous_pageIngestState.event_handlersIngestState.flag_ingested_itemsIngestState.go_to_first_pageIngestState.go_to_next_pageIngestState.go_to_previous_pageIngestState.handle_submitIngestState.ingest_resultIngestState.inherited_backend_varsIngestState.inherited_varsIngestState.is_loadingIngestState.limitIngestState.page_selectionIngestState.query_stringIngestState.refreshIngestState.reset_query_stringIngestState.resolve_identifiersIngestState.results_extractedIngestState.results_transformedIngestState.scroll_to_topIngestState.set_aux_providersIngestState.set_current_aux_providerIngestState.set_current_pageIngestState.set_is_loadingIngestState.set_limitIngestState.set_pageIngestState.set_query_stringIngestState.set_results_extractedIngestState.set_results_transformedIngestState.set_totalIngestState.setvarIngestState.toggle_show_propertiesIngestState.totalIngestState.vars
- mex.editor.ingest.transform module
- Module contents
- mex.editor.login package
- Submodules
- mex.editor.login.main module
- mex.editor.login.state module
LoginLdapStateLoginLdapState.backend_varsLoginLdapState.base_varsLoginLdapState.class_subclassesLoginLdapState.computed_varsLoginLdapState.event_handlersLoginLdapState.inherited_backend_varsLoginLdapState.inherited_varsLoginLdapState.loginLoginLdapState.passwordLoginLdapState.set_passwordLoginLdapState.set_usernameLoginLdapState.setvarLoginLdapState.usernameLoginLdapState.vars
LoginMExStateLoginMExState.backend_varsLoginMExState.base_varsLoginMExState.class_subclassesLoginMExState.computed_varsLoginMExState.event_handlersLoginMExState.inherited_backend_varsLoginMExState.inherited_varsLoginMExState.loginLoginMExState.passwordLoginMExState.set_passwordLoginMExState.set_usernameLoginMExState.setvarLoginMExState.usernameLoginMExState.vars
- Module contents
- mex.editor.merge package
- Submodules
- mex.editor.merge.main module
- mex.editor.merge.state module
MergeStateMergeState._refresh_extracted()MergeState._refresh_merged()MergeState.backend_varsMergeState.base_varsMergeState.class_subclassesMergeState.clear_inputMergeState.computed_varsMergeState.entity_types_extractedMergeState.entity_types_mergedMergeState.event_handlersMergeState.handle_submitMergeState.inherited_backend_varsMergeState.inherited_varsMergeState.is_loadingMergeState.limitMergeState.query_stringsMergeState.refreshMergeState.resolve_identifiersMergeState.results_countMergeState.results_extractedMergeState.results_mergedMergeState.select_itemMergeState.selected_itemsMergeState.set_entity_type_extractedMergeState.set_entity_type_mergedMergeState.set_entity_types_extractedMergeState.set_entity_types_mergedMergeState.set_is_loadingMergeState.set_limitMergeState.set_query_stringsMergeState.set_results_countMergeState.set_results_extractedMergeState.set_results_mergedMergeState.set_selected_itemsMergeState.set_total_countMergeState.setvarMergeState.submit_merge_itemsMergeState.total_countMergeState.vars
- Module contents
- mex.editor.rules package
- Submodules
- mex.editor.rules.main module
additive_rule_input()badge_input()editor_additive_value()editor_edit_button()editor_field()editor_primary_source()editor_primary_source_stack()editor_static_value()editor_value_card()editor_value_switch()field_name_card()href_input()identifier_input()new_additive_button()primary_source_name()primary_source_switch()remove_additive_button()rule_page_header()submit_button()text_input()textarea_input()validation_errors()validation_message()
- mex.editor.rules.models module
- mex.editor.rules.state module
RuleStateRuleState._get_editable_primary_source_by_field_name()RuleState._get_extracted_items()RuleState._get_primary_sources_by_field_name()RuleState._get_rule_set()RuleState._send_rule_set_request()RuleState.add_additive_valueRuleState.backend_varsRuleState.base_varsRuleState.class_subclassesRuleState.clear_validation_messagesRuleState.computed_varsRuleState.event_handlersRuleState.fieldsRuleState.inherited_backend_varsRuleState.inherited_varsRuleState.is_submittingRuleState.item_idRuleState.item_titleRuleState.refreshRuleState.remove_additive_valueRuleState.resolve_identifiersRuleState.set_badge_valueRuleState.set_fieldsRuleState.set_href_valueRuleState.set_identifier_valueRuleState.set_is_submittingRuleState.set_item_idRuleState.set_item_titleRuleState.set_stem_typeRuleState.set_text_valueRuleState.set_validation_messagesRuleState.setvarRuleState.show_submit_success_toastRuleState.stem_typeRuleState.submit_rule_setRuleState.toggle_field_valueRuleState.toggle_field_value_editingRuleState.toggle_primary_sourceRuleState.translated_fieldsRuleState.validation_messagesRuleState.vars
- mex.editor.rules.transform module
_create_editor_primary_source()_get_primary_source_id_from_model()_transform_editor_value_to_model_value()_transform_fields_to_additive()_transform_fields_to_preventive()_transform_fields_to_subtractive()_transform_model_to_editor_primary_sources()_transform_model_to_input_config()_transform_model_values_to_editor_values()get_required_mergeable_field_names()transform_fields_to_rule_set()transform_models_to_fields()transform_validation_error_to_messages()
- Module contents
- mex.editor.search package
- Submodules
- mex.editor.search.main module
- mex.editor.search.models module
- mex.editor.search.state module
SearchStateSearchState.add_reference_field_filter_identifierSearchState.all_fields_for_entity_typesSearchState.backend_varsSearchState.base_varsSearchState.class_subclassesSearchState.computed_varsSearchState.current_pageSearchState.current_results_lengthSearchState.disable_next_pageSearchState.disable_page_selectionSearchState.disable_previous_pageSearchState.entity_typesSearchState.event_handlersSearchState.get_available_primary_sourcesSearchState.go_to_first_pageSearchState.go_to_next_pageSearchState.go_to_previous_pageSearchState.had_primary_sourcesSearchState.handle_submitSearchState.inherited_backend_varsSearchState.inherited_varsSearchState.is_loadingSearchState.limitSearchState.load_search_paramsSearchState.page_selectionSearchState.push_search_paramsSearchState.query_stringSearchState.reference_field_filterSearchState.reference_filter_strategySearchState.refreshSearchState.remove_reference_field_filter_identifierSearchState.resolve_identifiersSearchState.resultsSearchState.scroll_to_topSearchState.set_current_pageSearchState.set_entity_typeSearchState.set_entity_typesSearchState.set_had_primary_sourceSearchState.set_had_primary_sourcesSearchState.set_is_loadingSearchState.set_limitSearchState.set_pageSearchState.set_query_stringSearchState.set_reference_field_filterSearchState.set_reference_field_filter_identifierSearchState.set_reference_filter_fieldSearchState.set_reference_filter_strategySearchState.set_resultsSearchState.set_totalSearchState.setvarSearchState.totalSearchState.vars
- mex.editor.search.transform module
- mex.editor.search.value_label_select module
- Module contents
Submodules¶
mex.editor.components module¶
- mex.editor.components.icon_by_stem_type(stem_type: str | None = None, size: int | None = None, style: Style | None = None) Component | Var[Any]¶
Render an icon for the given stem type.
- mex.editor.components.pagination(state: type[IngestState | SearchState], *page_load_hooks: Callable[[], Any]) Component¶
Render pagination for navigating search results.
- mex.editor.components.render_additional_titles(titles: list[EditorValue]) Component¶
Render one title and if necessary a badge with tooltip and additional titles.
- mex.editor.components.render_badge(text: str | None) Component¶
Render a generic badge with the given text.
- mex.editor.components.render_external_link(value: EditorValue) Component¶
Render an editor value as a clickable external link that opens in a new tab.
- mex.editor.components.render_identifier(value: EditorValue) Component¶
Render an editor value as a clickable internal link that loads the edit page.
- mex.editor.components.render_link(value: EditorValue) Component¶
Render an editor value as an internal or external link.
- mex.editor.components.render_search_preview(values: list[EditorValue]) Component¶
Render a horizontal stack of editor values for a search preview.
- mex.editor.components.render_span(text: str | None) Component¶
Render a generic span with the given text.
- mex.editor.components.render_text(value: EditorValue) Component¶
Render an editor value as a text span.
- mex.editor.components.render_title(title: EditorValue) Component¶
Render one title in a container with hidden overflow.
- mex.editor.components.render_value(value: EditorValue) Component¶
Render a single editor value.
mex.editor.exceptions module¶
- mex.editor.exceptions.escalate_error(namespace: str, summary: str, payload: object) Generator[EventSpec, None, None]¶
Escalate an error by spreading it to the python and browser logs and the UI.
mex.editor.fields module¶
mex.editor.layout module¶
- mex.editor.layout.app_logo() Component¶
Return the app logo with icon and label.
- mex.editor.layout.language_switcher() Component¶
Render a language switcher.
Return a navigation bar component.
Return a link component for the given navigation item.
Render a dialog that informs the user about unsaved changes on the page.
If the dialog is dismissed navigation is stopped and the user stays on the page; otherwise navigate away.
- mex.editor.layout.page(*children: Component, user_type: str = 'user_mex', nav_items_source: list[NavItem] | None = None, include_navigate_dialog: bool = True) Component¶
Return a page fragment with navigation bar and given children.
- Parameters:
*children – Components to render in the page body
user_type – State attribute to check for user login
nav_items_source – Custom navigation items, if None uses default
include_navigate_dialog – Whether to include the navigate away dialog
- mex.editor.layout.user_button() Component¶
Return a user button with an icon that indicates their access rights.
Return a user menu with a trigger, the user’s name and a logout button.
mex.editor.locale_service module¶
- class mex.editor.locale_service.LocaleService¶
Bases:
objectA service singleton to control the current locale used by the app.
- __init__() None¶
Initialize with all available locales.
- classmethod get() Self¶
Get singleton instance of the LocaleService.
- Returns:
The LocaleService singleton.
- get_available_locales() Sequence[MExLocale]¶
Get all available locales.
- Returns:
All available locales.
- get_field_description(locale_id: str, stem_type: str, field_name: str) str¶
Get the description for a field in a given language.
- Parameters:
locale_id – The locale id of the language to use.
stem_type – The type the field belongs to.
field_name – The name of the field.
- Returns:
The description of the field.
- Return type:
str
- get_field_label(locale_id: str, stem_type: str, field_name: str, n: int = 1) str¶
Get the human readable form of the given field in a given language.
- Parameters:
locale_id – The locale id of the language to use.
stem_type – The entity type the field belongs to.
field_name – The name of the field.
n (optional) – Number to pass to ngettext to determine if plural form is
1. (used. Defaults to)
- Returns:
The human readable name of the field.
- Return type:
str
- class mex.editor.locale_service.MExLocale(*, id: str, label: str, filepath: Path)¶
Bases:
BaseModelRepresents a locale with id and label.
- filepath: Path¶
- id: str¶
- label: str¶
- model_computed_fields: ClassVar[Dict[str, ComputedFieldInfo]] = {}¶
A dictionary of computed field names and their corresponding ComputedFieldInfo objects.
- model_config: ClassVar[ConfigDict] = {'extra': 'ignore', 'populate_by_name': True, 'str_max_length': 100000, 'str_min_length': 1, 'str_strip_whitespace': True, 'use_enum_values': True, 'validate_assignment': True, 'validate_default': True}¶
Configuration for the model, should be a dictionary conforming to [ConfigDict][pydantic.config.ConfigDict].
- model_fields: ClassVar[Dict[str, FieldInfo]] = {'filepath': FieldInfo(annotation=Path, required=True), 'id': FieldInfo(annotation=str, required=True), 'label': FieldInfo(annotation=str, required=True)}¶
Metadata about the fields defined on the model, mapping of field names to [FieldInfo][pydantic.fields.FieldInfo] objects.
This replaces Model.__fields__ from Pydantic V1.
- mex.editor.locale_service.camelcase_to_title(value: str) str¶
Convert a camelcase string into title-cased words splitted by space.
- Parameters:
value – The camelcase string to convert.
- Returns:
The converted string containing title-cased words splitted by space.
mex.editor.logging module¶
mex.editor.main module¶
- mex.editor.main.editor_api() None¶
Start the editor api.
- mex.editor.main.editor_frontend() None¶
Start the editor frontend.
- mex.editor.main.main() None¶
Start the editor api together with frontend.
mex.editor.models module¶
- class mex.editor.models.EditorValue(*, text: str | None = None, identifier: str | None = None, badge: str | None = None, href: str | None = None, external: bool = False, enabled: bool = True, being_edited: bool = False, **extra_data: Any)¶
Bases:
BaseModel for describing atomic values in the editor.
- badge: str | None¶
- being_edited: bool¶
- enabled: bool¶
- external: bool¶
- href: str | None¶
- identifier: str | None¶
- text: str | None¶
- class mex.editor.models.MergedLoginPerson(*, identifier: MergedPersonIdentifier | None = None, full_name: list[str] | None = None, email: list[str] | None = None, orcid_id: list[str] | None = None, **extra_data: Any)¶
Bases:
BaseInfo on the currently logged-in user from the merged login endpoint.
- email: list[str] | None¶
- full_name: list[str] | None¶
- identifier: MergedPersonIdentifier | None¶
- orcid_id: list[str] | None¶
- class mex.editor.models.ModelConfig(*, title: str, preview: list[str] = [], textarea: list[str] = [])¶
Bases:
BaseModelConfiguration for how to display an entity type in the frontend.
- model_computed_fields: ClassVar[Dict[str, ComputedFieldInfo]] = {}¶
A dictionary of computed field names and their corresponding ComputedFieldInfo objects.
- model_config: ClassVar[ConfigDict] = {'extra': 'ignore', 'populate_by_name': True, 'str_max_length': 100000, 'str_min_length': 1, 'str_strip_whitespace': True, 'use_enum_values': True, 'validate_assignment': True, 'validate_default': True}¶
Configuration for the model, should be a dictionary conforming to [ConfigDict][pydantic.config.ConfigDict].
- model_fields: ClassVar[Dict[str, FieldInfo]] = {'preview': FieldInfo(annotation=list[str], required=False, default=[]), 'textarea': FieldInfo(annotation=list[str], required=False, default=[]), 'title': FieldInfo(annotation=str, required=True)}¶
Metadata about the fields defined on the model, mapping of field names to [FieldInfo][pydantic.fields.FieldInfo] objects.
This replaces Model.__fields__ from Pydantic V1.
- preview: list[str]¶
- textarea: list[str]¶
- title: str¶
Bases:
BaseModel for one navigation bar item.
mex.editor.security module¶
- mex.editor.security.has_read_access_mex(username: str, password: str) bool¶
Verify if provided credentials have read access.
- mex.editor.security.has_write_access_mex(username: str, password: str) bool¶
Verify if provided credentials have write access.
mex.editor.settings module¶
- class mex.editor.settings.EditorSettings(_env_file: Path | str | Sequence[Path | str] | None = PosixPath('.'), _env_file_encoding: str | None = None, _env_nested_delimiter: str | None = None, _secrets_dir: str | Path | None = None, *, pdb: bool = False, MEX_SINK: list[Sink] = [Sink.NDJSON], MEX_ASSETS_DIR: Path = PosixPath('/home/runner/work/mex-editor/mex-editor/assets'), MEX_WORK_DIR: Path = PosixPath('/home/runner/work/mex-editor/mex-editor'), MEX_IDENTITY_PROVIDER: IdentityProvider = IdentityProvider.MEMORY, MEX_BACKEND_API_URL: Url = Url('http://localhost:8080/'), MEX_BACKEND_API_KEY: SecretStr = SecretStr('**********'), MEX_BACKEND_API_PARALLELIZATION: int = 1, MEX_BACKEND_API_CHUNK_SIZE: int = 25, MEX_VERIFY_SESSION: bool | AssetsPath = True, MEX_ORGANIGRAM_PATH: AssetsPath = AssetsPath('raw-data/organigram/organizational_units.json'), MEX_PRIMARY_SOURCES_PATH: AssetsPath = AssetsPath('raw-data/primary-sources/primary-sources.json'), MEX_LDAP_URL: SecretStr = SecretStr('**********'), MEX_LDAP_SEARCH_BASE: str = 'DC=rki,DC=local', MEX_WIKI_API_URL: Url = Url('http://wikidata/'), MEX_WEB_USER_AGENT: str = 'rki/mex', MEX_ORCID_API_URL: Url = Url('https://orcid/'), MEX_EDITOR_API_HOST: Annotated[str, MinLen(min_length=1), MaxLen(max_length=250)] = 'localhost', MEX_EDITOR_API_PORT: Annotated[int, Gt(gt=0), Lt(lt=65536)] = 8031, MEX_EDITOR_FRONTEND_PORT: Annotated[int, Gt(gt=0), Lt(lt=65536)] = 8030, MEX_EDITOR_API_ROOT_PATH: str = '', MEX_BACKEND_API_USER_DATABASE: EditorUserDatabase = EditorUserDatabase(read={}, write={}))¶
Bases:
BaseSettingsSettings definition for the editor service.
- editor_api_host: str¶
- editor_api_port: int¶
- editor_api_root_path: str¶
- editor_frontend_port: int¶
- editor_user_database: EditorUserDatabase¶
- 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_shortcuts': None, 'cli_use_class_docs_for_groups': False, 'enable_decoding': True, 'env_file': '.env', 'env_file_encoding': 'utf-8', 'env_ignore_empty': False, 'env_nested_delimiter': '__', 'env_nested_max_split': None, 'env_parse_enums': None, 'env_parse_none_str': None, 'env_prefix': 'mex_', 'extra': 'ignore', 'json_file': None, 'json_file_encoding': None, 'nested_model_default_partial_update': False, 'populate_by_name': True, 'protected_namespaces': ('model_validate', 'model_dump', 'settings_customise_sources'), 'secrets_dir': None, 'toml_file': None, 'validate_assignment': True, '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].
- model_fields: ClassVar[Dict[str, FieldInfo]] = {'assets_dir': FieldInfo(annotation=Path, required=False, default=PosixPath('/home/runner/work/mex-editor/mex-editor/assets'), alias_priority=2, validation_alias='MEX_ASSETS_DIR', description='Path to directory that contains input files treated as read-only, looks for a folder named `assets` in the current directory by default.'), 'backend_api_chunk_size': FieldInfo(annotation=int, required=False, default=25, alias_priority=2, validation_alias='MEX_BACKEND_API_CHUNK_SIZE', description='How many items to load into the backend in one chunk.'), 'backend_api_key': FieldInfo(annotation=SecretStr, required=False, default=SecretStr('**********'), alias_priority=2, validation_alias='MEX_BACKEND_API_KEY', description='Backend API key with write access to call POST/PUT endpoints'), 'backend_api_parallelization': FieldInfo(annotation=int, required=False, default=1, alias_priority=2, validation_alias='MEX_BACKEND_API_PARALLELIZATION', description='How many simultaneous threads may spin up to load data into the backend.'), 'backend_api_url': FieldInfo(annotation=Url, required=False, default=Url('http://localhost:8080/'), alias_priority=2, validation_alias='MEX_BACKEND_API_URL', description='MEx backend API url.'), 'debug': FieldInfo(annotation=bool, required=False, default=False, alias='pdb', alias_priority=2, validation_alias='MEX_DEBUG', description='Jump into post-mortem debugging after any uncaught exception.'), 'editor_api_host': FieldInfo(annotation=str, required=False, default='localhost', alias_priority=2, validation_alias='MEX_EDITOR_API_HOST', description='Host that the editor api will run on.', metadata=[MinLen(min_length=1), MaxLen(max_length=250)]), 'editor_api_port': FieldInfo(annotation=int, required=False, default=8031, alias_priority=2, validation_alias='MEX_EDITOR_API_PORT', description='Port that the editor api should listen on.', metadata=[Gt(gt=0), Lt(lt=65536)]), 'editor_api_root_path': FieldInfo(annotation=str, required=False, default='', alias_priority=2, validation_alias='MEX_EDITOR_API_ROOT_PATH', description='Root path that the editor server should run under.'), 'editor_frontend_port': FieldInfo(annotation=int, required=False, default=8030, alias_priority=2, validation_alias='MEX_EDITOR_FRONTEND_PORT', description='Port that the editor frontend should serve on.', metadata=[Gt(gt=0), Lt(lt=65536)]), 'editor_user_database': FieldInfo(annotation=EditorUserDatabase, required=False, default=EditorUserDatabase(read={}, write={}), alias_priority=2, validation_alias='MEX_BACKEND_API_USER_DATABASE', description='Database of users.'), 'identity_provider': FieldInfo(annotation=IdentityProvider, required=False, default=<IdentityProvider.MEMORY: 'memory'>, alias_priority=2, validation_alias='MEX_IDENTITY_PROVIDER', description='Provider to assign identifiers to new model instances.'), 'ldap_search_base': FieldInfo(annotation=str, required=False, default='DC=rki,DC=local', alias_priority=2, validation_alias='MEX_LDAP_SEARCH_BASE', description='Search base for the ldap connector.'), 'ldap_url': FieldInfo(annotation=SecretStr, required=False, default=SecretStr('**********'), alias_priority=2, validation_alias='MEX_LDAP_URL', description='LDAP server for person queries with authentication credentials. Must follow format `ldap://user:pw@host:port`, where `user` is the username, and `pw` is the password for authenticating against ldap, `host` is the url of the ldap server, and `port` is the port of the ldap server.'), 'mex_web_user_agent': FieldInfo(annotation=str, required=False, default='rki/mex', alias_priority=2, validation_alias='MEX_WEB_USER_AGENT', description='User agent is sent in request headers to external services.'), 'orcid_api_url': FieldInfo(annotation=Url, required=False, default=Url('https://orcid/'), alias_priority=2, validation_alias='MEX_ORCID_API_URL', description='URL of orcid api.'), 'organigram_path': FieldInfo(annotation=AssetsPath, required=False, default=AssetsPath("raw-data/organigram/organizational_units.json"), alias_priority=2, validation_alias='MEX_ORGANIGRAM_PATH', description='Path to the JSON file describing the organizational units, absolute path or relative to `assets_dir`.'), 'primary_sources_path': FieldInfo(annotation=AssetsPath, required=False, default=AssetsPath("raw-data/primary-sources/primary-sources.json"), alias_priority=2, validation_alias='MEX_PRIMARY_SOURCES_PATH', description='Path to the JSON file describing the primary sources, absolute path or relative to `assets_dir`.'), 'sink': FieldInfo(annotation=list[Sink], required=False, default=[<Sink.NDJSON: 'ndjson'>], alias_priority=2, validation_alias='MEX_SINK', description='Where to send data that is extracted or ingested. Defaults to writing ndjson files, but can be configured to push to the backend or the graph.'), 'verify_session': FieldInfo(annotation=Union[bool, AssetsPath], required=False, default=True, alias_priority=2, validation_alias='MEX_VERIFY_SESSION', description="Either a boolean that controls whether we verify the server's TLS certificate, or a path to a CA bundle to use. If a path is given, it can be either absolute or relative to the `assets_dir`. Defaults to True."), 'wiki_api_url': FieldInfo(annotation=Url, required=False, default=Url('http://wikidata/'), alias_priority=2, validation_alias='MEX_WIKI_API_URL', description='URL of the Wikidata API used to resolve an ID to an organization.'), 'work_dir': FieldInfo(annotation=Path, required=False, default=PosixPath('/home/runner/work/mex-editor/mex-editor'), alias_priority=2, validation_alias='MEX_WORK_DIR', description='Path to directory that stores generated and temporary files. Defaults to the current working directory.')}¶
Metadata about the fields defined on the model, mapping of field names to [FieldInfo][pydantic.fields.FieldInfo] objects.
This replaces Model.__fields__ from Pydantic V1.
mex.editor.state module¶
- class mex.editor.state.State(parent_state: BaseState | None = None, init_substates: bool = True, _reflex_internal_init: bool = False, *, substates: Dict[str, BaseState] = {}, dirty_vars: set[str] = {}, dirty_substates: set[str] = {}, router_data: Dict[str, Any] = {}, router: RouterData = RouterData(session=SessionData(client_token='', client_ip='', session_id=''), headers=HeaderData(host='', origin='', upgrade='', connection='', cookie='', pragma='', cache_control='', user_agent='', sec_websocket_version='', sec_websocket_key='', sec_websocket_extensions='', accept_encoding='', accept_language='', raw_headers=_FrozenDictStrStr(_data=())), page=PageData(host='', path='', raw_path='', full_path='', full_raw_path='', params={})), is_hydrated: bool = False, current_locale: str = 'de-DE', current_page_has_changes: bool = False, navigate_dialog_open: bool = False, navigate_target: str | None = None, user_mex: User | None = None, user_ldap: User | None = None, merged_login_person: MergedLoginPerson | None = None, target_path_after_login: str | None = None, nav_items: list[NavItem] = [NavItem(title='Search', path='/', raw_path='/?page=1', underline='none'), NavItem(title='Create', path='/create', raw_path='/create/', underline='none'), NavItem(title='Edit', path='/item/[identifier]', raw_path='/item/00000000000000/', underline='none'), NavItem(title='Merge', path='/merge', raw_path='/merge/', underline='none'), NavItem(title='Ingest', path='/ingest', raw_path='/ingest/', underline='none')], **kwargs)¶
Bases:
StateThe base state for the app.
- static _update_raw_path(nav_item: NavItem, params: Mapping[str, int | str | list[str]]) None¶
Update the raw path of a nav item with the given parameters.
- backend_vars: ClassVar[Dict[str, Any]] = {}¶
- backend_version¶
Base class of converting a var to another var type.
- base_vars: ClassVar[Dict[str, Var]] = {'current_locale': Var.__init_subclass__.<locals>.StringCastedVar(_js_expr='reflex___state____state__mex___editor___state____state.current_locale', _var_type=<class 'str'>, _var_data=None, _original=Var(_js_expr='reflex___state____state__mex___editor___state____state.current_locale', _var_type=<class 'str'>, _var_data=VarData(state='reflex___state____state.mex___editor___state____state', field_name='current_locale', imports=(('$/utils/context', (ImportVar(tag='StateContexts', is_default=False, alias=None, install=True, render=True, package_path='/', transpile=False),)), ('react', (ImportVar(tag='useContext', is_default=False, alias=None, install=True, render=True, package_path='/', transpile=False),))), hooks=('const reflex___state____state__mex___editor___state____state = useContext(StateContexts.reflex___state____state__mex___editor___state____state)',), deps=(), position=None, components=()))), 'current_page_has_changes': Var.__init_subclass__.<locals>.BooleanCastedVar(_js_expr='reflex___state____state__mex___editor___state____state.current_page_has_changes', _var_type=<class 'bool'>, _var_data=None, _original=Var(_js_expr='reflex___state____state__mex___editor___state____state.current_page_has_changes', _var_type=<class 'bool'>, _var_data=VarData(state='reflex___state____state.mex___editor___state____state', field_name='current_page_has_changes', imports=(('$/utils/context', (ImportVar(tag='StateContexts', is_default=False, alias=None, install=True, render=True, package_path='/', transpile=False),)), ('react', (ImportVar(tag='useContext', is_default=False, alias=None, install=True, render=True, package_path='/', transpile=False),))), hooks=('const reflex___state____state__mex___editor___state____state = useContext(StateContexts.reflex___state____state__mex___editor___state____state)',), deps=(), position=None, components=()))), 'merged_login_person': Var.__init_subclass__.<locals>.ObjectCastedVar(_js_expr='reflex___state____state__mex___editor___state____state.merged_login_person', _var_type=mex.editor.models.MergedLoginPerson | None, _var_data=None, _original=Var(_js_expr='reflex___state____state__mex___editor___state____state.merged_login_person', _var_type=mex.editor.models.MergedLoginPerson | None, _var_data=VarData(state='reflex___state____state.mex___editor___state____state', field_name='merged_login_person', imports=(('$/utils/context', (ImportVar(tag='StateContexts', is_default=False, alias=None, install=True, render=True, package_path='/', transpile=False),)), ('react', (ImportVar(tag='useContext', is_default=False, alias=None, install=True, render=True, package_path='/', transpile=False),))), hooks=('const reflex___state____state__mex___editor___state____state = useContext(StateContexts.reflex___state____state__mex___editor___state____state)',), deps=(), position=None, components=()))), 'nav_items': Var.__init_subclass__.<locals>.ArrayCastedVar(_js_expr='reflex___state____state__mex___editor___state____state.nav_items', _var_type=list[mex.editor.models.NavItem], _var_data=None, _original=Var(_js_expr='reflex___state____state__mex___editor___state____state.nav_items', _var_type=list[mex.editor.models.NavItem], _var_data=VarData(state='reflex___state____state.mex___editor___state____state', field_name='nav_items', imports=(('$/utils/context', (ImportVar(tag='StateContexts', is_default=False, alias=None, install=True, render=True, package_path='/', transpile=False),)), ('react', (ImportVar(tag='useContext', is_default=False, alias=None, install=True, render=True, package_path='/', transpile=False),))), hooks=('const reflex___state____state__mex___editor___state____state = useContext(StateContexts.reflex___state____state__mex___editor___state____state)',), deps=(), position=None, components=()))), 'navigate_dialog_open': Var.__init_subclass__.<locals>.BooleanCastedVar(_js_expr='reflex___state____state__mex___editor___state____state.navigate_dialog_open', _var_type=<class 'bool'>, _var_data=None, _original=Var(_js_expr='reflex___state____state__mex___editor___state____state.navigate_dialog_open', _var_type=<class 'bool'>, _var_data=VarData(state='reflex___state____state.mex___editor___state____state', field_name='navigate_dialog_open', imports=(('$/utils/context', (ImportVar(tag='StateContexts', is_default=False, alias=None, install=True, render=True, package_path='/', transpile=False),)), ('react', (ImportVar(tag='useContext', is_default=False, alias=None, install=True, render=True, package_path='/', transpile=False),))), hooks=('const reflex___state____state__mex___editor___state____state = useContext(StateContexts.reflex___state____state__mex___editor___state____state)',), deps=(), position=None, components=()))), 'navigate_target': Var.__init_subclass__.<locals>.StringCastedVar(_js_expr='reflex___state____state__mex___editor___state____state.navigate_target', _var_type=str | None, _var_data=None, _original=Var(_js_expr='reflex___state____state__mex___editor___state____state.navigate_target', _var_type=str | None, _var_data=VarData(state='reflex___state____state.mex___editor___state____state', field_name='navigate_target', imports=(('$/utils/context', (ImportVar(tag='StateContexts', is_default=False, alias=None, install=True, render=True, package_path='/', transpile=False),)), ('react', (ImportVar(tag='useContext', is_default=False, alias=None, install=True, render=True, package_path='/', transpile=False),))), hooks=('const reflex___state____state__mex___editor___state____state = useContext(StateContexts.reflex___state____state__mex___editor___state____state)',), deps=(), position=None, components=()))), 'target_path_after_login': Var.__init_subclass__.<locals>.StringCastedVar(_js_expr='reflex___state____state__mex___editor___state____state.target_path_after_login', _var_type=str | None, _var_data=None, _original=Var(_js_expr='reflex___state____state__mex___editor___state____state.target_path_after_login', _var_type=str | None, _var_data=VarData(state='reflex___state____state.mex___editor___state____state', field_name='target_path_after_login', imports=(('$/utils/context', (ImportVar(tag='StateContexts', is_default=False, alias=None, install=True, render=True, package_path='/', transpile=False),)), ('react', (ImportVar(tag='useContext', is_default=False, alias=None, install=True, render=True, package_path='/', transpile=False),))), hooks=('const reflex___state____state__mex___editor___state____state = useContext(StateContexts.reflex___state____state__mex___editor___state____state)',), deps=(), position=None, components=()))), 'user_ldap': Var.__init_subclass__.<locals>.ObjectCastedVar(_js_expr='reflex___state____state__mex___editor___state____state.user_ldap', _var_type=mex.editor.models.User | None, _var_data=None, _original=Var(_js_expr='reflex___state____state__mex___editor___state____state.user_ldap', _var_type=mex.editor.models.User | None, _var_data=VarData(state='reflex___state____state.mex___editor___state____state', field_name='user_ldap', imports=(('$/utils/context', (ImportVar(tag='StateContexts', is_default=False, alias=None, install=True, render=True, package_path='/', transpile=False),)), ('react', (ImportVar(tag='useContext', is_default=False, alias=None, install=True, render=True, package_path='/', transpile=False),))), hooks=('const reflex___state____state__mex___editor___state____state = useContext(StateContexts.reflex___state____state__mex___editor___state____state)',), deps=(), position=None, components=()))), 'user_mex': Var.__init_subclass__.<locals>.ObjectCastedVar(_js_expr='reflex___state____state__mex___editor___state____state.user_mex', _var_type=mex.editor.models.User | None, _var_data=None, _original=Var(_js_expr='reflex___state____state__mex___editor___state____state.user_mex', _var_type=mex.editor.models.User | None, _var_data=VarData(state='reflex___state____state.mex___editor___state____state', field_name='user_mex', imports=(('$/utils/context', (ImportVar(tag='StateContexts', is_default=False, alias=None, install=True, render=True, package_path='/', transpile=False),)), ('react', (ImportVar(tag='useContext', is_default=False, alias=None, install=True, render=True, package_path='/', transpile=False),))), hooks=('const reflex___state____state__mex___editor___state____state = useContext(StateContexts.reflex___state____state__mex___editor___state____state)',), deps=(), position=None, components=())))}¶
- change_locale = EventHandler(event_actions={}, fn=<function State.change_locale>, state_full_name='reflex___state____state.mex___editor___state____state')¶
- check_ldap_login = EventHandler(event_actions={}, fn=<function State.check_ldap_login>, state_full_name='reflex___state____state.mex___editor___state____state')¶
- check_mex_login = EventHandler(event_actions={}, fn=<function State.check_mex_login>, state_full_name='reflex___state____state.mex___editor___state____state')¶
- class_subclasses: ClassVar[set[Type[BaseState]]] = {<class 'mex.editor.consent.state.ConsentState'>, <class 'mex.editor.ingest.state.IngestState'>, <class 'mex.editor.login.state.LoginLdapState'>, <class 'mex.editor.login.state.LoginMExState'>, <class 'mex.editor.merge.state.MergeState'>, <class 'mex.editor.rules.state.RuleState'>, <class 'mex.editor.search.state.SearchState'>}¶
- computed_vars: ClassVar[Dict[str, ComputedVar]] = {'backend_version': FakeComputedVarBaseClass(_js_expr='backend_version', _var_type=<class 'str'>, _var_data=VarData(state='reflex___state____state.mex___editor___state____state', field_name='', imports=(('$/utils/context', (ImportVar(tag='StateContexts', is_default=False, alias=None, install=True, render=True, package_path='/', transpile=False),)), ('react', (ImportVar(tag='useContext', is_default=False, alias=None, install=True, render=True, package_path='/', transpile=False),))), hooks=('const reflex___state____state__mex___editor___state____state = useContext(StateContexts.reflex___state____state__mex___editor___state____state)',), deps=(), position=None, components=()), _cache=True, _backend=False, _initial_value=Unset, _static_deps={}, _auto_deps=True, _update_interval=None, _fget=<function State.backend_version>), 'editor_version': FakeComputedVarBaseClass(_js_expr='editor_version', _var_type=<class 'str'>, _var_data=VarData(state='reflex___state____state.mex___editor___state____state', field_name='', imports=(('$/utils/context', (ImportVar(tag='StateContexts', is_default=False, alias=None, install=True, render=True, package_path='/', transpile=False),)), ('react', (ImportVar(tag='useContext', is_default=False, alias=None, install=True, render=True, package_path='/', transpile=False),))), hooks=('const reflex___state____state__mex___editor___state____state = useContext(StateContexts.reflex___state____state__mex___editor___state____state)',), deps=(), position=None, components=()), _cache=True, _backend=False, _initial_value=Unset, _static_deps={}, _auto_deps=True, _update_interval=None, _fget=<function State.editor_version>)}¶
- current_locale: str¶
Base class of converting a var to another var type.
- current_page_has_changes: bool¶
Base class of converting a var to another var type.
- editor_version¶
Base class of converting a var to another var type.
- event_handlers: ClassVar[Dict[str, EventHandler]] = {'change_locale': EventHandler(event_actions={}, fn=<function State.change_locale>, state_full_name='reflex___state____state.mex___editor___state____state'), 'check_ldap_login': EventHandler(event_actions={}, fn=<function State.check_ldap_login>, state_full_name='reflex___state____state.mex___editor___state____state'), 'check_mex_login': EventHandler(event_actions={}, fn=<function State.check_mex_login>, state_full_name='reflex___state____state.mex___editor___state____state'), 'close_navigate_dialog': EventHandler(event_actions={}, fn=<function State.close_navigate_dialog>, state_full_name='reflex___state____state.mex___editor___state____state'), 'load_nav': EventHandler(event_actions={}, fn=<function State.load_nav>, state_full_name='reflex___state____state.mex___editor___state____state'), 'logout': EventHandler(event_actions={}, fn=<function State.logout>, state_full_name='reflex___state____state.mex___editor___state____state'), 'navigate': EventHandler(event_actions={}, fn=<function State.navigate>, state_full_name='reflex___state____state.mex___editor___state____state'), 'push_url_params': EventHandler(event_actions={}, fn=<function State.push_url_params>, state_full_name='reflex___state____state.mex___editor___state____state'), 'set_current_locale': EventHandler(event_actions={}, fn=<function reflex___state____state.mex___editor___state____state.set_current_locale>, state_full_name='reflex___state____state.mex___editor___state____state'), 'set_current_page_has_changes': EventHandler(event_actions={}, fn=<function State.set_current_page_has_changes>, state_full_name='reflex___state____state.mex___editor___state____state'), 'set_merged_login_person': EventHandler(event_actions={}, fn=<function reflex___state____state.mex___editor___state____state.set_merged_login_person>, state_full_name='reflex___state____state.mex___editor___state____state'), 'set_nav_items': EventHandler(event_actions={}, fn=<function reflex___state____state.mex___editor___state____state.set_nav_items>, state_full_name='reflex___state____state.mex___editor___state____state'), 'set_navigate_dialog_open': EventHandler(event_actions={}, fn=<function reflex___state____state.mex___editor___state____state.set_navigate_dialog_open>, state_full_name='reflex___state____state.mex___editor___state____state'), 'set_navigate_target': EventHandler(event_actions={}, fn=<function reflex___state____state.mex___editor___state____state.set_navigate_target>, state_full_name='reflex___state____state.mex___editor___state____state'), 'set_target_path_after_login': EventHandler(event_actions={}, fn=<function reflex___state____state.mex___editor___state____state.set_target_path_after_login>, state_full_name='reflex___state____state.mex___editor___state____state'), 'set_user_ldap': EventHandler(event_actions={}, fn=<function reflex___state____state.mex___editor___state____state.set_user_ldap>, state_full_name='reflex___state____state.mex___editor___state____state'), 'set_user_mex': EventHandler(event_actions={}, fn=<function reflex___state____state.mex___editor___state____state.set_user_mex>, state_full_name='reflex___state____state.mex___editor___state____state'), 'setvar': EventHandlerSetVar(event_actions={}, fn=<function EventHandlerSetVar.setvar>, state_full_name='reflex___state____state.mex___editor___state____state', state_cls=<class 'mex.editor.state.State'>)}¶
- inherited_backend_vars: ClassVar[Dict[str, Any]] = {}¶
- inherited_vars: ClassVar[Dict[str, Var]] = {'identifier': FakeComputedVarBaseClass(_js_expr='identifier', _var_type=<class 'str'>, _var_data=VarData(state='reflex___state____state', field_name='', imports=(('$/utils/context', (ImportVar(tag='StateContexts', is_default=False, alias=None, install=True, render=True, package_path='/', transpile=False),)), ('react', (ImportVar(tag='useContext', is_default=False, alias=None, install=True, render=True, package_path='/', transpile=False),))), hooks=('const reflex___state____state = useContext(StateContexts.reflex___state____state)',), deps=(), position=None, components=()), _cache=True, _backend=False, _initial_value=Unset, _static_deps={None: {'router'}}, _auto_deps=False, _update_interval=None, _fget=<function BaseState.setup_dynamic_args.<locals>.argsingle_factory.<locals>.inner_func>), 'is_hydrated': Var.__init_subclass__.<locals>.BooleanCastedVar(_js_expr='reflex___state____state.is_hydrated', _var_type=<class 'bool'>, _var_data=None, _original=Var(_js_expr='reflex___state____state.is_hydrated', _var_type=<class 'bool'>, _var_data=VarData(state='reflex___state____state', field_name='is_hydrated', imports=(('$/utils/context', (ImportVar(tag='StateContexts', is_default=False, alias=None, install=True, render=True, package_path='/', transpile=False),)), ('react', (ImportVar(tag='useContext', is_default=False, alias=None, install=True, render=True, package_path='/', transpile=False),))), hooks=('const reflex___state____state = useContext(StateContexts.reflex___state____state)',), deps=(), position=None, components=()))), 'router': Var.__init_subclass__.<locals>.ObjectCastedVar(_js_expr='reflex___state____state.router', _var_type=<class 'reflex.istate.data.RouterData'>, _var_data=None, _original=Var(_js_expr='reflex___state____state.router', _var_type=<class 'reflex.istate.data.RouterData'>, _var_data=VarData(state='reflex___state____state', field_name='router', imports=(('$/utils/context', (ImportVar(tag='StateContexts', is_default=False, alias=None, install=True, render=True, package_path='/', transpile=False),)), ('react', (ImportVar(tag='useContext', is_default=False, alias=None, install=True, render=True, package_path='/', transpile=False),))), hooks=('const reflex___state____state = useContext(StateContexts.reflex___state____state)',), deps=(), position=None, components=())))}¶
- logout = EventHandler(event_actions={}, fn=<function State.logout>, state_full_name='reflex___state____state.mex___editor___state____state')¶
- merged_login_person: MergedLoginPerson | None¶
Base class of converting a var to another var type.
Base class of converting a var to another var type.
Base class of converting a var to another var type.
Base class of converting a var to another var type.
- push_url_params = EventHandler(event_actions={}, fn=<function State.push_url_params>, state_full_name='reflex___state____state.mex___editor___state____state')¶
- set_current_locale = EventHandler(event_actions={}, fn=<function reflex___state____state.mex___editor___state____state.set_current_locale>, state_full_name='reflex___state____state.mex___editor___state____state')¶
- set_current_page_has_changes = EventHandler(event_actions={}, fn=<function State.set_current_page_has_changes>, state_full_name='reflex___state____state.mex___editor___state____state')¶
- set_merged_login_person = EventHandler(event_actions={}, fn=<function reflex___state____state.mex___editor___state____state.set_merged_login_person>, state_full_name='reflex___state____state.mex___editor___state____state')¶
- set_target_path_after_login = EventHandler(event_actions={}, fn=<function reflex___state____state.mex___editor___state____state.set_target_path_after_login>, state_full_name='reflex___state____state.mex___editor___state____state')¶
- set_user_ldap = EventHandler(event_actions={}, fn=<function reflex___state____state.mex___editor___state____state.set_user_ldap>, state_full_name='reflex___state____state.mex___editor___state____state')¶
- set_user_mex = EventHandler(event_actions={}, fn=<function reflex___state____state.mex___editor___state____state.set_user_mex>, state_full_name='reflex___state____state.mex___editor___state____state')¶
- setvar: ClassVar[EventHandler] = EventHandlerSetVar(event_actions={}, fn=<function EventHandlerSetVar.setvar>, state_full_name='reflex___state____state.mex___editor___state____state', state_cls=<class 'mex.editor.state.State'>)¶
- target_path_after_login: str | None¶
Base class of converting a var to another var type.
- vars: ClassVar[Dict[str, Var]] = {'backend_version': FakeComputedVarBaseClass(_js_expr='backend_version', _var_type=<class 'str'>, _var_data=VarData(state='reflex___state____state.mex___editor___state____state', field_name='', imports=(('$/utils/context', (ImportVar(tag='StateContexts', is_default=False, alias=None, install=True, render=True, package_path='/', transpile=False),)), ('react', (ImportVar(tag='useContext', is_default=False, alias=None, install=True, render=True, package_path='/', transpile=False),))), hooks=('const reflex___state____state__mex___editor___state____state = useContext(StateContexts.reflex___state____state__mex___editor___state____state)',), deps=(), position=None, components=()), _cache=True, _backend=False, _initial_value=Unset, _static_deps={}, _auto_deps=True, _update_interval=None, _fget=<function State.backend_version>), 'current_locale': Var.__init_subclass__.<locals>.StringCastedVar(_js_expr='reflex___state____state__mex___editor___state____state.current_locale', _var_type=<class 'str'>, _var_data=None, _original=Var(_js_expr='reflex___state____state__mex___editor___state____state.current_locale', _var_type=<class 'str'>, _var_data=VarData(state='reflex___state____state.mex___editor___state____state', field_name='current_locale', imports=(('$/utils/context', (ImportVar(tag='StateContexts', is_default=False, alias=None, install=True, render=True, package_path='/', transpile=False),)), ('react', (ImportVar(tag='useContext', is_default=False, alias=None, install=True, render=True, package_path='/', transpile=False),))), hooks=('const reflex___state____state__mex___editor___state____state = useContext(StateContexts.reflex___state____state__mex___editor___state____state)',), deps=(), position=None, components=()))), 'current_page_has_changes': Var.__init_subclass__.<locals>.BooleanCastedVar(_js_expr='reflex___state____state__mex___editor___state____state.current_page_has_changes', _var_type=<class 'bool'>, _var_data=None, _original=Var(_js_expr='reflex___state____state__mex___editor___state____state.current_page_has_changes', _var_type=<class 'bool'>, _var_data=VarData(state='reflex___state____state.mex___editor___state____state', field_name='current_page_has_changes', imports=(('$/utils/context', (ImportVar(tag='StateContexts', is_default=False, alias=None, install=True, render=True, package_path='/', transpile=False),)), ('react', (ImportVar(tag='useContext', is_default=False, alias=None, install=True, render=True, package_path='/', transpile=False),))), hooks=('const reflex___state____state__mex___editor___state____state = useContext(StateContexts.reflex___state____state__mex___editor___state____state)',), deps=(), position=None, components=()))), 'editor_version': FakeComputedVarBaseClass(_js_expr='editor_version', _var_type=<class 'str'>, _var_data=VarData(state='reflex___state____state.mex___editor___state____state', field_name='', imports=(('$/utils/context', (ImportVar(tag='StateContexts', is_default=False, alias=None, install=True, render=True, package_path='/', transpile=False),)), ('react', (ImportVar(tag='useContext', is_default=False, alias=None, install=True, render=True, package_path='/', transpile=False),))), hooks=('const reflex___state____state__mex___editor___state____state = useContext(StateContexts.reflex___state____state__mex___editor___state____state)',), deps=(), position=None, components=()), _cache=True, _backend=False, _initial_value=Unset, _static_deps={}, _auto_deps=True, _update_interval=None, _fget=<function State.editor_version>), 'identifier': FakeComputedVarBaseClass(_js_expr='identifier', _var_type=<class 'str'>, _var_data=VarData(state='reflex___state____state', field_name='', imports=(('$/utils/context', (ImportVar(tag='StateContexts', is_default=False, alias=None, install=True, render=True, package_path='/', transpile=False),)), ('react', (ImportVar(tag='useContext', is_default=False, alias=None, install=True, render=True, package_path='/', transpile=False),))), hooks=('const reflex___state____state = useContext(StateContexts.reflex___state____state)',), deps=(), position=None, components=()), _cache=True, _backend=False, _initial_value=Unset, _static_deps={None: {'router'}}, _auto_deps=False, _update_interval=None, _fget=<function BaseState.setup_dynamic_args.<locals>.argsingle_factory.<locals>.inner_func>), 'is_hydrated': Var.__init_subclass__.<locals>.BooleanCastedVar(_js_expr='reflex___state____state.is_hydrated', _var_type=<class 'bool'>, _var_data=None, _original=Var(_js_expr='reflex___state____state.is_hydrated', _var_type=<class 'bool'>, _var_data=VarData(state='reflex___state____state', field_name='is_hydrated', imports=(('$/utils/context', (ImportVar(tag='StateContexts', is_default=False, alias=None, install=True, render=True, package_path='/', transpile=False),)), ('react', (ImportVar(tag='useContext', is_default=False, alias=None, install=True, render=True, package_path='/', transpile=False),))), hooks=('const reflex___state____state = useContext(StateContexts.reflex___state____state)',), deps=(), position=None, components=()))), 'merged_login_person': Var.__init_subclass__.<locals>.ObjectCastedVar(_js_expr='reflex___state____state__mex___editor___state____state.merged_login_person', _var_type=mex.editor.models.MergedLoginPerson | None, _var_data=None, _original=Var(_js_expr='reflex___state____state__mex___editor___state____state.merged_login_person', _var_type=mex.editor.models.MergedLoginPerson | None, _var_data=VarData(state='reflex___state____state.mex___editor___state____state', field_name='merged_login_person', imports=(('$/utils/context', (ImportVar(tag='StateContexts', is_default=False, alias=None, install=True, render=True, package_path='/', transpile=False),)), ('react', (ImportVar(tag='useContext', is_default=False, alias=None, install=True, render=True, package_path='/', transpile=False),))), hooks=('const reflex___state____state__mex___editor___state____state = useContext(StateContexts.reflex___state____state__mex___editor___state____state)',), deps=(), position=None, components=()))), 'nav_items': Var.__init_subclass__.<locals>.ArrayCastedVar(_js_expr='reflex___state____state__mex___editor___state____state.nav_items', _var_type=list[mex.editor.models.NavItem], _var_data=None, _original=Var(_js_expr='reflex___state____state__mex___editor___state____state.nav_items', _var_type=list[mex.editor.models.NavItem], _var_data=VarData(state='reflex___state____state.mex___editor___state____state', field_name='nav_items', imports=(('$/utils/context', (ImportVar(tag='StateContexts', is_default=False, alias=None, install=True, render=True, package_path='/', transpile=False),)), ('react', (ImportVar(tag='useContext', is_default=False, alias=None, install=True, render=True, package_path='/', transpile=False),))), hooks=('const reflex___state____state__mex___editor___state____state = useContext(StateContexts.reflex___state____state__mex___editor___state____state)',), deps=(), position=None, components=()))), 'navigate_dialog_open': Var.__init_subclass__.<locals>.BooleanCastedVar(_js_expr='reflex___state____state__mex___editor___state____state.navigate_dialog_open', _var_type=<class 'bool'>, _var_data=None, _original=Var(_js_expr='reflex___state____state__mex___editor___state____state.navigate_dialog_open', _var_type=<class 'bool'>, _var_data=VarData(state='reflex___state____state.mex___editor___state____state', field_name='navigate_dialog_open', imports=(('$/utils/context', (ImportVar(tag='StateContexts', is_default=False, alias=None, install=True, render=True, package_path='/', transpile=False),)), ('react', (ImportVar(tag='useContext', is_default=False, alias=None, install=True, render=True, package_path='/', transpile=False),))), hooks=('const reflex___state____state__mex___editor___state____state = useContext(StateContexts.reflex___state____state__mex___editor___state____state)',), deps=(), position=None, components=()))), 'navigate_target': Var.__init_subclass__.<locals>.StringCastedVar(_js_expr='reflex___state____state__mex___editor___state____state.navigate_target', _var_type=str | None, _var_data=None, _original=Var(_js_expr='reflex___state____state__mex___editor___state____state.navigate_target', _var_type=str | None, _var_data=VarData(state='reflex___state____state.mex___editor___state____state', field_name='navigate_target', imports=(('$/utils/context', (ImportVar(tag='StateContexts', is_default=False, alias=None, install=True, render=True, package_path='/', transpile=False),)), ('react', (ImportVar(tag='useContext', is_default=False, alias=None, install=True, render=True, package_path='/', transpile=False),))), hooks=('const reflex___state____state__mex___editor___state____state = useContext(StateContexts.reflex___state____state__mex___editor___state____state)',), deps=(), position=None, components=()))), 'router': Var.__init_subclass__.<locals>.ObjectCastedVar(_js_expr='reflex___state____state.router', _var_type=<class 'reflex.istate.data.RouterData'>, _var_data=None, _original=Var(_js_expr='reflex___state____state.router', _var_type=<class 'reflex.istate.data.RouterData'>, _var_data=VarData(state='reflex___state____state', field_name='router', imports=(('$/utils/context', (ImportVar(tag='StateContexts', is_default=False, alias=None, install=True, render=True, package_path='/', transpile=False),)), ('react', (ImportVar(tag='useContext', is_default=False, alias=None, install=True, render=True, package_path='/', transpile=False),))), hooks=('const reflex___state____state = useContext(StateContexts.reflex___state____state)',), deps=(), position=None, components=()))), 'target_path_after_login': Var.__init_subclass__.<locals>.StringCastedVar(_js_expr='reflex___state____state__mex___editor___state____state.target_path_after_login', _var_type=str | None, _var_data=None, _original=Var(_js_expr='reflex___state____state__mex___editor___state____state.target_path_after_login', _var_type=str | None, _var_data=VarData(state='reflex___state____state.mex___editor___state____state', field_name='target_path_after_login', imports=(('$/utils/context', (ImportVar(tag='StateContexts', is_default=False, alias=None, install=True, render=True, package_path='/', transpile=False),)), ('react', (ImportVar(tag='useContext', is_default=False, alias=None, install=True, render=True, package_path='/', transpile=False),))), hooks=('const reflex___state____state__mex___editor___state____state = useContext(StateContexts.reflex___state____state__mex___editor___state____state)',), deps=(), position=None, components=()))), 'user_ldap': Var.__init_subclass__.<locals>.ObjectCastedVar(_js_expr='reflex___state____state__mex___editor___state____state.user_ldap', _var_type=mex.editor.models.User | None, _var_data=None, _original=Var(_js_expr='reflex___state____state__mex___editor___state____state.user_ldap', _var_type=mex.editor.models.User | None, _var_data=VarData(state='reflex___state____state.mex___editor___state____state', field_name='user_ldap', imports=(('$/utils/context', (ImportVar(tag='StateContexts', is_default=False, alias=None, install=True, render=True, package_path='/', transpile=False),)), ('react', (ImportVar(tag='useContext', is_default=False, alias=None, install=True, render=True, package_path='/', transpile=False),))), hooks=('const reflex___state____state__mex___editor___state____state = useContext(StateContexts.reflex___state____state__mex___editor___state____state)',), deps=(), position=None, components=()))), 'user_mex': Var.__init_subclass__.<locals>.ObjectCastedVar(_js_expr='reflex___state____state__mex___editor___state____state.user_mex', _var_type=mex.editor.models.User | None, _var_data=None, _original=Var(_js_expr='reflex___state____state__mex___editor___state____state.user_mex', _var_type=mex.editor.models.User | None, _var_data=VarData(state='reflex___state____state.mex___editor___state____state', field_name='user_mex', imports=(('$/utils/context', (ImportVar(tag='StateContexts', is_default=False, alias=None, install=True, render=True, package_path='/', transpile=False),)), ('react', (ImportVar(tag='useContext', is_default=False, alias=None, install=True, render=True, package_path='/', transpile=False),))), hooks=('const reflex___state____state__mex___editor___state____state = useContext(StateContexts.reflex___state____state__mex___editor___state____state)',), deps=(), position=None, components=())))}¶
mex.editor.transform module¶
- mex.editor.transform.ensure_list(values: object) list[object]¶
Wrap single objects in lists, replace None with [] and return lists untouched.
- mex.editor.transform.transform_models_to_preview(models: Sequence[AdditiveAccessPlatform | AdditiveActivity | AdditiveBibliographicResource | AdditiveConsent | AdditiveContactPoint | AdditiveDistribution | AdditiveOrganization | AdditiveOrganizationalUnit | AdditivePerson | AdditivePrimarySource | AdditiveResource | AdditiveVariable | AdditiveVariableGroup | SubtractiveAccessPlatform | SubtractiveActivity | SubtractiveBibliographicResource | SubtractiveConsent | SubtractiveContactPoint | SubtractiveDistribution | SubtractiveOrganization | SubtractiveOrganizationalUnit | SubtractivePerson | SubtractivePrimarySource | SubtractiveResource | SubtractiveVariable | SubtractiveVariableGroup | PreventiveAccessPlatform | PreventiveActivity | PreventiveBibliographicResource | PreventiveConsent | PreventiveContactPoint | PreventiveDistribution | PreventiveOrganization | PreventiveOrganizationalUnit | PreventivePerson | PreventivePrimarySource | PreventiveResource | PreventiveVariable | PreventiveVariableGroup | ExtractedAccessPlatform | ExtractedActivity | ExtractedBibliographicResource | ExtractedConsent | ExtractedContactPoint | ExtractedDistribution | ExtractedOrganization | ExtractedOrganizationalUnit | ExtractedPerson | ExtractedPrimarySource | ExtractedResource | ExtractedVariable | ExtractedVariableGroup | PreviewAccessPlatform | PreviewActivity | PreviewBibliographicResource | PreviewConsent | PreviewContactPoint | PreviewDistribution | PreviewOrganization | PreviewOrganizationalUnit | PreviewPerson | PreviewPrimarySource | PreviewResource | PreviewVariable | PreviewVariableGroup | MergedAccessPlatform | MergedActivity | MergedBibliographicResource | MergedConsent | MergedContactPoint | MergedDistribution | MergedOrganization | MergedOrganizationalUnit | MergedPerson | MergedPrimarySource | MergedResource | MergedVariable | MergedVariableGroup]) list[EditorValue]¶
Converts a list of models into editor values based on the preview config.
- mex.editor.transform.transform_models_to_stem_type(models: Sequence[AdditiveAccessPlatform | AdditiveActivity | AdditiveBibliographicResource | AdditiveConsent | AdditiveContactPoint | AdditiveDistribution | AdditiveOrganization | AdditiveOrganizationalUnit | AdditivePerson | AdditivePrimarySource | AdditiveResource | AdditiveVariable | AdditiveVariableGroup | SubtractiveAccessPlatform | SubtractiveActivity | SubtractiveBibliographicResource | SubtractiveConsent | SubtractiveContactPoint | SubtractiveDistribution | SubtractiveOrganization | SubtractiveOrganizationalUnit | SubtractivePerson | SubtractivePrimarySource | SubtractiveResource | SubtractiveVariable | SubtractiveVariableGroup | PreventiveAccessPlatform | PreventiveActivity | PreventiveBibliographicResource | PreventiveConsent | PreventiveContactPoint | PreventiveDistribution | PreventiveOrganization | PreventiveOrganizationalUnit | PreventivePerson | PreventivePrimarySource | PreventiveResource | PreventiveVariable | PreventiveVariableGroup | ExtractedAccessPlatform | ExtractedActivity | ExtractedBibliographicResource | ExtractedConsent | ExtractedContactPoint | ExtractedDistribution | ExtractedOrganization | ExtractedOrganizationalUnit | ExtractedPerson | ExtractedPrimarySource | ExtractedResource | ExtractedVariable | ExtractedVariableGroup | PreviewAccessPlatform | PreviewActivity | PreviewBibliographicResource | PreviewConsent | PreviewContactPoint | PreviewDistribution | PreviewOrganization | PreviewOrganizationalUnit | PreviewPerson | PreviewPrimarySource | PreviewResource | PreviewVariable | PreviewVariableGroup | MergedAccessPlatform | MergedActivity | MergedBibliographicResource | MergedConsent | MergedContactPoint | MergedDistribution | MergedOrganization | MergedOrganizationalUnit | MergedPerson | MergedPrimarySource | MergedResource | MergedVariable | MergedVariableGroup]) str | None¶
Get the stem type from a list of models.
- mex.editor.transform.transform_models_to_title(models: Sequence[AdditiveAccessPlatform | AdditiveActivity | AdditiveBibliographicResource | AdditiveConsent | AdditiveContactPoint | AdditiveDistribution | AdditiveOrganization | AdditiveOrganizationalUnit | AdditivePerson | AdditivePrimarySource | AdditiveResource | AdditiveVariable | AdditiveVariableGroup | SubtractiveAccessPlatform | SubtractiveActivity | SubtractiveBibliographicResource | SubtractiveConsent | SubtractiveContactPoint | SubtractiveDistribution | SubtractiveOrganization | SubtractiveOrganizationalUnit | SubtractivePerson | SubtractivePrimarySource | SubtractiveResource | SubtractiveVariable | SubtractiveVariableGroup | PreventiveAccessPlatform | PreventiveActivity | PreventiveBibliographicResource | PreventiveConsent | PreventiveContactPoint | PreventiveDistribution | PreventiveOrganization | PreventiveOrganizationalUnit | PreventivePerson | PreventivePrimarySource | PreventiveResource | PreventiveVariable | PreventiveVariableGroup | ExtractedAccessPlatform | ExtractedActivity | ExtractedBibliographicResource | ExtractedConsent | ExtractedContactPoint | ExtractedDistribution | ExtractedOrganization | ExtractedOrganizationalUnit | ExtractedPerson | ExtractedPrimarySource | ExtractedResource | ExtractedVariable | ExtractedVariableGroup | PreviewAccessPlatform | PreviewActivity | PreviewBibliographicResource | PreviewConsent | PreviewContactPoint | PreviewDistribution | PreviewOrganization | PreviewOrganizationalUnit | PreviewPerson | PreviewPrimarySource | PreviewResource | PreviewVariable | PreviewVariableGroup | MergedAccessPlatform | MergedActivity | MergedBibliographicResource | MergedConsent | MergedContactPoint | MergedDistribution | MergedOrganization | MergedOrganizationalUnit | MergedPerson | MergedPrimarySource | MergedResource | MergedVariable | MergedVariableGroup]) list[EditorValue]¶
Convert a list of models into editor values based on the title config.
- mex.editor.transform.transform_value(value: object, allow_link: bool = True) EditorValue¶
Transform a single object into an editor value ready for rendering.
- mex.editor.transform.transform_values(values: object, allow_link: bool = True) list[EditorValue]¶
Convert a single object or a list of objects into a list of editor values.
mex.editor.types module¶
- class mex.editor.types.EditorUserDatabase(*, read: dict[str, EditorUserPassword] = {}, write: dict[str, EditorUserPassword] = {})¶
Bases:
BaseModelDatabase containing usernames and passwords for the editor users.
- model_computed_fields: ClassVar[Dict[str, ComputedFieldInfo]] = {}¶
A dictionary of computed field names and their corresponding ComputedFieldInfo objects.
- model_config: ClassVar[ConfigDict] = {'extra': 'ignore', 'populate_by_name': True, 'str_max_length': 100000, 'str_min_length': 1, 'str_strip_whitespace': True, 'use_enum_values': True, 'validate_assignment': True, 'validate_default': True}¶
Configuration for the model, should be a dictionary conforming to [ConfigDict][pydantic.config.ConfigDict].
- model_fields: ClassVar[Dict[str, FieldInfo]] = {'read': FieldInfo(annotation=dict[str, EditorUserPassword], required=False, default={}), 'write': FieldInfo(annotation=dict[str, EditorUserPassword], required=False, default={})}¶
Metadata about the fields defined on the model, mapping of field names to [FieldInfo][pydantic.fields.FieldInfo] objects.
This replaces Model.__fields__ from Pydantic V1.
- read: dict[str, EditorUserPassword]¶
- write: dict[str, EditorUserPassword]¶
- class mex.editor.types.EditorUserPassword(secret_value: SecretType)¶
Bases:
SecretStrAn editor password used for basic authentication along with a username.
mex.editor.utils module¶
- mex.editor.utils.load_settings() EditorSettings¶
Reset the settings store and fetch the editor settings.
- async mex.editor.utils.resolve_editor_value(editor_value: EditorValue) None¶
Resolve editor text values to human readable display values.
- mex.editor.utils.resolve_identifier(identifier: str) str¶
Resolve identifiers to human readable display values.