# pyanaconda.ui.gui.spokes package

## Subpackages

- pyanaconda.ui.gui.spokes.advstorage package
  - Submodules
  - pyanaconda.ui.gui.spokes.advstorage.dasd module
  - pyanaconda.ui.gui.spokes.advstorage.fcoe module
  - pyanaconda.ui.gui.spokes.advstorage.iscsi module
  - pyanaconda.ui.gui.spokes.advstorage.zfcp module
  - Module contents
- pyanaconda.ui.gui.spokes.lib package
  - Submodules
  - pyanaconda.ui.gui.spokes.lib.accordion module
  - pyanaconda.ui.gui.spokes.lib.cart module
  - pyanaconda.ui.gui.spokes.lib.custom_storage_helpers module
  - pyanaconda.ui.gui.spokes.lib.dasdfmt module
  - pyanaconda.ui.gui.spokes.lib.detailederror module
  - pyanaconda.ui.gui.spokes.lib.entropy_dialog module
  - pyanaconda.ui.gui.spokes.lib.lang_locale_handler module
  - pyanaconda.ui.gui.spokes.lib.passphrase module
  - pyanaconda.ui.gui.spokes.lib.refresh module
  - pyanaconda.ui.gui.spokes.lib.resize module
  - pyanaconda.ui.gui.spokes.lib.summary module
  - Module contents

## Submodules

## pyanaconda.ui.gui.spokes.custom module

class `pyanaconda.ui.gui.spokes.custom.``CustomPartitioningSpoke`(data, storage, payload, instclass)

  Bases: `pyanaconda.ui.gui.spokes.NormalSpoke`, `pyanaconda.ui.helpers.StorageChecker`

  `MAX_SIZE_PLACES` = 2
  `MIN_SIZE_ENTRY` = Size (1024 KiB)
  `add_new_selector`(device)

    Add an entry for device to the new install Page.

  `apply`()
  `bootLoaderDevices`
  `builderObjects` = ['customStorageWindow', 'containerStore', 'deviceTypeStore', 'partitionStore', 'raidStoreFiltered', 'raidLevelStore', 'addImage', 'removeImage', 'settingsImage', 'mountPointCompletion', 'mountPointStore', 'fileSystemStore']
  `category`

    alias of `SystemCategory`

  `clear_errors`()
  `get_new_devices`()
  `helpFile` = 'CustomSpoke.xml'
  `indirect`
  `initialize`()
  `mainWidgetName` = 'customStorageWindow'
  `on_add_clicked`(button)
  `on_back_clicked`(button)
  `on_configure_clicked`(button)
  `on_container_changed`(combo)
  `on_create_clicked`(button, autopartTypeCombo)
  `on_device_type_changed`(combo)
  `on_fs_type_changed`(combo)
  `on_info_bar_clicked`(*args)
  `on_key_pressed`(widget, event, *args)
  `on_modify_container_clicked`(button)
  `on_page_clicked`(page, mountpointToShow=None)
  `on_reformat_toggled`(widget)
  `on_refresh_clicked`(*args)
  `on_remove_clicked`(button)
  `on_reset_clicked`(*args)
  `on_selector_clicked`(old_selector, selector)
  `on_summary_clicked`(button)
  `on_unlock_clicked` = functools.partial(<pyanaconda.ui.gui.utils.timed_action.<locals>.TimedAction object at 0x7fd4da829b70>, None)
  `on_update_settings_clicked` = functools.partial(<pyanaconda.ui.gui.utils.timed_action.<locals>.TimedAction object at 0x7fd4da829cf8>, None)
  `on_value_changed`(*args)
  `refresh`()
  `run_container_editor`(container=None, name=None)

    Run container edit dialog and return True if changes were made.

  `status`
  `title` = 'MANUAL PARTITIONING'
  `uiFile` = 'spokes/custom.glade'
  `unusedDevices`

## pyanaconda.ui.gui.spokes.datetime_spoke module

class `pyanaconda.ui.gui.spokes.datetime_spoke.``DatetimeSpoke`(*args)

  Bases: `pyanaconda.ui.common.FirstbootSpokeMixIn`, `pyanaconda.ui.gui.spokes.NormalSpoke`

  `add_to_store`(*args, **kwargs)

    The new body for the decorated method.

  `add_to_store_idx`(*args, **kwargs)

    The new body for the decorated method.

  `add_to_store_xlated`(*args, **kwargs)

    The new body for the decorated method.

  `apply`()
  `builderObjects` = ['datetimeWindow', 'days', 'months', 'years', 'regions', 'cities', 'upImage', 'upImage1', 'upImage2', 'downImage', 'downImage1', 'downImage2', 'downImage3', 'configImage', 'citiesFilter', 'daysFilter', 'cityCompletion', 'regionCompletion']
  `category`

    alias of `LocalizationCategory`

  `city_in_region`(model, itr, user_data=None)
  `completed`
  `execute`()
  `existing_date`(days_model, days_iter, user_data=None)
  `helpFile` = 'DateTimeSpoke.xml'
  `icon` = 'preferences-system-time-symbolic'
  `initialize`()
  `mainWidgetName` = 'datetimeWindow'
  `mandatory`
  `on_city_changed`(combo, *args)

    ComboBox emits ::changed signal not only when something is selected, but also when its entry’s text is changed. We need to distinguish between those two cases (‘London’ typed in the entry => no action until ENTER is hit etc.; ‘London’ chosen in the expanded combobox => update timezone map and do all necessary actions). Fortunately when entry is being edited, self._get_active_city returns None.

  `on_city_region_key_released`(entry, event, *args)
  `on_city_region_text_entry_activated`(entry)
  `on_completion_match_selected`(combo, model, itr)
  `on_day_changed`(*args)
  `on_down_hours_clicked`(*args)
  `on_down_minutes_clicked`(*args)
  `on_entry_left`(entry, *args)
  `on_location_changed`(tz_map, location)
  `on_month_changed`(*args)
  `on_ntp_config_clicked`(*args)
  `on_ntp_switched`(switch, *args)
  `on_region_changed`(combo, *args)

    See: | on_city_changed

  `on_timeformat_changed`(button24h, *args)
  `on_up_hours_clicked`(*args)
  `on_up_minutes_clicked`(*args)
  `on_updown_ampm_clicked`(*args)
  `on_year_changed`(*args)
  `ready`
  `refresh`()
  `status`
  `title` = '_TIME & DATE'
  `uiFile` = 'spokes/datetime_spoke.glade'

## pyanaconda.ui.gui.spokes.filter module

class `pyanaconda.ui.gui.spokes.filter.``FilterSpoke`(*args)

  Bases: `pyanaconda.ui.gui.spokes.NormalSpoke`

  `apply`()
  `builderObjects` = ['diskStore', 'filterWindow', 'searchModel', 'multipathModel', 'otherModel', 'zModel']
  `category`

    alias of `SystemCategory`

  `helpFile` = 'FilterSpoke.xml'
  `indirect`
  `initialize`()
  `mainWidgetName` = 'filterWindow'
  `on_add_dasd_clicked`(widget, *args)
  `on_add_fcoe_clicked`(widget, *args)
  `on_add_iscsi_clicked`(widget, *args)
  `on_add_zfcp_clicked`(widget, *args)
  `on_back_clicked`(button)
  `on_clear_icon_clicked`(entry, icon_pos, event)
  `on_filter_changed` = functools.partial(<pyanaconda.ui.gui.utils.timed_action.<locals>.TimedAction object at 0x7fd4d9bb3f28>, None)
  `on_multipath_type_changed`(combo)
  `on_other_type_combo_changed`(combo)
  `on_page_switched`(notebook, newPage, newPageNum, *args)
  `on_refresh_clicked` = functools.partial(<pyanaconda.ui.gui.utils.timed_action.<locals>.TimedAction object at 0x7fd4d9bb9128>, None)
  `on_row_toggled`(button, path)
  `on_search_type_changed`(combo)
  `on_summary_clicked`(button)
  `on_z_type_combo_changed`(combo)
  `refresh`()
  `status`
  `title` = '_INSTALLATION DESTINATION'
  `uiFile` = 'spokes/filter.glade'

## pyanaconda.ui.gui.spokes.keyboard module

class `pyanaconda.ui.gui.spokes.keyboard.``KeyboardSpoke`(*args)

  Bases: `pyanaconda.ui.gui.spokes.NormalSpoke`

  `apply`()
  `builderObjects` = ['addedLayoutStore', 'keyboardWindow', 'layoutTestBuffer']
  `category`

    alias of `LocalizationCategory`

  `completed`
  `helpFile` = 'KeyboardSpoke.xml'
  `icon` = 'input-keyboard-symbolic'
  `initialize`()
  `mainWidgetName` = 'keyboardWindow'
  `on_add_clicked`(button)
  `on_down_clicked`(button)
  `on_options_clicked`(*args)
  `on_preview_clicked`(button)
  `on_remove_clicked`(button)
  `on_selection_changed`(selection, *args)
  `on_up_clicked`(button)
  `ready`
  `refresh`()
  `status`
  `title` = '_KEYBOARD'
  `uiFile` = 'spokes/keyboard.glade'

## pyanaconda.ui.gui.spokes.langsupport module

class `pyanaconda.ui.gui.spokes.langsupport.``LangsupportSpoke`(*args, **kwargs)

  Bases: `pyanaconda.ui.gui.spokes.lib.lang_locale_handler.LangLocaleHandler`, `pyanaconda.ui.gui.spokes.NormalSpoke`

  `apply`()
  `builderObjects` = ['languageStore', 'languageStoreFilter', 'localeStore', 'langsupportWindow']
  `category`

    alias of `LocalizationCategory`

  `completed`
  `focusWidgetName` = 'languageEntry'
  `helpFile` = 'LangSupportSpoke.xml'
  `icon` = 'accessories-character-map-symbolic'
  `initialize`()
  `mainWidgetName` = 'langsupportWindow'
  `mandatory`
  `on_locale_toggled`(renderer, path)
  `refresh`()
  `showable`
  `status`
  `title` = '_LANGUAGE SUPPORT'
  `uiFile` = 'spokes/langsupport.glade'

## pyanaconda.ui.gui.spokes.network module

## pyanaconda.ui.gui.spokes.password module

class `pyanaconda.ui.gui.spokes.password.``PasswordSpoke`(*args)

  Bases: `pyanaconda.ui.common.FirstbootSpokeMixIn`, `pyanaconda.ui.gui.spokes.NormalSpoke`, `pyanaconda.ui.gui.helpers.GUISpokeInputCheckHandler`

  `apply`()
  `builderObjects` = ['passwordWindow']
  `category`

    alias of `UserSettingsCategory`

  `completed`
  `focusWidgetName` = 'pw'
  `helpFile` = 'PasswordSpoke.xml'
  `icon` = 'dialog-password-symbolic'
  `initialize`()
  `mainWidgetName` = 'passwordWindow'
  `mandatory`
  `on_back_clicked`(button)
  `on_password_changed`(editable, data=None)
  `refresh`()
  `sensitive`
  `status`
  `title` = '_ROOT PASSWORD'
  `uiFile` = 'spokes/password.glade'

## pyanaconda.ui.gui.spokes.software module

class `pyanaconda.ui.gui.spokes.software.``SoftwareSelectionSpoke`(*args, **kwargs)

  Bases: `pyanaconda.ui.gui.spokes.NormalSpoke`

  `apply`()
  `builderObjects` = ['addonStore', 'environmentStore', 'softwareWindow']
  `category`

    alias of `SoftwareCategory`

  `changed`
  `checkSoftwareSelection`()
  `completed`
  `environment`

    A wrapper for the environment specification in kickstart

  `environment_valid`

    Return if the currently set environment is valid (represents an environment known by the payload)

  `environmentid`

    Return the “machine readable” environment id

    Alternatively we could have just “canonicalized” the environment description to the “machine readable” format when reading it from kickstart for the first time. But this could result in input and output kickstart, which would be rather confusing for the user. So we don’t touch the specification from kickstart if it is valid and use this property when we need the “machine readable” form.

  `helpFile` = 'SoftwareSpoke.xml'
  `icon` = 'package-x-generic-symbolic'
  `initialize`()
  `mainWidgetName` = 'softwareWindow'
  `mandatory`
  `on_addon_activated`(listbox, row)
  `on_checkbox_toggled`(button, row)
  `on_environment_activated`(listbox, row)
  `on_info_bar_clicked`(*args)
  `on_radio_button_toggled`(radio, row)
  `ready`
  `refresh`()
  `refreshAddons`()
  `showable`
  `status`
  `title` = '_SOFTWARE SELECTION'
  `txid_valid`
  `uiFile` = 'spokes/software.glade'

## pyanaconda.ui.gui.spokes.source module

class `pyanaconda.ui.gui.spokes.source.``SourceSpoke`(*args, **kwargs)

  Bases: `pyanaconda.ui.gui.spokes.NormalSpoke`, `pyanaconda.ui.gui.helpers.GUISpokeInputCheckHandler`

  `apply`()
  `builderObjects` = ['isoChooser', 'isoFilter', 'partitionStore', 'sourceWindow', 'dirImage', 'repoStore']
  `category`

    alias of `SoftwareCategory`

  `changed`
  `completed`

    WARNING: This can be called before _initialize is done, make sure that it doesn’t access things that are not setup (eg. payload.*) until it is ready

  `helpFile` = 'SourceSpoke.xml'
  `icon` = 'media-optical-symbolic'
  `initialize`()
  `mainWidgetName` = 'sourceWindow'
  `mandatory`
  `on_addRepo_clicked`(button)

    Add a new repository

  `on_back_clicked`(button)

    If any input validation checks failed, keep the user on the screen. Otherwise, do the usual thing.

  `on_chooser_clicked`(button)
  `on_info_bar_clicked`(*args)
  `on_noUpdatesCheckbox_toggled`(*args)

    Toggle the enable state of the updates repo

    Before final release this will also toggle the updates-testing repo

  `on_protocol_changed`(combo)
  `on_proxy_clicked`(button)
  `on_removeRepo_clicked`(button)

    Remove the selected repository

  `on_repoEnable_toggled`(renderer, path)

    Called when the repo Enable checkbox is clicked

  `on_repoMirrorlistCheckbox_toggled`(*args)

    mirror state changed

  `on_repoNameEntry_changed`(entry)

    repo name changed

  `on_repoProtocolComboBox_changed`(combobox, user_data=None)
  `on_repoProxy_changed`(*args)

    Update the selected repo’s proxy settings

  `on_repoSelection_changed`(*args)

    Called when the selection changed.

    Update the repo text boxes with the current information

  `on_repoStore_row_changed`(model, path, itr, user_data=None)
  `on_repoStore_row_deleted`(model, path, user_data=None)
  `on_repoStore_row_inserted`(model, path, itr, user_data=None)
  `on_repoUrl_changed`(editable, data=None)

    proxy url or protocol changed

  `on_resetRepos_clicked`(button)

    Revert to the default list of repositories

  `on_source_toggled`(button, relatedBox)
  `on_urlEntry_changed`(editable, data=None)
  `on_verify_iso_clicked`(button)
  `on_verify_media_clicked`(button)
  `ready`
  `refresh`()
  `showable`
  `status`
  `title` = '_INSTALLATION SOURCE'
  `uiFile` = 'spokes/source.glade'

## pyanaconda.ui.gui.spokes.storage module

TODO:

> - add button within sw_needs text in options dialogs 2,3

> - udev data gathering
>     - udev fwraid, mpath would sure be nice
> - status/completed
>     - what are noteworthy status events?
>         - disks selected
>             - exclusiveDisks non-empty

>         - sufficient space for software selection

>         - autopart selected

>         - custom selected
>             - performing custom configuration

>         - storage configuration complete

> - spacing and border width always 6

class `pyanaconda.ui.gui.spokes.storage.``StorageSpoke`(*args, **kwargs)

  Bases: `pyanaconda.ui.gui.spokes.NormalSpoke`, `pyanaconda.ui.helpers.StorageChecker`

  `advancedOverviews`
  `apply`()
  `builderObjects` = ['storageWindow', 'addSpecializedImage']
  `category`

    alias of `SystemCategory`

  `completed`
  `execute`(*args, **kwargs)

    The new body for the decorated method.

  `helpFile` = 'StorageSpoke.xml'
  `icon` = 'drive-harddisk-symbolic'
  `initialize`()
  `localOverviews`
  `mainWidgetName` = 'storageWindow'
  `on_back_clicked`(button)
  `on_custom_toggled`(button)
  `on_disks_key_released`(box, event)
  `on_info_bar_clicked`(*args)
  `on_specialized_clicked`(button)
  `on_summary_clicked`(button)
  `ready`
  `refresh`()
  `run_dasdfmt`()

    Though the same function exists in pyanaconda.ui.gui.spokes.lib.dasdfmt, this instance doesn’t include any of the UI pieces and should only really be getting called on ks installations with “zerombr”.

  `run_lightbox_dialog`(dialog)
  `showable`
  `status`

    A short string describing the current status of storage setup.

  `title` = 'INSTALLATION _DESTINATION'
  `uiFile` = 'spokes/storage.glade'

## pyanaconda.ui.gui.spokes.user module

class `pyanaconda.ui.gui.spokes.user.``UserSpoke`(*args)

  Bases: `pyanaconda.ui.common.FirstbootSpokeMixIn`, `pyanaconda.ui.gui.spokes.NormalSpoke`, `pyanaconda.ui.gui.helpers.GUISpokeInputCheckHandler`

  `apply`()
  `builderObjects` = ['userCreationWindow']
  `category`

    alias of `UserSettingsCategory`

  `completed`
  `focusWidgetName` = 't_fullname'
  `full_name_changed`(editable, data=None)

    Called by Gtk callback when the full name field changes.

  `helpFile` = 'UserSpoke.xml'
  `icon` = 'avatar-default-symbolic'
  `initialize`()
  `mainWidgetName` = 'userCreationWindow'
  `mandatory`

    Only mandatory if the root pw hasn’t been set in the UI eg. not mandatory if the root account was locked in a kickstart

  `on_admin_toggled`(togglebutton, data=None)
  `on_advanced_clicked`(_button, data=None)

    Handler for the Advanced.. button. It starts the Advanced dialog for setting homedit, uid, gid and groups.

  `on_back_clicked`(button)
  `on_username_set_by_user`(editable, data=None)

    Called by Gtk on user-driven changes to the username field.

    This handler is blocked during changes from the username guesser.

  `password_changed`(editable=None, data=None)

    Update the password strength level bar

  `refresh`()
  `sensitive`
  classmethod `should_run`(environment, data)
  `status`
  `title` = '_USER CREATION'
  `uiFile` = 'spokes/user.glade'
  `usepassword_toggled`(togglebutton=None, data=None)

    Called by Gtk callback when the “Use password” check button is toggled. It will make password entries in/sensitive.

  `username_changed`(editable, data=None)

    Called by Gtk on all username changes.

class `pyanaconda.ui.gui.spokes.user.``AdvancedUserDialog`(user, data)

  Bases: `pyanaconda.ui.gui.GUIObject`, `pyanaconda.ui.gui.helpers.GUIDialogInputCheckHandler`

  `apply`()
  `builderObjects` = ['advancedUserDialog', 'uid', 'gid']
  `initialize`()
  `mainWidgetName` = 'advancedUserDialog'
  `on_gid_checkbox_toggled`(togglebutton, data=None)
  `on_gid_mnemonic_activate`(widget, group_cycling, user_data=None)
  `on_uid_checkbox_toggled`(togglebutton, data=None)
  `on_uid_mnemonic_activate`(widget, group_cycling, user_data=None)
  `refresh`()
  `run`()
  `uiFile` = 'spokes/advanced_user.glade'

## pyanaconda.ui.gui.spokes.welcome module

class `pyanaconda.ui.gui.spokes.welcome.``WelcomeLanguageSpoke`(*args, **kwargs)

  Bases: `pyanaconda.ui.gui.spokes.lib.lang_locale_handler.LangLocaleHandler`, `pyanaconda.ui.gui.spokes.StandaloneSpoke`

  `apply`()
  `builderObjects` = ['languageStore', 'languageStoreFilter', 'localeStore', 'welcomeWindow', 'betaWarnDialog', 'unsupportedHardwareDialog']
  `completed`
  `focusWidgetName` = 'languageEntry'
  `helpFile` = 'WelcomeSpoke.xml'
  `initialize`()
  `mainWidgetName` = 'welcomeWindow'
  `on_lang_selection_changed`(selection)
  `on_locale_selection_changed`(selection)
  `preForHub`

    alias of `SummaryHub`

  `priority` = 0
  `refresh`()
  `retranslate`()
  `uiFile` = 'spokes/welcome.glade'

## Module contents

class `pyanaconda.ui.gui.spokes.``StandaloneSpoke`(data, storage, payload, instclass)

  Bases: `pyanaconda.ui.gui.GUIObject`, `pyanaconda.ui.common.StandaloneSpoke`

  `handles_autostep` = True

class `pyanaconda.ui.gui.spokes.``NormalSpoke`(data, storage, payload, instclass)

  Bases: `pyanaconda.ui.gui.GUIObject`, `pyanaconda.ui.common.NormalSpoke`

  `on_back_clicked`(window)